summaryrefslogtreecommitdiffstats
path: root/paste
diff options
context:
space:
mode:
Diffstat (limited to 'paste')
-rw-r--r--paste/include/class.geshi.php739
-rw-r--r--paste/include/geshi/.project17
-rw-r--r--paste/include/geshi/classes/class.geshicodecontext.php550
-rw-r--r--paste/include/geshi/classes/class.geshicontext.php721
-rw-r--r--paste/include/geshi/classes/class.geshistringcontext.php190
-rw-r--r--paste/include/geshi/classes/class.geshistyler.php224
-rw-r--r--paste/include/geshi/classes/css/class.geshicssinlinemediacontext.php60
-rw-r--r--paste/include/geshi/classes/php/class.geshiphpdoublestringcontext.php182
-rw-r--r--paste/include/geshi/contexts/codeworker/codeworker.php126
-rw-r--r--paste/include/geshi/contexts/codeworker/cworkercwt.php138
-rw-r--r--paste/include/geshi/contexts/codeworker/cwt.php41
-rw-r--r--paste/include/geshi/contexts/codeworker/roughtext.php58
-rw-r--r--paste/include/geshi/contexts/common/double_string.php51
-rw-r--r--paste/include/geshi/contexts/common/multi_comment.php46
-rw-r--r--paste/include/geshi/contexts/common/single_comment.php46
-rw-r--r--paste/include/geshi/contexts/common/single_string.php51
-rw-r--r--paste/include/geshi/contexts/common/single_string_eol.php51
-rw-r--r--paste/include/geshi/contexts/css/at_rule.php74
-rw-r--r--paste/include/geshi/contexts/css/attribute_selector.php49
-rw-r--r--paste/include/geshi/contexts/css/css.php103
-rw-r--r--paste/include/geshi/contexts/css/inline_media.php54
-rw-r--r--paste/include/geshi/contexts/css/rule.php301
-rw-r--r--paste/include/geshi/contexts/css/string.php55
-rw-r--r--paste/include/geshi/contexts/delphi/asm.php271
-rw-r--r--paste/include/geshi/contexts/delphi/delphi.php382
-rw-r--r--paste/include/geshi/contexts/delphi/exports_brackets.php178
-rw-r--r--paste/include/geshi/contexts/delphi/extern.php131
-rw-r--r--paste/include/geshi/contexts/delphi/multi_comment.php51
-rw-r--r--paste/include/geshi/contexts/delphi/preprocessor.php51
-rw-r--r--paste/include/geshi/contexts/delphi/property.php157
-rw-r--r--paste/include/geshi/contexts/delphi/property_index.php143
-rw-r--r--paste/include/geshi/contexts/doxygen/doxygen.php44
-rw-r--r--paste/include/geshi/contexts/doxygen/link.php46
-rw-r--r--paste/include/geshi/contexts/doxygen/tag.php46
-rw-r--r--paste/include/geshi/contexts/html/comment.php46
-rw-r--r--paste/include/geshi/contexts/html/css.php49
-rw-r--r--paste/include/geshi/contexts/html/doctype.php50
-rw-r--r--paste/include/geshi/contexts/html/html.php55
-rw-r--r--paste/include/geshi/contexts/html/javascript.php49
-rw-r--r--paste/include/geshi/contexts/html/string.php56
-rw-r--r--paste/include/geshi/contexts/html/string_javascript.php55
-rw-r--r--paste/include/geshi/contexts/html/tag.php98
-rw-r--r--paste/include/geshi/contexts/javascript/javascript.php187
-rw-r--r--paste/include/geshi/contexts/php/double_string.php57
-rw-r--r--paste/include/geshi/contexts/php/doxygen.php45
-rw-r--r--paste/include/geshi/contexts/php/heredoc.php60
-rw-r--r--paste/include/geshi/contexts/php/php.php910
-rw-r--r--paste/include/geshi/contexts/php/php4.php851
-rw-r--r--paste/include/geshi/contexts/php/php5.php900
-rw-r--r--paste/include/geshi/contexts/php/single_comment.php47
-rw-r--r--paste/include/geshi/contexts/qbasic/comment.php47
-rw-r--r--paste/include/geshi/contexts/qbasic/qbasic.php68
-rw-r--r--paste/include/geshi/contexts/qbasic/string.php46
-rw-r--r--paste/include/geshi/contexts/web3d/comment.php48
-rw-r--r--paste/include/geshi/contexts/web3d/string.php50
-rw-r--r--paste/include/geshi/contexts/web3d/string_javascript.php51
-rw-r--r--paste/include/geshi/contexts/web3d/vrml1.php214
-rw-r--r--paste/include/geshi/contexts/web3d/vrml97.php218
-rw-r--r--paste/include/geshi/contexts/web3d/x3d_ascii.php221
-rw-r--r--paste/include/geshi/functions.geshi.php282
-rw-r--r--paste/include/geshi/languages/codeworker/codeworker.php52
-rw-r--r--paste/include/geshi/languages/css/css.php52
-rw-r--r--paste/include/geshi/languages/delphi/delphi.php54
-rw-r--r--paste/include/geshi/languages/html/html.php52
-rw-r--r--paste/include/geshi/languages/javascript/javascript.php52
-rw-r--r--paste/include/geshi/languages/php/php.php53
-rw-r--r--paste/include/geshi/languages/php/php4.php54
-rw-r--r--paste/include/geshi/languages/php/php5.php53
-rw-r--r--paste/include/geshi/languages/qbasic/qbasic.php52
-rw-r--r--paste/include/geshi/languages/web3d/vrml97.php46
-rw-r--r--paste/include/geshi/scripts/get-keywords/docs/README23
-rw-r--r--paste/include/geshi/scripts/get-keywords/get-keywords.php143
-rw-r--r--paste/include/geshi/scripts/get-keywords/languages/css/class.csskeywordgetter.php101
-rw-r--r--paste/include/geshi/scripts/get-keywords/languages/css/class.cssxmlparser.php112
-rw-r--r--paste/include/geshi/scripts/get-keywords/languages/html/class.htmlkeywordgetter.php96
-rw-r--r--paste/include/geshi/scripts/get-keywords/languages/javascript/class.javascriptkeywordgetter.php121
-rw-r--r--paste/include/geshi/scripts/get-keywords/languages/javascript/class.javascriptxmlparser.php107
-rw-r--r--paste/include/geshi/scripts/get-keywords/languages/php/class.phpkeywordgetter.php120
-rw-r--r--paste/include/geshi/scripts/get-keywords/languages/php/class.phpxmlparser.php107
-rw-r--r--paste/include/geshi/scripts/get-keywords/lib/class.keywordgetter.php184
-rw-r--r--paste/include/geshi/scripts/get-keywords/lib/class.keywordgettererror.php97
-rw-r--r--paste/include/geshi/scripts/get-keywords/lib/class.keywordgetterstrategy.php105
-rw-r--r--paste/include/geshi/scripts/get-keywords/lib/class.keywordxmlparser.php58
-rw-r--r--paste/include/geshi/scripts/get-keywords/lib/functions.get-keywords.php95
-rw-r--r--paste/include/geshi/scripts/get-keywords/lib/pear/Console/Getopt.php251
-rw-r--r--paste/include/geshi/scripts/get-keywords/lib/pear/PEAR.php1055
-rw-r--r--paste/include/geshi/scripts/get-keywords/lib/pear/XML/Parser.php684
-rw-r--r--paste/include/highlight.inc1122
-rw-r--r--paste/include/pastify.inc17
89 files changed, 14171 insertions, 1134 deletions
diff --git a/paste/include/class.geshi.php b/paste/include/class.geshi.php
new file mode 100644
index 0000000..ee6436e
--- /dev/null
+++ b/paste/include/class.geshi.php
@@ -0,0 +1,739 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package core
+ * @author Nigel McNie <nigel@geshi.org>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL
+ * @copyright (C) 2004, 2005 Nigel McNie
+ * @version 1.1.0
+ *
+ */
+
+/**
+ * MAJOR TODOs:
+ *
+ * @todo [blocking 1.1.1] (bug 5) Support balanced context endings
+ * @todo [blocking 1.1.1] (bug 14) OCCs should be able to modify their parent context
+ * @todo [blocking 1.1.1] (bug 16, 17) Better Delphi and Codeworker support
+ */
+
+/** GeSHi Version */
+define('GESHI_VERSION', '1.1.0');
+
+/** Set the correct directory separator */
+define('GESHI_DIR_SEPARATOR', ('WIN' != substr(PHP_OS, 0, 3)) ? '/' : '\\');
+
+// Define the root directory for the GeSHi code tree
+if (!defined('GESHI_ROOT')) {
+ /** The root directory for GeSHi (where class.geshi.php is located) */
+ define('GESHI_ROOT', dirname(__FILE__) . GESHI_DIR_SEPARATOR);
+}
+
+/**#@+
+ * @access private
+ */
+/** The data directory for GeSHi */
+define('GESHI_DATA_ROOT', GESHI_ROOT . 'geshi' . GESHI_DIR_SEPARATOR);
+/** The classes directory for GeSHi */
+define('GESHI_CLASSES_ROOT', GESHI_DATA_ROOT . 'classes' . GESHI_DIR_SEPARATOR);
+/** The languages directory for GeSHi */
+define('GESHI_LANGUAGES_ROOT', GESHI_DATA_ROOT . 'languages' . GESHI_DIR_SEPARATOR);
+/** The context files directory for GeSHi */
+define('GESHI_CONTEXTS_ROOT', GESHI_DATA_ROOT . 'contexts' . GESHI_DIR_SEPARATOR);
+/** The theme files directory for GeSHi */
+define('GESHI_THEMES_ROOT', GESHI_DATA_ROOT . 'themes' . GESHI_DIR_SEPARATOR);
+/**#@-*/
+
+/** Get required functions */
+require GESHI_DATA_ROOT . 'functions.geshi.php';
+
+/** Get styler class */
+require GESHI_CLASSES_ROOT . 'class.geshistyler.php';
+
+/** Get context class */
+require GESHI_CLASSES_ROOT . 'class.geshicontext.php';
+
+
+//
+// Constants
+//
+
+// Debugging constants. These will disappear in stable builds. Specify
+// as a bitfield, e.g. GESHI_DBG_API | GESHI_DBG_PARSE, by defining the
+// GESHI_DBG context before including this file
+/** No debugging */
+define('GESHI_DBG_NONE', 0);
+/** Debug the API */
+define('GESHI_DBG_API', 1);
+/** Debug actual parsing */
+define('GESHI_DBG_PARSE', 2);
+/** Debug error handling */
+define('GESHI_DBG_ERR', 4);
+/** Maximum debug level */
+define('GESHI_DBG_ALL', GESHI_DBG_API | GESHI_DBG_PARSE | GESHI_DBG_ERR);
+
+// Set efault debug level
+if (!defined('GESHI_DBG')) {
+ /** Default debug level */
+ define('GESHI_DBG', GESHI_DBG_NONE);
+}
+
+// These provide BACKWARD COMPATIBILITY ONLY
+// Use New Method setStyles(mixed identifiers, string styles);
+// e.g. setStyles('html/tag', 'styles');
+// setStyles(array('html/tag', 'html/css-delimiters'), 'style');
+/** Used to mark a context as having no equivalence in 1.0.X */
+define('GESHI_STYLE_NONE', 0);
+/** Used to mark a context as being like a number in 1.0.X */
+define('GESHI_STYLE_NUMBERS', 1);
+/** Used to mark a context as being like a comment in 1.0.X */
+define('GESHI_STYLE_COMMENTS', 2);
+/** Used to mark a context as being like a string in 1.0.X */
+define('GESHI_STYLE_STRINGS', 3);
+/** Used to mark a context as being like a symbol in 1.0.X */
+define('GESHI_STYLE_SYMBOLS', 4);
+/** Used to mark a context as being like a method in 1.0.X */
+define('GESHI_STYLE_METHODS', 5);
+
+/**#@+
+ * @access private
+ */
+
+// Error related constants, not needed by users of GeSHi
+/** No error has occured */
+define('GESHI_ERROR_NONE', 0);
+/** There is no source code to highlight */
+define('GESHI_ERROR_NO_INPUT', 1);
+/** You don't have a language file for the specified language */
+define('GESHI_ERROR_NO_SUCH_LANG', 2);
+/** The language name contained illegal characters */
+define('GESHI_ERROR_LANG_NAME_ILLEGAL_CHARS', 4);
+/** The path specified is not readable */
+//define('GESHI_ERROR_ILLEGAL_PATH', 5);
+/** The theme specified does not exist */
+//define('GESHI_ERROR_NO_SUCH_THEME', 6);
+/** Parsing is in strict mode, but the root context does not have a specific opener */
+//define('GESHI_ERROR_STRICT_MODE_NO_OPENER', 7);
+/** getTime($type) was called with an invalid type */
+define('GESHI_ERROR_INVALID_TIME_TYPE', 8);
+/** A file that was requested for loading data is not available */
+define('GESHI_ERROR_FILE_UNAVAILABLE', 9);
+
+// Constants for specifying who (out of the parent or child) highlights the delimiter
+// between the parent and the child. Note that if you view the numbers as two bit binary,
+// a 1 indicates where the child parses and a 0 indicates where the parent should parse.
+// The default is GESHI_CHILD_PARSE_BOTH
+/** The child should parse neither delimiter (parent parses both) */
+define('GESHI_CHILD_PARSE_NONE', 0);
+/** The child should parse the right (end) delimiter, the parent should parse the left delimiter */
+define('GESHI_CHILD_PARSE_RIGHT', 1);
+/** The child should parse the left (beginning) delimiter, the parent should parse the right delimiter */
+define('GESHI_CHILD_PARSE_LEFT', 2);
+/** The child should parse both delimiters (default) */
+define('GESHI_CHILD_PARSE_BOTH', 3);
+
+// The name of integer/double number contexts
+define('GESHI_NUM_INT', 'num/int');
+define('GESHI_NUM_DBL', 'num/dbl');
+
+/** Default file extension */
+define('GESHI_DEFAULT_FILE_EXTENSION', '.php');
+
+/**#@-*/
+
+
+/**
+ * The GeSHi class
+ *
+ * @package core
+ * @author Nigel McNie <nigel@geshi.org>
+ * @version 1.1.0
+ * @since 1.0.0
+ */
+class GeSHi
+{
+ /**#@+
+ * @access private
+ * @var string
+ */
+
+ /**
+ * The source code to parse
+ */
+ var $_source;
+
+ /**
+ * The name of the language to use when parsing the source
+ */
+ var $language;
+
+ /**
+ * The humanised version of the language name
+ */
+ var $humanLanguageName;
+
+ /**
+ * The error code of any error that has occured
+ */
+ var $_error;
+
+ /**#@-*/
+ /**#@+
+ * @access private
+ */
+
+ /**
+ * The root context to use for parsing the source
+ *
+ * @var GeSHiContext
+ */
+ var $_rootContext;
+
+ /**
+ * Whether this object should be prepared as if it will be used
+ * many times
+ *
+ * @var boolean
+ */
+ var $_cacheRootContext;
+
+ /**
+ * The cached root context, if caching of context trees is enabled
+ *
+ * @var GeSHiContext
+ */
+ var $_cachedRootContext;
+
+ /**
+ * The GeSHiStyler object used by this class and all contexts for
+ * assisting parsing.
+ *
+ * @var GeSHiStyler
+ */
+
+ /**#@-*/
+
+ /**
+ * Sets the source and language name of the source to parse
+ *
+ * Also sets up other defaults, such as the default encoding
+ *
+ * <b>USAGE:</b>
+ *
+ * <pre>$geshi =& new GeSHi($source, $language);
+ * if (false !== ($msg = $geshi->error())) {
+ * // Handle error here: error message in $msg
+ * }
+ * $code = $geshi->parseCode();</pre>
+ *
+ * @param string The source code to highlight
+ * @param string The language to highlight the source with
+ * @param string The path to the GeSHi data files. <b>This is no longer used!</b> The path is detected
+ * automatically by GeSHi, this paramters is only included for backward compatibility. If
+ * you want to set the path to the GeSHi data directories yourself, you should define the
+ * GESHI_ROOT constant before including class.geshi.php.
+ * @since 1.0.0
+ */
+ function GeSHi ($source, $language_name, $path = '')
+ {
+ geshi_dbg('GeSHi::GeSHi (language='.$language_name.')', GESHI_DBG_API);
+
+ // Initialise timing
+ $initial_times = array(0 => '0 0', 1 => '0 0');
+ $this->_times = array(
+ 'pre' => $initial_times,
+ 'parse' => $initial_times,
+ 'post' => $initial_times
+ );
+
+ $this->_styler =& new GeSHiStyler;
+
+ // @todo [blocking 1.1.5] Make third parameter an option array thing
+
+ $this->setFileExtension(GESHI_DEFAULT_FILE_EXTENSION);
+ //$this->setOutputFormat(GESHI_OUTPUT_HTML);
+ //$this->setEncoding(GESHI_DEFAULT_ENCODING);
+
+ // Set the initial source/language
+ $this->setSource($source);
+ $this->setLanguage($language_name);
+ }
+
+ /**
+ * Returns an error message if there has been an error. Useful for debugging,
+ * but not recommended for use on a live site.
+ *
+ * The last error that occured is returned by this method
+ * @todo [blocking 1.1.9] Documentation: has this changed from 1.0.X?
+ *
+ * @return false|string A message if there is an error, else false
+ * @since 1.0.0
+ */
+ function error ()
+ {
+ geshi_dbg('GeSHi::error()', GESHI_DBG_ERR | GESHI_DBG_API);
+ if ($this->_error) {
+ $msg = $this->_getErrorMessage();
+ geshi_dbg(' ERR: ' . $this->_error . ': ' . $msg, GESHI_DBG_API | GESHI_DBG_ERR);
+ return sprintf('<br /><strong>GeSHi Error:</strong> %s (code %s)<br />',
+ $msg,
+ '<a href="http://geshi.org/developers/error-codes/#' . $this->_error
+ . '">#' . $this->_error . '</a>'
+ );
+ }
+ geshi_dbg(' No error', GESHI_DBG_ERR | GESHI_DBG_API);
+ return false;
+ }
+
+ /**
+ * Sets the source code to highlight
+ *
+ * @param string The source code to highlight
+ * @since 1.0.0
+ */
+ function setSource ($source)
+ {
+ geshi_dbg('GeSHi::setSource(' . substr($source, 0, 15) . '...)', GESHI_DBG_API);
+ $this->_source = $source;
+ if (!$this->_sourceValid()) {
+ geshi_dbg('@e Source code is not valid!', GESHI_DBG_API | GESHI_DBG_ERR);
+ }
+ }
+
+ /**
+ * Sets the source code to highlight. This method is deprecated, and will be
+ * removed in 1.4/2.0.
+ *
+ * @param string The source code to highlight
+ * @since 1.0.0
+ * @deprecated In favour of {@link setSource()}
+ */
+ function set_source ($source)
+ {
+ $this->setSource($source);
+ }
+
+ /**
+ * Sets the language to use for highlighting
+ *
+ * @param string The language to use for highlighting
+ * @since 1.0.0
+ */
+ function setLanguage ($language_name)
+ {
+ $this->_times['pre'][0] = microtime();
+ geshi_dbg('GeSHi::setLanguage('.$language_name.')', GESHI_DBG_API);
+ $this->_language = strtolower($language_name);
+
+ // Make a legal language name
+ if (false === strpos($this->_language, '/')) {
+ $this->_language .= '/'.$this->_language;
+ geshi_dbg(' Language name converted to '.$this->_language, GESHI_DBG_API);
+ }
+
+ if ($this->_languageNameValid()) {
+ // load language now
+ geshi_dbg('@o Language name fine, loading data', GESHI_DBG_API);
+ $this->_parsePreProcess();
+ } else {
+ geshi_dbg('@e Language name not OK! (code '.$this->_error.')', GESHI_DBG_API | GESHI_DBG_ERR);
+ }
+
+ $this->_times['pre'][1] = microtime();
+ geshi_dbg(' Language data loaded in ' . number_format($this->getTime('pre'), 3) . ' seconds', GESHI_DBG_API);
+ }
+
+ /**
+ * Sets the language to use for highlighting. This method is deprecated, and
+ * will be removed in 1.4/2.0.
+ *
+ * @param string The language to use for highlighting
+ * @since 1.0.0
+ * @deprecated In favour of {@link setLanguage()}
+ */
+ function set_language($language_name)
+ {
+ $this->setLanguage($language_name);
+ }
+
+ /**
+ * Sets whether this object should cache the root context as loaded. Use
+ * this if you're going to use the same language in this object to parse
+ * multiple source codes.
+ *
+ * @param boolean true if caching of context data should be used
+ */
+ function cacheRootContext ($flag = true)
+ {
+ geshi_dbg('GeSHi::cacheRootContext(' . $flag . ')', GESHI_DBG_API);
+ $this->_cacheRootContext = ($flag) ? true : false;
+ $this->_cachedRootContext = ($this->_cacheRootContext) ? $this->_rootContext : null;
+ geshi_dbg(' Set caching to ' . $flag . ', cached root context size = ' . count($this->_cachedRootContext), GESHI_DBG_API);
+ }
+
+ /**
+ * Sets the file extension to use when getting external php files
+ *
+ * @param string The file extension for PHP files. Can be specified with or without the leading "."
+ */
+ function setFileExtension ($extension)
+ {
+ $this->_styler->fileExtension = ('.' == substr($extension, 0, 1)) ? $extension : '.' . $extension;
+ geshi_dbg('GeSHi::setFileExtension(' . $this->_styler->fileExtension . ')', GESHI_DBG_API);
+ }
+
+ /**
+ * Returns various timings related to this object.
+ *
+ * For example, how long it took to load a specific context,
+ * or parse the source code.
+ *
+ * You can pass a string to this method, it will return various timings based
+ * on what string you pass:
+ *
+ * <ul>
+ * <li>If you pass <b>'total'</b> (default), you will get the time it took to
+ * load, parse and post-process the last call to {@link GeSHi::parseCode()}.</li>
+ * <li>If you pass <b>'pre'</b>, you will get the time it took to load the last
+ * language. If caching of the root context is enabled, then this time will likely
+ * be close to zero if you are calling this method after second and subsequent calls
+ * to {@link GeSHi::parseCode()}.</li>
+ * <li>If youpass <b>'parse'</b>, you will get the time it took to parse the last
+ * time {@link GeSHi::parseCode()} was called.
+ *
+ * @param string What time you want to access
+ * @return false|double The time if there is a time, else false if there was an error
+ */
+ function getTime ($type = 'total')
+ {
+ geshi_dbg('GeSHi::getTime(' . $type . ')', GESHI_DBG_API);
+ if (isset($this->_times[$type])) {
+ geshi_dbg('@o Valid type', GESHI_DBG_API);
+ $start = explode(' ', $this->_times[$type][0]);
+ $end = explode(' ', $this->_times[$type][1]);
+ return $end[0] + $end[1] - $start[0] - $start[1];
+ } elseif ('total' == $type) {
+ return $this->getTime('pre') + $this->getTime('parse') + $this->getTime('post');
+ }
+ geshi_dbg('@w Type passed to getTime is invalid', GESHI_DBG_API | GESHI_DBG_ERR);
+ $this->_error = GESHI_ERROR_INVALID_TIME_TYPE;
+ return false;
+ }
+
+ /**
+ * Sets styles of contexts in the source code
+ *
+ * @param string The selector to use, this is the style name of a context. Example: php/php
+ * @param string The CSS styles to apply to the context
+ */
+ function setStyles ($selector, $styles)
+ {
+ geshi_dbg('GeSHi::setStyles(' . $selector . ', ' . $styles . ')', GESHI_DBG_API);
+ $this->_styler->setStyle($selector, $styles);
+ }
+
+ /**
+ * Returns the version of this GeSHi
+ *
+ * @return string The version of this GeSHi
+ * @static
+ */
+ function getVersion ()
+ {
+ geshi_dbg('GeSHi::getVersion()', GESHI_DBG_API);
+ return GESHI_VERSION;
+ }
+
+ /**
+ * Returns the version of this GeSHi
+ *
+ * @return string The version of this GeSHi
+ * @deprecated in favour of {@link GeSHi::getVersion()}
+ */
+ function get_version ()
+ {
+ return GeSHi::getVersion();
+ }
+
+ /**
+ * Syntax-highlights the source code
+ *
+ * @return string The source code, highlighted
+ */
+ function parseCode ()
+ {
+ $this->_times['parse'][0] = microtime();
+ geshi_dbg('GeSHi::parseCode()', GESHI_DBG_API | GESHI_DBG_PARSE);
+
+ if ($this->_error) {
+ // Bail out
+ geshi_dbg('@e Error occured!!', GESHI_DBG_PARSE);
+ $this->_times['parse'][1] = $this->_times['post'][0] = microtime();
+ $result = $this->_parsePostProcess();
+ $this->_times['post'][1] = microtime();
+ return $result;
+ }
+
+ // Kill the cached root context, replacing with
+ // the new root context if needed
+ if ($this->_cacheRootContext) {
+ $this->_rootContext = $this->_cachedRootContext;
+ }
+
+ //@todo [blocking 1.1.5] does this space still need to be added?
+ $code = ' ' . $this->_source;
+ // Runtime setup of context tree/styler info
+ // Reset the parse data to nothing
+ $this->_styler->resetParseData();
+ // Remove contexts from the parse tree that aren't interesting
+ $this->_rootContext->trimUselessChildren($code);
+ // The important bit - parse the code
+ $this->_rootContext->parseCode($code);
+
+
+ $this->_times['parse'][1] = $this->_times['post'][0] = microtime();
+ $result = $this->_parsePostProcess();
+ $this->_times['post'][1] = microtime();
+
+ return $result;
+ }
+
+ //
+ // Private Methods
+ //
+
+ /**#@+
+ * @access private
+ */
+ /**
+ * Get the error message relating to the current error code
+ *
+ * @return string The error message relating to the current error code
+ */
+ function _getErrorMessage ()
+ {
+ if ($this->_error) {
+ $messages = array (
+ // @todo [blocking 1.1.5] Move out of here
+ GESHI_ERROR_NO_SUCH_LANG => 'GeSHi could not find the language {LANGUAGE} (using path {LANGPATH})',
+ GESHI_ERROR_NO_INPUT => 'No source code passed to GeSHi to highlight',
+ GESHI_ERROR_LANG_NAME_ILLEGAL_CHARS => 'The language name {LANGUAGE} contains illegal characters',
+ //GESHI_ERROR_ILLEGAL_PATH => 'The path {PATH} is not a readable directory',
+ //GESHI_ERROR_NO_SUCH_THEME => 'GeSHi could not find the theme {THEME} (using path {THEMEPATH})',
+ //GESHI_ERROR_STRICT_MODE_NO_OPENER => 'Strict mode is enabled but there is no opener for the root context',
+ GESHI_ERROR_INVALID_TIME_TYPE => 'Call getTime with the only parameter set to one of "pre", "parse", "post" or "total"',
+ GESHI_ERROR_FILE_UNAVAILABLE => 'A file that GeSHi requires to parse using the language ' . $this->_language . ' is unavailable'
+ );
+
+ $variable_substitutes = array (
+ '{LANGUAGE}' => $this->_language,
+ '{PATH}' => GESHI_ROOT,
+ '{LANGPATH}' => GESHI_LANGUAGES_ROOT,
+ //'{THEMEPATH}' => GESHI_THEMES_ROOT,
+ //'{THEME}' => $this->_styler->themeName
+ );
+
+ $message = $messages[$this->_error];
+ foreach ($variable_substitutes as $string => $replacement) {
+ $message = str_replace($string, $replacement, $message);
+ }
+ $message = htmlspecialchars($message, ENT_COMPAT, $this->_styler->charset);
+ return $message;
+ }
+ return '';
+ }
+
+ /**
+ * Check that the language name to be used is valid
+ *
+ * @return boolean true if the language name is valid, else false
+ */
+ function _languageNameValid ()
+ {
+ geshi_dbg('GeSHi::_languageNameValid('.$this->_language.')', GESHI_DBG_API);
+
+ // Check if the language contains illegal characters. If language names do
+ // not match this regular expression, they are not valid. This is a useful
+ // security check as well, if people blindly use a post/get variable as the
+ // language name...
+ if (!preg_match('#[a-z][a-z0-9]*(/[a-z][a-z0-9]*)+#', $this->_language)) {
+ geshi_dbg('@e Language name contains illegal characters', GESHI_DBG_API | GESHI_DBG_ERR);
+ $this->_error = GESHI_ERROR_LANG_NAME_ILLEGAL_CHARS;
+ return false;
+ }
+
+ // Check that the language file for this language exists
+ $language_file = $this->_getLanguageDataFile();
+ geshi_dbg(' Language file to use: ' . $language_file, GESHI_DBG_API);
+
+ if (!geshi_can_include($language_file)) {
+ geshi_dbg('@e Language does not exist on filesystem', GESHI_DBG_API | GESHI_DBG_ERR);
+ $this->_error = GESHI_ERROR_NO_SUCH_LANG;
+ return false;
+ }
+
+ geshi_dbg('@o Language name is fine', GESHI_DBG_API);
+ return true;
+ }
+
+ /**
+ * Checks to make sure that the source code inputted is valid
+ *
+ * The source is valid when:
+ *
+ * <ul>
+ * <li>it is not empty</li>
+ * </ul>
+ *
+ * @return true if the source code is valid, else false
+ */
+ function _sourceValid ()
+ {
+ geshi_dbg('GeSHi::_sourceValid()', GESHI_DBG_API);
+ // Is source empty?
+ if ('' == trim($this->_source)) {
+ geshi_dbg('@e No source code inputted', GESHI_DBG_API | GESHI_DBG_ERR);
+ $this->_error = GESHI_ERROR_NO_INPUT;
+ return false;
+ }
+ geshi_dbg('@o Source code OK', GESHI_DBG_API);
+ return true;
+ // @todo [blocking 1.1.9] Other things can go in here - checks against max and min length etc
+ }
+
+ /**
+ * Prepare the source code for parsing
+ */
+ function _parsePreProcess ()
+ {
+ geshi_dbg('GeSHi::parsePreProcess()', GESHI_DBG_API);
+
+ // Strip newlines to common form
+ $this->_source = str_replace("\r\n", "\n", $this->_source);
+ $this->_source = str_replace("\r", "\n", $this->_source);
+
+ // Load all the data needed for parsing this language
+ $language_file = $this->_getLanguageDataFile();
+ geshi_dbg(' Loading language data from ' . GESHI_LANGUAGES_ROOT . $language_file, GESHI_DBG_API);
+ require $language_file;
+
+ if ($error_data = $this->_rootContext->load($this->_styler)) {
+ geshi_dbg('@e Could not load the context data tree: code(' . $error_data['code'] . ') in context ' . $error_data['name'], GESHI_DBG_API | GESHI_DBG_ERR);
+ $this->_error = $error_data['code'];
+ }
+
+ // Inform the context tree that all contexts have been loaded, so it is OK to search through
+ // the tree for default styles as needed.
+ $this->_rootContext->loadStyleData();
+
+ // Save a copy of the root context if we are caching
+ $this->_cachedRootContext = ($this->_cacheRootContext) ? $this->_rootContext : null;
+
+ geshi_dbg('Finished preprocessing', GESHI_DBG_API);
+ }
+
+ /**
+ * Builds the result string to return, by looking at the context data array
+ *
+ * This is to be moved into a new class: GeSHi_Highlighter, which will extend GeSHi to
+ * do this job. The GeSHi class will still be able to highlight source code, but this
+ * behaviour is deprecated and will be removed in the next major release.
+ *
+ * @return The code, post-processed.
+ */
+ function _parsePostProcess ()
+ {
+ if ($this->_error) {
+ // If there was an error, the source will be in string form
+ return '<pre style="background-color:#fcc;border:1px solid #c99;">' . htmlspecialchars($this->_source) .'</pre>';
+ }
+
+ // $this->_data should hold an array(
+ // 0 => array(0=>string of code, 1=> context name identifier
+ $result = '';
+ $data = $this->_styler->getParseData();
+ // TO BE REMOVED from stable release
+ if (GESHI_DBG & GESHI_DBG_PARSE) {
+ $result .= '<pre style="background-color:#ffc;border:1px solid #cc9;">';
+ foreach ($data as $token) {
+ if (!isset($check)) {
+ $token[0] = substr($token[0], 1); // remove padding
+ $check = 0;
+ }
+ $result .= '[' . $token[1] . ']: ' . htmlspecialchars($token[0]) . "\n";
+ }
+ unset($check);
+ $result .= '</pre>';
+ }
+
+ $result .= '<pre style="background-color:#ffc;border:1px solid #cc9;">';
+ foreach ($data as $token) {
+ if (!isset($check)) {
+ $token[0] = substr($token[0], 1); // remove padding (slow?)
+ $check = 0;
+ }
+ if ($token[2]) {
+ $result .= '<a href="' . $token[2] . '">';
+ }
+ $result .= '<span style="' . $this->_styler->getStyle($token[1]) . '" ';
+// $result .= 'class="' . str_replace(array('/', '_'), '-', $token[1]) . '" ';
+ $result .= 'title="' . $token[1] . '">' . htmlspecialchars($token[0]) . '</span>';
+ if ($token[2]) {
+ // there's a URL associated with this token
+ $result .= '</a>';
+ }
+ }
+ $result .= '</pre>';
+
+ // @todo [blocking 1.1.1] (bug 12) Evaluate feasability and get working if possible the functionality below...
+ //$result = preg_replace('#([^"])(((https?)|(ftp))://[a-z0-9\-]+\.([a-z0-9\-\.]+)+/?([a-zA-Z0-9\.\-_%]+/?)*\??([a-zA-Z0-9=&\[\];%]+)?(\#[a-zA-Z0-9\-_]+)?)#', '\\1<a href="\\2">\\2</a>', $result);
+ //$result = preg_replace('#([a-z0-9\._\-]+@[[a-z0-9\-\.]+[a-z]+)#si', '<a href="mailto:\\1">\\1</a>', $result);
+
+ return $result;
+ }
+
+
+ /**
+ * Helper function to convert a language name to the file name where its data will reside
+ *
+ * @return The absolute path of the language file where the current language data will be sourced
+ */
+ function _getLanguageDataFile ()
+ {
+ geshi_dbg('GeSHi::_getLanguageDataFile()', GESHI_DBG_API);
+ if ('/' == GESHI_DIR_SEPARATOR) {
+ $language_file = $this->_language . $this->_styler->fileExtension;
+ } else {
+ $language_file = explode('/', $this->_language);
+ $language_file = implode(GESHI_DIR_SEPARATOR, $language_file) . $this->_styler->fileExtension;
+ }
+ geshi_dbg('Language file is ' . $language_file, GESHI_DBG_API);
+ return GESHI_LANGUAGES_ROOT . $language_file;
+ }
+ /**#@-*/
+}
+?>
+
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>geshi-src</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>net.sourceforge.phpeclipse.parserbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>net.sourceforge.phpeclipse.phpnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package core
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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.
+ *
+ * <b>Usage:</b>
+ *
+ * Use this class in a context or language file, to define a code
+ * context:
+ *
+ * <pre> 'CHILD_CONTEXTS' => array(
+ * ...
+ * new GeSHiCodeContext([params])
+ * ...
+ * ),</pre>
+ *
+ * <pre> 'CONTEXTS' => array(
+ * ...
+ * new GeSHiCodeContext([params])
+ * ...
+ * ),</pre>
+ *
+ * @package core
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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<?php, where <?php is a kw
+ $before_char = substr($code, $i, 1);
+ $before_char_is_alnum = ctype_alnum($before_char);
+ $keyword_match_allowed = (!$before_char_is_alnum || ($before_char_is_alnum && !ctype_alnum($char)));
+ $keyword_match_allowed = ($keyword_match_allowed && !in_array($before_char,
+ $this->_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 <a href="url">>keyword<</a> 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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package core
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package core
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package core
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Benny Baumann <BenBE@benbe.omorphia.de>, Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Benny Baumann <BenBE@benbe.omorphia.de>, Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Benny Baumann <BenBE@benbe.omorphia.de>, Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Benny Baumann <BenBE@benbe.omorphia.de>, Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Benny Baumann <BenBE@benbe.omorphia.de>, Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Benny Baumann <BenBE@benbe.omorphia.de>, Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Benny Baumann <BenBE@benbe.omorphia.de>, Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Benny Baumann <BenBE@benbe.omorphia.de>, Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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;');
+$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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 <![CDATA[ was added to stop CSS jumping into attribute selector context
+ //the moment it was encountered, but this only really applies to XML
+ 0 => array('REGEX#<style[^>]+>\s*(<!\[CDATA\[)?#i'),
+ 1 => array('</style>'),
+ 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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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('<!DOCTYPE '),
+ 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, '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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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#<script[^>]+>#i'),
+ 1 => array('</script>'),
+ 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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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('<?php', '<?'),
+ 1 => 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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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('<?php', '<?'),
+ 1 => 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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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('<?php', '<?'),
+ 1 => 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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ * ----------------------------------
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ * ----------------------------------
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ * ----------------------------------
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ * ----------------------------------
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package core
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 = '</span>';
+ switch ($test) {
+ case '@b':
+ $start = '<span style="font-weight:bold;">';
+ break;
+
+ case '@i':
+ $start = '<span style="font-style:italic;">';
+ break;
+
+ case '@o':
+ $start = '<span style="color:green;background-color:#efe;border:1px solid #393;">';
+ break;
+
+ case '@w':
+ $start = '<span style="color:#660;background-color:#ffe;border:1px solid #993;">';
+ break;
+
+ case '@e':
+ $start = '<span style="color:red;background-color:#fee;border:1px solid #933;">';
+ break;
+
+ default:
+ $end = '';
+ }
+
+ if(preg_match('#(.*?)::(.*?)\((.*?)\)#si', $message)) {
+ $start = '<span style="font-weight:bold;">';
+ $end = '</span>';
+ }
+
+ 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:
+ * <pre> 'pos' => position in string of needle,
+ * 'len' => length of match
+ * 'tab' => a table of the stuff matched in brackets for a regular expression</pre>
+ */
+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 <aidan@php.net> |
+// +----------------------------------------------------------------------+
+//
+/**
+ * Replace stripos()
+ *
+ * This function lifted from the PHP_Compat PEAR package, and optimised
+ *
+ * @author Aidan Lister <aidan@php.net>, Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Benny Baumann <BenBE@benbe.omorphia.de>, Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ * ----------------------------------
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ * ----------------------------------
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package lang
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package scripts
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package scripts
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package scripts
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package scripts
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 <nigel@geshi.org>
+ * @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('#<td title="Name"><a[^>]+>\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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package scripts
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package scripts
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package scripts
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package scripts
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ * ----------------------------------
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package scripts
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ * ----------------------------------
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package scripts
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ * ----------------------------------
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package scripts
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ * ----------------------------------
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package scripts
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * For information on how to use GeSHi, please consult the documentation
+ * found in the docs/ directory, or online at http://geshi.org/docs/
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * You can view a copy of the GNU GPL in the COPYING file that comes
+ * with GeSHi, in the docs/ directory.
+ *
+ * @package scripts
+ * @author Nigel McNie <nigel@geshi.org>
+ * @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 <<<EOF
+Usage: php $argv[0] language keyword-group
+Language is a language supported by GeSHi and
+that also has a katepart language file or similar.
+
+Options:
+ -h --help Show this help text
+ -v --version Show version information
+ --list-groups [lang] List keyword groups for language [lang]
+ --list-langs List supported languages
+
+EOF;
+ exit;
+}
+
+/**
+ * Shows the version number of get-keywords and exits
+ *
+ * @since 0.1.0
+ */
+function show_version ()
+{
+ print GESHI_GET_KEYWORDS_VERSION .
+ "\n\$Date: 2005/07/25 07:03:11 $\n";
+ exit;
+}
+
+/**
+ * Checks whether the specified options were passed on the command
+ * line, and returns the value of the option if specified.
+ *
+ * @param string|array The options to check for
+ * @param array The arguments as parsed by Console_Getopt::getopt()
+ * @return True if the argument exists, the value of the argument if there is a value, else false
+ * @since 0.1.0
+ * @todo [blocking 1.1.5] Move this into console_getopt class
+ * @todo [blocking 1.1.5] Check about what is returned when option does exist
+ */
+function get_option ($options, $args)
+{
+ $options = (array) $options;
+ $args = $args[0];
+ foreach ($args as $arg) {
+ foreach ($options as $option) {
+ if ($option == $arg[0] || '--' . $option == $arg[0]) {
+ return ($arg[1]) ? $arg[1] : true;
+ }
+ }
+ }
+ return false;
+}
+
+?>
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 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+// +----------------------------------------------------------------------+
+// | PHP Version 4 |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2003 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 through the world-wide-web at the following url: |
+// | 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. |
+// +----------------------------------------------------------------------+
+// | Author: Andrei Zmievski <andrei@php.net> |
+// +----------------------------------------------------------------------+
+//
+// $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 <andrei@php.net>
+ *
+ */
+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 @@
+<?php
+//
+// +--------------------------------------------------------------------+
+// | PEAR, the PHP Extension and Application Repository |
+// +--------------------------------------------------------------------+
+// | 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 through the world-wide-web at the following url: |
+// | 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: Sterling Hughes <sterling@php.net> |
+// | Stig Bakken <ssb@php.net> |
+// | Tomas V.V.Cox <cox@idecnet.com> |
+// +--------------------------------------------------------------------+
+//
+// $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 <ssb@php.net>
+ * @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 @@
+<?php
+//
+// +----------------------------------------------------------------------+
+// | 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. |
+// +----------------------------------------------------------------------+
+// | Author: Stig Bakken <ssb@fast.no> |
+// | Tomas V.V.Cox <cox@idecnet.com> |
+// | Stephan Schmidt <schst@php-tools.net> |
+// +----------------------------------------------------------------------+
+//
+// $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 <ssb@fast.no>
+ * @author Tomas V.V.Cox <cox@idecnet.com>
+ * @author Stephan Schmidt <schst@php-tools.net>
+ */
+
+/**
+ * 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 <name></name> tags of your xml file.
+ *
+ * @category XML
+ * @package XML_Parser
+ * @author Stig Bakken <ssb@fast.no>
+ * @author Tomas V.V.Cox <cox@idecnet.com>
+ * @author Stephan Schmidt <schst@php-tools.net>
+ * 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
diff --git a/paste/include/highlight.inc b/paste/include/highlight.inc
deleted file mode 100644
index 32491d7..0000000
--- a/paste/include/highlight.inc
+++ /dev/null
@@ -1,1122 +0,0 @@
-<?
-/*
-This software is licensed through a BSD-style License.
-http://www.opensource.org/licenses/bsd-license.php
-
-Copyright (c) 2002 - 2009 Jacob D. Cohen
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-Neither the name of Jacob D. Cohen nor the names of his contributors
-may be used to endorse or promote products derived from this software
-without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-/*
-
-Special thanks to E.J. Brocklesby for providing PL/I language support.
-Special thanks to F.R. for the XML language support.
-
-*/
-
-function keyword_replace($keywords, $text, $ncs = false)
-{
- $cm = ($ncs)? "i" : "";
- foreach ($keywords as $keyword)
- {
- $search[] = "/(\\b$keyword\\b)/" . $cm;
- $replace[] = '<span class="keyword">\\0</span>';
- }
-
- $search[] = "/(\\bclass\s)/";
- $replace[] = '<span class="keyword">\\0</span>';
-
- return preg_replace($search, $replace, $text);
-}
-
-
-function preproc_replace($preproc, $text)
-{
- foreach ($preproc as $proc)
- {
- $search[] = "/(\\s*#\s*$proc\\b)/";
- $replace[] = '<span class="keyword">\\0</span>';
- }
-
- return preg_replace($search, $replace, $text);
-}
-
-
-function sch_syntax_helper($text)
-{
- return $text;
-}
-
-
-function syntax_highlight_helper($text, $language)
-{
- $preproc = array();
- $preproc["C++"] = array(
- "if", "ifdef", "ifndef", "elif", "else",
- "endif", "include", "define", "undef", "line",
- "error", "pragma");
- $preproc["C89"] = & $preproc["C++"];
- $preproc["C"] = & $preproc["C89"];
-
- $keywords = array(
- "C++" => array(
- "asm", "auto", "bool", "break", "case",
- "catch", "char", /*class*/ "const", "const_cast",
- "continue", "default", "delete", "do", "double",
- "dynamic_cast", "else", "enum", "explicit", "export",
- "extern", "false", "float", "for", "friend",
- "goto", "if", "inline", "int", "long",
- "mutable", "namespace", "new", "operator", "private",
- "protected", "public", "register", "reinterpret_cast", "return",
- "short", "signed", "sizeof", "static", "static_cast",
- "struct", "switch", "template", "this", "throw",
- "true", "try", "typedef", "typeid", "typename",
- "union", "unsigned", "using", "virtual", "void",
- "volatile", "wchar_t", "while"),
-
- "C89" => array(
- "auto", "break", "case", "char", "const",
- "continue", "default", "do", "double", "else",
- "enum", "extern", "float", "for", "goto",
- "if", "int", "long", "register", "return",
- "short", "signed", "sizeof", "static", "struct",
- "switch", "typedef", "union", "unsigned", "void",
- "volatile", "while"),
-
- "C" => array(
- "auto", "break", "case", "char", "const",
- "continue", "default", "do", "double", "else",
- "enum", "extern", "float", "for", "goto",
- "if", "int", "long", "register", "return",
- "short", "signed", "sizeof", "static", "struct",
- "switch", "typedef", "union", "unsigned", "void",
- "volatile", "while", "__restrict","_Bool"),
-
- "PHP" => array(
- "and", "or", "xor", "__FILE__", "__LINE__",
- "array", "as", "break", "case", "cfunction",
- /*class*/ "const", "continue", "declare", "default",
- "die", "do", "echo", "else", "elseif",
- "empty", "enddeclare", "endfor", "endforeach", "endif",
- "endswitch", "endwhile", "eval", "exit", "extends",
- "for", "foreach", "function", "global", "if",
- "include", "include_once", "isset", "list", "new",
- "old_function", "print", "require", "require_once", "return",
- "static", "switch", "unset", "use", "var",
- "while", "__FUNCTION__", "__CLASS__"),
-
- "Perl" => array(
- "-A", "-B", "-C", "-M", "-O",
- "-R", "-S", "-T", "-W", "-X",
- "-b", "-c", "-d", "-e", "-f",
- "-g", "-k", "-l", "-o", "-p",
- "-r", "-s", "-t", "-u", "-w",
- "-x", "-z", "ARGV", "DATA", "ENV",
- "SIG", "STDERR", "STDIN", "STDOUT", "atan2",
- "bind", "binmode", "bless", "caller", "chdir",
- "chmod", "chomp", "chop", "chown", "chr",
- "chroot", "close", "closedir", "cmp", "connect",
- "continue", "cos", "crypt", "dbmclose", "dbmopen",
- "defined", "delete", "die", "do", "dump",
- "each", "else", "elsif", "endgrent", "endhostent",
- "endnetent", "endprotent", "endpwent", "endservent", "eof",
- "eq", "eval", "exec", "exists", "exit",
- "exp", "fcntl", "fileno", "flock", "for",
- "foreach", "fork", "format", "formline", "ge",
- "getc", "getgrent", "getgrid", "getgrnam", "gethostbyaddr",
- "gethostbyname","gethostent", "getlogin", "getnetbyaddr", "getnetbyname",
- "getnetent", "getpeername", "getpgrp", "getppid", "getpriority",
- "getprotobyname","getprotobynumber","getprotoent","getpwent","getpwnam",
- "getpwuid", "getservbyname","getservbyport","getservent","getsockname",
- "getsockopt", "glob", "gmtime", "goto", "grep",
- /*gt*/ "hex", "if", "import", "index",
- "int", "ioctl", "join", "keys", "kill",
- "last", "lc", "lcfirst", "le", "length",
- "link", "listen", "local", "localtime", "log",
- "lstat", /*lt*/ "m", "map", "mkdir",
- "msgctl", "msgget", "msgrcv", "msgsnd", "my",
- "ne", "next", "no", "oct", "open",
- "opendir", "ord", "pack", "package", "pipe",
- "pop", "pos", "print", "printf", "push",
- "q", "qq", "quotemeta","qw", "qx",
- "rand", "read", "readdir", "readlink", "recv",
- "redo", "ref", "refname", "require", "reset",
- "return", "reverse", "rewinddir","rindex", "rmdir",
- "s", "scalar", "seek", "seekdir", "select",
- "semctl", "semget", "semop", "send", "setgrent",
- "sethostent", "setnetent", "setpgrp", "setpriority", "setprotoent",
- "setpwent", "setservent", "setsockopt","shift", "shmctl",
- "shmget", "shmread", "shmwrite", "shutdown", "sin",
- "sleep", "socket", "socketpair","sort", "splice",
- "split", "sprintf", "sqrt", "srand", "stat",
- "study", "sub", "substr", "symlink", "syscall",
- "sysopen", "sysread", "system", "syswrite", "tell",
- "telldir", "tie", "tied", "time", "times",
- "tr", "truncate", "uc", "ucfirst", "umask",
- "undef", "unless", "unlink", "unpack", "unshift",
- "untie", "until", "use", "utime", "values",
- "vec", "wait", "waitpid", "wantarray", "warn",
- "while", "write", "y", "or", "and",
- "not"),
-
- "Java" => array(
- "abstract", "boolean", "break", "byte", "case",
- "catch", "char", /*class*/ "const", "continue",
- "default", "do", "double", "else", "extends",
- "final", "finally", "float", "for", "goto",
- "if", "implements", "import", "instanceof", "int",
- "interface", "long", "native", "new", "package",
- "private", "protected", "public", "return", "short",
- "static", "strictfp", "super", "switch", "synchronized",
- "this", "throw", "throws", "transient", "try",
- "void", "volatile", "while"),
-
- "VB" => array(
- "AddressOf", "Alias", "And", "Any", "As",
- "Binary", "Boolean", "ByRef", "Byte", "ByVal",
- "Call", "Case", "CBool", "CByte", "CCur",
- "CDate", "CDbl", "CInt", "CLng", "Close",
- "Const", "CSng", "CStr", "Currency", "CVar",
- "CVErr", "Date", "Debug", "Declare", "DefBool",
- "DefByte", "DefCur", "DefDate", "DefDbl", "DefInt",
- "DefLng", "DefObj", "DefSng", "DefStr", "DefVar",
- "Dim", "Do", "Double", "Each", "Else",
- "End", "Enum", "Eqv", "Erase", "Error",
- "Event", "Exit", "For", "Friend", "Function",
- "Get", "Get", "Global", "GoSub", "GoTo",
- "If", "Imp", "Implements","In", "Input",
- "Integer", "Is", "LBound", "Len", "Let",
- "Lib", "Like", "Line", "Lock", "Long",
- "Loop", "LSet", "Mod", "Name", "Next",
- "Not", "Nothing", "Null", "Object", "On",
- "Open", "Option Base 1","Option Compare Binary",
- "Option Compare Database", "Option Compare Text", "Option Explicit",
- "Option Private Module", "Optional", "Or", "Output",
- "ParamArray", "Preserve", "Print", "Private", "Property",
- "Public", "Put", "RaiseEvent","Random", "Read",
- "ReDim", "Resume", "Return", "RSet", "Seek",
- "Select", "Set", "Single", "Spc", "Static",
- "Step", "Stop", "String", "Sub", "Tab",
- "Then", "To", "Type", "UBound", "Unlock",
- "Variant", "Wend", "While", "With", "WithEvents",
- "Write", "Xor"),
-
- "C#" => array(
- "abstract", "as", "base", "bool", "break",
- "byte", "case", "catch", "char", "checked",
- /*class*/ "const", "continue", "decimal", "default",
- "delegate", "do", "double", "else", "enum",
- "event", "explicit", "extern", "false", "finally",
- "fixed", "float", "for", "foreach", "goto",
- "if", "implicit", "in", "int", "interface",
- "internal", "is", "lock", "long", "namespace",
- "new", "null", "object", "operator", "out",
- "override", "params", "private", "protected", "public",
- "readonly", "ref", "return", "sbyte", "sealed",
- "short", "sizeof", "stackalloc","static", "string",
- "struct", "switch", "this", "throw", "true",
- "try", "typeof", "uint", "ulong", "unchecked",
- "unsafe", "ushort", "using", "virtual", "volatile",
- "void", "while"),
-
- "Ruby" => array(
- "alias", "and", "begin", "break", "case",
- /*class*/ "def", "defined", "do", "else",
- "elsif", "end", "ensure", "false", "for",
- "if", "in", "module", "next", "module",
- "next", "nil", "not", "or", "redo",
- "rescue", "retry", "return", "self", "super",
- "then", "true", "undef", "unless", "until",
- "when", "while", "yield"),
-
- "Python" => array(
- "and", "assert", "break", /*"class",*/ "continue",
- "def", "del", "elif", "else", "except",
- "exec", "finally", "for", "from", "global",
- "if", "import", "in", "is", "lambda",
- "not", "or", "pass", "print", "raise",
- "return", "try", "while", "yield"),
-
- "Pascal" => array(
- "Absolute", "Abstract", "All", "And", "And_then",
- "Array", "Asm", "Begin", "Bindable", "Case",
- /*"Class",*/ "Const", "Constructor","Destructor", "Div",
- "Do", "Downto", "Else", "End", "Export",
- "File", "For", "Function", "Goto", "If",
- "Import", "Implementation","Inherited","In", "Inline",
- "Interface", "Is", "Label", "Mod", "Module",
- "Nil", "Not", "Object", "Of", "Only",
- "Operator", "Or", "Or_else", "Otherwise", "Packed",
- "Pow", "Procedure", "Program", "Property", "Protected",
- "Qualified", "Record", "Repeat", "Restricted", "Set",
- "Shl", "Shr", "Then", "To", "Type",
- "Unit", "Until", "Uses", "Value", "Var",
- "View", "Virtual", "While", "With", "Xor"),
-
- "mIRC" => array(
- ),
-
- "PL/I" => array(
- "A", "ABS", "ACOS", "%ACTIVATE", "ACTUALCOUNT",
- "ADD", "ADDR", "ADDREL", "ALIGNED", "ALLOCATE",
- "ALLOC", "ALLOCATION", "ALLOCN", "ANY", "ANYCONDITION",
- "APPEND", "AREA", "ASIN", "ATAN", "ATAND",
- "ATANH", "AUTOMATIC", "AUTO", "B", "B1",
- "B2", "B3", "B4", "BACKUP_DATE", "BASED",
- "BATCH", "BEGIN", "BINARY", "BIN", "BIT",
- "BLOCK_BOUNDARY_FORMAT", "BLOCK_IO", "BLOCK_SIZE", "BOOL",
- "BUCKET_SIZE", "BUILTIN", "BY", "BYTE", "BYTESIZE",
- "CALL", "CANCEL_CONTROL_O", "CARRIAGE_RETURN_FORMAT",
- "CEIL", "CHAR", "CHARACTER", "CLOSE", "COLLATE", "COLUMN",
- "CONDITION", "CONTIGUOUS", "CONTIGUOUS_BEST_TRY", "CONTROLLED",
- "CONVERSION", "COPY", "COS", "COSD", "COSH",
- "CREATION_DATE", "CURRENT_POSITION", "DATE",
- "DATETIME", "%DEACTIVATE", "DECIMAL", "DEC", "%DECLARE",
- "%DCL", "DECLARE", "DCL", "DECODE", "DEFAULT_FILE_NAME",
- "DEFERRED_WRITE", "DEFINED", "DEF", "DELETE",
- "DESCRIPTOR", "%DICTIONARY", "DIMENSION","DIM", "DIRECT",
- "DISPLAY", "DIVIDE", "%DO", "DO", "E",
- "EDIT", "%ELSE", "ELSE", "EMPTY", "ENCODE",
- "%END", "END", "ENDFILE", "ENDPAGE", "ENTRY",
- "ENVIRONMENT", "ENV", "%ERROR", "ERROR", "EVERY",
- "EXP", "EXPIRATION_DATE", "EXTEND", "EXTENSION_SIZE",
- "EXTERNAL", "EXT", "F", "FAST_DELETE", "%FATAL",
- "FILE", "FILE_ID", "FILE_ID_TO", "FILE_SIZE",
- "FINISH", "FIXED", "FIXEDOVERFLOW", "FOFL",
- "FIXED_CONTROL_FROM", "FIXED_CONTROL_SIZE", "FIXED_CONTROL_SIZE_TO",
- "FIXED_CONTROL_TO", "FIXED_LENGTH_RECORDS", "FLOAT",
- "FLOOR", "FLUSH", "FORMAT", "FREE", "FROM",
- "GET", "GLOBALDEF", "GLOBALREF", "%GOTO",
- "GOTO", "GO", "TO", "GROUP_PROTETION", "HBOUND",
- "HIGH", "INDENT", "%IF", "IF", "IGNORE_LINE_MARKS",
- "IN", "%INCLUDE", "INDEX", "INDEXED", "INDEX_NUMBER",
- "%INFORM", "INFORM", "INITIAL", "INIT", "INITIAL_FILL",
- "INPUT", "INT", "INTERNAL", "INTO", "KEY",
- "KEYED", "KEYFROM", "KEYTO", "LABEL", "LBOUND",
- "LEAVE", "LENGTH", "LIKE", "LINE", "LINENO",
- "LINESIZE", "%LIST", "LIST", "LOCK_ON_READ", "LOCK_ON_WRITE",
- "LOG", "LOG10", "LOG2", "LOW", "LTRIM",
- "MAIN", "MANUAL_UNLOCKING", "MATCH_GREATER",
- "MATCH_GREATER_EQUAL", "MATCH_NEXT", "MATCH_NEXT_EQUAL",
- "MAX", "MAXIMUM_RECORD_NUMBER", "MAXIMUM_RECORD_SIZE",
- "MAXLENGTH", "MEMBER", "MIN", "MOD", "MULTIBLOCK_COUNT",
- "MULTIBUFFER_COUNT", "MULTIPLY", "NEXT_VOLUME", "%NOLIST",
- "NOLOCK", "NONEXISTENT_RECORD", "NONRECURSIVE", "NONVARYING",
- "NONVAR", "NORESCAN", "NO_ECHO", "NO_FILTER", "NO_SHARE",
- "NULL", "OFFSET", "ON", "ONARGSLIST", "ONCHAR",
- "ONCODE", "ONFILE", "ONKEY", "ONSOURCE", "OPEN",
- "OPTIONAL", "OPTIONS", "OTHERWISE","OTHER", "OUTPUT",
- "OVERFLOW", "OFL", "OWNER_GROUP", "OWNER_ID",
- "OWNER_MEMBER", "OWNER_PROTECTION", "P", "%PAGE",
- "PAGE", "PAGENO", "PAGESIZE", "PARAMETER", "PARM",
- "PICTURE", "PIC", "POINTER", "PTR", "POSINT",
- "POSITION", "POS", "PRECISION","PREC", "PRESENT",
- "PRINT", "PRINTER_FORMAT", "%PROCEDURE", "%PROC",
- "PROCEDURE", "PROC", "PROD", "PROMPT", "PURGE_TYPE_AHEAD",
- "PUT", "R", "RANK", "READ", "READONLY",
- "READ_AHEAD", "READ_CHECK", "READ_REGARDLESS", "RECORD",
- "RECORD_ID", "RECORD_ID_ACCESS", "RECORD_ID_TO", "RECURSIVE",
- "REFER", "REFERENCE", "RELEASE", "REPEAT", "%REPLACE",
- "RESCAN", "RESIGNAL", "RETRIEVAL_POINTERS", "%RETURN",
- "RETURN", "RETURNS", "REVERSE", "REVERT", "REVISION_DATE",
- "REWIND", "REWIND_ON_CLOSE", "REWIND_ON_OPEN",
- "REWRITE", "ROUND", "RTRIM", "%SBTTL", "SCALARVARYING",
- "SEARCH", "SELECT", "SEQUENTIAL", "SEQL",
- "SET", "SHARED_READ", "SHARED_WRITE", "SIGN",
- "SIGNAL", "SIN", "SIND", "SINH", "SIZE",
- "SKIP", "SNAP", "SOME", "SPACEBLOCK", "SPOOL",
- "SQRT", "STATEMENT", "STATIC", "STOP", "STORAGE",
- "STREAM", "STRING", "STRINGRANGE", "STRG",
- "STRUCTURE", "SUBSCRIPTRANGE", "SUBRG", "SUBSTR",
- "SUBTRACT", "SUM", "SUPERCEDE","SYSIN", "SYSPRINT",
- "SYSTEM", "SYSTEM_PROTECTION", "TAB", "TAN",
- "TAND", "TANH", "TEMPORARY","%THEN", "THEN",
- "TIME", "TIMEOUT_PERIOD", "%TITLE", "TITLE",
- "TO", "TRANSLATE", "TRIM", "TRUNC", "TRUNCATE",
- "UNALIGNED", "UNAL", "UNDEFINED","UNDF", "UNDERFLOW",
- "UFL", "UNION", "UNSPEC", "UNTIL", "UPDATE",
- "USER_OPEN", "VALID", "VALUE", "VAL", "VARIABLE",
- "VARIANT", "VARYING", "VAR", "VAXCONDITION", "VERIFY",
- "WAIT_FOR_RECORD", "%WARN", "WARN", "WHEN",
- "WHILE", "WORLD_PROTECTION", "WRITE", "WRITE_BEHIND",
- "WRITE_CHECK", "X", "ZERODIVIDE"),
-
- "SQL" => array(
- "abort", "abs", "absolute", "access",
- "action", "ada", "add", "admin",
- "after", "aggregate", "alias", "all",
- "allocate", "alter", "analyse", "analyze",
- "and", "any", "are", "array",
- "as", "asc", "asensitive", "assertion",
- "assignment", "asymmetric", "at", "atomic",
- "authorization", "avg", "backward", "before",
- "begin", "between", "bigint", "binary",
- "bit", "bitvar", "bit_length", "blob",
- "boolean", "both", "breadth", "by",
- "c", "cache", "call", "called",
- "cardinality", "cascade", "cascaded", "case",
- "cast", "catalog", "catalog_name", "chain",
- "char", "character", "characteristics", "character_length",
- "character_set_catalog", "character_set_name", "character_set_schema", "char_length",
- "check", "checked", "checkpoint", /* "class", */
- "class_origin", "clob", "close", "cluster",
- "coalesce", "cobol", "collate", "collation",
- "collation_catalog", "collation_name", "collation_schema", "column",
- "column_name", "command_function", "command_function_code", "comment",
- "commit", "committed", "completion", "condition_number",
- "connect", "connection", "connection_name", "constraint",
- "constraints", "constraint_catalog", "constraint_name", "constraint_schema",
- "constructor", "contains", "continue", "conversion",
- "convert", "copy", "corresponding", "count",
- "create", "createdb", "createuser", "cross",
- "cube", "current", "current_date", "current_path",
- "current_role", "current_time", "current_timestamp", "current_user",
- "cursor", "cursor_name", "cycle", "data",
- "database", "date", "datetime_interval_code", "datetime_interval_precision",
- "day", "deallocate", "dec", "decimal",
- "declare", "default", "defaults", "deferrable",
- "deferred", "defined", "definer", "delete",
- "delimiter", "delimiters", "depth", "deref",
- "desc", "describe", "descriptor", "destroy",
- "destructor", "deterministic", "diagnostics", "dictionary",
- "disconnect", "dispatch", "distinct", "do",
- "domain", "double", "drop", "dynamic",
- "dynamic_function", "dynamic_function_code", "each", "else",
- "encoding", "encrypted", "end", "end-exec",
- "equals", "escape", "every", "except",
- "exception", "excluding", "exclusive", "exec",
- "execute", "existing", "exists", "explain",
- "external", "extract", "false", "fetch",
- "final", "first", "float", "for",
- "force", "foreign", "fortran", "forward",
- "found", "free", "freeze", "from",
- "full", "function", "g", "general",
- "generated", "get", "global", "go",
- "goto", "grant", "granted", "group",
- "grouping", "handler", "having", "hierarchy",
- "hold", "host", "hour", "identity",
- "ignore", "ilike", "immediate", "immutable",
- "implementation", "implicit", "in", "including",
- "increment", "index", "indicator", "infix",
- "inherits", "initialize", "initially", "inner",
- "inout", "input", "insensitive", "insert",
- "instance", "instantiable", "instead", "int",
- "integer", "intersect", "interval", "into",
- "invoker", "is", "isnull", "isolation",
- "iterate", "join", "k", "key",
- "key_member", "key_type", "lancompiler", "language",
- "large", "last", "lateral", "leading",
- "left", "length", "less", "level",
- "like", "limit", "listen", "load",
- "local", "localtime", "localtimestamp", "location",
- "locator", "lock", "lower", "m",
- "map", "match", "max", "maxvalue",
- "message_length", "message_octet_length", "message_text", "method",
- "min", "minute", "minvalue", "mod",
- "mode", "modifies", "modify", "module",
- "month", "more", "move", "mumps",
- "name", "names", "national", "natural",
- "nchar", "nclob", "new", "next",
- "no", "nocreatedb", "nocreateuser", "none",
- "not", "nothing", "notify", "notnull",
- "null", "nullable", "nullif", "number",
- "numeric", "object", "octet_length", "of",
- "off", "offset", "oids", "old",
- "on", "only", "open", "operation",
- "operator", "option", "options", "or",
- "order", "ordinality", "out", "outer",
- "output", "overlaps", "overlay", "overriding",
- "owner", "pad", "parameter", "parameters",
- "parameter_mode", "parameter_name", "parameter_ordinal_position", "parameter_specific_catalog",
- "parameter_specific_name", "parameter_specific_schema", "partial", "pascal",
- "password", "path", "pendant", "placing",
- "pli", "position", "postfix", "precision",
- "prefix", "preorder", "prepare", "preserve",
- "primary", "prior", "privileges", "procedural",
- "procedure", "public", "read", "reads",
- "real", "recheck", "recursive", "ref",
- "references", "referencing", "reindex", "relative",
- "rename", "repeatable", "replace", "reset",
- "restart", "restrict", "result", "return",
- "returned_length", "returned_octet_length", "returned_sqlstate", "returns",
- "revoke", "right", "role", "rollback",
- "rollup", "routine", "routine_catalog", "routine_name",
- "routine_schema", "row", "rows", "row_count",
- "rule", "savepoint", "scale", "schema",
- "schema_name", "scope", "scroll", "search",
- "second", "section", "security", "select",
- "self", "sensitive", "sequence", "serializable",
- "server_name", "session", "session_user", "set",
- "setof", "sets", "share", "show",
- "similar", "simple", "size", "smallint",
- "some", "source", "space", "specific",
- "specifictype", "specific_name", "sql", "sqlcode",
- "sqlerror", "sqlexception", "sqlstate", "sqlwarning",
- "stable", "start", "state", "statement",
- "static", "statistics", "stdin", "stdout",
- "storage", "strict", "structure", "style",
- "subclass_origin", "sublist", "substring", "sum",
- "symmetric", "sysid", "system", "system_user",
- "table", "table_name", "temp", "template",
- "temporary", "terminate", "text", "than", "then",
- "time", "timestamp", "timezone_hour", "timezone_minute",
- "to", "toast", "trailing", "transaction",
- "transactions_committed", "transactions_rolled_back", "transaction_active", "transform",
- "transforms", "translate", "translation", "treat",
- "trigger", "trigger_catalog", "trigger_name", "trigger_schema",
- "trim", "true", "truncate", "trusted",
- "type", "uncommitted", "under", "unencrypted",
- "union", "unique", "unknown", "unlisten",
- "unnamed", "unnest", "until", "update",
- "upper", "usage", "user", "user_defined_type_catalog",
- "user_defined_type_name", "user_defined_type_schema", "using", "vacuum",
- "valid", "validator", "value", "values",
- "varchar", "variable", "varying", "verbose",
- "version", "view", "volatile", "when",
- "whenever", "where", "with", "without",
- "work", "write", "year", "zone")
-
- );
-
- $case_insensitive = array(
- "VB" => true,
- "Pascal" => true,
- "PL/I" => true,
- "SQL" => true
- );
- $ncs = false;
- if (array_key_exists($language, $case_insensitive))
- $ncs = true;
-
- $text = (array_key_exists($language, $preproc))?
- preproc_replace($preproc[$language], $text) :
- $text;
- $text = (array_key_exists($language, $keywords))?
- keyword_replace($keywords[$language], $text, $ncs) :
- $text;
-
- return $text;
-}
-
-
-function rtrim1($span, $lang, $ch)
-{
- return syntax_highlight_helper(substr($span, 0, -1), $lang);
-}
-
-
-function rtrim1_htmlesc($span, $lang, $ch)
-{
- return htmlspecialchars(substr($span, 0, -1));
-}
-
-
-function sch_rtrim1($span, $lang, $ch)
-{
- return sch_syntax_helper(substr($span, 0, -1));
-}
-
-
-function rtrim2($span, $lang, $ch)
-{
- return substr($span, 0, -2);
-}
-
-
-function syn_proc($span, $lang, $ch)
-{
- return syntax_highlight_helper($span, $lang);
-}
-
-function dash_putback($span, $lang, $ch)
-{
- return syntax_highlight_helper('-' . $span, $lang);
-}
-
-function slash_putback($span, $lang, $ch)
-{
- return syntax_highlight_helper('/' . $span, $lang);
-}
-
-function slash_putback_rtrim1($span, $lang, $ch)
-{
- return rtrim1('/' . $span, $lang, $ch);
-}
-
-function lparen_putback($span, $lang, $ch)
-{
- return syntax_highlight_helper('(' . $span, $lang);
-}
-
-function lparen_putback_rtrim1($span, $lang, $ch)
-{
- return rtrim1('(' . $span, $lang, $ch);
-}
-
-function prepend_xml_opentag($span, $lang, $ch)
-{
- return '<span class="xml_tag">&lt;' . $span;
-}
-
-function proc_void($span, $lang, $ch)
-{
- return $span;
-}
-
-
-/**
- * Syntax highlight function
- * Does the bulk of the syntax highlighting by lexing the input
- * string, then calling the helper function to highlight keywords.
- */
-function SyntaxHighlight($text, $language)
-{
- if ($language == "Plain Text") return $text;
-
- define("normal_text", 1, true);
- define("dq_literal", 2, true);
- define("dq_escape", 3, true);
- define("sq_literal", 4, true);
- define("sq_escape", 5, true);
- define("slash_begin", 6, true);
- define("star_comment", 7, true);
- define("star_end", 8, true);
- define("line_comment", 9, true);
- define("html_entity", 10, true);
- define("lc_escape", 11, true);
- define("block_comment",12, true);
- define("paren_begin", 13, true);
- define("dash_begin", 14, true);
- define("bt_literal", 15, true);
- define("bt_escape", 16, true);
- define("xml_tag_begin",17, true);
- define("xml_tag", 18, true);
- define("xml_pi", 19, true);
- define("sch_normal", 20, true);
- define("sch_stresc", 21, true);
- define("sch_idexpr", 22, true);
- define("sch_numlit", 23, true);
- define("sch_chrlit", 24, true);
- define("sch_strlit", 25, true);
-
- $initial_state["Scheme"] = sch_normal;
-
- $sch[sch_normal][0] = sch_normal;
- $sch[sch_normal]['"'] = sch_strlit;
- $sch[sch_normal]["#"] = sch_chrlit;
- $sch[sch_normal]["0"] = sch_numlit;
- $sch[sch_normal]["1"] = sch_numlit;
- $sch[sch_normal]["2"] = sch_numlit;
- $sch[sch_normal]["3"] = sch_numlit;
- $sch[sch_normal]["4"] = sch_numlit;
- $sch[sch_normal]["5"] = sch_numlit;
- $sch[sch_normal]["6"] = sch_numlit;
- $sch[sch_normal]["7"] = sch_numlit;
- $sch[sch_normal]["8"] = sch_numlit;
- $sch[sch_normal]["9"] = sch_numlit;
-
- $sch[sch_strlit]['"'] = sch_normal;
- $sch[sch_strlit]["\n"] = sch_normal;
- $sch[sch_strlit]["\\"] = sch_stresc;
- $sch[sch_strlit][0] = sch_strlit;
-
- $sch[sch_chrlit][" "] = sch_normal;
- $sch[sch_chrlit]["\t"] = sch_normal;
- $sch[sch_chrlit]["\n"] = sch_normal;
- $sch[sch_chrlit]["\r"] = sch_normal;
- $sch[sch_chrlit][0] = sch_chrlit;
-
- $sch[sch_numlit][" "] = sch_normal;
- $sch[sch_numlit]["\t"] = sch_normal;
- $sch[sch_numlit]["\n"] = sch_normal;
- $sch[sch_numlit]["\r"] = sch_normal;
- $sch[sch_numlit][0] = sch_numlit;
-
- //
- // State transitions for C
- //
- $c89[normal_text]["\""] = dq_literal;
- $c89[normal_text]["'"] = sq_literal;
- $c89[normal_text]["/"] = slash_begin;
- $c89[normal_text][0] = normal_text;
-
- $c89[dq_literal]["\""] = normal_text;
- $c89[dq_literal]["\n"] = normal_text;
- $c89[dq_literal]["\\"] = dq_escape;
- $c89[dq_literal][0] = dq_literal;
-
- $c89[dq_escape][0] = dq_literal;
-
- $c89[sq_literal]["'"] = normal_text;
- $c89[sq_literal]["\n"] = normal_text;
- $c89[sq_literal]["\\"] = sq_escape;
- $c89[sq_literal][0] = sq_literal;
-
- $c89[sq_escape][0] = sq_literal;
-
- $c89[slash_begin]["*"] = star_comment;
- $c89[slash_begin][0] = normal_text;
-
- $c89[star_comment]["*"] = star_end;
- $c89[star_comment][0] = star_comment;
-
- $c89[star_end]["/"] = normal_text;
- $c89[star_end]["*"] = star_end;
- $c89[star_end][0] = star_comment;
-
- //
- // State transitions for C++
- // Inherit transitions from C, and add line comment support
- //
- $cpp = $c89;
- $cpp[slash_begin]["/"] = line_comment;
- $cpp[line_comment]["\n"] = normal_text;
- $cpp[line_comment]["\\"] = lc_escape;
- $cpp[line_comment][0] = line_comment;
-
- $cpp[lc_escape]["\r"] = lc_escape;
- $cpp[lc_escape][0] = line_comment;
-
- //
- // State transitions for C99.
- // C99 supports line comments like C++
- //
- $c99 = $cpp;
-
- // State transitions for PL/I
- // Kinda like C
- $pli = $c89;
-
- //
- // State transitions for PHP
- // Inherit transitions from C++, and add perl-style line comment support
- $php = $cpp;
- $php[normal_text]["#"] = line_comment;
- $php[sq_literal]["\n"] = sq_literal;
- $php[dq_literal]["\n"] = dq_literal;
-
- //
- // State transitions for Perl
- $perl[normal_text]["#"] = line_comment;
- $perl[normal_text]["\""] = dq_literal;
- $perl[normal_text]["'"] = sq_literal;
- $perl[normal_text][0] = normal_text;
-
- $perl[dq_literal]["\""] = normal_text;
- $perl[dq_literal]["\\"] = dq_escape;
- $perl[dq_literal][0] = dq_literal;
-
- $perl[dq_escape][0] = dq_literal;
-
- $perl[sq_literal]["'"] = normal_text;
- $perl[sq_literal]["\\"] = sq_escape;
- $perl[sq_literal][0] = sq_literal;
-
- $perl[sq_escape][0] = sq_literal;
-
- $perl[line_comment]["\n"] = normal_text;
- $perl[line_comment][0] = line_comment;
-
- $mirc[normal_text]["\""] = dq_literal;
- $mirc[normal_text][";"] = line_comment;
- $mirc[normal_text][0] = normal_text;
-
- $mirc[dq_literal]["\""] = normal_text;
- $mirc[dq_literal]["\\"] = dq_escape;
- $mirc[dq_literal][0] = dq_literal;
-
- $mirc[dq_escape][0] = dq_literal;
-
- $mirc[line_comment]["\n"] = normal_text;
- $mirc[line_comment][0] = line_comment;
-
- $ruby = $perl;
-
- $python = $perl;
-
- $java = $cpp;
-
- $vb = $perl;
- $vb[normal_text]["#"] = normal_text;
- $vb[normal_text]["'"] = line_comment;
-
- $cs = $java;
-
- $pascal = $c89;
- $pascal[normal_text]["("] = paren_begin;
- $pascal[normal_text]["/"] = slash_begin;
- $pascal[normal_text]["{"] = block_comment;
-
- $pascal[paren_begin]["*"] = star_comment;
- $pascal[paren_begin]["'"] = sq_literal;
- $pascal[paren_begin]['"'] = dq_literal;
- $pascal[paren_begin][0] = normal_text;
-
- $pascal[slash_begin]["'"] = sq_literal;
- $pascal[slash_begin]['"'] = dq_literal;
- $pascal[slash_begin]['/'] = line_comment;
- $pascal[slash_begin][0] = normal_text;
-
- $pascal[star_comment]["*"] = star_end;
- $pascal[star_comment][0] = star_comment;
-
- $pascal[block_comment]["}"] = normal_text;
- $pascal[block_comment][0] = block_comment;
-
- $pascal[line_comment]["\n"] = normal_text;
- $pascal[line_comment][0] = line_comment;
-
- $pascal[star_end][")"] = normal_text;
- $pascal[star_end]["*"] = star_end;
- $pascal[star_end][0] = star_comment;
-
- $sql[normal_text]['"'] = dq_literal;
- $sql[normal_text]["'"] = sq_literal;
- $sql[normal_text]['`'] = bt_literal;
- $sql[normal_text]['-'] = dash_begin;
- $sql[normal_text][0] = normal_text;
-
- $sql[dq_literal]['"'] = normal_text;
- $sql[dq_literal]['\\'] = dq_escape;
- $sql[dq_literal][0] = dq_literal;
-
- $sql[sq_literal]["'"] = normal_text;
- $sql[sq_literal]['\\'] = sq_escape;
- $sql[sq_literal][0] = sq_literal;
-
- $sql[bt_literal]['`'] = normal_text;
- $sql[bt_literal]['\\'] = bt_escape;
- $sql[bt_literal][0] = bt_literal;
-
- $sql[dq_escape][0] = dq_literal;
- $sql[sq_escape][0] = sq_literal;
- $sql[bt_escape][0] = bt_literal;
-
- $sql[dash_begin]["-"] = line_comment;
- $sql[dash_begin][0] = normal_text;
-
- $sql[line_comment]["\n"] = normal_text;
- $sql[line_comment]["\\"] = lc_escape;
- $sql[line_comment][0] = line_comment;
-
- $sql[lc_escape]["\r"] = lc_escape;
- $sql[lc_escape][0] = line_comment;
-
- $xml[normal_text]["<"] = xml_tag_begin;
- $xml[normal_text]["&"] = html_entity;
- $xml[normal_text][0] = normal_text;
- $xml[html_entity][";"] = normal_text;
- $xml[html_entity]["<"] = xml_tag_begin;
- $xml[html_entity][0] = html_entity;
- $xml[xml_tag_begin]["?"] = xml_pi;
- $xml[xml_tag_begin]["!"] = line_comment;
- $xml[xml_tag_begin][0] = xml_tag;
- $xml[xml_tag][">"] = normal_text;
- $xml[xml_tag]["\""] = dq_literal;
- $xml[xml_tag]["'"] = sq_literal;
- $xml[xml_tag][0] = xml_tag;
- $xml[xml_pi][">"] = normal_text;
- $xml[xml_pi][0] = xml_tag;
- $xml[line_comment][">"] = normal_text;
- $xml[line_comment][0] = line_comment;
- $xml[dq_literal]["\""] = xml_tag;
- $xml[dq_literal]["&"] = dq_escape;
- $xml[dq_literal][0] = dq_literal;
- $xml[sq_literal]["'"] = xml_tag;
- $xml[sq_literal]["&"] = sq_escape;
- $xml[sq_literal][0] = sq_literal;
- $xml[dq_escape][";"] = dq_literal;
- $xml[dq_escape][0] = dq_escape;
-
- //
- // Main state transition table
- //
- $states = array(
- "C89" => $c89,
- "C" => $c99,
- "C++" => $cpp,
- "PHP" => $php,
- "Perl" => $perl,
- "Java" => $java,
- "VB" => $vb,
- "C#" => $cs,
- "Ruby" => $ruby,
- "Python" => $python,
- "Pascal" => $pascal,
- "mIRC" => $mirc,
- "PL/I" => $pli,
- "SQL" => $sql,
- "XML" => $xml,
- "Scheme" => $sch
- );
-
-
- //
- // Process functions
- //
- $process["C89"][normal_text][sq_literal] = "rtrim1";
- $process["C89"][normal_text][dq_literal] = "rtrim1";
- $process["C89"][normal_text][slash_begin] = "rtrim1";
- $process["C89"][normal_text][0] = "syn_proc";
-
- $process["C89"][slash_begin][star_comment] = "rtrim1";
- $process["C89"][slash_begin][0] = "slash_putback";
-
- $process["Scheme"][sch_normal][sch_strlit] = "sch_rtrim1";
- $process["Scheme"][sch_normal][sch_chrlit] = "sch_rtrim1";
- $process["Scheme"][sch_normal][sch_numlit] = "sch_rtrim1";
-
- $process["SQL"][normal_text][sq_literal] = "rtrim1";
- $process["SQL"][normal_text][dq_literal] = "rtrim1";
- $process["SQL"][normal_text][bt_literal] = "rtrim1";
- $process["SQL"][normal_text][dash_begin] = "rtrim1";
- $process["SQL"][normal_text][0] = "syn_proc";
-
- $process["SQL"][dash_begin][line_comment] = "rtrim1";
- $process["SQL"][dash_begin][0] = "dash_putback";
-
- $process["PL/I"] = $process["C89"];
-
- $process["C++"] = $process["C89"];
- $process["C++"][slash_begin][line_comment] = "rtrim1";
-
- $process["C"] = $process["C++"];
-
- $process["PHP"] = $process["C++"];
- $process["PHP"][normal_text][line_comment] = "rtrim1";
-
- $process["Perl"][normal_text][sq_literal] = "rtrim1";
- $process["Perl"][normal_text][dq_literal] = "rtrim1";
- $process["Perl"][normal_text][line_comment] = "rtrim1";
- $process["Perl"][normal_text][0] = "syn_proc";
-
- $process["Ruby"] = $process["Perl"];
- $process["Python"] = $process["Perl"];
-
- $process["mIRC"][normal_text][dq_literal] = "rtrim1";
- $process["mIRC"][normal_text][line_comment] = "rtrim1";
- $process["mIRC"][normal_text][0] = "syn_proc";
-
- $process["VB"] = $process["Perl"];
-
- $process["Java"] = $process["C++"];
-
- $process["C#"] = $process["Java"];
-
- $process["Pascal"] = $process["C++"];
- $process["Pascal"][normal_text][line_comment] = "rtrim1";
- $process["Pascal"][normal_text][block_comment] = "rtrim1";
- $process["Pascal"][normal_text][paren_begin] = "rtrim1";
- $process["Pascal"][slash_begin][sq_literal] = "slash_putback_rtrim1";
- $process["Pascal"][slash_begin][dq_literal] = "slash_putback_rtrim1";
- $process["Pascal"][slash_begin][0] = "slash_putback";
- $process["Pascal"][paren_begin][sq_literal] = "lparen_putback_rtrim1";
- $process["Pascal"][paren_begin][dq_literal] = "lparen_putback_rtrim1";
- $process["Pascal"][paren_begin][star_comment] = "rtrim1";
- $process["Pascal"][paren_begin][0] = "lparen_putback";
-
- $process["XML"][normal_text][xml_tag_begin] = "rtrim1";
- $process["XML"][normal_text][html_entity] = "rtrim1";
- $process["XML"][html_entity][xml_tag_begin] = "rtrim1";
- $process["XML"][html_entity][0] = "proc_void";
- $process["XML"][xml_tag_begin][xml_tag] = "prepend_xml_opentag";
- $process["XML"][xml_tag_begin][xml_pi] = "rtrim1";
- $process["XML"][xml_tag_begin][line_comment] = "rtrim1";
- $process["XML"][line_comment][normal_text] = "rtrim1_htmlesc";
- $process["XML"][xml_tag][normal_text] = "rtrim1";
- $process["XML"][xml_tag][dq_literal] = "rtrim1";
- $process["XML"][dq_literal][xml_tag] = "rtrim1";
- $process["XML"][dq_literal][dq_escape] = "rtrim1";
-
- $process_end["C89"] = "syntax_highlight_helper";
- $process_end["C++"] = $process_end["C89"];
- $process_end["C"] = $process_end["C89"];
- $process_end["PHP"] = $process_end["C89"];
- $process_end["Perl"] = $process_end["C89"];
- $process_end["Java"] = $process_end["C89"];
- $process_end["VB"] = $process_end["C89"];
- $process_end["C#"] = $process_end["C89"];
- $process_end["Ruby"] = $process_end["C89"];
- $process_end["Python"] = $process_end["C89"];
- $process_end["Pascal"] = $process_end["C89"];
- $process_end["mIRC"] = $process_end["C89"];
- $process_end["PL/I"] = $process_end["C89"];
- $process_end["SQL"] = $process_end["C89"];
- $process_end["Scheme"] = "sch_syntax_helper";
-
-
- $edges["C89"][normal_text .",". dq_literal] = '<span class="literal">"';
- $edges["C89"][normal_text .",". sq_literal] = '<span class="literal">\'';
- $edges["C89"][slash_begin .",". star_comment] = '<span class="comment">/*';
- $edges["C89"][dq_literal .",". normal_text] = '</span>';
- $edges["C89"][sq_literal .",". normal_text] = '</span>';
- $edges["C89"][star_end .",". normal_text] = '</span>';
-
- $edges["Scheme"][sch_normal .",". sch_strlit] = '<span class="sch_str">"';
- $edges["Scheme"][sch_normal .",". sch_numlit] = '<span class="sch_num">';
- $edges["Scheme"][sch_normal .",". sch_chrlit] = '<span class="sch_chr">#';
- $edges["Scheme"][sch_strlit .",". sch_normal] = '</span>';
- $edges["Scheme"][sch_numlit .",". sch_normal] = '</span>';
- $edges["Scheme"][sch_chrlit .",". sch_normal] = '</span>';
-
- $edges["SQL"][normal_text .",". dq_literal] = '<span class="literal">"';
- $edges["SQL"][normal_text .",". sq_literal] = '<span class="literal">\'';
- $edges["SQL"][dash_begin .",". line_comment] = '<span class="comment">--';
- $edges["SQL"][normal_text .",". bt_literal] = '`';
- $edges["SQL"][dq_literal .",". normal_text] = '</span>';
- $edges["SQL"][sq_literal .",". normal_text] = '</span>';
- $edges["SQL"][line_comment .",". normal_text] = '</span>';
-
- $edges["PL/I"] = $edges["C89"];
-
- $edges["C++"] = $edges["C89"];
- $edges["C++"][slash_begin .",". line_comment] = '<span class="comment">//';
- $edges["C++"][line_comment .",". normal_text] = '</span>';
-
- $edges["C"] = $edges["C++"];
-
- $edges["PHP"] = $edges["C++"];
- $edges["PHP"][normal_text .",". line_comment] = '<span class="comment">#';
-
- $edges["Perl"][normal_text .",". dq_literal] = '<span class="literal">"';
- $edges["Perl"][normal_text .",". sq_literal] = '<span class="literal">\'';
- $edges["Perl"][dq_literal .",". normal_text] = '</span>';
- $edges["Perl"][sq_literal .",". normal_text] = '</span>';
- $edges["Perl"][normal_text .",". line_comment] = '<span class="comment">#';
- $edges["Perl"][line_comment .",". normal_text] = '</span>';
-
- $edges["Ruby"] = $edges["Perl"];
-
- $edges["Python"] = $edges["Perl"];
-
- $edges["mIRC"][normal_text .",". dq_literal] = '<span class="literal">"';
- $edges["mIRC"][normal_text .",". line_comment] = '<span class="comment">;';
- $edges["mIRC"][dq_literal .",". normal_text] = '</span>';
- $edges["mIRC"][line_comment .",". normal_text] = '</span>';
-
- $edges["VB"] = $edges["Perl"];
- $edges["VB"][normal_text .",". line_comment] = '<span class="comment">\'';
-
- $edges["Java"] = $edges["C++"];
-
- $edges["C#"] = $edges["Java"];
-
- $edges["Pascal"] = $edges["C89"];
- $edges["Pascal"][paren_begin .",". star_comment] = '<span class="comment">(*';
- $edges["Pascal"][paren_begin .",". dq_literal] = '<span class="literal">"';
- $edges["Pascal"][paren_begin .",". sq_literal] = '<span class="literal">\'';
- $edges["Pascal"][slash_begin .",". dq_literal] = '<span class="literal">"';
- $edges["Pascal"][slash_begin .",". sq_literal] = '<span class="literal">\'';
- $edges["Pascal"][slash_begin .",". line_comment] = '<span class="comment">//';
- $edges["Pascal"][normal_text . "," . block_comment] = '<span class="comment">{';
- $edges["Pascal"][line_comment . "," . normal_text] = '</span>';
- $edges["Pascal"][block_comment . "," . normal_text] = '</span>';
-
- $edges["XML"][normal_text . "," . html_entity] = '<span class="html_entity">&amp;';
- $edges["XML"][html_entity . "," . normal_text] = '</span>';
- $edges["XML"][html_entity . "," . xml_tag_begin] = '</span>';
- $edges["XML"][xml_tag . "," . normal_text] = '&gt;</span>';
- $edges["XML"][xml_tag_begin . "," . xml_pi] = '<span class="xml_pi">&lt;?';
- $edges["XML"][xml_tag_begin . "," . line_comment] = '<span class="comment">&lt;!';
- $edges["XML"][line_comment . "," . normal_text] = '&gt;</span>';
- $edges["XML"][xml_tag .",". dq_literal] = '<span class="literal">"';
- $edges["XML"][dq_literal . "," . xml_tag] = '"</span>';
- $edges["XML"][dq_literal . "," . dq_escape] = '<span class="html_entity">&amp;';
- $edges["XML"][dq_escape . "," . dq_literal] = '</span>';
- $edges["XML"][xml_tag .",". sq_literal] = '<span class="literal">\'';
- $edges["XML"][sq_literal . "," . xml_tag] = '\'</span>';
- $edges["XML"][sq_literal . "," . sq_escape] = '<span class="html_entity">&amp;';
- $edges["XML"][sq_escape . "," . sq_literal] = '</span>';
-
- //
- // The State Machine
- //
- if (array_key_exists($language, $initial_state))
- $state = $initial_state[$language];
- else
- $state = normal_text;
- $output = "";
- $span = "";
- while (strlen($text) > 0)
- {
- $ch = substr($text, 0, 1);
- $text = substr($text, 1);
-
- $oldstate = $state;
- $state = (array_key_exists($ch, $states[$language][$state]))?
- $states[$language][$state][$ch] :
- $states[$language][$state][0];
-
- $span .= $ch;
-
- if ($oldstate != $state)
- {
- if (array_key_exists($language, $process) &&
- array_key_exists($oldstate, $process[$language]))
- {
- if (array_key_exists($state, $process[$language][$oldstate]))
- {
- $pf = $process[$language][$oldstate][$state];
- $output .= $pf($span, $language, $ch);
- }
- else
- {
- $pf = $process[$language][$oldstate][0];
- $output .= $pf($span, $language, $ch);
- }
- }
- else
- {
- $output .= $span;
- }
-
- if (array_key_exists($language, $edges) &&
- array_key_exists("$oldstate,$state", $edges[$language]))
- $output .= $edges[$language]["$oldstate,$state"];
-
- $span = "";
- }
- }
-
- if (array_key_exists($language, $process_end) && $state == normal_text)
- $output .= $process_end[$language]($span, $language);
- else
- $output .= $span;
-
- if ($state != normal_text)
- {
- if (array_key_exists($language, $edges) &&
- array_key_exists("$state," . normal_text, $edges[$language]))
- $output .= $edges[$language]["$state," . normal_text];
- }
-
- return $output;
-}
-
-?>
diff --git a/paste/include/pastify.inc b/paste/include/pastify.inc
index 321fe51..bb3d2f9 100644
--- a/paste/include/pastify.inc
+++ b/paste/include/pastify.inc
@@ -4,6 +4,7 @@ This software is licensed through a BSD-style License.
http://www.opensource.org/licenses/bsd-license.php
Copyright (c) 2002 - 2009 Jacob D. Cohen
+Copyright (c) 2009 Alexander Sulfrian
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -32,7 +33,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-require_once("highlight.inc");
+require_once("class.geshi.php");
function PastifyText($text, $language, $desc)
{
@@ -47,11 +48,8 @@ function PastifyText($text, $language, $desc)
$lineout = "";
# Do the actual syntax highlighting
- $output = SyntaxHighlight($text, $language);
-
- for ($i = 1; $i < $nlines; ++$i)
- $lineout .= "$i\n";
- $lineout .= "$i";
+ $geshi = new GeSHi($text, $language);
+ $output = $geshi->parse_code();
$html = <<<EOH
<html>
@@ -74,12 +72,7 @@ function PastifyText($text, $language, $desc)
</table>
</div>
-<table border="0" cellpadding="1" cellspacing="2">
-<tr>
- <td><pre class="code">$lineout</pre></td>
- <td width="100%"><pre class="code" id="codemain">$output</pre></td>
-</tr>
-</table>
+$output
</html>
EOH;