<?php /* SVN FILE: $Id: SassDebugNode.php 49 2010-04-04 10:51:24Z chris.l.yates $ */ /**
* SassDebugNode class file. * @author Chris Yates <chris.l.yates@gmail.com> * @copyright Copyright (c) 2010 PBM Web Development * @license http://phamlp.googlecode.com/files/license.txt * @package PHamlP * @subpackage Sass.tree */
/**
* SassDebugNode class. * Represents a Sass @debug or @warn directive. * @package PHamlP * @subpackage Sass.tree */
class SassDebugNode extends SassNode {
const IDENTIFIER = '@'; const MATCH = '/^@(?:debug|warn)\s+(.+?)\s*;?$/'; const MESSAGE = 1; /** * @var string the debug/warning message */ private $message; /** * @var array parameters for the message; * only used by internal warning messages */ private $params; /** * @var boolean true if this is a warning */ private $warning; /** * SassDebugNode. * @param object source token * @param mixed string: an internally generated warning message about the * source * boolean: the source token is a @debug or @warn directive containing the * message; True if this is a @warn directive * @param array parameters for the message * @return SassDebugNode */ public function __construct($token, $message=false, $params=array()) { parent::__construct($token); if (is_string($message)) { $this->message = $message; $this->warning = true; } else { preg_match(self::MATCH, $token->source, $matches); $this->message = $matches[self::MESSAGE]; $this->warning = $message; } $this->params = $params; } /** * Parse this node. * This raises an error. * @return array An empty array */ public function parse($context) { if (!$this->warning || ($this->root->parser->quiet === false)) { set_error_handler(array($this, 'errorHandler')); trigger_error(($this->warning ? $this->interpolate(Phamlp::t('sass', $this->message, $this->params), $context) : $this->evaluate(Phamlp::t('sass', $this->message, $this->params), $context)->toString())); restore_error_handler(); } return array(); } /** * Error handler for degug and warning statements. * @param int Error number * @param string Message */ public function errorHandler($errno, $message) { echo '<div style="background-color:#ce4dd6;border-bottom:1px dashed #88338d;color:white;font:10pt verdana;margin:0;padding:0.5em 2%;width:96%;"><p style="height:auto;margin:0.25em 0;padding:0;width:100%;"><span style="font-weight:bold;">SASS '.($this->warning ? 'WARNING' : 'DEBUG').":</span> $message</p><p style=\"margin:0.1em;padding:0;padding-left:0.5em;width:100%;\">{$this->filename}::{$this->line}</p><p style=\"margin:0.1em;padding:0;padding-left:0.5em;width:100%;\">Source: {$this->source}</p></div>"; }
}