Beispiel #1
0
function _test_escape_token($token)
{
    $escaped = LuminousUtils::escape_token($token);
    // name should be unchanged
    assert($token[0] === $escaped[0]);
    $expected = $token[2] ? $token[1] : LuminousUtils::escape_string($token[1]);
    assert($escaped[1] === $expected);
    assert($escaped[2]);
}
Beispiel #2
0
 static function str_filter($token)
 {
     if (strpos($token[1], '~') == false) {
         return $token;
     }
     $token = LuminousUtils::escape_token($token);
     $token[1] = preg_replace('/~(?:\\d+|.)/', '<INTERPOLATION>$0</INTERPOLATION>', $token[1]);
     return $token;
 }
Beispiel #3
0
 static function comment_filter($token)
 {
     $token = LuminousUtils::escape_token($token);
     $str =& $token[1];
     // It pays to run the strpos checks first.
     if (strpos(substr($str, 1), '"') !== false) {
         $str = preg_replace('/(?<!^)"(?>[^"]*)"/', "<STRING>\$0</STRING>", $str);
     }
     if (strpos($str, ':') !== false) {
         $str = preg_replace('/(?<=^")((?>\\W*))((?>[A-Z]\\w+(?>(?>\\s+\\w+)*)))(:\\s*)(.*)/', '$1<DOCTAG>$2</DOCTAG>$3<DOCSTR>$4</DOCSTR>', $str);
     }
     return $token;
 }
Beispiel #4
0
 static function str_filter($token)
 {
     if ($token[1][0] !== '"' && $token[0] !== 'HEREDOC') {
         return $token;
     } elseif (strpos($token[1], '$') === false) {
         return $token;
     }
     $token = LuminousUtils::escape_token($token);
     // matches $var, ${var} and {$var} syntax
     $token[1] = preg_replace('/
   (?: \\$\\{ | \\{\\$ ) [^}]++ \\}
   |
   \\$\\$?[a-zA-Z_]\\w*
   /x', '<VARIABLE>$0</VARIABLE>', $token[1]);
     return $token;
 }
Beispiel #5
0
 public static function string_filter($token)
 {
     $token = LuminousUtils::escape_token($token);
     $token[1] = preg_replace("/\\\$(?:\\w+|\\{[^}\n]+\\})/", '<VARIABLE>$0</VARIABLE>', $token[1]);
     return $token;
 }
 /**
  * @brief Tries to highlight PCRE style regular expression syntax
  */
 static function pcre($token, $delimited = true)
 {
     $token = self::string($token);
     $token = LuminousUtils::escape_token($token);
     $str =& $token[1];
     $flags = array();
     if ($delimited) {
         $str = preg_replace('/^[^[:alnum:]<>\\s]/', '<DELIMITER>$0</DELIMITER>', $str);
         if (preg_match("/[[:alpha:]]+\$/", $str, $matches)) {
             $m = $matches[0];
             $flags = str_split($m);
             $str = preg_replace("/((?<!\\A)[^[:alnum:]\\s<>])([[:alpha:]]+)\$/", "<DELIMITER>\$1</DELIMITER><KEYWORD>\$2</KEYWORD>", $str);
         } else {
             $str = preg_replace('/[^[:alnum:]<>]$/', '<DELIMITER>$0</DELIMITER>', $str);
         }
     }
     $str = preg_replace("/((?<!\\\\)[\\*\\+\\.|])|((?<![\\(\\\\])\\?)/", "<REGEX_OPERATOR>\$0</REGEX_OPERATOR>", $str);
     $str = preg_replace("/(?<=\\()\\?(?:(?:[a-zA-Z:!|=])|(?:(?:&lt;)[=!]))/", "<REGEX_SUBPATTERN>\$0</REGEX_SUBPATTERN>", $str);
     $str = preg_replace("/(?<!\\\\)[\\(\\)]/", "<REGEX_SUBPATTERN_MARKER>\$0</REGEX_SUBPATTERN_MARKER>", $str);
     $str = preg_replace("/(?<!\\\\)[\\[\\]]/", "<REGEX_CLASS_MARKER>\$0</REGEX_CLASS_MARKER>", $str);
     $str = preg_replace("/(?<!\\\\)\n      \\{\n        (\n          ((?>\\d+)(,(?>\\d+)?)?)\n          |\n          (,(?>\\d+))\n        )\n      \\}/x", "<REGEX_REPEAT_MARKER>\$0</REGEX_REPEAT_MARKER>", $str);
     // extended regex: # signifies a comment
     if (in_array('x', $flags)) {
         $str = preg_replace('/(?<!\\\\)#.*$/m', '<COMMENT>$0</COMMENT>', $str);
     }
     return $token;
 }
Beispiel #7
0
 static function preprocessor_filter($token)
 {
     $token = LuminousUtils::escape_token($token);
     $token[1] = preg_replace_callback("@\n      (?P<STR>  \" (?> [^\\\\\n\"]+ | \\\\. )* (?: \"|\$) | (?<=&lt;) .*? (?=&gt;))\n      | // .*\n      | /\\* (?s:.*?) (\\*/ | \$)\n    @x", array('LuminousCppScanner', 'preprocessor_filter_cb'), $token[1]);
     return $token;
 }