summaryrefslogtreecommitdiffstats
path: root/JLanguageTool/website
diff options
context:
space:
mode:
authorArno Teigseth <arno@teigseth.no>2011-02-05 08:48:27 +0000
committerArno Teigseth <arno@teigseth.no>2011-02-05 08:48:27 +0000
commit4f3d565a5e5ede6eb6fd1f276d4e8ad37b67b5ce (patch)
tree7af736540eca93034428a975bd850e709fbbe2e5 /JLanguageTool/website
parentecaee85ab5984ebadd56721c295dc26b3335f7ce (diff)
downloadgrammar-norwegian-master.tar.gz
grammar-norwegian-master.tar.bz2
grammar-norwegian-master.tar.xz
added more files, to complete languagetool uploadHEADmaster
Diffstat (limited to 'JLanguageTool/website')
-rw-r--r--JLanguageTool/website/include/footer.php20
-rw-r--r--JLanguageTool/website/include/geshi/geshi.php2913
-rw-r--r--JLanguageTool/website/include/geshi/java5.php1021
-rw-r--r--JLanguageTool/website/include/geshi/xml.php146
-rw-r--r--JLanguageTool/website/include/header.php70
-rw-r--r--JLanguageTool/website/include/help.php104
-rw-r--r--JLanguageTool/website/www/css/style.css182
-rw-r--r--JLanguageTool/website/www/demo/index.php14
-rw-r--r--JLanguageTool/website/www/development/index.php349
-rw-r--r--JLanguageTool/website/www/favicon.icobin0 -> 318 bytes
-rw-r--r--JLanguageTool/website/www/images/bg.jpgbin0 -> 47230 bytes
-rw-r--r--JLanguageTool/website/www/images/link.pngbin0 -> 177 bytes
-rw-r--r--JLanguageTool/website/www/images/link_extern.pngbin0 -> 167 bytes
-rw-r--r--JLanguageTool/website/www/images/pix.pngbin0 -> 167 bytes
-rw-r--r--JLanguageTool/website/www/images/sign.pngbin0 -> 196 bytes
-rw-r--r--JLanguageTool/website/www/images/twitter_link16x16.pngbin0 -> 792 bytes
-rw-r--r--JLanguageTool/website/www/index.php132
-rw-r--r--JLanguageTool/website/www/languages/index.php83
-rw-r--r--JLanguageTool/website/www/languagetool.update.xml12
-rw-r--r--JLanguageTool/website/www/links/index.php80
-rw-r--r--JLanguageTool/website/www/screenshots/art/screenshot.pngbin0 -> 17247 bytes
-rw-r--r--JLanguageTool/website/www/screenshots/art/screenshot_ooo.pngbin0 -> 32188 bytes
-rw-r--r--JLanguageTool/website/www/screenshots/art/screenshot_ooo3.pngbin0 -> 40339 bytes
-rw-r--r--JLanguageTool/website/www/screenshots/art/screenshot_ooo3_pl.pngbin0 -> 46617 bytes
-rw-r--r--JLanguageTool/website/www/screenshots/art/screenshot_ooo3_pl_small.pngbin0 -> 45795 bytes
-rw-r--r--JLanguageTool/website/www/screenshots/art/screenshot_ooo3_small.pngbin0 -> 50004 bytes
-rw-r--r--JLanguageTool/website/www/screenshots/art/screenshot_ooo_small.pngbin0 -> 29703 bytes
-rw-r--r--JLanguageTool/website/www/screenshots/art/screenshot_small.pngbin0 -> 28568 bytes
-rw-r--r--JLanguageTool/website/www/screenshots/index.php53
-rw-r--r--JLanguageTool/website/www/usage/index.php83
30 files changed, 5262 insertions, 0 deletions
diff --git a/JLanguageTool/website/include/footer.php b/JLanguageTool/website/include/footer.php
new file mode 100644
index 0000000..ab1c576
--- /dev/null
+++ b/JLanguageTool/website/include/footer.php
@@ -0,0 +1,20 @@
+ <!-- /MAIN TEXT -->
+
+ </td>
+</tr>
+</table>
+
+<p class="lastmod">Last modified:
+ <?php
+ list($date, $time, $cet) = split(" ", $lastmod);
+ print $date;
+ ?>
+</p>
+<p class="invisible">Time to generate page:
+<?php
+ print sprintf("%.2fs", getmicrotime()-$start_time);
+?>
+</p>
+
+</body>
+</html>
diff --git a/JLanguageTool/website/include/geshi/geshi.php b/JLanguageTool/website/include/geshi/geshi.php
new file mode 100644
index 0000000..832b62e
--- /dev/null
+++ b/JLanguageTool/website/include/geshi/geshi.php
@@ -0,0 +1,2913 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * The GeSHi class for Generic Syntax Highlighting. Please refer to the
+ * documentation at http://qbnz.com/highlighter/documentation.php for more
+ * information about how to use this class.
+ *
+ * For changes, release notes, TODOs etc, see the relevant files in the docs/
+ * directory.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * @package geshi
+ * @subpackage core
+ * @author Nigel McNie <nigel@geshi.org>
+ * @copyright (C) 2004 - 2007 Nigel McNie
+ * @license http://gnu.org/copyleft/gpl.html GNU GPL
+ *
+ */
+
+//
+// GeSHi Constants
+// You should use these constant names in your programs instead of
+// their values - you never know when a value may change in a future
+// version
+//
+
+/** The version of this GeSHi file */
+define('GESHI_VERSION', '1.0.7.20');
+
+// Define the root directory for the GeSHi code tree
+if (!defined('GESHI_ROOT')) {
+ /** The root directory for GeSHi */
+ define('GESHI_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);
+}
+/** The language file directory for GeSHi
+ @access private */
+define('GESHI_LANG_ROOT', GESHI_ROOT . 'geshi' . DIRECTORY_SEPARATOR);
+
+
+// Line numbers - use with enable_line_numbers()
+/** Use no line numbers when building the result */
+define('GESHI_NO_LINE_NUMBERS', 0);
+/** Use normal line numbers when building the result */
+define('GESHI_NORMAL_LINE_NUMBERS', 1);
+/** Use fancy line numbers when building the result */
+define('GESHI_FANCY_LINE_NUMBERS', 2);
+
+// Container HTML type
+/** Use nothing to surround the source */
+define('GESHI_HEADER_NONE', 0);
+/** Use a "div" to surround the source */
+define('GESHI_HEADER_DIV', 1);
+/** Use a "pre" to surround the source */
+define('GESHI_HEADER_PRE', 2);
+
+// Capatalisation constants
+/** Lowercase keywords found */
+define('GESHI_CAPS_NO_CHANGE', 0);
+/** Uppercase keywords found */
+define('GESHI_CAPS_UPPER', 1);
+/** Leave keywords found as the case that they are */
+define('GESHI_CAPS_LOWER', 2);
+
+// Link style constants
+/** Links in the source in the :link state */
+define('GESHI_LINK', 0);
+/** Links in the source in the :hover state */
+define('GESHI_HOVER', 1);
+/** Links in the source in the :active state */
+define('GESHI_ACTIVE', 2);
+/** Links in the source in the :visited state */
+define('GESHI_VISITED', 3);
+
+// Important string starter/finisher
+// Note that if you change these, they should be as-is: i.e., don't
+// write them as if they had been run through htmlentities()
+/** The starter for important parts of the source */
+define('GESHI_START_IMPORTANT', '<BEGIN GeSHi>');
+/** The ender for important parts of the source */
+define('GESHI_END_IMPORTANT', '<END GeSHi>');
+
+/**#@+
+ * @access private
+ */
+// When strict mode applies for a language
+/** Strict mode never applies (this is the most common) */
+define('GESHI_NEVER', 0);
+/** Strict mode *might* apply, and can be enabled or
+ disabled by {@link GeSHi::enable_strict_mode()} */
+define('GESHI_MAYBE', 1);
+/** Strict mode always applies */
+define('GESHI_ALWAYS', 2);
+
+// Advanced regexp handling constants, used in language files
+/** The key of the regex array defining what to search for */
+define('GESHI_SEARCH', 0);
+/** The key of the regex array defining what bracket group in a
+ matched search to use as a replacement */
+define('GESHI_REPLACE', 1);
+/** The key of the regex array defining any modifiers to the regular expression */
+define('GESHI_MODIFIERS', 2);
+/** The key of the regex array defining what bracket group in a
+ matched search to put before the replacement */
+define('GESHI_BEFORE', 3);
+/** The key of the regex array defining what bracket group in a
+ matched search to put after the replacement */
+define('GESHI_AFTER', 4);
+/** The key of the regex array defining a custom keyword to use
+ for this regexp's html tag class */
+define('GESHI_CLASS', 5);
+
+/** Used in language files to mark comments */
+define('GESHI_COMMENTS', 0);
+
+// Error detection - use these to analyse faults
+/** No sourcecode to highlight was specified
+ * @deprecated
+ */
+define('GESHI_ERROR_NO_INPUT', 1);
+/** The language specified does not exist */
+define('GESHI_ERROR_NO_SUCH_LANG', 2);
+/** GeSHi could not open a file for reading (generally a language file) */
+define('GESHI_ERROR_FILE_NOT_READABLE', 3);
+/** The header type passed to {@link GeSHi::set_header_type()} was invalid */
+define('GESHI_ERROR_INVALID_HEADER_TYPE', 4);
+/** The line number type passed to {@link GeSHi::enable_line_numbers()} was invalid */
+define('GESHI_ERROR_INVALID_LINE_NUMBER_TYPE', 5);
+/**#@-*/
+
+
+/**
+ * The GeSHi Class.
+ *
+ * Please refer to the documentation for GeSHi 1.0.X that is available
+ * at http://qbnz.com/highlighter/documentation.php for more information
+ * about how to use this class.
+ *
+ * @package geshi
+ * @author Nigel McNie <nigel@geshi.org>
+ * @copyright (C) 2004 - 2007 Nigel McNie
+ */
+class GeSHi {
+ /**#@+
+ * @access private
+ */
+ /**
+ * The source code to highlight
+ * @var string
+ */
+ var $source = '';
+
+ /**
+ * The language to use when highlighting
+ * @var string
+ */
+ var $language = '';
+
+ /**
+ * The data for the language used
+ * @var array
+ */
+ var $language_data = array();
+
+ /**
+ * The path to the language files
+ * @var string
+ */
+ var $language_path = GESHI_LANG_ROOT;
+
+ /**
+ * The error message associated with an error
+ * @var string
+ * @todo check err reporting works
+ */
+ var $error = false;
+
+ /**
+ * Possible error messages
+ * @var array
+ */
+ var $error_messages = array(
+ GESHI_ERROR_NO_SUCH_LANG => 'GeSHi could not find the language {LANGUAGE} (using path {PATH})',
+ GESHI_ERROR_FILE_NOT_READABLE => 'The file specified for load_from_file was not readable',
+ GESHI_ERROR_INVALID_HEADER_TYPE => 'The header type specified is invalid',
+ GESHI_ERROR_INVALID_LINE_NUMBER_TYPE => 'The line number type specified is invalid'
+ );
+
+ /**
+ * Whether highlighting is strict or not
+ * @var boolean
+ */
+ var $strict_mode = false;
+
+ /**
+ * Whether to use CSS classes in output
+ * @var boolean
+ */
+ var $use_classes = false;
+
+ /**
+ * The type of header to use. Can be one of the following
+ * values:
+ *
+ * - GESHI_HEADER_PRE: Source is outputted in a "pre" HTML element.
+ * - GESHI_HEADER_DIV: Source is outputted in a "div" HTML element.
+ * - GESHI_HEADER_NONE: No header is outputted.
+ *
+ * @var int
+ */
+ var $header_type = GESHI_HEADER_PRE;
+
+ /**
+ * Array of permissions for which lexics should be highlighted
+ * @var array
+ */
+ var $lexic_permissions = array(
+ 'KEYWORDS' => array(),
+ 'COMMENTS' => array('MULTI' => true),
+ 'REGEXPS' => array(),
+ 'ESCAPE_CHAR' => true,
+ 'BRACKETS' => true,
+ 'SYMBOLS' => true,
+ 'STRINGS' => true,
+ 'NUMBERS' => true,
+ 'METHODS' => true,
+ 'SCRIPT' => true
+ );
+
+ /**
+ * The time it took to parse the code
+ * @var double
+ */
+ var $time = 0;
+
+ /**
+ * The content of the header block
+ * @var string
+ */
+ var $header_content = '';
+
+ /**
+ * The content of the footer block
+ * @var string
+ */
+ var $footer_content = '';
+
+ /**
+ * The style of the header block
+ * @var string
+ */
+ var $header_content_style = '';
+
+ /**
+ * The style of the footer block
+ * @var string
+ */
+ var $footer_content_style = '';
+
+ /**
+ * Tells if a block around the highlighted source should be forced
+ * if not using line numbering
+ * @var boolean
+ */
+ var $force_code_block = false;
+
+ /**
+ * The styles for hyperlinks in the code
+ * @var array
+ */
+ var $link_styles = array();
+
+ /**
+ * Whether important blocks should be recognised or not
+ * @var boolean
+ * @deprecated
+ * @todo REMOVE THIS FUNCTIONALITY!
+ */
+ var $enable_important_blocks = false;
+
+ /**
+ * Styles for important parts of the code
+ * @var string
+ * @deprecated
+ * @todo As above - rethink the whole idea of important blocks as it is buggy and
+ * will be hard to implement in 1.2
+ */
+ var $important_styles = 'font-weight: bold; color: red;'; // Styles for important parts of the code
+
+ /**
+ * Whether CSS IDs should be added to the code
+ * @var boolean
+ */
+ var $add_ids = false;
+
+ /**
+ * Lines that should be highlighted extra
+ * @var array
+ */
+ var $highlight_extra_lines = array();
+
+ /**
+ * Styles of extra-highlighted lines
+ * @var string
+ */
+ var $highlight_extra_lines_style = 'color: #cc0; background-color: #ffc;';
+
+ /**
+ * The line ending
+ * If null, nl2br() will be used on the result string.
+ * Otherwise, all instances of \n will be replaced with $line_ending
+ * @var string
+ */
+ var $line_ending = null;
+
+ /**
+ * Number at which line numbers should start at
+ * @var int
+ */
+ var $line_numbers_start = 1;
+
+ /**
+ * The overall style for this code block
+ * @var string
+ */
+ var $overall_style = '';
+
+ /**
+ * The style for the actual code
+ * @var string
+ */
+ var $code_style = 'font-family: \'Courier New\', Courier, monospace; font-weight: normal;';
+
+ /**
+ * The overall class for this code block
+ * @var string
+ */
+ var $overall_class = '';
+
+ /**
+ * The overall ID for this code block
+ * @var string
+ */
+ var $overall_id = '';
+
+ /**
+ * Line number styles
+ * @var string
+ */
+ var $line_style1 = 'font-family: \'Courier New\', Courier, monospace; color: black; font-weight: normal; font-style: normal;';
+
+ /**
+ * Line number styles for fancy lines
+ * @var string
+ */
+ var $line_style2 = 'font-weight: bold;';
+
+ /**
+ * Flag for how line nubmers are displayed
+ * @var boolean
+ */
+ var $line_numbers = GESHI_NO_LINE_NUMBERS;
+
+ /**
+ * The "nth" value for fancy line highlighting
+ * @var int
+ */
+ var $line_nth_row = 0;
+
+ /**
+ * The size of tab stops
+ * @var int
+ */
+ var $tab_width = 8;
+
+ /**
+ * Should we use language-defined tab stop widths?
+ * @var int
+ */
+ var $use_language_tab_width = false;
+
+ /**
+ * Default target for keyword links
+ * @var string
+ */
+ var $link_target = '';
+
+ /**
+ * The encoding to use for entity encoding
+ * NOTE: no longer used
+ * @var string
+ */
+ var $encoding = 'ISO-8859-1';
+
+ /**
+ * Should keywords be linked?
+ * @var boolean
+ */
+ var $keyword_links = true;
+
+ /**#@-*/
+
+ /**
+ * Creates a new GeSHi object, with source and language
+ *
+ * @param string The source code to highlight
+ * @param string The language to highlight the source with
+ * @param string The path to the language file directory. <b>This
+ * is deprecated!</b> I've backported the auto path
+ * detection from the 1.1.X dev branch, so now it
+ * should be automatically set correctly. If you have
+ * renamed the language directory however, you will
+ * still need to set the path using this parameter or
+ * {@link GeSHi::set_language_path()}
+ * @since 1.0.0
+ */
+ function GeSHi($source, $language, $path = '') {
+ $this->set_source($source);
+ $this->set_language_path($path);
+ $this->set_language($language);
+ }
+
+ /**
+ * Returns an error message associated with the last GeSHi operation,
+ * or false if no error has occured
+ *
+ * @return string|false An error message if there has been an error, else false
+ * @since 1.0.0
+ */
+ function error() {
+ if ($this->error) {
+ $msg = $this->error_messages[$this->error];
+ $debug_tpl_vars = array(
+ '{LANGUAGE}' => $this->language,
+ '{PATH}' => $this->language_path
+ );
+ foreach ($debug_tpl_vars as $tpl => $var) {
+ $msg = str_replace($tpl, $var, $msg);
+ }
+ return "<br /><strong>GeSHi Error:</strong> $msg (code $this->error)<br />";
+ }
+ return false;
+ }
+
+ /**
+ * Gets a human-readable language name (thanks to Simon Patterson
+ * for the idea :))
+ *
+ * @return string The name for the current language
+ * @since 1.0.2
+ */
+ function get_language_name() {
+ if (GESHI_ERROR_NO_SUCH_LANG == $this->error) {
+ return $this->language_data['LANG_NAME'] . ' (Unknown Language)';
+ }
+ return $this->language_data['LANG_NAME'];
+ }
+
+ /**
+ * Sets the source code for this object
+ *
+ * @param string The source code to highlight
+ * @since 1.0.0
+ */
+ function set_source($source) {
+ $this->source = $source;
+ $this->highlight_extra_lines = array();
+ }
+
+ /**
+ * Sets the language for this object
+ *
+ * @param string The name of the language to use
+ * @since 1.0.0
+ */
+ function set_language($language) {
+ $this->error = false;
+ $this->strict_mode = GESHI_NEVER;
+
+ $language = preg_replace('#[^a-zA-Z0-9\-_]#', '', $language);
+ $this->language = strtolower($language);
+
+ $file_name = $this->language_path . $this->language . '.php';
+ if (!is_readable($file_name)) {
+ $this->error = GESHI_ERROR_NO_SUCH_LANG;
+ return;
+ }
+ // Load the language for parsing
+ $this->load_language($file_name);
+ }
+
+ /**
+ * Sets the path to the directory containing the language files. Note
+ * that this path is relative to the directory of the script that included
+ * geshi.php, NOT geshi.php itself.
+ *
+ * @param string The path to the language directory
+ * @since 1.0.0
+ * @deprecated The path to the language files should now be automatically
+ * detected, so this method should no longer be needed. The
+ * 1.1.X branch handles manual setting of the path differently
+ * so this method will disappear in 1.2.0.
+ */
+ function set_language_path($path) {
+ if ($path) {
+ $this->language_path = ('/' == substr($path, strlen($path) - 1, 1)) ? $path : $path . '/';
+ $this->set_language($this->language); // otherwise set_language_path has no effect
+ }
+ }
+
+ /**
+ * Sets the type of header to be used.
+ *
+ * If GESHI_HEADER_DIV is used, the code is surrounded in a "div".This
+ * means more source code but more control over tab width and line-wrapping.
+ * GESHI_HEADER_PRE means that a "pre" is used - less source, but less
+ * control. Default is GESHI_HEADER_PRE.
+ *
+ * From 1.0.7.2, you can use GESHI_HEADER_NONE to specify that no header code
+ * should be outputted.
+ *
+ * @param int The type of header to be used
+ * @since 1.0.0
+ */
+ function set_header_type($type) {
+ if (GESHI_HEADER_DIV != $type && GESHI_HEADER_PRE != $type && GESHI_HEADER_NONE != $type) {
+ $this->error = GESHI_ERROR_INVALID_HEADER_TYPE;
+ return;
+ }
+ $this->header_type = $type;
+ // Set a default overall style if the header is a <div>
+ if (GESHI_HEADER_DIV == $type && !$this->overall_style) {
+ $this->overall_style = 'font-family: monospace;';
+ }
+ }
+
+ /**
+ * Sets the styles for the code that will be outputted
+ * when this object is parsed. The style should be a
+ * string of valid stylesheet declarations
+ *
+ * @param string The overall style for the outputted code block
+ * @param boolean Whether to merge the styles with the current styles or not
+ * @since 1.0.0
+ */
+ function set_overall_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->overall_style = $style;
+ }
+ else {
+ $this->overall_style .= $style;
+ }
+ }
+
+ /**
+ * Sets the overall classname for this block of code. This
+ * class can then be used in a stylesheet to style this object's
+ * output
+ *
+ * @param string The class name to use for this block of code
+ * @since 1.0.0
+ */
+ function set_overall_class($class) {
+ $this->overall_class = $class;
+ }
+
+ /**
+ * Sets the overall id for this block of code. This id can then
+ * be used in a stylesheet to style this object's output
+ *
+ * @param string The ID to use for this block of code
+ * @since 1.0.0
+ */
+ function set_overall_id($id) {
+ $this->overall_id = $id;
+ }
+
+ /**
+ * Sets whether CSS classes should be used to highlight the source. Default
+ * is off, calling this method with no arguments will turn it on
+ *
+ * @param boolean Whether to turn classes on or not
+ * @since 1.0.0
+ */
+ function enable_classes($flag = true) {
+ $this->use_classes = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the style for the actual code. This should be a string
+ * containing valid stylesheet declarations. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * Note: Use this method to override any style changes you made to
+ * the line numbers if you are using line numbers, else the line of
+ * code will have the same style as the line number! Consult the
+ * GeSHi documentation for more information about this.
+ *
+ * @param string The style to use for actual code
+ * @param boolean Whether to merge the current styles with the new styles
+ */
+ function set_code_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->code_style = $style;
+ }
+ else {
+ $this->code_style .= $style;
+ }
+ }
+
+ /**
+ * Sets the styles for the line numbers.
+ *
+ * @param string The style for the line numbers that are "normal"
+ * @param string|boolean If a string, this is the style of the line
+ * numbers that are "fancy", otherwise if boolean then this
+ * defines whether the normal styles should be merged with the
+ * new normal styles or not
+ * @param boolean If set, is the flag for whether to merge the "fancy"
+ * styles with the current styles or not
+ * @since 1.0.2
+ */
+ function set_line_style($style1, $style2 = '', $preserve_defaults = false) {
+ if (is_bool($style2)) {
+ $preserve_defaults = $style2;
+ $style2 = '';
+ }
+ if (!$preserve_defaults) {
+ $this->line_style1 = $style1;
+ $this->line_style2 = $style2;
+ }
+ else {
+ $this->line_style1 .= $style1;
+ $this->line_style2 .= $style2;
+ }
+ }
+
+ /**
+ * Sets whether line numbers should be displayed.
+ *
+ * Valid values for the first parameter are:
+ *
+ * - GESHI_NO_LINE_NUMBERS: Line numbers will not be displayed
+ * - GESHI_NORMAL_LINE_NUMBERS: Line numbers will be displayed
+ * - GESHI_FANCY_LINE_NUMBERS: Fancy line numbers will be displayed
+ *
+ * For fancy line numbers, the second parameter is used to signal which lines
+ * are to be fancy. For example, if the value of this parameter is 5 then every
+ * 5th line will be fancy.
+ *
+ * @param int How line numbers should be displayed
+ * @param int Defines which lines are fancy
+ * @since 1.0.0
+ */
+ function enable_line_numbers($flag, $nth_row = 5) {
+ if (GESHI_NO_LINE_NUMBERS != $flag && GESHI_NORMAL_LINE_NUMBERS != $flag
+ && GESHI_FANCY_LINE_NUMBERS != $flag) {
+ $this->error = GESHI_ERROR_INVALID_LINE_NUMBER_TYPE;
+ }
+ $this->line_numbers = $flag;
+ $this->line_nth_row = $nth_row;
+ }
+
+ /**
+ * Sets the style for a keyword group. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param int The key of the keyword group to change the styles of
+ * @param string The style to make the keywords
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_keyword_group_style($key, $style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['KEYWORDS'][$key] = $style;
+ }
+ else {
+ $this->language_data['STYLES']['KEYWORDS'][$key] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for a keyword group
+ *
+ * @param int The key of the keyword group to turn on or off
+ * @param boolean Whether to turn highlighting for that group on or off
+ * @since 1.0.0
+ */
+ function set_keyword_group_highlighting($key, $flag = true) {
+ $this->lexic_permissions['KEYWORDS'][$key] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for comment groups. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param int The key of the comment group to change the styles of
+ * @param string The style to make the comments
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_comments_style($key, $style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['COMMENTS'][$key] = $style;
+ }
+ else {
+ $this->language_data['STYLES']['COMMENTS'][$key] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for comment groups
+ *
+ * @param int The key of the comment group to turn on or off
+ * @param boolean Whether to turn highlighting for that group on or off
+ * @since 1.0.0
+ */
+ function set_comments_highlighting($key, $flag = true) {
+ $this->lexic_permissions['COMMENTS'][$key] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for escaped characters. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the escape characters
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_escape_characters_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['ESCAPE_CHAR'][0] = $style;
+ }
+ else {
+ $this->language_data['STYLES']['ESCAPE_CHAR'][0] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for escaped characters
+ *
+ * @param boolean Whether to turn highlighting for escape characters on or off
+ * @since 1.0.0
+ */
+ function set_escape_characters_highlighting($flag = true) {
+ $this->lexic_permissions['ESCAPE_CHAR'] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for brackets. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * This method is DEPRECATED: use set_symbols_style instead.
+ * This method will be removed in 1.2.X
+ *
+ * @param string The style to make the brackets
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ * @deprecated In favour of set_symbols_style
+ */
+ function set_brackets_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['BRACKETS'][0] = $style;
+ }
+ else {
+ $this->language_data['STYLES']['BRACKETS'][0] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for brackets
+ *
+ * This method is DEPRECATED: use set_symbols_highlighting instead.
+ * This method will be remove in 1.2.X
+ *
+ * @param boolean Whether to turn highlighting for brackets on or off
+ * @since 1.0.0
+ * @deprecated In favour of set_symbols_highlighting
+ */
+ function set_brackets_highlighting($flag) {
+ $this->lexic_permissions['BRACKETS'] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for symbols. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the symbols
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.1
+ */
+ function set_symbols_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['SYMBOLS'][0] = $style;
+ }
+ else {
+ $this->language_data['STYLES']['SYMBOLS'][0] .= $style;
+ }
+ // For backward compatibility
+ $this->set_brackets_style ($style, $preserve_defaults);
+ }
+
+ /**
+ * Turns highlighting on/off for symbols
+ *
+ * @param boolean Whether to turn highlighting for symbols on or off
+ * @since 1.0.0
+ */
+ function set_symbols_highlighting($flag) {
+ $this->lexic_permissions['SYMBOLS'] = ($flag) ? true : false;
+ // For backward compatibility
+ $this->set_brackets_highlighting ($flag);
+ }
+
+ /**
+ * Sets the styles for strings. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the escape characters
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_strings_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['STRINGS'][0] = $style;
+ }
+ else {
+ $this->language_data['STYLES']['STRINGS'][0] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for strings
+ *
+ * @param boolean Whether to turn highlighting for strings on or off
+ * @since 1.0.0
+ */
+ function set_strings_highlighting($flag) {
+ $this->lexic_permissions['STRINGS'] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for numbers. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the numbers
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_numbers_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['NUMBERS'][0] = $style;
+ }
+ else {
+ $this->language_data['STYLES']['NUMBERS'][0] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for numbers
+ *
+ * @param boolean Whether to turn highlighting for numbers on or off
+ * @since 1.0.0
+ */
+ function set_numbers_highlighting($flag) {
+ $this->lexic_permissions['NUMBERS'] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for methods. $key is a number that references the
+ * appropriate "object splitter" - see the language file for the language
+ * you are highlighting to get this number. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param int The key of the object splitter to change the styles of
+ * @param string The style to make the methods
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_methods_style($key, $style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['METHODS'][$key] = $style;
+ }
+ else {
+ $this->language_data['STYLES']['METHODS'][$key] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for methods
+ *
+ * @param boolean Whether to turn highlighting for methods on or off
+ * @since 1.0.0
+ */
+ function set_methods_highlighting($flag) {
+ $this->lexic_permissions['METHODS'] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for regexps. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the regular expression matches
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_regexps_style($key, $style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['REGEXPS'][$key] = $style;
+ }
+ else {
+ $this->language_data['STYLES']['REGEXPS'][$key] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for regexps
+ *
+ * @param int The key of the regular expression group to turn on or off
+ * @param boolean Whether to turn highlighting for the regular expression group on or off
+ * @since 1.0.0
+ */
+ function set_regexps_highlighting($key, $flag) {
+ $this->lexic_permissions['REGEXPS'][$key] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets whether a set of keywords are checked for in a case sensitive manner
+ *
+ * @param int The key of the keyword group to change the case sensitivity of
+ * @param boolean Whether to check in a case sensitive manner or not
+ * @since 1.0.0
+ */
+ function set_case_sensitivity($key, $case) {
+ $this->language_data['CASE_SENSITIVE'][$key] = ($case) ? true : false;
+ }
+
+ /**
+ * Sets the case that keywords should use when found. Use the constants:
+ *
+ * - GESHI_CAPS_NO_CHANGE: leave keywords as-is
+ * - GESHI_CAPS_UPPER: convert all keywords to uppercase where found
+ * - GESHI_CAPS_LOWER: convert all keywords to lowercase where found
+ *
+ * @param int A constant specifying what to do with matched keywords
+ * @since 1.0.1
+ * @todo Error check the passed value
+ */
+ function set_case_keywords($case) {
+ $this->language_data['CASE_KEYWORDS'] = $case;
+ }
+
+ /**
+ * Sets how many spaces a tab is substituted for
+ *
+ * Widths below zero are ignored
+ *
+ * @param int The tab width
+ * @since 1.0.0
+ */
+ function set_tab_width($width) {
+ $this->tab_width = intval($width);
+ //Check if it fit's the constraints:
+ if($this->tab_width < 1) {
+ //Return it to the default
+ $this->tab_width = 8;
+ }
+ }
+
+ /**
+ * Sets whether or not to use tab-stop width specifed by language
+ *
+ * @param boolean Whether to use language-specific tab-stop widths
+ */
+ function set_use_language_tab_width($use) {
+ $this->use_language_tab_width = (bool) $use;
+ }
+
+ /**
+ * Returns the tab width to use, based on the current language and user
+ * preference
+ *
+ * @return int Tab width
+ */
+ function get_real_tab_width() {
+ if (!$this->use_language_tab_width || !isset($this->language_data['TAB_WIDTH'])) {
+ return $this->tab_width;
+ } else {
+ return $this->language_data['TAB_WIDTH'];
+ }
+ }
+
+ /**
+ * Enables/disables strict highlighting. Default is off, calling this
+ * method without parameters will turn it on. See documentation
+ * for more details on strict mode and where to use it.
+ *
+ * @param boolean Whether to enable strict mode or not
+ * @since 1.0.0
+ */
+ function enable_strict_mode($mode = true) {
+ if (GESHI_MAYBE == $this->language_data['STRICT_MODE_APPLIES']) {
+ $this->strict_mode = ($mode) ? true : false;
+ }
+ }
+
+ /**
+ * Disables all highlighting
+ *
+ * @since 1.0.0
+ * @todo Rewrite with an array traversal
+ */
+ function disable_highlighting() {
+ foreach ($this->lexic_permissions as $key => $value) {
+ if (is_array($value)) {
+ foreach ($value as $k => $v) {
+ $this->lexic_permissions[$key][$k] = false;
+ }
+ }
+ else {
+ $this->lexic_permissions[$key] = false;
+ }
+ }
+ // Context blocks
+ $this->enable_important_blocks = false;
+ }
+
+ /**
+ * Enables all highlighting
+ *
+ * @since 1.0.0
+ * @todo Rewrite with array traversal
+ */
+ function enable_highlighting() {
+ foreach ($this->lexic_permissions as $key => $value) {
+ if (is_array($value)) {
+ foreach ($value as $k => $v) {
+ $this->lexic_permissions[$key][$k] = true;
+ }
+ }
+ else {
+ $this->lexic_permissions[$key] = true;
+ }
+ }
+ // Context blocks
+ $this->enable_important_blocks = true;
+ }
+
+ /**
+ * Given a file extension, this method returns either a valid geshi language
+ * name, or the empty string if it couldn't be found
+ *
+ * @param string The extension to get a language name for
+ * @param array A lookup array to use instead of the default
+ * @since 1.0.5
+ * @todo Re-think about how this method works (maybe make it private and/or make it
+ * a extension->lang lookup?)
+ * @todo static?
+ */
+ function get_language_name_from_extension( $extension, $lookup = array() ) {
+ if ( !$lookup ) {
+ $lookup = array(
+ 'actionscript' => array('as'),
+ 'ada' => array('a', 'ada', 'adb', 'ads'),
+ 'apache' => array('conf'),
+ 'asm' => array('ash', 'asm'),
+ 'asp' => array('asp'),
+ 'bash' => array('sh'),
+ 'c' => array('c', 'h'),
+ 'c_mac' => array('c', 'h'),
+ 'caddcl' => array(),
+ 'cadlisp' => array(),
+ 'cdfg' => array('cdfg'),
+ 'cpp' => array('cpp', 'h', 'hpp'),
+ 'csharp' => array(),
+ 'css' => array('css'),
+ 'delphi' => array('dpk', 'dpr'),
+ 'html4strict' => array('html', 'htm'),
+ 'java' => array('java'),
+ 'javascript' => array('js'),
+ 'lisp' => array('lisp'),
+ 'lua' => array('lua'),
+ 'mpasm' => array(),
+ 'nsis' => array(),
+ 'objc' => array(),
+ 'oobas' => array(),
+ 'oracle8' => array(),
+ 'pascal' => array('pas'),
+ 'perl' => array('pl', 'pm'),
+ 'php' => array('php', 'php5', 'phtml', 'phps'),
+ 'python' => array('py'),
+ 'qbasic' => array('bi'),
+ 'sas' => array('sas'),
+ 'smarty' => array(),
+ 'vb' => array('bas'),
+ 'vbnet' => array(),
+ 'visualfoxpro' => array(),
+ 'xml' => array('xml')
+ );
+ }
+
+ foreach ($lookup as $lang => $extensions) {
+ foreach ($extensions as $ext) {
+ if ($ext == $extension) {
+ return $lang;
+ }
+ }
+ }
+ return '';
+ }
+
+ /**
+ * Given a file name, this method loads its contents in, and attempts
+ * to set the language automatically. An optional lookup table can be
+ * passed for looking up the language name. If not specified a default
+ * table is used
+ *
+ * The language table is in the form
+ * <pre>array(
+ * 'lang_name' => array('extension', 'extension', ...),
+ * 'lang_name' ...
+ * );</pre>
+ *
+ * @todo Complete rethink of this and above method
+ * @since 1.0.5
+ */
+ function load_from_file($file_name, $lookup = array()) {
+ if (is_readable($file_name)) {
+ $this->set_source(implode('', file($file_name)));
+ $this->set_language($this->get_language_name_from_extension(substr(strrchr($file_name, '.'), 1), $lookup));
+ }
+ else {
+ $this->error = GESHI_ERROR_FILE_NOT_READABLE;
+ }
+ }
+
+ /**
+ * Adds a keyword to a keyword group for highlighting
+ *
+ * @param int The key of the keyword group to add the keyword to
+ * @param string The word to add to the keyword group
+ * @since 1.0.0
+ */
+ function add_keyword($key, $word) {
+ $this->language_data['KEYWORDS'][$key][] = $word;
+ }
+
+ /**
+ * Removes a keyword from a keyword group
+ *
+ * @param int The key of the keyword group to remove the keyword from
+ * @param string The word to remove from the keyword group
+ * @since 1.0.0
+ */
+ function remove_keyword($key, $word) {
+ $this->language_data['KEYWORDS'][$key] =
+ array_diff($this->language_data['KEYWORDS'][$key], array($word));
+ }
+
+ /**
+ * Creates a new keyword group
+ *
+ * @param int The key of the keyword group to create
+ * @param string The styles for the keyword group
+ * @param boolean Whether the keyword group is case sensitive ornot
+ * @param array The words to use for the keyword group
+ * @since 1.0.0
+ */
+ function add_keyword_group($key, $styles, $case_sensitive = true, $words = array()) {
+ $words = (array) $words;
+ $this->language_data['KEYWORDS'][$key] = $words;
+ $this->lexic_permissions['KEYWORDS'][$key] = true;
+ $this->language_data['CASE_SENSITIVE'][$key] = $case_sensitive;
+ $this->language_data['STYLES']['KEYWORDS'][$key] = $styles;
+ }
+
+ /**
+ * Removes a keyword group
+ *
+ * @param int The key of the keyword group to remove
+ * @since 1.0.0
+ */
+ function remove_keyword_group ($key) {
+ unset($this->language_data['KEYWORDS'][$key]);
+ unset($this->lexic_permissions['KEYWORDS'][$key]);
+ unset($this->language_data['CASE_SENSITIVE'][$key]);
+ unset($this->language_data['STYLES']['KEYWORDS'][$key]);
+ }
+
+ /**
+ * Sets the content of the header block
+ *
+ * @param string The content of the header block
+ * @since 1.0.2
+ */
+ function set_header_content($content) {
+ $this->header_content = $content;
+ }
+
+ /**
+ * Sets the content of the footer block
+ *
+ * @param string The content of the footer block
+ * @since 1.0.2
+ */
+ function set_footer_content($content) {
+ $this->footer_content = $content;
+ }
+
+ /**
+ * Sets the style for the header content
+ *
+ * @param string The style for the header content
+ * @since 1.0.2
+ */
+ function set_header_content_style($style) {
+ $this->header_content_style = $style;
+ }
+
+ /**
+ * Sets the style for the footer content
+ *
+ * @param string The style for the footer content
+ * @since 1.0.2
+ */
+ function set_footer_content_style($style) {
+ $this->footer_content_style = $style;
+ }
+
+ /**
+ * Sets whether to force a surrounding block around
+ * the highlighted code or not
+ *
+ * @param boolean Tells whether to enable or disable this feature
+ * @since 1.0.7.20
+ */
+ function enable_inner_code_block($flag) {
+ $this->force_code_block = (bool)$flag;
+ }
+
+ /**
+ * Sets the base URL to be used for keywords
+ *
+ * @param int The key of the keyword group to set the URL for
+ * @param string The URL to set for the group. If {FNAME} is in
+ * the url somewhere, it is replaced by the keyword
+ * that the URL is being made for
+ * @since 1.0.2
+ */
+ function set_url_for_keyword_group($group, $url) {
+ $this->language_data['URLS'][$group] = $url;
+ }
+
+ /**
+ * Sets styles for links in code
+ *
+ * @param int A constant that specifies what state the style is being
+ * set for - e.g. :hover or :visited
+ * @param string The styles to use for that state
+ * @since 1.0.2
+ */
+ function set_link_styles($type, $styles) {
+ $this->link_styles[$type] = $styles;
+ }
+
+ /**
+ * Sets the target for links in code
+ *
+ * @param string The target for links in the code, e.g. _blank
+ * @since 1.0.3
+ */
+ function set_link_target($target) {
+ if (!$target) {
+ $this->link_target = '';
+ }
+ else {
+ $this->link_target = ' target="' . $target . '" ';
+ }
+ }
+
+ /**
+ * Sets styles for important parts of the code
+ *
+ * @param string The styles to use on important parts of the code
+ * @since 1.0.2
+ */
+ function set_important_styles($styles) {
+ $this->important_styles = $styles;
+ }
+
+ /**
+ * Sets whether context-important blocks are highlighted
+ *
+ * @todo REMOVE THIS SHIZ FROM GESHI!
+ * @deprecated
+ */
+ function enable_important_blocks($flag) {
+ $this->enable_important_blocks = ( $flag ) ? true : false;
+ }
+
+ /**
+ * Whether CSS IDs should be added to each line
+ *
+ * @param boolean If true, IDs will be added to each line.
+ * @since 1.0.2
+ */
+ function enable_ids($flag = true) {
+ $this->add_ids = ($flag) ? true : false;
+ }
+
+ /**
+ * Specifies which lines to highlight extra
+ *
+ * @param mixed An array of line numbers to highlight, or just a line
+ * number on its own.
+ * @since 1.0.2
+ * @todo Some data replication here that could be cut down on
+ */
+ function highlight_lines_extra($lines) {
+ if (is_array($lines)) {
+ foreach ($lines as $line) {
+ $this->highlight_extra_lines[intval($line)] = intval($line);
+ }
+ }
+ else {
+ $this->highlight_extra_lines[intval($lines)] = intval($lines);
+ }
+ }
+
+ /**
+ * Sets the style for extra-highlighted lines
+ *
+ * @param string The style for extra-highlighted lines
+ * @since 1.0.2
+ */
+ function set_highlight_lines_extra_style($styles) {
+ $this->highlight_extra_lines_style = $styles;
+ }
+
+ /**
+ * Sets the line-ending
+ *
+ * @param string The new line-ending
+ */
+ function set_line_ending($line_ending) {
+ $this->line_ending = (string)$line_ending;
+ }
+
+ /**
+ * Sets what number line numbers should start at. Should
+ * be a positive integer, and will be converted to one.
+ *
+ * <b>Warning:</b> Using this method will add the "start"
+ * attribute to the &lt;ol&gt; that is used for line numbering.
+ * This is <b>not</b> valid XHTML strict, so if that's what you
+ * care about then don't use this method. Firefox is getting
+ * support for the CSS method of doing this in 1.1 and Opera
+ * has support for the CSS method, but (of course) IE doesn't
+ * so it's not worth doing it the CSS way yet.
+ *
+ * @param int The number to start line numbers at
+ * @since 1.0.2
+ */
+ function start_line_numbers_at($number) {
+ $this->line_numbers_start = abs(intval($number));
+ }
+
+ /**
+ * Sets the encoding used for htmlspecialchars(), for international
+ * support.
+ *
+ * NOTE: This is not needed for now because htmlspecialchars() is not
+ * being used (it has a security hole in PHP4 that has not been patched).
+ * Maybe in a future version it may make a return for speed reasons, but
+ * I doubt it.
+ *
+ * @param string The encoding to use for the source
+ * @since 1.0.3
+ */
+ function set_encoding($encoding) {
+ if ($encoding) {
+ $this->encoding = $encoding;
+ }
+ }
+
+ /**
+ * Turns linking of keywords on or off.
+ *
+ * @param boolean If true, links will be added to keywords
+ */
+ function enable_keyword_links($enable = true) {
+ $this->keyword_links = ($enable) ? true : false;
+ }
+
+ /**
+ * Returns the code in $this->source, highlighted and surrounded by the
+ * nessecary HTML.
+ *
+ * This should only be called ONCE, cos it's SLOW! If you want to highlight
+ * the same source multiple times, you're better off doing a whole lot of
+ * str_replaces to replace the &lt;span&gt;s
+ *
+ * @since 1.0.0
+ */
+ function parse_code () {
+ // Start the timer
+ $start_time = microtime();
+
+ // Firstly, if there is an error, we won't highlight
+ if ($this->error) {
+ $result = GeSHi::hsc($this->source);
+ // Timing is irrelevant
+ $this->set_time($start_time, $start_time);
+ return $this->finalise($result);
+ }
+
+ // Replace all newlines to a common form.
+ $code = str_replace("\r\n", "\n", $this->source);
+ $code = str_replace("\r", "\n", $code);
+ // Add spaces for regular expression matching and line numbers
+ $code = "\n" . $code . "\n";
+
+ // Initialise various stuff
+ $length = strlen($code);
+ $STRING_OPEN = '';
+ $CLOSE_STRING = false;
+ $ESCAPE_CHAR_OPEN = false;
+ $COMMENT_MATCHED = false;
+ // Turn highlighting on if strict mode doesn't apply to this language
+ $HIGHLIGHTING_ON = ( !$this->strict_mode ) ? true : '';
+ // Whether to highlight inside a block of code
+ $HIGHLIGHT_INSIDE_STRICT = false;
+ $HARDQUOTE_OPEN = false;
+ $STRICTATTRS = '';
+ $stuff_to_parse = '';
+ $result = '';
+
+ // "Important" selections are handled like multiline comments
+ // @todo GET RID OF THIS SHIZ
+ if ($this->enable_important_blocks) {
+ $this->language_data['COMMENT_MULTI'][GESHI_START_IMPORTANT] = GESHI_END_IMPORTANT;
+ }
+
+ if ($this->strict_mode) {
+ // Break the source into bits. Each bit will be a portion of the code
+ // within script delimiters - for example, HTML between < and >
+ $parts = array(0 => array(0 => ''));
+ $k = 0;
+ for ($i = 0; $i < $length; $i++) {
+ $char = substr($code, $i, 1);
+ if (!$HIGHLIGHTING_ON) {
+ foreach ($this->language_data['SCRIPT_DELIMITERS'] as $key => $delimiters) {
+ foreach ($delimiters as $open => $close) {
+ // Get the next little bit for this opening string
+ $check = substr($code, $i, strlen($open));
+ // If it matches...
+ if ($check == $open) {
+ // We start a new block with the highlightable
+ // code in it
+ $HIGHLIGHTING_ON = $open;
+ $i += strlen($open) - 1;
+ $char = $open;
+ $parts[++$k][0] = $char;
+
+ // No point going around again...
+ break(2);
+ }
+ }
+ }
+ }
+ else {
+ foreach ($this->language_data['SCRIPT_DELIMITERS'] as $key => $delimiters) {
+ foreach ($delimiters as $open => $close) {
+ if ($open == $HIGHLIGHTING_ON) {
+ // Found the closing tag
+ break(2);
+ }
+ }
+ }
+ // We check code from our current position BACKWARDS. This is so
+ // the ending string for highlighting can be included in the block
+ $check = substr($code, $i - strlen($close) + 1, strlen($close));
+ if ($check == $close) {
+ $HIGHLIGHTING_ON = '';
+ // Add the string to the rest of the string for this part
+ $parts[$k][1] = ( isset($parts[$k][1]) ) ? $parts[$k][1] . $char : $char;
+ $parts[++$k][0] = '';
+ $char = '';
+ }
+ }
+ $parts[$k][1] = ( isset($parts[$k][1]) ) ? $parts[$k][1] . $char : $char;
+ }
+ $HIGHLIGHTING_ON = '';
+ }
+ else {
+ // Not strict mode - simply dump the source into
+ // the array at index 1 (the first highlightable block)
+ $parts = array(
+ 1 => array(
+ 0 => '',
+ 1 => $code
+ )
+ );
+ }
+
+ // Now we go through each part. We know that even-indexed parts are
+ // code that shouldn't be highlighted, and odd-indexed parts should
+ // be highlighted
+ foreach ($parts as $key => $data) {
+ $part = $data[1];
+ // If this block should be highlighted...
+ if ($key % 2) {
+ if ($this->strict_mode) {
+ // Find the class key for this block of code
+ foreach ($this->language_data['SCRIPT_DELIMITERS'] as $script_key => $script_data) {
+ foreach ($script_data as $open => $close) {
+ if ($data[0] == $open) {
+ break(2);
+ }
+ }
+ }
+
+ if ($this->language_data['STYLES']['SCRIPT'][$script_key] != '' &&
+ $this->lexic_permissions['SCRIPT']) {
+ // Add a span element around the source to
+ // highlight the overall source block
+ if (!$this->use_classes &&
+ $this->language_data['STYLES']['SCRIPT'][$script_key] != '') {
+ $attributes = ' style="' . $this->language_data['STYLES']['SCRIPT'][$script_key] . '"';
+ }
+ else {
+ $attributes = ' class="sc' . $script_key . '"';
+ }
+ $result .= "<span$attributes>";
+ $STRICTATTRS = $attributes;
+ }
+ }
+
+ if (!$this->strict_mode || $this->language_data['HIGHLIGHT_STRICT_BLOCK'][$script_key]) {
+ // Now, highlight the code in this block. This code
+ // is really the engine of GeSHi (along with the method
+ // parse_non_string_part).
+ $length = strlen($part);
+ for ($i = 0; $i < $length; $i++) {
+ // Get the next char
+ $char = substr($part, $i, 1);
+ $hq = isset($this->language_data['HARDQUOTE']) ? $this->language_data['HARDQUOTE'][0] : false;
+ // Is this char the newline and line numbers being used?
+ if (($this->line_numbers != GESHI_NO_LINE_NUMBERS
+ || count($this->highlight_extra_lines) > 0)
+ && $char == "\n") {
+ // If so, is there a string open? If there is, we should end it before
+ // the newline and begin it again (so when <li>s are put in the source
+ // remains XHTML compliant)
+ // note to self: This opens up possibility of config files specifying
+ // that languages can/cannot have multiline strings???
+ if ($STRING_OPEN) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['STRINGS'][0] . '"';
+ }
+ else {
+ $attributes = ' class="st0"';
+ }
+ $char = '</span>' . $char . "<span$attributes>";
+ }
+ }
+ else if ($char == $STRING_OPEN) {
+ // A match of a string delimiter
+ if (($this->lexic_permissions['ESCAPE_CHAR'] && $ESCAPE_CHAR_OPEN) ||
+ ($this->lexic_permissions['STRINGS'] && !$ESCAPE_CHAR_OPEN)) {
+ $char = GeSHi::hsc($char) . '</span>';
+ }
+ $escape_me = false;
+ if ($HARDQUOTE_OPEN) {
+ if ($ESCAPE_CHAR_OPEN) {
+ $escape_me = true;
+ }
+ else {
+ foreach ($this->language_data['HARDESCAPE'] as $hardesc) {
+ if (substr($part, $i, strlen($hardesc)) == $hardesc) {
+ $escape_me = true;
+ break;
+ }
+ }
+ }
+ }
+
+ if (!$ESCAPE_CHAR_OPEN) {
+ $STRING_OPEN = '';
+ $CLOSE_STRING = true;
+ }
+ if (!$escape_me) {
+ $HARDQUOTE_OPEN = false;
+ }
+ $ESCAPE_CHAR_OPEN = false;
+ }
+ else if (in_array($char, $this->language_data['QUOTEMARKS']) &&
+ ($STRING_OPEN == '') && $this->lexic_permissions['STRINGS']) {
+ // The start of a new string
+ $STRING_OPEN = $char;
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['STRINGS'][0] . '"';
+ }
+ else {
+ $attributes = ' class="st0"';
+ }
+ $char = "<span$attributes>" . GeSHi::hsc($char);
+
+ $result .= $this->parse_non_string_part( $stuff_to_parse );
+ $stuff_to_parse = '';
+ }
+ else if ($hq && substr($part, $i, strlen($hq)) == $hq &&
+ ($STRING_OPEN == '') && $this->lexic_permissions['STRINGS']) {
+ // The start of a hard quoted string
+ $STRING_OPEN = $this->language_data['HARDQUOTE'][1];
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['STRINGS'][0] . '"';
+ }
+ else {
+ $attributes = ' class="st0"';
+ }
+ $char = "<span$attributes>" . $hq;
+ $i += strlen($hq) - 1;
+ $HARDQUOTE_OPEN = true;
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+ }
+ else if ($char == $this->language_data['ESCAPE_CHAR'] && $STRING_OPEN != '') {
+ // An escape character
+ if (!$ESCAPE_CHAR_OPEN) {
+ $ESCAPE_CHAR_OPEN = !$HARDQUOTE_OPEN; // true unless $HARDQUOTE_OPEN
+ if ($HARDQUOTE_OPEN) {
+ foreach ($this->language_data['HARDESCAPE'] as $hard) {
+ if (substr($part, $i, strlen($hard)) == $hard) {
+ $ESCAPE_CHAR_OPEN = true;
+ break;
+ }
+ }
+ }
+ if ($ESCAPE_CHAR_OPEN && $this->lexic_permissions['ESCAPE_CHAR']) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['ESCAPE_CHAR'][0] . '"';
+ }
+ else {
+ $attributes = ' class="es0"';
+ }
+ $char = "<span$attributes>" . $char;
+ if (substr($code, $i + 1, 1) == "\n") {
+ // escaping a newline, what's the point in putting the span around
+ // the newline? It only causes hassles when inserting line numbers
+ $char .= '</span>';
+ $ESCAPE_CHAR_OPEN = false;
+ }
+ }
+ }
+ else {
+ $ESCAPE_CHAR_OPEN = false;
+ if ($this->lexic_permissions['ESCAPE_CHAR']) {
+ $char .= '</span>';
+ }
+ }
+ }
+ else if ($ESCAPE_CHAR_OPEN) {
+ if ($this->lexic_permissions['ESCAPE_CHAR']) {
+ $char .= '</span>';
+ }
+ $ESCAPE_CHAR_OPEN = false;
+ $test_str = $char;
+ }
+ else if ($STRING_OPEN == '') {
+ // Is this a multiline comment?
+ foreach ($this->language_data['COMMENT_MULTI'] as $open => $close) {
+ $com_len = strlen($open);
+ $test_str = substr( $part, $i, $com_len );
+ $test_str_match = $test_str;
+ if ($open == $test_str) {
+ $COMMENT_MATCHED = true;
+ //@todo If remove important do remove here
+ if ($this->lexic_permissions['COMMENTS']['MULTI'] ||
+ $test_str == GESHI_START_IMPORTANT) {
+ if ($test_str != GESHI_START_IMPORTANT) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['COMMENTS']['MULTI'] . '"';
+ }
+ else {
+ $attributes = ' class="coMULTI"';
+ }
+ $test_str = "<span$attributes>" . GeSHi::hsc($test_str);
+ }
+ else {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->important_styles . '"';
+ }
+ else {
+ $attributes = ' class="imp"';
+ }
+ // We don't include the start of the comment if it's an
+ // "important" part
+ $test_str = "<span$attributes>";
+ }
+ }
+ else {
+ $test_str = GeSHi::hsc($test_str);
+ }
+
+ $close_pos = strpos( $part, $close, $i + strlen($close) );
+
+ $oops = false;
+ if ($close_pos === false) {
+ $close_pos = strlen($part);
+ $oops = true;
+ }
+ else {
+ $close_pos -= ($com_len - strlen($close));
+ }
+
+ // Short-cut through all the multiline code
+ $rest_of_comment = GeSHi::hsc(substr($part, $i + $com_len, $close_pos - $i));
+ if (($this->lexic_permissions['COMMENTS']['MULTI'] ||
+ $test_str_match == GESHI_START_IMPORTANT) &&
+ ($this->line_numbers != GESHI_NO_LINE_NUMBERS ||
+ count($this->highlight_extra_lines) > 0)) {
+ // strreplace to put close span and open span around multiline newlines
+ $test_str .= str_replace(
+ "\n", "</span>\n<span$attributes>",
+ str_replace("\n ", "\n&nbsp;", $rest_of_comment)
+ );
+ }
+ else {
+ $test_str .= $rest_of_comment;
+ }
+
+ if ($this->lexic_permissions['COMMENTS']['MULTI'] ||
+ $test_str_match == GESHI_START_IMPORTANT) {
+ $test_str .= '</span>';
+ if ($oops) {
+ $test_str .= "\n";
+ }
+ }
+ $i = $close_pos + $com_len - 1;
+ // parse the rest
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+ break;
+ }
+ }
+ // If we haven't matched a multiline comment, try single-line comments
+ if (!$COMMENT_MATCHED) {
+ foreach ($this->language_data['COMMENT_SINGLE'] as $comment_key => $comment_mark) {
+ $com_len = strlen($comment_mark);
+ $test_str = substr($part, $i, $com_len);
+ if ($this->language_data['CASE_SENSITIVE'][GESHI_COMMENTS]) {
+ $match = ($comment_mark == $test_str);
+ }
+ else {
+ $match = (strtolower($comment_mark) == strtolower($test_str));
+ }
+ if ($match) {
+ $COMMENT_MATCHED = true;
+ if ($this->lexic_permissions['COMMENTS'][$comment_key]) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['COMMENTS'][$comment_key] . '"';
+ }
+ else {
+ $attributes = ' class="co' . $comment_key . '"';
+ }
+ $test_str = "<span$attributes>" . GeSHi::hsc($this->change_case($test_str));
+ }
+ else {
+ $test_str = GeSHi::hsc($test_str);
+ }
+ $close_pos = strpos($part, "\n", $i);
+ $oops = false;
+ if ($close_pos === false) {
+ $close_pos = strlen($part);
+ $oops = true;
+ }
+ $test_str .= GeSHi::hsc(substr($part, $i + $com_len, $close_pos - $i - $com_len));
+ if ($this->lexic_permissions['COMMENTS'][$comment_key]) {
+ $test_str .= "</span>";
+ }
+ // Take into account that the comment might be the last in the source
+ if (!$oops) {
+ $test_str .= "\n";
+ }
+ $i = $close_pos;
+ // parse the rest
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+ break;
+ }
+ }
+ }
+ }
+ else if ($STRING_OPEN != '') {
+ // Otherwise, convert it to HTML form
+ if (strtolower($this->encoding) == 'utf-8') {
+ //only escape <128 (we don't want to break multibyte chars)
+ if (ord($char) < 128) {
+ $char = GeSHi::hsc($char);
+ }
+ }
+ else {
+ //encode everthing
+ $char = GeSHi::hsc($char);
+ }
+ }
+ // Where are we adding this char?
+ if (!$COMMENT_MATCHED) {
+ if (($STRING_OPEN == '') && !$CLOSE_STRING) {
+ $stuff_to_parse .= $char;
+ }
+ else {
+ $result .= $char;
+ $CLOSE_STRING = false;
+ }
+ }
+ else {
+ $result .= $test_str;
+ $COMMENT_MATCHED = false;
+ }
+ }
+ // Parse the last bit
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+ }
+ else {
+ if ($STRICTATTRS != '') {
+ $part = str_replace("\n", "</span>\n<span$STRICTATTRS>", GeSHi::hsc($part));
+ $STRICTATTRS = '';
+ }
+ $result .= $part;
+ }
+ // Close the <span> that surrounds the block
+ if ($this->strict_mode && $this->language_data['STYLES']['SCRIPT'][$script_key] != '' &&
+ $this->lexic_permissions['SCRIPT']) {
+ $result .= '</span>';
+ }
+ }
+ else {
+ // Else not a block to highlight
+ $result .= GeSHi::hsc($part);
+ }
+ }
+
+ // Parse the last stuff (redundant?)
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+
+ // Lop off the very first and last spaces
+ $result = substr($result, 1, -1);
+
+ // Are we still in a string?
+ if ($STRING_OPEN) {
+ $result .= '</span>';
+ }
+
+ // We're finished: stop timing
+ $this->set_time($start_time, microtime());
+
+ return $this->finalise($result);
+ }
+
+ /**
+ * Swaps out spaces and tabs for HTML indentation. Not needed if
+ * the code is in a pre block...
+ *
+ * @param string The source to indent
+ * @return string The source with HTML indenting applied
+ * @since 1.0.0
+ * @access private
+ */
+ function indent($result) {
+ /// Replace tabs with the correct number of spaces
+ if (false !== strpos($result, "\t")) {
+ $lines = explode("\n", $result);
+ $tab_width = $this->get_real_tab_width();
+ foreach ($lines as $key => $line) {
+ if (false === strpos($line, "\t")) {
+ $lines[$key] = $line;
+ continue;
+ }
+
+ $pos = 0;
+ $length = strlen($line);
+ $result_line = '';
+
+ $IN_TAG = false;
+ for ($i = 0; $i < $length; $i++) {
+ $char = substr($line, $i, 1);
+ // Simple engine to work out whether we're in a tag.
+ // If we are we modify $pos. This is so we ignore HTML
+ // in the line and only workout the tab replacement
+ // via the actual content of the string
+ // This test could be improved to include strings in the
+ // html so that < or > would be allowed in user's styles
+ // (e.g. quotes: '<' '>'; or similar)
+ if ($IN_TAG && '>' == $char) {
+ $IN_TAG = false;
+ $result_line .= '>';
+ ++$pos;
+ }
+ else if (!$IN_TAG && '<' == $char) {
+ $IN_TAG = true;
+ $result_line .= '<';
+ ++$pos;
+ }
+ else if (!$IN_TAG && '&' == $char) {
+ $substr = substr($line, $i + 3, 4);
+ //$substr_5 = substr($line, 5, 1);
+ $posi = strpos($substr, ';');
+ if (false !== $posi) {
+ $pos += $posi + 3;
+ }
+ $result_line .= '&';
+ }
+ else if (!$IN_TAG && "\t" == $char) {
+ $str = '';
+ // OPTIMISE - move $strs out. Make an array:
+ // $tabs = array(
+ // 1 => '&nbsp;',
+ // 2 => '&nbsp; ',
+ // 3 => '&nbsp; &nbsp;' etc etc
+ // to use instead of building a string every time
+ $strs = array(0 => '&nbsp;', 1 => ' ');
+ for ($k = 0; $k < ($tab_width - (($i - $pos) % $tab_width)); $k++) $str .= $strs[$k % 2];
+ $result_line .= $str;
+ $pos += ($i - $pos) % $tab_width + 1;
+
+ if (false === strpos($line, "\t", $i + 1)) {
+ $result_line .= substr($line, $i + 1);
+ break;
+ }
+ }
+ else if ($IN_TAG) {
+ ++$pos;
+ $result_line .= $char;
+ }
+ else {
+ $result_line .= $char;
+ //++$pos;
+ }
+ }
+ $lines[$key] = $result_line;
+ }
+ $result = implode("\n", $lines);
+ }
+ // Other whitespace
+ // BenBE: Fix to reduce the number of replacements to be done
+ $result = str_replace("\n ", "\n&nbsp;", $result);
+ $result = str_replace(' ', ' &nbsp;', $result);
+
+ if ($this->line_numbers == GESHI_NO_LINE_NUMBERS) {
+ if ($this->line_ending === null) {
+ $result = nl2br($result);
+ } else {
+ $result = str_replace("\n", $this->line_ending, $result);
+ }
+ }
+ return $result;
+ }
+
+ /**
+ * Changes the case of a keyword for those languages where a change is asked for
+ *
+ * @param string The keyword to change the case of
+ * @return string The keyword with its case changed
+ * @since 1.0.0
+ * @access private
+ */
+ function change_case($instr) {
+ if ($this->language_data['CASE_KEYWORDS'] == GESHI_CAPS_UPPER) {
+ return strtoupper($instr);
+ }
+ else if ($this->language_data['CASE_KEYWORDS'] == GESHI_CAPS_LOWER) {
+ return strtolower($instr);
+ }
+ return $instr;
+ }
+
+ /**
+ * Adds a url to a keyword where needed.
+ *
+ * @param string The keyword to add the URL HTML to
+ * @param int What group the keyword is from
+ * @param boolean Whether to get the HTML for the start or end
+ * @return The HTML for either the start or end of the HTML &lt;a&gt; tag
+ * @since 1.0.2
+ * @access private
+ * @todo Get rid of ender
+ */
+ function add_url_to_keyword($keyword, $group, $start_or_end) {
+ if (!$this->keyword_links) {
+ // Keyword links have been disabled
+ return;
+ }
+
+ if (isset($this->language_data['URLS'][$group]) &&
+ $this->language_data['URLS'][$group] != '' &&
+ substr($keyword, 0, 5) != '&lt;/') {
+ // There is a base group for this keyword
+ if ($start_or_end == 'BEGIN') {
+ // HTML workaround... not good form (tm) but should work for 1.0.X
+ if ($keyword != '') {
+ // Old system: strtolower
+ //$keyword = ( $this->language_data['CASE_SENSITIVE'][$group] ) ? $keyword : strtolower($keyword);
+ // New system: get keyword from language file to get correct case
+ foreach ($this->language_data['KEYWORDS'][$group] as $word) {
+ if (strtolower($word) == strtolower($keyword)) {
+ break;
+ }
+ }
+ $word = ( substr($word, 0, 4) == '&lt;' ) ? substr($word, 4) : $word;
+ $word = ( substr($word, -4) == '&gt;' ) ? substr($word, 0, strlen($word) - 4) : $word;
+ if (!$word) return '';
+
+ return '<|UR1|"' .
+ str_replace(
+ array('{FNAME}', '.'),
+ array(GeSHi::hsc($word), '<DOT>'),
+ $this->language_data['URLS'][$group]
+ ) . '">';
+ }
+ return '';
+ // HTML fix. Again, dirty hackage...
+ }
+ else if (!($this->language == 'html4strict' && ('&gt;' == $keyword || '&lt;' == $keyword))) {
+ return '</a>';
+ }
+ }
+ }
+
+ /**
+ * Takes a string that has no strings or comments in it, and highlights
+ * stuff like keywords, numbers and methods.
+ *
+ * @param string The string to parse for keyword, numbers etc.
+ * @since 1.0.0
+ * @access private
+ * @todo BUGGY! Why? Why not build string and return?
+ */
+ function parse_non_string_part(&$stuff_to_parse) {
+ $stuff_to_parse = ' ' . GeSHi::hsc($stuff_to_parse);
+ $stuff_to_parse_pregquote = preg_quote($stuff_to_parse, '/');
+ $func = '$this->change_case';
+ $func2 = '$this->add_url_to_keyword';
+
+ //
+ // Regular expressions
+ //
+ foreach ($this->language_data['REGEXPS'] as $key => $regexp) {
+ if ($this->lexic_permissions['REGEXPS'][$key]) {
+ if (is_array($regexp)) {
+ $stuff_to_parse = preg_replace(
+ "/" .
+ str_replace('/', '\/', $regexp[GESHI_SEARCH]) .
+ "/{$regexp[GESHI_MODIFIERS]}",
+ "{$regexp[GESHI_BEFORE]}<|!REG3XP$key!>{$regexp[GESHI_REPLACE]}|>{$regexp[GESHI_AFTER]}",
+ $stuff_to_parse
+ );
+ }
+ else {
+ $stuff_to_parse = preg_replace( "/(" . str_replace('/', '\/', $regexp) . ")/", "<|!REG3XP$key!>\\1|>", $stuff_to_parse);
+ }
+ }
+ }
+
+ //
+ // Highlight numbers. This regexp sucks... anyone with a regexp that WORKS
+ // here wins a cookie if they send it to me. At the moment there's two doing
+ // almost exactly the same thing, except the second one prevents a number
+ // being highlighted twice (eg <span...><span...>5</span></span>)
+ // Put /NUM!/ in for the styles, which gets replaced at the end.
+ //
+ // NEW ONE: Brice Bernard
+ //
+ if ($this->lexic_permissions['NUMBERS'] && preg_match('#[0-9]#', $stuff_to_parse )) {
+ $stuff_to_parse = preg_replace('/([-+]?\\b(?:[0-9]*\\.)?[0-9]+\\b)/', '<|/NUM!/>\\1|>', $stuff_to_parse);
+ }
+
+ // Highlight keywords
+ // if there is a couple of alpha symbols there *might* be a keyword
+ if (preg_match('#[a-zA-Z]{2,}#', $stuff_to_parse)) {
+ foreach ($this->language_data['KEYWORDS'] as $k => $keywordset) {
+ if ($this->lexic_permissions['KEYWORDS'][$k]) {
+ foreach ($keywordset as $keyword) {
+ $keyword = preg_quote($keyword, '/');
+ //
+ // This replacement checks the word is on it's own (except if brackets etc
+ // are next to it), then highlights it. We don't put the color=" for the span
+ // in just yet - otherwise languages with the keywords "color" or "or" have
+ // a fit.
+ //
+ if (false !== stristr($stuff_to_parse_pregquote, $keyword )) {
+ $stuff_to_parse .= ' ';
+ // Might make a more unique string for putting the number in soon
+ // Basically, we don't put the styles in yet because then the styles themselves will
+ // get highlighted if the language has a CSS keyword in it (like CSS, for example ;))
+ $styles = "/$k/";
+ if ($this->language_data['CASE_SENSITIVE'][$k]) {
+ $stuff_to_parse = preg_replace(
+ "/([^a-zA-Z0-9\$_\|\#;>|^])($keyword)(?=[^a-zA-Z0-9_<\|%\-&])/e",
+ "'\\1' . $func2('\\2', '$k', 'BEGIN') . '<|$styles>' . $func('\\2') . '|>' . $func2('\\2', '$k', 'END')",
+ $stuff_to_parse
+ );
+ }
+ else {
+ // Change the case of the word.
+ // hackage again... must... release... 1.2...
+ if ('smarty' == $this->language) { $hackage = '\/'; } else { $hackage = ''; }
+ $stuff_to_parse = preg_replace(
+ "/([^a-zA-Z0-9\$_\|\#;>$hackage|^])($keyword)(?=[^a-zA-Z0-9_<\|%\-&])/ie",
+ "'\\1' . $func2('\\2', '$k', 'BEGIN') . '<|$styles>' . $func('\\2') . '|>' . $func2('\\2', '$k', 'END')",
+ $stuff_to_parse
+ );
+ }
+ $stuff_to_parse = substr($stuff_to_parse, 0, strlen($stuff_to_parse) - 1);
+ }
+ }
+ }
+ }
+ }
+
+ //
+ // Now that's all done, replace /[number]/ with the correct styles
+ //
+ foreach ($this->language_data['KEYWORDS'] as $k => $kws) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['KEYWORDS'][$k] . '"';
+ }
+ else {
+ $attributes = ' class="kw' . $k . '"';
+ }
+ $stuff_to_parse = str_replace("/$k/", $attributes, $stuff_to_parse);
+ }
+
+ // Put number styles in
+ if (!$this->use_classes && $this->lexic_permissions['NUMBERS']) {
+ $attributes = ' style="' . $this->language_data['STYLES']['NUMBERS'][0] . '"';
+ }
+ else {
+ $attributes = ' class="nu0"';
+ }
+ $stuff_to_parse = str_replace('/NUM!/', $attributes, $stuff_to_parse);
+
+ //
+ // Highlight methods and fields in objects
+ //
+ if ($this->lexic_permissions['METHODS'] && $this->language_data['OOLANG']) {
+ foreach ($this->language_data['OBJECT_SPLITTERS'] as $key => $splitter) {
+ if (false !== stristr($stuff_to_parse, $splitter)) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['METHODS'][$key] . '"';
+ }
+ else {
+ $attributes = ' class="me' . $key . '"';
+ }
+ $stuff_to_parse = preg_replace("/(" . preg_quote($this->language_data['OBJECT_SPLITTERS'][$key], 1) . "[\s]*)([a-zA-Z\*\(][a-zA-Z0-9_\*]*)/", "\\1<|$attributes>\\2|>", $stuff_to_parse);
+ }
+ }
+ }
+
+ //
+ // Highlight brackets. Yes, I've tried adding a semi-colon to this list.
+ // You try it, and see what happens ;)
+ // TODO: Fix lexic permissions not converting entities if shouldn't
+ // be highlighting regardless
+ //
+ if ($this->lexic_permissions['BRACKETS']) {
+ $code_entities_match = array('[', ']', '(', ')', '{', '}');
+ if (!$this->use_classes) {
+ $code_entities_replace = array(
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#91;|>',
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#93;|>',
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#40;|>',
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#41;|>',
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#123;|>',
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#125;|>',
+ );
+ }
+ else {
+ $code_entities_replace = array(
+ '<| class="br0">&#91;|>',
+ '<| class="br0">&#93;|>',
+ '<| class="br0">&#40;|>',
+ '<| class="br0">&#41;|>',
+ '<| class="br0">&#123;|>',
+ '<| class="br0">&#125;|>',
+ );
+ }
+ $stuff_to_parse = str_replace( $code_entities_match, $code_entities_replace, $stuff_to_parse );
+ }
+
+ //
+ // Add class/style for regexps
+ //
+ foreach ($this->language_data['REGEXPS'] as $key => $regexp) {
+ if ($this->lexic_permissions['REGEXPS'][$key]) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['REGEXPS'][$key] . '"';
+ }
+ else {
+ if(is_array($this->language_data['REGEXPS'][$key]) &&
+ array_key_exists(GESHI_CLASS, $this->language_data['REGEXPS'][$key])) {
+ $attributes = ' class="'
+ . $this->language_data['REGEXPS'][$key][GESHI_CLASS] . '"';
+ }
+ else {
+ $attributes = ' class="re' . $key . '"';
+ }
+ }
+ $stuff_to_parse = str_replace("!REG3XP$key!", "$attributes", $stuff_to_parse);
+ }
+ }
+
+ // Replace <DOT> with . for urls
+ $stuff_to_parse = str_replace('<DOT>', '.', $stuff_to_parse);
+ // Replace <|UR1| with <a href= for urls also
+ if (isset($this->link_styles[GESHI_LINK])) {
+ if ($this->use_classes) {
+ $stuff_to_parse = str_replace('<|UR1|', '<a' . $this->link_target . ' href=', $stuff_to_parse);
+ }
+ else {
+ $stuff_to_parse = str_replace('<|UR1|', '<a' . $this->link_target . ' style="' . $this->link_styles[GESHI_LINK] . '" href=', $stuff_to_parse);
+ }
+ }
+ else {
+ $stuff_to_parse = str_replace('<|UR1|', '<a' . $this->link_target . ' href=', $stuff_to_parse);
+ }
+
+ //
+ // NOW we add the span thingy ;)
+ //
+
+ $stuff_to_parse = str_replace('<|', '<span', $stuff_to_parse);
+ $stuff_to_parse = str_replace ( '|>', '</span>', $stuff_to_parse );
+
+ return substr($stuff_to_parse, 1);
+ }
+
+ /**
+ * Sets the time taken to parse the code
+ *
+ * @param microtime The time when parsing started
+ * @param microtime The time when parsing ended
+ * @since 1.0.2
+ * @access private
+ */
+ function set_time($start_time, $end_time) {
+ $start = explode(' ', $start_time);
+ $end = explode(' ', $end_time);
+ $this->time = $end[0] + $end[1] - $start[0] - $start[1];
+ }
+
+ /**
+ * Gets the time taken to parse the code
+ *
+ * @return double The time taken to parse the code
+ * @since 1.0.2
+ */
+ function get_time() {
+ return $this->time;
+ }
+
+ /**
+ * Gets language information and stores it for later use
+ *
+ * @access private
+ * @todo Needs to load keys for lexic permissions for keywords, regexps etc
+ */
+ function load_language($file_name) {
+ $this->enable_highlighting();
+ $language_data = array();
+ require $file_name;
+ // Perhaps some checking might be added here later to check that
+ // $language data is a valid thing but maybe not
+ $this->language_data = $language_data;
+ // Set strict mode if should be set
+ if ($this->language_data['STRICT_MODE_APPLIES'] == GESHI_ALWAYS) {
+ $this->strict_mode = true;
+ }
+ // Set permissions for all lexics to true
+ // so they'll be highlighted by default
+ foreach ($this->language_data['KEYWORDS'] as $key => $words) {
+ $this->lexic_permissions['KEYWORDS'][$key] = true;
+ }
+ foreach ($this->language_data['COMMENT_SINGLE'] as $key => $comment) {
+ $this->lexic_permissions['COMMENTS'][$key] = true;
+ }
+ foreach ($this->language_data['REGEXPS'] as $key => $regexp) {
+ $this->lexic_permissions['REGEXPS'][$key] = true;
+ }
+ // Set default class for CSS
+ $this->overall_class = $this->language;
+ }
+
+ /**
+ * Takes the parsed code and various options, and creates the HTML
+ * surrounding it to make it look nice.
+ *
+ * @param string The code already parsed
+ * @return string The code nicely finalised
+ * @since 1.0.0
+ * @access private
+ */
+ function finalise($parsed_code) {
+ // Remove end parts of important declarations
+ // This is BUGGY!! My fault for bad code: fix coming in 1.2
+ // @todo Remove this crap
+ if ($this->enable_important_blocks &&
+ (strstr($parsed_code, GeSHi::hsc(GESHI_START_IMPORTANT)) === false)) {
+ $parsed_code = str_replace(GeSHi::hsc(GESHI_END_IMPORTANT), '', $parsed_code);
+ }
+
+ // Add HTML whitespace stuff if we're using the <div> header
+ if ($this->header_type != GESHI_HEADER_PRE) {
+ $parsed_code = $this->indent($parsed_code);
+ }
+
+ // purge some unnecessary stuff
+ $parsed_code = preg_replace('#<span[^>]+>(\s*)</span>#', '\\1', $parsed_code);
+ $parsed_code = preg_replace('#<div[^>]+>(\s*)</div>#', '\\1', $parsed_code);
+
+ // If we are using IDs for line numbers, there needs to be an overall
+ // ID set to prevent collisions.
+ if ($this->add_ids && !$this->overall_id) {
+ $this->overall_id = 'geshi-' . substr(md5(microtime()), 0, 4);
+ }
+
+ // If we're using line numbers, we insert <li>s and appropriate
+ // markup to style them (otherwise we don't need to do anything)
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ // If we're using the <pre> header, we shouldn't add newlines because
+ // the <pre> will line-break them (and the <li>s already do this for us)
+ $ls = ($this->header_type != GESHI_HEADER_PRE) ? "\n" : '';
+ // Get code into lines
+ $code = explode("\n", $parsed_code);
+ // Set vars to defaults for following loop
+ $parsed_code = '';
+ $i = 0;
+ $attrs = array();
+
+ // Foreach line...
+ foreach ($code as $line) {
+ // Make lines have at least one space in them if they're empty
+ // BenBE: Checking emptiness using trim instead of relying on blanks
+ if ('' == trim($line)) {
+ $line = '&nbsp;';
+ }
+ // If this is a "special line"...
+ if ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS &&
+ $i % $this->line_nth_row == ($this->line_nth_row - 1)) {
+ // Set the attributes to style the line
+ if ($this->use_classes) {
+ //$attr = ' class="li2"';
+ $attrs['class'][] = 'li2';
+ $def_attr = ' class="de2"';
+ }
+ else {
+ //$attr = ' style="' . $this->line_style2 . '"';
+ $attrs['style'][] = $this->line_style2;
+ // This style "covers up" the special styles set for special lines
+ // so that styles applied to special lines don't apply to the actual
+ // code on that line
+ $def_attr = ' style="' . $this->code_style . '"';
+ }
+ // Span or div?
+ $start = "<div$def_attr>";
+ $end = '</div>';
+ }
+ else {
+ if ($this->use_classes) {
+ //$attr = ' class="li1"';
+ $attrs['class'][] = 'li1';
+ $def_attr = ' class="de1"';
+ }
+ else {
+ //$attr = ' style="' . $this->line_style1 . '"';
+ $attrs['style'][] = $this->line_style1;
+ $def_attr = ' style="' . $this->code_style . '"';
+ }
+ $start = "<div$def_attr>";
+ $end = '</div>';
+ }
+
+ ++$i;
+ // Are we supposed to use ids? If so, add them
+ if ($this->add_ids) {
+ $attrs['id'][] = "$this->overall_id-$i";
+ }
+ if ($this->use_classes && in_array($i, $this->highlight_extra_lines)) {
+ $attrs['class'][] = 'ln-xtra';
+ }
+ if (!$this->use_classes && in_array($i, $this->highlight_extra_lines)) {
+ $attrs['style'][] = $this->highlight_extra_lines_style;
+ }
+
+ // Add in the line surrounded by appropriate list HTML
+ $attr_string = ' ';
+ foreach ($attrs as $key => $attr) {
+ $attr_string .= $key . '="' . implode(' ', $attr) . '" ';
+ }
+ $attr_string = substr($attr_string, 0, -1);
+ $parsed_code .= "<li$attr_string>$start$line$end</li>$ls";
+ $attrs = array();
+ }
+ }
+ else {
+ // No line numbers, but still need to handle highlighting lines extra.
+ // Have to use divs so the full width of the code is highlighted
+ $code = explode("\n", $parsed_code);
+ $parsed_code = '';
+ $i = 0;
+ foreach ($code as $line) {
+ // Make lines have at least one space in them if they're empty
+ // BenBE: Checking emptiness using trim instead of relying on blanks
+ if ('' == trim($line)) {
+ $line = '&nbsp;';
+ }
+ if (in_array(++$i, $this->highlight_extra_lines)) {
+ if ($this->use_classes) {
+ $parsed_code .= '<div class="ln-xtra">';
+ }
+ else {
+ $parsed_code .= "<div style=\"{$this->highlight_extra_lines_style}\">";
+ }
+ // Remove \n because it stuffs up <pre> header
+ $parsed_code .= $line . "</div>";
+ }
+ else {
+ $parsed_code .= $line . "\n";
+ }
+ }
+ }
+
+ if ($this->header_type == GESHI_HEADER_PRE) {
+ // enforce line numbers when using pre
+ $parsed_code = str_replace('<li></li>', '<li>&nbsp;</li>', $parsed_code);
+ }
+
+ return $this->header() . chop($parsed_code) . $this->footer();
+ }
+
+ /**
+ * Creates the header for the code block (with correct attributes)
+ *
+ * @return string The header for the code block
+ * @since 1.0.0
+ * @access private
+ */
+ function header() {
+ // Get attributes needed
+ $attributes = $this->get_attributes();
+
+ $ol_attributes = '';
+
+ if ($this->line_numbers_start != 1) {
+ $ol_attributes .= ' start="' . $this->line_numbers_start . '"';
+ }
+
+ // Get the header HTML
+ $header = $this->format_header_content();
+
+ if (GESHI_HEADER_NONE == $this->header_type) {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ return "$header<ol$ol_attributes>";
+ }
+ return $header .
+ ($this->force_code_block ? '<div>' : '');
+ }
+
+ // Work out what to return and do it
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ if ($this->header_type == GESHI_HEADER_PRE) {
+ return "<pre$attributes>$header<ol$ol_attributes>";
+ }
+ else if ($this->header_type == GESHI_HEADER_DIV) {
+ return "<div$attributes>$header<ol$ol_attributes>";
+ }
+ }
+ else {
+ if ($this->header_type == GESHI_HEADER_PRE) {
+ return "<pre$attributes>$header" .
+ ($this->force_code_block ? '<div>' : '');
+ }
+ else if ($this->header_type == GESHI_HEADER_DIV) {
+ return "<div$attributes>$header" .
+ ($this->force_code_block ? '<div>' : '');
+ }
+ }
+ }
+
+ /**
+ * Returns the header content, formatted for output
+ *
+ * @return string The header content, formatted for output
+ * @since 1.0.2
+ * @access private
+ */
+ function format_header_content() {
+ $header = $this->header_content;
+ if ($header) {
+ if ($this->header_type == GESHI_HEADER_PRE) {
+ $header = str_replace("\n", '', $header);
+ }
+ $header = $this->replace_keywords($header);
+
+ if ($this->use_classes) {
+ $attr = ' class="head"';
+ }
+ else {
+ $attr = " style=\"{$this->header_content_style}\"";
+ }
+ return "<div$attr>$header</div>";
+ }
+ }
+
+ /**
+ * Returns the footer for the code block.
+ *
+ * @return string The footer for the code block
+ * @since 1.0.0
+ * @access private
+ */
+ function footer() {
+ $footer_content = $this->format_footer_content();
+
+ if (GESHI_HEADER_NONE == $this->header_type) {
+ return ($this->line_numbers != GESHI_NO_LINE_NUMBERS) ? '</ol>' . $footer_content
+ : $footer_content;
+ }
+
+ if ($this->header_type == GESHI_HEADER_DIV) {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ return "</ol>$footer_content</div>";
+ }
+ return ($this->force_code_block ? '</div>' : '') .
+ "$footer_content</div>";
+ }
+ else {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ return "</ol>$footer_content</pre>";
+ }
+ return ($this->force_code_block ? '</div>' : '') .
+ "$footer_content</pre>";
+ }
+ }
+
+ /**
+ * Returns the footer content, formatted for output
+ *
+ * @return string The footer content, formatted for output
+ * @since 1.0.2
+ * @access private
+ */
+ function format_footer_content() {
+ $footer = $this->footer_content;
+ if ($footer) {
+ if ($this->header_type == GESHI_HEADER_PRE) {
+ $footer = str_replace("\n", '', $footer);;
+ }
+ $footer = $this->replace_keywords($footer);
+
+ if ($this->use_classes) {
+ $attr = ' class="foot"';
+ }
+ else {
+ $attr = " style=\"{$this->footer_content_style}\"";
+ }
+ return "<div$attr>$footer</div>";
+ }
+ }
+
+ /**
+ * Replaces certain keywords in the header and footer with
+ * certain configuration values
+ *
+ * @param string The header or footer content to do replacement on
+ * @return string The header or footer with replaced keywords
+ * @since 1.0.2
+ * @access private
+ */
+ function replace_keywords($instr) {
+ $keywords = $replacements = array();
+
+ $keywords[] = '<TIME>';
+ $keywords[] = '{TIME}';
+ $replacements[] = $replacements[] = number_format($this->get_time(), 3);
+
+ $keywords[] = '<LANGUAGE>';
+ $keywords[] = '{LANGUAGE}';
+ $replacements[] = $replacements[] = $this->language;
+
+ $keywords[] = '<VERSION>';
+ $keywords[] = '{VERSION}';
+ $replacements[] = $replacements[] = GESHI_VERSION;
+
+ return str_replace($keywords, $replacements, $instr);
+ }
+
+ /**
+ * Gets the CSS attributes for this code
+ *
+ * @return The CSS attributes for this code
+ * @since 1.0.0
+ * @access private
+ * @todo Document behaviour change - class is outputted regardless of whether we're using classes or not.
+ * Same with style
+ */
+ function get_attributes() {
+ $attributes = '';
+
+ if ($this->overall_class != '') {
+ $attributes .= " class=\"{$this->overall_class}\"";
+ }
+ if ($this->overall_id != '') {
+ $attributes .= " id=\"{$this->overall_id}\"";
+ }
+ if ($this->overall_style != '') {
+ $attributes .= ' style="' . $this->overall_style . '"';
+ }
+ return $attributes;
+ }
+
+ /**
+ * Secure replacement for PHP built-in function htmlspecialchars().
+ *
+ * See ticket #427 (http://wush.net/trac/wikka/ticket/427) for the rationale
+ * for this replacement function.
+ *
+ * The INTERFACE for this function is almost the same as that for
+ * htmlspecialchars(), with the same default for quote style; however, there
+ * is no 'charset' parameter. The reason for this is as follows:
+ *
+ * The PHP docs say:
+ * "The third argument charset defines character set used in conversion."
+ *
+ * I suspect PHP's htmlspecialchars() is working at the byte-value level and
+ * thus _needs_ to know (or asssume) a character set because the special
+ * characters to be replaced could exist at different code points in
+ * different character sets. (If indeed htmlspecialchars() works at
+ * byte-value level that goes some way towards explaining why the
+ * vulnerability would exist in this function, too, and not only in
+ * htmlentities() which certainly is working at byte-value level.)
+ *
+ * This replacement function however works at character level and should
+ * therefore be "immune" to character set differences - so no charset
+ * parameter is needed or provided. If a third parameter is passed, it will
+ * be silently ignored.
+ *
+ * In the OUTPUT there is a minor difference in that we use '&#39;' instead
+ * of PHP's '&#039;' for a single quote: this provides compatibility with
+ * get_html_translation_table(HTML_SPECIALCHARS, ENT_QUOTES)
+ * (see comment by mikiwoz at yahoo dot co dot uk on
+ * http://php.net/htmlspecialchars); it also matches the entity definition
+ * for XML 1.0
+ * (http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_Special_characters).
+ * Like PHP we use a numeric character reference instead of '&apos;' for the
+ * single quote. For the other special characters we use the named entity
+ * references, as PHP is doing.
+ *
+ * @author {@link http://wikkawiki.org/JavaWoman Marjolein Katsma}
+ *
+ * @license http://www.gnu.org/copyleft/lgpl.html
+ * GNU Lesser General Public License
+ * @copyright Copyright 2007, {@link http://wikkawiki.org/CreditsPage
+ * Wikka Development Team}
+ *
+ * @access public
+ * @param string $string string to be converted
+ * @param integer $quote_style
+ * - ENT_COMPAT: escapes &, <, > and double quote (default)
+ * - ENT_NOQUOTES: escapes only &, < and >
+ * - ENT_QUOTES: escapes &, <, >, double and single quotes
+ * @return string converted string
+ */
+ function hsc($string, $quote_style=ENT_COMPAT) {
+ // init
+ $aTransSpecchar = array(
+ '&' => '&amp;',
+ '"' => '&quot;',
+ '<' => '&lt;',
+ '>' => '&gt;'
+ ); // ENT_COMPAT set
+
+ if (ENT_NOQUOTES == $quote_style) // don't convert double quotes
+ {
+ unset($aTransSpecchar['"']);
+ }
+ elseif (ENT_QUOTES == $quote_style) // convert single quotes as well
+ {
+ $aTransSpecchar["'"] = '&#39;'; // (apos) htmlspecialchars() uses '&#039;'
+ }
+
+ // return translated string
+ return strtr($string,$aTransSpecchar);
+ }
+
+ /**
+ * Returns a stylesheet for the highlighted code. If $economy mode
+ * is true, we only return the stylesheet declarations that matter for
+ * this code block instead of the whole thing
+ *
+ * @param boolean Whether to use economy mode or not
+ * @return string A stylesheet built on the data for the current language
+ * @since 1.0.0
+ */
+ function get_stylesheet($economy_mode = true) {
+ // If there's an error, chances are that the language file
+ // won't have populated the language data file, so we can't
+ // risk getting a stylesheet...
+ if ($this->error) {
+ return '';
+ }
+ // First, work out what the selector should be. If there's an ID,
+ // that should be used, the same for a class. Otherwise, a selector
+ // of '' means that these styles will be applied anywhere
+ $selector = ($this->overall_id != '') ? "#{$this->overall_id} " : '';
+ $selector = ($selector == '' && $this->overall_class != '') ? ".{$this->overall_class} " : $selector;
+
+ // Header of the stylesheet
+ if (!$economy_mode) {
+ $stylesheet = "/**\n * GeSHi Dynamically Generated Stylesheet\n * --------------------------------------\n * Dynamically generated stylesheet for {$this->language}\n * CSS class: {$this->overall_class}, CSS id: {$this->overall_id}\n * GeSHi (C) 2004 - 2007 Nigel McNie (http://qbnz.com/highlighter)\n */\n";
+ } else {
+ $stylesheet = '/* GeSHi (C) 2004 - 2007 Nigel McNie (http://qbnz.com/highlighter) */' . "\n";
+ }
+
+ // Set the <ol> to have no effect at all if there are line numbers
+ // (<ol>s have margins that should be destroyed so all layout is
+ // controlled by the set_overall_style method, which works on the
+ // <pre> or <div> container). Additionally, set default styles for lines
+ if (!$economy_mode || $this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ //$stylesheet .= "$selector, {$selector}ol, {$selector}ol li {margin: 0;}\n";
+ $stylesheet .= "$selector.de1, $selector.de2 {{$this->code_style}}\n";
+ }
+
+ // Add overall styles
+ if (!$economy_mode || $this->overall_style != '') {
+ $stylesheet .= "$selector {{$this->overall_style}}\n";
+ }
+
+ // Add styles for links
+ foreach ($this->link_styles as $key => $style) {
+ if (!$economy_mode || $key == GESHI_LINK && $style != '') {
+ $stylesheet .= "{$selector}a:link {{$style}}\n";
+ }
+ if (!$economy_mode || $key == GESHI_HOVER && $style != '') {
+ $stylesheet .= "{$selector}a:hover {{$style}}\n";
+ }
+ if (!$economy_mode || $key == GESHI_ACTIVE && $style != '') {
+ $stylesheet .= "{$selector}a:active {{$style}}\n";
+ }
+ if (!$economy_mode || $key == GESHI_VISITED && $style != '') {
+ $stylesheet .= "{$selector}a:visited {{$style}}\n";
+ }
+ }
+
+ // Header and footer
+ if (!$economy_mode || $this->header_content_style != '') {
+ $stylesheet .= "$selector.head {{$this->header_content_style}}\n";
+ }
+ if (!$economy_mode || $this->footer_content_style != '') {
+ $stylesheet .= "$selector.foot {{$this->footer_content_style}}\n";
+ }
+
+ // Styles for important stuff
+ if (!$economy_mode || $this->important_styles != '') {
+ $stylesheet .= "$selector.imp {{$this->important_styles}}\n";
+ }
+
+ // Styles for lines being highlighted extra
+ if (!$economy_mode || count($this->highlight_extra_lines)) {
+ $stylesheet .= "$selector.ln-xtra {{$this->highlight_extra_lines_style}}\n";
+ }
+
+ // Simple line number styles
+ if (!$economy_mode || ($this->line_numbers != GESHI_NO_LINE_NUMBERS && $this->line_style1 != '')) {
+ $stylesheet .= "{$selector}li {{$this->line_style1}}\n";
+ }
+
+ // If there is a style set for fancy line numbers, echo it out
+ if (!$economy_mode || ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS && $this->line_style2 != '')) {
+ $stylesheet .= "{$selector}li.li2 {{$this->line_style2}}\n";
+ }
+
+ foreach ($this->language_data['STYLES']['KEYWORDS'] as $group => $styles) {
+ if (!$economy_mode || !($economy_mode && (!$this->lexic_permissions['KEYWORDS'][$group] || $styles == ''))) {
+ $stylesheet .= "$selector.kw$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['COMMENTS'] as $group => $styles) {
+ if (!$economy_mode || !($economy_mode && $styles == '') &&
+ !($economy_mode && !$this->lexic_permissions['COMMENTS'][$group])) {
+ $stylesheet .= "$selector.co$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['ESCAPE_CHAR'] as $group => $styles) {
+ if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode &&
+ !$this->lexic_permissions['ESCAPE_CHAR'])) {
+ $stylesheet .= "$selector.es$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['SYMBOLS'] as $group => $styles) {
+ if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode &&
+ !$this->lexic_permissions['BRACKETS'])) {
+ $stylesheet .= "$selector.br$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['STRINGS'] as $group => $styles) {
+ if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode &&
+ !$this->lexic_permissions['STRINGS'])) {
+ $stylesheet .= "$selector.st$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['NUMBERS'] as $group => $styles) {
+ if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode &&
+ !$this->lexic_permissions['NUMBERS'])) {
+ $stylesheet .= "$selector.nu$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['METHODS'] as $group => $styles) {
+ if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode &&
+ !$this->lexic_permissions['METHODS'])) {
+ $stylesheet .= "$selector.me$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['SCRIPT'] as $group => $styles) {
+ if (!$economy_mode || !($economy_mode && $styles == '')) {
+ $stylesheet .= "$selector.sc$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['REGEXPS'] as $group => $styles) {
+ if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode &&
+ !$this->lexic_permissions['REGEXPS'][$group])) {
+ if (is_array($this->language_data['REGEXPS'][$group]) &&
+ array_key_exists(GESHI_CLASS,
+ $this->language_data['REGEXPS'][$group])) {
+ $stylesheet .= "$selector.";
+ $stylesheet .= $this->language_data['REGEXPS'][$group][GESHI_CLASS];
+ $stylesheet .= " {{$styles}}\n";
+ }
+ else {
+ $stylesheet .= "$selector.re$group {{$styles}}\n";
+ }
+ }
+ }
+
+ return $stylesheet;
+ }
+
+} // End Class GeSHi
+
+
+if (!function_exists('geshi_highlight')) {
+ /**
+ * Easy way to highlight stuff. Behaves just like highlight_string
+ *
+ * @param string The code to highlight
+ * @param string The language to highlight the code in
+ * @param string The path to the language files. You can leave this blank if you need
+ * as from version 1.0.7 the path should be automatically detected
+ * @param boolean Whether to return the result or to echo
+ * @return string The code highlighted (if $return is true)
+ * @since 1.0.2
+ */
+ function geshi_highlight($string, $language, $path = null, $return = false) {
+ $geshi = new GeSHi($string, $language, $path);
+ $geshi->set_header_type(GESHI_HEADER_NONE);
+ if ($return) {
+ return '<code>' . $geshi->parse_code() . '</code>';
+ }
+ echo '<code>' . $geshi->parse_code() . '</code>';
+ if ($geshi->error()) {
+ return false;
+ }
+ return true;
+ }
+}
+
+?>
diff --git a/JLanguageTool/website/include/geshi/java5.php b/JLanguageTool/website/include/geshi/java5.php
new file mode 100644
index 0000000..07c90a1
--- /dev/null
+++ b/JLanguageTool/website/include/geshi/java5.php
@@ -0,0 +1,1021 @@
+<?php
+/*************************************************************************************
+ * java.php
+ * --------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.7.20
+ * Date Started: 2004/07/10
+ *
+ * Java language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/12/28 (1.0.4)
+ * - Added instanceof keyword
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/08/05 (1.0.2)
+ * - Added URL support
+ * - Added keyword "this", as bugs in GeSHi class ironed out
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * - Added extra missed keywords
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * -------------------------
+ * *
+ *
+ *************************************************************************************
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Java(TM) 2 Platform Standard Edition 5.0',
+ 'COMMENT_SINGLE' => array(1 => '//'), /* import statements are not comments! */
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ /* see the authoritative list of all 50 Java keywords at */
+ /* http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#229308 */
+
+ /* java keywords, part 1: control flow */
+ 'case', 'default', 'do', 'else', 'for',
+ 'goto', 'if', 'switch', 'while'
+
+ /* IMO 'break', 'continue', 'return' and 'throw' */
+ /* should also be added to this group, as they */
+ /* also manage the control flow, */
+ /* arguably 'try'/'catch'/'finally' as well */
+ ),
+ 2 => array(
+ /* java keywords, part 2 */
+
+ 'break', 'continue', 'return', 'throw',
+ 'try', 'catch', 'finally',
+
+ 'abstract', 'assert', 'class', 'const', 'enum', 'extends',
+ 'final', 'implements', 'import', 'instanceof', 'interface',
+ 'native', 'new', 'package', 'private', 'protected',
+ 'public', 'static', 'strictfp', 'super', 'synchronized',
+ 'this', 'throws', 'transient', 'volatile'
+ ),
+ 3 => array(
+ /* Java keywords, part 3: primitive data types and 'void' */
+ 'boolean', 'byte', 'char', 'double',
+ 'float', 'int', 'long', 'short', 'void'
+ ),
+ 4 => array(
+ /* other reserved words in Java: literals */
+ /* should be styled to look similar to numbers and Strings */
+ 'false', 'null', 'true'
+ ),
+ 5 => array (
+ 'Applet', 'AppletContext', 'AppletStub', 'AudioClip'
+ ),
+ 6 => array (
+ 'AWTError', 'AWTEvent', 'AWTEventMulticaster', 'AWTException', 'AWTKeyStroke', 'AWTPermission', 'ActiveEvent', 'Adjustable', 'AlphaComposite', 'BasicStroke', 'BorderLayout', 'BufferCapabilities', 'BufferCapabilities.FlipContents', 'Button', 'Canvas', 'CardLayout', 'Checkbox', 'CheckboxGroup', 'CheckboxMenuItem', 'Choice', 'Color', 'Component', 'ComponentOrientation', 'Composite', 'CompositeContext', 'Container', 'ContainerOrderFocusTraversalPolicy', 'Cursor', 'DefaultFocusTraversalPolicy', 'DefaultKeyboardFocusManager', 'Dialog', 'Dimension', 'DisplayMode', 'EventQueue', 'FileDialog', 'FlowLayout', 'FocusTraversalPolicy', 'Font', 'FontFormatException', 'FontMetrics', 'Frame', 'GradientPaint', 'Graphics', 'Graphics2D', 'GraphicsConfigTemplate', 'GraphicsConfiguration', 'GraphicsDevice', 'GraphicsEnvironment', 'GridBagConstraints', 'GridBagLayout', 'GridLayout', 'HeadlessException', 'IllegalComponentStateException', 'Image', 'ImageCapabilities', 'Insets', 'ItemSelectable', 'JobAttributes',
+ 'JobAttributes.DefaultSelectionType', 'JobAttributes.DestinationType', 'JobAttributes.DialogType', 'JobAttributes.MultipleDocumentHandlingType', 'JobAttributes.SidesType', 'KeyEventDispatcher', 'KeyEventPostProcessor', 'KeyboardFocusManager', 'Label', 'LayoutManager', 'LayoutManager2', 'MediaTracker', 'Menu', 'MenuBar', 'MenuComponent', 'MenuContainer', 'MenuItem', 'MenuShortcut', 'MouseInfo', 'PageAttributes', 'PageAttributes.ColorType', 'PageAttributes.MediaType', 'PageAttributes.OrientationRequestedType', 'PageAttributes.OriginType', 'PageAttributes.PrintQualityType', 'Paint', 'PaintContext', 'Panel', 'Point', 'PointerInfo', 'Polygon', 'PopupMenu', 'PrintGraphics', 'PrintJob', 'Rectangle', 'RenderingHints', 'RenderingHints.Key', 'Robot', 'ScrollPane', 'ScrollPaneAdjustable', 'Scrollbar', 'Shape', 'Stroke', 'SystemColor', 'TextArea', 'TextComponent', 'TextField', 'TexturePaint', 'Toolkit', 'Transparency', 'Window'
+ ),
+ 7 => array (
+ 'CMMException', 'ColorSpace', 'ICC_ColorSpace', 'ICC_Profile', 'ICC_ProfileGray', 'ICC_ProfileRGB', 'ProfileDataException'
+ ),
+ 8 => array (
+ 'Clipboard', 'ClipboardOwner', 'DataFlavor', 'FlavorEvent', 'FlavorListener', 'FlavorMap', 'FlavorTable', 'MimeTypeParseException', 'StringSelection', 'SystemFlavorMap', 'Transferable', 'UnsupportedFlavorException'
+ ),
+ 9 => array (
+ 'Autoscroll', 'DnDConstants', 'DragGestureEvent', 'DragGestureListener', 'DragGestureRecognizer', 'DragSource', 'DragSourceAdapter', 'DragSourceContext', 'DragSourceDragEvent', 'DragSourceDropEvent', 'DragSourceEvent', 'DragSourceListener', 'DragSourceMotionListener', 'DropTarget', 'DropTarget.DropTargetAutoScroller', 'DropTargetAdapter', 'DropTargetContext', 'DropTargetDragEvent', 'DropTargetDropEvent', 'DropTargetEvent', 'DropTargetListener', 'InvalidDnDOperationException', 'MouseDragGestureRecognizer'
+ ),
+ 10 => array (
+ 'AWTEventListener', 'AWTEventListenerProxy', 'ActionEvent', 'ActionListener', 'AdjustmentEvent', 'AdjustmentListener', 'ComponentAdapter', 'ComponentEvent', 'ComponentListener', 'ContainerAdapter', 'ContainerEvent', 'ContainerListener', 'FocusAdapter', 'FocusEvent', 'FocusListener', 'HierarchyBoundsAdapter', 'HierarchyBoundsListener', 'HierarchyEvent', 'HierarchyListener', 'InputEvent', 'InputMethodEvent', 'InputMethodListener', 'InvocationEvent', 'ItemEvent', 'ItemListener', 'KeyAdapter', 'KeyEvent', 'KeyListener', 'MouseAdapter', 'MouseListener', 'MouseMotionAdapter', 'MouseMotionListener', 'MouseWheelEvent', 'MouseWheelListener', 'PaintEvent', 'TextEvent', 'TextListener', 'WindowAdapter', 'WindowEvent', 'WindowFocusListener', 'WindowListener', 'WindowStateListener'
+ ),
+ 11 => array (
+ 'FontRenderContext', 'GlyphJustificationInfo', 'GlyphMetrics', 'GlyphVector', 'GraphicAttribute', 'ImageGraphicAttribute', 'LineBreakMeasurer', 'LineMetrics', 'MultipleMaster', 'NumericShaper', 'ShapeGraphicAttribute', 'TextAttribute', 'TextHitInfo', 'TextLayout', 'TextLayout.CaretPolicy', 'TextMeasurer', 'TransformAttribute'
+ ),
+ 12 => array (
+ 'AffineTransform', 'Arc2D', 'Arc2D.Double', 'Arc2D.Float', 'Area', 'CubicCurve2D', 'CubicCurve2D.Double', 'CubicCurve2D.Float', 'Dimension2D', 'Ellipse2D', 'Ellipse2D.Double', 'Ellipse2D.Float', 'FlatteningPathIterator', 'GeneralPath', 'IllegalPathStateException', 'Line2D', 'Line2D.Double', 'Line2D.Float', 'NoninvertibleTransformException', 'PathIterator', 'Point2D', 'Point2D.Double', 'Point2D.Float', 'QuadCurve2D', 'QuadCurve2D.Double', 'QuadCurve2D.Float', 'Rectangle2D', 'Rectangle2D.Double', 'Rectangle2D.Float', 'RectangularShape', 'RoundRectangle2D', 'RoundRectangle2D.Double', 'RoundRectangle2D.Float'
+ ),
+ 13 => array (
+ 'InputContext', 'InputMethodHighlight', 'InputMethodRequests', 'InputSubset'
+ ),
+ 14 => array (
+ 'InputMethod', 'InputMethodContext', 'InputMethodDescriptor'
+ ),
+ 15 => array (
+ 'AffineTransformOp', 'AreaAveragingScaleFilter', 'BandCombineOp', 'BandedSampleModel', 'BufferStrategy', 'BufferedImage', 'BufferedImageFilter', 'BufferedImageOp', 'ByteLookupTable', 'ColorConvertOp', 'ColorModel', 'ComponentColorModel', 'ComponentSampleModel', 'ConvolveOp', 'CropImageFilter', 'DataBuffer', 'DataBufferByte', 'DataBufferDouble', 'DataBufferFloat', 'DataBufferInt', 'DataBufferShort', 'DataBufferUShort', 'DirectColorModel', 'FilteredImageSource', 'ImageConsumer', 'ImageFilter', 'ImageObserver', 'ImageProducer', 'ImagingOpException', 'IndexColorModel', 'Kernel', 'LookupOp', 'LookupTable', 'MemoryImageSource', 'MultiPixelPackedSampleModel', 'PackedColorModel', 'PixelGrabber', 'PixelInterleavedSampleModel', 'RGBImageFilter', 'Raster', 'RasterFormatException', 'RasterOp', 'RenderedImage', 'ReplicateScaleFilter', 'RescaleOp', 'SampleModel', 'ShortLookupTable', 'SinglePixelPackedSampleModel', 'TileObserver', 'VolatileImage', 'WritableRaster', 'WritableRenderedImage'
+ ),
+ 16 => array (
+ 'ContextualRenderedImageFactory', 'ParameterBlock', 'RenderContext', 'RenderableImage', 'RenderableImageOp', 'RenderableImageProducer', 'RenderedImageFactory'
+ ),
+ 17 => array (
+ 'Book', 'PageFormat', 'Pageable', 'Paper', 'Printable', 'PrinterAbortException', 'PrinterException', 'PrinterGraphics', 'PrinterIOException', 'PrinterJob'
+ ),
+ 18 => array (
+ 'AppletInitializer', 'BeanDescriptor', 'BeanInfo', 'Beans', 'Customizer', 'DefaultPersistenceDelegate', 'DesignMode', 'Encoder', 'EventHandler', 'EventSetDescriptor', 'ExceptionListener', 'Expression', 'FeatureDescriptor', 'IndexedPropertyChangeEvent', 'IndexedPropertyDescriptor', 'Introspector', 'MethodDescriptor', 'ParameterDescriptor', 'PersistenceDelegate', 'PropertyChangeEvent', 'PropertyChangeListener', 'PropertyChangeListenerProxy', 'PropertyChangeSupport', 'PropertyDescriptor', 'PropertyEditor', 'PropertyEditorManager', 'PropertyEditorSupport', 'PropertyVetoException', 'SimpleBeanInfo', 'VetoableChangeListener', 'VetoableChangeListenerProxy', 'VetoableChangeSupport', 'Visibility', 'XMLDecoder', 'XMLEncoder'
+ ),
+ 19 => array (
+ 'BeanContext', 'BeanContextChild', 'BeanContextChildComponentProxy', 'BeanContextChildSupport', 'BeanContextContainerProxy', 'BeanContextEvent', 'BeanContextMembershipEvent', 'BeanContextMembershipListener', 'BeanContextProxy', 'BeanContextServiceAvailableEvent', 'BeanContextServiceProvider', 'BeanContextServiceProviderBeanInfo', 'BeanContextServiceRevokedEvent', 'BeanContextServiceRevokedListener', 'BeanContextServices', 'BeanContextServicesListener', 'BeanContextServicesSupport', 'BeanContextServicesSupport.BCSSServiceProvider', 'BeanContextSupport', 'BeanContextSupport.BCSIterator'
+ ),
+ 20 => array (
+ 'BufferedInputStream', 'BufferedOutputStream', 'BufferedReader', 'BufferedWriter', 'ByteArrayInputStream', 'ByteArrayOutputStream', 'CharArrayReader', 'CharArrayWriter', 'CharConversionException', 'Closeable', 'DataInput', 'DataOutput', 'EOFException', 'Externalizable', 'File', 'FileDescriptor', 'FileInputStream', 'FileNotFoundException', 'FileOutputStream', 'FilePermission', 'FileReader', 'FileWriter', 'FilenameFilter', 'FilterInputStream', 'FilterOutputStream', 'FilterReader', 'FilterWriter', 'Flushable', 'IOException', 'InputStreamReader', 'InterruptedIOException', 'InvalidClassException', 'InvalidObjectException', 'LineNumberInputStream', 'LineNumberReader', 'NotActiveException', 'NotSerializableException', 'ObjectInput', 'ObjectInputStream', 'ObjectInputStream.GetField', 'ObjectInputValidation', 'ObjectOutput', 'ObjectOutputStream', 'ObjectOutputStream.PutField', 'ObjectStreamClass', 'ObjectStreamConstants', 'ObjectStreamException', 'ObjectStreamField', 'OptionalDataException', 'OutputStreamWriter',
+ 'PipedInputStream', 'PipedOutputStream', 'PipedReader', 'PipedWriter', 'PrintStream', 'PrintWriter', 'PushbackInputStream', 'PushbackReader', 'RandomAccessFile', 'Reader', 'SequenceInputStream', 'Serializable', 'SerializablePermission', 'StreamCorruptedException', 'StreamTokenizer', 'StringBufferInputStream', 'StringReader', 'StringWriter', 'SyncFailedException', 'UTFDataFormatException', 'UnsupportedEncodingException', 'WriteAbortedException', 'Writer'
+ ),
+ 21 => array (
+ 'AbstractMethodError', 'Appendable', 'ArithmeticException', 'ArrayIndexOutOfBoundsException', 'ArrayStoreException', 'AssertionError', 'Boolean', 'Byte', 'CharSequence', 'Character', 'Character.Subset', 'Character.UnicodeBlock', 'Class', 'ClassCastException', 'ClassCircularityError', 'ClassFormatError', 'ClassLoader', 'ClassNotFoundException', 'CloneNotSupportedException', 'Cloneable', 'Comparable', 'Compiler', 'Deprecated', 'Double', 'Enum', 'EnumConstantNotPresentException', 'Error', 'Exception', 'ExceptionInInitializerError', 'Float', 'IllegalAccessError', 'IllegalAccessException', 'IllegalArgumentException', 'IllegalMonitorStateException', 'IllegalStateException', 'IllegalThreadStateException', 'IncompatibleClassChangeError', 'IndexOutOfBoundsException', 'InheritableThreadLocal', 'InstantiationError', 'InstantiationException', 'Integer', 'InternalError', 'InterruptedException', 'Iterable', 'LinkageError', 'Long', 'Math', 'NegativeArraySizeException', 'NoClassDefFoundError', 'NoSuchFieldError',
+ 'NoSuchFieldException', 'NoSuchMethodError', 'NoSuchMethodException', 'NullPointerException', 'Number', 'NumberFormatException', 'OutOfMemoryError', 'Override', 'Package', 'Process', 'ProcessBuilder', 'Readable', 'Runnable', 'Runtime', 'RuntimeException', 'RuntimePermission', 'SecurityException', 'SecurityManager', 'Short', 'StackOverflowError', 'StackTraceElement', 'StrictMath', 'String', 'StringBuffer', 'StringBuilder', 'StringIndexOutOfBoundsException', 'SuppressWarnings', 'System', 'Thread', 'Thread.State', 'Thread.UncaughtExceptionHandler', 'ThreadDeath', 'ThreadGroup', 'ThreadLocal', 'Throwable', 'TypeNotPresentException', 'UnknownError', 'UnsatisfiedLinkError', 'UnsupportedClassVersionError', 'UnsupportedOperationException', 'VerifyError', 'VirtualMachineError', 'Void'
+ ),
+ 22 => array (
+ 'AnnotationFormatError', 'AnnotationTypeMismatchException', 'Documented', 'ElementType', 'IncompleteAnnotationException', 'Inherited', 'Retention', 'RetentionPolicy', 'Target'
+ ),
+ 23 => array (
+ 'ClassDefinition', 'ClassFileTransformer', 'IllegalClassFormatException', 'Instrumentation', 'UnmodifiableClassException'
+ ),
+ 24 => array (
+ 'ClassLoadingMXBean', 'CompilationMXBean', 'GarbageCollectorMXBean', 'ManagementFactory', 'ManagementPermission', 'MemoryMXBean', 'MemoryManagerMXBean', 'MemoryNotificationInfo', 'MemoryPoolMXBean', 'MemoryType', 'MemoryUsage', 'OperatingSystemMXBean', 'RuntimeMXBean', 'ThreadInfo', 'ThreadMXBean'
+ ),
+ 25 => array (
+ 'PhantomReference', 'ReferenceQueue', 'SoftReference', 'WeakReference'
+ ),
+ 26 => array (
+ 'AccessibleObject', 'AnnotatedElement', 'Constructor', 'Field', 'GenericArrayType', 'GenericDeclaration', 'GenericSignatureFormatError', 'InvocationHandler', 'InvocationTargetException', 'MalformedParameterizedTypeException', 'Member', 'Method', 'Modifier', 'ParameterizedType', 'ReflectPermission', 'Type', 'TypeVariable', 'UndeclaredThrowableException', 'WildcardType'
+ ),
+ 27 => array (
+ 'BigDecimal', 'BigInteger', 'MathContext', 'RoundingMode'
+ ),
+ 28 => array (
+ 'Authenticator', 'Authenticator.RequestorType', 'BindException', 'CacheRequest', 'CacheResponse', 'ContentHandlerFactory', 'CookieHandler', 'DatagramPacket', 'DatagramSocket', 'DatagramSocketImpl', 'DatagramSocketImplFactory', 'FileNameMap', 'HttpRetryException', 'HttpURLConnection', 'Inet4Address', 'Inet6Address', 'InetAddress', 'InetSocketAddress', 'JarURLConnection', 'MalformedURLException', 'MulticastSocket', 'NetPermission', 'NetworkInterface', 'NoRouteToHostException', 'PasswordAuthentication', 'PortUnreachableException', 'ProtocolException', 'Proxy.Type', 'ProxySelector', 'ResponseCache', 'SecureCacheResponse', 'ServerSocket', 'Socket', 'SocketAddress', 'SocketException', 'SocketImpl', 'SocketImplFactory', 'SocketOptions', 'SocketPermission', 'SocketTimeoutException', 'URI', 'URISyntaxException', 'URL', 'URLClassLoader', 'URLConnection', 'URLDecoder', 'URLEncoder', 'URLStreamHandler', 'URLStreamHandlerFactory', 'UnknownServiceException'
+ ),
+ 29 => array (
+ 'Buffer', 'BufferOverflowException', 'BufferUnderflowException', 'ByteBuffer', 'ByteOrder', 'CharBuffer', 'DoubleBuffer', 'FloatBuffer', 'IntBuffer', 'InvalidMarkException', 'LongBuffer', 'MappedByteBuffer', 'ReadOnlyBufferException', 'ShortBuffer'
+ ),
+ 30 => array (
+ 'AlreadyConnectedException', 'AsynchronousCloseException', 'ByteChannel', 'CancelledKeyException', 'Channel', 'Channels', 'ClosedByInterruptException', 'ClosedChannelException', 'ClosedSelectorException', 'ConnectionPendingException', 'DatagramChannel', 'FileChannel', 'FileChannel.MapMode', 'FileLock', 'FileLockInterruptionException', 'GatheringByteChannel', 'IllegalBlockingModeException', 'IllegalSelectorException', 'InterruptibleChannel', 'NoConnectionPendingException', 'NonReadableChannelException', 'NonWritableChannelException', 'NotYetBoundException', 'NotYetConnectedException', 'OverlappingFileLockException', 'Pipe', 'Pipe.SinkChannel', 'Pipe.SourceChannel', 'ReadableByteChannel', 'ScatteringByteChannel', 'SelectableChannel', 'SelectionKey', 'Selector', 'ServerSocketChannel', 'SocketChannel', 'UnresolvedAddressException', 'UnsupportedAddressTypeException', 'WritableByteChannel'
+ ),
+ 31 => array (
+ 'AbstractInterruptibleChannel', 'AbstractSelectableChannel', 'AbstractSelectionKey', 'AbstractSelector', 'SelectorProvider'
+ ),
+ 32 => array (
+ 'CharacterCodingException', 'Charset', 'CharsetDecoder', 'CharsetEncoder', 'CoderMalfunctionError', 'CoderResult', 'CodingErrorAction', 'IllegalCharsetNameException', 'MalformedInputException', 'UnmappableCharacterException', 'UnsupportedCharsetException'
+ ),
+ 33 => array (
+ 'CharsetProvider'
+ ),
+ 34 => array (
+ 'AccessException', 'AlreadyBoundException', 'ConnectIOException', 'MarshalException', 'MarshalledObject', 'Naming', 'NoSuchObjectException', 'NotBoundException', 'RMISecurityException', 'RMISecurityManager', 'Remote', 'RemoteException', 'ServerError', 'ServerException', 'ServerRuntimeException', 'StubNotFoundException', 'UnexpectedException', 'UnmarshalException'
+ ),
+ 35 => array (
+ 'Activatable', 'ActivateFailedException', 'ActivationDesc', 'ActivationException', 'ActivationGroup', 'ActivationGroupDesc', 'ActivationGroupDesc.CommandEnvironment', 'ActivationGroupID', 'ActivationGroup_Stub', 'ActivationID', 'ActivationInstantiator', 'ActivationMonitor', 'ActivationSystem', 'Activator', 'UnknownGroupException', 'UnknownObjectException'
+ ),
+ 36 => array (
+ 'DGC', 'Lease', 'VMID'
+ ),
+ 37 => array (
+ 'LocateRegistry', 'Registry', 'RegistryHandler'
+ ),
+ 38 => array (
+ 'ExportException', 'LoaderHandler', 'LogStream', 'ObjID', 'Operation', 'RMIClassLoader', 'RMIClassLoaderSpi', 'RMIClientSocketFactory', 'RMIFailureHandler', 'RMIServerSocketFactory', 'RMISocketFactory', 'RemoteCall', 'RemoteObject', 'RemoteObjectInvocationHandler', 'RemoteRef', 'RemoteServer', 'RemoteStub', 'ServerCloneException', 'ServerNotActiveException', 'ServerRef', 'Skeleton', 'SkeletonMismatchException', 'SkeletonNotFoundException', 'SocketSecurityException', 'UID', 'UnicastRemoteObject', 'Unreferenced'
+ ),
+ 39 => array (
+ 'AccessControlContext', 'AccessControlException', 'AccessController', 'AlgorithmParameterGenerator', 'AlgorithmParameterGeneratorSpi', 'AlgorithmParameters', 'AlgorithmParametersSpi', 'AllPermission', 'AuthProvider', 'BasicPermission', 'CodeSigner', 'CodeSource', 'DigestException', 'DigestInputStream', 'DigestOutputStream', 'DomainCombiner', 'GeneralSecurityException', 'Guard', 'GuardedObject', 'Identity', 'IdentityScope', 'InvalidAlgorithmParameterException', 'InvalidParameterException', 'Key', 'KeyException', 'KeyFactory', 'KeyFactorySpi', 'KeyManagementException', 'KeyPair', 'KeyPairGenerator', 'KeyPairGeneratorSpi', 'KeyRep', 'KeyRep.Type', 'KeyStore', 'KeyStore.Builder', 'KeyStore.CallbackHandlerProtection', 'KeyStore.Entry', 'KeyStore.LoadStoreParameter', 'KeyStore.PasswordProtection', 'KeyStore.PrivateKeyEntry', 'KeyStore.ProtectionParameter', 'KeyStore.SecretKeyEntry', 'KeyStore.TrustedCertificateEntry', 'KeyStoreException', 'KeyStoreSpi', 'MessageDigest', 'MessageDigestSpi',
+ 'NoSuchAlgorithmException', 'NoSuchProviderException', 'PermissionCollection', 'Permissions', 'PrivateKey', 'PrivilegedAction', 'PrivilegedActionException', 'PrivilegedExceptionAction', 'ProtectionDomain', 'Provider', 'Provider.Service', 'ProviderException', 'PublicKey', 'SecureClassLoader', 'SecureRandom', 'SecureRandomSpi', 'Security', 'SecurityPermission', 'Signature', 'SignatureException', 'SignatureSpi', 'SignedObject', 'Signer', 'UnrecoverableEntryException', 'UnrecoverableKeyException', 'UnresolvedPermission'
+ ),
+ 40 => array (
+ 'Acl', 'AclEntry', 'AclNotFoundException', 'Group', 'LastOwnerException', 'NotOwnerException', 'Owner'
+ ),
+ 41 => array (
+ 'CRL', 'CRLException', 'CRLSelector', 'CertPath', 'CertPath.CertPathRep', 'CertPathBuilder', 'CertPathBuilderException', 'CertPathBuilderResult', 'CertPathBuilderSpi', 'CertPathParameters', 'CertPathValidator', 'CertPathValidatorException', 'CertPathValidatorResult', 'CertPathValidatorSpi', 'CertSelector', 'CertStore', 'CertStoreException', 'CertStoreParameters', 'CertStoreSpi', 'Certificate.CertificateRep', 'CertificateFactory', 'CertificateFactorySpi', 'CollectionCertStoreParameters', 'LDAPCertStoreParameters', 'PKIXBuilderParameters', 'PKIXCertPathBuilderResult', 'PKIXCertPathChecker', 'PKIXCertPathValidatorResult', 'PKIXParameters', 'PolicyNode', 'PolicyQualifierInfo', 'TrustAnchor', 'X509CRL', 'X509CRLEntry', 'X509CRLSelector', 'X509CertSelector', 'X509Extension'
+ ),
+ 42 => array (
+ 'DSAKey', 'DSAKeyPairGenerator', 'DSAParams', 'DSAPrivateKey', 'DSAPublicKey', 'ECKey', 'ECPrivateKey', 'ECPublicKey', 'RSAKey', 'RSAMultiPrimePrivateCrtKey', 'RSAPrivateCrtKey', 'RSAPrivateKey', 'RSAPublicKey'
+ ),
+ 43 => array (
+ 'AlgorithmParameterSpec', 'DSAParameterSpec', 'DSAPrivateKeySpec', 'DSAPublicKeySpec', 'ECField', 'ECFieldF2m', 'ECFieldFp', 'ECGenParameterSpec', 'ECParameterSpec', 'ECPoint', 'ECPrivateKeySpec', 'ECPublicKeySpec', 'EllipticCurve', 'EncodedKeySpec', 'InvalidKeySpecException', 'InvalidParameterSpecException', 'KeySpec', 'MGF1ParameterSpec', 'PKCS8EncodedKeySpec', 'PSSParameterSpec', 'RSAKeyGenParameterSpec', 'RSAMultiPrimePrivateCrtKeySpec', 'RSAOtherPrimeInfo', 'RSAPrivateCrtKeySpec', 'RSAPrivateKeySpec', 'RSAPublicKeySpec', 'X509EncodedKeySpec'
+ ),
+ 44 => array (
+ 'BatchUpdateException', 'Blob', 'CallableStatement', 'Clob', 'Connection', 'DataTruncation', 'DatabaseMetaData', 'Driver', 'DriverManager', 'DriverPropertyInfo', 'ParameterMetaData', 'PreparedStatement', 'Ref', 'ResultSet', 'ResultSetMetaData', 'SQLData', 'SQLException', 'SQLInput', 'SQLOutput', 'SQLPermission', 'SQLWarning', 'Savepoint', 'Struct', 'Time', 'Types'
+ ),
+ 45 => array (
+ 'AttributedCharacterIterator', 'AttributedCharacterIterator.Attribute', 'AttributedString', 'Bidi', 'BreakIterator', 'CharacterIterator', 'ChoiceFormat', 'CollationElementIterator', 'CollationKey', 'Collator', 'DateFormat', 'DateFormat.Field', 'DateFormatSymbols', 'DecimalFormat', 'DecimalFormatSymbols', 'FieldPosition', 'Format', 'Format.Field', 'MessageFormat', 'MessageFormat.Field', 'NumberFormat', 'NumberFormat.Field', 'ParseException', 'ParsePosition', 'RuleBasedCollator', 'SimpleDateFormat', 'StringCharacterIterator'
+ ),
+ 46 => array (
+ 'AbstractCollection', 'AbstractList', 'AbstractMap', 'AbstractQueue', 'AbstractSequentialList', 'AbstractSet', 'ArrayList', 'Arrays', 'BitSet', 'Calendar', 'Collection', 'Collections', 'Comparator', 'ConcurrentModificationException', 'Currency', 'Dictionary', 'DuplicateFormatFlagsException', 'EmptyStackException', 'EnumMap', 'EnumSet', 'Enumeration', 'EventListenerProxy', 'EventObject', 'FormatFlagsConversionMismatchException', 'Formattable', 'FormattableFlags', 'Formatter.BigDecimalLayoutForm', 'FormatterClosedException', 'GregorianCalendar', 'HashMap', 'HashSet', 'Hashtable', 'IdentityHashMap', 'IllegalFormatCodePointException', 'IllegalFormatConversionException', 'IllegalFormatException', 'IllegalFormatFlagsException', 'IllegalFormatPrecisionException', 'IllegalFormatWidthException', 'InputMismatchException', 'InvalidPropertiesFormatException', 'Iterator', 'LinkedHashMap', 'LinkedHashSet', 'LinkedList', 'ListIterator', 'ListResourceBundle', 'Locale', 'Map', 'Map.Entry', 'MissingFormatArgumentException',
+ 'MissingFormatWidthException', 'MissingResourceException', 'NoSuchElementException', 'Observable', 'Observer', 'PriorityQueue', 'Properties', 'PropertyPermission', 'PropertyResourceBundle', 'Queue', 'Random', 'RandomAccess', 'ResourceBundle', 'Scanner', 'Set', 'SimpleTimeZone', 'SortedMap', 'SortedSet', 'Stack', 'StringTokenizer', 'TimeZone', 'TimerTask', 'TooManyListenersException', 'TreeMap', 'TreeSet', 'UUID', 'UnknownFormatConversionException', 'UnknownFormatFlagsException', 'Vector', 'WeakHashMap'
+ ),
+ 47 => array (
+ 'AbstractExecutorService', 'ArrayBlockingQueue', 'BlockingQueue', 'BrokenBarrierException', 'Callable', 'CancellationException', 'CompletionService', 'ConcurrentHashMap', 'ConcurrentLinkedQueue', 'ConcurrentMap', 'CopyOnWriteArrayList', 'CopyOnWriteArraySet', 'CountDownLatch', 'CyclicBarrier', 'DelayQueue', 'Delayed', 'Exchanger', 'ExecutionException', 'Executor', 'ExecutorCompletionService', 'ExecutorService', 'Executors', 'Future', 'FutureTask', 'LinkedBlockingQueue', 'PriorityBlockingQueue', 'RejectedExecutionException', 'RejectedExecutionHandler', 'ScheduledExecutorService', 'ScheduledFuture', 'ScheduledThreadPoolExecutor', 'Semaphore', 'SynchronousQueue', 'ThreadFactory', 'ThreadPoolExecutor', 'ThreadPoolExecutor.AbortPolicy', 'ThreadPoolExecutor.CallerRunsPolicy', 'ThreadPoolExecutor.DiscardOldestPolicy', 'ThreadPoolExecutor.DiscardPolicy', 'TimeUnit', 'TimeoutException'
+ ),
+ 48 => array (
+ 'AtomicBoolean', 'AtomicInteger', 'AtomicIntegerArray', 'AtomicIntegerFieldUpdater', 'AtomicLong', 'AtomicLongArray', 'AtomicLongFieldUpdater', 'AtomicMarkableReference', 'AtomicReference', 'AtomicReferenceArray', 'AtomicReferenceFieldUpdater', 'AtomicStampedReference'
+ ),
+ 49 => array (
+ 'AbstractQueuedSynchronizer', 'Condition', 'Lock', 'LockSupport', 'ReadWriteLock', 'ReentrantLock', 'ReentrantReadWriteLock', 'ReentrantReadWriteLock.ReadLock', 'ReentrantReadWriteLock.WriteLock'
+ ),
+ 50 => array (
+ 'Attributes.Name', 'JarEntry', 'JarException', 'JarFile', 'JarInputStream', 'JarOutputStream', 'Manifest', 'Pack200', 'Pack200.Packer', 'Pack200.Unpacker'
+ ),
+ 51 => array (
+ 'ConsoleHandler', 'ErrorManager', 'FileHandler', 'Filter', 'Handler', 'Level', 'LogManager', 'LogRecord', 'Logger', 'LoggingMXBean', 'LoggingPermission', 'MemoryHandler', 'SimpleFormatter', 'SocketHandler', 'StreamHandler', 'XMLFormatter'
+ ),
+ 52 => array (
+ 'AbstractPreferences', 'BackingStoreException', 'InvalidPreferencesFormatException', 'NodeChangeEvent', 'NodeChangeListener', 'PreferenceChangeEvent', 'PreferenceChangeListener', 'Preferences', 'PreferencesFactory'
+ ),
+ 53 => array (
+ 'MatchResult', 'Matcher', 'Pattern', 'PatternSyntaxException'
+ ),
+ 54 => array (
+ 'Adler32', 'CRC32', 'CheckedInputStream', 'CheckedOutputStream', 'Checksum', 'DataFormatException', 'Deflater', 'DeflaterOutputStream', 'GZIPInputStream', 'GZIPOutputStream', 'Inflater', 'InflaterInputStream', 'ZipEntry', 'ZipException', 'ZipFile', 'ZipInputStream', 'ZipOutputStream'
+ ),
+ 55 => array (
+ 'Accessible', 'AccessibleAction', 'AccessibleAttributeSequence', 'AccessibleBundle', 'AccessibleComponent', 'AccessibleContext', 'AccessibleEditableText', 'AccessibleExtendedComponent', 'AccessibleExtendedTable', 'AccessibleExtendedText', 'AccessibleHyperlink', 'AccessibleHypertext', 'AccessibleIcon', 'AccessibleKeyBinding', 'AccessibleRelation', 'AccessibleRelationSet', 'AccessibleResourceBundle', 'AccessibleRole', 'AccessibleSelection', 'AccessibleState', 'AccessibleStateSet', 'AccessibleStreamable', 'AccessibleTable', 'AccessibleTableModelChange', 'AccessibleText', 'AccessibleTextSequence', 'AccessibleValue'
+ ),
+ 56 => array (
+ 'ActivityCompletedException', 'ActivityRequiredException', 'InvalidActivityException'
+ ),
+ 57 => array (
+ 'BadPaddingException', 'Cipher', 'CipherInputStream', 'CipherOutputStream', 'CipherSpi', 'EncryptedPrivateKeyInfo', 'ExemptionMechanism', 'ExemptionMechanismException', 'ExemptionMechanismSpi', 'IllegalBlockSizeException', 'KeyAgreement', 'KeyAgreementSpi', 'KeyGenerator', 'KeyGeneratorSpi', 'Mac', 'MacSpi', 'NoSuchPaddingException', 'NullCipher', 'SealedObject', 'SecretKey', 'SecretKeyFactory', 'SecretKeyFactorySpi', 'ShortBufferException'
+ ),
+ 58 => array (
+ 'DHKey', 'DHPrivateKey', 'DHPublicKey', 'PBEKey'
+ ),
+ 59 => array (
+ 'DESKeySpec', 'DESedeKeySpec', 'DHGenParameterSpec', 'DHParameterSpec', 'DHPrivateKeySpec', 'DHPublicKeySpec', 'IvParameterSpec', 'OAEPParameterSpec', 'PBEKeySpec', 'PBEParameterSpec', 'PSource', 'PSource.PSpecified', 'RC2ParameterSpec', 'RC5ParameterSpec', 'SecretKeySpec'
+ ),
+ 60 => array (
+ 'IIOException', 'IIOImage', 'IIOParam', 'IIOParamController', 'ImageIO', 'ImageReadParam', 'ImageReader', 'ImageTranscoder', 'ImageTypeSpecifier', 'ImageWriteParam', 'ImageWriter'
+ ),
+ 61 => array (
+ 'IIOReadProgressListener', 'IIOReadUpdateListener', 'IIOReadWarningListener', 'IIOWriteProgressListener', 'IIOWriteWarningListener'
+ ),
+ 62 => array (
+ 'IIOInvalidTreeException', 'IIOMetadata', 'IIOMetadataController', 'IIOMetadataFormat', 'IIOMetadataFormatImpl', 'IIOMetadataNode'
+ ),
+ 63 => array (
+ 'BMPImageWriteParam'
+ ),
+ 64 => array (
+ 'JPEGHuffmanTable', 'JPEGImageReadParam', 'JPEGImageWriteParam', 'JPEGQTable'
+ ),
+ 65 => array (
+ 'IIORegistry', 'IIOServiceProvider', 'ImageInputStreamSpi', 'ImageOutputStreamSpi', 'ImageReaderSpi', 'ImageReaderWriterSpi', 'ImageTranscoderSpi', 'ImageWriterSpi', 'RegisterableService', 'ServiceRegistry', 'ServiceRegistry.Filter'
+ ),
+ 66 => array (
+ 'FileCacheImageInputStream', 'FileCacheImageOutputStream', 'FileImageInputStream', 'FileImageOutputStream', 'IIOByteBuffer', 'ImageInputStream', 'ImageInputStreamImpl', 'ImageOutputStream', 'ImageOutputStreamImpl', 'MemoryCacheImageInputStream', 'MemoryCacheImageOutputStream'
+ ),
+ 67 => array (
+ 'AttributeChangeNotification', 'AttributeChangeNotificationFilter', 'AttributeNotFoundException', 'AttributeValueExp', 'BadAttributeValueExpException', 'BadBinaryOpValueExpException', 'BadStringOperationException', 'Descriptor', 'DescriptorAccess', 'DynamicMBean', 'InstanceAlreadyExistsException', 'InstanceNotFoundException', 'InvalidApplicationException', 'JMException', 'JMRuntimeException', 'ListenerNotFoundException', 'MBeanAttributeInfo', 'MBeanConstructorInfo', 'MBeanException', 'MBeanFeatureInfo', 'MBeanInfo', 'MBeanNotificationInfo', 'MBeanOperationInfo', 'MBeanParameterInfo', 'MBeanPermission', 'MBeanRegistration', 'MBeanRegistrationException', 'MBeanServer', 'MBeanServerBuilder', 'MBeanServerConnection', 'MBeanServerDelegate', 'MBeanServerDelegateMBean', 'MBeanServerFactory', 'MBeanServerInvocationHandler', 'MBeanServerNotification', 'MBeanServerPermission', 'MBeanTrustPermission', 'MalformedObjectNameException', 'NotCompliantMBeanException', 'Notification', 'NotificationBroadcaster',
+ 'NotificationBroadcasterSupport', 'NotificationEmitter', 'NotificationFilter', 'NotificationFilterSupport', 'NotificationListener', 'ObjectInstance', 'ObjectName', 'OperationsException', 'PersistentMBean', 'Query', 'QueryEval', 'QueryExp', 'ReflectionException', 'RuntimeErrorException', 'RuntimeMBeanException', 'RuntimeOperationsException', 'ServiceNotFoundException', 'StandardMBean', 'StringValueExp', 'ValueExp'
+ ),
+ 68 => array (
+ 'ClassLoaderRepository', 'MLet', 'MLetMBean', 'PrivateClassLoader', 'PrivateMLet'
+ ),
+ 69 => array (
+ 'DescriptorSupport', 'InvalidTargetObjectTypeException', 'ModelMBean', 'ModelMBeanAttributeInfo', 'ModelMBeanConstructorInfo', 'ModelMBeanInfo', 'ModelMBeanInfoSupport', 'ModelMBeanNotificationBroadcaster', 'ModelMBeanNotificationInfo', 'ModelMBeanOperationInfo', 'RequiredModelMBean', 'XMLParseException'
+ ),
+ 70 => array (
+ 'CounterMonitor', 'CounterMonitorMBean', 'GaugeMonitor', 'GaugeMonitorMBean', 'Monitor', 'MonitorMBean', 'MonitorNotification', 'MonitorSettingException', 'StringMonitor', 'StringMonitorMBean'
+ ),
+ 71 => array (
+ 'ArrayType', 'CompositeData', 'CompositeDataSupport', 'CompositeType', 'InvalidOpenTypeException', 'KeyAlreadyExistsException', 'OpenDataException', 'OpenMBeanAttributeInfo', 'OpenMBeanAttributeInfoSupport', 'OpenMBeanConstructorInfo', 'OpenMBeanConstructorInfoSupport', 'OpenMBeanInfo', 'OpenMBeanInfoSupport', 'OpenMBeanOperationInfo', 'OpenMBeanOperationInfoSupport', 'OpenMBeanParameterInfo', 'OpenMBeanParameterInfoSupport', 'SimpleType', 'TabularData', 'TabularDataSupport', 'TabularType'
+ ),
+ 72 => array (
+ 'InvalidRelationIdException', 'InvalidRelationServiceException', 'InvalidRelationTypeException', 'InvalidRoleInfoException', 'InvalidRoleValueException', 'MBeanServerNotificationFilter', 'Relation', 'RelationException', 'RelationNotFoundException', 'RelationNotification', 'RelationService', 'RelationServiceMBean', 'RelationServiceNotRegisteredException', 'RelationSupport', 'RelationSupportMBean', 'RelationType', 'RelationTypeNotFoundException', 'RelationTypeSupport', 'Role', 'RoleInfo', 'RoleInfoNotFoundException', 'RoleList', 'RoleNotFoundException', 'RoleResult', 'RoleStatus', 'RoleUnresolved', 'RoleUnresolvedList'
+ ),
+ 73 => array (
+ 'JMXAuthenticator', 'JMXConnectionNotification', 'JMXConnector', 'JMXConnectorFactory', 'JMXConnectorProvider', 'JMXConnectorServer', 'JMXConnectorServerFactory', 'JMXConnectorServerMBean', 'JMXConnectorServerProvider', 'JMXPrincipal', 'JMXProviderException', 'JMXServerErrorException', 'JMXServiceURL', 'MBeanServerForwarder', 'NotificationResult', 'SubjectDelegationPermission', 'TargetedNotification'
+ ),
+ 74 => array (
+ 'RMIConnection', 'RMIConnectionImpl', 'RMIConnectionImpl_Stub', 'RMIConnector', 'RMIConnectorServer', 'RMIIIOPServerImpl', 'RMIJRMPServerImpl', 'RMIServer', 'RMIServerImpl', 'RMIServerImpl_Stub'
+ ),
+ 75 => array (
+ 'TimerAlarmClockNotification', 'TimerMBean', 'TimerNotification'
+ ),
+ 76 => array (
+ 'AuthenticationNotSupportedException', 'BinaryRefAddr', 'CannotProceedException', 'CommunicationException', 'CompositeName', 'CompoundName', 'ConfigurationException', 'ContextNotEmptyException', 'InitialContext', 'InsufficientResourcesException', 'InterruptedNamingException', 'InvalidNameException', 'LimitExceededException', 'LinkException', 'LinkLoopException', 'LinkRef', 'MalformedLinkException', 'Name', 'NameAlreadyBoundException', 'NameClassPair', 'NameNotFoundException', 'NameParser', 'NamingEnumeration', 'NamingException', 'NamingSecurityException', 'NoInitialContextException', 'NoPermissionException', 'NotContextException', 'OperationNotSupportedException', 'PartialResultException', 'RefAddr', 'Referenceable', 'ReferralException', 'ServiceUnavailableException', 'SizeLimitExceededException', 'StringRefAddr', 'TimeLimitExceededException'
+ ),
+ 77 => array (
+ 'AttributeInUseException', 'AttributeModificationException', 'BasicAttribute', 'BasicAttributes', 'DirContext', 'InitialDirContext', 'InvalidAttributeIdentifierException', 'InvalidAttributesException', 'InvalidSearchControlsException', 'InvalidSearchFilterException', 'ModificationItem', 'NoSuchAttributeException', 'SchemaViolationException', 'SearchControls', 'SearchResult'
+ ),
+ 78 => array (
+ 'EventContext', 'EventDirContext', 'NamespaceChangeListener', 'NamingEvent', 'NamingExceptionEvent', 'NamingListener', 'ObjectChangeListener'
+ ),
+ 79 => array (
+ 'BasicControl', 'ControlFactory', 'ExtendedRequest', 'ExtendedResponse', 'HasControls', 'InitialLdapContext', 'LdapContext', 'LdapName', 'LdapReferralException', 'ManageReferralControl', 'PagedResultsControl', 'PagedResultsResponseControl', 'Rdn', 'SortControl', 'SortKey', 'SortResponseControl', 'StartTlsRequest', 'StartTlsResponse', 'UnsolicitedNotification', 'UnsolicitedNotificationEvent', 'UnsolicitedNotificationListener'
+ ),
+ 80 => array (
+ 'DirObjectFactory', 'DirStateFactory', 'DirStateFactory.Result', 'DirectoryManager', 'InitialContextFactory', 'InitialContextFactoryBuilder', 'NamingManager', 'ObjectFactory', 'ObjectFactoryBuilder', 'ResolveResult', 'Resolver', 'StateFactory'
+ ),
+ 81 => array (
+ 'ServerSocketFactory', 'SocketFactory'
+ ),
+ 82 => array (
+ 'CertPathTrustManagerParameters', 'HandshakeCompletedEvent', 'HandshakeCompletedListener', 'HostnameVerifier', 'HttpsURLConnection', 'KeyManager', 'KeyManagerFactory', 'KeyManagerFactorySpi', 'KeyStoreBuilderParameters', 'ManagerFactoryParameters', 'SSLContext', 'SSLContextSpi', 'SSLEngine', 'SSLEngineResult', 'SSLEngineResult.HandshakeStatus', 'SSLEngineResult.Status', 'SSLException', 'SSLHandshakeException', 'SSLKeyException', 'SSLPeerUnverifiedException', 'SSLPermission', 'SSLProtocolException', 'SSLServerSocket', 'SSLServerSocketFactory', 'SSLSession', 'SSLSessionBindingEvent', 'SSLSessionBindingListener', 'SSLSessionContext', 'SSLSocket', 'SSLSocketFactory', 'TrustManager', 'TrustManagerFactory', 'TrustManagerFactorySpi', 'X509ExtendedKeyManager', 'X509KeyManager', 'X509TrustManager'
+ ),
+ 83 => array (
+ 'AttributeException', 'CancelablePrintJob', 'Doc', 'DocFlavor', 'DocFlavor.BYTE_ARRAY', 'DocFlavor.CHAR_ARRAY', 'DocFlavor.INPUT_STREAM', 'DocFlavor.READER', 'DocFlavor.SERVICE_FORMATTED', 'DocFlavor.STRING', 'DocFlavor.URL', 'DocPrintJob', 'FlavorException', 'MultiDoc', 'MultiDocPrintJob', 'MultiDocPrintService', 'PrintException', 'PrintService', 'PrintServiceLookup', 'ServiceUI', 'ServiceUIFactory', 'SimpleDoc', 'StreamPrintService', 'StreamPrintServiceFactory', 'URIException'
+ ),
+ 84 => array (
+ 'AttributeSetUtilities', 'DateTimeSyntax', 'DocAttribute', 'DocAttributeSet', 'EnumSyntax', 'HashAttributeSet', 'HashDocAttributeSet', 'HashPrintJobAttributeSet', 'HashPrintRequestAttributeSet', 'HashPrintServiceAttributeSet', 'IntegerSyntax', 'PrintJobAttribute', 'PrintJobAttributeSet', 'PrintRequestAttribute', 'PrintRequestAttributeSet', 'PrintServiceAttribute', 'PrintServiceAttributeSet', 'ResolutionSyntax', 'SetOfIntegerSyntax', 'Size2DSyntax', 'SupportedValuesAttribute', 'TextSyntax', 'URISyntax', 'UnmodifiableSetException'
+ ),
+ 85 => array (
+ 'Chromaticity', 'ColorSupported', 'Compression', 'Copies', 'CopiesSupported', 'DateTimeAtCompleted', 'DateTimeAtCreation', 'DateTimeAtProcessing', 'Destination', 'DocumentName', 'Fidelity', 'Finishings', 'JobHoldUntil', 'JobImpressions', 'JobImpressionsCompleted', 'JobImpressionsSupported', 'JobKOctets', 'JobKOctetsProcessed', 'JobKOctetsSupported', 'JobMediaSheets', 'JobMediaSheetsCompleted', 'JobMediaSheetsSupported', 'JobMessageFromOperator', 'JobName', 'JobOriginatingUserName', 'JobPriority', 'JobPrioritySupported', 'JobSheets', 'JobState', 'JobStateReason', 'JobStateReasons', 'Media', 'MediaName', 'MediaPrintableArea', 'MediaSize', 'MediaSize.Engineering', 'MediaSize.ISO', 'MediaSize.JIS', 'MediaSize.NA', 'MediaSize.Other', 'MediaSizeName', 'MediaTray', 'MultipleDocumentHandling', 'NumberOfDocuments', 'NumberOfInterveningJobs', 'NumberUp', 'NumberUpSupported', 'OrientationRequested', 'OutputDeviceAssigned', 'PDLOverrideSupported', 'PageRanges', 'PagesPerMinute', 'PagesPerMinuteColor',
+ 'PresentationDirection', 'PrintQuality', 'PrinterInfo', 'PrinterIsAcceptingJobs', 'PrinterLocation', 'PrinterMakeAndModel', 'PrinterMessageFromOperator', 'PrinterMoreInfo', 'PrinterMoreInfoManufacturer', 'PrinterName', 'PrinterResolution', 'PrinterState', 'PrinterStateReason', 'PrinterStateReasons', 'PrinterURI', 'QueuedJobCount', 'ReferenceUriSchemesSupported', 'RequestingUserName', 'Severity', 'SheetCollate', 'Sides'
+ ),
+ 86 => array (
+ 'PrintEvent', 'PrintJobAdapter', 'PrintJobAttributeEvent', 'PrintJobAttributeListener', 'PrintJobEvent', 'PrintJobListener', 'PrintServiceAttributeEvent', 'PrintServiceAttributeListener'
+ ),
+ 87 => array (
+ 'PortableRemoteObject'
+ ),
+ 88 => array (
+ 'ClassDesc', 'PortableRemoteObjectDelegate', 'Stub', 'StubDelegate', 'Tie', 'Util', 'UtilDelegate', 'ValueHandler', 'ValueHandlerMultiFormat'
+ ),
+ 89 => array (
+ 'SslRMIClientSocketFactory', 'SslRMIServerSocketFactory'
+ ),
+ 90 => array (
+ 'AuthPermission', 'DestroyFailedException', 'Destroyable', 'PrivateCredentialPermission', 'RefreshFailedException', 'Refreshable', 'Subject', 'SubjectDomainCombiner'
+ ),
+ 91 => array (
+ 'Callback', 'CallbackHandler', 'ChoiceCallback', 'ConfirmationCallback', 'LanguageCallback', 'NameCallback', 'PasswordCallback', 'TextInputCallback', 'TextOutputCallback', 'UnsupportedCallbackException'
+ ),
+ 92 => array (
+ 'DelegationPermission', 'KerberosKey', 'KerberosPrincipal', 'KerberosTicket', 'ServicePermission'
+ ),
+ 93 => array (
+ 'AccountException', 'AccountExpiredException', 'AccountLockedException', 'AccountNotFoundException', 'AppConfigurationEntry', 'AppConfigurationEntry.LoginModuleControlFlag', 'Configuration', 'CredentialException', 'CredentialExpiredException', 'CredentialNotFoundException', 'FailedLoginException', 'LoginContext', 'LoginException'
+ ),
+ 94 => array (
+ 'LoginModule'
+ ),
+ 95 => array (
+ 'X500Principal', 'X500PrivateCredential'
+ ),
+ 96 => array (
+ 'AuthorizeCallback', 'RealmCallback', 'RealmChoiceCallback', 'Sasl', 'SaslClient', 'SaslClientFactory', 'SaslException', 'SaslServer', 'SaslServerFactory'
+ ),
+ 97 => array (
+ 'ControllerEventListener', 'Instrument', 'InvalidMidiDataException', 'MetaEventListener', 'MetaMessage', 'MidiChannel', 'MidiDevice', 'MidiDevice.Info', 'MidiEvent', 'MidiFileFormat', 'MidiMessage', 'MidiSystem', 'MidiUnavailableException', 'Patch', 'Receiver', 'Sequence', 'Sequencer', 'Sequencer.SyncMode', 'ShortMessage', 'Soundbank', 'SoundbankResource', 'Synthesizer', 'SysexMessage', 'Track', 'Transmitter', 'VoiceStatus'
+ ),
+ 98 => array (
+ 'MidiDeviceProvider', 'MidiFileReader', 'MidiFileWriter', 'SoundbankReader'
+ ),
+ 99 => array (
+ 'AudioFileFormat', 'AudioFileFormat.Type', 'AudioFormat', 'AudioFormat.Encoding', 'AudioInputStream', 'AudioPermission', 'AudioSystem', 'BooleanControl', 'BooleanControl.Type', 'Clip', 'CompoundControl', 'CompoundControl.Type', 'Control.Type', 'DataLine', 'DataLine.Info', 'EnumControl', 'EnumControl.Type', 'FloatControl', 'FloatControl.Type', 'Line', 'Line.Info', 'LineEvent', 'LineEvent.Type', 'LineListener', 'LineUnavailableException', 'Mixer', 'Mixer.Info', 'Port', 'Port.Info', 'ReverbType', 'SourceDataLine', 'TargetDataLine', 'UnsupportedAudioFileException'
+ ),
+ 100 => array (
+ 'AudioFileReader', 'AudioFileWriter', 'FormatConversionProvider', 'MixerProvider'
+ ),
+ 101 => array (
+ 'ConnectionEvent', 'ConnectionEventListener', 'ConnectionPoolDataSource', 'DataSource', 'PooledConnection', 'RowSet', 'RowSetEvent', 'RowSetInternal', 'RowSetListener', 'RowSetMetaData', 'RowSetReader', 'RowSetWriter', 'XAConnection', 'XADataSource'
+ ),
+ 102 => array (
+ 'BaseRowSet', 'CachedRowSet', 'FilteredRowSet', 'JdbcRowSet', 'JoinRowSet', 'Joinable', 'Predicate', 'RowSetMetaDataImpl', 'RowSetWarning', 'WebRowSet'
+ ),
+ 103 => array (
+ 'SQLInputImpl', 'SQLOutputImpl', 'SerialArray', 'SerialBlob', 'SerialClob', 'SerialDatalink', 'SerialException', 'SerialJavaObject', 'SerialRef', 'SerialStruct'
+ ),
+ 104 => array (
+ 'SyncFactory', 'SyncFactoryException', 'SyncProvider', 'SyncProviderException', 'SyncResolver', 'TransactionalWriter', 'XmlReader', 'XmlWriter'
+ ),
+ 105 => array (
+ 'AbstractAction', 'AbstractButton', 'AbstractCellEditor', 'AbstractListModel', 'AbstractSpinnerModel', 'Action', 'ActionMap', 'BorderFactory', 'BoundedRangeModel', 'Box', 'Box.Filler', 'BoxLayout', 'ButtonGroup', 'ButtonModel', 'CellEditor', 'CellRendererPane', 'ComboBoxEditor', 'ComboBoxModel', 'ComponentInputMap', 'DebugGraphics', 'DefaultBoundedRangeModel', 'DefaultButtonModel', 'DefaultCellEditor', 'DefaultComboBoxModel', 'DefaultDesktopManager', 'DefaultFocusManager', 'DefaultListCellRenderer', 'DefaultListCellRenderer.UIResource', 'DefaultListModel', 'DefaultListSelectionModel', 'DefaultSingleSelectionModel', 'DesktopManager', 'FocusManager', 'GrayFilter', 'Icon', 'ImageIcon', 'InputMap', 'InputVerifier', 'InternalFrameFocusTraversalPolicy', 'JApplet', 'JButton', 'JCheckBox', 'JCheckBoxMenuItem', 'JColorChooser', 'JComboBox', 'JComboBox.KeySelectionManager', 'JComponent', 'JDesktopPane', 'JDialog', 'JEditorPane', 'JFileChooser', 'JFormattedTextField', 'JFormattedTextField.AbstractFormatter',
+ 'JFormattedTextField.AbstractFormatterFactory', 'JFrame', 'JInternalFrame', 'JInternalFrame.JDesktopIcon', 'JLabel', 'JLayeredPane', 'JList', 'JMenu', 'JMenuBar', 'JMenuItem', 'JOptionPane', 'JPanel', 'JPasswordField', 'JPopupMenu', 'JPopupMenu.Separator', 'JProgressBar', 'JRadioButton', 'JRadioButtonMenuItem', 'JRootPane', 'JScrollBar', 'JScrollPane', 'JSeparator', 'JSlider', 'JSpinner', 'JSpinner.DateEditor', 'JSpinner.DefaultEditor', 'JSpinner.ListEditor', 'JSpinner.NumberEditor', 'JSplitPane', 'JTabbedPane', 'JTable', 'JTable.PrintMode', 'JTextArea', 'JTextField', 'JTextPane', 'JToggleButton', 'JToggleButton.ToggleButtonModel', 'JToolBar', 'JToolBar.Separator', 'JToolTip', 'JTree', 'JTree.DynamicUtilTreeNode', 'JTree.EmptySelectionModel', 'JViewport', 'JWindow', 'KeyStroke', 'LayoutFocusTraversalPolicy', 'ListCellRenderer', 'ListModel', 'ListSelectionModel', 'LookAndFeel', 'MenuElement', 'MenuSelectionManager', 'MutableComboBoxModel', 'OverlayLayout', 'Popup', 'PopupFactory', 'ProgressMonitor',
+ 'ProgressMonitorInputStream', 'Renderer', 'RepaintManager', 'RootPaneContainer', 'ScrollPaneConstants', 'ScrollPaneLayout', 'ScrollPaneLayout.UIResource', 'Scrollable', 'SingleSelectionModel', 'SizeRequirements', 'SizeSequence', 'SortingFocusTraversalPolicy', 'SpinnerDateModel', 'SpinnerListModel', 'SpinnerModel', 'SpinnerNumberModel', 'Spring', 'SpringLayout', 'SpringLayout.Constraints', 'SwingConstants', 'SwingUtilities', 'ToolTipManager', 'TransferHandler', 'UIDefaults', 'UIDefaults.ActiveValue', 'UIDefaults.LazyInputMap', 'UIDefaults.LazyValue', 'UIDefaults.ProxyLazyValue', 'UIManager', 'UIManager.LookAndFeelInfo', 'UnsupportedLookAndFeelException', 'ViewportLayout', 'WindowConstants'
+ ),
+ 106 => array (
+ 'AbstractBorder', 'BevelBorder', 'Border', 'CompoundBorder', 'EmptyBorder', 'EtchedBorder', 'LineBorder', 'MatteBorder', 'SoftBevelBorder', 'TitledBorder'
+ ),
+ 107 => array (
+ 'AbstractColorChooserPanel', 'ColorChooserComponentFactory', 'ColorSelectionModel', 'DefaultColorSelectionModel'
+ ),
+ 108 => array (
+ 'AncestorEvent', 'AncestorListener', 'CaretEvent', 'CaretListener', 'CellEditorListener', 'ChangeEvent', 'ChangeListener', 'DocumentEvent.ElementChange', 'DocumentEvent.EventType', 'DocumentListener', 'EventListenerList', 'HyperlinkEvent', 'HyperlinkEvent.EventType', 'HyperlinkListener', 'InternalFrameAdapter', 'InternalFrameEvent', 'InternalFrameListener', 'ListDataEvent', 'ListDataListener', 'ListSelectionEvent', 'ListSelectionListener', 'MenuDragMouseEvent', 'MenuDragMouseListener', 'MenuEvent', 'MenuKeyEvent', 'MenuKeyListener', 'MenuListener', 'MouseInputAdapter', 'MouseInputListener', 'PopupMenuEvent', 'PopupMenuListener', 'SwingPropertyChangeSupport', 'TableColumnModelEvent', 'TableColumnModelListener', 'TableModelEvent', 'TableModelListener', 'TreeExpansionEvent', 'TreeExpansionListener', 'TreeModelEvent', 'TreeModelListener', 'TreeSelectionEvent', 'TreeSelectionListener', 'TreeWillExpandListener', 'UndoableEditEvent', 'UndoableEditListener'
+ ),
+ 109 => array (
+ 'FileSystemView', 'FileView'
+ ),
+ 110 => array (
+ 'ActionMapUIResource', 'BorderUIResource', 'BorderUIResource.BevelBorderUIResource', 'BorderUIResource.CompoundBorderUIResource', 'BorderUIResource.EmptyBorderUIResource', 'BorderUIResource.EtchedBorderUIResource', 'BorderUIResource.LineBorderUIResource', 'BorderUIResource.MatteBorderUIResource', 'BorderUIResource.TitledBorderUIResource', 'ButtonUI', 'ColorChooserUI', 'ColorUIResource', 'ComboBoxUI', 'ComponentInputMapUIResource', 'ComponentUI', 'DesktopIconUI', 'DesktopPaneUI', 'DimensionUIResource', 'FileChooserUI', 'FontUIResource', 'IconUIResource', 'InputMapUIResource', 'InsetsUIResource', 'InternalFrameUI', 'LabelUI', 'ListUI', 'MenuBarUI', 'MenuItemUI', 'OptionPaneUI', 'PanelUI', 'PopupMenuUI', 'ProgressBarUI', 'RootPaneUI', 'ScrollBarUI', 'ScrollPaneUI', 'SeparatorUI', 'SliderUI', 'SpinnerUI', 'SplitPaneUI', 'TabbedPaneUI', 'TableHeaderUI', 'TableUI', 'TextUI', 'ToolBarUI', 'ToolTipUI', 'TreeUI', 'UIResource', 'ViewportUI'
+ ),
+ 111 => array (
+ 'BasicArrowButton', 'BasicBorders', 'BasicBorders.ButtonBorder', 'BasicBorders.FieldBorder', 'BasicBorders.MarginBorder', 'BasicBorders.MenuBarBorder', 'BasicBorders.RadioButtonBorder', 'BasicBorders.RolloverButtonBorder', 'BasicBorders.SplitPaneBorder', 'BasicBorders.ToggleButtonBorder', 'BasicButtonListener', 'BasicButtonUI', 'BasicCheckBoxMenuItemUI', 'BasicCheckBoxUI', 'BasicColorChooserUI', 'BasicComboBoxEditor', 'BasicComboBoxEditor.UIResource', 'BasicComboBoxRenderer', 'BasicComboBoxRenderer.UIResource', 'BasicComboBoxUI', 'BasicComboPopup', 'BasicDesktopIconUI', 'BasicDesktopPaneUI', 'BasicDirectoryModel', 'BasicEditorPaneUI', 'BasicFileChooserUI', 'BasicFormattedTextFieldUI', 'BasicGraphicsUtils', 'BasicHTML', 'BasicIconFactory', 'BasicInternalFrameTitlePane', 'BasicInternalFrameUI', 'BasicLabelUI', 'BasicListUI', 'BasicLookAndFeel', 'BasicMenuBarUI', 'BasicMenuItemUI', 'BasicMenuUI', 'BasicOptionPaneUI', 'BasicOptionPaneUI.ButtonAreaLayout', 'BasicPanelUI', 'BasicPasswordFieldUI',
+ 'BasicPopupMenuSeparatorUI', 'BasicPopupMenuUI', 'BasicProgressBarUI', 'BasicRadioButtonMenuItemUI', 'BasicRadioButtonUI', 'BasicRootPaneUI', 'BasicScrollBarUI', 'BasicScrollPaneUI', 'BasicSeparatorUI', 'BasicSliderUI', 'BasicSpinnerUI', 'BasicSplitPaneDivider', 'BasicSplitPaneUI', 'BasicTabbedPaneUI', 'BasicTableHeaderUI', 'BasicTableUI', 'BasicTextAreaUI', 'BasicTextFieldUI', 'BasicTextPaneUI', 'BasicTextUI', 'BasicTextUI.BasicCaret', 'BasicTextUI.BasicHighlighter', 'BasicToggleButtonUI', 'BasicToolBarSeparatorUI', 'BasicToolBarUI', 'BasicToolTipUI', 'BasicTreeUI', 'BasicViewportUI', 'ComboPopup', 'DefaultMenuLayout'
+ ),
+ 112 => array (
+ 'DefaultMetalTheme', 'MetalBorders', 'MetalBorders.ButtonBorder', 'MetalBorders.Flush3DBorder', 'MetalBorders.InternalFrameBorder', 'MetalBorders.MenuBarBorder', 'MetalBorders.MenuItemBorder', 'MetalBorders.OptionDialogBorder', 'MetalBorders.PaletteBorder', 'MetalBorders.PopupMenuBorder', 'MetalBorders.RolloverButtonBorder', 'MetalBorders.ScrollPaneBorder', 'MetalBorders.TableHeaderBorder', 'MetalBorders.TextFieldBorder', 'MetalBorders.ToggleButtonBorder', 'MetalBorders.ToolBarBorder', 'MetalButtonUI', 'MetalCheckBoxIcon', 'MetalCheckBoxUI', 'MetalComboBoxButton', 'MetalComboBoxEditor', 'MetalComboBoxEditor.UIResource', 'MetalComboBoxIcon', 'MetalComboBoxUI', 'MetalDesktopIconUI', 'MetalFileChooserUI', 'MetalIconFactory', 'MetalIconFactory.FileIcon16', 'MetalIconFactory.FolderIcon16', 'MetalIconFactory.PaletteCloseIcon', 'MetalIconFactory.TreeControlIcon', 'MetalIconFactory.TreeFolderIcon', 'MetalIconFactory.TreeLeafIcon', 'MetalInternalFrameTitlePane', 'MetalInternalFrameUI', 'MetalLabelUI',
+ 'MetalLookAndFeel', 'MetalMenuBarUI', 'MetalPopupMenuSeparatorUI', 'MetalProgressBarUI', 'MetalRadioButtonUI', 'MetalRootPaneUI', 'MetalScrollBarUI', 'MetalScrollButton', 'MetalScrollPaneUI', 'MetalSeparatorUI', 'MetalSliderUI', 'MetalSplitPaneUI', 'MetalTabbedPaneUI', 'MetalTextFieldUI', 'MetalTheme', 'MetalToggleButtonUI', 'MetalToolBarUI', 'MetalToolTipUI', 'MetalTreeUI', 'OceanTheme'
+ ),
+ 113 => array (
+ 'MultiButtonUI', 'MultiColorChooserUI', 'MultiComboBoxUI', 'MultiDesktopIconUI', 'MultiDesktopPaneUI', 'MultiFileChooserUI', 'MultiInternalFrameUI', 'MultiLabelUI', 'MultiListUI', 'MultiLookAndFeel', 'MultiMenuBarUI', 'MultiMenuItemUI', 'MultiOptionPaneUI', 'MultiPanelUI', 'MultiPopupMenuUI', 'MultiProgressBarUI', 'MultiRootPaneUI', 'MultiScrollBarUI', 'MultiScrollPaneUI', 'MultiSeparatorUI', 'MultiSliderUI', 'MultiSpinnerUI', 'MultiSplitPaneUI', 'MultiTabbedPaneUI', 'MultiTableHeaderUI', 'MultiTableUI', 'MultiTextUI', 'MultiToolBarUI', 'MultiToolTipUI', 'MultiTreeUI', 'MultiViewportUI'
+ ),
+ 114 => array (
+ 'ColorType', 'Region', 'SynthConstants', 'SynthContext', 'SynthGraphicsUtils', 'SynthLookAndFeel', 'SynthPainter', 'SynthStyle', 'SynthStyleFactory'
+ ),
+ 115 => array (
+ 'AbstractTableModel', 'DefaultTableCellRenderer', 'DefaultTableCellRenderer.UIResource', 'DefaultTableColumnModel', 'DefaultTableModel', 'JTableHeader', 'TableCellEditor', 'TableCellRenderer', 'TableColumn', 'TableColumnModel', 'TableModel'
+ ),
+ 116 => array (
+ 'AbstractDocument', 'AbstractDocument.AttributeContext', 'AbstractDocument.Content', 'AbstractDocument.ElementEdit', 'AbstractWriter', 'AsyncBoxView', 'AttributeSet.CharacterAttribute', 'AttributeSet.ColorAttribute', 'AttributeSet.FontAttribute', 'AttributeSet.ParagraphAttribute', 'BadLocationException', 'BoxView', 'Caret', 'ChangedCharSetException', 'ComponentView', 'CompositeView', 'DateFormatter', 'DefaultCaret', 'DefaultEditorKit', 'DefaultEditorKit.BeepAction', 'DefaultEditorKit.CopyAction', 'DefaultEditorKit.CutAction', 'DefaultEditorKit.DefaultKeyTypedAction', 'DefaultEditorKit.InsertBreakAction', 'DefaultEditorKit.InsertContentAction', 'DefaultEditorKit.InsertTabAction', 'DefaultEditorKit.PasteAction', 'DefaultFormatter', 'DefaultFormatterFactory', 'DefaultHighlighter', 'DefaultHighlighter.DefaultHighlightPainter', 'DefaultStyledDocument', 'DefaultStyledDocument.AttributeUndoableEdit', 'DefaultStyledDocument.ElementSpec', 'DefaultTextUI', 'DocumentFilter', 'DocumentFilter.FilterBypass',
+ 'EditorKit', 'ElementIterator', 'FieldView', 'FlowView', 'FlowView.FlowStrategy', 'GapContent', 'GlyphView', 'GlyphView.GlyphPainter', 'Highlighter', 'Highlighter.Highlight', 'Highlighter.HighlightPainter', 'IconView', 'InternationalFormatter', 'JTextComponent', 'JTextComponent.KeyBinding', 'Keymap', 'LabelView', 'LayeredHighlighter', 'LayeredHighlighter.LayerPainter', 'LayoutQueue', 'MaskFormatter', 'MutableAttributeSet', 'NavigationFilter', 'NavigationFilter.FilterBypass', 'NumberFormatter', 'PasswordView', 'PlainDocument', 'PlainView', 'Position', 'Position.Bias', 'Segment', 'SimpleAttributeSet', 'StringContent', 'Style', 'StyleConstants', 'StyleConstants.CharacterConstants', 'StyleConstants.ColorConstants', 'StyleConstants.FontConstants', 'StyleConstants.ParagraphConstants', 'StyleContext', 'StyledDocument', 'StyledEditorKit', 'StyledEditorKit.AlignmentAction', 'StyledEditorKit.BoldAction', 'StyledEditorKit.FontFamilyAction', 'StyledEditorKit.FontSizeAction', 'StyledEditorKit.ForegroundAction',
+ 'StyledEditorKit.ItalicAction', 'StyledEditorKit.StyledTextAction', 'StyledEditorKit.UnderlineAction', 'TabExpander', 'TabSet', 'TabStop', 'TabableView', 'TableView', 'TextAction', 'Utilities', 'View', 'ViewFactory', 'WrappedPlainView', 'ZoneView'
+ ),
+ 117 => array (
+ 'BlockView', 'CSS', 'CSS.Attribute', 'FormSubmitEvent', 'FormSubmitEvent.MethodType', 'FormView', 'HTML', 'HTML.Attribute', 'HTML.Tag', 'HTML.UnknownTag', 'HTMLDocument', 'HTMLDocument.Iterator', 'HTMLEditorKit', 'HTMLEditorKit.HTMLFactory', 'HTMLEditorKit.HTMLTextAction', 'HTMLEditorKit.InsertHTMLTextAction', 'HTMLEditorKit.LinkController', 'HTMLEditorKit.Parser', 'HTMLEditorKit.ParserCallback', 'HTMLFrameHyperlinkEvent', 'HTMLWriter', 'ImageView', 'InlineView', 'ListView', 'MinimalHTMLWriter', 'ObjectView', 'Option', 'StyleSheet', 'StyleSheet.BoxPainter', 'StyleSheet.ListPainter'
+ ),
+ 118 => array (
+ 'ContentModel', 'DTD', 'DTDConstants', 'DocumentParser', 'ParserDelegator', 'TagElement'
+ ),
+ 119 => array (
+ 'RTFEditorKit'
+ ),
+ 120 => array (
+ 'AbstractLayoutCache', 'AbstractLayoutCache.NodeDimensions', 'DefaultMutableTreeNode', 'DefaultTreeCellEditor', 'DefaultTreeCellRenderer', 'DefaultTreeModel', 'DefaultTreeSelectionModel', 'ExpandVetoException', 'FixedHeightLayoutCache', 'MutableTreeNode', 'RowMapper', 'TreeCellEditor', 'TreeCellRenderer', 'TreeModel', 'TreeNode', 'TreePath', 'TreeSelectionModel', 'VariableHeightLayoutCache'
+ ),
+ 121 => array (
+ 'AbstractUndoableEdit', 'CannotRedoException', 'CannotUndoException', 'CompoundEdit', 'StateEdit', 'StateEditable', 'UndoManager', 'UndoableEdit', 'UndoableEditSupport'
+ ),
+ 122 => array (
+ 'InvalidTransactionException', 'TransactionRequiredException', 'TransactionRolledbackException'
+ ),
+ 123 => array (
+ 'XAException', 'XAResource', 'Xid'
+ ),
+ 124 => array (
+ 'XMLConstants'
+ ),
+ 125 => array (
+ 'DatatypeConfigurationException', 'DatatypeConstants', 'DatatypeConstants.Field', 'DatatypeFactory', 'Duration', 'XMLGregorianCalendar'
+ ),
+ 126 => array (
+ 'NamespaceContext', 'QName'
+ ),
+ 127 => array (
+ 'DocumentBuilder', 'DocumentBuilderFactory', 'FactoryConfigurationError', 'ParserConfigurationException', 'SAXParser', 'SAXParserFactory'
+ ),
+ 128 => array (
+ 'ErrorListener', 'OutputKeys', 'Result', 'Source', 'SourceLocator', 'Templates', 'Transformer', 'TransformerConfigurationException', 'TransformerException', 'TransformerFactory', 'TransformerFactoryConfigurationError', 'URIResolver'
+ ),
+ 129 => array (
+ 'DOMResult', 'DOMSource'
+ ),
+ 130 => array (
+ 'SAXResult', 'SAXSource', 'SAXTransformerFactory', 'TemplatesHandler', 'TransformerHandler'
+ ),
+ 131 => array (
+ 'StreamResult', 'StreamSource'
+ ),
+ 132 => array (
+ 'Schema', 'SchemaFactory', 'SchemaFactoryLoader', 'TypeInfoProvider', 'Validator', 'ValidatorHandler'
+ ),
+ 133 => array (
+ 'XPath', 'XPathConstants', 'XPathException', 'XPathExpression', 'XPathExpressionException', 'XPathFactory', 'XPathFactoryConfigurationException', 'XPathFunction', 'XPathFunctionException', 'XPathFunctionResolver', 'XPathVariableResolver'
+ ),
+ 134 => array (
+ 'ChannelBinding', 'GSSContext', 'GSSCredential', 'GSSException', 'GSSManager', 'GSSName', 'MessageProp', 'Oid'
+ ),
+ 135 => array (
+ 'ACTIVITY_COMPLETED', 'ACTIVITY_REQUIRED', 'ARG_IN', 'ARG_INOUT', 'ARG_OUT', 'Any', 'AnyHolder', 'AnySeqHolder', 'BAD_CONTEXT', 'BAD_INV_ORDER', 'BAD_OPERATION', 'BAD_PARAM', 'BAD_POLICY', 'BAD_POLICY_TYPE', 'BAD_POLICY_VALUE', 'BAD_QOS', 'BAD_TYPECODE', 'BooleanHolder', 'BooleanSeqHelper', 'BooleanSeqHolder', 'ByteHolder', 'CODESET_INCOMPATIBLE', 'COMM_FAILURE', 'CTX_RESTRICT_SCOPE', 'CharHolder', 'CharSeqHelper', 'CharSeqHolder', 'CompletionStatus', 'CompletionStatusHelper', 'ContextList', 'CurrentHolder', 'CustomMarshal', 'DATA_CONVERSION', 'DefinitionKind', 'DefinitionKindHelper', 'DomainManager', 'DomainManagerOperations', 'DoubleHolder', 'DoubleSeqHelper', 'DoubleSeqHolder', 'Environment', 'ExceptionList', 'FREE_MEM', 'FixedHolder', 'FloatHolder', 'FloatSeqHelper', 'FloatSeqHolder', 'IDLType', 'IDLTypeHelper', 'IDLTypeOperations', 'IMP_LIMIT', 'INITIALIZE', 'INTERNAL', 'INTF_REPOS', 'INVALID_ACTIVITY', 'INVALID_TRANSACTION', 'INV_FLAG', 'INV_IDENT', 'INV_OBJREF', 'INV_POLICY', 'IRObject',
+ 'IRObjectOperations', 'IdentifierHelper', 'IntHolder', 'LocalObject', 'LongHolder', 'LongLongSeqHelper', 'LongLongSeqHolder', 'LongSeqHelper', 'LongSeqHolder', 'MARSHAL', 'NO_IMPLEMENT', 'NO_MEMORY', 'NO_PERMISSION', 'NO_RESOURCES', 'NO_RESPONSE', 'NVList', 'NamedValue', 'OBJECT_NOT_EXIST', 'OBJ_ADAPTER', 'OMGVMCID', 'ObjectHelper', 'ObjectHolder', 'OctetSeqHelper', 'OctetSeqHolder', 'PERSIST_STORE', 'PRIVATE_MEMBER', 'PUBLIC_MEMBER', 'ParameterMode', 'ParameterModeHelper', 'ParameterModeHolder', 'PolicyError', 'PolicyErrorCodeHelper', 'PolicyErrorHelper', 'PolicyErrorHolder', 'PolicyHelper', 'PolicyHolder', 'PolicyListHelper', 'PolicyListHolder', 'PolicyOperations', 'PolicyTypeHelper', 'PrincipalHolder', 'REBIND', 'RepositoryIdHelper', 'Request', 'ServerRequest', 'ServiceDetail', 'ServiceDetailHelper', 'ServiceInformation', 'ServiceInformationHelper', 'ServiceInformationHolder', 'SetOverrideType', 'SetOverrideTypeHelper', 'ShortHolder', 'ShortSeqHelper', 'ShortSeqHolder', 'StringHolder',
+ 'StringSeqHelper', 'StringSeqHolder', 'StringValueHelper', 'StructMember', 'StructMemberHelper', 'SystemException', 'TCKind', 'TIMEOUT', 'TRANSACTION_MODE', 'TRANSACTION_REQUIRED', 'TRANSACTION_ROLLEDBACK', 'TRANSACTION_UNAVAILABLE', 'TRANSIENT', 'TypeCode', 'TypeCodeHolder', 'ULongLongSeqHelper', 'ULongLongSeqHolder', 'ULongSeqHelper', 'ULongSeqHolder', 'UNSUPPORTED_POLICY', 'UNSUPPORTED_POLICY_VALUE', 'UShortSeqHelper', 'UShortSeqHolder', 'UnionMember', 'UnionMemberHelper', 'UnknownUserException', 'UnknownUserExceptionHelper', 'UnknownUserExceptionHolder', 'UserException', 'VM_ABSTRACT', 'VM_CUSTOM', 'VM_NONE', 'VM_TRUNCATABLE', 'ValueBaseHelper', 'ValueBaseHolder', 'ValueMember', 'ValueMemberHelper', 'VersionSpecHelper', 'VisibilityHelper', 'WCharSeqHelper', 'WCharSeqHolder', 'WStringSeqHelper', 'WStringSeqHolder', 'WStringValueHelper', 'WrongTransaction', 'WrongTransactionHelper', 'WrongTransactionHolder', '_IDLTypeStub', '_PolicyStub'
+ ),
+ 136 => array (
+ 'Invalid', 'InvalidSeq'
+ ),
+ 137 => array (
+ 'BadKind'
+ ),
+ 138 => array (
+ 'ApplicationException', 'BoxedValueHelper', 'CustomValue', 'IDLEntity', 'IndirectionException', 'InvokeHandler', 'RemarshalException', 'ResponseHandler', 'ServantObject', 'Streamable', 'StreamableValue', 'UnknownException', 'ValueBase', 'ValueFactory', 'ValueInputStream', 'ValueOutputStream'
+ ),
+ 139 => array (
+ 'BindingHelper', 'BindingHolder', 'BindingIterator', 'BindingIteratorHelper', 'BindingIteratorHolder', 'BindingIteratorOperations', 'BindingIteratorPOA', 'BindingListHelper', 'BindingListHolder', 'BindingType', 'BindingTypeHelper', 'BindingTypeHolder', 'IstringHelper', 'NameComponent', 'NameComponentHelper', 'NameComponentHolder', 'NameHelper', 'NameHolder', 'NamingContext', 'NamingContextExt', 'NamingContextExtHelper', 'NamingContextExtHolder', 'NamingContextExtOperations', 'NamingContextExtPOA', 'NamingContextHelper', 'NamingContextHolder', 'NamingContextOperations', 'NamingContextPOA', '_BindingIteratorImplBase', '_BindingIteratorStub', '_NamingContextExtStub', '_NamingContextImplBase', '_NamingContextStub'
+ ),
+ 140 => array (
+ 'AddressHelper', 'InvalidAddress', 'InvalidAddressHelper', 'InvalidAddressHolder', 'StringNameHelper', 'URLStringHelper'
+ ),
+ 141 => array (
+ 'AlreadyBound', 'AlreadyBoundHelper', 'AlreadyBoundHolder', 'CannotProceed', 'CannotProceedHelper', 'CannotProceedHolder', 'InvalidNameHolder', 'NotEmpty', 'NotEmptyHelper', 'NotEmptyHolder', 'NotFound', 'NotFoundHelper', 'NotFoundHolder', 'NotFoundReason', 'NotFoundReasonHelper', 'NotFoundReasonHolder'
+ ),
+ 142 => array (
+ 'Parameter'
+ ),
+ 143 => array (
+ 'DynAnyFactory', 'DynAnyFactoryHelper', 'DynAnyFactoryOperations', 'DynAnyHelper', 'DynAnyOperations', 'DynAnySeqHelper', 'DynArrayHelper', 'DynArrayOperations', 'DynEnumHelper', 'DynEnumOperations', 'DynFixedHelper', 'DynFixedOperations', 'DynSequenceHelper', 'DynSequenceOperations', 'DynStructHelper', 'DynStructOperations', 'DynUnionHelper', 'DynUnionOperations', 'DynValueBox', 'DynValueBoxOperations', 'DynValueCommon', 'DynValueCommonOperations', 'DynValueHelper', 'DynValueOperations', 'NameDynAnyPair', 'NameDynAnyPairHelper', 'NameDynAnyPairSeqHelper', 'NameValuePairSeqHelper', '_DynAnyFactoryStub', '_DynAnyStub', '_DynArrayStub', '_DynEnumStub', '_DynFixedStub', '_DynSequenceStub', '_DynStructStub', '_DynUnionStub', '_DynValueStub'
+ ),
+ 144 => array (
+ 'InconsistentTypeCodeHelper'
+ ),
+ 145 => array (
+ 'InvalidValueHelper'
+ ),
+ 146 => array (
+ 'CodeSets', 'Codec', 'CodecFactory', 'CodecFactoryHelper', 'CodecFactoryOperations', 'CodecOperations', 'ComponentIdHelper', 'ENCODING_CDR_ENCAPS', 'Encoding', 'ExceptionDetailMessage', 'IOR', 'IORHelper', 'IORHolder', 'MultipleComponentProfileHelper', 'MultipleComponentProfileHolder', 'ProfileIdHelper', 'RMICustomMaxStreamFormat', 'ServiceContext', 'ServiceContextHelper', 'ServiceContextHolder', 'ServiceContextListHelper', 'ServiceContextListHolder', 'ServiceIdHelper', 'TAG_ALTERNATE_IIOP_ADDRESS', 'TAG_CODE_SETS', 'TAG_INTERNET_IOP', 'TAG_JAVA_CODEBASE', 'TAG_MULTIPLE_COMPONENTS', 'TAG_ORB_TYPE', 'TAG_POLICIES', 'TAG_RMI_CUSTOM_MAX_STREAM_FORMAT', 'TaggedComponent', 'TaggedComponentHelper', 'TaggedComponentHolder', 'TaggedProfile', 'TaggedProfileHelper', 'TaggedProfileHolder', 'TransactionService'
+ ),
+ 147 => array (
+ 'UnknownEncoding', 'UnknownEncodingHelper'
+ ),
+ 148 => array (
+ 'FormatMismatch', 'FormatMismatchHelper', 'InvalidTypeForEncoding', 'InvalidTypeForEncodingHelper'
+ ),
+ 149 => array (
+ 'SYNC_WITH_TRANSPORT', 'SyncScopeHelper'
+ ),
+ 150 => array (
+ 'ACTIVE', 'AdapterManagerIdHelper', 'AdapterNameHelper', 'AdapterStateHelper', 'ClientRequestInfo', 'ClientRequestInfoOperations', 'ClientRequestInterceptor', 'ClientRequestInterceptorOperations', 'DISCARDING', 'HOLDING', 'INACTIVE', 'IORInfo', 'IORInfoOperations', 'IORInterceptor', 'IORInterceptorOperations', 'IORInterceptor_3_0', 'IORInterceptor_3_0Helper', 'IORInterceptor_3_0Holder', 'IORInterceptor_3_0Operations', 'Interceptor', 'InterceptorOperations', 'InvalidSlot', 'InvalidSlotHelper', 'LOCATION_FORWARD', 'NON_EXISTENT', 'ORBIdHelper', 'ORBInitInfo', 'ORBInitInfoOperations', 'ORBInitializer', 'ORBInitializerOperations', 'ObjectReferenceFactory', 'ObjectReferenceFactoryHelper', 'ObjectReferenceFactoryHolder', 'ObjectReferenceTemplate', 'ObjectReferenceTemplateHelper', 'ObjectReferenceTemplateHolder', 'ObjectReferenceTemplateSeqHelper', 'ObjectReferenceTemplateSeqHolder', 'PolicyFactory', 'PolicyFactoryOperations', 'RequestInfo', 'RequestInfoOperations', 'SUCCESSFUL', 'SYSTEM_EXCEPTION',
+ 'ServerIdHelper', 'ServerRequestInfo', 'ServerRequestInfoOperations', 'ServerRequestInterceptor', 'ServerRequestInterceptorOperations', 'TRANSPORT_RETRY', 'USER_EXCEPTION'
+ ),
+ 151 => array (
+ 'DuplicateName', 'DuplicateNameHelper'
+ ),
+ 152 => array (
+ 'AdapterActivator', 'AdapterActivatorOperations', 'ID_ASSIGNMENT_POLICY_ID', 'ID_UNIQUENESS_POLICY_ID', 'IMPLICIT_ACTIVATION_POLICY_ID', 'IdAssignmentPolicy', 'IdAssignmentPolicyOperations', 'IdAssignmentPolicyValue', 'IdUniquenessPolicy', 'IdUniquenessPolicyOperations', 'IdUniquenessPolicyValue', 'ImplicitActivationPolicy', 'ImplicitActivationPolicyOperations', 'ImplicitActivationPolicyValue', 'LIFESPAN_POLICY_ID', 'LifespanPolicy', 'LifespanPolicyOperations', 'LifespanPolicyValue', 'POA', 'POAHelper', 'POAManager', 'POAManagerOperations', 'POAOperations', 'REQUEST_PROCESSING_POLICY_ID', 'RequestProcessingPolicy', 'RequestProcessingPolicyOperations', 'RequestProcessingPolicyValue', 'SERVANT_RETENTION_POLICY_ID', 'Servant', 'ServantActivator', 'ServantActivatorHelper', 'ServantActivatorOperations', 'ServantActivatorPOA', 'ServantLocator', 'ServantLocatorHelper', 'ServantLocatorOperations', 'ServantLocatorPOA', 'ServantManager', 'ServantManagerOperations', 'ServantRetentionPolicy',
+ 'ServantRetentionPolicyOperations', 'ServantRetentionPolicyValue', 'THREAD_POLICY_ID', 'ThreadPolicy', 'ThreadPolicyOperations', 'ThreadPolicyValue', '_ServantActivatorStub', '_ServantLocatorStub'
+ ),
+ 153 => array (
+ 'NoContext', 'NoContextHelper'
+ ),
+ 154 => array (
+ 'AdapterInactive', 'AdapterInactiveHelper', 'State'
+ ),
+ 155 => array (
+ 'AdapterAlreadyExists', 'AdapterAlreadyExistsHelper', 'AdapterNonExistent', 'AdapterNonExistentHelper', 'InvalidPolicy', 'InvalidPolicyHelper', 'NoServant', 'NoServantHelper', 'ObjectAlreadyActive', 'ObjectAlreadyActiveHelper', 'ObjectNotActive', 'ObjectNotActiveHelper', 'ServantAlreadyActive', 'ServantAlreadyActiveHelper', 'ServantNotActive', 'ServantNotActiveHelper', 'WrongAdapter', 'WrongAdapterHelper', 'WrongPolicy', 'WrongPolicyHelper'
+ ),
+ 156 => array (
+ 'CookieHolder'
+ ),
+ 157 => array (
+ 'RunTime', 'RunTimeOperations'
+ ),
+ 158 => array (
+ '_Remote_Stub'
+ ),
+ 159 => array (
+ 'Attr', 'CDATASection', 'CharacterData', 'Comment', 'DOMConfiguration', 'DOMError', 'DOMErrorHandler', 'DOMException', 'DOMImplementation', 'DOMImplementationList', 'DOMImplementationSource', 'DOMStringList', 'DocumentFragment', 'DocumentType', 'EntityReference', 'NameList', 'NamedNodeMap', 'Node', 'NodeList', 'Notation', 'ProcessingInstruction', 'Text', 'TypeInfo', 'UserDataHandler'
+ ),
+ 160 => array (
+ 'DOMImplementationRegistry'
+ ),
+ 161 => array (
+ 'EventException', 'EventTarget', 'MutationEvent', 'UIEvent'
+ ),
+ 162 => array (
+ 'DOMImplementationLS', 'LSException', 'LSInput', 'LSLoadEvent', 'LSOutput', 'LSParser', 'LSParserFilter', 'LSProgressEvent', 'LSResourceResolver', 'LSSerializer', 'LSSerializerFilter'
+ ),
+ 163 => array (
+ 'DTDHandler', 'DocumentHandler', 'EntityResolver', 'ErrorHandler', 'HandlerBase', 'InputSource', 'Locator', 'SAXException', 'SAXNotRecognizedException', 'SAXNotSupportedException', 'SAXParseException', 'XMLFilter', 'XMLReader'
+ ),
+ 164 => array (
+ 'Attributes2', 'Attributes2Impl', 'DeclHandler', 'DefaultHandler2', 'EntityResolver2', 'LexicalHandler', 'Locator2', 'Locator2Impl'
+ ),
+ 165 => array (
+ 'AttributeListImpl', 'AttributesImpl', 'DefaultHandler', 'LocatorImpl', 'NamespaceSupport', 'ParserAdapter', 'ParserFactory', 'XMLFilterImpl', 'XMLReaderAdapter', 'XMLReaderFactory'
+ ),
+ /* ambiguous class names (appear in more than one package) */
+ 166 => array (
+ 'Annotation', 'AnySeqHelper', 'Array', 'Attribute', 'AttributeList', 'AttributeSet', 'Attributes', 'AuthenticationException', 'Binding', 'Bounds', 'Certificate', 'CertificateEncodingException', 'CertificateException', 'CertificateExpiredException', 'CertificateNotYetValidException', 'CertificateParsingException', 'ConnectException', 'ContentHandler', 'Context', 'Control', 'Current', 'CurrentHelper', 'CurrentOperations', 'DOMLocator', 'DataInputStream', 'DataOutputStream', 'Date', 'DefaultLoaderRepository', 'Delegate', 'Document', 'DocumentEvent', 'DynAny', 'DynArray', 'DynEnum', 'DynFixed', 'DynSequence', 'DynStruct', 'DynUnion', 'DynValue', 'DynamicImplementation', 'Element', 'Entity', 'Event', 'EventListener', 'FieldNameHelper', 'FileFilter', 'Formatter', 'ForwardRequest', 'ForwardRequestHelper', 'InconsistentTypeCode', 'InputStream', 'IntrospectionException', 'InvalidAttributeValueException', 'InvalidKeyException', 'InvalidName', 'InvalidNameHelper', 'InvalidValue', 'List', 'MouseEvent',
+ 'NameValuePair', 'NameValuePairHelper', 'ORB', 'Object', 'ObjectIdHelper', 'ObjectImpl', 'OpenType', 'OutputStream', 'ParagraphView', 'Parser', 'Permission', 'Policy', 'Principal', 'Proxy', 'Reference', 'Statement', 'Timer', 'Timestamp', 'TypeMismatch', 'TypeMismatchHelper', 'UNKNOWN', 'UnknownHostException', 'X509Certificate'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => true,
+ /* all Java keywords are case sensitive */
+ 1 => true, 2 => true, 3 => true, 4 => true,
+ 5 => true, 6 => true, 7 => true, 8 => true, 9 => true,
+ 10 => true, 11 => true, 12 => true, 13 => true, 14 => true,
+ 15 => true, 16 => true, 17 => true, 18 => true, 19 => true,
+ 20 => true, 21 => true, 22 => true, 23 => true, 24 => true,
+ 25 => true, 26 => true, 27 => true, 28 => true, 29 => true,
+ 30 => true, 31 => true, 32 => true, 33 => true, 34 => true,
+ 35 => true, 36 => true, 37 => true, 38 => true, 39 => true,
+ 40 => true, 41 => true, 42 => true, 43 => true, 44 => true,
+ 45 => true, 46 => true, 47 => true, 48 => true, 49 => true,
+ 50 => true, 51 => true, 52 => true, 53 => true, 54 => true,
+ 55 => true, 56 => true, 57 => true, 58 => true, 59 => true,
+ 60 => true, 61 => true, 62 => true, 63 => true, 64 => true,
+ 65 => true, 66 => true, 67 => true, 68 => true, 69 => true,
+ 70 => true, 71 => true, 72 => true, 73 => true, 74 => true,
+ 75 => true, 76 => true, 77 => true, 78 => true, 79 => true,
+ 80 => true, 81 => true, 82 => true, 83 => true, 84 => true,
+ 85 => true, 86 => true, 87 => true, 88 => true, 89 => true,
+ 90 => true, 91 => true, 92 => true, 93 => true, 94 => true,
+ 95 => true, 96 => true, 97 => true, 98 => true, 99 => true,
+ 100 => true, 101 => true, 102 => true, 103 => true, 104 => true,
+ 105 => true, 106 => true, 107 => true, 108 => true, 109 => true,
+ 110 => true, 111 => true, 112 => true, 113 => true, 114 => true,
+ 115 => true, 116 => true, 117 => true, 118 => true, 119 => true,
+ 120 => true, 121 => true, 122 => true, 123 => true, 124 => true,
+ 125 => true, 126 => true, 127 => true, 128 => true, 129 => true,
+ 130 => true, 131 => true, 132 => true, 133 => true, 134 => true,
+ 135 => true, 136 => true, 137 => true, 138 => true, 139 => true,
+ 140 => true, 141 => true, 142 => true, 143 => true, 144 => true,
+ 145 => true, 146 => true, 147 => true, 148 => true, 149 => true,
+ 150 => true, 151 => true, 152 => true, 153 => true, 154 => true,
+ 155 => true, 156 => true, 157 => true, 158 => true, 159 => true,
+ 160 => true, 161 => true, 162 => true, 163 => true, 164 => true,
+ 165 => true, 166 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #993333;',
+ 4 => 'color: #b13366;',
+ 5 => 'color: #aaaadd; font-weight: bold;',
+ 6 => 'color: #aaaadd; font-weight: bold;',
+ 7 => 'color: #aaaadd; font-weight: bold;',
+ 8 => 'color: #aaaadd; font-weight: bold;',
+ 9 => 'color: #aaaadd; font-weight: bold;',
+ 10 => 'color: #aaaadd; font-weight: bold;',
+ 11 => 'color: #aaaadd; font-weight: bold;',
+ 12 => 'color: #aaaadd; font-weight: bold;',
+ 13 => 'color: #aaaadd; font-weight: bold;',
+ 14 => 'color: #aaaadd; font-weight: bold;',
+ 15 => 'color: #aaaadd; font-weight: bold;',
+ 16 => 'color: #aaaadd; font-weight: bold;',
+ 17 => 'color: #aaaadd; font-weight: bold;',
+ 18 => 'color: #aaaadd; font-weight: bold;',
+ 19 => 'color: #aaaadd; font-weight: bold;',
+ 20 => 'color: #aaaadd; font-weight: bold;',
+ 21 => 'color: #aaaadd; font-weight: bold;',
+ 22 => 'color: #aaaadd; font-weight: bold;',
+ 23 => 'color: #aaaadd; font-weight: bold;',
+ 24 => 'color: #aaaadd; font-weight: bold;',
+ 25 => 'color: #aaaadd; font-weight: bold;',
+ 26 => 'color: #aaaadd; font-weight: bold;',
+ 27 => 'color: #aaaadd; font-weight: bold;',
+ 28 => 'color: #aaaadd; font-weight: bold;',
+ 29 => 'color: #aaaadd; font-weight: bold;',
+ 30 => 'color: #aaaadd; font-weight: bold;',
+ 31 => 'color: #aaaadd; font-weight: bold;',
+ 32 => 'color: #aaaadd; font-weight: bold;',
+ 33 => 'color: #aaaadd; font-weight: bold;',
+ 34 => 'color: #aaaadd; font-weight: bold;',
+ 35 => 'color: #aaaadd; font-weight: bold;',
+ 36 => 'color: #aaaadd; font-weight: bold;',
+ 37 => 'color: #aaaadd; font-weight: bold;',
+ 38 => 'color: #aaaadd; font-weight: bold;',
+ 39 => 'color: #aaaadd; font-weight: bold;',
+ 40 => 'color: #aaaadd; font-weight: bold;',
+ 41 => 'color: #aaaadd; font-weight: bold;',
+ 42 => 'color: #aaaadd; font-weight: bold;',
+ 43 => 'color: #aaaadd; font-weight: bold;',
+ 44 => 'color: #aaaadd; font-weight: bold;',
+ 45 => 'color: #aaaadd; font-weight: bold;',
+ 46 => 'color: #aaaadd; font-weight: bold;',
+ 47 => 'color: #aaaadd; font-weight: bold;',
+ 48 => 'color: #aaaadd; font-weight: bold;',
+ 49 => 'color: #aaaadd; font-weight: bold;',
+ 50 => 'color: #aaaadd; font-weight: bold;',
+ 51 => 'color: #aaaadd; font-weight: bold;',
+ 52 => 'color: #aaaadd; font-weight: bold;',
+ 53 => 'color: #aaaadd; font-weight: bold;',
+ 54 => 'color: #aaaadd; font-weight: bold;',
+ 55 => 'color: #aaaadd; font-weight: bold;',
+ 56 => 'color: #aaaadd; font-weight: bold;',
+ 57 => 'color: #aaaadd; font-weight: bold;',
+ 58 => 'color: #aaaadd; font-weight: bold;',
+ 59 => 'color: #aaaadd; font-weight: bold;',
+ 60 => 'color: #aaaadd; font-weight: bold;',
+ 61 => 'color: #aaaadd; font-weight: bold;',
+ 62 => 'color: #aaaadd; font-weight: bold;',
+ 63 => 'color: #aaaadd; font-weight: bold;',
+ 64 => 'color: #aaaadd; font-weight: bold;',
+ 65 => 'color: #aaaadd; font-weight: bold;',
+ 66 => 'color: #aaaadd; font-weight: bold;',
+ 67 => 'color: #aaaadd; font-weight: bold;',
+ 68 => 'color: #aaaadd; font-weight: bold;',
+ 69 => 'color: #aaaadd; font-weight: bold;',
+ 70 => 'color: #aaaadd; font-weight: bold;',
+ 71 => 'color: #aaaadd; font-weight: bold;',
+ 72 => 'color: #aaaadd; font-weight: bold;',
+ 73 => 'color: #aaaadd; font-weight: bold;',
+ 74 => 'color: #aaaadd; font-weight: bold;',
+ 75 => 'color: #aaaadd; font-weight: bold;',
+ 76 => 'color: #aaaadd; font-weight: bold;',
+ 77 => 'color: #aaaadd; font-weight: bold;',
+ 78 => 'color: #aaaadd; font-weight: bold;',
+ 79 => 'color: #aaaadd; font-weight: bold;',
+ 80 => 'color: #aaaadd; font-weight: bold;',
+ 81 => 'color: #aaaadd; font-weight: bold;',
+ 82 => 'color: #aaaadd; font-weight: bold;',
+ 83 => 'color: #aaaadd; font-weight: bold;',
+ 84 => 'color: #aaaadd; font-weight: bold;',
+ 85 => 'color: #aaaadd; font-weight: bold;',
+ 86 => 'color: #aaaadd; font-weight: bold;',
+ 87 => 'color: #aaaadd; font-weight: bold;',
+ 88 => 'color: #aaaadd; font-weight: bold;',
+ 89 => 'color: #aaaadd; font-weight: bold;',
+ 90 => 'color: #aaaadd; font-weight: bold;',
+ 91 => 'color: #aaaadd; font-weight: bold;',
+ 92 => 'color: #aaaadd; font-weight: bold;',
+ 93 => 'color: #aaaadd; font-weight: bold;',
+ 94 => 'color: #aaaadd; font-weight: bold;',
+ 95 => 'color: #aaaadd; font-weight: bold;',
+ 96 => 'color: #aaaadd; font-weight: bold;',
+ 97 => 'color: #aaaadd; font-weight: bold;',
+ 98 => 'color: #aaaadd; font-weight: bold;',
+ 99 => 'color: #aaaadd; font-weight: bold;',
+ 100 => 'color: #aaaadd; font-weight: bold;',
+ 101 => 'color: #aaaadd; font-weight: bold;',
+ 102 => 'color: #aaaadd; font-weight: bold;',
+ 103 => 'color: #aaaadd; font-weight: bold;',
+ 104 => 'color: #aaaadd; font-weight: bold;',
+ 105 => 'color: #aaaadd; font-weight: bold;',
+ 106 => 'color: #aaaadd; font-weight: bold;',
+ 107 => 'color: #aaaadd; font-weight: bold;',
+ 108 => 'color: #aaaadd; font-weight: bold;',
+ 109 => 'color: #aaaadd; font-weight: bold;',
+ 110 => 'color: #aaaadd; font-weight: bold;',
+ 111 => 'color: #aaaadd; font-weight: bold;',
+ 112 => 'color: #aaaadd; font-weight: bold;',
+ 113 => 'color: #aaaadd; font-weight: bold;',
+ 114 => 'color: #aaaadd; font-weight: bold;',
+ 115 => 'color: #aaaadd; font-weight: bold;',
+ 116 => 'color: #aaaadd; font-weight: bold;',
+ 117 => 'color: #aaaadd; font-weight: bold;',
+ 118 => 'color: #aaaadd; font-weight: bold;',
+ 119 => 'color: #aaaadd; font-weight: bold;',
+ 120 => 'color: #aaaadd; font-weight: bold;',
+ 121 => 'color: #aaaadd; font-weight: bold;',
+ 122 => 'color: #aaaadd; font-weight: bold;',
+ 123 => 'color: #aaaadd; font-weight: bold;',
+ 124 => 'color: #aaaadd; font-weight: bold;',
+ 125 => 'color: #aaaadd; font-weight: bold;',
+ 126 => 'color: #aaaadd; font-weight: bold;',
+ 127 => 'color: #aaaadd; font-weight: bold;',
+ 128 => 'color: #aaaadd; font-weight: bold;',
+ 129 => 'color: #aaaadd; font-weight: bold;',
+ 130 => 'color: #aaaadd; font-weight: bold;',
+ 131 => 'color: #aaaadd; font-weight: bold;',
+ 132 => 'color: #aaaadd; font-weight: bold;',
+ 133 => 'color: #aaaadd; font-weight: bold;',
+ 134 => 'color: #aaaadd; font-weight: bold;',
+ 135 => 'color: #aaaadd; font-weight: bold;',
+ 136 => 'color: #aaaadd; font-weight: bold;',
+ 137 => 'color: #aaaadd; font-weight: bold;',
+ 138 => 'color: #aaaadd; font-weight: bold;',
+ 139 => 'color: #aaaadd; font-weight: bold;',
+ 140 => 'color: #aaaadd; font-weight: bold;',
+ 141 => 'color: #aaaadd; font-weight: bold;',
+ 142 => 'color: #aaaadd; font-weight: bold;',
+ 143 => 'color: #aaaadd; font-weight: bold;',
+ 144 => 'color: #aaaadd; font-weight: bold;',
+ 145 => 'color: #aaaadd; font-weight: bold;',
+ 146 => 'color: #aaaadd; font-weight: bold;',
+ 147 => 'color: #aaaadd; font-weight: bold;',
+ 148 => 'color: #aaaadd; font-weight: bold;',
+ 149 => 'color: #aaaadd; font-weight: bold;',
+ 150 => 'color: #aaaadd; font-weight: bold;',
+ 151 => 'color: #aaaadd; font-weight: bold;',
+ 152 => 'color: #aaaadd; font-weight: bold;',
+ 153 => 'color: #aaaadd; font-weight: bold;',
+ 154 => 'color: #aaaadd; font-weight: bold;',
+ 155 => 'color: #aaaadd; font-weight: bold;',
+ 156 => 'color: #aaaadd; font-weight: bold;',
+ 157 => 'color: #aaaadd; font-weight: bold;',
+ 158 => 'color: #aaaadd; font-weight: bold;',
+ 159 => 'color: #aaaadd; font-weight: bold;',
+ 160 => 'color: #aaaadd; font-weight: bold;',
+ 161 => 'color: #aaaadd; font-weight: bold;',
+ 162 => 'color: #aaaadd; font-weight: bold;',
+ 163 => 'color: #aaaadd; font-weight: bold;',
+ 164 => 'color: #aaaadd; font-weight: bold;',
+ 165 => 'color: #aaaadd; font-weight: bold;',
+ 166 => 'color: #aaaadd; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/applet/{FNAME}.html',
+ 6 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/{FNAME}.html',
+ 7 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/color/{FNAME}.html',
+ 8 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/datatransfer/{FNAME}.html',
+ 9 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/dnd/{FNAME}.html',
+ 10 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/{FNAME}.html',
+ 11 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/font/{FNAME}.html',
+ 12 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/geom/{FNAME}.html',
+ 13 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/im/{FNAME}.html',
+ 14 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/im/spi/{FNAME}.html',
+ 15 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/{FNAME}.html',
+ 16 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/renderable/{FNAME}.html',
+ 17 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/print/{FNAME}.html',
+ 18 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/beans/{FNAME}.html',
+ 19 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/beans/beancontext/{FNAME}.html',
+ 20 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/io/{FNAME}.html',
+ 21 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/{FNAME}.html',
+ 22 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/annotation/{FNAME}.html',
+ 23 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/instrument/{FNAME}.html',
+ 24 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/{FNAME}.html',
+ 25 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ref/{FNAME}.html',
+ 26 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/{FNAME}.html',
+ 27 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/math/{FNAME}.html',
+ 28 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/net/{FNAME}.html',
+ 29 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/{FNAME}.html',
+ 30 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/channels/{FNAME}.html',
+ 31 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/channels/spi/{FNAME}.html',
+ 32 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/charset/{FNAME}.html',
+ 33 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/charset/spi/{FNAME}.html',
+ 34 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/{FNAME}.html',
+ 35 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/activation/{FNAME}.html',
+ 36 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/dgc/{FNAME}.html',
+ 37 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/registry/{FNAME}.html',
+ 38 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/server/{FNAME}.html',
+ 39 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/{FNAME}.html',
+ 40 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/acl/{FNAME}.html',
+ 41 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/cert/{FNAME}.html',
+ 42 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/interfaces/{FNAME}.html',
+ 43 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/spec/{FNAME}.html',
+ 44 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/sql/{FNAME}.html',
+ 45 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/text/{FNAME}.html',
+ 46 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/{FNAME}.html',
+ 47 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/{FNAME}.html',
+ 48 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/atomic/{FNAME}.html',
+ 49 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/locks/{FNAME}.html',
+ 50 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/jar/{FNAME}.html',
+ 51 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/logging/{FNAME}.html',
+ 52 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/prefs/{FNAME}.html',
+ 53 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/{FNAME}.html',
+ 54 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/zip/{FNAME}.html',
+ 55 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/accessibility/{FNAME}.html',
+ 56 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/activity/{FNAME}.html',
+ 57 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/crypto/{FNAME}.html',
+ 58 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/crypto/interfaces/{FNAME}.html',
+ 59 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/crypto/spec/{FNAME}.html',
+ 60 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/{FNAME}.html',
+ 61 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/event/{FNAME}.html',
+ 62 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/metadata/{FNAME}.html',
+ 63 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/plugins/bmp/{FNAME}.html',
+ 64 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/plugins/jpeg/{FNAME}.html',
+ 65 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/spi/{FNAME}.html',
+ 66 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/stream/{FNAME}.html',
+ 67 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/{FNAME}.html',
+ 68 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/loading/{FNAME}.html',
+ 69 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/modelmbean/{FNAME}.html',
+ 70 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/monitor/{FNAME}.html',
+ 71 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/openmbean/{FNAME}.html',
+ 72 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/relation/{FNAME}.html',
+ 73 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/remote/{FNAME}.html',
+ 74 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/remote/rmi/{FNAME}.html',
+ 75 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/timer/{FNAME}.html',
+ 76 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/{FNAME}.html',
+ 77 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/directory/{FNAME}.html',
+ 78 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/event/{FNAME}.html',
+ 79 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/ldap/{FNAME}.html',
+ 80 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/spi/{FNAME}.html',
+ 81 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/net/{FNAME}.html',
+ 82 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/net/ssl/{FNAME}.html',
+ 83 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/{FNAME}.html',
+ 84 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/attribute/{FNAME}.html',
+ 85 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/attribute/standard/{FNAME}.html',
+ 86 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/event/{FNAME}.html',
+ 87 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/rmi/{FNAME}.html',
+ 88 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/rmi/CORBA/{FNAME}.html',
+ 89 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/rmi/ssl/{FNAME}.html',
+ 90 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/{FNAME}.html',
+ 91 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/callback/{FNAME}.html',
+ 92 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/kerberos/{FNAME}.html',
+ 93 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/login/{FNAME}.html',
+ 94 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/spi/{FNAME}.html',
+ 95 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/x500/{FNAME}.html',
+ 96 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/sasl/{FNAME}.html',
+ 97 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/midi/{FNAME}.html',
+ 98 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/midi/spi/{FNAME}.html',
+ 99 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/sampled/{FNAME}.html',
+ 100 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/sampled/spi/{FNAME}.html',
+ 101 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/{FNAME}.html',
+ 102 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/rowset/{FNAME}.html',
+ 103 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/rowset/serial/{FNAME}.html',
+ 104 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/rowset/spi/{FNAME}.html',
+ 105 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/{FNAME}.html',
+ 106 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/border/{FNAME}.html',
+ 107 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/colorchooser/{FNAME}.html',
+ 108 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/event/{FNAME}.html',
+ 109 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/filechooser/{FNAME}.html',
+ 110 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/{FNAME}.html',
+ 111 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/basic/{FNAME}.html',
+ 112 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/metal/{FNAME}.html',
+ 113 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/multi/{FNAME}.html',
+ 114 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/synth/{FNAME}.html',
+ 115 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/table/{FNAME}.html',
+ 116 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/{FNAME}.html',
+ 117 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/html/{FNAME}.html',
+ 118 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/html/parser/{FNAME}.html',
+ 119 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/rtf/{FNAME}.html',
+ 120 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/tree/{FNAME}.html',
+ 121 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/undo/{FNAME}.html',
+ 122 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/transaction/{FNAME}.html',
+ 123 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/transaction/xa/{FNAME}.html',
+ 124 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/{FNAME}.html',
+ 125 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/datatype/{FNAME}.html',
+ 126 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/namespace/{FNAME}.html',
+ 127 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/{FNAME}.html',
+ 128 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/{FNAME}.html',
+ 129 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/dom/{FNAME}.html',
+ 130 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/sax/{FNAME}.html',
+ 131 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/stream/{FNAME}.html',
+ 132 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/validation/{FNAME}.html',
+ 133 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/{FNAME}.html',
+ 134 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/ietf/jgss/{FNAME}.html',
+ 135 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/{FNAME}.html',
+ 136 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/DynAnyPackage/{FNAME}.html',
+ 137 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/TypeCodePackage/{FNAME}.html',
+ 138 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/portable/{FNAME}.html',
+ 139 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CosNaming/{FNAME}.html',
+ 140 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CosNaming/NamingContextExtPackage/{FNAME}.html',
+ 141 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CosNaming/NamingContextPackage/{FNAME}.html',
+ 142 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/Dynamic/{FNAME}.html',
+ 143 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/DynamicAny/{FNAME}.html',
+ 144 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/DynamicAny/DynAnyFactoryPackage/{FNAME}.html',
+ 145 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/DynamicAny/DynAnyPackage/{FNAME}.html',
+ 146 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/IOP/{FNAME}.html',
+ 147 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/IOP/CodecFactoryPackage/{FNAME}.html',
+ 148 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/IOP/CodecPackage/{FNAME}.html',
+ 149 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/Messaging/{FNAME}.html',
+ 150 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableInterceptor/{FNAME}.html',
+ 151 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableInterceptor/ORBInitInfoPackage/{FNAME}.html',
+ 152 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/{FNAME}.html',
+ 153 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/CurrentPackage/{FNAME}.html',
+ 154 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/{FNAME}.html',
+ 155 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/POAPackage/{FNAME}.html',
+ 156 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/ServantLocatorPackage/{FNAME}.html',
+ 157 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/SendingContext/{FNAME}.html',
+ 158 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/stub/java/rmi/{FNAME}.html',
+ 159 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/{FNAME}.html',
+ 160 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/bootstrap/{FNAME}.html',
+ 161 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/events/{FNAME}.html',
+ 162 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/ls/{FNAME}.html',
+ 163 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/xml/sax/{FNAME}.html',
+ 164 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/xml/sax/ext/{FNAME}.html',
+ 165 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/xml/sax/helpers/{FNAME}.html',
+ /* ambiguous class names (appear in more than one package) */
+ 166 => 'http://www.google.com/search?sitesearch=java.sun.com&amp;q=allinurl%3Aj2se%2F1+5+0%2Fdocs%2Fapi+{FNAME}'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ /* Java does not use '::' */
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/JLanguageTool/website/include/geshi/xml.php b/JLanguageTool/website/include/geshi/xml.php
new file mode 100644
index 0000000..869bcef
--- /dev/null
+++ b/JLanguageTool/website/include/geshi/xml.php
@@ -0,0 +1,146 @@
+<?php
+/*************************************************************************************
+ * xml.php
+ * -------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.7.20
+ * Date Started: 2004/09/01
+ *
+ * XML language file for GeSHi. Based on the idea/file by Christian Weiske
+ *
+ * CHANGES
+ * -------
+ * 2005/12/28 (1.0.2)
+ * - Removed escape character for strings
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Check regexps work and correctly highlight XML stuff and nothing else
+ *
+ *************************************************************************************
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'XML',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('<!--' => '-->'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ 0 => 'color: #00bbdd;',
+ 1 => 'color: #ddbb00;',
+ 2 => 'color: #339933;',
+ 3 => 'color: #009900;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #000066;',
+ 1 => 'font-weight: bold; color: black;',
+ 2 => 'font-weight: bold; color: black;',
+ )
+ ),
+ 'URLS' => array(
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => array(
+ GESHI_SEARCH => '([a-z_\-:]+)(=)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => '\\2'
+ ),
+ 1 => array(
+ GESHI_SEARCH => '(&lt;[/?|(\?xml)]?[a-z0-9_\-:]*(\??&gt;)?)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ 2 => array(
+ GESHI_SEARCH => '(([/|\?])?&gt;)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<!DOCTYPE' => '>'
+ ),
+ 1 => array(
+ '&' => ';'
+ ),
+ 2 => array(
+ '<![CDATA[' => ']]>'
+ ),
+ 3 => array(
+ '<' => '>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => true
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/JLanguageTool/website/include/header.php b/JLanguageTool/website/include/header.php
new file mode 100644
index 0000000..8e1acc3
--- /dev/null
+++ b/JLanguageTool/website/include/header.php
@@ -0,0 +1,70 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title><?php print $title." ".$title2 ?></title>
+<link href="/css/style.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+
+<?php
+list($usec, $sec) = explode(" ", microtime());
+$start_time = ((float)$usec + (float)$sec);
+include("help.php");
+
+function makeEntry($name, $visName) {
+ global $page;
+ if ($page == $name || ($name == "." && $page == "homepage")) {
+ ?>
+ <p class="activeMenuitem"><? print $visName ?></p>
+ <?php
+ } else {
+ $url = $name;
+ if ($page == "homepage") {
+ $url = $name;
+ } else {
+ if (substr($name, 0, 7) == "http://") {
+ $url = $name;
+ } else {
+ $url = "../".$name;
+ }
+ }
+ ?>
+ <p class="menuitem"><a href="<?php print $url ?>"><? print $visName ?></a></p>
+ <?php
+ }
+}
+?>
+
+<table border="0">
+<tr>
+ <td></td>
+ <td>
+ <?php if ($page == "homepage") { ?>
+ <h1><?php print $title ?></h1>
+ <?php } else { ?>
+ <h1 id="hplink"><a href="/"><?php print $title ?></a></h1>
+ <?php } ?>
+ </td>
+ <td><h1 style="text-align:left"><?php print $title2 ?></h1></td>
+</tr>
+<tr>
+ <td width="88"></td>
+ <td width="201" valign="top">
+ <div id="menu">
+ <?php makeEntry(".", "Homepage"); ?>
+ <?php makeEntry("screenshots", "Screenshots"); ?>
+ <?php makeEntry("demo", "Demo"); ?>
+ <?php makeEntry("languages", "Languages"); ?>
+ <?php makeEntry("usage", "Usage"); ?>
+ <?php makeEntry("development", "Development"); ?>
+ <?php makeEntry("links", "Links &amp; Resources"); ?>
+ <?php makeEntry("http://languagetool.wikidot.com/", "Wiki"); ?>
+
+ <br/><br/><br/>
+ <a href="http://twitter.com/languagetoolorg"><img border="0" style="margin-right:5px" src="/images/twitter_link16x16.png"/>Follow us on twitter</a>
+ </div>
+ </td>
+ <td class="content">
+
+ <!-- MAIN TEXT -->
diff --git a/JLanguageTool/website/include/help.php b/JLanguageTool/website/include/help.php
new file mode 100644
index 0000000..00fe95a
--- /dev/null
+++ b/JLanguageTool/website/include/help.php
@@ -0,0 +1,104 @@
+<?php
+function hl($xml, $class="xmlcode") {
+ $geshi = new GeSHi($xml, "XML", "../../include/geshi/");
+ $geshi->set_header_type(GESHI_HEADER_NONE);
+ print "<div class='".$class."'>".$geshi->parse_code()."</div>";
+}
+
+function hljava($code, $class="xmlcode") {
+ $geshi = new GeSHi($code, "Java5", "../../include/geshi/");
+ $geshi->set_header_type(GESHI_HEADER_NONE);
+ print "<div class='".$class."'>".$geshi->parse_code()."</div>";
+}
+
+function show_link($title, $url, $show_alt, $title_attr="") {
+ global $homepage;
+ $html = "";
+ $alt = "";
+ $img_path = "/images";
+ if( $homepage ) {
+ $img_path = "art";
+ }
+ if( strpos($url, "mailto:") === false && $show_alt ) {
+ if( strpos($url, "http:") === false ) {
+ $alt = "internal link to ".$title;
+ } else {
+ $alt = "external link to ".$title;
+ }
+ } else if ( $show_alt ) {
+ $alt = "email";
+ }
+ if( $title_attr ) {
+ $title_attr = 'title="'.$title_attr.'"';
+ }
+ if( strpos($url, "http:") === false ) {
+ $html .= '<a '.$title_attr.' href="'.$url.'"><img src="'.$img_path.'/link.png" border="0" hspace="2" width="8" height="9" alt="'.$alt.'" />';
+ } else {
+ $html .= '<a '.$title_attr.' href="'.$url.'"><img src="'.$img_path.'/link_extern.png" border="0" hspace="2" width="7" height="9" alt="'.$alt.'" />';
+ }
+ $html .= $title.'</a>';
+ return $html;
+}
+
+function getmicrotime() {
+ list($usec, $sec) = explode(" ",microtime());
+ return ((float)$usec + (float)$sec);
+}
+
+function send_last_modified_header() {
+ global $last_update_full;
+ $timestamp = strtotime($last_update_full);
+ header("Last-Modified: ".date("D, j M Y G:i:s T", $timestamp));
+}
+
+/** Escape stuff that gets printed to page to avoid cross site scripting. */
+function escape($string) {
+ $string = preg_replace("/&/", "&amp;", $string);
+ $string = preg_replace("/\"/", "&quot;", $string);
+ $string = preg_replace("/'/", "&apos;", $string);
+ $string = preg_replace("/</", "&lt;", $string);
+ $string = preg_replace("/>/", "&gt;", $string);
+ return $string;
+}
+
+/** Unescape stuff that gets printed to page to avoid cross site scripting. */
+function unescape($string) {
+ $string = preg_replace("/&quot;/", "\"", $string);
+ $string = preg_replace("/&apos;/", "'", $string);
+ $string = preg_replace("/&lt;/", "<", $string);
+ $string = preg_replace("/&gt;/", ">", $string);
+ $string = preg_replace("/&amp;/", "&", $string);
+ return $string;
+}
+
+function post_request($url, $data, $optional_headers=null) {
+ $params = array('http' => array(
+ 'method' => 'POST',
+ 'content' => $data));
+ if ($optional_headers !== null) {
+ $params['http']['header'] = $optional_headers;
+ }
+ $ctx = stream_context_create($params);
+ $fp = @fopen($url, 'rb', false, $ctx);
+ if (!$fp) {
+ return "";
+ }
+ $resp = @stream_get_contents($fp);
+ if ($resp === false) {
+ return "";
+ }
+ return $resp;
+}
+
+// see http://www.php.net/manual/en/function.substr.php:
+function utf8_substr($str, $start) {
+ preg_match_all("/./u", $str, $ar);
+ if (func_num_args() >= 3) {
+ $end = func_get_arg(2);
+ return join("",array_slice($ar[0], $start, $end));
+ } else {
+ return join("",array_slice($ar[0], $start));
+ }
+}
+
+?>
diff --git a/JLanguageTool/website/www/css/style.css b/JLanguageTool/website/www/css/style.css
new file mode 100644
index 0000000..b5bbc10
--- /dev/null
+++ b/JLanguageTool/website/www/css/style.css
@@ -0,0 +1,182 @@
+/*
+Theme Name: iOrange2b
+Theme URI: http://www.darjanpanic.com
+Description: iOrange2b Template v1 by Brian Green and Darjan Panic.
+Version: 1.0
+Author: Brian Green and Darjan Panic, Modified by Daniel Naber
+
+Use it however you want, just leave the links in the footer :)
+*/
+body {
+ background: url(../images/bg.jpg) no-repeat;
+}
+
+a:link {
+ color: #ef8700;
+ text-decoration: none;
+}
+a:visited {
+ color: #a75e00;
+ text-decoration: none;
+}
+a:hover {
+ text-decoration: underline;
+}
+a:active {
+ text-decoration: underline;
+}
+
+h1 {
+ margin-top: 5px;
+ text-align: center;
+ font-family: verdana, sans-serif;
+ font-size: 24px;
+ color: #ef8701;
+}
+
+.xmlcode {
+ font-family: monospace;
+ margin-left: 15px;
+ font-size: larger;
+}
+
+.xmlcodeNoIndent {
+ font-family: monospace;
+ font-size: larger;
+}
+
+pre {
+ margin-bottom: 0px;
+}
+
+.firstpara {
+ margin-top: 0px;
+}
+
+.content {
+ padding-left: 5px;
+ padding-right: 25px;
+ color: #2c2c2c;
+ font-family: verdana, sans-serif;
+ font-size: 12px;
+}
+
+.footer {
+ padding-top: 20px;
+ text-align: right;
+ color: #bbbbbb;
+ font-family: verdana, sans-serif;
+ font-size: 9px;
+}
+
+.invisible {
+ padding-top: 20px;
+ text-align: right;
+ color: #ffffee;
+ font-family: verdana, sans-serif;
+ font-size: 9px;
+}
+
+.footer a {
+ color: #ffc06f;
+}
+
+.lastmod {
+ text-align: right;
+ font-size: 9px;
+ color: #888888;
+ font-family: verdana, sans-serif;
+}
+
+/* ------------------------------------------------- */
+/* Demo */
+
+.error {
+ background-color: #f8aab5;
+}
+
+.suggestion {
+ background-color: #7ef7ac;
+}
+
+/* ------------------------------------------------- */
+
+/* Link and heading "LanguageTool" in the upper left corner: */
+#hplink a:link {
+ color: #ef8700;
+}
+
+#hplink a:visited {
+ color: #ef8700;
+}
+
+#hplink a:hover {
+ color: #ef8700;
+}
+
+/* ------------------------------------------------- */
+
+#menu {
+}
+
+.activeMenuitem {
+ color: #ffffff !important;
+ text-decoration: none;
+ font-weight: bold;
+ background: #ef8701;
+}
+
+#menu p {
+ border-bottom: 5px solid #464646;
+ color: #ef8701;
+ font-family: verdana, sans-serif;
+ font-size: 12px;
+ padding: 0px;
+ margin: 0px;
+ padding-right: 10px;
+ padding-left: 10px;
+}
+
+#menu a:link {
+ color: #464646;
+ font-family: verdana, sans-serif;
+ font-size: 12px;
+ padding-left: 10px;
+ margin-left: 0px;
+ padding-right: 10px;
+ margin-right: 0px;
+ text-decoration: none;
+ font-weight: bold;
+}
+
+#menu a:visited {
+ color: #464646;
+ font-family: verdana, sans-serif;
+ font-size: 12px;
+ padding-left: 10px;
+ margin-left: 0px;
+ padding-right: 10px;
+ margin-right: 0px;
+ text-decoration: none;
+ font-weight: bold;
+}
+
+#menu a:hover {
+ color: #ffffff;
+ font-family: verdana, sans-serif;
+ font-size: 12px;
+ text-decoration: none;
+ font-weight: bold;
+ background: #ef8701;
+}
+
+.warning {
+ border-color: #ffb251;
+ border-style: solid;
+ border-width: 2px;
+ background: #fcffd5;
+ padding: 5px;
+}
+
+.downloadSection {
+}
diff --git a/JLanguageTool/website/www/demo/index.php b/JLanguageTool/website/www/demo/index.php
new file mode 100644
index 0000000..8d95872
--- /dev/null
+++ b/JLanguageTool/website/www/demo/index.php
@@ -0,0 +1,14 @@
+<?php
+$page = "demo";
+$title = "LanguageTool";
+$title2 = "Demo (Beta)";
+$lastmod = "2008-05-25 15:00:00 CET";
+include("../../include/header.php");
+?>
+
+<p>Please visit <a href="http://community.languagetool.org">community.languagetool.org</a>
+to try out LanguageTool online.</p>
+
+<?php
+include("../../include/footer.php");
+?>
diff --git a/JLanguageTool/website/www/development/index.php b/JLanguageTool/website/www/development/index.php
new file mode 100644
index 0000000..396fbbf
--- /dev/null
+++ b/JLanguageTool/website/www/development/index.php
@@ -0,0 +1,349 @@
+<?php
+$page = "development";
+$title = "LanguageTool";
+$title2 = "Development";
+$lastmod = "2009-10-31 23:05:00 CET";
+include("../../include/header.php");
+include('../../include/geshi/geshi.php');
+?>
+
+<p class="firstpara">This is a collection of the developer documentation available for LanguageTool.
+It's intended for people who want to understand LanguageTool so
+they can write their own rules or even add support for a new language.
+Software developers might also be interested in LanguageTool's
+<?=show_link("API", "api/", 0)?>.</p>
+
+<ul>
+ <li><a href="#helpwanted">Help wanted!</a></li>
+ <li><a href="#installation">Installation and usage</a></li>
+ <li><a href="#process">Language checking process</a></li>
+ <li><a href="#xmlrules">Adding new XML rules</a></li>
+ <li><a href="#javarules">Adding new Java rules</a></li>
+ <li><a href="#translation">Translating the user interface</a></li>
+ <li><a href="#newlanguage">Adding support for a new language</a></li>
+ <li><a href="#background">Background</a></li>
+</ul>
+
+<p><a name="helpwanted"><strong>Help wanted!</strong></a><br />
+We're looking for people who support us writing new rules so LanguageTool can
+detect more errors. The languages that LanguageTool already supports but for
+which support needs to be improved are: English, German, Polish, Spanish,
+French, Italian, Dutch, Czech, Lithuanian, Ukrainian, and Slovenian.</p>
+
+<p>How can you help?</p>
+
+<ol>
+ <li>Read this page</li>
+ <li>If you want to write rules in Java or if you want to add support
+ for another language, <?=show_link("check out LanguageTool from CVS",
+ "http://sourceforge.net/cvs/?group_id=110216", 1)?>.</li>
+ <li>Subscribe to the <?=show_link("mailing list",
+ "http://lists.sourceforge.net/lists/listinfo/languagetool-devel", 1)?></li>
+ <li>Try writing rules. For English and German, see the lists of errors
+ on the <?=show_link("Links page", "/links/", 0)?>. Many of those
+ errors are not yet detected.</li>
+ <li><?=show_link("See the wiki", "http://languagetool.wikidot.com/", 0)?> for
+ more tips and tricks</li>
+</ol>
+
+<p><a name="installation"><strong>Installation and usage</strong></a><br />
+Please see the README file that comes with LanguageTool and the
+<?=show_link("Usage page", "/usage/", 0) ?>.</p>
+
+<p><a name="process"><strong>Language checking process</strong></a><br />
+<ol>
+ <li>The text to be checked is split into sentences</li>
+ <li>Each sentence is split into words</li>
+ <li>Each word is assigned its part-of-speech tag(s) (e.g. <em>cars</em>
+ = plural noun, <em>talked</em> = simple past verb)</li>
+ <li>The analyzed text is then matched against the built-in rules and against
+ the rules loaded from the grammar.xml file</li>
+</ol>
+
+<p><a name="xmlrules"><strong>Adding new XML rules</strong></a><br />
+Many rules are contained in <tt>rules/xx/grammar.xml</tt>, whereas <tt>xx</tt> is
+a language code like <tt>en</tt> or <tt>de</tt>. A rule is basically a pattern
+which shows an error message to the user if the pattern matches. A pattern can
+address words or part-of-speech tags.
+Here are some examples of patterns that can be used in that file:</p>
+
+<ul class="largelist">
+ <li><?php hl('<token bla="x">think</token>', "xmlcodeNoIndent"); ?>
+ matches the word <em>think</em></li>
+ <li><?php hl('<token regexp="yes">think|say</token>', "xmlcodeNoIndent"); ?>
+ matches the regular expression
+ <tt>think|say</tt>, i.e. the word <em>think</em> or <em>say</em></li>
+ <li><?php hl('<token postag="VB" /> <token>house</token>', "xmlcodeNoIndent"); ?>
+ matches a base form verb followed by the word <em>house</em>.
+ See resource/en/tagset.txt for a list of possible part-of-speech tags.</li>
+ <li><?php hl('<token>cause</token> <token regexp="yes" negate="yes">and|to</token>', "xmlcodeNoIndent"); ?>
+ matches the word <em>cause</em> followed
+ by any word that is not <em>and</em> or <em>to</em></li>
+ <li><?php hl('<token postag="SENT_START" /> <token>foobar</token>', "xmlcodeNoIndent"); ?>
+ matches the word <em>foobar</em> only
+ at the beginning of a sentence</li>
+</ul>
+
+<p>Pattern's terms are matched case-insensitively by default, this can be changed
+by setting the <tt>case_sensitive</tt> attribute to <tt>yes</tt>.
+
+<p>Here's an example of a complete rule that marks "bed English", "bat attitude"
+etc as an error:</p>
+
+<?php hl('<rule id="BED_ENGLISH" name="Possible typo &apos;bed/bat(bad) English/...&apos;">
+ <pattern mark_from="0" mark_to="-1">
+ <token regexp="yes">bed|bat</token>
+ <token regexp="yes">English|attitude</token>
+ </pattern>
+ <message>Did you mean
+ <suggestion>bad</suggestion>?
+ </message>
+ <example type="correct">
+ Sorry for my <marker>bad</marker> English.
+ </example>
+ <example type="incorrect">
+ Sorry for my <marker>bed</marker> English.
+ </example>
+</rule>'); ?>
+
+<p>A short description of the elements and their attributes:</p>
+
+<ul class="largelist">
+ <li>element <tt>rule</tt>, attribute <tt>id</tt>: an internal identifier used to address this rule</li>
+ <li>element <tt>rule</tt>, attribute <tt>name</tt>: the text displayed in the configuration</li>
+ <li>element <tt>pattern</tt>, attributes <tt>mark_from</tt> and <tt>mark_to</tt>: what part of the original
+ text should be marked. The default, <tt>mark_from="0"</tt> and <tt>mark_to="0"</tt>, means to mark
+ the complete matching token. For example, if the pattern contains three token
+ elements that match the input text, those three matching words will be marked in the text.
+ <tt>mark_to="-1"</tt> in the example above means that the last token of the match will not
+ be marked.</li>
+ <li>element <tt>token</tt>, attribute <tt>regexp</tt>: interpret the given token
+ as a regular expression</li>
+ <li>element <tt>message</tt>: The text displayed to the user if this rule matches.
+ Use sub-element <tt>suggestion</tt> to suggest a possible replacement that corrects the error.</li>
+ <li>element <tt>example</tt>: At least two examples that with one correct and one incorrect sentence.
+ The incorrect sentence is supposed to be matched by this rule. The position of the error
+ must be marked up with the sub-element <tt>marker</tt>. This is used by the
+ automatic test cases that can be run using <tt>ant test</tt>.</li>
+</ul>
+
+<p>There are more features not used in the example above:</p>
+
+<ul class="largelist">
+ <li>element <tt>token</tt>, attribute <tt>skip</tt> is used
+ in two situations:
+
+ <br /><br />
+ <p><strong>1. Simulate a simple chunker</strong> for languages with flexible word order,
+ e.g., for matching errors of rection; we could for example skip possible
+ adverbs in some rule. <tt>skip="1"</tt> works exactly as two rules, i.e.</p>
+
+ <?php hl('<token skip="1">A</token>
+<token>B</token>'); ?>
+
+ <p>is equivalent to the pair of rules:</p>
+
+ <?php hl('<token>A</token>
+<token/>
+<token>B</token>
+
+<token>A</token>
+<token>B</token>'); ?>
+
+ <p>Using negative value, we can match until the B is found, no matter how
+ many tokens are skipped. This cannot be easily encoded using empty
+ tokens as above because the sentence could be of any length.</p>
+
+ <br />
+ <p><strong>2. Match coordinated words</strong>, for example to match
+ "both... as well" we could write:</p>
+
+ <?php hl('<token skip="-1">both<exception scope="next">and</exception></token>
+<token>as</token>
+<token>well</token>'); ?>
+
+ <p>Here the exception is applied only to the skipped tokens.</p>
+
+ <p>The scope attribute of the exception is used to make exception valid
+ only for the token the exception is specified (scope="current") or for
+ skipped tokens (scope="next"). Default behavior is scope="current".
+ Using scopes is useful where several different exceptions should be
+ applied to avoid false alarms. In some cases, it's useful to use
+ <tt>scope="previous"</tt> in rules that already have <tt>skip="-1"</tt>.
+ This way, you can set an exception against a single token that immediately
+ preceeds the matched token. For example, we want to match "tak" after "jak"
+ which is not preceeded by a comma:</p>
+
+ <? hl('<token>tak</token>
+<token skip="-1">jak</token>
+<token>tak<exception scope="previous">,</exception></token>'); ?>
+
+ <p>In this case, the rule excludes all sentences, where there is a comma
+ before "tak". Note that it's very hard to make such an exclusion otherwise.
+ </p>
+
+ <p><strong>3. Using variables in rules</strong>
+
+ <p>In XML rules, you can refer to previously matched tokens in the pattern. For example:</p>
+
+ <?php hl('<pattern mark_from="2">
+ <token regexp="yes" skip="-1">ani|ni|i|lub|albo|czy|oraz<exception scope="next">,</exception></token>
+ <token><match no="0"/></token>
+</pattern>'); ?>
+
+ <p>This rule matches sequences like <b>ani... ani, ni... ni, i... i</b> but you don't have to
+ write all these cases explicitly. The first match (matches are numbered from zero, so it's
+ &lt;match no="0"/&gt;) is automatically inserted into the second token. Note
+ that this rule will match sentences like:
+
+ <tt>Nie kupiłem ani gruszek ani jabłek. Kupię to lub to lub tamto.</tt></p>
+
+ <p>A similar mechanism could be used in suggestions, however there are more features, and tokens are
+ numbered from 1 (for compatibility with the older notation \1 for the first matched token). For example:</p>
+
+ <?php hl('<suggestion><match no="1"/></suggestion>'); ?>
+
+ <p>A more complicated example:</p>
+
+ <?php hl('<pattern>
+<token regexp="yes">^(\p{Lu}{2}+[i]*\p{Lu}+[\p{L}&amp;
+&amp;[^\p{Lu}]]{1,4}+)</token>
+</pattern>
+<message>Prawdopodobny błąd zapisu odmiany;
+ skrótowce odmieniamy z dywizem:
+ <suggestion><match no="1" regexp_match="^(\p{Lu}{2}+[i]*\p{Lu}+)([\p{L}&amp;
+&amp;[^\p{Lu}]]{1,4}+)" regexp_replace="$1-$2"/></suggestion></message>'); ?>
+
+ <p>This rule matches Polish inflected acronyms such as "SMSem" that should be written with
+ a hyphen: "SMS-em". So the acronym is matched with a complicated regular expression, and the
+ match replaces the match using Java regular expression notation. Basically, the regular expression
+ only shows two parts and inserts a hyphen between them.</p>
+
+ <p>For some languages (currently Polish and English), element &lt;match/&gt; can be used to
+ insert an inflected matched token (or another word with a specified part of speech
+ tag). For example:</p>
+
+ <?php hl('<pattern mark_from="1" mark_to="-1">
+ <token regexp="yes">has|have</token>
+ <token postag="VBD|VBP|VB" postag_regexp="yes"><exception postag="VBN|NN:U.*|JJ.*|RB" postag_regexp="yes"/></token>
+ <token><exception postag="VBG"/></token>
+</pattern>
+<message>Possible agreement error -- use past participle here: <suggestion><match no="2" postag="VBN"/></suggestion>.</message>'); ?>
+
+ <p>The above rule takes the second verb with a POS tag "VBN", "VBP" or "VB" and displays its
+ form with a POS tag "VBN" in the suggestion. You can also specify POS tags using
+ regular expressions (<tt>postag_regexp="yes"</tt>) and replace POS tags – just like
+ in the above example with acronyms. This is useful for large and complicated
+ tagsets (for many examples, see Polish rule file: <tt>rules/pl/grammar.xml</tt>).</p>
+
+ <p>Sometimes the rule should change the case of the matched word. For this purpose,
+ you can use <tt>case_conversion</tt> attribute values: <tt>startlower</tt>, <tt>startupper</tt>,
+ <tt>allupper</tt> and <tt>alllower</tt>.
+
+ <p>Another useful thing is that &lt;match&gt; can refer to a token, but apply its POS
+ to another word. This is useful for suggesting another word with the same part
+ of speech. There is a special abbreviated syntax used for this purpose:</p>
+
+ <?php hl('<match no="1" postag="verb:.*perf">kierować</match>'); ?>
+
+ <p>This syntax means: take the POS tag of the first matched token that matches the regular expression specified
+ in the <tt>postag</tt> attribute, and then apply this POS tag to the verb "kierować". This way the verb
+ will be inflected just the way the matched verb was originally inflected. The reason why you
+ need to specify the POS tag is that the matched token can have several POS tags (several readings).</p>
+
+ <p>Note that by default <tt>&lt;match&gt;</tt> element inside the <tt>&lt;token&gt;</tt> element inserts only a string –
+ so it matches a string, and not part of speech tags. So even if it refers to
+ a token with a POS tag, it copies the matched token, and not its POS token. However,
+ you can use all above attributes to change the form of the token.</p>
+ <p>You can however use the <tt>&lt;match&gt;</tt> element to copy POS tags alone but to do so,
+ you must use the attribute <tt>setpos="yes"</tt>. All other attributes can be applied so that
+ the POS could be converted appropriately. This can be useful for creating rules specifying grammatical
+ agreement. Currently, such rules must be quite wordy, somewhat more terse syntax is in
+ development.</p>
+ <p><strong>4. Turning the rule off</strong></p>
+ <p>Some rules can be optional, useful only in specific registers,
+ or very sensitive. You can turn them off by default by using an
+ attribute <tt>default="off"</tt>. The user can turn the rule in the
+ Options dialog box, and this setting is being saved in the configuration
+ file.</p>
+ </li>
+</ul>
+
+<p><a name="javarules"><strong>Adding new Java rules</strong></a><br />
+Rules that cannot be expressed with a simple pattern in <tt>grammar.xml</tt>
+can be developed as a Java class. See
+<tt><a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/java/de/danielnaber/languagetool/rules/WordRepeatRule.java">rules/WordRepeatRule.java</a></tt>
+for a simple
+example which you can use to develop your own rules. You will also need to
+add your rule to <tt>JLanguageTool.java</tt> to activate it.</p>
+
+<p><a name="translation"><strong>Translating the user interface</strong></a><br />
+To translate the user interface, just copy <tt>MessagesBundle_en.properties</tt>
+to <tt>MessagesBundle_xx.properties</tt> (whereas <tt>xx</tt> is the code of your
+language) and translate the text. Note that hot keys for menu items are specified
+with the <tt>&amp;</tt> character (for example, <tt>&amp;File</tt>).
+The next time you start LanguageTool, it should show your translation (assuming your computer is configured to use your
+language -- if
+that's not the case, start LanguageTool with <tt>java -Duser.language=xx -jar LanguageToolGUI.jar</tt>).
+</p>
+
+<p><a name="newlanguage"><strong>Adding support for a new language</strong></a><br />
+Adding a new language requires some changes to the Java source files. You should check out
+the "JLanguageTool" module from CVS (see the <a href="http://sourceforge.net/cvs/?group_id=110216">sourceforge
+help</a>). You may then call <tt><a href="http://ant.apache.org/">ant</a></tt> to
+build LanguageTool (this is optional, it's okay to work only inside Eclipse). Ant should compile
+a file named like <tt>LanguageTool-1.0.0-dev.oxt</tt> in the <tt>dist</tt> directory.</p>
+
+<ul>
+
+<li><p><tt>Language.java</tt> contains
+the information about supported languages. You can add a new language by creating
+a new <tt>Language</tt> object in this class and providing a part-of-speech tagger
+for it, similar to <tt>de/danielnaber/languagetool/tagging/en/EnglishTagger.java</tt>. The tagger
+must implement the <tt>Tagger</tt> interface, any implementation details (i.e. how
+to actually assign tags to words) are up to you -- the easiest thing is probably
+to just copy the English tagger.</p>
+
+<p>A trivial tagger that only assigns
+null tags to words is <tt>DemoTagger</tt>. This is enough for rules that refer
+to words but not to part-of-speech tags. You can add those rules to a file
+<tt>rules/xy/grammar.xml</tt>, whereas <tt>xy</tt> is the short name for your language.
+You will also need to add the short name of your language to <tt>rules.dtd</tt>.</p>
+
+<p>The test cases run by "ant test" will automatically include your new language
+and its rules, based on the "example" elements of each rule.</p>
+
+<p>To add part-of-speech tags, please have a look at <tt>resource/en/make-dict-en.sh</tt>
+(note: this file is only in CVS, not in the released OXT). First try to make it work
+for English. You need the
+<?=show_link("fsa", "http://www.eti.pg.gda.pl/katedry/kiw/pracownicy/Jan.Daciuk/personal/fsa.html", 1) ?>
+package. Install it and add its installation directory to your PATH. Once it works for English,
+create your own version of <tt>manually_added.txt</tt> and use that to create a <tt>.dict</tt> file,
+then adapt your tagger to use it (e.g. copy <tt>EnglishTagger.java</tt> and change the
+<tt>RESOURCE_FILENAME</tt> constant). More details about building dictionaries
+are <?=show_link("in the Wiki.", "http://languagetool.wikidot.com/developing-a-tagger-dictionary", 0) ?>
+</p></li>
+
+<li>Adapt <tt>openoffice/Addons.xcu</tt> and <tt>openoffice/description.xml</tt> to translate the user
+interface of LanguageTool into your language when used in OpenOffice.org.</li>
+
+<li>Adapt <tt>build.xml</tt>. Just search for "/en/"
+in that file and copy those lines, adapting them to your language.</li>
+
+<li>Copy <tt>MessagesBundle.properties</tt> to <tt>MessagesBundle_xx.properties</tt>,
+whereas <tt>xx</tt> is the code of your new language and translate all values (i.e. the strings
+on the right of the "=" sign).</li>
+
+</ul>
+
+<p><a name="background"><strong>Background</strong></a><br />
+For background information, my diploma thesis
+about LanguageTool is available (note that this refers to an earlier version of LanguageTool
+which was written in Python):<br />
+<?=show_link("PDF, 650 KB", "http://www.danielnaber.de/languagetool/download/style_and_grammar_checker.pdf", 0) ?>
+<br /><?=show_link("Postscript (.ps.gz), 630 KB", "http://www.danielnaber.de/languagetool/download/style_and_grammar_checker.ps.gz", 0) ?>
+</p>
+
+<?php
+include("../../include/footer.php");
+?>
diff --git a/JLanguageTool/website/www/favicon.ico b/JLanguageTool/website/www/favicon.ico
new file mode 100644
index 0000000..87b4861
--- /dev/null
+++ b/JLanguageTool/website/www/favicon.ico
Binary files differ
diff --git a/JLanguageTool/website/www/images/bg.jpg b/JLanguageTool/website/www/images/bg.jpg
new file mode 100644
index 0000000..011c8bd
--- /dev/null
+++ b/JLanguageTool/website/www/images/bg.jpg
Binary files differ
diff --git a/JLanguageTool/website/www/images/link.png b/JLanguageTool/website/www/images/link.png
new file mode 100644
index 0000000..82e4e48
--- /dev/null
+++ b/JLanguageTool/website/www/images/link.png
Binary files differ
diff --git a/JLanguageTool/website/www/images/link_extern.png b/JLanguageTool/website/www/images/link_extern.png
new file mode 100644
index 0000000..be041a1
--- /dev/null
+++ b/JLanguageTool/website/www/images/link_extern.png
Binary files differ
diff --git a/JLanguageTool/website/www/images/pix.png b/JLanguageTool/website/www/images/pix.png
new file mode 100644
index 0000000..21a0098
--- /dev/null
+++ b/JLanguageTool/website/www/images/pix.png
Binary files differ
diff --git a/JLanguageTool/website/www/images/sign.png b/JLanguageTool/website/www/images/sign.png
new file mode 100644
index 0000000..20c7e7f
--- /dev/null
+++ b/JLanguageTool/website/www/images/sign.png
Binary files differ
diff --git a/JLanguageTool/website/www/images/twitter_link16x16.png b/JLanguageTool/website/www/images/twitter_link16x16.png
new file mode 100644
index 0000000..25e1cd4
--- /dev/null
+++ b/JLanguageTool/website/www/images/twitter_link16x16.png
Binary files differ
diff --git a/JLanguageTool/website/www/index.php b/JLanguageTool/website/www/index.php
new file mode 100644
index 0000000..068d49c
--- /dev/null
+++ b/JLanguageTool/website/www/index.php
@@ -0,0 +1,132 @@
+<?php
+$page = "homepage";
+$title = "LanguageTool";
+$title2 = "Open Source language checker";
+$lastmod = "2011-01-02 16:20:00 CET";
+include("../include/header.php");
+?>
+
+<p class="firstpara"><strong>An Open Source style and grammar checker for English, French, German, Polish,
+Dutch, Romanian, and <?=show_link("other languages", "languages/", 0) ?>.</strong>
+You can think of LanguageTool as a software to detect errors that a simple spell checker cannot detect, e.g. mixing
+up <em>there/their</em>, <em>no/now</em> etc. It can also detect some grammar mistakes. It does not include spell checking.</p>
+
+<p>LanguageTool will only find errors for which a rule is defined in its
+XML configuration files. Rules for more complicated errors can be written in Java.</p>
+
+
+<h2>Download</h2>
+
+<div class="downloadSection">
+ <h2><?=show_link("Download LanguageTool 1.2 (18&nbsp;MB)", "download/LanguageTool-1.2.oxt", 0) ?></h2>
+ <!--
+ <table>
+ <tr>
+ <td><h2><?=show_link("Download LanguageTool 1.0.0 (18&nbsp;MB)", "download/LanguageTool-1.1.oxt", 0) ?></h2></td>
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+ <td><h2><?=show_link("Download LanguageTool 1.1beta (18&nbsp;MB)", "download//LanguageTool-1.1-beta1.oxt", 0) ?></h2></td>
+ </tr>
+ </table>
+ -->
+ <ul>
+ <li>Requires <?=show_link("Java", "http://www.java.com/en/download/manual.jsp", 1)?>&nbsp;5.0
+ or later. This version only works with OpenOffice.org 3.0.1 or later
+ and you need to <strong>restart OpenOffice.org</strong> after installation of this extension.</li>
+ <li>If you're upgrading from LanguageTool 0.9.5, you must de-install
+ it <strong>before</strong> upgrading to a later version (check
+ <a href="http://languagetool.wikidot.com/removing-languagetool-0-9-5-from-openoffice-3-0-1">this
+ page</a> if you forgot to do so).</li>
+ <li>Please report bugs to the <?=show_link("Sourceforge bug tracker", "http://sourceforge.net/tracker/?group_id=110216&amp;atid=655717", 1)?>
+ or send an email to naber <i>at</i> danielnaber.de.</li>
+ </ul>
+</div>
+
+<!-- -->
+<p><strong>Try LanguageTool 1.2 without local installation, using Java WebStart.</strong> Requires Java 1.6_04 or later. You will get a security warning which you
+need to ignore:<br />
+<strong><?=show_link("Start LanguageTool (18&nbsp;MB)", "webstart/web/LanguageTool.jnlp", 0) ?></strong></p>
+<!-- -->
+
+
+<h2>News</h2>
+
+
+<p><strong>2011-01-02:</strong> Released LanguageTool 1.2. Changes include:
+<ul>
+ <li>Rule updates for Romanian, Dutch, Polish, German, Russian, Spanish, French and Danish.</li>
+ <li>Added new scripts testwikipedia.sh and testwikipedia.bat to the distribution. These
+ let you check a local Wikipedia XML dump.</li>
+ <li>Added support for Esperanto.</li>
+ <li>Small bug fixes.</li>
+ <li>For a more detailed list of changes, see the <?=show_link("Changelog", "download/CHANGES.txt", 0) ?></li>
+</ul>
+
+<p><strong>2010-09-26:</strong> Released version 1.1. For a list of changes, see the <?=show_link("Changelog", "download/CHANGES.txt", 0) ?></p>
+
+<p><strong>2010-08-29:</strong>
+
+There's a new <?=show_link("script to use LanguageTool from within vim", "http://www.vim.org/scripts/script.php?script_id=3223", 0)?>.</p>
+
+<p><strong>2010-02-20:</strong>
+
+LanguageTool has been integrated into <?=show_link("After the Deadline", "http://open.afterthedeadline.com/", 0)?>,
+a powerful English grammar checker. Thanks to LanguageTool it now also supports French and German.
+This means that you can now use LanguageTool for these languages via the
+<?=show_link("After the Deadline Firefox plugin", "http://firefox.afterthedeadline.com/", 0)?>.</p>
+
+
+<h2>Installation and Usage</h2>
+
+<ul>
+ <li><strong>In OpenOffice.org</strong>:
+ Double click <tt>LanguageTool-1.2.oxt</tt> to install it.
+ If that doesn't work, call <em>Tools -&gt; Extension Manager -&gt; Add...</em>
+ to install it. Close OpenOffice.org and re-start it. Type some text
+ with an error (e.g. "This is an test." &ndash; make sure the text language is set
+ to English) and you should see a blue underline.</li>
+
+ <li>Also see <?=show_link("Usage", "usage/", 0)?> for using LanguageTool outside of OpenOffice.org.</li>
+</ul>
+
+<h2><a name="commonproblems"><strong>Common problems with OpenOffice.org integration</strong></a></h2>
+
+<ul>
+<li>Did you restart OpenOffice.org - including the QuickStarter - after installation of LanguageTool? This is required,
+ even if OpenOffice.org doesn't say so. (<a href="http://qa.openoffice.org/issues/show_bug.cgi?id=88692">Issue 88692</a>)</li>
+<li>LanguageTool installation fails if the name of your user account contains
+ special characters. The only workaround so far seems to be to use a different
+ user account. (<a href="http://qa.openoffice.org/issues/show_bug.cgi?id=95162">Issue 95162</a>)</li>
+<li>Make sure <a href="http://www.java.com/en/download/manual.jsp">Java 5.0 or later from Sun Microsystems</a>
+ is installed on your system. Java versions which are not from Sun Microsystems may not work.</li>
+<li>Make sure this version of Java is selected in OpenOffice.org
+ (under <em>Tools -&gt; Options -&gt; Java</em>).</li>
+<li>If LanguageTool doesn't start and you see no error message, please
+ check if the extension is enabled in the Extension manager
+ (under <em>Tools -&gt; Extension Manager</em>).</li>
+<li>On Ubuntu, when you get an error message during installation, you might need to
+ install the <tt>openoffice.org-java-common</tt> package. See
+ <a href="http://nancib.wordpress.com/2008/05/03/fixing-the-openofficeorg-grammar-glitch-in-ubuntu-hardy/">this blog posting</a>
+ for details.</li>
+<li>The menu items in OpenOffice.org get mixed up when both <a href="http://open.afterthedeadline.com/">After the Deadline</a>
+ and LanguageTool are installed. This issue is tracked as <a href="http://openatd.trac.wordpress.org/ticket/215">ticket #215 at After the Deadline</a>.</li>
+<li>LanguageTool didn't work together with the <a href="http://extensions.services.openoffice.org/en/project/DeltaXMLODTCompare">DeltaXML
+ ODT Compare</a> extension - use version 1.2.0 of DeltaXML ODT Compare, which fixes the problem.</li>
+<li>If you get a message "Can not activate the factory for com.sun.star.help.HelpIndexer because java.lang.NoClassDefFoundError: org/apache/lucene/analysis/cjk/CJKAnalyzer":
+ this was a bug In OpenOffice.org 3.1, it was fixed in version 3.2 (<a href="http://qa.openoffice.org/issues/show_bug.cgi?id=98680">Issue 98680</a>)</li>
+<li style="margin-top:8px">If these hints don't help, please email <strong>naber at danielnaber de</strong> describing the problem
+ and letting me know which version of LanguageTool, OpenOffice.org and which operating system you are using.</li>
+</ul>
+
+<p><strong>Known bugs:</strong> Please also see the <?=show_link("README", "download/README.txt", 0)?>
+for a list of known problems.</p>
+
+<h2>License &amp; Source Code</h2>
+
+<p>LanguageTool is freely available under the <?=show_link("LGPL", "http://www.fsf.org/licensing/licenses/lgpl.html#SEC1", 0)?>.
+The source is available <?=show_link("at Sourceforge", "http://sourceforge.net/projects/languagetool/", 1) ?> via CVS</p>
+
+<div style="height:750px"></div>
+
+<?php
+include("../include/footer.php");
+?>
diff --git a/JLanguageTool/website/www/languages/index.php b/JLanguageTool/website/www/languages/index.php
new file mode 100644
index 0000000..36b88c4
--- /dev/null
+++ b/JLanguageTool/website/www/languages/index.php
@@ -0,0 +1,83 @@
+<?php
+$page = "languages";
+$title = "LanguageTool";
+$title2 = "Supported Languages";
+$lastmod = "2011-01-02 16:30:00 CET";
+include("../../include/header.php");
+?>
+
+<p class="firstpara">LanguageTool supports several languages to a different degree. This page lists the
+number of rules per language to give a very rough indication of how well a
+language is supported.</p>
+
+<!-- TODO: link rules link java dir -->
+
+<!-- Output of RuleOverview.java: -->
+
+<b>Rules in LanguageTool 1.2</b><br />
+Date: 2011-01-02<br /><br />
+
+<table>
+<tr>
+ <th></th>
+ <th align="right">XML rules</th>
+ <th>&nbsp;&nbsp;</th>
+ <th align="right">Java rules</th>
+ <th>&nbsp;&nbsp;</th>
+ <th align="right"><a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/false-friends.xml">False friends</a></th>
+ <th>&nbsp;&nbsp;</th>
+ <th align="left">Rule Maintainers</th>
+</tr>
+<tr><td>Belarusian</td><td align="right">7 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/be/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=be">browse</a>)</td><td></td><td align="right">0</td><td></td>
+<td align="right">0</td><td></td><td align="left">Alex Buloichik</td></tr>
+<tr><td>Catalan</td><td align="right">213 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/ca/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=ca">browse</a>)</td><td></td><td align="right">1</td><td></td>
+<td align="right">4</td><td></td><td align="left">Ricard Roca</td></tr>
+<tr><td>Danish</td><td align="right">22 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/da/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=da">browse</a>)</td><td></td><td align="right">0</td><td></td>
+<td align="right">0</td><td></td><td align="left">Esben Aaberg</td></tr>
+<tr><td>Dutch</td><td align="right">302 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/nl/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=nl">browse</a>)</td><td></td><td align="right">0</td><td></td>
+<td align="right">0</td><td></td><td align="left"><a href="http://www.opentaal.org">Ruud Baars</a></td></tr>
+<tr><td>English</td><td align="right">478 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/en/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=en">browse</a>)</td><td></td><td align="right">3</td><td></td>
+<td align="right">230</td><td></td><td align="left">Marcin Miłkowski, Daniel Naber</td></tr>
+<tr><td>Esperanto</td><td align="right">75 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/eo/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=eo">browse</a>)</td><td></td><td align="right">0</td><td></td>
+<td align="right">0</td><td></td><td align="left">Dominique Pellé</td></tr>
+<tr><td>French</td><td align="right">1676 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/fr/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=fr">browse</a>)</td><td></td><td align="right">1</td><td></td>
+<td align="right">5</td><td></td><td align="left">Agnes Souque, Hugo Voisard&nbsp;(2006-2007)</td></tr>
+<tr><td>Galician</td><td align="right">166 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/gl/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=gl">browse</a>)</td><td></td><td align="right">0</td><td></td>
+<td align="right">6</td><td></td><td align="left"><a href="http://www.g11n.net/languagetool-gl">Susana Sotelo Docío</a></td></tr>
+<tr><td>German</td><td align="right">137 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/de/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=de">browse</a>)</td><td></td><td align="right">8</td><td></td>
+<td align="right">88</td><td></td><td align="left">Daniel Naber</td></tr>
+<tr><td>Icelandic</td><td align="right">39 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/is/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=is">browse</a>)</td><td></td><td align="right">0</td><td></td>
+<td align="right">0</td><td></td><td align="left">Anton Karl Ingason</td></tr>
+<tr><td>Italian</td><td align="right">86 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/it/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=it">browse</a>)</td><td></td><td align="right">0</td><td></td>
+<td align="right">36</td><td></td><td align="left">Paolo Bianchini</td></tr>
+<tr><td>Lithuanian</td><td align="right">4 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/lt/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=lt">browse</a>)</td><td></td><td align="right">0</td><td></td>
+<td align="right">0</td><td></td><td align="left">Mantas Kriaučiūnas</td></tr>
+<tr><td>Malayalam</td><td align="right">18 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/ml/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=ml">browse</a>)</td><td></td><td align="right">0</td><td></td>
+<td align="right">0</td><td></td><td align="left">Jithesh.V.S</td></tr>
+<tr><td>Polish</td><td align="right">1027 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/pl/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=pl">browse</a>)</td><td></td><td align="right">4</td><td></td>
+<td align="right">139</td><td></td><td align="left">Marcin Miłkowski</td></tr>
+<tr><td>Romanian</td><td align="right">418 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/ro/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=ro">browse</a>)</td><td></td><td align="right">1</td><td></td>
+<td align="right">0</td><td></td><td align="left"><a href="http://www.archeus.ro">Ionuț Păduraru</a></td></tr>
+<tr><td>Russian</td><td align="right">117 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/ru/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=ru">browse</a>)</td><td></td><td align="right">3</td><td></td>
+<td align="right">0</td><td></td><td align="left">Yakov Reztsov</td></tr>
+<tr><td>Slovak</td><td align="right">55 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/sk/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=sk">browse</a>)</td><td></td><td align="right">2</td><td></td>
+<td align="right">0</td><td></td><td align="left"><a href="http://sk-spell.sk.cx">Zdenko Podobný</a></td></tr>
+<tr><td>Slovenian</td><td align="right">58 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/sl/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=sl">browse</a>)</td><td></td><td align="right">0</td><td></td>
+<td align="right">0</td><td></td><td align="left">Martin Srebotnjak</td></tr>
+<tr><td>Spanish</td><td align="right">64 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/es/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=es">browse</a>)</td><td></td><td align="right">1</td><td></td>
+<td align="right">27</td><td></td><td align="left"><a href="http://languagetool-es.blogspot.com/">Juan Martorell</a></td></tr>
+<tr><td>Swedish</td><td align="right">26 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/sv/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=sv">browse</a>)</td><td></td><td align="right">1</td><td></td>
+<td align="right">5</td><td></td><td align="left">Niklas Johansson</td></tr>
+<tr><td>Ukrainian</td><td align="right">8 (<a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/uk/grammar.xml">show</a>/<a href="http://community.languagetool.org/rule/list?lang=uk">browse</a>)</td><td></td><td align="right">1</td><td></td>
+<td align="right">0</td><td></td><td align="left">Andriy Rysin</td></tr>
+</table>
+
+<!-- End Output of RuleOverview.java -->
+
+<p>The number of Java rules listed is only the number of rules specific
+to that language. There are some rules that deal with punctuation
+and that apply to almost all languages.</p>
+
+<?php
+include("../../include/footer.php");
+?>
diff --git a/JLanguageTool/website/www/languagetool.update.xml b/JLanguageTool/website/www/languagetool.update.xml
new file mode 100644
index 0000000..ad3f2af
--- /dev/null
+++ b/JLanguageTool/website/www/languagetool.update.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<description xmlns="http://openoffice.org/extensions/update/2006"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+ <identifier value="org.openoffice.languagetool.oxt"/>
+ <version value="1.2" />
+ <update-download>
+ <src xlink:href="http://www.languagetool.org/download/LanguageTool-1.2.oxt" />
+ </update-download>
+ <release-notes>
+ <src xlink:href="http://www.languagetool.org/download/CHANGES.txt" lang="en" />
+ </release-notes>
+</description>
diff --git a/JLanguageTool/website/www/links/index.php b/JLanguageTool/website/www/links/index.php
new file mode 100644
index 0000000..ec573d1
--- /dev/null
+++ b/JLanguageTool/website/www/links/index.php
@@ -0,0 +1,80 @@
+<?php
+$page = "links";
+$title = "LanguageTool";
+$title2 = "Links";
+$lastmod = "2010-08-29 22:35:00 CET";
+include("../../include/header.php");
+?>
+
+<p><strong>Contact:</strong><br />
+LanguageTool was originally written by Daniel Naber and is now maintained by
+Daniel Naber (<strong>naber <span>a&#116;</span> danielnaber<span>.</span>de</strong>) and Marcin Miłkowski
+(<a href="http://marcinmilkowski.pl/en/Contact/">contact form</a>).</p>
+
+<p><strong>Issue tracking:</strong></p>
+
+<ul style="list-style:none">
+ <li><?=show_link("Bug reports", "http://sourceforge.net/tracker/?limit=25&amp;func=&amp;group_id=110216&amp;atid=655717&amp;assignee=&amp;status=&amp;category=&amp;artgroup=&amp;keyword=&amp;submitter=&amp;artifact_id=&amp;assignee=&amp;status=1&amp;category=&amp;artgroup=&amp;submitter=&amp;keyword=&amp;artifact_id=&amp;submit=Filter", 0)?></li>
+ <li><?=show_link("Feature requests", "http://sourceforge.net/tracker/?limit=25&amp;func=&amp;group_id=110216&amp;atid=655720&amp;assignee=&amp;status=&amp;category=&amp;artgroup=&amp;keyword=&amp;submitter=&amp;artifact_id=&amp;assignee=&amp;status=1&amp;category=&amp;artgroup=&amp;submitter=&amp;keyword=&amp;artifact_id=&amp;submit=Filter", 0)?></li>
+</ul>
+
+<p><strong>Mailing lists:</strong></p>
+
+<ul style="list-style:none">
+ <li>Development and user discussion:
+ <?=show_link("Subscribe/Unsubscribe", "http://lists.sourceforge.net/mailman/listinfo/languagetool-devel", 0) ?>,
+ <?=show_link("archive", "http://sourceforge.net/mailarchive/forum.php?forum_name=languagetool-devel", 0)?></li>
+ <li>CVS commit messages: <?=show_link("Subscribe/Unsubscribe", "http://lists.sourceforge.net/mailman/listinfo/languagetool-cvs", 0) ?>,
+ <?=show_link("archive", "http://sourceforge.net/mailarchive/forum.php?forum_name=languagetool-cvs", 0)?></li>
+</ul>
+
+<p class="firstpara"><strong>LanguageTool integration</strong>:</p>
+
+<ul style="list-style:none">
+ <li><?=show_link("LanguageTool for vim", "http://www.vim.org/scripts/script.php?script_id=3223", 1) ?></li>
+ <li><?=show_link("LanguageTool for LyX", "http://wiki.lyx.org/Tools/LyX-GrammarChecker", 1) ?></li>
+ <li><?=show_link("LanguageTool plugin for OmegaT", "https://sourceforge.net/projects/omegat-plugins/files/OmegaT-LanguageTool/", 1)?>
+ a plugin that enables grammar-checking in computer-aided translation tool OmegaT (open source)</li>
+</ul>
+
+<p class="firstpara"><strong>Links</strong> to other Open Source language tools:</p>
+
+<ul style="list-style:none">
+ <li><?=show_link("After the Deadline", "http://open.afterthedeadline.com/", 0)?>,
+ a grammar checker for English which integrates LanguageTool to support German and French</li>
+ <!-- <li><?=show_link("LangBot", "http://apoema.net/langbot/en/gc.lb", 0)?>,
+ an on-line grammar checker which uses LanguageTool, and includes integration
+ for Firefox via <?=show_link("Ubiquity", "http://ubiquity.mozilla.com/", 0) ?> plugin</li> -->
+ <li><?=show_link("An Gramad&oacute;ir", "http://borel.slu.edu/gramadoir/", 0)?>,
+ a grammar checker for the Irish language</li>
+ <li><?=show_link("CoGrOO", "http://cogroo.sourceforge.net/", 0)?>
+ a Grammar Checker for Portuguese</li>
+ <li><?=show_link("GRAC", "http://grac.sourceforge.net/", 0)?>
+ corpus-based grammar checker written in Python</li>
+ <li><?=show_link("Queequeg", "http://queequeg.sourceforge.net/index-e.html", 0)?>
+ agreement checker written in Python</li>
+ <li><?=show_link("LanguageTool in Python", "http://tkltrans.sourceforge.net/#r03", 0) ?>, a much older
+ and less powerful version without OpenOffice.org integration but support for Hungarian</li>
+</ul>
+
+<p><strong>Resources:</strong></p>
+
+<ul style="list-style:none">
+ <li><?=show_link("XML file with 221 collected English grammar errors", "/download/errors.xml", 0) ?>, 23KB</li>
+ <li><?=show_link("Another English error collection",
+ "http://languagetool.cvs.sourceforge.net/languagetool/JLanguageTool/resource/en/errors.txt?view=markup", 1) ?></li>
+ <li><?=show_link("German error collection",
+ "http://languagetool.cvs.sourceforge.net/languagetool/JLanguageTool/resource/de/errors.txt?view=markup", 1) ?></li>
+</ul>
+
+<br /><br /><br />
+
+<p>Website design inspired by <!-- Please leave this if you use our template. Thank you -->
+<a href="http://www.darjanpanic.com" target="_blank"
+ title="Freelance Graphic artist">Darjan Panic</a> &amp; <a
+ href="http://www.briangreens.com" target="_blank">Brian Green</a> <!-- Please leave this if you use our template. Thank you -->
+</p>
+
+<?php
+include("../../include/footer.php");
+?>
diff --git a/JLanguageTool/website/www/screenshots/art/screenshot.png b/JLanguageTool/website/www/screenshots/art/screenshot.png
new file mode 100644
index 0000000..3a92b5c
--- /dev/null
+++ b/JLanguageTool/website/www/screenshots/art/screenshot.png
Binary files differ
diff --git a/JLanguageTool/website/www/screenshots/art/screenshot_ooo.png b/JLanguageTool/website/www/screenshots/art/screenshot_ooo.png
new file mode 100644
index 0000000..8ae032d
--- /dev/null
+++ b/JLanguageTool/website/www/screenshots/art/screenshot_ooo.png
Binary files differ
diff --git a/JLanguageTool/website/www/screenshots/art/screenshot_ooo3.png b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3.png
new file mode 100644
index 0000000..45a80cf
--- /dev/null
+++ b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3.png
Binary files differ
diff --git a/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_pl.png b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_pl.png
new file mode 100644
index 0000000..eeb447d
--- /dev/null
+++ b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_pl.png
Binary files differ
diff --git a/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_pl_small.png b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_pl_small.png
new file mode 100644
index 0000000..afbdd4a
--- /dev/null
+++ b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_pl_small.png
Binary files differ
diff --git a/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_small.png b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_small.png
new file mode 100644
index 0000000..61d0059
--- /dev/null
+++ b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_small.png
Binary files differ
diff --git a/JLanguageTool/website/www/screenshots/art/screenshot_ooo_small.png b/JLanguageTool/website/www/screenshots/art/screenshot_ooo_small.png
new file mode 100644
index 0000000..f5ac6ae
--- /dev/null
+++ b/JLanguageTool/website/www/screenshots/art/screenshot_ooo_small.png
Binary files differ
diff --git a/JLanguageTool/website/www/screenshots/art/screenshot_small.png b/JLanguageTool/website/www/screenshots/art/screenshot_small.png
new file mode 100644
index 0000000..92bad62
--- /dev/null
+++ b/JLanguageTool/website/www/screenshots/art/screenshot_small.png
Binary files differ
diff --git a/JLanguageTool/website/www/screenshots/index.php b/JLanguageTool/website/www/screenshots/index.php
new file mode 100644
index 0000000..ffaebed
--- /dev/null
+++ b/JLanguageTool/website/www/screenshots/index.php
@@ -0,0 +1,53 @@
+<?php
+$page = "screenshots";
+$title = "LanguageTool";
+$title2 = "Screenshots";
+$lastmod = "2008-08-07 22:00:00 CET";
+include("../../include/header.php");
+?>
+
+<table border="0" cellpadding="0" cellspacing="0" style="margin-left:5px;">
+<tr><td>&nbsp;</td></tr>
+<tr>
+<td>
+ <a href="art/screenshot_ooo3_pl.png"><img border="0" width="320" height="235"
+ src="art/screenshot_ooo3_pl_small.png" alt="LanguageTool in Polish OpenOffice.org 3.0" /></a><br />
+ <a href="art/screenshot_ooo3_pl.png"><span style="font-size:10px">LanguageTool installed
+ as an add-on<br/>in Polish OpenOffice.org 3.0.1 (click to enlarge)</span></a>
+</td>
+</tr>
+<tr><td>&nbsp;</td></tr>
+<tr><td>&nbsp;</td></tr>
+<tr>
+<td>
+ <a href="art/screenshot_ooo3.png"><img border="0" width="300" height="216"
+ src="art/screenshot_ooo3_small.png" alt="LanguageTool in OpenOffice.org 3.0" /></a><br />
+ <a href="art/screenshot_ooo3.png"><span style="font-size:10px">LanguageTool installed
+ as an add-on<br/>in OpenOffice.org 3.0 (click to enlarge)</span></a>
+</td>
+</tr>
+<tr><td>&nbsp;</td></tr>
+<tr><td>&nbsp;</td></tr>
+<tr>
+<td>
+ <a href="art/screenshot_ooo.png"><img border="0" width="300" height="258"
+ src="art/screenshot_ooo_small.png" alt="LanguageTool in OpenOffice.org" /></a><br />
+ <a href="art/screenshot_ooo.png"><span style="font-size:10px">LanguageTool installed
+ as an add-on<br/>in OpenOffice.org 2.x (click to enlarge)</span></a>
+</td>
+</tr>
+<tr><td>&nbsp;</td></tr>
+<tr><td>&nbsp;</td></tr>
+<tr>
+<td>
+ <a href="art/screenshot.png"><img border="0" width="250" height="264"
+ src="art/screenshot_small.png" alt="stand-alone version of LanguageTool" /></a><br />
+ <a href="art/screenshot.png"><span style="font-size:10px">The simple stand-alone
+ user interface which lets<br/>you type in or paste text and check it (click to enlarge)</span></a>
+</td>
+</tr>
+</table>
+
+<?php
+include("../../include/footer.php");
+?>
diff --git a/JLanguageTool/website/www/usage/index.php b/JLanguageTool/website/www/usage/index.php
new file mode 100644
index 0000000..477daff
--- /dev/null
+++ b/JLanguageTool/website/www/usage/index.php
@@ -0,0 +1,83 @@
+<?php
+$page = "usage";
+$title = "LanguageTool";
+$title2 = "Usage";
+$lastmod = "2008-02-17 19:20:00 CET";
+include("../../include/header.php");
+include('../../include/geshi/geshi.php');
+?>
+
+<p><strong>Installation and Usage outside OpenOffice.org</strong></p>
+
+<p>See <?=show_link("Overview", "/", 0)?> for a description of how to use LanguageTool
+with OpenOffice.org.</p>
+
+<ul class="largelist">
+
+ <li><strong>As a stand-alone application</strong>:
+ Rename the archive so it ends with ".zip" and unzip it. If you're
+ using Java 5.0, also unzip the <tt>standalone-libs.zip</tt> that will be created.
+ Then start <tt>LanguageToolGUI.jar</tt> by double clicking on it. If your computer isn't
+ configured to start jar archives, start it from the command line using<br />
+ <tt>java -jar LanguageToolGUI.jar</tt><br />
+ You can use the <tt>--tray</tt> option to start LanguageTool inside the system tray.
+ </li>
+
+ <li><strong>As a stand-alone application on the command line</strong>:
+ see above, but start LanguageTool.jar using<br />
+ <tt>java -jar LanguageTool.jar &lt;filename></tt><br />
+ LanguageTool only supports plain text files.</li>
+
+ <li><strong>Embedding LanguageTool in Java applications:</strong> See
+ <?=show_link("the API documentation", "/development/api/", 0) ?>. You just need to create a
+ JLanguageTool object and use that
+ to check your text. For example:
+ <br /><br />
+
+ <?php hljava('JLanguageTool langTool = new JLanguageTool(Language.ENGLISH);
+langTool.activateDefaultPatternRules();
+List<RuleMatch> matches = langTool.check("A sentence " +
+ "with a error in the Hitchhiker\'s Guide tot he Galaxy");
+for (RuleMatch match : matches) {
+ System.out.println("Potential error at line " +
+ match.getEndLine() + ", column " +
+ match.getColumn() + ": " + match.getMessage());
+ System.out.println("Suggested correction: " +
+ match.getSuggestedReplacements());
+}'); ?>
+ <br />
+ </li>
+
+ <li><strong>Using LanguageTool from other applications:</strong> Start the stand-alone
+ application and configure it to listen on a port that is not used yet (the default
+ port, 8081, should often be okay). This way LanguageTool will run in server mode
+ until you stop it. <br />
+ The client that wants to use LanguageTool can now just send its text to this URL:<br />
+ <tt>http://localhost:8081/?language=xx&amp;text=my+text</tt><br />
+ The <tt>language</tt> parameter must specify the two-character language code
+ (the language of the text to be checked). The <tt>text</tt> parameter is the
+ text itself (you may need to encode it for URLs). You can use both POST and
+ GET to send your requests to the LanguageTool server.<br />
+ For the input "this is a test" the LanguageTool server will reply with this
+ XML response:<br/><br/>
+
+<?php hl('<?xml version="1.0" encoding="UTF-8"?>
+<matches>
+<error fromy="0" fromx="0" toy="0" tox="5"
+ ruleId="UPPERCASE_SENTENCE_START"
+ msg="This sentence does not start with an uppercase letter"
+ replacements="This" context="this is a test."
+ contextoffset="0"
+ errorlength="4"/>
+</matches>'); ?>
+
+ <p>The server can also be started on the command line using this command:<br />
+ <tt>java -cp jaminid.jar:LanguageTool.jar de.danielnaber.languagetool.server.HTTPServer</tt>
+
+ </li>
+
+</ul>
+
+<?php
+include("../../include/footer.php");
+?>