From 7024f3e78a1d33bc312165c0d59de33fc1008324 Mon Sep 17 00:00:00 2001 From: Peter 'Pita' Martischka Date: Sun, 29 May 2011 21:30:56 +0100 Subject: [PATCH] Replace JSDoc-Toolkit with doc.md --- bin/generateJsDoc.sh | 23 +- doc/jsdoc-toolkit/README.txt | 183 -- doc/jsdoc-toolkit/app/frame.js | 33 - doc/jsdoc-toolkit/app/frame/Chain.js | 102 - doc/jsdoc-toolkit/app/frame/Dumper.js | 144 -- doc/jsdoc-toolkit/app/frame/Hash.js | 84 - doc/jsdoc-toolkit/app/frame/Link.js | 153 -- doc/jsdoc-toolkit/app/frame/Namespace.js | 10 - doc/jsdoc-toolkit/app/frame/Opt.js | 134 -- doc/jsdoc-toolkit/app/frame/Reflection.js | 26 - doc/jsdoc-toolkit/app/frame/String.js | 93 - doc/jsdoc-toolkit/app/frame/Testrun.js | 129 -- doc/jsdoc-toolkit/app/handlers/FOODOC.js | 26 - doc/jsdoc-toolkit/app/handlers/XMLDOC.js | 26 - .../app/handlers/XMLDOC/DomReader.js | 159 -- .../app/handlers/XMLDOC/XMLDoc.js | 16 - .../app/handlers/XMLDOC/XMLParse.js | 292 --- doc/jsdoc-toolkit/app/lib/JSDOC.js | 104 - doc/jsdoc-toolkit/app/lib/JSDOC/DocComment.js | 200 -- doc/jsdoc-toolkit/app/lib/JSDOC/DocTag.js | 294 --- doc/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js | 126 -- doc/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js | 109 - doc/jsdoc-toolkit/app/lib/JSDOC/Lang.js | 144 -- doc/jsdoc-toolkit/app/lib/JSDOC/Parser.js | 145 -- .../app/lib/JSDOC/PluginManager.js | 33 - doc/jsdoc-toolkit/app/lib/JSDOC/Symbol.js | 645 ------ doc/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js | 241 -- doc/jsdoc-toolkit/app/lib/JSDOC/TextStream.js | 41 - doc/jsdoc-toolkit/app/lib/JSDOC/Token.js | 18 - .../app/lib/JSDOC/TokenReader.js | 332 --- .../app/lib/JSDOC/TokenStream.js | 133 -- doc/jsdoc-toolkit/app/lib/JSDOC/Util.js | 32 - doc/jsdoc-toolkit/app/lib/JSDOC/Walker.js | 474 ---- doc/jsdoc-toolkit/app/main.js | 111 - .../app/plugins/commentSrcJson.js | 20 - .../app/plugins/frameworkPrototype.js | 16 - doc/jsdoc-toolkit/app/plugins/functionCall.js | 10 - .../app/plugins/publishSrcHilite.js | 62 - doc/jsdoc-toolkit/app/plugins/symbolLink.js | 10 - .../app/plugins/tagParamConfig.js | 31 - doc/jsdoc-toolkit/app/plugins/tagSynonyms.js | 43 - doc/jsdoc-toolkit/app/run.js | 348 --- doc/jsdoc-toolkit/app/t/TestDoc.js | 144 -- doc/jsdoc-toolkit/app/t/runner.js | 13 - doc/jsdoc-toolkit/app/test.js | 325 --- doc/jsdoc-toolkit/app/test/addon.js | 24 - doc/jsdoc-toolkit/app/test/anon_inner.js | 14 - doc/jsdoc-toolkit/app/test/augments.js | 31 - doc/jsdoc-toolkit/app/test/augments2.js | 26 - doc/jsdoc-toolkit/app/test/borrows.js | 46 - doc/jsdoc-toolkit/app/test/borrows2.js | 23 - doc/jsdoc-toolkit/app/test/config.js | 22 - doc/jsdoc-toolkit/app/test/constructs.js | 18 - doc/jsdoc-toolkit/app/test/encoding.js | 10 - doc/jsdoc-toolkit/app/test/encoding_other.js | 12 - doc/jsdoc-toolkit/app/test/event.js | 54 - doc/jsdoc-toolkit/app/test/exports.js | 14 - doc/jsdoc-toolkit/app/test/functions_anon.js | 39 - .../app/test/functions_nested.js | 33 - doc/jsdoc-toolkit/app/test/global.js | 13 - doc/jsdoc-toolkit/app/test/globals.js | 25 - doc/jsdoc-toolkit/app/test/ignore.js | 10 - doc/jsdoc-toolkit/app/test/inner.js | 16 - doc/jsdoc-toolkit/app/test/jsdoc_test.js | 477 ---- doc/jsdoc-toolkit/app/test/lend.js | 33 - doc/jsdoc-toolkit/app/test/memberof.js | 19 - .../app/test/memberof_constructor.js | 17 - doc/jsdoc-toolkit/app/test/module.js | 17 - doc/jsdoc-toolkit/app/test/name.js | 19 - .../app/test/namespace_nested.js | 23 - doc/jsdoc-toolkit/app/test/nocode.js | 13 - doc/jsdoc-toolkit/app/test/oblit_anon.js | 20 - doc/jsdoc-toolkit/app/test/overview.js | 20 - doc/jsdoc-toolkit/app/test/param_inline.js | 37 - doc/jsdoc-toolkit/app/test/params_optional.js | 8 - doc/jsdoc-toolkit/app/test/prototype.js | 17 - .../app/test/prototype_nested.js | 9 - doc/jsdoc-toolkit/app/test/prototype_oblit.js | 13 - .../app/test/prototype_oblit_constructor.js | 24 - doc/jsdoc-toolkit/app/test/public.js | 10 - doc/jsdoc-toolkit/app/test/scripts/code.js | 5 - .../app/test/scripts/notcode.txt | 5 - doc/jsdoc-toolkit/app/test/shared.js | 42 - doc/jsdoc-toolkit/app/test/shared2.js | 2 - doc/jsdoc-toolkit/app/test/shortcuts.js | 22 - doc/jsdoc-toolkit/app/test/static_this.js | 13 - doc/jsdoc-toolkit/app/test/synonyms.js | 31 - doc/jsdoc-toolkit/app/test/tosource.js | 23 - .../app/test/variable_redefine.js | 14 - doc/jsdoc-toolkit/changes.txt | 107 - doc/jsdoc-toolkit/conf/sample.conf | 31 - doc/jsdoc-toolkit/java/build.xml | 36 - doc/jsdoc-toolkit/java/build_1.4.xml | 36 - doc/jsdoc-toolkit/java/classes/js.jar | Bin 819369 -> 0 bytes doc/jsdoc-toolkit/java/src/JsDebugRun.java | 21 - doc/jsdoc-toolkit/java/src/JsRun.java | 21 - doc/jsdoc-toolkit/jsdebug.jar | Bin 1307 -> 0 bytes doc/jsdoc-toolkit/jsrun.jar | Bin 1303 -> 0 bytes doc/jsdoc-toolkit/jsrun.sh | 52 - .../templates/jsdoc/allclasses.tmpl | 17 - .../templates/jsdoc/allfiles.tmpl | 56 - doc/jsdoc-toolkit/templates/jsdoc/class.tmpl | 649 ------ doc/jsdoc-toolkit/templates/jsdoc/index.tmpl | 39 - doc/jsdoc-toolkit/templates/jsdoc/publish.js | 200 -- .../templates/jsdoc/static/default.css | 162 -- .../templates/jsdoc/static/header.html | 2 - .../templates/jsdoc/static/index.html | 19 - doc/jsdoc-toolkit/templates/jsdoc/symbol.tmpl | 35 - doc/jsdoc/AttributePoolFactory.md | 32 + doc/jsdoc/AuthorManager.md | 59 + doc/jsdoc/Changeset.md | 328 +++ doc/jsdoc/MessageHandler.md | 48 + doc/jsdoc/Models/Pad.md | 15 + doc/jsdoc/PadManager.md | 33 + doc/jsdoc/README | 1 - doc/jsdoc/db.md | 25 + doc/jsdoc/easysync_tests.md | 18 + doc/jsdoc/files.html | 288 --- doc/jsdoc/index.html | 210 -- doc/jsdoc/minify.md | 33 + doc/jsdoc/server.md | 21 + doc/jsdoc/settings.md | 36 + doc/jsdoc/symbols/_global_.html | 1667 -------------- .../src/node_AttributePoolFactory.js.html | 90 - .../symbols/src/node_AuthorManager.js.html | 139 -- doc/jsdoc/symbols/src/node_Changeset.js.html | 1965 ----------------- .../symbols/src/node_MessageHandler.js.html | 508 ----- doc/jsdoc/symbols/src/node_PadManager.js.html | 272 --- .../symbols/src/node_easysync_tests.js.html | 950 -------- doc/jsdoc/symbols/src/node_server.js.html | 150 -- 130 files changed, 658 insertions(+), 14913 deletions(-) delete mode 100644 doc/jsdoc-toolkit/README.txt delete mode 100644 doc/jsdoc-toolkit/app/frame.js delete mode 100644 doc/jsdoc-toolkit/app/frame/Chain.js delete mode 100644 doc/jsdoc-toolkit/app/frame/Dumper.js delete mode 100644 doc/jsdoc-toolkit/app/frame/Hash.js delete mode 100644 doc/jsdoc-toolkit/app/frame/Link.js delete mode 100644 doc/jsdoc-toolkit/app/frame/Namespace.js delete mode 100644 doc/jsdoc-toolkit/app/frame/Opt.js delete mode 100644 doc/jsdoc-toolkit/app/frame/Reflection.js delete mode 100644 doc/jsdoc-toolkit/app/frame/String.js delete mode 100644 doc/jsdoc-toolkit/app/frame/Testrun.js delete mode 100644 doc/jsdoc-toolkit/app/handlers/FOODOC.js delete mode 100755 doc/jsdoc-toolkit/app/handlers/XMLDOC.js delete mode 100755 doc/jsdoc-toolkit/app/handlers/XMLDOC/DomReader.js delete mode 100755 doc/jsdoc-toolkit/app/handlers/XMLDOC/XMLDoc.js delete mode 100755 doc/jsdoc-toolkit/app/handlers/XMLDOC/XMLParse.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/DocComment.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/DocTag.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/Lang.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/Parser.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/Symbol.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/TextStream.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/Token.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/Util.js delete mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/Walker.js delete mode 100644 doc/jsdoc-toolkit/app/main.js delete mode 100644 doc/jsdoc-toolkit/app/plugins/commentSrcJson.js delete mode 100644 doc/jsdoc-toolkit/app/plugins/frameworkPrototype.js delete mode 100644 doc/jsdoc-toolkit/app/plugins/functionCall.js delete mode 100644 doc/jsdoc-toolkit/app/plugins/publishSrcHilite.js delete mode 100644 doc/jsdoc-toolkit/app/plugins/symbolLink.js delete mode 100644 doc/jsdoc-toolkit/app/plugins/tagParamConfig.js delete mode 100644 doc/jsdoc-toolkit/app/plugins/tagSynonyms.js delete mode 100644 doc/jsdoc-toolkit/app/run.js delete mode 100644 doc/jsdoc-toolkit/app/t/TestDoc.js delete mode 100644 doc/jsdoc-toolkit/app/t/runner.js delete mode 100644 doc/jsdoc-toolkit/app/test.js delete mode 100644 doc/jsdoc-toolkit/app/test/addon.js delete mode 100644 doc/jsdoc-toolkit/app/test/anon_inner.js delete mode 100644 doc/jsdoc-toolkit/app/test/augments.js delete mode 100644 doc/jsdoc-toolkit/app/test/augments2.js delete mode 100644 doc/jsdoc-toolkit/app/test/borrows.js delete mode 100644 doc/jsdoc-toolkit/app/test/borrows2.js delete mode 100644 doc/jsdoc-toolkit/app/test/config.js delete mode 100644 doc/jsdoc-toolkit/app/test/constructs.js delete mode 100644 doc/jsdoc-toolkit/app/test/encoding.js delete mode 100644 doc/jsdoc-toolkit/app/test/encoding_other.js delete mode 100644 doc/jsdoc-toolkit/app/test/event.js delete mode 100644 doc/jsdoc-toolkit/app/test/exports.js delete mode 100644 doc/jsdoc-toolkit/app/test/functions_anon.js delete mode 100644 doc/jsdoc-toolkit/app/test/functions_nested.js delete mode 100644 doc/jsdoc-toolkit/app/test/global.js delete mode 100644 doc/jsdoc-toolkit/app/test/globals.js delete mode 100644 doc/jsdoc-toolkit/app/test/ignore.js delete mode 100644 doc/jsdoc-toolkit/app/test/inner.js delete mode 100644 doc/jsdoc-toolkit/app/test/jsdoc_test.js delete mode 100644 doc/jsdoc-toolkit/app/test/lend.js delete mode 100644 doc/jsdoc-toolkit/app/test/memberof.js delete mode 100644 doc/jsdoc-toolkit/app/test/memberof_constructor.js delete mode 100644 doc/jsdoc-toolkit/app/test/module.js delete mode 100644 doc/jsdoc-toolkit/app/test/name.js delete mode 100644 doc/jsdoc-toolkit/app/test/namespace_nested.js delete mode 100644 doc/jsdoc-toolkit/app/test/nocode.js delete mode 100644 doc/jsdoc-toolkit/app/test/oblit_anon.js delete mode 100644 doc/jsdoc-toolkit/app/test/overview.js delete mode 100644 doc/jsdoc-toolkit/app/test/param_inline.js delete mode 100644 doc/jsdoc-toolkit/app/test/params_optional.js delete mode 100644 doc/jsdoc-toolkit/app/test/prototype.js delete mode 100644 doc/jsdoc-toolkit/app/test/prototype_nested.js delete mode 100644 doc/jsdoc-toolkit/app/test/prototype_oblit.js delete mode 100644 doc/jsdoc-toolkit/app/test/prototype_oblit_constructor.js delete mode 100644 doc/jsdoc-toolkit/app/test/public.js delete mode 100644 doc/jsdoc-toolkit/app/test/scripts/code.js delete mode 100644 doc/jsdoc-toolkit/app/test/scripts/notcode.txt delete mode 100644 doc/jsdoc-toolkit/app/test/shared.js delete mode 100644 doc/jsdoc-toolkit/app/test/shared2.js delete mode 100644 doc/jsdoc-toolkit/app/test/shortcuts.js delete mode 100644 doc/jsdoc-toolkit/app/test/static_this.js delete mode 100644 doc/jsdoc-toolkit/app/test/synonyms.js delete mode 100644 doc/jsdoc-toolkit/app/test/tosource.js delete mode 100644 doc/jsdoc-toolkit/app/test/variable_redefine.js delete mode 100644 doc/jsdoc-toolkit/changes.txt delete mode 100644 doc/jsdoc-toolkit/conf/sample.conf delete mode 100644 doc/jsdoc-toolkit/java/build.xml delete mode 100644 doc/jsdoc-toolkit/java/build_1.4.xml delete mode 100644 doc/jsdoc-toolkit/java/classes/js.jar delete mode 100755 doc/jsdoc-toolkit/java/src/JsDebugRun.java delete mode 100644 doc/jsdoc-toolkit/java/src/JsRun.java delete mode 100644 doc/jsdoc-toolkit/jsdebug.jar delete mode 100644 doc/jsdoc-toolkit/jsrun.jar delete mode 100644 doc/jsdoc-toolkit/jsrun.sh delete mode 100644 doc/jsdoc-toolkit/templates/jsdoc/allclasses.tmpl delete mode 100644 doc/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl delete mode 100644 doc/jsdoc-toolkit/templates/jsdoc/class.tmpl delete mode 100644 doc/jsdoc-toolkit/templates/jsdoc/index.tmpl delete mode 100644 doc/jsdoc-toolkit/templates/jsdoc/publish.js delete mode 100644 doc/jsdoc-toolkit/templates/jsdoc/static/default.css delete mode 100644 doc/jsdoc-toolkit/templates/jsdoc/static/header.html delete mode 100644 doc/jsdoc-toolkit/templates/jsdoc/static/index.html delete mode 100644 doc/jsdoc-toolkit/templates/jsdoc/symbol.tmpl create mode 100644 doc/jsdoc/AttributePoolFactory.md create mode 100644 doc/jsdoc/AuthorManager.md create mode 100644 doc/jsdoc/Changeset.md create mode 100644 doc/jsdoc/MessageHandler.md create mode 100644 doc/jsdoc/Models/Pad.md create mode 100644 doc/jsdoc/PadManager.md delete mode 100644 doc/jsdoc/README create mode 100644 doc/jsdoc/db.md create mode 100644 doc/jsdoc/easysync_tests.md delete mode 100644 doc/jsdoc/files.html delete mode 100644 doc/jsdoc/index.html create mode 100644 doc/jsdoc/minify.md create mode 100644 doc/jsdoc/server.md create mode 100644 doc/jsdoc/settings.md delete mode 100644 doc/jsdoc/symbols/_global_.html delete mode 100644 doc/jsdoc/symbols/src/node_AttributePoolFactory.js.html delete mode 100644 doc/jsdoc/symbols/src/node_AuthorManager.js.html delete mode 100644 doc/jsdoc/symbols/src/node_Changeset.js.html delete mode 100644 doc/jsdoc/symbols/src/node_MessageHandler.js.html delete mode 100644 doc/jsdoc/symbols/src/node_PadManager.js.html delete mode 100644 doc/jsdoc/symbols/src/node_easysync_tests.js.html delete mode 100644 doc/jsdoc/symbols/src/node_server.js.html diff --git a/bin/generateJsDoc.sh b/bin/generateJsDoc.sh index aa62a0d5b..397a54d68 100755 --- a/bin/generateJsDoc.sh +++ b/bin/generateJsDoc.sh @@ -1,20 +1,17 @@ -#!/bin/sh -if [ ! -x /usr/bin/java ]; then - echo "You need to install Java to generate the JSDocs!" - exit 1 -fi +#!/bin/bash if [ -d "../bin" ]; then cd "../" fi -cd "doc/jsdoc-toolkit" +type -P node &>/dev/null || { + echo "You need to install node!" >&2 + exit 1 +} -JSRUN="jsrun.jar" -RUNJS="app/run.js" -OUTPUT_DIR="../jsdoc" -NODE_DIR="../../node" -TEMPLATE_DIR="templates/jsdoc" +type -P doc.md &>/dev/null || { + echo "You need to install doc.md! npm install -g doc.md" >&2 + exit 1 +} -java -jar $JSRUN $RUNJS -v -d=$OUTPUT_DIR -t=$TEMPLATE_DIR $NODE_DIR && -echo "Look on http://code.google.com/p/jsdoc-toolkit/wiki/InlineDocs to get Tipps for better documentation" +doc.md node doc/jsdoc diff --git a/doc/jsdoc-toolkit/README.txt b/doc/jsdoc-toolkit/README.txt deleted file mode 100644 index 3782da88d..000000000 --- a/doc/jsdoc-toolkit/README.txt +++ /dev/null @@ -1,183 +0,0 @@ -====================================================================== - -DESCRIPTION: - -This is the source code for JsDoc Toolkit, an automatic documentation -generation tool for JavaScript. It is written in JavaScript and is run -from a command line (or terminal) using Java and Mozilla's Rhino -JavaScript runtime engine. - -Using this tool you can automatically turn JavaDoc-like comments in -your JavaScript source code into published output files, such as HTML -or XML. - -For more information, to report a bug, or to browse the technical -documentation for this tool please visit the official JsDoc Toolkit -project homepage at http://code.google.com/p/jsdoc-toolkit/ - -For the most up-to-date documentation on JsDoc Toolkit see the -official wiki at http://code.google.com/p/jsdoc-toolkit/w/list - -====================================================================== - -REQUIREMENTS: - -JsDoc Toolkit is known to work with: -java version "1.6.0_03" -Java(TM) SE Runtime Environment (build 1.6.0_03-b05) -on Windows XP, -and java version "1.5.0_19" -Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_19-b02-304) -on Mac OS X 10.5. - -Other versions of java may or may not work with JsDoc Toolkit. - -====================================================================== - -USAGE: - -Running JsDoc Toolkit requires you to have Java installed on your -computer. For more information see http://www.java.com/getjava/ - -Before running the JsDoc Toolkit app you should change your current -working directory to the jsdoc-toolkit folder. Then follow the -examples below, or as shown on the project wiki. - -On a computer running Windows a valid command line to run JsDoc -Toolkit might look like this: - -> java -jar jsrun.jar app\run.js -a -t=templates\jsdoc mycode.js - -On Mac OS X or Linux the same command would look like this: - -$ java -jar jsrun.jar app/run.js -a -t=templates/jsdoc mycode.js - -The above assumes your current working directory contains jsrun.jar, -the "app" and "templates" subdirectories from the standard JsDoc -Toolkit distribution and that the relative path to the code you wish -to document is "mycode.js". - -The output documentation files will be saved to a new directory named -"out" (by default) in the current directory, or if you specify a --d=somewhere_else option, to the somewhere_else directory. - -For help (usage notes) enter this on the command line: - -$ java -jar jsrun.jar app/run.js --help - -More information about the various command line options used by JsDoc -Toolkit are available on the project wiki. - -====================================================================== - -RUNNING VIA SHELL SCRIPT - -Avi Deitcher has contributed the file jsrun.sh with the following usage notes: - -A script to simplify running jsdoc from the command-line, especially when -running from within a development or build environment such as ant. - -Normally, to run jsdoc, you need a command-line as the following: -java -Djsdoc.dir=/some/long/dir/path/to/jsdoc -jar -/some/long/dir/path/to/jsdoc/jsrun.jar /some/long/dir/path/to/jsdoc/app/run.js --t=template -r=4 /some/long/dir/path/to/my/src/code - -This can get tedious to redo time and again, and difficult to use from within a build environment. - -To simplify the process, jsrun.sh will automatically run this path, as well as passing through any arguments. - -Usage: jsrun.sh - -All will be passed through. -Additionally, jsrun.sh will take the following actions: -1) If the environment variable JSDOCDIR is set, it will add -"-Djsdoc.dir=$JSDOCDIR" to the command-line -2) If the environment variable JSDOCTEMPLATEDIR is set, it will add -"-Djsdoc.template.dir=$JSDOCTEMPLATEDIR" to the command-line -3) java with the appropriate path to jsrun.jar and run.js will be instantiated - -If not variables are set, it is assumed that the path to jsrun.jar and app/ is in the current working directory. - -Example: -# jsrun.sh ./src/ -Assuming JSDOCDIR=/some/path/to/my/jsdoc will cause the following command to -execute: -java -Djsdoc.dir=/some/path/to/my/jsdoc -jar /some/path/to/my/jsdoc/jsrun.jar -/some/path/to/my/jsdoc/app/run.js ./src/ - -====================================================================== - -TESTING: - -To run the suite of unit tests included with JsDoc Toolkit enter this -on the command line: - -$ java -jar jsrun.jar app/run.js -T - -To see a dump of the internal data structure that JsDoc Toolkit has -built from your source files use this command: - -$ java -jar jsrun.jar app/run.js mycode.js -Z - -====================================================================== - -LICENSE: - -JSDoc.pm - -This project is based on the JSDoc.pm tool, created by Michael -Mathews and Gabriel Reid. More information on JsDoc.pm can -be found on the JSDoc.pm homepage: http://jsdoc.sourceforge.net/ - -Complete documentation on JsDoc Toolkit can be found on the project -wiki at http://code.google.com/p/jsdoc-toolkit/w/list - -Rhino - -Rhino (JavaScript in Java) is open source and licensed by Mozilla -under the MPL 1.1 or later/GPL 2.0 or later licenses, the text of -which is available at http://www.mozilla.org/MPL/ - -You can obtain the source code for Rhino from the Mozilla web site at -http://www.mozilla.org/rhino/download.html - -JsDoc Toolkit is a larger work that uses the Rhino JavaScript engine -but is not derived from it in any way. The Rhino library is used -without modification and without any claims whatsoever. - -The Rhino Debugger - -You can obtain more information about the Rhino Debugger from the -Mozilla web site at http://www.mozilla.org/rhino/debugger.html - -JsDoc Toolkit is a larger work that uses the Rhino Debugger but -is not derived from it in any way. The Rhino Debugger is used -without modification and without any claims whatsoever. - -JsDoc Toolkit - -All code specific to JsDoc Toolkit are free, open source and licensed -for use under the X11/MIT License. - -JsDoc Toolkit is Copyright (c)2009 Michael Mathews - -This program is free software; you can redistribute it and/or -modify it under the terms below. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: The above copyright notice and this -permission notice must be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/doc/jsdoc-toolkit/app/frame.js b/doc/jsdoc-toolkit/app/frame.js deleted file mode 100644 index 1beb40559..000000000 --- a/doc/jsdoc-toolkit/app/frame.js +++ /dev/null @@ -1,33 +0,0 @@ -IO.include("frame/Opt.js"); -IO.include("frame/Chain.js"); -IO.include("frame/Link.js"); -IO.include("frame/String.js"); -IO.include("frame/Hash.js"); -IO.include("frame/Namespace.js"); -//IO.include("frame/Reflection.js"); - -/** A few helper functions to make life a little easier. */ - -function defined(o) { - return (o !== undefined); -} - -function copy(o) { // todo check for circular refs - if (o == null || typeof(o) != 'object') return o; - var c = new o.constructor(); - for(var p in o) c[p] = copy(o[p]); - return c; -} - -function isUnique(arr) { - var l = arr.length; - for(var i = 0; i < l; i++ ) { - if (arr.lastIndexOf(arr[i]) > i) return false; - } - return true; -} - -/** Returns the given string with all regex meta characters backslashed. */ -RegExp.escapeMeta = function(str) { - return str.replace(/([$^\\\/()|?+*\[\]{}.-])/g, "\\$1"); -} diff --git a/doc/jsdoc-toolkit/app/frame/Chain.js b/doc/jsdoc-toolkit/app/frame/Chain.js deleted file mode 100644 index 506469d18..000000000 --- a/doc/jsdoc-toolkit/app/frame/Chain.js +++ /dev/null @@ -1,102 +0,0 @@ -/**@constructor*/ -function ChainNode(object, link) { - this.value = object; - this.link = link; // describes this node's relationship to the previous node -} - -/**@constructor*/ -function Chain(valueLinks) { - this.nodes = []; - this.cursor = -1; - - if (valueLinks && valueLinks.length > 0) { - this.push(valueLinks[0], "//"); - for (var i = 1, l = valueLinks.length; i < l; i+=2) { - this.push(valueLinks[i+1], valueLinks[i]); - } - } -} - -Chain.prototype.push = function(o, link) { - if (this.nodes.length > 0 && link) this.nodes.push(new ChainNode(o, link)); - else this.nodes.push(new ChainNode(o)); -} - -Chain.prototype.unshift = function(o, link) { - if (this.nodes.length > 0 && link) this.nodes[0].link = link; - this.nodes.unshift(new ChainNode(o)); - this.cursor++; -} - -Chain.prototype.get = function() { - if (this.cursor < 0 || this.cursor > this.nodes.length-1) return null; - return this.nodes[this.cursor]; -} - -Chain.prototype.first = function() { - this.cursor = 0; - return this.get(); -} - -Chain.prototype.last = function() { - this.cursor = this.nodes.length-1; - return this.get(); -} - -Chain.prototype.next = function() { - this.cursor++; - return this.get(); -} - -Chain.prototype.prev = function() { - this.cursor--; - return this.get(); -} - -Chain.prototype.toString = function() { - var string = ""; - for (var i = 0, l = this.nodes.length; i < l; i++) { - if (this.nodes[i].link) string += " -("+this.nodes[i].link+")-> "; - string += this.nodes[i].value.toString(); - } - return string; -} - -Chain.prototype.joinLeft = function() { - var result = ""; - for (var i = 0, l = this.cursor; i < l; i++) { - if (result && this.nodes[i].link) result += this.nodes[i].link; - result += this.nodes[i].value.toString(); - } - return result; -} - - -/* USAGE: - -var path = "one/two/three.four/five-six"; -var pathChain = new Chain(path.split(/([\/.-])/)); -print(pathChain); - -var lineage = new Chain(); -lineage.push("Port"); -lineage.push("Les", "son"); -lineage.push("Dawn", "daughter"); -lineage.unshift("Purdie", "son"); - -print(lineage); - -// walk left -for (var node = lineage.last(); node !== null; node = lineage.prev()) { - print("< "+node.value); -} - -// walk right -var node = lineage.first() -while (node !== null) { - print(node.value); - node = lineage.next(); - if (node && node.link) print("had a "+node.link+" named"); -} - -*/ \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/frame/Dumper.js b/doc/jsdoc-toolkit/app/frame/Dumper.js deleted file mode 100644 index d8b007b1d..000000000 --- a/doc/jsdoc-toolkit/app/frame/Dumper.js +++ /dev/null @@ -1,144 +0,0 @@ -/** - * @class -
-This is a lightly modified version of Kevin Jones' JavaScript
-library Data.Dump. To download the original visit:
-    http://openjsan.org/doc/k/ke/kevinj/Data/Dump/
-
-AUTHORS
-
-The Data.Dump JavaScript module is written by Kevin Jones 
-(kevinj@cpan.org), based on Data::Dump by Gisle Aas (gisle@aas.no),
-based on Data::Dumper by Gurusamy Sarathy (gsar@umich.edu).
-
-COPYRIGHT
-
-Copyright 2007 Kevin Jones. Copyright 1998-2000,2003-2004 Gisle Aas.
-Copyright 1996-1998 Gurusamy Sarathy.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the Perl Artistic License
-
-See http://www.perl.com/perl/misc/Artistic.html
-
- * @static - */ -Dumper = { - /** @param [...] The objects to dump. */ - dump: function () { - if (arguments.length > 1) - return this._dump(arguments); - else if (arguments.length == 1) - return this._dump(arguments[0]); - else - return "()"; - }, - - _dump: function (obj) { - if (typeof obj == 'undefined') return 'undefined'; - var out; - if (obj.serialize) { return obj.serialize(); } - var type = this._typeof(obj); - if (obj.circularReference) obj.circularReference++; - switch (type) { - case 'circular': - out = "{ //circularReference\n}"; - break; - case 'object': - var pairs = new Array; - - for (var prop in obj) { - if (prop != "circularReference" && obj.hasOwnProperty(prop)) { //hide inherited properties - pairs.push(prop + ': ' + this._dump(obj[prop])); - } - } - - out = '{' + this._format_list(pairs) + '}'; - break; - - case 'string': - for (var prop in Dumper.ESC) { - if (Dumper.ESC.hasOwnProperty(prop)) { - obj = obj.replace(prop, Dumper.ESC[prop]); - } - } - - // Escape UTF-8 Strings - if (obj.match(/^[\x00-\x7f]*$/)) { - out = '"' + obj.replace(/\"/g, "\\\"").replace(/([\n\r]+)/g, "\\$1") + '"'; - } - else { - out = "unescape('"+escape(obj)+"')"; - } - break; - - case 'array': - var elems = new Array; - - for (var i=0; i 60 ? '\n' : ' '; - return nl + list.join(',' + nl) + nl; - }, - - _typeof: function (obj) { - if (obj && obj.circularReference && obj.circularReference > 1) return 'circular'; - if (Array.prototype.isPrototypeOf(obj)) return 'array'; - if (Date.prototype.isPrototypeOf(obj)) return 'date'; - if (typeof obj.nodeType != 'undefined') return 'element'; - return typeof(obj); - }, - - _dump_dom: function (obj) { - return '"' + Dumper.nodeTypes[obj.nodeType] + '"'; - } -}; - -Dumper.ESC = { - "\t": "\\t", - "\n": "\\n", - "\f": "\\f" -}; - -Dumper.nodeTypes = { - 1: "ELEMENT_NODE", - 2: "ATTRIBUTE_NODE", - 3: "TEXT_NODE", - 4: "CDATA_SECTION_NODE", - 5: "ENTITY_REFERENCE_NODE", - 6: "ENTITY_NODE", - 7: "PROCESSING_INSTRUCTION_NODE", - 8: "COMMENT_NODE", - 9: "DOCUMENT_NODE", - 10: "DOCUMENT_TYPE_NODE", - 11: "DOCUMENT_FRAGMENT_NODE", - 12: "NOTATION_NODE" -}; \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/frame/Hash.js b/doc/jsdoc-toolkit/app/frame/Hash.js deleted file mode 100644 index 62cfad646..000000000 --- a/doc/jsdoc-toolkit/app/frame/Hash.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - @constructor - @example - var _index = new Hash(); - _index.set("a", "apple"); - _index.set("b", "blue"); - _index.set("c", "coffee"); - - for (var p = _index.first(); p; p = _index.next()) { - print(p.key+" is for "+p.value); - } - - */ -var Hash = function() { - this._map = {}; - this._keys = []; - this._vals = []; - this.reset(); -} - -Hash.prototype.set = function(k, v) { - if (k != "") { - this._keys.push(k); - this._map["="+k] = this._vals.length; - this._vals.push(v); - } -} - -Hash.prototype.replace = function(k, k2, v) { - if (k == k2) return; - - var offset = this._map["="+k]; - this._keys[offset] = k2; - if (typeof v != "undefined") this._vals[offset] = v; - this._map["="+k2] = offset; - delete(this._map["="+k]); -} - -Hash.prototype.drop = function(k) { - if (k != "") { - var offset = this._map["="+k]; - this._keys.splice(offset, 1); - this._vals.splice(offset, 1); - delete(this._map["="+k]); - for (var p in this._map) { - if (this._map[p] >= offset) this._map[p]--; - } - if (this._cursor >= offset && this._cursor > 0) this._cursor--; - } -} - -Hash.prototype.get = function(k) { - if (k != "") { - return this._vals[this._map["="+k]]; - } -} - -Hash.prototype.keys = function() { - return this._keys; -} - -Hash.prototype.hasKey = function(k) { - if (k != "") { - return (typeof this._map["="+k] != "undefined"); - } -} - -Hash.prototype.values = function() { - return this._vals; -} - -Hash.prototype.reset = function() { - this._cursor = 0; -} - -Hash.prototype.first = function() { - this.reset(); - return this.next(); -} - -Hash.prototype.next = function() { - if (this._cursor++ < this._keys.length) - return {key: this._keys[this._cursor-1], value: this._vals[this._cursor-1]}; -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/frame/Link.js b/doc/jsdoc-toolkit/app/frame/Link.js deleted file mode 100644 index ef5dc0a4d..000000000 --- a/doc/jsdoc-toolkit/app/frame/Link.js +++ /dev/null @@ -1,153 +0,0 @@ -/** Handle the creation of HTML links to documented symbols. - @constructor -*/ -function Link() { - this.alias = ""; - this.src = ""; - this.file = ""; - this.text = ""; - this.innerName = ""; - this.classLink = false; - this.targetName = ""; - - this.target = function(targetName) { - if (defined(targetName)) this.targetName = targetName; - return this; - } - this.inner = function(inner) { - if (defined(inner)) this.innerName = inner; - return this; - } - this.withText = function(text) { - if (defined(text)) this.text = text; - return this; - } - this.toSrc = function(filename) { - if (defined(filename)) this.src = filename; - return this; - } - this.toSymbol = function(alias) { - if (defined(alias)) this.alias = new String(alias); - return this; - } - this.toClass = function(alias) { - this.classLink = true; - return this.toSymbol(alias); - } - this.toFile = function(file) { - if (defined(file)) this.file = file; - return this; - } - - this.toString = function() { - var linkString; - var thisLink = this; - - if (this.alias) { - linkString = this.alias.replace(/(^|[^a-z$0-9_#.:^-])([|a-z$0-9_#.:^-]+)($|[^a-z$0-9_#.:^-])/i, - function(match, prematch, symbolName, postmatch) { - var symbolNames = symbolName.split("|"); - var links = []; - for (var i = 0, l = symbolNames.length; i < l; i++) { - thisLink.alias = symbolNames[i]; - links.push(thisLink._makeSymbolLink(symbolNames[i])); - } - return prematch+links.join("|")+postmatch; - } - ); - } - else if (this.src) { - linkString = thisLink._makeSrcLink(this.src); - } - else if (this.file) { - linkString = thisLink._makeFileLink(this.file); - } - - return linkString; - } -} - -/** prefixed for hashes */ -Link.hashPrefix = ""; - -/** Appended to the front of relative link paths. */ -Link.base = ""; - -Link.symbolNameToLinkName = function(symbol) { - var linker = ""; - if (symbol.isStatic) linker = "."; - else if (symbol.isInner) linker = "-"; - - return Link.hashPrefix+linker+symbol.name; -} - -/** Create a link to another symbol. */ -Link.prototype._makeSymbolLink = function(alias) { - var linkBase = Link.base+publish.conf.symbolsDir; - var linkTo = Link.symbolSet.getSymbol(alias); - var linkPath; - var target = (this.targetName)? " target=\""+this.targetName+"\"" : ""; - - // is it an internal link? - if (alias.charAt(0) == "#") var linkPath = alias; - - // if there is no symbol by that name just return the name unaltered - else if (!linkTo) return this.text || alias; - - // it's a symbol in another file - else { - if (!linkTo.is("CONSTRUCTOR") && !linkTo.isNamespace) { // it's a method or property - if (linkTo.isEvent) { - linkPath = - (Link.filemap)? Link.filemap[linkTo.memberOf] - : - escape(linkTo.memberOf) || "_global_"; - linkPath += publish.conf.ext + "#event:" + Link.symbolNameToLinkName(linkTo); - } - else { - linkPath = - (Link.filemap)? Link.filemap[linkTo.memberOf] - : - escape(linkTo.memberOf) || "_global_"; - linkPath += publish.conf.ext + "#" + Link.symbolNameToLinkName(linkTo); - } - } - else { - linkPath = (Link.filemap)? Link.filemap[linkTo.alias] : escape(linkTo.alias); - linkPath += publish.conf.ext;// + (this.classLink? "":"#" + Link.hashPrefix + "constructor"); - } - linkPath = linkBase + linkPath - } - - var linkText = this.text || alias; - - var link = {linkPath: linkPath, linkText: linkText, linkInner: (this.innerName? "#"+this.innerName : "")}; - - if (typeof JSDOC.PluginManager != "undefined") { - JSDOC.PluginManager.run("onSymbolLink", link); - } - - return ""+link.linkText+""; -} - -/** Create a link to a source file. */ -Link.prototype._makeSrcLink = function(srcFilePath) { - var target = (this.targetName)? " target=\""+this.targetName+"\"" : ""; - - // transform filepath into a filename - var srcFile = srcFilePath.replace(/\.\.?[\\\/]/g, "").replace(/[:\\\/]/g, "_"); - var outFilePath = Link.base + publish.conf.srcDir + srcFile + publish.conf.ext; - - if (!this.text) this.text = FilePath.fileName(srcFilePath); - return ""+this.text+""; -} - -/** Create a link to a source file. */ -Link.prototype._makeFileLink = function(filePath) { - var target = (this.targetName)? " target=\""+this.targetName+"\"" : ""; - - var outFilePath = Link.base + filePath; - - if (!this.text) this.text = filePath; - return ""+this.text+""; -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/frame/Namespace.js b/doc/jsdoc-toolkit/app/frame/Namespace.js deleted file mode 100644 index fa1e41d10..000000000 --- a/doc/jsdoc-toolkit/app/frame/Namespace.js +++ /dev/null @@ -1,10 +0,0 @@ -_global_ = this; - -function Namespace(name, f) { - var n = name.split("."); - for (var o = _global_, i = 0, l = n.length; i < l; i++) { - o = o[n[i]] = o[n[i]] || {}; - } - - if (f) f(); -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/frame/Opt.js b/doc/jsdoc-toolkit/app/frame/Opt.js deleted file mode 100644 index 352f15903..000000000 --- a/doc/jsdoc-toolkit/app/frame/Opt.js +++ /dev/null @@ -1,134 +0,0 @@ -/** @namespace */ -Opt = { - /** - * Get commandline option values. - * @param {Array} args Commandline arguments. Like ["-a=xml", "-b", "--class=new", "--debug"] - * @param {object} optNames Map short names to long names. Like {a:"accept", b:"backtrace", c:"class", d:"debug"}. - * @return {object} Short names and values. Like {a:"xml", b:true, c:"new", d:true} - */ - get: function(args, optNames) { - var opt = {"_": []}; // the unnamed option allows multiple values - for (var i = 0; i < args.length; i++) { - var arg = new String(args[i]); - var name; - var value; - if (arg.charAt(0) == "-") { - if (arg.charAt(1) == "-") { // it's a longname like --foo - arg = arg.substring(2); - var m = arg.split("="); - name = m.shift(); - value = m.shift(); - if (typeof value == "undefined") value = true; - - for (var n in optNames) { // convert it to a shortname - if (name == optNames[n]) { - name = n; - } - } - } - else { // it's a shortname like -f - arg = arg.substring(1); - var m = arg.split("="); - name = m.shift(); - value = m.shift(); - if (typeof value == "undefined") value = true; - - for (var n in optNames) { // find the matching key - if (name == n || name+'[]' == n) { - name = n; - break; - } - } - } - if (name.match(/(.+)\[\]$/)) { // it's an array type like n[] - name = RegExp.$1; - if (!opt[name]) opt[name] = []; - } - - if (opt[name] && opt[name].push) { - opt[name].push(value); - } - else { - opt[name] = value; - } - } - else { // not associated with any optname - opt._.push(args[i]); - } - } - return opt; - } -} - -/*t: - plan(11, "Testing Opt."); - - is( - typeof Opt, - "object", - "Opt is an object." - ); - - is( - typeof Opt.get, - "function", - "Opt.get is a function." - ); - - var optNames = {a:"accept", b:"backtrace", c:"class", d:"debug", "e[]":"exceptions"}; - var t_options = Opt.get(["-a=xml", "-b", "--class=new", "--debug", "-e=one", "-e=two", "foo", "bar"], optNames); - - is( - t_options.a, - "xml", - "an option defined with a short name can be accessed by its short name." - ); - - is( - t_options.b, - true, - "an option defined with a short name and no value are true." - ); - - is( - t_options.c, - "new", - "an option defined with a long name can be accessed by its short name." - ); - - is( - t_options.d, - true, - "an option defined with a long name and no value are true." - ); - - is( - typeof t_options.e, - "object", - "an option that can accept multiple values is defined." - ); - - is( - t_options.e.length, - 2, - "an option that can accept multiple values can have more than one value." - ); - - is( - t_options.e[1], - "two", - "an option that can accept multiple values can be accessed as an array." - ); - - is( - typeof t_options._, - "object", - "the property '_' is defined for unnamed options." - ); - - is( - t_options._[0], - "foo", - "the property '_' can be accessed as an array." - ); - */ \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/frame/Reflection.js b/doc/jsdoc-toolkit/app/frame/Reflection.js deleted file mode 100644 index 0968f1c64..000000000 --- a/doc/jsdoc-toolkit/app/frame/Reflection.js +++ /dev/null @@ -1,26 +0,0 @@ -/**@constructor*/ -function Reflection(obj) { - this.obj = obj; -} - -Reflection.prototype.getConstructorName = function() { - if (this.obj.constructor.name) return this.obj.constructor.name; - var src = this.obj.constructor.toSource(); - var name = src.substring(name.indexOf("function")+8, src.indexOf('(')).replace(/ /g,''); - return name; -} - -Reflection.prototype.getMethod = function(name) { - for (var p in this.obj) { - if (p == name && typeof(this.obj[p]) == "function") return this.obj[p]; - } - return null; -} - -Reflection.prototype.getParameterNames = function() { - var src = this.obj.toSource(); - src = src.substring( - src.indexOf("(", 8)+1, src.indexOf(")") - ); - return src.split(/, ?/); -} diff --git a/doc/jsdoc-toolkit/app/frame/String.js b/doc/jsdoc-toolkit/app/frame/String.js deleted file mode 100644 index c183c27d5..000000000 --- a/doc/jsdoc-toolkit/app/frame/String.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - @name String - @class Additions to the core string object. -*/ - -/** @author Steven Levithan, released as public domain. */ -String.prototype.trim = function() { - var str = this.replace(/^\s+/, ''); - for (var i = str.length - 1; i >= 0; i--) { - if (/\S/.test(str.charAt(i))) { - str = str.substring(0, i + 1); - break; - } - } - return str; -} -/*t: - plan(6, "Testing String.prototype.trim."); - - var s = " a bc ".trim(); - is(s, "a bc", "multiple spaces front and back are trimmed."); - - s = "a bc\n\n".trim(); - is(s, "a bc", "newlines only in back are trimmed."); - - s = "\ta bc".trim(); - is(s, "a bc", "tabs only in front are trimmed."); - - s = "\n \t".trim(); - is(s, "", "an all-space string is trimmed to empty."); - - s = "a b\nc".trim(); - is(s, "a b\nc", "a string with no spaces in front or back is trimmed to itself."); - - s = "".trim(); - is(s, "", "an empty string is trimmed to empty."); - -*/ - -String.prototype.balance = function(open, close) { - var i = 0; - while (this.charAt(i) != open) { - if (i == this.length) return [-1, -1]; - i++; - } - - var j = i+1; - var balance = 1; - while (j < this.length) { - if (this.charAt(j) == open) balance++; - if (this.charAt(j) == close) balance--; - if (balance == 0) break; - j++; - if (j == this.length) return [-1, -1]; - } - - return [i, j]; -} -/*t: - plan(16, "Testing String.prototype.balance."); - - var s = "{abc}".balance("{","}"); - is(s[0], 0, "opener in first is found."); - is(s[1], 4, "closer in last is found."); - - s = "ab{c}de".balance("{","}"); - is(s[0], 2, "opener in middle is found."); - is(s[1], 4, "closer in middle is found."); - - s = "a{b{c}de}f".balance("{","}"); - is(s[0], 1, "nested opener is found."); - is(s[1], 8, "nested closer is found."); - - s = "{}".balance("{","}"); - is(s[0], 0, "opener with no content is found."); - is(s[1], 1, "closer with no content is found."); - - s = "".balance("{","}"); - is(s[0], -1, "empty string opener is -1."); - is(s[1], -1, "empty string closer is -1."); - - s = "{abc".balance("{","}"); - is(s[0], -1, "opener with no closer returns -1."); - is(s[1], -1, "no closer returns -1."); - - s = "abc".balance("{","}"); - is(s[0], -1, "no opener or closer returns -1 for opener."); - is(s[1], -1, "no opener or closer returns -1 for closer."); - - s = "aX11/MIT License - * (See the accompanying README file for full details.) - */ - -/** - Yet another unit testing tool for JavaScript. - @author Michael Mathews micmath@gmail.com - @param {object} testCases Properties are testcase names, values are functions to execute as tests. -*/ -function testrun(testCases) { - var ran = 0; - for (t in testCases) { - var result = testCases[t](); - ran++; - } - - return testrun.reportOut+"-------------------------------\n"+((testrun.fails>0)? ":( Failed "+testrun.fails+"/" : ":) Passed all ")+testrun.count+" test"+((testrun.count == 1)? "":"s")+".\n"; -} - - -testrun.count = 0; -testrun.current = null; -testrun.passes = 0; -testrun.fails = 0; -testrun.reportOut = ""; - -/** @private */ -testrun.report = function(text) { - testrun.reportOut += text+"\n"; -} - -/** - Check if test evaluates to true. - @param {string} test To be evaluated. - @param {string} message Optional. To be displayed in the report. - @return {boolean} True if the string test evaluates to true. -*/ -ok = function(test, message) { - testrun.count++; - - var result; - try { - result = eval(test); - - if (result) { - testrun.passes++; - testrun.report(" OK "+testrun.count+" - "+((message != null)? message : "")); - } - else { - testrun.fails++; - testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : "")); - } - } - catch(e) { - testrun.fails++ - testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : "")); - - } -} - -/** - Check if test is same as expected. - @param {string} test To be evaluated. - @param {string} expected - @param {string} message Optional. To be displayed in the report. - @return {boolean} True if (test == expected). Note that the comparison is not a strict equality check. -*/ -is = function(test, expected, message) { - testrun.count++; - - var result; - try { - result = eval(test); - - if (result == expected) { - testrun.passes++ - testrun.report(" OK "+testrun.count+" - "+((message != null)? message : "")); - } - else { - testrun.fails++ - testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : "")); - testrun.report("expected: "+expected); - testrun.report(" got: "+result); - } - } - catch(e) { - testrun.fails++ - testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : "")); - testrun.report("expected: "+expected); - testrun.report(" got: "+result);} -} - -/** - Check if test matches pattern. - @param {string} test To be evaluated. - @param {string} pattern Used to create a RegExp. - @param {string} message Optional. To be displayed in the report. - @return {boolean} True if test matches pattern. -*/ -like = function(test, pattern, message) { - testrun.count++; - - var result; - try { - result = eval(test); - var rgx = new RegExp(pattern); - - if (rgx.test(result)) { - testrun.passes++ - testrun.report(" OK "+testrun.count+" - "+((message != null)? message : "")); - } - else { - testrun.fails++ - testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : "")); - testrun.report(" this: "+result); - testrun.report("is not like: "+pattern); - } - } - catch(e) { - testrun.fails++ - testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : "")); - } -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/handlers/FOODOC.js b/doc/jsdoc-toolkit/app/handlers/FOODOC.js deleted file mode 100644 index b208f55b1..000000000 --- a/doc/jsdoc-toolkit/app/handlers/FOODOC.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - This is the main container for the FOODOC handler. - @namespace -*/ -FOODOC = { -}; - -/** The current version string of this application. */ -FOODOC.VERSION = "1.0"; - -FOODOC.handle = function(srcFile, src) { - LOG.inform("Handling file '" + srcFile + "'"); - - return [ - new JSDOC.Symbol( - "foo", - [], - "VIRTUAL", - new JSDOC.DocComment("/** This is a foo. */") - ) - ]; -}; - -FOODOC.publish = function(symbolgroup) { - LOG.inform("Publishing symbolgroup."); -}; diff --git a/doc/jsdoc-toolkit/app/handlers/XMLDOC.js b/doc/jsdoc-toolkit/app/handlers/XMLDOC.js deleted file mode 100755 index 40f87b355..000000000 --- a/doc/jsdoc-toolkit/app/handlers/XMLDOC.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * This is the main container for the XMLDOC handler. - * @namespace - * @author Brett Fattori (bfattori@fry.com) - * @version $Revision: 498 $ - */ -XMLDOC = { - -}; - -/** The current version string of this application. */ -XMLDOC.VERSION = "1.0"; - -/** Include the library necessary to handle XML files */ -IO.includeDir("handlers/XMLDOC/"); - -/** - * @type Symbol[] - */ -XMLDOC.handle = function(srcFile, src) { - -}; - -XMLDOC.publish = function(symbolgroup) { - -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/handlers/XMLDOC/DomReader.js b/doc/jsdoc-toolkit/app/handlers/XMLDOC/DomReader.js deleted file mode 100755 index 240563daf..000000000 --- a/doc/jsdoc-toolkit/app/handlers/XMLDOC/DomReader.js +++ /dev/null @@ -1,159 +0,0 @@ -LOG.inform("XMLDOC.DomReader loaded"); - -XMLDOC.DomReader = function(root) { - - this.dom = root; - - /** - * The current node the reader is on - */ - this.node = root; - - /** - * Get the current node the reader is on - * @type XMLDOC.Parser.node - */ - XMLDOC.DomReader.prototype.getNode = function() { - return this.node; - }; - - /** - * Set the node the reader should be positioned on. - * @param node {XMLDOC.Parser.node} - */ - XMLDOC.DomReader.prototype.setNode = function(node) { - this.node = node; - }; - - /** - * A helper method to make sure the current node will - * never return null, unless null is passed as the root. - * @param step {String} An expression to evaluate - should return a node or null - */ - XMLDOC.DomReader.prototype.navigate = function(step) { - var n; - if ((n = step) != null) - { - this.node = n; - return this.node; - } - return null; - }; - - /** - * Get the root node of the current node's document. - */ - XMLDOC.DomReader.prototype.root = function() { - this.navigate(this.dom); - }; - - /** - * Get the parent of the current node. - */ - XMLDOC.DomReader.prototype.parent = function() { - return this.navigate(this.node.parentNode()); - }; - - /** - * Get the first child of the current node. - */ - XMLDOC.DomReader.prototype.firstChild = function() { - return this.navigate(this.node.firstChild()); - }; - - /** - * Get the last child of the current node. - */ - XMLDOC.DomReader.prototype.lastChild = function() { - return this.navigate(this.node.lastChild()); - }; - - /** - * Get the next sibling of the current node. - */ - XMLDOC.DomReader.prototype.nextSibling = function() { - return this.navigate(this.node.nextSibling()); - }; - - /** - * Get the previous sibling of the current node. - */ - XMLDOC.DomReader.prototype.prevSibling = function() { - return this.navigate(this.node.prevSibling()); - }; - - //=============================================================================================== - // Support methods - - /** - * Walk the tree starting with the current node, calling the plug-in for - * each node visited. Each time the plug-in is called, the DomReader - * is passed as the only parameter. Use the {@link XMLDOC.DomReader#getNode} method - * to access the current node. This method uses a depth first traversal pattern. - * - * @param srcFile {String} The source file being evaluated - */ - XMLDOC.DomReader.prototype.getSymbols = function(srcFile) - { - XMLDOC.DomReader.symbols = []; - XMLDOC.DomReader.currentFile = srcFile; - JSDOC.Symbol.srcFile = (srcFile || ""); - - if (defined(JSDOC.PluginManager)) { - JSDOC.PluginManager.run("onDomGetSymbols", this); - } - - return XMLDOC.DomReader.symbols; - }; - - /** - * Find the node with the given name using a depth first traversal. - * Does not modify the DomReader's current node. - * - * @param name {String} The name of the node to find - * @return the node that was found, or null if not found - */ - XMLDOC.DomReader.prototype.findNode = function(name) - { - var findNode = null; - - // Start at the current node and move into the subtree, - // looking for the node with the given name - function deeper(node, find) - { - var look = null; - - if (node) { - if (node.name == find) - { - return node; - } - - if (node.firstChild()) - { - look = deeper(node.firstChild(), find); - } - - if (!look && node.nextSibling()) - { - look = deeper(node.nextSibling(), find); - } - } - - return look; - } - - return deeper(this.getNode().firstChild(), name); - }; - - /** - * Find the next node with the given name using a depth first traversal. - * - * @param name {String} The name of the node to find - */ - XMLDOC.DomReader.prototype.findPreviousNode = function(name) - { - }; - -}; - diff --git a/doc/jsdoc-toolkit/app/handlers/XMLDOC/XMLDoc.js b/doc/jsdoc-toolkit/app/handlers/XMLDOC/XMLDoc.js deleted file mode 100755 index e9b3e3ce8..000000000 --- a/doc/jsdoc-toolkit/app/handlers/XMLDOC/XMLDoc.js +++ /dev/null @@ -1,16 +0,0 @@ -LOG.inform("XMLDOC.symbolize loaded"); - -/** - * Convert the source file to a set of symbols - */ -XMLDOC.symbolize = function(srcFile, src) { - - LOG.inform("Symbolizing file '" + srcFile + "'"); - - // XML files already have a defined structure, so we don't need to - // do anything but parse them. The DOM reader can create a symbol - // table from the parsed XML. - var dr = new XMLDOC.DomReader(XMLDOC.Parser.parse(src)); - return dr.getSymbols(srcFile); - -}; diff --git a/doc/jsdoc-toolkit/app/handlers/XMLDOC/XMLParse.js b/doc/jsdoc-toolkit/app/handlers/XMLDOC/XMLParse.js deleted file mode 100755 index 78e8f4556..000000000 --- a/doc/jsdoc-toolkit/app/handlers/XMLDOC/XMLParse.js +++ /dev/null @@ -1,292 +0,0 @@ -LOG.inform("XMLDOC.Parser loaded"); - -/** - * XML Parser object. Returns an {@link #XMLDOC.Parser.node} which is - * the root element of the parsed document. - *

- * By default, this parser will only handle well formed XML. To - * allow the parser to handle HTML, set the XMLDOC.Parser.strictMode - * variable to false before calling XMLDOC.Parser.parse(). - *

- * Note: If you pass poorly formed XML, it will cause the parser to throw - * an exception. - * - * @author Brett Fattori (bfattori@fry.com) - * @author $Author: micmath $ - * @version $Revision: 497 $ - */ -XMLDOC.Parser = {}; - -/** - * Strict mode setting. Setting this to false allows HTML-style source to - * be parsed. Normally, well formed XML has defined end tags, or empty tags - * are properly formed. Default: true - * @type Boolean - */ -XMLDOC.Parser.strictMode = true; - -/** - * A node in an XML Document. Node types are ROOT, ELEMENT, COMMENT, PI, and TEXT. - * @param parent {XMLDOC.Parser.node} The parent node - * @param name {String} The node name - * @param type {String} One of the types - */ -XMLDOC.Parser.node = function(parent, name, type) -{ - this.name = name; - this.type = type || "ELEMENT"; - this.parent = parent; - this.charData = ""; - this.attrs = {}; - this.nodes = []; - this.cPtr = 0; - - XMLDOC.Parser.node.prototype.getAttributeNames = function() { - var a = []; - for (var o in this.attrs) - { - a.push(o); - } - - return a; - }; - - XMLDOC.Parser.node.prototype.getAttribute = function(attr) { - return this.attrs[attr]; - }; - - XMLDOC.Parser.node.prototype.setAttribute = function(attr, val) { - this.attrs[attr] = val; - }; - - XMLDOC.Parser.node.prototype.getChild = function(idx) { - return this.nodes[idx]; - }; - - XMLDOC.Parser.node.prototype.parentNode = function() { - return this.parent; - }; - - XMLDOC.Parser.node.prototype.firstChild = function() { - return this.nodes[0]; - }; - - XMLDOC.Parser.node.prototype.lastChild = function() { - return this.nodes[this.nodes.length - 1]; - }; - - XMLDOC.Parser.node.prototype.nextSibling = function() { - var p = this.parent; - if (p && (p.nodes.indexOf(this) + 1 != p.nodes.length)) - { - return p.getChild(p.nodes.indexOf(this) + 1); - } - return null; - }; - - XMLDOC.Parser.node.prototype.prevSibling = function() { - var p = this.parent; - if (p && (p.nodes.indexOf(this) - 1 >= 0)) - { - return p.getChild(p.nodes.indexOf(this) - 1); - } - return null; - }; -}; - -/** - * Parse an XML Document from the specified source. The XML should be - * well formed, unless strict mode is disabled, then the parser will - * handle HTML-style XML documents. - * @param src {String} The source to parse - */ -XMLDOC.Parser.parse = function(src) -{ - var A = []; - - // Normailize whitespace - A = src.split("\r\n"); - src = A.join("\n"); - A = src.split("\r"); - src = A.join("\n"); - - // Remove XML and DOCTYPE specifier - src.replace(/<\?XML .*\?>/i, ""); - src.replace(//i, ""); - - // The document is the root node and cannot be modified or removed - var doc = new XMLDOC.Parser.node(null, "ROOT", "DOCUMENT"); - - // Let's break it down - XMLDOC.Parser.eat(doc, src); - - return doc; -}; - -/** - * The XML fragment processing routine. This method is private and should not be called - * directly. - * @param parentNode {XMLDOC.Parser.node} The node which is the parent of this fragment - * @param src {String} The source within the fragment to process - * @private - */ -XMLDOC.Parser.eat = function(parentNode, src) -{ - // A simple tag def - var reTag = new RegExp("<(!|)(\\?|--|)((.|\\s)*?)\\2>","g"); - - // Special tag types - var reCommentTag = //; - var rePITag = /<\?((.|\s)*?)\?>/; - - // A start tag (with potential empty marker) - var reStartTag = /<(.*?)( +([\w_\-]*)=(\"|')(.*)\4)*(\/)?>/; - - // An empty HTML style tag (not proper XML, but we'll accept it so we can process HTML) - var reHTMLEmptyTag = /<(.*?)( +([\w_\-]*)=(\"|')(.*)\4)*>/; - - // Fully enclosing tag with nested tags - var reEnclosingTag = /<(.*?)( +([\w_\-]*)=(\"|')(.*?)\4)*>((.|\s)*?)<\/\1>/; - - // Breaks down attributes - var reAttributes = new RegExp(" +([\\w_\\-]*)=(\"|')(.*?)\\2","g"); - - // Find us a tag - var tag; - while ((tag = reTag.exec(src)) != null) - { - if (tag.index > 0) - { - // The next tag has some text before it - var text = src.substring(0, tag.index).replace(/^[ \t\n]+((.|\n)*?)[ \t\n]+$/, "$1"); - - if (text.length > 0 && (text != "\n")) - { - var txtnode = new XMLDOC.Parser.node(parentNode, "", "TEXT"); - txtnode.charData = text; - - // Append the new text node - parentNode.nodes.push(txtnode); - } - - // Reset the lastIndex of reTag - reTag.lastIndex -= src.substring(0, tag.index).length; - - // Eat the text - src = src.substring(tag.index); - } - - if (reCommentTag.test(tag[0])) - { - // Is this a comment? - var comment = new XMLDOC.Parser.node(parentNode, "", "COMMENT"); - comment.charData = reCommentTag.exec(tag[0])[1]; - - // Append the comment - parentNode.nodes.push(comment); - - // Move the lastIndex of reTag - reTag.lastIndex -= tag[0].length; - - // Eat the tag - src = src.replace(reCommentTag, ""); - } - else if (rePITag.test(tag[0])) - { - // Is this a processing instruction? - var pi = new XMLDOC.Parser.node(parentNode, "", "PI"); - pi.charData = rePITag.exec(tag[0])[1]; - - // Append the processing instruction - parentNode.nodes.push(pi); - - // Move the lastIndex of reTag - reTag.lastIndex -= tag[0].length; - - // Eat the tag - src = src.replace(rePITag, ""); - } - else if (reStartTag.test(tag[0])) - { - // Break it down - var e = reStartTag.exec(tag[0]); - var elem = new XMLDOC.Parser.node(parentNode, e[1], "ELEMENT"); - - // Get attributes from the tag - var a; - while ((a = reAttributes.exec(e[2])) != null ) - { - elem.attrs[a[1]] = a[3]; - } - - // Is this an empty XML-style tag? - if (e[6] == "/") - { - // Append the empty element - parentNode.nodes.push(elem); - - // Move the lastIndex of reTag (include the start tag length) - reTag.lastIndex -= e[0].length; - - // Eat the tag - src = src.replace(reStartTag, ""); - } - else - { - // Check for malformed XML tags - var htmlParsed = false; - var htmlStartTag = reHTMLEmptyTag.exec(src); - - // See if there isn't an end tag within this block - var reHTMLEndTag = new RegExp(""); - var htmlEndTag = reHTMLEndTag.exec(src); - - if (XMLDOC.Parser.strictMode && htmlEndTag == null) - { - // Poorly formed XML fails in strict mode - var err = new Error("Malformed XML passed to XMLDOC.Parser... Error contains malformed 'src'"); - err.src = src; - throw err; - } - else if (htmlEndTag == null) - { - // This is an HTML-style empty tag, store the element for it in non-strict mode - parentNode.nodes.push(elem); - - // Eat the tag - src = src.replace(reHTMLEmptyTag, ""); - htmlParsed = true; - } - - // If we didn't parse HTML-style, it must be an enclosing tag - if (!htmlParsed) - { - var enc = reEnclosingTag.exec(src); - - // Go deeper into the document - XMLDOC.Parser.eat(elem, enc[6]); - - // Append the new element node - parentNode.nodes.push(elem); - - // Eat the tag - src = src.replace(reEnclosingTag, ""); - } - } - - // Reset the lastIndex of reTag - reTag.lastIndex = 0; - } - } - - // No tag was found... append the text if there is any - src = src.replace(/^[ \t\n]+((.|\n)*?)[ \t\n]+$/, "$1"); - if (src.length > 0 && (src != "\n")) - { - var txtNode = new XMLDOC.Parser.node(parentNode, "", "TEXT"); - txtNode.charData = src; - - // Append the new text node - parentNode.nodes.push(txtNode); - } -}; diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC.js b/doc/jsdoc-toolkit/app/lib/JSDOC.js deleted file mode 100644 index ca59089a7..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC.js +++ /dev/null @@ -1,104 +0,0 @@ -/** - @overview - @date $Date: 2009-09-04 07:43:41 +0100 (Fri, 04 Sep 2009) $ - @version $Revision: 814 $ - @location $HeadURL: https://jsdoc-toolkit.googlecode.com/svn/tags/jsdoc_toolkit-2.3.2/jsdoc-toolkit/app/lib/JSDOC.js $ - @name JSDOC.js - */ - -/** - This is the main container for the JSDOC application. - @namespace -*/ -JSDOC = { -}; - -/** - @requires Opt - */ -if (typeof arguments == "undefined") arguments = []; -JSDOC.opt = Opt.get( - arguments, - { - a: "allfunctions", - c: "conf", - d: "directory", - "D[]": "define", - e: "encoding", - "E[]": "exclude", - h: "help", - n: "nocode", - o: "out", - p: "private", - q: "quiet", - r: "recurse", - S: "securemodules", - s: "suppress", - t: "template", - T: "testmode", - u: "unique", - v: "verbose", - x: "ext" - } -); - -/** The current version string of this application. */ -JSDOC.VERSION = "2.3.2"; - -/** Print out usage information and quit. */ -JSDOC.usage = function() { - print("USAGE: java -jar jsrun.jar app/run.js [OPTIONS] ..."); - print(""); - print("OPTIONS:"); - print(" -a or --allfunctions\n Include all functions, even undocumented ones.\n"); - print(" -c or --conf\n Load a configuration file.\n"); - print(" -d= or --directory=\n Output to this directory (defaults to \"out\").\n"); - print(" -D=\"myVar:My value\" or --define=\"myVar:My value\"\n Multiple. Define a variable, available in JsDoc as JSDOC.opt.D.myVar.\n"); - print(" -e= or --encoding=\n Use this encoding to read and write files.\n"); - print(" -E=\"REGEX\" or --exclude=\"REGEX\"\n Multiple. Exclude files based on the supplied regex.\n"); - print(" -h or --help\n Show this message and exit.\n"); - print(" -n or --nocode\n Ignore all code, only document comments with @name tags.\n"); - print(" -o= or --out=\n Print log messages to a file (defaults to stdout).\n"); - print(" -p or --private\n Include symbols tagged as private, underscored and inner symbols.\n"); - print(" -q or --quiet\n Do not output any messages, not even warnings.\n"); - print(" -r= or --recurse=\n Descend into src directories.\n"); - print(" -s or --suppress\n Suppress source code output.\n"); - print(" -S or --securemodules\n Use Secure Modules mode to parse source code.\n"); - print(" -t= or --template=\n Required. Use this template to format the output.\n"); - print(" -T or --test\n Run all unit tests and exit.\n"); - print(" -u or --unique\n Force file names to be unique, but not based on symbol names.\n"); - print(" -v or --verbose\n Provide verbose feedback about what is happening.\n"); - print(" -x=[,EXT]... or --ext=[,EXT]...\n Scan source files with the given extension/s (defaults to js).\n"); - - quit(); -} - -/*t: - plan(4, "Testing JSDOC namespace."); - - is( - typeof JSDOC, - "object", - "JSDOC.usage is a function." - ); - - is( - typeof JSDOC.VERSION, - "string", - "JSDOC.VERSION is a string." - ); - - is( - typeof JSDOC.usage, - "function", - "JSDOC.usage is a function." - ); - - is( - typeof JSDOC.opt, - "object", - "JSDOC.opt is a object." - ); - */ - -if (this.IO) IO.includeDir("lib/JSDOC/"); diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC/DocComment.js b/doc/jsdoc-toolkit/app/lib/JSDOC/DocComment.js deleted file mode 100644 index c6c8d7d4f..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC/DocComment.js +++ /dev/null @@ -1,200 +0,0 @@ -if (typeof JSDOC == "undefined") JSDOC = {}; - -/** - Create a new DocComment. This takes a raw documentation comment, - and wraps it in useful accessors. - @class Represents a documentation comment object. - */ -JSDOC.DocComment = function(/**String*/comment) { - this.init(); - if (typeof comment != "undefined") { - this.parse(comment); - } -} - -JSDOC.DocComment.prototype.init = function() { - this.isUserComment = true; - this.src = ""; - this.meta = ""; - this.tagTexts = []; - this.tags = []; -} - -/** - @requires JSDOC.DocTag - */ -JSDOC.DocComment.prototype.parse = function(/**String*/comment) { - if (comment == "") { - comment = "/** @desc */"; - this.isUserComment = false; - } - - this.src = JSDOC.DocComment.unwrapComment(comment); - - this.meta = ""; - if (this.src.indexOf("#") == 0) { - this.src.match(/#(.+[+-])([\s\S]*)$/); - if (RegExp.$1) this.meta = RegExp.$1; - if (RegExp.$2) this.src = RegExp.$2; - } - - if (typeof JSDOC.PluginManager != "undefined") { - JSDOC.PluginManager.run("onDocCommentSrc", this); - } - - this.fixDesc(); - - this.src = JSDOC.DocComment.shared+"\n"+this.src; - - this.tagTexts = - this.src - .split(/(^|[\r\n])\s*@/) - .filter(function($){return $.match(/\S/)}); - - /** - The tags found in the comment. - @type JSDOC.DocTag[] - */ - this.tags = this.tagTexts.map(function($){return new JSDOC.DocTag($)}); - - if (typeof JSDOC.PluginManager != "undefined") { - JSDOC.PluginManager.run("onDocCommentTags", this); - } -} - -/*t: - plan(5, "testing JSDOC.DocComment"); - requires("../frame/String.js"); - requires("../lib/JSDOC/DocTag.js"); - - var com = new JSDOC.DocComment("/**@foo some\n* comment here*"+"/"); - is(com.tagTexts[0], "foo some\ncomment here", "first tag text is found."); - is(com.tags[0].title, "foo", "the title is found in a comment with one tag."); - - var com = new JSDOC.DocComment("/** @foo first\n* @bar second*"+"/"); - is(com.getTag("bar").length, 1, "getTag() returns one tag by that title."); - - JSDOC.DocComment.shared = "@author John Smith"; - var com = new JSDOC.DocComment("/**@foo some\n* comment here*"+"/"); - is(com.tags[0].title, "author", "shared comment is added."); - is(com.tags[1].title, "foo", "shared comment is added to existing tag."); -*/ - -/** - If no @desc tag is provided, this function will add it. - */ -JSDOC.DocComment.prototype.fixDesc = function() { - if (this.meta && this.meta != "@+") return; - if (/^\s*[^@\s]/.test(this.src)) { - this.src = "@desc "+this.src; - } -} - -/*t: - plan(5, "testing JSDOC.DocComment#fixDesc"); - - var com = new JSDOC.DocComment(); - - com.src = "this is a desc\n@author foo"; - com.fixDesc(); - is(com.src, "@desc this is a desc\n@author foo", "if no @desc tag is provided one is added."); - - com.src = "x"; - com.fixDesc(); - is(com.src, "@desc x", "if no @desc tag is provided one is added to a single character."); - - com.src = "\nx"; - com.fixDesc(); - is(com.src, "@desc \nx", "if no @desc tag is provided one is added to return and character."); - - com.src = " "; - com.fixDesc(); - is(com.src, " ", "if no @desc tag is provided one is not added to just whitespace."); - - com.src = ""; - com.fixDesc(); - is(com.src, "", "if no @desc tag is provided one is not added to empty."); -*/ - -/** - Remove slash-star comment wrapper from a raw comment string. - @type String - */ -JSDOC.DocComment.unwrapComment = function(/**String*/comment) { - if (!comment) return ""; - var unwrapped = comment.replace(/(^\/\*\*|\*\/$)/g, "").replace(/^\s*\* ?/gm, ""); - return unwrapped; -} - -/*t: - plan(5, "testing JSDOC.DocComment.unwrapComment"); - - var com = "/**x*"+"/"; - var unwrapped = JSDOC.DocComment.unwrapComment(com); - is(unwrapped, "x", "a single character jsdoc is found."); - - com = "/***x*"+"/"; - unwrapped = JSDOC.DocComment.unwrapComment(com); - is(unwrapped, "x", "three stars are allowed in the opener."); - - com = "/****x*"+"/"; - unwrapped = JSDOC.DocComment.unwrapComment(com); - is(unwrapped, "*x", "fourth star in the opener is kept."); - - com = "/**x\n * y\n*"+"/"; - unwrapped = JSDOC.DocComment.unwrapComment(com); - is(unwrapped, "x\ny\n", "leading stars and spaces are trimmed."); - - com = "/**x\n * y\n*"+"/"; - unwrapped = JSDOC.DocComment.unwrapComment(com); - is(unwrapped, "x\n y\n", "only first space after leading stars are trimmed."); -*/ - -/** - Provides a printable version of the comment. - @type String - */ -JSDOC.DocComment.prototype.toString = function() { - return this.src; -} - -/*t: - plan(1, "testing JSDOC.DocComment#fixDesc"); - var com = new JSDOC.DocComment(); - com.src = "foo"; - is(""+com, "foo", "stringifying a comment returns the unwrapped src."); -*/ - -/** - Given the title of a tag, returns all tags that have that title. - @type JSDOC.DocTag[] - */ -JSDOC.DocComment.prototype.getTag = function(/**String*/tagTitle) { - return this.tags.filter(function($){return $.title == tagTitle}); -} - -/*t: - plan(1, "testing JSDOC.DocComment#getTag"); - requires("../frame/String.js"); - requires("../lib/JSDOC/DocTag.js"); - - var com = new JSDOC.DocComment("/**@foo some\n* @bar\n* @bar*"+"/"); - is(com.getTag("bar").length, 2, "getTag returns expected number of tags."); -*/ - -/** - Used to store the currently shared tag text. -*/ -JSDOC.DocComment.shared = ""; - -/*t: - plan(2, "testing JSDOC.DocComment.shared"); - requires("../frame/String.js"); - requires("../lib/JSDOC/DocTag.js"); - - JSDOC.DocComment.shared = "@author Michael"; - - var com = new JSDOC.DocComment("/**@foo\n* @foo*"+"/"); - is(com.getTag("author").length, 1, "getTag returns shared tag."); - is(com.getTag("foo").length, 2, "getTag returns unshared tags too."); -*/ \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC/DocTag.js b/doc/jsdoc-toolkit/app/lib/JSDOC/DocTag.js deleted file mode 100644 index 77ec07cac..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC/DocTag.js +++ /dev/null @@ -1,294 +0,0 @@ -if (typeof JSDOC == "undefined") JSDOC = {}; - -/** - @constructor - */ -JSDOC.DocTag = function(src) { - this.init(); - if (typeof src != "undefined") { - this.parse(src); - } -} - -/** - Create and initialize the properties of this. - */ -JSDOC.DocTag.prototype.init = function() { - this.title = ""; - this.type = ""; - this.name = ""; - this.isOptional = false; - this.defaultValue = ""; - this.desc = ""; - - return this; -} - -/** - Populate the properties of this from the given tag src. - @param {string} src - */ -JSDOC.DocTag.prototype.parse = function(src) { - if (typeof src != "string") throw "src must be a string not "+(typeof src); - - try { - src = this.nibbleTitle(src); - if (JSDOC.PluginManager) { - JSDOC.PluginManager.run("onDocTagSynonym", this); - } - - src = this.nibbleType(src); - - // only some tags are allowed to have names. - if (this.title == "param" || this.title == "property" || this.title == "config") { // @config is deprecated - src = this.nibbleName(src); - } - } - catch(e) { - if (LOG) LOG.warn(e); - else throw e; - } - this.desc = src; // whatever is left - - // example tags need to have whitespace preserved - if (this.title != "example") this.desc = this.desc.trim(); - - if (JSDOC.PluginManager) { - JSDOC.PluginManager.run("onDocTag", this); - } -} - -/** - Automatically called when this is stringified. - */ -JSDOC.DocTag.prototype.toString = function() { - return this.desc; -} - -/*t: - plan(1, "testing JSDOC.DocTag#toString"); - - var tag = new JSDOC.DocTag("param {object} date A valid date."); - is(""+tag, "A valid date.", "stringifying a tag returns the desc."); - */ - -/** - Find and shift off the title of a tag. - @param {string} src - @return src - */ -JSDOC.DocTag.prototype.nibbleTitle = function(src) { - if (typeof src != "string") throw "src must be a string not "+(typeof src); - - var parts = src.match(/^\s*(\S+)(?:\s([\s\S]*))?$/); - - if (parts && parts[1]) this.title = parts[1]; - if (parts && parts[2]) src = parts[2]; - else src = ""; - - return src; -} - -/*t: - plan(8, "testing JSDOC.DocTag#nibbleTitle"); - - var tag = new JSDOC.DocTag(); - - tag.init().nibbleTitle("aTitleGoesHere"); - is(tag.title, "aTitleGoesHere", "a title can be found in a single-word string."); - - var src = tag.init().nibbleTitle("aTitleGoesHere and the rest"); - is(tag.title, "aTitleGoesHere", "a title can be found in a multi-word string."); - is(src, "and the rest", "the rest is returned when the title is nibbled off."); - - src = tag.init().nibbleTitle(""); - is(tag.title, "", "given an empty string the title is empty."); - is(src, "", "the rest is empty when the tag is empty."); - - var src = tag.init().nibbleTitle(" aTitleGoesHere\n a description"); - is(tag.title, "aTitleGoesHere", "leading and trailing spaces are not part of the title."); - is(src, " a description", "leading spaces (less one) are part of the description."); - - tag.init().nibbleTitle("a.Title::Goes_Here foo"); - is(tag.title, "a.Title::Goes_Here", "titles with punctuation are allowed."); - */ - -/** - Find and shift off the type of a tag. - @requires frame/String.js - @param {string} src - @return src - */ -JSDOC.DocTag.prototype.nibbleType = function(src) { - if (typeof src != "string") throw "src must be a string not "+(typeof src); - - if (src.match(/^\s*\{/)) { - var typeRange = src.balance("{", "}"); - if (typeRange[1] == -1) { - throw "Malformed comment tag ignored. Tag type requires an opening { and a closing }: "+src; - } - this.type = src.substring(typeRange[0]+1, typeRange[1]).trim(); - this.type = this.type.replace(/\s*,\s*/g, "|"); // multiples can be separated by , or | - src = src.substring(typeRange[1]+1); - } - - return src; -} - -/*t: - plan(5, "testing JSDOC.DocTag.parser.nibbleType"); - requires("../frame/String.js"); - - var tag = new JSDOC.DocTag(); - - tag.init().nibbleType("{String[]} aliases"); - is(tag.type, "String[]", "type can have non-alpha characters."); - - tag.init().nibbleType("{ aTypeGoesHere } etc etc"); - is(tag.type, "aTypeGoesHere", "type is trimmed."); - - tag.init().nibbleType("{ oneType, twoType ,\n threeType } etc etc"); - is(tag.type, "oneType|twoType|threeType", "multiple types can be separated by commas."); - - var error; - try { tag.init().nibbleType("{widget foo"); } - catch(e) { error = e; } - is(typeof error, "string", "malformed tag type throws error."); - isnt(error.indexOf("Malformed"), -1, "error message tells tag is malformed."); - */ - -/** - Find and shift off the name of a tag. - @requires frame/String.js - @param {string} src - @return src - */ -JSDOC.DocTag.prototype.nibbleName = function(src) { - if (typeof src != "string") throw "src must be a string not "+(typeof src); - - src = src.trim(); - - // is optional? - if (src.charAt(0) == "[") { - var nameRange = src.balance("[", "]"); - if (nameRange[1] == -1) { - throw "Malformed comment tag ignored. Tag optional name requires an opening [ and a closing ]: "+src; - } - this.name = src.substring(nameRange[0]+1, nameRange[1]).trim(); - this.isOptional = true; - - src = src.substring(nameRange[1]+1); - - // has default value? - var nameAndValue = this.name.split("="); - if (nameAndValue.length) { - this.name = nameAndValue.shift().trim(); - this.defaultValue = nameAndValue.join("="); - } - } - else { - var parts = src.match(/^(\S+)(?:\s([\s\S]*))?$/); - if (parts) { - if (parts[1]) this.name = parts[1]; - if (parts[2]) src = parts[2].trim(); - else src = ""; - } - } - - return src; -} - -/*t: - requires("../frame/String.js"); - plan(9, "testing JSDOC.DocTag.parser.nibbleName"); - - var tag = new JSDOC.DocTag(); - - tag.init().nibbleName("[foo] This is a description."); - is(tag.isOptional, true, "isOptional syntax is detected."); - is(tag.name, "foo", "optional param name is found."); - - tag.init().nibbleName("[foo] This is a description."); - is(tag.isOptional, true, "isOptional syntax is detected when no type."); - is(tag.name, "foo", "optional param name is found when no type."); - - tag.init().nibbleName("[foo=7] This is a description."); - is(tag.name, "foo", "optional param name is found when default value."); - is(tag.defaultValue, 7, "optional param default value is found when default value."); - - //tag.init().nibbleName("[foo= a value] This is a description."); - //is(tag.defaultValue, " a value", "optional param default value is found when default value has spaces (issue #112)."); - - tag.init().nibbleName("[foo=[]] This is a description."); - is(tag.defaultValue, "[]", "optional param default value is found when default value is [] (issue #95)."); - - tag.init().nibbleName("[foo=a=b] This is a description."); - is(tag.name, "foo", "optional param name is found when default value is a=b."); - is(tag.defaultValue, "a=b", "optional param default value is found when default value is a=b.") - */ - -/*t: - plan(32, "Testing JSDOC.DocTag.parser."); - requires("../frame/String.js"); - - var tag = new JSDOC.DocTag(); - - is(typeof tag, "object", "JSDOC.DocTag.parser with an empty string returns an object."); - is(typeof tag.title, "string", "returned object has a string property 'title'."); - is(typeof tag.type, "string", "returned object has a string property 'type'."); - is(typeof tag.name, "string", "returned object has a string property 'name'."); - is(typeof tag.defaultValue, "string", "returned object has a string property 'defaultValue'."); - is(typeof tag.isOptional, "boolean", "returned object has a boolean property 'isOptional'."); - is(typeof tag.desc, "string", "returned object has a string property 'desc'."); - - tag = new JSDOC.DocTag("param {widget} foo"); - is(tag.title, "param", "param title is found."); - is(tag.name, "foo", "param name is found when desc is missing."); - is(tag.desc, "", "param desc is empty when missing."); - - tag = new JSDOC.DocTag("param {object} date A valid date."); - is(tag.name, "date", "param name is found with a type."); - is(tag.type, "object", "param type is found."); - is(tag.desc, "A valid date.", "param desc is found with a type."); - - tag = new JSDOC.DocTag("param aName a description goes\n here."); - is(tag.name, "aName", "param name is found without a type."); - is(tag.desc, "a description goes\n here.", "param desc is found without a type."); - - tag = new JSDOC.DocTag("param {widget}"); - is(tag.name, "", "param name is empty when it is not given."); - - tag = new JSDOC.DocTag("param {widget} [foo] This is a description."); - is(tag.name, "foo", "optional param name is found."); - - tag = new JSDOC.DocTag("return {aType} This is a description."); - is(tag.type, "aType", "when return tag has no name, type is found."); - is(tag.desc, "This is a description.", "when return tag has no name, desc is found."); - - tag = new JSDOC.DocTag("author Joe Coder "); - is(tag.title, "author", "author tag has a title."); - is(tag.type, "", "the author tag has no type."); - is(tag.name, "", "the author tag has no name."); - is(tag.desc, "Joe Coder ", "author tag has desc."); - - tag = new JSDOC.DocTag("private \t\n "); - is(tag.title, "private", "private tag has a title."); - is(tag.type, "", "the private tag has no type."); - is(tag.name, "", "the private tag has no name."); - is(tag.desc, "", "private tag has no desc."); - - tag = new JSDOC.DocTag("example\n example(code);\n more();"); - is(tag.desc, " example(code);\n more();", "leading whitespace (less one) in examples code is preserved."); - - tag = new JSDOC.DocTag("param theName \n"); - is(tag.name, "theName", "name only is found."); - - tag = new JSDOC.DocTag("type theDesc \n"); - is(tag.desc, "theDesc", "desc only is found."); - - tag = new JSDOC.DocTag("type {theType} \n"); - is(tag.type, "theType", "type only is found."); - - tag = new JSDOC.DocTag(""); - is(tag.title, "", "title is empty when tag is empty."); - */ \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js b/doc/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js deleted file mode 100644 index 2c4bfb82b..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js +++ /dev/null @@ -1,126 +0,0 @@ -/** - @constructor - @param [opt] Used to override the commandline options. Useful for testing. - @version $Id: JsDoc.js 773 2009-01-24 09:42:04Z micmath $ -*/ -JSDOC.JsDoc = function(/**object*/ opt) { - if (opt) { - JSDOC.opt = opt; - } - - if (JSDOC.opt.h) { - JSDOC.usage(); - quit(); - } - - // defend against options that are not sane - if (JSDOC.opt._.length == 0) { - LOG.warn("No source files to work on. Nothing to do."); - quit(); - } - if (JSDOC.opt.t === true || JSDOC.opt.d === true) { - JSDOC.usage(); - } - - if (typeof JSDOC.opt.d == "string") { - if (!JSDOC.opt.d.charAt(JSDOC.opt.d.length-1).match(/[\\\/]/)) { - JSDOC.opt.d = JSDOC.opt.d+"/"; - } - LOG.inform("Output directory set to '"+JSDOC.opt.d+"'."); - IO.mkPath(JSDOC.opt.d); - } - if (JSDOC.opt.e) IO.setEncoding(JSDOC.opt.e); - - // the -r option: scan source directories recursively - if (typeof JSDOC.opt.r == "boolean") JSDOC.opt.r = 10; - else if (!isNaN(parseInt(JSDOC.opt.r))) JSDOC.opt.r = parseInt(JSDOC.opt.r); - else JSDOC.opt.r = 1; - - // the -D option: define user variables - var D = {}; - if (JSDOC.opt.D) { - for (var i = 0; i < JSDOC.opt.D.length; i++) { - var defineParts = JSDOC.opt.D[i].split(":", 2); - if (defineParts) D[defineParts[0]] = defineParts[1]; - } - } - JSDOC.opt.D = D; - // combine any conf file D options with the commandline D options - if (defined(JSDOC.conf)) for (var c in JSDOC.conf.D) { - if (!defined(JSDOC.opt.D[c])) { - JSDOC.opt.D[c] = JSDOC.conf.D[c]; - } - } - - // Give plugins a chance to initialize - if (defined(JSDOC.PluginManager)) { - JSDOC.PluginManager.run("onInit", JSDOC.opt); - } - - JSDOC.opt.srcFiles = JSDOC.JsDoc._getSrcFiles(); - JSDOC.JsDoc._parseSrcFiles(); - JSDOC.JsDoc.symbolSet = JSDOC.Parser.symbols; -} - -/** - Retrieve source file list. - @returns {String[]} The pathnames of the files to be parsed. - */ -JSDOC.JsDoc._getSrcFiles = function() { - JSDOC.JsDoc.srcFiles = []; - - var ext = ["js"]; - if (JSDOC.opt.x) { - ext = JSDOC.opt.x.split(",").map(function($) {return $.toLowerCase()}); - } - - for (var i = 0; i < JSDOC.opt._.length; i++) { - JSDOC.JsDoc.srcFiles = JSDOC.JsDoc.srcFiles.concat( - IO.ls(JSDOC.opt._[i], JSDOC.opt.r).filter( - function($) { - var thisExt = $.split(".").pop().toLowerCase(); - - if (JSDOC.opt.E) { - for(var n = 0; n < JSDOC.opt.E.length; n++) { - if ($.match(new RegExp(JSDOC.opt.E[n]))) { - LOG.inform("Excluding " + $); - return false; // if the file matches the regex then it's excluded. - } - } - } - - return (ext.indexOf(thisExt) > -1); // we're only interested in files with certain extensions - } - ) - ); - } - - return JSDOC.JsDoc.srcFiles; -} - -JSDOC.JsDoc._parseSrcFiles = function() { - JSDOC.Parser.init(); - for (var i = 0, l = JSDOC.JsDoc.srcFiles.length; i < l; i++) { - var srcFile = JSDOC.JsDoc.srcFiles[i]; - - if (JSDOC.opt.v) LOG.inform("Parsing file: " + srcFile); - - try { - var src = IO.readFile(srcFile); - } - catch(e) { - LOG.warn("Can't read source file '"+srcFile+"': "+e.message); - } - - var tr = new JSDOC.TokenReader(); - var ts = new JSDOC.TokenStream(tr.tokenize(new JSDOC.TextStream(src))); - - JSDOC.Parser.parse(ts, srcFile); - - } - JSDOC.Parser.finish(); - - if (JSDOC.PluginManager) { - JSDOC.PluginManager.run("onFinishedParsing", JSDOC.Parser.symbols); - } -} diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js b/doc/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js deleted file mode 100644 index bcaebc9c5..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js +++ /dev/null @@ -1,109 +0,0 @@ -/** - @constructor -*/ -JSDOC.JsPlate = function(templateFile) { - if (templateFile) this.template = IO.readFile(templateFile); - - this.templateFile = templateFile; - this.code = ""; - this.parse(); -} - -JSDOC.JsPlate.prototype.parse = function() { - this.template = this.template.replace(/\{#[\s\S]+?#\}/gi, ""); - this.code = "var output=\u001e"+this.template; - - this.code = this.code.replace( - //gi, - function (match, eachName, inName) { - return "\u001e;\rvar $"+eachName+"_keys = keys("+inName+");\rfor(var $"+eachName+"_i = 0; $"+eachName+"_i < $"+eachName+"_keys.length; $"+eachName+"_i++) {\rvar $"+eachName+"_last = ($"+eachName+"_i == $"+eachName+"_keys.length-1);\rvar $"+eachName+"_key = $"+eachName+"_keys[$"+eachName+"_i];\rvar "+eachName+" = "+inName+"[$"+eachName+"_key];\routput+=\u001e"; - } - ); - this.code = this.code.replace(//g, "\u001e;\rif ($1) { output+=\u001e"); - this.code = this.code.replace(//g, "\u001e;}\relse if ($1) { output+=\u001e"); - this.code = this.code.replace(//g, "\u001e;}\relse { output+=\u001e"); - this.code = this.code.replace(/<\/(if|for)>/g, "\u001e;\r};\routput+=\u001e"); - this.code = this.code.replace( - /\{\+\s*([\s\S]+?)\s*\+\}/gi, - function (match, code) { - code = code.replace(/"/g, "\u001e"); // prevent qoute-escaping of inline code - code = code.replace(/(\r?\n)/g, " "); - return "\u001e+ ("+code+") +\u001e"; - } - ); - this.code = this.code.replace( - /\{!\s*([\s\S]+?)\s*!\}/gi, - function (match, code) { - code = code.replace(/"/g, "\u001e"); // prevent qoute-escaping of inline code - code = code.replace(/(\n)/g, " "); - return "\u001e; "+code+";\routput+=\u001e"; - } - ); - this.code = this.code+"\u001e;"; - - this.code = this.code.replace(/(\r?\n)/g, "\\n"); - this.code = this.code.replace(/"/g, "\\\""); - this.code = this.code.replace(/\u001e/g, "\""); -} - -JSDOC.JsPlate.prototype.toCode = function() { - return this.code; -} - -JSDOC.JsPlate.keys = function(obj) { - var keys = []; - if (obj.constructor.toString().indexOf("Array") > -1) { - for (var i = 0; i < obj.length; i++) { - keys.push(i); - } - } - else { - for (var i in obj) { - keys.push(i); - } - } - return keys; -}; - -JSDOC.JsPlate.values = function(obj) { - var values = []; - if (obj.constructor.toString().indexOf("Array") > -1) { - for (var i = 0; i < obj.length; i++) { - values.push(obj[i]); - } - } - else { - for (var i in obj) { - values.push(obj[i]); - } - } - return values; -}; - -JSDOC.JsPlate.prototype.process = function(data, compact) { - var keys = JSDOC.JsPlate.keys; - var values = JSDOC.JsPlate.values; - - try { - eval(this.code); - } - catch (e) { - print(">> There was an error evaluating the compiled code from template: "+this.templateFile); - print(" The error was on line "+e.lineNumber+" "+e.name+": "+e.message); - var lines = this.code.split("\r"); - if (e.lineNumber-2 >= 0) print("line "+(e.lineNumber-1)+": "+lines[e.lineNumber-2]); - print("line "+e.lineNumber+": "+lines[e.lineNumber-1]); - print(""); - } - - if (compact) { // patch by mcbain.asm - // Remove lines that contain only space-characters, usually left by lines in the template - // which originally only contained JSPlate tags or code. This makes it easier to write - // non-tricky templates which still put out nice code (not bloated with extra lines). - // Lines purposely left blank (just a line ending) are left alone. - output = output.replace(/\s+?(\r?)\n/g, "$1\n"); - } - - /*debug*///print(this.code); - return output; -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC/Lang.js b/doc/jsdoc-toolkit/app/lib/JSDOC/Lang.js deleted file mode 100644 index 62919d7d8..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC/Lang.js +++ /dev/null @@ -1,144 +0,0 @@ -/** - @namespace -*/ -JSDOC.Lang = { -} - -JSDOC.Lang.isBuiltin = function(name) { - return (JSDOC.Lang.isBuiltin.coreObjects.indexOf(name) > -1); -} -JSDOC.Lang.isBuiltin.coreObjects = ['_global_', 'Array', 'Boolean', 'Date', 'Error', 'Function', 'Math', 'Number', 'Object', 'RegExp', 'String']; - -JSDOC.Lang.whitespace = function(ch) { - return JSDOC.Lang.whitespace.names[ch]; -} -JSDOC.Lang.whitespace.names = { - " ": "SPACE", - "\f": "FORMFEED", - "\t": "TAB", - "\u0009": "UNICODE_TAB", - "\u000A": "UNICODE_NBR", - "\u0008": "VERTICAL_TAB" -}; - -JSDOC.Lang.newline = function(ch) { - return JSDOC.Lang.newline.names[ch]; -} -JSDOC.Lang.newline.names = { - "\n": "NEWLINE", - "\r": "RETURN", - "\u000A": "UNICODE_LF", - "\u000D": "UNICODE_CR", - "\u2029": "UNICODE_PS", - "\u2028": "UNICODE_LS" -}; - -JSDOC.Lang.keyword = function(word) { - return JSDOC.Lang.keyword.names["="+word]; -} -JSDOC.Lang.keyword.names = { - "=break": "BREAK", - "=case": "CASE", - "=catch": "CATCH", - "=const": "VAR", - "=continue": "CONTINUE", - "=default": "DEFAULT", - "=delete": "DELETE", - "=do": "DO", - "=else": "ELSE", - "=false": "FALSE", - "=finally": "FINALLY", - "=for": "FOR", - "=function": "FUNCTION", - "=if": "IF", - "=in": "IN", - "=instanceof": "INSTANCEOF", - "=new": "NEW", - "=null": "NULL", - "=return": "RETURN", - "=switch": "SWITCH", - "=this": "THIS", - "=throw": "THROW", - "=true": "TRUE", - "=try": "TRY", - "=typeof": "TYPEOF", - "=void": "VOID", - "=while": "WHILE", - "=with": "WITH", - "=var": "VAR" -}; - -JSDOC.Lang.punc = function(ch) { - return JSDOC.Lang.punc.names[ch]; -} -JSDOC.Lang.punc.names = { - ";": "SEMICOLON", - ",": "COMMA", - "?": "HOOK", - ":": "COLON", - "||": "OR", - "&&": "AND", - "|": "BITWISE_OR", - "^": "BITWISE_XOR", - "&": "BITWISE_AND", - "===": "STRICT_EQ", - "==": "EQ", - "=": "ASSIGN", - "!==": "STRICT_NE", - "!=": "NE", - "<<": "LSH", - "<=": "LE", - "<": "LT", - ">>>": "URSH", - ">>": "RSH", - ">=": "GE", - ">": "GT", - "++": "INCREMENT", - "--": "DECREMENT", - "+": "PLUS", - "-": "MINUS", - "*": "MUL", - "/": "DIV", - "%": "MOD", - "!": "NOT", - "~": "BITWISE_NOT", - ".": "DOT", - "[": "LEFT_BRACKET", - "]": "RIGHT_BRACKET", - "{": "LEFT_CURLY", - "}": "RIGHT_CURLY", - "(": "LEFT_PAREN", - ")": "RIGHT_PAREN" -}; - -JSDOC.Lang.matching = function(name) { - return JSDOC.Lang.matching.names[name]; -} -JSDOC.Lang.matching.names = { - "LEFT_PAREN": "RIGHT_PAREN", - "RIGHT_PAREN": "LEFT_PAREN", - "LEFT_CURLY": "RIGHT_CURLY", - "RIGHT_CURLY": "LEFT_CURLY", - "LEFT_BRACE": "RIGHT_BRACE", - "RIGHT_BRACE": "LEFT_BRACE" -} - -JSDOC.Lang.isNumber = function(str) { - return /^(\.[0-9]|[0-9]+\.|[0-9])[0-9]*([eE][+-][0-9]+)?$/i.test(str); -} - -JSDOC.Lang.isHexDec = function(str) { - return /^0x[0-9A-F]+$/i.test(str); -} - -JSDOC.Lang.isWordChar = function(str) { - return /^[a-zA-Z0-9$_.]+$/.test(str); -} - -JSDOC.Lang.isSpace = function(str) { - return (typeof JSDOC.Lang.whitespace(str) != "undefined"); -} - -JSDOC.Lang.isNewline = function(str) { - return (typeof JSDOC.Lang.newline(str) != "undefined"); -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC/Parser.js b/doc/jsdoc-toolkit/app/lib/JSDOC/Parser.js deleted file mode 100644 index f407dd1a1..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC/Parser.js +++ /dev/null @@ -1,145 +0,0 @@ -if (typeof JSDOC == "undefined") JSDOC = {}; - -/** - @namespace - @requires JSDOC.Walker - @requires JSDOC.Symbol - @requires JSDOC.DocComment -*/ -JSDOC.Parser = { - conf: { - ignoreCode: JSDOC.opt.n, - ignoreAnonymous: true, // factory: true - treatUnderscoredAsPrivate: true, // factory: true - explain: false // factory: false - }, - - addSymbol: function(symbol) { - -if (JSDOC.Parser.rename) { - for (var n in JSDOC.Parser.rename) { - if (symbol.alias.indexOf(n) == 0) { - if (symbol.name == symbol.alias) { - symbol.name = symbol.name.replace(n, JSDOC.Parser.rename[n]); - } - symbol.alias = symbol.alias.replace(n, JSDOC.Parser.rename[n]); - } - } -} - -if (JSDOC.opt.S) { - if (typeof JSDOC.Parser.secureModules == "undefined") JSDOC.Parser.secureModules = {}; - if (/^exports\./.test(symbol.alias)) { - symbol.srcFile.match(/(^|[\\\/])([^\\\/]+)\.js/i); - var fileNS = RegExp.$2; - symbol.alias = symbol.alias.replace(/^exports\./, fileNS); - symbol.name = symbol.name.replace(/^exports\./, ""); - symbol.memberOf = fileNS; - - // need to create the namespace associated with this file first - if (!JSDOC.Parser.secureModules[fileNS]) { - JSDOC.Parser.secureModules[fileNS] = 1; - var nsSymbol = new JSDOC.Symbol(fileNS, [], "GLOBAL", new JSDOC.DocComment("")); - nsSymbol.isNamespace = true; - nsSymbol.srcFile = ""; - nsSymbol.isPrivate = false; - nsSymbol.srcFile = symbol.srcFile; - nsSymbol.desc = (JSDOC.Parser.symbols.getSymbol(symbol.srcFile) || {desc: ""}).desc; - JSDOC.Parser.addSymbol(nsSymbol); - - } - } - else { // a method that is not exported? - if (!symbol.isNamespace) return; - } -} - // if a symbol alias is documented more than once the last one with the user docs wins - if (JSDOC.Parser.symbols.hasSymbol(symbol.alias)) { - var oldSymbol = JSDOC.Parser.symbols.getSymbol(symbol.alias); - if (oldSymbol.comment.isUserComment) { - if (symbol.comment.isUserComment) { // old and new are both documented - LOG.warn("The symbol '"+symbol.alias+"' is documented more than once."); - } - else { // old is documented but new isn't - return; - } - } - } - - // we don't document anonymous things - if (JSDOC.Parser.conf.ignoreAnonymous && symbol.name.match(/\$anonymous\b/)) return; - - // uderscored things may be treated as if they were marked private, this cascades - if (JSDOC.Parser.conf.treatUnderscoredAsPrivate && symbol.name.match(/[.#-]_[^.#-]+$/)) { - if (!symbol.comment.getTag("public").length > 0) symbol.isPrivate = true; - } - - // -p flag is required to document private things - if (!JSDOC.opt.p && symbol.isPrivate) return; // issue #161 fixed by mcbain.asm - - // ignored things are not documented, this doesn't cascade - if (symbol.isIgnored) return; - JSDOC.Parser.symbols.addSymbol(symbol); - }, - - addBuiltin: function(name) { - var builtin = new JSDOC.Symbol(name, [], "CONSTRUCTOR", new JSDOC.DocComment("")); - builtin.isNamespace = true; - builtin.srcFile = ""; - builtin.isPrivate = false; - JSDOC.Parser.addSymbol(builtin); - return builtin; - }, - - init: function() { - JSDOC.Parser.symbols = new JSDOC.SymbolSet(); - JSDOC.Parser.walker = new JSDOC.Walker(); - }, - - finish: function() { - JSDOC.Parser.symbols.relate(); - - // make a litle report about what was found - if (JSDOC.Parser.conf.explain) { - var symbols = JSDOC.Parser.symbols.toArray(); - var srcFile = ""; - for (var i = 0, l = symbols.length; i < l; i++) { - var symbol = symbols[i]; - if (srcFile != symbol.srcFile) { - srcFile = symbol.srcFile; - print("\n"+srcFile+"\n-------------------"); - } - print(i+":\n alias => "+symbol.alias + "\n name => "+symbol.name+ "\n isa => "+symbol.isa + "\n memberOf => " + symbol.memberOf + "\n isStatic => " + symbol.isStatic + ", isInner => " + symbol.isInner+ ", isPrivate => " + symbol.isPrivate); - } - print("-------------------\n"); - } - } -} - -JSDOC.Parser.parse = function(/**JSDOC.TokenStream*/ts, /**String*/srcFile) { - JSDOC.Symbol.srcFile = (srcFile || ""); - JSDOC.DocComment.shared = ""; // shared comments don't cross file boundaries - - if (!JSDOC.Parser.walker) JSDOC.Parser.init(); - JSDOC.Parser.walker.walk(ts); // adds to our symbols - - // filter symbols by option - for (var p = JSDOC.Parser.symbols._index.first(); p; p = JSDOC.Parser.symbols._index.next()) { - var symbol = p.value; - - if (!symbol) continue; - - if (symbol.is("FILE") || symbol.is("GLOBAL")) { - continue; - } - else if (!JSDOC.opt.a && !symbol.comment.isUserComment) { - JSDOC.Parser.symbols.deleteSymbol(symbol.alias); - } - - if (/#$/.test(symbol.alias)) { // we don't document prototypes - JSDOC.Parser.symbols.deleteSymbol(symbol.alias); - } - } - - return JSDOC.Parser.symbols.toArray(); -} diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js b/doc/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js deleted file mode 100644 index 9c9119310..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - @namespace Holds functionality related to running plugins. -*/ -JSDOC.PluginManager = { -} - -/** - @param name A unique name that identifies that plugin. - @param handlers A collection of named functions. The names correspond to hooks in the core code. -*/ -JSDOC.PluginManager.registerPlugin = function(/**String*/name, /**Object*/handlers) { - if (!defined(JSDOC.PluginManager.plugins)) - /** The collection of all plugins. Requires a unique name for each. - */ - JSDOC.PluginManager.plugins = {}; - - - JSDOC.PluginManager.plugins[name] = handlers; -} - -/** - @param hook The name of the hook that is being caught. - @param target Any object. This will be passed as the only argument to the handler whose - name matches the hook name. Handlers cannot return a value, so must modify the target - object to have an effect. -*/ -JSDOC.PluginManager.run = function(/**String*/hook, /**Mixed*/target) { - for (var name in JSDOC.PluginManager.plugins) { - if (defined(JSDOC.PluginManager.plugins[name][hook])) { - JSDOC.PluginManager.plugins[name][hook](target); - } - } -} diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC/Symbol.js b/doc/jsdoc-toolkit/app/lib/JSDOC/Symbol.js deleted file mode 100644 index c5b76a860..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC/Symbol.js +++ /dev/null @@ -1,645 +0,0 @@ -if (typeof JSDOC == "undefined") JSDOC = {}; - -/** - Create a new Symbol. - @class Represents a symbol in the source code. - */ -JSDOC.Symbol = function() { - this.init(); - if (arguments.length) this.populate.apply(this, arguments); -} - -JSDOC.Symbol.count = 0; - -JSDOC.Symbol.prototype.init = function() { - this._name = ""; - this._params = []; - this.$args = []; - this.addOn = ""; - this.alias = ""; - this.augments = []; - this.author = ""; - this.classDesc = ""; - this.comment = {}; - this.defaultValue = undefined; - this.deprecated = ""; - this.desc = ""; - this.example = []; - this.exceptions = []; - this.fires = []; - this.id = JSDOC.Symbol.count++; - this.inherits = []; - this.inheritsFrom = []; - this.isa = "OBJECT"; - this.isConstant = false; - this.isEvent = false; - this.isIgnored = false; - this.isInner = false; - this.isNamespace = false; - this.isPrivate = false; - this.isStatic = false; - this.memberOf = ""; - this.methods = []; - this.properties = []; - this.requires = []; - this.returns = []; - this.see = []; - this.since = ""; - this.srcFile = {}; - this.type = ""; - this.version = ""; -} - -JSDOC.Symbol.prototype.serialize = function() { - var keys = []; - for (var p in this) { - keys.push (p); - } - keys = keys.sort(); - - var out = ""; - for (var i in keys) { - if (typeof this[keys[i]] == "function") continue; - out += keys[i]+" => "+Dumper.dump(this[keys[i]])+",\n"; - } - return "\n{\n" + out + "}\n"; -} - -JSDOC.Symbol.prototype.clone = function() { - var clone = new JSDOC.Symbol(); - clone.populate.apply(clone, this.$args); // repopulate using the original arguments - clone.srcFile = this.srcFile; // not the current srcFile, the one when the original was made - return clone; -} - -JSDOC.Symbol.prototype.__defineSetter__("name", - function(n) { n = n.replace(/^_global_[.#-]/, ""); n = n.replace(/\.prototype\.?/g, '#'); this._name = n; } -); -JSDOC.Symbol.prototype.__defineGetter__("name", - function() { return this._name; } -); -JSDOC.Symbol.prototype.__defineSetter__("params", - function(v) { - for (var i = 0, l = v.length; i < l; i++) { - if (v[i].constructor != JSDOC.DocTag) { // may be a generic object parsed from signature, like {type:..., name:...} - this._params[i] = new JSDOC.DocTag("param"+((v[i].type)?" {"+v[i].type+"}":"")+" "+v[i].name); - } - else { - this._params[i] = v[i]; - } - } - } -); -JSDOC.Symbol.prototype.__defineGetter__("params", - function() { return this._params; } -); - -JSDOC.Symbol.prototype.getEvents = function() { - var events = []; - for (var i = 0, l = this.methods.length; i < l; i++) { - if (this.methods[i].isEvent) { - this.methods[i].name = this.methods[i].name.replace("event:", ""); - events.push(this.methods[i]); - } - } - return events; -} - -JSDOC.Symbol.prototype.getMethods = function() { - var nonEvents = []; - for (var i = 0, l = this.methods.length; i < l; i++) { - if (!this.methods[i].isEvent) { - nonEvents.push(this.methods[i]); - } - } - return nonEvents; -} - - -JSDOC.Symbol.prototype.populate = function( - /** String */ name, - /** Object[] */ params, - /** String */ isa, - /** JSDOC.DocComment */ comment -) { - this.$args = arguments; - - this.name = name; - this.alias = this.name; - - this.params = params; - this.isa = (isa == "VIRTUAL")? "OBJECT":isa; - this.comment = comment || new JSDOC.DocComment(""); - this.srcFile = JSDOC.Symbol.srcFile; - - if (this.is("FILE") && !this.alias) this.alias = this.srcFile; - - this.setTags(); - - if (typeof JSDOC.PluginManager != "undefined") { - JSDOC.PluginManager.run("onSymbol", this); - } -} - -JSDOC.Symbol.prototype.setTags = function() { - // @author - var authors = this.comment.getTag("author"); - if (authors.length) { - this.author = authors.map(function($){return $.desc;}).join(", "); - } - - /*t: - plan(34, "testing JSDOC.Symbol"); - - requires("../lib/JSDOC/DocComment.js"); - requires("../frame/String.js"); - requires("../lib/JSDOC/DocTag.js"); - - var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@author Joe Smith*"+"/")); - is(sym.author, "Joe Smith", "@author tag, author is found."); - */ - - // @desc - var descs = this.comment.getTag("desc"); - if (descs.length) { - this.desc = descs.map(function($){return $.desc;}).join("\n"); // multiple descriptions are concatenated into one - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@desc This is a description.*"+"/")); - is(sym.desc, "This is a description.", "@desc tag, description is found."); - */ - - // @overview - if (this.is("FILE")) { - if (!this.alias) this.alias = this.srcFile; - - var overviews = this.comment.getTag("overview"); - if (overviews.length) { - this.desc = [this.desc].concat(overviews.map(function($){return $.desc;})).join("\n"); - } - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@overview This is an overview.*"+"/")); - is(sym.desc, "\nThis is an overview.", "@overview tag, description is found."); - */ - - // @since - var sinces = this.comment.getTag("since"); - if (sinces.length) { - this.since = sinces.map(function($){return $.desc;}).join(", "); - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@since 1.01*"+"/")); - is(sym.since, "1.01", "@since tag, description is found."); - */ - - // @constant - if (this.comment.getTag("constant").length) { - this.isConstant = true; - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@constant*"+"/")); - is(sym.isConstant, true, "@constant tag, isConstant set."); - */ - - // @version - var versions = this.comment.getTag("version"); - if (versions.length) { - this.version = versions.map(function($){return $.desc;}).join(", "); - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@version 2.0x*"+"/")); - is(sym.version, "2.0x", "@version tag, version is found."); - */ - - // @deprecated - var deprecateds = this.comment.getTag("deprecated"); - if (deprecateds.length) { - this.deprecated = deprecateds.map(function($){return $.desc;}).join("\n"); - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@deprecated Use other method.*"+"/")); - is(sym.deprecated, "Use other method.", "@deprecated tag, desc is found."); - */ - - // @example - var examples = this.comment.getTag("example"); - if (examples.length) { - this.example = examples.map( - // trim trailing whitespace - function($) { - $.desc = $.desc.replace(/\s+$/, ""); - return $; - } - ); - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@example This\n is an example. \n*"+"/")); - isnt(typeof sym.example[0], "undefined", "@example tag, creates sym.example array."); - is(sym.example[0], "This\n is an example.", "@example tag, desc is found."); - */ - - // @see - var sees = this.comment.getTag("see"); - if (sees.length) { - var thisSee = this.see; - sees.map(function($){thisSee.push($.desc);}); - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@see The other thing.*"+"/")); - is(sym.see, "The other thing.", "@see tag, desc is found."); - */ - - // @class - var classes = this.comment.getTag("class"); - if (classes.length) { - this.isa = "CONSTRUCTOR"; - this.classDesc = classes[0].desc; // desc can't apply to the constructor as there is none. - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@class This describes the class.*"+"/")); - is(sym.isa, "CONSTRUCTOR", "@class tag, makes symbol a constructor."); - is(sym.classDesc, "This describes the class.", "@class tag, class description is found."); - */ - - // @namespace - var namespaces = this.comment.getTag("namespace"); - if (namespaces.length) { - this.classDesc = namespaces[0].desc; - this.isNamespace = true; - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@namespace This describes the namespace.*"+"/")); - is(sym.classDesc, "This describes the namespace.", "@namespace tag, class description is found."); - */ - - // @param - var params = this.comment.getTag("param"); - if (params.length) { - // user-defined params overwrite those with same name defined by the parser - var thisParams = this.params; - - if (thisParams.length == 0) { // none exist yet, so just bung all these user-defined params straight in - this.params = params; - } - else { // need to overlay these user-defined params on to existing parser-defined params - for (var i = 0, l = params.length; i < l; i++) { - if (thisParams[i]) { - if (params[i].type) thisParams[i].type = params[i].type; - thisParams[i].name = params[i].name; - thisParams[i].desc = params[i].desc; - thisParams[i].isOptional = params[i].isOptional; - thisParams[i].defaultValue = params[i].defaultValue; - } - else thisParams[i] = params[i]; - } - } - } - - /*t: - var sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}], "FUNCTION", new JSDOC.DocComment("/**Description.*"+"/")); - is(sym.params.length, 1, "parser defined param is found."); - - sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {array} pages*"+"/")); - is(sym.params.length, 1, "user defined param is found."); - is(sym.params[0].type, "array", "user defined param type is found."); - is(sym.params[0].name, "pages", "user defined param name is found."); - - sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {string} uid*"+"/")); - is(sym.params.length, 1, "user defined param overwrites parser defined param."); - is(sym.params[0].type, "string", "user defined param type overwrites parser defined param type."); - is(sym.params[0].name, "uid", "user defined param name overwrites parser defined param name."); - - sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}, {type: "number", name: "count"}], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {string} uid*"+"/")); - is(sym.params.length, 2, "user defined params overlay parser defined params."); - is(sym.params[1].type, "number", "user defined param type overlays parser defined param type."); - is(sym.params[1].name, "count", "user defined param name overlays parser defined param name."); - - sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {array} pages The pages description.*"+"/")); - is(sym.params.length, 1, "user defined param with description is found."); - is(sym.params[0].desc, "The pages description.", "user defined param description is found."); - */ - - // @constructor - if (this.comment.getTag("constructor").length) { - this.isa = "CONSTRUCTOR"; - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@constructor*"+"/")); - is(sym.isa, "CONSTRUCTOR", "@constructor tag, makes symbol a constructor."); - */ - - // @static - if (this.comment.getTag("static").length) { - this.isStatic = true; - if (this.isa == "CONSTRUCTOR") { - this.isNamespace = true; - } - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@static\n@constructor*"+"/")); - is(sym.isStatic, true, "@static tag, makes isStatic true."); - is(sym.isNamespace, true, "@static and @constructor tag, makes isNamespace true."); - */ - - // @inner - if (this.comment.getTag("inner").length) { - this.isInner = true; - this.isStatic = false; - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@inner*"+"/")); - is(sym.isStatic, false, "@inner tag, makes isStatic false."); - is(sym.isInner, true, "@inner makes isInner true."); - */ - - // @name - var names = this.comment.getTag("name"); - if (names.length) { - this.name = names[0].desc; - } - - /*t: - // todo - */ - - // @field - if (this.comment.getTag("field").length) { - this.isa = "OBJECT"; - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**@field*"+"/")); - is(sym.isa, "OBJECT", "@field tag, makes symbol an object."); - */ - - // @function - if (this.comment.getTag("function").length) { - this.isa = "FUNCTION"; - if (/event:/.test(this.alias)) this.isEvent = true; - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@function*"+"/")); - is(sym.isa, "FUNCTION", "@function tag, makes symbol a function."); - */ - - // @event - var events = this.comment.getTag("event"); - if (events.length) { - this.isa = "FUNCTION"; - this.isEvent = true; - if (!/event:/.test(this.alias)) - this.alias = this.alias.replace(/^(.*[.#-])([^.#-]+)$/, "$1event:$2"); - } - - /*t: - var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@event*"+"/")); - is(sym.isa, "FUNCTION", "@event tag, makes symbol a function."); - is(sym.isEvent, true, "@event makes isEvent true."); - */ - - // @fires - var fires = this.comment.getTag("fires"); - if (fires.length) { - for (var i = 0; i < fires.length; i++) { - this.fires.push(fires[i].desc); - } - } - - /*t: - // todo - */ - - // @property - var properties = this.comment.getTag("property"); - if (properties.length) { - thisProperties = this.properties; - for (var i = 0; i < properties.length; i++) { - var property = new JSDOC.Symbol(this.alias+"#"+properties[i].name, [], "OBJECT", new JSDOC.DocComment("/**"+properties[i].desc+"\n@name "+properties[i].name+"\n@memberOf "+this.alias+"#*/")); - // TODO: shouldn't the following happen in the addProperty method of Symbol? - property.name = properties[i].name; - property.memberOf = this.alias; - if (properties[i].type) property.type = properties[i].type; - if (properties[i].defaultValue) property.defaultValue = properties[i].defaultValue; - this.addProperty(property); - JSDOC.Parser.addSymbol(property); - } - } - - /*t: - // todo - */ - - // @return - var returns = this.comment.getTag("return"); - if (returns.length) { // there can be many return tags in a single doclet - this.returns = returns; - this.type = returns.map(function($){return $.type}).join(", "); - } - - /*t: - // todo - */ - - // @exception - this.exceptions = this.comment.getTag("throws"); - - /*t: - // todo - */ - - // @requires - var requires = this.comment.getTag("requires"); - if (requires.length) { - this.requires = requires.map(function($){return $.desc}); - } - - /*t: - // todo - */ - - // @type - var types = this.comment.getTag("type"); - if (types.length) { - this.type = types[0].desc; //multiple type tags are ignored - } - - /*t: - // todo - */ - - // @private - if (this.comment.getTag("private").length || this.isInner) { - this.isPrivate = true; - } - - // @ignore - if (this.comment.getTag("ignore").length) { - this.isIgnored = true; - } - - /*t: - // todo - */ - - // @inherits ... as ... - var inherits = this.comment.getTag("inherits"); - if (inherits.length) { - for (var i = 0; i < inherits.length; i++) { - if (/^\s*([a-z$0-9_.#:-]+)(?:\s+as\s+([a-z$0-9_.#:-]+))?/i.test(inherits[i].desc)) { - var inAlias = RegExp.$1; - var inAs = RegExp.$2 || inAlias; - - if (inAlias) inAlias = inAlias.replace(/\.prototype\.?/g, "#"); - - if (inAs) { - inAs = inAs.replace(/\.prototype\.?/g, "#"); - inAs = inAs.replace(/^this\.?/, "#"); - } - - if (inAs.indexOf(inAlias) != 0) { //not a full namepath - var joiner = "."; - if (this.alias.charAt(this.alias.length-1) == "#" || inAs.charAt(0) == "#") { - joiner = ""; - } - inAs = this.alias + joiner + inAs; - } - } - this.inherits.push({alias: inAlias, as: inAs}); - } - } - - /*t: - // todo - */ - - // @augments - this.augments = this.comment.getTag("augments"); - - // @default - var defaults = this.comment.getTag("default"); - if (defaults.length) { - if (this.is("OBJECT")) { - this.defaultValue = defaults[0].desc; - } - } - - /*t: - // todo - */ - - // @memberOf - var memberOfs = this.comment.getTag("memberOf"); - if (memberOfs.length) { - this.memberOf = memberOfs[0].desc; - this.memberOf = this.memberOf.replace(/\.prototype\.?/g, "#"); - } - - /*t: - // todo - */ - - // @public - if (this.comment.getTag("public").length) { - this.isPrivate = false; - } - - /*t: - // todo - */ - - if (JSDOC.PluginManager) { - JSDOC.PluginManager.run("onSetTags", this); - } -} - -JSDOC.Symbol.prototype.is = function(what) { - return this.isa === what; -} - -JSDOC.Symbol.prototype.isBuiltin = function() { - return JSDOC.Lang.isBuiltin(this.alias); -} - -JSDOC.Symbol.prototype.setType = function(/**String*/comment, /**Boolean*/overwrite) { - if (!overwrite && this.type) return; - var typeComment = JSDOC.DocComment.unwrapComment(comment); - this.type = typeComment; -} - -JSDOC.Symbol.prototype.inherit = function(symbol) { - if (!this.hasMember(symbol.name) && !symbol.isInner) { - if (symbol.is("FUNCTION")) - this.methods.push(symbol); - else if (symbol.is("OBJECT")) - this.properties.push(symbol); - } -} - -JSDOC.Symbol.prototype.hasMember = function(name) { - return (this.hasMethod(name) || this.hasProperty(name)); -} - -JSDOC.Symbol.prototype.addMember = function(symbol) { - if (symbol.is("FUNCTION")) { this.addMethod(symbol); } - else if (symbol.is("OBJECT")) { this.addProperty(symbol); } -} - -JSDOC.Symbol.prototype.hasMethod = function(name) { - var thisMethods = this.methods; - for (var i = 0, l = thisMethods.length; i < l; i++) { - if (thisMethods[i].name == name) return true; - if (thisMethods[i].alias == name) return true; - } - return false; -} - -JSDOC.Symbol.prototype.addMethod = function(symbol) { - var methodAlias = symbol.alias; - var thisMethods = this.methods; - for (var i = 0, l = thisMethods.length; i < l; i++) { - if (thisMethods[i].alias == methodAlias) { - thisMethods[i] = symbol; // overwriting previous method - return; - } - } - thisMethods.push(symbol); // new method with this alias -} - -JSDOC.Symbol.prototype.hasProperty = function(name) { - var thisProperties = this.properties; - for (var i = 0, l = thisProperties.length; i < l; i++) { - if (thisProperties[i].name == name) return true; - if (thisProperties[i].alias == name) return true; - } - return false; -} - -JSDOC.Symbol.prototype.addProperty = function(symbol) { - var propertyAlias = symbol.alias; - var thisProperties = this.properties; - for (var i = 0, l = thisProperties.length; i < l; i++) { - if (thisProperties[i].alias == propertyAlias) { - thisProperties[i] = symbol; // overwriting previous property - return; - } - } - - thisProperties.push(symbol); // new property with this alias -} - -JSDOC.Symbol.srcFile = ""; //running reference to the current file being parsed diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js b/doc/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js deleted file mode 100644 index 82657e44e..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js +++ /dev/null @@ -1,241 +0,0 @@ -/** @constructor */ -JSDOC.SymbolSet = function() { - this.init(); -} - -JSDOC.SymbolSet.prototype.init = function() { - this._index = new Hash(); -} - -JSDOC.SymbolSet.prototype.keys = function() { - return this._index.keys(); -} - -JSDOC.SymbolSet.prototype.hasSymbol = function(alias) { - return this._index.hasKey(alias); -} - -JSDOC.SymbolSet.prototype.addSymbol = function(symbol) { - if (this.hasSymbol(symbol.alias)) { - LOG.warn("Overwriting symbol documentation for: "+symbol.alias + "."); - } - this._index.set(symbol.alias, symbol); -} - -JSDOC.SymbolSet.prototype.getSymbol = function(alias) { - if (this.hasSymbol(alias)) return this._index.get(alias); -} - -JSDOC.SymbolSet.prototype.getSymbolByName = function(name) { - for (var p = this._index.first(); p; p = this._index.next()) { - var symbol = p.value; - if (symbol.name == name) return symbol; - } -} - -JSDOC.SymbolSet.prototype.toArray = function() { - return this._index.values(); -} - -JSDOC.SymbolSet.prototype.deleteSymbol = function(alias) { - if (!this.hasSymbol(alias)) return; - this._index.drop(alias); -} - -JSDOC.SymbolSet.prototype.renameSymbol = function(oldName, newName) { - // todo: should check if oldname or newname already exist - this._index.replace(oldName, newName); - this._index.get(newName).alias = newName; - return newName; -} - -JSDOC.SymbolSet.prototype.relate = function() { - this.resolveBorrows(); - this.resolveMemberOf(); - this.resolveAugments(); -} - -JSDOC.SymbolSet.prototype.resolveBorrows = function() { - for (var p = this._index.first(); p; p = this._index.next()) { - var symbol = p.value; - if (symbol.is("FILE") || symbol.is("GLOBAL")) continue; - - var borrows = symbol.inherits; - for (var i = 0; i < borrows.length; i++) { - -if (/#$/.test(borrows[i].alias)) { - LOG.warn("Attempted to borrow entire instance of "+borrows[i].alias+" but that feature is not yet implemented."); - return; -} - var borrowed = this.getSymbol(borrows[i].alias); - - if (!borrowed) { - LOG.warn("Can't borrow undocumented "+borrows[i].alias+"."); - continue; - } - - if (borrows[i].as == borrowed.alias) { - var assumedName = borrowed.name.split(/([#.-])/).pop(); - borrows[i].as = symbol.name+RegExp.$1+assumedName; - LOG.inform("Assuming borrowed as name is "+borrows[i].as+" but that feature is experimental."); - } - - var borrowAsName = borrows[i].as; - var borrowAsAlias = borrowAsName; - if (!borrowAsName) { - LOG.warn("Malformed @borrow, 'as' is required."); - continue; - } - - if (borrowAsName.length > symbol.alias.length && borrowAsName.indexOf(symbol.alias) == 0) { - borrowAsName = borrowAsName.replace(borrowed.alias, "") - } - else { - var joiner = ""; - if (borrowAsName.charAt(0) != "#") joiner = "."; - borrowAsAlias = borrowed.alias + joiner + borrowAsName; - } - - borrowAsName = borrowAsName.replace(/^[#.]/, ""); - - if (this.hasSymbol(borrowAsAlias)) continue; - - var clone = borrowed.clone(); - clone.name = borrowAsName; - clone.alias = borrowAsAlias; - this.addSymbol(clone); - } - } -} - -JSDOC.SymbolSet.prototype.resolveMemberOf = function() { - for (var p = this._index.first(); p; p = this._index.next()) { - var symbol = p.value; - if (symbol.is("FILE") || symbol.is("GLOBAL")) continue; - - // the memberOf value was provided in the @memberOf tag - else if (symbol.memberOf) { - - // like foo.bar is a memberOf foo - if (symbol.alias.indexOf(symbol.memberOf) == 0) { - var memberMatch = new RegExp("^("+symbol.memberOf+")[.#-]?(.+)$"); - var aliasParts = symbol.alias.match(memberMatch); - - if (aliasParts) { - symbol.memberOf = aliasParts[1]; - symbol.name = aliasParts[2]; - } - - var nameParts = symbol.name.match(memberMatch); - - if (nameParts) { - symbol.name = nameParts[2]; - } - } - // like bar is a memberOf foo - else { - var joiner = symbol.memberOf.charAt(symbol.memberOf.length-1); - if (!/[.#-]/.test(joiner)) symbol.memberOf += "."; - this.renameSymbol(symbol.alias, symbol.memberOf + symbol.name); - } - } - // the memberOf must be calculated - else { - var parts = symbol.alias.match(/^(.*[.#-])([^.#-]+)$/); - if (parts) { - symbol.memberOf = parts[1]; - symbol.name = parts[2]; - } - } - - // set isStatic, isInner - if (symbol.memberOf) { - switch (symbol.memberOf.charAt(symbol.memberOf.length-1)) { - case '#' : - symbol.isStatic = false; - symbol.isInner = false; - break; - case '.' : - symbol.isStatic = true; - symbol.isInner = false; - break; - case '-' : - symbol.isStatic = false; - symbol.isInner = true; - break; - default: // memberOf ends in none of the above - symbol.isStatic = true; - break; - } - } - - // unowned methods and fields belong to the global object - if (!symbol.is("CONSTRUCTOR") && !symbol.isNamespace && symbol.memberOf == "") { - symbol.memberOf = "_global_"; - } - - // clean up - if (symbol.memberOf.match(/[.#-]$/)) { - symbol.memberOf = symbol.memberOf.substr(0, symbol.memberOf.length-1); - } - // add to parent's methods or properties list - if (symbol.memberOf) { - - var container = this.getSymbol(symbol.memberOf); - if (!container) { - if (JSDOC.Lang.isBuiltin(symbol.memberOf)) container = JSDOC.Parser.addBuiltin(symbol.memberOf); - else { - LOG.warn("Trying to document "+symbol.name +" as a member of undocumented symbol "+symbol.memberOf+"."); - } - } - - if (container) container.addMember(symbol); - } - } -} - -JSDOC.SymbolSet.prototype.resolveAugments = function() { - for (var p = this._index.first(); p; p = this._index.next()) { - var symbol = p.value; - - if (symbol.alias == "_global_" || symbol.is("FILE")) continue; - JSDOC.SymbolSet.prototype.walk.apply(this, [symbol]); - } -} - -JSDOC.SymbolSet.prototype.walk = function(symbol) { - var augments = symbol.augments; - for(var i = 0; i < augments.length; i++) { - var contributer = this.getSymbol(augments[i]); - if (!contributer && JSDOC.Lang.isBuiltin(''+augments[i])) { - contributer = new JSDOC.Symbol("_global_."+augments[i], [], augments[i], new JSDOC.DocComment("Built in.")); - contributer.isNamespace = true; - contributer.srcFile = ""; - contributer.isPrivate = false; - JSDOC.Parser.addSymbol(contributer); - } - - if (contributer) { - if (contributer.augments.length) { - JSDOC.SymbolSet.prototype.walk.apply(this, [contributer]); - } - - symbol.inheritsFrom.push(contributer.alias); - //if (!isUnique(symbol.inheritsFrom)) { - // LOG.warn("Can't resolve augments: Circular reference: "+symbol.alias+" inherits from "+contributer.alias+" more than once."); - //} - //else { - var cmethods = contributer.methods; - var cproperties = contributer.properties; - - for (var ci = 0, cl = cmethods.length; ci < cl; ci++) { - if (!cmethods[ci].isStatic) symbol.inherit(cmethods[ci]); - } - for (var ci = 0, cl = cproperties.length; ci < cl; ci++) { - if (!cproperties[ci].isStatic) symbol.inherit(cproperties[ci]); - } - //} - } - else LOG.warn("Can't augment contributer: "+augments[i]+", not found."); - } -} diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC/TextStream.js b/doc/jsdoc-toolkit/app/lib/JSDOC/TextStream.js deleted file mode 100644 index ccc48a87d..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC/TextStream.js +++ /dev/null @@ -1,41 +0,0 @@ - -/** - @constructor -*/ -JSDOC.TextStream = function(text) { - if (typeof(text) == "undefined") text = ""; - text = ""+text; - this.text = text; - this.cursor = 0; -} - -JSDOC.TextStream.prototype.look = function(n) { - if (typeof n == "undefined") n = 0; - - if (this.cursor+n < 0 || this.cursor+n >= this.text.length) { - var result = new String(""); - result.eof = true; - return result; - } - return this.text.charAt(this.cursor+n); -} - -JSDOC.TextStream.prototype.next = function(n) { - if (typeof n == "undefined") n = 1; - if (n < 1) return null; - - var pulled = ""; - for (var i = 0; i < n; i++) { - if (this.cursor+i < this.text.length) { - pulled += this.text.charAt(this.cursor+i); - } - else { - var result = new String(""); - result.eof = true; - return result; - } - } - - this.cursor += n; - return pulled; -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC/Token.js b/doc/jsdoc-toolkit/app/lib/JSDOC/Token.js deleted file mode 100644 index fb7f9d949..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC/Token.js +++ /dev/null @@ -1,18 +0,0 @@ -if (typeof JSDOC == "undefined") JSDOC = {}; - -/** - @constructor -*/ -JSDOC.Token = function(data, type, name) { - this.data = data; - this.type = type; - this.name = name; -} - -JSDOC.Token.prototype.toString = function() { - return "<"+this.type+" name=\""+this.name+"\">"+this.data+""; -} - -JSDOC.Token.prototype.is = function(what) { - return this.name === what || this.type === what; -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js b/doc/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js deleted file mode 100644 index 9f658fb9f..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js +++ /dev/null @@ -1,332 +0,0 @@ -if (typeof JSDOC == "undefined") JSDOC = {}; - -/** - @class Search a {@link JSDOC.TextStream} for language tokens. -*/ -JSDOC.TokenReader = function() { - this.keepDocs = true; - this.keepWhite = false; - this.keepComments = false; -} - -/** - @type {JSDOC.Token[]} - */ -JSDOC.TokenReader.prototype.tokenize = function(/**JSDOC.TextStream*/stream) { - var tokens = []; - /**@ignore*/ tokens.last = function() { return tokens[tokens.length-1]; } - /**@ignore*/ tokens.lastSym = function() { - for (var i = tokens.length-1; i >= 0; i--) { - if (!(tokens[i].is("WHIT") || tokens[i].is("COMM"))) return tokens[i]; - } - } - - while (!stream.look().eof) { - if (this.read_mlcomment(stream, tokens)) continue; - if (this.read_slcomment(stream, tokens)) continue; - if (this.read_dbquote(stream, tokens)) continue; - if (this.read_snquote(stream, tokens)) continue; - if (this.read_regx(stream, tokens)) continue; - if (this.read_numb(stream, tokens)) continue; - if (this.read_punc(stream, tokens)) continue; - if (this.read_newline(stream, tokens)) continue; - if (this.read_space(stream, tokens)) continue; - if (this.read_word(stream, tokens)) continue; - - // if execution reaches here then an error has happened - tokens.push(new JSDOC.Token(stream.next(), "TOKN", "UNKNOWN_TOKEN")); - } - return tokens; -} - -/** - @returns {Boolean} Was the token found? - */ -JSDOC.TokenReader.prototype.read_word = function(/**JSDOC.TokenStream*/stream, tokens) { - var found = ""; - while (!stream.look().eof && JSDOC.Lang.isWordChar(stream.look())) { - found += stream.next(); - } - - if (found === "") { - return false; - } - else { - var name; - if ((name = JSDOC.Lang.keyword(found))) tokens.push(new JSDOC.Token(found, "KEYW", name)); - else tokens.push(new JSDOC.Token(found, "NAME", "NAME")); - return true; - } -} - -/** - @returns {Boolean} Was the token found? - */ -JSDOC.TokenReader.prototype.read_punc = function(/**JSDOC.TokenStream*/stream, tokens) { - var found = ""; - var name; - while (!stream.look().eof && JSDOC.Lang.punc(found+stream.look())) { - found += stream.next(); - } - - if (found === "") { - return false; - } - else { - tokens.push(new JSDOC.Token(found, "PUNC", JSDOC.Lang.punc(found))); - return true; - } -} - -/** - @returns {Boolean} Was the token found? - */ -JSDOC.TokenReader.prototype.read_space = function(/**JSDOC.TokenStream*/stream, tokens) { - var found = ""; - - while (!stream.look().eof && JSDOC.Lang.isSpace(stream.look())) { - found += stream.next(); - } - - if (found === "") { - return false; - } - else { - if (this.collapseWhite) found = " "; - if (this.keepWhite) tokens.push(new JSDOC.Token(found, "WHIT", "SPACE")); - return true; - } -} - -/** - @returns {Boolean} Was the token found? - */ -JSDOC.TokenReader.prototype.read_newline = function(/**JSDOC.TokenStream*/stream, tokens) { - var found = ""; - - while (!stream.look().eof && JSDOC.Lang.isNewline(stream.look())) { - found += stream.next(); - } - - if (found === "") { - return false; - } - else { - if (this.collapseWhite) found = "\n"; - if (this.keepWhite) tokens.push(new JSDOC.Token(found, "WHIT", "NEWLINE")); - return true; - } -} - -/** - @returns {Boolean} Was the token found? - */ -JSDOC.TokenReader.prototype.read_mlcomment = function(/**JSDOC.TokenStream*/stream, tokens) { - if (stream.look() == "/" && stream.look(1) == "*") { - var found = stream.next(2); - - while (!stream.look().eof && !(stream.look(-1) == "/" && stream.look(-2) == "*")) { - found += stream.next(); - } - - // to start doclet we allow /** or /*** but not /**/ or /**** - if (/^\/\*\*([^\/]|\*[^*])/.test(found) && this.keepDocs) tokens.push(new JSDOC.Token(found, "COMM", "JSDOC")); - else if (this.keepComments) tokens.push(new JSDOC.Token(found, "COMM", "MULTI_LINE_COMM")); - return true; - } - return false; -} - -/** - @returns {Boolean} Was the token found? - */ -JSDOC.TokenReader.prototype.read_slcomment = function(/**JSDOC.TokenStream*/stream, tokens) { - var found; - if ( - (stream.look() == "/" && stream.look(1) == "/" && (found=stream.next(2))) - || - (stream.look() == "<" && stream.look(1) == "!" && stream.look(2) == "-" && stream.look(3) == "-" && (found=stream.next(4))) - ) { - - while (!stream.look().eof && !JSDOC.Lang.isNewline(stream.look())) { - found += stream.next(); - } - - if (this.keepComments) { - tokens.push(new JSDOC.Token(found, "COMM", "SINGLE_LINE_COMM")); - } - return true; - } - return false; -} - -/** - @returns {Boolean} Was the token found? - */ -JSDOC.TokenReader.prototype.read_dbquote = function(/**JSDOC.TokenStream*/stream, tokens) { - if (stream.look() == "\"") { - // find terminator - var string = stream.next(); - - while (!stream.look().eof) { - if (stream.look() == "\\") { - if (JSDOC.Lang.isNewline(stream.look(1))) { - do { - stream.next(); - } while (!stream.look().eof && JSDOC.Lang.isNewline(stream.look())); - string += "\\\n"; - } - else { - string += stream.next(2); - } - } - else if (stream.look() == "\"") { - string += stream.next(); - tokens.push(new JSDOC.Token(string, "STRN", "DOUBLE_QUOTE")); - return true; - } - else { - string += stream.next(); - } - } - } - return false; // error! unterminated string -} - -/** - @returns {Boolean} Was the token found? - */ -JSDOC.TokenReader.prototype.read_snquote = function(/**JSDOC.TokenStream*/stream, tokens) { - if (stream.look() == "'") { - // find terminator - var string = stream.next(); - - while (!stream.look().eof) { - if (stream.look() == "\\") { // escape sequence - string += stream.next(2); - } - else if (stream.look() == "'") { - string += stream.next(); - tokens.push(new JSDOC.Token(string, "STRN", "SINGLE_QUOTE")); - return true; - } - else { - string += stream.next(); - } - } - } - return false; // error! unterminated string -} - -/** - @returns {Boolean} Was the token found? - */ -JSDOC.TokenReader.prototype.read_numb = function(/**JSDOC.TokenStream*/stream, tokens) { - if (stream.look() === "0" && stream.look(1) == "x") { - return this.read_hex(stream, tokens); - } - - var found = ""; - - while (!stream.look().eof && JSDOC.Lang.isNumber(found+stream.look())){ - found += stream.next(); - } - - if (found === "") { - return false; - } - else { - if (/^0[0-7]/.test(found)) tokens.push(new JSDOC.Token(found, "NUMB", "OCTAL")); - else tokens.push(new JSDOC.Token(found, "NUMB", "DECIMAL")); - return true; - } -} -/*t: - requires("../lib/JSDOC/TextStream.js"); - requires("../lib/JSDOC/Token.js"); - requires("../lib/JSDOC/Lang.js"); - - plan(3, "testing JSDOC.TokenReader.prototype.read_numb"); - - //// setup - var src = "function foo(num){while (num+8.0 >= 0x20 && num < 0777){}}"; - var tr = new JSDOC.TokenReader(); - var tokens = tr.tokenize(new JSDOC.TextStream(src)); - - var hexToken, octToken, decToken; - for (var i = 0; i < tokens.length; i++) { - if (tokens[i].name == "HEX_DEC") hexToken = tokens[i]; - if (tokens[i].name == "OCTAL") octToken = tokens[i]; - if (tokens[i].name == "DECIMAL") decToken = tokens[i]; - } - //// - - is(decToken.data, "8.0", "decimal number is found in source."); - is(hexToken.data, "0x20", "hexdec number is found in source (issue #99)."); - is(octToken.data, "0777", "octal number is found in source."); -*/ - -/** - @returns {Boolean} Was the token found? - */ -JSDOC.TokenReader.prototype.read_hex = function(/**JSDOC.TokenStream*/stream, tokens) { - var found = stream.next(2); - - while (!stream.look().eof) { - if (JSDOC.Lang.isHexDec(found) && !JSDOC.Lang.isHexDec(found+stream.look())) { // done - tokens.push(new JSDOC.Token(found, "NUMB", "HEX_DEC")); - return true; - } - else { - found += stream.next(); - } - } - return false; -} - -/** - @returns {Boolean} Was the token found? - */ -JSDOC.TokenReader.prototype.read_regx = function(/**JSDOC.TokenStream*/stream, tokens) { - var last; - if ( - stream.look() == "/" - && - ( - - ( - !(last = tokens.lastSym()) // there is no last, the regex is the first symbol - || - ( - !last.is("NUMB") - && !last.is("NAME") - && !last.is("RIGHT_PAREN") - && !last.is("RIGHT_BRACKET") - ) - ) - ) - ) { - var regex = stream.next(); - - while (!stream.look().eof) { - if (stream.look() == "\\") { // escape sequence - regex += stream.next(2); - } - else if (stream.look() == "/") { - regex += stream.next(); - - while (/[gmi]/.test(stream.look())) { - regex += stream.next(); - } - - tokens.push(new JSDOC.Token(regex, "REGX", "REGX")); - return true; - } - else { - regex += stream.next(); - } - } - // error: unterminated regex - } - return false; -} diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js b/doc/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js deleted file mode 100644 index 1eeb44cbb..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js +++ /dev/null @@ -1,133 +0,0 @@ -if (typeof JSDOC == "undefined") JSDOC = {}; - -/** - @constructor -*/ -JSDOC.TokenStream = function(tokens) { - this.tokens = (tokens || []); - this.rewind(); -} - -/** - @constructor - @private -*/ -function VoidToken(/**String*/type) { - this.toString = function() {return ""}; - this.is = function(){return false;} -} - -JSDOC.TokenStream.prototype.rewind = function() { - this.cursor = -1; -} - -/** - @type JSDOC.Token -*/ -JSDOC.TokenStream.prototype.look = function(/**Number*/n, /**Boolean*/considerWhitespace) { - if (typeof n == "undefined") n = 0; - - if (considerWhitespace == true) { - if (this.cursor+n < 0 || this.cursor+n > this.tokens.length) return {}; - return this.tokens[this.cursor+n]; - } - else { - var count = 0; - var i = this.cursor; - - while (true) { - if (i < 0) return new JSDOC.Token("", "VOID", "START_OF_STREAM"); - else if (i > this.tokens.length) return new JSDOC.Token("", "VOID", "END_OF_STREAM"); - - if (i != this.cursor && (this.tokens[i] === undefined || this.tokens[i].is("WHIT"))) { - if (n < 0) i--; else i++; - continue; - } - - if (count == Math.abs(n)) { - return this.tokens[i]; - } - count++; - (n < 0)? i-- : i++; - } - - return new JSDOC.Token("", "VOID", "STREAM_ERROR"); // because null isn't an object and caller always expects an object - } -} - -/** - @type JSDOC.Token|JSDOC.Token[] -*/ -JSDOC.TokenStream.prototype.next = function(/**Number*/howMany) { - if (typeof howMany == "undefined") howMany = 1; - if (howMany < 1) return null; - var got = []; - - for (var i = 1; i <= howMany; i++) { - if (this.cursor+i >= this.tokens.length) { - return null; - } - got.push(this.tokens[this.cursor+i]); - } - this.cursor += howMany; - - if (howMany == 1) { - return got[0]; - } - else return got; -} - -/** - @type JSDOC.Token[] -*/ -JSDOC.TokenStream.prototype.balance = function(/**String*/start, /**String*/stop) { - if (!stop) stop = JSDOC.Lang.matching(start); - - var depth = 0; - var got = []; - var started = false; - - while ((token = this.look())) { - if (token.is(start)) { - depth++; - started = true; - } - - if (started) { - got.push(token); - } - - if (token.is(stop)) { - depth--; - if (depth == 0) return got; - } - if (!this.next()) break; - } -} - -JSDOC.TokenStream.prototype.getMatchingToken = function(/**String*/start, /**String*/stop) { - var depth = 0; - var cursor = this.cursor; - - if (!start) { - start = JSDOC.Lang.matching(stop); - depth = 1; - } - if (!stop) stop = JSDOC.Lang.matching(start); - - while ((token = this.tokens[cursor])) { - if (token.is(start)) { - depth++; - } - - if (token.is(stop) && cursor) { - depth--; - if (depth == 0) return this.tokens[cursor]; - } - cursor++; - } -} - -JSDOC.TokenStream.prototype.insertAhead = function(/**JSDOC.Token*/token) { - this.tokens.splice(this.cursor+1, 0, token); -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC/Util.js b/doc/jsdoc-toolkit/app/lib/JSDOC/Util.js deleted file mode 100644 index 6d7edb368..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC/Util.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @namespace - * @deprecated Use {@link FilePath} instead. - */ -JSDOC.Util = { -} - -/** - * @deprecated Use {@link FilePath.fileName} instead. - */ -JSDOC.Util.fileName = function(path) { - LOG.warn("JSDOC.Util.fileName is deprecated. Use FilePath.fileName instead."); - var nameStart = Math.max(path.lastIndexOf("/")+1, path.lastIndexOf("\\")+1, 0); - return path.substring(nameStart); -} - -/** - * @deprecated Use {@link FilePath.fileExtension} instead. - */ -JSDOC.Util.fileExtension = function(filename) { - LOG.warn("JSDOC.Util.fileExtension is deprecated. Use FilePath.fileExtension instead."); - return filename.split(".").pop().toLowerCase(); -}; - -/** - * @deprecated Use {@link FilePath.dir} instead. - */ -JSDOC.Util.dir = function(path) { - LOG.warn("JSDOC.Util.dir is deprecated. Use FilePath.dir instead."); - var nameStart = Math.max(path.lastIndexOf("/")+1, path.lastIndexOf("\\")+1, 0); - return path.substring(0, nameStart-1); -} diff --git a/doc/jsdoc-toolkit/app/lib/JSDOC/Walker.js b/doc/jsdoc-toolkit/app/lib/JSDOC/Walker.js deleted file mode 100644 index befec4d35..000000000 --- a/doc/jsdoc-toolkit/app/lib/JSDOC/Walker.js +++ /dev/null @@ -1,474 +0,0 @@ -if (typeof JSDOC == "undefined") JSDOC = {}; - -/** @constructor */ -JSDOC.Walker = function(/**JSDOC.TokenStream*/ts) { - this.init(); - if (typeof ts != "undefined") { - this.walk(ts); - } -} - -JSDOC.Walker.prototype.init = function() { - this.ts = null; - - var globalSymbol = new JSDOC.Symbol("_global_", [], "GLOBAL", new JSDOC.DocComment("")); - globalSymbol.isNamespace = true; - globalSymbol.srcFile = ""; - globalSymbol.isPrivate = false; - JSDOC.Parser.addSymbol(globalSymbol); - this.lastDoc = null; - this.token = null; - - /** - The chain of symbols under which we are currently nested. - @type Array - */ - this.namescope = [globalSymbol]; - this.namescope.last = function(n){ if (!n) n = 0; return this[this.length-(1+n)] || "" }; -} - -JSDOC.Walker.prototype.walk = function(/**JSDOC.TokenStream*/ts) { - this.ts = ts; - while (this.token = this.ts.look()) { - if (this.token.popNamescope) { - - var symbol = this.namescope.pop(); - if (symbol.is("FUNCTION")) { - if (this.ts.look(1).is("LEFT_PAREN") && symbol.comment.getTag("function").length == 0) { - symbol.isa = "OBJECT"; - } - } - } - this.step(); - if (!this.ts.next()) break; - } -} - -JSDOC.Walker.prototype.step = function() { - if (this.token.is("JSDOC")) { // it's a doc comment - - var doc = new JSDOC.DocComment(this.token.data); - - - if (doc.getTag("exports").length > 0) { - var exports = doc.getTag("exports")[0]; - - exports.desc.match(/(\S+) as (\S+)/i); - var n1 = RegExp.$1; - var n2 = RegExp.$2; - - if (!n1 && n2) throw "@exports tag requires a value like: 'name as ns.name'"; - - JSDOC.Parser.rename = (JSDOC.Parser.rename || {}); - JSDOC.Parser.rename[n1] = n2 - } - - if (doc.getTag("lends").length > 0) { - var lends = doc.getTag("lends")[0]; - - var name = lends.desc - if (!name) throw "@lends tag requires a value."; - - var symbol = new JSDOC.Symbol(name, [], "OBJECT", doc); - - this.namescope.push(symbol); - - var matching = this.ts.getMatchingToken("LEFT_CURLY"); - if (matching) matching.popNamescope = name; - else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); - - this.lastDoc = null; - return true; - } - else if (doc.getTag("name").length > 0 && doc.getTag("overview").length == 0) { // it's a virtual symbol - var virtualName = doc.getTag("name")[0].desc; - if (!virtualName) throw "@name tag requires a value."; - - var symbol = new JSDOC.Symbol(virtualName, [], "VIRTUAL", doc); - - JSDOC.Parser.addSymbol(symbol); - - this.lastDoc = null; - return true; - } - else if (doc.meta) { // it's a meta doclet - if (doc.meta == "@+") JSDOC.DocComment.shared = doc.src; - else if (doc.meta == "@-") JSDOC.DocComment.shared = ""; - else if (doc.meta == "nocode+") JSDOC.Parser.conf.ignoreCode = true; - else if (doc.meta == "nocode-") JSDOC.Parser.conf.ignoreCode = JSDOC.opt.n; - else throw "Unrecognized meta comment: "+doc.meta; - - this.lastDoc = null; - return true; - } - else if (doc.getTag("overview").length > 0) { // it's a file overview - symbol = new JSDOC.Symbol("", [], "FILE", doc); - - JSDOC.Parser.addSymbol(symbol); - - this.lastDoc = null; - return true; - } - else { - this.lastDoc = doc; - return false; - } - } - else if (!JSDOC.Parser.conf.ignoreCode) { // it's code - if (this.token.is("NAME")) { // it's the name of something - var symbol; - var name = this.token.data; - var doc = null; if (this.lastDoc) doc = this.lastDoc; - var params = []; - - // it's inside an anonymous object - if (this.ts.look(1).is("COLON") && this.ts.look(-1).is("LEFT_CURLY") && !(this.ts.look(-2).is("JSDOC") || this.namescope.last().comment.getTag("lends").length || this.ts.look(-2).is("ASSIGN") || this.ts.look(-2).is("COLON"))) { - name = "$anonymous"; - name = this.namescope.last().alias+"-"+name - - params = []; - - symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); - - JSDOC.Parser.addSymbol(symbol); - - this.namescope.push(symbol); - - var matching = this.ts.getMatchingToken(null, "RIGHT_CURLY"); - if (matching) matching.popNamescope = name; - else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); - } - // function foo() {} - else if (this.ts.look(-1).is("FUNCTION") && this.ts.look(1).is("LEFT_PAREN")) { - var isInner; - - if (this.lastDoc) doc = this.lastDoc; - name = this.namescope.last().alias+"-"+name; - if (!this.namescope.last().is("GLOBAL")) isInner = true; - - params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); - - symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc); - if (isInner) symbol.isInner = true; - - if (this.ts.look(1).is("JSDOC")) { - var inlineReturn = ""+this.ts.look(1).data; - inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, ""); - symbol.type = inlineReturn; - } - - JSDOC.Parser.addSymbol(symbol); - - this.namescope.push(symbol); - - var matching = this.ts.getMatchingToken("LEFT_CURLY"); - if (matching) matching.popNamescope = name; - else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); - } - // foo = function() {} - else if (this.ts.look(1).is("ASSIGN") && this.ts.look(2).is("FUNCTION")) { - var isInner; - if (this.ts.look(-1).is("VAR") || this.isInner) { - name = this.namescope.last().alias+"-"+name - if (!this.namescope.last().is("GLOBAL")) isInner = true; - } - else if (name.indexOf("this.") == 0) { - name = this.resolveThis(name); - } - - if (this.lastDoc) doc = this.lastDoc; - params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); - - symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc); - if (isInner) symbol.isInner = true; - - if (this.ts.look(1).is("JSDOC")) { - var inlineReturn = ""+this.ts.look(1).data; - inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, ""); - symbol.type = inlineReturn; - } - - JSDOC.Parser.addSymbol(symbol); - - this.namescope.push(symbol); - - var matching = this.ts.getMatchingToken("LEFT_CURLY"); - if (matching) matching.popNamescope = name; - else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); - } - // foo = new function() {} or foo = (function() {} - else if (this.ts.look(1).is("ASSIGN") && (this.ts.look(2).is("NEW") || this.ts.look(2).is("LEFT_PAREN")) && this.ts.look(3).is("FUNCTION")) { - var isInner; - if (this.ts.look(-1).is("VAR") || this.isInner) { - name = this.namescope.last().alias+"-"+name - if (!this.namescope.last().is("GLOBAL")) isInner = true; - } - else if (name.indexOf("this.") == 0) { - name = this.resolveThis(name); - } - - this.ts.next(3); // advance past the "new" or "(" - - if (this.lastDoc) doc = this.lastDoc; - params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); - - symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); - if (isInner) symbol.isInner = true; - - if (this.ts.look(1).is("JSDOC")) { - var inlineReturn = ""+this.ts.look(1).data; - inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, ""); - symbol.type = inlineReturn; - } - - JSDOC.Parser.addSymbol(symbol); - - symbol.scopeType = "INSTANCE"; - this.namescope.push(symbol); - - var matching = this.ts.getMatchingToken("LEFT_CURLY"); - if (matching) matching.popNamescope = name; - else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); - } - // foo: function() {} - else if (this.ts.look(1).is("COLON") && this.ts.look(2).is("FUNCTION")) { - name = (this.namescope.last().alias+"."+name).replace("#.", "#"); - - if (this.lastDoc) doc = this.lastDoc; - params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); - - if (doc && doc.getTag("constructs").length) { - name = name.replace(/\.prototype(\.|$)/, "#"); - - if (name.indexOf("#") > -1) name = name.match(/(^[^#]+)/)[0]; - else name = this.namescope.last().alias; - - symbol = new JSDOC.Symbol(name, params, "CONSTRUCTOR", doc); - } - else { - symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc); - } - - if (this.ts.look(1).is("JSDOC")) { - var inlineReturn = ""+this.ts.look(1).data; - inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, ""); - symbol.type = inlineReturn; - } - - JSDOC.Parser.addSymbol(symbol); - - this.namescope.push(symbol); - - var matching = this.ts.getMatchingToken("LEFT_CURLY"); - if (matching) matching.popNamescope = name; - else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); - } - // foo = {} - else if (this.ts.look(1).is("ASSIGN") && this.ts.look(2).is("LEFT_CURLY")) { - var isInner; - if (this.ts.look(-1).is("VAR") || this.isInner) { - name = this.namescope.last().alias+"-"+name - if (!this.namescope.last().is("GLOBAL")) isInner = true; - } - else if (name.indexOf("this.") == 0) { - name = this.resolveThis(name); - } - - if (this.lastDoc) doc = this.lastDoc; - - symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); - if (isInner) symbol.isInner = true; - - - if (doc) JSDOC.Parser.addSymbol(symbol); - - this.namescope.push(symbol); - - var matching = this.ts.getMatchingToken("LEFT_CURLY"); - if (matching) matching.popNamescope = name; - else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); - } - // var foo; - else if (this.ts.look(1).is("SEMICOLON")) { - var isInner; - - if (this.ts.look(-1).is("VAR") || this.isInner) { - name = this.namescope.last().alias+"-"+name - if (!this.namescope.last().is("GLOBAL")) isInner = true; - - if (this.lastDoc) doc = this.lastDoc; - - symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); - if (isInner) symbol.isInner = true; - - - if (doc) JSDOC.Parser.addSymbol(symbol); - } - } - // foo = x - else if (this.ts.look(1).is("ASSIGN")) { - var isInner; - if (this.ts.look(-1).is("VAR") || this.isInner) { - name = this.namescope.last().alias+"-"+name - if (!this.namescope.last().is("GLOBAL")) isInner = true; - } - else if (name.indexOf("this.") == 0) { - name = this.resolveThis(name); - } - - if (this.lastDoc) doc = this.lastDoc; - - symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); - if (isInner) symbol.isInner = true; - - - if (doc) JSDOC.Parser.addSymbol(symbol); - } - // foo: {} - else if (this.ts.look(1).is("COLON") && this.ts.look(2).is("LEFT_CURLY")) { - name = (this.namescope.last().alias+"."+name).replace("#.", "#"); - - if (this.lastDoc) doc = this.lastDoc; - - symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); - - - if (doc) JSDOC.Parser.addSymbol(symbol); - - this.namescope.push(symbol); - - var matching = this.ts.getMatchingToken("LEFT_CURLY"); - if (matching) matching.popNamescope = name; - else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); - } - // foo: x - else if (this.ts.look(1).is("COLON")) { - name = (this.namescope.last().alias+"."+name).replace("#.", "#");; - - if (this.lastDoc) doc = this.lastDoc; - - symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); - - - if (doc) JSDOC.Parser.addSymbol(symbol); - } - // foo(...) - else if (this.ts.look(1).is("LEFT_PAREN")) { - if (typeof JSDOC.PluginManager != "undefined") { - var functionCall = {name: name}; - - var cursor = this.ts.cursor; - params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); - this.ts.cursor = cursor; - - for (var i = 0; i < params.length; i++) - functionCall["arg" + (i + 1)] = params[i].name; - - JSDOC.PluginManager.run("onFunctionCall", functionCall); - if (functionCall.doc) { - this.ts.insertAhead(new JSDOC.Token(functionCall.doc, "COMM", "JSDOC")); - } - } - } - this.lastDoc = null; - } - else if (this.token.is("FUNCTION")) { // it's an anonymous function - if ( - (!this.ts.look(-1).is("COLON") || !this.ts.look(-1).is("ASSIGN")) - && !this.ts.look(1).is("NAME") - ) { - if (this.lastDoc) doc = this.lastDoc; - - name = "$anonymous"; - name = this.namescope.last().alias+"-"+name - - params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); - - symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc); - - JSDOC.Parser.addSymbol(symbol); - - this.namescope.push(symbol); - - var matching = this.ts.getMatchingToken("LEFT_CURLY"); - if (matching) matching.popNamescope = name; - else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); - } - } - } - return true; -} - -/** - Resolves what "this." means when it appears in a name. - @param name The name that starts with "this.". - @returns The name with "this." resolved. - */ -JSDOC.Walker.prototype.resolveThis = function(name) { - name.match(/^this\.(.+)$/) - var nameFragment = RegExp.$1; - if (!nameFragment) return name; - - var symbol = this.namescope.last(); - var scopeType = symbol.scopeType || symbol.isa; - - // if we are in a constructor function, `this` means the instance - if (scopeType == "CONSTRUCTOR") { - name = symbol.alias+"#"+nameFragment; - } - - // if we are in an anonymous constructor function, `this` means the instance - else if (scopeType == "INSTANCE") { - name = symbol.alias+"."+nameFragment; - } - - // if we are in a function, `this` means the container (possibly the global) - else if (scopeType == "FUNCTION") { - // in a method of a prototype, so `this` means the constructor - if (symbol.alias.match(/(^.*)[#.-][^#.-]+/)) { - var parentName = RegExp.$1; - var parent = JSDOC.Parser.symbols.getSymbol(parentName); - - if (!parent) { - if (JSDOC.Lang.isBuiltin(parentName)) parent = JSDOC.Parser.addBuiltin(parentName); - else { - if (symbol.alias.indexOf("$anonymous") < 0) // these will be ignored eventually - LOG.warn("Trying to document "+symbol.alias+" without first documenting "+parentName+"."); - } - } - if (parent) name = parentName+(parent.is("CONSTRUCTOR")?"#":".")+nameFragment; - } - else { - parent = this.namescope.last(1); - name = parent.alias+(parent.is("CONSTRUCTOR")?"#":".")+nameFragment; - } - } - // otherwise it means the global - else { - name = nameFragment; - } - - return name; -} - -JSDOC.Walker.onParamList = function(/**Array*/paramTokens) { - if (!paramTokens) { - LOG.warn("Malformed parameter list. Can't parse code."); - return []; - } - var params = []; - for (var i = 0, l = paramTokens.length; i < l; i++) { - if (paramTokens[i].is("JSDOC")) { - var paramType = paramTokens[i].data.replace(/(^\/\*\* *| *\*\/$)/g, ""); - - if (paramTokens[i+1] && paramTokens[i+1].is("NAME")) { - i++; - params.push({type: paramType, name: paramTokens[i].data}); - } - } - else if (paramTokens[i].is("NAME")) { - params.push({name: paramTokens[i].data}); - } - } - return params; -} diff --git a/doc/jsdoc-toolkit/app/main.js b/doc/jsdoc-toolkit/app/main.js deleted file mode 100644 index 9b78182c1..000000000 --- a/doc/jsdoc-toolkit/app/main.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * @version $Id: main.js 795 2009-06-19 07:03:22Z micmath $ - */ - -function main() { - IO.include("lib/JSDOC.js"); - IO.includeDir("plugins/"); - - // process the options - - // the -c option: options are defined in a configuration file - if (JSDOC.opt.c) { - eval("JSDOC.conf = " + IO.readFile(JSDOC.opt.c)); - - LOG.inform("Using configuration file at '"+JSDOC.opt.c+"'."); - - for (var c in JSDOC.conf) { - if (c !== "D" && !defined(JSDOC.opt[c])) { // commandline overrules config file - JSDOC.opt[c] = JSDOC.conf[c]; - } - } - - if (typeof JSDOC.conf["_"] != "undefined") { - JSDOC.opt["_"] = JSDOC.opt["_"].concat(JSDOC.conf["_"]); - } - - LOG.inform("With configuration: "); - for (var o in JSDOC.opt) { - LOG.inform(" "+o+": "+JSDOC.opt[o]); - } - } - - // be verbose - if (JSDOC.opt.v) LOG.verbose = true; - - // send log messages to a file - if (JSDOC.opt.o) LOG.out = IO.open(JSDOC.opt.o); - - // run the unit tests - if (JSDOC.opt.T) { - LOG.inform("JsDoc Toolkit running in test mode at "+new Date()+"."); - IO.include("frame/Testrun.js"); - IO.include("test.js"); - } - else { - // a template must be defined and must be a directory path - if (!JSDOC.opt.t && System.getProperty("jsdoc.template.dir")) { - JSDOC.opt.t = System.getProperty("jsdoc.template.dir"); - } - if (JSDOC.opt.t && !JSDOC.opt.t.charAt(JSDOC.opt.t.length-1).match(/[\\\/]/)) { - JSDOC.opt.t += SYS.slash; - } - - // verbose messages about the options we were given - LOG.inform("JsDoc Toolkit main() running at "+new Date()+"."); - LOG.inform("With options: "); - for (var o in JSDOC.opt) { - LOG.inform(" "+o+": "+JSDOC.opt[o]); - } - - // initialize and build a symbolSet from your code - JSDOC.JsDoc(); - - // debugger's option: dump the entire symbolSet produced from your code - if (JSDOC.opt.Z) { - LOG.warn("So you want to see the data structure, eh? This might hang if you have circular refs..."); - IO.include("frame/Dumper.js"); - var symbols = JSDOC.JsDoc.symbolSet.toArray(); - for (var i = 0, l = symbols.length; i < l; i++) { - var symbol = symbols[i]; - print("// symbol: " + symbol.alias); - print(symbol.serialize()); - } - } - else { - if (typeof JSDOC.opt.t != "undefined") { - try { - // a file named "publish.js" must exist in the template directory - load(JSDOC.opt.t+"publish.js"); - - // and must define a function named "publish" - if (!publish) { - LOG.warn("No publish() function is defined in that template so nothing to do."); - } - else { - // which will be called with the symbolSet produced from your code - publish(JSDOC.JsDoc.symbolSet); - } - } - catch(e) { - LOG.warn("Sorry, that doesn't seem to be a valid template: "+JSDOC.opt.t+"publish.js : "+e); - } - } - else { - LOG.warn("No template given. Might as well read the usage notes."); - JSDOC.usage(); - } - } - } - - // notify of any warnings - if (!JSDOC.opt.q && LOG.warnings.length) { - print(LOG.warnings.length+" warning"+(LOG.warnings.length != 1? "s":"")+"."); - } - - // stop sending log messages to a file - if (LOG.out) { - LOG.out.flush(); - LOG.out.close(); - } -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/plugins/commentSrcJson.js b/doc/jsdoc-toolkit/app/plugins/commentSrcJson.js deleted file mode 100644 index e826b5722..000000000 --- a/doc/jsdoc-toolkit/app/plugins/commentSrcJson.js +++ /dev/null @@ -1,20 +0,0 @@ -JSDOC.PluginManager.registerPlugin( - "JSDOC.commentSrcJson", - { - onDocCommentSrc: function(comment) { - var json; - if (/^\s*@json\b/.test(comment)) { - comment.src = new String(comment.src).replace("@json", ""); - - eval("json = "+comment.src); - var tagged = ""; - for (var i in json) { - var tag = json[i]; - // todo handle cases where tag is an object - tagged += "@"+i+" "+tag+"\n"; - } - comment.src = tagged; - } - } - } -); \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/plugins/frameworkPrototype.js b/doc/jsdoc-toolkit/app/plugins/frameworkPrototype.js deleted file mode 100644 index 9c417518b..000000000 --- a/doc/jsdoc-toolkit/app/plugins/frameworkPrototype.js +++ /dev/null @@ -1,16 +0,0 @@ -JSDOC.PluginManager.registerPlugin( - "JSDOC.frameworkPrototype", - { - onPrototypeClassCreate: function(classCreator) { - var desc = ""; - if (classCreator.comment) { - desc = classCreator.comment; - } - var insert = desc+"/** @name "+classCreator.name+"\n@constructor\n@scope "+classCreator.name+".prototype */" - - insert = insert.replace(/\*\/\/\*\*/g, "\n"); - /*DEBUG*///print("insert is "+insert); - classCreator.addComment.data = insert; - } - } -); diff --git a/doc/jsdoc-toolkit/app/plugins/functionCall.js b/doc/jsdoc-toolkit/app/plugins/functionCall.js deleted file mode 100644 index 6f87705ee..000000000 --- a/doc/jsdoc-toolkit/app/plugins/functionCall.js +++ /dev/null @@ -1,10 +0,0 @@ -JSDOC.PluginManager.registerPlugin( - "JSDOC.functionCall", - { - onFunctionCall: function(functionCall) { - if (functionCall.name == "dojo.define" && functionCall.arg1) { - functionCall.doc = "/** @lends "+eval(functionCall.arg1)+".prototype */"; - } - } - } -); \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/plugins/publishSrcHilite.js b/doc/jsdoc-toolkit/app/plugins/publishSrcHilite.js deleted file mode 100644 index 65514f2c9..000000000 --- a/doc/jsdoc-toolkit/app/plugins/publishSrcHilite.js +++ /dev/null @@ -1,62 +0,0 @@ -JSDOC.PluginManager.registerPlugin( - "JSDOC.publishSrcHilite", - { - onPublishSrc: function(src) { - if (src.path in JsHilite.cache) { - return; // already generated src code - } - else JsHilite.cache[src.path] = true; - - try { - var sourceCode = IO.readFile(src.path); - } - catch(e) { - print(e.message); - quit(); - } - - var hiliter = new JsHilite(sourceCode, src.charset); - src.hilited = hiliter.hilite(); - } - } -); - -function JsHilite(src, charset) { - - var tr = new JSDOC.TokenReader(); - - tr.keepComments = true; - tr.keepDocs = true; - tr.keepWhite = true; - - this.tokens = tr.tokenize(new JSDOC.TextStream(src)); - - // TODO is redefining toString() the best way? - JSDOC.Token.prototype.toString = function() { - return ""+this.data.replace(/"; - } - - if (!charset) charset = "utf-8"; - - this.header = ' '+ - "

";
-	this.footer = "
"; - this.showLinenumbers = true; -} - -JsHilite.cache = {}; - -JsHilite.prototype.hilite = function() { - var hilited = this.tokens.join(""); - var line = 1; - if (this.showLinenumbers) hilited = hilited.replace(/(^|\n)/g, function(m){return m+""+((line<10)? " ":"")+((line<100)? " ":"")+(line++)+" "}); - - return this.header+hilited+this.footer; -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/plugins/symbolLink.js b/doc/jsdoc-toolkit/app/plugins/symbolLink.js deleted file mode 100644 index c87f1ca7b..000000000 --- a/doc/jsdoc-toolkit/app/plugins/symbolLink.js +++ /dev/null @@ -1,10 +0,0 @@ -JSDOC.PluginManager.registerPlugin( - "JSDOC.symbolLink", - { - onSymbolLink: function(link) { - // modify link.linkPath (the href part of the link) - // or link.linkText (the text displayed) - // or link.linkInner (the #name part of the link) - } - } -); \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/plugins/tagParamConfig.js b/doc/jsdoc-toolkit/app/plugins/tagParamConfig.js deleted file mode 100644 index 3ea8a1be2..000000000 --- a/doc/jsdoc-toolkit/app/plugins/tagParamConfig.js +++ /dev/null @@ -1,31 +0,0 @@ -JSDOC.PluginManager.registerPlugin( - "JSDOC.tagParamConfig", - { - onDocCommentTags: function(comment) { - var currentParam = null; - var tags = comment.tags; - for (var i = 0, l = tags.length; i < l; i++) { - - if (tags[i].title == "param") { - if (tags[i].name.indexOf(".") == -1) { - currentParam = i; - } - } - else if (tags[i].title == "config") { - tags[i].title = "param"; - if (currentParam == null) { - tags[i].name = "arguments"+"."+tags[i].name; - } - else if (tags[i].name.indexOf(tags[currentParam].name+".") != 0) { - tags[i].name = tags[currentParam].name+"."+tags[i].name; - } - currentParam != null - //tags[currentParam].properties.push(tags[i]); - } - else { - currentParam = null; - } - } - } - } -); diff --git a/doc/jsdoc-toolkit/app/plugins/tagSynonyms.js b/doc/jsdoc-toolkit/app/plugins/tagSynonyms.js deleted file mode 100644 index 49a874f19..000000000 --- a/doc/jsdoc-toolkit/app/plugins/tagSynonyms.js +++ /dev/null @@ -1,43 +0,0 @@ -JSDOC.PluginManager.registerPlugin( - "JSDOC.tagSynonyms", - { - onDocCommentSrc: function(comment) { - comment.src = comment.src.replace(/@methodOf\b/i, "@function\n@memberOf"); - comment.src = comment.src.replace(/@fieldOf\b/i, "@field\n@memberOf"); - }, - - onDocCommentTags: function(comment) { - for (var i = 0, l = comment.tags.length; i < l; i++) { - var title = comment.tags[i].title.toLowerCase(); - var syn; - if ((syn = JSDOC.tagSynonyms.synonyms["="+title])) { - comment.tags[i].title = syn; - } - } - } - } -); - -new Namespace( - "JSDOC.tagSynonyms", - function() { - JSDOC.tagSynonyms.synonyms = { - "=member": "memberOf", - "=memberof": "memberOf", - "=description": "desc", - "=exception": "throws", - "=argument": "param", - "=returns": "return", - "=classdescription": "class", - "=fileoverview": "overview", - "=extends": "augments", - "=base": "augments", - "=projectdescription": "overview", - "=classdescription": "class", - "=link": "see", - "=borrows": "inherits", - "=scope": "lends", - "=construct": "constructor" - } - } -); \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/run.js b/doc/jsdoc-toolkit/app/run.js deleted file mode 100644 index 1f875cdbb..000000000 --- a/doc/jsdoc-toolkit/app/run.js +++ /dev/null @@ -1,348 +0,0 @@ -/** - * @fileOverview - * A bootstrap script that creates some basic required objects - * for loading other scripts. - * @author Michael Mathews, micmath@gmail.com - * @version $Id: run.js 756 2009-01-07 21:32:58Z micmath $ - */ - -/** - * @namespace Keep track of any messages from the running script. - */ -LOG = { - warn: function(msg, e) { - if (JSDOC.opt.q) return; - if (e) msg = e.fileName+", line "+e.lineNumber+": "+msg; - - msg = ">> WARNING: "+msg; - LOG.warnings.push(msg); - if (LOG.out) LOG.out.write(msg+"\n"); - else print(msg); - }, - - inform: function(msg) { - if (JSDOC.opt.q) return; - msg = " > "+msg; - if (LOG.out) LOG.out.write(msg+"\n"); - else if (typeof LOG.verbose != "undefined" && LOG.verbose) print(msg); - } -}; -LOG.warnings = []; -LOG.verbose = false -LOG.out = undefined; - -/** - * @class Manipulate a filepath. - */ -function FilePath(absPath, separator) { - this.slash = separator || "/"; - this.root = this.slash; - this.path = []; - this.file = ""; - - var parts = absPath.split(/[\\\/]/); - if (parts) { - if (parts.length) this.root = parts.shift() + this.slash; - if (parts.length) this.file = parts.pop() - if (parts.length) this.path = parts; - } - - this.path = this.resolvePath(); -} - -/** Collapse any dot-dot or dot items in a filepath. */ -FilePath.prototype.resolvePath = function() { - var resolvedPath = []; - for (var i = 0; i < this.path.length; i++) { - if (this.path[i] == "..") resolvedPath.pop(); - else if (this.path[i] != ".") resolvedPath.push(this.path[i]); - } - return resolvedPath; -} - -/** Trim off the filename. */ -FilePath.prototype.toDir = function() { - if (this.file) this.file = ""; - return this; -} - -/** Go up a directory. */ -FilePath.prototype.upDir = function() { - this.toDir(); - if (this.path.length) this.path.pop(); - return this; -} - -FilePath.prototype.toString = function() { - return this.root - + this.path.join(this.slash) - + ((this.path.length > 0)? this.slash : "") - + this.file; -} - -/** - * Turn a path into just the name of the file. - */ -FilePath.fileName = function(path) { - var nameStart = Math.max(path.lastIndexOf("/")+1, path.lastIndexOf("\\")+1, 0); - return path.substring(nameStart); -} - -/** - * Get the extension of a filename - */ -FilePath.fileExtension = function(filename) { - return filename.split(".").pop().toLowerCase(); -}; - -/** - * Turn a path into just the directory part. - */ -FilePath.dir = function(path) { - var nameStart = Math.max(path.lastIndexOf("/")+1, path.lastIndexOf("\\")+1, 0); - return path.substring(0, nameStart-1); -} - - -importClass(java.lang.System); - -/** - * @namespace A collection of information about your system. - */ -SYS = { - /** - * Information about your operating system: arch, name, version. - * @type string - */ - os: [ - new String(System.getProperty("os.arch")), - new String(System.getProperty("os.name")), - new String(System.getProperty("os.version")) - ].join(", "), - - /** - * Which way does your slash lean. - * @type string - */ - slash: System.getProperty("file.separator")||"/", - - /** - * The path to the working directory where you ran java. - * @type string - */ - userDir: new String(System.getProperty("user.dir")), - - /** - * Where is Java's home folder. - * @type string - */ - javaHome: new String(System.getProperty("java.home")), - - /** - * The absolute path to the directory containing this script. - * @type string - */ - pwd: undefined -}; - -// jsrun appends an argument, with the path to here. -if (arguments[arguments.length-1].match(/^-j=(.+)/)) { - if (RegExp.$1.charAt(0) == SYS.slash || RegExp.$1.charAt(1) == ":") { // absolute path to here - SYS.pwd = new FilePath(RegExp.$1).toDir().toString(); - } - else { // relative path to here - SYS.pwd = new FilePath(SYS.userDir + SYS.slash + RegExp.$1).toDir().toString(); - } - arguments.pop(); -} -else { - print("The run.js script requires you use jsrun.jar."); - quit(); -} - -// shortcut -var File = Packages.java.io.File; - -/** - * @namespace A collection of functions that deal with reading a writing to disk. - */ -IO = { - - /** - * Create a new file in the given directory, with the given name and contents. - */ - saveFile: function(/**string*/ outDir, /**string*/ fileName, /**string*/ content) { - var out = new Packages.java.io.PrintWriter( - new Packages.java.io.OutputStreamWriter( - new Packages.java.io.FileOutputStream(outDir+SYS.slash+fileName), - IO.encoding - ) - ); - out.write(content); - out.flush(); - out.close(); - }, - - /** - * @type string - */ - readFile: function(/**string*/ path) { - if (!IO.exists(path)) { - throw "File doesn't exist there: "+path; - } - return readFile(path, IO.encoding); - }, - - /** - * @param inFile - * @param outDir - * @param [fileName=The original filename] - */ - copyFile: function(/**string*/ inFile, /**string*/ outDir, /**string*/ fileName) { - if (fileName == null) fileName = FilePath.fileName(inFile); - - var inFile = new File(inFile); - var outFile = new File(outDir+SYS.slash+fileName); - - var bis = new Packages.java.io.BufferedInputStream(new Packages.java.io.FileInputStream(inFile), 4096); - var bos = new Packages.java.io.BufferedOutputStream(new Packages.java.io.FileOutputStream(outFile), 4096); - var theChar; - while ((theChar = bis.read()) != -1) { - bos.write(theChar); - } - bos.close(); - bis.close(); - }, - - /** - * Creates a series of nested directories. - */ - mkPath: function(/**Array*/ path) { - if (path.constructor != Array) path = path.split(/[\\\/]/); - var make = ""; - for (var i = 0, l = path.length; i < l; i++) { - make += path[i] + SYS.slash; - if (! IO.exists(make)) { - IO.makeDir(make); - } - } - }, - - /** - * Creates a directory at the given path. - */ - makeDir: function(/**string*/ path) { - (new File(path)).mkdir(); - }, - - /** - * @type string[] - * @param dir The starting directory to look in. - * @param [recurse=1] How many levels deep to scan. - * @returns An array of all the paths to files in the given dir. - */ - ls: function(/**string*/ dir, /**number*/ recurse, _allFiles, _path) { - if (_path === undefined) { // initially - var _allFiles = []; - var _path = [dir]; - } - if (_path.length == 0) return _allFiles; - if (recurse === undefined) recurse = 1; - - dir = new File(dir); - if (!dir.directory) return [String(dir)]; - var files = dir.list(); - - for (var f = 0; f < files.length; f++) { - var file = String(files[f]); - if (file.match(/^\.[^\.\/\\]/)) continue; // skip dot files - - if ((new File(_path.join(SYS.slash)+SYS.slash+file)).list()) { // it's a directory - _path.push(file); - if (_path.length-1 < recurse) IO.ls(_path.join(SYS.slash), recurse, _allFiles, _path); - _path.pop(); - } - else { - _allFiles.push((_path.join(SYS.slash)+SYS.slash+file).replace(SYS.slash+SYS.slash, SYS.slash)); - } - } - - return _allFiles; - }, - - /** - * @type boolean - */ - exists: function(/**string*/ path) { - file = new File(path); - - if (file.isDirectory()){ - return true; - } - if (!file.exists()){ - return false; - } - if (!file.canRead()){ - return false; - } - return true; - }, - - /** - * - */ - open: function(/**string*/ path, /**string*/ append) { - var append = true; - var outFile = new File(path); - var out = new Packages.java.io.PrintWriter( - new Packages.java.io.OutputStreamWriter( - new Packages.java.io.FileOutputStream(outFile, append), - IO.encoding - ) - ); - return out; - }, - - /** - * Sets {@link IO.encoding}. - * Encoding is used when reading and writing text to files, - * and in the meta tags of HTML output. - */ - setEncoding: function(/**string*/ encoding) { - if (/ISO-8859-([0-9]+)/i.test(encoding)) { - IO.encoding = "ISO8859_"+RegExp.$1; - } - else { - IO.encoding = encoding; - } - }, - - /** - * @default "utf-8" - * @private - */ - encoding: "utf-8", - - /** - * Load the given script. - */ - include: function(relativePath) { - load(SYS.pwd+relativePath); - }, - - /** - * Loads all scripts from the given directory path. - */ - includeDir: function(path) { - if (!path) return; - - for (var lib = IO.ls(SYS.pwd+path), i = 0; i < lib.length; i++) - if (/\.js$/i.test(lib[i])) load(lib[i]); - } -} - -// now run the application -IO.include("frame.js"); -IO.include("main.js"); - -main(); diff --git a/doc/jsdoc-toolkit/app/t/TestDoc.js b/doc/jsdoc-toolkit/app/t/TestDoc.js deleted file mode 100644 index c0768b71c..000000000 --- a/doc/jsdoc-toolkit/app/t/TestDoc.js +++ /dev/null @@ -1,144 +0,0 @@ -var TestDoc = { - fails: 0, - plans: 0, - passes: 0, - results: [] -}; - -TestDoc.record = function(result) { - TestDoc.results.push(result); - if (typeof result.verdict == "boolean") { - if (result.verdict === false) TestDoc.fails++; - if (result.verdict === true) TestDoc.passes++; - } -} - -TestDoc.prove = function(filePath) { - if (typeof document != "undefined" && typeof document.write != "undefined") { - if (TestDoc.console) print = function(s) { TestDoc.console.appendChild(document.createTextNode(s+"\n")); } - else print = function(s) { document.write(s+"
"); } - } - TestDoc.run(TestDoc.readFile(filePath)); -} - -TestDoc.run = function(src) { - try { eval(src); } catch(e) { print("# ERROR! "+e); } - - var chunks = src.split(/\/\*t:/); - - var run = function(chunk) { - // local shortcuts - var is = TestDoc.assertEquals; - var isnt = TestDoc.assertNotEquals; - var plan = TestDoc.plan; - var requires = TestDoc.requires; - - try { eval(chunk); } catch(e) { print("# ERROR! "+e); } - } - for (var start = -1, end = 0; (start = src.indexOf("/*t:", end)) > end; start = end) { - run( - src.substring( - start+4, - (end = src.indexOf("*/", start)) - ) - ); - } -} - -TestDoc.Result = function(verdict, message) { - this.verdict = verdict; - this.message = message; -} - -TestDoc.Result.prototype.toString = function() { - if (typeof this.verdict == "boolean") { - return (this.verdict? "ok" : "not ok") + " " + (++TestDoc.report.counter) + " - " + this.message; - } - - return "# " + this.message; -} - -TestDoc.requires = function(file) { - if (!TestDoc.requires.loaded[file]) { - load(file); - TestDoc.requires.loaded[file] = true; - } -} -TestDoc.requires.loaded = {}; - -TestDoc.report = function() { - TestDoc.report.counter = 0; - print("1.."+TestDoc.plans); - for (var i = 0; i < TestDoc.results.length; i++) { - print(TestDoc.results[i]); - } - print("----------------------------------------"); - if (TestDoc.fails == 0 && TestDoc.passes == TestDoc.plans) { - print("All tests successful."); - } - else { - print("Failed " + TestDoc.fails + "/" + TestDoc.plans + " tests, "+((TestDoc.plans == 0)? 0 : Math.round(TestDoc.passes/(TestDoc.passes+TestDoc.fails)*10000)/100)+"% okay. Planned to run "+TestDoc.plans+", did run "+(TestDoc.passes+TestDoc.fails)+".") - } -} - -TestDoc.plan = function(n, message) { - TestDoc.plans += n; - TestDoc.record(new TestDoc.Result(null, message+" ("+n+" tests)")); -} - -TestDoc.assertEquals = function(a, b, message) { - var result = (a == b); - if (!result) message += "\n#\n# " + a + " does not equal " + b + "\n#"; - TestDoc.record(new TestDoc.Result(result, message)); -} - -TestDoc.assertNotEquals = function(a, b, message) { - var result = (a != b); - if (!result) message += "\n#\n# " + a + " equals " + b + "\n#"; - TestDoc.record(new TestDoc.Result(result, message)); -} - -TestDoc.readFile = (function(){ - // rhino - if (typeof readFile == "function") { - return function(url) { - var text = readFile(url); - return text || ""; - } - } - - // a web browser - else { - return function(url) { - var httpRequest; - - if (window.XMLHttpRequest) { // Mozilla, Safari, etc - httpRequest = new XMLHttpRequest(); - } - else if (window.ActiveXObject) { // IE - try { - httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); - } - catch (e) { - try { - httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); - } - catch (e) { - } - } - } - - if (!httpRequest) { throw "Cannot create HTTP Request."; } - - httpRequest.open('GET', url, false); - httpRequest.send(''); - if (httpRequest.readyState == 4) { - if (httpRequest.status >= 400) { - throw "The HTTP Request returned an error code: "+httpRequest.status; - } - } - - return httpRequest.responseText || ""; - } - } -})(); diff --git a/doc/jsdoc-toolkit/app/t/runner.js b/doc/jsdoc-toolkit/app/t/runner.js deleted file mode 100644 index 3f9fb4c96..000000000 --- a/doc/jsdoc-toolkit/app/t/runner.js +++ /dev/null @@ -1,13 +0,0 @@ -// try: java -jar ../../jsrun.jar runner.js - -load("TestDoc.js"); - -TestDoc.prove("../frame/Opt.js"); -TestDoc.prove("../lib/JSDOC.js"); -TestDoc.prove("../frame/String.js"); -TestDoc.prove("../lib/JSDOC/DocTag.js"); -TestDoc.prove("../lib/JSDOC/DocComment.js"); -TestDoc.prove("../lib/JSDOC/TokenReader.js"); -TestDoc.prove("../lib/JSDOC/Symbol.js"); - -TestDoc.report(); diff --git a/doc/jsdoc-toolkit/app/test.js b/doc/jsdoc-toolkit/app/test.js deleted file mode 100644 index 787d84f72..000000000 --- a/doc/jsdoc-toolkit/app/test.js +++ /dev/null @@ -1,325 +0,0 @@ -load("app/frame/Dumper.js"); -function symbolize(opt) { - symbols = null; - JSDOC.JsDoc(opt); - symbols = JSDOC.JsDoc.symbolSet; -} - -var testCases = [ - function() { - symbolize({a:true, p:true, _: [SYS.pwd+"test/overview.js"]}); - //print(Dumper.dump(symbols)); - is('symbols.getSymbolByName("My Cool Library").name', 'My Cool Library', 'File overview can be found by alias.'); - } - , - function() { - symbolize({_: [SYS.pwd+"test/name.js"]}); - - is('symbols.getSymbol("Response").name', "Response", 'Virtual class name is found.'); - is('symbols.getSymbol("Response#text").alias', "Response#text", 'Virtual method name is found.'); - is('symbols.getSymbol("Response#text").memberOf', "Response", 'Virtual method parent name is found.'); - } - , - function() { - symbolize({a:true, p:true, _: [SYS.pwd+"test/prototype.js"]}); - - is('symbols.getSymbol("Article").name', "Article", 'Function set to constructor prototype with inner constructor name is found.'); - is('symbols.getSymbol("Article").hasMethod("init")', true, 'The initializer method name of prototype function is correct.'); - is('symbols.getSymbol("Article").hasMember("counter")', true, 'A static property set in the prototype definition is found.'); - is('symbols.getSymbol("Article").hasMember("title")', true, 'An instance property set in the prototype is found.'); - is('symbols.getSymbol("Article#title").isStatic', false, 'An instance property has isStatic set to false.'); - is('symbols.getSymbol("Article.counter").name', "counter", 'A static property set in the initializer has the name set correctly.'); - is('symbols.getSymbol("Article.counter").memberOf', "Article", 'A static property set in the initializer has the memberOf set correctly.'); - is('symbols.getSymbol("Article.counter").isStatic', true, 'A static property set in the initializer has isStatic set to true.'); - } - , - function() { - symbolize({a:true, _: [SYS.pwd+"test/prototype_oblit.js"]}); - - is('symbols.getSymbol("Article").name', "Article", 'Oblit set to constructor prototype name is found.'); - is('typeof symbols.getSymbol("Article.prototype")', "undefined", 'The prototype oblit is not a symbol.'); - is('symbols.getSymbol("Article#getTitle").name', "getTitle", 'The nonstatic method name of prototype oblit is correct.'); - is('symbols.getSymbol("Article#getTitle").alias', "Article#getTitle", 'The alias of non-static method of prototype oblit is correct.'); - is('symbols.getSymbol("Article#getTitle").isStatic', false, 'The isStatic of a nonstatic method of prototype oblit is correct.'); - is('symbols.getSymbol("Article.getTitle").name', "getTitle", 'The static method name of prototype oblit is correct.'); - is('symbols.getSymbol("Article.getTitle").isStatic', true, 'The isStatic of a static method of prototype oblit is correct.'); - is('symbols.getSymbol("Article#getTitle").isa', "FUNCTION", 'The isa of non-static method of prototype oblit is correct.'); - is('symbols.getSymbol("Article.getTitle").alias', "Article.getTitle", 'The alias of a static method of prototype oblit is correct.'); - is('symbols.getSymbol("Article.getTitle").isa', "FUNCTION", 'The isa of static method of prototype oblit is correct.'); - } - , - function() { - symbolize({a:true, p:true, _: [SYS.pwd+"test/prototype_oblit_constructor.js"]}); - - is('symbols.getSymbol("Article").name', "Article", 'Oblit set to constructor prototype with inner constructor name is found.'); - is('symbols.getSymbol("Article#init").name', "init", 'The initializer method name of prototype oblit is correct.'); - is('symbols.getSymbol("Article").hasMember("pages")', true, 'Property set by initializer method "this" is on the outer constructor.'); - is('symbols.getSymbol("Article#Title").name', "Title", 'Name of the inner constructor name is found.'); - is('symbols.getSymbol("Article#Title").memberOf', "Article", 'The memberOf of the inner constructor name is found.'); - is('symbols.getSymbol("Article#Title").isa', "CONSTRUCTOR", 'The isa of the inner constructor name is constructor.'); - is('symbols.getSymbol("Article#Title").hasMember("title")', true, 'A property set on the inner constructor "this" is on the inner constructor.'); - } - , - function() { - symbolize({a:true, p:true, _: [SYS.pwd+"test/inner.js"]}); - - is('symbols.getSymbol("Outer").name', "Outer", 'Outer constructor prototype name is found.'); - is('symbols.getSymbol("Outer").methods.length', 1, 'Inner function doesnt appear as a method of the outer.'); - is('symbols.getSymbol("Outer").hasMethod("open")', true, 'Outer constructors methods arent affected by inner function.'); - is('symbols.getSymbol("Outer-Inner").alias', "Outer-Inner", 'Alias of inner function is found.'); - is('symbols.getSymbol("Outer-Inner").isa', "CONSTRUCTOR", 'isa of inner function constructor is found.'); - is('symbols.getSymbol("Outer-Inner").memberOf', "Outer", 'The memberOf of inner function is found.'); - is('symbols.getSymbol("Outer-Inner").name', "Inner", 'The name of inner function is found.'); - is('symbols.getSymbol("Outer-Inner#name").name', "name", 'A member of the inner function constructor, attached to "this" is found on inner.'); - is('symbols.getSymbol("Outer-Inner#name").memberOf', "Outer-Inner", 'The memberOf of an inner function member is found.'); - } - , - function() { - symbolize({a:true, _: [SYS.pwd+"test/prototype_nested.js"]}); - - is('symbols.getSymbol("Word").name', "Word", 'Base constructor name is found.'); - is('symbols.getSymbol("Word").hasMethod("reverse")', true, 'Base constructor method is found.'); - is('symbols.getSymbol("Word").methods.length', 1, 'Base constructor has only one method.'); - is('symbols.getSymbol("Word").memberOf', "", 'Base constructor memberOf is empty.'); - is('symbols.getSymbol("Word#reverse").name', "reverse", 'Member of constructor prototype name is found.'); - is('symbols.getSymbol("Word#reverse").memberOf', "Word", 'Member of constructor prototype memberOf is found.'); - is('symbols.getSymbol("Word#reverse.utf8").name', "utf8", 'Member of constructor prototype method name is found.'); - is('symbols.getSymbol("Word#reverse.utf8").memberOf', "Word#reverse", 'Static nested member memberOf is found.'); - } - , - function() { - symbolize({a:true, _: [SYS.pwd+"test/namespace_nested.js"]}); - - is('symbols.getSymbol("ns1").name', "ns1", 'Base namespace name is found.'); - is('symbols.getSymbol("ns1").memberOf', "", 'Base namespace memberOf is empty (its a constructor).'); - is('symbols.getSymbol("ns1.ns2").name', "ns2", 'Nested namespace name is found.'); - is('symbols.getSymbol("ns1.ns2").alias', "ns1.ns2", 'Nested namespace alias is found.'); - is('symbols.getSymbol("ns1.ns2").memberOf', "ns1", 'Nested namespace memberOf is found.'); - is('symbols.getSymbol("ns1.ns2.Function1").name', "Function1", 'Method of nested namespace name is found.'); - is('symbols.getSymbol("ns1.ns2.Function1").memberOf', "ns1.ns2", 'Constructor of nested namespace memberOf is found.'); - } - , - function() { - symbolize({a:true, p:true, _: [SYS.pwd+"test/functions_nested.js"]}); - - is('symbols.getSymbol("Zop").name', "Zop", 'Any constructor name is found.'); - is('symbols.getSymbol("Zop").isa', "CONSTRUCTOR", 'It isa constructor.'); - is('symbols.getSymbol("Zop").hasMethod("zap")', true, 'Its method name, set later, is in methods array.'); - is('symbols.getSymbol("Foo").name', "Foo", 'The containing constructor name is found.'); - is('symbols.getSymbol("Foo").hasMethod("methodOne")', true, 'Its method name is found.'); - is('symbols.getSymbol("Foo").hasMethod("methodTwo")', true, 'Its second method name is found.'); - is('symbols.getSymbol("Foo#methodOne").alias', "Foo#methodOne", 'A methods alias is found.'); - is('symbols.getSymbol("Foo#methodOne").isStatic', false, 'A methods is not static.'); - is('symbols.getSymbol("Bar").name', "Bar", 'A global function declared inside another function is found.'); - is('symbols.getSymbol("Bar").isa', "FUNCTION", 'It isa function.'); - is('symbols.getSymbol("Bar").memberOf', "_global_", 'It is global.'); - is('symbols.getSymbol("Foo-inner").name', "inner", 'An inner functions name is found.'); - is('symbols.getSymbol("Foo-inner").memberOf', "Foo", 'It is member of the outer function.'); - is('symbols.getSymbol("Foo-inner").isInner', true, 'It is an inner function.'); - } - , - function() { - symbolize({a:true, _: [SYS.pwd+"test/memberof_constructor.js"]}); - - is('symbols.getSymbol("Circle#Tangent").name', "Tangent", 'Constructor set on prototype using @member has correct name.'); - is('symbols.getSymbol("Circle#Tangent").memberOf', "Circle", 'Constructor set on prototype using @member has correct memberOf.'); - is('symbols.getSymbol("Circle#Tangent").alias', "Circle#Tangent", 'Constructor set on prototype using @member has correct alias.'); - is('symbols.getSymbol("Circle#Tangent").isa', "CONSTRUCTOR", 'Constructor set on prototype using @member has correct isa.'); - is('symbols.getSymbol("Circle#Tangent").isStatic', false, 'Constructor set on prototype using @member is not static.'); - is('symbols.getSymbol("Circle#Tangent#getDiameter").name', "getDiameter", 'Method set on prototype using @member has correct name.'); - is('symbols.getSymbol("Circle#Tangent#getDiameter").memberOf', "Circle#Tangent", 'Method set on prototype using @member has correct memberOf.'); - is('symbols.getSymbol("Circle#Tangent#getDiameter").alias', "Circle#Tangent#getDiameter", 'Method set on prototype using @member has correct alias.'); - is('symbols.getSymbol("Circle#Tangent#getDiameter").isa', "FUNCTION", 'Method set on prototype using @member has correct isa.'); - is('symbols.getSymbol("Circle#Tangent#getDiameter").isStatic', false, 'Method set on prototype using @member is not static.'); - } - , - function() { - symbolize({a:true, p: true, _: [SYS.pwd+"test/memberof.js"]}); - - is('symbols.getSymbol("pack.install").alias', "pack.install", 'Using @memberOf sets alias, when parent name is in memberOf tag.'); - is('symbols.getSymbol("pack.install.overwrite").name', "install.overwrite", 'Using @memberOf sets name, even if the name is dotted.'); - is('symbols.getSymbol("pack.install.overwrite").memberOf', "pack", 'Using @memberOf sets memberOf.'); - is('symbols.getSymbol("pack.install.overwrite").isStatic', true, 'Using @memberOf with value not ending in octothorp sets isStatic to true.'); - } - , - function() { - symbolize({a:true, p:true, _: [SYS.pwd+"test/borrows.js"]}); - - is('symbols.getSymbol("Layout").name', "Layout", 'Constructor can be found.'); - is('symbols.getSymbol("Layout").hasMethod("init")', true, 'Constructor method name can be found.'); - is('symbols.getSymbol("Layout").hasMember("orientation")', true, 'Constructor property name can be found.'); - - is('symbols.getSymbol("Page").hasMethod("reset")', true, 'Second constructor method name can be found.'); - is('symbols.getSymbol("Page").hasMember("orientation")', true, 'Second constructor borrowed property name can be found in properties.'); - is('symbols.getSymbol("Page#orientation").memberOf', "Page", 'Second constructor borrowed property memberOf can be found.'); - is('symbols.getSymbol("Page-getInnerElements").alias', "Page-getInnerElements", 'Can borrow an inner function and it is still inner.'); - is('symbols.getSymbol("Page.units").alias', "Page.units", 'Can borrow a static function and it is still static.'); - - is('symbols.getSymbol("ThreeColumnPage#init").alias', "ThreeColumnPage#init", 'Third constructor method can be found even though method with same name is borrowed.'); - is('symbols.getSymbol("ThreeColumnPage#reset").alias', "ThreeColumnPage#reset", 'Borrowed method can be found.'); - is('symbols.getSymbol("ThreeColumnPage#orientation").alias', "ThreeColumnPage#orientation", 'Twice borrowed method can be found.'); - - } - , - function() { - symbolize({a:true, p:true, _: [SYS.pwd+"test/borrows2.js"]}); - - is('symbols.getSymbol("Foo").hasMethod("my_zop")', true, 'Borrowed method can be found.'); - is('symbols.getSymbol("Bar").hasMethod("my_zip")', true, 'Second borrowed method can be found.'); - } - , - function() { - symbolize({a:true, p:true, _: [SYS.pwd+"test/constructs.js"]}); - - is('symbols.getSymbol("Person").hasMethod("say")', true, 'The constructs tag creates a class that lends can add a method to.'); - } - , - function() { - symbolize({a: true, _: [SYS.pwd+"test/augments.js", SYS.pwd+"test/augments2.js"]}); - - is('symbols.getSymbol("Page").augments[0]', "Layout", 'An augmented class can be found.'); - is('symbols.getSymbol("Page#reset").alias', "Page#reset", 'Method of augmenter can be found.'); - is('symbols.getSymbol("Page").hasMethod("Layout#init")', true, 'Method from augmented can be found.'); - is('symbols.getSymbol("Page").hasMember("Layout#orientation")', true, 'Property from augmented can be found.'); - is('symbols.getSymbol("Page").methods.length', 3, 'Methods of augmented class are included in methods array.'); - - is('symbols.getSymbol("ThreeColumnPage").augments[0]', "Page", 'The extends tag is a synonym for augments.'); - is('symbols.getSymbol("ThreeColumnPage").hasMethod("ThreeColumnPage#init")', true, 'Local method overrides augmented method of same name.'); - is('symbols.getSymbol("ThreeColumnPage").methods.length', 3, 'Local method count is right.'); - - is('symbols.getSymbol("NewsletterPage").augments[0]', "ThreeColumnPage", 'Can augment across file boundaries.'); - is('symbols.getSymbol("NewsletterPage").augments.length', 2, 'Multiple augments are supported.'); - is('symbols.getSymbol("NewsletterPage").inherits[0].alias', "Junkmail#annoy", 'Inherited method with augments.'); - is('symbols.getSymbol("NewsletterPage").methods.length', 6, 'Methods of augmented class are included in methods array across files.'); - is('symbols.getSymbol("NewsletterPage").properties.length', 1, 'Properties of augmented class are included in properties array across files.'); - } - , - function() { - symbolize({a:true, _: [SYS.pwd+"test/static_this.js"]}); - - is('symbols.getSymbol("box.holder").name', "holder", 'Static namespace name can be found.'); - is('symbols.getSymbol("box.holder.foo").name', "foo", 'Static namespace method name can be found.'); - is('symbols.getSymbol("box.holder").isStatic', true, 'Static namespace method is static.'); - - is('symbols.getSymbol("box.holder.counter").name', "counter", 'Instance namespace property name set on "this" can be found.'); - is('symbols.getSymbol("box.holder.counter").alias', "box.holder.counter", 'Instance namespace property alias set on "this" can be found.'); - is('symbols.getSymbol("box.holder.counter").memberOf', "box.holder", 'Static namespace property memberOf set on "this" can be found.'); - } - , - function() { - symbolize({a:true, p: true, _: [SYS.pwd+"test/lend.js"]}); - - is('symbols.getSymbol("Person").name', "Person", 'Class defined in lend comment is found.'); - is('symbols.getSymbol("Person").hasMethod("initialize")', true, 'Lent instance method name can be found.'); - is('symbols.getSymbol("Person").hasMethod("say")', true, 'Second instance method can be found.'); - is('symbols.getSymbol("Person#sing").isStatic', false, 'Instance method is known to be not static.'); - - is('symbols.getSymbol("Person.getCount").name', "getCount", 'Static method name from second lend comment can be found.'); - is('symbols.getSymbol("Person.getCount").isStatic', true, 'Static method from second lend comment is known to be static.'); - - is('LOG.warnings.filter(function($){if($.indexOf("notok") > -1) return $}).length', 1, 'A warning is emitted when lending to an undocumented parent.'); - } - , - function() { - symbolize({a:true, _: [SYS.pwd+"test/param_inline.js"]}); - - is('symbols.getSymbol("Layout").params[0].type', "int", 'Inline param name is set.'); - is('symbols.getSymbol("Layout").params[0].desc', "The number of columns.", 'Inline param desc is set from comment.'); - is('symbols.getSymbol("Layout#getElement").params[0].name', "id", 'User defined param documentation takes precedence over parser defined.'); - is('symbols.getSymbol("Layout#getElement").params[0].isOptional', true, 'Default for param is to not be optional.'); - is('symbols.getSymbol("Layout#getElement").params[1].isOptional', false, 'Can mark a param as being optional.'); - is('symbols.getSymbol("Layout#getElement").params[1].type', "number|string", 'Type of inline param doc can have multiple values.'); - is('symbols.getSymbol("Layout#Canvas").params[0].type', "", 'Type can be not defined for some params.'); - is('symbols.getSymbol("Layout#Canvas").params[2].type', "int", 'Type can be defined inline for only some params.'); - is('symbols.getSymbol("Layout#rotate").params.length', 0, 'Docomments inside function sig is ignored without a param.'); - is('symbols.getSymbol("Layout#init").params[2].type', "zoppler", 'Doc comment type overrides inline type for param with same name.'); - } - , - function() { - symbolize({a: true, _: [SYS.pwd+"test/shared.js", SYS.pwd+"test/shared2.js"]}); - - is('symbols.getSymbol("Array#some").name', 'some', 'The name of a symbol in a shared section is found.'); - is('symbols.getSymbol("Array#some").alias', 'Array#some', 'The alias of a symbol in a shared section is found.'); - is('symbols.getSymbol("Array#some").desc', "Extension to builtin array.", 'A description can be shared.'); - is('symbols.getSymbol("Array#filter").desc', "Extension to builtin array.\nChange every element of an array.", 'A shared description is appended.'); - is('symbols.getSymbol("Queue").desc', "A first in, first out data structure.", 'A description is not shared when outside a shared section.'); - is('symbols.getSymbol("Queue.rewind").alias', "Queue.rewind", 'Second shared tag can be started.'); - is('symbols.getSymbol("startOver").alias', "startOver", 'Shared tag doesnt cross over files.'); - } - , - function() { - symbolize({a: true, _: [SYS.pwd+"test/config.js"]}); - is('symbols.getSymbol("Contact").params[0].name', 'person', 'The name of a param is found.'); - is('symbols.getSymbol("Contact").params[1].name', 'person.name', 'The name of a param set with a dot name is found.'); - is('symbols.getSymbol("Contact").params[2].name', 'person.age', 'The name of a second param set with a dot name is found.'); - is('symbols.getSymbol("Contact").params[4].name', 'connection', 'The name of a param after config is found.'); - - is('symbols.getSymbol("Family").params[0].name', 'persons', 'Another name of a param is found.'); - is('symbols.getSymbol("Family").params[1].name', 'persons.Father', 'The name of a param+config is found.'); - is('symbols.getSymbol("Family").params[2].name', 'persons.Mother', 'The name of a second param+config is found.'); - is('symbols.getSymbol("Family").params[3].name', 'persons.Children', 'The name of a third param+config is found.'); - } - , - function() { - symbolize({a:true, p:true, _: [SYS.pwd+"test/ignore.js"]}); - is('LOG.warnings.filter(function($){if($.indexOf("undocumented symbol Ignored") > -1) return $}).length', 1, 'A warning is emitted when documenting members of an ignored parent.'); - } - , - function() { - symbolize({a:true, p:true, _: [SYS.pwd+"test/functions_anon.js"]}); - is('symbols.getSymbol("a.b").alias', 'a.b', 'In anonymous constructor this is found to be the container object.'); - is('symbols.getSymbol("a.f").alias', 'a.f', 'In anonymous constructor this can have a method.'); - is('symbols.getSymbol("a.c").alias', 'a.c', 'In anonymous constructor method this is found to be the container object.'); - is('symbols.getSymbol("g").alias', 'g', 'In anonymous function executed inline this is the global.'); - is('symbols.getSymbol("bar2.p").alias', 'bar2.p', 'In named constructor executed inline this is the container object.'); - is('symbols.getSymbol("module.pub").alias', 'module.pub', 'In parenthesized anonymous function executed inline function scoped variables arent documented.'); - } - , - function() { - symbolize({a:true, p:true, _: [SYS.pwd+"test/oblit_anon.js"]}); - is('symbols.getSymbol("opt").name', 'opt', 'Anonymous object properties are created.'); - is('symbols.getSymbol("opt.conf.keep").alias', 'opt.conf.keep', 'Anonymous object first property is assigned to $anonymous.'); - is('symbols.getSymbol("opt.conf.base").alias', 'opt.conf.base', 'Anonymous object second property is assigned to $anonymous.'); - } - , - function() { - symbolize({a:true, p:true, _: [SYS.pwd+"test/params_optional.js"]}); - is('symbols.getSymbol("Document").params.length', 3, 'Correct number of params are found when optional param syntax is used.'); - is('symbols.getSymbol("Document").params[1].name', "id", 'Name of optional param is found.'); - is('symbols.getSymbol("Document").params[1].isOptional', true, 'Optional param is marked isOptional.'); - is('symbols.getSymbol("Document").params[2].name', "title", 'Name of optional param with default value is found.'); - is('symbols.getSymbol("Document").params[2].isOptional', true, 'Optional param with default value is marked isOptional.'); - is('symbols.getSymbol("Document").params[2].defaultValue', " This is untitled.", 'Optional param default value is found.'); - } - , - function() { - symbolize({a:true, p:true, _: [SYS.pwd+"test/synonyms.js"]}); - is('symbols.getSymbol("myObject.myFunc").type', 'function', 'Type can be set to function.'); - } - , - function() { - symbolize({a:true, p:true, _: [SYS.pwd+"test/event.js"]}); - is('symbols.getSymbol("Kitchen#event:cakeEaten").isEvent', true, 'Function with event prefix is an event.'); - is('symbols.getSymbol("Kitchen#cakeEaten").isa', "FUNCTION", 'Function with same name as event isa function.'); - } - , - function() { - symbolize({x:"js", a:true, _: [SYS.pwd+"test/scripts/"]}); - is('JSDOC.JsDoc.srcFiles.length', 1, 'Only js files are scanned when -x=js.'); - } - , - function() { - symbolize({x:"js", a:true, _: [SYS.pwd+"test/exports.js"]}); - is('symbols.getSymbol("mxn.Map#doThings").name', 'doThings', 'Exports creates a documentation alias that can have methods.'); - } - , - function() { - symbolize({p:true, a:true, _: [SYS.pwd+"test/module.js"]}); - is('symbols.getSymbol("myProject.myModule.myPublicMethod").name', 'myPublicMethod', 'A function wrapped in parens can be recognized.'); - is('symbols.getSymbol("myProject.myModule-myPrivateMethod").name', 'myPrivateMethod', 'A private method in the scope of a function wrapped in parens can be recognized.'); - is('symbols.getSymbol("myProject.myModule-myPrivateVar").name', 'myPrivateVar', 'A private member in the scope of a function wrapped in parens can be recognized.'); - } -]; - -//// run and print results -print(testrun(testCases)); diff --git a/doc/jsdoc-toolkit/app/test/addon.js b/doc/jsdoc-toolkit/app/test/addon.js deleted file mode 100644 index 888620533..000000000 --- a/doc/jsdoc-toolkit/app/test/addon.js +++ /dev/null @@ -1,24 +0,0 @@ -String.prototype.reverse = function() { -} - -String.prototype.reverse.utf8 = function() { -} - -Function.count = function() { -} - -/** @memberOf Function */ -Function.count.reset = function() { -} - -/** @memberOf Function */ -count.getValue = function() { -} - -/** @memberOf Function.prototype */ -getSig = function() { -} - -/** @memberOf Function.prototype */ -Function.prototype.getProps = function() { -} diff --git a/doc/jsdoc-toolkit/app/test/anon_inner.js b/doc/jsdoc-toolkit/app/test/anon_inner.js deleted file mode 100644 index 227eeee55..000000000 --- a/doc/jsdoc-toolkit/app/test/anon_inner.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @name bar - * @namespace - */ - -new function() { - /** - * @name bar-foo - * @function - * @param {number} x - */ - function foo(x) { - } -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/augments.js b/doc/jsdoc-toolkit/app/test/augments.js deleted file mode 100644 index 12e706ebc..000000000 --- a/doc/jsdoc-toolkit/app/test/augments.js +++ /dev/null @@ -1,31 +0,0 @@ -/** -@constructor -*/ -function Layout(p) { - this.init = function(p) { - } - - this.getId = function() { - } - - /** @type Page */ - this.orientation = "landscape"; -} - -/** -@constructor -@augments Layout -*/ -function Page() { - this.reset = function(b) { - } -} - -/** -@extends Page -@constructor -*/ -function ThreeColumnPage() { - this.init = function(resetCode) { - } -} diff --git a/doc/jsdoc-toolkit/app/test/augments2.js b/doc/jsdoc-toolkit/app/test/augments2.js deleted file mode 100644 index e8388f0f8..000000000 --- a/doc/jsdoc-toolkit/app/test/augments2.js +++ /dev/null @@ -1,26 +0,0 @@ -/** -@constructor -*/ -function LibraryItem() { - this.reserve = function() { - } -} - -/** -@constructor -*/ -function Junkmail() { - this.annoy = function() { - } -} - -/** -@inherits Junkmail.prototype.annoy as pester -@augments ThreeColumnPage -@augments LibraryItem -@constructor -*/ -function NewsletterPage() { - this.getHeadline = function() { - } -} diff --git a/doc/jsdoc-toolkit/app/test/borrows.js b/doc/jsdoc-toolkit/app/test/borrows.js deleted file mode 100644 index a5d8ea4aa..000000000 --- a/doc/jsdoc-toolkit/app/test/borrows.js +++ /dev/null @@ -1,46 +0,0 @@ -/** -@constructor -*/ -function Layout(p) { - /** initilize 1 */ - this.init = function(p) { - } - - /** get the id */ - this.getId = function() { - } - - /** @type string */ - this.orientation = "landscape"; - - function getInnerElements(elementSecretId){ - } -} - -/** A static method. */ -Layout.units = function() { -} - -/** -@constructor -@borrows Layout#orientation -@borrows Layout-getInnerElements -@borrows Layout.units -*/ -function Page() { - /** reset the page */ - this.reset = function(b) { - } -} - -/** -@constructor -@borrows Layout.prototype.orientation as this.orientation -@borrows Layout.prototype.init as #init -@inherits Page.prototype.reset as #reset -*/ -function ThreeColumnPage() { - /** initilize 2 */ - this.init = function(p) { - } -} diff --git a/doc/jsdoc-toolkit/app/test/borrows2.js b/doc/jsdoc-toolkit/app/test/borrows2.js deleted file mode 100644 index c0d5ea21f..000000000 --- a/doc/jsdoc-toolkit/app/test/borrows2.js +++ /dev/null @@ -1,23 +0,0 @@ -// testing circular borrows - -/** - @class - @borrows Bar#zop as this.my_zop -*/ -function Foo() { - /** this is a zip. */ - this.zip = function() {} - - this.my_zop = new Bar().zop; -} - -/** - @class - @borrows Foo#zip as this.my_zip -*/ -function Bar() { - /** this is a zop. */ - this.zop = function() {} - - this.my_zip = new Foo().zip; -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/config.js b/doc/jsdoc-toolkit/app/test/config.js deleted file mode 100644 index 0748a210a..000000000 --- a/doc/jsdoc-toolkit/app/test/config.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @constructor - * @param person The person. - * @param {string} person.name The person's name. - * @config {integer} age The person's age. - * @config [id=1] Optional id number to use. - * @param connection - */ -function Contact(person, connection) { - -} - -/** - * @constructor - * @param persons - * @config {string} Father The paternal person. - * @config {string} Mother The maternal person. - * @config {string[]} Children And the rest. - */ -function Family(/**Object*/persons) { - -} diff --git a/doc/jsdoc-toolkit/app/test/constructs.js b/doc/jsdoc-toolkit/app/test/constructs.js deleted file mode 100644 index cca5dbd38..000000000 --- a/doc/jsdoc-toolkit/app/test/constructs.js +++ /dev/null @@ -1,18 +0,0 @@ -var Person = makeClass( - /** - @scope Person - */ - { - /** - This is just another way to define a constructor. - @constructs - @param {string} name The name of the person. - */ - initialize: function(name) { - this.name = name; - }, - say: function(message) { - return this.name + " says: " + message; - } - } -); \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/encoding.js b/doc/jsdoc-toolkit/app/test/encoding.js deleted file mode 100644 index ba6421931..000000000 --- a/doc/jsdoc-toolkit/app/test/encoding.js +++ /dev/null @@ -1,10 +0,0 @@ - -/** - * @Constructor - * @desc é…置文件 - * @class 什么也ä¸è¿”回 - */ -function Test(conf) { - // do something; -} - diff --git a/doc/jsdoc-toolkit/app/test/encoding_other.js b/doc/jsdoc-toolkit/app/test/encoding_other.js deleted file mode 100644 index b144da4cf..000000000 --- a/doc/jsdoc-toolkit/app/test/encoding_other.js +++ /dev/null @@ -1,12 +0,0 @@ - -/** - * @Constructor - * @desc ðïîÛ - * @class ßàáâãäåæçèçìëêíîï °±²³´µ¡¶·¸¹ - */ -function Test(conf) { - // do something; -} - -// run with commanline option -e=iso-8859-5 - diff --git a/doc/jsdoc-toolkit/app/test/event.js b/doc/jsdoc-toolkit/app/test/event.js deleted file mode 100644 index 7e41d6f63..000000000 --- a/doc/jsdoc-toolkit/app/test/event.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @name Kitchen - * @constructor - * @fires Bakery#event:donutOrdered - */ - -/** - * Fired when some cake is eaten. - * @name Kitchen#event:cakeEaten - * @function - * @param {Number} pieces The number of pieces eaten. - */ - -/** - * Find out if cake was eaten. - * @name Kitchen#cakeEaten - * @function - * @param {Boolean} wasEaten - */ - -/** - * @name getDesert - * @function - * @fires Kitchen#event:cakeEaten - */ - -/** - * @name Bakery - * @constructor - * @extends Kitchen - */ - -/** - * Fired when a donut order is made. - * @name Bakery#event:donutOrdered - * @event - * @param {Event} e The event object. - * @param {String} [e.topping] Optional sprinkles. - */ - -/** - * @constructor - * @borrows Bakery#event:donutOrdered as this.event:cakeOrdered - */ -function CakeShop() { -} - -/** @event */ -CakeShop.prototype.icingReady = function(isPink) { -} - -/** @event */ -function amHungry(/**Boolean*/enoughToEatAHorse) { -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/exports.js b/doc/jsdoc-toolkit/app/test/exports.js deleted file mode 100644 index 63a87cb4d..000000000 --- a/doc/jsdoc-toolkit/app/test/exports.js +++ /dev/null @@ -1,14 +0,0 @@ -/** @namespace */ -var mxn = {}; - -(function(){ - /** @exports Map as mxn.Map */ - var Map = - /** @constructor */ - mxn.Map = function() { - }; - - /** A method. */ - Map.prototype.doThings = function() { - }; -})(); \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/functions_anon.js b/doc/jsdoc-toolkit/app/test/functions_anon.js deleted file mode 100644 index e9dd6c1be..000000000 --- a/doc/jsdoc-toolkit/app/test/functions_anon.js +++ /dev/null @@ -1,39 +0,0 @@ -/** an anonymous constructor executed inline */ -a = new function() { - /** a.b*/ - this.b = 1; - /** a.f */ - this.f = function() { - /** a.c */ - this.c = 2; - } -} - - -/** - named function executed inline -*/ -bar1 = function Zoola1() { - /** property of global */ - this.g = 1; -}(); - -/** - named constructor executed inline -*/ -bar2 = new function Zoola2() { - /** property of bar */ - this.p = 1; -}; - -/** module pattern */ -module = (function () { - /** won't appear in documentation */ - var priv = 1; - - /** @scope module */ - return { - /** will appear as a property of module */ - pub: 1 - } -})(); diff --git a/doc/jsdoc-toolkit/app/test/functions_nested.js b/doc/jsdoc-toolkit/app/test/functions_nested.js deleted file mode 100644 index f044fafee..000000000 --- a/doc/jsdoc-toolkit/app/test/functions_nested.js +++ /dev/null @@ -1,33 +0,0 @@ -/** @constructor */ -function Zop() { -} - -/** - @class -*/ -Foo = function(id) { - // this is a bit twisted, but if you call Foo() you will then - // modify Foo(). This is kinda, sorta non-insane, because you - // would have to call Foo() 100% of the time to use Foo's methods - Foo.prototype.methodOne = function(bar) { - alert(bar); - }; - - // same again - Foo.prototype.methodTwo = function(bar2) { - alert(bar2); - }; - - // and these are only executed if the enclosing function is actually called - // and who knows if that will ever happen? - Bar = function(pez) { - alert(pez); - }; - Zop.prototype.zap = function(p){ - alert(p); - }; - - // but this is only visible inside Foo - function inner() { - } -}; diff --git a/doc/jsdoc-toolkit/app/test/global.js b/doc/jsdoc-toolkit/app/test/global.js deleted file mode 100644 index 5ea489496..000000000 --- a/doc/jsdoc-toolkit/app/test/global.js +++ /dev/null @@ -1,13 +0,0 @@ -/** ecks */ -var x = [1, 2, 4]; - -var y = { - foo: function(){ - } -} - -bar = function() { -} - -function zop() { -} diff --git a/doc/jsdoc-toolkit/app/test/globals.js b/doc/jsdoc-toolkit/app/test/globals.js deleted file mode 100644 index 3f83fb1f9..000000000 --- a/doc/jsdoc-toolkit/app/test/globals.js +++ /dev/null @@ -1,25 +0,0 @@ -function example(/**Circle*/a, b) { - /** a global defined in function */ - var number = a; - - var hideNumber = function(){ - } - - setNumber = function(){ - } - alert('You have chosen: ' + b); -} - -function initPage() { - var supported = document.createElement && document.getElementsByTagName; - if (!supported) return; - // start of DOM script - var x = document.getElementById('writeroot'); - // etc. -} - -/** an example var */ -var document = new Document(x, y); - -var getNumber = function(){ -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/ignore.js b/doc/jsdoc-toolkit/app/test/ignore.js deleted file mode 100644 index d3fac9ed5..000000000 --- a/doc/jsdoc-toolkit/app/test/ignore.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * A test constructor. - * @constructor - * @ignore - */ -function Ignored() { - /** a method */ - this.bar = function() { - } -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/inner.js b/doc/jsdoc-toolkit/app/test/inner.js deleted file mode 100644 index 37cfa9dc2..000000000 --- a/doc/jsdoc-toolkit/app/test/inner.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @constructor - */ -function Outer() { - /** - * @constructor - */ - function Inner(name) { - /** The name of this. */ - this.name = name; - } - - this.open = function(name) { - return (new Inner(name)); - } -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/jsdoc_test.js b/doc/jsdoc-toolkit/app/test/jsdoc_test.js deleted file mode 100644 index 081771285..000000000 --- a/doc/jsdoc-toolkit/app/test/jsdoc_test.js +++ /dev/null @@ -1,477 +0,0 @@ -/** - * @fileoverview This file is to be used for testing the JSDoc parser - * It is not intended to be an example of good JavaScript OO-programming, - * nor is it intended to fulfill any specific purpose apart from - * demonstrating the functionality of the - * JSDoc parser - * - * @author Gabriel Reid gab_reid@users.sourceforge.net - * @version 0.1 - */ - - -/** - * Construct a new Shape object. - * @class This is the basic Shape class. - * It can be considered an abstract class, even though no such thing - * really existing in JavaScript - * @constructor - * @throws MemoryException if there is no more memory - * @throws GeneralShapeException rarely (if ever) - * @return {Shape|Coordinate} A new shape. - */ -function Shape(){ - - /** - * This is an example of a function that is not given as a property - * of a prototype, but instead it is assigned within a constructor. - * For inner functions like this to be picked up by the parser, the - * function that acts as a constructor must be denoted with - * the @constructor tag in its comment. - * @type String - */ - this.getClassName = function(){ - return "Shape"; - } - - /** - * This is an inner method, just used here as an example - * @since version 0.5 - * @author Sue Smart - */ - function addReference(){ - // Do nothing... - } - -} - -/** - * Create a new Hexagon instance. - * @extends Shape - * @class Hexagon is a class that is a logical sublcass of - * {@link Shape} (thanks to the @extends tag), but in - * reality it is completely unrelated to Shape. - * @param {int} sideLength The length of one side for the new Hexagon - * @example - * var h = new Hexagon(2); - * @example - * if (hasHex) { - * hex = new Hexagon(5); - * color = hex.getColor(); - * } - */ -function Hexagon(sideLength) { -} - - -/** - * This is an unattached (static) function that adds two integers together. - * @param {int} One The first number to add - * @param {int} Two The second number to add - * @author Gabriel Reid - * @deprecated So you shouldn't use it anymore! Use {@link Shape#getClassName} instead. - */ -function Add(One, Two){ - return One + Two; -} - - -/** - * The color of this shape - * @type Color - */ -Shape.prototype.color = null; - -/** - * The border of this shape. - * @field - * @type int - */ -Shape.prototype.border = function(){return border;}; - -/* - * These are all the instance method implementations for Shape - */ - -/** - * Get the coordinates of this shape. It is assumed that we're always talking - * about shapes in a 2D location here. - * @requires The {@link Shape} class - * @returns A Coordinate object representing the location of this Shape - * @type Coordinate[] - */ -Shape.prototype.getCoords = function(){ - return this.coords; -} - -/** - * Get the color of this shape. - * @see #setColor - * @see The Color library. - * @link Shape - * @type Color - */ -Shape.prototype.getColor = function(){ - return this.color; -} - -/** - * Set the coordinates for this Shape - * @param {Coordinate} coordinates The coordinates to set for this Shape - */ -Shape.prototype.setCoords = function(coordinates){ - this.coords = coordinates; -} - -/** - * Set the color for this Shape - * @param {Color} color The color to set for this Shape - * @param other There is no other param, but it can still be documented if - * optional parameters are used - * @throws NonExistantColorException (no, not really!) - * @see #getColor - */ -Shape.prototype.setColor = function(color){ - this.color = color; -} - -/** - * Clone this shape - * @returns A copy of this shape - * @type Shape - * @author Gabriel Reid - */ -Shape.prototype.clone = function(){ - return new Shape(); -} - -/** - * Create a new Rectangle instance. - * @class A basic rectangle class, inherits from Shape. - * This class could be considered a concrete implementation class - * @constructor - * @param {int} width The optional width for this Rectangle - * @param {int} height Thie optional height for this Rectangle - * @author Gabriel Reid - * @see Shape is the base class for this - * @augments Shape - * @hilited - */ -function Rectangle(width, // This is the width - height // This is the height - ){ - if (width){ - this.width = width; - if (height){ - this.height = height; - } - } -} - - -/* Inherit from Shape */ -Rectangle.prototype = new Shape(); - -/** - * Value to represent the width of the Rectangle. - *
Text in bold and italic and a - * link to SourceForge - * @private - * @type int - */ -Rectangle.prototype.width = 0; - -/** - * Value to represent the height of the Rectangle - * @private - * @type int - */ -Rectangle.prototype.height = 0; - -/** - * Get the type of this object. - * @type String - */ -Rectangle.prototype.getClassName= function(){ - return "Rectangle"; -} - -/** - * Get the value of the width for the Rectangle - * @type int - * @see Rectangle#setWidth - */ -Rectangle.prototype.getWidth = function(){ - return this.width; -} - -/** - * Get the value of the height for the Rectangle. - * Another getter is the {@link Shape#getColor} method in the - * {@link Shape} base class. - * @return The height of this Rectangle - * @type int - * @see Rectangle#setHeight - */ -Rectangle.prototype.getHeight = function(){ - return this.height; -} - -/** - * Set the width value for this Rectangle. - * @param {int} width The width value to be set - * @see #setWidth - */ -Rectangle.prototype.setWidth = function(width){ - this.width = width; -} - -/** - * Set the height value for this Rectangle. - * @param {int} height The height value to be set - * @see #getHeight - */ -Rectangle.prototype.setHeight = function(height){ - this.height = height; -} - -/** - * Get the value for the total area of this Rectangle - * @return total area of this Rectangle - * @type int - */ -Rectangle.prototype.getArea = function(){ - return width * height; -} - - -/** - * Create a new Square instance. - * @class A Square is a subclass of {@link Rectangle} - * @param {int} width The optional width for this Rectangle - * @param {int} height The optional height for this Rectangle - * @augments Rectangle - */ -function Square(width, height){ - if (width){ - this.width = width; - if (height){ - this.height = height; - } - } - -} - -/* Square is a subclass of Rectangle */ -Square.prototype = new Rectangle(); - -/** - * Set the width value for this Shape. - * @param {int} width The width value to be set - * @see #getWidth - */ -Square.prototype.setWidth = function(width){ - this.width = this.height = width; -} - -/** - * Set the height value for this Shape - * Sets the {@link Rectangle#height} attribute in the Rectangle. - * @param {int} height The height value to be set - */ -Square.prototype.setHeight = function(height){ - this.height = this.width = height; -} - - -/** - * Create a new Circle instance based on a radius. - * @class Circle class is another subclass of Shape - * @extends Shape - * @param {int} radius The optional radius of this {@link Circle } - * @mixin Square.prototype.setWidth as this.setDiameter - */ -function Circle(radius){ - if (radius) { - /** The radius of the this Circle. */ - this.radius = radius; - } -} - -/* Circle inherits from {@link Shape} */ -Circle.prototype = new Shape(); - -/** - * The radius value for this Circle - * @private - * @type int - */ -Circle.prototype.radius = 0; - -/** - * A very simple class (static) field that is also a constant - * @final - * @type float - */ -Circle.PI = 3.14; - -/** - * Get the radius value for this Circle - * @type int - * @see #setRadius - */ -Circle.prototype.getRadius = function(){ - return this.radius; -} - -/** - * Set the radius value for this Circle - * @param {int} radius The {@link Circle#radius} value to set - * @see #getRadius - */ -Circle.prototype.setRadius = function(radius){ - this.radius = radius; -} - -/** - * An example of a class (static) method that acts as a factory for Circle - * objects. Given a radius value, this method creates a new Circle. - * @param {int} radius The radius value to use for the new Circle. - * @type Circle - */ -Circle.createCircle = function(radius){ - return new Circle(radius); -} - - -/** - * Create a new Coordinate instance based on x and y grid data. - * @class Coordinate is a class that can encapsulate location information. - * @param {int} [x=0] The optional x portion of the Coordinate - * @param {int} [y=0] The optinal y portion of the Coordinate - */ -function Coordinate(x, y){ - if (x){ - this.x = x; - if (y){ - this.y = y; - } - } -} - -/** - * The x portion of the Coordinate - * @type int - * @see #getX - * @see #setX - */ -Coordinate.prototype.x = 0; - -/** - * The y portion of the Coordinate - * @type int - * @see #getY - * @see #setY - */ -Coordinate.prototype.y = 0; - -/** - * Gets the x portion of the Coordinate. - * @type int - * @see #setX - */ -Coordinate.prototype.getX = function(){ - return this.x; -} - -/** - * Get the y portion of the Coordinate. - * @type int - * @see #setY - */ -Coordinate.prototype.getY = function(){ - return this.y; -} - -/** - * Sets the x portion of the Coordinate. - * @param {int} x The x value to set - * @see #getX - */ -Coordinate.prototype.setX = function(x){ - this.x = x; -} - -/** - * Sets the y portion of the Coordinate. - * @param {int} y The y value to set - * @see #getY - */ -Coordinate.prototype.setY = function(y){ - this.y = y; -} - -/** - * @class This class exists to demonstrate the assignment of a class prototype - * as an anonymous block. - */ -function ShapeFactory(){ -} - -ShapeFactory.prototype = { - /** - * Creates a new {@link Shape} instance. - * @return A new {@link Shape} - * @type Shape - */ - createShape: function(){ - return new Shape(); - } -} - -/** - * An example of a singleton class - * @param ... Arguments represent {@link coordinate}s in the shape. - * @constructor - */ -MySingletonShapeFactory = function(){ - - /** - * Get the next {@link Shape} - * @type Shape - * @return A new {@link Shape} - */ - this.getShape = function(){ - return null; - } - -} - - -/** - * Create a new Foo instance. - * @class This is the Foo class. It exists to demonstrate 'nested' classes. - * @constructor - * @see Foo.Bar - */ -function Foo(){} - -/** - * Creates a new instance of Bar. - * @class This class exists to demonstrate 'nested' classes. - * @constructor - * @see Foo.Bar - */ -function Bar(){} - -/** - * Nested class - * @constructor - */ -Foo.Bar = function(){ - /** The x. */ this.x = 2; -} - -Foo.Bar.prototype = new Bar(); -/** The y. */ -Foo.Bar.prototype.y = '3'; diff --git a/doc/jsdoc-toolkit/app/test/lend.js b/doc/jsdoc-toolkit/app/test/lend.js deleted file mode 100644 index 92b15d5ad..000000000 --- a/doc/jsdoc-toolkit/app/test/lend.js +++ /dev/null @@ -1,33 +0,0 @@ - /** @class */ -var Person = Class.create( - /** - @lends Person.prototype - */ - { - initialize: function(name) { - this.name = name; - }, - say: function(message) { - return this.name + ': ' + message; - } - } - ); - -/** @lends Person.prototype */ -{ - /** like say but more musical */ - sing: function(song) { - } -} - -/** @lends Person */ -{ - getCount: function() { - } -} - -/** @lends Unknown.prototype */ -{ - notok: function() { - } -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/memberof.js b/doc/jsdoc-toolkit/app/test/memberof.js deleted file mode 100644 index 883bbdeb0..000000000 --- a/doc/jsdoc-toolkit/app/test/memberof.js +++ /dev/null @@ -1,19 +0,0 @@ -/** @constructor */ -pack = function() { - this.init = function(){} - function config(){} -} - - pack.build = function(task) {}; - -/** @memberOf pack */ -pack.install = function() {} - -/** @memberOf pack */ -pack.install.overwrite = function() {} - -/** @memberOf pack */ -clean = function() {} - -/** @memberOf pack-config */ -install = function() {}; diff --git a/doc/jsdoc-toolkit/app/test/memberof_constructor.js b/doc/jsdoc-toolkit/app/test/memberof_constructor.js deleted file mode 100644 index 80fde735c..000000000 --- a/doc/jsdoc-toolkit/app/test/memberof_constructor.js +++ /dev/null @@ -1,17 +0,0 @@ -/** @constructor */ -function Circle(){} - -/** - @constructor - @memberOf Circle# - */ -Circle.prototype.Tangent = function(){}; - -// renaming Circle#Tangent to Circle#Circle#Tangent - -/** - @memberOf Circle#Tangent# - */ -Circle.prototype.Tangent.prototype.getDiameter = function(){}; - - diff --git a/doc/jsdoc-toolkit/app/test/module.js b/doc/jsdoc-toolkit/app/test/module.js deleted file mode 100644 index 5b3fe42c5..000000000 --- a/doc/jsdoc-toolkit/app/test/module.js +++ /dev/null @@ -1,17 +0,0 @@ -/** @namespace */ -myProject = myProject || {}; - -/** @namespace */ -myProject.myModule = (function () { - /** describe myPrivateVar here */ - var myPrivateVar = ""; - - var myPrivateMethod = function () { - } - - /** @scope myProject.myModule */ - return { - myPublicMethod: function () { - } - }; -})(); \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/name.js b/doc/jsdoc-toolkit/app/test/name.js deleted file mode 100644 index e88a51a71..000000000 --- a/doc/jsdoc-toolkit/app/test/name.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - @name Response - @class -*/ - -Response.prototype = { - /** - @name Response#text - @function - @description - Gets the body of the response as plain text - @returns {String} - Response as text - */ - - text: function() { - return this.nativeResponse.responseText; - } -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/namespace_nested.js b/doc/jsdoc-toolkit/app/test/namespace_nested.js deleted file mode 100644 index 46cafa2fa..000000000 --- a/doc/jsdoc-toolkit/app/test/namespace_nested.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - @namespace This is the first namespace. -*/ -ns1 = {}; - -/** - This is the second namespace. - @namespace -*/ -ns1.ns2 = {}; - -/** - This part of ns1.ns2 - @constructor -*/ -ns1.ns2.Function1 = function() { -}; - -ns1.staticFunction = function() { -}; - -/** A static field in a namespace. */ -ns1.ns2.staticField = 1; diff --git a/doc/jsdoc-toolkit/app/test/nocode.js b/doc/jsdoc-toolkit/app/test/nocode.js deleted file mode 100644 index 1cf99bc98..000000000 --- a/doc/jsdoc-toolkit/app/test/nocode.js +++ /dev/null @@ -1,13 +0,0 @@ -/**#nocode+*/ - /** - @name star - @function - */ - function blahblah() { - - } -/**#nocode-*/ - -function yaddayadda() { - -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/oblit_anon.js b/doc/jsdoc-toolkit/app/test/oblit_anon.js deleted file mode 100644 index 8d9e9413e..000000000 --- a/doc/jsdoc-toolkit/app/test/oblit_anon.js +++ /dev/null @@ -1,20 +0,0 @@ -/** the options */ -opt = Opt.get( - arguments, - { - d: "directory", - c: "conf", - "D[]": "define" - } -); - -/** configuration */ -opt.conf = { - /** keep */ - keep: true, - /** base */ - base: getBase(this, {p: properties}) -} - - - diff --git a/doc/jsdoc-toolkit/app/test/overview.js b/doc/jsdoc-toolkit/app/test/overview.js deleted file mode 100644 index 1dfc09b1f..000000000 --- a/doc/jsdoc-toolkit/app/test/overview.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @overview This "library" contains a - * lot of classes and functions. - * @example -
-	var x (x < 1);
-	alert("This 'is' \"code\"");
- 
- * @name My Cool Library - * @author Joe Smith jsmith@company.com - * @version 0.1 - */ - -/** - * Gets the current foo - * @param {String} fooId The unique identifier for the foo. - * @return {Object} Returns the current foo. - */ -function getFoo(fooID){ -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/param_inline.js b/doc/jsdoc-toolkit/app/test/param_inline.js deleted file mode 100644 index 09845b283..000000000 --- a/doc/jsdoc-toolkit/app/test/param_inline.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - @constructor - @param columns The number of columns. -*/ -function Layout(/**int*/columns){ - /** - @param [id] The id of the element. - @param elName The name of the element. - */ - this.getElement = function( - /** string */ elName, - /** number|string */ id - ) { - }; - - /** - @constructor - */ - this.Canvas = function(top, left, /**int*/width, height) { - /** Is it initiated yet? */ - this.initiated = true; - } - - this.rotate = function(/**nothing*/) { - } - - /** - @param x - @param y - @param {zoppler} z*/ - this.init = function(x, y, /**abbler*/z) { - /** The xyz. */ - this.xyz = x+y+z; - this.getXyz = function() { - } - } -} diff --git a/doc/jsdoc-toolkit/app/test/params_optional.js b/doc/jsdoc-toolkit/app/test/params_optional.js deleted file mode 100644 index 18bf59829..000000000 --- a/doc/jsdoc-toolkit/app/test/params_optional.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * @param {Page[]} pages - * @param {number} [id] Specifies the id, if applicable. - * @param {String} [title = This is untitled.] Specifies the title. - */ -function Document(pages, id, title){ -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/prototype.js b/doc/jsdoc-toolkit/app/test/prototype.js deleted file mode 100644 index 114700837..000000000 --- a/doc/jsdoc-toolkit/app/test/prototype.js +++ /dev/null @@ -1,17 +0,0 @@ -/** @constructor */ -function Article() { -} - -Article.prototype.init = function(title) { - /** the instance title */ - this.title = title; - - /** the static counter */ - Article.counter = 1; -} - -a = new Article(); -a.Init("my title"); - -print(a.title); -print(Article.counter); \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/prototype_nested.js b/doc/jsdoc-toolkit/app/test/prototype_nested.js deleted file mode 100644 index e8ca1ced2..000000000 --- a/doc/jsdoc-toolkit/app/test/prototype_nested.js +++ /dev/null @@ -1,9 +0,0 @@ -/** @constructor */ -function Word() { -} - -Word.prototype.reverse = function() { -} - -Word.prototype.reverse.utf8 = function() { -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/prototype_oblit.js b/doc/jsdoc-toolkit/app/test/prototype_oblit.js deleted file mode 100644 index 6cfc39caf..000000000 --- a/doc/jsdoc-toolkit/app/test/prototype_oblit.js +++ /dev/null @@ -1,13 +0,0 @@ -/** @constructor */ -function Article() { -} - -Article.prototype = { - /** instance get title */ - getTitle: function(){ - } -} - -/** static get title */ -Article.getTitle = function(){ -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/prototype_oblit_constructor.js b/doc/jsdoc-toolkit/app/test/prototype_oblit_constructor.js deleted file mode 100644 index 924824864..000000000 --- a/doc/jsdoc-toolkit/app/test/prototype_oblit_constructor.js +++ /dev/null @@ -1,24 +0,0 @@ -/** @constructor */ -function Article() { -} - -Article.prototype = { - /** @constructor */ - Title: function(title) { - /** the value of the Title instance */ - this.title = title; - }, - - init: function(pages) { - /** the value of the pages of the Article instance */ - this.pages = pages; - } -} - -f = new Article(); -f.init("one two three"); - -t = new f.Title("my title"); - -print(f.pages); -print(t.title); \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/public.js b/doc/jsdoc-toolkit/app/test/public.js deleted file mode 100644 index 35d34f6f0..000000000 --- a/doc/jsdoc-toolkit/app/test/public.js +++ /dev/null @@ -1,10 +0,0 @@ -/**@constructor*/ -function Foo() { - /** - @public - @static - @field - */ - var bar = function(x) { - } -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/scripts/code.js b/doc/jsdoc-toolkit/app/test/scripts/code.js deleted file mode 100644 index e9d7ed2ec..000000000 --- a/doc/jsdoc-toolkit/app/test/scripts/code.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - @class - */ -function thisiscode() { -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/scripts/notcode.txt b/doc/jsdoc-toolkit/app/test/scripts/notcode.txt deleted file mode 100644 index fcd737e77..000000000 --- a/doc/jsdoc-toolkit/app/test/scripts/notcode.txt +++ /dev/null @@ -1,5 +0,0 @@ -(This is not code) -function foo(){{{{ -( -! -@ \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/shared.js b/doc/jsdoc-toolkit/app/test/shared.js deleted file mode 100644 index e1c277a6f..000000000 --- a/doc/jsdoc-toolkit/app/test/shared.js +++ /dev/null @@ -1,42 +0,0 @@ - -/** - * Builtin object. - * @class - * @name Array - */ - -/**#@+ - * Extension to builtin array. - * @memberOf Array - * @method - */ - -/** - * @returns Boolen if some array members... - */ -Array.prototype.some = function(){}; - -/** - * Change every element of an array. - * @returns Filtered array copy. - */ -Array.prototype.filter = function(){}; - -/**#@-*/ - - -/** - * A first in, first out data structure. - * @constructor - */ -Queue = function(){}; - -/**#@+ - * Extension to Queue. - * @memberOf Queue - */ - -rewind = function(){ -} - -// should close automatically here. \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/shared2.js b/doc/jsdoc-toolkit/app/test/shared2.js deleted file mode 100644 index 3f7736a77..000000000 --- a/doc/jsdoc-toolkit/app/test/shared2.js +++ /dev/null @@ -1,2 +0,0 @@ -startOver = function(){ -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/shortcuts.js b/doc/jsdoc-toolkit/app/test/shortcuts.js deleted file mode 100644 index f738f1e1c..000000000 --- a/doc/jsdoc-toolkit/app/test/shortcuts.js +++ /dev/null @@ -1,22 +0,0 @@ -// /**#=+ -// * { -// * 'D': 'Date.prototype', -// * '$N': 'Number' -// * } -// */ -// var D = Date.prototype, -// $N = Number; -// -// D.locale = function(){ -// }; -// -// /** -// @return {string} The cardinal number string. -// */ -// $N.nth = function(n){ -// }; -// -// LOAD.file = function(){ -// } -// -// /**#=-*/ \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/static_this.js b/doc/jsdoc-toolkit/app/test/static_this.js deleted file mode 100644 index 9407b20f3..000000000 --- a/doc/jsdoc-toolkit/app/test/static_this.js +++ /dev/null @@ -1,13 +0,0 @@ -/** the parent */ -var box = {}; - -/** @namespace */ -box.holder = {} - -box.holder.foo = function() { - /** the counter */ - this.counter = 1; -} - -box.holder.foo(); -print(box.holder.counter); diff --git a/doc/jsdoc-toolkit/app/test/synonyms.js b/doc/jsdoc-toolkit/app/test/synonyms.js deleted file mode 100644 index 09066b98f..000000000 --- a/doc/jsdoc-toolkit/app/test/synonyms.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - @class - @inherits Bar#zop as #my_zop -*/ -function Foo() { - /** this is a zip. */ - this.zip = function() {} - - /** from Bar */ - this.my_zop = new Bar().zop; -} - -/** - @class - @borrows Foo#zip as this.my_zip -*/ -function Bar() { - /** this is a zop. */ - this.zop = function() {} - - /** from Foo */ - this.my_zip = new Foo().zip; -} - -/** @namespace */ -var myObject = { - /** - @type function - */ - myFunc: getFunction() -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/tosource.js b/doc/jsdoc-toolkit/app/test/tosource.js deleted file mode 100644 index 706d47652..000000000 --- a/doc/jsdoc-toolkit/app/test/tosource.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * @param {Object} object - * @return {string} - */ -function valueOf(object) {} - -/** - * @param {Object} object - * @return {string} - */ -function toString(object) {} - -/** - * @param {Object} object - * @return {string} - */ -function toSource(object) {} - -/** - * @param {Object} object - * @return {string} - */ -function constructor(object) {} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/app/test/variable_redefine.js b/doc/jsdoc-toolkit/app/test/variable_redefine.js deleted file mode 100644 index 2c07da09a..000000000 --- a/doc/jsdoc-toolkit/app/test/variable_redefine.js +++ /dev/null @@ -1,14 +0,0 @@ -/** @constructor */ -function Foo() { - var bar = 1; - bar = 2; // redefining a private - - this.baz = 1; - baz = 2; // global - - /** a private */ - var blap = { - /** in here */ - tada: 1 - } -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/changes.txt b/doc/jsdoc-toolkit/changes.txt deleted file mode 100644 index d664750f3..000000000 --- a/doc/jsdoc-toolkit/changes.txt +++ /dev/null @@ -1,107 +0,0 @@ -== 2.3.2 == - - * Minor update to the usage notes and corrected the version number displayed in the output. - -== 2.3.1 == - - * Fixed HTML typo in allfiles template. (issue #228) - * Modified template to display version information for classes. - * Modified template to better support multiple methods with the same name. - * Fixed bug that caused template to error when backtick characters appeared around class names. - -== 2.3.0 == - - * Added option -u, --unique to avoid bug that causes multiple symbols with names that differ only by case to overwrite each others output on case-insensitive filesystems. ( issue #162 ) - * Fixed bug where {@links} in @deprecated tags did not resolve. ( issue #220 ) - * Fixed bug that caused parens around a function to make it to be unrecognized. ( issue #213 ) - * Fixed bug prevented explicit links to named anchors from working (thanks katgao.pku). ( issue #215 ) - * Fixed bug that prevented full description from appearing in file overview. ( issue #224 ) - -== 2.2.1 == - - * Fixed bug with class template, where sorting of methods was accidentally removed (thanks dezfowler). - * Added missing test files for the @exports unit tests. - -== 2.2.0 == - - * Fixed bug that caused exception when given a folder containing non-js files, even with the x commandline option set to "js". ( issue #193 ) - * Fixed typo in index template [patch submitted by olle]. ( issue #198 ) - * Modified @borrows tag experimentally to allow for missing "as ..." clause. - * Added support for the @exports tag, to allow one symbol to be documented as another. - * Added support for the -S option to document code following the Secure Modules pattern. - -== 2.1.0 == - - * Added support for the @event tag. - * Fixed bug that prevented the : character from appearing in symbol names. - * Fixed bug that prevented underscored symbols marked with @public being tagged as private. (issue #184 ) - * Fixed bug that randomly affected the @memberOf tag when the name of the symbol did not include the parent name. - * Fixed bug that prevented templates that were not in the jsdoc-toolkit folder from being found. ( issue #176 ) - * Added ability to check for trailing slash on template path. ( issue #177 ) - * Modified classDesc so that it no longer is appended with the constructor desc. - * Fixed call to plugin onDocCommentSrc. - * Added missing support for inline doc comments for function return types. ( issue #189 ) - * Added command line option -q, --quiet. - * Added command line option -E, --exclude. ( issue #143 ) - * Added 2 more hooks for plugins. ( issue #163 ) - * Added support for extending built-ins. ( issue #160 ) - * Added "compact" option to JSDOC.JsPlate.prototype.process. ( issue #159 ) - * @augments no longer documents static members as inherited. ( issue #138 ) - * @link to a class now goes to the page for that class, not the constructor. ( issue #178 ) - * Warnings of mismatched curly brace now include filename. ( issue #166 ) - * Fixed bug affecting template paths loaded via a configuration file when the trailing slash is missing. ( issue #191 ) - * Minor optimizations. - -== 2.0.2 == - - * Fixed bug that sometimes caused an example of division in the source code to be interpretted as a regex by the JsDoc Toolkit analyzer. ( issue #158 ) - * Fixed a bug that prevented private variables marked as @public from appearing in the documentation. ( issue #161 ) - * Fixed bug that prevented variable names with underscored properties from appearing in summaries. ( issue #173 ) - -== 2.0.1 == - - * Fixed bug that prevented @fileOverview tag from being recognized. - * Added support for @fieldOf as a synonym for @field plus @memberOf. - * Added support for @name tag in a @fileOverview comment to control the displayed name of the file. - * Added support for multiple @example tags. ( issue #152 ) - * Modified style sheet of jsdoc template to make more readable. ( issue #151 ) - * Fixed bug that prevented @since documentation from displaying correctly when it appeared in a class. ( issue #150 ) - * Fixed bug that caused inhertited properties to sometimes not resolve correctly. ( issue #144 ) - * Modified so that trailing whitespace in @example is always trimmed. ( issue #153 ) - * Added support for elseif to JsPlate. (hat tip to fredck) - * Added support for @location urls in the @overview comment to the jsdoc template. - -== Changes From Versions 1.4.0 to 2.0.0 == - - * Upgraded included version of Rhino from 1.6 to 1.7R1. - * Removed circular references in parsed documentation objects. - * Improved inheritance handling, now properties and events can be inherited same as methods. - * Improved handling of cross-file relationships, now having two related objects in separate files is not a problem. - * Improved ability to recognize membership of previously defined objects. - * Added ability to redefine parsing behavior with plugins. - * @methodOf is a synonym for @function and @memberOf. - * Added @default to document default values of members that are objects. - * Added ability to parse and refer to inner functions. - * Fixed bug that appeared when calling a method to set properties of the instance referred to by "this". - * Added ability to automatically create links to other symbols. - * New "jsdoc" template now produces fully W3C valid XHTML. - * Inline parameter type hint comments are now documented. - * Fixed error: Locally scoped variables (declared with var) no longer appear as global. - * It is now possible to run JsDoc Toolkit from any directory. - * Added support for inline {@link ...} tags. - * Added support for the -H command-line option to allow for custom content handlers. - * Tag names @inherits and @scope changed to @borrows and @lends. - ? Combining @constructor in a doclet with @lends now supported. - * Multiple @lend tags now supported. - * Added support for the @constructs tag, used inside a @lends block. - * Added support for the @constant tag. - * Fixed bug that prevented the use of [] as a default value. - * Added support for the @field tag. - * Added support for the @public tag (applied to inner functions). - * @namespace tag can now be applied to functions, not just object literals. - * Added support for the -s command line option to suppress source code output. - * Added new unit test framework. - * Underscored symbols are now treated as if they have a @private tag by default. - * Improved support for anonymous constructors. - * Added support for the nocode meta tag. - \ No newline at end of file diff --git a/doc/jsdoc-toolkit/conf/sample.conf b/doc/jsdoc-toolkit/conf/sample.conf deleted file mode 100644 index ad0f08e65..000000000 --- a/doc/jsdoc-toolkit/conf/sample.conf +++ /dev/null @@ -1,31 +0,0 @@ -/* - This is an example of one way you could set up a configuration file to more - conveniently define some commandline options. You might like to do this if - you frequently reuse the same options. Note that you don't need to define - every option in this file, you can combine a configuration file with - additional options on the commandline if your wish. - - You would include this configuration file by running JsDoc Toolkit like so: - java -jar jsrun.jar app/run.js -c=conf/sample.conf - -*/ - -{ - // source files to use - _: ['app/test/jsdoc_test.js'], - - // document all functions, even uncommented ones - a: true, - - // including those marked @private - p: true, - - // some extra variables I want to include - D: {generatedBy: "Michael Mathews", copyright: "2008"}, - - // use this directory as the output directory - d: "docs", - - // use this template - t: "templates/jsdoc" -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/java/build.xml b/doc/jsdoc-toolkit/java/build.xml deleted file mode 100644 index bb845ce3a..000000000 --- a/doc/jsdoc-toolkit/java/build.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/jsdoc-toolkit/java/build_1.4.xml b/doc/jsdoc-toolkit/java/build_1.4.xml deleted file mode 100644 index ab408a4c4..000000000 --- a/doc/jsdoc-toolkit/java/build_1.4.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/jsdoc-toolkit/java/classes/js.jar b/doc/jsdoc-toolkit/java/classes/js.jar deleted file mode 100644 index 0352cb180c120868ddbc31b4f8e7319d2f26ea62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 819369 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�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%0D0}ve&kyVxrmLD3a%OoJGjT)4!e~>YoAf7U8CGl< zKAMc2WW$JKzmRbU=SM7=5O<))mndFl3{UML94 zX-LxDDAC_2+m{t~JK#PBRVTx-D}!AWeL0ZB276mD@CXR+B4UBb&pL3(5bv2{f%2Ek z-H;vjZ?K^Gi687fyHI{4l@QFS$P{3v%QfB@QT0NyfR`#T%9Se76tx--iIuL?k2=v8kuShwUWPk!Ak1T9LyDz*cRB&!9Gx2mV7pa!QD(IEechC z@QBFY{;_olj=jA{;g#htF+VYXpy`sHne%=Kj8tn8M3QXE>&wWn_;p;*lMO1jtid*Y z!stm!w4{*+g!f=r$pDceGSGHf2>~oze{kuUgNho65<7 zoD$V)z2K=tm&&K^JWFueo^J17)|m9iyTFWHK#_4>b0n|xmSP$5suyxN^1UjI3VuZY zd89Z%*Z`j7p1KtrNsM%>5!?$mD6~Sc1wVvZ+mnN3EZ0sxWZ3&U%!M_aXKQr;8ulWo8cx@>T>ZqLE2=7nOPXvaO`qGJiYYsW=P&<1f3 zr`pVf;tmEHV8JEGXy!m3t0*Vzg#=5SBC{ivQ# z{|Ui#s(K<{JD}kO4Rva(A=eY=`d|$)X9=-jZ;0Fl-!dO|v4%gO_r`ls$luHOhTJLf zC)E9<_J;2VG+jLNvpoOJS6a)U*?1r@74Y+d61N&luYBx-)PkCxV{%AHjhFyH*K1*i zp9A(iME<yJ$!ae;BlLYFJ6n}%D!Y_k6uK{d#lzJYHO`|%exoL+ z1#}H2%GjgE?qyl0BJSi4vT<&T$fKf3GR?#*gr0NKfjBuQ2e;&9XAZ(~Ldj>g4@Ihw>t2}!8UpB$Q-RJ-F=2OJs8nlT%H1fo1(u$r5G%@qx zUTwlPuxJs`zf>EYwF~N7zhqF`08IjP7-TkQRiDdIEMA2YUE-zJUK&QV!+)&nL0G_x z{dCAQO)Fmr${1r<_+Z|Wi2~;;;|Z2`vFKW@1-sb^aST#k9IMNbWSUiwj8b?=RcGA~ z@1;dZ#gnDhHP#CeQ_|lI(zyPjIDy#cst`%6dur%itQQv^YLB0|dAvca9%@64tK&WT zf)lnRsYMco0PZNPL*#F@pnsa%RVgEy)bau~&3OQ)cz}~X;Eu$)I0fJo4!F}Tn~&{v zqD!#`xIHx*I}|_JECO*iB~4JW|IJZQ;U?sxT45wt^^vF&Z)>el4Hc~--4EPu z45=3#(SR2Zh>ONklf2zbHecUMAI!(Ji@CQc-blTpiBmBv^@$tWd`G!RyFE7f@O1uY z<@6I7V#qz-L7Wo_%B>V4B zvR^^i0mj@In?i|+^*p0Y4MovnW@F0&X!C5+jlh;d$blWRC=jDyN=Wm|ET?zAAFF># z^k=d#VH@J>p?&=BS)8xio^v}oGwi>;Poey;cl8Nb2=PU5W$ICcbi{;K!#<5T5qkT8 za*;Mlhmy>LCmRWQ!tx>xJ?n9hAi_|8AYVfWM+Ee#X}>)*b>f0=p#11a{0L3{Pzvaw z!s{WY*G3)2V0}Q@hu)xVqfKx_ZKEn(hs=gQ4_#Tn#_qMQ`VyoP|N7wahX>shH{wL> zw|5Zg8$mj|YfqS;_iay*H)ZDD&mxh~CYiLFF}o{CWqfaP5qu_Xq2>R`TOv=BDjTzm z=+aWUo)2|}e9RGE4`0q)W*S@8TaYkKJf}#MuzvM1SHqr#g>+AjXxi}*;QW45Av4{k zFW_uAH_N76RC|<+-)ID8(c8!vKhX`@^V?djc`T)MZ-5;B%SiO)W;cFhKt)fup23<} zJ+Ky3?xJOly89ZOFrHDZo0)+%*K#8khl{0~l`@{*o-jAheb*@{vtr&^O|PRT5mx ztdLm8gp^0vN}qx``w@uRmH~d#?afUUb}~sqI$e2<+y_AhgDb00+yh%?^W>L&AYhRrg*TQ| zd57LV<-?$lWhhvaueeU&5-?PTNI>rE#<;|EB>RR}9nY4-JweR=s={N`3s*Pf!}uNZc(JXqtpK}oY zzy+$W@EMg4NKRC92el#MRWd@R1<0{-JxxMv=yDeEyh!Jl?8bc2A%u0*Y<0(9qNq6@ z8X8#2^|;)@v#pU){g2YERlCrre}+*(^($VW)Q9c>!Ke#f#>J9D`Zwx*BReWGyP1JK zl`mjB6))g5j`93jM{dNp#Gu{@Y6+rpef*rqCA2o&F=`E~dQtYe=~b?b^U$FM<}%OQ zyxHdqXfElI*iLOOk>+4=`%ibmEIg+M=|0iZtPeWN3@xZkW>y+IHW-=*dXVrc+>Rwq zMvdw9nHj8X*YYQvhPo^k>d#MGxLe%qFH#EX5u{jx(VthmIP?jv6vltFW=N(4sg9sO zJ;km3NbqXCN?rjv)0x6ks<=6SJIh)xQX!o+3<8c^7p8H*vof~gF;C`15RZ0l`RgxlA()L0=p^X8gv`}P@1=*g$45kkxsPK{MMKv_PryNua z@{TO&Dg)WcW)!b<*cDdBA6e-CS=e-ex?k3$&G|i1I_4)?6Z>E@bHw$C$h&2YZwx<0 z5T~5>QIwYRZuZ;t{&lyrR}<6>Z&b5%bP|RxLoIyvRdSZv48<85K8 z*#nvRLVGZjV<84j(sY*w{(KiF9t}9A9I(dy_E=Off^~=7PV=mei4}}w)Ac7`_xZKm znA)#Z^SFHQ-p1!ofH(M)cw=9S*s@j)c=fJ-#w#TPkimGD<tQpFT+7g0r0sMkl5zXwI2obL`m>oT|$ng z8#s7tknvnN9KCLc@Am3v_ka8wQcWYJ0vmzVs1`i!Kc=y75xn9?RD(}b$y6PNAMv$Q z?_dq|mRchBSQYHXQ045y3ivSMN5gMz`hlm8RlgO*o~TRr`d79C1NT-?6zjw&2-Ol| zR?%CR)*DahRht6f?gV=NfNxD31k7{mRhu-lqg@LbHg%#Gw>bd(Hg*}YlhC38! z`oq~d#$_$n)75z+q?5n%v_*uooG@Lv59|8F^w50NofkNcpkIy{H|GeTJMar@IF|_~ zQWyb6z8SKLS7gjQ4qVOR~$bE3%)rj^=1L^6F4zI+x>KjlnZB#YMDMwy1j)m zU3r7|q$>rF&U}!F2VN@CvFmJ{G)PaBABL~d6RAkpLx0CiB1kq-om=l>j05sJ!$WK% z7ttW7k;`DI4R=Io?sh5IBy0uy4nU5=rPJ@CHUbMFBDS_{`y3pEcG<6@V~r&_I6}R{ z5yR2yABa*t5#V$N8brnCEJ_EDi$qQo%{cFo;GjYv7a1ZQ{2`&h?G`ubrb%{L6Ysdl zAFc%zV>$pYTpS@a1P0NR$XX^xE-gtnjGC|{VZPdo2Nkbr=e+cng5jJ01aKe<|M*^{1QQ!_RkrkIgh z6Z>8sOYWD3i8J(mshu20tqN}eIVRFTb<8Z^QO)`k8Ht(}=1^mg@vUIuV|%r*`h;y7 zZW;pU>t-dLKc$YE7cmgIXHrgv8YsJFbLKxB92lMzwVFJfC#?oj7~S>;em9Qw>$)yh zkkS9~low18C-jz2i!pdl?;ISZUl>IX-;3mCSJ|ARY}kgXT7#{^#Jr>UeGnFPFla_z z2kOS4Xn2c-LSHFw6BUkIk^QEhHU#L6IhT|kfB9eYlcEn#-_6hb^!KOJ%lLnppH%D} z{>KP4rGEKG`4F>P&NArSikJ(UiuAPUQ(abDo(WBgp{u76|@7T#bBs*ku2zS2$Is*?mu zT=C;qa`nqkn}<-znWciqYZ1Q zSV|7M0z!LEOXkKYr#nmT4pzTXkaFGrr74etPDzxuRp#NTMdPuQ{JR9vg=)4 zZf;2#o5pV1o{$BP9aFw$&cl;#?BqJ+IhS@x1hrcYR$EKf*xc^gl4;hDw~L=!sU2L# zN1i&7@8Q)XgbvzVS#Ii5>ByMQ;~Ri&Hs#cXW*2PG+Ggd{V9WCbO>5zTmIbHg^c+m- zvW6s=fg)y{G;-4xa#>v2bKBC6wiUkgX_HAaLY_RAdCnHkpwp6P&CBdnqvLV9xqg9R zWeP(#SZRukaV8`ACK8;KcCeRrZDoK3;H4vEX_O%yz0 zfN>;LB~pPA_M7(DDG7;m^?{ws*o+Cy*jV-(X~?|_)9~o?DR=S4W^CEWHKiq`o03>$ z4{0Hj2A;WFwr#@3uP7=?AB|#T2y)l#eoNe*eoM%>2xUb>bM0bu*Q%Q6@No8|X6YTh zg-goE1~t#}-4f=)u9H5O8kV~<3cPtyipPXN-sZoPjE&;g{LmH>9}gB z=AH)Uh9f(AgI)WI)&WOzqfq~4LWJ5PO{DeH?V53Wb7Kj;wbqDz1l(+g+16RqS>{auEX8f>3x1~}d z(ISU?ORHF02YXHvvm2Wr1V?=lR=#SjK-Yv>f9fmkUZpCW-2A@}5<23(_U4Ge2zeE( zydpLIma>=I@3{*roaI64zbrW5tn42d)!SHFmI8`@tcadW~|8V&vy>LER* zztWOXt8geCw*OlYy##FHaihw6KC5TPbqcx3FK^Eb=DMS%iO*Ze5KX2_xJ}Dpvx_DS zR=Z5;<&2{mQEZ2FCZGfOk>a4K17C&AyLB7~5c<2f&l(2+F>0Op_78%nwxTw_ul(hY1mGP-35`YKrKMpyoxQU zY%z$g?91Ngf}26GrlQzu_nuv{t!aUzw?!1xZ{bM4KboZ(+blg0Vr08h(|2z4LwUk2 zL%)&!Ip0WAOo4(GM6?OWu>GShgQqkvuuBW2BUlyefz61G)50R1?u9$smOSnWq3lfS zUlskp?^R0waLpjPL%Y2sYUa%qr?#9zq3K66qVut?eOcDKt?t^_?l?|}`*Y5NVEWdI zx*^pq`KMIPu#Z0#wZOL3|1GwJc{b!U#+2!SPY208d zkVp-J%pdQsOCjNVl*T{nrT$Fveg+DvDu6=bGEwRqE8e$DvO~vR1K;q%3wBT5 zJ|?}~XS5OsShF|c`ACc&eK_?ZiC1RtRuo2OZg~2?$LfwyvclOKcY2_u2=YKPbIZqTe}1hT6hnbimiBjo{yV0dc>~QAch$Sj zbyB0fxs!hK3XJiqagY0#)|BB50uG)Tsy|FfmX@aRp2oQ0LrXlSDkAbv9Z}l&mwu%Y z2-XiOE8Mi&N~4-PkWx$l20Km|y{k@Z@GhMI@q4CVEG*s3A`Q_OG2kHG+9C}hW^8-R zpAbGo^)*24@Wq^5Xi8>T@%q}p7TA~%wbqC$mWf*5SR}3hv9@uzOHf{J_PpifeM8~^ z*U19n-60W?Q*=6exbRF#uW2r;U z=GbGmum8tw@SpghYem+z=^wi92M!R>4-o~(-pQQa*51p~#>SA|>W4PuZ0uy|;6g8F z=wj(+Dr@Ls@n5-9j5?%G@)F=X&%W87OqdBKDIUQso`j_8FUEis5+NgIYOpGaTp}Ti zoZ0?l@K6le%6fO0mM;xev_Z^U6_l04P$2ZoaZPozk#%*)-{nu$O0}JDza0`xHq#^b ztF~|NXCQ*>5&bt?YY~U*k_l{+JpF5co(0t17h6o+1vV9c^99G17_U3^OybrdfgZPkA;xF zmvPAsed>enhMBrc_s{tjilPJTcbMZk`*Z5ye`hbte8SxJE8E~`|4v?}`98Pm&3(RQ zDK9@a_&zHyH2d~pcg|n7`95pq_0xIJa%6D%70BCchu#{@T?2gI_&d(`kz{FbB&+D^ zBXX<}!YWRscAKuhQHEzkhhS7&FVB0fY|jcKWmHYpR!UVa`HLQJ%l_6Z1ayGLC*RKV)K0(k2pCU{pjJ!eL$s5yNqr1otAt4+{m{ z^c&FNMT()Rs6rHJ&6e_DMUeka80;5l<+bSWG5p#*Pvw2>6sXP7uPlcU8|hi=i%o%z6NU)YthPE`1 zpwY}s*H_rq^z(uf71pYw8bzI|K;FREx2E2Ftt12MJNOprDBaBJW0>xN-CTj$d|9N> zyoOVBAMzk3lqVnx*7g2qMc#s;9fqN!3=Q~r!QgUo=mkrv51k@?k*;#e_< zW*^y{5XbTBK3kOs0|Gqjlv^4!)#9K6|MUc&M5rT1fj-8gF zF%nTj>WB?Mcy9}|4w6-!It*~onDyMmt+wK8*dV0f(tp0o#^T5y`nBkFvVG=%RCW&lGot0G@Eb|T?P_NI`8r!Q zb0d9Jb-}S5`l>RD{n!oTJ`eBo8f*QL*4QS82A;So)B=fn!>|lpkB3)ORYh;c@`%B? zM@refWZ<^R2Ujx*PkXi6q!?8(kO9AW?5$Sxj!h<{96L@)v9@9Xs4bvy6D8&1Gi%1D z2|F@+DlEyUsS?AKA_$m!VK4VGDjc|Gkbc()0V0jIX3Eu)=@mlbEhf2PXIrMe7*&oL zTI53$J3Z1FA3FDiibT{YMoC8!Vopa3X3E=E<*{%gVn|MtL~XeQ>)3T!Nr&L&{6Pi+H-RO1}2ImB?}2O#&KSUNL3WU=(5JLzEc z1$+##y2D@gS$rUG-&j7F_w!2kU1c0FUze;iMjXZ_JGDF%5jK! zKO$+PXLrCzw>09wfKMz~)T3l@;Brz3^OYEYl>Eh5a0D+FmVIwU{^aZ=Q$D17c+;*O8P;Rs5iWsh!`CA}#5&H#X{4F=m&pdgL9MlwyLJ%TxoV1+aC-(+= zsx^-`PfNlYnfZ1t5f`6J@)_^|bqYKGb7XBVW((e|UFx~@FKhHY-kxNJq$iOl%BRaV zb49p2w3Xg7c~g2@XgjVmU{kz1oF~f%?$LSFJmHxC$$+l^$Po<&&I&Z8SV`Wml30_TB*H z()L)@;j4od;Q68OC`DgsF@!0u5Lwyl^MH#BSz#!sW{<@xqx(Zf);V48h)HzPIDN*v zY?*QK43iFe)toTL4zaxs1ODD1uUDzlztIt4;)ZLw?_DESe$Kzvu|{K#BEurFTZ52! zmS{_NAtlS9dvkiQbkhLK9L2;IUVMI5V&xk*XpX4y zL_!Q3Uw+C1!CN(c6qmA81rQdUkNW7uytUxPXxrAdn-=BCl9S$!s#zE%J^WAe-o~5Z za(iD+hF^7Nc}dZ-rMT@S$DQWU=y+dL9m+mdpQy?`BxA-x0U^jl1PtKcusXrc-#-X3@Yra@y$!&E%A= zUg-xsRcvxGYy|pVro8>zyX5zTyor7q#gyc!Hb4acBX7^C4e(HrFh4I(SDP~BUDEH3%5BOS$ilZYbeY%G48UdOIXaXRArwnBZk|A?#cw{TW$UI)0L5*h>?rOByr;=-o-GFC-n1<1}~L=5784eZoHDCm%vkp@28r`dbo37DSMNBG0Xr8l(vl}I209q05MlAuNEdlFHhc`RC?V1t*W1`iZHd=1iL0$p>k_7`0Ef;6q}se z2}d1W(b^(*0HEh-_(wQqyJ=FPs(`3d+-(RNROWj^+P3Y(`9eH$aurv(7pL)6ELK0C zhoiVNDF$jsBYx;ERA#BUe$-`Sz?%bBlc)GkZUMfGCTD3c4snNf;1X^f*4rUyNp%Ch zZd?XX>SImmib&06ZZ5YCaGn$b^o3E7_Qg$PtPa9BWFM%C~lJWiMyl(mm{yIyzS?tW+g0h2+^t)iIIyq)dO=aw@}Tc$SOj zzCBn2qWcNw-;VIQ-^9t$WUNlvqc%6GApmeS+MB__5?PoCMyJhoC=iB9hFdD^^~$rnr{ zrCN>Exe`d9GL{sS>K<L{&k~W|Rj~IDg(fy(|FC3_qVn*g&miHt#{}XSp8-sOT0r^8gOD@+>k-ovBJH+O z54pJ&c<%kv?Zz1X^V6d@PSwXY_w4m;gHsRtLM_(So!M)fcIyw;z$K5;SH%}U-JB~x zMVyP*wfV3Jl~Oahsh7L&daO7^?E2JCo{w6(6R$@+hHK^g-dm??@(%9Co2N?VTp)un zvVMqFvb8JeBbP@?3~3}0XZkz?|-DUE~xlz&V4vh==kIAYJ1*%b!6ef|mRQaS)?{uoD5-B35 zbWI}G8X@2={>8Lsa*n{6wRCdfZQRG!f6L(onMsFoAT5q*PqT%48drUARRu0mzxp-y%P@ijypSie|B-msIeMlh;kbAuD%S+TMSbLC>paE(!{m zwc5lD^Rmkl_DE0)DCsiiF=hq3l;+jaXW+LyUfdgzGH#YtHLU=b5`a=j(&H?=4r1UZ&1!qcm`+Zc4nJyL_~c zM$Y%FwZ;`*`oJ(9bLPL>O51pONMO_qB9StYs>MXmP7( zuLH}?s#SA<7Rzqwh8Gr`WwT^IAH3xN4jye+uKqZj!BFLbjSS6CfAR{+8yAWG3a!z5 z@SrY|7*EBZCDeP!BhTPVVBj;*LtvDzY>%+dM}x<&Y!8uu4iVIh@~hr+J*eHNZV*r}W3dMr?se{3B{yH% zTiRP*+t{8UA&x-~fprj5zbMQr#%qUFj9v|J^PWb zY=){XflK&FeD0uAGz}3m2TfXkgvN|_%WnO{IBY>*3OR@obzdi1RD9sp0kQ7bkiQo3xbSh*>UO^|%LPy)>=9=jv2OLie#(%vnALP%Gy5X6g==?D}40@i-t-Sn_Y+N%QHRNmC)Z%?ZKnVmd=_XEzk6xtB>8WIT z)nJuKOJG0c`y$-agGByM_r0({^5iB(22im$Q)atIFM+-SLOizbkPLz2c`>|zfrjd( z<3&h|7^zXsT*iruFDNo1f76t%TYNBZVgv&`=H(0$?H_6G!V`6@!c%(y+BrI=f z`32`zC{W11Yk$3XtK3OaWuc+ZdoL^tEvwrQB>|`Y?bM7(bGoS^(I4xn*U>%%N zn-{6FNeB{jRRspGOKh$ZJ1ClqUFE^ZWrG*-BhtFXg3quoOC1Is=5P>L3-?WNTldWe zUesM|{Pjm?@1Svehbp<~M#Nn|p=!@wS$zu+T3@qccMjmW^hWVfarjwV_ar3P$`i`k zZ3A!zkZ}D5u({m!WdjSERHndPbV4UFX$x#5TM@MqgyH}n=D2?S`sv%UDzymG`{QCgDs9j6YF=|XD=lo#2YQ2hQps05@5_^RS9TaUoa!w z3SZJ_M?P5KO{?{-P;JAyhv=bg2O43l0mHW;h5Z^oKwc0*bg`t6vS8CU2Ljo04TOK~ zC0rXGMn4rVmW~!Rgp8f9HUzvXj%F##XK{>L85s=3&P+{9G|W$D8UoejCGDm5DAQ#o zNYVzQq#DyDFuISKz^KiF8=@nflyR9bZ(wh#sgE{cgmiggWPH4;LZ>~AwbjQWNrz02 zgUd6?;+T5%^_Dgfnb)nK9FZ=W_gPbXHp+=@^*Ag{cy? zbmrYTbE9H7xQFeDwz9+^BwCB+tBYnO3)$oCqzgAB?d1x&C2}*x>+C~{1q?Le;9uUlJ4(5kOW zUOB(YrLD`$K93qFjXaPAV1OrZQIk&7W7d8MNTq8xtVok~d~uZzQN~^#E?gw)u^&}h zPj;URTD+bAZkX)O0X~d2R7;qk71#!K)%n$htRnc!`#?qWjUqPJ;gm!yt)pF-I-48f zA#Iw;%pR<9X^bXIR-H`fZ<133B&0^uoFEUZ5>=EMoT2u@aqBJ->?KW)q}1pTMDAxa zc*QGsP%m@w4Z%X+7s12Uh0Y1B&34=qP83JZxFg*tGtNcVFis`M%)vk3`x}n@Apm&v zfHP-|@dg3S1ubq5q>$rGVoi{SrY4O)P!#!^&OA>LhlUhM4FSv?5du3rK&_)W1f$KL z;`V zMq&;R^!tekYO1I#(Hg}pr#x@asLCzAR%dvsNS&~3FUHETBMrXLgfEBV8kMLlc;gfS zuY9RCdOk93%V$$y3R5A`CV|K zx=SU$&y36Tialm27Dnp!#|W!TTGXl+B3W`1@2{cdFbB_xY(cHbqA8InhJLeSn;ML0 zoVzo>z8E0F8Dm}#OKr}^J_AMF^{X(jcHC-m)hY=YBe_Y4*rxmn&59r}9bY>kxgWlK z$l^S@gwAR|yo_QBcGkFW>CtjCh*ye9&^Ob%(n7S=AH#R8QU$JxZkFW1NBL=p??$iE zz6I2K?7J&EZBFjU9>pS7Rl2=ry{+J#ZodV1zpQ_SC*Z9I>D_esi#1ek^3tJh1mV~_ z3Xrba(^ov9f$5N_%a%bwWc`27aALiXBppd{SUvE&f9ef}S*j?ma{=LbqYj?~4t5 z66lTS0zwvQCpNRlGB1o@shIckLaFbXO{U^X-WL_ul3y{0R0kV)tzWsKM!~m)(pd>k z5N3$ntn5YyHcY~D`fOQqcm9~^f6@JqBm4hIVkt=N-Ndl}Br)v&p#J^;X<*fwklrZE zm_NO1YuRgSkZUwm9Dz6mq=b+FAR`5uVE@Xxd>ta*1zD!h;z_&BY=XZlR`461Dobk6 zYB8uW&40x<=oGbnS=T?E7Ozycv^48gKeeb*KmVAqO_JFVw0!kvzVzI5-+0}8^&a>@ zzg%@c&;gD9UhIo#(-}ksN713<*I&JZ1ySFp!rfVlU#Zs|MZ;CUcuk45cG0Ok;KJSF zs#(3Wg=NS18;K1YJtQkA^&)}Fj{OQ}7oX8fExvJhvO>@kb|XF94Q@Ah<@5+b`62xF z7XNujYTx3b(&e|DUE)8_bF)-3azs0MLWdGgqm`+Vo0cL~#9hMLTGPCdwFXRV zbVX~c#I><}Y|^lV{(xvph_D}>sCjIXcm_AF1X`i9QXr#EWO|c%>xeH`mFmTwOUYT$ z>LN?D>h0z!$+l=|o*m;fK+lkYoDHT%vzm0RWp0jKO{pyh0T7lWcTRF-ni-i1sCNVlT;QLZ}Bmwx1g`b8k=it9jZ9&E;S@j7Wz>ok9${CHmXpuI8>-a3WTE1 z>Ml2!SU%hzADPowTE+K4$jOu>&fxsgcb%5{)y%kP2dzT4pK@2@TJ7f6-jx!pyWh+t zI2cdIplUA5MDDOuAk$*J-Z8~Fu0q8qn?b&sBJ0MrxDQF*zD=hknXC;dQ-f#q#nhVE zVP2b3dUvw^yS}f;@b@hhXC|6$>7DumSNcjbuvyp@O9@iD4o`iorrsIu4N;mV_iA!M^XIrrXLkV5Armkw#7=S9aIQlZ z%`fDO@@m$3K6YvEc+KN3yWbIq- zh=oG3zR#=wG|o;x7ctu z7Rghrv6U{C`3~tW3d;*SJ}hB0l3|GjMdfD65$A@Hp))gNTqmYXl-%(t4Apeq5&^TB zDs^lblM9q<>qmb%;rG+jC(s(ft*_7b-i$f29p4*;l-a1Q0}3aP0+G}Reb92XH9enJ z|K%)#SXrb}?%@v^1qdS6o`25?K2xtdn5?A8i~oGzH;qCyB@27=hu{Qu?~yi?S%NmebL)yJPO$Q`{(@Ejd;MtE<}XJhK^GL&;q2ZR9EG_}n7yO!-z+9F z_@_so46!z9xjY?^3Wkkkj{Za;h!vn~iiqZ=^1;5+wx|I|s0*mhCG^ag=<`!oP-F-rsGfzc#ib`D;om=j#JZh2@Wbbw<1W3ir+jEwK zX?_mdHh8{u93(!*j^H8S$ND&c^#nntD~|T=Ib5KrN|#oawJVNx;3`|$;s(vY3w}j3 z)E0mqa@y#IxUp}{a-f=Y23%RTpm&$(P-GTg2T(S@KVU3czul}yE2iwYU*f5ZUAskh zL*@tOK2MnT7=Jhb?6Xrw+osb_a7*D2uvwz2Aeo=adN7w$jwg+c+B&eqw6#>!H%L_% zW2B^&dGCKy&RLf)^wX%?b%6=)$W%ixpLfZUv7V;*(pPox;czlrlqnPMprD=%|rg3~dHi!WV|S)Wd$5${x>o^^*f2R-alvKLZF{uo#8 z{pljt3D(e?^XqPkk|KT5W>_)CNSF@-vLzL~8eGc0-fP*N8)K24J~-`ab;f^vY0KV@ zXjTe;7I=6PpzafK?Nrz?5CJhP?EIl3lx}p{Hy081kZEn&N~^~#DZUzjS@$GkPd!nt z6)&r6KW>0)KyPJ;(#F_EQzVW%z!p-ofCuK~Pu=rm5};2%j!HyF{LJapzexUG!tqpm|#Kfu`x zp50aRMtfl<8CZK?xD6DW~&G3 zHe&asxbBY|8XSu%og>c~#@#2~q}1z&yW{dD`VPr9qW7&heQh_|Lzlw6R*xMHk^=E9 zXE`7=CB;+Yix5wO!Bb`1Wjq4rsnH1_PpZ5tYCx5zWIvdlaN{Yw>}#CZ0?2s)%~H$n ziynb>6?KL9QQYjCn$qh%yxn!o_F+%a*}oS6CfU*KKSmC4cj5u7?3g!iR_RV@d%;14 z;cG7JnU*3oIpbXsvkN=v^K1x)F%+r@8)TpnssZAlmAa7GZD3Frv2;=-j2S7fEHDME zfzK8~;T$tm7McO&A+Flc7l9(P+U5u^&d?d`cZ|;~ydjKDr&#ybdx_`w;oAPx*qmD9 zn{>?gC~^OL~Mn+K4geZ&<*f)p|>WvhnaihJ^zN{ zNnwb*V7|%_3DXxp^g&{K!s*91r~fgp8HaJl$+u5pdj{gqV|yZ@-530{ca z3tmq7ggN;?z;`5xW>O6UU!Efe5Bc94V~n^%Y$HaU-!7oP+P4cYVq32=-L+MR!mY`l zcKg?XlwW07D?*vK7>J4Y4YMzKEK9L>;!Yj;$8*Bb)YtUU%frKp|0Xy0_|~&-{T3B+ zq;$<8Z)QY_hLFfny|~d|+KyRYuiKWVOVU;y85FGHig|3Xn~DoQFbsOMStz%Y!SCv# z!h>`4tZMz|@ERH3ML&G zqEZY%V+6)jjBq~dMGyZ?hf0ijQHU|BIC5?=a+Keut z6j(Pz;uy>!HHE}#C(EFVCTYY)m*4uTLCrH0y+CqBgZ0iEM0_>~9GP~crDG_ft5qdH zE-4@Xv(*3s>z!r(0~EG-jP~n;su}as&Z*XQ&F_C@u@O3C5A{I;0m-5N2c4Gk|8*k% zxBYNh{X<*%1otOvQw}K>Sg{CEbV;k-n0wVNPeWv$15yS-q@}}{L%>FYfs{=xnHk>j(?P6#SP!YA+dH}T}KJL|>k$Gdmu z#rt{Zg&b%z&aV=%01GA`(Tm@v7*eX6#d|Q+$O(YsciHpk+8v791R&Cvzt&@Oa*)L0 zI_=jXi)R7WBD$%3_ebRKBC+whs802fFZJ9HU_WJW_^8ZAvpB9tGGE&PFVKu1#cA0H zRq|YpQqiTu&$UC(+D30J$mT<@*6hAP?n9TlgeO(6+@<@x>{Pc+kvmjlQJC|2c;^fS z^#&weTdjft4Wj*7BN7~D=Z1~K@UWQAiRj-CLt$4Z+bX+u)|(*7kECo zddLfdKCHBzFBrcX<@$B>XKVcPV&TB1B$7V8)jDJp{|vI56-`Hj5BeBQ3c20i_8Bmk zgyU8MCv%U~AtFd)KUv%Tt*>;|miChNQor~I@8TDyL4bwJfJ(865&5tJCxQsf|D#8& z646_3nF!)q4>l->r=#h4lK6i8N3pfBDhMo@<4;Y3x4HF9NoV^vGf$wjD497Zo zXv^3xr&k4d8MR4({${{Mgb2r85oohjcd@5RI9%c zJ!yz(d){79e3@mP|4wSe_=p7y(pCzGxL$jA@G%PkT2je;L|_tbQXLtBR1zzhP}nIg zQ?Ts9`lkxN3N%?&qh_1Tpc;!cM!yH6m(Cy;kC4ldennf}o~e$CqvW7zm0BHuU_~9* zTp2f7HH_HIRq8>BvBD7MplZn-g%?vBcBjA4#%1w6*SX;YG5()nX1LUQA37wOk9P^- z3LDEn$sPv|BPcL2k{WA!RMl_@;-4978Ot{e5_OeDXA~CJ=XCYf%Z1uM5}p;OUmWY1 zsAA7}a|xk8FI4+A*i}RW!+^RLEx9KH5lReF05*4@S@5|%lz%r4>pPepqo37LJXwT9 z>VowX(@*hE9oBC!73(|J&*GK5gY^@d{co1}vEea7^{TNXy<#*Yjld$p#sV34Qs9b` zz8dd4os#<%}*BPz4;$daS4TZlja2QNy zYLptObj?g==X~1-E(45^bsd&_nV@AjUxnfX&DhDTQuoCHTvP%byP#%Z^d);e5rXP5NRm}Z~dEG+?G z@^KSxn+c+RX~nK3z)^VPvU(6?jGdk>ANuck#e#ERP(8_HN$!r-l2PRg3oNkQAPIqn zhPcoaSE#M<<*9+km$d}xuFx>23AjfzhhJ3Nnp(v5d3kn`V&LmCytip>rmm%{ba5(+ z@0oS9ja``8bwq>huwu1*C>i4#SH;LL5uK6zg;$HDCe>qEl0c+LpCTP;vuL|h*b7$5i)Niwd2Q{X>VSv#q&5F1@5QlYxW5E^(!A>VE|kV~Eb0|UqJ?#C zIjJt#Bq1F2cyvmK&gR7Gq>fZ9hR6iwnR~?Y=ziL_vPxP*#iWGAk~P2F-!N>BP*V+a z$9<5W{>o_O9`+FUV);4+W3)?kIk!gLp20}`Mw2(@? zIIYgq*L@;gvd2@0Mov&GRAaOQos7Y3aRIQ;hIm{gTPhEVB)6dEL)|DV6g&rs%r`h2 zCo~}}ZM}Pg9v$y|W7+bnMp@xrnlUH%sfv?E^;wOB$qnY+3A z%0ka_`%!pM$=lJ5Q$=did{UXAzw(XUh4xiP1YS!UPjNjwvzx%2>>+cLz47*yjVoWK zZ25wcS3KqEMoDoVIMAHgGycavj=by}^1)Frn{9*>U>$#_ACOT| z_#y|4L5)RClUI+MFp%P&SIDEgk2E|Wt*drE1~{V4 zR>kVLqXk-}64tee9=aFz9Tg+>e=o4^)~QAmbt*ko#mZOCT(^l(&|_6RvsV;pFz=E8 z_apU>TK8#NT(PD+;w5rSrq7ogoS$R|Ry}v>P^F~wjse9o}$<}v@iOkc5Pn6EJdr*Kmqo@zi z^tmBd#3c<=F~0k@Oq*L+)MF3y{FZ6kc&R^=)wHGGD6X+bC$!L1hOH|rn$)NZDYB7t zWWa$gFzJlo=oH6H-|doMPoPrnxos-amL=c?W`aurYbH>`r|Qs@sfecFF&a|J&y46c zpRmm6`&Pb`%E%Z^HL9OO)|x!TnDrb=&aYKcRl^Sqx#CJInY19?-5h~st9^&vR$OoIn#bgBIXr0RH4?iDD z`Q+dK%W%?{ad&b>00i_V{GXJ8E>4zq=Koy=c56X+tEjHEZzjDRM&jad5yjXkm4zN+;u~~a04>+;dt-TvZS}nXQM_Mhr0)kHUh!gXmS6e)iPqaUM{L8hUwl~hxO>0w@pmCm=fhB36d2#@D)8>^ z3-x@b#1~&3L-_Oa$W@<`v|gH0{SFG(x?~S_DxTe~W^P!0#R%mo5BZf8cq`q! zD!bQ1U zGuH~4n%Q{Px=n7jMdMm0%@}2H>_d}@-B^jC+oA90W$kn!lIj3sQQ<(^+-4>{_SWkq zi7J{+1E-Yr?arbezO_p2P0b5c@r-FZU0c(?n}l22^;}lj2=2RJdW!1ZYWcpIcK{4z zEEV~ZW&_h2tm?AZm7JUm=i7Bcx9}?W$B2~0Q#1U1Qamx z_uA1?3!d@iLk&{B3YKxM>(Sbh9n4oyx!-6$os_?(y&Ivy8A#~%=|o~N7KT@MRMAE= zXwbjBW-iH&paFvkYZ;IZsj9+jgY`-PaY`Dumc*n(zfea(^E}65cvrh?eT5>cYpG~u zQ!P6{>^pE)afR=!;&(CaIFj|vEu9^NGG>4N)YM5<;SkPCFAbiK25)p z6dx-jx?nms5TI85Tem&lwj@X5G#>_Jk4kRJqmzPY(^K_hgK7o~CEQY1Ybv>?TGFy0 zsm9w^LIb+)?c7lmFAZHZ3_7~#sFA*D+u)2G%lZQ`ig2UEi8)N?4Qrdcuck)UCpf&T zWXF=?j#lrzx_)!ziNw+#xZcG)mH6xIA~$U+1ip%4^hzifHF(=%Msq7$&%SYPie$0i zS#o{038#B9n5wErxKW$L4wx^A$z@|z25NY@Ho`aywe^HTrLEGTb5}cVbx6pRTkzlv z9tp*qUnG%L+?F5}%h2LhS1=-I{zVzuk2znqaL`^he9-gMc3Hk71g})T>V&(X%1i_Q zPMUH6e*!+P6hDH>6rVQ&*hNj7&(9^k>^S?JpB2W0RTf<2QIH?HqFSw@FEpQ!*D%z_ z4~aR<>~U~WVI3e;4<-Hrsh1EoW~~vijyqy7+Ma*yy2q0!()Mx83Qc=(x{w*-J*VS)agf_ccN|Sli zl%B&`CH2WYTL+N}&}gTLR++Y_2n(=W|6BN?6Z=E0UVXle!2HNpObGmA$xCqqPCX5T z5|!q~0DA>V4sfUsXIgnGQwwM?*H^#+| zRm-m6oiWzBTO|KjqsOsX^>0Su*=}!EMCCH&iaC-H#Wz%ezoe>^q3hG^ zkU+S@i&dUuutZ?k-5B^NjMJ3GxV+Q=fy|%wtAh z5lvB$Oih;e-!i!eDwe<~S%OO$wykuH6h>6So$rny74i_>LTlbg$?kPtvhC4eRvVFZ z`5jHzM5kCcBkX~}cJ`;+`pToD0YuFg4pqsciYq+1HxPu`zM1$maoVC~1jdx)UfEPe z6|G!H(zsi5@XPw@jT|m(j9YL$};3 zv`FtwGuwWoIKl?;F|wy)tUttw5dDlO)!8+N`2DP)SAgsMrfN?{b8D1bO7Y&6Q2}OQ z*nkmKq^)*lQN>}Q^di#YY5jL>d`eiIMc#5cy9O;zMU?71RcDe2p}Tfj zG{l}3epFdyrKmwQoL<#~t5Ff1SOl>PqgM1?WPJyRQuIS4k}eMEh}STvZc=1KM_N%V zx2CG{(0m7nm<$-c5!R~!>BNwWD^Bx+$>Fil0!4N$8nY{3%E>uTF8XPg^3=kxP1Yax z2u(f3nkdeFjqKE@_Kq}i1o)1Bm+W3lM;bjEVA!!kLxS6-UV_F9>oE~r2VHsyLzf11 z(xqN!>&!_n|FB)?WJ{{&d&WI*?5l2GGr^`4$wVaM{KDw29M%~vJpy4d5HEzB`X~F5 zU`|#c6}~nN?<$GA{b6D9pL!OTZ7a44oJv}hxk$tp}jwEoC9yLrk=Wmu2#uU zDdouS&Uq133O6Y>?#i8Ck^ba~6)L`3y1K3;I+aVl#m>!JwS1Zc&s98Yh*eC}pW|s4 zb?h6Ar?{VsjY~%vT$4>-ex%`Fnw;J*`cm&dFPDGg3(q2P^@Fhv=Fb(?=q)gGl^t|q z4!mTUD4pr1Zunf~ZNrBghu!MVA=r48A~;HF2(8BFwAb*Kqffhf%iO}Gku17G{hbwvJ6x~9Bf+Uhkw-M62Nyw|`+-=K_EASkG2YUEC{#lFuvoYiI8 zAV(SJZ+U_VI5F8MHjTD7Cr^UKL`Wu$stspxfpIi_<=&w(3pWwUfT(_D2 z?A*7R0XzGB_F%r5AUhDBZV%Lr|?;;RCsMkffPxd~)i#|Vy&lk8)%-x^8zFe^H zERY|NTYj$FlYrjcK7G*d1Q0*WS8BLV`M#gUfFI0PeVkYQfZp>yeGuQVfL^#yScq@3 z+g6;{jlP|;;NFYA9gy!HkRPDe9h}#l0Kd~de&FwVkRQ<3Qn-J(3V!F^T#%nqkRRaJ zRJc#-U48Cbd;fo*&7yOqV9?9CG6sfbxxxf4_2fHDnlQr1>yg=kt?r?R{

jQEKzki`gN5I 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

+j_OKf5Frx{1q8pDOzco2Ak#w2%D2lmQBepw2U* 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 FTg!>M1}ulmZfUl#<@|mVSC@c z9UA3G&3MVJylFC^x?xtSqEG+|lA-Je@L;F>s* zy!3?WCHyl0@JLzPAc=pq_x|Y1ut$0_kx|X{1 z6~2ZHjzBDVL^ixMo?t0?gkJerUgj_2&RaTw_41L5t2@1AXal^)PWmY*zXmP) zC2uGIh8}LCmi;bR3F!6zgo&#qE3nIIx!So?SAygsBgM}(t__1iUXhhUVsl>!$ znP_JK(US4_LhzLFVhI_q=0XW;FQhSK+tUTLNE<4rVhai}Zz^s@EeS7|LJ4y(mjVfO zs>j5_EVK@QOB%64q>u7_d|??{Px05E+XPfE(hY5B@8!?@fcrF~?`WVUSSFDJ063vp zve1p{G%RuO&?VzwG?I#waV4z?rFMj23z(P$qiQtpa7w0F`~$ilRJ|k6SNqIt{S|m4B zs+40p+Ej^#(6(4_z1%m;A=Q0KYCm@?)1RS74 zIU)wok!@L(Y*34I1?UKuFr@4=Q?1H01pKBi8xyChjo+81s!iOtqS^=Okc_kdbSOq1 z09%A3F@P=7kr}`i@kk9|i+tn~V3TOng!TYnm241;HJtV#upXW%q*_1DXf?tTZmBHWyRGPDyzZSP(ZPMi?WKbW!15g+A&D7 zi5@b@LQvx>t4m^~Q|2$m+^NOY#Y5ixME@NqT1@RiiNa7YmvN=EE(kNswJO%(-VMGu+=t^HaUhgR+=EELL4^s zU8`Jxl*P)BRu=d()+2^m5R6!N_A`@k$R0!S01&sC{;up zkf{&YL;_tHt8FqViY6xFGQeTz9^hc#cZXpquRe=jjku`&M&4E{B>lX;HT;MNZME+tziAOHwWy|oTQ>;ee zADbEVr|7WD&JvN>y25p0U9l3x9f^ikDKk}o`0)vXI41QZvGy{Wtg=bPRYMhzR4q*? zt|%=h9vF!&FNrAxdGx}deRJsWp!)b|nJ6&|iFBE2y4q zNFfOr$aWNs1qhy97Ar6HS9-@kM(`X$qC>P zZ5{^3{2>OqP@$oPyQP1pHnqVJ4!s;Fr_PUe+IKW0O$9j>LcAHA~8>6dH*6M^zPH@+Ru=veL%dgqM#UuoUC+@M_b7idEN^ z5uA*Jnk#Oo;(Mb&Qq2^3Ym5}r-I7(|?hzV7k}oexE=RkjvJMqoZ=HI$K=xNrT3lV~ zHK}@>;1SaAKI)PhCSd|TeKo+7_NZ)*@%VIFBVdzbhX;uBDba7B>aQ)8KcMH`BEc;! zshV3I2pI>1b*Q{}{c#i@oDeHpxTw}2pf{iv0h_>bNu_$k-&pF3Jw?=nd&)0yPg?G= zr3wAqE)5J525k~uNDO#XMd=LBCP0MORh5zkpJMy8Pzaw?rtj*mb z(JmpF{wm@n$RIlG+9p-JcPOzLuMY|HNEwtf8`(%ilPMOJqnb$&V92kZh?{7Cl^2k7 z3kNEWkGN=Zx)8u<)IP{S$t^4@^cZX?sNfNQGVU!^b5TNj3Lq5~CpE9#X$PqPaw^C0 z=XguO*YQLx+6CB^lH!`!WTjl%H7d)C$eLI=qCweR-t=L2&}i^FSytoCt&bg2!+rLg zNx1Zl@l+E%1NmPeD(Ka9sm6xarNW95)Z0nUS5lXZO23Ya$VFqL%BOq_d$iOKBkNq? z2i>xYl4`79J*l_`ahq0FGpZVyEK2^e5^pRKpSdPd863154)*udrF6BFrYuNp(ZFGN zSXP}GO$=zat9JK1BulA&HA%NYV0AHQO|#N`7Fi~9JY%D%Y-v?_jQlml)t;K+5vIpD zJxyYItekoqDUU6vEv%VbS({kdY1PD^8YP+4m1qZ45U6T@hSI6t+{WB4s%kb#jHI+# zaM%>3^C6Xbh|_9GphxP+kW(s>PkfPzMB_Dn3OO^Dp?vV0kE-ct(v++CD_O%zb#%S8 zfhxF1;EAa6|0U=YjTB`;I*D8_mRJlbhQ=PTl5#TKWFjXJLq0%NQdU%ssv(s$(fW9g z+6e}BB0=4WieA=;+`mbiPNiaRO`#Xy(xP=ui?}f8wTFhWm9^9AV%6lzIgH*DD=Vv% zx5+bF6f07UEom^>k)?tW&-kN<*pdCHt~c)S$#h(-N~hGi*9Cqq3!FLM^LYf*IX%cXr3@oT7xL zXJ4dfGQ{Vm>;$m|rV>%dN=H{#qMcFUnTvX^x7GwHc8G2)<@MXk&QK=d;j=2MOQ#l> zRr?Y}R5n(ED|1MnWeF2v(u`P9i!|>NwSNS7DsMoBrV_H(2Ee~vY**6F8iKsci9j0 zc!oV|iu+ymt#|+*>}8j`>=y>Dnqql$9nvY03CnfGgJOrvo?uV9;vp^=bpB%>vhV5J zYiI4Yu=~zwuK165*kzBg$6fJ=coc^}7dvl?|GMHafoV^OM_nGKLA=0TGzIqIDe<(+ z`||-V??TCMu{T}uj23peNzpej%08vXdpJ7w6nokf&${9{@w_Wu5HGsoB@D4IsM5>4 zBa-@V$KshjQosbtbqVS#DcW1$Sz&P8u2)V2EC0A&lQ;KT{y>P7%bl z=dzdB%cgkC6>p1oXws1zQM0eQT+%dtPDp!~TFms2=Aj|Q&wBnph_O8=f(&C%aHs*{ z@PFESu6R$p?}`sF#4C8ED?St-x$Ir`KUaM0<$mIdPl*=aK{^$mQQGH3q+f`4T=p7! z-DMvW>c6DNSM>Or9v{*o{(v6e5Qe^_YF`nQ_u0!xsL6?+SxFYDm@#{50W#whicmXJ zNSj|%)riJj@eR(iCJ^i5Tbl9D*qaQ7?1|mwGutjrU1w%(!YJvy3oxk`n=8H(-@Cj$ z`^6MLxcnFD*N@^SmwkuBkcy9 z;*_P^%G(MGQj+eNal0hZ#7fu$l2U%ah2@p=6{lDJF_p>Sod1Ir@FzNo)~u_$grg90 zV?9g++2s$b`Se2;#?q?V6*!SKt{$O!X-y{#g=}?GH-F28yYS^V(jyWausI^&cOlj5 zX?i-YM?K1*?H_18rk+8iTDW`^AMNUyxN>+utj?=3%6?=&xq3^zm8rLO^(-QpHhNnI zBmd?OfvaZ|>-|>GarJgQ!`0gpOH5CW#P@f*8nGPSfpVkDPgzu3SyfmYY$Rnihmx5t z--i&;fyh3MCat612?=`PE;j{Y%h8@|hSEFlmeQ%Q%TQ?Rol$)2UFgvjQK;`lYpk1| zizfB%oDwcy&o{VwcarsA(H!KV=D^4D0$RQKsK!;q4p-K`FQsow9kX)k?kTfxMh*Q3 z7V;j+;C+dtHt`J%j%a4e{;#^B;Sy#rVNZnpp23R{Jhh!erk~Oy{`BCQRUi2~e2vTB zr^h^A?CL#Ga`0Nd%;h5plOst=n9Im6oU#B3IJXfHfAtJi8xOU<^@zHAA%nbKbf%d- zBvTj#PcO+TO@*h)>!qn+__qb3$%t~Qr!Ohvzw)izSIBBogoh9de>r49Urku^i{M-lFi zrAHZG?CSdv(>H4?k(m4Ky$eoXNPCIOk%)%bZo2N1kjw8N8|!X9fIQNb0lu1rKgZSk zYc_2Ql$H{5#{O{=!EQ%$XdK&Y$w7bY8`$+YnpEB8nryb}fqz`}@66&3{*cQb;b`6d zM2zYwoJx(6Qt={&_=mi}vpc==zLU2(t~vHEw2rbe0PT68jOy5e@#OoRy30jOi|H?o z^lhS}H;G=~qQ}Sl6PJI+Kk*tZqDJTcaijkP!oAkUlAF>fjg`kpoe}fPXz$>Ne~Sn2 ziJK&?X+7Ex@HYJvQ=Pv@#QV26B%S9{8~Cchl7EEccWo_uE!OQ>EB|=ACb@XkIBWkM z_3Dp1;PNkMVYi6YloVIRM%Ci%&9AGC`I^Vyl@I~jig@s6U;!U=Mop}CY-~YsUAgkK z*HjgkU}~FWUEdZP2ck$ zTdlfXo_vFK1?4@yBx8@8y^oivpFY2GdkY?k*qR`g7;()|B$P%S@GehqZ5e^|L-r$jDJZN{*yy&&L(MY z)IbMVu*bwS`Y3bd-!YAwXOz*niXhPldZ}t2Cb|jM--1Ps;B>&5cK9CIz&iHpUw7tkGgJ-@-!$GUofKF-z0^T!!<-$erjz;KaBk(+l%*Xn14Y$Hq&^xrishFIquNR?#AC7spo{>%}D>r{RcYmPRCY~XH4h( z2@T^FGIjrES9^zxhPm29e)*Hmx}C4W!$ zMuXBex!n@ST{CkVZCiQCLtV|$Tn3$ykQY`LFYQoUS=oW^@t4PzcgU@*tL;#^po4dJ zy}PSV($Qe+@n;T-CT z&u!VL%PFJnx<|eCZdpu3?b|;R-hS6-N)sPTsHv^2O7yhbF4uhH4?rMp%W4j&iH%)> zdSY3Le>6tRrCHV&c(VbbXYrn|Oz>hvYWn zX55n$b$Od$D#HX{IJ%7BOhEixKTlhfmZeI7ZhYIksy=j!pMK zXeR|B(#R6uBT;uZg8d8sHjSn(BOSb_^t$UUqCfgnMkJ+O?}}2&7dj?;_tJ9@+QTj& z4(K|k0<-HoIXkVhztHVyb?mUZvg%k(>S^Z;??83&QnYVp7AL+W(4wryyVx~l!Pt~r zZ|3~s(izpUn5UIYP5BBzRw7Q9Ydjec-1BvdOH{jwn^JVd-zU+f#np*BEYy)EpASGZ zwn|XNPG3sMXeJq@8v<9Ks7T!LQuhlAy$yWta~pn-BUMP9m{PF3%D)p))EN7_{&LKo z5|_Hz&?@+VM{LUcnppL+;A;>&pDUGOfim)rmFMvPnn%&1nQr8NsJ3=vq&} zkAu|KbXl%>5kS}{2E_0kG#PWTCfO$L{o&NaZ-a(4l zWh7=}oQFG49d(rNIdPrXDXU4jwu(Z$s&Y;Ai#=j__BE6#xf@??_$)usm%uaC&IBstUj1GYSGg z?+qg3Qm`^EgK)-1_B*D#UNugi;iJMl0g@GA4US2V=H+byu?6(aU?6l8W5yadXe-Fs z4PZs>dT=nw-2@>FMZ@%n&?Ai=>G-IJ=tL}$;n$$T1hF1kP>D>hM1C3qY8i)4R5GPV zGT2I$z#g>5c-9UGd&zAk#z9hWVqSg&w8i{vA4HCrcV0cT^ZILIM*Ac>#z8uwqaQf> z0Ep;=prt+x#_FSCi9QZ0^zm?pJ_*jzr@+PfRJcN)4%g^2;70ubxK*D8_vo`>hkh_T zq93YIn1_fO3*ETJ1tN0;Xk6!pLhGYGTCai5ej2A6kRF2hOwg$myJ7c3HuLgkZ-NeU za73G-!)EA6bAs<24;AC_)oCs4i?7c0&}9vzQTit6S`T}zf$l#1ZuO8$!F0GI+C7>V z&98?Zepb(V=+&f@mzoH6q+qmnv`+){ZBi#4wtDlwcRlo@gtXc9u+PpQ`X_?}>S3T) zwZX3%9TXkxcPCMO2u|7-7&=R(<@q4fVN;^Uuz>1@dpVn%%V~fSJ9lMdGRW%{+9;?| zFghwax&g*`5N}Bi#3!aC1)T^Tk%CI0y^z&Fd{e0F z*RX^1%h+7~a<*9C$m;Yf*s=PR>@@u9&u+UOI#V=z3lvQ5sivvVjg|`K1s;s4)J5`og1*2vwRlwzG5-n ztWD7Nz8Xvs2Z0Q1NFLh^gQJxtlG_)MoY(1D7tg{&GbGGk0N@^pvM99m`RUW^f)ky)FTkBpx+Hy`gUli-wS#A zeb8UOANJQDfa&^!aEQJGiuH$Jk^TtO=#Rq5`eVqF9*1-FC*UIeY1p7Y3s>pS!FBrc zNK`MtCjCXYLw^bG)?b19^;h9P`fKo*{yIFZzX31kZ^EnkTkw|tHoT|5qb95+qWutX zct}kNPC!69;l$*~HOQVE?Bx;^4*PpJsPdBz@LEP(9_C5XYPHJPlL?w=dl}BJ!g+D3z)<73+aFw8 zpXp<-eTKa;+n?5y@~Tv{CR&>mG#!1EVCj-z9_xlDSNMn^xNL~v19WYGk!j?tXMOkp zGtLZJgi&;6a7(B(PM_llv*-+Y#j7x+7Qdb_o@MQrg@3#1;Xg>jUY>AS(!HV z<+#-bi~siItsY^ETfH@OQ1tkTO%_Vto~i_SjikM*6I~rW0Sm@qbo9h#;ErroPe`<; za1%W#dNMT?Q2wmOi-0Q3A`Hb{#Fs6HhK)OC< zcs5_}Opojhq48-to{W}=1{{R#9AE8M93FhcO z!+iZ0s5StOG#H#@a5%@%-~vOyrG^eyW4Rj)8=f-K;8i0XJ~1-kdn1dPMjI9}a#%~F z1KZ2!$a)#w*kB`<6&l^yG$W54V&t<0Mh|wF(UYw*`m)oFe(Zc>AGY2Y$gVR6v73w` z>^5UKd%zgU9yP|Wr;P&ksxgkeYm8?<8-?63Ch;_5GH+o_L--0~9$#$~^V5w|evuL58;u40CSx(b)mXysG|Ks1 z#!`O2QNbTED*2N}6@SGzjK6DC^G}T${-aT+>BcfG%{W|ZZ7kQi7)NNmjU%=G#!=cZ z<7jP+af~+6Sfw3c9IwqWR%`Q(6ST#~iP{Oq$=aF5>DtA{8QRsxnc7z4Z0!N#9PMG_ zTa(ta|o7P=7^X~s38t#PgBY}_Pz88?f; z#w}v3ajTeO)QjmxgE++4A{H5Uh#KQgvC`NoPBgZOGmQtu8e@mJ(s)SRY&sP_ z#~A<9_cz|ti;Va6xyA?jV&h{a=%0m5$bk;NJ~js?@(5a)8XO7vJPp$XOol`K+z4FC z)0NG99dzVTo&k&(!C>Bkai0LfL%SAZt0}XewXGH~8-+_VPApv?$^jut%NyRISV+Z4Na12~i#y2S@aCV>q zb>JO+*rf=Y^wTa)V7K*+2DCYvX+xRX#t+!WkC0*f1f7lF0;LOKB}{D$b@Dah&cSHL zVgD$%MQV%D^P=aYP10l(CI`pVAj8yCM$sY|MVACjq2nkdCQWH1!Y@$lo+Z_X3rT&r zJgH4g(njR;Kow#moZbU9t&6t9#Y04X7P7B3+hHyK8=_~Snp)=fv>ZiX1FWluOAz>_ zN(5)=cW+ddM^eKf3AJw{VVk9A8oiMBkr4X*ag{YIF!tgK=w+xTtky7_)QzcfjQg*1$O!*vJ5TI2qad6=_FpfFr34My}irR}E2mWR}fMvnPstpg*_PGAZ2>tl14bb^ zT40+tgiQxB%@CRhVd!E;ptqR@gUxgpV@6?`nE^A+7O>E42}{gYu*_@?$Cz1gve^dC zG26nWn0AGk12>rMU>nxE&+GyZn_b~4b1!(=>;~_ex$vpk9ey%X`!nT=H*#l+~d(@o4UNmR2H_Tb=BlAG^y*Y>dY#zjQa~=cJs$PlK%65fryj!UsGoTC_| z2EE}to{Majvpi(3lxD(DSgt!qgPOI4{dhj6>8u@$=RFj>cVQI|Av_J9f{S=h-V0eu z2R4EC=6#UOhF}!$s~Bz@*oW_pES1x;4_HFK-LRS4n`JX~$Yz!yn_1p0o7pFTd9V+2 zFHe88J(4Fg@t#!8F1jhY8P&KZ?9x06qUO<%W3Gg*=CLU)?G?1tpAYa_GC#)}+rcrwdQAVe=MG`!^=yE)$R)N+j{p9Z zGIE5+URwAHr^kCS&?{f3*Bw1~piSJUR;D-)*LyxPz&qpG=6o!)RY4J%Vha=yulGDf z#Mlk8K#6fT!1%a!a;72HYsYPYsrTgNZ-;FN_O7^A?JMqg(Lauw?u1t#iqYwDDhZq#BIg?5!8m_sC*hZ& zIu`Xhc^4_F*>v&{_<@)>Vjxt6A1LWDgvLD)XaZ4966bSgV(tzWjW zwUVv`5z2;naXzj|Wgm+>;=D&NqGmDhQ1m}dtS@>uz{7F&RilEBL?3Oo;D6)n;hmbu zP8+fTOf3%K?6jd9JlC4;Ib$-F^%8w7`gj7Ihs0iSwn~ZKK^us$Fxa3qz!Pz{gi_OC zU25`^aW+F0p0I(ij44mW*=VmD`Dv2Z!_z1}mCcrRAWaMF8t4UamKF3DXTeFe;e6vQ z4&OD!C+ZLb^n`#fX_Q+XhliR$e>NiLnYa?cjoltZrgy6~rsoAa3(qEC_u6@31#&*= z0U+nkb7cB8!1JW1qFD)A7K4%ZTxd3l*St=Bl%agV%`w&UK! zAk5XEn3O%`!K#Ip)=@*o?Ds^BT6yyp|nhUdK){Z$L46BRj|3#MYXd*`?;4>?(5` ziqpH;CUZNx)4Z46W8TLeH1B7Rm=Cb$%!kQkcWG#*bhW4qX>DX!%aQ3?u8eAZWJ_(RY^9Bnt+jD7N1G_yX|rT|twMIu z4wqfEV`QFon#|YEl)bczWMAz{*-yJk4$!vBLD~ayu=bc7radEvYp=@@+DCFFF8#Nl+(p1StJVN0b+tYNKBUpi<$Be zF;5;UO5}X8RF;Ut_I5n(sLe81c#n8SxCHRVp2p)5p0^nzB(YShJ3ScB9VLmUIg^P!Zc zRj|wWFlBq92v1l;7}`tiklDJ%HP0RuzwzNp+2Qn|C|}JO>Dznh-fGwqeJ=V!^u>DU zk<=(`lKk>?NRwx#XcFmxCNXkX!0Hj$OVO8`0d^h&yP#QM`v$-+_JK|JfNhPwlJM`& z@g;ED+@vCnY~C;sn& zCcl(22I^L32mEE=uc!ADh#tK=hNpTz{u+Qa5Yy_gjTZjz7W}ot-&QZ5V;$`v{GE(H z%+oH!-{bh(n(T-67Q!j@`b@t>f2?Z|4(ey}#AIILCl+`=?Mgp>DgNSEb}s&QVBOZ3 z*Bjprh-B1L?U(U)3I4EM>!ZfMrm%NvYwz8cY5LQD^4}Nvzq7m_rSZx?4{s;<2mOh% zsL%3pe{QyVX@sNHGWNMC_(%QOJZxt;avlDz!f;PNjm6~;o=qI;p|p>a*30)jjaFA0 ztxg)PL6TKzv}o?@>wP6H%g8iItCjV;(7DK;j4CWG-RPUqx5%e0Pt8xWQPq8VfKJNn zko+{O9^T##?@$}059DVVIpoNAHx6xb()J>4GN0oAL-Fl}-iuROPNq(g_v3OihitGcd6L@Bsu^Z8taG zaSL|wzY3h@q}C+&Vd7?gZ|us+)X_u7y@48-r4JEVy2_9L{-&QBH<@Q_1gc(cPTFv? zRia-LcDHd>=Qqd!ZlVM!m0zdB7-;(9H&z)Ly1Ce|}6=DjQ+M zSKr7>r1rSTe^k;GlPbgXGjR5PiW?&mLyi6%{l!rbZERZhAL#xfZ98&>1bNn5l5qF$?Ol=2zqqH8@} zG-y~&SpuFyOI%+X%p<*wM1woEVFKs-S-3cUZwCEFH%-SFqh=n|qn(SRKk8BA}0F>!I77co@iQUZ8IT6eN& zRI*8!6(_288s|urQ=Uq5D&11)GxGA&mSl+@4a|;<@fcZ{hzvnikk)zw$h68h=xH^H z^iG(L*S2n!7vV+N}W)0(nIB@jPtjsML~usf8J}nRh<9V3$>2(`~2)D zp(ErJt;d~_ zSU<8CMFwWDZWPHKVx|ly4()f59(W)<0h489sRawqdDGrK4v#jAR{WQ*3f|Ccc8^5% z8O>(*^h66(=H(0WZ@_{q5%56rYHh)8X6bZdkzx&5h9ZCLTH81bQDueCFa1KEGphYo z)@!zZk}`w!t_LTlp7p7RXann;^Z|&w87i6bR?y{b;K^1I{?{vY`ee@6a?zb+r<@5v|8R(_6uC12p*%a=4RUqyTQ zHLZnw9qr{ev@Y^3EnmK)^^)&ugXH^YGk>IwmY-;a@>6Y^{7gGoey)|u@3e*TCvB(r9jn!5A+1g83R<3Aabr;>Oo?>sSml$gG5hJXAqQKfm>}T~C)2snvjx|sm zY7G*LtRbS(8Y-%-eZ>lElsL{BEl#$^i1Vy*;xcQzxZ0X1uC=C$TdZl~c58;X(>g%h zWgRGXShK|w)*SJob&z<+Iz)V89V&jY=IPQZ*3+%|dPl2N&$D9s-qr%WzqME&W-Zaj zTIKpgYpFids?g_Im3paFr7yH<^a`t1KisO*S6a*TRn`jqWa|k1Z0l(KJnLBfVr!MY z&N@NgV4bL6VV$a9XPu_sZk?{*Wu2+-u+Gx|Yn`pXVx6nMZ=I)qVV$r4WL;or)mX6=3wg;bF%fiIn8>{oNc{t9&CMVmRO&d3$0Jh zrPgQWGV2TT2Zwe_8Ovh}@rn)S1JruB3do0;`CH}A8B z`LL~*j;2dyQ|Ez zb7fz_g;3cCmcIo-d!a7s{9HMe{_d%eWcaJUTNjq$5;dGW37Gd)z%pMBx^tWWNVszigloU zs#Rj2W-YbPwyNy&tvdSx>nQs|>qL8vb&kE(y2M^*#qCS1TkR{XP4?B+b~|p}Z(nac zZr@-%XWwYOZr@~mXy0soZP#1h*>_pL+xOareV-k&@3*7&19pzR!yab;#~x)rY>%@a zw+rnj?aB62c9H#pJ=1>4KFEIAo@c*dFR|aWE9|%J8v7l4x&48Cy#1klqW!Ubs{N^b zp8c7<&i=x_%>LTG%KpZ_#{S;E+5W-4)BX`#_|<;M0sC=>*)KWVe#bHF_Z-Xq)UoX! z9LHf!#1T%^v7HPjW6suz*h_uamOW1_ttJ>`jnH5%zRCrdj5hFq#)pUGpVq&u6I6+t899 zKy65tNRxIV&3YV1I+F{~t>57iK8tegQ80%eNZvGi92~%BW5{&UA(zjgzBsL+BR`1x z;eA&nnOx#WaNIBhWGIc+F37egFNmMdSI29C2p`Pu|<`bN8d zLS159;!K2nb$kTv8fZCJs?9wu4kBkWXnr0YNNZqwYXd~4$k_-3nsiU z7JiPulOHH*IhkfD?fy4Dj-dLbcJiMHx|6*o*qWz9Z%xjCJH0_VeIVQE3wt?xL!Q$Q z`Z@c+FsDBhI0Im^GZ1DugJ2$}FK~uJr85%hoPFU4XB4b<#=vRLI5^iC4;MRyu-@4p zu5~6sy)zB&bf&}IP7yrh%z!7I1K>4hCcNj&g3mGSTW2=><{ZMfb0`Zr^OTG3V6dPk z3|15`;9l6r-%!TcOHcrYdC5Yorv*A+69K zdGSwe&&JY7S>EA*;FxZp@2k_eDd?j8w?>VYxqJnSy5Qe7b%2u`dqw^<`=zVJFEqHQ3vR1 zO(0#XJ#M0Dlqxo#wyO{dXJuRpYOhU%t2h-p9}H@4pxNyVazf zA49q)uIUE&F%G8$)_SH+Zh>@_X=VzQ8=_baInaI#JR6>_Yj`u@<;0uMTu!V}JA@U#<$SDkC%4d*8K(772tac+mNoK5hHvzeJrJAiwZLdGRq#rm#by8<&jL1$ z9Af$8kYoc!ctibj*J^V1@J@}lt*V@S-ofL)e77dQo(&{!zfPU~{=01i0wLL0rr5#; zB}--N8@$uWbUbO`E-;b724}D#jgGM_qr)K1HYAU`Aji1}7y5SS>)eYR`aT%z+z+#z zhj4-a2g;m>kuyIEE1mx$H+~9kbDoDS&I@pt^CIkUUV_J*m*FMnRe0NZ4awwfraSMj zPR@s{oAU|Fbv|Q#oX^=%=Lb&5VeyPgfpPVU;Yq{f_|QLO(0w(~1;w%?$Y z3n@D|SpjFtqHk+sM|5bxYy2IYTE5KZJ)JQfsU243Z(_rTi0m|DJy_Xk<_0L}`B1`B zE`nWk<>J9YYLh?V86|dr5haQ}c0eA`IP}g=hZ8qI`#iNVPR`2)HX;tKF^~?|G_a9z zm556n!^v43P0Y;I!EgpC#P4Z#FA4Aa~Q%y84-AU7T6yHQx; zwt&OkR&cD_Mj>JX4y+UO=7+0AnGbvMiKEe{0UrMM%&K9 z2{*dq0us^D$T(U}b9>m^SE>+W0j_UKaDNO9SKOb&4Sc1-^<0?3k72JX5;-=3b^b8s zkUU?NpXMr;+Bp0-x#!)eK9Tf8gzLC+#Cn+B7~|x%>Y1tUO>U!mS;sY=D?ZEE&N|W_ zj(6@8qy91o$G&dt?cD?NsI*JG%mLmD?k_h4whjI`x+xNrlqaf~*2 z>UR#MUDP?ttgJZjV`jz3mTrcbHn5rOST;LwL7Gic7DSu$y7;Bf|eAR zDQY`NZ84~}*YA>$CSEyfL^K6Dx>IqXO@n^!bQtUw!6@yvon?rb;=%N*_=3`e_%AWu0IPIc$PdG0*8#4U!6?tHk;ErEKs6z+Co@QAw* zo^;FLC3i8rj%D9`Gu6r2EbgNmmTf@4zwXC;W#|FB~*l2e-+s{3M z6}d;UIaqd{yOJ$&k73K)W7)CpNs361z-2xd2Juz=IOIuf&~jC_E^I_)<#?s691q3b zNqm+KBmA^qpwvqvLJXwRsz8-lVz_E<+6Un|rvObBQ>@$<| zJR4DIE6D?7?KU(r-J0FZRHb@lu>FSU8EpR{#?BIbWQuMRhoTHNk%~^*UC})6bcN>! z&N3e&PwC`1=viiy0~c93xm|bSET@Cxo{0o;7PNKGMb3KxbayX8A#(|Gl}llmdl?eN zRWQ-L8fLk16f)PsLial4Dz_tHY=Yz5%}5mWNE8hacelW8?pCe7Qzf4UODm|4<4t#1?EkV z)(6YjI8hVGj!4_f-{_{bI$5oDffD_wOp(?NWpWQXoav(tah1WQ5W=SpG2-wk7U{S_ zE%F9(U7O0aZ_P@41)2ZHOtk-FS?}aCR@j(VFqTCsjdy&`hUVg** zJrld!e)|Vd$(dAgDO&M8sVS0HCZi^?Ws+73Xr?JPps-O#12fnxs&*h%8<1)0q-=O+ z27CIuOBrl7m6$^%TKKJIu!AV=;DEZCGLW69~2T)aUZHA_d{#G>JSxAHLLKgfIvKbFK%n7+HEfiv{Lz%37s3q$XYQ?&TININ%3 z+lY0&HX4H5Z9(pXD0$CRkUtA@zfR<`v_u-q3~Jm53;9{TeKsLrY7+vcHo<3VQ8s{| zt(3UdtdC-df^~r|KD_R@250-L=bXgqfh%$KkmTQ2t)6zNt0yV_njsdSk~7#L8SKzT zLPs6p3Uz}}s5?YM`OrGl6FP@_L9b9B=pX6}BSV8yw7Y!+Zm@5_4faip2YUJA;q(Up z{q_C>jsS^)SNQwxD0Ooh^W!X^AFETWMnVMl3QYSRWZ22SV=g9gGG!wRPSrm+c?l)4 zoqu((olkrIb|Z5zaiYPy$erChy5mi*88vgIJ5fUcRtVYY&^aO@H%lMlWH~z^mY3x; zu(<==Om`i$QQ28zt=_n~S(ElI#}PnAc^X0YN6Ha~-v_zf#JPm;brqk9se;b4YFf*sly(n6!4 zO=t{s42^|up#ta=DultI{gKWm!nn{Rm>!w}2Zg3WU1$cJ8#)lyg${x%LkGhxp}BBJ zXdc`bDuzcxCGcFR6y6NQkh?8}??YwG3{|jbsEV}>)v}JEI@Tj}IO`u;#Ri9tVwr$(C zZ9cJ`Ol;e>Z95Zl;_SET+b4S;eO2o>tgi09`??wmwqBd(bGuoeei`6+E7q*6lrzSL zXnpz~Qv+&x_I#h!EI}8UOyVlg`&(*5HAn z)SAZM!CEH&zA?;x3)7r6577$nM_zSHfYqH|d$r!M$ZPrirvQI#h(|OvoL$?|{O^=( z5J+;Z#GEE(&T3XcTGGleK?jq<4sd*XgKk1Anzk%L;>_>Cd)`|JJ^-I$5jtMEQBKt! z@uwZS@}JF$*V|j(y+9*2f~dvOobBHSnAz|W6l;^F5Zjy!DH>h`ZX)!;8FX*3ocSW8 zQIE^{qj|O`uqRl)Ftk^?80a3Tk1+kS|~q6j!^$V`U1j(-FbyO$#V-&iYM4^w0Hbn1Qt(1qX3*$ zkk~mvAiM6&4YuKZi?w`}A}p@~^`S=puU`3?SH|`gjYFqhklr7y{(k~0kJD=BC@;*j z^$>*r`H$01OM?7h5NF6U*92JuPy_AG7y{VP*TCi_5$|7-Hib&bf-e zPEfyW|FIV5)}ETyYeMMcYmQ7FXX5W^72o=b8XH0A6iX|VxKIIQvbuV2lLsc5*NxSR za&IZ^!5pL@XchFG?@`mu>!ZXEHT=BE>4Xq<>J`?5gbtu$pvr`VIPodMix~NGem4!# z8~SsiriJSa9vs+ml58W$L$yVy4C3!!IZ9|^-hgR@bq%o{cIeBvW;+FQIaK~*Ne1Swf*jkpUQhOj;b8Od9&nXF`Arf55l>j*6d37>G0Z`!8WdcR1OoFx>}>lqFRGbl7W&S_?DV6i5egKo4z9t+#A6x9D47B`PiR-TbP@k{koRy}Bg1x_ z(NG&h<#r77&`U#mPcAxW!XVQC)@r!A(4(QTeyf9{gU>tbbtHb|!vmH5@H;CUO1_5=U0AT_)nDHw2OmFO-^4v8}wda3*z4N!(dxO@4?na{v8E7 zjqZQ$?^{EbA&*9pL7k1mJ9c&4-Uxim-uPU!-aonc{(_17nMmPM^D1vFa_#t|4^ye1 zKIoedv7az00o-^s_C4Cw46;WWi)T=gcp+gf@`IVt1qa`QT)74%{2}v+YWG#>KUY(y z_wCyLpc{Dpv72RFg#IUMH1_xr@vm;uATIB;ocw=sFRteYCWoIOldjT2=cRqyDcs(- zYQcHlVeri^S1`=#lLyjNicNI%#MBjw#dJi(UJ4{1z;G9-=zr%}$Je{yT!&S}Z-)H= zqy0n^9hwu~x`UnP`XqUR=>zeJFbEqsSW8&xK{y(8=>I<8D4_bpz{B##Jq_CnTfBo* z#Q(;MLkK`=Plw14b1Q0G8U-t;5IRpF3dMrb9G3P^?mOyGKFFw=Kk1z_E{V5;(JLd% z1$X;2Cx?_-pn2MNdJie#kDL3)k=W4ZkEM2>fm!CzEDw=P_7)-fwtsB z&iW??TAk95qWqgai|5$tfa%Y`4C`;B|_zSkhTIre(s(@vq@vt6g-i&Hl6N#)}-K)OGk!o#YnS}SCBR&A492$Kt~l*6jo7+q1;63J4I6(UgXT* z3gYGiw27bxJ>#~oB+iocHY_0OR5e*Ih6u+VG}<*`On)OWtoFPn3z>;PZw__*;{T=( zfCXTeb8H36_=$WXR&{H1VU=rlItE(0xy|T+CY1Egs(sTKS{!!4_7c8SL%I|7 zLI%I1fJ{P|R(k<`ZbU4|)qYqSpHpo<8CYnXXN1kY8w(c(WqSk`O-pMfcNvVm$ug{x ze8^R*?{8Vj@Wd0nH52L8-z9>(eQ^8}!?0%2Y_e7Fgz%9qTDq>K23uv>t2BKZzS!YTs0hB#vEmA1wx(5}Wp0 z#{Zio9qYc5ITL(has9DMgw4S1NH7xz7~7FxHq9osRO^`HU*dO!KF8}$ii@o_eUYR$ zO(e!vQ#ph4a5|$$i`AM(ldLsljX&F(9YeTFAB(%oA5;7%C+6v*Ys~zQL0@k}qO(4e z$g_^0$g=_ZQ`bt17+*R5(pPySzlblXu~NdcE~P2fD5OXcDp`n>KpxdNPC}GV5==Ts zIr(5Z>NH}8C8ioogdCQ?AJZNPOJh$I!+8^h`*%sn2|Hb>RcW`Pb0sw!;Wg*B=Z)0h z@2-yCR7KOW)?d|6rWavfRG+Uc)MoLK@UDbj_` z7C`PH=QdgXD1pm}ygMWIa^lk4@}?Z?YBeGr3}l7#T(lYuqC_-1b)r194q7C+C{kPb zNX5;dgIA5n;XVY$!njhIT*s1r%gQWdy91q?9NU9zYQ~!O3#(#QgIF;pl6D+?*80fE z6;-N|#s&&xVCmn#KS66R=|DIeH|b~!;H?mAFXsI#KiT1j5|TjR;OiV!G@&S$Uo8rp zAJ~{7@*ouQs3r1%XkyR=395?NG;}WW)8Sk;l~h(VD#cRHhB?ljx!4RVti4{AAqG{H z)F@H0U**=DL5)2AJt(WD6AZIaz@%598Xp8o&CYSdh;};<7B~WIRBMGxN}o*T{25Qv zYfG9=jY4RLdvu9^`fdVyLpdlx7uR*s55-&?WhNL0w^OWzSP%w2>Gg-mm)zP5bO2F$ z7JAJcA%F#O#C{&0f_ohGQFepngsb$bvGx^`XohYv&7GJ#cv)9e49{r+20BqtX8}iV z7?}!HqA*>uux?zWW_--5@Ry0GP7YvmY0>^vvjAp7%WZv|E6{%`&-OLIGYEhoqx;atqj? zcN2dsz~AQ1!yu;kZ?R>Jvg?ciY(L|AJD|wg z!xZXPhFTg+S{_FU;S3>S_PQ z5rwTuVGhw9FohqPrUOwaLwW^6&oKts{BZ9~W6jx|tgh+vQ~9J=#P4^W_#re*PJzLJ zjNGRcg!Of)6hEMDXTvL)jdI7@PS{rq;2q=p) zPUbSW`v&uXqD9eA$(~QY;uK6?kz5I!zJn2nSr^9_`-)OhVWMP{p4mo4MrHHW0mZe? z`WRi_$z2RJrkAOu5> z&Rd$aCMYl z#)zxs7ilF_4FiQZcQ)1q9@&U4T9ns0#doynF*zCG8LGBHT+=XmyP&R=r61dA6nML; zu85@{J=1)cCY^o1vlD4UjhH4S#*x1h3wtE_I$4@=bUQplq?xDQcAUouj4zS;p-cme z&j`-w@D3ftjZvQF6n9i#z5OA-I`wK3>hPCsf@feXGGYVE2!wmy`nWkTVgub6wM&S1 z_U|yNZHH%44RZE|_dS}AH1AMr^x1lqF|3aU@0>f(?h3Ub*N@u0{_9YT0EOY6_Z~(- zx_e-1IJ>)TJ#({|DcmFG0n3DGlcZ1hIBjNjNcOwZ{pp^!`KZnbRbOP9r)8ni8PG># zLpfi9yn3Qx7Req1c54hel-vy(u!Dtn)@V`VbFTct88C!}hgl!-nmu|v@uow~jCl4s zvGLZ=%Ix9(OXL2*DHi%+!sEfPdC2?K(KQkot5g5>kl{T>Q z-{lj|K9$ToU&Dg)J-@3C=5rGga77f5E@{dp*O#oy5-#?Z^8KbDFW?$hg8M;=;D4`1 zw0MfRO~XBH*rK(lZajnkrDqljp=40RUvoa%`#=LZjW>4}YN#k!6Ev9a=QeA78 zx1rjljQaW2aVUZo89y)O8=QBjf@1!sK>TWy=pI}g$Y6!}$p%3C=^r`7oyOcl9tnuQ z92Nln4d^FnfNTTyw98x#`56lkAVc0Yzhb&a{<%wg#qJswx=MrlFpU%n&rHdr(=cy9 zV4jRJi@~RK(GF7K5hCBJj+MKQ;%p$ z`2ysPx=zd8&}fAHFH73U*BE)7PJWe7cVe`WYB9;YE9`!zOfaM~LBOk#_W076ggJHO zsh~9iIc_cTb!i#Fl!{iA8xB)P+HzsH2Of|5##8zPRiU57A*v;iGqJZ42bmTf_Q_Xx zLIrv`vA6cTPKjmy>7~?~t=gR18xq_lNPYv7`k&F40fO6~Y5pNvSAWz4n??OM19J{3 zXs##a5LffWCn#oP^Xg5Gb+efTC_5tchVbiOoO+VC26^ovQ zbiYJ$n|a}vkfblCV!XhjW5JXOq4I=~1q}q)D?RJ&-ICD?VK(<*E%waj-7epAh~8<0 z?n4d4?YI|&_!?UR6LN_~ONj+bi6zUidCRdy%drC0I0*$Wcf(?I`~UmQ?28GxC@&Fs z7Vm#|X*fdKU$ymewdF4mq}704TH&gc|NPl8M3K;xsXrikqo}0X!T>#k>$28om=kNw ziBfmQNqXRQO<|c=n-%ToMp}6wflIV7eaQ?ts> zOjlBjYH?ztfmC`2Y&Np)U zcv!pmH+1wdye2iKNliC4;-pT!)^3!YGqn3ScQb6l-jwbp!W9O7`=Mzf|nA~x+`qtnCOm2O8K=i`@co^PNYJqPE%1ML`AidQ-$ z3hW^tw5`bc&o5O>*?q#Mwwc68aCs*EeY7KRYJJHP1=)I;U_DDlju>Y4tjnzplJgPy z28gEr&h(Cx*ShaiB4(1O{X`90elTtAW5^lTOEG`Lm%g1w_V2?}f&0&JDvm3c!0d0h}bHxHLS@^(v$hcGcEV*JujZ&<{~ z6vE?U(8Pa;LVc4=2h5iz%N#3xaZFBFGD!Z6z`fy}j?=g6+K)Uxcx@B470BC5g!ukO z9LM(*?v1Q@Ah%7g+jo1T;ZLbsz&LR8rQGXRc#umY-ZN(ENcMWLTh;HCfqEmTO1N#} ze-L5U^fyIvfMBY_#yWvDzj7xR{vBc3f-qr?pR~eFM(ZJ&<|5El5V_w3463^qt%WYfsUQ5 zOUKOa-iqkEnl&i!lgDmbprqvuPT606(Sbv%k6~WUU&f|6Vt7reAXfK~P=(t*-O?j9}hY>O&vLARn!8`rk68z$I=B!X3MTRl{yc+p_NZCvb1n2kyt zY5e%&zasnB(X*8h=#_+V8easGa&zN6UnYMSvlxzc4wawZmX;=%p1^Ofq^BmOgwKz}|C%$wN375Z8$ba?$2^wKERwz!^7?zv_jJ=z4jEa4b)89q$I4|P_80jLX}#o zZaqHK+{tk31WMU1Kz%va)K_gKmZ%eH>_{c_MHBT!5%pyeDRl9-K!C37U=`d9c(!1u zEOSpQ{)4DrEio@xG!ALGW?Z(-g}wE~(oamTy@;Cw~|ERp-53>)*jo<9FJh*Ex5~AtWXQ3S8^= z`Y{4JfK?u}j-O!tCuf2(5!BSesXK)p_xSTnUQVFr>kA>b>Bk?H4}-72FItgXFC0oA z-gYziHeRu(Z-3E5|Dz_Ba@svGT4_CkYH2M^6aCd0e7hxD{ulZvfHeCf$=Mg7dCk9E z`Gr-B0On{Hiu(hVj2D`@_y(~C_8w*n=0W8vsk^n`5Gyx}_b$jCnGqp!piPA`SwDkU z560X@m9#xhP&=8-*^ZKIB`@+gSoZou5w0NhK6yId4aJus!+SaN<#kPhTJ=aiB%Okh z=_qq;I=#lBwO9l{JT1Rtnb|fQYSgJj`@u)>`&;|&? z0Eyqt8O0Z50{!C08#a&^q0*y{bxH1+wuX~@@#V?@#MTcAu^{i<5){wM2)VjaqyV~= z#;b)k%Fa_Gis2LWwgzVCqapk<&H)e24tNz{3qbvI?pF9lDE4?O`zU~8*9~C(5k~V8 zE5D1f`XQI25<}*L@uiG#h%pl#o zF!2^iHox8qqeQ{mzIvFxdO%?5I_7ri_)B|%O1oIuq7fFU5sR^V&$-C+8^4F2>gl~O zLL+2XUqE%~!+-ae#C%?EsJSF{EL||_%sh}dtWks>gq@w94C44g&|vh*&{E9t4#AYQ zUx77E*Q)hfvr;KM~B|OxbhI;r{8wRLtJAUePr6bAQ z(eyHFSR35Qdd14RPkhr%aLgr6o~JZUm=7v&kPd|1xpErnO}~pq`uhLG@eTPnXrYk5ei0?1szt z)IWo{``howzn8!4hf0HgS5J;pTMk*nNgWr}58Fl;5QWE6IVz?!7zELtCV`+=8FP|` z$4_diIAWZk4c{{{Gw~7~Ey3`I%uT-L1n<0d zzrF?sL*6F@N8F1wyeDybl7&m$n}Hh)XqfrR2|MU>)C`6DZ0hGtUyK~){M{U;Cokwj05#Z5uX zYQ?bBc%!w%d@B8x9Ntv^XWFZE6PwRN)zEhr$kOQ!aayT z!Od+1w0;HqeX|=C{x@(jOPu(co}J`IW_1Zhj?X-7e2Z1Gi>0m(CqmlBe0DjvNe$?m zA9REpT9_EmBW9)wjJhak8R~4Z<`l*I&(3g-EbAhL)EdG~ne-(OI0cq3iGVnIuJaS7qtR-ZqF4=h4V&sH9asQ;8yJm>4}b?!Y^+h#Zvvk!^z81i^20^ zC)o*Zhb`FQhs%N^*3)gO*P8pCA^N>dyvW8IgyZ3juOBiXvd;HKuXa;(>cza((7_z@ zv|7;Er8D;^`}NuArp>9BxCPqk6@|NXzO@+^H|~NIsOSH&q+q z4l$5tK7zG&OsIQ==keGu=Il;gSYWH(vNEWZ2h?bC zjT8Sl^v+STM(E3-Jp=5pby^jBEuzUR=3W}H1H;V4wy>{MsM_b``GzP7{_5b+2gKyL zoJ6xDHqWASWlXPY%F(Q=Y_wi*B{XFCDzY`<<@sg%FEQ8>bZ(-OFqAK|ZsHnSA=0bM z#mdsC6xt(i2joRG`of88v+aZ%v>f1_4VI?$T1r?+!fJ=366r;4LoNN4{@=^Z;XGH5 z56y0d-L+>h`!y23duDstf0le^+bQyvz`c9}nG~l-a95ihZQ-k1dXu}L_U7+B0jPw9 z^t(~l6boYd$`RHR^zEd$sou#1MQj627}yi!g6_k0bltIgsjGgK^^vkgqCE2;{vq}H z*=^r6>N`BWH{RVbiKtnQNti!WXK!>Jgl4?K8n3P&)E)XKD(2B$0!MvocRJm10#3Jc zujJoR1_!sVY~Le#$lU^sT-!6hW?2+rxL)?5Sn?x$apIgAgmz3c`$=%2L)^K>b$iAT znKj0`iK170q}Fa~L}5ZLNBV%Sz?DYWpZ_%XhIf$nh~0n6n6KY)`TMPbi=BP@A=ATH z6&xURsIPqd!=r0LJO=x>WUz<41Y!_V=f$}ehKf3vHF_h|rVDb}tU0GvIqkA@MYKPl z|F3FF^*R z%pH0PmTL}$`vt>;i2!h=gs0>TO%6cK9VGYW5={~z;}MMlDCZ`Ks}Sk6{}<>WUd-J` zCn!6of9Di6fCRWf)q%#BT#E_hE$&e>i<%c=5kWX7o*;$b8P@~C@61K8(~Y{994V(U zN!w44dK2X}X&O6D&wBA9#@z-rnWAuu@Qq^tqufT_SZ8Pwk@uY${e50=hmwFe=cpnv z{<++9wB%va8`^#2DAYLgF)~G_)N}=x!Cy+}NMiC-qXrd7BM3}8&@AxMGmep&@)`8f z?N~QRO*x9AOOwO45maW1E}rqs+C-<^!@T+~bR3iTg@e%1p%Feb9qfO)Fd3O)@r@G! zm9M_hZVjSiLAreMm}8g56>&1y#w~!Pb`NY05M8>n!tiKqK(OvI*DwqvD{AdLow~Eq z+z2B;e%}~9HVR_2De;WMiGH}n93X#8GA$PRFUq+lEP7>|7kJSWZe!!-)CiDY7^&Fi zj*VXG;0!s-n`mij=hVSGySwEEeD{xd1K1gJT)h5zb#fYDVmh9Q0|3W|BmltaAqoI+ za>%TwTYE%?pMH^15l!prL|)e?jj3^Yh@)q_IAX4+TNQoj>cq#eJ~*NdXmxT50kmEo zisMUMaB5?6TpXI~Z5KwXhd)RF>{mwqxGrd5wlTT4xvb%LwyR)zFh#hZ8)EA_yS8}*?^b7#)LzCW7Ie3A8t;BGRruCo3q2;0ED|x$c`5zOvKBn`k(84FMxl3WY6`UcohRw7^mblCpzH#@K5KfFs6aC%-V=X=c_j69_Mf$-k}bdgVOy| z#iI;u)tM|kbyc2u6YE-AKNjB3g>Rkk))AFutv^20-gnqF`WVMTS;80pekI=Xt= zG(Ah;s1UAUEZQu6RXN=s15K_rUjJYhF%e6z`~p_hrb<%1Q-A=mCMtR76Pvjz*wAxO z_+YponKG8ORTRV!lxA>(CaSe|!!MvOgNuI}DE64uN-3ERQ@>G}EK zi`KId3F~k9ni|98wH*keO}=ll)#QdB#p=)v9qp*)sw)23Xdl@%9?` z{}y7Ug3aWzxf9O|lCsUxm!wKy4WVEZH7XurUlXhw{1v?w{Mvy;ex#U0mSLf6K~yyk zFljBU0K{-w&?#I`N@LA@BcVV~VY?=k=-O(^>c%b}`EoApJ;|+536^#A0SazaX}SE& z`|3ytYxPvtl`zYmI-XxAw3pe!BR1B-U{uSjiA-n%Y*3`$?Y{~L8#+jqQEH)QVa5J- zxOj6em$OTZU%H!+sIs8H>^7L8O%v8@DO zzz3m2g>;2kOe@Pa;p#zwBC=o)7*%o%N=59;Q|{apuoK8OjgWRV3Tm_B!4U{gA}BxT z50v6muHYnzt0F>5jb@j&v92)EPdL(>lTbyA7p1Mr>)@LC5T(hI!dF2l6el zUh!b{h4^%`1!Ji3IYl3?h#1IYEmP$xP);G$)Kx&OHiupo*+dJ+kVkVH<>0jG63fdh z!TXw6#2ER08@c_RA8$0fIE?H&nrDj1NMu`3%qXe#bK}%p6P%KuRl%}9fR=@94OSVV zjl{N+=|q9nDW+JKRmE8Z{ZAa=7Lkz0TvF_$NwErXIWC{U{yk36_-PnNgk3W2iOr#f zJ$F~&bVLphKY$(t!R;<%QcsN|P@{qRhDo0L2=XjC5Sry)c2o^S-5F-oiCt98Py2HD zGpmUW3O2uMC_ix>N5>K@H^2z3YBv@(K0DS7ol4Bcu9q3n(l^A5SN!iMY`{?O+U9_X z56vE~IT>LOcnL4Z)Lna|jYz zlSvxkW^dd0`SO@tO<-wutT>)?qIHtPKm?9E=N1}|1oj1-$c1Eyq!JMhQMQUnPPKzv zd61oYnN;`I6@kl#qY;1w0{VHl)G#!4etolLa9NrZaCLntY^_O*Hzm?yV+9y2A3}A; znXyBJx(7okNez+=!zO7jw^vFjF?drIIWv>nk; zW5|(}$Zdp84xH_LcO^I!<+wh5BZC_mmMpD9sgutpkj5>9m zwW%s&l?9X*h9`_r)fUSnDL*3(j>FX~I{22~oUcE4Mz$O>oZ6H_5>RATd@epcUI8==X`>Ck3z zNPE?#%c~sK)ONc25~mbmhYMW;6qKlp=Ucr+*uBB6|N9H*r@UANCo={nN+xlPRgb<; z4cCc6$26ABvNofcvi3|xdu(~3VyON2+Cs>EmC#sYyPR@SDUk^b)_^{hEukxW89WVR zKJJi-_*q8K@R2<{Pa}FW>n0S!qG_n#kOSGP${J;O=^XOlS};ci3bz=0BAz9+ivQ** z%&T>EYT+^(28#1gifwSRN9T{rO}z43l}naDeIuY5cM=U<<k$QlKY|5mG>zs#< zdI%f*Ljk~j(JK(8N2D?G$_^7+K)CM)TTtoplL7(QR9H~$Es}dV0W`~;(6CEuM0t~4 zBGfyyxQB%f&}EhywGd;JEjkp7cuj5ij1_#Lg1m9m4siuQqv$D1UL<76Y!>ejscW4{#w5?;Ve;fK3KpxO)fEMn>09N@Yv;EWeWwbH`&Uyz2v_upYGzzghxwN(k;!>J)V zTEMv>H~QnwKQw1AdA;Kfhm066{zz{!O4S(T2RT|}OlId@M8_zZ^OQi^i{?$Eg<4@d9NjyDUE%@()Ed`xH#H$4O#=|3=H z)>y~M$ftn=xWu~8lg1Q-evV0H&8}RqK7=B`2a*_LqlMGyj2TCqJ7L?H8(I(9qo{^* zQF~Q>I1n@*d~We)0O>gclC!3}Y4vOq2aj_}!%xZt8KhHGwlBnR0-knKYyWOnq=WfK zao=FlmBmA0e>7@S5d})3r}h9!c;1qVr4A+Yp^ero*W?|1SJ<3g3gz%xv^Q7&;IV`c zvOfajhe<9cyy?7Y9s08)4M`6&GoF&?*E)-CWE=;M43az5OTj6RgntJgJ*eF=dGnmG zhP_1tCTDbC`M&oD9qtSwV0Hr#TVbcCBp!(Y=4WQ)TG+m@d+O=<3(DMbup`W{RDNm{ zO7G%n?ZdfO(@BVv_e*|yls35!-_3yJ?_~h9zlR2}M;wR^?InFy^(zVebAkA*>lozo z_ix=pd+z9U5q}{-O0;H5rLHrR&H{N%fN-&y*YNa%&xds9tSH{`Ud(c@k2+4~TeqX- z%;wNT(nX%-ARP=_;_WBK&vnumQ_|Rx#SYJByIf?UxuBgZ2_1L0B;KdL)A-a!2DdSQ zOYg}9fjnoWO81r6-_$Ws^ufVaSH)T#!baV#|K<*4vj#PWl036Fc`)d79b4hM?~!I5 zHNdtwAOil2F8Mk?4r$=_)h){DdH_*t*n=%=U2|_4CDW$$$}FgH{s9%wxk5&L%Ix$$ zRt<6|RI`8a(BLQrEXup7bAaP}a#(U+(*eYpOTxLuw@Oh?{}J^w#l{rd$HT9uKNFrZ zH)((QtIvrLU%{HWE|MfTuTw`!Pk~94Z6Fh)eCF`XOIoSPIz|(9U~LIev6B)Iur_Zj zs^Z=|bU1afU3){&+1{+A#c!0kuu`M)QBMFr0-#9d=}E5iNKclQEp=xf#lTKliH&s= z!atZ}5FcHtzg)YX7LgakI=G}Je65@n<(yet!F5%(6~2;M_qk)ewDU0aNHU>#q6;;)N8S)`}vfa0O5y!UB}e)$-7pEp5{ z`-^;TFM>_F$q14H7MD1l#~y|Rfwzf}#KK6hYtm-^Um9QjZhkz2k6h2yZHjCPVPr2R z?))Gf;cpO)wZ30@wDhCcw$RRKiLZ3dc*a0>ac#)1XjjiZC)iDdcVpWMc3s*%iH)JD z0~C8rWGxwQmQGMk)W++%!YeKwe`#tW%;*8ggSEPTQ2~ut?bE6P=!`9HU#361hkh{(Zv|n$f7ss z-;Fiw^WiBA!7~aD=z-d)sRbF1b=*Pq8;!9o9g`rXa;i=0-)votX++#o01#qDqN~Be zy+sJxfOHAMiBxQ$Q&0x<%qtfH1{8T!O}i9HhBfbdTEi z2n;j5ZqHO0y>~#dAzd&ebx9p5r&#V*=Tjr7p4W5LI;PQAAp};|bgH@=iw77OY3%O$ zqE25Ju~wE25y=Ld3d%wtK8>KsmUQC&0{dzsEFEd7vf|~d)ss2OYj+Ra>^a)3Q|VIB z{eairkb)WoANy&>WrsT%f!I-`gh?;7 z757YHL?El2&?NKeuuxWH@^X7zazh|un95xS!C=lVyeueBtsJ>B^R$)b`Vi_I_cSoN zzC9vgvNMPk--1e#rC~VqiK%A(qRkg`z3Sl_@fIYawc474^TAgCgR~|g<2K)*?x^2? z-l`0&tqC55ua(`gMX1i#r*+R}ZsOU}E+OT%eg|&bjV^soG*@VLAPZekY^619~y2?(3pq>ZpGiRK88e0 zjY;!Gu{A~bz(*+)r4DUnj}+Hng_SKp{h2aA4p=-y;%!aJXdjvF_z7@7-&bbV;u{; z>Ws!LZv_hFKOp{`siSkn*ky^Fc?dH5bZ)EM%)jli!e#C_xuXenJ$V5oEy>f5JXju= zpEC61x=}0bvJLJPg+NudQlPlctOjetLL4b$;1m!d_|LsuR>~qC<&49N0958vU!yM9 zjSyBs-HG)RPr`S)!<2nUH9J;{17*+-WQbHXzW$6&7i75PxI(`8ARnV@AcqlT3(CW@ zx+EjbeKXELGl}xMtT1vfmm=5*qwH7OfMc@uTY~5b1oyv=;jzbj0bMAO1LG_=u8lcb zLmXYHs@h;|N4DwkndS$a49M(!lv*`a-b}c&1yLS;H;|b{#z;5S>@sWG6fjmDRom9$ z@{JS{eDy==LLQj~=4wi_d8mjtPY~*mSVrm*wRJ&Nvg!up>`2-spatL$a?(Yspn9;1^3H9ktAW}z|bz8DePsp+fWW@pi3#!ZNML(+takQT=3X4UHdORYO zu@cR$(CrSGW|mRTs{ck{ON>jbR-=laV`EEd+x%nAJHflDZT+ZO`$LS?2fetBD(OAi zCPaXLB6-;RK~;&Tmv-q8;``2le8Qj6T$Eho0|n7<0yAL?nh~a5D-5b;7b|S{3%jUg z(h~X`WiVxjLVGN$Wu_02!eS4ebSvMGInB&AsHFKaMRmO%o~FWGHjm=bmLOYV3r5U8 z-i}b#Osf~Sv_+_(6~1xCn?S}L7tJoXw?jej(4UH8B3D0621On&v%xVJUMFDd&j%-& z*=8nPho0YK{acK%yTmTv0J^|`hSa{lXf3;uzY!=0EldTzq0ffW z9ie^YaPHx4!yM4b<4G^_z%xB*7AA!f;`*2FT#Y{&Gk_LUpaNLtN13W7Q4UR1y>eWT zFdGLjywT#|M()^ov1dpla}m4k2tWPq!F^MVV*9o@Mp#29WXy@OP0~X`jlzEG7|Ko#8a2CcIi}S#VS`07(tWhBU;%Xf)!E z(Q?ILNWVK{G4laJbnNoTf9H%qFfVu&$++l?w2;rs-B zz?2c)ls|RX5hZHN({36~4LYL;>-dfglnlBeE!sFZcB>&b+_h#&1Jf^?FN0AratT6T zv|IW5ZaMjrYL&K%W<@mFz4*r@Kc)Xwy8A(+h%~qjea+9(KgvoNVrQZrn1t++$Xi zyt$+)ES$x!5WSRcz_%cuiAm5GP{bEV!VY=?gh1%wHWNoiJQ?65inOx&z9eU2QXvxqA5=D=&JFtzE*H`UCuz@<(Euwi5bBALD+YM_PV9gdKV(B}!IdYt5w+*t zg>FlVyA!I`C)YS>wAH|uGz-kCLmAxpG)MisJM}BmjDLa zW}9~>-=dKef%vM|HB?MV{hJr`@UFG#*=To4l#TXQ->@r@&$!#r(3E!4w81PW_o1i} zn3&jUrr{zKZAEhfu})!evxvlU$x)hZqy#DvBAM!`(i7mCXm$6I&?|z@ZNQH*UNF2o zh>!o*hfs1qk3{Gd#n@<>0Tizg!%HKv-LR;8 zSVmJjMdU}+h!yZV7GD^?J+eC_-$=}!P}wi=(mg%~oZh~lH&~2HKaKfB(fP!ExI9vX zUWs8Dw4`xkBI7dl%ffX01O3S<7*^1P+i+V|(^ANr5iR88W_zj@N&)1r`$7U5#youm z)u7Gqo2>0tbVq*a>?^is`@GKOZ?V^EFc&tnx&v24q)rm5kt@D-JFC+Wz97imZ732V z(3UAI83naMqQ@&-8zf^F5_`>3MAls4nWVxZIhx&Zt5A3Bto~|h$f$#Bk7RT*rNzTJ zOCHH5!ySjBeH^5qyf}zcl30-FU zq|xCgc{8>Vr4fvln&rhPG54)MT()`_Xg2m`e1BnY6s=ZB60LQuFyu$BfmCvrW%-Uv zJ{wR+Bre&K-GF`JWeWrv>I6FK2JsUhh(e%6BXsS9#RH3k8KqGv=w*rrwCCYb!++|8 zVf;-D@j=E#v+=0q(V@tq4C-{F{U3wjStAqd|Bi)Hh2YsD7VXJ0puR*p+~ug*rxM0cjc9l8N)KZx#8!)hvPOPnkiJ|EA9k--k5r4Och6A|WrLVx zF=9Q2ZcRk)6!$FK&nsVnRwAeCiLs18zGpqWR(2Y2JIY)~ChH5ji#%_0Q>?QOJlmG~PADMRD|ZOJ=&YyD>#6HN?oC^!_UHvAlQ3yEVaM;ZHjO6~wUhKyl{* zzD02IxhqLeC9hr%<2% zfGwu^8)OV*SqWv^xiIG)j*|JaMa64?)82rIBVhMXPX+NDaE&1t>koj?30MVl+Y*Hz zEfJ@!4ic{fq4x!m4A4qw-LfclLAHv}3E!BkAOECf5$7G41zLt48z$AS>fjJDxQVY! zDX$^fiNgsTU*Zc`2k077Jt1ux__ra1hG*$#w}Hl@`UL|ySYfA>sf)|imv^l`3}po4 zCxF;UYjK4b1uyGPKQw_8RBTz33AgW}GUe%zaCopX<>51#mCg9n-2yCgw`fjQI4aXU zl3T5TbjQeWv)W{g+O8=^Uaeg?kSY!7^KrP2EMl4+Mpe}$TI4+)-^{FJ$j-GFLUvSa|s~11qfXQBiCnveA*@^bkl2J z0r$3nKMea4zWT_M--Klx0Q}1{PB{03$Q&NDFLg(rL5NFO_r#|CBiBcAAhAZ68=y7Z zXxxw+#B<=WMyKm9HY|0Q=#H|3QrpjVK=TGa{VvlLmg&CRk?57isKAO6QHK+&1{R29 znPq}+jcQerC@ATRkYfD6vQgV6$FW>87x_vKj6m$>SH}3qYydC$-M){*ICjnZ%=v>U z`CS~}{dI)UYa-8j#HCSHpGaVQMj=?*VKlhI2&Q+}C$F#p!D@GQe}!~n#KN#8?~^(6 z9Y88^!koe&2I)PPQwv~R`8(bH9&&A{thiQ>-|n6SBfS=1${V)*fUmfgZ$S7S2_rMl zAoUHjf_Q+Df`FXmk}#XTRk>g$GW2rFT%EsKf(|Q0!V9_kfjobs_Kf6>jvR(_?MK1} zK7<7L`v&+1Jf#Nx{6i=daTj+{QzQS_qJ=w)XZB{y>CD43l7~*90l#dmH4>g%c9hlr zgd6Zh^*(#_oowV1UjJ*fR2fGf=$oq059R4r_@h;OQtGJ_&y{arvt>YV*?Xz45XH3O z#Hjvcp4FE3#&^KnbhG{4>{Tz?)Q{y|0ysG@{au;L>SPfdM#p8mOP7&u{BXgRam`ge zTS!Qf!$PxxZ2fS9Qn~6{0yi!1Kw<~RXL$pVvWDK7St5k9n|r*t2-#4(7A_`kIL9O1 zV}*0iOEDh?oPItFk%^49_Y)(;JdjcHo$*=wAI8zrjJp*pXOZ*wM6wMt26cGyj& zJhw|(juPCc^phR{`&eSRMF3Az2=(sWeGb_DVA=Uj`EbuRBke@uvDlUbPh@nnc&v3U z>p-F?4VK#kV@vH#A^YgdfdU>V*%wi?aX?C`<%ggEBA@r|8fDcAWX|3 zx^P2Enx*Dz8DB5!)8v)vM(vOZgM|4qvHm$N@Aotly^r0&eX5t}Yu;ZXD5FcP22+ zn4*jFbb#wY-CZwrFsuQHHwk(Vy8VxDf|Puk)I3dPeXn+?2BZJrvEx(%3%kI|zH&R1 z+5~Cz*q>ZVxuIvqXe<+Cx-=U16zwRjNas3Bq-r5;Y1_xr^f*H}Yh|di(Dm z*L`2JZd%_yDnpY^(;VHG41#5`px-(u7TatTcYaMjDzaRVeoRiLJMQ;BG`Fg)**B#; zjIg?LYCG-ng%wzK#@#Se+$b*YFLpqT4qtx5QZ(`&NO=JxChnRA1M`9iS;b%5cAa`} zfBNQbwxh{`@r6}l-3mHZ_yW|n5wPNLhK9CR`knNKU$hfXQ}g)g-YMMA-SWR+LdRwe z%D)1Uf2`OgeW96-dL`z2gCyU1s1x|&Pk#_FkLBt#e_+bS_4I?jQp6vyv?T=IP+<#H zkm{5g1+q-TzB7Sw7o6R-rTopBh2JVypm$am_NX*par)miE~Cml7(_0^e42jJ3rxrh zbj1iu1pFR94iw8r%p}a6+YnRtoRp>fY2;&Pm8K!9M&=NfvkfT z^=W#_LH>fV4(C$SFGfx?RNfn*(-K8qC%ZPc z>iTSY=P+{m)5NoTDElVnff~To7Lq15kSs)W0EqXR$7y|6ZUz8PL9AUcNNacfX+?Nj54FewO8=eoF4SZGA*@ zaS{sY+WYBLYH0ddy}-BiPnp6g%qO7@z~1MOjC=B@wE zN!IXmDX;JTkD^Y<=JK&ja|cG1KA#Pl>eWLTb+IQG5~{s<1xk=k7ToxT^qn~gJ%1Lg zP?I8hQHoHmDj-s`WO@k=J{Wc2uqKMKRTM!vO+fR8qI&Hz!o6Cb$%bTG=!x|_<{oMF ze1~=}@F-=WBfC$d$Wm6d{fB7@vf%O#1Kxz~h#LylRoya78Q|{Vt4vnrP}=koQ(v0! z0|((cnq-G3bTNa-mR@_WtDjJ@xyb%&2I4x@?t7wzX$8ljp5=(F9;dfdcfHFl#^s(w z-tC2qsa@r#SL3U#YQ6I4Bbz+;2Amu8E2i4uhN<|3EXN7&DDGQ13Y5m@!}SQ3duAG? z5r$=8NBeh}*y9G?8W=Elrp>WWtT&fjs&40#`R87kb!`s+-Goj22odhITJCflnAe^i z4)WSZ)A;DeWw=D}>dfm%7FS8>M#RuQJ+Xzt!42lYjpo>jED2m5SW+{S#Pm$)`36TF z|0ckw#c86aP4MzY$**DosV2I(@h>kZf?BDcR6;a=IUcU9Wf<^N0;yTWJGctM`{ zIJA;eKyf{o&PipU0doHHa6)sxar}4nBSK+s#*Igq9_JiDc9-X!5l@1K9H?taMdy(W(&gi|u(k5H$?!d%}R<&miC@@uaSxVm+?G zlFrh}QPJDRTr0gO*YP({k_;B->yoW@Yc!rfeK7AhrwcOlBy;upI(la10QI#G`d=S_qNd({kZYlZ**J2If9NOkw?NlS z>J>h=I!e+cF$}sgQ2BJef1fOn-3e%&fsigQ?I*o0y6BA~1Ar?{C}S)vMJADl)E$ zHrz^med74iJ7EtCUMfjSs=g$8(C$n+kFy!R=cyp)Z+~j6&+YD+wAn`M zPe99MwzjQ&InAO20gJZ^ld#QC~57Sxm zZAP>gwMh!}IEGa}H7e8iX9hfDiuQVTbJ9wc&CH+5Z0xDEjDo^vf{1907Y*BLaX8E2 zy76LSLkyJ85u?aMk|-P&N_L9UK>gGvCDFh7yGnbLC^6C*p46F1^E5@1`5K^ro0yH0 zrhoJG-Ja|vtz}S|N(38NB~x>u(wc43+u7N8Y?6n)eKq^dw9M`<*use|RT*xxyT)NE zL4#C{Oluioy0>^F86TuW$J~8C*p(8ekHUWYj9d!5#*+ySqcLQ%?#uT(NC5&6ocTX5 z`gRc2=Ft1t8z@cIxzwQ5vtefu;ZWgEB7*3HG6p-SrrLwT5UunWf{0=$SJh!yIaCT& z4i>y-^35VN)mZgYhPwXO9=Ozk8VE{fiS|kZTc}^R~+;M56?LrmidG z3@JSGF)mH@OtHv-;b;cf^47 z9w0g&6?p0`3HOK&_TJ&#ArWLHqxeo0nT3<_Z@cHX}lW~Qr$Zw)d;FdQI z=3688O_j~-ikMDInHwao=V!~TV)(_^uRTI`u zMi({HwUqTBBDgDHQAAL8{(+aj-#FKCbEKR&Zio)^#HkCDl>2^O2)=;?b_l+S9G%0~ zvJ!9TgP;&Zdny{$Ru%C00&%ra0Y-`0gt|guV@frs!itr5GBtg9k!)5fAfyL`k1Ez# z;cTFl5VBRL?R2yeq`8Fxv^J69D2dl}_mqOWZP7+m{Chf#UhpwpY&K)@HmPLEMvM>a zz`$r{dZPU*4&hU)%Ej0yUylP`p4r*(j=U$uZy>Uql)fgWK-Oi%)4H`Amr7pW27YUw z5JHC3S8`95EM&TuFH67v_RX#gI4>bNC=qnoQB6yiS}#h=uLgSGvM!Rvgv?X&IuRoJ z34_!#2R^An5vNKCnxgGBK`?q`S}~_Agevc#Qm@vfb5ygU?qz2l#cr9o6Ff$Wf78fU z-*vMS%KTpbnd>fgl=?(vo{parHE86YfFIp4ta}SiLoa=uQ!QR0_<>?iTb$A?snz>9 zqHw9#$4twpTrE|a*BGusx&Av!e36Pjc99FXNu0|m$05jP}-1bUpaf}IKUY+2PYaQH?XmK?J0G0lv-_Cuj_0?ycD-AkB${`iF+I?dR! zTHs5UF!7vTah&?>#GQJ$J-+t#{=n(;N%M`^I|6%)NA0`t$r2onVzJYxYT(U;hgIP@ zrK6#t4!vXtbvFsciLbE7!l%Y*rr*3h8MltVEp+!I>QnwN=KV=+?Hq@|xQ51>LbIvQ!sC89Ka- zbn=!6$V`l|nZjHyyyh&UOKWeW(3-q7G1U(@GgE3-g)wDXhwo8sjgEAvG$%d1RF#tf zOK%FC^byiZUhK+ffn_|DI~>}zS3thfETd9gm$$d*PT*0|Cnz#_BLzDI6M= zun+%ijI#_1Qx+?~UlU@?VV@UEe;h03{M+QzaB0<~wr$-4HDvO-JNsBjJ9c^!%p^uJy8kRj*{3WdGVt74h< zX0U+>2=%1wRpU1g-%kuRs}~W1FuyyMs|=HR261U zu2UO~L}xw3z=MHZbr2HLxKfs1mLH4`<=j!Br`$_2>DH8-q0=L4OteyLHo~!)G&Px5 zYL?8w$ZG5;p@JA~?2d2fbgPk?7be!R@)IT&B|uBXjLG^?UHIb0SLYYTX(dBpYzOf1J-msknZs8o`?mlh45 z8=cNZP6v>}G98qxMn4V=w7KtDwy&UH`L$e|&NljFx4oFgWs_PPy`4tq)71S@ipAy; zWOOVQJ(d;`_!7x^=imT;!y9C+D{AZL^TG{Cc*Bq!cm&8D8UluqCf1bqOC+Cl+KLv4 zl_-Bh#X9o}#+zi2J^=L~y{-qQlcXcSfZxR7x=%bb32*~rk0U0efyrIp4t#}w^L4)e zMm)rC1{egfq=!pufgT_upls~e|lo%aW7!6U=|KLh@Jx9Y( zt%07rH1u%rZ$MC|>jb@=S>DaM3>iK7h}0^F(|To?8?dkaPGPZbzJ`}f4gQuOOVA$z zoAW&zTys?86+j~orzm5s?TA;y8B@n?KuG148QP%b87ev3ZNI%H$A#s zKn``YSVHcWp;4tZVZ`GWLQce5$@c%8#dHV5&#+dJqEk{)pIlT?)52UXc9!{pkswQT z93E$IAtWa^ghS5@FPN}peB0fAdb(&wt)n}6;qJ1KJ?SOc3xa||8tX{c3N{JH0C@46 zu&d&@H^TSy+6uWh$&X~h_h@Cm8Bd=8*2Oru-eB)Vd1*)dM?A=LS)AMpQ#=P^7Z&?g`O0PtV`1E&8aJS)1`I$PM7 z5HtK2Hm4|S$RQ~p|Jb6HCMTfU1Ez>jD0axp|IyH{15$-Tx7rIRGiXaCSj;fx6xjoR zuZqCW9D~1GO@G@%WXa`XPT{wh9L)B*X*c8B&8G9?!vR7c5hTi_#}^-hrz`Xw`jbX~ zCI%$rtJrouh{GpJzY*Mto@6gKz#e2LH7^vILPOtFUCNe1LsCE`%9>D5Gd(8D_!c54 z(A?BDJ(t5;ZB1x)W7$zd9Q-mbMRG(;Lb<}xyXo1M6v(dgHJIsD@G1uvt0!Sb706NB;HAn za4*2zJHaVAtpLTnnJ9t^qGSyL$7rV2Ii)$C)jYP8l`SJk>F3Q z0=9h=I9elS-IQgpqcDgKy zsywf*1B9Nq{6wOTI!#VFO_mM~>_cgtIrkUt%v2~q5O`-*!ceh*tBT2>q(X$6yLkO3{)r|52mW0iGg&F~X%om65jU1@eOv8qq}WgZ^6&~i5Y$+ka0Jx?tzPQ!;5*^ ziyYw{xE+D=(u!RNjW}a_c*{}z7a;p3jOT0cr|U}R;)e5_Au%?=ht0#1 z^c#08|KY!Q-_JIKa`2R19 zNX*36#L>Xn&QZzP!1=$s9YrlGBmv|f*~F6$nGNCIk(vvcDudapmkB5CPxmP!Jths zYm5W5`knq2$`pa4CV+ayT-A4I1VF($WL4-IB;^mB4vDRuB1I>k6e40ICJER zzph*A5d~x!(J4!0Ym2F>95W95S#iLjSt=i@Pf*DrJVpeY5kE zH(X~v27l!~r1%P&xBd&%s%>S#KkDe$60Lepp@TO~Du9WTS*coKMh};R0<{N39*I;xFX>^p6Kp>eNkktYzAl^Phj@<(K^9S1^^j2%yNFOnsU_ zMl}?5i&}kpq}qCI$rnkBdtF;iLL}RIZ~TLry6#c>J1vPP%}AIAxYR*!h|7xF+QXZ4 ztjppLOaqsb@zn~phL=z5RvG#|ttS%!sW!iQt=lIUHId{2bB{i~o zP07ogh>{viV3Ts^<)KQ<#tQ!0;I{MS)r%>^niZ+x4KR~$=gahD`qS61_qB89+mH+SD4FP_Zy>|jvI=WgiNVP}~88!O#C4t&q07|+dKR+xu-a2j9V zU=c3&$*3~-{%Df>L{QncJJ{~yfde1roe#Y4UO)Ud#G#mP@Lg40@u|CeZWx-o`+QIu z_gg*xJB6pBoRui$wyk+6ZN6yIQ$9(738SZIpHo1tY_+;yF8_1GW0Q=glc1Cr=$wd>!){Thiq-Jfp$N6dNZrF|>%^P% z$ShUKDa1As_JuGS<^Y0|IOYN!T{zAXk`(4A8c_zRsWB#W4UssEp@roX87OIt6he*M zY5Z!AW(fL##5L3aBe6pn*NGv;?hcdMbs#rfTrb$gXK@Yr`GxJq(2k;S*$ZYd{eKAy z=jE0hn~LV`eL7(x1uSA|e4q|7z{UP*mL<>eXu8PGge-5x+v1~1+hVb%iVfwsvE=w2 zAl|^zh&Lhq|H?wPvYLcbrH`&jSUoq^BsrunuaM21^OrBIjWrEh zJPOv3tG{e6?;>J%D?9~nBS?+TRe4fT*_R=mnU{-ZGT4XPmvQ7=FOu1p+d}3`O;{1f z$*rnf6cwbgfS9tom^laM+b0dzoi*h!ql^LCj3_GPl@S&_NwesQ<+s!mWk#aiBPj(O zhx&ADFz#hO`ljCJ2j!dEP}7_dER7QKgz1-~>D>P&*f97F+}MCnCViMb8f_}K#@JRE^ohwj zn9;D6HS0DuB0+$J4K-}vwI{CQUSK{OM{9PFdwFOUCDZ@<4~-SNBD$Ed4t0)Qi)0&5 zXKOcv7D~lqrPj>4y43eet~AXR=6uYFjB*icLvenrr7)aP_CgPC&6A>5D=SEpXxxOd%WM zQGwV}vJT^rp2niK;*=z>8+%<}&bN#?L4dQ3CqEh~1C6*`ivH}Ax6E@AaG>y>D()qc z==T?38<)cJ#LW{PK6<2c(-7`})(5-HJhYZIoTv8?&(v!%v~5X;Dlx!6s&qxC;C2-r zsC0=^RK(Xr=Iyzl@D0x@e_`9rVVEcrRlI@vau`!AIw*fZ^{P5R(yH8(?kL`4eYuV? zGiA|N@BTd-xaD!z8pgX5LpeQ^qhvK`jO06{qm=E7pxl`pl;HkK3G;Z%>T?K+5}{ym zvx1~-UB{*DjG}P#T+dPd!ucnEFZU%i+}tKR4Ex5GLkVv}S8f3a{4*N#uVH%!0V3w^ zTMf!v3fSQK> zIv-bG?(v+bdqlNyJA+%YyDWL+SZVLWZJQHYlhr<4YV=@qekR2mAA?5HHS^eaGU4Jw z>>sGUwcsRrviG9r>0TO8lo*SS17y6)3DF3BN+5+NwCLvsUbLxr!{qU${%ts}EI7DH0=0lrgX{9oH|xf|T+V7wj!z5!{-b&$=(~ z4i=*`9^f2V>SZY%g)uGB z5$O>@`z%7T{qHybFS!B2Y-^gj$XrTi9HdC*5Vt~Ocx~IKb?B4{c)7%=;He06fy%G2 zA#~~y#CKm9+5W$XjxdG4wzYqx95O)*2Bq-%Wy=4mLQ=u=pWBOU-~`B~^4~I)ZSu3Q z%EP7>$N(*ii>D={D-w(ys~ZSlf@nytLKbM2tl+q6rQ=8@G2Jjmbk2Q^jO6Ga%GNoM z?KvlED;k1DCZ`8vp?m)^Q-@hu;IS%@EFp?5uY7D$u~A+YRhf@XK~!mOR)Qa*Nf!?X2g5-s<;xGH+n(HG_o{=6LVBVb7Eq%&H^J(EFyv~HQ1I=i#Mld zgR`d=2Su>-M+3YM4Ka#HdB+pf8NXX?eJcU)=o@e6YEp390~l2D>SvHHj%b>uH8tWH zjuY#4#NwfGVR4K45G9(TO%f8Okh&%jPbw*`2#vqVwE5o;;^%^%Cne2vgriIuE*b^L zW~P8{Z~=m%ZpXuMyQW8EqBalRyRw$PRKDsPh71od~0)0sejR)H=?TnH#;nDB8Yr$=KYf9?5%0l~r=*~5w?z`0=_j9ohA6lS@NY{P-gCO#E?#zuj=Gx2yy={+Ec zqViU(f>vQqB#&a z;>cvfQBrf0*p)+M!OWzh7h|)U1?^90^rtVgvwgvMK|SZ$MhwPh*vMb|<94^^6f2*$ zkcPB&MYipFXpj#CLf3ByH{lE53ETKGRuqtK^dz-*;N-6mXUo}ll`-WZKAdqFJK&)h{$$kFsfwL`WC5%fHcxh2e+WUr&6Zw3q1Rgj2Zex=o`*OjF?!o6{_r)itY-( zBES6WM_WZi;$kjsg)LkL@a&erxxUbQVPuIaEb8Sho$PatGObj@CjJQ+B0NvF)J2 z7N!)+4d@1Wdc}#EY0ieD5>ZmK5A4zOGM%%ors7p9d)E4zQ?`yX^j}}(>uicTA9YRB zQtfQ!90n8WIYw)W}OFP1=@63%i^OLj?m*1n=*6G=oSOj zj)lqeSCATF)`nU7bl5}OXFQ@A|KrN{c`e_kPuAzM0axjYX1n=D{xx`26=D2LCZ5z& z6$;Rck`$&>kfD73z8Ni`vX3mRz=kI5=1JKV?Dz`u>e|zfwuho3*u3+#pl;3=gWgyp^Hm4s1mX>rttAI& zBuv}OH*7a&?}D+k{B7a}PDgr{BNu4{%^+nmCLpq%7ZexokigJFIA|nJ>tyGxkfK2m ziJ-Egs-ecVG9$Q0pueqGlmSIqOW!QR{DRGs2{g-k{6;DxCsL($qnNkrAfovR8^8+= z-A_%_M<5%BICf`Z$9zUJe;pH%(%0_=2s%gwq?;fJ0vL%^WZIAsI z$!_<4k&U;0_PpA4zfV)Ha_PElA8lyUq>24#o1t{`qF}KiAL$EBucG<)O2_Rgv2SK* zk5izr)m6N;qg(8uQcYwNE0x}C%Vc{=|8$M3{#miGtJBm5SVaJ=5}G_6{R({)aL2aO z<97Kz4(Zkj+mkow%kGea4%v~70{*VO`;kG|Y?Wxqg%pqAF3HY5ylI&2jPx78AX@-w z=763Ayu#ESO$;DUiGJV|SssU`P0NzLXi4=WCP!y{6yl@l2Sq%|&mEUQ+dpsf^B`GXC{P{aPVmp{`eP1J?0BQ3mr z=j!yHd*H;Kh5K!){cs|N@O5dpKqyyNw(`-4H<4Bhfjy6uYN%9@z8Ap`DIQpYOriBr zyX;;G20NnZMOf@J!ETSbZT{4>50>b`5*D~fUAU(7(>AmYag{$-$oDurv<|iZ#+r2t zo-o)xp{EYnsQ2K#4_6OZ=XLL#&e;{s^M_fo_sFtDcV8W#$~0O@zXD&warC(--Sa#J zM4z)2obz>;O-f?v)Gpo{RK@ytRP5YN{s*Z={s&G#=65D!hz&h1K4`etZR^U9pcppBwzDW{wUEMnDKih#pGzdeg zw?c8)aQPHbW=L(=e~no2e;q}pT-SEL5vD4%Hfq~^O`}9GO(xEuy!$2Em#rJyZzJ#yJ-TDZQ!HWbG zp|916H;3V<`)L$UR5@I;vfVm?b?n26QzvE_$9E|BCXdZRt~#ZlYLlPKSr5Dq4Ulu%dSA(SP>Dd9i|5$xz0m$AxU&#eg{ zVjn&>DDwzPjNuWkMEZwqs$|8V!AIX=^<0YAupp9`z$=M<dd;X%A|j>FzP!QCt#O-yh^-ZlMHCb5`$GJ_vaaKk8~r znav9g@)33mAr5;N@Sen=AU$W||AHt?HA3i2ehK7-Y-*wG z`=#%-<7<-+haYTqK-Of(ma0~i4v;fk$FG^Q{`H1;Z#W*e zp*MuXohQhS{UyJ;9LvPLS^D&gw~f(vMM3&-DJmO8>d5T5|VDcJM;3lT(tl2$G}j#lpX*Llj51F2T#+>Wzp!jKSSL_?P#c=Sw$#&bpuV|4H zgLsTmb2eAxZkqo|ejiN8TAvp|YgK1%S(1RONV*CSA!SM_@GRO;J4g#_m3opsk-(8f z)-T4f%5jId%zk6Rbv4AUaV_p-+-gTF@ zKX7ZP1xm_xmu&!DJ0GHzXdauTu8XN&lR^LZhwDi8GB)m2AE&eua>~gotccII2Rk#) z1{_I$7x;i8ckEBi!DQqRdBRj!DW2m|kkRNoHoS$|vTphYb7lUZ@$gN@A5Dia*qWbP z+hLF3#_B#@JgF*^mZt9>$r+5&Xp}}E=Agcf^ddecS#{3AG%@2^5&0^RqshVgry_TD ze4`vb6+{p^DsZRofP|4jMOS!(&o4LCpK+i^{ehcGCo21#lA^BL6im|C(vq2v>|^kH zp=OLC1=kV1XG1>7E)k)E=~G=G5eBgr!FH0&$B}c(#;OS0n!W^`VEOBnNYQSWBsBs4RHIGo{rCheT9dv|ibcHg81q%b97D0^>3ZhjERI z(@p%|>6*Ktoquv)k`j)G0fe@uZEMQnjy`WQcGifu7l$v|FMHfLfix-O0;}N7{l|gP zcw9mH*hy+@L%TX3NAk+CIs58KpV=>`6riRrMRFS*Su;tkp($q5+6}si!P7wXgtWM` z(NzeKMjN9L#V|xxri?G{ygQgB=yW69so~|OiY4frw@RhP1tZScETb|Vv93{p_l zA_GT<4@(4n62kf{#1MD+EzYSuA1~|Ejt&LxZ9uhICl%x+2!;`w1LHmC$#NJ=d2VhoH?QMA474QK&Z!B$wg@7k$8V_88GB6B|lOdT7R$>b~fd zQN=WnUvdqd6i9x$Qg42Qt?Fia#c!0H!<-^$Y zm@#iaMiWEgn6-c>(Wh`-1OxO!%3~@a#-zK^&5_xVV{B&%lm@HS^j-qvvGWR^$cbUr zgolgFZ@Ot@32G!al87u;B=0GI!kKKWodEoN6$fTn~EgSWhv=0nj1-ekYDl=`zr>`5vrRZ1#9ismd)d;o70v` z)a^H_StH+8$?!5gVaqQ~8!(kP0O1&0aK=A8w%`nO*QuvpNroeImQH510?hJ z#w-VQPuY0C%3|qQptchjfHX0*F*Wbf#Mt+z!WA~1f~Od6sl4Oeozr!A1Hu`FRB;74 zE`>P6Ypli7`j<;=!PAY&yegE&pc2M+RK=Aw-%l2^?K##Z* z(s;~2za-@~zV}k}Wst*>8GMh|ot3oc0 z0?=>00sn_B;Im5(|DS8MIJM4lkStlh3rD6^IXl<(?a~VMnPuGLRfsycusiylgVy;^ z^|-itz`XmQvOe9tafw>?T2iQN44HE*ZK5yC=+@f*|*_oni1N2Hs*hhjiY--E(MfK{AKno>9Ig5bR~ddpsHp zJxhx>$;lyyYQCNoM|;7^VYUqj@5-2dzvjxj99Nc}Rm!^{R#-kuw*4m7Fz4#jU{um9 zSFB+xwIaVdP>IlXro8-UE@~JI(o>p`Ude;EYi*WP$*EkdN zaEpJg$&W2Z$>q2N-Zv;PE57*$UASVFlFXBHB||(pV^+Q9L3pwzp8A;;W{Vts*j3Jo z%oBCRlb#)%b9e(NpCg!6dUH$97tg`A_j@^1^pMMkoSX^U8i$oi|WH0QZr23r`5ivZiC zuq7K8dE6vXRWK?-#6!S3k2)``HOy*>x@pn5Cc-u3yFmh{SjjHzHKf%f=PgVZPW0q; zkI_vSJ70MK(oNb^v^pI36dH4uKP_vwfp|9Cg3L*L>(hhq>118%c&$96@X5Qoprjn( z9(k#w0&V{U%O=LrgL^0`r6^#1#94{WIl94F)6v#)5Uy2iy2dW6n(2s5Gbzmxn?ceh zFyU|%ybP1o0@$kVm^H6I&O%^3ZZoK@Bzqg8Ce6Wv^(n*QL(eyxlARlNow|jvHIb5+ z%oQ1uUUL*{0BA~2@|09TYRoa8Wi^qN9*I=+#&hRXdQ})&U)eq|+nk?CbDwyrs9i$$Kc1bn%GelzHvcXx^Ypeai^)WwW%F6!D-D+mSW|XxEiYA zVG}-Kb-l1*u61+iEoW>GH)(rdooaCC%}t;7IJ=`>t>I6+GwbF~wj%=69cJu_cm4$E zxfpgP7simxJ7D5HGCD_wK6=^}{1c(bds(DXf-|~oN2xY*ti4Wh_gJ9m>2E_rU!9U( zgtG5G$taQGa2Wruv)inE>&E zpO%6O#TzVOU0OiF$=&Ff%dCk}!pO5mbMW8)802JTf|a}j0su(=awGnK*42(CW+v|T zbpIWy^8X=2q$F|liQR}s0mB{;7ydbjO{fW82Az zZFFqgw$-t1+vbVQo}Pc^<=(aKU8`QI>T&Of+FyM@RLwY>Efr+8UuarQbU=TFzdB%QSHE8s5(G%#M0}{|pDLI$Lm{torxWv2Q)kEf?J1P^-u(!*)x$k|2;$pYeE{Gc>X&phg$2d22I=p#j}9ct!y6u&MH z&rUu3;Zyy(6}Y;0p=!Qa3<~F`N~yCh2oDLzl8CGy*D$xvBc1(3;RmPp?nmC7ZPAyn zNs`oW-MosbL-^AC0qF+)eNjN>W+gRxQ6WxCX0T?^Gf`vsDK3!FCUD<`dCf5Cm_r z^M-8bf&K85J9gP!`*7<}+3&&#^yYAE{-hI@LxRO4SeZLUtve#F zBQMY>%4(u<(~;!EAvI|B)%ZhD<$wYg1C zPhCFReY?J`2tjwP(CD>=Vy0ikpeZh)h7!}xvv!o^+9R2xBAZ%5@DGk}1gFm?m8Drs zqBLC5Or|7GH#a3KZR^d9sh3L2$d$H&M>wWwrgPhiLIor$V|dUd+AUm5hH*9_1Kf!z8=^c)D+8uDe~~Y~4&vF;!)J zugQKqOiB)=Q@+B`|Jr@z^?DfcT0AZL1&Cevx!!10*N=sfC`4Tu;jPEe=8q3Y_%V=p z4Z2l#9IUp|WpAz*Pzvs3Z7k0|ezVE1FeV~!sVZQo`}#dY1V`jv`qT95irpBY z==aa$Cpp0h#2TGwdeefPc9~bO-30+(y#gqQf((ez2i5?Hyt2 z*ar61=B*}U_e5-~E01$xcBItRDtl9^x^y8~eCT8M`1@JWY8?4XzD8qeU-pq5LDu9O zR1et|JWoaJ?E5RfR7cd__m+1~OYCyNFK@uw<{6MfwJ5Lml$Ur~ejtNit9&qlUzP02 zjc9zrNhv=hxKM-3jAt|Rah^? z1l`?idB+YBV|)umM(gJcy5WKH3eTpdvB@3EElMh-abMq`nSIx!`GiHKLIE2LcMiiN4a^Z1@zFoWCn=h!shvriU%l@ z)cKIsr?Jos6#YQ!s#T~FuV0~c9|$?>FX_$eJwQ|JuN31*elUP{*>c?X;9cs-IyWT? zaWqc8K}$R;N*BuvYZUMNnWupu^P)&9CPS%ZxD&pt7)OJSrbw|?r%s{FARexQ0$$C! zyP^e>qFi_1rFB5xzZ*&c%KW^fNz_8Uq&@vnEI;hGx;nva#2p@k>0GePr_3;gt_usR z0n*3z>Ni@#o@o~2i;wp=RxzQQTY?~-^)oCWD0Zg)00hk@8gBB5hTGvZC+3JS;vB*{R-ndABoB;)S+ z_qeyAw@F8t>{cSHC1WRNqg7QfRnz3g@dtqo9G+%H+?{6>+-0ywj9Uf{$1%_A)xNWP zVMENktOBdy-ZhDX5%(|HB#CJn0SaY8Zc z?9c01Jw$1O*~46vB;-fwC#NQ+h^5C8{22(f6n;7w7(@Y7(%1w1d0jtd4cih~@+o*a zT$$AP#g*C2K$H1}BiM4okk%9PaDjL5qH}%5cOrB7#&>0MXmnf-H*vQb4C`QbBZnBj za3x@kH-m&CS8N=G<6Rty^cmiAXufeM zpVAdp!CG|#YpI(?u>_A4$wF{_ok#l%eWpG&o^hm<{< zY4T)MO<6S^GT&{RDOO|Tc$`F3>NI0*8T>J(DonN!g5`vz^n~;TS`?8WaDH;r8&l4A zdN$nzQy@%1r#`Qt39+#dwXB?`telQ9mmp+Q4O65~yw8YQ4Wp{YL93<;ewtQ1!dvBW z_0|}E1XB)hu{c#(r$bU(U}@U|g(V|BF&@z#uUpPkLswmOriPV8prf*8^D#?U`ikDf z>IxZ&Xcbp{RJ=NU(^RM$a9l;zT2^vBcZcv$33S!0yG~*bE6hmf%|lRN8RpFAZTOhwbd~jQ*%pCt?tBt=BMB6_tb_cs8GFd<*JmM#1%xaPl?T@f;JlZv#2e(P z4thi8w6U$Dg6XK`>j8pA6o_l3hTX+TTdYTpE6CQq?VQdY{7CnN1jKN(&>F#$Qq+}M zGBu>y2PKr{3~_j=EnyeR<=pr5^`o8f1BjINSR;#YmVon`E(_`W49@H(L{-CmjAkp- zhO=)h4}E`}jv=Mg#qb}S`}L-D6~ayLW5%u(X;Gq`t0PnhSbsDZ<+*YNzW$XAm=rXU zM*w{X9aRKVpfo1^lBGm`C~u=75{&pma|tERIdl(?vyjJC84v>*V=+edYD}r6>r5R@ zJZ^AT-zHFXf-IlzD3*hZZ<-P)Pb+jE-@$7t&Y5x3mcif1pdr*^2EZqrB)R08g{l%> zW{d5M=Wnlshs_4*)ODILa1}{ch9*r@PB1Juw*Mj(R+FzP6G;&)UNX@_2vkLwl}J*H zCFXO`vyiRJYY00=O;4$;x1x`H1c?Vi%$pry@m2n{Bi%{}PI@{H1Dykf;Sy$Y3hx|bli$#vRpGwAVornzIt1xd zlB*;P@~;X>mj~-pl&S>A<|$c`YOs@9hIP> zA2B2W3&FX3{_Zx(zgU_s!~*HU!ARvKPCR_*DFiZ724~hf(h3z?bly>}EMs$E1gbnp zaUU2Kyx7h;qRN1%Hbq;>C40j1u9IRX zr6eK-I$1heRw}R?qjGBq;i__$7BpwEj9cN%g34qz9vmrYPOwyCMJJ+ERg)MIkt@si zI?5_cOcg+%Ic#Z^_sBc;lr7rxb0^lG_NK7~i$;j^2|aXuzUoeoy2swnNZ zOW9&2{cK*Bih^UJsmA;6e6ycnQ19x_^rF99TQ`&9URJHf*dh2Dp+|4-qOy`QyQ_LQLLC)>o;rAl z7Qd^QHb}w^POEurbGSS&fNU2`ofEWo`3lAH#^yc&;Xjx@C1(EIX zh;i6@LZ1L$^zxCc%FvKX3CDSPSpFP7hRJxDZB|)vj63KHx!nxejLAF61#iN^^p0n^ zC!zHpZ2kbj{FBK6u$XLZP-mgbQrlj;aoMvyFNWNyi&1p&`g}7eGfgqWGjtP4uUBn!EsCK%u$eo~VMALy5p(RDPMP&@LdBQ+0`wS(^%wufl zP?H~=+uv}ca*R_xl?0x<-&R%u@e=JPaDPrLGd1_*kjGUWevxTQONdGWQP+mVli79U zhl>8Z<7R9gt3d@)M*dM0@+!&M&BC2}0;n55Zek1a&kL~vHFdOu+cy=#kE!RY5aqip)`Pw=HTTnt_)o)HKv^D=j9l9{g(_uZ|5@Ab zlOCzYJ+30KmkqmjcUG-yD5x+qQdDizlLm}jO*$~x0B0khmYm8D@Vhwuzi2IE7xrf> z=+<9Ovs^nLU*nt~+?^g%-0Evse36j@hl4inc(H)7u?mGx8dP%?EDTP1S|S9HoD@$y zm)5}*4o?Cf7HyK74`Frz7jGp~aRXZbeILlflz)fY(c#5N+4W7)DuI!zMse6bW4>!@ z1%95By38<+&22Dk#I7s1Q4VYdCuzU_)qiJ?dV)Cl2#g_?`0lEsT31%3V5i2&TXR`+ zQ2nL>QN8A>%V43C$kgzLmD)z&05JD*N!uO|k7QU&rZYq3`D*U8=GC4$?cLj{$`M|_ z&5&j0k5u&-q7j;)zZ(SBj^Y@18dc#&+xCXruJr-bh;Q22Ed!9FNf znt!PI5ckhX8SR5eUr5@Dg|iqVlS++qBbguc*a1g*@&FstXBt*bJ>lwVrev9piG zKE%M>Av~+%a)`uKo5mQ?1%hjiHS%0VoV*gb%}d=Hv1XWJdW_&Tx~hl5 zwJ02>ABU{@Juh#t7eYreYn$sWV8zy7{m<}jO|Q0$f;VgEN^C#QO;KE!Q_2vA_raV*V7E`fS>aZtgWi*1R+U=>5T9hNM?7mUV!2 z(h%CYFMznJyjr9ojhQ81#8|is4$fQ@Ayl+^l++wx*)dAbgq^yZg}DsrXwn4|t~f)h zX#AyfZYs0N%Y!P)Q@LI|Bnr^7NfTo|6x5NA1sUzu)Rh0jedI`I-KRnatlsA=X5D;2{{Ug?Ix zizy(#(K2$}suP4U?h!pc%t@*GZZowo8W@?+5#_>INlL+dJ+0+Fgtaft{2u=qgduAv zF0PHwYT74mlZ~vhPgmQjrE_ouSe~EgHquW_(1~Ld66dyi*=fXh zHX#e!U{hq(QHP#0nAl|vLr3_0pQ5*oee2GZZ!L)l80yjkM1s9XeqNgHBz9|UJ~;+v z>M_*`F_q6}4*k({K=2m=oE&Alo7c8tm5ZCPYETy>hdo8`IS|+!?efSU09BWjdx!=S zB-=aneCfW+hW{&=;^r0BUuY+%ANb9 z^@*$AtMmZ0SkG4#p(%P-IMCXecZgH-p6#UcNtO~{Xp-4!P{XI84N^shcE`6=dbFuz zLzz`ry6CYabr4!C?QN?%h%&$l6f` z-@Fm^N=mYi2zz_i)}Q`yKA0xEj-9m~_VXUs8FwVXrkvJZj+CD$wnbEk?6p|#eh(in zil=6N#O3D^t$DM#!al`dN04q5Yd{^ybPbS_ld8HL2Au5m_< zm!Buq8&y#N1?L;rWqCV)6kvS-<+9qNDfhsZW(|Lop7NbA%@dp;4KA7^^qEO2vf@5~ zlMi2COR#~&8B$YAuSlKJIpUJ=cs|^?CS@5C^hI})fGFaDWgbeR7bT%Oxnkvm=r!+K zUr0O6WGggH=h>dr)Da?*)0L-{yGKbB9Ifd5&qRpO09)-4{jWrZlgR>~Y~=kmN>%=NPo>s&H5?TwqTi-h0CS<&jlb3 z;wAjp+8a&sRY)F$o~YW?Fs1#=WEXyX;QHvwq;o|3bJj551r+~gQDb^3TGW0+#N9y6 z9LKhLd5(U>oA&&mIf0I%A~pkEX=Ta*HR8Yc88;0*eRFxlwQ&R{#FRGVKwW?UKgZ|C z_2wk6cjEnT?>S0F6Z^L!B31I3Git(xVKLj7VMrX6WrmoWNEf>^WiY~#H&`BypiWPV z6`lfxW{*{8o4L(AuX}8MUp>XgIs-*n#;uUZ0wO7Mug1{s5EsJxC$y;nv=)Z=g|r*! zDE>T2!X4YQ+sSG(RGdQ7B}oU9lG)%`GlI&T#>xn~Y%f<8%byhVa%@|4`Lx(lv1EsJ z=qG}vpwL#0#64T$%c{MDKZ88b5MpbHf0ybvOf z=eyf%L%Cj}4F5p@_KrkFl=vc@zbxn~kWEHE#$m>54})R<^LAJ`F2dg7fTZ*&<0MzWj4wA??|;4Kk; zg0L+ye&yaqkXb?Yj*x_b_R^495%!s|FBCx=61|tGw!~m=KVA-DTgm&g$#$n-nS|42L zsVOt#eBnc~R-3>k8(xF;frtKrNo&JcJtXSAXNR~A2#1dA=v#$0E1B6urepWv*GNA@ zGO&Z0kqZ;~W!F3z6+8VaX@itX(MZj@U~&_=JBf35$c@l+uyll)Lb?!4YqK_7Gsuu@ z(7+u+qYhrHFFFpsGGDOD|Jx>H*RI+rj0>=8c>s15*2A7ZD){#RWGjYQudX$#ZnWEI zakRD(yzxoH{p_ToH7!1V45z%wNuw!AT{ogDSO+QvTTfQCy(Y3z%omiX0n7^o9&)aK zn$0YmpLLTZ#h+r^a{z-cv-_S!zCq1sb%cf zWWE4eZXK^qS9xOd*?Fg2vo?`&YW>7k!NMl;9ppSadhsS$b>>PPy9iSbi!gwZw8U5p zf2E$D<@kf|NZJ*PZFqGFgx^vuQYDPexT-|O*+hVz+44ub15m;JEfOiqz591EL zOiBiz{xqZp8)i~gx3HxDk|kG5T|NTZ1w zy|=-WvhAZMpgvqjKQl)`ekq+xNx(j_t ztYx*4+D=dkijB#Nj8^3mw`i0abBfK%0P1U}Pz29Q_{QyUMY^85f|cbIOVEfqtf zU;3aX0}Ic;2vmLvYJ>yk9?`3)=4?%DzCA(oGLP=t{rtE_Mfsig`GK+YX!mxDfhZEF zA7;B{VwOkQF-*JG5mW;W9tP?_XNI9 zFeavzi<~TzcAM~l=u2`uE)6q15ON#PKIlto)T7v4EyDUpZ*y@E3#|1>Z`2iI+J=6d zRs@K>&={%^h&quG9e9_>1&DEtfad1DGfd(p=!C3A;n?0?o45n;4TGNr(n%ufYu`j0 z8OSc3d;atrbt}UYRT*v=w8~+3UCk3grXC!OltKt`49(atWPJCS+WomHP?bfOjKpGe z#5GzSYMY;==U@*kPfQ^k9&5-3x%v_e#b?qGs5%Q48J0Hx_}hp^@0S6krr!88%@ylMd?f9sV$g=1gFS)u>L^XST+Q@-qzsK+|>*P9v6Tf>_<*97Z8 z5FEF$Ci6lR?3-md4NltZyAr!!1PqggAVt^&0$sU>t(B(Y0{vN)EK7_{YTIILM1-Im z-&lww_E~_@*IxBi{)9W?&yWg3wIVY<>>b2baseG{*uNU>aRqvt+g+=OJ>Xtqo?YbE zzs*T?3laQ~YGN=_R*nn-01L$ftI^Zeo zjX?P-+ci(%5xof52-RzfHA%iVi`7v{k?g33@AvT@q|Pz?sh{gfo2yC$9QwUX1KS;h z=&M+*HC^!UPx!!zn&2y*3vM|V!8JL?faX5Z z6oUAarJo3LnmoCGOj}48TL8f+lDb;1^;=AgoVFv*vUe^cTrX7BPS_%pxHcVCwb&{; z33k)aVbXV4$u9zpT(|$AY$ zLJx{#RDVNI^1Yraj%{^niiR-=qi0mA;#Yr0s5}3j>31(dRtj5-xGwb~QBW$7E?>O$zc$z#+W3(hb*sHt5+InA0>ThR`Q`z$SdqG>PUHH44rW zNL`EoBnz8xLK>(II5uDo)|6SY1u>pnybc(ic#ao3xs_2YdbLL8C`nB?!0t{xp(B<> z)m3z;$ss1t3b_yN+&OO3&uV@0`E_P|Z(e`!Ei*h;7J{gnNUz7H|jXir6g z=|V!ZYW3%`AQ(vnX>;xz7JkFM;PV&_=m^1V)y}7z(Z5QZCRj2PJ9^*3n(VSZ( z_N9m7JFkn1>Cqs%pJfYIeyeE^67k2IzT5Qt0eBWG)lUxV-4#M`rVI3Bk}@sXO=wa= z)D`tFZNn1?ww`=MRIKgBYC&wj{F_x9CNML-eQ0jaOTy1?l@%Qhsd~bpnPl=KObjRO zZ2ef%oX??g{cYYDdNN8`%{Ya}>=pR9M1?En7}vi6dSp5B@d1vo5zmi)c^}&h@}GVB^PhkzYv8X&c0>4(p2F0>-1s0-11D%!ogWBH z`IOxGNb0jO8?)(NB)x?siC%`VvHp7k*u(b3+IDb|#BQ);(j%^}o{ z+V1d`2R5q`zUY-Fm#bTyf*q;3lTSA>Aj<9ZuJMIc0)gJ`<8;us>+$Zrt<{-M{`bu1 z-GJv~fG>RPo~A&I+flVUan59;2f=o%+wP}_AIdJ?hx2we%6`|2y)Qm-AIzOjkOXN` zXnnaiL+&v3%~@yK%&ybRFTE-ATk*~?{Ymrt2^JSD=Dn6XlAi3DBexs&S1O_0oso%G zh|T~zNs#2L$QRG|%H~Ms{cInBMbFcwrm-h14dVjxEe3n0O4}#bWV9bh& z8r9|3rl$fmthb0vy3V^Iq6DI}A*F35z9d^=&Cm{t>8euK5qU7GHSmFcnm<{8XIlf~ zO7D`EV@NCD-+~@|OlD+TyErY8$anDx>^hU{jjV%q#B7Hl!{OzSq&PSa*+yUCdN^)v znscgcV z&*N(_?S+EQ2TN$?&REODNCqv-(<<$**(JbfuV-#(gMAjvFm}O=*m%j1e^h&7NUg>( zh?lDXc%@Uab#&R`HqPlX~OtD#y71uKDN{0Ks$FO!m|+#E3rjN^P&AuTcfW{m|d2 z8Fh}pe?b&N-i$)u51jb>V-McB8I4^q*R&;*KC52HGUCh%L$R*laN}xxX1{2=uUdp- zF*82q39{|8Afi2JJ>ds=@k@K7Iq(H}&hQ>X0k;J7?=VXEd98YSl7D^@X4Cq=l;849 z255%lX5clW8Ii3&5eRvaPa>I4!M-qBAOH0ua~NfHVZ@is-if2!Fpw*Bsl>5+?8nQ5CClj0FL(V`x4bDtKWroOt#vIw1$pq(-+^rLSMqb<*Ii^{#= zQ~PyY9y8HE_FmXON4(R^M+4_Fb@4v|>xNO4|+M8(k`3|LI8E{pAu@C3O~1 zWRSg>=IHtqVw}#0TjT^0dgMBHmNV>}Tf(XcG2lFc=%i{34u;VmxjO7(7$swu>T=39 z?Zj)P;$F%yZXi<773(6^Bs#GtmYEV>rRr@_7DZKJu8|R=^EM01&%UTb)Xe(*kcR(K zt`gy_G>0SGg|bAxHV`{ss29$SAZdwPSiregV5-$b!q4EY`OutDv&gJ9}$)sA$NUh6G?7D(3CARHUN%F%CL{UIEM$Pz^58m^5-ODYWGjK|L}gUH5_LbU(53>v(@h4gnD*P%LfQ3RFVRuK_6vp2I(BWzS;`JkM&p&5hrX6uSrJ4V zhYs&;wOe>3?e=?`M?%tTthUmiSMDlDeZfNig+sRoJl^Y*r2mDBeA%fBAP%UUTj*A^ zZ`Fi-X^FEBW!VGEH;AoUl_!e`ym5>TJJv&+&^~a?>k2!djx^bpExOAoK)Pm@+ZVMD zXHjc9P!{tNl62lZ+Bfk{IUU6b|Mndx6$vK{v0KDsk8NMYxA1h}LX4|N8}X2T=*&A7 zcknr)??XI(Kp#i+Mbe1ouNLA#Px#&`ehjL}A$;s84y#erPgG-Z8ATGlFp)XcU#O+w z>|*+?nuw^%VlioSA>n6Xf)MrQ5e@~g^=8Jl^=VWAX>5{7VQnuxDp}!w=?A?PDaVIY z3zVvGmRgmn(VoMDjVgJxL8vl=qWj*rVXZ$v*fDPObE{VdV4@J{2pDCNxe`DO0gTJsCvoYY@E3+KB2``Hv5+Ux6264Sto4|_Sh&N! zPi+hd-wWNQwuuL{$*|p9j7^;sS#;AUzy3>LsVy4$P?SjjEnVAS(iD;EQ1K^9oya8M zoaU2Gwpk_7#0o1Z+|vJ-(jPW)#>8^VHtRyB6q}{ThU|8!W_5zYv2(pO#Vuz3@@h8O z%XrmNtNq~nsf3sQ6D<53T6}L$7)a|^0;qG+-EhAx7U(UzC|t}uqwu} zZb{}?W6d#)Qw;gf@aWz$o?{TF?y=VW5sj5Up>a0lh_?9zxK%JiQ%wR!m8xTcOJZFT3X%L2-9*7f88l zc9=811CEx6?n2SPTXe4Wi_CwKxB2%$7Ll%bzc{RM_(M{io|oa@>K`B zx3TQwOM$l=^k&U3bV9 z7LW4-!GpAD^k`PNCd{DJsr7c+_5c&XCjKv>8THCm#0^ZsqhjHVmRR&ZP3`ffE_Pq` z_f5a=lUvLn^-`@@9HtlxeM%ghw^H-UNuT`(vE+t;#>wh`e>qT|lni`^27&jry<6-# zRT~i7Ynl{|k4>Rb*EoH=7F+uaNo!yuQoC=XP&+UVS7j&6hDT6qY?KokeI6u&P<^*Z zEKNNNowcfl(kbD*;p29@RbEU+6ys*EA&GWMzOc19xzU`DCl?0pRF^vgXAdGm-d}vD zvYIasnMV`_5F1Pw)C0cAt0<*|zUgw_`&?-nzk#XRII8pVwm}Ob@6oJ3Ll|!VFb<|K zgufx&%AS^uer5x|M=Uqau&i^(^m(4HSGji#?=vC{I9_|{8VYvw;8})BEMm44cgsDd z^2`zjAg3Cu7>c0D@@6q1^XkvL3N>L6U+x?tA^QpnPRBdqux zDL)##u*Lf~lGm9yF=W=YlP>f0_k+mQ&Cs;e#Sj$6*W(o0JG|AnBK|V)R-%>JL|Gok z4y(jUl#nd+>Hm1)5ptyI#(r!K0P+{p=f2!f#2E>~|+L_zSLF zBSPR!{&HkVlW3JMvJI(vhpj?pWN!rg1R*vRL>ze#&x7}*KY zJjS0dyp7Z`$L=M)4KXv$coVS+-!pMJnZmC@|B8CS;MQ<;XSl2`H12rFl)~)RXmRJj zC3$6vbqCihCN##BBwv4V*l1nt9ka!xZ}2>dqZ#O(ewkF;;B&{>tlvGoonluff0PMA zc;$Lm>>luqhgrS86LeMRo=N`jdp`{A{PPh;Jt6N-@Jee({rv#%&dE38pSU|!|8C(( z-8tG1Y;(A!pagUqCHM4uwdLRS?aEHY~JE`HkKrvyIGHzNg2P9uO*a z9&17#IzfG~`3FMHIxsTB$%SnYmx#QiY?Vd5{vpzJN|nKDEWO~AddKz=<%~e?TcDIB zZR1DT2z2&7E->8zETA06F4%R<*I3PtuSHWL-X*A^-{3J6dA0&F(k9TfVU4tX4yz!_ zcGS`hXz}1zBO!kpbIWjm$+I;IKd}Ro-83NT#t#!}0hlb@%E7H-&bH6SE|gcIo#Lgw znXO&c6>{zHj^ZIB)+Kud`kfi7v22e{5&Z3y{e5Wm&5<3ojhD!ifOmB4$Ei7DpyBWh ztSwvrW)!RwJK5w^7z;P~e>MjP4p;xILxavr5!9g*S_UYa-bWt$b9!YOi%RsSrMFJ6 zYIH!`zMzWN;)UT&#GbReR0lD=9k{|~2Ss+|>ur=jKRz1L#X^J$rA?S?rPvJk$f_s9*)7EF^P+NCVd48SZKSiD;(*=mP4Z;9^%( z4NLVqcXdm3OHGID_Xbxp?S7G*ykah*_J2fAok4A&@?QQ7VGwf=&p@ei!wlU;Zj^vt zGg^Ub|52h_FIER?C!47jb2>;_28XeurfzKsXbgqC5*arV*=MH{z}C%S6y&mB?QSJ& zLH+zO;^!(bM`S1^uy#2?!Ph8KH4z@bkS>xhEOFj|WDw6!R1#9AvBn(S|7Fs1PLd4! zFkx}X`i9B3Nhy;MKJD3ci7`GWqvEYKMYJublNt<=E%vI>k$W}XtM=z#B6E25Xe^f=qXC)Ji$CmZD- zccIs*hTZEjl$Ne@xn=@^gub;cvYY04xE5$D(qHHwx{w z9kuchAC+IV>LLF?yI+u2BGu8IU?h1f4k$!Rloy;;Z;SNs}`vo#`-_zN4L_FmMN)A3( zrZwXv*jst9p|xb=njgk)A*vlHL~R%Vv=e{^GiH_xkk1>qr$A)M2_QVMaK^|9R2;qs z%IW)g49l?Wti~qpO;{)1(rs9G4g*-W4fvzD*F=XmK#B)M%_BU$IV{`8@_58`Cs8PC zk;5Y(tOJav_FKI7<(Djk0~uTVzk7fKD}asngwOD^K;Mgh3%Bp#R&?%5`S46(}l;^!L}F2meAUUlXH6y+hzSN28AJe-YPm9lSu93FsSA-CRs!f0!-IT(fE4c}=Q) zkT!Dup8RzvpE>ry+laJdmouo(xpD6{h5X^uNd9*cG}yzv@FH*KN6fYm%*HMjg@?*G zX}eF+*l}w8gsRKBy#Zo`&L|B-GfTk@yoEC(W}TSCE;iFw48ILN{#HLoNHfhI8bLp) z<5113v}qlK?w0;)RLZL-V2d45Iu*Xp>6G9;lg035EQhs|zA#jKjA)U@UTiv@plB8! z#eEXQTwxso?#rf2wpS_=(Vf35UTVw2XthS~M8NZPu4R z(<|3GAyH5Jt zl@4Oa0NGMJ8+@bEX@Qn2nQMSfus|2l_ctq|SN4*+L&0X$MaUkcf+1ZJzu^|v5Y^KO zT38O};h+~zH}_wu^5<#9*2+ZKQ*mN_V4d-oI#x0l*YC zRg%XQa%>Onjk+O8lVPh=>KBdR;qGww*vlf_dH5tNr&7avPzh<@zM|&RzUTzB0PhcEyu zTwwPf`p(%BE*4`I<1Lz)F?CHIHzkiOYOB=P#*OYF>2#PZYt_w){(3hMm$~e1Msep% zi2LS7O%Lf-2#A9IXx>T8ng3>`*nMm<@}oUG4tJ^)~s#sy4r`v}!0581&2P z8@noX$@7*z@dv8-H7%1xBF6gT2fp^$vU6c=k{ezrs`i{Dx|9NfuYe{( zrjgKQ9*K4fb3Z2y|0k^39078XEN3j!nwC4t)JAa+x2QP<>dzCR^=xUI-RzQC+#xl zd4Vq{Yye#{DJQ+6HoEzlC04MXbK9lribTcEprs& z##n~k;%ZUfhp%-}7{Q(Ey|7FD8_A$oe&{d#eRC@$VOmrnGgahsq@SFJcMA>4_;da6 zV=&CAP;s@+o+;|$so-Crsvz^9l~tS`F6Dhs_nBn7P}tXIzF*ysb)UFwf&s0t=I+WF znQ#}xCW}Asncp+#9j&9^O|v(}wB+`6f4GutldT2AL4v;y`dS`_tSz zhOyR)o!ryiWUdGkIAJwTE-{Sj3>Zyj+6!z?&QEGcOoYMZcjsJy4B?$ zXIlq(a1&VB8VwzHRrPnqs-|aZR=53w@>}YiCZU@bz2kHZu1xqRC09j{nVz!SLO+2* z)5eos0)5^AEu6W>K2zo|XUC1+O|N83etP=|lb_z=RsoyOC zy+hNXA3evCt-Y@rEcZ_FM!ux$>H7Nx$J)-8f9c=ScEW{^pN+y^197dsDBvgchg9yl zSqDCJCt3gYLQUruEPu!_D3LI!{aU1DvQ-z^Ed5n4zGl>N7lx9g?p;wZ^gCJpBM*Hr zw<7pO`_5%+;~Nk~y%VFsl^2LCbXfUPav_{G6&* zaqCEWNp!o&b4+{5!m;q2{90|zG4hCY>PFa>!PEk49-?E)m0}GFQ$=bMy zj*F@cz3|r*Cw7I$u#u`|R^@oqy=t37eg$idsyP97h4^r_Wq7?_ww1M-Of<~m>+rxi zxN&Oxs=J7;QD+_#=e9yB-gWszwEPm*@bAUs;pcO@19g|^+f*$JI+wsR;T~G8E!(%n zo+*oSWT%q$jjU>}bYYiRUimHaX?5*M$45Vply%GHvdiPOb77}&&rt#SOODiX$;l(j z7LVX{W4&qsw|ZsQvFthAz1m|@o1UP}c4-cKOU20)^kYDqau-mjn@?wbx}8M6xgW3jZ-PFeH0 z_LAaf8QYS4MaP?Fc7?AZ#A2;w+?#B)N>An7c^;k8?@Dx+pHnSAR5gDsY3VTj32N_U zTjWeBw{1$QXk>8dFs2H>qU&x;DtRcB$vn(q$zCLRCqrm2e{Er>k*W)huoC zEu0&wY6@0sRi?UhFKx6F?yP8OF5_RQT$s^stQ$Q3xoUXRd^R`}Tqd!qZ&l)2k@m4@FTA7OA=W$KL#A$o2iz-kb-xzVY4H@I9MX1pRNjrG;KF?;QFwd#b;f`_-5zT^4qs2sT`Krc2%AxSF8<&u-wk!wFC@e7NnTMOl*T%~A;E`4WO#4sHJ(s+ z@$Vh5o#2NmdN0_QlPH&$0eSY-xocSrX^$uqQPD&k?{7VpPx8k-zh3o!x1Ej+lS&%F zFNff*leSx6pX54XSTqLu&hi8Y{40GD2xGhI|Y>ww$24|yZ5AH|XiI|PNc1rHdS z8kc_X<8Lh+9;ixywjEVBn}+8O?z#Pn!DTSc64Fg=6a15gY(FpHoMYk@$DTyE5BcKV z>2uD%Qf}b=gtrv}(YZ&B9--QSSD3#GVN1({z=;G%=XdUXSDr5_vD1a|^TOw^HzSTG zH$FA--1+5}w71)@tL!ogHA^a~(=McD*)3qMdgTIw_J5|N%|h^ZKDbkNde0}hNFMa* zv{Ho-LgML~`T4-O!l`gwdul!AfI?eMEB~UY2l)u&17#BtL+h^-hLb||q*iMcNKTtA zfSMD#p#;K!7BqwAPQDf1L`-EUAPRgX9Va&j9q*go(od}3JG^@{E)Ayz2{$_`+8`gN zmWqpjL56skgp~Vt2MO2%gknfd@Qc*NB~QBMPM!6Q8_z~>{XWy?q?jI^NjLz^Hz2bf zml83V&mT3L=7VMy3Fpi&)ud?y(zCn@^(%#I2NGaNb#Y5ZJdB1=RTjpBxZg6+ZRKl_ z#V0T=$oP>FN2h+PcG zw0r6$G8Vrn-e=;hEb)a4zvGrZ$LKjU%tAUu+|9dEER&hJ#nVqt#0FTM;ZbN#DsQgN zJxwKuu^(UB=kqzW1@_z-K{)>|X=s@Pr5l6NbL5vA#IA_bvY|bBSJsJTXVER2c0`Mg zK*uxYphk_5o$=B=QoCC%9}P9X29=Uu0BP;`Co-|l9MPykuIAG^6!3vVD()lB}z z8;C_!jehtePnPW`5SqGgKgyB-wwP}p%@V;%5O`T1>P;HWt~m48yY;V{HC8Vp&mB)L zsIS^Wj1`8-WdRo-R*Y_n$lt_v0G+*9qT3nEps;wpCsPsi+4 zZ*?74owAFmOJ?>k>#Ft&99Q;bGtFg& zA>1LZHTTZY?3!Z{JmP^@y}dN$oj_>&EsWmjK=xJ;#>bJIJ$)p%SAG|sSx7HbKAeFR z0N3EXK-y6#pI&>;oJMb@9W36YW9?vRt&%Q>blxA#w=cNijq7W@$EA*tqL{B~ zE|FhR$U`UVJRvbv%S79vR6Ha>}YgAl~Y?U+KGUb$WRh zn99*e>p|C`L)`-^8zQ zlM>IrvZ)GdyYn1(x9Ol~1kRu6Cp1*46}GK2f^OcK^X` zUhdU-FS!X$Uz!#5br#>f`txoR`|lPo z9-D^Zr##w4e&XeN+~p%eEgOGH*Pr(F79qM0-aQ%7T>5lxW_uX%jPcSoVxCZ9#3jbm zqM@n31$fNHmNXFLefF#Mz`Uzcid9Ua>z97AY!H||Vn@VAa(sH zhr+5!C6%j<^B$D!J+N3Zgvp?L-%RbeGAN*XJ^ik1UcS-S(`jF@-Ln19EiX2~*WY_w zE@WP89Bshe+rWGmP*(nUiA)MD1G3Qou#=^>PvoLi*`I73(9+eJ{?jK%`hFi=k{1xE zdfgyIPd>QNRH7I{s{RY*)(hi)y{cJkhLAhLs^O?Fsc=h;5PZqTs!j@=@D(_|`BQZd zQBrRTdx(#E42Z9qUHB3$1OhOH>#Zv$pe*YX%FoxC?b^mV9G~qA{&fOFN5l3nD`O&Z zgh`bX1k#Gjn-NU@N4GNENtzo|uml0)zdAniC~9gF+Nby4PgrK`TR|yL>v0A>fx~-1 zQ7wEy=1*kw+h5qzbv=HTmo@s?pVlk%S%I6n0ogLRPbIaJthe~Ng&Z42$I#V=$L+e~ z8$~_o6wXoI-lqIeT9w68Y^O(e?$u{eOT(ac#r2^wCNxI-JJr25TI3;PORid%cmk_@ zyMi~zVfqNASoyy8vG8oveizu02Fg=V3XJ!(Vy*kk=Da3LFbz>_?r)DGnB!bd<`+zk4+>62@RSr)ox zLE8qjHv!PkOYOD!-9s!3sC-Nx+GB7#)R}f`uh6C0J$Qb2=5}>qH9`fIeaA@UofqH# zN6wTK;WBXT4}Col6$ps={|a3C-#I)&KWS$FgT*tXYU!l3i1Ia^&6PfO08YyW76lm= zXD~YOS9n2BK?rfJkG?MmAD$&$D#Yl-h;$m1Xr*FtuW+a(k32#lns5;~xJa+c7P-py zyznW1$wK=ww%KyA$wF1N$I-O44Klo6L%Wj7GM8h!`~9NfnfLv|+u?-oJr|4~E!UIX z%6{Jk?P_#bW#hDuqICikqIpz56T)>L7ruF4hoj>sQPrVOmM1Od{qV*Q3)F`DC&$m` z!f9Wh%|-larf7jkVY$$zXk+Da7?%y#ao?Wpsl8Tq97ZCYfa3n%>Oik&W5+LxhagmU zbXT0?Ljg|Kot^t~mXz`5P%Fj_C0Ks`~cb~*{*)!tfUBhs-va(}bP);z&9#Yu$>Nn-H}o5V2%y6ka| zHfL*)6t{qGbsZy$=H4}Aj3J`{*d#EQLm*4PB0NVSm%hd8OXn;@i?LLkwhHE* zXfwGgT#fvnv_Nu4$S>C9s1~uKTGXiLuEme|C*0^!i%i(5Y|B9Z!2k}idaxw^p57?i zdhuQic;WYxO+evFW*gQ17|%&F-_q3RQM7(6zYG6XpBiHv!pcq0@5wYByy!lOsP1IE zfm=y3_lK=5UR(?JvDOZwloB*?bJ~SAyYQZE%cWfY*>z*ms?@eNQsh%i6Hg+`0+3e{ zv64h&R4OCJ*m!e7euK$mxzs3M!aqo9#MVv7rARD2gIp#hXSYVC8(^1z?vG|Wrw=eG zwX|hx_IdJI!ts@{h@3KvAAT1v$yX9EDHM+&lF?X;NYYO`aQ{=6toegC5Jo|=#enFq z+}B1+vtu4jYUsaH5ZC$fT3GWq=1>(vdt<1QAw3bx%ckX~K0wtfKESC3*i~&^307t4 z3|ZE86B@{LlN?xg6U#d=3(VhD@X{TqIlQ6WDkL&F--WGjmo%|)L72A2p&nUcMOX4P zoxS1ZoxK6oD%oXwi4)V(q6~H6m`o8$$L2h+Lu4{^Y97V^R2dM}s?z6SHCqYaHhJyAsDl|psL6@-h z1dHmvRm0k&jDre0%84wkT-_hn7Z3wp4nPG^sP{!CeA#&^RdIRQs?L?nmKB^(-+CDT zaY_MHr|u#kkGHWOU2CF8hXj6w0e~wng2@L;QMQ#TG!wH`D3S!2XJ!q?4X$}mQQpi# z(+tB;^o>`;%ZzU?>azIi`3=E!M;%{bIAeU3*-=354-%0}cipmLn5ex-?VDif@OdXf zEW<3VU)Bdr*X?j_1+l8hY-)E!_e5AfaQ3d(YE#|nU~`2wj0PmbyjeG-I-QVtmqRqe zG_Bn*>@#8M$arT$R1s<#ca;Y#tzW$Mpsij6_gt{9@SoQ0$n5pNo^DdL1F~4M#u5?k zqIEfc*R3O;rocOV1@tLnY~a4$$v_hXHQnJsd%^EU1w=%Fgyt6k4%JC3`xX)WKKZLoM79m`~M0f(Q30P92qFa!>8MWek`gYy5vtMkZJ55`Rxyl^APL6vkqD zuZ7SkZ>iJooYFX^PTM!X>EjG&0C}ZdX2(qr`>F?%M+G^>W2<|AM$UGfXIm~m!gNqcfniW~h8O%|_Ifp#{ITuwCTcEy=s6T&~2o*g~U_a>6ZP89I zG+2NS5<<_+vFyE~(%K>B7zxB)k>+@y@9TQd)=l*5o*-F(-xLS)&5|Mdn(PX-%Y0M^ zKc6Rt!E3mc+93SAR_2It>+PODj16j1ck0ZLb+7eXY6pFyYE^lLd4kUxNIlHSQ`0)$ z&U>-wE~Z+E#pJ)Az#sjg-GrM;JD4vHFxZ=Qkz#_$l}NKaczv*vVK%Ino!K3fzXgek zsDF>w?30?@hAJ&AF{7%NoB(GqR*g?rYnY@2z1NXxNvw1Ml5xFcc88DP454>^A+<7s z1jciwWUaH%ro*%gR13ipL9;=$-=MBOc)vp3pmf<`y+vn@{K@$43|=21YZdwc)kJ}~ zQo6HCWkgy}qTHCu>JcmNb14RXrmSj}h13g09QYgu=g!j#hDfGaDc*<_OD?@>y@Pq8 zoH3N+2m?Km1{`)NC2QJoRQm;DYTODf*(z`K4lD*WP`xI@YaKdk4b?z3oxJ=pg_F25 z&g|~kbK25U4{b(~DDALVD8Om${yVenZ#k*=%Jg%qx;4a!wLGUW?0|$NK0}@Qh6>~4QW)+Oh2+LkG8pp;BJE4XE{mMGcGXTNL)KKv z-dBw=nd=pcplRLp{5XS<<^TExCedjvcn|EoLar}N)e&1|2VnM^39?R@KrygT{)$Iq+!>#A!Z;g| z6PNGVPh$52kbNU77lD-=?`SyEC&sKeD0UBsIXL_i5joNmVlKQ)MYAp!n!9#^5y-{_Z#XN}l_`B6@Wdy~~Z-OT7rz zt@HoDN}Vr{7TnQ@AFA9jXz#E`lYFF&wq*Nr$0mtF1X?lx{&ge|B-s*v1~AIk}_gfdJzs_oQ{X7#1_ttJ!=ss6zI zOv2MKOV5QJt!lQB=rwd^S)MvgoA=2LRbiE8V66Cj4u7yKS zz!*F`T1_m=&d01gD4HFE%33dW`SRWcqA{ca-H5k@FVKILAS?>bXx9(**7-+

E_ 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

6Z3{z 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%0D4w-iZ4XS=zBA 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 diff --git a/doc/jsdoc-toolkit/java/src/JsDebugRun.java b/doc/jsdoc-toolkit/java/src/JsDebugRun.java deleted file mode 100755 index 319a5c67b..000000000 --- a/doc/jsdoc-toolkit/java/src/JsDebugRun.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A trivial bootstrap class that simply adds the path to the - * .js file as an argument to the Rhino call. This little hack - * allows the code in the .js file to have access to it's own - * path via the Rhino arguments object. This is necessary to - * allow the .js code to find resource files in a location - * relative to itself. - * - * USAGE: java -jar jsdebug.jar path/to/file.js - */ -public class JsDebugRun { - public static void main(String[] args) { - String[] jsargs = {"-j="+args[0]}; - - String[] allArgs = new String[jsargs.length + args.length]; - System.arraycopy(args, 0, allArgs, 0, args.length); - System.arraycopy(jsargs, 0, allArgs, args.length ,jsargs.length); - - org.mozilla.javascript.tools.debugger.Main.main(allArgs); - } -} diff --git a/doc/jsdoc-toolkit/java/src/JsRun.java b/doc/jsdoc-toolkit/java/src/JsRun.java deleted file mode 100644 index 25f519a95..000000000 --- a/doc/jsdoc-toolkit/java/src/JsRun.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A trivial bootstrap class that simply adds the path to the - * .js file as an argument to the Rhino call. This little hack - * allows the code in the .js file to have access to it's own - * path via the Rhino arguments object. This is necessary to - * allow the .js code to find resource files in a location - * relative to itself. - * - * USAGE: java -jar jsrun.jar path/to/file.js - */ -public class JsRun { - public static void main(String[] args) { - String[] jsargs = {"-j="+args[0]}; - - String[] allArgs = new String[jsargs.length + args.length]; - System.arraycopy(args, 0, allArgs, 0, args.length); - System.arraycopy(jsargs, 0, allArgs, args.length ,jsargs.length); - - org.mozilla.javascript.tools.shell.Main.main(allArgs); - } -} diff --git a/doc/jsdoc-toolkit/jsdebug.jar b/doc/jsdoc-toolkit/jsdebug.jar deleted file mode 100644 index a0ac7daa6bfa2633f1e2d27696b8afa8577e986b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1307 zcmWIWW@h1H0D;(^G7B&RN^ml;F!;KLIO=-(x#|Bq#lR2%Rm#B-15_Gh=^Z)&sB{?+ zivTfPsjs7-r<-eVh@P*T@0pE!O$H*Z5BGZBf7s?J9KC|AJ+Gr%P373Zt1%C?1ay4! z4L`nZJ^S^yzhCRRY9aU1#Ru-b(2LaT^9st^7=T_lsq$iQI1#K0f`^nq8gOKMVSdQfSeUUE)iadB?oX}?1b zBDT(rPHVY39z=hf=+J1g%QbR^G{+GaA)!adn0$kSZY|SQ`w^bkknx87N8mBZgD!HL zccec%cXIFZdB4B@eaF1xNNa=XkxG?{9L@&<{R$@wX17jhFezhslhl9QuAjN-!`8f4 zaWflEKbysJ(0cXipcmS^JSUv8yIOUsTS>ZWeUC&qk4`XQtNg9% zGShSOd#ytyQynaSbUJkZX1Fe;JcFZGVA>9CDfb7`TleVyJU=C1`VJ=bpTaJmVjMqx zeiJrB!D?-{JZiMm3U6pj0Y-}fFj~05(Skch1iisA@`8)WaAHf#j*U*us!MZkB{kJQ zW$QRr*C3xdN6_bqVRv=fJKLS#&+Lr9|K6^Fdk$xW;~e*<<82IlA2}xRm`8eWdL(-v zFe|Hg^XY~%NBqlW@1}BCXx>)fxEGb%>*Rmcw`t0kfVZpkS0$}Tb6;8Amsi$xvyDS= zHOt1ILXK5-rI)YwZhLm&TkE^69kntY7Doj8dpeTme6SGR*eBt*;?ceDXJ;-e_m5rs zG_Z43Zg$%21q!->nw&6s01TzTcq0cCEWWsI0r}7M*Gbh5zyv6N7d1 zJ*UnreLn4SVAZwNc@nD*S>&C*nCt&h=X8PS_ef)&rEa;dY&q_4SR7_dHCcBte2&sW ziAnAX`TJWmjMJmmDfonQOlg|WVX~9I;H+R%=LLbpnY))1a_oyc`*YKO4^GpWr;9h) zyQv(1nreSM@2BCS$@_jV26!_vi7?|X5`ZxR1Og0i9YHia*Fy>jm{#mX1V{r2ENRpR zl5nj^1qQ-$hzaOf6s#R=!doDTo?+2-qo*Ws{n6SHjpF>5PkvDf-E2& E061^!ZU6uP diff --git a/doc/jsdoc-toolkit/jsrun.jar b/doc/jsdoc-toolkit/jsrun.jar deleted file mode 100644 index 49c03f4c6f71d4e24f3897794d40585ffc7c20fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1303 zcmWIWW@h1H00GaQG7B&RN^ml;F!;KLIO=-(x#|Bq#lR2%Rm#EO0aUu9Ei0@CsB|F^ zivTfPsjs7-r<-eVh@P*T?-@hxLk0q@4{Rs=FDMBz@LYUFG5YP200H)J%U7PkSyDwS zAMD?LSLXhAx%EdM#2<;gtGRK06Z2|s%~v1POOLEmkI2#N-!*BGXUoiaufD{7pQn1V898}Z(mUA<;|J`%+l4kt zM)1#AGT{+B!u24J{&~7cCX+A_uVR5~2Gb*zDit}L4+Q!ZP8Q5=ozh@Z#_}eq|F~U0bJK^dd9UJT zHk^Joi{+s8>eWFnw0C(QuLqbl1w0yyq|auAP$IC9u&?Ao`DzhyJoW_FWf4 zWux}p*ezJtp)7dZ;^9QW!Y*UE=SpUR$^xt2?Y$+J(a&7G?vwNGE-cT}pWdN3X!N9okav52Uy5(f@gVO2G6TOzJ;{T|UJ)e){|- zY=(l>+HQH&XsH$6(3S#>76V|kaD$@-cZ>*ngJa|c7n9+{mX;kGotjmb=H5zbs(;GX zajdREK6Q?u&lAJ$>a=&ZJHMaV8Grx1T?6+V&Irdj?oG$r82CPNOyV(*^x*VJ_C8=% zR`KT34P}n_m&@Kw<*?Aat-x_FD!13k|Eh1(lrI5qSLv@xT9M|yvbry?tm|eQhu~_K zjX#APtL#cIU+>-a?83L!cUwDZWjZX52=@1MB+vO^A-b_o!g0l;d*9E_TvqNMyY^{d z=c?T7wAl+3bOSd}nAN8v4L4oaBcY#n@ciAmE)eZ{(*#w< zomu*P+U3BiYpe4lRvog)JAE-0*oy~{1`t@%s0}3H zT9FD1gykIIvIsqkg0+K9cnKuYGc3Ap^pu3q-2hBmUd8Zq72wUv29jg}!Y@FYmj%QF E0CH&O8UO$Q diff --git a/doc/jsdoc-toolkit/jsrun.sh b/doc/jsdoc-toolkit/jsrun.sh deleted file mode 100644 index 74ca79c05..000000000 --- a/doc/jsdoc-toolkit/jsrun.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/ksh - -# launcher script for jsdoc -# Author: Avi Deitcher -# -# This program is released under the MIT License as follows: - -# Copyright (c) 2008-2009 Atomic Inc -# -#Permission is hereby granted, free of charge, to any person -#obtaining a copy of this software and associated documentation -#files (the "Software"), to deal in the Software without -#restriction, including without limitation the rights to use, -#copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the -#Software is furnished to do so, subject to the following -#conditions: -## -#The above copyright notice and this permission notice shall be -#included in all copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -#EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -#OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -#NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -#HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -#WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -#FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -#OTHER DEALINGS IN THE SOFTWARE. -# - - -if [[ -n "$JSDOCDIR" ]]; then - _DOCDIR="-Djsdoc.dir=$JSDOCDIR" - _APPDIR="$JSDOCDIR/app" - _BASEDIR="$JSDOCDIR" -else - _DOCDIR="" - _APPDIR="./app" - _BASEDIR="." -fi - -if [[ -n "$JSDOCTEMPLATEDIR" ]]; then - _TDIR="-Djsdoc.template.dir=$JSDOCTEMPLATEDIR" -else - _TDIR="" -fi - -CMD="java $_DOCDIR $_TDIR -jar $_BASEDIR/jsrun.jar $_APPDIR/run.js $@" -echo $CMD -$CMD - diff --git a/doc/jsdoc-toolkit/templates/jsdoc/allclasses.tmpl b/doc/jsdoc-toolkit/templates/jsdoc/allclasses.tmpl deleted file mode 100644 index 32f43582f..000000000 --- a/doc/jsdoc-toolkit/templates/jsdoc/allclasses.tmpl +++ /dev/null @@ -1,17 +0,0 @@ -
{+new Link().toFile("index.html").withText("Class Index")+} -| {+new Link().toFile("files.html").withText("File Index")+}
-
-

Classes

-
    - -
  • {! - if (thisClass.alias == "_global_") { - output += ""+new Link().toClass(thisClass.alias)+""; - } - else { - output += new Link().toClass(thisClass.alias); - } - !}
  • -
    -
-
\ No newline at end of file diff --git a/doc/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl b/doc/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl deleted file mode 100644 index 4c7de1cd5..000000000 --- a/doc/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl +++ /dev/null @@ -1,56 +0,0 @@ - - - - - {! Link.base = ""; /* all generated links will be relative to this */ !} - JsDoc Reference - File Index - - - - - - - {+include("static/header.html")+} - -
- {+publish.classesIndex+} -
- -
-
- ©{+JSDOC.opt.D.copyright+}
- Documentation generated by JsDoc Toolkit {+JSDOC.VERSION+} on {+new Date()+} -
- - \ No newline at end of file diff --git a/doc/jsdoc-toolkit/templates/jsdoc/class.tmpl b/doc/jsdoc-toolkit/templates/jsdoc/class.tmpl deleted file mode 100644 index 181ed1188..000000000 --- a/doc/jsdoc-toolkit/templates/jsdoc/class.tmpl +++ /dev/null @@ -1,649 +0,0 @@ - - - - - - {! Link.base = "../"; /* all generated links will be relative to this */ !} - JsDoc Reference - {+data.alias+} - - - - - - - - {+include("static/header.html")+} - - - -
- - {+publish.classesIndex+} - -
- -
- -

- {! - var classType = ""; - - if (data.isBuiltin()) { - classType += "Built-In "; - } - - if (data.isNamespace) { - if (data.is('FUNCTION')) { - classType += "Function "; - } - classType += "Namespace "; - } - else { - classType += "Class "; - } - !} - {+classType+}{+data.alias+} -

- - -

-
Version - {+ data.version +}.
-
-
Extends - {+ - data.augments - .sort() - .map( - function($) { return new Link().toSymbol($); } - ) - .join(", ") - +}.
-
- - {+resolveLinks(data.classDesc)+} - - {# isn't defined in any file #} -
Defined in: {+new Link().toSrc(data.srcFile)+}. -
-

- - - - - - - - - - - - - - - - - -
{+classType+}Summary
Constructor AttributesConstructor Name and Description
{! - if (data.isPrivate) output += "<private> "; - if (data.isInner) output += "<inner> "; - !}  -
- {+ new Link().toSymbol(data.alias).inner('constructor')+}{+ makeSignature(data.params) +} -
-
{+resolveLinks(summarize(data.desc))+}
-
-
- - - - {! var ownProperties = data.properties.filter(function($){return $.memberOf == data.alias && !$.isNamespace}).sort(makeSortby("name")); !} - - - - - - - - - - - - - - - - - -
Field Summary
Field AttributesField Name and Description
{! - if (member.isPrivate) output += "<private> "; - if (member.isInner) output += "<inner> "; - if (member.isStatic) output += "<static> "; - if (member.isConstant) output += "<constant> "; - !}  -
- {+member.memberOf+}.{+new Link().toSymbol(member.alias).withText(member.name)+} -
-
{+resolveLinks(summarize(member.desc))+}
-
-
- - -
- {! - var borrowedMembers = data.properties.filter(function($) {return $.memberOf != data.alias}); - - var contributers = []; - borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)}); - for (var i = 0, l = contributers.length; i < l; i++) { - output += - "
Fields borrowed from class "+new Link().toSymbol(contributers[i])+":
" - + - "
" + - borrowedMembers - .filter( - function($) { return $.memberOf == contributers[i] } - ) - .sort(makeSortby("name")) - .map( - function($) { return new Link().toSymbol($.alias).withText($.name) } - ) - .join(", ") - + - "
"; - } - !} -
-
-
- - - - {! var ownMethods = data.methods.filter(function($){return $.memberOf == data.alias && !$.isNamespace}).sort(makeSortby("name")); !} - - - - - - - - - - - - - - - - - -
Method Summary
Method AttributesMethod Name and Description
{! - if (member.isPrivate) output += "<private> "; - if (member.isInner) output += "<inner> "; - if (member.isStatic) output += "<static> "; - !}  -
{+member.memberOf+}.{+new Link().toSymbol(member.alias).withText(member.name.replace(/\^\d+$/, ''))+}{+makeSignature(member.params)+} -
-
{+resolveLinks(summarize(member.desc))+}
-
-
- - -
- {! - var borrowedMembers = data.methods.filter(function($) {return $.memberOf != data.alias}); - var contributers = []; - borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)}); - for (var i = 0, l = contributers.length; i < l; i++) { - output += - "
Methods borrowed from class "+new Link().toSymbol(contributers[i])+":
" - + - "
" + - borrowedMembers - .filter( - function($) { return $.memberOf == contributers[i] } - ) - .sort(makeSortby("name")) - .map( - function($) { return new Link().toSymbol($.alias).withText($.name) } - ) - .join(", ") - + - "
"; - } - - !} -
-
-
- - - {! var ownEvents = data.events.filter(function($){return $.memberOf == data.alias && !$.isNamespace}).sort(makeSortby("name")); !} - - - - - - - - - - - - - - - - - -
Event Summary
Event AttributesEvent Name and Description
{! - if (member.isPrivate) output += "<private> "; - if (member.isInner) output += "<inner> "; - if (member.isStatic) output += "<static> "; - !}  -
{+member.memberOf+}.{+new Link().toSymbol(member.alias).withText(member.name)+}{+makeSignature(member.params)+} -
-
{+resolveLinks(summarize(member.desc))+}
-
-
- - -
- {! - var borrowedMembers = data.events.filter(function($) {return $.memberOf != data.alias}); - var contributers = []; - borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)}); - for (var i = 0, l = contributers.length; i < l; i++) { - output += - "
Events borrowed from class "+new Link().toSymbol(contributers[i])+":
" - + - "
" + - borrowedMembers - .filter( - function($) { return $.memberOf == contributers[i] } - ) - .sort(makeSortby("name")) - .map( - function($) { return new Link().toSymbol($.alias).withText($.name) } - ) - .join(", ") - + - "
"; - } - - !} -
-
-
- - - -
-
- {+classType+}Detail -
- -
{! - if (data.isPrivate) output += "<private> "; - if (data.isInner) output += "<inner> "; - !} - {+ data.alias +}{+ makeSignature(data.params) +} -
- -
- {+resolveLinks(data.desc)+} -
Author: {+data.author+}.
-
- - - -
{+example+}
-
-
- - - -
-
Parameters:
- -
- {+((item.type)?""+("{"+(new Link().toSymbol(item.type)+"} ")) : "")+} {+item.name+} - Optional, Default: {+item.defaultValue+} -
-
{+resolveLinks(item.desc)+}
-
-
-
- -
-
Deprecated:
-
- {+resolveLinks(data.deprecated)+} -
-
-
- -
-
Since:
-
{+ data.since +}
-
-
- -
-
Throws:
- -
- {+((item.type)?"{"+(new Link().toSymbol(item.type))+"} " : "")+} {+item.name+} -
-
{+resolveLinks(item.desc)+}
-
-
-
- -
-
Returns:
- -
{+((item.type)?"{"+(new Link().toSymbol(item.type))+"} " : "")+}{+resolveLinks(item.desc)+}
-
-
-
- -
-
Requires:
- -
{+ resolveLinks(item) +}
-
-
-
- -
-
See:
- -
{+ new Link().toSymbol(item) +}
-
-
-
- -
-
- - - -
- Field Detail -
- - -
{! - if (member.isPrivate) output += "<private> "; - if (member.isInner) output += "<inner> "; - if (member.isStatic) output += "<static> "; - if (member.isConstant) output += "<constant> "; - !} - - {{+new Link().toSymbol(member.type)+}} - {+member.memberOf+}.{+member.name+} - -
-
- {+resolveLinks(member.desc)+} - -
- Defined in: {+new Link().toSrc(member.srcFile)+}. -
-
Author: {+member.author+}.
-
- - - -
{+example+}
-
-
- - -
-
Deprecated:
-
- {+ resolveLinks(member.deprecated) +} -
-
-
- -
-
Since:
-
{+ member.since +}
-
-
- -
-
See:
- -
{+ new Link().toSymbol(item) +}
-
-
-
- -
-
Default Value:
-
- {+resolveLinks(member.defaultValue)+} -
-
-
- -
-
-
- - - -
- Method Detail -
- - -
{! - if (member.isPrivate) output += "<private> "; - if (member.isInner) output += "<inner> "; - if (member.isStatic) output += "<static> "; - !} - - {{+new Link().toSymbol(member.type)+}} - {+member.memberOf+}.{+member.name.replace(/\^\d+$/, '')+}{+makeSignature(member.params)+} - -
-
- {+resolveLinks(member.desc)+} - -
- Defined in: {+new Link().toSrc(member.srcFile)+}. -
-
Author: {+member.author+}.
-
- - - -
{+example+}
-
-
- - -
-
Parameters:
- -
- {+((item.type)?"{"+(new Link().toSymbol(item.type))+"} " : "")+}{+item.name+} - Optional, Default: {+item.defaultValue+} -
-
{+resolveLinks(item.desc)+}
-
-
-
- -
-
Deprecated:
-
- {+ resolveLinks(member.deprecated) +} -
-
-
- -
-
Since:
-
{+ member.since +}
-
- -
- -
-
Throws:
- -
- {+((item.type)?"{"+(new Link().toSymbol(item.type))+"} " : "")+} {+item.name+} -
-
{+resolveLinks(item.desc)+}
-
-
-
- -
-
Returns:
- -
{+((item.type)?"{"+(new Link().toSymbol(item.type))+"} " : "")+}{+resolveLinks(item.desc)+}
-
-
-
- -
-
Requires:
- -
{+ resolveLinks(item) +}
-
-
-
- -
-
See:
- -
{+ new Link().toSymbol(item) +}
-
-
-
- -
-
-
- - - -
- Event Detail -
- - -
{! - if (member.isPrivate) output += "<private> "; - if (member.isInner) output += "<inner> "; - if (member.isStatic) output += "<static> "; - !} - - {{+new Link().toSymbol(member.type)+}} - {+member.memberOf+}.{+member.name+}{+makeSignature(member.params)+} - -
-
- {+resolveLinks(member.desc)+} - -
- Defined in: {+new Link().toSrc(member.srcFile)+}. -
-
Author: {+member.author+}.
-
- - - -
{+example+}
-
-
- - -
-
Parameters:
- -
- {+((item.type)?"{"+(new Link().toSymbol(item.type))+"} " : "")+}{+item.name+} - Optional, Default: {+item.defaultValue+} -
-
{+ resolveLinks(item.desc) +}
-
-
-
- -
-
Deprecated:
-
- {+ resolveLinks(member.deprecated) +} -
-
-
- -
-
Since:
-
{+ member.since +}
-
- -
- -
-
Throws:
- -
- {+((item.type)?"{"+(new Link().toSymbol(item.type))+"} " : "")+} {+item.name+} -
-
{+ resolveLinks(item.desc) +}
-
-
-
- -
-
Returns:
- -
{+((item.type)?"{"+(new Link().toSymbol(item.type))+"} " : "")+}{+resolveLinks(item.desc)+}
-
-
-
- -
-
Requires:
- -
{+ resolveLinks(item) +}
-
-
-
- -
-
See:
- -
{+ new Link().toSymbol(item) +}
-
-
-
- -
-
-
- -
-
- - - -
- ©{+JSDOC.opt.D.copyright+}
- Documentation generated by JsDoc Toolkit {+JSDOC.VERSION+} on {+new Date()+} -
- - diff --git a/doc/jsdoc-toolkit/templates/jsdoc/index.tmpl b/doc/jsdoc-toolkit/templates/jsdoc/index.tmpl deleted file mode 100644 index a5dc1158e..000000000 --- a/doc/jsdoc-toolkit/templates/jsdoc/index.tmpl +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - JsDoc Reference - Index - - - - - - - {+include("static/header.html")+} - -
- {+publish.classesIndex+} -
- -
-

Class Index

- - -
-

{+(new Link().toSymbol(thisClass.alias))+}

- {+resolveLinks(summarize(thisClass.classDesc))+} -
-
-
- -
-
- ©{+JSDOC.opt.D.copyright+}
- Documentation generated by JsDoc Toolkit {+JSDOC.VERSION+} on {+new Date()+} -
- - \ No newline at end of file diff --git a/doc/jsdoc-toolkit/templates/jsdoc/publish.js b/doc/jsdoc-toolkit/templates/jsdoc/publish.js deleted file mode 100644 index 446c92b13..000000000 --- a/doc/jsdoc-toolkit/templates/jsdoc/publish.js +++ /dev/null @@ -1,200 +0,0 @@ -/** Called automatically by JsDoc Toolkit. */ -function publish(symbolSet) { - publish.conf = { // trailing slash expected for dirs - ext: ".html", - outDir: JSDOC.opt.d || SYS.pwd+"../out/jsdoc/", - templatesDir: JSDOC.opt.t || SYS.pwd+"../templates/jsdoc/", - symbolsDir: "symbols/", - srcDir: "symbols/src/" - }; - - // is source output is suppressed, just display the links to the source file - if (JSDOC.opt.s && defined(Link) && Link.prototype._makeSrcLink) { - Link.prototype._makeSrcLink = function(srcFilePath) { - return "<"+srcFilePath+">"; - } - } - - // create the folders and subfolders to hold the output - IO.mkPath((publish.conf.outDir+"symbols/src").split("/")); - - // used to allow Link to check the details of things being linked to - Link.symbolSet = symbolSet; - - // create the required templates - try { - var classTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"class.tmpl"); - var classesTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allclasses.tmpl"); - } - catch(e) { - print("Couldn't create the required templates: "+e); - quit(); - } - - // some ustility filters - function hasNoParent($) {return ($.memberOf == "")} - function isaFile($) {return ($.is("FILE"))} - function isaClass($) {return ($.is("CONSTRUCTOR") || $.isNamespace)} - - // get an array version of the symbolset, useful for filtering - var symbols = symbolSet.toArray(); - - // create the hilited source code files - var files = JSDOC.opt.srcFiles; - for (var i = 0, l = files.length; i < l; i++) { - var file = files[i]; - var srcDir = publish.conf.outDir + "symbols/src/"; - makeSrcFile(file, srcDir); - } - - // get a list of all the classes in the symbolset - var classes = symbols.filter(isaClass).sort(makeSortby("alias")); - - // create a filemap in which outfiles must be to be named uniquely, ignoring case - if (JSDOC.opt.u) { - var filemapCounts = {}; - Link.filemap = {}; - for (var i = 0, l = classes.length; i < l; i++) { - var lcAlias = classes[i].alias.toLowerCase(); - - if (!filemapCounts[lcAlias]) filemapCounts[lcAlias] = 1; - else filemapCounts[lcAlias]++; - - Link.filemap[classes[i].alias] = - (filemapCounts[lcAlias] > 1)? - lcAlias+"_"+filemapCounts[lcAlias] : lcAlias; - } - } - - // create a class index, displayed in the left-hand column of every class page - Link.base = "../"; - publish.classesIndex = classesTemplate.process(classes); // kept in memory - - // create each of the class pages - for (var i = 0, l = classes.length; i < l; i++) { - var symbol = classes[i]; - - symbol.events = symbol.getEvents(); // 1 order matters - symbol.methods = symbol.getMethods(); // 2 - - var output = ""; - output = classTemplate.process(symbol); - - IO.saveFile(publish.conf.outDir+"symbols/", ((JSDOC.opt.u)? Link.filemap[symbol.alias] : symbol.alias) + publish.conf.ext, output); - } - - // regenerate the index with different relative links, used in the index pages - Link.base = ""; - publish.classesIndex = classesTemplate.process(classes); - - // create the class index page - try { - var classesindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"index.tmpl"); - } - catch(e) { print(e.message); quit(); } - - var classesIndex = classesindexTemplate.process(classes); - IO.saveFile(publish.conf.outDir, "index"+publish.conf.ext, classesIndex); - classesindexTemplate = classesIndex = classes = null; - - // create the file index page - try { - var fileindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allfiles.tmpl"); - } - catch(e) { print(e.message); quit(); } - - var documentedFiles = symbols.filter(isaFile); // files that have file-level docs - var allFiles = []; // not all files have file-level docs, but we need to list every one - - for (var i = 0; i < files.length; i++) { - allFiles.push(new JSDOC.Symbol(files[i], [], "FILE", new JSDOC.DocComment("/** */"))); - } - - for (var i = 0; i < documentedFiles.length; i++) { - var offset = files.indexOf(documentedFiles[i].alias); - allFiles[offset] = documentedFiles[i]; - } - - allFiles = allFiles.sort(makeSortby("name")); - - // output the file index page - var filesIndex = fileindexTemplate.process(allFiles); - IO.saveFile(publish.conf.outDir, "files"+publish.conf.ext, filesIndex); - fileindexTemplate = filesIndex = files = null; -} - - -/** Just the first sentence (up to a full stop). Should not break on dotted variable names. */ -function summarize(desc) { - if (typeof desc != "undefined") - return desc.match(/([\w\W]+?\.)[^a-z0-9_$]/i)? RegExp.$1 : desc; -} - -/** Make a symbol sorter by some attribute. */ -function makeSortby(attribute) { - return function(a, b) { - if (a[attribute] != undefined && b[attribute] != undefined) { - a = a[attribute].toLowerCase(); - b = b[attribute].toLowerCase(); - if (a < b) return -1; - if (a > b) return 1; - return 0; - } - } -} - -/** Pull in the contents of an external file at the given path. */ -function include(path) { - var path = publish.conf.templatesDir+path; - return IO.readFile(path); -} - -/** Turn a raw source file into a code-hilited page in the docs. */ -function makeSrcFile(path, srcDir, name) { - if (JSDOC.opt.s) return; - - if (!name) { - name = path.replace(/\.\.?[\\\/]/g, "").replace(/[\\\/]/g, "_"); - name = name.replace(/\:/g, "_"); - } - - var src = {path: path, name:name, charset: IO.encoding, hilited: ""}; - - if (defined(JSDOC.PluginManager)) { - JSDOC.PluginManager.run("onPublishSrc", src); - } - - if (src.hilited) { - IO.saveFile(srcDir, name+publish.conf.ext, src.hilited); - } -} - -/** Build output for displaying function parameters. */ -function makeSignature(params) { - if (!params) return "()"; - var signature = "(" - + - params.filter( - function($) { - return $.name.indexOf(".") == -1; // don't show config params in signature - } - ).map( - function($) { - return $.name; - } - ).join(", ") - + - ")"; - return signature; -} - -/** Find symbol {@link ...} strings in text and turn into html links */ -function resolveLinks(str, from) { - str = str.replace(/\{@link ([^} ]+) ?\}/gi, - function(match, symbolName) { - return new Link().toSymbol(symbolName); - } - ); - - return str; -} diff --git a/doc/jsdoc-toolkit/templates/jsdoc/static/default.css b/doc/jsdoc-toolkit/templates/jsdoc/static/default.css deleted file mode 100644 index 97e021ef6..000000000 --- a/doc/jsdoc-toolkit/templates/jsdoc/static/default.css +++ /dev/null @@ -1,162 +0,0 @@ -/* default.css */ -body -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - width: 800px; -} - -.header -{ - clear: both; - background-color: #ccc; - padding: 8px; -} - -h1 -{ - font-size: 150%; - font-weight: bold; - padding: 0; - margin: 1em 0 0 .3em; -} - -hr -{ - border: none 0; - border-top: 1px solid #7F8FB1; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -#index -{ - margin-top: 24px; - float: left; - width: 160px; - position: absolute; - left: 8px; - background-color: #F3F3F3; - padding: 8px; -} - -#content -{ - margin-left: 190px; - width: 600px; -} - -.classList -{ - list-style-type: none; - padding: 0; - margin: 0 0 0 8px; - font-family: arial, sans-serif; - font-size: 1em; - overflow: auto; -} - -.classList li -{ - padding: 0; - margin: 0 0 8px 0; -} - -.summaryTable { width: 100%; } - -h1.classTitle -{ - font-size:170%; - line-height:130%; -} - -h2 { font-size: 110%; } -caption, div.sectionTitle -{ - background-color: #7F8FB1; - color: #fff; - font-size:130%; - text-align: left; - padding: 2px 6px 2px 6px; - border: 1px #7F8FB1 solid; -} - -div.sectionTitle { margin-bottom: 8px; } -.summaryTable thead { display: none; } - -.summaryTable td -{ - vertical-align: top; - padding: 4px; - border-bottom: 1px #7F8FB1 solid; - border-right: 1px #7F8FB1 solid; -} - -/*col#summaryAttributes {}*/ -.summaryTable td.attributes -{ - border-left: 1px #7F8FB1 solid; - width: 140px; - text-align: right; -} - -td.attributes, .fixedFont -{ - line-height: 15px; - color: #002EBE; - font-family: "Courier New",Courier,monospace; - font-size: 13px; -} - -.summaryTable td.nameDescription -{ - text-align: left; - font-size: 13px; - line-height: 15px; -} - -.summaryTable td.nameDescription, .description -{ - line-height: 15px; - padding: 4px; - padding-left: 4px; -} - -.summaryTable { margin-bottom: 8px; } - -ul.inheritsList -{ - list-style: square; - margin-left: 20px; - padding-left: 0; -} - -.detailList { - margin-left: 20px; - line-height: 15px; -} -.detailList dt { margin-left: 20px; } - -.detailList .heading -{ - font-weight: bold; - padding-bottom: 6px; - margin-left: 0; -} - -.light, td.attributes, .light a:link, .light a:visited -{ - color: #777; - font-style: italic; -} - -.fineprint -{ - text-align: right; - font-size: 10px; -} \ No newline at end of file diff --git a/doc/jsdoc-toolkit/templates/jsdoc/static/header.html b/doc/jsdoc-toolkit/templates/jsdoc/static/header.html deleted file mode 100644 index 353b735a4..000000000 --- a/doc/jsdoc-toolkit/templates/jsdoc/static/header.html +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/doc/jsdoc-toolkit/templates/jsdoc/static/index.html b/doc/jsdoc-toolkit/templates/jsdoc/static/index.html deleted file mode 100644 index 661f6f67d..000000000 --- a/doc/jsdoc-toolkit/templates/jsdoc/static/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Generated Javascript Documentation - - - - - - <body> - <p> - This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. - </p> - </body> - - - \ No newline at end of file diff --git a/doc/jsdoc-toolkit/templates/jsdoc/symbol.tmpl b/doc/jsdoc-toolkit/templates/jsdoc/symbol.tmpl deleted file mode 100644 index f8f4bd1f6..000000000 --- a/doc/jsdoc-toolkit/templates/jsdoc/symbol.tmpl +++ /dev/null @@ -1,35 +0,0 @@ - - {+data.name+} - {+data.memberOf+} - {+data.isStatic+} - {+data.isa+} - {+data.desc+} - {+data.classDesc+} - - - - {+method.name+} - {+method.memberOf+} - {+method.isStatic+} - {+method.desc+} - - - {+param.type+} - {+param.name+} - {+param.desc+} - {+param.defaultValue+} - - - - - - - - {+property.name+} - {+property.memberOf+} - {+property.isStatic+} - {+property.desc+} - {+property.type+} - - - diff --git a/doc/jsdoc/AttributePoolFactory.md b/doc/jsdoc/AttributePoolFactory.md new file mode 100644 index 000000000..0fd3cdfa0 --- /dev/null +++ b/doc/jsdoc/AttributePoolFactory.md @@ -0,0 +1,32 @@ +#AttributePoolFactory +`require("./AttributePoolFactory");` + +Copyright 2009 Google Inc., 2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +##Functions + +###createAttributePool () +Copyright 2009 Google Inc., 2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +* **** + +##Variables + diff --git a/doc/jsdoc/AuthorManager.md b/doc/jsdoc/AuthorManager.md new file mode 100644 index 000000000..9b2bdbbe4 --- /dev/null +++ b/doc/jsdoc/AuthorManager.md @@ -0,0 +1,59 @@ +#AuthorManager +`require("./AuthorManager");` + +2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +##Functions + +###getAuthor4Token (token, callback) +2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +* **token** The token +* **callback** + +###getAuthorColorId (author, callback) +Returns the color Id of the author + +* **author** +* **callback** + +###getAuthorName (author, callback) +Returns the name of the author + +* **author** +* **callback** + +###setAuthorColorId (author, colorId, callback) +Sets the color Id of the author + +* **author** +* **colorId** +* **callback** + +###setAuthorName (author, name, callback) +Sets the name of the author + +* **author** +* **name** +* **callback** + +##Variables + diff --git a/doc/jsdoc/Changeset.md b/doc/jsdoc/Changeset.md new file mode 100644 index 000000000..3fb2e8be7 --- /dev/null +++ b/doc/jsdoc/Changeset.md @@ -0,0 +1,328 @@ +#Changeset +`require("./Changeset");` + +Copyright 2009 Google Inc., 2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +##Functions + +###_slicerZipperFunc (attOp, csOp, opOut, pool) + +* **attOp** +* **csOp** +* **opOut** +* **pool** + +###appendATextToAssembler (atext, assem) + +* **atext** +* **assem** + +###applyToAText (cs, atext, pool) + +* **cs** +* **atext** +* **pool** + +###applyToAttribution (cs, astr, pool) + +* **cs** +* **astr** +* **pool** + +###applyToText (cs, str) + +* **cs** +* **str** + +###applyZip (in1, idx1, in2, idx2, func) + +* **in1** +* **idx1** +* **in2** +* **idx2** +* **func** + +###attribsAttributeValue (attribs, key, pool) + +* **attribs** +* **key** +* **pool** + +###attributeTester (attribPair, pool) + +* **attribPair** +* **pool** + +###builder (oldLen) + +* **oldLen** + +###characterRangeFollow (cs, startChar, endChar, insertionsAfter) + +* **cs** +* **startChar** +* **endChar** +* **insertionsAfter** + +###checkRep (cs) + +* **cs** + +###clearOp (op) + +* **op** + +###cloneAText (atext) + +* **atext** + +###cloneOp (op) + +* **op** + +###compose (cs1, cs2, pool) + +* **cs1** +* **cs2** +* **pool** + +###composeAttributes (att1, att2, resultIsMutation, pool) + +* **att1** +* **att2** +* **resultIsMutation** +* **pool** + +###copyAText (atext1, atext2) + +* **atext1** +* **atext2** + +###copyOp (op1, op2) + +* **op1** +* **op2** + +###eachAttribNumber (cs, func) + +* **cs** +* **func** + +###filterAttribNumbers (cs, filter) + +* **cs** +* **filter** + +###follow (cs1, cs2, reverseInsertOrder, pool) + +* **cs1** +* **cs2** +* **reverseInsertOrder** +* **pool** + +###followAttributes (att1, att2, pool) + +* **att1** +* **att2** +* **pool** + +###identity (N) + +* **N** + +###inverse (cs, lines, alines, pool) + +* **cs** +* **lines** +* **alines** +* **pool** + +###isIdentity (cs) + +* **cs** + +###joinAttributionLines (theAlines) + +* **theAlines** + +###makeAText (text, attribs) + +* **text** +* **attribs** + +###makeAttribsString (opcode, attribs, pool) + +* **opcode** +* **attribs** +* **pool** + +###makeAttribution (text) + +* **text** + +###makeSplice (oldFullText, spliceStart, numRemoved, newText, optNewTextAPairs, pool) + +* **oldFullText** +* **spliceStart** +* **numRemoved** +* **newText** +* **optNewTextAPairs** +* **pool** + +###mapAttribNumbers (cs, func) + +* **cs** +* **func** + +###mergingOpAssembler () + +* **** + +###moveOpsToNewPool (cs, oldPool, newPool) + +* **cs** +* **oldPool** +* **newPool** + +###mutateAttributionLines (cs, lines, pool) +Copyright 2009 Google Inc., 2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +* **cs** +* **lines** +* **pool** + +###mutateTextLines (cs, lines) + +* **cs** +* **lines** + +###newLen (cs) + +* **cs** + +###newOp (optOpcode) + +* **optOpcode** + +###numToString (num) + +* **num** + +###oldLen (cs) + +* **cs** + +###oneInsertedLineAtATimeOpIterator (opsStr, optStartIndex, charBank) + +* **opsStr** +* **optStartIndex** +* **charBank** + +###opAssembler () + +* **** + +###opAttributeValue (op, key, pool) + +* **op** +* **key** +* **pool** + +###opIterator (opsStr, optStartIndex) + +* **opsStr** +* **optStartIndex** + +###opString (op) + +* **op** + +###pack (oldLen, newLen, opsStr, bank) + +* **oldLen** +* **newLen** +* **opsStr** +* **bank** + +###parseNum (str) + +* **str** + +###prepareForWire (cs, pool) + +* **cs** +* **pool** + +###smartOpAssembler () + +* **** + +###splitAttributionLines (attrOps, text) + +* **attrOps** +* **text** + +###splitTextLines (text) + +* **text** + +###stringAssembler () + +* **** + +###stringIterator (str) + +* **str** + +###stringOp (str) + +* **str** + +###subattribution (astr, start, optEnd) + +* **astr** +* **start** +* **optEnd** + +###textLinesMutator (lines) + +* **lines** + +###toBaseTen (cs) + +* **cs** + +###toSplices (cs) + +* **cs** + +###unpack (cs) + +* **cs** + +##Variables + +###assert + + +###error + + diff --git a/doc/jsdoc/MessageHandler.md b/doc/jsdoc/MessageHandler.md new file mode 100644 index 000000000..0b93994b4 --- /dev/null +++ b/doc/jsdoc/MessageHandler.md @@ -0,0 +1,48 @@ +#MessageHandler +`require("./MessageHandler");` + +Copyright 2009 Google Inc., 2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +##Functions + +###handleConnect (client) +Handles the connection of a new user + +* **client** the new client + +###handleDisconnect (client) +Handles the disconnection of a user + +* **client** the client that leaves + +###handleMessage (client, message) +Handles a message from a user + +* **client** the client that send this message +* **message** the message from the client + +###setSocketIO (socket_io) +Copyright 2009 Google Inc., 2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +* **socket_io** The Socket + +##Variables + diff --git a/doc/jsdoc/Models/Pad.md b/doc/jsdoc/Models/Pad.md new file mode 100644 index 000000000..e9d53d1e4 --- /dev/null +++ b/doc/jsdoc/Models/Pad.md @@ -0,0 +1,15 @@ +#Mod +`require("./Models/Pad");` + +Copied from the Etherpad source code, don't know what its good for +@param txt + +##Functions + +###cleanText (txt) +Copied from the Etherpad source code, don't know what its good for + +* **txt** + +##Variables + diff --git a/doc/jsdoc/PadManager.md b/doc/jsdoc/PadManager.md new file mode 100644 index 000000000..1e21b03d2 --- /dev/null +++ b/doc/jsdoc/PadManager.md @@ -0,0 +1,33 @@ +#PadManager +`require("./PadManager");` + +2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +##Functions + +###getPad (id, callback) +2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +* **id** A String with the id of the pad +* **callback** + +##Variables + diff --git a/doc/jsdoc/README b/doc/jsdoc/README deleted file mode 100644 index 9b7cc7534..000000000 --- a/doc/jsdoc/README +++ /dev/null @@ -1 +0,0 @@ -You can create the JSDocs with generateJsDoc.sh in the bin folder diff --git a/doc/jsdoc/db.md b/doc/jsdoc/db.md new file mode 100644 index 000000000..45f55c5c9 --- /dev/null +++ b/doc/jsdoc/db.md @@ -0,0 +1,25 @@ +#db +`require("./db");` + +2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +##Functions + +###init (callback) + +* **callback** + +##Variables + +###db + + diff --git a/doc/jsdoc/easysync_tests.md b/doc/jsdoc/easysync_tests.md new file mode 100644 index 000000000..089548bb5 --- /dev/null +++ b/doc/jsdoc/easysync_tests.md @@ -0,0 +1,18 @@ +#easysync_tests +`require("./easysync_tests");` + +Copyright 2009 Google Inc., 2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +##Functions + +##Variables + diff --git a/doc/jsdoc/files.html b/doc/jsdoc/files.html deleted file mode 100644 index ca3c061ef..000000000 --- a/doc/jsdoc/files.html +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - JsDoc Reference - File Index - - - - - - - - -
- -
-

Classes

- -
-
- -
-

File Index

- - - -
- -
-

../../node/AuthorManager.js

- -
- - - - -
-
-
- -
-

../../node/Changeset.js

- -
- - - - -
-
-
- -
-

../../node/easysync_tests.js

- -
- - - - -
-
-
- -
-

../../node/MessageHandler.js

- -
- - - - -
-
-
- -
-

../../node/PadManager.js

- -
- - - - -
-
-
- -
-

../../node/server.js

- -
- - - - -
-
-
- - -
-
- - Documentation generated by JsDoc Toolkit 2.3.2 on Sat Mar 26 2011 18:26:06 GMT-0000 (GMT) -
- - \ No newline at end of file diff --git a/doc/jsdoc/index.html b/doc/jsdoc/index.html deleted file mode 100644 index 34592f3a3..000000000 --- a/doc/jsdoc/index.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - JsDoc Reference - Index - - - - - - - - -
- -
-

Classes

- -
-
- -
-

Class Index

- - -
-

_global_

- -
-
- - -
-
- - Documentation generated by JsDoc Toolkit 2.3.2 on Sat Mar 26 2011 18:26:06 GMT-0000 (GMT) -
- - \ No newline at end of file diff --git a/doc/jsdoc/minify.md b/doc/jsdoc/minify.md new file mode 100644 index 000000000..39c0ba621 --- /dev/null +++ b/doc/jsdoc/minify.md @@ -0,0 +1,33 @@ +#minify +`require("./minify");` + +2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +##Functions + +###padJS (req, res) +2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +* **req** +* **res** + +##Variables + diff --git a/doc/jsdoc/server.md b/doc/jsdoc/server.md new file mode 100644 index 000000000..b1b86af07 --- /dev/null +++ b/doc/jsdoc/server.md @@ -0,0 +1,21 @@ +#server +`require("./server");` + +2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +##Functions + +##Variables + +###maxAge + + diff --git a/doc/jsdoc/settings.md b/doc/jsdoc/settings.md new file mode 100644 index 000000000..fd7154378 --- /dev/null +++ b/doc/jsdoc/settings.md @@ -0,0 +1,36 @@ +#settings +`require("./settings");` + +2011 Peter 'Pita' Martischka +* Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +* http://www.apache.org/licenses/LICENSE-2.0 +* Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +##Functions + +##Variables + +###dbSettings + + +###dbType + + +###defaultPadText + + +###logHTTP + + +###minify + + +###port + + diff --git a/doc/jsdoc/symbols/_global_.html b/doc/jsdoc/symbols/_global_.html deleted file mode 100644 index 421a4f40a..000000000 --- a/doc/jsdoc/symbols/_global_.html +++ /dev/null @@ -1,1667 +0,0 @@ - - - - - - - JsDoc Reference - _global_ - - - - - - - - - - - -
- - -
-

Classes

- -
- -
- -
- -

- - Built-In Namespace _global_ -

- - -

- - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Field Summary
Field AttributesField Name and Description
  - -
Copyright 2009 Google Inc.
-
  -
- Changeset -
-
2011 Peter 'Pita' Martischka - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License.
-
  - -
Saves all Authors as a assoative Array.
-
  - -
A Array with all known Pads
-
  -
- http -
-
2011 Peter 'Pita' Martischka - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License.
-
  - -
A associative array that saves which sessions belong to a pad
-
  - -
Copyright 2009 Google Inc.
-
  - -
A associative array that translates a session to a pad
-
  - -
A associative array that saves some general informations about a session -key = sessionId -values = author, rev - rev = That last revision that was send to this client - author = the author name of this session
-
  -
- socketio -
-
Saves the Socket class we need to send and recieve data from the client
-
  - -
A easy key value pair.
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Method Summary
Method AttributesMethod Name and Description
  -
_correctMarkersInPad(atext, apool) -
-
Copied from the Etherpad Source Code.
-
  - -
Generates a random String with the given length.
-
  -
appendRevision(id, theChangeset, The) -
-
Append a changeset to a pad
-
  -
atext(id) -
-
Returns the Attributed Text of a pad
-
  -
createPad(id) -
-
Creates an empty pad
-
  - -
Returns all Authors of a Pad
-
  - -
Returns the latest Revision Number of the Pad
-
  -
getRevisionAuthor(id, revNum) -
-
Returns the author of a specific revision
-
  -
getRevisionChangeset(id, revNum) -
-
Returns the changeset of a specific revision
-
  -
handleClientReady(client, message) -
-
Handles a CLIENT_READY.
-
  -
handleUserChanges(client, message) -
-
Handles a USERINFO_UPDATE, that means that a user have changed his color or name.
-
  -
handleUserInfoUpdate(client, message) -
-
Handles a USERINFO_UPDATE, that means that a user have changed his color or name.
-
  -
pool(id) -
-
Returns the Attribute Pool whichs the Pad is using
-
  -
text(id) -
-
Returns the plain text of a pad
-
  - -
A internal function that checks if the Author exist and throws a exception if not
-
  - -
A internal function that simply checks if client or socketio is null and throws a exception if yes
-
  - -
Check if the ID is a valid Pad ID and trows an Exeption if not
-
  - -
Check if the Revision of a Pad is valid and throws an Exeption if not
-
- - - - - - - - - - - - -
- Field Detail -
- - -
- - - AttributePoolFactory - -
-
- Copyright 2009 Google Inc., 2011 Peter 'Pita' Martischka - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS-IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -
- Defined in: Changeset.js. - - -
- - - - - - - - -
- - -
- - - Changeset - -
-
- 2011 Peter 'Pita' Martischka - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS-IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -
- Defined in: PadManager.js. - - -
- - - - - - - - -
- - -
- - - globalAuthors - -
-
- Saves all Authors as a assoative Array. The Key is the author id. -Authors can have the following attributes: --name The Name of the Author as shown on the Pad --colorId The Id of Usercolor. A number between 0 and 31 --timestamp The timestamp on which the user was last seen - -
- Defined in: AuthorManager.js. - - -
- - - - - - - - -
- - -
- - - globalPads - -
-
- A Array with all known Pads - -
- Defined in: PadManager.js. - - -
- - - - - - - - -
- - -
- - - http - -
-
- 2011 Peter 'Pita' Martischka - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS-IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -
- Defined in: server.js. - - -
- - - - - - - - -
- - -
- - - pad2sessions - -
-
- A associative array that saves which sessions belong to a pad - -
- Defined in: MessageHandler.js. - - -
- - - - - - - - -
- - -
- - - padManager - -
-
- Copyright 2009 Google Inc., 2011 Peter 'Pita' Martischka - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS-IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -
- Defined in: MessageHandler.js. - - -
- - - - - - - - -
- - -
- - - session2pad - -
-
- A associative array that translates a session to a pad - -
- Defined in: MessageHandler.js. - - -
- - - - - - - - -
- - -
- - - sessioninfos - -
-
- A associative array that saves some general informations about a session -key = sessionId -values = author, rev - rev = That last revision that was send to this client - author = the author name of this session - -
- Defined in: MessageHandler.js. - - -
- - - - - - - - -
- - -
- - - socketio - -
-
- Saves the Socket class we need to send and recieve data from the client - -
- Defined in: MessageHandler.js. - - -
- - - - - - - - -
- - -
- - - token2author - -
-
- A easy key value pair. The Key is the token, the value is the authorid - -
- Defined in: AuthorManager.js. - - -
- - - - - - - - - - - - - - -
- Method Detail -
- - -
- - - _correctMarkersInPad(atext, apool) - -
-
- Copied from the Etherpad Source Code. Don't know what this methode does excatly... - -
- Defined in: MessageHandler.js. - - -
- - - - -
-
Parameters:
- -
- atext - -
-
- -
- apool - -
-
- -
- - - - - - - - -
- - -
- - - _randomString(len) - -
-
- Generates a random String with the given length. Is needed to generate the Author Ids - -
- Defined in: AuthorManager.js. - - -
- - - - -
-
Parameters:
- -
- len - -
-
- -
- - - - - - - - -
- - -
- - - appendRevision(id, theChangeset, The) - -
-
- Append a changeset to a pad - -
- Defined in: PadManager.js. - - -
- - - - -
-
Parameters:
- -
- id - -
-
The Pad id
- -
- theChangeset - -
-
the changeset which should apply to the text
- -
- The - -
-
author of the revision, can be null
- -
- - - - - - - - -
- - -
- - - atext(id) - -
-
- Returns the Attributed Text of a pad - -
- Defined in: PadManager.js. - - -
- - - - -
-
Parameters:
- -
- id - -
-
The Pad id
- -
- - - - - - - - -
- - -
- - - createPad(id) - -
-
- Creates an empty pad - -
- Defined in: PadManager.js. - - -
- - - - -
-
Parameters:
- -
- id - -
-
The Pad id
- -
- - - - - - - - -
- - -
- - - getAllAuthors(id) - -
-
- Returns all Authors of a Pad - -
- Defined in: PadManager.js. - - -
- - - - -
-
Parameters:
- -
- id - -
-
The Pad id
- -
- - - - - - - - -
- - -
- - - getHeadRevisionNumber(id) - -
-
- Returns the latest Revision Number of the Pad - -
- Defined in: PadManager.js. - - -
- - - - -
-
Parameters:
- -
- id - -
-
The Pad id
- -
- - - - - - - - -
- - -
- - - getRevisionAuthor(id, revNum) - -
-
- Returns the author of a specific revision - -
- Defined in: PadManager.js. - - -
- - - - -
-
Parameters:
- -
- id - -
-
The Pad id
- -
- revNum - -
-
The Revision Number
- -
- - - - - - - - -
- - -
- - - getRevisionChangeset(id, revNum) - -
-
- Returns the changeset of a specific revision - -
- Defined in: PadManager.js. - - -
- - - - -
-
Parameters:
- -
- id - -
-
The Pad id
- -
- revNum - -
-
The Revision Number
- -
- - - - - - - - -
- - -
- - - handleClientReady(client, message) - -
-
- Handles a CLIENT_READY. A CLIENT_READY is the first message from the client to the server. The Client sends his token -and the pad it wants to enter. The Server answers with the inital values (clientVars) of the pad - -
- Defined in: MessageHandler.js. - - -
- - - - -
-
Parameters:
- -
- client - -
-
the client that send this message
- -
- message - -
-
the message from the client
- -
- - - - - - - - -
- - -
- - - handleUserChanges(client, message) - -
-
- Handles a USERINFO_UPDATE, that means that a user have changed his color or name. Anyway, we get both informations -This Method is nearly 90% copied out of the Etherpad Source Code. So I can't tell you what happens here exactly -Look at https://github.com/ether/pad/blob/master/etherpad/src/etherpad/collab/collab_server.js in the function applyUserChanges() - -
- Defined in: MessageHandler.js. - - -
- - - - -
-
Parameters:
- -
- client - -
-
the client that send this message
- -
- message - -
-
the message from the client
- -
- - - - - - - - -
- - -
- - - handleUserInfoUpdate(client, message) - -
-
- Handles a USERINFO_UPDATE, that means that a user have changed his color or name. Anyway, we get both informations - -
- Defined in: MessageHandler.js. - - -
- - - - -
-
Parameters:
- -
- client - -
-
the client that send this message
- -
- message - -
-
the message from the client
- -
- - - - - - - - -
- - -
- - - pool(id) - -
-
- Returns the Attribute Pool whichs the Pad is using - -
- Defined in: PadManager.js. - - -
- - - - -
-
Parameters:
- -
- id - -
-
The Pad id
- -
- - - - - - - - -
- - -
- - - text(id) - -
-
- Returns the plain text of a pad - -
- Defined in: PadManager.js. - - -
- - - - -
-
Parameters:
- -
- id - -
-
The Pad id
- -
- - - - - - - - -
- - -
- - - throwExceptionIfAuthorNotExist(author) - -
-
- A internal function that checks if the Author exist and throws a exception if not - -
- Defined in: AuthorManager.js. - - -
- - - - -
-
Parameters:
- -
- author - -
-
- -
- - - - - - - - -
- - -
- - - throwExceptionIfClientOrIOisInvalid(client) - -
-
- A internal function that simply checks if client or socketio is null and throws a exception if yes - -
- Defined in: MessageHandler.js. - - -
- - - - -
-
Parameters:
- -
- client - -
-
- -
- - - - - - - - -
- - -
- - - throwExceptionIfPadDontExist(id) - -
-
- Check if the ID is a valid Pad ID and trows an Exeption if not - -
- Defined in: PadManager.js. - - -
- - - - -
-
Parameters:
- -
- id - -
-
The Pad id
- -
- - - - - - - - -
- - -
- - - throwExceptionIfRevDontExist(id, revNum) - -
-
- Check if the Revision of a Pad is valid and throws an Exeption if not - -
- Defined in: PadManager.js. - - -
- - - - -
-
Parameters:
- -
- id - -
-
The Pad id
- -
- revNum - -
-
- -
- - - - - - - - - - - - - - - -
-
- - - -
- - Documentation generated by JsDoc Toolkit 2.3.2 on Sat Mar 26 2011 18:26:06 GMT-0000 (GMT) -
- - diff --git a/doc/jsdoc/symbols/src/node_AttributePoolFactory.js.html b/doc/jsdoc/symbols/src/node_AttributePoolFactory.js.html deleted file mode 100644 index 957fc617b..000000000 --- a/doc/jsdoc/symbols/src/node_AttributePoolFactory.js.html +++ /dev/null @@ -1,90 +0,0 @@ -
  1 /**
-  2  * Copyright 2009 Google Inc., 2011 Peter 'Pita' Martischka
-  3  *
-  4  * Licensed under the Apache License, Version 2.0 (the "License");
-  5  * you may not use this file except in compliance with the License.
-  6  * You may obtain a copy of the License at
-  7  *
-  8  *      http://www.apache.org/licenses/LICENSE-2.0
-  9  *
- 10  * Unless required by applicable law or agreed to in writing, software
- 11  * distributed under the License is distributed on an "AS-IS" BASIS,
- 12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- 13  * See the License for the specific language governing permissions and
- 14  * limitations under the License.
- 15  */
- 16 
- 17 exports.createAttributePool = function () {
- 18   var p = {};
- 19   p.numToAttrib = {}; // e.g. {0: ['foo','bar']}
- 20   p.attribToNum = {}; // e.g. {'foo,bar': 0}
- 21   p.nextNum = 0;
- 22 
- 23   p.putAttrib = function (attrib, dontAddIfAbsent) {
- 24     var str = String(attrib);
- 25     if (str in p.attribToNum) {
- 26       return p.attribToNum[str];
- 27     }
- 28     if (dontAddIfAbsent) {
- 29       return -1;
- 30     }
- 31     var num = p.nextNum++;
- 32     p.attribToNum[str] = num;
- 33     p.numToAttrib[num] = [String(attrib[0] || ''), String(attrib[1] || '')];
- 34     return num;
- 35   };
- 36 
- 37   p.getAttrib = function (num) {
- 38     var pair = p.numToAttrib[num];
- 39     if (!pair) {
- 40       return pair;
- 41     }
- 42     return [pair[0], pair[1]]; // return a mutable copy
- 43   };
- 44 
- 45   p.getAttribKey = function (num) {
- 46     var pair = p.numToAttrib[num];
- 47     if (!pair) return '';
- 48     return pair[0];
- 49   };
- 50 
- 51   p.getAttribValue = function (num) {
- 52     var pair = p.numToAttrib[num];
- 53     if (!pair) return '';
- 54     return pair[1];
- 55   };
- 56 
- 57   p.eachAttrib = function (func) {
- 58     for (var n in p.numToAttrib) {
- 59       var pair = p.numToAttrib[n];
- 60       func(pair[0], pair[1]);
- 61     }
- 62   };
- 63 
- 64   p.toJsonable = function () {
- 65     return {
- 66       numToAttrib: p.numToAttrib,
- 67       nextNum: p.nextNum
- 68     };
- 69   };
- 70 
- 71   p.fromJsonable = function (obj) {
- 72     p.numToAttrib = obj.numToAttrib;
- 73     p.nextNum = obj.nextNum;
- 74     p.attribToNum = {};
- 75     for (var n in p.numToAttrib) {
- 76       p.attribToNum[String(p.numToAttrib[n])] = Number(n);
- 77     }
- 78     return p;
- 79   };
- 80 
- 81   return p;
- 82 }
- 83 
\ No newline at end of file diff --git a/doc/jsdoc/symbols/src/node_AuthorManager.js.html b/doc/jsdoc/symbols/src/node_AuthorManager.js.html deleted file mode 100644 index e3ef555a6..000000000 --- a/doc/jsdoc/symbols/src/node_AuthorManager.js.html +++ /dev/null @@ -1,139 +0,0 @@ -
  1 /**
-  2  * 2011 Peter 'Pita' Martischka
-  3  *
-  4  * Licensed under the Apache License, Version 2.0 (the "License");
-  5  * you may not use this file except in compliance with the License.
-  6  * You may obtain a copy of the License at
-  7  *
-  8  *      http://www.apache.org/licenses/LICENSE-2.0
-  9  *
- 10  * Unless required by applicable law or agreed to in writing, software
- 11  * distributed under the License is distributed on an "AS-IS" BASIS,
- 12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- 13  * See the License for the specific language governing permissions and
- 14  * limitations under the License.
- 15  */
- 16 
- 17 
- 18 /**
- 19  * The AuthorManager controlls all information about the Pad authors
- 20  */
- 21 
- 22 /**
- 23  * Saves all Authors as a assoative Array. The Key is the author id.
- 24  * Authors can have the following attributes:
- 25  * -name The Name of the Author as shown on the Pad
- 26  * -colorId The Id of Usercolor. A number between 0 and 31
- 27  * -timestamp The timestamp on which the user was last seen
- 28  */ 
- 29 var globalAuthors = {};
- 30 
- 31 /**
- 32  * A easy key value pair. The Key is the token, the value is the authorid 
- 33  */
- 34 var token2author = {};
- 35 
- 36 /**
- 37  * Returns the Author Id for a token. If the token is unkown, 
- 38  * it creates a author for the token
- 39  * @param token The token 
- 40  */
- 41 exports.getAuthor4Token = function (token)
- 42 {
- 43   var author;
- 44   
- 45   if(token2author[token] == null)
- 46   {
- 47     author = "g." + _randomString(16);
- 48     
- 49     while(globalAuthors[author] != null)
- 50     {
- 51       author = "g." + _randomString(16);
- 52     }
- 53     
- 54     token2author[token]=author;
- 55   
- 56     globalAuthors[author] = {};
- 57     globalAuthors[author].colorId = Math.floor(Math.random()*32);
- 58     globalAuthors[author].name = null;
- 59   }
- 60   else
- 61   {
- 62     author = token2author[token];
- 63   }
- 64   
- 65   globalAuthors[author].timestamp = new Date().getTime();
- 66   
- 67   return author;
- 68 }
- 69 
- 70 /**
- 71  * Returns the color Id of the author
- 72  */
- 73 exports.getAuthorColorId = function (author)
- 74 {
- 75   throwExceptionIfAuthorNotExist(author);
- 76   
- 77   return globalAuthors[author].colorId;
- 78 }
- 79 
- 80 /**
- 81  * Sets the color Id of the author
- 82  */
- 83 exports.setAuthorColorId = function (author, colorId)
- 84 {
- 85   throwExceptionIfAuthorNotExist(author);
- 86   
- 87   globalAuthors[author].colorId = colorId;
- 88 }
- 89 
- 90 /**
- 91  * Returns the name of the author
- 92  */
- 93 exports.getAuthorName = function (author)
- 94 {
- 95   throwExceptionIfAuthorNotExist(author);
- 96   
- 97   return globalAuthors[author].name;
- 98 }
- 99 
-100 /**
-101  * Sets the name of the author
-102  */
-103 exports.setAuthorName = function (author, name)
-104 {
-105   throwExceptionIfAuthorNotExist(author);
-106   
-107   globalAuthors[author].name = name;
-108 }
-109 
-110 /**
-111  * A internal function that checks if the Author exist and throws a exception if not
-112  */
-113 function throwExceptionIfAuthorNotExist(author)
-114 {
-115   if(globalAuthors[author] == null)
-116   {
-117     throw "Author '" + author + "' is unkown!";
-118   }
-119 }
-120 
-121 /**
-122  * Generates a random String with the given length. Is needed to generate the Author Ids
-123  */
-124 function _randomString(len) {
-125   // use only numbers and lowercase letters
-126   var pieces = [];
-127   for(var i=0;i<len;i++) {
-128     pieces.push(Math.floor(Math.random()*36).toString(36).slice(-1));
-129   }
-130   return pieces.join('');
-131 }
-132 
\ No newline at end of file diff --git a/doc/jsdoc/symbols/src/node_Changeset.js.html b/doc/jsdoc/symbols/src/node_Changeset.js.html deleted file mode 100644 index 7d5f002e5..000000000 --- a/doc/jsdoc/symbols/src/node_Changeset.js.html +++ /dev/null @@ -1,1965 +0,0 @@ -
  1 /**
-  2  * Copyright 2009 Google Inc., 2011 Peter 'Pita' Martischka
-  3  *
-  4  * Licensed under the Apache License, Version 2.0 (the "License");
-  5  * you may not use this file except in compliance with the License.
-  6  * You may obtain a copy of the License at
-  7  *
-  8  *      http://www.apache.org/licenses/LICENSE-2.0
-  9  *
- 10  * Unless required by applicable law or agreed to in writing, software
- 11  * distributed under the License is distributed on an "AS-IS" BASIS,
- 12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- 13  * See the License for the specific language governing permissions and
- 14  * limitations under the License.
- 15  */
- 16 
- 17 var AttributePoolFactory = require("./AttributePoolFactory");
- 18 
- 19 var _opt = null;
- 20 
- 21 //var exports = {};
- 22 exports.error = function error(msg) {
- 23   var e = new Error(msg);
- 24   e.easysync = true;
- 25   throw e;
- 26 };
- 27 exports.assert = function assert(b, msgParts) {
- 28   if (!b) {
- 29     var msg = Array.prototype.slice.call(arguments, 1).join('');
- 30     exports.error("exports: " + msg);
- 31   }
- 32 };
- 33 
- 34 exports.parseNum = function (str) {
- 35   return parseInt(str, 36);
- 36 };
- 37 exports.numToString = function (num) {
- 38   return num.toString(36).toLowerCase();
- 39 };
- 40 exports.toBaseTen = function (cs) {
- 41   var dollarIndex = cs.indexOf('$');
- 42   var beforeDollar = cs.substring(0, dollarIndex);
- 43   var fromDollar = cs.substring(dollarIndex);
- 44   return beforeDollar.replace(/[0-9a-z]+/g, function (s) {
- 45     return String(exports.parseNum(s));
- 46   }) + fromDollar;
- 47 };
- 48 
- 49 exports.oldLen = function (cs) {
- 50   return exports.unpack(cs).oldLen;
- 51 };
- 52 exports.newLen = function (cs) {
- 53   return exports.unpack(cs).newLen;
- 54 };
- 55 
- 56 exports.opIterator = function (opsStr, optStartIndex) {
- 57   //print(opsStr);
- 58   var regex = /((?:\*[0-9a-z]+)*)(?:\|([0-9a-z]+))?([-+=])([0-9a-z]+)|\?|/g;
- 59   var startIndex = (optStartIndex || 0);
- 60   var curIndex = startIndex;
- 61   var prevIndex = curIndex;
- 62 
- 63   function nextRegexMatch() {
- 64     prevIndex = curIndex;
- 65     var result;
- 66     if (_opt) {
- 67       result = _opt.nextOpInString(opsStr, curIndex);
- 68       if (result) {
- 69         if (result.opcode() == '?') {
- 70           exports.error("Hit error opcode in op stream");
- 71         }
- 72         curIndex = result.lastIndex();
- 73       }
- 74     } else {
- 75       regex.lastIndex = curIndex;
- 76       result = regex.exec(opsStr);
- 77       curIndex = regex.lastIndex;
- 78       if (result[0] == '?') {
- 79         exports.error("Hit error opcode in op stream");
- 80       }
- 81     }
- 82     return result;
- 83   }
- 84   var regexResult = nextRegexMatch();
- 85   var obj = exports.newOp();
- 86 
- 87   function next(optObj) {
- 88     var op = (optObj || obj);
- 89     if (_opt && regexResult) {
- 90       op.attribs = regexResult.attribs();
- 91       op.lines = regexResult.lines();
- 92       op.chars = regexResult.chars();
- 93       op.opcode = regexResult.opcode();
- 94       regexResult = nextRegexMatch();
- 95     } else if ((!_opt) && regexResult[0]) {
- 96       op.attribs = regexResult[1];
- 97       op.lines = exports.parseNum(regexResult[2] || 0);
- 98       op.opcode = regexResult[3];
- 99       op.chars = exports.parseNum(regexResult[4]);
-100       regexResult = nextRegexMatch();
-101     } else {
-102       exports.clearOp(op);
-103     }
-104     return op;
-105   }
-106 
-107   function hasNext() {
-108     return !!(_opt ? regexResult : regexResult[0]);
-109   }
-110 
-111   function lastIndex() {
-112     return prevIndex;
-113   }
-114   return {
-115     next: next,
-116     hasNext: hasNext,
-117     lastIndex: lastIndex
-118   };
-119 };
-120 
-121 exports.clearOp = function (op) {
-122   op.opcode = '';
-123   op.chars = 0;
-124   op.lines = 0;
-125   op.attribs = '';
-126 };
-127 exports.newOp = function (optOpcode) {
-128   return {
-129     opcode: (optOpcode || ''),
-130     chars: 0,
-131     lines: 0,
-132     attribs: ''
-133   };
-134 };
-135 exports.cloneOp = function (op) {
-136   return {
-137     opcode: op.opcode,
-138     chars: op.chars,
-139     lines: op.lines,
-140     attribs: op.attribs
-141   };
-142 };
-143 exports.copyOp = function (op1, op2) {
-144   op2.opcode = op1.opcode;
-145   op2.chars = op1.chars;
-146   op2.lines = op1.lines;
-147   op2.attribs = op1.attribs;
-148 };
-149 exports.opString = function (op) {
-150   // just for debugging
-151   if (!op.opcode) return 'null';
-152   var assem = exports.opAssembler();
-153   assem.append(op);
-154   return assem.toString();
-155 };
-156 exports.stringOp = function (str) {
-157   // just for debugging
-158   return exports.opIterator(str).next();
-159 };
-160 
-161 exports.checkRep = function (cs) {
-162   // doesn't check things that require access to attrib pool (e.g. attribute order)
-163   // or original string (e.g. newline positions)
-164   var unpacked = exports.unpack(cs);
-165   var oldLen = unpacked.oldLen;
-166   var newLen = unpacked.newLen;
-167   var ops = unpacked.ops;
-168   var charBank = unpacked.charBank;
-169 
-170   var assem = exports.smartOpAssembler();
-171   var oldPos = 0;
-172   var calcNewLen = 0;
-173   var numInserted = 0;
-174   var iter = exports.opIterator(ops);
-175   while (iter.hasNext()) {
-176     var o = iter.next();
-177     switch (o.opcode) {
-178     case '=':
-179       oldPos += o.chars;
-180       calcNewLen += o.chars;
-181       break;
-182     case '-':
-183       oldPos += o.chars;
-184       exports.assert(oldPos < oldLen, oldPos, " >= ", oldLen, " in ", cs);
-185       break;
-186     case '+':
-187       {
-188         calcNewLen += o.chars;
-189         numInserted += o.chars;
-190         exports.assert(calcNewLen < newLen, calcNewLen, " >= ", newLen, " in ", cs);
-191         break;
-192       }
-193     }
-194     assem.append(o);
-195   }
-196 
-197   calcNewLen += oldLen - oldPos;
-198   charBank = charBank.substring(0, numInserted);
-199   while (charBank.length < numInserted) {
-200     charBank += "?";
-201   }
-202 
-203   assem.endDocument();
-204   var normalized = exports.pack(oldLen, calcNewLen, assem.toString(), charBank);
-205   exports.assert(normalized == cs, normalized, ' != ', cs);
-206 
-207   return cs;
-208 }
-209 
-210 exports.smartOpAssembler = function () {
-211   // Like opAssembler but able to produce conforming exportss
-212   // from slightly looser input, at the cost of speed.
-213   // Specifically:
-214   // - merges consecutive operations that can be merged
-215   // - strips final "="
-216   // - ignores 0-length changes
-217   // - reorders consecutive + and - (which margingOpAssembler doesn't do)
-218   var minusAssem = exports.mergingOpAssembler();
-219   var plusAssem = exports.mergingOpAssembler();
-220   var keepAssem = exports.mergingOpAssembler();
-221   var assem = exports.stringAssembler();
-222   var lastOpcode = '';
-223   var lengthChange = 0;
-224 
-225   function flushKeeps() {
-226     assem.append(keepAssem.toString());
-227     keepAssem.clear();
-228   }
-229 
-230   function flushPlusMinus() {
-231     assem.append(minusAssem.toString());
-232     minusAssem.clear();
-233     assem.append(plusAssem.toString());
-234     plusAssem.clear();
-235   }
-236 
-237   function append(op) {
-238     if (!op.opcode) return;
-239     if (!op.chars) return;
-240 
-241     if (op.opcode == '-') {
-242       if (lastOpcode == '=') {
-243         flushKeeps();
-244       }
-245       minusAssem.append(op);
-246       lengthChange -= op.chars;
-247     } else if (op.opcode == '+') {
-248       if (lastOpcode == '=') {
-249         flushKeeps();
-250       }
-251       plusAssem.append(op);
-252       lengthChange += op.chars;
-253     } else if (op.opcode == '=') {
-254       if (lastOpcode != '=') {
-255         flushPlusMinus();
-256       }
-257       keepAssem.append(op);
-258     }
-259     lastOpcode = op.opcode;
-260   }
-261 
-262   function appendOpWithText(opcode, text, attribs, pool) {
-263     var op = exports.newOp(opcode);
-264     op.attribs = exports.makeAttribsString(opcode, attribs, pool);
-265     var lastNewlinePos = text.lastIndexOf('\n');
-266     if (lastNewlinePos < 0) {
-267       op.chars = text.length;
-268       op.lines = 0;
-269       append(op);
-270     } else {
-271       op.chars = lastNewlinePos + 1;
-272       op.lines = text.match(/\n/g).length;
-273       append(op);
-274       op.chars = text.length - (lastNewlinePos + 1);
-275       op.lines = 0;
-276       append(op);
-277     }
-278   }
-279 
-280   function toString() {
-281     flushPlusMinus();
-282     flushKeeps();
-283     return assem.toString();
-284   }
-285 
-286   function clear() {
-287     minusAssem.clear();
-288     plusAssem.clear();
-289     keepAssem.clear();
-290     assem.clear();
-291     lengthChange = 0;
-292   }
-293 
-294   function endDocument() {
-295     keepAssem.endDocument();
-296   }
-297 
-298   function getLengthChange() {
-299     return lengthChange;
-300   }
-301 
-302   return {
-303     append: append,
-304     toString: toString,
-305     clear: clear,
-306     endDocument: endDocument,
-307     appendOpWithText: appendOpWithText,
-308     getLengthChange: getLengthChange
-309   };
-310 };
-311 
-312 if (_opt) {
-313   exports.mergingOpAssembler = function () {
-314     var assem = _opt.mergingOpAssembler();
-315 
-316     function append(op) {
-317       assem.append(op.opcode, op.chars, op.lines, op.attribs);
-318     }
-319 
-320     function toString() {
-321       return assem.toString();
-322     }
-323 
-324     function clear() {
-325       assem.clear();
-326     }
-327 
-328     function endDocument() {
-329       assem.endDocument();
-330     }
-331 
-332     return {
-333       append: append,
-334       toString: toString,
-335       clear: clear,
-336       endDocument: endDocument
-337     };
-338   };
-339 } else {
-340   exports.mergingOpAssembler = function () {
-341     // This assembler can be used in production; it efficiently
-342     // merges consecutive operations that are mergeable, ignores
-343     // no-ops, and drops final pure "keeps".  It does not re-order
-344     // operations.
-345     var assem = exports.opAssembler();
-346     var bufOp = exports.newOp();
-347 
-348     // If we get, for example, insertions [xxx\n,yyy], those don't merge,
-349     // but if we get [xxx\n,yyy,zzz\n], that merges to [xxx\nyyyzzz\n].
-350     // This variable stores the length of yyy and any other newline-less
-351     // ops immediately after it.
-352     var bufOpAdditionalCharsAfterNewline = 0;
-353 
-354     function flush(isEndDocument) {
-355       if (bufOp.opcode) {
-356         if (isEndDocument && bufOp.opcode == '=' && !bufOp.attribs) {
-357           // final merged keep, leave it implicit
-358         } else {
-359           assem.append(bufOp);
-360           if (bufOpAdditionalCharsAfterNewline) {
-361             bufOp.chars = bufOpAdditionalCharsAfterNewline;
-362             bufOp.lines = 0;
-363             assem.append(bufOp);
-364             bufOpAdditionalCharsAfterNewline = 0;
-365           }
-366         }
-367         bufOp.opcode = '';
-368       }
-369     }
-370 
-371     function append(op) {
-372       if (op.chars > 0) {
-373         if (bufOp.opcode == op.opcode && bufOp.attribs == op.attribs) {
-374           if (op.lines > 0) {
-375             // bufOp and additional chars are all mergeable into a multi-line op
-376             bufOp.chars += bufOpAdditionalCharsAfterNewline + op.chars;
-377             bufOp.lines += op.lines;
-378             bufOpAdditionalCharsAfterNewline = 0;
-379           } else if (bufOp.lines == 0) {
-380             // both bufOp and op are in-line
-381             bufOp.chars += op.chars;
-382           } else {
-383             // append in-line text to multi-line bufOp
-384             bufOpAdditionalCharsAfterNewline += op.chars;
-385           }
-386         } else {
-387           flush();
-388           exports.copyOp(op, bufOp);
-389         }
-390       }
-391     }
-392 
-393     function endDocument() {
-394       flush(true);
-395     }
-396 
-397     function toString() {
-398       flush();
-399       return assem.toString();
-400     }
-401 
-402     function clear() {
-403       assem.clear();
-404       exports.clearOp(bufOp);
-405     }
-406     return {
-407       append: append,
-408       toString: toString,
-409       clear: clear,
-410       endDocument: endDocument
-411     };
-412   };
-413 }
-414 
-415 if (_opt) {
-416   exports.opAssembler = function () {
-417     var assem = _opt.opAssembler();
-418     // this function allows op to be mutated later (doesn't keep a ref)
-419 
-420     function append(op) {
-421       assem.append(op.opcode, op.chars, op.lines, op.attribs);
-422     }
-423 
-424     function toString() {
-425       return assem.toString();
-426     }
-427 
-428     function clear() {
-429       assem.clear();
-430     }
-431     return {
-432       append: append,
-433       toString: toString,
-434       clear: clear
-435     };
-436   };
-437 } else {
-438   exports.opAssembler = function () {
-439     var pieces = [];
-440     // this function allows op to be mutated later (doesn't keep a ref)
-441 
-442     function append(op) {
-443       pieces.push(op.attribs);
-444       if (op.lines) {
-445         pieces.push('|', exports.numToString(op.lines));
-446       }
-447       pieces.push(op.opcode);
-448       pieces.push(exports.numToString(op.chars));
-449     }
-450 
-451     function toString() {
-452       return pieces.join('');
-453     }
-454 
-455     function clear() {
-456       pieces.length = 0;
-457     }
-458     return {
-459       append: append,
-460       toString: toString,
-461       clear: clear
-462     };
-463   };
-464 }
-465 
-466 exports.stringIterator = function (str) {
-467   var curIndex = 0;
-468 
-469   function assertRemaining(n) {
-470     exports.assert(n <= remaining(), "!(", n, " <= ", remaining(), ")");
-471   }
-472 
-473   function take(n) {
-474     assertRemaining(n);
-475     var s = str.substr(curIndex, n);
-476     curIndex += n;
-477     return s;
-478   }
-479 
-480   function peek(n) {
-481     assertRemaining(n);
-482     var s = str.substr(curIndex, n);
-483     return s;
-484   }
-485 
-486   function skip(n) {
-487     assertRemaining(n);
-488     curIndex += n;
-489   }
-490 
-491   function remaining() {
-492     return str.length - curIndex;
-493   }
-494   return {
-495     take: take,
-496     skip: skip,
-497     remaining: remaining,
-498     peek: peek
-499   };
-500 };
-501 
-502 exports.stringAssembler = function () {
-503   var pieces = [];
-504 
-505   function append(x) {
-506     pieces.push(String(x));
-507   }
-508 
-509   function toString() {
-510     return pieces.join('');
-511   }
-512   return {
-513     append: append,
-514     toString: toString
-515   };
-516 };
-517 
-518 // "lines" need not be an array as long as it supports certain calls (lines_foo inside).
-519 exports.textLinesMutator = function (lines) {
-520   // Mutates lines, an array of strings, in place.
-521   // Mutation operations have the same constraints as exports operations
-522   // with respect to newlines, but not the other additional constraints
-523   // (i.e. ins/del ordering, forbidden no-ops, non-mergeability, final newline).
-524   // Can be used to mutate lists of strings where the last char of each string
-525   // is not actually a newline, but for the purposes of N and L values,
-526   // the caller should pretend it is, and for things to work right in that case, the input
-527   // to insert() should be a single line with no newlines.
-528   var curSplice = [0, 0];
-529   var inSplice = false;
-530   // position in document after curSplice is applied:
-531   var curLine = 0,
-532       curCol = 0;
-533   // invariant: if (inSplice) then (curLine is in curSplice[0] + curSplice.length - {2,3}) &&
-534   //            curLine >= curSplice[0]
-535   // invariant: if (inSplice && (curLine >= curSplice[0] + curSplice.length - 2)) then
-536   //            curCol == 0
-537 
-538   function lines_applySplice(s) {
-539     lines.splice.apply(lines, s);
-540   }
-541 
-542   function lines_toSource() {
-543     return lines.toSource();
-544   }
-545 
-546   function lines_get(idx) {
-547     if (lines.get) {
-548       return lines.get(idx);
-549     } else {
-550       return lines[idx];
-551     }
-552   }
-553   // can be unimplemented if removeLines's return value not needed
-554 
-555   function lines_slice(start, end) {
-556     if (lines.slice) {
-557       return lines.slice(start, end);
-558     } else {
-559       return [];
-560     }
-561   }
-562 
-563   function lines_length() {
-564     if ((typeof lines.length) == "number") {
-565       return lines.length;
-566     } else {
-567       return lines.length();
-568     }
-569   }
-570 
-571   function enterSplice() {
-572     curSplice[0] = curLine;
-573     curSplice[1] = 0;
-574     if (curCol > 0) {
-575       putCurLineInSplice();
-576     }
-577     inSplice = true;
-578   }
-579 
-580   function leaveSplice() {
-581     lines_applySplice(curSplice);
-582     curSplice.length = 2;
-583     curSplice[0] = curSplice[1] = 0;
-584     inSplice = false;
-585   }
-586 
-587   function isCurLineInSplice() {
-588     return (curLine - curSplice[0] < (curSplice.length - 2));
-589   }
-590 
-591   function debugPrint(typ) {
-592     print(typ + ": " + curSplice.toSource() + " / " + curLine + "," + curCol + " / " + lines_toSource());
-593   }
-594 
-595   function putCurLineInSplice() {
-596     if (!isCurLineInSplice()) {
-597       curSplice.push(lines_get(curSplice[0] + curSplice[1]));
-598       curSplice[1]++;
-599     }
-600     return 2 + curLine - curSplice[0];
-601   }
-602 
-603   function skipLines(L, includeInSplice) {
-604     if (L) {
-605       if (includeInSplice) {
-606         if (!inSplice) {
-607           enterSplice();
-608         }
-609         for (var i = 0; i < L; i++) {
-610           curCol = 0;
-611           putCurLineInSplice();
-612           curLine++;
-613         }
-614       } else {
-615         if (inSplice) {
-616           if (L > 1) {
-617             leaveSplice();
-618           } else {
-619             putCurLineInSplice();
-620           }
-621         }
-622         curLine += L;
-623         curCol = 0;
-624       }
-625       //print(inSplice+" / "+isCurLineInSplice()+" / "+curSplice[0]+" / "+curSplice[1]+" / "+lines.length);
-626 /*if (inSplice && (! isCurLineInSplice()) && (curSplice[0] + curSplice[1] < lines.length)) {
-627 	  print("BLAH");
-628 	  putCurLineInSplice();
-629 	}*/
-630       // tests case foo in remove(), which isn't otherwise covered in current impl
-631     }
-632     //debugPrint("skip");
-633   }
-634 
-635   function skip(N, L, includeInSplice) {
-636     if (N) {
-637       if (L) {
-638         skipLines(L, includeInSplice);
-639       } else {
-640         if (includeInSplice && !inSplice) {
-641           enterSplice();
-642         }
-643         if (inSplice) {
-644           putCurLineInSplice();
-645         }
-646         curCol += N;
-647         //debugPrint("skip");
-648       }
-649     }
-650   }
-651 
-652   function removeLines(L) {
-653     var removed = '';
-654     if (L) {
-655       if (!inSplice) {
-656         enterSplice();
-657       }
-658 
-659       function nextKLinesText(k) {
-660         var m = curSplice[0] + curSplice[1];
-661         return lines_slice(m, m + k).join('');
-662       }
-663       if (isCurLineInSplice()) {
-664         //print(curCol);
-665         if (curCol == 0) {
-666           removed = curSplice[curSplice.length - 1];
-667           // print("FOO"); // case foo
-668           curSplice.length--;
-669           removed += nextKLinesText(L - 1);
-670           curSplice[1] += L - 1;
-671         } else {
-672           removed = nextKLinesText(L - 1);
-673           curSplice[1] += L - 1;
-674           var sline = curSplice.length - 1;
-675           removed = curSplice[sline].substring(curCol) + removed;
-676           curSplice[sline] = curSplice[sline].substring(0, curCol) + lines_get(curSplice[0] + curSplice[1]);
-677           curSplice[1] += 1;
-678         }
-679       } else {
-680         removed = nextKLinesText(L);
-681         curSplice[1] += L;
-682       }
-683       //debugPrint("remove");
-684     }
-685     return removed;
-686   }
-687 
-688   function remove(N, L) {
-689     var removed = '';
-690     if (N) {
-691       if (L) {
-692         return removeLines(L);
-693       } else {
-694         if (!inSplice) {
-695           enterSplice();
-696         }
-697         var sline = putCurLineInSplice();
-698         removed = curSplice[sline].substring(curCol, curCol + N);
-699         curSplice[sline] = curSplice[sline].substring(0, curCol) + curSplice[sline].substring(curCol + N);
-700         //debugPrint("remove");
-701       }
-702     }
-703     return removed;
-704   }
-705 
-706   function insert(text, L) {
-707     if (text) {
-708       if (!inSplice) {
-709         enterSplice();
-710       }
-711       if (L) {
-712         var newLines = exports.splitTextLines(text);
-713         if (isCurLineInSplice()) {
-714           //if (curCol == 0) {
-715           //curSplice.length--;
-716           //curSplice[1]--;
-717           //Array.prototype.push.apply(curSplice, newLines);
-718           //curLine += newLines.length;
-719           //}
-720           //else {
-721           var sline = curSplice.length - 1;
-722           var theLine = curSplice[sline];
-723           var lineCol = curCol;
-724           curSplice[sline] = theLine.substring(0, lineCol) + newLines[0];
-725           curLine++;
-726           newLines.splice(0, 1);
-727           Array.prototype.push.apply(curSplice, newLines);
-728           curLine += newLines.length;
-729           curSplice.push(theLine.substring(lineCol));
-730           curCol = 0;
-731           //}
-732         } else {
-733           Array.prototype.push.apply(curSplice, newLines);
-734           curLine += newLines.length;
-735         }
-736       } else {
-737         var sline = putCurLineInSplice();
-738         curSplice[sline] = curSplice[sline].substring(0, curCol) + text + curSplice[sline].substring(curCol);
-739         curCol += text.length;
-740       }
-741       //debugPrint("insert");
-742     }
-743   }
-744 
-745   function hasMore() {
-746     //print(lines.length+" / "+inSplice+" / "+(curSplice.length - 2)+" / "+curSplice[1]);
-747     var docLines = lines_length();
-748     if (inSplice) {
-749       docLines += curSplice.length - 2 - curSplice[1];
-750     }
-751     return curLine < docLines;
-752   }
-753 
-754   function close() {
-755     if (inSplice) {
-756       leaveSplice();
-757     }
-758     //debugPrint("close");
-759   }
-760 
-761   var self = {
-762     skip: skip,
-763     remove: remove,
-764     insert: insert,
-765     close: close,
-766     hasMore: hasMore,
-767     removeLines: removeLines,
-768     skipLines: skipLines
-769   };
-770   return self;
-771 };
-772 
-773 exports.applyZip = function (in1, idx1, in2, idx2, func) {
-774   var iter1 = exports.opIterator(in1, idx1);
-775   var iter2 = exports.opIterator(in2, idx2);
-776   var assem = exports.smartOpAssembler();
-777   var op1 = exports.newOp();
-778   var op2 = exports.newOp();
-779   var opOut = exports.newOp();
-780   while (op1.opcode || iter1.hasNext() || op2.opcode || iter2.hasNext()) {
-781     if ((!op1.opcode) && iter1.hasNext()) iter1.next(op1);
-782     if ((!op2.opcode) && iter2.hasNext()) iter2.next(op2);
-783     func(op1, op2, opOut);
-784     if (opOut.opcode) {
-785       //print(opOut.toSource());
-786       assem.append(opOut);
-787       opOut.opcode = '';
-788     }
-789   }
-790   assem.endDocument();
-791   return assem.toString();
-792 };
-793 
-794 exports.unpack = function (cs) {
-795   var headerRegex = /Z:([0-9a-z]+)([><])([0-9a-z]+)|/;
-796   var headerMatch = headerRegex.exec(cs);
-797   if ((!headerMatch) || (!headerMatch[0])) {
-798     exports.error("Not a exports: " + cs);
-799   }
-800   var oldLen = exports.parseNum(headerMatch[1]);
-801   var changeSign = (headerMatch[2] == '>') ? 1 : -1;
-802   var changeMag = exports.parseNum(headerMatch[3]);
-803   var newLen = oldLen + changeSign * changeMag;
-804   var opsStart = headerMatch[0].length;
-805   var opsEnd = cs.indexOf("$");
-806   if (opsEnd < 0) opsEnd = cs.length;
-807   return {
-808     oldLen: oldLen,
-809     newLen: newLen,
-810     ops: cs.substring(opsStart, opsEnd),
-811     charBank: cs.substring(opsEnd + 1)
-812   };
-813 };
-814 
-815 exports.pack = function (oldLen, newLen, opsStr, bank) {
-816   var lenDiff = newLen - oldLen;
-817   var lenDiffStr = (lenDiff >= 0 ? '>' + exports.numToString(lenDiff) : '<' + exports.numToString(-lenDiff));
-818   var a = [];
-819   a.push('Z:', exports.numToString(oldLen), lenDiffStr, opsStr, '$', bank);
-820   return a.join('');
-821 };
-822 
-823 exports.applyToText = function (cs, str) {
-824   var unpacked = exports.unpack(cs);
-825   exports.assert(str.length == unpacked.oldLen, "mismatched apply: ", str.length, " / ", unpacked.oldLen);
-826   var csIter = exports.opIterator(unpacked.ops);
-827   var bankIter = exports.stringIterator(unpacked.charBank);
-828   var strIter = exports.stringIterator(str);
-829   var assem = exports.stringAssembler();
-830   while (csIter.hasNext()) {
-831     var op = csIter.next();
-832     switch (op.opcode) {
-833     case '+':
-834       assem.append(bankIter.take(op.chars));
-835       break;
-836     case '-':
-837       strIter.skip(op.chars);
-838       break;
-839     case '=':
-840       assem.append(strIter.take(op.chars));
-841       break;
-842     }
-843   }
-844   assem.append(strIter.take(strIter.remaining()));
-845   return assem.toString();
-846 };
-847 
-848 exports.mutateTextLines = function (cs, lines) {
-849   var unpacked = exports.unpack(cs);
-850   var csIter = exports.opIterator(unpacked.ops);
-851   var bankIter = exports.stringIterator(unpacked.charBank);
-852   var mut = exports.textLinesMutator(lines);
-853   while (csIter.hasNext()) {
-854     var op = csIter.next();
-855     switch (op.opcode) {
-856     case '+':
-857       mut.insert(bankIter.take(op.chars), op.lines);
-858       break;
-859     case '-':
-860       mut.remove(op.chars, op.lines);
-861       break;
-862     case '=':
-863       mut.skip(op.chars, op.lines, ( !! op.attribs));
-864       break;
-865     }
-866   }
-867   mut.close();
-868 };
-869 
-870 exports.composeAttributes = function (att1, att2, resultIsMutation, pool) {
-871   // att1 and att2 are strings like "*3*f*1c", asMutation is a boolean.
-872   // Sometimes attribute (key,value) pairs are treated as attribute presence
-873   // information, while other times they are treated as operations that
-874   // mutate a set of attributes, and this affects whether an empty value
-875   // is a deletion or a change.
-876   // Examples, of the form (att1Items, att2Items, resultIsMutation) -> result
-877   // ([], [(bold, )], true) -> [(bold, )]
-878   // ([], [(bold, )], false) -> []
-879   // ([], [(bold, true)], true) -> [(bold, true)]
-880   // ([], [(bold, true)], false) -> [(bold, true)]
-881   // ([(bold, true)], [(bold, )], true) -> [(bold, )]
-882   // ([(bold, true)], [(bold, )], false) -> []
-883   // pool can be null if att2 has no attributes.
-884   if ((!att1) && resultIsMutation) {
-885     // In the case of a mutation (i.e. composing two exportss),
-886     // an att2 composed with an empy att1 is just att2.  If att1
-887     // is part of an attribution string, then att2 may remove
-888     // attributes that are already gone, so don't do this optimization.
-889     return att2;
-890   }
-891   if (!att2) return att1;
-892   var atts = [];
-893   att1.replace(/\*([0-9a-z]+)/g, function (_, a) {
-894     atts.push(pool.getAttrib(exports.parseNum(a)));
-895     return '';
-896   });
-897   att2.replace(/\*([0-9a-z]+)/g, function (_, a) {
-898     var pair = pool.getAttrib(exports.parseNum(a));
-899     var found = false;
-900     for (var i = 0; i < atts.length; i++) {
-901       var oldPair = atts[i];
-902       if (oldPair[0] == pair[0]) {
-903         if (pair[1] || resultIsMutation) {
-904           oldPair[1] = pair[1];
-905         } else {
-906           atts.splice(i, 1);
-907         }
-908         found = true;
-909         break;
-910       }
-911     }
-912     if ((!found) && (pair[1] || resultIsMutation)) {
-913       atts.push(pair);
-914     }
-915     return '';
-916   });
-917   atts.sort();
-918   var buf = exports.stringAssembler();
-919   for (var i = 0; i < atts.length; i++) {
-920     buf.append('*');
-921     buf.append(exports.numToString(pool.putAttrib(atts[i])));
-922   }
-923   //print(att1+" / "+att2+" / "+buf.toString());
-924   return buf.toString();
-925 };
-926 
-927 exports._slicerZipperFunc = function (attOp, csOp, opOut, pool) {
-928   // attOp is the op from the sequence that is being operated on, either an
-929   // attribution string or the earlier of two exportss being composed.
-930   // pool can be null if definitely not needed.
-931   //print(csOp.toSource()+" "+attOp.toSource()+" "+opOut.toSource());
-932   if (attOp.opcode == '-') {
-933     exports.copyOp(attOp, opOut);
-934     attOp.opcode = '';
-935   } else if (!attOp.opcode) {
-936     exports.copyOp(csOp, opOut);
-937     csOp.opcode = '';
-938   } else {
-939     switch (csOp.opcode) {
-940     case '-':
-941       {
-942         if (csOp.chars <= attOp.chars) {
-943           // delete or delete part
-944           if (attOp.opcode == '=') {
-945             opOut.opcode = '-';
-946             opOut.chars = csOp.chars;
-947             opOut.lines = csOp.lines;
-948             opOut.attribs = '';
-949           }
-950           attOp.chars -= csOp.chars;
-951           attOp.lines -= csOp.lines;
-952           csOp.opcode = '';
-953           if (!attOp.chars) {
-954             attOp.opcode = '';
-955           }
-956         } else {
-957           // delete and keep going
-958           if (attOp.opcode == '=') {
-959             opOut.opcode = '-';
-960             opOut.chars = attOp.chars;
-961             opOut.lines = attOp.lines;
-962             opOut.attribs = '';
-963           }
-964           csOp.chars -= attOp.chars;
-965           csOp.lines -= attOp.lines;
-966           attOp.opcode = '';
-967         }
-968         break;
-969       }
-970     case '+':
-971       {
-972         // insert
-973         exports.copyOp(csOp, opOut);
-974         csOp.opcode = '';
-975         break;
-976       }
-977     case '=':
-978       {
-979         if (csOp.chars <= attOp.chars) {
-980           // keep or keep part
-981           opOut.opcode = attOp.opcode;
-982           opOut.chars = csOp.chars;
-983           opOut.lines = csOp.lines;
-984           opOut.attribs = exports.composeAttributes(attOp.attribs, csOp.attribs, attOp.opcode == '=', pool);
-985           csOp.opcode = '';
-986           attOp.chars -= csOp.chars;
-987           attOp.lines -= csOp.lines;
-988           if (!attOp.chars) {
-989             attOp.opcode = '';
-990           }
-991         } else {
-992           // keep and keep going
-993           opOut.opcode = attOp.opcode;
-994           opOut.chars = attOp.chars;
-995           opOut.lines = attOp.lines;
-996           opOut.attribs = exports.composeAttributes(attOp.attribs, csOp.attribs, attOp.opcode == '=', pool);
-997           attOp.opcode = '';
-998           csOp.chars -= attOp.chars;
-999           csOp.lines -= attOp.lines;
-1000         }
-1001         break;
-1002       }
-1003     case '':
-1004       {
-1005         exports.copyOp(attOp, opOut);
-1006         attOp.opcode = '';
-1007         break;
-1008       }
-1009     }
-1010   }
-1011 };
-1012 
-1013 exports.applyToAttribution = function (cs, astr, pool) {
-1014   var unpacked = exports.unpack(cs);
-1015 
-1016   return exports.applyZip(astr, 0, unpacked.ops, 0, function (op1, op2, opOut) {
-1017     return exports._slicerZipperFunc(op1, op2, opOut, pool);
-1018   });
-1019 };
-1020 
-1021 /*exports.oneInsertedLineAtATimeOpIterator = function(opsStr, optStartIndex, charBank) {
-1022   var iter = exports.opIterator(opsStr, optStartIndex);
-1023   var bankIndex = 0;
-1024 
-1025 };*/
-1026 
-1027 exports.mutateAttributionLines = function (cs, lines, pool) {
-1028   //dmesg(cs);
-1029   //dmesg(lines.toSource()+" ->");
-1030   var unpacked = exports.unpack(cs);
-1031   var csIter = exports.opIterator(unpacked.ops);
-1032   var csBank = unpacked.charBank;
-1033   var csBankIndex = 0;
-1034   // treat the attribution lines as text lines, mutating a line at a time
-1035   var mut = exports.textLinesMutator(lines);
-1036 
-1037   var lineIter = null;
-1038 
-1039   function isNextMutOp() {
-1040     return (lineIter && lineIter.hasNext()) || mut.hasMore();
-1041   }
-1042 
-1043   function nextMutOp(destOp) {
-1044     if ((!(lineIter && lineIter.hasNext())) && mut.hasMore()) {
-1045       var line = mut.removeLines(1);
-1046       lineIter = exports.opIterator(line);
-1047     }
-1048     if (lineIter && lineIter.hasNext()) {
-1049       lineIter.next(destOp);
-1050     } else {
-1051       destOp.opcode = '';
-1052     }
-1053   }
-1054   var lineAssem = null;
-1055 
-1056   function outputMutOp(op) {
-1057     //print("outputMutOp: "+op.toSource());
-1058     if (!lineAssem) {
-1059       lineAssem = exports.mergingOpAssembler();
-1060     }
-1061     lineAssem.append(op);
-1062     if (op.lines > 0) {
-1063       exports.assert(op.lines == 1, "Can't have op.lines of ", op.lines, " in attribution lines");
-1064       // ship it to the mut
-1065       mut.insert(lineAssem.toString(), 1);
-1066       lineAssem = null;
-1067     }
-1068   }
-1069 
-1070   var csOp = exports.newOp();
-1071   var attOp = exports.newOp();
-1072   var opOut = exports.newOp();
-1073   while (csOp.opcode || csIter.hasNext() || attOp.opcode || isNextMutOp()) {
-1074     if ((!csOp.opcode) && csIter.hasNext()) {
-1075       csIter.next(csOp);
-1076     }
-1077     //print(csOp.toSource()+" "+attOp.toSource()+" "+opOut.toSource());
-1078     //print(csOp.opcode+"/"+csOp.lines+"/"+csOp.attribs+"/"+lineAssem+"/"+lineIter+"/"+(lineIter?lineIter.hasNext():null));
-1079     //print("csOp: "+csOp.toSource());
-1080     if ((!csOp.opcode) && (!attOp.opcode) && (!lineAssem) && (!(lineIter && lineIter.hasNext()))) {
-1081       break; // done
-1082     } else if (csOp.opcode == '=' && csOp.lines > 0 && (!csOp.attribs) && (!attOp.opcode) && (!lineAssem) && (!(lineIter && lineIter.hasNext()))) {
-1083       // skip multiple lines; this is what makes small changes not order of the document size
-1084       mut.skipLines(csOp.lines);
-1085       //print("skipped: "+csOp.lines);
-1086       csOp.opcode = '';
-1087     } else if (csOp.opcode == '+') {
-1088       if (csOp.lines > 1) {
-1089         var firstLineLen = csBank.indexOf('\n', csBankIndex) + 1 - csBankIndex;
-1090         exports.copyOp(csOp, opOut);
-1091         csOp.chars -= firstLineLen;
-1092         csOp.lines--;
-1093         opOut.lines = 1;
-1094         opOut.chars = firstLineLen;
-1095       } else {
-1096         exports.copyOp(csOp, opOut);
-1097         csOp.opcode = '';
-1098       }
-1099       outputMutOp(opOut);
-1100       csBankIndex += opOut.chars;
-1101       opOut.opcode = '';
-1102     } else {
-1103       if ((!attOp.opcode) && isNextMutOp()) {
-1104         nextMutOp(attOp);
-1105       }
-1106       //print("attOp: "+attOp.toSource());
-1107       exports._slicerZipperFunc(attOp, csOp, opOut, pool);
-1108       if (opOut.opcode) {
-1109         outputMutOp(opOut);
-1110         opOut.opcode = '';
-1111       }
-1112     }
-1113   }
-1114 
-1115   exports.assert(!lineAssem, "line assembler not finished");
-1116   mut.close();
-1117 
-1118   //dmesg("-> "+lines.toSource());
-1119 };
-1120 
-1121 exports.joinAttributionLines = function (theAlines) {
-1122   var assem = exports.mergingOpAssembler();
-1123   for (var i = 0; i < theAlines.length; i++) {
-1124     var aline = theAlines[i];
-1125     var iter = exports.opIterator(aline);
-1126     while (iter.hasNext()) {
-1127       assem.append(iter.next());
-1128     }
-1129   }
-1130   return assem.toString();
-1131 };
-1132 
-1133 exports.splitAttributionLines = function (attrOps, text) {
-1134   var iter = exports.opIterator(attrOps);
-1135   var assem = exports.mergingOpAssembler();
-1136   var lines = [];
-1137   var pos = 0;
-1138 
-1139   function appendOp(op) {
-1140     assem.append(op);
-1141     if (op.lines > 0) {
-1142       lines.push(assem.toString());
-1143       assem.clear();
-1144     }
-1145     pos += op.chars;
-1146   }
-1147 
-1148   while (iter.hasNext()) {
-1149     var op = iter.next();
-1150     var numChars = op.chars;
-1151     var numLines = op.lines;
-1152     while (numLines > 1) {
-1153       var newlineEnd = text.indexOf('\n', pos) + 1;
-1154       exports.assert(newlineEnd > 0, "newlineEnd <= 0 in splitAttributionLines");
-1155       op.chars = newlineEnd - pos;
-1156       op.lines = 1;
-1157       appendOp(op);
-1158       numChars -= op.chars;
-1159       numLines -= op.lines;
-1160     }
-1161     if (numLines == 1) {
-1162       op.chars = numChars;
-1163       op.lines = 1;
-1164     }
-1165     appendOp(op);
-1166   }
-1167 
-1168   return lines;
-1169 };
-1170 
-1171 exports.splitTextLines = function (text) {
-1172   return text.match(/[^\n]*(?:\n|[^\n]$)/g);
-1173 };
-1174 
-1175 exports.compose = function (cs1, cs2, pool) {
-1176   var unpacked1 = exports.unpack(cs1);
-1177   var unpacked2 = exports.unpack(cs2);
-1178   var len1 = unpacked1.oldLen;
-1179   var len2 = unpacked1.newLen;
-1180   exports.assert(len2 == unpacked2.oldLen, "mismatched composition");
-1181   var len3 = unpacked2.newLen;
-1182   var bankIter1 = exports.stringIterator(unpacked1.charBank);
-1183   var bankIter2 = exports.stringIterator(unpacked2.charBank);
-1184   var bankAssem = exports.stringAssembler();
-1185 
-1186   var newOps = exports.applyZip(unpacked1.ops, 0, unpacked2.ops, 0, function (op1, op2, opOut) {
-1187     //var debugBuilder = exports.stringAssembler();
-1188     //debugBuilder.append(exports.opString(op1));
-1189     //debugBuilder.append(',');
-1190     //debugBuilder.append(exports.opString(op2));
-1191     //debugBuilder.append(' / ');
-1192     var op1code = op1.opcode;
-1193     var op2code = op2.opcode;
-1194     if (op1code == '+' && op2code == '-') {
-1195       bankIter1.skip(Math.min(op1.chars, op2.chars));
-1196     }
-1197     exports._slicerZipperFunc(op1, op2, opOut, pool);
-1198     if (opOut.opcode == '+') {
-1199       if (op2code == '+') {
-1200         bankAssem.append(bankIter2.take(opOut.chars));
-1201       } else {
-1202         bankAssem.append(bankIter1.take(opOut.chars));
-1203       }
-1204     }
-1205 
-1206     //debugBuilder.append(exports.opString(op1));
-1207     //debugBuilder.append(',');
-1208     //debugBuilder.append(exports.opString(op2));
-1209     //debugBuilder.append(' -> ');
-1210     //debugBuilder.append(exports.opString(opOut));
-1211     //print(debugBuilder.toString());
-1212   });
-1213 
-1214   return exports.pack(len1, len3, newOps, bankAssem.toString());
-1215 };
-1216 
-1217 exports.attributeTester = function (attribPair, pool) {
-1218   // returns a function that tests if a string of attributes
-1219   // (e.g. *3*4) contains a given attribute key,value that
-1220   // is already present in the pool.
-1221   if (!pool) {
-1222     return never;
-1223   }
-1224   var attribNum = pool.putAttrib(attribPair, true);
-1225   if (attribNum < 0) {
-1226     return never;
-1227   } else {
-1228     var re = new RegExp('\\*' + exports.numToString(attribNum) + '(?!\\w)');
-1229     return function (attribs) {
-1230       return re.test(attribs);
-1231     };
-1232   }
-1233 
-1234   function never(attribs) {
-1235     return false;
-1236   }
-1237 };
-1238 
-1239 exports.identity = function (N) {
-1240   return exports.pack(N, N, "", "");
-1241 };
-1242 
-1243 exports.makeSplice = function (oldFullText, spliceStart, numRemoved, newText, optNewTextAPairs, pool) {
-1244   var oldLen = oldFullText.length;
-1245 
-1246   if (spliceStart >= oldLen) {
-1247     spliceStart = oldLen - 1;
-1248   }
-1249   if (numRemoved > oldFullText.length - spliceStart - 1) {
-1250     numRemoved = oldFullText.length - spliceStart - 1;
-1251   }
-1252   var oldText = oldFullText.substring(spliceStart, spliceStart + numRemoved);
-1253   var newLen = oldLen + newText.length - oldText.length;
-1254 
-1255   var assem = exports.smartOpAssembler();
-1256   assem.appendOpWithText('=', oldFullText.substring(0, spliceStart));
-1257   assem.appendOpWithText('-', oldText);
-1258   assem.appendOpWithText('+', newText, optNewTextAPairs, pool);
-1259   assem.endDocument();
-1260   return exports.pack(oldLen, newLen, assem.toString(), newText);
-1261 };
-1262 
-1263 exports.toSplices = function (cs) {
-1264   // get a list of splices, [startChar, endChar, newText]
-1265   var unpacked = exports.unpack(cs);
-1266   var splices = [];
-1267 
-1268   var oldPos = 0;
-1269   var iter = exports.opIterator(unpacked.ops);
-1270   var charIter = exports.stringIterator(unpacked.charBank);
-1271   var inSplice = false;
-1272   while (iter.hasNext()) {
-1273     var op = iter.next();
-1274     if (op.opcode == '=') {
-1275       oldPos += op.chars;
-1276       inSplice = false;
-1277     } else {
-1278       if (!inSplice) {
-1279         splices.push([oldPos, oldPos, ""]);
-1280         inSplice = true;
-1281       }
-1282       if (op.opcode == '-') {
-1283         oldPos += op.chars;
-1284         splices[splices.length - 1][1] += op.chars;
-1285       } else if (op.opcode == '+') {
-1286         splices[splices.length - 1][2] += charIter.take(op.chars);
-1287       }
-1288     }
-1289   }
-1290 
-1291   return splices;
-1292 };
-1293 
-1294 exports.characterRangeFollow = function (cs, startChar, endChar, insertionsAfter) {
-1295   var newStartChar = startChar;
-1296   var newEndChar = endChar;
-1297   var splices = exports.toSplices(cs);
-1298   var lengthChangeSoFar = 0;
-1299   for (var i = 0; i < splices.length; i++) {
-1300     var splice = splices[i];
-1301     var spliceStart = splice[0] + lengthChangeSoFar;
-1302     var spliceEnd = splice[1] + lengthChangeSoFar;
-1303     var newTextLength = splice[2].length;
-1304     var thisLengthChange = newTextLength - (spliceEnd - spliceStart);
-1305 
-1306     if (spliceStart <= newStartChar && spliceEnd >= newEndChar) {
-1307       // splice fully replaces/deletes range
-1308       // (also case that handles insertion at a collapsed selection)
-1309       if (insertionsAfter) {
-1310         newStartChar = newEndChar = spliceStart;
-1311       } else {
-1312         newStartChar = newEndChar = spliceStart + newTextLength;
-1313       }
-1314     } else if (spliceEnd <= newStartChar) {
-1315       // splice is before range
-1316       newStartChar += thisLengthChange;
-1317       newEndChar += thisLengthChange;
-1318     } else if (spliceStart >= newEndChar) {
-1319       // splice is after range
-1320     } else if (spliceStart >= newStartChar && spliceEnd <= newEndChar) {
-1321       // splice is inside range
-1322       newEndChar += thisLengthChange;
-1323     } else if (spliceEnd < newEndChar) {
-1324       // splice overlaps beginning of range
-1325       newStartChar = spliceStart + newTextLength;
-1326       newEndChar += thisLengthChange;
-1327     } else {
-1328       // splice overlaps end of range
-1329       newEndChar = spliceStart;
-1330     }
-1331 
-1332     lengthChangeSoFar += thisLengthChange;
-1333   }
-1334 
-1335   return [newStartChar, newEndChar];
-1336 };
-1337 
-1338 exports.moveOpsToNewPool = function (cs, oldPool, newPool) {
-1339   // works on exports or attribution string
-1340   var dollarPos = cs.indexOf('$');
-1341   if (dollarPos < 0) {
-1342     dollarPos = cs.length;
-1343   }
-1344   var upToDollar = cs.substring(0, dollarPos);
-1345   var fromDollar = cs.substring(dollarPos);
-1346   // order of attribs stays the same
-1347   return upToDollar.replace(/\*([0-9a-z]+)/g, function (_, a) {
-1348     var oldNum = exports.parseNum(a);
-1349     var pair = oldPool.getAttrib(oldNum);
-1350     var newNum = newPool.putAttrib(pair);
-1351     return '*' + exports.numToString(newNum);
-1352   }) + fromDollar;
-1353 };
-1354 
-1355 exports.makeAttribution = function (text) {
-1356   var assem = exports.smartOpAssembler();
-1357   assem.appendOpWithText('+', text);
-1358   return assem.toString();
-1359 };
-1360 
-1361 // callable on a exports, attribution string, or attribs property of an op
-1362 exports.eachAttribNumber = function (cs, func) {
-1363   var dollarPos = cs.indexOf('$');
-1364   if (dollarPos < 0) {
-1365     dollarPos = cs.length;
-1366   }
-1367   var upToDollar = cs.substring(0, dollarPos);
-1368 
-1369   upToDollar.replace(/\*([0-9a-z]+)/g, function (_, a) {
-1370     func(exports.parseNum(a));
-1371     return '';
-1372   });
-1373 };
-1374 
-1375 // callable on a exports, attribution string, or attribs property of an op,
-1376 // though it may easily create adjacent ops that can be merged.
-1377 exports.filterAttribNumbers = function (cs, filter) {
-1378   return exports.mapAttribNumbers(cs, filter);
-1379 };
-1380 
-1381 exports.mapAttribNumbers = function (cs, func) {
-1382   var dollarPos = cs.indexOf('$');
-1383   if (dollarPos < 0) {
-1384     dollarPos = cs.length;
-1385   }
-1386   var upToDollar = cs.substring(0, dollarPos);
-1387 
-1388   var newUpToDollar = upToDollar.replace(/\*([0-9a-z]+)/g, function (s, a) {
-1389     var n = func(exports.parseNum(a));
-1390     if (n === true) {
-1391       return s;
-1392     } else if ((typeof n) === "number") {
-1393       return '*' + exports.numToString(n);
-1394     } else {
-1395       return '';
-1396     }
-1397   });
-1398 
-1399   return newUpToDollar + cs.substring(dollarPos);
-1400 };
-1401 
-1402 exports.makeAText = function (text, attribs) {
-1403   return {
-1404     text: text,
-1405     attribs: (attribs || exports.makeAttribution(text))
-1406   };
-1407 };
-1408 
-1409 exports.applyToAText = function (cs, atext, pool) {
-1410   return {
-1411     text: exports.applyToText(cs, atext.text),
-1412     attribs: exports.applyToAttribution(cs, atext.attribs, pool)
-1413   };
-1414 };
-1415 
-1416 exports.cloneAText = function (atext) {
-1417   return {
-1418     text: atext.text,
-1419     attribs: atext.attribs
-1420   };
-1421 };
-1422 
-1423 exports.copyAText = function (atext1, atext2) {
-1424   atext2.text = atext1.text;
-1425   atext2.attribs = atext1.attribs;
-1426 };
-1427 
-1428 exports.appendATextToAssembler = function (atext, assem) {
-1429   // intentionally skips last newline char of atext
-1430   var iter = exports.opIterator(atext.attribs);
-1431   var op = exports.newOp();
-1432   while (iter.hasNext()) {
-1433     iter.next(op);
-1434     if (!iter.hasNext()) {
-1435       // last op, exclude final newline
-1436       if (op.lines <= 1) {
-1437         op.lines = 0;
-1438         op.chars--;
-1439         if (op.chars) {
-1440           assem.append(op);
-1441         }
-1442       } else {
-1443         var nextToLastNewlineEnd =
-1444         atext.text.lastIndexOf('\n', atext.text.length - 2) + 1;
-1445         var lastLineLength = atext.text.length - nextToLastNewlineEnd - 1;
-1446         op.lines--;
-1447         op.chars -= (lastLineLength + 1);
-1448         assem.append(op);
-1449         op.lines = 0;
-1450         op.chars = lastLineLength;
-1451         if (op.chars) {
-1452           assem.append(op);
-1453         }
-1454       }
-1455     } else {
-1456       assem.append(op);
-1457     }
-1458   }
-1459 };
-1460 
-1461 exports.prepareForWire = function (cs, pool) {
-1462   var newPool = AttributePoolFactory.createAttributePool();;
-1463   var newCs = exports.moveOpsToNewPool(cs, pool, newPool);
-1464   return {
-1465     translated: newCs,
-1466     pool: newPool
-1467   };
-1468 };
-1469 
-1470 exports.isIdentity = function (cs) {
-1471   var unpacked = exports.unpack(cs);
-1472   return unpacked.ops == "" && unpacked.oldLen == unpacked.newLen;
-1473 };
-1474 
-1475 exports.opAttributeValue = function (op, key, pool) {
-1476   return exports.attribsAttributeValue(op.attribs, key, pool);
-1477 };
-1478 
-1479 exports.attribsAttributeValue = function (attribs, key, pool) {
-1480   var value = '';
-1481   if (attribs) {
-1482     exports.eachAttribNumber(attribs, function (n) {
-1483       if (pool.getAttribKey(n) == key) {
-1484         value = pool.getAttribValue(n);
-1485       }
-1486     });
-1487   }
-1488   return value;
-1489 };
-1490 
-1491 exports.builder = function (oldLen) {
-1492   var assem = exports.smartOpAssembler();
-1493   var o = exports.newOp();
-1494   var charBank = exports.stringAssembler();
-1495 
-1496   var self = {
-1497     // attribs are [[key1,value1],[key2,value2],...] or '*0*1...' (no pool needed in latter case)
-1498     keep: function (N, L, attribs, pool) {
-1499       o.opcode = '=';
-1500       o.attribs = (attribs && exports.makeAttribsString('=', attribs, pool)) || '';
-1501       o.chars = N;
-1502       o.lines = (L || 0);
-1503       assem.append(o);
-1504       return self;
-1505     },
-1506     keepText: function (text, attribs, pool) {
-1507       assem.appendOpWithText('=', text, attribs, pool);
-1508       return self;
-1509     },
-1510     insert: function (text, attribs, pool) {
-1511       assem.appendOpWithText('+', text, attribs, pool);
-1512       charBank.append(text);
-1513       return self;
-1514     },
-1515     remove: function (N, L) {
-1516       o.opcode = '-';
-1517       o.attribs = '';
-1518       o.chars = N;
-1519       o.lines = (L || 0);
-1520       assem.append(o);
-1521       return self;
-1522     },
-1523     toString: function () {
-1524       assem.endDocument();
-1525       var newLen = oldLen + assem.getLengthChange();
-1526       return exports.pack(oldLen, newLen, assem.toString(), charBank.toString());
-1527     }
-1528   };
-1529 
-1530   return self;
-1531 };
-1532 
-1533 exports.makeAttribsString = function (opcode, attribs, pool) {
-1534   // makeAttribsString(opcode, '*3') or makeAttribsString(opcode, [['foo','bar']], myPool) work
-1535   if (!attribs) {
-1536     return '';
-1537   } else if ((typeof attribs) == "string") {
-1538     return attribs;
-1539   } else if (pool && attribs && attribs.length) {
-1540     if (attribs.length > 1) {
-1541       attribs = attribs.slice();
-1542       attribs.sort();
-1543     }
-1544     var result = [];
-1545     for (var i = 0; i < attribs.length; i++) {
-1546       var pair = attribs[i];
-1547       if (opcode == '=' || (opcode == '+' && pair[1])) {
-1548         result.push('*' + exports.numToString(pool.putAttrib(pair)));
-1549       }
-1550     }
-1551     return result.join('');
-1552   }
-1553 };
-1554 
-1555 // like "substring" but on a single-line attribution string
-1556 exports.subattribution = function (astr, start, optEnd) {
-1557   var iter = exports.opIterator(astr, 0);
-1558   var assem = exports.smartOpAssembler();
-1559   var attOp = exports.newOp();
-1560   var csOp = exports.newOp();
-1561   var opOut = exports.newOp();
-1562 
-1563   function doCsOp() {
-1564     if (csOp.chars) {
-1565       while (csOp.opcode && (attOp.opcode || iter.hasNext())) {
-1566         if (!attOp.opcode) iter.next(attOp);
-1567 
-1568         if (csOp.opcode && attOp.opcode && csOp.chars >= attOp.chars && attOp.lines > 0 && csOp.lines <= 0) {
-1569           csOp.lines++;
-1570         }
-1571 
-1572         exports._slicerZipperFunc(attOp, csOp, opOut, null);
-1573         if (opOut.opcode) {
-1574           assem.append(opOut);
-1575           opOut.opcode = '';
-1576         }
-1577       }
-1578     }
-1579   }
-1580 
-1581   csOp.opcode = '-';
-1582   csOp.chars = start;
-1583 
-1584   doCsOp();
-1585 
-1586   if (optEnd === undefined) {
-1587     if (attOp.opcode) {
-1588       assem.append(attOp);
-1589     }
-1590     while (iter.hasNext()) {
-1591       iter.next(attOp);
-1592       assem.append(attOp);
-1593     }
-1594   } else {
-1595     csOp.opcode = '=';
-1596     csOp.chars = optEnd - start;
-1597     doCsOp();
-1598   }
-1599 
-1600   return assem.toString();
-1601 };
-1602 
-1603 exports.inverse = function (cs, lines, alines, pool) {
-1604   // lines and alines are what the exports is meant to apply to.
-1605   // They may be arrays or objects with .get(i) and .length methods.
-1606   // They include final newlines on lines.
-1607 
-1608   function lines_get(idx) {
-1609     if (lines.get) {
-1610       return lines.get(idx);
-1611     } else {
-1612       return lines[idx];
-1613     }
-1614   }
-1615 
-1616   function lines_length() {
-1617     if ((typeof lines.length) == "number") {
-1618       return lines.length;
-1619     } else {
-1620       return lines.length();
-1621     }
-1622   }
-1623 
-1624   function alines_get(idx) {
-1625     if (alines.get) {
-1626       return alines.get(idx);
-1627     } else {
-1628       return alines[idx];
-1629     }
-1630   }
-1631 
-1632   function alines_length() {
-1633     if ((typeof alines.length) == "number") {
-1634       return alines.length;
-1635     } else {
-1636       return alines.length();
-1637     }
-1638   }
-1639 
-1640   var curLine = 0;
-1641   var curChar = 0;
-1642   var curLineOpIter = null;
-1643   var curLineOpIterLine;
-1644   var curLineNextOp = exports.newOp('+');
-1645 
-1646   var unpacked = exports.unpack(cs);
-1647   var csIter = exports.opIterator(unpacked.ops);
-1648   var builder = exports.builder(unpacked.newLen);
-1649 
-1650   function consumeAttribRuns(numChars, func /*(len, attribs, endsLine)*/ ) {
-1651 
-1652     if ((!curLineOpIter) || (curLineOpIterLine != curLine)) {
-1653       // create curLineOpIter and advance it to curChar
-1654       curLineOpIter = exports.opIterator(alines_get(curLine));
-1655       curLineOpIterLine = curLine;
-1656       var indexIntoLine = 0;
-1657       var done = false;
-1658       while (!done) {
-1659         curLineOpIter.next(curLineNextOp);
-1660         if (indexIntoLine + curLineNextOp.chars >= curChar) {
-1661           curLineNextOp.chars -= (curChar - indexIntoLine);
-1662           done = true;
-1663         } else {
-1664           indexIntoLine += curLineNextOp.chars;
-1665         }
-1666       }
-1667     }
-1668 
-1669     while (numChars > 0) {
-1670       if ((!curLineNextOp.chars) && (!curLineOpIter.hasNext())) {
-1671         curLine++;
-1672         curChar = 0;
-1673         curLineOpIterLine = curLine;
-1674         curLineNextOp.chars = 0;
-1675         curLineOpIter = exports.opIterator(alines_get(curLine));
-1676       }
-1677       if (!curLineNextOp.chars) {
-1678         curLineOpIter.next(curLineNextOp);
-1679       }
-1680       var charsToUse = Math.min(numChars, curLineNextOp.chars);
-1681       func(charsToUse, curLineNextOp.attribs, charsToUse == curLineNextOp.chars && curLineNextOp.lines > 0);
-1682       numChars -= charsToUse;
-1683       curLineNextOp.chars -= charsToUse;
-1684       curChar += charsToUse;
-1685     }
-1686 
-1687     if ((!curLineNextOp.chars) && (!curLineOpIter.hasNext())) {
-1688       curLine++;
-1689       curChar = 0;
-1690     }
-1691   }
-1692 
-1693   function skip(N, L) {
-1694     if (L) {
-1695       curLine += L;
-1696       curChar = 0;
-1697     } else {
-1698       if (curLineOpIter && curLineOpIterLine == curLine) {
-1699         consumeAttribRuns(N, function () {});
-1700       } else {
-1701         curChar += N;
-1702       }
-1703     }
-1704   }
-1705 
-1706   function nextText(numChars) {
-1707     var len = 0;
-1708     var assem = exports.stringAssembler();
-1709     var firstString = lines_get(curLine).substring(curChar);
-1710     len += firstString.length;
-1711     assem.append(firstString);
-1712 
-1713     var lineNum = curLine + 1;
-1714     while (len < numChars) {
-1715       var nextString = lines_get(lineNum);
-1716       len += nextString.length;
-1717       assem.append(nextString);
-1718       lineNum++;
-1719     }
-1720 
-1721     return assem.toString().substring(0, numChars);
-1722   }
-1723 
-1724   function cachedStrFunc(func) {
-1725     var cache = {};
-1726     return function (s) {
-1727       if (!cache[s]) {
-1728         cache[s] = func(s);
-1729       }
-1730       return cache[s];
-1731     };
-1732   }
-1733 
-1734   var attribKeys = [];
-1735   var attribValues = [];
-1736   while (csIter.hasNext()) {
-1737     var csOp = csIter.next();
-1738     if (csOp.opcode == '=') {
-1739       if (csOp.attribs) {
-1740         attribKeys.length = 0;
-1741         attribValues.length = 0;
-1742         exports.eachAttribNumber(csOp.attribs, function (n) {
-1743           attribKeys.push(pool.getAttribKey(n));
-1744           attribValues.push(pool.getAttribValue(n));
-1745         });
-1746         var undoBackToAttribs = cachedStrFunc(function (attribs) {
-1747           var backAttribs = [];
-1748           for (var i = 0; i < attribKeys.length; i++) {
-1749             var appliedKey = attribKeys[i];
-1750             var appliedValue = attribValues[i];
-1751             var oldValue = exports.attribsAttributeValue(attribs, appliedKey, pool);
-1752             if (appliedValue != oldValue) {
-1753               backAttribs.push([appliedKey, oldValue]);
-1754             }
-1755           }
-1756           return exports.makeAttribsString('=', backAttribs, pool);
-1757         });
-1758         consumeAttribRuns(csOp.chars, function (len, attribs, endsLine) {
-1759           builder.keep(len, endsLine ? 1 : 0, undoBackToAttribs(attribs));
-1760         });
-1761       } else {
-1762         skip(csOp.chars, csOp.lines);
-1763         builder.keep(csOp.chars, csOp.lines);
-1764       }
-1765     } else if (csOp.opcode == '+') {
-1766       builder.remove(csOp.chars, csOp.lines);
-1767     } else if (csOp.opcode == '-') {
-1768       var textBank = nextText(csOp.chars);
-1769       var textBankIndex = 0;
-1770       consumeAttribRuns(csOp.chars, function (len, attribs, endsLine) {
-1771         builder.insert(textBank.substr(textBankIndex, len), attribs);
-1772         textBankIndex += len;
-1773       });
-1774     }
-1775   }
-1776 
-1777   return exports.checkRep(builder.toString());
-1778 };
-1779 
-1780 // %CLIENT FILE ENDS HERE%
-1781 exports.follow = function (cs1, cs2, reverseInsertOrder, pool) {
-1782   var unpacked1 = exports.unpack(cs1);
-1783   var unpacked2 = exports.unpack(cs2);
-1784   var len1 = unpacked1.oldLen;
-1785   var len2 = unpacked2.oldLen;
-1786   exports.assert(len1 == len2, "mismatched follow");
-1787   var chars1 = exports.stringIterator(unpacked1.charBank);
-1788   var chars2 = exports.stringIterator(unpacked2.charBank);
-1789 
-1790   var oldLen = unpacked1.newLen;
-1791   var oldPos = 0;
-1792   var newLen = 0;
-1793 
-1794   var hasInsertFirst = exports.attributeTester(['insertorder', 'first'], pool);
-1795 
-1796   var newOps = exports.applyZip(unpacked1.ops, 0, unpacked2.ops, 0, function (op1, op2, opOut) {
-1797     if (op1.opcode == '+' || op2.opcode == '+') {
-1798       var whichToDo;
-1799       if (op2.opcode != '+') {
-1800         whichToDo = 1;
-1801       } else if (op1.opcode != '+') {
-1802         whichToDo = 2;
-1803       } else {
-1804         // both +
-1805         var firstChar1 = chars1.peek(1);
-1806         var firstChar2 = chars2.peek(1);
-1807         var insertFirst1 = hasInsertFirst(op1.attribs);
-1808         var insertFirst2 = hasInsertFirst(op2.attribs);
-1809         if (insertFirst1 && !insertFirst2) {
-1810           whichToDo = 1;
-1811         } else if (insertFirst2 && !insertFirst1) {
-1812           whichToDo = 2;
-1813         }
-1814         // insert string that doesn't start with a newline first so as not to break up lines
-1815         else if (firstChar1 == '\n' && firstChar2 != '\n') {
-1816           whichToDo = 2;
-1817         } else if (firstChar1 != '\n' && firstChar2 == '\n') {
-1818           whichToDo = 1;
-1819         }
-1820         // break symmetry:
-1821         else if (reverseInsertOrder) {
-1822           whichToDo = 2;
-1823         } else {
-1824           whichToDo = 1;
-1825         }
-1826       }
-1827       if (whichToDo == 1) {
-1828         chars1.skip(op1.chars);
-1829         opOut.opcode = '=';
-1830         opOut.lines = op1.lines;
-1831         opOut.chars = op1.chars;
-1832         opOut.attribs = '';
-1833         op1.opcode = '';
-1834       } else {
-1835         // whichToDo == 2
-1836         chars2.skip(op2.chars);
-1837         exports.copyOp(op2, opOut);
-1838         op2.opcode = '';
-1839       }
-1840     } else if (op1.opcode == '-') {
-1841       if (!op2.opcode) {
-1842         op1.opcode = '';
-1843       } else {
-1844         if (op1.chars <= op2.chars) {
-1845           op2.chars -= op1.chars;
-1846           op2.lines -= op1.lines;
-1847           op1.opcode = '';
-1848           if (!op2.chars) {
-1849             op2.opcode = '';
-1850           }
-1851         } else {
-1852           op1.chars -= op2.chars;
-1853           op1.lines -= op2.lines;
-1854           op2.opcode = '';
-1855         }
-1856       }
-1857     } else if (op2.opcode == '-') {
-1858       exports.copyOp(op2, opOut);
-1859       if (!op1.opcode) {
-1860         op2.opcode = '';
-1861       } else if (op2.chars <= op1.chars) {
-1862         // delete part or all of a keep
-1863         op1.chars -= op2.chars;
-1864         op1.lines -= op2.lines;
-1865         op2.opcode = '';
-1866         if (!op1.chars) {
-1867           op1.opcode = '';
-1868         }
-1869       } else {
-1870         // delete all of a keep, and keep going
-1871         opOut.lines = op1.lines;
-1872         opOut.chars = op1.chars;
-1873         op2.lines -= op1.lines;
-1874         op2.chars -= op1.chars;
-1875         op1.opcode = '';
-1876       }
-1877     } else if (!op1.opcode) {
-1878       exports.copyOp(op2, opOut);
-1879       op2.opcode = '';
-1880     } else if (!op2.opcode) {
-1881       exports.copyOp(op1, opOut);
-1882       op1.opcode = '';
-1883     } else {
-1884       // both keeps
-1885       opOut.opcode = '=';
-1886       opOut.attribs = exports.followAttributes(op1.attribs, op2.attribs, pool);
-1887       if (op1.chars <= op2.chars) {
-1888         opOut.chars = op1.chars;
-1889         opOut.lines = op1.lines;
-1890         op2.chars -= op1.chars;
-1891         op2.lines -= op1.lines;
-1892         op1.opcode = '';
-1893         if (!op2.chars) {
-1894           op2.opcode = '';
-1895         }
-1896       } else {
-1897         opOut.chars = op2.chars;
-1898         opOut.lines = op2.lines;
-1899         op1.chars -= op2.chars;
-1900         op1.lines -= op2.lines;
-1901         op2.opcode = '';
-1902       }
-1903     }
-1904     switch (opOut.opcode) {
-1905     case '=':
-1906       oldPos += opOut.chars;
-1907       newLen += opOut.chars;
-1908       break;
-1909     case '-':
-1910       oldPos += opOut.chars;
-1911       break;
-1912     case '+':
-1913       newLen += opOut.chars;
-1914       break;
-1915     }
-1916   });
-1917   newLen += oldLen - oldPos;
-1918 
-1919   return exports.pack(oldLen, newLen, newOps, unpacked2.charBank);
-1920 };
-1921 
-1922 exports.followAttributes = function (att1, att2, pool) {
-1923   // The merge of two sets of attribute changes to the same text
-1924   // takes the lexically-earlier value if there are two values
-1925   // for the same key.  Otherwise, all key/value changes from
-1926   // both attribute sets are taken.  This operation is the "follow",
-1927   // so a set of changes is produced that can be applied to att1
-1928   // to produce the merged set.
-1929   if ((!att2) || (!pool)) return '';
-1930   if (!att1) return att2;
-1931   var atts = [];
-1932   att2.replace(/\*([0-9a-z]+)/g, function (_, a) {
-1933     atts.push(pool.getAttrib(exports.parseNum(a)));
-1934     return '';
-1935   });
-1936   att1.replace(/\*([0-9a-z]+)/g, function (_, a) {
-1937     var pair1 = pool.getAttrib(exports.parseNum(a));
-1938     for (var i = 0; i < atts.length; i++) {
-1939       var pair2 = atts[i];
-1940       if (pair1[0] == pair2[0]) {
-1941         if (pair1[1] <= pair2[1]) {
-1942           // winner of merge is pair1, delete this attribute
-1943           atts.splice(i, 1);
-1944         }
-1945         break;
-1946       }
-1947     }
-1948     return '';
-1949   });
-1950   // we've only removed attributes, so they're already sorted
-1951   var buf = exports.stringAssembler();
-1952   for (var i = 0; i < atts.length; i++) {
-1953     buf.append('*');
-1954     buf.append(exports.numToString(pool.putAttrib(atts[i])));
-1955   }
-1956   return buf.toString();
-1957 };
-1958 
\ No newline at end of file diff --git a/doc/jsdoc/symbols/src/node_MessageHandler.js.html b/doc/jsdoc/symbols/src/node_MessageHandler.js.html deleted file mode 100644 index aba4471d0..000000000 --- a/doc/jsdoc/symbols/src/node_MessageHandler.js.html +++ /dev/null @@ -1,508 +0,0 @@ -
  1 /**
-  2  * Copyright 2009 Google Inc., 2011 Peter 'Pita' Martischka
-  3  *
-  4  * Licensed under the Apache License, Version 2.0 (the "License");
-  5  * you may not use this file except in compliance with the License.
-  6  * You may obtain a copy of the License at
-  7  *
-  8  *      http://www.apache.org/licenses/LICENSE-2.0
-  9  *
- 10  * Unless required by applicable law or agreed to in writing, software
- 11  * distributed under the License is distributed on an "AS-IS" BASIS,
- 12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- 13  * See the License for the specific language governing permissions and
- 14  * limitations under the License.
- 15  */
- 16 
- 17 var padManager = require("./PadManager");
- 18 var Changeset = require("./Changeset");
- 19 var AttributePoolFactory = require("./AttributePoolFactory");
- 20 var authorManager = require("./AuthorManager");
- 21 
- 22 /**
- 23  * A associative array that translates a session to a pad
- 24  */
- 25 var session2pad = {};
- 26 /**
- 27  * A associative array that saves which sessions belong to a pad
- 28  */
- 29 var pad2sessions = {};
- 30 
- 31 /**
- 32  * A associative array that saves some general informations about a session
- 33  * key = sessionId
- 34  * values = author, rev
- 35  *   rev = That last revision that was send to this client
- 36  *   author = the author name of this session
- 37  */
- 38 var sessioninfos = {};
- 39 
- 40 /**
- 41  * Saves the Socket class we need to send and recieve data from the client
- 42  */
- 43 var socketio;
- 44 
- 45 /**
- 46  * This Method is called by server.js to tell the message handler on which socket it should send
- 47  * @param socket_io The Socket
- 48  */
- 49 exports.setSocketIO = function(socket_io)
- 50 {
- 51   socketio=socket_io;
- 52 }
- 53 
- 54 /**
- 55  * Handles the connection of a new user
- 56  * @param client the new client
- 57  */
- 58 exports.handleConnect = function(client)
- 59 {
- 60   //check if all ok
- 61   throwExceptionIfClientOrIOisInvalid(client);
- 62   
- 63   //Initalize session2pad and sessioninfos for this new session
- 64   session2pad[client.sessionId]=null;  
- 65   sessioninfos[client.sessionId]={};
- 66 }
- 67 
- 68 /**
- 69  * Handles the disconnection of a user
- 70  * @param client the client that leaves
- 71  */
- 72 exports.handleDisconnect = function(client)
- 73 {
- 74   //check if all ok
- 75   throwExceptionIfClientOrIOisInvalid(client);
- 76   
- 77   //save the padname of this session
- 78   var sessionPad=session2pad[client.sessionId];
- 79   
- 80   //Go trough all sessions of this pad, search and destroy the entry of this client
- 81   for(i in pad2sessions[sessionPad])
- 82   {
- 83     if(pad2sessions[sessionPad][i] == client.sessionId)
- 84     {
- 85       delete pad2sessions[sessionPad][i];  
- 86       break;
- 87     }
- 88   }
- 89   
- 90   //Delete the session2pad and sessioninfos entrys of this session
- 91   delete session2pad[client.sessionId]; 
- 92   delete sessioninfos[client.sessionId]; 
- 93 }
- 94 
- 95 /**
- 96  * Handles a message from a user
- 97  * @param client the client that send this message
- 98  * @param message the message from the client
- 99  */
-100 exports.handleMessage = function(client, message)
-101 { 
-102   //check if all ok
-103   throwExceptionIfClientOrIOisInvalid(client);
-104   
-105   if(message == null)
-106   {
-107     throw "Message is null!";
-108   }
-109   //Etherpad sometimes send JSON and sometimes a JSONstring...
-110   if(typeof message == "string")
-111   {
-112     message = JSON.parse(message);
-113   }
-114   if(!message.type)
-115   {
-116     throw "Message have no type attribute!";
-117   }
-118   
-119   //Check what type of message we get and delegate to the other methodes
-120   if(message.type == "CLIENT_READY")
-121   {
-122     handleClientReady(client, message);
-123   }
-124   else if(message.type == "COLLABROOM" && 
-125           message.data.type == "USER_CHANGES")
-126   {
-127     console.error(JSON.stringify(message));
-128     handleUserChanges(client, message);
-129   }
-130   else if(message.type == "COLLABROOM" && 
-131           message.data.type == "USERINFO_UPDATE")
-132   {
-133     console.error(JSON.stringify(message));
-134     handleUserInfoUpdate(client, message);
-135   }
-136   //if the message type is unkown, throw an exception
-137   else
-138   {
-139     console.error(message);
-140     throw "unkown Message Type: '" + message.type + "'";
-141   }
-142 }
-143 
-144 /**
-145  * Handles a USERINFO_UPDATE, that means that a user have changed his color or name. Anyway, we get both informations
-146  * @param client the client that send this message
-147  * @param message the message from the client
-148  */
-149 function handleUserInfoUpdate(client, message)
-150 {
-151   //check if all ok
-152   if(message.data.userInfo.name == null)
-153   {
-154     throw "USERINFO_UPDATE Message have no name!";
-155   }
-156   if(message.data.userInfo.colorId == null)
-157   {
-158     throw "USERINFO_UPDATE Message have no colorId!";
-159   }
-160   
-161   //Find out the author name of this session
-162   var author = sessioninfos[client.sessionId].author;
-163   
-164   //Tell the authorManager about the new attributes
-165   authorManager.setAuthorColorId(author, message.data.userInfo.colorId);
-166   authorManager.setAuthorName(author, message.data.userInfo.name);
-167 }
-168 
-169 /**
-170  * Handles a USERINFO_UPDATE, that means that a user have changed his color or name. Anyway, we get both informations
-171  * This Method is nearly 90% copied out of the Etherpad Source Code. So I can't tell you what happens here exactly
-172  * Look at https://github.com/ether/pad/blob/master/etherpad/src/etherpad/collab/collab_server.js in the function applyUserChanges()
-173  * @param client the client that send this message
-174  * @param message the message from the client
-175  */
-176 function handleUserChanges(client, message)
-177 {
-178   //check if all ok
-179   if(message.data.baseRev == null)
-180   {
-181     throw "USER_CHANGES Message have no baseRev!";
-182   }
-183   if(message.data.apool == null)
-184   {
-185     throw "USER_CHANGES Message have no apool!";
-186   }
-187   if(message.data.changeset == null)
-188   {
-189     throw "USER_CHANGES Message have no changeset!";
-190   }
-191   
-192   //get all Vars we need
-193   var baseRev = message.data.baseRev;
-194   var wireApool = (AttributePoolFactory.createAttributePool()).fromJsonable(message.data.apool);
-195   var changeset = message.data.changeset;
-196   var pad = padManager.getPad(session2pad[client.sessionId], false);
-197   
-198   //ex. _checkChangesetAndPool
-199   
-200   //Copied from Etherpad, don't know what it does exactly
-201   Changeset.checkRep(changeset);
-202   Changeset.eachAttribNumber(changeset, function(n) {
-203     if (! wireApool.getAttrib(n)) {
-204       throw "Attribute pool is missing attribute "+n+" for changeset "+changeset;
-205     }
-206   });
-207   
-208   //ex. adoptChangesetAttribs
-209   
-210   //Afaik, it copies the new attributes from the changeset, to the global Attribute Pool
-211   Changeset.moveOpsToNewPool(changeset, wireApool, pad.pool());
-212   
-213   //ex. applyUserChanges
-214   
-215   var apool = pad.pool();
-216   var r = baseRev;
-217   
-218   while (r < pad.getHeadRevisionNumber()) {
-219     r++;
-220     var c = pad.getRevisionChangeset(r);
-221     changeset = Changeset.follow(c, changeset, false, apool);
-222   }
-223   
-224   var prevText = pad.text();
-225   if (Changeset.oldLen(changeset) != prevText.length) {
-226     throw "Can't apply USER_CHANGES "+changeset+" with oldLen " 
-227     + Changeset.oldLen(changeset) + " to document of length " + prevText.length;
-228   }
-229   
-230   var thisAuthor = sessioninfos[client.sessionId].author;
-231   
-232   pad.appendRevision(changeset, thisAuthor);
-233   
-234   var correctionChangeset = _correctMarkersInPad(pad.atext(), pad.pool());
-235   if (correctionChangeset) {
-236     pad.appendRevision(correctionChangeset);
-237   }
-238   
-239   if (pad.text().lastIndexOf("\n\n") != pad.text().length-2) {
-240     var nlChangeset = Changeset.makeSplice(
-241       pad.text(), pad.text().length-1, 0, "\n");
-242     pad.appendRevision(nlChangeset);
-243   }
-244   
-245   console.error(JSON.stringify(pad.pool()));
-246   
-247   //ex. updatePadClients
-248   
-249   for(i in pad2sessions[pad.id])
-250   {
-251     var session = pad2sessions[pad.id][i];
-252     var lastRev = sessioninfos[session].rev;
-253     
-254     while (lastRev < pad.getHeadRevisionNumber()) 
-255     {
-256       var r = ++lastRev;
-257       var author = pad.getRevisionAuthor(r);
-258       
-259       if(author == sessioninfos[session].author)
-260       {
-261         socketio.clients[session].send({"type":"COLLABROOM","data":{type:"ACCEPT_COMMIT", newRev:r}});
-262       }
-263       else
-264       {
-265         var forWire = Changeset.prepareForWire(pad.getRevisionChangeset(r), pad.pool());
-266         var wireMsg = {"type":"COLLABROOM","data":{type:"NEW_CHANGES", newRev:r,
-267                    changeset: forWire.translated,
-268                    apool: forWire.pool,
-269                    author: author}};
-270         socketio.clients[session].send(wireMsg);
-271       }
-272     }
-273     
-274     sessioninfos[session].rev = pad.getHeadRevisionNumber();
-275   }
-276 }
-277 
-278 /**
-279  * Copied from the Etherpad Source Code. Don't know what this methode does excatly...
-280  */
-281 function _correctMarkersInPad(atext, apool) {
-282   var text = atext.text;
-283 
-284   // collect char positions of line markers (e.g. bullets) in new atext
-285   // that aren't at the start of a line
-286   var badMarkers = [];
-287   var iter = Changeset.opIterator(atext.attribs);
-288   var offset = 0;
-289   while (iter.hasNext()) {
-290     var op = iter.next();
-291     var listValue = Changeset.opAttributeValue(op, 'list', apool);
-292     if (listValue) {
-293       for(var i=0;i<op.chars;i++) {
-294         if (offset > 0 && text.charAt(offset-1) != '\n') {
-295           badMarkers.push(offset);
-296         }
-297         offset++;
-298       }
-299     }
-300     else {
-301       offset += op.chars;
-302     }
-303   }
-304 
-305   if (badMarkers.length == 0) {
-306     return null;
-307   }
-308 
-309   // create changeset that removes these bad markers
-310   offset = 0;
-311   var builder = Changeset.builder(text.length);
-312   badMarkers.forEach(function(pos) {
-313     builder.keepText(text.substring(offset, pos));
-314     builder.remove(1);
-315     offset = pos+1;
-316   });
-317   return builder.toString();
-318 }
-319 
-320 /**
-321  * Handles a CLIENT_READY. A CLIENT_READY is the first message from the client to the server. The Client sends his token 
-322  * and the pad it wants to enter. The Server answers with the inital values (clientVars) of the pad
-323  * @param client the client that send this message
-324  * @param message the message from the client
-325  */
-326 function handleClientReady(client, message)
-327 {
-328   //check if all ok
-329   if(!message.token)
-330   {
-331     throw "CLIENT_READY Message have no token!";
-332   }
-333   if(!message.padId)
-334   {
-335     throw "CLIENT_READY Message have no padId!";
-336   }
-337   if(!message.protocolVersion)
-338   {
-339     throw "CLIENT_READY Message have no protocolVersion!";
-340   }
-341   if(message.protocolVersion != 1)
-342   {
-343     throw "CLIENT_READY Message have a unkown protocolVersion '" + protocolVersion + "'!";
-344   }
-345 
-346   //Ask the author Manager for a authorname of this token. 
-347   var author = authorManager.getAuthor4Token(message.token);
-348   
-349   //Save in session2pad that this session belonges to this pad
-350   var sessionId=String(client.sessionId);
-351   session2pad[sessionId] = message.padId;
-352   
-353   //check if there is already a pad2sessions entry, if not, create one
-354   if(!pad2sessions[message.padId])
-355   {
-356     pad2sessions[message.padId] = [];
-357   }
-358   
-359   //Saves in pad2sessions that this session belongs to this pad
-360   pad2sessions[message.padId].push(sessionId);
-361    
-362   //Tell the PadManager that it should ensure that this Pad exist
-363   padManager.ensurePadExists(message.padId);
-364   
-365   //Ask the PadManager for a function Wrapper for this Pad
-366   var pad = padManager.getPad(message.padId, false);
-367   
-368   //prepare all values for the wire
-369   atext = pad.atext();
-370   var attribsForWire = Changeset.prepareForWire(atext.attribs, pad.pool());
-371   var apool = attribsForWire.pool.toJsonable();
-372   atext.attribs = attribsForWire.translated;
-373   
-374   var clientVars = {
-375     "accountPrivs": {
-376         "maxRevisions": 100
-377     },
-378     "initialRevisionList": [],
-379     "initialOptions": {
-380         "guestPolicy": "deny"
-381     },
-382     "collab_client_vars": {
-383         "initialAttributedText": atext,
-384         "clientIp": client.request.connection.remoteAddress,
-385         //"clientAgent": "Anonymous Agent",
-386         "padId": message.padId,
-387         "historicalAuthorData": {},
-388         "apool": apool,
-389         "rev": pad.getHeadRevisionNumber(),
-390         "globalPadId": message.padId
-391     },
-392     "colorPalette": ["#ffc7c7", "#fff1c7", "#e3ffc7", "#c7ffd5", "#c7ffff", "#c7d5ff", "#e3c7ff", "#ffc7f1", "#ff8f8f", "#ffe38f", "#c7ff8f", "#8fffab", "#8fffff", "#8fabff", "#c78fff", "#ff8fe3", "#d97979", "#d9c179", "#a9d979", "#79d991", "#79d9d9", "#7991d9", "#a979d9", "#d979c1", "#d9a9a9", "#d9cda9", "#c1d9a9", "#a9d9b5", "#a9d9d9", "#a9b5d9", "#c1a9d9", "#d9a9cd"],
-393     "clientIp": client.request.connection.remoteAddress,
-394     "userIsGuest": true,
-395     "userColor": authorManager.getAuthorColorId(author),
-396     "padId": message.padId,
-397     "initialTitle": "Pad: " + message.padId,
-398     "opts": {},
-399     "chatHistory": {
-400         "start": 0,
-401         "historicalAuthorData": {},
-402         "end": 0,
-403         "lines": []
-404     },
-405     "numConnectedUsers": pad2sessions[message.padId].length,
-406     "isProPad": false,
-407     "serverTimestamp": new Date().getTime(),
-408     "globalPadId": message.padId,
-409     "userId": author,
-410     "cookiePrefsToSet": {
-411         "fullWidth": false,
-412         "hideSidebar": false
-413     },
-414     "hooks": {}
-415   }
-416   
-417   //Add a username to the clientVars if one avaiable
-418   if(authorManager.getAuthorName(author) != null)
-419   {
-420     clientVars.userName = authorManager.getAuthorName(author);
-421   }
-422   
-423   //Add all authors that worked on this pad, to the historicalAuthorData on clientVars
-424   var allAuthors = pad.getAllAuthors();
-425   for(i in allAuthors)
-426   {
-427     clientVars.collab_client_vars.historicalAuthorData[allAuthors[i]] = {};
-428     if(authorManager.getAuthorName(author) != null)
-429       clientVars.collab_client_vars.historicalAuthorData[allAuthors[i]].name = authorManager.getAuthorName(author);
-430     clientVars.collab_client_vars.historicalAuthorData[allAuthors[i]].colorId = authorManager.getAuthorColorId(author);
-431   }
-432   
-433   //Send the clientVars to the Client
-434   client.send(clientVars);
-435   
-436   //Save the revision and the author id in sessioninfos
-437   sessioninfos[client.sessionId].rev = pad.getHeadRevisionNumber();
-438   sessioninfos[client.sessionId].author = author;
-439   
-440   //prepare the notification for the other users on the pad, that this user joined
-441   var messageToTheOtherUsers = {
-442     "type": "COLLABROOM",
-443     "data": {
-444       type: "USER_NEWINFO",
-445       userInfo: {
-446         "ip": "127.0.0.1",
-447         "colorId": authorManager.getAuthorColorId(author),
-448         "userAgent": "Anonymous",
-449         "userId": author
-450       }
-451     }
-452   };
-453   
-454   //Add the authorname of this new User, if avaiable
-455   if(authorManager.getAuthorName(author) != null)
-456   {
-457     messageToTheOtherUsers.data.userInfo.name = authorManager.getAuthorName(author);
-458   }
-459   
-460   //
-461   for(i in pad2sessions[message.padId])
-462   {
-463     if(pad2sessions[message.padId][i] != client.sessionId)
-464     {
-465       socketio.clients[pad2sessions[message.padId][i]].send(messageToTheOtherUsers);
-466     
-467       var messageToNotifyTheClientAboutTheOthers = {
-468         "type": "COLLABROOM",
-469         "data": {
-470           type: "USER_NEWINFO",
-471           userInfo: {
-472             "ip": "127.0.0.1",
-473             "colorId": authorManager.getAuthorColorId(sessioninfos[pad2sessions[message.padId][i]].author),
-474             "userAgent": "Anonymous",
-475             "userId": sessioninfos[pad2sessions[message.padId][i]].author
-476           }
-477         }
-478       };
-479       
-480       client.send(messageToNotifyTheClientAboutTheOthers);
-481     }
-482   }
-483   
-484   
-485 }
-486 
-487 /**
-488  * A internal function that simply checks if client or socketio is null and throws a exception if yes
-489  */
-490 function throwExceptionIfClientOrIOisInvalid(client)
-491 {
-492   if(client == null)
-493   {
-494     throw "Client is null!";
-495   }
-496   if(socketio == null)
-497   {
-498     throw "SocketIO is not set or null! Please use setSocketIO(io) to set it";
-499   }
-500 }
-501 
\ No newline at end of file diff --git a/doc/jsdoc/symbols/src/node_PadManager.js.html b/doc/jsdoc/symbols/src/node_PadManager.js.html deleted file mode 100644 index 3ef715785..000000000 --- a/doc/jsdoc/symbols/src/node_PadManager.js.html +++ /dev/null @@ -1,272 +0,0 @@ -
  1 /**
-  2  * 2011 Peter 'Pita' Martischka
-  3  *
-  4  * Licensed under the Apache License, Version 2.0 (the "License");
-  5  * you may not use this file except in compliance with the License.
-  6  * You may obtain a copy of the License at
-  7  *
-  8  *      http://www.apache.org/licenses/LICENSE-2.0
-  9  *
- 10  * Unless required by applicable law or agreed to in writing, software
- 11  * distributed under the License is distributed on an "AS-IS" BASIS,
- 12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- 13  * See the License for the specific language governing permissions and
- 14  * limitations under the License.
- 15  */
- 16 
- 17 /*
- 18 The Pad Module trys to simulate the pad object from EtherPad. You can find the original code in /etherpad/src/etherpad/pad/model.js
- 19 see https://github.com/ether/pad/blob/master/etherpad/src/etherpad/pad/model.js
- 20 */
- 21 
- 22 var Changeset = require("./Changeset");
- 23 var AttributePoolFactory = require("./AttributePoolFactory");
- 24 
- 25 /**
- 26  * The initial Text of a Pad
- 27  */
- 28 exports.startText = "Hello World\nGoodbye Etherpad";
- 29 
- 30 /**
- 31  * A Array with all known Pads
- 32  */
- 33 globalPads = [];
- 34 
- 35 /**
- 36  * Return a Function Wrapper to work with the Pad
- 37  * @param id A String with the id of the pad
- 38  * @param createIfNotExist A Boolean which says the function if it should create the Pad if it not exist
- 39  */
- 40 exports.getPad = function(id, createIfNotExist)
- 41 {  
- 42   if(!globalPads[id] && createIfNotExist == true)
- 43   {
- 44     createPad(id);
- 45   }
- 46   
- 47   if(!globalPads[id])
- 48     return null;
- 49   
- 50   globalPads[id].timestamp = new Date().getTime();
- 51   
- 52   var functionWrapper = {};
- 53   
- 54   functionWrapper.id = id;
- 55   functionWrapper.appendRevision = function (theChangeset, author) {return appendRevision(id, theChangeset, author)};
- 56   functionWrapper.text = function () {return text(id)};
- 57   functionWrapper.atext = function () {return atext(id)};
- 58   functionWrapper.pool = function () {return pool(id)};
- 59   functionWrapper.getHeadRevisionNumber = function () {return getHeadRevisionNumber(id)};
- 60   functionWrapper.getRevisionChangeset = function (revNum) {return getRevisionChangeset(id, revNum)};
- 61   functionWrapper.getRevisionAuthor = function (revNum) {return getRevisionAuthor(id, revNum)};
- 62   functionWrapper.getAllAuthors = function () {return getAllAuthors(id)};
- 63   
- 64   return functionWrapper;
- 65 }
- 66 
- 67 /**
- 68  * Ensures that the Pad exists
- 69  * @param id The Pad id
- 70  */
- 71 exports.ensurePadExists = function(id)
- 72 {
- 73   if(!globalPads[id])
- 74   {
- 75     createPad(id);
- 76   }
- 77 }
- 78 
- 79 /**
- 80  * Creates an empty pad
- 81  * @param id The Pad id
- 82  */
- 83 function createPad(id)
- 84 {
- 85   var pad = {};
- 86   globalPads[id] = pad;
- 87   
- 88   pad.id = id;
- 89   pad.rev = [];
- 90   pad.head = -1;
- 91   pad.atext = Changeset.makeAText("\n");
- 92   pad.apool = AttributePoolFactory.createAttributePool();
- 93   pad.authors = [];
- 94   
- 95   var firstChangeset = Changeset.makeSplice("\n", 0, 0,
- 96                         exports.cleanText(exports.startText));                      
- 97   appendRevision(id, firstChangeset, '');
- 98 }
- 99 
-100 /**
-101  * Append a changeset to a pad
-102  * @param id The Pad id
-103  * @param theChangeset the changeset which should apply to the text
-104  * @param The author of the revision, can be null
-105  */
-106 function appendRevision(id, theChangeset, author)
-107 {
-108   throwExceptionIfPadDontExist(id);
-109 
-110   if(!author)
-111     author = '';
-112 
-113   var atext = globalPads[id].atext;
-114   var apool = globalPads[id].apool;
-115   var newAText = Changeset.applyToAText(theChangeset, atext, apool);
-116   Changeset.copyAText(newAText, atext);
-117   
-118   var newRev = ++globalPads[id].head;
-119   globalPads[id].rev[newRev] = {};
-120   globalPads[id].rev[newRev].changeset = theChangeset;
-121   globalPads[id].rev[newRev].meta = {};
-122   globalPads[id].rev[newRev].meta.author = author;
-123   globalPads[id].rev[newRev].meta.timestamp = new Date().getTime();
-124   
-125   //ex. getNumForAuthor
-126   apool.putAttrib(['author',author||'']);
-127   
-128   if(newRev%100==0)
-129   {
-130     globalPads[id].rev[newRev].meta.atext=atext;
-131   }
-132 }
-133 
-134 /**
-135  * Returns all Authors of a Pad
-136  * @param id The Pad id
-137  */
-138 function getAllAuthors(id)
-139 {
-140   var authors = [];
-141   
-142   for(key in globalPads[id].apool.numToAttrib)
-143   {
-144     if(globalPads[id].apool.numToAttrib[key][0] == "author" && globalPads[id].apool.numToAttrib[key][1] != "")
-145     {
-146       authors.push(globalPads[id].apool.numToAttrib[key][1]);
-147     }
-148   }
-149   
-150   return authors;
-151 }
-152 
-153 /**
-154  * Returns the plain text of a pad
-155  * @param id The Pad id
-156  */
-157  
-158 function text(id)
-159 {
-160   throwExceptionIfPadDontExist(id);
-161   
-162   return globalPads[id].atext.text;
-163 }
-164 
-165 /**
-166  * Returns the Attributed Text of a pad
-167  * @param id The Pad id
-168  */
-169 function atext(id)
-170 {
-171   throwExceptionIfPadDontExist(id);
-172   
-173   return globalPads[id].atext;
-174 }
-175 
-176 /**
-177  * Returns the Attribute Pool whichs the Pad is using
-178  * @param id The Pad id
-179  */
-180 function pool(id)
-181 {
-182   throwExceptionIfPadDontExist(id);
-183   
-184   return globalPads[id].apool;
-185 }
-186 
-187 /**
-188  * Returns the latest Revision Number of the Pad
-189  * @param id The Pad id
-190  */
-191 function getHeadRevisionNumber(id)
-192 {
-193   throwExceptionIfPadDontExist(id);
-194   
-195   return globalPads[id].head;
-196 }
-197 
-198 /**
-199  * Returns the changeset of a specific revision
-200  * @param id The Pad id
-201  * @param revNum The Revision Number
-202  */
-203 function getRevisionChangeset(id, revNum)
-204 {
-205   throwExceptionIfPadDontExist(id);
-206   throwExceptionIfRevDontExist(id, revNum);
-207   
-208   return globalPads[id].rev[revNum].changeset;
-209 }
-210 
-211 /**
-212  * Returns the author of a specific revision
-213  * @param id The Pad id
-214  * @param revNum The Revision Number
-215  */
-216 function getRevisionAuthor(id, revNum)
-217 {
-218   throwExceptionIfPadDontExist(id);
-219   throwExceptionIfRevDontExist(id, revNum);
-220   
-221   return globalPads[id].rev[revNum].meta.author;
-222 }
-223 
-224 /**
-225  * Check if the ID is a valid Pad ID and trows an Exeption if not
-226  * @param id The Pad id
-227  */
-228 function throwExceptionIfPadDontExist(id)
-229 {
-230   if(id == null)
-231   {
-232     throw "Padname is null!";
-233   }
-234   if(!globalPads[id])
-235   {
-236     throw "Pad don't exist!'";
-237   }
-238 }
-239 
-240 /**
-241  * Check if the Revision of a Pad is valid and throws an Exeption if not
-242  * @param id The Pad id
-243  */
-244 function throwExceptionIfRevDontExist(id, revNum)
-245 {
-246   if(revNum == null)
-247     throw "revNum is null";
-248 
-249   if((typeof revNum) != "number")
-250     throw revNum + " is no Number";
-251     
-252   if(revNum < 0 || revNum > globalPads[id].head)
-253     throw "The Revision " + revNum + " don't exist'";
-254 }
-255 
-256 /**
-257  * Copied from the Etherpad source code, don't know what its good for
-258  * @param txt
-259  */
-260 exports.cleanText = function (txt) {
-261   return txt.replace(/\r\n/g,'\n').replace(/\r/g,'\n').replace(/\t/g, '        ').replace(/\xa0/g, ' ');
-262 }
-263 
-264 
-265 
\ No newline at end of file diff --git a/doc/jsdoc/symbols/src/node_easysync_tests.js.html b/doc/jsdoc/symbols/src/node_easysync_tests.js.html deleted file mode 100644 index 50f30a007..000000000 --- a/doc/jsdoc/symbols/src/node_easysync_tests.js.html +++ /dev/null @@ -1,950 +0,0 @@ -
  1 /**
-  2  * Copyright 2009 Google Inc., 2011 Peter 'Pita' Martischka
-  3  *
-  4  * Licensed under the Apache License, Version 2.0 (the "License");
-  5  * you may not use this file except in compliance with the License.
-  6  * You may obtain a copy of the License at
-  7  *
-  8  *      http://www.apache.org/licenses/LICENSE-2.0
-  9  *
- 10  * Unless required by applicable law or agreed to in writing, software
- 11  * distributed under the License is distributed on an "AS-IS" BASIS,
- 12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- 13  * See the License for the specific language governing permissions and
- 14  * limitations under the License.
- 15  */
- 16 
- 17 var Changeset = require('./Changeset');
- 18 var AttributePoolFactory = require("./AttributePoolFactory");
- 19 
- 20 function random() {
- 21   this.nextInt = function (maxValue) {
- 22     return Math.floor(Math.random() * maxValue);
- 23   }
- 24 
- 25   this.nextDouble = function (maxValue) {
- 26     return Math.random();
- 27   }
- 28 }
- 29 
- 30 function runTests() {
- 31 
- 32   function print(str) {
- 33     console.log(str);
- 34   }
- 35 
- 36   function assert(code, optMsg) {
- 37     if (!eval(code)) throw new Error("FALSE: " + (optMsg || code));
- 38   }
- 39 
- 40   function literal(v) {
- 41     if ((typeof v) == "string") {
- 42       return '"' + v.replace(/[\\\"]/g, '\\$1').replace(/\n/g, '\\n') + '"';
- 43     } else
- 44     return JSON.stringify(v);
- 45   }
- 46 
- 47   function assertEqualArrays(a, b) {
- 48     assert("JSON.stringify(" + literal(a) + ") == JSON.stringify(" + literal(b) + ")");
- 49   }
- 50 
- 51   function assertEqualStrings(a, b) {
- 52     assert(literal(a) + " == " + literal(b));
- 53   }
- 54 
- 55   function throughIterator(opsStr) {
- 56     var iter = Changeset.opIterator(opsStr);
- 57     var assem = Changeset.opAssembler();
- 58     while (iter.hasNext()) {
- 59       assem.append(iter.next());
- 60     }
- 61     return assem.toString();
- 62   }
- 63 
- 64   function throughSmartAssembler(opsStr) {
- 65     var iter = Changeset.opIterator(opsStr);
- 66     var assem = Changeset.smartOpAssembler();
- 67     while (iter.hasNext()) {
- 68       assem.append(iter.next());
- 69     }
- 70     assem.endDocument();
- 71     return assem.toString();
- 72   }
- 73 
- 74   (function () {
- 75     print("> throughIterator");
- 76     var x = '-c*3*4+6|3=az*asdf0*1*2*3+1=1-1+1*0+1=1-1+1|c=c-1';
- 77     assert("throughIterator(" + literal(x) + ") == " + literal(x));
- 78   })();
- 79 
- 80   (function () {
- 81     print("> throughSmartAssembler");
- 82     var x = '-c*3*4+6|3=az*asdf0*1*2*3+1=1-1+1*0+1=1-1+1|c=c-1';
- 83     assert("throughSmartAssembler(" + literal(x) + ") == " + literal(x));
- 84   })();
- 85 
- 86   function applyMutations(mu, arrayOfArrays) {
- 87     arrayOfArrays.forEach(function (a) {
- 88       var result = mu[a[0]].apply(mu, a.slice(1));
- 89       if (a[0] == 'remove' && a[3]) {
- 90         assertEqualStrings(a[3], result);
- 91       }
- 92     });
- 93   }
- 94 
- 95   function mutationsToChangeset(oldLen, arrayOfArrays) {
- 96     var assem = Changeset.smartOpAssembler();
- 97     var op = Changeset.newOp();
- 98     var bank = Changeset.stringAssembler();
- 99     var oldPos = 0;
-100     var newLen = 0;
-101     arrayOfArrays.forEach(function (a) {
-102       if (a[0] == 'skip') {
-103         op.opcode = '=';
-104         op.chars = a[1];
-105         op.lines = (a[2] || 0);
-106         assem.append(op);
-107         oldPos += op.chars;
-108         newLen += op.chars;
-109       } else if (a[0] == 'remove') {
-110         op.opcode = '-';
-111         op.chars = a[1];
-112         op.lines = (a[2] || 0);
-113         assem.append(op);
-114         oldPos += op.chars;
-115       } else if (a[0] == 'insert') {
-116         op.opcode = '+';
-117         bank.append(a[1]);
-118         op.chars = a[1].length;
-119         op.lines = (a[2] || 0);
-120         assem.append(op);
-121         newLen += op.chars;
-122       }
-123     });
-124     newLen += oldLen - oldPos;
-125     assem.endDocument();
-126     return Changeset.pack(oldLen, newLen, assem.toString(), bank.toString());
-127   }
-128 
-129   function runMutationTest(testId, origLines, muts, correct) {
-130     print("> runMutationTest#" + testId);
-131     var lines = origLines.slice();
-132     var mu = Changeset.textLinesMutator(lines);
-133     applyMutations(mu, muts);
-134     mu.close();
-135     assertEqualArrays(correct, lines);
-136 
-137     var inText = origLines.join('');
-138     var cs = mutationsToChangeset(inText.length, muts);
-139     lines = origLines.slice();
-140     Changeset.mutateTextLines(cs, lines);
-141     assertEqualArrays(correct, lines);
-142 
-143     var correctText = correct.join('');
-144     //print(literal(cs));
-145     var outText = Changeset.applyToText(cs, inText);
-146     assertEqualStrings(correctText, outText);
-147   }
-148 
-149   runMutationTest(1, ["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [
-150     ['remove', 1, 0, "a"],
-151     ['insert', "tu"],
-152     ['remove', 1, 0, "p"],
-153     ['skip', 4, 1],
-154     ['skip', 7, 1],
-155     ['insert', "cream\npie\n", 2],
-156     ['skip', 2],
-157     ['insert', "bot"],
-158     ['insert', "\n", 1],
-159     ['insert', "bu"],
-160     ['skip', 3],
-161     ['remove', 3, 1, "ge\n"],
-162     ['remove', 6, 0, "duffle"]
-163   ], ["tuple\n", "banana\n", "cream\n", "pie\n", "cabot\n", "bubba\n", "eggplant\n"]);
-164 
-165   runMutationTest(2, ["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [
-166     ['remove', 1, 0, "a"],
-167     ['remove', 1, 0, "p"],
-168     ['insert', "tu"],
-169     ['skip', 11, 2],
-170     ['insert', "cream\npie\n", 2],
-171     ['skip', 2],
-172     ['insert', "bot"],
-173     ['insert', "\n", 1],
-174     ['insert', "bu"],
-175     ['skip', 3],
-176     ['remove', 3, 1, "ge\n"],
-177     ['remove', 6, 0, "duffle"]
-178   ], ["tuple\n", "banana\n", "cream\n", "pie\n", "cabot\n", "bubba\n", "eggplant\n"]);
-179 
-180   runMutationTest(3, ["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [
-181     ['remove', 6, 1, "apple\n"],
-182     ['skip', 15, 2],
-183     ['skip', 6],
-184     ['remove', 1, 1, "\n"],
-185     ['remove', 8, 0, "eggplant"],
-186     ['skip', 1, 1]
-187   ], ["banana\n", "cabbage\n", "duffle\n"]);
-188 
-189   runMutationTest(4, ["15\n"], [
-190     ['skip', 1],
-191     ['insert', "\n2\n3\n4\n", 4],
-192     ['skip', 2, 1]
-193   ], ["1\n", "2\n", "3\n", "4\n", "5\n"]);
-194 
-195   runMutationTest(5, ["1\n", "2\n", "3\n", "4\n", "5\n"], [
-196     ['skip', 1],
-197     ['remove', 7, 4, "\n2\n3\n4\n"],
-198     ['skip', 2, 1]
-199   ], ["15\n"]);
-200 
-201   runMutationTest(6, ["123\n", "abc\n", "def\n", "ghi\n", "xyz\n"], [
-202     ['insert', "0"],
-203     ['skip', 4, 1],
-204     ['skip', 4, 1],
-205     ['remove', 8, 2, "def\nghi\n"],
-206     ['skip', 4, 1]
-207   ], ["0123\n", "abc\n", "xyz\n"]);
-208 
-209   runMutationTest(7, ["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [
-210     ['remove', 6, 1, "apple\n"],
-211     ['skip', 15, 2, true],
-212     ['skip', 6, 0, true],
-213     ['remove', 1, 1, "\n"],
-214     ['remove', 8, 0, "eggplant"],
-215     ['skip', 1, 1, true]
-216   ], ["banana\n", "cabbage\n", "duffle\n"]);
-217 
-218   function poolOrArray(attribs) {
-219     if (attribs.getAttrib) {
-220       return attribs; // it's already an attrib pool
-221     } else {
-222       // assume it's an array of attrib strings to be split and added
-223       var p = AttributePoolFactory.createAttributePool();
-224       attribs.forEach(function (kv) {
-225         p.putAttrib(kv.split(','));
-226       });
-227       return p;
-228     }
-229   }
-230 
-231   function runApplyToAttributionTest(testId, attribs, cs, inAttr, outCorrect) {
-232     print("> applyToAttribution#" + testId);
-233     var p = poolOrArray(attribs);
-234     var result = Changeset.applyToAttribution(
-235     Changeset.checkRep(cs), inAttr, p);
-236     assertEqualStrings(outCorrect, result);
-237   }
-238 
-239   // turn c<b>a</b>ctus\n into a<b>c</b>tusabcd\n
-240   runApplyToAttributionTest(1, ['bold,', 'bold,true'], "Z:7>3-1*0=1*1=1=3+4$abcd", "+1*1+1|1+5", "+1*1+1|1+8");
-241 
-242   // turn "david\ngreenspan\n" into "<b>david\ngreen</b>\n"
-243   runApplyToAttributionTest(2, ['bold,', 'bold,true'], "Z:g<4*1|1=6*1=5-4$", "|2+g", "*1|1+6*1+5|1+1");
-244 
-245   (function () {
-246     print("> mutatorHasMore");
-247     var lines = ["1\n", "2\n", "3\n", "4\n"];
-248     var mu;
-249 
-250     mu = Changeset.textLinesMutator(lines);
-251     assert(mu.hasMore() + ' == true');
-252     mu.skip(8, 4);
-253     assert(mu.hasMore() + ' == false');
-254     mu.close();
-255     assert(mu.hasMore() + ' == false');
-256 
-257     // still 1,2,3,4
-258     mu = Changeset.textLinesMutator(lines);
-259     assert(mu.hasMore() + ' == true');
-260     mu.remove(2, 1);
-261     assert(mu.hasMore() + ' == true');
-262     mu.skip(2, 1);
-263     assert(mu.hasMore() + ' == true');
-264     mu.skip(2, 1);
-265     assert(mu.hasMore() + ' == true');
-266     mu.skip(2, 1);
-267     assert(mu.hasMore() + ' == false');
-268     mu.insert("5\n", 1);
-269     assert(mu.hasMore() + ' == false');
-270     mu.close();
-271     assert(mu.hasMore() + ' == false');
-272 
-273     // 2,3,4,5 now
-274     mu = Changeset.textLinesMutator(lines);
-275     assert(mu.hasMore() + ' == true');
-276     mu.remove(6, 3);
-277     assert(mu.hasMore() + ' == true');
-278     mu.remove(2, 1);
-279     assert(mu.hasMore() + ' == false');
-280     mu.insert("hello\n", 1);
-281     assert(mu.hasMore() + ' == false');
-282     mu.close();
-283     assert(mu.hasMore() + ' == false');
-284 
-285   })();
-286 
-287   function runMutateAttributionTest(testId, attribs, cs, alines, outCorrect) {
-288     print("> runMutateAttributionTest#" + testId);
-289     var p = poolOrArray(attribs);
-290     var alines2 = Array.prototype.slice.call(alines);
-291     var result = Changeset.mutateAttributionLines(
-292     Changeset.checkRep(cs), alines2, p);
-293     assertEqualArrays(outCorrect, alines2);
-294 
-295     print("> runMutateAttributionTest#" + testId + ".applyToAttribution");
-296 
-297     function removeQuestionMarks(a) {
-298       return a.replace(/\?/g, '');
-299     }
-300     var inMerged = Changeset.joinAttributionLines(alines.map(removeQuestionMarks));
-301     var correctMerged = Changeset.joinAttributionLines(outCorrect.map(removeQuestionMarks));
-302     var mergedResult = Changeset.applyToAttribution(cs, inMerged, p);
-303     assertEqualStrings(correctMerged, mergedResult);
-304   }
-305 
-306   // turn 123\n 456\n 789\n into 123\n 4<b>5</b>6\n 789\n
-307   runMutateAttributionTest(1, ["bold,true"], "Z:c>0|1=4=1*0=1$", ["|1+4", "|1+4", "|1+4"], ["|1+4", "+1*0+1|1+2", "|1+4"]);
-308 
-309   // make a document bold
-310   runMutateAttributionTest(2, ["bold,true"], "Z:c>0*0|3=c$", ["|1+4", "|1+4", "|1+4"], ["*0|1+4", "*0|1+4", "*0|1+4"]);
-311 
-312   // clear bold on document
-313   runMutateAttributionTest(3, ["bold,", "bold,true"], "Z:c>0*0|3=c$", ["*1+1+1*1+1|1+1", "+1*1+1|1+2", "*1+1+1*1+1|1+1"], ["|1+4", "|1+4", "|1+4"]);
-314 
-315   // add a character on line 3 of a document with 5 blank lines, and make sure
-316   // the optimization that skips purely-kept lines is working; if any attribution string
-317   // with a '?' is parsed it will cause an error.
-318   runMutateAttributionTest(4, ['foo,bar', 'line,1', 'line,2', 'line,3', 'line,4', 'line,5'], "Z:5>1|2=2+1$x", ["?*1|1+1", "?*2|1+1", "*3|1+1", "?*4|1+1", "?*5|1+1"], ["?*1|1+1", "?*2|1+1", "+1*3|1+1", "?*4|1+1", "?*5|1+1"]);
-319 
-320   var testPoolWithChars = (function () {
-321     var p = AttributePoolFactory.createAttributePool();
-322     p.putAttrib(['char', 'newline']);
-323     for (var i = 1; i < 36; i++) {
-324       p.putAttrib(['char', Changeset.numToString(i)]);
-325     }
-326     p.putAttrib(['char', '']);
-327     return p;
-328   })();
-329 
-330   // based on runMutationTest#1
-331   runMutateAttributionTest(5, testPoolWithChars, "Z:11>7-2*t+1*u+1|2=b|2+a=2*b+1*o+1*t+1*0|1+1*b+1*u+1=3|1-3-6$" + "tucream\npie\nbot\nbu", ["*a+1*p+2*l+1*e+1*0|1+1", "*b+1*a+1*n+1*a+1*n+1*a+1*0|1+1", "*c+1*a+1*b+2*a+1*g+1*e+1*0|1+1", "*d+1*u+1*f+2*l+1*e+1*0|1+1", "*e+1*g+2*p+1*l+1*a+1*n+1*t+1*0|1+1"], ["*t+1*u+1*p+1*l+1*e+1*0|1+1", "*b+1*a+1*n+1*a+1*n+1*a+1*0|1+1", "|1+6", "|1+4", "*c+1*a+1*b+1*o+1*t+1*0|1+1", "*b+1*u+1*b+2*a+1*0|1+1", "*e+1*g+2*p+1*l+1*a+1*n+1*t+1*0|1+1"]);
-332 
-333   // based on runMutationTest#3
-334   runMutateAttributionTest(6, testPoolWithChars, "Z:11<f|1-6|2=f=6|1-1-8$", ["*a|1+6", "*b|1+7", "*c|1+8", "*d|1+7", "*e|1+9"], ["*b|1+7", "*c|1+8", "*d+6*e|1+1"]);
-335 
-336   // based on runMutationTest#4
-337   runMutateAttributionTest(7, testPoolWithChars, "Z:3>7=1|4+7$\n2\n3\n4\n", ["*1+1*5|1+2"], ["*1+1|1+1", "|1+2", "|1+2", "|1+2", "*5|1+2"]);
-338 
-339   // based on runMutationTest#5
-340   runMutateAttributionTest(8, testPoolWithChars, "Z:a<7=1|4-7$", ["*1|1+2", "*2|1+2", "*3|1+2", "*4|1+2", "*5|1+2"], ["*1+1*5|1+2"]);
-341 
-342   // based on runMutationTest#6
-343   runMutateAttributionTest(9, testPoolWithChars, "Z:k<7*0+1*10|2=8|2-8$0", ["*1+1*2+1*3+1|1+1", "*a+1*b+1*c+1|1+1", "*d+1*e+1*f+1|1+1", "*g+1*h+1*i+1|1+1", "?*x+1*y+1*z+1|1+1"], ["*0+1|1+4", "|1+4", "?*x+1*y+1*z+1|1+1"]);
-344 
-345   runMutateAttributionTest(10, testPoolWithChars, "Z:6>4=1+1=1+1|1=1+1=1*0+1$abcd", ["|1+3", "|1+3"], ["|1+5", "+2*0+1|1+2"]);
-346 
-347 
-348   runMutateAttributionTest(11, testPoolWithChars, "Z:s>1|1=4=6|1+1$\n", ["*0|1+4", "*0|1+8", "*0+5|1+1", "*0|1+1", "*0|1+5", "*0|1+1", "*0|1+1", "*0|1+1", "|1+1"], ["*0|1+4", "*0+6|1+1", "*0|1+2", "*0+5|1+1", "*0|1+1", "*0|1+5", "*0|1+1", "*0|1+1", "*0|1+1", "|1+1"]);
-349 
-350   function randomInlineString(len, rand) {
-351     var assem = Changeset.stringAssembler();
-352     for (var i = 0; i < len; i++) {
-353       assem.append(String.fromCharCode(rand.nextInt(26) + 97));
-354     }
-355     return assem.toString();
-356   }
-357 
-358   function randomMultiline(approxMaxLines, approxMaxCols, rand) {
-359     var numParts = rand.nextInt(approxMaxLines * 2) + 1;
-360     var txt = Changeset.stringAssembler();
-361     txt.append(rand.nextInt(2) ? '\n' : '');
-362     for (var i = 0; i < numParts; i++) {
-363       if ((i % 2) == 0) {
-364         if (rand.nextInt(10)) {
-365           txt.append(randomInlineString(rand.nextInt(approxMaxCols) + 1, rand));
-366         } else {
-367           txt.append('\n');
-368         }
-369       } else {
-370         txt.append('\n');
-371       }
-372     }
-373     return txt.toString();
-374   }
-375 
-376   function randomStringOperation(numCharsLeft, rand) {
-377     var result;
-378     switch (rand.nextInt(9)) {
-379     case 0:
-380       {
-381         // insert char
-382         result = {
-383           insert: randomInlineString(1, rand)
-384         };
-385         break;
-386       }
-387     case 1:
-388       {
-389         // delete char
-390         result = {
-391           remove: 1
-392         };
-393         break;
-394       }
-395     case 2:
-396       {
-397         // skip char
-398         result = {
-399           skip: 1
-400         };
-401         break;
-402       }
-403     case 3:
-404       {
-405         // insert small
-406         result = {
-407           insert: randomInlineString(rand.nextInt(4) + 1, rand)
-408         };
-409         break;
-410       }
-411     case 4:
-412       {
-413         // delete small
-414         result = {
-415           remove: rand.nextInt(4) + 1
-416         };
-417         break;
-418       }
-419     case 5:
-420       {
-421         // skip small
-422         result = {
-423           skip: rand.nextInt(4) + 1
-424         };
-425         break;
-426       }
-427     case 6:
-428       {
-429         // insert multiline;
-430         result = {
-431           insert: randomMultiline(5, 20, rand)
-432         };
-433         break;
-434       }
-435     case 7:
-436       {
-437         // delete multiline
-438         result = {
-439           remove: Math.round(numCharsLeft * rand.nextDouble() * rand.nextDouble())
-440         };
-441         break;
-442       }
-443     case 8:
-444       {
-445         // skip multiline
-446         result = {
-447           skip: Math.round(numCharsLeft * rand.nextDouble() * rand.nextDouble())
-448         };
-449         break;
-450       }
-451     case 9:
-452       {
-453         // delete to end
-454         result = {
-455           remove: numCharsLeft
-456         };
-457         break;
-458       }
-459     case 10:
-460       {
-461         // skip to end
-462         result = {
-463           skip: numCharsLeft
-464         };
-465         break;
-466       }
-467     }
-468     var maxOrig = numCharsLeft - 1;
-469     if ('remove' in result) {
-470       result.remove = Math.min(result.remove, maxOrig);
-471     } else if ('skip' in result) {
-472       result.skip = Math.min(result.skip, maxOrig);
-473     }
-474     return result;
-475   }
-476 
-477   function randomTwoPropAttribs(opcode, rand) {
-478     // assumes attrib pool like ['apple,','apple,true','banana,','banana,true']
-479     if (opcode == '-' || rand.nextInt(3)) {
-480       return '';
-481     } else if (rand.nextInt(3)) {
-482       if (opcode == '+' || rand.nextInt(2)) {
-483         return '*' + Changeset.numToString(rand.nextInt(2) * 2 + 1);
-484       } else {
-485         return '*' + Changeset.numToString(rand.nextInt(2) * 2);
-486       }
-487     } else {
-488       if (opcode == '+' || rand.nextInt(4) == 0) {
-489         return '*1*3';
-490       } else {
-491         return ['*0*2', '*0*3', '*1*2'][rand.nextInt(3)];
-492       }
-493     }
-494   }
-495 
-496   function randomTestChangeset(origText, rand, withAttribs) {
-497     var charBank = Changeset.stringAssembler();
-498     var textLeft = origText; // always keep final newline
-499     var outTextAssem = Changeset.stringAssembler();
-500     var opAssem = Changeset.smartOpAssembler();
-501     var oldLen = origText.length;
-502 
-503     var nextOp = Changeset.newOp();
-504 
-505     function appendMultilineOp(opcode, txt) {
-506       nextOp.opcode = opcode;
-507       if (withAttribs) {
-508         nextOp.attribs = randomTwoPropAttribs(opcode, rand);
-509       }
-510       txt.replace(/\n|[^\n]+/g, function (t) {
-511         if (t == '\n') {
-512           nextOp.chars = 1;
-513           nextOp.lines = 1;
-514           opAssem.append(nextOp);
-515         } else {
-516           nextOp.chars = t.length;
-517           nextOp.lines = 0;
-518           opAssem.append(nextOp);
-519         }
-520         return '';
-521       });
-522     }
-523 
-524     function doOp() {
-525       var o = randomStringOperation(textLeft.length, rand);
-526       if (o.insert) {
-527         var txt = o.insert;
-528         charBank.append(txt);
-529         outTextAssem.append(txt);
-530         appendMultilineOp('+', txt);
-531       } else if (o.skip) {
-532         var txt = textLeft.substring(0, o.skip);
-533         textLeft = textLeft.substring(o.skip);
-534         outTextAssem.append(txt);
-535         appendMultilineOp('=', txt);
-536       } else if (o.remove) {
-537         var txt = textLeft.substring(0, o.remove);
-538         textLeft = textLeft.substring(o.remove);
-539         appendMultilineOp('-', txt);
-540       }
-541     }
-542 
-543     while (textLeft.length > 1) doOp();
-544     for (var i = 0; i < 5; i++) doOp(); // do some more (only insertions will happen)
-545     var outText = outTextAssem.toString() + '\n';
-546     opAssem.endDocument();
-547     var cs = Changeset.pack(oldLen, outText.length, opAssem.toString(), charBank.toString());
-548     Changeset.checkRep(cs);
-549     return [cs, outText];
-550   }
-551 
-552   function testCompose(randomSeed) {
-553     var rand = new random();
-554     print("> testCompose#" + randomSeed);
-555 
-556     var p = AttributePoolFactory.createAttributePool();
-557 
-558     var startText = randomMultiline(10, 20, rand) + '\n';
-559 
-560     var x1 = randomTestChangeset(startText, rand);
-561     var change1 = x1[0];
-562     var text1 = x1[1];
-563 
-564     var x2 = randomTestChangeset(text1, rand);
-565     var change2 = x2[0];
-566     var text2 = x2[1];
-567 
-568     var x3 = randomTestChangeset(text2, rand);
-569     var change3 = x3[0];
-570     var text3 = x3[1];
-571 
-572     //print(literal(Changeset.toBaseTen(startText)));
-573     //print(literal(Changeset.toBaseTen(change1)));
-574     //print(literal(Changeset.toBaseTen(change2)));
-575     var change12 = Changeset.checkRep(Changeset.compose(change1, change2, p));
-576     var change23 = Changeset.checkRep(Changeset.compose(change2, change3, p));
-577     var change123 = Changeset.checkRep(Changeset.compose(change12, change3, p));
-578     var change123a = Changeset.checkRep(Changeset.compose(change1, change23, p));
-579     assertEqualStrings(change123, change123a);
-580 
-581     assertEqualStrings(text2, Changeset.applyToText(change12, startText));
-582     assertEqualStrings(text3, Changeset.applyToText(change23, text1));
-583     assertEqualStrings(text3, Changeset.applyToText(change123, startText));
-584   }
-585 
-586   for (var i = 0; i < 30; i++) testCompose(i);
-587 
-588   (function simpleComposeAttributesTest() {
-589     print("> simpleComposeAttributesTest");
-590     var p = AttributePoolFactory.createAttributePool();
-591     p.putAttrib(['bold', '']);
-592     p.putAttrib(['bold', 'true']);
-593     var cs1 = Changeset.checkRep("Z:2>1*1+1*1=1$x");
-594     var cs2 = Changeset.checkRep("Z:3>0*0|1=3$");
-595     var cs12 = Changeset.checkRep(Changeset.compose(cs1, cs2, p));
-596     assertEqualStrings("Z:2>1+1*0|1=2$x", cs12);
-597   })();
-598 
-599   (function followAttributesTest() {
-600     var p = AttributePoolFactory.createAttributePool();
-601     p.putAttrib(['x', '']);
-602     p.putAttrib(['x', 'abc']);
-603     p.putAttrib(['x', 'def']);
-604     p.putAttrib(['y', '']);
-605     p.putAttrib(['y', 'abc']);
-606     p.putAttrib(['y', 'def']);
-607 
-608     function testFollow(a, b, afb, bfa, merge) {
-609       assertEqualStrings(afb, Changeset.followAttributes(a, b, p));
-610       assertEqualStrings(bfa, Changeset.followAttributes(b, a, p));
-611       assertEqualStrings(merge, Changeset.composeAttributes(a, afb, true, p));
-612       assertEqualStrings(merge, Changeset.composeAttributes(b, bfa, true, p));
-613     }
-614 
-615     testFollow('', '', '', '', '');
-616     testFollow('*0', '', '', '*0', '*0');
-617     testFollow('*0', '*0', '', '', '*0');
-618     testFollow('*0', '*1', '', '*0', '*0');
-619     testFollow('*1', '*2', '', '*1', '*1');
-620     testFollow('*0*1', '', '', '*0*1', '*0*1');
-621     testFollow('*0*4', '*2*3', '*3', '*0', '*0*3');
-622     testFollow('*0*4', '*2', '', '*0*4', '*0*4');
-623   })();
-624 
-625   function testFollow(randomSeed) {
-626     var rand = new random();
-627     print("> testFollow#" + randomSeed);
-628 
-629     var p = AttributePoolFactory.createAttributePool();
-630 
-631     var startText = randomMultiline(10, 20, rand) + '\n';
-632 
-633     var cs1 = randomTestChangeset(startText, rand)[0];
-634     var cs2 = randomTestChangeset(startText, rand)[0];
-635 
-636     var afb = Changeset.checkRep(Changeset.follow(cs1, cs2, false, p));
-637     var bfa = Changeset.checkRep(Changeset.follow(cs2, cs1, true, p));
-638 
-639     var merge1 = Changeset.checkRep(Changeset.compose(cs1, afb));
-640     var merge2 = Changeset.checkRep(Changeset.compose(cs2, bfa));
-641 
-642     assertEqualStrings(merge1, merge2);
-643   }
-644 
-645   for (var i = 0; i < 30; i++) testFollow(i);
-646 
-647   function testSplitJoinAttributionLines(randomSeed) {
-648     var rand = new random();
-649     print("> testSplitJoinAttributionLines#" + randomSeed);
-650 
-651     var doc = randomMultiline(10, 20, rand) + '\n';
-652 
-653     function stringToOps(str) {
-654       var assem = Changeset.mergingOpAssembler();
-655       var o = Changeset.newOp('+');
-656       o.chars = 1;
-657       for (var i = 0; i < str.length; i++) {
-658         var c = str.charAt(i);
-659         o.lines = (c == '\n' ? 1 : 0);
-660         o.attribs = (c == 'a' || c == 'b' ? '*' + c : '');
-661         assem.append(o);
-662       }
-663       return assem.toString();
-664     }
-665 
-666     var theJoined = stringToOps(doc);
-667     var theSplit = doc.match(/[^\n]*\n/g).map(stringToOps);
-668 
-669     assertEqualArrays(theSplit, Changeset.splitAttributionLines(theJoined, doc));
-670     assertEqualStrings(theJoined, Changeset.joinAttributionLines(theSplit));
-671   }
-672 
-673   for (var i = 0; i < 10; i++) testSplitJoinAttributionLines(i);
-674 
-675   (function testMoveOpsToNewPool() {
-676     print("> testMoveOpsToNewPool");
-677 
-678     var pool1 = AttributePoolFactory.createAttributePool();
-679     var pool2 = AttributePoolFactory.createAttributePool();
-680 
-681     pool1.putAttrib(['baz', 'qux']);
-682     pool1.putAttrib(['foo', 'bar']);
-683 
-684     pool2.putAttrib(['foo', 'bar']);
-685 
-686     assertEqualStrings(Changeset.moveOpsToNewPool('Z:1>2*1+1*0+1$ab', pool1, pool2), 'Z:1>2*0+1*1+1$ab');
-687     assertEqualStrings(Changeset.moveOpsToNewPool('*1+1*0+1', pool1, pool2), '*0+1*1+1');
-688   })();
-689 
-690 
-691   (function testMakeSplice() {
-692     print("> testMakeSplice");
-693 
-694     var t = "a\nb\nc\n";
-695     var t2 = Changeset.applyToText(Changeset.makeSplice(t, 5, 0, "def"), t);
-696     assertEqualStrings("a\nb\ncdef\n", t2);
-697 
-698   })();
-699 
-700   (function testToSplices() {
-701     print("> testToSplices");
-702 
-703     var cs = Changeset.checkRep('Z:z>9*0=1=4-3+9=1|1-4-4+1*0+a$123456789abcdefghijk');
-704     var correctSplices = [
-705       [5, 8, "123456789"],
-706       [9, 17, "abcdefghijk"]
-707     ];
-708     assertEqualArrays(correctSplices, Changeset.toSplices(cs));
-709   })();
-710 
-711   function testCharacterRangeFollow(testId, cs, oldRange, insertionsAfter, correctNewRange) {
-712     print("> testCharacterRangeFollow#" + testId);
-713 
-714     var cs = Changeset.checkRep(cs);
-715     assertEqualArrays(correctNewRange, Changeset.characterRangeFollow(cs, oldRange[0], oldRange[1], insertionsAfter));
-716 
-717   }
-718 
-719   testCharacterRangeFollow(1, 'Z:z>9*0=1=4-3+9=1|1-4-4+1*0+a$123456789abcdefghijk', [7, 10], false, [14, 15]);
-720   testCharacterRangeFollow(2, "Z:bc<6|x=b4|2-6$", [400, 407], false, [400, 401]);
-721   testCharacterRangeFollow(3, "Z:4>0-3+3$abc", [0, 3], false, [3, 3]);
-722   testCharacterRangeFollow(4, "Z:4>0-3+3$abc", [0, 3], true, [0, 0]);
-723   testCharacterRangeFollow(5, "Z:5>1+1=1-3+3$abcd", [1, 4], false, [5, 5]);
-724   testCharacterRangeFollow(6, "Z:5>1+1=1-3+3$abcd", [1, 4], true, [2, 2]);
-725   testCharacterRangeFollow(7, "Z:5>1+1=1-3+3$abcd", [0, 6], false, [1, 7]);
-726   testCharacterRangeFollow(8, "Z:5>1+1=1-3+3$abcd", [0, 3], false, [1, 2]);
-727   testCharacterRangeFollow(9, "Z:5>1+1=1-3+3$abcd", [2, 5], false, [5, 6]);
-728   testCharacterRangeFollow(10, "Z:2>1+1$a", [0, 0], false, [1, 1]);
-729   testCharacterRangeFollow(11, "Z:2>1+1$a", [0, 0], true, [0, 0]);
-730 
-731   (function testOpAttributeValue() {
-732     print("> testOpAttributeValue");
-733 
-734     var p = AttributePoolFactory.createAttributePool();
-735     p.putAttrib(['name', 'david']);
-736     p.putAttrib(['color', 'green']);
-737 
-738     assertEqualStrings("david", Changeset.opAttributeValue(Changeset.stringOp('*0*1+1'), 'name', p));
-739     assertEqualStrings("david", Changeset.opAttributeValue(Changeset.stringOp('*0+1'), 'name', p));
-740     assertEqualStrings("", Changeset.opAttributeValue(Changeset.stringOp('*1+1'), 'name', p));
-741     assertEqualStrings("", Changeset.opAttributeValue(Changeset.stringOp('+1'), 'name', p));
-742     assertEqualStrings("green", Changeset.opAttributeValue(Changeset.stringOp('*0*1+1'), 'color', p));
-743     assertEqualStrings("green", Changeset.opAttributeValue(Changeset.stringOp('*1+1'), 'color', p));
-744     assertEqualStrings("", Changeset.opAttributeValue(Changeset.stringOp('*0+1'), 'color', p));
-745     assertEqualStrings("", Changeset.opAttributeValue(Changeset.stringOp('+1'), 'color', p));
-746   })();
-747 
-748   function testAppendATextToAssembler(testId, atext, correctOps) {
-749     print("> testAppendATextToAssembler#" + testId);
-750 
-751     var assem = Changeset.smartOpAssembler();
-752     Changeset.appendATextToAssembler(atext, assem);
-753     assertEqualStrings(correctOps, assem.toString());
-754   }
-755 
-756   testAppendATextToAssembler(1, {
-757     text: "\n",
-758     attribs: "|1+1"
-759   }, "");
-760   testAppendATextToAssembler(2, {
-761     text: "\n\n",
-762     attribs: "|2+2"
-763   }, "|1+1");
-764   testAppendATextToAssembler(3, {
-765     text: "\n\n",
-766     attribs: "*x|2+2"
-767   }, "*x|1+1");
-768   testAppendATextToAssembler(4, {
-769     text: "\n\n",
-770     attribs: "*x|1+1|1+1"
-771   }, "*x|1+1");
-772   testAppendATextToAssembler(5, {
-773     text: "foo\n",
-774     attribs: "|1+4"
-775   }, "+3");
-776   testAppendATextToAssembler(6, {
-777     text: "\nfoo\n",
-778     attribs: "|2+5"
-779   }, "|1+1+3");
-780   testAppendATextToAssembler(7, {
-781     text: "\nfoo\n",
-782     attribs: "*x|2+5"
-783   }, "*x|1+1*x+3");
-784   testAppendATextToAssembler(8, {
-785     text: "\n\n\nfoo\n",
-786     attribs: "|2+2*x|2+5"
-787   }, "|2+2*x|1+1*x+3");
-788 
-789   function testMakeAttribsString(testId, pool, opcode, attribs, correctString) {
-790     print("> testMakeAttribsString#" + testId);
-791 
-792     var p = poolOrArray(pool);
-793     var str = Changeset.makeAttribsString(opcode, attribs, p);
-794     assertEqualStrings(correctString, str);
-795   }
-796 
-797   testMakeAttribsString(1, ['bold,'], '+', [
-798     ['bold', '']
-799   ], '');
-800   testMakeAttribsString(2, ['abc,def', 'bold,'], '=', [
-801     ['bold', '']
-802   ], '*1');
-803   testMakeAttribsString(3, ['abc,def', 'bold,true'], '+', [
-804     ['abc', 'def'],
-805     ['bold', 'true']
-806   ], '*0*1');
-807   testMakeAttribsString(4, ['abc,def', 'bold,true'], '+', [
-808     ['bold', 'true'],
-809     ['abc', 'def']
-810   ], '*0*1');
-811 
-812   function testSubattribution(testId, astr, start, end, correctOutput) {
-813     print("> testSubattribution#" + testId);
-814 
-815     var str = Changeset.subattribution(astr, start, end);
-816     assertEqualStrings(correctOutput, str);
-817   }
-818 
-819   testSubattribution(1, "+1", 0, 0, "");
-820   testSubattribution(2, "+1", 0, 1, "+1");
-821   testSubattribution(3, "+1", 0, undefined, "+1");
-822   testSubattribution(4, "|1+1", 0, 0, "");
-823   testSubattribution(5, "|1+1", 0, 1, "|1+1");
-824   testSubattribution(6, "|1+1", 0, undefined, "|1+1");
-825   testSubattribution(7, "*0+1", 0, 0, "");
-826   testSubattribution(8, "*0+1", 0, 1, "*0+1");
-827   testSubattribution(9, "*0+1", 0, undefined, "*0+1");
-828   testSubattribution(10, "*0|1+1", 0, 0, "");
-829   testSubattribution(11, "*0|1+1", 0, 1, "*0|1+1");
-830   testSubattribution(12, "*0|1+1", 0, undefined, "*0|1+1");
-831   testSubattribution(13, "*0+2+1*1+3", 0, 1, "*0+1");
-832   testSubattribution(14, "*0+2+1*1+3", 0, 2, "*0+2");
-833   testSubattribution(15, "*0+2+1*1+3", 0, 3, "*0+2+1");
-834   testSubattribution(16, "*0+2+1*1+3", 0, 4, "*0+2+1*1+1");
-835   testSubattribution(17, "*0+2+1*1+3", 0, 5, "*0+2+1*1+2");
-836   testSubattribution(18, "*0+2+1*1+3", 0, 6, "*0+2+1*1+3");
-837   testSubattribution(19, "*0+2+1*1+3", 0, 7, "*0+2+1*1+3");
-838   testSubattribution(20, "*0+2+1*1+3", 0, undefined, "*0+2+1*1+3");
-839   testSubattribution(21, "*0+2+1*1+3", 1, undefined, "*0+1+1*1+3");
-840   testSubattribution(22, "*0+2+1*1+3", 2, undefined, "+1*1+3");
-841   testSubattribution(23, "*0+2+1*1+3", 3, undefined, "*1+3");
-842   testSubattribution(24, "*0+2+1*1+3", 4, undefined, "*1+2");
-843   testSubattribution(25, "*0+2+1*1+3", 5, undefined, "*1+1");
-844   testSubattribution(26, "*0+2+1*1+3", 6, undefined, "");
-845   testSubattribution(27, "*0+2+1*1|1+3", 0, 1, "*0+1");
-846   testSubattribution(28, "*0+2+1*1|1+3", 0, 2, "*0+2");
-847   testSubattribution(29, "*0+2+1*1|1+3", 0, 3, "*0+2+1");
-848   testSubattribution(30, "*0+2+1*1|1+3", 0, 4, "*0+2+1*1+1");
-849   testSubattribution(31, "*0+2+1*1|1+3", 0, 5, "*0+2+1*1+2");
-850   testSubattribution(32, "*0+2+1*1|1+3", 0, 6, "*0+2+1*1|1+3");
-851   testSubattribution(33, "*0+2+1*1|1+3", 0, 7, "*0+2+1*1|1+3");
-852   testSubattribution(34, "*0+2+1*1|1+3", 0, undefined, "*0+2+1*1|1+3");
-853   testSubattribution(35, "*0+2+1*1|1+3", 1, undefined, "*0+1+1*1|1+3");
-854   testSubattribution(36, "*0+2+1*1|1+3", 2, undefined, "+1*1|1+3");
-855   testSubattribution(37, "*0+2+1*1|1+3", 3, undefined, "*1|1+3");
-856   testSubattribution(38, "*0+2+1*1|1+3", 4, undefined, "*1|1+2");
-857   testSubattribution(39, "*0+2+1*1|1+3", 5, undefined, "*1|1+1");
-858   testSubattribution(40, "*0+2+1*1|1+3", 1, 5, "*0+1+1*1+2");
-859   testSubattribution(41, "*0+2+1*1|1+3", 2, 6, "+1*1|1+3");
-860   testSubattribution(42, "*0+2+1*1+3", 2, 6, "+1*1+3");
-861 
-862   function testFilterAttribNumbers(testId, cs, filter, correctOutput) {
-863     print("> testFilterAttribNumbers#" + testId);
-864 
-865     var str = Changeset.filterAttribNumbers(cs, filter);
-866     assertEqualStrings(correctOutput, str);
-867   }
-868 
-869   testFilterAttribNumbers(1, "*0*1+1+2+3*1+4*2+5*0*2*1*b*c+6", function (n) {
-870     return (n % 2) == 0;
-871   }, "*0+1+2+3+4*2+5*0*2*c+6");
-872   testFilterAttribNumbers(2, "*0*1+1+2+3*1+4*2+5*0*2*1*b*c+6", function (n) {
-873     return (n % 2) == 1;
-874   }, "*1+1+2+3*1+4+5*1*b+6");
-875 
-876   function testInverse(testId, cs, lines, alines, pool, correctOutput) {
-877     print("> testInverse#" + testId);
-878 
-879     pool = poolOrArray(pool);
-880     var str = Changeset.inverse(Changeset.checkRep(cs), lines, alines, pool);
-881     assertEqualStrings(correctOutput, str);
-882   }
-883 
-884   // take "FFFFTTTTT" and apply "-FT--FFTT", the inverse of which is "--F--TT--"
-885   testInverse(1, "Z:9>0=1*0=1*1=1=2*0=2*1|1=2$", null, ["+4*1+5"], ['bold,', 'bold,true'], "Z:9>0=2*0=1=2*1=2$");
-886 
-887   function testMutateTextLines(testId, cs, lines, correctLines) {
-888     print("> testMutateTextLines#" + testId);
-889 
-890     var a = lines.slice();
-891     Changeset.mutateTextLines(cs, a);
-892     assertEqualArrays(correctLines, a);
-893   }
-894 
-895   testMutateTextLines(1, "Z:4<1|1-2-1|1+1+1$\nc", ["a\n", "b\n"], ["\n", "c\n"]);
-896   testMutateTextLines(2, "Z:4>0|1-2-1|2+3$\nc\n", ["a\n", "b\n"], ["\n", "c\n", "\n"]);
-897 
-898   function testInverseRandom(randomSeed) {
-899     var rand = new random();
-900     print("> testInverseRandom#" + randomSeed);
-901 
-902     var p = poolOrArray(['apple,', 'apple,true', 'banana,', 'banana,true']);
-903 
-904     var startText = randomMultiline(10, 20, rand) + '\n';
-905     var alines = Changeset.splitAttributionLines(Changeset.makeAttribution(startText), startText);
-906     var lines = startText.slice(0, -1).split('\n').map(function (s) {
-907       return s + '\n';
-908     });
-909 
-910     var stylifier = randomTestChangeset(startText, rand, true)[0];
-911 
-912     //print(alines.join('\n'));
-913     Changeset.mutateAttributionLines(stylifier, alines, p);
-914     //print(stylifier);
-915     //print(alines.join('\n'));
-916     Changeset.mutateTextLines(stylifier, lines);
-917 
-918     var changeset = randomTestChangeset(lines.join(''), rand, true)[0];
-919     var inverseChangeset = Changeset.inverse(changeset, lines, alines, p);
-920 
-921     var origLines = lines.slice();
-922     var origALines = alines.slice();
-923 
-924     Changeset.mutateTextLines(changeset, lines);
-925     Changeset.mutateAttributionLines(changeset, alines, p);
-926     //print(origALines.join('\n'));
-927     //print(changeset);
-928     //print(inverseChangeset);
-929     //print(origLines.map(function(s) { return '1: '+s.slice(0,-1); }).join('\n'));
-930     //print(lines.map(function(s) { return '2: '+s.slice(0,-1); }).join('\n'));
-931     //print(alines.join('\n'));
-932     Changeset.mutateTextLines(inverseChangeset, lines);
-933     Changeset.mutateAttributionLines(inverseChangeset, alines, p);
-934     //print(lines.map(function(s) { return '3: '+s.slice(0,-1); }).join('\n'));
-935     assertEqualArrays(origLines, lines);
-936     assertEqualArrays(origALines, alines);
-937   }
-938 
-939   for (var i = 0; i < 30; i++) testInverseRandom(i);
-940 }
-941 
-942 runTests();
-943 
\ No newline at end of file diff --git a/doc/jsdoc/symbols/src/node_server.js.html b/doc/jsdoc/symbols/src/node_server.js.html deleted file mode 100644 index 74f7a3866..000000000 --- a/doc/jsdoc/symbols/src/node_server.js.html +++ /dev/null @@ -1,150 +0,0 @@ -
  1 /**
-  2  * 2011 Peter 'Pita' Martischka
-  3  *
-  4  * Licensed under the Apache License, Version 2.0 (the "License");
-  5  * you may not use this file except in compliance with the License.
-  6  * You may obtain a copy of the License at
-  7  *
-  8  *      http://www.apache.org/licenses/LICENSE-2.0
-  9  *
- 10  * Unless required by applicable law or agreed to in writing, software
- 11  * distributed under the License is distributed on an "AS-IS" BASIS,
- 12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- 13  * See the License for the specific language governing permissions and
- 14  * limitations under the License.
- 15  */
- 16 
- 17 var http = require('http')
- 18   , url = require('url')
- 19   , fs = require('fs')
- 20   , io = require('socket.io')
- 21   , sys = require('sys')
- 22   , server;
- 23 
- 24 server = http.createServer(function(req, res){
- 25   var path = url.parse(req.url).pathname;
- 26   
- 27   if(path.substring(0,"/static".length) == "/static" || path.substring(0,"/p/".length) == "/p/")
- 28   {
- 29     if(path.substring(0,"/p/".length) == "/p/")
- 30     {
- 31       if(path.length < 7)
- 32         send404(res, path);
- 33     
- 34       path = "/static/padhtml";
- 35     }
- 36     
- 37     sendFile(res, path, __dirname + "/.." + path);
- 38   }
- 39   else if(path == "/")
- 40   {
- 41     sendRedirect(res, path, "/p/test");
- 42   }
- 43   else if(path == "/newpad")
- 44   {
- 45     sendRedirect(res, path, "/p/" + randomPadName());
- 46   }
- 47   else if(path == "/ep/pad/reconnect")
- 48   {
- 49     if(req.headers.referer != null)
- 50       sendRedirect(res, path, req.headers.referer);
- 51     else
- 52       send404(res, path);
- 53   }
- 54   else
- 55   {
- 56     send404(res, path);
- 57   }
- 58 });
- 59 server.listen(9001);
- 60 
- 61 function randomPadName() {
- 62 	var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
- 63 	var string_length = 10;
- 64 	var randomstring = '';
- 65 	for (var i=0; i<string_length; i++) {
- 66 		var rnum = Math.floor(Math.random() * chars.length);
- 67 		randomstring += chars.substring(rnum,rnum+1);
- 68 	}
- 69 	return randomstring;
- 70 }
- 71 
- 72 function sendFile(res, reqPath, path)
- 73 {
- 74   fs.readFile(path, function(err, data){
- 75     if (err){
- 76       send404(res, reqPath);
- 77     } else {
- 78       var contentType = "text/html";
- 79     
- 80       if (path.substring(path.length -3, path.length) == ".js")
- 81         contentType = "text/javascript";
- 82       else if (path.substring(path.length -4, path.length) == ".css")
- 83         contentType = "text/css";
- 84       else if (path.substring(path.length -4, path.length) == ".gif")
- 85         contentType = "image/gif";
- 86     
- 87       res.writeHead(200, {'Content-Type': contentType});
- 88       res.write(data, 'utf8');
- 89       res.end();
- 90       
- 91       requestLog(200, reqPath, "-> " + path);
- 92     }
- 93   });
- 94 }
- 95 
- 96 function send404(res, reqPath)
- 97 {
- 98   res.writeHead(404);
- 99   res.write("404 - Not Found");
-100   res.end();
-101   
-102   requestLog(404, reqPath, "NOT FOUND!");
-103 }
-104 
-105 function sendRedirect(res, reqPath, location)
-106 {
-107   res.writeHead(302, {'Location': location});
-108   res.end();
-109   
-110   requestLog(302, reqPath, "-> " + location);
-111 }
-112 
-113 function requestLog(code, path, desc)
-114 {
-115   console.log(code +", " + path + ", " + desc);
-116 }
-117 
-118 var io = io.listen(server);
-119 var messageHandler = require("./MessageHandler");
-120 messageHandler.setSocketIO(io);
-121 
-122 io.on('connection', function(client){
-123   try{
-124     messageHandler.handleConnect(client);
-125   }catch(e){console.error(e);}
-126   
-127   client.on('message', function(message){
-128     try{
-129       messageHandler.handleMessage(client, message);
-130     }catch(e){console.error(e);}
-131   });
-132 
-133   client.on('disconnect', function(){
-134     try{
-135       messageHandler.handleDisconnect(client);
-136     }catch(e){console.error(e);}
-137   });
-138 });
-139 
-140 
-141 
-142 
-143 
\ No newline at end of file