From 48d7424647b146a66c5bde93ee836919933a4150 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Fri, 11 Dec 2009 01:16:01 +0100 Subject: added geshi syntax highlighter --- paste/include/geshi/.project | 17 + .../geshi/classes/class.geshicodecontext.php | 550 ++++++++++ paste/include/geshi/classes/class.geshicontext.php | 721 +++++++++++++ .../geshi/classes/class.geshistringcontext.php | 190 ++++ paste/include/geshi/classes/class.geshistyler.php | 224 +++++ .../css/class.geshicssinlinemediacontext.php | 60 ++ .../php/class.geshiphpdoublestringcontext.php | 182 ++++ .../geshi/contexts/codeworker/codeworker.php | 126 +++ .../geshi/contexts/codeworker/cworkercwt.php | 138 +++ paste/include/geshi/contexts/codeworker/cwt.php | 41 + .../geshi/contexts/codeworker/roughtext.php | 58 ++ .../geshi/contexts/common/double_string.php | 51 + .../geshi/contexts/common/multi_comment.php | 46 + .../geshi/contexts/common/single_comment.php | 46 + .../geshi/contexts/common/single_string.php | 51 + .../geshi/contexts/common/single_string_eol.php | 51 + paste/include/geshi/contexts/css/at_rule.php | 74 ++ .../geshi/contexts/css/attribute_selector.php | 49 + paste/include/geshi/contexts/css/css.php | 103 ++ paste/include/geshi/contexts/css/inline_media.php | 54 + paste/include/geshi/contexts/css/rule.php | 301 ++++++ paste/include/geshi/contexts/css/string.php | 55 + paste/include/geshi/contexts/delphi/asm.php | 271 +++++ paste/include/geshi/contexts/delphi/delphi.php | 382 +++++++ .../geshi/contexts/delphi/exports_brackets.php | 178 ++++ paste/include/geshi/contexts/delphi/extern.php | 131 +++ .../geshi/contexts/delphi/multi_comment.php | 51 + .../include/geshi/contexts/delphi/preprocessor.php | 51 + paste/include/geshi/contexts/delphi/property.php | 157 +++ .../geshi/contexts/delphi/property_index.php | 143 +++ paste/include/geshi/contexts/doxygen/doxygen.php | 44 + paste/include/geshi/contexts/doxygen/link.php | 46 + paste/include/geshi/contexts/doxygen/tag.php | 46 + paste/include/geshi/contexts/html/comment.php | 46 + paste/include/geshi/contexts/html/css.php | 49 + paste/include/geshi/contexts/html/doctype.php | 50 + paste/include/geshi/contexts/html/html.php | 55 + paste/include/geshi/contexts/html/javascript.php | 49 + paste/include/geshi/contexts/html/string.php | 56 ++ .../geshi/contexts/html/string_javascript.php | 55 + paste/include/geshi/contexts/html/tag.php | 98 ++ .../geshi/contexts/javascript/javascript.php | 187 ++++ paste/include/geshi/contexts/php/double_string.php | 57 ++ paste/include/geshi/contexts/php/doxygen.php | 45 + paste/include/geshi/contexts/php/heredoc.php | 60 ++ paste/include/geshi/contexts/php/php.php | 910 +++++++++++++++++ paste/include/geshi/contexts/php/php4.php | 851 ++++++++++++++++ paste/include/geshi/contexts/php/php5.php | 900 +++++++++++++++++ .../include/geshi/contexts/php/single_comment.php | 47 + paste/include/geshi/contexts/qbasic/comment.php | 47 + paste/include/geshi/contexts/qbasic/qbasic.php | 68 ++ paste/include/geshi/contexts/qbasic/string.php | 46 + paste/include/geshi/contexts/web3d/comment.php | 48 + paste/include/geshi/contexts/web3d/string.php | 50 + .../geshi/contexts/web3d/string_javascript.php | 51 + paste/include/geshi/contexts/web3d/vrml1.php | 214 ++++ paste/include/geshi/contexts/web3d/vrml97.php | 218 ++++ paste/include/geshi/contexts/web3d/x3d_ascii.php | 221 ++++ paste/include/geshi/functions.geshi.php | 282 ++++++ .../geshi/languages/codeworker/codeworker.php | 52 + paste/include/geshi/languages/css/css.php | 52 + paste/include/geshi/languages/delphi/delphi.php | 54 + paste/include/geshi/languages/html/html.php | 52 + .../geshi/languages/javascript/javascript.php | 52 + paste/include/geshi/languages/php/php.php | 53 + paste/include/geshi/languages/php/php4.php | 54 + paste/include/geshi/languages/php/php5.php | 53 + paste/include/geshi/languages/qbasic/qbasic.php | 52 + paste/include/geshi/languages/web3d/vrml97.php | 46 + .../include/geshi/scripts/get-keywords/docs/README | 23 + .../geshi/scripts/get-keywords/get-keywords.php | 143 +++ .../languages/css/class.csskeywordgetter.php | 101 ++ .../languages/css/class.cssxmlparser.php | 112 +++ .../languages/html/class.htmlkeywordgetter.php | 96 ++ .../javascript/class.javascriptkeywordgetter.php | 121 +++ .../javascript/class.javascriptxmlparser.php | 107 ++ .../languages/php/class.phpkeywordgetter.php | 120 +++ .../languages/php/class.phpxmlparser.php | 107 ++ .../get-keywords/lib/class.keywordgetter.php | 184 ++++ .../get-keywords/lib/class.keywordgettererror.php | 97 ++ .../lib/class.keywordgetterstrategy.php | 105 ++ .../get-keywords/lib/class.keywordxmlparser.php | 58 ++ .../get-keywords/lib/functions.get-keywords.php | 95 ++ .../get-keywords/lib/pear/Console/Getopt.php | 251 +++++ .../geshi/scripts/get-keywords/lib/pear/PEAR.php | 1055 ++++++++++++++++++++ .../scripts/get-keywords/lib/pear/XML/Parser.php | 684 +++++++++++++ 86 files changed, 13427 insertions(+) create mode 100644 paste/include/geshi/.project create mode 100644 paste/include/geshi/classes/class.geshicodecontext.php create mode 100644 paste/include/geshi/classes/class.geshicontext.php create mode 100644 paste/include/geshi/classes/class.geshistringcontext.php create mode 100644 paste/include/geshi/classes/class.geshistyler.php create mode 100644 paste/include/geshi/classes/css/class.geshicssinlinemediacontext.php create mode 100644 paste/include/geshi/classes/php/class.geshiphpdoublestringcontext.php create mode 100644 paste/include/geshi/contexts/codeworker/codeworker.php create mode 100644 paste/include/geshi/contexts/codeworker/cworkercwt.php create mode 100644 paste/include/geshi/contexts/codeworker/cwt.php create mode 100644 paste/include/geshi/contexts/codeworker/roughtext.php create mode 100644 paste/include/geshi/contexts/common/double_string.php create mode 100644 paste/include/geshi/contexts/common/multi_comment.php create mode 100644 paste/include/geshi/contexts/common/single_comment.php create mode 100644 paste/include/geshi/contexts/common/single_string.php create mode 100644 paste/include/geshi/contexts/common/single_string_eol.php create mode 100644 paste/include/geshi/contexts/css/at_rule.php create mode 100644 paste/include/geshi/contexts/css/attribute_selector.php create mode 100644 paste/include/geshi/contexts/css/css.php create mode 100644 paste/include/geshi/contexts/css/inline_media.php create mode 100644 paste/include/geshi/contexts/css/rule.php create mode 100644 paste/include/geshi/contexts/css/string.php create mode 100644 paste/include/geshi/contexts/delphi/asm.php create mode 100644 paste/include/geshi/contexts/delphi/delphi.php create mode 100644 paste/include/geshi/contexts/delphi/exports_brackets.php create mode 100644 paste/include/geshi/contexts/delphi/extern.php create mode 100644 paste/include/geshi/contexts/delphi/multi_comment.php create mode 100644 paste/include/geshi/contexts/delphi/preprocessor.php create mode 100644 paste/include/geshi/contexts/delphi/property.php create mode 100644 paste/include/geshi/contexts/delphi/property_index.php create mode 100644 paste/include/geshi/contexts/doxygen/doxygen.php create mode 100644 paste/include/geshi/contexts/doxygen/link.php create mode 100644 paste/include/geshi/contexts/doxygen/tag.php create mode 100644 paste/include/geshi/contexts/html/comment.php create mode 100644 paste/include/geshi/contexts/html/css.php create mode 100644 paste/include/geshi/contexts/html/doctype.php create mode 100644 paste/include/geshi/contexts/html/html.php create mode 100644 paste/include/geshi/contexts/html/javascript.php create mode 100644 paste/include/geshi/contexts/html/string.php create mode 100644 paste/include/geshi/contexts/html/string_javascript.php create mode 100644 paste/include/geshi/contexts/html/tag.php create mode 100644 paste/include/geshi/contexts/javascript/javascript.php create mode 100644 paste/include/geshi/contexts/php/double_string.php create mode 100644 paste/include/geshi/contexts/php/doxygen.php create mode 100644 paste/include/geshi/contexts/php/heredoc.php create mode 100644 paste/include/geshi/contexts/php/php.php create mode 100644 paste/include/geshi/contexts/php/php4.php create mode 100644 paste/include/geshi/contexts/php/php5.php create mode 100644 paste/include/geshi/contexts/php/single_comment.php create mode 100644 paste/include/geshi/contexts/qbasic/comment.php create mode 100644 paste/include/geshi/contexts/qbasic/qbasic.php create mode 100644 paste/include/geshi/contexts/qbasic/string.php create mode 100644 paste/include/geshi/contexts/web3d/comment.php create mode 100644 paste/include/geshi/contexts/web3d/string.php create mode 100644 paste/include/geshi/contexts/web3d/string_javascript.php create mode 100644 paste/include/geshi/contexts/web3d/vrml1.php create mode 100644 paste/include/geshi/contexts/web3d/vrml97.php create mode 100644 paste/include/geshi/contexts/web3d/x3d_ascii.php create mode 100644 paste/include/geshi/functions.geshi.php create mode 100644 paste/include/geshi/languages/codeworker/codeworker.php create mode 100644 paste/include/geshi/languages/css/css.php create mode 100644 paste/include/geshi/languages/delphi/delphi.php create mode 100644 paste/include/geshi/languages/html/html.php create mode 100644 paste/include/geshi/languages/javascript/javascript.php create mode 100644 paste/include/geshi/languages/php/php.php create mode 100644 paste/include/geshi/languages/php/php4.php create mode 100644 paste/include/geshi/languages/php/php5.php create mode 100644 paste/include/geshi/languages/qbasic/qbasic.php create mode 100644 paste/include/geshi/languages/web3d/vrml97.php create mode 100644 paste/include/geshi/scripts/get-keywords/docs/README create mode 100644 paste/include/geshi/scripts/get-keywords/get-keywords.php create mode 100644 paste/include/geshi/scripts/get-keywords/languages/css/class.csskeywordgetter.php create mode 100644 paste/include/geshi/scripts/get-keywords/languages/css/class.cssxmlparser.php create mode 100644 paste/include/geshi/scripts/get-keywords/languages/html/class.htmlkeywordgetter.php create mode 100644 paste/include/geshi/scripts/get-keywords/languages/javascript/class.javascriptkeywordgetter.php create mode 100644 paste/include/geshi/scripts/get-keywords/languages/javascript/class.javascriptxmlparser.php create mode 100644 paste/include/geshi/scripts/get-keywords/languages/php/class.phpkeywordgetter.php create mode 100644 paste/include/geshi/scripts/get-keywords/languages/php/class.phpxmlparser.php create mode 100644 paste/include/geshi/scripts/get-keywords/lib/class.keywordgetter.php create mode 100644 paste/include/geshi/scripts/get-keywords/lib/class.keywordgettererror.php create mode 100644 paste/include/geshi/scripts/get-keywords/lib/class.keywordgetterstrategy.php create mode 100644 paste/include/geshi/scripts/get-keywords/lib/class.keywordxmlparser.php create mode 100644 paste/include/geshi/scripts/get-keywords/lib/functions.get-keywords.php create mode 100644 paste/include/geshi/scripts/get-keywords/lib/pear/Console/Getopt.php create mode 100644 paste/include/geshi/scripts/get-keywords/lib/pear/PEAR.php create mode 100644 paste/include/geshi/scripts/get-keywords/lib/pear/XML/Parser.php (limited to 'paste/include/geshi') diff --git a/paste/include/geshi/.project b/paste/include/geshi/.project new file mode 100644 index 0000000..2ba3183 --- /dev/null +++ b/paste/include/geshi/.project @@ -0,0 +1,17 @@ + + + geshi-src + + + + + + net.sourceforge.phpeclipse.parserbuilder + + + + + + net.sourceforge.phpeclipse.phpnature + + diff --git a/paste/include/geshi/classes/class.geshicodecontext.php b/paste/include/geshi/classes/class.geshicodecontext.php new file mode 100644 index 0000000..53ac023 --- /dev/null +++ b/paste/include/geshi/classes/class.geshicodecontext.php @@ -0,0 +1,550 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** + * This class represents a "Code" context - one where keywords and + * regular expressions can be used to highlight part of the context. + * + * If the context you are in requires keyword or regular expression + * support, then GeSHiCodeContext is the context type that you need. + * + * Usage: + * + * Use this class in a context or language file, to define a code + * context: + * + *
 'CHILD_CONTEXTS' => array(
+ *   ...
+ *   new GeSHiCodeContext([params])
+ *   ...
+ * ),
+ * + *
 'CONTEXTS' => array(
+ *   ...
+ *   new GeSHiCodeContext([params])
+ *   ...
+ * ),
+ * + * @package core + * @author Nigel McNie + * @since 1.1.0 + * @version 1.1.0 + * @see GeSHiContext + * + */ +class GeSHiCodeContext extends GeSHiContext +{ + /**#@+ + * @var array + * @access private + */ + + /** + * Keywords for this code context + * @var array + */ + var $_contextKeywords = array(); + + /** + * Characters that cannot appear before a keyword + * @var array + */ + var $_contextCharactersDisallowedBeforeKeywords = array(); + + /** + * Characters that cannot appear after a keyword + * @var array + */ + var $_contextCharactersDisallowedAfterKeywords = array(); + + /** + * A lookup table for use with regex matched starters/enders + * @var array + */ + var $_contextKeywordLookup; + + /** + * A symbol array + * @var array + */ + var $_contextSymbols = array(); + + /** + * A regex array + * @var array + */ + var $_contextRegexps = array(); + + /** + * An array of object "splitters" + */ + var $_objectSplitters = array(); + + /** + * Whether this code context has finished loading yet + * @todo [blocking 1.1.1] Do this by static variable? + */ + var $_codeContextLoaded = false; + + /**#@-*/ + + + /** + * Redefinition of {@link GeSHiContext::load()} in order to also + * load keywords, regular expressions etc. + * + */ + function load (&$styler) + { + parent::load($styler); + + if ($this->_codeContextLoaded) { + return; + } + $this->_codeContextLoaded = true; + + // Add regex for methods + foreach ($this->_objectSplitters as $data) { + $splitter_match = ''; + foreach ($data[0] as $splitter) { + $splitter_match .= preg_quote($splitter) . '|'; + } + + $this->_contextRegexps[] = array( + 0 => array( + "#(" . substr($splitter_match, 0, -1) . ")(\s*)([a-zA-Z\*\(_][a-zA-Z0-9_\*]*)#" + ), + 1 => '', // char to check for + 2 => array( + 1 => true, + 2 => true, // highlight splitter + 3 => array($data[1], $data[2], $data[3]) // $data[3] says whether to give code a go at the match first + ) + ); + } + } + + /** + * Overrides GeSHiContext::loadStyleData to load style data + */ + function loadStyleData () + { + // @todo [blocking 1.1.1] Skip if already loaded??? + // Set styles for keywords + //geshi_dbg('Loading style data for context ' . $this->getName(), GESHI_DBG_PARSE); + // @todo [blocking 1.1.1] Style data for infectious context loaded many times, could be reduced to one? + //@todo [blocking 1.1.1] array_keys loop construct if possible + foreach ($this->_contextKeywords as $keyword_group_array) { + geshi_dbg($keyword_group_array[1] . ' ' . $keyword_group_array[2], GESHI_DBG_PARSE); + $this->_styler->setStyle($keyword_group_array[1], $keyword_group_array[2]); + } + + // Set styles for regex groups + foreach ($this->_contextRegexps as $data) { + foreach ($data[2] as $group) { + $this->_styler->setStyle($group[0], $group[1]); + } + } + + // Set styles for symbols + foreach ($this->_contextSymbols as $data) { + $this->_styler->setStyle($data[1], $data[2]); + } + + parent::loadStyleData(); + } + + /** + * Overrides {@link GeSHiContext::_addParseData()} to highlight a code context, including + * keywords, symbols and regular expression matches + * + * @param string The code to add as parse data + * @param string The first character of the context after this + */ + function _addParseData ($code, $first_char_of_next_context = '') + { + //$first_char_of_next_context = ''; + geshi_dbg('GeSHiCodeContext::_addParseData(' . substr($code, 0, 15) . ', ' . $first_char_of_next_context . ')', GESHI_DBG_PARSE); + + $regex_matches = array(); + foreach ($this->_contextRegexps as $regex_group_key => $regex_data) { + geshi_dbg(' Regex group: ' . $regex_group_key, GESHI_DBG_PARSE); + // Set style of this group + // $regex_data = array( + // 0 => regex (with brackets to signify groupings + // 1 => a string that if not matched, this part ain't done (speeds stuff up) + // 2 => array( + // 1 => array(name of first group, default style of first group) + // 2 => array(name of second group, ... + // ... + if (!$regex_data[1] || false !== strpos($code, $regex_data[1])) { + foreach ($regex_data[0] as $regex) { + geshi_dbg(' Trying regex ' . $regex . '... ', GESHI_DBG_PARSE, false); + $matches = array(); + preg_match_all($regex, $code, $matches); + geshi_dbg('found ' . count($matches[0]) . ' matches', GESHI_DBG_PARSE); + + // If there are matches... + if (count($matches[0])) { + foreach ($matches[0] as $key => $match) { + // $match is the full match of the regex. We need to get it out of the string, + // although we also need its position in the string + $pos = strpos($code, $match); + // neat splicey jobbie to get rid of the keyword (can't do str_replace...) + // ADDED SPACE FILLERS + $code = substr($code, 0, $pos) . str_repeat("\0", strlen($match)) . substr($code, $pos + strlen($match)); + + // make an array of data for this regex + $data = array(); + foreach ($matches as $match_data) { + $data[] = $match_data[$key]; + } + $regex_matches[] = array(0 => $pos, 1 => $regex_group_key, 2 => $data); + } + } + } + } + } + geshi_dbg(' Regex matches: ' . str_replace("\n", "\r", print_r($regex_matches, true)), GESHI_DBG_PARSE); + + $regex_replacements = array(); + foreach ($regex_matches as $data) { + // $data[0] is the pos + // $data[1] is the key + // $data[2][0] contains the full match + // $data[2][1] contains what is in the first brackets + // $data[2][2] contains what is in the second brackets... + foreach ($data[2] as $key => $match) { + // skip the full match which is in $data[2][0] + if ($key) { + // If there is a name for this bracket group ($key) in this regex group ($data[1])... + if (isset($this->_contextRegexps[$data[1]][2][$key]) && is_array($this->_contextRegexps[$data[1]][2][$key])) { + // If we should be attempting to have a go at code highlighting first... + if (/*isset($this->_contextRegexps[$data[1]][2][$key][2]) && */ + true === $this->_contextRegexps[$data[1]][2][$key][2]) { + // Highlight the match, and put the code into the result + $highlighted_matches = $this->_codeContextHighlight($match); + foreach ($highlighted_matches as $stuff) { + if ($stuff[1] == $this->_contextName) { + $regex_replacements[$data[0]][] = array($stuff[0], $this->_contextRegexps[$data[1]][2][$key][0]); + } else { + $regex_replacements[$data[0]][] = $stuff; + } + } + } else { + $regex_replacements[$data[0]][] = array($match, + $this->_contextRegexps[$data[1]][2][$key][0]); //name in [0], s in [1] + } + // Else, perhaps it is simply set. If so, we highlight it as if it were + // part of the code context + } elseif (isset($this->_contextRegexps[$data[1]][2][$key])) { + // this may end up as array(array(match,name),array(match,name),array..) + //@todo [blocking 1.1.1] may need to pass the first char of next context here if it's at the end... + $parse_data = $this->_codeContextHighlight($match); + foreach ($parse_data as $pdata) { + $regex_replacements[$data[0]][] = $pdata; + } + } + // Else, don't add it at all... + } + } + } + geshi_dbg(' Regex replacements: ' . str_replace("\n", "\r", print_r($regex_replacements, true)), GESHI_DBG_PARSE); + // Now what we do is make an array that looks like this: + // array( + // [position] => [replacement for regex] + // [position] => [replacement for regex] + // ... + // ) + // so we can put them back in as we build the result + + + // The aim is to end up with an array( + // 0 => array(code, contextname) + // 1 => array(code, contextname) + // 2 => ... + // + // $regex_replacements is an array( + // pos => array of arrays like the above, in order + // pos => ... + // + // codeContextHighlight should return something similar + + $parse_data = $this->_codeContextHighlight($code, $regex_replacements, $first_char_of_next_context); + foreach ($parse_data as $data) { + if (!isset($data[2])) { + $this->_styler->addParseData($data[0], $data[1]); + } else { + $this->_styler->addParseData($data[0], $data[1], $data[2]); + } + } + } + + + /** + * Given code, returns an array of context data about it + */ + function _codeContextHighlight ($code, $regex_replacements = array(), $first_char_of_next_context = '') + { + geshi_dbg('GeSHiCodeContext::_codeContextHighlight(' . substr($code, 0, 15) . ', ' . + (($regex_replacements) ? 'array(...)' : 'null') . ', ' . $first_char_of_next_context . ')', GESHI_DBG_PARSE); + //$first_char_of_next_context = ''; + + if (!is_array($this->_contextKeywordLookup)) { + $this->_createContextKeywordLookup(); + } + + $result = array(0 => array('', '')); + $result_pointer = 0; + $length = strlen($code); + $keyword_match_allowed = true; + $earliest_pos = false; + $earliest_keyword = ''; + $earliest_keyword_group = 0; + + // For each character + for ($i = 0; $i < $length; $i++) { + if (isset($regex_replacements[$i])) { + geshi_dbg(' Regex replacements available at position ' . $i . ': ' . $regex_replacements[$i][0][0] . '...', GESHI_DBG_PARSE); + // There's regular expressions expected to go here + foreach ($regex_replacements[$i] as $replacement) { + $result[++$result_pointer] = $replacement; + } + // Allow keyword matching immediately after regular expressions + $keyword_match_allowed = true; + } + + $char = substr($code, $i, 1); + if ("\0" == $char) { + // Not interested in null characters inserted by regex replacements + continue; + } + + // Take symbols into account before doing this + if (!$this->_contextKeywordLookup) { + $this->_checkForSymbol($char, $result, $result_pointer); + continue; + } + + geshi_dbg('@b Current char is: ' . str_replace("\n", '\n', $char), GESHI_DBG_PARSE); + + if ($keyword_match_allowed && isset($this->_contextKeywordLookup[$char])) { + foreach ($this->_contextKeywordLookup[$char] as $keyword_array) { + // keyword array is 0 => keyword, 1 => kwgroup + if (strlen($keyword_array[0]) < $earliest_keyword) { + // We can skip keywords that are shorter than the best + // earliest we can currently do + geshi_dbg(' [skipping ' . $keyword_array[0], GESHI_DBG_PARSE); + continue; + } + geshi_dbg(' Checking code for ' . $keyword_array[0], GESHI_DBG_PARSE); + // If case sensitive + if ($this->_contextKeywords[$keyword_array[1]][3]) { + $next_part_is_keyword = ($keyword_array[0] == substr($code, $i, strlen($keyword_array[0]))); + } else { + $next_part_is_keyword = (strtolower($keyword_array[0]) == strtolower(substr($code, $i, strlen($keyword_array[0])))); + } + + geshi_dbg(" next part is keyword: $next_part_is_keyword", GESHI_DBG_PARSE); + // OPTIMIZE (use lookup to remember for length $foo(1 => false, 2 => false) so if kw is length 1 or 2 then don't need to check + //$after_allowed = ( !in_array(substr($code, $i + strlen($keyword_array[0]), 1), array_diff($this->_context_characters_disallowed_after_keywords, $this->_context_keywords[$keyword_array[1]][4])) ); + // the first char of the keyword is always $char??? + $after_char = substr($code, $i + strlen($keyword_array[0]), 1); + // if '' == $after_char, it's at the end of the context so we need + // the first char from the next context... + if ( '' == $after_char ) $after_char = $first_char_of_next_context; + + geshi_dbg(" after char to check: |$after_char|", GESHI_DBG_PARSE); + $after_allowed = ('' == $after_char || !ctype_alnum($after_char) || + (ctype_alnum($after_char) && + !ctype_alnum($char)) ); + $after_allowed = ($after_allowed && + !in_array($after_char, $this->_contextCharactersDisallowedAfterKeywords)); + // Disallow underscores after keywords + $after_allowed = ($after_allowed && ($after_char != '_')); + + // If where we are up to is a keyword, and it's allowed to be here (before was already + // tested by $keyword_match_allowed) + if ($next_part_is_keyword && $after_allowed) { + //if ( false === $earliest_pos || $pos < $earliest_pos || ($pos == $earliest_pos && strlen($keyword_array[0]) > strlen($earliest_keyword)) ) + if (strlen($keyword_array[0]) > strlen($earliest_keyword)) { + geshi_dbg('@bfound', GESHI_DBG_PARSE); + // what is _pos for? + // What are any of them for?? + $earliest_pos = true;//$pos; + // BUGFIX: just in case case sensitive matching used, get data from string + // instead of from data array + $earliest_keyword = substr($code, $i, strlen($keyword_array[0])); + $earliest_keyword_group = $keyword_array[1]; + } + } + } + } + + // reset matching of keywords + //$keyword_match_allowed = false; + + //echo "Current pos = $i, earliest keyword is " . htmlspecialchars($earliest_keyword) . ' at ' . $earliest_pos . "\n"; + //echo "Symbol string is |$current_symbols|\n"; + + if (false !== $earliest_pos) { + geshi_dbg('Keyword matched: ' . $earliest_keyword, GESHI_DBG_PARSE); + // there's a keyword match! + + $result[++$result_pointer] = array($earliest_keyword, + $this->_contextKeywords[$earliest_keyword_group][1], + $this->_getURL($earliest_keyword, $earliest_keyword_group)); + $i += strlen($earliest_keyword) - 1; + geshi_dbg("strlen of earliest keyword is " . strlen($earliest_keyword) . " (pos is $i)", GESHI_DBG_PARSE); + // doesn't help + $earliest_pos = false; + $earliest_keyword = ''; + } else { + // Check for a symbol instead + $this->_checkForSymbol($char, $result, $result_pointer); + } + + /// If we move this to the end we might be able to get rid of the last one [DONE] + /// The second test on the first line is a little contentious - allows functions that don't + /// start with an alpha character to be within other words, e.g abc_contextCharactersDisallowedBeforeKeywords)); + // Disallow underscores before keywords + $keyword_match_allowed = ($keyword_match_allowed && ('_' != $before_char)); + geshi_dbg(' Keyword matching allowed: ' . $keyword_match_allowed, GESHI_DBG_PARSE); + geshi_dbg(' [checked ' . substr($code, $i, 1) . ' against ' . print_r($this->_contextCharactersDisallowedBeforeKeywords, true), GESHI_DBG_PARSE); + } + + unset($result[0]); + //geshi_dbg('@b Resultant Parse Data:', GESHI_DBG_PARSE); + //geshi_dbg(str_replace("\n", "\r", print_r($result, true)), GESHI_DBG_PARSE); + //return array(array($code, $this->_contextName)); + return $result; + } + + + /** + * Checks the specified character to see if it is a symbol, and + * adds it to the result array according to its findings. + * + * @param string The possible symbol to check + * @param array The current result data that will be appended to + * @param int The pointer to the current result record + */ + function _checkForSymbol($possible_symbol, &$result,&$result_pointer) + { + $skip = false; + geshi_dbg('Checking ' . $possible_symbol . ' for symbol match', GESHI_DBG_PARSE); + foreach ($this->_contextSymbols as $symbol_data) { + if (in_array($possible_symbol, $symbol_data[0])) { + // we've matched the symbol in $symbol_group + // start the current symbols string + if ($result[$result_pointer][1] == $symbol_data[1]) { + $result[$result_pointer][0] .= $possible_symbol; + } else { + $result[++$result_pointer] = array($possible_symbol, $symbol_data[1]); + } + $skip = true; + break; + } + } + if (!$skip) { + if ($result[$result_pointer][1] == $this->_contextName) { + $result[$result_pointer][0] .= $possible_symbol; + } else { + $result[++$result_pointer] = array($possible_symbol, $this->_contextName); + } + } + } + + /// THIS FUNCTION NEEDS TO DIE!!! + /// When language files are able to be compiled, they should list their keywords + /// in this form already. + function _createContextKeywordLookup () + { + geshi_dbg('GeSHiCodeContext::_createContextKeywordLookup()', GESHI_DBG_PARSE); + + $this->_contextKeywordLookup = array(); + foreach ($this->_contextKeywords as $keyword_group_key => $keyword_group_array) { + geshi_dbg(" keyword group key: $keyword_group_key", GESHI_DBG_PARSE); + + foreach ($keyword_group_array[0] as $keyword) { + // If keywords are case sensitive, add them straight in. + // Otherwise, if they're not and the first char of the lookup is alphabetical, + // add it to both parts of the lookup (a and A for example). + $key = substr($keyword, 0, 1); + if (ctype_alpha($key) && !$keyword_group_array[3]) { + $this->_contextKeywordLookup[strtoupper(substr($keyword, 0, 1))][] = + array(0 => $keyword, 1 => $keyword_group_key /*$keyword_group_array[1]*/); + $this->_contextKeywordLookup[strtolower(substr($keyword, 0, 1))][] = + array(0 => $keyword, 1 => $keyword_group_key /*$keyword_group_array[1]*/); + } else { + $this->_contextKeywordLookup[$key][] = + array(0 => $keyword, 1 => $keyword_group_key /*$keyword_group_array[1]*/); + } + } + } + if (isset($key)) { + geshi_dbg(' Lookup created, first entry: ' . print_r($this->_contextKeywordLookup[$key][0], true), GESHI_DBG_PARSE); + } else { + geshi_dbg(' Lookup created with no entries', GESHI_DBG_PARSE); + } + } + + + /** + * Turns keywords into >keyword< if needed + * + * @todo [blocking 1.1.5] This method still needs to listen to set_link_target, set_link_styles etc + */ + function _getURL ($keyword, $earliest_keyword_group) + { + if ($this->_contextKeywords[$earliest_keyword_group][4] != '') { + // Remove function_exists() call? Valid language files will define functions required... + if (substr($this->_contextKeywords[$earliest_keyword_group][4], -2) == '()' && + function_exists(substr($this->_contextKeywords[$earliest_keyword_group][4], 0, -2))) { + $href = call_user_func(substr($this->_contextKeywords[$earliest_keyword_group][4], 0, -2), $keyword); + } else { + $href = str_replace('{FNAME}', $keyword, $this->_contextKeywords[$earliest_keyword_group][4]); + } + return $href; + } + return ''; + } +} + +?> diff --git a/paste/include/geshi/classes/class.geshicontext.php b/paste/include/geshi/classes/class.geshicontext.php new file mode 100644 index 0000000..964d8b3 --- /dev/null +++ b/paste/include/geshi/classes/class.geshicontext.php @@ -0,0 +1,721 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** + * The GeSHiContext class + * + * @package core + * @author Nigel McNie + * @since 1.1.0 + * @version 1.1.0 + */ +class GeSHiContext +{ + /**#@- + * @access private + */ + + /** + * The context name. A unique identifier that corresponds to a path under + * the GESHI_CLASSES_ROOT folder where the configuration file for this + * context is. + * @var string + */ + var $_contextName; + + /** + * The file name from where to load data for this context + * @var string + */ + var $_fileName; + + /** + * The dialect name of this context + * @var string + */ + var $_dialectName; + + /** + * The styler helper object + * @var GeSHiStyler + */ + var $_styler; + + /** + * The context delimiters + * @var array + */ + var $_contextDelimiters = array(); + + /** + * The child contexts + * @var array + */ + var $_childContexts = array(); + + /** + * The style type of this context, used for backward compatibility + * with GeSHi 1.0.X + * @var int + */ + var $_contextStyleType = GESHI_STYLE_NONE; + + /** + * Delimiter parse data. Controls which context - the parent or child - + * should parse the delimiters for a context + * @var int + */ + var $_delimiterParseData = GESHI_CHILD_PARSE_BOTH; + + /** + * The overriding child context, if any + * @var GeSHiContext + */ + var $_overridingChildContext; + + /** + * The matching regex table for regex starters + * @var array + */ + var $_startRegexTable = array(); + + /** + * The "infectious context". Will be used to "infect" the context + * tree with itself - this is how PHP inserts itself into HTML contexts + * @var GeSHiContext + */ + var $_infectiousContext; + + /** + * Whether this context has been already loaded + * @var boolean + */ + var $_loaded = false; + + /** + * The name for stuff detected in the start of a context + * @var string + */ + var $_startName = 'start'; + + /** + * The name for stuff detected in the end of a context + * @var string + */ + var $_endName = 'end'; + + /** + * Whether this context is an alias context + * @var boolean + */ + var $_isAlias = false; + /**#@-*/ + + /** + * Creates a new GeSHiContext. + * + * @param string The name of the language this context represents + * @param string The dialect of the language this context represents + * @param string The name of the context + * @param array The name used for aliasing + * @todo [blocking 1.1.9] Better comment + */ + function GeSHiContext ($language_name, $dialect_name = '', $context_name = '', $alias_name = '') + { + // Set dialect + if ('' == $dialect_name) { + $dialect_name = $language_name; + } + $this->_dialectName = $dialect_name; + + // Set the context and file names + if ('' == $context_name) { + // Root of a language + $this->_fileName = $this->_contextName = $language_name . '/' . $dialect_name; + return; + } + if (0 === strpos($context_name, 'common')) { + $this->_fileName = $context_name; + // Strip "common/" from context name to get the actual name... + $context_name = substr($context_name, 7); + } else { + $this->_fileName = $language_name . '/' . $context_name; + } + if ($alias_name) { + $this->_contextName = $alias_name; + $this->_isAlias = true; + } else { + $this->_contextName = "$language_name/$dialect_name/$context_name"; + } + } + + /** + * Returns the name of this context + * + * @return string The full name of this context (language, dialect and context) + */ + function getName () + { + return $this->_contextName; + } + + function getStartName () + { + return $this->_startName; + } + + function getEndName () + { + return $this->_endName; + } + + function isAlias () + { + return $this->_isAlias; + } + + /** + * Loads the context data + */ + function load (&$styler) + { + geshi_dbg('Loading context: ' . $this->_contextName, GESHI_DBG_PARSE); + + if ($this->_loaded) { + geshi_dbg('@oAlready loaded', GESHI_DBG_PARSE); + return; + } + $this->_loaded = true; + + $this->_styler =& $styler; + + if (!geshi_can_include(GESHI_CONTEXTS_ROOT . $this->_fileName . $this->_styler->fileExtension)) { + geshi_dbg('@e Cannot get context information for ' . $this->getName() . ' from file ' + . GESHI_CONTEXTS_ROOT . $this->_fileName . $this->_styler->fileExtension, GESHI_DBG_ERR); + return array('code' => GESHI_ERROR_FILE_UNAVAILABLE, 'name' => $this->_contextName); + } + + // Load the data for this context + $CONTEXT = $this->_contextName; + $CONTEXT_START = "$this->_contextName/$this->_startName"; + $CONTEXT_END = "$this->_contextName/$this->_endName"; + $DIALECT = $this->_dialectName; + // @todo [blocking 1.1.5] This needs testing to see if it is faster + if (false) { + $language_file_name = GESHI_CONTEXTS_ROOT . $this->_contextName . $this->_styler->fileExtension; + $cached_data = $this->_styler->getCacheData($language_file_name); + if (null == $cached_data) { + // Data not loaded for this context yet + //geshi_dbg('@wLoading data for context ' . $this->_contextName, GESHI_DBG_PARSE); + // Get the data, stripping the start/end PHP code markers which aren't allowed in eval() + $cached_data = substr(implode('', file($language_file_name)), 5, -3); + $this->_styler->setCacheData($language_file_name, $cached_data); + } else { + //geshi_dbg('@oRetrieving data from cache for context ' . $this->_contextName, GESHI_DBG_PARSE); + } + eval($cached_data); + } else { + require GESHI_CONTEXTS_ROOT . $this->_fileName . $this->_styler->fileExtension; + } + + // Push the infectious context into the child contexts + if (null != $this->_infectiousContext) { + // Add the context to each of the current contexts... + $keys = array_keys($this->_childContexts); + foreach ($keys as $key) { + $this->_childContexts[$key]->infectWith($this->_infectiousContext); + } + // And add the infectious context to this context itself + $this->_childContexts[] =& $this->_infectiousContext; + geshi_dbg(' Added infectious context ' . $this->_infectiousContext->getName() + . ' to ' . $this->getName(), GESHI_DBG_PARSE); + } + + // Recursively load the child contexts + $keys = array_keys($this->_childContexts); + foreach ($keys as $key) { + $this->_childContexts[$key]->load($styler); + } + + // Load the overriding child context, if any + if ($this->_overridingChildContext) { + if (null != $this->_infectiousContext) { + $this->_overridingChildContext->infectWith($this->_infectiousContext); + } + $this->_overridingChildContext->load($styler); + } + //geshi_dbg('@o Finished loading context ' . $this->_styleName . ' successfully', GESHI_DBG_PARSE); + } + + /** + * Adds an "infectious child" to this context. + * + * Relies on child being a subclass of or actually being a GeSHiContext + */ + function infectWith (&$context) + { + $this->_infectiousContext =& $context; + //geshi_dbg(' Added infectious context ' . $context->getName() + // . ' to ' . $this->getName(), GESHI_DBG_PARSE); + } + + + /** + * Loads style data for the given context. Not implemented here, but can be overridden + * by a child class to get style data from its parent + * + * Note to self: This is needed by GeSHiCodeContext, so don't touch it! + */ + function loadStyleData () + { + //geshi_dbg('Loading style data for context ' . $this->getName(), GESHI_DBG_PARSE); + // Recursively load the child contexts + $keys = array_keys($this->_childContexts); + foreach ($keys as $key) { + $this->_childContexts[$key]->loadStyleData(); + } + + // Load the style data for the overriding child context, if any + if ($this->_overridingChildContext) { + $this->_overridingChildContext->loadStyleData(); + } + } + + /** + * Checks each child to see if it's useful. If not, then remove it + * + * @param string The code that can be used to check if a context + * is needed. + */ + function trimUselessChildren ($code) + { + //geshi_dbg('GeSHiContext::trimUselessChildren()', GESHI_DBG_API | GESHI_DBG_PARSE); + $new_children = array(); + $keys = array_keys($this->_childContexts); + + foreach ($keys as $key) { + //geshi_dbg(' Checking child: ' . $this->_childContexts[$key]->getName() . ': ', GESHI_DBG_PARSE, false); + if (!$this->_childContexts[$key]->contextCanStart($code)) { + // This context will _never_ be useful - and nor will its children + //geshi_dbg('@buseless, removed', GESHI_DBG_PARSE); + // RAM saving technique + // But we shouldn't remove highlight data if the child is an + // "alias" context, since the real context might need the data + if (!$this->_childContexts[$key]->isAlias()) { + $this->_styler->removeStyleData($this->_childContexts[$key]->getName(), + $this->_childContexts[$key]->getStartName(), + $this->_childContexts[$key]->getEndName()); + } + unset($this->_childContexts[$key]); + } + } + + // Recurse into the remaining children, checking them + $keys = array_keys($this->_childContexts); + foreach ($keys as $key) { + $this->_childContexts[$key]->trimUselessChildren($code); + } + } + + /** + * Parses the given code + */ + function parseCode (&$code, $context_start_key = -1, $context_start_delimiter = '', $ignore_context = '', + $first_char_of_next_context = '') + { + geshi_dbg('*** GeSHiContext::parseCode(' . $this->_contextName . ') ***', GESHI_DBG_PARSE); + geshi_dbg('CODE: ' . str_replace("\n", "\r", substr($code, 0, 100)) . "<<<<<\n", GESHI_DBG_PARSE); + if ($context_start_delimiter) geshi_dbg('Delimiter: ' . $context_start_delimiter, GESHI_DBG_PARSE); + // Skip empty/almost empty contexts + if (!$code || ' ' == $code) { + $this->_addParseData($code); + return; + } + + // FIRST: + // If there is an "overriding child context", it should immediately take control + // of the entire parsing. + // An "overriding child context" has the following properties: + // * No starter or ender delimiter + // + // The overridden context has the following properties: + // * Explicit starter/ender + // * No children (they're not relevant after all) + // + // An example: HTML embeds CSS highlighting by using the html/css context. This context + // has one overriding child context: css. After all, once in the CSS context, HTML don't care + // anymore. + // Likewise, javascript embedded in HTML is an overriding child - HTML does the work of deciding + // exactly where javascript gets called, and javascript does the rest. + // + + // If there is an overriding context... + if ($this->_overridingChildContext) { + // Find the end of this thing + $finish_data = $this->_getContextEndData($code, $context_start_key, $context_start_delimiter, true); // true? + // If this context should not parse the ender, add it on to the stuff to parse + if ($this->shouldParseEnder()) { + $finish_data['pos'] += $finish_data['len']; + } + // Make a temp copy of the stuff the occ will parse + $tmp = substr($code, 0, $finish_data['pos']); + // Tell the occ to parse the copy + $this->_overridingChildContext->parseCode($tmp); // start with no starter at all + // trim the code + $code = substr($code, $finish_data['pos']); + return; + } + + // Add the start of this context to the parse data if it is already known + if ($context_start_delimiter) { + $this->_addParseDataStart($context_start_delimiter); + $code = substr($code, strlen($context_start_delimiter)); + } + + $original_length = strlen($code); + + while ('' != $code) { + if (strlen($code) != $original_length) { + geshi_dbg('CODE: ' . str_replace("\n", "\r", substr($code, 0, 100)) . "<<<<<\n", GESHI_DBG_PARSE); + } + // Second parameter: if we are at the start of the context or not + // Pass the ignored context so it can be properly ignored + $earliest_context_data = $this->_getEarliestContextData($code, strlen($code) == $original_length, + $ignore_context); + $finish_data = $this->_getContextEndData($code, $context_start_key, $context_start_delimiter, + strlen($code) == $original_length); + geshi_dbg('@bEarliest context data: pos=' . $earliest_context_data['pos'] . ', len=' . + $earliest_context_data['len'], GESHI_DBG_PARSE); + geshi_dbg('@bFinish data: pos=' . $finish_data['pos'] . ', len=' . $finish_data['len'], GESHI_DBG_PARSE); + + // If there is earliest context data we parse up to it then hand control to that context + if ($earliest_context_data) { + if ($finish_data) { + // Merge to work out who wins + if ($finish_data['pos'] <= $earliest_context_data['pos']) { + geshi_dbg('Earliest context and Finish data: finish is closer', GESHI_DBG_PARSE); + + // Add the parse data + $this->_addParseData(substr($code, 0, $finish_data['pos']), substr($code, $finish_data['pos'], 1)); + + // If we should pass the ender, add the parse data + if ($this->shouldParseEnder()) { + $this->_addParseDataEnd(substr($code, $finish_data['pos'], $finish_data['len'])); + $finish_data['pos'] += $finish_data['len']; + } + // Trim the code and return the unparsed delimiter + $code = substr($code, $finish_data['pos']); + return $finish_data['dlm']; + } else { + geshi_dbg('Earliest and finish data, but earliest gets priority', GESHI_DBG_PARSE); + $foo = true; + } + } else { $foo = true; /** no finish data */} + + if (isset($foo)) geshi_dbg('Earliest data but not finish data', GESHI_DBG_PARSE); + // Highlight up to delimiter + ///The "+ len" can be manipulated to do starter and ender data + if (!$earliest_context_data['con']->shouldParseStarter()) { + $earliest_context_data['pos'] += $earliest_context_data['len']; + //BUGFIX: null out dlm so it doesn't squash the actual rest of context + $earliest_context_data['dlm'] = ''; + } + + // We should parseCode() the substring. + // BUT we have to remember that we should ignore the child context we've matched, + // else we'll have a wee recursion problem on our hands... + $tmp = substr($code, 0, $earliest_context_data['pos']); + $this->parseCode($tmp, -1, '', $earliest_context_data['con']->getName(), + substr($code, $earliest_context_data['pos'], 1)); // parse with no starter + $code = substr($code, $earliest_context_data['pos']); + $ender = $earliest_context_data['con']->parseCode($code, $earliest_context_data['key'], $earliest_context_data['dlm']); + // check that the earliest context actually wants the ender + if (!$earliest_context_data['con']->shouldParseEnder() && $earliest_context_data['dlm'] == $ender) { + geshi_dbg('earliest_context_data[dlm]=' . $earliest_context_data['dlm'] . ', ender=' . $ender, GESHI_DBG_PARSE); + // second param = first char of next context + $this->_addParseData(substr($code, 0, strlen($ender)), substr($code, strlen($ender), 1)); + $code = substr($code, strlen($ender)); + } + } else { + if ($finish_data) { + // finish early... + geshi_dbg('No earliest data but finish data', GESHI_DBG_PARSE); + + // second param = first char of next context + $this->_addParseData(substr($code, 0, $finish_data['pos']), substr($code, $finish_data['pos'], 1)); + + if ($this->shouldParseEnder()) { + $this->_addParseDataEnd(substr($code, $finish_data['pos'], $finish_data['len'])); + $finish_data['pos'] += $finish_data['len']; + } + $code = substr($code, $finish_data['pos']); + // return the length for use above + return $finish_data['dlm']; + } else { + geshi_dbg('No earliest or finish data', GESHI_DBG_PARSE); + // All remaining code is in this context + $this->_addParseData($code, $first_char_of_next_context); + $code = ''; + return; // not really needed (?) + } + } + } + } + + /** + * @return true if this context wants to parse its start delimiters + */ + function shouldParseStarter() + { + return $this->_delimiterParseData & GESHI_CHILD_PARSE_LEFT; + } + + /** + * @return true if this context wants to parse its end delimiters + */ + function shouldParseEnder () + { + return $this->_delimiterParseData & GESHI_CHILD_PARSE_RIGHT; + } + + /** + * Return true if it is possible for this context to parse this code at all + */ + function contextCanStart ($code) + { + foreach ($this->_contextDelimiters as $key => $delim_array) { + foreach ($delim_array[0] as $delimiter) { + geshi_dbg(' Checking delimiter ' . $delimiter . '... ', GESHI_DBG_PARSE, false); + $data = geshi_get_position($code, $delimiter, 0, $delim_array[2]); + + if (false !== $data['pos']) { + return true; + } + } + } + return false; + } + + /** + * Works out the closest child context + * + * @param $ignore_context The context to ignore (if there is one) + */ + function _getEarliestContextData ($code, $start_of_context, $ignore_context) + { + geshi_dbg(' GeSHiContext::_getEarliestContextData(' . $this->_contextName . ', '. $start_of_context . ')', GESHI_DBG_API | GESHI_DBG_PARSE); + $earliest_pos = false; + $earliest_len = false; + $earliest_con = null; + $earliest_key = -1; + $earliest_dlm = ''; + + foreach ($this->_childContexts as $context) { + if ($ignore_context == $context->getName()) { + // whups, ignore you... + continue; + } + $data = $context->getContextStartData($code, $start_of_context); + geshi_dbg(' ' . $context->_contextName . ' says it can start from ' . $data['pos'], GESHI_DBG_PARSE, false); + + if (-1 != $data['pos']) { + if ((false === $earliest_pos) || $earliest_pos > $data['pos'] || + ($earliest_pos == $data['pos'] && $earliest_len < $data['len'])) { + geshi_dbg(' which is the earliest position', GESHI_DBG_PARSE); + $earliest_pos = $data['pos']; + $earliest_len = $data['len']; + $earliest_con = $context; + $earliest_key = $data['key']; + $earliest_dlm = $data['dlm']; + } else { + geshi_dbg('', GESHI_DBG_PARSE); + } + } else { + geshi_dbg('', GESHI_DBG_PARSE); + } + } + // What do we need to know? + // Well, assume that one of the child contexts can parse + // Then, parseCode() is going to call parseCode() recursively on that object + // + if (false !== $earliest_pos) { + return array('pos' => $earliest_pos, 'len' => $earliest_len, 'con' => $earliest_con, 'key' => $earliest_key, 'dlm' => $earliest_dlm); + } else { + return false; + } + } + + /** + * Checks the context delimiters for this context against the passed + * code to see if this context can help parse the code + */ + function getContextStartData ($code, $start_of_context) + { + //geshi_dbg(' GeSHi::getContextStartInformation(' . $this->_contextName . ')', GESHI_DBG_PARSE | GESHI_DBG_API); + geshi_dbg(' ' . $this->_contextName, GESHI_DBG_PARSE); + + $first_position = -1; + $first_length = -1; + $first_key = -1; + $first_dlm = ''; + + foreach ($this->_contextDelimiters as $key => $delim_array) { + foreach ($delim_array[0] as $delimiter) { + geshi_dbg(' Checking delimiter ' . $delimiter . '... ', GESHI_DBG_PARSE, false); + $data = geshi_get_position($code, $delimiter, 0, $delim_array[2], true); + geshi_dbg(print_r($data, true), GESHI_DBG_PARSE, false); + $position = $data['pos']; + $length = $data['len']; + if (isset($data['tab'])) { + geshi_dbg('Table: ' . print_r($data['tab'], true), GESHI_DBG_PARSE); + $this->_startRegexTable = $data['tab']; + $delimiter = $data['tab'][0]; + } + + if (false !== $position) { + geshi_dbg('found at position ' . $position . ', checking... ', GESHI_DBG_PARSE, false); + if ((-1 == $first_position) || ($first_position > $position) || + (($first_position == $position) && ($first_length < $length))) { + geshi_dbg('@bearliest! (length ' . $length . ')', GESHI_DBG_PARSE); + $first_position = $position; + $first_length = $length; + $first_key = $key; + $first_dlm = $delimiter; + } + } else { + geshi_dbg('', GESHI_DBG_PARSE); + } + } + } + + return array('pos' => $first_position, 'len' => $first_length, + 'key' => $first_key, 'dlm' => $first_dlm); + } + + /** + * GetContextEndData + */ + function _getContextEndData ($code, $context_open_key, $context_opener, $beginning_of_context) + { + geshi_dbg('GeSHiContext::_getContextEndData(' . $this->_contextName . ', ' . $context_open_key . ', ' + . $context_opener . ', ' . $beginning_of_context . ')', GESHI_DBG_API | GESHI_DBG_PARSE); + $context_end_pos = false; + $context_end_len = -1; + $context_end_dlm = ''; + + // Bail out if context open key tells us that there is no ender for this context + if (-1 == $context_open_key) { + geshi_dbg(' no opener so no ender', GESHI_DBG_PARSE); + return false; + } + + foreach ($this->_contextDelimiters[$context_open_key][1] as $ender) { + geshi_dbg(' Checking ender: ' . str_replace("\n", '\n', $ender), GESHI_DBG_PARSE, false); + $ender = $this->_substitutePlaceholders($ender); + geshi_dbg(' converted to ' . $ender, GESHI_DBG_PARSE); + + $position = geshi_get_position($code, $ender); + geshi_dbg(' Ender ' . $ender . ': ' . print_r($position, true), GESHI_DBG_PARSE); + $length = $position['len']; + $position = $position['pos']; + + // BUGFIX:skip around crap starters + if (false === $position) { + continue; + } + + if ((false === $context_end_pos) || ($position < $context_end_pos) || ($position == $context_end_pos && strlen($ender) > $context_end_len)) { + $context_end_pos = $position; + $context_end_len = $length; + $context_end_dlm = $ender; + } + } + geshi_dbg('Context ' . $this->_contextName . ' can finish at position ' . $context_end_pos, GESHI_DBG_PARSE); + + if (false !== $context_end_pos) { + return array('pos' => $context_end_pos, 'len' => $context_end_len, 'dlm' => $context_end_dlm); + } else { + return false; + } + } + + /** + * Adds parse data to the overall result + * + * This method is mainly designed so that subclasses of GeSHiContext can + * override it to break the context up further - for example, GeSHiStringContext + * uses it to add escape characters + * + * @param string The code to add + * @param string The first character of the next context (used by GeSHiCodeContext) + */ + function _addParseData ($code, $first_char_of_next_context = '') + { + $this->_styler->addParseData($code, $this->_contextName); + } + + /** + * Adds parse data for the start of a context to the overallresult + */ + function _addParseDataStart ($code) + { + $this->_styler->addParseDataStart($code, $this->_contextName, $this->_startName); + } + + /** + * Adds parse data for the end of a context to the overallresult + */ + function _addParseDataEnd ($code) + { + $this->_styler->addParseDataEnd($code, $this->_contextName, $this->_endName); + } + + /** + * Substitutes placeholders for values matched in opening regular expressions + * for contexts with their actual values + * + * + */ + function _substitutePlaceholders ($ender) + { + if ($this->_startRegexTable) { + foreach ($this->_startRegexTable as $key => $match) { + $ender = str_replace('!!!' . $key, quotemeta($match), $ender); + } + } + return $ender; + } +} + +?> diff --git a/paste/include/geshi/classes/class.geshistringcontext.php b/paste/include/geshi/classes/class.geshistringcontext.php new file mode 100644 index 0000000..1d712e5 --- /dev/null +++ b/paste/include/geshi/classes/class.geshistringcontext.php @@ -0,0 +1,190 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** + * The GeSHiStringContext class. This class extends GeSHiContext to handle + * the concept of escape characters that strings often use. + * + * @package core + * @author Nigel McNie + * @since 1.1.0 + * @version 1.1.0 + * @see GeSHiContext + */ +class GeSHiStringContext extends GeSHiContext +{ + /**#@- + * @access private + */ + var $_escapeCharacters; + + // Characters that should be escaped + var $_charsToEscape; + + /** + * This is used by the 'DELIM' "character" in the _charsToEscape array. We + * abuse the fact that _addParseData will be called right after _getContextEndData + * if the context is to be passed + */ + var $_lastOpener; + + /**#@-*/ + + /** + * GetContextEndData + */ + function _getContextEndData ($code, $context_open_key, $context_opener) + { + geshi_dbg('GeSHiStringContext::_getContextEndData(' . $this->_contextName . ', ' . $context_open_key . ', ' . $context_opener . ')', GESHI_DBG_API | GESHI_DBG_PARSE); + $this->_lastOpener = $context_opener; + + foreach ($this->_contextDelimiters[$context_open_key][1] as $ender) { + geshi_dbg(' Checking ender: ' . $ender, GESHI_DBG_PARSE); + + // Prepare ender regexes if needed + $ender = $this->_substitutePlaceholders($ender); + geshi_dbg(' ender after substitution: ' . $ender, GESHI_DBG_PARSE); + + $pos = 0; + while (true) { + $pos = geshi_get_position($code, $ender, $pos); + if (false === $pos) { + break; + } + $len = $pos['len']; + $pos = $pos['pos']; + + $possible_string = substr($code, 0, $pos); + geshi_dbg(' String might be: ' . $possible_string, GESHI_DBG_PARSE); + + foreach ($this->_escapeCharacters as $escape_char) { + // remove escaped escape characters + $possible_string = str_replace($escape_char . $escape_char, '', $possible_string); + } + + geshi_dbg(' String with double escapes removed: ' . $possible_string, GESHI_DBG_PARSE); + + //@todo [blocking 1.1.1] possible bug: only last escape character checked here + if (substr($possible_string, -1) != $escape_char) { + // We may have found the correct ender. If we haven't, then this string + // never ends and we will set the end position to the length of the code + // substr($code, $pos, 1) == $ender + $endpos = geshi_get_position($code, $ender, $pos); + geshi_dbg(' position of ender: ' . $endpos['pos'], GESHI_DBG_PARSE); + $pos = ($pos && $endpos['pos'] === $pos) ? $pos : strlen($code); + return array('pos' => $pos, 'len' => $len, 'dlm' => $ender); + } + // else, start further up + ++$pos; + } + } + return false; + } + + /** + * Overrides addParseData to add escape characters also + */ + function _addParseData ($code, $first_char_of_next_context = '') + { + geshi_dbg('GeSHiStringContext::_addParseData(' . substr($code, 0, 15) . '...)', GESHI_DBG_PARSE); + + $length = strlen($code); + $string = ''; + for ($i = 0; $i < $length; $i++) { + $char = substr($code, $i, 1); + geshi_dbg('Char: ' . $char, GESHI_DBG_PARSE); + $skip = false; + + foreach ($this->_escapeCharacters as $escape_char) { + $len = 1; + if ($char == $escape_char && (false !== ($len = $this->_shouldBeEscaped(substr($code, $i + 1))))) { + geshi_dbg('Match: len = ' . $len, GESHI_DBG_PARSE); + if ($string) { + $this->_styler->addParseData($string, $this->_contextName); + $string = ''; + } + // Needs a better name than /esc + $this->_styler->addParseData($escape_char . substr($code, $i + 1, $len), $this->_contextName . '/esc'); + // FastForward + $i += $len; + $skip = true; + break; + } + } + + if (!$skip) { + $string .= $char; + } + } + if ($string) { + $this->_styler->addParseData($string, $this->_contextName); + } + } + + /** + * Checks whether the character(s) at the start of the parameter string are + * characters that should be escaped. + * + * @param string The string to check the beginning of for escape characters + * @return int|false The length of the escape character sequence, else false + */ + function _shouldBeEscaped ($code) + { + // Feature: If 'DELIM' is one of the "characters" in the _charsToEscape array, then it is + // replaced by the context opener + $chars_to_escape = str_replace('DELIM', $this->_lastOpener, $this->_charsToEscape); + + geshi_dbg('Checking: ' . substr($code, 0, 15), GESHI_DBG_PARSE); + foreach ($chars_to_escape as $match) { + if ('REGEX' != substr($match, 0, 5)) { + geshi_dbg('Test: ' . $match, GESHI_DBG_PARSE); + if (substr($code, 0, 1) == $match) { + return 1; + } + } else { + geshi_dbg(' Testing via regex: ' . $match . '... ', GESHI_DBG_PARSE, false); + $data = geshi_get_position($code, $match, 0); + if (0 === $data['pos']) { + geshi_dbg('match, data = ' . print_r($data, true), GESHI_DBG_PARSE); + return $data['len']; + } + geshi_dbg('no match', GESHI_DBG_PARSE); + } + } + // No matches... + return false; + } +} + +?> diff --git a/paste/include/geshi/classes/class.geshistyler.php b/paste/include/geshi/classes/class.geshistyler.php new file mode 100644 index 0000000..fa56478 --- /dev/null +++ b/paste/include/geshi/classes/class.geshistyler.php @@ -0,0 +1,224 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** + * The GeSHiStyler class + * + * @package core + * @author Nigel McNie + * @since 1.1.0 + * @version 1.1.0 + */ +class GeSHiStyler +{ + /** + * @var string + */ + var $charset; + + /** + * @var string + */ + var $fileExtension; + + /** + * @var array + */ + var $_styleData = array(); + + /** + * @var array + */ + var $_parseData; + + /** + * @var int + */ + var $_parseDataPointer = 0; + + /** + * @var array + */ + var $_contextCacheData = array(); + + function setStyle ($context_name, $style, $start_name = 'start', $end_name = 'end') + { + // @todo [blocking 1.1.1] Why is this called sometimes with blank data? + geshi_dbg('GeSHiStyler::setStyle(' . $context_name . ', ' . $style . ')', GESHI_DBG_PARSE); + $this->_styleData[$context_name] = $style; + /*if (!isset($this->_styleData["$context_name/$start_name"])) { + $this->_styleData["$context_name/$start_name"] = $style; + } + if (!isset($this->_styleData["$context_name/$end_name"])) { + $this->_styleData["$context_name/$end_name"] = $style; + }*/ + } + + /*function setStartStyle ($context_name, $style) + { + $this->_styleData["$context_name/$this->_startName"] = $style; + } + + function setStartName ($name) + { + $this->_startName = $name; + }*/ + + function removeStyleData ($context_name, $context_start_name = 'start', $context_end_name = 'end') + { + unset($this->_styleData[$context_name]); + unset($this->_styleData["$context_name/$context_start_name"]); + unset($this->_styleData["$context_name/$context_end_name"]); + geshi_dbg(' removed style data for ' . $context_name, GESHI_DBG_PARSE); + } + + /*function setEndStyle ($context_name, $style) + { + $this->_styleData["$context_name/$this->_endName"] = $style; + } + + function setEndName ($name) + { + $this->_endName = $name; + }*/ + + function getStyle ($context_name) + { + if (isset($this->_styleData[$context_name])) { + return $this->_styleData[$context_name]; + } + // If style for starter/ender requested and we got here, use the default + if ('/end' == substr($context_name, -4)) { + $this->_styleData[$context_name] = $this->_styleData[substr($context_name, 0, -4)]; + return $this->_styleData[$context_name]; + } + if ('/start' == substr($context_name, -6)) { + $this->_styleData[$context_name] = $this->_styleData[substr($context_name, 0, -6)]; + return $this->_styleData[$context_name]; + } + + //@todo [blocking 1.1.5] Make the default style for otherwise unstyled elements configurable + $this->_styleData[$context_name] = 'color:#000;'; + return 'color:#000;'; + } + /* + function getStyleStart ($context_name) + { + if (isset($this->_styleData["$context_name/$this->_startName"])) { + return $this->_styleData["$context_name/$this->_startName"]; + } + $this->_styleData["$context_name/$this->_startName"] = $this->getStyle($context_name); + return $this->_styleData["$context_name/$this->_startName"]; + } + + function getStyleEnd ($context_name) + { + if (isset($this->_styleData["$context_name/$this->_endName"])) { + return $this->_styleData["$context_name/$this->_endName"]; + } + $this->_styleData["$context_name/$this->_endName"] = $this->getStyle($context_name); + return $this->_styleData["$context_name/$this->_endName"]; + }*/ + /* + function startIsUnique ($context_name) + { + return (isset($this->_styleData["$context_name/$this->_startName"]) + && '' != $this->_styleData["$context_name/$this->_startName"] + && $this->_styleData["$context_name/$this->_startName"] != $this->_styleData[$context_name]); + } + + function endIsUnique ($context_name) + { + $r = (isset($this->_styleData["$context_name/$this->_endName"]) + && '' != $this->_styleData["$context_name/$this->_endName"] + && $this->_styleData["$context_name/$this->_endName"] != $this->_styleData[$context_name]); + geshi_dbg('GeSHiStyler::endIsUnique(' . $context_name . ') = ' . $r, GESHI_DBG_PARSE); + return $r; + } + */ + function resetParseData () + { + $this->_parseData = null; + $this->_parseDataPointer = 0; + } + + /** + * This method adds parse data. It tries to merge it also if two + * consecutive contexts with the same name add parse data (which is + * very possible). + */ + function addParseData ($code, $context_name, $url = '') + { + if ($context_name == $this->_parseData[$this->_parseDataPointer][1]) { + // same context, same URL + $this->_parseData[$this->_parseDataPointer][0] .= $code; + } else { + $this->_parseData[++$this->_parseDataPointer] = array($code, $context_name, $url); + } + } + + function addParseDataStart ($code, $context_name, $start_name = 'start') + { + $this->addParseData($code, "$context_name/$start_name"); + } + + function addParseDataEnd ($code, $context_name, $end_name = 'end') + { + $this->addParseData($code, "$context_name/$end_name"); + } + + function getParseData () + { + return $this->_parseData; + } + + /** + * Sets cache data + */ + function setCacheData ($cached_file_name, $cache_str) + { + $this->_contextCacheData[$cached_file_name] = $cache_str; + } + + /** + * Gets cache data + */ + function getCacheData ($cached_file_name) + { + return isset($this->_contextCacheData[$cached_file_name]) ? + $this->_contextCacheData[$cached_file_name] : null; + } +} + +?> diff --git a/paste/include/geshi/classes/css/class.geshicssinlinemediacontext.php b/paste/include/geshi/classes/css/class.geshicssinlinemediacontext.php new file mode 100644 index 0000000..28bfb5e --- /dev/null +++ b/paste/include/geshi/classes/css/class.geshicssinlinemediacontext.php @@ -0,0 +1,60 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** + * The GeSHiCSSInlineMediaContext class + * + * @package lang + * @author Nigel McNie + * @since 1.1.0 + * @version 1.1.0 + * @see GeSHiContext + */ +class GeSHiCSSInlineMediaContext extends GeSHiContext +{ + /** + * Overrides {@link GeSHiContext::_addParseDataStart()} to + * highlight the start of the inline media context correctly + * + * @param string The code that is part of the start of this context + * @access private + */ + function _addParseDataStart ($code) + { + $this->_styler->addParseData('@media', $this->_contextName . '/starter'); + $this->_styler->addParseDataStart(substr($code, 6), $this->_contextName); + } +} + +?> diff --git a/paste/include/geshi/classes/php/class.geshiphpdoublestringcontext.php b/paste/include/geshi/classes/php/class.geshiphpdoublestringcontext.php new file mode 100644 index 0000000..c7532eb --- /dev/null +++ b/paste/include/geshi/classes/php/class.geshiphpdoublestringcontext.php @@ -0,0 +1,182 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** + * The GeSHiPHPDoubleStringContext class represents a PHP double string + * + * @package lang + * @author Nigel McNie + * @since 1.1.0 + * @version 1.1.0 + * @see GeSHiStringContext, GeSHiContext + */ +class GeSHiPHPDoubleStringContext extends GeSHiStringContext +{ + /** + * A cached copy of the parent name + * @var string + * @access private + */ + var $_parentName; + + /** + * The regular expressions used to match variables + * in this context. + * + * {@internal Do Not Change These! The code logic + * depends on them, they are just assigned here so + * that they aren't assigned every time the + * _addParseData method is called}} + * + * @var array + * @access private + */ + var $_regexes = array( + 'REGEX#(\{?\$\$?\{?[a-zA-Z_][a-zA-Z0-9_]*\}?)#', + 'REGEX#(\{?\$\$?\{?[a-zA-Z_][a-zA-Z0-9_]*\[[\$a-zA-Z0-9_\s\[\]\']*\]\}?)#', + 'REGEX#(\{?)(\$\$?\{?[a-zA-Z_][a-zA-Z0-9_]*)(\s*->\s*)([a-zA-Z_][a-zA-Z0-9_]*)(\}?)#' + ); + + /** + * Loads data for a PHP Double String Context. + * + * @var GeSHiStyler The styler to be used for this context + */ + function load (&$styler) + { + parent::load($styler); + $this->_parentName = parent::getName(); + } + + /** + * Adds code detected as being in this context to the parse data + */ + function _addParseData ($code, $first_char_of_next_context = '') + { + geshi_dbg('GeSHiPHPDoubleStringContext::_addParseData(' . substr($code, 0, 15) . '...)', GESHI_DBG_PARSE); + + while (true) { + $earliest_data = array('pos' => false, 'len' => 0); + foreach ($this->_regexes as $regex) { + $data = geshi_get_position($code, $regex, 0, false, true); // request table + if ((false != $data['pos'] && false === $earliest_data['pos']) || + (false !== $data['pos']) && + (($data['pos'] < $earliest_data['pos']) || + ($data['pos'] == $earliest_data['pos'] && $data['len'] > $earliest_data['len']))) { + $earliest_data = $data; + } + } + + if (false === $earliest_data['pos']) { + // No more variables in this string + break; + } + + // bugfix: because we match a var, it might have been escaped. + // so only do to -1 so we can catch slash if it has been + $pos = ($earliest_data['pos']) ? $earliest_data['pos'] - 1 : 0; + $len = ($earliest_data['pos']) ? $earliest_data['len'] + 1 : $earliest_data['len']; + parent::_addParseData(substr($code, 0, $pos)); + + // Now the entire possible var is in: + $possible_var = substr($code, $pos, $len); + geshi_dbg('Found variable at position ' . $earliest_data['pos'] . '(' . $possible_var . ')', GESHI_DBG_PARSE); + + // Check that the dollar sign that started this variable was not escaped + //$first_part = str_replace('\\\\', '', substr($code, 0, $pos)); + //if ('\\' == substr($first_part, -1)) { + // If \\ before var and { is not next character after that... + if ('\\' == substr($possible_var, 0, 1) && '{' != substr($possible_var, 1, 1)) { + // This variable has been escaped, so add the escaped dollar sign + // as the correct context, and the rest of the variable (recurse to catch + // other variables inside this possible variable) + geshi_dbg('Variable was escaped', GESHI_DBG_PARSE); + $this->_styler->addParseData(substr($possible_var, 0, 2), $this->_parentName . '/esc'); + $this->_addParseData(substr($possible_var, 2)); + } else { + // Add first character that might have been a \\ but in fact isn't to the parent + // but only do it if we had to modify the position + if ('$' != substr($possible_var, 0, 1)) { + parent::_addParseData(substr($possible_var, 0, 1)); + $possible_var = substr($possible_var, 1); + } + + // Many checks could go in here... + // @todo [blocking 1.1.5] check for ${foo} variables: start { matched by end } + // because at the moment ${foo is matched for example. + if ('{' == substr($possible_var, 0, 1)) { + if ('}' == substr($possible_var, -1)) { + $start_brace = '{'; + } else { + $start_brace = ''; + parent::_addParseData('{'); + // remove brace from $possible_var. This will only be used + // if the variable isn't an OO variable anyway... + $possible_var = substr($possible_var, 1); + } + } else { + $start_brace = ''; + } + + if (isset($earliest_data['tab'][5])) { + // Then we matched off the third regex - the one that does objects + // The first { if there is one, and $this (which is in index 2 + $this->_styler->addParseData($start_brace . $earliest_data['tab'][2], $this->_parentName . '/var'); + // The -> with any whitespace around it + $this->_styler->addParseData($earliest_data['tab'][3], $this->_parentName . '/sym0'); + // The method name + $this->_styler->addParseData($earliest_data['tab'][4], $this->_parentName . '/oodynamic'); + // The closing }, if any + if ($earliest_data['tab'][5]) { + if ($start_brace) { + $this->_styler->addParseData($earliest_data['tab'][5], $this->_parentName . '/var'); + } else { + parent::_addParseData('}'); + } + } + } else { + $this->_styler->addParseData($possible_var, $this->_parentName . '/var'); + } + + } + + // Chop off what we have done + $code = substr($code, $earliest_data['pos'] + $earliest_data['len']); + } + // Add the rest + parent::_addParseData($code, $first_char_of_next_context); + } +} + +?> diff --git a/paste/include/geshi/contexts/codeworker/codeworker.php b/paste/include/geshi/contexts/codeworker/codeworker.php new file mode 100644 index 0000000..0ea1155 --- /dev/null +++ b/paste/include/geshi/contexts/codeworker/codeworker.php @@ -0,0 +1,126 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the GeSHiStringContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshistringcontext.php'; + +$this->_childContexts = array( + new GeSHiContext('codeworker', $DIALECT, 'common/multi_comment'), + new GeSHiContext('codeworker', $DIALECT, 'common/single_comment'), + new GeSHiStringContext('codeworker', $DIALECT, 'common/single_string'), + new GeSHiStringContext('codeworker', $DIALECT, 'common/double_string'), + new GeSHiContext('codeworker', $DIALECT, 'roughtext') +); + +$this->_styler->setStyle($CONTEXT, 'color:#000;'); + +$this->_contextKeywords = array( + 0 => array( + 0 => array( + 'foreach', 'forfile', 'in', 'if', 'else', 'while', 'do', 'local', 'ref', 'localref', + 'value', 'node', 'function', 'return', 'insert', 'pushItem', 'break' + ), + 1 => $CONTEXT . '/keywords', + 2 => 'color:#000;font-weight:bold;', + 3 => false, + 4 => '' + ), + 1 => array( + 0 => array( + 'traceLine', 'removeElement', 'clearVariable', 'incrementIndentLevel', + 'decrementIndentLevel', 'setInputLocation', 'readChars', 'getShortFilename', + 'getInputFilename', 'getOutputFilename', 'replaceString', 'subString', 'rsubString', + 'findLastString', 'leftString', 'midString', 'startString', 'toLowerString', + 'toUpperString', 'composeCLikeString', 'composeHTMLLikeString', 'loadFile', 'size', + 'empty', 'key', 'first', 'last' + ), + 1 => $CONTEXT . '/functions', + 2 => 'color:#006;', + 3 => false, + 4 => '' + ), + 2 => array( + 0 => array( + 'project', 'this', '_ARGS', '_REQUEST', 'true', 'false' + ), + 1 => $CONTEXT . '/constants', + 2 => 'color:#900;font-weight:bold;', + 3 => false, + 4 => '' + ), + 3 => array( + 0 => array( + 'parseAsBNF', 'parseStringAsBNF', 'translate', 'translateString' + ), + 1 => $CONTEXT . '/sfunctions', + 2 => 'color:#006;font-weight:bold;', + 3 => false, + 4 => '' + ) +); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + '|', '=', '!', ':', '(', ')', ',', '<', '>', '&', '$', '+', '-', '*', '/', + '{', '}', ';', '[', ']', '~', '?' + ), + 1 => $CONTEXT . '/sym', + 2 => 'color:#008000;' + ) +); + +$this->_contextRegexps = array( + 0 => array( + 0 => array( + '/(#[a-zA-Z][a-zA-Z0-9\-_]*)/' + ), + 1 => '#', + 2 => array( + 1 => array($CONTEXT . '/preprocessor', 'color:#933;', false) + ) + ), + 1 => geshi_use_doubles($CONTEXT), + 2 => geshi_use_integers($CONTEXT) +); + +$this->_objectSplitters = array( + 0 => array( + 0 => array('.'), + 1 => $CONTEXT . '/oodynamic', + 2 => 'color:#559;', + 3 => true // Check that matched method isn't a keyword first + ) +); +?> diff --git a/paste/include/geshi/contexts/codeworker/cworkercwt.php b/paste/include/geshi/contexts/codeworker/cworkercwt.php new file mode 100644 index 0000000..69310ae --- /dev/null +++ b/paste/include/geshi/contexts/codeworker/cworkercwt.php @@ -0,0 +1,138 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the GeSHiStringContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshistringcontext.php'; + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('@', '<%'), + 1 => array('@', '%>'), + 2 => false + ) +); + +$this->_childContexts = array( + // Normally you'd use $DIALECT for the second parameter, but we want this + // context to be as much like codeworker/codeworker as possible + new GeSHiContext('codeworker', 'codeworker', 'common/multi_comment'), + new GeSHiContext('codeworker', 'codeworker', 'common/single_comment'), + new GeSHiStringContext('codeworker', 'codeworker', 'common/single_string'), + new GeSHiStringContext('codeworker', 'codeworker', 'common/double_string') +); + +//Skip styling since should already be done in codeworker/codeworker +//$this->_styler->setStyle($CONTEXT, 'color:#000;'); + +$this->_contextKeywords = array( + 0 => array( + 0 => array( + 'foreach', 'forfile', 'in', 'if', 'else', 'while', 'do', 'local', 'ref', 'localref', + 'value', 'node', 'function', 'return', 'insert', 'pushItem', 'break' + ), + // Again, we're faking being like codeworker + 1 => 'codeworker/codeworker/keywords', + 2 => 'color:#000;font-weight:bold;', + 3 => false, + 4 => '' + ), + 1 => array( + 0 => array( + 'traceLine', 'removeElement', 'clearVariable', 'incrementIndentLevel', + 'decrementIndentLevel', 'setInputLocation', 'readChars', 'getShortFilename', + 'getInputFilename', 'getOutputFilename', 'replaceString', 'subString', 'rsubString', + 'findLastString', 'leftString', 'midString', 'startString', 'toLowerString', + 'toUpperString', 'composeCLikeString', 'composeHTMLLikeString', 'loadFile', 'size', + 'empty', 'key', 'first', 'last' + ), + 1 => 'codeworker/codeworker/functions', + 2 => 'color:#006;', + 3 => false, + 4 => '' + ), + 2 => array( + 0 => array( + 'project', 'this', '_ARGS', '_REQUEST', 'true', 'false' + ), + 1 => 'codeworker/codeworker/constants', + 2 => 'color:#900;font-weight:bold;', + 3 => false, + 4 => '' + ), + 3 => array( + 0 => array( + 'parseAsBNF', 'parseStringAsBNF', 'translate', 'translateString' + ), + 1 => 'codeworker/codeworker/sfunctions', + 2 => 'color:#006;font-weight:bold;', + 3 => false, + 4 => '' + ) +); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + '|', '=', '!', ':', '(', ')', ',', '<', '>', '&', '$', '+', '-', '*', '/', + '{', '}', ';', '[', ']', '~', '?' + ), + 1 => 'codeworker/codeworker/sym', + 2 => 'color:#008000;' + ) +); + +$this->_contextRegexps = array( + 0 => array( + 0 => array( + '/(#[a-zA-Z][a-zA-Z0-9\-_]*)/' + ), + 1 => '#', + 2 => array( + 1 => array('codeworker/codeworker/preprocessor', 'color:#933;', false) + ) + ), + 1 => geshi_use_doubles('codeworker/codeworker'), + 2 => geshi_use_integers('codeworker/codeworker') +); + +$this->_objectSplitters = array( + 0 => array( + 0 => array('.'), + 1 => 'codeworker/codeworker/oodynamic', + 2 => 'color:#559;', + 3 => true // Check that matched method isn't a keyword first + ) +); + +?> diff --git a/paste/include/geshi/contexts/codeworker/cwt.php b/paste/include/geshi/contexts/codeworker/cwt.php new file mode 100644 index 0000000..46337e9 --- /dev/null +++ b/paste/include/geshi/contexts/codeworker/cwt.php @@ -0,0 +1,41 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_styler->setStyle($CONTEXT, 'color:#f00;'); + +$this->_childContexts = array( + new GeSHiCodeContext('codeworker', $DIALECT, 'cworkercwt') +); + +?> diff --git a/paste/include/geshi/contexts/codeworker/roughtext.php b/paste/include/geshi/contexts/codeworker/roughtext.php new file mode 100644 index 0000000..4e465b5 --- /dev/null +++ b/paste/include/geshi/contexts/codeworker/roughtext.php @@ -0,0 +1,58 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('REGEX#generate\s*\(\s*\{#'), + 1 => array('}'), + 2 => false + ), + 1 => array( + 0 => array('REGEX#generateString\s*\(\s*\{#'), + 1 => array('}'), + 2 => false + ), + 2 => array( + 0 => array('REGEX#expand\s*\(\s*\{#'), + 1 => array('}'), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#f00;'); +//$this->_contextStyleType = GESHI_STYLE_NONE; +$this->_delimiterParseData = GESHI_CHILD_PARSE_NONE; +$this->_overridingChildContext =& new GeSHiCodeContext('codeworker', 'cwt'); + +?> diff --git a/paste/include/geshi/contexts/common/double_string.php b/paste/include/geshi/contexts/common/double_string.php new file mode 100644 index 0000000..d45eca1 --- /dev/null +++ b/paste/include/geshi/contexts/common/double_string.php @@ -0,0 +1,51 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('"'), + 1 => array('"'), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#f00;'); +$this->_contextStyleType = GESHI_STYLE_STRINGS; + +// String only stuff +$this->_escapeCharacters = array('\\'); +$this->_charsToEscape = array('n', 'r', 't', '\\', '"'); +$this->_styler->setStyle($CONTEXT . '/esc', 'color:#006;font-weight:bold;'); + +?> diff --git a/paste/include/geshi/contexts/common/multi_comment.php b/paste/include/geshi/contexts/common/multi_comment.php new file mode 100644 index 0000000..8a24ab1 --- /dev/null +++ b/paste/include/geshi/contexts/common/multi_comment.php @@ -0,0 +1,46 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('/*'), + 1 => array('*/'), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#888;font-style:italic;'); +$this->_contextStyleType = GESHI_STYLE_COMMENTS; + +?> diff --git a/paste/include/geshi/contexts/common/single_comment.php b/paste/include/geshi/contexts/common/single_comment.php new file mode 100644 index 0000000..067074c --- /dev/null +++ b/paste/include/geshi/contexts/common/single_comment.php @@ -0,0 +1,46 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('//'), + 1 => array("\n"), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#888;font-style:italic;'); +$this->_contextStyleType = GESHI_STYLE_COMMENTS; + +?> diff --git a/paste/include/geshi/contexts/common/single_string.php b/paste/include/geshi/contexts/common/single_string.php new file mode 100644 index 0000000..3007aae --- /dev/null +++ b/paste/include/geshi/contexts/common/single_string.php @@ -0,0 +1,51 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array("'"), + 1 => array("'"), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#f00;'); +$this->_contextStyleType = GESHI_STYLE_STRINGS; + +// String only stuff +$this->_escapeCharacters = array('\\'); +$this->_charsToEscape = array('\\', "'"); +$this->_styler->setStyle($CONTEXT . '/esc', 'color:#006;font-weight:bold;'); + +?> diff --git a/paste/include/geshi/contexts/common/single_string_eol.php b/paste/include/geshi/contexts/common/single_string_eol.php new file mode 100644 index 0000000..1146471 --- /dev/null +++ b/paste/include/geshi/contexts/common/single_string_eol.php @@ -0,0 +1,51 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array("'"), + 1 => array("'", "\n"), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#f00;'); +$this->_contextStyleType = GESHI_STYLE_STRINGS; + +// String only stuff +$this->_escapeCharacters = array('\\'); +$this->_charsToEscape = array('\\', "'"); +$this->_styler->setStyle($CONTEXT . '/esc', 'color:#006;font-weight:bold;'); + +?> diff --git a/paste/include/geshi/contexts/css/at_rule.php b/paste/include/geshi/contexts/css/at_rule.php new file mode 100644 index 0000000..bc6536b --- /dev/null +++ b/paste/include/geshi/contexts/css/at_rule.php @@ -0,0 +1,74 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('@import', '@charset'), + 1 => array(';'), + 2 => false + ) +); + +$this->_childContexts = array( + new GeSHiStringContext('css', $DIALECT, 'string') +); + +$this->_styler->setStyle($CONTEXT_START, 'color:#c9c;font-weight:bold;'); +$this->_styler->setStyle($CONTEXT_END, 'color:#008000;'); + +$this->_contextKeywords = array( + 0 => array( + 0 => array( + 'url' + ), + 1 => $this->_contextName . '/blah', + 2 => 'color:#933;', + 3 => false, + 4 => '' + ) +); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + ':', ';', '(', ')' + ), + // name (should names have / in them like normal contexts? YES + 1 => $this->_contextName . '/sym', + // style + 2 => 'color:#008000;' + ) +); + +?> diff --git a/paste/include/geshi/contexts/css/attribute_selector.php b/paste/include/geshi/contexts/css/attribute_selector.php new file mode 100644 index 0000000..5914621 --- /dev/null +++ b/paste/include/geshi/contexts/css/attribute_selector.php @@ -0,0 +1,49 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('['), + 1 => array(']'), + 2 => false + ) +); + +$this->_childContexts = array( + new GeSHiStringContext('css', $DIALECT, 'string') +); + +$this->_styler->setStyle($CONTEXT, 'color:#008000;'); + +?> diff --git a/paste/include/geshi/contexts/css/css.php b/paste/include/geshi/contexts/css/css.php new file mode 100644 index 0000000..b2e2afe --- /dev/null +++ b/paste/include/geshi/contexts/css/css.php @@ -0,0 +1,103 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the GeSHiCSSInlineMediaContext class */ +require_once GESHI_CLASSES_ROOT . 'css' . GESHI_DIR_SEPARATOR . 'class.geshicssinlinemediacontext.php'; + +$this->_childContexts = array( + new GeSHiCSSInlineMediaContext('css', $DIALECT, 'inline_media'), + new GeSHiCodeContext('css', $DIALECT, 'rule'), + new GeSHiContext('css', $DIALECT, 'common/multi_comment'), + new GeSHiContext('css', $DIALECT, 'attribute_selector'), + new GeSHiCodeContext('css', $DIALECT, 'at_rule') +); + +$this->_styler->setStyle($CONTEXT, 'color:#000;'); + +$this->_contextKeywords = array( + 0 => array( + 0 => array( + '@font-face' + ), + 1 => $CONTEXT . '/atrules', + 2 => 'color:#c9c;font-weight:bold;', + 3 => false, + 4 => '' + ), + 1 => array( + 0 => array( + 'hover', 'link', 'visited', 'active', 'focus', 'first-child', 'first-letter', + 'first-line', 'before', 'after' + ), + 1 => $CONTEXT . '/psuedoclasses', + 2 => 'color:#33f;', + 3 => false, + 4 => '' + ) +); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + ',', '*', '>', '+' + ), + // name (should names have / in them like normal contexts? YES + 1 => $CONTEXT . '/sym', + // style + 2 => 'color:#008000;' + ) +); + +$this->_contextRegexps = array( + 0 => array( + 0 => array( + '#(\.[a-zA-Z][a-zA-Z0-9\-_]*)#' + ), + 1 => '.', + 2 => array( + 1 => array($CONTEXT . '/class', 'color:#c9c;', false)// Don't check whether the match is actually a keyword + ) + ), + 1 => array( + 0 => array( + '/(#[a-zA-Z][a-zA-Z0-9\-_]*)/' + ), + 1 => '#', + 2 => array( + 1 => array($CONTEXT . '/id', 'color:#c9c;font-weight:bold;', false) + ) + ) +); + +?> diff --git a/paste/include/geshi/contexts/css/inline_media.php b/paste/include/geshi/contexts/css/inline_media.php new file mode 100644 index 0000000..3d17a5b --- /dev/null +++ b/paste/include/geshi/contexts/css/inline_media.php @@ -0,0 +1,54 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('REGEX#@media\s+\w+\s+\{#'), + 1 => array('}'), + 2 => false + ) +); + +$this->_childContexts = array( + new GeSHiCodeContext('css', $DIALECT, 'rule') +); + +$this->_styler->setStyle($CONTEXT, 'color:#b1b100;'); +$this->_styler->setStyle($CONTEXT_START, 'color:#000;font-weight:bold;'); +$this->_styler->setStyle($CONTEXT_END, 'color:#000;font-weight:bold;'); +// GeSHiCSSInlineMediaContext stuff +// @todo [blocking 1.1.1] do this with new alias stuff? +$this->_styler->setStyle($CONTEXT . '/starter', 'color:#c9c;font-weight:bold;'); + +?> diff --git a/paste/include/geshi/contexts/css/rule.php b/paste/include/geshi/contexts/css/rule.php new file mode 100644 index 0000000..7309f69 --- /dev/null +++ b/paste/include/geshi/contexts/css/rule.php @@ -0,0 +1,301 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the GeSHiStringContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshistringcontext.php'; + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('{'), + 1 => array('}'), + 2 => false + ) +); + +$this->_childContexts = array( + new GeSHiStringContext('css', $DIALECT, 'string'), + new GeSHiContext('css', $DIALECT, 'common/multi_comment') +); + +$this->_styler->setStyle($CONTEXT_START, 'font-weight:bold;color:#000;'); +$this->_styler->setStyle($CONTEXT_END, 'font-weight:bold;color:#000;'); + +$this->_contextKeywords = array( + 0 => array( + // keywords + 0 => array( + 'azimuth', 'background', 'background-attachment', 'background-color', 'background-image', + 'background-position', 'background-repeat', 'border', 'border-bottom', 'border-bottom-color', + 'border-bottom-style', 'border-bottom-width', 'border-collapse', 'border-color', 'border-left', + 'border-left-color', 'border-left-style', 'border-left-width', 'border-right', 'border-right-color', + 'border-right-style', 'border-right-width', 'border-spacing', 'border-style', 'border-top', + 'border-top-color', 'border-top-style', 'border-top-width', 'border-width', 'bottom', + 'caption-side', 'clear', 'clip', 'color', 'content', 'counter-increment', 'counter-reset', 'cue', + 'cue-after', 'cue-before', 'cursor', 'direction', 'display', 'elevation', 'empty-cells', 'float', + 'font', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', + 'font-variant', 'font-weight', 'height', 'left', 'letter-spacing', 'line-height', 'list-style', + 'list-style-image', 'list-style-keyword', 'list-style-position', 'list-style-type', 'margin', + 'margin-bottom', 'margin-left', 'margin-right', 'margin-top', 'marker-offset', 'max-height', + 'max-width', 'min-height', 'min-width', 'orphans', 'outline', 'outline-color', 'outline-style', + 'outline-width', 'overflow', 'padding', 'padding-bottom', 'padding-left', 'padding-right', + 'padding-top', 'page', 'page-break-after', 'page-break-before', 'page-break-inside', 'pause', + 'pause-after', 'pause-before', 'pitch', 'pitch-range', 'play-during', 'position', 'quotes', + 'richness', 'right', 'size', 'speak', 'speak-header', 'speak-numeral', 'speak-punctuation', + 'speech-rate', 'stress', 'table-layout', 'text-align', 'text-decoration', 'text-decoration-color', + 'text-indent', 'text-shadow', 'text-transform', 'top', 'unicode-bidi', 'vertical-align', + 'visibility', 'voice-family', 'volume', 'white-space', 'widows', 'width', 'word-spacing', + 'z-index', 'konq_bgpos_x', 'konq_bgpos_y', 'unicode-range', 'units-per-em', 'src', 'panose-1', + 'stemv', 'stemh', 'slope', 'cap-height', 'x-height', 'ascent', 'descent', 'widths', 'bbox', + 'definition-src', 'baseline', 'centerline', 'mathline', 'topline', '!important' + ), + // name + 1 => $CONTEXT . '/attrs', + // style + 2 => 'color:#000;font-weight:bold;', + // case sensitive + 3 => false, + // url + 4 => '' + ), + 1 => array( + 0 => array( + 'url', 'attr', 'rect', 'rgb', 'counter', 'counters', 'local', 'format' + ), + 1 => $CONTEXT . '/paren', + 2 => 'color:#933;', + 3 => false, + 4 => '' + ), + 2 => array( + 0 => array( + 'aqua', 'black', 'blue', 'fuchsia', 'gray', 'green', 'lime', 'maroon', 'navy', 'olive', + 'purple', 'red', 'silver', 'teal', 'white', 'yellow', 'ActiveBorder', 'ActiveCaption', + 'AppWorkspace', 'Background', 'ButtonFace', 'ButtonHighlight', 'ButtonShadow', 'ButtonText', + 'CaptionText', 'GrayText', 'Highlight', 'HighlightText', 'InactiveBorder', 'InactiveCaption', + 'InactiveCaptionText', 'InfoBackground', 'InfoText', 'Menu', 'MenuText', 'Scrollbar', + 'ThreeDDarkShadow', 'ThreeDFace', 'ThreeDHighlight', 'ThreeDLightShadow', 'ThreeDShadow', + 'Window', 'WindowFrame', 'WindowText' + ), + 1 => $CONTEXT . '/colors', + 2 => 'color:#339;', + 3 => false, + 4 => '' + ), + 3 => array( + 0 => array( + 'inherit', 'none', 'hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', + 'outset', 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', 'smaller', + 'larger', 'italic', + 'oblique', + 'small-caps', + 'normal', + 'bold', + 'bolder', + 'lighter', + 'light', + 'transparent', + 'repeat', + 'repeat-x', + 'repeat-y', + 'no-repeat', + 'baseline', + 'sub', + 'super', + 'top', + 'text-top', + 'middle', + 'bottom', + 'text-bottom', + 'left', + 'right', + 'center', + 'justify', + 'konq-center', + 'disc', + 'circle', + 'square', + 'decimal', + 'decimal-leading-zero', + 'lower-roman', + 'upper-roman', + 'lower-greek', + 'lower-alpha', + 'lower-latin', + 'upper-alpha', + 'upper-latin', + 'hebrew', + 'armenian', + 'georgian', + 'cjk-ideographic', + 'hiragana', + 'katakana', + 'hiragana-iroha', + 'katakana-iroha', + 'inline', + 'block', + 'list-item', + 'run-in', + 'compact', + 'marker', + 'table', + 'inline-table', + 'table-row-group', + 'table-header-group', + 'table-footer-group', + 'table-row', + 'table-column-group', + 'table-column', + 'table-cell', + 'table-caption', + 'auto', + 'crosshair', + 'default', + 'pointer', + 'move', + 'e-resize', + 'ne-resize', + 'nw-resize', + 'n-resize', + 'se-resize', + 'sw-resize', + 's-resize', + 'w-resize', + 'text', + 'wait', + 'help', + 'above', + 'absolute', + 'always', + 'avoid', + 'below', + 'bidi-override', + 'blink', + 'both', + 'capitalize', + 'caption', + 'close-quote', + 'collapse', + 'condensed', + 'crop', + 'cross', + 'embed', + 'expanded', + 'extra-condensed', + 'extra-expanded', + 'fixed', + 'hand', + 'hide', + 'higher', + 'icon', + 'inside', + 'invert', + 'landscape', + 'level', + 'line-through', + 'loud', + 'lower', + 'lowercase', + 'ltr', + 'menu', + 'message-box', + 'mix', + 'narrower', + 'no-close-quote', + 'no-open-quote', + 'nowrap', + 'open-quote', + 'outside', + 'overline', + 'portrait', + 'pre', + 'relative', + 'rtl', + 'scroll', + 'semi-condensed', + 'semi-expanded', + 'separate', + 'show', + 'small-caption', + 'static', + 'static-position', + 'status-bar', + 'thick', + 'thin', + 'ultra-condensed', + 'ultra-expanded', + 'underline', + 'uppercase', + 'visible', + 'wider', + 'break', + 'serif', + 'sans-serif', + 'cursive', + 'fantasy', + 'monospace' + ), + 1 => $CONTEXT . '/types', + 2 => 'color:#393;', + 3 => false, + 4 => '' + ) +); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + ':', ';', '(', ')', ',' + ), + // name (should names have / in them like normal contexts? YES + 1 => $CONTEXT . '/sym', + // style + 2 => 'color:#008000;' + ) +); + +$this->_contextRegexps = array( + 0 => array( + 0 => array( + '#([-+]?[0-9]((em)|(ex)|(px)|(in)|(cm)|(mm)|(pt)|(pc)|%))#', + '/(#(([0-9a-fA-F]){3}){1,2})/', + '/([0-9]+)/' + ), + 1 => '', + 2 => array( + 1 => array($CONTEXT . '/value', 'color: #933;', false) + ) + ) +); + +?> diff --git a/paste/include/geshi/contexts/css/string.php b/paste/include/geshi/contexts/css/string.php new file mode 100644 index 0000000..fffe255 --- /dev/null +++ b/paste/include/geshi/contexts/css/string.php @@ -0,0 +1,55 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('"'), + 1 => array('"'), + 2 => false + ), + 1 => array( + 0 => array("'"), + 1 => array("'"), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#f00;'); +$this->_contextStyleType = GESHI_STYLE_STRINGS; + +$this->_escapeCharacters = array('\\'); +$this->_charsToEscape = array('\\', 'A', 'DELIM'); +$this->_styler->setStyle($CONTEXT . '/esc', 'color:#006;font-weight:bold;'); + +?> diff --git a/paste/include/geshi/contexts/delphi/asm.php b/paste/include/geshi/contexts/delphi/asm.php new file mode 100644 index 0000000..dd63b4f --- /dev/null +++ b/paste/include/geshi/contexts/delphi/asm.php @@ -0,0 +1,271 @@ +, Nigel McNie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('asm'), + 1 => array('end'), + 2 => false + ) +); + +$this->_childContexts = array( + new GeSHiContext('delphi', $DIALECT, 'preprocessor'), + new GeSHiContext('delphi', $DIALECT, 'common/single_comment') +); + +$this->_styler->setStyle($CONTEXT, 'color:#00f;'); +$this->_styler->setStyle($CONTEXT_START, 'color:#f00;font-weight:bold;'); +$this->_styler->setStyle($CONTEXT_END, 'color:#f00;font-weight:bold;'); + +$this->_contextKeywords = array( + //Assembler Directives + 0 => array( + 0 => array( + 'db','dd','dw' + ), + 1 => $CONTEXT . '/keywords', + 2 => 'color:#00f; font-weight:bold;', + 3 => false, + 4 => '' + ), + + 1 => array( + 0 => array( + 'large', 'small', + 'offset','vmtoffset','dmtindex', + 'byte', 'word', 'dword', 'qword', 'tbyte', 'ptr' + ), + 1 => $CONTEXT . '/control', + 2 => 'color:#00f; font-weight: bold;', + 3 => false, + 4 => '' + ), + + //CPU i386 instructions + 2 => array( + 0 => array( +/* + // @todo order the i386 instruction set + + 'aaa','aad','aam','aas','adc','add','and','call','cbw','clc','cld','cli','cmc','cmp', + 'cmps','cmpsb','cmpsw','cwd','daa','das','dec','div','esc','hlt','idiv','imul','in','inc', + 'int','into','iret','ja','jae','jb','jbe','jc','jcxz','je','jg','jge','jl','jle','jmp', + 'jna','jnae','jnb','jnbe','jnc','jne','jng','jnge','jnl','jnle','jno','jnp','jns','jnz', + 'jo','jp','jpe','jpo','js','jz','lahf','lds','lea','les','lods','lodsb','lodsw','loop', + 'loope','loopew','loopne','loopnew','loopnz','loopnzw','loopw','loopz','loopzw','mov', + 'movs','movsb','movsw','mul','neg','nop','not','or','out','pop','popf','push','pushf', + 'rcl','rcr','ret','retf','retn','rol','ror','sahf','sal','sar','sbb','scas','scasb','scasw', + 'shl','shr','stc','std','sti','stos','stosb','stosw','sub','test','wait','xchg','xlat', + 'xlatb','xor','bound','enter','ins','insb','insw','leave','outs','outsb','outsw','popa','pusha','pushw', + 'arpl','lar','lsl','sgdt','sidt','sldt','smsw','str','verr','verw','clts','lgdt','lidt','lldt','lmsw','ltr', + 'bsf','bsr','bt','btc','btr','bts','cdq','cmpsd','cwde','insd','iretd','iretdf','iretf', + 'jecxz','lfs','lgs','lodsd','loopd','looped','loopned','loopnzd','loopzd','lss','movsd', + 'movsx','movzx','outsd','popad','popfd','pushad','pushd','pushfd','scasd','seta','setae', + 'setb','setbe','setc','sete','setg','setge','setl','setle','setna','setnae','setnb','setnbe', + 'setnc','setne','setng','setnge','setnl','setnle','setno','setnp','setns','setnz','seto','setp', + 'setpe','setpo','sets','setz','shld','shrd','stosd','bswap','cmpxchg','invd','invlpg', + 'wbinvd','xadd','lock','rep','repe','repne','repnz','repz' +*/ + 'AAA','AAD','AAM','AAS','ADC','ADD','AND','ARPL','BOUND','BSF','BSR','BSWAP','BT','BTC','BTR', + 'BTS','CALL','CBW','CDQ','CLC','CLD','CLI','CLTS','CMC','CMP','CMPSB','CMPSD','CMPSW', + 'CMPXCHG','CMPXCHG486','CMPXCHG8B','CPUID','CWD','CWDE', + 'cmova','cmovae','cmovb','cmovbe','cmovc','cmovcxz','cmove','cmovg','cmovge','cmovl','cmovle', + 'cmovna','cmovnae','cmovnb','cmovnbe','cmovnc','cmovne','cmovng','cmovnge','cmovnl','cmovnle', + 'cmovno','cmovnp','cmovns','cmovnz','cmovo','cmovp','cmovpe','cmovpo','cmovs','cmovz', + 'DAA','DAS','DEC','DIV','EMMS','ENTER','HLT','IBTS','ICEBP','IDIV','IMUL','IN','INC','INSB', + 'INSD','INSW','INT','INT01','INT1','INT03','INT3','INTO','INVD','INVLPG','IRET','IRETD','IRETW', + 'JCXZ','JECXZ','JMP','ja','jae','jb','jbe','jc','jcxz','je','jg','jge','jl','jle','jna','jnae', + 'jnb','jnbe','jnc','jne','jng','jnge','jnl','jnle','jno','jnp','jns','jnz','jo','jp','jpe', + 'jpo','js','jz','LAHF','LAR','LCALL','LDS','LEA','LEAVE','LES','LFS','LGDT','LGS','LIDT', + 'LJMP','LLDT','LMSW','LOADALL','LOADALL286','LOCK','LODSB','LODSD','LODSW','LOOP','LOOPE', + 'LOOPNE','LOOPNZ','LOOPZ','LSL','LSS','LTR','MOV','MOVD','MOVQ','MOVSB','MOVSD','MOVSW','MOVSX', + 'MOVZX','MUL','NEG','NOP','NOT','OR','OUT','OUTSB','OUTSD','OUTSW','POP','POPA','POPAD','POPAW', + 'POPF','POPFD','POPFW','PUSH','PUSHA','PUSHAD','PUSHAW','PUSHF','PUSHFD','PUSHFW','RCL','RCR', + 'RDSHR','RDMSR','RDPMC','RDTSC','REP','REPE','REPNE','REPNZ','REPZ','RET','RETF','RETN','ROL', + 'ROR','RSDC','RSLDT','RSM','SAHF','SAL','SALC','SAR','SBB','SCASB','SCASD','SCASW','SGDT', + 'seta','setae','setb','setbe','setc','setcxz','sete','setg','setge','setl','setle','setna', + 'setnae','setnb','setnbe','setnc','setne','setng','setnge','setnl','setnle','setno','setnp', + 'setns','setnz','seto','setp','setpe','setpo','sets','setz', + 'SHL','SHLD','SHR','SHRD','SIDT','SLDT','SMI','SMINT','SMINTOLD','SMSW','STC','STD','STI','STOSB', + 'STOSD','STOSW','STR','SUB','SVDC','SVLDT','SVTS','SYSCALL','SYSENTER','SYSEXIT','SYSRET','TEST', + 'UD1','UD2','UMOV','VERR','VERW','WAIT','WBINVD','WRSHR','WRMSR','XADD','XBTS','XCHG','XLAT', + 'XLATB','XOR' + ), + 1 => $CONTEXT . '/instr_i386', + 2 => 'color:#00f; font-weight:bold;', + 3 => false, + 4 => '' + ), + + //FPU i387 instructions + 3 => array( + 0 => array( + /* + // @todo order the i387 instruction set + 'f2xm1','fabs','fadd','faddp','fbld','fbstp','fchs','fclex','fcom','fcomp','fcompp','fdecstp', + 'fdisi','fdiv','fdivp','fdivr','fdivrp','feni','ffree','fiadd','ficom','ficomp','fidiv', + 'fidivr','fild','fimul','fincstp','finit','fist','fistp','fisub','fisubr','fld','fld1', + 'fldcw','fldenv','fldenvw','fldl2e','fldl2t','fldlg2','fldln2','fldpi','fldz','fmul', + 'fmulp','fnclex','fndisi','fneni','fninit','fnop','fnsave','fnsavew','fnstcw','fnstenv', + 'fnstenvw','fnstsw','fpatan','fprem','fptan','frndint','frstor','frstorw','fsave', + 'fsavew','fscale','fsqrt','fst','fstcw','fstenv','fstenvw','fstp','fstsw','fsub','fsubp', + 'fsubr','fsubrp','ftst','fwait','fxam','fxch','fxtract','fyl2x','fyl2xp1', + 'fsetpm','fcos','fldenvd','fnsaved','fnstenvd','fprem1','frstord','fsaved','fsin','fsincos', + 'fstenvd','fucom','fucomp','fucompp' + */ + 'F2XM1','FABS','FADD','FADDP','FBLD','FBSTP','FCHS','FCLEX','FCMOVB','FCMOVBE','FCMOVE','FCMOVNB', + 'FCMOVNBE','FCMOVNE','FCMOVNU','FCMOVU','FCOM','FCOMI','FCOMIP','FCOMP','FCOMPP','FCOS','FDECSTP', + 'FDISI','FDIV','FDIVP','FDIVR','FDIVRP','FEMMS','FENI','FFREE','FIADD','FICOM','FICOMP','FIDIV', + 'FIDIVR','FILD','FIMUL','FINCSTP','FINIT','FIST','FISTP','FISUB','FISUBR','FLD','FLD1','FLDCW', + 'FLDENV','FLDL2E','FLDL2T','FLDLG2','FLDLN2','FLDPI','FLDZ','FMUL','FMULP','FNCLEX','FNDISI', + 'FNENI','FNINIT','FNOP','FNSAVE','FNSTCW','FNSTENV','FNSTSW','FPATAN','FPREM','FPREM1','FPTAN', + 'FRNDINT','FRSTOR','FSAVE','FSCALE','FSETPM','FSIN','FSINCOS','FSQRT','FST','FSTCW','FSTENV', + 'FSTP','FSTSW','FSUB','FSUBP','FSUBR','FSUBRP','FTST','FUCOM','FUCOMI','FUCOMIP','FUCOMP', + 'FUCOMPP','FWAIT','FXAM','FXCH','FXTRACT','FYL2X','FYL2XP1' + ), + 1 => $CONTEXT . '/instr_i387', + 2 => 'color:#00f; font-weight:bold;', + 3 => false, + 4 => '' + ), + + //MMX instruction set + 4 => array( + 0 => array( + // @todo order the mmx instruction set + + 'FFREEP','FXRSTOR','FXSAVE','PREFETCHNTA','PREFETCHT0','PREFETCHT1','PREFETCHT2','SFENCE', + 'MASKMOVQ','MOVNTQ','PAVGB','PAVGW','PEXTRW','PINSRW','PMAXSW','PMAXUB','PMINSW','PMINUB', + 'PMOVMSKB','PMULHUW','PSADBW','PSHUFW', + + 'PACKSSDW','PACKSSWB','PACKUSWB','PADDB','PADDD','PADDSB','PADDSIW','PADDSW','PADDUSB','PADDUSW', + 'PADDW','PAND','PANDN','PAVEB','PCMPEQB','PCMPEQD','PCMPEQW','PCMPGTB','PCMPGTD', + 'PCMPGTW','PDISTIB','PFCMPEQ','PFCMPGE','PFCMPGT','PMACHRIW','PMADDWD', + 'PMAGW','PMVGEZB','PMVLZB','PMVNZB','PMVZB', + 'POR','PSLLD','PSLLQ','PSLLW','PSRAD','PSRAW','PSRLD','PSRLQ','PSRLW', + 'PSUBB','PSUBD','PSUBSB','PSUBSIW','PSUBSW','PSUBUSB','PSUBUSW','PSUBW','PUNPCKHBW','PUNPCKHDQ', + 'PUNPCKHWD','PUNPCKLBW','PUNPCKLDQ','PUNPCKLWD','PXOR' + ), + 1 => $CONTEXT . '/instr/mmx', + 2 => 'color:#00f; font-weight:bold;', + 3 => false, + 4 => '' + ), + + //SSE instruction set + 5 => array( + 0 => array( + // @todo order the SSE instruction set + 'ADDPS','ADDSS','ANDNPS','ANDPS','CMPEQPS','CMPEQSS','CMPLEPS','CMPLESS','CMPLTPS','CMPLTSS', + 'CMPNEQPS','CMPNEQSS','CMPNLEPS','CMPNLESS','CMPNLTPS','CMPNLTSS','CMPORDPS','CMPORDSS', + 'CMPUNORDPS','CMPUNORDSS','CMPPS','CMPSS','COMISS','CVTPI2PS','CVTPS2PI','CVTSI2SS','CVTSS2SI', + 'CVTTPS2PI','CVTTSS2SI','DIVPS','DIVSS','LDMXCSR','MAXPS','MAXSS','MINPS','MINSS','MOVAPS', + 'MOVHPS','MOVLHPS','MOVLPS','MOVHLPS','MOVMSKPS','MOVNTPS','MOVSS','MOVUPS','MULPS','MULSS', + 'ORPS','RCPPS','RCPSS','RSQRTPS','RSQRTSS','SHUFPS','SQRTPS','SQRTSS','STMXCSR','SUBPS', + 'SUBSS','UCOMISS','UNPCKHPS','UNPCKLPS','XORPS' + ), + 1 => $CONTEXT . '/instr/sse', + 2 => 'color:#00f; font-weight:bold;', + 3 => false, + 4 => '' + ), + + //3DNow instruction set + 6 => array( + 0 => array( + // @todo order the 3Dnow! instruction set + 'PAVGUSB','PF2ID','PFACC','PFADD','PFMUL','PFRCP','PFRCPIT1','PFRCPIT2','PFRSQIT1','PFRSQRT', + 'PFSUB','PFSUBR','PFMAX','PFMIN','PI2FD','PMULHRIW','PMULHRWA','PMULHRWC','PMULHW','PMULLW', + 'PREFETCH','PREFETCHW' + ), + 1 => $CONTEXT . '/instr/3Dnow', + 2 => 'color:#00f; font-weight:bold;', + 3 => false, + 4 => '' + ), + + //3DNowExt instruction set + 7 => array( + 0 => array( + // @todo order the 3Dnow! Ext instruction set + 'PFNACC','PFPNACC','PI2FW','PF2IW','PSWAPD' + ), + 1 => $CONTEXT . '/instr/3Dnow2', + 2 => 'color:#00f; font-weight:bold;', + 3 => false, + 4 => '' + ) +); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + ',', ';', '[', ']', '.' + ), + 1 => $CONTEXT . '/sym', + 2 => 'color:#008000;' + ) +); + +$this->_contextRegexps = array( + 0 => array( + 0 => array('#([a-zA-Z]+:)#'), + 1 => ':', + 2 => array( + 1 => array($CONTEXT . '/label', 'color:#933;', false) + ) + ), + 1 => array( + 0 => array( + '/(\$[0-9a-fA-F_]+)/' + ), + 1 => '$', + 2 => array( + 1 => array($CONTEXT . '/hex', 'color: #2bf;', false) + ) + ), + 2 => geshi_use_integers($CONTEXT) +); + +$this->_objectSplitters = array( + 0 => array( + 0 => array('.'), + 1 => $CONTEXT . '/oodynamic', + 2 => 'color:#559;', + 3 => false // If true, check that matched method isn't a keyword first + ) +); + +?> diff --git a/paste/include/geshi/contexts/delphi/delphi.php b/paste/include/geshi/contexts/delphi/delphi.php new file mode 100644 index 0000000..56f763c --- /dev/null +++ b/paste/include/geshi/contexts/delphi/delphi.php @@ -0,0 +1,382 @@ +, Nigel McNie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +// @todo [blocking 1.1.1] Rename OCCs with parent's name in front for theming +// BenBE: What do you mean? +// My todo for theming support, not relevant to delphi +// @todo [blocking 1.1.1] make keywords not keywords if they don't have a ( after +// them (e.g. a variable named "sum" will be highlighted as a keyword even if it isn't) +$this->_childContexts = array( + new GeSHiContext('delphi', $DIALECT, 'multi_comment'), + new GeSHiContext('delphi', $DIALECT, 'common/single_comment'), + new GeSHiContext('delphi', $DIALECT, 'common/single_string_eol'), + new GeSHiContext('delphi', $DIALECT, 'preprocessor'), + new GeSHiCodeContext('delphi', $DIALECT, 'asm'), + new GeSHiCodeContext('delphi', $DIALECT, 'extern', 'delphi/' . $DIALECT), + new GeSHiCodeContext('delphi', $DIALECT, 'property', 'delphi/' . $DIALECT) +); + +//$this->_styler->setStyle($CONTEXT, 'color:#000;'); + +$this->_contextKeywords = array( + 0 => array( + 0 => array( + //@todo [blocking 1.1.1] get keywords normal way + 'And', + 'Array', + 'As', + 'Asm', + 'At', + 'Begin', + 'Case', + 'Class', + 'Const', + 'Constructor', + 'Contains', + 'Destructor', + 'DispInterface', + 'Div', + 'Do', + 'DownTo', + 'Else', + 'End', + 'Except', + 'File', + 'Finalization', + 'Finally', + 'For', + 'Function', + 'Goto', + 'If', + 'Implementation', + 'In', + 'Inherited', + 'Initialization', + 'Inline', + 'Interface', + 'Is', + 'Label', + 'Mod', + 'Not', + 'Object', + 'Of', + 'On', + 'Or', + 'Packed', + 'Package', + 'Procedure', + 'Program', + 'Property', + 'Raise', + 'Record', + 'Requires', + 'Repeat', + 'Resourcestring', + 'Set', + 'Shl', + 'Shr', + 'Then', + 'ThreadVar', + 'To', + 'Try', + 'Type', + 'Unit', + 'Until', + 'Uses', + 'Var', + 'While', + 'With', + 'Xor', + + 'Private', 'Protected', 'Public', 'Published', + + 'Virtual', 'Abstract', 'Override', 'Overload', + + 'cdecl', 'stdcall', 'register', 'pascal', 'safecall', 'near', 'far', 'varargs', + + 'assembler' + ), + 1 => $CONTEXT . '/keywords', + 2 => 'color:#f00; font-weight:bold;', + 3 => false, + 4 => '' + ), + 1 => array( + 0 => array( + 'Boolean', 'ByteBool', 'LongBool', 'WordBool', 'Bool', + + 'Byte', 'SmallInt', + 'ShortInt', 'Word', + 'Integer', 'Cardinal', + 'LongInt', 'DWORD', + 'Int64', + + 'Single', 'Double', 'Extended', + 'Real48', 'Real', 'Comp', 'Currency', + + 'Pointer', + + 'Char', 'AnsiChar', 'WideChar', + 'PChar', 'PAnsiChar', 'PWideChar', + 'String', 'AnsiString', 'WideString', + + 'THandle' + ), + 1 => $CONTEXT . '/keytypes', + 2 => 'color:#000; font-weight:bold;', + 3 => false, + 4 => '' + ), + + 2 => array( + 0 => array( + 'nil', + 'false', 'true' + ), + 1 => $CONTEXT . '/keyidents', + 2 => 'color:#000; font-weight:bold;', + 3 => false, + 4 => '' + ), + + //Standard functions of Unit System + 3 => array( + 0 => array( + 'Abs','AcquireExceptionObject','Addr','AnsiToUtf8','Append','ArcTan','Assert','Assigned','AssignFile', + 'BeginThread','BlockRead','BlockWrite','Break','ChDir','Chr','Close','CloseFile','CompToCurrency', + 'CompToDouble','Concat','Continue','Copy','Cos','Dec','Delete','Dispose','DoubleToComp','EndThread', + 'EnumModules','EnumResourceModules','Eof','Eoln','Erase','ExceptAddr','ExceptObject','Exclude','Exit', + 'Exp','FilePos','FileSize','FillChar','Finalize','FindClassHInstance','FindHInstance','FindResourceHInstance', + 'Flush','Frac','FreeMem','Get8087CW','GetDir','GetLastError','GetMem','GetMemoryManager', + 'GetModuleFileName','GetVariantManager','Halt','Hi','High','Inc','Include','Initialize','Insert', + 'Int','IOResult','IsMemoryManagerSet','IsVariantManagerSet','Length','Ln','Lo','Low','MkDir','Move', + 'New','Odd','OleStrToString','OleStrToStrVar','Ord','ParamCount','ParamStr','Pi','Pos','Pred','Ptr', + 'PUCS4Chars','Random','Randomize','Read','ReadLn','ReallocMem','ReleaseExceptionObject','Rename', + 'Reset','Rewrite','RmDir','Round','RunError','Seek','SeekEof','SeekEoln','Set8087CW','SetLength', + 'SetLineBreakStyle','SetMemoryManager','SetString','SetTextBuf','SetVariantManager','Sin','SizeOf', + 'Slice','Sqr','Sqrt','Str','StringOfChar','StringToOleStr','StringToWideChar','Succ','Swap','Trunc', + 'Truncate','TypeInfo','UCS4StringToWideString','UnicodeToUtf8','UniqueString','UpCase','UTF8Decode', + 'UTF8Encode','Utf8ToAnsi','Utf8ToUnicode','Val','VarArrayRedim','VarClear','WideCharLenToString', + 'WideCharLenToStrVar','WideCharToString','WideCharToStrVar','WideStringToUCS4String','Write','WriteLn' + ), + 1 => $CONTEXT . '/stdprocs/system', + 2 => 'color:#444;', + 3 => false, + 4 => '' + ), + + //Standard functions of Unit SysUtils + 4 => array( + 0 => array( + 'Abort','AddExitProc','AddTerminateProc','AdjustLineBreaks','AllocMem','AnsiCompareFileName', + 'AnsiCompareStr','AnsiCompareText','AnsiDequotedStr','AnsiExtractQuotedStr','AnsiLastChar', + 'AnsiLowerCase','AnsiLowerCaseFileName','AnsiPos','AnsiQuotedStr','AnsiSameStr','AnsiSameText', + 'AnsiStrComp','AnsiStrIComp','AnsiStrLastChar','AnsiStrLComp','AnsiStrLIComp','AnsiStrLower', + 'AnsiStrPos','AnsiStrRScan','AnsiStrScan','AnsiStrUpper','AnsiUpperCase','AnsiUpperCaseFileName', + 'AppendStr','AssignStr','Beep','BoolToStr','ByteToCharIndex','ByteToCharLen','ByteType', + 'CallTerminateProcs','ChangeFileExt','CharLength','CharToByteIndex','CharToByteLen','CompareMem', + 'CompareStr','CompareText','CreateDir','CreateGUID','CurrentYear','CurrToStr','CurrToStrF','Date', + 'DateTimeToFileDate','DateTimeToStr','DateTimeToString','DateTimeToSystemTime','DateTimeToTimeStamp', + 'DateToStr','DayOfWeek','DecodeDate','DecodeDateFully','DecodeTime','DeleteFile','DirectoryExists', + 'DiskFree','DiskSize','DisposeStr','EncodeDate','EncodeTime','ExceptionErrorMessage', + 'ExcludeTrailingBackslash','ExcludeTrailingPathDelimiter','ExpandFileName','ExpandFileNameCase', + 'ExpandUNCFileName','ExtractFileDir','ExtractFileDrive','ExtractFileExt','ExtractFileName', + 'ExtractFilePath','ExtractRelativePath','ExtractShortPathName','FileAge','FileClose','FileCreate', + 'FileDateToDateTime','FileExists','FileGetAttr','FileGetDate','FileIsReadOnly','FileOpen','FileRead', + 'FileSearch','FileSeek','FileSetAttr','FileSetDate','FileSetReadOnly','FileWrite','FinalizePackage', + 'FindClose','FindCmdLineSwitch','FindFirst','FindNext','FloatToCurr','FloatToDateTime', + 'FloatToDecimal','FloatToStr','FloatToStrF','FloatToText','FloatToTextFmt','FmtLoadStr','FmtStr', + 'ForceDirectories','Format','FormatBuf','FormatCurr','FormatDateTime','FormatFloat','FreeAndNil', + 'GetCurrentDir','GetEnvironmentVariable','GetFileVersion','GetFormatSettings', + 'GetLocaleFormatSettings','GetModuleName','GetPackageDescription','GetPackageInfo','GUIDToString', + 'IncAMonth','IncludeTrailingBackslash','IncludeTrailingPathDelimiter','IncMonth','InitializePackage', + 'InterlockedDecrement','InterlockedExchange','InterlockedExchangeAdd','InterlockedIncrement', + 'IntToHex','IntToStr','IsDelimiter','IsEqualGUID','IsLeapYear','IsPathDelimiter','IsValidIdent', + 'Languages','LastDelimiter','LoadPackage','LoadStr','LowerCase','MSecsToTimeStamp','NewStr', + 'NextCharIndex','Now','OutOfMemoryError','QuotedStr','RaiseLastOSError','RaiseLastWin32Error', + 'RemoveDir','RenameFile','ReplaceDate','ReplaceTime','SafeLoadLibrary','SameFileName','SameText', + 'SetCurrentDir','ShowException','Sleep','StrAlloc','StrBufSize','StrByteType','StrCat', + 'StrCharLength','StrComp','StrCopy','StrDispose','StrECopy','StrEnd','StrFmt','StrIComp', + 'StringReplace','StringToGUID','StrLCat','StrLComp','StrLCopy','StrLen','StrLFmt','StrLIComp', + 'StrLower','StrMove','StrNew','StrNextChar','StrPas','StrPCopy','StrPLCopy','StrPos','StrRScan', + 'StrScan','StrToBool','StrToBoolDef','StrToCurr','StrToCurrDef','StrToDate','StrToDateDef', + 'StrToDateTime','StrToDateTimeDef','StrToFloat','StrToFloatDef','StrToInt','StrToInt64', + 'StrToInt64Def','StrToIntDef','StrToTime','StrToTimeDef','StrUpper','Supports','SysErrorMessage', + 'SystemTimeToDateTime','TextToFloat','Time','GetTime','TimeStampToDateTime','TimeStampToMSecs', + 'TimeToStr','Trim','TrimLeft','TrimRight','TryEncodeDate','TryEncodeTime','TryFloatToCurr', + 'TryFloatToDateTime','TryStrToBool','TryStrToCurr','TryStrToDate','TryStrToDateTime','TryStrToFloat', + 'TryStrToInt','TryStrToInt64','TryStrToTime','UnloadPackage','UpperCase','WideCompareStr', + 'WideCompareText','WideFmtStr','WideFormat','WideFormatBuf','WideLowerCase','WideSameStr', + 'WideSameText','WideUpperCase','Win32Check','WrapText' + ), + 1 => $CONTEXT . '/stdprocs/sysutils', + 2 => 'color:#444;', + 3 => false, + 4 => '' + ), + + //Standard functions of Unit Classes + 5 => array( + 0 => array( + 'ActivateClassGroup','AllocateHwnd','BinToHex','CheckSynchronize','CollectionsEqual','CountGenerations', + 'DeallocateHwnd','EqualRect','ExtractStrings','FindClass','FindGlobalComponent','GetClass', + 'GroupDescendantsWith','HexToBin','IdentToInt','InitInheritedComponent','IntToIdent','InvalidPoint', + 'IsUniqueGlobalComponentName','LineStart','ObjectBinaryToText','ObjectResourceToText', + 'ObjectTextToBinary','ObjectTextToResource','PointsEqual','ReadComponentRes','ReadComponentResEx', + 'ReadComponentResFile','Rect','RegisterClass','RegisterClassAlias','RegisterClasses', + 'RegisterComponents','RegisterIntegerConsts','RegisterNoIcon','RegisterNonActiveX','SmallPoint', + 'StartClassGroup','TestStreamFormat','UnregisterClass','UnregisterClasses','UnregisterIntegerConsts', + 'UnregisterModuleClasses','WriteComponentResFile' + ), + 1 => $CONTEXT . '/stdprocs/classes', + 2 => 'color:#444;', + 3 => false, + 4 => '' + ), + + //Standard functions of Unit Math + 6 => array( + 0 => array( + 'ArcCos', 'ArcCosh', 'ArcCot', 'ArcCotH', 'ArcCsc', 'ArcCscH', 'ArcSec', 'ArcSecH', 'ArcSin', + 'ArcSinh', 'ArcTan2', 'ArcTanh', 'Ceil', 'CompareValue', 'Cosecant', 'Cosh', 'Cot', 'Cotan', + 'CotH', 'Csc', 'CscH', 'CycleToDeg', 'CycleToGrad', 'CycleToRad', 'DegToCycle', 'DegToGrad', + 'DegToRad', 'DivMod', 'DoubleDecliningBalance', 'EnsureRange', 'Floor', 'Frexp', 'FutureValue', + 'GetExceptionMask', 'GetPrecisionMode', 'GetRoundMode', 'GradToCycle', 'GradToDeg', 'GradToRad', + 'Hypot', 'InRange', 'InterestPayment', 'InterestRate', 'InternalRateOfReturn', 'IntPower', + 'IsInfinite', 'IsNan', 'IsZero', 'Ldexp', 'LnXP1', 'Log10', 'Log2', 'LogN', 'Max', 'MaxIntValue', + 'MaxValue', 'Mean', 'MeanAndStdDev', 'Min', 'MinIntValue', 'MinValue', 'MomentSkewKurtosis', + 'NetPresentValue', 'Norm', 'NumberOfPeriods', 'Payment', 'PeriodPayment', 'Poly', 'PopnStdDev', + 'PopnVariance', 'Power', 'PresentValue', 'RadToCycle', 'RadToDeg', 'RadToGrad', 'RandG', 'RandomRange', + 'RoundTo', 'SameValue', 'Sec', 'Secant', 'SecH', 'SetExceptionMask', 'SetPrecisionMode', 'SetRoundMode', + 'Sign', 'SimpleRoundTo', 'SinCos', 'Sinh', 'SLNDepreciation', 'StdDev', 'Sum', 'SumInt', 'SumOfSquares', + 'SumsAndSquares', 'SYDDepreciation', 'Tan', 'Tanh', 'TotalVariance', 'Variance' + ), + 1 => $CONTEXT . '/stdprocs/math', + 2 => 'color:#444;', + 3 => false, + 4 => '' + ), +); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + '+', '-', '*', '/' + ), + 1 => $CONTEXT . '/mathsym', + 2 => 'color:#008000;' + ), + 1 => array( + 0 => array( + ':', ';', ',' + ), + 1 => $CONTEXT . '/ctrlsym', + 2 => 'color:#008000;' + ), + 2 => array( + 0 => array( + '<', '=', '>' + ), + 1 => $CONTEXT . '/cmpsym', + 2 => 'color:#008000;' + ), + 3 => array( + 0 => array( + '(', ')', '[', ']' + ), + 1 => $CONTEXT . '/brksym', + 2 => 'color:#008000;' + ), + 4 => array( + 0 => array( + '.', '@', '^' + ), + 1 => $CONTEXT . '/oopsym', + 2 => 'color:#008000;' + ) +// '|', '=', '!', ':', '(', ')', ',', '<', '>', '&', '$', '+', '-', '*', '/', +// '{', '}', ';', '[', ']', '~', '?' +); + +$this->_contextRegexps = array( + 0 => array( + 0 => array( + '/(#[0-9]+)/' + ), + 1 => '#', + 2 => array( + 1 => array($CONTEXT . '/char', 'color:#db9;', false) + ) + ), + 1 => array( + 0 => array( + '/(#\$[0-9a-fA-F]+)/' + ), + 1 => '#', + 2 => array( + 1 => array($CONTEXT . '/charhex', 'color:#db9;', false) + ) + ), + 2 => array( + 0 => array( + '/(\$[0-9a-fA-F]+)/' + ), + 1 => '$', + 2 => array( + 1 => array($CONTEXT . '/hex', 'color: #2bf;', false) + ) + ), + 3 => array( + 0 => array( + '/(\.\.)/' + ), + 1 => '.', + 2 => array( + 1 => array($CONTEXT . '/ctrlsym', 'color: #008000;', false) + ) + ), + 4 => geshi_use_doubles($CONTEXT, true), // second parameter says leading zero is required. + 5 => geshi_use_integers($CONTEXT) +); + +$this->_objectSplitters = array( + 0 => array( + 0 => array('.'), + 1 => $CONTEXT . '/oodynamic', + 2 => 'color:#559;', + 3 => false // If true, check that matched method isn't a keyword first + ) +); + +?> diff --git a/paste/include/geshi/contexts/delphi/exports_brackets.php b/paste/include/geshi/contexts/delphi/exports_brackets.php new file mode 100644 index 0000000..7621366 --- /dev/null +++ b/paste/include/geshi/contexts/delphi/exports_brackets.php @@ -0,0 +1,178 @@ +, Nigel McNie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('('), + 1 => array(')'), + 2 => false + ) +); + + +$this->_childContexts = array( + new GeSHiContext('delphi', $DIALECT, 'preprocessor'), + new GeSHiContext('delphi', $DIALECT, 'common/single_comment'), + new GeSHiContext('delphi', $DIALECT, 'multi_comment') +); + + +//$this->_styler->setStyle($CONTEXT, 'color:#000;'); +//$this->_styler->setStartStyle($CONTEXT, 'color:#f00;font-weight:bold;'); +//$this->_styler->setEndStyle($CONTEXT, 'color:#00f;'); +$this->_startName = 'brksym'; // highlight starter as if it was a keyword +$this->_endName = 'brksym'; // highlight ender as if it was a ctrlsym + +$this->_contextKeywords = array( + 0 => array( + 0 => array( + //@todo get keywords normal way + 'var', 'out', 'const', 'array' + ), + 1 => $CONTEXT . '/keywords', + 2 => 'color:#f00; font-weight:bold;', + 3 => false, + 4 => '' + ), + 1 => array( + 0 => array( + 'Boolean', 'ByteBool', 'LongBool', 'WordBool', 'Bool', + + 'Byte', 'SmallInt', + 'ShortInt', 'Word', + 'Integer', 'Cardinal', + 'LongInt', 'DWORD', + 'Int64', + + 'Single', 'Double', 'Extended', + 'Real48', 'Real', 'Comp', 'Currency', + + 'Pointer', + + 'Char', 'AnsiChar', 'WideChar', + 'PChar', 'PAnsiChar', 'PWideChar', + 'String', 'AnsiString', 'WideString', + + 'THandle' + ), + 1 => $CONTEXT . '/keytypes', + 2 => 'color:#000; font-weight:bold;', + 3 => false, + 4 => '' + ), + 2 => array( + 0 => array( + //@todo get keywords normal way + 'nil', + 'false', 'true' + ), + 1 => $CONTEXT . '/keyidents', + 2 => 'color:#000; font-weight:bold;', + 3 => false, + 4 => '' + ) +); + +$this->_contextSymbols = array( +/* 0 => array( + 0 => array( + // @todo [blocking 1.1.1] are the [ and ] needed? They're handled by starter and ender, do they ever actually + // occur *inside* this context? (deferred to 1.1.1) + + // BenBE: [] might just well occure as part of a function declaration. But it's thus unlikly that there's no + // absolut requirement to handle them. I actually would have to check if the Delphi compiler actually compiles + // such source (I doubt it will compile). + // @todo Test if exports ABC(A: Array[13..37] of Integer) name 'ABC'; actually compiles. + '(', ']' + ), + 1 => $CONTEXT . '/brksym', + 2 => 'color:#008000;' + ),*/ + 1 => array( + 0 => array( + ':', ';', ',', '=' + ), + 1 => $CONTEXT . '/ctrlsym', + 2 => 'color:#008000;' + ), + 2 => array( + 0 => array( + '.' + ), + 1 => $CONTEXT . '/oopsym', + 2 => 'color:#008000;' + ) +); + +$this->_contextRegexps = array( + 0 => array( + 0 => array( + '/(#[0-9]+)/' + ), + 1 => '#', + 2 => array( + 1 => array($CONTEXT . '/char', 'color:#db9;', false) + ) + ), + 1 => array( + 0 => array( + '/(#\$[0-9a-fA-F]+)/' + ), + 1 => '#', + 2 => array( + 1 => array($CONTEXT . '/charhex', 'color:#db9;', false) + ) + ), + 2 => array( + 0 => array( + '/(\$[0-9a-fA-F]+)/' + ), + 1 => '$', + 2 => array( + 1 => array($CONTEXT . '/hex', 'color: #2bf;', false) + ) + ), + 3 => geshi_use_integers($CONTEXT) +); + +$this->_objectSplitters = array( + 0 => array( + 0 => array('.'), + 1 => $CONTEXT . '/oodynamic', + 2 => 'color:#559;', + 3 => false // If true, check that matched method isn't a keyword first + ) +); + +?> diff --git a/paste/include/geshi/contexts/delphi/extern.php b/paste/include/geshi/contexts/delphi/extern.php new file mode 100644 index 0000000..a96516f --- /dev/null +++ b/paste/include/geshi/contexts/delphi/extern.php @@ -0,0 +1,131 @@ +, Nigel McNie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('exports'), + 1 => array(';'), + 2 => false + ), + 1 => array( + 0 => array('external'), + 1 => array(';'), + 2 => false + ) +); + +$this->_childContexts = array( + new GeSHiContext('delphi', $DIALECT, 'preprocessor'), + new GeSHiContext('delphi', $DIALECT, 'multi_comment'), + new GeSHiContext('delphi', $DIALECT, 'common/single_comment'), + new GeSHiContext('delphi', $DIALECT, 'common/single_string_eol'), + new GeSHiCodeContext('delphi', $DIALECT, 'exports_brackets', 'delphi/' . $DIALECT) +); + +//$this->_styler->setStyle($CONTEXT, 'color:#000;'); +//$this->_styler->setStyle($CONTEXT_START, 'color:#f00;font-weight:bold;'); +//$this->_styler->setStyle($CONTEXT_END, 'color:#00f;'); +$this->_startName = 'keywords'; +$this->_endName = 'ctrlsym'; + +$this->_contextKeywords = array( + 0 => array( + 0 => array( + 'name','index','resident' + ), + 1 => $CONTEXT . '/keywords', + 2 => 'color:#f00; font-weight:bold;', + 3 => false, + 4 => '' + ), +); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + ',', '[', ']', '.' + ), + 1 => $CONTEXT . '/sym', + 2 => 'color:#008000;' + ), + 1 => array( + 0 => array( + '(', ')', '[', ']' + ), + 1 => $CONTEXT . '/brksym', + 2 => 'color:#008000;' + ) +); + +$this->_contextRegexps = array( + 0 => array( + 0 => array( + '/(#[0-9]+)/' + ), + 1 => '#', + 2 => array( + 1 => array($CONTEXT . '/char', 'color:#db9;', false) + ) + ), + 1 => array( + 0 => array( + '/(#\$[0-9a-fA-F]+)/' + ), + 1 => '#', + 2 => array( + 1 => array($CONTEXT . '/charhex', 'color:#db9;', false) + ) + ), + 2 => array( + 0 => array( + '/(\$[0-9a-fA-F]+)/' + ), + 1 => '$', + 2 => array( + 1 => array($CONTEXT . '/hex', 'color: #2bf;', false) + ) + ), + 3 => geshi_use_integers($CONTEXT) +); + +$this->_objectSplitters = array( + 0 => array( + 0 => array('.'), + 1 => $CONTEXT . '/oodynamic', + 2 => 'color:#559;', + 3 => false // If true, check that matched method isn't a keyword first + ) +); + +?> diff --git a/paste/include/geshi/contexts/delphi/multi_comment.php b/paste/include/geshi/contexts/delphi/multi_comment.php new file mode 100644 index 0000000..76e3284 --- /dev/null +++ b/paste/include/geshi/contexts/delphi/multi_comment.php @@ -0,0 +1,51 @@ +, Nigel McNie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('{'), + 1 => array('}'), + 2 => false + ), + 1 => array( + 0 => array('(*'), + 1 => array('*)'), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#888;font-style:italic;'); +$this->_contextStyleType = GESHI_STYLE_COMMENTS; + +?> diff --git a/paste/include/geshi/contexts/delphi/preprocessor.php b/paste/include/geshi/contexts/delphi/preprocessor.php new file mode 100644 index 0000000..da66662 --- /dev/null +++ b/paste/include/geshi/contexts/delphi/preprocessor.php @@ -0,0 +1,51 @@ +, Nigel McNie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('{$'), + 1 => array('}'), + 2 => false + ), + 1 => array( + 0 => array('(*$'), + 1 => array('*)'), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#080;font-style:italic;'); +$this->_contextStyleType = GESHI_STYLE_COMMENTS; + +?> diff --git a/paste/include/geshi/contexts/delphi/property.php b/paste/include/geshi/contexts/delphi/property.php new file mode 100644 index 0000000..db87a1a --- /dev/null +++ b/paste/include/geshi/contexts/delphi/property.php @@ -0,0 +1,157 @@ +, Nigel McNie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('property'), + 1 => array(';'), + 2 => false + ) +); + + +$this->_childContexts = array( + new GeSHiContext('delphi', $DIALECT, 'preprocessor'), + new GeSHiContext('delphi', $DIALECT, 'common/single_comment'), + new GeSHiContext('delphi', $DIALECT, 'multi_comment'), + new GeSHiCodeContext('delphi', $DIALECT, 'property_index', 'delphi/' . $DIALECT) +); + +//$this->_styler->setStyle($CONTEXT, 'color:#000;'); +//$this->_styler->setStartStyle($CONTEXT, 'color:#f00;font-weight:bold;'); +//$this->_styler->setEndStyle($CONTEXT, 'color:#00f;'); +$this->_startName = 'keywords'; // highlight starter as if it was a keyword +$this->_endName = 'ctrlsym'; // highlight ender as if it was a ctrlsym + +$this->_contextKeywords = array( + 0 => array( + 0 => array( + 'read','write','index','stored','default','nodefault','implements', + 'dispid','readonly','writeonly' + ), + 1 => $CONTEXT . '/keywords', + 2 => 'color:#f00; font-weight:bold;', + 3 => false, + 4 => '' + ), + 1 => array( + 0 => array( + 'Boolean', 'ByteBool', 'LongBool', 'WordBool', 'Bool', + + 'Byte', 'SmallInt', + 'ShortInt', 'Word', + 'Integer', 'Cardinal', + 'LongInt', 'DWORD', + 'Int64', + + 'Single', 'Double', 'Extended', + 'Real48', 'Real', 'Comp', 'Currency', + + 'Pointer', + + 'Char', 'AnsiChar', 'WideChar', + 'PChar', 'PAnsiChar', 'PWideChar', + 'String', 'AnsiString', 'WideString', + + 'THandle' + ), + 1 => $CONTEXT . '/keytypes', + 2 => 'color:#000; font-weight:bold;', + 3 => false, + 4 => '' + ), + 2 => array( + 0 => array( + //@todo get keywords normal way + 'nil', + 'false', 'true' + ), + 1 => $CONTEXT . '/keyidents', + 2 => 'color:#000; font-weight:bold;', + 3 => false, + 4 => '' + ) +); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + ':' + ), + 1 => $CONTEXT . '/ctrlsym', + 2 => 'color:#008000;' + ) +); + +$this->_contextRegexps = array( + 0 => array( + 0 => array( + '/(#[0-9]+)/' + ), + 1 => '#', + 2 => array( + 1 => array($CONTEXT . '/char', 'color:#db9;', false) + ) + ), + 1 => array( + 0 => array( + '/(#\$[0-9a-fA-F]+)/' + ), + 1 => '#', + 2 => array( + 1 => array($CONTEXT . '/charhex', 'color:#db9;', false) + ) + ), + 2 => array( + 0 => array( + '/(\$[0-9a-fA-F]+)/' + ), + 1 => '$', + 2 => array( + 1 => array($CONTEXT . '/hex', 'color: #2bf;', false) + ) + ), + 3 => geshi_use_integers($CONTEXT) +); + +$this->_objectSplitters = array( + 0 => array( + 0 => array('.'), + 1 => $CONTEXT . '/oodynamic', + 2 => 'color:#559;', + 3 => false // If true, check that matched method isn't a keyword first + ) +); + +?> diff --git a/paste/include/geshi/contexts/delphi/property_index.php b/paste/include/geshi/contexts/delphi/property_index.php new file mode 100644 index 0000000..c9bf62b --- /dev/null +++ b/paste/include/geshi/contexts/delphi/property_index.php @@ -0,0 +1,143 @@ +, Nigel McNie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('['), + 1 => array(']'), + 2 => false + ) +); + + +$this->_childContexts = array( + new GeSHiContext('delphi', $DIALECT, 'preprocessor'), + new GeSHiContext('delphi', $DIALECT, 'common/single_comment'), + new GeSHiContext('delphi', $DIALECT, 'multi_comment') +); + + +//$this->_styler->setStyle($CONTEXT, 'color:#000;'); +//$this->_styler->setStartStyle($CONTEXT, 'color:#f00;font-weight:bold;'); +//$this->_styler->setEndStyle($CONTEXT, 'color:#00f;'); +$this->_startName = 'brksym'; // highlight starter as if it was a keyword +$this->_endName = 'brksym'; // highlight ender as if it was a ctrlsym + +$this->_contextKeywords = array( + 0 => array( + 0 => array( + 'Boolean', 'ByteBool', 'LongBool', 'WordBool', 'Bool', + + 'Byte', 'SmallInt', + 'ShortInt', 'Word', + 'Integer', 'Cardinal', + 'LongInt', 'DWORD', + 'Int64', + + 'Single', 'Double', 'Extended', + 'Real48', 'Real', 'Comp', 'Currency', + + 'Pointer', + + 'Char', 'AnsiChar', 'WideChar', + 'PChar', 'PAnsiChar', 'PWideChar', + 'String', 'AnsiString', 'WideString', + + 'THandle' + ), + 1 => $CONTEXT . '/keytypes', + 2 => 'color:#000; font-weight:bold;', + 3 => false, + 4 => '' + ) +); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + ':', ';', ',' + ), + 1 => $CONTEXT . '/ctrlsym', + 2 => 'color:#008000;' + ), + 1 => array( + 0 => array( + '.' + ), + 1 => $CONTEXT . '/oopsym', + 2 => 'color:#008000;' + ) +); + +$this->_contextRegexps = array( + 0 => array( + 0 => array( + '/(#[0-9]+)/' + ), + 1 => '#', + 2 => array( + 1 => array($CONTEXT . '/char', 'color:#db9;', false) + ) + ), + 1 => array( + 0 => array( + '/(#\$[0-9a-fA-F]+)/' + ), + 1 => '#', + 2 => array( + 1 => array($CONTEXT . '/charhex', 'color:#db9;', false) + ) + ), + 2 => array( + 0 => array( + '/(\$[0-9a-fA-F]+)/' + ), + 1 => '$', + 2 => array( + 1 => array($CONTEXT . '/hex', 'color: #2bf;', false) + ) + ), + 3 => geshi_use_integers($CONTEXT) +); + +$this->_objectSplitters = array( + 0 => array( + 0 => array('.'), + 1 => $CONTEXT . '/oodynamic', + 2 => 'color:#559;', + 3 => false // If true, check that matched method isn't a keyword first + ) +); + +?> \ No newline at end of file diff --git a/paste/include/geshi/contexts/doxygen/doxygen.php b/paste/include/geshi/contexts/doxygen/doxygen.php new file mode 100644 index 0000000..5d049d5 --- /dev/null +++ b/paste/include/geshi/contexts/doxygen/doxygen.php @@ -0,0 +1,44 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_childContexts = array( + new GeSHiContext('doxygen', $DIALECT, 'tag'), + new GeshiContext('doxygen', $DIALECT, 'link'), + new GeSHiContext('html', $DIALECT, 'tag') +); + +$this->_styler->setStyle($CONTEXT, 'color:#555;font-style:italic;'); +$this->_contextStyleType = GESHI_STYLE_COMMENTS; + +?> diff --git a/paste/include/geshi/contexts/doxygen/link.php b/paste/include/geshi/contexts/doxygen/link.php new file mode 100644 index 0000000..da68e2e --- /dev/null +++ b/paste/include/geshi/contexts/doxygen/link.php @@ -0,0 +1,46 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +// Delimiters have no bearing on OCCs +$this->_contextDelimiters = array( + 0 => array( + 0 => array('{@'), + 1 => array('}'), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#0095ff;font-weight:bold;'); + +?> diff --git a/paste/include/geshi/contexts/doxygen/tag.php b/paste/include/geshi/contexts/doxygen/tag.php new file mode 100644 index 0000000..5158b54 --- /dev/null +++ b/paste/include/geshi/contexts/doxygen/tag.php @@ -0,0 +1,46 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +// Delimiters have no bearing on OCCs +$this->_contextDelimiters = array( + 0 => array( + 0 => array('@'), + 1 => array('REGEX#[^a-z]#'), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#ca60ca;font-weight:bold;'); + +?> diff --git a/paste/include/geshi/contexts/html/comment.php b/paste/include/geshi/contexts/html/comment.php new file mode 100644 index 0000000..346b16b --- /dev/null +++ b/paste/include/geshi/contexts/html/comment.php @@ -0,0 +1,46 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array(''), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#888;'); +$this->_contextStyleType = GESHI_STYLE_COMMENTS; + +?> diff --git a/paste/include/geshi/contexts/html/css.php b/paste/include/geshi/contexts/html/css.php new file mode 100644 index 0000000..a6107f1 --- /dev/null +++ b/paste/include/geshi/contexts/html/css.php @@ -0,0 +1,49 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + //@todo [blocking 1.1.9] The array('REGEX#]+>\s*( array(''), + 2 => false + ) +); + +$this->_delimiterParseData = GESHI_CHILD_PARSE_NONE; + +$this->_overridingChildContext =& new GeSHiCodeContext('css'); + +?> diff --git a/paste/include/geshi/contexts/html/doctype.php b/paste/include/geshi/contexts/html/doctype.php new file mode 100644 index 0000000..818730c --- /dev/null +++ b/paste/include/geshi/contexts/html/doctype.php @@ -0,0 +1,50 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array(' array('>'), + 2 => false + ) +); + +$this->_childContexts = array( + // HTML strings have no escape characters, so the don't need to be GeSHiStringContexts + new GeSHiContext('html', $DIALECT, 'string') +); + +$this->_styler->setStyle($CONTEXT, 'font-weight:bold;color:#933;'); + +?> diff --git a/paste/include/geshi/contexts/html/html.php b/paste/include/geshi/contexts/html/html.php new file mode 100644 index 0000000..2e9169d --- /dev/null +++ b/paste/include/geshi/contexts/html/html.php @@ -0,0 +1,55 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_childContexts = array( + new GeSHiContext('html', $DIALECT, 'doctype'), + new GeSHiCodeContext('html', $DIALECT, 'tag'), + new GeSHiContext('html', $DIALECT, 'comment'), + new GeSHiContext('html', $DIALECT, 'css'), + new GeSHiContext('html', $DIALECT, 'javascript') +); + +$this->_styler->setStyle($CONTEXT, 'color:#000;'); + +$this->_contextRegexps = array( + 0 => array( + 0 => array('#(&(([a-z0-9]{2,5})|(\#[0-9]{2,4}));)#'), + 1 => '&', + 2 => array( + 1 => array($CONTEXT . '/entity', 'color: #00c;', false) + ) + ) +); + +?> diff --git a/paste/include/geshi/contexts/html/javascript.php b/paste/include/geshi/contexts/html/javascript.php new file mode 100644 index 0000000..1ba7352 --- /dev/null +++ b/paste/include/geshi/contexts/html/javascript.php @@ -0,0 +1,49 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('REGEX#]+>#i'), + 1 => array(''), + 2 => false + ) +); + +// If this is set to parse any of the delimiters, the OCC swallows it up - setStartStyle and +// setEndStyle have no meaning in a context with an OCC (actually, nor does setStyle) +$this->_delimiterParseData = GESHI_CHILD_PARSE_NONE; + +$this->_overridingChildContext = new GeSHiCodeContext('javascript'); + +?> diff --git a/paste/include/geshi/contexts/html/string.php b/paste/include/geshi/contexts/html/string.php new file mode 100644 index 0000000..55149e5 --- /dev/null +++ b/paste/include/geshi/contexts/html/string.php @@ -0,0 +1,56 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + // Each of ' and " delimiters. In their own group so they only end themselves + 0 => array( + 0 => array("'"), + 1 => array("'"), + 2 => false + ), + 1 => array( + 0 => array('"'), + 1 => array('"'), + 2 => false + ) +); + +$this->_childContexts = array( + new GeSHiContext('html', $DIALECT, 'string_javascript') +); + +$this->_styler->setStyle($CONTEXT, 'color:#933;'); +$this->_contextStyleType = GESHI_STYLE_STRINGS; + +?> diff --git a/paste/include/geshi/contexts/html/string_javascript.php b/paste/include/geshi/contexts/html/string_javascript.php new file mode 100644 index 0000000..f210bc0 --- /dev/null +++ b/paste/include/geshi/contexts/html/string_javascript.php @@ -0,0 +1,55 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +//@todo [blocking 1.1.1] (bug 11) Using a ^ before the starters does +// not work, because when useless contexts are purged neither the ^return +// nor the ^javascript: are matched so this context is removed. +// I'm leaving it until 1.1.1 to solve this. One way might be to add a flag +// to this array or a field to the GeSHiContext class that says "never remove +// me, even if I am useless" +$this->_contextDelimiters = array( + 0 => array( + 0 => array('REGEX#return#', 'REGEX#javascript:#'), + 1 => array('"'), + 2 => false + ) +); + +// If this is set to parse any of the delimiters, the OCC swallows it up - setStartStyle and +// setEndStyle have no meaning in a context with an OCC (actually, nor does setStyle) +$this->_delimiterParseData = GESHI_CHILD_PARSE_LEFT; + +$this->_overridingChildContext = new GeSHiCodeContext('javascript'); + +?> diff --git a/paste/include/geshi/contexts/html/tag.php b/paste/include/geshi/contexts/html/tag.php new file mode 100644 index 0000000..44bed38 --- /dev/null +++ b/paste/include/geshi/contexts/html/tag.php @@ -0,0 +1,98 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('REGEX#<[/a-z_0-6]+#i'), + 1 => array('>'), + 2 => false + ) +); + +$this->_childContexts = array( + // HTML strings have no escape characters, so the don't need to be GeSHiStringContexts + new GeSHiContext('html', $DIALECT, 'string') +); + +$this->_styler->setStyle($CONTEXT, 'color:#008000;'); +$this->_styler->setStyle($CONTEXT_START, 'font-weight:bold;color:#000;'); +$this->_styler->setStyle($CONTEXT_END, 'font-weight:bold;color:#000;'); + +$this->_contextKeywords = array( + 0 => array( + // keywords + 0 => array( + 'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', + 'alink', 'alt', 'archive', 'axis', 'background', 'bgcolor', 'border', + 'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', + 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', + 'color', 'cols', 'colspan', 'compact', 'content', 'coords', 'data', + 'datetime', 'declare', 'defer', 'dir', 'disabled', 'enctype', 'face', + 'for', 'frame', 'frameborder', 'headers', 'height', 'href', 'hreflang', + 'hspace', 'http-equiv', 'id', 'ismap', 'label', 'lang', 'language', + 'link', 'longdesc', 'marginheight', 'marginwidth', 'maxlength', 'media', + 'method', 'multiple', 'name', 'nohref', 'noresize', 'noshade', 'nowrap', + 'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', + 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', + 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', + 'onselect', 'onsubmit', 'onunload', 'profile', 'prompt', 'readonly', + 'rel', 'rev', 'rows', 'rowspan', 'rules', 'scheme', 'scope', 'scrolling', + 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', + 'summary', 'tabindex', 'target', 'text', 'title', 'type', 'usemap', + 'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace', 'width' + ), + // name + 1 => $CONTEXT . '/attrs', + // style + 2 => 'color:#006;', + // case sensitive + 3 => false, + // url + 4 => '' + ) +); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + '=' + ), + // name (should names have / in them like normal contexts? YES + 1 => $CONTEXT . '/sym', + // style + 2 => 'color:#008000;' + ) +); + +?> diff --git a/paste/include/geshi/contexts/javascript/javascript.php b/paste/include/geshi/contexts/javascript/javascript.php new file mode 100644 index 0000000..4f4a672 --- /dev/null +++ b/paste/include/geshi/contexts/javascript/javascript.php @@ -0,0 +1,187 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the GeSHiStringContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshistringcontext.php'; + +$this->_childContexts = array( + new GeSHiContext('javascript', $DIALECT, 'common/multi_comment'), + new GeSHiContext('javascript', $DIALECT, 'common/single_comment'), + new GeSHiStringContext('javascript', $DIALECT, 'common/single_string'), + new GeSHiStringContext('javascript', $DIALECT, 'common/double_string') +); + +$this->_contextKeywords = array( + 0 => array( + 0 => array( + 'break', 'case', 'catch', 'const', 'continue', 'default', 'delete', 'do', + 'else', 'false', 'finally', 'for', 'function', 'if', 'in', 'new', 'null', + 'return', 'switch', 'throw', 'true', 'try', 'typeof', 'var', 'void', + 'while', 'with' + ), + 1 => $CONTEXT . '/keywords', + 2 => 'color:#000;font-weight:bold;', + 3 => true, + 4 => '' + ), + 1 => array( + 0 => array( + 'escape', 'isFinite', 'isNaN', 'Number', 'parseFloat', 'parseInt', + 'reload', 'taint', 'unescape', 'untaint', 'write' + ), + 1 => $CONTEXT . '/functions', + 2 => 'color:#006;', + 3 => true, + 4 => '' + ), + 2 => array( + 0 => array( + 'Anchor', 'Applet', 'Area', 'Array', 'Boolean', 'Button', 'Checkbox', + 'Date', 'document', 'window', 'Image', 'FileUpload', 'Form', 'Frame', + 'Function', 'Hidden', 'Link', 'MimeType', 'Math', 'Max', 'Min', 'Layer', + 'navigator', 'Object', 'Password', 'Plugin', 'Radio', 'RegExp', 'Reset', + 'Screen', 'Select', 'String', 'Text', 'Textarea', 'this', 'Window' + ), + 1 => $CONTEXT . '/objects', + 2 => 'color:#393;font-weight:bold;', + 3 => true, + 4 => '' + ), + 3 => array( + 0 => array( + 'abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'ctg', 'E', 'exp', + 'floor', 'LN2', 'LN10', 'log', 'LOG2E', 'LOG10E', 'PI', 'pow', 'round', + 'sin', 'sqrt', 'SQRT1_2', 'SQRT2', 'tan' + ), + 1 => $CONTEXT . '/math', + 2 => 'color:#fd0;', + 3 => true, + 4 => '' + ), + 4 => array( + 0 => array( + 'onAbort', 'onBlur', 'onChange', 'onClick', 'onError', 'onFocus', 'onLoad', + 'onMouseOut', 'onMouseOver', 'onReset', 'onSelect', 'onSubmit', 'onUnload' + ), + 1 => $CONTEXT . '/events', + 2 => 'color:#fdb;', + 3 => true, + 4 => '' + ), + 5 => array( + 0 => array( + 'MAX_VALUE', 'MIN_VALUE', 'NEGATIVE_INFINITY', 'NaN', 'POSITIVE_INFINITY', + 'URL', 'UTC', 'above', 'action', 'alert', 'alinkColor', 'anchor', + 'anchors', 'appCodeNam', 'appName', 'appVersion', 'applets', 'apply', + 'argument', 'arguments', 'arity', 'availHeight', 'availWidth', 'back', + 'background', 'below', 'bgColor', 'big', 'blink', 'blur', 'bold', + 'border', 'call', 'caller', 'charAt', 'charCodeAt', 'checked', + 'clearInterval', 'clearTimeout', 'click', 'clip', 'close', 'closed', + 'colorDepth', 'compile', 'complete', 'confirm', 'constructor', 'cookie', + 'current', 'cursor', 'data', 'defaultChecked', 'defaultSelected', + 'defaultStatus', 'defaultValue', 'description', 'disableExternalCapture', + 'domain', 'elements', 'embeds', 'enableExternalCapture', 'enabledPlugin', + 'encoding', 'eval', 'exec', 'fgColor', 'filename', 'find', 'fixed', + 'focus', 'fontcolor', 'fontsize', 'form', 'formName', 'forms', 'forward', + 'frames', 'fromCharCode', 'getDate', 'getDay', 'getElementById', + 'getHours', 'getMiliseconds', 'getMinutes', 'getMonth', 'getSeconds', + 'getSelection', 'getTime', 'getTimezoneOffset', 'getUTCDate', 'getUTCDay', + 'getUTCFullYear', 'getUTCHours', 'getUTCMilliseconds', 'getUTCMinutes', + 'getUTCMonth', 'getUTCSeconds', 'getYear', 'global', 'go', 'hash', + 'height', 'history', 'home', 'host', 'hostname', 'href', 'hspace', + 'ignoreCase', 'images', 'index', 'indexOf', 'innerHeight', 'innerWidth', + 'input', 'italics', 'javaEnabled', 'join', 'language', 'lastIndex', + 'lastIndexOf', 'lastModified', 'lastParen', 'layerX', 'layerY', 'layers', + 'left', 'leftContext', 'length', 'link', 'linkColor', 'links', 'load', + 'location', 'locationbar', 'lowsrc', 'match', 'menubar', 'method', + 'mimeTypes', 'modifiers', 'moveAbove', 'moveBelow', 'moveBy', 'moveTo', + 'moveToAbsolute', 'multiline', 'name', 'negative_infinity', 'next', + 'open', 'opener', 'options', 'outerHeight', 'outerWidth', 'pageX', + 'pageXoffset', 'pageY', 'pageYoffset', 'parent', 'parse', 'pathname', + 'personalbar', 'pixelDepth', 'platform', 'plugins', 'pop', 'port', + 'positive_infinity', 'preference', 'previous', 'print', 'prompt', + 'protocol', 'prototype', 'push', 'referrer', 'refresh', 'releaseEvents', + 'reload', 'replace', 'reset', 'resizeBy', 'resizeTo', 'reverse', + 'rightContext', 'screenX', 'screenY', 'scroll', 'scrollBy', 'scrollTo', + 'scrollbar', 'search', 'select', 'selected', 'selectedIndex', 'self', + 'setDate', 'setHours', 'setMinutes', 'setMonth', 'setSeconds', 'setTime', + 'setTimeout', 'setUTCDate', 'setUTCDay', 'setUTCFullYear', 'setUTCHours', + 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', + 'setYear', 'shift', 'siblingAbove', 'siblingBelow', 'small', 'sort', + 'source', 'splice', 'split', 'src', 'status', 'statusbar', 'strike', + 'sub', 'submit', 'substr', 'substring', 'suffixes', 'sup', 'taintEnabled', + 'target', 'test', 'text', 'title', 'toGMTString', 'toLocaleString', + 'toLowerCase', 'toSource', 'toString', 'toUTCString', 'toUpperCase', + 'toolbar', 'top', 'type', 'unshift', 'unwatch', 'userAgent', 'value', + 'valueOf', 'visibility', 'vlinkColor', 'vspace', 'watch', 'which', + 'width', 'write', 'writeln', 'x', 'y', 'zIndex' + //@todo [blocking 1.1.5] Some important and recent DOM additions for js seem to be ommited... + ), + 1 => $CONTEXT . '/methods', + 2 => 'color:#933;', + 3 => true, + 4 => '' + ) +); + +$this->_contextCharactersDisallowedBeforeKeywords = array('_'); +$this->_contextCharactersDisallowedAfterKeywords = array('_'); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + '(', ')', ',', ';', ':', '[', ']', + '+', '-', '*', '/', '&', '|', '!', '<', '>', + '{', '}', '=' + ), + // name (should names have / in them like normal contexts? YES + 1 => $CONTEXT . '/symbols', + // style + 2 => 'color:#008000;' + ) +); +$this->_contextRegexps = array( + 0 => geshi_use_doubles($CONTEXT), + 1 => geshi_use_integers($CONTEXT) +); + +$this->_objectSplitters = array( + 0 => array( + 0 => array('.'), + 1 => $CONTEXT . '/oodynamic', + 2 => 'color:#559;', + 3 => true // Check that matched method isn't a keyword first + ) +); +?> diff --git a/paste/include/geshi/contexts/php/double_string.php b/paste/include/geshi/contexts/php/double_string.php new file mode 100644 index 0000000..3434b92 --- /dev/null +++ b/paste/include/geshi/contexts/php/double_string.php @@ -0,0 +1,57 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('"'), + 1 => array('"'), + 2 => false + ) +); + +$this->_styler->setStyle($this->_contextName, 'color:#f00;'); +$this->_contextStyleType = GESHI_STYLE_STRINGS; + +// String only stuff +$this->_escapeCharacters = array('\\'); +// Escapes can be defined by regular expressions. +$this->_charsToEscape = array('n', 'r', 't', 'REGEX#[0-7]{1,3}#', 'REGEX#x[0-9a-f]{1,2}#i', '\\', '"', '$'); +$this->_styler->setStyle($CONTEXT . '/esc', 'color:#006;font-weight:bold;'); + +// GeSHiPHPDoubleStringContext stuff +$this->_styler->setStyle($CONTEXT . '/var', 'color:#22f;'); +$this->_styler->setStyle($CONTEXT . '/sym0', 'color:#008000;'); +$this->_styler->setStyle($CONTEXT . '/oodynamic', 'color:#933;'); + +?> diff --git a/paste/include/geshi/contexts/php/doxygen.php b/paste/include/geshi/contexts/php/doxygen.php new file mode 100644 index 0000000..b0f7181 --- /dev/null +++ b/paste/include/geshi/contexts/php/doxygen.php @@ -0,0 +1,45 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('/**'), + 1 => array('*/'), + 2 => false + ) +); + +$this->_overridingChildContext = new GeSHiContext('doxygen'); + +?> diff --git a/paste/include/geshi/contexts/php/heredoc.php b/paste/include/geshi/contexts/php/heredoc.php new file mode 100644 index 0000000..f87aac5 --- /dev/null +++ b/paste/include/geshi/contexts/php/heredoc.php @@ -0,0 +1,60 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array("REGEX#<<<\s*([a-z][a-z0-9]*)\n#i"), + 1 => array("REGEX#\n!!!1;?\n#i"), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#f00;'); +$this->_styler->setStyle($CONTEXT_START, 'color:#006;font-weight:bold;'); +$this->_styler->setStyle($CONTEXT_END, 'color:#006;font-weight:bold;'); +$this->_contextStyleType = GESHI_STYLE_STRINGS; + +//HEREDOC doesn't seem to have anything to escape - just the variable interpolation +// String only stuff +$this->_escapeCharacters = array('\\'); +// Escapes can be defined by regular expressions. +$this->_charsToEscape = array('n', 'r', 't', 'REGEX#[0-7]{1,3}#', 'REGEX#x[0-9a-f]{1,2}#i', '\\', '"'); +$this->_styler->setStyle($CONTEXT . '/esc', 'color:#006;font-weight:bold;'); + +// GeSHiPHPDoubleStringContext stuff +$this->_styler->setStyle($CONTEXT . '/var', 'color:#22f;'); +$this->_styler->setStyle($CONTEXT . '/sym0', 'color:#008000;'); +$this->_styler->setStyle($CONTEXT . '/oodynamic', 'color:#933;'); + +?> diff --git a/paste/include/geshi/contexts/php/php.php b/paste/include/geshi/contexts/php/php.php new file mode 100644 index 0000000..b0b0bd4 --- /dev/null +++ b/paste/include/geshi/contexts/php/php.php @@ -0,0 +1,910 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the GeSHiStringContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshistringcontext.php'; +/** Get the GeSHiPHPDoubleStringContext class */ +require_once GESHI_CLASSES_ROOT . 'php' . GESHI_DIR_SEPARATOR . 'class.geshiphpdoublestringcontext.php'; + +$this->_contextDelimiters = array( + 0 => array( + 0 => array(' array('?>'), + 2 => true + ), + 1 => array( + 0 => array('<%'), + 1 => array('%>'), + 2 => false + ) +); + +$this->_childContexts = array( + new GeSHiStringContext('php', $DIALECT, 'common/single_string'), + new GeSHiPHPDoubleStringContext('php', $DIALECT, 'double_string'), + new GeSHiPHPDoubleStringContext('php', $DIALECT, 'heredoc'), + // PHP single comment, with # starter and end-php-context ender + new GeSHiContext('php', $DIALECT, 'single_comment'), + // Use common multi comment since it is a PHP comment... + new GeSHiContext('php', $DIALECT, 'common/multi_comment'), + // doxygen comments + new GeSHiContext('php', $DIALECT, 'doxygen') +); + +$this->_styler->setStyle($CONTEXT_START, 'font-weight:bold;color:#000;'); +$this->_styler->setStyle($CONTEXT_END, 'font-weight:bold;color:#000;'); + +$this->_contextKeywords = array( + 0 => array( + // keywords + 0 => array( + 'as', 'break', 'case', 'continue', 'do', 'declare', 'else', 'elseif', + 'endforeach', 'endif', 'endswitch', 'endwhile', 'for', 'foreach', 'if', + 'include', 'include_once', 'require', 'require_once', 'return', 'switch', + 'while' + ), + // name + 1 => $CONTEXT . '/cstructures', + // style + 2 => 'color:#b1b100;', + // case sensitive + 3 => false, + // url + 4 => '' + ), + 1 => array( + 0 => array( + 'DEFAULT_INCLUDE_PATH', 'E_ALL', 'E_COMPILE_ERROR', 'E_COMPILE_WARNING', + 'E_CORE_ERROR', 'E_CORE_WARNING', 'E_ERROR', 'E_NOTICE', 'E_PARSE', + 'E_STRICT', 'E_USER_ERROR', 'E_USER_NOTICE', 'E_USER_WARNING', + 'E_WARNING', 'FALSE', 'NULL', 'PEAR_EXTENSION_DIR', 'PEAR_INSTALL_DIR', + 'PHP_BINDIR', 'PHP_CONFIG_FILE_PATH', 'PHP_DATADIR', 'PHP_EXTENSION_DIR', + 'PHP_LIBDIR', 'PHP_LOCALSTATEDIR', 'PHP_OS', 'PHP_OUTPUT_HANDLER_CONT', + 'PHP_OUTPUT_HANDLER_END', 'PHP_OUTPUT_HANDLER_START', 'PHP_SYSCONFDIR', + 'PHP_VERSION', 'TRUE', '__CLASS__', '__FILE__', '__FUNCTION__', + '__LINE__', '__METHOD__', 'abstract', 'catch', 'class', 'default', + 'extends', 'final', 'function', 'implements', 'interface', 'new', + 'parent', 'private', 'protected', 'public', 'self', 'static', 'throw', + 'try', 'var' + ), + 1 => $CONTEXT . '/keywords', + 2 => 'font-weight:bold;color:#000;', + 3 => false, + 4 => '' + ), + 2 => array( + 0 => array( + 'abs', 'acos', 'acosh', 'addcslashes', 'addslashes', + 'apache_child_terminate', 'apache_lookup_uri', 'apache_note', + 'apache_setenv', 'array', 'array_change_key_case', 'array_chunk', + 'array_count_values', 'array_diff', 'array_fill', 'array_filter', + 'array_flip', 'array_intersect', 'array_key_exists', 'array_keys', + 'array_map', 'array_merge', 'array_merge_recursive', 'array_multisort', + 'array_pad', 'array_pop', 'array_push', 'array_rand', 'array_reduce', + 'array_reverse', 'array_search', 'array_shift', 'array_slice', + 'array_splice', 'array_sum', 'array_unique', 'array_unshift', + 'array_values', 'array_walk', 'arsort', 'ascii2ebcdic', 'asin', 'asinh', + 'asort', 'aspell_check', 'aspell_check_raw', 'aspell_new', + 'aspell_suggest', 'assert', 'assert_options', 'atan', 'atan2', 'atanh', + 'base64_decode', 'base64_encode', 'base_convert', 'basename', 'bcadd', + 'bccomp', 'bcdiv', 'bcmod', 'bcmul', 'bcpow', 'bcscale', 'bcsqrt', + 'bcsub', 'bin2hex', 'bind_textdomain_codeset', 'bindec', 'bindtextdomain', + 'bz', 'bzclose', 'bzdecompress', 'bzerrno', 'bzerror', 'bzerrstr', + 'bzflush', 'bzopen', 'bzread', 'bzwrite', 'c', 'cal_days_in_month', + 'cal_from_jd', 'cal_info', 'cal_to_jd', 'call_user_func', + 'call_user_func_array', 'call_user_method', 'call_user_method_array', + 'ccvs_add', 'ccvs_auth', 'ccvs_command', 'ccvs_count', 'ccvs_delete', + 'ccvs_done', 'ccvs_init', 'ccvs_lookup', 'ccvs_new', 'ccvs_report', + 'ccvs_return', 'ccvs_reverse', 'ccvs_sale', 'ccvs_status', + 'ccvs_textvalue', 'ccvs_void', 'ceil', 'chdir', 'checkdate', 'checkdnsrr', + 'chgrp', 'chmod', 'chop', 'chown', 'chr', 'chroot', 'chunk_split', + 'class_exists', 'clearstatcache', 'closedir', 'closelog', 'com', + 'com_addref', 'com_get', 'com_invoke', 'com_isenum', 'com_load', + 'com_load_typelib', 'com_propget', 'com_propput', 'com_propset', + 'com_release', 'com_set', 'compact', 'connection_aborted', + 'connection_status', 'connection_timeout', 'constant', + 'convert_cyr_string', 'copy', 'cos', 'cosh', 'count', 'count_chars', + 'cpdf_add_annotation', 'cpdf_add_outline', 'cpdf_arc', 'cpdf_begin_text', + 'cpdf_circle', 'cpdf_clip', 'cpdf_close', 'cpdf_closepath', + 'cpdf_closepath_fill_stroke', 'cpdf_closepath_stroke', + 'cpdf_continue_text', 'cpdf_curveto', 'cpdf_end_text', 'cpdf_fill', + 'cpdf_fill_stroke', 'cpdf_finalize', 'cpdf_finalize_page', + 'cpdf_global_set_document_limits', 'cpdf_import_jpeg', 'cpdf_lineto', + 'cpdf_moveto', 'cpdf_newpath', 'cpdf_open', 'cpdf_output_buffer', + 'cpdf_page_init', 'cpdf_place_inline_image', 'cpdf_rect', 'cpdf_restore', + 'cpdf_rlineto', 'cpdf_rmoveto', 'cpdf_rotate', 'cpdf_rotate_text', + 'cpdf_save', 'cpdf_save_to_file', 'cpdf_scale', 'cpdf_set_action_url', + 'cpdf_set_char_spacing', 'cpdf_set_creator', 'cpdf_set_current_page', + 'cpdf_set_font', 'cpdf_set_font_directories', 'cpdf_set_font_map_file', + 'cpdf_set_horiz_scaling', 'cpdf_set_keywords', 'cpdf_set_leading', + 'cpdf_set_page_animation', 'cpdf_set_subject', 'cpdf_set_text_matrix', + 'cpdf_set_text_pos', 'cpdf_set_text_rise', 'cpdf_set_title', + 'cpdf_set_viewer_preferences', 'cpdf_set_word_spacing', 'cpdf_setdash', + 'cpdf_setflat', 'cpdf_setgray', 'cpdf_setgray_fill', + 'cpdf_setgray_stroke', 'cpdf_setlinecap', 'cpdf_setlinejoin', + 'cpdf_setlinewidth', 'cpdf_setmiterlimit', 'cpdf_setrgbcolor', + 'cpdf_setrgbcolor_fill', 'cpdf_setrgbcolor_stroke', 'cpdf_show', + 'cpdf_show_xy', 'cpdf_stringwidth', 'cpdf_stroke', 'cpdf_text', + 'cpdf_translate', 'crack_check', 'crack_closedict', + 'crack_getlastmessage', 'crack_opendict', 'crc32', 'create_function', + 'crypt', 'ctype_alnum', 'ctype_alpha', 'ctype_cntrl', 'ctype_digit', + 'ctype_graph', 'ctype_lower', 'ctype_print', 'ctype_punct', 'ctype_space', + 'ctype_upper', 'ctype_xdigit', 'curl_close', 'curl_errno', 'curl_error', + 'curl_exec', 'curl_getinfo', 'curl_init', 'curl_setopt', 'curl_version', + 'current', 'cybercash_base64_decode', 'cybercash_base64_encode', + 'cybercash_decr', 'cybercash_encr', 'cybermut_creerformulairecm', + 'cybermut_creerreponsecm', 'cybermut_testmac', 'cyrus_authenticate', + 'cyrus_bind', 'cyrus_close', 'cyrus_connect', 'cyrus_query', + 'cyrus_unbind', 'date', 'dba_close', 'dba_delete', 'dba_exists', + 'dba_fetch', 'dba_firstkey', 'dba_insert', 'dba_nextkey', 'dba_open', + 'dba_optimize', 'dba_popen', 'dba_replace', 'dba_sync', + 'dbase_add_record', 'dbase_close', 'dbase_create', 'dbase_delete_record', + 'dbase_get_record', 'dbase_get_record_with_names', 'dbase_numfields', + 'dbase_numrecords', 'dbase_open', 'dbase_pack', 'dbase_replace_record', + 'dblist', 'dbmclose', 'dbmdelete', 'dbmexists', 'dbmfetch', 'dbmfirstkey', + 'dbminsert', 'dbmnextkey', 'dbmopen', 'dbmreplace', 'dbp', 'dbplus_add', + 'dbplus_aql', 'dbplus_chdir', 'dbplus_close', 'dbplus_curr', + 'dbplus_errcode', 'dbplus_errno', 'dbplus_find', 'dbplus_first', + 'dbplus_flush', 'dbplus_freealllocks', 'dbplus_freelock', + 'dbplus_freerlocks', 'dbplus_getlock', 'dbplus_getunique', 'dbplus_info', + 'dbplus_last', 'dbplus_lockrel', 'dbplus_next', 'dbplus_open', + 'dbplus_rchperm', 'dbplus_rcreate', 'dbplus_rcrtexact', 'dbplus_rcrtlike', + 'dbplus_resolve', 'dbplus_restorepos', 'dbplus_rkeys', 'dbplus_ropen', + 'dbplus_rquery', 'dbplus_rrename', 'dbplus_rsecindex', 'dbplus_runlink', + 'dbplus_rzap', 'dbplus_savepos', 'dbplus_setindex', + 'dbplus_setindexbynumber', 'dbplus_sql', 'dbplus_tcl', 'dbplus_tremove', + 'dbplus_undo', 'dbplus_undoprepare', 'dbplus_unlockrel', + 'dbplus_unselect', 'dbplus_update', 'dbplus_xlockrel', + 'dbplus_xunlockrel', 'dbx_close', 'dbx_compare', 'dbx_connect', + 'dbx_error', 'dbx_query', 'dbx_sort', 'dcgettext', 'dcngettext', + 'debugger_off', 'debugger_on', 'decbin', 'dechex', 'decoct', 'define', + 'define_syslog_variables', 'defined', 'deg2rad', 'delete', 'dgettext', + 'die', 'dio_close', 'dio_fcntl', 'dio_open', 'dio_read', 'dio_seek', + 'dio_stat', 'dio_truncate', 'dio_write', 'dir', 'dirname', + 'disk_free_space', 'disk_total_space', 'diskfreespace', 'dl', 'dngettext', + 'domxml_add_root', 'domxml_attributes', 'domxml_children', + 'domxml_dumpmem', 'domxml_get_attribute', 'domxml_new_child', + 'domxml_new_xmldoc', 'domxml_node', 'domxml_node_set_content', + 'domxml_node_unlink_node', 'domxml_root', 'domxml_set_attribute', + 'domxml_version', 'dotnet_load', 'doubleval', 'each', 'easter_date', + 'easter_days', 'ebcdic2ascii', 'echo', 'empty', 'end', 'ereg', + 'ereg_replace', 'eregi', 'eregi_replace', 'error_log', 'error_reporting', + 'escapeshellarg', 'escapeshellcmd', 'eval', 'exec', 'exif_imagetype', + 'exif_read_data', 'exif_thumbnail', 'exit', 'exp', 'explode', 'expm1', + 'extension_loaded', 'extract', 'ezmlm_hash', 'fbsql_affected_rows', + 'fbsql_autocommit', 'fbsql_change_user', 'fbsql_close', 'fbsql_commit', + 'fbsql_connect', 'fbsql_create_blob', 'fbsql_create_clob', + 'fbsql_create_db', 'fbsql_data_seek', 'fbsql_database', + 'fbsql_database_password', 'fbsql_db_query', 'fbsql_db_status', + 'fbsql_drop_db', 'fbsql_errno', 'fbsql_error', 'fbsql_fetch_a', + 'fbsql_fetch_assoc', 'fbsql_fetch_field', 'fbsql_fetch_lengths', + 'fbsql_fetch_object', 'fbsql_fetch_row', 'fbsql_field_flags', + 'fbsql_field_len', 'fbsql_field_name', 'fbsql_field_seek', + 'fbsql_field_table', 'fbsql_field_type', 'fbsql_free_result', + 'fbsql_get_autostart_info', 'fbsql_hostname', 'fbsql_insert_id', + 'fbsql_list_dbs', 'fbsql_list_fields', 'fbsql_list_tables', + 'fbsql_next_result', 'fbsql_num_fields', 'fbsql_num_rows', + 'fbsql_password', 'fbsql_pconnect', 'fbsql_query', 'fbsql_read_blob', + 'fbsql_read_clob', 'fbsql_result', 'fbsql_rollback', 'fbsql_select_db', + 'fbsql_set_lob_mode', 'fbsql_set_transaction', 'fbsql_start_db', + 'fbsql_stop_db', 'fbsql_tablename', 'fbsql_username', 'fbsql_warnings', + 'fclose', 'fdf_add_template', 'fdf_close', 'fdf_create', 'fdf_get_file', + 'fdf_get_status', 'fdf_get_value', 'fdf_next_field_name', 'fdf_open', + 'fdf_save', 'fdf_set_ap', 'fdf_set_encoding', 'fdf_set_file', + 'fdf_set_flags', 'fdf_set_javascript_action', 'fdf_set_opt', + 'fdf_set_status', 'fdf_set_submit_form_action', 'fdf_set_value', 'feof', + 'fflush', 'fgetc', 'fgetcsv', 'fgets', 'fgetss', 'fgetwrapperdata', + 'file', 'file_exists', 'file_get_contents', 'fileatime', 'filectime', + 'filegroup', 'fileinode', 'filemtime', 'fileowner', 'fileperms', + 'filepro', 'filepro_fieldcount', 'filepro_fieldname', 'filepro_fieldtype', + 'filepro_fieldwidth', 'filepro_retrieve', 'filepro_rowcount', 'filesize', + 'filetype', 'floatval', 'flock', 'floor', 'flush', 'fopen', 'fpassthru', + 'fputs', 'fread', 'frenchtojd', 'fribidi_log2vis', 'fscanf', 'fseek', + 'fsockopen', 'fstat', 'ftell', 'ftok', 'ftp_cdup', 'ftp_chdir', + 'ftp_close', 'ftp_connect', 'ftp_delete', 'ftp_exec', 'ftp_fget', + 'ftp_fput', 'ftp_get', 'ftp_get_option', 'ftp_login', 'ftp_mdtm', + 'ftp_mkdir', 'ftp_nlist', 'ftp_pasv', 'ftp_put', 'ftp_pwd', 'ftp_quit', + 'ftp_rawlist', 'ftp_rename', 'ftp_rmdir', 'ftp_set_option', 'ftp_site', + 'ftp_size', 'ftp_systype', 'ftruncate', 'func_get_arg', 'func_get_args', + 'func_num_args', 'function_exists', 'fwrite', 'get_browser', + 'get_cfg_var', 'get_class', 'get_class_methods', 'get_class_vars', + 'get_current_user', 'get_declared_classes', 'get_defined_constants', + 'get_defined_functions', 'get_defined_vars', 'get_extension_funcs', + 'get_html_translation_table', 'get_include_p', 'get_included_files', + 'get_loaded_extensions', 'get_magic_quotes_gpc', + 'get_magic_quotes_runtime', 'get_meta_tags', 'get_object_vars', + 'get_parent_class', 'get_required_files', 'get_resource_type', + 'getallheaders', 'getcwd', 'getdate', 'getenv', 'gethostbyaddr', + 'gethostbyname', 'gethostbynamel', 'getimagesize', 'getlastmod', + 'getmxrr', 'getmygid', 'getmyinode', 'getmypid', 'getmyuid', + 'getprotobyname', 'getprotobynumber', 'getrandmax', 'getrusage', + 'getservbyname', 'getservbyport', 'gettext', 'gettimeofday', 'gettype', + 'global', 'gmdate', 'gmmktime', 'gmp_abs', 'gmp_add', 'gmp_and', + 'gmp_clrbit', 'gmp_cmp', 'gmp_com', 'gmp_div', 'gmp_div_q', 'gmp_div_qr', + 'gmp_div_r', 'gmp_divexact', 'gmp_fact', 'gmp_gcd', 'gmp_gcdext', + 'gmp_hamdist', 'gmp_init', 'gmp_intval', 'gmp_invert', 'gmp_jacobi', + 'gmp_legendre', 'gmp_mod', 'gmp_mul', 'gmp_neg', 'gmp_or', + 'gmp_perfect_square', 'gmp_popcount', 'gmp_pow', 'gmp_powm', + 'gmp_prob_prime', 'gmp_random', 'gmp_scan0', 'gmp_scan1', 'gmp_setbit', + 'gmp_sign', 'gmp_sqrt', 'gmp_sqrtrem', 'gmp_strval', 'gmp_sub', 'gmp_xor', + 'gmstrftime', 'gregoriantojd', 'gzclose', 'gzcompress', 'gzdeflate', + 'gzencode', 'gzeof', 'gzfile', 'gzgetc', 'gzgets', 'gzgetss', 'gzinflate', + 'gzopen', 'gzpassthru', 'gzputs', 'gzread', 'gzrewind', 'gzseek', 'gztell', + 'gzuncompress', 'gzwrite', 'header', 'headers_sent', 'hebrev', 'hebrevc', + 'hexdec', 'highlight_file', 'highlight_string', 'htmlentities', + 'htmlspecialchars', 'hw_array2objrec', 'hw_c', 'hw_children', + 'hw_childrenobj', 'hw_close', 'hw_connect', 'hw_connection_info', 'hw_cp', + 'hw_deleteobject', 'hw_docbyanchor', 'hw_docbyanchorobj', + 'hw_document_attributes', 'hw_document_bodytag', 'hw_document_content', + 'hw_document_setcontent', 'hw_document_size', 'hw_dummy', 'hw_edittext', + 'hw_error', 'hw_errormsg', 'hw_free_document', 'hw_getanchors', + 'hw_getanchorsobj', 'hw_getandlock', 'hw_getchildcoll', + 'hw_getchildcollobj', 'hw_getchilddoccoll', 'hw_getchilddoccollobj', + 'hw_getobject', 'hw_getobjectbyquery', 'hw_getobjectbyquerycoll', + 'hw_getobjectbyquerycollobj', 'hw_getobjectbyqueryobj', 'hw_getparents', + 'hw_getparentsobj', 'hw_getrellink', 'hw_getremote', + 'hw_getremotechildren', 'hw_getsrcbydestobj', 'hw_gettext', + 'hw_getusername', 'hw_identify', 'hw_incollections', 'hw_info', + 'hw_inscoll', 'hw_insdoc', 'hw_insertanchors', 'hw_insertdocument', + 'hw_insertobject', 'hw_mapid', 'hw_modifyobject', 'hw_mv', + 'hw_new_document', 'hw_objrec2array', 'hw_output_document', 'hw_pconnect', + 'hw_pipedocument', 'hw_root', 'hw_setlinkroot', 'hw_stat', 'hw_unlock', + 'hw_who', 'hypot', 'i', 'ibase_blob_add', 'ibase_blob_cancel', + 'ibase_blob_close', 'ibase_blob_create', 'ibase_blob_echo', + 'ibase_blob_get', 'ibase_blob_import', 'ibase_blob_info', + 'ibase_blob_open', 'ibase_close', 'ibase_commit', 'ibase_connect', + 'ibase_errmsg', 'ibase_execute', 'ibase_fetch_object', 'ibase_fetch_row', + 'ibase_field_info', 'ibase_free_query', 'ibase_free_result', + 'ibase_num_fields', 'ibase_pconnect', 'ibase_prepare', 'ibase_query', + 'ibase_rollback', 'ibase_timefmt', 'ibase_trans', 'icap_close', + 'icap_create_calendar', 'icap_delete_calendar', 'icap_delete_event', + 'icap_fetch_event', 'icap_list_alarms', 'icap_list_events', 'icap_open', + 'icap_rename_calendar', 'icap_reopen', 'icap_snooze', 'icap_store_event', + 'iconv', 'iconv_get_encoding', 'iconv_set_encoding', 'ifx_affected_rows', + 'ifx_blobinfile_mode', 'ifx_byteasvarchar', 'ifx_close', 'ifx_connect', + 'ifx_copy_blob', 'ifx_create_blob', 'ifx_create_char', 'ifx_do', + 'ifx_error', 'ifx_errormsg', 'ifx_fetch_row', 'ifx_fieldproperties', + 'ifx_fieldtypes', 'ifx_free_blob', 'ifx_free_char', 'ifx_free_result', + 'ifx_get_blob', 'ifx_get_char', 'ifx_getsqlca', 'ifx_htmltbl_result', + 'ifx_nullformat', 'ifx_num_fields', 'ifx_num_rows', 'ifx_pconnect', + 'ifx_prepare', 'ifx_query', 'ifx_textasvarchar', 'ifx_update_blob', + 'ifx_update_char', 'ifxus_close_slob', 'ifxus_create_slob', + 'ifxus_free_slob', 'ifxus_open_slob', 'ifxus_read_slob', + 'ifxus_seek_slob', 'ifxus_tell_slob', 'ifxus_write_slob', + 'ignore_user_abort', 'image2wbmp', 'imagealphablending', 'imageantialias', + 'imagearc', 'imagechar', 'imagecharup', 'imagecolorallocate', + 'imagecolorat', 'imagecolorclosest', 'imagecolorclosestalpha', + 'imagecolorclosesthwb', 'imagecolordeallocate', 'imagecolorexact', + 'imagecolorexactalpha', 'imagecolorresolve', 'imagecolorresolvealpha', + 'imagecolorset', 'imagecolorsforindex', 'imagecolorstotal', + 'imagecolortransparent', 'imagecopy', 'imagecopymerge', + 'imagecopymergegray', 'imagecopyresampled', 'imagecopyresized', + 'imagecreate', 'imagecreatefromgd', 'imagecreatefromgd2', + 'imagecreatefromgd2part', 'imagecreatefromgif', 'imagecreatefromjpeg', + 'imagecreatefrompng', 'imagecreatefromstring', 'imagecreatefromwbmp', + 'imagecreatefromxbm', 'imagecreatefromxpm', 'imagecreatetruecolor', + 'imagedashedline', 'imagedestroy', 'imageellipse', 'imagefill', + 'imagefilledarc', 'imagefilledellipse', 'imagefilledpolygon', + 'imagefilledrectangle', 'imagefilltoborder', 'imagefontheight', + 'imagefontwidth', 'imageftbbox', 'imagefttext', 'imagegammacorrect', + 'imagegd', 'imagegd2', 'imagegif', 'imageinterlace', 'imagejpeg', + 'imageline', 'imageloadfont', 'imagepalettecopy', 'imagepng', + 'imagepolygon', 'imagepsbbox', 'imagepsencodefont', 'imagepsextendfont', + 'imagepsfreefont', 'imagepsloadfont', 'imagepsslantfont', 'imagepstext', + 'imagerectangle', 'imagesetbrush', 'imagesetpixel', 'imagesetstyle', + 'imagesetthickness', 'imagesettile', 'imagestring', 'imagestringup', + 'imagesx', 'imagesy', 'imagetruecolortopalette', 'imagettfbbox', + 'imagettftext', 'imagetypes', 'imagewbmp', 'imap_8bit', 'imap_append', + 'imap_base64', 'imap_binary', 'imap_body', 'imap_bodystruct', + 'imap_check', 'imap_clearflag_full', 'imap_close', 'imap_createmailbox', + 'imap_delete', 'imap_deletemailbox', 'imap_errors', 'imap_expunge', + 'imap_fetch_overview', 'imap_fetchbody', 'imap_fetchheader', + 'imap_fetchstructure', 'imap_get_quota', 'imap_getmailboxes', + 'imap_getsubscribed', 'imap_header', 'imap_headerinfo', 'imap_headers', + 'imap_last_error', 'imap_listmailbox', 'imap_listsubscribed', 'imap_mail', + 'imap_mail_compose', 'imap_mail_copy', 'imap_mail_move', + 'imap_mailboxmsginfo', 'imap_mime_header_decode', 'imap_msgno', + 'imap_num_msg', 'imap_num_recent', 'imap_open', 'imap_ping', 'imap_popen', + 'imap_qprint', 'imap_renamemailbox', 'imap_reopen', + 'imap_rfc822_parse_adrlist', 'imap_rfc822_parse_headers', + 'imap_rfc822_write_address', 'imap_scanmailbox', 'imap_search', + 'imap_set_quota', 'imap_setacl', 'imap_setflag_full', 'imap_sort', + 'imap_status', 'imap_subscribe', 'imap_thread', 'imap_uid', + 'imap_undelete', 'imap_unsubscribe', 'imap_utf7_decode', + 'imap_utf7_encode', 'imap_utf8', 'implode', 'import_request_variables', + 'in_array', 'include', 'include_once', 'ingres_autocommit', + 'ingres_close', 'ingres_commit', 'ingres_connect', 'ingres_fetch_array', + 'ingres_fetch_object', 'ingres_fetch_row', 'ingres_field_length', + 'ingres_field_name', 'ingres_field_nullable', 'ingres_field_precision', + 'ingres_field_scale', 'ingres_field_type', 'ingres_num_fields', + 'ingres_num_rows', 'ingres_pconnect', 'ingres_query', 'ingres_rollback', + 'ini_alter', 'ini_get', 'ini_get_all', 'ini_restore', 'ini_set', 'intval', + 'ip2long', 'iptcembed', 'iptcparse', 'ircg_channel_mode', + 'ircg_disconnect', 'ircg_fetch_error_msg', 'ircg_get_username', + 'ircg_html_encode', 'ircg_ignore_add', 'ircg_ignore_del', + 'ircg_is_conn_alive', 'ircg_join', 'ircg_kick', + 'ircg_lookup_format_messages', 'ircg_msg', 'ircg_nick', + 'ircg_nickname_escape', 'ircg_nickname_unescape', 'ircg_notice', + 'ircg_part', 'ircg_pconnect', 'ircg_register_format_messages', + 'ircg_set_current', 'ircg_set_file', 'ircg_topic', 'ircg_whois', 'is_a', + 'is_array', 'is_bool', 'is_callable', 'is_dir', 'is_double', + 'is_executable', 'is_file', 'is_finite', 'is_float', 'is_infinite', + 'is_int', 'is_integer', 'is_link', 'is_long', 'is_nan', 'is_null', + 'is_numeric', 'is_object', 'is_readable', 'is_real', 'is_resource', + 'is_scalar', 'is_string', 'is_subclass_of', 'is_uploaded_file', + 'is_writable', 'is_writeable', 'isset', 'java_last_exception_clear', + 'java_last_exception_get', 'jddayofweek', 'jdmonthname', 'jdtofrench', + 'jdtogregorian', 'jdtojewish', 'jdtojulian', 'jdtounix', 'jewishtojd', + 'join', 'jpeg2wbmp', 'juliantojd', 'key', 'krsort', 'ksort', 'lcg_value', + 'ldap_8859_to_t61', 'ldap_add', 'ldap_bind', 'ldap_close', 'ldap_compare', + 'ldap_connect', 'ldap_count_entries', 'ldap_delete', 'ldap_dn2ufn', + 'ldap_err2str', 'ldap_errno', 'ldap_error', 'ldap_explode_dn', + 'ldap_first_attribute', 'ldap_first_entry', 'ldap_first_reference', + 'ldap_free_result', 'ldap_get_attributes', 'ldap_get_dn', + 'ldap_get_entries', 'ldap_get_option', 'ldap_get_values', + 'ldap_get_values_len', 'ldap_list', 'ldap_mod_add', 'ldap_mod_del', + 'ldap_mod_replace', 'ldap_modify', 'ldap_next_attribute', + 'ldap_next_entry', 'ldap_next_reference', 'ldap_parse_reference', + 'ldap_parse_result', 'ldap_read', 'ldap_rename', 'ldap_search', + 'ldap_set_option', 'ldap_set_rebind_proc', 'ldap_sort', 'ldap_start_tls', + 'ldap_t61_to_8859', 'ldap_unbind', 'leak', 'levenshtein', 'link', + 'linkinfo', 'list', 'localeconv', 'localtime', 'log', 'log10', 'log1p', + 'long2ip', 'lstat', 'ltrim', 'mail', + 'mailparse_determine_best_xfer_encoding', 'mailparse_msg_create', + 'mailparse_msg_extract_part', 'mailparse_msg_extract_part_file', + 'mailparse_msg_free', 'mailparse_msg_get_part', + 'mailparse_msg_get_part_data', 'mailparse_msg_get_structure', + 'mailparse_msg_parse', 'mailparse_msg_parse_file', + 'mailparse_rfc822_parse_addresses', 'mailparse_stream_encode', + 'mailparse_uudecode_all', 'max', 'mb_c', 'mb_convert_kana', + 'mb_convert_variables', 'mb_decode_mimeheader', 'mb_decode_numericentity', + 'mb_detect_encoding', 'mb_detect_order', 'mb_encode_mimeheader', + 'mb_encode_numericentity', 'mb_ereg', 'mb_ereg_match', 'mb_ereg_replace', + 'mb_ereg_search', 'mb_ereg_search_getpos', 'mb_ereg_search_getregs', + 'mb_ereg_search_init', 'mb_ereg_search_pos', 'mb_ereg_search_regs', + 'mb_ereg_search_setpos', 'mb_eregi', 'mb_eregi_replace', 'mb_get_info', + 'mb_http_input', 'mb_http_output', 'mb_internal_encoding', 'mb_language', + 'mb_output_handler', 'mb_parse_str', 'mb_preferred_mime_name', + 'mb_regex_encoding', 'mb_send_mail', 'mb_split', 'mb_strcut', + 'mb_strimwidth', 'mb_strlen', 'mb_strpos', 'mb_strrpos', 'mb_strwidth', + 'mb_substitute_character', 'mb_substr', 'mcal_append_event', 'mcal_close', + 'mcal_create_calendar', 'mcal_date_compare', 'mcal_date_valid', + 'mcal_day_of_week', 'mcal_day_of_year', 'mcal_days_in_month', + 'mcal_delete_calendar', 'mcal_delete_event', 'mcal_event_add_attribute', + 'mcal_event_init', 'mcal_event_set_alarm', 'mcal_event_set_category', + 'mcal_event_set_class', 'mcal_event_set_description', + 'mcal_event_set_end', 'mcal_event_set_recur_daily', + 'mcal_event_set_recur_monthly_mday', 'mcal_event_set_recur_monthly_wday', + 'mcal_event_set_recur_none', 'mcal_event_set_recur_weekly', + 'mcal_event_set_recur_yearly', 'mcal_event_set_start', + 'mcal_event_set_title', 'mcal_expunge', 'mcal_fetch_current_stream_event', + 'mcal_fetch_event', 'mcal_is_leap_year', 'mcal_list_alarms', + 'mcal_list_events', 'mcal_next_recurrence', 'mcal_open', 'mcal_popen', + 'mcal_rename_calendar', 'mcal_reopen', 'mcal_snooze', 'mcal_store_event', + 'mcal_time_valid', 'mcal_week_of_year', 'mcrypt_cbc', 'mcrypt_cfb', + 'mcrypt_create_iv', 'mcrypt_decrypt', 'mcrypt_ecb', + 'mcrypt_enc_get_algorithms_name', 'mcrypt_enc_get_block_size', + 'mcrypt_enc_get_iv_size', 'mcrypt_enc_get_key_size', + 'mcrypt_enc_get_modes_name', 'mcrypt_enc_get_supported_key_sizes', + 'mcrypt_enc_is_block_algorithm', 'mcrypt_enc_is_block_algorithm_mode', + 'mcrypt_enc_is_block_mode', 'mcrypt_enc_self_test', 'mcrypt_encrypt', + 'mcrypt_generic', 'mcrypt_generic_deinit', 'mcrypt_generic_end', + 'mcrypt_generic_init', 'mcrypt_get_block_size', 'mcrypt_get_cipher_name', + 'mcrypt_get_iv_size', 'mcrypt_get_key_size', 'mcrypt_list_algorithms', + 'mcrypt_list_modes', 'mcrypt_module_close', + 'mcrypt_module_get_algo_block_size', 'mcrypt_module_get_algo_key_size', + 'mcrypt_module_get_supported_key_sizes', + 'mcrypt_module_is_block_algorithm', + 'mcrypt_module_is_block_algorithm_mode', 'mcrypt_module_is_block_mode', + 'mcrypt_module_open', 'mcrypt_module_self_test', 'mcrypt_ofb', 'md5', + 'md5_file', 'mdecrypt_generic', 'metaphone', 'method_exists', 'mhash', + 'mhash_count', 'mhash_get_block_size', 'mhash_get_hash_name', + 'mhash_keygen_s2k', 'microtime', 'min', 'ming_setcubicthreshold', + 'ming_setscale', 'ming_useswfversion', 'mkdir', 'mktime', + 'move_uploaded_file', 'msession_connect', 'msession_count', + 'msession_create', 'msession_destroy', 'msession_disconnect', + 'msession_find', 'msession_get', 'msession_get_array', 'msession_getdata', + 'msession_inc', 'msession_list', 'msession_listvar', 'msession_lock', + 'msession_plugin', 'msession_randstr', 'msession_set', + 'msession_set_array', 'msession_setdata', 'msession_timeout', + 'msession_uniq', 'msession_unlock', 'msql', 'msql_affected_rows', + 'msql_close', 'msql_connect', 'msql_create_db', 'msql_createdb', + 'msql_data_seek', 'msql_dbname', 'msql_drop_db', 'msql_dropdb', + 'msql_error', 'msql_fetch_array', 'msql_fetch_field', 'msql_fetch_object', + 'msql_fetch_row', 'msql_field_seek', 'msql_fieldflags', 'msql_fieldlen', + 'msql_fieldname', 'msql_fieldtable', 'msql_fieldtype', 'msql_free_result', + 'msql_freeresult', 'msql_list_dbs', 'msql_list_fields', 'msql_list_tables', + 'msql_listdbs', 'msql_listfields', 'msql_listtables', 'msql_num_fields', + 'msql_num_rows', 'msql_numfields', 'msql_numrows', 'msql_pconnect', + 'msql_query', 'msql_regcase', 'msql_result', 'msql_select_db', + 'msql_selectdb', 'msql_tablename', 'mssql_bind', 'mssql_close', + 'mssql_connect', 'mssql_data_seek', 'mssql_execute', 'mssql_fetch_array', + 'mssql_fetch_assoc', 'mssql_fetch_batch', 'mssql_fetch_field', + 'mssql_fetch_object', 'mssql_fetch_row', 'mssql_field_length', + 'mssql_field_name', 'mssql_field_seek', 'mssql_field_type', + 'mssql_free_result', 'mssql_get_last_message', 'mssql_guid_string', + 'mssql_init', 'mssql_min_error_severity', 'mssql_min_message_severity', + 'mssql_next_result', 'mssql_num_fields', 'mssql_num_rows', + 'mssql_pconnect', 'mssql_query', 'mssql_result', 'mssql_rows_affected', + 'mssql_select_db', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'muscat_close', + 'muscat_get', 'muscat_give', 'muscat_setup', 'muscat_setup_net', + 'mysql_affected_rows', 'mysql_change_user', 'mysql_character_set_name', + 'mysql_close', 'mysql_connect', 'mysql_create_db', 'mysql_data_seek', + 'mysql_db_name', 'mysql_db_query', 'mysql_drop_db', 'mysql_errno', + 'mysql_error', 'mysql_escape_string', 'mysql_fetch_array', + 'mysql_fetch_assoc', 'mysql_fetch_field', 'mysql_fetch_lengths', + 'mysql_fetch_object', 'mysql_fetch_row', 'mysql_field_flags', + 'mysql_field_len', 'mysql_field_name', 'mysql_field_seek', + 'mysql_field_table', 'mysql_field_type', 'mysql_free_result', + 'mysql_get_client_info', 'mysql_get_host_info', 'mysql_get_proto_info', + 'mysql_get_server_info', 'mysql_info', 'mysql_insert_id', + 'mysql_list_dbs', 'mysql_list_fields', 'mysql_list_processes', + 'mysql_list_tables', 'mysql_num_fields', 'mysql_num_rows', + 'mysql_pconnect', 'mysql_ping', 'mysql_query', 'mysql_real_escape_string', + 'mysql_result', 'mysql_select_db', 'mysql_stat', 'mysql_tablename', + 'mysql_thread_id', 'mysql_unbuffered_query', 'natcasesort', 'natsort', + 'ncur', 'ncurses_addch', 'ncurses_addchnstr', 'ncurses_addchstr', + 'ncurses_addnstr', 'ncurses_addstr', 'ncurses_assume_default_colors', + 'ncurses_attroff', 'ncurses_attron', 'ncurses_attrset', + 'ncurses_baudrate', 'ncurses_beep', 'ncurses_bkgd', 'ncurses_bkgdset', + 'ncurses_border', 'ncurses_can_change_color', 'ncurses_cbreak', + 'ncurses_clear', 'ncurses_clrtobot', 'ncurses_clrtoeol', + 'ncurses_color_set', 'ncurses_curs_set', 'ncurses_def_prog_mode', + 'ncurses_def_shell_mode', 'ncurses_define_key', 'ncurses_delay_output', + 'ncurses_delch', 'ncurses_deleteln', 'ncurses_delwin', 'ncurses_doupdate', + 'ncurses_echo', 'ncurses_echochar', 'ncurses_end', 'ncurses_erase', + 'ncurses_erasechar', 'ncurses_filter', 'ncurses_flash', + 'ncurses_flushinp', 'ncurses_getch', 'ncurses_getmouse', + 'ncurses_halfdelay', 'ncurses_has_ic', 'ncurses_has_il', + 'ncurses_has_key', 'ncurses_hline', 'ncurses_inch', 'ncurses_init', + 'ncurses_init_color', 'ncurses_init_pair', 'ncurses_insch', + 'ncurses_insdelln', 'ncurses_insertln', 'ncurses_insstr', 'ncurses_instr', + 'ncurses_isendwin', 'ncurses_keyok', 'ncurses_killchar', + 'ncurses_longname', 'ncurses_mouseinterval', 'ncurses_mousemask', + 'ncurses_move', 'ncurses_mvaddch', 'ncurses_mvaddchnstr', + 'ncurses_mvaddchstr', 'ncurses_mvaddnstr', 'ncurses_mvaddstr', + 'ncurses_mvcur', 'ncurses_mvdelch', 'ncurses_mvgetch', 'ncurses_mvhline', + 'ncurses_mvinch', 'ncurses_mvvline', 'ncurses_mvwaddstr', 'ncurses_napms', + 'ncurses_newwin', 'ncurses_nl', 'ncurses_nocbreak', 'ncurses_noecho', + 'ncurses_nonl', 'ncurses_noqiflush', 'ncurses_noraw', 'ncurses_putp', + 'ncurses_qiflush', 'ncurses_raw', 'ncurses_refresh', 'ncurses_resetty', + 'ncurses_savetty', 'ncurses_scr_dump', 'ncurses_scr_init', + 'ncurses_scr_restore', 'ncurses_scr_set', 'ncurses_scrl', + 'ncurses_slk_attr', 'ncurses_slk_attroff', 'ncurses_slk_attron', + 'ncurses_slk_attrset', 'ncurses_slk_clear', 'ncurses_slk_color', + 'ncurses_slk_init', 'ncurses_slk_noutrefresh', 'ncurses_slk_refresh', + 'ncurses_slk_restore', 'ncurses_slk_touch', 'ncurses_standend', + 'ncurses_standout', 'ncurses_start_color', 'ncurses_termattrs', + 'ncurses_termname', 'ncurses_timeout', 'ncurses_typeahead', + 'ncurses_ungetch', 'ncurses_ungetmouse', 'ncurses_use_default_colors', + 'ncurses_use_env', 'ncurses_use_extended_names', 'ncurses_vidattr', + 'ncurses_vline', 'ncurses_wrefresh', 'next', 'ngettext', 'nl2br', + 'nl_langinfo', 'notes_body', 'notes_copy_db', 'notes_create_db', + 'notes_create_note', 'notes_drop_db', 'notes_find_note', + 'notes_header_info', 'notes_list_msgs', 'notes_mark_read', + 'notes_mark_unread', 'notes_nav_create', 'notes_search', 'notes_unread', + 'notes_version', 'number_format', 'ob_clean', 'ob_end_clean', + 'ob_end_flush', 'ob_flush', 'ob_get_contents', 'ob_get_length', + 'ob_get_level', 'ob_gzhandler', 'ob_iconv_handler', 'ob_implicit_flush', + 'ob_start', 'ocibindbyname', 'ocicancel', 'ocicollappend', + 'ocicollassign', 'ocicollassignelem', 'ocicollgetelem', 'ocicollmax', + 'ocicollsize', 'ocicolltrim', 'ocicolumnisnull', 'ocicolumnname', + 'ocicolumnprecision', 'ocicolumnscale', 'ocicolumnsize', 'ocicolumntype', + 'ocicolumntyperaw', 'ocicommit', 'ocidefinebyname', 'ocierror', + 'ociexecute', 'ocifetch', 'ocifetchinto', 'ocifetchstatement', + 'ocifreecollection', 'ocifreecursor', 'ocifreedesc', 'ocifreestatement', + 'ociinternaldebug', 'ociloadlob', 'ocilogoff', 'ocilogon', + 'ocinewcollection', 'ocinewcursor', 'ocinewdescriptor', 'ocinlogon', + 'ocinumcols', 'ociparse', 'ociplogon', 'ociresult', 'ocirollback', + 'ocirowcount', 'ocisavelob', 'ocisavelobfile', 'ociserverversion', + 'ocisetprefetch', 'ocistatementtype', 'ociwritelobtofile', 'octdec', + 'odbc_autocommit', 'odbc_binmode', 'odbc_close', 'odbc_close_all', + 'odbc_columnprivileges', 'odbc_columns', 'odbc_commit', 'odbc_connect', + 'odbc_cursor', 'odbc_do', 'odbc_error', 'odbc_errormsg', 'odbc_exec', + 'odbc_execute', 'odbc_fetch_array', 'odbc_fetch_into', + 'odbc_fetch_object', 'odbc_fetch_row', 'odbc_field_len', + 'odbc_field_name', 'odbc_field_num', 'odbc_field_precision', + 'odbc_field_scale', 'odbc_field_type', 'odbc_foreignkeys', + 'odbc_free_result', 'odbc_gettypeinfo', 'odbc_longreadlen', + 'odbc_next_result', 'odbc_num_fields', 'odbc_num_rows', 'odbc_pconnect', + 'odbc_prepare', 'odbc_primarykeys', 'odbc_procedurecolumns', + 'odbc_procedures', 'odbc_result', 'odbc_result_all', 'odbc_rollback', + 'odbc_setoption', 'odbc_specialcolumns', 'odbc_statistics', + 'odbc_tableprivileges', 'odbc_tables', 'opendir', 'openlog', + 'openssl_csr_export', 'openssl_csr_export_to_file', 'openssl_csr_new', + 'openssl_csr_sign', 'openssl_error_string', 'openssl_free_key', + 'openssl_get_privatekey', 'openssl_get_publickey', 'openssl_open', + 'openssl_pkcs7_decrypt', 'openssl_pkcs7_encrypt', 'openssl_pkcs7_sign', + 'openssl_pkcs7_verify', 'openssl_pkey_export', + 'openssl_pkey_export_to_file', 'openssl_pkey_new', + 'openssl_private_decrypt', 'openssl_private_encrypt', + 'openssl_public_decrypt', 'openssl_public_encrypt', 'openssl_seal', + 'openssl_sign', 'openssl_verify', 'openssl_x509_check_private_key', + 'openssl_x509_checkpurpose', 'openssl_x509_export', + 'openssl_x509_export_to_file', 'openssl_x509_free', 'openssl_x509_parse', + 'openssl_x509_read', 'ora_bind', 'ora_close', 'ora_columnname', + 'ora_columnsize', 'ora_columntype', 'ora_commit', 'ora_commitoff', + 'ora_commiton', 'ora_do', 'ora_error', 'ora_errorcode', 'ora_exec', + 'ora_fetch', 'ora_fetch_into', 'ora_getcolumn', 'ora_logoff', 'ora_logon', + 'ora_numcols', 'ora_numrows', 'ora_open', 'ora_parse', 'ora_plogon', + 'ora_rollback', 'ord', 'overload', 'ovrimos_close', 'ovrimos_commit', + 'ovrimos_connect', 'ovrimos_cursor', 'ovrimos_exec', 'ovrimos_execute', + 'ovrimos_fetch_into', 'ovrimos_fetch_row', 'ovrimos_field_len', + 'ovrimos_field_name', 'ovrimos_field_num', 'ovrimos_field_type', + 'ovrimos_free_result', 'ovrimos_longreadlen', 'ovrimos_num_fields', + 'ovrimos_num_rows', 'ovrimos_prepare', 'ovrimos_result', + 'ovrimos_result_all', 'ovrimos_rollback', 'pack', 'parse_ini_file', + 'parse_str', 'parse_url', 'passthru', 'pathinfo', 'pclose', 'pcntl_exec', + 'pcntl_fork', 'pcntl_signal', 'pcntl_waitpid', 'pcntl_wexitstatus', + 'pcntl_wifexited', 'pcntl_wifsignaled', 'pcntl_wifstopped', + 'pcntl_wstopsig', 'pcntl_wtermsig', 'pdf_add_annotation', + 'pdf_add_bookmark', 'pdf_add_launchlink', 'pdf_add_locallink', + 'pdf_add_note', 'pdf_add_outline', 'pdf_add_pdflink', 'pdf_add_thumbnail', + 'pdf_add_weblink', 'pdf_arc', 'pdf_arcn', 'pdf_attach_file', + 'pdf_begin_page', 'pdf_begin_pattern', 'pdf_begin_template', 'pdf_circle', + 'pdf_clip', 'pdf_close', 'pdf_close_image', 'pdf_close_pdi', + 'pdf_close_pdi_page', 'pdf_closepath', 'pdf_closepath_fill_stroke', + 'pdf_closepath_stroke', 'pdf_concat', 'pdf_continue_text', 'pdf_curveto', + 'pdf_delete', 'pdf_end_page', 'pdf_end_pattern', 'pdf_end_template', + 'pdf_endpath', 'pdf_fill', 'pdf_fill_stroke', 'pdf_findfont', + 'pdf_get_buffer', 'pdf_get_font', 'pdf_get_fontname', 'pdf_get_fontsize', + 'pdf_get_image_height', 'pdf_get_image_width', 'pdf_get_majorversion', + 'pdf_get_minorversion', 'pdf_get_parameter', 'pdf_get_pdi_value', + 'pdf_get_value', 'pdf_initgraphics', 'pdf_lineto', 'pdf_makespotcolor', + 'pdf_moveto', 'pdf_new', 'pdf_open', 'pdf_open_ccitt', 'pdf_open_file', + 'pdf_open_gif', 'pdf_open_image', 'pdf_open_image_file', 'pdf_open_jpeg', + 'pdf_open_memory_image', 'pdf_open_pdi', 'pdf_open_pdi_page', + 'pdf_open_png', 'pdf_open_tiff', 'pdf_place_image', 'pdf_place_pdi_page', + 'pdf_rect', 'pdf_restore', 'pdf_rotate', 'pdf_save', 'pdf_scale', + 'pdf_set_border_color', 'pdf_set_border_dash', 'pdf_set_border_style', + 'pdf_set_char_spacing', 'pdf_set_duration', 'pdf_set_font', + 'pdf_set_horiz_scaling', 'pdf_set_info', 'pdf_set_info_author', + 'pdf_set_info_creator', 'pdf_set_info_keywords', 'pdf_set_info_subject', + 'pdf_set_info_title', 'pdf_set_leading', 'pdf_set_parameter', + 'pdf_set_text_pos', 'pdf_set_text_rendering', 'pdf_set_text_rise', + 'pdf_set_transition', 'pdf_set_value', 'pdf_set_word_spacing', + 'pdf_setcolor', 'pdf_setdash', 'pdf_setflat', 'pdf_setfont', + 'pdf_setgray', 'pdf_setgray_fill', 'pdf_setgray_stroke', 'pdf_setlinecap', + 'pdf_setlinejoin', 'pdf_setlinewidth', 'pdf_setmatrix', + 'pdf_setmiterlimit', 'pdf_setpolydash', 'pdf_setrgbcolor', + 'pdf_setrgbcolor_fill', 'pdf_setrgbcolor_stroke', 'pdf_show', + 'pdf_show_boxed', 'pdf_show_xy', 'pdf_skew', 'pdf_stringwidth', + 'pdf_stroke', 'pdf_translate', 'pfpro_cleanup', 'pfpro_init', + 'pfpro_process', 'pfpro_process_raw', 'pfpro_version', 'pfsockopen', + 'pg_affected_rows', 'pg_cancel_query', 'pg_client_encoding', 'pg_close', + 'pg_connect', 'pg_connection_busy', 'pg_connection_reset', + 'pg_connection_status', 'pg_copy_from', 'pg_copy_to', 'pg_dbname', + 'pg_end_copy', 'pg_escape_bytea', 'pg_escape_string', 'pg_fetch_array', + 'pg_fetch_object', 'pg_fetch_result', 'pg_fetch_row', 'pg_field_is_null', + 'pg_field_name', 'pg_field_num', 'pg_field_prtlen', 'pg_field_size', + 'pg_field_type', 'pg_free_result', 'pg_get_result', 'pg_host', + 'pg_last_error', 'pg_last_notice', 'pg_last_oid', 'pg_lo_close', + 'pg_lo_create', 'pg_lo_export', 'pg_lo_import', 'pg_lo_open', + 'pg_lo_read', 'pg_lo_seek', 'pg_lo_tell', 'pg_lo_unlink', 'pg_lo_write', + 'pg_num_fields', 'pg_num_rows', 'pg_options', 'pg_pconnect', 'pg_port', + 'pg_put_line', 'pg_query', 'pg_result_error', 'pg_result_status', + 'pg_send_query', 'pg_set_client_encoding', 'pg_trace', 'pg_tty', + 'pg_untrace', 'php_logo_guid', 'php_sapi_name', 'php_uname', 'phpcredits', + 'phpinfo', 'phpversion', 'pi', 'png2wbmp', 'popen', 'pos', 'posix_ctermid', + 'posix_getcwd', 'posix_getegid', 'posix_geteuid', 'posix_getgid', + 'posix_getgrgid', 'posix_getgrnam', 'posix_getgroups', 'posix_getlogin', + 'posix_getpgid', 'posix_getpgrp', 'posix_getpid', 'posix_getppid', + 'posix_getpwnam', 'posix_getpwuid', 'posix_getrlimit', 'posix_getsid', + 'posix_getuid', 'posix_isatty', 'posix_kill', 'posix_mkfifo', + 'posix_setegid', 'posix_seteuid', 'posix_setgid', 'posix_setpgid', + 'posix_setsid', 'posix_setuid', 'posix_times', 'posix_ttyname', + 'posix_uname', 'pow', 'preg_grep', 'preg_match', 'preg_match_all', + 'preg_quote', 'preg_replace', 'preg_replace_callback', 'preg_split', + 'prev', 'print', 'print_r', 'printer_abort', 'printer_close', + 'printer_create_brush', 'printer_create_dc', 'printer_create_font', + 'printer_create_pen', 'printer_delete_brush', 'printer_delete_dc', + 'printer_delete_font', 'printer_delete_pen', 'printer_draw_bmp', + 'printer_draw_chord', 'printer_draw_elipse', 'printer_draw_line', + 'printer_draw_pie', 'printer_draw_rectangle', 'printer_draw_roundrect', + 'printer_draw_text', 'printer_end_doc', 'printer_end_page', + 'printer_get_option', 'printer_list', 'printer_logical_fontheight', + 'printer_open', 'printer_select_brush', 'printer_select_font', + 'printer_select_pen', 'printer_set_option', 'printer_start_doc', + 'printer_start_page', 'printer_write', 'printf', 'pspell_add_to_personal', + 'pspell_add_to_session', 'pspell_check', 'pspell_clear_session', + 'pspell_config_create', 'pspell_config_ignore', 'pspell_config_mode', + 'pspell_config_personal', 'pspell_config_repl', + 'pspell_config_runtogether', 'pspell_config_save_repl', 'pspell_new', + 'pspell_new_config', 'pspell_new_personal', 'pspell_save_wordlist', + 'pspell_store_replacement', 'pspell_suggest', 'putenv', 'qdom_error', + 'qdom_tree', 'quoted_printable_decode', 'quotemeta', 'rad2deg', 'rand', + 'range', 'rawurldecode', 'rawurlencode', 'read_exif_data', 'readdir', + 'readfile', 'readgzfile', 'readline', 'readline_add_history', + 'readline_clear_history', 'readline_completion_function', 'readline_info', + 'readline_list_history', 'readline_read_history', 'readline_write_history', + 'readlink', 'realpath', 'recode', 'recode_file', 'recode_string', + 'register_shutdown_function', 'register_tick_function', 'rename', + 'require', 'require_once', 'reset', 'restore_error_handler', + 'restore_include_path', 'rewind', 'rewinddir', 'rmdir', 'round', 'rsort', + 'rtrim', 'sem_acquire', 'sem_get', 'sem_release', 'sem_remove', + 'serialize', 'sesam_affected_rows', 'sesam_commit', 'sesam_connect', + 'sesam_diagnostic', 'sesam_disconnect', 'sesam_errormsg', 'sesam_execimm', + 'sesam_fetch_array', 'sesam_fetch_result', 'sesam_fetch_row', + 'sesam_field_array', 'sesam_field_name', 'sesam_free_result', + 'sesam_num_fields', 'sesam_query', 'sesam_rollback', 'sesam_seek_row', + 'sesam_settransaction', 'session_cache_expire', 'session_cache_limiter', + 'session_decode', 'session_destroy', 'session_encode', + 'session_get_cookie_params', 'session_id', 'session_is_registered', + 'session_module_name', 'session_name', 'session_register', + 'session_save_path', 'session_set_cookie_params', + 'session_set_save_handler', 'session_start', 'session_unregister', + 'session_unset', 'session_write_close', 'set_error_handler', + 'set_file_buffer', 'set_include_path', 'set_magic_quotes_runtime', + 'set_time_limit', 'setcookie', 'setlocale', 'settype', 'shell_exec', + 'shm_attach', 'shm_detach', 'shm_get_var', 'shm_put_var', 'shm_remove', + 'shm_remove_var', 'shmop_close', 'shmop_delete', 'shmop_open', + 'shmop_read', 'shmop_size', 'shmop_write', 'show_source', 'shuffle', + 'similar_text', 'sin', 'sinh', 'sizeof', 'sleep', 'snmp_get_quick_print', + 'snmp_set_quick_print', 'snmpget', 'snmprealwalk', 'snmpset', 'snmpwalk', + 'snmpwalkoid', 'socket_accept', 'socket_bind', 'socket_close', + 'socket_connect', 'socket_create', 'socket_create_listen', + 'socket_create_pair', 'socket_fd_alloc', 'socket_fd_clear', + 'socket_fd_free', 'socket_fd_isset', 'socket_fd_set', 'socket_fd_zero', + 'socket_get_status', 'socket_getopt', 'socket_getpeername', + 'socket_getsockname', 'socket_iovec_add', 'socket_iovec_alloc', + 'socket_iovec_delete', 'socket_iovec_fetch', 'socket_iovec_free', + 'socket_iovec_set', 'socket_last_error', 'socket_listen', 'socket_read', + 'socket_readv', 'socket_recv', 'socket_recvfrom', 'socket_recvmsg', + 'socket_select', 'socket_send', 'socket_sendmsg', 'socket_sendto', + 'socket_set_blocking', 'socket_set_nonblock', 'socket_set_timeout', + 'socket_setopt', 'socket_shutdown', 'socket_strerror', 'socket_write', + 'socket_writev', 'sort', 'soundex', 'split', 'spliti', 'sprintf', + 'sql_regcase', 'sqrt', 'srand', 'sscanf', 'stat', 'str_pad', 'str_repeat', + 'str_replace', 'str_rot13', 'strcasecmp', 'strchr', 'strcmp', 'strcoll', + 'strcspn', 'strftime', 'strip_tags', 'stripcslashes', 'stripslashes', + 'stristr', 'strlen', 'strnatcasecmp', 'strnatcmp', 'strncasecmp', + 'strncmp', 'strpos', 'strrchr', 'strrev', 'strrpos', 'strspn', 'strstr', + 'strtok', 'strtolower', 'strtotime', 'strtoupper', 'strtr', 'strval', + 'substr', 'substr_count', 'substr_replace', 'swf_actiongeturl', + 'swf_actiongotoframe', 'swf_actiongotolabel', 'swf_actionnextframe', + 'swf_actionplay', 'swf_actionprevframe', 'swf_actionsettarget', + 'swf_actionstop', 'swf_actiontogglequality', 'swf_actionwaitforframe', + 'swf_addbuttonrecord', 'swf_addcolor', 'swf_closefile', + 'swf_definebitmap', 'swf_definefont', 'swf_defineline', 'swf_definepoly', + 'swf_definerect', 'swf_definetext', 'swf_endbutton', 'swf_enddoaction', + 'swf_endshape', 'swf_endsymbol', 'swf_fontsize', 'swf_fontslant', + 'swf_fonttracking', 'swf_getbitmapinfo', 'swf_getfontinfo', + 'swf_getframe', 'swf_labelframe', 'swf_lookat', 'swf_modifyobject', + 'swf_mulcolor', 'swf_nextid', 'swf_oncondition', 'swf_openfile', + 'swf_ortho', 'swf_ortho2', 'swf_perspective', 'swf_placeobject', + 'swf_polarview', 'swf_popmatrix', 'swf_posround', 'swf_pushmatrix', + 'swf_removeobject', 'swf_rotate', 'swf_scale', 'swf_setfont', + 'swf_setframe', 'swf_shapearc', 'swf_shapecurveto', 'swf_shapecurveto3', + 'swf_shapefillbitmapclip', 'swf_shapefillbitmaptile', 'swf_shapefilloff', + 'swf_shapefillsolid', 'swf_shapelinesolid', 'swf_shapelineto', + 'swf_shapemoveto', 'swf_showframe', 'swf_startbutton', + 'swf_startdoaction', 'swf_startshape', 'swf_startsymbol', 'swf_textwidth', + 'swf_translate', 'swf_viewport', 'swfaction', 'swfbitmap', + 'swfbitmap.getheight', 'swfbitmap.getwidth', 'swfbutton', + 'swfbutton.addaction', 'swfbutton.addshape', 'swfbutton.setaction', + 'swfbutton.setdown', 'swfbutton.sethit', 'swfbutton.setover', + 'swfbutton.setup', 'swfbutton_keypress', 'swfdisplayitem', + 'swfdisplayitem.addcolor', 'swfdisplayitem.move', 'swfdisplayitem.moveto', + 'swfdisplayitem.multcolor', 'swfdisplayitem.remove', + 'swfdisplayitem.rotate', 'swfdisplayitem.rotateto', + 'swfdisplayitem.scale', 'swfdisplayitem.scaleto', + 'swfdisplayitem.setdepth', 'swfdisplayitem.setname', + 'swfdisplayitem.setratio', 'swfdisplayitem.skewx', + 'swfdisplayitem.skewxto', 'swfdisplayitem.skewy', + 'swfdisplayitem.skewyto', 'swffill', 'swffill.moveto', 'swffill.rotateto', + 'swffill.scaleto', 'swffill.skewxto', 'swffill.skewyto', 'swffont', + 'swffont.getwidth', 'swfgradient', 'swfgradient.addentry', 'swfmorph', + 'swfmorph.getshape1', 'swfmorph.getshape2', 'swfmovie', 'swfmovie.add', + 'swfmovie.nextframe', 'swfmovie.output', 'swfmovie.remove', + 'swfmovie.save', 'swfmovie.setbackground', 'swfmovie.setdimension', + 'swfmovie.setframes', 'swfmovie.setrate', 'swfmovie.streammp3', + 'swfshape', 'swfshape.addfill', 'swfshape.drawcurve', + 'swfshape.drawcurveto', 'swfshape.drawline', 'swfshape.drawlineto', + 'swfshape.movepen', 'swfshape.movepento', 'swfshape.setleftfill', + 'swfshape.setline', 'swfshape.setrightfill', 'swfsprite', 'swfsprite.add', + 'swfsprite.nextframe', 'swfsprite.remove', 'swfsprite.setframes', + 'swftext', 'swftext.addstring', 'swftext.getwidth', 'swftext.moveto', + 'swftext.setcolor', 'swftext.setfont', 'swftext.setheight', + 'swftext.setspacing', 'swftextfield', 'swftextfield.addstring', + 'swftextfield.align', 'swftextfield.setbounds', 'swftextfield.setcolor', + 'swftextfield.setfont', 'swftextfield.setheight', + 'swftextfield.setindentation', 'swftextfield.setleftmargin', + 'swftextfield.setlinespacing', 'swftextfield.setmargins', + 'swftextfield.setname', 'swftextfield.setrightmargin', + 'sybase_affected_rows', 'sybase_close', 'sybase_connect', + 'sybase_data_seek', 'sybase_fetch_array', 'sybase_fetch_field', + 'sybase_fetch_object', 'sybase_fetch_row', 'sybase_field_seek', + 'sybase_free_result', 'sybase_get_last_message', + 'sybase_min_client_severity', 'sybase_min_error_severity', + 'sybase_min_message_severity', 'sybase_min_server_severity', + 'sybase_num_fields', 'sybase_num_rows', 'sybase_pconnect', 'sybase_query', + 'sybase_result', 'sybase_select_db', 'symlink', 'syslog', 'system', 'tan', + 'tanh', 'tempnam', 'textdomain', 'time', 'tmpfile', 'touch', + 'trigger_error', 'trim', 'uasort', 'ucfirst', 'ucwords', + 'udm_add_search_limit', 'udm_alloc_agent', 'udm_api_version', + 'udm_cat_list', 'udm_cat_path', 'udm_check_charset', 'udm_check_stored', + 'udm_clear_search_limits', 'udm_close_stored', 'udm_crc32', 'udm_errno', + 'udm_error', 'udm_find', 'udm_free_agent', 'udm_free_ispell_data', + 'udm_free_res', 'udm_get_doc_count', 'udm_get_res_field', + 'udm_get_res_param', 'udm_load_ispell_data', 'udm_open_stored', + 'udm_set_agent_param', 'uksort', 'umask', 'uniqid', 'unixtojd', 'unlink', + 'unpack', 'unregister_tick_function', 'unserialize', 'unset', 'urldecode', + 'urlencode', 'user_error', 'usleep', 'usort', 'utf8_decode', 'utf8_encode', + 'var_dump', 'var_export', 'variant', 'version_compare', 'virtual', 'vpo', + 'vpopmail_add_alias_domain', 'vpopmail_add_alias_domain_ex', + 'vpopmail_add_domain', 'vpopmail_add_domain_ex', 'vpopmail_add_user', + 'vpopmail_alias_add', 'vpopmail_alias_del', 'vpopmail_alias_del_domain', + 'vpopmail_alias_get', 'vpopmail_alias_get_all', 'vpopmail_auth_user', + 'vpopmail_del_domain_ex', 'vpopmail_del_user', 'vpopmail_error', + 'vpopmail_passwd', 'vpopmail_set_user_quota', 'vprintf', 'vsprintf', + 'w32api_deftype', 'w32api_init_dtype', 'w32api_invoke_function', + 'w32api_register_function', 'w32api_set_call_method', 'wddx_add_vars', + 'wddx_deserialize', 'wddx_packet_end', 'wddx_packet_start', + 'wddx_serialize_value', 'wddx_serialize_vars', 'wordwrap', + 'xml_error_string', 'xml_get_current_byte_index', + 'xml_get_current_column_number', 'xml_get_current_line_number', + 'xml_get_error_code', 'xml_parse', 'xml_parse_into_struct', + 'xml_parser_create', 'xml_parser_create_ns', 'xml_parser_free', + 'xml_parser_get_option', 'xml_parser_set_option', + 'xml_set_character_data_handler', 'xml_set_default_handler', + 'xml_set_element_handler', 'xml_set_end_namespace_decl_handler', + 'xml_set_external_entity_ref_handler', 'xml_set_notation_decl_handler', + 'xml_set_object', 'xml_set_processing_instruction_handler', + 'xml_set_start_namespace_decl_handler', + 'xml_set_unparsed_entity_decl_handler', 'xmldoc', 'xmldocfile', + 'xmlrpc_decode', 'xmlrpc_decode_request', 'xmlrpc_encode', + 'xmlrpc_encode_request', 'xmlrpc_get_type', + 'xmlrpc_parse_method_descriptions', + 'xmlrpc_server_add_introspection_data', 'xmlrpc_server_call_method', + 'xmlrpc_server_create', 'xmlrpc_server_destroy', + 'xmlrpc_server_register_introspection_callback', + 'xmlrpc_server_register_method', 'xmlrpc_set_type', 'xmltree', + 'xpath_eval', 'xpath_eval_expression', 'xpath_new_context', 'xptr_eval', + 'xptr_new_context', 'xslt_create', 'xslt_errno', 'xslt_error', + 'xslt_free', 'xslt_process', 'xslt_set_base', 'xslt_set_encoding', + 'xslt_set_error_handler', 'xslt_set_log', 'xslt_set_sax_handler', + 'xslt_set_sax_handlers', 'xslt_set_scheme_handler', + 'xslt_set_scheme_handlers', 'yaz_addinfo', 'yaz_ccl_conf', + 'yaz_ccl_parse', 'yaz_close', 'yaz_connect', 'yaz_database', + 'yaz_element', 'yaz_errno', 'yaz_error', 'yaz_hits', 'yaz_itemorder', + 'yaz_present', 'yaz_range', 'yaz_record', 'yaz_scan', 'yaz_scan_result', + 'yaz_search', 'yaz_sort', 'yaz_syntax', 'yaz_wait', 'yp_all', 'yp_cat', + 'yp_err_string', 'yp_errno', 'yp_first', 'yp_get_default_domain', + 'yp_master', 'yp_match', 'yp_next', 'yp_order', 'zend_logo_guid', + 'zend_version', 'zip_close', 'zip_entry_close', + 'zip_entry_compressedsize', 'zip_entry_compressionmethod', + 'zip_entry_filesize', 'zip_entry_name', 'zip_entry_open', + 'zip_entry_read', 'zip_open', 'zip_read' + ), + 1 => $CONTEXT . '/functions', + 2 => 'color:#006;', + 3 => false, + // urls (the name of a function, with brackets at the end, or a string with {FNAME} in it like GeSHi 1.0.X) + // e.g. geshi_php_convert_url(), or http://www.php.net/{FNAME} + 4 => 'geshi_php_convert_url()' + ) +); + +$this->_contextCharactersDisallowedBeforeKeywords = array('$', '_'); +$this->_contextCharactersDisallowedAfterKeywords = array("'", '_'); +$this->_contextSymbols = array( + 0 => array( + 0 => array( + '(', ')', ',', ';', ':', '[', ']', + '+', '-', '*', '/', '&', '|', '!', '<', '>', + '{', '}', '=', '@' + ), + // name + 1 => $CONTEXT . '/sym0', + // style + 2 => 'color:#008000;' + ) +); +$this->_contextRegexps = array( + 0 => array( + // The regexps + // each regex in this array will be tested and styled the same + 0 => array( + '#(\$\$?[a-zA-Z_][a-zA-Z0-9_]*)#', // This is a variable in PHP + ), + // index 1 is a string that strpos can use + // @todo [blocking 1.1.1] maybe later let this string be a regex or something + 1 => '$', + // This is the special bit ;) + // For each bracket pair in the regex above, you can specify a name and style for it + 2 => array( + // index 1 is for the first bracket pair + // so for PHP it's everything within the (...) + // of course we could have specified the regex + // as #$([a-zA-Z_][a-zA-Z0-9_]*)# (note the change + // in place for the first open bracket), then the + // name and style for this part would not include + // the beginning $ + // Note:NEW AFTER 1.1.0a5: if third index of this array is true, + // then you are saying: "Try to highlight as code first, if + // it isn't code then use the styles in the second index". + // This is really aimed at the OO support. For example, this + // is some javascript code: + // foo.bar.toLowerCase(); + // The "bar" will be highlighted as an oo method, while the + // "toLowerCase" will be highlighted as a keyword even though + // it matches the oo method. + 1 => array($CONTEXT . '/var', 'color:#33f;', false), + ) + ), + // These are prebuild functions that can be called to add number + // support to a context. Call exactly as below + 1 => geshi_use_doubles($CONTEXT), + 2 => geshi_use_integers($CONTEXT) +); +$this->_objectSplitters = array( + 0 => array( + 0 => array('->'), + 1 => $CONTEXT . '/oodynamic', + 2 => 'color:#933;', + 3 => false + ), + 1 => array( + 0 => array('::'), + 1 => $CONTEXT . '/oostatic', + 2 => 'color:#933;font-weight:bold;', + 3 => false + ) +); + +/** + * This just demonstrates the concept... + * You can use a function like this, called + * by the URL entry of the keywords array, + * to do whatever you like with the URL. + * These functions that convert urls take one + * mandatory parameter - the keyword the URL + * is being built for. + * + * You can then have some kind of logic in this + * function to return a URL based on the + * keyword... saves on those nasty hacks that + * were used in 1.0.X to do this. + * + * Make sure you do the function_exists check! These + * context files will be included multiple times + */ + if (!function_exists('geshi_php_convert_url')) { + function geshi_php_convert_url ($keyword) + { + return 'http://www.php.net/' . $keyword; + } +} + +?> diff --git a/paste/include/geshi/contexts/php/php4.php b/paste/include/geshi/contexts/php/php4.php new file mode 100644 index 0000000..532bb8f --- /dev/null +++ b/paste/include/geshi/contexts/php/php4.php @@ -0,0 +1,851 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the GeSHiStringContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshistringcontext.php'; +/** Get the GeSHiPHPDoubleStringContext class */ +require_once GESHI_CLASSES_ROOT . 'php' . GESHI_DIR_SEPARATOR . 'class.geshiphpdoublestringcontext.php'; + +$this->_contextDelimiters = array( + 0 => array( + 0 => array(' array('?>'), + 2 => true + ), + 1 => array( + 0 => array('<%'), + 1 => array('%>'), + 2 => false + ) +); + +$this->_childContexts = array( + new GeSHiStringContext('php', $DIALECT, 'common/single_string'), + new GeSHiPHPDoubleStringContext('php', $DIALECT, 'double_string'), + new GeSHiPHPDoubleStringContext('php', $DIALECT, 'heredoc'), + // PHP single comment, with # starter and end-php-context ender + new GeSHiContext('php', $DIALECT, 'single_comment'), + // Use common multi comment since it is a PHP comment... + new GeSHiContext('php', $DIALECT, 'common/multi_comment'), + new GeSHiContext('php', $DIALECT, 'doxygen') +); + +$this->_styler->setStyle($CONTEXT_START, 'color:#000;font-weight:bold;'); +$this->_styler->setStyle($CONTEXT_END, 'color:#000;font-weight:bold;'); + +$this->_contextKeywords = array( + 0 => array( + 0 => array( + 'as', 'break', 'case', 'continue', 'declare', 'do', 'else', 'elseif', + 'endforeach', 'endif', 'endswitch', 'endwhile', 'for', 'foreach', 'if', + 'include', 'include_once', 'require', 'require_once', 'return', 'switch', + 'while' + ), + 1 => $CONTEXT . '/cstructures', + 2 => 'color:#b1b100;', + 3 => false, + 4 => '' + ), + 1 => array( + 0 => array( + 'DEFAULT_INCLUDE_PATH', 'E_ALL', 'E_COMPILE_ERROR', 'E_COMPILE_WARNING', + 'E_CORE_ERROR', 'E_CORE_WARNING', 'E_ERROR', 'E_NOTICE', 'E_PARSE', + 'E_USER_ERROR', 'E_USER_NOTICE', 'E_USER_WARNING', + 'E_WARNING', 'FALSE', 'NULL', 'PEAR_EXTENSION_DIR', 'PEAR_INSTALL_DIR', + 'PHP_BINDIR', 'PHP_CONFIG_FILE_PATH', 'PHP_DATADIR', 'PHP_EXTENSION_DIR', + 'PHP_LIBDIR', 'PHP_LOCALSTATEDIR', 'PHP_OS', 'PHP_OUTPUT_HANDLER_CONT', + 'PHP_OUTPUT_HANDLER_END', 'PHP_OUTPUT_HANDLER_START', 'PHP_SYSCONFDIR', + 'PHP_VERSION', 'TRUE', '__CLASS__', '__FILE__', '__FUNCTION__', + '__LINE__', '__METHOD__', 'class', 'default', + 'extends', 'function', 'new', 'parent', 'static', 'var' + ), + 1 => $CONTEXT . '/keywords', + 2 => 'color:#000;font-weight:bold;', + 3 => false, + 4 => '' + ), + 2 => array( + 0 => array( + // @todo [blocking 1.1.9] This list of functions is for php5... should get one for php4 only + 'abs', 'acos', 'acosh', 'addcslashes', 'addslashes', + 'apache_child_terminate', 'apache_lookup_uri', 'apache_note', + 'apache_setenv', 'array', 'array_change_key_case', 'array_chunk', + 'array_count_values', 'array_diff', 'array_fill', 'array_filter', + 'array_flip', 'array_intersect', 'array_key_exists', 'array_keys', + 'array_map', 'array_merge', 'array_merge_recursive', 'array_multisort', + 'array_pad', 'array_pop', 'array_push', 'array_rand', 'array_reduce', + 'array_reverse', 'array_search', 'array_shift', 'array_slice', + 'array_splice', 'array_sum', 'array_unique', 'array_unshift', + 'array_values', 'array_walk', 'arsort', 'ascii2ebcdic', 'asin', 'asinh', + 'asort', 'aspell_check', 'aspell_check_raw', 'aspell_new', + 'aspell_suggest', 'assert', 'assert_options', 'atan', 'atan2', 'atanh', + 'base64_decode', 'base64_encode', 'base_convert', 'basename', 'bcadd', + 'bccomp', 'bcdiv', 'bcmod', 'bcmul', 'bcpow', 'bcscale', 'bcsqrt', + 'bcsub', 'bin2hex', 'bind_textdomain_codeset', 'bindec', 'bindtextdomain', + 'bz', 'bzclose', 'bzdecompress', 'bzerrno', 'bzerror', 'bzerrstr', + 'bzflush', 'bzopen', 'bzread', 'bzwrite', 'c', 'cal_days_in_month', + 'cal_from_jd', 'cal_info', 'cal_to_jd', 'call_user_func', + 'call_user_func_array', 'call_user_method', 'call_user_method_array', + 'ccvs_add', 'ccvs_auth', 'ccvs_command', 'ccvs_count', 'ccvs_delete', + 'ccvs_done', 'ccvs_init', 'ccvs_lookup', 'ccvs_new', 'ccvs_report', + 'ccvs_return', 'ccvs_reverse', 'ccvs_sale', 'ccvs_status', + 'ccvs_textvalue', 'ccvs_void', 'ceil', 'chdir', 'checkdate', 'checkdnsrr', + 'chgrp', 'chmod', 'chop', 'chown', 'chr', 'chroot', 'chunk_split', + 'class_exists', 'clearstatcache', 'closedir', 'closelog', 'com', + 'com_addref', 'com_get', 'com_invoke', 'com_isenum', 'com_load', + 'com_load_typelib', 'com_propget', 'com_propput', 'com_propset', + 'com_release', 'com_set', 'compact', 'connection_aborted', + 'connection_status', 'connection_timeout', 'constant', + 'convert_cyr_string', 'copy', 'cos', 'cosh', 'count', 'count_chars', + 'cpdf_add_annotation', 'cpdf_add_outline', 'cpdf_arc', 'cpdf_begin_text', + 'cpdf_circle', 'cpdf_clip', 'cpdf_close', 'cpdf_closepath', + 'cpdf_closepath_fill_stroke', 'cpdf_closepath_stroke', + 'cpdf_continue_text', 'cpdf_curveto', 'cpdf_end_text', 'cpdf_fill', + 'cpdf_fill_stroke', 'cpdf_finalize', 'cpdf_finalize_page', + 'cpdf_global_set_document_limits', 'cpdf_import_jpeg', 'cpdf_lineto', + 'cpdf_moveto', 'cpdf_newpath', 'cpdf_open', 'cpdf_output_buffer', + 'cpdf_page_init', 'cpdf_place_inline_image', 'cpdf_rect', 'cpdf_restore', + 'cpdf_rlineto', 'cpdf_rmoveto', 'cpdf_rotate', 'cpdf_rotate_text', + 'cpdf_save', 'cpdf_save_to_file', 'cpdf_scale', 'cpdf_set_action_url', + 'cpdf_set_char_spacing', 'cpdf_set_creator', 'cpdf_set_current_page', + 'cpdf_set_font', 'cpdf_set_font_directories', 'cpdf_set_font_map_file', + 'cpdf_set_horiz_scaling', 'cpdf_set_keywords', 'cpdf_set_leading', + 'cpdf_set_page_animation', 'cpdf_set_subject', 'cpdf_set_text_matrix', + 'cpdf_set_text_pos', 'cpdf_set_text_rise', 'cpdf_set_title', + 'cpdf_set_viewer_preferences', 'cpdf_set_word_spacing', 'cpdf_setdash', + 'cpdf_setflat', 'cpdf_setgray', 'cpdf_setgray_fill', + 'cpdf_setgray_stroke', 'cpdf_setlinecap', 'cpdf_setlinejoin', + 'cpdf_setlinewidth', 'cpdf_setmiterlimit', 'cpdf_setrgbcolor', + 'cpdf_setrgbcolor_fill', 'cpdf_setrgbcolor_stroke', 'cpdf_show', + 'cpdf_show_xy', 'cpdf_stringwidth', 'cpdf_stroke', 'cpdf_text', + 'cpdf_translate', 'crack_check', 'crack_closedict', + 'crack_getlastmessage', 'crack_opendict', 'crc32', 'create_function', + 'crypt', 'ctype_alnum', 'ctype_alpha', 'ctype_cntrl', 'ctype_digit', + 'ctype_graph', 'ctype_lower', 'ctype_print', 'ctype_punct', 'ctype_space', + 'ctype_upper', 'ctype_xdigit', 'curl_close', 'curl_errno', 'curl_error', + 'curl_exec', 'curl_getinfo', 'curl_init', 'curl_setopt', 'curl_version', + 'current', 'cybercash_base64_decode', 'cybercash_base64_encode', + 'cybercash_decr', 'cybercash_encr', 'cybermut_creerformulairecm', + 'cybermut_creerreponsecm', 'cybermut_testmac', 'cyrus_authenticate', + 'cyrus_bind', 'cyrus_close', 'cyrus_connect', 'cyrus_query', + 'cyrus_unbind', 'date', 'dba_close', 'dba_delete', 'dba_exists', + 'dba_fetch', 'dba_firstkey', 'dba_insert', 'dba_nextkey', 'dba_open', + 'dba_optimize', 'dba_popen', 'dba_replace', 'dba_sync', + 'dbase_add_record', 'dbase_close', 'dbase_create', 'dbase_delete_record', + 'dbase_get_record', 'dbase_get_record_with_names', 'dbase_numfields', + 'dbase_numrecords', 'dbase_open', 'dbase_pack', 'dbase_replace_record', + 'dblist', 'dbmclose', 'dbmdelete', 'dbmexists', 'dbmfetch', 'dbmfirstkey', + 'dbminsert', 'dbmnextkey', 'dbmopen', 'dbmreplace', 'dbp', 'dbplus_add', + 'dbplus_aql', 'dbplus_chdir', 'dbplus_close', 'dbplus_curr', + 'dbplus_errcode', 'dbplus_errno', 'dbplus_find', 'dbplus_first', + 'dbplus_flush', 'dbplus_freealllocks', 'dbplus_freelock', + 'dbplus_freerlocks', 'dbplus_getlock', 'dbplus_getunique', 'dbplus_info', + 'dbplus_last', 'dbplus_lockrel', 'dbplus_next', 'dbplus_open', + 'dbplus_rchperm', 'dbplus_rcreate', 'dbplus_rcrtexact', 'dbplus_rcrtlike', + 'dbplus_resolve', 'dbplus_restorepos', 'dbplus_rkeys', 'dbplus_ropen', + 'dbplus_rquery', 'dbplus_rrename', 'dbplus_rsecindex', 'dbplus_runlink', + 'dbplus_rzap', 'dbplus_savepos', 'dbplus_setindex', + 'dbplus_setindexbynumber', 'dbplus_sql', 'dbplus_tcl', 'dbplus_tremove', + 'dbplus_undo', 'dbplus_undoprepare', 'dbplus_unlockrel', + 'dbplus_unselect', 'dbplus_update', 'dbplus_xlockrel', + 'dbplus_xunlockrel', 'dbx_close', 'dbx_compare', 'dbx_connect', + 'dbx_error', 'dbx_query', 'dbx_sort', 'dcgettext', 'dcngettext', + 'debugger_off', 'debugger_on', 'decbin', 'dechex', 'decoct', 'define', + 'define_syslog_variables', 'defined', 'deg2rad', 'delete', 'dgettext', + 'die', 'dio_close', 'dio_fcntl', 'dio_open', 'dio_read', 'dio_seek', + 'dio_stat', 'dio_truncate', 'dio_write', 'dir', 'dirname', + 'disk_free_space', 'disk_total_space', 'diskfreespace', 'dl', 'dngettext', + 'domxml_add_root', 'domxml_attributes', 'domxml_children', + 'domxml_dumpmem', 'domxml_get_attribute', 'domxml_new_child', + 'domxml_new_xmldoc', 'domxml_node', 'domxml_node_set_content', + 'domxml_node_unlink_node', 'domxml_root', 'domxml_set_attribute', + 'domxml_version', 'dotnet_load', 'doubleval', 'each', 'easter_date', + 'easter_days', 'ebcdic2ascii', 'echo', 'empty', 'end', 'ereg', + 'ereg_replace', 'eregi', 'eregi_replace', 'error_log', 'error_reporting', + 'escapeshellarg', 'escapeshellcmd', 'eval', 'exec', 'exif_imagetype', + 'exif_read_data', 'exif_thumbnail', 'exit', 'exp', 'explode', 'expm1', + 'extension_loaded', 'extract', 'ezmlm_hash', 'fbsql_affected_rows', + 'fbsql_autocommit', 'fbsql_change_user', 'fbsql_close', 'fbsql_commit', + 'fbsql_connect', 'fbsql_create_blob', 'fbsql_create_clob', + 'fbsql_create_db', 'fbsql_data_seek', 'fbsql_database', + 'fbsql_database_password', 'fbsql_db_query', 'fbsql_db_status', + 'fbsql_drop_db', 'fbsql_errno', 'fbsql_error', 'fbsql_fetch_a', + 'fbsql_fetch_assoc', 'fbsql_fetch_field', 'fbsql_fetch_lengths', + 'fbsql_fetch_object', 'fbsql_fetch_row', 'fbsql_field_flags', + 'fbsql_field_len', 'fbsql_field_name', 'fbsql_field_seek', + 'fbsql_field_table', 'fbsql_field_type', 'fbsql_free_result', + 'fbsql_get_autostart_info', 'fbsql_hostname', 'fbsql_insert_id', + 'fbsql_list_dbs', 'fbsql_list_fields', 'fbsql_list_tables', + 'fbsql_next_result', 'fbsql_num_fields', 'fbsql_num_rows', + 'fbsql_password', 'fbsql_pconnect', 'fbsql_query', 'fbsql_read_blob', + 'fbsql_read_clob', 'fbsql_result', 'fbsql_rollback', 'fbsql_select_db', + 'fbsql_set_lob_mode', 'fbsql_set_transaction', 'fbsql_start_db', + 'fbsql_stop_db', 'fbsql_tablename', 'fbsql_username', 'fbsql_warnings', + 'fclose', 'fdf_add_template', 'fdf_close', 'fdf_create', 'fdf_get_file', + 'fdf_get_status', 'fdf_get_value', 'fdf_next_field_name', 'fdf_open', + 'fdf_save', 'fdf_set_ap', 'fdf_set_encoding', 'fdf_set_file', + 'fdf_set_flags', 'fdf_set_javascript_action', 'fdf_set_opt', + 'fdf_set_status', 'fdf_set_submit_form_action', 'fdf_set_value', 'feof', + 'fflush', 'fgetc', 'fgetcsv', 'fgets', 'fgetss', 'fgetwrapperdata', + 'file', 'file_exists', 'file_get_contents', 'fileatime', 'filectime', + 'filegroup', 'fileinode', 'filemtime', 'fileowner', 'fileperms', + 'filepro', 'filepro_fieldcount', 'filepro_fieldname', 'filepro_fieldtype', + 'filepro_fieldwidth', 'filepro_retrieve', 'filepro_rowcount', 'filesize', + 'filetype', 'floatval', 'flock', 'floor', 'flush', 'fopen', 'fpassthru', + 'fputs', 'fread', 'frenchtojd', 'fribidi_log2vis', 'fscanf', 'fseek', + 'fsockopen', 'fstat', 'ftell', 'ftok', 'ftp_cdup', 'ftp_chdir', + 'ftp_close', 'ftp_connect', 'ftp_delete', 'ftp_exec', 'ftp_fget', + 'ftp_fput', 'ftp_get', 'ftp_get_option', 'ftp_login', 'ftp_mdtm', + 'ftp_mkdir', 'ftp_nlist', 'ftp_pasv', 'ftp_put', 'ftp_pwd', 'ftp_quit', + 'ftp_rawlist', 'ftp_rename', 'ftp_rmdir', 'ftp_set_option', 'ftp_site', + 'ftp_size', 'ftp_systype', 'ftruncate', 'func_get_arg', 'func_get_args', + 'func_num_args', 'function_exists', 'fwrite', 'get_browser', + 'get_cfg_var', 'get_class', 'get_class_methods', 'get_class_vars', + 'get_current_user', 'get_declared_classes', 'get_defined_constants', + 'get_defined_functions', 'get_defined_vars', 'get_extension_funcs', + 'get_html_translation_table', 'get_include_p', 'get_included_files', + 'get_loaded_extensions', 'get_magic_quotes_gpc', + 'get_magic_quotes_runtime', 'get_meta_tags', 'get_object_vars', + 'get_parent_class', 'get_required_files', 'get_resource_type', + 'getallheaders', 'getcwd', 'getdate', 'getenv', 'gethostbyaddr', + 'gethostbyname', 'gethostbynamel', 'getimagesize', 'getlastmod', + 'getmxrr', 'getmygid', 'getmyinode', 'getmypid', 'getmyuid', + 'getprotobyname', 'getprotobynumber', 'getrandmax', 'getrusage', + 'getservbyname', 'getservbyport', 'gettext', 'gettimeofday', 'gettype', + 'global', 'gmdate', 'gmmktime', 'gmp_abs', 'gmp_add', 'gmp_and', + 'gmp_clrbit', 'gmp_cmp', 'gmp_com', 'gmp_div', 'gmp_div_q', 'gmp_div_qr', + 'gmp_div_r', 'gmp_divexact', 'gmp_fact', 'gmp_gcd', 'gmp_gcdext', + 'gmp_hamdist', 'gmp_init', 'gmp_intval', 'gmp_invert', 'gmp_jacobi', + 'gmp_legendre', 'gmp_mod', 'gmp_mul', 'gmp_neg', 'gmp_or', + 'gmp_perfect_square', 'gmp_popcount', 'gmp_pow', 'gmp_powm', + 'gmp_prob_prime', 'gmp_random', 'gmp_scan0', 'gmp_scan1', 'gmp_setbit', + 'gmp_sign', 'gmp_sqrt', 'gmp_sqrtrem', 'gmp_strval', 'gmp_sub', 'gmp_xor', + 'gmstrftime', 'gregoriantojd', 'gzclose', 'gzcompress', 'gzdeflate', + 'gzencode', 'gzeof', 'gzfile', 'gzgetc', 'gzgets', 'gzgetss', 'gzinflate', + 'gzopen', 'gzpassthru', 'gzputs', 'gzread', 'gzrewind', 'gzseek', 'gztell', + 'gzuncompress', 'gzwrite', 'header', 'headers_sent', 'hebrev', 'hebrevc', + 'hexdec', 'highlight_file', 'highlight_string', 'htmlentities', + 'htmlspecialchars', 'hw_array2objrec', 'hw_c', 'hw_children', + 'hw_childrenobj', 'hw_close', 'hw_connect', 'hw_connection_info', 'hw_cp', + 'hw_deleteobject', 'hw_docbyanchor', 'hw_docbyanchorobj', + 'hw_document_attributes', 'hw_document_bodytag', 'hw_document_content', + 'hw_document_setcontent', 'hw_document_size', 'hw_dummy', 'hw_edittext', + 'hw_error', 'hw_errormsg', 'hw_free_document', 'hw_getanchors', + 'hw_getanchorsobj', 'hw_getandlock', 'hw_getchildcoll', + 'hw_getchildcollobj', 'hw_getchilddoccoll', 'hw_getchilddoccollobj', + 'hw_getobject', 'hw_getobjectbyquery', 'hw_getobjectbyquerycoll', + 'hw_getobjectbyquerycollobj', 'hw_getobjectbyqueryobj', 'hw_getparents', + 'hw_getparentsobj', 'hw_getrellink', 'hw_getremote', + 'hw_getremotechildren', 'hw_getsrcbydestobj', 'hw_gettext', + 'hw_getusername', 'hw_identify', 'hw_incollections', 'hw_info', + 'hw_inscoll', 'hw_insdoc', 'hw_insertanchors', 'hw_insertdocument', + 'hw_insertobject', 'hw_mapid', 'hw_modifyobject', 'hw_mv', + 'hw_new_document', 'hw_objrec2array', 'hw_output_document', 'hw_pconnect', + 'hw_pipedocument', 'hw_root', 'hw_setlinkroot', 'hw_stat', 'hw_unlock', + 'hw_who', 'hypot', 'i', 'ibase_blob_add', 'ibase_blob_cancel', + 'ibase_blob_close', 'ibase_blob_create', 'ibase_blob_echo', + 'ibase_blob_get', 'ibase_blob_import', 'ibase_blob_info', + 'ibase_blob_open', 'ibase_close', 'ibase_commit', 'ibase_connect', + 'ibase_errmsg', 'ibase_execute', 'ibase_fetch_object', 'ibase_fetch_row', + 'ibase_field_info', 'ibase_free_query', 'ibase_free_result', + 'ibase_num_fields', 'ibase_pconnect', 'ibase_prepare', 'ibase_query', + 'ibase_rollback', 'ibase_timefmt', 'ibase_trans', 'icap_close', + 'icap_create_calendar', 'icap_delete_calendar', 'icap_delete_event', + 'icap_fetch_event', 'icap_list_alarms', 'icap_list_events', 'icap_open', + 'icap_rename_calendar', 'icap_reopen', 'icap_snooze', 'icap_store_event', + 'iconv', 'iconv_get_encoding', 'iconv_set_encoding', 'ifx_affected_rows', + 'ifx_blobinfile_mode', 'ifx_byteasvarchar', 'ifx_close', 'ifx_connect', + 'ifx_copy_blob', 'ifx_create_blob', 'ifx_create_char', 'ifx_do', + 'ifx_error', 'ifx_errormsg', 'ifx_fetch_row', 'ifx_fieldproperties', + 'ifx_fieldtypes', 'ifx_free_blob', 'ifx_free_char', 'ifx_free_result', + 'ifx_get_blob', 'ifx_get_char', 'ifx_getsqlca', 'ifx_htmltbl_result', + 'ifx_nullformat', 'ifx_num_fields', 'ifx_num_rows', 'ifx_pconnect', + 'ifx_prepare', 'ifx_query', 'ifx_textasvarchar', 'ifx_update_blob', + 'ifx_update_char', 'ifxus_close_slob', 'ifxus_create_slob', + 'ifxus_free_slob', 'ifxus_open_slob', 'ifxus_read_slob', + 'ifxus_seek_slob', 'ifxus_tell_slob', 'ifxus_write_slob', + 'ignore_user_abort', 'image2wbmp', 'imagealphablending', 'imageantialias', + 'imagearc', 'imagechar', 'imagecharup', 'imagecolorallocate', + 'imagecolorat', 'imagecolorclosest', 'imagecolorclosestalpha', + 'imagecolorclosesthwb', 'imagecolordeallocate', 'imagecolorexact', + 'imagecolorexactalpha', 'imagecolorresolve', 'imagecolorresolvealpha', + 'imagecolorset', 'imagecolorsforindex', 'imagecolorstotal', + 'imagecolortransparent', 'imagecopy', 'imagecopymerge', + 'imagecopymergegray', 'imagecopyresampled', 'imagecopyresized', + 'imagecreate', 'imagecreatefromgd', 'imagecreatefromgd2', + 'imagecreatefromgd2part', 'imagecreatefromgif', 'imagecreatefromjpeg', + 'imagecreatefrompng', 'imagecreatefromstring', 'imagecreatefromwbmp', + 'imagecreatefromxbm', 'imagecreatefromxpm', 'imagecreatetruecolor', + 'imagedashedline', 'imagedestroy', 'imageellipse', 'imagefill', + 'imagefilledarc', 'imagefilledellipse', 'imagefilledpolygon', + 'imagefilledrectangle', 'imagefilltoborder', 'imagefontheight', + 'imagefontwidth', 'imageftbbox', 'imagefttext', 'imagegammacorrect', + 'imagegd', 'imagegd2', 'imagegif', 'imageinterlace', 'imagejpeg', + 'imageline', 'imageloadfont', 'imagepalettecopy', 'imagepng', + 'imagepolygon', 'imagepsbbox', 'imagepsencodefont', 'imagepsextendfont', + 'imagepsfreefont', 'imagepsloadfont', 'imagepsslantfont', 'imagepstext', + 'imagerectangle', 'imagesetbrush', 'imagesetpixel', 'imagesetstyle', + 'imagesetthickness', 'imagesettile', 'imagestring', 'imagestringup', + 'imagesx', 'imagesy', 'imagetruecolortopalette', 'imagettfbbox', + 'imagettftext', 'imagetypes', 'imagewbmp', 'imap_8bit', 'imap_append', + 'imap_base64', 'imap_binary', 'imap_body', 'imap_bodystruct', + 'imap_check', 'imap_clearflag_full', 'imap_close', 'imap_createmailbox', + 'imap_delete', 'imap_deletemailbox', 'imap_errors', 'imap_expunge', + 'imap_fetch_overview', 'imap_fetchbody', 'imap_fetchheader', + 'imap_fetchstructure', 'imap_get_quota', 'imap_getmailboxes', + 'imap_getsubscribed', 'imap_header', 'imap_headerinfo', 'imap_headers', + 'imap_last_error', 'imap_listmailbox', 'imap_listsubscribed', 'imap_mail', + 'imap_mail_compose', 'imap_mail_copy', 'imap_mail_move', + 'imap_mailboxmsginfo', 'imap_mime_header_decode', 'imap_msgno', + 'imap_num_msg', 'imap_num_recent', 'imap_open', 'imap_ping', 'imap_popen', + 'imap_qprint', 'imap_renamemailbox', 'imap_reopen', + 'imap_rfc822_parse_adrlist', 'imap_rfc822_parse_headers', + 'imap_rfc822_write_address', 'imap_scanmailbox', 'imap_search', + 'imap_set_quota', 'imap_setacl', 'imap_setflag_full', 'imap_sort', + 'imap_status', 'imap_subscribe', 'imap_thread', 'imap_uid', + 'imap_undelete', 'imap_unsubscribe', 'imap_utf7_decode', + 'imap_utf7_encode', 'imap_utf8', 'implode', 'import_request_variables', + 'in_array', 'include', 'include_once', 'ingres_autocommit', + 'ingres_close', 'ingres_commit', 'ingres_connect', 'ingres_fetch_array', + 'ingres_fetch_object', 'ingres_fetch_row', 'ingres_field_length', + 'ingres_field_name', 'ingres_field_nullable', 'ingres_field_precision', + 'ingres_field_scale', 'ingres_field_type', 'ingres_num_fields', + 'ingres_num_rows', 'ingres_pconnect', 'ingres_query', 'ingres_rollback', + 'ini_alter', 'ini_get', 'ini_get_all', 'ini_restore', 'ini_set', 'intval', + 'ip2long', 'iptcembed', 'iptcparse', 'ircg_channel_mode', + 'ircg_disconnect', 'ircg_fetch_error_msg', 'ircg_get_username', + 'ircg_html_encode', 'ircg_ignore_add', 'ircg_ignore_del', + 'ircg_is_conn_alive', 'ircg_join', 'ircg_kick', + 'ircg_lookup_format_messages', 'ircg_msg', 'ircg_nick', + 'ircg_nickname_escape', 'ircg_nickname_unescape', 'ircg_notice', + 'ircg_part', 'ircg_pconnect', 'ircg_register_format_messages', + 'ircg_set_current', 'ircg_set_file', 'ircg_topic', 'ircg_whois', 'is_a', + 'is_array', 'is_bool', 'is_callable', 'is_dir', 'is_double', + 'is_executable', 'is_file', 'is_finite', 'is_float', 'is_infinite', + 'is_int', 'is_integer', 'is_link', 'is_long', 'is_nan', 'is_null', + 'is_numeric', 'is_object', 'is_readable', 'is_real', 'is_resource', + 'is_scalar', 'is_string', 'is_subclass_of', 'is_uploaded_file', + 'is_writable', 'is_writeable', 'isset', 'java_last_exception_clear', + 'java_last_exception_get', 'jddayofweek', 'jdmonthname', 'jdtofrench', + 'jdtogregorian', 'jdtojewish', 'jdtojulian', 'jdtounix', 'jewishtojd', + 'join', 'jpeg2wbmp', 'juliantojd', 'key', 'krsort', 'ksort', 'lcg_value', + 'ldap_8859_to_t61', 'ldap_add', 'ldap_bind', 'ldap_close', 'ldap_compare', + 'ldap_connect', 'ldap_count_entries', 'ldap_delete', 'ldap_dn2ufn', + 'ldap_err2str', 'ldap_errno', 'ldap_error', 'ldap_explode_dn', + 'ldap_first_attribute', 'ldap_first_entry', 'ldap_first_reference', + 'ldap_free_result', 'ldap_get_attributes', 'ldap_get_dn', + 'ldap_get_entries', 'ldap_get_option', 'ldap_get_values', + 'ldap_get_values_len', 'ldap_list', 'ldap_mod_add', 'ldap_mod_del', + 'ldap_mod_replace', 'ldap_modify', 'ldap_next_attribute', + 'ldap_next_entry', 'ldap_next_reference', 'ldap_parse_reference', + 'ldap_parse_result', 'ldap_read', 'ldap_rename', 'ldap_search', + 'ldap_set_option', 'ldap_set_rebind_proc', 'ldap_sort', 'ldap_start_tls', + 'ldap_t61_to_8859', 'ldap_unbind', 'leak', 'levenshtein', 'link', + 'linkinfo', 'list', 'localeconv', 'localtime', 'log', 'log10', 'log1p', + 'long2ip', 'lstat', 'ltrim', 'mail', + 'mailparse_determine_best_xfer_encoding', 'mailparse_msg_create', + 'mailparse_msg_extract_part', 'mailparse_msg_extract_part_file', + 'mailparse_msg_free', 'mailparse_msg_get_part', + 'mailparse_msg_get_part_data', 'mailparse_msg_get_structure', + 'mailparse_msg_parse', 'mailparse_msg_parse_file', + 'mailparse_rfc822_parse_addresses', 'mailparse_stream_encode', + 'mailparse_uudecode_all', 'max', 'mb_c', 'mb_convert_kana', + 'mb_convert_variables', 'mb_decode_mimeheader', 'mb_decode_numericentity', + 'mb_detect_encoding', 'mb_detect_order', 'mb_encode_mimeheader', + 'mb_encode_numericentity', 'mb_ereg', 'mb_ereg_match', 'mb_ereg_replace', + 'mb_ereg_search', 'mb_ereg_search_getpos', 'mb_ereg_search_getregs', + 'mb_ereg_search_init', 'mb_ereg_search_pos', 'mb_ereg_search_regs', + 'mb_ereg_search_setpos', 'mb_eregi', 'mb_eregi_replace', 'mb_get_info', + 'mb_http_input', 'mb_http_output', 'mb_internal_encoding', 'mb_language', + 'mb_output_handler', 'mb_parse_str', 'mb_preferred_mime_name', + 'mb_regex_encoding', 'mb_send_mail', 'mb_split', 'mb_strcut', + 'mb_strimwidth', 'mb_strlen', 'mb_strpos', 'mb_strrpos', 'mb_strwidth', + 'mb_substitute_character', 'mb_substr', 'mcal_append_event', 'mcal_close', + 'mcal_create_calendar', 'mcal_date_compare', 'mcal_date_valid', + 'mcal_day_of_week', 'mcal_day_of_year', 'mcal_days_in_month', + 'mcal_delete_calendar', 'mcal_delete_event', 'mcal_event_add_attribute', + 'mcal_event_init', 'mcal_event_set_alarm', 'mcal_event_set_category', + 'mcal_event_set_class', 'mcal_event_set_description', + 'mcal_event_set_end', 'mcal_event_set_recur_daily', + 'mcal_event_set_recur_monthly_mday', 'mcal_event_set_recur_monthly_wday', + 'mcal_event_set_recur_none', 'mcal_event_set_recur_weekly', + 'mcal_event_set_recur_yearly', 'mcal_event_set_start', + 'mcal_event_set_title', 'mcal_expunge', 'mcal_fetch_current_stream_event', + 'mcal_fetch_event', 'mcal_is_leap_year', 'mcal_list_alarms', + 'mcal_list_events', 'mcal_next_recurrence', 'mcal_open', 'mcal_popen', + 'mcal_rename_calendar', 'mcal_reopen', 'mcal_snooze', 'mcal_store_event', + 'mcal_time_valid', 'mcal_week_of_year', 'mcrypt_cbc', 'mcrypt_cfb', + 'mcrypt_create_iv', 'mcrypt_decrypt', 'mcrypt_ecb', + 'mcrypt_enc_get_algorithms_name', 'mcrypt_enc_get_block_size', + 'mcrypt_enc_get_iv_size', 'mcrypt_enc_get_key_size', + 'mcrypt_enc_get_modes_name', 'mcrypt_enc_get_supported_key_sizes', + 'mcrypt_enc_is_block_algorithm', 'mcrypt_enc_is_block_algorithm_mode', + 'mcrypt_enc_is_block_mode', 'mcrypt_enc_self_test', 'mcrypt_encrypt', + 'mcrypt_generic', 'mcrypt_generic_deinit', 'mcrypt_generic_end', + 'mcrypt_generic_init', 'mcrypt_get_block_size', 'mcrypt_get_cipher_name', + 'mcrypt_get_iv_size', 'mcrypt_get_key_size', 'mcrypt_list_algorithms', + 'mcrypt_list_modes', 'mcrypt_module_close', + 'mcrypt_module_get_algo_block_size', 'mcrypt_module_get_algo_key_size', + 'mcrypt_module_get_supported_key_sizes', + 'mcrypt_module_is_block_algorithm', + 'mcrypt_module_is_block_algorithm_mode', 'mcrypt_module_is_block_mode', + 'mcrypt_module_open', 'mcrypt_module_self_test', 'mcrypt_ofb', 'md5', + 'md5_file', 'mdecrypt_generic', 'metaphone', 'method_exists', 'mhash', + 'mhash_count', 'mhash_get_block_size', 'mhash_get_hash_name', + 'mhash_keygen_s2k', 'microtime', 'min', 'ming_setcubicthreshold', + 'ming_setscale', 'ming_useswfversion', 'mkdir', 'mktime', + 'move_uploaded_file', 'msession_connect', 'msession_count', + 'msession_create', 'msession_destroy', 'msession_disconnect', + 'msession_find', 'msession_get', 'msession_get_array', 'msession_getdata', + 'msession_inc', 'msession_list', 'msession_listvar', 'msession_lock', + 'msession_plugin', 'msession_randstr', 'msession_set', + 'msession_set_array', 'msession_setdata', 'msession_timeout', + 'msession_uniq', 'msession_unlock', 'msql', 'msql_affected_rows', + 'msql_close', 'msql_connect', 'msql_create_db', 'msql_createdb', + 'msql_data_seek', 'msql_dbname', 'msql_drop_db', 'msql_dropdb', + 'msql_error', 'msql_fetch_array', 'msql_fetch_field', 'msql_fetch_object', + 'msql_fetch_row', 'msql_field_seek', 'msql_fieldflags', 'msql_fieldlen', + 'msql_fieldname', 'msql_fieldtable', 'msql_fieldtype', 'msql_free_result', + 'msql_freeresult', 'msql_list_dbs', 'msql_list_fields', 'msql_list_tables', + 'msql_listdbs', 'msql_listfields', 'msql_listtables', 'msql_num_fields', + 'msql_num_rows', 'msql_numfields', 'msql_numrows', 'msql_pconnect', + 'msql_query', 'msql_regcase', 'msql_result', 'msql_select_db', + 'msql_selectdb', 'msql_tablename', 'mssql_bind', 'mssql_close', + 'mssql_connect', 'mssql_data_seek', 'mssql_execute', 'mssql_fetch_array', + 'mssql_fetch_assoc', 'mssql_fetch_batch', 'mssql_fetch_field', + 'mssql_fetch_object', 'mssql_fetch_row', 'mssql_field_length', + 'mssql_field_name', 'mssql_field_seek', 'mssql_field_type', + 'mssql_free_result', 'mssql_get_last_message', 'mssql_guid_string', + 'mssql_init', 'mssql_min_error_severity', 'mssql_min_message_severity', + 'mssql_next_result', 'mssql_num_fields', 'mssql_num_rows', + 'mssql_pconnect', 'mssql_query', 'mssql_result', 'mssql_rows_affected', + 'mssql_select_db', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'muscat_close', + 'muscat_get', 'muscat_give', 'muscat_setup', 'muscat_setup_net', + 'mysql_affected_rows', 'mysql_change_user', 'mysql_character_set_name', + 'mysql_close', 'mysql_connect', 'mysql_create_db', 'mysql_data_seek', + 'mysql_db_name', 'mysql_db_query', 'mysql_drop_db', 'mysql_errno', + 'mysql_error', 'mysql_escape_string', 'mysql_fetch_array', + 'mysql_fetch_assoc', 'mysql_fetch_field', 'mysql_fetch_lengths', + 'mysql_fetch_object', 'mysql_fetch_row', 'mysql_field_flags', + 'mysql_field_len', 'mysql_field_name', 'mysql_field_seek', + 'mysql_field_table', 'mysql_field_type', 'mysql_free_result', + 'mysql_get_client_info', 'mysql_get_host_info', 'mysql_get_proto_info', + 'mysql_get_server_info', 'mysql_info', 'mysql_insert_id', + 'mysql_list_dbs', 'mysql_list_fields', 'mysql_list_processes', + 'mysql_list_tables', 'mysql_num_fields', 'mysql_num_rows', + 'mysql_pconnect', 'mysql_ping', 'mysql_query', 'mysql_real_escape_string', + 'mysql_result', 'mysql_select_db', 'mysql_stat', 'mysql_tablename', + 'mysql_thread_id', 'mysql_unbuffered_query', 'natcasesort', 'natsort', + 'ncur', 'ncurses_addch', 'ncurses_addchnstr', 'ncurses_addchstr', + 'ncurses_addnstr', 'ncurses_addstr', 'ncurses_assume_default_colors', + 'ncurses_attroff', 'ncurses_attron', 'ncurses_attrset', + 'ncurses_baudrate', 'ncurses_beep', 'ncurses_bkgd', 'ncurses_bkgdset', + 'ncurses_border', 'ncurses_can_change_color', 'ncurses_cbreak', + 'ncurses_clear', 'ncurses_clrtobot', 'ncurses_clrtoeol', + 'ncurses_color_set', 'ncurses_curs_set', 'ncurses_def_prog_mode', + 'ncurses_def_shell_mode', 'ncurses_define_key', 'ncurses_delay_output', + 'ncurses_delch', 'ncurses_deleteln', 'ncurses_delwin', 'ncurses_doupdate', + 'ncurses_echo', 'ncurses_echochar', 'ncurses_end', 'ncurses_erase', + 'ncurses_erasechar', 'ncurses_filter', 'ncurses_flash', + 'ncurses_flushinp', 'ncurses_getch', 'ncurses_getmouse', + 'ncurses_halfdelay', 'ncurses_has_ic', 'ncurses_has_il', + 'ncurses_has_key', 'ncurses_hline', 'ncurses_inch', 'ncurses_init', + 'ncurses_init_color', 'ncurses_init_pair', 'ncurses_insch', + 'ncurses_insdelln', 'ncurses_insertln', 'ncurses_insstr', 'ncurses_instr', + 'ncurses_isendwin', 'ncurses_keyok', 'ncurses_killchar', + 'ncurses_longname', 'ncurses_mouseinterval', 'ncurses_mousemask', + 'ncurses_move', 'ncurses_mvaddch', 'ncurses_mvaddchnstr', + 'ncurses_mvaddchstr', 'ncurses_mvaddnstr', 'ncurses_mvaddstr', + 'ncurses_mvcur', 'ncurses_mvdelch', 'ncurses_mvgetch', 'ncurses_mvhline', + 'ncurses_mvinch', 'ncurses_mvvline', 'ncurses_mvwaddstr', 'ncurses_napms', + 'ncurses_newwin', 'ncurses_nl', 'ncurses_nocbreak', 'ncurses_noecho', + 'ncurses_nonl', 'ncurses_noqiflush', 'ncurses_noraw', 'ncurses_putp', + 'ncurses_qiflush', 'ncurses_raw', 'ncurses_refresh', 'ncurses_resetty', + 'ncurses_savetty', 'ncurses_scr_dump', 'ncurses_scr_init', + 'ncurses_scr_restore', 'ncurses_scr_set', 'ncurses_scrl', + 'ncurses_slk_attr', 'ncurses_slk_attroff', 'ncurses_slk_attron', + 'ncurses_slk_attrset', 'ncurses_slk_clear', 'ncurses_slk_color', + 'ncurses_slk_init', 'ncurses_slk_noutrefresh', 'ncurses_slk_refresh', + 'ncurses_slk_restore', 'ncurses_slk_touch', 'ncurses_standend', + 'ncurses_standout', 'ncurses_start_color', 'ncurses_termattrs', + 'ncurses_termname', 'ncurses_timeout', 'ncurses_typeahead', + 'ncurses_ungetch', 'ncurses_ungetmouse', 'ncurses_use_default_colors', + 'ncurses_use_env', 'ncurses_use_extended_names', 'ncurses_vidattr', + 'ncurses_vline', 'ncurses_wrefresh', 'next', 'ngettext', 'nl2br', + 'nl_langinfo', 'notes_body', 'notes_copy_db', 'notes_create_db', + 'notes_create_note', 'notes_drop_db', 'notes_find_note', + 'notes_header_info', 'notes_list_msgs', 'notes_mark_read', + 'notes_mark_unread', 'notes_nav_create', 'notes_search', 'notes_unread', + 'notes_version', 'number_format', 'ob_clean', 'ob_end_clean', + 'ob_end_flush', 'ob_flush', 'ob_get_contents', 'ob_get_length', + 'ob_get_level', 'ob_gzhandler', 'ob_iconv_handler', 'ob_implicit_flush', + 'ob_start', 'ocibindbyname', 'ocicancel', 'ocicollappend', + 'ocicollassign', 'ocicollassignelem', 'ocicollgetelem', 'ocicollmax', + 'ocicollsize', 'ocicolltrim', 'ocicolumnisnull', 'ocicolumnname', + 'ocicolumnprecision', 'ocicolumnscale', 'ocicolumnsize', 'ocicolumntype', + 'ocicolumntyperaw', 'ocicommit', 'ocidefinebyname', 'ocierror', + 'ociexecute', 'ocifetch', 'ocifetchinto', 'ocifetchstatement', + 'ocifreecollection', 'ocifreecursor', 'ocifreedesc', 'ocifreestatement', + 'ociinternaldebug', 'ociloadlob', 'ocilogoff', 'ocilogon', + 'ocinewcollection', 'ocinewcursor', 'ocinewdescriptor', 'ocinlogon', + 'ocinumcols', 'ociparse', 'ociplogon', 'ociresult', 'ocirollback', + 'ocirowcount', 'ocisavelob', 'ocisavelobfile', 'ociserverversion', + 'ocisetprefetch', 'ocistatementtype', 'ociwritelobtofile', 'octdec', + 'odbc_autocommit', 'odbc_binmode', 'odbc_close', 'odbc_close_all', + 'odbc_columnprivileges', 'odbc_columns', 'odbc_commit', 'odbc_connect', + 'odbc_cursor', 'odbc_do', 'odbc_error', 'odbc_errormsg', 'odbc_exec', + 'odbc_execute', 'odbc_fetch_array', 'odbc_fetch_into', + 'odbc_fetch_object', 'odbc_fetch_row', 'odbc_field_len', + 'odbc_field_name', 'odbc_field_num', 'odbc_field_precision', + 'odbc_field_scale', 'odbc_field_type', 'odbc_foreignkeys', + 'odbc_free_result', 'odbc_gettypeinfo', 'odbc_longreadlen', + 'odbc_next_result', 'odbc_num_fields', 'odbc_num_rows', 'odbc_pconnect', + 'odbc_prepare', 'odbc_primarykeys', 'odbc_procedurecolumns', + 'odbc_procedures', 'odbc_result', 'odbc_result_all', 'odbc_rollback', + 'odbc_setoption', 'odbc_specialcolumns', 'odbc_statistics', + 'odbc_tableprivileges', 'odbc_tables', 'opendir', 'openlog', + 'openssl_csr_export', 'openssl_csr_export_to_file', 'openssl_csr_new', + 'openssl_csr_sign', 'openssl_error_string', 'openssl_free_key', + 'openssl_get_privatekey', 'openssl_get_publickey', 'openssl_open', + 'openssl_pkcs7_decrypt', 'openssl_pkcs7_encrypt', 'openssl_pkcs7_sign', + 'openssl_pkcs7_verify', 'openssl_pkey_export', + 'openssl_pkey_export_to_file', 'openssl_pkey_new', + 'openssl_private_decrypt', 'openssl_private_encrypt', + 'openssl_public_decrypt', 'openssl_public_encrypt', 'openssl_seal', + 'openssl_sign', 'openssl_verify', 'openssl_x509_check_private_key', + 'openssl_x509_checkpurpose', 'openssl_x509_export', + 'openssl_x509_export_to_file', 'openssl_x509_free', 'openssl_x509_parse', + 'openssl_x509_read', 'ora_bind', 'ora_close', 'ora_columnname', + 'ora_columnsize', 'ora_columntype', 'ora_commit', 'ora_commitoff', + 'ora_commiton', 'ora_do', 'ora_error', 'ora_errorcode', 'ora_exec', + 'ora_fetch', 'ora_fetch_into', 'ora_getcolumn', 'ora_logoff', 'ora_logon', + 'ora_numcols', 'ora_numrows', 'ora_open', 'ora_parse', 'ora_plogon', + 'ora_rollback', 'ord', 'overload', 'ovrimos_close', 'ovrimos_commit', + 'ovrimos_connect', 'ovrimos_cursor', 'ovrimos_exec', 'ovrimos_execute', + 'ovrimos_fetch_into', 'ovrimos_fetch_row', 'ovrimos_field_len', + 'ovrimos_field_name', 'ovrimos_field_num', 'ovrimos_field_type', + 'ovrimos_free_result', 'ovrimos_longreadlen', 'ovrimos_num_fields', + 'ovrimos_num_rows', 'ovrimos_prepare', 'ovrimos_result', + 'ovrimos_result_all', 'ovrimos_rollback', 'pack', 'parse_ini_file', + 'parse_str', 'parse_url', 'passthru', 'pathinfo', 'pclose', 'pcntl_exec', + 'pcntl_fork', 'pcntl_signal', 'pcntl_waitpid', 'pcntl_wexitstatus', + 'pcntl_wifexited', 'pcntl_wifsignaled', 'pcntl_wifstopped', + 'pcntl_wstopsig', 'pcntl_wtermsig', 'pdf_add_annotation', + 'pdf_add_bookmark', 'pdf_add_launchlink', 'pdf_add_locallink', + 'pdf_add_note', 'pdf_add_outline', 'pdf_add_pdflink', 'pdf_add_thumbnail', + 'pdf_add_weblink', 'pdf_arc', 'pdf_arcn', 'pdf_attach_file', + 'pdf_begin_page', 'pdf_begin_pattern', 'pdf_begin_template', 'pdf_circle', + 'pdf_clip', 'pdf_close', 'pdf_close_image', 'pdf_close_pdi', + 'pdf_close_pdi_page', 'pdf_closepath', 'pdf_closepath_fill_stroke', + 'pdf_closepath_stroke', 'pdf_concat', 'pdf_continue_text', 'pdf_curveto', + 'pdf_delete', 'pdf_end_page', 'pdf_end_pattern', 'pdf_end_template', + 'pdf_endpath', 'pdf_fill', 'pdf_fill_stroke', 'pdf_findfont', + 'pdf_get_buffer', 'pdf_get_font', 'pdf_get_fontname', 'pdf_get_fontsize', + 'pdf_get_image_height', 'pdf_get_image_width', 'pdf_get_majorversion', + 'pdf_get_minorversion', 'pdf_get_parameter', 'pdf_get_pdi_value', + 'pdf_get_value', 'pdf_initgraphics', 'pdf_lineto', 'pdf_makespotcolor', + 'pdf_moveto', 'pdf_new', 'pdf_open', 'pdf_open_ccitt', 'pdf_open_file', + 'pdf_open_gif', 'pdf_open_image', 'pdf_open_image_file', 'pdf_open_jpeg', + 'pdf_open_memory_image', 'pdf_open_pdi', 'pdf_open_pdi_page', + 'pdf_open_png', 'pdf_open_tiff', 'pdf_place_image', 'pdf_place_pdi_page', + 'pdf_rect', 'pdf_restore', 'pdf_rotate', 'pdf_save', 'pdf_scale', + 'pdf_set_border_color', 'pdf_set_border_dash', 'pdf_set_border_style', + 'pdf_set_char_spacing', 'pdf_set_duration', 'pdf_set_font', + 'pdf_set_horiz_scaling', 'pdf_set_info', 'pdf_set_info_author', + 'pdf_set_info_creator', 'pdf_set_info_keywords', 'pdf_set_info_subject', + 'pdf_set_info_title', 'pdf_set_leading', 'pdf_set_parameter', + 'pdf_set_text_pos', 'pdf_set_text_rendering', 'pdf_set_text_rise', + 'pdf_set_transition', 'pdf_set_value', 'pdf_set_word_spacing', + 'pdf_setcolor', 'pdf_setdash', 'pdf_setflat', 'pdf_setfont', + 'pdf_setgray', 'pdf_setgray_fill', 'pdf_setgray_stroke', 'pdf_setlinecap', + 'pdf_setlinejoin', 'pdf_setlinewidth', 'pdf_setmatrix', + 'pdf_setmiterlimit', 'pdf_setpolydash', 'pdf_setrgbcolor', + 'pdf_setrgbcolor_fill', 'pdf_setrgbcolor_stroke', 'pdf_show', + 'pdf_show_boxed', 'pdf_show_xy', 'pdf_skew', 'pdf_stringwidth', + 'pdf_stroke', 'pdf_translate', 'pfpro_cleanup', 'pfpro_init', + 'pfpro_process', 'pfpro_process_raw', 'pfpro_version', 'pfsockopen', + 'pg_affected_rows', 'pg_cancel_query', 'pg_client_encoding', 'pg_close', + 'pg_connect', 'pg_connection_busy', 'pg_connection_reset', + 'pg_connection_status', 'pg_copy_from', 'pg_copy_to', 'pg_dbname', + 'pg_end_copy', 'pg_escape_bytea', 'pg_escape_string', 'pg_fetch_array', + 'pg_fetch_object', 'pg_fetch_result', 'pg_fetch_row', 'pg_field_is_null', + 'pg_field_name', 'pg_field_num', 'pg_field_prtlen', 'pg_field_size', + 'pg_field_type', 'pg_free_result', 'pg_get_result', 'pg_host', + 'pg_last_error', 'pg_last_notice', 'pg_last_oid', 'pg_lo_close', + 'pg_lo_create', 'pg_lo_export', 'pg_lo_import', 'pg_lo_open', + 'pg_lo_read', 'pg_lo_seek', 'pg_lo_tell', 'pg_lo_unlink', 'pg_lo_write', + 'pg_num_fields', 'pg_num_rows', 'pg_options', 'pg_pconnect', 'pg_port', + 'pg_put_line', 'pg_query', 'pg_result_error', 'pg_result_status', + 'pg_send_query', 'pg_set_client_encoding', 'pg_trace', 'pg_tty', + 'pg_untrace', 'php_logo_guid', 'php_sapi_name', 'php_uname', 'phpcredits', + 'phpinfo', 'phpversion', 'pi', 'png2wbmp', 'popen', 'pos', 'posix_ctermid', + 'posix_getcwd', 'posix_getegid', 'posix_geteuid', 'posix_getgid', + 'posix_getgrgid', 'posix_getgrnam', 'posix_getgroups', 'posix_getlogin', + 'posix_getpgid', 'posix_getpgrp', 'posix_getpid', 'posix_getppid', + 'posix_getpwnam', 'posix_getpwuid', 'posix_getrlimit', 'posix_getsid', + 'posix_getuid', 'posix_isatty', 'posix_kill', 'posix_mkfifo', + 'posix_setegid', 'posix_seteuid', 'posix_setgid', 'posix_setpgid', + 'posix_setsid', 'posix_setuid', 'posix_times', 'posix_ttyname', + 'posix_uname', 'pow', 'preg_grep', 'preg_match', 'preg_match_all', + 'preg_quote', 'preg_replace', 'preg_replace_callback', 'preg_split', + 'prev', 'print', 'print_r', 'printer_abort', 'printer_close', + 'printer_create_brush', 'printer_create_dc', 'printer_create_font', + 'printer_create_pen', 'printer_delete_brush', 'printer_delete_dc', + 'printer_delete_font', 'printer_delete_pen', 'printer_draw_bmp', + 'printer_draw_chord', 'printer_draw_elipse', 'printer_draw_line', + 'printer_draw_pie', 'printer_draw_rectangle', 'printer_draw_roundrect', + 'printer_draw_text', 'printer_end_doc', 'printer_end_page', + 'printer_get_option', 'printer_list', 'printer_logical_fontheight', + 'printer_open', 'printer_select_brush', 'printer_select_font', + 'printer_select_pen', 'printer_set_option', 'printer_start_doc', + 'printer_start_page', 'printer_write', 'printf', 'pspell_add_to_personal', + 'pspell_add_to_session', 'pspell_check', 'pspell_clear_session', + 'pspell_config_create', 'pspell_config_ignore', 'pspell_config_mode', + 'pspell_config_personal', 'pspell_config_repl', + 'pspell_config_runtogether', 'pspell_config_save_repl', 'pspell_new', + 'pspell_new_config', 'pspell_new_personal', 'pspell_save_wordlist', + 'pspell_store_replacement', 'pspell_suggest', 'putenv', 'qdom_error', + 'qdom_tree', 'quoted_printable_decode', 'quotemeta', 'rad2deg', 'rand', + 'range', 'rawurldecode', 'rawurlencode', 'read_exif_data', 'readdir', + 'readfile', 'readgzfile', 'readline', 'readline_add_history', + 'readline_clear_history', 'readline_completion_function', 'readline_info', + 'readline_list_history', 'readline_read_history', 'readline_write_history', + 'readlink', 'realpath', 'recode', 'recode_file', 'recode_string', + 'register_shutdown_function', 'register_tick_function', 'rename', + 'require', 'require_once', 'reset', 'restore_error_handler', + 'restore_include_path', 'rewind', 'rewinddir', 'rmdir', 'round', 'rsort', + 'rtrim', 'sem_acquire', 'sem_get', 'sem_release', 'sem_remove', + 'serialize', 'sesam_affected_rows', 'sesam_commit', 'sesam_connect', + 'sesam_diagnostic', 'sesam_disconnect', 'sesam_errormsg', 'sesam_execimm', + 'sesam_fetch_array', 'sesam_fetch_result', 'sesam_fetch_row', + 'sesam_field_array', 'sesam_field_name', 'sesam_free_result', + 'sesam_num_fields', 'sesam_query', 'sesam_rollback', 'sesam_seek_row', + 'sesam_settransaction', 'session_cache_expire', 'session_cache_limiter', + 'session_decode', 'session_destroy', 'session_encode', + 'session_get_cookie_params', 'session_id', 'session_is_registered', + 'session_module_name', 'session_name', 'session_register', + 'session_save_path', 'session_set_cookie_params', + 'session_set_save_handler', 'session_start', 'session_unregister', + 'session_unset', 'session_write_close', 'set_error_handler', + 'set_file_buffer', 'set_include_path', 'set_magic_quotes_runtime', + 'set_time_limit', 'setcookie', 'setlocale', 'settype', 'shell_exec', + 'shm_attach', 'shm_detach', 'shm_get_var', 'shm_put_var', 'shm_remove', + 'shm_remove_var', 'shmop_close', 'shmop_delete', 'shmop_open', + 'shmop_read', 'shmop_size', 'shmop_write', 'show_source', 'shuffle', + 'similar_text', 'sin', 'sinh', 'sizeof', 'sleep', 'snmp_get_quick_print', + 'snmp_set_quick_print', 'snmpget', 'snmprealwalk', 'snmpset', 'snmpwalk', + 'snmpwalkoid', 'socket_accept', 'socket_bind', 'socket_close', + 'socket_connect', 'socket_create', 'socket_create_listen', + 'socket_create_pair', 'socket_fd_alloc', 'socket_fd_clear', + 'socket_fd_free', 'socket_fd_isset', 'socket_fd_set', 'socket_fd_zero', + 'socket_get_status', 'socket_getopt', 'socket_getpeername', + 'socket_getsockname', 'socket_iovec_add', 'socket_iovec_alloc', + 'socket_iovec_delete', 'socket_iovec_fetch', 'socket_iovec_free', + 'socket_iovec_set', 'socket_last_error', 'socket_listen', 'socket_read', + 'socket_readv', 'socket_recv', 'socket_recvfrom', 'socket_recvmsg', + 'socket_select', 'socket_send', 'socket_sendmsg', 'socket_sendto', + 'socket_set_blocking', 'socket_set_nonblock', 'socket_set_timeout', + 'socket_setopt', 'socket_shutdown', 'socket_strerror', 'socket_write', + 'socket_writev', 'sort', 'soundex', 'split', 'spliti', 'sprintf', + 'sql_regcase', 'sqrt', 'srand', 'sscanf', 'stat', 'str_pad', 'str_repeat', + 'str_replace', 'str_rot13', 'strcasecmp', 'strchr', 'strcmp', 'strcoll', + 'strcspn', 'strftime', 'strip_tags', 'stripcslashes', 'stripslashes', + 'stristr', 'strlen', 'strnatcasecmp', 'strnatcmp', 'strncasecmp', + 'strncmp', 'strpos', 'strrchr', 'strrev', 'strrpos', 'strspn', 'strstr', + 'strtok', 'strtolower', 'strtotime', 'strtoupper', 'strtr', 'strval', + 'substr', 'substr_count', 'substr_replace', 'swf_actiongeturl', + 'swf_actiongotoframe', 'swf_actiongotolabel', 'swf_actionnextframe', + 'swf_actionplay', 'swf_actionprevframe', 'swf_actionsettarget', + 'swf_actionstop', 'swf_actiontogglequality', 'swf_actionwaitforframe', + 'swf_addbuttonrecord', 'swf_addcolor', 'swf_closefile', + 'swf_definebitmap', 'swf_definefont', 'swf_defineline', 'swf_definepoly', + 'swf_definerect', 'swf_definetext', 'swf_endbutton', 'swf_enddoaction', + 'swf_endshape', 'swf_endsymbol', 'swf_fontsize', 'swf_fontslant', + 'swf_fonttracking', 'swf_getbitmapinfo', 'swf_getfontinfo', + 'swf_getframe', 'swf_labelframe', 'swf_lookat', 'swf_modifyobject', + 'swf_mulcolor', 'swf_nextid', 'swf_oncondition', 'swf_openfile', + 'swf_ortho', 'swf_ortho2', 'swf_perspective', 'swf_placeobject', + 'swf_polarview', 'swf_popmatrix', 'swf_posround', 'swf_pushmatrix', + 'swf_removeobject', 'swf_rotate', 'swf_scale', 'swf_setfont', + 'swf_setframe', 'swf_shapearc', 'swf_shapecurveto', 'swf_shapecurveto3', + 'swf_shapefillbitmapclip', 'swf_shapefillbitmaptile', 'swf_shapefilloff', + 'swf_shapefillsolid', 'swf_shapelinesolid', 'swf_shapelineto', + 'swf_shapemoveto', 'swf_showframe', 'swf_startbutton', + 'swf_startdoaction', 'swf_startshape', 'swf_startsymbol', 'swf_textwidth', + 'swf_translate', 'swf_viewport', 'swfaction', 'swfbitmap', + 'swfbitmap.getheight', 'swfbitmap.getwidth', 'swfbutton', + 'swfbutton.addaction', 'swfbutton.addshape', 'swfbutton.setaction', + 'swfbutton.setdown', 'swfbutton.sethit', 'swfbutton.setover', + 'swfbutton.setup', 'swfbutton_keypress', 'swfdisplayitem', + 'swfdisplayitem.addcolor', 'swfdisplayitem.move', 'swfdisplayitem.moveto', + 'swfdisplayitem.multcolor', 'swfdisplayitem.remove', + 'swfdisplayitem.rotate', 'swfdisplayitem.rotateto', + 'swfdisplayitem.scale', 'swfdisplayitem.scaleto', + 'swfdisplayitem.setdepth', 'swfdisplayitem.setname', + 'swfdisplayitem.setratio', 'swfdisplayitem.skewx', + 'swfdisplayitem.skewxto', 'swfdisplayitem.skewy', + 'swfdisplayitem.skewyto', 'swffill', 'swffill.moveto', 'swffill.rotateto', + 'swffill.scaleto', 'swffill.skewxto', 'swffill.skewyto', 'swffont', + 'swffont.getwidth', 'swfgradient', 'swfgradient.addentry', 'swfmorph', + 'swfmorph.getshape1', 'swfmorph.getshape2', 'swfmovie', 'swfmovie.add', + 'swfmovie.nextframe', 'swfmovie.output', 'swfmovie.remove', + 'swfmovie.save', 'swfmovie.setbackground', 'swfmovie.setdimension', + 'swfmovie.setframes', 'swfmovie.setrate', 'swfmovie.streammp3', + 'swfshape', 'swfshape.addfill', 'swfshape.drawcurve', + 'swfshape.drawcurveto', 'swfshape.drawline', 'swfshape.drawlineto', + 'swfshape.movepen', 'swfshape.movepento', 'swfshape.setleftfill', + 'swfshape.setline', 'swfshape.setrightfill', 'swfsprite', 'swfsprite.add', + 'swfsprite.nextframe', 'swfsprite.remove', 'swfsprite.setframes', + 'swftext', 'swftext.addstring', 'swftext.getwidth', 'swftext.moveto', + 'swftext.setcolor', 'swftext.setfont', 'swftext.setheight', + 'swftext.setspacing', 'swftextfield', 'swftextfield.addstring', + 'swftextfield.align', 'swftextfield.setbounds', 'swftextfield.setcolor', + 'swftextfield.setfont', 'swftextfield.setheight', + 'swftextfield.setindentation', 'swftextfield.setleftmargin', + 'swftextfield.setlinespacing', 'swftextfield.setmargins', + 'swftextfield.setname', 'swftextfield.setrightmargin', + 'sybase_affected_rows', 'sybase_close', 'sybase_connect', + 'sybase_data_seek', 'sybase_fetch_array', 'sybase_fetch_field', + 'sybase_fetch_object', 'sybase_fetch_row', 'sybase_field_seek', + 'sybase_free_result', 'sybase_get_last_message', + 'sybase_min_client_severity', 'sybase_min_error_severity', + 'sybase_min_message_severity', 'sybase_min_server_severity', + 'sybase_num_fields', 'sybase_num_rows', 'sybase_pconnect', 'sybase_query', + 'sybase_result', 'sybase_select_db', 'symlink', 'syslog', 'system', 'tan', + 'tanh', 'tempnam', 'textdomain', 'time', 'tmpfile', 'touch', + 'trigger_error', 'trim', 'uasort', 'ucfirst', 'ucwords', + 'udm_add_search_limit', 'udm_alloc_agent', 'udm_api_version', + 'udm_cat_list', 'udm_cat_path', 'udm_check_charset', 'udm_check_stored', + 'udm_clear_search_limits', 'udm_close_stored', 'udm_crc32', 'udm_errno', + 'udm_error', 'udm_find', 'udm_free_agent', 'udm_free_ispell_data', + 'udm_free_res', 'udm_get_doc_count', 'udm_get_res_field', + 'udm_get_res_param', 'udm_load_ispell_data', 'udm_open_stored', + 'udm_set_agent_param', 'uksort', 'umask', 'uniqid', 'unixtojd', 'unlink', + 'unpack', 'unregister_tick_function', 'unserialize', 'unset', 'urldecode', + 'urlencode', 'user_error', 'usleep', 'usort', 'utf8_decode', 'utf8_encode', + 'var_dump', 'var_export', 'variant', 'version_compare', 'virtual', 'vpo', + 'vpopmail_add_alias_domain', 'vpopmail_add_alias_domain_ex', + 'vpopmail_add_domain', 'vpopmail_add_domain_ex', 'vpopmail_add_user', + 'vpopmail_alias_add', 'vpopmail_alias_del', 'vpopmail_alias_del_domain', + 'vpopmail_alias_get', 'vpopmail_alias_get_all', 'vpopmail_auth_user', + 'vpopmail_del_domain_ex', 'vpopmail_del_user', 'vpopmail_error', + 'vpopmail_passwd', 'vpopmail_set_user_quota', 'vprintf', 'vsprintf', + 'w32api_deftype', 'w32api_init_dtype', 'w32api_invoke_function', + 'w32api_register_function', 'w32api_set_call_method', 'wddx_add_vars', + 'wddx_deserialize', 'wddx_packet_end', 'wddx_packet_start', + 'wddx_serialize_value', 'wddx_serialize_vars', 'wordwrap', + 'xml_error_string', 'xml_get_current_byte_index', + 'xml_get_current_column_number', 'xml_get_current_line_number', + 'xml_get_error_code', 'xml_parse', 'xml_parse_into_struct', + 'xml_parser_create', 'xml_parser_create_ns', 'xml_parser_free', + 'xml_parser_get_option', 'xml_parser_set_option', + 'xml_set_character_data_handler', 'xml_set_default_handler', + 'xml_set_element_handler', 'xml_set_end_namespace_decl_handler', + 'xml_set_external_entity_ref_handler', 'xml_set_notation_decl_handler', + 'xml_set_object', 'xml_set_processing_instruction_handler', + 'xml_set_start_namespace_decl_handler', + 'xml_set_unparsed_entity_decl_handler', 'xmldoc', 'xmldocfile', + 'xmlrpc_decode', 'xmlrpc_decode_request', 'xmlrpc_encode', + 'xmlrpc_encode_request', 'xmlrpc_get_type', + 'xmlrpc_parse_method_descriptions', + 'xmlrpc_server_add_introspection_data', 'xmlrpc_server_call_method', + 'xmlrpc_server_create', 'xmlrpc_server_destroy', + 'xmlrpc_server_register_introspection_callback', + 'xmlrpc_server_register_method', 'xmlrpc_set_type', 'xmltree', + 'xpath_eval', 'xpath_eval_expression', 'xpath_new_context', 'xptr_eval', + 'xptr_new_context', 'xslt_create', 'xslt_errno', 'xslt_error', + 'xslt_free', 'xslt_process', 'xslt_set_base', 'xslt_set_encoding', + 'xslt_set_error_handler', 'xslt_set_log', 'xslt_set_sax_handler', + 'xslt_set_sax_handlers', 'xslt_set_scheme_handler', + 'xslt_set_scheme_handlers', 'yaz_addinfo', 'yaz_ccl_conf', + 'yaz_ccl_parse', 'yaz_close', 'yaz_connect', 'yaz_database', + 'yaz_element', 'yaz_errno', 'yaz_error', 'yaz_hits', 'yaz_itemorder', + 'yaz_present', 'yaz_range', 'yaz_record', 'yaz_scan', 'yaz_scan_result', + 'yaz_search', 'yaz_sort', 'yaz_syntax', 'yaz_wait', 'yp_all', 'yp_cat', + 'yp_err_string', 'yp_errno', 'yp_first', 'yp_get_default_domain', + 'yp_master', 'yp_match', 'yp_next', 'yp_order', 'zend_logo_guid', + 'zend_version', 'zip_close', 'zip_entry_close', + 'zip_entry_compressedsize', 'zip_entry_compressionmethod', + 'zip_entry_filesize', 'zip_entry_name', 'zip_entry_open', + 'zip_entry_read', 'zip_open', 'zip_read' + ), + 1 => $CONTEXT . '/functions', + 2 => 'color:#006;', + 3 => false, + 4 => 'http://www.php.net/{FNAME}' + ) +); + +$this->_contextCharactersDisallowedBeforeKeywords = array('$', '_'); +$this->_contextCharactersDisallowedAfterKeywords = array("'", '_'); +$this->_contextSymbols = array( + 0 => array( + 0 => array( + '(', ')', ',', ';', ':', '[', ']', + '+', '-', '*', '/', '&', '|', '!', '<', '>', + '{', '}', '=', '@' + ), + 1 => $CONTEXT . '/sym0', + 2 => 'color:#008000;' + ) +); +$this->_contextRegexps = array( + 0 => array( + 0 => array( + '#(\$\$?[a-zA-Z_][a-zA-Z0-9_]*)#' + ), + 1 => '$', + 2 => array( + 1 => array($CONTEXT . '/var', 'color:#33f;', false), + ) + ), + 1 => geshi_use_doubles($CONTEXT), + 2 => geshi_use_integers($CONTEXT) +); +$this->_objectSplitters = array( + 0 => array( + 0 => array('->'), + 1 => $CONTEXT . '/oodynamic', + 2 => 'color:#933;', + 3 => false + ), + 1 => array( + 0 => array('::'), + 1 => $CONTEXT . '/oostatic', + 2 => 'color:#933;font-weight:bold;', + 3 => false + ) +); + +?> diff --git a/paste/include/geshi/contexts/php/php5.php b/paste/include/geshi/contexts/php/php5.php new file mode 100644 index 0000000..a1aa93b --- /dev/null +++ b/paste/include/geshi/contexts/php/php5.php @@ -0,0 +1,900 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the GeSHiStringContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshistringcontext.php'; +/** Get the GeSHiPHPDoubleStringContext class */ +require_once GESHI_CLASSES_ROOT . 'php' . GESHI_DIR_SEPARATOR . 'class.geshiphpdoublestringcontext.php'; + +$this->_contextDelimiters = array( + 0 => array( + 0 => array(' array('?>'), + 2 => true + ), + 1 => array( + 0 => array('<%'), + 1 => array('%>'), + 2 => false + ) +); + +$this->_childContexts = array( + new GeSHiStringContext('php', $DIALECT, 'common/single_string'), + new GeSHiPHPDoubleStringContext('php', $DIALECT, 'double_string'), + new GeSHiPHPDoubleStringContext('php', $DIALECT, 'heredoc'), + // PHP single comment, with # starter and end-php-context ender + new GeSHiContext('php', $DIALECT, 'single_comment'), + // Use common multi comment since it is a PHP comment... + new GeSHiContext('php', $DIALECT, 'common/multi_comment'), + // doxygen comments + new GeSHiContext('php', $DIALECT, 'doxygen') +); + +$this->_styler->setStyle($CONTEXT_START, 'font-weight:bold;color:#000;'); +$this->_styler->setStyle($CONTEXT_END, 'font-weight:bold;color:#000;'); + +$this->_contextKeywords = array( + 0 => array( + // keywords + 0 => array( + 'as', 'break', 'case', 'continue', 'do', 'declare', 'else', 'elseif', + 'endforeach', 'endif', 'endswitch', 'endwhile', 'for', 'foreach', 'if', + 'include', 'include_once', 'require', 'require_once', 'return', 'switch', + 'while' + ), + // name + 1 => $CONTEXT . '/cstructures', + // style + 2 => 'color:#b1b100;', + // case sensitive + 3 => false, + // url + 4 => '' + ), + 1 => array( + 0 => array( + 'DEFAULT_INCLUDE_PATH', 'E_ALL', 'E_COMPILE_ERROR', 'E_COMPILE_WARNING', + 'E_CORE_ERROR', 'E_CORE_WARNING', 'E_ERROR', 'E_NOTICE', 'E_PARSE', + 'E_STRICT', 'E_USER_ERROR', 'E_USER_NOTICE', 'E_USER_WARNING', + 'E_WARNING', 'FALSE', 'NULL', 'PEAR_EXTENSION_DIR', 'PEAR_INSTALL_DIR', + 'PHP_BINDIR', 'PHP_CONFIG_FILE_PATH', 'PHP_DATADIR', 'PHP_EXTENSION_DIR', + 'PHP_LIBDIR', 'PHP_LOCALSTATEDIR', 'PHP_OS', 'PHP_OUTPUT_HANDLER_CONT', + 'PHP_OUTPUT_HANDLER_END', 'PHP_OUTPUT_HANDLER_START', 'PHP_SYSCONFDIR', + 'PHP_VERSION', 'TRUE', '__CLASS__', '__FILE__', '__FUNCTION__', + '__LINE__', '__METHOD__', 'abstract', 'catch', 'class', 'default', + 'extends', 'final', 'function', 'implements', 'interface', 'new', + 'parent', 'private', 'protected', 'public', 'self', 'static', 'throw', + 'try', 'var' + ), + 1 => $CONTEXT . '/keywords', + 2 => 'font-weight:bold;color:#000;', + 3 => false, + 4 => '' + ), + 2 => array( + 0 => array( + 'abs', 'acos', 'acosh', 'addcslashes', 'addslashes', + 'apache_child_terminate', 'apache_lookup_uri', 'apache_note', + 'apache_setenv', 'array', 'array_change_key_case', 'array_chunk', + 'array_count_values', 'array_diff', 'array_fill', 'array_filter', + 'array_flip', 'array_intersect', 'array_key_exists', 'array_keys', + 'array_map', 'array_merge', 'array_merge_recursive', 'array_multisort', + 'array_pad', 'array_pop', 'array_push', 'array_rand', 'array_reduce', + 'array_reverse', 'array_search', 'array_shift', 'array_slice', + 'array_splice', 'array_sum', 'array_unique', 'array_unshift', + 'array_values', 'array_walk', 'arsort', 'ascii2ebcdic', 'asin', 'asinh', + 'asort', 'aspell_check', 'aspell_check_raw', 'aspell_new', + 'aspell_suggest', 'assert', 'assert_options', 'atan', 'atan2', 'atanh', + 'base64_decode', 'base64_encode', 'base_convert', 'basename', 'bcadd', + 'bccomp', 'bcdiv', 'bcmod', 'bcmul', 'bcpow', 'bcscale', 'bcsqrt', + 'bcsub', 'bin2hex', 'bind_textdomain_codeset', 'bindec', 'bindtextdomain', + 'bz', 'bzclose', 'bzdecompress', 'bzerrno', 'bzerror', 'bzerrstr', + 'bzflush', 'bzopen', 'bzread', 'bzwrite', 'c', 'cal_days_in_month', + 'cal_from_jd', 'cal_info', 'cal_to_jd', 'call_user_func', + 'call_user_func_array', 'call_user_method', 'call_user_method_array', + 'ccvs_add', 'ccvs_auth', 'ccvs_command', 'ccvs_count', 'ccvs_delete', + 'ccvs_done', 'ccvs_init', 'ccvs_lookup', 'ccvs_new', 'ccvs_report', + 'ccvs_return', 'ccvs_reverse', 'ccvs_sale', 'ccvs_status', + 'ccvs_textvalue', 'ccvs_void', 'ceil', 'chdir', 'checkdate', 'checkdnsrr', + 'chgrp', 'chmod', 'chop', 'chown', 'chr', 'chroot', 'chunk_split', + 'class_exists', 'clearstatcache', 'closedir', 'closelog', 'com', + 'com_addref', 'com_get', 'com_invoke', 'com_isenum', 'com_load', + 'com_load_typelib', 'com_propget', 'com_propput', 'com_propset', + 'com_release', 'com_set', 'compact', 'connection_aborted', + 'connection_status', 'connection_timeout', 'constant', + 'convert_cyr_string', 'copy', 'cos', 'cosh', 'count', 'count_chars', + 'cpdf_add_annotation', 'cpdf_add_outline', 'cpdf_arc', 'cpdf_begin_text', + 'cpdf_circle', 'cpdf_clip', 'cpdf_close', 'cpdf_closepath', + 'cpdf_closepath_fill_stroke', 'cpdf_closepath_stroke', + 'cpdf_continue_text', 'cpdf_curveto', 'cpdf_end_text', 'cpdf_fill', + 'cpdf_fill_stroke', 'cpdf_finalize', 'cpdf_finalize_page', + 'cpdf_global_set_document_limits', 'cpdf_import_jpeg', 'cpdf_lineto', + 'cpdf_moveto', 'cpdf_newpath', 'cpdf_open', 'cpdf_output_buffer', + 'cpdf_page_init', 'cpdf_place_inline_image', 'cpdf_rect', 'cpdf_restore', + 'cpdf_rlineto', 'cpdf_rmoveto', 'cpdf_rotate', 'cpdf_rotate_text', + 'cpdf_save', 'cpdf_save_to_file', 'cpdf_scale', 'cpdf_set_action_url', + 'cpdf_set_char_spacing', 'cpdf_set_creator', 'cpdf_set_current_page', + 'cpdf_set_font', 'cpdf_set_font_directories', 'cpdf_set_font_map_file', + 'cpdf_set_horiz_scaling', 'cpdf_set_keywords', 'cpdf_set_leading', + 'cpdf_set_page_animation', 'cpdf_set_subject', 'cpdf_set_text_matrix', + 'cpdf_set_text_pos', 'cpdf_set_text_rise', 'cpdf_set_title', + 'cpdf_set_viewer_preferences', 'cpdf_set_word_spacing', 'cpdf_setdash', + 'cpdf_setflat', 'cpdf_setgray', 'cpdf_setgray_fill', + 'cpdf_setgray_stroke', 'cpdf_setlinecap', 'cpdf_setlinejoin', + 'cpdf_setlinewidth', 'cpdf_setmiterlimit', 'cpdf_setrgbcolor', + 'cpdf_setrgbcolor_fill', 'cpdf_setrgbcolor_stroke', 'cpdf_show', + 'cpdf_show_xy', 'cpdf_stringwidth', 'cpdf_stroke', 'cpdf_text', + 'cpdf_translate', 'crack_check', 'crack_closedict', + 'crack_getlastmessage', 'crack_opendict', 'crc32', 'create_function', + 'crypt', 'ctype_alnum', 'ctype_alpha', 'ctype_cntrl', 'ctype_digit', + 'ctype_graph', 'ctype_lower', 'ctype_print', 'ctype_punct', 'ctype_space', + 'ctype_upper', 'ctype_xdigit', 'curl_close', 'curl_errno', 'curl_error', + 'curl_exec', 'curl_getinfo', 'curl_init', 'curl_setopt', 'curl_version', + 'current', 'cybercash_base64_decode', 'cybercash_base64_encode', + 'cybercash_decr', 'cybercash_encr', 'cybermut_creerformulairecm', + 'cybermut_creerreponsecm', 'cybermut_testmac', 'cyrus_authenticate', + 'cyrus_bind', 'cyrus_close', 'cyrus_connect', 'cyrus_query', + 'cyrus_unbind', 'date', 'dba_close', 'dba_delete', 'dba_exists', + 'dba_fetch', 'dba_firstkey', 'dba_insert', 'dba_nextkey', 'dba_open', + 'dba_optimize', 'dba_popen', 'dba_replace', 'dba_sync', + 'dbase_add_record', 'dbase_close', 'dbase_create', 'dbase_delete_record', + 'dbase_get_record', 'dbase_get_record_with_names', 'dbase_numfields', + 'dbase_numrecords', 'dbase_open', 'dbase_pack', 'dbase_replace_record', + 'dblist', 'dbmclose', 'dbmdelete', 'dbmexists', 'dbmfetch', 'dbmfirstkey', + 'dbminsert', 'dbmnextkey', 'dbmopen', 'dbmreplace', 'dbp', 'dbplus_add', + 'dbplus_aql', 'dbplus_chdir', 'dbplus_close', 'dbplus_curr', + 'dbplus_errcode', 'dbplus_errno', 'dbplus_find', 'dbplus_first', + 'dbplus_flush', 'dbplus_freealllocks', 'dbplus_freelock', + 'dbplus_freerlocks', 'dbplus_getlock', 'dbplus_getunique', 'dbplus_info', + 'dbplus_last', 'dbplus_lockrel', 'dbplus_next', 'dbplus_open', + 'dbplus_rchperm', 'dbplus_rcreate', 'dbplus_rcrtexact', 'dbplus_rcrtlike', + 'dbplus_resolve', 'dbplus_restorepos', 'dbplus_rkeys', 'dbplus_ropen', + 'dbplus_rquery', 'dbplus_rrename', 'dbplus_rsecindex', 'dbplus_runlink', + 'dbplus_rzap', 'dbplus_savepos', 'dbplus_setindex', + 'dbplus_setindexbynumber', 'dbplus_sql', 'dbplus_tcl', 'dbplus_tremove', + 'dbplus_undo', 'dbplus_undoprepare', 'dbplus_unlockrel', + 'dbplus_unselect', 'dbplus_update', 'dbplus_xlockrel', + 'dbplus_xunlockrel', 'dbx_close', 'dbx_compare', 'dbx_connect', + 'dbx_error', 'dbx_query', 'dbx_sort', 'dcgettext', 'dcngettext', + 'debugger_off', 'debugger_on', 'decbin', 'dechex', 'decoct', 'define', + 'define_syslog_variables', 'defined', 'deg2rad', 'delete', 'dgettext', + 'die', 'dio_close', 'dio_fcntl', 'dio_open', 'dio_read', 'dio_seek', + 'dio_stat', 'dio_truncate', 'dio_write', 'dir', 'dirname', + 'disk_free_space', 'disk_total_space', 'diskfreespace', 'dl', 'dngettext', + 'domxml_add_root', 'domxml_attributes', 'domxml_children', + 'domxml_dumpmem', 'domxml_get_attribute', 'domxml_new_child', + 'domxml_new_xmldoc', 'domxml_node', 'domxml_node_set_content', + 'domxml_node_unlink_node', 'domxml_root', 'domxml_set_attribute', + 'domxml_version', 'dotnet_load', 'doubleval', 'each', 'easter_date', + 'easter_days', 'ebcdic2ascii', 'echo', 'empty', 'end', 'ereg', + 'ereg_replace', 'eregi', 'eregi_replace', 'error_log', 'error_reporting', + 'escapeshellarg', 'escapeshellcmd', 'eval', 'exec', 'exif_imagetype', + 'exif_read_data', 'exif_thumbnail', 'exit', 'exp', 'explode', 'expm1', + 'extension_loaded', 'extract', 'ezmlm_hash', 'fbsql_affected_rows', + 'fbsql_autocommit', 'fbsql_change_user', 'fbsql_close', 'fbsql_commit', + 'fbsql_connect', 'fbsql_create_blob', 'fbsql_create_clob', + 'fbsql_create_db', 'fbsql_data_seek', 'fbsql_database', + 'fbsql_database_password', 'fbsql_db_query', 'fbsql_db_status', + 'fbsql_drop_db', 'fbsql_errno', 'fbsql_error', 'fbsql_fetch_a', + 'fbsql_fetch_assoc', 'fbsql_fetch_field', 'fbsql_fetch_lengths', + 'fbsql_fetch_object', 'fbsql_fetch_row', 'fbsql_field_flags', + 'fbsql_field_len', 'fbsql_field_name', 'fbsql_field_seek', + 'fbsql_field_table', 'fbsql_field_type', 'fbsql_free_result', + 'fbsql_get_autostart_info', 'fbsql_hostname', 'fbsql_insert_id', + 'fbsql_list_dbs', 'fbsql_list_fields', 'fbsql_list_tables', + 'fbsql_next_result', 'fbsql_num_fields', 'fbsql_num_rows', + 'fbsql_password', 'fbsql_pconnect', 'fbsql_query', 'fbsql_read_blob', + 'fbsql_read_clob', 'fbsql_result', 'fbsql_rollback', 'fbsql_select_db', + 'fbsql_set_lob_mode', 'fbsql_set_transaction', 'fbsql_start_db', + 'fbsql_stop_db', 'fbsql_tablename', 'fbsql_username', 'fbsql_warnings', + 'fclose', 'fdf_add_template', 'fdf_close', 'fdf_create', 'fdf_get_file', + 'fdf_get_status', 'fdf_get_value', 'fdf_next_field_name', 'fdf_open', + 'fdf_save', 'fdf_set_ap', 'fdf_set_encoding', 'fdf_set_file', + 'fdf_set_flags', 'fdf_set_javascript_action', 'fdf_set_opt', + 'fdf_set_status', 'fdf_set_submit_form_action', 'fdf_set_value', 'feof', + 'fflush', 'fgetc', 'fgetcsv', 'fgets', 'fgetss', 'fgetwrapperdata', + 'file', 'file_exists', 'file_get_contents', 'fileatime', 'filectime', + 'filegroup', 'fileinode', 'filemtime', 'fileowner', 'fileperms', + 'filepro', 'filepro_fieldcount', 'filepro_fieldname', 'filepro_fieldtype', + 'filepro_fieldwidth', 'filepro_retrieve', 'filepro_rowcount', 'filesize', + 'filetype', 'floatval', 'flock', 'floor', 'flush', 'fopen', 'fpassthru', + 'fputs', 'fread', 'frenchtojd', 'fribidi_log2vis', 'fscanf', 'fseek', + 'fsockopen', 'fstat', 'ftell', 'ftok', 'ftp_cdup', 'ftp_chdir', + 'ftp_close', 'ftp_connect', 'ftp_delete', 'ftp_exec', 'ftp_fget', + 'ftp_fput', 'ftp_get', 'ftp_get_option', 'ftp_login', 'ftp_mdtm', + 'ftp_mkdir', 'ftp_nlist', 'ftp_pasv', 'ftp_put', 'ftp_pwd', 'ftp_quit', + 'ftp_rawlist', 'ftp_rename', 'ftp_rmdir', 'ftp_set_option', 'ftp_site', + 'ftp_size', 'ftp_systype', 'ftruncate', 'func_get_arg', 'func_get_args', + 'func_num_args', 'function_exists', 'fwrite', 'get_browser', + 'get_cfg_var', 'get_class', 'get_class_methods', 'get_class_vars', + 'get_current_user', 'get_declared_classes', 'get_defined_constants', + 'get_defined_functions', 'get_defined_vars', 'get_extension_funcs', + 'get_html_translation_table', 'get_include_p', 'get_included_files', + 'get_loaded_extensions', 'get_magic_quotes_gpc', + 'get_magic_quotes_runtime', 'get_meta_tags', 'get_object_vars', + 'get_parent_class', 'get_required_files', 'get_resource_type', + 'getallheaders', 'getcwd', 'getdate', 'getenv', 'gethostbyaddr', + 'gethostbyname', 'gethostbynamel', 'getimagesize', 'getlastmod', + 'getmxrr', 'getmygid', 'getmyinode', 'getmypid', 'getmyuid', + 'getprotobyname', 'getprotobynumber', 'getrandmax', 'getrusage', + 'getservbyname', 'getservbyport', 'gettext', 'gettimeofday', 'gettype', + 'global', 'gmdate', 'gmmktime', 'gmp_abs', 'gmp_add', 'gmp_and', + 'gmp_clrbit', 'gmp_cmp', 'gmp_com', 'gmp_div', 'gmp_div_q', 'gmp_div_qr', + 'gmp_div_r', 'gmp_divexact', 'gmp_fact', 'gmp_gcd', 'gmp_gcdext', + 'gmp_hamdist', 'gmp_init', 'gmp_intval', 'gmp_invert', 'gmp_jacobi', + 'gmp_legendre', 'gmp_mod', 'gmp_mul', 'gmp_neg', 'gmp_or', + 'gmp_perfect_square', 'gmp_popcount', 'gmp_pow', 'gmp_powm', + 'gmp_prob_prime', 'gmp_random', 'gmp_scan0', 'gmp_scan1', 'gmp_setbit', + 'gmp_sign', 'gmp_sqrt', 'gmp_sqrtrem', 'gmp_strval', 'gmp_sub', 'gmp_xor', + 'gmstrftime', 'gregoriantojd', 'gzclose', 'gzcompress', 'gzdeflate', + 'gzencode', 'gzeof', 'gzfile', 'gzgetc', 'gzgets', 'gzgetss', 'gzinflate', + 'gzopen', 'gzpassthru', 'gzputs', 'gzread', 'gzrewind', 'gzseek', 'gztell', + 'gzuncompress', 'gzwrite', 'header', 'headers_sent', 'hebrev', 'hebrevc', + 'hexdec', 'highlight_file', 'highlight_string', 'htmlentities', + 'htmlspecialchars', 'hw_array2objrec', 'hw_c', 'hw_children', + 'hw_childrenobj', 'hw_close', 'hw_connect', 'hw_connection_info', 'hw_cp', + 'hw_deleteobject', 'hw_docbyanchor', 'hw_docbyanchorobj', + 'hw_document_attributes', 'hw_document_bodytag', 'hw_document_content', + 'hw_document_setcontent', 'hw_document_size', 'hw_dummy', 'hw_edittext', + 'hw_error', 'hw_errormsg', 'hw_free_document', 'hw_getanchors', + 'hw_getanchorsobj', 'hw_getandlock', 'hw_getchildcoll', + 'hw_getchildcollobj', 'hw_getchilddoccoll', 'hw_getchilddoccollobj', + 'hw_getobject', 'hw_getobjectbyquery', 'hw_getobjectbyquerycoll', + 'hw_getobjectbyquerycollobj', 'hw_getobjectbyqueryobj', 'hw_getparents', + 'hw_getparentsobj', 'hw_getrellink', 'hw_getremote', + 'hw_getremotechildren', 'hw_getsrcbydestobj', 'hw_gettext', + 'hw_getusername', 'hw_identify', 'hw_incollections', 'hw_info', + 'hw_inscoll', 'hw_insdoc', 'hw_insertanchors', 'hw_insertdocument', + 'hw_insertobject', 'hw_mapid', 'hw_modifyobject', 'hw_mv', + 'hw_new_document', 'hw_objrec2array', 'hw_output_document', 'hw_pconnect', + 'hw_pipedocument', 'hw_root', 'hw_setlinkroot', 'hw_stat', 'hw_unlock', + 'hw_who', 'hypot', 'i', 'ibase_blob_add', 'ibase_blob_cancel', + 'ibase_blob_close', 'ibase_blob_create', 'ibase_blob_echo', + 'ibase_blob_get', 'ibase_blob_import', 'ibase_blob_info', + 'ibase_blob_open', 'ibase_close', 'ibase_commit', 'ibase_connect', + 'ibase_errmsg', 'ibase_execute', 'ibase_fetch_object', 'ibase_fetch_row', + 'ibase_field_info', 'ibase_free_query', 'ibase_free_result', + 'ibase_num_fields', 'ibase_pconnect', 'ibase_prepare', 'ibase_query', + 'ibase_rollback', 'ibase_timefmt', 'ibase_trans', 'icap_close', + 'icap_create_calendar', 'icap_delete_calendar', 'icap_delete_event', + 'icap_fetch_event', 'icap_list_alarms', 'icap_list_events', 'icap_open', + 'icap_rename_calendar', 'icap_reopen', 'icap_snooze', 'icap_store_event', + 'iconv', 'iconv_get_encoding', 'iconv_set_encoding', 'ifx_affected_rows', + 'ifx_blobinfile_mode', 'ifx_byteasvarchar', 'ifx_close', 'ifx_connect', + 'ifx_copy_blob', 'ifx_create_blob', 'ifx_create_char', 'ifx_do', + 'ifx_error', 'ifx_errormsg', 'ifx_fetch_row', 'ifx_fieldproperties', + 'ifx_fieldtypes', 'ifx_free_blob', 'ifx_free_char', 'ifx_free_result', + 'ifx_get_blob', 'ifx_get_char', 'ifx_getsqlca', 'ifx_htmltbl_result', + 'ifx_nullformat', 'ifx_num_fields', 'ifx_num_rows', 'ifx_pconnect', + 'ifx_prepare', 'ifx_query', 'ifx_textasvarchar', 'ifx_update_blob', + 'ifx_update_char', 'ifxus_close_slob', 'ifxus_create_slob', + 'ifxus_free_slob', 'ifxus_open_slob', 'ifxus_read_slob', + 'ifxus_seek_slob', 'ifxus_tell_slob', 'ifxus_write_slob', + 'ignore_user_abort', 'image2wbmp', 'imagealphablending', 'imageantialias', + 'imagearc', 'imagechar', 'imagecharup', 'imagecolorallocate', + 'imagecolorat', 'imagecolorclosest', 'imagecolorclosestalpha', + 'imagecolorclosesthwb', 'imagecolordeallocate', 'imagecolorexact', + 'imagecolorexactalpha', 'imagecolorresolve', 'imagecolorresolvealpha', + 'imagecolorset', 'imagecolorsforindex', 'imagecolorstotal', + 'imagecolortransparent', 'imagecopy', 'imagecopymerge', + 'imagecopymergegray', 'imagecopyresampled', 'imagecopyresized', + 'imagecreate', 'imagecreatefromgd', 'imagecreatefromgd2', + 'imagecreatefromgd2part', 'imagecreatefromgif', 'imagecreatefromjpeg', + 'imagecreatefrompng', 'imagecreatefromstring', 'imagecreatefromwbmp', + 'imagecreatefromxbm', 'imagecreatefromxpm', 'imagecreatetruecolor', + 'imagedashedline', 'imagedestroy', 'imageellipse', 'imagefill', + 'imagefilledarc', 'imagefilledellipse', 'imagefilledpolygon', + 'imagefilledrectangle', 'imagefilltoborder', 'imagefontheight', + 'imagefontwidth', 'imageftbbox', 'imagefttext', 'imagegammacorrect', + 'imagegd', 'imagegd2', 'imagegif', 'imageinterlace', 'imagejpeg', + 'imageline', 'imageloadfont', 'imagepalettecopy', 'imagepng', + 'imagepolygon', 'imagepsbbox', 'imagepsencodefont', 'imagepsextendfont', + 'imagepsfreefont', 'imagepsloadfont', 'imagepsslantfont', 'imagepstext', + 'imagerectangle', 'imagesetbrush', 'imagesetpixel', 'imagesetstyle', + 'imagesetthickness', 'imagesettile', 'imagestring', 'imagestringup', + 'imagesx', 'imagesy', 'imagetruecolortopalette', 'imagettfbbox', + 'imagettftext', 'imagetypes', 'imagewbmp', 'imap_8bit', 'imap_append', + 'imap_base64', 'imap_binary', 'imap_body', 'imap_bodystruct', + 'imap_check', 'imap_clearflag_full', 'imap_close', 'imap_createmailbox', + 'imap_delete', 'imap_deletemailbox', 'imap_errors', 'imap_expunge', + 'imap_fetch_overview', 'imap_fetchbody', 'imap_fetchheader', + 'imap_fetchstructure', 'imap_get_quota', 'imap_getmailboxes', + 'imap_getsubscribed', 'imap_header', 'imap_headerinfo', 'imap_headers', + 'imap_last_error', 'imap_listmailbox', 'imap_listsubscribed', 'imap_mail', + 'imap_mail_compose', 'imap_mail_copy', 'imap_mail_move', + 'imap_mailboxmsginfo', 'imap_mime_header_decode', 'imap_msgno', + 'imap_num_msg', 'imap_num_recent', 'imap_open', 'imap_ping', 'imap_popen', + 'imap_qprint', 'imap_renamemailbox', 'imap_reopen', + 'imap_rfc822_parse_adrlist', 'imap_rfc822_parse_headers', + 'imap_rfc822_write_address', 'imap_scanmailbox', 'imap_search', + 'imap_set_quota', 'imap_setacl', 'imap_setflag_full', 'imap_sort', + 'imap_status', 'imap_subscribe', 'imap_thread', 'imap_uid', + 'imap_undelete', 'imap_unsubscribe', 'imap_utf7_decode', + 'imap_utf7_encode', 'imap_utf8', 'implode', 'import_request_variables', + 'in_array', 'include', 'include_once', 'ingres_autocommit', + 'ingres_close', 'ingres_commit', 'ingres_connect', 'ingres_fetch_array', + 'ingres_fetch_object', 'ingres_fetch_row', 'ingres_field_length', + 'ingres_field_name', 'ingres_field_nullable', 'ingres_field_precision', + 'ingres_field_scale', 'ingres_field_type', 'ingres_num_fields', + 'ingres_num_rows', 'ingres_pconnect', 'ingres_query', 'ingres_rollback', + 'ini_alter', 'ini_get', 'ini_get_all', 'ini_restore', 'ini_set', 'intval', + 'ip2long', 'iptcembed', 'iptcparse', 'ircg_channel_mode', + 'ircg_disconnect', 'ircg_fetch_error_msg', 'ircg_get_username', + 'ircg_html_encode', 'ircg_ignore_add', 'ircg_ignore_del', + 'ircg_is_conn_alive', 'ircg_join', 'ircg_kick', + 'ircg_lookup_format_messages', 'ircg_msg', 'ircg_nick', + 'ircg_nickname_escape', 'ircg_nickname_unescape', 'ircg_notice', + 'ircg_part', 'ircg_pconnect', 'ircg_register_format_messages', + 'ircg_set_current', 'ircg_set_file', 'ircg_topic', 'ircg_whois', 'is_a', + 'is_array', 'is_bool', 'is_callable', 'is_dir', 'is_double', + 'is_executable', 'is_file', 'is_finite', 'is_float', 'is_infinite', + 'is_int', 'is_integer', 'is_link', 'is_long', 'is_nan', 'is_null', + 'is_numeric', 'is_object', 'is_readable', 'is_real', 'is_resource', + 'is_scalar', 'is_string', 'is_subclass_of', 'is_uploaded_file', + 'is_writable', 'is_writeable', 'isset', 'java_last_exception_clear', + 'java_last_exception_get', 'jddayofweek', 'jdmonthname', 'jdtofrench', + 'jdtogregorian', 'jdtojewish', 'jdtojulian', 'jdtounix', 'jewishtojd', + 'join', 'jpeg2wbmp', 'juliantojd', 'key', 'krsort', 'ksort', 'lcg_value', + 'ldap_8859_to_t61', 'ldap_add', 'ldap_bind', 'ldap_close', 'ldap_compare', + 'ldap_connect', 'ldap_count_entries', 'ldap_delete', 'ldap_dn2ufn', + 'ldap_err2str', 'ldap_errno', 'ldap_error', 'ldap_explode_dn', + 'ldap_first_attribute', 'ldap_first_entry', 'ldap_first_reference', + 'ldap_free_result', 'ldap_get_attributes', 'ldap_get_dn', + 'ldap_get_entries', 'ldap_get_option', 'ldap_get_values', + 'ldap_get_values_len', 'ldap_list', 'ldap_mod_add', 'ldap_mod_del', + 'ldap_mod_replace', 'ldap_modify', 'ldap_next_attribute', + 'ldap_next_entry', 'ldap_next_reference', 'ldap_parse_reference', + 'ldap_parse_result', 'ldap_read', 'ldap_rename', 'ldap_search', + 'ldap_set_option', 'ldap_set_rebind_proc', 'ldap_sort', 'ldap_start_tls', + 'ldap_t61_to_8859', 'ldap_unbind', 'leak', 'levenshtein', 'link', + 'linkinfo', 'list', 'localeconv', 'localtime', 'log', 'log10', 'log1p', + 'long2ip', 'lstat', 'ltrim', 'mail', + 'mailparse_determine_best_xfer_encoding', 'mailparse_msg_create', + 'mailparse_msg_extract_part', 'mailparse_msg_extract_part_file', + 'mailparse_msg_free', 'mailparse_msg_get_part', + 'mailparse_msg_get_part_data', 'mailparse_msg_get_structure', + 'mailparse_msg_parse', 'mailparse_msg_parse_file', + 'mailparse_rfc822_parse_addresses', 'mailparse_stream_encode', + 'mailparse_uudecode_all', 'max', 'mb_c', 'mb_convert_kana', + 'mb_convert_variables', 'mb_decode_mimeheader', 'mb_decode_numericentity', + 'mb_detect_encoding', 'mb_detect_order', 'mb_encode_mimeheader', + 'mb_encode_numericentity', 'mb_ereg', 'mb_ereg_match', 'mb_ereg_replace', + 'mb_ereg_search', 'mb_ereg_search_getpos', 'mb_ereg_search_getregs', + 'mb_ereg_search_init', 'mb_ereg_search_pos', 'mb_ereg_search_regs', + 'mb_ereg_search_setpos', 'mb_eregi', 'mb_eregi_replace', 'mb_get_info', + 'mb_http_input', 'mb_http_output', 'mb_internal_encoding', 'mb_language', + 'mb_output_handler', 'mb_parse_str', 'mb_preferred_mime_name', + 'mb_regex_encoding', 'mb_send_mail', 'mb_split', 'mb_strcut', + 'mb_strimwidth', 'mb_strlen', 'mb_strpos', 'mb_strrpos', 'mb_strwidth', + 'mb_substitute_character', 'mb_substr', 'mcal_append_event', 'mcal_close', + 'mcal_create_calendar', 'mcal_date_compare', 'mcal_date_valid', + 'mcal_day_of_week', 'mcal_day_of_year', 'mcal_days_in_month', + 'mcal_delete_calendar', 'mcal_delete_event', 'mcal_event_add_attribute', + 'mcal_event_init', 'mcal_event_set_alarm', 'mcal_event_set_category', + 'mcal_event_set_class', 'mcal_event_set_description', + 'mcal_event_set_end', 'mcal_event_set_recur_daily', + 'mcal_event_set_recur_monthly_mday', 'mcal_event_set_recur_monthly_wday', + 'mcal_event_set_recur_none', 'mcal_event_set_recur_weekly', + 'mcal_event_set_recur_yearly', 'mcal_event_set_start', + 'mcal_event_set_title', 'mcal_expunge', 'mcal_fetch_current_stream_event', + 'mcal_fetch_event', 'mcal_is_leap_year', 'mcal_list_alarms', + 'mcal_list_events', 'mcal_next_recurrence', 'mcal_open', 'mcal_popen', + 'mcal_rename_calendar', 'mcal_reopen', 'mcal_snooze', 'mcal_store_event', + 'mcal_time_valid', 'mcal_week_of_year', 'mcrypt_cbc', 'mcrypt_cfb', + 'mcrypt_create_iv', 'mcrypt_decrypt', 'mcrypt_ecb', + 'mcrypt_enc_get_algorithms_name', 'mcrypt_enc_get_block_size', + 'mcrypt_enc_get_iv_size', 'mcrypt_enc_get_key_size', + 'mcrypt_enc_get_modes_name', 'mcrypt_enc_get_supported_key_sizes', + 'mcrypt_enc_is_block_algorithm', 'mcrypt_enc_is_block_algorithm_mode', + 'mcrypt_enc_is_block_mode', 'mcrypt_enc_self_test', 'mcrypt_encrypt', + 'mcrypt_generic', 'mcrypt_generic_deinit', 'mcrypt_generic_end', + 'mcrypt_generic_init', 'mcrypt_get_block_size', 'mcrypt_get_cipher_name', + 'mcrypt_get_iv_size', 'mcrypt_get_key_size', 'mcrypt_list_algorithms', + 'mcrypt_list_modes', 'mcrypt_module_close', + 'mcrypt_module_get_algo_block_size', 'mcrypt_module_get_algo_key_size', + 'mcrypt_module_get_supported_key_sizes', + 'mcrypt_module_is_block_algorithm', + 'mcrypt_module_is_block_algorithm_mode', 'mcrypt_module_is_block_mode', + 'mcrypt_module_open', 'mcrypt_module_self_test', 'mcrypt_ofb', 'md5', + 'md5_file', 'mdecrypt_generic', 'metaphone', 'method_exists', 'mhash', + 'mhash_count', 'mhash_get_block_size', 'mhash_get_hash_name', + 'mhash_keygen_s2k', 'microtime', 'min', 'ming_setcubicthreshold', + 'ming_setscale', 'ming_useswfversion', 'mkdir', 'mktime', + 'move_uploaded_file', 'msession_connect', 'msession_count', + 'msession_create', 'msession_destroy', 'msession_disconnect', + 'msession_find', 'msession_get', 'msession_get_array', 'msession_getdata', + 'msession_inc', 'msession_list', 'msession_listvar', 'msession_lock', + 'msession_plugin', 'msession_randstr', 'msession_set', + 'msession_set_array', 'msession_setdata', 'msession_timeout', + 'msession_uniq', 'msession_unlock', 'msql', 'msql_affected_rows', + 'msql_close', 'msql_connect', 'msql_create_db', 'msql_createdb', + 'msql_data_seek', 'msql_dbname', 'msql_drop_db', 'msql_dropdb', + 'msql_error', 'msql_fetch_array', 'msql_fetch_field', 'msql_fetch_object', + 'msql_fetch_row', 'msql_field_seek', 'msql_fieldflags', 'msql_fieldlen', + 'msql_fieldname', 'msql_fieldtable', 'msql_fieldtype', 'msql_free_result', + 'msql_freeresult', 'msql_list_dbs', 'msql_list_fields', 'msql_list_tables', + 'msql_listdbs', 'msql_listfields', 'msql_listtables', 'msql_num_fields', + 'msql_num_rows', 'msql_numfields', 'msql_numrows', 'msql_pconnect', + 'msql_query', 'msql_regcase', 'msql_result', 'msql_select_db', + 'msql_selectdb', 'msql_tablename', 'mssql_bind', 'mssql_close', + 'mssql_connect', 'mssql_data_seek', 'mssql_execute', 'mssql_fetch_array', + 'mssql_fetch_assoc', 'mssql_fetch_batch', 'mssql_fetch_field', + 'mssql_fetch_object', 'mssql_fetch_row', 'mssql_field_length', + 'mssql_field_name', 'mssql_field_seek', 'mssql_field_type', + 'mssql_free_result', 'mssql_get_last_message', 'mssql_guid_string', + 'mssql_init', 'mssql_min_error_severity', 'mssql_min_message_severity', + 'mssql_next_result', 'mssql_num_fields', 'mssql_num_rows', + 'mssql_pconnect', 'mssql_query', 'mssql_result', 'mssql_rows_affected', + 'mssql_select_db', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'muscat_close', + 'muscat_get', 'muscat_give', 'muscat_setup', 'muscat_setup_net', + 'mysql_affected_rows', 'mysql_change_user', 'mysql_character_set_name', + 'mysql_close', 'mysql_connect', 'mysql_create_db', 'mysql_data_seek', + 'mysql_db_name', 'mysql_db_query', 'mysql_drop_db', 'mysql_errno', + 'mysql_error', 'mysql_escape_string', 'mysql_fetch_array', + 'mysql_fetch_assoc', 'mysql_fetch_field', 'mysql_fetch_lengths', + 'mysql_fetch_object', 'mysql_fetch_row', 'mysql_field_flags', + 'mysql_field_len', 'mysql_field_name', 'mysql_field_seek', + 'mysql_field_table', 'mysql_field_type', 'mysql_free_result', + 'mysql_get_client_info', 'mysql_get_host_info', 'mysql_get_proto_info', + 'mysql_get_server_info', 'mysql_info', 'mysql_insert_id', + 'mysql_list_dbs', 'mysql_list_fields', 'mysql_list_processes', + 'mysql_list_tables', 'mysql_num_fields', 'mysql_num_rows', + 'mysql_pconnect', 'mysql_ping', 'mysql_query', 'mysql_real_escape_string', + 'mysql_result', 'mysql_select_db', 'mysql_stat', 'mysql_tablename', + 'mysql_thread_id', 'mysql_unbuffered_query', 'natcasesort', 'natsort', + 'ncur', 'ncurses_addch', 'ncurses_addchnstr', 'ncurses_addchstr', + 'ncurses_addnstr', 'ncurses_addstr', 'ncurses_assume_default_colors', + 'ncurses_attroff', 'ncurses_attron', 'ncurses_attrset', + 'ncurses_baudrate', 'ncurses_beep', 'ncurses_bkgd', 'ncurses_bkgdset', + 'ncurses_border', 'ncurses_can_change_color', 'ncurses_cbreak', + 'ncurses_clear', 'ncurses_clrtobot', 'ncurses_clrtoeol', + 'ncurses_color_set', 'ncurses_curs_set', 'ncurses_def_prog_mode', + 'ncurses_def_shell_mode', 'ncurses_define_key', 'ncurses_delay_output', + 'ncurses_delch', 'ncurses_deleteln', 'ncurses_delwin', 'ncurses_doupdate', + 'ncurses_echo', 'ncurses_echochar', 'ncurses_end', 'ncurses_erase', + 'ncurses_erasechar', 'ncurses_filter', 'ncurses_flash', + 'ncurses_flushinp', 'ncurses_getch', 'ncurses_getmouse', + 'ncurses_halfdelay', 'ncurses_has_ic', 'ncurses_has_il', + 'ncurses_has_key', 'ncurses_hline', 'ncurses_inch', 'ncurses_init', + 'ncurses_init_color', 'ncurses_init_pair', 'ncurses_insch', + 'ncurses_insdelln', 'ncurses_insertln', 'ncurses_insstr', 'ncurses_instr', + 'ncurses_isendwin', 'ncurses_keyok', 'ncurses_killchar', + 'ncurses_longname', 'ncurses_mouseinterval', 'ncurses_mousemask', + 'ncurses_move', 'ncurses_mvaddch', 'ncurses_mvaddchnstr', + 'ncurses_mvaddchstr', 'ncurses_mvaddnstr', 'ncurses_mvaddstr', + 'ncurses_mvcur', 'ncurses_mvdelch', 'ncurses_mvgetch', 'ncurses_mvhline', + 'ncurses_mvinch', 'ncurses_mvvline', 'ncurses_mvwaddstr', 'ncurses_napms', + 'ncurses_newwin', 'ncurses_nl', 'ncurses_nocbreak', 'ncurses_noecho', + 'ncurses_nonl', 'ncurses_noqiflush', 'ncurses_noraw', 'ncurses_putp', + 'ncurses_qiflush', 'ncurses_raw', 'ncurses_refresh', 'ncurses_resetty', + 'ncurses_savetty', 'ncurses_scr_dump', 'ncurses_scr_init', + 'ncurses_scr_restore', 'ncurses_scr_set', 'ncurses_scrl', + 'ncurses_slk_attr', 'ncurses_slk_attroff', 'ncurses_slk_attron', + 'ncurses_slk_attrset', 'ncurses_slk_clear', 'ncurses_slk_color', + 'ncurses_slk_init', 'ncurses_slk_noutrefresh', 'ncurses_slk_refresh', + 'ncurses_slk_restore', 'ncurses_slk_touch', 'ncurses_standend', + 'ncurses_standout', 'ncurses_start_color', 'ncurses_termattrs', + 'ncurses_termname', 'ncurses_timeout', 'ncurses_typeahead', + 'ncurses_ungetch', 'ncurses_ungetmouse', 'ncurses_use_default_colors', + 'ncurses_use_env', 'ncurses_use_extended_names', 'ncurses_vidattr', + 'ncurses_vline', 'ncurses_wrefresh', 'next', 'ngettext', 'nl2br', + 'nl_langinfo', 'notes_body', 'notes_copy_db', 'notes_create_db', + 'notes_create_note', 'notes_drop_db', 'notes_find_note', + 'notes_header_info', 'notes_list_msgs', 'notes_mark_read', + 'notes_mark_unread', 'notes_nav_create', 'notes_search', 'notes_unread', + 'notes_version', 'number_format', 'ob_clean', 'ob_end_clean', + 'ob_end_flush', 'ob_flush', 'ob_get_contents', 'ob_get_length', + 'ob_get_level', 'ob_gzhandler', 'ob_iconv_handler', 'ob_implicit_flush', + 'ob_start', 'ocibindbyname', 'ocicancel', 'ocicollappend', + 'ocicollassign', 'ocicollassignelem', 'ocicollgetelem', 'ocicollmax', + 'ocicollsize', 'ocicolltrim', 'ocicolumnisnull', 'ocicolumnname', + 'ocicolumnprecision', 'ocicolumnscale', 'ocicolumnsize', 'ocicolumntype', + 'ocicolumntyperaw', 'ocicommit', 'ocidefinebyname', 'ocierror', + 'ociexecute', 'ocifetch', 'ocifetchinto', 'ocifetchstatement', + 'ocifreecollection', 'ocifreecursor', 'ocifreedesc', 'ocifreestatement', + 'ociinternaldebug', 'ociloadlob', 'ocilogoff', 'ocilogon', + 'ocinewcollection', 'ocinewcursor', 'ocinewdescriptor', 'ocinlogon', + 'ocinumcols', 'ociparse', 'ociplogon', 'ociresult', 'ocirollback', + 'ocirowcount', 'ocisavelob', 'ocisavelobfile', 'ociserverversion', + 'ocisetprefetch', 'ocistatementtype', 'ociwritelobtofile', 'octdec', + 'odbc_autocommit', 'odbc_binmode', 'odbc_close', 'odbc_close_all', + 'odbc_columnprivileges', 'odbc_columns', 'odbc_commit', 'odbc_connect', + 'odbc_cursor', 'odbc_do', 'odbc_error', 'odbc_errormsg', 'odbc_exec', + 'odbc_execute', 'odbc_fetch_array', 'odbc_fetch_into', + 'odbc_fetch_object', 'odbc_fetch_row', 'odbc_field_len', + 'odbc_field_name', 'odbc_field_num', 'odbc_field_precision', + 'odbc_field_scale', 'odbc_field_type', 'odbc_foreignkeys', + 'odbc_free_result', 'odbc_gettypeinfo', 'odbc_longreadlen', + 'odbc_next_result', 'odbc_num_fields', 'odbc_num_rows', 'odbc_pconnect', + 'odbc_prepare', 'odbc_primarykeys', 'odbc_procedurecolumns', + 'odbc_procedures', 'odbc_result', 'odbc_result_all', 'odbc_rollback', + 'odbc_setoption', 'odbc_specialcolumns', 'odbc_statistics', + 'odbc_tableprivileges', 'odbc_tables', 'opendir', 'openlog', + 'openssl_csr_export', 'openssl_csr_export_to_file', 'openssl_csr_new', + 'openssl_csr_sign', 'openssl_error_string', 'openssl_free_key', + 'openssl_get_privatekey', 'openssl_get_publickey', 'openssl_open', + 'openssl_pkcs7_decrypt', 'openssl_pkcs7_encrypt', 'openssl_pkcs7_sign', + 'openssl_pkcs7_verify', 'openssl_pkey_export', + 'openssl_pkey_export_to_file', 'openssl_pkey_new', + 'openssl_private_decrypt', 'openssl_private_encrypt', + 'openssl_public_decrypt', 'openssl_public_encrypt', 'openssl_seal', + 'openssl_sign', 'openssl_verify', 'openssl_x509_check_private_key', + 'openssl_x509_checkpurpose', 'openssl_x509_export', + 'openssl_x509_export_to_file', 'openssl_x509_free', 'openssl_x509_parse', + 'openssl_x509_read', 'ora_bind', 'ora_close', 'ora_columnname', + 'ora_columnsize', 'ora_columntype', 'ora_commit', 'ora_commitoff', + 'ora_commiton', 'ora_do', 'ora_error', 'ora_errorcode', 'ora_exec', + 'ora_fetch', 'ora_fetch_into', 'ora_getcolumn', 'ora_logoff', 'ora_logon', + 'ora_numcols', 'ora_numrows', 'ora_open', 'ora_parse', 'ora_plogon', + 'ora_rollback', 'ord', 'overload', 'ovrimos_close', 'ovrimos_commit', + 'ovrimos_connect', 'ovrimos_cursor', 'ovrimos_exec', 'ovrimos_execute', + 'ovrimos_fetch_into', 'ovrimos_fetch_row', 'ovrimos_field_len', + 'ovrimos_field_name', 'ovrimos_field_num', 'ovrimos_field_type', + 'ovrimos_free_result', 'ovrimos_longreadlen', 'ovrimos_num_fields', + 'ovrimos_num_rows', 'ovrimos_prepare', 'ovrimos_result', + 'ovrimos_result_all', 'ovrimos_rollback', 'pack', 'parse_ini_file', + 'parse_str', 'parse_url', 'passthru', 'pathinfo', 'pclose', 'pcntl_exec', + 'pcntl_fork', 'pcntl_signal', 'pcntl_waitpid', 'pcntl_wexitstatus', + 'pcntl_wifexited', 'pcntl_wifsignaled', 'pcntl_wifstopped', + 'pcntl_wstopsig', 'pcntl_wtermsig', 'pdf_add_annotation', + 'pdf_add_bookmark', 'pdf_add_launchlink', 'pdf_add_locallink', + 'pdf_add_note', 'pdf_add_outline', 'pdf_add_pdflink', 'pdf_add_thumbnail', + 'pdf_add_weblink', 'pdf_arc', 'pdf_arcn', 'pdf_attach_file', + 'pdf_begin_page', 'pdf_begin_pattern', 'pdf_begin_template', 'pdf_circle', + 'pdf_clip', 'pdf_close', 'pdf_close_image', 'pdf_close_pdi', + 'pdf_close_pdi_page', 'pdf_closepath', 'pdf_closepath_fill_stroke', + 'pdf_closepath_stroke', 'pdf_concat', 'pdf_continue_text', 'pdf_curveto', + 'pdf_delete', 'pdf_end_page', 'pdf_end_pattern', 'pdf_end_template', + 'pdf_endpath', 'pdf_fill', 'pdf_fill_stroke', 'pdf_findfont', + 'pdf_get_buffer', 'pdf_get_font', 'pdf_get_fontname', 'pdf_get_fontsize', + 'pdf_get_image_height', 'pdf_get_image_width', 'pdf_get_majorversion', + 'pdf_get_minorversion', 'pdf_get_parameter', 'pdf_get_pdi_value', + 'pdf_get_value', 'pdf_initgraphics', 'pdf_lineto', 'pdf_makespotcolor', + 'pdf_moveto', 'pdf_new', 'pdf_open', 'pdf_open_ccitt', 'pdf_open_file', + 'pdf_open_gif', 'pdf_open_image', 'pdf_open_image_file', 'pdf_open_jpeg', + 'pdf_open_memory_image', 'pdf_open_pdi', 'pdf_open_pdi_page', + 'pdf_open_png', 'pdf_open_tiff', 'pdf_place_image', 'pdf_place_pdi_page', + 'pdf_rect', 'pdf_restore', 'pdf_rotate', 'pdf_save', 'pdf_scale', + 'pdf_set_border_color', 'pdf_set_border_dash', 'pdf_set_border_style', + 'pdf_set_char_spacing', 'pdf_set_duration', 'pdf_set_font', + 'pdf_set_horiz_scaling', 'pdf_set_info', 'pdf_set_info_author', + 'pdf_set_info_creator', 'pdf_set_info_keywords', 'pdf_set_info_subject', + 'pdf_set_info_title', 'pdf_set_leading', 'pdf_set_parameter', + 'pdf_set_text_pos', 'pdf_set_text_rendering', 'pdf_set_text_rise', + 'pdf_set_transition', 'pdf_set_value', 'pdf_set_word_spacing', + 'pdf_setcolor', 'pdf_setdash', 'pdf_setflat', 'pdf_setfont', + 'pdf_setgray', 'pdf_setgray_fill', 'pdf_setgray_stroke', 'pdf_setlinecap', + 'pdf_setlinejoin', 'pdf_setlinewidth', 'pdf_setmatrix', + 'pdf_setmiterlimit', 'pdf_setpolydash', 'pdf_setrgbcolor', + 'pdf_setrgbcolor_fill', 'pdf_setrgbcolor_stroke', 'pdf_show', + 'pdf_show_boxed', 'pdf_show_xy', 'pdf_skew', 'pdf_stringwidth', + 'pdf_stroke', 'pdf_translate', 'pfpro_cleanup', 'pfpro_init', + 'pfpro_process', 'pfpro_process_raw', 'pfpro_version', 'pfsockopen', + 'pg_affected_rows', 'pg_cancel_query', 'pg_client_encoding', 'pg_close', + 'pg_connect', 'pg_connection_busy', 'pg_connection_reset', + 'pg_connection_status', 'pg_copy_from', 'pg_copy_to', 'pg_dbname', + 'pg_end_copy', 'pg_escape_bytea', 'pg_escape_string', 'pg_fetch_array', + 'pg_fetch_object', 'pg_fetch_result', 'pg_fetch_row', 'pg_field_is_null', + 'pg_field_name', 'pg_field_num', 'pg_field_prtlen', 'pg_field_size', + 'pg_field_type', 'pg_free_result', 'pg_get_result', 'pg_host', + 'pg_last_error', 'pg_last_notice', 'pg_last_oid', 'pg_lo_close', + 'pg_lo_create', 'pg_lo_export', 'pg_lo_import', 'pg_lo_open', + 'pg_lo_read', 'pg_lo_seek', 'pg_lo_tell', 'pg_lo_unlink', 'pg_lo_write', + 'pg_num_fields', 'pg_num_rows', 'pg_options', 'pg_pconnect', 'pg_port', + 'pg_put_line', 'pg_query', 'pg_result_error', 'pg_result_status', + 'pg_send_query', 'pg_set_client_encoding', 'pg_trace', 'pg_tty', + 'pg_untrace', 'php_logo_guid', 'php_sapi_name', 'php_uname', 'phpcredits', + 'phpinfo', 'phpversion', 'pi', 'png2wbmp', 'popen', 'pos', 'posix_ctermid', + 'posix_getcwd', 'posix_getegid', 'posix_geteuid', 'posix_getgid', + 'posix_getgrgid', 'posix_getgrnam', 'posix_getgroups', 'posix_getlogin', + 'posix_getpgid', 'posix_getpgrp', 'posix_getpid', 'posix_getppid', + 'posix_getpwnam', 'posix_getpwuid', 'posix_getrlimit', 'posix_getsid', + 'posix_getuid', 'posix_isatty', 'posix_kill', 'posix_mkfifo', + 'posix_setegid', 'posix_seteuid', 'posix_setgid', 'posix_setpgid', + 'posix_setsid', 'posix_setuid', 'posix_times', 'posix_ttyname', + 'posix_uname', 'pow', 'preg_grep', 'preg_match', 'preg_match_all', + 'preg_quote', 'preg_replace', 'preg_replace_callback', 'preg_split', + 'prev', 'print', 'print_r', 'printer_abort', 'printer_close', + 'printer_create_brush', 'printer_create_dc', 'printer_create_font', + 'printer_create_pen', 'printer_delete_brush', 'printer_delete_dc', + 'printer_delete_font', 'printer_delete_pen', 'printer_draw_bmp', + 'printer_draw_chord', 'printer_draw_elipse', 'printer_draw_line', + 'printer_draw_pie', 'printer_draw_rectangle', 'printer_draw_roundrect', + 'printer_draw_text', 'printer_end_doc', 'printer_end_page', + 'printer_get_option', 'printer_list', 'printer_logical_fontheight', + 'printer_open', 'printer_select_brush', 'printer_select_font', + 'printer_select_pen', 'printer_set_option', 'printer_start_doc', + 'printer_start_page', 'printer_write', 'printf', 'pspell_add_to_personal', + 'pspell_add_to_session', 'pspell_check', 'pspell_clear_session', + 'pspell_config_create', 'pspell_config_ignore', 'pspell_config_mode', + 'pspell_config_personal', 'pspell_config_repl', + 'pspell_config_runtogether', 'pspell_config_save_repl', 'pspell_new', + 'pspell_new_config', 'pspell_new_personal', 'pspell_save_wordlist', + 'pspell_store_replacement', 'pspell_suggest', 'putenv', 'qdom_error', + 'qdom_tree', 'quoted_printable_decode', 'quotemeta', 'rad2deg', 'rand', + 'range', 'rawurldecode', 'rawurlencode', 'read_exif_data', 'readdir', + 'readfile', 'readgzfile', 'readline', 'readline_add_history', + 'readline_clear_history', 'readline_completion_function', 'readline_info', + 'readline_list_history', 'readline_read_history', 'readline_write_history', + 'readlink', 'realpath', 'recode', 'recode_file', 'recode_string', + 'register_shutdown_function', 'register_tick_function', 'rename', + 'require', 'require_once', 'reset', 'restore_error_handler', + 'restore_include_path', 'rewind', 'rewinddir', 'rmdir', 'round', 'rsort', + 'rtrim', 'sem_acquire', 'sem_get', 'sem_release', 'sem_remove', + 'serialize', 'sesam_affected_rows', 'sesam_commit', 'sesam_connect', + 'sesam_diagnostic', 'sesam_disconnect', 'sesam_errormsg', 'sesam_execimm', + 'sesam_fetch_array', 'sesam_fetch_result', 'sesam_fetch_row', + 'sesam_field_array', 'sesam_field_name', 'sesam_free_result', + 'sesam_num_fields', 'sesam_query', 'sesam_rollback', 'sesam_seek_row', + 'sesam_settransaction', 'session_cache_expire', 'session_cache_limiter', + 'session_decode', 'session_destroy', 'session_encode', + 'session_get_cookie_params', 'session_id', 'session_is_registered', + 'session_module_name', 'session_name', 'session_register', + 'session_save_path', 'session_set_cookie_params', + 'session_set_save_handler', 'session_start', 'session_unregister', + 'session_unset', 'session_write_close', 'set_error_handler', + 'set_file_buffer', 'set_include_path', 'set_magic_quotes_runtime', + 'set_time_limit', 'setcookie', 'setlocale', 'settype', 'shell_exec', + 'shm_attach', 'shm_detach', 'shm_get_var', 'shm_put_var', 'shm_remove', + 'shm_remove_var', 'shmop_close', 'shmop_delete', 'shmop_open', + 'shmop_read', 'shmop_size', 'shmop_write', 'show_source', 'shuffle', + 'similar_text', 'sin', 'sinh', 'sizeof', 'sleep', 'snmp_get_quick_print', + 'snmp_set_quick_print', 'snmpget', 'snmprealwalk', 'snmpset', 'snmpwalk', + 'snmpwalkoid', 'socket_accept', 'socket_bind', 'socket_close', + 'socket_connect', 'socket_create', 'socket_create_listen', + 'socket_create_pair', 'socket_fd_alloc', 'socket_fd_clear', + 'socket_fd_free', 'socket_fd_isset', 'socket_fd_set', 'socket_fd_zero', + 'socket_get_status', 'socket_getopt', 'socket_getpeername', + 'socket_getsockname', 'socket_iovec_add', 'socket_iovec_alloc', + 'socket_iovec_delete', 'socket_iovec_fetch', 'socket_iovec_free', + 'socket_iovec_set', 'socket_last_error', 'socket_listen', 'socket_read', + 'socket_readv', 'socket_recv', 'socket_recvfrom', 'socket_recvmsg', + 'socket_select', 'socket_send', 'socket_sendmsg', 'socket_sendto', + 'socket_set_blocking', 'socket_set_nonblock', 'socket_set_timeout', + 'socket_setopt', 'socket_shutdown', 'socket_strerror', 'socket_write', + 'socket_writev', 'sort', 'soundex', 'split', 'spliti', 'sprintf', + 'sql_regcase', 'sqrt', 'srand', 'sscanf', 'stat', 'str_pad', 'str_repeat', + 'str_replace', 'str_rot13', 'strcasecmp', 'strchr', 'strcmp', 'strcoll', + 'strcspn', 'strftime', 'strip_tags', 'stripcslashes', 'stripslashes', + 'stristr', 'strlen', 'strnatcasecmp', 'strnatcmp', 'strncasecmp', + 'strncmp', 'strpos', 'strrchr', 'strrev', 'strrpos', 'strspn', 'strstr', + 'strtok', 'strtolower', 'strtotime', 'strtoupper', 'strtr', 'strval', + 'substr', 'substr_count', 'substr_replace', 'swf_actiongeturl', + 'swf_actiongotoframe', 'swf_actiongotolabel', 'swf_actionnextframe', + 'swf_actionplay', 'swf_actionprevframe', 'swf_actionsettarget', + 'swf_actionstop', 'swf_actiontogglequality', 'swf_actionwaitforframe', + 'swf_addbuttonrecord', 'swf_addcolor', 'swf_closefile', + 'swf_definebitmap', 'swf_definefont', 'swf_defineline', 'swf_definepoly', + 'swf_definerect', 'swf_definetext', 'swf_endbutton', 'swf_enddoaction', + 'swf_endshape', 'swf_endsymbol', 'swf_fontsize', 'swf_fontslant', + 'swf_fonttracking', 'swf_getbitmapinfo', 'swf_getfontinfo', + 'swf_getframe', 'swf_labelframe', 'swf_lookat', 'swf_modifyobject', + 'swf_mulcolor', 'swf_nextid', 'swf_oncondition', 'swf_openfile', + 'swf_ortho', 'swf_ortho2', 'swf_perspective', 'swf_placeobject', + 'swf_polarview', 'swf_popmatrix', 'swf_posround', 'swf_pushmatrix', + 'swf_removeobject', 'swf_rotate', 'swf_scale', 'swf_setfont', + 'swf_setframe', 'swf_shapearc', 'swf_shapecurveto', 'swf_shapecurveto3', + 'swf_shapefillbitmapclip', 'swf_shapefillbitmaptile', 'swf_shapefilloff', + 'swf_shapefillsolid', 'swf_shapelinesolid', 'swf_shapelineto', + 'swf_shapemoveto', 'swf_showframe', 'swf_startbutton', + 'swf_startdoaction', 'swf_startshape', 'swf_startsymbol', 'swf_textwidth', + 'swf_translate', 'swf_viewport', 'swfaction', 'swfbitmap', + 'swfbitmap.getheight', 'swfbitmap.getwidth', 'swfbutton', + 'swfbutton.addaction', 'swfbutton.addshape', 'swfbutton.setaction', + 'swfbutton.setdown', 'swfbutton.sethit', 'swfbutton.setover', + 'swfbutton.setup', 'swfbutton_keypress', 'swfdisplayitem', + 'swfdisplayitem.addcolor', 'swfdisplayitem.move', 'swfdisplayitem.moveto', + 'swfdisplayitem.multcolor', 'swfdisplayitem.remove', + 'swfdisplayitem.rotate', 'swfdisplayitem.rotateto', + 'swfdisplayitem.scale', 'swfdisplayitem.scaleto', + 'swfdisplayitem.setdepth', 'swfdisplayitem.setname', + 'swfdisplayitem.setratio', 'swfdisplayitem.skewx', + 'swfdisplayitem.skewxto', 'swfdisplayitem.skewy', + 'swfdisplayitem.skewyto', 'swffill', 'swffill.moveto', 'swffill.rotateto', + 'swffill.scaleto', 'swffill.skewxto', 'swffill.skewyto', 'swffont', + 'swffont.getwidth', 'swfgradient', 'swfgradient.addentry', 'swfmorph', + 'swfmorph.getshape1', 'swfmorph.getshape2', 'swfmovie', 'swfmovie.add', + 'swfmovie.nextframe', 'swfmovie.output', 'swfmovie.remove', + 'swfmovie.save', 'swfmovie.setbackground', 'swfmovie.setdimension', + 'swfmovie.setframes', 'swfmovie.setrate', 'swfmovie.streammp3', + 'swfshape', 'swfshape.addfill', 'swfshape.drawcurve', + 'swfshape.drawcurveto', 'swfshape.drawline', 'swfshape.drawlineto', + 'swfshape.movepen', 'swfshape.movepento', 'swfshape.setleftfill', + 'swfshape.setline', 'swfshape.setrightfill', 'swfsprite', 'swfsprite.add', + 'swfsprite.nextframe', 'swfsprite.remove', 'swfsprite.setframes', + 'swftext', 'swftext.addstring', 'swftext.getwidth', 'swftext.moveto', + 'swftext.setcolor', 'swftext.setfont', 'swftext.setheight', + 'swftext.setspacing', 'swftextfield', 'swftextfield.addstring', + 'swftextfield.align', 'swftextfield.setbounds', 'swftextfield.setcolor', + 'swftextfield.setfont', 'swftextfield.setheight', + 'swftextfield.setindentation', 'swftextfield.setleftmargin', + 'swftextfield.setlinespacing', 'swftextfield.setmargins', + 'swftextfield.setname', 'swftextfield.setrightmargin', + 'sybase_affected_rows', 'sybase_close', 'sybase_connect', + 'sybase_data_seek', 'sybase_fetch_array', 'sybase_fetch_field', + 'sybase_fetch_object', 'sybase_fetch_row', 'sybase_field_seek', + 'sybase_free_result', 'sybase_get_last_message', + 'sybase_min_client_severity', 'sybase_min_error_severity', + 'sybase_min_message_severity', 'sybase_min_server_severity', + 'sybase_num_fields', 'sybase_num_rows', 'sybase_pconnect', 'sybase_query', + 'sybase_result', 'sybase_select_db', 'symlink', 'syslog', 'system', 'tan', + 'tanh', 'tempnam', 'textdomain', 'time', 'tmpfile', 'touch', + 'trigger_error', 'trim', 'uasort', 'ucfirst', 'ucwords', + 'udm_add_search_limit', 'udm_alloc_agent', 'udm_api_version', + 'udm_cat_list', 'udm_cat_path', 'udm_check_charset', 'udm_check_stored', + 'udm_clear_search_limits', 'udm_close_stored', 'udm_crc32', 'udm_errno', + 'udm_error', 'udm_find', 'udm_free_agent', 'udm_free_ispell_data', + 'udm_free_res', 'udm_get_doc_count', 'udm_get_res_field', + 'udm_get_res_param', 'udm_load_ispell_data', 'udm_open_stored', + 'udm_set_agent_param', 'uksort', 'umask', 'uniqid', 'unixtojd', 'unlink', + 'unpack', 'unregister_tick_function', 'unserialize', 'unset', 'urldecode', + 'urlencode', 'user_error', 'usleep', 'usort', 'utf8_decode', 'utf8_encode', + 'var_dump', 'var_export', 'variant', 'version_compare', 'virtual', 'vpo', + 'vpopmail_add_alias_domain', 'vpopmail_add_alias_domain_ex', + 'vpopmail_add_domain', 'vpopmail_add_domain_ex', 'vpopmail_add_user', + 'vpopmail_alias_add', 'vpopmail_alias_del', 'vpopmail_alias_del_domain', + 'vpopmail_alias_get', 'vpopmail_alias_get_all', 'vpopmail_auth_user', + 'vpopmail_del_domain_ex', 'vpopmail_del_user', 'vpopmail_error', + 'vpopmail_passwd', 'vpopmail_set_user_quota', 'vprintf', 'vsprintf', + 'w32api_deftype', 'w32api_init_dtype', 'w32api_invoke_function', + 'w32api_register_function', 'w32api_set_call_method', 'wddx_add_vars', + 'wddx_deserialize', 'wddx_packet_end', 'wddx_packet_start', + 'wddx_serialize_value', 'wddx_serialize_vars', 'wordwrap', + 'xml_error_string', 'xml_get_current_byte_index', + 'xml_get_current_column_number', 'xml_get_current_line_number', + 'xml_get_error_code', 'xml_parse', 'xml_parse_into_struct', + 'xml_parser_create', 'xml_parser_create_ns', 'xml_parser_free', + 'xml_parser_get_option', 'xml_parser_set_option', + 'xml_set_character_data_handler', 'xml_set_default_handler', + 'xml_set_element_handler', 'xml_set_end_namespace_decl_handler', + 'xml_set_external_entity_ref_handler', 'xml_set_notation_decl_handler', + 'xml_set_object', 'xml_set_processing_instruction_handler', + 'xml_set_start_namespace_decl_handler', + 'xml_set_unparsed_entity_decl_handler', 'xmldoc', 'xmldocfile', + 'xmlrpc_decode', 'xmlrpc_decode_request', 'xmlrpc_encode', + 'xmlrpc_encode_request', 'xmlrpc_get_type', + 'xmlrpc_parse_method_descriptions', + 'xmlrpc_server_add_introspection_data', 'xmlrpc_server_call_method', + 'xmlrpc_server_create', 'xmlrpc_server_destroy', + 'xmlrpc_server_register_introspection_callback', + 'xmlrpc_server_register_method', 'xmlrpc_set_type', 'xmltree', + 'xpath_eval', 'xpath_eval_expression', 'xpath_new_context', 'xptr_eval', + 'xptr_new_context', 'xslt_create', 'xslt_errno', 'xslt_error', + 'xslt_free', 'xslt_process', 'xslt_set_base', 'xslt_set_encoding', + 'xslt_set_error_handler', 'xslt_set_log', 'xslt_set_sax_handler', + 'xslt_set_sax_handlers', 'xslt_set_scheme_handler', + 'xslt_set_scheme_handlers', 'yaz_addinfo', 'yaz_ccl_conf', + 'yaz_ccl_parse', 'yaz_close', 'yaz_connect', 'yaz_database', + 'yaz_element', 'yaz_errno', 'yaz_error', 'yaz_hits', 'yaz_itemorder', + 'yaz_present', 'yaz_range', 'yaz_record', 'yaz_scan', 'yaz_scan_result', + 'yaz_search', 'yaz_sort', 'yaz_syntax', 'yaz_wait', 'yp_all', 'yp_cat', + 'yp_err_string', 'yp_errno', 'yp_first', 'yp_get_default_domain', + 'yp_master', 'yp_match', 'yp_next', 'yp_order', 'zend_logo_guid', + 'zend_version', 'zip_close', 'zip_entry_close', + 'zip_entry_compressedsize', 'zip_entry_compressionmethod', + 'zip_entry_filesize', 'zip_entry_name', 'zip_entry_open', + 'zip_entry_read', 'zip_open', 'zip_read' + ), + 1 => $CONTEXT . '/functions', + 2 => 'color:#006;', + 3 => false, + // urls (the name of a function, with brackets at the end, or a string with {FNAME} in it like GeSHi 1.0.X) + // e.g. geshi_php_convert_url(), or http://www.php.net/{FNAME} + 4 => 'geshi_php_convert_url()' + ) +); + +$this->_contextCharactersDisallowedBeforeKeywords = array('$', '_'); +$this->_contextCharactersDisallowedAfterKeywords = array("'", '_'); +$this->_contextSymbols = array( + 0 => array( + 0 => array( + '(', ')', ',', ';', ':', '[', ']', + '+', '-', '*', '/', '&', '|', '!', '<', '>', + '{', '}', '=', '@' + ), + // name + 1 => $CONTEXT . '/sym0', + // style + 2 => 'color:#008000;' + ) +); +$this->_contextRegexps = array( + 0 => array( + // The regexps + // each regex in this array will be tested and styled the same + 0 => array( + '#(\$\$?[a-zA-Z_][a-zA-Z0-9_]*)#', // This is a variable in PHP + ), + // index 1 is a string that strpos can use + 1 => '$', + // This is the special bit ;) + // For each bracket pair in the regex above, you can specify a name and style for it + 2 => array( + // index 1 is for the first bracket pair + // so for PHP it's everything within the (...) + // of course we could have specified the regex + // as #$([a-zA-Z_][a-zA-Z0-9_]*)# (note the change + // in place for the first open bracket), then the + // name and style for this part would not include + // the beginning $ + 1 => array($CONTEXT . '/var', 'color:#33f;', false), + ) + ), + // These are prebuild functions that can be called to add number + // support to a context. Call exactly as below + 1 => geshi_use_doubles($CONTEXT), + 2 => geshi_use_integers($CONTEXT) +); +$this->_objectSplitters = array( + 0 => array( + 0 => array('->'), + 1 => $CONTEXT . '/oodynamic', + 2 => 'color:#933;', + 3 => false + ), + 1 => array( + 0 => array('::'), + 1 => $CONTEXT . '/oostatic', + 2 => 'color:#933;font-weight:bold;', + 3 => false + ) +); + +/** + * This just demonstrates the concept... + * You can use a function like this, called + * by the URL entry of the keywords array, + * to do whatever you like with the URL. + * These functions that convert urls take one + * mandatory parameter - the keyword the URL + * is being built for. + * + * You can then have some kind of logic in this + * function to return a URL based on the + * keyword... saves on those nasty hacks that + * were used in 1.0.X to do this. + * + * Make sure you do the function_exists check! These + * context files will be included multiple times + */ + if (!function_exists('geshi_php_convert_url')) { + function geshi_php_convert_url ($keyword) + { + return 'http://www.php.net/' . $keyword; + } +} + +?> diff --git a/paste/include/geshi/contexts/php/single_comment.php b/paste/include/geshi/contexts/php/single_comment.php new file mode 100644 index 0000000..c367100 --- /dev/null +++ b/paste/include/geshi/contexts/php/single_comment.php @@ -0,0 +1,47 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('//', '#'), + 1 => array("\n", '?>'), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#888;font-style:italic;'); +$this->_contextStyleType = GESHI_STYLE_COMMENTS; +$this->_delimiterParseData = GESHI_CHILD_PARSE_LEFT; + +?> diff --git a/paste/include/geshi/contexts/qbasic/comment.php b/paste/include/geshi/contexts/qbasic/comment.php new file mode 100644 index 0000000..a9a3a39 --- /dev/null +++ b/paste/include/geshi/contexts/qbasic/comment.php @@ -0,0 +1,47 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array("'", 'REM'), + 1 => array("\n"), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#888;font-style:italic;'); +$this->_contextStyleType = GESHI_STYLE_COMMENTS; +$this->_delimiterParseData = GESHI_CHILD_PARSE_LEFT; + +?> diff --git a/paste/include/geshi/contexts/qbasic/qbasic.php b/paste/include/geshi/contexts/qbasic/qbasic.php new file mode 100644 index 0000000..72e72cf --- /dev/null +++ b/paste/include/geshi/contexts/qbasic/qbasic.php @@ -0,0 +1,68 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_childContexts = array( + new GeSHiContext('qbasic', $DIALECT, 'string'), + new GeSHiContext('qbasic', $DIALECT, 'comment') +); + +$this->_contextKeywords = array( + 0 => array( + 0 => array('and', 'as', 'call', 'dim', 'end', 'goto', 'if', 'integer', 'print', 'sub', 'then'), + 1 => $CONTEXT . '/kw0', + 2 => 'color: #006;', + 3 => false, + 4 => 'http://qboho.qbasicnews.com/qboho/qck{FNAME}.html' + ) +); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + '(', ')', ',', ':', ';', '=', '<', '>' + ), + // name (should names have / in them like normal contexts? YES + 1 => $CONTEXT . '/sym0', + // style + 2 => 'color:#008000;' + ) +); +$this->_contextRegexps = array( + 0 => geshi_use_doubles($CONTEXT), + 1 => geshi_use_integers($CONTEXT) +); +// @todo [blocking 1.1.5] languages should be able to set the styles of their numbers + +?> diff --git a/paste/include/geshi/contexts/qbasic/string.php b/paste/include/geshi/contexts/qbasic/string.php new file mode 100644 index 0000000..9f8a79a --- /dev/null +++ b/paste/include/geshi/contexts/qbasic/string.php @@ -0,0 +1,46 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('"'), + 1 => array('"'), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#f00;'); +$this->_contextStyleType = GESHI_STYLE_STRINGS; + +?> diff --git a/paste/include/geshi/contexts/web3d/comment.php b/paste/include/geshi/contexts/web3d/comment.php new file mode 100644 index 0000000..16c2497 --- /dev/null +++ b/paste/include/geshi/contexts/web3d/comment.php @@ -0,0 +1,48 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('#'), + 1 => array("\n"), + 2 => false + ) +); + +$this->_styler->setStyle($CONTEXT, 'color:#888;background-color:#EEE;font-style:bold;'); +$this->_contextStyleType = GESHI_STYLE_COMMENTS; +$this->_delimiterParseData = GESHI_CHILD_PARSE_LEFT; + +?> diff --git a/paste/include/geshi/contexts/web3d/string.php b/paste/include/geshi/contexts/web3d/string.php new file mode 100644 index 0000000..1dda5dc --- /dev/null +++ b/paste/include/geshi/contexts/web3d/string.php @@ -0,0 +1,50 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + 0 => array('"'), + 1 => array('"'), + 2 => false + ) +); + +$this->_childContexts = array( + new GeSHiCodeContext('web3d', $DIALECT, 'string_javascript'), +); + +$this->_styler->setStyle($CONTEXT, 'color:#933;'); +$this->_contextStyleType = GESHI_STYLE_STRINGS; + +?> diff --git a/paste/include/geshi/contexts/web3d/string_javascript.php b/paste/include/geshi/contexts/web3d/string_javascript.php new file mode 100644 index 0000000..cc7b84e --- /dev/null +++ b/paste/include/geshi/contexts/web3d/string_javascript.php @@ -0,0 +1,51 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array( + 0 => array( + // Why doesn't this work correctly? +// 0 => array('REGEX#[java|vrml|ecma]script:#'), + + // yet this works (three valid names for the same VRML scripting) + 0 => array('REGEX#javascript:#', 'REGEX#ecmascript:#', 'REGEX#vrmlscript:#'), + 1 => array('"'), + 2 => false + ) +); + +$this->_delimiterParseData = GESHI_CHILD_PARSE_LEFT; + +$this->_overridingChildContext = new GeSHiCodeContext('javascript'); + +?> diff --git a/paste/include/geshi/contexts/web3d/vrml1.php b/paste/include/geshi/contexts/web3d/vrml1.php new file mode 100644 index 0000000..c657149 --- /dev/null +++ b/paste/include/geshi/contexts/web3d/vrml1.php @@ -0,0 +1,214 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array(); + +$this->_childContexts = array( + new GeSHiContext('web3d', $DIALECT, 'comment'), + new GeSHiContext('web3d', $DIALECT, 'string') +); + +$this->_contextKeywords = array( + 0 => array( + // nodes + 0 => array( + // sensors + 'CylinderSensor', 'PlaneSensor', 'ProximitySensor', 'SphereSensor', + 'TimeSensor', 'TouchSensor', 'VisibilitySensor', + // interpolators + 'ColorInterpolator', 'CoordinateInterpolator', 'NormalInterpolator', + 'OrientationInterpolator', 'PositionInterpolator', 'ScalarInterpolator', + // grouping nodes + 'Anchor', 'Billboard', 'Collision', 'Group', 'LOD', 'Switch', 'Transform', + // bindables + 'Background', 'Fog', 'NavigationInfo', 'Viewpoint', + // lights + 'DirectionalLight', 'PointLight', 'SpotLight', + // shape and geometry + 'Box', 'Cone', 'Coordinate', 'Cylinder', 'ElevationGrid', 'Extrusion', + 'IndexedFaceSet', 'IndexedLineSet', 'PointSet', 'Shape', 'Sphere', 'Text', + // appearance + 'Appearance', 'Color', 'FontStyle', 'Material', + 'Normal', 'TextureCoordinate', 'TextureTransform', + // textures + 'ImageTexture', 'MovieTexture', 'PixelTexture', + // sound + 'AudioClip', 'Sound', + // other + 'Inline', 'Script', 'WorldInfo' + ), + // name + 1 => $CONTEXT . '/node', + // style + 2 => 'color:#b1b100;', + // case sensitive + 3 => true, + // url + 4 => 'http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-IS-VRML97WithAmendment1/part1/nodesRef.html#{FNAME}' + ), + 1 => array( + // fields of nodes + 0 => array( + // A + 'addChildren', 'ambientIntensity', 'appearance', 'attenuation', 'autoOffset', + 'avatarSize', 'axisOfRotation', + // B + 'backUrl', 'bboxCenter', 'bboxSize', 'beamWidth', 'beginCap', + 'bindTime', 'bottom', 'bottomRadius', 'bottomUrl', + // C + 'ccw', 'center', 'children', 'choice', 'collide', + 'collideTime', 'color', 'colorIndex', 'colorPerVertex', 'convex', + 'coord', 'coordIndex', 'creaseAngle', 'crossSection', 'cutOffAngle', + 'cycleInterval', 'cycleTime', + // D + 'description', 'diffuseColor', 'direction', 'directOutput', + 'diskAngle', 'duration_changed', + // E + 'emissiveColor', 'enabled', 'endCap', 'enterTime', 'exitTime', + // F + 'family', 'fieldOfView', 'fogType', 'fontStyle', 'fraction_changed', + 'frontUrl', + // G + 'geometry', 'groundAngle', 'groundColor', + // H + 'headlight', 'height', 'hitNormal_changed', 'hitPoint_changed', 'horizontal', + // I + 'image', 'info', 'intensity', 'isActive', 'isBound', 'isOver', + // J + 'jump', 'justify', + // K + 'key', 'keyValue', + // L + 'language', 'leftUrl', 'leftToRight','length', 'level', + 'location', 'loop', + // M + 'material', 'maxAngle', 'maxBack', 'maxExtent', 'maxFront', + 'maxPosition', 'minAngle', 'minBack', 'minFront', 'minPosition', + 'mustEvaluate', + // N + 'normal', 'normalIndex', 'normalPerVertex', + // O + 'offset', 'on', 'orientation', 'orientation_changed', + // P + 'parameter', 'pitch', 'point', 'position', 'position_changed', + 'priority', 'proxy', + // Q + + // R + 'radius', 'range', 'removeChildren', 'repeatS', 'repeatT', + 'rightUrl', 'rotation', 'rotation_changed', + // S + 'scale', 'scaleOrientation', 'set_bind', 'set_colorIndex', 'set_coordIndex', + 'set_crossSection', 'set_fraction', 'set_height', 'set_normalIndex', 'set_orientation', + 'set_spine', 'set_scale', 'set_texCoordIndex', 'shininess', 'side', + 'size', 'skyAngle', 'skyColor', 'solid', 'source', + 'spacing', 'spatialization', 'specularColor', 'speed', 'spine', + 'startTime', 'stopTime', 'string', 'style', + // T + 'texCoord', 'texCoordIndex', 'texture', 'textureTransform', 'time', + 'title', 'top', 'topUrl', 'topToBottom', 'touchTime', + 'trackPoint_changed', 'translation', 'translation_changed', 'transparency', 'type', + // U + 'url', + // V + 'value_changed', 'vector', 'visibilityLimit', 'visibilityRange', + // W + 'whichChoice', + // X + 'xDimension', 'xSpacing', + // Y + + // Z + 'zDimension', 'zSpacing' + ), + 1 => $CONTEXT . '/field', + 2 => 'font-weight:bold;color:red;', + 3 => true, + 4 => '' + ), + 2 => array( + // keywords + 0 => array( + 'DEF', 'USE', 'IS', 'PROTO', 'EXTERNPROTO', 'TO', 'ROUTE', + 'TRUE', 'FALSE', 'NULL', + ), + 1 => $CONTEXT . '/keyword', + 2 => 'font-weight:bold;color:blue;', + 3 => true, + 4 => '' + ), + 3 => array( + // field access types + 0 => array( + 'eventIn', 'eventOut', 'exposedField', 'field', + ), + 1 => $CONTEXT . '/fieldaccess', + 2 => 'font-weight:bold;color:purple;', + 3 => true, + 4 => '' + ), + 4 => array( + // field data types + 0 => array( + 'SFBool', 'SFColor', 'SFFloat', 'SFImage', 'SFInt32', 'SFNode', + 'SFRotation', 'SFString', 'SFTime', 'SFVec2f', 'SFVec3f', + 'MFColor', 'MFFloat', 'MFInt32', 'MFNode', + 'MFRotation', 'MFString', 'MFTime', 'MFVec2f', 'MFVec3f', + ), + 1 => $CONTEXT . '/fieldtype', + 2 => 'color:green;', + 3 => true, + 4 => '' + ) +); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + '{', '}' + ), + 1 => $CONTEXT . '/nodesymbol', + 2 => 'color:#008000;' + ), + 1 => array( + 0 => array( + '[', ']' + ), + 1 => $CONTEXT . '/arraysymbol', + 2 => 'color:#008000;' + ) +); + +?> \ No newline at end of file diff --git a/paste/include/geshi/contexts/web3d/vrml97.php b/paste/include/geshi/contexts/web3d/vrml97.php new file mode 100644 index 0000000..bf37220 --- /dev/null +++ b/paste/include/geshi/contexts/web3d/vrml97.php @@ -0,0 +1,218 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array(); + +$this->_childContexts = array( + new GeSHiContext('web3d', $DIALECT, 'comment'), + new GeSHiContext('web3d', $DIALECT, 'string') +); + +$this->_contextKeywords = array( + 0 => array( + // nodes + 0 => array( + // sensors + 'CylinderSensor', 'PlaneSensor', 'ProximitySensor', 'SphereSensor', + 'TimeSensor', 'TouchSensor', 'VisibilitySensor', + // interpolators + 'ColorInterpolator', 'CoordinateInterpolator', 'NormalInterpolator', + 'OrientationInterpolator', 'PositionInterpolator', 'ScalarInterpolator', + // grouping nodes + 'Anchor', 'Billboard', 'Collision', 'Group', 'LOD', 'Switch', 'Transform', + // bindables + 'Background', 'Fog', 'NavigationInfo', 'Viewpoint', + // lights + 'DirectionalLight', 'PointLight', 'SpotLight', + // shape and geometry + 'Box', 'Cone', 'Coordinate', 'Cylinder', 'ElevationGrid', 'Extrusion', + 'IndexedFaceSet', 'IndexedLineSet', 'PointSet', 'Shape', 'Sphere', 'Text', + // appearance + 'Appearance', 'Color', 'FontStyle', 'Material', + 'Normal', 'TextureCoordinate', 'TextureTransform', + // textures + 'ImageTexture', 'MovieTexture', 'PixelTexture', + // sound + 'AudioClip', 'Sound', + // other + 'Inline', 'Script', 'WorldInfo' + ), + // name + 1 => $CONTEXT . '/node', + // style + 2 => 'color:#b1b100;', + // case sensitive + 3 => true, + // url + 4 => 'http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-IS-VRML97WithAmendment1/part1/nodesRef.html#{FNAME}' + ), + 1 => array( + // fields of nodes + 0 => array( + // A + 'addChildren', 'ambientIntensity', 'appearance', 'attenuation', 'autoOffset', + 'avatarSize', 'axisOfRotation', + // B + 'backUrl', 'bboxCenter', 'bboxSize', 'beamWidth', 'beginCap', + 'bindTime', 'bottom', 'bottomRadius', 'bottomUrl', + // C + 'ccw', 'center', 'children', 'choice', 'collide', + 'collideTime', 'color', 'colorIndex', 'colorPerVertex', 'convex', + 'coord', 'coordIndex', 'creaseAngle', 'crossSection', 'cutOffAngle', + 'cycleInterval', 'cycleTime', + // D + 'description', 'diffuseColor', 'direction', 'directOutput', + 'diskAngle', 'duration_changed', + // E + 'emissiveColor', 'enabled', 'endCap', 'enterTime', 'exitTime', + // F + 'family', 'fieldOfView', 'fogType', 'fontStyle', 'fraction_changed', + 'frontUrl', + // G + 'geometry', 'groundAngle', 'groundColor', + // H + 'headlight', 'height', 'hitNormal_changed', 'hitPoint_changed', 'horizontal', + // I + 'image', 'info', 'intensity', 'isActive', 'isBound', 'isOver', + // J + 'jump', 'justify', + // K + 'key', 'keyValue', + // L + 'language', 'leftUrl', 'leftToRight','length', 'level', + 'location', 'loop', + // M + 'material', 'maxAngle', 'maxBack', 'maxExtent', 'maxFront', + 'maxPosition', 'minAngle', 'minBack', 'minFront', 'minPosition', + 'mustEvaluate', + // N + 'normal', 'normalIndex', 'normalPerVertex', + // O + 'offset', 'on', 'orientation', 'orientation_changed', + // P + 'parameter', 'pitch', 'point', 'position', 'position_changed', + 'priority', 'proxy', + // Q + + // R + 'radius', 'range', 'removeChildren', 'repeatS', 'repeatT', + 'rightUrl', 'rotation', 'rotation_changed', + // S + 'scale', 'scaleOrientation', 'set_bind', 'set_colorIndex', 'set_coordIndex', + 'set_crossSection', 'set_fraction', 'set_height', 'set_normalIndex', 'set_orientation', + 'set_spine', 'set_scale', 'set_texCoordIndex', 'shininess', 'side', + 'size', 'skyAngle', 'skyColor', 'solid', 'source', + 'spacing', 'spatialization', 'specularColor', 'speed', 'spine', + 'startTime', 'stopTime', 'string', 'style', + // T + 'texCoord', 'texCoordIndex', 'texture', 'textureTransform', 'time', + 'title', 'top', 'topUrl', 'topToBottom', 'touchTime', + 'trackPoint_changed', 'translation', 'translation_changed', 'transparency', 'type', + // U + 'url', + // V + 'value_changed', 'vector', 'visibilityLimit', 'visibilityRange', + // W + 'whichChoice', + // X + 'xDimension', 'xSpacing', + // Y + + // Z + 'zDimension', 'zSpacing' + ), + 1 => $CONTEXT . '/field', + 2 => 'font-weight:bold;color:red;', + 3 => true, + 4 => '' + ), + 2 => array( + // keywords + 0 => array( + 'DEF', 'USE', 'IS', 'PROTO', 'EXTERNPROTO', 'TO', 'ROUTE', + 'TRUE', 'FALSE', 'NULL', + ), + 1 => $CONTEXT . '/keyword', + 2 => 'font-weight:bold;color:blue;', + 3 => true, + 4 => '' + ), + 3 => array( + // field access types + 0 => array( + 'eventIn', 'eventOut', 'exposedField', 'field', + ), + 1 => $CONTEXT . '/fieldaccess', + 2 => 'font-weight:bold;color:purple;', + 3 => true, + 4 => '' + ), + 4 => array( + // field data types + 0 => array( + 'SFBool', 'SFColor', 'SFFloat', 'SFImage', 'SFInt32', 'SFNode', + 'SFRotation', 'SFString', 'SFTime', 'SFVec2f', 'SFVec3f', + 'MFColor', 'MFFloat', 'MFInt32', 'MFNode', + 'MFRotation', 'MFString', 'MFTime', 'MFVec2f', 'MFVec3f', + ), + 1 => $CONTEXT . '/fieldtype', + 2 => 'color:green;', + 3 => true, + 4 => '' + ) +); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + '{', '}' + ), + 1 => $CONTEXT . '/nodesymbol', + 2 => 'color:#008000;' + ), + 1 => array( + 0 => array( + '[', ']' + ), + 1 => $CONTEXT . '/arraysymbol', + 2 => 'color:#008000;' + ) +); + +$this->_contextRegexps = array( + 0 => geshi_use_doubles($CONTEXT), + 1 => geshi_use_integers($CONTEXT) +); + +?> \ No newline at end of file diff --git a/paste/include/geshi/contexts/web3d/x3d_ascii.php b/paste/include/geshi/contexts/web3d/x3d_ascii.php new file mode 100644 index 0000000..fc58acc --- /dev/null +++ b/paste/include/geshi/contexts/web3d/x3d_ascii.php @@ -0,0 +1,221 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$this->_contextDelimiters = array(); + +$this->_childContexts = array( + new GeSHiContext('web3d', $DIALECT, 'comment'), + new GeSHiContext('web3d', $DIALECT, 'string') +); + +$this->_contextKeywords = array( + 0 => array( + // nodes + 0 => array( + // sensors + 'CylinderSensor', 'PlaneSensor', 'ProximitySensor', 'SphereSensor', + 'TimeSensor', 'TouchSensor', 'VisibilitySensor', + // interpolators + 'ColorInterpolator', 'CoordinateInterpolator', 'NormalInterpolator', + 'OrientationInterpolator', 'PositionInterpolator', 'ScalarInterpolator', + // grouping nodes + 'Anchor', 'Billboard', 'Collision', 'Group', 'LOD', 'Switch', 'Transform', + // bindables + 'Background', 'Fog', 'NavigationInfo', 'Viewpoint', + // lights + 'DirectionalLight', 'PointLight', 'SpotLight', + // shape and geometry + 'Box', 'Cone', 'Coordinate', 'Cylinder', 'ElevationGrid', 'Extrusion', + 'IndexedFaceSet', 'IndexedLineSet', 'PointSet', 'Shape', 'Sphere', 'Text', + // appearance + 'Appearance', 'Color', 'FontStyle', 'Material', + 'Normal', 'TextureCoordinate', 'TextureTransform', + // textures + 'ImageTexture', 'MovieTexture', 'PixelTexture', + // sound + 'AudioClip', 'Sound', + // other + 'Inline', 'Script', 'WorldInfo' + ), + // name + 1 => $CONTEXT . '/node', + // style + 2 => 'color:#b1b100;', + // case sensitive + 3 => true, + // url + 4 => 'http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-IS-VRML97WithAmendment1/part1/nodesRef.html#{FNAME}' + ), + 1 => array( + // fields of nodes + 0 => array( + // A + 'addChildren', 'ambientIntensity', 'appearance', 'attenuation', 'autoOffset', + 'avatarSize', 'axisOfRotation', + // B + 'backUrl', 'bboxCenter', 'bboxSize', 'beamWidth', 'beginCap', + 'bindTime', 'bottom', 'bottomRadius', 'bottomUrl', + // C + 'ccw', 'center', 'children', 'choice', 'collide', + 'collideTime', 'color', 'colorIndex', 'colorPerVertex', 'convex', + 'coord', 'coordIndex', 'creaseAngle', 'crossSection', 'cutOffAngle', + 'cycleInterval', 'cycleTime', + // D + 'description', 'diffuseColor', 'direction', 'directOutput', + 'diskAngle', 'duration_changed', + // E + 'emissiveColor', 'enabled', 'endCap', 'enterTime', 'exitTime', + // F + 'family', 'fieldOfView', 'fogType', 'fontStyle', 'fraction_changed', + 'frontUrl', + // G + 'geometry', 'groundAngle', 'groundColor', + // H + 'headlight', 'height', 'hitNormal_changed', 'hitPoint_changed', 'horizontal', + // I + 'image', 'info', 'intensity', 'isActive', 'isBound', 'isOver', + // J + 'jump', 'justify', + // K + 'key', 'keyValue', + // L + 'language', 'leftUrl', 'leftToRight','length', 'level', + 'location', 'loop', + // M + 'material', 'maxAngle', 'maxBack', 'maxExtent', 'maxFront', + 'maxPosition', 'minAngle', 'minBack', 'minFront', 'minPosition', + 'mustEvaluate', + // N + 'normal', 'normalIndex', 'normalPerVertex', + // O + 'offset', 'on', 'orientation', 'orientation_changed', + // P + 'parameter', 'pitch', 'point', 'position', 'position_changed', + 'priority', 'proxy', + // Q + + // R + 'radius', 'range', 'removeChildren', 'repeatS', 'repeatT', + 'rightUrl', 'rotation', 'rotation_changed', + // S + 'scale', 'scaleOrientation', 'set_bind', 'set_colorIndex', 'set_coordIndex', + 'set_crossSection', 'set_fraction', 'set_height', 'set_normalIndex', 'set_orientation', + 'set_spine', 'set_scale', 'set_texCoordIndex', 'shininess', 'side', + 'size', 'skyAngle', 'skyColor', 'solid', 'source', + 'spacing', 'spatialization', 'specularColor', 'speed', 'spine', + 'startTime', 'stopTime', 'string', 'style', + // T + 'texCoord', 'texCoordIndex', 'texture', 'textureTransform', 'time', + 'title', 'top', 'topUrl', 'topToBottom', 'touchTime', + 'trackPoint_changed', 'translation', 'translation_changed', 'transparency', 'type', + // U + 'url', + // V + 'value_changed', 'vector', 'visibilityLimit', 'visibilityRange', + // W + 'whichChoice', + // X + 'xDimension', 'xSpacing', + // Y + + // Z + 'zDimension', 'zSpacing' + ), + 1 => $CONTEXT . '/field', + 2 => 'font-weight:bold;color:red;', + 3 => true, + 4 => '' + ), + 2 => array( + // keywords + 0 => array( + 'DEF', 'USE', 'IS', 'PROTO', 'EXTERNPROTO', 'TO', 'ROUTE', + 'TRUE', 'FALSE', 'NULL', + // X3D + 'IMPORT', 'EXPORT', 'PROFILE', 'COMPONENT', 'META' + ), + 1 => $CONTEXT . '/keyword', + 2 => 'font-weight:bold;color:blue;', + 3 => true, + 4 => '' + ), + 3 => array( + // field access types + 0 => array( + 'eventIn', 'eventOut', 'exposedField', 'field', + // X3D + 'inputOnly', 'outputOnly', 'inputOutput', 'initializeOnly' + ), + 1 => $CONTEXT . '/fieldaccess', + 2 => 'font-weight:bold;color:purple;', + 3 => true, + 4 => '' + ), + 4 => array( + // field data types + 0 => array( + 'SFBool', 'SFColor', 'SFFloat', 'SFImage', 'SFInt32', 'SFNode', + 'SFRotation', 'SFString', 'SFTime', 'SFVec2f', 'SFVec3f', + 'MFColor', 'MFFloat', 'MFInt32', 'MFNode', + 'MFRotation', 'MFString', 'MFTime', 'MFVec2f', 'MFVec3f', + // X3D + 'SFColorRGBA', 'SFDouble', 'SFVec2d', 'SFVec3d', + 'MFBool', 'MFColorRGBA', 'MFDouble', 'MFImage', 'MFVec2d', 'MFVec3d' + ), + 1 => $CONTEXT . '/fieldtype', + 2 => 'color:green;', + 3 => true, + 4 => '' + ) +); + +$this->_contextSymbols = array( + 0 => array( + 0 => array( + '{', '}' + ), + 1 => $CONTEXT . '/nodesymbol', + 2 => 'color:#008000;' + ), + 1 => array( + 0 => array( + '[', ']' + ), + 1 => $CONTEXT . '/arraysymbol', + 2 => 'color:#008000;' + ) +); + +?> \ No newline at end of file diff --git a/paste/include/geshi/functions.geshi.php b/paste/include/geshi/functions.geshi.php new file mode 100644 index 0000000..8e34b74 --- /dev/null +++ b/paste/include/geshi/functions.geshi.php @@ -0,0 +1,282 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +$GLOBALS['geshi_dbg_level'] = 0; +function geshi_dbg_level ($level) { + $GLOBALS['geshi_dbg_level'] = $level; +} + +/** + * Handles debugging by printing a message according to current debug level, + * mask of context and other things. + * + * @param string The message to print out + * @param int The context in which this message is to be printed out in - see + * the GESHI_DBG_* constants + * @param boolean Whether to add a newline to the message + * @param boolean Whether to return the count of errors or not + */ +function geshi_dbg ($message, $context, $add_nl = true, $return_counts = false) +{ + if ((GESHI_DBG & $context) || ($GLOBALS['geshi_dbg_level'] & $context)) { + // + // Message can have the following symbols at start + // + // @b: bold + // @i: italic + // @o: ok (green colour) + // @w: warn (yellow colour) + // @e: err (red colour) + $test = substr($message, 0, 2); + $start = ''; + $end = ''; + switch ($test) { + case '@b': + $start = ''; + break; + + case '@i': + $start = ''; + break; + + case '@o': + $start = ''; + break; + + case '@w': + $start = ''; + break; + + case '@e': + $start = ''; + break; + + default: + $end = ''; + } + + if(preg_match('#(.*?)::(.*?)\((.*?)\)#si', $message)) { + $start = ''; + $end = ''; + } + + if (preg_match('#^@[a-z]#', $message)) { + $message = substr($message, 2); + } + echo $start . htmlspecialchars(str_replace("\n", '', $message)) . $end; + if ($add_nl) echo "\n"; + } +} + +/** + * Checks whether a file name is able to be read by GeSHi + * + * The file must be within the GESHI_ROOT directory + * + * @param string The absolute pathname of the file to check + * @return boolean Whether the file is readable by GeSHi + */ +function geshi_can_include ($file_name) +{ + return (GESHI_ROOT == substr($file_name, 0, strlen(GESHI_ROOT)) && + is_file($file_name) && is_readable($file_name)); +} + + +/** + * Drop-in replacement for strpos and stripos. Also can handle regular expression + * string positions. + * + * @param string The string in which to search for the $needle + * @param string The string to search for. If this string starts with "REGEX" then + * a regular expression search is performed. + * @param int The offset in the string in which to start searching + * @param boolean Whether the search is case sensitive or not + * @param boolean Whether the match table is needed (almost never, and it makes things slower) + * @return array An array of data: + *
 'pos' => position in string of needle,
+ * 'len' => length of match
+ * 'tab' => a table of the stuff matched in brackets for a regular expression
+ */ +function geshi_get_position ($haystack, $needle, $offset = 0, $case_sensitive = false, $need_table = false) +{ + //geshi_dbg('Checking haystack: ' . $haystack . ' against needle ' . $needle . ' (' . $offset . ')',GESHI_DBG_PARSE, false); + if ('REGEX' != substr($needle, 0, 5)) { + if (!$case_sensitive) { + return array('pos' => stripos($haystack, $needle, $offset), 'len' => strlen($needle)); + } else { + return array('pos' => strpos($haystack, $needle, $offset), 'len' => strlen($needle)); + } + } + + // geshi_preg_match_pos + + $regex = substr($needle, 5); + $string = $haystack; + + $foo = microtime(); + $foo_len = strlen($foo); + $len = strlen($string); + $str = preg_replace($regex, $foo, $string, 1); + $length = $len - (strlen($str) - $foo_len); + + // ADD SOME MORE: Return matching table (?) + if ($need_table) { + $matches = array(); + preg_match_all($regex, $string, $matches); + //$table = $matches; + $i = 0; + $table = array(); + foreach ( $matches as $match ) { + $table[$i++] = (isset($match[0])) ? $match[0] : null; + } + } else { + $table = array(); + } + return array('pos' => strpos($str, $foo), 'len' => $length, 'tab' => $table); +} + +/** + * Returns the regexp for integer numbers, for use with GeSHiCodeContexts + * + * @param string The prefix to use for the name of this number match + * @return array + */ +function geshi_use_integers ($prefix) +{ + return array( + 0 => array( + '#([^a-zA-Z_0-9\.]|^)([-]?[0-9]+)(?=[^a-zA-Z_0-9]|$)#' + ), + 1 => '', + 2 => array( + 1 => true, // catch banned stuff for highlighting by the code context that it is in + 2 => array( + 0 => $prefix . '/' . GESHI_NUM_INT, + 1 => 'color:#11e;', + 2 => false + ), + 3 => true + ) + ); +} + +/** + * Returns the regexp for double numbers, for use with GeSHiCodeContexts + * + * @param string The prefix to use for the name of this number match + * @param boolean Whether a number is required in front of the decimal point or not. + * @return array + */ +function geshi_use_doubles ($prefix, $require_leading_number = false) +{ + $banned = '[^a-zA-Z_0-9]'; + $plus_minus = '[\-\+]?'; + $leading_number_symbol = ($require_leading_number) ? '+' : '*'; + + return array( + 0 => array( + // double precision with e, e.g. 3.5e7 or -.45e2 + "#(^|$banned)?({$plus_minus}[0-9]$leading_number_symbol\.[0-9]+[eE]{$plus_minus}[0-9]+)($banned|\$)?#", + // double precision with e and no decimal place, e.g. 5e2 + "#(^|$banned)?({$plus_minus}[0-9]+[eE]{$plus_minus}[0-9]+)($banned|\$)?#", + // double precision (.123 or 34.342 for example) + // There are some cases where the - sign will not be highlighted for various reasons, + // but I'm happy that it's done where it can be. Maybe it might be worth looking at + // later if there are any real problems, else I'll ignore it + "#(^|$banned)?({$plus_minus}[0-9]$leading_number_symbol\.[0-9]+)($banned|\$)?#" + ), + 1 => '.', //doubles must have a dot + 2 => array( + 1 => true, // as above, catch for normal stuff + 2 => array( + 0 => $prefix . '/' . GESHI_NUM_DBL, + 1 => 'color:#d3d;', + 2 => false // Don't attempt to highlight numbers as code + ), + 3 => true, + //4 => true + ) + ); +} + + +// @todo [blocking 1.1.9] fix this up +// +----------------------------------------------------------------------+ +// | PHP Version 4 | +// +----------------------------------------------------------------------+ +// | Copyright (c) 1997-2004 The PHP Group | +// +----------------------------------------------------------------------+ +// | This source file is subject to version 3.0 of the PHP license, | +// | that is bundled with this package in the file LICENSE, and is | +// | available at through the world-wide-web at | +// | http://www.php.net/license/3_0.txt. | +// | If you did not receive a copy of the PHP license and are unable to | +// | obtain it through the world-wide-web, please send a note to | +// | license@php.net so we can mail you a copy immediately. | +// +----------------------------------------------------------------------+ +// | Authors: Aidan Lister | +// +----------------------------------------------------------------------+ +// +/** + * Replace stripos() + * + * This function lifted from the PHP_Compat PEAR package, and optimised + * + * @author Aidan Lister , Nigel McNie + * @version 1.1.0 + */ +if (!function_exists('stripos')) { + function stripos ( $haystack, $needle, $offset = null ) + { + // Manipulate the string if there is an offset + $fix = 0; + if (!is_null($offset)) { + if ($offset > 0) { + $haystack = substr($haystack, $offset); + $fix = $offset; + } + } + $segments = explode(strtolower($needle), strtolower($haystack), 2); + + // Check there was a match + if (count($segments) == 1) { + return false; + } + + return strlen($segments[0]) + $fix; + } +} + +?> diff --git a/paste/include/geshi/languages/codeworker/codeworker.php b/paste/include/geshi/languages/codeworker/codeworker.php new file mode 100644 index 0000000..617b5ea --- /dev/null +++ b/paste/include/geshi/languages/codeworker/codeworker.php @@ -0,0 +1,52 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/* + * Codeworker language file for GeSHi + * + * [notes about language] + * + * [notes about this implementation of the language] + * + */ + +/** Get the GeSHiCodeContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshicodecontext.php'; + + +$this->_humanLanguageName = 'CodeWorker'; + +$this->_rootContext =& new GeSHiCodeContext('codeworker'); + +?> diff --git a/paste/include/geshi/languages/css/css.php b/paste/include/geshi/languages/css/css.php new file mode 100644 index 0000000..d42505d --- /dev/null +++ b/paste/include/geshi/languages/css/css.php @@ -0,0 +1,52 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/* + * CSS language file for GeSHi + * + * [notes about language] + * + * [notes about this implementation of the language] + * + */ + +/** Get the GeSHiCodeContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshicodecontext.php'; + + +$this->_humanLanguageName = 'CSS'; + +$this->_rootContext =& new GeSHiCodeContext('css'); + +?> \ No newline at end of file diff --git a/paste/include/geshi/languages/delphi/delphi.php b/paste/include/geshi/languages/delphi/delphi.php new file mode 100644 index 0000000..8d55b10 --- /dev/null +++ b/paste/include/geshi/languages/delphi/delphi.php @@ -0,0 +1,54 @@ +, Nigel McNie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/* + * Delphi language file for GeSHi + * + * [notes about language] + * + * This implementation of delphi uses it's own version of ASM. It might + * be the case in the future that another version of ASM is similar enough + * for it to be used instead of the current delphi-specific one. + * + */ + +/** Get the GeSHiCodeContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshicodecontext.php'; + + +$this->_humanLanguageName = 'Delphi'; + +$this->_rootContext =& new GeSHiCodeContext('delphi'); + +?> diff --git a/paste/include/geshi/languages/html/html.php b/paste/include/geshi/languages/html/html.php new file mode 100644 index 0000000..e6a0768 --- /dev/null +++ b/paste/include/geshi/languages/html/html.php @@ -0,0 +1,52 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/* + * HTML language file for GeSHi + * + * [notes about language] + * + * [notes about this implementation of the language] + * + */ + +/** Get the GeSHiCodeContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshicodecontext.php'; + + +$this->_humanLanguageName = 'HTML'; + +$this->_rootContext =& new GeSHiCodeContext('html'); + +?> \ No newline at end of file diff --git a/paste/include/geshi/languages/javascript/javascript.php b/paste/include/geshi/languages/javascript/javascript.php new file mode 100644 index 0000000..354ac04 --- /dev/null +++ b/paste/include/geshi/languages/javascript/javascript.php @@ -0,0 +1,52 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/* + * Javascript language file for GeSHi + * + * [notes about language] + * + * [notes about this implementation of the language] + * + */ + +/** Get the GeSHiCodeContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshicodecontext.php'; + + +$this->_humanLanguageName = 'Javascript'; + +$this->_rootContext =& new GeSHiCodeContext('javascript'); + +?> \ No newline at end of file diff --git a/paste/include/geshi/languages/php/php.php b/paste/include/geshi/languages/php/php.php new file mode 100644 index 0000000..e627d86 --- /dev/null +++ b/paste/include/geshi/languages/php/php.php @@ -0,0 +1,53 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/* + * PHP language file for GeSHi + * + * [notes about language] + * + * [notes about this implementation of the language] + * + */ + +/** Get the GeSHiCodeContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshicodecontext.php'; + + +$this->_humanLanguageName = 'PHP'; + +$this->_rootContext =& new GeSHiCodeContext('html'); +$this->_rootContext->infectWith(new GeSHiCodeContext('php')); + +?> diff --git a/paste/include/geshi/languages/php/php4.php b/paste/include/geshi/languages/php/php4.php new file mode 100644 index 0000000..2b20c9b --- /dev/null +++ b/paste/include/geshi/languages/php/php4.php @@ -0,0 +1,54 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/* + * PHP4 language file for GeSHi + * + * [notes about language] + * + * [notes about this implementation of the language] + * + */ + +/** Get the GeSHiCodeContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshicodecontext.php'; + + +$this->_humanLanguageName = 'PHP4'; + +$this->_rootContext =& new GeSHiCodeContext('html'); +$this->_rootContext->infectWith(new GeSHiCodeContext('php', 'php4')); + +?> diff --git a/paste/include/geshi/languages/php/php5.php b/paste/include/geshi/languages/php/php5.php new file mode 100644 index 0000000..e108c04 --- /dev/null +++ b/paste/include/geshi/languages/php/php5.php @@ -0,0 +1,53 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/* + * PHP5 language file for GeSHi + * + * [notes about language] + * + * [notes about this implementation of the language] + * + */ + +/** Get the GeSHiCodeContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshicodecontext.php'; + + +$this->_humanLanguageName = 'PHP'; + +$this->_rootContext =& new GeSHiCodeContext('html'); +$this->_rootContext->infectWith(new GeSHiCodeContext('php', 'php5')); + +?> diff --git a/paste/include/geshi/languages/qbasic/qbasic.php b/paste/include/geshi/languages/qbasic/qbasic.php new file mode 100644 index 0000000..f69847c --- /dev/null +++ b/paste/include/geshi/languages/qbasic/qbasic.php @@ -0,0 +1,52 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/* + * QBasic language file for GeSHi + * + * [notes about language] + * + * [notes about this implementation of the language] + * + */ + +/** Get the GeSHiCodeContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshicodecontext.php'; + + +$this->_humanLanguageName = 'QBasic'; + +$this->_rootContext =& new GeSHiCodeContext('qbasic'); + +?> \ No newline at end of file diff --git a/paste/include/geshi/languages/web3d/vrml97.php b/paste/include/geshi/languages/web3d/vrml97.php new file mode 100644 index 0000000..d39326b --- /dev/null +++ b/paste/include/geshi/languages/web3d/vrml97.php @@ -0,0 +1,46 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the GeSHiCodeContext class */ +require_once GESHI_CLASSES_ROOT . 'class.geshicodecontext.php'; + +/** + * VRML97 Language file for GeSHi + */ +$this->_humanLanguageName = 'VRML97'; + +$this->_rootContext =& new GeSHiCodeContext('web3d', 'vrml97'); + +?> \ No newline at end of file diff --git a/paste/include/geshi/scripts/get-keywords/docs/README b/paste/include/geshi/scripts/get-keywords/docs/README new file mode 100644 index 0000000..ad60041 --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/docs/README @@ -0,0 +1,23 @@ +get-keywords.php is a script to get a current list of all the keywords for a particular language. + +Currently it's very alpha, just like the rest of this stuff. I run Debian and KDE, and so I have +access to the katepart XML files in /usr/share/apps/katepart/syntax. Thus, the keyword getter +strategies that use parser those files work for me. + +If you know where these files are online, feel free to write a strategy implementation that gets +the file from the 'net and uses that (perhaps from KDE SVN?). + +No real documentation I'm afraid... just look through the code and look at how the various keyword +strategy stuff is implemented in language/*/class.*getterstrategy.php. + +Oh, and to use: + +php get-keywords.php [lang] [group[ +php get-keywords.php --list-langs +php get-keywords.php --list-groups [language] + +In the future: + +php get-keywords.php ... --output-format=[HTML|text|special] + + $Id: README,v 1.2 2005/06/09 13:31:35 oracleshinoda Exp $ diff --git a/paste/include/geshi/scripts/get-keywords/get-keywords.php b/paste/include/geshi/scripts/get-keywords/get-keywords.php new file mode 100644 index 0000000..c5d4534 --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/get-keywords.php @@ -0,0 +1,143 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +define('GESHI_GET_KEYWORDS_VERSION', '0.1.2'); + +/** + * Script to get keywords for languages from katepart kde package + * + * Usage: + * get-keywords.php css properties + * get-keywords.php css attributes + * get-keywords.php php statements + * get-keywords.php php keywords + * get-keywords.php --list-langs + * get-keywords.php --list-groups css + * ... + * + * @todo [blocking 1.1.1] customise output format options (one per line, formatted for pasting into lang file, HTML) + */ + +// As always... +error_reporting(E_ALL); + +/** Get standard functions */ +require_once 'lib/functions.get-keywords.php'; +/** Get the KeywordGetter class */ +require_once 'lib/class.keywordgetter.php'; +/** Get the console options reader class */ +require_once 'lib/pear/Console/Getopt.php'; + +// Parse command line options +$opt_parser =& new Console_Getopt; +$args = $opt_parser->getopt($argv, 'hv', array('help', 'version', 'list-groups=', 'list-langs')); + +// Print error if there was an argument not recognised +if (PEAR::isError($args)) { + echo str_replace('Console_Getopt', $argv[0], $args->getMessage()) . ' +Try `' . $argv[0] . " --help' for more information.\n"; + exit(1); +} + + +// +// Do the easy options first +// + +// Check for help +if (get_option(array('h', 'help'), $args)) { + show_help(); + exit; +} + +// Check for version +if (get_option(array('v', 'version'), $args)) { + show_version(); + exit; +} + +// Check for --list-langs +if (get_option('list-langs', $args)) { + $languages = KeywordGetter::getSupportedLanguages(); + print_r($languages); + exit; +} + +// Check for --list-groups +if (false !== ($language = get_option('list-groups', $args))) { + $kwgetter =& KeywordGetter::factory($language); + if (KeywordGetter::isError($kwgetter)) { + die($kwgetter->lastError()); + } + print_r($kwgetter->getValidKeywordGroups()); + exit; +} + + +// +// Simple options are not being used - time to actually +// get keywords if we can +// + +// If we don't have a language and a keyword type, show the help and exit +if (!isset($argv[1]) || !isset($argv[2])) { + show_help(); + exit; +} + +// Create a new keyword getter. If this language is not supported, exit +$kwgetter =& KeywordGetter::factory($argv[1]); +if (KeywordGetter::isError($kwgetter)) { + die($kwgetter->lastError()); +} + +// Get the keywords based on the required keyword group. If there +// is an error getting the keywords, print it and exit +$keywords = $kwgetter->getKeywords($argv[2]); +if (KeywordGetter::isError($keywords)) { + die($keywords->lastError()); +} + +// Simply echo to standard out, although a todo would be to make this customisable +// @todo [blocking 1.1.1] Customise the output of keywords (to a file perhaps?) +$result = ''; +$spaces = ' '; +foreach ($keywords as $keyword) { + $result .= "'".$keyword . "', "; +} +$result = wordwrap($result, 75); +$result = $spaces . str_replace("\n", "\n$spaces", $result); +echo substr($result, 0, -2) . "\n"; + +?> diff --git a/paste/include/geshi/scripts/get-keywords/languages/css/class.csskeywordgetter.php b/paste/include/geshi/scripts/get-keywords/languages/css/class.csskeywordgetter.php new file mode 100644 index 0000000..397d2ea --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/languages/css/class.csskeywordgetter.php @@ -0,0 +1,101 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the CSS XML parser used for getting CSS keywords */ +require_once 'class.cssxmlparser.php'; + +/** + * Implementation of KeywordGetterStrategy for the CSS language. + * + * @package scripts + * @author Nigel McNie + * @since 0.1.0 + * @version 1.1.0 + * @see KeywordGetterStrategy + */ +class cssKeywordGetterStrategy extends KeywordGetterStrategy +{ + /** + * Creates a new CSS Keyword Getter Strategy. Defines allowed + * keyword groups for CSS. + */ + function cssKeywordGetterStrategy () + { + $this->_language = 'CSS'; + $this->_validKeywordGroups = array( + 'properties', 'types', 'colors', 'paren', 'mediatypes', 'pseudoclasses' + ); + } + + /** + * Implementation of abstract method {@link KeywordGetterStrategy::getKeywords()} + * to get keywords for CSS + * + * @param string The keyword group to get keywords for. If not a valid keyword + * group an error is returned + * @return array The keywords for CSS for the specified keyword group + * @throws KeywordGetterError + */ + function getKeywords ($keyword_group) + { + // Check that keyword group listed is valid + $group_valid = $this->keywordGroupIsValid($keyword_group); + if (KeywordGetter::isError($group_valid)) { + return $group_valid; + } + + $xml_parser =& new CSS_XML_Parser; + $xml_parser->setKeywordGroup($keyword_group); + + // Set the file to parse to Nigel's local CSS syntax file. + // @todo [blocking 1.1.9] Find online if possible (check kde.org) and link to that + // @todo [blocking 1.1.9] Make configurable the file? Have at least hardcoded ones for me and for the web + $result =& $xml_parser->setInputFile('/usr/share/apps/katepart/syntax/css.xml'); + if (PEAR::isError($result)) { + return new KeywordGetterError(FILE_UNAVAILABLE, $this->_language, + array('{FILENAME}' => '/usr/share/apps/katepart/syntax/css.xml')); + } + + $result =& $xml_parser->parse(); + if (PEAR::isError($result)) { + return new KeywordGetterError(PARSE_ERROR, $this->_language, + array('{PARSE_ERROR}' => $result->getMessage())); + } + + $keywords =& $xml_parser->getKeywords(); + return array_unique($keywords); + } +} + +?> diff --git a/paste/include/geshi/scripts/get-keywords/languages/css/class.cssxmlparser.php b/paste/include/geshi/scripts/get-keywords/languages/css/class.cssxmlparser.php new file mode 100644 index 0000000..dd2f576 --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/languages/css/class.cssxmlparser.php @@ -0,0 +1,112 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the Keyword XML Parser class for use by CSS_XML_Parser */ +require_once 'lib/class.keywordxmlparser.php'; + +/** + * Extends Keyword_XML_Parser as a class to get CSS keywords from + * a katepart syntax XML file + * + * @package scripts + * @author Nigel McNie + * @since 0.1.0 + * @version 1.1.0 + * @see Keyword_XML_Parser + */ +class CSS_XML_Parser extends Keyword_XML_Parser +{ + /**#@+ + * @var boolean + * @access private + */ + /** + * Whether we are currently in the block of the XML file + * with items of the correct type + */ + var $_valid; + + /** + * Whether we should add the next CDATA we encounter. This + * is made true when we encounter an ITEM node + */ + var $_addKeyword; + + /** + * A list of keywords to ignore + * @var array + */ + var $_keywordsToIgnore = array('100', '200', '300', '400', '500', '600', '700', '800', '900'); + /**#@-*/ + + /** + * Called when the start tag of a node of the + * XML document is encountered + * + * @param resource XML Parser Resource + * @param string The name of the node encountered + * @param array Any attributes the node has + */ + function startHandler ($xp, $name, $attributes) + { + if ('LIST' == $name) { + if ($attributes['NAME'] == $this->_keywordGroup) { + $this->_valid = true; + } else { + $this->_valid = false; + } + } + if ($this->_valid && 'ITEM' == $name) { + $this->_addKeyword = true; + } else { + $this->_addKeyword = false; + } + } + + /** + * Called when CDATA is encountered + * + * @param resource XML Parser resource + * @param string The CDATA encountered + */ + function cdataHandler ($xp, $cdata) + { + if ($this->_addKeyword && !in_array(trim($cdata), $this->_keywordsToIgnore)) { + array_push($this->_keywords, trim($cdata)); + } + $this->_addKeyword = false; + } +} + +?> diff --git a/paste/include/geshi/scripts/get-keywords/languages/html/class.htmlkeywordgetter.php b/paste/include/geshi/scripts/get-keywords/languages/html/class.htmlkeywordgetter.php new file mode 100644 index 0000000..a8a8a7e --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/languages/html/class.htmlkeywordgetter.php @@ -0,0 +1,96 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** + * Implementation of KeywordGetterStrategy for the HTML language. + * + * @package scripts + * @author Nigel McNie + * @since 0.1.1 + * @version 1.1.0 + * @see KeywordGetterStrategy + */ +class htmlKeywordGetterStrategy extends KeywordGetterStrategy +{ + /** + * The file from which the attribute names will be raided + * @var string + * @access private + */ + var $_fileName = '/usr/share/doc/w3-recs/RECS/html4/index/attributes.html'; + + /** + * Creates a new HTML Keyword Getter Strategy. Defines allowed + * keyword groups for HTML. + */ + function htmlKeywordGetterStrategy () + { + $this->_language = 'HTML'; + $this->_validKeywordGroups = array( + 'attributes' + ); + } + + /** + * Implementation of abstract method {@link KeywordGetterStrategy::getKeywords()} + * to get keywords for HTML + * + * @param string The keyword group to get keywords for. If not a valid keyword + * group an error is returned + * @return array The keywords for HTML for the specified keyword group + * @throws KeywordGetterError + */ + function getKeywords ($keyword_group) + { + // Check that keyword group listed is valid + $group_valid = $this->keywordGroupIsValid($keyword_group); + if (KeywordGetter::isError($group_valid)) { + return $group_valid; + } + + if (!is_readable($this->_fileName)) { + return new KeywordGetterError(FILE_UNAVAILABLE, $this->_language, + array('{FILENAME}' => $this->_fileName)); + } + + $file_contents = implode('', file($this->_fileName)); + $matches = array(); + preg_match_all('#]+>\s*([a-z\-]+)#', $file_contents, $matches); + $keywords = $matches[1]; + + return array_unique($keywords); + } +} + +?> diff --git a/paste/include/geshi/scripts/get-keywords/languages/javascript/class.javascriptkeywordgetter.php b/paste/include/geshi/scripts/get-keywords/languages/javascript/class.javascriptkeywordgetter.php new file mode 100644 index 0000000..b25c26e --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/languages/javascript/class.javascriptkeywordgetter.php @@ -0,0 +1,121 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the Javascript XML parser used for getting Javascript keywords */ +require_once 'class.javascriptxmlparser.php'; + +/** + * Implementation of KeywordGetterStrategy for the Javascript language. + * + * @package scripts + * @author Nigel McNie + * @since 0.1.1 + * @version 1.1.0 + * @see KeywordGetterStrategy + */ +class javascriptKeywordGetterStrategy extends KeywordGetterStrategy +{ + + /** + * Extra keywords missed by the language file + * + * @var array + * @access private + */ + var $_missedKeywords = array( + 'keywords' => array( + 'null' + ), + 'methods' => array( + 'getElementById' + ) + ); + + /** + * Creates a new Javascript Keyword Getter Strategy. Defines allowed + * keyword groups for Javascript. + */ + function javascriptKeywordGetterStrategy () + { + $this->_language = 'Javascript'; + $this->_validKeywordGroups = array( + 'keywords', 'functions', 'objects', 'math', 'events', 'methods' + ); + } + + /** + * Implementation of abstract method {@link KeywordGetterStrategy::getKeywords()} + * to get keywords for Javascript + * + * @param string The keyword group to get keywords for. If not a valid keyword + * group an error is returned + * @return array The keywords for Javascript for the specified keyword group + * @throws KeywordGetterError + */ + function getKeywords ($keyword_group) + { + // Check that keyword group listed is valid + $group_valid = $this->keywordGroupIsValid($keyword_group); + if (KeywordGetter::isError($group_valid)) { + return $group_valid; + } + + $xml_parser =& new Javascript_XML_Parser; + $xml_parser->setKeywordGroup($keyword_group); + + // Set the file to parse to Nigel's local Javascript syntax file. + $result =& $xml_parser->setInputFile('/usr/share/apps/katepart/syntax/javascript.xml'); + if (PEAR::isError($result)) { + return new KeywordGetterError(FILE_UNAVAILABLE, $this->_language, + array('{FILENAME}' => '/usr/share/apps/katepart/syntax/javascript.xml')); + } + + $result =& $xml_parser->parse(); + if (PEAR::isError($result)) { + return new KeywordGetterError(PARSE_ERROR, $this->_language, + array('{PARSE_ERROR}' => $result->getMessage())); + } + + $keywords =& $xml_parser->getKeywords(); + //@todo [blocking 1.1.1] move missedkeywords functionality into common place + // as well as unique and sorts + if (isset($this->_missedKeywords[$keyword_group])) { + $keywords = array_merge($keywords, $this->_missedKeywords[$keyword_group]); + } + sort($keywords); + return array_unique($keywords); + } +} + +?> diff --git a/paste/include/geshi/scripts/get-keywords/languages/javascript/class.javascriptxmlparser.php b/paste/include/geshi/scripts/get-keywords/languages/javascript/class.javascriptxmlparser.php new file mode 100644 index 0000000..a427494 --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/languages/javascript/class.javascriptxmlparser.php @@ -0,0 +1,107 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the Keyword XML Parser class for use by Javascript_XML_Parser */ +require_once 'lib/class.keywordxmlparser.php'; + +/** + * Extends Keyword_XML_Parser as a class to get Javascript keywords from + * a katepart syntax XML file + * + * @package scripts + * @author Nigel McNie + * @since 0.1.1 + * @version 1.1.0 + * @see Keyword_XML_Parser + */ +class Javascript_XML_Parser extends Keyword_XML_Parser +{ + /**#@+ + * @var boolean + * @access private + */ + /** + * Whether we are currently in the block of the XML file + * with items of the correct type + */ + var $_valid; + + /** + * Whether we should add the next CDATA we encounter. This + * is made true when we encounter an ITEM node + */ + var $_addKeyword; + + /**#@-*/ + + /** + * Called when the start tag of a node of the + * XML document is encountered + * + * @param resource XML Parser resource + * @param string The name of the node encountered + * @param array Any attributes the node has + */ + function startHandler ($xp, $name, $attributes) + { + if ('LIST' == $name) { + if ($attributes['NAME'] == $this->_keywordGroup) { + $this->_valid = true; + } else { + $this->_valid = false; + } + } + if ($this->_valid && 'ITEM' == $name) { + $this->_addKeyword = true; + } else { + $this->_addKeyword = false; + } + } + + /** + * Called when CDATA is encountered + * + * @param resource XML Parser Resource + * @param string The CDATA encountered + */ + function cdataHandler ($xp, $cdata) + { + if ($this->_addKeyword) { + array_push($this->_keywords, trim($cdata)); + } + $this->_addKeyword = false; + } +} + +?> diff --git a/paste/include/geshi/scripts/get-keywords/languages/php/class.phpkeywordgetter.php b/paste/include/geshi/scripts/get-keywords/languages/php/class.phpkeywordgetter.php new file mode 100644 index 0000000..ede4d05 --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/languages/php/class.phpkeywordgetter.php @@ -0,0 +1,120 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the PHP XML parser used for getting PHP keywords */ +require_once 'class.phpxmlparser.php'; + +/** + * Implementation of KeywordGetterStrategy for the PHP language. + * + * @package scripts + * @author Nigel McNie + * @since 0.1.1 + * @version 1.1.0 + * @see KeywordGetterStrategy + */ +class phpKeywordGetterStrategy extends KeywordGetterStrategy +{ + /** + * Creates a new PHP Keyword Getter Strategy. Defines allowed + * keyword groups for PHP. + */ + function phpKeywordGetterStrategy () + { + $this->_language = 'PHP'; + $this->_validKeywordGroups = array( + 'controlstructures', 'keywords', 'functions' + ); + } + + /** + * Implementation of abstract method {@link KeywordGetterStrategy::getKeywords()} + * to get keywords for PHP + * + * @param string The keyword group to get keywords for. If not a valid keyword + * group an error is returned + * @return array The keywords for PHP for the specified keyword group + * @throws KeywordGetterError + */ + function getKeywords ($keyword_group) + { + // Check that keyword group listed is valid + $group_valid = $this->keywordGroupIsValid($keyword_group); + if (KeywordGetter::isError($group_valid)) { + return $group_valid; + } + + // Convert keyword group to correct name + // for XML parser if needed + if ('controlstructures' == $keyword_group) { + $keyword_group = 'control structures'; + } + + $xml_parser =& new PHP_XML_Parser; + $xml_parser->setKeywordGroup($keyword_group); + + // Set the file to parse to Nigel's local PHP syntax file. + $result =& $xml_parser->setInputFile('/usr/share/apps/katepart/syntax/php.xml'); + if (PEAR::isError($result)) { + return new KeywordGetterError(FILE_UNAVAILABLE, $this->_language, + array('{FILENAME}' => '/usr/share/apps/katepart/syntax/php.xml')); + } + + $result =& $xml_parser->parse(); + if (PEAR::isError($result)) { + return new KeywordGetterError(PARSE_ERROR, $this->_language, + array('{PARSE_ERROR}' => $result->getMessage())); + } + + $keywords =& $xml_parser->getKeywords(); + + // Add some keywords that don't seem to be in the XML file + if ('control structures' == $keyword_group) { + array_push($keywords, 'endwhile', 'endif', 'endswitch', 'endforeach'); + } elseif ('keywords' == $keyword_group) { + array_push($keywords, '__FUNCTION__', '__CLASS__', '__METHOD__', + 'DEFAULT_INCLUDE_PATH', 'PEAR_INSTALL_DIR', 'PEAR_EXTENSION_DIR', + 'PHP_EXTENSION_DIR', 'PHP_BINDIR', 'PHP_LIBDIR', 'PHP_DATADIR', + 'PHP_SYSCONFDIR', 'PHP_LOCALSTATEDIR', 'PHP_CONFIG_FILE_PATH', + 'PHP_OUTPUT_HANDLER_START', 'PHP_OUTPUT_HANDLER_CONT', + 'PHP_OUTPUT_HANDLER_END', 'E_STRICT', 'E_CORE_ERROR', 'E_CORE_WARNING', + 'E_COMPILE_ERROR', 'E_COMPILE_WARNING'); + } + sort($keywords); + + return array_unique($keywords); + } +} + +?> diff --git a/paste/include/geshi/scripts/get-keywords/languages/php/class.phpxmlparser.php b/paste/include/geshi/scripts/get-keywords/languages/php/class.phpxmlparser.php new file mode 100644 index 0000000..26d2641 --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/languages/php/class.phpxmlparser.php @@ -0,0 +1,107 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the Keyword XML Parser class for use by CSS_XML_Parser */ +require_once 'lib/class.keywordxmlparser.php'; + +/** + * Extends Keyword_XML_Parser as a class to get PHP keywords from + * a katepart syntax XML file + * + * @package scripts + * @author Nigel McNie + * @since 0.1.1 + * @version 1.1.0 + * @see Keyword_XML_Parser + */ +class PHP_XML_Parser extends Keyword_XML_Parser +{ + /**#@+ + * @var boolean + * @access private + */ + /** + * Whether we are currently in the block of the XML file + * with items of the correct type + */ + var $_valid; + + /** + * Whether we should add the next CDATA we encounter. This + * is made true when we encounter an ITEM node + */ + var $_addKeyword; + + /**#@-*/ + + /** + * Called when the start tag of a node of the + * XML document is encountered + * + * @param resource XML Parser resource + * @param string The name of the node encountered + * @param array Any attributes the node has + */ + function startHandler ($xp, $name, $attributes) + { + if ('LIST' == $name) { + if ($attributes['NAME'] == $this->_keywordGroup) { + $this->_valid = true; + } else { + $this->_valid = false; + } + } + if ($this->_valid && 'ITEM' == $name) { + $this->_addKeyword = true; + } else { + $this->_addKeyword = false; + } + } + + /** + * Called when CDATA is encountered + * + * @param resource XML Parser resource + * @param string The CDATA encountered + */ + function cdataHandler ($xp, $cdata) + { + if ($this->_addKeyword) { + array_push($this->_keywords, trim($cdata)); + } + $this->_addKeyword = false; + } +} + +?> diff --git a/paste/include/geshi/scripts/get-keywords/lib/class.keywordgetter.php b/paste/include/geshi/scripts/get-keywords/lib/class.keywordgetter.php new file mode 100644 index 0000000..8e1f3af --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/lib/class.keywordgetter.php @@ -0,0 +1,184 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** The language to get keywords for is not supported by this tool */ +define('LANG_NOT_SUPPORTED', -1); +/** The keyword group asked for is not supported by the language */ +define('INVALID_KEYWORD_GROUP', -2); +/** There was a parse error parsing an XML document for keywords */ +define('PARSE_ERROR', -3); + +/**#@+ + * @access private + */ +/** The strategy object used to get keywords is invalid */ +define('INVALID_STRATEGY', -4); +/**#@-*/ + +/** Class that handles errors */ +require_once 'class.keywordgettererror.php'; + +/** Class that is the root of the keyword getting strategy */ +require_once 'class.keywordgetterstrategy.php'; + +/** + * The KeywordGetter class. The get-keywords program is a + * frontend to this class. + * + * @author Nigel McNie + * @since 0.1.0 + */ +class KeywordGetter +{ + /**#@+ + * @access private + */ + /** + * The language being used + * @var string + */ + var $_language; + + /** + * The keyword strategy to use + * @var KeywordGetterStrategy + */ + var $_keywordStrategy; + /**#@-*/ + + /** + * Constructor + * + * @param KeywordGetterStrategy The strategy to use to get keywords + * @private + * {@internal Yes, that's right, PRIVATE. Use KeywordGetter::factory + * to create new KeywordGetters}} + */ + function KeywordGetter ($kwstrategy) + { + if (!is_a($kwstrategy, 'KeywordGetterStrategy')) { + return new KeywordGetterError(INVALID_STRATEGY, $this->_language); + } + $this->_keywordStrategy = $kwstrategy; + } + + /** + * Creates a new keyword getter based on the incoming language + * + * @param string The language to get keywords for + * @static + */ + function &factory ($language) + { + if (!file_exists('languages/' . $language . '/class.' . $language . 'keywordgetter.php')) { + return new KeywordGetterError(LANG_NOT_SUPPORTED, $language); + } + $this->_language = $language; + + /** Get the requested language */ + require_once 'languages/' . $language . '/class.' . $language . 'keywordgetter.php'; + + $class = $language . 'KeywordGetterStrategy'; + if (!class_exists($class)) { + return new KeywordGetterError(LANG_NOT_SUPPORTED, $language); + } + + return new KeywordGetter(new $class); + } + + /** + * Returns whether the passed object is an error object + * + * @param mixed The variable that may be an error object + * @return boolean Whether the variable is an error object + * @static + */ + function isError ($possible_err_object) + { + return is_a($possible_err_object, 'KeywordGetterError'); + } + + /** + * Gets the keywords for a language + * + * @param The keyword group to get keywords for + * @return array An array of the keywords for this language/keyword group + */ + function &getKeywords ($keyword_group) + { + return $this->_keywordStrategy->getKeywords($keyword_group); + } + + /** + * Gets valid keyword groups for a language + * + * @return array An array of valid keyword groups for the language + * that this KeywordGetter is representing + */ + function &getValidKeywordGroups () + { + return $this->_keywordStrategy->getValidKeywordGroups(); + } + + /** + * Gets a list of all supported languages + * + * @return array + * @static + */ + function &getSupportedLanguages () + { + $files_to_ignore = array('.', '..', 'CVS'); + $supported_languages = array(); + + $dh = @opendir('languages'); + if (false === $dh) { + return false; + } + + while (false !== ($file = @readdir($dh))) { + if (in_array($file, $files_to_ignore)) { + continue; + } + if (file_exists('languages/' . $file . '/class.' . $file . 'keywordgetter.php')) { + array_push($supported_languages, $file); + } + } + + return $supported_languages; + } +} + +?> diff --git a/paste/include/geshi/scripts/get-keywords/lib/class.keywordgettererror.php b/paste/include/geshi/scripts/get-keywords/lib/class.keywordgettererror.php new file mode 100644 index 0000000..ac12a9a --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/lib/class.keywordgettererror.php @@ -0,0 +1,97 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +class KeywordGetterError +{ + + /** + * The error message + * @var string + */ + var $_errorMessage; + + /** + * Possible error messages + * @var array + * @static + */ + var $_errorMessages = array( + LANG_NOT_SUPPORTED => + 'The language "{LANGUAGE}" is not supported by this tool at this time +(see php $0 list-langs for a list of supported languages)', + INVALID_STRATEGY => + 'The strategy object given is invalid (this is an internal error, +if you see this please send a bug report to nigel@geshi.org)', + INVALID_KEYWORD_GROUP => + 'The keyword group "{KEYWORD_GROUP}" given is invalid for the language "{LANGUAGE}"', + PARSE_ERROR => + 'There was a parsing error while trying to parse the XML language file: {MESSAGE}', + FILE_UNAVAILABLE => + 'The file {FILENAME} is unavailable for retrieving keywords from. Does it exist/is it readable?' + ); + + /** + * Creates a new KeywordGetterError object + * + * @param int The error type of this error + * @param string The language being used + */ + function KeywordGetterError ($error_type, $language, $other_info = array()) + { + global $argv; + $message = $this->_errorMessages[$error_type]; + $matches = array( + '{LANGUAGE}' => $language, + '$0' => $argv[0] + ); + $matches = array_merge($matches, $other_info); + + $message = str_replace(array_keys($matches), $matches, $message); + $this->_errorMessage = 'Error: ' . $message . "\n"; + } + + /** + * Returns the last error + * + * @return string + */ + function lastError () + { + return $this->_errorMessage; + } +} + +?> + diff --git a/paste/include/geshi/scripts/get-keywords/lib/class.keywordgetterstrategy.php b/paste/include/geshi/scripts/get-keywords/lib/class.keywordgetterstrategy.php new file mode 100644 index 0000000..a586507 --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/lib/class.keywordgetterstrategy.php @@ -0,0 +1,105 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** + * Class that is overridden to provide an implementation of getting keywords + * for a particular language + * + * @author Nigel McNie + * @since 0.1.0 + * @abstract + */ +class KeywordGetterStrategy +{ + + /**#@+ + * @access private + */ + + /** + * The language that this getter is getting keywords for + * @var string + */ + var $_language; + + /** + * The keyword group within the language that this getter is + * getting keywords for + * @var string + */ + var $_keywordGroup; + + /** + * The keyword groups that are valid (supported) by this strategy + * @var array + */ + var $_validKeywordGroups; + + /** + * used? + */ + var $_keywords = array(); + + /**#@-*/ + + /** + * @abstract + */ + function getKeywords ($keyword_group) + { + return new KeywordGetterError(LANG_NOT_SUPPORTED, $this->_language); + } + + /** + * @return array + */ + function getValidKeywordGroups () + { + return $this->_validKeywordGroups; + } + + /** + * Checks whether the keyword group asked for is valid + */ + function keywordGroupIsValid ($keyword_group) { + if (in_array($keyword_group, $this->_validKeywordGroups)) { + return true; + } + return new KeywordGetterError(INVALID_KEYWORD_GROUP, $this->_language, + array('{KEYWORD_GROUP}' => $keyword_group)); + } +} + +?> diff --git a/paste/include/geshi/scripts/get-keywords/lib/class.keywordxmlparser.php b/paste/include/geshi/scripts/get-keywords/lib/class.keywordxmlparser.php new file mode 100644 index 0000000..1c0ea72 --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/lib/class.keywordxmlparser.php @@ -0,0 +1,58 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** Get the XML parser class */ +require_once 'lib/pear/XML/Parser.php'; + +/** + * @todo [blocking 1.1.9] comment + */ +class Keyword_XML_Parser extends XML_Parser +{ + var $_keywordGroup; + var $_keywords = array(); + + function setKeywordGroup ($keyword_group) + { + $this->_keywordGroup = $keyword_group; + } + + function &getKeywords () + { + return $this->_keywords; + } +} + +?> diff --git a/paste/include/geshi/scripts/get-keywords/lib/functions.get-keywords.php b/paste/include/geshi/scripts/get-keywords/lib/functions.get-keywords.php new file mode 100644 index 0000000..9116c36 --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/lib/functions.get-keywords.php @@ -0,0 +1,95 @@ + + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2005 Nigel McNie + * @version 1.1.0 + * + */ + +/** + * Shows help text for get-keywords script and exits + * + * @since 0.1.0 + */ +function show_help () +{ + global $argv; + print << diff --git a/paste/include/geshi/scripts/get-keywords/lib/pear/Console/Getopt.php b/paste/include/geshi/scripts/get-keywords/lib/pear/Console/Getopt.php new file mode 100644 index 0000000..723ef12 --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/lib/pear/Console/Getopt.php @@ -0,0 +1,251 @@ + | +// +----------------------------------------------------------------------+ +// +// $Id: Getopt.php,v 1.1 2005/06/04 04:04:00 oracleshinoda Exp $ + +require_once 'lib/pear/PEAR.php'; + +/** + * Command-line options parsing class. + * + * @author Andrei Zmievski + * + */ +class Console_Getopt { + /** + * Parses the command-line options. + * + * The first parameter to this function should be the list of command-line + * arguments without the leading reference to the running program. + * + * The second parameter is a string of allowed short options. Each of the + * option letters can be followed by a colon ':' to specify that the option + * requires an argument, or a double colon '::' to specify that the option + * takes an optional argument. + * + * The third argument is an optional array of allowed long options. The + * leading '--' should not be included in the option name. Options that + * require an argument should be followed by '=', and options that take an + * option argument should be followed by '=='. + * + * The return value is an array of two elements: the list of parsed + * options and the list of non-option command-line arguments. Each entry in + * the list of parsed options is a pair of elements - the first one + * specifies the option, and the second one specifies the option argument, + * if there was one. + * + * Long and short options can be mixed. + * + * Most of the semantics of this function are based on GNU getopt_long(). + * + * @param array $args an array of command-line arguments + * @param string $short_options specifies the list of allowed short options + * @param array $long_options specifies the list of allowed long options + * + * @return array two-element array containing the list of parsed options and + * the non-option arguments + * + * @access public + * + */ + function getopt2($args, $short_options, $long_options = null) + { + return Console_Getopt::doGetopt(2, $args, $short_options, $long_options); + } + + /** + * This function expects $args to start with the script name (POSIX-style). + * Preserved for backwards compatibility. + * @see getopt2() + */ + function getopt($args, $short_options, $long_options = null) + { + return Console_Getopt::doGetopt(1, $args, $short_options, $long_options); + } + + /** + * The actual implementation of the argument parsing code. + */ + function doGetopt($version, $args, $short_options, $long_options = null) + { + // in case you pass directly readPHPArgv() as the first arg + if (PEAR::isError($args)) { + return $args; + } + if (empty($args)) { + return array(array(), array()); + } + $opts = array(); + $non_opts = array(); + + settype($args, 'array'); + + if ($long_options) { + sort($long_options); + } + + /* + * Preserve backwards compatibility with callers that relied on + * erroneous POSIX fix. + */ + if ($version < 2) { + if (isset($args[0]{0}) && $args[0]{0} != '-') { + array_shift($args); + } + } + + reset($args); + while (list($i, $arg) = each($args)) { + + /* The special element '--' means explicit end of + options. Treat the rest of the arguments as non-options + and end the loop. */ + if ($arg == '--') { + $non_opts = array_merge($non_opts, array_slice($args, $i + 1)); + break; + } + + if ($arg{0} != '-' || (strlen($arg) > 1 && $arg{1} == '-' && !$long_options)) { + $non_opts = array_merge($non_opts, array_slice($args, $i)); + break; + } elseif (strlen($arg) > 1 && $arg{1} == '-') { + $error = Console_Getopt::_parseLongOption(substr($arg, 2), $long_options, $opts, $args); + if (PEAR::isError($error)) + return $error; + } else { + $error = Console_Getopt::_parseShortOption(substr($arg, 1), $short_options, $opts, $args); + if (PEAR::isError($error)) + return $error; + } + } + + return array($opts, $non_opts); + } + + /** + * @access private + * + */ + function _parseShortOption($arg, $short_options, &$opts, &$args) + { + for ($i = 0; $i < strlen($arg); $i++) { + $opt = $arg{$i}; + $opt_arg = null; + + /* Try to find the short option in the specifier string. */ + if (($spec = strstr($short_options, $opt)) === false || $arg{$i} == ':') + { + return PEAR::raiseError("Console_Getopt: unrecognized option -- $opt"); + } + + if (strlen($spec) > 1 && $spec{1} == ':') { + if (strlen($spec) > 2 && $spec{2} == ':') { + if ($i + 1 < strlen($arg)) { + /* Option takes an optional argument. Use the remainder of + the arg string if there is anything left. */ + $opts[] = array($opt, substr($arg, $i + 1)); + break; + } + } else { + /* Option requires an argument. Use the remainder of the arg + string if there is anything left. */ + if ($i + 1 < strlen($arg)) { + $opts[] = array($opt, substr($arg, $i + 1)); + break; + } else if (list(, $opt_arg) = each($args)) + /* Else use the next argument. */; + else + return PEAR::raiseError("Console_Getopt: option requires an argument -- $opt"); + } + } + + $opts[] = array($opt, $opt_arg); + } + } + + /** + * @access private + * + */ + function _parseLongOption($arg, $long_options, &$opts, &$args) + { + @list($opt, $opt_arg) = explode('=', $arg, 2); + $opt_len = strlen($opt); + + for ($i = 0; $i < count($long_options); $i++) { + $long_opt = $long_options[$i]; + $opt_start = substr($long_opt, 0, $opt_len); + + /* Option doesn't match. Go on to the next one. */ + if ($opt_start != $opt) + continue; + + $opt_rest = substr($long_opt, $opt_len); + + /* Check that the options uniquely matches one of the allowed + options. */ + if ($opt_rest != '' && $opt{0} != '=' && + $i + 1 < count($long_options) && + $opt == substr($long_options[$i+1], 0, $opt_len)) { + return PEAR::raiseError("Console_Getopt: option --$opt is ambiguous"); + } + + if (substr($long_opt, -1) == '=') { + if (substr($long_opt, -2) != '==') { + /* Long option requires an argument. + Take the next argument if one wasn't specified. */; + if (!strlen($opt_arg) && !(list(, $opt_arg) = each($args))) { + return PEAR::raiseError("Console_Getopt: option --$opt requires an argument"); + } + } + } else if ($opt_arg) { + return PEAR::raiseError("Console_Getopt: option --$opt doesn't allow an argument"); + } + + $opts[] = array('--' . $opt, $opt_arg); + return; + } + + return PEAR::raiseError("Console_Getopt: unrecognized option --$opt"); + } + + /** + * Safely read the $argv PHP array across different PHP configurations. + * Will take care on register_globals and register_argc_argv ini directives + * + * @access public + * @return mixed the $argv PHP array or PEAR error if not registered + */ + function readPHPArgv() + { + global $argv; + if (!is_array($argv)) { + if (!@is_array($_SERVER['argv'])) { + if (!@is_array($GLOBALS['HTTP_SERVER_VARS']['argv'])) { + return PEAR::raiseError("Console_Getopt: Could not read cmd args (register_argc_argv=Off?)"); + } + return $GLOBALS['HTTP_SERVER_VARS']['argv']; + } + return $_SERVER['argv']; + } + return $argv; + } + +} + +?> diff --git a/paste/include/geshi/scripts/get-keywords/lib/pear/PEAR.php b/paste/include/geshi/scripts/get-keywords/lib/pear/PEAR.php new file mode 100644 index 0000000..5a86b6b --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/lib/pear/PEAR.php @@ -0,0 +1,1055 @@ + | +// | Stig Bakken | +// | Tomas V.V.Cox | +// +--------------------------------------------------------------------+ +// +// $Id: PEAR.php,v 1.1 2005/06/04 04:03:26 oracleshinoda Exp $ +// + +define('PEAR_ERROR_RETURN', 1); +define('PEAR_ERROR_PRINT', 2); +define('PEAR_ERROR_TRIGGER', 4); +define('PEAR_ERROR_DIE', 8); +define('PEAR_ERROR_CALLBACK', 16); +/** + * WARNING: obsolete + * @deprecated + */ +define('PEAR_ERROR_EXCEPTION', 32); +define('PEAR_ZE2', (function_exists('version_compare') && + version_compare(zend_version(), "2-dev", "ge"))); + +if (substr(PHP_OS, 0, 3) == 'WIN') { + define('OS_WINDOWS', true); + define('OS_UNIX', false); + define('PEAR_OS', 'Windows'); +} else { + define('OS_WINDOWS', false); + define('OS_UNIX', true); + define('PEAR_OS', 'Unix'); // blatant assumption +} + +// instant backwards compatibility +if (!defined('PATH_SEPARATOR')) { + if (OS_WINDOWS) { + define('PATH_SEPARATOR', ';'); + } else { + define('PATH_SEPARATOR', ':'); + } +} + +$GLOBALS['_PEAR_default_error_mode'] = PEAR_ERROR_RETURN; +$GLOBALS['_PEAR_default_error_options'] = E_USER_NOTICE; +$GLOBALS['_PEAR_destructor_object_list'] = array(); +$GLOBALS['_PEAR_shutdown_funcs'] = array(); +$GLOBALS['_PEAR_error_handler_stack'] = array(); + +@ini_set('track_errors', true); + +/** + * Base class for other PEAR classes. Provides rudimentary + * emulation of destructors. + * + * If you want a destructor in your class, inherit PEAR and make a + * destructor method called _yourclassname (same name as the + * constructor, but with a "_" prefix). Also, in your constructor you + * have to call the PEAR constructor: $this->PEAR();. + * The destructor method will be called without parameters. Note that + * at in some SAPI implementations (such as Apache), any output during + * the request shutdown (in which destructors are called) seems to be + * discarded. If you need to get any debug information from your + * destructor, use error_log(), syslog() or something similar. + * + * IMPORTANT! To use the emulated destructors you need to create the + * objects by reference: $obj =& new PEAR_child; + * + * @since PHP 4.0.2 + * @author Stig Bakken + * @see http://pear.php.net/manual/ + */ +class PEAR +{ + // {{{ properties + + /** + * Whether to enable internal debug messages. + * + * @var bool + * @access private + */ + var $_debug = false; + + /** + * Default error mode for this object. + * + * @var int + * @access private + */ + var $_default_error_mode = null; + + /** + * Default error options used for this object when error mode + * is PEAR_ERROR_TRIGGER. + * + * @var int + * @access private + */ + var $_default_error_options = null; + + /** + * Default error handler (callback) for this object, if error mode is + * PEAR_ERROR_CALLBACK. + * + * @var string + * @access private + */ + var $_default_error_handler = ''; + + /** + * Which class to use for error objects. + * + * @var string + * @access private + */ + var $_error_class = 'PEAR_Error'; + + /** + * An array of expected errors. + * + * @var array + * @access private + */ + var $_expected_errors = array(); + + // }}} + + // {{{ constructor + + /** + * Constructor. Registers this object in + * $_PEAR_destructor_object_list for destructor emulation if a + * destructor object exists. + * + * @param string $error_class (optional) which class to use for + * error objects, defaults to PEAR_Error. + * @access public + * @return void + */ + function PEAR($error_class = null) + { + $classname = strtolower(get_class($this)); + if ($this->_debug) { + print "PEAR constructor called, class=$classname\n"; + } + if ($error_class !== null) { + $this->_error_class = $error_class; + } + while ($classname && strcasecmp($classname, "pear")) { + $destructor = "_$classname"; + if (method_exists($this, $destructor)) { + global $_PEAR_destructor_object_list; + $_PEAR_destructor_object_list[] = &$this; + if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) { + register_shutdown_function("_PEAR_call_destructors"); + $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true; + } + break; + } else { + $classname = get_parent_class($classname); + } + } + } + + // }}} + // {{{ destructor + + /** + * Destructor (the emulated type of...). Does nothing right now, + * but is included for forward compatibility, so subclass + * destructors should always call it. + * + * See the note in the class desciption about output from + * destructors. + * + * @access public + * @return void + */ + function _PEAR() { + if ($this->_debug) { + printf("PEAR destructor called, class=%s\n", strtolower(get_class($this))); + } + } + + // }}} + // {{{ getStaticProperty() + + /** + * If you have a class that's mostly/entirely static, and you need static + * properties, you can use this method to simulate them. Eg. in your method(s) + * do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar'); + * You MUST use a reference, or they will not persist! + * + * @access public + * @param string $class The calling classname, to prevent clashes + * @param string $var The variable to retrieve. + * @return mixed A reference to the variable. If not set it will be + * auto initialised to NULL. + */ + function &getStaticProperty($class, $var) + { + static $properties; + return $properties[$class][$var]; + } + + // }}} + // {{{ registerShutdownFunc() + + /** + * Use this function to register a shutdown method for static + * classes. + * + * @access public + * @param mixed $func The function name (or array of class/method) to call + * @param mixed $args The arguments to pass to the function + * @return void + */ + function registerShutdownFunc($func, $args = array()) + { + $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args); + } + + // }}} + // {{{ isError() + + /** + * Tell whether a value is a PEAR error. + * + * @param mixed $data the value to test + * @param int $code if $data is an error object, return true + * only if $code is a string and + * $obj->getMessage() == $code or + * $code is an integer and $obj->getCode() == $code + * @access public + * @return bool true if parameter is an error + */ + function isError($data, $code = null) + { + if (is_a($data, 'PEAR_Error')) { + if (is_null($code)) { + return true; + } elseif (is_string($code)) { + return $data->getMessage() == $code; + } else { + return $data->getCode() == $code; + } + } + return false; + } + + // }}} + // {{{ setErrorHandling() + + /** + * Sets how errors generated by this object should be handled. + * Can be invoked both in objects and statically. If called + * statically, setErrorHandling sets the default behaviour for all + * PEAR objects. If called in an object, setErrorHandling sets + * the default behaviour for that object. + * + * @param int $mode + * One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, + * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, + * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION. + * + * @param mixed $options + * When $mode is PEAR_ERROR_TRIGGER, this is the error level (one + * of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). + * + * When $mode is PEAR_ERROR_CALLBACK, this parameter is expected + * to be the callback function or method. A callback + * function is a string with the name of the function, a + * callback method is an array of two elements: the element + * at index 0 is the object, and the element at index 1 is + * the name of the method to call in the object. + * + * When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is + * a printf format string used when printing the error + * message. + * + * @access public + * @return void + * @see PEAR_ERROR_RETURN + * @see PEAR_ERROR_PRINT + * @see PEAR_ERROR_TRIGGER + * @see PEAR_ERROR_DIE + * @see PEAR_ERROR_CALLBACK + * @see PEAR_ERROR_EXCEPTION + * + * @since PHP 4.0.5 + */ + + function setErrorHandling($mode = null, $options = null) + { + if (isset($this) && is_a($this, 'PEAR')) { + $setmode = &$this->_default_error_mode; + $setoptions = &$this->_default_error_options; + } else { + $setmode = &$GLOBALS['_PEAR_default_error_mode']; + $setoptions = &$GLOBALS['_PEAR_default_error_options']; + } + + switch ($mode) { + case PEAR_ERROR_EXCEPTION: + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case null: + $setmode = $mode; + $setoptions = $options; + break; + + case PEAR_ERROR_CALLBACK: + $setmode = $mode; + // class/object method callback + if (is_callable($options)) { + $setoptions = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + } + + // }}} + // {{{ expectError() + + /** + * This method is used to tell which errors you expect to get. + * Expected errors are always returned with error mode + * PEAR_ERROR_RETURN. Expected error codes are stored in a stack, + * and this method pushes a new element onto it. The list of + * expected errors are in effect until they are popped off the + * stack with the popExpect() method. + * + * Note that this method can not be called statically + * + * @param mixed $code a single error code or an array of error codes to expect + * + * @return int the new depth of the "expected errors" stack + * @access public + */ + function expectError($code = '*') + { + if (is_array($code)) { + array_push($this->_expected_errors, $code); + } else { + array_push($this->_expected_errors, array($code)); + } + return sizeof($this->_expected_errors); + } + + // }}} + // {{{ popExpect() + + /** + * This method pops one element off the expected error codes + * stack. + * + * @return array the list of error codes that were popped + */ + function popExpect() + { + return array_pop($this->_expected_errors); + } + + // }}} + // {{{ _checkDelExpect() + + /** + * This method checks unsets an error code if available + * + * @param mixed error code + * @return bool true if the error code was unset, false otherwise + * @access private + * @since PHP 4.3.0 + */ + function _checkDelExpect($error_code) + { + $deleted = false; + + foreach ($this->_expected_errors AS $key => $error_array) { + if (in_array($error_code, $error_array)) { + unset($this->_expected_errors[$key][array_search($error_code, $error_array)]); + $deleted = true; + } + + // clean up empty arrays + if (0 == count($this->_expected_errors[$key])) { + unset($this->_expected_errors[$key]); + } + } + return $deleted; + } + + // }}} + // {{{ delExpect() + + /** + * This method deletes all occurences of the specified element from + * the expected error codes stack. + * + * @param mixed $error_code error code that should be deleted + * @return mixed list of error codes that were deleted or error + * @access public + * @since PHP 4.3.0 + */ + function delExpect($error_code) + { + $deleted = false; + + if ((is_array($error_code) && (0 != count($error_code)))) { + // $error_code is a non-empty array here; + // we walk through it trying to unset all + // values + foreach($error_code as $key => $error) { + if ($this->_checkDelExpect($error)) { + $deleted = true; + } else { + $deleted = false; + } + } + return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME + } elseif (!empty($error_code)) { + // $error_code comes alone, trying to unset it + if ($this->_checkDelExpect($error_code)) { + return true; + } else { + return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME + } + } else { + // $error_code is empty + return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME + } + } + + // }}} + // {{{ raiseError() + + /** + * This method is a wrapper that returns an instance of the + * configured error class with this object's default error + * handling applied. If the $mode and $options parameters are not + * specified, the object's defaults are used. + * + * @param mixed $message a text error message or a PEAR error object + * + * @param int $code a numeric error code (it is up to your class + * to define these if you want to use codes) + * + * @param int $mode One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, + * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, + * PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION. + * + * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter + * specifies the PHP-internal error level (one of + * E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). + * If $mode is PEAR_ERROR_CALLBACK, this + * parameter specifies the callback function or + * method. In other error modes this parameter + * is ignored. + * + * @param string $userinfo If you need to pass along for example debug + * information, this parameter is meant for that. + * + * @param string $error_class The returned error object will be + * instantiated from this class, if specified. + * + * @param bool $skipmsg If true, raiseError will only pass error codes, + * the error message parameter will be dropped. + * + * @access public + * @return object a PEAR error object + * @see PEAR::setErrorHandling + * @since PHP 4.0.5 + */ + function raiseError($message = null, + $code = null, + $mode = null, + $options = null, + $userinfo = null, + $error_class = null, + $skipmsg = false) + { + // The error is yet a PEAR error object + if (is_object($message)) { + $code = $message->getCode(); + $userinfo = $message->getUserInfo(); + $error_class = $message->getType(); + $message->error_message_prefix = ''; + $message = $message->getMessage(); + } + + if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) { + if ($exp[0] == "*" || + (is_int(reset($exp)) && in_array($code, $exp)) || + (is_string(reset($exp)) && in_array($message, $exp))) { + $mode = PEAR_ERROR_RETURN; + } + } + // No mode given, try global ones + if ($mode === null) { + // Class error handler + if (isset($this) && isset($this->_default_error_mode)) { + $mode = $this->_default_error_mode; + $options = $this->_default_error_options; + // Global error handler + } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) { + $mode = $GLOBALS['_PEAR_default_error_mode']; + $options = $GLOBALS['_PEAR_default_error_options']; + } + } + + if ($error_class !== null) { + $ec = $error_class; + } elseif (isset($this) && isset($this->_error_class)) { + $ec = $this->_error_class; + } else { + $ec = 'PEAR_Error'; + } + if ($skipmsg) { + return new $ec($code, $mode, $options, $userinfo); + } else { + return new $ec($message, $code, $mode, $options, $userinfo); + } + } + + // }}} + // {{{ throwError() + + /** + * Simpler form of raiseError with fewer options. In most cases + * message, code and userinfo are enough. + * + * @param string $message + * + */ + function throwError($message = null, + $code = null, + $userinfo = null) + { + if (isset($this) && is_a($this, 'PEAR')) { + return $this->raiseError($message, $code, null, null, $userinfo); + } else { + return PEAR::raiseError($message, $code, null, null, $userinfo); + } + } + + // }}} + function staticPushErrorHandling($mode, $options = null) + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + $def_mode = &$GLOBALS['_PEAR_default_error_mode']; + $def_options = &$GLOBALS['_PEAR_default_error_options']; + $stack[] = array($def_mode, $def_options); + switch ($mode) { + case PEAR_ERROR_EXCEPTION: + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case null: + $def_mode = $mode; + $def_options = $options; + break; + + case PEAR_ERROR_CALLBACK: + $def_mode = $mode; + // class/object method callback + if (is_callable($options)) { + $def_options = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + $stack[] = array($mode, $options); + return true; + } + + function staticPopErrorHandling() + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + $setmode = &$GLOBALS['_PEAR_default_error_mode']; + $setoptions = &$GLOBALS['_PEAR_default_error_options']; + array_pop($stack); + list($mode, $options) = $stack[sizeof($stack) - 1]; + array_pop($stack); + switch ($mode) { + case PEAR_ERROR_EXCEPTION: + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case null: + $setmode = $mode; + $setoptions = $options; + break; + + case PEAR_ERROR_CALLBACK: + $setmode = $mode; + // class/object method callback + if (is_callable($options)) { + $setoptions = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + return true; + } + + // {{{ pushErrorHandling() + + /** + * Push a new error handler on top of the error handler options stack. With this + * you can easily override the actual error handler for some code and restore + * it later with popErrorHandling. + * + * @param mixed $mode (same as setErrorHandling) + * @param mixed $options (same as setErrorHandling) + * + * @return bool Always true + * + * @see PEAR::setErrorHandling + */ + function pushErrorHandling($mode, $options = null) + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + if (isset($this) && is_a($this, 'PEAR')) { + $def_mode = &$this->_default_error_mode; + $def_options = &$this->_default_error_options; + } else { + $def_mode = &$GLOBALS['_PEAR_default_error_mode']; + $def_options = &$GLOBALS['_PEAR_default_error_options']; + } + $stack[] = array($def_mode, $def_options); + + if (isset($this) && is_a($this, 'PEAR')) { + $this->setErrorHandling($mode, $options); + } else { + PEAR::setErrorHandling($mode, $options); + } + $stack[] = array($mode, $options); + return true; + } + + // }}} + // {{{ popErrorHandling() + + /** + * Pop the last error handler used + * + * @return bool Always true + * + * @see PEAR::pushErrorHandling + */ + function popErrorHandling() + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + array_pop($stack); + list($mode, $options) = $stack[sizeof($stack) - 1]; + array_pop($stack); + if (isset($this) && is_a($this, 'PEAR')) { + $this->setErrorHandling($mode, $options); + } else { + PEAR::setErrorHandling($mode, $options); + } + return true; + } + + // }}} + // {{{ loadExtension() + + /** + * OS independant PHP extension load. Remember to take care + * on the correct extension name for case sensitive OSes. + * + * @param string $ext The extension name + * @return bool Success or not on the dl() call + */ + function loadExtension($ext) + { + if (!extension_loaded($ext)) { + // if either returns true dl() will produce a FATAL error, stop that + if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) { + return false; + } + if (OS_WINDOWS) { + $suffix = '.dll'; + } elseif (PHP_OS == 'HP-UX') { + $suffix = '.sl'; + } elseif (PHP_OS == 'AIX') { + $suffix = '.a'; + } elseif (PHP_OS == 'OSX') { + $suffix = '.bundle'; + } else { + $suffix = '.so'; + } + return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix); + } + return true; + } + + // }}} +} + +// {{{ _PEAR_call_destructors() + +function _PEAR_call_destructors() +{ + global $_PEAR_destructor_object_list; + if (is_array($_PEAR_destructor_object_list) && + sizeof($_PEAR_destructor_object_list)) + { + reset($_PEAR_destructor_object_list); + if (@PEAR::getStaticProperty('PEAR', 'destructlifo')) { + $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list); + } + while (list($k, $objref) = each($_PEAR_destructor_object_list)) { + $classname = get_class($objref); + while ($classname) { + $destructor = "_$classname"; + if (method_exists($objref, $destructor)) { + $objref->$destructor(); + break; + } else { + $classname = get_parent_class($classname); + } + } + } + // Empty the object list to ensure that destructors are + // not called more than once. + $_PEAR_destructor_object_list = array(); + } + + // Now call the shutdown functions + if (is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) { + foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) { + call_user_func_array($value[0], $value[1]); + } + } +} + +// }}} + +class PEAR_Error +{ + // {{{ properties + + var $error_message_prefix = ''; + var $mode = PEAR_ERROR_RETURN; + var $level = E_USER_NOTICE; + var $code = -1; + var $message = ''; + var $userinfo = ''; + var $backtrace = null; + + // }}} + // {{{ constructor + + /** + * PEAR_Error constructor + * + * @param string $message message + * + * @param int $code (optional) error code + * + * @param int $mode (optional) error mode, one of: PEAR_ERROR_RETURN, + * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER, + * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION + * + * @param mixed $options (optional) error level, _OR_ in the case of + * PEAR_ERROR_CALLBACK, the callback function or object/method + * tuple. + * + * @param string $userinfo (optional) additional user/debug info + * + * @access public + * + */ + function PEAR_Error($message = 'unknown error', $code = null, + $mode = null, $options = null, $userinfo = null) + { + if ($mode === null) { + $mode = PEAR_ERROR_RETURN; + } + $this->message = $message; + $this->code = $code; + $this->mode = $mode; + $this->userinfo = $userinfo; + if (function_exists("debug_backtrace")) { + if (@!PEAR::getStaticProperty('PEAR_Error', 'skiptrace')) { + $this->backtrace = debug_backtrace(); + } + } + if ($mode & PEAR_ERROR_CALLBACK) { + $this->level = E_USER_NOTICE; + $this->callback = $options; + } else { + if ($options === null) { + $options = E_USER_NOTICE; + } + $this->level = $options; + $this->callback = null; + } + if ($this->mode & PEAR_ERROR_PRINT) { + if (is_null($options) || is_int($options)) { + $format = "%s"; + } else { + $format = $options; + } + printf($format, $this->getMessage()); + } + if ($this->mode & PEAR_ERROR_TRIGGER) { + trigger_error($this->getMessage(), $this->level); + } + if ($this->mode & PEAR_ERROR_DIE) { + $msg = $this->getMessage(); + if (is_null($options) || is_int($options)) { + $format = "%s"; + if (substr($msg, -1) != "\n") { + $msg .= "\n"; + } + } else { + $format = $options; + } + die(sprintf($format, $msg)); + } + if ($this->mode & PEAR_ERROR_CALLBACK) { + if (is_callable($this->callback)) { + call_user_func($this->callback, $this); + } + } + if ($this->mode & PEAR_ERROR_EXCEPTION) { + trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_ErrorStack for exceptions", E_USER_WARNING); + eval('$e = new Exception($this->message, $this->code);$e->PEAR_Error = $this;throw($e);'); + } + } + + // }}} + // {{{ getMode() + + /** + * Get the error mode from an error object. + * + * @return int error mode + * @access public + */ + function getMode() { + return $this->mode; + } + + // }}} + // {{{ getCallback() + + /** + * Get the callback function/method from an error object. + * + * @return mixed callback function or object/method array + * @access public + */ + function getCallback() { + return $this->callback; + } + + // }}} + // {{{ getMessage() + + + /** + * Get the error message from an error object. + * + * @return string full error message + * @access public + */ + function getMessage() + { + return ($this->error_message_prefix . $this->message); + } + + + // }}} + // {{{ getCode() + + /** + * Get error code from an error object + * + * @return int error code + * @access public + */ + function getCode() + { + return $this->code; + } + + // }}} + // {{{ getType() + + /** + * Get the name of this error/exception. + * + * @return string error/exception name (type) + * @access public + */ + function getType() + { + return get_class($this); + } + + // }}} + // {{{ getUserInfo() + + /** + * Get additional user-supplied information. + * + * @return string user-supplied information + * @access public + */ + function getUserInfo() + { + return $this->userinfo; + } + + // }}} + // {{{ getDebugInfo() + + /** + * Get additional debug information supplied by the application. + * + * @return string debug information + * @access public + */ + function getDebugInfo() + { + return $this->getUserInfo(); + } + + // }}} + // {{{ getBacktrace() + + /** + * Get the call backtrace from where the error was generated. + * Supported with PHP 4.3.0 or newer. + * + * @param int $frame (optional) what frame to fetch + * @return array Backtrace, or NULL if not available. + * @access public + */ + function getBacktrace($frame = null) + { + if ($frame === null) { + return $this->backtrace; + } + return $this->backtrace[$frame]; + } + + // }}} + // {{{ addUserInfo() + + function addUserInfo($info) + { + if (empty($this->userinfo)) { + $this->userinfo = $info; + } else { + $this->userinfo .= " ** $info"; + } + } + + // }}} + // {{{ toString() + + /** + * Make a string representation of this object. + * + * @return string a string with an object summary + * @access public + */ + function toString() { + $modes = array(); + $levels = array(E_USER_NOTICE => 'notice', + E_USER_WARNING => 'warning', + E_USER_ERROR => 'error'); + if ($this->mode & PEAR_ERROR_CALLBACK) { + if (is_array($this->callback)) { + $callback = (is_object($this->callback[0]) ? + strtolower(get_class($this->callback[0])) : + $this->callback[0]) . '::' . + $this->callback[1]; + } else { + $callback = $this->callback; + } + return sprintf('[%s: message="%s" code=%d mode=callback '. + 'callback=%s prefix="%s" info="%s"]', + strtolower(get_class($this)), $this->message, $this->code, + $callback, $this->error_message_prefix, + $this->userinfo); + } + if ($this->mode & PEAR_ERROR_PRINT) { + $modes[] = 'print'; + } + if ($this->mode & PEAR_ERROR_TRIGGER) { + $modes[] = 'trigger'; + } + if ($this->mode & PEAR_ERROR_DIE) { + $modes[] = 'die'; + } + if ($this->mode & PEAR_ERROR_RETURN) { + $modes[] = 'return'; + } + return sprintf('[%s: message="%s" code=%d mode=%s level=%s '. + 'prefix="%s" info="%s"]', + strtolower(get_class($this)), $this->message, $this->code, + implode("|", $modes), $levels[$this->level], + $this->error_message_prefix, + $this->userinfo); + } + + // }}} +} + +/* + * Local Variables: + * mode: php + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ +?> diff --git a/paste/include/geshi/scripts/get-keywords/lib/pear/XML/Parser.php b/paste/include/geshi/scripts/get-keywords/lib/pear/XML/Parser.php new file mode 100644 index 0000000..0febabb --- /dev/null +++ b/paste/include/geshi/scripts/get-keywords/lib/pear/XML/Parser.php @@ -0,0 +1,684 @@ + | +// | Tomas V.V.Cox | +// | Stephan Schmidt | +// +----------------------------------------------------------------------+ +// +// $Id: Parser.php,v 1.1 2005/06/04 04:04:48 oracleshinoda Exp $ + +/** + * XML Parser class. + * + * This is an XML parser based on PHP's "xml" extension, + * based on the bundled expat library. + * + * @category XML + * @package XML_Parser + * @author Stig Bakken + * @author Tomas V.V.Cox + * @author Stephan Schmidt + */ + +/** + * uses PEAR's error handling + */ +require_once 'lib/pear/PEAR.php'; + +/** + * resource could not be created + */ +define('XML_PARSER_ERROR_NO_RESOURCE', 200); + +/** + * unsupported mode + */ +define('XML_PARSER_ERROR_UNSUPPORTED_MODE', 201); + +/** + * invalid encoding was given + */ +define('XML_PARSER_ERROR_INVALID_ENCODING', 202); + +/** + * specified file could not be read + */ +define('XML_PARSER_ERROR_FILE_NOT_READABLE', 203); + +/** + * invalid input + */ +define('XML_PARSER_ERROR_INVALID_INPUT', 204); + +/** + * remote file cannot be retrieved in safe mode + */ +define('XML_PARSER_ERROR_REMOTE', 205); + +/** + * XML Parser class. + * + * This is an XML parser based on PHP's "xml" extension, + * based on the bundled expat library. + * + * Notes: + * - It requires PHP 4.0.4pl1 or greater + * - From revision 1.17, the function names used by the 'func' mode + * are in the format "xmltag_$elem", for example: use "xmltag_name" + * to handle the tags of your xml file. + * + * @category XML + * @package XML_Parser + * @author Stig Bakken + * @author Tomas V.V.Cox + * @author Stephan Schmidt + * todo create XML_Parser_Namespace to parse documents with namespaces + * todo create XML_Parser_Pull + * todo Tests that need to be made: + * - mixing character encodings + * - a test using all expat handlers + * - options (folding, output charset) + * - different parsing modes + */ +class XML_Parser extends PEAR +{ + // {{{ properties + + /** + * XML parser handle + * + * @var resource + * @see xml_parser_create() + */ + var $parser; + + /** + * File handle if parsing from a file + * + * @var resource + */ + var $fp; + + /** + * Whether to do case folding + * + * If set to true, all tag and attribute names will + * be converted to UPPER CASE. + * + * @var boolean + */ + var $folding = true; + + /** + * Mode of operation, one of "event" or "func" + * + * @var string + */ + var $mode; + + /** + * Mapping from expat handler function to class method. + * + * @var array + */ + var $handler = array( + 'character_data_handler' => 'cdataHandler', + 'default_handler' => 'defaultHandler', + 'processing_instruction_handler' => 'piHandler', + 'unparsed_entity_decl_handler' => 'unparsedHandler', + 'notation_decl_handler' => 'notationHandler', + 'external_entity_ref_handler' => 'entityrefHandler' + ); + + /** + * source encoding + * + * @var string + */ + var $srcenc; + + /** + * target encoding + * + * @var string + */ + var $tgtenc; + + /** + * handler object + * + * @var object + */ + var $_handlerObj; + + // }}} + // {{{ constructor + + /** + * Creates an XML parser. + * + * This is needed for PHP4 compatibility, it will + * call the constructor, when a new instance is created. + * + * @param string $srcenc source charset encoding, use NULL (default) to use + * whatever the document specifies + * @param string $mode how this parser object should work, "event" for + * startelement/endelement-type events, "func" + * to have it call functions named after elements + * @param string $tgenc a valid target encoding + */ + function XML_Parser($srcenc = null, $mode = 'event', $tgtenc = null) + { + XML_Parser::__construct($srcenc, $mode, $tgtenc); + } + // }}} + + /** + * PHP5 constructor + * + * @param string $srcenc source charset encoding, use NULL (default) to use + * whatever the document specifies + * @param string $mode how this parser object should work, "event" for + * startelement/endelement-type events, "func" + * to have it call functions named after elements + * @param string $tgenc a valid target encoding + */ + function __construct($srcenc = null, $mode = 'event', $tgtenc = null) + { + $this->PEAR('XML_Parser_Error'); + + $this->mode = $mode; + $this->srcenc = $srcenc; + $this->tgtenc = $tgtenc; + } + // }}} + + /** + * Sets the mode of the parser. + * + * Possible modes are: + * - func + * - event + * + * You can set the mode using the second parameter + * in the constructor. + * + * This method is only needed, when switching to a new + * mode at a later point. + * + * @access public + * @param string mode, either 'func' or 'event' + * @return boolean|object true on success, PEAR_Error otherwise + */ + function setMode($mode) + { + if ($mode != 'func' && $mode != 'event') { + $this->raiseError('Unsupported mode given', XML_PARSER_ERROR_UNSUPPORTED_MODE); + } + + $this->mode = $mode; + return true; + } + + /** + * Sets the object, that will handle the XML events + * + * This allows you to create a handler object independent of the + * parser object that you are using and easily switch the underlying + * parser. + * + * If no object will be set, XML_Parser assumes that you + * extend this class and handle the events in $this. + * + * @access public + * @param object object to handle the events + * @return boolean will always return true + * @since v1.2.0beta3 + */ + function setHandlerObj(&$obj) + { + $this->_handlerObj = &$obj; + return true; + } + + /** + * Init the element handlers + * + * @access private + */ + function _initHandlers() + { + if (!is_resource($this->parser)) { + return false; + } + + if (!is_object($this->_handlerObj)) { + $this->_handlerObj = &$this; + } + switch ($this->mode) { + + case 'func': + xml_set_object($this->parser, $this->_handlerObj); + xml_set_element_handler($this->parser, array(&$this, 'funcStartHandler'), array(&$this, 'funcEndHandler')); + break; + + case 'event': + xml_set_object($this->parser, $this->_handlerObj); + xml_set_element_handler($this->parser, 'startHandler', 'endHandler'); + break; + default: + return $this->raiseError('Unsupported mode given', XML_PARSER_ERROR_UNSUPPORTED_MODE); + break; + } + + + /** + * set additional handlers for character data, entities, etc. + */ + foreach ($this->handler as $xml_func => $method) { + if (method_exists($this->_handlerObj, $method)) { + $xml_func = 'xml_set_' . $xml_func; + $xml_func($this->parser, $method); + } + } + } + + // {{{ _create() + + /** + * create the XML parser resource + * + * Has been moved from the constructor to avoid + * problems with object references. + * + * Furthermore it allows us returning an error + * if something fails. + * + * @access private + * @return boolean|object true on success, PEAR_Error otherwise + * + * @see xml_parser_create + */ + function _create() + { + if ($this->srcenc === null) { + $xp = @xml_parser_create(); + } else { + $xp = @xml_parser_create($this->srcenc); + } + if (is_resource($xp)) { + if ($this->tgtenc !== null) { + if (!@xml_parser_set_option($xp, XML_OPTION_TARGET_ENCODING, + $this->tgtenc)) { + return $this->raiseError('invalid target encoding', XML_PARSER_ERROR_INVALID_ENCODING); + } + } + $this->parser = $xp; + $result = $this->_initHandlers($this->mode); + if ($this->isError($result)) { + return $result; + } + xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, $this->folding); + + return true; + } + return $this->raiseError('Unable to create XML parser resource.', XML_PARSER_ERROR_NO_RESOURCE); + } + + // }}} + // {{{ reset() + + /** + * Reset the parser. + * + * This allows you to use one parser instance + * to parse multiple XML documents. + * + * @access public + * @return boolean|object true on success, PEAR_Error otherwise + */ + function reset() + { + $result = $this->_create(); + if ($this->isError( $result )) { + return $result; + } + return true; + } + + // }}} + // {{{ setInputFile() + + /** + * Sets the input xml file to be parsed + * + * @param string Filename (full path) + * @return resource fopen handle of the given file + * @throws XML_Parser_Error + * @see setInput(), setInputString(), parse() + * @access public + */ + function setInputFile($file) + { + /** + * check, if file is a remote file + */ + if (eregi('^(http|ftp)://', substr($file, 0, 10))) { + if (!ini_get('allow_url_fopen')) { + return $this->raiseError('Remote files cannot be parsed, as safe mode is enabled.', XML_PARSER_ERROR_REMOTE); + } + } + + $fp = @fopen($file, 'rb'); + if (is_resource($fp)) { + $this->fp = $fp; + return $fp; + } + return $this->raiseError('File could not be opened.', XML_PARSER_ERROR_FILE_NOT_READABLE); + } + + // }}} + // {{{ setInputString() + + /** + * XML_Parser::setInputString() + * + * Sets the xml input from a string + * + * @param string $data a string containing the XML document + * @return null + **/ + function setInputString($data) + { + $this->fp = $data; + return null; + } + + // }}} + // {{{ setInput() + + /** + * Sets the file handle to use with parse(). + * + * You should use setInputFile() or setInputString() if you + * pass a string + * + * @param mixed $fp Can be either a resource returned from fopen(), + * a URL, a local filename or a string. + * @access public + * @see parse() + * @uses setInputString(), setInputFile() + */ + function setInput($fp) + { + if (is_resource($fp)) { + $this->fp = $fp; + return true; + } + // see if it's an absolute URL (has a scheme at the beginning) + elseif (eregi('^[a-z]+://', substr($fp, 0, 10))) { + return $this->setInputFile($fp); + } + // see if it's a local file + elseif (file_exists($fp)) { + return $this->setInputFile($fp); + } + // it must be a string + else { + $this->fp = $fp; + return true; + } + + return $this->raiseError('Illegal input format', XML_PARSER_ERROR_INVALID_INPUT); + } + + // }}} + // {{{ parse() + + /** + * Central parsing function. + * + * @return true|object PEAR error returns true on success, or a PEAR_Error otherwise + * @access public + */ + function parse() + { + /** + * reset the parser + */ + $result = $this->reset(); + if ($this->isError($result)) { + return $result; + } + // if $this->fp was fopened previously + if (is_resource($this->fp)) { + + while ($data = fread($this->fp, 4096)) { + if (!$this->_parseString($data, feof($this->fp))) { + $error = &$this->raiseError(); + $this->free(); + return $error; + } + } + // otherwise, $this->fp must be a string + } else { + if (!$this->_parseString($this->fp, true)) { + $error = &$this->raiseError(); + $this->free(); + return $error; + } + } + $this->free(); + + return true; + } + + /** + * XML_Parser::_parseString() + * + * @param string $data + * @param boolean $eof + * @return bool + * @access private + * @see parseString() + **/ + function _parseString($data, $eof = false) + { + return xml_parse($this->parser, $data, $eof); + } + + // }}} + // {{{ parseString() + + /** + * XML_Parser::parseString() + * + * Parses a string. + * + * @param string $data XML data + * @param boolean $eof If set and TRUE, data is the last piece of data sent in this parser + * @throws XML_Parser_Error + * @return Pear Error|true true on success or a PEAR Error + * @see _parseString() + */ + function parseString($data, $eof = false) + { + if (!isset($this->parser) || !is_resource($this->parser)) { + $this->reset(); + } + + if (!$this->_parseString($data, $eof)) { + $error = &$this->raiseError(); + $this->free(); + return $error; + } + + if ($eof === true) { + $this->free(); + } + return true; + } + + /** + * XML_Parser::free() + * + * Free the internal resources associated with the parser + * + * @return null + **/ + function free() + { + if (isset($this->parser) && is_resource($this->parser)) { + xml_parser_free($this->parser); + unset( $this->parser ); + } + if (isset($this->fp) && is_resource($this->fp)) { + fclose($this->fp); + } + unset($this->fp); + return null; + } + + /** + * XML_Parser::raiseError() + * + * Throws a XML_Parser_Error + * + * @param string $msg the error message + * @param integer $ecode the error message code + * @return XML_Parser_Error + **/ + function raiseError($msg = null, $ecode = 0) + { + $msg = !is_null($msg) ? $msg : $this->parser; + $err = &new XML_Parser_Error($msg, $ecode); + return parent::raiseError($err); + } + + // }}} + // {{{ funcStartHandler() + + function funcStartHandler($xp, $elem, $attribs) + { + $func = 'xmltag_' . $elem; + if (strchr($func, '.')) { + $func = str_replace('.', '_', $func); + } + if (method_exists($this->_handlerObj, $func)) { + call_user_func(array(&$this->_handlerObj, $func), $xp, $elem, $attribs); + } elseif (method_exists($this->_handlerObj, 'xmltag')) { + call_user_func(array(&$this->_handlerObj, 'xmltag'), $xp, $elem, $attribs); + } + } + + // }}} + // {{{ funcEndHandler() + + function funcEndHandler($xp, $elem) + { + $func = 'xmltag_' . $elem . '_'; + if (strchr($func, '.')) { + $func = str_replace('.', '_', $func); + } + if (method_exists($this->_handlerObj, $func)) { + call_user_func(array(&$this->_handlerObj, $func), $xp, $elem); + } elseif (method_exists($this->_handlerObj, 'xmltag_')) { + call_user_func(array(&$this->_handlerObj, 'xmltag_'), $xp, $elem); + } + } + + // }}} + // {{{ startHandler() + + /** + * + * @abstract + */ + function startHandler($xp, $elem, &$attribs) + { + return NULL; + } + + // }}} + // {{{ endHandler() + + /** + * + * @abstract + */ + function endHandler($xp, $elem) + { + return NULL; + } + + + // }}}me +} + +/** + * error class, replaces PEAR_Error + * + * An instance of this class will be returned + * if an error occurs inside XML_Parser. + * + * There are three advantages over using the standard PEAR_Error: + * - All messages will be prefixed + * - check for XML_Parser error, using is_a( $error, 'XML_Parser_Error' ) + * - messages can be generated from the xml_parser resource + * + * @package XML_Parser + * @access public + * @see PEAR_Error + */ +class XML_Parser_Error extends PEAR_Error +{ + // {{{ properties + + /** + * prefix for all messages + * + * @var string + */ + var $error_message_prefix = 'XML_Parser: '; + + // }}} + // {{{ constructor() + /** + * construct a new error instance + * + * You may either pass a message or an xml_parser resource as first + * parameter. If a resource has been passed, the last error that + * happened will be retrieved and returned. + * + * @access public + * @param string|resource message or parser resource + * @param integer error code + * @param integer error handling + * @param integer error level + */ + function XML_Parser_Error($msgorparser = 'unknown error', $code = 0, $mode = PEAR_ERROR_RETURN, $level = E_USER_NOTICE) + { + if (is_resource($msgorparser)) { + $code = xml_get_error_code($msgorparser); + $msgorparser = sprintf('%s at XML input line %d', + xml_error_string($code), + xml_get_current_line_number($msgorparser)); + } + $this->PEAR_Error($msgorparser, $code, $mode, $level); + } + // }}} +} +?> \ No newline at end of file -- cgit v1.2.3