diff --git a/src/markup/syntax/highlighter/xhpast/PhutilXHPASTSyntaxHighlighter.php b/src/markup/syntax/highlighter/xhpast/PhutilXHPASTSyntaxHighlighter.php index 8a77391..4d66f5c 100644 --- a/src/markup/syntax/highlighter/xhpast/PhutilXHPASTSyntaxHighlighter.php +++ b/src/markup/syntax/highlighter/xhpast/PhutilXHPASTSyntaxHighlighter.php @@ -1,117 +1,122 @@ getRootNode()->getTokens() as $token) { - $value = phutil_escape_html($token->getValue()); - $class = null; - $multi = false; - switch ($token->getTypeName()) { - case 'T_WHITESPACE': - break; - case 'T_DOC_COMMENT': - $class = 'dc'; - $multi = true; - break; - case 'T_COMMENT': - $class = 'c'; - $multi = true; - break; - case 'T_CONSTANT_ENCAPSED_STRING': - case 'T_ENCAPSED_AND_WHITESPACE': - case 'T_INLINE_HTML': - $class = 's'; - $multi = true; - break; - case 'T_VARIABLE': - $class = 'nv'; - break; - case 'T_OPEN_TAG': - case 'T_OPEN_TAG_WITH_ECHO': - case 'T_CLOSE_TAG': - $class = 'o'; - break; - case 'T_OBJECT_OPERATOR': - $next = 'na'; - $class = 'k'; - break; - case 'T_LNUMBER': - case 'T_DNUMBER': - $class = 'm'; - break; - case 'T_STRING': - static $magic = array( - 'true' => true, - 'false' => true, - 'null' => true, - ); - if (isset($magic[$value])) { + $out = array(); + $next = null; + foreach ($tree->getRootNode()->getTokens() as $token) { + $value = phutil_escape_html($token->getValue()); + $class = null; + $multi = false; + switch ($token->getTypeName()) { + case 'T_WHITESPACE': + break; + case 'T_DOC_COMMENT': + $class = 'dc'; + $multi = true; + break; + case 'T_COMMENT': + $class = 'c'; + $multi = true; + break; + case 'T_CONSTANT_ENCAPSED_STRING': + case 'T_ENCAPSED_AND_WHITESPACE': + case 'T_INLINE_HTML': + $class = 's'; + $multi = true; + break; + case 'T_VARIABLE': + $class = 'nv'; + break; + case 'T_OPEN_TAG': + case 'T_OPEN_TAG_WITH_ECHO': + case 'T_CLOSE_TAG': + $class = 'o'; + break; + case 'T_OBJECT_OPERATOR': + $next = 'na'; $class = 'k'; break; + case 'T_LNUMBER': + case 'T_DNUMBER': + $class = 'm'; + break; + case 'T_STRING': + static $magic = array( + 'true' => true, + 'false' => true, + 'null' => true, + ); + if (isset($magic[$value])) { + $class = 'k'; + break; + } + if ($next) { + $class = $next; + $next = null; + } else { + $class = 'nx'; + } + break; + default: + $class = 'k'; + break; + } + if ($class) { + $value = ''.$value.''; + if ($multi) { + $value = str_replace( + "\n", + "\n", + $value); } - if ($next) { - $class = $next; - $next = null; - } else { - $class = 'nx'; - } - break; - default: - $class = 'k'; - break; - } - if ($class) { - $value = ''.$value.''; - if ($multi) { - $value = str_replace( - "\n", - "\n", - $value); + $out[] = $value; + } else { + $out[] = $value; } - $out[] = $value; - } else { - $out[] = $value; } - } - if ($scrub) { - array_shift($out); - } + if ($scrub) { + array_shift($out); + } - return rtrim(implode('', $out)); + return rtrim(implode('', $out)); + } catch (Exception $ex) { + phlog($ex); + throw $ex; + } } } diff --git a/src/markup/syntax/highlighter/xhpast/__init__.php b/src/markup/syntax/highlighter/xhpast/__init__.php index 2679642..9789b1a 100644 --- a/src/markup/syntax/highlighter/xhpast/__init__.php +++ b/src/markup/syntax/highlighter/xhpast/__init__.php @@ -1,13 +1,14 @@