diff options
author | Arno Teigseth <arno@teigseth.no> | 2011-02-05 08:48:27 +0000 |
---|---|---|
committer | Arno Teigseth <arno@teigseth.no> | 2011-02-05 08:48:27 +0000 |
commit | 4f3d565a5e5ede6eb6fd1f276d4e8ad37b67b5ce (patch) | |
tree | 7af736540eca93034428a975bd850e709fbbe2e5 /JLanguageTool/website | |
parent | ecaee85ab5984ebadd56721c295dc26b3335f7ce (diff) | |
download | grammar-norwegian-master.tar.gz grammar-norwegian-master.tar.bz2 grammar-norwegian-master.tar.xz |
Diffstat (limited to 'JLanguageTool/website')
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 <ol> 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 <span>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 ", $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 => ' ', + // 2 => ' ', + // 3 => ' ' etc etc + // to use instead of building a string every time + $strs = array(0 => ' ', 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 ", $result); + $result = str_replace(' ', ' ', $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 <a> 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) != '</') { + // 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) == '<' ) ? substr($word, 4) : $word; + $word = ( substr($word, -4) == '>' ) ? 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' && ('>' == $keyword || '<' == $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] . '">[|>', + '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">]|>', + '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">(|>', + '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">)|>', + '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">{|>', + '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">}|>', + ); + } + else { + $code_entities_replace = array( + '<| class="br0">[|>', + '<| class="br0">]|>', + '<| class="br0">(|>', + '<| class="br0">)|>', + '<| class="br0">{|>', + '<| class="br0">}|>', + ); + } + $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 = ' '; + } + // 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 = ' '; + } + 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> </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 ''' instead + * of PHP's ''' 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 ''' 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( + '&' => '&', + '"' => '"', + '<' => '<', + '>' => '>' + ); // 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["'"] = '''; // (apos) htmlspecialchars() uses ''' + } + + // 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&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 => '(<[/?|(\?xml)]?[a-z0-9_\-:]*(\??>)?)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => 'i', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 2 => array( + GESHI_SEARCH => '(([/|\?])?>)', + 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 & 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("/&/", "&", $string); + $string = preg_replace("/\"/", """, $string); + $string = preg_replace("/'/", "'", $string); + $string = preg_replace("/</", "<", $string); + $string = preg_replace("/>/", ">", $string); + return $string; +} + +/** Unescape stuff that gets printed to page to avoid cross site scripting. */ +function unescape($string) { + $string = preg_replace("/"/", "\"", $string); + $string = preg_replace("/'/", "'", $string); + $string = preg_replace("/</", "<", $string); + $string = preg_replace("/>/", ">", $string); + $string = preg_replace("/&/", "&", $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 'bed/bat(bad) English/...'"> + <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 + <match no="0"/>) 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}& +&[^\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}& +&[^\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 <match/> 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 <match> 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><match></tt> element inside the <tt><token></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><match></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>&</tt> character (for example, <tt>&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 Binary files differnew file mode 100644 index 0000000..87b4861 --- /dev/null +++ b/JLanguageTool/website/www/favicon.ico diff --git a/JLanguageTool/website/www/images/bg.jpg b/JLanguageTool/website/www/images/bg.jpg Binary files differnew file mode 100644 index 0000000..011c8bd --- /dev/null +++ b/JLanguageTool/website/www/images/bg.jpg diff --git a/JLanguageTool/website/www/images/link.png b/JLanguageTool/website/www/images/link.png Binary files differnew file mode 100644 index 0000000..82e4e48 --- /dev/null +++ b/JLanguageTool/website/www/images/link.png diff --git a/JLanguageTool/website/www/images/link_extern.png b/JLanguageTool/website/www/images/link_extern.png Binary files differnew file mode 100644 index 0000000..be041a1 --- /dev/null +++ b/JLanguageTool/website/www/images/link_extern.png diff --git a/JLanguageTool/website/www/images/pix.png b/JLanguageTool/website/www/images/pix.png Binary files differnew file mode 100644 index 0000000..21a0098 --- /dev/null +++ b/JLanguageTool/website/www/images/pix.png diff --git a/JLanguageTool/website/www/images/sign.png b/JLanguageTool/website/www/images/sign.png Binary files differnew file mode 100644 index 0000000..20c7e7f --- /dev/null +++ b/JLanguageTool/website/www/images/sign.png diff --git a/JLanguageTool/website/www/images/twitter_link16x16.png b/JLanguageTool/website/www/images/twitter_link16x16.png Binary files differnew file mode 100644 index 0000000..25e1cd4 --- /dev/null +++ b/JLanguageTool/website/www/images/twitter_link16x16.png 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 MB)", "download/LanguageTool-1.2.oxt", 0) ?></h2> + <!-- + <table> + <tr> + <td><h2><?=show_link("Download LanguageTool 1.0.0 (18 MB)", "download/LanguageTool-1.1.oxt", 0) ?></h2></td> + <td> </td> + <td><h2><?=show_link("Download LanguageTool 1.1beta (18 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)?> 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&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 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 -> Extension Manager -> Add...</em> + to install it. Close OpenOffice.org and re-start it. Type some text + with an error (e.g. "This is an test." – 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 -> Options -> 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 -> 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 & 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> </th> + <th align="right">Java rules</th> + <th> </th> + <th align="right"><a href="http://languagetool.cvs.sourceforge.net/*checkout*/languagetool/JLanguageTool/src/rules/false-friends.xml">False friends</a></th> + <th> </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 (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>at</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&func=&group_id=110216&atid=655717&assignee=&status=&category=&artgroup=&keyword=&submitter=&artifact_id=&assignee=&status=1&category=&artgroup=&submitter=&keyword=&artifact_id=&submit=Filter", 0)?></li> + <li><?=show_link("Feature requests", "http://sourceforge.net/tracker/?limit=25&func=&group_id=110216&atid=655720&assignee=&status=&category=&artgroup=&keyword=&submitter=&artifact_id=&assignee=&status=1&category=&artgroup=&submitter=&keyword=&artifact_id=&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ó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> & <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 Binary files differnew file mode 100644 index 0000000..3a92b5c --- /dev/null +++ b/JLanguageTool/website/www/screenshots/art/screenshot.png diff --git a/JLanguageTool/website/www/screenshots/art/screenshot_ooo.png b/JLanguageTool/website/www/screenshots/art/screenshot_ooo.png Binary files differnew file mode 100644 index 0000000..8ae032d --- /dev/null +++ b/JLanguageTool/website/www/screenshots/art/screenshot_ooo.png diff --git a/JLanguageTool/website/www/screenshots/art/screenshot_ooo3.png b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3.png Binary files differnew file mode 100644 index 0000000..45a80cf --- /dev/null +++ b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3.png diff --git a/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_pl.png b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_pl.png Binary files differnew file mode 100644 index 0000000..eeb447d --- /dev/null +++ b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_pl.png diff --git a/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_pl_small.png b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_pl_small.png Binary files differnew file mode 100644 index 0000000..afbdd4a --- /dev/null +++ b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_pl_small.png diff --git a/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_small.png b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_small.png Binary files differnew file mode 100644 index 0000000..61d0059 --- /dev/null +++ b/JLanguageTool/website/www/screenshots/art/screenshot_ooo3_small.png diff --git a/JLanguageTool/website/www/screenshots/art/screenshot_ooo_small.png b/JLanguageTool/website/www/screenshots/art/screenshot_ooo_small.png Binary files differnew file mode 100644 index 0000000..f5ac6ae --- /dev/null +++ b/JLanguageTool/website/www/screenshots/art/screenshot_ooo_small.png diff --git a/JLanguageTool/website/www/screenshots/art/screenshot_small.png b/JLanguageTool/website/www/screenshots/art/screenshot_small.png Binary files differnew file mode 100644 index 0000000..92bad62 --- /dev/null +++ b/JLanguageTool/website/www/screenshots/art/screenshot_small.png 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> </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> </td></tr> +<tr><td> </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> </td></tr> +<tr><td> </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> </td></tr> +<tr><td> </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 <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&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"); +?> |