From 325c322a276d03c7de50233aef63598c7dd8c308 Mon Sep 17 00:00:00 2001 From: Peter 'Pita' Martischka Date: Sat, 26 Mar 2011 13:10:41 +0000 Subject: [PATCH] first-commit --- bin/generateJsDoc.sh | 16 + bin/run.sh | 15 + bin/runTests.sh | 10 + doc/easysync/easysync-notes.txt | 133 + doc/easysync/easysync.odt | Bin 0 -> 23032 bytes 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 0 -> 819369 bytes doc/jsdoc-toolkit/java/src/JsDebugRun.java | 21 + doc/jsdoc-toolkit/java/src/JsRun.java | 21 + doc/jsdoc-toolkit/jsdebug.jar | Bin 0 -> 1307 bytes doc/jsdoc-toolkit/jsrun.jar | Bin 0 -> 1303 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/README | 1 + node/AttributePoolFactory.js | 82 + node/AuthorManager.js | 131 + node/Changeset.js | 1957 +++++++ node/MessageHandler.js | 454 ++ node/PadManager.js | 264 + node/easysync_tests.js | 942 ++++ node/server.js | 128 + static/css/editor.css | 109 + static/css/inner.css | 45 + static/css/pad2_ejs.css | 1131 ++++ static/css/syntax.css | 32 + static/img/jun09/pad/backgrad.gif | Bin 0 -> 697 bytes static/img/jun09/pad/colorpicker.gif | Bin 0 -> 2020 bytes static/img/jun09/pad/docbarstates.png | 1077 ++++ static/img/jun09/pad/docpaneledge2.png | Bin 0 -> 635 bytes static/img/jun09/pad/docpanelmiddle2.png | Bin 0 -> 295 bytes static/img/jun09/pad/editbar_background.gif | Bin 0 -> 181 bytes .../img/jun09/pad/editbar_background_left.gif | Bin 0 -> 204 bytes .../jun09/pad/editbar_background_right.gif | Bin 0 -> 867 bytes static/img/jun09/pad/editbar_bold.gif | Bin 0 -> 224 bytes .../img/jun09/pad/editbar_clearauthorship.gif | Bin 0 -> 397 bytes static/img/jun09/pad/editbar_groupleft.gif | Bin 0 -> 186 bytes static/img/jun09/pad/editbar_groupright.gif | Bin 0 -> 185 bytes static/img/jun09/pad/editbar_indent.gif | Bin 0 -> 99 bytes .../jun09/pad/editbar_insertunorderedlist.gif | Bin 0 -> 147 bytes static/img/jun09/pad/editbar_italic.gif | Bin 0 -> 201 bytes static/img/jun09/pad/editbar_outdent.gif | Bin 0 -> 99 bytes static/img/jun09/pad/editbar_redo.gif | Bin 0 -> 232 bytes static/img/jun09/pad/editbar_save.gif | Bin 0 -> 139 bytes .../img/jun09/pad/editbar_strikethrough.gif | Bin 0 -> 336 bytes static/img/jun09/pad/editbar_underline.gif | Bin 0 -> 223 bytes static/img/jun09/pad/editbar_undo.gif | Bin 0 -> 230 bytes static/img/jun09/pad/feedbackbox2.gif | Bin 0 -> 6262 bytes static/img/jun09/pad/fileicons.gif | Bin 0 -> 1397 bytes static/img/jun09/pad/hdraggie.gif | Bin 0 -> 802 bytes static/img/jun09/pad/icon_import_export.gif | Bin 0 -> 70 bytes static/img/jun09/pad/icon_pad_options.gif | Bin 0 -> 67 bytes static/img/jun09/pad/icon_saved_revisions.gif | Bin 0 -> 81 bytes static/img/jun09/pad/icon_time_slider.gif | Bin 0 -> 71 bytes static/img/jun09/pad/inviteshare2.gif | Bin 0 -> 1836 bytes static/img/jun09/pad/maximize_maximized.png | Bin 0 -> 604 bytes static/img/jun09/pad/maximize_normal.png | Bin 0 -> 328 bytes static/img/jun09/pad/ok_or_cancel.gif | Bin 0 -> 1630 bytes static/img/jun09/pad/overlay.png | 1077 ++++ static/img/jun09/pad/overlay2.png | Bin 0 -> 149 bytes static/img/jun09/pad/padtop5.gif | Bin 0 -> 3872 bytes static/img/jun09/pad/padtopback2.gif | Bin 0 -> 372 bytes static/img/jun09/pad/public.gif | Bin 0 -> 1034 bytes static/img/jun09/pad/roundcorner_left.gif | Bin 0 -> 123 bytes .../jun09/pad/roundcorner_right_orange.gif | Bin 0 -> 171 bytes static/img/jun09/pad/savedrevarrows.gif | Bin 0 -> 866 bytes static/img/jun09/pad/savedrevsgfx2.gif | Bin 0 -> 1904 bytes static/img/jun09/pad/sharebox4.gif | Bin 0 -> 5788 bytes static/img/jun09/pad/sharedistri.gif | Bin 0 -> 85 bytes static/img/jun09/pad/vdraggie.gif | Bin 0 -> 3413 bytes static/img/may09/leftarrow2.gif | Bin 0 -> 950 bytes static/img/misc/status-ball.gif | Bin 0 -> 1553 bytes static/js/ace.js | 253 + static/js/ace.js.old | 30 + static/js/ace.js.old.firsttry | 252 + static/js/ace2_common.js | 115 + static/js/ace2_inner.js | 4588 +++++++++++++++++ static/js/changesettracker.js | 170 + static/js/collab_client.js | 666 +++ static/js/colorutils.js | 92 + static/js/contentcollector.js | 520 ++ static/js/cssmanager.js | 88 + static/js/domline.js | 232 + static/js/draggable.js | 151 + static/js/easysync2.js | 1968 +++++++ static/js/jquery-1.3.2.js | 4376 ++++++++++++++++ static/js/json2.js | 480 ++ static/js/json2.js.old | 498 ++ static/js/linestylefilter.js | 290 ++ static/js/pad2.js | 567 ++ static/js/pad_chat.js | 295 ++ static/js/pad_connectionstatus.js | 53 + static/js/pad_cookie.js | 101 + static/js/pad_docbar.js | 347 ++ static/js/pad_editbar.js | 122 + static/js/pad_editor.js | 124 + static/js/pad_impexp.js | 187 + static/js/pad_modals.js | 306 ++ static/js/pad_savedrevs.js | 408 ++ static/js/pad_userlist.js | 605 +++ static/js/pad_utils.js | 363 ++ static/js/plugins.js | 22 + static/js/skiplist.js | 347 ++ static/js/undo-xpopup.js | 25 + static/js/undomodule.js | 258 + static/js/virtual_lines.js | 287 ++ static/padhtml | 501 ++ tests/PadManager_tests.js | 37 + tests/README | 1 + 207 files changed, 35989 insertions(+) create mode 100755 bin/generateJsDoc.sh create mode 100755 bin/run.sh create mode 100755 bin/runTests.sh create mode 100644 doc/easysync/easysync-notes.txt create mode 100644 doc/easysync/easysync.odt create mode 100644 doc/jsdoc-toolkit/README.txt create mode 100644 doc/jsdoc-toolkit/app/frame.js create mode 100644 doc/jsdoc-toolkit/app/frame/Chain.js create mode 100644 doc/jsdoc-toolkit/app/frame/Dumper.js create mode 100644 doc/jsdoc-toolkit/app/frame/Hash.js create mode 100644 doc/jsdoc-toolkit/app/frame/Link.js create mode 100644 doc/jsdoc-toolkit/app/frame/Namespace.js create mode 100644 doc/jsdoc-toolkit/app/frame/Opt.js create mode 100644 doc/jsdoc-toolkit/app/frame/Reflection.js create mode 100644 doc/jsdoc-toolkit/app/frame/String.js create mode 100644 doc/jsdoc-toolkit/app/frame/Testrun.js create mode 100644 doc/jsdoc-toolkit/app/handlers/FOODOC.js create mode 100755 doc/jsdoc-toolkit/app/handlers/XMLDOC.js create mode 100755 doc/jsdoc-toolkit/app/handlers/XMLDOC/DomReader.js create mode 100755 doc/jsdoc-toolkit/app/handlers/XMLDOC/XMLDoc.js create mode 100755 doc/jsdoc-toolkit/app/handlers/XMLDOC/XMLParse.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/DocComment.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/DocTag.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/Lang.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/Parser.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/Symbol.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/TextStream.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/Token.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/Util.js create mode 100644 doc/jsdoc-toolkit/app/lib/JSDOC/Walker.js create mode 100644 doc/jsdoc-toolkit/app/main.js create mode 100644 doc/jsdoc-toolkit/app/plugins/commentSrcJson.js create mode 100644 doc/jsdoc-toolkit/app/plugins/frameworkPrototype.js create mode 100644 doc/jsdoc-toolkit/app/plugins/functionCall.js create mode 100644 doc/jsdoc-toolkit/app/plugins/publishSrcHilite.js create mode 100644 doc/jsdoc-toolkit/app/plugins/symbolLink.js create mode 100644 doc/jsdoc-toolkit/app/plugins/tagParamConfig.js create mode 100644 doc/jsdoc-toolkit/app/plugins/tagSynonyms.js create mode 100644 doc/jsdoc-toolkit/app/run.js create mode 100644 doc/jsdoc-toolkit/app/t/TestDoc.js create mode 100644 doc/jsdoc-toolkit/app/t/runner.js create mode 100644 doc/jsdoc-toolkit/app/test.js create mode 100644 doc/jsdoc-toolkit/app/test/addon.js create mode 100644 doc/jsdoc-toolkit/app/test/anon_inner.js create mode 100644 doc/jsdoc-toolkit/app/test/augments.js create mode 100644 doc/jsdoc-toolkit/app/test/augments2.js create mode 100644 doc/jsdoc-toolkit/app/test/borrows.js create mode 100644 doc/jsdoc-toolkit/app/test/borrows2.js create mode 100644 doc/jsdoc-toolkit/app/test/config.js create mode 100644 doc/jsdoc-toolkit/app/test/constructs.js create mode 100644 doc/jsdoc-toolkit/app/test/encoding.js create mode 100644 doc/jsdoc-toolkit/app/test/encoding_other.js create mode 100644 doc/jsdoc-toolkit/app/test/event.js create mode 100644 doc/jsdoc-toolkit/app/test/exports.js create mode 100644 doc/jsdoc-toolkit/app/test/functions_anon.js create mode 100644 doc/jsdoc-toolkit/app/test/functions_nested.js create mode 100644 doc/jsdoc-toolkit/app/test/global.js create mode 100644 doc/jsdoc-toolkit/app/test/globals.js create mode 100644 doc/jsdoc-toolkit/app/test/ignore.js create mode 100644 doc/jsdoc-toolkit/app/test/inner.js create mode 100644 doc/jsdoc-toolkit/app/test/jsdoc_test.js create mode 100644 doc/jsdoc-toolkit/app/test/lend.js create mode 100644 doc/jsdoc-toolkit/app/test/memberof.js create mode 100644 doc/jsdoc-toolkit/app/test/memberof_constructor.js create mode 100644 doc/jsdoc-toolkit/app/test/module.js create mode 100644 doc/jsdoc-toolkit/app/test/name.js create mode 100644 doc/jsdoc-toolkit/app/test/namespace_nested.js create mode 100644 doc/jsdoc-toolkit/app/test/nocode.js create mode 100644 doc/jsdoc-toolkit/app/test/oblit_anon.js create mode 100644 doc/jsdoc-toolkit/app/test/overview.js create mode 100644 doc/jsdoc-toolkit/app/test/param_inline.js create mode 100644 doc/jsdoc-toolkit/app/test/params_optional.js create mode 100644 doc/jsdoc-toolkit/app/test/prototype.js create mode 100644 doc/jsdoc-toolkit/app/test/prototype_nested.js create mode 100644 doc/jsdoc-toolkit/app/test/prototype_oblit.js create mode 100644 doc/jsdoc-toolkit/app/test/prototype_oblit_constructor.js create mode 100644 doc/jsdoc-toolkit/app/test/public.js create mode 100644 doc/jsdoc-toolkit/app/test/scripts/code.js create mode 100644 doc/jsdoc-toolkit/app/test/scripts/notcode.txt create mode 100644 doc/jsdoc-toolkit/app/test/shared.js create mode 100644 doc/jsdoc-toolkit/app/test/shared2.js create mode 100644 doc/jsdoc-toolkit/app/test/shortcuts.js create mode 100644 doc/jsdoc-toolkit/app/test/static_this.js create mode 100644 doc/jsdoc-toolkit/app/test/synonyms.js create mode 100644 doc/jsdoc-toolkit/app/test/tosource.js create mode 100644 doc/jsdoc-toolkit/app/test/variable_redefine.js create mode 100644 doc/jsdoc-toolkit/changes.txt create mode 100644 doc/jsdoc-toolkit/conf/sample.conf create mode 100644 doc/jsdoc-toolkit/java/build.xml create mode 100644 doc/jsdoc-toolkit/java/build_1.4.xml create mode 100644 doc/jsdoc-toolkit/java/classes/js.jar create mode 100755 doc/jsdoc-toolkit/java/src/JsDebugRun.java create mode 100644 doc/jsdoc-toolkit/java/src/JsRun.java create mode 100644 doc/jsdoc-toolkit/jsdebug.jar create mode 100644 doc/jsdoc-toolkit/jsrun.jar create mode 100644 doc/jsdoc-toolkit/jsrun.sh create mode 100644 doc/jsdoc-toolkit/templates/jsdoc/allclasses.tmpl create mode 100644 doc/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl create mode 100644 doc/jsdoc-toolkit/templates/jsdoc/class.tmpl create mode 100644 doc/jsdoc-toolkit/templates/jsdoc/index.tmpl create mode 100644 doc/jsdoc-toolkit/templates/jsdoc/publish.js create mode 100644 doc/jsdoc-toolkit/templates/jsdoc/static/default.css create mode 100644 doc/jsdoc-toolkit/templates/jsdoc/static/header.html create mode 100644 doc/jsdoc-toolkit/templates/jsdoc/static/index.html create mode 100644 doc/jsdoc-toolkit/templates/jsdoc/symbol.tmpl create mode 100644 doc/jsdoc/README create mode 100644 node/AttributePoolFactory.js create mode 100644 node/AuthorManager.js create mode 100644 node/Changeset.js create mode 100644 node/MessageHandler.js create mode 100644 node/PadManager.js create mode 100644 node/easysync_tests.js create mode 100644 node/server.js create mode 100644 static/css/editor.css create mode 100644 static/css/inner.css create mode 100644 static/css/pad2_ejs.css create mode 100644 static/css/syntax.css create mode 100644 static/img/jun09/pad/backgrad.gif create mode 100644 static/img/jun09/pad/colorpicker.gif create mode 100644 static/img/jun09/pad/docbarstates.png create mode 100644 static/img/jun09/pad/docpaneledge2.png create mode 100644 static/img/jun09/pad/docpanelmiddle2.png create mode 100644 static/img/jun09/pad/editbar_background.gif create mode 100644 static/img/jun09/pad/editbar_background_left.gif create mode 100644 static/img/jun09/pad/editbar_background_right.gif create mode 100644 static/img/jun09/pad/editbar_bold.gif create mode 100644 static/img/jun09/pad/editbar_clearauthorship.gif create mode 100644 static/img/jun09/pad/editbar_groupleft.gif create mode 100644 static/img/jun09/pad/editbar_groupright.gif create mode 100644 static/img/jun09/pad/editbar_indent.gif create mode 100644 static/img/jun09/pad/editbar_insertunorderedlist.gif create mode 100644 static/img/jun09/pad/editbar_italic.gif create mode 100644 static/img/jun09/pad/editbar_outdent.gif create mode 100644 static/img/jun09/pad/editbar_redo.gif create mode 100644 static/img/jun09/pad/editbar_save.gif create mode 100644 static/img/jun09/pad/editbar_strikethrough.gif create mode 100644 static/img/jun09/pad/editbar_underline.gif create mode 100644 static/img/jun09/pad/editbar_undo.gif create mode 100644 static/img/jun09/pad/feedbackbox2.gif create mode 100644 static/img/jun09/pad/fileicons.gif create mode 100644 static/img/jun09/pad/hdraggie.gif create mode 100644 static/img/jun09/pad/icon_import_export.gif create mode 100644 static/img/jun09/pad/icon_pad_options.gif create mode 100644 static/img/jun09/pad/icon_saved_revisions.gif create mode 100644 static/img/jun09/pad/icon_time_slider.gif create mode 100644 static/img/jun09/pad/inviteshare2.gif create mode 100644 static/img/jun09/pad/maximize_maximized.png create mode 100644 static/img/jun09/pad/maximize_normal.png create mode 100644 static/img/jun09/pad/ok_or_cancel.gif create mode 100644 static/img/jun09/pad/overlay.png create mode 100644 static/img/jun09/pad/overlay2.png create mode 100644 static/img/jun09/pad/padtop5.gif create mode 100644 static/img/jun09/pad/padtopback2.gif create mode 100644 static/img/jun09/pad/public.gif create mode 100644 static/img/jun09/pad/roundcorner_left.gif create mode 100644 static/img/jun09/pad/roundcorner_right_orange.gif create mode 100644 static/img/jun09/pad/savedrevarrows.gif create mode 100644 static/img/jun09/pad/savedrevsgfx2.gif create mode 100644 static/img/jun09/pad/sharebox4.gif create mode 100644 static/img/jun09/pad/sharedistri.gif create mode 100644 static/img/jun09/pad/vdraggie.gif create mode 100644 static/img/may09/leftarrow2.gif create mode 100644 static/img/misc/status-ball.gif create mode 100644 static/js/ace.js create mode 100644 static/js/ace.js.old create mode 100644 static/js/ace.js.old.firsttry create mode 100644 static/js/ace2_common.js create mode 100644 static/js/ace2_inner.js create mode 100644 static/js/changesettracker.js create mode 100644 static/js/collab_client.js create mode 100644 static/js/colorutils.js create mode 100644 static/js/contentcollector.js create mode 100644 static/js/cssmanager.js create mode 100644 static/js/domline.js create mode 100644 static/js/draggable.js create mode 100644 static/js/easysync2.js create mode 100644 static/js/jquery-1.3.2.js create mode 100644 static/js/json2.js create mode 100644 static/js/json2.js.old create mode 100644 static/js/linestylefilter.js create mode 100644 static/js/pad2.js create mode 100644 static/js/pad_chat.js create mode 100644 static/js/pad_connectionstatus.js create mode 100644 static/js/pad_cookie.js create mode 100644 static/js/pad_docbar.js create mode 100644 static/js/pad_editbar.js create mode 100644 static/js/pad_editor.js create mode 100644 static/js/pad_impexp.js create mode 100644 static/js/pad_modals.js create mode 100644 static/js/pad_savedrevs.js create mode 100644 static/js/pad_userlist.js create mode 100644 static/js/pad_utils.js create mode 100644 static/js/plugins.js create mode 100644 static/js/skiplist.js create mode 100644 static/js/undo-xpopup.js create mode 100644 static/js/undomodule.js create mode 100644 static/js/virtual_lines.js create mode 100644 static/padhtml create mode 100644 tests/PadManager_tests.js create mode 100644 tests/README diff --git a/bin/generateJsDoc.sh b/bin/generateJsDoc.sh new file mode 100755 index 000000000..aff696f83 --- /dev/null +++ b/bin/generateJsDoc.sh @@ -0,0 +1,16 @@ +#!/bin/sh +if [ ! -x /usr/bin/java ]; then + echo "You need to install Java to generate the JSDocs!" + exit 1 +fi + +cd "../doc/jsdoc-toolkit" + +JSRUN="jsrun.jar" +RUNJS="app/run.js" +OUTPUT_DIR="../jsdoc" +NODE_DIR="../../node" +TEMPLATE_DIR="templates/jsdoc" + +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" diff --git a/bin/run.sh b/bin/run.sh new file mode 100755 index 000000000..dd45a9268 --- /dev/null +++ b/bin/run.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +#if [[ $EUID -eq 0 ]]; then +# echo "You shouldn't start LinePad as root!" 1>&2 +# exit 1 +#fi + +#if [ ! type -P node &>/dev/null ]; then +# echo "You have no node installed!" 1>&2 +# exit 1 +#fi +#|| { echo "I require foo but it's not installed. Aborting." >&2; exit 1; } + +cd ../node +authbind node server.js diff --git a/bin/runTests.sh b/bin/runTests.sh new file mode 100755 index 000000000..68ebde89a --- /dev/null +++ b/bin/runTests.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +type -P nodeunit &>/dev/null || { + echo "You need to install Nodeunit to run the tests!" >&2 + echo "You can install it with npm" >&2 + echo "Run: npm install nodeunit" >&2 + exit 1 +} + +nodeunit ../tests diff --git a/doc/easysync/easysync-notes.txt b/doc/easysync/easysync-notes.txt new file mode 100644 index 000000000..d3b3dc558 --- /dev/null +++ b/doc/easysync/easysync-notes.txt @@ -0,0 +1,133 @@ + + +Copied from the old Etherpad. Found in /infrastructure/ace/ + +Goals: + +- no unicode (for efficient escaping, sightliness) +- efficient operations for ACE and collab (attributed text, etc.) +- good for time-slider +- good for API +- line-ending aware +X more coherent (deleting or styling text merging with insertion) +- server-side syntax highlighting? +- unify author map with attribute pool +- unify attributed text with changeset rep +- not: reversible +- force final newline of document to be preserved + +- Unicode bad: + - ugly (hard to read) + - more complex to parse + - harder to store and transmit correctly + - doesn't save all that much space anyway + - blows up in size when string-escaped + - embarrassing for API + + +# Attributes: + +An "attribute" is a (key,value) pair such as (author,abc123456) or +(bold,true). Sometimes an attribute is treated as an instruction to +add that attribute, in which case an empty value means to remove it. +So (bold,) removes the "bold" attribute. Attributes are interned and +given numeric IDs, so the number "6" could represent "(bold,true)", +for example. This mapping is stored in an attribute "pool" which may +be shared by multiple changesets. + +Entries in the pool must be unique, so that attributes can be compared +by their IDs. Attribute names cannot contain commas. + +A changeset looks something like the following: + +Z:5g>1|5=2p=v*4*5+1$x + +With the corresponding pool containing these entries: + +... +4 -> (author,1059348573) +5 -> (bold,true) +... + +This changeset, together with the pool, represents inserting +a bold letter "x" into the middle of a line. The string consists of: + +- a letter Z (the "magic character" and format version identifier) +- a series of opcodes (punctuation) and numeric values in base 36 (the + alphanumerics) +- a dollar sign ($) +- a string of characters used by insertion operations (the "char bank") + +If we separate out the operations and convert the numbers to base 10, we get: + +Z :196 >1 |5=97 =31 *4 *5 +1 $"x" + +Here are descriptions of the operations, where capital letters are variables: + +":N" : Source text has length N (must be first op) +">N" : Final text is N (positive) characters longer than source text (must be second op) +"0" : Final text is same length as source text +"+N" : Insert N characters from the bank, none of them newlines +"-N" : Skip over (delete) N characters from the source text, none of them newlines +"=N" : Keep N characters from the source text, none of them newlines +"|L+N" : Insert N characters from the source text, containing L newlines. The last + character inserted MUST be a newline, but not the (new) document's final newline. +"|L-N" : Delete N characters from the source text, containing L newlines. The last + character inserted MUST be a newline, but not the (old) document's final newline. +"|L=N" : Keep N characters from the source text, containing L newlines. The last character + kept MUST be a newline, and the final newline of the document is allowed. +"*I" : Apply attribute I from the pool to the following +, =, |+, or |= command. + In other words, any number of * ops can come before a +, =, or | but not + between a | and the corresponding + or =. + If +, text is inserted having this attribute. If =, text is kept but with + the attribute applied as an attribute addition or removal. + Consecutive attributes must be sorted lexically by (key,value) with key + and value taken as strings. It's illegal to have duplicate keys + for (key,value) pairs that apply to the same text. It's illegal to + have an empty value for a key in the case of an insertion (+), the + pair should just be omitted. + +Characters from the source text that aren't accounted for are assumed to be kept +with the same attributes. + +Additional Constraints: + +- Consecutive +, -, and = ops of the same type that could be combined are not allowed. + Whether combination is possible depends on the attributes of the ops and whether + each is multiline or not. For example, two multiline deletions can never be + consecutive, nor can any insertion come after a non-multiline insertion with the + same attributes. +- "No-op" ops are not allowed, such as deleting 0 characters. However, attribute + applications that don't have any effect are allowed. +- Characters at the end of the source text cannot be explicitly kept with no changes; + if the change doesn't affect the last N characters, those "keep" ops must be left off. +- In any consecutive sequence of insertions (+) and deletions (-) with no keeps (=), + the deletions must come before the insertions. +- The document text before and after will always end with a newline. This policy avoids + a lot of special-casing of the end of the document. If a final newline is + always added when importing text and removed when exporting text, then the + changeset representation can be used to process text files that may or may not + have a final newline. + +Attribution string: + +An "attribution string" is a series of inserts with no deletions or keeps. +For example, "*3+8|1+5" describes the attributes of a string of length 13, +where the first 8 chars have attribute 3 and the next 5 chars have no +attributes, with the last of these 5 chars being a newline. Constraints +apply similar to those affecting changesets, but the restriction about +the final newline of the new document being added doesn't apply. + +Attributes in an attribution string cannot be empty, like "(bold,)", they should +instead be absent. + + + + + +------- +Considerations: + +- composing changesets/attributions with different pools +- generalizing "applyToAttribution" to make "mutateAttributionLines" and "compose" diff --git a/doc/easysync/easysync.odt b/doc/easysync/easysync.odt new file mode 100644 index 0000000000000000000000000000000000000000..37a99f7db9edfdb6ad0a21f375da41cf1d30c44d GIT binary patch literal 23032 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 literal 0 HcmV?d00001 diff --git a/doc/jsdoc-toolkit/README.txt b/doc/jsdoc-toolkit/README.txt new file mode 100644 index 000000000..3782da88d --- /dev/null +++ b/doc/jsdoc-toolkit/README.txt @@ -0,0 +1,183 @@ +====================================================================== + +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 new file mode 100644 index 000000000..1beb40559 --- /dev/null +++ b/doc/jsdoc-toolkit/app/frame.js @@ -0,0 +1,33 @@ +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 new file mode 100644 index 000000000..506469d18 --- /dev/null +++ b/doc/jsdoc-toolkit/app/frame/Chain.js @@ -0,0 +1,102 @@ +/**@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 new file mode 100644 index 000000000..d8b007b1d --- /dev/null +++ b/doc/jsdoc-toolkit/app/frame/Dumper.js @@ -0,0 +1,144 @@ +/** + * @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 new file mode 100644 index 000000000..62cfad646 --- /dev/null +++ b/doc/jsdoc-toolkit/app/frame/Hash.js @@ -0,0 +1,84 @@ +/** + @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 new file mode 100644 index 000000000..ef5dc0a4d --- /dev/null +++ b/doc/jsdoc-toolkit/app/frame/Link.js @@ -0,0 +1,153 @@ +/** 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 new file mode 100644 index 000000000..fa1e41d10 --- /dev/null +++ b/doc/jsdoc-toolkit/app/frame/Namespace.js @@ -0,0 +1,10 @@ +_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 new file mode 100644 index 000000000..352f15903 --- /dev/null +++ b/doc/jsdoc-toolkit/app/frame/Opt.js @@ -0,0 +1,134 @@ +/** @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 new file mode 100644 index 000000000..0968f1c64 --- /dev/null +++ b/doc/jsdoc-toolkit/app/frame/Reflection.js @@ -0,0 +1,26 @@ +/**@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 new file mode 100644 index 000000000..c183c27d5 --- /dev/null +++ b/doc/jsdoc-toolkit/app/frame/String.js @@ -0,0 +1,93 @@ +/** + @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 new file mode 100644 index 000000000..b208f55b1 --- /dev/null +++ b/doc/jsdoc-toolkit/app/handlers/FOODOC.js @@ -0,0 +1,26 @@ +/** + 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 new file mode 100755 index 000000000..40f87b355 --- /dev/null +++ b/doc/jsdoc-toolkit/app/handlers/XMLDOC.js @@ -0,0 +1,26 @@ +/** + * 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 new file mode 100755 index 000000000..240563daf --- /dev/null +++ b/doc/jsdoc-toolkit/app/handlers/XMLDOC/DomReader.js @@ -0,0 +1,159 @@ +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 new file mode 100755 index 000000000..e9b3e3ce8 --- /dev/null +++ b/doc/jsdoc-toolkit/app/handlers/XMLDOC/XMLDoc.js @@ -0,0 +1,16 @@ +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 new file mode 100755 index 000000000..78e8f4556 --- /dev/null +++ b/doc/jsdoc-toolkit/app/handlers/XMLDOC/XMLParse.js @@ -0,0 +1,292 @@ +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 new file mode 100644 index 000000000..ca59089a7 --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC.js @@ -0,0 +1,104 @@ +/** + @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 new file mode 100644 index 000000000..c6c8d7d4f --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC/DocComment.js @@ -0,0 +1,200 @@ +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 new file mode 100644 index 000000000..77ec07cac --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC/DocTag.js @@ -0,0 +1,294 @@ +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 new file mode 100644 index 000000000..2c4bfb82b --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js @@ -0,0 +1,126 @@ +/** + @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 new file mode 100644 index 000000000..bcaebc9c5 --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js @@ -0,0 +1,109 @@ +/** + @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 new file mode 100644 index 000000000..62919d7d8 --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC/Lang.js @@ -0,0 +1,144 @@ +/** + @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 new file mode 100644 index 000000000..f407dd1a1 --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC/Parser.js @@ -0,0 +1,145 @@ +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 new file mode 100644 index 000000000..9c9119310 --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js @@ -0,0 +1,33 @@ +/** + @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 new file mode 100644 index 000000000..c5b76a860 --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC/Symbol.js @@ -0,0 +1,645 @@ +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 new file mode 100644 index 000000000..82657e44e --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js @@ -0,0 +1,241 @@ +/** @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 new file mode 100644 index 000000000..ccc48a87d --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC/TextStream.js @@ -0,0 +1,41 @@ + +/** + @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 new file mode 100644 index 000000000..fb7f9d949 --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC/Token.js @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..9f658fb9f --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js @@ -0,0 +1,332 @@ +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 new file mode 100644 index 000000000..1eeb44cbb --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js @@ -0,0 +1,133 @@ +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 new file mode 100644 index 000000000..6d7edb368 --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC/Util.js @@ -0,0 +1,32 @@ +/** + * @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 new file mode 100644 index 000000000..befec4d35 --- /dev/null +++ b/doc/jsdoc-toolkit/app/lib/JSDOC/Walker.js @@ -0,0 +1,474 @@ +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 new file mode 100644 index 000000000..9b78182c1 --- /dev/null +++ b/doc/jsdoc-toolkit/app/main.js @@ -0,0 +1,111 @@ +/** + * @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 new file mode 100644 index 000000000..e826b5722 --- /dev/null +++ b/doc/jsdoc-toolkit/app/plugins/commentSrcJson.js @@ -0,0 +1,20 @@ +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 new file mode 100644 index 000000000..9c417518b --- /dev/null +++ b/doc/jsdoc-toolkit/app/plugins/frameworkPrototype.js @@ -0,0 +1,16 @@ +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 new file mode 100644 index 000000000..6f87705ee --- /dev/null +++ b/doc/jsdoc-toolkit/app/plugins/functionCall.js @@ -0,0 +1,10 @@ +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 new file mode 100644 index 000000000..65514f2c9 --- /dev/null +++ b/doc/jsdoc-toolkit/app/plugins/publishSrcHilite.js @@ -0,0 +1,62 @@ +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 new file mode 100644 index 000000000..c87f1ca7b --- /dev/null +++ b/doc/jsdoc-toolkit/app/plugins/symbolLink.js @@ -0,0 +1,10 @@ +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 new file mode 100644 index 000000000..3ea8a1be2 --- /dev/null +++ b/doc/jsdoc-toolkit/app/plugins/tagParamConfig.js @@ -0,0 +1,31 @@ +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 new file mode 100644 index 000000000..49a874f19 --- /dev/null +++ b/doc/jsdoc-toolkit/app/plugins/tagSynonyms.js @@ -0,0 +1,43 @@ +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 new file mode 100644 index 000000000..1f875cdbb --- /dev/null +++ b/doc/jsdoc-toolkit/app/run.js @@ -0,0 +1,348 @@ +/** + * @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 new file mode 100644 index 000000000..c0768b71c --- /dev/null +++ b/doc/jsdoc-toolkit/app/t/TestDoc.js @@ -0,0 +1,144 @@ +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 new file mode 100644 index 000000000..3f9fb4c96 --- /dev/null +++ b/doc/jsdoc-toolkit/app/t/runner.js @@ -0,0 +1,13 @@ +// 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 new file mode 100644 index 000000000..787d84f72 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test.js @@ -0,0 +1,325 @@ +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 new file mode 100644 index 000000000..888620533 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/addon.js @@ -0,0 +1,24 @@ +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 new file mode 100644 index 000000000..227eeee55 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/anon_inner.js @@ -0,0 +1,14 @@ +/** + * @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 new file mode 100644 index 000000000..12e706ebc --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/augments.js @@ -0,0 +1,31 @@ +/** +@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 new file mode 100644 index 000000000..e8388f0f8 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/augments2.js @@ -0,0 +1,26 @@ +/** +@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 new file mode 100644 index 000000000..a5d8ea4aa --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/borrows.js @@ -0,0 +1,46 @@ +/** +@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 new file mode 100644 index 000000000..c0d5ea21f --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/borrows2.js @@ -0,0 +1,23 @@ +// 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 new file mode 100644 index 000000000..0748a210a --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/config.js @@ -0,0 +1,22 @@ +/** + * @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 new file mode 100644 index 000000000..cca5dbd38 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/constructs.js @@ -0,0 +1,18 @@ +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 new file mode 100644 index 000000000..ba6421931 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/encoding.js @@ -0,0 +1,10 @@ + +/** + * @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 new file mode 100644 index 000000000..b144da4cf --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/encoding_other.js @@ -0,0 +1,12 @@ + +/** + * @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 new file mode 100644 index 000000000..7e41d6f63 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/event.js @@ -0,0 +1,54 @@ +/** + * @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 new file mode 100644 index 000000000..63a87cb4d --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/exports.js @@ -0,0 +1,14 @@ +/** @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 new file mode 100644 index 000000000..e9dd6c1be --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/functions_anon.js @@ -0,0 +1,39 @@ +/** 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 new file mode 100644 index 000000000..f044fafee --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/functions_nested.js @@ -0,0 +1,33 @@ +/** @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 new file mode 100644 index 000000000..5ea489496 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/global.js @@ -0,0 +1,13 @@ +/** 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 new file mode 100644 index 000000000..3f83fb1f9 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/globals.js @@ -0,0 +1,25 @@ +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 new file mode 100644 index 000000000..d3fac9ed5 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/ignore.js @@ -0,0 +1,10 @@ +/** + * 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 new file mode 100644 index 000000000..37cfa9dc2 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/inner.js @@ -0,0 +1,16 @@ +/** + * @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 new file mode 100644 index 000000000..081771285 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/jsdoc_test.js @@ -0,0 +1,477 @@ +/** + * @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 new file mode 100644 index 000000000..92b15d5ad --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/lend.js @@ -0,0 +1,33 @@ + /** @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 new file mode 100644 index 000000000..883bbdeb0 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/memberof.js @@ -0,0 +1,19 @@ +/** @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 new file mode 100644 index 000000000..80fde735c --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/memberof_constructor.js @@ -0,0 +1,17 @@ +/** @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 new file mode 100644 index 000000000..5b3fe42c5 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/module.js @@ -0,0 +1,17 @@ +/** @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 new file mode 100644 index 000000000..e88a51a71 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/name.js @@ -0,0 +1,19 @@ +/** + @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 new file mode 100644 index 000000000..46cafa2fa --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/namespace_nested.js @@ -0,0 +1,23 @@ +/** + @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 new file mode 100644 index 000000000..1cf99bc98 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/nocode.js @@ -0,0 +1,13 @@ +/**#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 new file mode 100644 index 000000000..8d9e9413e --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/oblit_anon.js @@ -0,0 +1,20 @@ +/** 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 new file mode 100644 index 000000000..1dfc09b1f --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/overview.js @@ -0,0 +1,20 @@ +/** + * @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 new file mode 100644 index 000000000..09845b283 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/param_inline.js @@ -0,0 +1,37 @@ +/** + @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 new file mode 100644 index 000000000..18bf59829 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/params_optional.js @@ -0,0 +1,8 @@ + +/** + * @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 new file mode 100644 index 000000000..114700837 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/prototype.js @@ -0,0 +1,17 @@ +/** @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 new file mode 100644 index 000000000..e8ca1ced2 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/prototype_nested.js @@ -0,0 +1,9 @@ +/** @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 new file mode 100644 index 000000000..6cfc39caf --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/prototype_oblit.js @@ -0,0 +1,13 @@ +/** @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 new file mode 100644 index 000000000..924824864 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/prototype_oblit_constructor.js @@ -0,0 +1,24 @@ +/** @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 new file mode 100644 index 000000000..35d34f6f0 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/public.js @@ -0,0 +1,10 @@ +/**@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 new file mode 100644 index 000000000..e9d7ed2ec --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/scripts/code.js @@ -0,0 +1,5 @@ +/** + @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 new file mode 100644 index 000000000..fcd737e77 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/scripts/notcode.txt @@ -0,0 +1,5 @@ +(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 new file mode 100644 index 000000000..e1c277a6f --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/shared.js @@ -0,0 +1,42 @@ + +/** + * 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 new file mode 100644 index 000000000..3f7736a77 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/shared2.js @@ -0,0 +1,2 @@ +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 new file mode 100644 index 000000000..f738f1e1c --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/shortcuts.js @@ -0,0 +1,22 @@ +// /**#=+ +// * { +// * '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 new file mode 100644 index 000000000..9407b20f3 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/static_this.js @@ -0,0 +1,13 @@ +/** 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 new file mode 100644 index 000000000..09066b98f --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/synonyms.js @@ -0,0 +1,31 @@ +/** + @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 new file mode 100644 index 000000000..706d47652 --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/tosource.js @@ -0,0 +1,23 @@ +/** + * @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 new file mode 100644 index 000000000..2c07da09a --- /dev/null +++ b/doc/jsdoc-toolkit/app/test/variable_redefine.js @@ -0,0 +1,14 @@ +/** @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 new file mode 100644 index 000000000..d664750f3 --- /dev/null +++ b/doc/jsdoc-toolkit/changes.txt @@ -0,0 +1,107 @@ +== 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 new file mode 100644 index 000000000..ad0f08e65 --- /dev/null +++ b/doc/jsdoc-toolkit/conf/sample.conf @@ -0,0 +1,31 @@ +/* + 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 new file mode 100644 index 000000000..bb845ce3a --- /dev/null +++ b/doc/jsdoc-toolkit/java/build.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 new file mode 100644 index 000000000..ab408a4c4 --- /dev/null +++ b/doc/jsdoc-toolkit/java/build_1.4.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/jsdoc-toolkit/java/classes/js.jar b/doc/jsdoc-toolkit/java/classes/js.jar new file mode 100644 index 0000000000000000000000000000000000000000..0352cb180c120868ddbc31b4f8e7319d2f26ea62 GIT binary patch literal 819369 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�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%0D0}ve&kyVxrmLD3a%OoJGjT)4!e~>YoAf7U8CGl< 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

jQEKzki`gN5I zeHCPails$ed`XhKb74ii(-S!GmDEwYn4fYWKs_d3i4!&$5Ttp zt{QN1Y6!3^q*(JHJU?i!x+|T>4v{1@SRRVIQRVm8}L@C@uDXnh`h|MR<5HH;u&i-|m6SCcS zhQpQGvSqcd}Deel=9hhY?+iS%`KbpYTOteP)?(rl`%s5%PdPLQbkx@Eua3mjai< zPx?hctRR+;6XL`&L6h`GF{z+dsFJ^wpJhb_ey5fst$={c@N9lL`#1Ncvjk)CnDyZ| z=P*XB8_+tU#Yf(>aAv@ro<+BX*Q|93{yg}cZwMRo75O!#7=F`D{lL8+M0Dsd5V@}+&Toaf@<~&-#R!qz9E4Zd%3wl9rq${A4x94g9Nl3y3^ks4Ibg@52dk178_5oqr0? zRXpH_upI!!=*KULAwMgh4T34OW)=8WvoMxhcu~SXss4_s3BA_|LO9Y2#_U9-x(w*- zg`@ML-@JZu$Y$?*+WP(Cimao+?6POJa*CFArOlaX7j(2X>fyqTFX(;?=tzvqN6V3Q zzXR^bOkL#d3cWsha=~9!re>e_<;z@u_3p@}FNS!P;_CA{73@jJ+ehOXvwdXX7mB-O ze#GdNiOZDIHYhjlTmWvM8H?c=Y4ZDh48TFplNSnsZXZ)JnMJIlDre~7ds@-5T%env zprE0G>j=F5Vreg~OD;(Q0OJ)O-T!%SM3f%)FnJNhd-phUc=WY`|7VihP{l0|@0mYWS zEybK-EB7nnCFnMpS$pXpwlHH_h`AkB@f@}zr-TL72UJj^1+<%1P~8xFIxtmAsCXNM z#cSA?iv750pK69rsa1Wc---2_OD3!S_u_!KsDAbaq*^$&H6w=+|l_oW<6*wAs zI-Ph>b+Ud{pqK;9n@MpT04RDzy73F4sFPE`@?|lD~6Bi?$cTomOb%+ zY=4}Qz&E2bFO1u&z^?1H?PlbmUpJr~(omLNX_ebqV=rs-l$}+(L?TBtQ&3~v{xz%H zdcJd@g80N15$+99{^UJcXyi%NJ3)OUQ(w>qc-cQ#TFjQX1DLxfH%@tb!oO#Fi{SUd z`Sx`m8FwUd`w)F5;PZX5_zrd!Qa`bLrtRljKM{Rqa~lrr*N8VSQG+;T51l(OrZJ7U zK8AT_P(~f;>m$9QsNlk};35~>bN`M64WaVLTpoElVxvcSz5Tvph(ql?K>By=2w{MP zSN}M)+y|CB-q}BTIke1g8tH?CoY8TKg@F33vB^UkJxcUDNGH~?Bd(f1%{r9yyI611 zHObspL&y@U_BR3NX-> zf?RJrNN}6bnc2qA#R60ZhF|UlH)2>5g&r`+-D07Z+1&%OUp5rEB@Y_NSh9()5_sYn z8X+E}zrnqoa93j03ma0LJb(#g^heY{5abUf4^`EAw)lZEY`|He zG6E5V)BZ>?7eV5JjF}24JHoLaO~lE@?F%L_#7thMx#Llk8BjLvDh{|>GmyZ-qw@%D zQf?kmJ6z%xJtW8ere53(mKie|DfL}w9NdzrdN8mt4)EllGX;H7?pnfi`5>oEM0Xiv zXQiX|j5M(Q0;#ScT1Iuj#;$7lyWk7<4x!Ebsa&NN(ssP0T-`F4V+KzxoWU``GITby z8Xxwe1g;;K*%R=7fClj(tKzR<&0^;Pyc6ivnS6ZDr#02Oc;^jK9deutqsVfrdt6_t z0TFn!V~FQPJj=q23^vW=(-fH0wLFgvV0+g|5+rxzY#N5`pOP#xExg>Es78vBi@@AD zk*M8#PHub;SkU{|Cd?Buop_#S8lO;cWCc1o=~!!(Lt0AD`>y|eBf=-)-*%$ozm$*< zBM~|x4CuQ&h0cjNe>wMSrH+mMJXT<+H~ja^Z7T?l3ictbH~m3h)6R`^wQKSSks>`t9eAD2P1HBws<9rYeLgDH z_h4;bJV8M@8nn#LkzxF(3>%!?yZ-_D^1&-#gWf$RrRbYvLHIYwQOWbLmH=5UZL&FH zpl7331s6}-udJp+E9>xNomuH9Su>NCnA>ZNUQ7yDlr@lJE_O4yo0_5N`GvLv8f9-> z>2871D;@HQhxz~khc-&8fs<Nrk7O6@lmQ zmiau_l6PXct`m(%(q)b!{pxvCX%w)e%fj&oYYy=Q1x#svOU%3<*iKIL&prDbWYLWJ zpjXl+_w2?pAN?P#1T=|8h{Xhv1sS4@A&qmbIY!FOJP9yfc}0d(wn6o{`_lfTyc^&3 z!$O~5t8z@hH8Nc8^l!lLbga6JJyBv>=4Zx?Nl*iHQDxTCe3i4*8RORbQlP(Z-3an- z2J!mxC`ro$RO&OE1gL~)VMy#up>Sba%w@p+TEJF@ltSmDa_9$M+<9LA9RR*oozi7A9BQucw&JF<0%|q4{I#_ajtj0MEv2K;^=W z9&sUOks<#T5msz?&l7E8_|5BpXP(*tg}|B}gmAI>Pw^EL=}QkcH28Z{s^3O&YA3h@ zdr0pV)1Jw;BcZ3x-2N}#@QA{`uQ3rkuQz6fdm{5lHPUnY2*5`NRxOC1TGEF1nEc+x zk}UmX#Cfc^-jEnN*lk0*9Q3Z76x1VbA#JIp0AI2te^N>Bw{4(hX~pnld9G^{x>&40 zi7E4I{EeVRXyUEdvVmmqDG&N~U#a(kaJ@z7zFuuRZpFo$<6T~CqEQLs!RXI}1i%^&rszmT=!7xGEi|~BX z|K{9O%GenkLOHj!p(K0c z7)WmkUqFOzL@vMu$Kf#J?bo0;4d*Xoa#Jv#P6v1cVa68m_CEL6zmbM^Z&T2wOy%lkML2q#L(uV6`j%*){q7D0c7 z%)_f)VmWeKB5WV69e?5Vxpk=N2(d>6S&PG?@M{AT^6AaFF%&Iq4giw zJrfd4p{zRNI}*bqPXC6o7gGR0;1gdTY8HgVA-msMIkKyVdvV0(-KjigQ)<2G%#WZ) zK>$(#N%p95cUSw6c8KyVVXjTEdZ#31-dNtThlzJAo_9D{lgo2)K(hrAIv{22@cGbH zip5hA5N`7O0b7XxgO?_5kDhGnX#wiQmx1w*yFM}}+-NxJCI{A_M!r zgQ+6)vp;V`usq`&?CbTb^}Ayb$Mhm9No>VqQ!hGebVq(l3*@`grY4>5lqZK*t*(KU z61}9Xo z5d~jDzhasTTcD?{QQDelOLP<40%d;-j|h63vTT$Hd0XvAy<%`%EnfaDU37Q6D<^hX zyd)Sc{eGP8N$bgj@sh@dO15-CZ$hD}bWv=NM3mz3kXq<|0M4mSK0?dVgUhdkBXwap z(tx0ckk~Tv&36@lUiMr-O;RtnvW_s5qZ!+XwLW!#AS^!Ir{;O7jnDR$#@yFOLEu-2 zeT@h2cZ~icBdRnPue1PwR87&#pj4(H@o5q%S#T;}j9`kXFyT@qX19)uowQl2)G!q$ zQd=_^rNUJ3LluF%%r&2dR`{FLJs~Y8J!VOEEi`^sH4v2O>`p0ow7==AtR)@>wfjzQ zr^u9<@PS}U9|GYBvDw~fsbJV=tK}g-hw1>q8}$yhOk17aum+3mA#p_Twd9ULLI_5s z|L1%WW93QhO{9-m?8)}o;5;mwDV!5vK+-5VK~Ox_lSJoCLEua&4p$K1!~mNrY>|Wm zr3qVDc;t`)=AAQDYT5wgL=~JBNfFv28Ovf?{AmSreBiPuA1AI>;3N)zM9i)7FaN~Q zgmSnSS#sKZ7KATK~7v#gv?Kq5`D-z*Z6~SD~0+mpOI!Xfo?ROP?|y;PxR{u zfJH^F&_h!^??e=nsBBTdlQD6q!lfox7}5}}HgSfM!c1_Ou0n6FSV&XKe2BA7a0QRcaz<5lz(_GVnN9 zh0+?sgiexLk~-ll77o(Gu++bXbdDac<#>{&Q`HnmN-tmA$H|$nqWZ7!7u0lKmtov% z(Ohxf2=6|w-}9l_9T=GkDVfS8;;a^Of!7f7HxOA@IOLPp&^Ktv1~N*`%S(T-*Hrv- zwhJ-;;Y*u)Ih2=1c z1@j2xO6Xm3v0B@V?VxY9YFFAZH3<9S-&#j+6ZU5KwU;}QorpZxZYO`E<K{iVfi z?u=?KEc8v7xXiAU>K8E(2lW;PoH{J8nAdhIRs;#qrRtj=*a1d@+S0sM#a957+kdc+`1l{Rn$fGD#;NisbF$LpQ0M58oPkH_61upbru6 zg*f%}NX#drj+{KotCCYQQ_dxxCP`koHe6sUP3Ym~e`MVnJ8eQifrF)z{1tv@21^vv+ETKRDWrtflEEfWFFo8|`2sxT{`fi}_n~=X4Ldtp0Q81h4_@K){;WkQb~S|`xEljFV}JLM?|%^a66|~9 zVBdAo07Qr2wdZ2+BLJ#HaiX6hL-L|sWcz{Pxe>4J;j5ybM3MR<^OPOLugT%;Mz5|o z=yxSNU8tk>x7zuSofy9K2c#YkVHDpO!?^_j?nr)XjRbbw$+75kx$TC=S&}do3olk0 zyrxEv)v*p^u@VEe!H-3jVD~sUp7MO3*Ca;UNAu`Qk)HtM(y646w9plkcMYj$&X6Q) zZV{=_F5M`n*sJyHwXAZ(t-33jNBOmrDw&Z}^fd2@dMCS|aI9!#%tVd&ti3eNRH*8z zVMAkgkc|=c7{|f9|03+2qB9GdZQ zT;aJkilD%OtRbj~1xmPj$yV?}&-GOf8F+Xl2 z$!=@}Dg&mR%e2)OoiKC5QDV7ye=Uc8!nV(??jFP|oCNV?e^K*Ujm-9_l9bZThbBEc z1xFx(uhSq@Wlo#PZXp@Dn8M1BS)Nz7xr`N-SDmjLX!`8W&(a*={A+3qx%s$KU$l)R zeH!*oZU%y@GX@qgnIukpphiHfS1&*0daE=Pa!DW~Jv^U*kE4xsA*D9244*kzW=nrK z53oU4yUq_f%R=8j2s}SHj!u^@fsBzAAF$PX&9GKQ#^q;u1dE}?m zKzRp$7o-N;dD!Z+>hMpcgZy{5XmTsnHLAt=Y=>^+S5=oy+$?j59(U}4CECqtTeOFp zFRFwVE^ah3zCj;`cRSQGCjQM{S?mk=b7XkfU3@I0*yWH43BoC7NU2!#Db^4x3BtuI zcWgM;iqURJEZRIb1ygx`=7keW^F<1ADqqP`33{8 z*b=(T%Fdj@7sRoT^}K900gFqt<1uKA|LwIIRUIj#5pT?TyOGQK8>jL%xk5aSvPa4Za|sSVW~l zELi>SHPW8k?fb+}p-u2SZHYA{@CuH0s2(i`Hk-)%Suwp9wC+}TnNsFXT5egSb(whz zG@e^JgB+max5V8qK(UU+zPioOf(0ks+NfPCbLs$VjmgAhAFCM^%b~g;-2=M^Vl#^E z#YNeVjlnm9>xae1H(rsedPJF7@`iAcE1S4@R& zn((N-Ce1q*LoFC!TW3Oy)uH^#knca0J^8Q9V#H5)!j3|YI|O5pE`__BYzZGIGs30{ zH3={F5l`z8+Fx$TKPURMZ1$J4glpJNbRY7b?ft;C~?Z57l1vn6BK*|#P z)0Bx9))I44eg$>KILc&A_GwE?&}x zEkOe`0uPa5UR&;v?YdntY;=GhSzpwzs+vEcEp6t-s?7Ys8$8o90^XsXzkj+y@9iHPSIaq8MbAMVbBq7#@DEc-yM?rT=Tq&x4gOku-*W|*t}ghuzm6Y^Yfv6Si`#b@$fLL{?*k(ruo@L1dpWTz4>I&>|cz z4XWi0tZ;7vDy$}?M%C#rgg=8|H|Fw#Oa3WT_Gj0qC8$h4#!dCEwM>iQ~6fj-i6XX&{&FE?-`puCU)xnPze4E%lKc!6rT3fW@WP z_uFX9@77YH_XA*jEwm|3!Hw@LNNVINMhfXY%Lg<`e2wf z@O;5kZHkyVL?!tpgQAJ&{e|tfKm^jVPB*^h0K}W`my2(m3mX4L~Y|D1}^Cb;{+347Jit#!>2D$Sf=<$91o}rZrn&?o+CdB|7IS3}C zps)?O9eL>jHVB*#6Ba^dSw^kFT4mDmNyJ~se5C(_Ij&R2k=YH)h zl3D9mgI^PkayZXKe9!wilc!Mvo&nguMnSu&IAgna;~>5I2!Dqiylm^WWX_f>jZJo) zZ2MflWX*7SJPZh|H~{_W6Goxt%@$_NK^|x{{)0Xs9f+ytf)U}xV9>D*uY#aDVUtUqLQPe0h`p-5^4db!hA4M!=9Tyw#6jW-PIa`$-9yI9V9Zm7gwK zb=gNY_h8#)vFb7Fl{pnBqYvJjm7}&&8S=o0KOEIa_H(IoS!hp8dcqo%XOVYHeyNH$ zV5tq5&kf(BZWv8>C&Pc#6xn6Tk53nRxG|@|}=> ztA#tlmQ?F3gDcQ!nofH!^C_ep{Gj*Q%C7lnt;fpKBpzb7n64-?mo5MrJT%?dqKmZX z18yVcC8g+ewx!Y=XM(0N*5xYljrz^XfWZFlrbzP;p%xd(~jN%R2^(Z-va%((;N~~tU z*=i$J=xb9T!R>@+(i1iI|ggJPoxRJ z%g9T|7BYmR2wL!~TRmOLhqE$tvj)SPduaQp_@!u-V1^z^1(X^6uccVgaBSg++IOE?Cs^5Y^4FmLp+-?Gg)p14keGjm%sDbt*vvQ+@KC?4);=zNY z^Ryamk)F>>QKQl(S0sxziU#|_?VHGtChNJQc~&36BrKF6FZMn z`)P{HZ-7;`U6tuv=I!arS5mg_gSEK$m7GxZZ` zC<~%qY>91+$~Vqp_U3&xvVV8tl01Wnr>1X_PTF+KY{#!`k!=LV)ZldFiRNT7MyRPt zdYbmP*BrPFXdFgdZ#|mbW?46*&PiO`1|kn~9U)JMI#;e-G4X78CaYS-d)Dqyq5rT|nFCpV zc7?J$-i@{_Y>ul+b`%M!_?kc0<2jESazEkmpj4rgmNYA!sG8L9zG~)%X$fWpm8df# zfmjOelOkoR-z_b#StczXM|-E@GI!m8$wb_4A*K;HegEF~B$Ur@q$`V&Pq=@b=y9#0 zc$eK(zE#c$Z5^haV_Z0{`y8{or|2=5*SJt`+m5TK7diC+aL8Gc=r`Z>fXXVyyQTxz z%qoz|v98Y8TipL@*z+f@I*T8pR)GBXda3_A%P2ZKILcbNxJtR2+5I2WCQSU877g&d zAg*Gvq+P6kUK|;9-oIK*We+2quPS!tuML@xCEDH9qkS8NqyI&@?|e>8oerD2bWAPm2q z?x_QZC{<7^d&DNz*>Y%9$ex0Rl|vt2uG>kti#Y|ui0vS;jM7Z!l;eKaCueAZCc0Fo zv~P1a{$MR6?SCeW0lVSG8P@ZvnWSN*@UvXM|1%O41(W~2(@2cw|HWqHvi}}(AHq%J zn~ktj^;Qxe>}9^Il`Y2>$3?*UaSwR2g~5BPGW`>bX_{l_l`vwJR78tLZ;o4MYMY)e zK^+>W#Y!#PGf?a_fYs87UZrh2^;|n(Mt@Hi1y8|8*H{q$5A46XOrw4=KL#8Ki1mk5 z>A%w$`QI*6F>!GGKc7Ld#+oy#1R7tp9T~Id0PH;mZs#beQF=TW3O1@O6VwJ49cW;c zi4~HGIH?#b$sfUc{4vDW6xAVi^a_+5VYO}&0hGiIKD)I9%;fQ4?{>d`n=Y-Xk0Y4| z{@{){I}%QKQNC?`VVN)uN?>)9VM9>xt*?%mh#qa1NmSfU9Fab+zanRDxpw^XcV+m0 z4?*hn!Q{FiHxUzxvBH7Bw3{jk1@476s_Rl~O}s~%F%2GTJV|(0oM)(8Z#NO*yj6BQ z7z#0#Vv}e!8eZ5p3w!5RwGHK&+isLiYIYo8Aq-3fUn_V+rrKjFYqc7$hd%n2D@&rw zD9BFCt9&eusZBOycIc1eiV*mFM_vNPy@%@b0EX-uG)Z?!VLOM?u2VOu<8XzLXXZmq zn(57N^!DcSO>!QQ#7HyITP0S2L%69!fK!*YE;9{_xZOi>mi^W;Eya$EQLmq2;?zw`;TM`hN1}#4qDAWCmUe`Eu>CyV)c7FgP*1fi7ZJzWI0&uzA(hZZZ*OJcr2{ zj1JGSHU;Wd*!%Of*KHg-xXBa6VUQMmw558;5MNT84SbjDp3FP%K*RARoXN0%y}yF? zL-m8;*vwnY#SPSbXvMrr=ekaaRT%#f((hQWB6P8SH=M<}oX=I2WoRWuk$h}(jwmsQ z81a+6G1c^%V)@#ft5)sjM`CrTbp{KeQ#vXS;T@}KQqk0@B`d1mHb=tXp)*vd8o~2X z(Gcw6qQ}*X%YD1os`2)<(&RX!%-rIOtN`Co4fGmWu2hIALwl;s5NE)_kT3a^Q#CxQ zhZ5k}Xbn^=Fho!hGu%plKT&T4Kx z`e3n@jA-o5Gg- z`JZrR!C6MXZsk0KsmLsMGe;pvB2L&SJ_qrtuxV_Bcx=R?n~mb}2cT?5I4@Sw`=PUt zFJB)X396}fJP8RUDQaXTlsANb2@%R0qe`G`KZ2acDeCW@I_U0Zvt11qX3m3Phy=Ki zPI}KyyfgPg#2W_x#UgW3AEu0O2?F+u*d-m?O*KVAt+9?+8Qeq9SfPfZX(@Wfd| z3bMr-SsP_Qt=EPzE_iQ?_(f41k-Q2jM6j5R1!#+pfyP==iD!a4DOc>8n32rXm?>+C z|G=kALJNusK-IBV`AA)%k3>QlA8nk3`kXXyA{aa3>g9MdNZe(kOjeu6mNT@nwsm zEm){gK6rm76E80n=u$B5Jim|IM7$bF@+n$etg+KIa@jM=Q@cQvUzTZ6PW z$#Cf&aWxQxRa>Z#+>-m%LWg|Cw8xlWV&r|3dJB~Be-k(S@9wir?P`(APZE~;Ny7hA zb))kC0rvi{>Ly`FdVmRSxW{(ue7)mr@y&t;Rjh>=qn2_TE~Fo8)bwQyj&;77^a`v? z)nF7Bx$_p-m+FoT)gi=6MqWPS;d6TB@ZjMJzZcpaUvrg;C`t}jhrI%BjZ6*hXd1rf z$bYmjVMitG(^1e+uI&-fK5H&I zo`#!cn}7GE6iA_`?^)>S2Z;$UwWgXb9>#e5s!#R4tvetN;~m)hZi8Fm3Wf9eO@M}7 z2^qt0?aG6(r4E4L3h=jWL&JtgjQWL1{WmX?Zpyy#9cG!=Tj+RgR2nVH{2~x2&ha*c zTzkpPmLfWh56qUsD4B(g1@dR0PkRwNsjH%8}$DjG=*19>$B@_Ve9J-(xw^UQ?hqcky zei#?q5R>T5ET`h%(4_)qMx(M~RWSgI6lX}cj>foegfq4}?jw_FPVYfojY3J1vTNf> zGOE(Wt9L>n$Jj@VQ984t)1YleIgL$pC7?^H{Xqm98dXv)VQMkSn^&a0#B2I1Xg>?> z<_UZl+)X7vWHsc>liDqMcEPD-$ZS9-Ne-)|TmS8m!Dw`mySq1SgiF%Q^Y}*dLLVuU zPjtg6k6UMg0JiFeHjpv|*#i@hV!+et` z*!B`a{c($OZ&N{NKCwKR#{Nf%eoHYUX$O;W?VP&*6-1<*d)>AOHLHlA|^KHp6lP!b-Z6(r*C|m&Ndp|wraC~__z*+7OhSir*_9H!`To<8|oZ!GE zKj>Ax4ti0~!stnz45!S3ge|G6DnYJ{)J6w!W@>kuN6WY;iKryd-pL zJap`mjF!EzJY8gJ?3X(XTd6W@TE-7wRjD~J8*Dk()OdzgRA{rdCN8LGTy^EM? zXyQHm)jDppm57gL0tcJkts}jqtBZ5<-p$n&oG6OKK1*jQCKe>+IaoLiuMX`@K3|L{ zD!9nU91LH&)K8jV-dvl6i%I*nVrD8!yXU_de%;4r4J#pVAXD99HNA=u=E*%pYbW;h zcWtJn;5=LY4hj}g6O=qISZFQnel^QL{gR{;V#8nd8kK+7Sc`VX^HzISx4Oo!>|C}5PQBuiSCR*tRZCMG40tEU2&W7WQvYp#Fwf@ED<**kf~hhEYR zj%72%a@9>TwTBDUw6?QuDNW`THBaE)x|wA(f=P5_`Y|}<4IFtedK9Op?T?bAtsL1P zxW1{kcb+9E!O^Vieg)K)vdtd2_+VDg)89CGVS;m84qHMLi&!Ax3BacivnwCNIny>8O;0jHf(36EBnSvGR)DpV79`E>GYxY&eM%FWu1j`UPi;=c$H%<*H= zoIMr(gI}ZxSqaV@miC+2WKh7BpH0mC=cHgcH(Np$Y^^}o?S2keecO{H<9y269X2fB zAh=eLFV1GggrCEVrF6^z=%5fDOLF2w4m(;rM`f=e!_*iV62{7PIbo72Jajt#%F+#x z#obCu+bvAFnHNU9Uv9M{YU2*#BhS%vU}_-4LPVwKZa(Z_Dgk6sF~B&g4RdsaEd`nW z@m>ifg>vnKa*;4C5)<~bgi_({bjRnPdFTERM=P<1A~jbj)M-V<&g~097QJtW{nY5X2EENx$YgT!hZYO0{K^@~1 zTVaO9o)oP9HuFzy&MzW}v_3GcqE8i#oYujVZBjlQ5>evsz;9p=#y_N(U{&s^d3m5m_^7jw%YnaO-Rrm{_4yW62jF?r68dF zo3{zMD=BetGp)#TA}Wl1kR33ntHZlU2>o0#YD`Lvafp(;=sKPls7a$PVbVQ;;mYNU zgZL*%lCH%+FPFufDra*tFJk!vb}YqCm?GcOn211{b*`T?+)Z#L^!5 zF;i4sJ!>yEQi>Pa$aZ5n1*{JIdQF(X^OSTD(JgA`Z17@#>< zpCmMJ>(iX0KpIDJm>4l2UZE*ea4sLtdekk*6dV7VqlF*Y#ymStJ+m8#fsY(X;g^3X z$h)2dRa2bgNEHc;f3A0PZIVZ}Vuac+(ulG%3MxkUkc%n*ysxNVL5eg|S6@t}5bYbE zOQJ)gTdVbg)?av8N!~}6SWMuZNQK<7M4oyxvDHS zE42LFL@n}!eSR^4g1&Yod0U?hQ<*rAgCFz}xiT6jX&-cknQG}nw@rZWhPPvX#b8V8 zBWG_*&WI{+2dODI#<8v$x#HiXkT;OFdd?)Bl;5#{2HmEinLqUdoip_m8Er1-Sj>eR zsS8L|#;$~?v@WbSwW~|jP*1#%g(m>~V|rFbuXWdRl(Q4Ay^dISY;w1>YwioKTYymL zErfCyWa~U#+vRcON(arf*yDnTq13LEWNwYgMyTCbHMVSIii>e$sfG7P*lF&Az0HER z4<=mO9dRs;aqIgFM-yfwcfQ|{wrhs_fn#6SXW__^qYeNS$wjcO!o?q(4)|v~DG`$k zZhK3;X%`$<_7;*Mp!`70_PgZR#QF>5MO!m2hCVR34VOg*OTPw?#EZ|!KuY1udxgj& z;S1bH(?-@fjuW{WvL`d^%1_NWtQ6IegBn|+PaE6l?(|1mkIToPoM!0NdQz>`YNhYnY2 zq=p|0@rel%D8rDhNf?*OaSoEmQo=hS@LF))E>A(iyFT!lXv-?EOVR`T)V^qjX_mj} z6M{RyH7-y;=usKek79lT?$NnuhGmvE{tFPOAMr>7>c>7W1lomjrVrW$aTXtVE#h4r zs2}FKDwrGm=naZ5|r+f^1^=LFq_=TV)pkR zeg(%q*qOxYaSZ=Gu~$HRKd~nOsA3GG7g&4jjLEa0_hkSv9M!uSCiZ@|qp+=Gp4H{s9ayLWvao#3&7bPzJE=noqj^8%^^ zzKa|T-&tPyF@+rjcI(35)PlSOYKm`+*+kMeuBMOv3T?nsP;S5|YQWA=%GwZTI%MD7|hr9O$k^I)E9;a$@80Z-2lNe28NT8V+Vcf;_Ax{y_4 zM7o3o^S;?3oi=;n$E}pyd^nbj6zx zR+}X>gVWj49yZ!R_+UtCfh(&AHdzEZa&{%CZsoK>l}jB4+`)^HxmC4bI$ssaX&veZ zxp$($teNRvgZRZH>yRB`NVSX2$BFgFJ&HrgVllV&y9XLl#Lj+fej4hrJ24*eQHfV?4ot`$+xLOM@N&IIq5C-)P;lzTN_(UI zdo&{c_2Y-;N1aqXmjQplYs<4BHo5)^;!hg7WCMpw{fX;SFg?~GV#(zq-P0;h+k&ES zPXZ3t;_jU!PT2L?)$g;31xkz)l!fdoxB|Mu5^Ti*I+76#b~M1SlT8 z4f7&A2W+7Y$Z@y{!+QqOTnol}<}rfvfvQ*?P@Hf#;@&WkB$qz}r`*|vn~-PYB~$($ zP$m}OAG0ZTj{_Yd4B_?mbjSM~Ou(qtXps;!`sXyl2Qzf(6g(gkN(CO-4%9Hquu2bB zh1RFimoiLd=W)4g_Zw;fy4xll`<`0$&T5ikrkCoOb#gTfu7RdV8(o+l!l$UpWhmCl zQIT!d3~luaK}p0zIZi~7DZCmOHqwva^A2QnHA->VKQ{FfJlcfODBp99s9Pw~A%6b_ zXYj(zFv|oH&4at~>;jKOvv$8WZ&yQU$3O_$2mZ+qpLWp!t_F`XG&a~zw+ve2OSSDD znVO%3PEVnKHo?jc8DX59xBs|A7S6#C;y0?uIlbzKUGg`=V*L&_T5THEIXDEwzda@5 zH*=*p^E2Y)nS<7l{WMeVo1lH-=^ZPN>p+1wJAKbOp(xjYEuIMEG)&_)Y(i@)wAO zA&o4CO9`lci-Z^u_5UX7XPi@)Fe1qq&96JK?LlKH6&&7`I%~WMk58A9rx}_;9CBwt zA2D7B_QIngApy1ah=6j2B0#hG?JCa6Nq-mcm(li1jS_H7E^k-1-uS5g5 zi46J3r(7#Jk*3)rN1{_k6byJARgiTZl3c({H;bi#52->Gi_nN0P|B2~^X0K)AZUZF z#<4i1sM8p#`)2uxU>psL`(mM&~j0-&{%khN9V3)O<8%7c81 zaio)R$`ptDIEyjPQ|vDT=2=L+bXwm^3W_^9 zrl?gRT+T=)d~pP3(J1Ut>L1hEO;{6ZFq>zQA(j?Q8lG&;+Yv<)+70+4(;=2%&#fR} zxW5E&f5{aq=)@p%Bl26}aFQG06e*;rlEBbdqr)({(8LMzz>@L%Q(TnS6-@M%dz^XD zxVtt%GzkPY*F>$dCBZ^`illziEAV*05R?gW;nJgq=$f$|Qg=Z)z(=bKpC0nN-g8Iy zG07?|57?5^WM_ws`~!uG5}ZlMJCXc1h4gH4Yj6t->|O4tRo_Io>?W$3(t;*XP2<$0 z3SuigZsq*kuO%JoZv6hI-ewQgoW9J0Uu`%RxegIEMKHCuzsTXfKhJM*Q<0! zi?^uV1U;Z?&KuRv(XL>ThZr}@quvoeVi?)-29H*%NtRCCef^=$K2r8>S8c`94_;}1 zG?>uYfFa(ZAltXA<~{)Ae*iWAg&8CZB^n%*(x^P|NM(<9$F`-}Aj z`K3XZ(`N)~UQgNE0Xr-ZU;jlh@Q&C11@Ea+<$&>zCv90_9sYn7;db0zcBU2E+OK9& zp=XuJ^yT+$YRCW?-Uh>;`1C#hEcEG(+gQyVYI*7*1Z34g$cf7k*@bT~qpe`I1AWk6 zCS>2K2F{Ut9=HE4XU|#k`Qp*njb4A(f7t?8OAGs;*mB&jfP$FmnM+;^C;!b?>~k)= z43<7Bg=kVku|qHL!z@1RCp;Yc8|xFggLILGKG4!ND;SUtd}{)A6CPb4PoU-rQ^bSE zup0Yf;!AtJ$}o$89364?I=}S~%|5vlJ|ixPBZ-vd2OM3MvZr-$ot1o6V3F|TqB)z( zL1o8VO@O@8^K$r9tMjJ~k8v>O;RoEX1++X~&>3aVdrUFfR|#&Y3=6-h;3D(?YijoN8@10V2Y1koMDxLTkpM zvxY~jXl9bm20F6FmsP|yEZ`oC2gU)1fmN>;h?rQ?^vunLLgRh(?d>U~dX#_*yp+20 zb13IFz`Nm%4QARF5|7=1I8sBvr|HXNv^R9nK=<>S^PM+BB55ot?;=78W}e4D^PHR#FJ{_VuVJ?Q?BLmsi>_>^=_?J15bs%0b|(7>RF7 zgBhyAvVB*R4G%D-4~2x^Y#!!q-*MDov>=7DMEVUx}!#^qW56{VBH(Xtzeg zs5mLekkX8psq0wFJNGWPR;<8Dt?(yP>oV}H(Rsn^Az!G!m-kZniual8#AhQwvmXRz z2@0+(#9-Tk;Od9b(j7(|J4Y{@QB%yQsaF8XQ3x?vQl zFyW9zE09H#?`!LqOrxfzYoxObc8)ix`sb+S3YA07)rUEP@>{IFo87YxP%#7-`EiqR z-NOj&H6v#5#ulK!tE6T)=_~z)<~pZs>oJ&8R(GC7r559tsW;aV)8dk*zSGZH->v0! z4zLJ*cx?g2>NSA;+AnYb|6-5$qJRBIJo~Bg?Fai?1N4(PXxcrw-4V~@J6Y)SuV&6F zL-4wx(sUk;w_K_aYFEY+w7DM$Lne2b!8J3;(_>=)88X&gQ7nf^B;Kw^tjiq-;%}Y1 zlSMN*+{N65As2w>G#PNCV(hO&X{=zt2YpsG0U-VzGQ3QJsJt5zcj?8b@f}$=&mU%E zac0-}$)!#86QoA<8)2owp#KRcIFpTaGhb_0o*q+w<$jmG8fbeda!s@k@Z>aH5;nd z7Ax9Dyq_86`zFqC!?uSohRB4IFdORo;LL{;^v3a_yCxSAm%r;OFbRUK-icOpPGEFK z%{zj%6d~OkQoaXxxJZJF9zkq9FGGo;>291&yURIgId3yxPWgKAa(qEM$yqY90B;Uu zoUl3OOs}Yu(PQpJEB3A}>bdVSy0M{!Z9+?{@98)C1?GO-w?=HX2xf*gJb2JpBT;Zq zA7&PIaL<6iYs#_A<~DcZTHfyv{$rnr^11k8^f5W3M*~SL&Gdd%NxxBuFOO0apmw<5 z$;Q6<2&cq%)DmGOw@NXDo61CNXokk-lAmIbk6P&<(@choYtFzwYsf7Pc&R*zb3r1} z&$CW3B}}v$0*Hu0u1F2NV~U81$-(G<3671WGQwuwPV2#6b;D=IUU}h3hXFI@c&+=5 z;8oxM&%Asg92v(H4G2i)XITC}OjlH$jqF{_9h~j{e+|xNEojf=r6vB84fB5}6vUvu zbRY@jWI`}hqjk{8OyN)s)EKAna7>AlgXz%7+SM@ch0A)Xio`AFnl{bVNQ&Bm)qTp< z>(35bXC>9k(i)X1?0z$!-O$h=`JcJpdt+NSTqimIwq3RzIB#o9pONMy<-x3w`Ou3( zn|LI5if^RqB|3ckniwT9_|OGUtf+Gm_O-Nb{RsIm$uhNz8x7P22#cUT1tUR~4f_y5 z7qj(m=c4An6VMpJ&&<5ZMFmQ7LrzN{dz3#WB?QviHN-}33U1s8yO8sMAI;;p3tEFM z@ssxqB=2OX{mC5GTJbq9iW@U>2M|IKsP+7vCOdyE#S&7O!vULCR_DvzGNa5v zfQr|;mpp$TyGR} znAC%MHjq*ooC{pVDOI&I=$COETYAmCATC^)T2*!3L@CM?bl|4@LUoe{>VztADj<^I zoecW9dbG#s*mxLjO!zbGB}p}J`WEYE@NEN%B&?)4u3bSnv=-KS73OTNW(zi5^s`G} z6)=Zr4-LK2e!S2}LYSOUC~Io7nvFC{kRs6`ASv7N{ZiE#!>;0oI%l3G^#})F>zoJx zo&H$#2v-OZh+ES6L;jOuoCUW1Gk~kF9LdrjmDaUk>=QzW84-mbAFZQP6n?gHbh&__vm{;Tzq8MAv*e}Sz!tKdhh zZAyoc6Zh5LK)1hkwqCy<%+l8uleKw6`&~Qp8Pr_{H{&^W`3NyD7f|3>&oV~wnKVI>~cqlnz$%jn>7w} z*-6hAv%lyS?Nf!Prcl?ijLABYGp4~W?jk5~v18{2i0 zH5|!nK2BHd9~}9oN-);#AE3VQ76NL7%cn@o$3_Zm38qRnd;wXe(NtIyDePO3K{JQS znKeoEPI%2;oo!wq3Qb-p+DvRTL#CNC{oFbIDt6w&j~WqWjZR4G;yQL63X$d=JI7We z)*VoK{j5ctBjVFJRuApG6UPspEmJ2^jG!@6=@$1q>;}CLw~DcMB(^y-sK8~@ z3Zuv1owLVczWH&C4Sik=EpHDb7SN2%Uf93;jf+b(QKo9S>C3XT2cimT5%;IfvkI`WQE0jMMg*r_o_XPwONLb**qr?Q z(9&FBi7=B1bu9$Mr`z(+y_`06g3{A`T~fuuDqj(-NLEyk^>mpyLL`P_l|zpIs;GKz zOs=Bs!GVv#jt`eyvnY-ttm54{^TT64fjPNd5?oyrUv-qGWMu@}MR~fjN?RJl1;d%e zROPt2!y#1G^b>Kf{(~HMU>@nDh8a+|Sb5~442@oci_^F?cA3?Lgxgr9tyhsCRWE@G5kQKa80lfByoAGm}6Mj_weG$Lzd`@0o{m3=VCsqC|CI)Z|4Fpr;jZ%`lljHaxhiZ__~$_N@uJBSv$!!C zN|{GI5k1wZe!yl(Y;&G0mLNm34O?POS=Ne}(Ake*y0Iw`=YdD)JW>mk&()U1ez+;B zk9Nc+?r*mkEF6|uHa_3sx7()qys-NviX0iz$QAvoXgGok$qmj>(T48e)q`BVhqE-& zRKXD55Rw-t+VH5q_BwK?r&bFKbAIS`s-oNz9U$N0et{mnBf#``D7Mw4!_Yh@Yzc#B zj#(Uz&QhvBZtb(_l+|?>6cpUZpSuqps~AEmv4vVvJmo!8h|>X#*M% z#{JB29tPju(uyx|lZS$ZU*T%lin{uPm_Hgf9)&m38hn9wifqReV+>W?hb{vq=tg7v zu&ENilJL{?%5uFk`CTi}n@Jet)c2t1@PT(3SC|vrfoq-cB=W(wcYZDCm#$Ge^b;8L z!+JdKJW^V(t!HAN^na5cPK)_*EUy%9UtVqOpZ!%Bo@h-nh+QF!3Gnpkb;k*}pZ09@ z8}Aa(1?e=jBi&)3(JM;*x71I$$nNpAXxR(hgfn#nLA0*rE=b?4zE1zkGU|@Jm2H)o zkOgP+8439!joX3_S$E<(pUcFa;8KiXb>iNT@F4D$LuHhCfLt6Fe&Bi+!*CL-cP@ao zVzUe%H5%+DpSFk)n1P6d#4?_?nbh5LnjNMz+>KOAH4LZO^ReY(OexS^N0&vk+;j@ zi`F7sT_mrx+sE$l>QmEXlQk=k0~`*4m-Xhtg2i7++B-pu=i@op`!J2)T{A!)jrR0! z<3_5J=to#X{JFoVP;U>6AZW#M47s!y*DnrluDR6^GbYk_&2mL9Wt?p;NPe3pStS>S zqg@APi{5TU)OWAM9EQiA63EwxfFW5PHU=a2-RR(qi(cvaPun@G^Eyi_8$~HSQZ9h+ zaW9l(;r1Z3n>p}aQjpp{zdoEl<3KM8um5Ho*>fI(l1Ls+l~w^GER0yb`6?r=`~0gVlf;lTN)MtlYvik4Y2E(=<4vzkzf6VC(>@7I|XS*xQE#~X8}9GsbEeCLr%yK7CS zw!C!nj>hxAoTD67{QA-+3Je9S{PN6vvhdGvfEQ%4B&|S{;mI2>Z(X{+`^TPg8<9jc zN(*ohUmcW>VL24_m8aBR!bTa?!e^%09>rZ~v_`Y^i?)?~Gz1`uI_XfXX}n(a$yCD> zSpPw@*oGP6!#E9_9~HFD=nqaVO>13oI!UaS=!wae18ibJt-&6bZ1@yf#W)b7?F z{UGRaFwk4io6{uft8`@>aw|qL-#FqKMv397e3Zje{n3-pgfU3sG(@pwet0e?g5o}T z7R_crcZg&cveLV`=;_s?m^a4aKBOynm!v_-%Bl1_ILWia8P2x+%EQYkgnwZ7Pd}Ib zgJx?S@{Iipe`}g>mf{O{Ym9J#Z&Uom8e^+8)Upzz#4bZ*YTa<$>fp?%Ih_E_xxvqt~@_MMr*=3nf1~i-KGVF$Lq)F>)Dw{mD3Y%>aGgJ!j(tXQ#U`Bu6&IJ zop%y%9Rq2|C$LXphdhI`i&MQ%=Xb>&!LUc%)3|s1M~hGX_oy$m_rG6AenFcLh<=oQ z6*u_%@ws}`%59Ntc&rvu>P)R;J=oVL*i#wILj zSSsylN>j1SQU7or+H&jTA#r5d7Bz>0V=BGMoLJMaTkj-IXyaH2_E@7wJfrJ_M{s=J zWK9I(SP>i-Jwr!uYwy7hh!lPyJfIcE%&-UZPSG7=9}Du2&>dJe23cg7yy>!zpJXn0 z#&RW{WVm>BbL9#+=ugT_9(68O9he>C#HO#fRD02mO#Sr=edDZU(cv`e9<7|x;I!)Q zqkh2Gx9Og_m=w4@IyQKNc~I$|pMRy9IIgU|?%Y1_ThZ+DDpVU^(F%Tps7&lJ&YtGb zK6s_LpzB`C=xfz1PS&wvGAl<8|3dNH!eNRALi!8WW(Q*AkBsL|uT4z! zE^hc5bqL9TUu7p;3Ez3-Otgk5`wW>;k0}`mv|vyoyh{y6FfY0lK!q<`6af=Z?yrBL zbh`^rg3b8>q8I#PVv|WMqUnU>$(>R&R0ZFpC;Ls>0_5^wlzutt98d%L@(4N;cIrJ> z*#l?{R|9{SP?hHB4FVAXmH3QY1*sa+wR?ZqRh7oQ^$acj+5B{x0j|0pcO>1H;18`UbD1(nQyhSGS$%|*!4ndbscQkew49wn`6W@ZOr|{ zy+IUBV16$tU_$^}Gs18QrTG4;soKV9hu6wz%C(1f5-&ytLuir^PsC5H&2`Zk&MI2O ztbAOqd&-Mp_o6Xf#eRI7?#;XMUDL5#@W}B}d2FR8b9z`~smW5YIJ%t1tZi)4{ZjpX zw!ZHc=Dy*^8K$34+wz@116fU#5>9`0ikw1!9n-BVxenH>WVAknkmv#ac2qJ4bCm2g zo8tzpWuD40v>$`pB7vU*51J=bL78nqqdX2(`JMqXGa~|Dn0DY5iI0k;KgVk?KgWMm z@b^9gcWbCQy|Wz{x*1=n4u;s3u8s#KS_?U1?uu}uS@qfdOu)p#EmtvE z6>6|V(@Q83O!3~sL-%tSBX3US5cRpu)Ki`G7h?dR%~sc|O+91$ZRDxKkEC`zy9*|A zeT!M~vf#mt;qr`ozb4*!8E>u(BPgtmqPI5J35T--hZ8jlHcx013GEx)#m*u;rr65@ zdk+?!8Cmz)m3f_2;;3d}a5msX40M>V%em&@JJnmrlXEk;B>w~9?G>5^%qn~rwwbYY z*6M>SX1_EbVe40JkBp2Uh58-A_`QBd^vj&LKj4R~Bv_PJ0`cD8J0!QX%Qs;AFzqbu z1Ey<4pd{{%67P`E<%D^)&v)$0y^n9e&Pndw4e=i6q<{E5((m!#^WooBVz0I9R9~W*leyLl zZ@KHfUuiAL8%=6BR@5=gRV7vzY$6+jH#Qr;WPAi4tafHU);*d6o{KORbCztcO0@%@ zOVrCgwJ%D#YSAkNow2OWK#`cC&x}HrVmuiP3WY<~D^G!?L?o>o=7JMRIHmnmi5QE} zK9P+uA|UuPMY+7O^4-wmN@^>MG^SuT1*hfmJmMr@A@Fso4%a@ouhj2_*OhT(cH)`o zLz6wD=I>xWC8ZFg+s4B7frhtob5Sh4`=Z-b-L6Lf3`7C*dE~^}X?Y z{BG|#XDUE_D{RoA#k~bHe6Af1Os~DVK|h7w;i*litE>85d#z{j z!-wp5FpI}Yc`2eb#pF5m-q<;R#Yvxwf`^)EoXd7KcC$*HiyvxzKM}MMYG*~NoZB*_ zs#D8bls5@yu~U9~pK3a1m@QIjELJ3_CNWy+MSG}Qm%Jt+#Odn&{R_qg-O7Sztt?>r z7Zzs?afLk*w<;3c60O#T(_0Q_wzpgH@+r!)#ZINeyWlra`ht8^N8$xV8IUuR)~2A1 z(t-F`xF0v@7u^4`8%zCo!9NM+fk}Vt#uYz{`G4}HIthw7+Zs7p*x8D@8JXDs$IXA5 zRFf3Or9cD`E2mKQhX!7Lce*Rb!R{#{kuv2567mD%Q)CcDTbm}YY9a{?5zItT^ac>@ z9KQhdZmIIR-zsgY>Z)*jGI@GJ)J7~~hijA@wuPe!u_(%oo0sb3SG94UBA+BGTx%q_ zS$rsnl~L;pc=KmZicJTO{bgSxKn~B)78WWq8V;X1u_^#Rbt>E_!WFG-d}BY*7~P%l z9fv!3u0`&CO2gRnNiIFfZ#l|v+f7RdgsnEEZW$*2lIdS{6GBn&&_RMus><4R;*vY z$o~I({!>mb=-^=B{$KuX4R@zZRkZJ}iS$upIt$6;jClG)<9OsX;vja=4lszhWEZL0 zAGSsU!)fBE4EMb(hpPy>D41Xnv5+S0pCtcAFlf~0eV2`Bd_HRN&;Ekp{j1pm@u;5n zZVr9&dDQv)&6b{b&*!fzZ@ags@9qa`zoHjI(5ludbf^vby=cU%$bT{G#MWNF2OvZ@ z$o7PZ`Dq*YiT7-go>p>ALk8ZL~0RZL~ls5k#C(qb9$MOa^Q9yiFgZUR2pH@ zoLpw;QCVI$9!H&_&#;5untljzlE<07PR+&;)i28Or{dolz6!ni6S&P>6lI9CYp0cb z6GJXRM_&hTf1S&+%BnJ&E4S06Z1t}TqJW{L@;f)=hhUQjmJ8Idwc&s9t zKM-RQk9t?wvwY0ti%S`O3H32AvBn9ej2lkz6_s$Qjfe1N>)RD12=cS-i&L4!3yLot z%-PX|()Ql!0LQUc#Xv%$>yj3ZFFf)75+*BY4G67SmLwF>Ytce9A!ghPgb6s!7ApFR zrju6^*?f}Ca2FU9_ExsZxH!}8>9VqRbrvFt6SZ0j@JY~MJmO&8A6H$_&Z|zdlF90? z!#3}xLHFFIpeH!fG0NP;pZi67*^Z?|68at*7l)Am%i2FNhtDX0Ka^G_FatXWO#l=3 zaj`}qoC}>gmD=Uv;dx;!fHGm$hi5`v)#n868mdQ-a%negdC5;2xqgW zWe`jx0<*hOs4SUT=Yc|17XJKF`DnuV63*lv5pU8UVsyjg*KU2d`yzFG8#NrVY#m1` zYG1T_MyEF{41^?|4D0(0~+Dg~&sAE3&sDZ^*QGo&FNMfh**+H~^R; z?Xw&UZIBWZ-m%=ftvGQMetp3int^hm`TH!IXWdn2Zj&C5A>55BeBMpdz+jNbDKaTj zmL#2WFkD$DNFDVkI|Ib2^+?uJF;qAt#{`>stSnQ&u4#WoXYT4?efX|F4XJvOt5O$2 z4YEcIAa>y`G4-v5svkSl0YKsS7Ql*I&AT{E?51T7*-YfF*vQ&Y`CI4>eXdoUzBkl4 z&v0CmifnvS)G+8sns7P)5zno1&};7K9i8{Vc}r@l!7h9y(|$@csgcClRBX0u5pBXr zd&Cx%(##gGG#PexjByp57!2hx%S{ovR=gqd~KF z5XN@mI3gbnS~qmZ%gG4p9OJ&ZS`a~CD8HJ8QFCfAV}(9OKUkY|Mx#g6P&S1|wrwo2 ztJrv>uCX;4AlH^&g`X_71s0~PFnvb1tN`wOY@#8JhmrOrVh`{rORdT6 zFfw9$&!RiA!Gt#TCg=BL;u)kgqJbYvi3_9$4=LXxP2`(L`7@s2hyYMe4farbxa?V% zZ1P?@)|CCy-a({UD>{hjt<}w~I~42ye^~qcjU7+WKP;vp5XdgSTorHip-S;t^z#U9 zgaRfc^%BJP#S(JzZ|1+rsgImzM!UmEaszTH4_2swWkw@X2#$5K+@@~mPErg}FK5JpCD@9FHF3TS6w8W^olOi39=9GvrglC)~!O-J_ z?G~j}+KuKs>kG_6IFWnA7qeRHo1eT@cw!X`)fCr;7C!#>4v+zCd$pJA&4gE5pEDJ#NyWnSXKKAJu!;vm9_Fc zA&uLFRdM6)mnPd8~Cz4sId1`m>%J=t({abzZ- zit9o}JEOv_B0=4;Sxwes7vLL5pAhkfBK(;m*r0JJnt%IkBI<4#5Dy^M5t1m_rH{YR zH?&yNY9XEWk^8K5?o<~TmDRdhbkhz zg&O3EX%vW$L85>gu-FdBf-jp2PpkDV;_wjX&GaeUAjn5_f_txowBDAa&f!=8QLk9# z_apbVUiC3^_e5j6;8se?^RQD*2)4(}ILI-`6cOg=p<&hT3-8dNQB;t|N92Vu1USeMP@ADTCt{M3Q-BHO6mHtn$~6q_ zed(%FsVnc4g-5b%8>b8UyuWOs3HWm-IA^27S3aDpW%vqje24OgAbW{m?!t?jQ2q&) zfD(V%gCaO^|KgbNsVzao*m4|9g+>|lMM zGVGh_+;VpZ>Dv!6aNW^-0QC$B+~9m*^gJ@7$X>RY&Pk^vkn4iqFkF%n0C?N^C??pD_S*>UuMB)3jPEvyH{DXP(3 z(sCHW%xO-SqcLVV%}33x{wqgg&2pO2E^LTXr7`9{O+TDlJ20=N6fc6kM{@+EEi7ODSEn;z(i@AEa9`r=`3yygE$Sf1-SN%Ccx`0lSTMV6nd zoi4-Xt@&_M1iQggjUcGt{>TiorB={;?!0Zk74yTVgBS~a#`SK2TAw;Q82J}9IzBna z(1PvWM&>mSpI4y9mM6znAldXMIz5PUJg6KE&$1b!c(8MnG{ngxt!#39p}=dt^$+-j z=nN^Op5XcK{Bc+0hK};9Uu+l#Xu<*Y)b+{tIs292D)MtDXmBQhW$f+20QFN%eNg`C7L_3>5RH+ZtA?W6DRdT zLPc&NO29%rD#fC^cSl;`|9(4U|Mon0Oz^=k$10_F<~wke7RcwyK8m-?xZa)h2sm)CX43; zGewd(zN1bfQ9UkMO~a^OH2`Lbc2q$#TlQw|S5Yg|g+;Sq`B2WLQLvP!|G2N^%mx=P zBBdLEccx{$D2BRVYLm#1Z%dE;s*z+=VhjMIRa4?yD;sblR-=T zJ#XYzJ3KJ8H=imDk|pp=x~4^G$fTCeE#Jo-_7Xgw+7cD>1~a7su#N3?5EdPvUjm#t zl$ACOomxYXRXGd5V^+aDSYJ6{U#@E%<@5osYRZ0kDckLT1h7o%w^o_VQt4>$3CO~Q zyx>;P-V0b~H$=RUYv|k-X4zyn>e_rIv`PpV_^M~Yik;LbE|l{idxFL3EGAuKU!cMa!y3H30(HuzEUOz;E< zP@_yV(^J5i!@I`2+_L+=LY!Qe7g!JoVnDW!MDFc)HRX`<_`xg+B3lbUxvYTr5+R)W z=V$}@v_bfAZ5y|k--JQm2qs_my|4IIEPZ_acXAa;8Jk<_57&ts;@2;x|8bmBv6HlQ zk~Od={XvR27&zHE{MQ7lD(kqeg34EKGMvbK(@fNbWfT$Je$eCf9IQZryrM4 zOZ9oSgQ278w27P7>buyG&R9v1nk-tl;cJw~f4u2TL~Jz-bytdY8=IvQZYaT`-}sF%aTf8gXR5 z$_XoXn(p`)={T_c4Wb{HKcmH4WH48OY}#qdYTmL*5TtqCri=i>X1(45WlNdnY8&_r zF_*46`=9v=%0fz$I;ousJS;hB%gm=Zg9!!KICG@Xa)SE^D|wtxCH z12+9x+%HI)>tohik58-Df?lk7F4&mhC)wFcaQ4f035)*%W;xM3v{AUuq@vKI#oWqjc9h@Lm1%S5g?z=fWA zw0=)HSXOf<<_4F#E|DgmcRPAnWgd;~CAE1qrXt2cC|9&2+ldySTf7N2{`E_C(?9)- z3}}38{MB1f3`I;nO{rEFnXrr?k5BvyrtTX*Kq#p)(G*7csLRH9Aw;OerhKTMtl|zr zjCwlnTSQ;aY*7{5+8IH2yUO?LEQuo;c$s1J2>(&bFd=0%`Ca9nMrH?S(Osg-#?mVX zUv6#&$|ISH+)6{rl2I|tsuc%8vMy%Tj`AZi(oi+~Lh%_X^#H&_2M?aJr_&6qkxj#5$UKb@w7h8l4)C>ecH;1OBaT&gu$_2@d)rA5bF_+;+%wBb4R zir;hn?0wuJ@bPl_{7WasH9*5pTnN`kAW(}JyU*wa)PQofDapoL6|79e8(_A0lZl;;unX2% z8l1AgXt`?w<4X$Jn3O5hp2z@s(X2B?RXJH4AzDINO2-`}!`(4R^>bQ8N!{y&j{H z4Zk{Vkz*0v=|!y3$KI%~_s8y#`ZC~_{i_A4l1FP@o1@9${o-l!bl1s|J!^e&qs_5p zUb$U#XL}zv_knAjzQr7#CQqk&O-yp=k57(pKQM1SyFen1qGxxBnK|SBgU7U(e9wGC zNO;Q|Br~OfGkFSC5oq^IlXj_%P4_a=g!S}6W^~@)EI9*Z53?o3=0ndDopk!URnJp~ zN3&8dfM<7Yg*%}yW5Q%{MpD{fwvcIU;l)Ox-FVWK6auyUo{dxxpT%YtmdWe{5H@4% zRJANZu_tp8NF$xF0`uU~U%^L_j^;aSCdZjsgopX%oZ=<>kA%?DD*mzK*73ZX_VEh~ zW#S9H5(d6R=KvuM<~BXEp4{{jt!K0FA{pCdG*-&b0Ack+S%@eD^-{_2Od+|O*YVLd zYfg(d8!*de2jSHV@WT*Id+@vdDYQt%HII6^bitY_uJ_{BRotE@Wl)pb1E8~JG=ySM z+6dp``?2_<9K{0BS`KrEko{%7j_V8iHfUBXG47?5qH_SR}~+N*&QKjDi2w5Rh63a6bKJiUk||gw%$DZ zwe-n1mFr(aaSTjYjc1g{?OfsthK!?n3J7CF1N*B562Ip&CfCa!A zM{K#l!zlp_4gG|*G{VVoge{js&#m=X0D}8wJ5_TIOGD>w0Yfqz8$&J^wE%c4n@sVF zsH~GZCO;mVgCrXa>&~#kDDM^PeY(o#o8~Cjg^Yg8x?9~!G}^cCC?d;*T-Q?`3db3; z&CJndo2GKPw1FAKbYS?#)_FK8(aV+qiT5ZAs-;SN+X>VT#=ph;Lx6DHX8 zKAMr$%<&7ny(&Shyy(fxOP=P9rS7(*DZMh|Lx zRY*gA^j+*JjC;B2zGHtxswEbGA91Z~FNj1ZtuC7W{F5@aqTk z7)BBvuKL|1bT`UZI@CFE`P2y?2LSdKqcHz3NoyL*`eu-7tLQVd46}S+O56POHdz?V z4O^z)Bl*WOtH!5k^Pt45(R;x(5$9gQY}hub;qf1tveFXH9ckVVPtRY;OSO|&EAXtvDPmnXH2Bdo^wp0O3IFpfVyILW@KKHD0aRb?0i z6*rb*s}<{YODJ;}P)v!jry)6|oYsj5+ke%r?J4M#ZYHfdAQ>$W~tzuSrIt};V2XX zN}yJ#fWNK5{>|1mmzKy*uCe}O`_R4y>IAyX1_P@uO$O|ep*OzdXM@caGY$TQ7T8qi z5u(v68er18#oo>$Kc6<2MsL3xOQwCGEi>NrbWVB`rn>ZMbPWH~ z@L27*;E^3qAIom1_M)r4q^ADV5uNAw37`1+rMq!?>OC-z^W3E1IJ3eGH%d{USaK1X9pprIMH2Pdb^J$ex`$vkm0*51hmq2E=-)Tj;%6fUDmy!EIJaJk`A= zYxlRvhi~tzfVxEWBPqnoGZ?zN`W?Ld-8*lIy>U@jL{j7nx!6bLkU*LPgCN9T{d%R3aL!Mh`-5fB&u#ab4~XmN zZ{w|M*Hs?mIC6Rif0LJy+pv>*Ok zeiKZTxvw4d6KeUnQ3!VQOAo8sHX;q4Qi286r@%z0j z)n@*nx0Yv;<(JMSb7>Wjp2AJk{^`(t>Lzj)Ux@%(h3<%}*mYjvH?nz8DSp(aB#R+y zcc_PGN-frtD~D)KuS_>jOxtiThLJ(B_FQ-nUDLO0U;>anGv-qW$fm*h2$>K=AMPMq zP9n!Gi~QC=3}uZabP#+o^?-3%-5=>+4Wyx^fj3-bVnWumDOe|oTGokNt?Ebl>U}F@ za4R&5xQUqfv0!cr=zEDe0mr1(NEamV<5*EXhQ`coOIDzC#OXr84ZjpSf+X?H;8$PJ zpUhRvcCD~~I(+!cBm8sl#tn?wSVFDR5E$GB3#6L<;lD+=(~mUmo`!m2;^0f{Yhbg7 z7GuF=B$#U%_%i?Ith%b@0y`cI({FDWqK_&RBrV7)e_8#qO~!A5btooQ8FECMN2rGl z)``*5jDB?hK_7+of!_#4iyx46V6jcno}s5(A*H&AWg8i(q8z)#?zns)p86V_T`7a7 zDX8lRgOido5+@j!fK9Q>FhCFm@#I6b!h*mUe4QXbg9$i)9VMorXw84|P;+-jg3-xU zqrleqGgaq?1^2lPmnCeEs;@rSdva_pFfJGBgEMAlbO$=UT|{`+dc~K|@!82O^McY{ z6&T+78gIJ78J&FIcXX$!Hh?|sj3k|sIw*|=+R#CTB_UF2zXN<0F9_#tZ?R&1hRZ}Q zCZm>tP*OfA_Xe&h{?wc&wp1X;zC&$6v6p3@+yQ8C+ErT(R9lUFtOvt$KxiK667iyMtW^UA1_cvPLE;Rzoom==H zSR_OT4Mv+rRU446k92K?snxqNSZScSUhhSd50wNsSCsDW*9Ip#d11maG^?H&%|)rG z`gc^E9((C3l`E;ziw^_D;`l5Aqa@o)HcSnYu$YDc69wI9Oq%e-*pf8G71D6}r)P!( zL&W60X1XzCX+RT^ztZqiWukH!u)>1^Hh2I1pyS)eDqmO)Dfpq^8nuNI)#g?!2b zY6RHAO{zZ~(TXa4mgO40H5YE?vQo?=nIDYM(uz?#G*4`!+`~?a^{uJj@eg%DRwpmk zh2@Nq;(^o}agQXkGck=t*QNDPYn8%J;ti~mKU?+TbG6|M#Xb29h|SiXR&A zlE>`O+)?Vq4KtC;@6f$cZ>3P&=HU(_9Fl&?$?XyxVtqvLhJ43k+|+eaHg}RbTW^rN zH^g`8^-S&ZyFf=D$;Q=9ns322m?XWVL~7KFI1m%Annk>Kso@ItL`JOgc-O zy7TEsSW;3|cf@$FOe=1N*x8E$s0VW=)Gb!_r0Xg=w_pkd_6UakL-mjKHYFBCj0Sx1 zf=99k4c+mi58!B%97Ud3wFWMu)D_-&YrdaQ z!Vb3}lG`6CXf(q4js-o?jLl+~^t|KjKD``6@B2Rt7rJW)UY#!2<@B)|86FO7HzC_I zCCCgDf+&vA@m*L9d>>G;-AT*o#ZBesWJDrs%cLR>nNuR_ zuWo7L?NngE_GC-xVHV zXhzTcA7y9xXZ;Tc<_ZQ5jwTNO4?6i8`URNCf6>Vi!Q>H*N~xIQ3fphY>3RJ^kd@nA z`C0lyp1+UZJwPbqSQvv7WAQgPrJH8Okm>_&1Yb?)@c%cSe68$gZweOc2Twj&b5-_( zCqMkblP}%SxBcIE^1~lI`QE#7m9cQ@SJe-myfDP}O)-?dm+%X;-)$H$Kca9RK8x^w zy8<4=!QAct!-??&eq;In%UJ*QkpFr4?^cYsNhuH})S&6CugJ)%Dm1IArRE(WFuV@b zL0Q#O)Z3Q#M(`*Z7G@T-TW2p|b$^)64mAA|H?v|Gq`FoKTZg->4B}3uG(_`r zS{}0EFWtufY&*7+HeCr4_aWcKHlTWr%hvxzM~w@7tdl2064KU0GO;)J&kTK%=kcSH zX_#I8J0Ar>3(ko|U>9Nqfk_}Q4}A0`BTEz>atZ9Nmxth1@P56l*Y6e{OFMlk;lw!TNDdw=3^Woj*+6oSu5M&p zygfOH89F&z9@;jd7XIQc<4AWy{TJ-Y)*zVX4&}c=qwS>_zvd-={gO%e9|`*Z`R4vp zi)iA5a8ngsG8^l1y&5O!Bn5RN%}ZhB7J-y4PXvvHM~5AS0ae-|%cFFu`_oG=7^lJb z1eWBNZwTgTcfO{!tXF$}M*Yp@IPM80xbgV@$$vGG#p8H1kv4Cp=XLh{jt}bhb!VP| zcE<&TIdBZVqQW1ecRX+OcQ6LZZ}b@KrS7BkS2Hfb4$LdmgO&&$`fNd}Sn>=>{6Fbe zLl4?K9}`x?vcVLvTsVf3YP5w4rC%V3zaZchLa04x5pK|Usr^7^tl0Q0&C|68)#pZ3 zSsmCGmoz>Gem(3^%#Lf7XUQ}v12bmkNHxvV`gr_u$a2mUY+`}h&{WYDZ)zwz=Ry}q z`I9Y9cTVTiJ;(t04^fAvTVFz$q5cK@%$%`wN!zLswEY`1ccM4!*0BVGwj*#$P60 z2;QEd;CwOx_<7CZXudMH!)V*m%GU)k@(S+>4{lPoC1qY>w`OR*(fs`K1HOOXx-tKq z+U5_#J+#K*YeQX0Ke(mg*HC^@!+FTwE<;V>JiK)5*(vP{0N)V%O5e7e9^$>-RqtI> z;TOk!7Y;p_J^kJL&QC!=`>Ah>DSHds%c1^C+sjc7VK})ZYw{J1`Fwa|TkKZ+(Drzh zyS)xG6`=egY5FdFnGXNfzSTcDuX%Wh+3TVD>ez!w{6&W8f`TgmnHN|%r_fh8m(Kv* zCbc33S}K!!l#5(dDx;FmmPAArpD0mm2_0oF9HZi4BOT)+)mV~TyVsR;k}HzF_bOF5 z-vawKGmD%R%6or9#7#3BG*2lQ`wW9$AmPv~>vSNtyLUYH&*T2if`Q z^R`luof!%cQfL4{$m-Mpw8u?}OXuVjfc&}tqQryYPUH;jb1Y5w;d_?|Y z+{w%0VB8^_iE0w8RumnkfX7guW&%2TbT(HIP=<(&YSJQ`XcC)a_?Q(5Bxp}`Hlx)? zWYB&I8l%L(avjQWOjdpEpNG`jl~@HG)w<3~++DS5<5*P%G~JDs{Ih}jySw~u=?FD+ zRSfa*0#T{T ze@jpeHqDwB)|(2s&+ZMzA%DgRmU{ej(#%>$Ew7ZXjbVdoX^!Qd=lRK{Gv$@G7E`x_ z3zDmfm0KZBTNE)h0+S)dM8dY?L633vBoynJ08}Lljf;!H{GFMy%HHK7^pMh?R788#$TFK+{&MVxoyde+fPAYF=S%&{;2y zi=bN=AOoi%E~46dK3bKj>&(L@_SJ`n)@(?~(#D7+w;_*P#hL+ssc+07dfQMh^%{OC zX(Ivj$@UW(sxWlhzj%N0e+r5@)H zTL$XK&g$biFU=Whs`U24eU63iQq-^l11cBt6K_NCBy~{+%GztRq7AQQ{uH>0<%3bK z!is&|8pFVk_HLmT66#=+C#uNC&L#Y@$Yeuo8Oz8X`fvC-hk@g=NRAdMlG@aY6 zm8^7mRB;bXaU|1 z6>+{|OeZ=xUR)I^B0XNAW&tN0yh5lDSNQ@)$5dK~Sy?z_TKR27iZ})Ft;AC}bt5mDC{6JhwQ!MX zVzOujQc*61*Alkjwc0@qZP-F08qYP=)^S=L8b?~cfkMIsHx+wB!^cL_8Yct`lg?9wEv=9@v>Zqm6yx} zo`uwkgt@J`Z`N#T3;QtIw&8O$%tz1Lu+WPODwUM6RokSfA-|EiqS8r7k;@`!z|h!e zO{1~L1Kmi`UGp15Yz1rg;czgKE#hx+=;A zbeZYCvPw1;m_VASIy_6Ifh>qDZdzTYp`u#dhOQrHp!>>Hv58Q;ydN7Evp;{X7ic;F z=(LWyBAvtniX_7TdWM{MynXHs>evmQ{j31wREgH*cJH%A*RNev{d(N zDjjaBKYuS!ozO>2KrZLhD6+Oq4qDM@seO^y%XEXqZsr>3IkLVVd71YFB2 z^kGR`vk;x|kAA?UfTn_aSw&?Lc^F+3W7)EpnnbmHtj@kMr$}`E_Q6Xvtd+!9y$U;G zI*pswI$zQZEh#BMyl#hqDtrn4cf6Q7PZNE)pl4@kGdXj6D`pY)tsed$Ud&P@pwMxR zprZJDsMb>sJuUO>Q1n2T97EAuEKZEIo>b|SG6~%~rKjFn62L20N#U4WG^P+7(WstO z%d4ffYu7CFSL4c3+NqPeJWM?~iOzNZUIE2M@3%}+;bU*#ohVF2K1|#@b@)hjyNGqV z=06QoT`mWTp}08bWUutD$iSATkX-07riHeOGJ1_FykP5L`|HAzZS+wztOKPS4t?@Gm zjA2%oN)O?2U)9_nDwF546T<`<7zLQ!)+``xWt&#dLT2R(7X7&wT!pN>5!+8d`{V$+hOk%6d zjv)rw)nbYX@cQ{nA>LHf79Rv}Ob!c&11e$bjIckI*w1IqqsRpP4Le$CM#eNv6gKFt zpz4u>ZFp9m2qWV4mrfZyF^t(Nxha=IhX^~eHxW^J2CE6Je%D8MuDXEhBIH!&FK%NP zM_mXyIceQIA%$W3%1|@J(9%;co03NRl+?`!SThM%Y`ofs(WcwFDr`*S!`2sBYbx;i z4WJ{0^9kM}dUB6Mo52KJP?dWRWy6Mt43fakeUAVQbH=+A6qlFFOOn=iPCJC46~yhW zQI=sy^J1gMgbmZxaZo;mQEY5#NAesS@4uM`1gUt%bMv90$~WBm?_u?wXnOEcWFv%Q z3`7XtB41vZ8g{233Eqagu~F(3EH7IO;Jm1Q=yqZq1ibvY8@5j#qwb?nlAI1dBU~S- zhQ9;irK0@$JAPzylcX!YzlCfEp@|0A;gR@tTkXa$lH7nMs3!fOA-R$G1hFBaBC7Ho zHgZD}W_ulh5bJgU4*lZIOO4rR=bxlz3~yVyv>_jnUt0DaJCBX}EmV2|1sZxI02>|y z`KN>Y6BkkLI!2ORX=6G%Wx=dypZ456Vn&1g8`apXmL*^h<<>&MOAPc=#|sHnANfrm z34(%6FjXgn(2SQVSnNaU!K_Z-3lDX>c9EVw4y{S_&^x^Rol{OC)`m2iN7hUF2&rc| zUybIn0Pm3SJ#&}2Cqf^>g!@fIN?MVDIL1pp|CLGc1>)AIG9e%kr4VA3U5IxB*k{pp zCVMV0aI01t%EYc~Q1wuP)}cpNflRfj)M#UBvzBP7h^Z77YH5&<+hp3$Ki_ zz?7A1QtOQqAY$qG%RAgE|4HW`ULnb^jabUOeN**}tDgP$pAh`g z^;D(oDl@t?=xUF>d{OM&Wx%`zurdP22&7bi%RGd31F2S1xqM+cFQx3-jl6w-k?8vT z*m-_`G~qkKnRc0Z4;vFAS|o=RiFdiBRVcuJ&Xj=tJ6P%WXi+XK?!-=oQ|217-F!-} zOl&V9LLTsL_`2XK^kb|{VwI7TL(#J4E89hUtLk8zL4Cu1kIU1#KeGr;RRIze-N9A> zb6BcyO;4dq8w~@qW-+J<&aI6?@mRB9^Ivn+aI=WB^l&$NXAyzuXe-K4=rI>gE{u(J z5_RD}zcqvS4V~dU76n(cM;0&TNs;}TC#p?mdY8E(NRp!OkAbVn1$Jeok#QdsT?oU; z-6#zoP!B8$9p@g-bVFtqDH@e1zHHX}s!tKC%0$>Kgh*7ogVX();hd{vQm_P{_{!de z)2>?0BXBD#0_qDc4wNvN21OMcM17@0`Qf! zPJ67_e(!&xcNuvQWT7q5hN&2B1a_=pEpp0J*iI7OvCZ2QR+?a_$aa!ApNhmxJ)8)| z{0wh@5mu9AOyp4ow<7S<9!7}6F339|Ob}LCMjB3=FqriHj_hGQ6-<$FZgxomn59h% zU?S)t z%F2HJqt6O(h{e6g*E#|ao&Lc_I_Q6~m&#gDW3VV^h6K~1>wpcTyPwGsfq7-C9s{r( zA~`@R*)ZLnDx?t{D8I6L)f7J)oP68>>tQDLABN`QQi&_(kZhVH{8F@D*yzb^&c&r0 z)^M;^h)&oKaPa4)rlg1$%Mi(D#LBYZ0?Pv765TUJt1r<#iV&OW)yASaRaV=h&u?a~ z_u#@dx1JwHmBpG&v!v$6a7fRL{@NoDgBSss+|Lt!-?jZcOJF2c7?pB;`AC7V@`H4U z&nsvU%A!2^3gNPOE`?@8nNmH;4Bed&{^Gp94hp5iJ8J|)k8L9CWL1rXfBFl=C=C0%|75V*V$y=XZluOK=9FWTZ%=~iYkz2z9cmS}9 zQ^K|ZPaEyc3mtbEv|vrAnMAJ9RSt)=&Mf}3*!6`A#_L*~WEn1+%PB?jb-r0SdpF}q z$M{$kMO57*_lPSfbf$Sy@%7h45j}_GwX#YNRx(SN&y9-{%kA|AJ{@u=y|_{t{`R90em#~$NmUZxiFmewRXTH2u z;j~Ko;*OaNOXoWofNO4cjm`xg3*A`m4F=hbvs@87hhD^qZ-O>`Uu!tAAN1!`Pv@OX zbkXSZrH^Yp<5GuZHghN2v(Z=|pW`*jhVD*aS@Tzy(Re&@qU&L^ky6nCImPB zTvdWXNYxw6*?Wy*CEBLN9J_tx)IZvn?>-UzQ7ZbH@+aBqimD^}*|f)`Z#xu%Xy9sN z^|sJd?kF{H$QHxDF)jS}M)rgHNFU#y`@0MuFB;4%Pv4^J-#xm3unYXZDc>!}roOV2 zN?D_3qRS_*6r61=1ZA42-}!V!D*~oYRIVcOx z7>2wNO{FfkhT-a3o_Zy|%at&%lp#R#OCSaFwaP|mO`uZuXi2JS@?n)k`W?;1XSBiDZ#05u#tJ7shiTeY&$BI0Lc82Df`fPmxeL7j)yp)f zyQ5*YE<^hPUptMiUr?iGX~)UDg#t!d`^3>qCQeTT)5%wle#Vo{NfB1FRH-Oo+$D?j zXr??yVz^?npOVP(<+S)1RHlr~j&u4vw-ns+xg8Am&@i0}P+>~DI={o0RCt(|_6}FU z>M$oB{i%xSXfZE!u|nJYm`A2bI!)+7K(XV0OD8o0xzt*+EzWez=A#v zNw{ZSFr=S8@x!6~mTwMfi2+`0q5V(|{d@{Kg=%{%n_}adkjYo?;57MP5GR8mYwBN( zK~L7?8DNoMpgKRPk&}ZQ8-^wT4#>9bB2ZYHLFj~d3bub37S^h>>4yKs{zE= zdc9}o9EB=Yo}MiMuP%%t_T?NxCnG2MY=$>`in-~QihRSa$^>LW0Wn; z=oa*`QR5p-J45kM!lT6ugpimy>aY{jJ4=+xG9p%ok<1VhqzLl=1#bg|Zqq>eyVP*6 zTS@Ns<;*IVG7m}BkvHkpjH2}Xau4>f?7_G*#K|xFa4hL`{9^)y&H=r*PT7apL0*HG zUkB~VY-+^GCO;=)d#XSD7h^GcDUXw#)eN#$Oco*^7G^J>$mypI*jlf3;UVqC<9y!E zC9w{$m57mP#qsEm=F9|d<;0rF&@EkD6@4K`Y9T>90w?Gos$PT4U2#p7rrg@HZt6f9 z`UH%T?EJO`zWy1eqijy9(Zp{CX}>YyhQ+nC zV9CVupNUc_ViDzs=s0`zYghaH8SZ=KU3)`5z&LXH4a$#^=3qjfA~=tw0r!C$?!cVW zhY*vFU>$Q=$DrytZ<{oKxm4&*R{hDCro?~TNWT!Z*pddIMeZnF>pfTDA=6241hK6S@1C)+6 z-7)KJ(xS`2=nRFP0*`CfmNuVnAk>f0#~cKMXxw(isKEKWjIi7oKlT@wsGdv!{W&?0 zR`)$QYWM*?-Q)|wM%8w#Im8}%?8W-RK=lZ{*P)_uu1ml_ahc0bg~zm4G_b7K$=d>y@DN>{dm!ASk$qu1XC^V^Mo3ngEsxRxLb~Hk!oh!)0q4e`Y@T)1rT>QMS>I z#B)Z_Pd~K$Up|u(uU>wgMR8{fI8T^S_F-`|J_H`iL zQ!=P2i@@2nqj{2(u~kUybkGvEzSJ_~m^lu!N@_>00M#fFJQh;i7)S-%uLgm)Ry15Er*qOcWRt%qhjO&O>2% z2oDLY&|v>K+%&)_s{NQS(16I4 zc0oEKn|2TLSlC}^4O`C-bB(dD=~QB$*U^D7r8`MO^oW!0fcprLLPp&7RX6p&BTR1C zsK@&{0Je5Yz^g6$Y2s^C{i^8Do-}vmK}+5iMVM)0`lJW6jrt;t^Kq>q?=ZpMO08Sc zO!vX4_R;9%1b=>Mbc4%_GeZBm1+_+!Iw&v)B@|h^2A46AFL?BYG;J_5An+uJF=7;= z_5_SApZ%KL^h-X+P!E2XtMkE3Nv-4XeqhB_p|^n;HrLPJB=C0(++<1kq+LgV?$?w( zFWy{N;%uO(uRQd3jO21wE(fTa@Dr`7U^y4E-!5R4v;!op^X)xpwOrD)* z^{?7CEO;Z)_Bsef=*vDUW+v?9SgMEz{+QFFmrPm8;+TiGupIOBm-O&AyIoc_(M zcmvVae#9>qUu!};kDh%rD#egEJNvc2C;F%jlK(-Mgmfiol4cdR2o|mG0L>ZXrsc_- z&x>8neU{-%fPH|MvLG+34Q7nc-0*D0f7rDk?}ndLGyxJXd&=B6{u{8;H!lR;A81W| zQ07YlqKvns#}oYGjJIe}dji1*=d9S%-9abkv~19C3Ort5(#x*30Uv%L+muOXxjWX6 zglv#K{TNw)DW-OCYJk49r3A4Y$iJIb*W=c8+*G0tMfTHU z)w_Ek^W-3z9`NQ?ZTBy0@&{Dyk*)-Lp?9Rm8noQho!j!qY)lU~3_pWE(&dim?j^49 zbozNul+=HC;k>2GoAulkv~9Dx;p9$s+_ZTy zjK>wLyi0Xw>Gi8!pSdS(O;o&OcZO{BTfKODk^6?#2uG;hl+;Z}E+09c-vJ+Ae!O`_ zct0BD=Dy(keGVt-l}9D+RxP|!5@irjxj!liCw)0FF_HMIat`6ts`LWxggg4PIAQAH zoujg=G@1;Hby+$_i;lv|k@`Yg+4g=1K+hN?%uZQdfwo z@Q&P4J%@eJJ{F8e~26hyOz&$>f zq&Zn&qp2o{^KkAKoq;B05#;zNBo9A5g-}KxS5CXpEci>!W4=I9nxD}fqsc`oRx>(owcw%+-xcBVssx zX{aMQ;h8o8#%bPN1wOU>mmde~an|hq)IV21 zmDEWtDp3U8J!?1n>!)nC0>KS#g+ltQuOel3Nf3kEOGKEf!sDJopH zR#De8!Kxm)p=Cm;C(DPcuSf?g!EHV$CDo)QPSp;-&~&6`bF~*p~@-z zSG2uszrTAAZN82BBvTRX7waX_IyL^UC>a5Z7;c9VSrQ4)6+`XLxSRwuOe zXssQydCz|lxUztKf5YI^^^upcf5sXU+N*Z`iT0qR*VB0);XrObzu$I}3d z|B3`x6;%ZpUgf6S3m0-+Xqi?ahc718w2zBxV1>WTA`hI2*(h{{e>o|pcrP?zcXH}7 zdKWI4{Y*oc5g=`ZBn^rpTUJK`Y@V{32Td%)AiS80>-ud=r7A&MD6d-f26|!EMu@+wr3_v_jWtK#Mcsy^y$dDr5Lk>ci^M(5s}s_whE~{&>vR5&kpbHdn;NW4 ze2EjMX~}9{;^|J^`HW;nn0yfpy^-sypWLhrJLQX=Y%}6swT**=n&7Y&HqV4fm~$zO ztw{Mhf}~(S$sOB5GrJo8S|+%mC~Bw)*bX?0yX#BNzYVGk2ZgkT`VcT9dweTuQ`jom z?oj^V#i5hICSOhb%jeLQweUEyGtwQ_sH)z`lmmI4FTFkVu64U?lCWnX!#@V0TykhGWVY z9XRqmsoOk7aRGHp_V&|49YV{zIA$4*_izb5q7LOt5jcH&UtABZBa^^k`&n9HvLucMOJuBKs7tDi>;sf;D+|+Y|65HK`o{E%e9TT_j>0?wUWX0~> zU}9E^p7Q3oK(o*OWhTfudRNF0Jo4kU;OdGx>8^qlA!y1bDYm3G9lDEktiKU`XGFI_ zl(GcLX&4|GAF3Uh9{mB+K1Oi2VYpE=JZH~prCg|<+x^3uUV|3@(PVy~Nkor4%|S(* zi^ng1oy1w-g)u8iLBtVa-!Z8&Mww9Y;_Uf8j9`i8({hNAd;~35`s7o_d z?N(xj74j3^S3GqqQsy7hM!t`sAA|J1Zun<`mt41Ck#lm>N;}55R@GXWGD?%2j^6>q zDGAL5(z*NvVcq+`&vdC_+SIN39d&OkqogM$ad$$3y{`buXNhZ)FYL|z++NRjrROAH z$hViHYx*xxp94LX(H_I9XP?Cs-^tmRmP)9v7=**E2GZwgYwWM!=)InL;ZH(f=GRcn zQBOk=sJb$fOTzZK4Dm8VpFVETAOjX~jU08^HhzQvt!ibCWIz{F@|-??ViTk6TrZ#g zO}o)-E0XC=(n-H3jBQGcTOJv}tKf84mJesg*nW3Ok{FA+;+1jSAB*Dsa+6P}NB4S1 z!yKm;Dda_-QWEj^-HAD=2JPjYggHx(TKv{(fT~*sZ`2O0;Dyf+-d8kg?`^>C6FsFS z4CbAkIlYIv_!>zRrv70$k?Lq(^=I`LD4 z&8Yiv3b%}SoW=vL+-oGd5T^H)PC%)kh|bHv&>EHKTTf4!U&1zm|X`_ zt#ek7NXjVxT}e_sUXv&cd0ezX)*-f=EM|FLyDTDIrm+F(A=sOGhkUm|PNh!MEP7oI zU>HYK^zPNr!!F^F>P?J8sN0e``V{~v!WZXl0BUG>7tN^WdHz|$%k-UwpQG)$4?gU} zG~#(x25T#gZ=l6A=6MQ_%!h3_+&2?#!0yoarh`j_#j!i-ki;TwywDmsV+_XB22!Aj9rD>T+nrV%<%|lg2n6b9h#t_>yyO=tJX~_GTh~ z=eaV@VqA=oq@kKWQO9CzN2~N$=P};BNVGCNmIzkG{5y_a7qO0F)XORa&lI0DRBP~e z(D#6h=ECnJ=LFtaZt0k2h9sk^ihXdahAeaT5y{0W^-bCm_1F>NGYGB)56P)U-Nc4U z*L~|V5w77^QHI*?xM6jHF{3K5Th5|=;RQ|1GBSH`49l=e<^FwG zb}8|N@3BZ&<0?%mwem3Ss<8tc6;gTSiUY}0C--_yN_iEv5$AHboGRP6qtdG1UF~8y zHJ=oWzt#>0Ekip+H)t7^Vn@ao=5D1P{414mM=KUwe>Y?kon08acV$!9HFk_wxx`r4 zLXB#j8{DeCQMqUGX>3|dC;2wSCa;~N?Ynd+Z<;Wsx~`RsWIw+APVEx9Y~~nyyExkq ze4P9pyFo=*PZ*E1CO}wJ-e`dpqbytcM7` zPwNl7Z4%UaQT>zX#WN$)jdo1Ag#e#K2p%%#3z0Gs3wCguD46`tf}H#YMmc5&S~5-u zdUhb6q_7R958Vkfd?Mo?^fZIXgeGW<&5fPbGC5$V~y4bzKs^v@a4ks38SU z=!ajLltQ2C=?eUwC};4;NKBxg15k8DemR9mK%B}0U!3M_+Nap(mNn?sj&Cj1n*S}> zl+~kw=?!Ct+K5Qn;49CotPOfLtM1SvZGZ8UDECABS0!RtSI&|b63LVrEgH*u^9PfJ zS+mR;w)%ljRY>r;E1wH1ybF~@k6$Cd-`(mXF4Jt)WRS!I^f*7}hx29+#8Op*g#?H7K21&Naxa`AHkbF-Lly8q8y>ci9d3V@YLZ7&q=IX z`G++p{)SBeaK%EEuXLZ|z2f*U`cg>lJjOPVEJJ8y1(?jOxiIDD>>)qtNY}|QvRr+z!(lb#2PEfbO4RYra z^w&fS)m^++ZQzHSHQFzOy`+bN7NW9kfp-0g|*ToLtUgq%rc2RlP zf$`IY%n9VU1sW1Y@MjiLCLhr^)}_n}S1)z?{r$*?AiMmFDC8l}$(IT6Pc;b$uC~aE z(Uiw)vTbzxx`A961p1y~nFe6%d0fMOcKQ);HIfWzpVujwaG!`;V9yskBv$Q&xn7(q zil%~;{Z#cWiu6Z+7V-lZiL!GQu{qO(pJI1~UE!NDa^_B{5nqjvr#{O=*4}eP>>506cVm z#q05RI^%VxDF|H3-*nA?w5z;d+J`(jrB}HMYfqXALEB)PnpE)ZDXYXCpcv`ogt>k9r88p*^oks8APs{1JsOCgIV0eA02gHYY7A zw96p;))f3&rPL`oM#1s`2Wp&>aiY;yymo+^V6g+nJqJ*@TLH=_N|tG`701<;70*f= z4#fygG}?pnUn}Ai&^8Dzx~g`x6{ecqHiRd7ZHHkG5&d~>M`%y(%dJ=-Ya)?-Fh1dP zig!Tie#$9u(nBDFVEV_$r1-G*HMlkV14g~)A1uX}@v^QbVPU(<>>y0AhsqJwzJyDR z5zp-kvQm*Yng0A7#X_p2=@KpvZ$iJ#Nv`Lbzg%vDh>i(IMN|GD@J@*EOxt3905Xj( z+W=*(Yw_uy2LPPpjapwH%}crGc9d=lKXNuQ30H)wvJ&u@mNrcddB@em`Tpng{i`gX zcQ`FU?-RmIofe==i(r9PWMRyk`9 z?q68}e|`7h2?uPsQ)Vae_84lTI~4jkgfr^UAhDnRBJcT7aS#Nt4-s%~xnWl`69m%_ zq1hMQkl8*e)sDO25HRQXn?)V%*zA$JO}k+dJ(;)j)5Rz9h9ZReDD>HW~0A#btdOF|A0EIFgEtql78@f|{YU!PEh)bw%Q@|teg zXOD45Sh~fCUl4=$J+W=xp&O!};dULpfVurV=0FaE_C0ELC7{Kp15Wod*>EnhOG%eC zW&c$E>_L}p*@u#Ngx=mGimksd4=bH`ojkSPkuQBpN<=E^UiUU1z8O#iS~UMnE)@1` zpm$yJzo@Gjs7{HVyGbT}5d>!xj@H0C$cOro}y~vCis|Ak|tgfcNFA(1{rr z2M26>V4gh`S`A=zXd!D>0!}y#3)fATQYUT0oLvXnp$s?BSSBkut4AN1#~ztaH%Y|t zwT8lo#ie(dGKNyNQT3Vgy8db7_vS4_LU~a{*z=79|(*3PTCkMO&l6| zWU6NuUq@+nMHIHgCSk{m$MOFe9fWr`!dd9?_VeK}{&ayvFM{A@hdj{T1zw@8i7h>oslTcOLm0|jm<($iZg(mx>QM^a(DLmb|JfG06?<2nmSys#Px|PX70-VMyf;G8v9Lt?X6D-Z^u@N<5Y<{3fqyzSa z(uPS)VkDefkVDeQnbxCvsT$BR`VG@8ReLQPU>7sSca&LS%`z73n>FChCX?;++He?{ zm-;B~j9V9YAugHZ18oig-8VQ8$(@;U0a5-YogIj@sQMM2?3gEqbMFkfhb=8X?+Exw zJELd97%*0N(lI1%_nds&Gmz}bKCLcNh+AZSOG{PEb?yJXk0BuTxX;eax*+4eW9N_CC~v=RdkFDEx_ynFX&OC_c!L z8L>me83&}?%My)xkzuCIKMw_2Sz00~Z-__np21iI!qWtz(*y#IeLzOvNen+w6JAWn z?kavBa(q&h1I>S1C)ff@;IuOPl$LJu^q$%0e+utSBfoUQJCz~h$clAptV8EvM8~@y!$|Y_gTy_^UqNz%44F3XK~D^ z=+ph^Q*?oHp|9UTKD6pkQ-ej>l`00!1Ag0SHaO5_5fA-y!X_im7J1(g!<|1X#tf5% zu_syMrga}Y!N&&Op>I$85s$;aY<)o44@>OZUmz-3djcXSKJ24k=;t%H`sojmYUkcL z&Vj!E5|es6d?;}C;;eH;E*ee4TOJTmZwnC^5sJTYVi-mg4N9oR$(tJ8ci4Rpk^ z^Hg&Lzd3~y6*{sn$16%-us@a=^jnFh&oA#JtSz>^vvOIJJaHaP5_`Xp2RHS1C&9g{ z=#3L0tDb|g7c|YV1{bpdF0{>FlMiz?y_|gscv4+P{BG9#I9mueuirNK8Fi(XAgdVu zR94R{oP}JF8*};hXZk?Ua-SsMfYwRZ3bcmdS)nVC{hUuoS-pAtFo}JX3wUtHLVp} zlxd#N7%Z<`v94lI)iI>kSJN7)zT1c zlm`*0em9J1^-D2=nN<;F>Qwvatdi}%w03r>{EO`fULSpdS4W#2*<)`?a?R=6h}RoA zvFj!&twRk)e7`eF(0Dw!>k2-rnlmuN$7_e8GWqFP^}TCZqaP~i0RmzVo#;YXIjh_fcnyj_>v?0MO{hycWjVF<Ph{ zmUrric&c{lvUW<>^T^se@>p?oP22KZ@#ipVShwTK{pm9gpQL^GIGG&xytIFPb#TT- z$6$ju7~Q?QRR~Aai9>$8^Dqjlk~)&zfDB*0YsOTJ*$Y_Lyj>|}#sXsSO52DJf*k0_ z6N&@DL*~A=Mhj8w2CPVBhkmOwM^wY5e?cWa6GrwmU{Oxl>?xnS11Uwl!ywpMAj_QZ z$B`yd-^*gZecc1}y4^)^*CM~NiF_~ZBI|YY1D%&KAC#Wfbb+QPU}2S3Mx&-4{7g2* z@*~hh-L7tGv4d{TBlkd^u)cdy!urnxGp>PmpQ(Coy;0?~diVpEmbLd_ipHBp^aDH3 z_-lxcx%YT=W4Dp>Vr=QHkKw~&&r0+n<2mA)TJ!j8G@t&*6oFzCUpe?%Mb=$wIMoL2 zpFp`jTzmBQ#G{kAW1Fw#K#W0X`*@XihUx?{iOQhXlHH@=Z z8){0{YjYg_B?~r5Xn~j9EPE8G!-W$Qq*Qf zz}|&AN*;Y3Mb-j0C8HHUkH!(I9VC-auh=w$AD8(rs?%{~R82&%G;c=gK!k@Kp1Txf zMk6}N!IBNVl=RdF)JY5}iRm)@_Z z%;^2Pn>8y>(%hWIy>Rm~(W4`?Xefh%`{Vb%T#kI^TvTf4%}#ZWUc_twFtkg40HNys zGb)@yHO1B6uE=P911{7l%W))gODcwUV$g0?=*Vl9sN?6V>eqE5Lq>vj);3w^gJbvC zo_v|_ySsR`9BQv1-dY90?4Hjo8l^e{b^@92zND}r>Gs5 zY!7Pd@^MC2()|i=zOu~;_Z?nh!?dF(byVn@%DGFygw)Jwq@^F2uXU2`zP9ptC3%O@ zS6(i0wlpix5Bj?66Cln-T#5a`a>v3QE>?YxHl4g8qc=g>>$Hv4oZYc+?qD~*RPweI z47PR~C`aE4U&I&J?l7El|Z7VcTPHW74^$VhH{3g&T{Vb(xBSCo|bEfC_ zE=&v|rEOpRa)Jx%>G|a2>yf|IW1kk0g)#j2=ItYb7)I+f*a5ANq1FUN}`Oa^pKL>tfXy>axmf+s_pHuX-Ovu|q%&Ty| z0zswf&$iCYoqkXgF6JpncT)BXp-&NwxpETYk~8{o`|B!m3Ssf%eH`k*Y^CIu(uRA6 z;q3D~60;v*=f=iUfS%mFiNrKZu`4nk;$s&$(`h437DGp56G_tA%o=ov7<*f-hTW}n zwE6sI3}p;c+cpbT>(rX8bnL`wV)@yyiQKHXOjPx6_*frtErfgMSxSO<2-3XEN@3sT z!Z1+bZ-~jV=o6Q zL@WqHn$)7<2|JdrpM4||uoH`FQDW{0oC;>Qu4Z3i;%{CMm)vR<*6NJ}_<9jMt+gg< zPqqdRgA^|fC4lw+n8$ZsUb)r`XrjUF;N)0BO z)7Fj;HZ;vx_brE&tPgNGk;oWyS!F!Gf&R{zD)mNlZP&}lcFtw5xSG{<%A5T|C;U+t z`g<9J((|6YFd0hOe+~p9(;iA~bVnrU)nkZ;LB)D`Q$!#OMYoEj?ktp$C+%*@*~ z7%p|yDD#M|QvNb_EstGBd|>tz^&ZPn&aGQoI65ahm40k{&G4@3HV~+|;#AvmEb`g4 zS*Ynud_|g8?z#Cq{Xu9f%|8!(c3ay;v&qC-1?gV39b8%^?w*p{Jz5*}irfgM_gvuu`89tz(9^(kmwV0tdS2bv+z}qPp;NfVCq~I5y}!(5 z7`LGX-|!Yz=c32_mwVkBT+cTe=u)gvv@B z$u~h6fZDI$_~wkP^(RpV@@inp{ty}IuVjn}gHPaSOa)PiNCW|`3D=@iBN=0ezgI%F z4wTM|afI)F7xK0eo9Zz<=Vcfkl4~1cH*wEGsu~ygeyT&A@Q%BS>eMWz(Hhj8&_V)WW>f4On&sk&s?A~S9K$9&n$wx$@f-KXk0Ncl|nc;4v zkkt-@MsIcbM*^x^!hqmM(qAS5hb3tCAfK~p&(eB3bUI7LR!1`dMepX`!3DT7 z2dr!*5B_yt6rNog{3>5fM*NxhRRyY}#dX4daRI=}xJg0RTBxKt*k84TV{SaZzM%dS zYBj%1*G>Elw5kFB@q^?40=2TUwlH#6GBI-gZQ*@LU@k@d)lxv-BHwC2yfB#pV!|)IvR72@%>B_ZrB@-tY zf$C!`rb3^6TiZC)I+FYR4K8u)Uh%F?9w9TjtU6slcgpA|>%txj$&vc=+F~^{YQzME z4nPfveJWeT<0J2#Vld*327uDMB>zl-HL3041GOrp`bPsl$F?%ek}yiqKYTjhK{@~F z8r_5+A|uiS(eI@szAM|ag!+na7u=U63BkL*qnYtAlFn>q_#^Op4n9ck2EzSP{+p{H zSJLQ|yG*NQWp;C9UD1s=0B3>9DA%XK!Bh5mq<~zmE}p$aa#G$Lt%7Bx?#dk78R=-R zlQj&11@R1zR6_q4CTuxgR~Lur#S7IGARmGP8YvT8C`V23!{oB5GUAgHP!8^}i0Pn25VPLg&jOnC* z@^mHvXkl4&S@F;;er{fiABkA<$ZDZ;h|`J|Ai%vsWWvo#M17N(MQ`qyWt2_~Oh=pS zq}TAcXUM^S8a;>);2!{Y?snsRA|?a^R57SPX)1vJgKsg zVC`=6+1>R0ZmH$!2e1|x%eCIvuLuyEA8QRZfoj387&LhjwgI@$|X#Ql-AJhg82-FX{sy6g|_usTm_$Pp^iKd?vVyw-(GK^j){ISQFLai zUt@5AAkm~Rto%>Yc+fEREzm_jKs+^U3P_ot6#@YTg@IMvXmyfTCotiO;)|25BM75Dn#$Xb7a>WzxTyNpW#;Nlb$?on<&ElfUpOP09eatc@kWd07=^W!4HZBy1yi z*__Jc9g7NmtE{{NvQzsi{jE+RHl7;CVG0T#}zFhH(0<7Z|0^+u{3JSBBl!)7z; z*%s7QZFIIx^7YoELEvvIEq<@v^@p>lTQ$ZDwO36uq`~i)pZ_|Bv%=MO6r+jyZE*Uf zY~E-}nT*O3op)d!5Jr%-IqSB$KtC7HB}81>6!}^UGj$UU99f2D9j)*((W~_KK$e@gAIap z$4r$eBDq07M2{<1rc+){*UzlgzKPFJ%%tHIBjS_;MWOSJ^3^Ht;Hy zjTchLg*1a5z{U!dF~j4So?7lDUslU&aH&wD3FHrV)MysKh4} zd+^qyNep6P6!4<+EkK&{=MNB>wDHs&KL7hi$DV^N%bt5=8j{E1k>#yjuwGucysb%& zDw|Pmv7RTkB405}7+pnyjl=rRev$VZTZa-`Pj)~qZC5<8C!HN%jh#Kl$Ad)ELZs<0 z7Hl{%IP@%@M;t}sW)kcDRWEr$yNn)M&>Kw1-bRQ1O^!}h_|s({)>hzGB;|&r8J{HB zl|!)H${XSyjjf<{e`Z)*Qtd+w-3v70Re>#ew@8Z1_F4h{Vi%Hy2@--0G&%}hew|8j zL0E&{KV{K7ZF!WuX$&*joOmSY9a5d+#G`x7QTr7O=$7Lpv8lHc??@8y42S%;@LAae zzMLxEdv~_r!fMadM+J}VlO>b~U;s37=MmC7lIKieO4Oa;X|eL|;pz}~TO%Y-fL zgBrCt1mP>#yTb0qD2`Gl^ea>UdaUDRmzinz*Ru=gHo@gG)wT!Bk$r#hg=u>gmP1Ea zGzk!JPIMaK!ZzctU;29WO#Ebs0^cYT)452sXiUYMkSEiOeQAd{hmPc_D}BTHNVEOOox9RChp!=wh_H8l`uDx@9%q|RGvAPB$pvqGVOmsT3mr*a*{J)PwQ z0EdojC^bX64mVvc2WO!aC^}9B%VUA!2TSLx|hLAo~Nq&|(c9?h!I&n2Yg6ykQ^EgqDWU{_!R2 zWIrY;!f2v7Z>_wHvu6HDEfB*i>(@&?`Pe&FFF;cIAril+T~6*@fk%&Pa?9!DfjI6q zX8S>#w)PBqhL(=WFr&+yr$gc{6oEn$rDrxi+JA$Ayz2{GszoWJ7 zinq#Y%{9O$eR5FF(~n~uPNO9~giWzu8K7+qC^zViIEZqOw5Bz&KN}wTx?BNns?Fb7 z^|y0Q;M8H(23QRk7%b>7GFknKLT<4~d6fT8;kg64!Fj*kMAEnTg#QP^`+se%iHN~} z8QT9o1&S19rNO?9g++@_hpN`u@MPe2-h=-2`s{cB5gm=P$4ydoUU4Dr=w-x%1WXP( z(&rD~Bu))JbQ1{X(DaE+4m%2w%}qUB5Ih4)K@41eptm*iJQR(>N?hLRMKqvuMq4sO zwGh=kW14bSH!Pf@5G`H(xUP0=Q14HwPDN54SAv7B2~}fCN?#&bJaC>wmfR#XzD|js z<4MZuui36@VVw#GK!8JYFfw1&Byxr8*suYrGT!ATG|Ks3Q+9e!k*s9!o*5*=IH}+ zw(qxgGv%e+r26JyRd)dpI5{fc(c$R4u~=lCR6FDlRt`Z(jN@*>(_1Mw1UWg9QJ5~;q!Skn7O>^ zYU5caZZr>Wn_@tDyA9velUnhS_8E>8Ik&jZTtxD6zf_xpnCc&H9tJ8A7!5!0P0mv9W7X?!cpW^b2)p)&m&|J0>6 z`6yOW{q`JBM#ZT&m=hWLBT(tEEobiFvc#AyTUp=e zT$$v#bb{)W0@fi8>u9skfUY*9a0<-Ho(F>I+$w-J=&h#tpQ}t9BG6@hyhCw&@vf3? zHAd0uFpj-ZEx6Stly(B9Y1G|Bps_}etd%*W7&bu#Ek(n!KQZf*i{OP8tjma7(?ReaOHelzZdjw3t@UWcH+7^Hbyw&&29nXe4Sk!QV7e_`f60(AqmSkV=XWU?-t-0n0Q^AoIiY( zn!9+V0o6z;3a5(2?CUgB36 zESI!F=3Du2tKruIB6&3i@oTSW=GDmpTJH%gmCR)j=G>&~F7rFD)iLSXZ9Y?N^v>D$ zG|%a5=7jV0Mq9@tosENN6P>vqcG!Z?BiwN?Pob~w1H_OxKgtH@4!&q7t+3Q{xlvez z9-DHn_WC^aib@ns6F@u2-Ck}E(A!Q&aH*E2Y?;?JgBr8&ZH;_a7w}t#ouF(`Nz^eF zl{wX7hu7TQZhT52ub$0IXt@jtDQrmpR#&8siU`iv6zcFKV@=?q%Y0N%u2s4W|C6Z8 z`TVgd^JPU_8}UTjs5waJkYU2K**W8e>upn%j)SBOl>M{YNc2n+4LkVgYp+wc)7(- zIR96OnfCJoJY>C%a0Ulm`N~TY*bv+M{oaVWeSM%qw*re&}G}gnyKj` z*)0+%>^BQS=uTwouVWz%~j=pvcHNfwl53^ko0D=6$Q+$R~+7H29KvX+ukOeZT; zEL8y79C8HeB9>1H30+|kFW{Sl)RhBZWHS)2-F{o)TvmM_>T-Le#<#_c<&c2zGLb5wGqZ!*G(2uDP1NWcNT9pt46P=e z28OaMv*14CmloU@&ALJ2-oTh#lq9`kNj7XL@%xCoyk~iRL8(8J#%#-D=e=-#%J9Fz zZT9IghxEW8vBx7ICVt3BNh0NS1%klOeu_tcM!pXu9uc=QhedD$!aE=Av#-%q{8{z) z@?j^6_iT(m@`QyfQG5!Mat0O~^xN3D;l55lHJUk_&|U~M$%7Ms-9!TwqF^fB7rKNn zEeI`wC~{zBj7NtiD=%CB+hIsWm~#GMHNh78c7L1S55xb(Vf?nUH~H=4{(lhpqkqXV zf(c>!m_CrIN++xC4VBTc_d^qV>FqVxot{!Q}U+lkMk_E#lr?@)Yv(ZMRoCY!iXAE8)TA11s|}; zV3?sYwSr}*3F3_^ck}meNm4s4pv9wrv>0ml@oI-0`l2yaey!w?kByZ*dk;Y3z3Teq z`QzQr!!>eI%?>D1mcs=(K|7XWX|6HqPp`;^muKdA4y;S07r#DXVAg>fD?yAG?)=Gc zP_51A`#%u-V>>L2^52DM`nKXk|KG(>G%@{eXBVvSSFTSGJ&V3bOjJQs`ToxhD8V{* zG*%cEs$4XMA*Y+xScG)SVv-^B*8X5(IFvwdEK4_imLQqz=6U9n%<9Tj?lj{MEY1m% zU_Puj21M;7Kvp}fvR8jxx$+vk3+cI3NM{MCI}eVN@jVfDMp^*Yt8j~0;RHYF#j^$i zAf}V)^hStNK@)BhtH$tH;*|XG>9$OKbUHw^B-x}~9DCq5-corie2Rc6r*2WYz4my*mGk50Bsk-N$AJ6;y z-L?1g)LMJjUMuua>o>38%9%7jBYaFp$9(tcC-d}~6s>V3@dlK50)5uFOHx4|Kl?e( zyaUGg1h>&@W}GPnSu&KTw9<)|tjy6fBu%G)RjwVgti&9P?m7n{^W_@&DmN~Ti3Jzr zSc4cdJ1RkxtB~0H@T8Bd1!mkQ+ex=fcFEaB#zHn*0(jHeL<1}WT78lU8alJ`L&nn= z)7hGA>->K*VC>3^ysr9A0^N5)DE`Z2{7>#8i3$xBYj)G?}wkk(eP%48+}rS9NospwRxZ6-%W93+4+#7fZg zC?JK2ne1>8TJif_xGg0?5HHO*0opI@coQQ7@c%?M zegw`uYJLZs_T2~kF9S9g^>9#dviI=(kAQ2GC!_!ZD7?lyOIE%cHP8*%K^L_`;mryS zBt-Lc<1E7rq_RRxOY3pB>>uFhet+;uw?&`^TAQPoVA7o1-KTx0US>|v|5z_VanSBY z7g&^kYCq{&Gu5LBi$3&7ILY%lxZ9YIrZFaujm&b}sxBCtMHPrdS5$>AM@PW$5)%R3 z9wqx79M_(O#WDXX?{(^6-lOAb7C;mmk%hwRbSd5>rXI!p+*@zzA1Mh)PHrY|oQvfI z9_1FLGoj=*{i!G`?;4nGH3_2ffc0cp$f#Y`)a~z<@{Rf4252k3OT?)1Wwr_VIkusCIqlFZ zLU1JM`1PJpcJrskqfN0Wi!?b(9p7^>1ceTXuEYVeg9gCn_M;K?lFSW$Y3TZZpdpMS zvJWjbDLv^wJq}>zo^Y$*>9PAx5AA)>ctsAf^bl_Wkx3R7n!B;hftz&{Ew(72U+PkG3E4dFcd z@@0yuob_-ViFJ8o)pBUS7(`~0k&g3sO(`jorrk`OcOZ{CpfTAJYlY2}%;il9*UJ-{q1;sTE|RY&gRzeU z{Xr1g5=4uP_=F--OJDzSVh^Wt<t{lsBeS5;! z^Xi{#=JxTj@Q~Y2NO~oFN$qQ4=hZPRhF~SvmEbZ~lc4LeKcA{Dm-m5a;B+^@moY}Pms_Mf#z^;6vvGY8T+0E$yZ8ry0{Yi+CucN;H(+%!9;5dzh{PANQ z<;M@||89x=$0d$YfA?25$NcKGoKGq(YkmaNl%`CJWs}tw94@YhMwzvOmgs;h<(8G- zsAoBolfytSv)MPrRxWdf<8OpEX2PXfNcgGhP+mVZ#i{82^p^A$l=jzGPAIXI@-eLY zq=zT%#@RFPWXk%B+a0gp=wl&F+p#}vX0KPt2Two#ND$v{;FA;wFMcly3-0eOP>{Zt zWQTs@78SFX3J^4SA0Ha#Tiy=>`~5|Uh}*SpbXE}Y(G9f^UllifErr=h++&2@c`nd< z#d|3L*+DdvADs^Rc@iFa^H%>uJmgt&%~J}nz(<1ws)uvCkBJ|T$ie?OzXN4Oij7Yqmy18&# zWUUvOIG@+VPOq;|4QvW`VL!X3;$;U^Ih%P=I)>|EL09A|DfBR7L$9<^BQv#IsoJ}Y zel4nQCkZyLoyKweF(xE#T&f>zl(X-=+H=q`RFt2@I>(5(f)^(e3pfZn;V!OJ<|!0sOP47GNXi4Y2Nw!|>iJgG2= zrD3hfXdQ%#2PKZG1*Nf|Yas2S0+*q}2b6^3h_$uT2ZxPV2RGRe@X5|)`bas%N&asPFr>WnaqL8c*rf(YG2h7 z9SwKuwK&w7YxvF?wr|!E58cE$DVEP>&Jo*gr2(o6)e732|Atvjj^m6HAT__w&>CB24%6_ zrmfK2sAjSW9W1?nh zMSbkd>u5KFNalq0VM9QX-%SZmb_ODaJLGyKD=67+Br)z~GH&A~`A36$Cp~*t0Sy5t zfanOg6Y1dJNlH`?h0th7+^%5W*?ejGmdZ7wym4{M+JF7%L#4H#%<0akrrW4{^bV>C zQ^x-K;pFXVjNyBuKwp<}Y{+q;_bml5mNPp%HR}b|u{xlM(siFoob72q!;c&}6eZ0Z zqs}%Usfx^AWOIIK#KC@edA1_vmAcF|Qr3`)WD@yV|Ew`~_#V;6TLp$JRqwZBk+Kv; zlc^y0mRrg|N>n9i;!mj*OH;ZSmOhR&4@MQEyAGi9JJ@MByOPE%8Khn-_X zFhzC*`_|6pG9+zqL)3+Db!w#@$-T1l=Gl~ATM$6ECyj}E=#A#Z{fLz2g;DlY^K5A9 zm_RHqgP8wm&O}YdywK}o)WSH$E~Pazhy`$sHT^)DfuhY0giQ`BG73p2rsI)Gy}< zK4DnV75~fxYP(};@ok5_sy`V{0u5;n^MEwlr7+uMC!vtrte|(x#|OUE1lzg`gW6eP zZEW~A%tPMM9(knO2gEJ_IL7rOEQWfy4aB=*_Nq02Yo>_zfD`=p#!61#Fod_l?l;T#cN zHFs_)&R!Wz^Z{^s^)!kv)YN44y^|^@IK2@cK6Law+2%c3@Rj-GVVK%ym)LQc!W$>E zz?RXBh_J2A9_oWVfKJrZfaBrLxoD2|Y?XGFH zj#H7iLsRACO?P3mxT7?~f^xLxnCxR#>T>u)#Xq%T+$GH;`bZ*LCb*BRe{b-g@A_{~!i#gnu#sPu z$OcQ1L|=o`UfN71ef`b#|4SgY{1rJJ1}C za6&8Xuy@P~!`249++a*z{DVghH|DzT{bLz2y@9Q81_;+~SxPH_cVVN`m1sG%zP#`=8ziM@I49F!*zXSQ0cj1 zEf#|`>+$B^8fI{l=E)1kQ;5G`ZGow%+QhgIEp$amgch2j^hC1Ovr;GYJI?m!D_$Sp zHI2hG^}qjQn^^8X{44Go%58lg;{R_*r)=zG>EQC83FtTVbo=I@VqmF@k&7l`p$`9j z>Z!HxpQz{5Xg_MUzE*Pfd1^+|_-H?@Vhy;`$S6V7ii8*#h|9r$@JtMWKM5fT0T}_H zLq-Omi83%Y|1XFt{@rh4$wC{FhWdu5nExe2{f~I$oy6?q>`nd`u})F{Ypk+_`fq!Z zBuNI35IQI%*f$FX(y@Y~kqm?c!Vt1h039zQje)~6X<7!Mxumru%GS2VO*vUG9EzoO>mg-5Y+e1d>(wqYd~RQr|`{@~7>qQu+}h_mBZEl)4Fl^d%ll(fT2G*08RnOG$F+ z5!a6fr6ZTqm>Jn%HOj(M;Q^{@Lc%0f>$+lnk|VC((LG|;_rGwkVf-{W2o zt+1x|clQ!y8__FCFy}Fqsz&X!$zuy_Oa>+~e{ru_q76sy7@7Ii6s4h4l|De6mMGJP zARQ;xZ#SEj{FmZ)@I*@Hruk7!;xu6;v$#w$^JjP$*ykH2W~}ivk{T1cj8KK@rtiOj z3l#@=Xx7;_iAq4IbdE^ax=L{76l`9Tl;yg22)I;P37fSniE8XwH*7ch|LHw=o78C| ze?&Ht^`pi~!?i?x9*rIkgm>i+iUDm|KdC%$~x#IXhRvMmTWOp{vxB7L$;+DrZ89 z5NhLy8&mzMynP|VVIJM2nsjbfVhQiw1=xmNE0o)*p^?^tbk0LJaveW4Zl@mGzRpke zd0sIe3GrIasHVTV9XwdOsF99HQrnH=x*o+mQuS!kS; z5g#8lJBpv~Onk99YSIX=lIa&~TS)gc-xJHlK5V8zQi6& zw5+QIS{~t)b2c<^s+mE@Vjb&=l8%c)4onYLB_Tb&C8Uk~bX;)6UOv-^6y@S7)`${q ze(aEQZ7$FqX>$-6F`}7sY)aoD0?N@q9mwL^e*@}N!;aXUeL37dz>Vjhk@(-NGF{_6 z^ej8ecW`)%4L>J3$V>KC8jz|6UxQ-#_v>T%4WnYkZ_DANF=~fvxc<@9xZl>s_U+bT znd$jHxPHLCoWFL_xWlHen4y(j$&`FIHLju3HY9yno?nT)*fulb#oGAuH^(NngP zRJ1hip6>)V!4<@f05h@y6Msk9#L=cPZwU0_e(^00JEpyZfJPXm151ncpPYJxP9Cmw8+=6UPrLJd2T?j(cSA7zQ}(+RA#njYByA8*nablkr6;A6EODtN>g-H# z#UyNubx_$Hm1Iv61wkmF(O&;sBu&)@q4Jb_BV`(=u)v^>%G zJcEw55UAuRa_AEk5KY~w{8;wHf$ogCP&xhhMQ81J&JMrW99#-xqGMKnmoJ+!8MKPC zw{kqRH7;wU0p$ztG0}T&TsHaxDu7q3=N$A!Ei#IDd3oZd2|6NA+cJ5gctl5Z z2~Ma=giheskAz5^dO{`*^a-}T)2b!Y(!M!u#$gBD5zB(hs&}D0M0dkHm66gFYQof~ ztHY)()a7Tb9bMT}J_0~hEqoJdfmisyP7Bf#|~Qe z_9djwH>B~vkrKw>JJHc* zg$sZkI4zJgLiOQ8dO8smXqCItX$vTyX&TG@E1bUT07n{Gec^E^7@*>iNAA4G+(8J; z$lA)tN*KapebBX2Shpb7xro4~{Y^R!Ij&S<$cUM$C$Dk7RbM=N)8E1kjo3LC+PFo< zfGqv1X+*egy+oZ>y`wPA?M{u$gB4ECqKyCB<*3>b(OPE+#Ais5M?z$7Mo7NAh*$_W z1&@4j&a6xg@ea(Fh?Hin^`|Bn??^s8QEX4{L-*`aL%f?b%1lVJUZGHKQP0$=^G7PI z%`wl)YVox5+e?l8ahMy7>eNRjOYoR3?Ph-eU22jA#eMoD#E%yS<;{sFzvP!`kmHLu zW4vo+oqe`e@!#H#?B=zC#Lsi&0&!GtxCAF!Z>U6l%ZMI1VJR%wwe-W=%Rs?5|8?Xq zF85k4_J1#b&B6^VL)&-Qg?$E#)TUIc!c;sUVoI!h|5W!LRxQi#D_^@B1D2Aj8(c!* z5ibnk)ncMtZ`TrC5Rj{*Vu|F8tfrQUG0=C0`$OEuQ>Igt zu@WW7;v8c~GO*zv)cA!+eKwl78Qpu+*Ii{PZ~eT@Y>}6UAV#q8fHn6T7{iZG z+2+Hdn+Q5=z=$VgAKiLZQwU~ygJs$R$%3SGT>eOjhvN8KPK?Fa&zl;Lrfw#jw5Ig* z5!R48<^rD5-)U@}9#O?h76-0lmDm;coLfi&ma;WKVsQjGTw#j#k`Qz&z`&0(kBau& z78GoU?8iJKgS=xm{t4q(94&{$FuED;cTK)Bz1mjZY=Ch%uUOVE&B;0*H=C} zAspI&9VMKXiFL1i(crk|0L}#F^o~k7W4sqKGNdeTMZT<8On&;C(hgwxDm$R+w=XQL zM-HMVfH(w`ZUyrdir#DQIsQFfTNp{m^xSfi+|5~c0s$@jRcJ%hck^_aP)EBnoSio+ z-RfYad5nI#90KN`Q|Tmi4l$qEKL+PSRqh&Y?Gs zMCg8GE}*;QbsuNg#9ydLKMN{>bXcW}src{n1)&BR5JbN$TC||i|73EQag7d-(1TUl7WC; zNUmmMuRt-!HRsQ}6puIijj&&{T&PKDS5qHc49M8;G5}q%18KkSRj}g&PrrX}|91Q1nRLYws-Wm+@Kd>-4nFR&>;*%3eGcwI) zs`kG;0TCQra=bO;K};ak*R0gYR%nPXNG>5Vv-qT?ObF#tc@Ccm@4zt~hAdTY3|avkci&!wwx+t|;~u^KIoOJ})dYF06hoK>{^RpGiQU zL!=y%B^Vova&+zL1Uc;{@0rL}p7z`*rU#*;6P0- z4^8ThW}WeDoFK4SNK2pKWlCd=jrwY$Zt2d;^^3Z^OV(~T5TMF}t2dMhaJAv+X6f4* zG7VG5nJG$BDTr1-LqV926Y_k)?yj5mjpvmFjc+XZk75L>k6erKDBy4WU;e6vqx)h--v_Qd{wSJGddlX>~?aWygMk00Fs-Aa

+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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 literal 0 HcmV?d00001 diff --git a/doc/jsdoc-toolkit/java/src/JsDebugRun.java b/doc/jsdoc-toolkit/java/src/JsDebugRun.java new file mode 100755 index 000000000..319a5c67b --- /dev/null +++ b/doc/jsdoc-toolkit/java/src/JsDebugRun.java @@ -0,0 +1,21 @@ +/** + * 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 new file mode 100644 index 000000000..25f519a95 --- /dev/null +++ b/doc/jsdoc-toolkit/java/src/JsRun.java @@ -0,0 +1,21 @@ +/** + * 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 new file mode 100644 index 0000000000000000000000000000000000000000..a0ac7daa6bfa2633f1e2d27696b8afa8577e986b GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/doc/jsdoc-toolkit/jsrun.jar b/doc/jsdoc-toolkit/jsrun.jar new file mode 100644 index 0000000000000000000000000000000000000000..49c03f4c6f71d4e24f3897794d40585ffc7c20fe GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/doc/jsdoc-toolkit/jsrun.sh b/doc/jsdoc-toolkit/jsrun.sh new file mode 100644 index 000000000..74ca79c05 --- /dev/null +++ b/doc/jsdoc-toolkit/jsrun.sh @@ -0,0 +1,52 @@ +#!/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 new file mode 100644 index 000000000..32f43582f --- /dev/null +++ b/doc/jsdoc-toolkit/templates/jsdoc/allclasses.tmpl @@ -0,0 +1,17 @@ +
{+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 new file mode 100644 index 000000000..4c7de1cd5 --- /dev/null +++ b/doc/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl @@ -0,0 +1,56 @@ + + + + + {! 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 new file mode 100644 index 000000000..181ed1188 --- /dev/null +++ b/doc/jsdoc-toolkit/templates/jsdoc/class.tmpl @@ -0,0 +1,649 @@ + + + + + + {! 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 new file mode 100644 index 000000000..a5dc1158e --- /dev/null +++ b/doc/jsdoc-toolkit/templates/jsdoc/index.tmpl @@ -0,0 +1,39 @@ + + + + + + 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 new file mode 100644 index 000000000..446c92b13 --- /dev/null +++ b/doc/jsdoc-toolkit/templates/jsdoc/publish.js @@ -0,0 +1,200 @@ +/** 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 new file mode 100644 index 000000000..97e021ef6 --- /dev/null +++ b/doc/jsdoc-toolkit/templates/jsdoc/static/default.css @@ -0,0 +1,162 @@ +/* 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 new file mode 100644 index 000000000..353b735a4 --- /dev/null +++ b/doc/jsdoc-toolkit/templates/jsdoc/static/header.html @@ -0,0 +1,2 @@ + \ 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 new file mode 100644 index 000000000..661f6f67d --- /dev/null +++ b/doc/jsdoc-toolkit/templates/jsdoc/static/index.html @@ -0,0 +1,19 @@ + + + + + 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 new file mode 100644 index 000000000..f8f4bd1f6 --- /dev/null +++ b/doc/jsdoc-toolkit/templates/jsdoc/symbol.tmpl @@ -0,0 +1,35 @@ + + {+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/README b/doc/jsdoc/README new file mode 100644 index 000000000..9b7cc7534 --- /dev/null +++ b/doc/jsdoc/README @@ -0,0 +1 @@ +You can create the JSDocs with generateJsDoc.sh in the bin folder diff --git a/node/AttributePoolFactory.js b/node/AttributePoolFactory.js new file mode 100644 index 000000000..8d8a1b427 --- /dev/null +++ b/node/AttributePoolFactory.js @@ -0,0 +1,82 @@ +/** + * 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. + */ + +exports.createAttributePool = function () { + var p = {}; + p.numToAttrib = {}; // e.g. {0: ['foo','bar']} + p.attribToNum = {}; // e.g. {'foo,bar': 0} + p.nextNum = 0; + + p.putAttrib = function (attrib, dontAddIfAbsent) { + var str = String(attrib); + if (str in p.attribToNum) { + return p.attribToNum[str]; + } + if (dontAddIfAbsent) { + return -1; + } + var num = p.nextNum++; + p.attribToNum[str] = num; + p.numToAttrib[num] = [String(attrib[0] || ''), String(attrib[1] || '')]; + return num; + }; + + p.getAttrib = function (num) { + var pair = p.numToAttrib[num]; + if (!pair) { + return pair; + } + return [pair[0], pair[1]]; // return a mutable copy + }; + + p.getAttribKey = function (num) { + var pair = p.numToAttrib[num]; + if (!pair) return ''; + return pair[0]; + }; + + p.getAttribValue = function (num) { + var pair = p.numToAttrib[num]; + if (!pair) return ''; + return pair[1]; + }; + + p.eachAttrib = function (func) { + for (var n in p.numToAttrib) { + var pair = p.numToAttrib[n]; + func(pair[0], pair[1]); + } + }; + + p.toJsonable = function () { + return { + numToAttrib: p.numToAttrib, + nextNum: p.nextNum + }; + }; + + p.fromJsonable = function (obj) { + p.numToAttrib = obj.numToAttrib; + p.nextNum = obj.nextNum; + p.attribToNum = {}; + for (var n in p.numToAttrib) { + p.attribToNum[String(p.numToAttrib[n])] = Number(n); + } + return p; + }; + + return p; +} diff --git a/node/AuthorManager.js b/node/AuthorManager.js new file mode 100644 index 000000000..3e177291b --- /dev/null +++ b/node/AuthorManager.js @@ -0,0 +1,131 @@ +/** + * 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. + */ + + +/** + * The AuthorManager controlls all information about the Pad authors + */ + +/** + * 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 + */ +var globalAuthors = {}; + +/** + * A easy key value pair. The Key is the token, the value is the authorid + */ +var token2author = {}; + +/** + * Returns the Author Id for a token. If the token is unkown, + * it creates a author for the token + * @param token The token + */ +exports.getAuthor4Token = function (token) +{ + var author; + + if(token2author[token] == null) + { + author = "g." + _randomString(16); + + while(globalAuthors[author] != null) + { + author = "g." + _randomString(16); + } + + token2author[token]=author; + + globalAuthors[author] = {}; + globalAuthors[author].colorId = Math.floor(Math.random()*32); + globalAuthors[author].name = null; + } + else + { + author = token2author[token]; + } + + globalAuthors[author].timestamp = new Date().getTime(); + + return author; +} + +/** + * Returns the color Id of the author + */ +exports.getAuthorColorId = function (author) +{ + throwExceptionIfAuthorNotExist(author); + + return globalAuthors[author].colorId; +} + +/** + * Sets the color Id of the author + */ +exports.setAuthorColorId = function (author, colorId) +{ + throwExceptionIfAuthorNotExist(author); + + globalAuthors[author].colorId = colorId; +} + +/** + * Returns the name of the author + */ +exports.getAuthorName = function (author) +{ + throwExceptionIfAuthorNotExist(author); + + return globalAuthors[author].name; +} + +/** + * Sets the name of the author + */ +exports.setAuthorName = function (author, name) +{ + throwExceptionIfAuthorNotExist(author); + + globalAuthors[author].name = name; +} + +/** + * A internal function that checks if the Author exist and throws a exception if not + */ +function throwExceptionIfAuthorNotExist(author) +{ + if(globalAuthors[author] == null) + { + throw "Author '" + author + "' is unkown!"; + } +} + +/** + * Generates a random String with the given length. Is needed to generate the Author Ids + */ +function _randomString(len) { + // use only numbers and lowercase letters + var pieces = []; + for(var i=0;i= ", oldLen, " in ", cs); + break; + case '+': + { + calcNewLen += o.chars; + numInserted += o.chars; + exports.assert(calcNewLen < newLen, calcNewLen, " >= ", newLen, " in ", cs); + break; + } + } + assem.append(o); + } + + calcNewLen += oldLen - oldPos; + charBank = charBank.substring(0, numInserted); + while (charBank.length < numInserted) { + charBank += "?"; + } + + assem.endDocument(); + var normalized = exports.pack(oldLen, calcNewLen, assem.toString(), charBank); + exports.assert(normalized == cs, normalized, ' != ', cs); + + return cs; +} + +exports.smartOpAssembler = function () { + // Like opAssembler but able to produce conforming exportss + // from slightly looser input, at the cost of speed. + // Specifically: + // - merges consecutive operations that can be merged + // - strips final "=" + // - ignores 0-length changes + // - reorders consecutive + and - (which margingOpAssembler doesn't do) + var minusAssem = exports.mergingOpAssembler(); + var plusAssem = exports.mergingOpAssembler(); + var keepAssem = exports.mergingOpAssembler(); + var assem = exports.stringAssembler(); + var lastOpcode = ''; + var lengthChange = 0; + + function flushKeeps() { + assem.append(keepAssem.toString()); + keepAssem.clear(); + } + + function flushPlusMinus() { + assem.append(minusAssem.toString()); + minusAssem.clear(); + assem.append(plusAssem.toString()); + plusAssem.clear(); + } + + function append(op) { + if (!op.opcode) return; + if (!op.chars) return; + + if (op.opcode == '-') { + if (lastOpcode == '=') { + flushKeeps(); + } + minusAssem.append(op); + lengthChange -= op.chars; + } else if (op.opcode == '+') { + if (lastOpcode == '=') { + flushKeeps(); + } + plusAssem.append(op); + lengthChange += op.chars; + } else if (op.opcode == '=') { + if (lastOpcode != '=') { + flushPlusMinus(); + } + keepAssem.append(op); + } + lastOpcode = op.opcode; + } + + function appendOpWithText(opcode, text, attribs, pool) { + var op = exports.newOp(opcode); + op.attribs = exports.makeAttribsString(opcode, attribs, pool); + var lastNewlinePos = text.lastIndexOf('\n'); + if (lastNewlinePos < 0) { + op.chars = text.length; + op.lines = 0; + append(op); + } else { + op.chars = lastNewlinePos + 1; + op.lines = text.match(/\n/g).length; + append(op); + op.chars = text.length - (lastNewlinePos + 1); + op.lines = 0; + append(op); + } + } + + function toString() { + flushPlusMinus(); + flushKeeps(); + return assem.toString(); + } + + function clear() { + minusAssem.clear(); + plusAssem.clear(); + keepAssem.clear(); + assem.clear(); + lengthChange = 0; + } + + function endDocument() { + keepAssem.endDocument(); + } + + function getLengthChange() { + return lengthChange; + } + + return { + append: append, + toString: toString, + clear: clear, + endDocument: endDocument, + appendOpWithText: appendOpWithText, + getLengthChange: getLengthChange + }; +}; + +if (_opt) { + exports.mergingOpAssembler = function () { + var assem = _opt.mergingOpAssembler(); + + function append(op) { + assem.append(op.opcode, op.chars, op.lines, op.attribs); + } + + function toString() { + return assem.toString(); + } + + function clear() { + assem.clear(); + } + + function endDocument() { + assem.endDocument(); + } + + return { + append: append, + toString: toString, + clear: clear, + endDocument: endDocument + }; + }; +} else { + exports.mergingOpAssembler = function () { + // This assembler can be used in production; it efficiently + // merges consecutive operations that are mergeable, ignores + // no-ops, and drops final pure "keeps". It does not re-order + // operations. + var assem = exports.opAssembler(); + var bufOp = exports.newOp(); + + // If we get, for example, insertions [xxx\n,yyy], those don't merge, + // but if we get [xxx\n,yyy,zzz\n], that merges to [xxx\nyyyzzz\n]. + // This variable stores the length of yyy and any other newline-less + // ops immediately after it. + var bufOpAdditionalCharsAfterNewline = 0; + + function flush(isEndDocument) { + if (bufOp.opcode) { + if (isEndDocument && bufOp.opcode == '=' && !bufOp.attribs) { + // final merged keep, leave it implicit + } else { + assem.append(bufOp); + if (bufOpAdditionalCharsAfterNewline) { + bufOp.chars = bufOpAdditionalCharsAfterNewline; + bufOp.lines = 0; + assem.append(bufOp); + bufOpAdditionalCharsAfterNewline = 0; + } + } + bufOp.opcode = ''; + } + } + + function append(op) { + if (op.chars > 0) { + if (bufOp.opcode == op.opcode && bufOp.attribs == op.attribs) { + if (op.lines > 0) { + // bufOp and additional chars are all mergeable into a multi-line op + bufOp.chars += bufOpAdditionalCharsAfterNewline + op.chars; + bufOp.lines += op.lines; + bufOpAdditionalCharsAfterNewline = 0; + } else if (bufOp.lines == 0) { + // both bufOp and op are in-line + bufOp.chars += op.chars; + } else { + // append in-line text to multi-line bufOp + bufOpAdditionalCharsAfterNewline += op.chars; + } + } else { + flush(); + exports.copyOp(op, bufOp); + } + } + } + + function endDocument() { + flush(true); + } + + function toString() { + flush(); + return assem.toString(); + } + + function clear() { + assem.clear(); + exports.clearOp(bufOp); + } + return { + append: append, + toString: toString, + clear: clear, + endDocument: endDocument + }; + }; +} + +if (_opt) { + exports.opAssembler = function () { + var assem = _opt.opAssembler(); + // this function allows op to be mutated later (doesn't keep a ref) + + function append(op) { + assem.append(op.opcode, op.chars, op.lines, op.attribs); + } + + function toString() { + return assem.toString(); + } + + function clear() { + assem.clear(); + } + return { + append: append, + toString: toString, + clear: clear + }; + }; +} else { + exports.opAssembler = function () { + var pieces = []; + // this function allows op to be mutated later (doesn't keep a ref) + + function append(op) { + pieces.push(op.attribs); + if (op.lines) { + pieces.push('|', exports.numToString(op.lines)); + } + pieces.push(op.opcode); + pieces.push(exports.numToString(op.chars)); + } + + function toString() { + return pieces.join(''); + } + + function clear() { + pieces.length = 0; + } + return { + append: append, + toString: toString, + clear: clear + }; + }; +} + +exports.stringIterator = function (str) { + var curIndex = 0; + + function assertRemaining(n) { + exports.assert(n <= remaining(), "!(", n, " <= ", remaining(), ")"); + } + + function take(n) { + assertRemaining(n); + var s = str.substr(curIndex, n); + curIndex += n; + return s; + } + + function peek(n) { + assertRemaining(n); + var s = str.substr(curIndex, n); + return s; + } + + function skip(n) { + assertRemaining(n); + curIndex += n; + } + + function remaining() { + return str.length - curIndex; + } + return { + take: take, + skip: skip, + remaining: remaining, + peek: peek + }; +}; + +exports.stringAssembler = function () { + var pieces = []; + + function append(x) { + pieces.push(String(x)); + } + + function toString() { + return pieces.join(''); + } + return { + append: append, + toString: toString + }; +}; + +// "lines" need not be an array as long as it supports certain calls (lines_foo inside). +exports.textLinesMutator = function (lines) { + // Mutates lines, an array of strings, in place. + // Mutation operations have the same constraints as exports operations + // with respect to newlines, but not the other additional constraints + // (i.e. ins/del ordering, forbidden no-ops, non-mergeability, final newline). + // Can be used to mutate lists of strings where the last char of each string + // is not actually a newline, but for the purposes of N and L values, + // the caller should pretend it is, and for things to work right in that case, the input + // to insert() should be a single line with no newlines. + var curSplice = [0, 0]; + var inSplice = false; + // position in document after curSplice is applied: + var curLine = 0, + curCol = 0; + // invariant: if (inSplice) then (curLine is in curSplice[0] + curSplice.length - {2,3}) && + // curLine >= curSplice[0] + // invariant: if (inSplice && (curLine >= curSplice[0] + curSplice.length - 2)) then + // curCol == 0 + + function lines_applySplice(s) { + lines.splice.apply(lines, s); + } + + function lines_toSource() { + return lines.toSource(); + } + + function lines_get(idx) { + if (lines.get) { + return lines.get(idx); + } else { + return lines[idx]; + } + } + // can be unimplemented if removeLines's return value not needed + + function lines_slice(start, end) { + if (lines.slice) { + return lines.slice(start, end); + } else { + return []; + } + } + + function lines_length() { + if ((typeof lines.length) == "number") { + return lines.length; + } else { + return lines.length(); + } + } + + function enterSplice() { + curSplice[0] = curLine; + curSplice[1] = 0; + if (curCol > 0) { + putCurLineInSplice(); + } + inSplice = true; + } + + function leaveSplice() { + lines_applySplice(curSplice); + curSplice.length = 2; + curSplice[0] = curSplice[1] = 0; + inSplice = false; + } + + function isCurLineInSplice() { + return (curLine - curSplice[0] < (curSplice.length - 2)); + } + + function debugPrint(typ) { + print(typ + ": " + curSplice.toSource() + " / " + curLine + "," + curCol + " / " + lines_toSource()); + } + + function putCurLineInSplice() { + if (!isCurLineInSplice()) { + curSplice.push(lines_get(curSplice[0] + curSplice[1])); + curSplice[1]++; + } + return 2 + curLine - curSplice[0]; + } + + function skipLines(L, includeInSplice) { + if (L) { + if (includeInSplice) { + if (!inSplice) { + enterSplice(); + } + for (var i = 0; i < L; i++) { + curCol = 0; + putCurLineInSplice(); + curLine++; + } + } else { + if (inSplice) { + if (L > 1) { + leaveSplice(); + } else { + putCurLineInSplice(); + } + } + curLine += L; + curCol = 0; + } + //print(inSplice+" / "+isCurLineInSplice()+" / "+curSplice[0]+" / "+curSplice[1]+" / "+lines.length); +/*if (inSplice && (! isCurLineInSplice()) && (curSplice[0] + curSplice[1] < lines.length)) { + print("BLAH"); + putCurLineInSplice(); + }*/ + // tests case foo in remove(), which isn't otherwise covered in current impl + } + //debugPrint("skip"); + } + + function skip(N, L, includeInSplice) { + if (N) { + if (L) { + skipLines(L, includeInSplice); + } else { + if (includeInSplice && !inSplice) { + enterSplice(); + } + if (inSplice) { + putCurLineInSplice(); + } + curCol += N; + //debugPrint("skip"); + } + } + } + + function removeLines(L) { + var removed = ''; + if (L) { + if (!inSplice) { + enterSplice(); + } + + function nextKLinesText(k) { + var m = curSplice[0] + curSplice[1]; + return lines_slice(m, m + k).join(''); + } + if (isCurLineInSplice()) { + //print(curCol); + if (curCol == 0) { + removed = curSplice[curSplice.length - 1]; + // print("FOO"); // case foo + curSplice.length--; + removed += nextKLinesText(L - 1); + curSplice[1] += L - 1; + } else { + removed = nextKLinesText(L - 1); + curSplice[1] += L - 1; + var sline = curSplice.length - 1; + removed = curSplice[sline].substring(curCol) + removed; + curSplice[sline] = curSplice[sline].substring(0, curCol) + lines_get(curSplice[0] + curSplice[1]); + curSplice[1] += 1; + } + } else { + removed = nextKLinesText(L); + curSplice[1] += L; + } + //debugPrint("remove"); + } + return removed; + } + + function remove(N, L) { + var removed = ''; + if (N) { + if (L) { + return removeLines(L); + } else { + if (!inSplice) { + enterSplice(); + } + var sline = putCurLineInSplice(); + removed = curSplice[sline].substring(curCol, curCol + N); + curSplice[sline] = curSplice[sline].substring(0, curCol) + curSplice[sline].substring(curCol + N); + //debugPrint("remove"); + } + } + return removed; + } + + function insert(text, L) { + if (text) { + if (!inSplice) { + enterSplice(); + } + if (L) { + var newLines = exports.splitTextLines(text); + if (isCurLineInSplice()) { + //if (curCol == 0) { + //curSplice.length--; + //curSplice[1]--; + //Array.prototype.push.apply(curSplice, newLines); + //curLine += newLines.length; + //} + //else { + var sline = curSplice.length - 1; + var theLine = curSplice[sline]; + var lineCol = curCol; + curSplice[sline] = theLine.substring(0, lineCol) + newLines[0]; + curLine++; + newLines.splice(0, 1); + Array.prototype.push.apply(curSplice, newLines); + curLine += newLines.length; + curSplice.push(theLine.substring(lineCol)); + curCol = 0; + //} + } else { + Array.prototype.push.apply(curSplice, newLines); + curLine += newLines.length; + } + } else { + var sline = putCurLineInSplice(); + curSplice[sline] = curSplice[sline].substring(0, curCol) + text + curSplice[sline].substring(curCol); + curCol += text.length; + } + //debugPrint("insert"); + } + } + + function hasMore() { + //print(lines.length+" / "+inSplice+" / "+(curSplice.length - 2)+" / "+curSplice[1]); + var docLines = lines_length(); + if (inSplice) { + docLines += curSplice.length - 2 - curSplice[1]; + } + return curLine < docLines; + } + + function close() { + if (inSplice) { + leaveSplice(); + } + //debugPrint("close"); + } + + var self = { + skip: skip, + remove: remove, + insert: insert, + close: close, + hasMore: hasMore, + removeLines: removeLines, + skipLines: skipLines + }; + return self; +}; + +exports.applyZip = function (in1, idx1, in2, idx2, func) { + var iter1 = exports.opIterator(in1, idx1); + var iter2 = exports.opIterator(in2, idx2); + var assem = exports.smartOpAssembler(); + var op1 = exports.newOp(); + var op2 = exports.newOp(); + var opOut = exports.newOp(); + while (op1.opcode || iter1.hasNext() || op2.opcode || iter2.hasNext()) { + if ((!op1.opcode) && iter1.hasNext()) iter1.next(op1); + if ((!op2.opcode) && iter2.hasNext()) iter2.next(op2); + func(op1, op2, opOut); + if (opOut.opcode) { + //print(opOut.toSource()); + assem.append(opOut); + opOut.opcode = ''; + } + } + assem.endDocument(); + return assem.toString(); +}; + +exports.unpack = function (cs) { + var headerRegex = /Z:([0-9a-z]+)([><])([0-9a-z]+)|/; + var headerMatch = headerRegex.exec(cs); + if ((!headerMatch) || (!headerMatch[0])) { + exports.error("Not a exports: " + cs); + } + var oldLen = exports.parseNum(headerMatch[1]); + var changeSign = (headerMatch[2] == '>') ? 1 : -1; + var changeMag = exports.parseNum(headerMatch[3]); + var newLen = oldLen + changeSign * changeMag; + var opsStart = headerMatch[0].length; + var opsEnd = cs.indexOf("$"); + if (opsEnd < 0) opsEnd = cs.length; + return { + oldLen: oldLen, + newLen: newLen, + ops: cs.substring(opsStart, opsEnd), + charBank: cs.substring(opsEnd + 1) + }; +}; + +exports.pack = function (oldLen, newLen, opsStr, bank) { + var lenDiff = newLen - oldLen; + var lenDiffStr = (lenDiff >= 0 ? '>' + exports.numToString(lenDiff) : '<' + exports.numToString(-lenDiff)); + var a = []; + a.push('Z:', exports.numToString(oldLen), lenDiffStr, opsStr, '$', bank); + return a.join(''); +}; + +exports.applyToText = function (cs, str) { + var unpacked = exports.unpack(cs); + exports.assert(str.length == unpacked.oldLen, "mismatched apply: ", str.length, " / ", unpacked.oldLen); + var csIter = exports.opIterator(unpacked.ops); + var bankIter = exports.stringIterator(unpacked.charBank); + var strIter = exports.stringIterator(str); + var assem = exports.stringAssembler(); + while (csIter.hasNext()) { + var op = csIter.next(); + switch (op.opcode) { + case '+': + assem.append(bankIter.take(op.chars)); + break; + case '-': + strIter.skip(op.chars); + break; + case '=': + assem.append(strIter.take(op.chars)); + break; + } + } + assem.append(strIter.take(strIter.remaining())); + return assem.toString(); +}; + +exports.mutateTextLines = function (cs, lines) { + var unpacked = exports.unpack(cs); + var csIter = exports.opIterator(unpacked.ops); + var bankIter = exports.stringIterator(unpacked.charBank); + var mut = exports.textLinesMutator(lines); + while (csIter.hasNext()) { + var op = csIter.next(); + switch (op.opcode) { + case '+': + mut.insert(bankIter.take(op.chars), op.lines); + break; + case '-': + mut.remove(op.chars, op.lines); + break; + case '=': + mut.skip(op.chars, op.lines, ( !! op.attribs)); + break; + } + } + mut.close(); +}; + +exports.composeAttributes = function (att1, att2, resultIsMutation, pool) { + // att1 and att2 are strings like "*3*f*1c", asMutation is a boolean. + // Sometimes attribute (key,value) pairs are treated as attribute presence + // information, while other times they are treated as operations that + // mutate a set of attributes, and this affects whether an empty value + // is a deletion or a change. + // Examples, of the form (att1Items, att2Items, resultIsMutation) -> result + // ([], [(bold, )], true) -> [(bold, )] + // ([], [(bold, )], false) -> [] + // ([], [(bold, true)], true) -> [(bold, true)] + // ([], [(bold, true)], false) -> [(bold, true)] + // ([(bold, true)], [(bold, )], true) -> [(bold, )] + // ([(bold, true)], [(bold, )], false) -> [] + // pool can be null if att2 has no attributes. + if ((!att1) && resultIsMutation) { + // In the case of a mutation (i.e. composing two exportss), + // an att2 composed with an empy att1 is just att2. If att1 + // is part of an attribution string, then att2 may remove + // attributes that are already gone, so don't do this optimization. + return att2; + } + if (!att2) return att1; + var atts = []; + att1.replace(/\*([0-9a-z]+)/g, function (_, a) { + atts.push(pool.getAttrib(exports.parseNum(a))); + return ''; + }); + att2.replace(/\*([0-9a-z]+)/g, function (_, a) { + var pair = pool.getAttrib(exports.parseNum(a)); + var found = false; + for (var i = 0; i < atts.length; i++) { + var oldPair = atts[i]; + if (oldPair[0] == pair[0]) { + if (pair[1] || resultIsMutation) { + oldPair[1] = pair[1]; + } else { + atts.splice(i, 1); + } + found = true; + break; + } + } + if ((!found) && (pair[1] || resultIsMutation)) { + atts.push(pair); + } + return ''; + }); + atts.sort(); + var buf = exports.stringAssembler(); + for (var i = 0; i < atts.length; i++) { + buf.append('*'); + buf.append(exports.numToString(pool.putAttrib(atts[i]))); + } + //print(att1+" / "+att2+" / "+buf.toString()); + return buf.toString(); +}; + +exports._slicerZipperFunc = function (attOp, csOp, opOut, pool) { + // attOp is the op from the sequence that is being operated on, either an + // attribution string or the earlier of two exportss being composed. + // pool can be null if definitely not needed. + //print(csOp.toSource()+" "+attOp.toSource()+" "+opOut.toSource()); + if (attOp.opcode == '-') { + exports.copyOp(attOp, opOut); + attOp.opcode = ''; + } else if (!attOp.opcode) { + exports.copyOp(csOp, opOut); + csOp.opcode = ''; + } else { + switch (csOp.opcode) { + case '-': + { + if (csOp.chars <= attOp.chars) { + // delete or delete part + if (attOp.opcode == '=') { + opOut.opcode = '-'; + opOut.chars = csOp.chars; + opOut.lines = csOp.lines; + opOut.attribs = ''; + } + attOp.chars -= csOp.chars; + attOp.lines -= csOp.lines; + csOp.opcode = ''; + if (!attOp.chars) { + attOp.opcode = ''; + } + } else { + // delete and keep going + if (attOp.opcode == '=') { + opOut.opcode = '-'; + opOut.chars = attOp.chars; + opOut.lines = attOp.lines; + opOut.attribs = ''; + } + csOp.chars -= attOp.chars; + csOp.lines -= attOp.lines; + attOp.opcode = ''; + } + break; + } + case '+': + { + // insert + exports.copyOp(csOp, opOut); + csOp.opcode = ''; + break; + } + case '=': + { + if (csOp.chars <= attOp.chars) { + // keep or keep part + opOut.opcode = attOp.opcode; + opOut.chars = csOp.chars; + opOut.lines = csOp.lines; + opOut.attribs = exports.composeAttributes(attOp.attribs, csOp.attribs, attOp.opcode == '=', pool); + csOp.opcode = ''; + attOp.chars -= csOp.chars; + attOp.lines -= csOp.lines; + if (!attOp.chars) { + attOp.opcode = ''; + } + } else { + // keep and keep going + opOut.opcode = attOp.opcode; + opOut.chars = attOp.chars; + opOut.lines = attOp.lines; + opOut.attribs = exports.composeAttributes(attOp.attribs, csOp.attribs, attOp.opcode == '=', pool); + attOp.opcode = ''; + csOp.chars -= attOp.chars; + csOp.lines -= attOp.lines; + } + break; + } + case '': + { + exports.copyOp(attOp, opOut); + attOp.opcode = ''; + break; + } + } + } +}; + +exports.applyToAttribution = function (cs, astr, pool) { + var unpacked = exports.unpack(cs); + + return exports.applyZip(astr, 0, unpacked.ops, 0, function (op1, op2, opOut) { + return exports._slicerZipperFunc(op1, op2, opOut, pool); + }); +}; + +/*exports.oneInsertedLineAtATimeOpIterator = function(opsStr, optStartIndex, charBank) { + var iter = exports.opIterator(opsStr, optStartIndex); + var bankIndex = 0; + +};*/ + +exports.mutateAttributionLines = function (cs, lines, pool) { + //dmesg(cs); + //dmesg(lines.toSource()+" ->"); + var unpacked = exports.unpack(cs); + var csIter = exports.opIterator(unpacked.ops); + var csBank = unpacked.charBank; + var csBankIndex = 0; + // treat the attribution lines as text lines, mutating a line at a time + var mut = exports.textLinesMutator(lines); + + var lineIter = null; + + function isNextMutOp() { + return (lineIter && lineIter.hasNext()) || mut.hasMore(); + } + + function nextMutOp(destOp) { + if ((!(lineIter && lineIter.hasNext())) && mut.hasMore()) { + var line = mut.removeLines(1); + lineIter = exports.opIterator(line); + } + if (lineIter && lineIter.hasNext()) { + lineIter.next(destOp); + } else { + destOp.opcode = ''; + } + } + var lineAssem = null; + + function outputMutOp(op) { + //print("outputMutOp: "+op.toSource()); + if (!lineAssem) { + lineAssem = exports.mergingOpAssembler(); + } + lineAssem.append(op); + if (op.lines > 0) { + exports.assert(op.lines == 1, "Can't have op.lines of ", op.lines, " in attribution lines"); + // ship it to the mut + mut.insert(lineAssem.toString(), 1); + lineAssem = null; + } + } + + var csOp = exports.newOp(); + var attOp = exports.newOp(); + var opOut = exports.newOp(); + while (csOp.opcode || csIter.hasNext() || attOp.opcode || isNextMutOp()) { + if ((!csOp.opcode) && csIter.hasNext()) { + csIter.next(csOp); + } + //print(csOp.toSource()+" "+attOp.toSource()+" "+opOut.toSource()); + //print(csOp.opcode+"/"+csOp.lines+"/"+csOp.attribs+"/"+lineAssem+"/"+lineIter+"/"+(lineIter?lineIter.hasNext():null)); + //print("csOp: "+csOp.toSource()); + if ((!csOp.opcode) && (!attOp.opcode) && (!lineAssem) && (!(lineIter && lineIter.hasNext()))) { + break; // done + } else if (csOp.opcode == '=' && csOp.lines > 0 && (!csOp.attribs) && (!attOp.opcode) && (!lineAssem) && (!(lineIter && lineIter.hasNext()))) { + // skip multiple lines; this is what makes small changes not order of the document size + mut.skipLines(csOp.lines); + //print("skipped: "+csOp.lines); + csOp.opcode = ''; + } else if (csOp.opcode == '+') { + if (csOp.lines > 1) { + var firstLineLen = csBank.indexOf('\n', csBankIndex) + 1 - csBankIndex; + exports.copyOp(csOp, opOut); + csOp.chars -= firstLineLen; + csOp.lines--; + opOut.lines = 1; + opOut.chars = firstLineLen; + } else { + exports.copyOp(csOp, opOut); + csOp.opcode = ''; + } + outputMutOp(opOut); + csBankIndex += opOut.chars; + opOut.opcode = ''; + } else { + if ((!attOp.opcode) && isNextMutOp()) { + nextMutOp(attOp); + } + //print("attOp: "+attOp.toSource()); + exports._slicerZipperFunc(attOp, csOp, opOut, pool); + if (opOut.opcode) { + outputMutOp(opOut); + opOut.opcode = ''; + } + } + } + + exports.assert(!lineAssem, "line assembler not finished"); + mut.close(); + + //dmesg("-> "+lines.toSource()); +}; + +exports.joinAttributionLines = function (theAlines) { + var assem = exports.mergingOpAssembler(); + for (var i = 0; i < theAlines.length; i++) { + var aline = theAlines[i]; + var iter = exports.opIterator(aline); + while (iter.hasNext()) { + assem.append(iter.next()); + } + } + return assem.toString(); +}; + +exports.splitAttributionLines = function (attrOps, text) { + var iter = exports.opIterator(attrOps); + var assem = exports.mergingOpAssembler(); + var lines = []; + var pos = 0; + + function appendOp(op) { + assem.append(op); + if (op.lines > 0) { + lines.push(assem.toString()); + assem.clear(); + } + pos += op.chars; + } + + while (iter.hasNext()) { + var op = iter.next(); + var numChars = op.chars; + var numLines = op.lines; + while (numLines > 1) { + var newlineEnd = text.indexOf('\n', pos) + 1; + exports.assert(newlineEnd > 0, "newlineEnd <= 0 in splitAttributionLines"); + op.chars = newlineEnd - pos; + op.lines = 1; + appendOp(op); + numChars -= op.chars; + numLines -= op.lines; + } + if (numLines == 1) { + op.chars = numChars; + op.lines = 1; + } + appendOp(op); + } + + return lines; +}; + +exports.splitTextLines = function (text) { + return text.match(/[^\n]*(?:\n|[^\n]$)/g); +}; + +exports.compose = function (cs1, cs2, pool) { + var unpacked1 = exports.unpack(cs1); + var unpacked2 = exports.unpack(cs2); + var len1 = unpacked1.oldLen; + var len2 = unpacked1.newLen; + exports.assert(len2 == unpacked2.oldLen, "mismatched composition"); + var len3 = unpacked2.newLen; + var bankIter1 = exports.stringIterator(unpacked1.charBank); + var bankIter2 = exports.stringIterator(unpacked2.charBank); + var bankAssem = exports.stringAssembler(); + + var newOps = exports.applyZip(unpacked1.ops, 0, unpacked2.ops, 0, function (op1, op2, opOut) { + //var debugBuilder = exports.stringAssembler(); + //debugBuilder.append(exports.opString(op1)); + //debugBuilder.append(','); + //debugBuilder.append(exports.opString(op2)); + //debugBuilder.append(' / '); + var op1code = op1.opcode; + var op2code = op2.opcode; + if (op1code == '+' && op2code == '-') { + bankIter1.skip(Math.min(op1.chars, op2.chars)); + } + exports._slicerZipperFunc(op1, op2, opOut, pool); + if (opOut.opcode == '+') { + if (op2code == '+') { + bankAssem.append(bankIter2.take(opOut.chars)); + } else { + bankAssem.append(bankIter1.take(opOut.chars)); + } + } + + //debugBuilder.append(exports.opString(op1)); + //debugBuilder.append(','); + //debugBuilder.append(exports.opString(op2)); + //debugBuilder.append(' -> '); + //debugBuilder.append(exports.opString(opOut)); + //print(debugBuilder.toString()); + }); + + return exports.pack(len1, len3, newOps, bankAssem.toString()); +}; + +exports.attributeTester = function (attribPair, pool) { + // returns a function that tests if a string of attributes + // (e.g. *3*4) contains a given attribute key,value that + // is already present in the pool. + if (!pool) { + return never; + } + var attribNum = pool.putAttrib(attribPair, true); + if (attribNum < 0) { + return never; + } else { + var re = new RegExp('\\*' + exports.numToString(attribNum) + '(?!\\w)'); + return function (attribs) { + return re.test(attribs); + }; + } + + function never(attribs) { + return false; + } +}; + +exports.identity = function (N) { + return exports.pack(N, N, "", ""); +}; + +exports.makeSplice = function (oldFullText, spliceStart, numRemoved, newText, optNewTextAPairs, pool) { + var oldLen = oldFullText.length; + + if (spliceStart >= oldLen) { + spliceStart = oldLen - 1; + } + if (numRemoved > oldFullText.length - spliceStart - 1) { + numRemoved = oldFullText.length - spliceStart - 1; + } + var oldText = oldFullText.substring(spliceStart, spliceStart + numRemoved); + var newLen = oldLen + newText.length - oldText.length; + + var assem = exports.smartOpAssembler(); + assem.appendOpWithText('=', oldFullText.substring(0, spliceStart)); + assem.appendOpWithText('-', oldText); + assem.appendOpWithText('+', newText, optNewTextAPairs, pool); + assem.endDocument(); + return exports.pack(oldLen, newLen, assem.toString(), newText); +}; + +exports.toSplices = function (cs) { + // get a list of splices, [startChar, endChar, newText] + var unpacked = exports.unpack(cs); + var splices = []; + + var oldPos = 0; + var iter = exports.opIterator(unpacked.ops); + var charIter = exports.stringIterator(unpacked.charBank); + var inSplice = false; + while (iter.hasNext()) { + var op = iter.next(); + if (op.opcode == '=') { + oldPos += op.chars; + inSplice = false; + } else { + if (!inSplice) { + splices.push([oldPos, oldPos, ""]); + inSplice = true; + } + if (op.opcode == '-') { + oldPos += op.chars; + splices[splices.length - 1][1] += op.chars; + } else if (op.opcode == '+') { + splices[splices.length - 1][2] += charIter.take(op.chars); + } + } + } + + return splices; +}; + +exports.characterRangeFollow = function (cs, startChar, endChar, insertionsAfter) { + var newStartChar = startChar; + var newEndChar = endChar; + var splices = exports.toSplices(cs); + var lengthChangeSoFar = 0; + for (var i = 0; i < splices.length; i++) { + var splice = splices[i]; + var spliceStart = splice[0] + lengthChangeSoFar; + var spliceEnd = splice[1] + lengthChangeSoFar; + var newTextLength = splice[2].length; + var thisLengthChange = newTextLength - (spliceEnd - spliceStart); + + if (spliceStart <= newStartChar && spliceEnd >= newEndChar) { + // splice fully replaces/deletes range + // (also case that handles insertion at a collapsed selection) + if (insertionsAfter) { + newStartChar = newEndChar = spliceStart; + } else { + newStartChar = newEndChar = spliceStart + newTextLength; + } + } else if (spliceEnd <= newStartChar) { + // splice is before range + newStartChar += thisLengthChange; + newEndChar += thisLengthChange; + } else if (spliceStart >= newEndChar) { + // splice is after range + } else if (spliceStart >= newStartChar && spliceEnd <= newEndChar) { + // splice is inside range + newEndChar += thisLengthChange; + } else if (spliceEnd < newEndChar) { + // splice overlaps beginning of range + newStartChar = spliceStart + newTextLength; + newEndChar += thisLengthChange; + } else { + // splice overlaps end of range + newEndChar = spliceStart; + } + + lengthChangeSoFar += thisLengthChange; + } + + return [newStartChar, newEndChar]; +}; + +exports.moveOpsToNewPool = function (cs, oldPool, newPool) { + // works on exports or attribution string + var dollarPos = cs.indexOf('$'); + if (dollarPos < 0) { + dollarPos = cs.length; + } + var upToDollar = cs.substring(0, dollarPos); + var fromDollar = cs.substring(dollarPos); + // order of attribs stays the same + return upToDollar.replace(/\*([0-9a-z]+)/g, function (_, a) { + var oldNum = exports.parseNum(a); + var pair = oldPool.getAttrib(oldNum); + var newNum = newPool.putAttrib(pair); + return '*' + exports.numToString(newNum); + }) + fromDollar; +}; + +exports.makeAttribution = function (text) { + var assem = exports.smartOpAssembler(); + assem.appendOpWithText('+', text); + return assem.toString(); +}; + +// callable on a exports, attribution string, or attribs property of an op +exports.eachAttribNumber = function (cs, func) { + var dollarPos = cs.indexOf('$'); + if (dollarPos < 0) { + dollarPos = cs.length; + } + var upToDollar = cs.substring(0, dollarPos); + + upToDollar.replace(/\*([0-9a-z]+)/g, function (_, a) { + func(exports.parseNum(a)); + return ''; + }); +}; + +// callable on a exports, attribution string, or attribs property of an op, +// though it may easily create adjacent ops that can be merged. +exports.filterAttribNumbers = function (cs, filter) { + return exports.mapAttribNumbers(cs, filter); +}; + +exports.mapAttribNumbers = function (cs, func) { + var dollarPos = cs.indexOf('$'); + if (dollarPos < 0) { + dollarPos = cs.length; + } + var upToDollar = cs.substring(0, dollarPos); + + var newUpToDollar = upToDollar.replace(/\*([0-9a-z]+)/g, function (s, a) { + var n = func(exports.parseNum(a)); + if (n === true) { + return s; + } else if ((typeof n) === "number") { + return '*' + exports.numToString(n); + } else { + return ''; + } + }); + + return newUpToDollar + cs.substring(dollarPos); +}; + +exports.makeAText = function (text, attribs) { + return { + text: text, + attribs: (attribs || exports.makeAttribution(text)) + }; +}; + +exports.applyToAText = function (cs, atext, pool) { + return { + text: exports.applyToText(cs, atext.text), + attribs: exports.applyToAttribution(cs, atext.attribs, pool) + }; +}; + +exports.cloneAText = function (atext) { + return { + text: atext.text, + attribs: atext.attribs + }; +}; + +exports.copyAText = function (atext1, atext2) { + atext2.text = atext1.text; + atext2.attribs = atext1.attribs; +}; + +exports.appendATextToAssembler = function (atext, assem) { + // intentionally skips last newline char of atext + var iter = exports.opIterator(atext.attribs); + var op = exports.newOp(); + while (iter.hasNext()) { + iter.next(op); + if (!iter.hasNext()) { + // last op, exclude final newline + if (op.lines <= 1) { + op.lines = 0; + op.chars--; + if (op.chars) { + assem.append(op); + } + } else { + var nextToLastNewlineEnd = + atext.text.lastIndexOf('\n', atext.text.length - 2) + 1; + var lastLineLength = atext.text.length - nextToLastNewlineEnd - 1; + op.lines--; + op.chars -= (lastLineLength + 1); + assem.append(op); + op.lines = 0; + op.chars = lastLineLength; + if (op.chars) { + assem.append(op); + } + } + } else { + assem.append(op); + } + } +}; + +exports.prepareForWire = function (cs, pool) { + var newPool = AttributePoolFactory.createAttributePool();; + var newCs = exports.moveOpsToNewPool(cs, pool, newPool); + return { + translated: newCs, + pool: newPool + }; +}; + +exports.isIdentity = function (cs) { + var unpacked = exports.unpack(cs); + return unpacked.ops == "" && unpacked.oldLen == unpacked.newLen; +}; + +exports.opAttributeValue = function (op, key, pool) { + return exports.attribsAttributeValue(op.attribs, key, pool); +}; + +exports.attribsAttributeValue = function (attribs, key, pool) { + var value = ''; + if (attribs) { + exports.eachAttribNumber(attribs, function (n) { + if (pool.getAttribKey(n) == key) { + value = pool.getAttribValue(n); + } + }); + } + return value; +}; + +exports.builder = function (oldLen) { + var assem = exports.smartOpAssembler(); + var o = exports.newOp(); + var charBank = exports.stringAssembler(); + + var self = { + // attribs are [[key1,value1],[key2,value2],...] or '*0*1...' (no pool needed in latter case) + keep: function (N, L, attribs, pool) { + o.opcode = '='; + o.attribs = (attribs && exports.makeAttribsString('=', attribs, pool)) || ''; + o.chars = N; + o.lines = (L || 0); + assem.append(o); + return self; + }, + keepText: function (text, attribs, pool) { + assem.appendOpWithText('=', text, attribs, pool); + return self; + }, + insert: function (text, attribs, pool) { + assem.appendOpWithText('+', text, attribs, pool); + charBank.append(text); + return self; + }, + remove: function (N, L) { + o.opcode = '-'; + o.attribs = ''; + o.chars = N; + o.lines = (L || 0); + assem.append(o); + return self; + }, + toString: function () { + assem.endDocument(); + var newLen = oldLen + assem.getLengthChange(); + return exports.pack(oldLen, newLen, assem.toString(), charBank.toString()); + } + }; + + return self; +}; + +exports.makeAttribsString = function (opcode, attribs, pool) { + // makeAttribsString(opcode, '*3') or makeAttribsString(opcode, [['foo','bar']], myPool) work + if (!attribs) { + return ''; + } else if ((typeof attribs) == "string") { + return attribs; + } else if (pool && attribs && attribs.length) { + if (attribs.length > 1) { + attribs = attribs.slice(); + attribs.sort(); + } + var result = []; + for (var i = 0; i < attribs.length; i++) { + var pair = attribs[i]; + if (opcode == '=' || (opcode == '+' && pair[1])) { + result.push('*' + exports.numToString(pool.putAttrib(pair))); + } + } + return result.join(''); + } +}; + +// like "substring" but on a single-line attribution string +exports.subattribution = function (astr, start, optEnd) { + var iter = exports.opIterator(astr, 0); + var assem = exports.smartOpAssembler(); + var attOp = exports.newOp(); + var csOp = exports.newOp(); + var opOut = exports.newOp(); + + function doCsOp() { + if (csOp.chars) { + while (csOp.opcode && (attOp.opcode || iter.hasNext())) { + if (!attOp.opcode) iter.next(attOp); + + if (csOp.opcode && attOp.opcode && csOp.chars >= attOp.chars && attOp.lines > 0 && csOp.lines <= 0) { + csOp.lines++; + } + + exports._slicerZipperFunc(attOp, csOp, opOut, null); + if (opOut.opcode) { + assem.append(opOut); + opOut.opcode = ''; + } + } + } + } + + csOp.opcode = '-'; + csOp.chars = start; + + doCsOp(); + + if (optEnd === undefined) { + if (attOp.opcode) { + assem.append(attOp); + } + while (iter.hasNext()) { + iter.next(attOp); + assem.append(attOp); + } + } else { + csOp.opcode = '='; + csOp.chars = optEnd - start; + doCsOp(); + } + + return assem.toString(); +}; + +exports.inverse = function (cs, lines, alines, pool) { + // lines and alines are what the exports is meant to apply to. + // They may be arrays or objects with .get(i) and .length methods. + // They include final newlines on lines. + + function lines_get(idx) { + if (lines.get) { + return lines.get(idx); + } else { + return lines[idx]; + } + } + + function lines_length() { + if ((typeof lines.length) == "number") { + return lines.length; + } else { + return lines.length(); + } + } + + function alines_get(idx) { + if (alines.get) { + return alines.get(idx); + } else { + return alines[idx]; + } + } + + function alines_length() { + if ((typeof alines.length) == "number") { + return alines.length; + } else { + return alines.length(); + } + } + + var curLine = 0; + var curChar = 0; + var curLineOpIter = null; + var curLineOpIterLine; + var curLineNextOp = exports.newOp('+'); + + var unpacked = exports.unpack(cs); + var csIter = exports.opIterator(unpacked.ops); + var builder = exports.builder(unpacked.newLen); + + function consumeAttribRuns(numChars, func /*(len, attribs, endsLine)*/ ) { + + if ((!curLineOpIter) || (curLineOpIterLine != curLine)) { + // create curLineOpIter and advance it to curChar + curLineOpIter = exports.opIterator(alines_get(curLine)); + curLineOpIterLine = curLine; + var indexIntoLine = 0; + var done = false; + while (!done) { + curLineOpIter.next(curLineNextOp); + if (indexIntoLine + curLineNextOp.chars >= curChar) { + curLineNextOp.chars -= (curChar - indexIntoLine); + done = true; + } else { + indexIntoLine += curLineNextOp.chars; + } + } + } + + while (numChars > 0) { + if ((!curLineNextOp.chars) && (!curLineOpIter.hasNext())) { + curLine++; + curChar = 0; + curLineOpIterLine = curLine; + curLineNextOp.chars = 0; + curLineOpIter = exports.opIterator(alines_get(curLine)); + } + if (!curLineNextOp.chars) { + curLineOpIter.next(curLineNextOp); + } + var charsToUse = Math.min(numChars, curLineNextOp.chars); + func(charsToUse, curLineNextOp.attribs, charsToUse == curLineNextOp.chars && curLineNextOp.lines > 0); + numChars -= charsToUse; + curLineNextOp.chars -= charsToUse; + curChar += charsToUse; + } + + if ((!curLineNextOp.chars) && (!curLineOpIter.hasNext())) { + curLine++; + curChar = 0; + } + } + + function skip(N, L) { + if (L) { + curLine += L; + curChar = 0; + } else { + if (curLineOpIter && curLineOpIterLine == curLine) { + consumeAttribRuns(N, function () {}); + } else { + curChar += N; + } + } + } + + function nextText(numChars) { + var len = 0; + var assem = exports.stringAssembler(); + var firstString = lines_get(curLine).substring(curChar); + len += firstString.length; + assem.append(firstString); + + var lineNum = curLine + 1; + while (len < numChars) { + var nextString = lines_get(lineNum); + len += nextString.length; + assem.append(nextString); + lineNum++; + } + + return assem.toString().substring(0, numChars); + } + + function cachedStrFunc(func) { + var cache = {}; + return function (s) { + if (!cache[s]) { + cache[s] = func(s); + } + return cache[s]; + }; + } + + var attribKeys = []; + var attribValues = []; + while (csIter.hasNext()) { + var csOp = csIter.next(); + if (csOp.opcode == '=') { + if (csOp.attribs) { + attribKeys.length = 0; + attribValues.length = 0; + exports.eachAttribNumber(csOp.attribs, function (n) { + attribKeys.push(pool.getAttribKey(n)); + attribValues.push(pool.getAttribValue(n)); + }); + var undoBackToAttribs = cachedStrFunc(function (attribs) { + var backAttribs = []; + for (var i = 0; i < attribKeys.length; i++) { + var appliedKey = attribKeys[i]; + var appliedValue = attribValues[i]; + var oldValue = exports.attribsAttributeValue(attribs, appliedKey, pool); + if (appliedValue != oldValue) { + backAttribs.push([appliedKey, oldValue]); + } + } + return exports.makeAttribsString('=', backAttribs, pool); + }); + consumeAttribRuns(csOp.chars, function (len, attribs, endsLine) { + builder.keep(len, endsLine ? 1 : 0, undoBackToAttribs(attribs)); + }); + } else { + skip(csOp.chars, csOp.lines); + builder.keep(csOp.chars, csOp.lines); + } + } else if (csOp.opcode == '+') { + builder.remove(csOp.chars, csOp.lines); + } else if (csOp.opcode == '-') { + var textBank = nextText(csOp.chars); + var textBankIndex = 0; + consumeAttribRuns(csOp.chars, function (len, attribs, endsLine) { + builder.insert(textBank.substr(textBankIndex, len), attribs); + textBankIndex += len; + }); + } + } + + return exports.checkRep(builder.toString()); +}; + +// %CLIENT FILE ENDS HERE% +exports.follow = function (cs1, cs2, reverseInsertOrder, pool) { + var unpacked1 = exports.unpack(cs1); + var unpacked2 = exports.unpack(cs2); + var len1 = unpacked1.oldLen; + var len2 = unpacked2.oldLen; + exports.assert(len1 == len2, "mismatched follow"); + var chars1 = exports.stringIterator(unpacked1.charBank); + var chars2 = exports.stringIterator(unpacked2.charBank); + + var oldLen = unpacked1.newLen; + var oldPos = 0; + var newLen = 0; + + var hasInsertFirst = exports.attributeTester(['insertorder', 'first'], pool); + + var newOps = exports.applyZip(unpacked1.ops, 0, unpacked2.ops, 0, function (op1, op2, opOut) { + if (op1.opcode == '+' || op2.opcode == '+') { + var whichToDo; + if (op2.opcode != '+') { + whichToDo = 1; + } else if (op1.opcode != '+') { + whichToDo = 2; + } else { + // both + + var firstChar1 = chars1.peek(1); + var firstChar2 = chars2.peek(1); + var insertFirst1 = hasInsertFirst(op1.attribs); + var insertFirst2 = hasInsertFirst(op2.attribs); + if (insertFirst1 && !insertFirst2) { + whichToDo = 1; + } else if (insertFirst2 && !insertFirst1) { + whichToDo = 2; + } + // insert string that doesn't start with a newline first so as not to break up lines + else if (firstChar1 == '\n' && firstChar2 != '\n') { + whichToDo = 2; + } else if (firstChar1 != '\n' && firstChar2 == '\n') { + whichToDo = 1; + } + // break symmetry: + else if (reverseInsertOrder) { + whichToDo = 2; + } else { + whichToDo = 1; + } + } + if (whichToDo == 1) { + chars1.skip(op1.chars); + opOut.opcode = '='; + opOut.lines = op1.lines; + opOut.chars = op1.chars; + opOut.attribs = ''; + op1.opcode = ''; + } else { + // whichToDo == 2 + chars2.skip(op2.chars); + exports.copyOp(op2, opOut); + op2.opcode = ''; + } + } else if (op1.opcode == '-') { + if (!op2.opcode) { + op1.opcode = ''; + } else { + if (op1.chars <= op2.chars) { + op2.chars -= op1.chars; + op2.lines -= op1.lines; + op1.opcode = ''; + if (!op2.chars) { + op2.opcode = ''; + } + } else { + op1.chars -= op2.chars; + op1.lines -= op2.lines; + op2.opcode = ''; + } + } + } else if (op2.opcode == '-') { + exports.copyOp(op2, opOut); + if (!op1.opcode) { + op2.opcode = ''; + } else if (op2.chars <= op1.chars) { + // delete part or all of a keep + op1.chars -= op2.chars; + op1.lines -= op2.lines; + op2.opcode = ''; + if (!op1.chars) { + op1.opcode = ''; + } + } else { + // delete all of a keep, and keep going + opOut.lines = op1.lines; + opOut.chars = op1.chars; + op2.lines -= op1.lines; + op2.chars -= op1.chars; + op1.opcode = ''; + } + } else if (!op1.opcode) { + exports.copyOp(op2, opOut); + op2.opcode = ''; + } else if (!op2.opcode) { + exports.copyOp(op1, opOut); + op1.opcode = ''; + } else { + // both keeps + opOut.opcode = '='; + opOut.attribs = exports.followAttributes(op1.attribs, op2.attribs, pool); + if (op1.chars <= op2.chars) { + opOut.chars = op1.chars; + opOut.lines = op1.lines; + op2.chars -= op1.chars; + op2.lines -= op1.lines; + op1.opcode = ''; + if (!op2.chars) { + op2.opcode = ''; + } + } else { + opOut.chars = op2.chars; + opOut.lines = op2.lines; + op1.chars -= op2.chars; + op1.lines -= op2.lines; + op2.opcode = ''; + } + } + switch (opOut.opcode) { + case '=': + oldPos += opOut.chars; + newLen += opOut.chars; + break; + case '-': + oldPos += opOut.chars; + break; + case '+': + newLen += opOut.chars; + break; + } + }); + newLen += oldLen - oldPos; + + return exports.pack(oldLen, newLen, newOps, unpacked2.charBank); +}; + +exports.followAttributes = function (att1, att2, pool) { + // The merge of two sets of attribute changes to the same text + // takes the lexically-earlier value if there are two values + // for the same key. Otherwise, all key/value changes from + // both attribute sets are taken. This operation is the "follow", + // so a set of changes is produced that can be applied to att1 + // to produce the merged set. + if ((!att2) || (!pool)) return ''; + if (!att1) return att2; + var atts = []; + att2.replace(/\*([0-9a-z]+)/g, function (_, a) { + atts.push(pool.getAttrib(exports.parseNum(a))); + return ''; + }); + att1.replace(/\*([0-9a-z]+)/g, function (_, a) { + var pair1 = pool.getAttrib(exports.parseNum(a)); + for (var i = 0; i < atts.length; i++) { + var pair2 = atts[i]; + if (pair1[0] == pair2[0]) { + if (pair1[1] <= pair2[1]) { + // winner of merge is pair1, delete this attribute + atts.splice(i, 1); + } + break; + } + } + return ''; + }); + // we've only removed attributes, so they're already sorted + var buf = exports.stringAssembler(); + for (var i = 0; i < atts.length; i++) { + buf.append('*'); + buf.append(exports.numToString(pool.putAttrib(atts[i]))); + } + return buf.toString(); +}; diff --git a/node/MessageHandler.js b/node/MessageHandler.js new file mode 100644 index 000000000..2bbadce95 --- /dev/null +++ b/node/MessageHandler.js @@ -0,0 +1,454 @@ +/** + * 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. + */ + +var padManager = require("./PadManager"); +var Changeset = require("./Changeset"); +var AttributePoolFactory = require("./AttributePoolFactory"); +var authorManager = require("./AuthorManager"); + +//var token2author = {}; +//var author2token = {}; + +var session2pad = {}; +var pad2sessions = {}; + +var sessioninfos = {}; + +var socketio; + +exports.setSocketIO = function(socket_io) +{ + socketio=socket_io; +} + +exports.handleConnect = function(client) +{ + throwExceptionIfClientOrIOisInvalid(client); + + session2pad[client.sessionId]=null; + sessioninfos[client.sessionId]={}; +} + +exports.handleDisconnect = function(client) +{ + throwExceptionIfClientOrIOisInvalid(client); + + var sessionPad=session2pad[client.sessionId]; + + for(i in pad2sessions[sessionPad]) + { + if(pad2sessions[sessionPad][i] == client.sessionId) + { + delete pad2sessions[sessionPad][i]; + break; + } + } + + delete session2pad[client.sessionId]; + delete sessioninfos[client.sessionId]; +} + +exports.handleMessage = function(client, message) +{ + throwExceptionIfClientOrIOisInvalid(client); + + if(message == null) + { + throw "Message is null!"; + } + + if(typeof message == "string") + { + message = JSON.parse(message); + } + + if(!message.type) + { + throw "Message have no type attribute!"; + } + + if(message.type == "CLIENT_READY") + { + handleClientReady(client, message); + } + else if(message.type == "COLLABROOM" && + message.data.type == "USER_CHANGES") + { + console.error(JSON.stringify(message)); + handleUserChanges(client, message); + } + else if(message.type == "COLLABROOM" && + message.data.type == "USERINFO_UPDATE") + { + console.error(JSON.stringify(message)); + handleUserInfoUpdate(client, message); + } + else + { + console.error(message); + throw "unkown Message Type: '" + message.type + "'"; + } +} + +function handleUserInfoUpdate(client, message) +{ + if(message.data.userInfo.name == null) + { + throw "USERINFO_UPDATE Message have no name!"; + } + if(message.data.userInfo.colorId == null) + { + throw "USERINFO_UPDATE Message have no colorId!"; + } + + var author = sessioninfos[client.sessionId].author; + + authorManager.setAuthorColorId(author, message.data.userInfo.colorId); + authorManager.setAuthorName(author, message.data.userInfo.name); +} + +function handleUserChanges(client, message) +{ + if(message.data.baseRev == null) + { + throw "USER_CHANGES Message have no baseRev!"; + } + if(message.data.apool == null) + { + throw "USER_CHANGES Message have no apool!"; + } + if(message.data.changeset == null) + { + throw "USER_CHANGES Message have no changeset!"; + } + + var baseRev = message.data.baseRev; + var wireApool = (AttributePoolFactory.createAttributePool()).fromJsonable(message.data.apool); + //console.error({"wireApool": wireApool}); + var changeset = message.data.changeset; + var pad = padManager.getPad(session2pad[client.sessionId], false); + + //ex. _checkChangesetAndPool + + Changeset.checkRep(changeset); + Changeset.eachAttribNumber(changeset, function(n) { + if (! wireApool.getAttrib(n)) { + throw "Attribute pool is missing attribute "+n+" for changeset "+changeset; + } + }); + + //ex. adoptChangesetAttribs + + + console.error({"changeset": changeset}); + //console.error({"before: pad.pool()": pad.pool()}); + Changeset.moveOpsToNewPool(changeset, wireApool, pad.pool()); + //console.error({"after: pad.pool()": pad.pool()}); + + //ex. applyUserChanges + + var apool = pad.pool(); + var r = baseRev; + + while (r < pad.getHeadRevisionNumber()) { + r++; + var c = pad.getRevisionChangeset(r); + changeset = Changeset.follow(c, changeset, false, apool); + } + + var prevText = pad.text(); + if (Changeset.oldLen(changeset) != prevText.length) { + throw "Can't apply USER_CHANGES "+changeset+" with oldLen " + + Changeset.oldLen(changeset) + " to document of length " + prevText.length; + } + + var thisAuthor = sessioninfos[client.sessionId].author; + + pad.appendRevision(changeset, thisAuthor); + + var correctionChangeset = _correctMarkersInPad(pad.atext(), pad.pool()); + if (correctionChangeset) { + pad.appendRevision(correctionChangeset); + } + + if (pad.text().lastIndexOf("\n\n") != pad.text().length-2) { + var nlChangeset = Changeset.makeSplice( + pad.text(), pad.text().length-1, 0, "\n"); + pad.appendRevision(nlChangeset); + } + + console.error(JSON.stringify(pad.pool())); + + //ex. updatePadClients + + //console.error({"sessioninfos[client.sessionId].author":sessioninfos[client.sessionId].author}); + + for(i in pad2sessions[pad.id]) + { + var session = pad2sessions[pad.id][i]; + //console.error({"session":session}); + var lastRev = sessioninfos[session].rev; + + while (lastRev < pad.getHeadRevisionNumber()) + { + var r = ++lastRev; + var author = pad.getRevisionAuthor(r); + + //console.error({"author":author}); + + if(author == sessioninfos[session].author) + { + socketio.clients[session].send({"type":"COLLABROOM","data":{type:"ACCEPT_COMMIT", newRev:r}}); + } + else + { + var forWire = Changeset.prepareForWire(pad.getRevisionChangeset(r), pad.pool()); + var wireMsg = {"type":"COLLABROOM","data":{type:"NEW_CHANGES", newRev:r, + changeset: forWire.translated, + apool: forWire.pool, + author: author}}; + socketio.clients[session].send(wireMsg); + } + } + + sessioninfos[session].rev = pad.getHeadRevisionNumber(); + } + + //pad.getAllAuthors(); +} + +function _correctMarkersInPad(atext, apool) { + var text = atext.text; + + // collect char positions of line markers (e.g. bullets) in new atext + // that aren't at the start of a line + var badMarkers = []; + var iter = Changeset.opIterator(atext.attribs); + var offset = 0; + while (iter.hasNext()) { + var op = iter.next(); + var listValue = Changeset.opAttributeValue(op, 'list', apool); + if (listValue) { + for(var i=0;i 0 && text.charAt(offset-1) != '\n') { + badMarkers.push(offset); + } + offset++; + } + } + else { + offset += op.chars; + } + } + + if (badMarkers.length == 0) { + return null; + } + + // create changeset that removes these bad markers + offset = 0; + var builder = Changeset.builder(text.length); + badMarkers.forEach(function(pos) { + builder.keepText(text.substring(offset, pos)); + builder.remove(1); + offset = pos+1; + }); + return builder.toString(); +} + +function handleClientReady(client, message) +{ + if(!message.token) + { + throw "CLIENT_READY Message have no token!"; + } + if(!message.padId) + { + throw "CLIENT_READY Message have no padId!"; + } + if(!message.protocolVersion) + { + throw "CLIENT_READY Message have no protocolVersion!"; + } + if(message.protocolVersion != 1) + { + throw "CLIENT_READY Message have a unkown protocolVersion '" + protocolVersion + "'!"; + } + + var author = authorManager.getAuthor4Token(message.token); + /*if(token2author[message.token]) + { + author = token2author[message.token]; + } + else + { + author = "g." + _randomString(16); + + token2author[message.token] = author; + author2token[author] = message.token; + }*/ + + var sessionId=String(client.sessionId); + session2pad[sessionId] = message.padId; + + if(!pad2sessions[message.padId]) + { + pad2sessions[message.padId] = []; + } + + padManager.ensurePadExists(message.padId); + pad2sessions[message.padId].push(sessionId); + + /*console.dir({"session2pad": session2pad}); + console.dir({"pad2sessions": pad2sessions}); + console.dir({"token2author": token2author}); + console.dir({"author2token": author2token});*/ + + var pad = padManager.getPad(message.padId, false); + + atext = pad.atext(); + var attribsForWire = Changeset.prepareForWire(atext.attribs, pad.pool()); + var apool = attribsForWire.pool.toJsonable(); + atext.attribs = attribsForWire.translated; + + var clientVars = { + //"userAgent": "Anonymous Agent", + "accountPrivs": { + "maxRevisions": 100 + }, + "initialRevisionList": [], + "initialOptions": { + "guestPolicy": "deny" + }, + "collab_client_vars": { + "initialAttributedText": atext, + "clientIp": client.request.connection.remoteAddress, + //"clientAgent": "Anonymous Agent", + "padId": message.padId, + "historicalAuthorData": {}, + "apool": apool, + "rev": pad.getHeadRevisionNumber(), + "globalPadId": message.padId + }, + "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"], + "clientIp": client.request.connection.remoteAddress, + "userIsGuest": true, + "userColor": authorManager.getAuthorColorId(author), + "padId": message.padId, + "initialTitle": "Pad: " + message.padId, + "opts": {}, + "chatHistory": { + "start": 0, + "historicalAuthorData": {}, + "end": 0, + "lines": [] + }, + "numConnectedUsers": pad2sessions[message.padId].length, + "isProPad": false, + "serverTimestamp": new Date().getTime(), + "globalPadId": message.padId, + "userId": author, + "cookiePrefsToSet": { + "fullWidth": false, + "hideSidebar": false + }, + "hooks": {} + } + + if(authorManager.getAuthorName(author) != null) + { + clientVars.userName = authorManager.getAuthorName(author); + } + + var allAuthors = pad.getAllAuthors(); + + for(i in allAuthors) + { + clientVars.collab_client_vars.historicalAuthorData[allAuthors[i]] = {}; + if(authorManager.getAuthorName(author) != null) + clientVars.collab_client_vars.historicalAuthorData[allAuthors[i]].name = authorManager.getAuthorName(author); + clientVars.collab_client_vars.historicalAuthorData[allAuthors[i]].colorId = authorManager.getAuthorColorId(author); + } + + client.send(clientVars); + + sessioninfos[client.sessionId].rev = pad.getHeadRevisionNumber(); + sessioninfos[client.sessionId].author = author; + + var messageToTheOtherUsers = { + "type": "COLLABROOM", + "data": { + type: "USER_NEWINFO", + userInfo: { + "ip": "127.0.0.1", + "colorId": authorManager.getAuthorColorId(author), + "userAgent": "Anonymous", + "userId": author + } + } + }; + + if(authorManager.getAuthorName(author) != null) + { + messageToTheOtherUsers.data.userInfo.name = authorManager.getAuthorName(author); + } + + for(i in pad2sessions[message.padId]) + { + if(pad2sessions[message.padId][i] != client.sessionId) + { + socketio.clients[pad2sessions[message.padId][i]].send(messageToTheOtherUsers); + + var messageToNotifyTheClientAboutTheOthers = { + "type": "COLLABROOM", + "data": { + type: "USER_NEWINFO", + userInfo: { + "ip": "127.0.0.1", + "colorId": authorManager.getAuthorColorId(sessioninfos[pad2sessions[message.padId][i]].author), + "userAgent": "Anonymous", + "userId": sessioninfos[pad2sessions[message.padId][i]].author + } + } + }; + + client.send(messageToNotifyTheClientAboutTheOthers); + } + } + + +} + +/*function _randomString(len) { + // use only numbers and lowercase letters + var pieces = []; + for(var i=0;i globalPads[id].head) + throw "The Revision " + revNum + " don't exist'"; +} + +/** + * Copied from the Etherpad source code, don't know what its good for + * @param txt + */ +exports.cleanText = function (txt) { + return txt.replace(/\r\n/g,'\n').replace(/\r/g,'\n').replace(/\t/g, ' ').replace(/\xa0/g, ' '); +} + + diff --git a/node/easysync_tests.js b/node/easysync_tests.js new file mode 100644 index 000000000..b650d38f2 --- /dev/null +++ b/node/easysync_tests.js @@ -0,0 +1,942 @@ +/** + * 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. + */ + +var Changeset = require('./Changeset'); +var AttributePoolFactory = require("./AttributePoolFactory"); + +function random() { + this.nextInt = function (maxValue) { + return Math.floor(Math.random() * maxValue); + } + + this.nextDouble = function (maxValue) { + return Math.random(); + } +} + +function runTests() { + + function print(str) { + console.log(str); + } + + function assert(code, optMsg) { + if (!eval(code)) throw new Error("FALSE: " + (optMsg || code)); + } + + function literal(v) { + if ((typeof v) == "string") { + return '"' + v.replace(/[\\\"]/g, '\\$1').replace(/\n/g, '\\n') + '"'; + } else + return JSON.stringify(v); + } + + function assertEqualArrays(a, b) { + assert("JSON.stringify(" + literal(a) + ") == JSON.stringify(" + literal(b) + ")"); + } + + function assertEqualStrings(a, b) { + assert(literal(a) + " == " + literal(b)); + } + + function throughIterator(opsStr) { + var iter = Changeset.opIterator(opsStr); + var assem = Changeset.opAssembler(); + while (iter.hasNext()) { + assem.append(iter.next()); + } + return assem.toString(); + } + + function throughSmartAssembler(opsStr) { + var iter = Changeset.opIterator(opsStr); + var assem = Changeset.smartOpAssembler(); + while (iter.hasNext()) { + assem.append(iter.next()); + } + assem.endDocument(); + return assem.toString(); + } + + (function () { + print("> throughIterator"); + var x = '-c*3*4+6|3=az*asdf0*1*2*3+1=1-1+1*0+1=1-1+1|c=c-1'; + assert("throughIterator(" + literal(x) + ") == " + literal(x)); + })(); + + (function () { + print("> throughSmartAssembler"); + var x = '-c*3*4+6|3=az*asdf0*1*2*3+1=1-1+1*0+1=1-1+1|c=c-1'; + assert("throughSmartAssembler(" + literal(x) + ") == " + literal(x)); + })(); + + function applyMutations(mu, arrayOfArrays) { + arrayOfArrays.forEach(function (a) { + var result = mu[a[0]].apply(mu, a.slice(1)); + if (a[0] == 'remove' && a[3]) { + assertEqualStrings(a[3], result); + } + }); + } + + function mutationsToChangeset(oldLen, arrayOfArrays) { + var assem = Changeset.smartOpAssembler(); + var op = Changeset.newOp(); + var bank = Changeset.stringAssembler(); + var oldPos = 0; + var newLen = 0; + arrayOfArrays.forEach(function (a) { + if (a[0] == 'skip') { + op.opcode = '='; + op.chars = a[1]; + op.lines = (a[2] || 0); + assem.append(op); + oldPos += op.chars; + newLen += op.chars; + } else if (a[0] == 'remove') { + op.opcode = '-'; + op.chars = a[1]; + op.lines = (a[2] || 0); + assem.append(op); + oldPos += op.chars; + } else if (a[0] == 'insert') { + op.opcode = '+'; + bank.append(a[1]); + op.chars = a[1].length; + op.lines = (a[2] || 0); + assem.append(op); + newLen += op.chars; + } + }); + newLen += oldLen - oldPos; + assem.endDocument(); + return Changeset.pack(oldLen, newLen, assem.toString(), bank.toString()); + } + + function runMutationTest(testId, origLines, muts, correct) { + print("> runMutationTest#" + testId); + var lines = origLines.slice(); + var mu = Changeset.textLinesMutator(lines); + applyMutations(mu, muts); + mu.close(); + assertEqualArrays(correct, lines); + + var inText = origLines.join(''); + var cs = mutationsToChangeset(inText.length, muts); + lines = origLines.slice(); + Changeset.mutateTextLines(cs, lines); + assertEqualArrays(correct, lines); + + var correctText = correct.join(''); + //print(literal(cs)); + var outText = Changeset.applyToText(cs, inText); + assertEqualStrings(correctText, outText); + } + + runMutationTest(1, ["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [ + ['remove', 1, 0, "a"], + ['insert', "tu"], + ['remove', 1, 0, "p"], + ['skip', 4, 1], + ['skip', 7, 1], + ['insert', "cream\npie\n", 2], + ['skip', 2], + ['insert', "bot"], + ['insert', "\n", 1], + ['insert', "bu"], + ['skip', 3], + ['remove', 3, 1, "ge\n"], + ['remove', 6, 0, "duffle"] + ], ["tuple\n", "banana\n", "cream\n", "pie\n", "cabot\n", "bubba\n", "eggplant\n"]); + + runMutationTest(2, ["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [ + ['remove', 1, 0, "a"], + ['remove', 1, 0, "p"], + ['insert', "tu"], + ['skip', 11, 2], + ['insert', "cream\npie\n", 2], + ['skip', 2], + ['insert', "bot"], + ['insert', "\n", 1], + ['insert', "bu"], + ['skip', 3], + ['remove', 3, 1, "ge\n"], + ['remove', 6, 0, "duffle"] + ], ["tuple\n", "banana\n", "cream\n", "pie\n", "cabot\n", "bubba\n", "eggplant\n"]); + + runMutationTest(3, ["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [ + ['remove', 6, 1, "apple\n"], + ['skip', 15, 2], + ['skip', 6], + ['remove', 1, 1, "\n"], + ['remove', 8, 0, "eggplant"], + ['skip', 1, 1] + ], ["banana\n", "cabbage\n", "duffle\n"]); + + runMutationTest(4, ["15\n"], [ + ['skip', 1], + ['insert', "\n2\n3\n4\n", 4], + ['skip', 2, 1] + ], ["1\n", "2\n", "3\n", "4\n", "5\n"]); + + runMutationTest(5, ["1\n", "2\n", "3\n", "4\n", "5\n"], [ + ['skip', 1], + ['remove', 7, 4, "\n2\n3\n4\n"], + ['skip', 2, 1] + ], ["15\n"]); + + runMutationTest(6, ["123\n", "abc\n", "def\n", "ghi\n", "xyz\n"], [ + ['insert', "0"], + ['skip', 4, 1], + ['skip', 4, 1], + ['remove', 8, 2, "def\nghi\n"], + ['skip', 4, 1] + ], ["0123\n", "abc\n", "xyz\n"]); + + runMutationTest(7, ["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [ + ['remove', 6, 1, "apple\n"], + ['skip', 15, 2, true], + ['skip', 6, 0, true], + ['remove', 1, 1, "\n"], + ['remove', 8, 0, "eggplant"], + ['skip', 1, 1, true] + ], ["banana\n", "cabbage\n", "duffle\n"]); + + function poolOrArray(attribs) { + if (attribs.getAttrib) { + return attribs; // it's already an attrib pool + } else { + // assume it's an array of attrib strings to be split and added + var p = AttributePoolFactory.createAttributePool(); + attribs.forEach(function (kv) { + p.putAttrib(kv.split(',')); + }); + return p; + } + } + + function runApplyToAttributionTest(testId, attribs, cs, inAttr, outCorrect) { + print("> applyToAttribution#" + testId); + var p = poolOrArray(attribs); + var result = Changeset.applyToAttribution( + Changeset.checkRep(cs), inAttr, p); + assertEqualStrings(outCorrect, result); + } + + // turn cactus\n into actusabcd\n + 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"); + + // turn "david\ngreenspan\n" into "david\ngreen\n" + runApplyToAttributionTest(2, ['bold,', 'bold,true'], "Z:g<4*1|1=6*1=5-4$", "|2+g", "*1|1+6*1+5|1+1"); + + (function () { + print("> mutatorHasMore"); + var lines = ["1\n", "2\n", "3\n", "4\n"]; + var mu; + + mu = Changeset.textLinesMutator(lines); + assert(mu.hasMore() + ' == true'); + mu.skip(8, 4); + assert(mu.hasMore() + ' == false'); + mu.close(); + assert(mu.hasMore() + ' == false'); + + // still 1,2,3,4 + mu = Changeset.textLinesMutator(lines); + assert(mu.hasMore() + ' == true'); + mu.remove(2, 1); + assert(mu.hasMore() + ' == true'); + mu.skip(2, 1); + assert(mu.hasMore() + ' == true'); + mu.skip(2, 1); + assert(mu.hasMore() + ' == true'); + mu.skip(2, 1); + assert(mu.hasMore() + ' == false'); + mu.insert("5\n", 1); + assert(mu.hasMore() + ' == false'); + mu.close(); + assert(mu.hasMore() + ' == false'); + + // 2,3,4,5 now + mu = Changeset.textLinesMutator(lines); + assert(mu.hasMore() + ' == true'); + mu.remove(6, 3); + assert(mu.hasMore() + ' == true'); + mu.remove(2, 1); + assert(mu.hasMore() + ' == false'); + mu.insert("hello\n", 1); + assert(mu.hasMore() + ' == false'); + mu.close(); + assert(mu.hasMore() + ' == false'); + + })(); + + function runMutateAttributionTest(testId, attribs, cs, alines, outCorrect) { + print("> runMutateAttributionTest#" + testId); + var p = poolOrArray(attribs); + var alines2 = Array.prototype.slice.call(alines); + var result = Changeset.mutateAttributionLines( + Changeset.checkRep(cs), alines2, p); + assertEqualArrays(outCorrect, alines2); + + print("> runMutateAttributionTest#" + testId + ".applyToAttribution"); + + function removeQuestionMarks(a) { + return a.replace(/\?/g, ''); + } + var inMerged = Changeset.joinAttributionLines(alines.map(removeQuestionMarks)); + var correctMerged = Changeset.joinAttributionLines(outCorrect.map(removeQuestionMarks)); + var mergedResult = Changeset.applyToAttribution(cs, inMerged, p); + assertEqualStrings(correctMerged, mergedResult); + } + + // turn 123\n 456\n 789\n into 123\n 456\n 789\n + 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"]); + + // make a document bold + 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"]); + + // clear bold on document + 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"]); + + // add a character on line 3 of a document with 5 blank lines, and make sure + // the optimization that skips purely-kept lines is working; if any attribution string + // with a '?' is parsed it will cause an error. + 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"]); + + var testPoolWithChars = (function () { + var p = AttributePoolFactory.createAttributePool(); + p.putAttrib(['char', 'newline']); + for (var i = 1; i < 36; i++) { + p.putAttrib(['char', Changeset.numToString(i)]); + } + p.putAttrib(['char', '']); + return p; + })(); + + // based on runMutationTest#1 + 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"]); + + // based on runMutationTest#3 + runMutateAttributionTest(6, testPoolWithChars, "Z:117=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"]); + + // based on runMutationTest#5 + 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"]); + + // based on runMutationTest#6 + 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"]); + + 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"]); + + + 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"]); + + function randomInlineString(len, rand) { + var assem = Changeset.stringAssembler(); + for (var i = 0; i < len; i++) { + assem.append(String.fromCharCode(rand.nextInt(26) + 97)); + } + return assem.toString(); + } + + function randomMultiline(approxMaxLines, approxMaxCols, rand) { + var numParts = rand.nextInt(approxMaxLines * 2) + 1; + var txt = Changeset.stringAssembler(); + txt.append(rand.nextInt(2) ? '\n' : ''); + for (var i = 0; i < numParts; i++) { + if ((i % 2) == 0) { + if (rand.nextInt(10)) { + txt.append(randomInlineString(rand.nextInt(approxMaxCols) + 1, rand)); + } else { + txt.append('\n'); + } + } else { + txt.append('\n'); + } + } + return txt.toString(); + } + + function randomStringOperation(numCharsLeft, rand) { + var result; + switch (rand.nextInt(9)) { + case 0: + { + // insert char + result = { + insert: randomInlineString(1, rand) + }; + break; + } + case 1: + { + // delete char + result = { + remove: 1 + }; + break; + } + case 2: + { + // skip char + result = { + skip: 1 + }; + break; + } + case 3: + { + // insert small + result = { + insert: randomInlineString(rand.nextInt(4) + 1, rand) + }; + break; + } + case 4: + { + // delete small + result = { + remove: rand.nextInt(4) + 1 + }; + break; + } + case 5: + { + // skip small + result = { + skip: rand.nextInt(4) + 1 + }; + break; + } + case 6: + { + // insert multiline; + result = { + insert: randomMultiline(5, 20, rand) + }; + break; + } + case 7: + { + // delete multiline + result = { + remove: Math.round(numCharsLeft * rand.nextDouble() * rand.nextDouble()) + }; + break; + } + case 8: + { + // skip multiline + result = { + skip: Math.round(numCharsLeft * rand.nextDouble() * rand.nextDouble()) + }; + break; + } + case 9: + { + // delete to end + result = { + remove: numCharsLeft + }; + break; + } + case 10: + { + // skip to end + result = { + skip: numCharsLeft + }; + break; + } + } + var maxOrig = numCharsLeft - 1; + if ('remove' in result) { + result.remove = Math.min(result.remove, maxOrig); + } else if ('skip' in result) { + result.skip = Math.min(result.skip, maxOrig); + } + return result; + } + + function randomTwoPropAttribs(opcode, rand) { + // assumes attrib pool like ['apple,','apple,true','banana,','banana,true'] + if (opcode == '-' || rand.nextInt(3)) { + return ''; + } else if (rand.nextInt(3)) { + if (opcode == '+' || rand.nextInt(2)) { + return '*' + Changeset.numToString(rand.nextInt(2) * 2 + 1); + } else { + return '*' + Changeset.numToString(rand.nextInt(2) * 2); + } + } else { + if (opcode == '+' || rand.nextInt(4) == 0) { + return '*1*3'; + } else { + return ['*0*2', '*0*3', '*1*2'][rand.nextInt(3)]; + } + } + } + + function randomTestChangeset(origText, rand, withAttribs) { + var charBank = Changeset.stringAssembler(); + var textLeft = origText; // always keep final newline + var outTextAssem = Changeset.stringAssembler(); + var opAssem = Changeset.smartOpAssembler(); + var oldLen = origText.length; + + var nextOp = Changeset.newOp(); + + function appendMultilineOp(opcode, txt) { + nextOp.opcode = opcode; + if (withAttribs) { + nextOp.attribs = randomTwoPropAttribs(opcode, rand); + } + txt.replace(/\n|[^\n]+/g, function (t) { + if (t == '\n') { + nextOp.chars = 1; + nextOp.lines = 1; + opAssem.append(nextOp); + } else { + nextOp.chars = t.length; + nextOp.lines = 0; + opAssem.append(nextOp); + } + return ''; + }); + } + + function doOp() { + var o = randomStringOperation(textLeft.length, rand); + if (o.insert) { + var txt = o.insert; + charBank.append(txt); + outTextAssem.append(txt); + appendMultilineOp('+', txt); + } else if (o.skip) { + var txt = textLeft.substring(0, o.skip); + textLeft = textLeft.substring(o.skip); + outTextAssem.append(txt); + appendMultilineOp('=', txt); + } else if (o.remove) { + var txt = textLeft.substring(0, o.remove); + textLeft = textLeft.substring(o.remove); + appendMultilineOp('-', txt); + } + } + + while (textLeft.length > 1) doOp(); + for (var i = 0; i < 5; i++) doOp(); // do some more (only insertions will happen) + var outText = outTextAssem.toString() + '\n'; + opAssem.endDocument(); + var cs = Changeset.pack(oldLen, outText.length, opAssem.toString(), charBank.toString()); + Changeset.checkRep(cs); + return [cs, outText]; + } + + function testCompose(randomSeed) { + var rand = new random(); + print("> testCompose#" + randomSeed); + + var p = AttributePoolFactory.createAttributePool(); + + var startText = randomMultiline(10, 20, rand) + '\n'; + + var x1 = randomTestChangeset(startText, rand); + var change1 = x1[0]; + var text1 = x1[1]; + + var x2 = randomTestChangeset(text1, rand); + var change2 = x2[0]; + var text2 = x2[1]; + + var x3 = randomTestChangeset(text2, rand); + var change3 = x3[0]; + var text3 = x3[1]; + + //print(literal(Changeset.toBaseTen(startText))); + //print(literal(Changeset.toBaseTen(change1))); + //print(literal(Changeset.toBaseTen(change2))); + var change12 = Changeset.checkRep(Changeset.compose(change1, change2, p)); + var change23 = Changeset.checkRep(Changeset.compose(change2, change3, p)); + var change123 = Changeset.checkRep(Changeset.compose(change12, change3, p)); + var change123a = Changeset.checkRep(Changeset.compose(change1, change23, p)); + assertEqualStrings(change123, change123a); + + assertEqualStrings(text2, Changeset.applyToText(change12, startText)); + assertEqualStrings(text3, Changeset.applyToText(change23, text1)); + assertEqualStrings(text3, Changeset.applyToText(change123, startText)); + } + + for (var i = 0; i < 30; i++) testCompose(i); + + (function simpleComposeAttributesTest() { + print("> simpleComposeAttributesTest"); + var p = AttributePoolFactory.createAttributePool(); + p.putAttrib(['bold', '']); + p.putAttrib(['bold', 'true']); + var cs1 = Changeset.checkRep("Z:2>1*1+1*1=1$x"); + var cs2 = Changeset.checkRep("Z:3>0*0|1=3$"); + var cs12 = Changeset.checkRep(Changeset.compose(cs1, cs2, p)); + assertEqualStrings("Z:2>1+1*0|1=2$x", cs12); + })(); + + (function followAttributesTest() { + var p = AttributePoolFactory.createAttributePool(); + p.putAttrib(['x', '']); + p.putAttrib(['x', 'abc']); + p.putAttrib(['x', 'def']); + p.putAttrib(['y', '']); + p.putAttrib(['y', 'abc']); + p.putAttrib(['y', 'def']); + + function testFollow(a, b, afb, bfa, merge) { + assertEqualStrings(afb, Changeset.followAttributes(a, b, p)); + assertEqualStrings(bfa, Changeset.followAttributes(b, a, p)); + assertEqualStrings(merge, Changeset.composeAttributes(a, afb, true, p)); + assertEqualStrings(merge, Changeset.composeAttributes(b, bfa, true, p)); + } + + testFollow('', '', '', '', ''); + testFollow('*0', '', '', '*0', '*0'); + testFollow('*0', '*0', '', '', '*0'); + testFollow('*0', '*1', '', '*0', '*0'); + testFollow('*1', '*2', '', '*1', '*1'); + testFollow('*0*1', '', '', '*0*1', '*0*1'); + testFollow('*0*4', '*2*3', '*3', '*0', '*0*3'); + testFollow('*0*4', '*2', '', '*0*4', '*0*4'); + })(); + + function testFollow(randomSeed) { + var rand = new random(); + print("> testFollow#" + randomSeed); + + var p = AttributePoolFactory.createAttributePool(); + + var startText = randomMultiline(10, 20, rand) + '\n'; + + var cs1 = randomTestChangeset(startText, rand)[0]; + var cs2 = randomTestChangeset(startText, rand)[0]; + + var afb = Changeset.checkRep(Changeset.follow(cs1, cs2, false, p)); + var bfa = Changeset.checkRep(Changeset.follow(cs2, cs1, true, p)); + + var merge1 = Changeset.checkRep(Changeset.compose(cs1, afb)); + var merge2 = Changeset.checkRep(Changeset.compose(cs2, bfa)); + + assertEqualStrings(merge1, merge2); + } + + for (var i = 0; i < 30; i++) testFollow(i); + + function testSplitJoinAttributionLines(randomSeed) { + var rand = new random(); + print("> testSplitJoinAttributionLines#" + randomSeed); + + var doc = randomMultiline(10, 20, rand) + '\n'; + + function stringToOps(str) { + var assem = Changeset.mergingOpAssembler(); + var o = Changeset.newOp('+'); + o.chars = 1; + for (var i = 0; i < str.length; i++) { + var c = str.charAt(i); + o.lines = (c == '\n' ? 1 : 0); + o.attribs = (c == 'a' || c == 'b' ? '*' + c : ''); + assem.append(o); + } + return assem.toString(); + } + + var theJoined = stringToOps(doc); + var theSplit = doc.match(/[^\n]*\n/g).map(stringToOps); + + assertEqualArrays(theSplit, Changeset.splitAttributionLines(theJoined, doc)); + assertEqualStrings(theJoined, Changeset.joinAttributionLines(theSplit)); + } + + for (var i = 0; i < 10; i++) testSplitJoinAttributionLines(i); + + (function testMoveOpsToNewPool() { + print("> testMoveOpsToNewPool"); + + var pool1 = AttributePoolFactory.createAttributePool(); + var pool2 = AttributePoolFactory.createAttributePool(); + + pool1.putAttrib(['baz', 'qux']); + pool1.putAttrib(['foo', 'bar']); + + pool2.putAttrib(['foo', 'bar']); + + assertEqualStrings(Changeset.moveOpsToNewPool('Z:1>2*1+1*0+1$ab', pool1, pool2), 'Z:1>2*0+1*1+1$ab'); + assertEqualStrings(Changeset.moveOpsToNewPool('*1+1*0+1', pool1, pool2), '*0+1*1+1'); + })(); + + + (function testMakeSplice() { + print("> testMakeSplice"); + + var t = "a\nb\nc\n"; + var t2 = Changeset.applyToText(Changeset.makeSplice(t, 5, 0, "def"), t); + assertEqualStrings("a\nb\ncdef\n", t2); + + })(); + + (function testToSplices() { + print("> testToSplices"); + + var cs = Changeset.checkRep('Z:z>9*0=1=4-3+9=1|1-4-4+1*0+a$123456789abcdefghijk'); + var correctSplices = [ + [5, 8, "123456789"], + [9, 17, "abcdefghijk"] + ]; + assertEqualArrays(correctSplices, Changeset.toSplices(cs)); + })(); + + function testCharacterRangeFollow(testId, cs, oldRange, insertionsAfter, correctNewRange) { + print("> testCharacterRangeFollow#" + testId); + + var cs = Changeset.checkRep(cs); + assertEqualArrays(correctNewRange, Changeset.characterRangeFollow(cs, oldRange[0], oldRange[1], insertionsAfter)); + + } + + testCharacterRangeFollow(1, 'Z:z>9*0=1=4-3+9=1|1-4-4+1*0+a$123456789abcdefghijk', [7, 10], false, [14, 15]); + testCharacterRangeFollow(2, "Z:bc<6|x=b4|2-6$", [400, 407], false, [400, 401]); + testCharacterRangeFollow(3, "Z:4>0-3+3$abc", [0, 3], false, [3, 3]); + testCharacterRangeFollow(4, "Z:4>0-3+3$abc", [0, 3], true, [0, 0]); + testCharacterRangeFollow(5, "Z:5>1+1=1-3+3$abcd", [1, 4], false, [5, 5]); + testCharacterRangeFollow(6, "Z:5>1+1=1-3+3$abcd", [1, 4], true, [2, 2]); + testCharacterRangeFollow(7, "Z:5>1+1=1-3+3$abcd", [0, 6], false, [1, 7]); + testCharacterRangeFollow(8, "Z:5>1+1=1-3+3$abcd", [0, 3], false, [1, 2]); + testCharacterRangeFollow(9, "Z:5>1+1=1-3+3$abcd", [2, 5], false, [5, 6]); + testCharacterRangeFollow(10, "Z:2>1+1$a", [0, 0], false, [1, 1]); + testCharacterRangeFollow(11, "Z:2>1+1$a", [0, 0], true, [0, 0]); + + (function testOpAttributeValue() { + print("> testOpAttributeValue"); + + var p = AttributePoolFactory.createAttributePool(); + p.putAttrib(['name', 'david']); + p.putAttrib(['color', 'green']); + + assertEqualStrings("david", Changeset.opAttributeValue(Changeset.stringOp('*0*1+1'), 'name', p)); + assertEqualStrings("david", Changeset.opAttributeValue(Changeset.stringOp('*0+1'), 'name', p)); + assertEqualStrings("", Changeset.opAttributeValue(Changeset.stringOp('*1+1'), 'name', p)); + assertEqualStrings("", Changeset.opAttributeValue(Changeset.stringOp('+1'), 'name', p)); + assertEqualStrings("green", Changeset.opAttributeValue(Changeset.stringOp('*0*1+1'), 'color', p)); + assertEqualStrings("green", Changeset.opAttributeValue(Changeset.stringOp('*1+1'), 'color', p)); + assertEqualStrings("", Changeset.opAttributeValue(Changeset.stringOp('*0+1'), 'color', p)); + assertEqualStrings("", Changeset.opAttributeValue(Changeset.stringOp('+1'), 'color', p)); + })(); + + function testAppendATextToAssembler(testId, atext, correctOps) { + print("> testAppendATextToAssembler#" + testId); + + var assem = Changeset.smartOpAssembler(); + Changeset.appendATextToAssembler(atext, assem); + assertEqualStrings(correctOps, assem.toString()); + } + + testAppendATextToAssembler(1, { + text: "\n", + attribs: "|1+1" + }, ""); + testAppendATextToAssembler(2, { + text: "\n\n", + attribs: "|2+2" + }, "|1+1"); + testAppendATextToAssembler(3, { + text: "\n\n", + attribs: "*x|2+2" + }, "*x|1+1"); + testAppendATextToAssembler(4, { + text: "\n\n", + attribs: "*x|1+1|1+1" + }, "*x|1+1"); + testAppendATextToAssembler(5, { + text: "foo\n", + attribs: "|1+4" + }, "+3"); + testAppendATextToAssembler(6, { + text: "\nfoo\n", + attribs: "|2+5" + }, "|1+1+3"); + testAppendATextToAssembler(7, { + text: "\nfoo\n", + attribs: "*x|2+5" + }, "*x|1+1*x+3"); + testAppendATextToAssembler(8, { + text: "\n\n\nfoo\n", + attribs: "|2+2*x|2+5" + }, "|2+2*x|1+1*x+3"); + + function testMakeAttribsString(testId, pool, opcode, attribs, correctString) { + print("> testMakeAttribsString#" + testId); + + var p = poolOrArray(pool); + var str = Changeset.makeAttribsString(opcode, attribs, p); + assertEqualStrings(correctString, str); + } + + testMakeAttribsString(1, ['bold,'], '+', [ + ['bold', ''] + ], ''); + testMakeAttribsString(2, ['abc,def', 'bold,'], '=', [ + ['bold', ''] + ], '*1'); + testMakeAttribsString(3, ['abc,def', 'bold,true'], '+', [ + ['abc', 'def'], + ['bold', 'true'] + ], '*0*1'); + testMakeAttribsString(4, ['abc,def', 'bold,true'], '+', [ + ['bold', 'true'], + ['abc', 'def'] + ], '*0*1'); + + function testSubattribution(testId, astr, start, end, correctOutput) { + print("> testSubattribution#" + testId); + + var str = Changeset.subattribution(astr, start, end); + assertEqualStrings(correctOutput, str); + } + + testSubattribution(1, "+1", 0, 0, ""); + testSubattribution(2, "+1", 0, 1, "+1"); + testSubattribution(3, "+1", 0, undefined, "+1"); + testSubattribution(4, "|1+1", 0, 0, ""); + testSubattribution(5, "|1+1", 0, 1, "|1+1"); + testSubattribution(6, "|1+1", 0, undefined, "|1+1"); + testSubattribution(7, "*0+1", 0, 0, ""); + testSubattribution(8, "*0+1", 0, 1, "*0+1"); + testSubattribution(9, "*0+1", 0, undefined, "*0+1"); + testSubattribution(10, "*0|1+1", 0, 0, ""); + testSubattribution(11, "*0|1+1", 0, 1, "*0|1+1"); + testSubattribution(12, "*0|1+1", 0, undefined, "*0|1+1"); + testSubattribution(13, "*0+2+1*1+3", 0, 1, "*0+1"); + testSubattribution(14, "*0+2+1*1+3", 0, 2, "*0+2"); + testSubattribution(15, "*0+2+1*1+3", 0, 3, "*0+2+1"); + testSubattribution(16, "*0+2+1*1+3", 0, 4, "*0+2+1*1+1"); + testSubattribution(17, "*0+2+1*1+3", 0, 5, "*0+2+1*1+2"); + testSubattribution(18, "*0+2+1*1+3", 0, 6, "*0+2+1*1+3"); + testSubattribution(19, "*0+2+1*1+3", 0, 7, "*0+2+1*1+3"); + testSubattribution(20, "*0+2+1*1+3", 0, undefined, "*0+2+1*1+3"); + testSubattribution(21, "*0+2+1*1+3", 1, undefined, "*0+1+1*1+3"); + testSubattribution(22, "*0+2+1*1+3", 2, undefined, "+1*1+3"); + testSubattribution(23, "*0+2+1*1+3", 3, undefined, "*1+3"); + testSubattribution(24, "*0+2+1*1+3", 4, undefined, "*1+2"); + testSubattribution(25, "*0+2+1*1+3", 5, undefined, "*1+1"); + testSubattribution(26, "*0+2+1*1+3", 6, undefined, ""); + testSubattribution(27, "*0+2+1*1|1+3", 0, 1, "*0+1"); + testSubattribution(28, "*0+2+1*1|1+3", 0, 2, "*0+2"); + testSubattribution(29, "*0+2+1*1|1+3", 0, 3, "*0+2+1"); + testSubattribution(30, "*0+2+1*1|1+3", 0, 4, "*0+2+1*1+1"); + testSubattribution(31, "*0+2+1*1|1+3", 0, 5, "*0+2+1*1+2"); + testSubattribution(32, "*0+2+1*1|1+3", 0, 6, "*0+2+1*1|1+3"); + testSubattribution(33, "*0+2+1*1|1+3", 0, 7, "*0+2+1*1|1+3"); + testSubattribution(34, "*0+2+1*1|1+3", 0, undefined, "*0+2+1*1|1+3"); + testSubattribution(35, "*0+2+1*1|1+3", 1, undefined, "*0+1+1*1|1+3"); + testSubattribution(36, "*0+2+1*1|1+3", 2, undefined, "+1*1|1+3"); + testSubattribution(37, "*0+2+1*1|1+3", 3, undefined, "*1|1+3"); + testSubattribution(38, "*0+2+1*1|1+3", 4, undefined, "*1|1+2"); + testSubattribution(39, "*0+2+1*1|1+3", 5, undefined, "*1|1+1"); + testSubattribution(40, "*0+2+1*1|1+3", 1, 5, "*0+1+1*1+2"); + testSubattribution(41, "*0+2+1*1|1+3", 2, 6, "+1*1|1+3"); + testSubattribution(42, "*0+2+1*1+3", 2, 6, "+1*1+3"); + + function testFilterAttribNumbers(testId, cs, filter, correctOutput) { + print("> testFilterAttribNumbers#" + testId); + + var str = Changeset.filterAttribNumbers(cs, filter); + assertEqualStrings(correctOutput, str); + } + + testFilterAttribNumbers(1, "*0*1+1+2+3*1+4*2+5*0*2*1*b*c+6", function (n) { + return (n % 2) == 0; + }, "*0+1+2+3+4*2+5*0*2*c+6"); + testFilterAttribNumbers(2, "*0*1+1+2+3*1+4*2+5*0*2*1*b*c+6", function (n) { + return (n % 2) == 1; + }, "*1+1+2+3*1+4+5*1*b+6"); + + function testInverse(testId, cs, lines, alines, pool, correctOutput) { + print("> testInverse#" + testId); + + pool = poolOrArray(pool); + var str = Changeset.inverse(Changeset.checkRep(cs), lines, alines, pool); + assertEqualStrings(correctOutput, str); + } + + // take "FFFFTTTTT" and apply "-FT--FFTT", the inverse of which is "--F--TT--" + 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$"); + + function testMutateTextLines(testId, cs, lines, correctLines) { + print("> testMutateTextLines#" + testId); + + var a = lines.slice(); + Changeset.mutateTextLines(cs, a); + assertEqualArrays(correctLines, a); + } + + testMutateTextLines(1, "Z:4<1|1-2-1|1+1+1$\nc", ["a\n", "b\n"], ["\n", "c\n"]); + testMutateTextLines(2, "Z:4>0|1-2-1|2+3$\nc\n", ["a\n", "b\n"], ["\n", "c\n", "\n"]); + + function testInverseRandom(randomSeed) { + var rand = new random(); + print("> testInverseRandom#" + randomSeed); + + var p = poolOrArray(['apple,', 'apple,true', 'banana,', 'banana,true']); + + var startText = randomMultiline(10, 20, rand) + '\n'; + var alines = Changeset.splitAttributionLines(Changeset.makeAttribution(startText), startText); + var lines = startText.slice(0, -1).split('\n').map(function (s) { + return s + '\n'; + }); + + var stylifier = randomTestChangeset(startText, rand, true)[0]; + + //print(alines.join('\n')); + Changeset.mutateAttributionLines(stylifier, alines, p); + //print(stylifier); + //print(alines.join('\n')); + Changeset.mutateTextLines(stylifier, lines); + + var changeset = randomTestChangeset(lines.join(''), rand, true)[0]; + var inverseChangeset = Changeset.inverse(changeset, lines, alines, p); + + var origLines = lines.slice(); + var origALines = alines.slice(); + + Changeset.mutateTextLines(changeset, lines); + Changeset.mutateAttributionLines(changeset, alines, p); + //print(origALines.join('\n')); + //print(changeset); + //print(inverseChangeset); + //print(origLines.map(function(s) { return '1: '+s.slice(0,-1); }).join('\n')); + //print(lines.map(function(s) { return '2: '+s.slice(0,-1); }).join('\n')); + //print(alines.join('\n')); + Changeset.mutateTextLines(inverseChangeset, lines); + Changeset.mutateAttributionLines(inverseChangeset, alines, p); + //print(lines.map(function(s) { return '3: '+s.slice(0,-1); }).join('\n')); + assertEqualArrays(origLines, lines); + assertEqualArrays(origALines, alines); + } + + for (var i = 0; i < 30; i++) testInverseRandom(i); +} + +runTests(); diff --git a/node/server.js b/node/server.js new file mode 100644 index 000000000..a110eef2b --- /dev/null +++ b/node/server.js @@ -0,0 +1,128 @@ +// Simple Node & Socket server + +var http = require('http') + , url = require('url') + , fs = require('fs') + , io = require('socket.io') + , sys = require('sys') + , server; + +server = http.createServer(function(req, res){ + var path = url.parse(req.url).pathname; + + if(path.substring(0,"/static".length) == "/static" || path.substring(0,"/p/".length) == "/p/") + { + if(path.substring(0,"/p/".length) == "/p/") + { + if(path.length < 7) + send404(res, path); + + path = "/static/padhtml"; + } + + sendFile(res, path, __dirname + "/.." + path); + } + else if(path == "/") + { + sendRedirect(res, path, "/p/test"); + } + else if(path == "/newpad") + { + sendRedirect(res, path, "/p/" + randomPadName()); + } + else if(path == "/ep/pad/reconnect") + { + if(req.headers.referer != null) + sendRedirect(res, path, req.headers.referer); + else + send404(res, path); + } + else + { + send404(res, path); + } +}); +server.listen(80); + +function randomPadName() { + var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; + var string_length = 10; + var randomstring = ''; + for (var i=0; i " + path); + } + }); +} + +function send404(res, reqPath) +{ + res.writeHead(404); + res.write("404 - Not Found"); + res.end(); + + requestLog(404, reqPath, "NOT FOUND!"); +} + +function sendRedirect(res, reqPath, location) +{ + res.writeHead(302, {'Location': location}); + res.end(); + + requestLog(302, reqPath, "-> " + location); +} + +function requestLog(code, path, desc) +{ + //console.log(code +", " + path + ", " + desc); +} + +var io = io.listen(server); +var messageHandler = require("./MessageHandler"); +messageHandler.setSocketIO(io); + +io.on('connection', function(client){ + try{ + messageHandler.handleConnect(client); + }catch(e){console.error(e);} + + client.on('message', function(message){ + //try{ + messageHandler.handleMessage(client, message); + //}catch(e){console.error(e);} + }); + + client.on('disconnect', function(){ + try{ + messageHandler.handleDisconnect(client); + }catch(e){console.error(e);} + }); +}); + + + + diff --git a/static/css/editor.css b/static/css/editor.css new file mode 100644 index 000000000..0a43478b3 --- /dev/null +++ b/static/css/editor.css @@ -0,0 +1,109 @@ + +/* These CSS rules are included in both the outer and inner ACE iframe. + Also see inner.css, included only in the inner one. +*/ + +body { + margin: 0; + white-space: nowrap; +} + +#outerdocbody { + background-color: #fff; +} +body.grayedout { background-color: #eee !important } + +#innerdocbody { + font-size: 12px; /* overridden by body.style */ + font-family: monospace; /* overridden by body.style */ + line-height: 16px; /* overridden by body.style */ +} + +body.doesWrap { + white-space: normal; +} + +#innerdocbody { + padding-top: 1px; /* important for some reason? */ + padding-right: 10px; + padding-bottom: 8px; + padding-left: 1px /* prevents characters from looking chopped off in FF3 */; + overflow: hidden; + /* blank 1x1 gif, so that IE8 doesn't consider the body transparent */ + background-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==); +} + +#sidediv { + font-size: 11px; + font-family: monospace; + line-height: 16px; /* overridden by sideDiv.style */ + padding-top: 8px; /* EDIT_BODY_PADDING_TOP */ + padding-right: 3px; /* LINE_NUMBER_PADDING_RIGHT - 1 */ + position: absolute; + width: 20px; /* MIN_LINEDIV_WIDTH */ + top: 0; + left: 0; + cursor: default; + color: white; +} + +#sidedivinner { + text-align: right; +} + +.sidedivdelayed { /* class set after sizes are set */ + background-color: #eee; + color: #888 !important; + border-right: 1px solid #999; +} +.sidedivhidden { + display: none; +} + +#outerdocbody iframe { + display: block; /* codemirror says it suppresses bugs */ + position: relative; + left: 32px; /* MIN_LINEDIV_WIDTH + LINE_NUMBER_PADDING_RIGHT + EDIT_BODY_PADDING_LEFT */ + top: 7px; /* EDIT_BODY_PADDING_TOP - 1*/ + border: 0; + width: 1px; /* changed programmatically */ + height: 1px; /* changed programmatically */ +} + +#outerdocbody .hotrect { + border: 1px solid #999; + position: absolute; +} + +/* cause "body" area (e.g. where clicks are heard) to grow horizontally with text */ +body.mozilla, body.safari { + display: table-cell; +} + +body.doesWrap { + display: block !important; +} + +.safari div { + /* prevents the caret from disappearing on the longest line of the doc */ + padding-right: 1px; +} + +p { + margin: 0; +} + +/*b, strong, .Apple-style-span { font-weight: normal !important; font-style: normal !important; + color: red !important; }*/ + +#linemetricsdiv { + position: absolute; + left: -1000px; + top: -1000px; + color: white; + z-index: -1; + font-size: 12px; /* overridden by lineMetricsDiv.style */ + font-family: monospace; /* overridden by lineMetricsDiv.style */ +} + +#overlaysdiv { position: absolute; left: -1000px; top: -1000px; } \ No newline at end of file diff --git a/static/css/inner.css b/static/css/inner.css new file mode 100644 index 000000000..a2db762f8 --- /dev/null +++ b/static/css/inner.css @@ -0,0 +1,45 @@ + +/* Firefox (3) is bad about keeping the text cursor in design mode; + various actions (clicking, dragging, scroll-wheel) lose it and it + doesn't come back easily, presumably because of optimizations. + These rules try to maximize the chance Firefox will think the cursor + needs changing again. +*/ +html { cursor: text; } /* in Safari, produces text cursor for whole doc (inc. below body) */ +span { cursor: auto; } + +a { cursor: pointer !important; } + +/*span { padding-bottom: 1px; }/* padding-top: 1px; }*/ + +/*div { background: transparent url(/static/img/acecarets/default.gif) repeat-y left top }*/ + +/*tt { padding-left: 3px; padding-right: 3px; margin-right: -3px; margin-left: -3px; }*/ + +/*div { display: list-item; list-style: disc outside; margin-left: 20px; }*/ +/*div:before { content:"foo" }*/ + +ul, ol, li { + padding: 0; + margin: 0; +} +ul { margin-left: 1.5em; } +ul ul { margin-left: 0 !important; } +ul.list-bullet1 { margin-left: 1.5em; } +ul.list-bullet2 { margin-left: 3em; } +ul.list-bullet3 { margin-left: 4.5em; } +ul.list-bullet4 { margin-left: 6em; } +ul.list-bullet5 { margin-left: 7.5em; } +ul.list-bullet6 { margin-left: 9em; } +ul.list-bullet7 { margin-left: 10.5em; } +ul.list-bullet8 { margin-left: 12em; } + +ul { list-style-type: disc; } +ul.list-bullet1 { list-style-type: disc; } +ul.list-bullet2 { list-style-type: circle; } +ul.list-bullet3 { list-style-type: square; } +ul.list-bullet4 { list-style-type: disc; } +ul.list-bullet5 { list-style-type: circle; } +ul.list-bullet6 { list-style-type: square; } +ul.list-bullet7 { list-style-type: disc; } +ul.list-bullet8 { list-style-type: circle; } diff --git a/static/css/pad2_ejs.css b/static/css/pad2_ejs.css new file mode 100644 index 000000000..c0ccae489 --- /dev/null +++ b/static/css/pad2_ejs.css @@ -0,0 +1,1131 @@ + +*,html.body,p { margin: 0; padding: 0; } +h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: normal; font-style: normal; + text-decoration: none; margin: 0; padding: 0; } + +.clear { clear: both; } + +html { font-size: 62.5%; } + +body { background: #ebebeb url(/static/img/jun09/pad/backgrad.gif) repeat-x left top; } +body, textarea { font-family: Arial, sans-serif; } + +#padpage { + position: absolute; + top: 0px; + bottom: 8px; + left: 50%; + margin-left: -450px; + width: 900px; +} + +.maximized #padpage { + left: 8px; + right: 8px; + width: auto; + margin-left: 0; +} + +body.fullwidth #padpage { width: auto; margin-left: 6px; margin-right: 6px; } +body.squish1width #padpage { width: 800px; } +body.squish2width #padpage { width: 700px; } + +#topbar { height: 25px; background: #326cbd url(/static/img/jun09/pad/padtopback2.gif) repeat-x left top; + position: relative; } + +#topbarleft { float: left; height: 100%; overflow: hidden; + background: url(/static/img/jun09/pad/padtop5.gif) no-repeat left top; width: 5px; + + } +#topbarright { float: right; height: 100%; overflow: hidden; + background: url(/static/img/jun09/pad/padtop5.gif) no-repeat right top; width: 5px; } + +.propad #topbar { background: #2c2c2c url(/static/img/jun09/pad/protop.gif) repeat-x 0 -25px; } +.propad #topbarleft { background: url(/static/img/jun09/pad/protop.gif) no-repeat left top; } +.propad #topbarright { background: url(/static/img/jun09/pad/protop.gif) no-repeat right top; } + +a#backtoprosite, #accountnav { + display: block; position: absolute; height: 15px; line-height: 15px; + width: auto; top: 5px; font-size: 1.2em; display:none; +} +a#backtoprosite, #accountnav a { color: #cde7ff; text-decoration: underline; } + +a#backtoprosite { padding-left: 20px; left: 6px; + background: url(/static/img/jun09/pad/protop.gif) no-repeat -5px -6px; } +#accountnav { right: 30px; color: #fff; } + +#topbarcenter { margin-left: 150px; margin-right: 150px; text-align:center;} +a#topbaretherpad { margin-left: auto; margin-right: auto; display: block; width: 103px; + position: relative; top: 3px; height: 0; padding-top: 20px; +/* background: url(/static/img/jun09/pad/padtop5.gif) no-repeat -397px -3px; overflow: hidden; */ +} + + +#topbarBrand {font-size:2.1em; color: white; font-weight: bold; text-decoration: none; text-align: center;} + + + +#EtherpadLink {font-size: 1.2em; color: white;float:left;margin-left:-140px;margin-top:4px; text-decoration: none; } +#Licensing {font-size: 1.2em; color: white;float:left;margin-top:4px;margin-left:-75px; text-decoration: none; } +#fullscreen {font-size: 1.2em; color: white;float:right;margin-top:4px;margin-right:-120px; text-decoration: none; } + +.propad a#topbaretherpad { background: url(/static/img/jun09/pad/protop.gif) no-repeat -397px -3px; } + +#specialkeyarea { top: 5px; left: 250px; color: yellow; font-weight: bold; + font-size: 1.5em; position: absolute; } + +#alertbar { + margin-top: 6px; + opacity: 0; + filter: alpha(opacity = 0); /* IE */ + display: none; + position:absolute; + left:0; + right:0; + z-index:53; +} + +#servermsg { position: relative; zoom: 1; border: 1px solid #992; + background: #ffc; padding: 0.8em; font-size: 1.2em; } +#servermsg h3 { font-weight: bold; margin-right: 10px; + margin-bottom: 1em; float: left; width: auto; } +#servermsg #servermsgdate { font-style: italic; font-weight: normal; color: #666; } +a#hidetopmsg { position: absolute; right: 5px; bottom: 5px; } + +#shuttingdown { position: relative; zoom: 1; border: 1px solid #992; + background: #ffc; padding: 0.6em; font-size: 1.2em; margin-top: 6px; } + +#docbar { margin-top: 6px; height: 25px; position: relative; zoom: 1; + background: #fbfbfb url(/static/img/jun09/pad/padtopback2.gif) repeat-x 0 -31px; } + +.docbarbutton +{ + padding-top: 2px; + padding-bottom: 2px; + padding-left: 4px; + padding-right: 4px; + border-left: 1px solid #CCC; + white-space: nowrap; +} + +.docbarbutton img +{ + border: 0px; + width: 13px; + margin-right: 2px; + vertical-align: middle; + margin-top: 3px; + margin-bottom: 2px; +} + +.menu, +.menu ul { + font-size: 10pt; + list-style-type: none; +} + +.menu ul { + padding-left: 20px; +} + +.menu a { + font-size: 10px; + line-height: 18px; + text-decoration: none; + color: #444; + font-weight: bold; +} + +.docbarbutton.highlight +{ + background-color: #fef2bd; + border: 1px solid #CCC; + border-right: 0px; +} + +#docbarleft { position: absolute; left: 0; top: 0; height: 100%; + overflow: hidden; + background: url(/static/img/jun09/pad/padtop5.gif) no-repeat left -31px; width: 7px; } + + + +#docbarpadtitle { position: absolute; height: auto; left: 9px; + width: 280px; font-size: 1.6em; color: #444; font-weight: normal; + line-height: 22px; margin-left: 2px; height: 22px; top: 2px; + overflow: hidden; text-overflow: ellipsis /*not supported in FF*/; + white-space:nowrap; } +.docbar-public #docbarpadtitle { padding-left: 22px; + background: url(/static/img/jun09/pad/public.gif) no-repeat left center; } + +#docbarrenamelink { position: absolute; top: 6px; + font-size: 1.1em; display: none; } +#docbarrenamelink a { color: #999; } +#docbarrenamelink a:hover { color: #48d; } +#padtitlebuttons { position: absolute; width: 74px; zoom: 1; + height: 17px; top: 4px; left: 170px; display: none; + background: url(/static/img/jun09/pad/ok_or_cancel.gif) 0px 0px; } +#padtitlesave { position: absolute; display: block; + height: 0; padding-top: 17px; overflow: hidden; + width: 23px; left: 0; top: 0; } +#padtitlecancel { position: absolute; display: block; + height: 0; padding-top: 17px; overflow: hidden; + width: 35px; right: 0; top: 0; } +#padtitleedit { position: absolute; top: 2px; left: 5px; + height: 15px; padding: 2px; font-size: 1.4em; + background: white; border-left: 1px solid #c3c3c3; + border-top: 1px solid #c3c3c3; + border-right: 1px solid #e6e6e6; border-bottom: 1px solid #e6e6e6; + width: 150px; display: none; +} + +#padmain { + margin-top: 6px; + position: absolute; + top: 56px; + left: 0px; + right: 0px; + bottom: 0px; + zoom: 1; +} + +#padeditor { + bottom:0px; + left:0; + position:absolute; + right:300px; + top:0; + zoom: 1; +} +.hidesidebar #padeditor { right: 0; } + +#vdraggie { + background: url(/static/img/jun09/pad/vdraggie.gif) no-repeat top center; + cursor: W-resize; + bottom:0; + position:absolute; + right:268px; + top:0; + width:56px; + z-index: 10; +} + +#editbar { height: 36px; + background: #a5bfe2 url(/static/img/jun09/pad/editbar_background.gif) repeat-x; + height:36px; + left:0; + position:absolute; + right:0; + top:0; + color: #444444; +} + +#editbarinner { + overflow: hidden; +} + +#editbarleft { float: left; height: 100%; overflow: hidden; + background: url(/static/img/jun09/pad/editbar_background_left.gif) no-repeat left top; width: 2px; } +#editbarright { float: right; height: 100%; overflow: hidden; + background: url(/static/img/jun09/pad/editbar_background_right.gif) no-repeat right top; width: 2px; } + +#editbartable +{ + position:absolute; + top: 6px; + left: 7px; + width: 250px; + height: 24px; +} + +#editbarsavetable +{ + position:absolute; + top: 6px; + right: 29px; + height: 24px; +} + +#editbarsavetable td, #editbartable td +{ + white-space: nowrap; +} + +.editbarbutton +{ + border-top: 1px solid #8b9eba; + border-bottom: 1px solid #8b9eba; + border-left: 1px solid #758aa9; + background-color: white; + padding: 0px 2px; +} + +.editbarbutton img +{ + border: 0px; + width: 16px; + height: 16px; +} + +.editbarbutton a { + text-decoration: none; +} +.editbarbutton a:active +{ + position: relative; + top: 1px; + left: 1px; +} + +.editbargroupsfirst +{ + border-left-width: 0px !important; +} + +#editbar #syncstatussyncing { position: absolute; height: 26px; width: 26px; + background: url(/static/img/jun09/pad/syncing2.gif) no-repeat center center; + right: 38px; top: 5px; display: none; } +#editbar #syncstatusdone { position: absolute; height: 26px; width: 26px; + background: url(/static/img/jun09/pad/syncdone.gif) no-repeat center center; + right: 38px; top: 5px; display: none; } + +#editorcontainerbox { + border-left: 1px solid #c4c4c4; border-right: 1px solid #c4c4c4; + border-bottom: 1px solid #c4c4c4; + background: #fff; + bottom:0; + left:0; + overflow: hidden; + position: absolute; + right: 0; + top: 36px; + zoom: 1; + z-index: 11; +} + +#editorcontainer { height: 100%; } + +#editorcontainer iframe { width: 100%; height: 100%; padding: 0; margin: 0; } + +#editorloadingbox { padding-top: 100px; padding-bottom: 100px; font-size: 2.5em; color: #aaa; + text-align: center; position: absolute; width: 100%; height: 30px; z-index: 100; } + +#padsidebar { + bottom: 0px; + position: absolute; + right: 0; + top: 0; + width: 290px; + overflow: hidden; + z-index: 11; +} +.hidesidebar #padsidebar { width: 0; overflow: hidden; } + +#padsidebarfull { + border: 1px solid #c4c4c4; + background: #fafafa; + zoom: 1; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 8px; +} + +#padusers { + border: 1px solid #c4c4c4; + background: #fafafa; + zoom: 1; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 300px; +} +#myuser { + background: #d9e7f9; + padding: 5px; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 31px; +} +#otherusers { + overflow: auto; + position: absolute; + top: 41px; + left: 0; + right: 0; + bottom: 28px; +} +#userlistbuttonarea { + background: url(/static/img/jun09/pad/inviteshare2.gif) repeat-x 0 0; + position: absolute; + height: 28px; + left: 0; + right: 0; + bottom: 0; +} + +#hdraggie { + background: url(/static/img/jun09/pad/hdraggie.gif) repeat-x center top; + cursor: S-resize; + position: absolute; + top: 300px; + left: 0; + right: 0; + height: 10px; +} + +#padchat { + border: 1px solid #c4c4c4; + position: absolute; + top: 310px; + left: 0; + right: 0; + bottom: 0px; +} +#chatlines { + overflow: auto; + background: #fafafa; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 30px; +} +#chatbottom { + background: #ecf2fa; + padding: 4px; + position: absolute; + height: 22px; + left: 0; + right: 0; + bottom: 0px; +} + +#myswatchbox { position: absolute; left: 5px; top: 5px; width: 22px; height: 22px; + /*border-top: 1px solid #c3cfe0; border-left: 1px solid #c3cfe0; + border-right: 1px solid #ecf3fc; border-bottom: 1px solid #ecf3fc;*/ + border: 1px solid #bbb; + padding: 1px; background: transparent; cursor: pointer; } +#myuser .myswatchboxhoverable, #myuser .myswatchboxunhoverable { + background: white; +} +#myuser .myswatchboxhoverable:hover { + background: #bbb; +} +#myswatch { width: 100%; height: 100%; background: transparent;/*...initially*/ } +#mycolorpicker { + background: url(/static/img/jun09/pad/colorpicker.gif) no-repeat left top; + width: 232px; height: 140px; + position: absolute; + left: 13px; top: 13px; z-index: 101; + display: none;/*...initially*/ +} +#mycolorpicker .n1 { left: 13px; } +#mycolorpicker .n2 { left: 40px; } +#mycolorpicker .n3 { left: 67px; } +#mycolorpicker .n4 { left: 94px; } +#mycolorpicker .n5 { left: 121px; } +#mycolorpicker .n6 { left: 148px; } +#mycolorpicker .n7 { left: 175px; } +#mycolorpicker .n8 { left: 202px; } + +#mycolorpicker .n9 { left: 13px; top: 34px ! important;} +#mycolorpicker .n10 { left: 40px; top: 34px ! important;} +#mycolorpicker .n11 { left: 67px; top: 34px ! important;} +#mycolorpicker .n12 { left: 94px; top: 34px ! important;} +#mycolorpicker .n13 { left: 121px; top: 34px ! important;} +#mycolorpicker .n14 { left: 148px; top: 34px ! important;} +#mycolorpicker .n15 { left: 175px; top: 34px ! important;} +#mycolorpicker .n16 { left: 202px; top: 34px ! important;} + +#mycolorpicker .n17 { left: 13px; top: 56px ! important;} +#mycolorpicker .n18 { left: 40px; top: 56px ! important;} +#mycolorpicker .n19 { left: 67px; top: 56px ! important;} +#mycolorpicker .n20 { left: 94px; top: 56px ! important;} +#mycolorpicker .n21 { left: 121px; top: 56px ! important;} +#mycolorpicker .n22 { left: 148px; top: 56px ! important;} +#mycolorpicker .n23 { left: 175px; top: 56px ! important;} +#mycolorpicker .n24 { left: 202px; top: 56px ! important;} + +#mycolorpicker .n25 { left: 13px; top: 78px ! important;} +#mycolorpicker .n26 { left: 40px; top: 78px ! important;} +#mycolorpicker .n27 { left: 67px; top: 78px ! important;} +#mycolorpicker .n28 { left: 94px; top: 78px ! important;} +#mycolorpicker .n29 { left: 121px; top: 78px ! important;} +#mycolorpicker .n30 { left: 148px; top: 78px ! important;} +#mycolorpicker .n31 { left: 175px; top: 78px ! important;} +#mycolorpicker .n32 { left: 202px; top: 78px ! important;} + +#mycolorpicker .pickerswatchouter { + border: 1px solid white; + width: 15px; height: 15px; position: absolute; + top: 12px; +} +#mycolorpicker .pickerswatch { + border: 1px solid #999; + width: 13px; + height: 13px; + position: absolute; + left: 0; top: 0; +} +#mycolorpicker .picked { border: 1px solid #666 !important; } +#mycolorpicker .picked .pickerswatch { border: 1px solid #666; } +#mycolorpickersave { position: absolute; left: 14px; top: 102px; + width: 47px; height: 0; padding-top: 20px; overflow: hidden; + cursor: pointer; } +#mycolorpickercancel { position: absolute; left: 87px; top: 102px; + width: 44px; height: 0; padding-top: 20px; overflow: hidden; + cursor: pointer; } +#myusernameform { margin-left: 35px; } +#myusernameedit { font-size: 1.6em; color: #444; + padding: 3px; height: 18px; margin: 0; border: 0; + width: 197px; background: transparent; } +#myusernameform input.editable { border: 1px solid #bbb; } +#myuser .myusernameedithoverable:hover { background: white; } +#mystatusform { margin-left: 35px; margin-top: 5px; } +#mystatusedit { font-size: 1.2em; color: #777; + font-style: italic; display: none; + padding: 2px; height: 14px; margin: 0; border: 1px solid #bbb; + width: 199px; background: transparent; } +#myusernameform .editactive, #myusernameform .editempty { + background: white; border-left: 1px solid #c3c3c3; + border-top: 1px solid #c3c3c3; + border-right: 1px solid #e6e6e6; border-bottom: 1px solid #e6e6e6; +} +#myusernameform .editempty { color: #ef641e; } + +table#otheruserstable { display: none; } +#nootherusers { padding: 10px; font-size: 1.2em; color: #999; font-weight: bold;} +#nootherusers a { color: #48d; } + +#otheruserstable td { + border-bottom: 1px solid #e1e1e1; + height: 26px; + vertical-align: middle; + padding: 0 2px; +} + +#otheruserstable .swatch { + border: 1px solid #999; width: 13px; height: 13px; overflow: hidden; + margin: 0 4px; +} + +.usertdswatch { width: 1%; } +.usertdname { font-size: 1.3em; color: #444; } +.usertdstatus { font-size: 1.1em; font-style: italic; color: #999; } +.usertdactivity { font-size: 1.1em; color: #777; } + +.usertdname input { border: 1px solid #bbb; width: 80px; padding: 2px; } +.usertdname input.editactive, .usertdname input.editempty { + background: white; border-left: 1px solid #c3c3c3; + border-top: 1px solid #c3c3c3; + border-right: 1px solid #e6e6e6; border-bottom: 1px solid #e6e6e6; +} +.usertdname input.editempty { color: #888; font-style: italic;} + +#sharebutton { + background: url(/static/img/jun09/pad/inviteshare2.gif) no-repeat 0 -31px; + position: absolute; display: block; top: 3px; padding-top: 23px; + height: 0; overflow: hidden; width: 96px; + left:50%; + margin-left: -48px; +} + + /*#guestslabel { font-size: 1.2em; position: absolute; width: auto; + height: 22px; line-height: 22px; top: 4px; left: 8px; } +#guestsmenu { font-size: 1.2em; position: absolute; left: 100px; + top: 5px; width: 95px; } +.guestpolicystuff { display: none; }*/ + +.guestprompt { border: 1px solid #ccc; font-size: 1.2em; + padding: 5px; color: #222; background: #ffc; } +.guestprompt .choices { float: right; } +.guestprompt a { margin: 0 0.5em; } + +#chattop { background: #ecf2fa; padding: 5px; font-size: 1.2em; border-bottom: 1px solid #ddd; } +#chattop a { color: #36b; } +#chatlines .chatline { color: #444; padding-left: 5px; padding-top: 2px; padding-bottom: 2px; + background: #ddd; overflow: hidden; } +#chatlines .chatlinetime { display: block; font-size: 1em; color: #666; float: right; width: auto; + padding-right: 5px; } +#chatlines .chatlinename, #chatlines .chatlinetext { font-size: 1.2em; } +#chatlines h2 { margin: 0; padding-left: 5px; padding-top: 2px; padding-bottom: 2px; color: #999; font-style: italic; font-weight: bold; font-size: 1.2em; } +#chatprompt { font-size: 1.2em; color: #444; float: left; line-height: 22px; width: 35px; text-align: right; } +#chatentryform { margin-left: 40px; } +#chatentrybox { font-size: 1.2em; color: #444; + padding: 2px; height: 16px; margin: 0; border-left: 1px solid #c3c3c3; + border-top: 1px solid #c3c3c3; + border-right: 1px solid #e6e6e6; border-bottom: 1px solid #e6e6e6; + width: 230px; } +#padchat a#chatloadmore { display: none; font-size: 1.2em; padding: 2px 5px; font-style: italic; } +#padchat #chatloadingmore { display: none; font-size: 1.2em; padding: 2px 5px; font-style: italic; + color: #999; } +#padchat a#chatloadmore:focus { outline: 0; } + +#djs { font-family: monospace; font-size: 10pt; + height: 200px; overflow: auto; border: 1px solid #ccc; + background: #fee; margin: 0; padding: 6px; +} +#djs p { margin: 0; padding: 0; display: block; } + +.modaldialog.cboxreconnecting .modaldialog-inner, +.modaldialog.cboxconnecting .modaldialog-inner { + background: url(/static/img/jun09/pad/connectingbar.gif) no-repeat center 60px; + height: 100px; +} +.modaldialog.cboxreconnecting { + background: #fed; +} +.modaldialog.cboxconnecting, +.modaldialog.cboxdisconnected { + background: #fdd; +} +.cboxdisconnected #connectionboxinner div { display: none; } +.cboxdisconnected_userdup #connectionboxinner #disconnected_userdup { display: block; } +.cboxdisconnected_initsocketfail #connectionboxinner #disconnected_initsocketfail { display: block; } +.cboxdisconnected_looping #connectionboxinner #disconnected_looping { display: block; } +.cboxdisconnected_slowcommit #connectionboxinner #disconnected_slowcommit { display: block; } +.cboxdisconnected_unauth #connectionboxinner #disconnected_unauth { display: block; } +.cboxdisconnected_unknown #connectionboxinner #disconnected_unknown { display: block; } +.cboxdisconnected_initsocketfail #connectionboxinner #reconnect_advise, +.cboxdisconnected_looping #connectionboxinner #reconnect_advise, +.cboxdisconnected_slowcommit #connectionboxinner #reconnect_advise, +.cboxdisconnected_unknown #connectionboxinner #reconnect_advise { display: block; } +.cboxdisconnected div#reconnect_form { display: block; } +.cboxdisconnected .disconnected h2 { display: none; } +.cboxdisconnected .disconnected .h2_disconnect { display: block; } +.cboxdisconnected_userdup .disconnected h2.h2_disconnect { display: none; } +.cboxdisconnected_userdup .disconnected h2.h2_userdup { display: block; } +.cboxdisconnected_unauth .disconnected h2.h2_disconnect { display: none; } +.cboxdisconnected_unauth .disconnected h2.h2_unauth { display: block; } + +#connectionstatus { + position: absolute; width: 37px; height: 41px; overflow: hidden; + right: 0; + z-index: 11; +} +#connectionboxinner .connecting { + margin-top: 20px; + font-size: 2.0em; color: #555; + text-align: center; display: none; +} +.cboxconnecting #connectionboxinner .connecting { display: block; } + +#connectionboxinner .disconnected h2 { + font-size: 1.8em; color: #333; + text-align: left; + margin-top: 10px; margin-left: 10px; margin-right: 10px; + margin-bottom: 10px; +} +#connectionboxinner .disconnected p { + margin: 10px 10px; + font-size: 1.2em; + line-height: 1.1; + color: #333; +} +#connectionboxinner .disconnected { display: none; } +.cboxdisconnected #connectionboxinner .disconnected { display: block; } + +#connectionboxinner .reconnecting { + margin-top: 20px; + font-size: 1.6em; color: #555; + text-align: center; display: none; +} +.cboxreconnecting #connectionboxinner .reconnecting { display: block; } + +#reconnect_form button { + font-size: 12pt; +} + +/* We give docbar a higher z-index than its descendant impexp-wrapper in + order to allow the Import/Export panel to be on top of stuff lower + down on the page in IE. Strange but it works! */ +#docbar { z-index: 52; } + +#impexp-wrapper { width: 650px; right: 10px; } +#impexp-panel { height: 160px; } +.docbarimpexp-closing #impexp-wrapper { z-index: 50; } + +#savedrevs-wrapper { width: 100%; left: 0; } +#savedrevs-panel { height: 79px; } +.docbarsavedrevs-closing #savedrevs-wrapper { z-index: 50; } +#savedrevs-wrapper .dbpanel-rightedge { background-position: 0 -10px; } + +#options-wrapper { width: 340px; right: 200px; } +#options-panel { height: 114px; } +.docbaroptions-closing #options-wrapper { z-index: 50; } + +#security-wrapper { width: 320px; right: 300px; } +#security-panel { height: 130px; } +.docbarsecurity-closing #security-wrapper { z-index: 50; } + +#revision-notifier { position: absolute; right: 8px; top: 25px; + width: auto; height: auto; font-size: 1.2em; background: #ffc; + border: 1px solid #aaa; color: #444; padding: 3px 5px; + display: none; z-index: 55; } +#revision-notifier .label { color: #777; font-weight: bold; } + +/* We don't ever actually hide the wrapper, even when the panel is + cloased, so that its contents can always be manipulated accurately. */ +.dbpanel-wrapper { position: absolute; + overflow: hidden; /* animated: */ height: 0; top: 25px; /* /animated */ + z-index: 51; zoom: 1; } +.dbpanel-panel { position: absolute; bottom: 0; width: 100%; } + +.dbpanel-middle { margin-left: 7px; margin-right: 7px; + position: relative; height: 100%; overflow: hidden; zoom: 1; } +.dbpanel-inner { background: #f7f7f7 /* covered up by images */; + width: 100%; height: 100%; position: absolute; overflow: hidden; top: -10px; } + +.dbpanel-top { position: absolute; top: 0; width: 100%; + height: 400px; background-image: url(/static/img/jun09/pad/docpanelmiddle2.png); + background-position: left top; } + +.dbpanel-bottom { position: absolute; height: 400px; + bottom: -390px; width: 100%; + background-image: url(/static/img/jun09/pad/docpanelmiddle2.png); + background-position: left top; +} + +* html .dbpanel-top, * html .dbpanel-bottom { /* for IE 6+ */ + background-color: transparent; + background-image: url(/static/img/apr09/blank.gif); + /* scale the image instead of repeating, but it amounts to the same */ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="/static/img/jun09/pad/docpanelmiddle2.png", sizingMethod="scale"); +} + +.dbpanel-leftedge, .dbpanel-rightedge, .dbpanel-botleftcorner, .dbpanel-botrightcorner { + position: absolute; + background-repeat: no-repeat; + background-color: transparent; + background-image: url(/static/img/jun09/pad/docpaneledge2.png); +} + +.dbpanel-leftedge, .dbpanel-rightedge { height: 100%; width: 7px; bottom: 11px; } +.dbpanel-botleftcorner, .dbpanel-botrightcorner { height: 11px; width: 7px; bottom: 0; } + +.dbpanel-leftedge, .dbpanel-botleftcorner { left: 0; background-position: -7px 0; } +.dbpanel-rightedge, .dbpanel-botrightcorner { right: 0; background-position: 0 0; } + +#importexport { position: absolute; top: 5px; left: 0; font-size: 1.2em; color: #444; + height: 100%; width: 100%; } + +* html .dbpanel-leftedge, * html .dbpanel-rightedge, * html .dbpanel-botleftcorner, * html .dbpanel-botrightcorner { + background-color: transparent; + background-image: url(/static/img/apr09/blank.gif); + /* crop the image */ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="/static/img/jun09/pad/docpaneledge2.png", sizingMethod="crop"); +} +* html .dbpanel-leftedge, * html .dbpanel-botleftcorner { left: -7px; width: 14px; } + +#impexp-importlabel { position: absolute; top: 5px; left: 10px; width: 300px; } + +#importform { position: absolute; top: 24px; left: 5px; width: 300px; height: 60px; } +#importformsubmitdiv, #importformfilediv { padding: 5px 5px; } +#importexport .importformenabled { + background: #cfc; + border: 1px solid #292; +} +#importexport span.nowrap { white-space: nowrap; } +#importexport #importstatusball { margin-left: 3px; padding-top: 1px; display: none; } +#importexport #importarrow { margin-left: 5px; padding-top: 1px; display: none; } +#importexport .importmessage { border: 1px solid #992; + background: #ffc; padding: 5px; font-size: 85%; display: none; } +#importexport #importmessagefail { margin-top: 5px; } +#importexport #importmessagesuccess { margin: 0 20px; } +#importexport a.disabledexport { + color: #333; text-decoration: none; + opacity: 0.5; filter: alpha(opacity = 50) /*IE*/; +} +#importexport #importfileinput { padding: 2px 0; } +#importexport #importsubmitinput { padding: 2px; } + +#impexp-divider { position: absolute; left: 320px; top: 5px; height: 135px; width: 2px; + background: #ddd; } +#impexp-close { display: block; position: absolute; right: 2px; bottom: 15px; + width: auto; height: auto; font-size: 85%; color: #444; + z-index: 61 /* > clickcatcher */} +#impexp-disabled-clickcatcher { + display: none; + position: absolute; width: 100%; height: 100%; + z-index: 60; +} + +#impexp-exportlabel { position: absolute; top: 5px; left: 350px; + width: 300px; } +#exportlinks .exportlink { + display: block; position: absolute; height: 22px; width: auto; + background-repeat: no-repeat; + background-image: url(/static/img/jun09/pad/fileicons.gif); + line-height: 22px; padding-left: 22px; padding-right: 2px; +} +#exportlinks .n1 { left: 350px; top: 30px; } +#exportlinks .n2 { left: 350px; top: 57px; } +#exportlinks .n3 { left: 350px; top: 84px; } +#exportlinks .n4 { left: 485px; top: 30px; } +#exportlinks .n5 { left: 485px; top: 57px; } +#exportlinks .n6 { left: 485px; top: 84px; } +#exportlinks .exporthrefdoc { background-position: 2px -1px; } +#exportlinks .exporthrefhtml { background-position: 2px -25px; } +#exportlinks .exporthreflink { background-position: 2px -49px; } +#exportlinks .exporthrefodt { background-position: 2px -73px; } +#exportlinks .exporthrefpdf { background-position: 2px -97px; } +#exportlinks .exporthreftxt { background-position: 2px -121px; } + +#savedrevisions { position: absolute; top: 0; left: 0; font-size: 1.2em; + color: #444; height: 100%; width: 100%; } +#savedrevs-scrolly { height: 75px; width: auto; margin-right: 136px; + overflow: hidden; position: relative; top: 1px; +} +#savedrevs-scrollleft { height: 100%; width: 14px; position: absolute; + left: 0; top: 0; cursor: pointer; + background: url(/static/img/jun09/pad/savedrevarrows.gif) no-repeat right top; +} +#savedrevs-scrollright { height: 100%; width: 14px; position: absolute; + right: 0; top: 0; cursor: pointer; + background: url(/static/img/jun09/pad/savedrevarrows.gif) no-repeat left top; +} +#savedrevs-scrolly .disabledscrollleft { background-position: right bottom; } +#savedrevs-scrolly .disabledscrollright { background-position: left bottom; } +#savedrevs-scrollouter { margin-left: 14px; margin-right: 14px; + width: auto; height: 100%; overflow: hidden; position: relative; +} +#savedrevs-scrollinner { position: absolute; width: 1px; height: 100%; + overflow: visible; right: 0/*...initially*/; top: 0; } +#savedrevisions .srouterbox { width: 120px; height: 100%; + position: absolute; top: 0; +} +#savedrevisions .srinnerbox { position: relative; top: 8px; + height: 59px; width: auto; border-left: 1px solid #ddd; + padding: 0 8px 0 8px; } +#savedrevisions a.srname { display: block; white-space: nowrap; + text-overflow: ellipsis /*no FF support*/; overflow: hidden; + text-decoration: none; color: #444; cursor: text; + padding: 1px; height: 14px; position: relative; left: -1px; + width: 100px /*specify for proper overflow in IE*/; +} +#savedrevisions a.srname:hover { text-decoration: none; color: #444; + border: 1px solid #ccc; padding: 0; } +#savedrevisions .sractions { font-size: 85%; color: #ccc; + margin-top: 1px; height: 12px; } +#savedrevisions .sractions a { text-decoration: none; + color: #06c; } +#savedrevisions .sractions a:hover { text-decoration: underline; } +#savedrevisions .srtime { color: #666; font-size: 90%; + white-space: nowrap; margin-top: 3px; } +#savedrevisions .srauthor { color: #666; font-size: 90%; + white-space: nowrap; overflow: hidden; text-overflow: ellipsis /*no FF*/; +} +#savedrevisions .srtwirly { position: absolute; display: block; + bottom: 0; right: 10px; display: none; } +#savedrevisions .srnameedit { + position: absolute; +} +#savedrevs-savenow { display: block; position: absolute; + overflow: hidden; height: 0; padding-top: 24px; width: 81px; + top: 22px; right: 27px; + background: url(/static/img/jun09/pad/savedrevsgfx2.gif) no-repeat 0 0; +} +#savedrevs-savenow:active { background-position: 0 -24px; } +#savedrevs-close { display: block; position: absolute; right: 7px; bottom: 8px; + width: auto; height: auto; font-size: 85%; color: #444; } +form#reconnectform { display: none; } + +#padoptions { position: absolute; top: 0; left: 0; font-size: 1.2em; + color: #444; height: 100%; width: 100%; line-height: 15px; } +#options-viewhead { font-weight: bold; position: absolute; top: 10px; left: 15px; + width: auto; height: auto; } +#padoptions label { display: block; } +#padoptions input { padding: 0; margin: 0; } +#options-colorscheck { position: absolute; left: 15px; top: 34px; width: 15px; height: 15px; } +#options-colorslabel { position: absolute; left: 35px; top: 34px; } +#options-linenoscheck { position: absolute; left: 15px; top: 57px; width: 15px; height: 15px; } +#options-linenoslabel { position: absolute; left: 35px; top: 57px; } +#options-fontlabel { position: absolute; left: 15px; top: 82px; } +#viewfontmenu { position: absolute; top: 80px; left: 90px; width: 110px; } +#options-viewexplain { position: absolute; left: 215px; top: 15px; width: 100px; height: 70px; font-size: .7em; + padding-left: 10px; padding-top: 10px; border-left: 1px solid #ccc; + line-height: 20px; font-weight: bold; color: #999; } +#options-close { display: block; position: absolute; right: 7px; bottom: 8px; + width: auto; height: auto; font-size: 85%; color: #444; } + +#padsecurity { position: absolute; top: 0; left: 0; font-size: 1.1em; + color: #444; height: 100%; width: 100%; line-height: 15px; } +#security-close { display: block; position: absolute; right: 7px; bottom: 8px; + width: auto; height: auto; font-size: 85%; color: #444; } +#security-passhead { font-weight: bold; position: absolute; top: 90px; left: 15px; + width: auto; height: auto; } +#security-passbody { position: absolute; left: 75px; top: 90px; } +#security-passwordedit { height: 15px; border: 1px solid #bbb; + position: absolute; top: 0; left: 15px; width: 120px; } +#security-password a { text-decoration: none; display: block; + width: auto; height: auto; } +#password-savelink, #password-cancellink {position: absolute; top: 0; } +#security-password a:hover { text-decoration: underline; } +#password-savelink { left: 144px; color: #06c; } +#password-cancellink { left: 180px; color: #666; } +#password-nonedit { left: 15px; position: absolute; + width: 220px; top: 0; } +#password-setlink { color: #06c; } +#password-clearlink { color: #06c; } +#password-display { height: 15px; width: auto; } +#password-inedit { display: none; } +#password-display, #password-setlink, #password-clearlink { + float: left; margin-right: 10px; +} +#password-display { font-size: 18px; } +#security-password .nopassword #password-display { font-size: 100%; } +#security-password .nopassword #password-clearlink { display: none; } +#security-password .nopassword #password-setlink { left: 60px; } + +#security-access { position: absolute; left: 15px; width: 200px; } +#security-accesshead { font-weight: bold; position: absolute; top: 10px; + left: 0; width: auto; height: auto; } +#security-access input, #security-access label { position: absolute; } +#security-access input { left: 10px; } +#security-access label { left: 30px; width: 250px; } +#access-private, #access-private-label { top: 35px; } +#access-public, #access-public-label { top: 60px; } +#security-access label { color: #999; } +#security-access label strong { font-weight: normal; padding-right: 10px; + color: #444; } + +#mainmodals { z-index: 600; /* higher than the modals themselves + so that modals are on top in IE */ } + +.modalfield { font-size: 1.2em; padding: 1px; border: 1px solid #bbb;} +#mainmodals .editempty { color: #aaa; } + + +#feedbackbox { + position: absolute; display: none; + width: 400px; height: 270px; + left: 100px/*set in code*/; bottom: 50px; + z-index: 501; zoom: 1; +} +#feedbackbox-tl, #feedbackbox-tr, #feedbackbox-bl, #feedbackbox-br, +#feedbackbox-hide, #feedbackbox-send, #feedbackbox-back { + position: absolute; display: block; + background-repeat: no-repeat; + background-image: url(/static/img/jun09/pad/feedbackbox2.gif); +} +#feedbackbox-tl { width: 392px; + height: 262px; left: 0; top: 0; + background-position: left top; } +#feedbackbox-tr { width: 8px; height: 262px; + right: 0; top: 0; background-position: right top; } +#feedbackbox-bl { width: 392px; + height: 8px; left: 0; bottom: 0; + background-position: left bottom; } +#feedbackbox-br { width: 8px; height: 8px; bottom: 0; right: 0; + background-position: right bottom; } +#feedbackbox-hide { width: 22px; height: 22px; right: 9px; top: 7px; + background-position: -569px -6px; +} +#feedbackbox-back { width: 384px; + height: 254px; left: 8px; top: 8px; + background-position: -8px -8px; + background-color: white; } +#feedbackbox-contents { width: 384px; + height: 254px; left: 8px; top: 8px; + position: absolute; font-size: 1.4em; color: #444; } +#feedbackbox-contentsinner { padding: 10px; } +#feedbackbox-send { width: 50px; height: 22px; right: 15px; bottom: 15px; + background-position: -535px -363px; +} +#feedbackbox-email { left: 90px; top: 48px; width: 356px; height: auto; } +#feedbackbox-message { left: 90px; top: 84px; width: 358px; height: 100px; } +#feedbackbox-response { position: absolute; bottom: 15px; left: 15px; + width: 390px; height: auto; font-size: 1.2em; display: none; } +#feedbackbox .goodresponse { font-weight: bold; color: green; } +#feedbackbox .badresponse { font-weight: bold; color: red; } +#feedbackbox p { margin-bottom: 1em; } +#feedbackbox ul { margin: 1em 0 1em 2em } +#feedbackbox li { padding: 0.3em 0; } +#feedbackbox li a { display: block; font-weight: bold; } +#feedbackbox li a:hover { background: #ffe; } +#feedbackbox a, #feedbackbox li a:visited { color: #47b; } +#feedbackbox tt { font-size: 110%; } + +.expand-collapse { + height: 22px; + background-image: url(/static/img/jun09/pad/sharedistri.gif); + background-repeat: no-repeat; + background-position: 0 3px; + padding-left: 17px; + text-decoration: none; +} +.expand-collapse.expanded { + background-position: 0 -31px; +} + + +.modaldialog { + position: absolute; + top: 100px; + left:50%; + margin-left:-243px; + width: 485px; + display: none; + z-index: 501; + zoom: 1; + overflow: hidden; + background: white; + border: 1px solid #999; +} +.modaldialog .modaldialog-inner { padding: 10pt; } +.modaldialog .modaldialog-inner * { margin: 2pt; } +.modaldialog .modaldialog-hide { + float: right; + background-repeat: no-repeat; + background-image: url(/static/img/jun09/pad/sharebox4.gif); + display: block; + width: 22px; height: 22px; + background-position: -454px -6px; + margin-right:-5px; + margin-top:-5px; +} + +.modaldialog label, +.modaldialog h1 { + color:#222222; + font-size:125%; + font-weight:bold; +} + +.modaldialog th { + vertical-align: top; + text-align: left; +} + +.nonprouser #sharebox-stripe { display: none; } + +.sharebox-url { + width: 440px; height: 18px; + text-align: left; + font-size: 1.3em; + line-height: 18px; + padding: 2px; +} + +#sharebox-send { + float: right; + background-repeat: no-repeat; + background-image: url(/static/img/jun09/pad/sharebox4.gif); + display: block; + width: 87px; height: 22px; + background-position: -383px -289px; +} + + +#viewbarcontents { display: none; } +#viewzoomtitle { + position: absolute; left: 10px; top: 4px; height: 20px; line-height: 20px; + width: auto; +} +#viewzoommenu { + width: 65px; +} +#bottomarea { + height: 28px; + overflow: hidden; + position: absolute; + height: 28px; + bottom: 0px; + left: 0px; + right: 0px; + font-size: 1.2em; + color: #444; +} +#widthprefcheck { position: absolute; + background-image: url(/static/img/jun09/pad/layoutbuttons.gif); + background-repeat: no-repeat; cursor: pointer; + width: 86px; height: 20px; top: 4px; right: 2px; } +.widthprefunchecked { background-position: -1px -1px; } +.widthprefchecked { background-position: -1px -23px; } +#sidebarcheck { position: absolute; + background-image: url(/static/img/jun09/pad/layoutbuttons.gif); + background-repeat: no-repeat; cursor: pointer; + width: 86px; height: 20px; top: 4px; right: 90px; } +.sidebarunchecked { background-position: -1px -45px; } +.sidebarchecked { background-position: -1px -67px; } +#feedbackbutton { display: block; position: absolute; width: 68px; + height: 0; padding-top: 17px; overflow: hidden; + background: url(/static/img/jun09/pad/bottomareagfx.gif); + top: 5px; right: 220px; +} + +#modaloverlay { + z-index: 500; display: none; + background-image: url(/static/img/jun09/pad/overlay2.png); + background-repeat: repeat-both; + width: 100%; position: absolute; + height: 100%; left: 0; top: 0; +} + +* html #modaloverlay { /* for IE 6+ */ + opacity: 1; /* in case this is looked at */ + background-image: none; + background-repeat: no-repeat; + /* scale the image */ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="/static/img/jun09/pad/overlay2.png", sizingMethod="scale"); +} + +a#topbarmaximize { + float: right; + width: 16px; + height: 16px; + margin-right:-143px; + margin-top:4px; + background: url(/static/img/jun09/pad/maximize_normal.png); +} + +.maximized a#topbarmaximize { + background: url(/static/img/jun09/pad/maximize_maximized.png); +} + +#editbarinner h1 { + line-height: 29px; + font-size: 16px; + padding-left: 6pt; + margin-top: 0; +} + +#editbarinner h1 a { + font-size: 12px; +} + +.bigbutton { + display: block; + background-color: #a3bde0; + color: #555555; + border-style: solid; + border-width: 2px; + border-left-color: #d6e2f1; + border-right-color: #86aee1; + border-top-color: #d6e2f1; + border-bottom-color: #86aee1; + margin: 10pt; + text-align: center; + text-decoration: none; + padding: 50pt; + font-size: 20pt; + -moz-border-radius-topleft: 3pt; + -moz-border-radius-topright: 3pt; + -moz-border-radius-bottomleft: 3pt; + -moz-border-radius-bottomright: 3pt; + -webkit-border-top-left-radius: 3pt; + -webkit-border-top-right-radius: 3pt; + -webkit-border-bottom-left-radius: 3pt; + -webkit-border-bottom-right-radius: 3pt; +} + +.modaldialog .bigbutton { + padding-left: 0; + padding-right: 0; + width: 100%; +} diff --git a/static/css/syntax.css b/static/css/syntax.css new file mode 100644 index 000000000..e018320ef --- /dev/null +++ b/static/css/syntax.css @@ -0,0 +1,32 @@ +/* ---------- Used by JavaScript Lexer ---------- */ +.syntax .c { color: #bd3f00; font-style: italic } /* Comment */ +.syntax .o { font-weight: bold; } /* Operator */ +.syntax .p { font-weight: bold; } /* Punctuation */ +.syntax .k { color: blue; } /* Keyword */ +.syntax .kc { color: purple } /* Keyword.Constant */ +.syntax .nx { } /* Name.Other */ +.syntax .mf { color: purple } /* Literal.Number.Float */ +.syntax .mh { color: purple } /* Literal.Number.Hex */ +.syntax .mi { color: purple } /* Literal.Number.Integer */ +.syntax .sr { color: purple } /* Literal.String.Regex */ +.syntax .s2 { color: purple } /* Literal.String.Double */ +.syntax .s1 { color: purple } /* Literal.String.Single */ +.syntax .sd { color: purple } /* Literal.String.Doc */ +.syntax .cs { color: #00aa33; font-weight: bold; font-style: italic } /* Comment.Special */ +.syntax .err { color: #cc0000; font-weight: bold; text-decoration: underline; } /* Error */ + +/* css */ +.syntax .nt { font-weight: bold; } /* tag */ +.syntax .nc { color: #336; } /* class */ +.syntax .nf { color: #336; } /* id */ +.syntax .nd { color: #999; } /* :foo */ +.syntax .m { color: purple } /* number */ +.syntax .nb { color: purple } /* built-in */ +.syntax .cp { color: #bd3f00; } /* !important */ + +.syntax .flash { background-color: #adf !important; } +.syntax .flashbad { background-color: #f55 !important; } + +/*.syntax .test { background-color: #0f0; }*/ +/*.syntax .test { background: url(http://dl.getdropbox.com/u/88/blackvert.gif) + repeat-y left top; }*/ diff --git a/static/img/jun09/pad/backgrad.gif b/static/img/jun09/pad/backgrad.gif new file mode 100644 index 0000000000000000000000000000000000000000..8fee1a5b721cb0c0b0814d75dcc6798d373556dc GIT binary patch literal 697 zcmcJKTTfB}0Dw-FmOdbiu{ za=9E1hsWaqLC|0@Xti1dL2Nc#AQ15T{SXAn)K7z%}yN+s|gIJOb{ubQ##?I&RO z7OtrxHzTP9?0+ENUqe<8J;bwavdzPfq2$U*C#SODR1Z=Xz6;-%po^mCg=}khz3n9u zj&4;|*N|$T0`;$6H#9aiziDZ0t510QuCuHA{fEv&ePjytBaPnwX<)E#2ZK4x8ewy| zUwC{*oKPellSs$KNmJ8bWi#Kt&w_Hr)GkmI{K;}Ig z$feJ=9L;W+0jd4+jx++J=t(;X>N-=Z=*{B|z&%;T$IWuyAY!E8NUMAte@H{m?MN?H z@IMo1@icrNUcfLg346=z3IWr^zAbA=&c9w>$1Bq@ilI@KRak+MAK`=}c1dLt<8 literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/colorpicker.gif b/static/img/jun09/pad/colorpicker.gif new file mode 100644 index 0000000000000000000000000000000000000000..effa3cc01e88dad1234c539b9b14a581cffa3d89 GIT binary patch literal 2020 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 CiWsQ? literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/docbarstates.png b/static/img/jun09/pad/docbarstates.png new file mode 100644 index 000000000..a489b87e2 --- /dev/null +++ b/static/img/jun09/pad/docbarstates.png @@ -0,0 +1,1077 @@ + + + + + + + + + + + + + docbarstates.png - + etherpad - + + Project Hosting on Google Code + + + + + + + + + + + + + + + + + + + +
+
+ + + + My favorites + | Sign in + + + +
+
+
+ + +
+ + + + + + + + + + + + +
+ +
+ etherpad +
+ + +
+ +
+ + +
+ +
+ +
+ + +
+ Project Home + + + + + + + Wiki + + + + + + + + Source + + + +
+
+ + + + + + + + + + + + + + +
+
+
+ +
+ + Repository: + +
+ + + + Checkout   + Browse   + Changes   + Clones   +
+ +   + + + +
+
+
+ +
+ + + +
+ + + + + + + +
+
+ + + + + + + + + + + +
+ + +

+ + This file is not plain text (only UTF-8 and Latin-1 + text encodings are currently supported). + +

+ + +
+ +
+ +
+
+
+
+
+
+

Change log

+
+ 81287c8af1 + by Aaron Iba <aaroniba> + on Dec 17, 2009 +   Diff +
+
removed duplicate trunk directory
+
+ + + + + + + + + + +
+
Go to:  + +
+ + + + + + +
+ Project members, + sign in to write a code review
+ + + +
+ + +
+
+
+
+
+
+
+
+
+
+
+

Older revisions

+ + +
+ + + a9f8774a2e + by Aaron Iba <aaroniba> + on Dec 17, 2009 +   Diff +
+
initial code push
+
+ + + All revisions of this file +
+
+
+
+
+
+
+
+
+
+
+
+

File info

+ +
Size: 3314 bytes
+ + +
+ +
+
+
+
+
+
+
+ + +
+ +
+
+ + + + + + + + + + + + + + +
+ +
+ Powered by Google Project Hosting +
+ + + + + + + + diff --git a/static/img/jun09/pad/docpaneledge2.png b/static/img/jun09/pad/docpaneledge2.png new file mode 100644 index 0000000000000000000000000000000000000000..c119c74f3433e67f82423cfd1e18ffd8a693c979 GIT binary patch literal 635 zcmeAS@N?(olHy`uVBq!ia0vp^d<+bX6FAs_ta-tKVL*zrz$3Dlfq`2Xgc%uT&5-~K zDkOUZ`7$u%nKCexnlmtb+s?qyuEoHRo5{fNVle}Q5fcN0#ANZ_OTi2bOpKl`jv*Dd z-dr}!znma&?BoC0H(ZW{E#YEe4xY}(>ESU`gW1`hJ-)GVrMFQ@QqrqqC!Q+^Ikg0z`r_Ef_YEsdfl3CAtjas)%&n2t1DD4txp?|${S)z;IOtqc^t{8FSLZhiRoS#0$Z z_2Oc#jWb2l!bDs@zBcd_+N5KBe$yKp&q+})V*Q^~o_qTAX_<-CUWSaVQR{ELEj#@E zZ`F>QIT35abi}yNojd2p-h9xyp}D#FvI57vw{PDHvM|p3K6i&k*P51a&q*~h{m0k0 zAAZQLpm%;xZBfyu7au-+$dqXNZhL+=>w|{&)JDc=1@^E5&yDKEIT-fu5e~0?mBlW0 zAp8OMgsDGQ8{KD`C0cS|?xqE=roCIBmB(OSzU$u)_XolTjB($7|J}Yj%V?$z<2>ft z2XUpdx82Oi*&7!vbKGqHdEKr>$;OAzbS!#NVK*Nrv@LG^+EwM5vt||ZJ(uZqYqmK* z^K2SxL5Nw+<+o+C_r2eIH*Y0h$@T4vZ{}=@(c8IWM+N_e{rms#xcsu9_RF4Kmb`}r z9xyscv|Ty7`upaW<>yN4s;$qg`Sw#jCdHBJ;NX9`I%x()feXPlsnVLjgu~$J>gTe~ HDWM4f^Y8`1 literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/docpanelmiddle2.png b/static/img/jun09/pad/docpanelmiddle2.png new file mode 100644 index 0000000000000000000000000000000000000000..d251c23932d4008589cb32013a8acb1961e4d5f6 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^A`A?S6FAs_tabMt%7GMTfk$L90|U1(2s1Lwnj--e zR7my+@?~JiGi6{XHD_S>ww-~YU5kMsHVUaM9j} zi}yZUvhU&2{g0OIf3*C-;}r)VuRQp8)uG3$4?kXW`0?5!Pu3oNvhL`U>yJN`cCAE1 zivI+ii&7IyQd1PlGfOfQ+&z5*7!-f9Fmf@-Gw3h?0mvZ?tg;Fd5}%|-in{s+i8%H@ WHaW9MgR@A&&5?)MkwJio!5RQQ#91r= literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/editbar_background_left.gif b/static/img/jun09/pad/editbar_background_left.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe8d06ec43c8573340c4237dfb89a65dd76bd47b GIT binary patch literal 204 zcmZ?wbhEHbWMWWdXpv@UTmN|0j{CEB+@AwPJMYikd4Jxn2lIhw_k#tyA1>VUaM9j} zi}yZUvhU&2{g0OIf3*C-;}r)VuRQp8)uG3$4?kXW`0?5!Pu3oNvhL`U>yJOZe*L<% zYb7#L{3qyKl$uzQnxasiS(2gP?&%xAp!k!8k&8i|L5BedKn`JGHCe#MAlWeU1#5(M w0HX+xPXmjKIRhjAgC7lS4U7>CBJK`M4Gc02Y#Iv~6d2gT8yEy6dYu@o0mOG*?f?J) literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/editbar_background_right.gif b/static/img/jun09/pad/editbar_background_right.gif new file mode 100644 index 0000000000000000000000000000000000000000..55ab00a6b22049936120abae0f65fdc4f7852647 GIT binary patch literal 867 zcmWmDNl#)20Kjq5Q*ZqMP1Do#)U?+&O=fO0?Wt*8lAcW6ml!2$SPJ%*pq>-F;lg4JrBoSYmVA7`;x91ds4k=+2(N_$pl zg2m>v%$D6Wr}_ISsWr1@Nh_c%Z$Bjj;a?XO41sBIa1g_=cDvnbwSvK5AP~5_y9*}E z$H&L9SghG>*6Vc?MIRm>qS5Ht*;zOoetLQeg+jGj&Fl4^pPyGMm5Ymu$H&Lh)6+(y zaesdwi9}9LPB2W|+1c6O-=9b%R#sM)mX_8s^=h@+)zuY`$1$IvX!3f+Z>&5+O-6D3Q)G|bbA9cZ0(*e&yhpHlT(q}wkQB=Xd@a+RBQJ- zYv^yWo+WoJZ-CIDt5UsFnf%dsQuJToZN6ym=FobBBeRoPTH(Jw$e&;cKnvt3mfoo? zkqw<+p!L#dG`7OMDuv$2pmMnkf*__)2$4p)RI=G@VzJm@Fw6r0(|>7aFfhMAU9P24 zDT+jk!EipGSMhk6Oa?&^E|;55r|0J8ip3(I&;N}=qiN0SZ1(Kz?83sr+S(dGAi!?- z&HDf%5uHxQWG&nyny@odtB=?Wxm`4&DEN>9fcpMR?;V}pDHe>=Q*SORU-`JdtUwi oY4hjG0wjFSZhz6J!5Zod^4G0_N(}0G!EKiw#CgroF$MSC|BV$>kN^Mx literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/editbar_bold.gif b/static/img/jun09/pad/editbar_bold.gif new file mode 100644 index 0000000000000000000000000000000000000000..d22bcafbb1f39254ac2152c29566149c8ba2839a GIT binary patch literal 224 zcmZ?wbhEHb6krfwXc1#bOG_&#C}?eM?dj?1>+9?9@1Hqy=IYg}*Q{BycJ11&TeoiC zzWw0AgNF_sx_0f_ty{Oge*OCW`}beJe*OOa`|sbs|NsAIzzY=r2|5?0CYGe8D3oWG zWGJ|M`UWs4{$yd~VvuLh0ciy}gn`u~LA5U>bDsLbbu3Lx1w8B-jNua)wU_hyOlHZs zcw3fIXcyED7Rk^~`6)iPEWrT&?j4JVq~xe0N71Y A`v3p{ literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/editbar_clearauthorship.gif b/static/img/jun09/pad/editbar_clearauthorship.gif new file mode 100644 index 0000000000000000000000000000000000000000..2c6d1098b17c5d1160caf7372cd4403fc348d4c2 GIT binary patch literal 397 zcmZ?wbhEHb6krfwSZcwLmX?;CUjPJEB_*vTB~=v_RaKQ$RaLE3Rb>q=K+xJ+)z{b8 z-`~~W-#>HmgYEo#}Yw`0@3P3zZh-MaPv;>FvyZ{NLZ*Z-9( z4;||6KXdos!Gnhm9eQx$#O2GEXFU3L<;s=U7cR_y^5g%RGgoik0fPTmuKa)S;Omno zZ{ECl`2O?zH*davo&WLU$FE-r>4Aqy{Mp*3Zu}PbsN?*syItAXzbh| g$0_BduuX2goDic&un2>nlps@3u#4MyPe%r805V+UC8%`lzm+cHM T4_)TwRcH`&kl^YPV6X-N6hKo8 literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/editbar_indent.gif b/static/img/jun09/pad/editbar_indent.gif new file mode 100644 index 0000000000000000000000000000000000000000..989523acfdf2019fc2edcb8d34e401155abf6817 GIT binary patch literal 99 zcmZ?wbhEHb6krfwSjfbXmX`Ma|Nqjil|ZEUPtdt2HL)Z$MWH;iBtya7(>H)Y@h1x- z7XuT64g(N?G%+yA_w=tk-OI4JXI+!Y$F*(WYCPtMcSv2&RFU#~ckGxuBZD;ne;Fb_ literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/editbar_insertunorderedlist.gif b/static/img/jun09/pad/editbar_insertunorderedlist.gif new file mode 100644 index 0000000000000000000000000000000000000000..b032d59361515704ad9758b404e424b8961d5249 GIT binary patch literal 147 zcmZ?wbhEHb6krfwc+A0&mX=mgQBhf0dF|S@n>TOXzJ2@d-Mjz)|1a%Yi4`gS6Lc<0 zO)N=GQ7F$W$xv|j^bKH8{K>+|#lXR!!vF*zgBe(~Kb-Jfy?0AXQ#L~*OHT@?MAOB! fIo5)V59=N#-dpkN-5wK`W=W3{?Wa}iI2fz}F=;-F literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/editbar_italic.gif b/static/img/jun09/pad/editbar_italic.gif new file mode 100644 index 0000000000000000000000000000000000000000..a0174026c0f429001f71030949085ec51ea70389 GIT binary patch literal 201 zcmZ?wbhEHb6krfwXc1vZOG_&#C}?eM?d$8CF=NKenKKtHTC{la;;mb^Zr{Fr@7}!! z4jedm@Zhmy$8O!ab?45V`}gmE{rdICk01a4|7RcqDEKD>eJPpqG%VM6Yk9F3IINq&@YRB2r^a`FhQ;j+E>$fK X`9d0Bq!^t27*|+LyOE>C!e9*mb-zd` literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/editbar_outdent.gif b/static/img/jun09/pad/editbar_outdent.gif new file mode 100644 index 0000000000000000000000000000000000000000..4b9bf3897b1b4d1222e7d1b008c72b3fe92a4b3f GIT binary patch literal 99 zcmZ?wbhEHb6krfwSjfbXmX`Ma|Nqjil|ZEUPtdt2HL)Z$MWH;iBtya7(>H)Y@h1x- z7XuT64g(N?G%+yA_w=tkJ(po|&pIY!@ii6gm9j$LD;JARN^~=NaQm1CBZD;nTq7XW literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/editbar_redo.gif b/static/img/jun09/pad/editbar_redo.gif new file mode 100644 index 0000000000000000000000000000000000000000..826a254711fe8fe66702cf3059ead717422f6eca GIT binary patch literal 232 zcmZ?wbhEHb6krfwXpvz^OH0eo&o3`8uc)Y~tgLKoY;0<3>g??7?(XjC>6tQR%Dj2= zmMvSheEISfD^_gUv}yOQUAuSh-m_=Vp+kp`96568)TuLP&Rn{5>Bfy4H*em2`}Xbs z|Nl$7R>G0uKSAfB)Wnk16ovB4k_-iRPu~Cr#h)yUTnzFIIt)MnatH%!zyr0ul+1ZA z*c5Y&cd3XnxFs)!f|N($dn}+S=RO+t=6E-`_uN+O(N7XD(d0 zaPi{BYuB#bx^?TeZQFM2*s*{A{(}b(9y@mI)TvXaPoKVU;lhYdhOb^d-v`= zc<|uavuAJKy!rU?BZQA0+i`TAQyM6oig9i^DJ9g~C zg$viNUAuSh-qWW~fByXW|NsBeu9d_i#eag%MX8A;sVNHOnI#zt?w-B@42nNl7`Yha z8FUzc0OSw`R(A!JzLd;)&lm9VZrP+N#BhT7g??7?(XjC>6tQR%Dj2= zmMvSheEISfD^_gUv}yOQUAuSh-m_=Vp+kp`96568)TuLP&Rn{5>Bfy4H*em2`}Xbs z|Nl$7R>G0uKSAfB)Wnk16ovB4k_-iRPu~Cr#h)yUTnzFIIt)MnatH&f-vhP2l+1Z) z#%3Pea}RuCXqYJB;4sx>!UV}VtyiLFa4;tI2OeTj(+GADRaF%TU8JnNilOWduM^adDbUF)>&J0IvFERR910 literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/feedbackbox2.gif b/static/img/jun09/pad/feedbackbox2.gif new file mode 100644 index 0000000000000000000000000000000000000000..f1b8f5b79e31850521f6aaaa4838ae9612c663b7 GIT binary patch literal 6262 zcmeH~S5#Bm*2e>(Nw)w|5kgZyArTNm1c9SqfdHZhupJ0VC{m>vQ6cn}0Md(61?kca zMXEFjp$G`l1!)R|7D6$(*v`4%!*_=d_rAFv_S|c)IsbFc-(Gu+wJ%)KhN&P;n8TT- zJplvr+w1G=`ES=ym9)lj8kI_2TwDxor3Tk8H8eEDSN4DU^y&Q~9g#GKsoq*%UjFm> zjC=it8*y=Sb8}*1VrpvY_=95V7Ck8`$;ZcsOeR~_?6kGDMMpZTuV#F- zDx(w^7Y`2)U(f%164V5>gwvPt*`ayrA%1W(Mv`dm*WPk8yIvt zeP?IqR`IfF*_u(#{Qdj)ckBG}ZESCEudS`Uc=2L&b#-NBrKzbYu;%l`;x;mO`rX{- zr)4U(nVy=O`gvtTC%DR?b~EYK!0jT6Y3XVrc|-nDsm_yO-KQh3UcGwM%BZQSiRfnN zCy$qod?7TgT#WAR?(TLj7;bNGH_IB{MN~AnmD;|X-@W48uv0j&NuJ(HBd^AE(}O!0 zsQfwahP8q|Ducmz{P?jLgUbYA06vd&LGD^rb*v*2WrJ}6n`11k?bXDWs%pi-)@U_x z<5LJI!tor&%KDu56qFT|PJk7lP#6Sy z8lni5I|+kBPr;Q=f`1J0vz%a6C$t6J@Vxeqbh|S(aVr-WM>qs>@7_K6dy4W7PL`09 zDk>@vr~*VmL2lPW&iTH*3lb}5?=10E;=9Iqj5Er~+R??@!5;io6KU??>Y^qtzPk?o zA&y4VkCnmUg$quRVZO(J1(LrEk;k zO=;S?e4l-v+FF0@1a6D8w^S3y%Aqk9NLO1IambGd$k)DqhNwdRub}Eb>Hl;_T4JtY zoa~(cTdDp(ZPjlj{oAYAP5AxU?knHjZIHjW+mAMX?2P}F`L-GUSK>c)e<%4#;+O1i zT)%|rr_*m-KS}(O{f+CFF#UA;jq4|gU$Vb({Sv01PX7rP=RXHljQ#Gp>E7;fl!-zA zva`LlN!y^VudS{uQwv1ud1smD~K=4%Sua%iwa*9$6uD+r1byIUoYulT4QU|%StGkD!!*%HR z5pOxkw4%+8S{z_4CbNX^kZbw`+NDX}V;;-Y93*K37p0ufUV$oy^5ucX= zhA~Y599XWJ6s`8(ZcRBCa`qbw^#c+$Pg}bT5_1-3y3&pDMP_q`;|+wf;1IJEy9537<1j;WcI-Oq=opE80gm&%&( z7w$>Zq#;hw!-s3~C~4P6KZLT$pj{%` zz)km0ozRqEgt8sr#~n~`WSa`VW^^!t)AAa)X+Nv##K%}BRWU7AOK@{qv{mNdfRVrs zSnGgevrH48d7o=$0(LrHa1Z908IDPvWvek+CJH(8)ct7Atbw*v7aOZ=mWJlxJsMI1 zULh7ab22-|W#75XXE6zVmYJD3vbtFX^YgjlWt^Y#N)07#@`=-LI`b>3^SP?k zblJ~^6D&HPi(26*+hUTk4yl-|ecbMPx}MEKS+7OlLixKt+818FcIR3oz6#b^tSC(g zS**;>X`$g9sEXT>D8V0Axkya=G&KQAzNIOxtfx5SnJ*d5!QOvq&wE$&cb-sdnYd<*84_H2_pd*?A^ulG}Y&DNGMe%1kCZ&F7?(+&@Xy@}6le?j+w`C`aKR zEFM@QpLt!wAUjeTBy=AxvxtVN*1dsrI;@f>xgM>p>FKLg_nUUwQ{ShzKiZh`;5*A8 zehBNd+nh#)cx?3-bk>wE)-KuZtSIVuerX*I^CTW!VwBVA+X4WfNdbK?#TKXvF4&h< z=W?*n%M=A>F_o&{Q~t?Iu=)n8qE!x$6Z9|8&iGqZ=?2}$g}&>YVw_=a4Fc2Ie)6PP zP83ZM)YElYxf)q(k=2;^u`ob$ON<}b+$dI~8>l_Szc13HP+Vadt@H4MSDJK_uS!v{ zXu7!IOnQ@?^5@{cs!fC%rJtURIB9OCI@w6dYL3b%A~Zjc5RN?7qN4C3)a{{&$g1=! zwUr`wj~xjrvrOy4-s14lGm_$s&s()3UOWy}6_u38uDN7b{3xbcaz`P%ZS!t1Ba*r; zDZP5^&6Sl-yUc2#!&k2>Tq|}8FL;Q6c@N}ir2KFWUFh;hQXR|bm1d}z4PVLQblFZU$MO;n4fzLK{1sO4RKa`Z5 zKbz5IxivIdlOdyyBBM)r79FfN-UdsTFNSB?Yf0Ri%tEmjZ!(M_yDJ=_@PU{uJ z50qn*Iti98BPt`VMnX^D$yvHJRg5^e#U_q*SYY#2My+Fn5@zfy+@mW-QRT65OFR}2 zAE}Jp?iY&P$j5kKD#nbdvC#|!28U1?zaj{VVqZjipQ;$wQI3n?3q>=0kEl#&8G#-P z$)o*QD<;(4;=)A9sK5o-2bCC5=rMa#a3Ar5VtE`M!i&Pcf=$ZxgF;Rhn1^N%Cy!C% zg4FfQ!wIk{F~Ng@7Z#BbuEeRs%JKgCp~$G)u#W;p2mOrYkuh4tk9=*b9QDBXwMH6Yf$V58juhUqtP6;F!$>%vJJ?lF*wIHf*7dDK zQ5~Ciq1TNecc7~Q5C}@~zq!5ju8s->dLV4Lh==-56ybm|j1F6i^g2FiY&ll~V&RVQ z&4GS5T#;6WHF~U(8OZUH*x12r6)?oQm*bw$t#R+Wxraw4Ei|kA7VPgjB<77O2eIna zEqSaCv3d{zTssS1TqJXLAUjc*dy$=wlE_qog8_FImL4pLlPyaCpzyloQ0FJ?C14Gf zaDFeYTVQSxiVttNBMvtt#_ch{w9k<21H?UH5?O+QP9)_U&)k#{q&4jI*IP>s!2wE$ z0MXCm?99S-(;l!t+L2Hf!1>$kJnG&YI{;kT{x4jr#x|**ygXcSA%S%b!CIGjXrX0ID^cBEBocu|ZXUVY03 z-ub|BiXY>_O(5TzB$mFKBm`jEEmD@I3E0O06X6Hrge94no^Mq5MS=n9*HYJRv8&CV za^S*8b}--NsG<0T0sXhd*z1#hmiO?p54;tl8B@*)Q_bAfZ>4e?gXom|rd(rT9n4}J zwX_y}R#_9|j*&EDv!#Cayd^oj(NH$!6hMo= z*C8)fK{KE<lsNqh#WvjP-$CWcb*c0R<_{$6LJ*E;DmF0&R?ZwM~3arvT2H3{^`1_s6j1``AE1A(Emz;IAd1S}}Z zBq#88L!^5H0 zkZhRMh{M*(%FAi5&)DhJ@UW|TdV1ENII*#@+}zw~iqb`iz>v zf~|G_{{L2K$m;6q^z-xg+Sq8atmy3bRMTo|S1^Qxgj#dVR;1GS>F8CtoVe@D)85Wm zebCj_)SjN7e3;j!+1Po*$&9wKinoi9rQ7nuzvO&%eWq>QR88e;V~mZB=jZ3( zdUlW1tH+_Iwc_h`Z02WOZJt~9_xfah(8$`t?eF;7-}3tU`uqI;&e72{G&SI;IqlGZ z`1A9#zpu-QhV7!9-oAgUgfr;PKU`c~`}_WqawOU~EzCkajOU@7!GiFCb+Eza-*Ii` zUQ=L%(ERu8XOqyCkY>5DU+(Pa!j(Fhl8RTV-r>@!$j8Tg#dN>dy29eFdU0Rt+`#nC z%lG;GPL;ljjgelWhk&eXK{ywRxouLVWc&O3Zf41egav$kkdcrRhI|8iewmsB2b6?;dmtO50RbO=Je`6I z3uLThWEB-+ryC%u3v)}mydy>gntpwM3rjF$H9s&lEiC~AA3VauORQgFH83qF8>PU* zWX2UgEk8yzCj+(t(-lkPMn)$_NheC`8|_#XEkWc#NIdKrKyaFv4n}?yF*hQhl6wQD z8EJ^5V#OpL9zL9Q;)Dl}9zurPLlV<4L4AU$)O7NXrIo=3@EPPtlFdGR3NYHqv!~CW zK!f(Id9#lvLY6S8a!+>;I0au2I3<&N3@ivWv0xl~Y$RNSE3x{>nh$zS)1BHwXD)bm2 zg0HZG3l7wvut3L-V}cR$`e-8pg__bnhyZ~&?E!}_pdEsgf%-)g+#e|g10Z4jtpp%_0~V;#J)<<32?!eO@WKuh5MZH&gT(hj0X$HU zKmi3%AYuV8pyY=J5inr_00$Hh!2tl6kU#_~?qC8F8vvjI6A1_azy=AJprQbLxCp@i zl1$n-lS>0o5aR>_I1)ht0!&cA0fN*t!4(Ja!N&_o@^Qcw6ojYdnryD=h?sD~SwIJc zoVQd?bPmFY5);%|ihFqKNk9{XHc(0}8}M-y9|V+PMhOjcbBZQUx^#vWRzRxGGXhr1 zM*?ZM@InL-66Wa(9dtlJ6DE|(&XY=9;XY0?k_FFvJZIq}JgL zJwPyp4I%WP!wnY?D22|Mkn~UrP-Hud4Lxijhk?p12SyH3(5set^HOK;9{?A%oxg0i z-EZ2Gln13!F%|3-dkRklU%jZ&SBrfd50HQc6HqBYFbV#*smKZX!N%Z(8~zQ)DlN!P z<4iR0IOH1S(|F~mjqHL8nQP7l8$zq7iPYGRY$64t$G)8EVoO&xOlQMw)7oyg83+J7 Dz>%Q{ literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/hdraggie.gif b/static/img/jun09/pad/hdraggie.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1f7dc163146d5b4a66951f67dbd1b84fb8e49ac GIT binary patch literal 802 zcmV+-1Ks>bNk%w1VL%270E7zw($dnx!ou0v*~7!b_CX>@2HM@dak04x9i002M+3IG5F{valfWNDsg zs;+G7zHlthbZy^wuJ3&B|G=PdNGuwU$fR<~Y&xINsB}uLTCZ4=Wy|e)zu>TVOfH+x z=(KvxZoA*`xO`5p+wb_ie$Vgw|A2vlgM@{Khlq)ai;RtqkC2gF50sUbmzbHFo1C4V zpP-?lqok##r>Lo_tE{cAuduPQv$VCgx45~Z6bb_a3KY7+!^FkL$H>Xb%goKr&(OCL z)6~`0*Vx(G+uYsW-{9fm+J3B@9^>R^Yr!h_xR!k4G0Jg1^EIB97wRB z!Gj1BDqP60p~HvvCPt9avZc$HFk{M` zNwcQSn;`=%003Y?0GvRB3LQ$csL`WHlPX=xw5ijY5TZ(*O0}xht5~yY-O9DA*RNp1 ziXBU~tl6_@)2dy|wyoQ@aO29IOSi6FumJ=(a3CPS-M@eX3m#0ku;Igq6DwZKxG`M{ zkRwZ;Ou4e<%a}83-pskP=g*)+iylq7wCU5RQ>$Lhy0z=quw%=fO}qAI1^@^U0KmYu z@87_K3m;Crxbfr2lPh1&e0GHA(4$MAPQAMI>)5kv-_E_e_wV4tiyu$Ey!rF!)2m<4 zzPAG}dV2jX370kw_+~Ex48Mk(c#R90!_l~`t}<(6D_>E)MThAHNlWR_{>nP{e| g=9+A_>E@eo#wq8Vbk=F-op|P{=bn7_nPdn6JCGFDK>z>% literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/icon_import_export.gif b/static/img/jun09/pad/icon_import_export.gif new file mode 100644 index 0000000000000000000000000000000000000000..b8e3417d8e9c098646d05426c4f2df1d41c9a6dc GIT binary patch literal 70 zcmZ?wbhEHb7yiz|{&J9q?! RiL~t7^P9g-DVTx58UQ3M7SI3y literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/icon_saved_revisions.gif b/static/img/jun09/pad/icon_saved_revisions.gif new file mode 100644 index 0000000000000000000000000000000000000000..7ba9bcaf2ebf7f4fbd2bab7da223c7e13a267d6b GIT binary patch literal 81 zcmZ?wbhEHbaZ*gbK_3`kCDJ*@18RJ6t8i8sBw$q+O^lXg7-0mV~F0gi?LXBk`jqb;qC~ zvr#`HwZuR9mRuznmY5{!+5Fdr`j7hB9yz01d%Q%E{7k~^)#vi33tN(g6E^|78JpgYCciwg2#+ zPrv{xY>opO&!F>D0N2$-0V6gb808W61YcA5`j*@Jgh8LkdmVQ%K^f>!X7QT`*xi-H zH_Vc*Z101ePeNIx-MKzzB!h2QWxWNs6vw4u?DBU-_y?=^cd{$qml2A>^1@zLetZ_i zN*L;V`D~z?)SBTZW<3AQI?{cb*u|-e<{Ugq33Zu(hIkh=lA*5J>XD}F@NJg&$HcS>z?A{t(4r#`Wcj`TF}&P$ROq+6Ho zjDb5Z+d6~AY7ij?opS7MyyBYq;s&**)yiMlIAjMyVlhjoZSRmyP69|U*Jk5)Q3|}% z9dX_9XE#zR>Tpgh2>2iQ9f7%t1)Zq%eK^NCQTNjAJR#Jm)50jsC>6UAN1?614-{ss zef0@Ob7%T^q^}YIakLdKt31+zC`Ynw2_dT{=2NerChVz4AUqg?7roA+l29qORDw7V zvu{OQdk!J4Zo)pQ^s`r%U)yzlZsZIExJM^o$a$no?g8`8Cx|JTyT1IwFQje!!p~bH z@+R9;zY|&=-NO3<>|Mv9bbHrCF???3@kj*H*LyW3YiT;Jq9iB6`WSDYnSrq>yOjj} zG3SCOGZokzjtK_a3Y#uwKgvqQU*PqxkVc?)l&-Y|RHhkM$z@zI{APjxMr{(8D=K8eWcc37Uc z$abqv%EI{5a3P?74ul6#hai0a1{{g)fbzT#?>*<~g0#Jc8DjN&&`2Bl!?s*K3;5%3 ztsl0gLBO2A=ws7B!p&dx0AieD^j|5i*Divalzu_rgGDam;0<+1VxHaynx7S7HW^A(5#XwLEY*2O&p g=WVza6oZ~xt5>Gs*y#%$7~VIyZl_kk;jk@#1H@n%@&Et; literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/maximize_maximized.png b/static/img/jun09/pad/maximize_maximized.png new file mode 100644 index 0000000000000000000000000000000000000000..d1ae8f87ea37063c4c903bfaf822d63b67927170 GIT binary patch literal 604 zcmV-i0;BzjP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#00007bV*G`2igh& z6%`b^|GD1)000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0005ENklleG+Naxu2tt-%$c z{H+kG-_<#z6#-yAdm_)n515Ds=*z4X#b||TJ4o{OM@ZHT57Ty#Mk{32ieiC8X7yM` zAGI_2s?SrX+kZS}!*NUa{_|1*z(*3vu@H?`nEPCi`y4DSXJNELax6rWux7@?bleiY z9b8oUCL1qT`qPoT81QpuJWOAD zs04EXkHZhihWys~j8e}G9hAQZhjPNef@px#)c>}aCkTBYu3 zqv2hr@Kve!oSvIks`*u{^mL}*V5;4vuBhqvU3xaF|2u7tVlin-@{z59H={Is^Sh`sQVyyT9(>$SJElfC7( zxV4qP=efJMm%-_}yt$6U_L#!zkj40(!{xodyrIVFqsQu+$@iql>!8Z=s>G$61_~`2A;_LJ2>*(a|_2TaR_CX>@2HM@dak03rDV0SW;B04x9i002q=5dZ)P{s8So zOL9Si!Gj1BUZ9c?_4OY57)psSC3HEH(+_%`?^rek>PqIXO`Xp8+e2-cNQ4-3C;pC5)8Djo4i4pTq%rk$SR*NYUIHf&g$Rx_6 zcWoVEe_s@A@)xg|xp%2-iHrD-Dy!x8>Q#%SE}}SC#@^xc44MlTZ~p53V5#HJ8x|}N zPx0FN4GuV<%shK6FhK?O z_+p>}Le#^Z1X^rSk3U;rv4ubNocGW^{*2OIh_z*+%0sGT;?EqHKx9ucCBz|-KGpzZ z4J;wV;SUZOta3{Qe|SSc6xtkO&k89F!-xX7VDp&-P)w1JKT}L`1&LigG|oHeblK$- zwG}c=MAH<44;#y57Ev-MWMLRS?;v7B3l5|);zy#D>T^Sg9e!7qJ}iqAS + + + + + + + + overlay.png - + etherpad - + + Project Hosting on Google Code + + + + + + + + + + + + + + + + + + + +
+
+ + + + My favorites + | Sign in + + + +
+
+
+ + +
+ + + + + + + + + + + + +
+ +
+ etherpad +
+ + +
+ +
+ + +
+ +
+ +
+ + +
+ Project Home + + + + + + + Wiki + + + + + + + + Source + + + +
+
+ + + + + + + + + + + + + + +
+
+
+ +
+ + Repository: + +
+ + + + Checkout   + Browse   + Changes   + Clones   +
+ +   + + + +
+
+
+ +
+ + + +
+ + + + + + + +
+
+ + + + + + + + + + + +
+ + +

+ + This file is not plain text (only UTF-8 and Latin-1 + text encodings are currently supported). + +

+ + +
+ +
+ +
+
+
+
+
+
+

Change log

+
+ 81287c8af1 + by Aaron Iba <aaroniba> + on Dec 17, 2009 +   Diff +
+
removed duplicate trunk directory
+
+ + + + + + + + + + +
+
Go to:  + +
+ + + + + + +
+ Project members, + sign in to write a code review
+ + + +
+ + +
+
+
+
+
+
+
+
+
+
+
+

Older revisions

+ + +
+ + + a9f8774a2e + by Aaron Iba <aaroniba> + on Dec 17, 2009 +   Diff +
+
initial code push
+
+ + + All revisions of this file +
+
+
+
+
+
+
+
+
+
+
+
+

File info

+ +
Size: 141 bytes
+ + +
+ +
+
+
+
+
+
+
+ + +
+ +
+
+ + + + + + + + + + + + + + +
+ +
+ Powered by Google Project Hosting +
+ + + + + + + + diff --git a/static/img/jun09/pad/overlay2.png b/static/img/jun09/pad/overlay2.png new file mode 100644 index 0000000000000000000000000000000000000000..c3d3f1cc85f65775e01f78700ffa58a9ee5d74a8 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^EFjFm1|(O0oL2{=I14-?iy0WWg+Z8+Vb&Z8prAss zN02WAL!K!EL#a6f!?*1W4DDJB47r&M3@;WlFc>j0Fi1=m@4XZZR4eW2;uunKD=8%* np&-G5$%iMSVFOT@;s1YT2Eh;p52t=LArRlw)z4*}Q$iB}SjQlu literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/padtop5.gif b/static/img/jun09/pad/padtop5.gif new file mode 100644 index 0000000000000000000000000000000000000000..e6e071d6ccec737b9688181f9523f6567908d697 GIT binary patch literal 3872 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 SGiuz(v7^V2_(F;d0RTHFq|GM) literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/public.gif b/static/img/jun09/pad/public.gif new file mode 100644 index 0000000000000000000000000000000000000000..ac3093bd4b899f9096277898fec9fcddc0a33211 GIT binary patch literal 1034 zcmV+l1oitzNk%w1VGjTg0Ot$<)$#wz>i?~+t*NQ09XutYqoeWv|0S^w+3^3&>;JLc z|G(t_|NsBg@Bi=r|IqCJ&CSij!^4`-v}wYf!otFd$-1(#vb^g5DAqYj(5Y*gYiPIs zz2E<^+W(~3|8BebukQaMr42~1Qd6&oRol)>XJccr>qxg-q0`G+aaf<&{l4}8gvR)G zzxl!K*lErGlGp#!?f=N-|8L#=R%LEHuTtJVLxU3F<>GD4|61SKFE20B?*D?m|E=HRLAq5nc05tR+%j@PEx1G{v@oX5tuM7z zYQE@~*T^ELGrHUVA$K#!@c(nKfLfQY%liM%|NoS{sXAp->Ay|H0+@ZP@?C==xP;W5~$JwA}x;-~Z+L|4^xHqsy-{N=dZY z{I0I9lHdPUuVf~s9AwP@MXqDH-r~;A&YIExx#9n?-v6i8|6scNZMyZ$?f+?|*H>zI zL{)6c?*AK>Ee%2il+piTf0GS6zg9XPTCK zgq+;)|KIliRDHf)w(fhy^0(^QtE;Ri$4?~1I3JQ2oznlb;_u@B|14yRIAw=Aah2fq z{~U=5QJ2ejxc?z}EE zx%e=*MQy{XVzce8*#A#YPe-(MMp{?I<^Pc9|2dSPB)A~O=>JWzSkLMI*7N_%%gY{` zA0@aJwch_hYlcQ{jpz9P+VcNZt!=H`|H0((GgCn&whpA#&8MfQwcGz-u;^QKUT}-7 zRjXpKu&^Pf8MN8^Va@+XV`WIIWPY-Yx832p?EhWSy=B(_n9%>M*Z<1p|7o}Kzu*68 z&;O;?|NsC0A^8LW00930EC2ui01p5U000Q*0RIX6H^&*dExU?w8px2yBoq>|V5xT{ z4g`k4=DC35D~-MYD-<0X2+fKHdJGI)iYBK+vt=dz4WP6s4}))(5G0VrqenPH1uC%$ zG7f<7L4yVyxGC@;Pe+nk4i;275(Fbp EJAhkL6aWAK literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/roundcorner_left.gif b/static/img/jun09/pad/roundcorner_left.gif new file mode 100644 index 0000000000000000000000000000000000000000..000de7525a4cfc8fc65d891996e152c8ebd25d01 GIT binary patch literal 123 zcmZ?wbhEHbWMzdeVYS1w+@dgrUkyL0dMvlmZazJBrH)BCSKzWn_C z_laey( U&g~@{0(_l^4=OOYFfdpH0MXt-F#rGn literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/roundcorner_right_orange.gif b/static/img/jun09/pad/roundcorner_right_orange.gif new file mode 100644 index 0000000000000000000000000000000000000000..717e3fc413bb126f2a312a38a5c6f063601be91b GIT binary patch literal 171 zcmZ?wbhEHbWMz)PYnSAIO$ z_WRk@m#<&^d$aT3r@g;E-~0FV*#9rj|NnmdpE#hy00bbr7+4Jy1VlKLY}*?g0#Zc$ r_OKN4Tsar}+U(r(eGmL@NK18lJP33wHeu*&OL9o)5aMy;V6X-Nh;VGp literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/savedrevarrows.gif b/static/img/jun09/pad/savedrevarrows.gif new file mode 100644 index 0000000000000000000000000000000000000000..2aa2e41b5fdc636a86e6e025cdef8885d553ce8d GIT binary patch literal 866 zcmZ?wbhEHblwp|0a8;Ax@#Dw0UjF#<<%>gP@y?w)ZOXQ~bzfbwWXZ~vD_5;rWe_(( zKe$Raw9YiRNI$k`{`~p7cI`TP^yt5T|5mJ6vH0k#|NsA6mu`0Ny|HlN!t2+sA31X5 z(4j+%kGIx$Rv=T7})+Fm{edtrhL1o%!8mwH?iE6DRa{O`bNjXZoy} zeT_|XQ+gN8p4YN;$-?Btt5>XDm9%E#y3HFF%-^(q`L>;Vx9pm@G5KI7fi2X}9$JYIk2!M&FcCq91lRO9{I+V`)MzI}ZD z{l|v`|6bhqA>95p`amYf>Ok!o6BZt7o3p^t#B}2P!`*`7X=^GzEOhS?vCk8c6k2k0 zqMG%x9`{cvo>L6sPnCEEr=FRm6V8;KS)6wMzfJY5t2-5*HyyD`za(=u`9aqtT{ats zCZ!`M7*xH*EEZ@TX}P{WUS38)LD7?oiJh+@Han^1_Vzr+1_uE}Zx$AY2d}O8$@4`Pst8ldJuEY0S;niD&1iR$p6l!{y1jnU1s7 zY@@zrUR)WtKkZJG+3On{($&|^{rxTd_Nw~te09<0N%yvd3zxs$T~Yk(bmL;Nd3P)l zp6s6LUoKbsqwK}~rH7ZzyZbBU&ei$d{(k>d4_+_-eSG8zwckmzt78G zZkMmS!pZRg`7D#c^l7nSQTyFRz)(?yBo%2x*?=66|ddJ$LsXQumtZrfKkl=|I&olukca; X%Z80lr$(?OlwM=xfAKO@fWaC7Qfj5S literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/savedrevsgfx2.gif b/static/img/jun09/pad/savedrevsgfx2.gif new file mode 100644 index 0000000000000000000000000000000000000000..45c34590d495dc209aa367e4ef7ea526da05c103 GIT binary patch literal 1904 zcmV-$2aotiNk%w1VNn1u0Oo%HJ&4YCtJ*n$$Eeo-Ly*>Zxb%y)+JwIKP@Ct9!uLXi z&55eYH-E)^vgu}?(#PTYVXX2sdc8@J-QDf{S*rD_#M?`f)McgJT(0>=iq_HP`8;!~ z^!ffwmf>5h_oB)2zRlZ6ncsk}*ioM8w8`9LsO-hw_iCcnI)lkcn&4fe>SnU|)7agW zx!OpM+OX93M~&D)jntFD?4P~aMU&Zev+U^d{8gjwN0;43mD_H!^i!46Ka0{|o71Gu z_HU})$z_-As+hMvT`>p5$J!{7RhSU9kI}%kevf%wMzqOrGRRl;2pW^HZSfR;BPx znB=?K_@m79Se@gb$M1}{+;6Gnm&NjlvDZ$Q*l)W1L5$NxiPTu9@?NOtP@v^orsjaS z@6+l1R;2Gehs`f=urPA6H+Z{Ep5jD_&^v_7-QC?OW}^T9|Lg1PA^8LW004ggEC2ui z08s!i000O7fPa4r8-0d{h>41ejE#6*GdIsN(wb>&9AVmq9NvCvaF~!hxgiAb8GHE>VhFKh-&JosHS=;41H{%2Nkf!D(kGY)@tjmxaOLx9+KeEMjIIfE9|hu7HjOW z$R?|-vA^Om$q{%cAnml&R%`9G*k-Hkw%OuwiXenQBJQ~4mV1aKlnhdcx$L&fF1mvB zVFw-&)NAj(_~xtczWny@mj%7xMAQB$sS5$A+Mw^2#i??DESn$1L;AG^3F69ysT$^Ugf??DNk+2OYG{ zee9vd(MTt)M;b&Bkw(%`M=kZ#R99{F(R&zD2LN1m?KKE|fB?1wUYBk5*=VP&_Syi{ zVTjs2gw3@BJ8<2D13j>Pcim|3;D7~Q`<*x2Y8%4C;fN=G0v{~&fcOq9@F6(}7A#)D z;c4)3f(1lK&PNN0^N_g+k~hu+=blr}0}Cu*&W8v*#C>__h#SI247lg6JJ@{8U_=Z? z%n-l{Gw_jy1(M@V0v{H%(EAC?_n>>`Km?Ha3^6!g0r9=ZQ2YroERTKv=4t4zI~#@& zp#J*o6QD-%j60yd5kVNhhXDjsz()XT@KFH)kqbio?#Dj+1weg#AOQh@zy~9^k8uPb zT?+`nI2Pouf$d{o`ZAb7BY>>}YFM7<@JG5NkWK^?^ql1Iw?6v?0f7pX-1=nLKOh9* zb9`_B3qZiZ^%;T&Kn$V~g?K{}n1K&wpur83s0P;QPYpDP92AEL#3Kd)hzX1$ACN!; zBrpz$`l|p7yqE+eQc;M8$blNy$VM|HApk!Bn;DLngdZ%=3~DSR3o4LD|NS5UNw`28 z`S1fZCNKwOtfT%~phhW3j*krFgCN;RNkib^l9$PLtG&bS4gKi*U8Ryy7QgzjHf)| ziOyD~AP!Z?r#|<|&wl#zp8yT0Kmi(u6i8wUHFyIYxWLecI`p9sji^K?O3{iw6b^5w q!4#g=0~uuDqaY2bNJmQ2lA83SC?%;3dhjiEx$C7cbp*Tu0RTI=&c*Nm literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/sharebox4.gif b/static/img/jun09/pad/sharebox4.gif new file mode 100644 index 0000000000000000000000000000000000000000..eccaa7ef0d26c6d7afa5ffcb4f911017e9ef1bb1 GIT binary patch literal 5788 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 literal 0 HcmV?d00001 diff --git a/static/img/jun09/pad/vdraggie.gif b/static/img/jun09/pad/vdraggie.gif new file mode 100644 index 0000000000000000000000000000000000000000..b56112ba437faca3057f191153aad0be3f5dc6b0 GIT binary patch literal 3413 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 rsGP{ioagAA1PPrVDV;b;olj|^n;1|GP zFo=6WDax4OMH$!0+(Ou=QtE_4&?j7v1clTNI4ekn#0qk(N2H9fLQ0urva~>0noB6- zOqS$giwRyz_AtCOmzbVJyrf`wNiHT{DWaa>W*V0mu7ur0hz(b8vYM1=PASF?r#o>j z!cM6}9L{h$Lw2fgv1%70-R3kqDyepq3k_SscF0)?l48Y@kQL`5)e>loxCqe_( z#+e-?fY}j3WO87JLu4;kB_&5C0=5*6Dp=4dlr(}0ssR!PHCMw>QZ(RHPy|#1P5~qU z0uE&6cl-a#@jsOjfL)j!4#Q6Xx(|QHrgpYR-`%P#R16ku-uA~wZ?5Z4j0>&iS^Fh! zjdUlP`j_6$Mz=b(^oAXtJhGil;Kk4O`^|&Xb9a8T_4bMSy*0mj>gZPE`GflD>dN=k zt;w0IZ=3$&kJYu4m#;lK|I=@%kFU@J?e4?si)XEwx%Q_U%l?P@?AUAb>DP^mudYvj QJjUj~E!`d8zYos+0}r-#H2?qr literal 0 HcmV?d00001 diff --git a/static/img/misc/status-ball.gif b/static/img/misc/status-ball.gif new file mode 100644 index 0000000000000000000000000000000000000000..085ccaecaf5fa5c34bc14cd2c2ed5cbbd8e25dcb GIT binary patch literal 1553 zcma)+TTl~c6vwlh>nb99Af5rT)t{mCEg5urg=A(g z{C|6SPb~9Xage|wB`SrZk2FOMYM!buln2sX?5Y+T78iB(Zu9cS7|LZyZ++}u$^oi1 z_j@S}bW9OzU2R+RMy&~OT>X-oZ98$jq#ogNfJ!BM-42wHGZk*6s2KD}U*IA%epmxb zm}|6BK9YoIF;*xSL!+z@<64lB7->LTW2Vi4ostCA(z&2XniwNIv}fFo-`MbG;)u4G z^p@F!)|9HhZprHd_vXjDoxs6WkK-6P0@lfxnGT>*p(QHoUV=u1FAqb@b%*W=a3{`LsH5k^AvQNL>6fPpy#oU(&MuH(*aEX4b35*} zn4n7)`I2U%=+Z=?BVZQ?vjQFW4gD@~XSOO6b{qu81`4&LFuU2(ilxW+1|ZkNMnWe79C$gs zWT?Ele|HR{JGPe)5BTW>0Ey?-Ls6S#GoV0tbt6ku7B&*0 z;i9QM$W1Rj*rRIdceL)rAOSl+sDe3LkB87<%){;ZdHp6|SNlopDXRx< zxBDF9-lTo&v`8$humFygUij@qgT=Qzhj8{ym2-{Xciwqq_Xwk%=O3B-MNAL_6e`3U zyxwmXex4`g0^1RYw~Dth3av3Dl^AAlpO3mG!nLr#&ZZ7c_wUboI+deC+&%TFjK2Lm z!Y&f1h|T_On%RCV&=4bx`!>(YezqGVhl&QpED?N6GV)HmzJ9&rh$x*i?*@o9#6QI< z5ZI_MRX;0+pY8$`j)eF#TlUyG(eE%E7S!rj;mj^M5vhUicPm zVWQ2z+imFyg}SRABmOBY_@osR!>7Ov!ioK`NB6_Rv}7Ud?35ed5Sb@?yND?kv~RCa wqs^a3Sh>&&L4)!LKI?D2&k@))k(LESaga|C278ChSzn3NWVkcuNoY&{0f?~U_5c6? literal 0 HcmV?d00001 diff --git a/static/js/ace.js b/static/js/ace.js new file mode 100644 index 000000000..23396c398 --- /dev/null +++ b/static/js/ace.js @@ -0,0 +1,253 @@ +/** + * Copyright 2009 Google Inc. + * + * 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. + */ + +// requires: top +// requires: plugins +// requires: undefined + + +Ace2Editor.registry = { nextId: 1 }; + +function Ace2Editor() { + var thisFunctionsName = "Ace2Editor"; + var ace2 = Ace2Editor; + + var editor = {}; + var info = { editor: editor, id: (ace2.registry.nextId++) }; + var loaded = false; + + var actionsPendingInit = []; + function pendingInit(func, optDoNow) { + return function() { + var that = this; + var args = arguments; + function action() { + func.apply(that, args); + } + if (optDoNow) { + optDoNow.apply(that, args); + } + if (loaded) { + action(); + } + else { + actionsPendingInit.push(action); + } + }; + } + function doActionsPendingInit() { + for(var i=0;i, time: +new Date()} + return info.ace_getUnhandledErrors(); + }; + + editor.callWithAce = pendingInit(function(fn, callStack, normalize) { + return info.ace_callWithAce(fn, callStack, normalize); + }); + + editor.execCommand = pendingInit(function(cmd, arg1) { + info.ace_execCommand(cmd, arg1); + }); + editor.replaceRange = pendingInit(function(start, end, text) { + info.ace_replaceRange(start, end, text); + }); + + + // calls to these functions ($$INCLUDE_...) are replaced when this file is processed + // and compressed, putting the compressed code from the named file directly into the + // source here. + + var $$INCLUDE_CSS = function(fileName) { + return ''; + }; + var $$INCLUDE_JS = function(fileName) { + return '\x3cscript type="text/javascript" src="'+fileName+'">\x3c/script>'; + }; + var $$INCLUDE_JS_DEV = $$INCLUDE_JS; + var $$INCLUDE_CSS_DEV = $$INCLUDE_CSS; + + var $$INCLUDE_CSS_Q = function(fileName) { + return '\'\''; + }; + var $$INCLUDE_JS_Q = function(fileName) { + return '\'\\x3cscript type="text/javascript" src="'+fileName+'">\\x3c/script>\''; + }; + var $$INCLUDE_JS_Q_DEV = $$INCLUDE_JS_Q; + var $$INCLUDE_CSS_Q_DEV = $$INCLUDE_CSS_Q; + + editor.destroy = pendingInit(function() { + info.ace_dispose(); + info.frame.parentNode.removeChild(info.frame); + delete ace2.registry[info.id]; + info = null; // prevent IE 6 closure memory leaks + }); + + editor.init = function(containerId, initialCode, doneFunc) { + + editor.importText(initialCode); + + info.onEditorReady = function() { + loaded = true; + doActionsPendingInit(); + doneFunc(); + }; + + (function() { + var doctype = ''; + + var iframeHTML = ["'"+doctype+"'"]; + + plugins.callHook( + "aceInitInnerdocbodyHead", {iframeHTML:iframeHTML}); + + // these lines must conform to a specific format because they are passed by the build script: + //iframeHTML.push($$INCLUDE_CSS_Q("editor.css syntax.css inner.css")); + + iframeHTML.push($$INCLUDE_CSS_Q("/static/css/editor.css")); + iframeHTML.push($$INCLUDE_CSS_Q("/static/css/syntax.cs")); + iframeHTML.push($$INCLUDE_CSS_Q("/static/css/inner.css")); + + //iframeHTML.push(INCLUDE_JS_Q_DEV("ace2_common_dev.js")); + //iframeHTML.push(INCLUDE_JS_Q_DEV("profiler.js")); + + //iframeHTML.push($$INCLUDE_JS_Q("ace2_common.js skiplist.js virtual_lines.js easysync2.js cssmanager.js colorutils.js undomodule.js contentcollector.js changesettracker.js linestylefilter.js domline.js")); + //iframeHTML.push($$INCLUDE_JS_Q("ace2_inner.js")); + + iframeHTML.push($$INCLUDE_JS_Q("/static/js/ace2_common.js")); + iframeHTML.push($$INCLUDE_JS_Q("/static/js/skiplist.js")); + iframeHTML.push($$INCLUDE_JS_Q("/static/js/virtual_lines.js")); + iframeHTML.push($$INCLUDE_JS_Q("/static/js/easysync2.js")); + iframeHTML.push($$INCLUDE_JS_Q("/static/js/cssmanager.js")); + iframeHTML.push($$INCLUDE_JS_Q("/static/js/colorutils.js")); + iframeHTML.push($$INCLUDE_JS_Q("/static/js/undomodule.js")); + iframeHTML.push($$INCLUDE_JS_Q("/static/js/contentcollector.js")); + iframeHTML.push($$INCLUDE_JS_Q("/static/js/changesettracker.js")); + iframeHTML.push($$INCLUDE_JS_Q("/static/js/linestylefilter.js")); + iframeHTML.push($$INCLUDE_JS_Q("/static/js/domline.js")); + iframeHTML.push($$INCLUDE_JS_Q("/static/js/ace2_inner.js")); + + iframeHTML.push('\'\\n\\n\''); + iframeHTML.push('\' \''); + + var outerScript = 'editorId = "'+info.id+'"; editorInfo = parent.'+ + thisFunctionsName+'.registry[editorId]; '+ + 'window.onload = function() '+ + '{ window.onload = null; setTimeout'+ + '(function() '+ + '{ var iframe = document.createElement("IFRAME"); '+ + 'iframe.scrolling = "no"; var outerdocbody = document.getElementById("outerdocbody"); '+ + 'iframe.frameBorder = 0; iframe.allowTransparency = true; '+ // for IE + 'outerdocbody.insertBefore(iframe, outerdocbody.firstChild); '+ + 'iframe.ace_outerWin = window; '+ + 'readyFunc = function() { editorInfo.onEditorReady(); readyFunc = null; editorInfo = null; }; '+ + 'var doc = iframe.contentWindow.document; doc.open(); doc.write('+ + iframeHTML.join('+')+'); doc.close(); '+ + '}, 0); }'; + + var outerHTML = [doctype, '', + $$INCLUDE_CSS("/static/css/editor.css"), + // bizarrely, in FF2, a file with no "external" dependencies won't finish loading properly + // (throbs busy while typing) + '', + '\x3cscript>', outerScript, '\x3c/script>', + '
x
']; + + + if (!Array.prototype.map) Array.prototype.map = function(fun) { //needed for IE + if (typeof fun != "function") throw new TypeError(); + var len = this.length; + var res = new Array(len); + var thisp = arguments[1]; + for (var i = 0; i < len; i++) { + if (i in this) res[i] = fun.call(thisp, this[i], i, this); + } + return res; + }; + + var outerFrame = document.createElement("IFRAME"); + outerFrame.frameBorder = 0; // for IE + info.frame = outerFrame; + document.getElementById(containerId).appendChild(outerFrame); + + var editorDocument = outerFrame.contentWindow.document; + + editorDocument.open(); + editorDocument.write(outerHTML.join('')); + editorDocument.close(); + })(); + }; + + return editor; +} diff --git a/static/js/ace.js.old b/static/js/ace.js.old new file mode 100644 index 000000000..42c3cf28a --- /dev/null +++ b/static/js/ace.js.old @@ -0,0 +1,30 @@ +Ace2Editor.registry={nextId:1};function Ace2Editor(){var K="Ace2Editor";var F=Ace2Editor;var B={};var A={editor:B,id:(F.registry.nextId++)}; +var D=false;var E=[];function C(R,Q){return function(){var T=this;var S=arguments;function U(){R.apply(T,S); +}if(Q){Q.apply(T,S);}if(D){U();}else{E.push(U);}};}function I(){for(var Q=0;Q';};var J=function(Q){return'\x3cscript type="text/javascript" src="'+Q+'">\x3c/script>'; +};var M=J;var N=H;var L=function(Q){return'\''"; +};var G=function(Q){return'\'\\x3cscript type="text/javascript" src="'+Q+"\">\\x3c/script>'";};var P=G; +var O=L;B.destroy=C(function(){A.ace_dispose();A.frame.parentNode.removeChild(A.frame);delete F.registry[A.id]; +A=null;});B.init=function(Q,S,R){B.importText(S);A.onEditorReady=function(){D=true;I();R();};(function(){var W=''; +var T=["'"+W+"'"];plugins.callHook("aceInitInnerdocbodyHead",{iframeHTML:T});T.push(("('\\n\'');T.push('\' \''); +var X='editorId = "'+A.id+'"; editorInfo = parent.'+K+'.registry[editorId]; window.onload = function() { window.onload = null; setTimeout(function() { var iframe = document.createElement("IFRAME"); iframe.scrolling = "no"; var outerdocbody = document.getElementById("outerdocbody"); iframe.frameBorder = 0; iframe.allowTransparency = true; outerdocbody.insertBefore(iframe, outerdocbody.firstChild); iframe.ace_outerWin = window; readyFunc = function() { editorInfo.onEditorReady(); readyFunc = null; editorInfo = null; }; var doc = iframe.contentWindow.document; doc.open(); doc.write('+T.join("+")+"); doc.close(); }, 0); }"; +var Y=[W,"",(''),'',"\x3cscript>",X,"\x3c/script>",'
x
']; +if(!Array.prototype.map){Array.prototype.map=function(b){if(typeof b!="function"){throw new TypeError(); +}var a=this.length;var c=new Array(a);var d=arguments[1];for(var Z=0;Z, time: +new Date()} + return info.ace_getUnhandledErrors(); + }; + + editor.callWithAce = pendingInit(function(fn, callStack, normalize) { + return info.ace_callWithAce(fn, callStack, normalize); + }); + + editor.execCommand = pendingInit(function(cmd, arg1) { + info.ace_execCommand(cmd, arg1); + }); + editor.replaceRange = pendingInit(function(start, end, text) { + info.ace_replaceRange(start, end, text); + }); + + + // calls to these functions ($$INCLUDE_...) are replaced when this file is processed + // and compressed, putting the compressed code from the named file directly into the + // source here. + + /*var $$INCLUDE_CSS = function(fileName) { + return ''; + }; + var $$INCLUDE_JS = function(fileName) { + return '\x3cscript type="text/javascript" src="'+fileName+'">\x3c/script>'; + }; + var $$INCLUDE_JS_DEV = $$INCLUDE_JS; + var $$INCLUDE_CSS_DEV = $$INCLUDE_CSS; + + var $$INCLUDE_CSS_Q = function(fileName) { + return '\'\''; + }; + var $$INCLUDE_JS_Q = function(fileName) { + return '\'\\x3cscript type="text/javascript" src="'+fileName+'">\\x3c/script>\''; + }; + var $$INCLUDE_JS_Q_DEV = $$INCLUDE_JS_Q; + var $$INCLUDE_CSS_Q_DEV = $$INCLUDE_CSS_Q;*/ + + editor.destroy = pendingInit(function() { + info.ace_dispose(); + info.frame.parentNode.removeChild(info.frame); + delete ace2.registry[info.id]; + info = null; // prevent IE 6 closure memory leaks + }); + + editor.init = function(containerId, initialCode, doneFunc) { + + editor.importText(initialCode); + + info.onEditorReady = function() { + loaded = true; + doActionsPendingInit(); + doneFunc(); + }; + + (function() { + var doctype = ''; + + var iframeHTML = ["'"+doctype+"'"]; + + plugins.callHook( + "aceInitInnerdocbodyHead", {iframeHTML:iframeHTML}); + + // these lines must conform to a specific format because they are passed by the build script: + //iframeHTML.push($$INCLUDE_CSS_Q("editor.css syntax.css inner.css")); + + iframeHTML.push('\'\''); + iframeHTML.push('\'\''); + iframeHTML.push('\'\''); + + //iframeHTML.push(INCLUDE_JS_Q_DEV("ace2_common_dev.js")); + //iframeHTML.push(INCLUDE_JS_Q_DEV("profiler.js")); + // iframeHTML.push($$INCLUDE_JS_Q("ace2_common.js skiplist.js virtual_lines.js easysync2.js cssmanager.js colorutils.js undomodule.js contentcollector.js changesettracker.js linestylefilter.js domline.js")); + //iframeHTML.push($$INCLUDE_JS_Q("ace2_inner.js")); + + iframeHTML.push('\'\\x3cscript type="text/javascript" src="/static/js/ace2_common.js">\\x3c/script>\''); + iframeHTML.push('\'\\x3cscript type="text/javascript" src="/static/js/skiplist.js">\\x3c/script>\''); + iframeHTML.push('\'\\x3cscript type="text/javascript" src="/static/js/virtual_lines.js">\\x3c/script>\''); + iframeHTML.push('\'\\x3cscript type="text/javascript" src="/static/js/easysync2.js">\\x3c/script>\''); + iframeHTML.push('\'\\x3cscript type="text/javascript" src="/static/js/cssmanager.js">\\x3c/script>\''); + iframeHTML.push('\'\\x3cscript type="text/javascript" src="/static/js/colorutils.js">\\x3c/script>\''); + iframeHTML.push('\'\\x3cscript type="text/javascript" src="/static/js/undomodule.js">\\x3c/script>\''); + iframeHTML.push('\'\\x3cscript type="text/javascript" src="/static/js/contentcollector.js">\\x3c/script>\''); + iframeHTML.push('\'\\x3cscript type="text/javascript" src="/static/js/changesettracker.js">\\x3c/script>\''); + iframeHTML.push('\'\\x3cscript type="text/javascript" src="/static/js/linestylefilter.js">\\x3c/script>\''); + iframeHTML.push('\'\\x3cscript type="text/javascript" src="/static/js/domline.js">\\x3c/script>\''); + iframeHTML.push('\'\\x3cscript type="text/javascript" src="/static/js/ace2_inner.js">\\x3c/script>\''); + + iframeHTML.push('\'\\n\\n\''); + iframeHTML.push('\' \''); + + var outerScript = 'editorId = "'+info.id+'"; editorInfo = parent.'+ + thisFunctionsName+'.registry[editorId]; '+ + 'window.onload = function() '+ + '{ window.onload = null; setTimeout'+ + '(function() '+ + '{ var iframe = document.createElement("IFRAME"); '+ + 'iframe.scrolling = "no"; var outerdocbody = document.getElementById("outerdocbody"); '+ + 'iframe.frameBorder = 0; iframe.allowTransparency = true; '+ // for IE + 'outerdocbody.insertBefore(iframe, outerdocbody.firstChild); '+ + 'iframe.ace_outerWin = window; '+ + 'readyFunc = function() { editorInfo.onEditorReady(); readyFunc = null; editorInfo = null; }; '+ + 'var doc = iframe.contentWindow.document; doc.open(); doc.write('+ + iframeHTML.join('+')+'); doc.close(); '+ + '}, 0); }'; + + var outerHTML = [doctype, '', + '', + // bizarrely, in FF2, a file with no "external" dependencies won't finish loading properly + // (throbs busy while typing) + '', + '\x3cscript>', outerScript, '\x3c/script>', + '
x
']; + + + if (!Array.prototype.map) Array.prototype.map = function(fun) { //needed for IE + if (typeof fun != "function") throw new TypeError(); + var len = this.length; + var res = new Array(len); + var thisp = arguments[1]; + for (var i = 0; i < len; i++) { + if (i in this) res[i] = fun.call(thisp, this[i], i, this); + } + return res; + }; + + var outerFrame = document.createElement("IFRAME"); + outerFrame.frameBorder = 0; // for IE + info.frame = outerFrame; + document.getElementById(containerId).appendChild(outerFrame); + + var editorDocument = outerFrame.contentWindow.document; + + editorDocument.open(); + editorDocument.write(outerHTML.join('')); + editorDocument.close(); + })(); + }; + + return editor; +} diff --git a/static/js/ace2_common.js b/static/js/ace2_common.js new file mode 100644 index 000000000..4a08de6f0 --- /dev/null +++ b/static/js/ace2_common.js @@ -0,0 +1,115 @@ +/** + * Copyright 2009 Google Inc. + * + * 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. + */ + + +function isNodeText(node) { + return (node.nodeType == 3); +} + +function object(o) { + var f = function() {}; + f.prototype = o; + return new f(); +} + +function extend(obj, props) { + for(var p in props) { + obj[p] = props[p]; + } + return obj; +} + +function forEach(array, func) { + for(var i=0;i 1) { + var x = Math.floor((low+high)/2); // x != low, x != high + if (func(x)) high = x; + else low = x; + } + return high; +} + +function binarySearchInfinite(expectedLength, func) { + var i = 0; + while (!func(i)) i += expectedLength; + return binarySearch(i, func); +} + +function htmlPrettyEscape(str) { + return str.replace(/&/g, '&').replace(//g, '>') + .replace(/\r?\n/g, '\\n'); +} diff --git a/static/js/ace2_inner.js b/static/js/ace2_inner.js new file mode 100644 index 000000000..680e8cd04 --- /dev/null +++ b/static/js/ace2_inner.js @@ -0,0 +1,4588 @@ +/** + * Copyright 2009 Google Inc. + * + * 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. + */ + +function OUTER(gscope) { + + var DEBUG=true;//$$ build script replaces the string "var DEBUG=true;//$$" with "var DEBUG=false;" + + var isSetUp = false; + + var THE_TAB = ' ';//4 + var MAX_LIST_LEVEL = 8; + + var LINE_NUMBER_PADDING_RIGHT = 4; + var LINE_NUMBER_PADDING_LEFT = 4; + var MIN_LINEDIV_WIDTH = 20; + var EDIT_BODY_PADDING_TOP = 8; + var EDIT_BODY_PADDING_LEFT = 8; + + var caughtErrors = []; + + var thisAuthor = ''; + + var disposed = false; + + var editorInfo = parent.editorInfo; + + var iframe = window.frameElement; + var outerWin = iframe.ace_outerWin; + iframe.ace_outerWin = null; // prevent IE 6 memory leak + var sideDiv = iframe.nextSibling; + var lineMetricsDiv = sideDiv.nextSibling; + var overlaysdiv = lineMetricsDiv.nextSibling; + initLineNumbers(); + + var outsideKeyDown = function(evt) {}; + var outsideKeyPress = function(evt) { return true; }; + var outsideNotifyDirty = function() {}; + + // selFocusAtStart -- determines whether the selection extends "backwards", so that the focus + // point (controlled with the arrow keys) is at the beginning; not supported in IE, though + // native IE selections have that behavior (which we try not to interfere with). + // Must be false if selection is collapsed! + var rep = { lines: newSkipList(), selStart: null, selEnd: null, selFocusAtStart: false, + alltext: "", alines: [], + apool: new AttribPool() }; + // lines, alltext, alines, and DOM are set up in setup() + if (undoModule.enabled) { + undoModule.apool = rep.apool; + } + + var root, doc; // set in setup() + + var isEditable = true; + var doesWrap = true; + var hasLineNumbers = true; + var isStyled = true; + + // space around the innermost iframe element + var iframePadLeft = MIN_LINEDIV_WIDTH + LINE_NUMBER_PADDING_RIGHT + EDIT_BODY_PADDING_LEFT; + var iframePadTop = EDIT_BODY_PADDING_TOP; + var iframePadBottom = 0, iframePadRight = 0; + + var console = (DEBUG && top.console); + if (! console) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", + "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; + console = {}; + for (var i = 0; i < names.length; ++i) + console[names[i]] = function() {}; + //console.error = function(str) { alert(str); }; + } + var PROFILER = window.PROFILER; + if (!PROFILER) { + PROFILER = function() { return {start:noop, mark:noop, literal:noop, end:noop, cancel:noop}; }; + } + function noop() {} + function identity(x) { return x; } + + // "dmesg" is for displaying messages in the in-page output pane + // visible when "?djs=1" is appended to the pad URL. It generally + // remains a no-op unless djs is enabled, but we make a habit of + // only calling it in error cases or while debugging. + var dmesg = noop; + window.dmesg = noop; + + var scheduler = parent; + + var textFace = 'monospace'; + var textSize = 12; + function textLineHeight() { return Math.round(textSize * 4/3); } + + var dynamicCSS = null; + function initDynamicCSS() { + dynamicCSS = makeCSSManager("dynamicsyntax"); + } + + var changesetTracker = makeChangesetTracker(scheduler, rep.apool, { + withCallbacks: function(operationName, f) { + inCallStackIfNecessary(operationName, function() { + fastIncorp(1); + f({ + setDocumentAttributedText: function(atext) { + setDocAText(atext); + }, + applyChangesetToDocument: function(changeset, preferInsertionAfterCaret) { + var oldEventType = currentCallStack.editEvent.eventType; + currentCallStack.startNewEvent("nonundoable"); + + performDocumentApplyChangeset(changeset, preferInsertionAfterCaret); + + currentCallStack.startNewEvent(oldEventType); + } + }); + }); + } + }); + + var authorInfos = {}; // presence of key determines if author is present in doc + + function setAuthorInfo(author, info) { + if ((typeof author) != "string") { + throw new Error("setAuthorInfo: author ("+author+") is not a string"); + } + if (! info) { + delete authorInfos[author]; + if (dynamicCSS) { + dynamicCSS.removeSelectorStyle(getAuthorColorClassSelector(getAuthorClassName(author))); + } + } + else { + authorInfos[author] = info; + if (info.bgcolor) { + if (dynamicCSS) { + var bgcolor = info.bgcolor; + if ((typeof info.fade) == "number") { + bgcolor = fadeColor(bgcolor, info.fade); + } + + dynamicCSS.selectorStyle(getAuthorColorClassSelector( + getAuthorClassName(author))).backgroundColor = bgcolor; + } + } + } + } + + function getAuthorClassName(author) { + return "author-"+author.replace(/[^a-y0-9]/g, function(c) { + if (c == ".") return "-"; + return 'z'+c.charCodeAt(0)+'z'; + }); + } + function className2Author(className) { + if (className.substring(0,7) == "author-") { + return className.substring(7).replace(/[a-y0-9]+|-|z.+?z/g, function(cc) { + if (cc == '-') return '.'; + else if (cc.charAt(0) == 'z') { + return String.fromCharCode(Number(cc.slice(1,-1))); + } + else { + return cc; + } + }); + } + return null; + } + function getAuthorColorClassSelector(oneClassName) { + return ".authorColors ."+oneClassName; + } + function setUpTrackingCSS() { + if (dynamicCSS) { + var backgroundHeight = lineMetricsDiv.offsetHeight; + var lineHeight = textLineHeight(); + var extraBodding = 0; + var extraTodding = 0; + if (backgroundHeight < lineHeight) { + extraBodding = Math.ceil((lineHeight - backgroundHeight)/2); + extraTodding = lineHeight - backgroundHeight - extraBodding; + } + var spanStyle = dynamicCSS.selectorStyle("#innerdocbody span"); + spanStyle.paddingTop = extraTodding+"px"; + spanStyle.paddingBottom = extraBodding+"px"; + } + } + function boldColorFromColor(lightColorCSS) { + var color = colorutils.css2triple(lightColorCSS); + + // amp up the saturation to full + color = colorutils.saturate(color); + + // normalize brightness based on luminosity + color = colorutils.scaleColor(color, 0, 0.5 / colorutils.luminosity(color)); + + return colorutils.triple2css(color); + } + function fadeColor(colorCSS, fadeFrac) { + var color = colorutils.css2triple(colorCSS); + color = colorutils.blend(color, [1,1,1], fadeFrac); + return colorutils.triple2css(color); + } + + function doAlert(str) { + scheduler.setTimeout(function() { alert(str); }, 0); + } + + editorInfo.ace_getRep = function () { + return rep; + } + + var currentCallStack = null; + function inCallStack(type, action) { + if (disposed) return; + + if (currentCallStack) { + console.error("Can't enter callstack "+type+", already in "+ + currentCallStack.type); + } + + var profiling = false; + function profileRest() { + profiling = true; + console.profile(); + } + + function newEditEvent(eventType) { + return {eventType:eventType, backset: null}; + } + + function submitOldEvent(evt) { + if (rep.selStart && rep.selEnd) { + var selStartChar = + rep.lines.offsetOfIndex(rep.selStart[0]) + rep.selStart[1]; + var selEndChar = + rep.lines.offsetOfIndex(rep.selEnd[0]) + rep.selEnd[1]; + evt.selStart = selStartChar; + evt.selEnd = selEndChar; + evt.selFocusAtStart = rep.selFocusAtStart; + } + if (undoModule.enabled) { + var undoWorked = false; + try { + if (evt.eventType == "setup" || evt.eventType == "importText" || + evt.eventType == "setBaseText") { + undoModule.clearHistory(); + } + else if (evt.eventType == "nonundoable") { + if (evt.changeset) { + undoModule.reportExternalChange(evt.changeset); + } + } + else { + undoModule.reportEvent(evt); + } + undoWorked = true; + } + finally { + if (! undoWorked) { + undoModule.enabled = false; // for safety + } + } + } + } + + function startNewEvent(eventType, dontSubmitOld) { + var oldEvent = currentCallStack.editEvent; + if (! dontSubmitOld) { + submitOldEvent(oldEvent); + } + currentCallStack.editEvent = newEditEvent(eventType); + return oldEvent; + } + + currentCallStack = {type: type, docTextChanged: false, selectionAffected: false, + userChangedSelection: false, + domClean: false, profileRest:profileRest, + isUserChange: false, // is this a "user change" type of call-stack + repChanged: false, editEvent: newEditEvent(type), + startNewEvent:startNewEvent}; + var cleanExit = false; + var result; + try { + result = action(); + //console.log("Just did action for: "+type); + cleanExit = true; + } + catch (e) { + caughtErrors.push({error: e, time: +new Date()}); + dmesg(e.toString()); + throw e; + } + finally { + var cs = currentCallStack; + //console.log("Finished action for: "+type); + if (cleanExit) { + submitOldEvent(cs.editEvent); + if (cs.domClean && cs.type != "setup") { + if (cs.isUserChange) { + if (cs.repChanged) parenModule.notifyChange(); + else parenModule.notifyTick(); + } + recolorModule.recolorLines(); + if (cs.selectionAffected) { + updateBrowserSelectionFromRep(); + } + if ((cs.docTextChanged || cs.userChangedSelection) && cs.type != "applyChangesToBase") { + scrollSelectionIntoView(); + } + if (cs.docTextChanged && cs.type.indexOf("importText") < 0) { + outsideNotifyDirty(); + } + } + } + else { + // non-clean exit + if (currentCallStack.type == "idleWorkTimer") { + idleWorkTimer.atLeast(1000); + } + } + currentCallStack = null; + if (profiling) console.profileEnd(); + } + return result; + } + editorInfo.ace_inCallStack = inCallStack; + + function inCallStackIfNecessary(type, action) { + if (! currentCallStack) { + inCallStack(type, action); + } + else { + action(); + } + } + editorInfo.ace_inCallStackIfNecessary = inCallStackIfNecessary; + + function recolorLineByKey(key) { + if (rep.lines.containsKey(key)) { + var offset = rep.lines.offsetOfKey(key); + var width = rep.lines.atKey(key).width; + recolorLinesInRange(offset, offset + width); + } + } + + function getLineKeyForOffset(charOffset) { + return rep.lines.atOffset(charOffset).key; + } + + var recolorModule = (function() { + var dirtyLineKeys = {}; + + var module = {}; + module.setCharNeedsRecoloring = function(offset) { + if (offset >= rep.alltext.length) { + offset = rep.alltext.length-1; + } + dirtyLineKeys[getLineKeyForOffset(offset)] = true; + } + + module.setCharRangeNeedsRecoloring = function(offset1, offset2) { + if (offset1 >= rep.alltext.length) { + offset1 = rep.alltext.length-1; + } + if (offset2 >= rep.alltext.length) { + offset2 = rep.alltext.length-1; + } + var firstEntry = rep.lines.atOffset(offset1); + var lastKey = rep.lines.atOffset(offset2).key; + dirtyLineKeys[lastKey] = true; + var entry = firstEntry; + while (entry && entry.key != lastKey) { + dirtyLineKeys[entry.key] = true; + entry = rep.lines.next(entry); + } + } + + module.recolorLines = function() { + for(var k in dirtyLineKeys) { + recolorLineByKey(k); + } + dirtyLineKeys = {}; + } + + return module; + })(); + + var parenModule = (function() { + var module = {}; + module.notifyTick = function() { handleFlashing(false); }; + module.notifyChange = function() { handleFlashing(true); }; + module.shouldNormalizeOnChar = function (c) { + if (parenFlashRep.active) { + // avoid highlight style from carrying on to typed text + return true; + } + c = String.fromCharCode(c); + return !! (bracketMap[c]); + } + + var parenFlashRep = { active: false, whichChars: null, whichLineKeys: null, expireTime: null }; + var bracketMap = {'(': 1, ')':-1, '[':2, ']':-2, '{':3, '}':-3}; + var bracketRegex = /[{}\[\]()]/g; + function handleFlashing(docChanged) { + function getSearchRange(aroundLoc) { + var rng = getVisibleCharRange(); + var d = 100; // minimum radius + var e = 3000; // maximum radius; + if (rng[0] > aroundLoc-d) rng[0] = aroundLoc-d; + if (rng[0] < aroundLoc-e) rng[0] = aroundLoc-e; + if (rng[0] < 0) rng[0] = 0; + if (rng[1] < aroundLoc+d) rng[1] = aroundLoc+d; + if (rng[1] > aroundLoc+e) rng[1] = aroundLoc+e; + if (rng[1] > rep.lines.totalWidth()) rng[1] = rep.lines.totalWidth(); + return rng; + } + function findMatchingVisibleBracket(startLoc, forwards) { + var rng = getSearchRange(startLoc); + var str = rep.alltext.substring(rng[0], rng[1]); + var bstr = str.replace(bracketRegex, '('); // handy for searching + var loc = startLoc - rng[0]; + var bracketState = []; + var foundParen = false; + var goodParen = false; + function nextLoc() { + if (loc < 0) return; + if (forwards) loc++; else loc--; + if (loc < 0 || loc >= str.length) loc = -1; + if (loc >= 0) { + if (forwards) loc = bstr.indexOf('(', loc); + else loc = bstr.lastIndexOf('(', loc); + } + } + while ((! foundParen) && (loc >= 0)) { + if (getCharType(loc + rng[0]) == "p") { + var b = bracketMap[str.charAt(loc)]; // -1, 1, -2, 2, -3, 3 + var into = forwards; + var typ = b; + if (typ < 0) { into = ! into; typ = -typ; } + if (into) bracketState.push(typ); + else { + var recent = bracketState.pop(); + if (recent != typ) { + foundParen = true; goodParen = false; + } + else if (bracketState.length == 0) { + foundParen = true; goodParen = true; + } + } + } + //console.log(bracketState.toSource()); + if ((! foundParen) && (loc >= 0)) nextLoc(); + } + if (! foundParen) return null; + return {chr: (loc + rng[0]), good: goodParen}; + } + + var r = parenFlashRep; + var charsToHighlight = null; + var linesToUnhighlight = null; + if (r.active && (docChanged || (now() > r.expireTime))) { + linesToUnhighlight = r.whichLineKeys; + r.active = false; + } + if ((! r.active) && docChanged && isCaret() && caretColumn() > 0) { + var caret = caretDocChar(); + if (caret > 0 && getCharType(caret-1) == "p") { + var charBefore = rep.alltext.charAt(caret-1); + if (bracketMap[charBefore]) { + var lookForwards = (bracketMap[charBefore] > 0); + var findResult = findMatchingVisibleBracket(caret-1, lookForwards); + if (findResult) { + var mateLoc = findResult.chr; + var mateGood = findResult.good; + r.active = true; + charsToHighlight = {}; + charsToHighlight[caret-1] = 'flash'; + charsToHighlight[mateLoc] = (mateGood ? 'flash' : 'flashbad'); + r.whichLineKeys = []; + r.whichLineKeys.push(getLineKeyForOffset(caret-1)); + r.whichLineKeys.push(getLineKeyForOffset(mateLoc)); + r.expireTime = now() + 4000; + newlyActive = true; + } + } + } + + } + if (linesToUnhighlight) { + recolorLineByKey(linesToUnhighlight[0]); + recolorLineByKey(linesToUnhighlight[1]); + } + if (r.active && charsToHighlight) { + function f(txt, cls, next, ofst) { + var flashClass = charsToHighlight[ofst]; + if (cls) { + next(txt, cls+" "+flashClass); + } + else next(txt, cls); + } + for(var c in charsToHighlight) { + recolorLinesInRange((+c), (+c)+1, null, f); + } + } + } + + return module; + })(); + + function dispose() { + disposed = true; + if (idleWorkTimer) idleWorkTimer.never(); + teardown(); + } + + function checkALines() { + return; // disable for speed + function error() { throw new Error("checkALines"); } + if (rep.alines.length != rep.lines.length()) { + error(); + } + for(var i=0;i