]> gitweb.factorcode.org Git - factor.git/commitdiff
Merge branch 'master' into xml
authorDaniel Ehrenberg <ehrenbed@carleton.edu>
Wed, 19 Dec 2007 17:40:55 +0000 (12:40 -0500)
committerDaniel Ehrenberg <ehrenbed@carleton.edu>
Wed, 19 Dec 2007 17:40:55 +0000 (12:40 -0500)
Conflicts:

extra/rss/rss.factor
extra/sequences/lib/lib.factor
extra/xml/data/data.factor

415 files changed:
Makefile
README.txt
core/alien/syntax/syntax.factor [changed mode: 0644->0755]
core/assocs/assocs-tests.factor
core/assocs/assocs.factor
core/bootstrap/image/image-docs.factor
core/bootstrap/stage2.factor
core/classes/classes-docs.factor
core/combinators/combinators.factor
core/compiler/compiler.factor
core/compiler/test/curry.factor
core/compiler/test/simple.factor
core/continuations/continuations-docs.factor
core/generator/generator-docs.factor
core/generic/math/math-docs.factor
core/hashtables/hashtables-docs.factor
core/io/files/files-docs.factor
core/io/files/files.factor
core/io/io-docs.factor
core/kernel/kernel-docs.factor
core/kernel/kernel.factor
core/libc/libc-docs.factor
core/math/math-docs.factor
core/optimizer/known-words/known-words.factor
core/optimizer/math/math.factor
core/prettyprint/backend/backend-docs.factor
core/prettyprint/backend/backend.factor
core/sequences/sequences.factor
core/slots/slots-docs.factor
extra/bake/authors.txt [new file with mode: 0644]
extra/bake/summary.txt [new file with mode: 0644]
extra/benchmark/reverse-complement/reverse-complement.factor
extra/browser/analyzer/analyzer.factor [deleted file]
extra/browser/parser/parser-tests.factor [deleted file]
extra/browser/parser/parser.factor [deleted file]
extra/browser/printer/printer.factor [deleted file]
extra/browser/utils/utils-tests.factor [deleted file]
extra/browser/utils/utils.factor [deleted file]
extra/cabal/authors.txt [new file with mode: 0644]
extra/cabal/summary.txt [new file with mode: 0644]
extra/cabal/ui/authors.txt [new file with mode: 0644]
extra/cabal/ui/summary.txt [new file with mode: 0644]
extra/calendar/calendar.factor
extra/cfdg/summary.txt [new file with mode: 0644]
extra/channels/remote/remote-docs.factor
extra/combinators/lib/lib-docs.factor
extra/combinators/lib/lib-tests.factor
extra/combinators/lib/lib.factor
extra/concurrency/concurrency-docs.factor
extra/crypto/common/common-docs.factor
extra/delegate/delegate.factor
extra/documents/documents.factor
extra/editors/editpadpro/editpadpro.factor
extra/editors/editplus/authors.txt [new file with mode: 0644]
extra/editors/editplus/editplus.factor [new file with mode: 0755]
extra/editors/editplus/summary.txt [new file with mode: 0644]
extra/editors/emeditor/authors.txt [new file with mode: 0644]
extra/editors/emeditor/emeditor.factor [new file with mode: 0755]
extra/editors/emeditor/summary.txt [new file with mode: 0644]
extra/editors/gvim/gvim.factor
extra/editors/gvim/unix/unix.factor [new file with mode: 0644]
extra/editors/gvim/windows/windows.factor [new file with mode: 0644]
extra/editors/notepadpp/notepadpp.factor
extra/editors/ted-notepad/authors.txt [new file with mode: 0644]
extra/editors/ted-notepad/summary.txt [new file with mode: 0644]
extra/editors/ted-notepad/ted-notepad.factor [new file with mode: 0644]
extra/editors/ultraedit/authors.txt [new file with mode: 0644]
extra/editors/ultraedit/summary.txt [new file with mode: 0644]
extra/editors/ultraedit/ultraedit.factor [new file with mode: 0644]
extra/editors/wordpad/authors.txt [new file with mode: 0644]
extra/editors/wordpad/summary.txt [new file with mode: 0644]
extra/editors/wordpad/wordpad.factor [new file with mode: 0644]
extra/faq/faq.factor [new file with mode: 0644]
extra/furnace/authors.txt [new file with mode: 0644]
extra/furnace/furnace-tests.factor
extra/furnace/furnace.factor
extra/furnace/scaffold/crud-templates/edit.furnace [deleted file]
extra/furnace/scaffold/crud-templates/list.furnace [deleted file]
extra/furnace/scaffold/crud-templates/show.furnace [deleted file]
extra/furnace/scaffold/scaffold.factor [deleted file]
extra/furnace/sessions/sessions.factor [new file with mode: 0644]
extra/globs/globs.factor [changed mode: 0644->0755]
extra/hardware-info/windows/ce/ce.factor
extra/hardware-info/windows/nt/nt.factor
extra/hardware-info/windows/windows.factor
extra/help/handbook/Untitled-15 [deleted file]
extra/help/handbook/handbook.factor
extra/help/help-docs.factor
extra/help/help.factor
extra/help/lint/lint-docs.factor
extra/help/lint/lint.factor
extra/html/parser/analyzer/analyzer.factor [new file with mode: 0755]
extra/html/parser/parser-tests.factor [new file with mode: 0644]
extra/html/parser/parser.factor [new file with mode: 0644]
extra/html/parser/printer/printer.factor [new file with mode: 0644]
extra/html/parser/utils/utils-tests.factor [new file with mode: 0644]
extra/html/parser/utils/utils.factor [new file with mode: 0644]
extra/http/http.factor
extra/id3/id3.factor
extra/io/paths/paths.factor [new file with mode: 0644]
extra/io/windows/ce/files/files.factor
extra/io/windows/launcher/launcher.factor
extra/io/windows/mmap/mmap.factor
extra/io/windows/nt/backend/backend.factor
extra/io/windows/nt/files/files.factor
extra/io/windows/windows.factor
extra/lazy-lists/lazy-lists-docs.factor
extra/locals/locals-docs.factor
extra/math/functions/functions-docs.factor
extra/models/models-docs.factor
extra/multiline/authors.txt [new file with mode: 0644]
extra/multiline/multiline-docs.factor [new file with mode: 0644]
extra/multiline/multiline-tests.factor [new file with mode: 0644]
extra/multiline/multiline.factor [new file with mode: 0644]
extra/multiline/summary.txt [new file with mode: 0644]
extra/nehe/4/4.factor
extra/parser-combinators/parser-combinators-tests.factor
extra/parser-combinators/parser-combinators.factor
extra/parser-combinators/replace/replace-docs.factor
extra/parser-combinators/simple/simple-docs.factor
extra/peg/ebnf/ebnf-tests.factor
extra/peg/ebnf/ebnf.factor
extra/peg/peg-docs.factor
extra/peg/peg.factor
extra/peg/pl0/pl0-tests.factor
extra/peg/pl0/pl0.factor
extra/prolog/authors.txt [new file with mode: 0644]
extra/prolog/prolog.factor [new file with mode: 0644]
extra/prolog/summary.txt [new file with mode: 0644]
extra/prolog/tags.txt [new file with mode: 0644]
extra/promises/promises-docs.factor
extra/random-tester/databank/databank.factor [new file with mode: 0644]
extra/random-tester/random-tester.factor [new file with mode: 0644]
extra/random-tester/random/random.factor [new file with mode: 0755]
extra/random-tester/safe-words/safe-words.factor [new file with mode: 0644]
extra/random-tester/utils/utils.factor [new file with mode: 0644]
extra/raptor/cronjobs.factor
extra/raptor/raptor.factor
extra/raptor/readme [new file with mode: 0644]
extra/raptor/readme-0.1.1 [deleted file]
extra/regexp/regexp-tests.factor [changed mode: 0644->0755]
extra/regexp/regexp.factor [changed mode: 0644->0755]
extra/rss/reader/reader.factor [deleted file]
extra/rss/rss.factor
extra/sequences/lib/lib-tests.factor
extra/sequences/lib/lib.factor
extra/serialize/serialize-docs.factor
extra/shuffle/shuffle.factor
extra/shufflers/shufflers.factor
extra/springies/authors.txt [new file with mode: 0644]
extra/springies/models/2x2snake/deploy.factor [new file with mode: 0644]
extra/springies/summary.txt [new file with mode: 0644]
extra/springies/tags.factor [new file with mode: 0644]
extra/sqlite/sqlite-docs.factor
extra/sqlite/tuple-db/tuple-db-docs.factor
extra/store/store-tests.factor
extra/store/store.factor
extra/tools/browser/browser-docs.factor
extra/tools/browser/browser.factor
extra/tools/deploy/config/config-docs.factor
extra/tools/deploy/windows/windows.factor
extra/tools/test/test.factor
extra/tuples/lib/lib-docs.factor
extra/ui/gadgets/editors/editors-tests.factor
extra/ui/gadgets/editors/editors.factor
extra/ui/gadgets/gadgets-docs.factor
extra/ui/gadgets/worlds/worlds-docs.factor
extra/ui/tools/deploy/deploy.factor
extra/ui/tools/interactor/interactor.factor
extra/ui/tools/search/search.factor
extra/ui/tools/tools.factor
extra/ui/windows/windows.factor
extra/webapps/article-manager/article-manager.factor
extra/webapps/article-manager/furnace/article.furnace
extra/webapps/article-manager/furnace/index.furnace
extra/webapps/article-manager/furnace/navigation.furnace
extra/webapps/article-manager/furnace/tag.furnace
extra/webapps/file/file.factor [changed mode: 0644->0755]
extra/webapps/fjsc/fjsc.factor
extra/webapps/help/help.factor
extra/webapps/pastebin/annotate-paste.furnace [changed mode: 0644->0755]
extra/webapps/pastebin/annotation.furnace [changed mode: 0644->0755]
extra/webapps/pastebin/footer.furnace [new file with mode: 0644]
extra/webapps/pastebin/header.furnace [new file with mode: 0644]
extra/webapps/pastebin/modes.furnace [new file with mode: 0644]
extra/webapps/pastebin/new-paste.furnace [changed mode: 0644->0755]
extra/webapps/pastebin/paste-list.furnace
extra/webapps/pastebin/paste-summary.furnace
extra/webapps/pastebin/pastebin.factor [changed mode: 0644->0755]
extra/webapps/pastebin/show-paste.furnace [changed mode: 0644->0755]
extra/webapps/pastebin/style.css [new file with mode: 0644]
extra/webapps/pastebin/syntax.furnace [new file with mode: 0755]
extra/webapps/planet/planet.factor
extra/webapps/planet/planet.fhtml [deleted file]
extra/webapps/planet/planet.furnace [new file with mode: 0644]
extra/webapps/planet/style.css [new file with mode: 0644]
extra/webapps/source/source.factor [new file with mode: 0755]
extra/windows/kernel32/kernel32.factor
extra/windows/messages/messages.factor
extra/windows/nt/nt.factor
extra/windows/shell32/shell32.factor [new file with mode: 0644]
extra/windows/types/types.factor
extra/windows/user32/user32.factor
extra/windows/windows.factor
extra/xml/data/data.factor
extra/xml/utilities/utilities.factor
extra/xmode/README.txt [new file with mode: 0755]
extra/xmode/authors.txt [new file with mode: 0644]
extra/xmode/catalog/catalog-tests.factor [new file with mode: 0644]
extra/xmode/catalog/catalog.factor [new file with mode: 0644]
extra/xmode/code2html/code2html.factor [new file with mode: 0755]
extra/xmode/code2html/stylesheet.css [new file with mode: 0644]
extra/xmode/keyword-map/keyword-map-tests.factor [new file with mode: 0644]
extra/xmode/keyword-map/keyword-map.factor [new file with mode: 0644]
extra/xmode/loader/loader.factor [new file with mode: 0755]
extra/xmode/marker/context/context.factor [new file with mode: 0644]
extra/xmode/marker/marker-tests.factor [new file with mode: 0755]
extra/xmode/marker/marker.factor [new file with mode: 0755]
extra/xmode/marker/state/state.factor [new file with mode: 0755]
extra/xmode/modes/actionscript.xml [new file with mode: 0644]
extra/xmode/modes/ada95.xml [new file with mode: 0644]
extra/xmode/modes/antlr.xml [new file with mode: 0644]
extra/xmode/modes/apacheconf.xml [new file with mode: 0644]
extra/xmode/modes/apdl.xml [new file with mode: 0644]
extra/xmode/modes/applescript.xml [new file with mode: 0644]
extra/xmode/modes/asp.xml [new file with mode: 0644]
extra/xmode/modes/aspect-j.xml [new file with mode: 0644]
extra/xmode/modes/assembly-m68k.xml [new file with mode: 0644]
extra/xmode/modes/assembly-macro32.xml [new file with mode: 0644]
extra/xmode/modes/assembly-mcs51.xml [new file with mode: 0644]
extra/xmode/modes/assembly-parrot.xml [new file with mode: 0644]
extra/xmode/modes/assembly-r2000.xml [new file with mode: 0644]
extra/xmode/modes/assembly-x86.xml [new file with mode: 0644]
extra/xmode/modes/awk.xml [new file with mode: 0644]
extra/xmode/modes/b.xml [new file with mode: 0644]
extra/xmode/modes/batch.xml [new file with mode: 0644]
extra/xmode/modes/bbj.xml [new file with mode: 0644]
extra/xmode/modes/bcel.xml [new file with mode: 0644]
extra/xmode/modes/bibtex.xml [new file with mode: 0644]
extra/xmode/modes/c.xml [new file with mode: 0644]
extra/xmode/modes/catalog [new file with mode: 0644]
extra/xmode/modes/chill.xml [new file with mode: 0644]
extra/xmode/modes/cil.xml [new file with mode: 0644]
extra/xmode/modes/clips.xml [new file with mode: 0644]
extra/xmode/modes/cobol.xml [new file with mode: 0644]
extra/xmode/modes/coldfusion.xml [new file with mode: 0644]
extra/xmode/modes/cplusplus.xml [new file with mode: 0644]
extra/xmode/modes/csharp.xml [new file with mode: 0644]
extra/xmode/modes/css.xml [new file with mode: 0644]
extra/xmode/modes/csv.xml [new file with mode: 0644]
extra/xmode/modes/cvs-commit.xml [new file with mode: 0644]
extra/xmode/modes/d.xml [new file with mode: 0644]
extra/xmode/modes/django.xml [new file with mode: 0644]
extra/xmode/modes/doxygen.xml [new file with mode: 0644]
extra/xmode/modes/dsssl.xml [new file with mode: 0644]
extra/xmode/modes/eiffel.xml [new file with mode: 0644]
extra/xmode/modes/embperl.xml [new file with mode: 0644]
extra/xmode/modes/erlang.xml [new file with mode: 0644]
extra/xmode/modes/factor.xml [new file with mode: 0644]
extra/xmode/modes/fhtml.xml [new file with mode: 0644]
extra/xmode/modes/forth.xml [new file with mode: 0644]
extra/xmode/modes/fortran.xml [new file with mode: 0644]
extra/xmode/modes/foxpro.xml [new file with mode: 0644]
extra/xmode/modes/freemarker.xml [new file with mode: 0644]
extra/xmode/modes/gettext.xml [new file with mode: 0644]
extra/xmode/modes/gnuplot.xml [new file with mode: 0644]
extra/xmode/modes/groovy.xml [new file with mode: 0644]
extra/xmode/modes/haskell.xml [new file with mode: 0644]
extra/xmode/modes/hex.xml [new file with mode: 0644]
extra/xmode/modes/hlsl.xml [new file with mode: 0644]
extra/xmode/modes/htaccess.xml [new file with mode: 0644]
extra/xmode/modes/html.xml [new file with mode: 0644]
extra/xmode/modes/i4gl.xml [new file with mode: 0644]
extra/xmode/modes/icon.xml [new file with mode: 0644]
extra/xmode/modes/idl.xml [new file with mode: 0644]
extra/xmode/modes/inform.xml [new file with mode: 0644]
extra/xmode/modes/ini.xml [new file with mode: 0644]
extra/xmode/modes/inno-setup.xml [new file with mode: 0644]
extra/xmode/modes/interlis.xml [new file with mode: 0644]
extra/xmode/modes/io.xml [new file with mode: 0644]
extra/xmode/modes/java.xml [new file with mode: 0644]
extra/xmode/modes/javacc.xml [new file with mode: 0644]
extra/xmode/modes/javascript.xml [new file with mode: 0644]
extra/xmode/modes/jcl.xml [new file with mode: 0644]
extra/xmode/modes/jhtml.xml [new file with mode: 0644]
extra/xmode/modes/jmk.xml [new file with mode: 0644]
extra/xmode/modes/jsp.xml [new file with mode: 0644]
extra/xmode/modes/latex.xml [new file with mode: 0644]
extra/xmode/modes/lilypond.xml [new file with mode: 0644]
extra/xmode/modes/lisp.xml [new file with mode: 0644]
extra/xmode/modes/literate-haskell.xml [new file with mode: 0644]
extra/xmode/modes/lotos.xml [new file with mode: 0644]
extra/xmode/modes/lua.xml [new file with mode: 0644]
extra/xmode/modes/mail.xml [new file with mode: 0644]
extra/xmode/modes/makefile.xml [new file with mode: 0644]
extra/xmode/modes/maple.xml [new file with mode: 0644]
extra/xmode/modes/ml.xml [new file with mode: 0644]
extra/xmode/modes/modula3.xml [new file with mode: 0644]
extra/xmode/modes/moin.xml [new file with mode: 0644]
extra/xmode/modes/mqsc.xml [new file with mode: 0644]
extra/xmode/modes/myghty.xml [new file with mode: 0644]
extra/xmode/modes/mysql.xml [new file with mode: 0644]
extra/xmode/modes/netrexx.xml [new file with mode: 0644]
extra/xmode/modes/nqc.xml [new file with mode: 0644]
extra/xmode/modes/nsis2.xml [new file with mode: 0644]
extra/xmode/modes/objective-c.xml [new file with mode: 0644]
extra/xmode/modes/objectrexx.xml [new file with mode: 0644]
extra/xmode/modes/occam.xml [new file with mode: 0644]
extra/xmode/modes/omnimark.xml [new file with mode: 0644]
extra/xmode/modes/pascal.xml [new file with mode: 0644]
extra/xmode/modes/patch.xml [new file with mode: 0644]
extra/xmode/modes/perl.xml [new file with mode: 0644]
extra/xmode/modes/php.xml [new file with mode: 0644]
extra/xmode/modes/pike.xml [new file with mode: 0644]
extra/xmode/modes/pl-sql.xml [new file with mode: 0644]
extra/xmode/modes/pl1.xml [new file with mode: 0644]
extra/xmode/modes/pop11.xml [new file with mode: 0644]
extra/xmode/modes/postscript.xml [new file with mode: 0644]
extra/xmode/modes/povray.xml [new file with mode: 0644]
extra/xmode/modes/powerdynamo.xml [new file with mode: 0644]
extra/xmode/modes/progress.xml [new file with mode: 0644]
extra/xmode/modes/prolog.xml [new file with mode: 0644]
extra/xmode/modes/props.xml [new file with mode: 0644]
extra/xmode/modes/psp.xml [new file with mode: 0644]
extra/xmode/modes/ptl.xml [new file with mode: 0644]
extra/xmode/modes/pvwave.xml [new file with mode: 0644]
extra/xmode/modes/pyrex.xml [new file with mode: 0644]
extra/xmode/modes/python.xml [new file with mode: 0644]
extra/xmode/modes/quake.xml [new file with mode: 0644]
extra/xmode/modes/rcp.xml [new file with mode: 0644]
extra/xmode/modes/rd.xml [new file with mode: 0644]
extra/xmode/modes/rebol.xml [new file with mode: 0644]
extra/xmode/modes/redcode.xml [new file with mode: 0644]
extra/xmode/modes/relax-ng-compact.xml [new file with mode: 0644]
extra/xmode/modes/rest.xml [new file with mode: 0644]
extra/xmode/modes/rfc.xml [new file with mode: 0644]
extra/xmode/modes/rhtml.xml [new file with mode: 0644]
extra/xmode/modes/rib.xml [new file with mode: 0644]
extra/xmode/modes/rpmspec.xml [new file with mode: 0644]
extra/xmode/modes/rtf.xml [new file with mode: 0644]
extra/xmode/modes/ruby.xml [new file with mode: 0644]
extra/xmode/modes/rview.xml [new file with mode: 0644]
extra/xmode/modes/sas.xml [new file with mode: 0644]
extra/xmode/modes/scheme.xml [new file with mode: 0644]
extra/xmode/modes/sdl_pr.xml [new file with mode: 0644]
extra/xmode/modes/sgml.xml [new file with mode: 0644]
extra/xmode/modes/shellscript.xml [new file with mode: 0644]
extra/xmode/modes/shtml.xml [new file with mode: 0644]
extra/xmode/modes/slate.xml [new file with mode: 0644]
extra/xmode/modes/smalltalk.xml [new file with mode: 0644]
extra/xmode/modes/smi-mib.xml [new file with mode: 0644]
extra/xmode/modes/splus.xml [new file with mode: 0644]
extra/xmode/modes/sql-loader.xml [new file with mode: 0644]
extra/xmode/modes/sqr.xml [new file with mode: 0644]
extra/xmode/modes/squidconf.xml [new file with mode: 0644]
extra/xmode/modes/ssharp.xml [new file with mode: 0644]
extra/xmode/modes/svn-commit.xml [new file with mode: 0644]
extra/xmode/modes/swig.xml [new file with mode: 0644]
extra/xmode/modes/tcl.xml [new file with mode: 0644]
extra/xmode/modes/tex.xml [new file with mode: 0644]
extra/xmode/modes/texinfo.xml [new file with mode: 0644]
extra/xmode/modes/text.xml [new file with mode: 0644]
extra/xmode/modes/tpl.xml [new file with mode: 0644]
extra/xmode/modes/tsql.xml [new file with mode: 0644]
extra/xmode/modes/tthtml.xml [new file with mode: 0644]
extra/xmode/modes/twiki.xml [new file with mode: 0644]
extra/xmode/modes/typoscript.xml [new file with mode: 0644]
extra/xmode/modes/uscript.xml [new file with mode: 0644]
extra/xmode/modes/vbscript.xml [new file with mode: 0644]
extra/xmode/modes/velocity.xml [new file with mode: 0644]
extra/xmode/modes/verilog.xml [new file with mode: 0644]
extra/xmode/modes/vhdl.xml [new file with mode: 0644]
extra/xmode/modes/xml.xml [new file with mode: 0644]
extra/xmode/modes/xq.xml [new file with mode: 0644]
extra/xmode/modes/xsl.xml [new file with mode: 0644]
extra/xmode/modes/zpt.xml [new file with mode: 0644]
extra/xmode/rules/rules-tests.factor [new file with mode: 0644]
extra/xmode/rules/rules.factor [new file with mode: 0755]
extra/xmode/summary.txt [new file with mode: 0644]
extra/xmode/tokens/tokens.factor [new file with mode: 0644]
extra/xmode/utilities/test.xml [new file with mode: 0644]
extra/xmode/utilities/utilities-tests.factor [new file with mode: 0644]
extra/xmode/utilities/utilities.factor [new file with mode: 0644]
extra/xmode/xmode.dtd [new file with mode: 0644]
misc/factor.sh
misc/macos-release.sh
misc/source-release.sh [new file with mode: 0644]
misc/version.sh [new file with mode: 0644]
misc/windows-release.sh
unmaintained/alarms/alarms.factor [deleted file]
unmaintained/alarms/load.factor [deleted file]
unmaintained/random-tester/load.factor [deleted file]
unmaintained/random-tester/random-tester.factor [deleted file]
unmaintained/random-tester/random-tester2.factor [deleted file]
unmaintained/random-tester/random.factor [deleted file]
unmaintained/random-tester/type.factor [deleted file]
unmaintained/random-tester/utils.factor [deleted file]
unmaintained/reader/reader.factor [new file with mode: 0644]
unmaintained/regexp/load.factor [deleted file]
unmaintained/regexp/regexp.factor [deleted file]
unmaintained/regexp/tables.factor [deleted file]
unmaintained/regexp/test/regexp.factor [deleted file]
unmaintained/regexp/test/tables.factor [deleted file]
unmaintained/scaffold/crud-templates/edit.furnace [new file with mode: 0644]
unmaintained/scaffold/crud-templates/list.furnace [new file with mode: 0644]
unmaintained/scaffold/crud-templates/show.furnace [new file with mode: 0644]
unmaintained/scaffold/scaffold.factor [new file with mode: 0644]
vm/Config.macosx.x86.64 [new file with mode: 0644]
vm/os-linux-x86-64.h
vm/os-macosx-x86.64.h [new file with mode: 0644]
vm/os-unix.c
vm/os-windows-nt.c
vm/os-windows.c
vm/platform.h
vm/quotations.c

index 4c6eb2f4e684c99a610ac146beaca9f6d40a79b3..4228a6f8adbf16afa5491c9685707311024c1874 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -57,12 +57,12 @@ default:
        @echo "openbsd-x86-32"
        @echo "openbsd-x86-64"
        @echo "macosx-x86-32"
+       @echo "macosx-x86-64"
        @echo "macosx-ppc"
        @echo "solaris-x86-32"
        @echo "solaris-x86-64"
        @echo "windows-ce-arm"
        @echo "windows-nt-x86-32"
-       @echo "windows-nt-x86-64"
        @echo ""
        @echo "Additional modifiers:"
        @echo ""
@@ -93,6 +93,9 @@ macosx-ppc: macosx-freetype
 macosx-x86-32: macosx-freetype
        $(MAKE) $(EXECUTABLE) macosx.app CONFIG=vm/Config.macosx.x86.32
 
+macosx-x86-64: macosx-freetype
+       $(MAKE) $(EXECUTABLE) macosx.app CONFIG=vm/Config.macosx.x86.64
+
 linux-x86-32:
        $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.linux.x86.32
 
@@ -114,9 +117,6 @@ solaris-x86-64:
 windows-nt-x86-32:
        $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.nt.x86.32
 
-windows-nt-x86-64:
-       $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.nt.x86.64
-
 windows-ce-arm:
        $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.ce.arm
 
@@ -142,7 +142,7 @@ clean:
        rm -f vm/*.o
 
 vm/resources.o:
-       $(WINDRES) vm/factor.rs vm/resources.o
+       windres vm/factor.rs vm/resources.o
 
 .c.o:
        $(CC) -c $(CFLAGS) -o $@ $<
index d5748688928ebf2c1cd6b6a3efad31dc98dd97b8..c5bae96b9c34172559c7f3b4f69fccfd8ac02ecc 100644 (file)
@@ -74,6 +74,10 @@ following command line:
 
 ./factor -i=boot.<cpu>.image
 
+Or this command for Mac OS X systems:
+
+./Factor.app/Contents/MacOS/factor -i=boot.<cpu>.image
+
 Bootstrap can take a while, depending on your system. When the process
 completes, a 'factor.image' file will be generated. Note that this image
 is both CPU and OS-specific, so in general cannot be shared between
old mode 100644 (file)
new mode 100755 (executable)
index ed1520e..9b7bc6a
@@ -59,4 +59,4 @@ M: alien pprint*
         { [ t ] [ \ ALIEN: [ alien-address pprint* ] pprint-prefix ] }
     } cond ;
 
-M: dll pprint* dll-path dup "DLL\" " pprint-string ;
+M: dll pprint* dll-path dup "DLL\" " "\"" pprint-string ;
index b38ce82052549457392c40582d13d737f0418ab8..8fabee06ef66b929d0637f1427ae54fcce265214 100644 (file)
@@ -87,3 +87,9 @@ unit-test
 [ H{ { 1 2 } { 3 4 } } ]
 [ "hi" 5 H{ { 1 2 } { 3 4 } } clone [ rename-at ] keep ]
 unit-test
+
+[
+    H{ { 1.0 1.0 } { 2.0 2.0 } }
+] [
+    F{ 1.0 2.0 } [ dup ] H{ } map>assoc
+] unit-test
index 272a763b7b9a521a5e58ec5cac49d34e6e6fed4b..40b35a931b14c8dcea1e22e75c55fd49847ab67d 100644 (file)
@@ -135,7 +135,7 @@ M: assoc assoc-clone-like ( assoc exemplar -- newassoc )
     [ 0 or + ] change-at ;
 
 : map>assoc ( seq quot exemplar -- assoc )
-    >r [ 2array ] compose map r> assoc-like ; inline
+    >r [ 2array ] compose { } map-as r> assoc-like ; inline
 
 M: assoc >alist [ 2array ] { } assoc>map ;
 
index 868e49deeb9cb2dbba5008cb3033f502038e0bcf..91aa22b73814aed26835ea3692967eac4a92333b 100644 (file)
@@ -14,7 +14,7 @@ $nl
 ABOUT: "bootstrap.image"
 
 HELP: make-image
-{ $values { "architecture" "a string" } }
+{ $values { "arch" "a string" } }
 { $description "Creates a bootstrap image from sources, where " { $snippet "architecture" } " is one of the following:"
 { $code "x86.32" "x86.64" "ppc" "arm" }
 "The new image file is written to the " { $link resource-path } " and is named " { $snippet "boot." { $emphasis "architecture" } ".image" } "." } ;
index 59daa3ab537aca96f63394629643744e287e9211..46b1989357dcd9e2cd3bdf84ffc54fca83bf5cba 100755 (executable)
@@ -67,10 +67,12 @@ IN: bootstrap.stage2
         [
             boot
             do-init-hooks
-            [ parse-command-line ] try
-            [ run-user-init ] try
-            [ "run" get run ] try
-            stdio get [ stream-flush ] when*
+            [
+                parse-command-line
+                run-user-init
+                "run" get run
+                stdio get [ stream-flush ] when*
+            ] [ print-error 1 exit ] recover
         ] set-boot-quot
 
         : count-words all-words swap subset length pprint ;
index e637c479334e68451f16ed9cb1602ae385680f59..147714692dc9c47c4ca729a5a7f3207780ce7532 100644 (file)
@@ -5,7 +5,7 @@ classes.predicate ;
 IN: classes
 
 ARTICLE: "builtin-classes" "Built-in classes"
-"Every object is an instance of to exactly one canonical " { $emphasis "built-in class" } " which defines its layout in memory and basic behavior."
+"Every object is an instance of exactly one canonical " { $emphasis "built-in class" } " which defines its layout in memory and basic behavior."
 $nl
 "Corresponding to every built-in class is a built-in type number. An object can be asked for its built-in type number:"
 { $subsection type }
@@ -203,17 +203,3 @@ HELP: define-class
 { $values { "word" word } { "members" "a sequence of class words" } { "superclass" class } { "metaclass" class } }
 { $description "Sets a property indicating this word is a class word, thus making it an instance of " { $link class } ", and registers it with " { $link typemap } " and " { $link class<map } "." }
 $low-level-note ;
-
-: $predicate ( element -- )
-    { { "object" object } { "?" "a boolean" } } $values
-    [
-        "Tests if the object is an instance of the " ,
-        first "predicating" word-prop \ $link swap 2array ,
-        " class." ,
-    ] { } make $description ;
-
-M: predicate word-help* drop \ $predicate ;
-
-HELP: $predicate
-{ $values { "element" "a markup element of the form " { $snippet "{ word }" } } }
-{ $description "Prints the boilerplate description of a class membership predicate word such as " { $link array? } " or " { $link integer? } "." } ;
index 0e214c412ac1cfbbf416ec1595f15d3818980282..2c418768c67ee78e8e022e557ce0d06c85a6fb48 100755 (executable)
@@ -79,6 +79,10 @@ M: sequence hashcode*
     dup empty? [
         drop
     ] [
-        hash-case-table hash-dispatch-quot
-        [ dup hashcode >fixnum ] swap append
+        dup length 4 <= [
+            case>quot
+        ] [
+            hash-case-table hash-dispatch-quot
+            [ dup hashcode >fixnum ] swap append
+        ] if
     ] if ;
index 76b4d49636248159088da860f2bb4581c5d61cbe..f80a00855d30892eed48fc2ac05938f7323def05 100644 (file)
@@ -16,9 +16,10 @@ M: object inference-error-major? drop t ;
 
 : begin-batch ( seq -- )
     batch-mode on
-    [
-        "Compiling " % length # " words..." %
-    ] "" make print flush
+    "quiet" get [ drop ] [
+        [ "Compiling " % length # " words..." % ] "" make
+        print flush
+    ] if
     V{ } clone compile-errors set-global ;
 
 : compile-error. ( pair -- )
index 307c8adcdb31952d4791923fb4a99a08664e825e..0e840154ca2d57232ed4dbea4809f9c2cba84071 100755 (executable)
@@ -50,7 +50,7 @@ IN: temporary
     global keys =
 ] unit-test
 
-[ 3 ] [ 1 2 [ curry [ 3 ] [ 4 ] if ] compile-1 ] unit-test
+[ 3 ] [ 1 [ 2 ] [ curry [ 3 ] [ 4 ] if ] compile-1 ] unit-test
 
 [ 3 ] [ t [ 3 [ ] curry 4 [ ] curry if ] compile-1 ] unit-test
 
index 594bb844a12a7d013af538298d6c7587595fcbd0..cc446dee23dd46898436ca63e7c3dd053e5bb1ac 100644 (file)
@@ -56,3 +56,8 @@ IN: temporary
 \ recursive compile
 
 [ ] [ t recursive ] unit-test
+
+! Make sure error reporting works
+
+[ [ dup ] compile-1 ] unit-test-fails
+[ [ drop ] compile-1 ] unit-test-fails
index eb6afbf51e71bb0e9f12a35e513f40bddc70716e..87616d883338e3c8ab84525785fa1f9fefe2a618 100644 (file)
@@ -85,7 +85,7 @@ HELP: continuation
 { $description "Reifies the current continuation from the point immediately after which the caller returns." } ;
 
 HELP: >continuation<
-{ $values { "continuation" continuation } { "data" vector } { "retain" vector } { "call" vector } { "name" vector } { "catch" vector } { "c" array } }
+{ $values { "continuation" continuation } { "data" vector } { "retain" vector } { "call" vector } { "name" vector } { "catch" vector } }
 { $description "Takes a continuation apart into its constituents." } ;
 
 HELP: ifcc
index a68454f0012f593ac1d498e64d53bdd078e9c363..655b23e517da32ecee5d15fa7d94d4d522594300 100644 (file)
@@ -48,11 +48,10 @@ HELP: literal-table
 { $var-description "Holds a vector of literal objects referenced from the currently compiling word. If " { $link compiled-stack-traces? } " is on, " { $link init-generator } " ensures that the first entry is the word being compiled." } ;
 
 HELP: init-generator
-{ $values { "word" word } }
 { $description "Prepares to generate machine code for a word." } ;
 
 HELP: generate-1
-{ $values { "label" word } { "node" "a dataflow node" } { "quot" "a quotation with stack effect " { $snippet "( node -- )" } } }
+{ $values { "word" word } { "label" word } { "node" "a dataflow node" } { "quot" "a quotation with stack effect " { $snippet "( node -- )" } } }
 { $description "Generates machine code for " { $snippet "label" } " by applying the quotation to the dataflow node." } ;
 
 HELP: generate-node
index b19b358343a980a591a3d627aacbd69ddf554cc5..b1148bb34e15f55c117c3a6f235720421a36c899 100644 (file)
@@ -4,7 +4,7 @@ generic.math ;
 HELP: math-upgrade
 { $values { "class1" "a class word" } { "class2" "a class word" } { "quot" "a quotation with stack effect " { $snippet "( n n -- n n )" } } }
 { $description "Outputs a quotation for upgrading numberical types. It takes two numbers on the stack, an instance of " { $snippet "class1" } ", and an instance of " { $snippet "class2" } ", and converts the one with the lower priority to the higher priority type." }
-{ $examples { $example "USE: generic.math" "fixnum bignum math-upgrade ." "[ >r >bignum r> ]" } } ;
+{ $examples { $example "USE: generic.math" "fixnum bignum math-upgrade ." "[ [ >bignum ] dip ]" } } ;
 
 HELP: no-math-method
 { $values { "left" "an object" } { "right" "an object" } { "generic" "a generic word" } }
@@ -14,7 +14,7 @@ HELP: no-math-method
 HELP: math-method
 { $values { "word" "a generic word" } { "class1" "a class word" } { "class2" "a class word" } { "quot" "a quotation" } }
 { $description "Generates a definition for " { $snippet "word" } " when the two inputs are instances of " { $snippet "class1" } " and " { $snippet "class2" } ", respectively." }
-{ $examples { $example "USE: generic.math" "\\ + fixnum float math-method ." "[ >r >float r> float+ ]" } } ;
+{ $examples { $example "USE: generic.math" "\\ + fixnum float math-method ." "[ [ >float ] dip float+ ]" } } ;
 
 HELP: math-class
 { $class-description "The class of subtypes of " { $link number } " which are not " { $link null } "." } ;
index 5ed8fbbe3a7e66245342732d1351c8eff522b8fb..3719c2f9e004704b597f7d9b12bb9ec36df34ad6 100644 (file)
@@ -96,7 +96,7 @@ HELP: hash-deleted+
 { $side-effects "hash" } ;
 
 HELP: (set-hash)
-{ $values { "value" "a value" } { "key" "a key to add" } { "hash" hashtable } }
+{ $values { "value" "a value" } { "key" "a key to add" } { "hash" hashtable } { "new?" "a boolean" } }
 { $description "Stores the key/value pair into the hashtable. This word does not grow the hashtable if it exceeds capacity, therefore a hang can result. User code should use " { $link set-at } " instead, which grows the hashtable if necessary." }
 { $side-effects "hash" } ;
 
index fba91ded0ac0305aced9bc58c03fb5ff2d284623..3a23c8f6efa95d5e462afeafcd8cb42463d6c661 100755 (executable)
@@ -104,7 +104,7 @@ HELP: file-modified
 HELP: parent-directory
 { $values { "path" "a pathname string" } { "parent" "a pathname string" } }
 { $description "Strips the last component off a pathname." }
-{ $examples { $example "USE: io.files" "\"/etc/passwd\" parent-directory print" "/etc" } } ;
+{ $examples { $example "USE: io.files" "\"/etc/passwd\" parent-directory print" "/etc/" } } ;
 
 HELP: file-name
 { $values { "path" "a pathname string" } { "string" string } }
index 1dd4259bb62f0b8b33fb0af256501726516fe5d9..3a01cc7d82de34efe0f6d3de3c465b985629508b 100755 (executable)
@@ -2,8 +2,8 @@
 ! See http://factorcode.org/license.txt for BSD license.
 IN: io.files
 USING: io.backend io.files.private io hashtables kernel math
-memory namespaces sequences strings arrays definitions system
-combinators splitting ;
+memory namespaces sequences strings assocs arrays definitions
+system combinators splitting ;
 
 HOOK: <file-reader> io-backend ( path -- stream )
 
@@ -126,3 +126,34 @@ TUPLE: pathname string ;
 C: <pathname> pathname
 
 M: pathname <=> [ pathname-string ] compare ;
+
+HOOK: library-roots io-backend ( -- seq )
+HOOK: binary-roots io-backend ( -- seq )
+
+: find-file ( seq str -- path/f )
+    [
+        [ path+ exists? ] curry find nip
+    ] keep over [ path+ ] [ drop ] if ;
+
+: find-library ( str -- path/f )
+    library-roots swap find-file ;
+
+: find-binary ( str -- path/f )
+    binary-roots swap find-file ;
+
+<PRIVATE
+: append-path ( path files -- paths )
+    [ path+ ] curry* map ;
+
+: get-paths ( dir -- paths )
+    dup directory keys append-path ;
+
+: (walk-dir) ( path -- )
+    dup directory? [
+        get-paths dup % [ (walk-dir) ] each
+    ] [
+        drop
+    ] if ;
+PRIVATE>
+
+: walk-dir ( path -- seq ) [ (walk-dir) ] { } make ;
index d653bc8032f84ccb1eab568ec0d03d70ccc499a4..5c71714c649d86ad4facbf77c6ce4bec9786a23d 100644 (file)
@@ -134,12 +134,13 @@ $nl
 $io-error ;
 
 HELP: make-block-stream
-{ $values { "quot" "a quotation" } { "style" "a hashtable" } { "stream" "an output stream" } }
-{ $contract "Calls the quotation in a new dynamic scope with the " { $link stdio } " stream rebound to a nested paragraph stream, with formatting information applied."
+{ $values { "style" "a hashtable" } { "stream" "an output stream" } { "stream'" "an output stream" } }
+{ $contract "Creates an output stream which wraps " { $snippet "stream" } " and adds " { $snippet "style" } " on calls to " { $link stream-write } " and " { $link stream-format } "."
 $nl
 "Unlike " { $link make-span-stream } ", this creates a new paragraph block in the output."
 $nl
 "The " { $snippet "style" } " hashtable holds paragraph style information. See " { $link "paragraph-styles" } "." }
+{ $notes "Instead of calling this word directly, use " { $link with-nesting } "." }
 $io-error ;
 
 HELP: stream-write-table
@@ -151,16 +152,17 @@ $nl
 $io-error ;
 
 HELP: make-cell-stream
-{ $values { "quot" quotation } { "style" hashtable } { "stream" "an output stream" } { "table-cell" object } }
-{ $contract "Creates a table cell by calling the quotation in a new scope with a rebound " { $link stdio } " stream. Callers should not make any assumptions about the type of this word's output value; it should be treated like an opaque handle passed to " { $link stream-write-table } "." }
+{ $values { "style" hashtable } { "stream" "an output stream" } { "stream'" object } }
+{ $contract "Creates an output stream which writes to a table cell object." }
 { $notes "Instead of calling this word directly, use " { $link tabular-output } "." }
 $io-error ;
 
 HELP: make-span-stream
-{ $values { "style" "a hashtable" } { "quot" "a quotation" } { "stream" "an output stream" } }
-{ $contract "Calls the quotation in a new dynamic scope where calls to " { $link write } ", " { $link format } " and other stream output words automatically inherit style settings from " { $snippet "style" } "."
+{ $values { "style" "a hashtable" } { "stream" "an output stream" } { "stream'" "an output stream" } }
+{ $contract "Creates an output stream which wraps " { $snippet "stream" } " and adds " { $snippet "style" } " on calls to " { $link stream-write } " and " { $link stream-format } "."
 $nl
-"Unlike " { $link make-block-stream } ", the quotation's output is inline, and not nested in a paragraph block." }
+"Unlike " { $link make-block-stream } ", the stream output is inline, and not nested in a paragraph block." }
+{ $notes "Instead of calling this word directly, use " { $link with-style } "." }
 $io-error ;
 
 HELP: stream-print
index 84ee4fe5cf88cabb43a22e706f5259dc7ab9ff86..31d28a6ec617d33e3e21d4f72a8cf3ca4f493712 100644 (file)
@@ -32,7 +32,7 @@ $nl
 { $subsection >r }
 { $subsection r> }
 "The top of the data stack is ``hidden'' between " { $link >r } " and " { $link r> } ":"
-{ $example "1 2 3 >r .s r>" "2\n1" }
+{ $example "1 2 3 >r .s r>" "1\n2" }
 "Words must not leave objects on the retain stack, nor expect values to be there on entry. The retain stack is for local storage within a word only, and occurrences of " { $link >r } " and " { $link r> } " must be balanced inside a single quotation. One exception is the following trick involving " { $link if } "; values may be pushed on the retain stack before the condition value is computed, as long as both branches of the " { $link if } " pop the values off the retain stack before returning:"
 { $code
     ": foo ( m ? n -- m+n/n )"
@@ -542,7 +542,7 @@ HELP: 3compose
 } ;
 
 HELP: while
-{ $values { "pred" "a quotation with stack effect " { $snippet "( -- ? )" } } { "quot" "a quotation" } { "tail" "a quotation" } }
+{ $values { "pred" "a quotation with stack effect " { $snippet "( -- ? )" } } { "body" "a quotation" } { "tail" "a quotation" } }
 { $description "Repeatedly calls " { $snippet "pred" } ". If it yields " { $link f } ", iteration stops, otherwise " { $snippet "quot" } " is called. After iteration stops, " { $snippet "tail" } " is called." }
 { $notes "In most cases, tail recursion should be used, because it is simpler both in terms of implementation and conceptually. However in some cases this combinator expresses intent better and should be used."
 $nl
index 88ca0a64f7ea3c9e0324b8bde8bddfe7aac1b987..6fe0a9588ce3e674baceaf8b438d01aa98a3ac93 100644 (file)
@@ -3,7 +3,7 @@
 USING: kernel.private ;
 IN: kernel
 
-: version ( -- str ) "0.91" ; foldable
+: version ( -- str ) "0.92" ; foldable
 
 ! Stack stuff
 : roll ( x y z t -- y z t x ) >r rot r> swap ; inline
index ba870560d6517de5ee76f0f720d1bf584b84b2a6..45d6b9432607afc02bf577984f5ae1bcc4aa2f2f 100644 (file)
@@ -25,7 +25,7 @@ HELP: memcpy
 { $warning "As per the BSD C library documentation, the behavior is undefined if the source and destination overlap." } ;
 
 HELP: check-ptr
-{ $values { "c-ptr" "an alien address, byte array, or " { $link f } } { "checked" "an alien address or byte array with non-zero address" } }
+{ $values { "c-ptr" "an alien address, byte array, or " { $link f } } }
 { $description "Throws an error if the input is " { $link f } ". Otherwise the object remains on the data stack." } ;
 
 HELP: free
index 60e5310ce47bf003531fd3f677bc4d3ec6102355..5a004534efc7babacc4e85e19b59e73e5cd09046 100755 (executable)
@@ -222,12 +222,12 @@ $nl
 HELP: bit?
 { $values { "x" integer } { "n" integer } { "?" "a boolean" } }
 { $description "Tests if the " { $snippet "n" } "th bit of " { $snippet "x" } " is set." }
-{ $examples { $example "BIN: 101 3 bit? ." "t" } } ;
+{ $examples { $example "BIN: 101 2 bit? ." "t" } } ;
 
 HELP: log2
-{ $values { "n" "a positive integer" } { "b" integer } }
-{ $description "Outputs the largest integer " { $snippet "b" } " such that " { $snippet "2^b" } " is less than " { $snippet "n" } "." }
-{ $errors "Throws an error if " { $snippet "n" } " is zero or negative." } ;
+{ $values { "x" "a positive integer" } { "n" integer } }
+{ $description "Outputs the largest integer " { $snippet "n" } " such that " { $snippet "2^n" } " is less than " { $snippet "x" } "." }
+{ $errors "Throws an error if " { $snippet "x" } " is zero or negative." } ;
 
 HELP: 1+
 { $values { "x" number } { "y" number } }
@@ -344,7 +344,7 @@ HELP: each-integer
 { $notes "This word is used to implement " { $link each } "." } ;
 
 HELP: all-integers?
-{ $values { "n" integer } { "quot" "a quotation with stack effect " { $snippet "( i -- ? )" } } { "i" "an integer or " { $link f } } }
+{ $values { "n" integer } { "quot" "a quotation with stack effect " { $snippet "( i -- ? )" } } { "?" "a boolean" } }
 { $description "Applies the quotation to each integer from 0 up to " { $snippet "n" } ", excluding " { $snippet "n" } ". Iterationi stops when the quotation outputs " { $link f } " or the end is reached. If the quotation yields a false value for some integer, this word outputs " { $link f } ". Otherwise, this word outputs " { $link t } "." }
 { $notes "This word is used to implement " { $link all? } "." } ;
 
index 40752c58a55e99fc06adc35e1556adb1567f7702..e9e4c53632bdfe6cb5f7a06294300c02fca36a31 100755 (executable)
@@ -8,7 +8,7 @@ assocs quotations sequences.private io.binary io.crc32
 io.streams.string layouts splitting math.intervals
 math.floats.private tuples tuples.private classes
 optimizer.def-use optimizer.backend optimizer.pattern-match
-float-arrays combinators.private ;
+float-arrays combinators.private combinators ;
 
 ! the output of <tuple> and <tuple-boa> has the class which is
 ! its second-to-last input
@@ -50,6 +50,20 @@ float-arrays combinators.private ;
     { [ dup disjoint-eq? ] [ [ f ] inline-literals ] }
 } define-optimizers
 
+: literal-member? ( #call -- ? )
+    node-in-d peek dup value?
+    [ value-literal sequence? ] [ drop f ] if ;
+
+: member-quot ( seq -- newquot )
+    [ [ t ] ] { } map>assoc [ drop f ] add [ nip case ] curry ;
+
+: expand-member ( #call -- )
+    dup node-in-d peek value-literal member-quot splice-quot ;
+
+\ member? {
+    { [ dup literal-member? ] [ expand-member ] }
+} define-optimizers
+
 ! if the result of eq? is t and the second input is a literal,
 ! the first input is equal to the second
 \ eq? [
index 0ea1f1316ba079d1d75e3227106a131dff1be72c..3389b1b84e5c12b56bae67a649c900aac29eefdd 100755 (executable)
@@ -111,7 +111,7 @@ optimizer.def-use generic.standard ;
 
 : post-process ( class interval node -- classes intervals )
     dupd won't-overflow?
-    [ >r dup { f integer } memq? [ drop fixnum ] when r> ] when
+    [ >r dup { f integer } member? [ drop fixnum ] when r> ] when
     [ dup [ 1array ] when ] 2apply ;
 
 : math-output-interval-1 ( node word -- interval )
index bf1c5c2fc20c65c6e9bcef556a01c738ae9f1ccc..4605308a95c18eb2a7ff2f82e787ca611f5b14d2 100644 (file)
@@ -31,7 +31,7 @@ HELP: do-string-limit
 { $description "If " { $link string-limit } " is on, trims the string such that it does not exceed the margin, appending \"...\" if trimming took place." } ;
 
 HELP: pprint-string
-{ $values { "obj" object } { "str" string } { "prefix" "a prefix string" } }
+{ $values { "obj" object } { "str" string } { "prefix" string } { "suffix" string } }
 { $description "Outputs a text section consisting of the prefix, the string, and a final quote (\")." }
 $prettyprinting-note ;
 
index 0ee79efa8b827cbaa9c6f2fad6aedc9785c76dda..8d0140202ec168d3cdd452a01f9b15a28697e5b3 100755 (executable)
@@ -89,19 +89,20 @@ M: f pprint* drop \ f pprint-word ;
         { 0.3 0.3 0.3 1.0 } foreground set
     ] H{ } make-assoc ;
 
-: unparse-string ( str prefix -- str )
-    [
-        % do-string-limit [ unparse-ch ] each CHAR: " ,
-    ] "" make ;
+: unparse-string ( str prefix suffix -- str )
+    [ >r % do-string-limit [ unparse-ch ] each r> % ] "" make ;
 
-: pprint-string ( obj str prefix -- )
+: pprint-string ( obj str prefix suffix -- )
     unparse-string swap string-style styled-text ;
 
-M: string pprint* dup "\"" pprint-string ;
+M: string pprint*
+    dup "\"" "\"" pprint-string ;
 
-M: sbuf pprint* dup "SBUF\" " pprint-string ;
+M: sbuf pprint*
+    dup "SBUF\" " "\"" pprint-string ;
 
-M: pathname pprint* dup pathname-string "P\" " pprint-string ;
+M: pathname pprint*
+    dup pathname-string "P\" " "\"" pprint-string ;
 
 ! Sequences
 : nesting-limit? ( -- ? )
index de10e5c2e424f466bb503bbebdaade422a94948b..2902f574eb904a3eb635d5964cf95fee4b2fe26e 100755 (executable)
@@ -221,7 +221,8 @@ TUPLE: column seq col ;
 C: <column> column
 
 M: column virtual-seq column-seq ;
-M: column virtual@ dup column-col -rot column-seq nth ;
+M: column virtual@
+    dup column-col -rot column-seq nth bounds-check ;
 M: column length column-seq length ;
 
 INSTANCE: column virtual-sequence
@@ -546,11 +547,6 @@ M: sequence <=>
 
 : all-eq? ( seq -- ? ) [ eq? ] monotonic? ;
 
-: flip ( matrix -- newmatrix )
-    dup empty? [
-        dup first length [ <column> dup like ] curry* map
-    ] unless ;
-
 : exchange ( m n seq -- )
     pick over bounds-check 2drop 2dup bounds-check 2drop
     exchange-unsafe ;
@@ -667,7 +663,19 @@ PRIVATE>
 : infimum ( seq -- n ) dup first [ min ] reduce ;
 : supremum ( seq -- n ) dup first [ max ] reduce ;
 
+: flip ( matrix -- newmatrix )
+    dup empty? [
+        dup [ length ] map infimum
+        [ <column> dup like ] curry* map
+    ] unless ;
+
+: sequence-hashcode-step ( oldhash newpart -- newhash )
+    swap [
+        dup -2 fixnum-shift >fixnum swap 5 fixnum-shift >fixnum
+        fixnum+fast fixnum+fast
+    ] keep bitxor ; inline
+
 : sequence-hashcode ( n seq -- x )
     0 -rot [
-        hashcode* >fixnum swap 31 fixnum*fast fixnum+fast
+        hashcode* >fixnum sequence-hashcode-step
     ] curry* each ; inline
index 04db98c9b2619d848d4ba0f97b466592aee12234..d8c8f5fbbab61c5feaf1fee8d855df413fa6b7cc 100644 (file)
@@ -9,7 +9,6 @@ ARTICLE: "slots" "Slots"
 $nl
 { $link "tuples" } " are composed entirely of slots, and instances of " { $link "builtin-classes" } " consist of slots together with intrinsic data."
 $nl
-"The " 
 "The " { $snippet "\"slots\"" } " word property of built-in and tuple classes holds an array of " { $emphasis "slot specifiers" } " describing the slot layout of each instance."
 { $subsection slot-spec }
 "Each slot has a reader word; mutable slots have an optional writer word. All tuple slots are mutable, but some slots on built-in classes are not."
diff --git a/extra/bake/authors.txt b/extra/bake/authors.txt
new file mode 100644 (file)
index 0000000..6cfd5da
--- /dev/null
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/extra/bake/summary.txt b/extra/bake/summary.txt
new file mode 100644 (file)
index 0000000..cfc944a
--- /dev/null
@@ -0,0 +1 @@
+Bake is similar to make but with additional features
index 7de7ec24b49f2a4b988f3ada9351021abc76fe5f..4da3972e343ac3f0edd15f7a88b418f636a0a5c9 100644 (file)
@@ -26,6 +26,8 @@ HINTS: do-trans-map string ;
         over push
     ] if ;
 
+HINTS: do-line vector string ;
+
 : (reverse-complement) ( seq -- )
     readln [ do-line (reverse-complement) ] [ show-seq ] if* ;
 
diff --git a/extra/browser/analyzer/analyzer.factor b/extra/browser/analyzer/analyzer.factor
deleted file mode 100644 (file)
index 2384252..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-USING: assocs browser.parser kernel math sequences strings ;
-IN: browser.analyzer
-
-: remove-blank-text ( vector -- vector )
-    [
-        dup tag-name text = [
-            tag-text [ blank? not ] all?
-        ] [
-            drop t
-        ] if
-    ] subset ;
-
-: find-by-id ( id vector -- vector )
-    [ tag-attributes "id" swap at = ] curry* subset ;
-
-: find-by-class ( id vector -- vector )
-    [ tag-attributes "class" swap at = ] curry* subset ;
-
-: find-by-name ( str vector -- vector )
-    >r >lower r>
-    [ tag-name = ] curry* subset ;
-
-: find-first-name ( str vector -- i/f tag/f )
-    >r >lower r>
-    [ tag-name = ] curry* find ;
-
-: find-matching-close ( str vector -- i/f tag/f )
-    >r >lower r>
-    [ [ tag-name = ] keep tag-closing? and ] curry* find ;
-
-: find-by-attribute-key ( key vector -- vector )
-    >r >lower r>
-    [ tag-attributes at ] curry* subset
-    [ ] subset ;
-
-: find-by-attribute-key-value ( value key vector -- vector )
-    >r >lower r>
-    [ tag-attributes at over = ] curry* subset nip
-    [ ] subset ;
-
-: find-first-attribute-key-value ( value key vector -- i/f tag/f )
-    >r >lower r>
-    [ tag-attributes at over = ] curry* find rot drop ;
-
-: find-between ( i/f tag/f vector -- vector )
-    pick integer? [
-        rot 1+ tail-slice
-        >r tag-name r>
-        [ find-matching-close drop ] keep swap head
-    ] [
-        3drop V{ } clone
-    ] if ;
-
-: find-links ( vector -- vector )
-    [ tag-name "a" = ] subset
-    [ tag-attributes "href" swap at ] map
-    [ ] subset ;
-
-
-
-! : find-last-tag ( name vector -- index tag )
-    ! [
-        ! dup tag-matched? [ 2drop f ] [ tag-name = ] if
-    ! ] curry* find-last ;
-
-! : find-last-tag* ( name n vector -- tag )
-    ! 0 -rot <slice> find-last-tag ;
-
-! : find-matching-tag ( tag -- tag )
-    ! dup tag-closing? [
-        ! find-last-tag
-    ! ] [
-    ! ] if ;
-
-
-! clear "/Users/erg/web/fark.html" <file-reader> contents parse-html find-links [ "go.pl" swap start ] subset [ "=" split peek ] map
-! clear "http://fark.com" http-get parse-html find-links [ "go.pl" swap start ] subset [ "=" split peek ] map
-
-! clear "/Users/erg/web/hostels.html" <file-reader> contents parse-html "Currency" "name" pick find-first-attribute-key-value
-
-! clear "/Users/erg/web/hostels.html" <file-reader> contents parse-html
-! "Currency" "name" pick find-first-attribute-key-value 
-! pick find-between remove-blank-text
diff --git a/extra/browser/parser/parser-tests.factor b/extra/browser/parser/parser-tests.factor
deleted file mode 100644 (file)
index b4cd87d..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-USING: browser.parser kernel tools.test ;
-IN: temporary
-
-[
-    V{ T{ tag f "html" H{ } f f f } }
-] [ "<html>" parse-html ] unit-test
-
-[
-    V{ T{ tag f "html" H{ } f f t } }
-] [ "</html>" parse-html ] unit-test
-
-[
-    V{ T{ tag f "a" H{ { "href" "http://factorcode.org/" } } f f f } }
-] [ "<a href=\"http://factorcode.org/\">" parse-html ] unit-test
-
-[
-    V{ T{ tag f "a" H{ { "href" "http://factorcode.org/" } } f f f } }
-] [ "<a   href  =  \"http://factorcode.org/\"   >" parse-html ] unit-test
-
-[
-V{
-    T{
-        tag
-        f
-        "a"
-        H{ { "baz" "\"quux\"" } { "foo" "bar's" } }
-        f
-        f
-        f
-    }
-}
-] [ "<a   foo=\"bar's\" baz='\"quux\"'  >" parse-html ] unit-test
-
-[
-V{
-    T{ tag f "a"
-        H{
-            { "a" "pirsqd" }
-            { "foo" "bar" }
-            { "href" "http://factorcode.org/" }
-            { "baz" "quux" }
-        } f f f }
-}
-] [ "<a   href  =    \"http://factorcode.org/\"    foo   =  bar baz='quux'a=pirsqd  >" parse-html ] unit-test
-
-[
-V{
-    T{ tag f "html" H{ } f f f }
-    T{ tag f "head" H{ } f f f }
-    T{ tag f "head" H{ } f f t }
-    T{ tag f "html" H{ } f f t }
-}
-] [ "<html<head</head</html" parse-html ] unit-test
-
-[
-V{
-    T{ tag f "head" H{ } f f f }
-    T{ tag f "title" H{ } f f f }
-    T{ tag f text f "Spagna" f f }
-    T{ tag f "title" H{ } f f t }
-    T{ tag f "head" H{ } f f t }
-}
-] [ "<head<title>Spagna</title></head" parse-html ] unit-test
diff --git a/extra/browser/parser/parser.factor b/extra/browser/parser/parser.factor
deleted file mode 100644 (file)
index 9ef6113..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-USING: arrays browser.utils hashtables io kernel namespaces
-prettyprint quotations
-sequences splitting state-parser strings ;
-USE: tools.interpreter
-IN: browser.parser
-
-TUPLE: tag name attributes text matched? closing? ;
-
-SYMBOL: text
-SYMBOL: dtd
-SYMBOL: comment
-SYMBOL: javascript
-SYMBOL: tagstack
-
-: push-tag ( tag -- )
-    tagstack get push ;
-
-: closing-tag? ( string -- ? )
-    dup empty? [
-        drop f
-    ] [
-        dup first CHAR: / =
-        swap peek CHAR: / = or
-    ] if ;
-
-: <tag> ( name attributes closing? -- tag )
-    { set-tag-name set-tag-attributes set-tag-closing? }
-    tag construct ;
-
-: make-tag ( str attribs -- tag )
-    >r [ closing-tag? ] keep "/" trim1 r> rot <tag> ;
-
-: make-text-tag ( str -- tag )
-    T{ tag f text } clone [ set-tag-text ] keep ;
-
-: make-comment-tag ( str -- tag )
-    T{ tag f comment } clone [ set-tag-text ] keep ;
-
-: make-dtd-tag ( str -- tag )
-    T{ tag f dtd } clone [ set-tag-text ] keep ;
-
-: read-whitespace ( -- str )
-    [ get-char blank? not ] take-until ;
-
-: read-whitespace* ( -- )
-    read-whitespace drop ;
-
-: read-token ( -- str )
-    read-whitespace*
-    [ get-char blank? ] take-until ;
-
-: read-single-quote ( -- str )
-    [ get-char CHAR: ' = ] take-until ;
-
-: read-double-quote ( -- str )
-    [ get-char CHAR: " = ] take-until ;
-
-: read-quote ( -- str )
-    get-char next* CHAR: ' = [
-        read-single-quote
-    ] [
-        read-double-quote
-    ] if next* ;
-
-: read-key ( -- str )
-    read-whitespace*
-    [ get-char CHAR: = = get-char blank? or ] take-until ;
-
-: read-= ( -- )
-    read-whitespace*
-    [ get-char CHAR: = = ] take-until drop next* ;
-
-: read-value ( -- str )
-    read-whitespace*
-    get-char quote? [
-        read-quote
-    ] [
-        read-token
-    ] if ;
-
-: read-comment ( -- )
-    "-->" take-string* make-comment-tag push-tag ;
-
-: read-dtd ( -- )
-    ">" take-string* make-dtd-tag push-tag ;
-
-: read-bang ( -- )
-    next* get-char CHAR: - = get-next CHAR: - = and [
-        next* next*
-        read-comment
-    ] [
-        read-dtd
-    ] if ;
-
-: read-tag ( -- )
-    [ get-char CHAR: > = get-char CHAR: < = or ] take-until
-    get-char CHAR: < = [ next* ] unless ;
-
-: read-< ( -- str )
-    next* get-char CHAR: ! = [
-        read-bang f
-    ] [
-        read-tag
-    ] if ;
-
-: read-until-< ( -- str )
-    [ get-char CHAR: < = ] take-until ;
-
-: parse-text ( -- )
-    read-until-< dup empty? [
-        drop
-    ] [
-        make-text-tag push-tag
-    ] if ;
-
-: (parse-attributes) ( -- )
-    read-whitespace*
-    string-parse-end? [
-        read-key >lower read-= read-value
-        2array , (parse-attributes)
-    ] unless ;
-
-: parse-attributes ( -- hashtable )
-    [ (parse-attributes) ] { } make >hashtable ; 
-
-: (parse-tag)
-    [
-        read-token >lower
-        parse-attributes
-    ] string-parse ;
-
-: parse-tag ( -- )
-    read-< dup empty? [
-        drop
-    ] [
-        (parse-tag) make-tag push-tag
-    ] if ;
-
-: (parse-html) ( tag -- )
-    get-next [
-        parse-text
-        parse-tag
-        (parse-html)
-    ] when ;
-
-: tag-parse ( quot -- vector )
-    [
-        V{ } clone tagstack set
-        string-parse
-    ] with-scope ;
-
-: parse-html ( string -- vector )
-    [
-        (parse-html)
-        tagstack get
-    ] tag-parse ;
diff --git a/extra/browser/printer/printer.factor b/extra/browser/printer/printer.factor
deleted file mode 100644 (file)
index a68d588..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-USING: assocs browser.parser browser.utils combinators
-continuations hashtables
-hashtables.private io kernel math
-namespaces prettyprint quotations sequences splitting
-state-parser strings ;
-IN: browser.printer
-
-SYMBOL: no-section
-SYMBOL: html
-SYMBOL: head
-SYMBOL: body
-TUPLE: state section ;
-
-! TUPLE: text bold? underline? strikethrough? ;
-
-TUPLE: text-printer ;
-TUPLE: ui-printer ;
-TUPLE: src-printer ;
-UNION: printer text-printer ui-printer src-printer ;
-HOOK: print-tag printer ( tag -- )
-HOOK: print-text-tag printer ( tag -- )
-HOOK: print-comment-tag printer ( tag -- )
-HOOK: print-dtd-tag printer ( tag -- )
-HOOK: print-opening-named-tag printer ( tag -- )
-HOOK: print-closing-named-tag printer ( tag -- )
-
-: print-tags ( vector -- )
-    [ print-tag ] each ;
-
-: html-text. ( vector -- )
-    [
-        T{ text-printer } printer set
-        print-tags
-    ] with-scope ;
-
-: html-src. ( vector -- )
-    [
-        T{ src-printer } printer set
-        print-tags
-    ] with-scope ;
-
-M: printer print-text-tag ( tag -- )
-    tag-text write ;
-
-M: printer print-comment-tag ( tag -- ) 
-    "<!--" write
-    tag-text write
-    "-->" write ;
-
-M: printer print-dtd-tag
-    "<!" write
-    tag-text write
-    ">" write ;
-
-M: printer print-opening-named-tag ( tag -- )
-    dup tag-name {
-        { "html" [ drop ] }
-        { "head" [ drop ] }
-        { "body" [ drop ] }
-        { "title" [ "Title: " write tag-text print ] }
-    } case ;
-
-M: printer print-closing-named-tag ( tag -- )
-    drop ;
-
-: print-attributes ( hashtable -- )
-    [
-        swap bl write "=" write ?quote write
-    ] assoc-each ;
-        
-
-M: src-printer print-opening-named-tag ( tag -- )
-    "<" write
-    dup tag-name write
-    tag-attributes dup assoc-empty? [ drop ] [ print-attributes ] if
-    ">" write ;
-
-M: src-printer print-closing-named-tag ( tag -- )
-    "</" write
-    tag-name write
-    ">" write ;
-
-TUPLE: unknown-tag-error tag ;
-
-C: <unknown-tag-error> unknown-tag-error
-
-M: printer print-tag ( tag -- )
-    {
-        { [ dup tag-name text = ] [ print-text-tag ] }
-        { [ dup tag-name comment = ] [ print-comment-tag ] }
-        { [ dup tag-name dtd = ] [ print-dtd-tag ] }
-        { [ dup tag-name string? over tag-closing? and ]
-            [ print-closing-named-tag ] }
-        { [ dup tag-name string? ]
-            [ print-opening-named-tag ] }
-        { [ t ] [ <unknown-tag-error> throw ] }
-    } cond ;
-
-SYMBOL: tablestack
-
-: with-html-printer
-    [
-        V{ } clone tablestack set
-    ] with-scope ;
-    
-! { { 1 2 } { 3 4 } }
-! H{ { table-gap { 10 10 } } } [
-    ! [ [ [ [ . ] with-cell ] each ] with-row ] each
-! ] tabular-output
diff --git a/extra/browser/utils/utils-tests.factor b/extra/browser/utils/utils-tests.factor
deleted file mode 100644 (file)
index 9ae54c7..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-USING: assocs combinators continuations hashtables
-hashtables.private io kernel math
-namespaces prettyprint quotations sequences splitting
-state-parser strings tools.test ;
-USING: browser.utils ;
-IN: temporary
-
-[ "'Rome'" ] [ "Rome" single-quote ] unit-test
-[ "\"Roma\"" ] [ "Roma" double-quote ] unit-test
-[ "'Firenze'" ] [ "Firenze" quote ] unit-test
-[ "\"Caesar's\"" ] [ "Caesar's" quote ] unit-test
-[ f ] [ "" quoted? ] unit-test
-[ t ] [ "''" quoted? ] unit-test
-[ t ] [ "\"\"" quoted? ] unit-test
-[ t ] [ "\"Circus Maximus\"" quoted? ] unit-test
-[ t ] [ "'Circus Maximus'" quoted? ] unit-test
-[ f ] [ "Circus Maximus" quoted? ] unit-test
-[ "'Italy'" ] [ "Italy" ?quote ] unit-test
-[ "'Italy'" ] [ "'Italy'" ?quote ] unit-test
-[ "\"Italy\"" ] [ "\"Italy\"" ?quote ] unit-test
-[ "Italy" ] [ "Italy" unquote ] unit-test
-[ "Italy" ] [ "'Italy'" unquote ] unit-test
-[ "Italy" ] [ "\"Italy\"" unquote ] unit-test
-
diff --git a/extra/browser/utils/utils.factor b/extra/browser/utils/utils.factor
deleted file mode 100644 (file)
index 827c60d..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-USING: assocs circular combinators continuations hashtables
-hashtables.private io kernel math
-namespaces prettyprint quotations sequences splitting
-state-parser strings ;
-USING: browser.parser ;
-IN: browser.utils
-
-: string-parse-end?
-    get-next not ;
-
-: take-string* ( match -- string )
-    dup length <circular-string>
-    [ 2dup string-matches? ] take-until nip
-    dup length rot length 1- - head next* ;
-
-: trim1 ( seq ch -- newseq )
-    [ ?head drop ] keep ?tail drop ;
-
-: single-quote ( str -- newstr )
-    >r "'" r> "'" 3append ;
-
-: double-quote ( str -- newstr )
-    >r "\"" r> "\"" 3append ;
-
-: quote ( str -- newstr )
-    CHAR: ' over member?
-    [ double-quote ] [ single-quote ] if ;
-
-: quoted? ( str -- ? )
-    dup length 1 > [
-        [ first ] keep peek [ = ] keep "'\"" member? and
-    ] [
-        drop f
-    ] if ;
-
-: ?quote ( str -- newstr )
-    dup quoted? [ quote ] unless ;
-
-: unquote ( str -- newstr )
-    dup quoted? [ 1 head-slice* 1 tail-slice >string ] when ;
-
-: quote? ( ch -- ? ) "'\"" member? ;
-
diff --git a/extra/cabal/authors.txt b/extra/cabal/authors.txt
new file mode 100644 (file)
index 0000000..6cfd5da
--- /dev/null
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/extra/cabal/summary.txt b/extra/cabal/summary.txt
new file mode 100644 (file)
index 0000000..881f836
--- /dev/null
@@ -0,0 +1 @@
+Minimalist chat server
diff --git a/extra/cabal/ui/authors.txt b/extra/cabal/ui/authors.txt
new file mode 100644 (file)
index 0000000..c7091ca
--- /dev/null
@@ -0,0 +1,2 @@
+Matthew Willis
+Eduardo Cavazos
diff --git a/extra/cabal/ui/summary.txt b/extra/cabal/ui/summary.txt
new file mode 100644 (file)
index 0000000..12c0170
--- /dev/null
@@ -0,0 +1 @@
+Connects to a cabal server
index c255e0a78eaa53b0a749315cc3f23b7e090d4648..55d632d245248081ba33248085d7ec9a4d8d0629 100644 (file)
@@ -2,8 +2,8 @@
 ! See http://factorcode.org/license.txt for BSD license.
 
 USING: arrays hashtables io io.streams.string kernel math
-math.vectors math.functions math.parser
-namespaces sequences strings tuples system ;
+math.vectors math.functions math.parser namespaces sequences
+strings tuples system debugger ;
 IN: calendar
 
 TUPLE: timestamp year month day hour minute second gmt-offset ;
@@ -316,7 +316,28 @@ M: timestamp <=> ( ts1 ts2 -- n )
 : timestamp>rfc3339 ( timestamp -- str )
     >gmt [
         (timestamp>rfc3339)
-     ] string-out ;
+    ] string-out ;
+
+: expect read1 assert= ;
+
+: (rfc3339>timestamp) ( -- timestamp )
+    4 read string>number ! year
+    CHAR: - expect
+    2 read string>number ! month
+    CHAR: - expect
+    2 read string>number ! day
+    CHAR: T expect
+    2 read string>number ! hour
+    CHAR: : expect
+    2 read string>number ! minute
+    CHAR: : expect
+    2 read string>number ! second
+    0 <timestamp> ;
+
+: rfc3339>timestamp ( str -- timestamp )
+    [
+        (rfc3339>timestamp)
+    ] string-in ;
 
 : file-time-string ( timestamp -- string )
     [
diff --git a/extra/cfdg/summary.txt b/extra/cfdg/summary.txt
new file mode 100644 (file)
index 0000000..0b5e92c
--- /dev/null
@@ -0,0 +1 @@
+Implementation of: http://contextfreeart.org
index 3cce6fdc4eb300966961aa7f77cc0e9f762ab574..5400f147f414724115eb7a5909a5a8ddcc8c8cd0 100644 (file)
@@ -13,7 +13,7 @@ HELP: <remote-channel>
 "returned by " { $link publish }
 }
 { $examples 
-  { $example "\"localhost\" 9000 <node> \"ID123456\" <remote-channel> \"foo\" over to" }
+  { $code "\"localhost\" 9000 <node> \"ID123456\" <remote-channel> \"foo\" over to" }
 }
 { $see-also publish unpublish } ;
 
@@ -24,7 +24,7 @@ HELP: unpublish
 "accessible by remote nodes."
 }
 { $examples 
-  { $example "<channel> publish unpublish" }
+  { $code "<channel> publish unpublish" }
 }
 { $see-also <remote-channel> publish } ;
 
@@ -37,7 +37,7 @@ HELP: publish
 { $link to } " and " { $link from } " to access the channel."
 }
 { $examples 
-  { $example "<channel> publish" }
+  { $code "<channel> publish" }
 }
 { $see-also <remote-channel> unpublish } ;
 
index 719af59d9e82f17987251dcf93a5d9cacfb893d5..ac05160b317d9cdd690084282ce90657462cb920 100644 (file)
@@ -1,8 +1,9 @@
-USING: help.syntax help.markup kernel prettyprint sequences ;
+USING: help.syntax help.markup kernel prettyprint sequences
+quotations math ;
 IN: combinators.lib
 
 HELP: generate
-{ $values { "generator" "a quotation" } { "predicate" "a quotation" } { "obj" "an object" } }
+{ $values { "generator" quotation } { "predicate" quotation } { "obj" object } }
 { $description "Loop until the generator quotation generates an object that satisfies predicate quotation." }
 { $unchecked-example
     "! Generate a random 20-bit prime number congruent to 3 (mod 4)"
@@ -12,7 +13,7 @@ HELP: generate
 } ;
 
 HELP: ndip
-{ $values { "quot" "a quotation" } { "n" "a number" } }
+{ $values { "quot" quotation } { "n" number } }
 { $description "A generalisation of " { $link dip } " that can work " 
 "for any stack depth. The quotation will be called with a stack that "
 "has 'n' items removed first. The 'n' items are then put back on the "
@@ -25,7 +26,7 @@ HELP: ndip
 { $see-also dip dipd } ;
 
 HELP: nslip
-{ $values { "n" "a number" } }
+{ $values { "n" number } }
 { $description "A generalisation of " { $link slip } " that can work " 
 "for any stack depth. The first " { $snippet "n" } " items after the quotation will be "
 "removed from the stack, the quotation called, and the items restored."
@@ -36,7 +37,7 @@ HELP: nslip
 { $see-also slip nkeep } ;
 
 HELP: nkeep
-{ $values { "quot" "a quotation" } { "n" "a number" } }
+{ $values { "quot" quotation } { "n" number } }
 { $description "A generalisation of " { $link keep } " that can work " 
 "for any stack depth. The first " { $snippet "n" } " items after the quotation will be "
 "saved, the quotation called, and the items restored."
@@ -47,7 +48,7 @@ HELP: nkeep
 { $see-also keep nslip } ;
 
 HELP: map-withn
-{ $values { "seq" "a sequence" } { "quot" "a quotation" } { "n" "a number" } { "newseq" "a sequence" } }
+{ $values { "seq" sequence } { "quot" quotation } { "n" number } { "newseq" sequence } }
 { $description "A generalisation of " { $link map } ". The first " { $snippet "n" } " items after the quotation will be "
 "passed to the quotation given to map-withn for each element in the sequence."
 } 
@@ -57,43 +58,44 @@ HELP: map-withn
 { $see-also each-withn } ;
 
 HELP: each-withn
-{ $values { "seq" "a sequence" } { "quot" "a quotation" } { "n" "a number" } }
+{ $values { "seq" sequence } { "quot" quotation } { "n" number } }
 { $description "A generalisation of " { $link each } ". The first " { $snippet "n" } " items after the quotation will be "
 "passed to the quotation given to each-withn for each element in the sequence."
 } 
 { $see-also map-withn } ;
 
 HELP: sigma
-{ $values { "seq" "a sequence" } { "quot" "a quotation" } }
+{ $values { "seq" sequence } { "quot" quotation } { "n" number } }
 { $description "Like map sum, but without creating an intermediate sequence." }
 { $example
     "! Find the sum of the squares [0,99]"
-    "USE: math.ranges"
-    "100 [1,b] [ sq ] sigma"
+    "USING: math.ranges combinators.lib ;"
+    "100 [1,b] [ sq ] sigma ."
     "338350"
 } ;
 
 HELP: count
-{ $values { "seq" "a sequence" } { "quot" "a quotation" } }
+{ $values { "seq" sequence } { "quot" quotation } { "n" integer } }
 { $description "Efficiently returns the number of elements that the predicate quotation matches." }
 { $example
-    "USE: math.ranges"
+    "USING: math.ranges combinators.lib ;"
     "100 [1,b] [ even? ] count ."
     "50"
 } ;
 
 HELP: all-unique?
-{ $values { "seq" "a sequence" } { "?" "a boolean" } }
+{ $values { "seq" sequence } { "?" "a boolean" } }
 { $description "Tests whether a sequence contains any repeated elements." }
 { $example
+    "USE: combinators.lib"
     "{ 0 1 1 2 3 5 } all-unique? ."
     "f"
 } ;
 
 HELP: &&
-{ $values { "quots" "a sequence of quotations with stack effect " { $snippet "( ... -- ... ? )" } } }
+{ $values { "quots" "a sequence of quotations with stack effect " { $snippet "( ... -- ... ? )" } } { "?" "a boolean" } }
 { $description "Calls each quotation in turn; outputs " { $link f } " if one of the quotations output " { $link f } ", otherwise outputs " { $link t } ". As soon as a quotation outputs " { $link f } ", evaluation stops and subsequent quotations are not called." } ;
 
 HELP: ||
-{ $values { "quots" "a sequence of quotations with stack effect " { $snippet "( ... -- ... ? )" } } }
+{ $values { "quots" "a sequence of quotations with stack effect " { $snippet "( ... -- ... ? )" } } { "?" "a boolean" } }
 { $description "Calls each quotation in turn; outputs " { $link t } " if one of the quotations output " { $link t } ", otherwise outputs " { $link f } ". As soon as a quotation outputs " { $link t } ", evaluation stops and subsequent quotations are not called." } ;
index 43385b911d440335b72d57588ecc4a0ebb7fc8d4..0d76e6f50d7cfc9791df2a25f03a240986126504 100644 (file)
@@ -58,3 +58,5 @@ IN: temporary
         [ dup array? ] [ dup vector? ] [ dup float? ]
     } || nip
 ] unit-test
+
+[ 1 2 3 4 ] [ { 1 2 3 4 } 4 nfirst ] unit-test
index 3f49da7cb394832a82d8e25f31b269fd58718c41..047887bcc8613acea2736d1be90a4831ed05b2e7 100644 (file)
@@ -67,6 +67,9 @@ MACRO: napply ( n -- )
 
 : map-with2 ( obj obj list quot -- newseq ) 2 map-withn ; inline
 
+MACRO: nfirst ( n -- )
+    [ [ swap nth ] curry [ keep ] curry ] map concat [ drop ] compose ;
+
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 : sigma ( seq quot -- n ) [ rot slip + ] curry 0 swap reduce ;
index cf09f3bb576e57bb0ebcfbf3dddebaaa7d02ddb7..39e8b277e3edc9a1edead5d2f1d48e80fec80379 100644 (file)
@@ -25,9 +25,8 @@ HELP: mailbox-put
 
 HELP: (mailbox-block-unless-pred)
 { $values { "pred" "a quotation with stack effect " { $snippet "( X -- bool )" } } 
-          { "mailbox" "a mailbox object" } 
-         { "pred2" "same object as 'pred'" }
-         { "mailbox2" "same object as 'mailbox'" }
+          { "mailbox" "a mailbox object" }
+          { "timeout" "a timeout in milliseconds" }
 }
 { $description "Block the thread if there are no items in the mailbox that return true when the predicate is called with the item on the stack. The predicate must have stack effect " { $snippet "( X -- bool )" } "." } 
 { $see-also make-mailbox mailbox-empty? mailbox-put mailbox-get mailbox-get-all while-mailbox-empty mailbox-get? } ;
@@ -35,6 +34,7 @@ HELP: (mailbox-block-unless-pred)
 HELP: (mailbox-block-if-empty)
 { $values { "mailbox" "a mailbox object" } 
          { "mailbox2" "same object as 'mailbox'" }
+      { "timeout" "a timeout in milliseconds" }
 }
 { $description "Block the thread if the mailbox is empty." } 
 { $see-also make-mailbox mailbox-empty? mailbox-put mailbox-get mailbox-get-all while-mailbox-empty mailbox-get? } ;
index 1be85a364b3dc79c308e6c2f2356567c15e8071d..1292e047778594da7028025aee3dbbcda52b8aa9 100644 (file)
@@ -13,8 +13,8 @@ HELP: bitroll
 { $values { "x" "an integer (input)" } { "s" "an integer (shift)" } { "w" "an integer (wrap)" } { "y" "an integer" } }
 { $description "Roll n by s bits to the left, wrapping around after w bits." }
 { $examples
-    { $example "1 -1 32 bitroll .b" "10000000000000000000000000000000" }
-    { $example "HEX: ffff0000 8 32 bitroll .h" "ff0000ff" }
+    { $example "USE: crypto.common" "1 -1 32 bitroll .b" "10000000000000000000000000000000" }
+    { $example "USE: crypto.common" "HEX: ffff0000 8 32 bitroll .h" "ff0000ff" }
 } ;
 
 
@@ -22,7 +22,7 @@ HELP: hex-string
 { $values { "seq" "a sequence" } { "str" "a string" } }
 { $description "Converts a sequence of values from 0-255 to a string of hex numbers from 0-ff." }
 { $examples
-    { $example "B{ 1 2 3 4 } hex-string print" "01020304" }
+    { $example "USE: crypto.common" "B{ 1 2 3 4 } hex-string print" "01020304" }
 }
 { $notes "Numbers are zero-padded on the left." } ;
 
index 2f134998670ed734e307e9383603641c03a9b6ef..962746ec1a33d859e5addd84893e6b6be841bfa7 100644 (file)
@@ -65,8 +65,8 @@ PROTOCOL: prettyprint-section-protocol
 
 : define-mimic ( group mimicker mimicked -- )
     >r >r group-words r> r> [
-        pick "methods" word-prop at
-        [ method-def <method> spin define-method ] [ 3drop ] if*
+        pick "methods" word-prop at dup
+        [ method-def <method> spin define-method ] [ 3drop ] if
     ] 2curry each ; 
 
 : MIMIC:
index 01034e0e3ff03da803343073e127db1338cded27..97433d247fa31fd65a2418fed9adf27ae39a47ca 100755 (executable)
@@ -195,11 +195,11 @@ TUPLE: one-word-elt ;
 
 M: one-word-elt prev-elt
     drop
-    [ [ f -rot >r 1- r> (prev-word) ] (word-elt) ] (prev-char) ;
+    [ f -rot >r 1- r> (prev-word) ] (word-elt) ;
 
 M: one-word-elt next-elt
     drop
-    [ [ f -rot (next-word) ] (word-elt) ] (next-char) ;
+    [ f -rot (next-word) ] (word-elt) ;
 
 TUPLE: word-elt ;
 
index b79ac6a5940c14b683a7a56ac8b6df1711687720..69a9e2baddcba08be15cd407064c1ac1c6151018 100644 (file)
@@ -1,8 +1,15 @@
 USING: definitions kernel parser words sequences math.parser
-namespaces editors io.launcher ;
+namespaces editors io.launcher windows.shell32 io.files
+io.paths strings ;
 IN: editors.editpadpro
 
+: editpadpro-path
+    \ editpadpro-path get-global [
+        program-files "JGsoft" path+ walk-dir
+        [ >lower "editpadpro.exe" tail? ] find nip
+    ] unless* ;
+
 : editpadpro ( file line -- )
-    [ "editpadpro.exe /l" % # " \"" % % "\"" % ] "" make run-process ;
+    [ editpadpro-path % " /l" % # " \"" % % "\"" % ] "" make run-detached ;
 
 [ editpadpro ] edit-hook set-global
diff --git a/extra/editors/editplus/authors.txt b/extra/editors/editplus/authors.txt
new file mode 100644 (file)
index 0000000..4eec9c9
--- /dev/null
@@ -0,0 +1 @@
+Aaron Schaefer
diff --git a/extra/editors/editplus/editplus.factor b/extra/editors/editplus/editplus.factor
new file mode 100755 (executable)
index 0000000..bff523b
--- /dev/null
@@ -0,0 +1,15 @@
+USING: editors io.files io.launcher kernel math.parser
+namespaces sequences windows.shell32 ;
+IN: editors.editplus
+
+: editplus-path ( -- path )
+    \ editplus-path get-global [
+        program-files "\\EditPlus 2\\editplus.exe" append
+    ] unless* ;
+
+: editplus ( file line -- )
+    [
+        editplus-path % " -cursor " % # " " % %
+    ] "" make run-detached ;
+
+[ editplus ] edit-hook set-global
diff --git a/extra/editors/editplus/summary.txt b/extra/editors/editplus/summary.txt
new file mode 100644 (file)
index 0000000..9a696c2
--- /dev/null
@@ -0,0 +1 @@
+EditPlus editor integration
diff --git a/extra/editors/emeditor/authors.txt b/extra/editors/emeditor/authors.txt
new file mode 100644 (file)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/extra/editors/emeditor/emeditor.factor b/extra/editors/emeditor/emeditor.factor
new file mode 100755 (executable)
index 0000000..2caa42b
--- /dev/null
@@ -0,0 +1,16 @@
+USING: editors hardware-info.windows io.files io.launcher
+kernel math.parser namespaces sequences windows.shell32 ;
+IN: editors.emeditor
+
+: emeditor-path ( -- path )
+    \ emeditor-path get-global [
+        program-files "\\EmEditor\\EmEditor.exe" path+
+    ] unless* ;
+
+: emeditor ( file line -- )
+    [
+        emeditor-path % " /l " % #
+        " " % "\"" % % "\"" %
+    ] "" make run-detached ;
+
+[ emeditor ] edit-hook set-global
diff --git a/extra/editors/emeditor/summary.txt b/extra/editors/emeditor/summary.txt
new file mode 100644 (file)
index 0000000..831acc0
--- /dev/null
@@ -0,0 +1 @@
+EmEditor integration
index 024f5cfffaa92e4717823847c0e6f3b0a88d6a1a..7a1f939b5c1f297be8d2d31d726a581ef5be1db6 100644 (file)
@@ -1,10 +1,18 @@
-USING: kernel math math.parser namespaces editors.vim ;
+USING: io.backend io.files kernel math math.parser
+namespaces editors.vim sequences system ;
 IN: editors.gvim
 
 TUPLE: gvim ;
 
+HOOK: gvim-path io-backend ( -- path )
+
+
 M: gvim vim-command ( file line -- string )
-    [ "\"" % vim-path get % "\" \"" % swap % "\" +" % # ] "" make ;
+    [ "\"" % gvim-path % "\" \"" % swap % "\" +" % # ] "" make ;
+
+t vim-detach set-global ! don't block the ui
 
 T{ gvim } vim-editor set-global
-"gvim" vim-path set-global
+
+USE-IF: unix? editors.gvim.unix
+USE-IF: windows? editors.gvim.windows
diff --git a/extra/editors/gvim/unix/unix.factor b/extra/editors/gvim/unix/unix.factor
new file mode 100644 (file)
index 0000000..fd295cc
--- /dev/null
@@ -0,0 +1,7 @@
+USING: editors.gvim io.unix.backend kernel namespaces ;
+IN: editors.gvim.unix
+
+M: unix-io gvim-path
+    \ gvim-path get-global [
+        "gvim"
+    ] unless* ;
diff --git a/extra/editors/gvim/windows/windows.factor b/extra/editors/gvim/windows/windows.factor
new file mode 100644 (file)
index 0000000..5a3ea6b
--- /dev/null
@@ -0,0 +1,8 @@
+USING: editors.gvim io.files io.windows kernel namespaces
+sequences windows.shell32 ;
+IN: editors.gvim.windows
+
+M: windows-io gvim-path
+    \ gvim-path get-global [
+        program-files walk-dir [ "gvim.exe" tail? ] find nip
+    ] unless* ;
index 42f0568c3a020b47a2e9ebf7270d22c6807fafd7..4f3fde917d01e06457e8073e781dbe663399adff 100644 (file)
@@ -1,13 +1,15 @@
-USING: editors io.launcher math.parser namespaces ;
+USING: editors io.files io.launcher kernel math.parser
+namespaces windows.shell32 ;
 IN: editors.notepadpp
 
+: notepadpp-path
+    \ notepadpp-path get-global [
+        program-files "notepad++\\notepad++.exe" path+
+    ] unless* ;
+
 : notepadpp ( file line -- )
     [
-        \ notepadpp get-global % " -n" % # " " % %
+        notepadpp-path % " -n" % # " " % %
     ] "" make run-detached ;
 
-! Put in your .factor-boot-rc
-! "c:\\Program Files\\notepad++\\notepad++.exe" \ notepadpp set-global
-! "k:\\Program Files (x86)\\notepad++\\notepad++.exe" \ notepadpp set-global
-
 [ notepadpp ] edit-hook set-global
diff --git a/extra/editors/ted-notepad/authors.txt b/extra/editors/ted-notepad/authors.txt
new file mode 100644 (file)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/extra/editors/ted-notepad/summary.txt b/extra/editors/ted-notepad/summary.txt
new file mode 100644 (file)
index 0000000..c1b8424
--- /dev/null
@@ -0,0 +1 @@
+TED Notepad integration
diff --git a/extra/editors/ted-notepad/ted-notepad.factor b/extra/editors/ted-notepad/ted-notepad.factor
new file mode 100644 (file)
index 0000000..b56ee0a
--- /dev/null
@@ -0,0 +1,16 @@
+USING: editors io.files io.launcher kernel math.parser
+namespaces sequences windows.shell32 ;
+IN: editors.ted-notepad
+
+: ted-notepad-path
+    \ ted-notepad-path get-global [
+        program-files "\\TED Notepad\\TedNPad.exe" path+
+    ] unless* ;
+
+: ted-notepad ( file line -- )
+    [
+        ted-notepad-path % " /l" % #
+        " " % %
+    ] "" make run-detached ;
+
+[ ted-notepad ] edit-hook set-global
diff --git a/extra/editors/ultraedit/authors.txt b/extra/editors/ultraedit/authors.txt
new file mode 100644 (file)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/extra/editors/ultraedit/summary.txt b/extra/editors/ultraedit/summary.txt
new file mode 100644 (file)
index 0000000..fe2ad9c
--- /dev/null
@@ -0,0 +1 @@
+UltraEdit editor integration
diff --git a/extra/editors/ultraedit/ultraedit.factor b/extra/editors/ultraedit/ultraedit.factor
new file mode 100644 (file)
index 0000000..50c241d
--- /dev/null
@@ -0,0 +1,17 @@
+USING: editors io.files io.launcher kernel math.parser
+namespaces sequences windows.shell32 ;
+IN: editors.ultraedit
+
+: ultraedit-path ( -- path )
+    \ ultraedit-path get-global [
+        program-files
+        "\\IDM Computer Solutions\\UltraEdit-32\\uedit32.exe" path+
+    ] unless* ;
+
+: ultraedit ( file line -- )
+    [
+        ultraedit-path % " " % swap % "/" % # "/1" %
+    ] "" make run-detached ;
+
+
+[ ultraedit ] edit-hook set-global
diff --git a/extra/editors/wordpad/authors.txt b/extra/editors/wordpad/authors.txt
new file mode 100644 (file)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/extra/editors/wordpad/summary.txt b/extra/editors/wordpad/summary.txt
new file mode 100644 (file)
index 0000000..016c602
--- /dev/null
@@ -0,0 +1 @@
+Wordpad editor integration
diff --git a/extra/editors/wordpad/wordpad.factor b/extra/editors/wordpad/wordpad.factor
new file mode 100644 (file)
index 0000000..eb882a9
--- /dev/null
@@ -0,0 +1,15 @@
+USING: editors hardware-info.windows io.launcher kernel
+math.parser namespaces sequences windows.shell32 ;
+IN: editors.wordpad
+
+: wordpad-path ( -- path )
+    \ wordpad-path get [
+        program-files "\\Windows NT\\Accessories\\wordpad.exe" append
+    ] unless* ;
+
+: wordpad ( file line -- )
+    [
+        wordpad-path % drop " " % "\"" % % "\"" %
+    ] "" make run-detached ;
+
+[ wordpad ] edit-hook set-global
diff --git a/extra/faq/faq.factor b/extra/faq/faq.factor
new file mode 100644 (file)
index 0000000..1968a9e
--- /dev/null
@@ -0,0 +1,114 @@
+! Copyright (C) 2007 Daniel Ehrenberg
+! See http://factorcode.org/license.txt for BSD license.
+USING: xml kernel sequences xml.utilities combinators.lib
+math xml.data arrays assocs xml.generator xml.writer namespaces
+math.parser io ;
+IN: faq
+
+: find-after ( seq quot -- elem after )
+    over >r find r> rot 1+ tail ; inline
+
+: tag-named*? ( tag name -- ? )
+    assure-name swap tag-named? ;
+
+! Questions
+TUPLE: q/a question answer ;
+C: <q/a> q/a
+
+: li>q/a ( li -- q/a )
+    [ "br" tag-named*? not ] subset
+    [ "strong" tag-named*? ] find-after
+    >r tag-children r> <q/a> ;
+
+: q/a>li ( q/a -- li )
+    [ q/a-question "strong" build-tag* f "br" build-tag* 2array ] keep
+    q/a-answer append "li" build-tag* ;
+
+: xml>q/a ( xml -- q/a )
+    [ "question" tag-named tag-children ] keep
+    "answer" tag-named tag-children <q/a> ;
+
+: q/a>xml ( q/a -- xml )
+    [ q/a-question "question" build-tag* ] keep
+    q/a-answer "answer" build-tag*
+    "\n" swap 3array "qa" build-tag* ;
+
+! Lists of questions
+TUPLE: question-list title seq ;
+C: <question-list> question-list
+
+: xml>question-list ( list -- question-list )
+    [ "title" swap at ] keep
+    tag-children [ tag? ] subset [ xml>q/a ] map
+    <question-list> ;
+
+: question-list>xml ( question-list -- list )
+    [ question-list-seq [ q/a>xml "\n" swap 2array ]
+      map concat "list" build-tag* ] keep
+    question-list-title [ "title" pick set-at ] when* ;
+
+: html>question-list ( h3 ol -- question-list )
+    >r [ children>string ] [ f ] if* r>
+    children-tags [ li>q/a ] map <question-list> ;
+
+: question-list>h3 ( id question-list -- h3 )
+    question-list-title [
+        "h3" build-tag
+        swap number>string "id" pick set-at
+    ] [ drop f ] if* ;
+
+: question-list>html ( question-list start id -- h3/f ol )
+    -rot >r [ question-list>h3 ] keep
+    question-list-seq [ q/a>li ] map "ol" build-tag* r>
+    number>string "start" pick set-at
+    "margin-left: 5em" "style" pick set-at ;
+
+! Overall everything
+TUPLE: faq header lists ;
+C: <faq> faq
+
+: html>faq ( div -- faq )
+    unclip swap { "h3" "ol" } [ tags-named ] curry* map
+    first2 >r f add* r> [ html>question-list ] 2map <faq> ;
+
+: header, ( faq -- )
+    dup faq-header ,
+    faq-lists first 1 -1 question-list>html nip , ;
+
+: br, ( -- )
+    "br" contained, nl, ;
+
+: toc-link, ( question-list number -- )
+    number>string "#" swap append "href" swap 2array 1array
+    "a" swap [ question-list-title , ] tag*, br, ;
+
+: toc, ( faq -- )
+    "div" { { "style" "background-color: #eee; margin-left: 30%; margin-right: 30%; width: auto; padding: 5px; margin-top: 1em; margin-bottom: 1em" } } [
+        "strong" [ "The big questions" , ] tag, br,
+        faq-lists 1 tail dup length [ toc-link, ] 2each
+    ] tag*, ;
+
+: faq-sections, ( question-lists -- )
+    unclip question-list-seq length 1+ dupd
+    [ question-list-seq length + ] accumulate nip
+    0 -rot [ pick question-list>html [ , nl, ] 2apply 1+ ] 2each drop ;
+
+: faq>html ( faq -- div )
+    "div" [
+        dup header,
+        dup toc,
+        faq-lists faq-sections,
+    ] make-xml ;
+
+: xml>faq ( xml -- faq )
+    [ "header" tag-named children>string ] keep
+    "list" tags-named [ xml>question-list ] map <faq> ;
+
+: faq>xml ( faq -- xml )
+    "faq" [
+        "header" [ dup faq-header , ] tag,
+        faq-lists [ question-list>xml , nl, ] each
+    ] make-xml ;
+
+: read-write-faq ( xml-stream -- )
+    read-xml xml>faq faq>html write-xml ;
diff --git a/extra/furnace/authors.txt b/extra/furnace/authors.txt
new file mode 100644 (file)
index 0000000..f372b57
--- /dev/null
@@ -0,0 +1,2 @@
+Slava Pestov
+Doug Coleman
index 85fc6c8727749f848b8b276ef72c92b4aa5734f5..6a14d40cde26173283db7f119b800ddd5ae9b404 100644 (file)
@@ -28,7 +28,7 @@ TUPLE: test-tuple m n ;
     [
         H{
             { "bar" "hello" }
-        } \ foo query>quot
+        } \ foo query>seq
     ] with-scope
 ] unit-test
 
index f2ce0ddf18dfc9ab7053a9deb46ca364e519bf54..6d6ce6b4bf96c8eb16c13aa561c8a6a214244ccf 100644 (file)
@@ -1,48 +1,39 @@
-! Copyright (C) 2006 Slava Pestov
+! Copyright (C) 2006 Slava Pestov, Doug Coleman
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel vectors io assocs quotations splitting strings 
-       words sequences namespaces arrays hashtables debugger
-       continuations tuples classes io.files 
-       http http.server.templating http.basic-authentication 
-       webapps.callback html html.elements 
-       http.server.responders furnace.validator ;
+USING: arrays assocs debugger furnace.sessions furnace.validator
+hashtables html.elements http http.server.responders
+http.server.templating
+io.files kernel namespaces quotations sequences splitting words
+strings vectors webapps.callback ;
+USING: continuations io prettyprint ;
 IN: furnace
 
-SYMBOL: default-action
+: code>quotation ( word/quot -- quot )
+    dup word? [ 1quotation ] when ;
 
+SYMBOL: default-action
 SYMBOL: template-path
 
-: define-authenticated-action ( word params realm -- )
-    pick swap "action-realm" set-word-prop
+: render-template ( template -- )
+    template-path get swap path+
+    ".furnace" append resource-path
+    run-template-file ;
+
+: define-action ( word hash -- )
     over t "action" set-word-prop
     "action-params" set-word-prop ;
 
-: define-action ( word params -- )
-    f define-authenticated-action ;
-
-: define-redirect ( word quot -- )
-    "action-redirect" set-word-prop ;
-
-: responder-vocab ( name -- vocab )
-    "webapps." swap append ;
-
-: lookup-action ( name webapp -- word )
-    responder-vocab lookup dup [
-        dup "action" word-prop [ drop f ] unless
-    ] when ;
+: define-form ( word1 word2 hash -- )
+    dupd define-action
+    swap code>quotation "form-failed" set-word-prop ;
 
-: truncate-url ( url -- action-name )
-  CHAR: / over index [ head ] when* ;
+: default-values ( word hash -- )
+    "default-values" set-word-prop ;
 
-: current-action ( url -- word/f )
-    dup empty? [ drop default-action get ] when
-    truncate-url "responder" get lookup-action ;
-
-PREDICATE: word action "action" word-prop ;
-
-: quot>query ( seq action -- hash )
-    >r >array r> "action-params" word-prop
-    [ first swap 2array ] 2map >hashtable ;
+SYMBOL: request-params
+SYMBOL: current-action
+SYMBOL: validators-errored
+SYMBOL: validation-errors
 
 : action-link ( query action -- url )
     [
@@ -52,6 +43,34 @@ PREDICATE: word action "action" word-prop ;
         word-name %
     ] "" make swap build-url ;
 
+: action-param ( hash paramsepc -- obj error/f )
+    unclip rot at swap >quotation apply-validators ;
+
+: query>seq ( hash word -- seq )
+    "action-params" word-prop [
+        dup first -rot
+        action-param [
+            t validators-errored >session
+            rot validation-errors session> set-at
+        ] [
+            nip
+        ] if*
+    ] curry* map ;
+
+: lookup-session ( hash -- session )
+    "furnace-session-id" over at* [
+        sessions get-global at
+        [ nip ] [ "furnace-session-id" over delete-at lookup-session ] if*
+    ] [
+        drop new-session rot "furnace-session-id" swap set-at
+    ] if ;
+
+: quot>query ( seq action -- hash )
+    >r >array r> "action-params" word-prop
+    [ first swap 2array ] 2map >hashtable ;
+
+PREDICATE: word action "action" word-prop ;
+
 : action-call? ( quot -- ? )
     >vector dup pop action? >r [ word? not ] all? r> and ;
 
@@ -64,80 +83,130 @@ PREDICATE: word action "action" word-prop ;
         t register-html-callback
     ] if ;
 
-: render-link ( quot name -- )
-    <a swap quot-link =href a> write </a> ;
+: replace-variables ( quot -- quot )
+    [ dup string? [ request-params session> at ] when ] map ;
 
-: action-param ( params paramspec -- obj error/f )
-    unclip rot at swap >quotation apply-validators ;
+: furnace-session-id ( -- hash )
+    "furnace-session-id" request-params session> at
+    "furnace-session-id" associate ;
 
-: query>quot ( params action -- seq )
-    "action-params" word-prop [ action-param drop ] curry* map ;
+: redirect-to-action ( -- )
+    current-action session>
+    "form-failed" word-prop replace-variables
+    quot-link furnace-session-id build-url permanent-redirect ;
 
-SYMBOL: request-params
+: if-form-page ( if then -- )
+    current-action session> "form-failed" word-prop -rot if ;
+
+: do-action
+    current-action session> [ query>seq ] keep add >quotation call ;
 
-: perform-redirect ( action -- )
-    "action-redirect" word-prop
-    [ dup string? [ request-params get at ] when ] map
-    [ quot-link permanent-redirect ] when* ;
+: process-form ( -- )
+    H{ } clone validation-errors >session
+    request-params session> current-action session> query>seq
+    validators-errored session> [
+        drop redirect-to-action
+    ] [
+        current-action session> add >quotation call
+    ] if ;
 
-: (call-action) ( params action -- )
-    over request-params set
-    [ query>quot ] keep [ add >quotation call ] keep
-    perform-redirect ;
+: page-submitted ( -- )
+    [ process-form ] [ request-params session> do-action ] if-form-page ;
 
-: call-action ( params action -- )
-    dup "action-realm" word-prop [
-        [ (call-action) ] with-basic-authentication
-    ] [ (call-action) ] if* ;
+: action-first-time ( -- )
+    request-params session> current-action session>
+    [ "default-values" word-prop swap union request-params >session ] keep
+    request-params session> do-action ;
 
-: service-request ( params url -- )
-    current-action [
+: page-not-submitted ( -- )
+    [ redirect-to-action ] [ action-first-time ] if-form-page ;
+
+: setup-call-action ( hash word -- )
+    over lookup-session session set
+    current-action >session
+    request-params session> swap union
+    request-params >session
+    f validators-errored >session ;
+
+: call-action ( hash word -- )
+    setup-call-action
+    "furnace-form-submitted" request-params session> at
+    [ page-submitted ] [ page-not-submitted ] if ;
+
+: responder-vocab ( str -- newstr )
+    "webapps." swap append ;
+
+: lookup-action ( str webapp -- word )
+    responder-vocab lookup dup [
+        dup "action" word-prop [ drop f ] unless
+    ] when ;
+
+: truncate-url ( str -- newstr )
+    CHAR: / over index [ head ] when* ;
+
+: parse-action ( str -- word/f )
+    dup empty? [ drop default-action get ] when
+    truncate-url "responder" get lookup-action ;
+
+: service-request ( hash str -- )
+    parse-action [
         [ call-action ] [ <pre> print-error </pre> ] recover
     ] [
         "404 no such action: " "argument" get append httpd-error
     ] if* ;
 
-: service-get ( url -- ) "query" get swap service-request ;
+: service-get
+    "query" get swap service-request ;
+
+: service-post
+    "response" get swap service-request ;
 
-: service-post ( url -- ) "response" get swap service-request ;
+: web-app ( name defaul path -- )
+    [
+        template-path set
+        default-action set
+        "responder" set
+        [ service-get ] "get" set
+        [ service-post ] "post" set
+    ] make-responder ;
 
+USING: classes html tuples vocabs ;
 : explode-tuple ( tuple -- )
     dup tuple-slots swap class "slot-names" word-prop
     [ set ] 2each ;
 
 SYMBOL: model
 
-: call-template ( model template -- )
+: with-slots ( model quot -- )
     [
-        >r [ dup model set explode-tuple ] when* r>
-        ".furnace" append resource-path run-template-file
+        >r [ dup model set explode-tuple ] when* r> call
     ] with-scope ;
 
-: render-template ( model template -- )
-    template-path get swap path+ call-template ;
+: render-component ( model template -- )
+    swap [ render-template ] with-slots ;
 
-: render-page* ( model body-template head-template -- )
-    [
-        [ render-template ] [ f rot render-template ] html-document 
-    ] serve-html ;
+: browse-webapp-source ( vocab -- )
+    <a f >vocab-link browser-link-href =href a>
+        "Browse source" write
+    </a> ;
 
-: render-titled-page* ( model body-template head-template title -- )
-    [ 
-        [ render-template ] swap [ <title> write </title> f rot render-template ] curry html-document
-    ] serve-html ;
+: send-resource ( name -- )
+    template-path get swap path+ resource-path <file-reader>
+    stdio get stream-copy ;
 
+: render-link ( quot name -- )
+    <a swap quot-link =href a> write </a> ;
 
-: render-page ( model template title -- )
-    [
-        [ render-template ] simple-html-document
-    ] serve-html ;
+: session-var ( str -- newstr )
+    request-params session> at ;
+
+: render ( str -- )
+    request-params session> at [ write ] when* ;
+
+: render-error ( str error-str -- )
+    swap validation-errors session> at validation-error? [
+        write
+    ] [
+        drop
+    ] if ;
 
-: web-app ( name default path -- )
-    [
-        template-path set
-        default-action set
-        "responder" set
-        [ service-get ] "get" set
-        [ service-post ] "post" set
-        ! [ service-head ] "head" set
-    ] make-responder ;
diff --git a/extra/furnace/scaffold/crud-templates/edit.furnace b/extra/furnace/scaffold/crud-templates/edit.furnace
deleted file mode 100644 (file)
index 249ad0a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<% USING: namespaces io kernel furnace words prettyprint
-generic sequences parser ; %>
-
-<% "model" get %>
-
-<form action="<% dup class dup word-vocabulary use+ unparse write %>-update" method="post">
-
-<% dup crud-index [ %>
-
-<input type="hidden" name="crud-index" value="<% write %>"/>
-
-<% ] when* %>
-
-<table>
-
-<% dup tuple-slots swap class "slot-names" word-prop [ %> <tr><td><% dup write %>:</td>
-    <td><input type="text" name="<% write %>" value="<% write %>"/></td></tr><% ] 2each %>
-    
-</table>
-<input type="submit" name="submit" value="submit"/>
-</form>
\ No newline at end of file
diff --git a/extra/furnace/scaffold/crud-templates/list.furnace b/extra/furnace/scaffold/crud-templates/list.furnace
deleted file mode 100644 (file)
index a472f29..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<% USING: namespaces kernel io sequences generic words
-prettyprint furnace parser ; %>
-
-<% "model" get dup sequence? not [ unparse %>
-<p><a href="<% write %>-new">New</a></p><% ] [ %>
-
-<p><a href="<% first class unparse write %>-new">New</a></p>
-
-<table>
-<% "model" get dup first class dup
-    word-vocabulary use+ "slot-names" word-prop %>
-<tr><% [ %><th><% write %></th><% ] each %></tr>
-
-<% [ %>
-    
-<tr><% dup tuple-slots [ %><td><% write %></td><% ] each %>
-    
-    <% dup crud-index swap class dup "crud-index" word-prop swap unparse %>
-    <td><a href="<% 3dup write %>-show?<% write %>=<% write %>">Show</a></td>
-    <td><a href="<% 3dup write %>-edit?<% write %>=<% write %>">Edit</a></td>
-    <td><a href="<% write %>-delete?<% write %>=<% write %>">Delete</a></td></tr>
-
-<% ] each %>
-
-</table>
-
-<% ] if %>
\ No newline at end of file
diff --git a/extra/furnace/scaffold/crud-templates/show.furnace b/extra/furnace/scaffold/crud-templates/show.furnace
deleted file mode 100644 (file)
index 3500f24..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<% USING: namespaces io kernel words generic sequences 
-prettyprint furnace parser ; %>
-
-<% "model" get [ %>
-
-<% dup tuple-slots over class dup
-    word-vocabulary use+ "slot-names" word-prop %>
-
-<table>
-    
-<% [ %><tr><td><% write %>:</td><td><% write %></td></tr><% ] 2each %>
-
-</table>
-
-<% dup crud-index swap class dup "crud-index" word-prop swap unparse %>
-<p><a href="<% 3dup write %>-edit?<% write %>=<% write %>">Edit</a> |
-    <a href="<% [ write %>-delete?<% write %>=<% write  ] keep %>">Delete</a> |
-    <a href="<% dup write %>-new">New</a> | <a href="<% write %>-list">List</a></p>
-
-<% ] [ %><p>No such tuple</p><% ] if* %>
\ No newline at end of file
diff --git a/extra/furnace/scaffold/scaffold.factor b/extra/furnace/scaffold/scaffold.factor
deleted file mode 100644 (file)
index f0c2850..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-USING: http.server help.markup help.syntax kernel prettyprint
-sequences parser namespaces words classes math tuples.private
-quotations arrays strings ;
-
-IN: furnace
-
-TUPLE: furnace-model model ;
-C: <furnace-model> furnace-model
-
-HELP: furnace-model "This definition exists to circumvent a limitation in furnace with regard to sending arbitrary objects as models to .furnace templates." ;
-
-: crud-create ( class string -- word )
-    swap unparse "-" rot 3append in get create ;
-
-HELP: crud-create
-{ $values { "class" class } { "string" string } { "word" word } }
-{ $description "A CRUD utility function - creates a new action word for a given class and suffix string" } ;
-
-: crud-word ( class string -- word )
-    swap unparse "-" rot 3append parse first ;
-HELP: crud-word
-{ $values { "class" class } { "string" string } { "word" word } }
-{ $description "A CRUD utility function - looks up a word that has been crud-created" } ;
-
-: crud-index ( tuple -- )
-    dup class dup "crud-index" word-prop crud-word execute ;
-
-: crud-lookup ( string class -- obj )
-    get-global [ crud-index = ] curry* subset
-    dup empty? [ drop f ] [ first ] if ;
-HELP: crud-lookup
-{ $values { "string" string } { "class" class } { "obj" object } }
-{ $description "A CRUD utility function - looks up an object in the store by the pre-designated index." } ;
-
-: crud-lookup* ( string class -- tuple )
-    tuck crud-lookup
-    [ ] [ dup "slot-names" word-prop length 2 + <tuple> ] ?if ;
-
-HELP: crud-lookup*
-{ $values { "string" string } { "class" class } { "tuple" tuple } }
-"A CRUD utility function - same as crud-lookup, but always returns a tuple of the given class.  When the lookup fails, returns a tuple of the given class with all slots set to f." ;
-
-: crud-page ( model template title -- )
-    [ "libs/furnace/crud-templates" template-path set render-page ]
-    with-scope ;
-
-: define-list ( class -- word )
-    dup "list" crud-create swap
-    [ dup get-global dup empty? -rot ? <furnace-model> "list" "List" crud-page ]
-    curry dupd define-compound ;
-
-: define-show ( class -- word )
-    dup "show" crud-create swap
-    [ crud-lookup <furnace-model> "show" "Show" crud-page ] 
-    curry dupd define-compound ;
-
-: define-edit ( class -- word )
-    dup "edit" crud-create swap
-    [ crud-lookup* <furnace-model> "edit" "Edit" crud-page ] 
-    curry dupd define-compound ;
-    
-: define-new ( class -- word )
-    dup "new" crud-create swap "edit" crud-word
-    [ f swap execute ]
-    curry dupd define-compound ;
-    
-: define-update ( class -- word )
-    dup "update" crud-create swap
-    [ 
-        tuck crud-lookup [ over get-global remove over set-global ] when* 
-        dup >r "constructor" word-prop execute
-        r> 2dup get-global swap add over set-global swap
-        crud-index swap "show" crud-word execute
-    ] curry dupd define-compound ;
-
-: define-delete ( class -- word )
-    dup "delete" crud-create swap
-    [ 
-        tuck crud-lookup [ over get-global remove over set-global ] when* 
-        "list" crud-word execute
-    ] curry dupd define-compound ;
-
-: define-lookup ( class -- )
-    dup "crud-index" word-prop ">" pick unparse 3append in get create
-    swap [ crud-lookup ] curry define-compound ;
-
-: define-lookup* ( class -- )
-    dup "crud-index" word-prop ">" pick unparse "*" append 3append 
-    in get create swap [ crud-lookup* ] curry define-compound ;
-
-: scaffold-params ( class -- array )
-    "crud-index" word-prop 1array 1array ;
-
-: scaffold ( class index realm -- )
-    -rot dupd "crud-index" set-word-prop
-    [ define-lookup ] keep [ define-lookup* ] keep
-    [ get-global [ { } over set-global ] unless ] keep
-    [ define-list { } rot define-authenticated-action ] 2keep
-    [ dup define-show swap scaffold-params rot 
-        define-authenticated-action ] 2keep
-    [ dup define-edit swap scaffold-params rot
-        define-authenticated-action ] 2keep
-    [ define-new { } rot define-authenticated-action ] 2keep
-    [ dup define-update swap "slot-names" word-prop 
-        "crud-index" add [ 1array ] map rot 
-        define-authenticated-action ] 2keep
-    dup define-delete swap scaffold-params rot
-    define-authenticated-action ;
-
-HELP: scaffold
-{ $values { "class" class } { "index" "an index" } { "realm" "a realm" } }
-"If realm is not f, then realm is used as the basic authentication realm for the scaffolding actions." ;
-
-ARTICLE: { "furnace" "crud" } "CRUD Scaffolding"
-{ $code 
-    "\"libs/furnace\" require"
-    "USING: furnace httpd threads ;"
-    "IN: furnace:crud-example"
-    "TUPLE: foo bar baz ;"
-    "\"crud-example\" \"foo-list\" f web-app"
-    "foo \"bar\" f scaffold"
-    "[ 8888 httpd ] in-thread"
-} ;
\ No newline at end of file
diff --git a/extra/furnace/sessions/sessions.factor b/extra/furnace/sessions/sessions.factor
new file mode 100644 (file)
index 0000000..d253ae1
--- /dev/null
@@ -0,0 +1,31 @@
+USING: assocs calendar init kernel math.parser namespaces random ;
+IN: furnace.sessions
+
+SYMBOL: sessions
+
+[ H{ } clone sessions set-global ] "furnace.sessions" add-init-hook
+
+: new-session-id ( -- str )
+    1 big-random number>string ;
+
+TUPLE: session created last-seen user-agent namespace ;
+
+: <session> ( -- obj )
+    now dup H{ } clone
+    [ set-session-created set-session-last-seen set-session-namespace ]
+    \ session construct ;
+
+: new-session ( -- obj id )
+    <session> new-session-id [ sessions get-global set-at ] 2keep ;
+
+: get-session ( id -- obj/f )
+    sessions get-global at* [ "no session found 1" throw ] unless ;
+
+: destroy-session ( id -- )
+    sessions get-global delete-at ;
+
+: session> ( str -- obj )
+    session get session-namespace at ;
+
+: >session ( value key -- )
+    session get session-namespace set-at ;
old mode 100644 (file)
new mode 100755 (executable)
index bcc6b57..901191b
@@ -1,22 +1,18 @@
 ! Copyright (C) 2007 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: parser-combinators regexp lazy-lists sequences kernel
-promises ;
+promises strings ;
 IN: globs
 
 <PRIVATE
 
-: 'char'
-    [ ",*?" member? not ] satisfy ;
+: 'char' [ ",*?" member? not ] satisfy ;
 
-: 'string'
-    'char' <+> [ token ] <@ ;
+: 'string' 'char' <+> [ >lower token ] <@ ;
 
-: 'escaped-char'
-    "\\" token any-char-parser &> [ 1token ] <@ ;
+: 'escaped-char' "\\" token any-char-parser &> [ 1token ] <@ ;
 
-: 'escaped-string'
-    'string' 'escaped-char' <|> ;
+: 'escaped-string' 'string' 'escaped-char' <|> ;
 
 DEFER: 'term'
 
@@ -39,4 +35,4 @@ PRIVATE>
 : <glob> 'glob' just parse-1 just ;
 
 : glob-matches? ( input glob -- ? )
-    <glob> parse nil? not ;
+    >r >lower r> <glob> parse nil? not ;
index 1ae908c6efcf124b086b7930a1d930628cde2d77..42fd9e53438423465f5fe2ede76de736d5c41b97 100644 (file)
@@ -1,7 +1,7 @@
-USING: alien.c-types hardware-info kernel math namespaces windows windows.kernel32 ;
+USING: alien.c-types hardware-info hardware-info.windows
+kernel math namespaces windows windows.kernel32 ;
 IN: hardware-info.windows.ce
 
-TUPLE: wince ;
 T{ wince } os set-global
 
 : memory-status ( -- MEMORYSTATUS )
index fafcb58dca4faf316fb16539ec710438802dd1fc..2b2522e6ee9f2cb507677afe4feaf18c6102d541 100644 (file)
@@ -1,8 +1,8 @@
-USING: alien alien.c-types hardware-info kernel libc math namespaces
+USING: alien alien.c-types hardware-info hardware-info.windows
+kernel libc math namespaces
 windows windows.advapi32 windows.kernel32 ;
 IN: hardware-info.windows.nt
 
-TUPLE: winnt ;
 T{ winnt } os set-global
 
 : memory-status ( -- MEMORYSTATUSEX )
index bbae541ab4651ca2537f08e53e2a1fbcf537330a..88e9a8cfb56e85584d1c22856c4f8a0398e4b630 100644 (file)
@@ -1,5 +1,6 @@
 USING: alien alien.c-types kernel libc math namespaces
-windows windows.kernel32 windows.advapi32 hardware-info ;
+windows windows.kernel32 windows.advapi32 hardware-info
+words ;
 IN: hardware-info.windows
 
 TUPLE: wince ;
@@ -53,6 +54,22 @@ M: windows cpus ( -- n )
 : sse3? ( -- ? )
     PF_SSE3_INSTRUCTIONS_AVAILABLE feature-present? ;
 
+: <u16-string-object> ( n -- obj )
+    "ushort" <c-array> ;
+
+: get-directory ( word -- str )
+    >r MAX_UNICODE_PATH [ <u16-string-object> ] keep dupd r>
+    execute win32-error=0/f alien>u16-string ; inline
+
+: windows-directory ( -- str )
+    \ GetWindowsDirectory get-directory ;
+
+: system-directory ( -- str )
+    \ GetSystemDirectory get-directory ;
+
+: system-windows-directory ( -- str )
+    \ GetSystemWindowsDirectory get-directory ;
+
 USE-IF: wince? hardware-info.windows.ce
 USE-IF: winnt? hardware-info.windows.nt
 
diff --git a/extra/help/handbook/Untitled-15 b/extra/help/handbook/Untitled-15
deleted file mode 100644 (file)
index 20a5c62..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-{ $subheading "Performance" }
-{ $list
-    { "Continuations are now supported by the static stack effect system. This means that the " { $link infer } " word and the optimizing compiler now both support code which uses continuations." }
-    { "Many words which previously ran in the interpreter, such as error handling and I/O, are now compiled to optimized machine code." }
-    { "A non-optimizing, just-in-time compiler replaces the interpreter with no loss in functionality or introspective ability." }
-    { "The non-optimizing compiler compiles quotations the first time they are called, generating a series of stack pushes and subroutine calls." }
-    { "The optimizing compiler now performs some more representation inference. Alien pointers are unboxed where possible. This improves performance of the " { $vocab-link "ogg.player" } " Ogg Theora video player considerably." }
-    { "The queue of sleeping tasks is now a sorted priority queue. This improves performance considerably when there is a large number of sleeping threads (Doug Coleman)" }
-    { "Improved hash code algorithm for sequences" }
-    { "New, efficient implementations of " { $link bit? } " and " { $link log2 } " runs in constant time for large bignums" }
-    { "New " { $link big-random } " word for generating large random numbers quickly" }
-    { "Improved profiler no longer has to be explicitly enabled and disabled with a recompile step; instead, the " { $link profile } " word can be used at any time, and it dynamically patches all words in the code heap to increment call counts. There is no overhead when the profiler is not in use." }
-}
-{ $subheading "IO" }
-{ $list
-    { "The " { $link "stream-protocol" } " has changed" }
-    { "New " { $link os-envs } " word to get the current set of environment variables" }
-    { "Redesigned " { $vocab-link "io.launcher" } " supports passing environment variables to the child process" }
-    { { $link <process-stream> } " implemented on Windows (Doug Coleman)" }
-    { "More robust Windows CE native I/O" }
-    { "Updated " { $vocab-link "io.mmap" } " for new module system, now supports Windows CE (Doug Coleman)" }
-    { { $vocab-link "io.sniffer" } " - packet sniffer library (Doug Coleman, Elie Chaftari)" }
-    { { $vocab-link "io.server" } " - improved logging support, logs to a file by default" }
-    { { $vocab-link "io.files" } " - several new file system manipulation words added" }
-    { { $vocab-link "tar" } " - tar file extraction in pure Factor (Doug Coleman)" }
-    { { $vocab-link "unix.linux" } ", " { $vocab-link "raptor" } " - ``Raptor Linux'', a set of alien bindings to low-level Linux features, such as network interface configuration, file system mounting/unmounting, etc, together with experimental boot scripts intended to entirely replace " { $snippet "/sbin/init" } ", " { $vocab-link "/etc/inittab" } " and " { $snippet "/etc/init.d/" } "." }
-}
-{ $subheading "Tools" }
-{ $list
-    { "Graphical deploy tool added - see " { $link "ui.tools.deploy" } }
-    { "The deploy tool now supports Windows" }
-    { { $vocab-link "network-clipboard" } " - clipboard synchronization with a simple TCP/IP protocol" }
-}
-{ $subheading "UI" }
-{ $list
-    { { $vocab-link "cairo" } " - updated for new module system, new features (Sampo Vuori)" }
-    { { $vocab-link "springies" } " - physics simulation UI demo (Eduardo Cavazos)" }
-    { { $vocab-link "ui.gadgets.buttons" } " - added check box and radio button gadgets" }
-    { "Double- and triple-click-drag now supported in the editor gadget to select words or lines at a time" }
-    { "Windows can be closed on request now using " { $link close-window } }
-    { "New icons (Elie Chaftari)" }
-}
-{ $subheading "Other" }
-{ $list
-    { "The " { $snippet "queues" } " vocabulary has been removed because its functionality is a subset of " { $vocab-link "dlists" } }
-    { "The " { $vocab-link "http.server.responder.cgi" } " vocabulary implements CGI support for the Factor HTTP server." }
-    { "The optimizing compiler no longer depends on the number tower and it is possible to bootstrap a minimal image by just passing " { $snippet "-include=compiler" } " to stage 2 bootstrap." }
-    { { $vocab-link "benchmarks.knucleotide" } " - new benchmark (Eric Mertens)" }
-    { { $vocab-link "channels" } " - concurrent message passing over message channels" }
-    { { $vocab-link "destructors" } " - deterministic scope-based resource deallocation (Doug Coleman)" }
-    { { $vocab-link "dlists" } " - various updates (Doug Coleman)" }
-    { { $vocab-link "editors.notepadpp" } " - Notepad++ integration (Doug Coleman)" }
-    { { $vocab-link "heaps" } " - updated for new module system and cleaned up (Doug Coleman)" }
-    { { $vocab-link "peg" } " - Parser Expression Grammars, a new appoach to parser construction, similar to parser combinators (Chris Double)" }
-    { { $vocab-link "regexp" } " - revived from " { $snippet "unmaintained/" } " and completely redesigned (Doug Coleman)" }
-    { { $vocab-link "tuple.lib" } " - some utility words for working with tuples (Doug Coleman)" }
-}
index ef25e9119194e059e35384899a9eef00edd6933b..30f8d0f29fae6eda02e312ddbdc959ef33e97932 100755 (executable)
@@ -235,6 +235,7 @@ ARTICLE: "changes" "Changes in the latest release"
     { "New, efficient implementations of " { $link bit? } " and " { $link log2 } " runs in constant time for large bignums" }
     { "New " { $link big-random } " word for generating large random numbers quickly" }
     { "Improved profiler no longer has to be explicitly enabled and disabled with a full recompile; instead, the " { $link profile } " word can be used at any time, and it dynamically patches words to increment call counts. There is no overhead when the profiler is not in use." }
+    { "Calls to " { $link member? } " with a literal sequence are now open-coded. If there are four or fewer elements, a series of conditionals are generated; if there are more than four elements, there is a hash dispatch followed by conditionals in each branch." }
 }
 { $subheading "IO" }
 { $list
@@ -247,7 +248,7 @@ ARTICLE: "changes" "Changes in the latest release"
     { { $vocab-link "io.server" } " - improved logging support, logs to a file by default" }
     { { $vocab-link "io.files" } " - several new file system manipulation words added" }
     { { $vocab-link "tar" } " - tar file extraction in pure Factor (Doug Coleman)" }
-    { { $vocab-link "unix.linux" } ", " { $vocab-link "raptor" } " - ``Raptor Linux'', a set of alien bindings to low-level Linux features, such as network interface configuration, file system mounting/unmounting, etc, together with experimental boot scripts intended to entirely replace " { $snippet "/sbin/init" } ", " { $vocab-link "/etc/inittab" } " and " { $snippet "/etc/init.d/" } " (Eduardo Cavazos)." }
+    { { $vocab-link "unix.linux" } ", " { $vocab-link "raptor" } " - ``Raptor Linux'', a set of alien bindings to low-level Linux features, such as network interface configuration, file system mounting/unmounting, etc, together with experimental boot scripts intended to entirely replace " { $snippet "/sbin/init" } ", " { $snippet "/etc/inittab" } " and " { $snippet "/etc/init.d/" } " (Eduardo Cavazos)." }
 }
 { $subheading "Tools" }
 { $list
@@ -264,7 +265,7 @@ ARTICLE: "changes" "Changes in the latest release"
     { "Windows can be closed on request now using " { $link close-window } }
     { "New icons (Elie Chaftari)" }
 }
-{ $subheading "Other" }
+{ $subheading "Libraries" }
 { $list
     { "The " { $snippet "queues" } " vocabulary has been removed because its functionality is a subset of " { $vocab-link "dlists" } }
     { "The " { $vocab-link "webapps.cgi" } " vocabulary implements CGI support for the Factor HTTP server." }
@@ -273,11 +274,19 @@ ARTICLE: "changes" "Changes in the latest release"
     { { $vocab-link "channels" } " - concurrent message passing over message channels" }
     { { $vocab-link "destructors" } " - deterministic scope-based resource deallocation (Doug Coleman)" }
     { { $vocab-link "dlists" } " - various updates (Doug Coleman)" }
+    { { $vocab-link "editors.emeditor" } " - EmEditor integration (Doug Coleman)" }
+    { { $vocab-link "editors.editplus" } " - EditPlus integration (Aaron Schaefer)" }
     { { $vocab-link "editors.notepadpp" } " - Notepad++ integration (Doug Coleman)" }
+    { { $vocab-link "editors.ted-notepad" } " - TED Notepad integration (Doug Coleman)" }
+    { { $vocab-link "editors.ultraedit" } " - UltraEdit integration (Doug Coleman)" }
+    { { $vocab-link "globs" } " - simple Unix shell-style glob patterns" }
     { { $vocab-link "heaps" } " - updated for new module system and cleaned up (Doug Coleman)" }
     { { $vocab-link "peg" } " - Parser Expression Grammars, a new appoach to parser construction, similar to parser combinators (Chris Double)" }
     { { $vocab-link "regexp" } " - revived from " { $snippet "unmaintained/" } " and completely redesigned (Doug Coleman)" }
-    { { $vocab-link "tuple.lib" } " - some utility words for working with tuples (Doug Coleman)" }
+    { { $vocab-link "rss" } " - add Atom feed generation (Daniel Ehrenberg)" }
+    { { $vocab-link "tuples.lib" } " - some utility words for working with tuples (Doug Coleman)" }
+    { { $vocab-link "webapps.pastebin" } " - improved appearance, add Atom feed generation, add syntax highlighting using " { $vocab-link "xmode" } }
+    { { $vocab-link "webapps.planet" } " - add Atom feed generation" }
 }
 { $heading "Factor 0.90" }
 { $subheading "Core" }
index 2d53e4e59d98764e3f2543b92083d6dd6198ad9c..fdfa7ddd7b8c50402624da66538612e8e0995cdc 100644 (file)
@@ -1,5 +1,5 @@
 USING: help.markup help.crossref help.topics help.syntax
-definitions io prettyprint inspector ;
+definitions io prettyprint inspector help.lint arrays math ;
 IN: help
 
 ARTICLE: "printing-elements" "Printing markup elements"
@@ -81,7 +81,8 @@ $nl
 }
 { $subsection "element-types" }
 "Related words can be cross-referenced:"
-{ $subsection related-words } ;
+{ $subsection related-words }
+{ $see-also "help.lint" } ;
 
 ARTICLE: "help-impl" "Help system implementation"
 "Help topic protocol:"
@@ -108,6 +109,7 @@ ARTICLE: "help" "Help system"
 "The help system maintains documentation written in a simple markup language, along with cross-referencing and search. Documentation can either exist as free-standing " { $emphasis "articles" } " or be associated with words."
 { $subsection "browsing-help" }
 { $subsection "writing-help" }
+{ $subsection "help.lint" }
 { $subsection "help-impl" } ;
 
 ABOUT: "help"
@@ -143,7 +145,7 @@ HELP: $index
 { $description "Calls the quotation to generate a sequence of help topics, and outputs a " { $link $subsection } " for each one." } ;
 
 HELP: ($index)
-{ $values { "seq" "a sequence of help article names and words" } { "quot" "a quotation with stack effect " { $snippet "( topic -- )" } } }
+{ $values { "articles" "a sequence of help articles" } }
 { $description "Writes a list of " { $link $subsection } " elements to the " { $link stdio } " stream." } ;
 
 HELP: xref-help
@@ -154,3 +156,7 @@ HELP: sort-articles
 { $description "Sorts a sequence of help topics." } ;
 
 { article-children article-parent xref-help } related-words
+
+HELP: $predicate
+{ $values { "element" "a markup element of the form " { $snippet "{ word }" } } }
+{ $description "Prints the boilerplate description of a class membership predicate word such as " { $link array? } " or " { $link integer? } "." } ;
index 975ed73dc842e82a5d5e57d472d796078286a61c..87bc0a4b7f5b83d0453cb10636d0aa5209a3d298 100644 (file)
@@ -4,7 +4,7 @@ USING: arrays io kernel namespaces parser prettyprint sequences
 words assocs definitions generic quotations effects
 slots continuations tuples debugger combinators
 vocabs help.stylesheet help.topics help.crossref help.markup
-sorting ;
+sorting classes ;
 IN: help
 
 GENERIC: word-help* ( word -- content )
@@ -15,12 +15,22 @@ GENERIC: word-help* ( word -- content )
         [ swap 2array 1array ] [ 2drop f ] if
     ] ?if ;
 
+: $predicate ( element -- )
+    { { "object" object } { "?" "a boolean" } } $values
+    [
+        "Tests if the object is an instance of the " ,
+        first "predicating" word-prop \ $link swap 2array ,
+        " class." ,
+    ] { } make $description ;
+
 M: word word-help* drop f ;
 
 M: slot-reader word-help* drop \ $slot-reader ;
 
 M: slot-writer word-help* drop \ $slot-writer ;
 
+M: predicate word-help* drop \ $predicate ;
+
 : all-articles ( -- seq )
     articles get keys
     all-words [ word-help ] subset append ;
index 6ff0699471283ef812637ec9c515296748a0dde3..2813391d074cb2a493e3201b12b575140a751a1d 100644 (file)
@@ -1,8 +1,20 @@
 USING: help.markup help.syntax ;
 IN: help.lint
 
+HELP: check-help
+{ $description "Checks all word and article help." } ;
+
+HELP: check-vocab-help
+{ $values { "vocab" "a vocabulary specifier" } }
+{ $description "Checks all word help in the given vocabulary." } ;
+
 ARTICLE: "help.lint" "Help lint tool"
-"A quick and dirty tool to check documentation in an automated fashion."
+"The " { $vocab-link "help.lint" } " vocabulary implements a tool to check documentation in an automated fashion. You should use this tool to check any documentation that you write."
+$nl
+"To run help lint, use one of the following two words:"
+{ $subsection check-help }
+{ $subsection check-vocab-help }
+"Help lint performs the following checks:"
 { $list
     "ensures examples run and produce stated output"
     { "ensures " { $link $see-also } " elements don't contain duplicate entries" }
index 3621b3c6ad8a02b3b7b825e5093d0ef3a2c8546e..6496ca21ff985bbd74552ceb208ce3008a0b6781 100644 (file)
@@ -4,7 +4,8 @@ USING: sequences parser kernel help help.markup help.topics
 words strings classes tools.browser namespaces io
 io.streams.string prettyprint definitions arrays vectors
 combinators splitting debugger hashtables sorting effects vocabs
-vocabs.loader assocs editors continuations classes.predicate ;
+vocabs.loader assocs editors continuations classes.predicate
+macros combinators.lib ;
 IN: help.lint
 
 : check-example ( element -- )
@@ -29,7 +30,7 @@ IN: help.lint
     stack-effect dup effect-in swap effect-out
     append [ string? ] subset prune natural-sort ;
 
-: check-values ( word element -- )
+: contains-funky-elements? ( element -- ? )
     {
         $shuffle
         $values-x/y
@@ -38,11 +39,20 @@ IN: help.lint
         $predicate
         $class-description
         $error-description
-    }
-    over [ elements empty? ] curry all?
-    pick "declared-effect" word-prop and
-    [ extract-values >array >r effect-values >array r> assert= ]
-    [ 2drop ] if ;
+    } swap [ elements f like ] curry contains? ;
+
+: check-values ( word element -- )
+    {
+        [ over "declared-effect" word-prop ]
+        [ dup contains-funky-elements? not ]
+        [ over macro? not ]
+        [
+            2dup extract-values >array
+            >r effect-values >array
+            r> assert=
+            t
+        ]
+    } && 3drop ;
 
 : check-see-also ( word element -- )
     nip \ $see-also swap elements [
@@ -61,55 +71,59 @@ IN: help.lint
 : check-rendering ( word element -- )
     [ help ] string-out drop ;
 
-: all-word-help ( -- seq )
-    all-words [ word-help ] subset ;
+: all-word-help ( words -- seq )
+    [ word-help ] subset ;
 
 TUPLE: help-error topic ;
 
 : <help-error> ( topic delegate -- error )
     { set-help-error-topic set-delegate } help-error construct ;
 
-: fix-help ( error -- )
-    dup delegate error.
-    help-error-topic >link edit
-    "Press ENTER when done." print flush readln drop
-    refresh-all ;
+M: help-error error.
+    "In " write dup help-error-topic ($link) nl
+    delegate error. ;
+
+: check-something ( obj quot -- )
+    over . flush [ <help-error> , ] recover ; inline
 
 : check-word ( word -- )
-    dup . flush
-    [
-        dup word-help [
-            2dup check-examples
-            2dup check-values
-            2dup check-see-also
-            2dup check-modules
-            2dup drop check-rendering
-        ] assert-depth 2drop
-    ] [
-        dupd <help-error> fix-help check-word
-    ] recover ;
-
-: check-words ( -- )
-    [
-        all-vocabs-seq [ vocab-name ] map
-        "all-vocabs" set
-        all-word-help [ check-word ] each
-    ] with-scope ;
+    dup word-help [
+        [
+            dup word-help [
+                2dup check-examples
+                2dup check-values
+                2dup check-see-also
+                2dup check-modules
+                2dup drop check-rendering
+            ] assert-depth 2drop
+        ] check-something
+    ] [ drop ] if ;
+
+: check-words ( words -- ) [ check-word ] each ;
 
 : check-article ( article -- )
-    dup . flush
     [
         [ dup check-rendering ] assert-depth drop
-    ] [
-        dupd <help-error> fix-help check-article
-    ] recover ;
+    ] check-something ;
 
 : check-articles ( -- )
     articles get keys [ check-article ] each ;
 
-: check-help ( -- ) check-words check-articles ;
+: with-help-lint ( quot -- )
+    [
+        all-vocabs-seq [ vocab-name ] map "all-vocabs" set
+        call
+    ] { } make [ nl error. ] each ; inline
+
+: check-help ( -- )
+    [ all-words check-words check-articles ] with-help-lint ;
+
+: check-vocab-help ( vocab -- )
+    [
+        child-vocabs [ words check-words ] each
+    ] with-help-lint ;
 
-: unlinked-words ( -- seq )
+: unlinked-words ( words -- seq )
     all-word-help [ article-parent not ] subset ;
 
 : linked-undocumented-words ( -- seq )
diff --git a/extra/html/parser/analyzer/analyzer.factor b/extra/html/parser/analyzer/analyzer.factor
new file mode 100755 (executable)
index 0000000..9303b81
--- /dev/null
@@ -0,0 +1,91 @@
+USING: assocs html.parser kernel math sequences strings ;
+IN: html.parser.analyzer
+
+: remove-blank-text ( vector -- vector' )
+    [
+        dup tag-name text = [
+            tag-text [ blank? ] all? not
+        ] [
+            drop t
+        ] if
+    ] subset ;
+
+: trim-text ( vector -- vector' )
+    [
+        dup tag-name text = [
+            [ tag-text [ blank? ] trim ] keep
+            [ set-tag-text ] keep
+        ] when
+    ] map ;
+
+: find-by-id ( id vector -- vector )
+    [ tag-attributes "id" swap at = ] curry* subset ;
+
+: find-by-class ( id vector -- vector )
+    [ tag-attributes "class" swap at = ] curry* subset ;
+
+: find-by-name ( str vector -- vector )
+    >r >lower r>
+    [ tag-name = ] curry* subset ;
+
+: find-first-name ( str vector -- i/f tag/f )
+    >r >lower r>
+    [ tag-name = ] curry* find ;
+
+: find-matching-close ( str vector -- i/f tag/f )
+    >r >lower r>
+    [ [ tag-name = ] keep tag-closing? and ] curry* find ;
+
+: find-by-attribute-key ( key vector -- vector )
+    >r >lower r>
+    [ tag-attributes at ] curry* subset
+    [ ] subset ;
+
+: find-by-attribute-key-value ( value key vector -- vector )
+    >r >lower r>
+    [ tag-attributes at over = ] curry* subset nip
+    [ ] subset ;
+
+: find-first-attribute-key-value ( value key vector -- i/f tag/f )
+    >r >lower r>
+    [ tag-attributes at over = ] curry* find rot drop ;
+
+: find-between ( i/f tag/f vector -- vector )
+    pick integer? [
+        rot 1+ tail-slice
+        >r tag-name r>
+        [ find-matching-close drop ] keep swap head
+    ] [
+        3drop V{ } clone
+    ] if ;
+
+: find-links ( vector -- vector )
+    [ tag-name "a" = ] subset
+    [ tag-attributes "href" swap at ] map
+    [ ] subset ;
+
+
+
+! : find-last-tag ( name vector -- index tag )
+    ! [
+        ! dup tag-matched? [ 2drop f ] [ tag-name = ] if
+    ! ] curry* find-last ;
+
+! : find-last-tag* ( name n vector -- tag )
+    ! 0 -rot <slice> find-last-tag ;
+
+! : find-matching-tag ( tag -- tag )
+    ! dup tag-closing? [
+        ! find-last-tag
+    ! ] [
+    ! ] if ;
+
+
+! clear "/Users/erg/web/fark.html" <file-reader> contents parse-html find-links [ "go.pl" swap start ] subset [ "=" split peek ] map
+! clear "http://fark.com" http-get parse-html find-links [ "go.pl" swap start ] subset [ "=" split peek ] map
+
+! clear "/Users/erg/web/hostels.html" <file-reader> contents parse-html "Currency" "name" pick find-first-attribute-key-value
+
+! clear "/Users/erg/web/hostels.html" <file-reader> contents parse-html
+! "Currency" "name" pick find-first-attribute-key-value
+! pick find-between remove-blank-text
diff --git a/extra/html/parser/parser-tests.factor b/extra/html/parser/parser-tests.factor
new file mode 100644 (file)
index 0000000..c490b73
--- /dev/null
@@ -0,0 +1,63 @@
+USING: html.parser kernel tools.test ;
+IN: temporary
+
+[
+    V{ T{ tag f "html" H{ } f f f } }
+] [ "<html>" parse-html ] unit-test
+
+[
+    V{ T{ tag f "html" H{ } f f t } }
+] [ "</html>" parse-html ] unit-test
+
+[
+    V{ T{ tag f "a" H{ { "href" "http://factorcode.org/" } } f f f } }
+] [ "<a href=\"http://factorcode.org/\">" parse-html ] unit-test
+
+[
+    V{ T{ tag f "a" H{ { "href" "http://factorcode.org/" } } f f f } }
+] [ "<a   href  =  \"http://factorcode.org/\"   >" parse-html ] unit-test
+
+[
+V{
+    T{
+        tag
+        f
+        "a"
+        H{ { "baz" "\"quux\"" } { "foo" "bar's" } }
+        f
+        f
+        f
+    }
+}
+] [ "<a   foo=\"bar's\" baz='\"quux\"'  >" parse-html ] unit-test
+
+[
+V{
+    T{ tag f "a"
+        H{
+            { "a" "pirsqd" }
+            { "foo" "bar" }
+            { "href" "http://factorcode.org/" }
+            { "baz" "quux" }
+        } f f f }
+}
+] [ "<a   href  =    \"http://factorcode.org/\"    foo   =  bar baz='quux'a=pirsqd  >" parse-html ] unit-test
+
+[
+V{
+    T{ tag f "html" H{ } f f f }
+    T{ tag f "head" H{ } f f f }
+    T{ tag f "head" H{ } f f t }
+    T{ tag f "html" H{ } f f t }
+}
+] [ "<html<head</head</html" parse-html ] unit-test
+
+[
+V{
+    T{ tag f "head" H{ } f f f }
+    T{ tag f "title" H{ } f f f }
+    T{ tag f text f "Spagna" f f }
+    T{ tag f "title" H{ } f f t }
+    T{ tag f "head" H{ } f f t }
+}
+] [ "<head<title>Spagna</title></head" parse-html ] unit-test
diff --git a/extra/html/parser/parser.factor b/extra/html/parser/parser.factor
new file mode 100644 (file)
index 0000000..7057cfe
--- /dev/null
@@ -0,0 +1,155 @@
+USING: arrays html.parser.utils hashtables io kernel
+namespaces prettyprint quotations
+sequences splitting state-parser strings ;
+IN: html.parser
+
+TUPLE: tag name attributes text matched? closing? ;
+
+SYMBOL: text
+SYMBOL: dtd
+SYMBOL: comment
+SYMBOL: javascript
+SYMBOL: tagstack
+
+: push-tag ( tag -- )
+    tagstack get push ;
+
+: closing-tag? ( string -- ? )
+    dup empty? [
+        drop f
+    ] [
+        dup first CHAR: / =
+        swap peek CHAR: / = or
+    ] if ;
+
+: <tag> ( name attributes closing? -- tag )
+    { set-tag-name set-tag-attributes set-tag-closing? }
+    tag construct ;
+
+: make-tag ( str attribs -- tag )
+    >r [ closing-tag? ] keep "/" trim1 r> rot <tag> ;
+
+: make-text-tag ( str -- tag )
+    T{ tag f text } clone [ set-tag-text ] keep ;
+
+: make-comment-tag ( str -- tag )
+    T{ tag f comment } clone [ set-tag-text ] keep ;
+
+: make-dtd-tag ( str -- tag )
+    T{ tag f dtd } clone [ set-tag-text ] keep ;
+
+: read-whitespace ( -- str )
+    [ get-char blank? not ] take-until ;
+
+: read-whitespace* ( -- )
+    read-whitespace drop ;
+
+: read-token ( -- str )
+    read-whitespace*
+    [ get-char blank? ] take-until ;
+
+: read-single-quote ( -- str )
+    [ get-char CHAR: ' = ] take-until ;
+
+: read-double-quote ( -- str )
+    [ get-char CHAR: " = ] take-until ;
+
+: read-quote ( -- str )
+    get-char next* CHAR: ' = [
+        read-single-quote
+    ] [
+        read-double-quote
+    ] if next* ;
+
+: read-key ( -- str )
+    read-whitespace*
+    [ get-char CHAR: = = get-char blank? or ] take-until ;
+
+: read-= ( -- )
+    read-whitespace*
+    [ get-char CHAR: = = ] take-until drop next* ;
+
+: read-value ( -- str )
+    read-whitespace*
+    get-char quote? [
+        read-quote
+    ] [
+        read-token
+    ] if ;
+
+: read-comment ( -- )
+    "-->" take-string* make-comment-tag push-tag ;
+
+: read-dtd ( -- )
+    ">" take-string* make-dtd-tag push-tag ;
+
+: read-bang ( -- )
+    next* get-char CHAR: - = get-next CHAR: - = and [
+        next* next*
+        read-comment
+    ] [
+        read-dtd
+    ] if ;
+
+: read-tag ( -- )
+    [ get-char CHAR: > = get-char CHAR: < = or ] take-until
+    get-char CHAR: < = [ next* ] unless ;
+
+: read-< ( -- str )
+    next* get-char CHAR: ! = [
+        read-bang f
+    ] [
+        read-tag
+    ] if ;
+
+: read-until-< ( -- str )
+    [ get-char CHAR: < = ] take-until ;
+
+: parse-text ( -- )
+    read-until-< dup empty? [
+        drop
+    ] [
+        make-text-tag push-tag
+    ] if ;
+
+: (parse-attributes) ( -- )
+    read-whitespace*
+    string-parse-end? [
+        read-key >lower read-= read-value
+        2array , (parse-attributes)
+    ] unless ;
+
+: parse-attributes ( -- hashtable )
+    [ (parse-attributes) ] { } make >hashtable ;
+
+: (parse-tag)
+    [
+        read-token >lower
+        parse-attributes
+    ] string-parse ;
+
+: parse-tag ( -- )
+    read-< dup empty? [
+        drop
+    ] [
+        (parse-tag) make-tag push-tag
+    ] if ;
+
+: (parse-html) ( tag -- )
+    get-next [
+        parse-text
+        parse-tag
+        (parse-html)
+    ] when ;
+
+: tag-parse ( quot -- vector )
+    [
+        V{ } clone tagstack set
+        string-parse
+    ] with-scope ;
+
+: parse-html ( string -- vector )
+    [
+        (parse-html)
+        tagstack get
+    ] tag-parse ;
diff --git a/extra/html/parser/printer/printer.factor b/extra/html/parser/printer/printer.factor
new file mode 100644 (file)
index 0000000..5ed9ab8
--- /dev/null
@@ -0,0 +1,108 @@
+USING: assocs html.parser html.parser.utils combinators
+continuations hashtables
+hashtables.private io kernel math
+namespaces prettyprint quotations sequences splitting
+state-parser strings ;
+IN: html.parser.printer
+
+SYMBOL: no-section
+SYMBOL: html
+SYMBOL: head
+SYMBOL: body
+TUPLE: state section ;
+
+! TUPLE: text bold? underline? strikethrough? ;
+
+TUPLE: text-printer ;
+TUPLE: ui-printer ;
+TUPLE: src-printer ;
+UNION: printer text-printer ui-printer src-printer ;
+HOOK: print-tag printer ( tag -- )
+HOOK: print-text-tag printer ( tag -- )
+HOOK: print-comment-tag printer ( tag -- )
+HOOK: print-dtd-tag printer ( tag -- )
+HOOK: print-opening-named-tag printer ( tag -- )
+HOOK: print-closing-named-tag printer ( tag -- )
+
+: print-tags ( vector -- )
+    [ print-tag ] each ;
+
+: html-text. ( vector -- )
+    [
+        T{ text-printer } printer set
+        print-tags
+    ] with-scope ;
+
+: html-src. ( vector -- )
+    [
+        T{ src-printer } printer set
+        print-tags
+    ] with-scope ;
+
+M: printer print-text-tag ( tag -- )
+    tag-text write ;
+
+M: printer print-comment-tag ( tag -- )
+    "<!--" write
+    tag-text write
+    "-->" write ;
+
+M: printer print-dtd-tag
+    "<!" write
+    tag-text write
+    ">" write ;
+
+M: printer print-opening-named-tag ( tag -- )
+    dup tag-name {
+        { "html" [ drop ] }
+        { "head" [ drop ] }
+        { "body" [ drop ] }
+        { "title" [ "Title: " write tag-text print ] }
+    } case ;
+
+M: printer print-closing-named-tag ( tag -- )
+    drop ;
+
+: print-attributes ( hashtable -- )
+    [
+        swap bl write "=" write ?quote write
+    ] assoc-each ;
+
+M: src-printer print-opening-named-tag ( tag -- )
+    "<" write
+    dup tag-name write
+    tag-attributes dup assoc-empty? [ drop ] [ print-attributes ] if
+    ">" write ;
+
+M: src-printer print-closing-named-tag ( tag -- )
+    "</" write
+    tag-name write
+    ">" write ;
+
+TUPLE: unknown-tag-error tag ;
+
+C: <unknown-tag-error> unknown-tag-error
+
+M: printer print-tag ( tag -- )
+    {
+        { [ dup tag-name text = ] [ print-text-tag ] }
+        { [ dup tag-name comment = ] [ print-comment-tag ] }
+        { [ dup tag-name dtd = ] [ print-dtd-tag ] }
+        { [ dup tag-name string? over tag-closing? and ]
+            [ print-closing-named-tag ] }
+        { [ dup tag-name string? ]
+            [ print-opening-named-tag ] }
+        { [ t ] [ <unknown-tag-error> throw ] }
+    } cond ;
+
+SYMBOL: tablestack
+
+: with-html-printer
+    [
+        V{ } clone tablestack set
+    ] with-scope ;
+
+! { { 1 2 } { 3 4 } }
+! H{ { table-gap { 10 10 } } } [
+    ! [ [ [ [ . ] with-cell ] each ] with-row ] each
+! ] tabular-output
diff --git a/extra/html/parser/utils/utils-tests.factor b/extra/html/parser/utils/utils-tests.factor
new file mode 100644 (file)
index 0000000..fcac31a
--- /dev/null
@@ -0,0 +1,24 @@
+USING: assocs combinators continuations hashtables
+hashtables.private io kernel math
+namespaces prettyprint quotations sequences splitting
+state-parser strings tools.test ;
+USING: html.parser.utils ;
+IN: temporary
+
+[ "'Rome'" ] [ "Rome" single-quote ] unit-test
+[ "\"Roma\"" ] [ "Roma" double-quote ] unit-test
+[ "'Firenze'" ] [ "Firenze" quote ] unit-test
+[ "\"Caesar's\"" ] [ "Caesar's" quote ] unit-test
+[ f ] [ "" quoted? ] unit-test
+[ t ] [ "''" quoted? ] unit-test
+[ t ] [ "\"\"" quoted? ] unit-test
+[ t ] [ "\"Circus Maximus\"" quoted? ] unit-test
+[ t ] [ "'Circus Maximus'" quoted? ] unit-test
+[ f ] [ "Circus Maximus" quoted? ] unit-test
+[ "'Italy'" ] [ "Italy" ?quote ] unit-test
+[ "'Italy'" ] [ "'Italy'" ?quote ] unit-test
+[ "\"Italy\"" ] [ "\"Italy\"" ?quote ] unit-test
+[ "Italy" ] [ "Italy" unquote ] unit-test
+[ "Italy" ] [ "'Italy'" unquote ] unit-test
+[ "Italy" ] [ "\"Italy\"" unquote ] unit-test
+
diff --git a/extra/html/parser/utils/utils.factor b/extra/html/parser/utils/utils.factor
new file mode 100644 (file)
index 0000000..febd171
--- /dev/null
@@ -0,0 +1,43 @@
+USING: assocs circular combinators continuations hashtables
+hashtables.private io kernel math
+namespaces prettyprint quotations sequences splitting
+state-parser strings ;
+USING: html.parser ;
+IN: html.parser.utils
+
+: string-parse-end?
+    get-next not ;
+
+: take-string* ( match -- string )
+    dup length <circular-string>
+    [ 2dup string-matches? ] take-until nip
+    dup length rot length 1- - head next* ;
+
+: trim1 ( seq ch -- newseq )
+    [ ?head drop ] keep ?tail drop ;
+
+: single-quote ( str -- newstr )
+    >r "'" r> "'" 3append ;
+
+: double-quote ( str -- newstr )
+    >r "\"" r> "\"" 3append ;
+
+: quote ( str -- newstr )
+    CHAR: ' over member?
+    [ double-quote ] [ single-quote ] if ;
+
+: quoted? ( str -- ? )
+    dup length 1 > [
+        [ first ] keep peek [ = ] keep "'\"" member? and
+    ] [
+        drop f
+    ] if ;
+
+: ?quote ( str -- newstr )
+    dup quoted? [ quote ] unless ;
+
+: unquote ( str -- newstr )
+    dup quoted? [ 1 head-slice* 1 tail-slice >string ] when ;
+
+: quote? ( ch -- ? ) "'\"" member? ;
+
index a358c449af8a3fcf7b7074c8641c302a473c75fe..6ecb3c5a7160a99d5e052cbac522ad14a9a9894c 100644 (file)
@@ -20,7 +20,7 @@ IN: http
     dup letter?
     over LETTER? or
     over digit? or
-    swap "/_?." member? or ; foldable
+    swap "/_-?." member? or ; foldable
 
 : url-encode ( str -- str )
     [
@@ -60,11 +60,18 @@ IN: http
 : url-decode ( str -- str )
     [ 0 swap url-decode-iter ] "" make ;
 
-: build-url ( path query-params -- str )
+: hash>query ( hash -- str )
+    [ [ url-encode ] 2apply "=" swap 3append ] { } assoc>map
+    "&" join ;
+
+: build-url ( str query-params -- newstr )
     [
-        swap % dup assoc-empty? [
-            "?" % dup
-            [ [ url-encode ] 2apply "=" swap 3append ] { } assoc>map
-            "&" join %
-        ] unless drop
+        over %
+        dup assoc-empty? [
+            2drop
+        ] [
+            CHAR: ? rot member? "&" "?" ? %
+            hash>query %
+        ] if
     ] "" make ;
+    
index f1ef5b7fabaab083dbb19bb16cdcd4438ac4f6d6..1d76bb0a5bce6c33999554ce4dbc8259903ae623 100644 (file)
@@ -2,7 +2,9 @@
 ! See http://factorcode.org/license.txt for BSD license.
 !
 
-USING: arrays combinators io io.binary io.files io.utf16 kernel math math.parser namespaces sequences splitting strings assocs ;
+USING: arrays combinators io io.binary io.files io.paths
+io.utf16 kernel math math.parser namespaces sequences
+splitting strings assocs ;
 
 IN: id3
 
@@ -121,18 +123,6 @@ C: <extended-header> extended-header
 : id3v2 ( filename -- tag/f )
   <file-reader> [ read-tag ] with-stream ;
 
-: append-path ( path files -- paths )
-  [ path+ ] curry* map ;
-
-: get-paths ( dir -- paths )
-  dup directory keys append-path ;
-
-: (walk-dir) ( path -- )
-  dup directory? [ get-paths dup % [ (walk-dir) ] each ] [ drop ] if ;
-
-: walk-dir ( path -- seq )
-  [ (walk-dir) ] { } make ;
-
 : file? ( path -- ? )
   stat 3drop not ;
 
diff --git a/extra/io/paths/paths.factor b/extra/io/paths/paths.factor
new file mode 100644 (file)
index 0000000..3afb110
--- /dev/null
@@ -0,0 +1,24 @@
+USING: assocs io.files kernel namespaces sequences ;
+IN: io.paths
+
+: find-file ( seq str -- path/f )
+    [
+        [ path+ exists? ] curry find nip
+    ] keep over [ path+ ] [ drop ] if ;
+
+<PRIVATE
+: append-path ( path files -- paths )
+    [ path+ ] curry* map ;
+
+: get-paths ( dir -- paths )
+    dup directory keys append-path ;
+
+: (walk-dir) ( path -- )
+    dup directory? [
+        get-paths dup % [ (walk-dir) ] each
+    ] [
+        drop
+    ] if ;
+PRIVATE>
+
+: walk-dir ( path -- seq ) [ (walk-dir) ] { } make ;
index df5dc65094de7bbbe3f05ed76392175606a5a3f2..c4f5b2ef9e528e09d7f53da4d6c86527ff37ba79 100755 (executable)
@@ -7,7 +7,8 @@ IN: windows.ce.files
 ! M: windows-ce-io normalize-pathname ( string -- string )
     ! dup 1 tail* CHAR: \\ = [ "*" append ] [ "\\*" append ] if ;
 
-M: windows-ce-io CreateFile-flags ( -- DWORD ) FILE_ATTRIBUTE_NORMAL ;
+M: windows-ce-io CreateFile-flags ( DWORD -- DWORD )
+    FILE_ATTRIBUTE_NORMAL bitor ;
 M: windows-ce-io FileArgs-overlapped ( port -- f ) drop f ;
 
 : finish-read ( port status bytes-ret -- )
index 31893fab0cf83c463108a8ee6024d77487b09179..136c8197fcc0d87d5c814c026176e257097fa4b6 100755 (executable)
@@ -87,9 +87,9 @@ TUPLE: CreateProcess-args
     pass-environment? [
         [
             get-environment
-            [ swap % "=" % % "\0" % ] assoc-each
+            [ "=" swap 3append string>u16-alien % ] assoc-each
             "\0" %
-        ] "" make >c-ushort-array
+        ] { } make >c-ushort-array
         over set-CreateProcess-args-lpEnvironment
     ] when ;
 
index ca5d2bbd9a4b520660fc297394c7a59dae40d2fd..27587e834058c1253a5f0d4f67ba8537606b3811 100755 (executable)
@@ -62,7 +62,7 @@ M: windows-ce-io with-privileges
 
 : mmap-open ( path access-mode create-mode flProtect access -- handle handle address )
     { "SeCreateGlobalPrivilege" "SeLockMemoryPrivilege" } [
-        >r >r open-file dup f r> 0 0 f
+        >r >r open-file dup f r> 0 0 f
         CreateFileMapping [ win32-error=0/f ] keep
         dup close-later
         dup
index c475771b5c88e70e696a2dba7a8ef61579db22c9..0d1f2cec0bebd64bd1ea59343493d9efd7d145f8 100755 (executable)
@@ -27,7 +27,7 @@ M: windows-nt-io normalize-pathname ( string -- string )
         { [ dup ".\\" head? ] [
             >r unicode-prefix cwd r> 1 tail 3append
         ] }
-        ! c:\\
+        ! c:\\foo
         { [ dup 1 tail ":" head? ] [ >r unicode-prefix r> append ] }
         ! \\\\?\\c:\\foo
         { [ dup unicode-prefix head? ] [ ] }
@@ -38,7 +38,8 @@ M: windows-nt-io normalize-pathname ( string -- string )
                 dup first CHAR: \\ = [ CHAR: \\ , ] unless %
             ] "" make
         ] }
-    } cond [ "/\\." member? ] right-trim ;
+    } cond [ "/\\." member? ] right-trim
+    dup peek CHAR: : = [ "\\" append ] when ;
 
 SYMBOL: io-hash
 
index d53f5fcb4086238bdf55b0e1b369316020f4a585..5eed39224c9fff5f5494784b8369e6b90f852b83 100755 (executable)
@@ -3,8 +3,8 @@ io.windows.nt io.windows.nt.backend kernel libc math
 threads windows windows.kernel32 ;
 IN: io.windows.nt.files
 
-M: windows-nt-io CreateFile-flags ( -- DWORD )
-    FILE_FLAG_OVERLAPPED ;
+M: windows-nt-io CreateFile-flags ( DWORD -- DWORD )
+    FILE_FLAG_OVERLAPPED bitor ;
 
 M: windows-nt-io FileArgs-overlapped ( port -- overlapped )
     make-overlapped ;
index 53ee82ed65fb0703d55d1c142db6dfc12ce3f6d6..8dcb138999e9d7da13be3317ba6b74ae265b42c5 100755 (executable)
@@ -4,7 +4,7 @@ USING: alien alien.c-types arrays destructors io io.backend
 io.buffers io.files io.nonblocking io.sockets io.binary
 io.sockets.impl windows.errors strings io.streams.duplex kernel
 math namespaces sequences windows windows.kernel32
-windows.winsock splitting ;
+windows.shell32 windows.winsock splitting ;
 IN: io.windows
 
 TUPLE: windows-nt-io ;
@@ -23,7 +23,7 @@ TUPLE: win32-file handle ptr overlapped ;
 : <win32-duplex-stream> ( in out -- stream )
     >r f <win32-file> r> f <win32-file> handle>duplex-stream ;
 
-HOOK: CreateFile-flags io-backend ( -- DWORD )
+HOOK: CreateFile-flags io-backend ( DWORD -- DWORD )
 HOOK: FileArgs-overlapped io-backend ( port -- overlapped/f )
 HOOK: add-completion io-backend ( port -- )
 
@@ -31,7 +31,8 @@ M: windows-io normalize-directory ( string -- string )
     "\\" ?tail drop "\\*" append ;
 
 : share-mode ( -- fixnum )
-    FILE_SHARE_READ FILE_SHARE_WRITE bitor ; inline
+    FILE_SHARE_READ FILE_SHARE_WRITE bitor
+    FILE_SHARE_DELETE bitor ; foldable
 
 M: win32-file init-handle ( handle -- )
     drop ;
@@ -40,24 +41,25 @@ M: win32-file close-handle ( handle -- )
     win32-file-handle CloseHandle drop ;
 
 ! Clean up resources (open handle) if add-completion fails
-: open-file ( path access-mode create-mode -- handle )
+: open-file ( path access-mode create-mode flags -- handle )
     [
-        >r share-mode f r> CreateFile-flags f CreateFile
+        >r >r >r normalize-pathname r>
+        share-mode f r> r> CreateFile-flags f CreateFile
         dup invalid-handle? dup close-later
         dup add-completion
     ] with-destructors ;
 
 : open-pipe-r/w ( path -- handle )
-    GENERIC_READ GENERIC_WRITE bitor OPEN_EXISTING open-file ;
+    GENERIC_READ GENERIC_WRITE bitor OPEN_EXISTING open-file ;
 
 : open-read ( path -- handle length )
-    normalize-pathname GENERIC_READ OPEN_EXISTING open-file 0 ;
+    GENERIC_READ OPEN_EXISTING 0 open-file 0 ;
 
 : open-write ( path -- handle length )
-    normalize-pathname GENERIC_WRITE CREATE_ALWAYS open-file 0 ;
+    GENERIC_WRITE CREATE_ALWAYS 0 open-file 0 ;
 
 : (open-append) ( path -- handle )
-    normalize-pathname GENERIC_WRITE OPEN_ALWAYS open-file ;
+    GENERIC_WRITE OPEN_ALWAYS 0 open-file ;
 
 : set-file-pointer ( handle length -- )
     dupd d>w/w <uint> FILE_BEGIN SetFilePointer
index 5b53b80cbad8b4dbfe9b0881d6ff881d97c2a300..e8acb397df319c27362e96aa19781a1e99d8f407 100644 (file)
@@ -181,7 +181,7 @@ HELP: lmerge
 { $values { "list1" "a list" } { "list2" "a list" } { "result" "lazy list merging list1 and list2" } }
 { $description "Return the result of merging the two lists in a lazy manner." } 
 { $examples
-  { $example "{ 1 2 3 } >list { 4 5 6 } >list lmerge list>array ." "{ 1 4 2 5 3 6 }" }
+  { $example "USE: lazy-lists" "{ 1 2 3 } >list { 4 5 6 } >list lmerge list>array ." "{ 1 4 2 5 3 6 }" }
 }
 { $see-also leach lmap lmap-with lconcat ltake lsubset lfrom-by lcartesian-product lcomp } ;
 
index 92d64d5c6fccdbf89985c13183bd7e6c57ba7bcc..97f9aa5c6513b433771d71b448fa74051fd3b934 100644 (file)
@@ -4,7 +4,7 @@ IN: locals
 <PRIVATE
 
 : $with-locals-note
-    {
+    drop {
         "This form must appear either in a word defined by " { $link POSTPONE: :: } " or " { $link POSTPONE: MACRO:: } ", or alternatively, " { $link with-locals } " must be called on the top-level form of the word to perform closure conversion."
     } $notes ;
 
@@ -28,10 +28,10 @@ HELP: [let
 { $description "Introduces a set of lexical bindings and evaluates the body. The values are evaluated in parallel, and may not refer to other bindings within the same " { $link POSTPONE: [let } " form; for Lisp programmers, this means that Factor's " { $link POSTPONE: [let } " is equivalent to the Lisp " { $snippet "let" } ", not " { $snippet "let*" } "." }
 { $examples
     { $example
-        "USE: locals"
+        "USING: locals math.functions ;"
         ":: frobnicate | n seq |"
         "    [let | n' [ n 6 * ] |"
-        "        seq [ n' gcd ] map ] ;"
+        "        seq [ n' gcd nip ] map ] ;"
         "6 { 36 14 } frobnicate ."
         "{ 36 2 }"
     }
index 08f3918197abdf1f61868a61b8d036f16d80caee..d3a81566b992b353410ed1fabc376c72ea044cab 100755 (executable)
@@ -273,20 +273,20 @@ HELP: mod-inv
 { $description "Outputs an integer " { $snippet "y" } " such that " { $snippet "xy = 1 (mod n)" } "." }
 { $errors "Throws an error if " { $snippet "n" } " is not invertible modulo " { $snippet "n" } "." }
 { $examples
-    { $example "173 1119 mod-inv ." "815" }
-    { $example "173 815 * 1119 mod ." "1" }
+    { $example "USE: math.functions" "173 1119 mod-inv ." "815" }
+    { $example "USE: math.functions" "173 815 * 1119 mod ." "1" }
 } ;
 
 HELP: each-bit
 { $values { "n" integer } { "quot" "a quotation with stack effect " { $snippet "( ? -- )" } } }
 { $description "Applies the quotation to each bit of the integer, starting from the least significant bit, and stopping at the last bit from which point on all bits are either clear (if the integer is positive) or all bits are set (if the integer is negataive)." }
 { $examples
-    { $example "[ BIN: 1101 [ , ] each-bit ] { } make ." "{ t f t t }" }
-    { $example "[ -3 [ , ] each-bit ] { } make ." "{ f t }" }
+    { $example "USE: math.functions" "[ BIN: 1101 [ , ] each-bit ] { } make ." "{ t f t t }" }
+    { $example "USE: math.functions" "[ -3 [ , ] each-bit ] { } make ." "{ t f }" }
 } ;
 
 HELP: ~
-{ $values { "x" real } { "y" real } { "epsilon" real } }
+{ $values { "x" real } { "y" real } { "epsilon" real } { "?" "a boolean" } }
 { $description "Tests if " { $snippet "x" } " and " { $snippet "y" } " are approximately equal to each other. There are three possible comparison tests, chosen based on the sign of " { $snippet "epsilon" } ":"
     { $list
         { { $snippet "epsilon" } " is zero: exact comparison." }
index ace7a3ba034e7fcd3452cdf2311fbc66fbfb99b9..92ea6ced95ce88b7d890f9adcb65d2a7b0160381 100755 (executable)
@@ -45,7 +45,7 @@ HELP: deactivate-model
 { $warning "Calls to " { $link activate-model } " and " { $link deactivate-model } " should be balanced to keep the reference counting consistent, otherwise " { $link model-changed } " might be called at the wrong time or not at all." } ;
 
 HELP: model-changed
-{ $values { "observer" object } }
+{ $values { "model" model } { "observer" object } }
 { $contract "Called to notify observers of a model that the model value has changed as a result of a call to " { $link set-model } ". Observers can be registered with " { $link add-connection } "." } ;
 
 { add-connection remove-connection model-changed } related-words
diff --git a/extra/multiline/authors.txt b/extra/multiline/authors.txt
new file mode 100644 (file)
index 0000000..f990dd0
--- /dev/null
@@ -0,0 +1 @@
+Daniel Ehrenberg
diff --git a/extra/multiline/multiline-docs.factor b/extra/multiline/multiline-docs.factor
new file mode 100644 (file)
index 0000000..7e7375c
--- /dev/null
@@ -0,0 +1,21 @@
+USING: help.markup help.syntax multiline ;
+
+HELP: STRING:
+{ $syntax "STRING: name\nfoo\n;" }
+{ $description "Forms a multiline string literal, or 'here document' stored in the word called name. A semicolon is used to signify the end, and that semicolon must be on a line by itself, not preceeded or followed by any whitespace. The string will have newlines in between lines but not at the end, unless there is a blank line before the semicolon." } ;
+
+HELP: <"
+{ $syntax "<\" text \">" }
+{ $description "This forms a multiline string literal ending in \">. Unlike the " { $link POSTPONE: STRING: } " form, you can end it in the middle of a line. This construct is non-nesting. In the example above, the string would be parsed as \"text\"." } ;
+
+{ POSTPONE: <" POSTPONE: STRING: } related-words
+
+HELP: parse-here
+{ $values { "str" "a string" } }
+{ $description "Parses a multiline string literal, as used by " { $link POSTPONE: STRING: } "." } ;
+
+HELP: parse-multiline-string
+{ $values { "end-text" "a string delineating the end" } { "str" "the parsed string" } }
+{ $description "Parses a multiline string literal, as used by " { $link POSTPONE: <" } ". The end-text is the delimiter for the end." } ;
+
+{ parse-here parse-multiline-string } related-words
diff --git a/extra/multiline/multiline-tests.factor b/extra/multiline/multiline-tests.factor
new file mode 100644 (file)
index 0000000..a9b9ee2
--- /dev/null
@@ -0,0 +1,12 @@
+USING: multiline tools.test ;
+
+STRING: test-it
+foo
+bar
+
+;
+
+[ "foo\nbar\n" ] [ test-it ] unit-test
+[ "foo\nbar\n" ] [ <" foo
+bar
+ "> ] unit-test
diff --git a/extra/multiline/multiline.factor b/extra/multiline/multiline.factor
new file mode 100644 (file)
index 0000000..89a6e06
--- /dev/null
@@ -0,0 +1,35 @@
+! Copyright (C) 2007 Daniel Ehrenberg
+! See http://factorcode.org/license.txt for BSD license.
+USING: namespaces parser kernel sequences words quotations math ;
+IN: multiline
+
+: next-line-text ( -- str )
+    lexer get dup next-line line-text ;
+
+: (parse-here) ( -- )
+    next-line-text dup ";" =
+    [ drop lexer get next-line ] [ % "\n" % (parse-here) ] if ;
+
+: parse-here ( -- str )
+    [ (parse-here) ] "" make 1 head*
+    lexer get next-line ;
+
+: STRING:
+    CREATE dup reset-generic
+    parse-here 1quotation define-compound ; parsing
+
+: (parse-multiline-string) ( start-index end-text -- end-index )
+    lexer get line-text 2dup start
+    [ rot dupd >r >r swap subseq % r> r> length + ] [
+        rot tail % "\n" % 0
+        lexer get next-line swap (parse-multiline-string)
+    ] if* ;
+
+: parse-multiline-string ( end-text -- str )
+    [
+        lexer get lexer-column swap (parse-multiline-string)
+        lexer get set-lexer-column
+    ] "" make 1 tail 1 head* ;
+
+: <"
+    "\">" parse-multiline-string parsed ; parsing
diff --git a/extra/multiline/summary.txt b/extra/multiline/summary.txt
new file mode 100644 (file)
index 0000000..9d9c3ea
--- /dev/null
@@ -0,0 +1 @@
+Multiline string literals
index 39bf9841fd79b50da05e434b1c0906c5039a97e0..b87b4a230866c631a4294a9dc6e8b41119ca3bce 100644 (file)
@@ -32,7 +32,7 @@ M: nehe4-gadget draw-gadget* ( gadget -- )
   glLoadIdentity
   -1.5 0.0 -6.0 glTranslatef
   dup nehe4-gadget-rtri 0.0 1.0 0.0 glRotatef
-    
+
   GL_TRIANGLES [
     1.0 0.0 0.0 glColor3f
     0.0 1.0 0.0 glVertex3f
@@ -52,23 +52,23 @@ M: nehe4-gadget draw-gadget* ( gadget -- )
     1.0 1.0 0.0 glVertex3f
     1.0 -1.0 0.0 glVertex3f
     -1.0 -1.0 0.0 glVertex3f
-  ] do-state 
+  ] do-state
   dup nehe4-gadget-rtri 0.2 + over set-nehe4-gadget-rtri
   dup nehe4-gadget-rquad 0.15 - swap set-nehe4-gadget-rquad ;
-  
-: nehe4-update-thread ( gadget -- )  
-  dup nehe4-gadget-quit? [
-    redraw-interval sleep 
-    dup relayout-1  
-    nehe4-update-thread 
-  ] unless ;
+
+: nehe4-update-thread ( gadget -- )
+  dup nehe4-gadget-quit? [ drop ] [
+    redraw-interval sleep
+    dup relayout-1
+    nehe4-update-thread
+  ] if ;
 
 M: nehe4-gadget graft* ( gadget -- )
- [ f swap set-nehe4-gadget-quit? ] keep
- [ nehe4-update-thread ] in-thread drop ;
 [ f swap set-nehe4-gadget-quit? ] keep
 [ nehe4-update-thread ] in-thread drop ;
 
 M: nehe4-gadget ungraft* ( gadget -- )
- t swap set-nehe4-gadget-quit? ;
 t swap set-nehe4-gadget-quit? ;
 
 : run4 ( -- )
   <nehe4-gadget> "NeHe Tutorial 4" open-window ;
index 59ef383c87eaa46570322f38a51c5bd70901f848..8d55cc5770ed354a99c0fe142141583a758e7ab4 100644 (file)
@@ -149,5 +149,3 @@ IN: scratchpad
 { { } } [
   "234" "1" token <+> parse list>array
 ] unit-test
-
-
index 04032db19f7851e131dc302ab9043fb1177e65f1..4376aed95a739a4521ffbbd61f77b50b6974b74f 100755 (executable)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2004 Chris Double.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: lazy-lists promises kernel sequences strings math
-arrays splitting ;
+arrays splitting quotations combinators namespaces ;
 IN: parser-combinators
 
 ! Parser combinator protocol
@@ -21,17 +21,45 @@ TUPLE: parse-result parsed unparsed ;
 
 C: <parse-result> parse-result
 
-TUPLE: token-parser string ;
+: <parse-results> ( parsed unparsed -- list )
+    <parse-result> 1list ;
 
-C: token token-parser ( string -- parser )
+: parse-result-parsed-slice ( parse-result -- slice )
+    dup parse-result-parsed empty? [
+        parse-result-unparsed 0 0 rot <slice>
+    ] [
+        dup parse-result-unparsed
+        dup slice-from [ rot parse-result-parsed length - ] keep
+        rot slice-seq <slice>
+    ] if ;
 
-M: token-parser parse ( input parser -- list )
-    token-parser-string swap over ?head-slice [
-        <parse-result> 1list
+: string= ( str1 str2 ignore-case -- ? )
+    [ [ >upper ] 2apply ] when sequence= ;
+
+: string-head? ( str head ignore-case -- ? )
+    pick pick shorter? [
+        3drop f
     ] [
-        2drop nil
+        >r [ length head-slice ] keep r> string=
     ] if ;
 
+: ?string-head ( str head ignore-case -- newstr ? )
+    >r 2dup r> string-head?
+    [ length tail-slice t ] [ drop f ] if ;
+
+TUPLE: token-parser string ignore-case? ;
+
+C: <token-parser> token-parser
+
+: token ( string -- parser ) f <token-parser> ;
+
+: case-insensitive-token ( string -- parser ) t <token-parser> ;
+
+M: token-parser parse ( input parser -- list )
+    dup token-parser-string swap token-parser-ignore-case?
+    >r tuck r> ?string-head
+    [ <parse-results> ] [ 2drop nil ] if ;
+
 : 1token ( n -- parser ) 1string token ;
 
 TUPLE: satisfy-parser quot ;
@@ -45,11 +73,8 @@ M: satisfy-parser parse ( input parser -- list )
     over empty? [
         2drop nil
     ] [
-        satisfy-parser-quot >r unclip-slice dup r> call [
-            swap <parse-result> 1list
-        ] [
-            2drop nil
-        ] if
+        satisfy-parser-quot >r unclip-slice dup r> call
+        [ swap <parse-results> ] [ 2drop nil ] if
     ] if ;
 
 LAZY: any-char-parser ( -- parser )
@@ -64,7 +89,7 @@ M: epsilon-parser parse ( input parser -- list )
     #! does not consume any input and always returns
     #! an empty list as the parse tree with the
     #! unmodified input.
-    drop "" swap <parse-result> 1list ;
+    drop "" swap <parse-results> ;
 
 TUPLE: succeed-parser result ;
 
@@ -73,7 +98,7 @@ C: succeed succeed-parser ( result -- parser )
 M: succeed-parser parse ( input parser -- list )
     #! A parser that always returns 'result' as a
     #! successful parse with no input consumed.
-    succeed-parser-result swap <parse-result> 1list ;
+    succeed-parser-result swap <parse-results> ;
 
 TUPLE: fail-parser ;
 
@@ -84,6 +109,24 @@ M: fail-parser parse ( input parser -- list )
     #! an empty list of successes.
     2drop nil ;
 
+TUPLE: ensure-parser test ;
+
+: ensure ( parser -- ensure )
+    ensure-parser construct-boa ;
+
+M: ensure-parser parse ( input parser -- list )
+    2dup ensure-parser-test parse nil?
+    [ 2drop nil ] [ drop t swap <parse-results> ] if ;
+
+TUPLE: ensure-not-parser test ;
+
+: ensure-not ( parser -- ensure )
+    ensure-not-parser construct-boa ;
+
+M: ensure-not-parser parse ( input parser -- list )
+    2dup ensure-not-parser-test parse nil?
+    [ drop t swap <parse-results> ] [ 2drop nil ] if ;
+
 TUPLE: and-parser parsers ;
 
 : <&> ( parser1 parser2 -- parser )
@@ -163,7 +206,7 @@ TUPLE: apply-parser p1 quot ;
 C: <@ apply-parser ( parser quot -- parser )
 
 M: apply-parser parse ( input parser -- result )
-    #! Calls the parser on the input. For each successfull
+    #! Calls the parser on the input. For each successful
     #! parse the quot is call with the parse result on the stack.
     #! The result of that quotation then becomes the new parse result.
     #! This allows modification of parse tree results (like
@@ -215,7 +258,7 @@ LAZY: <*> ( parser -- parser )
 
 LAZY: <?> ( parser -- parser )
     #! Return a parser that optionally uses the parser
-    #! if that parser would be successfull.
+    #! if that parser would be successful.
     [ 1array ] <@ f succeed <|> ;
 
 TUPLE: only-first-parser p1 ;
@@ -252,6 +295,10 @@ LAZY: <!?> ( parser -- parser )
     #! required.
     <?> only-first ;
 
+LAZY: <(?)> ( parser -- parser )
+    #! Like <?> but take shortest match first.
+    f succeed swap [ 1array ] <@ <|> ;
+
 LAZY: <(*)> ( parser -- parser )
     #! Like <*> but take shortest match first.
     #! Implementation by Matthew Willis.
@@ -280,3 +327,25 @@ LAZY: <(+)> ( parser -- parser )
 
 LAZY: surrounded-by ( parser start end -- parser' )
     [ token ] 2apply swapd pack ;
+
+: flatten* ( obj -- )
+    dup array? [ [ flatten* ] each ] [ , ] if ;
+
+: flatten [ flatten* ] { } make ;
+
+: exactly-n ( parser n -- parser' )
+    swap <repetition> <and-parser> [ flatten ] <@ ;
+
+: at-most-n ( parser n -- parser' )
+    dup zero? [
+        2drop epsilon
+    ] [
+        2dup exactly-n
+        -rot 1- at-most-n <|>
+    ] if ;
+
+: at-least-n ( parser n -- parser' )
+    dupd exactly-n swap <*> <&> ;
+
+: from-m-to-n ( parser m n -- parser' )
+    >r [ exactly-n ] 2keep r> swap - at-most-n <:&:> ;
index e0d75b38a738da4143c94339baff5e0b6f18b5d7..fe73f5d3c22c78e55d02c3657e8e7f52dac859c3 100644 (file)
@@ -10,7 +10,7 @@ HELP: tree-write
     "Write the object to the standard output stream, unless "
     "it is an array, in which case recurse through the array "
     "writing each object to the stream." }
-{ $example "[ { 65 \"bc\" { 68 \"ef\" } } tree-write ] string-out ." "\"AbcDef\"" } ;
+{ $example "USE: parser-combinators" "{ 65 \"bc\" { 68 \"ef\" } } tree-write" "AbcDef" } ;
 
 HELP: search
 { $values 
@@ -24,8 +24,8 @@ HELP: search
     "parser."
 }
     
-{ $example "\"one 123 two 456\" 'integer' search ." "{ 123 456 }" }
-{ $example "\"one 123 \\\"hello\\\" two 456\" 'integer' 'string' <|> search ." "{ 123 \"hello\" 456 }" }
+{ $example "USE: parser-combinators" "\"one 123 two 456\" 'integer' search ." "{ 123 456 }" }
+{ $example "USE: parser-combinators" "\"one 123 \\\"hello\\\" two 456\" 'integer' 'string' <|> search ." "{ 123 \"hello\" 456 }" }
 { $see-also search* replace replace* } ;
 
 HELP: search*
@@ -40,7 +40,7 @@ HELP: search*
     "parsers in the 'parsers' sequence."
 }
     
-{ $example "\"one 123 \\\"hello\\\" two 456\" 'integer' 'string' 2array search* ." "{ 123 \"hello\" 456 }" }
+{ $example "USE: parser-combinators" "\"one 123 \\\"hello\\\" two 456\" 'integer' 'string' 2array search* ." "{ 123 \"hello\" 456 }" }
 { $see-also search replace replace* } ;
 
 HELP: replace
@@ -54,9 +54,9 @@ HELP: replace
     "successfully parse with the given parser replaced with "
     "the result of that parser."
 }   
-{ $example "\"one 123 two 456\" 'integer' [ 2 * number>string ] <@ replace ." "\"one 246 two 912\"" }
-{ $example "\"hello *world* from *factor*\" 'bold' [ \"<strong>\" swap \"</strong>\" 3append ] <@ replace ." "\"hello <strong>world</strong> from <strong>factor</strong>\"" }
-{ $example "\"hello *world* from _factor_\"\n 'bold' [ \"<strong>\" swap \"</strong>\" 3append ] <@\n 'italic' [ \"<emphasis>\" swap \"</emphasis>\" 3append ] <@ <|>\n replace ." "\"hello <strong>world</strong> from <emphasis>factor</emphasis>\"" }
+{ $example "USING: parser-combinators math.parser ;" "\"one 123 two 456\" 'integer' [ 2 * number>string ] <@ replace ." "\"one 246 two 912\"" }
+{ $example "USE: parser-combinators" "\"hello *world* from *factor*\" 'bold' [ \"<strong>\" swap \"</strong>\" 3append ] <@ replace ." "\"hello <strong>world</strong> from <strong>factor</strong>\"" }
+{ $example "USE: parser-combinators" "\"hello *world* from _factor_\"\n 'bold' [ \"<strong>\" swap \"</strong>\" 3append ] <@\n 'italic' [ \"<emphasis>\" swap \"</emphasis>\" 3append ] <@ <|>\n replace ." "\"hello <strong>world</strong> from <emphasis>factor</emphasis>\"" }
 { $see-also search search* replace* } ;
 
 HELP: replace*
@@ -71,6 +71,6 @@ HELP: replace*
     "the result of that parser. Each parser is done in sequence so that "
     "the parse results of the first parser can be replaced by later parsers."
 }   
-{ $example "\"*hello _world_*\"\n 'bold' [ \"<strong>\" swap \"</strong>\" 3append ] <@\n 'italic' [ \"<emphasis>\" swap \"</emphasis>\" 3append ] <@ 2array\n replace* ." "\"<strong>hello <emphasis>world</emphasis></strong>\"" }
+{ $example "USE: parser-combinators" "\"*hello _world_*\"\n 'bold' [ \"<strong>\" swap \"</strong>\" 3append ] <@\n 'italic' [ \"<emphasis>\" swap \"</emphasis>\" 3append ] <@ 2array\n replace* ." "\"<strong>hello <emphasis>world</emphasis></strong>\"" }
 { $see-also search search* replace* } ;
 
index 52786aceae50879c6c1c1459e6da56cbcaf4e0af..c2cca6e4a097a3a60d38575a561c606cd892d7f2 100755 (executable)
@@ -60,6 +60,6 @@ HELP: comma-list
     "'element' should be a parser that can parse the elements. The "
     "result of the parser is a sequence of the parsed elements." }
 { $examples
-{ $example "USING: lazy-lits parser-combinators ;" "\"1,2,3,4\" 'integer' comma-list parse-1 ." "{ 1 2 3 4 }" } } ;
+{ $example "USING: lazy-lists parser-combinators ;" "\"1,2,3,4\" 'integer' comma-list parse-1 ." "{ 1 2 3 4 }" } } ;
 
 { $see-also 'digit' 'integer' 'string' 'bold' 'italic' comma-list } related-words
index 0eeab7c4dce17546067721157be1ea065eb840ec..a308b9af52c356844608d125ffde9230d5ca867c 100644 (file)
@@ -9,27 +9,91 @@ IN: temporary
 ] unit-test
 
 { T{ ebnf-terminal f "55" } } [
-  "\"55\"" 'terminal' parse parse-result-ast 
+  "'55'" 'terminal' parse parse-result-ast 
 ] unit-test
 
 {
   T{ ebnf-rule f 
-     "digit" 
-     T{ ebnf-choice f
-        V{ T{ ebnf-terminal f "1" } T{ ebnf-terminal f "2" } }
+     "digit"
+     V{ 
+       T{ ebnf-choice f
+          V{ T{ ebnf-terminal f "1" } T{ ebnf-terminal f "2" } }
+       }
+       f
      }
   } 
 } [
-  "digit = \"1\" | \"2\"" 'rule' parse parse-result-ast
+  "digit = '1' | '2'" 'rule' parse parse-result-ast
 ] unit-test
 
 {
   T{ ebnf-rule f 
      "digit" 
-     T{ ebnf-sequence f
-        V{ T{ ebnf-terminal f "1" } T{ ebnf-terminal f "2" } }
+     V{
+       T{ ebnf-sequence f
+          V{ T{ ebnf-terminal f "1" } T{ ebnf-terminal f "2" } }
+       }
+       f
+     }
+  }   
+} [
+  "digit = '1' '2'" 'rule' parse parse-result-ast
+] unit-test
+
+{
+  T{ ebnf-choice f
+     V{ 
+       T{ ebnf-sequence f
+          V{ T{ ebnf-non-terminal f "one" } T{ ebnf-non-terminal f "two" } }
+       }
+       T{ ebnf-non-terminal f "three" }
      }
   } 
 } [
-  "digit = \"1\" \"2\"" 'rule' parse parse-result-ast
-] unit-test
\ No newline at end of file
+  "one two | three" 'choice' parse parse-result-ast
+] unit-test
+
+{
+  T{ ebnf-sequence f
+     V{ 
+       T{ ebnf-non-terminal f "one" }
+       T{ ebnf-choice f
+          V{ T{ ebnf-non-terminal f "two" } T{ ebnf-non-terminal f "three" } }
+       }
+     }
+  } 
+} [
+  "one (two | three)" 'choice' parse parse-result-ast
+] unit-test
+
+{
+  T{ ebnf-sequence f
+     V{ 
+       T{ ebnf-non-terminal f "one" }
+       T{ ebnf-repeat0 f
+          T{ ebnf-sequence f
+             V{
+                T{ ebnf-choice f
+                   V{ T{ ebnf-non-terminal f "two" } T{ ebnf-non-terminal f "three" } }
+                }
+                T{ ebnf-non-terminal f "four" }
+             }
+          }
+        }
+     }
+  } 
+} [
+  "one {(two | three) four}" 'choice' parse parse-result-ast
+] unit-test
+
+{
+  T{ ebnf-sequence f
+     V{ 
+         T{ ebnf-non-terminal f "one" } 
+         T{ ebnf-optional f T{ ebnf-non-terminal f "two" } }
+         T{ ebnf-non-terminal f "three" }
+     }
+  } 
+} [
+  "one [ two ] three" 'choice' parse parse-result-ast
+] unit-test
index 8726581488354d89f6c14ff0edec6a3505a63d15..e55ee9d852bd03bfe6bd74fe403aaeb9d028cb80 100644 (file)
@@ -1,6 +1,7 @@
 ! Copyright (C) 2007 Chris Double.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel parser words arrays strings math.parser sequences namespaces peg ;
+USING: kernel parser words arrays strings math.parser sequences 
+       quotations vectors namespaces math assocs continuations peg ;
 IN: peg.ebnf
 
 TUPLE: ebnf-non-terminal symbol ;
@@ -8,7 +9,9 @@ TUPLE: ebnf-terminal symbol ;
 TUPLE: ebnf-choice options ;
 TUPLE: ebnf-sequence elements ;
 TUPLE: ebnf-repeat0 group ;
+TUPLE: ebnf-optional elements ;
 TUPLE: ebnf-rule symbol elements ;
+TUPLE: ebnf-action word ;
 TUPLE: ebnf rules ;
 
 C: <ebnf-non-terminal> ebnf-non-terminal
@@ -16,58 +19,82 @@ C: <ebnf-terminal> ebnf-terminal
 C: <ebnf-choice> ebnf-choice
 C: <ebnf-sequence> ebnf-sequence
 C: <ebnf-repeat0> ebnf-repeat0
+C: <ebnf-optional> ebnf-optional
 C: <ebnf-rule> ebnf-rule
+C: <ebnf-action> ebnf-action
 C: <ebnf> ebnf
 
-GENERIC: ebnf-compile ( ast -- quot )
+SYMBOL: parsers
+SYMBOL: non-terminals
+SYMBOL: last-parser
 
-M: ebnf-terminal ebnf-compile ( ast -- quot )
-  [
-    ebnf-terminal-symbol , \ token ,
-  ] [ ] make ;
+: reset-parser-generation ( -- ) 
+  V{ } clone parsers set 
+  H{ } clone non-terminals set 
+  f last-parser set ;
 
-M: ebnf-non-terminal ebnf-compile ( ast -- quot )
-  [
-    ebnf-non-terminal-symbol , \ in , \ get , \ lookup , \ execute ,
-  ] [ ] make ;
+: store-parser ( parser -- number )
+  parsers get [ push ] keep length 1- ;
 
-M: ebnf-choice ebnf-compile ( ast -- quot )
-  [
-    [
-      ebnf-choice-options [
-        ebnf-compile ,
-      ] each
-    ] { } make ,
-    [ call ] , \ map , \ choice , 
-  ] [ ] make ;
-
-M: ebnf-sequence ebnf-compile ( ast -- quot )
-  [
-    [
-      ebnf-sequence-elements [
-        ebnf-compile ,
-      ] each
-    ] { } make ,
-    [ call ] , \ map , \ seq , 
-  ] [ ] make ;
-
-M: ebnf-repeat0 ebnf-compile ( ast -- quot )
-  [
-    ebnf-repeat0-group ebnf-compile % \ repeat0 , 
-  ] [ ] make ;
+: get-parser ( index -- parser )
+  parsers get nth ;
+  
+: non-terminal-index ( name -- number )
+  dup non-terminals get at [
+    nip
+  ] [
+    f store-parser [ swap non-terminals get set-at ] keep
+  ] if* ;
 
-M: ebnf-rule ebnf-compile ( ast -- quot )
-  [
-    dup ebnf-rule-symbol , \ in , \ get , \ create , 
-    ebnf-rule-elements ebnf-compile , \ define-compound , 
-  ] [ ] make ;
+GENERIC: (generate-parser) ( ast -- id )
 
-M: ebnf ebnf-compile ( ast -- quot )
+: generate-parser ( ast -- id )
+  (generate-parser) dup last-parser set ;
+
+M: ebnf-terminal (generate-parser) ( ast -- id )
+  ebnf-terminal-symbol token sp store-parser ;
+
+M: ebnf-non-terminal (generate-parser) ( ast -- id )
   [
-    ebnf-rules [
-      ebnf-compile %
-    ] each 
-  ] [ ] make ;
+    ebnf-non-terminal-symbol dup non-terminal-index , 
+    parsers get , \ nth , [ search ] [ 2drop f ] recover , \ or ,
+  ] [ ] make delay sp store-parser ;
+
+M: ebnf-choice (generate-parser) ( ast -- id )
+  ebnf-choice-options [
+    generate-parser get-parser 
+  ] map choice store-parser ;
+
+M: ebnf-sequence (generate-parser) ( ast -- id )
+  ebnf-sequence-elements [
+    generate-parser get-parser
+  ] map seq store-parser ;
+
+M: ebnf-repeat0 (generate-parser) ( ast -- id )
+  ebnf-repeat0-group generate-parser get-parser repeat0 store-parser ;
+
+M: ebnf-optional (generate-parser) ( ast -- id )
+  ebnf-optional-elements generate-parser get-parser optional store-parser ;
+
+M: ebnf-rule (generate-parser) ( ast -- id )
+  dup ebnf-rule-symbol non-terminal-index swap 
+  ebnf-rule-elements generate-parser get-parser ! nt-id body
+  swap [ parsers get set-nth ] keep ;
+
+M: ebnf-action (generate-parser) ( ast -- id )
+  ebnf-action-word search 1quotation 
+  last-parser get get-parser swap action store-parser ;
+
+M: vector (generate-parser) ( ast -- id )
+  [ generate-parser ] map peek ;
+
+M: f (generate-parser) ( ast -- id )
+  drop last-parser get ;
+
+M: ebnf (generate-parser) ( ast -- id )
+  ebnf-rules [
+    generate-parser 
+  ] map peek ;
 
 DEFER: 'rhs'
 
@@ -75,32 +102,55 @@ DEFER: 'rhs'
   CHAR: a CHAR: z range repeat1 [ >string <ebnf-non-terminal> ] action ;
 
 : 'terminal' ( -- parser )
-  "\"" token hide [ CHAR: " = not ] satisfy repeat1 "\"" token hide 3array seq [ first >string <ebnf-terminal> ] action ;
+  "'" token hide [ CHAR: ' = not ] satisfy repeat1 "'" token hide 3array seq [ first >string <ebnf-terminal> ] action ;
 
 : 'element' ( -- parser )
   'non-terminal' 'terminal' 2array choice ;
 
-: 'sequence' ( -- parser )
-  'element' sp 
-  "|" token sp ensure-not 2array seq [ first ] action 
-   repeat1 [ <ebnf-sequence> ] action ;
-  
-: 'choice' ( -- parser )
-  'element' sp "|" token sp list-of [ <ebnf-choice> ] action ;
+DEFER: 'choice'
+
+: 'group' ( -- parser )
+  "(" token sp hide
+  [ 'choice' sp ] delay
+  ")" token sp hide 
+  3array seq [ first ] action ;
 
 : 'repeat0' ( -- parser )
   "{" token sp hide
-  [ 'rhs' sp ] delay
+  [ 'choice' sp ] delay
   "}" token sp hide 
   3array seq [ first <ebnf-repeat0> ] action ;
 
-: 'rhs' ( -- parser )
-  'repeat0'
-  'sequence'
-  'choice'
-  'element' 
-  4array choice ;
+: 'optional' ( -- parser )
+  "[" token sp hide
+  [ 'choice' sp ] delay
+  "]" token sp hide 
+  3array seq [ first <ebnf-optional> ] action ;
+
+: 'sequence' ( -- parser )
+  [ 
+    'element' sp ,
+    'group' sp , 
+    'repeat0' sp ,
+    'optional' sp , 
+   ] { } make  choice  
+   repeat1 [ 
+     dup length 1 = [ first ] [ <ebnf-sequence> ] if
+   ] action ;  
+
+: 'choice' ( -- parser )
+  'sequence' sp "|" token sp list-of [ 
+    dup length 1 = [ first ] [ <ebnf-choice> ] if
+   ] action ;
+
+: 'action' ( -- parser )
+  "=>" token hide
+  [ blank? ] satisfy ensure-not [ drop t ] satisfy 2array seq [ first ] action repeat1 [ >string ] action sp
+  2array seq [ first <ebnf-action> ] action ;
   
+: 'rhs' ( -- parser )
+  'choice' 'action' sp optional 2array seq ;
 : 'rule' ( -- parser )
   'non-terminal' [ ebnf-non-terminal-symbol ] action 
   "=" token sp hide 
@@ -112,9 +162,23 @@ DEFER: 'rhs'
 
 : ebnf>quot ( string -- quot )
   'ebnf' parse [
-     parse-result-ast ebnf-compile  
+     parse-result-ast [
+         reset-parser-generation
+         generate-parser drop
+         [
+             non-terminals get
+             [
+               get-parser [
+                 swap , \ in , \ get , \ create ,
+                 1quotation , \ define-compound , 
+               ] [
+                 drop
+               ] if*
+             ] assoc-each
+         ] [ ] make
+     ] with-scope
    ] [
     f
    ] if* ;
 
-: <EBNF "EBNF>" parse-tokens "" join ebnf>quot call ; parsing
\ No newline at end of file
+: <EBNF "EBNF>" parse-tokens " " join ebnf>quot call ; parsing
\ No newline at end of file
index 63b9d4431061012e34b7a0bfed16441e59806174..41463d85a0d62c0f73607834bd203ae347a78b13 100644 (file)
@@ -4,9 +4,9 @@ USING: help.markup help.syntax peg ;
 
 HELP: parse
 { $values 
-  { "string" "a string" } 
-  { "parse" "a parser" } 
-  { "result" "a <parse-result> or f" } 
+  { "input" "a string" } 
+  { "parser" "a parser" } 
+  { "result" "a parse-result or f" } 
 }
 { $description 
     "Given the input string, parse it using the given parser. The result is a <parse-result> object if "
@@ -37,7 +37,7 @@ HELP: range
 }
 { $description 
     "Returns a parser that matches a single character that lies within the range of characters given, inclusive." }
-{ $example ": digit ( -- parser ) CHAR: 0 CHAR: 9 range ;" } ;
+{ $examples { $code ": digit ( -- parser ) CHAR: 0 CHAR: 9 range ;" } } ;
 
 HELP: seq
 { $values 
@@ -60,8 +60,7 @@ HELP: choice
 
 HELP: repeat0
 { $values 
-  { "p1" "a parser" } 
-  { "p2" "a parser" } 
+  { "parser" "a parser" } 
 }
 { $description 
     "Returns a parser that parses 0 or more instances of the 'p1' parser. The AST produced is "
@@ -70,8 +69,7 @@ HELP: repeat0
 
 HELP: repeat1
 { $values 
-  { "p1" "a parser" } 
-  { "p2" "a parser" } 
+  { "parser" "a parser" } 
 }
 { $description 
     "Returns a parser that parses 1 or more instances of the 'p1' parser. The AST produced is "
@@ -79,8 +77,7 @@ HELP: repeat1
 
 HELP: optional
 { $values 
-  { "p1" "a parser" } 
-  { "p2" "a parser" } 
+  { "parser" "a parser" } 
 }
 { $description 
     "Returns a parser that parses 0 or 1 instances of the 'p1' parser. The AST produced is "
@@ -88,29 +85,27 @@ HELP: optional
 
 HELP: ensure
 { $values 
-  { "p1" "a parser" } 
-  { "p2" "a parser" } 
+  { "parser" "a parser" } 
 }
 { $description 
     "Returns a parser that succeeds if the 'p1' parser succeeds but does not add anything to the "
     "AST and does not move the location in the input string. This can be used for lookahead and "
     "disambiguation, along with the " { $link ensure-not } " word." }
-{ $example "\"0\" token ensure octal-parser" } ;
+{ $examples { $code "\"0\" token ensure octal-parser" } } ;
 
 HELP: ensure-not
 { $values 
-  { "p1" "a parser" } 
-  { "p2" "a parser" } 
+  { "parser" "a parser" } 
 }
 { $description 
     "Returns a parser that succeeds if the 'p1' parser fails but does not add anything to the "
     "AST and does not move the location in the input string. This can be used for lookahead and "
     "disambiguation, along with the " { $link ensure } " word." }
-{ $example "\"+\" token \"=\" token ensure-not \"+=\" token 3array seq" } ;
+{ $code "\"+\" token \"=\" token ensure-not \"+=\" token 3array seq" } ;
 
 HELP: action
 { $values 
-  { "p1" "a parser" } 
+  { "parser" "a parser" } 
   { "quot" "a quotation with stack effect ( ast -- ast )" } 
 }
 { $description 
@@ -118,11 +113,10 @@ HELP: action
     "from that parse. The result of the quotation is then used as the final AST. This can be used "
     "for manipulating the parse tree to produce a AST better suited for the task at hand rather than "
     "the default AST." }
-{ $example "CHAR: 0 CHAR: 9 range [ to-digit ] action" } ;
+{ $code "CHAR: 0 CHAR: 9 range [ to-digit ] action" } ;
 
 HELP: sp
 { $values 
-  { "p1" "a parser" } 
   { "parser" "a parser" } 
 }
 { $description 
@@ -131,17 +125,15 @@ HELP: sp
 
 HELP: hide
 { $values 
-  { "p1" "a parser" } 
   { "parser" "a parser" } 
 }
 { $description 
     "Returns a parser that succeeds if the original parser succeeds, but does not " 
     "put any result in the AST. Useful for ignoring 'syntax' in the AST." }
-{ $example "\"[\" token hide number \"]\" token hide 3array seq" } ;
+{ $code "\"[\" token hide number \"]\" token hide 3array seq" } ;
 
 HELP: delay
 { $values 
-  { "quot" "a quotation with stack effect ( -- parser )" } 
   { "parser" "a parser" } 
 }
 { $description 
index a9e08f60245f3b1210b39d86db0ae048784e5eb3..7fa1fb90e5e2eee1a379434bef364112614e7658 100644 (file)
@@ -1,15 +1,21 @@
 ! Copyright (C) 2007 Chris Double.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel sequences strings namespaces math assocs shuffle vectors combinators.lib ;
+USING: kernel sequences strings namespaces math assocs shuffle 
+       vectors arrays combinators.lib memoize ;
 IN: peg
 
 TUPLE: parse-result remaining ast ;
 
-GENERIC: parse ( state parser -- result )
+GENERIC: (parse) ( state parser -- result )
 
 <PRIVATE
 
+SYMBOL: packrat-cache
 SYMBOL: ignore 
+SYMBOL: not-in-cache
+
+: not-in-cache? ( result -- ? )
+  not-in-cache = ;
 
 : <parse-result> ( remaining ast -- parse-result )
   parse-result construct-boa ;
@@ -24,18 +30,58 @@ TUPLE: parser id ;
 : init-parser ( parser -- parser )
   get-next-id parser construct-boa over set-delegate ;
 
+: from ( slice-or-string -- index )
+  dup slice? [ slice-from ] [ drop 0 ] if ;
+
+: get-cached ( input parser -- result )
+  [ from ] dip parser-id packrat-cache get at at* [ 
+    drop not-in-cache 
+  ] unless ;
+
+: put-cached ( result input parser -- )
+  parser-id dup packrat-cache get at [ 
+    nip
+  ] [ 
+    H{ } clone dup >r swap packrat-cache get set-at r>
+  ] if* 
+  [ from ] dip set-at ;
+
+PRIVATE>
+
+: parse ( input parser -- result )
+  packrat-cache get [
+    2dup get-cached dup not-in-cache? [ 
+!      "cache missed: " write over parser-id number>string write " - " write nl ! pick .
+      drop 
+      #! Protect against left recursion blowing the callstack
+      #! by storing a failed parse in the cache.
+      [ f ] dipd  [ put-cached ] 2keep
+      [ (parse) dup ] 2keep put-cached
+    ] [ 
+!      "cache hit: " write over parser-id number>string write " - " write nl ! pick . 
+      2nip
+    ] if
+  ] [
+    (parse)
+  ] if ;
+
+: packrat-parse ( input parser -- result )
+  H{ } clone packrat-cache [ parse ] with-variable ;
+
+<PRIVATE
+
 TUPLE: token-parser symbol ;
 
-M: token-parser parse ( state parser -- result )
+M: token-parser (parse) ( input parser -- result )
   token-parser-symbol 2dup head? [
     dup >r length tail-slice r> <parse-result>
   ] [
     2drop f
   ] if ;
-
+   
 TUPLE: satisfy-parser quot ;
 
-M: satisfy-parser parse ( state parser -- result )
+M: satisfy-parser (parse) ( state parser -- result )
   over empty? [
     2drop f 
   ] [
@@ -48,7 +94,7 @@ M: satisfy-parser parse ( state parser -- result )
 
 TUPLE: range-parser min max ;
 
-M: range-parser parse ( state parser -- result )
+M: range-parser (parse) ( state parser -- result )
   over empty? [
     2drop f
   ] [
@@ -77,7 +123,7 @@ TUPLE: seq-parser parsers ;
     drop   
   ] if ;
 
-M: seq-parser parse ( state parser -- result )
+M: seq-parser (parse) ( state parser -- result )
   seq-parser-parsers [ V{ } clone <parse-result> ] dip  (seq-parser) ;
 
 TUPLE: choice-parser parsers ;
@@ -93,7 +139,7 @@ TUPLE: choice-parser parsers ;
     ] if* 
   ] if ;
 
-M: choice-parser parse ( state parser -- result )
+M: choice-parser (parse) ( state parser -- result )
   choice-parser-parsers (choice-parser) ;
 
 TUPLE: repeat0-parser p1 ;
@@ -111,7 +157,7 @@ TUPLE: repeat0-parser p1 ;
   { parse-result-remaining parse-result-ast }
   get-slots 1vector  <parse-result> ;
 
-M: repeat0-parser parse ( state parser -- result )
+M: repeat0-parser (parse) ( state parser -- result )
      repeat0-parser-p1 2dup parse [ 
        nipd clone-result (repeat-parser) 
      ] [ 
@@ -120,17 +166,17 @@ M: repeat0-parser parse ( state parser -- result )
 
 TUPLE: repeat1-parser p1 ;
 
-M: repeat1-parser parse ( state parser -- result )
+M: repeat1-parser (parse) ( state parser -- result )
    repeat1-parser-p1 tuck parse dup [ clone-result (repeat-parser) ] [ nip ] if ;
 
 TUPLE: optional-parser p1 ;
 
-M: optional-parser parse ( state parser -- result )
+M: optional-parser (parse) ( state parser -- result )
    dupd optional-parser-p1 parse swap f <parse-result> or ;
 
 TUPLE: ensure-parser p1 ;
 
-M: ensure-parser parse ( state parser -- result )
+M: ensure-parser (parse) ( state parser -- result )
    dupd ensure-parser-p1 parse [
      ignore <parse-result>  
    ] [
@@ -139,7 +185,7 @@ M: ensure-parser parse ( state parser -- result )
 
 TUPLE: ensure-not-parser p1 ;
 
-M: ensure-not-parser parse ( state parser -- result )
+M: ensure-not-parser (parse) ( state parser -- result )
    dupd ensure-not-parser-p1 parse [
      drop f
    ] [
@@ -148,7 +194,7 @@ M: ensure-not-parser parse ( state parser -- result )
 
 TUPLE: action-parser p1 quot ;
 
-M: action-parser parse ( state parser -- result )
+M: action-parser (parse) ( state parser -- result )
    tuck action-parser-p1 parse dup [ 
      dup parse-result-ast rot action-parser-quot call
      swap [ set-parse-result-ast ] keep
@@ -165,23 +211,23 @@ M: action-parser parse ( state parser -- result )
 
 TUPLE: sp-parser p1 ;
 
-M: sp-parser parse ( state parser -- result )
+M: sp-parser (parse) ( state parser -- result )
   [ left-trim-slice ] dip sp-parser-p1 parse ;
 
 TUPLE: delay-parser quot ;
 
-M: delay-parser parse ( state parser -- result )
+M: delay-parser (parse) ( state parser -- result )
   delay-parser-quot call parse ;
 
 PRIVATE>
 
-: token ( string -- parser )
+MEMO: token ( string -- parser )
   token-parser construct-boa init-parser ;      
 
 : satisfy ( quot -- parser )
   satisfy-parser construct-boa init-parser ;
 
-: range ( min max -- parser )
+MEMO: range ( min max -- parser )
   range-parser construct-boa init-parser ;
 
 : seq ( seq -- parser )
@@ -190,32 +236,32 @@ PRIVATE>
 : choice ( seq -- parser )
   choice-parser construct-boa init-parser ;
 
-: repeat0 ( parser -- parser )
+MEMO: repeat0 ( parser -- parser )
   repeat0-parser construct-boa init-parser ;
 
-: repeat1 ( parser -- parser )
+MEMO: repeat1 ( parser -- parser )
   repeat1-parser construct-boa init-parser ;
 
-: optional ( parser -- parser )
+MEMO: optional ( parser -- parser )
   optional-parser construct-boa init-parser ;
 
-: ensure ( parser -- parser )
+MEMO: ensure ( parser -- parser )
   ensure-parser construct-boa init-parser ;
 
-: ensure-not ( parser -- parser )
+MEMO: ensure-not ( parser -- parser )
   ensure-not-parser construct-boa init-parser ;
 
 : action ( parser quot -- parser )
   action-parser construct-boa init-parser ;
 
-: sp ( parser -- parser )
+MEMO: sp ( parser -- parser )
   sp-parser construct-boa init-parser ;
 
-: hide ( parser -- parser )
+MEMO: hide ( parser -- parser )
   [ drop ignore ] action ;
 
-: delay ( parser -- parser )
+MEMO: delay ( parser -- parser )
   delay-parser construct-boa init-parser ;
 
-: list-of ( items separator -- parser )
+MEMO: list-of ( items separator -- parser )
   hide over 2array seq repeat0 [ concat ] action 2array seq [ unclip 1vector swap first append ] action ;
index e40c984660e4a991e7ff04db4932b7c3aa8655c4..cec7b24cd01f0bf9deb984518321843dc0a3f7d6 100644 (file)
@@ -5,9 +5,9 @@ USING: kernel tools.test peg peg.pl0 ;
 IN: temporary
 
 { "abc" } [
-  "abc" 'ident' parse parse-result-ast 
+  "abc" ident parse parse-result-ast 
 ] unit-test
 
 { 55 } [
-  "55abc" 'number' parse parse-result-ast 
+  "55abc" number parse parse-result-ast 
 ] unit-test
index 8a01057bfbc38754647172e1c5da115599dee0ae..b6b030f56cffec60874d5b4f5e05e4f706ececfd 100644 (file)
@@ -1,58 +1,29 @@
 ! Copyright (C) 2007 Chris Double.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel arrays strings math.parser sequences peg ;
+USING: kernel arrays strings math.parser sequences peg peg.ebnf memoize ;
 IN: peg.pl0
 
 #! Grammar for PL/0 based on http://en.wikipedia.org/wiki/PL/0
-
-: 'ident' ( -- parser )
+MEMO: ident ( -- parser )
   CHAR: a CHAR: z range 
   CHAR: A CHAR: Z range 2array choice repeat1 
   [ >string ] action ;
 
-: 'number' ( -- parser )
+MEMO: number ( -- parser )
   CHAR: 0 CHAR: 9 range repeat1 [ string>number ] action ;
 
-DEFER: 'factor'
-
-: 'term' ( -- parser )
-  'factor' "*" token "/" token 2array choice sp 'factor' sp 2array seq repeat0 2array seq ;
-
-: 'expression' ( -- parser )
-  [ "+" token "-" token 2array choice sp optional 'term' sp 2dup 2array seq repeat0 3array seq ] delay ;
-
-: 'factor' ( -- parser )
-  'ident' 'number' "(" token hide 'expression' sp ")" token sp hide 3array seq 3array choice ;
-
-: 'condition' ( -- parser )
-  "odd" token 'expression' sp 2array seq
-  'expression' { "=" "#" "<=" "<" ">=" ">" } [ token ] map choice sp 'expression' sp 3array seq 
-  2array choice ;
-
-: 'statement' ( -- parser )
-  [
-    'ident' ":=" token sp 'expression' sp 3array seq
-    "call" token 'ident' sp 2array seq
-    "begin" token 'statement' sp ";" token sp 'statement' sp 2array seq repeat0 "end" token sp 4array seq
-     "if" token 'condition' sp "then" token sp 'statement' sp 4array seq
-     4array choice
-     "while" token 'condition' sp "do" token sp 'statement' sp 4array seq
-     2array choice optional
-  ] delay ;
-
-: 'block' ( -- parser )
- [
-  "const" token 'ident' sp "=" token sp 'number' sp 4array seq 
-    "," token sp 'ident' sp "=" token sp 'number' sp 4array seq repeat0
-  ";" token sp 3array seq optional
-  
-  "var" token 'ident' sp "," token sp 'ident' sp 2array seq repeat0 
-  ";" token sp 4array seq optional
-
-  "procedure" token 'ident' sp ";" token sp 'block' sp 4array seq ";" token sp 2array seq repeat0 'statement' sp 2array seq  
-
-  3array seq
- ] delay ;
-
-: 'program' ( -- parser )
-  'block' "." token sp 2array seq ;
+<EBNF
+program = block '.' .
+block = [ 'const' ident '=' number { ',' ident '=' number } ';' ]
+        [ 'var' ident { ',' ident } ';' ]
+        { 'procedure' ident ';' [ block ';' ] } statement .
+statement = [ ident ':=' expression | 'call' ident |
+              'begin' statement {';' statement } 'end' |
+              'if' condition 'then' statement |
+              'while' condition 'do' statement ] .
+condition = 'odd' expression |
+            expression ('=' | '#' | '<=' | '<' | '>=' | '>') expression .
+expression = ['+' | '-'] term {('+' | '-') term } .
+term = factor {('*' | '/') factor } .
+factor = ident | number | '(' expression ')'
+EBNF>
diff --git a/extra/prolog/authors.txt b/extra/prolog/authors.txt
new file mode 100644 (file)
index 0000000..194cb22
--- /dev/null
@@ -0,0 +1 @@
+Gavin Harrison
diff --git a/extra/prolog/prolog.factor b/extra/prolog/prolog.factor
new file mode 100644 (file)
index 0000000..0a6a513
--- /dev/null
@@ -0,0 +1,84 @@
+! Copyright (C) 2007 Gavin Harrison
+! See http://factorcode.org/license.txt for BSD license.
+
+USING: kernel sequences arrays vectors namespaces math strings
+    combinators continuations quotations io assocs ;
+
+IN: prolog
+
+SYMBOL: pldb
+SYMBOL: plchoice
+
+: init-pl ( -- ) V{ } clone pldb set V{ } clone plchoice set ;
+
+: reset-choice ( -- ) V{ } clone plchoice set ;
+: remove-choice ( -- ) plchoice get pop drop ;
+: add-choice ( continuation -- ) 
+    dup continuation? [ plchoice get push ] [ drop ] if ;
+: last-choice ( -- ) plchoice get pop continue ;
+
+: rules ( -- vector ) pldb get ;
+: rule ( n -- rule ) dup rules length >= [ drop "No." ] [ rules nth ] if ;
+
+: var? ( pl-obj -- ? ) 
+    dup string? [ 0 swap nth LETTER? ] [ drop f ] if ;
+: const? ( pl-obj -- ? ) var? not ;
+
+: check-arity ( pat fact -- pattern fact ? ) 2dup [ length ] 2apply = ;
+: check-elements ( pat fact -- ? ) [ over var? [ 2drop t ] [ = ] if ] 2all? ;
+: (double-bound) ( key value assoc -- ? )
+    pick over at* [ pick = >r 3drop r> ] [ drop swapd set-at t ] if ;
+: single-bound? ( pat-d pat-f -- ? ) 
+    H{ } clone [ (double-bound) ] curry 2all? ;
+: match-pattern ( pat fact -- ? ) 
+    check-arity [ 2dup check-elements -rot single-bound? and ] [ 2drop f ] if ;
+: good-result? ( pat fact -- pat fact ? )
+    2dup dup "No." = [ 2drop t ] [ match-pattern ] if ;
+
+: add-rule ( name pat body -- ) 3array rules dup length swap set-nth ;
+
+: (lookup-rule) ( name num -- pat-f rules )
+    dup rule dup "No." = >r 0 swap nth swapd dupd = swapd r> or 
+    [ dup rule [ ] callcc0 add-choice ] when
+    dup number? [ 1+ (lookup-rule) ] [ 2nip ] if ;
+
+: add-bindings ( pat-d pat-f binds -- binds )
+    clone
+    [ over var? over const? or 
+        [ 2drop ] [ rot dup >r set-at r> ] if 
+    ] 2reduce ;
+: init-binds ( pat-d pat-f -- binds ) V{ } clone add-bindings >alist ;
+
+: replace-if-bound ( binds elt -- binds elt' ) 
+    over 2dup key? [ at ] [ drop ] if ;
+: deep-replace ( binds seq -- binds seq' )
+    [ dup var? [ replace-if-bound ] 
+        [ dup array? [ dupd deep-replace nip ] when ] if 
+    ] map ;
+
+: backtrace? ( result -- )
+    dup "No." = [ remove-choice last-choice ] 
+    [ [ last-choice ] unless ] if ;
+
+: resolve-rule ( pat-d pat-f rule-body -- binds )
+    >r 2dup init-binds r> [ deep-replace >quotation call dup backtrace?
+    dup t = [ drop ] when ] each ;
+
+: rule>pattern ( rule -- pattern ) 1 swap nth ;
+: rule>body ( rule -- body ) 2 swap nth ;
+
+: binds>fact ( pat-d pat-f binds -- fact )
+    [ 2dup key? [ at ] [ drop ] if ] curry map good-result? 
+    [ nip ] [ last-choice ] if ;
+
+: lookup-rule ( name pat -- fact )
+    swap 0 (lookup-rule) dup "No." =
+    [ nip ]
+    [ dup rule>pattern swapd check-arity 
+        [ rot rule>body resolve-rule dup -roll binds>fact nip ] [ last-choice ] if
+    ] if ;
+
+: binding-resolve ( binds name pat -- binds )
+    tuck lookup-rule dup backtrace? swap rot add-bindings ;
+
+: is ( binds val var -- binds ) rot [ set-at ] keep ;
diff --git a/extra/prolog/summary.txt b/extra/prolog/summary.txt
new file mode 100644 (file)
index 0000000..48ad1f3
--- /dev/null
@@ -0,0 +1 @@
+Implementation of an embedded prolog for factor
diff --git a/extra/prolog/tags.txt b/extra/prolog/tags.txt
new file mode 100644 (file)
index 0000000..458345b
--- /dev/null
@@ -0,0 +1 @@
+prolog
index f9477feaa3280910e26d91bfe08ea3b9ddfde4cc..8fe2afd2f2e6ff5179b3aa1fae44f5021f7bd15b 100644 (file)
@@ -28,6 +28,6 @@ HELP: LAZY:
 { $values { "word" "a new word to define" } { "definition" "a word definition" } }
 { $description "Creates a lazy word in the current vocabulary. When executed the word will return a " { $link promise } " that when forced, executes the word definition. Any values on the stack that are required by the word definition are captured along with the promise." } 
 { $examples
-  { $example "LAZY: my-add ( a b -- c ) + ;\n1 2 my-add force ." "3" }
+  { $example "IN: promises LAZY: my-add ( a b -- c ) + ;\n1 2 my-add force ." "3" }
 }
 { $see-also force promise-with promise-with2 } ;
diff --git a/extra/random-tester/databank/databank.factor b/extra/random-tester/databank/databank.factor
new file mode 100644 (file)
index 0000000..45ee779
--- /dev/null
@@ -0,0 +1,11 @@
+USING: kernel math.constants ;
+IN: random-tester.databank
+
+: databank ( -- array )
+    {
+        ! V{ } H{ } V{ 3 } { 3 } { } "" "asdf"
+        pi 1/0. -1/0. 0/0. [ ]
+        f t "" 0 0.0 3.14 2 -3 -7 20 3/4 -3/4 1.2/3 3.5
+        C{ 2 2 } C{ 1/0. 1/0. }
+    } ;
+
diff --git a/extra/random-tester/random-tester.factor b/extra/random-tester/random-tester.factor
new file mode 100644 (file)
index 0000000..f8aa0f2
--- /dev/null
@@ -0,0 +1,45 @@
+USING: compiler continuations io kernel math namespaces
+prettyprint quotations random sequences vectors ;
+USING: random-tester.databank random-tester.safe-words ;
+IN: random-tester
+
+SYMBOL: errored
+SYMBOL: before
+SYMBOL: after
+SYMBOL: quot
+TUPLE: random-tester-error ;
+
+: setup-test ( #data #code -- data... quot )
+    #! Variable stack effect
+    >r [ databank random ] times r>
+    [ drop \ safe-words get random ] map >quotation ;
+
+: test-compiler ! ( data... quot -- ... )
+    errored off
+    dup quot set
+    datastack clone >vector dup pop* before set
+    [ call ] catch drop
+    datastack clone after set
+    clear
+    before get [ ] each
+    quot get [ compile-1 ] [ errored on ] recover ;
+
+: do-test ! ( data... quot -- )
+    .s flush test-compiler
+    errored get [
+        datastack after get 2dup = [
+            2drop
+        ] [
+            [ . ] each
+            "--" print
+            [ . ] each
+            quot get .
+            random-tester-error construct-empty throw
+        ] if
+    ] unless clear ;
+
+: random-test1 ( #data #code -- )
+    setup-test do-test ;
+
+: random-test2 ( -- )
+    3 2 setup-test do-test ;
diff --git a/extra/random-tester/random/random.factor b/extra/random-tester/random/random.factor
new file mode 100755 (executable)
index 0000000..163de69
--- /dev/null
@@ -0,0 +1,74 @@
+USING: kernel math sequences namespaces hashtables words
+arrays parser compiler syntax io prettyprint optimizer
+random math.constants math.functions layouts random-tester.utils ;
+IN: random-tester
+
+! Tweak me
+: max-length 15 ; inline
+: max-value 1000000000 ; inline
+
+! varying bit-length random number
+: random-bits ( n -- int )
+    random 2 swap ^ random ;
+
+: random-seq ( -- seq )
+    { [ ] { } V{ } "" } random
+    [ max-length random [ max-value random , ] times ] swap make ;
+
+: random-string
+    [ max-length random [ max-value random , ] times ] "" make ;
+
+: special-integers ( -- seq ) \ special-integers get ;
+[ { -1 0 1 } % most-negative-fixnum , most-positive-fixnum , first-bignum , ] 
+{ } make \ special-integers set-global
+: special-floats ( -- seq ) \ special-floats get ;
+[ { 0.0 -0.0 } % e , pi , 1./0. , -1./0. , 0./0. , epsilon , epsilon neg , ]
+{ } make \ special-floats set-global
+: special-complexes ( -- seq ) \ special-complexes get ;
+[ 
+    { -1 0 1 C{ 0 1 } C{ 0 -1 } } %
+    e , e neg , pi , pi neg ,
+    0 pi rect> , 0 pi neg rect> , pi neg 0 rect> , pi pi rect> ,
+    pi pi neg rect> , pi neg pi rect> , pi neg pi neg rect> ,
+    e neg e neg rect> , e e rect> ,
+] { } make \ special-complexes set-global
+
+: random-fixnum ( -- fixnum )
+    most-positive-fixnum random 1+ 50% [ neg 1- ] when >fixnum ;
+
+: random-bignum ( -- bignum )
+     400 random-bits first-bignum + 50% [ neg ] when ;
+    
+: random-integer ( -- n )
+    50% [
+        random-fixnum
+    ] [
+        50% [ random-bignum ] [ special-integers get random ] if
+    ] if ;
+
+: random-positive-integer ( -- int )
+    random-integer dup 0 < [
+            neg
+        ] [
+            dup 0 = [ 1 + ] when
+    ] if ;
+
+: random-ratio ( -- ratio )
+    1000000000 dup [ random ] 2apply 1+ / 50% [ neg ] when dup [ drop random-ratio ] unless 10% [ drop 0 ] when ;
+
+: random-float ( -- float )
+    50% [ random-ratio ] [ special-floats get random ] if
+    50%
+    [ .0000000000000000001 /f ] [ 50% [ .00000000000000001 * ] when ] if
+    >float ;
+
+: random-number ( -- number )
+    {
+        [ random-integer ]
+        [ random-ratio ]
+        [ random-float ]
+    } do-one ;
+
+: random-complex ( -- C )
+    random-number random-number rect> ;
+
diff --git a/extra/random-tester/safe-words/safe-words.factor b/extra/random-tester/safe-words/safe-words.factor
new file mode 100644 (file)
index 0000000..9bc87a9
--- /dev/null
@@ -0,0 +1,117 @@
+USING: kernel namespaces sequences sorting vocabs ;
+USING: arrays assocs generic hashtables  math math.intervals math.parser math.functions refs shuffle vectors words ;
+IN: random-tester.safe-words
+
+: ?-words
+    {
+        delegate
+
+        /f
+
+        bits>float bits>double
+        float>bits double>bits
+
+        >bignum >boolean >fixnum >float
+
+        array? integer? complex? value-ref? ref? key-ref?
+        interval? number?
+        wrapper? tuple?
+        [-1,1]? between? bignum? both? either? eq? equal? even? fixnum? float? fp-nan? hashtable? interval-contains? interval-subset? interval? key-ref? key? number? odd? pair? power-of-2? ratio? rational? real? subassoc? valid-digits? zero? assoc? curry? vector? callstack? ! clear 3.14 [ <vector> assoc? ] compile-1
+        2^ not
+        ! arrays
+        resize-array <array>
+        ! assocs
+        (assoc-stack)
+        new-assoc
+        assoc-like
+        <hashtable>
+        all-integers? (all-integers?) ! hangs?
+        assoc-push-if
+
+        (clone) assoc-clone-like ! SYMBOL: foo foo dup (clone) =
+    } ;
+
+: bignum-words
+    {
+        next-power-of-2 (next-power-of-2)
+        times
+        hashcode hashcode*
+    } ;
+
+: initialization-words
+    {
+        init-namespaces
+    } ;
+
+: stack-words
+    {
+        dup
+        drop 2drop 3drop
+        roll -roll 2swap
+
+        >r r>
+    } ;
+
+: method-words
+    {
+        method-def
+        forget-word
+    } ;
+
+: stateful-words
+    {
+        counter
+        gensym
+    } ;
+
+: foo-words
+    {
+        set-retainstack
+        retainstack callstack
+        datastack
+        callstack>array
+    } ;
+
+: exit-words
+    {
+        call-clear die
+    } ;
+
+: bad-words ( -- array )
+    [
+        ?-words %
+        bignum-words %
+        initialization-words %
+        stack-words %
+        method-words %
+        stateful-words %
+        exit-words %
+        foo-words %
+    ] { } make ;
+
+: safe-words ( -- array )
+    bad-words {
+        "alists" "arrays" "assocs" ! "bit-arrays" "byte-arrays"
+        ! "classes" "combinators" "compiler" "continuations"
+        ! "core-foundation" "definitions" "documents"
+        ! "float-arrays" "generic" "graphs" "growable"
+        "hashtables"  ! io.*
+        "kernel" "math" 
+        "math.bitfields" "math.complex" "math.constants" "math.floats"
+        "math.functions" "math.integers" "math.intervals" "math.libm"
+        "math.parser" "math.ratios" "math.vectors"
+        ! "namespaces" "quotations" "sbufs"
+        ! "queues" "strings" "sequences"
+        "vectors"
+        ! "words"
+    } [ words ] map concat seq-diff natural-sort ;
+    
+safe-words \ safe-words set-global
+
+! foo dup (clone) = .
+! foo dup clone = .
+! f [ byte-array>bignum assoc-clone-like ] compile-1
+! 2 3.14 [ construct-empty number= ] compile-1
+! 3.14 [ <vector> assoc? ] compile-1
+! -3 [ ] 2 [ byte-array>bignum denominator ] compile-1
+
diff --git a/extra/random-tester/utils/utils.factor b/extra/random-tester/utils/utils.factor
new file mode 100644 (file)
index 0000000..a025bbf
--- /dev/null
@@ -0,0 +1,34 @@
+USING: arrays assocs combinators.lib continuations kernel
+math math.functions memoize namespaces quotations random sequences
+sequences.private shuffle ;
+IN: random-tester.utils
+
+: %chance ( n -- ? )
+    100 random > ;
+
+: 10% ( -- ? ) 10 %chance ;
+: 20% ( -- ? ) 20 %chance ;
+: 30% ( -- ? ) 30 %chance ;
+: 40% ( -- ? ) 40 %chance ;
+: 50% ( -- ? ) 50 %chance ;
+: 60% ( -- ? ) 60 %chance ;
+: 70% ( -- ? ) 70 %chance ;
+: 80% ( -- ? ) 80 %chance ;
+: 90% ( -- ? ) 90 %chance ;
+
+: call-if ( quot ? -- ) swap when ; inline
+
+: with-10% ( quot -- ) 10% call-if ; inline
+: with-20% ( quot -- ) 20% call-if ; inline
+: with-30% ( quot -- ) 30% call-if ; inline
+: with-40% ( quot -- ) 40% call-if ; inline
+: with-50% ( quot -- ) 50% call-if ; inline
+: with-60% ( quot -- ) 60% call-if ; inline
+: with-70% ( quot -- ) 70% call-if ; inline
+: with-80% ( quot -- ) 80% call-if ; inline
+: with-90% ( quot -- ) 90% call-if ; inline
+
+: random-key keys random ;
+: random-value [ random-key ] keep at ;
+
+: do-one ( seq -- ) random call ; inline
index 91263a31d9c2eada216ee874459ac91b18772d37..684fecc6b8e4e515ec201ecff211d5ae137d29b8 100644 (file)
@@ -6,33 +6,29 @@ IN: raptor
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-: run-script ( path -- ) 1array [ fork-exec-args-wait ] curry in-thread ;
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
 [
-    "/etc/cron.daily/apt"             run-script
-    "/etc/cron.daily/aptitude"       run-script
-    "/etc/cron.daily/bsdmainutils"    run-script
-    "/etc/cron.daily/find.notslocate" run-script
-    "/etc/cron.daily/logrotate"              run-script
-    "/etc/cron.daily/man-db"         run-script
-    "/etc/cron.daily/ntp-server"      run-script
-    "/etc/cron.daily/slocate"        run-script
-    "/etc/cron.daily/standard"       run-script
-    "/etc/cron.daily/sysklogd"       run-script
-    "/etc/cron.daily/tetex-bin"              run-script
+    "/etc/cron.daily/apt"             fork-exec-arg
+    "/etc/cron.daily/aptitude"       fork-exec-arg
+    "/etc/cron.daily/bsdmainutils"    fork-exec-arg
+    "/etc/cron.daily/find.notslocate" fork-exec-arg
+    "/etc/cron.daily/logrotate"              fork-exec-arg
+    "/etc/cron.daily/man-db"         fork-exec-arg
+    "/etc/cron.daily/ntp-server"      fork-exec-arg
+    "/etc/cron.daily/slocate"        fork-exec-arg
+    "/etc/cron.daily/standard"       fork-exec-arg
+    "/etc/cron.daily/sysklogd"       fork-exec-arg
+    "/etc/cron.daily/tetex-bin"              fork-exec-arg
 ] cron-jobs-daily set-global
     
 [
-  "/etc/cron.weekly/cvs"                run-script
-  "/etc/cron.weekly/man-db"            run-script
-  "/etc/cron.weekly/ntp-server"                run-script
-  "/etc/cron.weekly/popularity-contest" run-script
-  "/etc/cron.weekly/sysklogd"          run-script
+  "/etc/cron.weekly/cvs"                fork-exec-arg
+  "/etc/cron.weekly/man-db"            fork-exec-arg
+  "/etc/cron.weekly/ntp-server"                fork-exec-arg
+  "/etc/cron.weekly/popularity-contest" fork-exec-arg
+  "/etc/cron.weekly/sysklogd"          fork-exec-arg
 ] cron-jobs-weekly set-global
 
 [
-  "/etc/cron.monthly/scrollkeeper" run-script
-  "/etc/cron.monthly/standard"     run-script
+  "/etc/cron.monthly/scrollkeeper" fork-exec-arg
+  "/etc/cron.monthly/standard"     fork-exec-arg
 ] cron-jobs-monthly set-global
\ No newline at end of file
index ef5359c31315acc4236431748519a3aea22c2353..d776739d89a1ff82f2f1cf94e775fdd4bb977412 100644 (file)
@@ -1,5 +1,5 @@
 
-USING: kernel parser namespaces threads sequences unix unix.process
+USING: kernel parser namespaces threads arrays sequences unix unix.process
        combinators.cleave bake ;
 
 IN: raptor
@@ -24,6 +24,8 @@ SYMBOL: networking-hook
 
 : fork-exec-args-wait ( args -- ) [ first ] [ ] bi fork-exec-wait ;
 
+: fork-exec-arg ( arg -- ) 1array [ fork-exec-args-wait ] curry in-thread ;
+
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 : forever ( quot -- ) [ call ] [ forever ] bi ;
diff --git a/extra/raptor/readme b/extra/raptor/readme
new file mode 100644 (file)
index 0000000..dfb6890
--- /dev/null
@@ -0,0 +1,134 @@
+
+Raptor Linux
+
+*** Introduction ***
+
+Raptor Linux is a mod of Ubuntu 6.06 (Dapper Drake)
+
+This is unlikely to work on another version of Ubuntu, much less
+another Linux distribution.
+
+*** Features ***
+
+  * /sbin/init is replaced with Factor
+  * Virtual terminals managed by Factor
+  * Listeners run on virtual terminals
+  * Native support for static ip networking
+  * Crontab replacement
+
+*** Install ***
+
+  # mkdir -v /etc/raptor
+
+  # cp -v /scratch/factor/extra/raptor/{config,cronjobs}.factor /etc/raptor
+
+  ( scratchpad ) USE: raptor
+  ( scratchpad ) reload-raptor-config
+  ( scratchpad ) save
+
+  # mv -v /sbin/{init,init.orig}
+
+  # cp -v /scratch/factor/factor /sbin/init
+
+  # cp -v /scratch/factor/factor.image /sbin/init.image
+
+*** Filesystems ***
+
+  # emacs /etc/raptor/config.factor
+
+Edit the root-device and swap-devices variables.
+
+*** Static IP networking ***
+
+If you use a static IP in your network then Factor can take care of
+networking.
+
+  # emacs /etc/raptor/config.factor
+
+  (change the settings accordingly)
+
+The udev system has a hook to bring up ethernet interfaces when they
+are detected. Let's remove this hook since we'll be bringing up the
+interface. Actually, we'll move it, not delete it.
+
+  # mv -v /etc/udev/rules.d/85-ifupdown.rules /root
+
+*** DHCP networking ***
+
+If you're using dhcp then we'll fall back on what Ubuntu offers. In
+your config.factor change the line :
+
+     start-networking
+
+to
+
+       "loopback"   start-service
+       "networking" start-service
+
+Add these to your reboot-hook and shutdown-hook :
+
+       "loopback"   stop-service
+       "networking" stop-service
+
+*** Editing the hooks ***
+
+The items in boot-hook correspond to the things in '/etc/rcS.d' and
+'/etc/rc2.d'. Feel free to add and remove items from that hook. For
+example, I removed the printer services. I also removed other things
+that I didn't feel were necessary on my system.
+
+Look for the line with the call to 'set-hostname' and edit it appropriately.
+
+*** Grub ***
+
+Edit your '/boot/grub/menu.lst'. Basically, copy and paste your
+current good entry. My default entry is this:
+
+title           Ubuntu, kernel 2.6.15-28-686
+root            (hd0,0)
+kernel          /boot/vmlinuz-2.6.15-28-686 root=/dev/hda1 ro quiet splash
+initrd          /boot/initrd.img-2.6.15-28-686
+savedefault
+boot
+
+I pasted a copy above it and edited it to look like this:
+
+title           Raptor, kernel 2.6.15-28-686
+root            (hd0,0)
+kernel          /boot/vmlinuz-2.6.15-28-686 root=/dev/hda1 ro quiet -run=ubuntu.dapper.boot
+initrd          /boot/initrd.img-2.6.15-28-686
+savedefault
+boot
+
+* Note that I removed the 'splash' kernel option
+
+* Note the '-run=ubuntu.dapper.boot' option. Unfortunately, this isn't
+  working yet...
+
+*** Boot ***
+
+Reboot or turn on your computer. Eventually, hopefully, you'll be at a
+Factor prompt. Boot your system:
+
+  ( scratchpad ) boot
+
+You'll probably be prompted to select a vocab. Select 'raptor'.
+
+*** Now what ***
+
+The virtual consoles are allocated like so:
+
+  1 - Main listener console
+  2 - listener
+  3 - listener
+  4 - listener
+  5 - getty
+  6 - getty
+
+So you're next step might be to alt-f5, login, and run startx.
+
+*** Join the fun ***
+
+Take a loot at what happens during run levels S and 2. Implement a
+Factor version of something. Let me know about it.
+
diff --git a/extra/raptor/readme-0.1.1 b/extra/raptor/readme-0.1.1
deleted file mode 100644 (file)
index bb5d4c0..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-
-Raptor Linux
-
-*** Introduction ***
-
-Raptor Linux is a mod of Ubuntu 6.06 (Dapper Drake)
-
-This is unlikely to work on another version of Ubuntu, much less
-another Linux distribution.
-
-*** Features ***
-
-  * /sbin/init is replaced with Factor
-  * Virtual terminals managed by Factor
-  * Listeners run on virtual terminals
-  * Native support for static ip networking
-  * Crontab replacement
-
-*** Install ***
-
-  # mkdir -v /etc/raptor
-
-  # cp -v /scratch/factor/extra/raptor/{config,cronjobs}.factor /etc/raptor
-
-  ( scratchpad ) USE: raptor
-  ( scratchpad ) reload-raptor-config
-  ( scratchpad ) save
-
-  # mv -v /sbin/{init,init.orig}
-
-  # cp -v /scratch/factor/factor /sbin/init
-
-  # cp -v /scratch/factor/factor.image /sbin/init.image
-
-*** Static IP networking ***
-
-If you use a static IP in your network then Factor can take care of
-networking.
-
-  # emacs /etc/raptor/config.factor
-
-  (change the settings accordingly)
-
-The udev system has a hook to bring up ethernet interfaces when they
-are detected. Let's remove this hook since we'll be bringing up the
-interface. Actually, we'll move it, not delete it.
-
-  # mv -v /etc/udev/rules.d/85-ifupdown.rules /root
-
-*** DHCP networking ***
-
-If you're using dhcp then we'll fall back on what Ubuntu offers. In
-your config.factor change the line :
-
-     start-networking
-
-to
-
-       "loopback"   start-service
-       "networking" start-service
-
-Add these to your reboot-hook and shutdown-hook :
-
-       "loopback"   stop-service
-       "networking" stop-service
-
-*** Editing the hooks ***
-
-The items in boot-hook correspond to the things in '/etc/rcS.d' and
-'/etc/rc2.d'. Feel free to add and remove items from that hook. For
-example, I removed the printer services. I also removed other things
-that I didn't feel were necessary on my system.
-
-*** Grub ***
-
-Edit your '/boot/grub/menu.lst'. Basically, copy and paste your
-current good entry. My default entry is this:
-
-title           Ubuntu, kernel 2.6.15-28-686
-root            (hd0,0)
-kernel          /boot/vmlinuz-2.6.15-28-686 root=/dev/hda1 ro quiet splash
-initrd          /boot/initrd.img-2.6.15-28-686
-savedefault
-boot
-
-I pasted a copy above it and edited it to look like this:
-
-title           Raptor, kernel 2.6.15-28-686
-root            (hd0,0)
-kernel          /boot/vmlinuz-2.6.15-28-686 root=/dev/hda1 ro quiet -run=ubuntu.dapper.boot
-initrd          /boot/initrd.img-2.6.15-28-686
-savedefault
-boot
-
-* Note that I removed the 'splash' kernel option
-
-* Note the '-run=ubuntu.dapper.boot' option. Unfortunately, this isn't
-  working yet...
-
-*** Boot ***
-
-Reboot or turn on your computer. Eventually, hopefully, you'll be at a
-Factor prompt. Boot your system:
-
-  ( scratchpad ) boot
-
-You'll probably be prompted to select a vocab. Select 'raptor'.
-
-*** Now what ***
-
-The virtual consoles are allocated like so:
-
-  1 - Main listener console
-  2 - listener
-  3 - listener
-  4 - listener
-  5 - getty
-  6 - getty
-
-So you're next step might be to alt-f5, login, and run startx.
-
-*** Join the fun ***
-
-Take a loot at what happens during run levels S and 2. Implement a
-Factor version of something. Let me know about it.
-
old mode 100644 (file)
new mode 100755 (executable)
index 5ebd6dc..823e7c7
-USING: regexp tools.test ;
+USING: regexp tools.test kernel ;
 IN: regexp-tests
 
-[ f ] [ "b" "a*" matches? ] unit-test
-[ t ] [ "" "a*" matches? ] unit-test
-[ t ] [ "a" "a*" matches? ] unit-test
-[ t ] [ "aaaaaaa" "a*" matches? ] unit-test
-[ f ] [ "ab" "a*" matches? ] unit-test
-
-[ t ] [ "abc" "abc" matches? ] unit-test
-[ t ] [ "a" "a|b|c" matches? ] unit-test
-[ t ] [ "b" "a|b|c" matches? ] unit-test
-[ t ] [ "c" "a|b|c" matches? ] unit-test
-[ f ] [ "c" "d|e|f" matches? ] unit-test
-
-[ f ] [ "aa" "a|b|c" matches? ] unit-test
-[ f ] [ "bb" "a|b|c" matches? ] unit-test
-[ f ] [ "cc" "a|b|c" matches? ] unit-test
-[ f ] [ "cc" "d|e|f" matches? ] unit-test
-
-[ f ] [ "" "a+" matches? ] unit-test
-[ t ] [ "a" "a+" matches? ] unit-test
-[ t ] [ "aa" "a+" matches? ] unit-test
-
-[ t ] [ "" "a?" matches? ] unit-test
-[ t ] [ "a" "a?" matches? ] unit-test
-[ f ] [ "aa" "a?" matches? ] unit-test
-
-[ f ] [ "" "." matches? ] unit-test
-[ t ] [ "a" "." matches? ] unit-test
-[ t ] [ "." "." matches? ] unit-test
-[ f ] [ "\n" "." matches? ] unit-test
-
-[ f ] [ "" ".+" matches? ] unit-test
-[ t ] [ "a" ".+" matches? ] unit-test
-[ t ] [ "ab" ".+" matches? ] unit-test
-
-[ t ] [ "" "a|b*|c+|d?" matches? ] unit-test
-[ t ] [ "a" "a|b*|c+|d?" matches? ] unit-test
-[ t ] [ "c" "a|b*|c+|d?" matches? ] unit-test
-[ t ] [ "cc" "a|b*|c+|d?" matches? ] unit-test
-[ f ] [ "ccd" "a|b*|c+|d?" matches? ] unit-test
-[ t ] [ "d" "a|b*|c+|d?" matches? ] unit-test
-
-[ t ] [ "foo" "foo|bar" matches? ] unit-test
-[ t ] [ "bar" "foo|bar" matches? ] unit-test
-[ f ] [ "foobar" "foo|bar" matches? ] unit-test
-
-[ f ] [ "" "(a)" matches? ] unit-test
-[ t ] [ "a" "(a)" matches? ] unit-test
-[ f ] [ "aa" "(a)" matches? ] unit-test
-[ t ] [ "aa" "(a*)" matches? ] unit-test
-
-[ f ] [ "aababaaabbac" "(a|b)+" matches? ] unit-test
-[ t ] [ "ababaaabba" "(a|b)+" matches? ] unit-test
-
-[ f ] [ "" "a{1}" matches? ] unit-test
-[ t ] [ "a" "a{1}" matches? ] unit-test
-[ f ] [ "aa" "a{1}" matches? ] unit-test
-
-[ f ] [ "a" "a{2,}" matches? ] unit-test
-[ t ] [ "aaa" "a{2,}" matches? ] unit-test
-[ t ] [ "aaaa" "a{2,}" matches? ] unit-test
-[ t ] [ "aaaaa" "a{2,}" matches? ] unit-test
-
-[ t ] [ "" "a{,2}" matches? ] unit-test
-[ t ] [ "a" "a{,2}" matches? ] unit-test
-[ t ] [ "aa" "a{,2}" matches? ] unit-test
-[ f ] [ "aaa" "a{,2}" matches? ] unit-test
-[ f ] [ "aaaa" "a{,2}" matches? ] unit-test
-[ f ] [ "aaaaa" "a{,2}" matches? ] unit-test
-
-[ f ] [ "" "a{1,3}" matches? ] unit-test
-[ t ] [ "a" "a{1,3}" matches? ] unit-test
-[ t ] [ "aa" "a{1,3}" matches? ] unit-test
-[ t ] [ "aaa" "a{1,3}" matches? ] unit-test
-[ f ] [ "aaaa" "a{1,3}" matches? ] unit-test
-
-[ f ] [ "" "[a]" matches? ] unit-test
-[ t ] [ "a" "[a]" matches? ] unit-test
-[ t ] [ "a" "[abc]" matches? ] unit-test
-[ f ] [ "b" "[a]" matches? ] unit-test
-[ f ] [ "d" "[abc]" matches? ] unit-test
-[ t ] [ "ab" "[abc]{1,2}" matches? ] unit-test
-[ f ] [ "abc" "[abc]{1,2}" matches? ] unit-test
-
-[ f ] [ "" "[^a]" matches? ] unit-test
-[ f ] [ "a" "[^a]" matches? ] unit-test
-[ f ] [ "a" "[^abc]" matches? ] unit-test
-[ t ] [ "b" "[^a]" matches? ] unit-test
-[ t ] [ "d" "[^abc]" matches? ] unit-test
-[ f ] [ "ab" "[^abc]{1,2}" matches? ] unit-test
-[ f ] [ "abc" "[^abc]{1,2}" matches? ] unit-test
-
-[ t ] [ "]" "[]]" matches? ] unit-test
-[ f ] [ "]" "[^]]" matches? ] unit-test
-
-[ "^" "[^]" matches? ] unit-test-fails
-[ t ] [ "^" "[]^]" matches? ] unit-test
-[ t ] [ "]" "[]^]" matches? ] unit-test
-
-[ t ] [ "[" "[[]" matches? ] unit-test
-[ f ] [ "^" "[^^]" matches? ] unit-test
-[ t ] [ "a" "[^^]" matches? ] unit-test
-
-[ t ] [ "-" "[-]" matches? ] unit-test
-[ f ] [ "a" "[-]" matches? ] unit-test
-[ f ] [ "-" "[^-]" matches? ] unit-test
-[ t ] [ "a" "[^-]" matches? ] unit-test
-
-[ t ] [ "-" "[-a]" matches? ] unit-test
-[ t ] [ "a" "[-a]" matches? ] unit-test
-[ t ] [ "-" "[a-]" matches? ] unit-test
-[ t ] [ "a" "[a-]" matches? ] unit-test
-[ f ] [ "b" "[a-]" matches? ] unit-test
-[ f ] [ "-" "[^-]" matches? ] unit-test
-[ t ] [ "a" "[^-]" matches? ] unit-test
-
-[ f ] [ "-" "[a-c]" matches? ] unit-test
-[ t ] [ "-" "[^a-c]" matches? ] unit-test
-[ t ] [ "b" "[a-c]" matches? ] unit-test
-[ f ] [ "b" "[^a-c]" matches? ] unit-test
-
-[ t ] [ "-" "[a-c-]" matches? ] unit-test
-[ f ] [ "-" "[^a-c-]" matches? ] unit-test
-
-[ t ] [ "\\" "[\\\\]" matches? ] unit-test
-[ f ] [ "a" "[\\\\]" matches? ] unit-test
-[ f ] [ "\\" "[^\\\\]" matches? ] unit-test
-[ t ] [ "a" "[^\\\\]" matches? ] unit-test
-
-[ t ] [ "0" "[\\d]" matches? ] unit-test
-[ f ] [ "a" "[\\d]" matches? ] unit-test
-[ f ] [ "0" "[^\\d]" matches? ] unit-test
-[ t ] [ "a" "[^\\d]" matches? ] unit-test
-
-[ t ] [ "a" "[a-z]{1,}|[A-Z]{2,4}|b*|c|(f|g)*" matches? ] unit-test
-[ t ] [ "a" "[a-z]{1,2}|[A-Z]{3,3}|b*|c|(f|g)*" matches? ] unit-test
-[ t ] [ "a" "[a-z]{1,2}|[A-Z]{3,3}" matches? ] unit-test
-
-[ t ] [ "1000" "\\d{4,6}" matches? ] unit-test
-! [ t ] [ "1000" "[0-9]{4,6}" matches? ] unit-test
-
+[ f ] [ "b" "a*" f <regexp> matches? ] unit-test
+[ t ] [ "" "a*" f <regexp> matches? ] unit-test
+[ t ] [ "a" "a*" f <regexp> matches? ] unit-test
+[ t ] [ "aaaaaaa" "a*" f <regexp> matches? ] unit-test
+[ f ] [ "ab" "a*" f <regexp> matches? ] unit-test
+
+[ t ] [ "abc" "abc" f <regexp> matches? ] unit-test
+[ t ] [ "a" "a|b|c" f <regexp> matches? ] unit-test
+[ t ] [ "b" "a|b|c" f <regexp> matches? ] unit-test
+[ t ] [ "c" "a|b|c" f <regexp> matches? ] unit-test
+[ f ] [ "c" "d|e|f" f <regexp> matches? ] unit-test
+
+[ f ] [ "aa" "a|b|c" f <regexp> matches? ] unit-test
+[ f ] [ "bb" "a|b|c" f <regexp> matches? ] unit-test
+[ f ] [ "cc" "a|b|c" f <regexp> matches? ] unit-test
+[ f ] [ "cc" "d|e|f" f <regexp> matches? ] unit-test
+
+[ f ] [ "" "a+" f <regexp> matches? ] unit-test
+[ t ] [ "a" "a+" f <regexp> matches? ] unit-test
+[ t ] [ "aa" "a+" f <regexp> matches? ] unit-test
+
+[ t ] [ "" "a?" f <regexp> matches? ] unit-test
+[ t ] [ "a" "a?" f <regexp> matches? ] unit-test
+[ f ] [ "aa" "a?" f <regexp> matches? ] unit-test
+
+[ f ] [ "" "." f <regexp> matches? ] unit-test
+[ t ] [ "a" "." f <regexp> matches? ] unit-test
+[ t ] [ "." "." f <regexp> matches? ] unit-test
+! [ f ] [ "\n" "." f <regexp> matches? ] unit-test
+
+[ f ] [ "" ".+" f <regexp> matches? ] unit-test
+[ t ] [ "a" ".+" f <regexp> matches? ] unit-test
+[ t ] [ "ab" ".+" f <regexp> matches? ] unit-test
+
+[ t ] [ "" "a|b*|c+|d?" f <regexp> matches? ] unit-test
+[ t ] [ "a" "a|b*|c+|d?" f <regexp> matches? ] unit-test
+[ t ] [ "c" "a|b*|c+|d?" f <regexp> matches? ] unit-test
+[ t ] [ "cc" "a|b*|c+|d?" f <regexp> matches? ] unit-test
+[ f ] [ "ccd" "a|b*|c+|d?" f <regexp> matches? ] unit-test
+[ t ] [ "d" "a|b*|c+|d?" f <regexp> matches? ] unit-test
+
+[ t ] [ "foo" "foo|bar" f <regexp> matches? ] unit-test
+[ t ] [ "bar" "foo|bar" f <regexp> matches? ] unit-test
+[ f ] [ "foobar" "foo|bar" f <regexp> matches? ] unit-test
+
+[ f ] [ "" "(a)" f <regexp> matches? ] unit-test
+[ t ] [ "a" "(a)" f <regexp> matches? ] unit-test
+[ f ] [ "aa" "(a)" f <regexp> matches? ] unit-test
+[ t ] [ "aa" "(a*)" f <regexp> matches? ] unit-test
+
+[ f ] [ "aababaaabbac" "(a|b)+" f <regexp> matches? ] unit-test
+[ t ] [ "ababaaabba" "(a|b)+" f <regexp> matches? ] unit-test
+
+[ f ] [ "" "a{1}" f <regexp> matches? ] unit-test
+[ t ] [ "a" "a{1}" f <regexp> matches? ] unit-test
+[ f ] [ "aa" "a{1}" f <regexp> matches? ] unit-test
+
+[ f ] [ "a" "a{2,}" f <regexp> matches? ] unit-test
+[ t ] [ "aaa" "a{2,}" f <regexp> matches? ] unit-test
+[ t ] [ "aaaa" "a{2,}" f <regexp> matches? ] unit-test
+[ t ] [ "aaaaa" "a{2,}" f <regexp> matches? ] unit-test
+
+[ t ] [ "" "a{,2}" f <regexp> matches? ] unit-test
+[ t ] [ "a" "a{,2}" f <regexp> matches? ] unit-test
+[ t ] [ "aa" "a{,2}" f <regexp> matches? ] unit-test
+[ f ] [ "aaa" "a{,2}" f <regexp> matches? ] unit-test
+[ f ] [ "aaaa" "a{,2}" f <regexp> matches? ] unit-test
+[ f ] [ "aaaaa" "a{,2}" f <regexp> matches? ] unit-test
+
+[ f ] [ "" "a{1,3}" f <regexp> matches? ] unit-test
+[ t ] [ "a" "a{1,3}" f <regexp> matches? ] unit-test
+[ t ] [ "aa" "a{1,3}" f <regexp> matches? ] unit-test
+[ t ] [ "aaa" "a{1,3}" f <regexp> matches? ] unit-test
+[ f ] [ "aaaa" "a{1,3}" f <regexp> matches? ] unit-test
+
+[ f ] [ "" "[a]" f <regexp> matches? ] unit-test
+[ t ] [ "a" "[a]" f <regexp> matches? ] unit-test
+[ t ] [ "a" "[abc]" f <regexp> matches? ] unit-test
+[ f ] [ "b" "[a]" f <regexp> matches? ] unit-test
+[ f ] [ "d" "[abc]" f <regexp> matches? ] unit-test
+[ t ] [ "ab" "[abc]{1,2}" f <regexp> matches? ] unit-test
+[ f ] [ "abc" "[abc]{1,2}" f <regexp> matches? ] unit-test
+
+[ f ] [ "" "[^a]" f <regexp> matches? ] unit-test
+[ f ] [ "a" "[^a]" f <regexp> matches? ] unit-test
+[ f ] [ "a" "[^abc]" f <regexp> matches? ] unit-test
+[ t ] [ "b" "[^a]" f <regexp> matches? ] unit-test
+[ t ] [ "d" "[^abc]" f <regexp> matches? ] unit-test
+[ f ] [ "ab" "[^abc]{1,2}" f <regexp> matches? ] unit-test
+[ f ] [ "abc" "[^abc]{1,2}" f <regexp> matches? ] unit-test
+
+[ t ] [ "]" "[]]" f <regexp> matches? ] unit-test
+[ f ] [ "]" "[^]]" f <regexp> matches? ] unit-test
+
+! [ "^" "[^]" f <regexp> matches? ] unit-test-fails
+[ t ] [ "^" "[]^]" f <regexp> matches? ] unit-test
+[ t ] [ "]" "[]^]" f <regexp> matches? ] unit-test
+
+[ t ] [ "[" "[[]" f <regexp> matches? ] unit-test
+[ f ] [ "^" "[^^]" f <regexp> matches? ] unit-test
+[ t ] [ "a" "[^^]" f <regexp> matches? ] unit-test
+
+[ t ] [ "-" "[-]" f <regexp> matches? ] unit-test
+[ f ] [ "a" "[-]" f <regexp> matches? ] unit-test
+[ f ] [ "-" "[^-]" f <regexp> matches? ] unit-test
+[ t ] [ "a" "[^-]" f <regexp> matches? ] unit-test
+
+[ t ] [ "-" "[-a]" f <regexp> matches? ] unit-test
+[ t ] [ "a" "[-a]" f <regexp> matches? ] unit-test
+[ t ] [ "-" "[a-]" f <regexp> matches? ] unit-test
+[ t ] [ "a" "[a-]" f <regexp> matches? ] unit-test
+[ f ] [ "b" "[a-]" f <regexp> matches? ] unit-test
+[ f ] [ "-" "[^-]" f <regexp> matches? ] unit-test
+[ t ] [ "a" "[^-]" f <regexp> matches? ] unit-test
+
+[ f ] [ "-" "[a-c]" f <regexp> matches? ] unit-test
+[ t ] [ "-" "[^a-c]" f <regexp> matches? ] unit-test
+[ t ] [ "b" "[a-c]" f <regexp> matches? ] unit-test
+[ f ] [ "b" "[^a-c]" f <regexp> matches? ] unit-test
+
+[ t ] [ "-" "[a-c-]" f <regexp> matches? ] unit-test
+[ f ] [ "-" "[^a-c-]" f <regexp> matches? ] unit-test
+
+[ t ] [ "\\" "[\\\\]" f <regexp> matches? ] unit-test
+[ f ] [ "a" "[\\\\]" f <regexp> matches? ] unit-test
+[ f ] [ "\\" "[^\\\\]" f <regexp> matches? ] unit-test
+[ t ] [ "a" "[^\\\\]" f <regexp> matches? ] unit-test
+
+[ t ] [ "0" "[\\d]" f <regexp> matches? ] unit-test
+[ f ] [ "a" "[\\d]" f <regexp> matches? ] unit-test
+[ f ] [ "0" "[^\\d]" f <regexp> matches? ] unit-test
+[ t ] [ "a" "[^\\d]" f <regexp> matches? ] unit-test
+
+[ t ] [ "a" "[a-z]{1,}|[A-Z]{2,4}|b*|c|(f|g)*" f <regexp> matches? ] unit-test
+[ t ] [ "a" "[a-z]{1,2}|[A-Z]{3,3}|b*|c|(f|g)*" f <regexp> matches? ] unit-test
+[ t ] [ "a" "[a-z]{1,2}|[A-Z]{3,3}" f <regexp> matches? ] unit-test
+
+[ t ] [ "1000" "\\d{4,6}" f <regexp> matches? ] unit-test
+[ t ] [ "1000" "[0-9]{4,6}" f <regexp> matches? ] unit-test
+
+[ t ] [ "abc" "\\p{Lower}{3}" f <regexp> matches? ] unit-test
+[ f ] [ "ABC" "\\p{Lower}{3}" f <regexp> matches? ] unit-test
+[ t ] [ "ABC" "\\p{Upper}{3}" f <regexp> matches? ] unit-test
+[ f ] [ "abc" "\\p{Upper}{3}" f <regexp> matches? ] unit-test
+
+[ f ] [ "abc" "[\\p{Upper}]{3}" f <regexp> matches? ] unit-test
+[ t ] [ "ABC" "[\\p{Upper}]{3}" f <regexp> matches? ] unit-test
+
+[ t ] [ "" "\\Q\\E" f <regexp> matches? ] unit-test
+[ f ] [ "a" "\\Q\\E" f <regexp> matches? ] unit-test
+[ t ] [ "|*+" "\\Q|*+\\E" f <regexp> matches? ] unit-test
+[ f ] [ "abc" "\\Q|*+\\E" f <regexp> matches? ] unit-test
+
+[ t ] [ "S" "\\0123" f <regexp> matches? ] unit-test
+[ t ] [ "SXY" "\\0123XY" f <regexp> matches? ] unit-test
+[ t ] [ "x" "\\x78" f <regexp> matches? ] unit-test
+[ f ] [ "y" "\\x78" f <regexp> matches? ] unit-test
+[ t ] [ "x" "\\u0078" f <regexp> matches? ] unit-test
+[ f ] [ "y" "\\u0078" f <regexp> matches? ] unit-test
+
+[ t ] [ "ab" "a+b" f <regexp> matches? ] unit-test
+[ f ] [ "b" "a+b" f <regexp> matches? ] unit-test
+[ t ] [ "aab" "a+b" f <regexp> matches? ] unit-test
+[ f ] [ "abb" "a+b" f <regexp> matches? ] unit-test
+
+[ t ] [ "abbbb" "ab*" f <regexp> matches? ] unit-test
+[ t ] [ "a" "ab*" f <regexp> matches? ] unit-test
+[ f ] [ "abab" "ab*" f <regexp> matches? ] unit-test
+
+[ f ] [ "x" "\\." f <regexp> matches? ] unit-test
+[ t ] [ "." "\\." f <regexp> matches? ] unit-test
+
+[ t ] [ "aaaab" "a+ab" f <regexp> matches? ] unit-test
+[ f ] [ "aaaxb" "a+ab" f <regexp> matches? ] unit-test
+[ t ] [ "aaacb" "a+cb" f <regexp> matches? ] unit-test
+[ f ] [ "aaaab" "a++ab" f <regexp> matches? ] unit-test
+[ t ] [ "aaacb" "a++cb" f <regexp> matches? ] unit-test
+
+[ 3 ] [ "aaacb" "a*" f <regexp> match-head ] unit-test
+[ 1 ] [ "aaacb" "a+?" f <regexp> match-head ] unit-test
+[ 2 ] [ "aaacb" "aa?" f <regexp> match-head ] unit-test
+[ 1 ] [ "aaacb" "aa??" f <regexp> match-head ] unit-test
+[ 3 ] [ "aacb" "aa?c" f <regexp> match-head ] unit-test
+[ 3 ] [ "aacb" "aa??c" f <regexp> match-head ] unit-test
+
+[ t ] [ "aaa" "AAA" t <regexp> matches? ] unit-test
+[ f ] [ "aax" "AAA" t <regexp> matches? ] unit-test
+[ t ] [ "aaa" "A*" t <regexp> matches? ] unit-test
+[ f ] [ "aaba" "A*" t <regexp> matches? ] unit-test
+[ t ] [ "b" "[AB]" t <regexp> matches? ] unit-test
+[ f ] [ "c" "[AB]" t <regexp> matches? ] unit-test
+[ t ] [ "c" "[A-Z]" t <regexp> matches? ] unit-test
+[ f ] [ "3" "[A-Z]" t <regexp> matches? ] unit-test
+
+[ ] [ 
+    "(0[lL]?|[1-9]\\d{0,9}(\\d{0,9}[lL])?|0[xX]\\p{XDigit}{1,8}(\\p{XDigit}{0,8}[lL])?|0[0-7]{1,11}([0-7]{0,11}[lL])?|([0-9]+\\.[0-9]*|\\.[0-9]+)([eE][+-]?[0-9]+)?[fFdD]?|[0-9]+([eE][+-]?[0-9]+[fFdD]?|([eE][+-]?[0-9]+)?[fFdD]))"
+    f <regexp> drop
+] unit-test
+
+[ t ] [ "fxxbar" "(?!foo).{3}bar" f <regexp> matches? ] unit-test
+[ f ] [ "foobar" "(?!foo).{3}bar" f <regexp> matches? ] unit-test
+
+[ 3 ] [ "foobar" "foo(?=bar)" f <regexp> match-head ] unit-test
+[ f ] [ "foobxr" "foo(?=bar)" f <regexp> match-head ] unit-test
+
+[ f ] [ "foobxr" "foo\\z" f <regexp> match-head ] unit-test
+[ 3 ] [ "foo" "foo\\z" f <regexp> match-head ] unit-test
+
+[ 3 ] [ "foo bar" "foo\\b" f <regexp> match-head ] unit-test
+[ f ] [ "fooxbar" "foo\\b" f <regexp> matches? ] unit-test
+[ t ] [ "foo" "foo\\b" f <regexp> matches? ] unit-test
+[ t ] [ "foo bar" "foo\\b bar" f <regexp> matches? ] unit-test
+[ f ] [ "fooxbar" "foo\\bxbar" f <regexp> matches? ] unit-test
+[ f ] [ "foo" "foo\\bbar" f <regexp> matches? ] unit-test
+
+[ f ] [ "foo bar" "foo\\B" f <regexp> matches? ] unit-test
+[ 3 ] [ "fooxbar" "foo\\B" f <regexp> match-head ] unit-test
+[ t ] [ "foo" "foo\\B" f <regexp> matches? ] unit-test
+[ f ] [ "foo bar" "foo\\B bar" f <regexp> matches? ] unit-test
+[ t ] [ "fooxbar" "foo\\Bxbar" f <regexp> matches? ] unit-test
+[ f ] [ "foo" "foo\\Bbar" f <regexp> matches? ] unit-test
old mode 100644 (file)
new mode 100755 (executable)
index 8fdc1be..c4b60e7
 USING: arrays combinators kernel lazy-lists math math.parser
 namespaces parser parser-combinators parser-combinators.simple
-promises quotations sequences sequences.lib strings ;
-USING: continuations io prettyprint ;
+promises quotations sequences combinators.lib strings
+assocs prettyprint.backend memoize ;
+USE: io
 IN: regexp
 
-: 'any-char'
-    "." token [ drop any-char-parser ] <@ ;
+<PRIVATE
+
+SYMBOL: ignore-case?
+
+: char=-quot ( ch -- quot )
+    ignore-case? get
+    [ ch>upper [ swap ch>upper = ] ] [ [ = ] ] if
+    curry ;
+
+: char-between?-quot ( ch1 ch2 -- quot )
+    ignore-case? get
+    [ [ ch>upper ] 2apply [ >r >r ch>upper r> r> between? ] ]
+    [ [ between? ] ]
+    if 2curry ;
+
+: or-predicates ( quots -- quot )
+    [ \ dup add* ] map [ [ t ] ] f short-circuit \ nip add ;
+
+: <@literal [ nip ] curry <@ ;
+
+: <@delay [ curry ] curry <@ ;
+
+PRIVATE>
 
-: escaped-char
+: ascii? ( n -- ? ) 
+    0 HEX: 7f between? ;
+
+: octal-digit? ( n -- ? )
+    CHAR: 0 CHAR: 7 between? ;
+
+: decimal-digit? ( n -- ? )
+    CHAR: 0 CHAR: 9 between? ;
+
+: hex-digit? ( n -- ? )
+    dup decimal-digit?
+    over CHAR: a CHAR: f between? or
+    swap CHAR: A CHAR: F between? or ;
+
+: control-char? ( n -- ? )
+    dup 0 HEX: 1f between?
+    swap HEX: 7f = or ;
+
+: punct? ( n -- ? )
+    "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~" member? ;
+
+: c-identifier-char? ( ch -- ? )
+    dup alpha? swap CHAR: _ = or ;
+
+: java-blank? ( n -- ? )
     {
-        { CHAR: d [ [ digit? ] ] }
-        { CHAR: D [ [ digit? not ] ] }
-        { CHAR: s [ [ blank? ] ] }
-        { CHAR: S [ [ blank? not ] ] }
-        { CHAR: \\ [ [ CHAR: \\ = ] ] }
-        [ "bad \\, use \\\\ to match a literal \\" throw ]
-    } case ;
+        CHAR: \s
+        CHAR: \t CHAR: \n CHAR: \r
+        HEX: c HEX: 7 HEX: 1b
+    } member? ;
 
-: 'escaped-char'
-    "\\" token any-char-parser &> [ escaped-char ] <@ ;
+: java-printable? ( n -- ? )
+    dup alpha? swap punct? or ;
 
-! Must escape to use as literals
-! : meta-chars "[\\^$.|?*+()" ;
+: 'ordinary-char' ( -- parser )
+    [ "\\^*+?|(){}[$" member? not ] satisfy
+    [ char=-quot ] <@ ;
 
-: 'ordinary-char'
-    [ "\\^*+?|(){}[" member? not ] satisfy ;
+: 'octal-digit' ( -- parser ) [ octal-digit? ] satisfy ;
 
-: 'char' 'escaped-char' 'ordinary-char' <|> ;
+: 'octal' ( -- parser )
+    "0" token 'octal-digit' 1 3 from-m-to-n &>
+    [ oct> ] <@ ;
 
-: 'string'
-    'char' <+> [
-        [ dup quotation? [ satisfy ] [ 1token ] if ] [ <&> ] map-reduce
-    ] <@ ;
+: 'hex-digit' ( -- parser ) [ hex-digit? ] satisfy ;
 
-: exactly-n ( parser n -- parser' )
-    swap <repetition> and-parser construct-boa ;
+: 'hex' ( -- parser )
+    "x" token 'hex-digit' 2 exactly-n &>
+    "u" token 'hex-digit' 4 exactly-n &> <|>
+    [ hex> ] <@ ;
 
-: at-most-n ( parser n -- parser' )
-    dup zero? [
-        2drop epsilon
-    ] [
-        2dup exactly-n
-        -rot 1- at-most-n <|>
-    ] if ;
+: satisfy-tokens ( assoc -- parser )
+    [ >r token r> <@literal ] { } assoc>map <or-parser> ;
 
-: at-least-n ( parser n -- parser' )
-    dupd exactly-n swap <*> <&> ;
+: 'simple-escape-char' ( -- parser )
+    {
+        { "\\" CHAR: \\ }
+        { "t"  CHAR: \t }
+        { "n"  CHAR: \n }
+        { "r"  CHAR: \r }
+        { "f"  HEX: c   }
+        { "a"  HEX: 7   }
+        { "e"  HEX: 1b  }
+    } [ char=-quot ] assoc-map satisfy-tokens ;
+
+: 'predefined-char-class' ( -- parser )
+    {
+        { "d" [ digit? ] }
+        { "D" [ digit? not ] }
+        { "s" [ java-blank? ] }
+        { "S" [ java-blank? not ] }
+        { "w" [ c-identifier-char? ] }
+        { "W" [ c-identifier-char? not ] }
+    } satisfy-tokens ;
+
+: 'posix-character-class' ( -- parser )
+    {
+        { "Lower" [ letter? ] }
+        { "Upper" [ LETTER? ] }
+        { "ASCII" [ ascii? ] }
+        { "Alpha" [ Letter? ] }
+        { "Digit" [ digit? ] }
+        { "Alnum" [ alpha? ] }
+        { "Punct" [ punct? ] }
+        { "Graph" [ java-printable? ] }
+        { "Print" [ java-printable? ] }
+        { "Blank" [ " \t" member? ] }
+        { "Cntrl" [ control-char? ] }
+        { "XDigit" [ hex-digit? ] }
+        { "Space" [ java-blank? ] }
+    } satisfy-tokens "p{" "}" surrounded-by ;
+
+: 'simple-escape' ( -- parser )
+    'octal'
+    'hex' <|>
+    "c" token [ LETTER? ] satisfy &> <|>
+    any-char-parser <|>
+    [ char=-quot ] <@ ;
 
-: from-m-to-n ( parser m n -- parser' )
-    >r [ exactly-n ] 2keep r> swap - at-most-n <&> ;
+: 'escape' ( -- parser )
+    "\\" token
+    'simple-escape-char'
+    'predefined-char-class' <|>
+    'posix-character-class' <|>
+    'simple-escape' <|> &> ;
+
+: 'any-char'
+    "." token [ drop t ] <@literal ;
+
+: 'char'
+    'any-char' 'escape' 'ordinary-char' <|> <|> [ satisfy ] <@ ;
 
 DEFER: 'regexp'
 
@@ -56,95 +147,184 @@ TUPLE: group-result str ;
 
 C: <group-result> group-result
 
-: 'grouping'
-    "(" token
-    'regexp' [ [ <group-result> ] <@ ] <@
-    ")" token <& &> ;
-
-! Special cases: ]\\^-
-: predicates>cond ( seq -- quot )
-    #! Takes an array of quotation predicates/objects and makes a cond
-    #! Makes a predicate of each obj like so:  [ dup obj = ]
-    #! Leaves quotations alone
-    #! The cond returns a boolean, t if one of the predicates matches
-    [
-        dup callable? [ [ = ] curry ] unless
-        [ dup ] swap compose [ drop t ] 2array
-    ] map { [ t ] [ drop f ] } add [ cond ] curry ;
+: 'non-capturing-group' ( -- parser )
+    "?:" token 'regexp' &> ;
+
+: 'positive-lookahead-group' ( -- parser )
+    "?=" token 'regexp' &> [ ensure ] <@ ;
+
+: 'negative-lookahead-group' ( -- parser )
+    "?!" token 'regexp' &> [ ensure-not ] <@ ;
 
-: 'range'
+: 'simple-group' ( -- parser )
+    'regexp' [ [ <group-result> ] <@ ] <@ ;
+
+: 'group' ( -- parser )
+    'non-capturing-group'
+    'positive-lookahead-group'
+    'negative-lookahead-group'
+    'simple-group' <|> <|> <|>
+    "(" ")" surrounded-by ;
+
+: 'range' ( -- parser )
     any-char-parser "-" token <& any-char-parser <&>
-    [ first2 [ between? ] 2curry ] <@ ;
-
-: 'character-class-contents'
-    'escaped-char'
-    'range' <|>
-    [ "\\]" member? not ] satisfy <|> ;
-
-: 'character-class'
-    "[" token
-    "^" token 'character-class-contents' <+> <&:>
-        [ predicates>cond [ not ] compose satisfy ] <@
-    "]" token [ first ] <@ 'character-class-contents' <*> <&:>
-        [ predicates>cond satisfy ] <@ <|>
-    'character-class-contents' <+> [ predicates>cond satisfy ] <@ <|>
-    &>
-    "]" token <& ;
-
-: 'term'
-    'any-char'
-    'string' <|>
-    'grouping' <|>
+    [ first2 char-between?-quot ] <@ ;
+
+: 'character-class-term' ( -- parser )
+    'range'
+    'escape' <|>
+    [ "\\]" member? not ] satisfy [ char=-quot ] <@ <|> ;
+
+: 'positive-character-class' ( -- parser )
+    "]" token [ CHAR: ] = ] <@literal 'character-class-term' <*> <&:>
+    'character-class-term' <+> <|>
+    [ or-predicates ] <@ ;
+
+: 'negative-character-class' ( -- parser )
+    "^" token 'positive-character-class' &>
+    [ [ not ] append ] <@ ;
+
+: 'character-class' ( -- parser )
+    'negative-character-class' 'positive-character-class' <|>
+    "[" "]" surrounded-by [ satisfy ] <@ ;
+
+: 'escaped-seq' ( -- parser )
+    any-char-parser <*>
+    [ ignore-case? get <token-parser> ] <@
+    "\\Q" "\\E" surrounded-by ;
+
+: 'break' ( quot -- parser )
+    satisfy ensure epsilon just <|> ;
+
+: 'break-escape' ( -- parser )
+    "$" token [ "\r\n" member? ] 'break' <@literal
+    "\\b" token [ blank? ] 'break' <@literal <|>
+    "\\B" token [ blank? not ] 'break' <@literal <|>
+    "\\z" token epsilon just <@literal <|> ;
+
+: 'simple' ( -- parser )
+    'escaped-seq'
+    'break-escape' <|>
+    'group' <|>
     'character-class' <|>
-    <+> [
-        dup length 1 =
-        [ first ] [ and-parser construct-boa ] if
-    ] <@ ;
-
-: 'interval'
-    'term' "{" token <& 'integer' <&> "}" token <& [ first2 exactly-n ] <@
-    'term' "{" token <& 'integer' <&> "," token <& "}" token <&
-        [ first2 at-least-n ] <@ <|>
-    'term' "{" token <& "," token <& 'integer' <&> "}" token <&
-        [ first2 at-most-n ] <@ <|>
-    'term' "{" token <& 'integer' <&> "," token <& 'integer' <:&> "}" token <&
-        [ first3 from-m-to-n ] <@ <|> ;
-
-: 'repetition'
-    'term'
-    [ "*+?" member? ] satisfy <&> [
-        first2 {
-            { CHAR: * [ <*> ] }
-            { CHAR: + [ <+> ] }
-            { CHAR: ? [ <?> ] }
-        } case
-    ] <@ ;
-
-: 'simple' 'term' 'repetition' <|> 'interval' <|> ;
-
-LAZY: 'union' ( -- parser )
+    'char' <|> ;
+
+: 'exactly-n' ( -- parser )
+    'integer' [ exactly-n ] <@delay ;
+
+: 'at-least-n' ( -- parser )
+    'integer' "," token <& [ at-least-n ] <@delay ;
+
+: 'at-most-n' ( -- parser )
+    "," token 'integer' &> [ at-most-n ] <@delay ;
+
+: 'from-m-to-n' ( -- parser )
+    'integer' "," token <& 'integer' <&> [ first2 from-m-to-n ] <@delay ;
+
+: 'greedy-interval' ( -- parser )
+    'exactly-n' 'at-least-n' <|> 'at-most-n' <|> 'from-m-to-n' <|> ;
+
+: 'interval' ( -- parser )
+    'greedy-interval'
+    'greedy-interval' "?" token <& [ "reluctant {}" print ] <@ <|>
+    'greedy-interval' "+" token <& [ "possessive {}" print ] <@ <|>
+    "{" "}" surrounded-by ;
+
+: 'repetition' ( -- parser )
+    ! Posessive
+    "*+" token [ <!*> ] <@literal
+    "++" token [ <!+> ] <@literal <|>
+    "?+" token [ <!?> ] <@literal <|>
+    ! Reluctant
+    "*?" token [ <(*)> ] <@literal <|>
+    "+?" token [ <(+)> ] <@literal <|>
+    "??" token [ <(?)> ] <@literal <|>
+    ! Greedy
+    "*" token [ <*> ] <@literal <|>
+    "+" token [ <+> ] <@literal <|>
+    "?" token [ <?> ] <@literal <|> ;
+
+: 'dummy' ( -- parser )
+    epsilon [ ] <@literal ;
+
+MEMO: 'term' ( -- parser )
     'simple'
-    'simple' "|" token 'union' &> <&> [ first2 <|> ] <@
-    <|> ;
+    'repetition' 'interval' 'dummy' <|> <|> <&> [ first2 call ] <@
+    <!+> [ <and-parser> ] <@ ;
 
 LAZY: 'regexp' ( -- parser )
-    'repetition' 'union' <|> ;
+    'term' "|" token nonempty-list-of [ <or-parser> ] <@ ;
+!    "^" token 'term' "|" token nonempty-list-of [ <or-parser> ] <@
+!        &> [ "caret" print ] <@ <|>
+!    'term' "|" token nonempty-list-of [ <or-parser> ] <@
+!        "$" token <& [ "dollar" print ] <@ <|>
+!    "^" token 'term' "|" token nonempty-list-of [ <or-parser> ] <@ &>
+!        "$" token [ "caret dollar" print ] <@ <& <|> ;
+
+TUPLE: regexp source parser ignore-case? ;
+
+: <regexp> ( string ignore-case? -- regexp )
+    [
+        ignore-case? [
+            dup 'regexp' just parse-1
+        ] with-variable
+    ] keep regexp construct-boa ;
 
-: <regexp> 'regexp' just parse-1 ;
+: do-ignore-case ( string regexp -- string regexp )
+    dup regexp-ignore-case? [ >r >upper r> ] when ;
 
-GENERIC: >regexp ( obj -- parser )
-M: string >regexp 'regexp' just parse-1 ;
-M: object >regexp ;
+: matches? ( string regexp -- ? )
+    do-ignore-case regexp-parser just parse nil? not ;
 
-: matches? ( string regexp -- ? ) >regexp just parse nil? not ;
+: match-head ( string regexp -- end )
+    do-ignore-case regexp-parser parse dup nil?
+    [ drop f ] [ car parse-result-unparsed slice-from ] if ;
+
+! Literal syntax for regexps
+: parse-options ( string -- ? )
+    #! Lame
+    {
+        { "" [ f ] }
+        { "i" [ t ] }
+    } case ;
 
 : parse-regexp ( accum end -- accum )
     lexer get dup skip-blank [
         [ index* dup 1+ swap ] 2keep swapd subseq swap
-    ] change-column  <regexp> parsed ;
+    ] change-column
+    lexer get (parse-token) parse-options <regexp> parsed ;
 
-: R/ CHAR: / parse-regexp ; parsing
-: R| CHAR: | parse-regexp ; parsing
+: R! CHAR: ! parse-regexp ; parsing
 : R" CHAR: " parse-regexp ; parsing
+: R# CHAR: # parse-regexp ; parsing
 : R' CHAR: ' parse-regexp ; parsing
+: R( CHAR: ) parse-regexp ; parsing
+: R/ CHAR: / parse-regexp ; parsing
+: R@ CHAR: @ parse-regexp ; parsing
+: R[ CHAR: ] parse-regexp ; parsing
 : R` CHAR: ` parse-regexp ; parsing
+: R{ CHAR: } parse-regexp ; parsing
+: R| CHAR: | parse-regexp ; parsing
+
+: find-regexp-syntax ( string -- prefix suffix )
+    {
+        { "R/ "  "/"  }
+        { "R! "  "!"  }
+        { "R\" " "\"" }
+        { "R# "  "#"  }
+        { "R' "  "'"  }
+        { "R( "  ")"  }
+        { "R@ "  "@"  }
+        { "R[ "  "]"  }
+        { "R` "  "`"  }
+        { "R{ "  "}"  }
+        { "R| "  "|"  }
+    } swap [ subseq? not nip ] curry assoc-find drop ;
+
+M: regexp pprint*
+    [
+        dup regexp-source
+        dup find-regexp-syntax swap % swap % %
+        dup regexp-ignore-case? [ "i" % ] when
+    ] "" make
+    swap present-text ;
diff --git a/extra/rss/reader/reader.factor b/extra/rss/reader/reader.factor
deleted file mode 100644 (file)
index 205b51b..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-! Copyright (C) 2006 Chris Double.
-! See http://factorcode.org/license.txt for BSD license.
-!
-! Create a test database like follows:
-!
-!   sqlite3 history.db
-!   > create table rss (url text, title text, link text, primary key (url));
-!   > create table entries (url text, link text, title text, description text, pubdate text, primary key(url, link));
-!   > [eof]
-!
-IN: rss.reader
-USING: kernel html namespaces sequences io quotations
-assocs sqlite.tuple-db sqlite io.files html.elements
-rss webapps.continuation ;
-   
-TUPLE: reader-feed url title link ;
-
-C: <reader-feed> reader-feed
-
-TUPLE: reader-entry url link title description pubdate ;
-
-C: <reader-entry> reader-entry
-
-reader-feed default-mapping set-mapping
-reader-entry default-mapping set-mapping
-
-: init-db ( -- )
-  db get-global [ sqlite-close ] when*
-  "rss-reader.db" exists? [
-    "rss-reader.db" sqlite-open db set-global
-  ] [
-    "rss-reader.db" sqlite-open dup db set-global
-    dup reader-feed create-tuple-table
-    reader-entry create-tuple-table
-  ] if ;
-
-: add-feed ( url -- )
-  "" "" <reader-feed> db get swap insert-tuple ;
-
-: remove-feed ( url -- )
-  f f <reader-feed> db get swap find-tuples [ db get swap delete-tuple ] each ;
-
-: all-urls ( -- urls )
-  f f f <reader-feed> db get swap find-tuples [ reader-feed-url ] map ;
-
-: ask-for-url ( -- url )
-  [
-    <html>
-      <head> <title> "Enter a Feed URL" write </title> </head>
-      <body>
-        <form =action "post" =method form>
-          "URL: " write
-          <input "text" =type "url" =name "100" =size input/>
-          <input "submit" =type input/>
-        </form>
-      </body>
-    </html>
-  ] show "url" swap at ;
-
-: get-entries ( url -- entries )
-  f f f f <reader-entry> db get swap find-tuples ;
-  
-: display-entries ( url -- )
-  [
-    <html> 
-      <head> <title> "View entries for " write over write </title> </head>
-      <body>
-        swap get-entries [
-         <h2> dup reader-entry-title write </h2>
-         <p>
-           reader-entry-description write
-         </p>        
-        ] each        
-        <p> <a =href a> "Back" write </a> </p>
-      </body>
-    </html>
-  ] show 2drop ;
-
-: rss>reader-feed ( url rss -- reader-feed )
-  [ feed-title ] keep feed-link <reader-feed> ;   
-
-: rss-entry>reader-entry ( url entry -- reader-entry )
-  [ entry-link ] keep
-  [ entry-title ] keep
-  [ entry-description ] keep
-  entry-pub-date 
-  <reader-entry> ;
-
-: update-feed-database ( url -- )
-  dup remove-feed
-  dup news-get 
-  2dup rss>reader-feed db get swap save-tuple
-  feed-entries [
-    dupd rss-entry>reader-entry
-    dup >r reader-entry-link f f f <reader-entry> db get swap find-tuples [ db get swap delete-tuple ] each r>
-    db get swap save-tuple
-  ] curry* each ;
-
-: update-feeds ( seq -- )
-  [ update-feed-database ] each
-  [
-    <html>
-      <head> <title> "Feeds Updated" write </title> </head>
-      <body>
-        <p> "Feeds Updated." write </p>
-        <p> <a =href a> "Back" write </a> </p>
-      </body>
-    </html>          
-  ] show drop ;
-  
-: maintain-feeds ( -- )
-  [
-    <html>
-      <head> <title> "Maintain Feeds" write </title> </head>
-      <body>
-       <p>
-          <table "1" =border table>
-            all-urls [
-              <tr> 
-                <td> dup write </td>
-                <td> dup [ remove-feed ] curry "Remove" swap quot-href </td>
-                <td> [ display-entries ] curry "Database" swap quot-href </td>
-              </tr>
-            ] each
-          </table>
-        </p>
-        <p> "Add Feed" [ ask-for-url add-feed ] quot-href </p>
-        <p> "Update Feeds" [ all-urls update-feeds ] quot-href </p>
-      </body>
-    </html>
-  ] show-final ;
-
-"maintain-feeds" [ init-db maintain-feeds ] install-cont-responder
index d34a9855180e9746f280e1d5e53486c77e736ea5..233dfcb221a05fd09df89c4a21c648e336ac7e87 100644 (file)
@@ -9,6 +9,9 @@ USING: xml.utilities kernel assocs xml.generator
 : ?children>string ( tag/f -- string/f )
     [ children>string ] [ f ] if* ;
 
+: any-tag-named ( tag names -- tag-inside )
+    f -rot [ tag-named nip dup ] curry* find 2drop ;
+
 TUPLE: feed title link entries ;
 
 C: <feed> feed
@@ -17,50 +20,51 @@ TUPLE: entry title link description pub-date ;
 
 C: <entry> entry
 
+: rss1.0-entry ( tag -- entry )
+    [ "title" tag-named children>string ] keep   
+    [ "link" tag-named children>string ] keep
+    [ "description" tag-named children>string ] keep
+    f "date" "http://purl.org/dc/elements/1.1/" <name>
+    tag-named ?children>string
+    <entry> ;
+
 : rss1.0 ( xml -- feed )
     [
         "channel" tag-named
         [ "title" tag-named children>string ] keep
         "link" tag-named children>string
     ] keep
-    "item" tags-named [
-        [ "title" tag-named children>string ] keep   
-        [ "link" tag-named children>string ] keep
-        [ "description" tag-named children>string ] keep
-        f "date" "http://purl.org/dc/elements/1.1/" <name>
-        tag-named ?children>string
-        <entry>
-    ] map <feed> ;
+    "item" tags-named [ rss1.0-entry ] map <feed> ;
+
+: rss2.0-entry ( tag -- entry )
+    [ "title" tag-named children>string ] keep
+    [ "link" tag-named ] keep
+    [ "guid" tag-named dupd ? children>string ] keep
+    [ "description" tag-named children>string ] keep
+    "pubDate" tag-named children>string <entry> ;
 
 : rss2.0 ( xml -- feed )
     "channel" tag-named 
     [ "title" tag-named children>string ] keep
     [ "link" tag-named children>string ] keep
-    "item" tags-named [
-        [ "title" tag-named children>string ] keep
-        [ "link" tag-named ] keep
-        [ "guid" tag-named dupd ? children>string ] keep
-        [ "description" tag-named children>string ] keep
-        "pubDate" tag-named children>string <entry>
-    ] map <feed> ;
+    "item" tags-named [ rss2.0-entry ] map <feed> ;
+
+: atom1.0-entry ( tag -- entry )
+    [ "title" tag-named children>string ] keep
+    [ "link" tag-named "href" swap at ] keep
+    [
+        { "content" "summary" } any-tag-named
+        dup tag-children [ string? not ] contains?
+        [ tag-children [ write-chunk ] string-out ]
+        [ children>string ] if
+    ] keep
+    { "published" "updated" "issued" "modified" } any-tag-named
+    children>string <entry> ;
 
 : atom1.0 ( xml -- feed )
     [ "title" tag-named children>string ] keep
     [ "link" tag-named "href" swap at ] keep
-    "entry" tags-named [
-        [ "title" tag-named children>string ] keep
-        [ "link" tag-named "href" swap at ] keep
-        [
-            dup "content" tag-named
-            [ nip ] [ "summary" tag-named ] if*
-            dup tag-children [ tag? ] contains?
-            [ tag-children [ write-chunk ] string-out ]
-            [ children>string ] if
-        ] keep
-        dup "published" tag-named
-        [ nip ] [ "updated" tag-named ] if*
-        children>string <entry>
-    ] map <feed> ;
+    "entry" tags-named [ atom1.0-entry ] map <feed> ;
 
 : xml>feed ( xml -- feed )
     dup name-tag {
@@ -98,5 +102,5 @@ C: <entry> entry
         ]
     XML> ;
 
-: write-feed ( feed -- xml )
+: write-feed ( feed -- )
     feed>xml write-xml ;
index c170a0d20ae3743a099620f5fb863a4030ee3ebf..72cf9ad9c4c4444c44c1b96adea4cd3e62d8f1a7 100644 (file)
@@ -1,5 +1,5 @@
 USING: arrays kernel sequences sequences.lib math
-math.functions tools.test ;
+math.functions tools.test strings ;
 
 [ 4 ] [ { 1 2 } [ sq ] [ * ] map-reduce ] unit-test
 [ 36 ] [ { 2 3 } [ sq ] [ * ] map-reduce ] unit-test
@@ -39,3 +39,10 @@ math.functions tools.test ;
 
 [ 2 ] [ V{ 10 20 30 } [ delete-random drop ] keep length ] unit-test
 [ V{ } [ delete-random drop ] keep length ] unit-test-fails
+
+[ { 1 9 25 } ] [ { 1 3 5 6 } [ sq ] [ even? ] map-until ] unit-test
+[ { 2 4 } ] [ { 2 4 1 3 } [ even? ] take-while ] unit-test
+
+[ { { 0 0 } { 1 0 } { 0 1 } { 1 1 } } ] [ 2 2 exact-strings ] unit-test
+[ t ] [ "ab" 4 strings [ >string ] map "abab" swap member? ] unit-test
+[ { { } { 1 } { 2 } { 1 2 } } ] [ { 1 2 } power-set ] unit-test
index 2f98e274670cc49c8774e37e508c7b4a5f6d1e4f..ea6fdd141b24136ff6483d90d6061d13edf2954a 100644 (file)
@@ -1,5 +1,6 @@
-USING: combinators.lib kernel sequences math namespaces
-random sequences.private shuffle ;
+USING: combinators.lib kernel sequences math namespaces assocs 
+random sequences.private shuffle math.functions mirrors ;
+USING: arrays math.parser sorting strings ;
 IN: sequences.lib
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -66,3 +67,62 @@ IN: sequences.lib
 : split-around ( seq quot -- before elem after )
     dupd find over [ "Element not found" throw ] unless
     >r cut-slice 1 tail r> swap ; inline
+
+: (map-until) ( quot pred -- quot )
+    [ dup ] swap 3compose
+    [ [ drop t ] [ , f ] if ] compose [ find 2drop ] curry ;
+
+: map-until ( seq quot pred -- newseq )
+    (map-until) { } make ;
+
+: take-while ( seq quot -- newseq )
+    [ not ] compose
+    [ find drop [ head-slice ] when* ] curry
+    [ dup ] swap compose keep like ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+<PRIVATE
+: translate-string ( n alphabet out-len -- seq )
+    [ drop /mod ] curry* map nip  ;
+
+: map-alphabet ( alphabet seq[seq] -- seq[seq] )
+    [ [ swap nth ] curry* map ] curry* map ;
+
+: exact-number-strings ( n out-len -- seqs )
+    [ ^ ] 2keep [ translate-string ] 2curry map ;
+
+: number-strings ( n max-length -- seqs )
+    1+ [ exact-number-strings ] curry* map concat ;
+PRIVATE>
+
+: exact-strings ( alphabet length -- seqs )
+    >r dup length r> exact-number-strings map-alphabet ;
+
+: strings ( alphabet length -- seqs )
+    >r dup length r> number-strings map-alphabet ;
+
+: nths ( nths seq -- subseq )
+    ! nths is a sequence of ones and zeroes
+    >r [ length ] keep [ nth 1 = ] curry subset r>
+    [ nth ] curry { } map-as ;
+
+: power-set ( seq -- subsets )
+    2 over length exact-number-strings swap [ nths ] curry map ;
+
+: cut-find ( seq pred -- before after )
+    dupd find drop dup [ cut ] when ;
+
+: cut3 ( seq pred -- first mid last )
+    [ cut-find ] keep [ not ] compose cut-find ;
+
+: (cut-all) ( seq pred quot -- )
+    [ >r cut3 r> dip >r >r , r> [ , ] when* r> ] 2keep
+    pick [ (cut-all) ] [ 3drop ] if ;
+
+: cut-all ( seq pred quot -- first mid last )
+    [ (cut-all) ] { } make ;
+
+: human-sort ( seq -- newseq )
+    [ dup [ digit? ] [ string>number ] cut-all ] { } map>assoc
+    sort-values keys ;
index fd257c98797989711f9f785ac91bf17597b1c497..5f21b02ae73049785922c5fd98b5d5e993b8b575 100644 (file)
@@ -8,7 +8,7 @@ HELP: (serialize)
 }
 { $description "Serializes the object to the current output stream. Object references within the structure being serialized are maintained. It must be called from within the scope of a " { $link with-serialized } " call." } 
 { $examples 
-    { $example "USE: serialize" "[\n  [ { 1 2 } dup  (serialize) (serialize) ] with-serialized\n] string-out\n\n[\n  [ (deserialize) (deserialize) ] with-serialized\n] string-in eq? ." "t" }
+    { $example "USING: serialize io.streams.string ;" "[\n  [ { 1 2 } dup  (serialize) (serialize) ] with-serialized\n] string-out\n\n[\n  [ (deserialize) (deserialize) ] with-serialized\n] string-in eq? ." "t" }
 }
 { $see-also deserialize (deserialize) serialize with-serialized } ;
 
@@ -17,7 +17,7 @@ HELP: (deserialize)
 }
 { $description "Deserializes an object by reading from the current input stream. Object references within the structure that was originally serialized are maintained. It must be called from within the scope of a " { $link with-serialized } " call." } 
 { $examples 
-    { $example "USE: serialize" "[\n  [ { 1 2 } dup  serialize serialize ] with-serialized\n] string-out\n\n[\n  [ deserialize deserialize ] with-serialized\n] string-in eq? ." "t" }
+    { $example "USING: serialize io.streams.string ;" "[\n  [ { 1 2 } dup  (serialize) (serialize) ] with-serialized\n] string-out\n\n[\n  [ (deserialize) (deserialize) ] with-serialized\n] string-in eq? ." "t" }
 }
 { $see-also (serialize) deserialize serialize with-serialized } ;
 
@@ -26,7 +26,7 @@ HELP: with-serialized
 }
 { $description "Creates a scope for serialization and deserialization operations. The quotation is called within this scope. The scope is used for maintaining the structure and object references of serialized objects." } 
 { $examples 
-    { $example "USE: serialize" "[\n  [ { 1 2 } dup  (serialize) (serialize) ] with-serialized\n] string-out\n\n[\n  [ (deserialize) (deserialize) ] with-serialized\n] string-in eq? ." "t" }
+    { $example "USING: serialize io.streams.string ;" "[\n  [ { 1 2 } dup  (serialize) (serialize) ] with-serialized\n] string-out\n\n[\n  [ (deserialize) (deserialize) ] with-serialized\n] string-in eq? ." "t" }
 }
 { $see-also (serialize) (deserialize) serialize deserialize } ;
 
@@ -35,7 +35,7 @@ HELP: serialize
 }
 { $description "Serializes the object to the current output stream. Object references within the structure being serialized are maintained." } 
 { $examples 
-    { $example "USE: serialize" "[  { 1 2 } serialize ] ] string-out\n\n[ deserialize ] string-in ." "{ 1 2 }" }
+    { $example "USING: serialize io.streams.string ;" "[ { 1 2 } serialize ] string-out\n\n[ deserialize ] string-in ." "{ 1 2 }" }
 }
 { $see-also deserialize (deserialize) (serialize) with-serialized } ;
 
@@ -44,6 +44,6 @@ HELP: deserialize
 }
 { $description "Deserializes an object by reading from the current input stream. Object references within the structure that was originally serialized are maintained." } 
 { $examples 
-    { $example "USE: serialize" "[  { 1 2 } serialize ] ] string-out\n\n[ deserialize ] string-in ." "{ 1 2 }" }
+    { $example "USING: serialize io.streams.string ;" "[ { 1 2 } serialize ] string-out\n\n[ deserialize ] string-in ." "{ 1 2 }" }
 }
 { $see-also (serialize) deserialize (deserialize) with-serialized } ;
index b2523eddd2631c1ba9a9077da4b6954e45c7c57d..b0fdd952d5e316899c11cdf48c7bb56b860f49cd 100644 (file)
@@ -29,4 +29,6 @@ MACRO: ntuck ( n -- ) 2 + [ dup , -nrot ] bake ;
 
 : 4dup ( a b c d -- a b c d a b c d ) 4 ndup ; inline
 
+: 4drop ( a b c d -- ) 3drop drop ; inline
+
 : tuckd ( x y z -- z x y z ) 2 ntuck ; inline
index e0c51410298f6d6801b489eb4b4e98b841576f01..95567da2efb121f42a54aba9a92f6c0a54714e78 100644 (file)
@@ -1,25 +1,14 @@
 USING: kernel sequences words math math.functions arrays 
 shuffle quotations parser math.parser strings namespaces 
-splitting effects ;
+splitting effects sequences.lib ;
 IN: shufflers
 
 : shuffle>string ( names shuffle -- string )
     swap [ [ nth ] curry map ] curry map
     first2 "-" swap 3append >string ;
 
-: translate ( n alphabet out-len -- seq )
-    [ drop /mod ] curry* map nip  ;
-
-: (combinations) ( alphabet out-len -- seq[seq] )
-    [ ^ ] 2keep [ translate ] 2curry map ;
-
-: combinations ( n max-out -- seq[seq] )
-    ! This returns a seq of length O(n^m)
-    ! where and m is max-out
-    1+ [ (combinations) ] curry* map concat ;
-
 : make-shuffles ( max-out max-in -- shuffles )
-    [ 1+ dup rot combinations [ 2array ] curry* map ]
+    [ 1+ dup rot strings [ 2array ] curry* map ]
     curry* map concat ;
 
 : shuffle>quot ( shuffle -- quot )
diff --git a/extra/springies/authors.txt b/extra/springies/authors.txt
new file mode 100644 (file)
index 0000000..6cfd5da
--- /dev/null
@@ -0,0 +1 @@
+Eduardo Cavazos
diff --git a/extra/springies/models/2x2snake/deploy.factor b/extra/springies/models/2x2snake/deploy.factor
new file mode 100644 (file)
index 0000000..1ad6cfe
--- /dev/null
@@ -0,0 +1,13 @@
+USING: tools.deploy.config ;
+H{
+    { deploy-compiler? t }
+    { deploy-word-props? f }
+    { deploy-ui? t }
+    { deploy-reflection 1 }
+    { deploy-name "springies.models.2x2snake" }
+    { deploy-c-types? f }
+    { deploy-word-defs? f }
+    { "stop-after-last-window?" t }
+    { deploy-math? t }
+    { deploy-io 1 }
+}
diff --git a/extra/springies/summary.txt b/extra/springies/summary.txt
new file mode 100644 (file)
index 0000000..edd2bf3
--- /dev/null
@@ -0,0 +1 @@
+Mass and spring simulation (inspired by xspringies)
diff --git a/extra/springies/tags.factor b/extra/springies/tags.factor
new file mode 100644 (file)
index 0000000..375ac57
--- /dev/null
@@ -0,0 +1,3 @@
+simulation
+physics
+demos
\ No newline at end of file
index 416601d41535c89c1e95af51a5fec812b19e540d..7bdec6efa4c1ff2c5ca2c4bb3c7e31a07aed2b8b 100644 (file)
@@ -1,6 +1,7 @@
 ! Copyright (C) 2006 Chris Double.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: help sqlite help.syntax help.markup ;
+IN: sqlite
 
 HELP: sqlite-open 
 { $values { "filename" "path to sqlite database" } 
index c960b5ba2b4f5716d6e511a6e756378b8041fe84..795836fa56beeae44c45e343d1a39ffd2a88acd6 100644 (file)
@@ -1,10 +1,11 @@
 ! Copyright (C) 2006 Chris Double.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: help sqlite sqlite.tuple-db help.syntax help.markup ;
+IN: sqlite.tuple-db
 
 ARTICLE: { "sqlite" "tuple-db-loading" } "Loading"
-"The quickest way to get up and running with this library is to load it as a module:"
-{ $code "\"libs/sqlite\" require\nUSE: sqlite\nUSE: tuple-db\n" } 
+"The quickest way to get up and running with this library is to use the vocabulary:"
+{ $code "USING: sqlite sqlite.tuple-db ;\n" } 
 "Some simple tests can be run to check that everything is working ok:"
 { $code "\"libs/sqlite\" test-module" } ;
 
@@ -126,3 +127,5 @@ HELP: delete-tuple
 }
 { $description "Delete this tuple instance from the database. The tuple must have previously been obtained from the database, or inserted into it. It must have a delegate of 'persistent' with the key field set (which is done by the find and insert operations)." } 
 { $see-also { "sqlite" "tuple-db" } insert-tuple update-tuple find-tuples delete-tuple save-tuple } ;
+
+ABOUT: { "sqlite" "tuple-db" } 
\ No newline at end of file
index 97b39bcffd1bae8696a043c8bef49a901fd3d243..6f33d661017ce9c3ee5e28a2d2d5b2fca3dcab82 100644 (file)
@@ -4,8 +4,6 @@ IN: temporary
 
 SYMBOL: store
 SYMBOL: foo
-SYMBOL: bar
-
 
 : the-store ( -- path )
     "store-test.store" resource-path ;
@@ -14,28 +12,24 @@ SYMBOL: bar
     [ the-store delete-file ] catch drop ;
 
 : load-the-store ( -- )
-    the-store load-store store set ;
+    the-store load-store store set-global ;
 
 : save-the-store ( -- )
-    store get save-store ;
+    store save-store ;
 
 delete-the-store
-the-store load-store store set
-
-[ f ] [ foo store get store-data at ] unit-test
+load-the-store
 
-[ ] [ 100 foo store get store-variable ] unit-test
+[ f ] [ foo store get-persistent ] unit-test
 
-[ ] [ save-the-store ] unit-test
+USE: prettyprint
+store get-global store-data .
 
-[ 100 ] [ foo store get store-data at ] unit-test
-
-1000 foo set
+[ ] [ 100 foo store set-persistent ] unit-test
 
 [ ] [ save-the-store ] unit-test
 
-[ ] [ load-the-store ] unit-test
-
-[ 1000 ] [ foo store get store-data at ] unit-test
+[ 100 ] [ foo store get-persistent ] unit-test
 
 delete-the-store
+f store set-global
index 38f078b2a881c22e8b3905b2927d90c4f55e6f3a..46b1a0956818f26db350ea264923ae3557f4bb70 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2006, 2007 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: assocs io io.files kernel namespaces serialize ;
+USING: assocs io io.files kernel namespaces serialize init ;
 IN: store
 
 TUPLE: store path data ;
@@ -8,25 +8,26 @@ TUPLE: store path data ;
 C: <store> store
 
 : save-store ( store -- )
-    [ store-data ] keep store-path <file-writer> [
-        [
-            dup
-            [ >r drop [ get ] keep r> set-at ] curry assoc-each
-        ] keep serialize
-    ] with-stream ;
+    get-global dup store-data swap store-path
+    <file-writer> [ serialize ] with-stream ;
 
 : load-store ( path -- store )
     dup exists? [
-        dup <file-reader> [
-            deserialize
-        ] with-stream
+        dup <file-reader> [ deserialize ] with-stream
     ] [
         H{ } clone
     ] if <store> ;
 
-: store-variable ( default variable store -- )
-    store-data 2dup at* [
-        rot set-global 2drop
-    ] [
-        drop >r 2dup set-global r> set-at
-    ] if ;
+: define-store ( path id -- )
+    over >r
+    [ >r resource-path load-store r> set-global ] 2curry
+    r> add-init-hook ;
+
+: get-persistent ( key store -- value )
+    get-global store-data at ;
+
+: set-persistent ( value key store -- )
+    [ get-global store-data set-at ] keep save-store ;
+
+: init-persistent ( value key store -- )
+    2dup get-persistent [ 3drop ] [ set-persistent ] if ;
index 61ad58f5b3594929eae9df946e123f1654b90fe9..db0e5942f5bfaacac59dd89cc2ed75630fdbb469 100644 (file)
@@ -1,6 +1,10 @@
 USING: help.markup help.syntax io strings ;
 IN: tools.browser
 
+ARTICLE: "vocab-index" "Vocabulary index"
+{ $tags,authors }
+{ $describe-vocab "" } ;
+
 ARTICLE: "tools.browser" "Vocabulary browser"
 "Getting and setting vocabulary meta-data:"
 { $subsection vocab-summary }
index 5342022b540e7db497d2bd73e93fd82e50482e8e..97d3c968cb104782a9b1f2472c4fec321e981fce 100644 (file)
@@ -303,10 +303,6 @@ C: <vocab-author> vocab-author
     "Authors" $heading
     all-authors authors. ;
 
-ARTICLE: "vocab-index" "Vocabulary index"
-{ $tags,authors }
-{ $describe-vocab "" } ;
-
 M: vocab-spec article-title vocab-name " vocabulary" append ;
 
 M: vocab-spec article-name vocab-name ;
index 5b1efce25e508f620879c4a1530d49e847d6f1cb..c1b9755cd66b8fb1a8b96b11b62f5acae18c98a1 100755 (executable)
@@ -43,7 +43,7 @@ $nl
 HELP: deploy-word-defs?
 { $description "Deploy flag. If set, the deploy tool retains word definition quotations for words compiled with the optimizing compiler. Otherwise, word definitions are stripped from words compiled with the optimizing compiler."
 $nl
-"Off by default. During normal execution, the word definition quotation of a word compiled with the optimizing compiler is not used, so disabling this flag can save space. However, some libraries introspect word definitions dynamically (for example, " { $link "inverse" } ") and so programs using these libraries must retain word definition quotations." } ;
+"Off by default. During normal execution, the word definition quotation of a word compiled with the optimizing compiler is not used, so disabling this flag can save space. However, some libraries introspect word definitions dynamically (for example, " { $vocab-link "inverse" } ") and so programs using these libraries must retain word definition quotations." } ;
 
 HELP: deploy-c-types?
 { $description "Deploy flag. If set, the deploy tool retains the " { $link c-types } " table, otherwise this table is stripped out, saving space."
index 0d0241a5e0ff20f96056e5d7b275b2755b17a002..34580cf6f9da0a1dcfc33060c35c9b636cde7309 100755 (executable)
@@ -1,7 +1,8 @@
 ! Copyright (C) 2007 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: io io.files kernel namespaces sequences system
-tools.deploy tools.deploy.config assocs hashtables prettyprint ;
+tools.deploy tools.deploy.config assocs hashtables prettyprint
+windows.shell32 windows.user32 ;
 IN: tools.deploy.windows
 
 : copy-vm ( executable bundle-name -- vm )
@@ -38,4 +39,5 @@ M: windows-deploy-implementation deploy
         [ deploy-name get create-exe-dir ] keep
         [ deploy-name get image-name ] keep
         namespace
+        deploy-name get open-in-explorer
     ] bind deploy* ;
index 88f94a7fd6df57e72e30151099ba441d6cd876a9..1cefce8721f93b6d5aa62f8489db61e4746091db 100644 (file)
@@ -18,9 +18,7 @@ SYMBOL: this-test
 : (unit-test) ( what quot -- )
     swap dup . flush this-test set
     [ time ] curry failures get [
-        [
-            this-test get <failure> failures get push
-        ] recover
+        [ this-test get failure ] recover
     ] [
         call
     ] if ;
index 040ef3576cb4fcabe4c9166c8d8a77ccaf917923..0ab709a11ff58126c598cb3ec5d1a242b78e334f 100644 (file)
@@ -5,6 +5,7 @@ HELP: >tuple<
 { $values { "class" "a tuple class" } }
 { $description "Explodes the tuple so that tuple slots are on the stack in the order listed in the tuple." }
 { $example
+    "USE: tuples.lib"
     "TUPLE: foo a b c ;"
     "1 2 3 \\ foo construct-boa \\ foo >tuple< .s"
     "1\n2\n3"
@@ -16,6 +17,7 @@ HELP: >tuple*<
 { $values { "class" "a tuple class" } }
 { $description "Explodes the tuple so that tuple slots ending with '*' are on the stack in the order listed in the tuple." }
 { $example
+    "USE: tuples.lib"
     "TUPLE: foo a bb* ccc dddd* ;"
     "1 2 3 4 \\ foo construct-boa \\ foo >tuple*< .s"
     "2\n4"
index 6be0423e9598b5a99187c0e8e818e3de18f23751..cbccb371117f141fa54fab738d703796fb97d2ca 100755 (executable)
@@ -30,6 +30,16 @@ tools.test.inference tools.test.ui models ;
     ] with-grafted-gadget
 ] unit-test
 
+[ "bar" ] [
+    <editor> "editor" set
+    "editor" get [
+        "bar\nbaz quux" "editor" get set-editor-string
+        { 0 3 } "editor" get editor-caret set-model
+        "editor" get select-word
+        "editor" get gadget-selection
+    ] with-grafted-gadget
+] unit-test
+
 { 0 1 } [ <editor> ] unit-test-effect
 
 "hello" <model> <field> "field" set
index 84cc01cdb67e451af2b253d981260f7e1e806d78..2d447db1e9279d5dd0929486f35a5cf0c38bcb2c 100755 (executable)
@@ -34,14 +34,10 @@ focused? ;
 : field-theme ( gadget -- )
     gray <solid> swap set-gadget-boundary ;
 
-: construct-editor ( class -- tuple )
-    >r <editor> { set-gadget-delegate } r> construct
+: construct-editor ( object class -- tuple )
+    >r { set-gadget-delegate } r> construct
     dup dup set-editor-self ; inline
 
-TUPLE: source-editor ;
-
-: <source-editor> source-editor construct-editor ;
-
 : activate-editor-model ( editor model -- )
     2dup add-connection
     dup activate-model
@@ -320,11 +316,6 @@ M: editor gadget-text* editor-string % ;
 
 : end-of-document ( editor -- ) T{ doc-elt } editor-next ;
 
-: selected-word ( editor -- string )
-    dup gadget-selection? [
-        dup T{ one-word-elt } select-elt
-    ] unless gadget-selection ;
-
 : position-caret ( editor -- )
     mouse-elt dup T{ one-char-elt } =
     [ drop dup extend-selection dup editor-mark click-loc ]
@@ -345,9 +336,6 @@ M: editor gadget-text* editor-string % ;
 : delete-to-end-of-line T{ one-line-elt } editor-backspace ;
 
 editor "general" f {
-    { T{ key-down f f "RET" } insert-newline }
-    { T{ key-down f { S+ } "RET" } insert-newline }
-    { T{ key-down f f "ENTER" } insert-newline }
     { T{ key-down f f "DELETE" } delete-next-character }
     { T{ key-down f { S+ } "DELETE" } delete-next-character }
     { T{ key-down f f "BACKSPACE" } delete-previous-character }
@@ -408,6 +396,11 @@ editor "caret-motion" f {
 
 : select-word T{ one-word-elt } select-elt ;
 
+: selected-word ( editor -- string )
+    dup gadget-selection?
+    [ dup select-word ] unless
+    gadget-selection ;
+
 : select-previous-character T{ char-elt } editor-select-prev ;
 
 : select-next-character T{ char-elt } editor-select-next ;
@@ -448,6 +441,23 @@ editor "selection" f {
     { T{ key-down f { S+ C+ } "END" } select-end-of-document }
 } define-command-map
 
+! Multi-line editors
+TUPLE: multiline-editor ;
+
+: <multiline-editor> ( -- editor )
+    <editor> multiline-editor construct-editor ;
+
+multiline-editor "general" f {
+    { T{ key-down f f "RET" } insert-newline }
+    { T{ key-down f { S+ } "RET" } insert-newline }
+    { T{ key-down f f "ENTER" } insert-newline }
+} define-command-map
+
+TUPLE: source-editor ;
+
+: <source-editor> ( -- editor )
+    <multiline-editor> source-editor construct-editor ;
+
 ! Fields are like editors except they edit an external model
 TUPLE: field model editor ;
 
index faac461888d657ef82439827e3b8039d2607ce28..1132ea8d66e5ab4a8eeeeed3234bb0ceff5cb887 100644 (file)
@@ -1,5 +1,5 @@
 USING: ui.gadgets help.markup help.syntax opengl kernel strings
-tuples classes quotations ;
+tuples classes quotations models ;
 
 HELP: rect
 { $class-description "A rectangle with the following slots:"
@@ -259,3 +259,52 @@ HELP: g
 HELP: g->
 { $values { "x" object } { "gadget" gadget } }
 { $description "Duplicates the top of the stack and outputs the gadget being built. Can only be used inside a quotation passed to " { $link build-gadget } "." } ;
+
+HELP: construct-control
+{ $values { "model" model } { "gadget" gadget } { "class" class } { "control" gadget } }
+{ $description "Creates a new control linked to the given model. The gadget parameter becomes the control's delegate. The quotation is called when the model value changes." }
+{ $examples
+    "The following example creates a gadget whose fill color is determined by the value of a model:"
+    { $code
+        "USING: ui.gadgets ui.gadgets.panes models ;"
+        ": set-fill-color >r <solid> r> set-gadget-interior ;"
+        ""
+        "TUPLE: color-gadget ;"
+        ""
+        "M: color-gadget model-changed"
+        "    >r model-value r> set-fill-color ;"
+        ""
+        ": <color-gadget> ( model -- gadget )"
+        "    <gadget>"
+        "    { 100 100 } over set-rect-dim"
+        "    color-gadget"
+        "    construct-control ;"
+        ""
+        "{ 1.0 0.0 0.5 1.0 } <model> <color-gadget>"
+        "gadget."
+    }
+    "The " { $vocab-link "color-picker" } " module extends this example into a more elaborate color chooser."
+} ;
+
+{ construct-control control-value set-control-value gadget-model } related-words
+
+HELP: control-value
+{ $values { "control" gadget } { "value" object } }
+{ $description "Outputs the value of the control's model." } ;
+
+HELP: set-control-value
+{ $values { "value" object } { "control" gadget } }
+{ $description "Sets the value of the control's model." } ;
+
+ARTICLE: "ui-control-impl" "Implementing controls"
+"A " { $emphasis "control" } " is a gadget which is linked to an underlying " { $link model } " by having its " { $link gadget-model } " slot set to a model instance."
+$nl
+"To implement a new control, simply use this word in your constructor:"
+{ $subsection construct-control }
+"Some utility words useful in control implementations:"
+{ $subsection gadget-model }
+{ $subsection control-value }
+{ $subsection set-control-value }
+{ $see-also "models" } ;
+
+ABOUT: "ui-control-impl"
index aedad9e049876a805b06cbaec3892aa51d1f342e..34da6da6b3910b73d8fcbb5bfaab8512edc1619f 100644 (file)
@@ -55,6 +55,6 @@ HELP: find-world
 { $description "Finds the " { $link world } " containing the gadget, or outputs " { $link f } " if the gadget is not grafted." } ;
 
 HELP: draw-world
-{ $values { "rect" "a clipping rectangle" } { "world" world } }
+{ $values { "world" world } }
 { $description "Redraws a world." }
 { $notes "This word should only be called by the UI backend. To force a gadget to redraw from user code, call " { $link relayout-1 } "." } ;
index e7d91610792e8fdd51e977f9009ebafee3ad8832..7b20c4591f7e31120b6ca42ec3a5c22a620f19db 100755 (executable)
@@ -95,7 +95,7 @@ deploy-gadget "toolbar" f {
     { f com-help }
     { f com-revert }
     { f com-save }
-    { T{ key-down f f "RETURN" } com-deploy }
+    { T{ key-down f f "RET" } com-deploy }
 } define-command-map
 
 : buttons,
index b603cc5eeaebc099b7eef34d94d8309034f4536c..45494124c8f159afb9749bc4a3e181e501ff17e6 100755 (executable)
@@ -33,9 +33,8 @@ help ;
 
 : <interactor> ( output -- gadget )
     <source-editor>
-    { set-interactor-output set-gadget-delegate }
-    interactor construct
-    dup dup set-editor-self
+    interactor construct-editor
+    tuck set-interactor-output
     dup init-interactor-history
     dup init-caret-help ;
 
index 157e8473ef0f53b596df9017b2e3be96996e7056..f77cf59fad5ecc067311cfe4719c703c0ee7e84a 100755 (executable)
@@ -33,7 +33,8 @@ M: live-search handle-gesture* ( gadget gesture delegate -- ? )
 
 TUPLE: search-field ;
 
-: <search-field> ( -- gadget ) search-field construct-editor ;
+: <search-field> ( -- gadget )
+    <editor> search-field construct-editor ;
 
 search-field H{
     { T{ key-down f f "UP" } [ find-search-list select-previous ] }
index 48d341b4b83184406d4b1954dc66c2ccd45d75c1..8e2eeaa0baf989dbe53969d36b7307ef4983a1b5 100755 (executable)
@@ -67,11 +67,11 @@ M: workspace model-changed
 : com-profiler profiler-gadget select-tool ;
 
 workspace "tool-switching" f {
-    { T{ key-down f { C+ } "1" } com-listener }
-    { T{ key-down f { C+ } "2" } com-browser }
-    { T{ key-down f { C+ } "3" } com-inspector }
-    { T{ key-down f { C+ } "4" } com-walker }
-    { T{ key-down f { C+ } "5" } com-profiler }
+    { T{ key-down f { A+ } "1" } com-listener }
+    { T{ key-down f { A+ } "2" } com-browser }
+    { T{ key-down f { A+ } "3" } com-inspector }
+    { T{ key-down f { A+ } "4" } com-walker }
+    { T{ key-down f { A+ } "5" } com-profiler }
 } define-command-map
 
 \ workspace-window
index 43b30d7a9f6e7e145b4afd883f95bb72b1188d84..9311a1b2a638bb6a61eb5183440e9d16b7178e6e 100755 (executable)
@@ -4,8 +4,8 @@ USING: alien alien.c-types arrays assocs ui ui.gadgets
 ui.backend ui.clipboards ui.gadgets.worlds ui.gestures io kernel
 math math.vectors namespaces prettyprint sequences strings
 vectors words windows.kernel32 windows.gdi32 windows.user32
-windows.opengl32 windows.messages windows.types windows.nt
-windows threads timers libc combinators continuations
+windows.opengl32 windows.messages windows.types
+windows.nt windows threads timers libc combinators continuations
 command-line shuffle opengl ui.render ;
 IN: ui.windows
 
@@ -210,6 +210,9 @@ SYMBOL: hWnd
     hWnd get window-focus send-gesture
     drop ;
 
+: handle-wm-syscommand ( hWnd uMsg wParam lParam -- n )
+    dup alpha? [ 4drop 0 ] [ DefWindowProc ] if ;
+
 : cleanup-window ( handle -- )
     dup win-title [ free ] when*
     dup win-hRC wglDeleteContext win32-error=0/f
@@ -257,14 +260,12 @@ M: windows-ui-backend (close-window)
 : prepare-mouse ( hWnd uMsg wParam lParam -- button coordinate world )
     nip >r mouse-event>gesture r> >lo-hi rot window ;
 
-: mouse-captured? ( -- ? )
-    mouse-captured get ;
-
 : set-capture ( hwnd -- )
     mouse-captured get [
         drop
     ] [
-        [ SetCapture drop ] keep mouse-captured set
+        [ SetCapture drop ] keep
+        mouse-captured set
     ] if ;
 
 : release-capture ( -- )
@@ -276,7 +277,7 @@ M: windows-ui-backend (close-window)
     prepare-mouse send-button-down ;
 
 : handle-wm-buttonup ( hWnd uMsg wParam lParam -- )
-    mouse-captured? [ release-capture ] when
+    mouse-captured get [ release-capture ] when
     prepare-mouse send-button-up ;
 
 : make-TRACKMOUSEEVENT ( hWnd -- alien )
@@ -297,17 +298,17 @@ M: windows-ui-backend (close-window)
 
 : handle-wm-cancelmode ( hWnd uMsg wParam lParam -- )
     #! message sent if windows needs application to stop dragging
-    3drop drop release-capture ;
+    4drop release-capture ;
 
 : handle-wm-mouseleave ( hWnd uMsg wParam lParam -- )
     #! message sent if mouse leaves main application 
-    3drop drop forget-rollover ;
+    4drop forget-rollover ;
 
 ! return 0 if you handle the message, else just let DefWindowProc return its val
 : ui-wndproc ( -- object )
     "uint" { "void*" "uint" "long" "long" } "stdcall" [
         [
-        pick
+        pick ! global [ dup windows-message-name . ] bind
             {
                 { [ dup WM_CLOSE = ]    [ drop handle-wm-close 0 ] }
                 { [ dup WM_PAINT = ]
@@ -322,6 +323,7 @@ M: windows-ui-backend (close-window)
                 { [ dup WM_KEYUP = over WM_SYSKEYUP = or ]
                     [ drop 4dup handle-wm-keyup DefWindowProc ] }
 
+                { [ dup WM_SYSCOMMAND = ] [ drop handle-wm-syscommand ] }
                 { [ dup WM_SETFOCUS = ] [ drop handle-wm-set-focus 0 ] }
                 { [ dup WM_KILLFOCUS = ] [ drop handle-wm-kill-focus 0 ] }
 
@@ -434,7 +436,7 @@ M: windows-ui-backend flush-gl-context ( handle -- )
 ! Move window to front
 M: windows-ui-backend raise-window ( world -- )
     world-handle [
-        win-hWnd SetFocus drop release-capture
+        win-hWnd SetFocus drop
     ] when* ;
 
 M: windows-ui-backend set-title ( string world -- )
index cb999818d236da3bf1380d0cd2329885d7b123b8..66e7faff9493630789e9f69fcc1021fbb2044764 100644 (file)
@@ -4,12 +4,17 @@
 USING: kernel furnace sqlite.tuple-db webapps.article-manager.database 
        sequences namespaces math arrays assocs quotations io.files
        http.server http.basic-authentication http.server.responders 
-       webapps.file ;
+       webapps.file html html.elements io ;
 IN: webapps.article-manager
 
 : current-site ( -- site )
   host get-site* ;
 
+: render-titled-page* ( model body-template head-template title -- )
+  [ 
+      [ render-component ] swap [ <title> write </title> f rot render-component ] curry html-document
+  ] serve-html ;
+
 TUPLE: template-args arg1 ;
   
 C: <template-args> template-args
index f0647aa44225dd232f6b5010515e42dac8eb5ecc..c3a19263be484af5d7c35761da26436bff6f9a7a 100644 (file)
@@ -1,12 +1,12 @@
 <% USING: kernel io http.server namespaces sequences math html.elements random furnace webapps.article-manager webapps.article-manager.database html.elements ; %>
     <div id="banner"><h1><% "arg1" get second article-title write %></h1></div>
-    <% "navigation" render-template %>
+    <% "navigation" render-template %>
     <div id="article">
     <% 100 random 25 > [ "arg1" get first 100 random 50 > [ site-ad2 ] [ site-ad3 ] if write-html ] when %>
     <% "arg1" get second article-body write-html %>
 
        <h1>Tags</h1>
-        <% "arg1" get second tags-for-article <template-args> "tags" render-template %>
+        <% "arg1" get second tags-for-article <template-args> "tags" render-component %>
 </div>
 <p class="footer"></p>
 <p id="copyright"><% "arg1" get first site-footer write %></p>
index ae8963c3b068e2be619ac68bd64f4d7588e4cb7d..da48d324cc6d938c0e55bf22dc5f3ab480b3e1f2 100644 (file)
@@ -6,7 +6,7 @@
 </head>
     <body>
        <div id="banner"><h1><% "title" get write %></h1></div>
-    <% "navigation" render-template %>
+    <% "navigation" render-template %>
 <div id="article">
   <% "intro" get write-html %>
     <h1>Recent Articles</h1>
@@ -23,7 +23,7 @@
            but in the meantime, Google is likely to provide
            reasonable results.
        </p>
-        <% host all-tags <template-args> "tags" render-template %>
+        <% host all-tags <template-args> "tags" render-component %>
 </div>
 <p class="footer"></p>
 <p id="copyright"><% "footer" get write %></p>
index 33fb29914e92d218d8af3bb9a4f5f7136d4f78ea..b42a384ca1a45489b1977504304f74ff802c61fc 100644 (file)
@@ -5,5 +5,5 @@
     </ul>
     <% current-site site-ad1 write-html %>
     <h1>Tags</h1>
-    <% host all-tags <template-args> "tags" render-template %>
+    <% host all-tags <template-args> "tags" render-component %>
     </div>
index a778deb9be08004265163393c5d2d296d7f38120..4e04196097c81dec06a7ba0c7cd773ac97b18e26 100644 (file)
@@ -1,7 +1,7 @@
 <% USING: kernel io http.server namespaces sequences math html furnace webapps.article-manager.database webapps.article-manager html.elements ; %>
 
        <div id="banner"><h1><% "arg1" get second tag-title write %></h1></div>
-    <% f "navigation" render-template %>
+    <% "navigation" render-component %>
        <div id="article">
        <h1><% "arg1" get second tag-title write %></h1>
         <% "arg1" get second tag-description write-html %>
old mode 100644 (file)
new mode 100755 (executable)
index d8fec99..110b90f
@@ -1,4 +1,4 @@
-! Copyright (C) 2004, 2006 Slava Pestov.
+! Copyright (C) 2004, 2007 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: calendar html io io.files kernel math math.parser
 http.server.responders http.server.templating namespaces parser
@@ -31,15 +31,23 @@ IN: webapps.file
     "304 Not Modified" response
     now timestamp>http-string "Date" associate print-header ;  
 
+! You can override how files are served in a custom responder
+SYMBOL: serve-file-hook
+
+[
+    dupd
+    file-response
+    <file-reader> stdio get stream-copy
+] serve-file-hook set-global
+
 : serve-static ( filename mime-type -- )
     over last-modified-matches? [
         2drop not-modified-response
     ] [
-        dupd file-response
         "method" get "head" = [
-            drop
+            file-response
         ] [
-            <file-reader> stdio get stream-copy
+            serve-file-hook get call
         ] if 
     ] if ;
 
@@ -53,9 +61,13 @@ SYMBOL: page
 : include-page ( filename -- )
     "doc-root" get swap path+ run-page ;
 
+: serve-fhtml ( filename -- )
+    serving-html
+    "method" get "head" = [ drop ] [ run-page ] if ;
+
 : serve-file ( filename -- )
     dup mime-type dup "application/x-factor-server-page" =
-    [ drop serving-html run-page ] [ serve-static ] if ;
+    [ drop serve-fhtml ] [ serve-static ] if ;
 
 : file. ( name dirp -- )
     [ "/" append ] when
@@ -106,14 +118,6 @@ SYMBOL: page
     ] if ;
 
 global [
-    ! Serve up our own source code
-    "resources" [ 
-        [
-            "" resource-path "doc-root" set
-            file-responder
-        ] with-scope
-    ] add-simple-responder
-    
     ! Serves files from a directory stored in the "doc-root"
     ! variable. You can set the variable in the global
     ! namespace, or inside the responder.
index bede8846c1d02b4ed46cd447e6d67d9461a37ad5..b21e91bc8fb1bd5a872032a3b9e641dd4e49f3de 100755 (executable)
@@ -4,7 +4,7 @@
 USING: kernel furnace fjsc  parser-combinators namespaces
        lazy-lists io io.files furnace.validator sequences
        http.client http.server http.server.responders
-       webapps.file ;
+       webapps.file html ;
 IN: webapps.fjsc
 
 : compile ( code -- )
@@ -31,6 +31,11 @@ IN: webapps.fjsc
   { "url" v-required }
 } define-action
 
+: render-page* ( model body-template head-template -- )
+  [
+      [ render-component ] [ f rot render-component ] html-document 
+  ] serve-html ;
+
 : repl ( -- )
   #! The main 'repl' page.
   f "repl" "head" render-page* ;
index 8456e499f1aa9a7ddd731baf65b45de8ffd05c3a..28d73607bac3132a935e00eabb9f7d73c94f2562 100644 (file)
@@ -6,18 +6,19 @@ USING: kernel furnace furnace.validator http.server.responders
        arrays io.files ;
 IN: webapps.help 
 
+! : string>topic ( string -- topic )
+    ! " " split dup length 1 = [ first ] when ;
+
 : show-help ( topic -- )
     serving-html
     dup article-title [
         [ help ] with-html-stream
     ] simple-html-document ;
 
-: string>topic ( string -- topic )
-    " " split dup length 1 = [ first ] when ;
-
 \ show-help {
-    { "topic" "handbook" v-default string>topic }
+    { "topic" }
 } define-action
+\ show-help { { "topic" "handbook" } } default-values
 
 M: link browser-link-href
     link-name
@@ -32,9 +33,10 @@ M: link browser-link-href
     lookup show-help ;
 
 \ show-word {
-    { "word" "call" v-default }
-    { "vocab" "kernel" v-default }
+    { "word" }
+    { "vocab" }
 } define-action
+\ show-word { { "word" "call" } { "vocab" "kernel" } } default-values
 
 M: f browser-link-href
     drop \ f browser-link-href ;
@@ -47,9 +49,11 @@ M: word browser-link-href
     f >vocab-link show-help ;
 
 \ show-vocab {
-    { "vocab" "kernel" v-default }
+    { "vocab" }
 } define-action
 
+\ show-vocab { { "vocab" "kernel" } } default-values
+
 M: vocab-spec browser-link-href
     vocab-name [ show-vocab ] curry quot-link ;
 
@@ -82,4 +86,4 @@ PREDICATE: pathname resource-pathname
 M: resource-pathname browser-link-href
     pathname-string
     "resource:" ?head drop
-    "/responder/resources/" swap append ;
+    "/responder/source/" swap append ;
old mode 100644 (file)
new mode 100755 (executable)
index c963e2f..14a424f
@@ -1,4 +1,4 @@
-<% USING: io math math.parser namespaces ; %>
+<% USING: io math math.parser namespaces furnace ; %>
 
 <h1>Annotate</h1>
 
@@ -6,23 +6,42 @@
 
 <table>
 
-<input type="hidden" name="n" value="<% "n" get number>string write %>" />
+<tr>
+<th align="right">Summary:</th>
+<td><input type="TEXT" name="summary" value="<% "summary" render %>" /></td>
+<td align="left" class="error"><% "summary" "*Required" render-error %></td>
+</tr>
+
+<tr>
+<th align="right">Your name:</th>
+<td><input type="TEXT" name="author" value="<% "author" render  %>" /></td>
+<td class="error"><% "author" "*Required" render-error %></td>
+</tr>
 
 <tr>
-<th>Your name:</th>
-<td><input type="TEXT" name="author" value="" /></td>
+<th align="right">File type:</th>
+<td><% "modes" render-template %></td>
 </tr>
 
+<!--
 <tr>
-<th>Summary:</th>
-<td><input type="TEXT" name="summary" value="" /></td>
+<th align="right">Channel:</th>
+<td><input type="TEXT" name="channel" value="#concatenative" /></td>
 </tr>
+-->
 
 <tr>
-<th valign="top">Contents:</th>
-<td><textarea rows="24" cols="60" name="contents"></textarea></td>
+<td></td>
+<td colspan="2" class="error" align="left"><% "contents" "*Required" render-error %></td>
+</tr>
+
+<tr>
+<th align="right" valign="top">Content:</th>
+<td colspan="2"><textarea rows="24" cols="60" name="contents"><% "contents" render %></textarea></td>
 </tr>
 </table>
 
+<input type="hidden" name="n" value="<% "n" get number>string write %>" />
+<input type="hidden" name="furnace-form-submitted" value="annotate-paste"/>
 <input type="SUBMIT" value="Annotate" />
 </form>
old mode 100644 (file)
new mode 100755 (executable)
index ed1bdac..e59db32
@@ -1,11 +1,11 @@
-<% USING: namespaces io ; %>
+<% USING: namespaces io furnace calendar ; %>
 
 <h2>Annotation: <% "summary" get write %></h2>
 
 <table>
-<tr><th>Annotation by:</th><td><% "author" get write %></td></tr>
-<tr><th>Channel:</th><td><% "channel" get write %></td></tr>
-<tr><th>Created:</th><td><% "date" get write %></td></tr>
+<tr><th align="right">Annotation by:</th><td><% "author" get write %></td></tr>
+<tr><th align="right">File type:</th><td><% "mode" get write %></td></tr>
+<tr><th align="right">Created:</th><td><% "date" get timestamp>string write %></td></tr>
 </table>
 
-<pre><% "contents" get write %></pre>
+<% "syntax" render-template %>
diff --git a/extra/webapps/pastebin/footer.furnace b/extra/webapps/pastebin/footer.furnace
new file mode 100644 (file)
index 0000000..15b9011
--- /dev/null
@@ -0,0 +1,3 @@
+</body>
+
+</html>
diff --git a/extra/webapps/pastebin/header.furnace b/extra/webapps/pastebin/header.furnace
new file mode 100644 (file)
index 0000000..2c8e79a
--- /dev/null
@@ -0,0 +1,23 @@
+<% USING: namespaces io furnace sequences xmode.code2html webapps.pastebin ; %>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+
+       <title><% "title" get write %></title>
+       <link rel="stylesheet" href="style.css" type="text/css" media="screen" title="no title" charset="utf-8" />
+       <% default-stylesheet %>
+    <link rel="alternate" type="application/atom+xml" title="Pastebin - Atom" href="feed.xml" />
+</head>
+
+<body id="index">
+
+    <div class="navbar">
+        <% [ paste-list ] "Paste list" render-link %> |
+        <% [ new-paste ] "New paste" render-link %> |
+        <% [ feed.xml ] "Syndicate" render-link %>
+    </div>
+    <h1 class="pastebin-title"><% "title" get write %></h1>
diff --git a/extra/webapps/pastebin/modes.furnace b/extra/webapps/pastebin/modes.furnace
new file mode 100644 (file)
index 0000000..18bbec1
--- /dev/null
@@ -0,0 +1,7 @@
+<% USING: furnace xmode.catalog sequences kernel html.elements assocs io sorting continuations ; %>
+
+<select name="mode">
+    <% modes keys natural-sort [
+        <option dup "mode" session-var = [ "true" =selected ] when option> write </option>
+    ] each %>
+</select>
old mode 100644 (file)
new mode 100755 (executable)
index 8a2544e..b21e197
@@ -1,27 +1,51 @@
+<% USING: continuations furnace namespaces ; %>
+
+<%
+    "New paste" "title" set
+    "header" render-template
+%>
+
 <form method="POST" action="/responder/pastebin/submit-paste">
 
 <table>
 
 <tr>
-<th>Your name:</th>
-<td><input type="TEXT" name="author" value="" /></td>
+<th align="right">Summary:</th>
+<td><input type="TEXT" name="summary" value="<% "summary" render %>" /></td>
+<td align="left" class="error"><% "summary" "*Required" render-error %></td>
+</tr>
+
+<tr>
+<th align="right">Your name:</th>
+<td><input type="TEXT" name="author" value="<% "author" render  %>" /></td>
+<td class="error"><% "author" "*Required" render-error %></td>
 </tr>
 
 <tr>
-<th>Summary:</th>
-<td><input type="TEXT" name="summary" value="" /></td>
+<th align="right">File type:</th>
+<td><% "modes" render-template %></td>
 </tr>
 
+<!--
 <tr>
-<th>Channel:</th>
+<th align="right">Channel:</th>
 <td><input type="TEXT" name="channel" value="#concatenative" /></td>
 </tr>
+-->
 
 <tr>
-<th valign="top">Contents:</th>
-<td><textarea rows="24" cols="60" name="contents"></textarea></td>
+<td></td>
+<td colspan="2" class="error" align="left"><% "contents" "*Required" render-error %></td>
+</tr>
+
+<tr>
+<th align="right" valign="top">Content:</th>
+<td colspan="2"><textarea rows="24" cols="60" name="contents"><% "contents" render %></textarea></td>
 </tr>
 </table>
 
+<input type="hidden" name="furnace-form-submitted" value="new-paste"/>
 <input type="SUBMIT" value="Submit paste" />
 </form>
+
+<% "footer" render-template %>
index 7a25ae2f50adc25b5dfa8d6be3d1ed32a56a3a51..51813ecf97ad930e1d1b0159b655558edc1445ed 100644 (file)
@@ -1,7 +1,33 @@
 <% USING: namespaces furnace sequences ; %>
 
-<table  width="100%">
-<% "new-paste-quot" get "New paste" render-link %>
-<tr align="left"><th>&nbsp;</th><th>Summary:</th><th>Paste by:</th><th>Link</th><th>Date</th></tr>
-<% "pastes" get <reversed> [ "paste-summary" render-template ] each %></table>
+<%
+    "Pastebin" "title" set
+    "header" render-template
+%>
 
+<table width="100%" cellspacing="10">
+    <tr>
+        <td valign="top">
+            <table width="100%">
+                <tr align="left" class="pastebin-headings">
+                    <th width="50%">Summary:</th>
+                    <th width="100">Paste by:</th>
+                    <th width="200">Date:</th>
+                </tr>
+                <% "pastes" get <reversed> [ "paste-summary" render-component ] each %>
+            </table>
+        </td>
+        <td valign="top" width="25%">
+            <div class="infobox">
+                <p>This pastebin is written in <a href="http://factorcode.org/">Factor</a>. It is inspired by <a href="http://paste.lisp.org">lisppaste</a>.
+                </p>
+                <p>It can be used for collaborative development over IRC. You can post code for review, and annotate other people's code. Syntax highlighting for over a hundred file types is supported.
+                </p>
+                <p>
+                <% "webapps.pastebin" browse-webapp-source %></p>
+            </div>
+        </td>
+    </tr>
+</table>
+
+<% "footer" render-template %>
index f5c156a27e4736c1048181a7ed25c28e3924699a..dc25fe1924a68fecc998e63163ddc6ea2d28449c 100644 (file)
@@ -1,9 +1,12 @@
-<% USING: continuations namespaces io kernel math math.parser furnace ; %>
+<% USING: continuations namespaces io kernel math math.parser
+furnace webapps.pastebin calendar sequences ; %>
 
 <tr>
-<td><% "n" get number>string write %></td>
-<td><% "summary" get write %></td>
-<td><% "author" get write %></td>
-<td><% "n" get number>string "show-paste-quot" get curry "Show" render-link %></td>
-<td><% "date" get print %></td>
+    <td>
+        <a href="<% model get paste-link write %>">
+        <% "summary" get write %>
+        </a>
+    </td>
+    <td><% "author" get write %></td>
+    <td><% "date" get timestamp>string write %></td>
 </tr>
old mode 100644 (file)
new mode 100755 (executable)
index f592f96..13d6846
@@ -1,5 +1,6 @@
-USING: calendar furnace furnace.validator io.files kernel namespaces
-sequences store ;
+USING: calendar furnace furnace.validator io.files kernel
+namespaces sequences store http.server.responders html
+math.parser rss xml.writer ;
 IN: webapps.pastebin
 
 TUPLE: pastebin pastes ;
@@ -7,87 +8,118 @@ TUPLE: pastebin pastes ;
 : <pastebin> ( -- pastebin )
     V{ } clone pastebin construct-boa ;
 
-TUPLE: paste n summary article author channel contents date annotations ;
-
-: <paste> ( summary author channel contents -- paste )
-    V{ } clone
-    {
-        set-paste-summary
-        set-paste-author
-        set-paste-channel
-        set-paste-contents
-        set-paste-annotations
-    } paste construct ;
+! Persistence
+SYMBOL: store
 
-TUPLE: annotation summary author contents ;
+"pastebin.store" store define-store
+<pastebin> pastebin store init-persistent
 
-C: <annotation> annotation
+TUPLE: paste
+summary author channel mode contents date
+annotations n ;
 
+: <paste> ( summary author channel mode contents -- paste )
+    f V{ } clone f paste construct-boa ;
 
-SYMBOL: store
+TUPLE: annotation summary author mode contents ;
 
-"pastebin.store" resource-path load-store store set-global
+C: <annotation> annotation
 
-<pastebin> \ pastebin store get store-variable
+: get-pastebin ( -- pastebin )
+    pastebin store get-persistent ;
 
 : get-paste ( n -- paste )
-    pastebin get pastebin-pastes nth ;
+    get-pastebin pastebin-pastes nth ;
 
 : show-paste ( n -- )
-    get-paste "show-paste" "Paste" render-page ;
+    serving-html
+    get-paste
+    [ "show-paste" render-component ] with-html-stream ;
 
 \ show-paste { { "n" v-number } } define-action
 
 : new-paste ( -- )
-    f "new-paste" "New paste" render-page ;
+    serving-html
+    [ "new-paste" render-template ] with-html-stream ;
 
 \ new-paste { } define-action
 
 : paste-list ( -- )
+    serving-html
     [
         [ show-paste ] "show-paste-quot" set
         [ new-paste ] "new-paste-quot" set
-        pastebin get "paste-list" "Pastebin" render-page
-    ] with-scope ;
+        get-pastebin "paste-list" render-component
+    ] with-html-stream ;
 
 \ paste-list { } define-action
 
+: paste-link ( paste -- link )
+    paste-n number>string [ show-paste ] curry quot-link ;
+
+: paste-feed ( -- entries )
+    get-pastebin pastebin-pastes <reversed> [
+        {
+            paste-summary
+            paste-link
+            paste-date
+        } get-slots timestamp>rfc3339 f swap <entry>
+    ] map ;
 
+: feed.xml ( -- )
+    "text/xml" serving-content
+    "pastebin"
+    "http://pastebin.factorcode.org"
+    paste-feed <feed> feed>xml write-xml ;
 
-: save-pastebin-store ( -- )
-    store get-global save-store ;
+\ feed.xml { } define-action
 
 : add-paste ( paste pastebin -- )
-    >r now timestamp>http-string over set-paste-date r>
-    pastebin-pastes
-    [ length over set-paste-n ] keep push ;
+    >r now over set-paste-date r>
+    pastebin-pastes 2dup length swap set-paste-n push ;
 
-: submit-paste ( summary author channel contents -- )
-    <paste>
-    \ pastebin get-global add-paste
-    save-pastebin-store ;
+: submit-paste ( summary author channel mode contents -- )
+    <paste> [
+        pastebin store get-persistent add-paste
+        store save-store
+    ] keep paste-link permanent-redirect ;
 
+\ new-paste
 \ submit-paste {
     { "summary" v-required }
     { "author" v-required }
-    { "channel" "#concatenative" v-default }
+    { "channel" }
+    { "mode" v-required }
     { "contents" v-required }
-} define-action
+} define-form
 
-\ submit-paste [ paste-list ] define-redirect
+\ new-paste {
+    { "channel" "#concatenative" }
+    { "mode" "factor" }
+} default-values
 
-: annotate-paste ( n summary author contents -- )
+: annotate-paste ( n summary author mode contents -- )
     <annotation> swap get-paste
-    paste-annotations push
-    save-pastebin-store ;
+    [ paste-annotations push store save-store ] keep
+    paste-link permanent-redirect ;
 
+[ "n" show-paste ]
 \ annotate-paste {
     { "n" v-required v-number }
     { "summary" v-required }
     { "author" v-required }
+    { "mode" v-required }
     { "contents" v-required }
-} define-action
+} define-form
+
+\ show-paste {
+    { "mode" "factor" }
+} default-values
+
+: style.css ( -- )
+    "text/css" serving-content
+    "style.css" send-resource ;
 
-\ annotate-paste [ "n" show-paste ] define-redirect
+\ style.css { } define-action
 
 "pastebin" "paste-list" "extra/webapps/pastebin" web-app
old mode 100644 (file)
new mode 100755 (executable)
index b3b4e99..30129ed
@@ -1,15 +1,21 @@
-<% USING: namespaces io furnace sequences ; %>
+<% USING: namespaces io furnace sequences xmode.code2html calendar ; %>
 
-<h1>Paste: <% "summary" get write %></h1>
+<%
+    "Paste: " "summary" get append "title" set
+    "header" render-template
+%>
 
 <table>
 <tr><th>Paste by:</th><td><% "author" get write %></td></tr>
-<tr><th>Channel:</th><td><% "channel" get write %></td></tr>
-<tr><th>Created:</th><td><% "date" get write %></td></tr>
+<!-- <tr><th>Channel:</th><td><% "channel" get write %></td></tr> -->
+<tr><th>Created:</th><td><% "date" get timestamp>string write %></td></tr>
+<tr><th>File type:</th><td><% "mode" get write %></td></tr>
 </table>
 
-<pre><% "contents" get write %></pre>
+<% "syntax" render-template %>
 
-<% "annotations" get [ "annotation" render-template ] each %>
+<% "annotations" get [ "annotation" render-component ] each %>
 
-<% model get "annotate-paste" render-template %>
+<% model get "annotate-paste" render-component %>
+
+<% "footer" render-template %>
diff --git a/extra/webapps/pastebin/style.css b/extra/webapps/pastebin/style.css
new file mode 100644 (file)
index 0000000..4a469f9
--- /dev/null
@@ -0,0 +1,41 @@
+body {
+       font:75%/1.6em "Lucida Grande", "Lucida Sans Unicode", verdana, geneva, sans-serif;
+       color:#888;
+}
+
+h1.pastebin-title {
+       font-size:300%;
+}
+
+a {
+       color:#222;
+       border-bottom:1px dotted #ccc;
+       text-decoration:none;
+}
+
+a:hover {
+       border-bottom:1px solid #ccc;
+}
+
+pre.code {
+       border:1px dashed #ccc;
+       background-color:#f5f5f5;
+       padding:5px;
+       font-size:150%;
+       color:#000000;
+}
+
+.navbar {
+       background-color:#eeeeee;
+       padding:5px;
+       border:1px solid #ccc;
+}
+
+.infobox {
+       border: 1px solid #C1DAD7;
+       padding: 10px;
+}
+
+.error {
+       color: red;
+}
diff --git a/extra/webapps/pastebin/syntax.furnace b/extra/webapps/pastebin/syntax.furnace
new file mode 100755 (executable)
index 0000000..17b64b9
--- /dev/null
@@ -0,0 +1,3 @@
+<% USING: xmode.code2html splitting namespaces ; %>
+
+<pre class="code"><% "contents" get string-lines "mode" get htmlize-lines %></pre>
index 31ef4222ba51de85c6b7502b1d521b71756a4700..75440816be77bbeadbe824d90f96d3cd68acafc4 100644 (file)
@@ -1,41 +1,14 @@
 USING: sequences rss arrays concurrency kernel sorting
 html.elements io assocs namespaces math threads vocabs html
 furnace http.server.templating calendar math.parser splitting
-continuations debugger system http.server.responders ;
+continuations debugger system http.server.responders
+xml.writer ;
 IN: webapps.planet
 
-TUPLE: posting author title date link body ;
-
-: diagnostic write print flush ;
-
-: fetch-feed ( pair -- feed )
-    second
-    dup "Fetching " diagnostic
-    dup news-get feed-entries
-    swap "Done fetching " diagnostic ;
-
-: fetch-blogroll ( blogroll -- entries )
-    #! entries is an array of { author entries } pairs.
-    dup [
-        [ fetch-feed ] [ error. drop f ] recover
-    ] parallel-map
-    [ [ >r first r> 2array ] curry* map ] 2map concat ;
-
-: sort-entries ( entries -- entries' )
-    [ [ second entry-pub-date ] compare ] sort <reversed> ;
-
-: <posting> ( pair -- posting )
-    #! pair has shape { author entry }
-    first2
-    { entry-title entry-pub-date entry-link entry-description }
-    get-slots posting construct-boa ;
-
 : print-posting-summary ( posting -- )
     <p "news" =class p>
-        <b> dup posting-title write </b> <br/>
-        "- " write
-        dup posting-author write bl
-        <a posting-link =href "more" =class a>
+        <b> dup entry-title write </b> <br/>
+        <a entry-link =href "more" =class a>
             "Read More..." write
         </a>
     </p> ;
@@ -51,70 +24,86 @@ TUPLE: posting author title date link body ;
     </ul> ;
 
 : format-date ( date -- string )
-    10 head "-" split [ string>number ] map
-    first3 0 0 0 0 <timestamp>
-    [
-        dup timestamp-day #
-        " " %
-        dup timestamp-month month-abbreviations nth %
-        ", " %
-        timestamp-year #
-    ] "" make ;
+    rfc3339>timestamp timestamp>string ;
 
 : print-posting ( posting -- )
     <h2 "posting-title" =class h2>
-        <a dup posting-link =href a>
-            dup posting-title write-html
-            " - " write
-            dup posting-author write
+        <a dup entry-link =href a>
+            dup entry-title write-html
         </a>
     </h2>
-    <p "posting-body" =class p> dup posting-body write-html </p>
-    <p "posting-date" =class p> posting-date format-date write </p> ;
+    <p "posting-body" =class p>
+        dup entry-description write-html
+    </p>
+    <p "posting-date" =class p>
+        entry-pub-date format-date write
+    </p> ;
 
 : print-postings ( postings -- )
     [ print-posting ] each ;
 
-: browse-webapp-source ( vocab -- )
-    <a f >vocab-link browser-link-href =href a>
-        "Browse source" write
-    </a> ;
-
 SYMBOL: default-blogroll
 SYMBOL: cached-postings
 
-: update-cached-postings ( -- )
-    default-blogroll get fetch-blogroll sort-entries
-    [ <posting> ] map
-    cached-postings set-global ;
+: safe-head ( seq n -- seq' )
+    over length min head ;
 
 : mini-planet-factor ( -- )
-    cached-postings get 4 head print-posting-summaries ;
+    cached-postings get 4 safe-head print-posting-summaries ;
 
 : planet-factor ( -- )
-    serving-html [
-        "resource:extra/webapps/planet/planet.fhtml"
-        run-template-file
-    ] with-html-stream ;
+    serving-html [ "planet" render-template ] with-html-stream ;
 
 \ planet-factor { } define-action
 
-{
-    { "Berlin Brown" "http://factorlang-fornovices.blogspot.com/feeds/posts/default" "http://factorlang-fornovices.blogspot.com" }
-    { "Chris Double" "http://www.bluishcoder.co.nz/atom.xml" "http://www.bluishcoder.co.nz/" }
-    { "Elie Chaftari" "http://fun-factor.blogspot.com/feeds/posts/default" "http://fun-factor.blogspot.com/" }
-    { "Doug Coleman" "http://code-factor.blogspot.com/feeds/posts/default" "http://code-factor.blogspot.com/" }
-    { "Daniel Ehrenberg" "http://useless-factor.blogspot.com/feeds/posts/default" "http://useless-factor.blogspot.com/" }
-    { "Kio M. Smallwood"
-    "http://sekenre.wordpress.com/feed/atom/"
-    "http://sekenre.wordpress.com/" }
-    { "Phil Dawes" "http://www.phildawes.net/blog/category/factor/feed/atom" "http://www.phildawes.net/blog/" }
-    { "Samuel Tardieu" "http://www.rfc1149.net/blog/tag/factor/feed/atom/" "http://www.rfc1149.net/blog/tag/factor/" }
-    { "Slava Pestov" "http://factor-language.blogspot.com/atom.xml" "http://factor-language.blogspot.com/" }
-} default-blogroll set-global
+: planet-feed ( -- feed )
+    "[ planet-factor ]"
+    "http://planet.factorcode.org"
+    cached-postings get 30 safe-head <feed> ;
+
+: feed.xml ( -- )
+    "text/xml" serving-content
+    planet-feed feed>xml write-xml ;
+
+\ feed.xml { } define-action
+
+: style.css ( -- )
+    "text/css" serving-content
+    "style.css" send-resource ;
+
+\ style.css { } define-action
 
 SYMBOL: last-update
 
+: diagnostic write print flush ;
+
+: fetch-feed ( triple -- feed )
+    second
+    dup "Fetching " diagnostic
+    dup download-feed feed-entries
+    swap "Done fetching " diagnostic ;
+
+: <posting> ( author entry -- entry' )
+    clone
+    [ ": " swap entry-title 3append ] keep
+    [ set-entry-title ] keep ;
+
+: ?fetch-feed ( triple -- feed/f )
+    [ fetch-feed ] [ error. drop f ] recover ;
+
+: fetch-blogroll ( blogroll -- entries )
+    dup 0 <column>
+    swap [ ?fetch-feed ] parallel-map
+    [ [ <posting> ] curry* map ] 2map concat ;
+
+: sort-entries ( entries -- entries' )
+    [ [ entry-pub-date ] compare ] sort <reversed> ;
+
+: update-cached-postings ( -- )
+    default-blogroll get
+    fetch-blogroll sort-entries
+    cached-postings set-global ;
+
 : update-thread ( -- )
     millis last-update set-global
     [ update-cached-postings ] in-thread
@@ -126,14 +115,17 @@ SYMBOL: last-update
 
 "planet" "planet-factor" "extra/webapps/planet" web-app
 
-: merge-feeds ( feeds -- feed )
-    [ feed-entries ] map concat sort-entries ;
-
-: planet-feed ( -- feed )
-    default-blogroll get [ second news-get ] map merge-feeds 
-    >r "[ planet-factor ]" "http://planet.factorcode.org" r> <entry>
-    generate-atom ;
-
-: feed.xml planet-feed ;
-
-\ feed.xml { } define-action
+{
+    { "Berlin Brown" "http://factorlang-fornovices.blogspot.com/feeds/posts/default" "http://factorlang-fornovices.blogspot.com" }
+    { "Chris Double" "http://www.blogger.com/feeds/18561009/posts/full/-/factor" "http://www.bluishcoder.co.nz/" }
+    { "Elie Chaftari" "http://fun-factor.blogspot.com/feeds/posts/default" "http://fun-factor.blogspot.com/" }
+    { "Doug Coleman" "http://code-factor.blogspot.com/feeds/posts/default" "http://code-factor.blogspot.com/" }
+    { "Daniel Ehrenberg" "http://useless-factor.blogspot.com/feeds/posts/default" "http://useless-factor.blogspot.com/" }
+    { "Gavin Harrison" "http://gmh33.blogspot.com/feeds/posts/default" "http://gmh33.blogspot.com/" }
+    { "Kio M. Smallwood"
+    "http://sekenre.wordpress.com/feed/atom/"
+    "http://sekenre.wordpress.com/" }
+    { "Phil Dawes" "http://www.phildawes.net/blog/category/factor/feed/atom" "http://www.phildawes.net/blog/" }
+    { "Samuel Tardieu" "http://www.rfc1149.net/blog/tag/factor/feed/atom/" "http://www.rfc1149.net/blog/tag/factor/" }
+    { "Slava Pestov" "http://factor-language.blogspot.com/atom.xml" "http://factor-language.blogspot.com/" }
+} default-blogroll set-global
diff --git a/extra/webapps/planet/planet.fhtml b/extra/webapps/planet/planet.fhtml
deleted file mode 100644 (file)
index fb5a673..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<% USING: namespaces html.elements webapps.planet sequences ; %>
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-       <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
-
-       <title>planet-factor</title>
-       <link rel="stylesheet" href="/responder/file/css/news.css" type="text/css" media="screen" title="no title" charset="utf-8" />
-</head>
-
-<body id="index">
-    <h1 class="planet-title">[ planet-factor ]</h1>
-    <table width="100%" cellpadding="10">
-        <tr>
-            <td> <% cached-postings get 20 head print-postings %> </td>
-            <td valign="top" width="25%" class="infobox">
-                <p>
-                    <b>planet-factor</b> is an Atom/RSS aggregator that collects the
-                    contents of <a href="http://factorcode.org/">Factor</a>-related blogs. It is inspired by
-                    <a href="http://planet.lisp.org">Planet Lisp</a>.
-                </p>
-                <p>
-                    This webapp is written in <a href="http://factorcode.org/">Factor</a>.
-                    <% "webapps.planet" browse-webapp-source %>
-                </p>
-                <h2 class="blogroll-title">Blogroll</h2>
-                <% default-blogroll get print-blogroll %>
-                <p>
-                    If you want your weblog added to the blogroll, <a href="http://factorcode.org/gethelp.fhtml">just ask</a>.
-                </p>
-            </td>
-        </tr>
-    </table>
-</body>
-
-</html>
diff --git a/extra/webapps/planet/planet.furnace b/extra/webapps/planet/planet.furnace
new file mode 100644 (file)
index 0000000..4c6676c
--- /dev/null
@@ -0,0 +1,45 @@
+<% USING: namespaces html.elements webapps.planet sequences
+furnace ; %>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+
+       <title>planet-factor</title>
+       <link rel="stylesheet" href="style.css" type="text/css" media="screen" title="no title" charset="utf-8" />
+    <link rel="alternate" type="application/atom+xml" title="Planet Factor - Atom" href="feed.xml" />
+</head>
+
+<body id="index">
+    <h1 class="planet-title">[ planet-factor ]</h1>
+    <table width="100%" cellpadding="10">
+        <tr>
+            <td> <% cached-postings get 20 safe-head print-postings %> </td>
+            <td valign="top" width="25%" class="infobox">
+                <p>
+                    <b>planet-factor</b> is an Atom/RSS aggregator that collects the
+                    contents of <a href="http://factorcode.org/">Factor</a>-related blogs. It is inspired by
+                    <a href="http://planet.lisp.org">Planet Lisp</a>.
+                </p>
+                <p>
+                    <img src="http://planet.lisp.org/feed-icon-14x14.png" />
+                    <a href="feed.xml"> Syndicate </a>
+                </p>
+                <p>
+                    This webapp is written in <a href="http://factorcode.org/">Factor</a>.<br/>
+                    <% "webapps.planet" browse-webapp-source %>
+                </p>
+                <h2 class="blogroll-title">Blogroll</h2>
+                <% default-blogroll get print-blogroll %>
+                <p>
+                    If you want your weblog added to the blogroll, <a href="http://factorcode.org/gethelp.fhtml">just ask</a>.
+                </p>
+            </td>
+        </tr>
+    </table>
+</body>
+
+</html>
diff --git a/extra/webapps/planet/style.css b/extra/webapps/planet/style.css
new file mode 100644 (file)
index 0000000..7a66d8d
--- /dev/null
@@ -0,0 +1,45 @@
+body {
+       font:75%/1.6em "Lucida Grande", "Lucida Sans Unicode", verdana, geneva, sans-serif;
+       color:#888;
+}
+
+h1.planet-title {
+       font-size:300%;
+}
+
+a {
+       color:#222;
+       border-bottom:1px dotted #ccc;
+       text-decoration:none;
+}
+
+a:hover {
+       border-bottom:1px solid #ccc;
+}
+
+.posting-title {
+       background-color:#f5f5f5;
+}
+
+pre, code {
+       color:#000000;
+       font-size:120%;
+}
+
+.infobox {
+       border-left: 1px solid #C1DAD7;
+}
+
+.posting-date {
+       text-align: right;
+       font-size:90%;
+}
+
+a.more {
+       display:block;
+       padding:0 0 5px 0;
+       color:#333;
+       text-decoration:none;
+       text-align:right;
+       border:none;
+}
diff --git a/extra/webapps/source/source.factor b/extra/webapps/source/source.factor
new file mode 100755 (executable)
index 0000000..c414e0a
--- /dev/null
@@ -0,0 +1,33 @@
+! Copyright (C) 2007 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: io.files namespaces webapps.file http.server.responders
+xmode.code2html kernel html sequences ;
+IN: webapps.source
+
+! This responder is a potential security problem. Make sure you
+! don't have sensitive files stored under vm/, core/, extra/
+! or misc/.
+
+: check-source-path ( path -- ? )
+    { "vm/" "core/" "extra/" "misc/" }
+    [ head? ] curry* contains? ;
+
+: source-responder ( path mime-type -- )
+    drop
+    serving-html
+    [ dup <file-reader> htmlize-stream ] with-html-stream ;
+
+global [
+    ! Serve up our own source code
+    "source" [
+        "argument" get check-source-path [
+            [
+                "" resource-path "doc-root" set
+                [ source-responder ] serve-file-hook set
+                file-responder
+            ] with-scope
+        ] [
+            "403 forbidden" httpd-error
+        ] if
+    ] add-simple-responder
+] bind
index bb8919dd7094b21386e46962eaff516d53a0d66d..5e0f4ddc6526746a3668e947a8f7d72d11486a74 100755 (executable)
@@ -1010,7 +1010,8 @@ FUNCTION: HANDLE GetStdHandle ( DWORD nStdHandle ) ;
 ! FUNCTION: GetSystemDefaultLCID
 ! FUNCTION: GetSystemDefaultUILanguage
 ! FUNCTION: GetSystemDirectoryA
-! FUNCTION: GetSystemDirectoryW
+FUNCTION: UINT GetSystemDirectoryW ( LPTSTR lpBuffer, UINT uSize ) ;
+: GetSystemDirectory GetSystemDirectoryW ; inline
 FUNCTION: void GetSystemInfo ( LPSYSTEM_INFO lpSystemInfo ) ;
 ! FUNCTION: GetSystemPowerStatus
 ! FUNCTION: GetSystemRegistryQuota
@@ -1019,7 +1020,8 @@ FUNCTION: void GetSystemTime ( LPSYSTEMTIME lpSystemTime ) ;
 FUNCTION: void GetSystemTimeAsFileTime ( LPFILETIME lpSystemTimeAsFileTime ) ;
 ! FUNCTION: GetSystemTimes
 ! FUNCTION: GetSystemWindowsDirectoryA
-! FUNCTION: GetSystemWindowsDirectoryW
+FUNCTION: UINT GetSystemWindowsDirectoryW ( LPTSTR lpBuffer, UINT uSize ) ;
+: GetSystemWindowsDirectory GetSystemWindowsDirectoryW ; inline
 ! FUNCTION: GetSystemWow64DirectoryA
 ! FUNCTION: GetSystemWow64DirectoryW
 ! FUNCTION: GetTapeParameters
@@ -1057,7 +1059,8 @@ FUNCTION: BOOL GetVersionExW ( LPOSVERSIONINFO lpVersionInfo ) ;
 ! FUNCTION: GetVolumePathNamesForVolumeNameW
 ! FUNCTION: GetVolumePathNameW
 ! FUNCTION: GetWindowsDirectoryA
-! FUNCTION: GetWindowsDirectoryW
+FUNCTION: UINT GetWindowsDirectoryW ( LPTSTR lpBuffer, UINT uSize ) ;
+: GetWindowsDirectory GetWindowsDirectoryW ; inline
 ! FUNCTION: GetWriteWatch
 ! FUNCTION: GlobalAddAtomA
 ! FUNCTION: GlobalAddAtomW
index bc8fe0f0ceda0fd7c238f7a9d5f1da1d0496eadb..5e19f3bf0d0e157acc73e1751259fb33a24d9629 100644 (file)
@@ -13,7 +13,7 @@ SYMBOL: windows-messages
     word [ word-name ] keep execute maybe-create-windows-messages
     windows-messages get set-at ; parsing
 
-: get-windows-message-name ( n -- name )
+: windows-message-name ( n -- name )
     windows-messages get at* [ drop "unknown message" ] unless ;
 
 : WM_NULL HEX: 0000 ; inline add-windows-message
@@ -107,6 +107,8 @@ SYMBOL: windows-messages
 : WM_NCXBUTTONDOWN HEX: 00AB ; inline add-windows-message
 : WM_NCXBUTTONUP HEX: 00AC ; inline add-windows-message
 : WM_NCXBUTTONDBLCLK HEX: 00AD ; inline add-windows-message
+: WM_NCUAHDRAWCAPTION HEX: 00AE ; inline add-windows-message ! undocumented
+: WM_NCUAHDRAWFRAME HEX: 00AF ; inline add-windows-message   ! undocumented
 : WM_INPUT HEX: 00FF ; inline add-windows-message
 : WM_KEYFIRST HEX: 0100 ; inline add-windows-message
 : WM_KEYDOWN HEX: 0100 ; inline add-windows-message
index d9e8f58cc270e37e25cfaad2e6928e5f263f94a7..8a709416d89cb2df031105e198bf7d2998ac7ada 100644 (file)
@@ -6,6 +6,7 @@ USING: alien sequences ;
     { "kernel32" "kernel32.dll" "stdcall" }
     { "winsock"  "ws2_32.dll"   "stdcall" }
     { "mswsock"  "mswsock.dll"  "stdcall" }
+    { "shell32"  "shell32.dll"  "stdcall" }
     { "libc"     "msvcrt.dll"   "cdecl"   }
     { "libm"     "msvcrt.dll"   "cdecl"   }
     { "gl"       "opengl32.dll" "stdcall" }
diff --git a/extra/windows/shell32/shell32.factor b/extra/windows/shell32/shell32.factor
new file mode 100644 (file)
index 0000000..501f49e
--- /dev/null
@@ -0,0 +1,132 @@
+USING: alien alien.c-types alien.syntax combinators
+kernel windows windows.user32 ;
+IN: windows.shell32
+
+: CSIDL_DESKTOP HEX: 00 ; inline
+: CSIDL_INTERNET HEX: 01 ; inline
+: CSIDL_PROGRAMS HEX: 02 ; inline
+: CSIDL_CONTROLS HEX: 03 ; inline
+: CSIDL_PRINTERS HEX: 04 ; inline
+: CSIDL_PERSONAL HEX: 05 ; inline
+: CSIDL_FAVORITES HEX: 06 ; inline
+: CSIDL_STARTUP HEX: 07 ; inline
+: CSIDL_RECENT HEX: 08 ; inline
+: CSIDL_SENDTO HEX: 09 ; inline
+: CSIDL_BITBUCKET HEX: 0a ; inline
+: CSIDL_STARTMENU HEX: 0b ; inline
+: CSIDL_MYDOCUMENTS HEX: 0c ; inline
+: CSIDL_MYMUSIC HEX: 0d ; inline
+: CSIDL_MYVIDEO HEX: 0e ; inline
+: CSIDL_DESKTOPDIRECTORY HEX: 10 ; inline
+: CSIDL_DRIVES HEX: 11 ; inline
+: CSIDL_NETWORK HEX: 12 ; inline
+: CSIDL_NETHOOD HEX: 13 ; inline
+: CSIDL_FONTS HEX: 14 ; inline
+: CSIDL_TEMPLATES HEX: 15 ; inline
+: CSIDL_COMMON_STARTMENU HEX: 16 ; inline
+: CSIDL_COMMON_PROGRAMS HEX: 17 ; inline
+: CSIDL_COMMON_STARTUP HEX: 18 ; inline
+: CSIDL_COMMON_DESKTOPDIRECTORY HEX: 19 ; inline
+: CSIDL_APPDATA HEX: 1a ; inline
+: CSIDL_PRINTHOOD HEX: 1b ; inline
+: CSIDL_LOCAL_APPDATA HEX: 1c ; inline
+: CSIDL_ALTSTARTUP HEX: 1d ; inline
+: CSIDL_COMMON_ALTSTARTUP HEX: 1e ; inline
+: CSIDL_COMMON_FAVORITES HEX: 1f ; inline
+: CSIDL_INTERNET_CACHE HEX: 20 ; inline
+: CSIDL_COOKIES HEX: 21 ; inline
+: CSIDL_HISTORY HEX: 22 ; inline
+: CSIDL_COMMON_APPDATA HEX: 23 ; inline
+: CSIDL_WINDOWS HEX: 24 ; inline
+: CSIDL_SYSTEM HEX: 25 ; inline
+: CSIDL_PROGRAM_FILES HEX: 26 ; inline
+: CSIDL_MYPICTURES HEX: 27 ; inline
+: CSIDL_PROFILE HEX: 28 ; inline
+: CSIDL_SYSTEMX86 HEX: 29 ; inline
+: CSIDL_PROGRAM_FILESX86 HEX: 2a ; inline
+: CSIDL_PROGRAM_FILES_COMMON HEX: 2b ; inline
+: CSIDL_PROGRAM_FILES_COMMONX86 HEX: 2c ; inline
+: CSIDL_COMMON_TEMPLATES HEX: 2d ; inline
+: CSIDL_COMMON_DOCUMENTS HEX: 2e ; inline
+: CSIDL_COMMON_ADMINTOOLS HEX: 2f ; inline
+: CSIDL_ADMINTOOLS HEX: 30 ; inline
+: CSIDL_CONNECTIONS HEX: 31 ; inline
+: CSIDL_COMMON_MUSIC HEX: 35 ; inline
+: CSIDL_COMMON_PICTURES HEX: 36 ; inline
+: CSIDL_COMMON_VIDEO HEX: 37 ; inline
+: CSIDL_RESOURCES HEX: 38 ; inline
+: CSIDL_RESOURCES_LOCALIZED HEX: 39 ; inline
+: CSIDL_COMMON_OEM_LINKS HEX: 3a ; inline
+: CSIDL_CDBURN_AREA HEX: 3b ; inline
+: CSIDL_COMPUTERSNEARME HEX: 3d ; inline
+: CSIDL_PROFILES HEX: 3e ; inline
+: CSIDL_FOLDER_MASK HEX: ff ; inline
+: CSIDL_FLAG_PER_USER_INIT HEX: 800 ; inline
+: CSIDL_FLAG_NO_ALIAS HEX: 1000 ; inline
+: CSIDL_FLAG_DONT_VERIFY HEX: 4000 ; inline
+: CSIDL_FLAG_CREATE HEX: 8000 ; inline
+: CSIDL_FLAG_MASK HEX: ff00 ; inline
+
+
+: S_OK 0 ; inline
+: S_FALSE 1 ; inline
+: E_FAIL HEX: 80004005 ; inline
+: E_INVALIDARG HEX: 80070057 ; inline
+: ERROR_FILE_NOT_FOUND 2 ; inline
+
+: SHGFP_TYPE_CURRENT 0 ; inline
+: SHGFP_TYPE_DEFAULT 1 ; inline
+
+LIBRARY: shell32
+
+FUNCTION: HRESULT SHGetFolderPathW ( HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPTSTR pszPath ) ;
+: SHGetFolderPath SHGetFolderPathW ; inline
+
+FUNCTION: HINSTANCE ShellExecuteW ( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd ) ;
+: ShellExecute ShellExecuteW ; inline
+
+: open-in-explorer ( dir -- )
+    f "open" rot f f SW_SHOWNORMAL ShellExecute drop ;
+
+: shell32-error ( n -- )
+    dup S_OK = [
+        drop
+    ] [
+        {
+            ! { ERROR_FILE_NOT_FOUND [ "file not found" throw ] }
+            ! { E_INVALIDARG [ "invalid arg" throw ] }
+            [ (win32-error-string) throw ]
+        } case
+    ] if ;
+
+: shell32-directory ( n -- str )
+    f swap f SHGFP_TYPE_DEFAULT
+    MAX_UNICODE_PATH "ushort" <c-array>
+    [ SHGetFolderPath shell32-error ] keep alien>u16-string ;
+
+: desktop ( -- str )
+    CSIDL_DESKTOPDIRECTORY shell32-directory ;
+
+: my-documents ( -- str )
+    CSIDL_PERSONAL shell32-directory ;
+
+: application-data ( -- str )
+    CSIDL_APPDATA shell32-directory ;
+
+: windows ( -- str )
+    CSIDL_WINDOWS shell32-directory ;
+
+: programs ( -- str )
+    CSIDL_PROGRAMS shell32-directory ;
+
+: program-files ( -- str )
+    CSIDL_PROGRAM_FILES shell32-directory ;
+
+: program-files-x86 ( -- str )
+    CSIDL_PROGRAM_FILESX86 shell32-directory ;
+
+: program-files-common ( -- str )
+    CSIDL_PROGRAM_FILES_COMMON shell32-directory ;
+
+: program-files-common-x86 ( -- str )
+    CSIDL_PROGRAM_FILES_COMMONX86 shell32-directory ;
index 6702dd6e792111a99314422070d646b7837ad718..7be8d98e61b80676f228fb6deedfd1716da2fe1c 100644 (file)
@@ -333,4 +333,8 @@ C-STRUCT: LVFINDINFO
     { "POINT" "pt" }
     { "uint" "vkDirection" } ;
 
-
+C-STRUCT: ACCEL
+    { "BYTE" "fVirt" }
+    { "WORD" "key" }
+    { "WORD" "cmd" } ;
+TYPEDEF: ACCEL* LPACCEL
index 59378c79ed9805f2704a1dada4dc08cc9d6f96c8..c8f6a82fb5a23882189a0ef6bafa07141f77cd6c 100644 (file)
@@ -5,43 +5,43 @@ windows.types shuffle ;
 IN: windows.user32
 
 ! HKL for ActivateKeyboardLayout
-: HKL_PREV 0 ;
-: HKL_NEXT 1 ;
-
-: CW_USEDEFAULT HEX: 80000000 ;
-
-: WS_OVERLAPPED       HEX: 00000000 ;
-: WS_POPUP            HEX: 80000000 ;
-: WS_CHILD            HEX: 40000000 ;
-: WS_MINIMIZE         HEX: 20000000 ;
-: WS_VISIBLE          HEX: 10000000 ;
-: WS_DISABLED         HEX: 08000000 ;
-: WS_CLIPSIBLINGS     HEX: 04000000 ;
-: WS_CLIPCHILDREN     HEX: 02000000 ;
-: WS_MAXIMIZE         HEX: 01000000 ;
-: WS_CAPTION          HEX: 00C00000 ; !    /* WS_BORDER | WS_DLGFRAME  */
-: WS_BORDER           HEX: 00800000 ;
-: WS_DLGFRAME         HEX: 00400000 ;
-: WS_VSCROLL          HEX: 00200000 ;
-: WS_HSCROLL          HEX: 00100000 ;
-: WS_SYSMENU          HEX: 00080000 ;
-: WS_THICKFRAME       HEX: 00040000 ;
-: WS_GROUP            HEX: 00020000 ;
-: WS_TABSTOP          HEX: 00010000 ;
-: WS_MINIMIZEBOX      HEX: 00020000 ;
-: WS_MAXIMIZEBOX      HEX: 00010000 ;
+: HKL_PREV 0 ; inline
+: HKL_NEXT 1 ; inline
+
+: CW_USEDEFAULT HEX: 80000000 ; inline
+
+: WS_OVERLAPPED       HEX: 00000000 ; inline
+: WS_POPUP            HEX: 80000000 ; inline
+: WS_CHILD            HEX: 40000000 ; inline
+: WS_MINIMIZE         HEX: 20000000 ; inline
+: WS_VISIBLE          HEX: 10000000 ; inline
+: WS_DISABLED         HEX: 08000000 ; inline
+: WS_CLIPSIBLINGS     HEX: 04000000 ; inline
+: WS_CLIPCHILDREN     HEX: 02000000 ; inline
+: WS_MAXIMIZE         HEX: 01000000 ; inline
+: WS_CAPTION          HEX: 00C00000 ; inline
+: WS_BORDER           HEX: 00800000 ; inline
+: WS_DLGFRAME         HEX: 00400000 ; inline
+: WS_VSCROLL          HEX: 00200000 ; inline
+: WS_HSCROLL          HEX: 00100000 ; inline
+: WS_SYSMENU          HEX: 00080000 ; inline
+: WS_THICKFRAME       HEX: 00040000 ; inline
+: WS_GROUP            HEX: 00020000 ; inline
+: WS_TABSTOP          HEX: 00010000 ; inline
+: WS_MINIMIZEBOX      HEX: 00020000 ; inline
+: WS_MAXIMIZEBOX      HEX: 00010000 ; inline
 
 ! Common window styles
-: WS_OVERLAPPEDWINDOW WS_OVERLAPPED WS_CAPTION WS_SYSMENU WS_THICKFRAME WS_MINIMIZEBOX WS_MAXIMIZEBOX bitor bitor bitor bitor bitor ;
+: WS_OVERLAPPEDWINDOW WS_OVERLAPPED WS_CAPTION WS_SYSMENU WS_THICKFRAME WS_MINIMIZEBOX WS_MAXIMIZEBOX bitor bitor bitor bitor bitor ; foldable inline
 
-: WS_POPUPWINDOW      WS_POPUP WS_BORDER WS_SYSMENU bitor bitor ;
+: WS_POPUPWINDOW      WS_POPUP WS_BORDER WS_SYSMENU bitor bitor ; foldable inline
 
-: WS_CHILDWINDOW      WS_CHILD ;
+: WS_CHILDWINDOW      WS_CHILD ; inline
 
-: WS_TILED            WS_OVERLAPPED ;
-: WS_ICONIC           WS_MINIMIZE ;
-: WS_SIZEBOX          WS_THICKFRAME ;
-: WS_TILEDWINDOW      WS_OVERLAPPEDWINDOW ;
+: WS_TILED            WS_OVERLAPPED ; inline
+: WS_ICONIC           WS_MINIMIZE ; inline
+: WS_SIZEBOX          WS_THICKFRAME ; inline
+: WS_TILEDWINDOW      WS_OVERLAPPEDWINDOW ; inline
 
 ! Extended window styles
 
@@ -65,72 +65,74 @@ IN: windows.user32
 : WS_EX_CONTROLPARENT     HEX: 00010000 ; inline
 : WS_EX_STATICEDGE        HEX: 00020000 ; inline
 : WS_EX_APPWINDOW         HEX: 00040000 ; inline
-: WS_EX_OVERLAPPEDWINDOW WS_EX_WINDOWEDGE WS_EX_CLIENTEDGE bitor ; inline
-: WS_EX_PALETTEWINDOW
-    WS_EX_WINDOWEDGE WS_EX_TOOLWINDOW bitor WS_EX_TOPMOST bitor ; inline
-
-: CS_VREDRAW          HEX: 0001 ;
-: CS_HREDRAW          HEX: 0002 ;
-: CS_DBLCLKS          HEX: 0008 ;
-: CS_OWNDC            HEX: 0020 ;
-: CS_CLASSDC          HEX: 0040 ;
-: CS_PARENTDC         HEX: 0080 ;
-: CS_NOCLOSE          HEX: 0200 ;
-: CS_SAVEBITS         HEX: 0800 ;
-: CS_BYTEALIGNCLIENT  HEX: 1000 ;
-: CS_BYTEALIGNWINDOW  HEX: 2000 ;
-: CS_GLOBALCLASS      HEX: 4000 ;
-
-: COLOR_SCROLLBAR         0 ;
-: COLOR_BACKGROUND        1 ;
-: COLOR_ACTIVECAPTION     2 ;
-: COLOR_INACTIVECAPTION   3 ;
-: COLOR_MENU              4 ;
-: COLOR_WINDOW            5 ;
-: COLOR_WINDOWFRAME       6 ;
-: COLOR_MENUTEXT          7 ;
-: COLOR_WINDOWTEXT        8 ;
-: COLOR_CAPTIONTEXT       9 ;
-: COLOR_ACTIVEBORDER      10 ;
-: COLOR_INACTIVEBORDER    11 ;
-: COLOR_APPWORKSPACE      12 ;
-: COLOR_HIGHLIGHT         13 ;
-: COLOR_HIGHLIGHTTEXT     14 ;
-: COLOR_BTNFACE           15 ;
-: COLOR_BTNSHADOW         16 ;
-: COLOR_GRAYTEXT          17 ;
-: COLOR_BTNTEXT           18 ;
-: COLOR_INACTIVECAPTIONTEXT 19 ;
-: COLOR_BTNHIGHLIGHT      20 ;
-
-: IDI_APPLICATION     32512 ;
-: IDI_HAND            32513 ;
-: IDI_QUESTION        32514 ;
-: IDI_EXCLAMATION     32515 ;
-: IDI_ASTERISK        32516 ;
-: IDI_WINLOGO         32517 ;
+: WS_EX_OVERLAPPEDWINDOW ( -- n )
+    WS_EX_WINDOWEDGE WS_EX_CLIENTEDGE bitor ; foldable inline
+: WS_EX_PALETTEWINDOW ( -- n )
+    WS_EX_WINDOWEDGE WS_EX_TOOLWINDOW bitor
+    WS_EX_TOPMOST bitor ; foldable inline
+
+: CS_VREDRAW          HEX: 0001 ; inline
+: CS_HREDRAW          HEX: 0002 ; inline
+: CS_DBLCLKS          HEX: 0008 ; inline
+: CS_OWNDC            HEX: 0020 ; inline
+: CS_CLASSDC          HEX: 0040 ; inline
+: CS_PARENTDC         HEX: 0080 ; inline
+: CS_NOCLOSE          HEX: 0200 ; inline
+: CS_SAVEBITS         HEX: 0800 ; inline
+: CS_BYTEALIGNCLIENT  HEX: 1000 ; inline
+: CS_BYTEALIGNWINDOW  HEX: 2000 ; inline
+: CS_GLOBALCLASS      HEX: 4000 ; inline
+
+: COLOR_SCROLLBAR         0 ; inline
+: COLOR_BACKGROUND        1 ; inline
+: COLOR_ACTIVECAPTION     2 ; inline
+: COLOR_INACTIVECAPTION   3 ; inline
+: COLOR_MENU              4 ; inline
+: COLOR_WINDOW            5 ; inline
+: COLOR_WINDOWFRAME       6 ; inline
+: COLOR_MENUTEXT          7 ; inline
+: COLOR_WINDOWTEXT        8 ; inline
+: COLOR_CAPTIONTEXT       9 ; inline
+: COLOR_ACTIVEBORDER      10 ; inline
+: COLOR_INACTIVEBORDER    11 ; inline
+: COLOR_APPWORKSPACE      12 ; inline
+: COLOR_HIGHLIGHT         13 ; inline
+: COLOR_HIGHLIGHTTEXT     14 ; inline
+: COLOR_BTNFACE           15 ; inline
+: COLOR_BTNSHADOW         16 ; inline
+: COLOR_GRAYTEXT          17 ; inline
+: COLOR_BTNTEXT           18 ; inline
+: COLOR_INACTIVECAPTIONTEXT 19 ; inline
+: COLOR_BTNHIGHLIGHT      20 ; inline
+
+: IDI_APPLICATION     32512 ; inline
+: IDI_HAND            32513 ; inline
+: IDI_QUESTION        32514 ; inline
+: IDI_EXCLAMATION     32515 ; inline
+: IDI_ASTERISK        32516 ; inline
+: IDI_WINLOGO         32517 ; inline
 
 ! ShowWindow() Commands
-: SW_HIDE             0 ;
-: SW_SHOWNORMAL       1 ;
-: SW_NORMAL           1 ;
-: SW_SHOWMINIMIZED    2 ;
-: SW_SHOWMAXIMIZED    3 ;
-: SW_MAXIMIZE         3 ;
-: SW_SHOWNOACTIVATE   4 ;
-: SW_SHOW             5 ;
-: SW_MINIMIZE         6 ;
-: SW_SHOWMINNOACTIVE  7 ;
-: SW_SHOWNA           8 ;
-: SW_RESTORE          9 ;
-: SW_SHOWDEFAULT      10 ;
-: SW_FORCEMINIMIZE    11 ;
-: SW_MAX              11 ;
+: SW_HIDE             0 ; inline
+: SW_SHOWNORMAL       1 ; inline
+: SW_NORMAL           1 ; inline
+: SW_SHOWMINIMIZED    2 ; inline
+: SW_SHOWMAXIMIZED    3 ; inline
+: SW_MAXIMIZE         3 ; inline
+: SW_SHOWNOACTIVATE   4 ; inline
+: SW_SHOW             5 ; inline
+: SW_MINIMIZE         6 ; inline
+: SW_SHOWMINNOACTIVE  7 ; inline
+: SW_SHOWNA           8 ; inline
+: SW_RESTORE          9 ; inline
+: SW_SHOWDEFAULT      10 ; inline
+: SW_FORCEMINIMIZE    11 ; inline
+: SW_MAX              11 ; inline
 
 ! PeekMessage
-: PM_NOREMOVE   0 ;
-: PM_REMOVE     1 ;
-: PM_NOYIELD    2 ;
+: PM_NOREMOVE   0 ; inline
+: PM_REMOVE     1 ; inline
+: PM_NOYIELD    2 ; inline
 ! : PM_QS_INPUT         (QS_INPUT << 16) ;
 ! : PM_QS_POSTMESSAGE   ((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16) ;
 ! : PM_QS_PAINT         (QS_PAINT << 16) ;
@@ -140,22 +142,22 @@ IN: windows.user32
 ! 
 ! Standard Cursor IDs
 !
-: IDC_ARROW           32512 ;
-: IDC_IBEAM           32513 ;
-: IDC_WAIT            32514 ;
-: IDC_CROSS           32515 ;
-: IDC_UPARROW         32516 ;
-: IDC_SIZE            32640 ; ! OBSOLETE: use IDC_SIZEALL
-: IDC_ICON            32641 ; ! OBSOLETE: use IDC_ARROW
-: IDC_SIZENWSE        32642 ;
-: IDC_SIZENESW        32643 ;
-: IDC_SIZEWE          32644 ;
-: IDC_SIZENS          32645 ;
-: IDC_SIZEALL         32646 ;
-: IDC_NO              32648 ; ! not in win3.1
-: IDC_HAND            32649 ;
-: IDC_APPSTARTING     32650 ; ! not in win3.1
-: IDC_HELP            32651 ;
+: IDC_ARROW           32512 ; inline
+: IDC_IBEAM           32513 ; inline
+: IDC_WAIT            32514 ; inline
+: IDC_CROSS           32515 ; inline
+: IDC_UPARROW         32516 ; inline
+: IDC_SIZE            32640 ; inline ! OBSOLETE: use IDC_SIZEALL
+: IDC_ICON            32641 ; inline ! OBSOLETE: use IDC_ARROW
+: IDC_SIZENWSE        32642 ; inline
+: IDC_SIZENESW        32643 ; inline
+: IDC_SIZEWE          32644 ; inline
+: IDC_SIZENS          32645 ; inline
+: IDC_SIZEALL         32646 ; inline
+: IDC_NO              32648 ; inline ! not in win3.1
+: IDC_HAND            32649 ; inline
+: IDC_APPSTARTING     32650 ; inline ! not in win3.1
+: IDC_HELP            32651 ; inline
 
 ! Predefined Clipboard Formats
 : CF_TEXT             1 ; inline
@@ -244,9 +246,43 @@ IN: windows.user32
 : VK_DELETE         HEX: 2E ; inline
 : VK_HELP           HEX: 2F ; inline
 
-! VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
-! 0x40 : unassigned
-! VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
+: VK_0 CHAR: 0 ; inline
+: VK_1 CHAR: 1 ; inline
+: VK_2 CHAR: 2 ; inline
+: VK_3 CHAR: 3 ; inline
+: VK_4 CHAR: 4 ; inline
+: VK_5 CHAR: 5 ; inline
+: VK_6 CHAR: 6 ; inline
+: VK_7 CHAR: 7 ; inline
+: VK_8 CHAR: 8 ; inline
+: VK_9 CHAR: 9 ; inline
+
+: VK_A CHAR: A ; inline
+: VK_B CHAR: B ; inline
+: VK_C CHAR: C ; inline
+: VK_D CHAR: D ; inline
+: VK_E CHAR: E ; inline
+: VK_F CHAR: F ; inline
+: VK_G CHAR: G ; inline
+: VK_H CHAR: H ; inline
+: VK_I CHAR: I ; inline
+: VK_J CHAR: J ; inline
+: VK_K CHAR: K ; inline
+: VK_L CHAR: L ; inline
+: VK_M CHAR: M ; inline
+: VK_N CHAR: N ; inline
+: VK_O CHAR: O ; inline
+: VK_P CHAR: P ; inline
+: VK_Q CHAR: Q ; inline
+: VK_R CHAR: R ; inline
+: VK_S CHAR: S ; inline
+: VK_T CHAR: T ; inline
+: VK_U CHAR: U ; inline
+: VK_V CHAR: V ; inline
+: VK_W CHAR: W ; inline
+: VK_X CHAR: X ; inline
+: VK_Y CHAR: Y ; inline
+: VK_Z CHAR: Z ; inline
 
 : VK_LWIN           HEX: 5B ; inline
 : VK_RWIN           HEX: 5C ; inline
@@ -417,47 +453,59 @@ IN: windows.user32
 
 ! Some fields are not defined for win64
 ! Window field offsets for GetWindowLong()
-: GWL_WNDPROC         -4 ;
-: GWL_HINSTANCE       -6 ;
-: GWL_HWNDPARENT      -8 ;
-: GWL_USERDATA        -21 ;
-: GWL_ID              -12 ;
+: GWL_WNDPROC         -4 ; inline
+: GWL_HINSTANCE       -6 ; inline
+: GWL_HWNDPARENT      -8 ; inline
+: GWL_USERDATA        -21 ; inline
+: GWL_ID              -12 ; inline
 
-: GWL_STYLE           -16 ;
-: GWL_EXSTYLE         -20 ;
+: GWL_STYLE           -16 ; inline
+: GWL_EXSTYLE         -20 ; inline
 
-: GWLP_WNDPROC        -4 ;
-: GWLP_HINSTANCE      -6 ;
-: GWLP_HWNDPARENT     -8 ;
-: GWLP_USERDATA       -21 ;
-: GWLP_ID             -12 ;
+: GWLP_WNDPROC        -4 ; inline
+: GWLP_HINSTANCE      -6 ; inline
+: GWLP_HWNDPARENT     -8 ; inline
+: GWLP_USERDATA       -21 ; inline
+: GWLP_ID             -12 ; inline
 
 ! Class field offsets for GetClassLong()
-: GCL_MENUNAME        -8 ;
-: GCL_HBRBACKGROUND   -10 ;
-: GCL_HCURSOR         -12 ;
-: GCL_HICON           -14 ;
-: GCL_HMODULE         -16 ;
-: GCL_WNDPROC         -24 ;
-: GCL_HICONSM         -34 ;
-: GCL_CBWNDEXTRA      -18 ;
-: GCL_CBCLSEXTRA      -20 ;
-: GCL_STYLE           -26 ;
-: GCW_ATOM            -32 ;
-
-: GCLP_MENUNAME       -8 ;
-: GCLP_HBRBACKGROUND  -10 ;
-: GCLP_HCURSOR        -12 ;
-: GCLP_HICON          -14 ;
-: GCLP_HMODULE        -16 ;
-: GCLP_WNDPROC        -24 ;
-: GCLP_HICONSM        -34 ;
-
-: MB_ICONASTERISK    HEX: 00000040 ;
-: MB_ICONEXCLAMATION HEX: 00000030 ;
-: MB_ICONHAND        HEX: 00000010 ;
-: MB_ICONQUESTION    HEX: 00000020 ;
-: MB_OK              HEX: 00000000 ;
+: GCL_MENUNAME        -8 ; inline
+: GCL_HBRBACKGROUND   -10 ; inline
+: GCL_HCURSOR         -12 ; inline
+: GCL_HICON           -14 ; inline
+: GCL_HMODULE         -16 ; inline
+: GCL_WNDPROC         -24 ; inline
+: GCL_HICONSM         -34 ; inline
+: GCL_CBWNDEXTRA      -18 ; inline
+: GCL_CBCLSEXTRA      -20 ; inline
+: GCL_STYLE           -26 ; inline
+: GCW_ATOM            -32 ; inline
+
+: GCLP_MENUNAME       -8 ; inline
+: GCLP_HBRBACKGROUND  -10 ; inline
+: GCLP_HCURSOR        -12 ; inline
+: GCLP_HICON          -14 ; inline
+: GCLP_HMODULE        -16 ; inline
+: GCLP_WNDPROC        -24 ; inline
+: GCLP_HICONSM        -34 ; inline
+
+: MB_ICONASTERISK    HEX: 00000040 ; inline
+: MB_ICONEXCLAMATION HEX: 00000030 ; inline
+: MB_ICONHAND        HEX: 00000010 ; inline
+: MB_ICONQUESTION    HEX: 00000020 ; inline
+: MB_OK              HEX: 00000000 ; inline
+
+: FVIRTKEY TRUE ; inline
+: FNOINVERT 2 ; inline
+: FSHIFT 4 ; inline
+: FCONTROL 8 ; inline
+: FALT 16 ; inline
+
+: MAPVK_VK_TO_VSC 0 ; inline
+: MAPVK_VSC_TO_VK 1 ; inline
+: MAPVK_VK_TO_CHAR 2 ; inline
+: MAPVK_VSC_TO_VK_EX 3 ; inline
+: MAPVK_VK_TO_VSC_EX 3 ; inline
 
 : TME_HOVER 1 ; inline
 : TME_LEAVE 2 ; inline
@@ -549,13 +597,15 @@ FUNCTION: BOOL CloseClipboard ( ) ;
 ! FUNCTION: CloseWindow
 ! FUNCTION: CloseWindowStation
 ! FUNCTION: CopyAcceleratorTableA
-! FUNCTION: CopyAcceleratorTableW
+FUNCTION: int CopyAcceleratorTableW ( HACCEL hAccelSrc, LPACCEL lpAccelDst, int cAccelEntries ) ;
+: CopyAcceleratorTable CopyAcceleratorTableW ; inline
 ! FUNCTION: CopyIcon
 ! FUNCTION: CopyImage
 ! FUNCTION: CopyRect
 ! FUNCTION: CountClipboardFormats
 ! FUNCTION: CreateAcceleratorTableA
-! FUNCTION: CreateAcceleratorTableW
+FUNCTION: HACCEL CreateAcceleratorTableW ( LPACCEL lpaccl, int cEntries ) ;
+: CreateAcceleratorTable CreateAcceleratorTableW ; inline
 ! FUNCTION: CreateCaret
 ! FUNCTION: CreateCursor
 ! FUNCTION: CreateDesktopA
@@ -643,7 +693,7 @@ FUNCTION: LRESULT DefWindowProcW ( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lP
 : DefWindowProc DefWindowProcW ; inline
 ! FUNCTION: DeleteMenu
 ! FUNCTION: DeregisterShellHookWindow
-! FUNCTION: DestroyAcceleratorTable
+FUNCTION: BOOL DestroyAcceleratorTable ( HACCEL hAccel ) ;
 ! FUNCTION: DestroyCaret
 ! FUNCTION: DestroyCursor
 ! FUNCTION: DestroyIcon
@@ -953,7 +1003,7 @@ FUNCTION: BOOL IsZoomed ( HWND hWnd ) ;
 ! FUNCTION: KillSystemTimer
 ! FUNCTION: KillTimer
 ! FUNCTION: LoadAcceleratorsA
-! FUNCTION: LoadAcceleratorsW
+FUNCTION: HACCEL LoadAcceleratorsW ( HINSTANCE hInstance, LPCTSTR lpTableName ) ;
 ! FUNCTION: LoadBitmapA
 ! FUNCTION: LoadBitmapW
 ! FUNCTION: LoadCursorFromFileA
@@ -988,10 +1038,13 @@ FUNCTION: HICON LoadIconW ( HINSTANCE hInstance, LPCTSTR lpIconName ) ;
 ! FUNCTION: LookupIconIdFromDirectory
 ! FUNCTION: LookupIconIdFromDirectoryEx
 ! FUNCTION: MapDialogRect
-! FUNCTION: MapVirtualKeyA
-! FUNCTION: MapVirtualKeyExA
-! FUNCTION: MapVirtualKeyExW
-! FUNCTION: MapVirtualKeyW
+
+FUNCTION: UINT MapVirtualKeyW ( UINT uCode, UINT uMapType ) ;
+: MapVirtualKey MapVirtualKeyW ; inline
+
+FUNCTION: UINT MapVirtualKeyExW ( UINT uCode, UINT uMapType, HKL dwhkl ) ;
+: MapVirtualKeyEx MapVirtualKeyExW ; inline
+
 ! FUNCTION: MapWindowPoints
 ! FUNCTION: MB_GetString
 ! FUNCTION: MBToWCSEx
@@ -1050,7 +1103,6 @@ FUNCTION: int MessageBoxExW (
 ! FUNCTION: mouse_event
 
 
-
 FUNCTION: BOOL MoveWindow (
     HWND hWnd,
     int X,
@@ -1059,7 +1111,6 @@ FUNCTION: BOOL MoveWindow (
     int nHeight,
     BOOL bRepaint ) ;
 
-
 ! FUNCTION: MsgWaitForMultipleObjects
 ! FUNCTION: MsgWaitForMultipleObjectsEx
 ! FUNCTION: NotifyWinEvent
@@ -1264,7 +1315,9 @@ FUNCTION: BOOL TrackMouseEvent ( LPTRACKMOUSEEVENT lpEventTrack ) ;
 ! FUNCTION: TrackPopupMenuEx
 ! FUNCTION: TranslateAccelerator
 ! FUNCTION: TranslateAcceleratorA
-! FUNCTION: TranslateAcceleratorW
+FUNCTION: int TranslateAcceleratorW ( HWND hWnd, HACCEL hAccTable, LPMSG lpMsg ) ;
+: TranslateAccelerator TranslateAcceleratorW ; inline
+
 ! FUNCTION: TranslateMDISysAccel
 FUNCTION: BOOL TranslateMessage ( MSG* lpMsg ) ;
 
index 657a8e8a7c836855875e2d212f5b541075e61a26..e07c504781ca78164da29b51afd9c1eb50fd2861 100755 (executable)
@@ -7,6 +7,7 @@ IN: windows
 
 : lo-word ( wparam -- lo ) <short> *short ; inline
 : hi-word ( wparam -- hi ) -16 shift lo-word ; inline
+: MAX_UNICODE_PATH 32768 ; inline
 
 ! You must LocalFree the return value!
 FUNCTION: void* error_message ( DWORD id ) ;
index cb7dd3c7030b3dcd6d5d7dcc31646e9c4700b2e6..77f7c4d92943c9e93b8792cfc26186b6983978bd 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2005, 2006 Daniel Ehrenberg
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel sequences sequences.private assocs arrays delegate ;
+USING: kernel sequences sequences.private assocs arrays delegate vectors ;
 IN: xml.data
 
 TUPLE: name space tag url ;
@@ -60,23 +60,24 @@ M: attrs set-at
     2dup attr@ nip [
         2nip set-second
     ] [
-        >r assure-name swap 2array r> push
+        [ >r assure-name swap 2array r> ?push ] keep
+        set-delegate
     ] if* ;
 
 M: attrs assoc-size length ;
 M: attrs new-assoc drop V{ } new <attrs> ;
-M: attrs assoc-find >r delegate r> assoc-find ;
 M: attrs >alist delegate >alist ;
 
 : >attrs ( assoc -- attrs )
-    V{ } assoc-clone-like
-    [ >r assure-name r> ] assoc-map
-    <attrs> ;
+    dup [
+        V{ } assoc-clone-like
+        [ >r assure-name r> ] assoc-map
+    ] when <attrs> ;
 M: attrs assoc-like
     drop dup attrs? [ >attrs ] unless ;
 
 M: attrs clear-assoc
-    delete-all ;
+    f swap set-delegate ;
 M: attrs delete-at
     tuck attr@ drop [ swap delete-nth ] [ drop ] if* ;
 
index 1bd7b8f149729a1872f5ef378adb1828f807d96e..fe64684f22c4eda09a789446d765261e251d132f 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.\r
 USING: kernel namespaces sequences words io assocs\r
 quotations strings parser arrays xml.data xml.writer debugger\r
-splitting ;\r
+splitting vectors ;\r
 IN: xml.utilities\r
 \r
 ! * System for words specialized on tag names\r
@@ -36,8 +36,7 @@ M: process-missing error.
 ! * Common utility functions\r
 \r
 : build-tag* ( items name -- tag )\r
-    "" swap "" <name>\r
-    swap >r { } r> <tag> ;\r
+    assure-name swap >r f r> <tag> ;\r
 \r
 : build-tag ( item name -- tag )\r
     >r 1array r> build-tag* ;\r
@@ -114,30 +113,54 @@ M: object xml-inject 2drop ;
 M: xml xml-inject >r delegate >r xml-inject ;\r
 \r
 ! * Accessing part of an XML document\r
+! for tag- words, a start means that it searches all children\r
+! and no star searches only direct children\r
 \r
-: get-id ( tag id -- elem ) ! elem=tag.getElementById(id)\r
-    swap [\r
-        dup tag?\r
-        [ "id" swap at over = ]\r
-        [ drop f ] if\r
-    ] xml-find nip ;\r
-\r
-: (get-tag) ( name elem -- ? )\r
+: tag-named? ( name elem -- ? )\r
     dup tag? [ names-match? ] [ 2drop f ] if ;\r
 \r
 : tag-named* ( tag name/string -- matching-tag )\r
-    assure-name swap [ dupd (get-tag) ] xml-find nip ;\r
+    assure-name [ swap tag-named? ] curry xml-find ;\r
 \r
 : tags-named* ( tag name/string -- tags-seq )\r
-    assure-name swap [ dupd (get-tag) ] xml-subset nip ;\r
+    assure-name [ swap tag-named? ] curry xml-subset ;\r
 \r
 : tag-named ( tag name/string -- matching-tag )\r
     ! like get-name-tag but only looks at direct children,\r
     ! not all the children down the tree.\r
-    assure-name swap [ (get-tag) ] curry* find nip ;\r
+    assure-name swap [ tag-named? ] curry* find nip ;\r
 \r
 : tags-named ( tag name/string -- tags-seq )\r
-    assure-name swap [ (get-tag) ] curry* subset ;\r
+    assure-name swap [ tag-named? ] curry* subset ;\r
 \r
 : assert-tag ( name name -- )\r
     names-match? [ "Unexpected XML tag found" throw ] unless ;\r
+\r
+: insert-children ( children tag -- )\r
+    dup tag-children [ push-all ]\r
+    [ >r V{ } like r> set-tag-children ] if ;\r
+\r
+: insert-child ( child tag -- )\r
+    >r 1vector r> insert-children ;\r
+\r
+: tag-with-attr? ( elem attr-value attr-name -- ? )\r
+    rot dup tag? [ at = ] [ 3drop f ] if ;\r
+\r
+: tag-with-attr ( tag attr-value attr-name -- matching-tag )\r
+    assure-name [ tag-with-attr? ] 2curry find nip ;\r
+\r
+: tags-with-attr ( tag attr-value attr-name -- tags-seq )\r
+    assure-name [ tag-with-attr? ] 2curry subset ;\r
+\r
+: tag-with-attr* ( tag attr-value attr-name -- matching-tag )\r
+    assure-name [ tag-with-attr? ] 2curry xml-find ;\r
+\r
+: tags-with-attr* ( tag attr-value attr-name -- tags-seq )\r
+    assure-name [ tag-with-attr? ] 2curry xml-subset ;\r
+\r
+: get-id ( tag id -- elem ) ! elem=tag.getElementById(id)\r
+    "id" tag-with-attr ;\r
+\r
+: tags-named-with-attr* ( tag tag-name attr-value attr-name -- tags )\r
+    >r >r tags-named* r> r> tags-with-attr ;\r
+\r
diff --git a/extra/xmode/README.txt b/extra/xmode/README.txt
new file mode 100755 (executable)
index 0000000..57d9f42
--- /dev/null
@@ -0,0 +1,41 @@
+This is a Factor port of the jEdit 4.3 syntax highlighting engine
+(http://www.jedit.org).
+
+jEdit 1.2, released in late 1998, was the first release to support
+syntax highlighting. It featured a small number of hand-coded
+"token markers" -- simple incremental parers -- all based on the
+original JavaTokenMarker contributed by Tal Davidson.
+
+Around the time of jEdit 1.5 in 1999, Mike Dillon began developing a
+jEdit plugin named "XMode". This plugin implemented a generic,
+rule-driven token marker which read mode descriptions from XML files.
+XMode eventually matured to the point where it could replace the
+formerly hand-coded token markers.
+
+With the release of jEdit 2.4, I merged XMode into the core and
+eliminated the old hand-coded token markers.
+
+XMode suffers from a somewhat archaic design, and was written at a time
+when Java VMs with JIT compilers were relatively uncommon, object
+allocation was expensive, and heap space tight. As a result the parser
+design is less general than it could be.
+
+Furthermore, the parser has a few bugs which some mode files have come
+to depend on:
+
+- If a RULES tag does not define any keywords or rules, then its
+  NO_WORD_SEP attribute is ignored.
+
+  The Factor implementation duplicates this behavior.
+
+- if a RULES tag does not have a NO_WORD_SEP attribute, then
+  it inherits the value of the NO_WORD_SEP attribute from the previous
+  RULES tag.
+
+  The Factor implementation does not duplicate this behavior. If you
+  find a mode file which depends on this flaw, please fix it and submit
+  the changes to the jEdit project.
+
+If you wish to contribute a new or improved mode file, please contact
+the jEdit project. Updated mode files in jEdit will be periodically
+imported into the Factor source tree.
diff --git a/extra/xmode/authors.txt b/extra/xmode/authors.txt
new file mode 100644 (file)
index 0000000..1901f27
--- /dev/null
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/extra/xmode/catalog/catalog-tests.factor b/extra/xmode/catalog/catalog-tests.factor
new file mode 100644 (file)
index 0000000..d5420ed
--- /dev/null
@@ -0,0 +1,11 @@
+IN: temporary
+USING: xmode.catalog tools.test hashtables assocs
+kernel sequences io ;
+
+[ t ] [ modes hashtable? ] unit-test
+
+[ ] [
+    modes keys [
+        dup print flush load-mode drop reset-modes
+    ] each
+] unit-test
diff --git a/extra/xmode/catalog/catalog.factor b/extra/xmode/catalog/catalog.factor
new file mode 100644 (file)
index 0000000..e48b18b
--- /dev/null
@@ -0,0 +1,114 @@
+USING: xmode.loader xmode.utilities xmode.rules namespaces
+strings splitting assocs sequences kernel io.files xml memoize
+words globs combinators ;
+IN: xmode.catalog
+
+TUPLE: mode file file-name-glob first-line-glob ;
+
+<TAGS: parse-mode-tag
+
+TAG: MODE
+    "NAME" over at >r
+    mode construct-empty {
+        { "FILE" f set-mode-file }
+        { "FILE_NAME_GLOB" f set-mode-file-name-glob }
+        { "FIRST_LINE_GLOB" f set-mode-first-line-glob }
+    } init-from-tag r>
+    rot set-at ;
+
+TAGS>
+
+: parse-modes-tag ( tag -- modes )
+    H{ } clone [
+        swap child-tags [ parse-mode-tag ] curry* each
+    ] keep ;
+
+: load-catalog ( -- modes )
+    "extra/xmode/modes/catalog" resource-path
+    <file-reader> read-xml parse-modes-tag ;
+
+: modes ( -- assoc )
+    \ modes get-global [
+        load-catalog dup \ modes set-global
+    ] unless* ;
+
+: reset-catalog ( -- )
+    f \ modes set-global ;
+
+MEMO: (load-mode) ( name -- rule-sets )
+    modes at mode-file
+    "extra/xmode/modes/" swap append
+    resource-path <file-reader> parse-mode ;
+
+SYMBOL: rule-sets
+
+: get-rule-set ( name -- rule-sets rules )
+    "::" split1 [ swap (load-mode) ] [ rule-sets get ] if*
+    tuck at ;
+
+: resolve-delegate ( rule -- )
+    dup rule-delegate dup string?
+    [ get-rule-set nip swap set-rule-delegate ] [ 2drop ] if ;
+
+: each-rule ( rule-set quot -- )
+    >r rule-set-rules values concat r> each ; inline
+
+: resolve-delegates ( ruleset -- )
+    [ resolve-delegate ] each-rule ;
+
+: ?update ( keyword-map/f keyword-map -- keyword-map )
+    over [ dupd update ] [ nip clone ] if ;
+
+: import-keywords ( parent child -- )
+    over >r [ rule-set-keywords ] 2apply ?update
+    r> set-rule-set-keywords ;
+
+: import-rules ( parent child -- )
+    swap [ add-rule ] curry each-rule ;
+
+: resolve-imports ( ruleset -- )
+    dup rule-set-imports [
+        get-rule-set dup [
+            swap rule-sets [
+                2dup import-keywords
+                import-rules
+            ] with-variable
+        ] [
+            3drop
+        ] if
+    ] curry* each ;
+
+: finalize-rule-set ( ruleset -- )
+    dup rule-set-finalized? {
+        { f [
+            1 over set-rule-set-finalized?
+            dup resolve-imports
+            dup resolve-delegates
+            t swap set-rule-set-finalized?
+        ] }
+        { t [ drop ] }
+        { 1 [ "Mutually recursive rule sets" throw ] }
+    } case ;
+
+: finalize-mode ( rulesets -- )
+    rule-sets [
+        dup [ nip finalize-rule-set ] assoc-each
+    ] with-variable ;
+
+: load-mode ( name -- rule-sets )
+    (load-mode) dup finalize-mode ;
+
+: reset-modes ( -- )
+    \ load-mode "memoize" word-prop clear-assoc ;
+
+: ?glob-matches ( string glob/f -- ? )
+    dup [ glob-matches? ] [ 2drop f ] if ;
+
+: suitable-mode? ( file-name first-line mode -- ? )
+    tuck mode-first-line-glob ?glob-matches
+    [ 2drop t ] [ mode-file-name-glob ?glob-matches ] if ;
+
+: find-mode ( file-name first-line -- mode )
+    modes
+    [ nip >r 2dup r> suitable-mode? ] assoc-find
+    2drop >r 2drop r> [ "text" ] unless* ;
diff --git a/extra/xmode/code2html/code2html.factor b/extra/xmode/code2html/code2html.factor
new file mode 100755 (executable)
index 0000000..dfc5098
--- /dev/null
@@ -0,0 +1,45 @@
+USING: xmode.tokens xmode.marker
+xmode.catalog kernel html html.elements io io.files
+sequences words ;
+IN: xmode.code2html
+
+: htmlize-tokens ( tokens -- )
+    [
+        dup token-str swap token-id [
+            <span word-name =class span> write </span>
+        ] [
+            write
+        ] if*
+    ] each ;
+
+: htmlize-line ( line-context line rules -- line-context' )
+    tokenize-line htmlize-tokens ;
+
+: htmlize-lines ( lines mode -- )
+    f swap load-mode [ htmlize-line nl ] curry reduce drop ;
+
+: default-stylesheet ( -- )
+    <style>
+        "extra/xmode/code2html/stylesheet.css"
+        resource-path <file-reader> contents write
+    </style> ;
+
+: htmlize-stream ( path stream -- )
+    lines swap
+    <html>
+        <head>
+            default-stylesheet
+            <title> dup write </title>
+        </head>
+        <body>
+            <pre>
+                over empty?
+                [ 2drop ]
+                [ over first find-mode htmlize-lines ] if
+            </pre>
+        </body>
+    </html> ;
+
+: htmlize-file ( path -- )
+    dup <file-reader> over ".html" append <file-writer>
+    [ htmlize-stream ] with-stream ;
diff --git a/extra/xmode/code2html/stylesheet.css b/extra/xmode/code2html/stylesheet.css
new file mode 100644 (file)
index 0000000..4cd4f8b
--- /dev/null
@@ -0,0 +1,63 @@
+.NULL {
+color: #000000;
+}
+.COMMENT1 {
+color: #cc0000;
+}
+.COMMENT2 {
+color: #ff8400;
+}
+.COMMENT3 {
+color: #6600cc;
+}
+.COMMENT4 {
+color: #cc6600;
+}
+.DIGIT {
+color: #ff0000;
+}
+.FUNCTION {
+color: #9966ff;
+}
+.INVALID {
+background: #ffffcc;
+color: #ff0066;
+}
+.KEYWORD1 {
+color: #006699;
+font-weight: bold;
+}
+.KEYWORD2 {
+color: #009966;
+font-weight: bold;
+}
+.KEYWORD3 {
+color: #0099ff;
+font-weight: bold;
+}
+.KEYWORD4 {
+color: #66ccff;
+font-weight: bold;
+}
+.LABEL {
+color: #02b902;
+}
+.LITERAL1 {
+color: #ff00cc;
+}
+.LITERAL2 {
+color: #cc00cc;
+}
+.LITERAL3 {
+color: #9900cc;
+}
+.LITERAL4 {
+color: #6600cc;
+}
+.MARKUP {
+color: #0000ff;
+}
+.OPERATOR {
+color: #000000;
+font-weight: bold;
+}
diff --git a/extra/xmode/keyword-map/keyword-map-tests.factor b/extra/xmode/keyword-map/keyword-map-tests.factor
new file mode 100644 (file)
index 0000000..9fbe911
--- /dev/null
@@ -0,0 +1,30 @@
+IN: temporary
+USING: xmode.keyword-map xmode.tokens
+tools.test namespaces assocs kernel strings ;
+
+f <keyword-map> dup "k" set
+
+{
+    { "int" KEYWORD1 }
+    { "void" KEYWORD2 }
+    { "size_t" KEYWORD3 }
+} update
+
+[ 3 ] [ "k" get assoc-size ] unit-test
+[ KEYWORD1 ] [ "int" "k" get at ] unit-test
+[ "_" ] [ "k" get keyword-map-no-word-sep* >string ] unit-test
+[ ] [ LITERAL1 "x-y" "k" get set-at ] unit-test
+[ "-_" ] [ "k" get keyword-map-no-word-sep* >string ] unit-test
+
+t <keyword-map> dup "k" set
+{
+    { "Foo" KEYWORD1 }
+    { "bbar" KEYWORD2 }
+    { "BAZ" KEYWORD3 }
+} update
+
+[ KEYWORD1 ] [ "fOo" "k" get at ] unit-test
+
+[ KEYWORD2 ] [ "BBAR" "k" get at ] unit-test
+
+[ KEYWORD3 ] [ "baz" "k" get at ] unit-test
diff --git a/extra/xmode/keyword-map/keyword-map.factor b/extra/xmode/keyword-map/keyword-map.factor
new file mode 100644 (file)
index 0000000..350d857
--- /dev/null
@@ -0,0 +1,36 @@
+USING: kernel strings assocs sequences hashtables sorting ;
+IN: xmode.keyword-map
+
+! Based on org.gjt.sp.jedit.syntax.KeywordMap
+TUPLE: keyword-map no-word-sep ignore-case? ;
+
+: <keyword-map> ( ignore-case? -- map )
+    H{ } clone { set-keyword-map-ignore-case? set-delegate }
+    keyword-map construct ;
+
+: invalid-no-word-sep f swap set-keyword-map-no-word-sep ;
+
+: handle-case ( key keyword-map -- key assoc )
+    [ keyword-map-ignore-case? [ >upper ] when ] keep
+    delegate ;
+
+M: keyword-map at* handle-case at* ;
+
+M: keyword-map set-at
+    [ handle-case set-at ] keep invalid-no-word-sep ;
+
+M: keyword-map clear-assoc
+    [ delegate clear-assoc ] keep invalid-no-word-sep ;
+
+M: keyword-map >alist delegate >alist ;
+
+: (keyword-map-no-word-sep)
+    keys concat [ alpha? not ] subset prune natural-sort ;
+
+: keyword-map-no-word-sep* ( keyword-map -- str )
+    dup keyword-map-no-word-sep [ ] [
+        dup (keyword-map-no-word-sep)
+        dup rot set-keyword-map-no-word-sep
+    ] ?if ;
+
+INSTANCE: keyword-map assoc
diff --git a/extra/xmode/loader/loader.factor b/extra/xmode/loader/loader.factor
new file mode 100755 (executable)
index 0000000..ac1d1d6
--- /dev/null
@@ -0,0 +1,182 @@
+USING: xmode.tokens xmode.rules xmode.keyword-map xml.data
+xml.utilities xml assocs kernel combinators sequences
+math.parser namespaces parser xmode.utilities regexp io.files ;
+IN: xmode.loader
+
+! Based on org.gjt.sp.jedit.XModeHandler
+
+SYMBOL: ignore-case?
+
+! Attribute utilities
+: string>boolean ( string -- ? ) "TRUE" = ;
+
+: string>match-type ( string -- obj )
+    {
+        { "RULE" [ f ] }
+        { "CONTEXT" [ t ] }
+        [ string>token ]
+    } case ;
+
+: string>rule-set-name "MAIN" or ;
+
+! PROP, PROPS
+: parse-prop-tag ( tag -- key value )
+    "NAME" over at "VALUE" rot at ;
+
+: parse-props-tag ( tag -- assoc )
+    child-tags
+    [ parse-prop-tag ] H{ } map>assoc ;
+
+: position-attrs ( tag -- at-line-start? at-whitespace-end? at-word-start? )
+    ! XXX Wrong logic!
+    { "AT_LINE_START" "AT_WHITESPACE_END" "AT_WORD_START" }
+    swap [ at string>boolean ] curry map first3 ;
+
+: parse-literal-matcher ( tag -- matcher )
+    dup children>string
+    ignore-case? get <string-matcher>
+    swap position-attrs <matcher> ;
+
+: parse-regexp-matcher ( tag -- matcher )
+    dup children>string ignore-case? get <regexp>
+    swap position-attrs <matcher> ;
+
+! SPAN's children
+<TAGS: parse-begin/end-tag
+
+TAG: BEGIN
+    ! XXX
+    parse-literal-matcher swap set-rule-start ;
+
+TAG: END
+    ! XXX
+    parse-literal-matcher swap set-rule-end ;
+
+TAGS>
+
+! RULES and its children
+<TAGS: parse-rule-tag
+
+TAG: PROPS ( rule-set tag -- )
+    parse-props-tag swap set-rule-set-props ;
+
+TAG: IMPORT ( rule-set tag -- )
+    "DELEGATE" swap at swap import-rule-set ;
+
+TAG: TERMINATE ( rule-set tag -- )
+    "AT_CHAR" swap at string>number swap set-rule-set-terminate-char ;
+
+: (parse-rule-tag) ( rule-set tag specs class -- )
+    construct-rule swap init-from-tag swap add-rule ; inline
+
+: RULE:
+    scan scan-word
+    parse-definition { } make
+    swap [ (parse-rule-tag) ] 2curry (TAG:) ; parsing
+
+: shared-tag-attrs
+    { "TYPE" string>token set-rule-body-token } , ; inline
+
+: delegate-attr
+    { "DELEGATE" f set-rule-delegate } , ;
+
+: regexp-attr
+    { "HASH_CHAR" f set-rule-chars } , ;
+
+: match-type-attr
+    { "MATCH_TYPE" string>match-type set-rule-match-token } , ;
+
+: span-attrs
+    { "NO_LINE_BREAK" string>boolean set-rule-no-line-break? } ,
+    { "NO_WORD_BREAK" string>boolean set-rule-no-word-break? } ,
+    { "NO_ESCAPE" string>boolean set-rule-no-escape? } , ;
+
+: literal-start
+    [ parse-literal-matcher swap set-rule-start ] , ;
+
+: regexp-start
+    [ parse-regexp-matcher swap set-rule-start ] , ;
+
+: literal-end
+    [ parse-literal-matcher swap set-rule-end ] , ;
+
+RULE: SEQ seq-rule
+    shared-tag-attrs delegate-attr literal-start ;
+
+RULE: SEQ_REGEXP seq-rule
+    shared-tag-attrs delegate-attr regexp-attr regexp-start ;
+
+: parse-begin/end-tags
+    [
+        ! XXX: handle position attrs on span tag itself
+        child-tags [ parse-begin/end-tag ] curry* each
+    ] , ;
+
+: init-span-tag [ drop init-span ] , ;
+
+: init-eol-span-tag [ drop init-eol-span ] , ;
+
+RULE: SPAN span-rule
+    shared-tag-attrs delegate-attr match-type-attr span-attrs parse-begin/end-tags init-span-tag ;
+
+RULE: SPAN_REGEXP span-rule
+    shared-tag-attrs delegate-attr match-type-attr span-attrs regexp-attr parse-begin/end-tags init-span-tag ;
+
+RULE: EOL_SPAN eol-span-rule
+    shared-tag-attrs delegate-attr match-type-attr literal-start init-eol-span-tag ;
+
+RULE: EOL_SPAN_REGEXP eol-span-rule
+    shared-tag-attrs delegate-attr match-type-attr regexp-attr regexp-start init-eol-span-tag ;
+
+RULE: MARK_FOLLOWING mark-following-rule
+    shared-tag-attrs match-type-attr literal-start ;
+
+RULE: MARK_PREVIOUS mark-previous-rule
+    shared-tag-attrs match-type-attr literal-start ;
+
+: parse-keyword-tag ( tag keyword-map -- )
+    >r dup name-tag string>token swap children>string r> set-at ;
+
+TAG: KEYWORDS ( rule-set tag -- key value )
+    ignore-case? get <keyword-map>
+    swap child-tags [ over parse-keyword-tag ] each
+    swap set-rule-set-keywords ;
+
+TAGS>
+
+: ?<regexp> dup [ ignore-case? get <regexp> ] when ;
+
+: (parse-rules-tag) ( tag -- rule-set )
+    <rule-set>
+    {
+        { "SET" string>rule-set-name set-rule-set-name }
+        { "IGNORE_CASE" string>boolean set-rule-set-ignore-case? }
+        { "HIGHLIGHT_DIGITS" string>boolean set-rule-set-highlight-digits? }
+        { "DIGIT_RE" ?<regexp> set-rule-set-digit-re }
+        { "ESCAPE" f add-escape-rule }
+        { "DEFAULT" string>token set-rule-set-default }
+        { "NO_WORD_SEP" f set-rule-set-no-word-sep }
+    } init-from-tag ;
+
+: parse-rules-tag ( tag -- rule-set )
+    dup (parse-rules-tag) [
+        dup rule-set-ignore-case? ignore-case? [
+            swap child-tags [ parse-rule-tag ] curry* each
+        ] with-variable
+    ] keep ;
+
+: merge-rule-set-props ( props rule-set -- )
+    [ rule-set-props union ] keep set-rule-set-props ;
+
+! Top-level entry points
+: parse-mode-tag ( tag -- rule-sets )
+    dup "RULES" tags-named [
+        parse-rules-tag dup rule-set-name swap
+    ] H{ } map>assoc
+    swap "PROPS" tag-named [
+        parse-props-tag over values
+        [ merge-rule-set-props ] curry* each
+    ] when* ;
+
+: parse-mode ( stream -- rule-sets )
+    read-xml parse-mode-tag ;
diff --git a/extra/xmode/marker/context/context.factor b/extra/xmode/marker/context/context.factor
new file mode 100644 (file)
index 0000000..8023e1d
--- /dev/null
@@ -0,0 +1,19 @@
+USING: kernel ;
+IN: xmode.marker.context
+
+! Based on org.gjt.sp.jedit.syntax.TokenMarker.LineContext
+TUPLE: line-context
+parent
+in-rule
+in-rule-set
+end
+;
+
+: <line-context> ( ruleset parent -- line-context )
+    { set-line-context-in-rule-set set-line-context-parent }
+    line-context construct ;
+
+M: line-context clone
+    (clone)
+    dup line-context-parent clone
+    over set-line-context-parent ;
diff --git a/extra/xmode/marker/marker-tests.factor b/extra/xmode/marker/marker-tests.factor
new file mode 100755 (executable)
index 0000000..b9621a1
--- /dev/null
@@ -0,0 +1,135 @@
+USING: xmode.tokens xmode.catalog
+xmode.marker tools.test kernel ;
+IN: temporary
+
+[
+    {
+        T{ token f "int" KEYWORD3 }
+        T{ token f " " f }
+        T{ token f "x" f }
+    }
+] [ f "int x" "c" load-mode tokenize-line nip ] unit-test
+
+[
+    {
+        T{ token f "\"" LITERAL1 }
+        T{ token f "hello\\\"" LITERAL1 }
+        T{ token f " " LITERAL1 }
+        T{ token f "world" LITERAL1 }
+        T{ token f "\"" LITERAL1 }
+    }
+] [ f "\"hello\\\" world\"" "c" load-mode tokenize-line nip ] unit-test
+
+[
+    {
+        T{ token f "\"" LITERAL1 }
+        T{ token f "hello\\\ world" LITERAL1 }
+        T{ token f "\"" LITERAL1 }
+    }
+] [ f "\"hello\\\ world\"" "c" load-mode tokenize-line nip ] unit-test
+
+[
+    {
+        T{ token f "int" KEYWORD3 }
+        T{ token f " " f }
+        T{ token f "x" f }
+    }
+] [ f "int x" "java" load-mode tokenize-line nip ] unit-test
+
+[
+    {
+        T{ token f "//" COMMENT2 }
+        T{ token f " " COMMENT2 }
+        T{ token f "hello" COMMENT2 }
+        T{ token f " " COMMENT2 }
+        T{ token f "world" COMMENT2 }
+    }
+] [ f "// hello world" "java" load-mode tokenize-line nip ] unit-test
+
+
+[
+    {
+        T{ token f "hello" f }
+        T{ token f " " f }
+        T{ token f "world" f }
+        T{ token f ":" f }
+    }
+] [ f "hello world:" "java" load-mode tokenize-line nip ] unit-test
+
+[
+    {
+        T{ token f "hello_world" LABEL }
+        T{ token f ":" OPERATOR }
+    }
+] [ f "hello_world:" "java" load-mode tokenize-line nip ] unit-test
+
+[
+    {
+        T{ token f "\t" f }
+        T{ token f "hello_world" LABEL }
+        T{ token f ":" OPERATOR }
+    }
+] [ f "\thello_world:" "java" load-mode tokenize-line nip ] unit-test
+
+[
+    {
+        T{ token f "<!" KEYWORD2 }
+        T{ token f "ELEMENT" KEYWORD2 }
+        T{ token f " " KEYWORD2 }
+        T{ token f "%" LITERAL2 }
+        T{ token f "hello" LITERAL2 }
+        T{ token f ";" LITERAL2 }
+        T{ token f " " KEYWORD2 }
+        T{ token f ">" KEYWORD2 }
+    }
+] [
+     f "<!ELEMENT %hello; >" "xml" load-mode tokenize-line nip
+] unit-test
+
+[
+    {
+        T{ token f "<!" KEYWORD2 }
+        T{ token f "ELEMENT" KEYWORD2 }
+        T{ token f " " KEYWORD2 }
+        T{ token f "%" LITERAL2 }
+        T{ token f "hello-world" LITERAL2 }
+        T{ token f ";" LITERAL2 }
+        T{ token f " " KEYWORD2 }
+        T{ token f ">" KEYWORD2 }
+    }
+] [
+     f "<!ELEMENT %hello-world; >" "xml" load-mode tokenize-line nip
+] unit-test
+
+[
+    {
+        T{ token f "$" KEYWORD2 }
+        T{ token f "FOO" KEYWORD2 }
+    }
+] [
+    f "$FOO" "shellscript" load-mode tokenize-line nip
+] unit-test
+
+[
+    {
+        T{ token f "AND" KEYWORD1 }
+    }
+] [
+    f "AND" "pascal" load-mode tokenize-line nip
+] unit-test
+
+[
+    {
+        T{ token f "Comment {" COMMENT1 }
+        T{ token f "XXX" COMMENT1 }
+        T{ token f "}" COMMENT1 }
+    }
+] [
+    f "Comment {XXX}" "rebol" load-mode tokenize-line nip
+] unit-test
+
+[
+    
+] [
+    f "font:75%/1.6em \"Lucida Grande\", \"Lucida Sans Unicode\", verdana, geneva, sans-serif;" "css" load-mode tokenize-line 2drop
+] unit-test
diff --git a/extra/xmode/marker/marker.factor b/extra/xmode/marker/marker.factor
new file mode 100755 (executable)
index 0000000..b8331fe
--- /dev/null
@@ -0,0 +1,304 @@
+IN: xmode.marker
+USING: kernel namespaces xmode.rules xmode.tokens
+xmode.marker.state xmode.marker.context xmode.utilities
+xmode.catalog sequences math assocs combinators combinators.lib
+strings regexp splitting parser-combinators ;
+
+! Based on org.gjt.sp.jedit.syntax.TokenMarker
+
+: current-keyword ( -- string )
+    last-offset get position get line get subseq ;
+
+: keyword-number? ( keyword -- ? )
+    {
+        [ current-rule-set rule-set-highlight-digits? ]
+        [ dup [ digit? ] contains? ]
+        [
+            dup [ digit? ] all? [
+                current-rule-set rule-set-digit-re
+                dup [ dupd matches? ] [ drop f ] if
+            ] unless*
+        ]
+    } && nip ;
+
+: mark-number ( keyword -- id )
+    keyword-number? DIGIT and ;
+
+: mark-keyword ( keyword -- id )
+    current-rule-set rule-set-keywords at ;
+
+: add-remaining-token ( -- )
+    current-rule-set rule-set-default prev-token, ;
+
+: mark-token ( -- )
+    current-keyword
+    dup mark-number [ ] [ mark-keyword ] ?if
+    [ prev-token, ] when* ;
+
+: current-char ( -- char )
+    position get line get nth ;
+
+GENERIC: match-position ( rule -- n )
+
+M: mark-previous-rule match-position drop last-offset get ;
+
+M: rule match-position drop position get ;
+
+: can-match-here? ( matcher rule -- ? )
+    match-position {
+        [ over ]
+        [ over matcher-at-line-start?     over zero?                implies ]
+        [ over matcher-at-whitespace-end? over whitespace-end get = implies ]
+        [ over matcher-at-word-start?     over last-offset get =    implies ]
+    } && 2nip ;
+
+: rest-of-line ( -- str )
+    line get position get tail-slice ;
+
+GENERIC: text-matches? ( string text -- match-count/f )
+
+M: f text-matches?
+    2drop f ;
+
+M: string-matcher text-matches?
+    [
+        dup string-matcher-string
+        swap string-matcher-ignore-case?
+        string-head?
+    ] keep string-matcher-string length and ;
+
+M: regexp text-matches?
+    >r >string r> match-head ;
+
+: rule-start-matches? ( rule -- match-count/f )
+    dup rule-start tuck swap can-match-here? [
+        rest-of-line swap matcher-text text-matches?
+    ] [
+        drop f
+    ] if ;
+
+: rule-end-matches? ( rule -- match-count/f )
+    dup mark-following-rule? [
+        dup rule-start swap can-match-here? 0 and
+    ] [
+        dup rule-end tuck swap can-match-here? [
+            rest-of-line
+            swap matcher-text context get line-context-end or
+            text-matches?
+        ] [
+            drop f
+        ] if
+    ] if ;
+
+DEFER: get-rules
+
+: get-always-rules ( vector/f ruleset -- vector/f )
+    f swap rule-set-rules at ?push-all ;
+
+: get-char-rules ( vector/f char ruleset -- vector/f )
+    >r ch>upper r> rule-set-rules at ?push-all ;
+
+: get-rules ( char ruleset -- seq )
+    f -rot [ get-char-rules ] keep get-always-rules ;
+
+GENERIC: handle-rule-start ( match-count rule -- )
+
+GENERIC: handle-rule-end ( match-count rule -- )
+
+: find-escape-rule ( -- rule )
+    context get dup
+    line-context-in-rule-set rule-set-escape-rule [ ] [
+        line-context-parent line-context-in-rule-set
+        dup [ rule-set-escape-rule ] when
+    ] ?if ;
+
+: check-escape-rule ( rule -- ? )
+    rule-no-escape? [ f ] [
+        find-escape-rule dup [
+            dup rule-start-matches? dup [
+                swap handle-rule-start
+                delegate-end-escaped? [ not ] change
+                t
+            ] [
+                2drop f
+            ] if
+        ] when
+    ] if ;
+
+: check-every-rule ( -- ? )
+    current-char current-rule-set get-rules
+    [ rule-start-matches? ] map-find
+    dup [ handle-rule-start t ] [ 2drop f ] if ;
+
+: ?end-rule ( -- )
+    current-rule [
+        dup rule-end-matches?
+        dup [ swap handle-rule-end ] [ 2drop ] if
+    ] when* ;
+
+: rule-match-token* ( rule -- id )
+    dup rule-match-token {
+        { f [ dup rule-body-token ] }
+        { t [ current-rule-set rule-set-default ] }
+        [ ]
+    } case nip ;
+
+M: escape-rule handle-rule-start
+    drop
+    ?end-rule
+    process-escape? get [
+        escaped? [ not ] change
+        position [ + ] change
+    ] [ 2drop ] if ;
+
+M: seq-rule handle-rule-start
+    ?end-rule
+    mark-token
+    add-remaining-token
+    tuck rule-body-token next-token,
+    rule-delegate [ push-context ] when* ;
+
+UNION: abstract-span-rule span-rule eol-span-rule ;
+
+M: abstract-span-rule handle-rule-start
+    ?end-rule
+    mark-token
+    add-remaining-token
+    tuck rule-match-token* next-token,
+    ! ... end subst ...
+    dup context get set-line-context-in-rule
+    rule-delegate push-context ;
+
+M: span-rule handle-rule-end
+    2drop ;
+
+M: mark-following-rule handle-rule-start
+    ?end-rule
+    mark-token add-remaining-token
+    tuck rule-match-token* next-token,
+    f context get set-line-context-end
+    context get set-line-context-in-rule ;
+
+M: mark-following-rule handle-rule-end
+    nip rule-match-token* prev-token,
+    f context get set-line-context-in-rule ;
+
+M: mark-previous-rule handle-rule-start
+    ?end-rule
+    mark-token
+    dup rule-body-token prev-token,
+    rule-match-token* next-token, ;
+
+: do-escaped
+    escaped? get [
+        escaped? off
+        ! ...
+    ] when ;
+
+: check-end-delegate ( -- ? )
+    context get line-context-parent [
+        line-context-in-rule [
+            dup rule-end-matches? dup [
+                [
+                    swap handle-rule-end
+                    ?end-rule
+                    mark-token
+                    add-remaining-token
+                ] keep context get line-context-parent line-context-in-rule rule-match-token* next-token,
+                pop-context
+                seen-whitespace-end? on t
+            ] [ drop check-escape-rule ] if
+        ] [ f ] if*
+    ] [ f ] if* ;
+
+: handle-no-word-break ( -- )
+    context get line-context-parent [
+        line-context-in-rule [
+            dup rule-no-word-break? [
+                rule-match-token* prev-token,
+                pop-context
+            ] [ drop ] if
+        ] when*
+    ] when* ;
+
+: check-rule ( -- )
+    ?end-rule
+    handle-no-word-break
+    mark-token
+    add-remaining-token ;
+
+: (check-word-break) ( -- )
+    check-rule
+    
+    1 current-rule-set rule-set-default next-token, ;
+
+: rule-set-empty? ( ruleset -- ? )
+    dup rule-set-rules assoc-empty?
+    swap rule-set-keywords assoc-empty? and ;
+
+: check-word-break ( -- ? )
+    current-char dup blank? [
+        drop
+
+        seen-whitespace-end? get [
+            position get 1+ whitespace-end set
+        ] unless
+
+        (check-word-break)
+
+    ] [
+        ! Micro-optimization with incorrect semantics; we keep
+        ! it here because jEdit mode files depend on it now...
+        current-rule-set rule-set-empty? [
+            drop
+        ] [
+            dup alpha? [
+                drop
+            ] [
+                current-rule-set rule-set-no-word-sep* member? [
+                    (check-word-break)
+                ] unless
+            ] if
+        ] if
+
+        seen-whitespace-end? on
+    ] if
+    escaped? off
+    delegate-end-escaped? off t ;
+
+
+: mark-token-loop ( -- )
+    position get line get length < [
+        {
+            [ check-end-delegate ]
+            [ check-every-rule ]
+            [ check-word-break ]
+        } || drop
+
+        position inc
+        mark-token-loop
+    ] when ;
+
+: mark-remaining ( -- )
+    line get length position set
+    check-rule ;
+
+: unwind-no-line-break ( -- )
+    context get line-context-parent [
+        line-context-in-rule [
+            rule-no-line-break? [
+                pop-context
+                unwind-no-line-break
+            ] when
+        ] when*
+    ] when* ;
+
+: tokenize-line ( line-context line rules -- line-context' seq )
+    [
+        "MAIN" swap at -rot
+        init-token-marker
+        mark-token-loop
+        mark-remaining
+        unwind-no-line-break
+        context get
+    ] { } make ;
diff --git a/extra/xmode/marker/state/state.factor b/extra/xmode/marker/state/state.factor
new file mode 100755 (executable)
index 0000000..35e6bbe
--- /dev/null
@@ -0,0 +1,53 @@
+USING: xmode.marker.context xmode.rules
+xmode.tokens namespaces kernel sequences assocs math ;
+IN: xmode.marker.state
+
+! Based on org.gjt.sp.jedit.syntax.TokenMarker
+
+SYMBOL: line
+SYMBOL: last-offset
+SYMBOL: position
+SYMBOL: context
+
+SYMBOL: whitespace-end
+SYMBOL: seen-whitespace-end?
+
+SYMBOL: escaped?
+SYMBOL: process-escape?
+SYMBOL: delegate-end-escaped?
+
+: current-rule ( -- rule )
+    context get line-context-in-rule ;
+
+: current-rule-set ( -- rule )
+    context get line-context-in-rule-set ;
+
+: current-keywords ( -- keyword-map )
+    current-rule-set rule-set-keywords ;
+
+: token, ( from to id -- )
+    pick pick = [ 3drop ] [ >r line get subseq r> <token> , ] if ;
+
+: prev-token, ( id -- )
+    >r last-offset get position get r> token,
+    position get last-offset set ;
+
+: next-token, ( len id -- )
+    >r position get 2dup + r> token,
+    position get + dup 1- position set last-offset set ;
+
+: push-context ( rules -- )
+    context [ <line-context> ] change ;
+
+: pop-context ( -- )
+    context get line-context-parent
+    dup context set
+    f swap set-line-context-in-rule ;
+
+: init-token-marker ( main prev-context line -- )
+    line set
+    [ ] [ f <line-context> ] ?if context set
+    0 position set
+    0 last-offset set
+    0 whitespace-end set
+    process-escape? on ;
diff --git a/extra/xmode/modes/actionscript.xml b/extra/xmode/modes/actionscript.xml
new file mode 100644 (file)
index 0000000..387258d
--- /dev/null
@@ -0,0 +1,829 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+       ActionScript mode by Ben Glazer <ben@enspire.com>\r
+       Adapted from JavaScript mode by Andre Kaplan\r
+       Updated for Flash MX 2004 by Nahuel Foronda <www.asfusion.com>\r
+-->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <!-- the ; hack is there so that stuff like if(bob) fred();\r
+                    does not indent the next line -->\r
+               <PROPERTY NAME="indentPrevLine" VALUE="\s*(if|while)\s*(|else|case|default:)[^;]*|for\s*\(.*)" />\r
+               <!-- set this to 'true' if you want to use GNU coding style -->\r
+               <PROPERTY NAME="doubleBracketIndent" VALUE="false" />\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+       </PROPS>\r
+\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- whitespace: (space and tab) -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">//</EOL_SPAN>\r
+               <SEQ TYPE="NULL">)</SEQ>\r
+               <SEQ TYPE="NULL">(</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">;</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+                       AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <!-- ActionScript's reserved words (see AS:TDG p.332) -->\r
+                       <KEYWORD1>add</KEYWORD1>   <!-- deprecated -->\r
+                       <KEYWORD1>and</KEYWORD1>   <!-- deprecated -->\r
+                       <KEYWORD1>break</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+                       <KEYWORD1>delete</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>eq</KEYWORD1>   <!-- deprecated -->\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>function</KEYWORD1>\r
+                       <KEYWORD1>ge</KEYWORD1>   <!-- deprecated -->\r
+                       <KEYWORD1>gt</KEYWORD1>   <!-- deprecated -->\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>ifFrameLoaded</KEYWORD1>   <!-- deprecated -->\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <KEYWORD1>le</KEYWORD1>   <!-- deprecated -->\r
+                       <KEYWORD1>lt</KEYWORD1>   <!-- deprecated -->\r
+                       <KEYWORD1>ne</KEYWORD1>   <!-- deprecated -->\r
+                       <KEYWORD1>new</KEYWORD1>\r
+                       <KEYWORD1>not</KEYWORD1>   <!-- deprecated -->\r
+                       <KEYWORD1>on</KEYWORD1>\r
+                       <KEYWORD1>onClipEvent</KEYWORD1>\r
+                       <KEYWORD1>or</KEYWORD1>   <!-- deprecated -->\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <LITERAL2>this</LITERAL2>\r
+                       <KEYWORD1>tellTarget</KEYWORD1>   <!-- deprecated -->\r
+                       <KEYWORD1>typeof</KEYWORD1>\r
+                       <KEYWORD1>var</KEYWORD1>\r
+                       <KEYWORD3>void</KEYWORD3>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+                       <KEYWORD1>with</KEYWORD1>\r
+\r
+                       <!-- Built-in objects (good idea not to use these names!)-->\r
+                       <KEYWORD3>Array</KEYWORD3>\r
+                       <KEYWORD3>Boolean</KEYWORD3>\r
+                       <KEYWORD3>Color</KEYWORD3>\r
+                       <KEYWORD3>Date</KEYWORD3>\r
+                       <KEYWORD3>Function</KEYWORD3>\r
+                       <KEYWORD3>Key</KEYWORD3>\r
+                       <KEYWORD3>MovieClip</KEYWORD3>\r
+                       <KEYWORD3>Math</KEYWORD3>\r
+                       <KEYWORD3>Mouse</KEYWORD3>\r
+                       <KEYWORD3>Number</KEYWORD3>\r
+                       <KEYWORD3>Object</KEYWORD3>\r
+                       <KEYWORD3>Selection</KEYWORD3>\r
+                       <KEYWORD3>Sound</KEYWORD3>\r
+                       <KEYWORD3>String</KEYWORD3>\r
+                       <KEYWORD3>XML</KEYWORD3>\r
+                       <KEYWORD3>XMLNode</KEYWORD3>\r
+                       <KEYWORD3>XMLSocket</KEYWORD3>\r
+\r
+                       <!-- Literals -->\r
+                       <LITERAL2>NaN</LITERAL2>\r
+                       <LITERAL2>Infinity</LITERAL2>\r
+                       <LITERAL2>false</LITERAL2>\r
+                       <LITERAL2>null</LITERAL2>\r
+                       <LITERAL2>true</LITERAL2>\r
+                       <LITERAL2>undefined</LITERAL2>\r
+\r
+                       <!-- Global functions -->\r
+                       <LITERAL2>Boolean</LITERAL2>\r
+                       <LITERAL2>call</LITERAL2>\r
+                       <LITERAL2>Date</LITERAL2>\r
+                       <LITERAL2>escape</LITERAL2>\r
+                       <LITERAL2>eval</LITERAL2>\r
+                       <LITERAL2>fscommand</LITERAL2>\r
+                       <LITERAL2>getProperty</LITERAL2>\r
+                       <LITERAL2>getTimer</LITERAL2>\r
+                       <LITERAL2>getURL</LITERAL2>\r
+                       <LITERAL2>getVersion</LITERAL2>\r
+                       <LITERAL2>gotoAndPlay</LITERAL2>\r
+                       <LITERAL2>gotoAndStop</LITERAL2>\r
+                       <LITERAL2>#include</LITERAL2>\r
+                       <LITERAL2>int</LITERAL2>   <!-- deprecated -->\r
+                       <LITERAL2>isFinite</LITERAL2>\r
+                       <LITERAL2>isNaN</LITERAL2>\r
+                       <LITERAL2>loadMovie</LITERAL2>\r
+                       <LITERAL2>loadMovieNum</LITERAL2>\r
+                       <LITERAL2>loadVariables</LITERAL2>\r
+                       <LITERAL2>loadVariablesNum</LITERAL2>\r
+                       <LITERAL2>maxscroll</LITERAL2>\r
+                       <LITERAL2>newline</LITERAL2>\r
+                       <LITERAL2>nextFrame</LITERAL2>\r
+                       <LITERAL2>nextScene</LITERAL2>\r
+                       <LITERAL2>Number</LITERAL2>\r
+                       <LITERAL2>parseFloat</LITERAL2>\r
+                       <LITERAL2>parseInt</LITERAL2>\r
+                       <LITERAL2>play</LITERAL2>\r
+                       <LITERAL2>prevFrame</LITERAL2>\r
+                       <LITERAL2>prevScene</LITERAL2>\r
+                       <LITERAL2>print</LITERAL2>\r
+                       <LITERAL2>printAsBitmap</LITERAL2>\r
+                       <LITERAL2>printAsBitmapNum</LITERAL2>\r
+                       <LITERAL2>printNum</LITERAL2>\r
+                       <LITERAL2>random</LITERAL2>   <!-- deprecated -->\r
+                       <LITERAL2>removeMovieClip</LITERAL2>\r
+                       <LITERAL2>scroll</LITERAL2>\r
+                       <LITERAL2>setProperty</LITERAL2>\r
+                       <LITERAL2>startDrag</LITERAL2>\r
+                       <LITERAL2>stop</LITERAL2>\r
+                       <LITERAL2>stopAllSounds</LITERAL2>\r
+                       <LITERAL2>stopDrag</LITERAL2>\r
+                       <LITERAL2>String</LITERAL2>\r
+                       <LITERAL2>targetPath</LITERAL2>\r
+                       <LITERAL2>tellTarget</LITERAL2>   <!-- deprecated -->\r
+                       <LITERAL2>toggleHighQuality</LITERAL2>   <!-- deprecated -->\r
+                       <LITERAL2>trace</LITERAL2>\r
+                       <LITERAL2>unescape</LITERAL2>\r
+                       <LITERAL2>unloadMovie</LITERAL2>\r
+                       <LITERAL2>unloadMovieNum</LITERAL2>\r
+                       <LITERAL2>updateAfterEvent</LITERAL2>\r
+\r
+                        <!-- Start Update -->\r
+                       <LITERAL2>prototype</LITERAL2>\r
+                       <LITERAL2>clearInterval</LITERAL2>\r
+                       <LITERAL2>getVersion</LITERAL2>\r
+                       <LITERAL2>length</LITERAL2>\r
+                       <LITERAL2>__proto__</LITERAL2>\r
+                       <LITERAL2>__constructor__</LITERAL2>\r
+                       <LITERAL2>ASSetPropFlags</LITERAL2>\r
+                       <LITERAL2>setInterval</LITERAL2>\r
+                       <LITERAL2>setI</LITERAL2>\r
+                       <KEYWORD3>MMExecute</KEYWORD3>\r
+\r
+                        <!-- MovieCLip methods-->\r
+                       <LITERAL2>attachMovie</LITERAL2>\r
+                       <LITERAL2>createEmptyMovieClip</LITERAL2>\r
+                       <LITERAL2>createTextField</LITERAL2>\r
+                       <LITERAL2>duplicateMovieClip</LITERAL2>\r
+                       <LITERAL2>getBounds</LITERAL2>\r
+                       <LITERAL2>getBytesLoaded</LITERAL2>\r
+                       <LITERAL2>getBytesTotal</LITERAL2>\r
+                       <LITERAL2>getDepth</LITERAL2>\r
+                       <LITERAL2>globalToLocal</LITERAL2>\r
+                       <LITERAL2>hitTest</LITERAL2>\r
+                       <LITERAL2>localToGlobal</LITERAL2>\r
+                       <LITERAL2>setMask</LITERAL2>\r
+                       <LITERAL2>swapDepths</LITERAL2>\r
+                       <LITERAL2>attachAudio</LITERAL2>\r
+                       <LITERAL2>getInstanceAtDepth</LITERAL2>\r
+                       <LITERAL2>getNextHighestDepth</LITERAL2>\r
+                       <LITERAL2>getSWFVersion</LITERAL2>\r
+                       <LITERAL2>getTextSnapshot</LITERAL2>\r
+                       <LITERAL2>getSWFVersion</LITERAL2>\r
+                       <LITERAL2>getSWFVersion</LITERAL2>\r
+\r
+                       <!-- MovieCLip drawing methods  -->\r
+                       <LITERAL2>beginFill</LITERAL2>\r
+                       <LITERAL2>beginGradientFill</LITERAL2>\r
+                       <LITERAL2>clear</LITERAL2>\r
+                       <LITERAL2>curveTo</LITERAL2>\r
+                       <LITERAL2>endFill</LITERAL2>\r
+                       <LITERAL2>lineStyle</LITERAL2>\r
+                       <LITERAL2>lineTo</LITERAL2>\r
+                       <LITERAL2>moveTo</LITERAL2>\r
+\r
+                       <!-- MovieCLip properties  -->\r
+                       <LITERAL2>enabled</LITERAL2>\r
+                       <LITERAL2>focusEnabled</LITERAL2>\r
+                       <LITERAL2>hitArea</LITERAL2>\r
+                       <LITERAL2>tabChildren</LITERAL2>\r
+                       <LITERAL2>tabEnabled</LITERAL2>\r
+                       <LITERAL2>tabIndex</LITERAL2>\r
+                       <LITERAL2>trackAsMenu</LITERAL2>\r
+                       <LITERAL2>menu</LITERAL2>\r
+                       <LITERAL2>useHandCursor</LITERAL2>\r
+\r
+                       <!-- MovieCLip Events  -->\r
+                       <LITERAL2>onData</LITERAL2>\r
+                       <LITERAL2>onDragOut</LITERAL2>\r
+                       <LITERAL2>onDragOver</LITERAL2>\r
+                       <LITERAL2>onEnterFrame</LITERAL2>\r
+                       <LITERAL2>onKeyDown</LITERAL2>\r
+                       <LITERAL2>onKeyUp</LITERAL2>\r
+                       <LITERAL2>onKillFocus</LITERAL2>\r
+                       <LITERAL2>onLoad</LITERAL2>\r
+                       <LITERAL2>onMouseDown</LITERAL2>\r
+                       <LITERAL2>onMouseMove</LITERAL2>\r
+                       <LITERAL2>onMouseUp</LITERAL2>\r
+                       <LITERAL2>onPress</LITERAL2>\r
+                       <LITERAL2>onRelease</LITERAL2>\r
+                       <LITERAL2>onReleaseOutside</LITERAL2>\r
+                       <LITERAL2>onRollOut</LITERAL2>\r
+                       <LITERAL2>onRollOver</LITERAL2>\r
+                       <LITERAL2>onSetFocus</LITERAL2>\r
+                       <LITERAL2>onUnload</LITERAL2>\r
+\r
+                       <!-- MovieClipLoader class -->\r
+                       <LITERAL2>MovieClipLoader</LITERAL2>\r
+                       <LITERAL2>getProgress</LITERAL2>\r
+                       <LITERAL2>loadClip</LITERAL2>\r
+                       <LITERAL2>onLoadComplete</LITERAL2>\r
+                       <LITERAL2>onLoadError</LITERAL2>\r
+                       <LITERAL2>onLoadInit</LITERAL2>\r
+                       <LITERAL2>onLoadProgress</LITERAL2>\r
+                       <LITERAL2>onLoadStart</LITERAL2>\r
+                       <LITERAL2>unloadClip</LITERAL2>\r
+\r
+                       <!-- PrintJob class -->\r
+                       <LITERAL2>PrintJob</LITERAL2>\r
+                       <LITERAL2>addPage</LITERAL2>\r
+\r
+                       <!-- Camera class -->\r
+                       <LITERAL2>Camera</LITERAL2>\r
+                       <LITERAL2>activityLevel</LITERAL2>\r
+                       <LITERAL2>bandwidth</LITERAL2>\r
+                       <LITERAL2>currentFps</LITERAL2>\r
+                       <LITERAL2>fps</LITERAL2>\r
+                       <LITERAL2>index</LITERAL2>\r
+                       <LITERAL2>motionLevel</LITERAL2>\r
+                       <LITERAL2>motionTimeOut</LITERAL2>\r
+                       <LITERAL2>muted</LITERAL2>\r
+                       <LITERAL2>name</LITERAL2>\r
+                       <LITERAL2>names</LITERAL2>\r
+                       <LITERAL2>onActivity</LITERAL2>\r
+                       <LITERAL2>onStatus</LITERAL2>\r
+                       <LITERAL2>quality</LITERAL2>\r
+                       <LITERAL2>setMode</LITERAL2>\r
+                       <LITERAL2>setMotionLevel</LITERAL2>\r
+                       <LITERAL2>setQuality</LITERAL2>\r
+\r
+                       <!-- Microphone class -->\r
+                       <LITERAL2>Microphone</LITERAL2>\r
+                       <LITERAL2>gain</LITERAL2>\r
+                       <LITERAL2>rate</LITERAL2>\r
+                       <LITERAL2>setGain</LITERAL2>\r
+                       <LITERAL2>setRate</LITERAL2>\r
+                       <LITERAL2>setSilenceLevel</LITERAL2>\r
+                       <LITERAL2>setUseEchoSuppression</LITERAL2>\r
+                       <LITERAL2>silenceLevel</LITERAL2>\r
+                       <LITERAL2>silenceTimeout</LITERAL2>\r
+                       <LITERAL2>useEchoSuppression</LITERAL2>\r
+\r
+                       <!-- ContextMenu Class -->\r
+                       <LITERAL2>ContextMenu</LITERAL2>\r
+                       <LITERAL2>builtInItems</LITERAL2>\r
+                       <LITERAL2>copy</LITERAL2>\r
+                       <LITERAL2>customItems</LITERAL2>\r
+                       <LITERAL2>hideBuiltInItems</LITERAL2>\r
+                       <LITERAL2>onSelect</LITERAL2>\r
+                       <LITERAL2>caption</LITERAL2>\r
+                       <LITERAL2>ContextMenuItem</LITERAL2>\r
+                       <LITERAL2>separatorBefore</LITERAL2>\r
+                       <LITERAL2>visible</LITERAL2>\r
+\r
+                       <!-- Error class -->\r
+                       <LITERAL2>Error</LITERAL2>\r
+                       <LITERAL2>visible</LITERAL2>\r
+                       <LITERAL2>message</LITERAL2>\r
+\r
+                       <!-- operators grenn-->\r
+                       <KEYWORD1>instanceof</KEYWORD1>\r
+                       <KEYWORD1>#endinitclip</KEYWORD1>\r
+                       <KEYWORD1>#initclip</KEYWORD1>\r
+\r
+                       <!-- properties -->\r
+                       <LITERAL2>_alpha</LITERAL2>\r
+                       <LITERAL2>_currentframe</LITERAL2>\r
+                       <LITERAL2>_droptarget</LITERAL2>\r
+                       <LITERAL2>_focusrect</LITERAL2>\r
+                       <LITERAL2>_framesloaded</LITERAL2>\r
+                       <LITERAL2>_height</LITERAL2>\r
+                       <LITERAL2>_name</LITERAL2>\r
+                       <LITERAL2>_quality</LITERAL2>\r
+                       <LITERAL2>_rotation</LITERAL2>\r
+                       <LITERAL2>_soundbuftime</LITERAL2>\r
+                       <LITERAL2>_target</LITERAL2>\r
+                       <LITERAL2>_totalframes</LITERAL2>\r
+                       <LITERAL2>_url</LITERAL2>\r
+                       <LITERAL2>_visible</LITERAL2>\r
+                       <LITERAL2>_width</LITERAL2>\r
+                       <LITERAL2>_x</LITERAL2>\r
+                       <LITERAL2>_xmouse</LITERAL2>\r
+                       <LITERAL2>_xscale</LITERAL2>\r
+                       <LITERAL2>_y</LITERAL2>\r
+                       <LITERAL2>_ymouse</LITERAL2>\r
+                       <LITERAL2>_yscale</LITERAL2>\r
+                       <LITERAL2>_parent</LITERAL2>\r
+                       <LITERAL2>_root</LITERAL2>\r
+                       <LITERAL2>_level</LITERAL2>\r
+                       <LITERAL2>_lockroot</LITERAL2>\r
+                       <LITERAL2>_accProps</LITERAL2>\r
+\r
+\r
+                       <!-- Array -->\r
+                       <LITERAL2>sortOn</LITERAL2>\r
+                       <LITERAL2>toString</LITERAL2>\r
+                       <LITERAL2>splice</LITERAL2>\r
+                       <LITERAL2>sort</LITERAL2>\r
+                       <LITERAL2>slice</LITERAL2>\r
+                       <LITERAL2>shift</LITERAL2>\r
+                       <LITERAL2>reverse</LITERAL2>\r
+                       <LITERAL2>push</LITERAL2>\r
+                       <LITERAL2>join</LITERAL2>\r
+                       <LITERAL2>pop</LITERAL2>\r
+                       <LITERAL2>concat</LITERAL2>\r
+                       <LITERAL2>unshift</LITERAL2>\r
+\r
+                       <!-- Arguments -->\r
+                       <LITERAL2>arguments</LITERAL2>\r
+                       <LITERAL2>callee</LITERAL2>\r
+                       <LITERAL2>caller</LITERAL2>\r
+                       <LITERAL2>valueOf</LITERAL2>\r
+\r
+                       <!-- Date Class -->\r
+                       <LITERAL2>getDate</LITERAL2>\r
+                       <LITERAL2>getDay</LITERAL2>\r
+                       <LITERAL2>getFullYear</LITERAL2>\r
+                       <LITERAL2>getHours</LITERAL2>\r
+                       <LITERAL2>getMilliseconds</LITERAL2>\r
+                       <LITERAL2>getMinutes</LITERAL2>\r
+                       <LITERAL2>getMonth</LITERAL2>\r
+                       <LITERAL2>getSeconds</LITERAL2>\r
+                       <LITERAL2>getTime</LITERAL2>\r
+                       <LITERAL2>getTimezoneOffset</LITERAL2>\r
+                       <LITERAL2>getUTCDate</LITERAL2>\r
+                       <LITERAL2>getUTCDay</LITERAL2>\r
+                       <LITERAL2>getUTCFullYear</LITERAL2>\r
+                       <LITERAL2>getUTCHours</LITERAL2>\r
+                       <LITERAL2>getUTCMilliseconds</LITERAL2>\r
+                       <LITERAL2>getUTCMinutes</LITERAL2>\r
+                       <LITERAL2>getUTCMonth</LITERAL2>\r
+                       <LITERAL2>getUTCSeconds</LITERAL2>\r
+                       <LITERAL2>getYear</LITERAL2>\r
+                       <LITERAL2>setDate</LITERAL2>\r
+                       <LITERAL2>setFullYear</LITERAL2>\r
+                       <LITERAL2>setHours</LITERAL2>\r
+                       <LITERAL2>setMilliseconds</LITERAL2>\r
+                       <LITERAL2>setMinutes</LITERAL2>\r
+                       <LITERAL2>setMonth</LITERAL2>\r
+                       <LITERAL2>setSeconds</LITERAL2>\r
+                       <LITERAL2>setTime</LITERAL2>\r
+                       <LITERAL2>setUTCDate</LITERAL2>\r
+                       <LITERAL2>setUTCFullYear</LITERAL2>\r
+                       <LITERAL2>setUTCHours</LITERAL2>\r
+                       <LITERAL2>setUTCMilliseconds</LITERAL2>\r
+                       <LITERAL2>setUTCMinutes</LITERAL2>\r
+                       <LITERAL2>setUTCMonth</LITERAL2>\r
+                       <LITERAL2>setUTCSeconds</LITERAL2>\r
+                       <LITERAL2>setYear</LITERAL2>\r
+                       <LITERAL2>UTC</LITERAL2>\r
+\r
+                       <!-- Function -->\r
+                       <LITERAL2>_global</LITERAL2>\r
+                       <LITERAL2>apply</LITERAL2>\r
+\r
+                       <!--  Math Class -->\r
+                       <LITERAL2>abs</LITERAL2>\r
+                       <LITERAL2>acos</LITERAL2>\r
+                       <LITERAL2>asin</LITERAL2>\r
+                       <LITERAL2>atan</LITERAL2>\r
+                       <LITERAL2>atan2</LITERAL2>\r
+                       <LITERAL2>ceil</LITERAL2>\r
+                       <LITERAL2>cos</LITERAL2>\r
+                       <LITERAL2>exp</LITERAL2>\r
+                       <LITERAL2>floor</LITERAL2>\r
+                       <LITERAL2>log</LITERAL2>\r
+                       <LITERAL2>max</LITERAL2>\r
+                       <LITERAL2>min</LITERAL2>\r
+                       <LITERAL2>pow</LITERAL2>\r
+                       <LITERAL2>round</LITERAL2>\r
+                       <LITERAL2>sin</LITERAL2>\r
+                       <LITERAL2>sqrt</LITERAL2>\r
+                       <LITERAL2>tan</LITERAL2>\r
+\r
+                       <LITERAL2>E</LITERAL2>\r
+                       <LITERAL2>LN2</LITERAL2>\r
+                       <LITERAL2>LN10</LITERAL2>\r
+                       <LITERAL2>LOG2E</LITERAL2>\r
+                       <LITERAL2>LOG10E</LITERAL2>\r
+                       <LITERAL2>PI</LITERAL2>\r
+                       <LITERAL2>SQRT1_2</LITERAL2>\r
+                       <LITERAL2>SQRT2</LITERAL2>\r
+\r
+                       <!-- Number -->\r
+                       <LITERAL2>MAX_VALUE</LITERAL2>\r
+                       <LITERAL2>MIN_VALUE</LITERAL2>\r
+                       <LITERAL2>NEGATIVE_INFINITY</LITERAL2>\r
+                       <LITERAL2>POSITIVE_INFINITY</LITERAL2>\r
+\r
+                       <!-- Object -->\r
+                       <LITERAL2>addProperty</LITERAL2>\r
+                       <LITERAL2>registerClass</LITERAL2>\r
+                       <LITERAL2>unwatch</LITERAL2>\r
+                       <LITERAL2>watch</LITERAL2>\r
+\r
+                       <!-- String -->\r
+                       <LITERAL2>charAt</LITERAL2>\r
+                       <LITERAL2>charCodeAt</LITERAL2>\r
+                       <LITERAL2>fromCharCode</LITERAL2>\r
+                       <LITERAL2>lastIndexOf</LITERAL2>\r
+                       <LITERAL2>indexOf</LITERAL2>\r
+                       <LITERAL2>split</LITERAL2>\r
+                       <LITERAL2>substr</LITERAL2>\r
+                       <LITERAL2>substring</LITERAL2>\r
+                       <LITERAL2>toLowerCase</LITERAL2>\r
+                       <LITERAL2>toUpperCase</LITERAL2>\r
+\r
+                       <!-- Accessibility -->\r
+                       <LITERAL2>Accessibility</LITERAL2>\r
+                       <LITERAL2>isActive</LITERAL2>\r
+                       <LITERAL2>updateProperties</LITERAL2>\r
+\r
+\r
+                       <!-- System capabilities Class-->\r
+                       <LITERAL2>System</LITERAL2>\r
+                       <LITERAL2>capabilities</LITERAL2>\r
+                       <LITERAL2>exactSettings</LITERAL2>\r
+                       <LITERAL2>setClipboard</LITERAL2>\r
+                       <LITERAL2>showSettings</LITERAL2>\r
+                       <LITERAL2>useCodepage</LITERAL2>\r
+                       <LITERAL2>avHardwareDisable</LITERAL2>\r
+                       <LITERAL2>hasAccessibility</LITERAL2>\r
+                       <LITERAL2>hasAudio</LITERAL2>\r
+                       <LITERAL2>hasAudioEncoder</LITERAL2>\r
+                       <LITERAL2>hasMP3</LITERAL2>\r
+                       <LITERAL2>hasVideoEncoder</LITERAL2>\r
+                       <LITERAL2>pixelAspectRatio</LITERAL2>\r
+                       <LITERAL2>screenColor</LITERAL2>\r
+                       <LITERAL2>screenDPI</LITERAL2>\r
+                       <LITERAL2>screenResolutionX</LITERAL2>\r
+                       <LITERAL2>screenResolutionY</LITERAL2>\r
+                       <LITERAL2>hasEmbeddedVideo</LITERAL2>\r
+                       <LITERAL2>hasPrinting</LITERAL2>\r
+                       <LITERAL2>hasScreenBroadcast</LITERAL2>\r
+                       <LITERAL2>hasScreenPlayback</LITERAL2>\r
+                       <LITERAL2>hasStreamingAudio</LITERAL2>\r
+                       <LITERAL2>hasStreamingVideo</LITERAL2>\r
+                       <LITERAL2>isDebugger</LITERAL2>\r
+                       <LITERAL2>language</LITERAL2>\r
+                       <LITERAL2>manufacturer</LITERAL2>\r
+                       <LITERAL2>os</LITERAL2>\r
+                       <LITERAL2>playerType</LITERAL2>\r
+                       <LITERAL2>serverString</LITERAL2>\r
+                       <LITERAL2>localFileReadDisable</LITERAL2>\r
+                       <LITERAL2>version</LITERAL2>\r
+                       <!-- System security Class -->\r
+                       <LITERAL2>security</LITERAL2>\r
+\r
+                       <!-- Color Class -->\r
+                       <LITERAL2>getRGB</LITERAL2>\r
+                       <LITERAL2>getTransform</LITERAL2>\r
+                       <LITERAL2>setRGB</LITERAL2>\r
+                       <LITERAL2>setTransform</LITERAL2>\r
+\r
+                       <!-- Key Class -->\r
+                       <LITERAL2>addListener</LITERAL2>\r
+                       <LITERAL2>getAscii</LITERAL2>\r
+                       <LITERAL2>isDown</LITERAL2>\r
+                       <LITERAL2>getCode</LITERAL2>\r
+                       <LITERAL2>isToggled</LITERAL2>\r
+                       <LITERAL2>removeListener</LITERAL2>\r
+                       <LITERAL2>BACKSPACE</LITERAL2>\r
+                       <LITERAL2>CAPSLOCK</LITERAL2>\r
+                       <LITERAL2>CONTROL</LITERAL2>\r
+                       <LITERAL2>DELETEKEY</LITERAL2>\r
+                       <LITERAL2>DOWN</LITERAL2>\r
+                       <LITERAL2>END</LITERAL2>\r
+                       <LITERAL2>ENTER</LITERAL2>\r
+                       <LITERAL2>ESCAPE</LITERAL2>\r
+                       <LITERAL2>HOME</LITERAL2>\r
+                       <LITERAL2>INSERT</LITERAL2>\r
+                       <LITERAL2>LEFT</LITERAL2>\r
+                       <LITERAL2>PGDN</LITERAL2>\r
+                       <LITERAL2>PGUP</LITERAL2>\r
+                       <LITERAL2>SHIFT</LITERAL2>\r
+                       <LITERAL2>RIGHT</LITERAL2>\r
+                       <LITERAL2>SPACE</LITERAL2>\r
+                       <LITERAL2>TAB</LITERAL2>\r
+                       <LITERAL2>UP</LITERAL2>\r
+\r
+                       <!-- Mouse -->\r
+                       <LITERAL2>hide</LITERAL2>\r
+                       <LITERAL2>show</LITERAL2>\r
+                       <LITERAL2>onMouseWheel</LITERAL2>\r
+\r
+                       <!-- Selection Class-->\r
+                       <LITERAL2>getBeginIndex</LITERAL2>\r
+                       <LITERAL2>getCaretIndex</LITERAL2>\r
+                       <LITERAL2>getEndIndex</LITERAL2>\r
+                       <LITERAL2>getFocus</LITERAL2>\r
+                       <LITERAL2>setFocus</LITERAL2>\r
+                       <LITERAL2>setSelection</LITERAL2>\r
+\r
+                       <!-- SharedObject Class-->\r
+                       <LITERAL2>SharedObject</LITERAL2>\r
+                       <LITERAL2>data</LITERAL2>\r
+                       <LITERAL2>flush</LITERAL2>\r
+                       <LITERAL2>getLocal</LITERAL2>\r
+                       <LITERAL2>getSize</LITERAL2>\r
+\r
+                       <!-- Sound Class -->\r
+                       <LITERAL2>attachSound</LITERAL2>\r
+                       <LITERAL2>getVolume</LITERAL2>\r
+                       <LITERAL2>loadSound</LITERAL2>\r
+                       <LITERAL2>setPan</LITERAL2>\r
+                       <LITERAL2>getPan</LITERAL2>\r
+                       <LITERAL2>setVolume</LITERAL2>\r
+                       <LITERAL2>start</LITERAL2>\r
+                       <LITERAL2>duration</LITERAL2>\r
+                       <LITERAL2>position</LITERAL2>\r
+                       <LITERAL2>onSoundComplete</LITERAL2>\r
+                       <LITERAL2>id3</LITERAL2>\r
+                       <LITERAL2>onID3</LITERAL2>\r
+\r
+                       <!-- Video Class -->\r
+                       <LITERAL2>Video</LITERAL2>\r
+                       <LITERAL2>deblocking</LITERAL2>\r
+                       <LITERAL2>smoothing</LITERAL2>\r
+\r
+                       <!--  Stage Class -->\r
+                       <LITERAL2>Stage</LITERAL2>\r
+                       <LITERAL2>align</LITERAL2>\r
+                       <LITERAL2>height</LITERAL2>\r
+                       <LITERAL2>scaleMode</LITERAL2>\r
+                       <LITERAL2>showMenu</LITERAL2>\r
+                       <LITERAL2>width</LITERAL2>\r
+                       <LITERAL2>onResize</LITERAL2>\r
+\r
+                       <!-- TextField Class -->\r
+                       <LITERAL2>getFontList</LITERAL2>\r
+                       <LITERAL2>getNewTextFormat</LITERAL2>\r
+                       <LITERAL2>getTextFormat</LITERAL2>\r
+                       <LITERAL2>removeTextField</LITERAL2>\r
+                       <LITERAL2>replaceSel</LITERAL2>\r
+                       <LITERAL2>setNewTextFormat</LITERAL2>\r
+                       <LITERAL2>setTextFormat</LITERAL2>\r
+                       <LITERAL2>autoSize</LITERAL2>\r
+                       <LITERAL2>background</LITERAL2>\r
+                       <LITERAL2>backgroundColor</LITERAL2>\r
+                       <LITERAL2>border</LITERAL2>\r
+                       <LITERAL2>borderColor</LITERAL2>\r
+                       <LITERAL2>bottomScroll</LITERAL2>\r
+                       <LITERAL2>embedFonts</LITERAL2>\r
+                       <LITERAL2>hscroll</LITERAL2>\r
+                       <LITERAL2>html</LITERAL2>\r
+                       <LITERAL2>htmlText</LITERAL2>\r
+                       <LITERAL2>maxChars</LITERAL2>\r
+                       <LITERAL2>maxhscroll</LITERAL2>\r
+                       <LITERAL2>multiline</LITERAL2>\r
+                       <LITERAL2>password</LITERAL2>\r
+                       <LITERAL2>restrict</LITERAL2>\r
+                       <LITERAL2>selectable</LITERAL2>\r
+                       <LITERAL2>text</LITERAL2>\r
+                       <LITERAL2>textColor</LITERAL2>\r
+                       <LITERAL2>textHeight</LITERAL2>\r
+                       <LITERAL2>textWidth</LITERAL2>\r
+                       <LITERAL2>type</LITERAL2>\r
+                       <LITERAL2>variable</LITERAL2>\r
+                       <LITERAL2>wordWrap</LITERAL2>\r
+                       <LITERAL2>onChanged</LITERAL2>\r
+                       <LITERAL2>onScroller</LITERAL2>\r
+                       <LITERAL2>TextField</LITERAL2>\r
+                       <LITERAL2>mouseWheelEnabled</LITERAL2>\r
+                       <LITERAL2>replaceText</LITERAL2>\r
+\r
+                       <!-- StyleSheet Class -->\r
+                       <LITERAL2>StyleSheet</LITERAL2>\r
+                       <LITERAL2>getStyle</LITERAL2>\r
+                       <LITERAL2>getStyleNames</LITERAL2>\r
+                       <LITERAL2>parseCSS</LITERAL2>\r
+                       <LITERAL2>setStyle</LITERAL2>\r
+                       <LITERAL2>styleSheet</LITERAL2>\r
+\r
+                       <!-- TextFormat Class -->\r
+                       <LITERAL2>TextFormat</LITERAL2>\r
+                       <LITERAL2>getTextExtent</LITERAL2>\r
+                       <LITERAL2>blockIndent</LITERAL2>\r
+                       <LITERAL2>bold</LITERAL2>\r
+                       <LITERAL2>bullet</LITERAL2>\r
+                       <LITERAL2>color</LITERAL2>\r
+                       <LITERAL2>font</LITERAL2>\r
+                       <LITERAL2>indent</LITERAL2>\r
+                       <LITERAL2>italic</LITERAL2>\r
+                       <LITERAL2>leading</LITERAL2>\r
+                       <LITERAL2>leftMargin</LITERAL2>\r
+                       <LITERAL2>rightMargin</LITERAL2>\r
+                       <LITERAL2>size</LITERAL2>\r
+                       <LITERAL2>tabStops</LITERAL2>\r
+                       <LITERAL2>target</LITERAL2>\r
+                       <LITERAL2>underline</LITERAL2>\r
+                       <LITERAL2>url</LITERAL2>\r
+\r
+                       <!-- TextSnapshot object -->\r
+                       <LITERAL2>TextSnapshot</LITERAL2>\r
+                       <LITERAL2>findText</LITERAL2>\r
+                       <LITERAL2>getCount</LITERAL2>\r
+                       <LITERAL2>getSelected</LITERAL2>\r
+                       <LITERAL2>getSelectedText</LITERAL2>\r
+                       <LITERAL2>hitTestTextNearPos</LITERAL2>\r
+                       <LITERAL2>getText</LITERAL2>\r
+                       <LITERAL2>setSelectColor</LITERAL2>\r
+                       <LITERAL2>setSelected</LITERAL2>\r
+\r
+                       <!-- LoadVars Class-->\r
+                       <LITERAL2>LoadVars</LITERAL2>\r
+                       <LITERAL2>load</LITERAL2>\r
+                       <LITERAL2>send</LITERAL2>\r
+                       <LITERAL2>sendAndLoad</LITERAL2>\r
+                       <LITERAL2>contentType</LITERAL2>\r
+                       <LITERAL2>loaded</LITERAL2>\r
+                       <LITERAL2>addRequestHeader</LITERAL2>\r
+\r
+                       <!-- LocalConnection Class-->\r
+                       <LITERAL2>LocalConnection</LITERAL2>\r
+                       <LITERAL2>allowDomain</LITERAL2>\r
+                       <LITERAL2>allowInsecureDomain</LITERAL2>\r
+                       <LITERAL2>domain</LITERAL2>\r
+\r
+                       <!-- XML Class -->\r
+                       <LITERAL2>appendChild</LITERAL2>\r
+                       <LITERAL2>cloneNode</LITERAL2>\r
+                       <LITERAL2>createElement</LITERAL2>\r
+                       <LITERAL2>createTextNode</LITERAL2>\r
+                       <LITERAL2>hasChildNodes</LITERAL2>\r
+                       <LITERAL2>insertBefore</LITERAL2>\r
+                       <LITERAL2>parseXML</LITERAL2>\r
+                       <LITERAL2>removeNode</LITERAL2>\r
+                       <LITERAL2>attributes</LITERAL2>\r
+                       <LITERAL2>childNodes</LITERAL2>\r
+                       <LITERAL2>docTypeDecl</LITERAL2>\r
+                       <LITERAL2>firstChild</LITERAL2>\r
+                       <LITERAL2>ignoreWhite</LITERAL2>\r
+                       <LITERAL2>lastChild</LITERAL2>\r
+                       <LITERAL2>nextSibling</LITERAL2>\r
+                       <LITERAL2>nodeName</LITERAL2>\r
+                       <LITERAL2>nodeType</LITERAL2>\r
+                       <LITERAL2>nodeValue</LITERAL2>\r
+                       <LITERAL2>parentNode</LITERAL2>\r
+                       <LITERAL2>previousSibling</LITERAL2>\r
+                       <LITERAL2>status</LITERAL2>\r
+                       <LITERAL2>xmlDecl</LITERAL2>\r
+                       <LITERAL2>close</LITERAL2>\r
+                       <LITERAL2>connect</LITERAL2>\r
+                       <LITERAL2>onClose</LITERAL2>\r
+                       <LITERAL2>onConnect</LITERAL2>\r
+                       <LITERAL2>onXML</LITERAL2>\r
+\r
+                       <!-- CustomActions Class -->\r
+                       <LITERAL2>CustomActions</LITERAL2>\r
+                       <LITERAL2>onUpdate</LITERAL2>\r
+                       <LITERAL2>uninstall</LITERAL2>\r
+                       <LITERAL2>list</LITERAL2>\r
+                       <LITERAL2>install</LITERAL2>\r
+                       <LITERAL2>get</LITERAL2>\r
+\r
+                       <!-- NetConnection Class -->\r
+                       <LITERAL2>NetConnection</LITERAL2>\r
+\r
+                       <!-- NetStream Class-->\r
+                       <LITERAL2>NetStream</LITERAL2>\r
+                       <LITERAL2>bufferLength</LITERAL2>\r
+                       <LITERAL2>bufferTime</LITERAL2>\r
+                       <LITERAL2>bytesLoaded</LITERAL2>\r
+                       <LITERAL2>bytesTotal</LITERAL2>\r
+                       <LITERAL2>pause</LITERAL2>\r
+                       <LITERAL2>seek</LITERAL2>\r
+                       <LITERAL2>setBufferTime</LITERAL2>\r
+                       <LITERAL2>time</LITERAL2>\r
+\r
+                       <!-- RecordSet Class -->\r
+                       <LITERAL2>DataGlue</LITERAL2>\r
+                       <LITERAL2>bindFormatFunction</LITERAL2>\r
+                       <LITERAL2>bindFormatStrings</LITERAL2>\r
+                       <LITERAL2>getDebugConfig</LITERAL2>\r
+                       <LITERAL2>getDebugID</LITERAL2>\r
+                       <LITERAL2>getService</LITERAL2>\r
+                       <LITERAL2>setCredentials</LITERAL2>\r
+                       <LITERAL2>setDebugID</LITERAL2>\r
+                       <LITERAL2>getDebug</LITERAL2>\r
+                       <LITERAL2>setDebug</LITERAL2>\r
+                       <LITERAL2>createGatewayConnection</LITERAL2>\r
+                       <LITERAL2>NetServices</LITERAL2>\r
+                       <LITERAL2>setDefaultGatewayURL</LITERAL2>\r
+                       <LITERAL2>addItem</LITERAL2>\r
+                       <LITERAL2>addItemAt</LITERAL2>\r
+                       <LITERAL2>addView</LITERAL2>\r
+                       <LITERAL2>filter</LITERAL2>\r
+                       <LITERAL2>getColumnNames</LITERAL2>\r
+                       <LITERAL2>getItemAt</LITERAL2>\r
+                       <LITERAL2>getLength</LITERAL2>\r
+                       <LITERAL2>getNumberAvailable</LITERAL2>\r
+                       <LITERAL2>isFullyPopulated</LITERAL2>\r
+                       <LITERAL2>isLocal</LITERAL2>\r
+                       <LITERAL2>removeAll</LITERAL2>\r
+                       <LITERAL2>removeItemAt</LITERAL2>\r
+                       <LITERAL2>replaceItemAt</LITERAL2>\r
+                       <LITERAL2>setDeliveryMode</LITERAL2>\r
+                       <LITERAL2>setField</LITERAL2>\r
+                       <LITERAL2>sortItemsBy</LITERAL2>\r
+\r
+                       <!-- deprecated-->\r
+                       <KEYWORD2>chr</KEYWORD2>\r
+                       <KEYWORD2>mbchr</KEYWORD2>\r
+                       <KEYWORD2>mblength</KEYWORD2>\r
+                       <KEYWORD2>mbord</KEYWORD2>\r
+                       <KEYWORD2>mbsubstring</KEYWORD2>\r
+                       <KEYWORD2>ord</KEYWORD2>\r
+                       <KEYWORD2>_highquality</KEYWORD2>\r
+\r
+                       <!-- END-->\r
+\r
+                       <!--ECMAScript keywords-->\r
+                       <!-- Reserved for future use\r
+                               (some are already used in some Javascript Engines)\r
+                       -->\r
+                       <KEYWORD1>abstract</KEYWORD1>\r
+                       <KEYWORD3>boolean</KEYWORD3>\r
+                       <KEYWORD3>byte</KEYWORD3>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>catch</KEYWORD1>\r
+                       <KEYWORD3>char</KEYWORD3>\r
+                       <KEYWORD1>class</KEYWORD1>\r
+                       <KEYWORD1>const</KEYWORD1>\r
+                       <KEYWORD1>debugger</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+\r
+                       <KEYWORD3>double</KEYWORD3>\r
+                       <KEYWORD1>enum</KEYWORD1>\r
+                       <KEYWORD2>export</KEYWORD2>\r
+                       <KEYWORD1>extends</KEYWORD1>\r
+                       <KEYWORD1>final</KEYWORD1>\r
+                       <KEYWORD1>finally</KEYWORD1>\r
+                       <KEYWORD3>float</KEYWORD3>\r
+                       <KEYWORD1>goto</KEYWORD1>\r
+                       <KEYWORD1>implements</KEYWORD1>\r
+\r
+                       <KEYWORD2>import</KEYWORD2>\r
+                       <KEYWORD1>instanceof</KEYWORD1>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD1>interface</KEYWORD1>\r
+                       <KEYWORD3>long</KEYWORD3>\r
+                       <KEYWORD1>native</KEYWORD1>\r
+                       <KEYWORD2>package</KEYWORD2>\r
+                       <KEYWORD1>private</KEYWORD1>\r
+                       <KEYWORD1>Void</KEYWORD1>\r
+                       <KEYWORD1>protected</KEYWORD1>\r
+                       <KEYWORD1>public</KEYWORD1>\r
+                       <KEYWORD1>dynamic</KEYWORD1>\r
+\r
+                       <KEYWORD3>short</KEYWORD3>\r
+                       <KEYWORD1>static</KEYWORD1>\r
+                       <LITERAL2>super</LITERAL2>\r
+                       <KEYWORD1>switch</KEYWORD1>\r
+                       <KEYWORD1>synchronized</KEYWORD1>\r
+                       <KEYWORD1>throw</KEYWORD1>\r
+                       <KEYWORD1>throws</KEYWORD1>\r
+                       <KEYWORD1>transient</KEYWORD1>\r
+                       <KEYWORD1>try</KEYWORD1>\r
+                       <KEYWORD1>volatile</KEYWORD1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/ada95.xml b/extra/xmode/modes/ada95.xml
new file mode 100644 (file)
index 0000000..a6d1550
--- /dev/null
@@ -0,0 +1,224 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="--" />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- Normal comments. -->\r
+               <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               \r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+               <SEQ TYPE="OPERATOR">(</SEQ>\r
+               <SEQ TYPE="OPERATOR">..</SEQ>\r
+               <SEQ TYPE="OPERATOR">.all</SEQ>\r
+               <SEQ TYPE="OPERATOR">:=</SEQ>\r
+               <SEQ TYPE="OPERATOR">/=</SEQ>\r
+               <SEQ TYPE="OPERATOR">=&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="NULL">&lt;&gt;</SEQ>\r
+               <SEQ TYPE="LABEL">&lt;&lt;</SEQ>\r
+               <SEQ TYPE="LABEL">&gt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">**</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+\r
+               <SEQ TYPE="KEYWORD3">'access</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'address</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'adjacent</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'aft</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'alignment</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'base</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'bit_order</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'body_version</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'callable</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'caller</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'ceiling</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'class</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'component_size</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'composed</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'constrained</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'copy_size</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'count</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'definite</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'delta</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'denorm</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'digits</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'exponent</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'external_tag</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'first</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'first_bit</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'floor</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'fore</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'fraction</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'genetic</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'identity</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'image</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'input</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'last</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'last_bit</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'leading_part</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'length</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'machine</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'machine_emax</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'machine_emin</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'machine_mantissa</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'machine_overflows</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'machine_radix</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'machine_rounds</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'max</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'max_size_in_storage_elements</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'min</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'model</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'model_emin</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'model_epsilon</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'model_mantissa</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'model_small</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'modulus</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'output</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'partition_id</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'pos</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'position</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'pred</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'range</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'read</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'remainder</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'round</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'rounding</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'safe_first</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'safe_last</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'scale</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'scaling</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'signed_zeros</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'size</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'small</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'storage_pool</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'storage_size</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'succ</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'tag</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'terminated</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'truncation</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'unbiased_rounding</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'unchecked_access</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'val</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'valid</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'value</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'version</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'wide_image</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'wide_value</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'wide_width</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'width</SEQ>\r
+               <SEQ TYPE="KEYWORD3">'write</SEQ>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <KEYWORDS>\r
+                       <!-- Reserved words -->\r
+                       <KEYWORD1>entry</KEYWORD1>\r
+                       <KEYWORD1>function</KEYWORD1>\r
+                       <KEYWORD1>procedure</KEYWORD1>\r
+\r
+                       <KEYWORD2>abort</KEYWORD2>\r
+                       <KEYWORD2>abs</KEYWORD2>\r
+                       <KEYWORD2>abstract</KEYWORD2>\r
+                       <KEYWORD2>accept</KEYWORD2>\r
+                       <KEYWORD2>access</KEYWORD2>\r
+                       <KEYWORD2>aliased</KEYWORD2>\r
+                       <KEYWORD2>all</KEYWORD2>\r
+                       <KEYWORD2>and</KEYWORD2>\r
+                       <KEYWORD2>array</KEYWORD2>\r
+                       <KEYWORD2>at</KEYWORD2>\r
+                       <KEYWORD2>begin</KEYWORD2>\r
+                       <KEYWORD2>body</KEYWORD2>\r
+                       <KEYWORD2>case</KEYWORD2>\r
+                       <KEYWORD2>constant</KEYWORD2>\r
+                       <KEYWORD2>declare</KEYWORD2>\r
+                       <KEYWORD2>delay</KEYWORD2>\r
+                       <KEYWORD2>delta</KEYWORD2>\r
+                       <KEYWORD2>digits</KEYWORD2>\r
+                       <KEYWORD2>do</KEYWORD2>\r
+                       <KEYWORD2>else</KEYWORD2>\r
+                       <KEYWORD2>elsif</KEYWORD2>\r
+                       <KEYWORD2>end</KEYWORD2>\r
+                       <KEYWORD2>exception</KEYWORD2>\r
+                       <KEYWORD2>exit</KEYWORD2>\r
+                       <KEYWORD2>for</KEYWORD2>\r
+                       <KEYWORD2>goto</KEYWORD2>\r
+                       <KEYWORD2>if</KEYWORD2>\r
+                       <KEYWORD2>in</KEYWORD2>\r
+                       <KEYWORD2>is</KEYWORD2>\r
+                       <KEYWORD2>limited</KEYWORD2>\r
+                       <KEYWORD2>loop</KEYWORD2>\r
+                       <KEYWORD2>mod</KEYWORD2>\r
+                       <KEYWORD2>new</KEYWORD2>\r
+                       <KEYWORD2>not</KEYWORD2>\r
+                       <KEYWORD2>or</KEYWORD2>\r
+                       <KEYWORD2>others</KEYWORD2>\r
+                       <KEYWORD2>out</KEYWORD2>\r
+                       <KEYWORD2>package</KEYWORD2>\r
+                       <KEYWORD2>pragma</KEYWORD2>\r
+                       <KEYWORD2>private</KEYWORD2>\r
+                       <KEYWORD2>protected</KEYWORD2>\r
+                       <KEYWORD2>raise</KEYWORD2>\r
+                       <KEYWORD2>range</KEYWORD2>\r
+                       <KEYWORD2>record</KEYWORD2>\r
+                       <KEYWORD2>rem</KEYWORD2>\r
+                       <KEYWORD2>renames</KEYWORD2>\r
+                       <KEYWORD2>requeue</KEYWORD2>\r
+                       <KEYWORD2>return</KEYWORD2>\r
+                       <KEYWORD2>select</KEYWORD2>\r
+                       <KEYWORD2>separate</KEYWORD2>\r
+                       <KEYWORD2>string</KEYWORD2>\r
+                       <KEYWORD2>subtype</KEYWORD2>\r
+                       <KEYWORD2>tagged</KEYWORD2>\r
+                       <KEYWORD2>task</KEYWORD2>\r
+                       <KEYWORD2>terminate</KEYWORD2>\r
+                       <KEYWORD2>then</KEYWORD2>\r
+                       <KEYWORD2>type</KEYWORD2>\r
+                       <KEYWORD2>until</KEYWORD2>\r
+                       <KEYWORD2>use</KEYWORD2>\r
+                       <KEYWORD2>when</KEYWORD2>\r
+                       <KEYWORD2>while</KEYWORD2>\r
+                       <KEYWORD2>with</KEYWORD2>\r
+                       <KEYWORD2>xor</KEYWORD2>\r
+\r
+                       <!-- Attributes -->\r
+\r
+                       <!-- Common Pre-defined Types -->\r
+                       <LITERAL2>address</LITERAL2>\r
+                       <LITERAL2>boolean</LITERAL2>\r
+                       <LITERAL2>character</LITERAL2>\r
+                       <LITERAL2>duration</LITERAL2>\r
+                       <LITERAL2>float</LITERAL2>\r
+                       <LITERAL2>integer</LITERAL2>\r
+                       <LITERAL2>latin_1</LITERAL2>\r
+                       <LITERAL2>natural</LITERAL2>\r
+                       <LITERAL2>positive</LITERAL2>\r
+                       <LITERAL2>string</LITERAL2>\r
+                       <LITERAL2>time</LITERAL2>\r
+\r
+                       <!-- Literals -->\r
+                       <LITERAL1>false</LITERAL1>\r
+                       <LITERAL1>null</LITERAL1>\r
+                       <LITERAL1>true</LITERAL1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/antlr.xml b/extra/xmode/modes/antlr.xml
new file mode 100644 (file)
index 0000000..1e5dd12
--- /dev/null
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+        This mode file describes the ANTLR syntax definition language.\r
+        It is derived from and tested with the ANTLR syntax rules specified in\r
+        antlr.g included with the ANTLR distribution.\r
+        \r
+        Portions of this file from java.xml.\r
+        \r
+        Author: Brant Gurganus <brantgurga@users.sourceforge.net>\r
+-->\r
+<MODE>\r
+        <PROPS>\r
+                <PROPERTY NAME="commentStart" VALUE="/*" />\r
+                <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+                <PROPERTY NAME="lineComment" VALUE="//" />\r
+                <PROPERTY NAME="wordBreakChars" VALUE="" />\r
+        </PROPS>\r
+        <RULES>\r
+               <SPAN TYPE="COMMENT2" DELEGATE="java::JAVADOC">\r
+                       <BEGIN>/**</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+                <SPAN TYPE="COMMENT1">\r
+                        <BEGIN>/*</BEGIN>\r
+                        <END>*/</END>\r
+                </SPAN>\r
+                <EOL_SPAN TYPE="COMMENT1">//</EOL_SPAN>\r
+                <SPAN TYPE="LITERAL1">\r
+                        <BEGIN>"</BEGIN>\r
+                        <END>"</END>\r
+                </SPAN>\r
+                <SEQ TYPE="OPERATOR">|</SEQ>\r
+                <SEQ TYPE="OPERATOR">:</SEQ>\r
+                <KEYWORDS>\r
+                        <KEYWORD3>header</KEYWORD3>\r
+                        <KEYWORD3>options</KEYWORD3>\r
+                        <KEYWORD3>tokens</KEYWORD3>\r
+                        <KEYWORD1>abstract</KEYWORD1>\r
+                       <KEYWORD1>break</KEYWORD1>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>catch</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>extends</KEYWORD1>\r
+                       <KEYWORD1>final</KEYWORD1>\r
+                       <KEYWORD1>finally</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>implements</KEYWORD1>\r
+                       <KEYWORD1>instanceof</KEYWORD1>\r
+                       <KEYWORD1>native</KEYWORD1>\r
+                       <KEYWORD1>new</KEYWORD1>\r
+                       <KEYWORD1>private</KEYWORD1>\r
+                       <KEYWORD1>protected</KEYWORD1>\r
+                       <KEYWORD1>public</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>static</KEYWORD1>\r
+                       <KEYWORD1>switch</KEYWORD1>\r
+                       <KEYWORD1>synchronized</KEYWORD1>\r
+                       <KEYWORD1>throw</KEYWORD1>\r
+                       <KEYWORD1>throws</KEYWORD1>\r
+                       <KEYWORD1>transient</KEYWORD1>\r
+                       <KEYWORD1>try</KEYWORD1>\r
+                       <KEYWORD1>volatile</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+                       <KEYWORD1>package</KEYWORD1>\r
+                       <KEYWORD1>import</KEYWORD1>\r
+\r
+                       <KEYWORD2>boolean</KEYWORD2>\r
+                       <KEYWORD2>byte</KEYWORD2>\r
+                       <KEYWORD2>char</KEYWORD2>\r
+                       <KEYWORD2>class</KEYWORD2>\r
+                       <KEYWORD2>double</KEYWORD2>\r
+                       <KEYWORD2>float</KEYWORD2>\r
+                       <KEYWORD2>int</KEYWORD2>\r
+                       <KEYWORD2>interface</KEYWORD2>\r
+                       <KEYWORD2>long</KEYWORD2>\r
+                       <KEYWORD2>short</KEYWORD2>\r
+                       <KEYWORD2>void</KEYWORD2>\r
+\r
+                       <FUNCTION>assert</FUNCTION>\r
+                       <KEYWORD1>strictfp</KEYWORD1>\r
+\r
+                       <LITERAL2>false</LITERAL2>\r
+                       <LITERAL2>null</LITERAL2>\r
+                       <LITERAL2>super</LITERAL2>\r
+                       <LITERAL2>this</LITERAL2>\r
+                       <LITERAL2>true</LITERAL2>\r
+\r
+                       <INVALID>goto</INVALID>\r
+                       <INVALID>const</INVALID>\r
+                </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/apacheconf.xml b/extra/xmode/modes/apacheconf.xml
new file mode 100644 (file)
index 0000000..1c16a35
--- /dev/null
@@ -0,0 +1,1007 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+               <PROPERTY NAME="noWordSep" VALUE="-" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" HIGHLIGHT_DIGITS="FALSE" IGNORE_CASE="TRUE">\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN_REGEXP HASH_CHAR="&lt;VirtualHost" TYPE="MARKUP" DELEGATE="VHOST">\r
+                       <BEGIN><![CDATA[<(VirtualHost)[^>]*>]]></BEGIN>\r
+                       <END><![CDATA[</$1>]]></END>\r
+               </SPAN_REGEXP>\r
+\r
+               <SPAN_REGEXP HASH_CHAR="&lt;" TYPE="MARKUP" DELEGATE="DIRECTIVE">\r
+                       <BEGIN><![CDATA[<(\w+)[^>]*>]]></BEGIN>\r
+                       <END><![CDATA[</$1>]]></END>\r
+               </SPAN_REGEXP>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>AcceptMutex</KEYWORD1>\r
+                       <KEYWORD1>AcceptPathInfo</KEYWORD1>\r
+                       <KEYWORD1>AccessFileName</KEYWORD1>\r
+                       <KEYWORD1>Action</KEYWORD1>\r
+                       <KEYWORD1>AddAlt</KEYWORD1>\r
+                       <KEYWORD1>AddAltByEncoding</KEYWORD1>\r
+                       <KEYWORD1>AddAltByType</KEYWORD1>\r
+                       <KEYWORD1>AddCharset</KEYWORD1>\r
+                       <KEYWORD1>AddDefaultCharset</KEYWORD1>\r
+                       <KEYWORD1>AddDescription</KEYWORD1>\r
+                       <KEYWORD1>AddEncoding</KEYWORD1>\r
+                       <KEYWORD1>AddHandler</KEYWORD1>\r
+                       <KEYWORD1>AddIcon</KEYWORD1>\r
+                       <KEYWORD1>AddIconByEncoding</KEYWORD1>\r
+                       <KEYWORD1>AddIconByType</KEYWORD1>\r
+                       <KEYWORD1>AddInputFilter</KEYWORD1>\r
+                       <KEYWORD1>AddLanguage</KEYWORD1>\r
+                       <KEYWORD1>AddModuleInfo</KEYWORD1>\r
+                       <KEYWORD1>AddOutputFilter</KEYWORD1>\r
+                       <KEYWORD1>AddOutputFilterByType</KEYWORD1>\r
+                       <KEYWORD1>AddType</KEYWORD1>\r
+                       <KEYWORD1>Alias</KEYWORD1>\r
+                       <KEYWORD1>AliasMatch</KEYWORD1>\r
+                       <KEYWORD1>AllowCONNECT</KEYWORD1>\r
+                       <KEYWORD1>AllowEncodedSlashes</KEYWORD1>\r
+                       <KEYWORD1>AuthDigestNcCheck</KEYWORD1>\r
+                       <KEYWORD1>AuthDigestShmemSize</KEYWORD1>\r
+                       <KEYWORD1>AuthLDAPCharsetConfig</KEYWORD1>\r
+                       <KEYWORD1>BS2000Account</KEYWORD1>\r
+                       <KEYWORD1>BrowserMatch</KEYWORD1>\r
+                       <KEYWORD1>BrowserMatchNoCase</KEYWORD1>\r
+                       <KEYWORD1>CacheDefaultExpire</KEYWORD1>\r
+                       <KEYWORD1>CacheDirLength</KEYWORD1>\r
+                       <KEYWORD1>CacheDirLevels</KEYWORD1>\r
+                       <KEYWORD1>CacheDisable</KEYWORD1>\r
+                       <KEYWORD1>CacheEnable</KEYWORD1>\r
+                       <KEYWORD1>CacheExpiryCheck</KEYWORD1>\r
+                       <KEYWORD1>CacheFile</KEYWORD1>\r
+                       <KEYWORD1>CacheForceCompletion</KEYWORD1>\r
+                       <KEYWORD1>CacheGcClean</KEYWORD1>\r
+                       <KEYWORD1>CacheGcDaily</KEYWORD1>\r
+                       <KEYWORD1>CacheGcInterval</KEYWORD1>\r
+                       <KEYWORD1>CacheGcMemUsage</KEYWORD1>\r
+                       <KEYWORD1>CacheGcUnused</KEYWORD1>\r
+                       <KEYWORD1>CacheIgnoreCacheControl</KEYWORD1>\r
+                       <KEYWORD1>CacheIgnoreNoLastMod</KEYWORD1>\r
+                       <KEYWORD1>CacheLastModifiedFactor</KEYWORD1>\r
+                       <KEYWORD1>CacheMaxExpire</KEYWORD1>\r
+                       <KEYWORD1>CacheMaxFileSize</KEYWORD1>\r
+                       <KEYWORD1>CacheMinFileSize</KEYWORD1>\r
+                       <KEYWORD1>CacheNegotiatedDocs</KEYWORD1>\r
+                       <KEYWORD1>CacheRoot</KEYWORD1>\r
+                       <KEYWORD1>CacheSize</KEYWORD1>\r
+                       <KEYWORD1>CacheTimeMargin</KEYWORD1>\r
+                       <KEYWORD1>CharsetDefault</KEYWORD1>\r
+                       <KEYWORD1>CharsetOptions</KEYWORD1>\r
+                       <KEYWORD1>CharsetSourceEnc</KEYWORD1>\r
+                       <KEYWORD1>CheckSpelling</KEYWORD1>\r
+                       <KEYWORD1>ChildPerUserID</KEYWORD1>\r
+                       <KEYWORD1>ContentDigest</KEYWORD1>\r
+                       <KEYWORD1>CookieDomain</KEYWORD1>\r
+                       <KEYWORD1>CookieExpires</KEYWORD1>\r
+                       <KEYWORD1>CookieLog</KEYWORD1>\r
+                       <KEYWORD1>CookieName</KEYWORD1>\r
+                       <KEYWORD1>CookieStyle</KEYWORD1>\r
+                       <KEYWORD1>CookieTracking</KEYWORD1>\r
+                       <KEYWORD1>CoreDumpDirectory</KEYWORD1>\r
+                       <KEYWORD1>CustomLog</KEYWORD1>\r
+                       <KEYWORD1>DavDepthInfinity</KEYWORD1>\r
+                       <KEYWORD1>DavLockDB</KEYWORD1>\r
+                       <KEYWORD1>DavMinTimeout</KEYWORD1>\r
+                       <KEYWORD1>DefaultIcon</KEYWORD1>\r
+                       <KEYWORD1>DefaultLanguage</KEYWORD1>\r
+                       <KEYWORD1>DefaultType</KEYWORD1>\r
+                       <KEYWORD1>DeflateBufferSize</KEYWORD1>\r
+                       <KEYWORD1>DeflateCompressionLevel</KEYWORD1>\r
+                       <KEYWORD1>DeflateFilterNote</KEYWORD1>\r
+                       <KEYWORD1>DeflateMemLevel</KEYWORD1>\r
+                       <KEYWORD1>DeflateWindowSize</KEYWORD1>\r
+                       <KEYWORD1>DirectoryIndex</KEYWORD1>\r
+                       <KEYWORD1>DirectorySlash</KEYWORD1>\r
+                       <KEYWORD1>DocumentRoot</KEYWORD1>\r
+                       <KEYWORD1>EnableExceptionHook</KEYWORD1>\r
+                       <KEYWORD1>EnableMMAP</KEYWORD1>\r
+                       <KEYWORD1>EnableSendfile</KEYWORD1>\r
+                       <KEYWORD1>ErrorDocument</KEYWORD1>\r
+                       <KEYWORD1>ErrorLog</KEYWORD1>\r
+                       <KEYWORD1>Example</KEYWORD1>\r
+                       <KEYWORD1>ExpiresActive</KEYWORD1>\r
+                       <KEYWORD1>ExpiresByType</KEYWORD1>\r
+                       <KEYWORD1>ExpiresDefault</KEYWORD1>\r
+                       <KEYWORD1>ExtFilterDefine</KEYWORD1>\r
+                       <KEYWORD1>ExtendedStatus</KEYWORD1>\r
+                       <KEYWORD1>FileETag</KEYWORD1>\r
+                       <KEYWORD1>ForceLanguagePriority</KEYWORD1>\r
+                       <KEYWORD1>ForensicLog</KEYWORD1>\r
+                       <KEYWORD1>Group</KEYWORD1>\r
+                       <KEYWORD1>Header</KEYWORD1>\r
+                       <KEYWORD1>HeaderName</KEYWORD1>\r
+                       <KEYWORD1>HostnameLookups</KEYWORD1>\r
+                       <KEYWORD1>ISAPIAppendLogToErrors</KEYWORD1>\r
+                       <KEYWORD1>ISAPIAppendLogToQuery</KEYWORD1>\r
+                       <KEYWORD1>ISAPICacheFile</KEYWORD1>\r
+                       <KEYWORD1>ISAPIFakeAsync</KEYWORD1>\r
+                       <KEYWORD1>ISAPILogNotSupported</KEYWORD1>\r
+                       <KEYWORD1>ISAPIReadAheadBuffer</KEYWORD1>\r
+                       <KEYWORD1>IdentityCheck</KEYWORD1>\r
+                       <KEYWORD1>ImapBase</KEYWORD1>\r
+                       <KEYWORD1>ImapDefault</KEYWORD1>\r
+                       <KEYWORD1>ImapMenu</KEYWORD1>\r
+                       <KEYWORD1>Include</KEYWORD1>\r
+                       <KEYWORD1>IndexIgnore</KEYWORD1>\r
+                       <KEYWORD1>IndexOptions</KEYWORD1>\r
+                       <KEYWORD1>IndexOrderDefault</KEYWORD1>\r
+                       <KEYWORD1>KeepAlive</KEYWORD1>\r
+                       <KEYWORD1>KeepAliveTimeout</KEYWORD1>\r
+                       <KEYWORD1>LDAPCacheEntries</KEYWORD1>\r
+                       <KEYWORD1>LDAPCacheTTL</KEYWORD1>\r
+                       <KEYWORD1>LDAPOpCacheEntries</KEYWORD1>\r
+                       <KEYWORD1>LDAPOpCacheTTL</KEYWORD1>\r
+                       <KEYWORD1>LDAPSharedCacheFile</KEYWORD1>\r
+                       <KEYWORD1>LDAPSharedCacheSize</KEYWORD1>\r
+                       <KEYWORD1>LDAPTrustedCA</KEYWORD1>\r
+                       <KEYWORD1>LDAPTrustedCAType</KEYWORD1>\r
+                       <KEYWORD1>LanguagePriority</KEYWORD1>\r
+                       <KEYWORD1>LimitInternalRecursion</KEYWORD1>\r
+                       <KEYWORD1>LimitRequestBody</KEYWORD1>\r
+                       <KEYWORD1>LimitRequestFields</KEYWORD1>\r
+                       <KEYWORD1>LimitRequestFieldsize</KEYWORD1>\r
+                       <KEYWORD1>LimitRequestLine</KEYWORD1>\r
+                       <KEYWORD1>LimitXMLRequestBody</KEYWORD1>\r
+                       <KEYWORD1>Listen</KEYWORD1>\r
+                       <KEYWORD1>ListenBacklog</KEYWORD1>\r
+                       <KEYWORD1>LoadFile</KEYWORD1>\r
+                       <KEYWORD1>LoadModule</KEYWORD1>\r
+                       <KEYWORD1>LockFile</KEYWORD1>\r
+                       <KEYWORD1>LogFormat</KEYWORD1>\r
+                       <KEYWORD1>LogLevel</KEYWORD1>\r
+                       <KEYWORD1>MCacheMaxObjectCount</KEYWORD1>\r
+                       <KEYWORD1>MCacheMaxObjectSize</KEYWORD1>\r
+                       <KEYWORD1>MCacheMaxStreamingBuffer</KEYWORD1>\r
+                       <KEYWORD1>MCacheMinObjectSize</KEYWORD1>\r
+                       <KEYWORD1>MCacheRemovalAlgorithm</KEYWORD1>\r
+                       <KEYWORD1>MCacheSize</KEYWORD1>\r
+                       <KEYWORD1>MMapFile</KEYWORD1>\r
+                       <KEYWORD1>MaxClients</KEYWORD1>\r
+                       <KEYWORD1>MaxKeepAliveRequests</KEYWORD1>\r
+                       <KEYWORD1>MaxMemFree</KEYWORD1>\r
+                       <KEYWORD1>MaxRequestsPerChild</KEYWORD1>\r
+                       <KEYWORD1>MaxRequestsPerThread</KEYWORD1>\r
+                       <KEYWORD1>MaxSpareServers</KEYWORD1>\r
+                       <KEYWORD1>MaxSpareThreads</KEYWORD1>\r
+                       <KEYWORD1>MaxThreads</KEYWORD1>\r
+                       <KEYWORD1>MaxThreadsPerChild</KEYWORD1>\r
+                       <KEYWORD1>MetaDir</KEYWORD1>\r
+                       <KEYWORD1>MetaFiles</KEYWORD1>\r
+                       <KEYWORD1>MetaSuffix</KEYWORD1>\r
+                       <KEYWORD1>MimeMagicFile</KEYWORD1>\r
+                       <KEYWORD1>MinSpareServers</KEYWORD1>\r
+                       <KEYWORD1>MinSpareThreads</KEYWORD1>\r
+                       <KEYWORD1>MultiviewsMatch</KEYWORD1>\r
+                       <KEYWORD1>NWSSLTrustedCerts</KEYWORD1>\r
+                       <KEYWORD1>NWSSLUpgradeable</KEYWORD1>\r
+                       <KEYWORD1>NameVirtualHost</KEYWORD1>\r
+                       <KEYWORD1>NoProxy</KEYWORD1>\r
+                       <KEYWORD1>NumServers</KEYWORD1>\r
+                       <KEYWORD1>Options</KEYWORD1>\r
+                       <KEYWORD1>PassEnv</KEYWORD1>\r
+                       <KEYWORD1>PidFile</KEYWORD1>\r
+                       <KEYWORD1>ProtocolEcho</KEYWORD1>\r
+                       <KEYWORD1>ProxyBadHeader</KEYWORD1>\r
+                       <KEYWORD1>ProxyBlock</KEYWORD1>\r
+                       <KEYWORD1>ProxyDomain</KEYWORD1>\r
+                       <KEYWORD1>ProxyErrorOverride</KEYWORD1>\r
+                       <KEYWORD1>ProxyIOBufferSize</KEYWORD1>\r
+                       <KEYWORD1>ProxyMaxForwards</KEYWORD1>\r
+                       <KEYWORD1>ProxyPass</KEYWORD1>\r
+                       <KEYWORD1>ProxyPassReverse</KEYWORD1>\r
+                       <KEYWORD1>ProxyPreserveHost</KEYWORD1>\r
+                       <KEYWORD1>ProxyReceiveBufferSize</KEYWORD1>\r
+                       <KEYWORD1>ProxyRemote</KEYWORD1>\r
+                       <KEYWORD1>ProxyRemoteMatch</KEYWORD1>\r
+                       <KEYWORD1>ProxyRequests</KEYWORD1>\r
+                       <KEYWORD1>ProxyTimeout</KEYWORD1>\r
+                       <KEYWORD1>ProxyVia</KEYWORD1>\r
+                       <KEYWORD1>RLimitCPU</KEYWORD1>\r
+                       <KEYWORD1>RLimitMEM</KEYWORD1>\r
+                       <KEYWORD1>RLimitNPROC</KEYWORD1>\r
+                       <KEYWORD1>ReadmeName</KEYWORD1>\r
+                       <KEYWORD1>Redirect</KEYWORD1>\r
+                       <KEYWORD1>RedirectMatch</KEYWORD1>\r
+                       <KEYWORD1>RedirectPermanent</KEYWORD1>\r
+                       <KEYWORD1>RedirectTemp</KEYWORD1>\r
+                       <KEYWORD1>RequestHeader</KEYWORD1>\r
+                       <KEYWORD1>RewriteBase</KEYWORD1>\r
+                       <KEYWORD1>RewriteCond</KEYWORD1>\r
+                       <KEYWORD1>RewriteEngine</KEYWORD1>\r
+                       <KEYWORD1>RewriteLock</KEYWORD1>\r
+                       <KEYWORD1>RewriteLog</KEYWORD1>\r
+                       <KEYWORD1>RewriteLogLevel</KEYWORD1>\r
+                       <KEYWORD1>RewriteMap</KEYWORD1>\r
+                       <KEYWORD1>RewriteOptions</KEYWORD1>\r
+                       <KEYWORD1>RewriteRule</KEYWORD1>\r
+                       <KEYWORD1>SSIEndTag</KEYWORD1>\r
+                       <KEYWORD1>SSIErrorMsg</KEYWORD1>\r
+                       <KEYWORD1>SSIStartTag</KEYWORD1>\r
+                       <KEYWORD1>SSITimeFormat</KEYWORD1>\r
+                       <KEYWORD1>SSIUndefinedEcho</KEYWORD1>\r
+                       <KEYWORD1>SSLCACertificateFile</KEYWORD1>\r
+                       <KEYWORD1>SSLCACertificatePath</KEYWORD1>\r
+                       <KEYWORD1>SSLCARevocationFile</KEYWORD1>\r
+                       <KEYWORD1>SSLCARevocationPath</KEYWORD1>\r
+                       <KEYWORD1>SSLCertificateChainFile</KEYWORD1>\r
+                       <KEYWORD1>SSLCertificateFile</KEYWORD1>\r
+                       <KEYWORD1>SSLCertificateKeyFile</KEYWORD1>\r
+                       <KEYWORD1>SSLCipherSuite</KEYWORD1>\r
+                       <KEYWORD1>SSLEngine</KEYWORD1>\r
+                       <KEYWORD1>SSLMutex</KEYWORD1>\r
+                       <KEYWORD1>SSLOptions</KEYWORD1>\r
+                       <KEYWORD1>SSLPassPhraseDialog</KEYWORD1>\r
+                       <KEYWORD1>SSLProtocol</KEYWORD1>\r
+                       <KEYWORD1>SSLProxyCACertificateFile</KEYWORD1>\r
+                       <KEYWORD1>SSLProxyCACertificatePath</KEYWORD1>\r
+                       <KEYWORD1>SSLProxyCARevocationFile</KEYWORD1>\r
+                       <KEYWORD1>SSLProxyCARevocationPath</KEYWORD1>\r
+                       <KEYWORD1>SSLProxyCipherSuite</KEYWORD1>\r
+                       <KEYWORD1>SSLProxyEngine</KEYWORD1>\r
+                       <KEYWORD1>SSLProxyMachineCertificateFile</KEYWORD1>\r
+                       <KEYWORD1>SSLProxyMachineCertificatePath</KEYWORD1>\r
+                       <KEYWORD1>SSLProxyProtocol</KEYWORD1>\r
+                       <KEYWORD1>SSLProxyVerify</KEYWORD1>\r
+                       <KEYWORD1>SSLProxyVerifyDepth</KEYWORD1>\r
+                       <KEYWORD1>SSLRandomSeed</KEYWORD1>\r
+                       <KEYWORD1>SSLSessionCache</KEYWORD1>\r
+                       <KEYWORD1>SSLSessionCacheTimeout</KEYWORD1>\r
+                       <KEYWORD1>SSLVerifyClient</KEYWORD1>\r
+                       <KEYWORD1>SSLVerifyDepth</KEYWORD1>\r
+                       <KEYWORD1>ScoreBoardFile</KEYWORD1>\r
+                       <KEYWORD1>Script</KEYWORD1>\r
+                       <KEYWORD1>ScriptAlias</KEYWORD1>\r
+                       <KEYWORD1>ScriptAliasMatch</KEYWORD1>\r
+                       <KEYWORD1>ScriptInterpreterSource</KEYWORD1>\r
+                       <KEYWORD1>ScriptLog</KEYWORD1>\r
+                       <KEYWORD1>ScriptLogBuffer</KEYWORD1>\r
+                       <KEYWORD1>ScriptLogLength</KEYWORD1>\r
+                       <KEYWORD1>ScriptSock</KEYWORD1>\r
+                       <KEYWORD1>SecureListen</KEYWORD1>\r
+                       <KEYWORD1>SendBufferSize</KEYWORD1>\r
+                       <KEYWORD1>ServerAdmin</KEYWORD1>\r
+                       <KEYWORD1>ServerLimit</KEYWORD1>\r
+                       <KEYWORD1>ServerName</KEYWORD1>\r
+                       <KEYWORD1>ServerRoot</KEYWORD1>\r
+                       <KEYWORD1>ServerSignature</KEYWORD1>\r
+                       <KEYWORD1>ServerTokens</KEYWORD1>\r
+                       <KEYWORD1>SetEnv</KEYWORD1>\r
+                       <KEYWORD1>SetEnvIf</KEYWORD1>\r
+                       <KEYWORD1>SetEnvIfNoCase</KEYWORD1>\r
+                       <KEYWORD1>SetHandler</KEYWORD1>\r
+                       <KEYWORD1>SetInputFilter</KEYWORD1>\r
+                       <KEYWORD1>SetOutputFilter</KEYWORD1>\r
+                       <KEYWORD1>StartServers</KEYWORD1>\r
+                       <KEYWORD1>StartThreads</KEYWORD1>\r
+                       <KEYWORD1>SuexecUserGroup</KEYWORD1>\r
+                       <KEYWORD1>ThreadLimit</KEYWORD1>\r
+                       <KEYWORD1>ThreadStackSize</KEYWORD1>\r
+                       <KEYWORD1>ThreadsPerChild</KEYWORD1>\r
+                       <KEYWORD1>TimeOut</KEYWORD1>\r
+                       <KEYWORD1>TransferLog</KEYWORD1>\r
+                       <KEYWORD1>TypesConfig</KEYWORD1>\r
+                       <KEYWORD1>UnsetEnv</KEYWORD1>\r
+                       <KEYWORD1>UseCanonicalName</KEYWORD1>\r
+                       <KEYWORD1>User</KEYWORD1>\r
+                       <KEYWORD1>UserDir</KEYWORD1>\r
+                       <KEYWORD1>VirtualDocumentRoot</KEYWORD1>\r
+                       <KEYWORD1>VirtualDocumentRootIP</KEYWORD1>\r
+                       <KEYWORD1>VirtualScriptAlias</KEYWORD1>\r
+                       <KEYWORD1>VirtualScriptAliasIP</KEYWORD1>\r
+                       <KEYWORD1>Win32DisableAcceptEx</KEYWORD1>\r
+                       <KEYWORD1>XBitHack</KEYWORD1>\r
+\r
+                       <!-- Apache 1.x -->\r
+                       <KEYWORD4>AddModule</KEYWORD4>\r
+                       <KEYWORD4>ClearModuleList</KEYWORD4>\r
+                       <KEYWORD4>ServerType</KEYWORD4>\r
+                       <KEYWORD4>Port</KEYWORD4>\r
+\r
+                       <LITERAL2>Off</LITERAL2>\r
+                       <LITERAL2>On</LITERAL2>\r
+                       <LITERAL2>None</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="DIRECTIVE" DEFAULT="NULL" ESCAPE="\" IGNORE_CASE="TRUE">\r
+\r
+               <EOL_SPAN TYPE="COMMENT2">#</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN_REGEXP HASH_CHAR="&lt;VirtualHost" TYPE="MARKUP" DELEGATE="VHOST">\r
+                       <BEGIN><![CDATA[<(VirtualHost)[^>]*>]]></BEGIN>\r
+                       <END><![CDATA[</$1>]]></END>\r
+               </SPAN_REGEXP>\r
+\r
+               <SPAN_REGEXP HASH_CHAR="&lt;" TYPE="MARKUP" DELEGATE="DIRECTIVE">\r
+                       <BEGIN><![CDATA[<(\w+)[^>]*>]]></BEGIN>\r
+                       <END><![CDATA[</$1>]]></END>\r
+               </SPAN_REGEXP>\r
+\r
+               <KEYWORDS>\r
+\r
+                       <KEYWORD2>AcceptMutex</KEYWORD2>\r
+                       <KEYWORD2>AcceptPathInfo</KEYWORD2>\r
+                       <KEYWORD2>AccessFileName</KEYWORD2>\r
+                       <KEYWORD2>Action</KEYWORD2>\r
+                       <KEYWORD2>AddAlt</KEYWORD2>\r
+                       <KEYWORD2>AddAltByEncoding</KEYWORD2>\r
+                       <KEYWORD2>AddAltByType</KEYWORD2>\r
+                       <KEYWORD2>AddCharset</KEYWORD2>\r
+                       <KEYWORD2>AddDefaultCharset</KEYWORD2>\r
+                       <KEYWORD2>AddDescription</KEYWORD2>\r
+                       <KEYWORD2>AddEncoding</KEYWORD2>\r
+                       <KEYWORD2>AddHandler</KEYWORD2>\r
+                       <KEYWORD2>AddIcon</KEYWORD2>\r
+                       <KEYWORD2>AddIconByEncoding</KEYWORD2>\r
+                       <KEYWORD2>AddIconByType</KEYWORD2>\r
+                       <KEYWORD2>AddInputFilter</KEYWORD2>\r
+                       <KEYWORD2>AddLanguage</KEYWORD2>\r
+                       <KEYWORD2>AddModuleInfo</KEYWORD2>\r
+                       <KEYWORD2>AddOutputFilter</KEYWORD2>\r
+                       <KEYWORD2>AddOutputFilterByType</KEYWORD2>\r
+                       <KEYWORD2>AddType</KEYWORD2>\r
+                       <KEYWORD2>Alias</KEYWORD2>\r
+                       <KEYWORD2>AliasMatch</KEYWORD2>\r
+                       <KEYWORD2>Allow</KEYWORD2>\r
+                       <KEYWORD2>AllowCONNECT</KEYWORD2>\r
+                       <KEYWORD2>AllowEncodedSlashes</KEYWORD2>\r
+                       <KEYWORD2>AllowOverride</KEYWORD2>\r
+                       <KEYWORD2>Anonymous</KEYWORD2>\r
+                       <KEYWORD2>Anonymous_Authoritative</KEYWORD2>\r
+                       <KEYWORD2>Anonymous_LogEmail</KEYWORD2>\r
+                       <KEYWORD2>Anonymous_MustGiveEmail</KEYWORD2>\r
+                       <KEYWORD2>Anonymous_NoUserID</KEYWORD2>\r
+                       <KEYWORD2>Anonymous_VerifyEmail</KEYWORD2>\r
+                       <KEYWORD2>AuthAuthoritative</KEYWORD2>\r
+                       <KEYWORD2>AuthDBMAuthoritative</KEYWORD2>\r
+                       <KEYWORD2>AuthDBMGroupFile</KEYWORD2>\r
+                       <KEYWORD2>AuthDBMType</KEYWORD2>\r
+                       <KEYWORD2>AuthDBMUserFile</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestAlgorithm</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestDomain</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestFile</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestGroupFile</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestNcCheck</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestNonceFormat</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestNonceLifetime</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestQop</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestShmemSize</KEYWORD2>\r
+                       <KEYWORD2>AuthGroupFile</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPAuthoritative</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPBindDN</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPBindPassword</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPCharsetConfig</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPCompareDNOnServer</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPDereferenceAliases</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPEnabled</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPFrontPageHack</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPGroupAttribute</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPGroupAttributeIsDN</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPRemoteUserIsDN</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPUrl</KEYWORD2>\r
+                       <KEYWORD2>AuthName</KEYWORD2>\r
+                       <KEYWORD2>AuthType</KEYWORD2>\r
+                       <KEYWORD2>AuthUserFile</KEYWORD2>\r
+                       <KEYWORD2>BS2000Account</KEYWORD2>\r
+                       <KEYWORD2>BrowserMatch</KEYWORD2>\r
+                       <KEYWORD2>BrowserMatchNoCase</KEYWORD2>\r
+                       <KEYWORD2>CGIMapExtension</KEYWORD2>\r
+                       <KEYWORD2>CacheDefaultExpire</KEYWORD2>\r
+                       <KEYWORD2>CacheDirLength</KEYWORD2>\r
+                       <KEYWORD2>CacheDirLevels</KEYWORD2>\r
+                       <KEYWORD2>CacheDisable</KEYWORD2>\r
+                       <KEYWORD2>CacheEnable</KEYWORD2>\r
+                       <KEYWORD2>CacheExpiryCheck</KEYWORD2>\r
+                       <KEYWORD2>CacheFile</KEYWORD2>\r
+                       <KEYWORD2>CacheForceCompletion</KEYWORD2>\r
+                       <KEYWORD2>CacheGcClean</KEYWORD2>\r
+                       <KEYWORD2>CacheGcDaily</KEYWORD2>\r
+                       <KEYWORD2>CacheGcInterval</KEYWORD2>\r
+                       <KEYWORD2>CacheGcMemUsage</KEYWORD2>\r
+                       <KEYWORD2>CacheGcUnused</KEYWORD2>\r
+                       <KEYWORD2>CacheIgnoreCacheControl</KEYWORD2>\r
+                       <KEYWORD2>CacheIgnoreNoLastMod</KEYWORD2>\r
+                       <KEYWORD2>CacheLastModifiedFactor</KEYWORD2>\r
+                       <KEYWORD2>CacheMaxExpire</KEYWORD2>\r
+                       <KEYWORD2>CacheMaxFileSize</KEYWORD2>\r
+                       <KEYWORD2>CacheMinFileSize</KEYWORD2>\r
+                       <KEYWORD2>CacheNegotiatedDocs</KEYWORD2>\r
+                       <KEYWORD2>CacheRoot</KEYWORD2>\r
+                       <KEYWORD2>CacheSize</KEYWORD2>\r
+                       <KEYWORD2>CacheTimeMargin</KEYWORD2>\r
+                       <KEYWORD2>CharsetDefault</KEYWORD2>\r
+                       <KEYWORD2>CharsetOptions</KEYWORD2>\r
+                       <KEYWORD2>CharsetSourceEnc</KEYWORD2>\r
+                       <KEYWORD2>CheckSpelling</KEYWORD2>\r
+                       <KEYWORD2>ChildPerUserID</KEYWORD2>\r
+                       <KEYWORD2>ContentDigest</KEYWORD2>\r
+                       <KEYWORD2>CookieDomain</KEYWORD2>\r
+                       <KEYWORD2>CookieExpires</KEYWORD2>\r
+                       <KEYWORD2>CookieLog</KEYWORD2>\r
+                       <KEYWORD2>CookieName</KEYWORD2>\r
+                       <KEYWORD2>CookieStyle</KEYWORD2>\r
+                       <KEYWORD2>CookieTracking</KEYWORD2>\r
+                       <KEYWORD2>CoreDumpDirectory</KEYWORD2>\r
+                       <KEYWORD2>CustomLog</KEYWORD2>\r
+                       <KEYWORD2>Dav</KEYWORD2>\r
+                       <KEYWORD2>DavDepthInfinity</KEYWORD2>\r
+                       <KEYWORD2>DavLockDB</KEYWORD2>\r
+                       <KEYWORD2>DavMinTimeout</KEYWORD2>\r
+                       <KEYWORD2>DefaultIcon</KEYWORD2>\r
+                       <KEYWORD2>DefaultLanguage</KEYWORD2>\r
+                       <KEYWORD2>DefaultType</KEYWORD2>\r
+                       <KEYWORD2>DeflateBufferSize</KEYWORD2>\r
+                       <KEYWORD2>DeflateCompressionLevel</KEYWORD2>\r
+                       <KEYWORD2>DeflateFilterNote</KEYWORD2>\r
+                       <KEYWORD2>DeflateMemLevel</KEYWORD2>\r
+                       <KEYWORD2>DeflateWindowSize</KEYWORD2>\r
+                       <KEYWORD2>Deny</KEYWORD2>\r
+                       <KEYWORD2>DirectoryIndex</KEYWORD2>\r
+                       <KEYWORD1>DirectorySlash</KEYWORD1>\r
+                       <KEYWORD2>DocumentRoot</KEYWORD2>\r
+                       <KEYWORD2>EnableMMAP</KEYWORD2>\r
+                       <KEYWORD2>EnableSendfile</KEYWORD2>\r
+                       <KEYWORD2>ErrorDocument</KEYWORD2>\r
+                       <KEYWORD2>ErrorLog</KEYWORD2>\r
+                       <KEYWORD2>Example</KEYWORD2>\r
+                       <KEYWORD2>ExpiresActive</KEYWORD2>\r
+                       <KEYWORD2>ExpiresByType</KEYWORD2>\r
+                       <KEYWORD2>ExpiresDefault</KEYWORD2>\r
+                       <KEYWORD2>ExtFilterDefine</KEYWORD2>\r
+                       <KEYWORD2>ExtFilterOptions</KEYWORD2>\r
+                       <KEYWORD2>ExtendedStatus</KEYWORD2>\r
+                       <KEYWORD2>FileETag</KEYWORD2>\r
+                       <KEYWORD2>ForceLanguagePriority</KEYWORD2>\r
+                       <KEYWORD2>ForceType</KEYWORD2>\r
+                       <KEYWORD2>Group</KEYWORD2>\r
+                       <KEYWORD2>Header</KEYWORD2>\r
+                       <KEYWORD2>HeaderName</KEYWORD2>\r
+                       <KEYWORD2>HostnameLookups</KEYWORD2>\r
+                       <KEYWORD2>ISAPIAppendLogToErrors</KEYWORD2>\r
+                       <KEYWORD2>ISAPIAppendLogToQuery</KEYWORD2>\r
+                       <KEYWORD2>ISAPICacheFile</KEYWORD2>\r
+                       <KEYWORD2>ISAPIFakeAsync</KEYWORD2>\r
+                       <KEYWORD2>ISAPILogNotSupported</KEYWORD2>\r
+                       <KEYWORD2>ISAPIReadAheadBuffer</KEYWORD2>\r
+                       <KEYWORD2>IdentityCheck</KEYWORD2>\r
+                       <KEYWORD2>ImapBase</KEYWORD2>\r
+                       <KEYWORD2>ImapDefault</KEYWORD2>\r
+                       <KEYWORD2>ImapMenu</KEYWORD2>\r
+                       <KEYWORD2>Include</KEYWORD2>\r
+                       <KEYWORD2>IndexIgnore</KEYWORD2>\r
+                       <KEYWORD2>IndexOptions</KEYWORD2>\r
+                       <KEYWORD2>IndexOrderDefault</KEYWORD2>\r
+                       <KEYWORD2>KeepAlive</KEYWORD2>\r
+                       <KEYWORD2>KeepAliveTimeout</KEYWORD2>\r
+                       <KEYWORD2>LDAPCacheEntries</KEYWORD2>\r
+                       <KEYWORD2>LDAPCacheTTL</KEYWORD2>\r
+                       <KEYWORD2>LDAPOpCacheEntries</KEYWORD2>\r
+                       <KEYWORD2>LDAPOpCacheTTL</KEYWORD2>\r
+                       <KEYWORD2>LDAPSharedCacheSize</KEYWORD2>\r
+                       <KEYWORD2>LDAPTrustedCA</KEYWORD2>\r
+                       <KEYWORD2>LDAPTrustedCAType</KEYWORD2>\r
+                       <KEYWORD2>LanguagePriority</KEYWORD2>\r
+                       <KEYWORD2>LimitInternalRecursion</KEYWORD2>\r
+                       <KEYWORD2>LimitRequestBody</KEYWORD2>\r
+                       <KEYWORD2>LimitRequestFields</KEYWORD2>\r
+                       <KEYWORD2>LimitRequestFieldsize</KEYWORD2>\r
+                       <KEYWORD2>LimitRequestLine</KEYWORD2>\r
+                       <KEYWORD2>LimitXMLRequestBody</KEYWORD2>\r
+                       <KEYWORD2>Listen</KEYWORD2>\r
+                       <KEYWORD2>ListenBacklog</KEYWORD2>\r
+                       <KEYWORD2>LoadFile</KEYWORD2>\r
+                       <KEYWORD2>LoadModule</KEYWORD2>\r
+                       <KEYWORD2>LockFile</KEYWORD2>\r
+                       <KEYWORD2>LogFormat</KEYWORD2>\r
+                       <KEYWORD2>LogLevel</KEYWORD2>\r
+                       <KEYWORD2>MCacheMaxObjectCount</KEYWORD2>\r
+                       <KEYWORD2>MCacheMaxObjectSize</KEYWORD2>\r
+                       <KEYWORD2>MCacheMaxStreamingBuffer</KEYWORD2>\r
+                       <KEYWORD2>MCacheMinObjectSize</KEYWORD2>\r
+                       <KEYWORD2>MCacheRemovalAlgorithm</KEYWORD2>\r
+                       <KEYWORD2>MCacheSize</KEYWORD2>\r
+                       <KEYWORD2>MMapFile</KEYWORD2>\r
+                       <KEYWORD2>MaxClients</KEYWORD2>\r
+                       <KEYWORD2>MaxKeepAliveRequests</KEYWORD2>\r
+                       <KEYWORD2>MaxMemFree</KEYWORD2>\r
+                       <KEYWORD2>MaxRequestsPerChild</KEYWORD2>\r
+                       <KEYWORD2>MaxRequestsPerThread</KEYWORD2>\r
+                       <KEYWORD2>MaxSpareServers</KEYWORD2>\r
+                       <KEYWORD2>MaxSpareThreads</KEYWORD2>\r
+                       <KEYWORD2>MaxThreads</KEYWORD2>\r
+                       <KEYWORD2>MaxThreadsPerChild</KEYWORD2>\r
+                       <KEYWORD2>MetaDir</KEYWORD2>\r
+                       <KEYWORD2>MetaFiles</KEYWORD2>\r
+                       <KEYWORD2>MetaSuffix</KEYWORD2>\r
+                       <KEYWORD2>MimeMagicFile</KEYWORD2>\r
+                       <KEYWORD2>MinSpareServers</KEYWORD2>\r
+                       <KEYWORD2>MinSpareThreads</KEYWORD2>\r
+                       <KEYWORD2>ModMimeUsePathInfo</KEYWORD2>\r
+                       <KEYWORD2>MultiviewsMatch</KEYWORD2>\r
+                       <KEYWORD2>NWSSLTrustedCerts</KEYWORD2>\r
+                       <KEYWORD2>NameVirtualHost</KEYWORD2>\r
+                       <KEYWORD2>NoProxy</KEYWORD2>\r
+                       <KEYWORD2>NumServers</KEYWORD2>\r
+                       <KEYWORD2>Options</KEYWORD2>\r
+                       <KEYWORD2>Order</KEYWORD2>\r
+                       <KEYWORD2>PassEnv</KEYWORD2>\r
+                       <KEYWORD2>PidFile</KEYWORD2>\r
+                       <KEYWORD2>ProtocolEcho</KEYWORD2>\r
+                       <KEYWORD2>ProxyBadHeader</KEYWORD2>\r
+                       <KEYWORD2>ProxyBlock</KEYWORD2>\r
+                       <KEYWORD2>ProxyDomain</KEYWORD2>\r
+                       <KEYWORD2>ProxyErrorOverride</KEYWORD2>\r
+                       <KEYWORD2>ProxyIOBufferSize</KEYWORD2>\r
+                       <KEYWORD2>ProxyMaxForwards</KEYWORD2>\r
+                       <KEYWORD2>ProxyPass</KEYWORD2>\r
+                       <KEYWORD2>ProxyPassReverse</KEYWORD2>\r
+                       <KEYWORD2>ProxyPreserveHost</KEYWORD2>\r
+                       <KEYWORD2>ProxyReceiveBufferSize</KEYWORD2>\r
+                       <KEYWORD2>ProxyRemote</KEYWORD2>\r
+                       <KEYWORD2>ProxyRemoteMatch</KEYWORD2>\r
+                       <KEYWORD2>ProxyRequests</KEYWORD2>\r
+                       <KEYWORD2>ProxyTimeout</KEYWORD2>\r
+                       <KEYWORD2>ProxyVia</KEYWORD2>\r
+                       <KEYWORD2>RLimitCPU</KEYWORD2>\r
+                       <KEYWORD2>RLimitMEM</KEYWORD2>\r
+                       <KEYWORD2>RLimitNPROC</KEYWORD2>\r
+                       <KEYWORD2>ReadmeName</KEYWORD2>\r
+                       <KEYWORD2>Redirect</KEYWORD2>\r
+                       <KEYWORD2>RedirectMatch</KEYWORD2>\r
+                       <KEYWORD2>RedirectPermanent</KEYWORD2>\r
+                       <KEYWORD2>RedirectTemp</KEYWORD2>\r
+                       <KEYWORD2>RemoveCharset</KEYWORD2>\r
+                       <KEYWORD2>RemoveEncoding</KEYWORD2>\r
+                       <KEYWORD2>RemoveHandler</KEYWORD2>\r
+                       <KEYWORD2>RemoveInputFilter</KEYWORD2>\r
+                       <KEYWORD2>RemoveLanguage</KEYWORD2>\r
+                       <KEYWORD2>RemoveOutputFilter</KEYWORD2>\r
+                       <KEYWORD2>RemoveType</KEYWORD2>\r
+                       <KEYWORD2>RequestHeader</KEYWORD2>\r
+                       <KEYWORD2>Require</KEYWORD2>\r
+                       <KEYWORD2>RewriteBase</KEYWORD2>\r
+                       <KEYWORD2>RewriteCond</KEYWORD2>\r
+                       <KEYWORD2>RewriteEngine</KEYWORD2>\r
+                       <KEYWORD2>RewriteLock</KEYWORD2>\r
+                       <KEYWORD2>RewriteLog</KEYWORD2>\r
+                       <KEYWORD2>RewriteLogLevel</KEYWORD2>\r
+                       <KEYWORD2>RewriteMap</KEYWORD2>\r
+                       <KEYWORD2>RewriteOptions</KEYWORD2>\r
+                       <KEYWORD2>RewriteRule</KEYWORD2>\r
+                       <KEYWORD2>SSIEndTag</KEYWORD2>\r
+                       <KEYWORD2>SSIErrorMsg</KEYWORD2>\r
+                       <KEYWORD2>SSIStartTag</KEYWORD2>\r
+                       <KEYWORD2>SSITimeFormat</KEYWORD2>\r
+                       <KEYWORD2>SSIUndefinedEcho</KEYWORD2>\r
+                       <KEYWORD2>SSLCACertificateFile</KEYWORD2>\r
+                       <KEYWORD2>SSLCACertificatePath</KEYWORD2>\r
+                       <KEYWORD2>SSLCARevocationFile</KEYWORD2>\r
+                       <KEYWORD2>SSLCARevocationPath</KEYWORD2>\r
+                       <KEYWORD2>SSLCertificateChainFile</KEYWORD2>\r
+                       <KEYWORD2>SSLCertificateFile</KEYWORD2>\r
+                       <KEYWORD2>SSLCertificateKeyFile</KEYWORD2>\r
+                       <KEYWORD2>SSLCipherSuite</KEYWORD2>\r
+                       <KEYWORD2>SSLEngine</KEYWORD2>\r
+                       <KEYWORD2>SSLMutex</KEYWORD2>\r
+                       <KEYWORD2>SSLOptions</KEYWORD2>\r
+                       <KEYWORD2>SSLPassPhraseDialog</KEYWORD2>\r
+                       <KEYWORD2>SSLProtocol</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyCACertificateFile</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyCACertificatePath</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyCARevocationFile</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyCARevocationPath</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyCipherSuite</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyEngine</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyMachineCertificateFile</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyMachineCertificatePath</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyProtocol</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyVerify</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyVerifyDepth</KEYWORD2>\r
+                       <KEYWORD2>SSLRandomSeed</KEYWORD2>\r
+                       <KEYWORD2>SSLRequire</KEYWORD2>\r
+                       <KEYWORD2>SSLRequireSSL</KEYWORD2>\r
+                       <KEYWORD2>SSLSessionCache</KEYWORD2>\r
+                       <KEYWORD2>SSLSessionCacheTimeout</KEYWORD2>\r
+                       <KEYWORD2>SSLVerifyClient</KEYWORD2>\r
+                       <KEYWORD2>SSLVerifyDepth</KEYWORD2>\r
+                       <KEYWORD2>Satisfy</KEYWORD2>\r
+                       <KEYWORD2>ScoreBoardFile</KEYWORD2>\r
+                       <KEYWORD2>Script</KEYWORD2>\r
+                       <KEYWORD2>ScriptAlias</KEYWORD2>\r
+                       <KEYWORD2>ScriptAliasMatch</KEYWORD2>\r
+                       <KEYWORD2>ScriptInterpreterSource</KEYWORD2>\r
+                       <KEYWORD2>ScriptLog</KEYWORD2>\r
+                       <KEYWORD2>ScriptLogBuffer</KEYWORD2>\r
+                       <KEYWORD2>ScriptLogLength</KEYWORD2>\r
+                       <KEYWORD2>ScriptSock</KEYWORD2>\r
+                       <KEYWORD2>SecureListen</KEYWORD2>\r
+                       <KEYWORD2>SendBufferSize</KEYWORD2>\r
+                       <KEYWORD2>ServerAdmin</KEYWORD2>\r
+                       <KEYWORD2>ServerLimit</KEYWORD2>\r
+                       <KEYWORD2>ServerName</KEYWORD2>\r
+                       <KEYWORD2>ServerRoot</KEYWORD2>\r
+                       <KEYWORD2>ServerSignature</KEYWORD2>\r
+                       <KEYWORD2>ServerTokens</KEYWORD2>\r
+                       <KEYWORD2>SetEnv</KEYWORD2>\r
+                       <KEYWORD2>SetEnvIf</KEYWORD2>\r
+                       <KEYWORD2>SetEnvIfNoCase</KEYWORD2>\r
+                       <KEYWORD2>SetHandler</KEYWORD2>\r
+                       <KEYWORD2>SetInputFilter</KEYWORD2>\r
+                       <KEYWORD2>SetOutputFilter</KEYWORD2>\r
+                       <KEYWORD2>StartServers</KEYWORD2>\r
+                       <KEYWORD2>StartThreads</KEYWORD2>\r
+                       <KEYWORD2>SuexecUserGroup</KEYWORD2>\r
+                       <KEYWORD2>ThreadLimit</KEYWORD2>\r
+                       <KEYWORD2>ThreadStackSize</KEYWORD2>\r
+                       <KEYWORD2>ThreadsPerChild</KEYWORD2>\r
+                       <KEYWORD2>TimeOut</KEYWORD2>\r
+                       <KEYWORD2>TransferLog</KEYWORD2>\r
+                       <KEYWORD2>TypesConfig</KEYWORD2>\r
+                       <KEYWORD2>UnsetEnv</KEYWORD2>\r
+                       <KEYWORD2>UseCanonicalName</KEYWORD2>\r
+                       <KEYWORD2>User</KEYWORD2>\r
+                       <KEYWORD2>UserDir</KEYWORD2>\r
+                       <KEYWORD2>VirtualDocumentRoot</KEYWORD2>\r
+                       <KEYWORD2>VirtualDocumentRootIP</KEYWORD2>\r
+                       <KEYWORD2>VirtualScriptAlias</KEYWORD2>\r
+                       <KEYWORD2>VirtualScriptAliasIP</KEYWORD2>\r
+                       <KEYWORD2>XBitHack</KEYWORD2>\r
+\r
+                       <!-- Apache 1.x -->\r
+                       <KEYWORD4>AddModule</KEYWORD4>\r
+                       <KEYWORD4>ClearModuleList</KEYWORD4>\r
+\r
+                       <!-- Subversion directives -->\r
+                       <KEYWORD3>SVNPath</KEYWORD3>\r
+                       <KEYWORD3>SVNParentPath</KEYWORD3>\r
+                       <KEYWORD3>SVNIndexXSLT</KEYWORD3>\r
+\r
+                       <!-- mod_python directives -->\r
+                       <KEYWORD3>PythonHandler</KEYWORD3>\r
+                       <KEYWORD3>PythonDebug</KEYWORD3>\r
+\r
+                       <LITERAL2>All</LITERAL2>\r
+                       <LITERAL2>ExecCGI</LITERAL2>\r
+                       <LITERAL2>FollowSymLinks</LITERAL2>\r
+                       <LITERAL2>Includes</LITERAL2>\r
+                       <LITERAL2>IncludesNOEXEC</LITERAL2>\r
+                       <LITERAL2>Indexes</LITERAL2>\r
+                       <LITERAL2>MultiViews</LITERAL2>\r
+                       <LITERAL2>None</LITERAL2>\r
+                       <LITERAL2>Off</LITERAL2>\r
+                       <LITERAL2>On</LITERAL2>\r
+                       <LITERAL2>SymLinksIfOwnerMatch</LITERAL2>\r
+                       <LITERAL2>from</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="VHOST" DEFAULT="NULL" ESCAPE="\" IGNORE_CASE="TRUE">\r
+\r
+               <EOL_SPAN TYPE="COMMENT2">#</EOL_SPAN>\r
+\r
+               <SPAN_REGEXP HASH_CHAR="&lt;" TYPE="MARKUP" DELEGATE="DIRECTIVE">\r
+                       <BEGIN><![CDATA[<(\w+)[^>]*>]]></BEGIN>\r
+                       <END><![CDATA[</$1>]]></END>\r
+               </SPAN_REGEXP>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD2>AcceptMutex</KEYWORD2>\r
+                       <KEYWORD2>AcceptPathInfo</KEYWORD2>\r
+                       <KEYWORD2>AccessFileName</KEYWORD2>\r
+                       <KEYWORD2>Action</KEYWORD2>\r
+                       <KEYWORD2>AddAlt</KEYWORD2>\r
+                       <KEYWORD2>AddAltByEncoding</KEYWORD2>\r
+                       <KEYWORD2>AddAltByType</KEYWORD2>\r
+                       <KEYWORD2>AddCharset</KEYWORD2>\r
+                       <KEYWORD2>AddDefaultCharset</KEYWORD2>\r
+                       <KEYWORD2>AddDescription</KEYWORD2>\r
+                       <KEYWORD2>AddEncoding</KEYWORD2>\r
+                       <KEYWORD2>AddHandler</KEYWORD2>\r
+                       <KEYWORD2>AddIcon</KEYWORD2>\r
+                       <KEYWORD2>AddIconByEncoding</KEYWORD2>\r
+                       <KEYWORD2>AddIconByType</KEYWORD2>\r
+                       <KEYWORD2>AddInputFilter</KEYWORD2>\r
+                       <KEYWORD2>AddLanguage</KEYWORD2>\r
+                       <KEYWORD2>AddModuleInfo</KEYWORD2>\r
+                       <KEYWORD2>AddOutputFilter</KEYWORD2>\r
+                       <KEYWORD2>AddOutputFilterByType</KEYWORD2>\r
+                       <KEYWORD2>AddType</KEYWORD2>\r
+                       <KEYWORD2>Alias</KEYWORD2>\r
+                       <KEYWORD2>AliasMatch</KEYWORD2>\r
+                       <KEYWORD2>AllowCONNECT</KEYWORD2>\r
+                       <KEYWORD2>AllowEncodedSlashes</KEYWORD2>\r
+                       <KEYWORD2>AssignUserID</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestNcCheck</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestShmemSize</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPCharsetConfig</KEYWORD2>\r
+                       <KEYWORD2>BS2000Account</KEYWORD2>\r
+                       <KEYWORD2>BrowserMatch</KEYWORD2>\r
+                       <KEYWORD2>BrowserMatchNoCase</KEYWORD2>\r
+                       <KEYWORD2>CacheDefaultExpire</KEYWORD2>\r
+                       <KEYWORD2>CacheDirLength</KEYWORD2>\r
+                       <KEYWORD2>CacheDirLevels</KEYWORD2>\r
+                       <KEYWORD2>CacheDisable</KEYWORD2>\r
+                       <KEYWORD2>CacheEnable</KEYWORD2>\r
+                       <KEYWORD2>CacheExpiryCheck</KEYWORD2>\r
+                       <KEYWORD2>CacheFile</KEYWORD2>\r
+                       <KEYWORD2>CacheForceCompletion</KEYWORD2>\r
+                       <KEYWORD2>CacheGcClean</KEYWORD2>\r
+                       <KEYWORD2>CacheGcDaily</KEYWORD2>\r
+                       <KEYWORD2>CacheGcInterval</KEYWORD2>\r
+                       <KEYWORD2>CacheGcMemUsage</KEYWORD2>\r
+                       <KEYWORD2>CacheGcUnused</KEYWORD2>\r
+                       <KEYWORD2>CacheIgnoreCacheControl</KEYWORD2>\r
+                       <KEYWORD2>CacheIgnoreNoLastMod</KEYWORD2>\r
+                       <KEYWORD2>CacheLastModifiedFactor</KEYWORD2>\r
+                       <KEYWORD2>CacheMaxExpire</KEYWORD2>\r
+                       <KEYWORD2>CacheMaxFileSize</KEYWORD2>\r
+                       <KEYWORD2>CacheMinFileSize</KEYWORD2>\r
+                       <KEYWORD2>CacheNegotiatedDocs</KEYWORD2>\r
+                       <KEYWORD2>CacheRoot</KEYWORD2>\r
+                       <KEYWORD2>CacheSize</KEYWORD2>\r
+                       <KEYWORD2>CacheTimeMargin</KEYWORD2>\r
+                       <KEYWORD2>CharsetDefault</KEYWORD2>\r
+                       <KEYWORD2>CharsetOptions</KEYWORD2>\r
+                       <KEYWORD2>CharsetSourceEnc</KEYWORD2>\r
+                       <KEYWORD2>CheckSpelling</KEYWORD2>\r
+                       <KEYWORD2>ChildPerUserID</KEYWORD2>\r
+                       <KEYWORD2>ContentDigest</KEYWORD2>\r
+                       <KEYWORD2>CookieDomain</KEYWORD2>\r
+                       <KEYWORD2>CookieExpires</KEYWORD2>\r
+                       <KEYWORD2>CookieLog</KEYWORD2>\r
+                       <KEYWORD2>CookieName</KEYWORD2>\r
+                       <KEYWORD2>CookieStyle</KEYWORD2>\r
+                       <KEYWORD2>CookieTracking</KEYWORD2>\r
+                       <KEYWORD2>CoreDumpDirectory</KEYWORD2>\r
+                       <KEYWORD2>CustomLog</KEYWORD2>\r
+                       <KEYWORD2>DavDepthInfinity</KEYWORD2>\r
+                       <KEYWORD2>DavLockDB</KEYWORD2>\r
+                       <KEYWORD2>DavMinTimeout</KEYWORD2>\r
+                       <KEYWORD2>DefaultIcon</KEYWORD2>\r
+                       <KEYWORD2>DefaultLanguage</KEYWORD2>\r
+                       <KEYWORD2>DefaultType</KEYWORD2>\r
+                       <KEYWORD2>DeflateBufferSize</KEYWORD2>\r
+                       <KEYWORD2>DeflateCompressionLevel</KEYWORD2>\r
+                       <KEYWORD2>DeflateFilterNote</KEYWORD2>\r
+                       <KEYWORD2>DeflateMemLevel</KEYWORD2>\r
+                       <KEYWORD2>DeflateWindowSize</KEYWORD2>\r
+                       <KEYWORD2>DirectoryIndex</KEYWORD2>\r
+                       <KEYWORD1>DirectorySlash</KEYWORD1>\r
+                       <KEYWORD2>DocumentRoot</KEYWORD2>\r
+                       <KEYWORD2>EnableMMAP</KEYWORD2>\r
+                       <KEYWORD2>EnableSendfile</KEYWORD2>\r
+                       <KEYWORD2>ErrorDocument</KEYWORD2>\r
+                       <KEYWORD2>ErrorLog</KEYWORD2>\r
+                       <KEYWORD2>Example</KEYWORD2>\r
+                       <KEYWORD2>ExpiresActive</KEYWORD2>\r
+                       <KEYWORD2>ExpiresByType</KEYWORD2>\r
+                       <KEYWORD2>ExpiresDefault</KEYWORD2>\r
+                       <KEYWORD2>ExtFilterDefine</KEYWORD2>\r
+                       <KEYWORD2>ExtendedStatus</KEYWORD2>\r
+                       <KEYWORD2>FileETag</KEYWORD2>\r
+                       <KEYWORD2>ForceLanguagePriority</KEYWORD2>\r
+                       <KEYWORD2>ForensicLog</KEYWORD2>\r
+                       <KEYWORD2>Group</KEYWORD2>\r
+                       <KEYWORD2>Header</KEYWORD2>\r
+                       <KEYWORD2>HeaderName</KEYWORD2>\r
+                       <KEYWORD2>HostnameLookups</KEYWORD2>\r
+                       <KEYWORD2>ISAPIAppendLogToErrors</KEYWORD2>\r
+                       <KEYWORD2>ISAPIAppendLogToQuery</KEYWORD2>\r
+                       <KEYWORD2>ISAPICacheFile</KEYWORD2>\r
+                       <KEYWORD2>ISAPIFakeAsync</KEYWORD2>\r
+                       <KEYWORD2>ISAPILogNotSupported</KEYWORD2>\r
+                       <KEYWORD2>ISAPIReadAheadBuffer</KEYWORD2>\r
+                       <KEYWORD2>IdentityCheck</KEYWORD2>\r
+                       <KEYWORD2>ImapBase</KEYWORD2>\r
+                       <KEYWORD2>ImapDefault</KEYWORD2>\r
+                       <KEYWORD2>ImapMenu</KEYWORD2>\r
+                       <KEYWORD2>Include</KEYWORD2>\r
+                       <KEYWORD2>IndexIgnore</KEYWORD2>\r
+                       <KEYWORD2>IndexOptions</KEYWORD2>\r
+                       <KEYWORD2>IndexOrderDefault</KEYWORD2>\r
+                       <KEYWORD2>JkMount</KEYWORD2>\r
+                       <KEYWORD2>KeepAlive</KEYWORD2>\r
+                       <KEYWORD2>KeepAliveTimeout</KEYWORD2>\r
+                       <KEYWORD2>LDAPCacheEntries</KEYWORD2>\r
+                       <KEYWORD2>LDAPCacheTTL</KEYWORD2>\r
+                       <KEYWORD2>LDAPOpCacheEntries</KEYWORD2>\r
+                       <KEYWORD2>LDAPOpCacheTTL</KEYWORD2>\r
+                       <KEYWORD2>LDAPSharedCacheSize</KEYWORD2>\r
+                       <KEYWORD2>LDAPTrustedCA</KEYWORD2>\r
+                       <KEYWORD2>LDAPTrustedCAType</KEYWORD2>\r
+                       <KEYWORD2>LanguagePriority</KEYWORD2>\r
+                       <KEYWORD2>LimitInternalRecursion</KEYWORD2>\r
+                       <KEYWORD2>LimitRequestBody</KEYWORD2>\r
+                       <KEYWORD2>LimitRequestFields</KEYWORD2>\r
+                       <KEYWORD2>LimitRequestFieldsize</KEYWORD2>\r
+                       <KEYWORD2>LimitRequestLine</KEYWORD2>\r
+                       <KEYWORD2>LimitXMLRequestBody</KEYWORD2>\r
+                       <KEYWORD2>Listen</KEYWORD2>\r
+                       <KEYWORD2>ListenBacklog</KEYWORD2>\r
+                       <KEYWORD2>LoadFile</KEYWORD2>\r
+                       <KEYWORD2>LoadModule</KEYWORD2>\r
+                       <KEYWORD2>LockFile</KEYWORD2>\r
+                       <KEYWORD2>LogFormat</KEYWORD2>\r
+                       <KEYWORD2>LogLevel</KEYWORD2>\r
+                       <KEYWORD2>MCacheMaxObjectCount</KEYWORD2>\r
+                       <KEYWORD2>MCacheMaxObjectSize</KEYWORD2>\r
+                       <KEYWORD2>MCacheMaxStreamingBuffer</KEYWORD2>\r
+                       <KEYWORD2>MCacheMinObjectSize</KEYWORD2>\r
+                       <KEYWORD2>MCacheRemovalAlgorithm</KEYWORD2>\r
+                       <KEYWORD2>MCacheSize</KEYWORD2>\r
+                       <KEYWORD2>MMapFile</KEYWORD2>\r
+                       <KEYWORD2>MaxClients</KEYWORD2>\r
+                       <KEYWORD2>MaxKeepAliveRequests</KEYWORD2>\r
+                       <KEYWORD2>MaxMemFree</KEYWORD2>\r
+                       <KEYWORD2>MaxRequestsPerChild</KEYWORD2>\r
+                       <KEYWORD2>MaxRequestsPerThread</KEYWORD2>\r
+                       <KEYWORD2>MaxSpareServers</KEYWORD2>\r
+                       <KEYWORD2>MaxSpareThreads</KEYWORD2>\r
+                       <KEYWORD2>MaxThreads</KEYWORD2>\r
+                       <KEYWORD2>MaxThreadsPerChild</KEYWORD2>\r
+                       <KEYWORD2>MetaDir</KEYWORD2>\r
+                       <KEYWORD2>MetaFiles</KEYWORD2>\r
+                       <KEYWORD2>MetaSuffix</KEYWORD2>\r
+                       <KEYWORD2>MimeMagicFile</KEYWORD2>\r
+                       <KEYWORD2>MinSpareServers</KEYWORD2>\r
+                       <KEYWORD2>MinSpareThreads</KEYWORD2>\r
+                       <KEYWORD2>MultiviewsMatch</KEYWORD2>\r
+                       <KEYWORD2>NWSSLTrustedCerts</KEYWORD2>\r
+                       <KEYWORD2>NameVirtualHost</KEYWORD2>\r
+                       <KEYWORD2>NoProxy</KEYWORD2>\r
+                       <KEYWORD2>NumServers</KEYWORD2>\r
+                       <KEYWORD2>Options</KEYWORD2>\r
+                       <KEYWORD2>PassEnv</KEYWORD2>\r
+                       <KEYWORD2>PidFile</KEYWORD2>\r
+                       <KEYWORD2>ProtocolEcho</KEYWORD2>\r
+                       <KEYWORD2>ProxyBadHeader</KEYWORD2>\r
+                       <KEYWORD2>ProxyBlock</KEYWORD2>\r
+                       <KEYWORD2>ProxyDomain</KEYWORD2>\r
+                       <KEYWORD2>ProxyErrorOverride</KEYWORD2>\r
+                       <KEYWORD2>ProxyIOBufferSize</KEYWORD2>\r
+                       <KEYWORD2>ProxyMaxForwards</KEYWORD2>\r
+                       <KEYWORD2>ProxyPass</KEYWORD2>\r
+                       <KEYWORD2>ProxyPassReverse</KEYWORD2>\r
+                       <KEYWORD2>ProxyPreserveHost</KEYWORD2>\r
+                       <KEYWORD2>ProxyReceiveBufferSize</KEYWORD2>\r
+                       <KEYWORD2>ProxyRemote</KEYWORD2>\r
+                       <KEYWORD2>ProxyRemoteMatch</KEYWORD2>\r
+                       <KEYWORD2>ProxyRequests</KEYWORD2>\r
+                       <KEYWORD2>ProxyTimeout</KEYWORD2>\r
+                       <KEYWORD2>ProxyVia</KEYWORD2>\r
+                       <KEYWORD2>RLimitCPU</KEYWORD2>\r
+                       <KEYWORD2>RLimitMEM</KEYWORD2>\r
+                       <KEYWORD2>RLimitNPROC</KEYWORD2>\r
+                       <KEYWORD2>ReadmeName</KEYWORD2>\r
+                       <KEYWORD2>Redirect</KEYWORD2>\r
+                       <KEYWORD2>RedirectMatch</KEYWORD2>\r
+                       <KEYWORD2>RedirectPermanent</KEYWORD2>\r
+                       <KEYWORD2>RedirectTemp</KEYWORD2>\r
+                       <KEYWORD2>RemoveCharset</KEYWORD2>\r
+                       <KEYWORD2>RemoveEncoding</KEYWORD2>\r
+                       <KEYWORD2>RemoveHandler</KEYWORD2>\r
+                       <KEYWORD2>RemoveInputFilter</KEYWORD2>\r
+                       <KEYWORD2>RemoveLanguage</KEYWORD2>\r
+                       <KEYWORD2>RemoveOutputFilter</KEYWORD2>\r
+                       <KEYWORD2>RemoveType</KEYWORD2>\r
+                       <KEYWORD2>RequestHeader</KEYWORD2>\r
+                       <KEYWORD2>RewriteBase</KEYWORD2>\r
+                       <KEYWORD2>RewriteCond</KEYWORD2>\r
+                       <KEYWORD2>RewriteEngine</KEYWORD2>\r
+                       <KEYWORD2>RewriteLock</KEYWORD2>\r
+                       <KEYWORD2>RewriteLog</KEYWORD2>\r
+                       <KEYWORD2>RewriteLogLevel</KEYWORD2>\r
+                       <KEYWORD2>RewriteMap</KEYWORD2>\r
+                       <KEYWORD2>RewriteOptions</KEYWORD2>\r
+                       <KEYWORD2>RewriteRule</KEYWORD2>\r
+                       <KEYWORD2>SSIEndTag</KEYWORD2>\r
+                       <KEYWORD2>SSIErrorMsg</KEYWORD2>\r
+                       <KEYWORD2>SSIStartTag</KEYWORD2>\r
+                       <KEYWORD2>SSITimeFormat</KEYWORD2>\r
+                       <KEYWORD2>SSIUndefinedEcho</KEYWORD2>\r
+                       <KEYWORD2>SSLCACertificateFile</KEYWORD2>\r
+                       <KEYWORD2>SSLCACertificatePath</KEYWORD2>\r
+                       <KEYWORD2>SSLCARevocationFile</KEYWORD2>\r
+                       <KEYWORD2>SSLCARevocationPath</KEYWORD2>\r
+                       <KEYWORD2>SSLCertificateChainFile</KEYWORD2>\r
+                       <KEYWORD2>SSLCertificateFile</KEYWORD2>\r
+                       <KEYWORD2>SSLCertificateKeyFile</KEYWORD2>\r
+                       <KEYWORD2>SSLCipherSuite</KEYWORD2>\r
+                       <KEYWORD2>SSLEngine</KEYWORD2>\r
+                       <KEYWORD2>SSLMutex</KEYWORD2>\r
+                       <KEYWORD2>SSLOptions</KEYWORD2>\r
+                       <KEYWORD2>SSLPassPhraseDialog</KEYWORD2>\r
+                       <KEYWORD2>SSLProtocol</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyCACertificateFile</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyCACertificatePath</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyCARevocationFile</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyCARevocationPath</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyCipherSuite</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyEngine</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyMachineCertificateFile</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyMachineCertificatePath</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyProtocol</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyVerify</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyVerifyDepth</KEYWORD2>\r
+                       <KEYWORD2>SSLRandomSeed</KEYWORD2>\r
+                       <KEYWORD2>SSLSessionCache</KEYWORD2>\r
+                       <KEYWORD2>SSLSessionCacheTimeout</KEYWORD2>\r
+                       <KEYWORD2>SSLVerifyClient</KEYWORD2>\r
+                       <KEYWORD2>SSLVerifyDepth</KEYWORD2>\r
+                       <KEYWORD2>ScoreBoardFile</KEYWORD2>\r
+                       <KEYWORD2>Script</KEYWORD2>\r
+                       <KEYWORD2>ScriptAlias</KEYWORD2>\r
+                       <KEYWORD2>ScriptAliasMatch</KEYWORD2>\r
+                       <KEYWORD2>ScriptInterpreterSource</KEYWORD2>\r
+                       <KEYWORD2>ScriptLog</KEYWORD2>\r
+                       <KEYWORD2>ScriptLogBuffer</KEYWORD2>\r
+                       <KEYWORD2>ScriptLogLength</KEYWORD2>\r
+                       <KEYWORD2>ScriptSock</KEYWORD2>\r
+                       <KEYWORD2>SecureListen</KEYWORD2>\r
+                       <KEYWORD2>SendBufferSize</KEYWORD2>\r
+                       <KEYWORD2>ServerAdmin</KEYWORD2>\r
+                       <KEYWORD2>ServerAlias</KEYWORD2>\r
+                       <KEYWORD2>ServerLimit</KEYWORD2>\r
+                       <KEYWORD2>ServerName</KEYWORD2>\r
+                       <KEYWORD2>ServerPath</KEYWORD2>\r
+                       <KEYWORD2>ServerRoot</KEYWORD2>\r
+                       <KEYWORD2>ServerSignature</KEYWORD2>\r
+                       <KEYWORD2>ServerTokens</KEYWORD2>\r
+                       <KEYWORD2>SetEnv</KEYWORD2>\r
+                       <KEYWORD2>SetEnvIf</KEYWORD2>\r
+                       <KEYWORD2>SetEnvIfNoCase</KEYWORD2>\r
+                       <KEYWORD2>SetHandler</KEYWORD2>\r
+                       <KEYWORD2>SetInputFilter</KEYWORD2>\r
+                       <KEYWORD2>SetOutputFilter</KEYWORD2>\r
+                       <KEYWORD2>StartServers</KEYWORD2>\r
+                       <KEYWORD2>StartThreads</KEYWORD2>\r
+                       <KEYWORD2>SuexecUserGroup</KEYWORD2>\r
+                       <KEYWORD2>ThreadLimit</KEYWORD2>\r
+                       <KEYWORD2>ThreadStackSize</KEYWORD2>\r
+                       <KEYWORD2>ThreadsPerChild</KEYWORD2>\r
+                       <KEYWORD2>TimeOut</KEYWORD2>\r
+                       <KEYWORD2>TransferLog</KEYWORD2>\r
+                       <KEYWORD2>TypesConfig</KEYWORD2>\r
+                       <KEYWORD2>UnsetEnv</KEYWORD2>\r
+                       <KEYWORD2>UseCanonicalName</KEYWORD2>\r
+                       <KEYWORD2>User</KEYWORD2>\r
+                       <KEYWORD2>UserDir</KEYWORD2>\r
+                       <KEYWORD2>VirtualDocumentRoot</KEYWORD2>\r
+                       <KEYWORD2>VirtualDocumentRootIP</KEYWORD2>\r
+                       <KEYWORD2>VirtualScriptAlias</KEYWORD2>\r
+                       <KEYWORD2>VirtualScriptAliasIP</KEYWORD2>\r
+                       <KEYWORD2>XBitHack</KEYWORD2>\r
+\r
+                       <LITERAL2>Off</LITERAL2>\r
+                       <LITERAL2>On</LITERAL2>\r
+                       <LITERAL2>None</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/apdl.xml b/extra/xmode/modes/apdl.xml
new file mode 100644 (file)
index 0000000..d66f8bf
--- /dev/null
@@ -0,0 +1,7536 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--   \r
+\r
+       Version 0.9.8 - generated by Randolf Mock on 11/22/2003 \r
+       Randolf.Mock@siemens.com\r
+       \r
+       <KEYWORD1>: ANSYS commands\r
+       <KEYWORD2>: abbreviated *get commands\r
+       <KEYWORD3>: ANSYS command options\r
+       \r
+-->\r
+\r
+<!-- The keywords and functions defined here are those of ANSYS 5.7 -->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="!" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+\r
+               <!-- labels - eg :test -->\r
+               <EOL_SPAN TYPE="LABEL" AT_LINE_START="TRUE">:</EOL_SPAN>\r
+\r
+               <!-- comments -->\r
+               <EOL_SPAN TYPE="COMMENT1">!</EOL_SPAN>\r
+\r
+               <!-- literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+       \r
+<!-- Special treatment of the ANSYS commands\r
+     beginning with a '/' or '*' character --> \r
+\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*ABBR</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*ABB</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*AFUN</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*AFU</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*ASK</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*CFCLOS</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*CFC</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*CFOPEN</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*CFO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*CFWRITE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*CFW</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*CREATE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*CRE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*CYCLE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*CYC</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*DEL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*DIM</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*DO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*ELSEIF</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*ELSE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*ENDDO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*ENDIF</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*END</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*EVAL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*EVA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*EXIT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*EXI</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*GET</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*GO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*IF</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*LIST</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*LIS</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*MFOURI</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*MFO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*MFUN</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*MFU</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*MOONEY</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*MOO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*MOPER</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*MOP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*MSG</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*REPEAT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*REP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*SET</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*STATUS</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*STA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*TREAD</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*TRE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*ULIB</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*ULI</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*USE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VABS</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VAB</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VCOL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VCO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VCUM</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VCU</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VEDIT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VED</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VFACT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VFA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VFILL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VFI</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VFUN</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VFU</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VGET</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VGE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VITRP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VIT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VLEN</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VLE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VMASK</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VMA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VOPER</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VOP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VPLOT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VPL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VPUT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VPU</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VREAD</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VRE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VSCFUN</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VSC</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VSTAT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VST</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VWRITE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">*VWR</SEQ>\r
+               \r
+               \r
+\r
+\r
+               \r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ANFILE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ANF</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ANGLE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ANG</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ANNOT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ANN</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ANUM</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ANU</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ASSIGN</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ASS</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/AUTO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/AUT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/AUX15</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/AUX2</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/AUX</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/AXLAB</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/AXL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/BATCH</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/BAT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CLABEL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CLA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CLEAR</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CLE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CLOG</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CLO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CMAP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CMA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/COLOR</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/COL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/COM</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CONFIG</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CONTOUR</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CON</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/COPY</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/COP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CPLANE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CPL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CTYPE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CTY</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CVAL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/CVA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/DELETE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/DEL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/DEVDISP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/DEVICE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/DEV</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/DIST</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/DIS</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/DSCALE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/DSC</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/DV3D</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/DV3</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/EDGE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/EDG</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/EFACET</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/EFA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/EOF</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ERASE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ERA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ESHAPE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ESH</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/EXIT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/EXI</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/EXPAND</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/EXP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/FACET</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/FAC</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/FDELE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/FDE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/FILNAME</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/FIL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/FOCUS</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/FOC</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/FORMAT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/FOR</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/FTYPE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/FTY</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GCMD</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GCM</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GCOLUMN</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GCO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GFILE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GFI</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GFORMAT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GFO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GLINE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GLI</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GMARKER</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GMA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GOLIST</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GOL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GOPR</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GOP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GRAPHICS</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GRA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GRESUME</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GRE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GRID</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GRI</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GROPT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GRO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GRTYP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GRT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GSAVE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GSA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GST</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GTHK</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GTH</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GTYPE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/GTY</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/HEADER</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/HEA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/INPUT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/INP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/LARC</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/LAR</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/LIGHT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/LIG</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/LINE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/LIN</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/LSPEC</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/LSP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/LSYMBOL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/LSY</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/MENU</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/MEN</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/MPLIB</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/MPL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/MREP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/MRE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/MSTART</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/MST</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/NERR</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/NER</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/NOERASE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/NOE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/NOLIST</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/NOL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/NOPR</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/NOP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/NORMAL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/NOR</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/NUMBER</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/NUM</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/OPT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/OUTPUT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/OUt</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PAGE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PAG</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PBC</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PBF</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PCIRCLE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PCI</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PCOPY</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PCO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PLOPTS</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PLO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PMACRO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PMA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PMETH</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PME</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PMORE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PMO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PNUM</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PNU</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/POLYGON</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/POL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/POST26</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/POST1</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/POS</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PREP7</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PRE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PSEARCH</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PSE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PSF</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PSPEC</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PSP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PSTATUS</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PST</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PSYMB</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PSY</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PWEDGE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/PWE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/QUIT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/QUI</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/RATIO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/RAT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/RENAME</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/REN</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/REPLOT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/REP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/RESET</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/RES</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/RGB</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/RUNST</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/RUN</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SECLIB</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SEC</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SEG</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SHADE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SHA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SHOWDISP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SHOW</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SHO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SHRINK</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SHR</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SOLU</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SOL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SSCALE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SSC</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/STATUS</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/STA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/STITLE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/STI</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SYP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/SYS</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/TITLE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/TIT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/TLABEL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/TLA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/TRIAD</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/TRI</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/TRLCY</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/TRL</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/TSPEC</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/TSP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/TYPE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/TYP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/UCMD</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/UCM</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/UIS</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/UI</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/UNITS</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/UNI</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/USER</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/USE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/VCONE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/VCO</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/VIEW</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/VIE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/VSCALE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/VSC</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/VUP</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/WAIT</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/WAI</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/WINDOW</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/WIN</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/XRANGE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/XRA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/YRANGE</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/YRA</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ZOOM</SEQ>\r
+               <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">/ZOO</SEQ>\r
+\r
+\r
+\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">$</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">(</SEQ>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="NULL">;</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+\r
+               <!-- *msg command: variable formats -->\r
+               <SEQ TYPE="KEYWORD2">%C</SEQ>           <!-- alphamuneric format -->\r
+               <SEQ TYPE="KEYWORD2">%G</SEQ>           <!-- double precision format -->\r
+               <SEQ TYPE="KEYWORD2">%I</SEQ>           <!-- integer format -->\r
+               <SEQ TYPE="KEYWORD2">%/</SEQ>           <!-- line break -->\r
+               \r
+               <!-- variables -->\r
+               <SPAN TYPE="FUNCTION" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>%</BEGIN>\r
+                       <END>%</END>\r
+               </SPAN>\r
+\r
+               <KEYWORDS>\r
+\r
+<!--           ANSYS Commands (incl. abbreviated version)      -->\r
+\r
+                       <KEYWORD1>A</KEYWORD1>\r
+                       <KEYWORD1>AADD</KEYWORD1>\r
+                       <KEYWORD1>AADD</KEYWORD1>\r
+                       <KEYWORD1>AATT</KEYWORD1>\r
+                       <KEYWORD1>AATT</KEYWORD1>\r
+                       <KEYWORD1>ABBR</KEYWORD1>\r
+                       <KEYWORD1>ABBRES</KEYWORD1>\r
+                       <KEYWORD1>ABBS</KEYWORD1>\r
+                       <KEYWORD1>ABBSAV</KEYWORD1>\r
+                       <KEYWORD1>ABS</KEYWORD1>\r
+                       <KEYWORD1>ACCA</KEYWORD1>\r
+                       <KEYWORD1>ACCAT</KEYWORD1>\r
+                       <KEYWORD1>ACEL</KEYWORD1>\r
+                       <KEYWORD1>ACEL</KEYWORD1>\r
+                       <KEYWORD1>ACLE</KEYWORD1>\r
+                       <KEYWORD1>ACLEAR</KEYWORD1>\r
+                       <KEYWORD1>ADAP</KEYWORD1>\r
+                       <KEYWORD1>ADAPT</KEYWORD1>\r
+                       <KEYWORD1>ADD</KEYWORD1>\r
+                       <KEYWORD1>ADDA</KEYWORD1>\r
+                       <KEYWORD1>ADDAM</KEYWORD1>\r
+                       <KEYWORD1>ADEL</KEYWORD1>\r
+                       <KEYWORD1>ADELE</KEYWORD1>\r
+                       <KEYWORD1>ADGL</KEYWORD1>\r
+                       <KEYWORD1>ADGL</KEYWORD1>\r
+                       <KEYWORD1>ADRA</KEYWORD1>\r
+                       <KEYWORD1>ADRAG</KEYWORD1>\r
+                       <KEYWORD1>AFIL</KEYWORD1>\r
+                       <KEYWORD1>AFILLT</KEYWORD1>\r
+                       <KEYWORD1>AFLI</KEYWORD1>\r
+                       <KEYWORD1>AFLIST</KEYWORD1>\r
+                       <KEYWORD1>AFSU</KEYWORD1>\r
+                       <KEYWORD1>AFSURF</KEYWORD1>\r
+                       <KEYWORD1>AGEN</KEYWORD1>\r
+                       <KEYWORD1>AGEN</KEYWORD1>\r
+                       <KEYWORD1>AGLU</KEYWORD1>\r
+                       <KEYWORD1>AGLUE</KEYWORD1>\r
+                       <KEYWORD1>AINA</KEYWORD1>\r
+                       <KEYWORD1>AINA</KEYWORD1>\r
+                       <KEYWORD1>AINP</KEYWORD1>\r
+                       <KEYWORD1>AINP</KEYWORD1>\r
+                       <KEYWORD1>AINV</KEYWORD1>\r
+                       <KEYWORD1>AINV</KEYWORD1>\r
+                       <KEYWORD1>AL</KEYWORD1>\r
+                       <KEYWORD1>ALIS</KEYWORD1>\r
+                       <KEYWORD1>ALIST</KEYWORD1>\r
+                       <KEYWORD1>ALLS</KEYWORD1>\r
+                       <KEYWORD1>ALLSEL</KEYWORD1>\r
+                       <KEYWORD1>ALPF</KEYWORD1>\r
+                       <KEYWORD1>ALPFILL</KEYWORD1>\r
+                       <KEYWORD1>ALPH</KEYWORD1>\r
+                       <KEYWORD1>ALPHAD</KEYWORD1>\r
+                       <KEYWORD1>AMAP</KEYWORD1>\r
+                       <KEYWORD1>AMAP</KEYWORD1>\r
+                       <KEYWORD1>AMES</KEYWORD1>\r
+                       <KEYWORD1>AMESH</KEYWORD1>\r
+                       <KEYWORD1>ANCN</KEYWORD1>\r
+                       <KEYWORD1>ANCNTR</KEYWORD1>\r
+                       <KEYWORD1>ANCU</KEYWORD1>\r
+                       <KEYWORD1>ANCUT</KEYWORD1>\r
+                       <KEYWORD1>ANDA</KEYWORD1>\r
+                       <KEYWORD1>ANDATA</KEYWORD1>\r
+                       <KEYWORD1>ANDS</KEYWORD1>\r
+                       <KEYWORD1>ANDSCL</KEYWORD1>\r
+                       <KEYWORD1>ANDY</KEYWORD1>\r
+                       <KEYWORD1>ANDYNA</KEYWORD1>\r
+                       <KEYWORD1>ANFL</KEYWORD1>\r
+                       <KEYWORD1>ANFLOW</KEYWORD1>\r
+                       <KEYWORD1>ANIM</KEYWORD1>\r
+                       <KEYWORD1>ANIM</KEYWORD1>\r
+                       <KEYWORD1>ANIS</KEYWORD1>\r
+                       <KEYWORD1>ANISOS</KEYWORD1>\r
+                       <KEYWORD1>ANMO</KEYWORD1>\r
+                       <KEYWORD1>ANMODE</KEYWORD1>\r
+                       <KEYWORD1>ANOR</KEYWORD1>\r
+                       <KEYWORD1>ANORM</KEYWORD1>\r
+                       <KEYWORD1>ANTI</KEYWORD1>\r
+                       <KEYWORD1>ANTIME</KEYWORD1>\r
+                       <KEYWORD1>ANTY</KEYWORD1>\r
+                       <KEYWORD1>ANTYPE</KEYWORD1>\r
+                       <KEYWORD1>AOFF</KEYWORD1>\r
+                       <KEYWORD1>AOFFST</KEYWORD1>\r
+                       <KEYWORD1>AOVL</KEYWORD1>\r
+                       <KEYWORD1>AOVLAP</KEYWORD1>\r
+                       <KEYWORD1>APLO</KEYWORD1>\r
+                       <KEYWORD1>APLOT</KEYWORD1>\r
+                       <KEYWORD1>APPE</KEYWORD1>\r
+                       <KEYWORD1>APPEND</KEYWORD1>\r
+                       <KEYWORD1>APTN</KEYWORD1>\r
+                       <KEYWORD1>APTN</KEYWORD1>\r
+                       <KEYWORD1>ARCL</KEYWORD1>\r
+                       <KEYWORD1>ARCLEN</KEYWORD1>\r
+                       <KEYWORD1>ARCO</KEYWORD1>\r
+                       <KEYWORD1>ARCOLLAPSE</KEYWORD1>\r
+                       <KEYWORD1>ARCT</KEYWORD1>\r
+                       <KEYWORD1>ARCTRM</KEYWORD1>\r
+                       <KEYWORD1>ARDE</KEYWORD1>\r
+                       <KEYWORD1>ARDETACH</KEYWORD1>\r
+                       <KEYWORD1>AREA</KEYWORD1>\r
+                       <KEYWORD1>AREAS</KEYWORD1>\r
+                       <KEYWORD1>AREF</KEYWORD1>\r
+                       <KEYWORD1>AREFINE</KEYWORD1>\r
+                       <KEYWORD1>AREV</KEYWORD1>\r
+                       <KEYWORD1>AREVERSE</KEYWORD1>\r
+                       <KEYWORD1>ARFI</KEYWORD1>\r
+                       <KEYWORD1>ARFILL</KEYWORD1>\r
+                       <KEYWORD1>ARME</KEYWORD1>\r
+                       <KEYWORD1>ARMERGE</KEYWORD1>\r
+                       <KEYWORD1>AROT</KEYWORD1>\r
+                       <KEYWORD1>AROTAT</KEYWORD1>\r
+                       <KEYWORD1>ARSC</KEYWORD1>\r
+                       <KEYWORD1>ARSCALE</KEYWORD1>\r
+                       <KEYWORD1>ARSP</KEYWORD1>\r
+                       <KEYWORD1>ARSPLIT</KEYWORD1>\r
+                       <KEYWORD1>ARSY</KEYWORD1>\r
+                       <KEYWORD1>ARSYM</KEYWORD1>\r
+                       <KEYWORD1>ASBA</KEYWORD1>\r
+                       <KEYWORD1>ASBA</KEYWORD1>\r
+                       <KEYWORD1>ASBL</KEYWORD1>\r
+                       <KEYWORD1>ASBL</KEYWORD1>\r
+                       <KEYWORD1>ASBV</KEYWORD1>\r
+                       <KEYWORD1>ASBV</KEYWORD1>\r
+                       <KEYWORD1>ASBW</KEYWORD1>\r
+                       <KEYWORD1>ASBW</KEYWORD1>\r
+                       <KEYWORD1>ASEL</KEYWORD1>\r
+                       <KEYWORD1>ASEL</KEYWORD1>\r
+                       <KEYWORD1>ASKI</KEYWORD1>\r
+                       <KEYWORD1>ASKIN</KEYWORD1>\r
+                       <KEYWORD1>ASLL</KEYWORD1>\r
+                       <KEYWORD1>ASLL</KEYWORD1>\r
+                       <KEYWORD1>ASLV</KEYWORD1>\r
+                       <KEYWORD1>ASLV</KEYWORD1>\r
+                       <KEYWORD1>ASUB</KEYWORD1>\r
+                       <KEYWORD1>ASUB</KEYWORD1>\r
+                       <KEYWORD1>ASUM</KEYWORD1>\r
+                       <KEYWORD1>ASUM</KEYWORD1>\r
+                       <KEYWORD1>ATAN</KEYWORD1>\r
+                       <KEYWORD1>ATAN</KEYWORD1>\r
+                       <KEYWORD1>ATRA</KEYWORD1>\r
+                       <KEYWORD1>ATRAN</KEYWORD1>\r
+                       <KEYWORD1>ATYP</KEYWORD1>\r
+                       <KEYWORD1>ATYPE</KEYWORD1>\r
+                       <KEYWORD1>AUTO</KEYWORD1>\r
+                       <KEYWORD1>AUTOTS</KEYWORD1>\r
+                       <KEYWORD1>AVPR</KEYWORD1>\r
+                       <KEYWORD1>AVPRIN</KEYWORD1>\r
+                       <KEYWORD1>AVRE</KEYWORD1>\r
+                       <KEYWORD1>AVRES</KEYWORD1>\r
+                       <KEYWORD1>BELL</KEYWORD1>\r
+                       <KEYWORD1>BELLOW</KEYWORD1>\r
+                       <KEYWORD1>BEND</KEYWORD1>\r
+                       <KEYWORD1>BEND</KEYWORD1>\r
+                       <KEYWORD1>BETA</KEYWORD1>\r
+                       <KEYWORD1>BETAD</KEYWORD1>\r
+                       <KEYWORD1>BF</KEYWORD1>\r
+                       <KEYWORD1>BFA</KEYWORD1>\r
+                       <KEYWORD1>BFAD</KEYWORD1>\r
+                       <KEYWORD1>BFADELE</KEYWORD1>\r
+                       <KEYWORD1>BFAL</KEYWORD1>\r
+                       <KEYWORD1>BFALIST</KEYWORD1>\r
+                       <KEYWORD1>BFCU</KEYWORD1>\r
+                       <KEYWORD1>BFCUM</KEYWORD1>\r
+                       <KEYWORD1>BFDE</KEYWORD1>\r
+                       <KEYWORD1>BFDELE</KEYWORD1>\r
+                       <KEYWORD1>BFE</KEYWORD1>\r
+                       <KEYWORD1>BFEC</KEYWORD1>\r
+                       <KEYWORD1>BFECUM</KEYWORD1>\r
+                       <KEYWORD1>BFED</KEYWORD1>\r
+                       <KEYWORD1>BFEDELE</KEYWORD1>\r
+                       <KEYWORD1>BFEL</KEYWORD1>\r
+                       <KEYWORD1>BFELIST</KEYWORD1>\r
+                       <KEYWORD1>BFES</KEYWORD1>\r
+                       <KEYWORD1>BFESCAL</KEYWORD1>\r
+                       <KEYWORD1>BFIN</KEYWORD1>\r
+                       <KEYWORD1>BFINT</KEYWORD1>\r
+                       <KEYWORD1>BFK</KEYWORD1>\r
+                       <KEYWORD1>BFKD</KEYWORD1>\r
+                       <KEYWORD1>BFKDELE</KEYWORD1>\r
+                       <KEYWORD1>BFKL</KEYWORD1>\r
+                       <KEYWORD1>BFKLIST</KEYWORD1>\r
+                       <KEYWORD1>BFL</KEYWORD1>\r
+                       <KEYWORD1>BFLD</KEYWORD1>\r
+                       <KEYWORD1>BFLDELE</KEYWORD1>\r
+                       <KEYWORD1>BFLI</KEYWORD1>\r
+                       <KEYWORD1>BFLIST</KEYWORD1>\r
+                       <KEYWORD1>BFLL</KEYWORD1>\r
+                       <KEYWORD1>BFLLIST</KEYWORD1>\r
+                       <KEYWORD1>BFSC</KEYWORD1>\r
+                       <KEYWORD1>BFSCALE</KEYWORD1>\r
+                       <KEYWORD1>BFTR</KEYWORD1>\r
+                       <KEYWORD1>BFTRAN</KEYWORD1>\r
+                       <KEYWORD1>BFUN</KEYWORD1>\r
+                       <KEYWORD1>BFUNIF</KEYWORD1>\r
+                       <KEYWORD1>BFV</KEYWORD1>\r
+                       <KEYWORD1>BFVD</KEYWORD1>\r
+                       <KEYWORD1>BFVDELE</KEYWORD1>\r
+                       <KEYWORD1>BFVL</KEYWORD1>\r
+                       <KEYWORD1>BFVLIST</KEYWORD1>\r
+                       <KEYWORD1>BIOO</KEYWORD1>\r
+                       <KEYWORD1>BIOOPT</KEYWORD1>\r
+                       <KEYWORD1>BIOT</KEYWORD1>\r
+                       <KEYWORD1>BIOT</KEYWORD1>\r
+                       <KEYWORD1>BLC4</KEYWORD1>\r
+                       <KEYWORD1>BLC4</KEYWORD1>\r
+                       <KEYWORD1>BLC5</KEYWORD1>\r
+                       <KEYWORD1>BLC5</KEYWORD1>\r
+                       <KEYWORD1>BLOC</KEYWORD1>\r
+                       <KEYWORD1>BLOCK</KEYWORD1>\r
+                       <KEYWORD1>BOOL</KEYWORD1>\r
+                       <KEYWORD1>BOOL</KEYWORD1>\r
+                       <KEYWORD1>BOPT</KEYWORD1>\r
+                       <KEYWORD1>BOPTN</KEYWORD1>\r
+                       <KEYWORD1>BRAN</KEYWORD1>\r
+                       <KEYWORD1>BRANCH</KEYWORD1>\r
+                       <KEYWORD1>BSPL</KEYWORD1>\r
+                       <KEYWORD1>BSPLIN</KEYWORD1>\r
+                       <KEYWORD1>BTOL</KEYWORD1>\r
+                       <KEYWORD1>BTOL</KEYWORD1>\r
+                       <KEYWORD1>BUCO</KEYWORD1>\r
+                       <KEYWORD1>BUCOPT</KEYWORD1>\r
+                       <KEYWORD1>CALC</KEYWORD1>\r
+                       <KEYWORD1>CALC</KEYWORD1>\r
+                       <KEYWORD1>CBDO</KEYWORD1>\r
+                       <KEYWORD1>CBDOF</KEYWORD1>\r
+                       <KEYWORD1>CDRE</KEYWORD1>\r
+                       <KEYWORD1>CDREAD</KEYWORD1>\r
+                       <KEYWORD1>CDWR</KEYWORD1>\r
+                       <KEYWORD1>CDWRITE</KEYWORD1>\r
+                       <KEYWORD1>CE</KEYWORD1>\r
+                       <KEYWORD1>CECM</KEYWORD1>\r
+                       <KEYWORD1>CECMOD</KEYWORD1>\r
+                       <KEYWORD1>CECY</KEYWORD1>\r
+                       <KEYWORD1>CECYC</KEYWORD1>\r
+                       <KEYWORD1>CEDE</KEYWORD1>\r
+                       <KEYWORD1>CEDELE</KEYWORD1>\r
+                       <KEYWORD1>CEIN</KEYWORD1>\r
+                       <KEYWORD1>CEINTF</KEYWORD1>\r
+                       <KEYWORD1>CELI</KEYWORD1>\r
+                       <KEYWORD1>CELIST</KEYWORD1>\r
+                       <KEYWORD1>CENT</KEYWORD1>\r
+                       <KEYWORD1>CENTER</KEYWORD1>\r
+                       <KEYWORD1>CEQN</KEYWORD1>\r
+                       <KEYWORD1>CEQN</KEYWORD1>\r
+                       <KEYWORD1>CERI</KEYWORD1>\r
+                       <KEYWORD1>CERIG</KEYWORD1>\r
+                       <KEYWORD1>CESG</KEYWORD1>\r
+                       <KEYWORD1>CESGEN</KEYWORD1>\r
+                       <KEYWORD1>CFAC</KEYWORD1>\r
+                       <KEYWORD1>CFACT</KEYWORD1>\r
+                       <KEYWORD1>CGLO</KEYWORD1>\r
+                       <KEYWORD1>CGLOC</KEYWORD1>\r
+                       <KEYWORD1>CGOM</KEYWORD1>\r
+                       <KEYWORD1>CGOMGA</KEYWORD1>\r
+                       <KEYWORD1>CHEC</KEYWORD1>\r
+                       <KEYWORD1>CHECK</KEYWORD1>\r
+                       <KEYWORD1>CHKM</KEYWORD1>\r
+                       <KEYWORD1>CHKMSH</KEYWORD1>\r
+                       <KEYWORD1>CIRC</KEYWORD1>\r
+                       <KEYWORD1>CIRCLE</KEYWORD1>\r
+                       <KEYWORD1>CLOC</KEYWORD1>\r
+                       <KEYWORD1>CLOCAL</KEYWORD1>\r
+                       <KEYWORD1>CLOG</KEYWORD1>\r
+                       <KEYWORD1>CLOG</KEYWORD1>\r
+                       <KEYWORD1>CLRM</KEYWORD1>\r
+                       <KEYWORD1>CLRMSHLN</KEYWORD1>\r
+                       <KEYWORD1>CM</KEYWORD1>\r
+                       <KEYWORD1>CMDE</KEYWORD1>\r
+                       <KEYWORD1>CMDELE</KEYWORD1>\r
+                       <KEYWORD1>CMED</KEYWORD1>\r
+                       <KEYWORD1>CMEDIT</KEYWORD1>\r
+                       <KEYWORD1>CMGR</KEYWORD1>\r
+                       <KEYWORD1>CMGRP</KEYWORD1>\r
+                       <KEYWORD1>CMLI</KEYWORD1>\r
+                       <KEYWORD1>CMLIST</KEYWORD1>\r
+                       <KEYWORD1>CMPL</KEYWORD1>\r
+                       <KEYWORD1>CMPLOT</KEYWORD1>\r
+                       <KEYWORD1>CMSE</KEYWORD1>\r
+                       <KEYWORD1>CMSEL</KEYWORD1>\r
+                       <KEYWORD1>CNVT</KEYWORD1>\r
+                       <KEYWORD1>CNVTOL</KEYWORD1>\r
+                       <KEYWORD1>CON4</KEYWORD1>\r
+                       <KEYWORD1>CON4</KEYWORD1>\r
+                       <KEYWORD1>CONE</KEYWORD1>\r
+                       <KEYWORD1>CONE</KEYWORD1>\r
+                       <KEYWORD1>CONJ</KEYWORD1>\r
+                       <KEYWORD1>CONJUG</KEYWORD1>\r
+                       <KEYWORD1>COUP</KEYWORD1>\r
+                       <KEYWORD1>COUPLE</KEYWORD1>\r
+                       <KEYWORD1>COVA</KEYWORD1>\r
+                       <KEYWORD1>COVAL</KEYWORD1>\r
+                       <KEYWORD1>CP</KEYWORD1>\r
+                       <KEYWORD1>CPDE</KEYWORD1>\r
+                       <KEYWORD1>CPDELE</KEYWORD1>\r
+                       <KEYWORD1>CPIN</KEYWORD1>\r
+                       <KEYWORD1>CPINTF</KEYWORD1>\r
+                       <KEYWORD1>CPLG</KEYWORD1>\r
+                       <KEYWORD1>CPLGEN</KEYWORD1>\r
+                       <KEYWORD1>CPLI</KEYWORD1>\r
+                       <KEYWORD1>CPLIST</KEYWORD1>\r
+                       <KEYWORD1>CPNG</KEYWORD1>\r
+                       <KEYWORD1>CPNGEN</KEYWORD1>\r
+                       <KEYWORD1>CPSG</KEYWORD1>\r
+                       <KEYWORD1>CPSGEN</KEYWORD1>\r
+                       <KEYWORD1>CQC</KEYWORD1>\r
+                       <KEYWORD1>CRPL</KEYWORD1>\r
+                       <KEYWORD1>CRPLIM</KEYWORD1>\r
+                       <KEYWORD1>CS</KEYWORD1>\r
+                       <KEYWORD1>CSCI</KEYWORD1>\r
+                       <KEYWORD1>CSCIR</KEYWORD1>\r
+                       <KEYWORD1>CSDE</KEYWORD1>\r
+                       <KEYWORD1>CSDELE</KEYWORD1>\r
+                       <KEYWORD1>CSKP</KEYWORD1>\r
+                       <KEYWORD1>CSKP</KEYWORD1>\r
+                       <KEYWORD1>CSLI</KEYWORD1>\r
+                       <KEYWORD1>CSLIST</KEYWORD1>\r
+                       <KEYWORD1>CSWP</KEYWORD1>\r
+                       <KEYWORD1>CSWPLA</KEYWORD1>\r
+                       <KEYWORD1>CSYS</KEYWORD1>\r
+                       <KEYWORD1>CSYS</KEYWORD1>\r
+                       <KEYWORD1>CURR2D</KEYWORD1>\r
+                       <KEYWORD1>CURR</KEYWORD1>\r
+                       <KEYWORD1>CUTC</KEYWORD1>\r
+                       <KEYWORD1>CUTCONTROL</KEYWORD1>\r
+                       <KEYWORD1>CVAR</KEYWORD1>\r
+                       <KEYWORD1>CVAR</KEYWORD1>\r
+                       <KEYWORD1>CYCG</KEYWORD1>\r
+                       <KEYWORD1>CYCGEN</KEYWORD1>\r
+                       <KEYWORD1>CYCS</KEYWORD1>\r
+                       <KEYWORD1>CYCSOL</KEYWORD1>\r
+                       <KEYWORD1>CYL4</KEYWORD1>\r
+                       <KEYWORD1>CYL4</KEYWORD1>\r
+                       <KEYWORD1>CYL5</KEYWORD1>\r
+                       <KEYWORD1>CYL5</KEYWORD1>\r
+                       <KEYWORD1>CYLI</KEYWORD1>\r
+                       <KEYWORD1>CYLIND</KEYWORD1>\r
+                       <KEYWORD1>D</KEYWORD1>\r
+                       <KEYWORD1>DA</KEYWORD1>\r
+                       <KEYWORD1>DADE</KEYWORD1>\r
+                       <KEYWORD1>DADELE</KEYWORD1>\r
+                       <KEYWORD1>DALI</KEYWORD1>\r
+                       <KEYWORD1>DALIST</KEYWORD1>\r
+                       <KEYWORD1>DATA</KEYWORD1>\r
+                       <KEYWORD1>DATA</KEYWORD1>\r
+                       <KEYWORD1>DATA</KEYWORD1>\r
+                       <KEYWORD1>DATADEF</KEYWORD1>\r
+                       <KEYWORD1>DCGO</KEYWORD1>\r
+                       <KEYWORD1>DCGOMG</KEYWORD1>\r
+                       <KEYWORD1>DCUM</KEYWORD1>\r
+                       <KEYWORD1>DCUM</KEYWORD1>\r
+                       <KEYWORD1>DDEL</KEYWORD1>\r
+                       <KEYWORD1>DDELE</KEYWORD1>\r
+                       <KEYWORD1>DEAC</KEYWORD1>\r
+                       <KEYWORD1>DEACT</KEYWORD1>\r
+                       <KEYWORD1>DEFI</KEYWORD1>\r
+                       <KEYWORD1>DEFINE</KEYWORD1>\r
+                       <KEYWORD1>DELT</KEYWORD1>\r
+                       <KEYWORD1>DELTIM</KEYWORD1>\r
+                       <KEYWORD1>DERI</KEYWORD1>\r
+                       <KEYWORD1>DERIV</KEYWORD1>\r
+                       <KEYWORD1>DESI</KEYWORD1>\r
+                       <KEYWORD1>DESIZE</KEYWORD1>\r
+                       <KEYWORD1>DESO</KEYWORD1>\r
+                       <KEYWORD1>DESOL</KEYWORD1>\r
+                       <KEYWORD1>DETA</KEYWORD1>\r
+                       <KEYWORD1>DETAB</KEYWORD1>\r
+                       <KEYWORD1>DIG</KEYWORD1>\r
+                       <KEYWORD1>DIGI</KEYWORD1>\r
+                       <KEYWORD1>DIGIT</KEYWORD1>\r
+                       <KEYWORD1>DISP</KEYWORD1>\r
+                       <KEYWORD1>DISPLAY</KEYWORD1>\r
+                       <KEYWORD1>DK</KEYWORD1>\r
+                       <KEYWORD1>DKDE</KEYWORD1>\r
+                       <KEYWORD1>DKDELE</KEYWORD1>\r
+                       <KEYWORD1>DKLI</KEYWORD1>\r
+                       <KEYWORD1>DKLIST</KEYWORD1>\r
+                       <KEYWORD1>DL</KEYWORD1>\r
+                       <KEYWORD1>DLDE</KEYWORD1>\r
+                       <KEYWORD1>DLDELE</KEYWORD1>\r
+                       <KEYWORD1>DLIS</KEYWORD1>\r
+                       <KEYWORD1>DLIST</KEYWORD1>\r
+                       <KEYWORD1>DLLI</KEYWORD1>\r
+                       <KEYWORD1>DLLIST</KEYWORD1>\r
+                       <KEYWORD1>DMOV</KEYWORD1>\r
+                       <KEYWORD1>DMOVE</KEYWORD1>\r
+                       <KEYWORD1>DMPR</KEYWORD1>\r
+                       <KEYWORD1>DMPRAT</KEYWORD1>\r
+                       <KEYWORD1>DNSO</KEYWORD1>\r
+                       <KEYWORD1>DNSOL</KEYWORD1>\r
+                       <KEYWORD1>DOF</KEYWORD1>\r
+                       <KEYWORD1>DOFS</KEYWORD1>\r
+                       <KEYWORD1>DOFSEL</KEYWORD1>\r
+                       <KEYWORD1>DOME</KEYWORD1>\r
+                       <KEYWORD1>DOMEGA</KEYWORD1>\r
+                       <KEYWORD1>DSCA</KEYWORD1>\r
+                       <KEYWORD1>DSCALE</KEYWORD1>\r
+                       <KEYWORD1>DSET</KEYWORD1>\r
+                       <KEYWORD1>DSET</KEYWORD1>\r
+                       <KEYWORD1>DSUM</KEYWORD1>\r
+                       <KEYWORD1>DSUM</KEYWORD1>\r
+                       <KEYWORD1>DSUR</KEYWORD1>\r
+                       <KEYWORD1>DSURF</KEYWORD1>\r
+                       <KEYWORD1>DSYM</KEYWORD1>\r
+                       <KEYWORD1>DSYM</KEYWORD1>\r
+                       <KEYWORD1>DSYS</KEYWORD1>\r
+                       <KEYWORD1>DSYS</KEYWORD1>\r
+                       <KEYWORD1>DTRA</KEYWORD1>\r
+                       <KEYWORD1>DTRAN</KEYWORD1>\r
+                       <KEYWORD1>DUMP</KEYWORD1>\r
+                       <KEYWORD1>DUMP</KEYWORD1>\r
+                       <KEYWORD1>DYNO</KEYWORD1>\r
+                       <KEYWORD1>DYNOPT</KEYWORD1>\r
+                       <KEYWORD1>E</KEYWORD1>\r
+                       <KEYWORD1>EALI</KEYWORD1>\r
+                       <KEYWORD1>EALIVE</KEYWORD1>\r
+                       <KEYWORD1>EDBO</KEYWORD1>\r
+                       <KEYWORD1>EDBOUND</KEYWORD1>\r
+                       <KEYWORD1>EDBV</KEYWORD1>\r
+                       <KEYWORD1>EDBVIS</KEYWORD1>\r
+                       <KEYWORD1>EDCD</KEYWORD1>\r
+                       <KEYWORD1>EDCDELE</KEYWORD1>\r
+                       <KEYWORD1>EDCG</KEYWORD1>\r
+                       <KEYWORD1>EDCGEN</KEYWORD1>\r
+                       <KEYWORD1>EDCL</KEYWORD1>\r
+                       <KEYWORD1>EDCLIST</KEYWORD1>\r
+                       <KEYWORD1>EDCO</KEYWORD1>\r
+                       <KEYWORD1>EDCONTACT</KEYWORD1>\r
+                       <KEYWORD1>EDCP</KEYWORD1>\r
+                       <KEYWORD1>EDCPU</KEYWORD1>\r
+                       <KEYWORD1>EDCR</KEYWORD1>\r
+                       <KEYWORD1>EDCRB</KEYWORD1>\r
+                       <KEYWORD1>EDCS</KEYWORD1>\r
+                       <KEYWORD1>EDCSC</KEYWORD1>\r
+                       <KEYWORD1>EDCT</KEYWORD1>\r
+                       <KEYWORD1>EDCTS</KEYWORD1>\r
+                       <KEYWORD1>EDCU</KEYWORD1>\r
+                       <KEYWORD1>EDCURVE</KEYWORD1>\r
+                       <KEYWORD1>EDDA</KEYWORD1>\r
+                       <KEYWORD1>EDDAMP</KEYWORD1>\r
+                       <KEYWORD1>EDDR</KEYWORD1>\r
+                       <KEYWORD1>EDDRELAX</KEYWORD1>\r
+                       <KEYWORD1>EDEL</KEYWORD1>\r
+                       <KEYWORD1>EDELE</KEYWORD1>\r
+                       <KEYWORD1>EDEN</KEYWORD1>\r
+                       <KEYWORD1>EDENERGY</KEYWORD1>\r
+                       <KEYWORD1>EDFP</KEYWORD1>\r
+                       <KEYWORD1>EDFPLOT</KEYWORD1>\r
+                       <KEYWORD1>EDHG</KEYWORD1>\r
+                       <KEYWORD1>EDHGLS</KEYWORD1>\r
+                       <KEYWORD1>EDHI</KEYWORD1>\r
+                       <KEYWORD1>EDHIST</KEYWORD1>\r
+                       <KEYWORD1>EDHT</KEYWORD1>\r
+                       <KEYWORD1>EDHTIME</KEYWORD1>\r
+                       <KEYWORD1>EDIN</KEYWORD1>\r
+                       <KEYWORD1>EDINT</KEYWORD1>\r
+                       <KEYWORD1>EDIV</KEYWORD1>\r
+                       <KEYWORD1>EDIVELO</KEYWORD1>\r
+                       <KEYWORD1>EDLC</KEYWORD1>\r
+                       <KEYWORD1>EDLCS</KEYWORD1>\r
+                       <KEYWORD1>EDLD</KEYWORD1>\r
+                       <KEYWORD1>EDLDPLOT</KEYWORD1>\r
+                       <KEYWORD1>EDLO</KEYWORD1>\r
+                       <KEYWORD1>EDLOAD</KEYWORD1>\r
+                       <KEYWORD1>EDMP</KEYWORD1>\r
+                       <KEYWORD1>EDMP</KEYWORD1>\r
+                       <KEYWORD1>EDND</KEYWORD1>\r
+                       <KEYWORD1>EDNDTSD</KEYWORD1>\r
+                       <KEYWORD1>EDNR</KEYWORD1>\r
+                       <KEYWORD1>EDNROT</KEYWORD1>\r
+                       <KEYWORD1>EDOP</KEYWORD1>\r
+                       <KEYWORD1>EDOPT</KEYWORD1>\r
+                       <KEYWORD1>EDOU</KEYWORD1>\r
+                       <KEYWORD1>EDOUT</KEYWORD1>\r
+                       <KEYWORD1>EDRE</KEYWORD1>\r
+                       <KEYWORD1>EDREAD</KEYWORD1>\r
+                       <KEYWORD1>EDRS</KEYWORD1>\r
+                       <KEYWORD1>EDRST</KEYWORD1>\r
+                       <KEYWORD1>EDSH</KEYWORD1>\r
+                       <KEYWORD1>EDSHELL</KEYWORD1>\r
+                       <KEYWORD1>EDSO</KEYWORD1>\r
+                       <KEYWORD1>EDSOLV</KEYWORD1>\r
+                       <KEYWORD1>EDST</KEYWORD1>\r
+                       <KEYWORD1>EDSTART</KEYWORD1>\r
+                       <KEYWORD1>EDWE</KEYWORD1>\r
+                       <KEYWORD1>EDWELD</KEYWORD1>\r
+                       <KEYWORD1>EDWR</KEYWORD1>\r
+                       <KEYWORD1>EDWRITE</KEYWORD1>\r
+                       <KEYWORD1>EGEN</KEYWORD1>\r
+                       <KEYWORD1>EGEN</KEYWORD1>\r
+                       <KEYWORD1>EINT</KEYWORD1>\r
+                       <KEYWORD1>EINTF</KEYWORD1>\r
+                       <KEYWORD1>EKIL</KEYWORD1>\r
+                       <KEYWORD1>EKILL</KEYWORD1>\r
+                       <KEYWORD1>ELEM</KEYWORD1>\r
+                       <KEYWORD1>ELEM</KEYWORD1>\r
+                       <KEYWORD1>ELIS</KEYWORD1>\r
+                       <KEYWORD1>ELIST</KEYWORD1>\r
+                       <KEYWORD1>EMAG</KEYWORD1>\r
+                       <KEYWORD1>EMAGERR</KEYWORD1>\r
+                       <KEYWORD1>EMF</KEYWORD1>\r
+                       <KEYWORD1>EMID</KEYWORD1>\r
+                       <KEYWORD1>EMID</KEYWORD1>\r
+                       <KEYWORD1>EMIS</KEYWORD1>\r
+                       <KEYWORD1>EMIS</KEYWORD1>\r
+                       <KEYWORD1>EMOD</KEYWORD1>\r
+                       <KEYWORD1>EMODIF</KEYWORD1>\r
+                       <KEYWORD1>EMOR</KEYWORD1>\r
+                       <KEYWORD1>EMORE</KEYWORD1>\r
+                       <KEYWORD1>EMSY</KEYWORD1>\r
+                       <KEYWORD1>EMSYM</KEYWORD1>\r
+                       <KEYWORD1>EMUN</KEYWORD1>\r
+                       <KEYWORD1>EMUNIT</KEYWORD1>\r
+                       <KEYWORD1>EN</KEYWORD1>\r
+                       <KEYWORD1>ENGE</KEYWORD1>\r
+                       <KEYWORD1>ENGEN</KEYWORD1>\r
+                       <KEYWORD1>ENOR</KEYWORD1>\r
+                       <KEYWORD1>ENORM</KEYWORD1>\r
+                       <KEYWORD1>ENSY</KEYWORD1>\r
+                       <KEYWORD1>ENSYM</KEYWORD1>\r
+                       <KEYWORD1>EPLO</KEYWORD1>\r
+                       <KEYWORD1>EPLOT</KEYWORD1>\r
+                       <KEYWORD1>EQSL</KEYWORD1>\r
+                       <KEYWORD1>EQSLV</KEYWORD1>\r
+                       <KEYWORD1>ERAS</KEYWORD1>\r
+                       <KEYWORD1>ERASE</KEYWORD1>\r
+                       <KEYWORD1>EREA</KEYWORD1>\r
+                       <KEYWORD1>EREAD</KEYWORD1>\r
+                       <KEYWORD1>EREF</KEYWORD1>\r
+                       <KEYWORD1>EREFINE</KEYWORD1>\r
+                       <KEYWORD1>ERES</KEYWORD1>\r
+                       <KEYWORD1>ERESX</KEYWORD1>\r
+                       <KEYWORD1>ERNO</KEYWORD1>\r
+                       <KEYWORD1>ERNORM</KEYWORD1>\r
+                       <KEYWORD1>ERRA</KEYWORD1>\r
+                       <KEYWORD1>ERRANG</KEYWORD1>\r
+                       <KEYWORD1>ESEL</KEYWORD1>\r
+                       <KEYWORD1>ESEL</KEYWORD1>\r
+                       <KEYWORD1>ESIZ</KEYWORD1>\r
+                       <KEYWORD1>ESIZE</KEYWORD1>\r
+                       <KEYWORD1>ESLA</KEYWORD1>\r
+                       <KEYWORD1>ESLA</KEYWORD1>\r
+                       <KEYWORD1>ESLL</KEYWORD1>\r
+                       <KEYWORD1>ESLL</KEYWORD1>\r
+                       <KEYWORD1>ESLN</KEYWORD1>\r
+                       <KEYWORD1>ESLN</KEYWORD1>\r
+                       <KEYWORD1>ESLV</KEYWORD1>\r
+                       <KEYWORD1>ESLV</KEYWORD1>\r
+                       <KEYWORD1>ESOL</KEYWORD1>\r
+                       <KEYWORD1>ESOL</KEYWORD1>\r
+                       <KEYWORD1>ESOR</KEYWORD1>\r
+                       <KEYWORD1>ESORT</KEYWORD1>\r
+                       <KEYWORD1>ESTI</KEYWORD1>\r
+                       <KEYWORD1>ESTIF</KEYWORD1>\r
+                       <KEYWORD1>ESUR</KEYWORD1>\r
+                       <KEYWORD1>ESURF</KEYWORD1>\r
+                       <KEYWORD1>ESYM</KEYWORD1>\r
+                       <KEYWORD1>ESYM</KEYWORD1>\r
+                       <KEYWORD1>ESYS</KEYWORD1>\r
+                       <KEYWORD1>ESYS</KEYWORD1>\r
+                       <KEYWORD1>ET</KEYWORD1>\r
+                       <KEYWORD1>ETAB</KEYWORD1>\r
+                       <KEYWORD1>ETABLE</KEYWORD1>\r
+                       <KEYWORD1>ETCH</KEYWORD1>\r
+                       <KEYWORD1>ETCHG</KEYWORD1>\r
+                       <KEYWORD1>ETDE</KEYWORD1>\r
+                       <KEYWORD1>ETDELE</KEYWORD1>\r
+                       <KEYWORD1>ETLI</KEYWORD1>\r
+                       <KEYWORD1>ETLIST</KEYWORD1>\r
+                       <KEYWORD1>ETYP</KEYWORD1>\r
+                       <KEYWORD1>ETYPE</KEYWORD1>\r
+                       <KEYWORD1>EUSO</KEYWORD1>\r
+                       <KEYWORD1>EUSORT</KEYWORD1>\r
+                       <KEYWORD1>EWRI</KEYWORD1>\r
+                       <KEYWORD1>EWRITE</KEYWORD1>\r
+                       <KEYWORD1>EXP</KEYWORD1>\r
+                       <KEYWORD1>EXPA</KEYWORD1>\r
+                       <KEYWORD1>EXPA</KEYWORD1>\r
+                       <KEYWORD1>EXPAND</KEYWORD1>\r
+                       <KEYWORD1>EXPASS</KEYWORD1>\r
+                       <KEYWORD1>EXPS</KEYWORD1>\r
+                       <KEYWORD1>EXPSOL</KEYWORD1>\r
+                       <KEYWORD1>EXTO</KEYWORD1>\r
+                       <KEYWORD1>EXTOPT</KEYWORD1>\r
+                       <KEYWORD1>EXTR</KEYWORD1>\r
+                       <KEYWORD1>EXTREM</KEYWORD1>\r
+                       <KEYWORD1>FATI</KEYWORD1>\r
+                       <KEYWORD1>FATIGUE</KEYWORD1>\r
+                       <KEYWORD1>FCUM</KEYWORD1>\r
+                       <KEYWORD1>FCUM</KEYWORD1>\r
+                       <KEYWORD1>FDEL</KEYWORD1>\r
+                       <KEYWORD1>FDELE</KEYWORD1>\r
+                       <KEYWORD1>FE</KEYWORD1>\r
+                       <KEYWORD1>FEBO</KEYWORD1>\r
+                       <KEYWORD1>FEBODY</KEYWORD1>\r
+                       <KEYWORD1>FECO</KEYWORD1>\r
+                       <KEYWORD1>FECONS</KEYWORD1>\r
+                       <KEYWORD1>FEFO</KEYWORD1>\r
+                       <KEYWORD1>FEFOR</KEYWORD1>\r
+                       <KEYWORD1>FELI</KEYWORD1>\r
+                       <KEYWORD1>FELIST</KEYWORD1>\r
+                       <KEYWORD1>FESU</KEYWORD1>\r
+                       <KEYWORD1>FESURF</KEYWORD1>\r
+                       <KEYWORD1>FILE</KEYWORD1>\r
+                       <KEYWORD1>FILE</KEYWORD1>\r
+                       <KEYWORD1>FILE</KEYWORD1>\r
+                       <KEYWORD1>FILE</KEYWORD1>\r
+                       <KEYWORD1>FILEAUX2</KEYWORD1>\r
+                       <KEYWORD1>FILEDISP</KEYWORD1>\r
+                       <KEYWORD1>FILL</KEYWORD1>\r
+                       <KEYWORD1>FILL</KEYWORD1>\r
+                       <KEYWORD1>FILL</KEYWORD1>\r
+                       <KEYWORD1>FILLDATA</KEYWORD1>\r
+                       <KEYWORD1>FINI</KEYWORD1>\r
+                       <KEYWORD1>FINISH</KEYWORD1>\r
+                       <KEYWORD1>FITE</KEYWORD1>\r
+                       <KEYWORD1>FITEM</KEYWORD1>\r
+                       <KEYWORD1>FK</KEYWORD1>\r
+                       <KEYWORD1>FKDE</KEYWORD1>\r
+                       <KEYWORD1>FKDELE</KEYWORD1>\r
+                       <KEYWORD1>FKLI</KEYWORD1>\r
+                       <KEYWORD1>FKLIST</KEYWORD1>\r
+                       <KEYWORD1>FL</KEYWORD1>\r
+                       <KEYWORD1>FLAN</KEYWORD1>\r
+                       <KEYWORD1>FLANGE</KEYWORD1>\r
+                       <KEYWORD1>FLDA</KEYWORD1>\r
+                       <KEYWORD1>FLDATA</KEYWORD1>\r
+                       <KEYWORD1>FLDATA10</KEYWORD1>\r
+                       <KEYWORD1>FLDATA11</KEYWORD1>\r
+                       <KEYWORD1>FLDATA12</KEYWORD1>\r
+                       <KEYWORD1>FLDATA13</KEYWORD1>\r
+                       <KEYWORD1>FLDATA14</KEYWORD1>\r
+                       <KEYWORD1>FLDATA15</KEYWORD1>\r
+                       <KEYWORD1>FLDATA16</KEYWORD1>\r
+                       <KEYWORD1>FLDATA17</KEYWORD1>\r
+                       <KEYWORD1>FLDATA18</KEYWORD1>\r
+                       <KEYWORD1>FLDATA19</KEYWORD1>\r
+                       <KEYWORD1>FLDATA1</KEYWORD1>\r
+                       <KEYWORD1>FLDATA20</KEYWORD1>\r
+                       <KEYWORD1>FLDATA20A</KEYWORD1>\r
+                       <KEYWORD1>FLDATA21</KEYWORD1>\r
+                       <KEYWORD1>FLDATA22</KEYWORD1>\r
+                       <KEYWORD1>FLDATA23</KEYWORD1>\r
+                       <KEYWORD1>FLDATA24</KEYWORD1>\r
+                       <KEYWORD1>FLDATA24A</KEYWORD1>\r
+                       <KEYWORD1>FLDATA24B</KEYWORD1>\r
+                       <KEYWORD1>FLDATA24C</KEYWORD1>\r
+                       <KEYWORD1>FLDATA24D</KEYWORD1>\r
+                       <KEYWORD1>FLDATA25</KEYWORD1>\r
+                       <KEYWORD1>FLDATA26</KEYWORD1>\r
+                       <KEYWORD1>FLDATA27</KEYWORD1>\r
+                       <KEYWORD1>FLDATA28</KEYWORD1>\r
+                       <KEYWORD1>FLDATA29</KEYWORD1>\r
+                       <KEYWORD1>FLDATA2</KEYWORD1>\r
+                       <KEYWORD1>FLDATA30</KEYWORD1>\r
+                       <KEYWORD1>FLDATA31</KEYWORD1>\r
+                       <KEYWORD1>FLDATA32</KEYWORD1>\r
+                       <KEYWORD1>FLDATA33</KEYWORD1>\r
+                       <KEYWORD1>FLDATA37</KEYWORD1>\r
+                       <KEYWORD1>FLDATA3</KEYWORD1>\r
+                       <KEYWORD1>FLDATA4</KEYWORD1>\r
+                       <KEYWORD1>FLDATA4A</KEYWORD1>\r
+                       <KEYWORD1>FLDATA5</KEYWORD1>\r
+                       <KEYWORD1>FLDATA6</KEYWORD1>\r
+                       <KEYWORD1>FLDATA7</KEYWORD1>\r
+                       <KEYWORD1>FLDATA8</KEYWORD1>\r
+                       <KEYWORD1>FLDATA9</KEYWORD1>\r
+                       <KEYWORD1>FLDATA</KEYWORD1>\r
+                       <KEYWORD1>FLIS</KEYWORD1>\r
+                       <KEYWORD1>FLIST</KEYWORD1>\r
+                       <KEYWORD1>FLLI</KEYWORD1>\r
+                       <KEYWORD1>FLLIST</KEYWORD1>\r
+                       <KEYWORD1>FLOC</KEYWORD1>\r
+                       <KEYWORD1>FLOCHECK</KEYWORD1>\r
+                       <KEYWORD1>FLOT</KEYWORD1>\r
+                       <KEYWORD1>FLOTRAN</KEYWORD1>\r
+                       <KEYWORD1>FLRE</KEYWORD1>\r
+                       <KEYWORD1>FLREAD</KEYWORD1>\r
+                       <KEYWORD1>FLST</KEYWORD1>\r
+                       <KEYWORD1>FLST</KEYWORD1>\r
+                       <KEYWORD1>FLUX</KEYWORD1>\r
+                       <KEYWORD1>FLUXV</KEYWORD1>\r
+                       <KEYWORD1>FMAG</KEYWORD1>\r
+                       <KEYWORD1>FMAG</KEYWORD1>\r
+                       <KEYWORD1>FMAGBC</KEYWORD1>\r
+                       <KEYWORD1>FMAGSUM</KEYWORD1>\r
+                       <KEYWORD1>FOR2</KEYWORD1>\r
+                       <KEYWORD1>FOR2D</KEYWORD1>\r
+                       <KEYWORD1>FORC</KEYWORD1>\r
+                       <KEYWORD1>FORCE</KEYWORD1>\r
+                       <KEYWORD1>FORM</KEYWORD1>\r
+                       <KEYWORD1>FORM</KEYWORD1>\r
+                       <KEYWORD1>FP</KEYWORD1>\r
+                       <KEYWORD1>FPLI</KEYWORD1>\r
+                       <KEYWORD1>FPLIST</KEYWORD1>\r
+                       <KEYWORD1>FREQ</KEYWORD1>\r
+                       <KEYWORD1>FREQ</KEYWORD1>\r
+                       <KEYWORD1>FS</KEYWORD1>\r
+                       <KEYWORD1>FSCA</KEYWORD1>\r
+                       <KEYWORD1>FSCALE</KEYWORD1>\r
+                       <KEYWORD1>FSDE</KEYWORD1>\r
+                       <KEYWORD1>FSDELE</KEYWORD1>\r
+                       <KEYWORD1>FSLI</KEYWORD1>\r
+                       <KEYWORD1>FSLIST</KEYWORD1>\r
+                       <KEYWORD1>FSNO</KEYWORD1>\r
+                       <KEYWORD1>FSNODE</KEYWORD1>\r
+                       <KEYWORD1>FSPL</KEYWORD1>\r
+                       <KEYWORD1>FSPLOT</KEYWORD1>\r
+                       <KEYWORD1>FSSE</KEYWORD1>\r
+                       <KEYWORD1>FSSECT</KEYWORD1>\r
+                       <KEYWORD1>FSUM</KEYWORD1>\r
+                       <KEYWORD1>FSUM</KEYWORD1>\r
+                       <KEYWORD1>FTCA</KEYWORD1>\r
+                       <KEYWORD1>FTCALC</KEYWORD1>\r
+                       <KEYWORD1>FTRA</KEYWORD1>\r
+                       <KEYWORD1>FTRAN</KEYWORD1>\r
+                       <KEYWORD1>FTSI</KEYWORD1>\r
+                       <KEYWORD1>FTSIZE</KEYWORD1>\r
+                       <KEYWORD1>FTWR</KEYWORD1>\r
+                       <KEYWORD1>FTWRITE</KEYWORD1>\r
+                       <KEYWORD1>FVME</KEYWORD1>\r
+                       <KEYWORD1>FVMESH</KEYWORD1>\r
+                       <KEYWORD1>GAP</KEYWORD1>\r
+                       <KEYWORD1>GAPF</KEYWORD1>\r
+                       <KEYWORD1>GAPFINISH</KEYWORD1>\r
+                       <KEYWORD1>GAPL</KEYWORD1>\r
+                       <KEYWORD1>GAPLIST</KEYWORD1>\r
+                       <KEYWORD1>GAPM</KEYWORD1>\r
+                       <KEYWORD1>GAPMERGE</KEYWORD1>\r
+                       <KEYWORD1>GAPO</KEYWORD1>\r
+                       <KEYWORD1>GAPOPT</KEYWORD1>\r
+                       <KEYWORD1>GAPP</KEYWORD1>\r
+                       <KEYWORD1>GAPPLOT</KEYWORD1>\r
+                       <KEYWORD1>GAUG</KEYWORD1>\r
+                       <KEYWORD1>GAUGE</KEYWORD1>\r
+                       <KEYWORD1>GCGE</KEYWORD1>\r
+                       <KEYWORD1>GCGEN</KEYWORD1>\r
+                       <KEYWORD1>GENO</KEYWORD1>\r
+                       <KEYWORD1>GENOPT</KEYWORD1>\r
+                       <KEYWORD1>GEOM</KEYWORD1>\r
+                       <KEYWORD1>GEOM</KEYWORD1>\r
+                       <KEYWORD1>GEOM</KEYWORD1>\r
+                       <KEYWORD1>GEOMETRY</KEYWORD1>\r
+                       <KEYWORD1>GP</KEYWORD1>\r
+                       <KEYWORD1>GPDE</KEYWORD1>\r
+                       <KEYWORD1>GPDELE</KEYWORD1>\r
+                       <KEYWORD1>GPLI</KEYWORD1>\r
+                       <KEYWORD1>GPLIST</KEYWORD1>\r
+                       <KEYWORD1>GPLO</KEYWORD1>\r
+                       <KEYWORD1>GPLOT</KEYWORD1>\r
+                       <KEYWORD1>GRP</KEYWORD1>\r
+                       <KEYWORD1>GSUM</KEYWORD1>\r
+                       <KEYWORD1>GSUM</KEYWORD1>\r
+                       <KEYWORD1>HARF</KEYWORD1>\r
+                       <KEYWORD1>HARFRQ</KEYWORD1>\r
+                       <KEYWORD1>HELP</KEYWORD1>\r
+                       <KEYWORD1>HELP</KEYWORD1>\r
+                       <KEYWORD1>HELP</KEYWORD1>\r
+                       <KEYWORD1>HELPDISP</KEYWORD1>\r
+                       <KEYWORD1>HFSW</KEYWORD1>\r
+                       <KEYWORD1>HFSWEEP</KEYWORD1>\r
+                       <KEYWORD1>HMAG</KEYWORD1>\r
+                       <KEYWORD1>HMAGSOLV</KEYWORD1>\r
+                       <KEYWORD1>HPGL</KEYWORD1>\r
+                       <KEYWORD1>HPGL</KEYWORD1>\r
+                       <KEYWORD1>HPTC</KEYWORD1>\r
+                       <KEYWORD1>HPTCREATE</KEYWORD1>\r
+                       <KEYWORD1>HPTD</KEYWORD1>\r
+                       <KEYWORD1>HPTDELETE</KEYWORD1>\r
+                       <KEYWORD1>HRCP</KEYWORD1>\r
+                       <KEYWORD1>HRCPLX</KEYWORD1>\r
+                       <KEYWORD1>HREX</KEYWORD1>\r
+                       <KEYWORD1>HREXP</KEYWORD1>\r
+                       <KEYWORD1>HROP</KEYWORD1>\r
+                       <KEYWORD1>HROPT</KEYWORD1>\r
+                       <KEYWORD1>HROU</KEYWORD1>\r
+                       <KEYWORD1>HROUT</KEYWORD1>\r
+                       <KEYWORD1>IC</KEYWORD1>\r
+                       <KEYWORD1>ICDE</KEYWORD1>\r
+                       <KEYWORD1>ICDELE</KEYWORD1>\r
+                       <KEYWORD1>ICLI</KEYWORD1>\r
+                       <KEYWORD1>ICLIST</KEYWORD1>\r
+                       <KEYWORD1>IGES</KEYWORD1>\r
+                       <KEYWORD1>IGES</KEYWORD1>\r
+                       <KEYWORD1>IGESIN</KEYWORD1>\r
+                       <KEYWORD1>IGESOUT</KEYWORD1>\r
+                       <KEYWORD1>IMAG</KEYWORD1>\r
+                       <KEYWORD1>IMAGIN</KEYWORD1>\r
+                       <KEYWORD1>IMME</KEYWORD1>\r
+                       <KEYWORD1>IMMED</KEYWORD1>\r
+                       <KEYWORD1>IMPD</KEYWORD1>\r
+                       <KEYWORD1>IMPD</KEYWORD1>\r
+                       <KEYWORD1>INRE</KEYWORD1>\r
+                       <KEYWORD1>INRES</KEYWORD1>\r
+                       <KEYWORD1>INRT</KEYWORD1>\r
+                       <KEYWORD1>INRTIA</KEYWORD1>\r
+                       <KEYWORD1>INT1</KEYWORD1>\r
+                       <KEYWORD1>INT1</KEYWORD1>\r
+                       <KEYWORD1>INTS</KEYWORD1>\r
+                       <KEYWORD1>INTSRF</KEYWORD1>\r
+                       <KEYWORD1>IOPT</KEYWORD1>\r
+                       <KEYWORD1>IOPTN</KEYWORD1>\r
+                       <KEYWORD1>IRLF</KEYWORD1>\r
+                       <KEYWORD1>IRLF</KEYWORD1>\r
+                       <KEYWORD1>IRLI</KEYWORD1>\r
+                       <KEYWORD1>IRLIST</KEYWORD1>\r
+                       <KEYWORD1>K</KEYWORD1>\r
+                       <KEYWORD1>KATT</KEYWORD1>\r
+                       <KEYWORD1>KATT</KEYWORD1>\r
+                       <KEYWORD1>KBC</KEYWORD1>\r
+                       <KEYWORD1>KBET</KEYWORD1>\r
+                       <KEYWORD1>KBETW</KEYWORD1>\r
+                       <KEYWORD1>KCAL</KEYWORD1>\r
+                       <KEYWORD1>KCALC</KEYWORD1>\r
+                       <KEYWORD1>KCEN</KEYWORD1>\r
+                       <KEYWORD1>KCENTER</KEYWORD1>\r
+                       <KEYWORD1>KCLE</KEYWORD1>\r
+                       <KEYWORD1>KCLEAR</KEYWORD1>\r
+                       <KEYWORD1>KDEL</KEYWORD1>\r
+                       <KEYWORD1>KDELE</KEYWORD1>\r
+                       <KEYWORD1>KDIS</KEYWORD1>\r
+                       <KEYWORD1>KDIST</KEYWORD1>\r
+                       <KEYWORD1>KESI</KEYWORD1>\r
+                       <KEYWORD1>KESIZE</KEYWORD1>\r
+                       <KEYWORD1>KEYO</KEYWORD1>\r
+                       <KEYWORD1>KEYOPT</KEYWORD1>\r
+                       <KEYWORD1>KEYP</KEYWORD1>\r
+                       <KEYWORD1>KEYPTS</KEYWORD1>\r
+                       <KEYWORD1>KEYW</KEYWORD1>\r
+                       <KEYWORD1>KEYW</KEYWORD1>\r
+                       <KEYWORD1>KFIL</KEYWORD1>\r
+                       <KEYWORD1>KFILL</KEYWORD1>\r
+                       <KEYWORD1>KGEN</KEYWORD1>\r
+                       <KEYWORD1>KGEN</KEYWORD1>\r
+                       <KEYWORD1>KL</KEYWORD1>\r
+                       <KEYWORD1>KLIS</KEYWORD1>\r
+                       <KEYWORD1>KLIST</KEYWORD1>\r
+                       <KEYWORD1>KMES</KEYWORD1>\r
+                       <KEYWORD1>KMESH</KEYWORD1>\r
+                       <KEYWORD1>KMOD</KEYWORD1>\r
+                       <KEYWORD1>KMODIF</KEYWORD1>\r
+                       <KEYWORD1>KMOV</KEYWORD1>\r
+                       <KEYWORD1>KMOVE</KEYWORD1>\r
+                       <KEYWORD1>KNOD</KEYWORD1>\r
+                       <KEYWORD1>KNODE</KEYWORD1>\r
+                       <KEYWORD1>KPLO</KEYWORD1>\r
+                       <KEYWORD1>KPLOT</KEYWORD1>\r
+                       <KEYWORD1>KPSC</KEYWORD1>\r
+                       <KEYWORD1>KPSCALE</KEYWORD1>\r
+                       <KEYWORD1>KREF</KEYWORD1>\r
+                       <KEYWORD1>KREFINE</KEYWORD1>\r
+                       <KEYWORD1>KSCA</KEYWORD1>\r
+                       <KEYWORD1>KSCALE</KEYWORD1>\r
+                       <KEYWORD1>KSCO</KEYWORD1>\r
+                       <KEYWORD1>KSCON</KEYWORD1>\r
+                       <KEYWORD1>KSEL</KEYWORD1>\r
+                       <KEYWORD1>KSEL</KEYWORD1>\r
+                       <KEYWORD1>KSLL</KEYWORD1>\r
+                       <KEYWORD1>KSLL</KEYWORD1>\r
+                       <KEYWORD1>KSLN</KEYWORD1>\r
+                       <KEYWORD1>KSLN</KEYWORD1>\r
+                       <KEYWORD1>KSUM</KEYWORD1>\r
+                       <KEYWORD1>KSUM</KEYWORD1>\r
+                       <KEYWORD1>KSYM</KEYWORD1>\r
+                       <KEYWORD1>KSYMM</KEYWORD1>\r
+                       <KEYWORD1>KTRA</KEYWORD1>\r
+                       <KEYWORD1>KTRAN</KEYWORD1>\r
+                       <KEYWORD1>KUSE</KEYWORD1>\r
+                       <KEYWORD1>KUSE</KEYWORD1>\r
+                       <KEYWORD1>KWPA</KEYWORD1>\r
+                       <KEYWORD1>KWPAVE</KEYWORD1>\r
+                       <KEYWORD1>KWPL</KEYWORD1>\r
+                       <KEYWORD1>KWPLAN</KEYWORD1>\r
+                       <KEYWORD1>L2AN</KEYWORD1>\r
+                       <KEYWORD1>L2ANG</KEYWORD1>\r
+                       <KEYWORD1>L2TA</KEYWORD1>\r
+                       <KEYWORD1>L2TAN</KEYWORD1>\r
+                       <KEYWORD1>L</KEYWORD1>\r
+                       <KEYWORD1>LANG</KEYWORD1>\r
+                       <KEYWORD1>LANG</KEYWORD1>\r
+                       <KEYWORD1>LARC</KEYWORD1>\r
+                       <KEYWORD1>LARC</KEYWORD1>\r
+                       <KEYWORD1>LARE</KEYWORD1>\r
+                       <KEYWORD1>LAREA</KEYWORD1>\r
+                       <KEYWORD1>LARG</KEYWORD1>\r
+                       <KEYWORD1>LARGE</KEYWORD1>\r
+                       <KEYWORD1>LATT</KEYWORD1>\r
+                       <KEYWORD1>LATT</KEYWORD1>\r
+                       <KEYWORD1>LAYE</KEYWORD1>\r
+                       <KEYWORD1>LAYE</KEYWORD1>\r
+                       <KEYWORD1>LAYER</KEYWORD1>\r
+                       <KEYWORD1>LAYERP26</KEYWORD1>\r
+                       <KEYWORD1>LAYL</KEYWORD1>\r
+                       <KEYWORD1>LAYLIST</KEYWORD1>\r
+                       <KEYWORD1>LAYP</KEYWORD1>\r
+                       <KEYWORD1>LAYPLOT</KEYWORD1>\r
+                       <KEYWORD1>LCAB</KEYWORD1>\r
+                       <KEYWORD1>LCABS</KEYWORD1>\r
+                       <KEYWORD1>LCAS</KEYWORD1>\r
+                       <KEYWORD1>LCASE</KEYWORD1>\r
+                       <KEYWORD1>LCCA</KEYWORD1>\r
+                       <KEYWORD1>LCCA</KEYWORD1>\r
+                       <KEYWORD1>LCCALC</KEYWORD1>\r
+                       <KEYWORD1>LCCAT</KEYWORD1>\r
+                       <KEYWORD1>LCDE</KEYWORD1>\r
+                       <KEYWORD1>LCDEF</KEYWORD1>\r
+                       <KEYWORD1>LCFA</KEYWORD1>\r
+                       <KEYWORD1>LCFACT</KEYWORD1>\r
+                       <KEYWORD1>LCFI</KEYWORD1>\r
+                       <KEYWORD1>LCFILE</KEYWORD1>\r
+                       <KEYWORD1>LCLE</KEYWORD1>\r
+                       <KEYWORD1>LCLEAR</KEYWORD1>\r
+                       <KEYWORD1>LCOM</KEYWORD1>\r
+                       <KEYWORD1>LCOMB</KEYWORD1>\r
+                       <KEYWORD1>LCOP</KEYWORD1>\r
+                       <KEYWORD1>LCOPER</KEYWORD1>\r
+                       <KEYWORD1>LCSE</KEYWORD1>\r
+                       <KEYWORD1>LCSEL</KEYWORD1>\r
+                       <KEYWORD1>LCSL</KEYWORD1>\r
+                       <KEYWORD1>LCSL</KEYWORD1>\r
+                       <KEYWORD1>LCSU</KEYWORD1>\r
+                       <KEYWORD1>LCSUM</KEYWORD1>\r
+                       <KEYWORD1>LCWR</KEYWORD1>\r
+                       <KEYWORD1>LCWRITE</KEYWORD1>\r
+                       <KEYWORD1>LCZE</KEYWORD1>\r
+                       <KEYWORD1>LCZERO</KEYWORD1>\r
+                       <KEYWORD1>LDEL</KEYWORD1>\r
+                       <KEYWORD1>LDELE</KEYWORD1>\r
+                       <KEYWORD1>LDIV</KEYWORD1>\r
+                       <KEYWORD1>LDIV</KEYWORD1>\r
+                       <KEYWORD1>LDRA</KEYWORD1>\r
+                       <KEYWORD1>LDRAG</KEYWORD1>\r
+                       <KEYWORD1>LDRE</KEYWORD1>\r
+                       <KEYWORD1>LDREAD</KEYWORD1>\r
+                       <KEYWORD1>LESI</KEYWORD1>\r
+                       <KEYWORD1>LESIZE</KEYWORD1>\r
+                       <KEYWORD1>LEXT</KEYWORD1>\r
+                       <KEYWORD1>LEXTND</KEYWORD1>\r
+                       <KEYWORD1>LFIL</KEYWORD1>\r
+                       <KEYWORD1>LFILLT</KEYWORD1>\r
+                       <KEYWORD1>LFSU</KEYWORD1>\r
+                       <KEYWORD1>LFSURF</KEYWORD1>\r
+                       <KEYWORD1>LGEN</KEYWORD1>\r
+                       <KEYWORD1>LGEN</KEYWORD1>\r
+                       <KEYWORD1>LGLU</KEYWORD1>\r
+                       <KEYWORD1>LGLUE</KEYWORD1>\r
+                       <KEYWORD1>LGWR</KEYWORD1>\r
+                       <KEYWORD1>LGWRITE</KEYWORD1>\r
+                       <KEYWORD1>LINA</KEYWORD1>\r
+                       <KEYWORD1>LINA</KEYWORD1>\r
+                       <KEYWORD1>LINE</KEYWORD1>\r
+                       <KEYWORD1>LINE</KEYWORD1>\r
+                       <KEYWORD1>LINE</KEYWORD1>\r
+                       <KEYWORD1>LINES</KEYWORD1>\r
+                       <KEYWORD1>LINL</KEYWORD1>\r
+                       <KEYWORD1>LINL</KEYWORD1>\r
+                       <KEYWORD1>LINP</KEYWORD1>\r
+                       <KEYWORD1>LINP</KEYWORD1>\r
+                       <KEYWORD1>LINV</KEYWORD1>\r
+                       <KEYWORD1>LINV</KEYWORD1>\r
+                       <KEYWORD1>LLIS</KEYWORD1>\r
+                       <KEYWORD1>LLIST</KEYWORD1>\r
+                       <KEYWORD1>LMAT</KEYWORD1>\r
+                       <KEYWORD1>LMATRIX</KEYWORD1>\r
+                       <KEYWORD1>LMES</KEYWORD1>\r
+                       <KEYWORD1>LMESH</KEYWORD1>\r
+                       <KEYWORD1>LNCO</KEYWORD1>\r
+                       <KEYWORD1>LNCOLLAPSE</KEYWORD1>\r
+                       <KEYWORD1>LNDE</KEYWORD1>\r
+                       <KEYWORD1>LNDETACH</KEYWORD1>\r
+                       <KEYWORD1>LNFI</KEYWORD1>\r
+                       <KEYWORD1>LNFILL</KEYWORD1>\r
+                       <KEYWORD1>LNME</KEYWORD1>\r
+                       <KEYWORD1>LNMERGE</KEYWORD1>\r
+                       <KEYWORD1>LNSP</KEYWORD1>\r
+                       <KEYWORD1>LNSPLIT</KEYWORD1>\r
+                       <KEYWORD1>LNSR</KEYWORD1>\r
+                       <KEYWORD1>LNSRCH</KEYWORD1>\r
+                       <KEYWORD1>LOCA</KEYWORD1>\r
+                       <KEYWORD1>LOCAL</KEYWORD1>\r
+                       <KEYWORD1>LOVL</KEYWORD1>\r
+                       <KEYWORD1>LOVLAP</KEYWORD1>\r
+                       <KEYWORD1>LPLO</KEYWORD1>\r
+                       <KEYWORD1>LPLOT</KEYWORD1>\r
+                       <KEYWORD1>LPTN</KEYWORD1>\r
+                       <KEYWORD1>LPTN</KEYWORD1>\r
+                       <KEYWORD1>LREF</KEYWORD1>\r
+                       <KEYWORD1>LREFINE</KEYWORD1>\r
+                       <KEYWORD1>LREV</KEYWORD1>\r
+                       <KEYWORD1>LREVERSE</KEYWORD1>\r
+                       <KEYWORD1>LROT</KEYWORD1>\r
+                       <KEYWORD1>LROTAT</KEYWORD1>\r
+                       <KEYWORD1>LSBA</KEYWORD1>\r
+                       <KEYWORD1>LSBA</KEYWORD1>\r
+                       <KEYWORD1>LSBL</KEYWORD1>\r
+                       <KEYWORD1>LSBL</KEYWORD1>\r
+                       <KEYWORD1>LSBV</KEYWORD1>\r
+                       <KEYWORD1>LSBV</KEYWORD1>\r
+                       <KEYWORD1>LSBW</KEYWORD1>\r
+                       <KEYWORD1>LSBW</KEYWORD1>\r
+                       <KEYWORD1>LSCL</KEYWORD1>\r
+                       <KEYWORD1>LSCLEAR</KEYWORD1>\r
+                       <KEYWORD1>LSDE</KEYWORD1>\r
+                       <KEYWORD1>LSDELE</KEYWORD1>\r
+                       <KEYWORD1>LSEL</KEYWORD1>\r
+                       <KEYWORD1>LSEL</KEYWORD1>\r
+                       <KEYWORD1>LSLA</KEYWORD1>\r
+                       <KEYWORD1>LSLA</KEYWORD1>\r
+                       <KEYWORD1>LSLK</KEYWORD1>\r
+                       <KEYWORD1>LSLK</KEYWORD1>\r
+                       <KEYWORD1>LSOP</KEYWORD1>\r
+                       <KEYWORD1>LSOPER</KEYWORD1>\r
+                       <KEYWORD1>LSRE</KEYWORD1>\r
+                       <KEYWORD1>LSREAD</KEYWORD1>\r
+                       <KEYWORD1>LSSC</KEYWORD1>\r
+                       <KEYWORD1>LSSCALE</KEYWORD1>\r
+                       <KEYWORD1>LSSO</KEYWORD1>\r
+                       <KEYWORD1>LSSOLVE</KEYWORD1>\r
+                       <KEYWORD1>LSTR</KEYWORD1>\r
+                       <KEYWORD1>LSTR</KEYWORD1>\r
+                       <KEYWORD1>LSUM</KEYWORD1>\r
+                       <KEYWORD1>LSUM</KEYWORD1>\r
+                       <KEYWORD1>LSWR</KEYWORD1>\r
+                       <KEYWORD1>LSWRITE</KEYWORD1>\r
+                       <KEYWORD1>LSYM</KEYWORD1>\r
+                       <KEYWORD1>LSYMM</KEYWORD1>\r
+                       <KEYWORD1>LTAN</KEYWORD1>\r
+                       <KEYWORD1>LTAN</KEYWORD1>\r
+                       <KEYWORD1>LTRA</KEYWORD1>\r
+                       <KEYWORD1>LTRAN</KEYWORD1>\r
+                       <KEYWORD1>LUMP</KEYWORD1>\r
+                       <KEYWORD1>LUMPM</KEYWORD1>\r
+                       <KEYWORD1>LVSC</KEYWORD1>\r
+                       <KEYWORD1>LVSCALE</KEYWORD1>\r
+                       <KEYWORD1>LWPL</KEYWORD1>\r
+                       <KEYWORD1>LWPLAN</KEYWORD1>\r
+                       <KEYWORD1>M</KEYWORD1>\r
+                       <KEYWORD1>MAGO</KEYWORD1>\r
+                       <KEYWORD1>MAGOPT</KEYWORD1>\r
+                       <KEYWORD1>MAGS</KEYWORD1>\r
+                       <KEYWORD1>MAGSOLV</KEYWORD1>\r
+                       <KEYWORD1>MAST</KEYWORD1>\r
+                       <KEYWORD1>MASTER</KEYWORD1>\r
+                       <KEYWORD1>MAT</KEYWORD1>\r
+                       <KEYWORD1>MATE</KEYWORD1>\r
+                       <KEYWORD1>MATER</KEYWORD1>\r
+                       <KEYWORD1>MDAM</KEYWORD1>\r
+                       <KEYWORD1>MDAMP</KEYWORD1>\r
+                       <KEYWORD1>MDEL</KEYWORD1>\r
+                       <KEYWORD1>MDELE</KEYWORD1>\r
+                       <KEYWORD1>MESH</KEYWORD1>\r
+                       <KEYWORD1>MESHING</KEYWORD1>\r
+                       <KEYWORD1>MGEN</KEYWORD1>\r
+                       <KEYWORD1>MGEN</KEYWORD1>\r
+                       <KEYWORD1>MITE</KEYWORD1>\r
+                       <KEYWORD1>MITER</KEYWORD1>\r
+                       <KEYWORD1>MLIS</KEYWORD1>\r
+                       <KEYWORD1>MLIST</KEYWORD1>\r
+                       <KEYWORD1>MMF</KEYWORD1>\r
+                       <KEYWORD1>MODE</KEYWORD1>\r
+                       <KEYWORD1>MODE</KEYWORD1>\r
+                       <KEYWORD1>MODM</KEYWORD1>\r
+                       <KEYWORD1>MODMSH</KEYWORD1>\r
+                       <KEYWORD1>MODO</KEYWORD1>\r
+                       <KEYWORD1>MODOPT</KEYWORD1>\r
+                       <KEYWORD1>MONI</KEYWORD1>\r
+                       <KEYWORD1>MONITOR</KEYWORD1>\r
+                       <KEYWORD1>MOPT</KEYWORD1>\r
+                       <KEYWORD1>MOPT</KEYWORD1>\r
+                       <KEYWORD1>MOVE</KEYWORD1>\r
+                       <KEYWORD1>MOVE</KEYWORD1>\r
+                       <KEYWORD1>MP</KEYWORD1>\r
+                       <KEYWORD1>MPAM</KEYWORD1>\r
+                       <KEYWORD1>MPAMOD</KEYWORD1>\r
+                       <KEYWORD1>MPCH</KEYWORD1>\r
+                       <KEYWORD1>MPCHG</KEYWORD1>\r
+                       <KEYWORD1>MPDA</KEYWORD1>\r
+                       <KEYWORD1>MPDATA</KEYWORD1>\r
+                       <KEYWORD1>MPDE</KEYWORD1>\r
+                       <KEYWORD1>MPDELE</KEYWORD1>\r
+                       <KEYWORD1>MPDR</KEYWORD1>\r
+                       <KEYWORD1>MPDRES</KEYWORD1>\r
+                       <KEYWORD1>MPLI</KEYWORD1>\r
+                       <KEYWORD1>MPLIST</KEYWORD1>\r
+                       <KEYWORD1>MPMO</KEYWORD1>\r
+                       <KEYWORD1>MPMOD</KEYWORD1>\r
+                       <KEYWORD1>MPPL</KEYWORD1>\r
+                       <KEYWORD1>MPPLOT</KEYWORD1>\r
+                       <KEYWORD1>MPRE</KEYWORD1>\r
+                       <KEYWORD1>MPREAD</KEYWORD1>\r
+                       <KEYWORD1>MPRI</KEYWORD1>\r
+                       <KEYWORD1>MPRINT</KEYWORD1>\r
+                       <KEYWORD1>MPTE</KEYWORD1>\r
+                       <KEYWORD1>MPTEMP</KEYWORD1>\r
+                       <KEYWORD1>MPTG</KEYWORD1>\r
+                       <KEYWORD1>MPTGEN</KEYWORD1>\r
+                       <KEYWORD1>MPTR</KEYWORD1>\r
+                       <KEYWORD1>MPTRES</KEYWORD1>\r
+                       <KEYWORD1>MPUN</KEYWORD1>\r
+                       <KEYWORD1>MPUNDO</KEYWORD1>\r
+                       <KEYWORD1>MPWR</KEYWORD1>\r
+                       <KEYWORD1>MPWRITE</KEYWORD1>\r
+                       <KEYWORD1>MSAD</KEYWORD1>\r
+                       <KEYWORD1>MSADV</KEYWORD1>\r
+                       <KEYWORD1>MSCA</KEYWORD1>\r
+                       <KEYWORD1>MSCAP</KEYWORD1>\r
+                       <KEYWORD1>MSDA</KEYWORD1>\r
+                       <KEYWORD1>MSDATA</KEYWORD1>\r
+                       <KEYWORD1>MSHA</KEYWORD1>\r
+                       <KEYWORD1>MSHAPE</KEYWORD1>\r
+                       <KEYWORD1>MSHK</KEYWORD1>\r
+                       <KEYWORD1>MSHKEY</KEYWORD1>\r
+                       <KEYWORD1>MSHM</KEYWORD1>\r
+                       <KEYWORD1>MSHMID</KEYWORD1>\r
+                       <KEYWORD1>MSHP</KEYWORD1>\r
+                       <KEYWORD1>MSHPATTERN</KEYWORD1>\r
+                       <KEYWORD1>MSME</KEYWORD1>\r
+                       <KEYWORD1>MSMETH</KEYWORD1>\r
+                       <KEYWORD1>MSNO</KEYWORD1>\r
+                       <KEYWORD1>MSNOMF</KEYWORD1>\r
+                       <KEYWORD1>MSPR</KEYWORD1>\r
+                       <KEYWORD1>MSPROP</KEYWORD1>\r
+                       <KEYWORD1>MSQU</KEYWORD1>\r
+                       <KEYWORD1>MSQUAD</KEYWORD1>\r
+                       <KEYWORD1>MSRE</KEYWORD1>\r
+                       <KEYWORD1>MSRELAX</KEYWORD1>\r
+                       <KEYWORD1>MSSO</KEYWORD1>\r
+                       <KEYWORD1>MSSOLU</KEYWORD1>\r
+                       <KEYWORD1>MSSP</KEYWORD1>\r
+                       <KEYWORD1>MSSPEC</KEYWORD1>\r
+                       <KEYWORD1>MSTE</KEYWORD1>\r
+                       <KEYWORD1>MSTERM</KEYWORD1>\r
+                       <KEYWORD1>MSVA</KEYWORD1>\r
+                       <KEYWORD1>MSVARY</KEYWORD1>\r
+                       <KEYWORD1>MXPA</KEYWORD1>\r
+                       <KEYWORD1>MXPAND</KEYWORD1>\r
+                       <KEYWORD1>N</KEYWORD1>\r
+                       <KEYWORD1>NANG</KEYWORD1>\r
+                       <KEYWORD1>NANG</KEYWORD1>\r
+                       <KEYWORD1>NCNV</KEYWORD1>\r
+                       <KEYWORD1>NCNV</KEYWORD1>\r
+                       <KEYWORD1>NDEL</KEYWORD1>\r
+                       <KEYWORD1>NDELE</KEYWORD1>\r
+                       <KEYWORD1>NDIS</KEYWORD1>\r
+                       <KEYWORD1>NDIST</KEYWORD1>\r
+                       <KEYWORD1>NEQI</KEYWORD1>\r
+                       <KEYWORD1>NEQIT</KEYWORD1>\r
+                       <KEYWORD1>NFOR</KEYWORD1>\r
+                       <KEYWORD1>NFORCE</KEYWORD1>\r
+                       <KEYWORD1>NGEN</KEYWORD1>\r
+                       <KEYWORD1>NGEN</KEYWORD1>\r
+                       <KEYWORD1>NKPT</KEYWORD1>\r
+                       <KEYWORD1>NKPT</KEYWORD1>\r
+                       <KEYWORD1>NLGE</KEYWORD1>\r
+                       <KEYWORD1>NLGEOM</KEYWORD1>\r
+                       <KEYWORD1>NLIS</KEYWORD1>\r
+                       <KEYWORD1>NLIST</KEYWORD1>\r
+                       <KEYWORD1>NLOG</KEYWORD1>\r
+                       <KEYWORD1>NLOG</KEYWORD1>\r
+                       <KEYWORD1>NLOP</KEYWORD1>\r
+                       <KEYWORD1>NLOPT</KEYWORD1>\r
+                       <KEYWORD1>NMOD</KEYWORD1>\r
+                       <KEYWORD1>NMODIF</KEYWORD1>\r
+                       <KEYWORD1>NOCO</KEYWORD1>\r
+                       <KEYWORD1>NOCOLOR</KEYWORD1>\r
+                       <KEYWORD1>NODE</KEYWORD1>\r
+                       <KEYWORD1>NODES</KEYWORD1>\r
+                       <KEYWORD1>NOOR</KEYWORD1>\r
+                       <KEYWORD1>NOORDER</KEYWORD1>\r
+                       <KEYWORD1>NPLO</KEYWORD1>\r
+                       <KEYWORD1>NPLOT</KEYWORD1>\r
+                       <KEYWORD1>NPRI</KEYWORD1>\r
+                       <KEYWORD1>NPRINT</KEYWORD1>\r
+                       <KEYWORD1>NREA</KEYWORD1>\r
+                       <KEYWORD1>NREAD</KEYWORD1>\r
+                       <KEYWORD1>NREF</KEYWORD1>\r
+                       <KEYWORD1>NREFINE</KEYWORD1>\r
+                       <KEYWORD1>NRLS</KEYWORD1>\r
+                       <KEYWORD1>NRLSUM</KEYWORD1>\r
+                       <KEYWORD1>NROP</KEYWORD1>\r
+                       <KEYWORD1>NROPT</KEYWORD1>\r
+                       <KEYWORD1>NROT</KEYWORD1>\r
+                       <KEYWORD1>NROTAT</KEYWORD1>\r
+                       <KEYWORD1>NRRA</KEYWORD1>\r
+                       <KEYWORD1>NRRANG</KEYWORD1>\r
+                       <KEYWORD1>NSCA</KEYWORD1>\r
+                       <KEYWORD1>NSCALE</KEYWORD1>\r
+                       <KEYWORD1>NSEL</KEYWORD1>\r
+                       <KEYWORD1>NSEL</KEYWORD1>\r
+                       <KEYWORD1>NSLA</KEYWORD1>\r
+                       <KEYWORD1>NSLA</KEYWORD1>\r
+                       <KEYWORD1>NSLE</KEYWORD1>\r
+                       <KEYWORD1>NSLE</KEYWORD1>\r
+                       <KEYWORD1>NSLK</KEYWORD1>\r
+                       <KEYWORD1>NSLK</KEYWORD1>\r
+                       <KEYWORD1>NSLL</KEYWORD1>\r
+                       <KEYWORD1>NSLL</KEYWORD1>\r
+                       <KEYWORD1>NSLV</KEYWORD1>\r
+                       <KEYWORD1>NSLV</KEYWORD1>\r
+                       <KEYWORD1>NSOL</KEYWORD1>\r
+                       <KEYWORD1>NSOL</KEYWORD1>\r
+                       <KEYWORD1>NSOR</KEYWORD1>\r
+                       <KEYWORD1>NSORT</KEYWORD1>\r
+                       <KEYWORD1>NSTO</KEYWORD1>\r
+                       <KEYWORD1>NSTORE</KEYWORD1>\r
+                       <KEYWORD1>NSUB</KEYWORD1>\r
+                       <KEYWORD1>NSUBST</KEYWORD1>\r
+                       <KEYWORD1>NSVR</KEYWORD1>\r
+                       <KEYWORD1>NSVR</KEYWORD1>\r
+                       <KEYWORD1>NSYM</KEYWORD1>\r
+                       <KEYWORD1>NSYM</KEYWORD1>\r
+                       <KEYWORD1>NUMC</KEYWORD1>\r
+                       <KEYWORD1>NUMCMP</KEYWORD1>\r
+                       <KEYWORD1>NUME</KEYWORD1>\r
+                       <KEYWORD1>NUMEXP</KEYWORD1>\r
+                       <KEYWORD1>NUMM</KEYWORD1>\r
+                       <KEYWORD1>NUMMRG</KEYWORD1>\r
+                       <KEYWORD1>NUMO</KEYWORD1>\r
+                       <KEYWORD1>NUMOFF</KEYWORD1>\r
+                       <KEYWORD1>NUMS</KEYWORD1>\r
+                       <KEYWORD1>NUMSTR</KEYWORD1>\r
+                       <KEYWORD1>NUMV</KEYWORD1>\r
+                       <KEYWORD1>NUMVAR</KEYWORD1>\r
+                       <KEYWORD1>NUSO</KEYWORD1>\r
+                       <KEYWORD1>NUSORT</KEYWORD1>\r
+                       <KEYWORD1>NWPA</KEYWORD1>\r
+                       <KEYWORD1>NWPAVE</KEYWORD1>\r
+                       <KEYWORD1>NWPL</KEYWORD1>\r
+                       <KEYWORD1>NWPLAN</KEYWORD1>\r
+                       <KEYWORD1>NWRI</KEYWORD1>\r
+                       <KEYWORD1>NWRITE</KEYWORD1>\r
+                       <KEYWORD1>nx</KEYWORD1>\r
+                       <KEYWORD1>ny</KEYWORD1>\r
+                       <KEYWORD1>nz</KEYWORD1>\r
+                       <KEYWORD1>OMEG</KEYWORD1>\r
+                       <KEYWORD1>OMEGA</KEYWORD1>\r
+                       <KEYWORD1>OPAD</KEYWORD1>\r
+                       <KEYWORD1>OPADD</KEYWORD1>\r
+                       <KEYWORD1>OPAN</KEYWORD1>\r
+                       <KEYWORD1>OPANL</KEYWORD1>\r
+                       <KEYWORD1>OPCL</KEYWORD1>\r
+                       <KEYWORD1>OPCLR</KEYWORD1>\r
+                       <KEYWORD1>OPDA</KEYWORD1>\r
+                       <KEYWORD1>OPDATA</KEYWORD1>\r
+                       <KEYWORD1>OPDE</KEYWORD1>\r
+                       <KEYWORD1>OPDEL</KEYWORD1>\r
+                       <KEYWORD1>OPEQ</KEYWORD1>\r
+                       <KEYWORD1>OPEQN</KEYWORD1>\r
+                       <KEYWORD1>OPER</KEYWORD1>\r
+                       <KEYWORD1>OPERATE</KEYWORD1>\r
+                       <KEYWORD1>OPEX</KEYWORD1>\r
+                       <KEYWORD1>OPEXE</KEYWORD1>\r
+                       <KEYWORD1>OPFA</KEYWORD1>\r
+                       <KEYWORD1>OPFACT</KEYWORD1>\r
+                       <KEYWORD1>OPFR</KEYWORD1>\r
+                       <KEYWORD1>OPFRST</KEYWORD1>\r
+                       <KEYWORD1>OPGR</KEYWORD1>\r
+                       <KEYWORD1>OPGRAD</KEYWORD1>\r
+                       <KEYWORD1>OPKE</KEYWORD1>\r
+                       <KEYWORD1>OPKEEP</KEYWORD1>\r
+                       <KEYWORD1>OPLF</KEYWORD1>\r
+                       <KEYWORD1>OPLFA</KEYWORD1>\r
+                       <KEYWORD1>OPLG</KEYWORD1>\r
+                       <KEYWORD1>OPLGR</KEYWORD1>\r
+                       <KEYWORD1>OPLI</KEYWORD1>\r
+                       <KEYWORD1>OPLIST</KEYWORD1>\r
+                       <KEYWORD1>OPLO</KEYWORD1>\r
+                       <KEYWORD1>OPLOOP</KEYWORD1>\r
+                       <KEYWORD1>OPLS</KEYWORD1>\r
+                       <KEYWORD1>OPLSW</KEYWORD1>\r
+                       <KEYWORD1>OPMA</KEYWORD1>\r
+                       <KEYWORD1>OPMAKE</KEYWORD1>\r
+                       <KEYWORD1>OPNC</KEYWORD1>\r
+                       <KEYWORD1>OPNCONTROL</KEYWORD1>\r
+                       <KEYWORD1>OPPR</KEYWORD1>\r
+                       <KEYWORD1>OPPRNT</KEYWORD1>\r
+                       <KEYWORD1>OPRA</KEYWORD1>\r
+                       <KEYWORD1>OPRAND</KEYWORD1>\r
+                       <KEYWORD1>OPRE</KEYWORD1>\r
+                       <KEYWORD1>OPRESU</KEYWORD1>\r
+                       <KEYWORD1>OPRF</KEYWORD1>\r
+                       <KEYWORD1>OPRFA</KEYWORD1>\r
+                       <KEYWORD1>OPRG</KEYWORD1>\r
+                       <KEYWORD1>OPRGR</KEYWORD1>\r
+                       <KEYWORD1>OPRS</KEYWORD1>\r
+                       <KEYWORD1>OPRSW</KEYWORD1>\r
+                       <KEYWORD1>OPSA</KEYWORD1>\r
+                       <KEYWORD1>OPSAVE</KEYWORD1>\r
+                       <KEYWORD1>OPSE</KEYWORD1>\r
+                       <KEYWORD1>OPSEL</KEYWORD1>\r
+                       <KEYWORD1>OPSU</KEYWORD1>\r
+                       <KEYWORD1>OPSUBP</KEYWORD1>\r
+                       <KEYWORD1>OPSW</KEYWORD1>\r
+                       <KEYWORD1>OPSWEEP</KEYWORD1>\r
+                       <KEYWORD1>OPTY</KEYWORD1>\r
+                       <KEYWORD1>OPTYPE</KEYWORD1>\r
+                       <KEYWORD1>OPUS</KEYWORD1>\r
+                       <KEYWORD1>OPUSER</KEYWORD1>\r
+                       <KEYWORD1>OPVA</KEYWORD1>\r
+                       <KEYWORD1>OPVAR</KEYWORD1>\r
+                       <KEYWORD1>OUTO</KEYWORD1>\r
+                       <KEYWORD1>OUTOPT</KEYWORD1>\r
+                       <KEYWORD1>OUTP</KEYWORD1>\r
+                       <KEYWORD1>OUTPR</KEYWORD1>\r
+                       <KEYWORD1>OUTR</KEYWORD1>\r
+                       <KEYWORD1>OUTRES</KEYWORD1>\r
+                       <KEYWORD1>PADE</KEYWORD1>\r
+                       <KEYWORD1>PADELE</KEYWORD1>\r
+                       <KEYWORD1>PAGE</KEYWORD1>\r
+                       <KEYWORD1>PAGET</KEYWORD1>\r
+                       <KEYWORD1>PAPU</KEYWORD1>\r
+                       <KEYWORD1>PAPUT</KEYWORD1>\r
+                       <KEYWORD1>PARE</KEYWORD1>\r
+                       <KEYWORD1>PARESU</KEYWORD1>\r
+                       <KEYWORD1>PARR</KEYWORD1>\r
+                       <KEYWORD1>PARRES</KEYWORD1>\r
+                       <KEYWORD1>PARS</KEYWORD1>\r
+                       <KEYWORD1>PARSAV</KEYWORD1>\r
+                       <KEYWORD1>PASA</KEYWORD1>\r
+                       <KEYWORD1>PASAVE</KEYWORD1>\r
+                       <KEYWORD1>PATH</KEYWORD1>\r
+                       <KEYWORD1>PATH</KEYWORD1>\r
+                       <KEYWORD1>PCAL</KEYWORD1>\r
+                       <KEYWORD1>PCALC</KEYWORD1>\r
+                       <KEYWORD1>PCIR</KEYWORD1>\r
+                       <KEYWORD1>PCIRC</KEYWORD1>\r
+                       <KEYWORD1>PCON</KEYWORD1>\r
+                       <KEYWORD1>PCONV</KEYWORD1>\r
+                       <KEYWORD1>PCOR</KEYWORD1>\r
+                       <KEYWORD1>PCORRO</KEYWORD1>\r
+                       <KEYWORD1>PCRO</KEYWORD1>\r
+                       <KEYWORD1>PCROSS</KEYWORD1>\r
+                       <KEYWORD1>PDEF</KEYWORD1>\r
+                       <KEYWORD1>PDEF</KEYWORD1>\r
+                       <KEYWORD1>PDOT</KEYWORD1>\r
+                       <KEYWORD1>PDOT</KEYWORD1>\r
+                       <KEYWORD1>PDRA</KEYWORD1>\r
+                       <KEYWORD1>PDRAG</KEYWORD1>\r
+                       <KEYWORD1>PERB</KEYWORD1>\r
+                       <KEYWORD1>PERBC2D</KEYWORD1>\r
+                       <KEYWORD1>PEXC</KEYWORD1>\r
+                       <KEYWORD1>PEXCLUDE</KEYWORD1>\r
+                       <KEYWORD1>PFAC</KEYWORD1>\r
+                       <KEYWORD1>PFACT</KEYWORD1>\r
+                       <KEYWORD1>PFLU</KEYWORD1>\r
+                       <KEYWORD1>PFLUID</KEYWORD1>\r
+                       <KEYWORD1>PGAP</KEYWORD1>\r
+                       <KEYWORD1>PGAP</KEYWORD1>\r
+                       <KEYWORD1>PHYS</KEYWORD1>\r
+                       <KEYWORD1>PHYSICS</KEYWORD1>\r
+                       <KEYWORD1>PINC</KEYWORD1>\r
+                       <KEYWORD1>PINCLUDE</KEYWORD1>\r
+                       <KEYWORD1>PINS</KEYWORD1>\r
+                       <KEYWORD1>PINSUL</KEYWORD1>\r
+                       <KEYWORD1>PIPE</KEYWORD1>\r
+                       <KEYWORD1>PIPE</KEYWORD1>\r
+                       <KEYWORD1>PIVC</KEYWORD1>\r
+                       <KEYWORD1>PIVCHECK</KEYWORD1>\r
+                       <KEYWORD1>PLAN</KEYWORD1>\r
+                       <KEYWORD1>PLANEWAVE</KEYWORD1>\r
+                       <KEYWORD1>PLCO</KEYWORD1>\r
+                       <KEYWORD1>PLCONV</KEYWORD1>\r
+                       <KEYWORD1>PLCP</KEYWORD1>\r
+                       <KEYWORD1>PLCPLX</KEYWORD1>\r
+                       <KEYWORD1>PLCR</KEYWORD1>\r
+                       <KEYWORD1>PLCRACK</KEYWORD1>\r
+                       <KEYWORD1>PLDI</KEYWORD1>\r
+                       <KEYWORD1>PLDISP</KEYWORD1>\r
+                       <KEYWORD1>PLES</KEYWORD1>\r
+                       <KEYWORD1>PLESOL</KEYWORD1>\r
+                       <KEYWORD1>PLET</KEYWORD1>\r
+                       <KEYWORD1>PLETAB</KEYWORD1>\r
+                       <KEYWORD1>PLF2</KEYWORD1>\r
+                       <KEYWORD1>PLF2D</KEYWORD1>\r
+                       <KEYWORD1>PLLS</KEYWORD1>\r
+                       <KEYWORD1>PLLS</KEYWORD1>\r
+                       <KEYWORD1>PLNS</KEYWORD1>\r
+                       <KEYWORD1>PLNSOL</KEYWORD1>\r
+                       <KEYWORD1>PLOT</KEYWORD1>\r
+                       <KEYWORD1>PLOT</KEYWORD1>\r
+                       <KEYWORD1>PLOT</KEYWORD1>\r
+                       <KEYWORD1>PLOTTING</KEYWORD1>\r
+                       <KEYWORD1>PLPA</KEYWORD1>\r
+                       <KEYWORD1>PLPA</KEYWORD1>\r
+                       <KEYWORD1>PLPAGM</KEYWORD1>\r
+                       <KEYWORD1>PLPATH</KEYWORD1>\r
+                       <KEYWORD1>PLSE</KEYWORD1>\r
+                       <KEYWORD1>PLSECT</KEYWORD1>\r
+                       <KEYWORD1>PLTI</KEYWORD1>\r
+                       <KEYWORD1>PLTIME</KEYWORD1>\r
+                       <KEYWORD1>PLTR</KEYWORD1>\r
+                       <KEYWORD1>PLTRAC</KEYWORD1>\r
+                       <KEYWORD1>PLVA</KEYWORD1>\r
+                       <KEYWORD1>PLVA</KEYWORD1>\r
+                       <KEYWORD1>PLVAR</KEYWORD1>\r
+                       <KEYWORD1>PLVAROPT</KEYWORD1>\r
+                       <KEYWORD1>PLVE</KEYWORD1>\r
+                       <KEYWORD1>PLVECT</KEYWORD1>\r
+                       <KEYWORD1>PMAP</KEYWORD1>\r
+                       <KEYWORD1>PMAP</KEYWORD1>\r
+                       <KEYWORD1>PMET</KEYWORD1>\r
+                       <KEYWORD1>PMETH</KEYWORD1>\r
+                       <KEYWORD1>PMGT</KEYWORD1>\r
+                       <KEYWORD1>PMGTRAN</KEYWORD1>\r
+                       <KEYWORD1>PMOP</KEYWORD1>\r
+                       <KEYWORD1>PMOPTS</KEYWORD1>\r
+                       <KEYWORD1>POIN</KEYWORD1>\r
+                       <KEYWORD1>POINT</KEYWORD1>\r
+                       <KEYWORD1>POLY</KEYWORD1>\r
+                       <KEYWORD1>POLY</KEYWORD1>\r
+                       <KEYWORD1>POPT</KEYWORD1>\r
+                       <KEYWORD1>POPT</KEYWORD1>\r
+                       <KEYWORD1>PORT</KEYWORD1>\r
+                       <KEYWORD1>PORTOPT</KEYWORD1>\r
+                       <KEYWORD1>POWE</KEYWORD1>\r
+                       <KEYWORD1>POWERH</KEYWORD1>\r
+                       <KEYWORD1>PPAT</KEYWORD1>\r
+                       <KEYWORD1>PPATH</KEYWORD1>\r
+                       <KEYWORD1>PPLO</KEYWORD1>\r
+                       <KEYWORD1>PPLOT</KEYWORD1>\r
+                       <KEYWORD1>PPRA</KEYWORD1>\r
+                       <KEYWORD1>PPRANGE</KEYWORD1>\r
+                       <KEYWORD1>PPRE</KEYWORD1>\r
+                       <KEYWORD1>PPRES</KEYWORD1>\r
+                       <KEYWORD1>PRAN</KEYWORD1>\r
+                       <KEYWORD1>PRANGE</KEYWORD1>\r
+                       <KEYWORD1>PRCO</KEYWORD1>\r
+                       <KEYWORD1>PRCONV</KEYWORD1>\r
+                       <KEYWORD1>PRCP</KEYWORD1>\r
+                       <KEYWORD1>PRCPLX</KEYWORD1>\r
+                       <KEYWORD1>PREC</KEYWORD1>\r
+                       <KEYWORD1>PRECISION</KEYWORD1>\r
+                       <KEYWORD1>PRED</KEYWORD1>\r
+                       <KEYWORD1>PRED</KEYWORD1>\r
+                       <KEYWORD1>PRER</KEYWORD1>\r
+                       <KEYWORD1>PRERR</KEYWORD1>\r
+                       <KEYWORD1>PRES</KEYWORD1>\r
+                       <KEYWORD1>PRESOL</KEYWORD1>\r
+                       <KEYWORD1>PRET</KEYWORD1>\r
+                       <KEYWORD1>PRETAB</KEYWORD1>\r
+                       <KEYWORD1>PRI2</KEYWORD1>\r
+                       <KEYWORD1>PRI2</KEYWORD1>\r
+                       <KEYWORD1>PRIM</KEYWORD1>\r
+                       <KEYWORD1>PRIM</KEYWORD1>\r
+                       <KEYWORD1>PRIN</KEYWORD1>\r
+                       <KEYWORD1>PRINT</KEYWORD1>\r
+                       <KEYWORD1>PRIS</KEYWORD1>\r
+                       <KEYWORD1>PRISM</KEYWORD1>\r
+                       <KEYWORD1>PRIT</KEYWORD1>\r
+                       <KEYWORD1>PRITER</KEYWORD1>\r
+                       <KEYWORD1>PRNL</KEYWORD1>\r
+                       <KEYWORD1>PRNLD</KEYWORD1>\r
+                       <KEYWORD1>PRNS</KEYWORD1>\r
+                       <KEYWORD1>PRNSOL</KEYWORD1>\r
+                       <KEYWORD1>PROD</KEYWORD1>\r
+                       <KEYWORD1>PROD</KEYWORD1>\r
+                       <KEYWORD1>PRPA</KEYWORD1>\r
+                       <KEYWORD1>PRPATH</KEYWORD1>\r
+                       <KEYWORD1>PRRF</KEYWORD1>\r
+                       <KEYWORD1>PRRFOR</KEYWORD1>\r
+                       <KEYWORD1>PRRS</KEYWORD1>\r
+                       <KEYWORD1>PRRSOL</KEYWORD1>\r
+                       <KEYWORD1>PRSE</KEYWORD1>\r
+                       <KEYWORD1>PRSECT</KEYWORD1>\r
+                       <KEYWORD1>PRSS</KEYWORD1>\r
+                       <KEYWORD1>PRSSOL</KEYWORD1>\r
+                       <KEYWORD1>PRTI</KEYWORD1>\r
+                       <KEYWORD1>PRTIME</KEYWORD1>\r
+                       <KEYWORD1>PRVA</KEYWORD1>\r
+                       <KEYWORD1>PRVA</KEYWORD1>\r
+                       <KEYWORD1>PRVAR</KEYWORD1>\r
+                       <KEYWORD1>PRVAROPT</KEYWORD1>\r
+                       <KEYWORD1>PRVE</KEYWORD1>\r
+                       <KEYWORD1>PRVECT</KEYWORD1>\r
+                       <KEYWORD1>PSCR</KEYWORD1>\r
+                       <KEYWORD1>PSCR</KEYWORD1>\r
+                       <KEYWORD1>PSDC</KEYWORD1>\r
+                       <KEYWORD1>PSDCOM</KEYWORD1>\r
+                       <KEYWORD1>PSDF</KEYWORD1>\r
+                       <KEYWORD1>PSDFRQ</KEYWORD1>\r
+                       <KEYWORD1>PSDR</KEYWORD1>\r
+                       <KEYWORD1>PSDRES</KEYWORD1>\r
+                       <KEYWORD1>PSDS</KEYWORD1>\r
+                       <KEYWORD1>PSDSPL</KEYWORD1>\r
+                       <KEYWORD1>PSDU</KEYWORD1>\r
+                       <KEYWORD1>PSDUNIT</KEYWORD1>\r
+                       <KEYWORD1>PSDV</KEYWORD1>\r
+                       <KEYWORD1>PSDVAL</KEYWORD1>\r
+                       <KEYWORD1>PSDW</KEYWORD1>\r
+                       <KEYWORD1>PSDWAV</KEYWORD1>\r
+                       <KEYWORD1>PSEL</KEYWORD1>\r
+                       <KEYWORD1>PSEL</KEYWORD1>\r
+                       <KEYWORD1>PSOL</KEYWORD1>\r
+                       <KEYWORD1>PSOLVE</KEYWORD1>\r
+                       <KEYWORD1>PSPE</KEYWORD1>\r
+                       <KEYWORD1>PSPEC</KEYWORD1>\r
+                       <KEYWORD1>PSPR</KEYWORD1>\r
+                       <KEYWORD1>PSPRNG</KEYWORD1>\r
+                       <KEYWORD1>PSTR</KEYWORD1>\r
+                       <KEYWORD1>PSTRES</KEYWORD1>\r
+                       <KEYWORD1>PTEM</KEYWORD1>\r
+                       <KEYWORD1>PTEMP</KEYWORD1>\r
+                       <KEYWORD1>PTXY</KEYWORD1>\r
+                       <KEYWORD1>PTXY</KEYWORD1>\r
+                       <KEYWORD1>PUNI</KEYWORD1>\r
+                       <KEYWORD1>PUNIT</KEYWORD1>\r
+                       <KEYWORD1>PVEC</KEYWORD1>\r
+                       <KEYWORD1>PVECT</KEYWORD1>\r
+                       <KEYWORD1>QDVA</KEYWORD1>\r
+                       <KEYWORD1>QDVAL</KEYWORD1>\r
+                       <KEYWORD1>QFAC</KEYWORD1>\r
+                       <KEYWORD1>QFACT</KEYWORD1>\r
+                       <KEYWORD1>QUAD</KEYWORD1>\r
+                       <KEYWORD1>QUAD</KEYWORD1>\r
+                       <KEYWORD1>QUOT</KEYWORD1>\r
+                       <KEYWORD1>QUOT</KEYWORD1>\r
+                       <KEYWORD1>R</KEYWORD1>\r
+                       <KEYWORD1>RACE</KEYWORD1>\r
+                       <KEYWORD1>RACE</KEYWORD1>\r
+                       <KEYWORD1>RALL</KEYWORD1>\r
+                       <KEYWORD1>RALL</KEYWORD1>\r
+                       <KEYWORD1>RAPP</KEYWORD1>\r
+                       <KEYWORD1>RAPPND</KEYWORD1>\r
+                       <KEYWORD1>RBE3</KEYWORD1>\r
+                       <KEYWORD1>RBE3</KEYWORD1>\r
+                       <KEYWORD1>RCON</KEYWORD1>\r
+                       <KEYWORD1>RCON</KEYWORD1>\r
+                       <KEYWORD1>RDEL</KEYWORD1>\r
+                       <KEYWORD1>RDELE</KEYWORD1>\r
+                       <KEYWORD1>REAL</KEYWORD1>\r
+                       <KEYWORD1>REAL</KEYWORD1>\r
+                       <KEYWORD1>REAL</KEYWORD1>\r
+                       <KEYWORD1>REALVAR</KEYWORD1>\r
+                       <KEYWORD1>RECT</KEYWORD1>\r
+                       <KEYWORD1>RECTNG</KEYWORD1>\r
+                       <KEYWORD1>REDU</KEYWORD1>\r
+                       <KEYWORD1>REDUCE</KEYWORD1>\r
+                       <KEYWORD1>REFL</KEYWORD1>\r
+                       <KEYWORD1>REFLCOEF</KEYWORD1>\r
+                       <KEYWORD1>REOR</KEYWORD1>\r
+                       <KEYWORD1>REORDER</KEYWORD1>\r
+                       <KEYWORD1>RESE</KEYWORD1>\r
+                       <KEYWORD1>RESET</KEYWORD1>\r
+                       <KEYWORD1>RESP</KEYWORD1>\r
+                       <KEYWORD1>RESP</KEYWORD1>\r
+                       <KEYWORD1>RESU</KEYWORD1>\r
+                       <KEYWORD1>RESUME</KEYWORD1>\r
+                       <KEYWORD1>REXP</KEYWORD1>\r
+                       <KEYWORD1>REXPORT</KEYWORD1>\r
+                       <KEYWORD1>RFIL</KEYWORD1>\r
+                       <KEYWORD1>RFILSZ</KEYWORD1>\r
+                       <KEYWORD1>RFOR</KEYWORD1>\r
+                       <KEYWORD1>RFORCE</KEYWORD1>\r
+                       <KEYWORD1>RIGI</KEYWORD1>\r
+                       <KEYWORD1>RIGID</KEYWORD1>\r
+                       <KEYWORD1>RIMP</KEYWORD1>\r
+                       <KEYWORD1>RIMPORT</KEYWORD1>\r
+                       <KEYWORD1>RITE</KEYWORD1>\r
+                       <KEYWORD1>RITER</KEYWORD1>\r
+                       <KEYWORD1>RLIS</KEYWORD1>\r
+                       <KEYWORD1>RLIST</KEYWORD1>\r
+                       <KEYWORD1>RMEM</KEYWORD1>\r
+                       <KEYWORD1>RMEMRY</KEYWORD1>\r
+                       <KEYWORD1>RMOD</KEYWORD1>\r
+                       <KEYWORD1>RMODIF</KEYWORD1>\r
+                       <KEYWORD1>RMOR</KEYWORD1>\r
+                       <KEYWORD1>RMORE</KEYWORD1>\r
+                       <KEYWORD1>ROCK</KEYWORD1>\r
+                       <KEYWORD1>ROCK</KEYWORD1>\r
+                       <KEYWORD1>RPOL</KEYWORD1>\r
+                       <KEYWORD1>RPOLY</KEYWORD1>\r
+                       <KEYWORD1>RPR4</KEYWORD1>\r
+                       <KEYWORD1>RPR4</KEYWORD1>\r
+                       <KEYWORD1>RPRI</KEYWORD1>\r
+                       <KEYWORD1>RPRISM</KEYWORD1>\r
+                       <KEYWORD1>RPSD</KEYWORD1>\r
+                       <KEYWORD1>RPSD</KEYWORD1>\r
+                       <KEYWORD1>RSPE</KEYWORD1>\r
+                       <KEYWORD1>RSPEED</KEYWORD1>\r
+                       <KEYWORD1>RSTA</KEYWORD1>\r
+                       <KEYWORD1>RSTAT</KEYWORD1>\r
+                       <KEYWORD1>RSYS</KEYWORD1>\r
+                       <KEYWORD1>RSYS</KEYWORD1>\r
+                       <KEYWORD1>RTIM</KEYWORD1>\r
+                       <KEYWORD1>RTIMST</KEYWORD1>\r
+                       <KEYWORD1>RUN</KEYWORD1>\r
+                       <KEYWORD1>RWFR</KEYWORD1>\r
+                       <KEYWORD1>RWFRNT</KEYWORD1>\r
+                       <KEYWORD1>SABS</KEYWORD1>\r
+                       <KEYWORD1>SABS</KEYWORD1>\r
+                       <KEYWORD1>SADD</KEYWORD1>\r
+                       <KEYWORD1>SADD</KEYWORD1>\r
+                       <KEYWORD1>SALL</KEYWORD1>\r
+                       <KEYWORD1>SALLOW</KEYWORD1>\r
+                       <KEYWORD1>SARP</KEYWORD1>\r
+                       <KEYWORD1>SARPLOT</KEYWORD1>\r
+                       <KEYWORD1>SAVE</KEYWORD1>\r
+                       <KEYWORD1>SAVE</KEYWORD1>\r
+                       <KEYWORD1>SBCL</KEYWORD1>\r
+                       <KEYWORD1>SBCLIST</KEYWORD1>\r
+                       <KEYWORD1>SBCT</KEYWORD1>\r
+                       <KEYWORD1>SBCTRAN</KEYWORD1>\r
+                       <KEYWORD1>SDEL</KEYWORD1>\r
+                       <KEYWORD1>SDELETE</KEYWORD1>\r
+                       <KEYWORD1>SE</KEYWORD1>\r
+                       <KEYWORD1>SECD</KEYWORD1>\r
+                       <KEYWORD1>SECDATA</KEYWORD1>\r
+                       <KEYWORD1>SECN</KEYWORD1>\r
+                       <KEYWORD1>SECNUM</KEYWORD1>\r
+                       <KEYWORD1>SECO</KEYWORD1>\r
+                       <KEYWORD1>SECOFFSET</KEYWORD1>\r
+                       <KEYWORD1>SECP</KEYWORD1>\r
+                       <KEYWORD1>SECPLOT</KEYWORD1>\r
+                       <KEYWORD1>SECR</KEYWORD1>\r
+                       <KEYWORD1>SECREAD</KEYWORD1>\r
+                       <KEYWORD1>SECT</KEYWORD1>\r
+                       <KEYWORD1>SECTYPE</KEYWORD1>\r
+                       <KEYWORD1>SECW</KEYWORD1>\r
+                       <KEYWORD1>SECWRITE</KEYWORD1>\r
+                       <KEYWORD1>SED</KEYWORD1>\r
+                       <KEYWORD1>SEDL</KEYWORD1>\r
+                       <KEYWORD1>SEDLIST</KEYWORD1>\r
+                       <KEYWORD1>SEEX</KEYWORD1>\r
+                       <KEYWORD1>SEEXP</KEYWORD1>\r
+                       <KEYWORD1>SELI</KEYWORD1>\r
+                       <KEYWORD1>SELIST</KEYWORD1>\r
+                       <KEYWORD1>SELM</KEYWORD1>\r
+                       <KEYWORD1>SELM</KEYWORD1>\r
+                       <KEYWORD1>SENE</KEYWORD1>\r
+                       <KEYWORD1>SENERGY</KEYWORD1>\r
+                       <KEYWORD1>SEOP</KEYWORD1>\r
+                       <KEYWORD1>SEOPT</KEYWORD1>\r
+                       <KEYWORD1>SESY</KEYWORD1>\r
+                       <KEYWORD1>SESYMM</KEYWORD1>\r
+                       <KEYWORD1>SET</KEYWORD1>\r
+                       <KEYWORD1>SETR</KEYWORD1>\r
+                       <KEYWORD1>SETRAN</KEYWORD1>\r
+                       <KEYWORD1>SEXP</KEYWORD1>\r
+                       <KEYWORD1>SEXP</KEYWORD1>\r
+                       <KEYWORD1>SF</KEYWORD1>\r
+                       <KEYWORD1>SFA</KEYWORD1>\r
+                       <KEYWORD1>SFAC</KEYWORD1>\r
+                       <KEYWORD1>SFACT</KEYWORD1>\r
+                       <KEYWORD1>SFAD</KEYWORD1>\r
+                       <KEYWORD1>SFADELE</KEYWORD1>\r
+                       <KEYWORD1>SFAL</KEYWORD1>\r
+                       <KEYWORD1>SFALIST</KEYWORD1>\r
+                       <KEYWORD1>SFBE</KEYWORD1>\r
+                       <KEYWORD1>SFBEAM</KEYWORD1>\r
+                       <KEYWORD1>SFCA</KEYWORD1>\r
+                       <KEYWORD1>SFCALC</KEYWORD1>\r
+                       <KEYWORD1>SFCU</KEYWORD1>\r
+                       <KEYWORD1>SFCUM</KEYWORD1>\r
+                       <KEYWORD1>SFDE</KEYWORD1>\r
+                       <KEYWORD1>SFDELE</KEYWORD1>\r
+                       <KEYWORD1>SFE</KEYWORD1>\r
+                       <KEYWORD1>SFED</KEYWORD1>\r
+                       <KEYWORD1>SFEDELE</KEYWORD1>\r
+                       <KEYWORD1>SFEL</KEYWORD1>\r
+                       <KEYWORD1>SFELIST</KEYWORD1>\r
+                       <KEYWORD1>SFFU</KEYWORD1>\r
+                       <KEYWORD1>SFFUN</KEYWORD1>\r
+                       <KEYWORD1>SFGR</KEYWORD1>\r
+                       <KEYWORD1>SFGRAD</KEYWORD1>\r
+                       <KEYWORD1>SFL</KEYWORD1>\r
+                       <KEYWORD1>SFLD</KEYWORD1>\r
+                       <KEYWORD1>SFLDELE</KEYWORD1>\r
+                       <KEYWORD1>SFLI</KEYWORD1>\r
+                       <KEYWORD1>SFLIST</KEYWORD1>\r
+                       <KEYWORD1>SFLL</KEYWORD1>\r
+                       <KEYWORD1>SFLLIST</KEYWORD1>\r
+                       <KEYWORD1>SFSC</KEYWORD1>\r
+                       <KEYWORD1>SFSCALE</KEYWORD1>\r
+                       <KEYWORD1>SFTR</KEYWORD1>\r
+                       <KEYWORD1>SFTRAN</KEYWORD1>\r
+                       <KEYWORD1>SHEL</KEYWORD1>\r
+                       <KEYWORD1>SHELL</KEYWORD1>\r
+                       <KEYWORD1>SHPP</KEYWORD1>\r
+                       <KEYWORD1>SHPP</KEYWORD1>\r
+                       <KEYWORD1>SLIS</KEYWORD1>\r
+                       <KEYWORD1>SLIST</KEYWORD1>\r
+                       <KEYWORD1>SLPP</KEYWORD1>\r
+                       <KEYWORD1>SLPPLOT</KEYWORD1>\r
+                       <KEYWORD1>SLSP</KEYWORD1>\r
+                       <KEYWORD1>SLSPLOT</KEYWORD1>\r
+                       <KEYWORD1>SMAL</KEYWORD1>\r
+                       <KEYWORD1>SMALL</KEYWORD1>\r
+                       <KEYWORD1>SMAX</KEYWORD1>\r
+                       <KEYWORD1>SMAX</KEYWORD1>\r
+                       <KEYWORD1>SMBO</KEYWORD1>\r
+                       <KEYWORD1>SMBODY</KEYWORD1>\r
+                       <KEYWORD1>SMCO</KEYWORD1>\r
+                       <KEYWORD1>SMCONS</KEYWORD1>\r
+                       <KEYWORD1>SMFO</KEYWORD1>\r
+                       <KEYWORD1>SMFOR</KEYWORD1>\r
+                       <KEYWORD1>SMIN</KEYWORD1>\r
+                       <KEYWORD1>SMIN</KEYWORD1>\r
+                       <KEYWORD1>SMRT</KEYWORD1>\r
+                       <KEYWORD1>SMRTSIZE</KEYWORD1>\r
+                       <KEYWORD1>SMSU</KEYWORD1>\r
+                       <KEYWORD1>SMSURF</KEYWORD1>\r
+                       <KEYWORD1>SMUL</KEYWORD1>\r
+                       <KEYWORD1>SMULT</KEYWORD1>\r
+                       <KEYWORD1>SOLC</KEYWORD1>\r
+                       <KEYWORD1>SOLCONTROL</KEYWORD1>\r
+                       <KEYWORD1>SOLU</KEYWORD1>\r
+                       <KEYWORD1>SOLU</KEYWORD1>\r
+                       <KEYWORD1>SOLU</KEYWORD1>\r
+                       <KEYWORD1>SOLUOPT</KEYWORD1>\r
+                       <KEYWORD1>SOLV</KEYWORD1>\r
+                       <KEYWORD1>SOLVE</KEYWORD1>\r
+                       <KEYWORD1>SORT</KEYWORD1>\r
+                       <KEYWORD1>SORT</KEYWORD1>\r
+                       <KEYWORD1>SOUR</KEYWORD1>\r
+                       <KEYWORD1>SOURCE</KEYWORD1>\r
+                       <KEYWORD1>SPAC</KEYWORD1>\r
+                       <KEYWORD1>SPACE</KEYWORD1>\r
+                       <KEYWORD1>SPAR</KEYWORD1>\r
+                       <KEYWORD1>SPARM</KEYWORD1>\r
+                       <KEYWORD1>SPEC</KEYWORD1>\r
+                       <KEYWORD1>SPEC</KEYWORD1>\r
+                       <KEYWORD1>SPH4</KEYWORD1>\r
+                       <KEYWORD1>SPH4</KEYWORD1>\r
+                       <KEYWORD1>SPH5</KEYWORD1>\r
+                       <KEYWORD1>SPH5</KEYWORD1>\r
+                       <KEYWORD1>SPHE</KEYWORD1>\r
+                       <KEYWORD1>SPHERE</KEYWORD1>\r
+                       <KEYWORD1>SPLI</KEYWORD1>\r
+                       <KEYWORD1>SPLINE</KEYWORD1>\r
+                       <KEYWORD1>SPOI</KEYWORD1>\r
+                       <KEYWORD1>SPOINT</KEYWORD1>\r
+                       <KEYWORD1>SPOP</KEYWORD1>\r
+                       <KEYWORD1>SPOPT</KEYWORD1>\r
+                       <KEYWORD1>SPRE</KEYWORD1>\r
+                       <KEYWORD1>SPREAD</KEYWORD1>\r
+                       <KEYWORD1>SPTO</KEYWORD1>\r
+                       <KEYWORD1>SPTOPT</KEYWORD1>\r
+                       <KEYWORD1>SQRT</KEYWORD1>\r
+                       <KEYWORD1>SQRT</KEYWORD1>\r
+                       <KEYWORD1>SRCS</KEYWORD1>\r
+                       <KEYWORD1>SRCS</KEYWORD1>\r
+                       <KEYWORD1>SRSS</KEYWORD1>\r
+                       <KEYWORD1>SRSS</KEYWORD1>\r
+                       <KEYWORD1>SSLN</KEYWORD1>\r
+                       <KEYWORD1>SSLN</KEYWORD1>\r
+                       <KEYWORD1>SSTI</KEYWORD1>\r
+                       <KEYWORD1>SSTIF</KEYWORD1>\r
+                       <KEYWORD1>SSUM</KEYWORD1>\r
+                       <KEYWORD1>SSUM</KEYWORD1>\r
+                       <KEYWORD1>STAT</KEYWORD1>\r
+                       <KEYWORD1>STAT</KEYWORD1>\r
+                       <KEYWORD1>STEF</KEYWORD1>\r
+                       <KEYWORD1>STEF</KEYWORD1>\r
+                       <KEYWORD1>STOR</KEYWORD1>\r
+                       <KEYWORD1>STORE</KEYWORD1>\r
+                       <KEYWORD1>SUBO</KEYWORD1>\r
+                       <KEYWORD1>SUBOPT</KEYWORD1>\r
+                       <KEYWORD1>SUBS</KEYWORD1>\r
+                       <KEYWORD1>SUBSET</KEYWORD1>\r
+                       <KEYWORD1>SUMT</KEYWORD1>\r
+                       <KEYWORD1>SUMTYPE</KEYWORD1>\r
+                       <KEYWORD1>SV</KEYWORD1>\r
+                       <KEYWORD1>SVTY</KEYWORD1>\r
+                       <KEYWORD1>SVTYP</KEYWORD1>\r
+                       <KEYWORD1>TALL</KEYWORD1>\r
+                       <KEYWORD1>TALLOW</KEYWORD1>\r
+                       <KEYWORD1>TB</KEYWORD1>\r
+                       <KEYWORD1>TBCO</KEYWORD1>\r
+                       <KEYWORD1>TBCOPY</KEYWORD1>\r
+                       <KEYWORD1>TBDA</KEYWORD1>\r
+                       <KEYWORD1>TBDATA</KEYWORD1>\r
+                       <KEYWORD1>TBDE</KEYWORD1>\r
+                       <KEYWORD1>TBDELE</KEYWORD1>\r
+                       <KEYWORD1>TBLE</KEYWORD1>\r
+                       <KEYWORD1>TBLE</KEYWORD1>\r
+                       <KEYWORD1>TBLI</KEYWORD1>\r
+                       <KEYWORD1>TBLIST</KEYWORD1>\r
+                       <KEYWORD1>TBMO</KEYWORD1>\r
+                       <KEYWORD1>TBMODIF</KEYWORD1>\r
+                       <KEYWORD1>TBPL</KEYWORD1>\r
+                       <KEYWORD1>TBPLOT</KEYWORD1>\r
+                       <KEYWORD1>TBPT</KEYWORD1>\r
+                       <KEYWORD1>TBPT</KEYWORD1>\r
+                       <KEYWORD1>TBTE</KEYWORD1>\r
+                       <KEYWORD1>TBTEMP</KEYWORD1>\r
+                       <KEYWORD1>TCHG</KEYWORD1>\r
+                       <KEYWORD1>TCHG</KEYWORD1>\r
+                       <KEYWORD1>TEE</KEYWORD1>\r
+                       <KEYWORD1>TERM</KEYWORD1>\r
+                       <KEYWORD1>TERM</KEYWORD1>\r
+                       <KEYWORD1>TIME</KEYWORD1>\r
+                       <KEYWORD1>TIME</KEYWORD1>\r
+                       <KEYWORD1>TIME</KEYWORD1>\r
+                       <KEYWORD1>TIMERANGE</KEYWORD1>\r
+                       <KEYWORD1>TIMI</KEYWORD1>\r
+                       <KEYWORD1>TIMINT</KEYWORD1>\r
+                       <KEYWORD1>TIMP</KEYWORD1>\r
+                       <KEYWORD1>TIMP</KEYWORD1>\r
+                       <KEYWORD1>TINT</KEYWORD1>\r
+                       <KEYWORD1>TINTP</KEYWORD1>\r
+                       <KEYWORD1>TOFF</KEYWORD1>\r
+                       <KEYWORD1>TOFFST</KEYWORD1>\r
+                       <KEYWORD1>TOPD</KEYWORD1>\r
+                       <KEYWORD1>TOPDEF</KEYWORD1>\r
+                       <KEYWORD1>TOPE</KEYWORD1>\r
+                       <KEYWORD1>TOPEXE</KEYWORD1>\r
+                       <KEYWORD1>TOPI</KEYWORD1>\r
+                       <KEYWORD1>TOPITER</KEYWORD1>\r
+                       <KEYWORD1>TORQ2D</KEYWORD1>\r
+                       <KEYWORD1>TORQ</KEYWORD1>\r
+                       <KEYWORD1>TORQ</KEYWORD1>\r
+                       <KEYWORD1>TORQ</KEYWORD1>\r
+                       <KEYWORD1>TORQC2D</KEYWORD1>\r
+                       <KEYWORD1>TORQSUM</KEYWORD1>\r
+                       <KEYWORD1>TORU</KEYWORD1>\r
+                       <KEYWORD1>TORUS</KEYWORD1>\r
+                       <KEYWORD1>TOTA</KEYWORD1>\r
+                       <KEYWORD1>TOTAL</KEYWORD1>\r
+                       <KEYWORD1>TRAN</KEYWORD1>\r
+                       <KEYWORD1>TRAN</KEYWORD1>\r
+                       <KEYWORD1>TRANS</KEYWORD1>\r
+                       <KEYWORD1>TRANSFER</KEYWORD1>\r
+                       <KEYWORD1>TREF</KEYWORD1>\r
+                       <KEYWORD1>TREF</KEYWORD1>\r
+                       <KEYWORD1>TRNO</KEYWORD1>\r
+                       <KEYWORD1>TRNOPT</KEYWORD1>\r
+                       <KEYWORD1>TRPD</KEYWORD1>\r
+                       <KEYWORD1>TRPDEL</KEYWORD1>\r
+                       <KEYWORD1>TRPL</KEYWORD1>\r
+                       <KEYWORD1>TRPLIS</KEYWORD1>\r
+                       <KEYWORD1>TRPO</KEYWORD1>\r
+                       <KEYWORD1>TRPOIN</KEYWORD1>\r
+                       <KEYWORD1>TRTI</KEYWORD1>\r
+                       <KEYWORD1>TRTIME</KEYWORD1>\r
+                       <KEYWORD1>TSHA</KEYWORD1>\r
+                       <KEYWORD1>TSHAP</KEYWORD1>\r
+                       <KEYWORD1>TSRE</KEYWORD1>\r
+                       <KEYWORD1>TSRES</KEYWORD1>\r
+                       <KEYWORD1>TUNI</KEYWORD1>\r
+                       <KEYWORD1>TUNIF</KEYWORD1>\r
+                       <KEYWORD1>TVAR</KEYWORD1>\r
+                       <KEYWORD1>TVAR</KEYWORD1>\r
+                       <KEYWORD1>TYPE</KEYWORD1>\r
+                       <KEYWORD1>TYPE</KEYWORD1>\r
+                       <KEYWORD1>UIMP</KEYWORD1>\r
+                       <KEYWORD1>UIMP</KEYWORD1>\r
+                       <KEYWORD1>UPCO</KEYWORD1>\r
+                       <KEYWORD1>UPCOORD</KEYWORD1>\r
+                       <KEYWORD1>UPGE</KEYWORD1>\r
+                       <KEYWORD1>UPGEOM</KEYWORD1>\r
+                       <KEYWORD1>USRC</KEYWORD1>\r
+                       <KEYWORD1>USRCAL</KEYWORD1>\r
+                       <KEYWORD1>V</KEYWORD1>\r
+                       <KEYWORD1>VA</KEYWORD1>\r
+                       <KEYWORD1>VADD</KEYWORD1>\r
+                       <KEYWORD1>VADD</KEYWORD1>\r
+                       <KEYWORD1>VALV</KEYWORD1>\r
+                       <KEYWORD1>VALVE</KEYWORD1>\r
+                       <KEYWORD1>VARD</KEYWORD1>\r
+                       <KEYWORD1>VARDEL</KEYWORD1>\r
+                       <KEYWORD1>VARN</KEYWORD1>\r
+                       <KEYWORD1>VARNAM</KEYWORD1>\r
+                       <KEYWORD1>VATT</KEYWORD1>\r
+                       <KEYWORD1>VATT</KEYWORD1>\r
+                       <KEYWORD1>VCLE</KEYWORD1>\r
+                       <KEYWORD1>VCLEAR</KEYWORD1>\r
+                       <KEYWORD1>VCRO</KEYWORD1>\r
+                       <KEYWORD1>VCROSS</KEYWORD1>\r
+                       <KEYWORD1>VCVF</KEYWORD1>\r
+                       <KEYWORD1>VCVFILL</KEYWORD1>\r
+                       <KEYWORD1>VDDA</KEYWORD1>\r
+                       <KEYWORD1>VDDAM</KEYWORD1>\r
+                       <KEYWORD1>VDEL</KEYWORD1>\r
+                       <KEYWORD1>VDELE</KEYWORD1>\r
+                       <KEYWORD1>VDGL</KEYWORD1>\r
+                       <KEYWORD1>VDGL</KEYWORD1>\r
+                       <KEYWORD1>VDOT</KEYWORD1>\r
+                       <KEYWORD1>VDOT</KEYWORD1>\r
+                       <KEYWORD1>VDRA</KEYWORD1>\r
+                       <KEYWORD1>VDRAG</KEYWORD1>\r
+                       <KEYWORD1>VEXT</KEYWORD1>\r
+                       <KEYWORD1>VEXT</KEYWORD1>\r
+                       <KEYWORD1>VGEN</KEYWORD1>\r
+                       <KEYWORD1>VGEN</KEYWORD1>\r
+                       <KEYWORD1>VGET</KEYWORD1>\r
+                       <KEYWORD1>VGET</KEYWORD1>\r
+                       <KEYWORD1>VGLU</KEYWORD1>\r
+                       <KEYWORD1>VGLUE</KEYWORD1>\r
+                       <KEYWORD1>VIMP</KEYWORD1>\r
+                       <KEYWORD1>VIMP</KEYWORD1>\r
+                       <KEYWORD1>VINP</KEYWORD1>\r
+                       <KEYWORD1>VINP</KEYWORD1>\r
+                       <KEYWORD1>VINV</KEYWORD1>\r
+                       <KEYWORD1>VINV</KEYWORD1>\r
+                       <KEYWORD1>VLIS</KEYWORD1>\r
+                       <KEYWORD1>VLIST</KEYWORD1>\r
+                       <KEYWORD1>VLSC</KEYWORD1>\r
+                       <KEYWORD1>VLSCALE</KEYWORD1>\r
+                       <KEYWORD1>VMES</KEYWORD1>\r
+                       <KEYWORD1>VMESH</KEYWORD1>\r
+                       <KEYWORD1>VOFF</KEYWORD1>\r
+                       <KEYWORD1>VOFFST</KEYWORD1>\r
+                       <KEYWORD1>VOLU</KEYWORD1>\r
+                       <KEYWORD1>VOLUMES</KEYWORD1>\r
+                       <KEYWORD1>VOVL</KEYWORD1>\r
+                       <KEYWORD1>VOVLAP</KEYWORD1>\r
+                       <KEYWORD1>VPLO</KEYWORD1>\r
+                       <KEYWORD1>VPLOT</KEYWORD1>\r
+                       <KEYWORD1>VPTN</KEYWORD1>\r
+                       <KEYWORD1>VPTN</KEYWORD1>\r
+                       <KEYWORD1>VPUT</KEYWORD1>\r
+                       <KEYWORD1>VPUT</KEYWORD1>\r
+                       <KEYWORD1>VROT</KEYWORD1>\r
+                       <KEYWORD1>VROTAT</KEYWORD1>\r
+                       <KEYWORD1>VSBA</KEYWORD1>\r
+                       <KEYWORD1>VSBA</KEYWORD1>\r
+                       <KEYWORD1>VSBV</KEYWORD1>\r
+                       <KEYWORD1>VSBV</KEYWORD1>\r
+                       <KEYWORD1>VSBW</KEYWORD1>\r
+                       <KEYWORD1>VSBW</KEYWORD1>\r
+                       <KEYWORD1>VSEL</KEYWORD1>\r
+                       <KEYWORD1>VSEL</KEYWORD1>\r
+                       <KEYWORD1>VSLA</KEYWORD1>\r
+                       <KEYWORD1>VSLA</KEYWORD1>\r
+                       <KEYWORD1>VSUM</KEYWORD1>\r
+                       <KEYWORD1>VSUM</KEYWORD1>\r
+                       <KEYWORD1>VSWE</KEYWORD1>\r
+                       <KEYWORD1>VSWEEP</KEYWORD1>\r
+                       <KEYWORD1>VSYM</KEYWORD1>\r
+                       <KEYWORD1>VSYMM</KEYWORD1>\r
+                       <KEYWORD1>VTRA</KEYWORD1>\r
+                       <KEYWORD1>VTRAN</KEYWORD1>\r
+                       <KEYWORD1>VTYP</KEYWORD1>\r
+                       <KEYWORD1>VTYPE</KEYWORD1>\r
+                       <KEYWORD1>WAVE</KEYWORD1>\r
+                       <KEYWORD1>WAVES</KEYWORD1>\r
+                       <KEYWORD1>WERA</KEYWORD1>\r
+                       <KEYWORD1>WERASE</KEYWORD1>\r
+                       <KEYWORD1>WFRO</KEYWORD1>\r
+                       <KEYWORD1>WFRONT</KEYWORD1>\r
+                       <KEYWORD1>WMOR</KEYWORD1>\r
+                       <KEYWORD1>WMORE</KEYWORD1>\r
+                       <KEYWORD1>WPAV</KEYWORD1>\r
+                       <KEYWORD1>WPAVE</KEYWORD1>\r
+                       <KEYWORD1>WPCS</KEYWORD1>\r
+                       <KEYWORD1>WPCSYS</KEYWORD1>\r
+                       <KEYWORD1>WPLA</KEYWORD1>\r
+                       <KEYWORD1>WPLANE</KEYWORD1>\r
+                       <KEYWORD1>WPOF</KEYWORD1>\r
+                       <KEYWORD1>WPOFFS</KEYWORD1>\r
+                       <KEYWORD1>WPRO</KEYWORD1>\r
+                       <KEYWORD1>WPROTA</KEYWORD1>\r
+                       <KEYWORD1>WPST</KEYWORD1>\r
+                       <KEYWORD1>WPSTYL</KEYWORD1>\r
+                       <KEYWORD1>WRIT</KEYWORD1>\r
+                       <KEYWORD1>WRITE</KEYWORD1>\r
+                       <KEYWORD1>WSOR</KEYWORD1>\r
+                       <KEYWORD1>WSORT</KEYWORD1>\r
+                       <KEYWORD1>WSTA</KEYWORD1>\r
+                       <KEYWORD1>WSTART</KEYWORD1>\r
+                       <KEYWORD1>XVAR</KEYWORD1>\r
+                       <KEYWORD1>XVAR</KEYWORD1>\r
+                       <KEYWORD1>XVAROPT</KEYWORD1>\r
+\r
+<!--           Material properties (short notation)    -->                     \r
+\r
+                       <KEYWORD1>ex</KEYWORD1>\r
+                       <KEYWORD1>ey</KEYWORD1>\r
+                       <KEYWORD1>ez</KEYWORD1>\r
+                       <KEYWORD1>nuxy</KEYWORD1>\r
+                       <KEYWORD1>nuxz</KEYWORD1>\r
+                       <KEYWORD1>nuyz</KEYWORD1>\r
+                       <KEYWORD1>gxy</KEYWORD1>\r
+                       <KEYWORD1>gxz</KEYWORD1>\r
+                       <KEYWORD1>gyz</KEYWORD1>\r
+                       <KEYWORD1>alpx</KEYWORD1>\r
+                       <KEYWORD1>alpy</KEYWORD1>\r
+                       <KEYWORD1>alpz</KEYWORD1>\r
+                       <KEYWORD1>kxx</KEYWORD1>\r
+                       <KEYWORD1>kyy</KEYWORD1>\r
+                       <KEYWORD1>kzz</KEYWORD1>\r
+                       <KEYWORD1>dens</KEYWORD1>\r
+                       <KEYWORD1>damp</KEYWORD1>\r
+                       <KEYWORD1>mu</KEYWORD1>\r
+                       <KEYWORD1>prxy</KEYWORD1>\r
+\r
+<!--           *get functions (abbreviated)    -->                     \r
+\r
+                       <KEYWORD2>ANGLEK</KEYWORD2>\r
+                       <KEYWORD2>ANGLEN</KEYWORD2>\r
+                       <KEYWORD2>AREAKP</KEYWORD2>\r
+                       <KEYWORD2>AREAND</KEYWORD2>\r
+                       <KEYWORD2>ARFACE</KEYWORD2>\r
+                       <KEYWORD2>ARNEXT</KEYWORD2>\r
+                       <KEYWORD2>ARNODE</KEYWORD2>\r
+                       <KEYWORD2>AX</KEYWORD2>\r
+                       <KEYWORD2>AY</KEYWORD2>\r
+                       <KEYWORD2>AZ</KEYWORD2>\r
+                       <KEYWORD2>CENTRX</KEYWORD2>\r
+                       <KEYWORD2>CENTRY</KEYWORD2>\r
+                       <KEYWORD2>CENTRZ</KEYWORD2>\r
+                       <KEYWORD2>DISTEN</KEYWORD2>\r
+                       <KEYWORD2>DISTKP</KEYWORD2>\r
+                       <KEYWORD2>DISTND</KEYWORD2>\r
+                       <KEYWORD2>ELADJ</KEYWORD2>\r
+                       <KEYWORD2>ELNEXT</KEYWORD2>\r
+                       <KEYWORD2>ENDS</KEYWORD2>\r
+                       <KEYWORD2>ENEARN</KEYWORD2>\r
+                       <KEYWORD2>ENEXTN</KEYWORD2>\r
+                       <KEYWORD2>ENKE</KEYWORD2>\r
+                       <KEYWORD2>KNEAR</KEYWORD2>\r
+                       <KEYWORD2>KP</KEYWORD2>\r
+                       <KEYWORD2>KPNEXT</KEYWORD2>\r
+                       <KEYWORD2>KX</KEYWORD2>\r
+                       <KEYWORD2>KY</KEYWORD2>\r
+                       <KEYWORD2>KZ</KEYWORD2>\r
+                       <KEYWORD2>LOC</KEYWORD2>\r
+                       <KEYWORD2>LSNEXT</KEYWORD2>\r
+                       <KEYWORD2>LSX</KEYWORD2>\r
+                       <KEYWORD2>LSY</KEYWORD2>\r
+                       <KEYWORD2>LSZ</KEYWORD2>\r
+                       <KEYWORD2>LX</KEYWORD2>\r
+                       <KEYWORD2>LY</KEYWORD2>\r
+                       <KEYWORD2>LZ</KEYWORD2>\r
+                       <KEYWORD2>MAG</KEYWORD2>\r
+                       <KEYWORD2>NDFACE</KEYWORD2>\r
+                       <KEYWORD2>NDNEXT</KEYWORD2>\r
+                       <KEYWORD2>NELEM</KEYWORD2>\r
+                       <KEYWORD2>NMFACE</KEYWORD2>\r
+                       <KEYWORD2>NNEAR</KEYWORD2>\r
+                       <KEYWORD2>NODE</KEYWORD2>\r
+                       <KEYWORD2>NORMKX</KEYWORD2>\r
+                       <KEYWORD2>NORMKY</KEYWORD2>\r
+                       <KEYWORD2>NORMKZ</KEYWORD2>\r
+                       <KEYWORD2>NORMNX</KEYWORD2>\r
+                       <KEYWORD2>NORMNY</KEYWORD2>\r
+                       <KEYWORD2>NORMNZ</KEYWORD2>\r
+                       <KEYWORD2>NX</KEYWORD2>\r
+                       <KEYWORD2>NY</KEYWORD2>\r
+                       <KEYWORD2>NZ</KEYWORD2>\r
+                       <KEYWORD2>PRES</KEYWORD2>\r
+                       <KEYWORD2>ROTX</KEYWORD2>\r
+                       <KEYWORD2>ROTY</KEYWORD2>\r
+                       <KEYWORD2>ROTZ</KEYWORD2>\r
+                       <KEYWORD2>TEMP</KEYWORD2>\r
+                       <KEYWORD2>UX</KEYWORD2>\r
+                       <KEYWORD2>UY</KEYWORD2>\r
+                       <KEYWORD2>UZ</KEYWORD2>\r
+                       <KEYWORD2>VLNEXT</KEYWORD2>\r
+                       <KEYWORD2>VOLT</KEYWORD2>\r
+                       <KEYWORD2>VX</KEYWORD2>\r
+                       <KEYWORD2>VY</KEYWORD2>\r
+                       <KEYWORD2>VZ</KEYWORD2>\r
+\r
+                       <!-- [Keywords 3] -->\r
+                       <!-- command option labels -->\r
+\r
+                       <!-- AADD command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- *ABBRES command -->\r
+                       <KEYWORD3>new</KEYWORD3>\r
+                       <KEYWORD3>change</KEYWORD3>\r
+\r
+                       <!-- *AFUN command -->\r
+                       <KEYWORD3>rad</KEYWORD3>\r
+                       <KEYWORD3>deg</KEYWORD3>\r
+\r
+                       <!-- ALIST command -->\r
+                       <KEYWORD3>hpt</KEYWORD3>\r
+\r
+                       <!-- ALLSEL command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>below</KEYWORD3>\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>area</KEYWORD3>\r
+                       <KEYWORD3>line</KEYWORD3>\r
+                       <KEYWORD3>kp</KEYWORD3>\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>node</KEYWORD3>\r
+\r
+                       <!-- /ANFILE command -->\r
+                       <KEYWORD3>,save</KEYWORD3>\r
+                       <KEYWORD3>resume</KEYWORD3>\r
+\r
+                       <!-- /ANNOT command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>dele</KEYWORD3>\r
+                       <KEYWORD3>,save</KEYWORD3>\r
+                       <KEYWORD3>scale</KEYWORD3>\r
+                       <KEYWORD3>xorig</KEYWORD3>\r
+                       <KEYWORD3>yorig</KEYWORD3>\r
+                       <KEYWORD3>snap</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>defa</KEYWORD3>\r
+                       <KEYWORD3>refr</KEYWORD3>\r
+\r
+                       <!-- ANTYPE command -->\r
+                       <KEYWORD3>static</KEYWORD3>\r
+                       <KEYWORD3>buckle</KEYWORD3>\r
+                       <KEYWORD3>modal</KEYWORD3>\r
+                       <KEYWORD3>harmic</KEYWORD3>\r
+                       <KEYWORD3>trans</KEYWORD3>\r
+                       <KEYWORD3>substr</KEYWORD3>\r
+                       <KEYWORD3>spectr</KEYWORD3>\r
+                       <KEYWORD3>new</KEYWORD3>\r
+                       <KEYWORD3>rest</KEYWORD3>\r
+\r
+                       <!-- APLOT command -->\r
+                       <KEYWORD3>dege</KEYWORD3>\r
+\r
+                       <!-- APPEND command -->\r
+                       <KEYWORD3>first</KEYWORD3>\r
+                       <KEYWORD3>next</KEYWORD3>\r
+                       <KEYWORD3>last</KEYWORD3>\r
+                       <KEYWORD3>near</KEYWORD3>\r
+                       <KEYWORD3>list</KEYWORD3>\r
+                       <KEYWORD3>velo</KEYWORD3>\r
+                       <KEYWORD3>acel</KEYWORD3>\r
+\r
+                       <!-- ARCTRM command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>,l</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+\r
+                       <!-- AREFINE command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>smooth</KEYWORD3>\r
+                       <KEYWORD3>clean</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+\r
+                       <!-- ARSPLIT command -->\r
+                       <KEYWORD3>tight</KEYWORD3>\r
+\r
+                       <!--ARSYM command -->\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+\r
+                       <!--ASBA, ASBL, ASBV, ASBW commands -->\r
+                       <KEYWORD3>sepo</KEYWORD3>\r
+                       <KEYWORD3>delete</KEYWORD3>\r
+                       <KEYWORD3>keep</KEYWORD3>\r
+\r
+                       <!-- ASEL command -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,r</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+                       <KEYWORD3>inve</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>area</KEYWORD3>\r
+                       <KEYWORD3>ext</KEYWORD3>\r
+                       <KEYWORD3>loc</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>hpt</KEYWORD3>\r
+                       <KEYWORD3>,mat</KEYWORD3>\r
+                       <KEYWORD3>,type</KEYWORD3>\r
+                       <KEYWORD3>,real</KEYWORD3>\r
+                       <KEYWORD3>,esys</KEYWORD3>\r
+                       <KEYWORD3>acca</KEYWORD3>\r
+\r
+                       <!-- ASLL, ASLV commands -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,r</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+\r
+                       <!-- /ASSIGN command -->\r
+                       <KEYWORD3>emat</KEYWORD3>\r
+                       <KEYWORD3>esav</KEYWORD3>\r
+                       <KEYWORD3>full</KEYWORD3>\r
+                       <KEYWORD3>redm</KEYWORD3>\r
+                       <KEYWORD3>mode</KEYWORD3>\r
+                       <KEYWORD3>rdsp</KEYWORD3>\r
+                       <KEYWORD3>rfrq</KEYWORD3>\r
+                       <KEYWORD3>tri</KEYWORD3>\r
+                       <KEYWORD3>rst</KEYWORD3>\r
+                       <KEYWORD3>rth</KEYWORD3>\r
+                       <KEYWORD3>rmg</KEYWORD3>\r
+                       <KEYWORD3>erot</KEYWORD3>\r
+                       <KEYWORD3>osav</KEYWORD3>\r
+                       <KEYWORD3>rfl</KEYWORD3>\r
+                       <KEYWORD3>seld</KEYWORD3>\r
+\r
+                       <!-- ASUM command -->\r
+                       <KEYWORD3>default</KEYWORD3>\r
+                       <KEYWORD3>fine</KEYWORD3>\r
+\r
+                       <!-- AUTOTS command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- /AXLAB command -->\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+\r
+                       <!-- /BATCH command -->\r
+                       <KEYWORD3>list</KEYWORD3>\r
+\r
+                       <!-- /BEND command -->\r
+                       <KEYWORD3>lr</KEYWORD3>\r
+                       <KEYWORD3>sr</KEYWORD3>\r
+\r
+                       <!-- BF, BFA, BFADELE, BFALIST, BFCUM, BFDELE, BFE, BFECUM, BFEDELE, BFELIST, BFESCAL -->\r
+                       <!-- BFK, BFKDELE, BFKLIST, BFL, BFLDELE, BFLIST, BFLLIST, BFSCALE, BFUNIF, BFV, -->\r
+                       <!-- BFVDELE, BFVLIST commands -->\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>flue</KEYWORD3>\r
+                       <KEYWORD3>hgen</KEYWORD3>\r
+                       <KEYWORD3>js</KEYWORD3>\r
+                       <KEYWORD3>vltg</KEYWORD3>\r
+                       <KEYWORD3>mvdi</KEYWORD3>\r
+                       <KEYWORD3>chrgd</KEYWORD3>\r
+                       <KEYWORD3>forc</KEYWORD3>\r
+                       <KEYWORD3>repl</KEYWORD3>\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>igno</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+\r
+                       <!-- BIOT command -->\r
+                       <KEYWORD3>new</KEYWORD3>\r
+                       <KEYWORD3>sum</KEYWORD3>\r
+\r
+                       <!-- BOPTN command -->\r
+                       <KEYWORD3>defa</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>keep</KEYWORD3>\r
+                       <KEYWORD3>nwarn</KEYWORD3>\r
+                       <KEYWORD3>version</KEYWORD3>\r
+                       <KEYWORD3>no</KEYWORD3>\r
+                       <KEYWORD3>yes</KEYWORD3>\r
+                       <KEYWORD3>rv52</KEYWORD3>\r
+                       <KEYWORD3>rv51</KEYWORD3>\r
+\r
+                       <!-- BUCOPT command -->\r
+                       <KEYWORD3>subsp</KEYWORD3>\r
+                       <KEYWORD3>lanb</KEYWORD3>\r
+                       <KEYWORD3>reduc</KEYWORD3>\r
+\r
+                       <!-- CDREAD, CDWRITE commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>db</KEYWORD3>\r
+                       <KEYWORD3>solid</KEYWORD3>\r
+                       <KEYWORD3>comb</KEYWORD3>\r
+                       <KEYWORD3>geom</KEYWORD3>\r
+                       <KEYWORD3>cm</KEYWORD3>\r
+                       <KEYWORD3>,mat</KEYWORD3>\r
+                       <KEYWORD3>load</KEYWORD3>\r
+                       <KEYWORD3>blocked</KEYWORD3>\r
+                       <KEYWORD3>unblocked</KEYWORD3>\r
+\r
+                       <!-- CELIST command -->\r
+                       <KEYWORD3>any</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- CERIG command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>uxyz</KEYWORD3>\r
+                       <KEYWORD3>rxyz</KEYWORD3>\r
+                       <KEYWORD3>ux</KEYWORD3>\r
+                       <KEYWORD3>uy</KEYWORD3>\r
+                       <KEYWORD3>uz</KEYWORD3>\r
+                       <KEYWORD3>rotx</KEYWORD3>\r
+                       <KEYWORD3>roty</KEYWORD3>\r
+                       <KEYWORD3>rotz</KEYWORD3>\r
+\r
+                       <!-- CFOPEN command -->\r
+                       <KEYWORD3>append</KEYWORD3>\r
+\r
+                       <!-- CHECK command -->\r
+                       <KEYWORD3>,esel</KEYWORD3>\r
+                       <KEYWORD3>warn</KEYWORD3>\r
+                       <KEYWORD3>err</KEYWORD3>\r
+\r
+                       <!-- CLEAR command -->\r
+                       <KEYWORD3>start</KEYWORD3>\r
+                       <KEYWORD3>nostart</KEYWORD3>\r
+\r
+                       <!-- CLOCAL, CS, CSKP, CSWPLA commands -->\r
+                       <KEYWORD3>cart</KEYWORD3>\r
+                       <KEYWORD3>cylin</KEYWORD3>\r
+                       <KEYWORD3>sphe</KEYWORD3>\r
+                       <KEYWORD3>toro</KEYWORD3>\r
+\r
+                       <!-- CM command -->\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>area</KEYWORD3>\r
+                       <KEYWORD3>line</KEYWORD3>\r
+                       <KEYWORD3>kp</KEYWORD3>\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>node</KEYWORD3>\r
+\r
+                       <!-- CMAP command -->\r
+                       <KEYWORD3>create</KEYWORD3>\r
+\r
+                       <!-- CMEDIT command -->\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>dele</KEYWORD3>\r
+\r
+                       <!-- CMPLOT command -->\r
+                       <KEYWORD3>,n</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- CMSEL command -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,r</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+\r
+                       <!-- CNVTOL command -->\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+                       <KEYWORD3>,m</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>heat</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>flow</KEYWORD3>\r
+                       <KEYWORD3>vf</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+                       <KEYWORD3>emf</KEYWORD3>\r
+                       <KEYWORD3>curr</KEYWORD3>\r
+                       <KEYWORD3>amps</KEYWORD3>\r
+                       <KEYWORD3>curt</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>flux</KEYWORD3>\r
+                       <KEYWORD3>csg</KEYWORD3>\r
+                       <KEYWORD3>vltg</KEYWORD3>\r
+\r
+                       <!-- COLOR command -->\r
+                       <KEYWORD3>axes</KEYWORD3>\r
+                       <KEYWORD3>axnum</KEYWORD3>\r
+                       <KEYWORD3>num</KEYWORD3>\r
+                       <KEYWORD3>outl</KEYWORD3>\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>line</KEYWORD3>\r
+                       <KEYWORD3>area</KEYWORD3>\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>isurf</KEYWORD3>\r
+                       <KEYWORD3>wbak</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>sp01</KEYWORD3>\r
+                       <KEYWORD3>sp02</KEYWORD3>\r
+                       <KEYWORD3>sp03</KEYWORD3>\r
+                       <KEYWORD3>sp04</KEYWORD3>\r
+                       <KEYWORD3>sp05</KEYWORD3>\r
+                       <KEYWORD3>sp06</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>emf</KEYWORD3>\r
+                       <KEYWORD3>curr</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+                       <KEYWORD3>,m</KEYWORD3>\r
+                       <KEYWORD3>heat</KEYWORD3>\r
+                       <KEYWORD3>flow</KEYWORD3>\r
+                       <KEYWORD3>vf</KEYWORD3>\r
+                       <KEYWORD3>amps</KEYWORD3>\r
+                       <KEYWORD3>flux</KEYWORD3>\r
+                       <KEYWORD3>csg</KEYWORD3>\r
+                       <KEYWORD3>curt</KEYWORD3>\r
+                       <KEYWORD3>vltg</KEYWORD3>\r
+                       <KEYWORD3>mast</KEYWORD3>\r
+                       <KEYWORD3>,cp</KEYWORD3>\r
+                       <KEYWORD3>,ce</KEYWORD3>\r
+                       <KEYWORD3>nfor</KEYWORD3>\r
+                       <KEYWORD3>nmom</KEYWORD3>\r
+                       <KEYWORD3>rfor</KEYWORD3>\r
+                       <KEYWORD3>rmom</KEYWORD3>\r
+                       <KEYWORD3>path</KEYWORD3>\r
+                       <KEYWORD3>grbak</KEYWORD3>\r
+                       <KEYWORD3>grid</KEYWORD3>\r
+                       <KEYWORD3>axlab</KEYWORD3>\r
+                       <KEYWORD3>curve</KEYWORD3>\r
+                       <KEYWORD3>cm</KEYWORD3>\r
+                       <KEYWORD3>cntr</KEYWORD3>\r
+                       <KEYWORD3>smax</KEYWORD3>\r
+                       <KEYWORD3>smin</KEYWORD3>\r
+                       <KEYWORD3>mred</KEYWORD3>\r
+                       <KEYWORD3>cblu</KEYWORD3>\r
+                       <KEYWORD3>ygre</KEYWORD3>\r
+                       <KEYWORD3>dgra</KEYWORD3>\r
+                       <KEYWORD3>mage</KEYWORD3>\r
+                       <KEYWORD3>cyan</KEYWORD3>\r
+                       <KEYWORD3>yell</KEYWORD3>\r
+                       <KEYWORD3>lgra</KEYWORD3>\r
+                       <KEYWORD3>bmag</KEYWORD3>\r
+                       <KEYWORD3>gcya</KEYWORD3>\r
+                       <KEYWORD3>oran</KEYWORD3>\r
+                       <KEYWORD3>whit</KEYWORD3>\r
+                       <KEYWORD3>blue</KEYWORD3>\r
+                       <KEYWORD3>gree</KEYWORD3>\r
+                       <KEYWORD3>red</KEYWORD3>\r
+                       <KEYWORD3>blac</KEYWORD3>\r
+\r
+                       <!-- CONFIG command -->\r
+                       <KEYWORD3>nres</KEYWORD3>\r
+                       <KEYWORD3>nbuf</KEYWORD3>\r
+                       <KEYWORD3>nproc</KEYWORD3>\r
+                       <KEYWORD3>locfl</KEYWORD3>\r
+                       <KEYWORD3>szbio</KEYWORD3>\r
+                       <KEYWORD3>ncont</KEYWORD3>\r
+                       <KEYWORD3>order</KEYWORD3>\r
+                       <KEYWORD3>fsplit</KEYWORD3>\r
+                       <KEYWORD3>mxnd</KEYWORD3>\r
+                       <KEYWORD3>mxel</KEYWORD3>\r
+                       <KEYWORD3>mxkp</KEYWORD3>\r
+                       <KEYWORD3>mxls</KEYWORD3>\r
+                       <KEYWORD3>mxar</KEYWORD3>\r
+                       <KEYWORD3>mxvl</KEYWORD3>\r
+                       <KEYWORD3>mxrl</KEYWORD3>\r
+                       <KEYWORD3>mxcp</KEYWORD3>\r
+                       <KEYWORD3>mxce</KEYWORD3>\r
+                       <KEYWORD3>nlcontrol</KEYWORD3>\r
+\r
+                       <!-- CP command -->\r
+                       <KEYWORD3>high</KEYWORD3>\r
+                       <KEYWORD3>next</KEYWORD3>\r
+\r
+                       <!-- CPDELE, CPLIST commands -->\r
+                       <KEYWORD3>any</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- CPINTF, D, DA, DADELE, DDELE, DK, DL, DLDELE, DOF, DOFSEL, FKLIST commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>ux</KEYWORD3>\r
+                       <KEYWORD3>uy</KEYWORD3>\r
+                       <KEYWORD3>uz</KEYWORD3>\r
+                       <KEYWORD3>rotx</KEYWORD3>\r
+                       <KEYWORD3>roty</KEYWORD3>\r
+                       <KEYWORD3>rotz</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+                       <KEYWORD3>emf</KEYWORD3>\r
+                       <KEYWORD3>curr</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>ax</KEYWORD3>\r
+                       <KEYWORD3>ay</KEYWORD3>\r
+                       <KEYWORD3>az</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>sp01</KEYWORD3>\r
+                       <KEYWORD3>sp02</KEYWORD3>\r
+                       <KEYWORD3>sp03</KEYWORD3>\r
+                       <KEYWORD3>sp04</KEYWORD3>\r
+                       <KEYWORD3>sp05</KEYWORD3>\r
+                       <KEYWORD3>sp06</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>symm</KEYWORD3>\r
+                       <KEYWORD3>asym</KEYWORD3>\r
+                       <KEYWORD3>delete</KEYWORD3>\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>disp</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>en</KEYWORD3>\r
+                       <KEYWORD3>fx</KEYWORD3>\r
+                       <KEYWORD3>fy</KEYWORD3>\r
+                       <KEYWORD3>fz</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+                       <KEYWORD3>mx</KEYWORD3>\r
+                       <KEYWORD3>my</KEYWORD3>\r
+                       <KEYWORD3>mz</KEYWORD3>\r
+                       <KEYWORD3>,m</KEYWORD3>\r
+                       <KEYWORD3>forc</KEYWORD3>\r
+                       <KEYWORD3>heat</KEYWORD3>\r
+                       <KEYWORD3>flow</KEYWORD3>\r
+                       <KEYWORD3>amps</KEYWORD3>\r
+                       <KEYWORD3>chrg</KEYWORD3>\r
+                       <KEYWORD3>flux</KEYWORD3>\r
+                       <KEYWORD3>csgx</KEYWORD3>\r
+                       <KEYWORD3>csgy</KEYWORD3>\r
+                       <KEYWORD3>csgz</KEYWORD3>\r
+                       <KEYWORD3>csg</KEYWORD3>\r
+\r
+                       <!-- CQC command -->\r
+                       <KEYWORD3>disp</KEYWORD3>\r
+                       <KEYWORD3>velo</KEYWORD3>\r
+                       <KEYWORD3>acel</KEYWORD3>\r
+\r
+                       <!-- CSDELE, CSLIST commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- CUTCONTROL command -->\r
+                       <KEYWORD3>plslimit</KEYWORD3>\r
+                       <KEYWORD3>crplimit</KEYWORD3>\r
+                       <KEYWORD3>dsplimit</KEYWORD3>\r
+                       <KEYWORD3>npoint</KEYWORD3>\r
+                       <KEYWORD3>noiterpredict</KEYWORD3>\r
+\r
+                       <!-- DCUM command -->\r
+                       <KEYWORD3>repl</KEYWORD3>\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>igno</KEYWORD3>\r
+\r
+                       <!-- DEL command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>_prm</KEYWORD3>\r
+\r
+                       <!-- DELTIM command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- DESIZE command -->\r
+                       <KEYWORD3>defa</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- DESOL, DNSOL commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>xy</KEYWORD3>\r
+                       <KEYWORD3>yz</KEYWORD3>\r
+                       <KEYWORD3>zx</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>epth</KEYWORD3>\r
+                       <KEYWORD3>epsw</KEYWORD3>\r
+                       <KEYWORD3>nl</KEYWORD3>\r
+                       <KEYWORD3>sepl</KEYWORD3>\r
+                       <KEYWORD3>srat</KEYWORD3>\r
+                       <KEYWORD3>hpres</KEYWORD3>\r
+                       <KEYWORD3>epeq</KEYWORD3>\r
+                       <KEYWORD3>psv</KEYWORD3>\r
+                       <KEYWORD3>plwk</KEYWORD3>\r
+                       <KEYWORD3>tg</KEYWORD3>\r
+                       <KEYWORD3>tf</KEYWORD3>\r
+                       <KEYWORD3>pg</KEYWORD3>\r
+                       <KEYWORD3>ef</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>h</KEYWORD3>\r
+                       <KEYWORD3>b</KEYWORD3>\r
+                       <KEYWORD3>fmag</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+                       <KEYWORD3>,m</KEYWORD3>\r
+                       <KEYWORD3>heat</KEYWORD3>\r
+                       <KEYWORD3>flow</KEYWORD3>\r
+                       <KEYWORD3>amps</KEYWORD3>\r
+                       <KEYWORD3>flux</KEYWORD3>\r
+                       <KEYWORD3>vf</KEYWORD3>\r
+                       <KEYWORD3>csg</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>eqv</KEYWORD3>\r
+                       <KEYWORD3>sum</KEYWORD3>\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+                       <KEYWORD3>hflu</KEYWORD3>\r
+                       <KEYWORD3>hflm</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>pcoe</KEYWORD3>\r
+                       <KEYWORD3>ptot</KEYWORD3>\r
+                       <KEYWORD3>mach</KEYWORD3>\r
+                       <KEYWORD3>strm</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>cmuv</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>yplu</KEYWORD3>\r
+                       <KEYWORD3>tauw</KEYWORD3>\r
+\r
+                       <!-- DEVDISP command -->\r
+                       <KEYWORD3>dither</KEYWORD3>\r
+                       <KEYWORD3>font</KEYWORD3>\r
+                       <KEYWORD3>text</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- DEVICE command -->\r
+                       <KEYWORD3>vector</KEYWORD3>\r
+                       <KEYWORD3>dither</KEYWORD3>\r
+                       <KEYWORD3>anim</KEYWORD3>\r
+                       <KEYWORD3>font</KEYWORD3>\r
+                       <KEYWORD3>text</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- DIM command -->\r
+                       <KEYWORD3>array</KEYWORD3>\r
+                       <KEYWORD3>char</KEYWORD3>\r
+                       <KEYWORD3>table</KEYWORD3>\r
+                       <KEYWORD3>time</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>velocity</KEYWORD3>\r
+                       <KEYWORD3>pressure</KEYWORD3>\r
+\r
+                       <!-- /DSCALE command -->\r
+                       <KEYWORD3>auto</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>user</KEYWORD3>\r
+\r
+                       <!-- DSUM command -->\r
+                       <KEYWORD3>disp</KEYWORD3>\r
+                       <KEYWORD3>velo</KEYWORD3>\r
+                       <KEYWORD3>acel</KEYWORD3>\r
+\r
+                       <!-- DSYM command -->\r
+                       <KEYWORD3>symm</KEYWORD3>\r
+                       <KEYWORD3>asym</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+\r
+                       <!-- DUMP command -->\r
+                       <KEYWORD3>head</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- /DV3D command -->\r
+                       <KEYWORD3>anim</KEYWORD3>\r
+                       <KEYWORD3>dgen</KEYWORD3>\r
+                       <KEYWORD3>dlist</KEYWORD3>\r
+\r
+                       <!-- EDBOUND command -->\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>dele</KEYWORD3>\r
+                       <KEYWORD3>list</KEYWORD3>\r
+                       <KEYWORD3>slide</KEYWORD3>\r
+                       <KEYWORD3>cycl</KEYWORD3>\r
+\r
+                       <!-- EDCDELE, EDCGEN commands -->\r
+                       <KEYWORD3>ants</KEYWORD3>\r
+                       <KEYWORD3>assc</KEYWORD3>\r
+                       <KEYWORD3>asts</KEYWORD3>\r
+                       <KEYWORD3>drawbead</KEYWORD3>\r
+                       <KEYWORD3>ents</KEYWORD3>\r
+                       <KEYWORD3>ess</KEYWORD3>\r
+                       <KEYWORD3>ests</KEYWORD3>\r
+                       <KEYWORD3>nts</KEYWORD3>\r
+                       <KEYWORD3>osts</KEYWORD3>\r
+                       <KEYWORD3>rntr</KEYWORD3>\r
+                       <KEYWORD3>rotr</KEYWORD3>\r
+                       <KEYWORD3>se</KEYWORD3>\r
+                       <KEYWORD3>ss</KEYWORD3>\r
+                       <KEYWORD3>sts</KEYWORD3>\r
+                       <KEYWORD3>tdns</KEYWORD3>\r
+                       <KEYWORD3>tdss</KEYWORD3>\r
+                       <KEYWORD3>tnts</KEYWORD3>\r
+                       <KEYWORD3>tsts</KEYWORD3>\r
+\r
+                       <!-- EDCRB, EDCURVE, EDLCS commands -->\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>dele</KEYWORD3>\r
+                       <KEYWORD3>list</KEYWORD3>\r
+\r
+                       <!-- EDCSC command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- EDDAMP command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- EDDRELAX command -->\r
+                       <KEYWORD3>ansys</KEYWORD3>\r
+                       <KEYWORD3>dyna</KEYWORD3>\r
+\r
+                       <!-- EDELE command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- EDENERGY, EDFPLOT commands -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- EDHIST, EDIVELO commands -->\r
+                       <KEYWORD3>list</KEYWORD3>\r
+                       <KEYWORD3>dele</KEYWORD3>\r
+\r
+                       <!-- EDLDPLOT, EDLOAD command -->\r
+                       <KEYWORD3>fx</KEYWORD3>\r
+                       <KEYWORD3>fy</KEYWORD3>\r
+                       <KEYWORD3>fz</KEYWORD3>\r
+                       <KEYWORD3>mx</KEYWORD3>\r
+                       <KEYWORD3>my</KEYWORD3>\r
+                       <KEYWORD3>mz</KEYWORD3>\r
+                       <KEYWORD3>ux</KEYWORD3>\r
+                       <KEYWORD3>uy</KEYWORD3>\r
+                       <KEYWORD3>uz</KEYWORD3>\r
+                       <KEYWORD3>rotx</KEYWORD3>\r
+                       <KEYWORD3>roty</KEYWORD3>\r
+                       <KEYWORD3>rotz</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>ax</KEYWORD3>\r
+                       <KEYWORD3>ay</KEYWORD3>\r
+                       <KEYWORD3>az</KEYWORD3>\r
+                       <KEYWORD3>aclx</KEYWORD3>\r
+                       <KEYWORD3>acly</KEYWORD3>\r
+                       <KEYWORD3>aclz</KEYWORD3>\r
+                       <KEYWORD3>omgx</KEYWORD3>\r
+                       <KEYWORD3>omgy</KEYWORD3>\r
+                       <KEYWORD3>omgz</KEYWORD3>\r
+                       <KEYWORD3>press</KEYWORD3>\r
+                       <KEYWORD3>rbux</KEYWORD3>\r
+                       <KEYWORD3>rbuy</KEYWORD3>\r
+                       <KEYWORD3>rbuz</KEYWORD3>\r
+                       <KEYWORD3>rbrx</KEYWORD3>\r
+                       <KEYWORD3>rbry</KEYWORD3>\r
+                       <KEYWORD3>rbrz</KEYWORD3>\r
+                       <KEYWORD3>rbvx</KEYWORD3>\r
+                       <KEYWORD3>rbvy</KEYWORD3>\r
+                       <KEYWORD3>rbvz</KEYWORD3>\r
+                       <KEYWORD3>rbfx</KEYWORD3>\r
+                       <KEYWORD3>rbfy</KEYWORD3>\r
+                       <KEYWORD3>rbfz</KEYWORD3>\r
+                       <KEYWORD3>rbmx</KEYWORD3>\r
+                       <KEYWORD3>rbmy</KEYWORD3>\r
+                       <KEYWORD3>rbmz</KEYWORD3>\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>dele</KEYWORD3>\r
+                       <KEYWORD3>list</KEYWORD3>\r
+\r
+                       <!-- EDMP command -->\r
+                       <KEYWORD3>hgls</KEYWORD3>\r
+                       <KEYWORD3>rigid</KEYWORD3>\r
+                       <KEYWORD3>cable</KEYWORD3>\r
+                       <KEYWORD3>ortho</KEYWORD3>\r
+\r
+                       <!-- EDNROT, EDOPT commands -->\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>dele</KEYWORD3>\r
+                       <KEYWORD3>list</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>ux</KEYWORD3>\r
+                       <KEYWORD3>uy</KEYWORD3>\r
+                       <KEYWORD3>uz</KEYWORD3>\r
+                       <KEYWORD3>rotx</KEYWORD3>\r
+                       <KEYWORD3>roty</KEYWORD3>\r
+                       <KEYWORD3>rotz</KEYWORD3>\r
+                       <KEYWORD3>ansys</KEYWORD3>\r
+                       <KEYWORD3>taurus</KEYWORD3>\r
+                       <KEYWORD3>both</KEYWORD3>\r
+\r
+                       <!-- EDOUT, EDREAD commands -->\r
+                       <KEYWORD3>glstat</KEYWORD3>\r
+                       <KEYWORD3>bndout</KEYWORD3>\r
+                       <KEYWORD3>rwforc</KEYWORD3>\r
+                       <KEYWORD3>deforc</KEYWORD3>\r
+                       <KEYWORD3>,matsum</KEYWORD3>\r
+                       <KEYWORD3>ncforc</KEYWORD3>\r
+                       <KEYWORD3>rcforc</KEYWORD3>\r
+                       <KEYWORD3>defgeo</KEYWORD3>\r
+                       <KEYWORD3>spcforc</KEYWORD3>\r
+                       <KEYWORD3>swforc</KEYWORD3>\r
+                       <KEYWORD3>rbdout</KEYWORD3>\r
+                       <KEYWORD3>gceout</KEYWORD3>\r
+                       <KEYWORD3>sleout</KEYWORD3>\r
+                       <KEYWORD3>jntforc</KEYWORD3>\r
+                       <KEYWORD3>nodout</KEYWORD3>\r
+                       <KEYWORD3>elout</KEYWORD3>\r
+\r
+                       <!-- EDWELD command -->\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>dele</KEYWORD3>\r
+                       <KEYWORD3>list</KEYWORD3>\r
+\r
+                       <!-- EDWRITE command -->\r
+                       <KEYWORD3>ansys</KEYWORD3>\r
+                       <KEYWORD3>taurus</KEYWORD3>\r
+                       <KEYWORD3>both</KEYWORD3>\r
+                       <KEYWORD3>pcreate</KEYWORD3>\r
+                       <KEYWORD3>pupdate</KEYWORD3>\r
+                       <KEYWORD3>plist</KEYWORD3>\r
+\r
+                       <!-- EKILL, ELIST commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- *ELSEIF command -->\r
+                       <KEYWORD3>eq</KEYWORD3>\r
+                       <KEYWORD3>ne</KEYWORD3>\r
+                       <KEYWORD3>lt</KEYWORD3>\r
+                       <KEYWORD3>gt</KEYWORD3>\r
+                       <KEYWORD3>le</KEYWORD3>\r
+                       <KEYWORD3>ge</KEYWORD3>\r
+                       <KEYWORD3>ablt</KEYWORD3>\r
+                       <KEYWORD3>abgt</KEYWORD3>\r
+\r
+                       <!-- EMID command -->\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>remove</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>either</KEYWORD3>\r
+                       <KEYWORD3>both</KEYWORD3>\r
+\r
+                       <!-- EMODIF command -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>,mat</KEYWORD3>\r
+                       <KEYWORD3>,type</KEYWORD3>\r
+                       <KEYWORD3>,real</KEYWORD3>\r
+                       <KEYWORD3>,esys</KEYWORD3>\r
+                       <KEYWORD3>secnum</KEYWORD3>\r
+\r
+                       <!-- EMORE, EN commands -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- EMUNIT command -->\r
+                       <KEYWORD3>mks</KEYWORD3>\r
+                       <KEYWORD3>muzro</KEYWORD3>\r
+                       <KEYWORD3>epzro</KEYWORD3>\r
+\r
+                       <!-- ENGEN, ENORM, ENSYM commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- EQSLV command -->\r
+                       <KEYWORD3>front</KEYWORD3>\r
+                       <KEYWORD3>sparse</KEYWORD3>\r
+                       <KEYWORD3>jcg</KEYWORD3>\r
+                       <KEYWORD3>jcgout</KEYWORD3>\r
+                       <KEYWORD3>iccg</KEYWORD3>\r
+                       <KEYWORD3>pcg</KEYWORD3>\r
+                       <KEYWORD3>pcgout</KEYWORD3>\r
+                       <KEYWORD3>iter</KEYWORD3>\r
+\r
+                       <!-- EREFINE command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>smooth</KEYWORD3>\r
+                       <KEYWORD3>clean</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- ERESX command -->\r
+                       <KEYWORD3>defa</KEYWORD3>\r
+                       <KEYWORD3>yes</KEYWORD3>\r
+                       <KEYWORD3>no</KEYWORD3>\r
+\r
+                       <!-- ERNORM command -->\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+\r
+                       <!-- ESEL command -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,r</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+                       <KEYWORD3>inve</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>adj</KEYWORD3>\r
+                       <KEYWORD3>,type</KEYWORD3>\r
+                       <KEYWORD3>ename</KEYWORD3>\r
+                       <KEYWORD3>,mat</KEYWORD3>\r
+                       <KEYWORD3>,real</KEYWORD3>\r
+                       <KEYWORD3>,esys</KEYWORD3>\r
+                       <KEYWORD3>live</KEYWORD3>\r
+                       <KEYWORD3>layer</KEYWORD3>\r
+                       <KEYWORD3>sec</KEYWORD3>\r
+                       <KEYWORD3>pinc</KEYWORD3>\r
+                       <KEYWORD3>pexc</KEYWORD3>\r
+                       <KEYWORD3>sfe</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>conv</KEYWORD3>\r
+                       <KEYWORD3>hflux</KEYWORD3>\r
+                       <KEYWORD3>fsi</KEYWORD3>\r
+                       <KEYWORD3>impd</KEYWORD3>\r
+                       <KEYWORD3>shld</KEYWORD3>\r
+                       <KEYWORD3>mxwf</KEYWORD3>\r
+                       <KEYWORD3>chrgs</KEYWORD3>\r
+                       <KEYWORD3>inf</KEYWORD3>\r
+                       <KEYWORD3>bfe</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>flue</KEYWORD3>\r
+                       <KEYWORD3>hgen</KEYWORD3>\r
+                       <KEYWORD3>js</KEYWORD3>\r
+                       <KEYWORD3>mvdi</KEYWORD3>\r
+                       <KEYWORD3>chrgd</KEYWORD3>\r
+                       <KEYWORD3>etab</KEYWORD3>\r
+\r
+                       <!-- ESLA, ESLL, ESLN, ESLV commands -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,r</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>active</KEYWORD3>\r
+                       <KEYWORD3>inactive</KEYWORD3>\r
+                       <KEYWORD3>corner</KEYWORD3>\r
+                       <KEYWORD3>mid</KEYWORD3>\r
+\r
+                       <!-- ESOL command -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>xy</KEYWORD3>\r
+                       <KEYWORD3>yz</KEYWORD3>\r
+                       <KEYWORD3>zx</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>eqv</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>epth</KEYWORD3>\r
+                       <KEYWORD3>nl</KEYWORD3>\r
+                       <KEYWORD3>sepl</KEYWORD3>\r
+                       <KEYWORD3>srat</KEYWORD3>\r
+                       <KEYWORD3>hpres</KEYWORD3>\r
+                       <KEYWORD3>epeq</KEYWORD3>\r
+                       <KEYWORD3>psv</KEYWORD3>\r
+                       <KEYWORD3>plwk</KEYWORD3>\r
+                       <KEYWORD3>cont</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>pene</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>sfric</KEYWORD3>\r
+                       <KEYWORD3>stot</KEYWORD3>\r
+                       <KEYWORD3>slide</KEYWORD3>\r
+                       <KEYWORD3>tg</KEYWORD3>\r
+                       <KEYWORD3>sum</KEYWORD3>\r
+                       <KEYWORD3>tf</KEYWORD3>\r
+                       <KEYWORD3>pg</KEYWORD3>\r
+                       <KEYWORD3>ef</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>h</KEYWORD3>\r
+                       <KEYWORD3>b</KEYWORD3>\r
+                       <KEYWORD3>fmag</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+                       <KEYWORD3>,m</KEYWORD3>\r
+                       <KEYWORD3>heat</KEYWORD3>\r
+                       <KEYWORD3>flow</KEYWORD3>\r
+                       <KEYWORD3>amps</KEYWORD3>\r
+                       <KEYWORD3>flux</KEYWORD3>\r
+                       <KEYWORD3>vf</KEYWORD3>\r
+                       <KEYWORD3>csg</KEYWORD3>\r
+                       <KEYWORD3>sene</KEYWORD3>\r
+                       <KEYWORD3>kene</KEYWORD3>\r
+                       <KEYWORD3>jheat</KEYWORD3>\r
+                       <KEYWORD3>js</KEYWORD3>\r
+                       <KEYWORD3>jt</KEYWORD3>\r
+                       <KEYWORD3>mre</KEYWORD3>\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>bfe</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+\r
+                       <!-- ESORT command -->\r
+                       <KEYWORD3>etab</KEYWORD3>\r
+\r
+                       <!-- ESURF command -->\r
+                       <KEYWORD3>top</KEYWORD3>\r
+                       <KEYWORD3>bottom</KEYWORD3>\r
+                       <KEYWORD3>reverse</KEYWORD3>\r
+                       <KEYWORD3>tri</KEYWORD3>\r
+\r
+                       <!-- ESYM command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- ETABLE command -->\r
+                       <KEYWORD3>refl</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>eras</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>curr</KEYWORD3>\r
+                       <KEYWORD3>emf</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>sp01</KEYWORD3>\r
+                       <KEYWORD3>sp02</KEYWORD3>\r
+                       <KEYWORD3>sp03</KEYWORD3>\r
+                       <KEYWORD3>sp04</KEYWORD3>\r
+                       <KEYWORD3>sp05</KEYWORD3>\r
+                       <KEYWORD3>sp06</KEYWORD3>\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+                       <KEYWORD3>hflu</KEYWORD3>\r
+                       <KEYWORD3>hflm</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>pcoe</KEYWORD3>\r
+                       <KEYWORD3>ptot</KEYWORD3>\r
+                       <KEYWORD3>mach</KEYWORD3>\r
+                       <KEYWORD3>strm</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>yplu</KEYWORD3>\r
+                       <KEYWORD3>tauw</KEYWORD3>\r
+                       <KEYWORD3>lmd1</KEYWORD3>\r
+                       <KEYWORD3>lmd2</KEYWORD3>\r
+                       <KEYWORD3>lmd3</KEYWORD3>\r
+                       <KEYWORD3>lmd4</KEYWORD3>\r
+                       <KEYWORD3>lmd5</KEYWORD3>\r
+                       <KEYWORD3>lmd6</KEYWORD3>\r
+                       <KEYWORD3>emd1</KEYWORD3>\r
+                       <KEYWORD3>emd2</KEYWORD3>\r
+                       <KEYWORD3>emd3</KEYWORD3>\r
+                       <KEYWORD3>emd4</KEYWORD3>\r
+                       <KEYWORD3>emd5</KEYWORD3>\r
+                       <KEYWORD3>emd6</KEYWORD3>\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>xy</KEYWORD3>\r
+                       <KEYWORD3>yz</KEYWORD3>\r
+                       <KEYWORD3>zx</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>eqv</KEYWORD3>\r
+                       <KEYWORD3>epto</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>epth</KEYWORD3>\r
+                       <KEYWORD3>epsw</KEYWORD3>\r
+                       <KEYWORD3>nl</KEYWORD3>\r
+                       <KEYWORD3>sepl</KEYWORD3>\r
+                       <KEYWORD3>srat</KEYWORD3>\r
+                       <KEYWORD3>hpres</KEYWORD3>\r
+                       <KEYWORD3>epeq</KEYWORD3>\r
+                       <KEYWORD3>psv</KEYWORD3>\r
+                       <KEYWORD3>plwk</KEYWORD3>\r
+                       <KEYWORD3>tg</KEYWORD3>\r
+                       <KEYWORD3>sum</KEYWORD3>\r
+                       <KEYWORD3>tf</KEYWORD3>\r
+                       <KEYWORD3>pg</KEYWORD3>\r
+                       <KEYWORD3>ef</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>h</KEYWORD3>\r
+                       <KEYWORD3>b</KEYWORD3>\r
+                       <KEYWORD3>fmag</KEYWORD3>\r
+                       <KEYWORD3>serr</KEYWORD3>\r
+                       <KEYWORD3>sdsg</KEYWORD3>\r
+                       <KEYWORD3>terr</KEYWORD3>\r
+                       <KEYWORD3>tdsg</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+                       <KEYWORD3>,m</KEYWORD3>\r
+                       <KEYWORD3>heat</KEYWORD3>\r
+                       <KEYWORD3>flow</KEYWORD3>\r
+                       <KEYWORD3>amps</KEYWORD3>\r
+                       <KEYWORD3>flux</KEYWORD3>\r
+                       <KEYWORD3>vf</KEYWORD3>\r
+                       <KEYWORD3>csg</KEYWORD3>\r
+                       <KEYWORD3>sene</KEYWORD3>\r
+                       <KEYWORD3>aene</KEYWORD3>\r
+                       <KEYWORD3>tene</KEYWORD3>\r
+                       <KEYWORD3>kene</KEYWORD3>\r
+                       <KEYWORD3>jheat</KEYWORD3>\r
+                       <KEYWORD3>js</KEYWORD3>\r
+                       <KEYWORD3>jt</KEYWORD3>\r
+                       <KEYWORD3>mre</KEYWORD3>\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>cent</KEYWORD3>\r
+                       <KEYWORD3>bfe</KEYWORD3>\r
+                       <KEYWORD3>smisc</KEYWORD3>\r
+                       <KEYWORD3>nmisc</KEYWORD3>\r
+                       <KEYWORD3>surf</KEYWORD3>\r
+                       <KEYWORD3>cont</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>pene</KEYWORD3>\r
+                       <KEYWORD3>sfric</KEYWORD3>\r
+                       <KEYWORD3>stot</KEYWORD3>\r
+                       <KEYWORD3>slide</KEYWORD3>\r
+                       <KEYWORD3>gap</KEYWORD3>\r
+                       <KEYWORD3>topo</KEYWORD3>\r
+\r
+                       <!-- ETCHG command -->\r
+                       <KEYWORD3>eti</KEYWORD3>\r
+                       <KEYWORD3>ite</KEYWORD3>\r
+                       <KEYWORD3>tts</KEYWORD3>\r
+                       <KEYWORD3>stt</KEYWORD3>\r
+                       <KEYWORD3>mtt</KEYWORD3>\r
+                       <KEYWORD3>fts</KEYWORD3>\r
+                       <KEYWORD3>ets</KEYWORD3>\r
+\r
+                       <!-- ETDELE, ETLIST commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- EWRITE command -->\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>short</KEYWORD3>\r
+                       <KEYWORD3>long1</KEYWORD3>\r
+\r
+                       <!-- /EXIT command -->\r
+                       <KEYWORD3>model</KEYWORD3>\r
+                       <KEYWORD3>solu</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>nosave</KEYWORD3>\r
+\r
+                       <!-- /EXPAND command -->\r
+                       <KEYWORD3>rect</KEYWORD3>\r
+                       <KEYWORD3>polar</KEYWORD3>\r
+                       <KEYWORD3>modal</KEYWORD3>\r
+                       <KEYWORD3>full</KEYWORD3>\r
+                       <KEYWORD3>half</KEYWORD3>\r
+\r
+                       <!-- EXPASS command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- EXPSOL command -->\r
+                       <KEYWORD3>yes</KEYWORD3>\r
+                       <KEYWORD3>no</KEYWORD3>\r
+\r
+                       <!-- EXTOPT command -->\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>attr</KEYWORD3>\r
+                       <KEYWORD3>esize</KEYWORD3>\r
+                       <KEYWORD3>aclear</KEYWORD3>\r
+\r
+                       <!-- F, FDELE, FK, FKDELE commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>fx</KEYWORD3>\r
+                       <KEYWORD3>fy</KEYWORD3>\r
+                       <KEYWORD3>fz</KEYWORD3>\r
+                       <KEYWORD3>mx</KEYWORD3>\r
+                       <KEYWORD3>my</KEYWORD3>\r
+                       <KEYWORD3>mz</KEYWORD3>\r
+                       <KEYWORD3>heat</KEYWORD3>\r
+                       <KEYWORD3>flow</KEYWORD3>\r
+                       <KEYWORD3>amps</KEYWORD3>\r
+                       <KEYWORD3>chrg</KEYWORD3>\r
+                       <KEYWORD3>flux</KEYWORD3>\r
+                       <KEYWORD3>csgx</KEYWORD3>\r
+                       <KEYWORD3>csgy</KEYWORD3>\r
+                       <KEYWORD3>csgz</KEYWORD3>\r
+\r
+                       <!-- /FACET command -->\r
+                       <KEYWORD3>fine</KEYWORD3>\r
+                       <KEYWORD3>norml</KEYWORD3>\r
+                       <KEYWORD3>wire</KEYWORD3>\r
+\r
+                       <!-- FCUM command -->\r
+                       <KEYWORD3>repl</KEYWORD3>\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>igno</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+\r
+                       <!-- /FDELE command -->\r
+                       <KEYWORD3>emat</KEYWORD3>\r
+                       <KEYWORD3>esav</KEYWORD3>\r
+                       <KEYWORD3>full</KEYWORD3>\r
+                       <KEYWORD3>sub</KEYWORD3>\r
+                       <KEYWORD3>mode</KEYWORD3>\r
+                       <KEYWORD3>tri</KEYWORD3>\r
+                       <KEYWORD3>dsub</KEYWORD3>\r
+                       <KEYWORD3>usub</KEYWORD3>\r
+                       <KEYWORD3>osav</KEYWORD3>\r
+                       <KEYWORD3>seld</KEYWORD3>\r
+                       <KEYWORD3>keep</KEYWORD3>\r
+                       <KEYWORD3>dele</KEYWORD3>\r
+\r
+                       <!-- FELIST command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- FILL command -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- FLDATA1 command -->\r
+                       <KEYWORD3>solu</KEYWORD3>\r
+                       <KEYWORD3>flow</KEYWORD3>\r
+                       <KEYWORD3>turb</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>comp</KEYWORD3>\r
+                       <KEYWORD3>swrl</KEYWORD3>\r
+                       <KEYWORD3>tran</KEYWORD3>\r
+                       <KEYWORD3>spec</KEYWORD3>\r
+                       <KEYWORD3>true</KEYWORD3>\r
+                       <KEYWORD3>t</KEYWORD3>\r
+                       <KEYWORD3>false</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+\r
+                       <!-- FLDATA2 command -->\r
+                       <KEYWORD3>iter</KEYWORD3>\r
+                       <KEYWORD3>exec</KEYWORD3>\r
+                       <KEYWORD3>appe</KEYWORD3>\r
+                       <KEYWORD3>over</KEYWORD3>\r
+\r
+                       <!-- FLDATA3 command -->\r
+                       <KEYWORD3>term</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+\r
+                       <!-- FLDATA4 command -->\r
+                       <KEYWORD3>time</KEYWORD3>\r
+                       <KEYWORD3>step</KEYWORD3>\r
+                       <KEYWORD3>istep</KEYWORD3>\r
+                       <KEYWORD3>bc</KEYWORD3>\r
+                       <KEYWORD3>numb</KEYWORD3>\r
+                       <KEYWORD3>glob</KEYWORD3>\r
+                       <KEYWORD3>tend</KEYWORD3>\r
+                       <KEYWORD3>appe</KEYWORD3>\r
+                       <KEYWORD3>sumf</KEYWORD3>\r
+                       <KEYWORD3>over</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+\r
+                       <!-- FLDATA4A command -->\r
+                       <KEYWORD3>step</KEYWORD3>\r
+                       <KEYWORD3>appe</KEYWORD3>\r
+                       <KEYWORD3>sumf</KEYWORD3>\r
+                       <KEYWORD3>over</KEYWORD3>\r
+\r
+                       <!-- FLDATA5 command -->\r
+                       <KEYWORD3>outp</KEYWORD3>\r
+                       <KEYWORD3>sumf</KEYWORD3>\r
+                       <KEYWORD3>debg</KEYWORD3>\r
+                       <KEYWORD3>resi</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+                       <KEYWORD3>hflu</KEYWORD3>\r
+                       <KEYWORD3>hflm</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+                       <KEYWORD3>strm</KEYWORD3>\r
+                       <KEYWORD3>mach</KEYWORD3>\r
+                       <KEYWORD3>ptot</KEYWORD3>\r
+                       <KEYWORD3>pcoe</KEYWORD3>\r
+                       <KEYWORD3>yplu</KEYWORD3>\r
+                       <KEYWORD3>tauw</KEYWORD3>\r
+                       <KEYWORD3>lmd</KEYWORD3>\r
+                       <KEYWORD3>emd</KEYWORD3>\r
+\r
+                       <!-- FLDATA6 command -->\r
+                       <KEYWORD3>conv</KEYWORD3>\r
+                       <KEYWORD3>outp</KEYWORD3>\r
+                       <KEYWORD3>iter</KEYWORD3>\r
+                       <KEYWORD3>land</KEYWORD3>\r
+                       <KEYWORD3>bloc</KEYWORD3>\r
+                       <KEYWORD3>bnow</KEYWORD3>\r
+\r
+                       <!-- FLDATA7 command -->\r
+                       <KEYWORD3>prot</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+                       <KEYWORD3>constant</KEYWORD3>\r
+                       <KEYWORD3>liquid</KEYWORD3>\r
+                       <KEYWORD3>table</KEYWORD3>\r
+                       <KEYWORD3>powl</KEYWORD3>\r
+                       <KEYWORD3>carr</KEYWORD3>\r
+                       <KEYWORD3>bing</KEYWORD3>\r
+                       <KEYWORD3>usrv</KEYWORD3>\r
+                       <KEYWORD3>air</KEYWORD3>\r
+                       <KEYWORD3>air_b</KEYWORD3>\r
+                       <KEYWORD3>air-si</KEYWORD3>\r
+                       <KEYWORD3>air-si_b</KEYWORD3>\r
+                       <KEYWORD3>air-cm</KEYWORD3>\r
+                       <KEYWORD3>air-cm_b</KEYWORD3>\r
+                       <KEYWORD3>air-mm</KEYWORD3>\r
+                       <KEYWORD3>air-mm_b</KEYWORD3>\r
+                       <KEYWORD3>air-ft</KEYWORD3>\r
+                       <KEYWORD3>air-ft_b</KEYWORD3>\r
+                       <KEYWORD3>air-in</KEYWORD3>\r
+                       <KEYWORD3>air-in_b</KEYWORD3>\r
+                       <KEYWORD3>cmix</KEYWORD3>\r
+                       <KEYWORD3>user</KEYWORD3>\r
+\r
+                       <!-- FLDATA8 command -->\r
+                       <KEYWORD3>nomi</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+\r
+                       <!-- FLDATA9 command -->\r
+                       <KEYWORD3>cof1</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+\r
+                       <!-- FLDATA10 command -->\r
+                       <KEYWORD3>cof2</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+\r
+                       <!-- FLDATA11 command -->\r
+                       <KEYWORD3>cof3</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+\r
+                       <!-- FLDATA12 command -->\r
+                       <KEYWORD3>prop</KEYWORD3>\r
+                       <KEYWORD3>ivis</KEYWORD3>\r
+                       <KEYWORD3>ufrq</KEYWORD3>\r
+\r
+                       <!-- FLDATA13 command -->\r
+                       <KEYWORD3>vary</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+                       <KEYWORD3>t</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+\r
+                       <!-- FLDATA14 command -->\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>nomi</KEYWORD3>\r
+                       <KEYWORD3>bulk</KEYWORD3>\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+\r
+                       <!-- FLDATA15 command -->\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>refe</KEYWORD3>\r
+\r
+                       <!-- FLDATA16 command -->\r
+                       <KEYWORD3>bulk</KEYWORD3>\r
+                       <KEYWORD3>beta</KEYWORD3>\r
+\r
+                       <!-- FLDATA17 command -->\r
+                       <KEYWORD3>gamm</KEYWORD3>\r
+                       <KEYWORD3>comp</KEYWORD3>\r
+\r
+                       <!-- FLDATA18 command -->\r
+                       <KEYWORD3>meth</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+\r
+                       <!-- FLDATA19 command -->\r
+                       <KEYWORD3>tdma</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+\r
+                       <!-- FLDATA20 command -->\r
+                       <KEYWORD3>srch</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+\r
+                       <!-- FLDATA20A command -->\r
+                       <KEYWORD3>pgmr</KEYWORD3>\r
+                       <KEYWORD3>fill</KEYWORD3>\r
+                       <KEYWORD3>modp</KEYWORD3>\r
+\r
+                       <!-- FLDATA21 command -->\r
+                       <KEYWORD3>conv</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+\r
+                       <!-- FLDATA22 command -->\r
+                       <KEYWORD3>maxi</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+\r
+                       <!-- FLDATA23 command -->\r
+                       <KEYWORD3>delt</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+\r
+                       <!-- FLDATA24 command -->\r
+                       <KEYWORD3>turb</KEYWORD3>\r
+                       <KEYWORD3>modl</KEYWORD3>\r
+                       <KEYWORD3>rati</KEYWORD3>\r
+                       <KEYWORD3>inin</KEYWORD3>\r
+                       <KEYWORD3>insf</KEYWORD3>\r
+                       <KEYWORD3>sctk</KEYWORD3>\r
+                       <KEYWORD3>sctd</KEYWORD3>\r
+                       <KEYWORD3>cmu</KEYWORD3>\r
+                       <KEYWORD3>c1</KEYWORD3>\r
+                       <KEYWORD3>c2</KEYWORD3>\r
+                       <KEYWORD3>buc3</KEYWORD3>\r
+                       <KEYWORD3>buc4</KEYWORD3>\r
+                       <KEYWORD3>beta</KEYWORD3>\r
+                       <KEYWORD3>kapp</KEYWORD3>\r
+                       <KEYWORD3>ewll</KEYWORD3>\r
+                       <KEYWORD3>wall</KEYWORD3>\r
+                       <KEYWORD3>vand</KEYWORD3>\r
+                       <KEYWORD3>tran</KEYWORD3>\r
+                       <KEYWORD3>zels</KEYWORD3>\r
+\r
+                       <!-- FLDATA24A command -->\r
+                       <KEYWORD3>rngt</KEYWORD3>\r
+                       <KEYWORD3>sctk</KEYWORD3>\r
+                       <KEYWORD3>sctd</KEYWORD3>\r
+                       <KEYWORD3>cmu</KEYWORD3>\r
+                       <KEYWORD3>c1</KEYWORD3>\r
+                       <KEYWORD3>c2</KEYWORD3>\r
+                       <KEYWORD3>beta</KEYWORD3>\r
+                       <KEYWORD3>etai</KEYWORD3>\r
+\r
+                       <!-- FLDATA24B command -->\r
+                       <KEYWORD3>nket</KEYWORD3>\r
+                       <KEYWORD3>sctk</KEYWORD3>\r
+                       <KEYWORD3>sctd</KEYWORD3>\r
+                       <KEYWORD3>c2</KEYWORD3>\r
+                       <KEYWORD3>c1mx</KEYWORD3>\r
+\r
+                       <!-- FLDATA24C command -->\r
+                       <KEYWORD3>girt</KEYWORD3>\r
+                       <KEYWORD3>sctk</KEYWORD3>\r
+                       <KEYWORD3>sctd</KEYWORD3>\r
+                       <KEYWORD3>g0</KEYWORD3>\r
+                       <KEYWORD3>g1</KEYWORD3>\r
+                       <KEYWORD3>g2</KEYWORD3>\r
+                       <KEYWORD3>g3</KEYWORD3>\r
+                       <KEYWORD3>g4</KEYWORD3>\r
+\r
+                       <!-- FLDATA24D command -->\r
+                       <KEYWORD3>szlt</KEYWORD3>\r
+                       <KEYWORD3>sctk</KEYWORD3>\r
+                       <KEYWORD3>sctd</KEYWORD3>\r
+                       <KEYWORD3>szl1</KEYWORD3>\r
+                       <KEYWORD3>szl2</KEYWORD3>\r
+                       <KEYWORD3>szl3</KEYWORD3>\r
+\r
+                       <!-- FLDATA25 command -->\r
+                       <KEYWORD3>relx</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+\r
+                       <!-- FLDATA26 command -->\r
+                       <KEYWORD3>stab</KEYWORD3>\r
+                       <KEYWORD3>turb</KEYWORD3>\r
+                       <KEYWORD3>mome</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+\r
+                       <!-- FLDATA27 command -->\r
+                       <KEYWORD3>prin</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+\r
+                       <!-- FLDATA28 command -->\r
+                       <KEYWORD3>modr</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+                       <KEYWORD3>t</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+\r
+                       <!-- FLDATA29 command -->\r
+                       <KEYWORD3>modv</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>sp01</KEYWORD3>\r
+                       <KEYWORD3>sp02</KEYWORD3>\r
+                       <KEYWORD3>sp03</KEYWORD3>\r
+                       <KEYWORD3>sp04</KEYWORD3>\r
+                       <KEYWORD3>sp05</KEYWORD3>\r
+                       <KEYWORD3>sp06</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+                       <KEYWORD3>lmd</KEYWORD3>\r
+                       <KEYWORD3>emd</KEYWORD3>\r
+\r
+                       <!-- FLDATA30 command -->\r
+                       <KEYWORD3>quad</KEYWORD3>\r
+                       <KEYWORD3>momd</KEYWORD3>\r
+                       <KEYWORD3>moms</KEYWORD3>\r
+                       <KEYWORD3>prsd</KEYWORD3>\r
+                       <KEYWORD3>prss</KEYWORD3>\r
+                       <KEYWORD3>thrd</KEYWORD3>\r
+                       <KEYWORD3>thrs</KEYWORD3>\r
+                       <KEYWORD3>trbd</KEYWORD3>\r
+                       <KEYWORD3>trbs</KEYWORD3>\r
+\r
+                       <!-- FLDATA31 command -->\r
+                       <KEYWORD3>capp</KEYWORD3>\r
+                       <KEYWORD3>velo</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>umin</KEYWORD3>\r
+                       <KEYWORD3>umax</KEYWORD3>\r
+                       <KEYWORD3>vmin</KEYWORD3>\r
+                       <KEYWORD3>vmax</KEYWORD3>\r
+                       <KEYWORD3>wmin</KEYWORD3>\r
+                       <KEYWORD3>wmax</KEYWORD3>\r
+                       <KEYWORD3>tmin</KEYWORD3>\r
+                       <KEYWORD3>tmax</KEYWORD3>\r
+                       <KEYWORD3>pmin</KEYWORD3>\r
+                       <KEYWORD3>pmax</KEYWORD3>\r
+\r
+                       <!-- FLDATA32 command -->\r
+                       <KEYWORD3>rest</KEYWORD3>\r
+                       <KEYWORD3>nset</KEYWORD3>\r
+                       <KEYWORD3>iter</KEYWORD3>\r
+                       <KEYWORD3>lstp</KEYWORD3>\r
+                       <KEYWORD3>time</KEYWORD3>\r
+                       <KEYWORD3>rfil</KEYWORD3>\r
+                       <KEYWORD3>wfil</KEYWORD3>\r
+                       <KEYWORD3>over</KEYWORD3>\r
+                       <KEYWORD3>clear</KEYWORD3>\r
+\r
+                       <!-- FLDATA33 command -->\r
+                       <KEYWORD3>advm</KEYWORD3>\r
+                       <KEYWORD3>mome</KEYWORD3>\r
+                       <KEYWORD3>turb</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>msu</KEYWORD3>\r
+                       <KEYWORD3>supg</KEYWORD3>\r
+\r
+                       <!-- FLIST command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- FLLIST command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- FLST command -->\r
+                       <KEYWORD3>noor</KEYWORD3>\r
+                       <KEYWORD3>order</KEYWORD3>\r
+\r
+                       <!-- /FOCUS command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>auto</KEYWORD3>\r
+                       <KEYWORD3>user</KEYWORD3>\r
+\r
+                       <!-- FORCE command -->\r
+                       <KEYWORD3>total</KEYWORD3>\r
+                       <KEYWORD3>static</KEYWORD3>\r
+                       <KEYWORD3>damp</KEYWORD3>\r
+                       <KEYWORD3>inert</KEYWORD3>\r
+\r
+                       <!-- FORM command -->\r
+                       <KEYWORD3>reco</KEYWORD3>\r
+                       <KEYWORD3>ten</KEYWORD3>\r
+                       <KEYWORD3>long</KEYWORD3>\r
+\r
+                       <!-- /FORMAT command -->\r
+                       <KEYWORD3>g</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+                       <KEYWORD3>e</KEYWORD3>\r
+\r
+                       <!-- FP command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- FSLIST command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- FSUM command -->\r
+                       <KEYWORD3>rsys</KEYWORD3>\r
+\r
+                       <!-- /FTYPE command -->\r
+                       <KEYWORD3>emat</KEYWORD3>\r
+                       <KEYWORD3>esav</KEYWORD3>\r
+                       <KEYWORD3>full</KEYWORD3>\r
+                       <KEYWORD3>redm</KEYWORD3>\r
+                       <KEYWORD3>sub</KEYWORD3>\r
+                       <KEYWORD3>mode</KEYWORD3>\r
+                       <KEYWORD3>tri</KEYWORD3>\r
+                       <KEYWORD3>dsub</KEYWORD3>\r
+                       <KEYWORD3>usub</KEYWORD3>\r
+                       <KEYWORD3>erot</KEYWORD3>\r
+                       <KEYWORD3>osav</KEYWORD3>\r
+                       <KEYWORD3>seld</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>ext</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+\r
+                       <!-- GAPLIST command -->\r
+                       <KEYWORD3>open</KEYWORD3>\r
+                       <KEYWORD3>closed</KEYWORD3>\r
+\r
+                       <!-- GAPMERGE command -->\r
+                       <KEYWORD3>toler</KEYWORD3>\r
+                       <KEYWORD3>iter</KEYWORD3>\r
+\r
+                       <!-- GAPOPT command -->\r
+                       <KEYWORD3>toler</KEYWORD3>\r
+                       <KEYWORD3>oesele</KEYWORD3>\r
+                       <KEYWORD3>merge</KEYWORD3>\r
+                       <KEYWORD3>remain</KEYWORD3>\r
+\r
+                       <!-- GAPPLOT command -->\r
+                       <KEYWORD3>open</KEYWORD3>\r
+                       <KEYWORD3>closed</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- GAUGE command -->\r
+                       <KEYWORD3>tree</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+\r
+                       <!-- GCGEN command -->\r
+                       <KEYWORD3>tri</KEYWORD3>\r
+                       <KEYWORD3>bot</KEYWORD3>\r
+\r
+                       <!-- /GCMD command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- *GET command -->\r
+                       <KEYWORD3>active</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>imme</KEYWORD3>\r
+                       <KEYWORD3>menu</KEYWORD3>\r
+                       <KEYWORD3>prkey</KEYWORD3>\r
+                       <KEYWORD3>units</KEYWORD3>\r
+                       <KEYWORD3>rout</KEYWORD3>\r
+                       <KEYWORD3>time</KEYWORD3>\r
+                       <KEYWORD3>wall</KEYWORD3>\r
+                       <KEYWORD3>cpu</KEYWORD3>\r
+                       <KEYWORD3>dbase</KEYWORD3>\r
+                       <KEYWORD3>ldate</KEYWORD3>\r
+                       <KEYWORD3>dbase</KEYWORD3>\r
+                       <KEYWORD3>ltime</KEYWORD3>\r
+                       <KEYWORD3>rev</KEYWORD3>\r
+                       <KEYWORD3>title</KEYWORD3>\r
+                       <KEYWORD3>jobnam</KEYWORD3>\r
+\r
+                       <KEYWORD3>parm</KEYWORD3>\r
+                       <KEYWORD3>max</KEYWORD3>\r
+                       <KEYWORD3>basic</KEYWORD3>\r
+                       <KEYWORD3>loc</KEYWORD3>\r
+                       <KEYWORD3>,type</KEYWORD3>\r
+                       <KEYWORD3>dim</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+\r
+                       <KEYWORD3>cmd</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>nargs</KEYWORD3>\r
+                       <KEYWORD3>field</KEYWORD3>\r
+\r
+                       <KEYWORD3>comp</KEYWORD3>\r
+                       <KEYWORD3>ncomp</KEYWORD3>\r
+                       <KEYWORD3>name</KEYWORD3>\r
+                       <KEYWORD3>,type</KEYWORD3>\r
+                       <KEYWORD3>nscomp</KEYWORD3>\r
+                       <KEYWORD3>sname</KEYWORD3>\r
+\r
+                       <KEYWORD3>graph</KEYWORD3>\r
+                       <KEYWORD3>active</KEYWORD3>\r
+                       <KEYWORD3>angle</KEYWORD3>\r
+                       <KEYWORD3>contour</KEYWORD3>\r
+                       <KEYWORD3>dist</KEYWORD3>\r
+                       <KEYWORD3>dscale</KEYWORD3>\r
+                       <KEYWORD3>dmult</KEYWORD3>\r
+                       <KEYWORD3>edge</KEYWORD3>\r
+                       <KEYWORD3>focus</KEYWORD3>\r
+                       <KEYWORD3>gline</KEYWORD3>\r
+                       <KEYWORD3>mode</KEYWORD3>\r
+                       <KEYWORD3>normal</KEYWORD3>\r
+                       <KEYWORD3>range</KEYWORD3>\r
+                       <KEYWORD3>xmin</KEYWORD3>\r
+                       <KEYWORD3>ymin</KEYWORD3>\r
+                       <KEYWORD3>xmax</KEYWORD3>\r
+                       <KEYWORD3>ymax</KEYWORD3>\r
+                       <KEYWORD3>ratio</KEYWORD3>\r
+                       <KEYWORD3>sscale</KEYWORD3>\r
+                       <KEYWORD3>smult</KEYWORD3>\r
+                       <KEYWORD3>,type</KEYWORD3>\r
+                       <KEYWORD3>vcone</KEYWORD3>\r
+                       <KEYWORD3>view</KEYWORD3>\r
+                       <KEYWORD3>vscale</KEYWORD3>\r
+                       <KEYWORD3>vratio</KEYWORD3>\r
+                       <KEYWORD3>display</KEYWORD3>\r
+                       <KEYWORD3>erase</KEYWORD3>\r
+                       <KEYWORD3>ndist</KEYWORD3>\r
+                       <KEYWORD3>number</KEYWORD3>\r
+                       <KEYWORD3>plopts</KEYWORD3>\r
+                       <KEYWORD3>seg</KEYWORD3>\r
+                       <KEYWORD3>shrink</KEYWORD3>\r
+\r
+                       <KEYWORD3>active</KEYWORD3>\r
+                       <KEYWORD3>,csys</KEYWORD3>\r
+                       <KEYWORD3>,dsys</KEYWORD3>\r
+                       <KEYWORD3>,mat</KEYWORD3>\r
+                       <KEYWORD3>,type</KEYWORD3>\r
+                       <KEYWORD3>,real</KEYWORD3>\r
+                       <KEYWORD3>,esys</KEYWORD3>\r
+                       <KEYWORD3>,cp</KEYWORD3>\r
+                       <KEYWORD3>,ce</KEYWORD3>\r
+                       <KEYWORD3>wfront</KEYWORD3>\r
+                       <KEYWORD3>max</KEYWORD3>\r
+                       <KEYWORD3>rms</KEYWORD3>\r
+\r
+                       <KEYWORD3>cdsy</KEYWORD3>\r
+                       <KEYWORD3>loc</KEYWORD3>\r
+                       <KEYWORD3>ang</KEYWORD3>\r
+                       <KEYWORD3>xy</KEYWORD3>\r
+                       <KEYWORD3>yz</KEYWORD3>\r
+                       <KEYWORD3>zx</KEYWORD3>\r
+                       <KEYWORD3>attr</KEYWORD3>\r
+\r
+                       <KEYWORD3>node</KEYWORD3>\r
+                       <KEYWORD3>loc</KEYWORD3>\r
+                       <KEYWORD3>,nsel</KEYWORD3>\r
+                       <KEYWORD3>nxth</KEYWORD3>\r
+                       <KEYWORD3>nxtl</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+                       <KEYWORD3>fx</KEYWORD3>\r
+                       <KEYWORD3>mx</KEYWORD3>\r
+                       <KEYWORD3>csgx</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>ux</KEYWORD3>\r
+                       <KEYWORD3>rotx</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>ax</KEYWORD3>\r
+                       <KEYWORD3>hgen</KEYWORD3>\r
+                       <KEYWORD3>num</KEYWORD3>\r
+                       <KEYWORD3>max</KEYWORD3>\r
+                       <KEYWORD3>min</KEYWORD3>\r
+                       <KEYWORD3>count</KEYWORD3>\r
+                       <KEYWORD3>mxloc</KEYWORD3>\r
+                       <KEYWORD3>mnloc</KEYWORD3>\r
+\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>cent</KEYWORD3>\r
+                       <KEYWORD3>adj</KEYWORD3>\r
+                       <KEYWORD3>attr</KEYWORD3>\r
+                       <KEYWORD3>leng</KEYWORD3>\r
+                       <KEYWORD3>lproj</KEYWORD3>\r
+                       <KEYWORD3>area</KEYWORD3>\r
+                       <KEYWORD3>aproj</KEYWORD3>\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>,esel</KEYWORD3>\r
+                       <KEYWORD3>nxth</KEYWORD3>\r
+                       <KEYWORD3>nxtl</KEYWORD3>\r
+                       <KEYWORD3>hgen</KEYWORD3>\r
+                       <KEYWORD3>hcoe</KEYWORD3>\r
+                       <KEYWORD3>tbulk</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>shpar</KEYWORD3>\r
+                       <KEYWORD3>angd</KEYWORD3>\r
+                       <KEYWORD3>aspe</KEYWORD3>\r
+                       <KEYWORD3>jacr</KEYWORD3>\r
+                       <KEYWORD3>maxa</KEYWORD3>\r
+                       <KEYWORD3>para</KEYWORD3>\r
+                       <KEYWORD3>warp</KEYWORD3>\r
+                       <KEYWORD3>num</KEYWORD3>\r
+                       <KEYWORD3>,ksel</KEYWORD3>\r
+                       <KEYWORD3>nxth</KEYWORD3>\r
+                       <KEYWORD3>nxtl</KEYWORD3>\r
+                       <KEYWORD3>div</KEYWORD3>\r
+\r
+                       <KEYWORD3>kp</KEYWORD3>\r
+                       <KEYWORD3>ior</KEYWORD3>\r
+                       <KEYWORD3>imc</KEYWORD3>\r
+                       <KEYWORD3>irp</KEYWORD3>\r
+                       <KEYWORD3>ixv</KEYWORD3>\r
+                       <KEYWORD3>iyv</KEYWORD3>\r
+                       <KEYWORD3>izv</KEYWORD3>\r
+                       <KEYWORD3>nrelm</KEYWORD3>\r
+\r
+                       <KEYWORD3>line</KEYWORD3>\r
+                       <KEYWORD3>,lsel</KEYWORD3>\r
+\r
+                       <KEYWORD3>area</KEYWORD3>\r
+                       <KEYWORD3>,asel</KEYWORD3>\r
+                       <KEYWORD3>loop</KEYWORD3>\r
+\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>,vsel</KEYWORD3>\r
+                       <KEYWORD3>shell</KEYWORD3>\r
+\r
+                       <KEYWORD3>etyp</KEYWORD3>\r
+\r
+                       <KEYWORD3>rcon</KEYWORD3>\r
+\r
+                       <KEYWORD3>ex</KEYWORD3>\r
+                       <KEYWORD3>alpx</KEYWORD3>\r
+                       <KEYWORD3>reft</KEYWORD3>\r
+                       <KEYWORD3>prxy</KEYWORD3>\r
+                       <KEYWORD3>nuxy</KEYWORD3>\r
+                       <KEYWORD3>gxy</KEYWORD3>\r
+                       <KEYWORD3>damp</KEYWORD3>\r
+                       <KEYWORD3>mu</KEYWORD3>\r
+                       <KEYWORD3>dnes</KEYWORD3>\r
+                       <KEYWORD3>c</KEYWORD3>\r
+                       <KEYWORD3>enth</KEYWORD3>\r
+                       <KEYWORD3>kxx</KEYWORD3>\r
+                       <KEYWORD3>hf</KEYWORD3>\r
+                       <KEYWORD3>emis</KEYWORD3>\r
+                       <KEYWORD3>qrate</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>sonc</KEYWORD3>\r
+                       <KEYWORD3>rsvx</KEYWORD3>\r
+                       <KEYWORD3>perx</KEYWORD3>\r
+                       <KEYWORD3>murx</KEYWORD3>\r
+                       <KEYWORD3>mgxx</KEYWORD3>\r
+                       <KEYWORD3>lsst</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+\r
+                       <KEYWORD3>fldata</KEYWORD3>\r
+                       <KEYWORD3>flow</KEYWORD3>\r
+                       <KEYWORD3>turb</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>comp</KEYWORD3>\r
+                       <KEYWORD3>swrl</KEYWORD3>\r
+                       <KEYWORD3>tran</KEYWORD3>\r
+                       <KEYWORD3>spec</KEYWORD3>\r
+                       <KEYWORD3>exec</KEYWORD3>\r
+                       <KEYWORD3>appe</KEYWORD3>\r
+                       <KEYWORD3>over</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>step</KEYWORD3>\r
+                       <KEYWORD3>istep</KEYWORD3>\r
+                       <KEYWORD3>bc</KEYWORD3>\r
+                       <KEYWORD3>numb</KEYWORD3>\r
+                       <KEYWORD3>glob</KEYWORD3>\r
+                       <KEYWORD3>tend</KEYWORD3>\r
+                       <KEYWORD3>appe</KEYWORD3>\r
+                       <KEYWORD3>sumf</KEYWORD3>\r
+                       <KEYWORD3>over</KEYWORD3>\r
+                       <KEYWORD3>sumf</KEYWORD3>\r
+                       <KEYWORD3>debg</KEYWORD3>\r
+                       <KEYWORD3>resi</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+                       <KEYWORD3>hflu</KEYWORD3>\r
+                       <KEYWORD3>hflm</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+                       <KEYWORD3>strm</KEYWORD3>\r
+                       <KEYWORD3>mach</KEYWORD3>\r
+                       <KEYWORD3>ptot</KEYWORD3>\r
+                       <KEYWORD3>pcoe</KEYWORD3>\r
+                       <KEYWORD3>yplu</KEYWORD3>\r
+                       <KEYWORD3>tauw</KEYWORD3>\r
+                       <KEYWORD3>lmd</KEYWORD3>\r
+                       <KEYWORD3>emd</KEYWORD3>\r
+                       <KEYWORD3>outp</KEYWORD3>\r
+                       <KEYWORD3>iter</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>ivis</KEYWORD3>\r
+                       <KEYWORD3>ufrq</KEYWORD3>\r
+                       <KEYWORD3>nomi</KEYWORD3>\r
+                       <KEYWORD3>bulk</KEYWORD3>\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+                       <KEYWORD3>refe</KEYWORD3>\r
+                       <KEYWORD3>beta</KEYWORD3>\r
+                       <KEYWORD3>comp</KEYWORD3>\r
+                       <KEYWORD3>fill</KEYWORD3>\r
+                       <KEYWORD3>modp</KEYWORD3>\r
+                       <KEYWORD3>modl</KEYWORD3>\r
+                       <KEYWORD3>rati</KEYWORD3>\r
+                       <KEYWORD3>inin</KEYWORD3>\r
+                       <KEYWORD3>insf</KEYWORD3>\r
+                       <KEYWORD3>sctk</KEYWORD3>\r
+                       <KEYWORD3>sctd</KEYWORD3>\r
+                       <KEYWORD3>cmu</KEYWORD3>\r
+                       <KEYWORD3>c1</KEYWORD3>\r
+                       <KEYWORD3>c2</KEYWORD3>\r
+                       <KEYWORD3>buc3</KEYWORD3>\r
+                       <KEYWORD3>buc4</KEYWORD3>\r
+                       <KEYWORD3>beta</KEYWORD3>\r
+                       <KEYWORD3>kapp</KEYWORD3>\r
+                       <KEYWORD3>ewll</KEYWORD3>\r
+                       <KEYWORD3>wall</KEYWORD3>\r
+                       <KEYWORD3>vand</KEYWORD3>\r
+                       <KEYWORD3>tran</KEYWORD3>\r
+                       <KEYWORD3>zels</KEYWORD3>\r
+                       <KEYWORD3>sctk</KEYWORD3>\r
+                       <KEYWORD3>sctd</KEYWORD3>\r
+                       <KEYWORD3>cmu</KEYWORD3>\r
+                       <KEYWORD3>c1</KEYWORD3>\r
+                       <KEYWORD3>c2</KEYWORD3>\r
+                       <KEYWORD3>etai</KEYWORD3>\r
+                       <KEYWORD3>c1mx</KEYWORD3>\r
+                       <KEYWORD3>g0</KEYWORD3>\r
+                       <KEYWORD3>g1</KEYWORD3>\r
+                       <KEYWORD3>g2</KEYWORD3>\r
+                       <KEYWORD3>g3</KEYWORD3>\r
+                       <KEYWORD3>g4</KEYWORD3>\r
+                       <KEYWORD3>szl1</KEYWORD3>\r
+                       <KEYWORD3>szl2</KEYWORD3>\r
+                       <KEYWORD3>szl3</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>mome</KEYWORD3>\r
+                       <KEYWORD3>sp01</KEYWORD3>\r
+                       <KEYWORD3>sp02</KEYWORD3>\r
+                       <KEYWORD3>sp03</KEYWORD3>\r
+                       <KEYWORD3>sp04</KEYWORD3>\r
+                       <KEYWORD3>sp05</KEYWORD3>\r
+                       <KEYWORD3>sp06</KEYWORD3>\r
+                       <KEYWORD3>momd</KEYWORD3>\r
+                       <KEYWORD3>moms</KEYWORD3>\r
+                       <KEYWORD3>prsd</KEYWORD3>\r
+                       <KEYWORD3>prss</KEYWORD3>\r
+                       <KEYWORD3>thrd</KEYWORD3>\r
+                       <KEYWORD3>thrs</KEYWORD3>\r
+                       <KEYWORD3>trbd</KEYWORD3>\r
+                       <KEYWORD3>trbs</KEYWORD3>\r
+                       <KEYWORD3>velo</KEYWORD3>\r
+                       <KEYWORD3>umin</KEYWORD3>\r
+                       <KEYWORD3>umax</KEYWORD3>\r
+                       <KEYWORD3>vmin</KEYWORD3>\r
+                       <KEYWORD3>vmax</KEYWORD3>\r
+                       <KEYWORD3>wmin</KEYWORD3>\r
+                       <KEYWORD3>wmax</KEYWORD3>\r
+                       <KEYWORD3>tmin</KEYWORD3>\r
+                       <KEYWORD3>tmax</KEYWORD3>\r
+                       <KEYWORD3>pmin</KEYWORD3>\r
+                       <KEYWORD3>pmax</KEYWORD3>\r
+                       <KEYWORD3>nset</KEYWORD3>\r
+                       <KEYWORD3>iter</KEYWORD3>\r
+                       <KEYWORD3>lstp</KEYWORD3>\r
+                       <KEYWORD3>time</KEYWORD3>\r
+                       <KEYWORD3>rfil</KEYWORD3>\r
+                       <KEYWORD3>wfil</KEYWORD3>\r
+                       <KEYWORD3>over</KEYWORD3>\r
+                       <KEYWORD3>clear</KEYWORD3>\r
+\r
+                       <KEYWORD3>msdata</KEYWORD3>\r
+                       <KEYWORD3>spec</KEYWORD3>\r
+                       <KEYWORD3>ugas</KEYWORD3>\r
+\r
+                       <KEYWORD3>msprop</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>mdif</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+                       <KEYWORD3>nomi</KEYWORD3>\r
+                       <KEYWORD3>cof1</KEYWORD3>\r
+                       <KEYWORD3>cof2</KEYWORD3>\r
+                       <KEYWORD3>cof3</KEYWORD3>\r
+\r
+                       <KEYWORD3>msspec</KEYWORD3>\r
+                       <KEYWORD3>name</KEYWORD3>\r
+                       <KEYWORD3>molw</KEYWORD3>\r
+                       <KEYWORD3>schm</KEYWORD3>\r
+\r
+                       <KEYWORD3>msrelax</KEYWORD3>\r
+                       <KEYWORD3>conc</KEYWORD3>\r
+                       <KEYWORD3>emdi</KEYWORD3>\r
+                       <KEYWORD3>stab</KEYWORD3>\r
+\r
+                       <KEYWORD3>mssolu</KEYWORD3>\r
+                       <KEYWORD3>nswe</KEYWORD3>\r
+                       <KEYWORD3>maxi</KEYWORD3>\r
+                       <KEYWORD3>nsrc</KEYWORD3>\r
+                       <KEYWORD3>conv</KEYWORD3>\r
+                       <KEYWORD3>delt</KEYWORD3>\r
+\r
+                       <KEYWORD3>msmeth</KEYWORD3>\r
+\r
+                       <KEYWORD3>mscap</KEYWORD3>\r
+                       <KEYWORD3>key</KEYWORD3>\r
+                       <KEYWORD3>upp</KEYWORD3>\r
+                       <KEYWORD3>low</KEYWORD3>\r
+\r
+                       <KEYWORD3>msvary</KEYWORD3>\r
+\r
+                       <KEYWORD3>msnomf</KEYWORD3>\r
+\r
+                       <KEYWORD3>active</KEYWORD3>\r
+                       <KEYWORD3>anty</KEYWORD3>\r
+                       <KEYWORD3>solu</KEYWORD3>\r
+                       <KEYWORD3>dtime</KEYWORD3>\r
+                       <KEYWORD3>ncmls</KEYWORD3>\r
+                       <KEYWORD3>ncmss</KEYWORD3>\r
+                       <KEYWORD3>eqit</KEYWORD3>\r
+                       <KEYWORD3>ncmit</KEYWORD3>\r
+                       <KEYWORD3>cnvg</KEYWORD3>\r
+                       <KEYWORD3>mxdvl</KEYWORD3>\r
+                       <KEYWORD3>resfrq</KEYWORD3>\r
+                       <KEYWORD3>reseig</KEYWORD3>\r
+                       <KEYWORD3>dsprm</KEYWORD3>\r
+                       <KEYWORD3>focv</KEYWORD3>\r
+                       <KEYWORD3>mocv</KEYWORD3>\r
+                       <KEYWORD3>hfcv</KEYWORD3>\r
+                       <KEYWORD3>mfcv</KEYWORD3>\r
+                       <KEYWORD3>cscv</KEYWORD3>\r
+                       <KEYWORD3>cucv</KEYWORD3>\r
+                       <KEYWORD3>ffcv</KEYWORD3>\r
+                       <KEYWORD3>dicv</KEYWORD3>\r
+                       <KEYWORD3>rocv</KEYWORD3>\r
+                       <KEYWORD3>tecv</KEYWORD3>\r
+                       <KEYWORD3>vmcv</KEYWORD3>\r
+                       <KEYWORD3>smcv</KEYWORD3>\r
+                       <KEYWORD3>vocv</KEYWORD3>\r
+                       <KEYWORD3>prcv</KEYWORD3>\r
+                       <KEYWORD3>vecv</KEYWORD3>\r
+                       <KEYWORD3>nc48</KEYWORD3>\r
+                       <KEYWORD3>nc49</KEYWORD3>\r
+                       <KEYWORD3>crprat</KEYWORD3>\r
+                       <KEYWORD3>psinc</KEYWORD3>\r
+\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>mtot</KEYWORD3>\r
+                       <KEYWORD3>mc</KEYWORD3>\r
+                       <KEYWORD3>ior</KEYWORD3>\r
+                       <KEYWORD3>imc</KEYWORD3>\r
+                       <KEYWORD3>fmc</KEYWORD3>\r
+                       <KEYWORD3>mmor</KEYWORD3>\r
+                       <KEYWORD3>mmmc</KEYWORD3>\r
+\r
+                       <KEYWORD3>mode</KEYWORD3>\r
+                       <KEYWORD3>freq</KEYWORD3>\r
+                       <KEYWORD3>pfact</KEYWORD3>\r
+                       <KEYWORD3>mcoef</KEYWORD3>\r
+                       <KEYWORD3>damp</KEYWORD3>\r
+\r
+                       <KEYWORD3>active</KEYWORD3>\r
+                       <KEYWORD3>,set</KEYWORD3>\r
+                       <KEYWORD3>lstp</KEYWORD3>\r
+                       <KEYWORD3>sbst</KEYWORD3>\r
+                       <KEYWORD3>time</KEYWORD3>\r
+                       <KEYWORD3>rsys</KEYWORD3>\r
+\r
+                       <KEYWORD3>node</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>sum</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>ntemp</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>curr</KEYWORD3>\r
+                       <KEYWORD3>emf</KEYWORD3>\r
+                       <KEYWORD3>rf</KEYWORD3>\r
+                       <KEYWORD3>fx</KEYWORD3>\r
+                       <KEYWORD3>fy</KEYWORD3>\r
+                       <KEYWORD3>fz</KEYWORD3>\r
+                       <KEYWORD3>mx</KEYWORD3>\r
+                       <KEYWORD3>my</KEYWORD3>\r
+                       <KEYWORD3>mz</KEYWORD3>\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>eqv</KEYWORD3>\r
+                       <KEYWORD3>epto</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>epth</KEYWORD3>\r
+                       <KEYWORD3>epsw</KEYWORD3>\r
+                       <KEYWORD3>nl</KEYWORD3>\r
+                       <KEYWORD3>sepl</KEYWORD3>\r
+                       <KEYWORD3>srat</KEYWORD3>\r
+                       <KEYWORD3>hpres</KEYWORD3>\r
+                       <KEYWORD3>epeq</KEYWORD3>\r
+                       <KEYWORD3>psv</KEYWORD3>\r
+                       <KEYWORD3>plwk</KEYWORD3>\r
+                       <KEYWORD3>tg</KEYWORD3>\r
+                       <KEYWORD3>tf</KEYWORD3>\r
+                       <KEYWORD3>pg</KEYWORD3>\r
+                       <KEYWORD3>ef</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>h</KEYWORD3>\r
+                       <KEYWORD3>b</KEYWORD3>\r
+                       <KEYWORD3>fmag</KEYWORD3>\r
+                       <KEYWORD3>hs</KEYWORD3>\r
+                       <KEYWORD3>bfe</KEYWORD3>\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+                       <KEYWORD3>hflu</KEYWORD3>\r
+                       <KEYWORD3>hflm</KEYWORD3>\r
+                       <KEYWORD3>conc</KEYWORD3>\r
+                       <KEYWORD3>pcoe</KEYWORD3>\r
+                       <KEYWORD3>ptot</KEYWORD3>\r
+                       <KEYWORD3>mach</KEYWORD3>\r
+                       <KEYWORD3>strm</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>cmuv</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>yplu</KEYWORD3>\r
+                       <KEYWORD3>tauw</KEYWORD3>\r
+\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>serr</KEYWORD3>\r
+                       <KEYWORD3>sdsg</KEYWORD3>\r
+                       <KEYWORD3>terr</KEYWORD3>\r
+                       <KEYWORD3>tdsg</KEYWORD3>\r
+                       <KEYWORD3>sene</KEYWORD3>\r
+                       <KEYWORD3>tene</KEYWORD3>\r
+                       <KEYWORD3>kene</KEYWORD3>\r
+                       <KEYWORD3>jheat</KEYWORD3>\r
+                       <KEYWORD3>js</KEYWORD3>\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>etab</KEYWORD3>\r
+                       <KEYWORD3>smisc</KEYWORD3>\r
+                       <KEYWORD3>nmisc</KEYWORD3>\r
+\r
+                       <KEYWORD3>etab</KEYWORD3>\r
+                       <KEYWORD3>ncol</KEYWORD3>\r
+                       <KEYWORD3>nleng</KEYWORD3>\r
+\r
+                       <KEYWORD3>sort</KEYWORD3>\r
+                       <KEYWORD3>max</KEYWORD3>\r
+                       <KEYWORD3>min</KEYWORD3>\r
+                       <KEYWORD3>imax</KEYWORD3>\r
+                       <KEYWORD3>imin</KEYWORD3>\r
+\r
+                       <KEYWORD3>ssum</KEYWORD3>\r
+                       <KEYWORD3>item</KEYWORD3>\r
+\r
+                       <KEYWORD3>fsum</KEYWORD3>\r
+\r
+                       <KEYWORD3>path</KEYWORD3>\r
+                       <KEYWORD3>last</KEYWORD3>\r
+                       <KEYWORD3>nval</KEYWORD3>\r
+\r
+                       <KEYWORD3>kcalc</KEYWORD3>\r
+                       <KEYWORD3>k</KEYWORD3>\r
+\r
+                       <KEYWORD3>intsrf</KEYWORD3>\r
+\r
+                       <KEYWORD3>plnsol</KEYWORD3>\r
+                       <KEYWORD3>bmax</KEYWORD3>\r
+                       <KEYWORD3>bmin</KEYWORD3>\r
+\r
+                       <KEYWORD3>prerr</KEYWORD3>\r
+                       <KEYWORD3>sepc</KEYWORD3>\r
+                       <KEYWORD3>tepc</KEYWORD3>\r
+                       <KEYWORD3>sersm</KEYWORD3>\r
+                       <KEYWORD3>tersm</KEYWORD3>\r
+                       <KEYWORD3>sensm</KEYWORD3>\r
+                       <KEYWORD3>tensm</KEYWORD3>\r
+\r
+                       <KEYWORD3>section</KEYWORD3>\r
+                       <KEYWORD3>inside</KEYWORD3>\r
+                       <KEYWORD3>sx</KEYWORD3>\r
+                       <KEYWORD3>sy</KEYWORD3>\r
+                       <KEYWORD3>sz</KEYWORD3>\r
+                       <KEYWORD3>sxxy</KEYWORD3>\r
+                       <KEYWORD3>syz</KEYWORD3>\r
+                       <KEYWORD3>szx</KEYWORD3>\r
+                       <KEYWORD3>center</KEYWORD3>\r
+                       <KEYWORD3>outside</KEYWORD3>\r
+\r
+                       <KEYWORD3>vari</KEYWORD3>\r
+                       <KEYWORD3>extrem</KEYWORD3>\r
+                       <KEYWORD3>vmax</KEYWORD3>\r
+                       <KEYWORD3>tmax</KEYWORD3>\r
+                       <KEYWORD3>vmin</KEYWORD3>\r
+                       <KEYWORD3>tmin</KEYWORD3>\r
+                       <KEYWORD3>vlast</KEYWORD3>\r
+                       <KEYWORD3>tlast</KEYWORD3>\r
+                       <KEYWORD3>cvar</KEYWORD3>\r
+                       <KEYWORD3>rtime</KEYWORD3>\r
+                       <KEYWORD3>itime</KEYWORD3>\r
+                       <KEYWORD3>t</KEYWORD3>\r
+                       <KEYWORD3>rset</KEYWORD3>\r
+                       <KEYWORD3>iset</KEYWORD3>\r
+                       <KEYWORD3>nsets</KEYWORD3>\r
+\r
+                       <KEYWORD3>opt</KEYWORD3>\r
+                       <KEYWORD3>total</KEYWORD3>\r
+                       <KEYWORD3>feas</KEYWORD3>\r
+                       <KEYWORD3>term</KEYWORD3>\r
+                       <KEYWORD3>best</KEYWORD3>\r
+\r
+                       <KEYWORD3>topo</KEYWORD3>\r
+                       <KEYWORD3>act</KEYWORD3>\r
+                       <KEYWORD3>conv</KEYWORD3>\r
+                       <KEYWORD3>comp</KEYWORD3>\r
+                       <KEYWORD3>porv</KEYWORD3>\r
+                       <KEYWORD3>loads</KEYWORD3>\r
+\r
+                       <KEYWORD3>runst</KEYWORD3>\r
+                       <KEYWORD3>rspeed</KEYWORD3>\r
+                       <KEYWORD3>mips</KEYWORD3>\r
+                       <KEYWORD3>smflop</KEYWORD3>\r
+                       <KEYWORD3>vmflop</KEYWORD3>\r
+                       <KEYWORD3>rfilsz</KEYWORD3>\r
+                       <KEYWORD3>emat</KEYWORD3>\r
+                       <KEYWORD3>erot</KEYWORD3>\r
+                       <KEYWORD3>esav</KEYWORD3>\r
+                       <KEYWORD3>full</KEYWORD3>\r
+                       <KEYWORD3>mode</KEYWORD3>\r
+                       <KEYWORD3>rdsp</KEYWORD3>\r
+                       <KEYWORD3>redm</KEYWORD3>\r
+                       <KEYWORD3>rfrq</KEYWORD3>\r
+                       <KEYWORD3>rgeom</KEYWORD3>\r
+                       <KEYWORD3>rst</KEYWORD3>\r
+                       <KEYWORD3>tri</KEYWORD3>\r
+                       <KEYWORD3>rtimst</KEYWORD3>\r
+                       <KEYWORD3>tfirst</KEYWORD3>\r
+                       <KEYWORD3>titer</KEYWORD3>\r
+                       <KEYWORD3>eqprep</KEYWORD3>\r
+                       <KEYWORD3>,solve</KEYWORD3>\r
+                       <KEYWORD3>bsub</KEYWORD3>\r
+                       <KEYWORD3>eigen</KEYWORD3>\r
+                       <KEYWORD3>elform</KEYWORD3>\r
+                       <KEYWORD3>elstrs</KEYWORD3>\r
+                       <KEYWORD3>nelm</KEYWORD3>\r
+                       <KEYWORD3>rmemry</KEYWORD3>\r
+                       <KEYWORD3>wsreq</KEYWORD3>\r
+                       <KEYWORD3>wsavail</KEYWORD3>\r
+                       <KEYWORD3>dbpsize</KEYWORD3>\r
+                       <KEYWORD3>dbpdisk</KEYWORD3>\r
+                       <KEYWORD3>dbpmem</KEYWORD3>\r
+                       <KEYWORD3>dbsize</KEYWORD3>\r
+                       <KEYWORD3>dbmem</KEYWORD3>\r
+                       <KEYWORD3>scrsize</KEYWORD3>\r
+                       <KEYWORD3>scravail</KEYWORD3>\r
+                       <KEYWORD3>iomem</KEYWORD3>\r
+                       <KEYWORD3>iopsiz</KEYWORD3>\r
+                       <KEYWORD3>iobuf</KEYWORD3>\r
+                       <KEYWORD3>rwfrnt</KEYWORD3>\r
+                       <KEYWORD3>rms</KEYWORD3>\r
+                       <KEYWORD3>mean</KEYWORD3>\r
+\r
+                       <KEYWORD3>,nsel</KEYWORD3>\r
+                       <KEYWORD3>,esel</KEYWORD3>\r
+                       <KEYWORD3>,ksel</KEYWORD3>\r
+                       <KEYWORD3>,lsel</KEYWORD3>\r
+                       <KEYWORD3>,asel</KEYWORD3>\r
+                       <KEYWORD3>,vsel</KEYWORD3>\r
+                       <KEYWORD3>ndnext</KEYWORD3>\r
+                       <KEYWORD3>elnext</KEYWORD3>\r
+                       <KEYWORD3>kpnext</KEYWORD3>\r
+                       <KEYWORD3>lsnext</KEYWORD3>\r
+                       <KEYWORD3>arnext</KEYWORD3>\r
+                       <KEYWORD3>vlnext</KEYWORD3>\r
+                       <KEYWORD3>centrx</KEYWORD3>\r
+                       <KEYWORD3>centry</KEYWORD3>\r
+                       <KEYWORD3>centrz</KEYWORD3>\r
+                       <KEYWORD3>nx</KEYWORD3>\r
+                       <KEYWORD3>ny</KEYWORD3>\r
+                       <KEYWORD3>nz</KEYWORD3>\r
+                       <KEYWORD3>kx</KEYWORD3>\r
+                       <KEYWORD3>ky</KEYWORD3>\r
+                       <KEYWORD3>kz</KEYWORD3>\r
+                       <KEYWORD3>lx</KEYWORD3>\r
+                       <KEYWORD3>ly</KEYWORD3>\r
+                       <KEYWORD3>lz</KEYWORD3>\r
+                       <KEYWORD3>lsx</KEYWORD3>\r
+                       <KEYWORD3>lsy</KEYWORD3>\r
+                       <KEYWORD3>lsz</KEYWORD3>\r
+                       <KEYWORD3>node</KEYWORD3>\r
+                       <KEYWORD3>kp</KEYWORD3>\r
+                       <KEYWORD3>distnd</KEYWORD3>\r
+                       <KEYWORD3>distkp</KEYWORD3>\r
+                       <KEYWORD3>disten</KEYWORD3>\r
+                       <KEYWORD3>anglen</KEYWORD3>\r
+                       <KEYWORD3>anglek</KEYWORD3>\r
+                       <KEYWORD3>nnear</KEYWORD3>\r
+                       <KEYWORD3>knear</KEYWORD3>\r
+                       <KEYWORD3>enearn</KEYWORD3>\r
+                       <KEYWORD3>areand</KEYWORD3>\r
+                       <KEYWORD3>areakp</KEYWORD3>\r
+                       <KEYWORD3>arnode</KEYWORD3>\r
+                       <KEYWORD3>normnx</KEYWORD3>\r
+                       <KEYWORD3>normny</KEYWORD3>\r
+                       <KEYWORD3>normnz</KEYWORD3>\r
+                       <KEYWORD3>normkx</KEYWORD3>\r
+                       <KEYWORD3>normky</KEYWORD3>\r
+                       <KEYWORD3>normkz</KEYWORD3>\r
+                       <KEYWORD3>enextn</KEYWORD3>\r
+                       <KEYWORD3>nelem</KEYWORD3>\r
+                       <KEYWORD3>eladj</KEYWORD3>\r
+                       <KEYWORD3>ndface</KEYWORD3>\r
+                       <KEYWORD3>nmface</KEYWORD3>\r
+                       <KEYWORD3>arface</KEYWORD3>\r
+                       <KEYWORD3>ux</KEYWORD3>\r
+                       <KEYWORD3>uy</KEYWORD3>\r
+                       <KEYWORD3>uz</KEYWORD3>\r
+                       <KEYWORD3>rotx</KEYWORD3>\r
+                       <KEYWORD3>roty</KEYWORD3>\r
+                       <KEYWORD3>rotz</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>ax</KEYWORD3>\r
+                       <KEYWORD3>ay</KEYWORD3>\r
+                       <KEYWORD3>az</KEYWORD3>\r
+\r
+                       <!-- /GFORMAT command -->\r
+                       <KEYWORD3>g</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+                       <KEYWORD3>e</KEYWORD3>\r
+\r
+                       <!-- /GLINE command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- *GO command -->\r
+                       <KEYWORD3>stop</KEYWORD3>\r
+\r
+                       <!-- GP command -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>fx</KEYWORD3>\r
+                       <KEYWORD3>fy</KEYWORD3>\r
+                       <KEYWORD3>fz</KEYWORD3>\r
+                       <KEYWORD3>mx</KEYWORD3>\r
+                       <KEYWORD3>my</KEYWORD3>\r
+                       <KEYWORD3>mz</KEYWORD3>\r
+\r
+                       <!-- GPLIST command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- /GRAPHICS command -->\r
+                       <KEYWORD3>full</KEYWORD3>\r
+                       <KEYWORD3>power</KEYWORD3>\r
+\r
+                       <!-- /GROPT command -->\r
+                       <KEYWORD3>axdv</KEYWORD3>\r
+                       <KEYWORD3>axnm</KEYWORD3>\r
+                       <KEYWORD3>axnsc</KEYWORD3>\r
+                       <KEYWORD3>ascal</KEYWORD3>\r
+                       <KEYWORD3>logx</KEYWORD3>\r
+                       <KEYWORD3>logy</KEYWORD3>\r
+                       <KEYWORD3>fill</KEYWORD3>\r
+                       <KEYWORD3>cgrid</KEYWORD3>\r
+                       <KEYWORD3>dig1</KEYWORD3>\r
+                       <KEYWORD3>dig2</KEYWORD3>\r
+                       <KEYWORD3>view</KEYWORD3>\r
+                       <KEYWORD3>revx</KEYWORD3>\r
+                       <KEYWORD3>revy</KEYWORD3>\r
+                       <KEYWORD3>divx</KEYWORD3>\r
+                       <KEYWORD3>divy</KEYWORD3>\r
+                       <KEYWORD3>ltyp</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>front</KEYWORD3>\r
+\r
+                       <!-- GRP command -->\r
+                       <KEYWORD3>disp</KEYWORD3>\r
+                       <KEYWORD3>velo</KEYWORD3>\r
+                       <KEYWORD3>acel</KEYWORD3>\r
+\r
+                       <!-- /GST command -->\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+\r
+                       <!-- /GTHK command -->\r
+                       <KEYWORD3>axis</KEYWORD3>\r
+                       <KEYWORD3>grid</KEYWORD3>\r
+                       <KEYWORD3>curve</KEYWORD3>\r
+\r
+                       <!-- /GTYPE command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>node</KEYWORD3>\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>keyp</KEYWORD3>\r
+                       <KEYWORD3>line</KEYWORD3>\r
+                       <KEYWORD3>area</KEYWORD3>\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>grph</KEYWORD3>\r
+\r
+                       <!-- /HEADER command -->\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+\r
+                       <!-- HPGL command -->\r
+                       <KEYWORD3>model</KEYWORD3>\r
+                       <KEYWORD3>paper</KEYWORD3>\r
+                       <KEYWORD3>color</KEYWORD3>\r
+                       <KEYWORD3>direct</KEYWORD3>\r
+\r
+                       <!-- HPTCREATE command -->\r
+                       <KEYWORD3>line</KEYWORD3>\r
+                       <KEYWORD3>area</KEYWORD3>\r
+                       <KEYWORD3>coord</KEYWORD3>\r
+                       <KEYWORD3>ratio</KEYWORD3>\r
+\r
+                       <!-- HPTDELETE command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- HREXP command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- HROPT command -->\r
+                       <KEYWORD3>full</KEYWORD3>\r
+                       <KEYWORD3>reduc</KEYWORD3>\r
+                       <KEYWORD3>msup</KEYWORD3>\r
+\r
+                       <!-- HROUT command -->\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+\r
+                       <!-- IC command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>ux</KEYWORD3>\r
+                       <KEYWORD3>uy</KEYWORD3>\r
+                       <KEYWORD3>uz</KEYWORD3>\r
+                       <KEYWORD3>rotx</KEYWORD3>\r
+                       <KEYWORD3>roty</KEYWORD3>\r
+                       <KEYWORD3>rotz</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>sp01</KEYWORD3>\r
+                       <KEYWORD3>so02</KEYWORD3>\r
+                       <KEYWORD3>sp03</KEYWORD3>\r
+                       <KEYWORD3>sp04</KEYWORD3>\r
+                       <KEYWORD3>sp05</KEYWORD3>\r
+                       <KEYWORD3>sp06</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>ax</KEYWORD3>\r
+                       <KEYWORD3>ay</KEYWORD3>\r
+                       <KEYWORD3>az</KEYWORD3>\r
+\r
+                       <!-- ICLIST command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>disp</KEYWORD3>\r
+                       <KEYWORD3>velo</KEYWORD3>\r
+\r
+                       <!-- *IF command -->\r
+                       <KEYWORD3>eq</KEYWORD3>\r
+                       <KEYWORD3>ne</KEYWORD3>\r
+                       <KEYWORD3>lt</KEYWORD3>\r
+                       <KEYWORD3>gt</KEYWORD3>\r
+                       <KEYWORD3>le</KEYWORD3>\r
+                       <KEYWORD3>ge</KEYWORD3>\r
+                       <KEYWORD3>ablt</KEYWORD3>\r
+                       <KEYWORD3>abgt</KEYWORD3>\r
+                       <KEYWORD3>stop</KEYWORD3>\r
+                       <KEYWORD3>exit</KEYWORD3>\r
+                       <KEYWORD3>cycle</KEYWORD3>\r
+                       <KEYWORD3>then</KEYWORD3>\r
+\r
+                       <!-- INRES command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>basic</KEYWORD3>\r
+                       <KEYWORD3>nsol</KEYWORD3>\r
+                       <KEYWORD3>rsol</KEYWORD3>\r
+                       <KEYWORD3>esol</KEYWORD3>\r
+                       <KEYWORD3>nload</KEYWORD3>\r
+                       <KEYWORD3>strs</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>epth</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>fgrad</KEYWORD3>\r
+                       <KEYWORD3>fflux</KEYWORD3>\r
+                       <KEYWORD3>misc</KEYWORD3>\r
+\r
+                       <!-- INTSRF command -->\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+\r
+                       <!-- IOPTN command -->\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>defa</KEYWORD3>\r
+                       <KEYWORD3>merg</KEYWORD3>\r
+                       <KEYWORD3>yes</KEYWORD3>\r
+                       <KEYWORD3>no</KEYWORD3>\r
+                       <KEYWORD3>solid</KEYWORD3>\r
+                       <KEYWORD3>gtoler</KEYWORD3>\r
+                       <KEYWORD3>file</KEYWORD3>\r
+                       <KEYWORD3>iges</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>small</KEYWORD3>\r
+\r
+                       <!-- K command -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- KBETW command -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>ratio</KEYWORD3>\r
+                       <KEYWORD3>dist</KEYWORD3>\r
+\r
+                       <!-- KCENTER command -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>kp</KEYWORD3>\r
+                       <KEYWORD3>line</KEYWORD3>\r
+\r
+                       <!-- KCLEAR, KDELE, KDIST, KESIZE, KFILL, KGEN, KL, KLIST, KMESH, KMODIF, -->\r
+                       <!-- KMOVE, KNODE, KPLOT, KPSCALE, KSCALE, KSCON commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>coord</KEYWORD3>\r
+                       <KEYWORD3>hpt</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+\r
+                       <!-- KREFINE command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>smooth</KEYWORD3>\r
+                       <KEYWORD3>clean</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+\r
+                       <!-- KSEL command -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,r</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+                       <KEYWORD3>inve</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>,mat</KEYWORD3>\r
+                       <KEYWORD3>,type</KEYWORD3>\r
+                       <KEYWORD3>,real</KEYWORD3>\r
+                       <KEYWORD3>,esys</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>kp</KEYWORD3>\r
+                       <KEYWORD3>ext</KEYWORD3>\r
+                       <KEYWORD3>hpt</KEYWORD3>\r
+                       <KEYWORD3>loc</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+\r
+                       <!-- KSLL, KSLN commands -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,r</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+\r
+                       <!-- KSYMM, KTRAN, KWPAVE, KWPLAN commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+\r
+                       <!-- L, L2ANG, L2TAN, LANG, LARC, LAREA commands -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- LAYER, LAYERP26 commands -->\r
+                       <KEYWORD3>fcmax</KEYWORD3>\r
+\r
+                       <!-- LAYLIST, LCABS, LCCAT, LCFACT, LCLEAR, LCOMB, LCSL, LCSUM, LDELE, -->\r
+                       <!-- LDIV, LDRAG, LESIZE, LEXTND, LFILLT, LGEN, LGLUE, /LIGHT, LINA, -->\r
+                       <!-- LINL, LINP, LINV, LMESH, LNFILL, LNMERGE, LOVLAP, LPLOT, LPTN, -->\r
+                       <!-- LREVERSE, LROTAT, LSSCALE, LSTR commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- LCDEF command -->\r
+                       <KEYWORD3>erase</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- LCOPER command -->\r
+                       <KEYWORD3>zero</KEYWORD3>\r
+                       <KEYWORD3>squa</KEYWORD3>\r
+                       <KEYWORD3>sqrt</KEYWORD3>\r
+                       <KEYWORD3>lprin</KEYWORD3>\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>sub</KEYWORD3>\r
+                       <KEYWORD3>srss</KEYWORD3>\r
+                       <KEYWORD3>min</KEYWORD3>\r
+                       <KEYWORD3>max</KEYWORD3>\r
+                       <KEYWORD3>abmn</KEYWORD3>\r
+                       <KEYWORD3>abmx</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>mult</KEYWORD3>\r
+\r
+                       <!-- LCSEL command -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,r</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+                       <KEYWORD3>inve</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+\r
+                       <!-- LDREAD command -->\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>forc</KEYWORD3>\r
+                       <KEYWORD3>hgen</KEYWORD3>\r
+                       <KEYWORD3>hflu</KEYWORD3>\r
+                       <KEYWORD3>ehflu</KEYWORD3>\r
+                       <KEYWORD3>js</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>reac</KEYWORD3>\r
+                       <KEYWORD3>hflm</KEYWORD3>\r
+                       <KEYWORD3>last</KEYWORD3>\r
+\r
+                       <!-- LGWRITE command -->\r
+                       <KEYWORD3>none</KEYWORD3>\r
+                       <KEYWORD3>comment</KEYWORD3>\r
+                       <KEYWORD3>remove</KEYWORD3>\r
+\r
+                       <!-- LLIST command -->\r
+                       <KEYWORD3>radius</KEYWORD3>\r
+                       <KEYWORD3>layer</KEYWORD3>\r
+                       <KEYWORD3>hpt</KEYWORD3>\r
+                       <KEYWORD3>orient</KEYWORD3>\r
+\r
+                       <!-- LNSEARCH command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>auto</KEYWORD3>\r
+\r
+                       <!-- LOCAL command -->\r
+                       <KEYWORD3>cart</KEYWORD3>\r
+                       <KEYWORD3>cylin</KEYWORD3>\r
+                       <KEYWORD3>sphe</KEYWORD3>\r
+                       <KEYWORD3>toro</KEYWORD3>\r
+\r
+                       <!-- LREFINE command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>smooth</KEYWORD3>\r
+                       <KEYWORD3>clean</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- LSBA, LSBL, LSBV, LSBW commands -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>sepo</KEYWORD3>\r
+                       <KEYWORD3>delete</KEYWORD3>\r
+                       <KEYWORD3>keep</KEYWORD3>\r
+\r
+                       <!-- LSCLEAR command -->\r
+                       <KEYWORD3>solid</KEYWORD3>\r
+                       <KEYWORD3>fe</KEYWORD3>\r
+                       <KEYWORD3>iner</KEYWORD3>\r
+                       <KEYWORD3>lfact</KEYWORD3>\r
+                       <KEYWORD3>lsopt</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- LSEL command -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,r</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+                       <KEYWORD3>inve</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>line</KEYWORD3>\r
+                       <KEYWORD3>ext</KEYWORD3>\r
+                       <KEYWORD3>loc</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>tan1</KEYWORD3>\r
+                       <KEYWORD3>tan2</KEYWORD3>\r
+                       <KEYWORD3>ndiv</KEYWORD3>\r
+                       <KEYWORD3>space</KEYWORD3>\r
+                       <KEYWORD3>,mat</KEYWORD3>\r
+                       <KEYWORD3>,type</KEYWORD3>\r
+                       <KEYWORD3>,real</KEYWORD3>\r
+                       <KEYWORD3>,esys</KEYWORD3>\r
+                       <KEYWORD3>sec</KEYWORD3>\r
+                       <KEYWORD3>lenght</KEYWORD3>\r
+                       <KEYWORD3>radius</KEYWORD3>\r
+                       <KEYWORD3>hpt</KEYWORD3>\r
+                       <KEYWORD3>lcca</KEYWORD3>\r
+\r
+                       <!-- LSLA, LSLK commands -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,r</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+\r
+                       <!-- LSREAD, LSWRITE commands -->\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>init</KEYWORD3>\r
+\r
+                       <!-- LSYMM, LTAN, LTRAN, LWPLAN commands -->\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- LUMPM command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- M, MONITOR commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>ux</KEYWORD3>\r
+                       <KEYWORD3>uy</KEYWORD3>\r
+                       <KEYWORD3>uz</KEYWORD3>\r
+                       <KEYWORD3>rotx</KEYWORD3>\r
+                       <KEYWORD3>roty</KEYWORD3>\r
+                       <KEYWORD3>rotz</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>fx</KEYWORD3>\r
+                       <KEYWORD3>fy</KEYWORD3>\r
+                       <KEYWORD3>fz</KEYWORD3>\r
+                       <KEYWORD3>mx</KEYWORD3>\r
+                       <KEYWORD3>my</KEYWORD3>\r
+                       <KEYWORD3>mz</KEYWORD3>\r
+                       <KEYWORD3>heat</KEYWORD3>\r
+\r
+                       <!-- MDELE, MGEN, MLIST commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- /MENU command -->\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>grph</KEYWORD3>\r
+\r
+                       <!-- *MFOURI command -->\r
+                       <KEYWORD3>fit</KEYWORD3>\r
+                       <KEYWORD3>eval</KEYWORD3>\r
+\r
+                       <!-- *MFUN command -->\r
+                       <KEYWORD3>copy</KEYWORD3>\r
+                       <KEYWORD3>tran</KEYWORD3>\r
+\r
+                       <!-- MODMSH command -->\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>nocheck</KEYWORD3>\r
+                       <KEYWORD3>check</KEYWORD3>\r
+                       <KEYWORD3>detach</KEYWORD3>\r
+\r
+                       <!-- MODOPT command -->\r
+                       <KEYWORD3>subsp</KEYWORD3>\r
+                       <KEYWORD3>lanb</KEYWORD3>\r
+                       <KEYWORD3>reduc</KEYWORD3>\r
+                       <KEYWORD3>unsym</KEYWORD3>\r
+                       <KEYWORD3>damp</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- *MOPER command -->\r
+                       <KEYWORD3>mult</KEYWORD3>\r
+                       <KEYWORD3>solv</KEYWORD3>\r
+                       <KEYWORD3>sort</KEYWORD3>\r
+                       <KEYWORD3>covar</KEYWORD3>\r
+                       <KEYWORD3>corr</KEYWORD3>\r
+\r
+                       <!-- MOPT command -->\r
+                       <KEYWORD3>expnd</KEYWORD3>\r
+                       <KEYWORD3>tetexpnd</KEYWORD3>\r
+                       <KEYWORD3>trans</KEYWORD3>\r
+                       <KEYWORD3>iesz</KEYWORD3>\r
+                       <KEYWORD3>amesh</KEYWORD3>\r
+                       <KEYWORD3>default</KEYWORD3>\r
+                       <KEYWORD3>main</KEYWORD3>\r
+                       <KEYWORD3>alternate</KEYWORD3>\r
+                       <KEYWORD3>alt2</KEYWORD3>\r
+                       <KEYWORD3>qmesh</KEYWORD3>\r
+                       <KEYWORD3>vmesh</KEYWORD3>\r
+                       <KEYWORD3>split</KEYWORD3>\r
+                       <KEYWORD3>lsmo</KEYWORD3>\r
+                       <KEYWORD3>clear</KEYWORD3>\r
+                       <KEYWORD3>pyra</KEYWORD3>\r
+                       <KEYWORD3>timp</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>defa</KEYWORD3>\r
+\r
+                       <!-- MOVE command -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- MP, MPDATA commands -->\r
+                       <KEYWORD3>ex</KEYWORD3>\r
+                       <KEYWORD3>ey</KEYWORD3>\r
+                       <KEYWORD3>ez</KEYWORD3>\r
+                       <KEYWORD3>alpx</KEYWORD3>\r
+                       <KEYWORD3>alpy</KEYWORD3>\r
+                       <KEYWORD3>alpz</KEYWORD3>\r
+                       <KEYWORD3>reft</KEYWORD3>\r
+                       <KEYWORD3>prxy</KEYWORD3>\r
+                       <KEYWORD3>pryz</KEYWORD3>\r
+                       <KEYWORD3>prxz</KEYWORD3>\r
+                       <KEYWORD3>nuxy</KEYWORD3>\r
+                       <KEYWORD3>nuyz</KEYWORD3>\r
+                       <KEYWORD3>nuzx</KEYWORD3>\r
+                       <KEYWORD3>gxy</KEYWORD3>\r
+                       <KEYWORD3>gyz</KEYWORD3>\r
+                       <KEYWORD3>gxz</KEYWORD3>\r
+                       <KEYWORD3>damp</KEYWORD3>\r
+                       <KEYWORD3>mu</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>c</KEYWORD3>\r
+                       <KEYWORD3>enth</KEYWORD3>\r
+                       <KEYWORD3>kxx</KEYWORD3>\r
+                       <KEYWORD3>kyy</KEYWORD3>\r
+                       <KEYWORD3>kzz</KEYWORD3>\r
+                       <KEYWORD3>hf</KEYWORD3>\r
+                       <KEYWORD3>emis</KEYWORD3>\r
+                       <KEYWORD3>qrate</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>sonc</KEYWORD3>\r
+                       <KEYWORD3>rsvx</KEYWORD3>\r
+                       <KEYWORD3>rsvy</KEYWORD3>\r
+                       <KEYWORD3>rsvz</KEYWORD3>\r
+                       <KEYWORD3>perx</KEYWORD3>\r
+                       <KEYWORD3>pery</KEYWORD3>\r
+                       <KEYWORD3>perz</KEYWORD3>\r
+                       <KEYWORD3>murx</KEYWORD3>\r
+                       <KEYWORD3>mury</KEYWORD3>\r
+                       <KEYWORD3>murz</KEYWORD3>\r
+                       <KEYWORD3>mgxx</KEYWORD3>\r
+                       <KEYWORD3>mgyy</KEYWORD3>\r
+                       <KEYWORD3>mgzz</KEYWORD3>\r
+                       <KEYWORD3>lsst</KEYWORD3>\r
+\r
+                       <!-- MPCHG, MPDELE commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- /MPLIB command -->\r
+                       <KEYWORD3>read</KEYWORD3>\r
+                       <KEYWORD3>write</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+\r
+                       <!-- MPLIST command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>evlt</KEYWORD3>\r
+\r
+                       <!-- MSADV command -->\r
+                       <KEYWORD3>msu</KEYWORD3>\r
+                       <KEYWORD3>supg</KEYWORD3>\r
+\r
+                       <!-- MSCAP command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- *MSG command -->\r
+                       <KEYWORD3>info</KEYWORD3>\r
+                       <KEYWORD3>note</KEYWORD3>\r
+                       <KEYWORD3>warn</KEYWORD3>\r
+                       <KEYWORD3>error</KEYWORD3>\r
+                       <KEYWORD3>fatal</KEYWORD3>\r
+                       <KEYWORD3>ui</KEYWORD3>\r
+\r
+                       <!-- MSHAPE command -->\r
+                       <KEYWORD3>2d</KEYWORD3>\r
+                       <KEYWORD3>3d</KEYWORD3>\r
+\r
+                       <!-- MSPROP command -->\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>mdif</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+                       <KEYWORD3>constant</KEYWORD3>\r
+                       <KEYWORD3>liquid</KEYWORD3>\r
+                       <KEYWORD3>gas</KEYWORD3>\r
+\r
+                       <!-- /MSTART command -->\r
+                       <KEYWORD3>main</KEYWORD3>\r
+                       <KEYWORD3>input</KEYWORD3>\r
+                       <KEYWORD3>grph</KEYWORD3>\r
+                       <KEYWORD3>tool</KEYWORD3>\r
+                       <KEYWORD3>zoom</KEYWORD3>\r
+                       <KEYWORD3>work</KEYWORD3>\r
+                       <KEYWORD3>wpset</KEYWORD3>\r
+                       <KEYWORD3>abbr</KEYWORD3>\r
+                       <KEYWORD3>parm</KEYWORD3>\r
+                       <KEYWORD3>sele</KEYWORD3>\r
+                       <KEYWORD3>anno</KEYWORD3>\r
+                       <KEYWORD3>hard</KEYWORD3>\r
+                       <KEYWORD3>help</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- MSVARY command -->\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>mdif</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- MXPAND command -->\r
+                       <KEYWORD3>no</KEYWORD3>\r
+                       <KEYWORD3>yes</KEYWORD3>\r
+\r
+                       <!-- N, NDELE, NDIST, NGEN, NKPT commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- NLGEOM, NOORDER commands -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- NLIST, NMODIF commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>coord</KEYWORD3>\r
+\r
+                       <!-- NREFINE, NROTAT, NSCALE commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>smooth</KEYWORD3>\r
+                       <KEYWORD3>clean</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- NRLSUM command -->\r
+                       <KEYWORD3>disp</KEYWORD3>\r
+                       <KEYWORD3>velo</KEYWORD3>\r
+                       <KEYWORD3>acel</KEYWORD3>\r
+\r
+                       <!-- NROPT command -->\r
+                       <KEYWORD3>auto</KEYWORD3>\r
+                       <KEYWORD3>full</KEYWORD3>\r
+                       <KEYWORD3>modi</KEYWORD3>\r
+                       <KEYWORD3>init</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+\r
+                       <!-- NSEL, NSOL, NSORT commands -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,r</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+                       <KEYWORD3>inve</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>node</KEYWORD3>\r
+                       <KEYWORD3>ext</KEYWORD3>\r
+                       <KEYWORD3>loc</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>ang</KEYWORD3>\r
+                       <KEYWORD3>xy</KEYWORD3>\r
+                       <KEYWORD3>yz</KEYWORD3>\r
+                       <KEYWORD3>zx</KEYWORD3>\r
+                       <KEYWORD3>,m</KEYWORD3>\r
+                       <KEYWORD3>,cp</KEYWORD3>\r
+                       <KEYWORD3>,ce</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>ux</KEYWORD3>\r
+                       <KEYWORD3>uy</KEYWORD3>\r
+                       <KEYWORD3>uz</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>rotx</KEYWORD3>\r
+                       <KEYWORD3>roty</KEYWORD3>\r
+                       <KEYWORD3>rotz</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>ax</KEYWORD3>\r
+                       <KEYWORD3>ay</KEYWORD3>\r
+                       <KEYWORD3>az</KEYWORD3>\r
+                       <KEYWORD3>curr</KEYWORD3>\r
+                       <KEYWORD3>emf</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+                       <KEYWORD3>fx</KEYWORD3>\r
+                       <KEYWORD3>fy</KEYWORD3>\r
+                       <KEYWORD3>fz</KEYWORD3>\r
+                       <KEYWORD3>,m</KEYWORD3>\r
+                       <KEYWORD3>mx</KEYWORD3>\r
+                       <KEYWORD3>my</KEYWORD3>\r
+                       <KEYWORD3>mz</KEYWORD3>\r
+                       <KEYWORD3>heat</KEYWORD3>\r
+                       <KEYWORD3>flow</KEYWORD3>\r
+                       <KEYWORD3>amps</KEYWORD3>\r
+                       <KEYWORD3>flux</KEYWORD3>\r
+                       <KEYWORD3>csg</KEYWORD3>\r
+                       <KEYWORD3>csgx</KEYWORD3>\r
+                       <KEYWORD3>csgy</KEYWORD3>\r
+                       <KEYWORD3>csgz</KEYWORD3>\r
+                       <KEYWORD3>chrg</KEYWORD3>\r
+                       <KEYWORD3>chrgd</KEYWORD3>\r
+                       <KEYWORD3>,bf</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>flue</KEYWORD3>\r
+                       <KEYWORD3>hgen</KEYWORD3>\r
+                       <KEYWORD3>js</KEYWORD3>\r
+                       <KEYWORD3>jsx</KEYWORD3>\r
+                       <KEYWORD3>jsy</KEYWORD3>\r
+                       <KEYWORD3>jsz</KEYWORD3>\r
+                       <KEYWORD3>mvdi</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>eqv</KEYWORD3>\r
+                       <KEYWORD3>epto</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>epth</KEYWORD3>\r
+                       <KEYWORD3>epsw</KEYWORD3>\r
+                       <KEYWORD3>nl</KEYWORD3>\r
+                       <KEYWORD3>sepl</KEYWORD3>\r
+                       <KEYWORD3>srat</KEYWORD3>\r
+                       <KEYWORD3>hpres</KEYWORD3>\r
+                       <KEYWORD3>epeq</KEYWORD3>\r
+                       <KEYWORD3>psv</KEYWORD3>\r
+                       <KEYWORD3>plwk</KEYWORD3>\r
+                       <KEYWORD3>cont</KEYWORD3>\r
+                       <KEYWORD3>pene</KEYWORD3>\r
+                       <KEYWORD3>sfric</KEYWORD3>\r
+                       <KEYWORD3>stot</KEYWORD3>\r
+                       <KEYWORD3>slide</KEYWORD3>\r
+                       <KEYWORD3>tg</KEYWORD3>\r
+                       <KEYWORD3>tf</KEYWORD3>\r
+                       <KEYWORD3>pg</KEYWORD3>\r
+                       <KEYWORD3>ef</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>h</KEYWORD3>\r
+                       <KEYWORD3>b</KEYWORD3>\r
+                       <KEYWORD3>fmag</KEYWORD3>\r
+                       <KEYWORD3>topo</KEYWORD3>\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+                       <KEYWORD3>hflu</KEYWORD3>\r
+                       <KEYWORD3>hflm</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>pcoe</KEYWORD3>\r
+                       <KEYWORD3>ptot</KEYWORD3>\r
+                       <KEYWORD3>mach</KEYWORD3>\r
+                       <KEYWORD3>strm</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>cmuv</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>yplu</KEYWORD3>\r
+                       <KEYWORD3>tauw</KEYWORD3>\r
+\r
+                       <!-- NSLA, NSLE, NSLK, NSLL, NSLV commands -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,r</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>active</KEYWORD3>\r
+                       <KEYWORD3>inactive</KEYWORD3>\r
+                       <KEYWORD3>corner</KEYWORD3>\r
+                       <KEYWORD3>mid</KEYWORD3>\r
+\r
+                       <!-- NSUBST command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- NSYM command -->\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- NUMCMP, NUMMRG, NUMOFF, NUMSTR commands -->\r
+                       <KEYWORD3>node</KEYWORD3>\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>kp</KEYWORD3>\r
+                       <KEYWORD3>line</KEYWORD3>\r
+                       <KEYWORD3>area</KEYWORD3>\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>,mat</KEYWORD3>\r
+                       <KEYWORD3>,type</KEYWORD3>\r
+                       <KEYWORD3>,real</KEYWORD3>\r
+                       <KEYWORD3>,cp</KEYWORD3>\r
+                       <KEYWORD3>,ce</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>low</KEYWORD3>\r
+                       <KEYWORD3>high</KEYWORD3>\r
+                       <KEYWORD3>,csys</KEYWORD3>\r
+                       <KEYWORD3>defa</KEYWORD3>\r
+\r
+                       <!-- NUMEXP command -->\r
+                       <KEYWORD3>yes</KEYWORD3>\r
+                       <KEYWORD3>no</KEYWORD3>\r
+\r
+                       <!-- NWPLAN command -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- OPDEL, OPLIST, OPRFA, OPRGR, OPRSW commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- OPFACT command -->\r
+                       <KEYWORD3>full</KEYWORD3>\r
+\r
+                       <!-- OPGRAD, OPSWEEP commands -->\r
+                       <KEYWORD3>best</KEYWORD3>\r
+                       <KEYWORD3>last</KEYWORD3>\r
+                       <KEYWORD3>,n</KEYWORD3>\r
+\r
+                       <!-- OPKEEP commmand -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- OPLFA command -->\r
+                       <KEYWORD3>main</KEYWORD3>\r
+                       <KEYWORD3>2fac</KEYWORD3>\r
+                       <KEYWORD3>3fac</KEYWORD3>\r
+\r
+                       <!-- OPLOOP command -->\r
+                       <KEYWORD3>top</KEYWORD3>\r
+                       <KEYWORD3>prep</KEYWORD3>\r
+                       <KEYWORD3>ignore</KEYWORD3>\r
+                       <KEYWORD3>process</KEYWORD3>\r
+                       <KEYWORD3>scalar</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- OPNCONTROL command -->\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+\r
+                       <!-- OPPRNT command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>full</KEYWORD3>\r
+\r
+                       <!-- OPTYPE command -->\r
+                       <KEYWORD3>subp</KEYWORD3>\r
+                       <KEYWORD3>first</KEYWORD3>\r
+                       <KEYWORD3>rand</KEYWORD3>\r
+                       <KEYWORD3>run</KEYWORD3>\r
+                       <KEYWORD3>fact</KEYWORD3>\r
+                       <KEYWORD3>grad</KEYWORD3>\r
+                       <KEYWORD3>sweep</KEYWORD3>\r
+                       <KEYWORD3>user</KEYWORD3>\r
+\r
+                       <!-- OPVAR command -->\r
+                       <KEYWORD3>dv</KEYWORD3>\r
+                       <KEYWORD3>sv</KEYWORD3>\r
+                       <KEYWORD3>obj</KEYWORD3>\r
+                       <KEYWORD3>del</KEYWORD3>\r
+\r
+                       <!-- OUTPR command -->\r
+                       <KEYWORD3>basic</KEYWORD3>\r
+                       <KEYWORD3>nsol</KEYWORD3>\r
+                       <KEYWORD3>rsol</KEYWORD3>\r
+                       <KEYWORD3>esol</KEYWORD3>\r
+                       <KEYWORD3>nload</KEYWORD3>\r
+                       <KEYWORD3>veng</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+                       <KEYWORD3>last</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>erase</KEYWORD3>\r
+\r
+                       <!-- /OUTPUT command -->\r
+                       <KEYWORD3>term</KEYWORD3>\r
+                       <KEYWORD3>append</KEYWORD3>\r
+\r
+                       <!-- OUTRES command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>basic</KEYWORD3>\r
+                       <KEYWORD3>nsol</KEYWORD3>\r
+                       <KEYWORD3>rsol</KEYWORD3>\r
+                       <KEYWORD3>esol</KEYWORD3>\r
+                       <KEYWORD3>nload</KEYWORD3>\r
+                       <KEYWORD3>strs</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>epth</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>fgrad</KEYWORD3>\r
+                       <KEYWORD3>fflux</KEYWORD3>\r
+                       <KEYWORD3>misc</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>last</KEYWORD3>\r
+\r
+                       <!-- PADELE command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>name</KEYWORD3>\r
+\r
+                       <!-- PAGET, PAPUT commands -->\r
+                       <KEYWORD3>points</KEYWORD3>\r
+                       <KEYWORD3>table</KEYWORD3>\r
+                       <KEYWORD3>label</KEYWORD3>\r
+\r
+                       <!-- PARESU command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>path</KEYWORD3>\r
+\r
+                       <!-- PARRES command -->\r
+                       <KEYWORD3>new</KEYWORD3>\r
+                       <KEYWORD3>change</KEYWORD3>\r
+\r
+                       <!-- PARSAV command -->\r
+                       <KEYWORD3>scalar</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- PASAVE command -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- /PBC command -->\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>ux</KEYWORD3>\r
+                       <KEYWORD3>uy</KEYWORD3>\r
+                       <KEYWORD3>uz</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>rotx</KEYWORD3>\r
+                       <KEYWORD3>roty</KEYWORD3>\r
+                       <KEYWORD3>rotz</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>vx</KEYWORD3>\r
+                       <KEYWORD3>vy</KEYWORD3>\r
+                       <KEYWORD3>vz</KEYWORD3>\r
+                       <KEYWORD3>sp01</KEYWORD3>\r
+                       <KEYWORD3>sp02</KEYWORD3>\r
+                       <KEYWORD3>sp03</KEYWORD3>\r
+                       <KEYWORD3>sp04</KEYWORD3>\r
+                       <KEYWORD3>sp05</KEYWORD3>\r
+                       <KEYWORD3>sp06</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>chrg</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+                       <KEYWORD3>forc</KEYWORD3>\r
+                       <KEYWORD3>fx</KEYWORD3>\r
+                       <KEYWORD3>fy</KEYWORD3>\r
+                       <KEYWORD3>fz</KEYWORD3>\r
+                       <KEYWORD3>,m</KEYWORD3>\r
+                       <KEYWORD3>mome</KEYWORD3>\r
+                       <KEYWORD3>mx</KEYWORD3>\r
+                       <KEYWORD3>my</KEYWORD3>\r
+                       <KEYWORD3>mz</KEYWORD3>\r
+                       <KEYWORD3>heat</KEYWORD3>\r
+                       <KEYWORD3>flow</KEYWORD3>\r
+                       <KEYWORD3>amps</KEYWORD3>\r
+                       <KEYWORD3>flux</KEYWORD3>\r
+                       <KEYWORD3>csg</KEYWORD3>\r
+                       <KEYWORD3>mast</KEYWORD3>\r
+                       <KEYWORD3>,cp</KEYWORD3>\r
+                       <KEYWORD3>,ce</KEYWORD3>\r
+                       <KEYWORD3>nfor</KEYWORD3>\r
+                       <KEYWORD3>nmom</KEYWORD3>\r
+                       <KEYWORD3>rfor</KEYWORD3>\r
+                       <KEYWORD3>rmom</KEYWORD3>\r
+                       <KEYWORD3>path</KEYWORD3>\r
+                       <KEYWORD3>acel</KEYWORD3>\r
+                       <KEYWORD3>acelx</KEYWORD3>\r
+                       <KEYWORD3>acely</KEYWORD3>\r
+                       <KEYWORD3>acelz</KEYWORD3>\r
+                       <KEYWORD3>omeg</KEYWORD3>\r
+                       <KEYWORD3>omegx</KEYWORD3>\r
+                       <KEYWORD3>omegy</KEYWORD3>\r
+                       <KEYWORD3>omegz</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- /PBF command -->\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>flue</KEYWORD3>\r
+                       <KEYWORD3>hgen</KEYWORD3>\r
+                       <KEYWORD3>js</KEYWORD3>\r
+                       <KEYWORD3>jsx</KEYWORD3>\r
+                       <KEYWORD3>jsy</KEYWORD3>\r
+                       <KEYWORD3>jsz</KEYWORD3>\r
+                       <KEYWORD3>phase</KEYWORD3>\r
+                       <KEYWORD3>mvdi</KEYWORD3>\r
+                       <KEYWORD3>chrgd</KEYWORD3>\r
+                       <KEYWORD3>vltg</KEYWORD3>\r
+                       <KEYWORD3>forc</KEYWORD3>\r
+\r
+                       <!-- PCALC command -->\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>mult</KEYWORD3>\r
+                       <KEYWORD3>div</KEYWORD3>\r
+                       <KEYWORD3>exp</KEYWORD3>\r
+                       <KEYWORD3>deri</KEYWORD3>\r
+                       <KEYWORD3>intg</KEYWORD3>\r
+                       <KEYWORD3>sin</KEYWORD3>\r
+                       <KEYWORD3>cos</KEYWORD3>\r
+                       <KEYWORD3>asin</KEYWORD3>\r
+                       <KEYWORD3>acos</KEYWORD3>\r
+                       <KEYWORD3>log</KEYWORD3>\r
+\r
+                       <!-- PCONV command -->\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>erase</KEYWORD3>\r
+                       <KEYWORD3>dele</KEYWORD3>\r
+                       <KEYWORD3>se</KEYWORD3>\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>eqv</KEYWORD3>\r
+                       <KEYWORD3>sum</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>top</KEYWORD3>\r
+                       <KEYWORD3>mid</KEYWORD3>\r
+                       <KEYWORD3>bot</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>xy</KEYWORD3>\r
+                       <KEYWORD3>yz</KEYWORD3>\r
+                       <KEYWORD3>xz</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+\r
+                       <!-- /PCOPY command -->\r
+                       <KEYWORD3>now</KEYWORD3>\r
+\r
+                       <!-- PDEF command -->\r
+                       <KEYWORD3>avg</KEYWORD3>\r
+                       <KEYWORD3>noav</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>sum</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>curr</KEYWORD3>\r
+                       <KEYWORD3>emf</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>xy</KEYWORD3>\r
+                       <KEYWORD3>yz</KEYWORD3>\r
+                       <KEYWORD3>xz</KEYWORD3>\r
+                       <KEYWORD3>eqv</KEYWORD3>\r
+                       <KEYWORD3>epto</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>epth</KEYWORD3>\r
+                       <KEYWORD3>epsw</KEYWORD3>\r
+                       <KEYWORD3>nl</KEYWORD3>\r
+                       <KEYWORD3>sepl</KEYWORD3>\r
+                       <KEYWORD3>srat</KEYWORD3>\r
+                       <KEYWORD3>hpres</KEYWORD3>\r
+                       <KEYWORD3>epeq</KEYWORD3>\r
+                       <KEYWORD3>psv</KEYWORD3>\r
+                       <KEYWORD3>plwk</KEYWORD3>\r
+                       <KEYWORD3>tg</KEYWORD3>\r
+                       <KEYWORD3>tf</KEYWORD3>\r
+                       <KEYWORD3>pg</KEYWORD3>\r
+                       <KEYWORD3>ef</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>h</KEYWORD3>\r
+                       <KEYWORD3>b</KEYWORD3>\r
+                       <KEYWORD3>fmag</KEYWORD3>\r
+                       <KEYWORD3>etab</KEYWORD3>\r
+                       <KEYWORD3>bfe</KEYWORD3>\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+                       <KEYWORD3>hflu</KEYWORD3>\r
+                       <KEYWORD3>hflm</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>pcoe</KEYWORD3>\r
+                       <KEYWORD3>ptot</KEYWORD3>\r
+                       <KEYWORD3>mach</KEYWORD3>\r
+                       <KEYWORD3>strm</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>cmuv</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>yplu</KEYWORD3>\r
+                       <KEYWORD3>tauw</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+\r
+                       <!-- PDRAG command -->\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+\r
+                       <!-- PEXCLUDE command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- PFACT command -->\r
+                       <KEYWORD3>base</KEYWORD3>\r
+                       <KEYWORD3>node</KEYWORD3>\r
+                       <KEYWORD3>wave</KEYWORD3>\r
+                       <KEYWORD3>spat</KEYWORD3>\r
+\r
+                       <!-- PHYSICS command -->\r
+                       <KEYWORD3>write</KEYWORD3>\r
+                       <KEYWORD3>read</KEYWORD3>\r
+                       <KEYWORD3>list</KEYWORD3>\r
+                       <KEYWORD3>delete</KEYWORD3>\r
+                       <KEYWORD3>clear</KEYWORD3>\r
+                       <KEYWORD3>status</KEYWORD3>\r
+\r
+                       <!-- PINCLUDE command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- PIVCHECK command -->\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+\r
+                       <!-- PLCONV command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>se</KEYWORD3>\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>top</KEYWORD3>\r
+                       <KEYWORD3>mid</KEYWORD3>\r
+                       <KEYWORD3>bot</KEYWORD3>\r
+                       <KEYWORD3>xy</KEYWORD3>\r
+                       <KEYWORD3>yz</KEYWORD3>\r
+                       <KEYWORD3>xz</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>eqv</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+\r
+                       <!-- PLESOL command -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>xy</KEYWORD3>\r
+                       <KEYWORD3>yz</KEYWORD3>\r
+                       <KEYWORD3>xz</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>eqv</KEYWORD3>\r
+                       <KEYWORD3>epto</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>epth</KEYWORD3>\r
+                       <KEYWORD3>epsw</KEYWORD3>\r
+                       <KEYWORD3>nl</KEYWORD3>\r
+                       <KEYWORD3>sepl</KEYWORD3>\r
+                       <KEYWORD3>srat</KEYWORD3>\r
+                       <KEYWORD3>hpres</KEYWORD3>\r
+                       <KEYWORD3>epeq</KEYWORD3>\r
+                       <KEYWORD3>psv</KEYWORD3>\r
+                       <KEYWORD3>plwk</KEYWORD3>\r
+                       <KEYWORD3>cont</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>pene</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>sfric</KEYWORD3>\r
+                       <KEYWORD3>stot</KEYWORD3>\r
+                       <KEYWORD3>slide</KEYWORD3>\r
+                       <KEYWORD3>gap</KEYWORD3>\r
+                       <KEYWORD3>tg</KEYWORD3>\r
+                       <KEYWORD3>tf</KEYWORD3>\r
+                       <KEYWORD3>pg</KEYWORD3>\r
+                       <KEYWORD3>ef</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>h</KEYWORD3>\r
+                       <KEYWORD3>b</KEYWORD3>\r
+                       <KEYWORD3>fmag</KEYWORD3>\r
+                       <KEYWORD3>serr</KEYWORD3>\r
+                       <KEYWORD3>sdsg</KEYWORD3>\r
+                       <KEYWORD3>terr</KEYWORD3>\r
+                       <KEYWORD3>tdsg</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+                       <KEYWORD3>,m</KEYWORD3>\r
+                       <KEYWORD3>heat</KEYWORD3>\r
+                       <KEYWORD3>flow</KEYWORD3>\r
+                       <KEYWORD3>amps</KEYWORD3>\r
+                       <KEYWORD3>flux</KEYWORD3>\r
+                       <KEYWORD3>vf</KEYWORD3>\r
+                       <KEYWORD3>csg</KEYWORD3>\r
+                       <KEYWORD3>sene</KEYWORD3>\r
+                       <KEYWORD3>tene</KEYWORD3>\r
+                       <KEYWORD3>kene</KEYWORD3>\r
+                       <KEYWORD3>jheat</KEYWORD3>\r
+                       <KEYWORD3>js</KEYWORD3>\r
+                       <KEYWORD3>jt</KEYWORD3>\r
+                       <KEYWORD3>mre</KEYWORD3>\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>cent</KEYWORD3>\r
+                       <KEYWORD3>bfe</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>smisc</KEYWORD3>\r
+                       <KEYWORD3>nmisc</KEYWORD3>\r
+                       <KEYWORD3>topo</KEYWORD3>\r
+\r
+                       <!-- PLETAB command -->\r
+                       <KEYWORD3>noav</KEYWORD3>\r
+                       <KEYWORD3>avg</KEYWORD3>\r
+\r
+                       <!-- PLNSOL command -->\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>sum</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>sp01</KEYWORD3>\r
+                       <KEYWORD3>sp02</KEYWORD3>\r
+                       <KEYWORD3>sp03</KEYWORD3>\r
+                       <KEYWORD3>sp04</KEYWORD3>\r
+                       <KEYWORD3>sp05</KEYWORD3>\r
+                       <KEYWORD3>sp06</KEYWORD3>\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>eqv</KEYWORD3>\r
+                       <KEYWORD3>epto</KEYWORD3>\r
+                       <KEYWORD3>xy</KEYWORD3>\r
+                       <KEYWORD3>yz</KEYWORD3>\r
+                       <KEYWORD3>xz</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>epth</KEYWORD3>\r
+                       <KEYWORD3>epsw</KEYWORD3>\r
+                       <KEYWORD3>nl</KEYWORD3>\r
+                       <KEYWORD3>sepl</KEYWORD3>\r
+                       <KEYWORD3>srat</KEYWORD3>\r
+                       <KEYWORD3>hpres</KEYWORD3>\r
+                       <KEYWORD3>epeq</KEYWORD3>\r
+                       <KEYWORD3>psv</KEYWORD3>\r
+                       <KEYWORD3>plwk</KEYWORD3>\r
+                       <KEYWORD3>cont</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>pene</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>sfric</KEYWORD3>\r
+                       <KEYWORD3>stot</KEYWORD3>\r
+                       <KEYWORD3>slide</KEYWORD3>\r
+                       <KEYWORD3>gap</KEYWORD3>\r
+                       <KEYWORD3>tg</KEYWORD3>\r
+                       <KEYWORD3>tf</KEYWORD3>\r
+                       <KEYWORD3>pg</KEYWORD3>\r
+                       <KEYWORD3>ef</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>h</KEYWORD3>\r
+                       <KEYWORD3>b</KEYWORD3>\r
+                       <KEYWORD3>fmag</KEYWORD3>\r
+                       <KEYWORD3>bfe</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>topo</KEYWORD3>\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+                       <KEYWORD3>hflu</KEYWORD3>\r
+                       <KEYWORD3>hflm</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>pcoe</KEYWORD3>\r
+                       <KEYWORD3>ptot</KEYWORD3>\r
+                       <KEYWORD3>mach</KEYWORD3>\r
+                       <KEYWORD3>strm</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>cmuv</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>yplu</KEYWORD3>\r
+                       <KEYWORD3>tauw</KEYWORD3>\r
+                       <KEYWORD3>lmd1</KEYWORD3>\r
+                       <KEYWORD3>lmd2</KEYWORD3>\r
+                       <KEYWORD3>lmd3</KEYWORD3>\r
+                       <KEYWORD3>lmd4</KEYWORD3>\r
+                       <KEYWORD3>lmd5</KEYWORD3>\r
+                       <KEYWORD3>lmd6</KEYWORD3>\r
+                       <KEYWORD3>emd1</KEYWORD3>\r
+                       <KEYWORD3>emd2</KEYWORD3>\r
+                       <KEYWORD3>emd3</KEYWORD3>\r
+                       <KEYWORD3>emd4</KEYWORD3>\r
+                       <KEYWORD3>emd5</KEYWORD3>\r
+                       <KEYWORD3>emd6</KEYWORD3>\r
+\r
+                       <!-- /PLOPTS command -->\r
+                       <KEYWORD3>leg1</KEYWORD3>\r
+                       <KEYWORD3>leg2</KEYWORD3>\r
+                       <KEYWORD3>info</KEYWORD3>\r
+                       <KEYWORD3>frame</KEYWORD3>\r
+                       <KEYWORD3>title</KEYWORD3>\r
+                       <KEYWORD3>minm</KEYWORD3>\r
+                       <KEYWORD3>logo</KEYWORD3>\r
+                       <KEYWORD3>wins</KEYWORD3>\r
+                       <KEYWORD3>wp</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>auto</KEYWORD3>\r
+\r
+                       <!-- PLOT command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- PLPAGM command -->\r
+                       <KEYWORD3>node</KEYWORD3>\r
+\r
+                       <!-- PLPATH command -->\r
+                       <KEYWORD3>xg</KEYWORD3>\r
+                       <KEYWORD3>yg</KEYWORD3>\r
+                       <KEYWORD3>zg</KEYWORD3>\r
+                       <KEYWORD3>s</KEYWORD3>\r
+\r
+                       <!-- PLSECT command -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>xy</KEYWORD3>\r
+                       <KEYWORD3>yz</KEYWORD3>\r
+                       <KEYWORD3>xz</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>eqv</KEYWORD3>\r
+\r
+                       <!-- PLTRAC command -->\r
+                       <KEYWORD3>fluid</KEYWORD3>\r
+                       <KEYWORD3>elec</KEYWORD3>\r
+                       <KEYWORD3>magn</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>sum</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>pcoe</KEYWORD3>\r
+                       <KEYWORD3>ptot</KEYWORD3>\r
+                       <KEYWORD3>mach</KEYWORD3>\r
+                       <KEYWORD3>strm</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>cmuv</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+\r
+                       <!-- PLVECT command -->\r
+                       <KEYWORD3>rast</KEYWORD3>\r
+                       <KEYWORD3>vect</KEYWORD3>\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>node</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>epto</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>epth</KEYWORD3>\r
+                       <KEYWORD3>tg</KEYWORD3>\r
+                       <KEYWORD3>tf</KEYWORD3>\r
+                       <KEYWORD3>pg</KEYWORD3>\r
+                       <KEYWORD3>ef</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>h</KEYWORD3>\r
+                       <KEYWORD3>b</KEYWORD3>\r
+                       <KEYWORD3>fmag</KEYWORD3>\r
+                       <KEYWORD3>js</KEYWORD3>\r
+                       <KEYWORD3>jt</KEYWORD3>\r
+\r
+                       <!-- PMAP command -->\r
+                       <KEYWORD3>uniform</KEYWORD3>\r
+                       <KEYWORD3>accurate</KEYWORD3>\r
+\r
+                       <!-- /PMETH command -->\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+\r
+                       <!-- /PNUM command -->\r
+                       <KEYWORD3>node</KEYWORD3>\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>,mat</KEYWORD3>\r
+                       <KEYWORD3>,type</KEYWORD3>\r
+                       <KEYWORD3>,real</KEYWORD3>\r
+                       <KEYWORD3>,esys</KEYWORD3>\r
+                       <KEYWORD3>loc</KEYWORD3>\r
+                       <KEYWORD3>kp</KEYWORD3>\r
+                       <KEYWORD3>line</KEYWORD3>\r
+                       <KEYWORD3>area</KEYWORD3>\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>sval</KEYWORD3>\r
+                       <KEYWORD3>tabnam</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- POPT command -->\r
+                       <KEYWORD3>b31.1</KEYWORD3>\r
+                       <KEYWORD3>nc</KEYWORD3>\r
+\r
+                       <!-- PORTOPT command -->\r
+                       <KEYWORD3>coax</KEYWORD3>\r
+                       <KEYWORD3>te10</KEYWORD3>\r
+                       <KEYWORD3>te11circ</KEYWORD3>\r
+                       <KEYWORD3>tm01circ</KEYWORD3>\r
+\r
+                       <!-- PPATH command -->\r
+                       <KEYWORD3>pick</KEYWORD3>\r
+\r
+                       <!-- PRED command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- PRESOL command -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>epto</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>epsw</KEYWORD3>\r
+                       <KEYWORD3>nl</KEYWORD3>\r
+                       <KEYWORD3>cont</KEYWORD3>\r
+                       <KEYWORD3>tg</KEYWORD3>\r
+                       <KEYWORD3>tf</KEYWORD3>\r
+                       <KEYWORD3>pg</KEYWORD3>\r
+                       <KEYWORD3>ef</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>h</KEYWORD3>\r
+                       <KEYWORD3>b</KEYWORD3>\r
+                       <KEYWORD3>fmag</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+                       <KEYWORD3>,m</KEYWORD3>\r
+                       <KEYWORD3>heat</KEYWORD3>\r
+                       <KEYWORD3>flow</KEYWORD3>\r
+                       <KEYWORD3>amps</KEYWORD3>\r
+                       <KEYWORD3>flux</KEYWORD3>\r
+                       <KEYWORD3>vf</KEYWORD3>\r
+                       <KEYWORD3>csg</KEYWORD3>\r
+                       <KEYWORD3>forc</KEYWORD3>\r
+                       <KEYWORD3>bfe</KEYWORD3>\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>serr</KEYWORD3>\r
+                       <KEYWORD3>sdsg</KEYWORD3>\r
+                       <KEYWORD3>terr</KEYWORD3>\r
+                       <KEYWORD3>tdsg</KEYWORD3>\r
+                       <KEYWORD3>sene</KEYWORD3>\r
+                       <KEYWORD3>tene</KEYWORD3>\r
+                       <KEYWORD3>kene</KEYWORD3>\r
+                       <KEYWORD3>jheat</KEYWORD3>\r
+                       <KEYWORD3>js</KEYWORD3>\r
+                       <KEYWORD3>jt</KEYWORD3>\r
+                       <KEYWORD3>mre</KEYWORD3>\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>cent</KEYWORD3>\r
+                       <KEYWORD3>smisc</KEYWORD3>\r
+                       <KEYWORD3>nmisc</KEYWORD3>\r
+                       <KEYWORD3>topo</KEYWORD3>\r
+\r
+                       <!-- PRNLD, PRRFOR, PRRSOL commands -->\r
+                       <KEYWORD3>fx</KEYWORD3>\r
+                       <KEYWORD3>fy</KEYWORD3>\r
+                       <KEYWORD3>fz</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+                       <KEYWORD3>mx</KEYWORD3>\r
+                       <KEYWORD3>ym</KEYWORD3>\r
+                       <KEYWORD3>mz</KEYWORD3>\r
+                       <KEYWORD3>,m</KEYWORD3>\r
+                       <KEYWORD3>heat</KEYWORD3>\r
+                       <KEYWORD3>flow</KEYWORD3>\r
+                       <KEYWORD3>vfx</KEYWORD3>\r
+                       <KEYWORD3>vfy</KEYWORD3>\r
+                       <KEYWORD3>vfz</KEYWORD3>\r
+                       <KEYWORD3>vf</KEYWORD3>\r
+                       <KEYWORD3>amps</KEYWORD3>\r
+                       <KEYWORD3>curt</KEYWORD3>\r
+                       <KEYWORD3>vltg</KEYWORD3>\r
+                       <KEYWORD3>flux</KEYWORD3>\r
+                       <KEYWORD3>csgx</KEYWORD3>\r
+                       <KEYWORD3>csgy</KEYWORD3>\r
+                       <KEYWORD3>csgz</KEYWORD3>\r
+                       <KEYWORD3>csg</KEYWORD3>\r
+\r
+                       <!-- PRNSOL, PRSSOL commands -->\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>comp</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>curr</KEYWORD3>\r
+                       <KEYWORD3>emf</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>sp01</KEYWORD3>\r
+                       <KEYWORD3>sp02</KEYWORD3>\r
+                       <KEYWORD3>sp03</KEYWORD3>\r
+                       <KEYWORD3>sp04</KEYWORD3>\r
+                       <KEYWORD3>sp05</KEYWORD3>\r
+                       <KEYWORD3>sp06</KEYWORD3>\r
+                       <KEYWORD3>dof</KEYWORD3>\r
+\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>comp</KEYWORD3>\r
+                       <KEYWORD3>prin</KEYWORD3>\r
+                       <KEYWORD3>epto</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>epth</KEYWORD3>\r
+                       <KEYWORD3>epsw</KEYWORD3>\r
+                       <KEYWORD3>nl</KEYWORD3>\r
+                       <KEYWORD3>cont</KEYWORD3>\r
+                       <KEYWORD3>tg</KEYWORD3>\r
+                       <KEYWORD3>tf</KEYWORD3>\r
+                       <KEYWORD3>pg</KEYWORD3>\r
+                       <KEYWORD3>ef</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>h</KEYWORD3>\r
+                       <KEYWORD3>b</KEYWORD3>\r
+                       <KEYWORD3>fmag</KEYWORD3>\r
+                       <KEYWORD3>bfe</KEYWORD3>\r
+                       <KEYWORD3>topo</KEYWORD3>\r
+\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+                       <KEYWORD3>hflu</KEYWORD3>\r
+                       <KEYWORD3>hflm</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>pcoe</KEYWORD3>\r
+                       <KEYWORD3>ptot</KEYWORD3>\r
+                       <KEYWORD3>mach</KEYWORD3>\r
+                       <KEYWORD3>strm</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>spht</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>cmuv</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>yplu</KEYWORD3>\r
+                       <KEYWORD3>tauw</KEYWORD3>\r
+                       <KEYWORD3>lmd</KEYWORD3>\r
+                       <KEYWORD3>emd</KEYWORD3>\r
+\r
+                       <!-- PRVECT command -->\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>epto</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>epth</KEYWORD3>\r
+                       <KEYWORD3>tg</KEYWORD3>\r
+                       <KEYWORD3>tf</KEYWORD3>\r
+                       <KEYWORD3>pg</KEYWORD3>\r
+                       <KEYWORD3>ef</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>h</KEYWORD3>\r
+                       <KEYWORD3>b</KEYWORD3>\r
+                       <KEYWORD3>fmag</KEYWORD3>\r
+                       <KEYWORD3>js</KEYWORD3>\r
+                       <KEYWORD3>jt</KEYWORD3>\r
+\r
+                       <!-- PSCR command -->\r
+                       <KEYWORD3>cmap</KEYWORD3>\r
+                       <KEYWORD3>lwid</KEYWORD3>\r
+                       <KEYWORD3>color</KEYWORD3>\r
+                       <KEYWORD3>tranx</KEYWORD3>\r
+                       <KEYWORD3>trany</KEYWORD3>\r
+                       <KEYWORD3>rotate</KEYWORD3>\r
+                       <KEYWORD3>scale</KEYWORD3>\r
+                       <KEYWORD3>tiff</KEYWORD3>\r
+                       <KEYWORD3>epsi</KEYWORD3>\r
+\r
+                       <!-- PSDRES command -->\r
+                       <KEYWORD3>disp</KEYWORD3>\r
+                       <KEYWORD3>velo</KEYWORD3>\r
+                       <KEYWORD3>acel</KEYWORD3>\r
+                       <KEYWORD3>rel</KEYWORD3>\r
+                       <KEYWORD3>abs</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+\r
+                       <!-- PSDUNIT command -->\r
+                       <KEYWORD3>disp</KEYWORD3>\r
+                       <KEYWORD3>velo</KEYWORD3>\r
+                       <KEYWORD3>acel</KEYWORD3>\r
+                       <KEYWORD3>accg</KEYWORD3>\r
+                       <KEYWORD3>forc</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+\r
+                       <!-- /PSEARCH command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+\r
+                       <!-- PSEL command -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,r</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+                       <KEYWORD3>inv</KEYWORD3>\r
+\r
+                       <!-- /PSF command -->\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>norm</KEYWORD3>\r
+                       <KEYWORD3>tanx</KEYWORD3>\r
+                       <KEYWORD3>tany</KEYWORD3>\r
+                       <KEYWORD3>conv</KEYWORD3>\r
+                       <KEYWORD3>hcoef</KEYWORD3>\r
+                       <KEYWORD3>tbulk</KEYWORD3>\r
+                       <KEYWORD3>rad</KEYWORD3>\r
+                       <KEYWORD3>emis</KEYWORD3>\r
+                       <KEYWORD3>tamb</KEYWORD3>\r
+                       <KEYWORD3>hflux</KEYWORD3>\r
+                       <KEYWORD3>fsi</KEYWORD3>\r
+                       <KEYWORD3>impd</KEYWORD3>\r
+                       <KEYWORD3>shld</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>mur</KEYWORD3>\r
+                       <KEYWORD3>mxwf</KEYWORD3>\r
+                       <KEYWORD3>inf</KEYWORD3>\r
+                       <KEYWORD3>chrgs</KEYWORD3>\r
+                       <KEYWORD3>mci</KEYWORD3>\r
+\r
+                       <!-- PSOLVE command -->\r
+                       <KEYWORD3>cgsol</KEYWORD3>\r
+                       <KEYWORD3>eigdamp</KEYWORD3>\r
+                       <KEYWORD3>eigexp</KEYWORD3>\r
+                       <KEYWORD3>eigfull</KEYWORD3>\r
+                       <KEYWORD3>eigreduc</KEYWORD3>\r
+                       <KEYWORD3>eigunsym</KEYWORD3>\r
+                       <KEYWORD3>elform</KEYWORD3>\r
+                       <KEYWORD3>elprep</KEYWORD3>\r
+                       <KEYWORD3>redwrite</KEYWORD3>\r
+                       <KEYWORD3>triang</KEYWORD3>\r
+\r
+                       <!-- PSPRNG command -->\r
+                       <KEYWORD3>tran</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+\r
+                       <!-- PSTRES command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- /PSYMB command -->\r
+                       <KEYWORD3>cs</KEYWORD3>\r
+                       <KEYWORD3>ndir</KEYWORD3>\r
+                       <KEYWORD3>,esys</KEYWORD3>\r
+                       <KEYWORD3>ldir</KEYWORD3>\r
+                       <KEYWORD3>layr</KEYWORD3>\r
+                       <KEYWORD3>pcon</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>dot</KEYWORD3>\r
+                       <KEYWORD3>xnod</KEYWORD3>\r
+                       <KEYWORD3>defa</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+\r
+                       <!-- PTEMP command -->\r
+                       <KEYWORD3>none</KEYWORD3>\r
+\r
+                       <!-- PTXY command -->\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>dele</KEYWORD3>\r
+\r
+                       <!-- PUNIT command -->\r
+                       <KEYWORD3>ftin</KEYWORD3>\r
+                       <KEYWORD3>metric</KEYWORD3>\r
+\r
+                       <!-- PVECT command -->\r
+                       <KEYWORD3>norm</KEYWORD3>\r
+                       <KEYWORD3>tang</KEYWORD3>\r
+                       <KEYWORD3>radi</KEYWORD3>\r
+\r
+                       <!-- QUAD command -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- /RATIO command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- RBE3 command -->\r
+                       <KEYWORD3>ux</KEYWORD3>\r
+                       <KEYWORD3>uy</KEYWORD3>\r
+                       <KEYWORD3>uz</KEYWORD3>\r
+                       <KEYWORD3>rotx</KEYWORD3>\r
+                       <KEYWORD3>roty</KEYWORD3>\r
+                       <KEYWORD3>rotz</KEYWORD3>\r
+                       <KEYWORD3>uxyz</KEYWORD3>\r
+                       <KEYWORD3>rxyz</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- RDELE command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- /REPLOT command -->\r
+                       <KEYWORD3>resize</KEYWORD3>\r
+                       <KEYWORD3>fast</KEYWORD3>\r
+\r
+                       <!-- REXPORT command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>dyna</KEYWORD3>\r
+\r
+                       <!-- RFORCE command -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>,f</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>,m</KEYWORD3>\r
+                       <KEYWORD3>heat</KEYWORD3>\r
+                       <KEYWORD3>flow</KEYWORD3>\r
+                       <KEYWORD3>amps</KEYWORD3>\r
+                       <KEYWORD3>flux</KEYWORD3>\r
+                       <KEYWORD3>vf</KEYWORD3>\r
+                       <KEYWORD3>csg</KEYWORD3>\r
+                       <KEYWORD3>vltg</KEYWORD3>\r
+                       <KEYWORD3>durt</KEYWORD3>\r
+\r
+                       <!-- /RGB command -->\r
+                       <KEYWORD3>index</KEYWORD3>\r
+                       <KEYWORD3>cntr</KEYWORD3>\r
+\r
+                       <!-- RIGID command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>ux</KEYWORD3>\r
+                       <KEYWORD3>uy</KEYWORD3>\r
+                       <KEYWORD3>uz</KEYWORD3>\r
+                       <KEYWORD3>rotx</KEYWORD3>\r
+                       <KEYWORD3>roty</KEYWORD3>\r
+                       <KEYWORD3>rotz</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- RIMPORT command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>dyna</KEYWORD3>\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>stress</KEYWORD3>\r
+\r
+                       <!-- RLIST command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- RSYS command -->\r
+                       <KEYWORD3>solu</KEYWORD3>\r
+\r
+                       <!-- SARPLOT command -->\r
+                       <KEYWORD3>factor</KEYWORD3>\r
+                       <KEYWORD3>area</KEYWORD3>\r
+                       <KEYWORD3>narrow</KEYWORD3>\r
+\r
+                       <!-- /SECLIB command -->\r
+                       <KEYWORD3>read</KEYWORD3>\r
+                       <KEYWORD3>status</KEYWORD3>\r
+\r
+                       <!-- SECOFFSET command -->\r
+                       <KEYWORD3>cent</KEYWORD3>\r
+                       <KEYWORD3>shrc</KEYWORD3>\r
+                       <KEYWORD3>origin</KEYWORD3>\r
+                       <KEYWORD3>user</KEYWORD3>\r
+\r
+                       <!-- SECREAD, SECWRITE commands -->\r
+                       <KEYWORD3>library</KEYWORD3>\r
+                       <KEYWORD3>mesh</KEYWORD3>\r
+\r
+                       <!-- SECTYPE command -->\r
+                       <KEYWORD3>beam</KEYWORD3>\r
+                       <KEYWORD3>rect</KEYWORD3>\r
+                       <KEYWORD3>quad</KEYWORD3>\r
+                       <KEYWORD3>csolid</KEYWORD3>\r
+                       <KEYWORD3>ctube</KEYWORD3>\r
+                       <KEYWORD3>chan</KEYWORD3>\r
+                       <KEYWORD3>i</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>,l</KEYWORD3>\r
+                       <KEYWORD3>t</KEYWORD3>\r
+                       <KEYWORD3>hats</KEYWORD3>\r
+                       <KEYWORD3>hrec</KEYWORD3>\r
+                       <KEYWORD3>asec</KEYWORD3>\r
+                       <KEYWORD3>mesh</KEYWORD3>\r
+\r
+                       <!-- SEDLIST command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- SEEXP command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- /SEG command -->\r
+                       <KEYWORD3>singl</KEYWORD3>\r
+                       <KEYWORD3>multi</KEYWORD3>\r
+                       <KEYWORD3>delet</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>pc</KEYWORD3>\r
+\r
+                       <!-- SESYMM command -->\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+\r
+                       <!-- *SET command -->\r
+\r
+                       <!-- SET command -->\r
+                       <KEYWORD3>first</KEYWORD3>\r
+                       <KEYWORD3>last</KEYWORD3>\r
+                       <KEYWORD3>next</KEYWORD3>\r
+                       <KEYWORD3>near</KEYWORD3>\r
+                       <KEYWORD3>list</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+\r
+                       <!-- SF command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>conv</KEYWORD3>\r
+                       <KEYWORD3>hflux</KEYWORD3>\r
+                       <KEYWORD3>rad</KEYWORD3>\r
+                       <KEYWORD3>fsi</KEYWORD3>\r
+                       <KEYWORD3>impd</KEYWORD3>\r
+                       <KEYWORD3>ptot</KEYWORD3>\r
+                       <KEYWORD3>mxwf</KEYWORD3>\r
+                       <KEYWORD3>mci</KEYWORD3>\r
+                       <KEYWORD3>chrgs</KEYWORD3>\r
+                       <KEYWORD3>inf</KEYWORD3>\r
+                       <KEYWORD3>port</KEYWORD3>\r
+                       <KEYWORD3>shld</KEYWORD3>\r
+\r
+                       <!-- SFA command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>conv</KEYWORD3>\r
+                       <KEYWORD3>hflux</KEYWORD3>\r
+                       <KEYWORD3>rad</KEYWORD3>\r
+                       <KEYWORD3>fsi</KEYWORD3>\r
+                       <KEYWORD3>impd</KEYWORD3>\r
+                       <KEYWORD3>mxwf</KEYWORD3>\r
+                       <KEYWORD3>mci</KEYWORD3>\r
+                       <KEYWORD3>mxwf</KEYWORD3>\r
+                       <KEYWORD3>chrgs</KEYWORD3>\r
+                       <KEYWORD3>inf</KEYWORD3>\r
+                       <KEYWORD3>port</KEYWORD3>\r
+                       <KEYWORD3>shld</KEYWORD3>\r
+\r
+                       <!-- SFACT command -->\r
+                       <KEYWORD3>,sf</KEYWORD3>\r
+                       <KEYWORD3>ms</KEYWORD3>\r
+\r
+                       <!-- SFADELE, SFALIST, SFBEAM commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- SFCUM command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>conv</KEYWORD3>\r
+                       <KEYWORD3>hflux</KEYWORD3>\r
+                       <KEYWORD3>selv</KEYWORD3>\r
+                       <KEYWORD3>chrgs</KEYWORD3>\r
+                       <KEYWORD3>mxwf</KEYWORD3>\r
+                       <KEYWORD3>inf</KEYWORD3>\r
+                       <KEYWORD3>repl</KEYWORD3>\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>igno</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+\r
+                       <!-- SFDELE command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>conv</KEYWORD3>\r
+                       <KEYWORD3>hflux</KEYWORD3>\r
+                       <KEYWORD3>rad</KEYWORD3>\r
+                       <KEYWORD3>mxwf</KEYWORD3>\r
+                       <KEYWORD3>chrgs</KEYWORD3>\r
+                       <KEYWORD3>mci</KEYWORD3>\r
+                       <KEYWORD3>inf</KEYWORD3>\r
+                       <KEYWORD3>selv</KEYWORD3>\r
+                       <KEYWORD3>fsi</KEYWORD3>\r
+                       <KEYWORD3>impd</KEYWORD3>\r
+                       <KEYWORD3>port</KEYWORD3>\r
+                       <KEYWORD3>shld</KEYWORD3>\r
+\r
+                       <!-- SFE, SFEDELE, SFELIST commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>conv</KEYWORD3>\r
+                       <KEYWORD3>hflux</KEYWORD3>\r
+                       <KEYWORD3>rad</KEYWORD3>\r
+                       <KEYWORD3>mxwf</KEYWORD3>\r
+                       <KEYWORD3>chrgs</KEYWORD3>\r
+                       <KEYWORD3>mci</KEYWORD3>\r
+                       <KEYWORD3>inf</KEYWORD3>\r
+                       <KEYWORD3>selv</KEYWORD3>\r
+                       <KEYWORD3>fsi</KEYWORD3>\r
+                       <KEYWORD3>impd</KEYWORD3>\r
+                       <KEYWORD3>port</KEYWORD3>\r
+                       <KEYWORD3>shld</KEYWORD3>\r
+\r
+                       <!-- SFFUN, SFGRAD commands -->\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>conv</KEYWORD3>\r
+                       <KEYWORD3>hflux</KEYWORD3>\r
+                       <KEYWORD3>chrgs</KEYWORD3>\r
+                       <KEYWORD3>status</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+\r
+                       <!-- SFL, SFLDELE, SFLIST, SFLLIST, SFSCALE commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>conv</KEYWORD3>\r
+                       <KEYWORD3>hflux</KEYWORD3>\r
+                       <KEYWORD3>rad</KEYWORD3>\r
+                       <KEYWORD3>fsi</KEYWORD3>\r
+                       <KEYWORD3>impd</KEYWORD3>\r
+                       <KEYWORD3>mci</KEYWORD3>\r
+                       <KEYWORD3>mxwf</KEYWORD3>\r
+                       <KEYWORD3>chrgs</KEYWORD3>\r
+                       <KEYWORD3>inf</KEYWORD3>\r
+                       <KEYWORD3>port</KEYWORD3>\r
+                       <KEYWORD3>shdl</KEYWORD3>\r
+                       <KEYWORD3>selv</KEYWORD3>\r
+\r
+                       <!-- /SHADE command -->\r
+                       <KEYWORD3>facet</KEYWORD3>\r
+                       <KEYWORD3>gouraud</KEYWORD3>\r
+                       <KEYWORD3>phong</KEYWORD3>\r
+\r
+                       <!-- SHELL command -->\r
+                       <KEYWORD3>top</KEYWORD3>\r
+                       <KEYWORD3>mid</KEYWORD3>\r
+                       <KEYWORD3>bot</KEYWORD3>\r
+\r
+                       <!-- /SHOW command -->\r
+                       <KEYWORD3>term</KEYWORD3>\r
+                       <KEYWORD3>file</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>pscr</KEYWORD3>\r
+                       <KEYWORD3>hpgl</KEYWORD3>\r
+                       <KEYWORD3>hpgl2</KEYWORD3>\r
+                       <KEYWORD3>vrml</KEYWORD3>\r
+\r
+                       <!-- /SHOWDISP command -->\r
+                       <KEYWORD3>hpgl</KEYWORD3>\r
+                       <KEYWORD3>hpgl2</KEYWORD3>\r
+                       <KEYWORD3>interleaf</KEYWORD3>\r
+                       <KEYWORD3>postscript</KEYWORD3>\r
+                       <KEYWORD3>dump</KEYWORD3>\r
+\r
+                       <!-- SHPP command -->\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>warn</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>silent</KEYWORD3>\r
+                       <KEYWORD3>status</KEYWORD3>\r
+                       <KEYWORD3>summary</KEYWORD3>\r
+                       <KEYWORD3>default</KEYWORD3>\r
+                       <KEYWORD3>object</KEYWORD3>\r
+                       <KEYWORD3>modify</KEYWORD3>\r
+                       <KEYWORD3>angd</KEYWORD3>\r
+                       <KEYWORD3>aspect</KEYWORD3>\r
+                       <KEYWORD3>paral</KEYWORD3>\r
+                       <KEYWORD3>maxang</KEYWORD3>\r
+                       <KEYWORD3>jacrat</KEYWORD3>\r
+                       <KEYWORD3>warp</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>yes</KEYWORD3>\r
+                       <KEYWORD3>no</KEYWORD3>\r
+\r
+                       <!-- SLPPLOT, SLSPLOT commands -->\r
+                       <KEYWORD3>factor</KEYWORD3>\r
+                       <KEYWORD3>radius</KEYWORD3>\r
+                       <KEYWORD3>length</KEYWORD3>\r
+\r
+                       <!-- SMRTSIZE command -->\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>defa</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- SOLCONTROL command -->\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+\r
+                       <!-- SOLU command -->\r
+                       <KEYWORD3>allf</KEYWORD3>\r
+                       <KEYWORD3>aldlf</KEYWORD3>\r
+                       <KEYWORD3>arcl</KEYWORD3>\r
+                       <KEYWORD3>cnvg</KEYWORD3>\r
+                       <KEYWORD3>crprat</KEYWORD3>\r
+                       <KEYWORD3>cscv</KEYWORD3>\r
+                       <KEYWORD3>cucv</KEYWORD3>\r
+                       <KEYWORD3>dicv</KEYWORD3>\r
+                       <KEYWORD3>dsprm</KEYWORD3>\r
+                       <KEYWORD3>dtime</KEYWORD3>\r
+                       <KEYWORD3>eqit</KEYWORD3>\r
+                       <KEYWORD3>ffcv</KEYWORD3>\r
+                       <KEYWORD3>focv</KEYWORD3>\r
+                       <KEYWORD3>hfcv</KEYWORD3>\r
+                       <KEYWORD3>nc48</KEYWORD3>\r
+                       <KEYWORD3>nc49</KEYWORD3>\r
+                       <KEYWORD3>ncmit</KEYWORD3>\r
+                       <KEYWORD3>ncmls</KEYWORD3>\r
+                       <KEYWORD3>ncmss</KEYWORD3>\r
+                       <KEYWORD3>mfcv</KEYWORD3>\r
+                       <KEYWORD3>mocv</KEYWORD3>\r
+                       <KEYWORD3>mxdvl</KEYWORD3>\r
+                       <KEYWORD3>prcv</KEYWORD3>\r
+                       <KEYWORD3>psinc</KEYWORD3>\r
+                       <KEYWORD3>resfrq</KEYWORD3>\r
+                       <KEYWORD3>reseig</KEYWORD3>\r
+                       <KEYWORD3>rocv</KEYWORD3>\r
+                       <KEYWORD3>smcv</KEYWORD3>\r
+                       <KEYWORD3>tecv</KEYWORD3>\r
+                       <KEYWORD3>vecv</KEYWORD3>\r
+                       <KEYWORD3>vocv</KEYWORD3>\r
+                       <KEYWORD3>vmcv</KEYWORD3>\r
+\r
+                       <!-- SPOPT command -->\r
+                       <KEYWORD3>sprs</KEYWORD3>\r
+                       <KEYWORD3>mprs</KEYWORD3>\r
+                       <KEYWORD3>ddam</KEYWORD3>\r
+                       <KEYWORD3>psd</KEYWORD3>\r
+                       <KEYWORD3>no</KEYWORD3>\r
+                       <KEYWORD3>yes</KEYWORD3>\r
+\r
+                       <!-- SRSS command -->\r
+                       <KEYWORD3>disp</KEYWORD3>\r
+                       <KEYWORD3>velo</KEYWORD3>\r
+                       <KEYWORD3>acel</KEYWORD3>\r
+\r
+                       <!-- /SSCALE command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- SSTIF command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- *STATUS command -->\r
+                       <KEYWORD3>argx</KEYWORD3>\r
+\r
+                       <!-- /STATUS command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>title</KEYWORD3>\r
+                       <KEYWORD3>units</KEYWORD3>\r
+                       <KEYWORD3>mem</KEYWORD3>\r
+                       <KEYWORD3>db</KEYWORD3>\r
+                       <KEYWORD3>config</KEYWORD3>\r
+                       <KEYWORD3>global</KEYWORD3>\r
+                       <KEYWORD3>solu</KEYWORD3>\r
+                       <KEYWORD3>phys</KEYWORD3>\r
+\r
+                       <!-- STORE command -->\r
+                       <KEYWORD3>merge</KEYWORD3>\r
+                       <KEYWORD3>new</KEYWORD3>\r
+                       <KEYWORD3>appen</KEYWORD3>\r
+                       <KEYWORD3>alloc</KEYWORD3>\r
+                       <KEYWORD3>psd</KEYWORD3>\r
+\r
+                       <!-- SUBOPT command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>part</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+\r
+                       <!-- SUBSET command -->\r
+                       <KEYWORD3>first</KEYWORD3>\r
+                       <KEYWORD3>last</KEYWORD3>\r
+                       <KEYWORD3>next</KEYWORD3>\r
+                       <KEYWORD3>near</KEYWORD3>\r
+                       <KEYWORD3>list</KEYWORD3>\r
+                       <KEYWORD3>velo</KEYWORD3>\r
+                       <KEYWORD3>acel</KEYWORD3>\r
+\r
+                       <!-- SUMTYPE command -->\r
+                       <KEYWORD3>comp</KEYWORD3>\r
+                       <KEYWORD3>prin</KEYWORD3>\r
+\r
+                       <!-- TB command -->\r
+                       <KEYWORD3>bkin</KEYWORD3>\r
+                       <KEYWORD3>mkin</KEYWORD3>\r
+                       <KEYWORD3>miso</KEYWORD3>\r
+                       <KEYWORD3>biso</KEYWORD3>\r
+                       <KEYWORD3>aniso</KEYWORD3>\r
+                       <KEYWORD3>dp</KEYWORD3>\r
+                       <KEYWORD3>melas</KEYWORD3>\r
+                       <KEYWORD3>user</KEYWORD3>\r
+                       <KEYWORD3>kinh</KEYWORD3>\r
+                       <KEYWORD3>anand</KEYWORD3>\r
+                       <KEYWORD3>creep</KEYWORD3>\r
+                       <KEYWORD3>swell</KEYWORD3>\r
+                       <KEYWORD3>bh</KEYWORD3>\r
+                       <KEYWORD3>piez</KEYWORD3>\r
+                       <KEYWORD3>fail</KEYWORD3>\r
+                       <KEYWORD3>mooney</KEYWORD3>\r
+                       <KEYWORD3>water</KEYWORD3>\r
+                       <KEYWORD3>anel</KEYWORD3>\r
+                       <KEYWORD3>concr</KEYWORD3>\r
+                       <KEYWORD3>hflm</KEYWORD3>\r
+                       <KEYWORD3>fcon</KEYWORD3>\r
+                       <KEYWORD3>pflow</KEYWORD3>\r
+                       <KEYWORD3>evisc</KEYWORD3>\r
+                       <KEYWORD3>plaw</KEYWORD3>\r
+                       <KEYWORD3>foam</KEYWORD3>\r
+                       <KEYWORD3>honey</KEYWORD3>\r
+                       <KEYWORD3>comp</KEYWORD3>\r
+                       <KEYWORD3>nl</KEYWORD3>\r
+                       <KEYWORD3>eos</KEYWORD3>\r
+\r
+                       <!-- TBDELE, TBLIST commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- TBPLOT command -->\r
+                       <KEYWORD3>mkin</KEYWORD3>\r
+                       <KEYWORD3>kinh</KEYWORD3>\r
+                       <KEYWORD3>melas</KEYWORD3>\r
+                       <KEYWORD3>miso</KEYWORD3>\r
+                       <KEYWORD3>bkin</KEYWORD3>\r
+                       <KEYWORD3>biso</KEYWORD3>\r
+                       <KEYWORD3>bh</KEYWORD3>\r
+                       <KEYWORD3>nb</KEYWORD3>\r
+                       <KEYWORD3>mh</KEYWORD3>\r
+                       <KEYWORD3>sbh</KEYWORD3>\r
+                       <KEYWORD3>snb</KEYWORD3>\r
+                       <KEYWORD3>smh</KEYWORD3>\r
+\r
+                       <!-- TBPT command -->\r
+                       <KEYWORD3>defi</KEYWORD3>\r
+                       <KEYWORD3>dele</KEYWORD3>\r
+\r
+                       <!-- TEE command -->\r
+                       <KEYWORD3>wt</KEYWORD3>\r
+                       <KEYWORD3>uft</KEYWORD3>\r
+\r
+                       <!-- TERM command -->\r
+                       <KEYWORD3>copy</KEYWORD3>\r
+                       <KEYWORD3>loop</KEYWORD3>\r
+                       <KEYWORD3>noprom</KEYWORD3>\r
+\r
+                       <!-- TIMINT command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>struc</KEYWORD3>\r
+                       <KEYWORD3>therm</KEYWORD3>\r
+                       <KEYWORD3>elect</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>fluid</KEYWORD3>\r
+\r
+                       <!-- TIMP command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- TRANSFER command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- /TRIAD command -->\r
+                       <KEYWORD3>orig</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>lbot</KEYWORD3>\r
+                       <KEYWORD3>rbot</KEYWORD3>\r
+                       <KEYWORD3>ltop</KEYWORD3>\r
+                       <KEYWORD3>rtop</KEYWORD3>\r
+\r
+                       <!-- /TRLCY command -->\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>area</KEYWORD3>\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>isurf</KEYWORD3>\r
+                       <KEYWORD3>cm</KEYWORD3>\r
+                       <KEYWORD3>curve</KEYWORD3>\r
+\r
+                       <!-- TRNOPT command -->\r
+                       <KEYWORD3>full</KEYWORD3>\r
+                       <KEYWORD3>reduc</KEYWORD3>\r
+                       <KEYWORD3>msup</KEYWORD3>\r
+                       <KEYWORD3>damp</KEYWORD3>\r
+                       <KEYWORD3>nodamp</KEYWORD3>\r
+\r
+                       <!-- TRPDEL, TRPLIS, TRPOIN commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- TSHAP command -->\r
+                       <KEYWORD3>iine</KEYWORD3>\r
+                       <KEYWORD3>line</KEYWORD3>\r
+                       <KEYWORD3>para</KEYWORD3>\r
+                       <KEYWORD3>arc</KEYWORD3>\r
+                       <KEYWORD3>carc</KEYWORD3>\r
+                       <KEYWORD3>circ</KEYWORD3>\r
+                       <KEYWORD3>tria</KEYWORD3>\r
+                       <KEYWORD3>tri6</KEYWORD3>\r
+                       <KEYWORD3>quad</KEYWORD3>\r
+                       <KEYWORD3>qua8</KEYWORD3>\r
+                       <KEYWORD3>cyli</KEYWORD3>\r
+                       <KEYWORD3>cone</KEYWORD3>\r
+                       <KEYWORD3>sphe</KEYWORD3>\r
+                       <KEYWORD3>pilo</KEYWORD3>\r
+\r
+                       <!-- /TYPE command -->\r
+                       <KEYWORD3>basic</KEYWORD3>\r
+                       <KEYWORD3>sect</KEYWORD3>\r
+                       <KEYWORD3>hidc</KEYWORD3>\r
+                       <KEYWORD3>hidd</KEYWORD3>\r
+                       <KEYWORD3>hidp</KEYWORD3>\r
+                       <KEYWORD3>cap</KEYWORD3>\r
+                       <KEYWORD3>zbuf</KEYWORD3>\r
+                       <KEYWORD3>zcap</KEYWORD3>\r
+                       <KEYWORD3>zqsl</KEYWORD3>\r
+                       <KEYWORD3>hqsl</KEYWORD3>\r
+\r
+                       <!-- /UI command -->\r
+                       <KEYWORD3>help</KEYWORD3>\r
+                       <KEYWORD3>view</KEYWORD3>\r
+                       <KEYWORD3>wpse</KEYWORD3>\r
+                       <KEYWORD3>wpvi</KEYWORD3>\r
+                       <KEYWORD3>result</KEYWORD3>\r
+                       <KEYWORD3>query</KEYWORD3>\r
+                       <KEYWORD3>copy</KEYWORD3>\r
+                       <KEYWORD3>anno</KEYWORD3>\r
+                       <KEYWORD3>select</KEYWORD3>\r
+                       <KEYWORD3>,nsel</KEYWORD3>\r
+                       <KEYWORD3>,esel</KEYWORD3>\r
+                       <KEYWORD3>,ksel</KEYWORD3>\r
+                       <KEYWORD3>,lsel</KEYWORD3>\r
+                       <KEYWORD3>,asel</KEYWORD3>\r
+                       <KEYWORD3>,vsel</KEYWORD3>\r
+                       <KEYWORD3>refresh</KEYWORD3>\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,r</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>node</KEYWORD3>\r
+                       <KEYWORD3>element</KEYWORD3>\r
+                       <KEYWORD3>grid</KEYWORD3>\r
+                       <KEYWORD3>format</KEYWORD3>\r
+                       <KEYWORD3>pscr</KEYWORD3>\r
+                       <KEYWORD3>tiff</KEYWORD3>\r
+                       <KEYWORD3>epsi</KEYWORD3>\r
+                       <KEYWORD3>bmp</KEYWORD3>\r
+                       <KEYWORD3>wmf</KEYWORD3>\r
+                       <KEYWORD3>emf</KEYWORD3>\r
+                       <KEYWORD3>screen</KEYWORD3>\r
+                       <KEYWORD3>full</KEYWORD3>\r
+                       <KEYWORD3>graph</KEYWORD3>\r
+                       <KEYWORD3>color</KEYWORD3>\r
+                       <KEYWORD3>mono</KEYWORD3>\r
+                       <KEYWORD3>grey</KEYWORD3>\r
+                       <KEYWORD3>krev</KEYWORD3>\r
+                       <KEYWORD3>norm</KEYWORD3>\r
+                       <KEYWORD3>reverse</KEYWORD3>\r
+                       <KEYWORD3>orient</KEYWORD3>\r
+                       <KEYWORD3>landscape</KEYWORD3>\r
+                       <KEYWORD3>portrait</KEYWORD3>\r
+                       <KEYWORD3>compress</KEYWORD3>\r
+                       <KEYWORD3>yes</KEYWORD3>\r
+                       <KEYWORD3>no</KEYWORD3>\r
+\r
+                       <!-- /UIS command -->\r
+                       <KEYWORD3>msgpop</KEYWORD3>\r
+                       <KEYWORD3>replot</KEYWORD3>\r
+                       <KEYWORD3>abort</KEYWORD3>\r
+                       <KEYWORD3>dyna</KEYWORD3>\r
+                       <KEYWORD3>pick</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>defa</KEYWORD3>\r
+\r
+                       <!-- /UNITS command -->\r
+                       <KEYWORD3>user</KEYWORD3>\r
+                       <KEYWORD3>si</KEYWORD3>\r
+                       <KEYWORD3>cgs</KEYWORD3>\r
+                       <KEYWORD3>bft</KEYWORD3>\r
+                       <KEYWORD3>bin</KEYWORD3>\r
+\r
+                       <!-- UPCOORD command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+\r
+                       <!-- /USER command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- USRCAL command -->\r
+                       <KEYWORD3>usrefl</KEYWORD3>\r
+                       <KEYWORD3>userfl</KEYWORD3>\r
+                       <KEYWORD3>usercv</KEYWORD3>\r
+                       <KEYWORD3>userpr</KEYWORD3>\r
+                       <KEYWORD3>userfx</KEYWORD3>\r
+                       <KEYWORD3>userch</KEYWORD3>\r
+                       <KEYWORD3>userfd</KEYWORD3>\r
+                       <KEYWORD3>userou</KEYWORD3>\r
+                       <KEYWORD3>usermc</KEYWORD3>\r
+                       <KEYWORD3>usolbeg</KEYWORD3>\r
+                       <KEYWORD3>uldbeg</KEYWORD3>\r
+                       <KEYWORD3>ussbeg</KEYWORD3>\r
+                       <KEYWORD3>uitbeg</KEYWORD3>\r
+                       <KEYWORD3>uitfin</KEYWORD3>\r
+                       <KEYWORD3>ussfin</KEYWORD3>\r
+                       <KEYWORD3>uldfin</KEYWORD3>\r
+                       <KEYWORD3>usolfin</KEYWORD3>\r
+                       <KEYWORD3>uanbeg</KEYWORD3>\r
+                       <KEYWORD3>uanfin</KEYWORD3>\r
+                       <KEYWORD3>uelmatx</KEYWORD3>\r
+\r
+                       <!-- VA, VADD, VCLEAR, /VCONE, VCVFILL, VDELE, VDGL, VDRAG, VEXT commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- *VFILL command -->\r
+                       <KEYWORD3>data</KEYWORD3>\r
+                       <KEYWORD3>ramp</KEYWORD3>\r
+                       <KEYWORD3>rand</KEYWORD3>\r
+                       <KEYWORD3>gdis</KEYWORD3>\r
+                       <KEYWORD3>tria</KEYWORD3>\r
+                       <KEYWORD3>beta</KEYWORD3>\r
+                       <KEYWORD3>gamm</KEYWORD3>\r
+\r
+                       <!-- *VFUN command -->\r
+                       <KEYWORD3>acos</KEYWORD3>\r
+                       <KEYWORD3>asin</KEYWORD3>\r
+                       <KEYWORD3>asort</KEYWORD3>\r
+                       <KEYWORD3>atan</KEYWORD3>\r
+                       <KEYWORD3>comp</KEYWORD3>\r
+                       <KEYWORD3>copy</KEYWORD3>\r
+                       <KEYWORD3>cos</KEYWORD3>\r
+                       <KEYWORD3>cosh</KEYWORD3>\r
+                       <KEYWORD3>dircos</KEYWORD3>\r
+                       <KEYWORD3>dsort</KEYWORD3>\r
+                       <KEYWORD3>euler</KEYWORD3>\r
+                       <KEYWORD3>exp</KEYWORD3>\r
+                       <KEYWORD3>expa</KEYWORD3>\r
+                       <KEYWORD3>log</KEYWORD3>\r
+                       <KEYWORD3>log10</KEYWORD3>\r
+                       <KEYWORD3>nint</KEYWORD3>\r
+                       <KEYWORD3>not</KEYWORD3>\r
+                       <KEYWORD3>pwr</KEYWORD3>\r
+                       <KEYWORD3>sin</KEYWORD3>\r
+                       <KEYWORD3>sinh</KEYWORD3>\r
+                       <KEYWORD3>sqrt</KEYWORD3>\r
+                       <KEYWORD3>tan</KEYWORD3>\r
+                       <KEYWORD3>tanh</KEYWORD3>\r
+                       <KEYWORD3>tang</KEYWORD3>\r
+                       <KEYWORD3>norm</KEYWORD3>\r
+                       <KEYWORD3>local</KEYWORD3>\r
+                       <KEYWORD3>global</KEYWORD3>\r
+\r
+                       <!-- VGEN command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- *VGET command -->\r
+                       <KEYWORD3>node</KEYWORD3>\r
+                       <KEYWORD3>loc</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>ang</KEYWORD3>\r
+                       <KEYWORD3>xy</KEYWORD3>\r
+                       <KEYWORD3>yz</KEYWORD3>\r
+                       <KEYWORD3>zx</KEYWORD3>\r
+                       <KEYWORD3>,nsel</KEYWORD3>\r
+\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>cent</KEYWORD3>\r
+                       <KEYWORD3>adj</KEYWORD3>\r
+                       <KEYWORD3>attr</KEYWORD3>\r
+                       <KEYWORD3>geom</KEYWORD3>\r
+                       <KEYWORD3>,esel</KEYWORD3>\r
+                       <KEYWORD3>shpar</KEYWORD3>\r
+\r
+                       <KEYWORD3>kp</KEYWORD3>\r
+                       <KEYWORD3>div</KEYWORD3>\r
+                       <KEYWORD3>,ksel</KEYWORD3>\r
+\r
+                       <KEYWORD3>line</KEYWORD3>\r
+                       <KEYWORD3>leng</KEYWORD3>\r
+                       <KEYWORD3>,lsel</KEYWORD3>\r
+\r
+                       <KEYWORD3>area</KEYWORD3>\r
+                       <KEYWORD3>loop</KEYWORD3>\r
+                       <KEYWORD3>,asel</KEYWORD3>\r
+\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>shell</KEYWORD3>\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>,vsel</KEYWORD3>\r
+\r
+                       <KEYWORD3>cdsy</KEYWORD3>\r
+\r
+                       <KEYWORD3>rcon</KEYWORD3>\r
+                       <KEYWORD3>const</KEYWORD3>\r
+\r
+                       <KEYWORD3>const</KEYWORD3>\r
+                       <KEYWORD3>bkin</KEYWORD3>\r
+                       <KEYWORD3>mkin</KEYWORD3>\r
+                       <KEYWORD3>miso</KEYWORD3>\r
+                       <KEYWORD3>biso</KEYWORD3>\r
+                       <KEYWORD3>aniso</KEYWORD3>\r
+                       <KEYWORD3>dp</KEYWORD3>\r
+                       <KEYWORD3>melas</KEYWORD3>\r
+                       <KEYWORD3>user</KEYWORD3>\r
+                       <KEYWORD3>kinh</KEYWORD3>\r
+                       <KEYWORD3>anand</KEYWORD3>\r
+                       <KEYWORD3>creep</KEYWORD3>\r
+                       <KEYWORD3>swell</KEYWORD3>\r
+                       <KEYWORD3>bh</KEYWORD3>\r
+                       <KEYWORD3>piez</KEYWORD3>\r
+                       <KEYWORD3>fail</KEYWORD3>\r
+                       <KEYWORD3>mooney</KEYWORD3>\r
+                       <KEYWORD3>water</KEYWORD3>\r
+                       <KEYWORD3>anel</KEYWORD3>\r
+                       <KEYWORD3>concr</KEYWORD3>\r
+                       <KEYWORD3>hflm</KEYWORD3>\r
+                       <KEYWORD3>fcon</KEYWORD3>\r
+                       <KEYWORD3>pflow</KEYWORD3>\r
+                       <KEYWORD3>evisc</KEYWORD3>\r
+                       <KEYWORD3>plaw</KEYWORD3>\r
+                       <KEYWORD3>foam</KEYWORD3>\r
+                       <KEYWORD3>honey</KEYWORD3>\r
+                       <KEYWORD3>comp</KEYWORD3>\r
+                       <KEYWORD3>nl</KEYWORD3>\r
+                       <KEYWORD3>eos</KEYWORD3>\r
+\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>curr</KEYWORD3>\r
+                       <KEYWORD3>emf</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>eqv</KEYWORD3>\r
+                       <KEYWORD3>epto</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>epth</KEYWORD3>\r
+                       <KEYWORD3>epsw</KEYWORD3>\r
+\r
+                       <KEYWORD3>nl</KEYWORD3>\r
+                       <KEYWORD3>sepl</KEYWORD3>\r
+                       <KEYWORD3>srat</KEYWORD3>\r
+                       <KEYWORD3>hpres</KEYWORD3>\r
+                       <KEYWORD3>epeq</KEYWORD3>\r
+                       <KEYWORD3>psv</KEYWORD3>\r
+                       <KEYWORD3>plwk</KEYWORD3>\r
+                       <KEYWORD3>hs</KEYWORD3>\r
+                       <KEYWORD3>bfe</KEYWORD3>\r
+                       <KEYWORD3>tg</KEYWORD3>\r
+                       <KEYWORD3>tf</KEYWORD3>\r
+                       <KEYWORD3>pg</KEYWORD3>\r
+                       <KEYWORD3>ef</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>h</KEYWORD3>\r
+                       <KEYWORD3>b</KEYWORD3>\r
+                       <KEYWORD3>fmag</KEYWORD3>\r
+\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+                       <KEYWORD3>hflu</KEYWORD3>\r
+                       <KEYWORD3>hflm</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>pcoe</KEYWORD3>\r
+                       <KEYWORD3>ptot</KEYWORD3>\r
+                       <KEYWORD3>mach</KEYWORD3>\r
+                       <KEYWORD3>strm</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>yplu</KEYWORD3>\r
+                       <KEYWORD3>tauw</KEYWORD3>\r
+\r
+                       <KEYWORD3>etab</KEYWORD3>\r
+\r
+                       <!-- VGLUE, VIMP, VINP, VINV, VLIST, VLSCALE, VMESH, VOFFST commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- /VIEW command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>wp</KEYWORD3>\r
+\r
+                       <!-- *VOPER command -->\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>sub</KEYWORD3>\r
+                       <KEYWORD3>mult</KEYWORD3>\r
+                       <KEYWORD3>div</KEYWORD3>\r
+                       <KEYWORD3>min</KEYWORD3>\r
+                       <KEYWORD3>max</KEYWORD3>\r
+                       <KEYWORD3>lt</KEYWORD3>\r
+                       <KEYWORD3>le</KEYWORD3>\r
+                       <KEYWORD3>eq</KEYWORD3>\r
+                       <KEYWORD3>ne</KEYWORD3>\r
+                       <KEYWORD3>ge</KEYWORD3>\r
+                       <KEYWORD3>gt</KEYWORD3>\r
+                       <KEYWORD3>der1</KEYWORD3>\r
+                       <KEYWORD3>der2</KEYWORD3>\r
+                       <KEYWORD3>int1</KEYWORD3>\r
+                       <KEYWORD3>int2</KEYWORD3>\r
+                       <KEYWORD3>dot</KEYWORD3>\r
+                       <KEYWORD3>cross</KEYWORD3>\r
+                       <KEYWORD3>gath</KEYWORD3>\r
+                       <KEYWORD3>scat</KEYWORD3>\r
+\r
+                       <!-- VOVLAP, VPTN commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- VPLOT command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>dege</KEYWORD3>\r
+\r
+                       <!-- *VPUT command -->\r
+                       <KEYWORD3>node</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>rot</KEYWORD3>\r
+                       <KEYWORD3>temp</KEYWORD3>\r
+                       <KEYWORD3>pres</KEYWORD3>\r
+                       <KEYWORD3>volt</KEYWORD3>\r
+                       <KEYWORD3>mag</KEYWORD3>\r
+                       <KEYWORD3>v</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>curr</KEYWORD3>\r
+                       <KEYWORD3>emf</KEYWORD3>\r
+                       <KEYWORD3>enke</KEYWORD3>\r
+                       <KEYWORD3>ends</KEYWORD3>\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>xy</KEYWORD3>\r
+                       <KEYWORD3>yz</KEYWORD3>\r
+                       <KEYWORD3>xz</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>eqv</KEYWORD3>\r
+                       <KEYWORD3>epto</KEYWORD3>\r
+                       <KEYWORD3>epel</KEYWORD3>\r
+                       <KEYWORD3>eppl</KEYWORD3>\r
+                       <KEYWORD3>epcr</KEYWORD3>\r
+                       <KEYWORD3>epth</KEYWORD3>\r
+                       <KEYWORD3>epsw</KEYWORD3>\r
+                       <KEYWORD3>nl</KEYWORD3>\r
+                       <KEYWORD3>sepl</KEYWORD3>\r
+                       <KEYWORD3>srat</KEYWORD3>\r
+                       <KEYWORD3>hpres</KEYWORD3>\r
+                       <KEYWORD3>epeq</KEYWORD3>\r
+                       <KEYWORD3>psv</KEYWORD3>\r
+                       <KEYWORD3>plwk</KEYWORD3>\r
+                       <KEYWORD3>tg</KEYWORD3>\r
+                       <KEYWORD3>tf</KEYWORD3>\r
+                       <KEYWORD3>pg</KEYWORD3>\r
+                       <KEYWORD3>ef</KEYWORD3>\r
+                       <KEYWORD3>,d</KEYWORD3>\r
+                       <KEYWORD3>h</KEYWORD3>\r
+                       <KEYWORD3>b</KEYWORD3>\r
+                       <KEYWORD3>fmag</KEYWORD3>\r
+                       <KEYWORD3>ttot</KEYWORD3>\r
+                       <KEYWORD3>hflu</KEYWORD3>\r
+                       <KEYWORD3>hflm</KEYWORD3>\r
+                       <KEYWORD3>cond</KEYWORD3>\r
+                       <KEYWORD3>pcoe</KEYWORD3>\r
+                       <KEYWORD3>ptot</KEYWORD3>\r
+                       <KEYWORD3>mach</KEYWORD3>\r
+                       <KEYWORD3>strm</KEYWORD3>\r
+                       <KEYWORD3>dens</KEYWORD3>\r
+                       <KEYWORD3>visc</KEYWORD3>\r
+                       <KEYWORD3>evis</KEYWORD3>\r
+                       <KEYWORD3>econ</KEYWORD3>\r
+                       <KEYWORD3>yplu</KEYWORD3>\r
+                       <KEYWORD3>tauw</KEYWORD3>\r
+\r
+                       <KEYWORD3>elem</KEYWORD3>\r
+                       <KEYWORD3>etab</KEYWORD3>\r
+\r
+                       <!-- VROTAT command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- VSBA, VSBV, VSBW commands -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>sepo</KEYWORD3>\r
+                       <KEYWORD3>delete</KEYWORD3>\r
+                       <KEYWORD3>keep</KEYWORD3>\r
+\r
+                       <!-- *VSCFUN command -->\r
+                       <KEYWORD3>max</KEYWORD3>\r
+                       <KEYWORD3>min</KEYWORD3>\r
+                       <KEYWORD3>lmax</KEYWORD3>\r
+                       <KEYWORD3>lmin</KEYWORD3>\r
+                       <KEYWORD3>first</KEYWORD3>\r
+                       <KEYWORD3>last</KEYWORD3>\r
+                       <KEYWORD3>sum</KEYWORD3>\r
+                       <KEYWORD3>medi</KEYWORD3>\r
+                       <KEYWORD3>mean</KEYWORD3>\r
+                       <KEYWORD3>vari</KEYWORD3>\r
+                       <KEYWORD3>stdv</KEYWORD3>\r
+                       <KEYWORD3>rms</KEYWORD3>\r
+                       <KEYWORD3>num</KEYWORD3>\r
+\r
+                       <!-- VSEL, VSLA commands -->\r
+                       <KEYWORD3>s</KEYWORD3>\r
+                       <KEYWORD3>,r</KEYWORD3>\r
+                       <KEYWORD3>,a</KEYWORD3>\r
+                       <KEYWORD3>u</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+                       <KEYWORD3>inve</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>volu</KEYWORD3>\r
+                       <KEYWORD3>loc</KEYWORD3>\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>,mat</KEYWORD3>\r
+                       <KEYWORD3>,type</KEYWORD3>\r
+                       <KEYWORD3>,real</KEYWORD3>\r
+                       <KEYWORD3>,esys</KEYWORD3>\r
+\r
+                       <!-- VSUM command -->\r
+                       <KEYWORD3>default</KEYWORD3>\r
+                       <KEYWORD3>fine</KEYWORD3>\r
+\r
+                       <!-- VSWEEP command -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- VSYMM, VTRAN, /VUP commands -->\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>p</KEYWORD3>\r
+                       <KEYWORD3>-x</KEYWORD3>\r
+                       <KEYWORD3>-y</KEYWORD3>\r
+                       <KEYWORD3>-z</KEYWORD3>\r
+\r
+                       <!-- WAVES command -->\r
+                       <KEYWORD3>max</KEYWORD3>\r
+                       <KEYWORD3>rms</KEYWORD3>\r
+\r
+                       <!-- /WINDOW command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>full</KEYWORD3>\r
+                       <KEYWORD3>left</KEYWORD3>\r
+                       <KEYWORD3>righ</KEYWORD3>\r
+                       <KEYWORD3>top</KEYWORD3>\r
+                       <KEYWORD3>bot</KEYWORD3>\r
+                       <KEYWORD3>ltop</KEYWORD3>\r
+                       <KEYWORD3>lbot</KEYWORD3>\r
+                       <KEYWORD3>rtop</KEYWORD3>\r
+                       <KEYWORD3>rbot</KEYWORD3>\r
+                       <KEYWORD3>squa</KEYWORD3>\r
+                       <KEYWORD3>dele</KEYWORD3>\r
+\r
+                       <!-- WPAVE command -->\r
+                       <KEYWORD3>p</KEYWORD3>\r
+\r
+                       <!-- WSORT command -->\r
+                       <KEYWORD3>x</KEYWORD3>\r
+                       <KEYWORD3>y</KEYWORD3>\r
+                       <KEYWORD3>z</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>max</KEYWORD3>\r
+                       <KEYWORD3>rms</KEYWORD3>\r
+\r
+                       <!-- WSTART command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- /YRANGE command -->\r
+                       <KEYWORD3>all</KEYWORD3>\r
+\r
+                       <!-- /ZOOM command -->\r
+                       <KEYWORD3>off</KEYWORD3>\r
+                       <KEYWORD3>back</KEYWORD3>\r
+                       <KEYWORD3>scrn</KEYWORD3>\r
+                       <KEYWORD3>rect</KEYWORD3>\r
+                       \r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/applescript.xml b/extra/xmode/modes/applescript.xml
new file mode 100644 (file)
index 0000000..f4d18e0
--- /dev/null
@@ -0,0 +1,280 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- AppleScript mode by Kris Kopicki (21/8/2002) -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="doubleBracketIndent" VALUE="false" />\r
+               <PROPERTY NAME="commentStart" VALUE="(*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*)" />\r
+               <PROPERTY NAME="lineComment" VALUE="--" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>(*</BEGIN>\r
+                       <END>*)</END>\r
+               </SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               \r
+               <SEQ TYPE="OPERATOR">(</SEQ>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">­</SEQ>\r
+\r
+       <!-- Constants -->\r
+               <SEQ_REGEXP\r
+                       TYPE="LITERAL2"\r
+                       HASH_CHAR="application"\r
+                       AT_WORD_START="TRUE"\r
+               >application[\t\s]+responses</SEQ_REGEXP>\r
+               <SEQ_REGEXP\r
+                       TYPE="LITERAL2"\r
+                       HASH_CHAR="current"\r
+                       AT_WORD_START="TRUE"\r
+               >current[\t\s]+application</SEQ_REGEXP>\r
+               <SEQ_REGEXP\r
+                       TYPE="LITERAL2"\r
+                       HASH_CHAR="white"\r
+                       AT_WORD_START="TRUE"\r
+               >white[\t\s]+space</SEQ_REGEXP>\r
+               \r
+               <!-- Text Styles -->\r
+               <SEQ_REGEXP\r
+                       TYPE="LITERAL2"\r
+                       HASH_CHAR="all"\r
+               >all[\t\s]+caps</SEQ_REGEXP>\r
+               <SEQ_REGEXP\r
+                       TYPE="LITERAL2"\r
+                       HASH_CHAR="all"\r
+                       AT_WORD_START="TRUE"\r
+               >all[\t\s]+lowercase</SEQ_REGEXP>\r
+               <SEQ_REGEXP\r
+                       TYPE="LITERAL2"\r
+                       HASH_CHAR="small"\r
+                       AT_WORD_START="TRUE"\r
+               >small[\t\s]+caps</SEQ_REGEXP>\r
+       \r
+       <!-- Predefined Variables -->\r
+               <SEQ_REGEXP\r
+                       TYPE="KEYWORD3"\r
+                       HASH_CHAR="missing"\r
+                       AT_WORD_START="TRUE"\r
+               >missing[\t\s]+value</SEQ_REGEXP>\r
+               \r
+               <KEYWORDS>\r
+               <!-- Keywords -->\r
+                       <KEYWORD1>script</KEYWORD1>\r
+                       <KEYWORD1>property</KEYWORD1>\r
+                       <KEYWORD1>prop</KEYWORD1>\r
+                       <KEYWORD1>end</KEYWORD1>\r
+                       <KEYWORD1>copy</KEYWORD1>\r
+                       <KEYWORD1>to</KEYWORD1>\r
+                       <KEYWORD1>set</KEYWORD1>\r
+                       <KEYWORD1>global</KEYWORD1>\r
+                       <KEYWORD1>local</KEYWORD1>\r
+                       <KEYWORD1>on</KEYWORD1>\r
+                       <KEYWORD1>to</KEYWORD1>\r
+                       <KEYWORD1>of</KEYWORD1>\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <KEYWORD1>given</KEYWORD1>\r
+                       <KEYWORD1>with</KEYWORD1>\r
+                       <KEYWORD1>without</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+                       <KEYWORD1>tell</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>then</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>repeat</KEYWORD1>\r
+                       <KEYWORD1>times</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+                       <KEYWORD1>until</KEYWORD1>\r
+                       <KEYWORD1>from</KEYWORD1>\r
+                       <KEYWORD1>exit</KEYWORD1>\r
+                       <KEYWORD1>try</KEYWORD1>\r
+                       <KEYWORD1>error</KEYWORD1>\r
+                       <KEYWORD1>considering</KEYWORD1>\r
+                       <KEYWORD1>ignoring</KEYWORD1>\r
+                       <KEYWORD1>timeout</KEYWORD1>\r
+                       <KEYWORD1>transaction</KEYWORD1>\r
+                       <KEYWORD1>my</KEYWORD1>\r
+                       <KEYWORD1>get</KEYWORD1>\r
+                       <KEYWORD1>put</KEYWORD1>\r
+                       <KEYWORD1>into</KEYWORD1>\r
+                       <KEYWORD1>is</KEYWORD1>\r
+               \r
+               <!-- References -->\r
+                       <KEYWORD2>each</KEYWORD2>\r
+                       <KEYWORD2>some</KEYWORD2>\r
+                       <KEYWORD2>every</KEYWORD2>\r
+                       <KEYWORD2>whose</KEYWORD2>\r
+                       <KEYWORD2>where</KEYWORD2>\r
+                       <KEYWORD2>id</KEYWORD2>\r
+                       <KEYWORD2>index</KEYWORD2>\r
+                       <KEYWORD2>first</KEYWORD2>\r
+                       <KEYWORD2>second</KEYWORD2>\r
+                       <KEYWORD2>third</KEYWORD2>\r
+                       <KEYWORD2>fourth</KEYWORD2>\r
+                       <KEYWORD2>fifth</KEYWORD2>\r
+                       <KEYWORD2>sixth</KEYWORD2>\r
+                       <KEYWORD2>seventh</KEYWORD2>\r
+                       <KEYWORD2>eighth</KEYWORD2>\r
+                       <KEYWORD2>ninth</KEYWORD2>\r
+                       <KEYWORD2>tenth</KEYWORD2>\r
+                       <KEYWORD2>last</KEYWORD2>\r
+                       <KEYWORD2>front</KEYWORD2>\r
+                       <KEYWORD2>back</KEYWORD2>\r
+                       <KEYWORD2>st</KEYWORD2>\r
+                       <KEYWORD2>nd</KEYWORD2>\r
+                       <KEYWORD2>rd</KEYWORD2>\r
+                       <KEYWORD2>th</KEYWORD2>\r
+                       <KEYWORD2>middle</KEYWORD2>\r
+                       <KEYWORD2>named</KEYWORD2>\r
+                       <KEYWORD2>through</KEYWORD2>\r
+                       <KEYWORD2>thru</KEYWORD2>\r
+                       <KEYWORD2>before</KEYWORD2>\r
+                       <KEYWORD2>after</KEYWORD2>\r
+                       <KEYWORD2>beginning</KEYWORD2>\r
+                       <KEYWORD2>the</KEYWORD2>\r
+               \r
+               <!-- Commands -->\r
+                       <KEYWORD3>close</KEYWORD3>\r
+                       <KEYWORD3>copy</KEYWORD3>\r
+                       <KEYWORD3>count</KEYWORD3>\r
+                       <KEYWORD3>delete</KEYWORD3>\r
+                       <KEYWORD3>duplicate</KEYWORD3>\r
+                       <KEYWORD3>exists</KEYWORD3>\r
+                       <KEYWORD3>launch</KEYWORD3>\r
+                       <KEYWORD3>make</KEYWORD3>\r
+                       <KEYWORD3>move</KEYWORD3>\r
+                       <KEYWORD3>open</KEYWORD3>\r
+                       <KEYWORD3>print</KEYWORD3>\r
+                       <KEYWORD3>quit</KEYWORD3>\r
+                       <KEYWORD3>reopen</KEYWORD3>\r
+                       <KEYWORD3>run</KEYWORD3>\r
+                       <KEYWORD3>save</KEYWORD3>\r
+                       <KEYWORD3>saving</KEYWORD3>\r
+               \r
+               <!-- Predefined Variables -->\r
+                       <LITERAL2>it</LITERAL2>\r
+                       <LITERAL2>me</LITERAL2>\r
+                       <LITERAL2>version</LITERAL2>\r
+                       <LITERAL2>pi</LITERAL2>\r
+                       <LITERAL2>result</LITERAL2>\r
+                       <LITERAL2>space</LITERAL2>\r
+                       <LITERAL2>tab</LITERAL2>\r
+                       <LITERAL2>anything</LITERAL2>\r
+               \r
+               <!-- Constants -->\r
+                       <LITERAL2>case</LITERAL2>\r
+                       <LITERAL2>diacriticals</LITERAL2>\r
+                       <LITERAL2>expansion</LITERAL2>\r
+                       <LITERAL2>hyphens</LITERAL2>\r
+                       <LITERAL2>punctuation</LITERAL2>\r
+                       \r
+                       <!-- Text Styles -->\r
+                       <LITERAL2>bold</LITERAL2>\r
+                       <LITERAL2>condensed</LITERAL2>\r
+                       <LITERAL2>expanded</LITERAL2>\r
+                       <LITERAL2>hidden</LITERAL2>\r
+                       <LITERAL2>italic</LITERAL2>\r
+                       <LITERAL2>outline</LITERAL2>\r
+                       <LITERAL2>plain</LITERAL2>\r
+                       <LITERAL2>shadow</LITERAL2>\r
+                       <LITERAL2>strikethrough</LITERAL2>\r
+                       <LITERAL2>subscript</LITERAL2>\r
+                       <LITERAL2>superscript</LITERAL2>\r
+                       <LITERAL2>underline</LITERAL2>\r
+                       \r
+                       <!-- Save options -->\r
+                       <LITERAL2>ask</LITERAL2>\r
+                       <LITERAL2>no</LITERAL2>\r
+                       <LITERAL2>yes</LITERAL2>\r
+                       \r
+                       <!-- Booleans -->\r
+                       <LITERAL2>false</LITERAL2>\r
+                       <LITERAL2>true</LITERAL2>\r
+                       \r
+                       <!-- Date & Time -->\r
+                       <LITERAL2>weekday</LITERAL2>\r
+                       <LITERAL2>monday</LITERAL2>\r
+                       <LITERAL2>mon</LITERAL2>\r
+                       <LITERAL2>tuesday</LITERAL2>\r
+                       <LITERAL2>tue</LITERAL2>\r
+                       <LITERAL2>wednesday</LITERAL2>\r
+                       <LITERAL2>wed</LITERAL2>\r
+                       <LITERAL2>thursday</LITERAL2>\r
+                       <LITERAL2>thu</LITERAL2>\r
+                       <LITERAL2>friday</LITERAL2>\r
+                       <LITERAL2>fri</LITERAL2>\r
+                       <LITERAL2>saturday</LITERAL2>\r
+                       <LITERAL2>sat</LITERAL2>\r
+                       <LITERAL2>sunday</LITERAL2>\r
+                       <LITERAL2>sun</LITERAL2>\r
+                       \r
+                       <LITERAL2>month</LITERAL2>\r
+                       <LITERAL2>january</LITERAL2>\r
+                       <LITERAL2>jan</LITERAL2>\r
+                       <LITERAL2>february</LITERAL2>\r
+                       <LITERAL2>feb</LITERAL2>\r
+                       <LITERAL2>march</LITERAL2>\r
+                       <LITERAL2>mar</LITERAL2>\r
+                       <LITERAL2>april</LITERAL2>\r
+                       <LITERAL2>apr</LITERAL2>\r
+                       <LITERAL2>may</LITERAL2>\r
+                       <LITERAL2>june</LITERAL2>\r
+                       <LITERAL2>jun</LITERAL2>\r
+                       <LITERAL2>july</LITERAL2>\r
+                       <LITERAL2>jul</LITERAL2>\r
+                       <LITERAL2>august</LITERAL2>\r
+                       <LITERAL2>aug</LITERAL2>\r
+                       <LITERAL2>september</LITERAL2>\r
+                       <LITERAL2>sep</LITERAL2>\r
+                       <LITERAL2>october</LITERAL2>\r
+                       <LITERAL2>oct</LITERAL2>\r
+                       <LITERAL2>november</LITERAL2>\r
+                       <LITERAL2>nov</LITERAL2>\r
+                       <LITERAL2>december</LITERAL2>\r
+                       <LITERAL2>dec</LITERAL2>\r
+                       \r
+                       <LITERAL2>minutes</LITERAL2>\r
+                       <LITERAL2>hours</LITERAL2>\r
+                       <LITERAL2>days</LITERAL2>\r
+                       <LITERAL2>weeks</LITERAL2>\r
+                       \r
+               <!-- Operators -->\r
+                       <OPERATOR>div</OPERATOR>\r
+                       <OPERATOR>mod</OPERATOR>\r
+                       <OPERATOR>and</OPERATOR>\r
+                       <OPERATOR>not</OPERATOR>\r
+                       <OPERATOR>or</OPERATOR>\r
+                       <OPERATOR>as</OPERATOR>\r
+                       <OPERATOR>contains</OPERATOR>\r
+                       <OPERATOR>equal</OPERATOR>\r
+                       <OPERATOR>equals</OPERATOR>\r
+                       <OPERATOR>isn't</OPERATOR>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/asp.xml b/extra/xmode/modes/asp.xml
new file mode 100644 (file)
index 0000000..01735ba
--- /dev/null
@@ -0,0 +1,518 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- ASP mode by Andre Kaplan\r
+        Updated by Simon Ruggier       -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="TRUE">\r
+               <SEQ TYPE="MARKUP" DELEGATE="ASPVB">&lt;%@LANGUAGE="VBSCRIPT"%</SEQ>\r
+               <SEQ TYPE="MARKUP" DELEGATE="ASPJS">&lt;%@LANGUAGE="JSCRIPT"%</SEQ>\r
+               <SEQ TYPE="MARKUP" DELEGATE="ASPJS">&lt;%@LANGUAGE="JAVASCRIPT"%</SEQ>\r
+               <SEQ TYPE="MARKUP" DELEGATE="ASPPL">&lt;%@LANGUAGE="PERLSCRIPT"%</SEQ>\r
+\r
+               <!-- Inlined server-side VBScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="vbscript::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-side VBScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="vbscript::MAIN">\r
+                       <BEGIN>&lt;script language="vbscript" runat="server"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-side Javascript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;script language="jscript" runat="server"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;script language="javascript" runat="server"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-side PerlScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="perl::MAIN">\r
+                       <BEGIN>&lt;script language="perlscript" runat="server"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Client-side javascript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPVB_CSJS">\r
+                       <BEGIN>&lt;script language="jscript"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPVB_CSJS">\r
+                       <BEGIN>&lt;script language="javascript"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPVB_CSJS">\r
+                       <BEGIN>&lt;script&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-Side include -->\r
+               <SPAN TYPE="MARKUP">\r
+                       <BEGIN>&lt;!--#</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1" DELEGATE="ASPVB_SGML">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPVB_STYLE">\r
+                       <BEGIN>&lt;STYLE&gt;</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPVB_TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <!-- ******************************************************************\r
+            ASP with VBScript as default script engine\r
+            ****************************************************************** -->\r
+       <RULES SET="ASPVB" IGNORE_CASE="TRUE">\r
+               <!-- Inlined server-side VBScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="vbscript::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-side VBScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="vbscript::MAIN">\r
+                       <BEGIN>&lt;script language="vbscript" runat="server"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-side Javascript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;script language="jscript" runat="server"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;script language="javascript" runat="server"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-side PerlScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="perl::MAIN">\r
+                       <BEGIN>&lt;script language="perlscript" runat="server"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Client-side javascript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPVB_CSJS">\r
+                       <BEGIN>&lt;script language="jscript"</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPVB_CSJS">\r
+                       <BEGIN>&lt;script language="javascript"</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPVB_CSJS">\r
+                       <BEGIN>&lt;script&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-Side include -->\r
+               <SPAN TYPE="MARKUP">\r
+                       <BEGIN>&lt;!--#</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1" DELEGATE="ASPVB_SGML">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPVB_STYLE">\r
+                       <BEGIN>&lt;STYLE&gt;</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPVB_TAGS">\r
+                       <BEGIN>&lt;/</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPVB_TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <!-- ******************************************************************\r
+            ASP with JScript as default script engine\r
+            ****************************************************************** -->\r
+       <RULES SET="ASPJS" IGNORE_CASE="TRUE">\r
+               <!-- Inlined server-side Javascript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-side VBScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="vbscript::MAIN">\r
+                       <BEGIN>&lt;script language="vbscript" runat="server"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-side Javascript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;script language="jscript" runat="server"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;script language="javascript" runat="server"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-side PerlScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="perl::MAIN">\r
+                       <BEGIN>&lt;script language="perlscript" runat="server"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Client-side javascript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPJS_CSJS">\r
+                       <BEGIN>&lt;script language="jscript"</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPJS_CSJS">\r
+                       <BEGIN>&lt;script language="javascript"</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPJS_CSJS">\r
+                       <BEGIN>&lt;script&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-Side include -->\r
+               <SPAN TYPE="MARKUP">\r
+                       <BEGIN>&lt;!--#</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1" DELEGATE="ASPJS_SGML">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPJS_STYLE">\r
+                       <BEGIN>&lt;STYLE&gt;</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPJS_TAGS">\r
+                       <BEGIN>&lt;/</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPJS_TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <!-- ******************************************************************\r
+            ASP with PerlScript as default script engine\r
+            ****************************************************************** -->\r
+       <RULES SET="ASPPL" IGNORE_CASE="TRUE">\r
+               <!-- Inlined server-side Perlscript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="perl::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-side VBScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="vbscript::MAIN">\r
+                       <BEGIN>&lt;script language="vbscript" runat="server"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-side Javascript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;script language="jscript" runat="server"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;script language="javascript" runat="server"</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-side PerlScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="perl::MAIN">\r
+                       <BEGIN>&lt;script language="perlscript" runat="server"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Client-side javascript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPPL_CSJS">\r
+                       <BEGIN>&lt;script language="jscript"</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPPL_CSJS">\r
+                       <BEGIN>&lt;script language="javascript"</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPPL_CSJS">\r
+                       <BEGIN>&lt;script&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-Side include -->\r
+               <SPAN TYPE="MARKUP">\r
+                       <BEGIN>&lt;!--#</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1" DELEGATE="ASPPL_SGML">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPPL_STYLE">\r
+                       <BEGIN>&lt;STYLE&gt;</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPPL_TAGS">\r
+                       <BEGIN>&lt;/</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="ASPPL_TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <!-- ******************************************************************\r
+            HTML Tags\r
+            ****************************************************************** -->\r
+       <RULES SET="ASPVB_TAGS" DEFAULT="MARKUP">\r
+               <!-- Server-side VBScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="vbscript::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE ="ASPVB_LIT1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE ="ASPVB_LIT1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>            \r
+       </RULES>\r
+\r
+       <RULES SET="ASPVB_LIT1" DEFAULT="LITERAL1">\r
+               <!-- Server-side VBScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="vbscript::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="ASPJS_TAGS" DEFAULT="MARKUP">\r
+               <!-- Server-side JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE ="ASPJS_LIT1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE ="ASPJS_LIT1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>            \r
+       </RULES>\r
+       \r
+       <RULES SET="ASPJS_LIT1" DEFAULT="LITERAL1">\r
+               <!-- Server-side JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="ASPPL_TAGS" DEFAULT="MARKUP">\r
+               <!-- Server-side PerlScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="perl::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE ="ASPPL_LIT1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE ="ASPPL_LIT1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>            \r
+       </RULES>\r
+\r
+       <RULES SET="ASPPL_LIT1" DEFAULT="LITERAL1">\r
+               <!-- Server-side PerlScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="perl::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+       </RULES>\r
+       \r
+       <!-- These three rules sets handle server side scripts being mixed into client side javascript -->\r
+       <RULES SET="ASPVB_CSJS">\r
+               <!-- Server-side VBScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="vbscript::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+               <IMPORT DELEGATE="javascript::MAIN"/>\r
+       </RULES>\r
+       \r
+       <RULES SET="ASPJS_CSJS">\r
+               <!-- Server-side JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+               <IMPORT DELEGATE="javascript::MAIN"/>\r
+       </RULES>\r
+\r
+       <RULES SET="ASPPL_CSJS">\r
+               <!-- Server-side PerlScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="perl::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+               <IMPORT DELEGATE="javascript::MAIN"/>\r
+       </RULES>\r
+       \r
+       <!-- These three rules sets handle server side scripts being mixed into stylesheets -->\r
+       <RULES SET="ASPVB_STYLE">\r
+               <!-- Server-side VBScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="vbscript::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+               <IMPORT DELEGATE="css::MAIN"/>\r
+       </RULES>\r
+       \r
+       <RULES SET="ASPJS_STYLE">\r
+               <!-- Server-side JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+               <IMPORT DELEGATE="css::MAIN"/>\r
+       </RULES>\r
+\r
+       <RULES SET="ASPPL_STYLE">\r
+               <!-- Server-side PerlScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="perl::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+               <IMPORT DELEGATE="css::MAIN"/>\r
+       </RULES>\r
+\r
+       <!-- These three rules sets handle server side scripts being mixed into SGML Comments -->\r
+       <RULES SET="ASPVB_SGML" DEFAULT="COMMENT1">\r
+               <!-- Server-side VBScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="vbscript::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="ASPJS_SGML" DEFAULT="COMMENT1">\r
+               <!-- Server-side JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="ASPPL_SGML" DEFAULT="COMMENT1">\r
+               <!-- Server-side PerlScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="perl::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/aspect-j.xml b/extra/xmode/modes/aspect-j.xml
new file mode 100644 (file)
index 0000000..8c7609a
--- /dev/null
@@ -0,0 +1,168 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+        <PROPS>\r
+                <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+                <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+                <PROPERTY NAME="indentPrevLine"\r
+                        VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+                <!-- set this to 'true' if you want to use GNU coding style -->\r
+                <PROPERTY NAME="doubleBracketIndent" VALUE="false" />\r
+                <PROPERTY NAME="commentStart" VALUE="/*" />\r
+                <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+                <PROPERTY NAME="lineComment" VALUE="//" />\r
+                <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+        </PROPS>\r
+        <RULES ESCAPE="\"\r
+                IGNORE_CASE="FALSE"\r
+                HIGHLIGHT_DIGITS="TRUE"\r
+                DIGIT_RE="(0x)?[\p{XDigit}]+[lLdDfF]?">\r
+\r
+                <!-- Silly comment -->\r
+                <SEQ TYPE="COMMENT1">/**/</SEQ>\r
+\r
+                <!-- Javadoc comment -->\r
+                <SPAN TYPE="COMMENT3" DELEGATE="java::JAVADOC">\r
+                        <BEGIN>/**</BEGIN>\r
+                        <END>*/</END>\r
+                </SPAN>\r
+\r
+                <!-- Java comment (C style) -->\r
+                <SPAN TYPE="COMMENT1">\r
+                        <BEGIN>/*</BEGIN>\r
+                        <END>*/</END>\r
+                </SPAN>\r
+\r
+                <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                        <BEGIN>"</BEGIN>\r
+                        <END>"</END>\r
+                </SPAN>\r
+                <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                        <BEGIN>'</BEGIN>\r
+                        <END>'</END>\r
+                </SPAN>\r
+\r
+                <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+\r
+                <SEQ TYPE="OPERATOR">=</SEQ>\r
+                <SEQ TYPE="OPERATOR">!</SEQ>\r
+                <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+                <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+                <SEQ TYPE="OPERATOR">+</SEQ>\r
+                <SEQ TYPE="OPERATOR">-</SEQ>\r
+                <SEQ TYPE="OPERATOR">/</SEQ>\r
+\r
+                <!-- workaround to stop "*" from being colorized\r
+                     in import statements. -->\r
+                <SEQ TYPE="NULL">.*</SEQ>\r
+\r
+                <SEQ TYPE="OPERATOR">*</SEQ>\r
+                <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+                <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+                <SEQ TYPE="OPERATOR">%</SEQ>\r
+                <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+                <SEQ TYPE="OPERATOR">|</SEQ>\r
+                <SEQ TYPE="OPERATOR">^</SEQ>\r
+                <SEQ TYPE="OPERATOR">~</SEQ>\r
+                <SEQ TYPE="OPERATOR">}</SEQ>\r
+                <SEQ TYPE="OPERATOR">{</SEQ>\r
+                <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+                        AT_WHITESPACE_END="TRUE">:</MARK_PREVIOUS>\r
+\r
+                <!-- Function calls -->\r
+                <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+                               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+                <KEYWORDS>\r
+                        <KEYWORD1>abstract</KEYWORD1>\r
+                                               <KEYWORD1>break</KEYWORD1>\r
+                                               <KEYWORD1>case</KEYWORD1>\r
+                                               <KEYWORD1>catch</KEYWORD1>\r
+                                               <KEYWORD1>continue</KEYWORD1>\r
+                                               <KEYWORD1>default</KEYWORD1>\r
+                                               <KEYWORD1>do</KEYWORD1>\r
+                                               <KEYWORD1>else</KEYWORD1>\r
+                                               <KEYWORD1>extends</KEYWORD1>\r
+                                               <KEYWORD1>final</KEYWORD1>\r
+                                               <KEYWORD1>finally</KEYWORD1>\r
+                                               <KEYWORD1>for</KEYWORD1>\r
+                                               <KEYWORD1>if</KEYWORD1>\r
+                                               <KEYWORD1>implements</KEYWORD1>\r
+                                               <KEYWORD1>instanceof</KEYWORD1>\r
+                                               <KEYWORD1>native</KEYWORD1>\r
+                                               <KEYWORD1>new</KEYWORD1>\r
+                                               <KEYWORD1>private</KEYWORD1>\r
+                                               <KEYWORD1>protected</KEYWORD1>\r
+                                               <KEYWORD1>public</KEYWORD1>\r
+                                               <KEYWORD1>return</KEYWORD1>\r
+                                               <KEYWORD1>static</KEYWORD1>\r
+                                               <KEYWORD1>switch</KEYWORD1>\r
+                                               <KEYWORD1>synchronized</KEYWORD1>\r
+                                               <KEYWORD1>throw</KEYWORD1>\r
+                                               <KEYWORD1>throws</KEYWORD1>\r
+                                               <KEYWORD1>transient</KEYWORD1>\r
+                                               <KEYWORD1>try</KEYWORD1>\r
+                                               <KEYWORD1>volatile</KEYWORD1>\r
+                                               <KEYWORD1>while</KEYWORD1>\r
+\r
+                                               <KEYWORD2>package</KEYWORD2>\r
+                                               <KEYWORD2>import</KEYWORD2>\r
+\r
+                                               <KEYWORD3>boolean</KEYWORD3>\r
+                                               <KEYWORD3>byte</KEYWORD3>\r
+                                               <KEYWORD3>char</KEYWORD3>\r
+                                               <KEYWORD3>class</KEYWORD3>\r
+                                               <KEYWORD3>double</KEYWORD3>\r
+                                               <KEYWORD3>float</KEYWORD3>\r
+                                               <KEYWORD3>int</KEYWORD3>\r
+                                               <KEYWORD3>interface</KEYWORD3>\r
+                                               <KEYWORD3>long</KEYWORD3>\r
+                                               <KEYWORD3>short</KEYWORD3>\r
+                                               <KEYWORD3>void</KEYWORD3>\r
+\r
+                                               <FUNCTION>assert</FUNCTION>\r
+                                               <KEYWORD1>strictfp</KEYWORD1>\r
+\r
+                                               <LITERAL2>false</LITERAL2>\r
+                                               <LITERAL2>null</LITERAL2>\r
+                                               <LITERAL2>super</LITERAL2>\r
+                                               <LITERAL2>this</LITERAL2>\r
+                                               <LITERAL2>true</LITERAL2>\r
+\r
+                                               <INVALID>goto</INVALID>\r
+                                               <INVALID>const</INVALID>\r
+\r
+                        <KEYWORD4>args</KEYWORD4>\r
+                        <KEYWORD4>percflow</KEYWORD4>\r
+                        <KEYWORD4>get</KEYWORD4>\r
+                        <KEYWORD4>set</KEYWORD4>\r
+                        <KEYWORD4>preinitialization</KEYWORD4>\r
+                        <KEYWORD4>handler</KEYWORD4>\r
+                        <KEYWORD4>adviceexecution</KEYWORD4>\r
+                        <KEYWORD4>cflow</KEYWORD4>\r
+                        <KEYWORD4>target</KEYWORD4>\r
+                        <KEYWORD4>cflowbelow</KEYWORD4>\r
+                        <KEYWORD4>withincode</KEYWORD4>\r
+                        <KEYWORD4>declare</KEYWORD4>\r
+                        <KEYWORD4>precedence</KEYWORD4>\r
+                        <KEYWORD4>issingleton</KEYWORD4>\r
+                        <KEYWORD4>perthis</KEYWORD4>\r
+                        <KEYWORD4>pertarget</KEYWORD4>\r
+                        <KEYWORD4>privileged</KEYWORD4>\r
+                        <KEYWORD4>after</KEYWORD4>\r
+                        <KEYWORD4>around</KEYWORD4>\r
+                        <KEYWORD4>aspect</KEYWORD4>\r
+                        <KEYWORD4>before</KEYWORD4>\r
+                        <KEYWORD4>call</KEYWORD4>\r
+                        <KEYWORD4>execution</KEYWORD4>\r
+                        <KEYWORD4>initialization</KEYWORD4>\r
+                        <KEYWORD4>pointcut</KEYWORD4>\r
+                        <KEYWORD4>proceed</KEYWORD4>\r
+                        <KEYWORD4>staticinitialization</KEYWORD4>\r
+                        <KEYWORD4>within</KEYWORD4>\r
+                        <KEYWORD4>..</KEYWORD4>\r
+                </KEYWORDS>\r
+        </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/assembly-m68k.xml b/extra/xmode/modes/assembly-m68k.xml
new file mode 100644 (file)
index 0000000..03a6c4c
--- /dev/null
@@ -0,0 +1,508 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+       M68000 Assembly mode by Igor Lesik (curoles@yahoo.com)\r
+       version 0.2 (July 24, 2006)\r
+       TODO: i)add missing size qualifiers, ii)add Xcc like instructions\r
+-->\r
+\r
+<MODE>\r
+\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE=";" />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x\p{XDigit}+|\d+)">\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">;</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT2">*</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2" AT_LINE_START="TRUE">$</MARK_FOLLOWING>\r
+\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+                       AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+\r
+               <SEQ TYPE="NULL">,</SEQ>\r
+               <SEQ TYPE="NULL">:</SEQ>\r
+               <SEQ TYPE="NULL">(</SEQ>\r
+               <SEQ TYPE="NULL">)</SEQ>\r
+               <SEQ TYPE="NULL">]</SEQ>\r
+               <SEQ TYPE="NULL">[</SEQ>\r
+               <SEQ TYPE="NULL">$</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+\r
+               <KEYWORDS>\r
+\r
+                       <!-- ************************* REGISTERS ********************************* -->\r
+                       <!-- For sake of commonality with existing asm86 mode we use Keyword3 for registers-->\r
+\r
+                       <!-- General-purpose data registers -->\r
+                       <KEYWORD3>D0</KEYWORD3>\r
+                       <KEYWORD3>D1</KEYWORD3>\r
+                       <KEYWORD3>D2</KEYWORD3>\r
+                       <KEYWORD3>D3</KEYWORD3>\r
+                       <KEYWORD3>D4</KEYWORD3>\r
+                       <KEYWORD3>D5</KEYWORD3>\r
+                       <KEYWORD3>D6</KEYWORD3>\r
+                       <KEYWORD3>D7</KEYWORD3>\r
+\r
+                       <!-- Address registers -->\r
+                       <KEYWORD3>A0</KEYWORD3>\r
+                       <KEYWORD3>A1</KEYWORD3>\r
+                       <KEYWORD3>A2</KEYWORD3>\r
+                       <KEYWORD3>A3</KEYWORD3>\r
+                       <KEYWORD3>A4</KEYWORD3>\r
+                       <KEYWORD3>A5</KEYWORD3>\r
+                       <KEYWORD3>A6</KEYWORD3>\r
+                       <KEYWORD3>A7</KEYWORD3>\r
+\r
+                       <!-- Floating-point data registers -->\r
+                       <KEYWORD3>FP0</KEYWORD3>\r
+                       <KEYWORD3>FP1</KEYWORD3>\r
+                       <KEYWORD3>FP2</KEYWORD3>\r
+                       <KEYWORD3>FP3</KEYWORD3>\r
+                       <KEYWORD3>FP4</KEYWORD3>\r
+                       <KEYWORD3>FP5</KEYWORD3>\r
+                       <KEYWORD3>FP6</KEYWORD3>\r
+                       <KEYWORD3>FP7</KEYWORD3>\r
+\r
+                       <KEYWORD3>SP</KEYWORD3>\r
+                       <KEYWORD3>CCR</KEYWORD3>\r
+\r
+                       <!-- ************************** DIRECTIVES ********************************** -->\r
+\r
+                       <!-- Assembler directives give instructions to the assembler (not the 68000 chip which will execute\r
+                       your program) on how to assemble your program.\r
+                       These directives may be grouped into the following categories.-->\r
+\r
+                       <!-- Miscellaneous  -->\r
+                       <KEYWORD1>OPT</KEYWORD1>\r
+                       <KEYWORD1>INCLUDE</KEYWORD1>\r
+                       <KEYWORD1>FAIL</KEYWORD1>\r
+                       <KEYWORD1>END</KEYWORD1>\r
+                       <KEYWORD1>REG</KEYWORD1>\r
+\r
+                       <!-- Listing Control -->\r
+                       <KEYWORD1>PAGE</KEYWORD1>\r
+                       <KEYWORD1>LIST</KEYWORD1>\r
+                       <KEYWORD1>NOLIST</KEYWORD1>\r
+                       <KEYWORD1>SPC</KEYWORD1>\r
+                       <KEYWORD1>TTL</KEYWORD1>\r
+\r
+                       <!-- Section Control -->\r
+                       <KEYWORD1>ORG</KEYWORD1>\r
+\r
+                       <!-- Symbol Definition  -->\r
+                       <KEYWORD1>EQU</KEYWORD1>\r
+                       <KEYWORD1>SET</KEYWORD1>\r
+\r
+                       <!-- Data Definition -->\r
+                       <KEYWORD1>DS</KEYWORD1>\r
+                       <KEYWORD1>DC</KEYWORD1>\r
+\r
+                       <!-- Structured Programming Constructs -->\r
+                       <KEYWORD1>FOR</KEYWORD1>\r
+                       <KEYWORD1>ENDF</KEYWORD1>\r
+                       <KEYWORD1>IF</KEYWORD1>\r
+                       <KEYWORD1>THEN</KEYWORD1>\r
+                       <KEYWORD1>ELSE</KEYWORD1>\r
+                       <KEYWORD1>ENDI</KEYWORD1>\r
+                       <KEYWORD1>REPEAT</KEYWORD1>\r
+                       <KEYWORD1>UNTIL</KEYWORD1>\r
+                       <KEYWORD1>WHILE</KEYWORD1>\r
+                       <KEYWORD1>DO</KEYWORD1>\r
+                       <KEYWORD1>ENDW</KEYWORD1>\r
+\r
+                       <KEYWORD1>MACRO</KEYWORD1>\r
+\r
+\r
+                       <!-- *************************** INSTRUCTIONS **************************************** -->\r
+                       <FUNCTION>ABCD</FUNCTION>\r
+                       <FUNCTION>ADD</FUNCTION>\r
+                               <FUNCTION>ADD.B</FUNCTION>\r
+                               <FUNCTION>ADD.W</FUNCTION>\r
+                               <FUNCTION>ADD.L</FUNCTION>\r
+                       <FUNCTION>ADDA</FUNCTION>\r
+                               <FUNCTION>ADDA.W</FUNCTION>\r
+                               <FUNCTION>ADDA.L</FUNCTION>\r
+                       <FUNCTION>ADDI</FUNCTION>\r
+                               <FUNCTION>ADDI.B</FUNCTION>\r
+                               <FUNCTION>ADDI.W</FUNCTION>\r
+                               <FUNCTION>ADDI.L</FUNCTION>\r
+                       <FUNCTION>ADDQ</FUNCTION>\r
+                               <FUNCTION>ADDQ.B</FUNCTION>\r
+                               <FUNCTION>ADDQ.W</FUNCTION>\r
+                               <FUNCTION>ADDQ.L</FUNCTION>\r
+                       <FUNCTION>ADDX</FUNCTION>\r
+                               <FUNCTION>ADDX.B</FUNCTION>\r
+                               <FUNCTION>ADDX.W</FUNCTION>\r
+                               <FUNCTION>ADDX.L</FUNCTION>\r
+                       <FUNCTION>AND</FUNCTION>\r
+                               <FUNCTION>AND.B</FUNCTION>\r
+                               <FUNCTION>AND.W</FUNCTION>\r
+                               <FUNCTION>AND.L</FUNCTION>\r
+                       <FUNCTION>ANDI</FUNCTION>\r
+                               <FUNCTION>ANDI.B</FUNCTION>\r
+                               <FUNCTION>ANDI.W</FUNCTION>\r
+                               <FUNCTION>ANDI.L</FUNCTION>\r
+                       <FUNCTION>ASL</FUNCTION>\r
+                               <FUNCTION>ASL.B</FUNCTION>\r
+                               <FUNCTION>ASL.W</FUNCTION>\r
+                               <FUNCTION>ASL.L</FUNCTION>\r
+                       <FUNCTION>ASR</FUNCTION>\r
+                               <FUNCTION>ASR.B</FUNCTION>\r
+                               <FUNCTION>ASR.W</FUNCTION>\r
+                               <FUNCTION>ASR.L</FUNCTION>\r
+                       <!-- Bcc -->\r
+                               <FUNCTION>BCC</FUNCTION>\r
+                               <FUNCTION>BCS</FUNCTION>\r
+                               <FUNCTION>BEQ</FUNCTION>\r
+                               <FUNCTION>BGE</FUNCTION>\r
+                               <FUNCTION>BGT</FUNCTION>\r
+                               <FUNCTION>BHI</FUNCTION>\r
+                               <FUNCTION>BLE</FUNCTION>\r
+                               <FUNCTION>BLS</FUNCTION>\r
+                               <FUNCTION>BLT</FUNCTION>\r
+                               <FUNCTION>BMI</FUNCTION>\r
+                               <FUNCTION>BNE</FUNCTION>\r
+                               <FUNCTION>BPL</FUNCTION>\r
+                               <FUNCTION>BVC</FUNCTION>\r
+                               <FUNCTION>BVS</FUNCTION>\r
+                       <FUNCTION>BCHG</FUNCTION>\r
+                       <FUNCTION>BCLR</FUNCTION>\r
+                       <FUNCTION>BFCHG</FUNCTION>\r
+                       <FUNCTION>BFCLR</FUNCTION>\r
+                       <FUNCTION>BFEXTS</FUNCTION>\r
+                       <FUNCTION>BFEXTU</FUNCTION>\r
+                       <FUNCTION>BFFF0</FUNCTION>\r
+                       <FUNCTION>BFINS</FUNCTION>\r
+                       <FUNCTION>BFSET</FUNCTION>\r
+                       <FUNCTION>BFTST</FUNCTION>\r
+                       <FUNCTION>BGND</FUNCTION>\r
+                       <FUNCTION>BKPT</FUNCTION>\r
+                       <FUNCTION>BRA</FUNCTION>\r
+                       <FUNCTION>BSET</FUNCTION>\r
+                       <FUNCTION>BSR</FUNCTION>\r
+                       <FUNCTION>BTST</FUNCTION>\r
+                       <FUNCTION>CALLM</FUNCTION>\r
+                       <FUNCTION>CAS</FUNCTION>\r
+                       <FUNCTION>CAS2</FUNCTION>\r
+                       <FUNCTION>CHK</FUNCTION>\r
+                       <FUNCTION>CHK2</FUNCTION>\r
+                       <FUNCTION>CINV</FUNCTION>\r
+                       <FUNCTION>CLR</FUNCTION>\r
+                               <FUNCTION>CLR.B</FUNCTION>\r
+                               <FUNCTION>CLR.W</FUNCTION>\r
+                               <FUNCTION>CLR.L</FUNCTION>\r
+                       <FUNCTION>CMP</FUNCTION>\r
+                               <FUNCTION>CMP.B</FUNCTION>\r
+                               <FUNCTION>CMP.W</FUNCTION>\r
+                               <FUNCTION>CMP.L</FUNCTION>\r
+                       <FUNCTION>CMPA</FUNCTION>\r
+                               <FUNCTION>CMPA.W</FUNCTION>\r
+                               <FUNCTION>CMPA.L</FUNCTION>\r
+                       <FUNCTION>CMPI</FUNCTION>\r
+                               <FUNCTION>CMPI.B</FUNCTION>\r
+                               <FUNCTION>CMPI.W</FUNCTION>\r
+                               <FUNCTION>CMPI.L</FUNCTION>\r
+                       <FUNCTION>CMPM</FUNCTION>\r
+                               <FUNCTION>CMPM.B</FUNCTION>\r
+                               <FUNCTION>CMPM.W</FUNCTION>\r
+                               <FUNCTION>CMPM.L</FUNCTION>\r
+                       <FUNCTION>CMP2</FUNCTION>\r
+                               <FUNCTION>CMP2.B</FUNCTION>\r
+                               <FUNCTION>CMP2.W</FUNCTION>\r
+                               <FUNCTION>CMP2.L</FUNCTION>\r
+                       <!-- FUNCTION>cpBcc</FUNCTION>\r
+                       <FUNCTION>cpDBcc</FUNCTION>\r
+                       <FUNCTION>cpGEN</FUNCTION>\r
+                       <FUNCTION>cpRESTORE</FUNCTION>\r
+                       <FUNCTION>cpSAVE</FUNCTION>\r
+                       <FUNCTION>cpScc</FUNCTION>\r
+                       <FUNCTION>cpTRAPcc</FUNCTION -->\r
+                       <FUNCTION>CPUSH</FUNCTION>\r
+                       <!-- DBcc -->\r
+                               <FUNCTION>DBCC</FUNCTION>\r
+                               <FUNCTION>DBCS</FUNCTION>\r
+                               <FUNCTION>DBEQ</FUNCTION>\r
+                               <FUNCTION>DBGE</FUNCTION>\r
+                               <FUNCTION>DBGT</FUNCTION>\r
+                               <FUNCTION>DBHI</FUNCTION>\r
+                               <FUNCTION>DBLE</FUNCTION>\r
+                               <FUNCTION>DBLS</FUNCTION>\r
+                               <FUNCTION>DBLT</FUNCTION>\r
+                               <FUNCTION>DBMI</FUNCTION>\r
+                               <FUNCTION>DBNE</FUNCTION>\r
+                               <FUNCTION>DBPL</FUNCTION>\r
+                               <FUNCTION>DBVC</FUNCTION>\r
+                               <FUNCTION>DBVS</FUNCTION>\r
+\r
+                       <FUNCTION>DIVS</FUNCTION>\r
+                       <FUNCTION>DIVSL</FUNCTION>\r
+                       <FUNCTION>DIVU</FUNCTION>\r
+                       <FUNCTION>DIVUL</FUNCTION>\r
+                       <FUNCTION>EOR</FUNCTION>\r
+                               <FUNCTION>EOR.B</FUNCTION>\r
+                               <FUNCTION>EOR.W</FUNCTION>\r
+                               <FUNCTION>EOR.L</FUNCTION>\r
+                       <FUNCTION>EORI</FUNCTION>\r
+                               <FUNCTION>EORI.B</FUNCTION>\r
+                               <FUNCTION>EORI.W</FUNCTION>\r
+                               <FUNCTION>EORI.L</FUNCTION>\r
+                       <FUNCTION>EXG</FUNCTION>\r
+                       <FUNCTION>EXT</FUNCTION>\r
+                       <FUNCTION>EXTB</FUNCTION>\r
+                       <FUNCTION>FABS</FUNCTION>\r
+                       <FUNCTION>FSABS</FUNCTION>\r
+                       <FUNCTION>FDABS</FUNCTION>\r
+                       <FUNCTION>FACOS</FUNCTION>\r
+                       <FUNCTION>FADD</FUNCTION>\r
+                       <FUNCTION>FSADD</FUNCTION>\r
+                       <FUNCTION>FDADD</FUNCTION>\r
+                       <FUNCTION>FASIN</FUNCTION>\r
+                       <FUNCTION>FATAN</FUNCTION>\r
+                       <FUNCTION>FATANH</FUNCTION>\r
+                       <!--FUNCTION>FBcc</FUNCTION-->\r
+                       <FUNCTION>FCMP</FUNCTION>\r
+                       <FUNCTION>FCOS</FUNCTION>\r
+                       <FUNCTION>FCOSH</FUNCTION>\r
+                       <!--FUNCTION>FDBcc</FUNCTION-->\r
+                       <FUNCTION>FDIV</FUNCTION>\r
+                       <FUNCTION>FSDIV</FUNCTION>\r
+                       <FUNCTION>FDDIV</FUNCTION>\r
+                       <FUNCTION>FETOX</FUNCTION>\r
+                       <FUNCTION>FETOXM1</FUNCTION>\r
+                       <FUNCTION>FGETEXP</FUNCTION>\r
+                       <FUNCTION>FGETMAN</FUNCTION>\r
+                       <FUNCTION>FINT</FUNCTION>\r
+                       <FUNCTION>FINTRZ</FUNCTION>\r
+                       <FUNCTION>FLOG10</FUNCTION>\r
+                       <FUNCTION>FLOG2</FUNCTION>\r
+                       <FUNCTION>FLOGN</FUNCTION>\r
+                       <FUNCTION>FLOGNP1</FUNCTION>\r
+                       <FUNCTION>FMOD</FUNCTION>\r
+                       <FUNCTION>FMOVE</FUNCTION>\r
+                       <FUNCTION>FSMOVE</FUNCTION>\r
+                       <FUNCTION>FDMOVE</FUNCTION>\r
+                       <FUNCTION>FMOVECR</FUNCTION>\r
+                       <FUNCTION>FMOVEM</FUNCTION>\r
+                       <FUNCTION>FMUL</FUNCTION>\r
+                       <FUNCTION>FSMUL</FUNCTION>\r
+                       <FUNCTION>FDMUL</FUNCTION>\r
+                       <FUNCTION>FNEG</FUNCTION>\r
+                       <FUNCTION>FSNEG</FUNCTION>\r
+                       <FUNCTION>FDNEG</FUNCTION>\r
+                       <FUNCTION>FNOP</FUNCTION>\r
+                       <FUNCTION>FREM</FUNCTION>\r
+                       <FUNCTION>FRESTORE</FUNCTION>\r
+                       <FUNCTION>FSAVE</FUNCTION>\r
+                       <FUNCTION>FSCALE</FUNCTION>\r
+                       <!--FUNCTION>FScc</FUNCTION-->\r
+                       <FUNCTION>FSGLMUL</FUNCTION>\r
+                       <FUNCTION>FSIN</FUNCTION>\r
+                       <FUNCTION>FSINCOS</FUNCTION>\r
+                       <FUNCTION>FSINH</FUNCTION>\r
+                       <FUNCTION>FSQRT</FUNCTION>\r
+                       <FUNCTION>FSSQRT</FUNCTION>\r
+                       <FUNCTION>FDSQRT</FUNCTION>\r
+                       <FUNCTION>FSUB</FUNCTION>\r
+                       <FUNCTION>FSSUB</FUNCTION>\r
+                       <FUNCTION>FDSUB</FUNCTION>\r
+                       <FUNCTION>FTAN</FUNCTION>\r
+                       <FUNCTION>FTANH</FUNCTION>\r
+                       <FUNCTION>FTENTOX</FUNCTION>\r
+                       <!--FUNCTION>FTRAPcc</FUNCTION-->\r
+                       <FUNCTION>FTST</FUNCTION>\r
+                       <FUNCTION>FTWOTOX</FUNCTION>\r
+                       <FUNCTION>ILLEGAL</FUNCTION>\r
+                       <FUNCTION>JMP</FUNCTION>\r
+                       <FUNCTION>JSR</FUNCTION>\r
+                       <FUNCTION>LEA</FUNCTION>\r
+                       <FUNCTION>LINK</FUNCTION>\r
+                       <FUNCTION>LPSTOP</FUNCTION>\r
+                       <FUNCTION>LSL</FUNCTION>\r
+                               <FUNCTION>LSL.B</FUNCTION>\r
+                               <FUNCTION>LSL.W</FUNCTION>\r
+                               <FUNCTION>LSL.L</FUNCTION>\r
+                       <FUNCTION>LSR</FUNCTION>\r
+                               <FUNCTION>LSR.B</FUNCTION>\r
+                               <FUNCTION>LSR.W</FUNCTION>\r
+                               <FUNCTION>LSR.L</FUNCTION>\r
+                       <FUNCTION>MOVE</FUNCTION>\r
+                               <FUNCTION>MOVE.B</FUNCTION>\r
+                               <FUNCTION>MOVE.W</FUNCTION>\r
+                               <FUNCTION>MOVE.L</FUNCTION>\r
+                       <FUNCTION>MOVEA</FUNCTION>\r
+                               <FUNCTION>MOVEA.W</FUNCTION>\r
+                               <FUNCTION>MOVEA.L</FUNCTION>\r
+                       <FUNCTION>MOVE16</FUNCTION>\r
+                       <FUNCTION>MOVEC</FUNCTION>\r
+                       <FUNCTION>MOVEM</FUNCTION>\r
+                       <FUNCTION>MOVEP</FUNCTION>\r
+                       <FUNCTION>MOVEQ</FUNCTION>\r
+                       <FUNCTION>MOVES</FUNCTION>\r
+                       <FUNCTION>MULS</FUNCTION>\r
+                       <FUNCTION>MULU</FUNCTION>\r
+                       <FUNCTION>NBCD</FUNCTION>\r
+                       <FUNCTION>NEG</FUNCTION>\r
+                               <FUNCTION>NEG.B</FUNCTION>\r
+                               <FUNCTION>NEG.W</FUNCTION>\r
+                               <FUNCTION>NEG.L</FUNCTION>\r
+                       <FUNCTION>NEGX</FUNCTION>\r
+                               <FUNCTION>NEGX.B</FUNCTION>\r
+                               <FUNCTION>NEGX.W</FUNCTION>\r
+                               <FUNCTION>NEGX.L</FUNCTION>\r
+                       <FUNCTION>NOP</FUNCTION>\r
+                       <FUNCTION>NOT</FUNCTION>\r
+                               <FUNCTION>NOT.B</FUNCTION>\r
+                               <FUNCTION>NOT.W</FUNCTION>\r
+                               <FUNCTION>NOT.L</FUNCTION>\r
+                       <FUNCTION>OR</FUNCTION>\r
+                               <FUNCTION>OR.B</FUNCTION>\r
+                               <FUNCTION>OR.W</FUNCTION>\r
+                               <FUNCTION>OR.L</FUNCTION>\r
+                       <FUNCTION>ORI</FUNCTION>\r
+                               <FUNCTION>ORI.B</FUNCTION>\r
+                               <FUNCTION>ORI.W</FUNCTION>\r
+                               <FUNCTION>ORI.L</FUNCTION>\r
+                       <FUNCTION>PACK</FUNCTION>\r
+                       <!--FUNCTION>PBcc</FUNCTION-->\r
+                       <!--FUNCTION>PDBcc</FUNCTION-->\r
+                       <FUNCTION>PEA</FUNCTION>\r
+                       <FUNCTION>PFLUSH</FUNCTION>\r
+                       <FUNCTION>PFLUSHA</FUNCTION>\r
+                       <FUNCTION>PFLUSHR</FUNCTION>\r
+                       <FUNCTION>PFLUSHS</FUNCTION>\r
+                       <FUNCTION>PLOAD</FUNCTION>\r
+                       <FUNCTION>PMOVE</FUNCTION>\r
+                       <FUNCTION>PRESTORE</FUNCTION>\r
+                       <FUNCTION>PSAVE</FUNCTION>\r
+                       <!--FUNCTION>PScc</FUNCTION-->\r
+                       <FUNCTION>PTEST</FUNCTION>\r
+                       <!--FUNCTION>PTRAPcc</FUNCTION-->\r
+                       <FUNCTION>PVALID</FUNCTION>\r
+                       <FUNCTION>RESET</FUNCTION>\r
+                       <FUNCTION>ROL</FUNCTION>\r
+                               <FUNCTION>ROL.B</FUNCTION>\r
+                               <FUNCTION>ROL.W</FUNCTION>\r
+                               <FUNCTION>ROL.L</FUNCTION>\r
+                       <FUNCTION>ROR</FUNCTION>\r
+                               <FUNCTION>ROR.B</FUNCTION>\r
+                               <FUNCTION>ROR.W</FUNCTION>\r
+                               <FUNCTION>ROR.L</FUNCTION>\r
+                       <FUNCTION>ROXL</FUNCTION>\r
+                               <FUNCTION>ROXL.B</FUNCTION>\r
+                               <FUNCTION>ROXL.W</FUNCTION>\r
+                               <FUNCTION>ROXL.L</FUNCTION>\r
+                       <FUNCTION>ROXR</FUNCTION>\r
+                               <FUNCTION>ROXR.B</FUNCTION>\r
+                               <FUNCTION>ROXR.W</FUNCTION>\r
+                               <FUNCTION>ROXR.L</FUNCTION>\r
+                       <FUNCTION>RTD</FUNCTION>\r
+                       <FUNCTION>RTE</FUNCTION>\r
+                       <FUNCTION>RTM</FUNCTION>\r
+                       <FUNCTION>RTR</FUNCTION>\r
+                       <FUNCTION>RTS</FUNCTION>\r
+                       <FUNCTION>SBCD</FUNCTION>\r
+                       <!--Scc-->\r
+                               <FUNCTION>SCC</FUNCTION>\r
+                               <FUNCTION>SCS</FUNCTION>\r
+                               <FUNCTION>SEQ</FUNCTION>\r
+                               <FUNCTION>SF</FUNCTION>\r
+                               <FUNCTION>SGE</FUNCTION>\r
+                               <FUNCTION>SGT</FUNCTION>\r
+                               <FUNCTION>SHI</FUNCTION>\r
+                               <FUNCTION>SLE</FUNCTION>\r
+                               <FUNCTION>SLS</FUNCTION>\r
+                               <FUNCTION>SLT</FUNCTION>\r
+                               <FUNCTION>SMI</FUNCTION>\r
+                               <FUNCTION>SNE</FUNCTION>\r
+                               <FUNCTION>SPL</FUNCTION>\r
+                               <FUNCTION>ST</FUNCTION>\r
+                               <FUNCTION>SVC</FUNCTION>\r
+                               <FUNCTION>SVS</FUNCTION>\r
+\r
+                       <FUNCTION>STOP</FUNCTION>\r
+                       <FUNCTION>SUB</FUNCTION>\r
+                               <FUNCTION>SUB.B</FUNCTION>\r
+                               <FUNCTION>SUB.W</FUNCTION>\r
+                               <FUNCTION>SUB.L</FUNCTION>\r
+                       <FUNCTION>SUBA</FUNCTION>\r
+                       <FUNCTION>SUBI</FUNCTION>\r
+                               <FUNCTION>SUBI.B</FUNCTION>\r
+                               <FUNCTION>SUBI.W</FUNCTION>\r
+                               <FUNCTION>SUBI.L</FUNCTION>\r
+                       <FUNCTION>SUBQ</FUNCTION>\r
+                               <FUNCTION>SUBQ.B</FUNCTION>\r
+                               <FUNCTION>SUBQ.W</FUNCTION>\r
+                               <FUNCTION>SUBQ.L</FUNCTION>\r
+                       <FUNCTION>SUBX</FUNCTION>\r
+                               <FUNCTION>SUBX.B</FUNCTION>\r
+                               <FUNCTION>SUBX.W</FUNCTION>\r
+                               <FUNCTION>SUBX.L</FUNCTION>\r
+                       <FUNCTION>SWAP</FUNCTION>\r
+                       <FUNCTION>TAS</FUNCTION>\r
+                       <FUNCTION>TBLS</FUNCTION>\r
+                       <FUNCTION>TBLSN</FUNCTION>\r
+                       <FUNCTION>TBLU</FUNCTION>\r
+                       <FUNCTION>TBLUN</FUNCTION>\r
+                       <FUNCTION>TRAP</FUNCTION>\r
+                       <!--TRAPcc-->\r
+                               <FUNCTION>TRAPCC</FUNCTION>\r
+                               <FUNCTION>TRAPCS</FUNCTION>\r
+                               <FUNCTION>TRAPEQ</FUNCTION>\r
+                               <FUNCTION>TRAPF</FUNCTION>\r
+                               <FUNCTION>TRAPGE</FUNCTION>\r
+                               <FUNCTION>TRAPGT</FUNCTION>\r
+                               <FUNCTION>TRAPHI</FUNCTION>\r
+                               <FUNCTION>TRAPLE</FUNCTION>\r
+                               <FUNCTION>TRAPLS</FUNCTION>\r
+                               <FUNCTION>TRAPLT</FUNCTION>\r
+                               <FUNCTION>TRAPMI</FUNCTION>\r
+                               <FUNCTION>TRAPNE</FUNCTION>\r
+                               <FUNCTION>TRAPPL</FUNCTION>\r
+                               <FUNCTION>TRAPT</FUNCTION>\r
+                               <FUNCTION>TRAPVC</FUNCTION>\r
+                               <FUNCTION>TRAPVS</FUNCTION>\r
+\r
+                       <FUNCTION>TRAPV</FUNCTION>\r
+                       <FUNCTION>TST</FUNCTION>\r
+                               <FUNCTION>TST.B</FUNCTION>\r
+                               <FUNCTION>TST.W</FUNCTION>\r
+                               <FUNCTION>TST.L</FUNCTION>\r
+                       <FUNCTION>UNLK</FUNCTION>\r
+                       <FUNCTION>UNPK</FUNCTION>\r
+\r
+\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/assembly-macro32.xml b/extra/xmode/modes/assembly-macro32.xml
new file mode 100644 (file)
index 0000000..763d17e
--- /dev/null
@@ -0,0 +1,577 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+  VAX Macro32 Assembly mode by Mark Wickens (m.wickens@rhodium-consulting.com)\r
+       based on\r
+       x86 Assembly mode by Kristian Ovaska (kristian.ovaska@helsinki.fi)\r
+-->\r
+\r
+<MODE>\r
+\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE=";" />\r
+       </PROPS>\r
+\r
+       <RULES HIGHLIGHT_DIGITS="TRUE" IGNORE_CASE="TRUE">\r
+               <EOL_SPAN TYPE="COMMENT1">;</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- NASM: label inside a macro -->\r
+               <MARK_FOLLOWING TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+                       AT_LINE_START="TRUE">%%</MARK_FOLLOWING>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2" AT_LINE_START="TRUE">%</MARK_FOLLOWING>\r
+\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+                       AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+\r
+               <!-- Unary Operators -->\r
+               <SEQ TYPE="OPERATOR">B^</SEQ>\r
+               <SEQ TYPE="OPERATOR">D^</SEQ>\r
+               <SEQ TYPE="OPERATOR">O^</SEQ>\r
+               <SEQ TYPE="OPERATOR">X^</SEQ>\r
+               <SEQ TYPE="OPERATOR">A^</SEQ>\r
+               <SEQ TYPE="OPERATOR">M^</SEQ>\r
+               <SEQ TYPE="OPERATOR">F^</SEQ>\r
+               <SEQ TYPE="OPERATOR">C^</SEQ>\r
+               <SEQ TYPE="OPERATOR">L^</SEQ>\r
+               <SEQ TYPE="OPERATOR">G^</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+\r
+               <!-- Binary Operators -->\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">@</SEQ>\r
+               <SEQ TYPE="OPERATOR">#</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">\</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <!-- Directives -->\r
+                       <KEYWORD1>.ADDRESS</KEYWORD1>\r
+                       <KEYWORD1>.ALIGN</KEYWORD1>\r
+                       <KEYWORD1>.ALIGN</KEYWORD1>\r
+                       <KEYWORD1>.ASCIC</KEYWORD1>\r
+                       <KEYWORD1>.ASCID</KEYWORD1>\r
+                       <KEYWORD1>.ASCII</KEYWORD1>\r
+                       <KEYWORD1>.ASCIZ</KEYWORD1>\r
+                       <KEYWORD1>.BLKA</KEYWORD1>\r
+                       <KEYWORD1>.BLKB</KEYWORD1>\r
+                       <KEYWORD1>.BLKD</KEYWORD1>\r
+                       <KEYWORD1>.BLKF</KEYWORD1>\r
+                       <KEYWORD1>.BLKG</KEYWORD1>\r
+                       <KEYWORD1>.BLKH</KEYWORD1>\r
+                       <KEYWORD1>.BLKL</KEYWORD1>\r
+                       <KEYWORD1>.BLKO</KEYWORD1>\r
+                       <KEYWORD1>.BLKQ</KEYWORD1>\r
+                       <KEYWORD1>.BLKW</KEYWORD1>\r
+                       <KEYWORD1>.BYTE</KEYWORD1>\r
+                       <KEYWORD1>.CROSS</KEYWORD1>\r
+                       <KEYWORD1>.CROSS</KEYWORD1>\r
+                       <KEYWORD1>.DEBUG</KEYWORD1>\r
+                       <KEYWORD1>.DEFAULT</KEYWORD1>\r
+                       <KEYWORD1>.D_FLOATING</KEYWORD1>\r
+                       <KEYWORD1>.DISABLE</KEYWORD1>\r
+                       <KEYWORD1>.DOUBLE</KEYWORD1>\r
+                       <KEYWORD1>.DSABL</KEYWORD1>\r
+                       <KEYWORD1>.ENABL</KEYWORD1>\r
+                       <KEYWORD1>.ENABLE</KEYWORD1>\r
+                       <KEYWORD1>.END</KEYWORD1>\r
+                       <KEYWORD1>.ENDC</KEYWORD1>\r
+                       <KEYWORD1>.ENDM</KEYWORD1>\r
+                       <KEYWORD1>.ENDR</KEYWORD1>\r
+                       <KEYWORD1>.ENTRY</KEYWORD1>\r
+                       <KEYWORD1>.ERROR</KEYWORD1>\r
+                       <KEYWORD1>.EVEN</KEYWORD1>\r
+                       <KEYWORD1>.EXTERNAL</KEYWORD1>\r
+                       <KEYWORD1>.EXTRN</KEYWORD1>\r
+                       <KEYWORD1>.F_FLOATING</KEYWORD1>\r
+                       <KEYWORD1>.FLOAT</KEYWORD1>\r
+                       <KEYWORD1>.G_FLOATING</KEYWORD1>\r
+                       <KEYWORD1>.GLOBAL</KEYWORD1>\r
+                       <KEYWORD1>.GLOBL</KEYWORD1>\r
+                       <KEYWORD1>.H_FLOATING</KEYWORD1>\r
+                       <KEYWORD1>.IDENT</KEYWORD1>\r
+                       <KEYWORD1>.IF</KEYWORD1>\r
+                       <KEYWORD1>.IFF</KEYWORD1>\r
+                       <KEYWORD1>.IF_FALSE</KEYWORD1>\r
+                       <KEYWORD1>.IFT</KEYWORD1>\r
+                       <KEYWORD1>.IFTF</KEYWORD1>\r
+                       <KEYWORD1>.IF_TRUE</KEYWORD1>\r
+                       <KEYWORD1>.IF_TRUE_FALSE</KEYWORD1>\r
+                       <KEYWORD1>.IIF</KEYWORD1>\r
+                       <KEYWORD1>.IRP</KEYWORD1>\r
+                       <KEYWORD1>.IRPC</KEYWORD1>\r
+                       <KEYWORD1>.LIBRARY</KEYWORD1>\r
+                       <KEYWORD1>.LINK</KEYWORD1>\r
+                       <KEYWORD1>.LIST</KEYWORD1>\r
+                       <KEYWORD1>.LONG</KEYWORD1>\r
+                       <KEYWORD1>.MACRO</KEYWORD1>\r
+                       <KEYWORD1>.MASK</KEYWORD1>\r
+                       <KEYWORD1>.MCALL</KEYWORD1>\r
+                       <KEYWORD1>.MDELETE</KEYWORD1>\r
+                       <KEYWORD1>.MEXIT</KEYWORD1>\r
+                       <KEYWORD1>.NARG</KEYWORD1>\r
+                       <KEYWORD1>.NCHR</KEYWORD1>\r
+                       <KEYWORD1>.NLIST</KEYWORD1>\r
+                       <KEYWORD1>.NOCROSS</KEYWORD1>\r
+                       <KEYWORD1>.NOCROSS</KEYWORD1>\r
+                       <KEYWORD1>.NOSHOW</KEYWORD1>\r
+                       <KEYWORD1>.NOSHOW</KEYWORD1>\r
+                       <KEYWORD1>.NTYPE</KEYWORD1>\r
+                       <KEYWORD1>.OCTA</KEYWORD1>\r
+                       <KEYWORD1>.OCTA</KEYWORD1>\r
+                       <KEYWORD1>.ODD</KEYWORD1>\r
+                       <KEYWORD1>.OPDEF</KEYWORD1>\r
+                       <KEYWORD1>.PACKED</KEYWORD1>\r
+                       <KEYWORD1>.PAGE</KEYWORD1>\r
+                       <KEYWORD1>.PRINT</KEYWORD1>\r
+                       <KEYWORD1>.PSECT</KEYWORD1>\r
+                       <KEYWORD1>.PSECT</KEYWORD1>\r
+                       <KEYWORD1>.QUAD</KEYWORD1>\r
+                       <KEYWORD1>.QUAD</KEYWORD1>\r
+                       <KEYWORD1>.REF1</KEYWORD1>\r
+                       <KEYWORD1>.REF2</KEYWORD1>\r
+                       <KEYWORD1>.REF4</KEYWORD1>\r
+                       <KEYWORD1>.REF8</KEYWORD1>\r
+                       <KEYWORD1>.REF16</KEYWORD1>\r
+                       <KEYWORD1>.REPEAT</KEYWORD1>\r
+                       <KEYWORD1>.REPT</KEYWORD1>\r
+                       <KEYWORD1>.RESTORE</KEYWORD1>\r
+                       <KEYWORD1>.RESTORE_PSECT</KEYWORD1>\r
+                       <KEYWORD1>.SAVE</KEYWORD1>\r
+                       <KEYWORD1>.SAVE_PSECT</KEYWORD1>\r
+                       <KEYWORD1>.SBTTL</KEYWORD1>\r
+                       <KEYWORD1>.SHOW</KEYWORD1>\r
+                       <KEYWORD1>.SHOW</KEYWORD1>\r
+                       <KEYWORD1>.SIGNED_BYTE</KEYWORD1>\r
+                       <KEYWORD1>.SIGNED_WORD</KEYWORD1>\r
+                       <KEYWORD1>.SUBTITLE</KEYWORD1>\r
+                       <KEYWORD1>.TITLE</KEYWORD1>\r
+                       <KEYWORD1>.TRANSFER</KEYWORD1>\r
+                       <KEYWORD1>.WARN</KEYWORD1>\r
+                       <KEYWORD1>.WEAK</KEYWORD1>\r
+                       <KEYWORD1>.WORD</KEYWORD1>\r
+\r
+                       <!-- Registers -->\r
+                       <KEYWORD3>R0</KEYWORD3>\r
+                       <KEYWORD3>R1</KEYWORD3>\r
+                       <KEYWORD3>R2</KEYWORD3>\r
+                       <KEYWORD3>R3</KEYWORD3>\r
+                       <KEYWORD3>R4</KEYWORD3>\r
+                       <KEYWORD3>R5</KEYWORD3>\r
+                       <KEYWORD3>R6</KEYWORD3>\r
+                       <KEYWORD3>R7</KEYWORD3>\r
+                       <KEYWORD3>R8</KEYWORD3>\r
+                       <KEYWORD3>R9</KEYWORD3>\r
+                       <KEYWORD3>R10</KEYWORD3>\r
+                       <KEYWORD3>R11</KEYWORD3>\r
+                       <KEYWORD3>R12</KEYWORD3>\r
+                       <KEYWORD3>AP</KEYWORD3>\r
+                       <KEYWORD3>FP</KEYWORD3>\r
+                       <KEYWORD3>SP</KEYWORD3>\r
+                       <KEYWORD3>PC</KEYWORD3>\r
+\r
+                       <!-- Instructions -->\r
+                       <FUNCTION>ACBB</FUNCTION>\r
+                       <FUNCTION>ACBD</FUNCTION>\r
+                       <FUNCTION>ACBF</FUNCTION>\r
+                       <FUNCTION>ACBG</FUNCTION>\r
+                       <FUNCTION>ACBH</FUNCTION>\r
+                       <FUNCTION>ACBL</FUNCTION>\r
+                       <FUNCTION>ACBW</FUNCTION>\r
+                       <FUNCTION>ADAWI</FUNCTION>\r
+                       <FUNCTION>ADDB2</FUNCTION>\r
+                       <FUNCTION>ADDB3</FUNCTION>\r
+                       <FUNCTION>ADDD2</FUNCTION>\r
+                       <FUNCTION>ADDD3</FUNCTION>\r
+                       <FUNCTION>ADDF2</FUNCTION>\r
+                       <FUNCTION>ADDF3</FUNCTION>\r
+                       <FUNCTION>ADDG2</FUNCTION>\r
+                       <FUNCTION>ADDG3</FUNCTION>\r
+                       <FUNCTION>ADDH2</FUNCTION>\r
+                       <FUNCTION>ADDH3</FUNCTION>\r
+                       <FUNCTION>ADDL2</FUNCTION>\r
+                       <FUNCTION>ADDL3</FUNCTION>\r
+                       <FUNCTION>ADDP4</FUNCTION>\r
+                       <FUNCTION>ADDP6</FUNCTION>\r
+                       <FUNCTION>ADDW2</FUNCTION>\r
+                       <FUNCTION>ADDW3</FUNCTION>\r
+                       <FUNCTION>ADWC</FUNCTION>\r
+                       <FUNCTION>AOBLEQ</FUNCTION>\r
+                       <FUNCTION>AOBLSS</FUNCTION>\r
+                       <FUNCTION>ASHL</FUNCTION>\r
+                       <FUNCTION>ASHP</FUNCTION>\r
+                       <FUNCTION>ASHQ</FUNCTION>\r
+                       <FUNCTION>BBC</FUNCTION>\r
+                       <FUNCTION>BBCC</FUNCTION>\r
+                       <FUNCTION>BBCCI</FUNCTION>\r
+                       <FUNCTION>BBCS</FUNCTION>\r
+                       <FUNCTION>BBS</FUNCTION>\r
+                       <FUNCTION>BBSC</FUNCTION>\r
+                       <FUNCTION>BBSS</FUNCTION>\r
+                       <FUNCTION>BBSSI</FUNCTION>\r
+                       <FUNCTION>BCC</FUNCTION>\r
+                       <FUNCTION>BCS</FUNCTION>\r
+                       <FUNCTION>BEQL</FUNCTION>\r
+                       <FUNCTION>BEQLU</FUNCTION>\r
+                       <FUNCTION>BGEQ</FUNCTION>\r
+                       <FUNCTION>BGEQU</FUNCTION>\r
+                       <FUNCTION>BGTR</FUNCTION>\r
+                       <FUNCTION>BGTRU</FUNCTION>\r
+                       <FUNCTION>BICB2</FUNCTION>\r
+                       <FUNCTION>BICB3</FUNCTION>\r
+                       <FUNCTION>BICL2</FUNCTION>\r
+                       <FUNCTION>BICL3</FUNCTION>\r
+                       <FUNCTION>BICPSW</FUNCTION>\r
+                       <FUNCTION>BICW2</FUNCTION>\r
+                       <FUNCTION>BICW3</FUNCTION>\r
+                       <FUNCTION>BISB2</FUNCTION>\r
+                       <FUNCTION>BISB3</FUNCTION>\r
+                       <FUNCTION>BISL2</FUNCTION>\r
+                       <FUNCTION>BISL3</FUNCTION>\r
+                       <FUNCTION>BISPSW</FUNCTION>\r
+                       <FUNCTION>BISW2</FUNCTION>\r
+                       <FUNCTION>BISW3</FUNCTION>\r
+                       <FUNCTION>BITB</FUNCTION>\r
+                       <FUNCTION>BITL</FUNCTION>\r
+                       <FUNCTION>BITW</FUNCTION>\r
+                       <FUNCTION>BLBC</FUNCTION>\r
+                       <FUNCTION>BLBS</FUNCTION>\r
+                       <FUNCTION>BLEQ</FUNCTION>\r
+                       <FUNCTION>BLEQU</FUNCTION>\r
+                       <FUNCTION>BLSS</FUNCTION>\r
+                       <FUNCTION>BLSSU</FUNCTION>\r
+                       <FUNCTION>BNEQ</FUNCTION>\r
+                       <FUNCTION>BNEQU</FUNCTION>\r
+                       <FUNCTION>BPT</FUNCTION>\r
+                       <FUNCTION>BRB</FUNCTION>\r
+                       <FUNCTION>BRW</FUNCTION>\r
+                       <FUNCTION>BSBB</FUNCTION>\r
+                       <FUNCTION>BSBW</FUNCTION>\r
+                       <FUNCTION>BVC</FUNCTION>\r
+                       <FUNCTION>BVS</FUNCTION>\r
+                       <FUNCTION>CALLG</FUNCTION>\r
+                       <FUNCTION>CALLS</FUNCTION>\r
+                       <FUNCTION>CASEB</FUNCTION>\r
+                       <FUNCTION>CASEL</FUNCTION>\r
+                       <FUNCTION>CASEW</FUNCTION>\r
+                       <FUNCTION>CHME</FUNCTION>\r
+                       <FUNCTION>CHMK</FUNCTION>\r
+                       <FUNCTION>CHMS</FUNCTION>\r
+                       <FUNCTION>CHMU</FUNCTION>\r
+                       <FUNCTION>CLRB</FUNCTION>\r
+                       <FUNCTION>CLRD</FUNCTION>\r
+                       <FUNCTION>CLRF</FUNCTION>\r
+                       <FUNCTION>CLRG</FUNCTION>\r
+                       <FUNCTION>CLRH</FUNCTION>\r
+                       <FUNCTION>CLRL</FUNCTION>\r
+                       <FUNCTION>CLRO</FUNCTION>\r
+                       <FUNCTION>CLRQ</FUNCTION>\r
+                       <FUNCTION>CLRW</FUNCTION>\r
+                       <FUNCTION>CMPB</FUNCTION>\r
+                       <FUNCTION>CMPC3</FUNCTION>\r
+                       <FUNCTION>CMPC5</FUNCTION>\r
+                       <FUNCTION>CMPD</FUNCTION>\r
+                       <FUNCTION>CMPF</FUNCTION>\r
+                       <FUNCTION>CMPG</FUNCTION>\r
+                       <FUNCTION>CMPH</FUNCTION>\r
+                       <FUNCTION>CMPL</FUNCTION>\r
+                       <FUNCTION>CMPP3</FUNCTION>\r
+                       <FUNCTION>CMPP4</FUNCTION>\r
+                       <FUNCTION>CMPV</FUNCTION>\r
+                       <FUNCTION>CMPW</FUNCTION>\r
+                       <FUNCTION>CMPZV</FUNCTION>\r
+                       <FUNCTION>CRC</FUNCTION>\r
+                       <FUNCTION>CVTBD</FUNCTION>\r
+                       <FUNCTION>CVTBF</FUNCTION>\r
+                       <FUNCTION>CVTBG</FUNCTION>\r
+                       <FUNCTION>CVTBH</FUNCTION>\r
+                       <FUNCTION>CVTBL</FUNCTION>\r
+                       <FUNCTION>CVTBW</FUNCTION>\r
+                       <FUNCTION>CVTDB</FUNCTION>\r
+                       <FUNCTION>CVTDF</FUNCTION>\r
+                       <FUNCTION>CVTDH</FUNCTION>\r
+                       <FUNCTION>CVTDL</FUNCTION>\r
+                       <FUNCTION>CVTDW</FUNCTION>\r
+                       <FUNCTION>CVTFB</FUNCTION>\r
+                       <FUNCTION>CVTFD</FUNCTION>\r
+                       <FUNCTION>CVTFG</FUNCTION>\r
+                       <FUNCTION>CVTFH</FUNCTION>\r
+                       <FUNCTION>CVTFL</FUNCTION>\r
+                       <FUNCTION>CVTFW</FUNCTION>\r
+                       <FUNCTION>CVTGB</FUNCTION>\r
+                       <FUNCTION>CVTGF</FUNCTION>\r
+                       <FUNCTION>CVTGH</FUNCTION>\r
+                       <FUNCTION>CVTGL</FUNCTION>\r
+                       <FUNCTION>CVTGW</FUNCTION>\r
+                       <FUNCTION>CVTHB</FUNCTION>\r
+                       <FUNCTION>CVTHD</FUNCTION>\r
+                       <FUNCTION>CVTHF</FUNCTION>\r
+                       <FUNCTION>CVTHG</FUNCTION>\r
+                       <FUNCTION>CVTHL</FUNCTION>\r
+                       <FUNCTION>CVTHW</FUNCTION>\r
+                       <FUNCTION>CVTLB</FUNCTION>\r
+                       <FUNCTION>CVTLD</FUNCTION>\r
+                       <FUNCTION>CVTLF</FUNCTION>\r
+                       <FUNCTION>CVTLG</FUNCTION>\r
+                       <FUNCTION>CVTLH</FUNCTION>\r
+                       <FUNCTION>CVTLP</FUNCTION>\r
+                       <FUNCTION>CVTLW</FUNCTION>\r
+                       <FUNCTION>CVTPL</FUNCTION>\r
+                       <FUNCTION>CVTPS</FUNCTION>\r
+                       <FUNCTION>CVTPT</FUNCTION>\r
+                       <FUNCTION>CVTRDL</FUNCTION>\r
+                       <FUNCTION>CVTRFL</FUNCTION>\r
+                       <FUNCTION>CVTRGL</FUNCTION>\r
+                       <FUNCTION>CVTRHL</FUNCTION>\r
+                       <FUNCTION>CVTSP</FUNCTION>\r
+                       <FUNCTION>CVTTP</FUNCTION>\r
+                       <FUNCTION>CVTWB</FUNCTION>\r
+                       <FUNCTION>CVTWD</FUNCTION>\r
+                       <FUNCTION>CVTWF</FUNCTION>\r
+                       <FUNCTION>CVTWG</FUNCTION>\r
+                       <FUNCTION>CVTWH</FUNCTION>\r
+                       <FUNCTION>CVTWL</FUNCTION>\r
+                       <FUNCTION>DECB</FUNCTION>\r
+                       <FUNCTION>DECL</FUNCTION>\r
+                       <FUNCTION>DECW</FUNCTION>\r
+                       <FUNCTION>DIVB2</FUNCTION>\r
+                       <FUNCTION>DIVB3</FUNCTION>\r
+                       <FUNCTION>DIVD2</FUNCTION>\r
+                       <FUNCTION>DIVD3</FUNCTION>\r
+                       <FUNCTION>DIVF2</FUNCTION>\r
+                       <FUNCTION>DIVF3</FUNCTION>\r
+                       <FUNCTION>DIVG2</FUNCTION>\r
+                       <FUNCTION>DIVG3</FUNCTION>\r
+                       <FUNCTION>DIVH2</FUNCTION>\r
+                       <FUNCTION>DIVH3</FUNCTION>\r
+                       <FUNCTION>DIVL2</FUNCTION>\r
+                       <FUNCTION>DIVL3</FUNCTION>\r
+                       <FUNCTION>DIVP</FUNCTION>\r
+                       <FUNCTION>DIVW2</FUNCTION>\r
+                       <FUNCTION>DIVW3</FUNCTION>\r
+                       <FUNCTION>EDITPC</FUNCTION>\r
+                       <FUNCTION>EDIV</FUNCTION>\r
+                       <FUNCTION>EMODD</FUNCTION>\r
+                       <FUNCTION>EMODF</FUNCTION>\r
+                       <FUNCTION>EMODG</FUNCTION>\r
+                       <FUNCTION>EMODH</FUNCTION>\r
+                       <FUNCTION>EMUL</FUNCTION>\r
+                       <FUNCTION>EXTV</FUNCTION>\r
+                       <FUNCTION>EXTZV</FUNCTION>\r
+                       <FUNCTION>FFC</FUNCTION>\r
+                       <FUNCTION>FFS</FUNCTION>\r
+                       <FUNCTION>HALT</FUNCTION>\r
+                       <FUNCTION>INCB</FUNCTION>\r
+                       <FUNCTION>INCL</FUNCTION>\r
+                       <FUNCTION>INCW</FUNCTION>\r
+                       <FUNCTION>INDEX</FUNCTION>\r
+                       <FUNCTION>INSQHI</FUNCTION>\r
+                       <FUNCTION>INSQTI</FUNCTION>\r
+                       <FUNCTION>INSQUE</FUNCTION>\r
+                       <FUNCTION>INSV</FUNCTION>\r
+                       <FUNCTION>IOTA</FUNCTION>\r
+                       <FUNCTION>JMP</FUNCTION>\r
+                       <FUNCTION>JSB</FUNCTION>\r
+                       <FUNCTION>LDPCTX</FUNCTION>\r
+                       <FUNCTION>LOCC</FUNCTION>\r
+                       <FUNCTION>MATCHC</FUNCTION>\r
+                       <FUNCTION>MCOMB</FUNCTION>\r
+                       <FUNCTION>MCOML</FUNCTION>\r
+                       <FUNCTION>MCOMW</FUNCTION>\r
+                       <FUNCTION>MFPR</FUNCTION>\r
+                       <FUNCTION>MFVP</FUNCTION>\r
+                       <FUNCTION>MNEGB</FUNCTION>\r
+                       <FUNCTION>MNEGD</FUNCTION>\r
+                       <FUNCTION>MNEGF</FUNCTION>\r
+                       <FUNCTION>MNEGG</FUNCTION>\r
+                       <FUNCTION>MNEGH</FUNCTION>\r
+                       <FUNCTION>MNEGL</FUNCTION>\r
+                       <FUNCTION>MNEGW</FUNCTION>\r
+                       <FUNCTION>MOVAB</FUNCTION>\r
+                       <FUNCTION>MOVAD</FUNCTION>\r
+                       <FUNCTION>MOVAF</FUNCTION>\r
+                       <FUNCTION>MOVAG</FUNCTION>\r
+                       <FUNCTION>MOVAH</FUNCTION>\r
+                       <FUNCTION>MOVAL</FUNCTION>\r
+                       <FUNCTION>MOVAO</FUNCTION>\r
+                       <FUNCTION>MOVAQ</FUNCTION>\r
+                       <FUNCTION>MOVAW</FUNCTION>\r
+                       <FUNCTION>MOVB</FUNCTION>\r
+                       <FUNCTION>MOVC3</FUNCTION>\r
+                       <FUNCTION>MOVC5</FUNCTION>\r
+                       <FUNCTION>MOVD</FUNCTION>\r
+                       <FUNCTION>MOVF</FUNCTION>\r
+                       <FUNCTION>MOVG</FUNCTION>\r
+                       <FUNCTION>MOVH</FUNCTION>\r
+                       <FUNCTION>MOVL</FUNCTION>\r
+                       <FUNCTION>MOVO</FUNCTION>\r
+                       <FUNCTION>MOVP</FUNCTION>\r
+                       <FUNCTION>MOVPSL</FUNCTION>\r
+                       <FUNCTION>MOVQ</FUNCTION>\r
+                       <FUNCTION>MOVTC</FUNCTION>\r
+                       <FUNCTION>MOVTUC</FUNCTION>\r
+                       <FUNCTION>MOVW</FUNCTION>\r
+                       <FUNCTION>MOVZBL</FUNCTION>\r
+                       <FUNCTION>MOVZBW</FUNCTION>\r
+                       <FUNCTION>MOVZWL</FUNCTION>\r
+                       <FUNCTION>MTPR</FUNCTION>\r
+                       <FUNCTION>MTVP</FUNCTION>\r
+                       <FUNCTION>MULB2</FUNCTION>\r
+                       <FUNCTION>MULB3</FUNCTION>\r
+                       <FUNCTION>MULD2</FUNCTION>\r
+                       <FUNCTION>MULD3</FUNCTION>\r
+                       <FUNCTION>MULF2</FUNCTION>\r
+                       <FUNCTION>MULF3</FUNCTION>\r
+                       <FUNCTION>MULG2</FUNCTION>\r
+                       <FUNCTION>MULG3</FUNCTION>\r
+                       <FUNCTION>MULH2</FUNCTION>\r
+                       <FUNCTION>MULH3</FUNCTION>\r
+                       <FUNCTION>MULL2</FUNCTION>\r
+                       <FUNCTION>MULL3</FUNCTION>\r
+                       <FUNCTION>MULP</FUNCTION>\r
+                       <FUNCTION>MULW2</FUNCTION>\r
+                       <FUNCTION>MULW3</FUNCTION>\r
+                       <FUNCTION>NOP</FUNCTION>\r
+                       <FUNCTION>POLYD</FUNCTION>\r
+                       <FUNCTION>POLYF</FUNCTION>\r
+                       <FUNCTION>POLYG</FUNCTION>\r
+                       <FUNCTION>POLYH</FUNCTION>\r
+                       <FUNCTION>POPR</FUNCTION>\r
+                       <FUNCTION>PROBER</FUNCTION>\r
+                       <FUNCTION>PROBEW</FUNCTION>\r
+                       <FUNCTION>PUSHAB</FUNCTION>\r
+                       <FUNCTION>PUSHABL</FUNCTION>\r
+                       <FUNCTION>PUSHAL</FUNCTION>\r
+                       <FUNCTION>PUSHAD</FUNCTION>\r
+                       <FUNCTION>PUSHAF</FUNCTION>\r
+                       <FUNCTION>PUSHAG</FUNCTION>\r
+                       <FUNCTION>PUSHAH</FUNCTION>\r
+                       <FUNCTION>PUSHAL</FUNCTION>\r
+                       <FUNCTION>PUSHAO</FUNCTION>\r
+                       <FUNCTION>PUSHAQ</FUNCTION>\r
+                       <FUNCTION>PUSHAW</FUNCTION>\r
+                       <FUNCTION>PUSHL</FUNCTION>\r
+                       <FUNCTION>PUSHR</FUNCTION>\r
+                       <FUNCTION>REI</FUNCTION>\r
+                       <FUNCTION>REMQHI</FUNCTION>\r
+                       <FUNCTION>REMQTI</FUNCTION>\r
+                       <FUNCTION>REMQUE</FUNCTION>\r
+                       <FUNCTION>RET</FUNCTION>\r
+                       <FUNCTION>ROTL</FUNCTION>\r
+                       <FUNCTION>RSB</FUNCTION>\r
+                       <FUNCTION>SBWC</FUNCTION>\r
+                       <FUNCTION>SCANC</FUNCTION>\r
+                       <FUNCTION>SKPC</FUNCTION>\r
+                       <FUNCTION>SOBGEQ</FUNCTION>\r
+                       <FUNCTION>SOBGTR</FUNCTION>\r
+                       <FUNCTION>SPANC</FUNCTION>\r
+                       <FUNCTION>SUBB2</FUNCTION>\r
+                       <FUNCTION>SUBB3</FUNCTION>\r
+                       <FUNCTION>SUBD2</FUNCTION>\r
+                       <FUNCTION>SUBD3</FUNCTION>\r
+                       <FUNCTION>SUBF2</FUNCTION>\r
+                       <FUNCTION>SUBF3</FUNCTION>\r
+                       <FUNCTION>SUBG2</FUNCTION>\r
+                       <FUNCTION>SUBG3</FUNCTION>\r
+                       <FUNCTION>SUBH2</FUNCTION>\r
+                       <FUNCTION>SUBH3</FUNCTION>\r
+                       <FUNCTION>SUBL2</FUNCTION>\r
+                       <FUNCTION>SUBL3</FUNCTION>\r
+                       <FUNCTION>SUBP4</FUNCTION>\r
+                       <FUNCTION>SUBP6</FUNCTION>\r
+                       <FUNCTION>SUBW2</FUNCTION>\r
+                       <FUNCTION>SUBW3</FUNCTION>\r
+                       <FUNCTION>SVPCTX</FUNCTION>\r
+                       <FUNCTION>TSTB</FUNCTION>\r
+                       <FUNCTION>TSTD</FUNCTION>\r
+                       <FUNCTION>TSTF</FUNCTION>\r
+                       <FUNCTION>TSTG</FUNCTION>\r
+                       <FUNCTION>TSTH</FUNCTION>\r
+                       <FUNCTION>TSTL</FUNCTION>\r
+                       <FUNCTION>TSTW</FUNCTION>\r
+                       <FUNCTION>VGATHL</FUNCTION>\r
+                       <FUNCTION>VGATHQ</FUNCTION>\r
+                       <FUNCTION>VLDL</FUNCTION>\r
+                       <FUNCTION>VLDQ</FUNCTION>\r
+                       <FUNCTION>VSADDD</FUNCTION>\r
+                       <FUNCTION>VSADDF</FUNCTION>\r
+                       <FUNCTION>VSADDG</FUNCTION>\r
+                       <FUNCTION>VSADDL</FUNCTION>\r
+                       <FUNCTION>VSBICL</FUNCTION>\r
+                       <FUNCTION>VSBISL</FUNCTION>\r
+                       <FUNCTION>VSCATL</FUNCTION>\r
+                       <FUNCTION>VSCATQ</FUNCTION>\r
+                       <FUNCTION>VSCMPD</FUNCTION>\r
+                       <FUNCTION>VSCMPF</FUNCTION>\r
+                       <FUNCTION>VSCMPG</FUNCTION>\r
+                       <FUNCTION>VSCMPL</FUNCTION>\r
+                       <FUNCTION>VSDIVD</FUNCTION>\r
+                       <FUNCTION>VSDIVF</FUNCTION>\r
+                       <FUNCTION>VSDIVG</FUNCTION>\r
+                       <FUNCTION>VSMERGE</FUNCTION>\r
+                       <FUNCTION>VSMULD</FUNCTION>\r
+                       <FUNCTION>VSMULF</FUNCTION>\r
+                       <FUNCTION>VSMULG</FUNCTION>\r
+                       <FUNCTION>VSMULL</FUNCTION>\r
+                       <FUNCTION>VSSLLL</FUNCTION>\r
+                       <FUNCTION>VSSRLL</FUNCTION>\r
+                       <FUNCTION>VSSUBD</FUNCTION>\r
+                       <FUNCTION>VSSUBF</FUNCTION>\r
+                       <FUNCTION>VSSUBG</FUNCTION>\r
+                       <FUNCTION>VSSUBL</FUNCTION>\r
+                       <FUNCTION>VSTL</FUNCTION>\r
+                       <FUNCTION>VSTQ</FUNCTION>\r
+                       <FUNCTION>VSXORL</FUNCTION>\r
+                       <FUNCTION>VSYNC</FUNCTION>\r
+                       <FUNCTION>VVADDD</FUNCTION>\r
+                       <FUNCTION>VVADDF</FUNCTION>\r
+                       <FUNCTION>VVADDG</FUNCTION>\r
+                       <FUNCTION>VVADDL</FUNCTION>\r
+                       <FUNCTION>VVBICL</FUNCTION>\r
+                       <FUNCTION>VVBISL</FUNCTION>\r
+                       <FUNCTION>VVCMPD</FUNCTION>\r
+                       <FUNCTION>VVCMPF</FUNCTION>\r
+                       <FUNCTION>VVCMPG</FUNCTION>\r
+                       <FUNCTION>VVCMPL</FUNCTION>\r
+                       <FUNCTION>VVCVT</FUNCTION>\r
+                       <FUNCTION>VVDIVD</FUNCTION>\r
+                       <FUNCTION>VVDIVF</FUNCTION>\r
+                       <FUNCTION>VVDIVG</FUNCTION>\r
+                       <FUNCTION>VVMERGE</FUNCTION>\r
+                       <FUNCTION>VVMULD</FUNCTION>\r
+                       <FUNCTION>VVMULF</FUNCTION>\r
+                       <FUNCTION>VVMULG</FUNCTION>\r
+                       <FUNCTION>VVMULL</FUNCTION>\r
+                       <FUNCTION>VVSLLL</FUNCTION>\r
+                       <FUNCTION>VVSRLL</FUNCTION>\r
+                       <FUNCTION>VVSUBD</FUNCTION>\r
+                       <FUNCTION>VVSUBF</FUNCTION>\r
+                       <FUNCTION>VVSUBG</FUNCTION>\r
+                       <FUNCTION>VVSUBL</FUNCTION>\r
+                       <FUNCTION>VVXORL</FUNCTION>\r
+                       <FUNCTION>XFC</FUNCTION>\r
+                       <FUNCTION>XORB2</FUNCTION>\r
+                       <FUNCTION>XORB3</FUNCTION>\r
+                       <FUNCTION>XORL2</FUNCTION>\r
+                       <FUNCTION>XORL3</FUNCTION>\r
+                       <FUNCTION>XORW2</FUNCTION>\r
+                       <FUNCTION>XORW3</FUNCTION>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/assembly-mcs51.xml b/extra/xmode/modes/assembly-mcs51.xml
new file mode 100644 (file)
index 0000000..113e196
--- /dev/null
@@ -0,0 +1,237 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+       MCS51 Assembly mode by Mirco Bova (mirco.bova@libero.it)\r
+\r
+       - KEIL syntax\r
+-->\r
+\r
+<MODE>\r
+\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE=";" />\r
+       </PROPS>\r
+\r
+       <RULES HIGHLIGHT_DIGITS="TRUE" IGNORE_CASE="TRUE">\r
+               <EOL_SPAN TYPE="COMMENT1">;</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- NASM: label inside a macro -->\r
+               <MARK_FOLLOWING TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+                       AT_LINE_START="TRUE">%%</MARK_FOLLOWING>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2" AT_LINE_START="TRUE">$</MARK_FOLLOWING>\r
+\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+                       AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+\r
+               <SEQ TYPE="NULL">,</SEQ>\r
+               <SEQ TYPE="NULL">:</SEQ>\r
+               <SEQ TYPE="NULL">(</SEQ>\r
+               <SEQ TYPE="NULL">)</SEQ>\r
+               <SEQ TYPE="NULL">]</SEQ>\r
+               <SEQ TYPE="NULL">[</SEQ>\r
+               <SEQ TYPE="NULL">$</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>MOD</KEYWORD1>\r
+                       <KEYWORD1>SHR</KEYWORD1>\r
+                       <KEYWORD1>SHL</KEYWORD1>\r
+                       <KEYWORD1>NOT</KEYWORD1>\r
+                       <KEYWORD1>AND</KEYWORD1>\r
+                       <KEYWORD1>OR</KEYWORD1>\r
+                       <KEYWORD1>XOR</KEYWORD1>\r
+                       <KEYWORD1>HIGH</KEYWORD1>\r
+                       <KEYWORD1>LOW</KEYWORD1>\r
+                       <KEYWORD1>LT</KEYWORD1>\r
+                       <KEYWORD1>LE</KEYWORD1>\r
+                       <KEYWORD1>NE</KEYWORD1>\r
+                       <KEYWORD1>EQ</KEYWORD1>\r
+                       <KEYWORD1>GE</KEYWORD1>\r
+                       <KEYWORD1>GT</KEYWORD1>\r
+                       <KEYWORD1>DPTR</KEYWORD1>\r
+                       <KEYWORD1>PC</KEYWORD1>\r
+                       <KEYWORD1>EQU</KEYWORD1>\r
+                       <KEYWORD1>SET</KEYWORD1>\r
+                       <KEYWORD1>NUMBER</KEYWORD1>\r
+                       <KEYWORD1>CSEG</KEYWORD1>\r
+                       <KEYWORD1>XSEG</KEYWORD1>\r
+                       <KEYWORD1>DSEG</KEYWORD1>\r
+                       <KEYWORD1>ISEG</KEYWORD1>\r
+                       <KEYWORD1>BSEG</KEYWORD1>\r
+                       <KEYWORD1>RSEG</KEYWORD1>\r
+                       <KEYWORD1>NUL</KEYWORD1>\r
+                       <KEYWORD1>DB</KEYWORD1>\r
+                       <KEYWORD1>DW</KEYWORD1>\r
+                       <KEYWORD1>DWR</KEYWORD1>\r
+                       <KEYWORD1>DS</KEYWORD1>\r
+                       <KEYWORD1>DBIT</KEYWORD1>\r
+                       <KEYWORD1>ORG</KEYWORD1>\r
+                       <KEYWORD1>USING</KEYWORD1>\r
+                       <KEYWORD1>END</KEYWORD1>\r
+                       <KEYWORD1>NAME</KEYWORD1>\r
+                       <KEYWORD1>PUBLIC</KEYWORD1>\r
+                       <KEYWORD1>EXTRN</KEYWORD1>\r
+                       <KEYWORD1>SEGMENT</KEYWORD1>\r
+                       <KEYWORD1>UNIT</KEYWORD1>\r
+                       <KEYWORD1>BITADDRESSABLE</KEYWORD1>\r
+                       <KEYWORD1>INPAGE</KEYWORD1>\r
+                       <KEYWORD1>INBLOCK</KEYWORD1>\r
+                       <KEYWORD1>PAGE</KEYWORD1>\r
+                       <KEYWORD1>OVERLAYABLE</KEYWORD1>\r
+                       <KEYWORD1>AT</KEYWORD1>\r
+                       <KEYWORD1>STACKLEN</KEYWORD1>\r
+                       <KEYWORD1>SBIT</KEYWORD1>\r
+                       <KEYWORD1>SFR</KEYWORD1>\r
+                       <KEYWORD1>SFR16</KEYWORD1>\r
+                       <KEYWORD1>__ERROR__</KEYWORD1>\r
+                       <KEYWORD1>ACALL</KEYWORD1>\r
+                       <KEYWORD1>ADD</KEYWORD1>\r
+                       <KEYWORD1>ADDC</KEYWORD1>\r
+                       <KEYWORD1>AJMP</KEYWORD1>\r
+                       <KEYWORD1>ANL</KEYWORD1>\r
+                       <KEYWORD1>CALL</KEYWORD1>\r
+                       <KEYWORD1>CJNE</KEYWORD1>\r
+                       <KEYWORD1>CLR</KEYWORD1>\r
+                       <KEYWORD1>CPL</KEYWORD1>\r
+                       <KEYWORD1>DA</KEYWORD1>\r
+                       <KEYWORD1>DEC</KEYWORD1>\r
+                       <KEYWORD1>DIV</KEYWORD1>\r
+                       <KEYWORD1>DJNZ</KEYWORD1>\r
+                       <KEYWORD1>INC</KEYWORD1>\r
+                       <KEYWORD1>JB</KEYWORD1>\r
+                       <KEYWORD1>JBC</KEYWORD1>\r
+                       <KEYWORD1>JC</KEYWORD1>\r
+                       <KEYWORD1>JMP</KEYWORD1>\r
+                       <KEYWORD1>JNB</KEYWORD1>\r
+                       <KEYWORD1>JNC</KEYWORD1>\r
+                       <KEYWORD1>JNZ</KEYWORD1>\r
+                       <KEYWORD1>JZ</KEYWORD1>\r
+                       <KEYWORD1>LCALL</KEYWORD1>\r
+                       <KEYWORD1>LJMP</KEYWORD1>\r
+                       <KEYWORD1>MOV</KEYWORD1>\r
+                       <KEYWORD1>MOVC</KEYWORD1>\r
+                       <KEYWORD1>MOVX</KEYWORD1>\r
+                       <KEYWORD1>MUL</KEYWORD1>\r
+                       <KEYWORD1>NOP</KEYWORD1>\r
+                       <KEYWORD1>ORL</KEYWORD1>\r
+                       <KEYWORD1>POP</KEYWORD1>\r
+                       <KEYWORD1>PUSH</KEYWORD1>\r
+                       <KEYWORD1>RET</KEYWORD1>\r
+                       <KEYWORD1>RETI</KEYWORD1>\r
+                       <KEYWORD1>RL</KEYWORD1>\r
+                       <KEYWORD1>RLC</KEYWORD1>\r
+                       <KEYWORD1>RR</KEYWORD1>\r
+                       <KEYWORD1>RRC</KEYWORD1>\r
+                       <KEYWORD1>SETB</KEYWORD1>\r
+                       <KEYWORD1>SJMP</KEYWORD1>\r
+                       <KEYWORD1>SUBB</KEYWORD1>\r
+                       <KEYWORD1>SWAP</KEYWORD1>\r
+                       <KEYWORD1>XCH</KEYWORD1>\r
+                       <KEYWORD1>XCHD</KEYWORD1>\r
+                       <KEYWORD1>XRL</KEYWORD1>\r
+                       <KEYWORD1>IF</KEYWORD1>\r
+                       <KEYWORD1>ELSEIF</KEYWORD1>\r
+                       <KEYWORD1>ELSE</KEYWORD1>\r
+                       <KEYWORD1>ENDIF</KEYWORD1>\r
+                       <KEYWORD1>MACRO</KEYWORD1>\r
+                       <KEYWORD1>REPT</KEYWORD1>\r
+                       <KEYWORD1>IRP</KEYWORD1>\r
+                       <KEYWORD1>IRPC</KEYWORD1>\r
+                       <KEYWORD1>ENDM</KEYWORD1>\r
+                       <KEYWORD1>EXITM</KEYWORD1>\r
+                       <KEYWORD1>LOCAL</KEYWORD1>\r
+                       <KEYWORD1>DPTX</KEYWORD1>\r
+                       <KEYWORD1>DPTN</KEYWORD1>\r
+                       <KEYWORD1>DPTR8</KEYWORD1>\r
+                       <KEYWORD1>DPTR16</KEYWORD1>\r
+                       <KEYWORD1>WR0</KEYWORD1>\r
+                       <KEYWORD1>WR2</KEYWORD1>\r
+                       <KEYWORD1>WR4</KEYWORD1>\r
+                       <KEYWORD1>WR6</KEYWORD1>\r
+                       <KEYWORD1>DR0</KEYWORD1>\r
+                       <KEYWORD1>DR4</KEYWORD1>\r
+                       <KEYWORD1>RJC</KEYWORD1>\r
+                       <KEYWORD1>RJNC</KEYWORD1>\r
+                       <KEYWORD1>RJZ</KEYWORD1>\r
+                       <KEYWORD1>RJNZ</KEYWORD1>\r
+                       <KEYWORD1>JMPI</KEYWORD1>\r
+                       <KEYWORD1>MOVB</KEYWORD1>\r
+                       <KEYWORD1>PUSHA</KEYWORD1>\r
+                       <KEYWORD1>POPA</KEYWORD1>\r
+                       <KEYWORD1>SUB</KEYWORD1>\r
+                       <KEYWORD1>ADDM</KEYWORD1>\r
+                       <KEYWORD1>SUBM</KEYWORD1>\r
+                       <KEYWORD1>SLEEP</KEYWORD1>\r
+                       <KEYWORD1>SYNC</KEYWORD1>\r
+                       <KEYWORD1>DEFINE</KEYWORD1>\r
+                       <KEYWORD1>SUBSTR</KEYWORD1>\r
+                       <KEYWORD1>THEN</KEYWORD1>\r
+                       <KEYWORD1>LEN</KEYWORD1>\r
+                       <KEYWORD1>EQS</KEYWORD1>\r
+                       <KEYWORD1>IF</KEYWORD1>\r
+                       <KEYWORD1>FI</KEYWORD1>\r
+\r
+                       <KEYWORD2>$IF</KEYWORD2>\r
+                       <KEYWORD2>$ELSEIF</KEYWORD2>\r
+                       <KEYWORD2>$ELSE</KEYWORD2>\r
+                       <KEYWORD2>$ENDIF</KEYWORD2>\r
+                       <KEYWORD2>$MOD167</KEYWORD2>\r
+                       <KEYWORD2>$CASE</KEYWORD2>\r
+                       <KEYWORD2>$SEGMENTED</KEYWORD2>\r
+                       <KEYWORD2>$INCLUDE</KEYWORD2>\r
+\r
+                       <!-- memory types -->\r
+                       <KEYWORD2>CODE</KEYWORD2>\r
+                       <KEYWORD2>XDATA</KEYWORD2>\r
+                       <KEYWORD2>DATA</KEYWORD2>\r
+                       <KEYWORD2>IDATA</KEYWORD2>\r
+                       <KEYWORD2>BIT</KEYWORD2>\r
+\r
+                       <!-- Registers -->\r
+                       <KEYWORD3>R0</KEYWORD3>\r
+                       <KEYWORD3>R1</KEYWORD3>\r
+                       <KEYWORD3>R2</KEYWORD3>\r
+                       <KEYWORD3>R3</KEYWORD3>\r
+                       <KEYWORD3>R4</KEYWORD3>\r
+                       <KEYWORD3>R5</KEYWORD3>\r
+                       <KEYWORD3>R6</KEYWORD3>\r
+                       <KEYWORD3>R7</KEYWORD3>\r
+\r
+                       <KEYWORD3>SP</KEYWORD3>\r
+                       <KEYWORD3>A</KEYWORD3>\r
+                       <KEYWORD3>C</KEYWORD3>\r
+                       <KEYWORD3>AB</KEYWORD3>\r
+\r
+                       <!-- Instructions -->\r
+\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/assembly-parrot.xml b/extra/xmode/modes/assembly-parrot.xml
new file mode 100644 (file)
index 0000000..212e182
--- /dev/null
@@ -0,0 +1,138 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+        <PROPS>\r
+                <PROPERTY NAME="lineComment" VALUE="#" />\r
+        </PROPS>\r
+        <RULES IGNORE_CASE="FALSE"\r
+                HIGHLIGHT_DIGITS="TRUE"\r
+                DIGIT_RE="(0x[\p{XDigit}]+|[\p{Digit}]+)"\r
+        >\r
+\r
+                <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                        <BEGIN>"</BEGIN>\r
+                        <END>"</END>\r
+                </SPAN>\r
+\r
+                <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+                <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+                                AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+\r
+                <SEQ TYPE="OPERATOR">,</SEQ>\r
+\r
+                <SEQ_REGEXP TYPE="LITERAL2"\r
+                        HASH_CHARS="ISNP"\r
+                        AT_WORD_START="TRUE"\r
+                >[ISNP]\d{1,2}</SEQ_REGEXP>\r
+\r
+                <KEYWORDS>\r
+                        <KEYWORD1>abs</KEYWORD1>\r
+                        <KEYWORD1>acos</KEYWORD1>\r
+                        <KEYWORD1>add</KEYWORD1>\r
+                        <KEYWORD1>and</KEYWORD1>\r
+                        <KEYWORD1>asec</KEYWORD1>\r
+                        <KEYWORD1>asin</KEYWORD1>\r
+                        <KEYWORD1>atan</KEYWORD1>\r
+                        <KEYWORD1>bounds</KEYWORD1>\r
+                        <KEYWORD1>branch</KEYWORD1>\r
+                        <KEYWORD1>bsr</KEYWORD1>\r
+                        <KEYWORD1>chopm</KEYWORD1>\r
+                        <KEYWORD1>cleari</KEYWORD1>\r
+                        <KEYWORD1>clearn</KEYWORD1>\r
+                        <KEYWORD1>clearp</KEYWORD1>\r
+                        <KEYWORD1>clears</KEYWORD1>\r
+                        <KEYWORD1>clone</KEYWORD1>\r
+                        <KEYWORD1>close</KEYWORD1>\r
+                        <KEYWORD1>cmod</KEYWORD1>\r
+                        <KEYWORD1>concat</KEYWORD1>\r
+                        <KEYWORD1>cos</KEYWORD1>\r
+                        <KEYWORD1>cosh</KEYWORD1>\r
+                        <KEYWORD1>debug</KEYWORD1>\r
+                        <KEYWORD1>dec</KEYWORD1>\r
+                        <KEYWORD1>div</KEYWORD1>\r
+                        <KEYWORD1>end</KEYWORD1>\r
+                        <KEYWORD1>entrytype</KEYWORD1>\r
+                        <KEYWORD1>eq</KEYWORD1>\r
+                        <KEYWORD1>err</KEYWORD1>\r
+                        <KEYWORD1>exp</KEYWORD1>\r
+                        <KEYWORD1>find_global</KEYWORD1>\r
+                        <KEYWORD1>find_type</KEYWORD1>\r
+                        <KEYWORD1>ge</KEYWORD1>\r
+                        <KEYWORD1>getfile</KEYWORD1>\r
+                        <KEYWORD1>getline</KEYWORD1>\r
+                        <KEYWORD1>getpackage</KEYWORD1>\r
+                        <KEYWORD1>gt</KEYWORD1>\r
+                        <KEYWORD1>if</KEYWORD1>\r
+                        <KEYWORD1>inc</KEYWORD1>\r
+                        <KEYWORD1>index</KEYWORD1>\r
+                        <KEYWORD1>jsr</KEYWORD1>\r
+                        <KEYWORD1>jump</KEYWORD1>\r
+                        <KEYWORD1>le</KEYWORD1>\r
+                        <KEYWORD1>length</KEYWORD1>\r
+                        <KEYWORD1>ln</KEYWORD1>\r
+                        <KEYWORD1>log2</KEYWORD1>\r
+                        <KEYWORD1>log10</KEYWORD1>\r
+                        <KEYWORD1>lt</KEYWORD1>\r
+                        <KEYWORD1>mod</KEYWORD1>\r
+                        <KEYWORD1>mul</KEYWORD1>\r
+                        <KEYWORD1>ne</KEYWORD1>\r
+                        <KEYWORD1>new</KEYWORD1>\r
+                        <KEYWORD1>newinterp</KEYWORD1>\r
+                        <KEYWORD1>noop</KEYWORD1>\r
+                        <KEYWORD1>not</KEYWORD1>\r
+                        <KEYWORD1>not</KEYWORD1>\r
+                        <KEYWORD1>open</KEYWORD1>\r
+                        <KEYWORD1>or</KEYWORD1>\r
+                        <KEYWORD1>ord</KEYWORD1>\r
+                        <KEYWORD1>pack</KEYWORD1>\r
+                        <KEYWORD1>pop</KEYWORD1>\r
+                        <KEYWORD1>popi</KEYWORD1>\r
+                        <KEYWORD1>popn</KEYWORD1>\r
+                        <KEYWORD1>popp</KEYWORD1>\r
+                        <KEYWORD1>pops</KEYWORD1>\r
+                        <KEYWORD1>pow</KEYWORD1>\r
+                        <KEYWORD1>print</KEYWORD1>\r
+                        <KEYWORD1>profile</KEYWORD1>\r
+                        <KEYWORD1>push</KEYWORD1>\r
+                        <KEYWORD1>pushi</KEYWORD1>\r
+                        <KEYWORD1>pushn</KEYWORD1>\r
+                        <KEYWORD1>pushp</KEYWORD1>\r
+                        <KEYWORD1>pushs</KEYWORD1>\r
+                        <KEYWORD1>read</KEYWORD1>\r
+                        <KEYWORD1>readline</KEYWORD1>\r
+                        <KEYWORD1>repeat</KEYWORD1>\r
+                        <KEYWORD1>restore</KEYWORD1>\r
+                        <KEYWORD1>ret</KEYWORD1>\r
+                        <KEYWORD1>rotate_up</KEYWORD1>\r
+                        <KEYWORD1>runinterp</KEYWORD1>\r
+                        <KEYWORD1>save</KEYWORD1>\r
+                        <KEYWORD1>sec</KEYWORD1>\r
+                        <KEYWORD1>sech</KEYWORD1>\r
+                        <KEYWORD1>set</KEYWORD1>\r
+                        <KEYWORD1>set_keyed</KEYWORD1>\r
+                        <KEYWORD1>setfile</KEYWORD1>\r
+                        <KEYWORD1>setline</KEYWORD1>\r
+                        <KEYWORD1>setpackage</KEYWORD1>\r
+                        <KEYWORD1>shl</KEYWORD1>\r
+                        <KEYWORD1>shr</KEYWORD1>\r
+                        <KEYWORD1>sin</KEYWORD1>\r
+                        <KEYWORD1>sinh</KEYWORD1>\r
+                        <KEYWORD1>sleep</KEYWORD1>\r
+                        <KEYWORD1>sub</KEYWORD1>\r
+                        <KEYWORD1>substr</KEYWORD1>\r
+                        <KEYWORD1>tan</KEYWORD1>\r
+                        <KEYWORD1>tanh</KEYWORD1>\r
+                        <KEYWORD1>time</KEYWORD1>\r
+                        <KEYWORD1>trace</KEYWORD1>\r
+                        <KEYWORD1>typeof</KEYWORD1>\r
+                        <KEYWORD1>unless</KEYWORD1>\r
+                        <KEYWORD1>warningsoff</KEYWORD1>\r
+                        <KEYWORD1>warningson</KEYWORD1>\r
+                        <KEYWORD1>write</KEYWORD1>\r
+                        <KEYWORD1>xor</KEYWORD1>\r
+                </KEYWORDS>\r
+        </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/assembly-r2000.xml b/extra/xmode/modes/assembly-r2000.xml
new file mode 100644 (file)
index 0000000..4023f54
--- /dev/null
@@ -0,0 +1,259 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- MIPS/SPIM Assembly Mode from\r
+       Marc Rummel marc.rummel@stud.uni-karlsruhe.de \r
+       SIPM Homepage: http://www.cs.wisc.edu/~larus/spim.html\r
+-->\r
+\r
+<MODE>\r
+\r
+       <PROPS>\r
+               <PROPERTY NAME="blockComment" VALUE="#" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",()" />\r
+       </PROPS>\r
+       \r
+       <RULES ESCAPE="\" HIGHLIGHT_DIGITS="TRUE" IGNORE_CASE="TRUE">\r
+               <!-- Comment --> \r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+               \r
+               <!-- Strings -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               \r
+               <!-- Labels -->\r
+               <MARK_PREVIOUS TYPE="LABEL" AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+               \r
+               <!-- Assembler directives -->\r
+               <KEYWORDS>\r
+                       <KEYWORD1>.align</KEYWORD1>\r
+                       <KEYWORD1>.ascii</KEYWORD1>\r
+                       <KEYWORD1>.asciiz</KEYWORD1>\r
+                       <KEYWORD1>.byte</KEYWORD1>\r
+                       <KEYWORD1>.data</KEYWORD1>\r
+                       <KEYWORD1>.double</KEYWORD1>\r
+                       <KEYWORD1>.extern</KEYWORD1>\r
+                       <KEYWORD1>.float</KEYWORD1>\r
+                       <KEYWORD1>.globl</KEYWORD1>\r
+                       <KEYWORD1>.half</KEYWORD1>\r
+                       <KEYWORD1>.kdata</KEYWORD1>\r
+                       <KEYWORD1>.ktext</KEYWORD1>\r
+                       <KEYWORD1>.space</KEYWORD1>\r
+                       <KEYWORD1>.text</KEYWORD1>\r
+                       <KEYWORD1>.word</KEYWORD1>\r
+                       \r
+               <!-- MIPS/SPIM Operations -->\r
+                       <FUNCTION>add</FUNCTION>\r
+                       <FUNCTION>addi</FUNCTION>\r
+                       <FUNCTION>addu</FUNCTION>\r
+                       <FUNCTION>addiu</FUNCTION>\r
+                       <FUNCTION>and</FUNCTION>\r
+                       <FUNCTION>andi</FUNCTION>\r
+                       <FUNCTION>div</FUNCTION>\r
+                       <FUNCTION>divu</FUNCTION>\r
+                       <FUNCTION>mul</FUNCTION>\r
+                       <FUNCTION>mulo</FUNCTION>\r
+                       <FUNCTION>mulou</FUNCTION>\r
+                       <FUNCTION>mult</FUNCTION>\r
+                       <FUNCTION>multu</FUNCTION>\r
+                       <FUNCTION>neg</FUNCTION>\r
+                       <FUNCTION>negu</FUNCTION>\r
+                       <FUNCTION>nor</FUNCTION>\r
+                       <FUNCTION>not</FUNCTION>\r
+                       <FUNCTION>or</FUNCTION>\r
+                       <FUNCTION>ori</FUNCTION>\r
+                       <FUNCTION>rem</FUNCTION>\r
+                       <FUNCTION>remu</FUNCTION>\r
+                       <FUNCTION>rol</FUNCTION>\r
+                       <FUNCTION>ror</FUNCTION>\r
+                       <FUNCTION>sll</FUNCTION>\r
+                       <FUNCTION>sllv</FUNCTION>\r
+                       <FUNCTION>sra</FUNCTION>\r
+                       <FUNCTION>srav</FUNCTION>\r
+                       <FUNCTION>srl</FUNCTION>\r
+                       <FUNCTION>srlv</FUNCTION>\r
+                       <FUNCTION>sub</FUNCTION>\r
+                       <FUNCTION>subu</FUNCTION>\r
+                       <FUNCTION>xor</FUNCTION>\r
+                       <FUNCTION>xori</FUNCTION>\r
+                       <FUNCTION>li</FUNCTION>\r
+                       <FUNCTION>lui</FUNCTION>\r
+                       <FUNCTION>seq</FUNCTION>\r
+                       <FUNCTION>sge</FUNCTION>\r
+                       <FUNCTION>sgt</FUNCTION>\r
+                       <FUNCTION>sgtu</FUNCTION>\r
+                       <FUNCTION>sle</FUNCTION>\r
+                       <FUNCTION>sleu</FUNCTION>\r
+                       <FUNCTION>slt</FUNCTION>\r
+                       <FUNCTION>slti</FUNCTION>\r
+                       <FUNCTION>sltu</FUNCTION>\r
+                       <FUNCTION>sltiu</FUNCTION>\r
+                       <FUNCTION>sne</FUNCTION>\r
+                       <FUNCTION>b</FUNCTION>\r
+                       <FUNCTION>bczt</FUNCTION>\r
+                       <FUNCTION>bczf</FUNCTION>\r
+                       <FUNCTION>beq</FUNCTION>\r
+                       <FUNCTION>beqz</FUNCTION>\r
+                       <FUNCTION>bge</FUNCTION>\r
+                       <FUNCTION>bgeu</FUNCTION>\r
+                       <FUNCTION>bgez</FUNCTION>\r
+                       <FUNCTION>bgezal</FUNCTION>\r
+                       <FUNCTION>bgt</FUNCTION>\r
+                       <FUNCTION>bgtu</FUNCTION>\r
+                       <FUNCTION>bgtz</FUNCTION>\r
+                       <FUNCTION>ble</FUNCTION>\r
+                       <FUNCTION>bleu</FUNCTION>\r
+                       <FUNCTION>blez</FUNCTION>\r
+                       <FUNCTION>bgezal</FUNCTION>\r
+                       <FUNCTION>bltzal</FUNCTION>\r
+                       <FUNCTION>blt</FUNCTION>\r
+                       <FUNCTION>bltu</FUNCTION>\r
+                       <FUNCTION>bltz</FUNCTION>\r
+                       <FUNCTION>bne</FUNCTION>\r
+                       <FUNCTION>bnez</FUNCTION>\r
+                       <FUNCTION>j</FUNCTION>\r
+                       <FUNCTION>jal</FUNCTION>\r
+                       <FUNCTION>jalr</FUNCTION>\r
+                       <FUNCTION>jr</FUNCTION>\r
+                       <FUNCTION>la</FUNCTION>\r
+                       <FUNCTION>lb</FUNCTION>\r
+                       <FUNCTION>blu</FUNCTION>\r
+                       <FUNCTION>lh</FUNCTION>\r
+                       <FUNCTION>lhu</FUNCTION>\r
+                       <FUNCTION>lw</FUNCTION>\r
+                       <FUNCTION>lwcz</FUNCTION>\r
+                       <FUNCTION>lwl</FUNCTION>\r
+                       <FUNCTION>lwr</FUNCTION>\r
+                       <FUNCTION>ulh</FUNCTION>\r
+                       <FUNCTION>ulhu</FUNCTION>\r
+                       <FUNCTION>ulw</FUNCTION>\r
+                       <FUNCTION>sb</FUNCTION>\r
+                       <FUNCTION>sd</FUNCTION>\r
+                       <FUNCTION>sh</FUNCTION>\r
+                       <FUNCTION>sw</FUNCTION>\r
+                       <FUNCTION>swcz</FUNCTION>\r
+                       <FUNCTION>swl</FUNCTION>\r
+                       <FUNCTION>swr</FUNCTION>\r
+                       <FUNCTION>ush</FUNCTION>\r
+                       <FUNCTION>usw</FUNCTION>\r
+                       <FUNCTION>move</FUNCTION>\r
+                       <FUNCTION>mfhi</FUNCTION>\r
+                       <FUNCTION>mflo</FUNCTION>\r
+                       <FUNCTION>mthi</FUNCTION>\r
+                       <FUNCTION>mtlo</FUNCTION>\r
+                       <FUNCTION>mfcz</FUNCTION>\r
+                       <FUNCTION>mfc1.d</FUNCTION>\r
+                       <FUNCTION>mtcz</FUNCTION>\r
+                       <FUNCTION>abs.d</FUNCTION>\r
+                       <FUNCTION>abs.s</FUNCTION>\r
+                       <FUNCTION>add.d</FUNCTION>\r
+                       <FUNCTION>add.s</FUNCTION>\r
+                       <FUNCTION>c.eq.d</FUNCTION>\r
+                       <FUNCTION>c.eq.s</FUNCTION>\r
+                       <FUNCTION>c.le.d</FUNCTION>\r
+                       <FUNCTION>c.le.s</FUNCTION>\r
+                       <FUNCTION>c.lt.d</FUNCTION>\r
+                       <FUNCTION>c.lt.s</FUNCTION>\r
+                       <FUNCTION>cvt.d.s</FUNCTION>\r
+                       <FUNCTION>cbt.d.w</FUNCTION>\r
+                       <FUNCTION>cvt.s.d</FUNCTION>\r
+                       <FUNCTION>cvt.s.w</FUNCTION>\r
+                       <FUNCTION>cvt.w.d</FUNCTION>\r
+                       <FUNCTION>cvt.w.s</FUNCTION>\r
+                       <FUNCTION>div.d</FUNCTION>\r
+                       <FUNCTION>div.s</FUNCTION>\r
+                       <FUNCTION>l.d</FUNCTION>\r
+                       <FUNCTION>l.s</FUNCTION>\r
+                       <FUNCTION>mov.d</FUNCTION>\r
+                       <FUNCTION>mov.s</FUNCTION>\r
+                       <FUNCTION>mul.d</FUNCTION>\r
+                       <FUNCTION>mul.s</FUNCTION>\r
+                       <FUNCTION>neg.d</FUNCTION>\r
+                       <FUNCTION>neg.s</FUNCTION>\r
+                       <FUNCTION>s.d</FUNCTION>\r
+                       <FUNCTION>s.s</FUNCTION>\r
+                       <FUNCTION>sub.d</FUNCTION>\r
+                       <FUNCTION>sub.s</FUNCTION>\r
+                       <FUNCTION>rfe</FUNCTION>\r
+                       <FUNCTION>syscall</FUNCTION>\r
+                       <FUNCTION>break</FUNCTION>\r
+                       <FUNCTION>nop</FUNCTION>\r
+\r
+               <!-- Integer Registers -->\r
+                       <KEYWORD2>$zero</KEYWORD2>\r
+                       <KEYWORD2>$at</KEYWORD2>\r
+                       <KEYWORD2>$v0</KEYWORD2>\r
+                       <KEYWORD2>$v1</KEYWORD2>\r
+                       <KEYWORD2>$a0</KEYWORD2>\r
+                       <KEYWORD2>$a1</KEYWORD2>\r
+                       <KEYWORD2>$a2</KEYWORD2>\r
+                       <KEYWORD2>$a3</KEYWORD2>\r
+            <KEYWORD2>$t0</KEYWORD2>\r
+                       <KEYWORD2>$t1</KEYWORD2>\r
+                       <KEYWORD2>$t2</KEYWORD2>\r
+                       <KEYWORD2>$t3</KEYWORD2>\r
+                       <KEYWORD2>$t4</KEYWORD2>\r
+                       <KEYWORD2>$t5</KEYWORD2>\r
+                       <KEYWORD2>$t6</KEYWORD2>\r
+                       <KEYWORD2>$t7</KEYWORD2>\r
+                       <KEYWORD2>$s0</KEYWORD2>\r
+                       <KEYWORD2>$s1</KEYWORD2>\r
+                       <KEYWORD2>$s2</KEYWORD2>\r
+                       <KEYWORD2>$s3</KEYWORD2>\r
+                       <KEYWORD2>$s4</KEYWORD2>\r
+                       <KEYWORD2>$s5</KEYWORD2>\r
+                       <KEYWORD2>$s6</KEYWORD2>\r
+                       <KEYWORD2>$s7</KEYWORD2>\r
+                       <KEYWORD2>$t8</KEYWORD2>\r
+                       <KEYWORD2>$t9</KEYWORD2>\r
+                       <KEYWORD2>$k0</KEYWORD2>\r
+                       <KEYWORD2>$k1</KEYWORD2>\r
+            <KEYWORD2>$gp</KEYWORD2>\r
+                       <KEYWORD2>$sp</KEYWORD2>\r
+                       <KEYWORD2>$fp</KEYWORD2>\r
+                       <KEYWORD2>$ra</KEYWORD2>\r
+                       \r
+               <!-- Floating Point Registers -->\r
+                       <KEYWORD3>$f0</KEYWORD3>\r
+                       <KEYWORD3>$f1</KEYWORD3>\r
+                       <KEYWORD3>$f2</KEYWORD3>\r
+                       <KEYWORD3>$f3</KEYWORD3>\r
+                       <KEYWORD3>$f4</KEYWORD3>\r
+                       <KEYWORD3>$f5</KEYWORD3>\r
+                       <KEYWORD3>$f6</KEYWORD3>\r
+                       <KEYWORD3>$f7</KEYWORD3>\r
+                       <KEYWORD3>$f8</KEYWORD3>\r
+                       <KEYWORD3>$f9</KEYWORD3>\r
+                       <KEYWORD3>$f10</KEYWORD3>\r
+                       <KEYWORD3>$f11</KEYWORD3>\r
+                       <KEYWORD3>$f12</KEYWORD3>\r
+                       <KEYWORD3>$f13</KEYWORD3>\r
+                       <KEYWORD3>$f14</KEYWORD3>\r
+                       <KEYWORD3>$f15</KEYWORD3>\r
+                       <KEYWORD3>$f16</KEYWORD3>\r
+                       <KEYWORD3>$f17</KEYWORD3>\r
+                       <KEYWORD3>$f18</KEYWORD3>\r
+                       <KEYWORD3>$f19</KEYWORD3>\r
+                       <KEYWORD3>$f20</KEYWORD3>\r
+                       <KEYWORD3>$f21</KEYWORD3>\r
+                       <KEYWORD3>$f22</KEYWORD3>\r
+                       <KEYWORD3>$f23</KEYWORD3>\r
+                       <KEYWORD3>$f24</KEYWORD3>\r
+                       <KEYWORD3>$f25</KEYWORD3>\r
+                       <KEYWORD3>$f26</KEYWORD3>\r
+                       <KEYWORD3>$f27</KEYWORD3>\r
+                       <KEYWORD3>$f28</KEYWORD3>\r
+                       <KEYWORD3>$f29</KEYWORD3>\r
+                       <KEYWORD3>$f30</KEYWORD3>\r
+                       <KEYWORD3>$f31</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/assembly-x86.xml b/extra/xmode/modes/assembly-x86.xml
new file mode 100644 (file)
index 0000000..76882ae
--- /dev/null
@@ -0,0 +1,863 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+       x86 Assembly mode by Kristian Ovaska (kristian.ovaska@helsinki.fi)\r
+\r
+       - Intel syntax\r
+       - Instructions and registers of Pentium III/Athlon\r
+         (including FPU, MMX, 3DNow! and SSE)\r
+       - Full NASM 0.98 & MASM 6.15 keyword support, partial TASM support\r
+-->\r
+\r
+<MODE>\r
+\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE=";" />\r
+       </PROPS>\r
+\r
+       <RULES HIGHLIGHT_DIGITS="TRUE" IGNORE_CASE="TRUE">\r
+               <EOL_SPAN TYPE="COMMENT1">;</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- NASM: label inside a macro -->\r
+               <MARK_FOLLOWING TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+                       AT_LINE_START="TRUE">%%</MARK_FOLLOWING>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2" AT_LINE_START="TRUE">%</MARK_FOLLOWING>\r
+\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+                       AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>.186</KEYWORD1>\r
+                       <KEYWORD1>.286</KEYWORD1>\r
+                       <KEYWORD1>.286P</KEYWORD1>\r
+                       <KEYWORD1>.287</KEYWORD1>\r
+                       <KEYWORD1>.386</KEYWORD1>\r
+                       <KEYWORD1>.386P</KEYWORD1>\r
+                       <KEYWORD1>.387</KEYWORD1>\r
+                       <KEYWORD1>.486</KEYWORD1>\r
+                       <KEYWORD1>.486P</KEYWORD1>\r
+                       <KEYWORD1>.586</KEYWORD1>\r
+                       <KEYWORD1>.586P</KEYWORD1>\r
+                       <KEYWORD1>.686</KEYWORD1>\r
+                       <KEYWORD1>.686P</KEYWORD1>\r
+                       <KEYWORD1>.8086</KEYWORD1>\r
+                       <KEYWORD1>.8087</KEYWORD1>\r
+                       <KEYWORD1>.ALPHA</KEYWORD1>\r
+                       <KEYWORD1>.BREAK</KEYWORD1>\r
+                       <KEYWORD1>.BSS</KEYWORD1>\r
+                       <KEYWORD1>.CODE</KEYWORD1>\r
+                       <KEYWORD1>.CONST</KEYWORD1>\r
+                       <KEYWORD1>.CONTINUE</KEYWORD1>\r
+                       <KEYWORD1>.CREF</KEYWORD1>\r
+                       <KEYWORD1>.DATA</KEYWORD1>\r
+                       <KEYWORD1>.DATA?</KEYWORD1>\r
+                       <KEYWORD1>.DOSSEG</KEYWORD1>\r
+                       <KEYWORD1>.ELSE</KEYWORD1>\r
+                       <KEYWORD1>.ELSEIF</KEYWORD1>\r
+                       <KEYWORD1>.ENDIF</KEYWORD1>\r
+                       <KEYWORD1>.ENDW</KEYWORD1>\r
+                       <KEYWORD1>.ERR</KEYWORD1>\r
+                       <KEYWORD1>.ERR1</KEYWORD1>\r
+                       <KEYWORD1>.ERR2</KEYWORD1>\r
+                       <KEYWORD1>.ERRB</KEYWORD1>\r
+                       <KEYWORD1>.ERRDEF</KEYWORD1>\r
+                       <KEYWORD1>.ERRDIF</KEYWORD1>\r
+                       <KEYWORD1>.ERRDIFI</KEYWORD1>\r
+                       <KEYWORD1>.ERRE</KEYWORD1>\r
+                       <KEYWORD1>.ERRIDN</KEYWORD1>\r
+                       <KEYWORD1>.ERRIDNI</KEYWORD1>\r
+                       <KEYWORD1>.ERRNB</KEYWORD1>\r
+                       <KEYWORD1>.ERRNDEF</KEYWORD1>\r
+                       <KEYWORD1>.ERRNZ</KEYWORD1>\r
+                       <KEYWORD1>.EXIT</KEYWORD1>\r
+                       <KEYWORD1>.FARDATA</KEYWORD1>\r
+                       <KEYWORD1>.FARDATA?</KEYWORD1>\r
+                       <KEYWORD1>.IF</KEYWORD1>\r
+                       <KEYWORD1>.K3D</KEYWORD1>\r
+                       <KEYWORD1>.LALL</KEYWORD1>\r
+                       <KEYWORD1>.LFCOND</KEYWORD1>\r
+                       <KEYWORD1>.LIST</KEYWORD1>\r
+                       <KEYWORD1>.LISTALL</KEYWORD1>\r
+                       <KEYWORD1>.LISTIF</KEYWORD1>\r
+                       <KEYWORD1>.LISTMACRO</KEYWORD1>\r
+                       <KEYWORD1>.LISTMACROALL</KEYWORD1>\r
+                       <KEYWORD1>.MMX</KEYWORD1>\r
+                       <KEYWORD1>.MODEL</KEYWORD1>\r
+                       <KEYWORD1>.MSFLOAT</KEYWORD1>\r
+                       <KEYWORD1>.NO87</KEYWORD1>\r
+                       <KEYWORD1>.NOCREF</KEYWORD1>\r
+                       <KEYWORD1>.NOLIST</KEYWORD1>\r
+                       <KEYWORD1>.NOLISTIF</KEYWORD1>\r
+                       <KEYWORD1>.NOLISTMACRO</KEYWORD1>\r
+                       <KEYWORD1>.RADIX</KEYWORD1>\r
+                       <KEYWORD1>.REPEAT</KEYWORD1>\r
+                       <KEYWORD1>.SALL</KEYWORD1>\r
+                       <KEYWORD1>.SEQ</KEYWORD1>\r
+                       <KEYWORD1>.SFCOND</KEYWORD1>\r
+                       <KEYWORD1>.STACK</KEYWORD1>\r
+                       <KEYWORD1>.STARTUP</KEYWORD1>\r
+                       <KEYWORD1>.TEXT</KEYWORD1>\r
+                       <KEYWORD1>.TFCOND</KEYWORD1>\r
+                       <KEYWORD1>.UNTIL</KEYWORD1>\r
+                       <KEYWORD1>.UNTILCXZ</KEYWORD1>\r
+                       <KEYWORD1>.WHILE</KEYWORD1>\r
+                       <KEYWORD1>.XALL</KEYWORD1>\r
+                       <KEYWORD1>.XCREF</KEYWORD1>\r
+                       <KEYWORD1>.XLIST</KEYWORD1>\r
+                       <KEYWORD1>.XMM</KEYWORD1>\r
+                       <KEYWORD1>__FILE__</KEYWORD1>\r
+                       <KEYWORD1>__LINE__</KEYWORD1>\r
+                       <KEYWORD1>A16</KEYWORD1>\r
+                       <KEYWORD1>A32</KEYWORD1>\r
+                       <KEYWORD1>ADDR</KEYWORD1>\r
+                       <KEYWORD1>ALIGN</KEYWORD1>\r
+                       <KEYWORD1>ALIGNB</KEYWORD1>\r
+                       <KEYWORD1>ASSUME</KEYWORD1>\r
+                       <KEYWORD1>BITS</KEYWORD1>\r
+                       <KEYWORD1>CARRY?</KEYWORD1>\r
+                       <KEYWORD1>CATSTR</KEYWORD1>\r
+                       <KEYWORD1>CODESEG</KEYWORD1>\r
+                       <KEYWORD1>COMM</KEYWORD1>\r
+                       <KEYWORD1>COMMENT</KEYWORD1>\r
+                       <KEYWORD1>COMMON</KEYWORD1>\r
+                       <KEYWORD1>DATASEG</KEYWORD1>\r
+                       <KEYWORD1>DOSSEG</KEYWORD1>\r
+                       <KEYWORD1>ECHO</KEYWORD1>\r
+                       <KEYWORD1>ELSE</KEYWORD1>\r
+                       <KEYWORD1>ELSEIF</KEYWORD1>\r
+                       <KEYWORD1>ELSEIF1</KEYWORD1>\r
+                       <KEYWORD1>ELSEIF2</KEYWORD1>\r
+                       <KEYWORD1>ELSEIFB</KEYWORD1>\r
+                       <KEYWORD1>ELSEIFDEF</KEYWORD1>\r
+                       <KEYWORD1>ELSEIFE</KEYWORD1>\r
+                       <KEYWORD1>ELSEIFIDN</KEYWORD1>\r
+                       <KEYWORD1>ELSEIFNB</KEYWORD1>\r
+                       <KEYWORD1>ELSEIFNDEF</KEYWORD1>\r
+                       <KEYWORD1>END</KEYWORD1>\r
+                       <KEYWORD1>ENDIF</KEYWORD1>\r
+                       <KEYWORD1>ENDM</KEYWORD1>\r
+                       <KEYWORD1>ENDP</KEYWORD1>\r
+                       <KEYWORD1>ENDS</KEYWORD1>\r
+                       <KEYWORD1>ENDSTRUC</KEYWORD1>\r
+                       <KEYWORD1>EVEN</KEYWORD1>\r
+                       <KEYWORD1>EXITM</KEYWORD1>\r
+                       <KEYWORD1>EXPORT</KEYWORD1>\r
+                       <KEYWORD1>EXTERN</KEYWORD1>\r
+                       <KEYWORD1>EXTERNDEF</KEYWORD1>\r
+                       <KEYWORD1>EXTRN</KEYWORD1>\r
+                       <KEYWORD1>FAR</KEYWORD1>\r
+                       <KEYWORD1>FOR</KEYWORD1>\r
+                       <KEYWORD1>FORC</KEYWORD1>\r
+                       <KEYWORD1>GLOBAL</KEYWORD1>\r
+                       <KEYWORD1>GOTO</KEYWORD1>\r
+                       <KEYWORD1>GROUP</KEYWORD1>\r
+                       <KEYWORD1>HIGH</KEYWORD1>\r
+                       <KEYWORD1>HIGHWORD</KEYWORD1>\r
+                       <KEYWORD1>IEND</KEYWORD1>\r
+                       <KEYWORD1>IF</KEYWORD1>\r
+                       <KEYWORD1>IF1</KEYWORD1>\r
+                       <KEYWORD1>IF2</KEYWORD1>\r
+                       <KEYWORD1>IFB</KEYWORD1>\r
+                       <KEYWORD1>IFDEF</KEYWORD1>\r
+                       <KEYWORD1>IFDIF</KEYWORD1>\r
+                       <KEYWORD1>IFDIFI</KEYWORD1>\r
+                       <KEYWORD1>IFE</KEYWORD1>\r
+                       <KEYWORD1>IFIDN</KEYWORD1>\r
+                       <KEYWORD1>IFIDNI</KEYWORD1>\r
+                       <KEYWORD1>IFNB</KEYWORD1>\r
+                       <KEYWORD1>IFNDEF</KEYWORD1>\r
+                       <KEYWORD1>IMPORT</KEYWORD1>\r
+                       <KEYWORD1>INCBIN</KEYWORD1>\r
+                       <KEYWORD1>INCLUDE</KEYWORD1>\r
+                       <KEYWORD1>INCLUDELIB</KEYWORD1>\r
+                       <KEYWORD1>INSTR</KEYWORD1>\r
+                       <KEYWORD1>INVOKE</KEYWORD1>\r
+                       <KEYWORD1>IRP</KEYWORD1>\r
+                       <KEYWORD1>IRPC</KEYWORD1>\r
+                       <KEYWORD1>ISTRUC</KEYWORD1>\r
+                       <KEYWORD1>LABEL</KEYWORD1>\r
+                       <KEYWORD1>LENGTH</KEYWORD1>\r
+                       <KEYWORD1>LENGTHOF</KEYWORD1>\r
+                       <KEYWORD1>LOCAL</KEYWORD1>\r
+                       <KEYWORD1>LOW</KEYWORD1>\r
+                       <KEYWORD1>LOWWORD</KEYWORD1>\r
+                       <KEYWORD1>LROFFSET</KEYWORD1>\r
+                       <KEYWORD1>MACRO</KEYWORD1>\r
+                       <KEYWORD1>NAME</KEYWORD1>\r
+                       <KEYWORD1>NEAR</KEYWORD1>\r
+                       <KEYWORD1>NOSPLIT</KEYWORD1>\r
+                       <KEYWORD1>O16</KEYWORD1>\r
+                       <KEYWORD1>O32</KEYWORD1>\r
+                       <KEYWORD1>OFFSET</KEYWORD1>\r
+                       <KEYWORD1>OPATTR</KEYWORD1>\r
+                       <KEYWORD1>OPTION</KEYWORD1>\r
+                       <KEYWORD1>ORG</KEYWORD1>\r
+                       <KEYWORD1>OVERFLOW?</KEYWORD1>\r
+                       <KEYWORD1>PAGE</KEYWORD1>\r
+                       <KEYWORD1>PARITY?</KEYWORD1>\r
+                       <KEYWORD1>POPCONTEXT</KEYWORD1>\r
+                       <KEYWORD1>PRIVATE</KEYWORD1>\r
+                       <KEYWORD1>PROC</KEYWORD1>\r
+                       <KEYWORD1>PROTO</KEYWORD1>\r
+                       <KEYWORD1>PTR</KEYWORD1>\r
+                       <KEYWORD1>PUBLIC</KEYWORD1>\r
+                       <KEYWORD1>PURGE</KEYWORD1>\r
+                       <KEYWORD1>PUSHCONTEXT</KEYWORD1>\r
+                       <KEYWORD1>RECORD</KEYWORD1>\r
+                       <KEYWORD1>REPEAT</KEYWORD1>\r
+                       <KEYWORD1>REPT</KEYWORD1>\r
+                       <KEYWORD1>SECTION</KEYWORD1>\r
+                       <KEYWORD1>SEG</KEYWORD1>\r
+                       <KEYWORD1>SEGMENT</KEYWORD1>\r
+                       <KEYWORD1>SHORT</KEYWORD1>\r
+                       <KEYWORD1>SIGN?</KEYWORD1>\r
+                       <KEYWORD1>SIZE</KEYWORD1>\r
+                       <KEYWORD1>SIZEOF</KEYWORD1>\r
+                       <KEYWORD1>SIZESTR</KEYWORD1>\r
+                       <KEYWORD1>STACK</KEYWORD1>\r
+                       <KEYWORD1>STRUC</KEYWORD1>\r
+                       <KEYWORD1>STRUCT</KEYWORD1>\r
+                       <KEYWORD1>SUBSTR</KEYWORD1>\r
+                       <KEYWORD1>SUBTITLE</KEYWORD1>\r
+                       <KEYWORD1>SUBTTL</KEYWORD1>\r
+                       <KEYWORD1>THIS</KEYWORD1>\r
+                       <KEYWORD1>TITLE</KEYWORD1>\r
+                       <KEYWORD1>TYPE</KEYWORD1>\r
+                       <KEYWORD1>TYPEDEF</KEYWORD1>\r
+                       <KEYWORD1>UNION</KEYWORD1>\r
+                       <KEYWORD1>USE16</KEYWORD1>\r
+                       <KEYWORD1>USE32</KEYWORD1>\r
+                       <KEYWORD1>USES</KEYWORD1>\r
+                       <KEYWORD1>WHILE</KEYWORD1>\r
+                       <KEYWORD1>WRT</KEYWORD1>\r
+                       <KEYWORD1>ZERO?</KEYWORD1>\r
+\r
+                       <KEYWORD2>DB</KEYWORD2>\r
+                       <KEYWORD2>DW</KEYWORD2>\r
+                       <KEYWORD2>DD</KEYWORD2>\r
+                       <KEYWORD2>DF</KEYWORD2>\r
+                       <KEYWORD2>DQ</KEYWORD2>\r
+                       <KEYWORD2>DT</KEYWORD2>\r
+                       <KEYWORD2>RESB</KEYWORD2>\r
+                       <KEYWORD2>RESW</KEYWORD2>\r
+                       <KEYWORD2>RESD</KEYWORD2>\r
+                       <KEYWORD2>RESQ</KEYWORD2>\r
+                       <KEYWORD2>REST</KEYWORD2>\r
+                       <KEYWORD2>EQU</KEYWORD2>\r
+                       <KEYWORD2>TEXTEQU</KEYWORD2>\r
+                       <KEYWORD2>TIMES</KEYWORD2>\r
+                       <KEYWORD2>DUP</KEYWORD2>\r
+\r
+                       <KEYWORD2>BYTE</KEYWORD2>\r
+                       <KEYWORD2>WORD</KEYWORD2>\r
+                       <KEYWORD2>DWORD</KEYWORD2>\r
+                       <KEYWORD2>FWORD</KEYWORD2>\r
+                       <KEYWORD2>QWORD</KEYWORD2>\r
+                       <KEYWORD2>TBYTE</KEYWORD2>\r
+                       <KEYWORD2>SBYTE</KEYWORD2>\r
+                       <KEYWORD2>TWORD</KEYWORD2>\r
+                       <KEYWORD2>SWORD</KEYWORD2>\r
+                       <KEYWORD2>SDWORD</KEYWORD2>\r
+                       <KEYWORD2>REAL4</KEYWORD2>\r
+                       <KEYWORD2>REAL8</KEYWORD2>\r
+                       <KEYWORD2>REAL10</KEYWORD2>\r
+\r
+                       <!-- Registers -->\r
+                       <KEYWORD3>AL</KEYWORD3>\r
+                       <KEYWORD3>BL</KEYWORD3>\r
+                       <KEYWORD3>CL</KEYWORD3>\r
+                       <KEYWORD3>DL</KEYWORD3>\r
+                       <KEYWORD3>AH</KEYWORD3>\r
+                       <KEYWORD3>BH</KEYWORD3>\r
+                       <KEYWORD3>CH</KEYWORD3>\r
+                       <KEYWORD3>DH</KEYWORD3>\r
+                       <KEYWORD3>AX</KEYWORD3>\r
+                       <KEYWORD3>BX</KEYWORD3>\r
+                       <KEYWORD3>CX</KEYWORD3>\r
+                       <KEYWORD3>DX</KEYWORD3>\r
+                       <KEYWORD3>SI</KEYWORD3>\r
+                       <KEYWORD3>DI</KEYWORD3>\r
+                       <KEYWORD3>SP</KEYWORD3>\r
+                       <KEYWORD3>BP</KEYWORD3>\r
+                       <KEYWORD3>EAX</KEYWORD3>\r
+                       <KEYWORD3>EBX</KEYWORD3>\r
+                       <KEYWORD3>ECX</KEYWORD3>\r
+                       <KEYWORD3>EDX</KEYWORD3>\r
+                       <KEYWORD3>ESI</KEYWORD3>\r
+                       <KEYWORD3>EDI</KEYWORD3>\r
+                       <KEYWORD3>ESP</KEYWORD3>\r
+                       <KEYWORD3>EBP</KEYWORD3>\r
+                       <KEYWORD3>CS</KEYWORD3>\r
+                       <KEYWORD3>DS</KEYWORD3>\r
+                       <KEYWORD3>SS</KEYWORD3>\r
+                       <KEYWORD3>ES</KEYWORD3>\r
+                       <KEYWORD3>FS</KEYWORD3>\r
+                       <KEYWORD3>GS</KEYWORD3>\r
+                       <KEYWORD3>ST</KEYWORD3>\r
+                       <KEYWORD3>ST0</KEYWORD3>\r
+                       <KEYWORD3>ST1</KEYWORD3>\r
+                       <KEYWORD3>ST2</KEYWORD3>\r
+                       <KEYWORD3>ST3</KEYWORD3>\r
+                       <KEYWORD3>ST4</KEYWORD3>\r
+                       <KEYWORD3>ST5</KEYWORD3>\r
+                       <KEYWORD3>ST6</KEYWORD3>\r
+                       <KEYWORD3>ST7</KEYWORD3>\r
+                       <KEYWORD3>MM0</KEYWORD3>\r
+                       <KEYWORD3>MM1</KEYWORD3>\r
+                       <KEYWORD3>MM2</KEYWORD3>\r
+                       <KEYWORD3>MM3</KEYWORD3>\r
+                       <KEYWORD3>MM4</KEYWORD3>\r
+                       <KEYWORD3>MM5</KEYWORD3>\r
+                       <KEYWORD3>MM6</KEYWORD3>\r
+                       <KEYWORD3>MM7</KEYWORD3>\r
+                       <KEYWORD3>XMM0</KEYWORD3>\r
+                       <KEYWORD3>XMM1</KEYWORD3>\r
+                       <KEYWORD3>XMM2</KEYWORD3>\r
+                       <KEYWORD3>XMM3</KEYWORD3>\r
+                       <KEYWORD3>XMM4</KEYWORD3>\r
+                       <KEYWORD3>XMM5</KEYWORD3>\r
+                       <KEYWORD3>XMM6</KEYWORD3>\r
+                       <KEYWORD3>XMM7</KEYWORD3>\r
+                       <KEYWORD3>CR0</KEYWORD3>\r
+                       <KEYWORD3>CR2</KEYWORD3>\r
+                       <KEYWORD3>CR3</KEYWORD3>\r
+                       <KEYWORD3>CR4</KEYWORD3>\r
+                       <KEYWORD3>DR0</KEYWORD3>\r
+                       <KEYWORD3>DR1</KEYWORD3>\r
+                       <KEYWORD3>DR2</KEYWORD3>\r
+                       <KEYWORD3>DR3</KEYWORD3>\r
+                       <KEYWORD3>DR4</KEYWORD3>\r
+                       <KEYWORD3>DR5</KEYWORD3>\r
+                       <KEYWORD3>DR6</KEYWORD3>\r
+                       <KEYWORD3>DR7</KEYWORD3>\r
+                       <KEYWORD3>TR3</KEYWORD3>\r
+                       <KEYWORD3>TR4</KEYWORD3>\r
+                       <KEYWORD3>TR5</KEYWORD3>\r
+                       <KEYWORD3>TR6</KEYWORD3>\r
+                       <KEYWORD3>TR7</KEYWORD3>\r
+\r
+                       <!-- Instructions: Pentium III/MMX/SSE -->\r
+                       <FUNCTION>AAA</FUNCTION>\r
+                       <FUNCTION>AAD</FUNCTION>\r
+                       <FUNCTION>AAM</FUNCTION>\r
+                       <FUNCTION>AAS</FUNCTION>\r
+                       <FUNCTION>ADC</FUNCTION>\r
+                       <FUNCTION>ADD</FUNCTION>\r
+                       <FUNCTION>ADDPS</FUNCTION>\r
+                       <FUNCTION>ADDSS</FUNCTION>\r
+                       <FUNCTION>AND</FUNCTION>\r
+                       <FUNCTION>ANDNPS</FUNCTION>\r
+                       <FUNCTION>ANDPS</FUNCTION>\r
+                       <FUNCTION>ARPL</FUNCTION>\r
+                       <FUNCTION>BOUND</FUNCTION>\r
+                       <FUNCTION>BSF</FUNCTION>\r
+                       <FUNCTION>BSR</FUNCTION>\r
+                       <FUNCTION>BSWAP</FUNCTION>\r
+                       <FUNCTION>BT</FUNCTION>\r
+                       <FUNCTION>BTC</FUNCTION>\r
+                       <FUNCTION>BTR</FUNCTION>\r
+                       <FUNCTION>BTS</FUNCTION>\r
+                       <FUNCTION>CALL</FUNCTION>\r
+                       <FUNCTION>CBW</FUNCTION>\r
+                       <FUNCTION>CDQ</FUNCTION>\r
+                       <FUNCTION>CLC</FUNCTION>\r
+                       <FUNCTION>CLD</FUNCTION>\r
+                       <FUNCTION>CLI</FUNCTION>\r
+                       <FUNCTION>CLTS</FUNCTION>\r
+                       <FUNCTION>CMC</FUNCTION>\r
+                       <FUNCTION>CMOVA</FUNCTION>\r
+                       <FUNCTION>CMOVAE</FUNCTION>\r
+                       <FUNCTION>CMOVB</FUNCTION>\r
+                       <FUNCTION>CMOVBE</FUNCTION>\r
+                       <FUNCTION>CMOVC</FUNCTION>\r
+                       <FUNCTION>CMOVE</FUNCTION>\r
+                       <FUNCTION>CMOVG</FUNCTION>\r
+                       <FUNCTION>CMOVGE</FUNCTION>\r
+                       <FUNCTION>CMOVL</FUNCTION>\r
+                       <FUNCTION>CMOVLE</FUNCTION>\r
+                       <FUNCTION>CMOVNA</FUNCTION>\r
+                       <FUNCTION>CMOVNAE</FUNCTION>\r
+                       <FUNCTION>CMOVNB</FUNCTION>\r
+                       <FUNCTION>CMOVNBE</FUNCTION>\r
+                       <FUNCTION>CMOVNC</FUNCTION>\r
+                       <FUNCTION>CMOVNE</FUNCTION>\r
+                       <FUNCTION>CMOVNG</FUNCTION>\r
+                       <FUNCTION>CMOVNGE</FUNCTION>\r
+                       <FUNCTION>CMOVNL</FUNCTION>\r
+                       <FUNCTION>CMOVNLE</FUNCTION>\r
+                       <FUNCTION>CMOVNO</FUNCTION>\r
+                       <FUNCTION>CMOVNP</FUNCTION>\r
+                       <FUNCTION>CMOVNS</FUNCTION>\r
+                       <FUNCTION>CMOVNZ</FUNCTION>\r
+                       <FUNCTION>CMOVO</FUNCTION>\r
+                       <FUNCTION>CMOVP</FUNCTION>\r
+                       <FUNCTION>CMOVPE</FUNCTION>\r
+                       <FUNCTION>CMOVPO</FUNCTION>\r
+                       <FUNCTION>CMOVS</FUNCTION>\r
+                       <FUNCTION>CMOVZ</FUNCTION>\r
+                       <FUNCTION>CMP</FUNCTION>\r
+                       <FUNCTION>CMPPS</FUNCTION>\r
+                       <FUNCTION>CMPS</FUNCTION>\r
+                       <FUNCTION>CMPSB</FUNCTION>\r
+                       <FUNCTION>CMPSD</FUNCTION>\r
+                       <FUNCTION>CMPSS</FUNCTION>\r
+                       <FUNCTION>CMPSW</FUNCTION>\r
+                       <FUNCTION>CMPXCHG</FUNCTION>\r
+                       <FUNCTION>CMPXCHGB</FUNCTION>\r
+                       <FUNCTION>COMISS</FUNCTION>\r
+                       <FUNCTION>CPUID</FUNCTION>\r
+                       <FUNCTION>CWD</FUNCTION>\r
+                       <FUNCTION>CWDE</FUNCTION>\r
+                       <FUNCTION>CVTPI2PS</FUNCTION>\r
+                       <FUNCTION>CVTPS2PI</FUNCTION>\r
+                       <FUNCTION>CVTSI2SS</FUNCTION>\r
+                       <FUNCTION>CVTSS2SI</FUNCTION>\r
+                       <FUNCTION>CVTTPS2PI</FUNCTION>\r
+                       <FUNCTION>CVTTSS2SI</FUNCTION>\r
+                       <FUNCTION>DAA</FUNCTION>\r
+                       <FUNCTION>DAS</FUNCTION>\r
+                       <FUNCTION>DEC</FUNCTION>\r
+                       <FUNCTION>DIV</FUNCTION>\r
+                       <FUNCTION>DIVPS</FUNCTION>\r
+                       <FUNCTION>DIVSS</FUNCTION>\r
+                       <FUNCTION>EMMS</FUNCTION>\r
+                       <FUNCTION>ENTER</FUNCTION>\r
+                       <FUNCTION>F2XM1</FUNCTION>\r
+                       <FUNCTION>FABS</FUNCTION>\r
+                       <FUNCTION>FADD</FUNCTION>\r
+                       <FUNCTION>FADDP</FUNCTION>\r
+                       <FUNCTION>FBLD</FUNCTION>\r
+                       <FUNCTION>FBSTP</FUNCTION>\r
+                       <FUNCTION>FCHS</FUNCTION>\r
+                       <FUNCTION>FCLEX</FUNCTION>\r
+                       <FUNCTION>FCMOVB</FUNCTION>\r
+                       <FUNCTION>FCMOVBE</FUNCTION>\r
+                       <FUNCTION>FCMOVE</FUNCTION>\r
+                       <FUNCTION>FCMOVNB</FUNCTION>\r
+                       <FUNCTION>FCMOVNBE</FUNCTION>\r
+                       <FUNCTION>FCMOVNE</FUNCTION>\r
+                       <FUNCTION>FCMOVNU</FUNCTION>\r
+                       <FUNCTION>FCMOVU</FUNCTION>\r
+                       <FUNCTION>FCOM</FUNCTION>\r
+                       <FUNCTION>FCOMI</FUNCTION>\r
+                       <FUNCTION>FCOMIP</FUNCTION>\r
+                       <FUNCTION>FCOMP</FUNCTION>\r
+                       <FUNCTION>FCOMPP</FUNCTION>\r
+                       <FUNCTION>FCOS</FUNCTION>\r
+                       <FUNCTION>FDECSTP</FUNCTION>\r
+                       <FUNCTION>FDIV</FUNCTION>\r
+                       <FUNCTION>FDIVP</FUNCTION>\r
+                       <FUNCTION>FDIVR</FUNCTION>\r
+                       <FUNCTION>FDIVRP</FUNCTION>\r
+                       <FUNCTION>FFREE</FUNCTION>\r
+                       <FUNCTION>FIADD</FUNCTION>\r
+                       <FUNCTION>FICOM</FUNCTION>\r
+                       <FUNCTION>FICOMP</FUNCTION>\r
+                       <FUNCTION>FIDIV</FUNCTION>\r
+                       <FUNCTION>FIDIVR</FUNCTION>\r
+                       <FUNCTION>FILD</FUNCTION>\r
+                       <FUNCTION>FIMUL</FUNCTION>\r
+                       <FUNCTION>FINCSTP</FUNCTION>\r
+                       <FUNCTION>FINIT</FUNCTION>\r
+                       <FUNCTION>FIST</FUNCTION>\r
+                       <FUNCTION>FISTP</FUNCTION>\r
+                       <FUNCTION>FISUB</FUNCTION>\r
+                       <FUNCTION>FISUBR</FUNCTION>\r
+                       <FUNCTION>FLD1</FUNCTION>\r
+                       <FUNCTION>FLDCW</FUNCTION>\r
+                       <FUNCTION>FLDENV</FUNCTION>\r
+                       <FUNCTION>FLDL2E</FUNCTION>\r
+                       <FUNCTION>FLDL2T</FUNCTION>\r
+                       <FUNCTION>FLDLG2</FUNCTION>\r
+                       <FUNCTION>FLDLN2</FUNCTION>\r
+                       <FUNCTION>FLDPI</FUNCTION>\r
+                       <FUNCTION>FLDZ</FUNCTION>\r
+                       <FUNCTION>FMUL</FUNCTION>\r
+                       <FUNCTION>FMULP</FUNCTION>\r
+                       <FUNCTION>FNCLEX</FUNCTION>\r
+                       <FUNCTION>FNINIT</FUNCTION>\r
+                       <FUNCTION>FNOP</FUNCTION>\r
+                       <FUNCTION>FNSAVE</FUNCTION>\r
+                       <FUNCTION>FNSTCW</FUNCTION>\r
+                       <FUNCTION>FNSTENV</FUNCTION>\r
+                       <FUNCTION>FNSTSW</FUNCTION>\r
+                       <FUNCTION>FPATAN</FUNCTION>\r
+                       <FUNCTION>FPREM</FUNCTION>\r
+                       <FUNCTION>FPREMI</FUNCTION>\r
+                       <FUNCTION>FPTAN</FUNCTION>\r
+                       <FUNCTION>FRNDINT</FUNCTION>\r
+                       <FUNCTION>FRSTOR</FUNCTION>\r
+                       <FUNCTION>FSAVE</FUNCTION>\r
+                       <FUNCTION>FSCALE</FUNCTION>\r
+                       <FUNCTION>FSIN</FUNCTION>\r
+                       <FUNCTION>FSINCOS</FUNCTION>\r
+                       <FUNCTION>FSQRT</FUNCTION>\r
+                       <FUNCTION>FST</FUNCTION>\r
+                       <FUNCTION>FSTCW</FUNCTION>\r
+                       <FUNCTION>FSTENV</FUNCTION>\r
+                       <FUNCTION>FSTP</FUNCTION>\r
+                       <FUNCTION>FSTSW</FUNCTION>\r
+                       <FUNCTION>FSUB</FUNCTION>\r
+                       <FUNCTION>FSUBP</FUNCTION>\r
+                       <FUNCTION>FSUBR</FUNCTION>\r
+                       <FUNCTION>FSUBRP</FUNCTION>\r
+                       <FUNCTION>FTST</FUNCTION>\r
+                       <FUNCTION>FUCOM</FUNCTION>\r
+                       <FUNCTION>FUCOMI</FUNCTION>\r
+                       <FUNCTION>FUCOMIP</FUNCTION>\r
+                       <FUNCTION>FUCOMP</FUNCTION>\r
+                       <FUNCTION>FUCOMPP</FUNCTION>\r
+                       <FUNCTION>FWAIT</FUNCTION>\r
+                       <FUNCTION>FXAM</FUNCTION>\r
+                       <FUNCTION>FXCH</FUNCTION>\r
+                       <FUNCTION>FXRSTOR</FUNCTION>\r
+                       <FUNCTION>FXSAVE</FUNCTION>\r
+                       <FUNCTION>FXTRACT</FUNCTION>\r
+                       <FUNCTION>FYL2X</FUNCTION>\r
+                       <FUNCTION>FYL2XP1</FUNCTION>\r
+                       <FUNCTION>HLT</FUNCTION>\r
+                       <FUNCTION>IDIV</FUNCTION>\r
+                       <FUNCTION>IMUL</FUNCTION>\r
+                       <FUNCTION>IN</FUNCTION>\r
+                       <FUNCTION>INC</FUNCTION>\r
+                       <FUNCTION>INS</FUNCTION>\r
+                       <FUNCTION>INSB</FUNCTION>\r
+                       <FUNCTION>INSD</FUNCTION>\r
+                       <FUNCTION>INSW</FUNCTION>\r
+                       <FUNCTION>INT</FUNCTION>\r
+                       <FUNCTION>INTO</FUNCTION>\r
+                       <FUNCTION>INVD</FUNCTION>\r
+                       <FUNCTION>INVLPG</FUNCTION>\r
+                       <FUNCTION>IRET</FUNCTION>\r
+                       <FUNCTION>JA</FUNCTION>\r
+                       <FUNCTION>JAE</FUNCTION>\r
+                       <FUNCTION>JB</FUNCTION>\r
+                       <FUNCTION>JBE</FUNCTION>\r
+                       <FUNCTION>JC</FUNCTION>\r
+                       <FUNCTION>JCXZ</FUNCTION>\r
+                       <FUNCTION>JE</FUNCTION>\r
+                       <FUNCTION>JECXZ</FUNCTION>\r
+                       <FUNCTION>JG</FUNCTION>\r
+                       <FUNCTION>JGE</FUNCTION>\r
+                       <FUNCTION>JL</FUNCTION>\r
+                       <FUNCTION>JLE</FUNCTION>\r
+                       <FUNCTION>JMP</FUNCTION>\r
+                       <FUNCTION>JNA</FUNCTION>\r
+                       <FUNCTION>JNAE</FUNCTION>\r
+                       <FUNCTION>JNB</FUNCTION>\r
+                       <FUNCTION>JNBE</FUNCTION>\r
+                       <FUNCTION>JNC</FUNCTION>\r
+                       <FUNCTION>JNE</FUNCTION>\r
+                       <FUNCTION>JNG</FUNCTION>\r
+                       <FUNCTION>JNGE</FUNCTION>\r
+                       <FUNCTION>JNL</FUNCTION>\r
+                       <FUNCTION>JNLE</FUNCTION>\r
+                       <FUNCTION>JNO</FUNCTION>\r
+                       <FUNCTION>JNP</FUNCTION>\r
+                       <FUNCTION>JNS</FUNCTION>\r
+                       <FUNCTION>JNZ</FUNCTION>\r
+                       <FUNCTION>JO</FUNCTION>\r
+                       <FUNCTION>JP</FUNCTION>\r
+                       <FUNCTION>JPE</FUNCTION>\r
+                       <FUNCTION>JPO</FUNCTION>\r
+                       <FUNCTION>JS</FUNCTION>\r
+                       <FUNCTION>JZ</FUNCTION>\r
+                       <FUNCTION>LAHF</FUNCTION>\r
+                       <FUNCTION>LAR</FUNCTION>\r
+                       <FUNCTION>LDMXCSR</FUNCTION>\r
+                       <FUNCTION>LDS</FUNCTION>\r
+                       <FUNCTION>LEA</FUNCTION>\r
+                       <FUNCTION>LEAVE</FUNCTION>\r
+                       <FUNCTION>LES</FUNCTION>\r
+                       <FUNCTION>LFS</FUNCTION>\r
+                       <FUNCTION>LGDT</FUNCTION>\r
+                       <FUNCTION>LGS</FUNCTION>\r
+                       <FUNCTION>LIDT</FUNCTION>\r
+                       <FUNCTION>LLDT</FUNCTION>\r
+                       <FUNCTION>LMSW</FUNCTION>\r
+                       <FUNCTION>LOCK</FUNCTION>\r
+                       <FUNCTION>LODS</FUNCTION>\r
+                       <FUNCTION>LODSB</FUNCTION>\r
+                       <FUNCTION>LODSD</FUNCTION>\r
+                       <FUNCTION>LODSW</FUNCTION>\r
+                       <FUNCTION>LOOP</FUNCTION>\r
+                       <FUNCTION>LOOPE</FUNCTION>\r
+                       <FUNCTION>LOOPNE</FUNCTION>\r
+                       <FUNCTION>LOOPNZ</FUNCTION>\r
+                       <FUNCTION>LOOPZ</FUNCTION>\r
+                       <FUNCTION>LSL</FUNCTION>\r
+                       <FUNCTION>LSS</FUNCTION>\r
+                       <FUNCTION>LTR</FUNCTION>\r
+                       <FUNCTION>MASKMOVQ</FUNCTION>\r
+                       <FUNCTION>MAXPS</FUNCTION>\r
+                       <FUNCTION>MAXSS</FUNCTION>\r
+                       <FUNCTION>MINPS</FUNCTION>\r
+                       <FUNCTION>MINSS</FUNCTION>\r
+                       <FUNCTION>MOV</FUNCTION>\r
+                       <FUNCTION>MOVAPS</FUNCTION>\r
+                       <FUNCTION>MOVD</FUNCTION>\r
+                       <FUNCTION>MOVHLPS</FUNCTION>\r
+                       <FUNCTION>MOVHPS</FUNCTION>\r
+                       <FUNCTION>MOVLHPS</FUNCTION>\r
+                       <FUNCTION>MOVLPS</FUNCTION>\r
+                       <FUNCTION>MOVMSKPS</FUNCTION>\r
+                       <FUNCTION>MOVNTPS</FUNCTION>\r
+                       <FUNCTION>MOVNTQ</FUNCTION>\r
+                       <FUNCTION>MOVQ</FUNCTION>\r
+                       <FUNCTION>MOVS</FUNCTION>\r
+                       <FUNCTION>MOVSB</FUNCTION>\r
+                       <FUNCTION>MOVSD</FUNCTION>\r
+                       <FUNCTION>MOVSS</FUNCTION>\r
+                       <FUNCTION>MOVSW</FUNCTION>\r
+                       <FUNCTION>MOVSX</FUNCTION>\r
+                       <FUNCTION>MOVUPS</FUNCTION>\r
+                       <FUNCTION>MOVZX</FUNCTION>\r
+                       <FUNCTION>MUL</FUNCTION>\r
+                       <FUNCTION>MULPS</FUNCTION>\r
+                       <FUNCTION>MULSS</FUNCTION>\r
+                       <FUNCTION>NEG</FUNCTION>\r
+                       <FUNCTION>NOP</FUNCTION>\r
+                       <FUNCTION>NOT</FUNCTION>\r
+                       <FUNCTION>OR</FUNCTION>\r
+                       <FUNCTION>ORPS</FUNCTION>\r
+                       <FUNCTION>OUT</FUNCTION>\r
+                       <FUNCTION>OUTS</FUNCTION>\r
+                       <FUNCTION>OUTSB</FUNCTION>\r
+                       <FUNCTION>OUTSD</FUNCTION>\r
+                       <FUNCTION>OUTSW</FUNCTION>\r
+                       <FUNCTION>PACKSSDW</FUNCTION>\r
+                       <FUNCTION>PACKSSWB</FUNCTION>\r
+                       <FUNCTION>PACKUSWB</FUNCTION>\r
+                       <FUNCTION>PADDB</FUNCTION>\r
+                       <FUNCTION>PADDD</FUNCTION>\r
+                       <FUNCTION>PADDSB</FUNCTION>\r
+                       <FUNCTION>PADDSW</FUNCTION>\r
+                       <FUNCTION>PADDUSB</FUNCTION>\r
+                       <FUNCTION>PADDUSW</FUNCTION>\r
+                       <FUNCTION>PADDW</FUNCTION>\r
+                       <FUNCTION>PAND</FUNCTION>\r
+                       <FUNCTION>PANDN</FUNCTION>\r
+                       <FUNCTION>PAVGB</FUNCTION>\r
+                       <FUNCTION>PAVGW</FUNCTION>\r
+                       <FUNCTION>PCMPEQB</FUNCTION>\r
+                       <FUNCTION>PCMPEQD</FUNCTION>\r
+                       <FUNCTION>PCMPEQW</FUNCTION>\r
+                       <FUNCTION>PCMPGTB</FUNCTION>\r
+                       <FUNCTION>PCMPGTD</FUNCTION>\r
+                       <FUNCTION>PCMPGTW</FUNCTION>\r
+                       <FUNCTION>PEXTRW</FUNCTION>\r
+                       <FUNCTION>PINSRW</FUNCTION>\r
+                       <FUNCTION>PMADDWD</FUNCTION>\r
+                       <FUNCTION>PMAXSW</FUNCTION>\r
+                       <FUNCTION>PMAXUB</FUNCTION>\r
+                       <FUNCTION>PMINSW</FUNCTION>\r
+                       <FUNCTION>PMINUB</FUNCTION>\r
+                       <FUNCTION>PMOVMSKB</FUNCTION>\r
+                       <FUNCTION>PMULHUW</FUNCTION>\r
+                       <FUNCTION>PMULHW</FUNCTION>\r
+                       <FUNCTION>PMULLW</FUNCTION>\r
+                       <FUNCTION>POP</FUNCTION>\r
+                       <FUNCTION>POPA</FUNCTION>\r
+                       <FUNCTION>POPAD</FUNCTION>\r
+                       <FUNCTION>POPAW</FUNCTION>\r
+                       <FUNCTION>POPF</FUNCTION>\r
+                       <FUNCTION>POPFD</FUNCTION>\r
+                       <FUNCTION>POPFW</FUNCTION>\r
+                       <FUNCTION>POR</FUNCTION>\r
+                       <FUNCTION>PREFETCH</FUNCTION>\r
+                       <FUNCTION>PSADBW</FUNCTION>\r
+                       <FUNCTION>PSHUFW</FUNCTION>\r
+                       <FUNCTION>PSLLD</FUNCTION>\r
+                       <FUNCTION>PSLLQ</FUNCTION>\r
+                       <FUNCTION>PSLLW</FUNCTION>\r
+                       <FUNCTION>PSRAD</FUNCTION>\r
+                       <FUNCTION>PSRAW</FUNCTION>\r
+                       <FUNCTION>PSRLD</FUNCTION>\r
+                       <FUNCTION>PSRLQ</FUNCTION>\r
+                       <FUNCTION>PSRLW</FUNCTION>\r
+                       <FUNCTION>PSUBB</FUNCTION>\r
+                       <FUNCTION>PSUBD</FUNCTION>\r
+                       <FUNCTION>PSUBSB</FUNCTION>\r
+                       <FUNCTION>PSUBSW</FUNCTION>\r
+                       <FUNCTION>PSUBUSB</FUNCTION>\r
+                       <FUNCTION>PSUBUSW</FUNCTION>\r
+                       <FUNCTION>PSUBW</FUNCTION>\r
+                       <FUNCTION>PUNPCKHBW</FUNCTION>\r
+                       <FUNCTION>PUNPCKHDQ</FUNCTION>\r
+                       <FUNCTION>PUNPCKHWD</FUNCTION>\r
+                       <FUNCTION>PUNPCKLBW</FUNCTION>\r
+                       <FUNCTION>PUNPCKLDQ</FUNCTION>\r
+                       <FUNCTION>PUNPCKLWD</FUNCTION>\r
+                       <FUNCTION>PUSH</FUNCTION>\r
+                       <FUNCTION>PUSHA</FUNCTION>\r
+                       <FUNCTION>PUSHAD</FUNCTION>\r
+                       <FUNCTION>PUSHAW</FUNCTION>\r
+                       <FUNCTION>PUSHF</FUNCTION>\r
+                       <FUNCTION>PUSHFD</FUNCTION>\r
+                       <FUNCTION>PUSHFW</FUNCTION>\r
+                       <FUNCTION>PXOR</FUNCTION>\r
+                       <FUNCTION>RCL</FUNCTION>\r
+                       <FUNCTION>RCR</FUNCTION>\r
+                       <FUNCTION>RDMSR</FUNCTION>\r
+                       <FUNCTION>RDPMC</FUNCTION>\r
+                       <FUNCTION>RDTSC</FUNCTION>\r
+                       <FUNCTION>REP</FUNCTION>\r
+                       <FUNCTION>REPE</FUNCTION>\r
+                       <FUNCTION>REPNE</FUNCTION>\r
+                       <FUNCTION>REPNZ</FUNCTION>\r
+                       <FUNCTION>REPZ</FUNCTION>\r
+                       <FUNCTION>RET</FUNCTION>\r
+                       <FUNCTION>RETF</FUNCTION>\r
+                       <FUNCTION>RETN</FUNCTION>\r
+                       <FUNCTION>ROL</FUNCTION>\r
+                       <FUNCTION>ROR</FUNCTION>\r
+                       <FUNCTION>RSM</FUNCTION>\r
+                       <FUNCTION>SAHF</FUNCTION>\r
+                       <FUNCTION>SAL</FUNCTION>\r
+                       <FUNCTION>SAR</FUNCTION>\r
+                       <FUNCTION>SBB</FUNCTION>\r
+                       <FUNCTION>SCAS</FUNCTION>\r
+                       <FUNCTION>SCASB</FUNCTION>\r
+                       <FUNCTION>SCASD</FUNCTION>\r
+                       <FUNCTION>SCASW</FUNCTION>\r
+                       <FUNCTION>SETA</FUNCTION>\r
+                       <FUNCTION>SETAE</FUNCTION>\r
+                       <FUNCTION>SETB</FUNCTION>\r
+                       <FUNCTION>SETBE</FUNCTION>\r
+                       <FUNCTION>SETC</FUNCTION>\r
+                       <FUNCTION>SETE</FUNCTION>\r
+                       <FUNCTION>SETG</FUNCTION>\r
+                       <FUNCTION>SETGE</FUNCTION>\r
+                       <FUNCTION>SETL</FUNCTION>\r
+                       <FUNCTION>SETLE</FUNCTION>\r
+                       <FUNCTION>SETNA</FUNCTION>\r
+                       <FUNCTION>SETNAE</FUNCTION>\r
+                       <FUNCTION>SETNB</FUNCTION>\r
+                       <FUNCTION>SETNBE</FUNCTION>\r
+                       <FUNCTION>SETNC</FUNCTION>\r
+                       <FUNCTION>SETNE</FUNCTION>\r
+                       <FUNCTION>SETNG</FUNCTION>\r
+                       <FUNCTION>SETNGE</FUNCTION>\r
+                       <FUNCTION>SETNL</FUNCTION>\r
+                       <FUNCTION>SETNLE</FUNCTION>\r
+                       <FUNCTION>SETNO</FUNCTION>\r
+                       <FUNCTION>SETNP</FUNCTION>\r
+                       <FUNCTION>SETNS</FUNCTION>\r
+                       <FUNCTION>SETNZ</FUNCTION>\r
+                       <FUNCTION>SETO</FUNCTION>\r
+                       <FUNCTION>SETP</FUNCTION>\r
+                       <FUNCTION>SETPE</FUNCTION>\r
+                       <FUNCTION>SETPO</FUNCTION>\r
+                       <FUNCTION>SETS</FUNCTION>\r
+                       <FUNCTION>SETZ</FUNCTION>\r
+                       <FUNCTION>SFENCE</FUNCTION>\r
+                       <FUNCTION>SGDT</FUNCTION>\r
+                       <FUNCTION>SHL</FUNCTION>\r
+                       <FUNCTION>SHLD</FUNCTION>\r
+                       <FUNCTION>SHR</FUNCTION>\r
+                       <FUNCTION>SHRD</FUNCTION>\r
+                       <FUNCTION>SHUFPS</FUNCTION>\r
+                       <FUNCTION>SIDT</FUNCTION>\r
+                       <FUNCTION>SLDT</FUNCTION>\r
+                       <FUNCTION>SMSW</FUNCTION>\r
+                       <FUNCTION>SQRTPS</FUNCTION>\r
+                       <FUNCTION>SQRTSS</FUNCTION>\r
+                       <FUNCTION>STC</FUNCTION>\r
+                       <FUNCTION>STD</FUNCTION>\r
+                       <FUNCTION>STI</FUNCTION>\r
+                       <FUNCTION>STMXCSR</FUNCTION>\r
+                       <FUNCTION>STOS</FUNCTION>\r
+                       <FUNCTION>STOSB</FUNCTION>\r
+                       <FUNCTION>STOSD</FUNCTION>\r
+                       <FUNCTION>STOSW</FUNCTION>\r
+                       <FUNCTION>STR</FUNCTION>\r
+                       <FUNCTION>SUB</FUNCTION>\r
+                       <FUNCTION>SUBPS</FUNCTION>\r
+                       <FUNCTION>SUBSS</FUNCTION>\r
+                       <FUNCTION>SYSENTER</FUNCTION>\r
+                       <FUNCTION>SYSEXIT</FUNCTION>\r
+                       <FUNCTION>TEST</FUNCTION>\r
+                       <FUNCTION>UB2</FUNCTION>\r
+                       <FUNCTION>UCOMISS</FUNCTION>\r
+                       <FUNCTION>UNPCKHPS</FUNCTION>\r
+                       <FUNCTION>UNPCKLPS</FUNCTION>\r
+                       <FUNCTION>WAIT</FUNCTION>\r
+                       <FUNCTION>WBINVD</FUNCTION>\r
+                       <FUNCTION>VERR</FUNCTION>\r
+                       <FUNCTION>VERW</FUNCTION>\r
+                       <FUNCTION>WRMSR</FUNCTION>\r
+                       <FUNCTION>XADD</FUNCTION>\r
+                       <FUNCTION>XCHG</FUNCTION>\r
+                       <FUNCTION>XLAT</FUNCTION>\r
+                       <FUNCTION>XLATB</FUNCTION>\r
+                       <FUNCTION>XOR</FUNCTION>\r
+                       <FUNCTION>XORPS</FUNCTION>\r
+\r
+                       <!-- Instructions: 3DNow! -->\r
+                       <FUNCTION>FEMMS</FUNCTION>\r
+                       <FUNCTION>PAVGUSB</FUNCTION>\r
+                       <FUNCTION>PF2ID</FUNCTION>\r
+                       <FUNCTION>PFACC</FUNCTION>\r
+                       <FUNCTION>PFADD</FUNCTION>\r
+                       <FUNCTION>PFCMPEQ</FUNCTION>\r
+                       <FUNCTION>PFCMPGE</FUNCTION>\r
+                       <FUNCTION>PFCMPGT</FUNCTION>\r
+                       <FUNCTION>PFMAX</FUNCTION>\r
+                       <FUNCTION>PFMIN</FUNCTION>\r
+                       <FUNCTION>PFMUL</FUNCTION>\r
+                       <FUNCTION>PFRCP</FUNCTION>\r
+                       <FUNCTION>PFRCPIT1</FUNCTION>\r
+                       <FUNCTION>PFRCPIT2</FUNCTION>\r
+                       <FUNCTION>PFRSQIT1</FUNCTION>\r
+                       <FUNCTION>PFRSQRT</FUNCTION>\r
+                       <FUNCTION>PFSUB</FUNCTION>\r
+                       <FUNCTION>PFSUBR</FUNCTION>\r
+                       <FUNCTION>PI2FD</FUNCTION>\r
+                       <FUNCTION>PMULHRW</FUNCTION>\r
+                       <FUNCTION>PREFETCHW</FUNCTION>\r
+\r
+                       <!-- Instructions: 3DNow! (Athlon extensions) -->\r
+                       <FUNCTION>PF2IW</FUNCTION>\r
+                       <FUNCTION>PFNACC</FUNCTION>\r
+                       <FUNCTION>PFPNACC</FUNCTION>\r
+                       <FUNCTION>PI2FW</FUNCTION>\r
+                       <FUNCTION>PSWAPD</FUNCTION>\r
+\r
+                       <!-- Instructions: MMX (Athlon extensions) -->\r
+                       <FUNCTION>PREFETCHNTA</FUNCTION>\r
+                       <FUNCTION>PREFETCHT0</FUNCTION>\r
+                       <FUNCTION>PREFETCHT1</FUNCTION>\r
+                       <FUNCTION>PREFETCHT2</FUNCTION>\r
+\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/awk.xml b/extra/xmode/modes/awk.xml
new file mode 100644 (file)
index 0000000..2be33ea
--- /dev/null
@@ -0,0 +1,115 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- AWK mode, by Matthias M. Schneider -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <MARK_PREVIOUS AT_WHITESPACE_END="TRUE"\r
+                       MATCH_TYPE="OPERATOR"\r
+                       TYPE="LABEL">:</MARK_PREVIOUS>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>break</KEYWORD1>\r
+                       <KEYWORD1>close</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+                       <KEYWORD1>delete</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>exit</KEYWORD1>\r
+                       <KEYWORD1>fflush</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>huge</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <KEYWORD1>function</KEYWORD1>\r
+                       <KEYWORD1>next</KEYWORD1>\r
+                       <KEYWORD1>nextfile</KEYWORD1>\r
+                       <KEYWORD1>print</KEYWORD1>\r
+                       <KEYWORD1>printf</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+\r
+                       <KEYWORD2>atan2</KEYWORD2>\r
+                       <KEYWORD2>cos</KEYWORD2>\r
+                       <KEYWORD2>exp</KEYWORD2>\r
+                       <KEYWORD2>gensub</KEYWORD2>\r
+                       <KEYWORD2>getline</KEYWORD2>\r
+                       <KEYWORD2>gsub</KEYWORD2>\r
+                       <KEYWORD2>index</KEYWORD2>\r
+                       <KEYWORD2>int</KEYWORD2>\r
+                       <KEYWORD2>length</KEYWORD2>\r
+                       <KEYWORD2>log</KEYWORD2>\r
+                       <KEYWORD2>match</KEYWORD2>\r
+                       <KEYWORD2>rand</KEYWORD2>\r
+                       <KEYWORD2>sin</KEYWORD2>\r
+                       <KEYWORD2>split</KEYWORD2>\r
+                       <KEYWORD2>sprintf</KEYWORD2>\r
+                       <KEYWORD2>sqrt</KEYWORD2>\r
+                       <KEYWORD2>srand</KEYWORD2>\r
+                       <KEYWORD2>sub</KEYWORD2>\r
+                       <KEYWORD2>substr</KEYWORD2>\r
+                       <KEYWORD2>system</KEYWORD2>\r
+                       <KEYWORD2>tolower</KEYWORD2>\r
+                       <KEYWORD2>toupper</KEYWORD2>\r
+\r
+                       <KEYWORD3>BEGIN</KEYWORD3>\r
+                       <KEYWORD3>END</KEYWORD3>\r
+                       <KEYWORD3>$0</KEYWORD3>\r
+                       <KEYWORD3>ARGC</KEYWORD3>\r
+                       <KEYWORD3>ARGIND</KEYWORD3>\r
+                       <KEYWORD3>ARGV</KEYWORD3>\r
+                       <KEYWORD3>CONVFMT</KEYWORD3>\r
+                       <KEYWORD3>ENVIRON</KEYWORD3>\r
+                       <KEYWORD3>ERRNO</KEYWORD3>\r
+                       <KEYWORD3>FIELDSWIDTH</KEYWORD3>\r
+                       <KEYWORD3>FILENAME</KEYWORD3>\r
+                       <KEYWORD3>FNR</KEYWORD3>\r
+                       <KEYWORD3>FS</KEYWORD3>\r
+                       <KEYWORD3>IGNORECASE</KEYWORD3>\r
+                       <KEYWORD3>NF</KEYWORD3>\r
+                       <KEYWORD3>NR</KEYWORD3>\r
+                       <KEYWORD3>OFMT</KEYWORD3>\r
+                       <KEYWORD3>OFS</KEYWORD3>\r
+                       <KEYWORD3>ORS</KEYWORD3>\r
+                       <KEYWORD3>RLENGTH</KEYWORD3>\r
+                       <KEYWORD3>RS</KEYWORD3>\r
+                       <KEYWORD3>RSTART</KEYWORD3>\r
+                       <KEYWORD3>RT</KEYWORD3>\r
+                       <KEYWORD3>SUBSEP</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/b.xml b/extra/xmode/modes/b.xml
new file mode 100644 (file)
index 0000000..6609b19
--- /dev/null
@@ -0,0 +1,203 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="indentNextLine" VALUE="\s*(((ANY|ASSERT|CASE|CHOICE|IF|LET|PRE|SELECT|VAR|WHILE|WHEN)\s*\(|ELSE|ELSEIF|EITHER|OR|VARIANT|INVARIANT)[^;]*|for\s*\(.*)" />\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- B style comment -->\r
+               <SPAN TYPE="COMMENT3">\r
+                       <BEGIN>/*?</BEGIN>\r
+                       <END>?*/</END>\r
+               </SPAN>\r
+               \r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+                               \r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               \r
+               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">#</SEQ>\r
+               <SEQ TYPE="OPERATOR">$0</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <!-- pour le & -->\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <!-- pour le < et  > -->\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">\</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+               <SEQ TYPE="OPERATOR">;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               \r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               \r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">(</SEQ>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+\r
+               <KEYWORDS>\r
+               \r
+                       <!-- clauses -->\r
+                       <KEYWORD2>ABSTRACT_CONSTANTS</KEYWORD2>\r
+                       <KEYWORD2>ABSTRACT_VARIABLES</KEYWORD2>\r
+                       <KEYWORD2>CONCRETE_CONSTANTS</KEYWORD2>\r
+                       <KEYWORD2>CONCRETE_VARIABLES</KEYWORD2>\r
+                       <KEYWORD2>CONSTANTS</KEYWORD2>\r
+                       <KEYWORD2>VARIABLES</KEYWORD2>\r
+                       <KEYWORD2>ASSERTIONS</KEYWORD2>\r
+                       <KEYWORD2>CONSTRAINTS</KEYWORD2>\r
+                       <KEYWORD2>DEFINITIONS</KEYWORD2>\r
+                       <KEYWORD2>EXTENDS</KEYWORD2>\r
+                       <KEYWORD2>IMPLEMENTATION</KEYWORD2>\r
+                       <KEYWORD2>IMPORTS</KEYWORD2>\r
+                       <KEYWORD2>INCLUDES</KEYWORD2>\r
+                       <KEYWORD2>INITIALISATION</KEYWORD2>\r
+                       <KEYWORD2>INVARIANT</KEYWORD2>\r
+                       <KEYWORD2>LOCAL_OPERATIONS</KEYWORD2>\r
+                       <KEYWORD2>MACHINE</KEYWORD2>\r
+                       <KEYWORD2>OPERATIONS</KEYWORD2>\r
+                       <KEYWORD2>PROMOTES</KEYWORD2>\r
+                       <KEYWORD2>PROPERTIES</KEYWORD2>\r
+                       <KEYWORD2>REFINES</KEYWORD2>\r
+                       <KEYWORD2>REFINEMENT</KEYWORD2>\r
+                       <KEYWORD2>SEES</KEYWORD2>\r
+                       <KEYWORD2>SETS</KEYWORD2>\r
+                       <KEYWORD2>USES</KEYWORD2>\r
+                       <KEYWORD2>VALUES</KEYWORD2>\r
+\r
+       \r
+                       <!-- substitutions -->\r
+                       <KEYWORD2>ANY</KEYWORD2>\r
+                       <KEYWORD2>ASSERT</KEYWORD2>\r
+                       <KEYWORD2>BE</KEYWORD2>\r
+                       <KEYWORD2>BEGIN</KEYWORD2>\r
+                       <KEYWORD2>CASE</KEYWORD2>\r
+                       <KEYWORD2>CHOICE</KEYWORD2>\r
+                       <KEYWORD2>DO</KEYWORD2>\r
+                       <KEYWORD2>EITHER</KEYWORD2>\r
+                       <KEYWORD2>ELSE</KEYWORD2>\r
+                       <KEYWORD2>ELSIF</KEYWORD2>\r
+                       <!-- voir pour le end -->\r
+                       <KEYWORD2>END</KEYWORD2>\r
+                       <KEYWORD2>IF</KEYWORD2>\r
+                       <KEYWORD2>IN</KEYWORD2>\r
+                       <KEYWORD2>LET</KEYWORD2>\r
+                       <KEYWORD2>OF</KEYWORD2>\r
+                       <KEYWORD2>OR</KEYWORD2>\r
+                       <KEYWORD2>PRE</KEYWORD2>\r
+                       <KEYWORD2>SELECT</KEYWORD2>\r
+                       <KEYWORD2>THEN</KEYWORD2>\r
+                       <KEYWORD2>VAR</KEYWORD2>\r
+                       <KEYWORD2>VARIANT</KEYWORD2>\r
+                       <KEYWORD2>WHEN</KEYWORD2>\r
+                       <KEYWORD2>WHERE</KEYWORD2>\r
+                       <KEYWORD2>WHILE</KEYWORD2>\r
+                       \r
+                       \r
+                       <KEYWORD3>FIN</KEYWORD3>\r
+                       <KEYWORD3>FIN1</KEYWORD3>\r
+                       <KEYWORD3>INT</KEYWORD3>\r
+                       <KEYWORD3>INTEGER</KEYWORD3>\r
+                       <KEYWORD3>INTER</KEYWORD3>\r
+                       <KEYWORD3>MAXINT</KEYWORD3>\r
+                       <KEYWORD3>MININT</KEYWORD3>\r
+                       <KEYWORD3>NAT</KEYWORD3>\r
+                       <KEYWORD3>NAT1</KEYWORD3>\r
+                       <KEYWORD3>NATURAL</KEYWORD3>\r
+                       <KEYWORD3>NATURAL1</KEYWORD3>\r
+                       <KEYWORD3>PI</KEYWORD3>\r
+                       <KEYWORD3>POW</KEYWORD3>\r
+                       <KEYWORD3>POW1</KEYWORD3>\r
+                       <KEYWORD3>SIGMA</KEYWORD3>\r
+                       <KEYWORD3>UNION</KEYWORD3>\r
+\r
+                       <FUNCTION>arity</FUNCTION>\r
+                       <FUNCTION>bin</FUNCTION>\r
+                       <FUNCTION>bool</FUNCTION>\r
+                       <FUNCTION>btree</FUNCTION>\r
+                       <FUNCTION>card</FUNCTION>\r
+                       <FUNCTION>closure</FUNCTION>\r
+                       <FUNCTION>closure1</FUNCTION>\r
+                       <FUNCTION>conc</FUNCTION>\r
+                       <FUNCTION>const</FUNCTION>\r
+                       <FUNCTION>dom</FUNCTION>\r
+                       <FUNCTION>father</FUNCTION>\r
+                       <FUNCTION>first</FUNCTION>\r
+                       <FUNCTION>fnc</FUNCTION>\r
+                       <FUNCTION>front</FUNCTION>\r
+                       <FUNCTION>id</FUNCTION>\r
+                       <FUNCTION>infix</FUNCTION>\r
+                       <FUNCTION>inter</FUNCTION>\r
+                       <FUNCTION>iseq</FUNCTION>\r
+                       <FUNCTION>iseq1</FUNCTION>\r
+                       <FUNCTION>iterate</FUNCTION>\r
+                       <FUNCTION>last</FUNCTION>\r
+                       <FUNCTION>left</FUNCTION>\r
+                       <FUNCTION>max</FUNCTION>\r
+                       <FUNCTION>min</FUNCTION>\r
+                       <FUNCTION>mirror</FUNCTION>\r
+                       <FUNCTION>mod</FUNCTION>\r
+                       <FUNCTION>not</FUNCTION>\r
+                       <FUNCTION>or</FUNCTION>\r
+                       <FUNCTION>perm</FUNCTION>\r
+                       <FUNCTION>postfix</FUNCTION>\r
+                       <FUNCTION>pred</FUNCTION>\r
+                       <FUNCTION>prefix</FUNCTION>\r
+                       <FUNCTION>prj1</FUNCTION>\r
+                       <FUNCTION>prj2</FUNCTION>\r
+                       <FUNCTION>r~</FUNCTION>\r
+                       <FUNCTION>ran</FUNCTION>\r
+                       <FUNCTION>rank</FUNCTION>\r
+                       <FUNCTION>rec</FUNCTION>\r
+                       <FUNCTION>rel</FUNCTION>\r
+                       <FUNCTION>rev</FUNCTION>\r
+                       <FUNCTION>right</FUNCTION>\r
+                       <FUNCTION>seq</FUNCTION>\r
+                       <FUNCTION>seq1</FUNCTION>\r
+                       <FUNCTION>size</FUNCTION>\r
+                       <FUNCTION>sizet</FUNCTION>\r
+                       <FUNCTION>skip</FUNCTION>\r
+                       <FUNCTION>son</FUNCTION>\r
+                       <FUNCTION>sons</FUNCTION>\r
+                       <FUNCTION>struct</FUNCTION>\r
+                       <FUNCTION>subtree</FUNCTION>\r
+                       <FUNCTION>succ</FUNCTION>\r
+                       <FUNCTION>tail</FUNCTION>\r
+                       <FUNCTION>top</FUNCTION>\r
+                       <FUNCTION>tree</FUNCTION>\r
+                       <FUNCTION>union</FUNCTION>\r
+\r
+               </KEYWORDS>\r
+\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/batch.xml b/extra/xmode/modes/batch.xml
new file mode 100644 (file)
index 0000000..ebfe13a
--- /dev/null
@@ -0,0 +1,172 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+       09-10-2003 - Mirco Bova\r
+       Added some new batch commands using win2K help as reference.\r
+\r
+       04-12-2001 - Mirco Bova\r
+       this file is based on the original JEdit batch.xml mode.\r
+       The main upgrade consisting in adding the standard MS-DOS\r
+       commands as keywords and functions:\r
+       - keywords =            internal shell commands;\r
+       -       functions =             standard MS-DOS commands (.exe or .com in DOS or\r
+                                                                       windows\command directory).\r
+\r
+       Minor enhancements by Alex Jacoby on 28-feb-2003\r
+-->\r
+\r
+<!-- The keywords and functions here defined are those of MS-DOS 6.22,\r
+                plus a few as of Windows XP.\r
+ -->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="rem" />\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="(" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE=")" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="FALSE">\r
+               <!-- 'echo off' statements -->\r
+               <SEQ TYPE="KEYWORD3">@</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+\r
+               <!-- labels - eg ":test" or "goto :test" -->\r
+               <MARK_FOLLOWING AT_WORD_START="TRUE" TYPE="LABEL">:</MARK_FOLLOWING>\r
+\r
+               <!-- comments -->\r
+               <EOL_SPAN_REGEXP AT_WHITESPACE_END="TRUE" HASH_CHAR="REM" TYPE="COMMENT1">REM\s</EOL_SPAN_REGEXP>\r
+\r
+               <!-- literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- variables -->\r
+               <SEQ TYPE="KEYWORD2">%0</SEQ>\r
+               <SEQ TYPE="KEYWORD2">%1</SEQ>\r
+               <SEQ TYPE="KEYWORD2">%2</SEQ>\r
+               <SEQ TYPE="KEYWORD2">%3</SEQ>\r
+               <SEQ TYPE="KEYWORD2">%4</SEQ>\r
+               <SEQ TYPE="KEYWORD2">%5</SEQ>\r
+               <SEQ TYPE="KEYWORD2">%6</SEQ>\r
+               <SEQ TYPE="KEYWORD2">%7</SEQ>\r
+               <SEQ TYPE="KEYWORD2">%8</SEQ>\r
+               <SEQ TYPE="KEYWORD2">%9</SEQ>\r
+               <!-- for-loop variable (one char after %%) -->\r
+               <SEQ_REGEXP TYPE="KEYWORD2"\r
+                                       HASH_CHAR="%%"\r
+                                       AT_WORD_START="TRUE"\r
+                                       >%%[\p{Alpha}]</SEQ_REGEXP>\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>%</BEGIN>\r
+                       <END>%</END>\r
+               </SPAN>\r
+\r
+               <KEYWORDS>\r
+                       <!-- KEYWORD1 are internal MS-DOS shell commands -->\r
+                       <KEYWORD1>cd</KEYWORD1>\r
+                       <KEYWORD1>chdir</KEYWORD1>\r
+                       <KEYWORD1>md</KEYWORD1>\r
+                       <KEYWORD1>mkdir</KEYWORD1>\r
+\r
+                       <KEYWORD1>cls</KEYWORD1>\r
+\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+\r
+                       <KEYWORD1>echo</KEYWORD1>\r
+                       <KEYWORD1>echo.</KEYWORD1>\r
+\r
+                       <KEYWORD1>move</KEYWORD1>\r
+                       <KEYWORD1>copy</KEYWORD1>\r
+                       <KEYWORD1>move</KEYWORD1>\r
+                       <KEYWORD1>ren</KEYWORD1>\r
+                       <KEYWORD1>del</KEYWORD1>\r
+                       <KEYWORD1>set</KEYWORD1>\r
+\r
+                       <!-- new KEYWORDS from Win2K help -->\r
+                       <KEYWORD1>call</KEYWORD1>\r
+                       <KEYWORD1>exit</KEYWORD1>\r
+                       <KEYWORD1>setlocal</KEYWORD1>\r
+                       <KEYWORD1>shift</KEYWORD1>\r
+                       <KEYWORD1>endlocal</KEYWORD1>\r
+                       <KEYWORD1>pause</KEYWORD1>\r
+\r
+                       <!-- KEYWORD2 are commands options -->\r
+\r
+                       <KEYWORD2>defined</KEYWORD2>\r
+                       <KEYWORD2>exist</KEYWORD2>\r
+                       <KEYWORD2>errorlevel</KEYWORD2>\r
+\r
+                       <!-- new KEYWORD options from Win2K help -->\r
+                       <KEYWORD2>else</KEYWORD2>\r
+\r
+                       <KEYWORD2>in</KEYWORD2>\r
+                       <KEYWORD2>do</KEYWORD2>\r
+\r
+                       <KEYWORD2>NUL</KEYWORD2>\r
+                       <KEYWORD2>AUX</KEYWORD2>\r
+                       <KEYWORD2>PRN</KEYWORD2>\r
+\r
+                       <KEYWORD1>not</KEYWORD1>\r
+\r
+                       <!-- goto is a special case we want to distinguish it -->\r
+                       <KEYWORD3>goto</KEYWORD3>\r
+\r
+                       <!-- FUNCTION are standard MS-DOS commands -->\r
+                       <!-- (those you find as stand-alone .exe or .com) in win95 %windows_root%\command folder -->\r
+                       <FUNCTION>APPEND</FUNCTION>\r
+                       <FUNCTION>ATTRIB</FUNCTION>\r
+                       <FUNCTION>CHKDSK</FUNCTION>\r
+                       <FUNCTION>CHOICE</FUNCTION>\r
+                       <FUNCTION>DEBUG</FUNCTION>\r
+                       <FUNCTION>DEFRAG</FUNCTION>\r
+                       <FUNCTION>DELTREE</FUNCTION>\r
+                       <FUNCTION>DISKCOMP</FUNCTION>\r
+                       <FUNCTION>DISKCOPY</FUNCTION>\r
+                       <FUNCTION>DOSKEY</FUNCTION>\r
+                       <FUNCTION>DRVSPACE</FUNCTION>\r
+                       <FUNCTION>EMM386</FUNCTION>\r
+                       <FUNCTION>EXPAND</FUNCTION>\r
+                       <FUNCTION>FASTOPEN</FUNCTION>\r
+                       <FUNCTION>FC</FUNCTION>\r
+                       <FUNCTION>FDISK</FUNCTION>\r
+                       <FUNCTION>FIND</FUNCTION>\r
+                       <FUNCTION>FORMAT</FUNCTION>\r
+                       <FUNCTION>GRAPHICS</FUNCTION>\r
+                       <FUNCTION>KEYB</FUNCTION>\r
+                       <FUNCTION>LABEL</FUNCTION>\r
+                       <FUNCTION>LOADFIX</FUNCTION>\r
+                       <FUNCTION>MEM</FUNCTION>\r
+                       <FUNCTION>MODE</FUNCTION>\r
+                       <FUNCTION>MORE</FUNCTION>\r
+                       <FUNCTION>MOVE</FUNCTION>\r
+                       <FUNCTION>MSCDEX</FUNCTION>\r
+                       <FUNCTION>NLSFUNC</FUNCTION>\r
+                       <FUNCTION>POWER</FUNCTION>\r
+                       <FUNCTION>PRINT</FUNCTION>\r
+                       <FUNCTION>RD</FUNCTION>\r
+                       <FUNCTION>REPLACE</FUNCTION>\r
+                       <FUNCTION>RESTORE</FUNCTION>\r
+                       <FUNCTION>SETVER</FUNCTION>\r
+                       <FUNCTION>SHARE</FUNCTION>\r
+                       <FUNCTION>SORT</FUNCTION>\r
+                       <FUNCTION>SUBST</FUNCTION>\r
+                       <FUNCTION>SYS</FUNCTION>\r
+                       <FUNCTION>TREE</FUNCTION>\r
+                       <FUNCTION>UNDELETE</FUNCTION>\r
+                       <FUNCTION>UNFORMAT</FUNCTION>\r
+                       <FUNCTION>VSAFE</FUNCTION>\r
+                       <FUNCTION>XCOPY</FUNCTION>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/bbj.xml b/extra/xmode/modes/bbj.xml
new file mode 100644 (file)
index 0000000..91f684c
--- /dev/null
@@ -0,0 +1,308 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- enhancement if using some preprocessor -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT2">REM </EOL_SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR"> and </SEQ>\r
+               <SEQ TYPE="OPERATOR"> or </SEQ>\r
+\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR" AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>ABS</KEYWORD1>\r
+                       <KEYWORD1>ADJN</KEYWORD1>\r
+                       <KEYWORD1>ARGC</KEYWORD1>\r
+                       <KEYWORD1>ARGV</KEYWORD1>\r
+                       <KEYWORD1>ASC</KEYWORD1>\r
+                       <KEYWORD1>ATH</KEYWORD1>\r
+                       <KEYWORD1>ATN</KEYWORD1>\r
+                       <KEYWORD1>BACKGROUND</KEYWORD1>\r
+                       <KEYWORD1>BIN</KEYWORD1>\r
+                       <KEYWORD1>BSZ</KEYWORD1>\r
+                       <KEYWORD1>CALLBACK</KEYWORD1>\r
+                       <KEYWORD1>CHANOPT</KEYWORD1>\r
+                       <KEYWORD1>CHR</KEYWORD1>\r
+                       <KEYWORD1>CLIPCLEAR</KEYWORD1>\r
+                       <KEYWORD1>CLIPFROMFILE</KEYWORD1>\r
+                       <KEYWORD1>CLIPFROMSTR</KEYWORD1>\r
+                       <KEYWORD1>CLIPISFORMAT</KEYWORD1>\r
+                       <KEYWORD1>CLIPLOCK</KEYWORD1>\r
+                       <KEYWORD1>CLIPREGFORMAT</KEYWORD1>\r
+                       <KEYWORD1>CLIPTOFILE</KEYWORD1>\r
+                       <KEYWORD1>CLIPTOSTR</KEYWORD1>\r
+                       <KEYWORD1>CLIPUNLOCK</KEYWORD1>\r
+                       <KEYWORD1>COS</KEYWORD1>\r
+                       <KEYWORD1>CPL</KEYWORD1>\r
+                       <KEYWORD1>CRC</KEYWORD1>\r
+                       <KEYWORD1>CRC16</KEYWORD1>\r
+                       <KEYWORD1>CTRL</KEYWORD1>\r
+                       <KEYWORD1>CVS</KEYWORD1>\r
+                       <KEYWORD1>CVT</KEYWORD1>\r
+                       <KEYWORD1>DATE</KEYWORD1>\r
+                       <KEYWORD1>DEC</KEYWORD1>\r
+                       <KEYWORD1>DIMS</KEYWORD1>\r
+                       <KEYWORD1>DSK</KEYWORD1>\r
+                       <KEYWORD1>DSZ</KEYWORD1>\r
+                       <KEYWORD1>EPT</KEYWORD1>\r
+                       <KEYWORD1>ERRMES</KEYWORD1>\r
+                       <KEYWORD1>FATTR</KEYWORD1>\r
+                       <KEYWORD1>FBIN</KEYWORD1>\r
+                       <KEYWORD1>FDEC</KEYWORD1>\r
+                       <KEYWORD1>FIELD</KEYWORD1>\r
+                       <KEYWORD1>FILEOPT</KEYWORD1>\r
+                       <KEYWORD1>FILL</KEYWORD1>\r
+                       <KEYWORD1>FLOATINGPOINT</KEYWORD1>\r
+                       <KEYWORD1>FPT</KEYWORD1>\r
+                       <KEYWORD1>GAP</KEYWORD1>\r
+                       <KEYWORD1>HSA</KEYWORD1>\r
+                       <KEYWORD1>HSH</KEYWORD1>\r
+                       <KEYWORD1>HTA</KEYWORD1>\r
+                       <KEYWORD1>IMP</KEYWORD1>\r
+                       <KEYWORD1>INFO</KEYWORD1>\r
+                       <KEYWORD1>INT</KEYWORD1>\r
+                       <KEYWORD1>JUL</KEYWORD1>\r
+                       <KEYWORD1>LCHECKIN</KEYWORD1>\r
+                       <KEYWORD1>LCHECKOUT</KEYWORD1>\r
+                       <KEYWORD1>LEN</KEYWORD1>\r
+                       <KEYWORD1>LINFO</KEYWORD1>\r
+                       <KEYWORD1>LOG</KEYWORD1>\r
+                       <KEYWORD1>LRC</KEYWORD1>\r
+                       <KEYWORD1>LST</KEYWORD1>\r
+                       <KEYWORD1>MASK</KEYWORD1>\r
+                       <KEYWORD1>MAX</KEYWORD1>\r
+                       <KEYWORD1>MENUINFO</KEYWORD1>\r
+                       <KEYWORD1>MIN</KEYWORD1>\r
+                       <KEYWORD1>MOD</KEYWORD1>\r
+                       <KEYWORD1>MSGBOX</KEYWORD1>\r
+                       <KEYWORD1>NEVAL</KEYWORD1>\r
+                       <KEYWORD1>NFIELD</KEYWORD1>\r
+                       <KEYWORD1>NOTICE</KEYWORD1>\r
+                       <KEYWORD1>NOTICETPL</KEYWORD1>\r
+                       <KEYWORD1>NUM</KEYWORD1>\r
+                       <KEYWORD1>PAD</KEYWORD1>\r
+                       <KEYWORD1>PCK</KEYWORD1>\r
+                       <KEYWORD1>PGM</KEYWORD1>\r
+                       <KEYWORD1>POS</KEYWORD1>\r
+                       <KEYWORD1>PROCESS_EVENTS</KEYWORD1>\r
+                       <KEYWORD1>PROGRAM</KEYWORD1>\r
+                       <KEYWORD1>PSZ</KEYWORD1>\r
+                       <KEYWORD1>PUB</KEYWORD1>\r
+                       <KEYWORD1>REMOVE_CALLBACK</KEYWORD1>\r
+                       <KEYWORD1>RESERVE</KEYWORD1>\r
+                       <KEYWORD1>RND</KEYWORD1>\r
+                       <KEYWORD1>ROUND</KEYWORD1>\r
+                       <KEYWORD1>SCALL</KEYWORD1>\r
+                       <KEYWORD1>SENDMSG</KEYWORD1>\r
+                       <KEYWORD1>SEVAL</KEYWORD1>\r
+                       <KEYWORD1>SGN</KEYWORD1>\r
+                       <KEYWORD1>SIN</KEYWORD1>\r
+                       <KEYWORD1>SQR</KEYWORD1>\r
+                       <KEYWORD1>SSORT</KEYWORD1>\r
+                       <KEYWORD1>SSZ</KEYWORD1>\r
+                       <KEYWORD1>STBL</KEYWORD1>\r
+                       <KEYWORD1>STR</KEYWORD1>\r
+                       <KEYWORD1>SWAP</KEYWORD1>\r
+                       <KEYWORD1>SYS</KEYWORD1>\r
+                       <KEYWORD1>TCB</KEYWORD1>\r
+                       <KEYWORD1>TMPL</KEYWORD1>\r
+                       <KEYWORD1>TSK</KEYWORD1>\r
+                       <KEYWORD1>UPK</KEYWORD1>\r
+                       <KEYWORD1>WINFIRST</KEYWORD1>\r
+                       <KEYWORD1>WININFO</KEYWORD1>\r
+                       <KEYWORD1>WINNEXT</KEYWORD1>\r
+\r
+                       <KEYWORD2>CHDIR</KEYWORD2>\r
+                       <KEYWORD2>CISAM</KEYWORD2>\r
+                       <KEYWORD2>CLOSE</KEYWORD2>\r
+                       <KEYWORD2>CONTINUE</KEYWORD2>\r
+                       <KEYWORD2>DIRECT</KEYWORD2>\r
+                       <KEYWORD2>DIR</KEYWORD2>\r
+                       <KEYWORD2>DISABLE</KEYWORD2>\r
+                       <KEYWORD2>DOM</KEYWORD2>\r
+                       <KEYWORD2>DUMP</KEYWORD2>\r
+                       <KEYWORD2>ENABLE</KEYWORD2>\r
+                       <KEYWORD2>END</KEYWORD2>\r
+                       <KEYWORD2>ENDTRACE</KEYWORD2>\r
+                       <KEYWORD2>ERASE</KEYWORD2>\r
+                       <KEYWORD2>EXTRACT</KEYWORD2>\r
+                       <KEYWORD2>FID</KEYWORD2>\r
+                       <KEYWORD2>FILE</KEYWORD2>\r
+                       <KEYWORD2>FIN</KEYWORD2>\r
+                       <KEYWORD2>FIND</KEYWORD2>\r
+                       <KEYWORD2>FROM</KEYWORD2>\r
+                       <KEYWORD2>IND</KEYWORD2>\r
+                       <KEYWORD2>INDEXED</KEYWORD2>\r
+                       <KEYWORD2>INPUT</KEYWORD2>\r
+                       <KEYWORD2>INPUTE</KEYWORD2>\r
+                       <KEYWORD2>INPUTN</KEYWORD2>\r
+                       <KEYWORD2>IOL</KEYWORD2>\r
+                       <KEYWORD2>IOLIST</KEYWORD2>\r
+                       <KEYWORD2>KEY</KEYWORD2>\r
+                       <KEYWORD2>KEYF</KEYWORD2>\r
+                       <KEYWORD2>KEYL</KEYWORD2>\r
+                       <KEYWORD2>KEYN</KEYWORD2>\r
+                       <KEYWORD2>KEYP</KEYWORD2>\r
+                       <KEYWORD2>KGEN</KEYWORD2>\r
+                       <KEYWORD2>KNUM</KEYWORD2>\r
+                       <KEYWORD2>LIST</KEYWORD2>\r
+                       <KEYWORD2>LOAD</KEYWORD2>\r
+                       <KEYWORD2>LOCK</KEYWORD2>\r
+                       <KEYWORD2>MERGE</KEYWORD2>\r
+                       <KEYWORD2>MKDIR</KEYWORD2>\r
+                       <KEYWORD2>MKEYED</KEYWORD2>\r
+                       <KEYWORD2>OPEN</KEYWORD2>\r
+                       <KEYWORD2>PREFIX</KEYWORD2>\r
+                       <KEYWORD2>PRINT</KEYWORD2>\r
+                       <KEYWORD2>READ_RESOURCE</KEYWORD2>\r
+                       <KEYWORD2>READ</KEYWORD2>\r
+                       <KEYWORD2>RECORD</KEYWORD2>\r
+                       <KEYWORD2>REMOVE</KEYWORD2>\r
+                       <KEYWORD2>RENAME</KEYWORD2>\r
+                       <KEYWORD2>RESCLOSE</KEYWORD2>\r
+                       <KEYWORD2>RESFIRST</KEYWORD2>\r
+                       <KEYWORD2>RESGET</KEYWORD2>\r
+                       <KEYWORD2>RESINFO</KEYWORD2>\r
+                       <KEYWORD2>RESNEXT</KEYWORD2>\r
+                       <KEYWORD2>RESOPEN</KEYWORD2>\r
+                       <KEYWORD2>REV</KEYWORD2>\r
+                       <KEYWORD2>RMDIR</KEYWORD2>\r
+                       <KEYWORD2>SAVE</KEYWORD2>\r
+                       <KEYWORD2>SELECT</KEYWORD2>\r
+                       <KEYWORD2>SERIAL</KEYWORD2>\r
+                       <KEYWORD2>SETDAY</KEYWORD2>\r
+                       <KEYWORD2>SETDRIVE</KEYWORD2>\r
+                       <KEYWORD2>SETTRACE</KEYWORD2>\r
+                       <KEYWORD2>SIZ</KEYWORD2>\r
+                       <KEYWORD2>SORT</KEYWORD2>\r
+                       <KEYWORD2>SQLCHN</KEYWORD2>\r
+                       <KEYWORD2>SQLCLOSE</KEYWORD2>\r
+                       <KEYWORD2>SQLERR</KEYWORD2>\r
+                       <KEYWORD2>SQLEXEC</KEYWORD2>\r
+                       <KEYWORD2>SQLFETCH</KEYWORD2>\r
+                       <KEYWORD2>SQLLIST</KEYWORD2>\r
+                       <KEYWORD2>SQLOPEN</KEYWORD2>\r
+                       <KEYWORD2>SQLPREP</KEYWORD2>\r
+                       <KEYWORD2>SQLSET</KEYWORD2>\r
+                       <KEYWORD2>SQLTABLES</KEYWORD2>\r
+                       <KEYWORD2>SQLTMPL</KEYWORD2>\r
+                       <KEYWORD2>SQLUNT</KEYWORD2>\r
+                       <KEYWORD2>STRING</KEYWORD2>\r
+                       <KEYWORD2>TABLE</KEYWORD2>\r
+                       <KEYWORD2>TBL</KEYWORD2>\r
+                       <KEYWORD2>TIM</KEYWORD2>\r
+                       <KEYWORD2>UNLOCK</KEYWORD2>\r
+                       <KEYWORD2>WHERE</KEYWORD2>\r
+                       <KEYWORD2>WRITE</KEYWORD2>\r
+                       <KEYWORD2>XFID</KEYWORD2>\r
+                       <KEYWORD2>XFILE</KEYWORD2>\r
+                       <KEYWORD2>XFIN</KEYWORD2>\r
+\r
+                       <KEYWORD3>ADDR</KEYWORD3>\r
+                       <KEYWORD3>ALL</KEYWORD3>\r
+                       <KEYWORD3>AUTO</KEYWORD3>\r
+                       <KEYWORD3>BEGIN</KEYWORD3>\r
+                       <KEYWORD3>BREAK</KEYWORD3>\r
+                       <KEYWORD3>CALL</KEYWORD3>\r
+                       <KEYWORD3>CASE</KEYWORD3>\r
+                       <KEYWORD3>CHN</KEYWORD3>\r
+                       <KEYWORD3>CLEAR</KEYWORD3>\r
+                       <KEYWORD3>CTL</KEYWORD3>\r
+                       <KEYWORD3>DATA</KEYWORD3>\r
+                       <KEYWORD3>DAY</KEYWORD3>\r
+                       <KEYWORD3>DEF</KEYWORD3>\r
+                       <KEYWORD3>DEFAULT</KEYWORD3>\r
+                       <KEYWORD3>DEFEND</KEYWORD3>\r
+                       <KEYWORD3>DELETE</KEYWORD3>\r
+                       <KEYWORD3>DIM</KEYWORD3>\r
+                       <KEYWORD3>DREAD</KEYWORD3>\r
+                       <KEYWORD3>DROP</KEYWORD3>\r
+                       <KEYWORD3>EDIT</KEYWORD3>\r
+                       <KEYWORD3>ELSE</KEYWORD3>\r
+                       <KEYWORD3>ENDIF</KEYWORD3>\r
+                       <KEYWORD3>ENTER</KEYWORD3>\r
+                       <KEYWORD3>ERR</KEYWORD3>\r
+                       <KEYWORD3>ESCAPE</KEYWORD3>\r
+                       <KEYWORD3>ESCOFF</KEYWORD3>\r
+                       <KEYWORD3>ESCON</KEYWORD3>\r
+                       <KEYWORD3>EXECUTE</KEYWORD3>\r
+                       <KEYWORD3>EXIT</KEYWORD3>\r
+                       <KEYWORD3>EXITTO</KEYWORD3>\r
+                       <KEYWORD3>FI</KEYWORD3>\r
+                       <KEYWORD3>FOR</KEYWORD3>\r
+                       <KEYWORD3>GOSUB</KEYWORD3>\r
+                       <KEYWORD3>GOTO</KEYWORD3>\r
+                       <KEYWORD3>IF</KEYWORD3>\r
+                       <KEYWORD3>IFF</KEYWORD3>\r
+                       <KEYWORD3>INITFILE</KEYWORD3>\r
+                       <KEYWORD3>IOR</KEYWORD3>\r
+                       <KEYWORD3>LET</KEYWORD3>\r
+                       <KEYWORD3>NEXT</KEYWORD3>\r
+                       <KEYWORD3>NOT</KEYWORD3>\r
+                       <KEYWORD3>ON</KEYWORD3>\r
+                       <KEYWORD3>OPTS</KEYWORD3>\r
+                       <KEYWORD3>OR</KEYWORD3>\r
+                       <KEYWORD3>PFX</KEYWORD3>\r
+                       <KEYWORD3>PRECISION</KEYWORD3>\r
+                       <KEYWORD3>RELEASE</KEYWORD3>\r
+                       <KEYWORD3>RENUM</KEYWORD3>\r
+                       <KEYWORD3>REPEAT</KEYWORD3>\r
+                       <KEYWORD3>RESET</KEYWORD3>\r
+                       <KEYWORD3>RESTORE</KEYWORD3>\r
+                       <KEYWORD3>RETRY</KEYWORD3>\r
+                       <KEYWORD3>RETURN</KEYWORD3>\r
+                       <KEYWORD3>RUN</KEYWORD3>\r
+                       <KEYWORD3>SET_CASE_SENSITIVE_OFF</KEYWORD3>\r
+                       <KEYWORD3>SET_CASE_SENSITIVE_ON</KEYWORD3>\r
+                       <KEYWORD3>SETERR</KEYWORD3>\r
+                       <KEYWORD3>SETESC</KEYWORD3>\r
+                       <KEYWORD3>SETOPTS</KEYWORD3>\r
+                       <KEYWORD3>SETTIME</KEYWORD3>\r
+                       <KEYWORD3>SSN</KEYWORD3>\r
+                       <KEYWORD3>START</KEYWORD3>\r
+                       <KEYWORD3>STEP</KEYWORD3>\r
+                       <KEYWORD3>STOP</KEYWORD3>\r
+                       <KEYWORD3>SWEND</KEYWORD3>\r
+                       <KEYWORD3>SWITCH</KEYWORD3>\r
+                       <KEYWORD3>THEN</KEYWORD3>\r
+                       <KEYWORD3>TO</KEYWORD3>\r
+                       <KEYWORD3>UNT</KEYWORD3>\r
+                       <KEYWORD3>UNTIL</KEYWORD3>\r
+                       <KEYWORD3>WAIT</KEYWORD3>\r
+                       <KEYWORD3>WEND</KEYWORD3>\r
+                       <KEYWORD3>WHILE</KEYWORD3>\r
+                       <KEYWORD3>XOR</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/bcel.xml b/extra/xmode/modes/bcel.xml
new file mode 100644 (file)
index 0000000..19ab3cf
--- /dev/null
@@ -0,0 +1,320 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+    Java bytecode mode. Used by Andre Kaplan's JavaInsight plugin.\r
+-->\r
+\r
+<MODE>\r
+    <PROPS>\r
+        <PROPERTY NAME="commentStart" VALUE="/*" />\r
+        <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+        <PROPERTY NAME="lineComment" VALUE="//" />\r
+    </PROPS>\r
+\r
+\r
+    <RULES HIGHLIGHT_DIGITS="TRUE">\r
+        <!-- Silly comment -->\r
+        <SEQ TYPE="COMMENT1">/**/</SEQ>\r
+\r
+        <!-- Javadoc comment -->\r
+        <SPAN TYPE="COMMENT3" DELEGATE="JAVADOC">\r
+            <BEGIN>/**</BEGIN>\r
+            <END>*/</END>\r
+        </SPAN>\r
+\r
+        <!-- Java comment (C style) -->\r
+        <SPAN TYPE="COMMENT1">\r
+            <BEGIN>/*</BEGIN>\r
+            <END>*/</END>\r
+        </SPAN>\r
+\r
+        <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>'</BEGIN>\r
+            <END>'</END>\r
+        </SPAN>\r
+\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>"</BEGIN>\r
+            <END>"</END>\r
+        </SPAN>\r
+\r
+        <MARK_FOLLOWING TYPE="KEYWORD2" AT_LINE_START="FALSE">%</MARK_FOLLOWING>\r
+        <MARK_FOLLOWING TYPE="KEYWORD2" AT_LINE_START="FALSE">#</MARK_FOLLOWING>\r
+\r
+        <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+            AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+\r
+        <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+\r
+        <KEYWORDS>\r
+            <!-- Some java keywords -->\r
+            <KEYWORD1>abstract</KEYWORD1>\r
+            <!-- <KEYWORD1>break</KEYWORD1> -->\r
+            <!-- <KEYWORD1>case</KEYWORD1> -->\r
+            <!-- <KEYWORD1>catch</KEYWORD1> -->\r
+            <!-- <KEYWORD1>continue</KEYWORD1> -->\r
+            <!-- <KEYWORD1>default</KEYWORD1> -->\r
+            <!-- <KEYWORD1>do</KEYWORD1> -->\r
+            <!-- <KEYWORD1>else</KEYWORD1> -->\r
+            <KEYWORD1>extends</KEYWORD1>\r
+            <KEYWORD1>final</KEYWORD1>\r
+            <!-- <KEYWORD1>finally</KEYWORD1> -->\r
+            <!-- <KEYWORD1>for</KEYWORD1> -->\r
+            <!-- <KEYWORD1>if</KEYWORD1> -->\r
+            <KEYWORD1>implements</KEYWORD1>\r
+            <!-- <KEYWORD1>instanceof</KEYWORD1> -->\r
+            <KEYWORD1>native</KEYWORD1>\r
+            <!-- <KEYWORD1>new</KEYWORD1> -->\r
+            <KEYWORD1>private</KEYWORD1>\r
+            <KEYWORD1>protected</KEYWORD1>\r
+            <KEYWORD1>public</KEYWORD1>\r
+            <!-- <KEYWORD1>return</KEYWORD1> -->\r
+            <KEYWORD1>static</KEYWORD1>\r
+            <!-- <KEYWORD1>switch</KEYWORD1> -->\r
+            <KEYWORD1>synchronized</KEYWORD1>\r
+            <KEYWORD1>throw</KEYWORD1>\r
+            <KEYWORD1>throws</KEYWORD1>\r
+            <KEYWORD1>transient</KEYWORD1>\r
+            <!-- <KEYWORD1>try</KEYWORD1> -->\r
+            <KEYWORD1>volatile</KEYWORD1>\r
+            <!-- <KEYWORD1>while</KEYWORD1> -->\r
+\r
+            <!-- <KEYWORD2>package</KEYWORD2> -->\r
+            <!-- <KEYWORD2>import</KEYWORD2> -->\r
+\r
+            <KEYWORD3>boolean</KEYWORD3>\r
+            <KEYWORD3>byte</KEYWORD3>\r
+            <KEYWORD3>char</KEYWORD3>\r
+            <KEYWORD3>class</KEYWORD3>\r
+            <KEYWORD3>double</KEYWORD3>\r
+            <KEYWORD3>float</KEYWORD3>\r
+            <KEYWORD3>int</KEYWORD3>\r
+            <KEYWORD3>interface</KEYWORD3>\r
+            <KEYWORD3>long</KEYWORD3>\r
+            <KEYWORD3>short</KEYWORD3>\r
+            <KEYWORD3>void</KEYWORD3>\r
+\r
+            <!-- <LITERAL2>false</LITERAL2> -->\r
+            <!-- <LITERAL2>null</LITERAL2> -->\r
+            <!-- <LITERAL2>super</LITERAL2> -->\r
+            <!-- <LITERAL2>this</LITERAL2> -->\r
+            <!-- <LITERAL2>true</LITERAL2> -->\r
+\r
+            <KEYWORD1>clinit</KEYWORD1>\r
+            <KEYWORD1>init</KEYWORD1>\r
+\r
+            <!-- 00 (0x00) --><KEYWORD1>nop</KEYWORD1>\r
+            <!-- 01 (0x01) --><KEYWORD1>aconst_null</KEYWORD1>\r
+            <!-- 02 (0x02) --><KEYWORD1>iconst_m1</KEYWORD1>\r
+            <!-- 03 (0x03) --><KEYWORD1>iconst_0</KEYWORD1>\r
+            <!-- 04 (0x04) --><KEYWORD1>iconst_1</KEYWORD1>\r
+            <!-- 05 (0x05) --><KEYWORD1>iconst_2</KEYWORD1>\r
+            <!-- 06 (0x06) --><KEYWORD1>iconst_3</KEYWORD1>\r
+            <!-- 07 (0x07) --><KEYWORD1>iconst_4</KEYWORD1>\r
+            <!-- 08 (0x08) --><KEYWORD1>iconst_5</KEYWORD1>\r
+            <!-- 09 (0x09) --><KEYWORD1>lconst_0</KEYWORD1>\r
+            <!-- 10 (0x0a) --><KEYWORD1>lconst_1</KEYWORD1>\r
+            <!-- 11 (0x0b) --><KEYWORD1>fconst_0</KEYWORD1>\r
+            <!-- 12 (0x0c) --><KEYWORD1>fconst_1</KEYWORD1>\r
+            <!-- 13 (0x0d) --><KEYWORD1>fconst_2</KEYWORD1>\r
+            <!-- 14 (0x0e) --><KEYWORD1>dconst_0</KEYWORD1>\r
+            <!-- 15 (0x0f) --><KEYWORD1>dconst_1</KEYWORD1>\r
+            <!-- 16 (0x10) --><KEYWORD1>bipush</KEYWORD1>\r
+            <!-- 17 (0x11) --><KEYWORD1>sipush</KEYWORD1>\r
+            <!-- 18 (0x12) --><KEYWORD1>ldc</KEYWORD1>\r
+            <!-- 19 (0x13) --><KEYWORD1>ldc_w</KEYWORD1>\r
+            <!-- 20 (0x14) --><KEYWORD1>ldc2_w</KEYWORD1>\r
+            <!-- 21 (0x15) --><KEYWORD1>iload</KEYWORD1>\r
+            <!-- 22 (0x16) --><KEYWORD1>lload</KEYWORD1>\r
+            <!-- 23 (0x17) --><KEYWORD1>fload</KEYWORD1>\r
+            <!-- 24 (0x18) --><KEYWORD1>dload</KEYWORD1>\r
+            <!-- 25 (0x19) --><KEYWORD1>aload</KEYWORD1>\r
+            <!-- 26 (0x1a) --><KEYWORD1>iload_0</KEYWORD1>\r
+            <!-- 27 (0x1b) --><KEYWORD1>iload_1</KEYWORD1>\r
+            <!-- 28 (0x1c) --><KEYWORD1>iload_2</KEYWORD1>\r
+            <!-- 29 (0x1d) --><KEYWORD1>iload_3</KEYWORD1>\r
+            <!-- 30 (0x1e) --><KEYWORD1>lload_0</KEYWORD1>\r
+            <!-- 31 (0x1f) --><KEYWORD1>lload_1</KEYWORD1>\r
+            <!-- 32 (0x20) --><KEYWORD1>lload_2</KEYWORD1>\r
+            <!-- 33 (0x21) --><KEYWORD1>lload_3</KEYWORD1>\r
+            <!-- 34 (0x22) --><KEYWORD1>fload_0</KEYWORD1>\r
+            <!-- 35 (0x23) --><KEYWORD1>fload_1</KEYWORD1>\r
+            <!-- 36 (0x24) --><KEYWORD1>fload_2</KEYWORD1>\r
+            <!-- 37 (0x25) --><KEYWORD1>fload_3</KEYWORD1>\r
+            <!-- 38 (0x26) --><KEYWORD1>dload_0</KEYWORD1>\r
+            <!-- 39 (0x27) --><KEYWORD1>dload_1</KEYWORD1>\r
+            <!-- 40 (0x28) --><KEYWORD1>dload_2</KEYWORD1>\r
+            <!-- 41 (0x29) --><KEYWORD1>dload_3</KEYWORD1>\r
+            <!-- 42 (0x2a) --><KEYWORD1>aload_0</KEYWORD1>\r
+            <!-- 43 (0x2b) --><KEYWORD1>aload_1</KEYWORD1>\r
+            <!-- 44 (0x2c) --><KEYWORD1>aload_2</KEYWORD1>\r
+            <!-- 45 (0x2d) --><KEYWORD1>aload_3</KEYWORD1>\r
+            <!-- 46 (0x2e) --><KEYWORD1>iaload</KEYWORD1>\r
+            <!-- 47 (0x2f) --><KEYWORD1>laload</KEYWORD1>\r
+            <!-- 48 (0x30) --><KEYWORD1>faload</KEYWORD1>\r
+            <!-- 49 (0x31) --><KEYWORD1>daload</KEYWORD1>\r
+            <!-- 50 (0x32) --><KEYWORD1>aaload</KEYWORD1>\r
+            <!-- 51 (0x33) --><KEYWORD1>baload</KEYWORD1>\r
+            <!-- 52 (0x34) --><KEYWORD1>caload</KEYWORD1>\r
+            <!-- 53 (0x35) --><KEYWORD1>saload</KEYWORD1>\r
+            <!-- 54 (0x36) --><KEYWORD1>istore</KEYWORD1>\r
+            <!-- 55 (0x37) --><KEYWORD1>lstore</KEYWORD1>\r
+            <!-- 56 (0x38) --><KEYWORD1>fstore</KEYWORD1>\r
+            <!-- 57 (0x39) --><KEYWORD1>dstore</KEYWORD1>\r
+            <!-- 58 (0x3a) --><KEYWORD1>astore</KEYWORD1>\r
+            <!-- 59 (0x3b) --><KEYWORD1>istore_0</KEYWORD1>\r
+            <!-- 60 (0x3c) --><KEYWORD1>istore_1</KEYWORD1>\r
+            <!-- 61 (0x3d) --><KEYWORD1>istore_2</KEYWORD1>\r
+            <!-- 62 (0x3e) --><KEYWORD1>istore_3</KEYWORD1>\r
+            <!-- 63 (0x3f) --><KEYWORD1>lstore_0</KEYWORD1>\r
+            <!-- 64 (0x40) --><KEYWORD1>lstore_1</KEYWORD1>\r
+            <!-- 65 (0x41) --><KEYWORD1>lstore_2</KEYWORD1>\r
+            <!-- 66 (0x42) --><KEYWORD1>lstore_3</KEYWORD1>\r
+            <!-- 67 (0x43) --><KEYWORD1>fstore_0</KEYWORD1>\r
+            <!-- 68 (0x44) --><KEYWORD1>fstore_1</KEYWORD1>\r
+            <!-- 69 (0x45) --><KEYWORD1>fstore_2</KEYWORD1>\r
+            <!-- 70 (0x46) --><KEYWORD1>fstore_3</KEYWORD1>\r
+            <!-- 71 (0x47) --><KEYWORD1>dstore_0</KEYWORD1>\r
+            <!-- 72 (0x48) --><KEYWORD1>dstore_1</KEYWORD1>\r
+            <!-- 73 (0x49) --><KEYWORD1>dstore_2</KEYWORD1>\r
+            <!-- 74 (0x4a) --><KEYWORD1>dstore_3</KEYWORD1>\r
+            <!-- 75 (0x4b) --><KEYWORD1>astore_0</KEYWORD1>\r
+            <!-- 76 (0x4c) --><KEYWORD1>astore_1</KEYWORD1>\r
+            <!-- 77 (0x4d) --><KEYWORD1>astore_2</KEYWORD1>\r
+            <!-- 78 (0x4e) --><KEYWORD1>astore_3</KEYWORD1>\r
+            <!-- 79 (0x4f) --><KEYWORD1>iastore</KEYWORD1>\r
+            <!-- 80 (0x50) --><KEYWORD1>lastore</KEYWORD1>\r
+            <!-- 81 (0x51) --><KEYWORD1>fastore</KEYWORD1>\r
+            <!-- 82 (0x52) --><KEYWORD1>dastore</KEYWORD1>\r
+            <!-- 83 (0x53) --><KEYWORD1>aastore</KEYWORD1>\r
+            <!-- 84 (0x54) --><KEYWORD1>bastore</KEYWORD1>\r
+            <!-- 85 (0x55) --><KEYWORD1>castore</KEYWORD1>\r
+            <!-- 86 (0x56) --><KEYWORD1>sastore</KEYWORD1>\r
+            <!-- 87 (0x57) --><KEYWORD1>pop</KEYWORD1>\r
+            <!-- 88 (0x58) --><KEYWORD1>pop2</KEYWORD1>\r
+            <!-- 089 (0x59) --><KEYWORD1>dup</KEYWORD1>\r
+            <!-- 090 (0x5a) --><KEYWORD1>dup_x1</KEYWORD1>\r
+            <!-- 091 (0x5b) --><KEYWORD1>dup_x2</KEYWORD1>\r
+            <!-- 092 (0x5c) --><KEYWORD1>dup2</KEYWORD1>\r
+            <!-- 093 (0x5d) --><KEYWORD1>dup2_x1</KEYWORD1>\r
+            <!-- 094 (0x5e) --><KEYWORD1>dup2_x2</KEYWORD1>\r
+            <!-- 095 (0x5f) --><KEYWORD1>swap</KEYWORD1>\r
+            <!-- 096 (0x60) --><KEYWORD1>iadd</KEYWORD1>\r
+            <!-- 097 (0x61) --><KEYWORD1>ladd</KEYWORD1>\r
+            <!-- 098 (0x62) --><KEYWORD1>fadd</KEYWORD1>\r
+            <!-- 099 (0x63) --><KEYWORD1>dadd</KEYWORD1>\r
+            <!-- 100 (0x64) --><KEYWORD1>isub</KEYWORD1>\r
+            <!-- 101 (0x65) --><KEYWORD1>lsub</KEYWORD1>\r
+            <!-- 102 (0x66) --><KEYWORD1>fsub</KEYWORD1>\r
+            <!-- 103 (0x67) --><KEYWORD1>dsub</KEYWORD1>\r
+            <!-- 104 (0x68) --><KEYWORD1>imul</KEYWORD1>\r
+            <!-- 105 (0x69) --><KEYWORD1>lmul</KEYWORD1>\r
+            <!-- 106 (0x6a) --><KEYWORD1>fmul</KEYWORD1>\r
+            <!-- 107 (0x6b) --><KEYWORD1>dmul</KEYWORD1>\r
+            <!-- 108 (0x6c) --><KEYWORD1>idiv</KEYWORD1>\r
+            <!-- 109 (0x6d) --><KEYWORD1>ldiv</KEYWORD1>\r
+            <!-- 110 (0x6e) --><KEYWORD1>fdiv</KEYWORD1>\r
+            <!-- 111 (0x6f) --><KEYWORD1>ddiv</KEYWORD1>\r
+            <!-- 112 (0x70) --><KEYWORD1>irem</KEYWORD1>\r
+            <!-- 113 (0x71) --><KEYWORD1>lrem</KEYWORD1>\r
+            <!-- 114 (0x72) --><KEYWORD1>frem</KEYWORD1>\r
+            <!-- 115 (0x73) --><KEYWORD1>drem</KEYWORD1>\r
+            <!-- 116 (0x74) --><KEYWORD1>ineg</KEYWORD1>\r
+            <!-- 117 (0x75) --><KEYWORD1>lneg</KEYWORD1>\r
+            <!-- 118 (0x76) --><KEYWORD1>fneg</KEYWORD1>\r
+            <!-- 119 (0x77) --><KEYWORD1>dneg</KEYWORD1>\r
+            <!-- 120 (0x78) --><KEYWORD1>ishl</KEYWORD1>\r
+            <!-- 121 (0x79) --><KEYWORD1>lshl</KEYWORD1>\r
+            <!-- 122 (0x7a) --><KEYWORD1>ishr</KEYWORD1>\r
+            <!-- 123 (0x7b) --><KEYWORD1>lshr</KEYWORD1>\r
+            <!-- 124 (0x7c) --><KEYWORD1>iushr</KEYWORD1>\r
+            <!-- 125 (0x7d) --><KEYWORD1>lushr</KEYWORD1>\r
+            <!-- 126 (0x7e) --><KEYWORD1>iand</KEYWORD1>\r
+            <!-- 127 (0x7f) --><KEYWORD1>land</KEYWORD1>\r
+            <!-- 128 (0x80) --><KEYWORD1>ior</KEYWORD1>\r
+            <!-- 129 (0x81) --><KEYWORD1>lor</KEYWORD1>\r
+            <!-- 130 (0x82) --><KEYWORD1>ixor</KEYWORD1>\r
+            <!-- 131 (0x83) --><KEYWORD1>lxor</KEYWORD1>\r
+            <!-- 132 (0x84) --><KEYWORD1>iinc</KEYWORD1>\r
+            <!-- 133 (0x85) --><KEYWORD1>i2l</KEYWORD1>\r
+            <!-- 134 (0x86) --><KEYWORD1>i2f</KEYWORD1>\r
+            <!-- 135 (0x87) --><KEYWORD1>i2d</KEYWORD1>\r
+            <!-- 136 (0x88) --><KEYWORD1>l2i</KEYWORD1>\r
+            <!-- 137 (0x89) --><KEYWORD1>l2f</KEYWORD1>\r
+            <!-- 138 (0x8a) --><KEYWORD1>l2d</KEYWORD1>\r
+            <!-- 139 (0x8b) --><KEYWORD1>f2i</KEYWORD1>\r
+            <!-- 140 (0x8c) --><KEYWORD1>f2l</KEYWORD1>\r
+            <!-- 141 (0x8d) --><KEYWORD1>f2d</KEYWORD1>\r
+            <!-- 142 (0x8e) --><KEYWORD1>d2i</KEYWORD1>\r
+            <!-- 143 (0x8f) --><KEYWORD1>d2l</KEYWORD1>\r
+            <!-- 144 (0x90) --><KEYWORD1>d2f</KEYWORD1>\r
+            <!-- 145 (0x91) --><KEYWORD1>i2b</KEYWORD1>\r
+            <!-- 146 (0x92) --><KEYWORD1>i2c</KEYWORD1>\r
+            <!-- 147 (0x93) --><KEYWORD1>i2s</KEYWORD1>\r
+            <!-- 148 (0x94) --><KEYWORD1>lcmp</KEYWORD1>\r
+            <!-- 149 (0x95) --><KEYWORD1>fcmpl</KEYWORD1>\r
+            <!-- 150 (0x96) --><KEYWORD1>fcmpg</KEYWORD1>\r
+            <!-- 151 (0x97) --><KEYWORD1>dcmpl</KEYWORD1>\r
+            <!-- 152 (0x98) --><KEYWORD1>dcmpg</KEYWORD1>\r
+            <!-- 153 (0x99) --><KEYWORD1>ifeq</KEYWORD1>\r
+            <!-- 154 (0x9a) --><KEYWORD1>ifne</KEYWORD1>\r
+            <!-- 155 (0x9b) --><KEYWORD1>iflt</KEYWORD1>\r
+            <!-- 156 (0x9c) --><KEYWORD1>ifge</KEYWORD1>\r
+            <!-- 157 (0x9d) --><KEYWORD1>ifgt</KEYWORD1>\r
+            <!-- 158 (0x9e) --><KEYWORD1>ifle</KEYWORD1>\r
+            <!-- 159 (0x9f) --><KEYWORD1>if_icmpeq</KEYWORD1>\r
+            <!-- 160 (0xa0) --><KEYWORD1>if_icmpne</KEYWORD1>\r
+            <!-- 161 (0xa1) --><KEYWORD1>if_icmplt</KEYWORD1>\r
+            <!-- 162 (0xa2) --><KEYWORD1>if_icmpge</KEYWORD1>\r
+            <!-- 163 (0xa3) --><KEYWORD1>if_icmpgt</KEYWORD1>\r
+            <!-- 164 (0xa4) --><KEYWORD1>if_icmple</KEYWORD1>\r
+            <!-- 165 (0xa5) --><KEYWORD1>if_acmpeq</KEYWORD1>\r
+            <!-- 166 (0xa6) --><KEYWORD1>if_acmpne</KEYWORD1>\r
+            <!-- 167 (0xa7) --><KEYWORD1>goto</KEYWORD1>\r
+            <!-- 168 (0xa8) --><KEYWORD1>jsr</KEYWORD1>\r
+            <!-- 169 (0xa9) --><KEYWORD1>ret</KEYWORD1>\r
+            <!-- 170 (0xaa) --><KEYWORD1>tableswitch</KEYWORD1>\r
+            <!-- 171 (0xab) --><KEYWORD1>lookupswitch</KEYWORD1>\r
+            <!-- 172 (0xac) --><KEYWORD1>ireturn</KEYWORD1>\r
+            <!-- 173 (0xad) --><KEYWORD1>lreturn</KEYWORD1>\r
+            <!-- 174 (0xae) --><KEYWORD1>freturn</KEYWORD1>\r
+            <!-- 175 (0xaf) --><KEYWORD1>dreturn</KEYWORD1>\r
+            <!-- 176 (0xb0) --><KEYWORD1>areturn</KEYWORD1>\r
+            <!-- 177 (0xb1) --><KEYWORD1>return</KEYWORD1>\r
+            <!-- 178 (0xb2) --><KEYWORD1>getstatic</KEYWORD1>\r
+            <!-- 179 (0xb3) --><KEYWORD1>putstatic</KEYWORD1>\r
+            <!-- 180 (0xb4) --><KEYWORD1>getfield</KEYWORD1>\r
+            <!-- 181 (0xb5) --><KEYWORD1>putfield</KEYWORD1>\r
+            <!-- 182 (0xb6) --><KEYWORD1>invokevirtual</KEYWORD1>\r
+            <!-- 183 (0xb7) --><KEYWORD1>invokespecial</KEYWORD1>\r
+            <!-- 184 (0xb8) --><KEYWORD1>invokestatic</KEYWORD1>\r
+            <!-- 185 (0xb9) --><KEYWORD1>invokeinterface</KEYWORD1>\r
+            <!-- 186 (0xba) --><!-- xxxunusedxxx -->\r
+            <!-- 187 (0xbb) --><KEYWORD1>new</KEYWORD1>\r
+            <!-- 188 (0xbc) --><KEYWORD1>newarray</KEYWORD1>\r
+            <!-- 189 (0xbd) --><KEYWORD1>anewarray</KEYWORD1>\r
+            <!-- 190 (0xbe) --><KEYWORD1>arraylength</KEYWORD1>\r
+            <!-- 191 (0xbf) --><KEYWORD1>athrow</KEYWORD1>\r
+            <!-- 192 (0xc0) --><KEYWORD1>checkcast</KEYWORD1>\r
+            <!-- 193 (0xc1) --><KEYWORD1>instanceof</KEYWORD1>\r
+            <!-- 194 (0xc2) --><KEYWORD1>monitorenter</KEYWORD1>\r
+            <!-- 195 (0xc3) --><KEYWORD1>monitorexit</KEYWORD1>\r
+            <!-- 196 (0xc4) --><KEYWORD1>wide</KEYWORD1>\r
+            <!-- 197 (0xc5) --><KEYWORD1>multianewarray</KEYWORD1>\r
+            <!-- 198 (0xc6) --><KEYWORD1>ifnull</KEYWORD1>\r
+            <!-- 199 (0xc7) --><KEYWORD1>ifnonnull</KEYWORD1>\r
+            <!-- 200 (0xc8) --><KEYWORD1>goto_w</KEYWORD1>\r
+            <!-- 201 (0xc9) --><KEYWORD1>jsr_w</KEYWORD1>\r
+\r
+            <!-- Reserved opcodes: -->\r
+            <!-- 202 (0xca) --><KEYWORD1>breakpoint</KEYWORD1>\r
+            <!-- 254 (0xfe) --><KEYWORD1>impdep1</KEYWORD1>\r
+            <!-- 255 (0xff) --><KEYWORD1>impdep2</KEYWORD1>\r
+        </KEYWORDS>\r
+    </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/bibtex.xml b/extra/xmode/modes/bibtex.xml
new file mode 100644 (file)
index 0000000..d9211c0
--- /dev/null
@@ -0,0 +1,960 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--  BibTeX mode, by Thomas Alspaugh alspaugh@ics.uci.edu, 2004Mar25  v1.1  -->\r
+<!--  Catalog entry (suggested)\r
+<MODE NAME="BibTeX"            FILE="bibtex.xml"\r
+                               FILE_NAME_GLOB="*.bib" />\r
+  -->\r
+<!--\r
+      This BibTeX mode highlights the fields for each entry type to distinguish\r
+      required, optional, or other fields from Lamport.  \r
+      I have added several commonly-accepted fields (highlighted in yet another\r
+      color);  these are\r
+\r
+        abstract\r
+        annotation\r
+        day\r
+        keywords\r
+        lccn\r
+        location\r
+        references\r
+        url\r
+\r
+      The month name abbreviations are highlighted (jan, feb, mar, ...).\r
+      Escaped quotes (as in {\"o}) are treated correctly.\r
+      Text may be quoted "" or braced {} and may contain \{\}.\r
+      Entries may be braced {} or parenthesized ().\r
+      @strings are highlighted correctly.\r
+      .\r
+      Comments and suggestions are welcome.\r
+      Enjoy!\r
+  -->\r
+<!--  Things BibTeX mode does not do:\r
+        - highlight keys, which must appear after the { or ( \r
+          and match [a-zA-Z0-9.:;?!`'()[\]\-/*@]+\r
+  -->\r
+<!--  Use of token types:\r
+        COMMENT1   % comments\r
+        FUNCTION   entries\r
+        KEYWORD1   additional fields\r
+        KEYWORD2   Lamport fields neither required nor optional\r
+        KEYWORD3   Lamport fields optional\r
+        KEYWORD4   Lamport fields required\r
+        LITERAL1   "text", months, unquoted numbers\r
+        LITERAL2   {text}\r
+        LITERAL3  \{text\}\r
+        OPERATOR   = ,\r
+  -->\r
+<!--  bibtex.xml is generated automatically from a summary of Lamport \r
+      "LaTeX : A document preparation system : User guide and reference manual",\r
+      1994 (LaTeX2e) edition, appendix B, using a Perl scripts.  -->\r
+\r
+<MODE>\r
+  <PROPS>\r
+    <PROPERTY NAME="lineComment" VALUE="%"/>\r
+  </PROPS>\r
+\r
+  <RULES IGNORE_CASE="TRUE">\r
+    <EOL_SPAN TYPE="COMMENT1">%</EOL_SPAN>\r
+    \r
+    <!-- Entry types.  Each entry type has its own ruleset. -->\r
+    <!-- entry: FUNCTION -->\r
+    <SPAN TYPE="FUNCTION" DELEGATE="article"      ><BEGIN>@article{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="article"      ><BEGIN>@article(</BEGIN><END>)</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="book"         ><BEGIN>@book{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="book"         ><BEGIN>@book(</BEGIN><END>)</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="booklet"      ><BEGIN>@booklet{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="booklet"      ><BEGIN>@booklet(</BEGIN><END>)</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="conference"   ><BEGIN>@conference{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="conference"   ><BEGIN>@conference(</BEGIN><END>)</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="inbook"       ><BEGIN>@inbook{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="inbook"       ><BEGIN>@inbook(</BEGIN><END>)</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="incollection" ><BEGIN>@incollection{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="incollection" ><BEGIN>@incollection(</BEGIN><END>)</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="inproceedings"><BEGIN>@inproceedings{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="inproceedings"><BEGIN>@inproceedings(</BEGIN><END>)</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="manual"       ><BEGIN>@manual{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="manual"       ><BEGIN>@manual(</BEGIN><END>)</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="mastersthesis"><BEGIN>@mastersthesis{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="mastersthesis"><BEGIN>@mastersthesis(</BEGIN><END>)</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="misc"         ><BEGIN>@misc{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="misc"         ><BEGIN>@misc(</BEGIN><END>)</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="phdthesis"    ><BEGIN>@phdthesis{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="phdthesis"    ><BEGIN>@phdthesis(</BEGIN><END>)</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="proceedings"  ><BEGIN>@proceedings{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="proceedings"  ><BEGIN>@proceedings(</BEGIN><END>)</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="techreport"   ><BEGIN>@techreport{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="techreport"   ><BEGIN>@techreport(</BEGIN><END>)</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="unpublished"  ><BEGIN>@unpublished{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="unpublished"  ><BEGIN>@unpublished(</BEGIN><END>)</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="string"       ><BEGIN>@string{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="FUNCTION" DELEGATE="string"       ><BEGIN>@string(</BEGIN><END>)</END></SPAN>\r
+    \r
+  </RULES>\r
+\r
+<RULES SET="article">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+    <SEQ_REGEXP TYPE="LITERAL1" HASH_CHARS="123456789" AT_WORD_START="TRUE">[1-9][0-9]*</SEQ_REGEXP>\r
+    <KEYWORDS>\r
+      <!-- required -->\r
+      <KEYWORD4>author</KEYWORD4>\r
+      <KEYWORD4>journal</KEYWORD4>\r
+      <KEYWORD4>title</KEYWORD4>\r
+      <KEYWORD4>year</KEYWORD4>\r
+      <!-- optional -->\r
+      <KEYWORD3>month</KEYWORD3>\r
+      <KEYWORD3>note</KEYWORD3>\r
+      <KEYWORD3>number</KEYWORD3>\r
+      <KEYWORD3>pages</KEYWORD3>\r
+      <KEYWORD3>volume</KEYWORD3>\r
+      <!-- others -->\r
+      <KEYWORD2>address</KEYWORD2>\r
+      <KEYWORD2>annote</KEYWORD2>\r
+      <KEYWORD2>booktitle</KEYWORD2>\r
+      <KEYWORD2>chapter</KEYWORD2>\r
+      <KEYWORD2>crossref</KEYWORD2>\r
+      <KEYWORD2>edition</KEYWORD2>\r
+      <KEYWORD2>editor</KEYWORD2>\r
+      <KEYWORD2>howpublished</KEYWORD2>\r
+      <KEYWORD2>institution</KEYWORD2>\r
+      <KEYWORD2>key</KEYWORD2>\r
+      <KEYWORD2>organization</KEYWORD2>\r
+      <KEYWORD2>publisher</KEYWORD2>\r
+      <KEYWORD2>school</KEYWORD2>\r
+      <KEYWORD2>series</KEYWORD2>\r
+      <KEYWORD2>type</KEYWORD2>\r
+      <!-- not in Lamport but widely accepted -->\r
+      <KEYWORD1>abstract</KEYWORD1>\r
+      <KEYWORD1>annotation</KEYWORD1>\r
+      <KEYWORD1>day</KEYWORD1>\r
+      <KEYWORD1>keywords</KEYWORD1>\r
+      <KEYWORD1>lccn</KEYWORD1>\r
+      <KEYWORD1>location</KEYWORD1>\r
+      <KEYWORD1>references</KEYWORD1>\r
+      <KEYWORD1>url</KEYWORD1>\r
+      <!-- total: 32 fields -->\r
+      <LITERAL1>jan</LITERAL1>\r
+      <LITERAL1>feb</LITERAL1>\r
+      <LITERAL1>mar</LITERAL1>\r
+      <LITERAL1>apr</LITERAL1>\r
+      <LITERAL1>may</LITERAL1>\r
+      <LITERAL1>jun</LITERAL1>\r
+      <LITERAL1>jul</LITERAL1>\r
+      <LITERAL1>aug</LITERAL1>\r
+      <LITERAL1>sep</LITERAL1>\r
+      <LITERAL1>oct</LITERAL1>\r
+      <LITERAL1>nov</LITERAL1>\r
+      <LITERAL1>dec</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+\r
+<RULES SET="book">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+    <SEQ_REGEXP TYPE="LITERAL1" HASH_CHARS="123456789" AT_WORD_START="TRUE">[1-9][0-9]*</SEQ_REGEXP>\r
+    <KEYWORDS>\r
+      <!-- required -->\r
+      <KEYWORD4>author</KEYWORD4>\r
+      <KEYWORD4>editor</KEYWORD4>\r
+      <KEYWORD4>publisher</KEYWORD4>\r
+      <KEYWORD4>title</KEYWORD4>\r
+      <KEYWORD4>year</KEYWORD4>\r
+      <!-- optional -->\r
+      <KEYWORD3>address</KEYWORD3>\r
+      <KEYWORD3>edition</KEYWORD3>\r
+      <KEYWORD3>month</KEYWORD3>\r
+      <KEYWORD3>note</KEYWORD3>\r
+      <KEYWORD3>number</KEYWORD3>\r
+      <KEYWORD3>series</KEYWORD3>\r
+      <KEYWORD3>volume</KEYWORD3>\r
+      <!-- others -->\r
+      <KEYWORD2>annote</KEYWORD2>\r
+      <KEYWORD2>booktitle</KEYWORD2>\r
+      <KEYWORD2>chapter</KEYWORD2>\r
+      <KEYWORD2>crossref</KEYWORD2>\r
+      <KEYWORD2>howpublished</KEYWORD2>\r
+      <KEYWORD2>institution</KEYWORD2>\r
+      <KEYWORD2>journal</KEYWORD2>\r
+      <KEYWORD2>key</KEYWORD2>\r
+      <KEYWORD2>organization</KEYWORD2>\r
+      <KEYWORD2>pages</KEYWORD2>\r
+      <KEYWORD2>school</KEYWORD2>\r
+      <KEYWORD2>type</KEYWORD2>\r
+      <!-- not in Lamport but widely accepted -->\r
+      <KEYWORD1>abstract</KEYWORD1>\r
+      <KEYWORD1>annotation</KEYWORD1>\r
+      <KEYWORD1>day</KEYWORD1>\r
+      <KEYWORD1>keywords</KEYWORD1>\r
+      <KEYWORD1>lccn</KEYWORD1>\r
+      <KEYWORD1>location</KEYWORD1>\r
+      <KEYWORD1>references</KEYWORD1>\r
+      <KEYWORD1>url</KEYWORD1>\r
+      <!-- total: 32 fields -->\r
+      <LITERAL1>jan</LITERAL1>\r
+      <LITERAL1>feb</LITERAL1>\r
+      <LITERAL1>mar</LITERAL1>\r
+      <LITERAL1>apr</LITERAL1>\r
+      <LITERAL1>may</LITERAL1>\r
+      <LITERAL1>jun</LITERAL1>\r
+      <LITERAL1>jul</LITERAL1>\r
+      <LITERAL1>aug</LITERAL1>\r
+      <LITERAL1>sep</LITERAL1>\r
+      <LITERAL1>oct</LITERAL1>\r
+      <LITERAL1>nov</LITERAL1>\r
+      <LITERAL1>dec</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+\r
+<RULES SET="booklet">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+    <SEQ_REGEXP TYPE="LITERAL1" HASH_CHARS="123456789" AT_WORD_START="TRUE">[1-9][0-9]*</SEQ_REGEXP>\r
+    <KEYWORDS>\r
+      <!-- required -->\r
+      <KEYWORD4>title</KEYWORD4>\r
+      <!-- optional -->\r
+      <KEYWORD3>address</KEYWORD3>\r
+      <KEYWORD3>author</KEYWORD3>\r
+      <KEYWORD3>howpublished</KEYWORD3>\r
+      <KEYWORD3>month</KEYWORD3>\r
+      <KEYWORD3>note</KEYWORD3>\r
+      <KEYWORD3>year</KEYWORD3>\r
+      <!-- others -->\r
+      <KEYWORD2>annote</KEYWORD2>\r
+      <KEYWORD2>booktitle</KEYWORD2>\r
+      <KEYWORD2>chapter</KEYWORD2>\r
+      <KEYWORD2>crossref</KEYWORD2>\r
+      <KEYWORD2>edition</KEYWORD2>\r
+      <KEYWORD2>editor</KEYWORD2>\r
+      <KEYWORD2>institution</KEYWORD2>\r
+      <KEYWORD2>journal</KEYWORD2>\r
+      <KEYWORD2>key</KEYWORD2>\r
+      <KEYWORD2>number</KEYWORD2>\r
+      <KEYWORD2>organization</KEYWORD2>\r
+      <KEYWORD2>pages</KEYWORD2>\r
+      <KEYWORD2>publisher</KEYWORD2>\r
+      <KEYWORD2>school</KEYWORD2>\r
+      <KEYWORD2>series</KEYWORD2>\r
+      <KEYWORD2>type</KEYWORD2>\r
+      <KEYWORD2>volume</KEYWORD2>\r
+      <!-- not in Lamport but widely accepted -->\r
+      <KEYWORD1>abstract</KEYWORD1>\r
+      <KEYWORD1>annotation</KEYWORD1>\r
+      <KEYWORD1>day</KEYWORD1>\r
+      <KEYWORD1>keywords</KEYWORD1>\r
+      <KEYWORD1>lccn</KEYWORD1>\r
+      <KEYWORD1>location</KEYWORD1>\r
+      <KEYWORD1>references</KEYWORD1>\r
+      <KEYWORD1>url</KEYWORD1>\r
+      <!-- total: 32 fields -->\r
+      <LITERAL1>jan</LITERAL1>\r
+      <LITERAL1>feb</LITERAL1>\r
+      <LITERAL1>mar</LITERAL1>\r
+      <LITERAL1>apr</LITERAL1>\r
+      <LITERAL1>may</LITERAL1>\r
+      <LITERAL1>jun</LITERAL1>\r
+      <LITERAL1>jul</LITERAL1>\r
+      <LITERAL1>aug</LITERAL1>\r
+      <LITERAL1>sep</LITERAL1>\r
+      <LITERAL1>oct</LITERAL1>\r
+      <LITERAL1>nov</LITERAL1>\r
+      <LITERAL1>dec</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+\r
+<RULES SET="conference">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+    <SEQ_REGEXP TYPE="LITERAL1" HASH_CHARS="123456789" AT_WORD_START="TRUE">[1-9][0-9]*</SEQ_REGEXP>\r
+    <KEYWORDS>\r
+      <!-- required -->\r
+      <KEYWORD4>author</KEYWORD4>\r
+      <KEYWORD4>booktitle</KEYWORD4>\r
+      <KEYWORD4>title</KEYWORD4>\r
+      <KEYWORD4>year</KEYWORD4>\r
+      <!-- optional -->\r
+      <KEYWORD3>address</KEYWORD3>\r
+      <KEYWORD3>editor</KEYWORD3>\r
+      <KEYWORD3>month</KEYWORD3>\r
+      <KEYWORD3>note</KEYWORD3>\r
+      <KEYWORD3>number</KEYWORD3>\r
+      <KEYWORD3>organization</KEYWORD3>\r
+      <KEYWORD3>pages</KEYWORD3>\r
+      <KEYWORD3>publisher</KEYWORD3>\r
+      <KEYWORD3>series</KEYWORD3>\r
+      <KEYWORD3>volume</KEYWORD3>\r
+      <!-- others -->\r
+      <KEYWORD2>annote</KEYWORD2>\r
+      <KEYWORD2>chapter</KEYWORD2>\r
+      <KEYWORD2>crossref</KEYWORD2>\r
+      <KEYWORD2>edition</KEYWORD2>\r
+      <KEYWORD2>howpublished</KEYWORD2>\r
+      <KEYWORD2>institution</KEYWORD2>\r
+      <KEYWORD2>journal</KEYWORD2>\r
+      <KEYWORD2>key</KEYWORD2>\r
+      <KEYWORD2>school</KEYWORD2>\r
+      <KEYWORD2>type</KEYWORD2>\r
+      <!-- not in Lamport but widely accepted -->\r
+      <KEYWORD1>abstract</KEYWORD1>\r
+      <KEYWORD1>annotation</KEYWORD1>\r
+      <KEYWORD1>day</KEYWORD1>\r
+      <KEYWORD1>keywords</KEYWORD1>\r
+      <KEYWORD1>lccn</KEYWORD1>\r
+      <KEYWORD1>location</KEYWORD1>\r
+      <KEYWORD1>references</KEYWORD1>\r
+      <KEYWORD1>url</KEYWORD1>\r
+      <!-- total: 32 fields -->\r
+      <LITERAL1>jan</LITERAL1>\r
+      <LITERAL1>feb</LITERAL1>\r
+      <LITERAL1>mar</LITERAL1>\r
+      <LITERAL1>apr</LITERAL1>\r
+      <LITERAL1>may</LITERAL1>\r
+      <LITERAL1>jun</LITERAL1>\r
+      <LITERAL1>jul</LITERAL1>\r
+      <LITERAL1>aug</LITERAL1>\r
+      <LITERAL1>sep</LITERAL1>\r
+      <LITERAL1>oct</LITERAL1>\r
+      <LITERAL1>nov</LITERAL1>\r
+      <LITERAL1>dec</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+\r
+<RULES SET="inbook">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+    <SEQ_REGEXP TYPE="LITERAL1" HASH_CHARS="123456789" AT_WORD_START="TRUE">[1-9][0-9]*</SEQ_REGEXP>\r
+    <KEYWORDS>\r
+      <!-- required -->\r
+      <KEYWORD4>author</KEYWORD4>\r
+      <KEYWORD4>chapter</KEYWORD4>\r
+      <KEYWORD4>editor</KEYWORD4>\r
+      <KEYWORD4>pages</KEYWORD4>\r
+      <KEYWORD4>publisher</KEYWORD4>\r
+      <KEYWORD4>title</KEYWORD4>\r
+      <KEYWORD4>year</KEYWORD4>\r
+      <!-- optional -->\r
+      <KEYWORD3>address</KEYWORD3>\r
+      <KEYWORD3>edition</KEYWORD3>\r
+      <KEYWORD3>month</KEYWORD3>\r
+      <KEYWORD3>note</KEYWORD3>\r
+      <KEYWORD3>number</KEYWORD3>\r
+      <KEYWORD3>series</KEYWORD3>\r
+      <KEYWORD3>type</KEYWORD3>\r
+      <KEYWORD3>volume</KEYWORD3>\r
+      <!-- others -->\r
+      <KEYWORD2>annote</KEYWORD2>\r
+      <KEYWORD2>booktitle</KEYWORD2>\r
+      <KEYWORD2>crossref</KEYWORD2>\r
+      <KEYWORD2>howpublished</KEYWORD2>\r
+      <KEYWORD2>institution</KEYWORD2>\r
+      <KEYWORD2>journal</KEYWORD2>\r
+      <KEYWORD2>key</KEYWORD2>\r
+      <KEYWORD2>organization</KEYWORD2>\r
+      <KEYWORD2>school</KEYWORD2>\r
+      <!-- not in Lamport but widely accepted -->\r
+      <KEYWORD1>abstract</KEYWORD1>\r
+      <KEYWORD1>annotation</KEYWORD1>\r
+      <KEYWORD1>day</KEYWORD1>\r
+      <KEYWORD1>keywords</KEYWORD1>\r
+      <KEYWORD1>lccn</KEYWORD1>\r
+      <KEYWORD1>location</KEYWORD1>\r
+      <KEYWORD1>references</KEYWORD1>\r
+      <KEYWORD1>url</KEYWORD1>\r
+      <!-- total: 32 fields -->\r
+      <LITERAL1>jan</LITERAL1>\r
+      <LITERAL1>feb</LITERAL1>\r
+      <LITERAL1>mar</LITERAL1>\r
+      <LITERAL1>apr</LITERAL1>\r
+      <LITERAL1>may</LITERAL1>\r
+      <LITERAL1>jun</LITERAL1>\r
+      <LITERAL1>jul</LITERAL1>\r
+      <LITERAL1>aug</LITERAL1>\r
+      <LITERAL1>sep</LITERAL1>\r
+      <LITERAL1>oct</LITERAL1>\r
+      <LITERAL1>nov</LITERAL1>\r
+      <LITERAL1>dec</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+\r
+<RULES SET="incollection">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+    <SEQ_REGEXP TYPE="LITERAL1" HASH_CHARS="123456789" AT_WORD_START="TRUE">[1-9][0-9]*</SEQ_REGEXP>\r
+    <KEYWORDS>\r
+      <!-- required -->\r
+      <KEYWORD4>author</KEYWORD4>\r
+      <KEYWORD4>booktitle</KEYWORD4>\r
+      <KEYWORD4>publisher</KEYWORD4>\r
+      <KEYWORD4>title</KEYWORD4>\r
+      <KEYWORD4>year</KEYWORD4>\r
+      <!-- optional -->\r
+      <KEYWORD3>address</KEYWORD3>\r
+      <KEYWORD3>chapter</KEYWORD3>\r
+      <KEYWORD3>edition</KEYWORD3>\r
+      <KEYWORD3>editor</KEYWORD3>\r
+      <KEYWORD3>month</KEYWORD3>\r
+      <KEYWORD3>note</KEYWORD3>\r
+      <KEYWORD3>number</KEYWORD3>\r
+      <KEYWORD3>pages</KEYWORD3>\r
+      <KEYWORD3>series</KEYWORD3>\r
+      <KEYWORD3>type</KEYWORD3>\r
+      <KEYWORD3>volume</KEYWORD3>\r
+      <!-- others -->\r
+      <KEYWORD2>annote</KEYWORD2>\r
+      <KEYWORD2>crossref</KEYWORD2>\r
+      <KEYWORD2>howpublished</KEYWORD2>\r
+      <KEYWORD2>institution</KEYWORD2>\r
+      <KEYWORD2>journal</KEYWORD2>\r
+      <KEYWORD2>key</KEYWORD2>\r
+      <KEYWORD2>organization</KEYWORD2>\r
+      <KEYWORD2>school</KEYWORD2>\r
+      <!-- not in Lamport but widely accepted -->\r
+      <KEYWORD1>abstract</KEYWORD1>\r
+      <KEYWORD1>annotation</KEYWORD1>\r
+      <KEYWORD1>day</KEYWORD1>\r
+      <KEYWORD1>keywords</KEYWORD1>\r
+      <KEYWORD1>lccn</KEYWORD1>\r
+      <KEYWORD1>location</KEYWORD1>\r
+      <KEYWORD1>references</KEYWORD1>\r
+      <KEYWORD1>url</KEYWORD1>\r
+      <!-- total: 32 fields -->\r
+      <LITERAL1>jan</LITERAL1>\r
+      <LITERAL1>feb</LITERAL1>\r
+      <LITERAL1>mar</LITERAL1>\r
+      <LITERAL1>apr</LITERAL1>\r
+      <LITERAL1>may</LITERAL1>\r
+      <LITERAL1>jun</LITERAL1>\r
+      <LITERAL1>jul</LITERAL1>\r
+      <LITERAL1>aug</LITERAL1>\r
+      <LITERAL1>sep</LITERAL1>\r
+      <LITERAL1>oct</LITERAL1>\r
+      <LITERAL1>nov</LITERAL1>\r
+      <LITERAL1>dec</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+\r
+<RULES SET="inproceedings">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+    <SEQ_REGEXP TYPE="LITERAL1" HASH_CHARS="123456789" AT_WORD_START="TRUE">[1-9][0-9]*</SEQ_REGEXP>\r
+    <KEYWORDS>\r
+      <!-- required -->\r
+      <KEYWORD4>author</KEYWORD4>\r
+      <KEYWORD4>booktitle</KEYWORD4>\r
+      <KEYWORD4>title</KEYWORD4>\r
+      <KEYWORD4>year</KEYWORD4>\r
+      <!-- optional -->\r
+      <KEYWORD3>address</KEYWORD3>\r
+      <KEYWORD3>editor</KEYWORD3>\r
+      <KEYWORD3>month</KEYWORD3>\r
+      <KEYWORD3>note</KEYWORD3>\r
+      <KEYWORD3>number</KEYWORD3>\r
+      <KEYWORD3>organization</KEYWORD3>\r
+      <KEYWORD3>pages</KEYWORD3>\r
+      <KEYWORD3>publisher</KEYWORD3>\r
+      <KEYWORD3>series</KEYWORD3>\r
+      <KEYWORD3>volume</KEYWORD3>\r
+      <!-- others -->\r
+      <KEYWORD2>annote</KEYWORD2>\r
+      <KEYWORD2>chapter</KEYWORD2>\r
+      <KEYWORD2>crossref</KEYWORD2>\r
+      <KEYWORD2>edition</KEYWORD2>\r
+      <KEYWORD2>howpublished</KEYWORD2>\r
+      <KEYWORD2>institution</KEYWORD2>\r
+      <KEYWORD2>journal</KEYWORD2>\r
+      <KEYWORD2>key</KEYWORD2>\r
+      <KEYWORD2>school</KEYWORD2>\r
+      <KEYWORD2>type</KEYWORD2>\r
+      <!-- not in Lamport but widely accepted -->\r
+      <KEYWORD1>abstract</KEYWORD1>\r
+      <KEYWORD1>annotation</KEYWORD1>\r
+      <KEYWORD1>day</KEYWORD1>\r
+      <KEYWORD1>keywords</KEYWORD1>\r
+      <KEYWORD1>lccn</KEYWORD1>\r
+      <KEYWORD1>location</KEYWORD1>\r
+      <KEYWORD1>references</KEYWORD1>\r
+      <KEYWORD1>url</KEYWORD1>\r
+      <!-- total: 32 fields -->\r
+      <LITERAL1>jan</LITERAL1>\r
+      <LITERAL1>feb</LITERAL1>\r
+      <LITERAL1>mar</LITERAL1>\r
+      <LITERAL1>apr</LITERAL1>\r
+      <LITERAL1>may</LITERAL1>\r
+      <LITERAL1>jun</LITERAL1>\r
+      <LITERAL1>jul</LITERAL1>\r
+      <LITERAL1>aug</LITERAL1>\r
+      <LITERAL1>sep</LITERAL1>\r
+      <LITERAL1>oct</LITERAL1>\r
+      <LITERAL1>nov</LITERAL1>\r
+      <LITERAL1>dec</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+\r
+<RULES SET="manual">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+    <SEQ_REGEXP TYPE="LITERAL1" HASH_CHARS="123456789" AT_WORD_START="TRUE">[1-9][0-9]*</SEQ_REGEXP>\r
+    <KEYWORDS>\r
+      <!-- required -->\r
+      <KEYWORD4>title</KEYWORD4>\r
+      <!-- optional -->\r
+      <KEYWORD3>address</KEYWORD3>\r
+      <KEYWORD3>author</KEYWORD3>\r
+      <KEYWORD3>edition</KEYWORD3>\r
+      <KEYWORD3>month</KEYWORD3>\r
+      <KEYWORD3>note</KEYWORD3>\r
+      <KEYWORD3>organization</KEYWORD3>\r
+      <KEYWORD3>year</KEYWORD3>\r
+      <!-- others -->\r
+      <KEYWORD2>annote</KEYWORD2>\r
+      <KEYWORD2>booktitle</KEYWORD2>\r
+      <KEYWORD2>chapter</KEYWORD2>\r
+      <KEYWORD2>crossref</KEYWORD2>\r
+      <KEYWORD2>editor</KEYWORD2>\r
+      <KEYWORD2>howpublished</KEYWORD2>\r
+      <KEYWORD2>institution</KEYWORD2>\r
+      <KEYWORD2>journal</KEYWORD2>\r
+      <KEYWORD2>key</KEYWORD2>\r
+      <KEYWORD2>number</KEYWORD2>\r
+      <KEYWORD2>pages</KEYWORD2>\r
+      <KEYWORD2>publisher</KEYWORD2>\r
+      <KEYWORD2>school</KEYWORD2>\r
+      <KEYWORD2>series</KEYWORD2>\r
+      <KEYWORD2>type</KEYWORD2>\r
+      <KEYWORD2>volume</KEYWORD2>\r
+      <!-- not in Lamport but widely accepted -->\r
+      <KEYWORD1>abstract</KEYWORD1>\r
+      <KEYWORD1>annotation</KEYWORD1>\r
+      <KEYWORD1>day</KEYWORD1>\r
+      <KEYWORD1>keywords</KEYWORD1>\r
+      <KEYWORD1>lccn</KEYWORD1>\r
+      <KEYWORD1>location</KEYWORD1>\r
+      <KEYWORD1>references</KEYWORD1>\r
+      <KEYWORD1>url</KEYWORD1>\r
+      <!-- total: 32 fields -->\r
+      <LITERAL1>jan</LITERAL1>\r
+      <LITERAL1>feb</LITERAL1>\r
+      <LITERAL1>mar</LITERAL1>\r
+      <LITERAL1>apr</LITERAL1>\r
+      <LITERAL1>may</LITERAL1>\r
+      <LITERAL1>jun</LITERAL1>\r
+      <LITERAL1>jul</LITERAL1>\r
+      <LITERAL1>aug</LITERAL1>\r
+      <LITERAL1>sep</LITERAL1>\r
+      <LITERAL1>oct</LITERAL1>\r
+      <LITERAL1>nov</LITERAL1>\r
+      <LITERAL1>dec</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+\r
+<RULES SET="mastersthesis">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+    <SEQ_REGEXP TYPE="LITERAL1" HASH_CHARS="123456789" AT_WORD_START="TRUE">[1-9][0-9]*</SEQ_REGEXP>\r
+    <KEYWORDS>\r
+      <!-- required -->\r
+      <KEYWORD4>author</KEYWORD4>\r
+      <KEYWORD4>school</KEYWORD4>\r
+      <KEYWORD4>title</KEYWORD4>\r
+      <KEYWORD4>year</KEYWORD4>\r
+      <!-- optional -->\r
+      <KEYWORD3>address</KEYWORD3>\r
+      <KEYWORD3>month</KEYWORD3>\r
+      <KEYWORD3>note</KEYWORD3>\r
+      <KEYWORD3>type</KEYWORD3>\r
+      <!-- others -->\r
+      <KEYWORD2>annote</KEYWORD2>\r
+      <KEYWORD2>booktitle</KEYWORD2>\r
+      <KEYWORD2>chapter</KEYWORD2>\r
+      <KEYWORD2>crossref</KEYWORD2>\r
+      <KEYWORD2>edition</KEYWORD2>\r
+      <KEYWORD2>editor</KEYWORD2>\r
+      <KEYWORD2>howpublished</KEYWORD2>\r
+      <KEYWORD2>institution</KEYWORD2>\r
+      <KEYWORD2>journal</KEYWORD2>\r
+      <KEYWORD2>key</KEYWORD2>\r
+      <KEYWORD2>number</KEYWORD2>\r
+      <KEYWORD2>organization</KEYWORD2>\r
+      <KEYWORD2>pages</KEYWORD2>\r
+      <KEYWORD2>publisher</KEYWORD2>\r
+      <KEYWORD2>series</KEYWORD2>\r
+      <KEYWORD2>volume</KEYWORD2>\r
+      <!-- not in Lamport but widely accepted -->\r
+      <KEYWORD1>abstract</KEYWORD1>\r
+      <KEYWORD1>annotation</KEYWORD1>\r
+      <KEYWORD1>day</KEYWORD1>\r
+      <KEYWORD1>keywords</KEYWORD1>\r
+      <KEYWORD1>lccn</KEYWORD1>\r
+      <KEYWORD1>location</KEYWORD1>\r
+      <KEYWORD1>references</KEYWORD1>\r
+      <KEYWORD1>url</KEYWORD1>\r
+      <!-- total: 32 fields -->\r
+      <LITERAL1>jan</LITERAL1>\r
+      <LITERAL1>feb</LITERAL1>\r
+      <LITERAL1>mar</LITERAL1>\r
+      <LITERAL1>apr</LITERAL1>\r
+      <LITERAL1>may</LITERAL1>\r
+      <LITERAL1>jun</LITERAL1>\r
+      <LITERAL1>jul</LITERAL1>\r
+      <LITERAL1>aug</LITERAL1>\r
+      <LITERAL1>sep</LITERAL1>\r
+      <LITERAL1>oct</LITERAL1>\r
+      <LITERAL1>nov</LITERAL1>\r
+      <LITERAL1>dec</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+\r
+<RULES SET="misc">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+    <SEQ_REGEXP TYPE="LITERAL1" HASH_CHARS="123456789" AT_WORD_START="TRUE">[1-9][0-9]*</SEQ_REGEXP>\r
+    <KEYWORDS>\r
+      <!-- required -->\r
+      <!-- optional -->\r
+      <KEYWORD3>author</KEYWORD3>\r
+      <KEYWORD3>howpublished</KEYWORD3>\r
+      <KEYWORD3>month</KEYWORD3>\r
+      <KEYWORD3>note</KEYWORD3>\r
+      <KEYWORD3>title</KEYWORD3>\r
+      <KEYWORD3>year</KEYWORD3>\r
+      <!-- others -->\r
+      <KEYWORD2>address</KEYWORD2>\r
+      <KEYWORD2>annote</KEYWORD2>\r
+      <KEYWORD2>booktitle</KEYWORD2>\r
+      <KEYWORD2>chapter</KEYWORD2>\r
+      <KEYWORD2>crossref</KEYWORD2>\r
+      <KEYWORD2>edition</KEYWORD2>\r
+      <KEYWORD2>editor</KEYWORD2>\r
+      <KEYWORD2>institution</KEYWORD2>\r
+      <KEYWORD2>journal</KEYWORD2>\r
+      <KEYWORD2>key</KEYWORD2>\r
+      <KEYWORD2>number</KEYWORD2>\r
+      <KEYWORD2>organization</KEYWORD2>\r
+      <KEYWORD2>pages</KEYWORD2>\r
+      <KEYWORD2>publisher</KEYWORD2>\r
+      <KEYWORD2>school</KEYWORD2>\r
+      <KEYWORD2>series</KEYWORD2>\r
+      <KEYWORD2>type</KEYWORD2>\r
+      <KEYWORD2>volume</KEYWORD2>\r
+      <!-- not in Lamport but widely accepted -->\r
+      <KEYWORD1>abstract</KEYWORD1>\r
+      <KEYWORD1>annotation</KEYWORD1>\r
+      <KEYWORD1>day</KEYWORD1>\r
+      <KEYWORD1>keywords</KEYWORD1>\r
+      <KEYWORD1>lccn</KEYWORD1>\r
+      <KEYWORD1>location</KEYWORD1>\r
+      <KEYWORD1>references</KEYWORD1>\r
+      <KEYWORD1>url</KEYWORD1>\r
+      <!-- total: 32 fields -->\r
+      <LITERAL1>jan</LITERAL1>\r
+      <LITERAL1>feb</LITERAL1>\r
+      <LITERAL1>mar</LITERAL1>\r
+      <LITERAL1>apr</LITERAL1>\r
+      <LITERAL1>may</LITERAL1>\r
+      <LITERAL1>jun</LITERAL1>\r
+      <LITERAL1>jul</LITERAL1>\r
+      <LITERAL1>aug</LITERAL1>\r
+      <LITERAL1>sep</LITERAL1>\r
+      <LITERAL1>oct</LITERAL1>\r
+      <LITERAL1>nov</LITERAL1>\r
+      <LITERAL1>dec</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+\r
+<RULES SET="phdthesis">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+    <SEQ_REGEXP TYPE="LITERAL1" HASH_CHARS="123456789" AT_WORD_START="TRUE">[1-9][0-9]*</SEQ_REGEXP>\r
+    <KEYWORDS>\r
+      <!-- required -->\r
+      <KEYWORD4>author</KEYWORD4>\r
+      <KEYWORD4>school</KEYWORD4>\r
+      <KEYWORD4>title</KEYWORD4>\r
+      <KEYWORD4>year</KEYWORD4>\r
+      <!-- optional -->\r
+      <KEYWORD3>address</KEYWORD3>\r
+      <KEYWORD3>month</KEYWORD3>\r
+      <KEYWORD3>note</KEYWORD3>\r
+      <KEYWORD3>type</KEYWORD3>\r
+      <!-- others -->\r
+      <KEYWORD2>annote</KEYWORD2>\r
+      <KEYWORD2>booktitle</KEYWORD2>\r
+      <KEYWORD2>chapter</KEYWORD2>\r
+      <KEYWORD2>crossref</KEYWORD2>\r
+      <KEYWORD2>edition</KEYWORD2>\r
+      <KEYWORD2>editor</KEYWORD2>\r
+      <KEYWORD2>howpublished</KEYWORD2>\r
+      <KEYWORD2>institution</KEYWORD2>\r
+      <KEYWORD2>journal</KEYWORD2>\r
+      <KEYWORD2>key</KEYWORD2>\r
+      <KEYWORD2>number</KEYWORD2>\r
+      <KEYWORD2>organization</KEYWORD2>\r
+      <KEYWORD2>pages</KEYWORD2>\r
+      <KEYWORD2>publisher</KEYWORD2>\r
+      <KEYWORD2>series</KEYWORD2>\r
+      <KEYWORD2>volume</KEYWORD2>\r
+      <!-- not in Lamport but widely accepted -->\r
+      <KEYWORD1>abstract</KEYWORD1>\r
+      <KEYWORD1>annotation</KEYWORD1>\r
+      <KEYWORD1>day</KEYWORD1>\r
+      <KEYWORD1>keywords</KEYWORD1>\r
+      <KEYWORD1>lccn</KEYWORD1>\r
+      <KEYWORD1>location</KEYWORD1>\r
+      <KEYWORD1>references</KEYWORD1>\r
+      <KEYWORD1>url</KEYWORD1>\r
+      <!-- total: 32 fields -->\r
+      <LITERAL1>jan</LITERAL1>\r
+      <LITERAL1>feb</LITERAL1>\r
+      <LITERAL1>mar</LITERAL1>\r
+      <LITERAL1>apr</LITERAL1>\r
+      <LITERAL1>may</LITERAL1>\r
+      <LITERAL1>jun</LITERAL1>\r
+      <LITERAL1>jul</LITERAL1>\r
+      <LITERAL1>aug</LITERAL1>\r
+      <LITERAL1>sep</LITERAL1>\r
+      <LITERAL1>oct</LITERAL1>\r
+      <LITERAL1>nov</LITERAL1>\r
+      <LITERAL1>dec</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+\r
+<RULES SET="proceedings">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+    <SEQ_REGEXP TYPE="LITERAL1" HASH_CHARS="123456789" AT_WORD_START="TRUE">[1-9][0-9]*</SEQ_REGEXP>\r
+    <KEYWORDS>\r
+      <!-- required -->\r
+      <KEYWORD4>title</KEYWORD4>\r
+      <KEYWORD4>year</KEYWORD4>\r
+      <!-- optional -->\r
+      <KEYWORD3>address</KEYWORD3>\r
+      <KEYWORD3>editor</KEYWORD3>\r
+      <KEYWORD3>month</KEYWORD3>\r
+      <KEYWORD3>note</KEYWORD3>\r
+      <KEYWORD3>number</KEYWORD3>\r
+      <KEYWORD3>organization</KEYWORD3>\r
+      <KEYWORD3>publisher</KEYWORD3>\r
+      <KEYWORD3>series</KEYWORD3>\r
+      <KEYWORD3>volume</KEYWORD3>\r
+      <!-- others -->\r
+      <KEYWORD2>annote</KEYWORD2>\r
+      <KEYWORD2>author</KEYWORD2>\r
+      <KEYWORD2>booktitle</KEYWORD2>\r
+      <KEYWORD2>chapter</KEYWORD2>\r
+      <KEYWORD2>crossref</KEYWORD2>\r
+      <KEYWORD2>edition</KEYWORD2>\r
+      <KEYWORD2>howpublished</KEYWORD2>\r
+      <KEYWORD2>institution</KEYWORD2>\r
+      <KEYWORD2>journal</KEYWORD2>\r
+      <KEYWORD2>key</KEYWORD2>\r
+      <KEYWORD2>pages</KEYWORD2>\r
+      <KEYWORD2>school</KEYWORD2>\r
+      <KEYWORD2>type</KEYWORD2>\r
+      <!-- not in Lamport but widely accepted -->\r
+      <KEYWORD1>abstract</KEYWORD1>\r
+      <KEYWORD1>annotation</KEYWORD1>\r
+      <KEYWORD1>day</KEYWORD1>\r
+      <KEYWORD1>keywords</KEYWORD1>\r
+      <KEYWORD1>lccn</KEYWORD1>\r
+      <KEYWORD1>location</KEYWORD1>\r
+      <KEYWORD1>references</KEYWORD1>\r
+      <KEYWORD1>url</KEYWORD1>\r
+      <!-- total: 32 fields -->\r
+      <LITERAL1>jan</LITERAL1>\r
+      <LITERAL1>feb</LITERAL1>\r
+      <LITERAL1>mar</LITERAL1>\r
+      <LITERAL1>apr</LITERAL1>\r
+      <LITERAL1>may</LITERAL1>\r
+      <LITERAL1>jun</LITERAL1>\r
+      <LITERAL1>jul</LITERAL1>\r
+      <LITERAL1>aug</LITERAL1>\r
+      <LITERAL1>sep</LITERAL1>\r
+      <LITERAL1>oct</LITERAL1>\r
+      <LITERAL1>nov</LITERAL1>\r
+      <LITERAL1>dec</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+\r
+<RULES SET="techreport">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+    <SEQ_REGEXP TYPE="LITERAL1" HASH_CHARS="123456789" AT_WORD_START="TRUE">[1-9][0-9]*</SEQ_REGEXP>\r
+    <KEYWORDS>\r
+      <!-- required -->\r
+      <KEYWORD4>author</KEYWORD4>\r
+      <KEYWORD4>institution</KEYWORD4>\r
+      <KEYWORD4>title</KEYWORD4>\r
+      <KEYWORD4>year</KEYWORD4>\r
+      <!-- optional -->\r
+      <KEYWORD3>address</KEYWORD3>\r
+      <KEYWORD3>month</KEYWORD3>\r
+      <KEYWORD3>note</KEYWORD3>\r
+      <KEYWORD3>number</KEYWORD3>\r
+      <KEYWORD3>type</KEYWORD3>\r
+      <!-- others -->\r
+      <KEYWORD2>annote</KEYWORD2>\r
+      <KEYWORD2>booktitle</KEYWORD2>\r
+      <KEYWORD2>chapter</KEYWORD2>\r
+      <KEYWORD2>crossref</KEYWORD2>\r
+      <KEYWORD2>edition</KEYWORD2>\r
+      <KEYWORD2>editor</KEYWORD2>\r
+      <KEYWORD2>howpublished</KEYWORD2>\r
+      <KEYWORD2>journal</KEYWORD2>\r
+      <KEYWORD2>key</KEYWORD2>\r
+      <KEYWORD2>organization</KEYWORD2>\r
+      <KEYWORD2>pages</KEYWORD2>\r
+      <KEYWORD2>publisher</KEYWORD2>\r
+      <KEYWORD2>school</KEYWORD2>\r
+      <KEYWORD2>series</KEYWORD2>\r
+      <KEYWORD2>volume</KEYWORD2>\r
+      <!-- not in Lamport but widely accepted -->\r
+      <KEYWORD1>abstract</KEYWORD1>\r
+      <KEYWORD1>annotation</KEYWORD1>\r
+      <KEYWORD1>day</KEYWORD1>\r
+      <KEYWORD1>keywords</KEYWORD1>\r
+      <KEYWORD1>lccn</KEYWORD1>\r
+      <KEYWORD1>location</KEYWORD1>\r
+      <KEYWORD1>references</KEYWORD1>\r
+      <KEYWORD1>url</KEYWORD1>\r
+      <!-- total: 32 fields -->\r
+      <LITERAL1>jan</LITERAL1>\r
+      <LITERAL1>feb</LITERAL1>\r
+      <LITERAL1>mar</LITERAL1>\r
+      <LITERAL1>apr</LITERAL1>\r
+      <LITERAL1>may</LITERAL1>\r
+      <LITERAL1>jun</LITERAL1>\r
+      <LITERAL1>jul</LITERAL1>\r
+      <LITERAL1>aug</LITERAL1>\r
+      <LITERAL1>sep</LITERAL1>\r
+      <LITERAL1>oct</LITERAL1>\r
+      <LITERAL1>nov</LITERAL1>\r
+      <LITERAL1>dec</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+\r
+<RULES SET="unpublished">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+    <SEQ_REGEXP TYPE="LITERAL1" HASH_CHARS="123456789" AT_WORD_START="TRUE">[1-9][0-9]*</SEQ_REGEXP>\r
+    <KEYWORDS>\r
+      <!-- required -->\r
+      <KEYWORD4>author</KEYWORD4>\r
+      <KEYWORD4>note</KEYWORD4>\r
+      <KEYWORD4>title</KEYWORD4>\r
+      <!-- optional -->\r
+      <KEYWORD3>month</KEYWORD3>\r
+      <KEYWORD3>year</KEYWORD3>\r
+      <!-- others -->\r
+      <KEYWORD2>address</KEYWORD2>\r
+      <KEYWORD2>annote</KEYWORD2>\r
+      <KEYWORD2>booktitle</KEYWORD2>\r
+      <KEYWORD2>chapter</KEYWORD2>\r
+      <KEYWORD2>crossref</KEYWORD2>\r
+      <KEYWORD2>edition</KEYWORD2>\r
+      <KEYWORD2>editor</KEYWORD2>\r
+      <KEYWORD2>howpublished</KEYWORD2>\r
+      <KEYWORD2>institution</KEYWORD2>\r
+      <KEYWORD2>journal</KEYWORD2>\r
+      <KEYWORD2>key</KEYWORD2>\r
+      <KEYWORD2>number</KEYWORD2>\r
+      <KEYWORD2>organization</KEYWORD2>\r
+      <KEYWORD2>pages</KEYWORD2>\r
+      <KEYWORD2>publisher</KEYWORD2>\r
+      <KEYWORD2>school</KEYWORD2>\r
+      <KEYWORD2>series</KEYWORD2>\r
+      <KEYWORD2>type</KEYWORD2>\r
+      <KEYWORD2>volume</KEYWORD2>\r
+      <!-- not in Lamport but widely accepted -->\r
+      <KEYWORD1>abstract</KEYWORD1>\r
+      <KEYWORD1>annotation</KEYWORD1>\r
+      <KEYWORD1>day</KEYWORD1>\r
+      <KEYWORD1>keywords</KEYWORD1>\r
+      <KEYWORD1>lccn</KEYWORD1>\r
+      <KEYWORD1>location</KEYWORD1>\r
+      <KEYWORD1>references</KEYWORD1>\r
+      <KEYWORD1>url</KEYWORD1>\r
+      <!-- total: 32 fields -->\r
+      <LITERAL1>jan</LITERAL1>\r
+      <LITERAL1>feb</LITERAL1>\r
+      <LITERAL1>mar</LITERAL1>\r
+      <LITERAL1>apr</LITERAL1>\r
+      <LITERAL1>may</LITERAL1>\r
+      <LITERAL1>jun</LITERAL1>\r
+      <LITERAL1>jul</LITERAL1>\r
+      <LITERAL1>aug</LITERAL1>\r
+      <LITERAL1>sep</LITERAL1>\r
+      <LITERAL1>oct</LITERAL1>\r
+      <LITERAL1>nov</LITERAL1>\r
+      <LITERAL1>dec</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+\r
+  <RULES SET="textbraced" DEFAULT="LITERAL2">\r
+    <SPAN TYPE="LITERAL3" NO_LINE_BREAK="FALSE"><BEGIN>\{</BEGIN><END>\}</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SEQ  TYPE="LITERAL3">\"</SEQ>\r
+  </RULES>\r
+\r
+  <RULES SET="textquoted" DEFAULT="LITERAL1">\r
+    <SPAN TYPE="LITERAL3" NO_LINE_BREAK="FALSE"><BEGIN>\{</BEGIN><END>\}</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SEQ  TYPE="LITERAL3">\"</SEQ>\r
+  </RULES>\r
+\r
+  <RULES SET="string" DEFAULT="LITERAL1">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="textquoted" NO_LINE_BREAK="FALSE"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <SPAN TYPE="LITERAL2" DELEGATE="textbraced" NO_LINE_BREAK="FALSE"><BEGIN>{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="LITERAL3" NO_LINE_BREAK="FALSE"><BEGIN>\{</BEGIN><END>\}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+    <SEQ TYPE="LITERAL3">\"</SEQ>\r
+  </RULES>\r
+\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/c.xml b/extra/xmode/modes/c.xml
new file mode 100644 (file)
index 0000000..a4a9469
--- /dev/null
@@ -0,0 +1,401 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- This is based on ISO C++ Standard, 2003 and ISO C Standard, 1999.\r
+     The C++ keywords have been removed from this mode file, though. -->\r
+<MODE>\r
+    <PROPS>\r
+        <PROPERTY NAME="commentStart" VALUE="/*" />\r
+        <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+        <PROPERTY NAME="lineComment" VALUE="//" />\r
+        <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+\r
+        <!-- Auto indent -->\r
+        <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+        <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+        <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />\r
+        <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />\r
+        <PROPERTY NAME="indentNextLine"\r
+            VALUE="(?!^\s*(#|//)).*(\b(if|while|for)\s*\(.*\)|\b(else|do)\b)[^{;]*$" />\r
+        <PROPERTY NAME="unindentThisLine"\r
+            VALUE="^\s*((case\b.*|[\p{Alpha}_][\p{Alnum}_]*)\s*:(?!:)).*$" />\r
+        <PROPERTY NAME="electricKeys" VALUE=":" />\r
+    </PROPS>\r
+\r
+    <RULES\r
+        ESCAPE="\" IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+        <EOL_SPAN TYPE="KEYWORD2" AT_WHITESPACE_END="TRUE" DELEGATE="CPP">#</EOL_SPAN>\r
+\r
+        <IMPORT DELEGATE="LEX"/>\r
+        <IMPORT DELEGATE="CORE"/>\r
+    </RULES>\r
+\r
+    <!-- Comments, Trigraph, Alternate-Tokens -->\r
+    <RULES SET="LEX"\r
+        ESCAPE="\" IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+\r
+        <!-- Doxygen comment, Javadoc style -->\r
+        <SEQ TYPE="COMMENT1">/**/</SEQ>\r
+        <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">\r
+            <BEGIN>/**&lt;</BEGIN>\r
+            <END>*/</END>\r
+        </SPAN>\r
+        <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">\r
+            <BEGIN>/**</BEGIN>\r
+            <END>*/</END>\r
+        </SPAN>\r
+        <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">///&lt;</EOL_SPAN>\r
+        <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">///</EOL_SPAN>\r
+\r
+        <!-- Doxygen comment, Qt style -->\r
+        <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">\r
+            <BEGIN>/*!&lt;</BEGIN>\r
+            <END>*/</END>\r
+        </SPAN>\r
+        <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">\r
+            <BEGIN>/*!</BEGIN>\r
+            <END>*/</END>\r
+        </SPAN>\r
+        <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">//!&lt;</EOL_SPAN>\r
+        <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">//!</EOL_SPAN>\r
+\r
+        <!-- C style comment -->\r
+        <SPAN TYPE="COMMENT1">\r
+            <BEGIN>/*</BEGIN>\r
+            <END>*/</END>\r
+        </SPAN>\r
+        <EOL_SPAN TYPE="COMMENT1">//</EOL_SPAN>\r
+\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>L"</BEGIN>\r
+            <END>"</END>\r
+        </SPAN>\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>"</BEGIN>\r
+            <END>"</END>\r
+        </SPAN>\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>L'</BEGIN>\r
+            <END>'</END>\r
+        </SPAN>\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>'</BEGIN>\r
+            <END>'</END>\r
+        </SPAN>\r
+\r
+        <!-- Trigraphs -->\r
+        <SEQ TYPE="LITERAL4">??(</SEQ>\r
+        <SEQ TYPE="LITERAL4">??/</SEQ>\r
+        <SEQ TYPE="LITERAL4">??)</SEQ>\r
+        <SEQ TYPE="LITERAL4">??'</SEQ>\r
+        <SEQ TYPE="LITERAL4">??&lt;</SEQ>\r
+        <SEQ TYPE="LITERAL4">??!</SEQ>\r
+        <SEQ TYPE="LITERAL4">??&gt;</SEQ>\r
+        <SEQ TYPE="LITERAL4">??-</SEQ>\r
+        <SEQ TYPE="LITERAL4">??=</SEQ>\r
+\r
+        <!-- Alternate tokens -->\r
+        <SEQ TYPE="LITERAL4">&lt;:</SEQ>\r
+        <SEQ TYPE="LITERAL4">:&gt;</SEQ>\r
+        <SEQ TYPE="LITERAL4">&lt;%</SEQ>\r
+        <SEQ TYPE="LITERAL4">%&gt;</SEQ>\r
+        <SEQ TYPE="LITERAL4">%:</SEQ>\r
+\r
+        <!-- Labels.\r
+            This is a part of core language syntax, but must be here\r
+            because it can't work after SEQ for ':'. -->\r
+        <MARK_PREVIOUS AT_WHITESPACE_END="TRUE"\r
+            MATCH_TYPE="OPERATOR"\r
+            TYPE="LABEL">:</MARK_PREVIOUS>\r
+\r
+        <!-- Function-like macro or function calls.\r
+            This can't work after SEQ for '('. -->\r
+        <MARK_PREVIOUS\r
+            TYPE="FUNCTION"\r
+            MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+\r
+        <SEQ TYPE="OPERATOR">=</SEQ>\r
+        <SEQ TYPE="OPERATOR">!</SEQ>\r
+        <SEQ TYPE="OPERATOR">+</SEQ>\r
+        <SEQ TYPE="OPERATOR">-</SEQ>\r
+        <SEQ TYPE="OPERATOR">/</SEQ>\r
+        <SEQ TYPE="OPERATOR">*</SEQ>\r
+        <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">%</SEQ>\r
+        <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+        <SEQ TYPE="OPERATOR">|</SEQ>\r
+        <SEQ TYPE="OPERATOR">^</SEQ>\r
+        <SEQ TYPE="OPERATOR">~</SEQ>\r
+        <SEQ TYPE="OPERATOR">?</SEQ>\r
+        <SEQ TYPE="OPERATOR">:</SEQ>\r
+        <SEQ TYPE="OPERATOR">.</SEQ>\r
+        <SEQ TYPE="OPERATOR">,</SEQ>\r
+        <SEQ TYPE="OPERATOR">[</SEQ>\r
+        <SEQ TYPE="OPERATOR">]</SEQ>\r
+        <SEQ TYPE="OPERATOR">)</SEQ>\r
+        <SEQ TYPE="OPERATOR">}</SEQ>\r
+        <SEQ TYPE="OPERATOR">{</SEQ>\r
+        <SEQ TYPE="OPERATOR">;</SEQ>\r
+\r
+        <KEYWORDS>\r
+            <!-- Predefined macro names from ISO C++ Standard 2003 -->\r
+            <LITERAL2>__DATE__</LITERAL2>\r
+            <LITERAL2>__FILE__</LITERAL2>\r
+            <LITERAL2>__LINE__</LITERAL2>\r
+            <LITERAL2>__STDC_HOSTED__</LITERAL2>\r
+            <LITERAL2>__STDC_ISO_10646__</LITERAL2>\r
+            <LITERAL2>__STDC_VERSION__</LITERAL2>\r
+            <LITERAL2>__STDC__</LITERAL2>\r
+            <LITERAL2>__TIME__</LITERAL2>\r
+            <LITERAL2>__cplusplus</LITERAL2>\r
+            <!-- Standard library macro names from ISO C++ Standard 2003 -->\r
+            <!-- Hilight these to indicate accidental use of them\r
+                in user source. They may be valid, but should cause\r
+                future conflicts. -->\r
+            <LITERAL2>BUFSIZ</LITERAL2>\r
+            <LITERAL2>CLOCKS_PER_SEC</LITERAL2>\r
+            <LITERAL2>EDOM</LITERAL2>\r
+            <LITERAL2>EILSEQ</LITERAL2>\r
+            <LITERAL2>EOF</LITERAL2>\r
+            <LITERAL2>ERANGE</LITERAL2>\r
+            <LITERAL2>EXIT_FAILURE</LITERAL2>\r
+            <LITERAL2>EXIT_SUCCESS</LITERAL2>\r
+            <LITERAL2>FILENAME_MAX</LITERAL2>\r
+            <LITERAL2>FOPEN_MAX</LITERAL2>\r
+            <LITERAL2>HUGE_VAL</LITERAL2>\r
+            <LITERAL2>LC_ALL</LITERAL2>\r
+            <LITERAL2>LC_COLLATE</LITERAL2>\r
+            <LITERAL2>LC_CTYPE</LITERAL2>\r
+            <LITERAL2>LC_MONETARY</LITERAL2>\r
+            <LITERAL2>LC_NUMERIC</LITERAL2>\r
+            <LITERAL2>LC_TIME</LITERAL2>\r
+            <LITERAL2>L_tmpnam</LITERAL2>\r
+            <LITERAL2>MB_CUR_MAX</LITERAL2>\r
+            <LITERAL2>NULL</LITERAL2>\r
+            <LITERAL2>RAND_MAX</LITERAL2>\r
+            <LITERAL2>SEEK_CUR</LITERAL2>\r
+            <LITERAL2>SEEK_END</LITERAL2>\r
+            <LITERAL2>SEEK_SET</LITERAL2>\r
+            <LITERAL2>SIGABRT</LITERAL2>\r
+            <LITERAL2>SIGFPE</LITERAL2>\r
+            <LITERAL2>SIGILL</LITERAL2>\r
+            <LITERAL2>SIGINT</LITERAL2>\r
+            <LITERAL2>SIGSEGV</LITERAL2>\r
+            <LITERAL2>SIGTERM</LITERAL2>\r
+            <LITERAL2>SIG_DFL</LITERAL2>\r
+            <LITERAL2>SIG_ERR</LITERAL2>\r
+            <LITERAL2>SIG_IGN</LITERAL2>\r
+            <LITERAL2>TMP_MAX</LITERAL2>\r
+            <LITERAL2>WCHAR_MAX</LITERAL2>\r
+            <LITERAL2>WCHAR_MIN</LITERAL2>\r
+            <LITERAL2>WEOF</LITERAL2>\r
+            <LITERAL2>_IOFBF</LITERAL2>\r
+            <LITERAL2>_IOLBF</LITERAL2>\r
+            <LITERAL2>_IONBF</LITERAL2>\r
+            <LITERAL2>assert</LITERAL2>\r
+            <LITERAL2>errno</LITERAL2>\r
+            <LITERAL2>offsetof</LITERAL2>\r
+            <LITERAL2>setjmp</LITERAL2>\r
+            <LITERAL2>stderr</LITERAL2>\r
+            <LITERAL2>stdin</LITERAL2>\r
+            <LITERAL2>stdout</LITERAL2>\r
+            <LITERAL2>va_arg</LITERAL2>\r
+            <LITERAL2>va_end</LITERAL2>\r
+            <LITERAL2>va_start</LITERAL2>\r
+            <!-- Standard C library values from ISO C++ Standard 2003 -->\r
+            <!-- These are not explicitly defined as macro. But they like\r
+                to be due to compatibility with C library implementation.\r
+                So, treat them like standard library macro names. -->\r
+            <LITERAL2>CHAR_BIT</LITERAL2>\r
+            <LITERAL2>CHAR_MAX</LITERAL2>\r
+            <LITERAL2>CHAR_MIN</LITERAL2>\r
+            <LITERAL2>DBL_DIG</LITERAL2>\r
+            <LITERAL2>DBL_EPSILON</LITERAL2>\r
+            <LITERAL2>DBL_MANT_DIG</LITERAL2>\r
+            <LITERAL2>DBL_MAX</LITERAL2>\r
+            <LITERAL2>DBL_MAX_10_EXP</LITERAL2>\r
+            <LITERAL2>DBL_MAX_EXP</LITERAL2>\r
+            <LITERAL2>DBL_MIN</LITERAL2>\r
+            <LITERAL2>DBL_MIN_10_EXP</LITERAL2>\r
+            <LITERAL2>DBL_MIN_EXP</LITERAL2>\r
+            <LITERAL2>FLT_DIG</LITERAL2>\r
+            <LITERAL2>FLT_EPSILON</LITERAL2>\r
+            <LITERAL2>FLT_MANT_DIG</LITERAL2>\r
+            <LITERAL2>FLT_MAX</LITERAL2>\r
+            <LITERAL2>FLT_MAX_10_EXP</LITERAL2>\r
+            <LITERAL2>FLT_MAX_EXP</LITERAL2>\r
+            <LITERAL2>FLT_MIN</LITERAL2>\r
+            <LITERAL2>FLT_MIN_10_EXP</LITERAL2>\r
+            <LITERAL2>FLT_MIN_EXP</LITERAL2>\r
+            <LITERAL2>FLT_RADIX</LITERAL2>\r
+            <LITERAL2>FLT_ROUNDS</LITERAL2>\r
+            <LITERAL2>INT_MAX</LITERAL2>\r
+            <LITERAL2>INT_MIN</LITERAL2>\r
+            <LITERAL2>LDBL_DIG</LITERAL2>\r
+            <LITERAL2>LDBL_EPSILON</LITERAL2>\r
+            <LITERAL2>LDBL_MANT_DIG</LITERAL2>\r
+            <LITERAL2>LDBL_MAX</LITERAL2>\r
+            <LITERAL2>LDBL_MAX_10_EXP</LITERAL2>\r
+            <LITERAL2>LDBL_MAX_EXP</LITERAL2>\r
+            <LITERAL2>LDBL_MIN</LITERAL2>\r
+            <LITERAL2>LDBL_MIN_10_EXP</LITERAL2>\r
+            <LITERAL2>LDBL_MIN_EXP</LITERAL2>\r
+            <LITERAL2>LONG_MAX</LITERAL2>\r
+            <LITERAL2>LONG_MIN</LITERAL2>\r
+            <LITERAL2>MB_LEN_MAX</LITERAL2>\r
+            <LITERAL2>SCHAR_MAX</LITERAL2>\r
+            <LITERAL2>SCHAR_MIN</LITERAL2>\r
+            <LITERAL2>SHRT_MAX</LITERAL2>\r
+            <LITERAL2>SHRT_MIN</LITERAL2>\r
+            <LITERAL2>UCHAR_MAX</LITERAL2>\r
+            <LITERAL2>UINT_MAX</LITERAL2>\r
+            <LITERAL2>ULONG_MAX</LITERAL2>\r
+            <LITERAL2>USRT_MAX</LITERAL2>\r
+            <!-- Alternative representations of some operators\r
+                from ISO C++ Standard 2003 -->\r
+            <!-- These are separated from CORE because they are\r
+                available in the constant expressions after\r
+                #if and #elif preprocessor directives. -->\r
+            <KEYWORD3>and</KEYWORD3>\r
+            <KEYWORD3>and_eq</KEYWORD3>\r
+            <KEYWORD3>bitand</KEYWORD3>\r
+            <KEYWORD3>bitor</KEYWORD3>\r
+            <KEYWORD3>compl</KEYWORD3>\r
+            <KEYWORD3>not</KEYWORD3>\r
+            <KEYWORD3>not_eq</KEYWORD3>\r
+            <KEYWORD3>or</KEYWORD3>\r
+            <KEYWORD3>or_eq</KEYWORD3>\r
+            <KEYWORD3>xor</KEYWORD3>\r
+            <KEYWORD3>xor_eq</KEYWORD3>\r
+        </KEYWORDS>\r
+    </RULES>\r
+\r
+    <!-- Core language -->\r
+    <RULES SET="CORE"\r
+        ESCAPE="\" IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+        <KEYWORDS>\r
+            <!-- Types -->\r
+            <KEYWORD3>bool</KEYWORD3>\r
+            <KEYWORD3>char</KEYWORD3>\r
+            <KEYWORD3>double</KEYWORD3>\r
+            <KEYWORD3>enum</KEYWORD3>\r
+            <KEYWORD3>float</KEYWORD3>\r
+            <KEYWORD3>int</KEYWORD3>\r
+            <KEYWORD3>long</KEYWORD3>\r
+            <KEYWORD3>short</KEYWORD3>\r
+            <KEYWORD3>signed</KEYWORD3>\r
+            <KEYWORD3>struct</KEYWORD3>\r
+            <KEYWORD3>union</KEYWORD3>\r
+            <KEYWORD3>unsigned</KEYWORD3>\r
+            <!-- Keywords from ISO C++ Standard 2003 -->\r
+            <KEYWORD2>asm</KEYWORD2>\r
+            <KEYWORD1>auto</KEYWORD1>\r
+            <KEYWORD1>break</KEYWORD1>\r
+            <KEYWORD1>case</KEYWORD1>\r
+            <KEYWORD1>const</KEYWORD1>\r
+            <KEYWORD1>continue</KEYWORD1>\r
+            <KEYWORD1>default</KEYWORD1>\r
+            <KEYWORD1>do</KEYWORD1>\r
+            <KEYWORD1>else</KEYWORD1>\r
+            <KEYWORD2>extern</KEYWORD2>\r
+            <LITERAL2>false</LITERAL2>\r
+            <KEYWORD1>for</KEYWORD1>\r
+            <KEYWORD1>goto</KEYWORD1>\r
+            <KEYWORD1>if</KEYWORD1>\r
+            <KEYWORD1>inline</KEYWORD1>\r
+            <KEYWORD1>register</KEYWORD1>\r
+            <KEYWORD1>return</KEYWORD1>\r
+            <KEYWORD1>sizeof</KEYWORD1>\r
+            <KEYWORD1>static</KEYWORD1>\r
+            <KEYWORD1>switch</KEYWORD1>\r
+            <LITERAL2>true</LITERAL2>\r
+            <KEYWORD3>typedef</KEYWORD3>\r
+            <KEYWORD1>void</KEYWORD1>\r
+            <KEYWORD1>volatile</KEYWORD1>\r
+            <KEYWORD1>while</KEYWORD1>\r
+            <!-- Additional keywords from ISO C Standard(C99) -->\r
+            <KEYWORD3>restrict</KEYWORD3>\r
+            <KEYWORD3>_Bool</KEYWORD3>\r
+            <KEYWORD3>_Complex</KEYWORD3>\r
+            <KEYWORD3>_Pragma</KEYWORD3>\r
+            <KEYWORD3>_Imaginary</KEYWORD3>\r
+        </KEYWORDS>\r
+    </RULES>\r
+\r
+    <!-- Preprocessor specific rules -->\r
+    <RULES SET="CPP"\r
+        ESCAPE="\" IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+\r
+        <EOL_SPAN_REGEXP HASH_CHAR="include" TYPE="MARKUP" DELEGATE="INCLUDE">include\b</EOL_SPAN_REGEXP>\r
+        <EOL_SPAN_REGEXP HASH_CHAR="define" TYPE="MARKUP" DELEGATE="DEFINE">define\b</EOL_SPAN_REGEXP>\r
+        <EOL_SPAN_REGEXP HASH_CHAR="endif" TYPE="MARKUP" DELEGATE="LEX">endif\b</EOL_SPAN_REGEXP>\r
+        <EOL_SPAN_REGEXP HASH_CHAR="elif" TYPE="MARKUP" DELEGATE="CONDITION">elif\b</EOL_SPAN_REGEXP>\r
+        <EOL_SPAN_REGEXP HASH_CHAR="if" TYPE="MARKUP" DELEGATE="CONDITION">if\b</EOL_SPAN_REGEXP>\r
+\r
+        <IMPORT DELEGATE="LEX"/>\r
+\r
+        <!-- Directives -->\r
+        <KEYWORDS>\r
+            <MARKUP>ifdef</MARKUP>\r
+            <MARKUP>ifndef</MARKUP>\r
+            <MARKUP>else</MARKUP>\r
+            <MARKUP>error</MARKUP>\r
+            <MARKUP>line</MARKUP>\r
+            <MARKUP>pragma</MARKUP>\r
+            <MARKUP>undef</MARKUP>\r
+            <MARKUP>warning</MARKUP>\r
+        </KEYWORDS>\r
+    </RULES>\r
+\r
+    <!-- After #include directive -->\r
+    <!-- "\"s are not escaped. -->\r
+    <RULES SET="INCLUDE"\r
+        IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>&lt;</BEGIN>\r
+            <END>&gt;</END>\r
+        </SPAN>\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>"</BEGIN>\r
+            <END>"</END>\r
+        </SPAN>\r
+        <IMPORT DELEGATE="LEX"/>\r
+    </RULES>\r
+\r
+    <!-- After #define directive -->\r
+    <!-- Almost same as the normal code,\r
+        except two additional operators # and ##. -->\r
+    <RULES SET="DEFINE"\r
+        ESCAPE="\" IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+        <SEQ TYPE="OPERATOR">#</SEQ>\r
+        <IMPORT DELEGATE="LEX"/>\r
+        <IMPORT DELEGATE="CORE"/>\r
+    </RULES>\r
+\r
+    <!-- After #if or #elif directive -->\r
+    <!-- All constant expressions and a special operator\r
+        'defined' is available. But the core language elements\r
+        (such as operator 'sizeof', type casting, etc...) are not. -->\r
+    <RULES SET="CONDITION"\r
+        ESCAPE="\" IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+        <IMPORT DELEGATE="LEX"/>\r
+        <KEYWORDS>\r
+            <KEYWORD2>defined</KEYWORD2>\r
+            <!-- Both true and false are specially permitted by\r
+                ISO C++ Standard 2003 16.1p4 -->\r
+            <KEYWORD2>true</KEYWORD2>\r
+            <KEYWORD2>false</KEYWORD2>\r
+        </KEYWORDS>\r
+    </RULES>\r
+\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/catalog b/extra/xmode/modes/catalog
new file mode 100644 (file)
index 0000000..f4300b4
--- /dev/null
@@ -0,0 +1,486 @@
+<?xml version="1.0"?>\r
+\r
+<!-- This is a mode catalog. Edit modes must be listed here, -->\r
+<!-- otherwise they will not be available to jEdit. -->\r
+\r
+<!DOCTYPE MODES SYSTEM "catalog.dtd">\r
+\r
+<MODES>\r
+\r
+<MODE NAME="actionscript"      FILE="actionscript.xml"\r
+                               FILE_NAME_GLOB="*.as" />\r
+\r
+<MODE NAME="ada95"             FILE="ada95.xml"\r
+                               FILE_NAME_GLOB="*.{ada,adb,ads}" />\r
+\r
+<MODE NAME="antlr"             FILE="antlr.xml"\r
+                               FILE_NAME_GLOB="*.g" />\r
+\r
+<MODE NAME="apacheconf"                FILE="apacheconf.xml"\r
+                               FILE_NAME_GLOB="*httpd.conf" />\r
+\r
+\r
+<MODE NAME="apdl"              FILE="apdl.xml"\r
+                               FILE_NAME_GLOB="*.{ans,inp,mak,mac}" />\r
+\r
+<MODE NAME="applescript"       FILE="applescript.xml"\r
+                               FILE_NAME_GLOB="*.applescript" />\r
+\r
+<MODE NAME="asp"               FILE="asp.xml"\r
+                               FILE_NAME_GLOB="*.{asp,asa}" />\r
+\r
+<MODE NAME="aspect-j"          FILE="aspect-j.xml"\r
+                               FILE_NAME_GLOB="*.aj" />\r
+\r
+<MODE NAME="assembly-m68k"     FILE="assembly-m68k.xml" />\r
+\r
+<MODE NAME="assembly-macro32"  FILE="assembly-macro32.xml"\r
+                               FILE_NAME_GLOB="*.mar" />\r
+\r
+<MODE NAME="assembly-r2000"    FILE="assembly-r2000.xml"\r
+                               FILE_NAME_GLOB="*.mips" />\r
+\r
+<MODE NAME="assembly-parrot"   FILE="assembly-parrot.xml"\r
+                               FILE_NAME_GLOB="*.pasm" />\r
+\r
+<MODE NAME="assembly-x86"      FILE="assembly-x86.xml"\r
+                               FILE_NAME_GLOB="*.asm" />\r
+\r
+<MODE NAME="awk"               FILE="awk.xml"\r
+                               FILE_NAME_GLOB="*.awk"\r
+                               FIRST_LINE_GLOB="#!*awk*" />\r
+\r
+<MODE NAME="b"                 FILE="b.xml"\r
+                               FILE_NAME_GLOB="*.{imp,ref,mch}" />\r
+\r
+<MODE NAME="batch"             FILE="batch.xml"\r
+                               FILE_NAME_GLOB="*.{bat,cmd}" />\r
+\r
+<MODE NAME="bbj"               FILE="bbj.xml"\r
+                               FILE_NAME_GLOB="*.bbj" />\r
+\r
+<!-- if anyone knows a file name glob that can be used with this mode,\r
+     please let me know -->\r
+<MODE NAME="bcel"              FILE="bcel.xml" />\r
+\r
+<!-- Now that BeanShell 2.0 supports class declarations, its syntax is\r
+     almost identical to Java. -->\r
+<MODE NAME="beanshell"         FILE="java.xml"\r
+                               FILE_NAME_GLOB="*.bsh" />\r
+\r
+<MODE NAME="bibtex"            FILE="bibtex.xml"\r
+                               FILE_NAME_GLOB="*.bib" />\r
+\r
+<!--  We let Objective C mode highlight .h files -->\r
+<MODE NAME="c"                 FILE="c.xml"\r
+                               FILE_NAME_GLOB="*.c" />\r
+\r
+<MODE NAME="chill"             FILE="chill.xml"\r
+                               FILE_NAME_GLOB="*.{chl,mpol}" />\r
+\r
+<MODE NAME="cil"               FILE="cil.xml"\r
+                               FILE_NAME_GLOB="*.il" />\r
+\r
+<MODE NAME="clips"             FILE="clips.xml"\r
+                               FILE_NAME_GLOB="*.clp" />\r
+\r
+<MODE NAME="cobol"             FILE="cobol.xml"\r
+                               FILE_NAME_GLOB="*.cbl" />\r
+\r
+<MODE NAME="coldfusion"                FILE="coldfusion.xml"\r
+                               FILE_NAME_GLOB="*.{cfm,dbm,cfc}" />\r
+\r
+<MODE NAME="c++"               FILE="cplusplus.xml"\r
+                               FILE_NAME_GLOB="*.{cc,cpp,hh,hpp,cxx}" />\r
+\r
+<MODE NAME="c#"                        FILE="csharp.xml"\r
+                               FILE_NAME_GLOB="*.cs" />\r
+\r
+<MODE NAME="css"               FILE="css.xml"\r
+                               FILE_NAME_GLOB="*.css" />\r
+\r
+<MODE NAME="csv"               FILE="csv.xml"\r
+                               FILE_NAME_GLOB="*.csv" />\r
+\r
+<MODE NAME="cvs-commit"                FILE="cvs-commit.xml"\r
+                               FILE_NAME_GLOB="cvs*.tmp"/>\r
+\r
+<MODE NAME="d"                 FILE="d.xml"\r
+                               FILE_NAME_GLOB="*.d" />\r
+\r
+<MODE NAME="django"            FILE="django.xml"/>\r
+\r
+<MODE NAME="doxygen"           FILE="doxygen.xml"\r
+                               FILE_NAME_GLOB="doxyfile*" />\r
+\r
+<MODE NAME="dsssl"             FILE="dsssl.xml"\r
+                               FILE_NAME_GLOB="*.dsl" />\r
+\r
+<MODE NAME="embperl"           FILE="embperl.xml"\r
+                               FILE_NAME_GLOB="*.epl"/>\r
+\r
+<MODE NAME="erlang"            FILE="erlang.xml"\r
+                               FILE_NAME_GLOB="*.erl"/>\r
+\r
+<MODE NAME="eiffel"            FILE="eiffel.xml"\r
+                               FILE_NAME_GLOB="*.e" />\r
+\r
+<MODE NAME="fhtml"             FILE="fhtml.xml"\r
+                               FILE_NAME_GLOB="*.{furnace,fhtml}" />\r
+\r
+<MODE NAME="factor"            FILE="factor.xml"\r
+                               FILE_NAME_GLOB="*.factor"/>\r
+\r
+<MODE NAME="forth"             FILE="forth.xml"\r
+                               FILE_NAME_GLOB="*.f" />\r
+\r
+<MODE NAME="fortran"           FILE="fortran.xml"\r
+                               FILE_NAME_GLOB="*.{for,fort,f77,f90}" />\r
+\r
+<MODE NAME="foxpro"            FILE="foxpro.xml"\r
+                               FILE_NAME_GLOB="*.prg" />\r
+\r
+<MODE NAME="freemarker"                FILE="freemarker.xml"\r
+                               FILE_NAME_GLOB="*.ftl"\r
+                               FIRST_LINE_GLOB="&lt;\#ftl*"/>\r
+\r
+<MODE NAME="gettext"           FILE="gettext.xml"\r
+                               FILE_NAME_GLOB="*.{po,pot}" />\r
+\r
+<MODE NAME="gnuplot"           FILE="gnuplot.xml"\r
+                               FILE_NAME_GLOB="*.{dem,plt}" />\r
+\r
+<MODE NAME="groovy"            FILE="groovy.xml"\r
+                               FILE_NAME_GLOB="*.{groovy,grv}"/>\r
+\r
+<MODE NAME="haskell"           FILE="haskell.xml"\r
+                               FILE_NAME_GLOB="*.hs" />\r
+\r
+<!-- Used by Andre Kaplan's Hex plugin -->\r
+<MODE NAME="hex"               FILE="hex.xml" />\r
+\r
+<MODE NAME="hlsl"              FILE="hlsl.xml"\r
+                               FILE_NAME_GLOB="*.fx" />\r
+\r
+<MODE NAME="htaccess"                  FILE="htaccess.xml"\r
+                               FILE_NAME_GLOB=".htaccess" />\r
+\r
+<MODE NAME="html"              FILE="html.xml"\r
+                               FILE_NAME_GLOB="*.{html,htm,hta}" />\r
+\r
+<MODE NAME="i4gl"              FILE="i4gl.xml"\r
+                               FILE_NAME_GLOB="*.4gl" />\r
+\r
+<MODE NAME="icon"              FILE="icon.xml"\r
+                               FILE_NAME_GLOB="*.icn" />\r
+\r
+<MODE NAME="idl"               FILE="idl.xml"\r
+                               FILE_NAME_GLOB="*.idl" />\r
+\r
+<MODE NAME="inform"            FILE="inform.xml"\r
+                               FILE_NAME_GLOB="*.inf" />\r
+\r
+<MODE NAME="inno-setup"                FILE="inno-setup.xml"\r
+                               FILE_NAME_GLOB="*.iss" />\r
+\r
+<MODE NAME="ini"               FILE="ini.xml"\r
+                               FILE_NAME_GLOB="*.{ini,reg}" />\r
+\r
+<MODE NAME="interlis"          FILE="interlis.xml"\r
+                               FILE_NAME_GLOB="*.ili" />\r
+\r
+<MODE NAME="io"                        FILE="io.xml"\r
+                               FILE_NAME_GLOB="*.io" />\r
+\r
+<MODE NAME="javacc" FILE="javacc.xml"\r
+        FILE_NAME_GLOB="*.{jj,jjt}"/>\r
+\r
+<MODE NAME="java"              FILE="java.xml"\r
+                               FILE_NAME_GLOB="*.java" />\r
+\r
+<MODE NAME="javascript"                FILE="javascript.xml"\r
+                               FILE_NAME_GLOB="*.js" />\r
+\r
+<MODE NAME="jcl"               FILE="jcl.xml"\r
+                               FILE_NAME_GLOB="*.jcl" />\r
+\r
+<MODE NAME="jhtml"             FILE="jhtml.xml"\r
+                               FILE_NAME_GLOB="*.jhtml" />\r
+\r
+<MODE NAME="jmk"               FILE="jmk.xml"\r
+                               FILE_NAME_GLOB="*.jmk" />\r
+\r
+<MODE NAME="jsp"               FILE="jsp.xml"\r
+                               FILE_NAME_GLOB="*.{jsp,jsf,jspf}" />\r
+\r
+<!-- Note that a generic 'tex.xml' is included as well, for minimal\r
+     plain TeX/AMSTeX highlighting. -->\r
+\r
+<MODE NAME="latex"             FILE="latex.xml"\r
+                               FILE_NAME_GLOB="*.{tex,sty,ltx}" />\r
+\r
+<MODE NAME="lilypond"          FILE="lilypond.xml"\r
+                               FILE_NAME_GLOB="*.ly" />\r
+\r
+<MODE NAME="lisp"              FILE="lisp.xml"\r
+                               FILE_NAME_GLOB="*.{lisp,lsp,el}" />\r
+\r
+<MODE NAME="literate-haskell"  FILE="literate-haskell.xml"\r
+                               FILE_NAME_GLOB="*.lhs" />\r
+\r
+<MODE NAME="lotos"             FILE="lotos.xml"\r
+                               FILE_NAME_GLOB="*.{lot,lotos}"/>\r
+\r
+<MODE NAME="lua"               FILE="lua.xml"\r
+                               FILE_NAME_GLOB="*.lua" />\r
+\r
+<MODE NAME="mail"              FILE="mail.xml" />\r
+\r
+<MODE NAME="makefile"          FILE="makefile.xml"\r
+                               FILE_NAME_GLOB="*makefile" />\r
+\r
+<MODE NAME="maple"             FILE="maple.xml"\r
+                               FILE_NAME_GLOB="*.{mpl,mws}" />\r
+\r
+<MODE NAME="ml"                        FILE="ml.xml"\r
+                               FILE_NAME_GLOB="*.{sml,ml}" />\r
+\r
+<MODE NAME="modula3"           FILE="modula3.xml"\r
+                               FILE_NAME_GLOB="*.[im]3" />\r
+\r
+<MODE NAME="moin"              FILE="moin.xml"\r
+                               FILE_NAME_GLOB="*.moin" />\r
+\r
+<MODE NAME="mqsc"              FILE="mqsc.xml"\r
+                               FILE_NAME_GLOB="*.mqsc" />\r
+\r
+<MODE NAME="myghty"                    FILE="myghty.xml"\r
+                               FILE_NAME_GLOB="{autohandler,dhandler,*.myt}"/>\r
+\r
+<MODE NAME="mysql"             FILE="mysql.xml" />\r
+\r
+<MODE NAME="netrexx"           FILE="netrexx.xml"\r
+                               FILE_NAME_GLOB="*.nrx" />\r
+\r
+<MODE NAME="nqc"               FILE="nqc.xml"\r
+                               FILE_NAME_GLOB="*.nqc" />\r
+\r
+<MODE NAME="nsis2"             FILE="nsis2.xml"\r
+                               FILE_NAME_GLOB="*.{nsi,nsh}" />\r
+\r
+<MODE NAME="objective-c"       FILE="objective-c.xml"\r
+                               FILE_NAME_GLOB="*.[mh]" />\r
+\r
+<MODE NAME="objectrexx"                FILE="objectrexx.xml"\r
+                               FILE_NAME_GLOB="*.{rex,orx}" />\r
+\r
+<MODE NAME="occam"             FILE="occam.xml"\r
+                               FILE_NAME_GLOB="*.icc" />\r
+\r
+<MODE NAME="omnimark"          FILE="omnimark.xml"\r
+                               FILE_NAME_GLOB="*.x{om,in}" />\r
+\r
+<MODE NAME="pascal"            FILE="pascal.xml"\r
+                               FILE_NAME_GLOB="*.{pas,dpr,dpk}" />\r
+\r
+<MODE NAME="patch"             FILE="patch.xml"\r
+                               FILE_NAME_GLOB="*.{diff,patch}" />\r
+\r
+<MODE NAME="perl"              FILE="perl.xml"\r
+                               FILE_NAME_GLOB="*.p[lm]"\r
+                               FIRST_LINE_GLOB="#!/*perl*" />\r
+\r
+<MODE NAME="php"               FILE="php.xml"\r
+                               FILE_NAME_GLOB="*.{php3,php4,php,phtml,inc}"\r
+                               FIRST_LINE_GLOB="{&lt;?php*,#!/*php*}" />\r
+\r
+<MODE NAME="pike"              FILE="pike.xml"\r
+                               FILE_NAME_GLOB="*.{pike,pmod}" />\r
+\r
+<MODE NAME="pl-sql"            FILE="pl-sql.xml"\r
+                               FILE_NAME_GLOB="*.pls" />\r
+\r
+<MODE NAME="pl1"               FILE="pl1.xml"\r
+                               FILE_NAME_GLOB="*.pl[i1]" />\r
+\r
+<MODE NAME="pop11"             FILE="pop11.xml"\r
+                               FILE_NAME_GLOB="*.{p,pop11,p11}" />\r
+\r
+<MODE NAME="postscript"                FILE="postscript.xml"\r
+                               FILE_NAME_GLOB="*.{ps,eps}" />\r
+\r
+<MODE NAME="powerdynamo"       FILE="powerdynamo.xml"\r
+                               FILE_NAME_GLOB="*.{ssc,stm}" />\r
+\r
+<MODE NAME="povray"            FILE="povray.xml"\r
+                               FILE_NAME_GLOB="*.{pov,povray}" />\r
+\r
+<MODE NAME="prolog"             FILE="prolog.xml"\r
+                                FILE_NAME_GLOB="*.pro" />\r
+\r
+<MODE NAME="progress"           FILE="progress.xml"\r
+                                FILE_NAME_GLOB="*.[piw]" />\r
+\r
+<MODE NAME="properties"                FILE="props.xml"\r
+                               FILE_NAME_GLOB="*{properties,props}" />\r
+\r
+<MODE NAME="psp"               FILE="psp.xml"\r
+                               FILE_NAME_GLOB="*.psp" />\r
+\r
+<MODE NAME="ptl"               FILE="ptl.xml"\r
+                               FILE_NAME_GLOB="*.ptl"/>\r
+\r
+<MODE NAME="pvwave"            FILE="pvwave.xml"\r
+                               FILE_NAME_GLOB="*.jou" />\r
+\r
+<MODE NAME="pyrex"             FILE="pyrex.xml"\r
+                               FILE_NAME_GLOB="*.{pyx}" />\r
+\r
+<MODE NAME="python"            FILE="python.xml"\r
+                               FILE_NAME_GLOB="*.{py,pyw,sc}"\r
+                               FIRST_LINE_GLOB="#!*/*python*" />\r
+\r
+<MODE NAME="rebol"             FILE="rebol.xml"\r
+                               FILE_NAME_GLOB="*.r" />\r
+\r
+<MODE NAME="redcode"           FILE="redcode.xml"\r
+                               FILE_NAME_GLOB="*.{red,rc}" />\r
+\r
+<MODE NAME="relax-ng-compact"  FILE="relax-ng-compact.xml"\r
+                               FILE_NAME_GLOB="*.rnc" />\r
+\r
+<MODE NAME="renderman-rib"     FILE="rib.xml"\r
+                               FILE_NAME_GLOB="*.rib" />\r
+\r
+<MODE NAME="rd"                        FILE="rd.xml"\r
+                               FILE_NAME_GLOB="*.rd" />\r
+\r
+<MODE NAME="rest"              FILE="rest.xml"\r
+                               FILE_NAME_GLOB="*.{rst,rest}"\r
+                               FIRST_LINE_GLOB="{===,~~~}*"/>\r
+\r
+<MODE NAME="rhtml"             FILE="rhtml.xml"\r
+                               FILE_NAME_GLOB="*.rhtml" />\r
+\r
+<MODE NAME="rpm-spec"          FILE="rpmspec.xml"\r
+                               FILE_NAME_GLOB="*.spec" />\r
+\r
+<MODE NAME="rtf"               FILE="rtf.xml"\r
+                               FILE_NAME_GLOB="*.rtf" />\r
+\r
+<MODE NAME="ruby"              FILE="ruby.xml"\r
+                               FILE_NAME_GLOB="*.{rb,rbw}"\r
+                   FIRST_LINE_GLOB="#!*/*ruby*" />\r
+\r
+<MODE NAME="rview"             FILE="rview.xml"\r
+                               FILE_NAME_GLOB="*.rvw" />\r
+\r
+<MODE NAME="s+"                        FILE="splus.xml"\r
+                               FILE_NAME_GLOB="*.ssc" />\r
+\r
+<MODE NAME="s#"                        FILE="ssharp.xml"\r
+                               FILE_NAME_GLOB="*.{ss,ssc,ssi,ssw,sts,aml}"  />\r
+\r
+<MODE NAME="sas"               FILE="sas.xml"\r
+                               FILE_NAME_GLOB="*.sas" />\r
+\r
+<MODE NAME="scheme"            FILE="scheme.xml"\r
+                               FILE_NAME_GLOB="*.scm" />\r
+\r
+<MODE NAME="sgml"              FILE="sgml.xml"\r
+                               FILE_NAME_GLOB="*.{sgml,sgm,dtd}" />\r
+\r
+<MODE NAME="rcp" FILE="rcp.xml" FILE_NAME_GLOB="*.rcp" />\r
+\r
+<MODE NAME="shellscript"       FILE="shellscript.xml"\r
+                               FILE_NAME_GLOB="*.{csh,sh,bash}"\r
+                               FIRST_LINE_GLOB="#!/*sh*" />\r
+\r
+<MODE NAME="shtml"             FILE="shtml.xml"\r
+                               FILE_NAME_GLOB="*.{shtml,shtm,ssi}" />\r
+\r
+<MODE NAME="slate"             FILE="slate.xml"\r
+                               FILE_NAME_GLOB="*.slate" />\r
+\r
+<MODE NAME="smalltalk"         FILE="smalltalk.xml"\r
+                               FILE_NAME_GLOB="*.{st,sources,changes}" />\r
+\r
+<MODE NAME="sdl/pr"            FILE="sdl_pr.xml"\r
+                               FILE_NAME_GLOB="*.pr"/>\r
+\r
+<MODE NAME="sql-loader"        FILE="sql-loader.xml"\r
+                               FILE_NAME_GLOB="*.ctl" />\r
+\r
+<MODE NAME="smi-mib"           FILE="smi-mib.xml"\r
+                               FILE_NAME_GLOB="*{.mib,-MIB.txt}" />\r
+\r
+<MODE NAME="sqr"                FILE="sqr.xml"\r
+                                FILE_NAME_GLOB="*.{sqr,sqc}" />\r
+\r
+<MODE NAME="squidconf"         FILE="squidconf.xml"\r
+                               FILE_NAME_GLOB="squid.conf" />\r
+\r
+<MODE NAME="svn-commit"         FILE="svn-commit.xml"\r
+                               FILE_NAME_GLOB="svn-commit*.tmp" />\r
+\r
+<MODE NAME="swig"              FILE="swig.xml"\r
+                               FILE_NAME_GLOB="*.{i,swg}" />\r
+\r
+<MODE NAME="tcl"               FILE="tcl.xml"\r
+                               FILE_NAME_GLOB="*.{tcl,tsh}" />\r
+\r
+<MODE NAME="texinfo"           FILE="texinfo.xml"\r
+                               FILE_NAME_GLOB="*.texi" />\r
+\r
+<MODE NAME="tex"               FILE="tex.xml" />\r
+\r
+<MODE NAME="text"              FILE="text.xml"\r
+                               FILE_NAME_GLOB="*.txt" />\r
+\r
+<MODE NAME="tpl"               FILE="tpl.xml"\r
+                               FILE_NAME_GLOB="*.tpl" />\r
+\r
+<MODE NAME="transact-sql"      FILE="tsql.xml"\r
+                               FILE_NAME_GLOB="*.sql" />\r
+\r
+<MODE NAME="template-toolkit"  FILE="tthtml.xml"\r
+                               FILE_NAME_GLOB="*.tt{html,css,js}" />\r
+\r
+<MODE NAME="twiki"             FILE="twiki.xml"\r
+                               FILE_NAME_GLOB="*.twiki"/>\r
+\r
+<MODE NAME="typoscript"         FILE="typoscript.xml"\r
+                                FILE_NAME_GLOB="*.ts"/>\r
+\r
+<MODE NAME="uscript"           FILE="uscript.xml"\r
+                               FILE_NAME_GLOB="*.uc" />\r
+\r
+<MODE NAME="vbscript"          FILE="vbscript.xml"\r
+                               FILE_NAME_GLOB="*.{vbs,bas,cls}" />\r
+\r
+<MODE NAME="velocity"          FILE="velocity.xml"\r
+                               FILE_NAME_GLOB="*.vm" />\r
+\r
+<MODE NAME="verilog"           FILE="verilog.xml"\r
+                               FILE_NAME_GLOB="*.{ver,v}" />\r
+\r
+<MODE NAME="vhdl"              FILE="vhdl.xml"\r
+                               FILE_NAME_GLOB="*.vh*" />\r
+\r
+<!-- Great. AElfred doesn't support entities in attribute values,\r
+     but all other XML parsers complain if < appears. -->\r
+<MODE NAME="xml"               FILE="xml.xml"\r
+                               FILE_NAME_GLOB="*.{xml,xhtml,xsd}"\r
+                               FIRST_LINE_GLOB="&lt;\?xml*" />\r
+\r
+<MODE NAME="xq"                        FILE="xq.xml"\r
+                               FILE_NAME_GLOB="*.x{q,qm,ql}" />\r
+\r
+<MODE NAME="xsl"               FILE="xsl.xml"\r
+                               FILE_NAME_GLOB="*.xsl" />\r
+\r
+<MODE NAME="zpt"               FILE="zpt.xml"\r
+                               FILE_NAME_GLOB="*.{pt,zpt}"/>\r
+\r
+<MODE NAME="rfc" FILE="rfc.xml" FILE_NAME_GLOB="rfc*.txt" />\r
+</MODES>\r
diff --git a/extra/xmode/modes/chill.xml b/extra/xmode/modes/chill.xml
new file mode 100644 (file)
index 0000000..2ef3b8f
--- /dev/null
@@ -0,0 +1,134 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- CHILL mode by Rudolf Widmann (Rudi.Widmann@web.de)\r
+     CHILL = "CCITT High Level Programming Language" used for telecommunication programming\r
+     Pascal was used as reference.\r
+     Keywords   = KEYWORD1\r
+     Directives = KEYWORD2.\r
+     Everything else as is-->\r
+<MODE>\r
+    <PROPS>\r
+        <PROPERTY NAME="commentStart" VALUE="/*" />\r
+        <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+    </PROPS>\r
+\r
+    <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+\r
+        <!-- Compiler directives. -->\r
+        <SPAN TYPE="COMMENT2">\r
+            <BEGIN>&lt;&gt;</BEGIN>\r
+            <END>&lt;&gt;</END>\r
+        </SPAN>\r
+        <!-- Normal comments. -->\r
+        <SPAN TYPE="COMMENT1">\r
+            <BEGIN>/*</BEGIN>\r
+            <END>*/</END>\r
+        </SPAN>\r
+\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>'</BEGIN>\r
+            <END>'</END>\r
+        </SPAN>\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>H'</BEGIN>\r
+            <END>;</END>\r
+        </SPAN>\r
+\r
+        <SEQ TYPE="OPERATOR">)</SEQ>\r
+        <SEQ TYPE="OPERATOR">(</SEQ>\r
+        <SEQ TYPE="OPERATOR">]</SEQ>\r
+        <SEQ TYPE="OPERATOR">[</SEQ>\r
+        <SEQ TYPE="OPERATOR">+</SEQ>\r
+        <SEQ TYPE="OPERATOR">-</SEQ>\r
+        <SEQ TYPE="OPERATOR">/</SEQ>\r
+        <SEQ TYPE="OPERATOR">*</SEQ>\r
+        <SEQ TYPE="OPERATOR">.</SEQ>\r
+        <SEQ TYPE="OPERATOR">,</SEQ>\r
+        <SEQ TYPE="OPERATOR">;</SEQ>\r
+        <SEQ TYPE="OPERATOR">^</SEQ>\r
+        <SEQ TYPE="OPERATOR">@</SEQ>\r
+        <SEQ TYPE="OPERATOR">:=</SEQ>\r
+        <SEQ TYPE="OPERATOR">:</SEQ>\r
+        <SEQ TYPE="OPERATOR">=</SEQ>\r
+        <SEQ TYPE="OPERATOR">/=</SEQ>\r
+        <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+\r
+        <KEYWORDS>\r
+            <!-- Reserved words -->\r
+            <KEYWORD1>AND</KEYWORD1>\r
+            <KEYWORD1>BEGIN</KEYWORD1>\r
+            <KEYWORD1>CASE</KEYWORD1>\r
+            <KEYWORD1>DIV</KEYWORD1>\r
+            <KEYWORD1>DO</KEYWORD1>\r
+            <KEYWORD1>ELSE</KEYWORD1>\r
+            <KEYWORD1>ELSIF</KEYWORD1>\r
+            <KEYWORD1>END</KEYWORD1>\r
+            <KEYWORD1>ESAC</KEYWORD1>\r
+            <KEYWORD1>EXIT</KEYWORD1>\r
+            <KEYWORD1>FI</KEYWORD1>\r
+            <KEYWORD1>FOR</KEYWORD1>\r
+            <KEYWORD1>GOTO</KEYWORD1>\r
+            <KEYWORD1>IF</KEYWORD1>\r
+            <KEYWORD1>IN</KEYWORD1>\r
+            <KEYWORD1>MOD</KEYWORD1>\r
+            <KEYWORD1>NOT</KEYWORD1>\r
+            <KEYWORD1>OD</KEYWORD1>\r
+            <KEYWORD1>OF</KEYWORD1>\r
+            <KEYWORD1>ON</KEYWORD1>\r
+            <KEYWORD1>OR</KEYWORD1>\r
+            <KEYWORD1>OUT</KEYWORD1>\r
+            <KEYWORD1>RESULT</KEYWORD1>\r
+            <KEYWORD1>RETURN</KEYWORD1>\r
+            <KEYWORD1>THEN</KEYWORD1>\r
+            <KEYWORD1>THEN</KEYWORD1>\r
+            <KEYWORD1>TO</KEYWORD1>\r
+            <KEYWORD1>UNTIL</KEYWORD1>\r
+            <KEYWORD1>USES</KEYWORD1>\r
+            <KEYWORD1>WHILE</KEYWORD1>\r
+            <KEYWORD1>WITH</KEYWORD1>\r
+            <KEYWORD1>XOR</KEYWORD1>\r
+            <!-- DEFINITIONS. -->\r
+            <KEYWORD2>ARRAY</KEYWORD2>\r
+            <KEYWORD2>DCL</KEYWORD2>\r
+            <KEYWORD2>GRANT</KEYWORD2>\r
+            <KEYWORD2>LABEL</KEYWORD2>\r
+            <KEYWORD2>MODULE</KEYWORD2>\r
+            <KEYWORD2>NEWMODE</KEYWORD2>\r
+            <KEYWORD2>PROC</KEYWORD2>\r
+            <KEYWORD2>POWERSET</KEYWORD2>\r
+            <KEYWORD2>SEIZE</KEYWORD2>\r
+            <KEYWORD2>SET</KEYWORD2>\r
+            <KEYWORD2>STRUCT</KEYWORD2>\r
+            <KEYWORD2>SYN</KEYWORD2>\r
+            <KEYWORD2>SYNMODE</KEYWORD2>\r
+            <KEYWORD2>TYPE</KEYWORD2>\r
+            <KEYWORD2>PACK</KEYWORD2>\r
+            <!-- ORDINAL TYPES. -->\r
+            <KEYWORD3>BIN</KEYWORD3>\r
+            <KEYWORD3>CHAR</KEYWORD3>\r
+            <KEYWORD3>INT</KEYWORD3>\r
+            <KEYWORD3>RANGE</KEYWORD3>\r
+            <!-- BOOLEAN TYPES. -->\r
+            <KEYWORD3>BOOL</KEYWORD3>\r
+            <!-- UNTYPED POINTER. -->\r
+            <KEYWORD3>PTR</KEYWORD3>\r
+            <KEYWORD3>REF</KEYWORD3>\r
+            \r
+            <LABEL>MODULE_DESCRIPTION_HEADER</LABEL>\r
+            <LABEL>PATCH_INFOS</LABEL>\r
+            <LABEL>LIO_INFOS</LABEL>\r
+            <LABEL>SWSG_INFOS</LABEL>\r
+            <LABEL>MSG_XREF</LABEL>            \r
+            <LABEL>EJECT</LABEL>            \r
+\r
+            <LITERAL2>FALSE</LITERAL2>\r
+            <LITERAL2>NULL</LITERAL2>\r
+            <LITERAL2>TRUE</LITERAL2>\r
+        </KEYWORDS>\r
+    </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/cil.xml b/extra/xmode/modes/cil.xml
new file mode 100644 (file)
index 0000000..93b3816
--- /dev/null
@@ -0,0 +1,385 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+       .NET CIL by Cullen Linn (linnc@cs.arizona.edu)\r
+    (pg102 or 198 of PartitionII)\r
+-->\r
+\r
+<MODE>\r
+\r
+       <PROPS>\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+\\" />\r
+       </PROPS>\r
+\r
+       <RULES HIGHLIGHT_DIGITS="TRUE" IGNORE_CASE="TRUE">\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+        <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+\r
+        <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR" AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+\r
+               <KEYWORDS>\r
+        <KEYWORD1>public</KEYWORD1>\r
+            <KEYWORD1>private</KEYWORD1>\r
+            <KEYWORD1>family</KEYWORD1>\r
+            <KEYWORD1>assembly</KEYWORD1>\r
+            <KEYWORD1>famandassem</KEYWORD1>\r
+            <KEYWORD1>famorassem</KEYWORD1>\r
+            <KEYWORD1>autochar</KEYWORD1>\r
+            <KEYWORD1>abstract</KEYWORD1>\r
+            <KEYWORD1>ansi</KEYWORD1>\r
+            <KEYWORD1>beforefieldinit</KEYWORD1>\r
+            <KEYWORD1>explicit</KEYWORD1>\r
+            <KEYWORD1>interface</KEYWORD1>\r
+            <KEYWORD1>nested</KEYWORD1>\r
+            <KEYWORD1>rtspecialname</KEYWORD1>\r
+            <KEYWORD1>sealed</KEYWORD1>\r
+            <KEYWORD1>sequential</KEYWORD1>\r
+            <KEYWORD1>serializable</KEYWORD1>\r
+            <KEYWORD1>specialname</KEYWORD1>\r
+            <KEYWORD1>unicode</KEYWORD1>\r
+            <KEYWORD1>final</KEYWORD1>\r
+            <KEYWORD1>hidebysig</KEYWORD1>\r
+            <KEYWORD1>newslot</KEYWORD1>\r
+            <KEYWORD1>pinvokeimpl</KEYWORD1>\r
+            <KEYWORD1>static</KEYWORD1>\r
+            <KEYWORD1>virtual</KEYWORD1>\r
+            <KEYWORD1>cil</KEYWORD1>\r
+            <KEYWORD1>forwardref</KEYWORD1>\r
+            <KEYWORD1>internalcall</KEYWORD1>\r
+            <KEYWORD1>managed</KEYWORD1>\r
+            <KEYWORD1>native</KEYWORD1>\r
+            <KEYWORD1>noinlining</KEYWORD1>\r
+            <KEYWORD1>runtime</KEYWORD1>\r
+            <KEYWORD1>synchronized</KEYWORD1>\r
+            <KEYWORD1>unmanaged</KEYWORD1>\r
+            <KEYWORD1>typedref</KEYWORD1>\r
+            <KEYWORD1>cdecl</KEYWORD1>\r
+            <KEYWORD1>fastcall</KEYWORD1>\r
+            <KEYWORD1>stdcall</KEYWORD1>\r
+            <KEYWORD1>thiscall</KEYWORD1>\r
+            <KEYWORD1>platformapi</KEYWORD1>\r
+            <KEYWORD1>initonly</KEYWORD1>\r
+            <KEYWORD1>literal</KEYWORD1>\r
+            <KEYWORD1>marshal</KEYWORD1>\r
+            <KEYWORD1>notserialized</KEYWORD1>\r
+            <KEYWORD1>addon</KEYWORD1>\r
+            <KEYWORD1>removeon</KEYWORD1>\r
+            <KEYWORD1>catch</KEYWORD1>\r
+            <KEYWORD1>fault</KEYWORD1>\r
+            <KEYWORD1>filter</KEYWORD1>\r
+            <KEYWORD1>handler</KEYWORD1>\r
+\r
+            <!--Assembly Directives (Meta-Data)-->\r
+            <KEYWORD2>.assembly</KEYWORD2>\r
+            <KEYWORD2>.assembly extern</KEYWORD2>\r
+            <KEYWORD2>.class</KEYWORD2>\r
+            <KEYWORD2>.class extern</KEYWORD2>\r
+            <KEYWORD2>.field</KEYWORD2>\r
+            <KEYWORD2>.method</KEYWORD2>\r
+            <KEYWORD2>.property</KEYWORD2>\r
+            <KEYWORD2>.get</KEYWORD2>\r
+            <KEYWORD2>.set</KEYWORD2>\r
+            <KEYWORD2>.other</KEYWORD2>\r
+            <KEYWORD2>.ctor</KEYWORD2>\r
+            <KEYWORD2>.corflags</KEYWORD2>\r
+            <KEYWORD2>.custom</KEYWORD2>\r
+            <KEYWORD2>.data</KEYWORD2>\r
+            <KEYWORD2>.file</KEYWORD2>\r
+            <KEYWORD2>.mresource</KEYWORD2>\r
+            <KEYWORD2>.module</KEYWORD2>\r
+            <KEYWORD2>.module extern</KEYWORD2>\r
+            <KEYWORD2>.subsystem</KEYWORD2>\r
+            <KEYWORD2>.vtfixup</KEYWORD2>\r
+            <KEYWORD2>.publickeytoken</KEYWORD2>\r
+            <KEYWORD2>.ver</KEYWORD2>\r
+            <KEYWORD2>.hash algorithm</KEYWORD2>\r
+            <KEYWORD2>.culture</KEYWORD2>\r
+            <KEYWORD2>.namespace</KEYWORD2>\r
+            <KEYWORD2>.event</KEYWORD2>\r
+            <KEYWORD2>.fire</KEYWORD2>\r
+            <KEYWORD2>.override</KEYWORD2>\r
+            <KEYWORD2>.try</KEYWORD2>\r
+            <KEYWORD2>.catch</KEYWORD2>\r
+            <KEYWORD2>.finally</KEYWORD2>\r
+            <KEYWORD2>.locals</KEYWORD2>\r
+            <KEYWORD2>.maxstack</KEYWORD2>\r
+            <KEYWORD2>.entrypoint</KEYWORD2>\r
+            <KEYWORD2>.pack</KEYWORD2>\r
+            <KEYWORD2>.size</KEYWORD2>\r
+\r
+            <!--Implementation Specific Metadata-->\r
+            <KEYWORD2>.file alignment</KEYWORD2>\r
+            <KEYWORD2>.imagebase</KEYWORD2>\r
+            <KEYWORD2>.language</KEYWORD2>\r
+            <KEYWORD2>.namespace</KEYWORD2>\r
+\r
+\r
+            <KEYWORD3>string</KEYWORD3>\r
+            <KEYWORD3>object</KEYWORD3>\r
+            <KEYWORD3>bool</KEYWORD3>\r
+            <KEYWORD3>true</KEYWORD3>\r
+            <KEYWORD3>false</KEYWORD3>\r
+            <KEYWORD3>bytearray</KEYWORD3>\r
+            <KEYWORD3>char</KEYWORD3>\r
+            <KEYWORD3>float32</KEYWORD3>\r
+            <KEYWORD3>float64</KEYWORD3>\r
+            <KEYWORD3>int8</KEYWORD3>\r
+            <KEYWORD3>int16</KEYWORD3>\r
+            <KEYWORD3>int32</KEYWORD3>\r
+            <KEYWORD3>int64</KEYWORD3>\r
+            <KEYWORD3>nullref</KEYWORD3>\r
+\r
+\r
+            <OPERATOR>&amp;</OPERATOR>\r
+            <OPERATOR>*</OPERATOR>\r
+            <OPERATOR>}</OPERATOR>\r
+            <OPERATOR>{</OPERATOR>\r
+\r
+            <!--arithmetic opcodes-->\r
+            <FUNCTION>add</FUNCTION>\r
+            <FUNCTION>add.ovf</FUNCTION>\r
+            <FUNCTION>add.ovf.un</FUNCTION>\r
+            <FUNCTION>div</FUNCTION>\r
+            <FUNCTION>div.un</FUNCTION>\r
+            <FUNCTION>mul</FUNCTION>\r
+            <FUNCTION>mul.ovf</FUNCTION>\r
+            <FUNCTION>mul.ovf.un</FUNCTION>\r
+            <FUNCTION>sub</FUNCTION>\r
+            <FUNCTION>sub.ovf</FUNCTION>\r
+            <FUNCTION>sub.ovf.un</FUNCTION>\r
+\r
+            <!--logical-->\r
+            <FUNCTION>and</FUNCTION>\r
+            <FUNCTION>not</FUNCTION>\r
+            <FUNCTION>or</FUNCTION>\r
+            <FUNCTION>xor</FUNCTION>\r
+\r
+            <!--Branches-->\r
+            <FUNCTION>beq</FUNCTION>\r
+            <FUNCTION>beq.s</FUNCTION>\r
+            <FUNCTION>bge</FUNCTION>\r
+            <FUNCTION>bge.s</FUNCTION>\r
+            <FUNCTION>bge.un</FUNCTION>\r
+            <FUNCTION>bge.un.s</FUNCTION>\r
+            <FUNCTION>bgt</FUNCTION>\r
+            <FUNCTION>bgt.s</FUNCTION>\r
+            <FUNCTION>bgt.un</FUNCTION>\r
+            <FUNCTION>bgt.un.s</FUNCTION>\r
+            <FUNCTION>ble</FUNCTION>\r
+            <FUNCTION>ble.s</FUNCTION>\r
+            <FUNCTION>ble.un</FUNCTION>\r
+            <FUNCTION>ble.un.s</FUNCTION>\r
+            <FUNCTION>blt</FUNCTION>\r
+            <FUNCTION>blt.s</FUNCTION>\r
+            <FUNCTION>blt.un</FUNCTION>\r
+            <FUNCTION>blt.un.s</FUNCTION>\r
+            <FUNCTION>bne.un</FUNCTION>\r
+            <FUNCTION>bne.un.s</FUNCTION>\r
+            <FUNCTION>br</FUNCTION>\r
+            <FUNCTION>brfalse</FUNCTION>\r
+            <FUNCTION>brfalse.s</FUNCTION>\r
+            <FUNCTION>brtrue</FUNCTION>\r
+            <FUNCTION>brtrue.s</FUNCTION>\r
+            <FUNCTION>br.s</FUNCTION>\r
+\r
+            <!--Conversions-->\r
+            <FUNCTION>conv.i</FUNCTION>\r
+            <FUNCTION>conv.i1</FUNCTION>\r
+            <FUNCTION>conv.i2</FUNCTION>\r
+            <FUNCTION>conv.i4</FUNCTION>\r
+            <FUNCTION>conv.i8</FUNCTION>\r
+            <FUNCTION>conv.ovf.i</FUNCTION>\r
+            <FUNCTION>conv.ovf.i1</FUNCTION>\r
+            <FUNCTION>conv.ovf.i1.un</FUNCTION>\r
+            <FUNCTION>conv.ovf.i2</FUNCTION>\r
+            <FUNCTION>conv.ovf.i2.un</FUNCTION>\r
+            <FUNCTION>conv.ovf.i4</FUNCTION>\r
+            <FUNCTION>conv.ovf.i4.un</FUNCTION>\r
+            <FUNCTION>conv.ovf.i8</FUNCTION>\r
+            <FUNCTION>conv.ovf.i8.un</FUNCTION>\r
+            <FUNCTION>conv.ovf.i.un</FUNCTION>\r
+            <FUNCTION>conv.ovf.u</FUNCTION>\r
+            <FUNCTION>conv.ovf.u1</FUNCTION>\r
+            <FUNCTION>conv.ovf.u1.un</FUNCTION>\r
+            <FUNCTION>conv.ovf.u2</FUNCTION>\r
+            <FUNCTION>conv.ovf.u2.un</FUNCTION>\r
+            <FUNCTION>conv.ovf.u4</FUNCTION>\r
+            <FUNCTION>conv.ovf.u4.un</FUNCTION>\r
+            <FUNCTION>conv.ovf.u8</FUNCTION>\r
+            <FUNCTION>conv.ovf.u8.un</FUNCTION>\r
+            <FUNCTION>conv.ovf.u.un</FUNCTION>\r
+            <FUNCTION>conv.r4</FUNCTION>\r
+            <FUNCTION>conv.r8</FUNCTION>\r
+            <FUNCTION>conv.r.un</FUNCTION>\r
+            <FUNCTION>conv.u</FUNCTION>\r
+            <FUNCTION>conv.u1</FUNCTION>\r
+            <FUNCTION>conv.u2</FUNCTION>\r
+            <FUNCTION>conv.u4</FUNCTION>\r
+            <FUNCTION>conv.u8</FUNCTION>\r
+\r
+            <!--Loads and Stores-->\r
+            <FUNCTION>ldarg</FUNCTION>\r
+            <FUNCTION>ldarga</FUNCTION>\r
+            <FUNCTION>ldarga.s</FUNCTION>\r
+            <FUNCTION>ldarg.0</FUNCTION>\r
+            <FUNCTION>ldarg.1</FUNCTION>\r
+            <FUNCTION>ldarg.2</FUNCTION>\r
+            <FUNCTION>ldarg.3</FUNCTION>\r
+            <FUNCTION>ldarg.s</FUNCTION>\r
+            <FUNCTION>ldc.i4</FUNCTION>\r
+            <FUNCTION>ldc.i4.0</FUNCTION>\r
+            <FUNCTION>ldc.i4.1</FUNCTION>\r
+            <FUNCTION>ldc.i4.2</FUNCTION>\r
+            <FUNCTION>ldc.i4.3</FUNCTION>\r
+            <FUNCTION>ldc.i4.4</FUNCTION>\r
+            <FUNCTION>ldc.i4.5</FUNCTION>\r
+            <FUNCTION>ldc.i4.6</FUNCTION>\r
+            <FUNCTION>ldc.i4.7</FUNCTION>\r
+            <FUNCTION>ldc.i4.8</FUNCTION>\r
+            <FUNCTION>ldc.i4.m1</FUNCTION>\r
+            <FUNCTION>ldc.i4.s</FUNCTION>\r
+            <FUNCTION>ldc.i8</FUNCTION>\r
+            <FUNCTION>ldc.r4</FUNCTION>\r
+            <FUNCTION>ldc.r8</FUNCTION>\r
+            <FUNCTION>ldelema</FUNCTION>\r
+            <FUNCTION>ldelem.i</FUNCTION>\r
+            <FUNCTION>ldelem.i1</FUNCTION>\r
+            <FUNCTION>ldelem.i2</FUNCTION>\r
+            <FUNCTION>ldelem.i4</FUNCTION>\r
+            <FUNCTION>ldelem.i8</FUNCTION>\r
+            <FUNCTION>ldelem.r4</FUNCTION>\r
+            <FUNCTION>ldelem.r8</FUNCTION>\r
+            <FUNCTION>ldelem.ref</FUNCTION>\r
+            <FUNCTION>ldelem.u1</FUNCTION>\r
+            <FUNCTION>ldelem.u2</FUNCTION>\r
+            <FUNCTION>ldelem.u4</FUNCTION>\r
+            <FUNCTION>ldfld</FUNCTION>\r
+            <FUNCTION>ldflda</FUNCTION>\r
+            <FUNCTION>ldftn</FUNCTION>\r
+            <FUNCTION>ldind.i</FUNCTION>\r
+            <FUNCTION>ldind.i1</FUNCTION>\r
+            <FUNCTION>ldind.i2</FUNCTION>\r
+            <FUNCTION>ldind.i4</FUNCTION>\r
+            <FUNCTION>ldind.i8</FUNCTION>\r
+            <FUNCTION>ldind.r4</FUNCTION>\r
+            <FUNCTION>ldind.r8</FUNCTION>\r
+            <FUNCTION>ldind.ref</FUNCTION>\r
+            <FUNCTION>ldind.u1</FUNCTION>\r
+            <FUNCTION>ldind.u2</FUNCTION>\r
+            <FUNCTION>ldind.u4</FUNCTION>\r
+            <FUNCTION>ldlen</FUNCTION>\r
+            <FUNCTION>ldloc</FUNCTION>\r
+            <FUNCTION>ldloca</FUNCTION>\r
+            <FUNCTION>ldloca.s</FUNCTION>\r
+            <FUNCTION>ldloc.0</FUNCTION>\r
+            <FUNCTION>ldloc.1</FUNCTION>\r
+            <FUNCTION>ldloc.2</FUNCTION>\r
+            <FUNCTION>ldloc.3</FUNCTION>\r
+            <FUNCTION>ldloc.s</FUNCTION>\r
+            <FUNCTION>ldnull</FUNCTION>\r
+            <FUNCTION>ldobj</FUNCTION>\r
+            <FUNCTION>ldsfld</FUNCTION>\r
+            <FUNCTION>ldsflda</FUNCTION>\r
+            <FUNCTION>ldstr</FUNCTION>\r
+            <FUNCTION>ldtoken</FUNCTION>\r
+            <FUNCTION>ldvirtftn</FUNCTION>\r
+            <FUNCTION>starg</FUNCTION>\r
+            <FUNCTION>starg.s</FUNCTION>\r
+            <FUNCTION>stelem.i</FUNCTION>\r
+            <FUNCTION>stelem.i1</FUNCTION>\r
+            <FUNCTION>stelem.i2</FUNCTION>\r
+            <FUNCTION>stelem.i4</FUNCTION>\r
+            <FUNCTION>stelem.i8</FUNCTION>\r
+            <FUNCTION>stelem.r4</FUNCTION>\r
+            <FUNCTION>stelem.r8</FUNCTION>\r
+            <FUNCTION>stelem.ref</FUNCTION>\r
+            <FUNCTION>stfld</FUNCTION>\r
+            <FUNCTION>stind.i</FUNCTION>\r
+            <FUNCTION>stind.i1</FUNCTION>\r
+            <FUNCTION>stind.i2</FUNCTION>\r
+            <FUNCTION>stind.i4</FUNCTION>\r
+            <FUNCTION>stind.i8</FUNCTION>\r
+            <FUNCTION>stind.r4</FUNCTION>\r
+            <FUNCTION>stind.r8</FUNCTION>\r
+            <FUNCTION>stind.ref</FUNCTION>\r
+            <FUNCTION>stloc</FUNCTION>\r
+            <FUNCTION>stloc.0</FUNCTION>\r
+            <FUNCTION>stloc.1</FUNCTION>\r
+            <FUNCTION>stloc.2</FUNCTION>\r
+            <FUNCTION>stloc.3</FUNCTION>\r
+            <FUNCTION>stloc.s</FUNCTION>\r
+            <FUNCTION>stobj</FUNCTION>\r
+            <FUNCTION>stsfld</FUNCTION>\r
+\r
+            <FUNCTION>call</FUNCTION>\r
+            <FUNCTION>calli</FUNCTION>\r
+            <FUNCTION>callvirt</FUNCTION>\r
+            <FUNCTION>castclass</FUNCTION>\r
+            <FUNCTION>ceq</FUNCTION>\r
+            <FUNCTION>cgt</FUNCTION>\r
+            <FUNCTION>cgt.un</FUNCTION>\r
+            <FUNCTION>ckfinite</FUNCTION>\r
+            <FUNCTION>clt</FUNCTION>\r
+            <FUNCTION>clt.un</FUNCTION>\r
+            <FUNCTION>cpblk</FUNCTION>\r
+            <FUNCTION>cpobj</FUNCTION>\r
+\r
+            <FUNCTION>initblk</FUNCTION>\r
+            <FUNCTION>initobj</FUNCTION>\r
+            <FUNCTION>newarr</FUNCTION>\r
+            <FUNCTION>newobj</FUNCTION>\r
+\r
+            <FUNCTION>dup</FUNCTION>\r
+            <FUNCTION>endfilter</FUNCTION>\r
+            <FUNCTION>isinst</FUNCTION>\r
+            <FUNCTION>box</FUNCTION>\r
+            <FUNCTION>unbox</FUNCTION>\r
+            <FUNCTION>arglist</FUNCTION>\r
+            <FUNCTION>break</FUNCTION>\r
+            <FUNCTION>jmp</FUNCTION>\r
+            <FUNCTION>ret</FUNCTION>\r
+            <FUNCTION>leave</FUNCTION>\r
+            <FUNCTION>leave.s</FUNCTION>\r
+            <FUNCTION>localloc</FUNCTION>\r
+            <FUNCTION>mkrefany</FUNCTION>\r
+            <FUNCTION>neg</FUNCTION>\r
+            <FUNCTION>switch</FUNCTION>\r
+            <FUNCTION>nop</FUNCTION>\r
+            <FUNCTION>pop</FUNCTION>\r
+            <FUNCTION>refanytype</FUNCTION>\r
+            <FUNCTION>refanyval</FUNCTION>\r
+            <FUNCTION>rem</FUNCTION>\r
+            <FUNCTION>rem.un</FUNCTION>\r
+            <FUNCTION>throw</FUNCTION>\r
+            <FUNCTION>rethrow</FUNCTION>\r
+            <FUNCTION>endfinally</FUNCTION>\r
+            <FUNCTION>shl</FUNCTION>\r
+            <FUNCTION>shr</FUNCTION>\r
+            <FUNCTION>shr.un</FUNCTION>\r
+            <FUNCTION>sizeof</FUNCTION>\r
+            <FUNCTION>tailcall</FUNCTION>\r
+            <FUNCTION>unaligned</FUNCTION>\r
+            <FUNCTION>volatile</FUNCTION>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/clips.xml b/extra/xmode/modes/clips.xml
new file mode 100644 (file)
index 0000000..ce2efca
--- /dev/null
@@ -0,0 +1,434 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--   jEdit CLIPS syntax file\r
+       \r
+       written by      Orhan Alkan\r
+       version         1.0\r
+       created on      30 June 2007\r
+       last revised    01 July 2007\r
+-->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE=";" />\r
+\r
+       <PROPERTY NAME="indentNextLine"\r
+                       VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0[lL]?|[1-9]\d{0,9}(\d{0,9}[lL])?|0[xX]\p{XDigit}{1,8}(\p{XDigit}{0,8}[lL])?|0[0-7]{1,11}([0-7]{0,11}[lL])?|([0-9]+\.[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?[fFdD]?|[0-9]+([eE][+-]?[0-9]+[fFdD]?|([eE][+-]?[0-9]+)?[fFdD]))">\r
+       \r
+               <!-- Comments -->\r
+               <EOL_SPAN TYPE="COMMENT1">;</EOL_SPAN>\r
+               \r
+               <!-- String literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               \r
+               <!-- List literals -->\r
+               <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE" DELEGATE="LIST">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+               \r
+               <!-- Operators -->\r
+               <SEQ TYPE="OPERATOR">=></SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;-</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ> \r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">**</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">\</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+               <SEQ TYPE="OPERATOR">$</SEQ>\r
+               \r
+               <!-- Parentheses -->\r
+               <SEQ TYPE="MARKUP">(</SEQ>\r
+               <SEQ TYPE="MARKUP">)</SEQ>\r
+               <SEQ TYPE="MARKUP">[</SEQ>\r
+               <SEQ TYPE="MARKUP">]</SEQ>\r
+               <SEQ TYPE="NULL">{</SEQ>\r
+               <SEQ TYPE="NULL">}</SEQ>\r
+               \r
+               <KEYWORDS>\r
+               \r
+                       <KEYWORD1>deffacts</KEYWORD1>\r
+                       <KEYWORD1>deftemplate</KEYWORD1>\r
+                       <KEYWORD1>defglobal</KEYWORD1>\r
+                       <KEYWORD1>defrule</KEYWORD1>\r
+                       <KEYWORD1>deffunction</KEYWORD1>\r
+                       <KEYWORD1>defgeneric</KEYWORD1>\r
+                       <KEYWORD1>defmethod</KEYWORD1>\r
+                       <KEYWORD1>defclass</KEYWORD1>\r
+                       <KEYWORD1>definstance</KEYWORD1>\r
+                       <KEYWORD1>defmessage</KEYWORD1>\r
+                       <KEYWORD1>defmodule</KEYWORD1>\r
+                       <KEYWORD1>deffacts-module</KEYWORD1>\r
+                       <KEYWORD1>deffunction-module</KEYWORD1>\r
+                       <KEYWORD1>defgeneric-module</KEYWORD1>\r
+                       <KEYWORD1>defglobal-module</KEYWORD1>\r
+                       <KEYWORD1>definstances-module</KEYWORD1>\r
+                       <KEYWORD1>slot</KEYWORD1>\r
+                       <KEYWORD1>multislot</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+                       <KEYWORD1>default-dynamic</KEYWORD1>\r
+                       <KEYWORD1>declare</KEYWORD1>\r
+                       <KEYWORD1>salience</KEYWORD1>\r
+                       <KEYWORD1>auto-focus</KEYWORD1>\r
+                       <KEYWORD1>object</KEYWORD1>\r
+                       <KEYWORD1>is-a</KEYWORD1>\r
+                       <KEYWORD1>pattern-match</KEYWORD1>\r
+                       <KEYWORD1>single-slot</KEYWORD1>\r
+                       <KEYWORD1>reactive</KEYWORD1>\r
+                       <KEYWORD1>non-reactive</KEYWORD1>\r
+                       <KEYWORD1>storage</KEYWORD1>\r
+                       <KEYWORD1>local</KEYWORD1>\r
+                       <KEYWORD1>shared</KEYWORD1>\r
+                       <KEYWORD1>access</KEYWORD1>\r
+                       <KEYWORD1>read-write</KEYWORD1>\r
+                       <KEYWORD1>read-only</KEYWORD1>\r
+                       <KEYWORD1>initialize-only</KEYWORD1>\r
+                       <KEYWORD1>propagation</KEYWORD1>\r
+                       <KEYWORD1>inherit</KEYWORD1>\r
+                       <KEYWORD1>non-inherit</KEYWORD1>\r
+                       <KEYWORD1>source</KEYWORD1>\r
+                       <KEYWORD1>exclusive</KEYWORD1>\r
+                       <KEYWORD1>composite</KEYWORD1>\r
+                       <KEYWORD1>visibility</KEYWORD1>\r
+                       <KEYWORD1>private</KEYWORD1>\r
+                       <KEYWORD1>public</KEYWORD1>\r
+                       <KEYWORD1>create-accessor</KEYWORD1>\r
+                       <KEYWORD1>?NONE</KEYWORD1>\r
+                       <KEYWORD1>read</KEYWORD1>\r
+                       <KEYWORD1>write</KEYWORD1>\r
+                       <KEYWORD1>?DEFAULT</KEYWORD1>\r
+                       <KEYWORD1>primary</KEYWORD1>\r
+                       <KEYWORD1>around</KEYWORD1>\r
+                       <KEYWORD1>before</KEYWORD1>\r
+                       <KEYWORD1>after</KEYWORD1>\r
+                       <KEYWORD1>import</KEYWORD1>\r
+                       <KEYWORD1>export</KEYWORD1>\r
+                       <KEYWORD1>?ALL</KEYWORD1>\r
+                       <KEYWORD1>type</KEYWORD1>\r
+                       <KEYWORD1>allowed-symbols</KEYWORD1>\r
+                       <KEYWORD1>allowed-strings</KEYWORD1>\r
+                       <KEYWORD1>allowed-lexemes</KEYWORD1>\r
+                       <KEYWORD1>allowed-integers</KEYWORD1>\r
+                       <KEYWORD1>allowed-floats</KEYWORD1>\r
+                       <KEYWORD1>allowed-numbers</KEYWORD1>\r
+                       <KEYWORD1>allowed-instance-names</KEYWORD1>\r
+                       <KEYWORD1>allowed-values</KEYWORD1>\r
+                       <KEYWORD1>?VARIABLE</KEYWORD1>\r
+                       \r
+                       <KEYWORD2>if</KEYWORD2>\r
+                       <KEYWORD2>while</KEYWORD2>\r
+                       <KEYWORD2>then</KEYWORD2>\r
+                       <KEYWORD2>else</KEYWORD2>\r
+                       <KEYWORD2>or</KEYWORD2>\r
+                       <KEYWORD2>and</KEYWORD2>\r
+                       <KEYWORD2>eq</KEYWORD2>\r
+                       <KEYWORD2>evenp</KEYWORD2>\r
+                       <KEYWORD2>floatp</KEYWORD2>\r
+                       <KEYWORD2>integerp</KEYWORD2>\r
+                       <KEYWORD2>lexemep</KEYWORD2>\r
+                       <KEYWORD2>multifieldp</KEYWORD2>\r
+                       <KEYWORD2>neq</KEYWORD2>\r
+                       <KEYWORD2>not</KEYWORD2>\r
+                       <KEYWORD2>numberp</KEYWORD2>\r
+                       <KEYWORD2>oddp</KEYWORD2>\r
+                       <KEYWORD2>pointerp</KEYWORD2>\r
+                       <KEYWORD2>stringp</KEYWORD2>\r
+                       <KEYWORD2>symbolp</KEYWORD2>\r
+                       <KEYWORD2>switch</KEYWORD2>\r
+                       <KEYWORD2>while</KEYWORD2>\r
+                       \r
+                       <KEYWORD3>assert</KEYWORD3>\r
+                       <KEYWORD3>bind</KEYWORD3>\r
+                       <KEYWORD3>class-abstractp</KEYWORD3>\r
+                       <KEYWORD3>class-existp</KEYWORD3>\r
+                       <KEYWORD3>class-subclasses</KEYWORD3>\r
+                       <KEYWORD3>class-superclasses</KEYWORD3>\r
+                       <KEYWORD3>defclass-module</KEYWORD3>\r
+                       <KEYWORD3>describe-classes</KEYWORD3>\r
+                       <KEYWORD3>get-class-defaults-mode</KEYWORD3>\r
+                       <KEYWORD3>get-defclass-list</KEYWORD3>\r
+                       <KEYWORD3>agenda</KEYWORD3>\r
+                       <KEYWORD3>list-defclasses</KEYWORD3>\r
+                       <KEYWORD3>ppdefclass</KEYWORD3>\r
+                       <KEYWORD3>set-class-defaults-mode</KEYWORD3>\r
+                       <KEYWORD3>slot-allowed-values</KEYWORD3>\r
+                       <KEYWORD3>slot-cardinality</KEYWORD3>\r
+                       <KEYWORD3>slot-default-value</KEYWORD3>\r
+                       <KEYWORD3>slot-direct-accessp</KEYWORD3>\r
+                       <KEYWORD3>slot-existp</KEYWORD3>\r
+                       <KEYWORD3>slot-facest</KEYWORD3>\r
+                       <KEYWORD3>slot-initablep</KEYWORD3>\r
+                       <KEYWORD3>slot-publicp</KEYWORD3>\r
+                       <KEYWORD3>slot-range</KEYWORD3>\r
+                       <KEYWORD3>slot-sources</KEYWORD3>\r
+                       <KEYWORD3>slot-types</KEYWORD3>\r
+                       <KEYWORD3>slot-writablep</KEYWORD3>\r
+                       <KEYWORD3>subsclassp</KEYWORD3>\r
+                       <KEYWORD3>undefclass</KEYWORD3>\r
+                       <KEYWORD3>get-deffacts-list</KEYWORD3>\r
+                       <KEYWORD3>list-deffacts</KEYWORD3>\r
+                       <KEYWORD3>ppdeffacts</KEYWORD3>\r
+                       <KEYWORD3>undeffacts</KEYWORD3>\r
+                       <KEYWORD3>get-deffunction-list</KEYWORD3>\r
+                       <KEYWORD3>list-deffunction</KEYWORD3>\r
+                       <KEYWORD3>ppdeffunction</KEYWORD3>\r
+                       <KEYWORD3>undeffunction</KEYWORD3>\r
+                       <KEYWORD3>get-defgeneric-list</KEYWORD3>\r
+                       <KEYWORD3>list-defgenerics</KEYWORD3>\r
+                       <KEYWORD3>ppdefgeneric</KEYWORD3>\r
+                       <KEYWORD3>preview-generic</KEYWORD3>\r
+                       <KEYWORD3>type</KEYWORD3>\r
+                       <KEYWORD3>undefgeneric</KEYWORD3>\r
+                       <KEYWORD3>get-defglobal-list</KEYWORD3>\r
+                       <KEYWORD3>get-reset-globals</KEYWORD3>\r
+                       <KEYWORD3>list-defglobals</KEYWORD3>\r
+                       <KEYWORD3>ppdefglobal</KEYWORD3>\r
+                       <KEYWORD3>set-reset-globals</KEYWORD3>\r
+                       <KEYWORD3>undefglobal</KEYWORD3>\r
+                       <KEYWORD3>get-definstances-list</KEYWORD3>\r
+                       <KEYWORD3>list-definstances</KEYWORD3>\r
+                       <KEYWORD3>ppdefinstances</KEYWORD3>\r
+                       <KEYWORD3>undefinstances</KEYWORD3>\r
+                       <KEYWORD3>call-next-handler</KEYWORD3>\r
+                       <KEYWORD3>get-defmessage-handler</KEYWORD3>\r
+                       <KEYWORD3>list-defmessage-handlers</KEYWORD3>\r
+                       <KEYWORD3>message-handler-existp</KEYWORD3>\r
+                       <KEYWORD3>handler-type</KEYWORD3>\r
+                       <KEYWORD3>next-handlerp</KEYWORD3>\r
+                       <KEYWORD3>override-next-handler</KEYWORD3>\r
+                       <KEYWORD3>ppdefmessage-handler</KEYWORD3>\r
+                       <KEYWORD3>undefmessage-handler</KEYWORD3>\r
+                       <KEYWORD3>call-next-method</KEYWORD3>\r
+                       <KEYWORD3>call-specific-method</KEYWORD3>\r
+                       <KEYWORD3>get-defmethod-list</KEYWORD3>\r
+                       <KEYWORD3>get-method-restrictions</KEYWORD3>\r
+                       <KEYWORD3>list-defmethods</KEYWORD3>\r
+                       <KEYWORD3>next-methodp</KEYWORD3>\r
+                       <KEYWORD3>override-next-method</KEYWORD3>\r
+                       <KEYWORD3>undefmethod</KEYWORD3>\r
+                       <KEYWORD3>preview-generic</KEYWORD3>\r
+                       <KEYWORD3>get-current-module</KEYWORD3>\r
+                       <KEYWORD3>get-defmodule-list</KEYWORD3>\r
+                       <KEYWORD3>list-defmodules</KEYWORD3>\r
+                       <KEYWORD3>ppdefmodules</KEYWORD3>\r
+                       <KEYWORD3>set-current-module</KEYWORD3>\r
+                       <KEYWORD3>defrule-module</KEYWORD3>\r
+                       <KEYWORD3>get-defrule-list</KEYWORD3>\r
+                       <KEYWORD3>get-incremental-reset</KEYWORD3>\r
+                       <KEYWORD3>list-defrules</KEYWORD3>\r
+                       <KEYWORD3>matches</KEYWORD3>\r
+                       <KEYWORD3>ppdefrule</KEYWORD3>\r
+                       <KEYWORD3>refresh</KEYWORD3>\r
+                       <KEYWORD3>remove-break</KEYWORD3>\r
+                       <KEYWORD3>set-break</KEYWORD3>\r
+                       <KEYWORD3>set-incremental-reset</KEYWORD3>\r
+                       <KEYWORD3>show-breaks</KEYWORD3>\r
+                       <KEYWORD3>undefrule</KEYWORD3>\r
+                       <KEYWORD3>deftemplate-module</KEYWORD3>\r
+                       <KEYWORD3>get-deftemaplate-list</KEYWORD3>\r
+                       <KEYWORD3>list-deftemplates</KEYWORD3>\r
+                       <KEYWORD3>ppdeftemplate</KEYWORD3>\r
+                       <KEYWORD3>undeftemplate</KEYWORD3>\r
+                       <KEYWORD3>apropos</KEYWORD3>\r
+                       <KEYWORD3>bacth</KEYWORD3>\r
+                       <KEYWORD3>batch*</KEYWORD3>\r
+                       <KEYWORD3>bload</KEYWORD3>\r
+                       <KEYWORD3>bsave</KEYWORD3>\r
+                       <KEYWORD3>clear</KEYWORD3>\r
+                       <KEYWORD3>exit</KEYWORD3>\r
+                       <KEYWORD3>get-auto-float-dividend</KEYWORD3>\r
+                       <KEYWORD3>get-dynamic-constraints-checking</KEYWORD3>\r
+                       <KEYWORD3>get-static-constraints-checking</KEYWORD3>\r
+                       <KEYWORD3>load</KEYWORD3>\r
+                       <KEYWORD3>load*</KEYWORD3>\r
+                       <KEYWORD3>options</KEYWORD3>\r
+                       <KEYWORD3>reset</KEYWORD3>\r
+                       <KEYWORD3>save</KEYWORD3>\r
+                       <KEYWORD3>set-auto-float-dividend</KEYWORD3>\r
+                       <KEYWORD3>set-dynamic-constriants-checking</KEYWORD3>\r
+                       <KEYWORD3>set-static-constriants-checking</KEYWORD3>\r
+                       <KEYWORD3>system</KEYWORD3>\r
+                       <KEYWORD3>assert-string</KEYWORD3>\r
+                       <KEYWORD3>dependencies</KEYWORD3>\r
+                       <KEYWORD3>dependents</KEYWORD3>\r
+                       <KEYWORD3>duplicate</KEYWORD3>\r
+                       <KEYWORD3>facts</KEYWORD3>\r
+                       <KEYWORD3>fact-existp</KEYWORD3>\r
+                       <KEYWORD3>fact-index</KEYWORD3>\r
+                       <KEYWORD3>fact-relation</KEYWORD3>\r
+                       <KEYWORD3>fact-slot-names</KEYWORD3>\r
+                       <KEYWORD3>fact-slot-value</KEYWORD3>\r
+                       <KEYWORD3>get-fact-duplication</KEYWORD3>\r
+                       <KEYWORD3>get-fact-list</KEYWORD3>\r
+                       <KEYWORD3>load-facts</KEYWORD3>\r
+                       <KEYWORD3>modify</KEYWORD3>\r
+                       <KEYWORD3>retract</KEYWORD3>\r
+                       <KEYWORD3>save-facts</KEYWORD3>\r
+                       <KEYWORD3>set-fact-duplication</KEYWORD3>\r
+                       <KEYWORD3>any-instancep</KEYWORD3>\r
+                       <KEYWORD3>class</KEYWORD3>\r
+                       <KEYWORD3>delayed-do-for-all-instances</KEYWORD3>\r
+                       <KEYWORD3>delete-instance</KEYWORD3>\r
+                       <KEYWORD3>direct-slot-delete$</KEYWORD3>\r
+                       <KEYWORD3>direct-slot-insert$</KEYWORD3>\r
+                       <KEYWORD3>direct-slot-replace$</KEYWORD3>\r
+                       <KEYWORD3>do-for-instance</KEYWORD3>\r
+                       <KEYWORD3>do-for-all-instances</KEYWORD3>\r
+                       <KEYWORD3>dynamic-get</KEYWORD3>\r
+                       <KEYWORD3>dynamic-put</KEYWORD3>\r
+                       <KEYWORD3>find-instance</KEYWORD3>\r
+                       <KEYWORD3>find-all-instances</KEYWORD3>\r
+                       <KEYWORD3>init-slot</KEYWORD3>\r
+                       <KEYWORD3>instance-address</KEYWORD3>\r
+                       <KEYWORD3>instance-addressp</KEYWORD3>\r
+                       <KEYWORD3>instance-existp</KEYWORD3>\r
+                       <KEYWORD3>instance-name</KEYWORD3>\r
+                       <KEYWORD3>instance-namep</KEYWORD3>\r
+                       <KEYWORD3>instance-name-to-symbol</KEYWORD3>\r
+                       <KEYWORD3>instancep</KEYWORD3>\r
+                       <KEYWORD3>instances</KEYWORD3>\r
+                       <KEYWORD3>load-instances</KEYWORD3>\r
+                       <KEYWORD3>make-intance</KEYWORD3>\r
+                       <KEYWORD3>ppinstance</KEYWORD3>\r
+                       <KEYWORD3>restore-instances</KEYWORD3>\r
+                       <KEYWORD3>save-instances</KEYWORD3>\r
+                       <KEYWORD3>send</KEYWORD3>\r
+                       <KEYWORD3>slot-delete$</KEYWORD3>\r
+                       <KEYWORD3>slot-insert$</KEYWORD3>\r
+                       <KEYWORD3>slot-replace$</KEYWORD3>\r
+                       <KEYWORD3>symbol-to-instance-name</KEYWORD3>\r
+                       <KEYWORD3>unmake-instance</KEYWORD3>\r
+                       <KEYWORD3>create$</KEYWORD3>\r
+                       <KEYWORD3>delete$</KEYWORD3>\r
+                       <KEYWORD3>delete-member$</KEYWORD3>\r
+                       <KEYWORD3>explode$</KEYWORD3>\r
+                       <KEYWORD3>first$</KEYWORD3>\r
+                       <KEYWORD3>implode$</KEYWORD3>\r
+                       <KEYWORD3>insert$</KEYWORD3>\r
+                       <KEYWORD3>length$</KEYWORD3>\r
+                       <KEYWORD3>member$</KEYWORD3>\r
+                       <KEYWORD3>nth$</KEYWORD3>\r
+                       <KEYWORD3>replace$</KEYWORD3>\r
+                       <KEYWORD3>rest$</KEYWORD3>\r
+                       <KEYWORD3>subseq$</KEYWORD3>\r
+                       <KEYWORD3>subsetp</KEYWORD3>\r
+                       <KEYWORD3>break</KEYWORD3>\r
+                       <KEYWORD3>loop-for-count</KEYWORD3>\r
+                       <KEYWORD3>progn</KEYWORD3>\r
+                       <KEYWORD3>progn$</KEYWORD3>\r
+                       <KEYWORD3>return</KEYWORD3>\r
+                       <KEYWORD3>get-profile-percent-threshold</KEYWORD3>\r
+                       <KEYWORD3>profile-contructs</KEYWORD3>\r
+                       <KEYWORD3>profile-info</KEYWORD3>\r
+                       <KEYWORD3>profile-reset</KEYWORD3>\r
+                       <KEYWORD3>set-profile-percent-threshold</KEYWORD3>\r
+                       <KEYWORD3>expand$</KEYWORD3>\r
+                       <KEYWORD3>get-sequence-operator-recognition</KEYWORD3>\r
+                       <KEYWORD3>aet-sequence-operator-recognition</KEYWORD3>\r
+                       <KEYWORD3>build</KEYWORD3>\r
+                       <KEYWORD3>check-syntax</KEYWORD3>\r
+                       <KEYWORD3>eval</KEYWORD3>\r
+                       <KEYWORD3>lowcase</KEYWORD3>\r
+                       <KEYWORD3>str-cat</KEYWORD3>\r
+                       <KEYWORD3>str-compare</KEYWORD3>\r
+                       <KEYWORD3>str-index</KEYWORD3>\r
+                       <KEYWORD3>str-length</KEYWORD3>\r
+                       <KEYWORD3>string-to-field</KEYWORD3>\r
+                       <KEYWORD3>sub-string</KEYWORD3>\r
+                       <KEYWORD3>sym-cat</KEYWORD3>\r
+                       <KEYWORD3>upcase</KEYWORD3>\r
+                       <KEYWORD3>fetch</KEYWORD3>\r
+                       <KEYWORD3>print-region</KEYWORD3>\r
+                       <KEYWORD3>toss</KEYWORD3>\r
+                       \r
+                       <KEYWORD4>abs</KEYWORD4>\r
+                       <KEYWORD4>div</KEYWORD4>\r
+                       <KEYWORD4>float</KEYWORD4>\r
+                       <KEYWORD4>integer</KEYWORD4>\r
+                       <KEYWORD4>max</KEYWORD4>\r
+                       <KEYWORD4>min</KEYWORD4>\r
+                       <KEYWORD4>deg-grad</KEYWORD4>\r
+                       <KEYWORD4>deg-rad</KEYWORD4>\r
+                       <KEYWORD4>exp</KEYWORD4>\r
+                       <KEYWORD4>grad-deg</KEYWORD4>\r
+                       <KEYWORD4>log</KEYWORD4>\r
+                       <KEYWORD4>log10</KEYWORD4>\r
+                       <KEYWORD4>mod</KEYWORD4>\r
+                       <KEYWORD4>pi</KEYWORD4>\r
+                       <KEYWORD4>rad-deg</KEYWORD4>\r
+                       <KEYWORD4>round</KEYWORD4>\r
+                       <KEYWORD4>sqrt</KEYWORD4>\r
+                       <KEYWORD4>close</KEYWORD4>\r
+                       <KEYWORD4>format</KEYWORD4>\r
+                       <KEYWORD4>open</KEYWORD4>\r
+                       <KEYWORD4>printout</KEYWORD4>\r
+                       <KEYWORD4>read</KEYWORD4>\r
+                       <KEYWORD4>readline</KEYWORD4>\r
+                       <KEYWORD4>remove</KEYWORD4>\r
+                       <KEYWORD4>rename</KEYWORD4>\r
+                       <KEYWORD4>conserve-mem</KEYWORD4>\r
+                       <KEYWORD4>mem-used</KEYWORD4>\r
+                       <KEYWORD4>mem-requests</KEYWORD4>\r
+                       <KEYWORD4>release-mem</KEYWORD4>\r
+                       <KEYWORD4>funcall</KEYWORD4>\r
+                       <KEYWORD4>gensym</KEYWORD4>\r
+                       <KEYWORD4>gemsym*</KEYWORD4>\r
+                       <KEYWORD4>get-function-restriction</KEYWORD4>\r
+                       <KEYWORD4>length</KEYWORD4>\r
+                       <KEYWORD4>random</KEYWORD4>\r
+                       <KEYWORD4>seed</KEYWORD4>\r
+                       <KEYWORD4>setgen</KEYWORD4>\r
+                       <KEYWORD4>sort</KEYWORD4>\r
+                       <KEYWORD4>time</KEYWORD4>\r
+                       <KEYWORD4>timer</KEYWORD4>\r
+                       <KEYWORD4>acos</KEYWORD4>\r
+                       <KEYWORD4>acosh</KEYWORD4>\r
+                       <KEYWORD4>acot</KEYWORD4>\r
+                       <KEYWORD4>acoth</KEYWORD4>\r
+                       <KEYWORD4>acsc</KEYWORD4>\r
+                       <KEYWORD4>acsch</KEYWORD4>\r
+                       <KEYWORD4>asec</KEYWORD4>\r
+                       <KEYWORD4>asin</KEYWORD4>\r
+                       <KEYWORD4>asinh</KEYWORD4>\r
+                       <KEYWORD4>atan</KEYWORD4>\r
+                       <KEYWORD4>atanh</KEYWORD4>\r
+                       <KEYWORD4>cos</KEYWORD4>\r
+                       <KEYWORD4>cosh</KEYWORD4>\r
+                       <KEYWORD4>cot</KEYWORD4>\r
+                       <KEYWORD4>coth</KEYWORD4>\r
+                       <KEYWORD4>csc</KEYWORD4>\r
+                       <KEYWORD4>sec</KEYWORD4>\r
+                       <KEYWORD4>sech</KEYWORD4>\r
+                       <KEYWORD4>sin</KEYWORD4>\r
+                       <KEYWORD4>sinh</KEYWORD4>\r
+                       <KEYWORD4>tan</KEYWORD4>\r
+                       <KEYWORD4>tanh</KEYWORD4>\r
+                                                                       \r
+               </KEYWORDS>\r
+               \r
+       </RULES>\r
+       \r
+</MODE>\r
diff --git a/extra/xmode/modes/cobol.xml b/extra/xmode/modes/cobol.xml
new file mode 100644 (file)
index 0000000..31339bc
--- /dev/null
@@ -0,0 +1,998 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- COBOL mode, by Matthias M. Schneider -->\r
+<MODE>\r
+       <RULES ESCAPE="\" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <EOL_SPAN_REGEXP TYPE="COMMENT1" AT_LINE_START="TRUE">.{6}(\*|/)</EOL_SPAN_REGEXP>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR"> = </SEQ>\r
+               <SEQ TYPE="OPERATOR"> &gt;= </SEQ>\r
+               <SEQ TYPE="OPERATOR"> &lt;= </SEQ>\r
+               <SEQ TYPE="OPERATOR"> + </SEQ>\r
+               <SEQ TYPE="OPERATOR"> - </SEQ>\r
+               <SEQ TYPE="OPERATOR"> / </SEQ>\r
+               <SEQ TYPE="OPERATOR"> * </SEQ>\r
+               <SEQ TYPE="OPERATOR"> ** </SEQ>\r
+               <SEQ TYPE="OPERATOR"> &gt; </SEQ>\r
+               <SEQ TYPE="OPERATOR"> &lt; </SEQ>\r
+               <SEQ TYPE="OPERATOR"> % </SEQ>\r
+               <SEQ TYPE="OPERATOR"> &amp; </SEQ>\r
+               <SEQ TYPE="OPERATOR"> | </SEQ>\r
+               <SEQ TYPE="OPERATOR"> ^ </SEQ>\r
+               <SEQ TYPE="OPERATOR"> ~ </SEQ>\r
+\r
+               <SPAN TYPE="COMMENT2" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>EXEC SQL</BEGIN>\r
+                       <END>END-EXEC</END>\r
+               </SPAN>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>ACCEPT</KEYWORD1>\r
+                       <KEYWORD1>ACCESS</KEYWORD1>\r
+                       <KEYWORD1>ACTUAL</KEYWORD1>\r
+                       <KEYWORD1>ADD</KEYWORD1>\r
+                       <KEYWORD1>ADDRESS</KEYWORD1>\r
+                       <KEYWORD1>ADVANCING</KEYWORD1>\r
+                       <KEYWORD1>AFTER</KEYWORD1>\r
+                       <KEYWORD1>ALL</KEYWORD1>\r
+                       <KEYWORD1>ALPHABET</KEYWORD1>\r
+                       <KEYWORD1>ALPHABETIC</KEYWORD1>\r
+                       <KEYWORD1>ALPHABETIC-LOWER</KEYWORD1>\r
+                       <KEYWORD1>ALPHABETIC-UPPER</KEYWORD1>\r
+                       <KEYWORD1>ALPHANUMERIC</KEYWORD1>\r
+                       <KEYWORD1>ALPHANUMERIC-EDITED</KEYWORD1>\r
+                       <KEYWORD1>ALSO</KEYWORD1>\r
+                       <KEYWORD1>ALTER</KEYWORD1>\r
+                       <KEYWORD1>ALTERNATE</KEYWORD1>\r
+                       <KEYWORD1>AND</KEYWORD1>\r
+                       <KEYWORD1>ANY</KEYWORD1>\r
+                       <KEYWORD1>API</KEYWORD1>\r
+                       <KEYWORD1>APPLY</KEYWORD1>\r
+                       <KEYWORD1>ARE</KEYWORD1>\r
+                       <KEYWORD1>AREA</KEYWORD1>\r
+                       <KEYWORD1>AREAS</KEYWORD1>\r
+                       <KEYWORD1>ASCENDING</KEYWORD1>\r
+                       <KEYWORD1>ASSIGN</KEYWORD1>\r
+                       <KEYWORD1>AT</KEYWORD1>\r
+                       <KEYWORD1>AUTHOR</KEYWORD1>\r
+                       <KEYWORD1>AUTO</KEYWORD1>\r
+                       <KEYWORD1>AUTO-SKIP</KEYWORD1>\r
+                       <KEYWORD1>AUTOMATIC</KEYWORD1>\r
+\r
+                       <KEYWORD1>BACKGROUND-COLOR</KEYWORD1>\r
+                       <KEYWORD1>BACKGROUND-COLOUR</KEYWORD1>\r
+                       <KEYWORD1>BACKWARD</KEYWORD1>\r
+                       <KEYWORD1>BASIS</KEYWORD1>\r
+                       <KEYWORD1>BEEP</KEYWORD1>\r
+                       <KEYWORD1>BEFORE</KEYWORD1>\r
+                       <KEYWORD1>BEGINNING</KEYWORD1>\r
+                       <KEYWORD1>BELL</KEYWORD1>\r
+                       <KEYWORD1>BINARY</KEYWORD1>\r
+                       <KEYWORD1>BLANK</KEYWORD1>\r
+                       <KEYWORD1>BLINK</KEYWORD1>\r
+                       <KEYWORD1>BLOCK</KEYWORD1>\r
+                       <KEYWORD1>BOTTOM</KEYWORD1>\r
+                       <KEYWORD1>BY</KEYWORD1>\r
+\r
+                       <KEYWORD1>C01</KEYWORD1>\r
+                       <KEYWORD1>C02</KEYWORD1>\r
+                       <KEYWORD1>C03</KEYWORD1>\r
+                       <KEYWORD1>C04</KEYWORD1>\r
+                       <KEYWORD1>C05</KEYWORD1>\r
+                       <KEYWORD1>C06</KEYWORD1>\r
+                       <KEYWORD1>C07</KEYWORD1>\r
+                       <KEYWORD1>C08</KEYWORD1>\r
+                       <KEYWORD1>C09</KEYWORD1>\r
+                       <KEYWORD1>C10</KEYWORD1>\r
+                       <KEYWORD1>C11</KEYWORD1>\r
+                       <KEYWORD1>C12</KEYWORD1>\r
+                       <KEYWORD1>CALL</KEYWORD1>\r
+                       <KEYWORD1>CALL-CONVENTION</KEYWORD1>\r
+                       <KEYWORD1>CANCEL</KEYWORD1>\r
+                       <KEYWORD1>CBL</KEYWORD1>\r
+                       <KEYWORD1>CD</KEYWORD1>\r
+                       <KEYWORD1>CF</KEYWORD1>\r
+                       <KEYWORD1>CH</KEYWORD1>\r
+                       <KEYWORD1>CHAIN</KEYWORD1>\r
+                       <KEYWORD1>CHAINING</KEYWORD1>\r
+                       <KEYWORD1>CHANGED</KEYWORD1>\r
+                       <KEYWORD1>CHARACTER</KEYWORD1>\r
+                       <KEYWORD1>CHARACTERS</KEYWORD1>\r
+                       <KEYWORD1>CLASS</KEYWORD1>\r
+                       <KEYWORD1>CLOCK-UNITS</KEYWORD1>\r
+                       <KEYWORD1>CLOSE</KEYWORD1>\r
+                       <KEYWORD1>COBOL</KEYWORD1>\r
+                       <KEYWORD1>CODE</KEYWORD1>\r
+                       <KEYWORD1>CODE-SET</KEYWORD1>\r
+                       <KEYWORD1>COL</KEYWORD1>\r
+                       <KEYWORD1>COLLATING</KEYWORD1>\r
+                       <KEYWORD1>COLUMN</KEYWORD1>\r
+                       <KEYWORD1>COM-REG</KEYWORD1>\r
+                       <KEYWORD1>COMMA</KEYWORD1>\r
+                       <KEYWORD1>COMMIT</KEYWORD1>\r
+                       <KEYWORD1>COMMON</KEYWORD1>\r
+                       <KEYWORD1>COMMUNICATION</KEYWORD1>\r
+                       <KEYWORD1>COMP</KEYWORD1>\r
+                       <KEYWORD1>COMP-0</KEYWORD1>\r
+                       <KEYWORD1>COMP-1</KEYWORD1>\r
+                       <KEYWORD1>COMP-2</KEYWORD1>\r
+                       <KEYWORD1>COMP-3</KEYWORD1>\r
+                       <KEYWORD1>COMP-4</KEYWORD1>\r
+                       <KEYWORD1>COMP-5</KEYWORD1>\r
+                       <KEYWORD1>COMP-6</KEYWORD1>\r
+                       <KEYWORD1>COMP-X</KEYWORD1>\r
+                       <KEYWORD1>COMPUTATIONAL</KEYWORD1>\r
+                       <KEYWORD1>COMPUTATIONAL-0</KEYWORD1>\r
+                       <KEYWORD1>COMPUTATIONAL-1</KEYWORD1>\r
+                       <KEYWORD1>COMPUTATIONAL-2</KEYWORD1>\r
+                       <KEYWORD1>COMPUTATIONAL-3</KEYWORD1>\r
+                       <KEYWORD1>COMPUTATIONAL-4</KEYWORD1>\r
+                       <KEYWORD1>COMPUTATIONAL-5</KEYWORD1>\r
+                       <KEYWORD1>COMPUTATIONAL-6</KEYWORD1>\r
+                       <KEYWORD1>COMPUTATIONAL-X</KEYWORD1>\r
+                       <KEYWORD1>COMPUTE</KEYWORD1>\r
+                       <KEYWORD1>CONFIGURATION</KEYWORD1>\r
+                       <KEYWORD1>CONSOLE</KEYWORD1>\r
+                       <KEYWORD1>CONTAINS</KEYWORD1>\r
+                       <KEYWORD1>CONTENT</KEYWORD1>\r
+                       <KEYWORD1>CONTINUE</KEYWORD1>\r
+                       <KEYWORD1>CONTROL</KEYWORD1>\r
+                       <KEYWORD1>CONTROLS</KEYWORD1>\r
+                       <KEYWORD1>CONVERTING</KEYWORD1>\r
+                       <KEYWORD1>COPY</KEYWORD1>\r
+                       <KEYWORD1>CORE-INDEX</KEYWORD1>\r
+                       <KEYWORD1>CORR</KEYWORD1>\r
+                       <KEYWORD1>CORRESPONDING</KEYWORD1>\r
+                       <KEYWORD1>COUNT</KEYWORD1>\r
+                       <KEYWORD1>CRT</KEYWORD1>\r
+                       <KEYWORD1>CRT-UNDER</KEYWORD1>\r
+                       <KEYWORD1>CURRENCY</KEYWORD1>\r
+                       <KEYWORD1>CURRENT-DATE</KEYWORD1>\r
+                       <KEYWORD1>CURSOR</KEYWORD1>\r
+                       <KEYWORD1>CYCLE</KEYWORD1>\r
+                       <KEYWORD1>CYL-INDEX</KEYWORD1>\r
+                       <KEYWORD1>CYL-OVERFLOW</KEYWORD1>\r
+\r
+                       <KEYWORD1>DATA</KEYWORD1>\r
+                       <KEYWORD1>DATE</KEYWORD1>\r
+                       <KEYWORD1>DATE-COMPILED</KEYWORD1>\r
+                       <KEYWORD1>DATE-WRITTEN</KEYWORD1>\r
+                       <KEYWORD1>DAY</KEYWORD1>\r
+                       <KEYWORD1>DAY-OF-WEEK</KEYWORD1>\r
+                       <KEYWORD1>DBCS</KEYWORD1>\r
+                       <KEYWORD1>DE</KEYWORD1>\r
+                       <KEYWORD1>DEBUG</KEYWORD1>\r
+                       <KEYWORD1>DEBUG-CONTENTS</KEYWORD1>\r
+                       <KEYWORD1>DEBUG-ITEM</KEYWORD1>\r
+                       <KEYWORD1>DEBUG-LINE</KEYWORD1>\r
+                       <KEYWORD1>DEBUG-NAME</KEYWORD1>\r
+                       <KEYWORD1>DEBUG-SUB-1</KEYWORD1>\r
+                       <KEYWORD1>DEBUG-SUB-2</KEYWORD1>\r
+                       <KEYWORD1>DEBUG-SUB-3</KEYWORD1>\r
+                       <KEYWORD1>DEBUGGING</KEYWORD1>\r
+                       <KEYWORD1>DECIMAL-POINT</KEYWORD1>\r
+                       <KEYWORD1>DECLARATIVES</KEYWORD1>\r
+                       <KEYWORD1>DELETE</KEYWORD1>\r
+                       <KEYWORD1>DELIMITED</KEYWORD1>\r
+                       <KEYWORD1>DELIMITER</KEYWORD1>\r
+                       <KEYWORD1>DEPENDING</KEYWORD1>\r
+                       <KEYWORD1>DESCENDING</KEYWORD1>\r
+                       <KEYWORD1>DESTINATION</KEYWORD1>\r
+                       <KEYWORD1>DETAIL</KEYWORD1>\r
+                       <KEYWORD1>DISABLE</KEYWORD1>\r
+                       <KEYWORD1>DISK</KEYWORD1>\r
+                       <KEYWORD1>DISP</KEYWORD1>\r
+                       <KEYWORD1>DISPLAY</KEYWORD1>\r
+                       <KEYWORD1>DISPLAY-1</KEYWORD1>\r
+                       <KEYWORD1>DISPLAY-ST</KEYWORD1>\r
+                       <KEYWORD1>DIVIDE</KEYWORD1>\r
+                       <KEYWORD1>DIVISION</KEYWORD1>\r
+                       <KEYWORD1>DOWN</KEYWORD1>\r
+                       <KEYWORD1>DUPLICATES</KEYWORD1>\r
+                       <KEYWORD1>DYNAMIC</KEYWORD1>\r
+\r
+                       <KEYWORD1>ECHO</KEYWORD1>\r
+                       <KEYWORD1>EGCS</KEYWORD1>\r
+                       <KEYWORD1>EGI</KEYWORD1>\r
+                       <KEYWORD1>EJECT</KEYWORD1>\r
+                       <KEYWORD1>ELSE</KEYWORD1>\r
+                       <KEYWORD1>EMI</KEYWORD1>\r
+                       <KEYWORD1>EMPTY-CHECK</KEYWORD1>\r
+                       <KEYWORD1>ENABLE</KEYWORD1>\r
+                       <KEYWORD1>END</KEYWORD1>\r
+                       <KEYWORD1>END-ACCEPT</KEYWORD1>\r
+                       <KEYWORD1>END-ADD</KEYWORD1>\r
+                       <KEYWORD1>END-CALL</KEYWORD1>\r
+                       <KEYWORD1>END-CHAIN</KEYWORD1>\r
+                       <KEYWORD1>END-COMPUTE</KEYWORD1>\r
+                       <KEYWORD1>END-DELETE</KEYWORD1>\r
+                       <KEYWORD1>END-DISPLAY</KEYWORD1>\r
+                       <KEYWORD1>END-DIVIDE</KEYWORD1>\r
+                       <KEYWORD1>END-EVALUATE</KEYWORD1>\r
+                       <KEYWORD1>END-IF</KEYWORD1>\r
+                       <KEYWORD1>END-INVOKE</KEYWORD1>\r
+                       <KEYWORD1>END-MULTIPLY</KEYWORD1>\r
+                       <KEYWORD1>END-OF-PAGE</KEYWORD1>\r
+                       <KEYWORD1>END-PERFORM</KEYWORD1>\r
+                       <KEYWORD1>END-READ</KEYWORD1>\r
+                       <KEYWORD1>END-RECEIVE</KEYWORD1>\r
+                       <KEYWORD1>END-RETURN</KEYWORD1>\r
+                       <KEYWORD1>END-REWRITE</KEYWORD1>\r
+                       <KEYWORD1>END-SEARCH</KEYWORD1>\r
+                       <KEYWORD1>END-START</KEYWORD1>\r
+                       <KEYWORD1>END-STRING</KEYWORD1>\r
+                       <KEYWORD1>END-SUBTRACT</KEYWORD1>\r
+                       <KEYWORD1>END-UNSTRING</KEYWORD1>\r
+                       <KEYWORD1>END-WRITE</KEYWORD1>\r
+                       <KEYWORD1>ENDING</KEYWORD1>\r
+                       <KEYWORD1>ENTER</KEYWORD1>\r
+                       <KEYWORD1>ENTRY</KEYWORD1>\r
+                       <KEYWORD1>ENVIRONMENT</KEYWORD1>\r
+                       <KEYWORD1>EOL</KEYWORD1>\r
+                       <KEYWORD1>EOP</KEYWORD1>\r
+                       <KEYWORD1>EOS</KEYWORD1>\r
+                       <KEYWORD1>EQUAL</KEYWORD1>\r
+                       <KEYWORD1>EQUALS</KEYWORD1>\r
+                       <KEYWORD1>ERASE</KEYWORD1>\r
+                       <KEYWORD1>ERROR</KEYWORD1>\r
+                       <KEYWORD1>ESCAPE</KEYWORD1>\r
+                       <KEYWORD1>ESI</KEYWORD1>\r
+                       <KEYWORD1>EVALUATE</KEYWORD1>\r
+                       <KEYWORD1>EVERY</KEYWORD1>\r
+                       <KEYWORD1>EXAMINE</KEYWORD1>\r
+                       <KEYWORD1>EXCEEDS</KEYWORD1>\r
+                       <KEYWORD1>EXCEPTION</KEYWORD1>\r
+                       <KEYWORD1>EXCESS-3</KEYWORD1>\r
+                       <KEYWORD1>EXCLUSIVE</KEYWORD1>\r
+                       <KEYWORD1>EXEC</KEYWORD1>\r
+                       <KEYWORD1>EXECUTE</KEYWORD1>\r
+                       <KEYWORD1>EXHIBIT</KEYWORD1>\r
+                       <KEYWORD1>EXIT</KEYWORD1>\r
+                       <KEYWORD1>EXTEND</KEYWORD1>\r
+                       <KEYWORD1>EXTENDED-SEARCH</KEYWORD1>\r
+                       <KEYWORD1>EXTERNAL</KEYWORD1>\r
+\r
+                       <KEYWORD1>FACTORY</KEYWORD1>\r
+                       <KEYWORD1>FALSE</KEYWORD1>\r
+                       <KEYWORD1>FD</KEYWORD1>\r
+                       <KEYWORD1>FH-FCD</KEYWORD1>\r
+                       <KEYWORD1>FH-KEYDEF</KEYWORD1>\r
+                       <KEYWORD1>FILE</KEYWORD1>\r
+                       <KEYWORD1>FILE-CONTROL</KEYWORD1>\r
+                       <KEYWORD1>FILE-ID</KEYWORD1>\r
+                       <KEYWORD1>FILE-LIMIT</KEYWORD1>\r
+                       <KEYWORD1>FILE-LIMITS</KEYWORD1>\r
+                       <KEYWORD1>FILLER</KEYWORD1>\r
+                       <KEYWORD1>FINAL</KEYWORD1>\r
+                       <KEYWORD1>FIRST</KEYWORD1>\r
+                       <KEYWORD1>FIXED</KEYWORD1>\r
+                       <KEYWORD1>FOOTING</KEYWORD1>\r
+                       <KEYWORD1>FOR</KEYWORD1>\r
+                       <KEYWORD1>FOREGROUND-COLOR</KEYWORD1>\r
+                       <KEYWORD1>FOREGROUND-COLOUR</KEYWORD1>\r
+                       <KEYWORD1>FROM</KEYWORD1>\r
+                       <KEYWORD1>FULL</KEYWORD1>\r
+                       <KEYWORD1>FUNCTION</KEYWORD1>\r
+\r
+                       <KEYWORD1>GENERATE</KEYWORD1>\r
+                       <KEYWORD1>GIVING</KEYWORD1>\r
+                       <KEYWORD1>GLOBAL</KEYWORD1>\r
+                       <KEYWORD1>GO</KEYWORD1>\r
+                       <KEYWORD1>GOBACK</KEYWORD1>\r
+                       <KEYWORD1>GREATER</KEYWORD1>\r
+                       <KEYWORD1>GRID</KEYWORD1>\r
+                       <KEYWORD1>GROUP</KEYWORD1>\r
+\r
+                       <KEYWORD1>HEADING</KEYWORD1>\r
+                       <KEYWORD1>HIGH</KEYWORD1>\r
+                       <KEYWORD1>HIGH-VALUE</KEYWORD1>\r
+                       <KEYWORD1>HIGH-VALUES</KEYWORD1>\r
+                       <KEYWORD1>HIGHLIGHT</KEYWORD1>\r
+\r
+                       <KEYWORD1>I-O</KEYWORD1>\r
+                       <KEYWORD1>I-O-CONTROL</KEYWORD1>\r
+                       <KEYWORD1>ID</KEYWORD1>\r
+                       <KEYWORD1>IDENTIFICATION</KEYWORD1>\r
+                       <KEYWORD1>IF</KEYWORD1>\r
+                       <KEYWORD1>IGNORE</KEYWORD1>\r
+                       <KEYWORD1>IN</KEYWORD1>\r
+                       <KEYWORD1>INDEX</KEYWORD1>\r
+                       <KEYWORD1>INDEXED</KEYWORD1>\r
+                       <KEYWORD1>INDICATE</KEYWORD1>\r
+                       <KEYWORD1>INHERITING</KEYWORD1>\r
+                       <KEYWORD1>INITIAL</KEYWORD1>\r
+                       <KEYWORD1>INITIALIZE</KEYWORD1>\r
+                       <KEYWORD1>INITIATE</KEYWORD1>\r
+                       <KEYWORD1>INPUT</KEYWORD1>\r
+                       <KEYWORD1>INPUT-OUTPUT</KEYWORD1>\r
+                       <KEYWORD1>INSERT</KEYWORD1>\r
+                       <KEYWORD1>INSPECT</KEYWORD1>\r
+                       <KEYWORD1>INSTALLATION</KEYWORD1>\r
+                       <KEYWORD1>INTO</KEYWORD1>\r
+                       <KEYWORD1>INVALID</KEYWORD1>\r
+                       <KEYWORD1>INVOKE</KEYWORD1>\r
+                       <KEYWORD1>IS</KEYWORD1>\r
+\r
+                       <KEYWORD1>JAPANESE</KEYWORD1>\r
+                       <KEYWORD1>JUST</KEYWORD1>\r
+                       <KEYWORD1>JUSTIFIED</KEYWORD1>\r
+\r
+                       <KEYWORD1>KANJI</KEYWORD1>\r
+                       <KEYWORD1>KEPT</KEYWORD1>\r
+                       <KEYWORD1>KEY</KEYWORD1>\r
+                       <KEYWORD1>KEYBOARD</KEYWORD1>\r
+\r
+                       <KEYWORD1>LABEL</KEYWORD1>\r
+                       <KEYWORD1>LAST</KEYWORD1>\r
+                       <KEYWORD1>LEADING</KEYWORD1>\r
+                       <KEYWORD1>LEAVE</KEYWORD1>\r
+                       <KEYWORD1>LEFT</KEYWORD1>\r
+                       <KEYWORD1>LEFT-JUSTIFY</KEYWORD1>\r
+                       <KEYWORD1>LEFTLINE</KEYWORD1>\r
+                       <KEYWORD1>LENGTH</KEYWORD1>\r
+                       <KEYWORD1>LENGTH-CHECK</KEYWORD1>\r
+                       <KEYWORD1>LESS</KEYWORD1>\r
+                       <KEYWORD1>LIMIT</KEYWORD1>\r
+                       <KEYWORD1>LIMITS</KEYWORD1>\r
+                       <KEYWORD1>LIN</KEYWORD1>\r
+                       <KEYWORD1>LINAGE</KEYWORD1>\r
+                       <KEYWORD1>LINAGE-COUNTER</KEYWORD1>\r
+                       <KEYWORD1>LINE</KEYWORD1>\r
+                       <KEYWORD1>LINE-COUNTER</KEYWORD1>\r
+                       <KEYWORD1>LINES</KEYWORD1>\r
+                       <KEYWORD1>LINKAGE</KEYWORD1>\r
+                       <KEYWORD1>LOCAL-STORAGE</KEYWORD1>\r
+                       <KEYWORD1>LOCK</KEYWORD1>\r
+                       <KEYWORD1>LOCKING</KEYWORD1>\r
+                       <KEYWORD1>LOW</KEYWORD1>\r
+                       <KEYWORD1>LOW-VALUE</KEYWORD1>\r
+                       <KEYWORD1>LOW-VALUES</KEYWORD1>\r
+                       <KEYWORD1>LOWER</KEYWORD1>\r
+                       <KEYWORD1>LOWLIGHT</KEYWORD1>\r
+\r
+                       <KEYWORD1>MANUAL</KEYWORD1>\r
+                       <KEYWORD1>MASTER-INDEX</KEYWORD1>\r
+                       <KEYWORD1>MEMORY</KEYWORD1>\r
+                       <KEYWORD1>MERGE</KEYWORD1>\r
+                       <KEYWORD1>MESSAGE</KEYWORD1>\r
+                       <KEYWORD1>METHOD</KEYWORD1>\r
+                       <KEYWORD1>MODE</KEYWORD1>\r
+                       <KEYWORD1>MODULES</KEYWORD1>\r
+                       <KEYWORD1>MORE-LABELS</KEYWORD1>\r
+                       <KEYWORD1>MOVE</KEYWORD1>\r
+                       <KEYWORD1>MULTIPLE</KEYWORD1>\r
+                       <KEYWORD1>MULTIPLY</KEYWORD1>\r
+\r
+                       <KEYWORD1>NAME</KEYWORD1>\r
+                       <KEYWORD1>NAMED</KEYWORD1>\r
+                       <KEYWORD1>NATIONAL</KEYWORD1>\r
+                       <KEYWORD1>NATIONAL-EDITED</KEYWORD1>\r
+                       <KEYWORD1>NATIVE</KEYWORD1>\r
+                       <KEYWORD1>NCHAR</KEYWORD1>\r
+                       <KEYWORD1>NEGATIVE</KEYWORD1>\r
+                       <KEYWORD1>NEXT</KEYWORD1>\r
+                       <KEYWORD1>NO</KEYWORD1>\r
+                       <KEYWORD1>NO-ECHO</KEYWORD1>\r
+                       <KEYWORD1>NOMINAL</KEYWORD1>\r
+                       <KEYWORD1>NOT</KEYWORD1>\r
+                       <KEYWORD1>NOTE</KEYWORD1>\r
+                       <KEYWORD1>NSTD-REELS</KEYWORD1>\r
+                       <KEYWORD1>NULL</KEYWORD1>\r
+                       <KEYWORD1>NULLS</KEYWORD1>\r
+                       <KEYWORD1>NUMBER</KEYWORD1>\r
+                       <KEYWORD1>NUMERIC</KEYWORD1>\r
+                       <KEYWORD1>NUMERIC-EDITED</KEYWORD1>\r
+\r
+                       <KEYWORD1>OBJECT</KEYWORD1>\r
+                       <KEYWORD1>OBJECT-COMPUTER</KEYWORD1>\r
+                       <KEYWORD1>OBJECT-STORAGE</KEYWORD1>\r
+                       <KEYWORD1>OCCURS</KEYWORD1>\r
+                       <KEYWORD1>OF</KEYWORD1>\r
+                       <KEYWORD1>OFF</KEYWORD1>\r
+                       <KEYWORD1>OMITTED</KEYWORD1>\r
+                       <KEYWORD1>ON</KEYWORD1>\r
+                       <KEYWORD1>OOSTACKPTR</KEYWORD1>\r
+                       <KEYWORD1>OPEN</KEYWORD1>\r
+                       <KEYWORD1>OPTIONAL</KEYWORD1>\r
+                       <KEYWORD1>OR</KEYWORD1>\r
+                       <KEYWORD1>ORDER</KEYWORD1>\r
+                       <KEYWORD1>ORGANIZATION</KEYWORD1>\r
+                       <KEYWORD1>OTHER</KEYWORD1>\r
+                       <KEYWORD1>OTHERWISE</KEYWORD1>\r
+                       <KEYWORD1>OUTPUT</KEYWORD1>\r
+                       <KEYWORD1>OVERFLOW</KEYWORD1>\r
+                       <KEYWORD1>OVERLINE</KEYWORD1>\r
+\r
+                       <KEYWORD1>PACKED-DECIMAL</KEYWORD1>\r
+                       <KEYWORD1>PADDING</KEYWORD1>\r
+                       <KEYWORD1>PAGE</KEYWORD1>\r
+                       <KEYWORD1>PAGE-COUNTER</KEYWORD1>\r
+                       <KEYWORD1>PARAGRAPH</KEYWORD1>\r
+                       <KEYWORD1>PASSWORD</KEYWORD1>\r
+                       <KEYWORD1>PERFORM</KEYWORD1>\r
+                       <KEYWORD1>PF</KEYWORD1>\r
+                       <KEYWORD1>PH</KEYWORD1>\r
+                       <KEYWORD1>PIC</KEYWORD1>\r
+                       <KEYWORD1>PICTURE</KEYWORD1>\r
+                       <KEYWORD1>PLUS</KEYWORD1>\r
+                       <KEYWORD1>POINTER</KEYWORD1>\r
+                       <KEYWORD1>POS</KEYWORD1>\r
+                       <KEYWORD1>POSITION</KEYWORD1>\r
+                       <KEYWORD1>POSITIONING</KEYWORD1>\r
+                       <KEYWORD1>POSITIVE</KEYWORD1>\r
+                       <KEYWORD1>PREVIOUS</KEYWORD1>\r
+                       <KEYWORD1>PRINT</KEYWORD1>\r
+                       <KEYWORD1>PRINT-SWITCH</KEYWORD1>\r
+                       <KEYWORD1>PRINTER</KEYWORD1>\r
+                       <KEYWORD1>PRINTER-1</KEYWORD1>\r
+                       <KEYWORD1>PRINTING</KEYWORD1>\r
+                       <KEYWORD1>PRIVATE</KEYWORD1>\r
+                       <KEYWORD1>PROCEDURE</KEYWORD1>\r
+                       <KEYWORD1>PROCEDURE-POINTER</KEYWORD1>\r
+                       <KEYWORD1>PROCEDURES</KEYWORD1>\r
+                       <KEYWORD1>PROCEED</KEYWORD1>\r
+                       <KEYWORD1>PROCESSING</KEYWORD1>\r
+                       <KEYWORD1>PROGRAM</KEYWORD1>\r
+                       <KEYWORD1>PROGRAM-ID</KEYWORD1>\r
+                       <KEYWORD1>PROMPT</KEYWORD1>\r
+                       <KEYWORD1>PROTECTED</KEYWORD1>\r
+                       <KEYWORD1>PUBLIC</KEYWORD1>\r
+                       <KEYWORD1>PURGE</KEYWORD1>\r
+\r
+                       <KEYWORD1>QUEUE</KEYWORD1>\r
+                       <KEYWORD1>QUOTE</KEYWORD1>\r
+                       <KEYWORD1>QUOTES</KEYWORD1>\r
+\r
+                       <KEYWORD1>RANDOM</KEYWORD1>\r
+                       <KEYWORD1>RANGE</KEYWORD1>\r
+                       <KEYWORD1>RD</KEYWORD1>\r
+                       <KEYWORD1>READ</KEYWORD1>\r
+                       <KEYWORD1>READY</KEYWORD1>\r
+                       <KEYWORD1>RECEIVE</KEYWORD1>\r
+                       <KEYWORD1>RECORD</KEYWORD1>\r
+                       <KEYWORD1>RECORD-OVERFLOW</KEYWORD1>\r
+                       <KEYWORD1>RECORDING</KEYWORD1>\r
+                       <KEYWORD1>RECORDS</KEYWORD1>\r
+                       <KEYWORD1>REDEFINES</KEYWORD1>\r
+                       <KEYWORD1>REEL</KEYWORD1>\r
+                       <KEYWORD1>REFERENCE</KEYWORD1>\r
+                       <KEYWORD1>REFERENCES</KEYWORD1>\r
+                       <KEYWORD1>RELATIVE</KEYWORD1>\r
+                       <KEYWORD1>RELEASE</KEYWORD1>\r
+                       <KEYWORD1>RELOAD</KEYWORD1>\r
+                       <KEYWORD1>REMAINDER</KEYWORD1>\r
+                       <KEYWORD1>REMARKS</KEYWORD1>\r
+                       <KEYWORD1>REMOVAL</KEYWORD1>\r
+                       <KEYWORD1>RENAMES</KEYWORD1>\r
+                       <KEYWORD1>REORG-CRITERIA</KEYWORD1>\r
+                       <KEYWORD1>REPLACE</KEYWORD1>\r
+                       <KEYWORD1>REPLACING</KEYWORD1>\r
+                       <KEYWORD1>REPORT</KEYWORD1>\r
+                       <KEYWORD1>REPORTING</KEYWORD1>\r
+                       <KEYWORD1>REPORTS</KEYWORD1>\r
+                       <KEYWORD1>REQUIRED</KEYWORD1>\r
+                       <KEYWORD1>REREAD</KEYWORD1>\r
+                       <KEYWORD1>RERUN</KEYWORD1>\r
+                       <KEYWORD1>RESERVE</KEYWORD1>\r
+                       <KEYWORD1>RESET</KEYWORD1>\r
+                       <KEYWORD1>RETURN</KEYWORD1>\r
+                       <KEYWORD1>RETURN-CODE</KEYWORD1>\r
+                       <KEYWORD1>RETURNING</KEYWORD1>\r
+                       <KEYWORD1>REVERSE</KEYWORD1>\r
+                       <KEYWORD1>REVERSE-VIDEO</KEYWORD1>\r
+                       <KEYWORD1>REVERSED</KEYWORD1>\r
+                       <KEYWORD1>REWIND</KEYWORD1>\r
+                       <KEYWORD1>REWRITE</KEYWORD1>\r
+                       <KEYWORD1>RF</KEYWORD1>\r
+                       <KEYWORD1>RH</KEYWORD1>\r
+                       <KEYWORD1>RIGHT</KEYWORD1>\r
+                       <KEYWORD1>RIGHT-JUSTIFY</KEYWORD1>\r
+                       <KEYWORD1>ROLLBACK</KEYWORD1>\r
+                       <KEYWORD1>ROUNDED</KEYWORD1>\r
+                       <KEYWORD1>RUN</KEYWORD1>\r
+\r
+                       <KEYWORD1>S01</KEYWORD1>\r
+                       <KEYWORD1>S02</KEYWORD1>\r
+                       <KEYWORD1>S03</KEYWORD1>\r
+                       <KEYWORD1>S04</KEYWORD1>\r
+                       <KEYWORD1>S05</KEYWORD1>\r
+                       <KEYWORD1>SAME</KEYWORD1>\r
+                       <KEYWORD1>SCREEN</KEYWORD1>\r
+                       <KEYWORD1>SD</KEYWORD1>\r
+                       <KEYWORD1>SEARCH</KEYWORD1>\r
+                       <KEYWORD1>SECTION</KEYWORD1>\r
+                       <KEYWORD1>SECURE</KEYWORD1>\r
+                       <KEYWORD1>SECURITY</KEYWORD1>\r
+                       <KEYWORD1>SEEK</KEYWORD1>\r
+                       <KEYWORD1>SEGMENT</KEYWORD1>\r
+                       <KEYWORD1>SEGMENT-LIMIT</KEYWORD1>\r
+                       <KEYWORD1>SELECT</KEYWORD1>\r
+                       <KEYWORD1>SELECTIVE</KEYWORD1>\r
+                       <KEYWORD1>SEND</KEYWORD1>\r
+                       <KEYWORD1>SENTENCE</KEYWORD1>\r
+                       <KEYWORD1>SEPARATE</KEYWORD1>\r
+                       <KEYWORD1>SEQUENCE</KEYWORD1>\r
+                       <KEYWORD1>SEQUENTIAL</KEYWORD1>\r
+                       <KEYWORD1>SERVICE</KEYWORD1>\r
+                       <KEYWORD1>SET</KEYWORD1>\r
+                       <KEYWORD1>SHIFT-IN</KEYWORD1>\r
+                       <KEYWORD1>SHIFT-OUT</KEYWORD1>\r
+                       <KEYWORD1>SIGN</KEYWORD1>\r
+                       <KEYWORD1>SIZE</KEYWORD1>\r
+                       <KEYWORD1>SKIP1</KEYWORD1>\r
+                       <KEYWORD1>SKIP2</KEYWORD1>\r
+                       <KEYWORD1>SKIP3</KEYWORD1>\r
+                       <KEYWORD1>SORT</KEYWORD1>\r
+                       <KEYWORD1>SORT-CONTROL</KEYWORD1>\r
+                       <KEYWORD1>SORT-CORE-SIZE</KEYWORD1>\r
+                       <KEYWORD1>SORT-FILE-SIZE</KEYWORD1>\r
+                       <KEYWORD1>SORT-MERGE</KEYWORD1>\r
+                       <KEYWORD1>SORT-MESSAGE</KEYWORD1>\r
+                       <KEYWORD1>SORT-MODE-SIZE</KEYWORD1>\r
+                       <KEYWORD1>SORT-OPTION</KEYWORD1>\r
+                       <KEYWORD1>SORT-RETURN</KEYWORD1>\r
+                       <KEYWORD1>SOURCE</KEYWORD1>\r
+                       <KEYWORD1>SOURCE-COMPUTER</KEYWORD1>\r
+                       <KEYWORD1>SPACE</KEYWORD1>\r
+                       <KEYWORD1>SPACE-FILL</KEYWORD1>\r
+                       <KEYWORD1>SPACES</KEYWORD1>\r
+                       <KEYWORD1>SPECIAL-NAMES</KEYWORD1>\r
+                       <KEYWORD1>STANDARD</KEYWORD1>\r
+                       <KEYWORD1>STANDARD-1</KEYWORD1>\r
+                       <KEYWORD1>STANDARD-2</KEYWORD1>\r
+                       <KEYWORD1>START</KEYWORD1>\r
+                       <KEYWORD1>STATUS</KEYWORD1>\r
+                       <KEYWORD1>STOP</KEYWORD1>\r
+                       <KEYWORD1>STORE</KEYWORD1>\r
+                       <KEYWORD1>STRING</KEYWORD1>\r
+                       <KEYWORD1>SUB-QUEUE-1</KEYWORD1>\r
+                       <KEYWORD1>SUB-QUEUE-2</KEYWORD1>\r
+                       <KEYWORD1>SUB-QUEUE-3</KEYWORD1>\r
+                       <KEYWORD1>SUBTRACT</KEYWORD1>\r
+                       <KEYWORD1>SUM</KEYWORD1>\r
+                       <KEYWORD1>SUPER</KEYWORD1>\r
+                       <KEYWORD1>SUPPRESS</KEYWORD1>\r
+                       <KEYWORD1>SYMBOLIC</KEYWORD1>\r
+                       <KEYWORD1>SYNC</KEYWORD1>\r
+                       <KEYWORD1>SYNCHRONIZED</KEYWORD1>\r
+                       <KEYWORD1>SYSIN</KEYWORD1>\r
+                       <KEYWORD1>SYSIPT</KEYWORD1>\r
+                       <KEYWORD1>SYSLST</KEYWORD1>\r
+                       <KEYWORD1>SYSOUT</KEYWORD1>\r
+                       <KEYWORD1>SYSPCH</KEYWORD1>\r
+                       <KEYWORD1>SYSPUNCH</KEYWORD1>\r
+\r
+                       <KEYWORD1>TAB</KEYWORD1>\r
+                       <KEYWORD1>TABLE</KEYWORD1>\r
+                       <KEYWORD1>TALLY</KEYWORD1>\r
+                       <KEYWORD1>TALLYING</KEYWORD1>\r
+                       <KEYWORD1>TAPE</KEYWORD1>\r
+                       <KEYWORD1>TERMINAL</KEYWORD1>\r
+                       <KEYWORD1>TERMINATE</KEYWORD1>\r
+                       <KEYWORD1>TEST</KEYWORD1>\r
+                       <KEYWORD1>TEXT</KEYWORD1>\r
+                       <KEYWORD1>THAN</KEYWORD1>\r
+                       <KEYWORD1>THEN</KEYWORD1>\r
+                       <KEYWORD1>THROUGH</KEYWORD1>\r
+                       <KEYWORD1>THRU</KEYWORD1>\r
+                       <KEYWORD1>TIME</KEYWORD1>\r
+                       <KEYWORD1>TIME-OF-DAY</KEYWORD1>\r
+                       <KEYWORD1>TIME-OUT</KEYWORD1>\r
+                       <KEYWORD1>TIMEOUT</KEYWORD1>\r
+                       <KEYWORD1>TIMES</KEYWORD1>\r
+                       <KEYWORD1>TITLE</KEYWORD1>\r
+                       <KEYWORD1>TO</KEYWORD1>\r
+                       <KEYWORD1>TOP</KEYWORD1>\r
+                       <KEYWORD1>TOTALED</KEYWORD1>\r
+                       <KEYWORD1>TOTALING</KEYWORD1>\r
+                       <KEYWORD1>TRACE</KEYWORD1>\r
+                       <KEYWORD1>TRACK-AREA</KEYWORD1>\r
+                       <KEYWORD1>TRACK-LIMIT</KEYWORD1>\r
+                       <KEYWORD1>TRACKS</KEYWORD1>\r
+                       <KEYWORD1>TRAILING</KEYWORD1>\r
+                       <KEYWORD1>TRAILING-SIGN</KEYWORD1>\r
+                       <KEYWORD1>TRANSFORM</KEYWORD1>\r
+                       <KEYWORD1>TRUE</KEYWORD1>\r
+                       <KEYWORD1>TYPE</KEYWORD1>\r
+                       <KEYWORD1>TYPEDEF</KEYWORD1>\r
+\r
+                       <KEYWORD1>UNDERLINE</KEYWORD1>\r
+                       <KEYWORD1>UNEQUAL</KEYWORD1>\r
+                       <KEYWORD1>UNIT</KEYWORD1>\r
+                       <KEYWORD1>UNLOCK</KEYWORD1>\r
+                       <KEYWORD1>UNSTRING</KEYWORD1>\r
+                       <KEYWORD1>UNTIL</KEYWORD1>\r
+                       <KEYWORD1>UP</KEYWORD1>\r
+                       <KEYWORD1>UPDATE</KEYWORD1>\r
+                       <KEYWORD1>UPON</KEYWORD1>\r
+                       <KEYWORD1>UPPER</KEYWORD1>\r
+                       <KEYWORD1>UPSI-0</KEYWORD1>\r
+                       <KEYWORD1>UPSI-1</KEYWORD1>\r
+                       <KEYWORD1>UPSI-2</KEYWORD1>\r
+                       <KEYWORD1>UPSI-3</KEYWORD1>\r
+                       <KEYWORD1>UPSI-4</KEYWORD1>\r
+                       <KEYWORD1>UPSI-5</KEYWORD1>\r
+                       <KEYWORD1>UPSI-6</KEYWORD1>\r
+                       <KEYWORD1>UPSI-7</KEYWORD1>\r
+                       <KEYWORD1>USAGE</KEYWORD1>\r
+                       <KEYWORD1>USE</KEYWORD1>\r
+                       <KEYWORD1>USER</KEYWORD1>\r
+                       <KEYWORD1>USING</KEYWORD1>\r
+\r
+                       <KEYWORD1>VALUE</KEYWORD1>\r
+                       <KEYWORD1>VALUES</KEYWORD1>\r
+                       <KEYWORD1>VARIABLE</KEYWORD1>\r
+                       <KEYWORD1>VARYING</KEYWORD1>\r
+\r
+                       <KEYWORD1>WAIT</KEYWORD1>\r
+                       <KEYWORD1>WHEN</KEYWORD1>\r
+                       <KEYWORD1>WHEN-COMPILED</KEYWORD1>\r
+                       <KEYWORD1>WITH</KEYWORD1>\r
+                       <KEYWORD1>WORDS</KEYWORD1>\r
+                       <KEYWORD1>WORKING-STORAGE</KEYWORD1>\r
+                       <KEYWORD1>WRITE</KEYWORD1>\r
+                       <KEYWORD1>WRITE-ONLY</KEYWORD1>\r
+                       <KEYWORD1>WRITE-VERIFY</KEYWORD1>\r
+\r
+                       <KEYWORD1>ZERO</KEYWORD1>\r
+                       <KEYWORD1>ZERO-FILL</KEYWORD1>\r
+                       <KEYWORD1>ZEROES</KEYWORD1>\r
+                       <KEYWORD1>ZEROS</KEYWORD1>\r
+\r
+                       <KEYWORD2>ACOS</KEYWORD2>\r
+                       <KEYWORD2>ANNUITY</KEYWORD2>\r
+                       <KEYWORD2>ASIN</KEYWORD2>\r
+                       <KEYWORD2>ATAN</KEYWORD2>\r
+                       <KEYWORD2>CHAR</KEYWORD2>\r
+                       <KEYWORD2>COS</KEYWORD2>\r
+                       <KEYWORD2>CURRENT-DATE</KEYWORD2>\r
+                       <KEYWORD2>DATE-OF-INTEGER</KEYWORD2>\r
+                       <KEYWORD2>DAY-OF-INTEGER</KEYWORD2>\r
+                       <KEYWORD2>FACTORIAL</KEYWORD2>\r
+                       <KEYWORD2>INTEGER</KEYWORD2>\r
+                       <KEYWORD2>INTEGER-OF-DATE</KEYWORD2>\r
+                       <KEYWORD2>INTEGER-OF-DAY</KEYWORD2>\r
+                       <KEYWORD2>INTEGER-PART</KEYWORD2>\r
+                       <!-- <KEYWORD2>LENGTH</KEYWORD2> -->\r
+                       <KEYWORD2>LOG</KEYWORD2>\r
+                       <KEYWORD2>LOG10</KEYWORD2>\r
+                       <KEYWORD2>LOWER-CASE</KEYWORD2>\r
+                       <KEYWORD2>MAX</KEYWORD2>\r
+                       <KEYWORD2>MEAN</KEYWORD2>\r
+                       <KEYWORD2>MEDIAN</KEYWORD2>\r
+                       <KEYWORD2>MIDRANGE</KEYWORD2>\r
+                       <KEYWORD2>MIN</KEYWORD2>\r
+                       <KEYWORD2>MOD</KEYWORD2>\r
+                       <KEYWORD2>NUMVAL</KEYWORD2>\r
+                       <KEYWORD2>NUMVAL-C</KEYWORD2>\r
+                       <KEYWORD2>ORD</KEYWORD2>\r
+                       <KEYWORD2>ORD-MAX</KEYWORD2>\r
+                       <KEYWORD2>ORD-MIN</KEYWORD2>\r
+                       <KEYWORD2>PRESENT-VALUE</KEYWORD2>\r
+                       <KEYWORD2>RANDOM</KEYWORD2>\r
+                       <KEYWORD2>RANGE</KEYWORD2>\r
+                       <KEYWORD2>REM</KEYWORD2>\r
+                       <KEYWORD2>REVERSE</KEYWORD2>\r
+                       <KEYWORD2>SIN</KEYWORD2>\r
+                       <KEYWORD2>SQRT</KEYWORD2>\r
+                       <KEYWORD2>STANDARD-DEVIATION</KEYWORD2>\r
+                       <KEYWORD2>SUM</KEYWORD2>\r
+                       <KEYWORD2>TAN</KEYWORD2>\r
+                       <KEYWORD2>UPPER-CASE</KEYWORD2>\r
+                       <KEYWORD2>VARIANCE</KEYWORD2>\r
+                       <KEYWORD2>WHEN-COMPILED</KEYWORD2>\r
+\r
+                       <!-- Oracle/SQL - Reserved Words\r
+                       <KEYWORD3>ACCESS</KEYWORD3>\r
+                       <KEYWORD3>ADD</KEYWORD3>\r
+                       <KEYWORD3>ALL</KEYWORD3>\r
+                       <KEYWORD3>ALTER</KEYWORD3>\r
+                       <KEYWORD3>AND</KEYWORD3>\r
+                       <KEYWORD3>ANY</KEYWORD3>\r
+                       <KEYWORD3>ARRAYLEN</KEYWORD3>\r
+                       <KEYWORD3>AS</KEYWORD3>\r
+                       <KEYWORD3>ASC</KEYWORD3>\r
+                       <KEYWORD3>AUDIT</KEYWORD3>\r
+                       <KEYWORD3>BETWEEN</KEYWORD3>\r
+                       <KEYWORD3>BY</KEYWORD3>\r
+                       <KEYWORD3>CHAR</KEYWORD3>\r
+                       <KEYWORD3>CHECK</KEYWORD3>\r
+                       <KEYWORD3>CLUSTER</KEYWORD3>\r
+                       <KEYWORD3>COLUMN</KEYWORD3>\r
+                       <KEYWORD3>COMMENT</KEYWORD3>\r
+                       <KEYWORD3>COMPRESS</KEYWORD3>\r
+                       <KEYWORD3>CONNECT</KEYWORD3>\r
+                       <KEYWORD3>CREATE</KEYWORD3>\r
+                       <KEYWORD3>CURRENT</KEYWORD3>\r
+                       <KEYWORD3>DATE</KEYWORD3>\r
+                       <KEYWORD3>DECIMAL</KEYWORD3>\r
+                       <KEYWORD3>DEFAULT</KEYWORD3>\r
+                       <KEYWORD3>DELETE</KEYWORD3>\r
+                       <KEYWORD3>DESC</KEYWORD3>\r
+                       <KEYWORD3>DISTINCT</KEYWORD3>\r
+                       <KEYWORD3>DROP</KEYWORD3>\r
+                       <KEYWORD3>ELSE</KEYWORD3>\r
+                       <KEYWORD3>EXCLUSIVE</KEYWORD3>\r
+                       <KEYWORD3>EXEC</KEYWORD3>\r
+                       <KEYWORD3>END-EXEC</KEYWORD3>\r
+                       <KEYWORD3>EXISTS</KEYWORD3>\r
+                       <KEYWORD3>FILE</KEYWORD3>\r
+                       <KEYWORD3>FLOAT</KEYWORD3>\r
+                       <KEYWORD3>FOR</KEYWORD3>\r
+                       <KEYWORD3>FROM</KEYWORD3>\r
+                       <KEYWORD3>GRANT</KEYWORD3>\r
+                       <KEYWORD3>GROUP</KEYWORD3>\r
+                       <KEYWORD3>HAVING</KEYWORD3>\r
+                       <KEYWORD3>IDENTIFIED</KEYWORD3>\r
+                       <KEYWORD3>IMMEDIATE</KEYWORD3>\r
+                       <KEYWORD3>IN</KEYWORD3>\r
+                       <KEYWORD3>INCREMENT</KEYWORD3>\r
+                       <KEYWORD3>INDEX</KEYWORD3>\r
+                       <KEYWORD3>INITIAL</KEYWORD3>\r
+                       <KEYWORD3>INSERT</KEYWORD3>\r
+                       <KEYWORD3>INTEGER</KEYWORD3>\r
+                       <KEYWORD3>INTERSECT</KEYWORD3>\r
+                       <KEYWORD3>INTO</KEYWORD3>\r
+                       <KEYWORD3>IS</KEYWORD3>\r
+                       <KEYWORD3>LEVEL</KEYWORD3>\r
+                       <KEYWORD3>LIKE</KEYWORD3>\r
+                       <KEYWORD3>LOCK</KEYWORD3>\r
+                       <KEYWORD3>LONG</KEYWORD3>\r
+                       <KEYWORD3>MAXEXTENTS</KEYWORD3>\r
+                       <KEYWORD3>MINUS</KEYWORD3>\r
+                       <KEYWORD3>MODE</KEYWORD3>\r
+                       <KEYWORD3>MODIFY</KEYWORD3>\r
+                       <KEYWORD3>NOAUDIT</KEYWORD3>\r
+                       <KEYWORD3>NOCOMPRESS</KEYWORD3>\r
+                       <KEYWORD3>NOT</KEYWORD3>\r
+                       <KEYWORD3>NOTFOUND</KEYWORD3>\r
+                       <KEYWORD3>NOWAIT</KEYWORD3>\r
+                       <KEYWORD3>NULL</KEYWORD3>\r
+                       <KEYWORD3>NUMBER</KEYWORD3>\r
+                       <KEYWORD3>OF</KEYWORD3>\r
+                       <KEYWORD3>OFFLINE</KEYWORD3>\r
+                       <KEYWORD3>ON</KEYWORD3>\r
+                       <KEYWORD3>ONLINE</KEYWORD3>\r
+                       <KEYWORD3>OPTION</KEYWORD3>\r
+                       <KEYWORD3>OR</KEYWORD3>\r
+                       <KEYWORD3>ORDER</KEYWORD3>\r
+                       <KEYWORD3>PCTFREE</KEYWORD3>\r
+                       <KEYWORD3>PRIOR</KEYWORD3>\r
+                       <KEYWORD3>PRIVILEGES</KEYWORD3>\r
+                       <KEYWORD3>PUBLIC</KEYWORD3>\r
+                       <KEYWORD3>RAW</KEYWORD3>\r
+                       <KEYWORD3>RENAME</KEYWORD3>\r
+                       <KEYWORD3>RESOURCE</KEYWORD3>\r
+                       <KEYWORD3>REVOKE</KEYWORD3>\r
+                       <KEYWORD3>ROW</KEYWORD3>\r
+                       <KEYWORD3>ROWID</KEYWORD3>\r
+                       <KEYWORD3>ROWLABEL</KEYWORD3>\r
+                       <KEYWORD3>ROWNUM</KEYWORD3>\r
+                       <KEYWORD3>ROWS</KEYWORD3>\r
+                       <KEYWORD3>START</KEYWORD3>\r
+                       <KEYWORD3>SELECT</KEYWORD3>\r
+                       <KEYWORD3>SESSION</KEYWORD3>\r
+                       <KEYWORD3>SET</KEYWORD3>\r
+                       <KEYWORD3>SHARE</KEYWORD3>\r
+                       <KEYWORD3>SIZE</KEYWORD3>\r
+                       <KEYWORD3>SMALLINT</KEYWORD3>\r
+                       <KEYWORD3>SQLBUF</KEYWORD3>\r
+                       <KEYWORD3>SUCCESSFUL</KEYWORD3>\r
+                       <KEYWORD3>SYNONYM</KEYWORD3>\r
+                       <KEYWORD3>SYSDATE</KEYWORD3>\r
+                       <KEYWORD3>TABLE</KEYWORD3>\r
+                       <KEYWORD3>THEN</KEYWORD3>\r
+                       <KEYWORD3>TO</KEYWORD3>\r
+                       <KEYWORD3>TRIGGER</KEYWORD3>\r
+                       <KEYWORD3>UID</KEYWORD3>\r
+                       <KEYWORD3>UNION</KEYWORD3>\r
+                       <KEYWORD3>UNIQUE</KEYWORD3>\r
+                       <KEYWORD3>UPDATE</KEYWORD3>\r
+                       <KEYWORD3>USER</KEYWORD3>\r
+                       <KEYWORD3>VALIDATE</KEYWORD3>\r
+                       <KEYWORD3>VALUES</KEYWORD3>\r
+                       <KEYWORD3>VARCHAR</KEYWORD3>\r
+                       <KEYWORD3>VARCHAR2</KEYWORD3>\r
+                       <KEYWORD3>VIEW</KEYWORD3>\r
+                       <KEYWORD3>WHENEVER</KEYWORD3>\r
+                       <KEYWORD3>WHERE</KEYWORD3>\r
+                       <KEYWORD3>WITH</KEYWORD3>\r
+                       -->\r
+\r
+                       <!-- Oracle/SQL - Keywords\r
+                       <KEYWORD3>ADMIN</KEYWORD3>\r
+                       <KEYWORD3>AFTER</KEYWORD3>\r
+                       <KEYWORD3>ALLOCATE</KEYWORD3>\r
+                       <KEYWORD3>ANALYZE</KEYWORD3>\r
+                       <KEYWORD3>ARCHIVE</KEYWORD3>\r
+                       <KEYWORD3>ARCHIVELOG</KEYWORD3>\r
+                       <KEYWORD3>AUTHORIZATION</KEYWORD3>\r
+                       <KEYWORD3>AVG</KEYWORD3>\r
+                       <KEYWORD3>BACKUP</KEYWORD3>\r
+                       <KEYWORD3>BEGIN</KEYWORD3>\r
+                       <KEYWORD3>BECOME</KEYWORD3>\r
+                       <KEYWORD3>BEFORE</KEYWORD3>\r
+                       <KEYWORD3>BLOCK</KEYWORD3>\r
+                       <KEYWORD3>BODY</KEYWORD3>\r
+                       <KEYWORD3>CACHE</KEYWORD3>\r
+                       <KEYWORD3>CANCEL</KEYWORD3>\r
+                       <KEYWORD3>CASCADE</KEYWORD3>\r
+                       <KEYWORD3>CHANGE</KEYWORD3>\r
+                       <KEYWORD3>CHARACTER</KEYWORD3>\r
+                       <KEYWORD3>CHECKPOINT</KEYWORD3>\r
+                       <KEYWORD3>CLOSE</KEYWORD3>\r
+                       <KEYWORD3>COBOL</KEYWORD3>\r
+                       <KEYWORD3>COMMIT</KEYWORD3>\r
+                       <KEYWORD3>COMPILE</KEYWORD3>\r
+                       <KEYWORD3>CONSTRAINT</KEYWORD3>\r
+                       <KEYWORD3>CONSTRAINTS</KEYWORD3>\r
+                       <KEYWORD3>CONTENTS</KEYWORD3>\r
+                       <KEYWORD3>CONTINUE</KEYWORD3>\r
+                       <KEYWORD3>CONTROLFILE</KEYWORD3>\r
+                       <KEYWORD3>COUNT</KEYWORD3>\r
+                       <KEYWORD3>DBA</KEYWORD3>\r
+                       <KEYWORD3>CURSOR</KEYWORD3>\r
+                       <KEYWORD3>CYCLE</KEYWORD3>\r
+                       <KEYWORD3>DATABASE</KEYWORD3>\r
+                       <KEYWORD3>DATAFILE</KEYWORD3>\r
+                       <KEYWORD3>DEC</KEYWORD3>\r
+                       <KEYWORD3>DECLARE</KEYWORD3>\r
+                       <KEYWORD3>DISABLE</KEYWORD3>\r
+                       <KEYWORD3>DISMOUNT</KEYWORD3>\r
+                       <KEYWORD3>DOUBLE</KEYWORD3>\r
+                       <KEYWORD3>DUMP</KEYWORD3>\r
+                       <KEYWORD3>EACH</KEYWORD3>\r
+                       <KEYWORD3>ENABLE</KEYWORD3>\r
+                       <KEYWORD3>END</KEYWORD3>\r
+                       <KEYWORD3>ESCAPE</KEYWORD3>\r
+                       <KEYWORD3>EVENTS</KEYWORD3>\r
+                       <KEYWORD3>EXCEPT</KEYWORD3>\r
+                       <KEYWORD3>EXCEPTIONS</KEYWORD3>\r
+                       <KEYWORD3>EXEC</KEYWORD3>\r
+                       <KEYWORD3>EXPLAIN</KEYWORD3>\r
+                       <KEYWORD3>EXECUTE</KEYWORD3>\r
+                       <KEYWORD3>EXTENT</KEYWORD3>\r
+                       <KEYWORD3>EXTERNALLY</KEYWORD3>\r
+                       <KEYWORD3>FETCH</KEYWORD3>\r
+                       <KEYWORD3>FLUSH</KEYWORD3>\r
+                       <KEYWORD3>FREELIST</KEYWORD3>\r
+                       <KEYWORD3>FREELISTS</KEYWORD3>\r
+                       <KEYWORD3>FORCE</KEYWORD3>\r
+                       <KEYWORD3>FOREIGN</KEYWORD3>\r
+                       <KEYWORD3>FORTRAN</KEYWORD3>\r
+                       <KEYWORD3>FOUND</KEYWORD3>\r
+                       <KEYWORD3>FUNCTION</KEYWORD3>\r
+                       <KEYWORD3>GO</KEYWORD3>\r
+                       <KEYWORD3>GOTO</KEYWORD3>\r
+                       <KEYWORD3>GROUPS</KEYWORD3>\r
+                       <KEYWORD3>INCLUDING</KEYWORD3>\r
+                       <KEYWORD3>INDICATOR</KEYWORD3>\r
+                       <KEYWORD3>INITRANS</KEYWORD3>\r
+                       <KEYWORD3>INSTANCE</KEYWORD3>\r
+                       <KEYWORD3>INT</KEYWORD3>\r
+                       <KEYWORD3>KEY</KEYWORD3>\r
+                       <KEYWORD3>LANGUAGE</KEYWORD3>\r
+                       <KEYWORD3>LAYER</KEYWORD3>\r
+                       <KEYWORD3>LINK</KEYWORD3>\r
+                       <KEYWORD3>LISTS</KEYWORD3>\r
+                       <KEYWORD3>LOGFILE</KEYWORD3>\r
+                       <KEYWORD3>MANAGE</KEYWORD3>\r
+                       <KEYWORD3>MANUAL</KEYWORD3>\r
+                       <KEYWORD3>MAX</KEYWORD3>\r
+                       <KEYWORD3>MAXDATAFILES</KEYWORD3>\r
+                       <KEYWORD3>MAXINSTANCES</KEYWORD3>\r
+                       <KEYWORD3>MAXLOGFILES</KEYWORD3>\r
+                       <KEYWORD3>MAXLOGHISTORY</KEYWORD3>\r
+                       <KEYWORD3>MAXLOGMEMBERS</KEYWORD3>\r
+                       <KEYWORD3>MAXTRANS</KEYWORD3>\r
+                       <KEYWORD3>MAXVALUE</KEYWORD3>\r
+                       <KEYWORD3>MIN</KEYWORD3>\r
+                       <KEYWORD3>MINEXTENTS</KEYWORD3>\r
+                       <KEYWORD3>MINVALUE</KEYWORD3>\r
+                       <KEYWORD3>MODULE</KEYWORD3>\r
+                       <KEYWORD3>MOUNT</KEYWORD3>\r
+                       <KEYWORD3>NEXT</KEYWORD3>\r
+                       <KEYWORD3>NEW</KEYWORD3>\r
+                       <KEYWORD3>NOARCHIVELOG</KEYWORD3>\r
+                       <KEYWORD3>NOCACHE</KEYWORD3>\r
+                       <KEYWORD3>NOCYCLE</KEYWORD3>\r
+                       <KEYWORD3>NOMAXVALUE</KEYWORD3>\r
+                       <KEYWORD3>NOMINVALUE</KEYWORD3>\r
+                       <KEYWORD3>NONE</KEYWORD3>\r
+                       <KEYWORD3>NOORDER</KEYWORD3>\r
+                       <KEYWORD3>NORESETLOGS</KEYWORD3>\r
+                       <KEYWORD3>NORMAL</KEYWORD3>\r
+                       <KEYWORD3>NOSORT</KEYWORD3>\r
+                       <KEYWORD3>NUMERIC</KEYWORD3>\r
+                       <KEYWORD3>OFF</KEYWORD3>\r
+                       <KEYWORD3>OLD</KEYWORD3>\r
+                       <KEYWORD3>ONLY</KEYWORD3>\r
+                       <KEYWORD3>OPEN</KEYWORD3>\r
+                       <KEYWORD3>OPTIMAL</KEYWORD3>\r
+                       <KEYWORD3>OWN</KEYWORD3>\r
+                       <KEYWORD3>PACKAGE</KEYWORD3>\r
+                       <KEYWORD3>PARALLEL</KEYWORD3>\r
+                       <KEYWORD3>PCTINCREASE</KEYWORD3>\r
+                       <KEYWORD3>PCTUSED</KEYWORD3>\r
+                       <KEYWORD3>PLAN</KEYWORD3>\r
+                       <KEYWORD3>PLI</KEYWORD3>\r
+                       <KEYWORD3>PRECISION</KEYWORD3>\r
+                       <KEYWORD3>PRIMARY</KEYWORD3>\r
+                       <KEYWORD3>PRIVATE</KEYWORD3>\r
+                       <KEYWORD3>PROCEDURE</KEYWORD3>\r
+                       <KEYWORD3>PROFILE</KEYWORD3>\r
+                       <KEYWORD3>QUOTA</KEYWORD3>\r
+                       <KEYWORD3>READ</KEYWORD3>\r
+                       <KEYWORD3>REAL</KEYWORD3>\r
+                       <KEYWORD3>RECOVER</KEYWORD3>\r
+                       <KEYWORD3>REFERENCES</KEYWORD3>\r
+                       <KEYWORD3>REFERENCING</KEYWORD3>\r
+                       <KEYWORD3>RESETLOGS</KEYWORD3>\r
+                       <KEYWORD3>RESTRICTED</KEYWORD3>\r
+                       <KEYWORD3>REUSE</KEYWORD3>\r
+                       <KEYWORD3>ROLE</KEYWORD3>\r
+                       <KEYWORD3>ROLES</KEYWORD3>\r
+                       <KEYWORD3>ROLLBACK</KEYWORD3>\r
+                       <KEYWORD3>SAVEPOINT</KEYWORD3>\r
+                       <KEYWORD3>SCHEMA</KEYWORD3>\r
+                       <KEYWORD3>SCN</KEYWORD3>\r
+                       <KEYWORD3>SECTION</KEYWORD3>\r
+                       <KEYWORD3>SEGMENT</KEYWORD3>\r
+                       <KEYWORD3>SEQUENCE</KEYWORD3>\r
+                       <KEYWORD3>SHARED</KEYWORD3>\r
+                       <KEYWORD3>SNAPSHOT</KEYWORD3>\r
+                       <KEYWORD3>SOME</KEYWORD3>\r
+                       <KEYWORD3>SORT</KEYWORD3>\r
+                       <KEYWORD3>SQL</KEYWORD3>\r
+                       <KEYWORD3>SQLCODE</KEYWORD3>\r
+                       <KEYWORD3>SQLERROR</KEYWORD3>\r
+                       <KEYWORD3>SQLSTATE</KEYWORD3>\r
+                       <KEYWORD3>STATEMENT_ID</KEYWORD3>\r
+                       <KEYWORD3>STATISTICS</KEYWORD3>\r
+                       <KEYWORD3>STOP</KEYWORD3>\r
+                       <KEYWORD3>STORAGE</KEYWORD3>\r
+                       <KEYWORD3>SUM</KEYWORD3>\r
+                       <KEYWORD3>SWITCH</KEYWORD3>\r
+                       <KEYWORD3>SYSTEM</KEYWORD3>\r
+                       <KEYWORD3>TABLES</KEYWORD3>\r
+                       <KEYWORD3>TABLESPACE</KEYWORD3>\r
+                       <KEYWORD3>TEMPORARY</KEYWORD3>\r
+                       <KEYWORD3>THREAD</KEYWORD3>\r
+                       <KEYWORD3>TIME</KEYWORD3>\r
+                       <KEYWORD3>TRACING</KEYWORD3>\r
+                       <KEYWORD3>TRANSACTION</KEYWORD3>\r
+                       <KEYWORD3>TRIGGERS</KEYWORD3>\r
+                       <KEYWORD3>TRUNCATE</KEYWORD3>\r
+                       <KEYWORD3>UNDER</KEYWORD3>\r
+                       <KEYWORD3>UNLIMITED</KEYWORD3>\r
+                       <KEYWORD3>UNTIL</KEYWORD3>\r
+                       <KEYWORD3>USE</KEYWORD3>\r
+                       <KEYWORD3>USING</KEYWORD3>\r
+                       <KEYWORD3>WHEN</KEYWORD3>\r
+                       <KEYWORD3>WRITE</KEYWORD3>\r
+                       <KEYWORD3>WORK</KEYWORD3>\r
+                       -->\r
+\r
+                       <LITERAL2>[COPY-PREFIX]</LITERAL2>\r
+                       <LITERAL2>[COUNT]</LITERAL2>\r
+                       <LITERAL2>[DISPLAY]</LITERAL2>\r
+                       <LITERAL2>[EXECUTE]</LITERAL2>\r
+                       <LITERAL2>[PG]</LITERAL2>\r
+                       <LITERAL2>[PREFIX]</LITERAL2>\r
+                       <LITERAL2>[PROGRAM]</LITERAL2>\r
+                       <LITERAL2>[SPECIAL-PREFIX]</LITERAL2>\r
+                       <LITERAL2>[TESTCASE]</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/coldfusion.xml b/extra/xmode/modes/coldfusion.xml
new file mode 100644 (file)
index 0000000..8385df7
--- /dev/null
@@ -0,0 +1,645 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- CFML comment -->\r
+               <SPAN TYPE="COMMENT4">\r
+                       <BEGIN>&lt;!---</BEGIN>\r
+                       <END>---&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- CFSCRIPT multi-line comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <!-- CFSCRIPT single-line comment -->\r
+               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT3">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- CFScript -->\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="CFSCRIPT">\r
+                       <BEGIN>&lt;CFSCRIPT</BEGIN>\r
+                       <END>&lt;/CFSCRIPT&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- CFML markup start tags -->\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="CFTAGS">\r
+                       <BEGIN>&lt;CF</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- CFML markup end tags -->\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="CFTAGS">\r
+                       <BEGIN>&lt;/CF</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="html::JAVASCRIPT">\r
+                       <BEGIN>&lt;SCRIPT</BEGIN>\r
+                       <END>&lt;/SCRIPT&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="html::CSS">\r
+                       <BEGIN>&lt;STYLE</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="TAGS" DEFAULT="MARKUP" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+\r
+               <!-- CFML markup start tags -->\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="CFTAGS">\r
+                       <BEGIN>&lt;CF</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- CFML markup end tags -->\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="CFTAGS">\r
+                       <BEGIN>&lt;/CF</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- CFML markup start tags -->\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="CFSCRIPT">\r
+                       <BEGIN>&lt;CFSCRIPT</BEGIN>\r
+                       <END>&lt;/CFSCRIPT&gt;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="CFSCRIPT" DEFAULT="KEYWORD1" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+\r
+               <!-- CFSCRIPT multi-line comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <!-- CFSCRIPT single-line comment -->\r
+               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LABEL">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LABEL">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="LITERAL2">(</SEQ>\r
+               <SEQ TYPE="LITERAL2">)</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">!!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;&amp;</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <FUNCTION>{</FUNCTION>\r
+                       <FUNCTION>}</FUNCTION>\r
+                       <FUNCTION>for</FUNCTION>\r
+                       <FUNCTION>while</FUNCTION>\r
+                       <FUNCTION>if</FUNCTION>\r
+                       <FUNCTION>}else</FUNCTION>\r
+                       <FUNCTION>}else{</FUNCTION>\r
+                       <FUNCTION>if(</FUNCTION>\r
+                       <FUNCTION>else</FUNCTION>\r
+                       <FUNCTION>break</FUNCTION>\r
+\r
+                       <FUNCTION>ArrayAppend</FUNCTION>\r
+                       <FUNCTION>ArrayAvg</FUNCTION>\r
+                       <FUNCTION>ArrayClear</FUNCTION>\r
+                       <FUNCTION>ArrayDeleteAt</FUNCTION>\r
+                       <FUNCTION>ArrayInsertAt</FUNCTION>\r
+                       <FUNCTION>ArrayIsEmpty</FUNCTION>\r
+                       <FUNCTION>ArrayLen</FUNCTION>\r
+                       <FUNCTION>ArrayMax</FUNCTION>\r
+                       <FUNCTION>ArrayMin</FUNCTION>\r
+                       <FUNCTION>ArrayNew</FUNCTION>\r
+                       <FUNCTION>ArrayPrepend</FUNCTION>\r
+                       <FUNCTION>ArrayResize</FUNCTION>\r
+                       <FUNCTION>ArraySet</FUNCTION>\r
+                       <FUNCTION>ArraySort</FUNCTION>\r
+                       <FUNCTION>ArraySum</FUNCTION>\r
+                       <FUNCTION>ArraySwap</FUNCTION>\r
+                       <FUNCTION>ArrayToList</FUNCTION>\r
+                       <FUNCTION>IsArray</FUNCTION>\r
+                       <FUNCTION>ListToArray</FUNCTION>\r
+\r
+                       <FUNCTION>CreateDate</FUNCTION>\r
+                       <FUNCTION>CreateDateTime</FUNCTION>\r
+                       <FUNCTION>CreateODBCTime</FUNCTION>\r
+                       <FUNCTION>CreateODBCDate</FUNCTION>\r
+                       <FUNCTION>CreateODBCDateTime</FUNCTION>\r
+                       <FUNCTION>CreateTime</FUNCTION>\r
+                       <FUNCTION>CreateTimeSpan</FUNCTION>\r
+                       <FUNCTION>DateAdd</FUNCTION>\r
+                       <FUNCTION>DateCompare</FUNCTION>\r
+                       <FUNCTION>DateDiff</FUNCTION>\r
+                       <FUNCTION>DatePart</FUNCTION>\r
+                       <FUNCTION>Day</FUNCTION>\r
+                       <FUNCTION>DayOfWeek</FUNCTION>\r
+                       <FUNCTION>DayOfWeekAsString</FUNCTION>\r
+                       <FUNCTION>DayOfYear</FUNCTION>\r
+                       <FUNCTION>DaysInMonth</FUNCTION>\r
+                       <FUNCTION>DaysInYear</FUNCTION>\r
+                       <FUNCTION>FirstDayOfMonth</FUNCTION>\r
+                       <FUNCTION>Hour</FUNCTION>\r
+                       <FUNCTION>Minute</FUNCTION>\r
+                       <FUNCTION>Month</FUNCTION>\r
+                       <FUNCTION>MonthAsString</FUNCTION>\r
+                       <FUNCTION>Now</FUNCTION>\r
+                       <FUNCTION>ParseDateTime</FUNCTION>\r
+                       <FUNCTION>Quarter</FUNCTION>\r
+                       <FUNCTION>Second</FUNCTION>\r
+                       <FUNCTION>Week</FUNCTION>\r
+                       <FUNCTION>Year</FUNCTION>\r
+\r
+                       <FUNCTION>IsArray</FUNCTION>\r
+                       <FUNCTION>IsAuthenticated</FUNCTION>\r
+                       <FUNCTION>IsAuthorized</FUNCTION>\r
+                       <FUNCTION>IsBoolean</FUNCTION>\r
+                       <FUNCTION>IsDate</FUNCTION>\r
+                       <FUNCTION>IsDebugMode</FUNCTION>\r
+                       <FUNCTION>IsDefined</FUNCTION>\r
+                       <FUNCTION>IsLeapYear</FUNCTION>\r
+                       <FUNCTION>IsNumeric</FUNCTION>\r
+                       <FUNCTION>IsNumericDate</FUNCTION>\r
+                       <FUNCTION>IsQuery</FUNCTION>\r
+                       <FUNCTION>IsSimpleValue</FUNCTION>\r
+                       <FUNCTION>IsStruct</FUNCTION>\r
+\r
+                       <FUNCTION>DateFormat</FUNCTION>\r
+                       <FUNCTION>DecimalFormat</FUNCTION>\r
+                       <FUNCTION>DollarFormat</FUNCTION>\r
+                       <FUNCTION>FormatBaseN</FUNCTION>\r
+                       <FUNCTION>HTMLCodeFormat</FUNCTION>\r
+                       <FUNCTION>HTMLEditFormat</FUNCTION>\r
+                       <FUNCTION>NumberFormat</FUNCTION>\r
+                       <FUNCTION>ParagraphFormat</FUNCTION>\r
+                       <FUNCTION>TimeFormat</FUNCTION>\r
+                       <FUNCTION>YesNoFormat</FUNCTION>\r
+\r
+                       <FUNCTION>DE</FUNCTION>\r
+                       <FUNCTION>Evaluate</FUNCTION>\r
+                       <FUNCTION>IIf</FUNCTION>\r
+                       <FUNCTION>SetVariable</FUNCTION>\r
+\r
+                       <FUNCTION>ArrayToList</FUNCTION>\r
+                       <FUNCTION>ListAppend</FUNCTION>\r
+                       <FUNCTION>ListChangeDelims</FUNCTION>\r
+                       <FUNCTION>ListContains</FUNCTION>\r
+                       <FUNCTION>ListContainsNoCase</FUNCTION>\r
+                       <FUNCTION>ListDeleteAt</FUNCTION>\r
+                       <FUNCTION>ListFind</FUNCTION>\r
+                       <FUNCTION>ListFindNoCase</FUNCTION>\r
+                       <FUNCTION>ListFirst</FUNCTION>\r
+                       <FUNCTION>ListGetAt</FUNCTION>\r
+                       <FUNCTION>ListInsertAt</FUNCTION>\r
+                       <FUNCTION>ListLast</FUNCTION>\r
+                       <FUNCTION>ListLen</FUNCTION>\r
+                       <FUNCTION>ListPrepend</FUNCTION>\r
+                       <FUNCTION>ListRest</FUNCTION>\r
+                       <FUNCTION>ListSetAt</FUNCTION>\r
+                       <FUNCTION>ListToArray</FUNCTION>\r
+\r
+                       <FUNCTION>StructClear</FUNCTION>\r
+                       <FUNCTION>StructCopy</FUNCTION>\r
+                       <FUNCTION>StructCount</FUNCTION>\r
+                       <FUNCTION>StructDelete</FUNCTION>\r
+                       <FUNCTION>StructFind</FUNCTION>\r
+                       <FUNCTION>StructInsert</FUNCTION>\r
+                       <FUNCTION>StructIsEmpty</FUNCTION>\r
+                       <FUNCTION>StructKeyExists</FUNCTION>\r
+                       <FUNCTION>StructNew</FUNCTION>\r
+                       <FUNCTION>StructUpdate</FUNCTION>\r
+\r
+                       <FUNCTION>GetLocale</FUNCTION>\r
+                       <FUNCTION>LSCurrencyFormat</FUNCTION>\r
+                       <FUNCTION>LSDateFormat</FUNCTION>\r
+                       <FUNCTION>LSIsCurrency</FUNCTION>\r
+                       <FUNCTION>LSIsDate</FUNCTION>\r
+                       <FUNCTION>LSIsNumeric</FUNCTION>\r
+                       <FUNCTION>LSNumberFormat</FUNCTION>\r
+                       <FUNCTION>LSParseCurrency</FUNCTION>\r
+                       <FUNCTION>LSParseDateTime</FUNCTION>\r
+                       <FUNCTION>LSParseNumber</FUNCTION>\r
+                       <FUNCTION>LSTimeFormat</FUNCTION>\r
+                       <FUNCTION>SetLocale</FUNCTION>\r
+\r
+                       <FUNCTION>Abs</FUNCTION>\r
+                       <FUNCTION>Atn</FUNCTION>\r
+                       <FUNCTION>BitAnd</FUNCTION>\r
+                       <FUNCTION>BitMaskClear</FUNCTION>\r
+                       <FUNCTION>BitMaskRead</FUNCTION>\r
+                       <FUNCTION>BitMaskSet</FUNCTION>\r
+                       <FUNCTION>BitNot</FUNCTION>\r
+                       <FUNCTION>BitOr</FUNCTION>\r
+                       <FUNCTION>BitSHLN</FUNCTION>\r
+                       <FUNCTION>BitSHRN</FUNCTION>\r
+                       <FUNCTION>BitXor</FUNCTION>\r
+                       <FUNCTION>Ceiling</FUNCTION>\r
+                       <FUNCTION>Cos</FUNCTION>\r
+                       <FUNCTION>DecrementValue</FUNCTION>\r
+                       <FUNCTION>Exp</FUNCTION>\r
+                       <FUNCTION>Fix</FUNCTION>\r
+                       <FUNCTION>IncrementValue</FUNCTION>\r
+                       <FUNCTION>InputBaseN</FUNCTION>\r
+                       <FUNCTION>Int</FUNCTION>\r
+                       <FUNCTION>Log</FUNCTION>\r
+                       <FUNCTION>Log10</FUNCTION>\r
+                       <FUNCTION>Max</FUNCTION>\r
+                       <FUNCTION>Min</FUNCTION>\r
+                       <FUNCTION>Pi</FUNCTION>\r
+                       <FUNCTION>Rand</FUNCTION>\r
+                       <FUNCTION>Randomize</FUNCTION>\r
+                       <FUNCTION>RandRange</FUNCTION>\r
+                       <FUNCTION>Round</FUNCTION>\r
+                       <FUNCTION>Sgn</FUNCTION>\r
+                       <FUNCTION>Sin</FUNCTION>\r
+                       <FUNCTION>Sqr</FUNCTION>\r
+                       <FUNCTION>Tan</FUNCTION>\r
+\r
+                       <FUNCTION>Asc</FUNCTION>\r
+                       <FUNCTION>Chr</FUNCTION>\r
+                       <FUNCTION>CJustify</FUNCTION>\r
+                       <FUNCTION>Compare</FUNCTION>\r
+                       <FUNCTION>CompareNoCase</FUNCTION>\r
+                       <FUNCTION>Find</FUNCTION>\r
+                       <FUNCTION>FindNoCase</FUNCTION>\r
+                       <FUNCTION>FindOneOf</FUNCTION>\r
+                       <FUNCTION>GetToken</FUNCTION>\r
+                       <FUNCTION>Insert</FUNCTION>\r
+                       <FUNCTION>LCase</FUNCTION>\r
+                       <FUNCTION>Left</FUNCTION>\r
+                       <FUNCTION>Len</FUNCTION>\r
+                       <FUNCTION>LJustify</FUNCTION>\r
+                       <FUNCTION>LTrim</FUNCTION>\r
+                       <FUNCTION>Mid</FUNCTION>\r
+                       <FUNCTION>REFind</FUNCTION>\r
+                       <FUNCTION>REFindNoCase</FUNCTION>\r
+                       <FUNCTION>RemoveChars</FUNCTION>\r
+                       <FUNCTION>RepeatString</FUNCTION>\r
+                       <FUNCTION>Replace</FUNCTION>\r
+                       <FUNCTION>ReplaceList</FUNCTION>\r
+                       <FUNCTION>ReplaceNoCase</FUNCTION>\r
+                       <FUNCTION>REReplace</FUNCTION>\r
+                       <FUNCTION>REReplaceNoCase</FUNCTION>\r
+                       <FUNCTION>Reverse</FUNCTION>\r
+                       <FUNCTION>Right</FUNCTION>\r
+                       <FUNCTION>RJustify</FUNCTION>\r
+                       <FUNCTION>RTrim</FUNCTION>\r
+                       <FUNCTION>SpanExcluding</FUNCTION>\r
+                       <FUNCTION>SpanIncluding</FUNCTION>\r
+                       <FUNCTION>Trim</FUNCTION>\r
+                       <FUNCTION>UCase</FUNCTION>\r
+                       <FUNCTION>Val</FUNCTION>\r
+\r
+                       <FUNCTION>DirectoryExists</FUNCTION>\r
+                       <FUNCTION>ExpandPath</FUNCTION>\r
+                       <FUNCTION>FileExists</FUNCTION>\r
+                       <FUNCTION>GetDirectoryFromPath</FUNCTION>\r
+                       <FUNCTION>GetFileFromPath</FUNCTION>\r
+                       <FUNCTION>GetTempDirectory</FUNCTION>\r
+                       <FUNCTION>GetTempFile</FUNCTION>\r
+                       <FUNCTION>GetTemplatePath</FUNCTION>\r
+\r
+                       <FUNCTION>QueryAddRow</FUNCTION>\r
+                       <FUNCTION>QueryNew</FUNCTION>\r
+                       <FUNCTION>QuerySetCell</FUNCTION>\r
+\r
+                       <FUNCTION>Decrypt</FUNCTION>\r
+                       <FUNCTION>DeleteClientVariable</FUNCTION>\r
+                       <FUNCTION>Encrypt</FUNCTION>\r
+                       <FUNCTION>GetBaseTagData</FUNCTION>\r
+                       <FUNCTION>GetBaseTagList</FUNCTION>\r
+                       <FUNCTION>GetClientVariablesList</FUNCTION>\r
+                       <FUNCTION>GetTickCount</FUNCTION>\r
+                       <FUNCTION>PreserveSingleQuotes</FUNCTION>\r
+                       <FUNCTION>QuotedValueList</FUNCTION>\r
+                       <FUNCTION>StripCR</FUNCTION>\r
+                       <FUNCTION>URLEncodedFormat</FUNCTION>\r
+                       <FUNCTION>ValueList</FUNCTION>\r
+                       <FUNCTION>WriteOutput</FUNCTION>\r
+\r
+                       <FUNCTION>ParameterExists</FUNCTION>\r
+\r
+                       <OPERATOR>IS</OPERATOR>\r
+                       <OPERATOR>EQ</OPERATOR>\r
+                       <OPERATOR>NEQ</OPERATOR>\r
+                       <OPERATOR>GT</OPERATOR>\r
+                       <OPERATOR>GTE</OPERATOR>\r
+                       <OPERATOR>LT</OPERATOR>\r
+                       <OPERATOR>LTE</OPERATOR>\r
+\r
+                       <OPERATOR>LESS</OPERATOR>\r
+                       <OPERATOR>GREATER</OPERATOR>\r
+                       <OPERATOR>THAN</OPERATOR>\r
+\r
+                       <OPERATOR>AND</OPERATOR>\r
+                       <OPERATOR>OR</OPERATOR>\r
+                       <OPERATOR>NOT</OPERATOR>\r
+                       <OPERATOR>XOR</OPERATOR>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="CFTAGS" DEFAULT="KEYWORD3">\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="KEYWORD3">##</SEQ>\r
+\r
+               <SPAN TYPE="LITERAL2">\r
+                       <BEGIN>#</BEGIN>\r
+                       <END>#</END>\r
+               </SPAN>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD2>ArrayAppend</KEYWORD2>\r
+                       <KEYWORD2>ArrayAvg</KEYWORD2>\r
+                       <KEYWORD2>ArrayClear</KEYWORD2>\r
+                       <KEYWORD2>ArrayDeleteAt</KEYWORD2>\r
+                       <KEYWORD2>ArrayInsertAt</KEYWORD2>\r
+                       <KEYWORD2>ArrayIsEmpty</KEYWORD2>\r
+                       <KEYWORD2>ArrayLen</KEYWORD2>\r
+                       <KEYWORD2>ArrayMax</KEYWORD2>\r
+                       <KEYWORD2>ArrayMin</KEYWORD2>\r
+                       <KEYWORD2>ArrayNew</KEYWORD2>\r
+                       <KEYWORD2>ArrayPrepend</KEYWORD2>\r
+                       <KEYWORD2>ArrayResize</KEYWORD2>\r
+                       <KEYWORD2>ArraySet</KEYWORD2>\r
+                       <KEYWORD2>ArraySort</KEYWORD2>\r
+                       <KEYWORD2>ArraySum</KEYWORD2>\r
+                       <KEYWORD2>ArraySwap</KEYWORD2>\r
+                       <KEYWORD2>ArrayToList</KEYWORD2>\r
+                       <KEYWORD2>IsArray</KEYWORD2>\r
+                       <KEYWORD2>ListToArray</KEYWORD2>\r
+\r
+                       <KEYWORD2>CreateDate</KEYWORD2>\r
+                       <KEYWORD2>CreateDateTime</KEYWORD2>\r
+                       <KEYWORD2>CreateODBCTime</KEYWORD2>\r
+                       <KEYWORD2>CreateODBCDate</KEYWORD2>\r
+                       <KEYWORD2>CreateODBCDateTime</KEYWORD2>\r
+                       <KEYWORD2>CreateTime</KEYWORD2>\r
+                       <KEYWORD2>CreateTimeSpan</KEYWORD2>\r
+                       <KEYWORD2>DateAdd</KEYWORD2>\r
+                       <KEYWORD2>DateCompare</KEYWORD2>\r
+                       <KEYWORD2>DateDiff</KEYWORD2>\r
+                       <KEYWORD2>DatePart</KEYWORD2>\r
+                       <KEYWORD2>Day</KEYWORD2>\r
+                       <KEYWORD2>DayOfWeek</KEYWORD2>\r
+                       <KEYWORD2>DayOfWeekAsString</KEYWORD2>\r
+                       <KEYWORD2>DayOfYear</KEYWORD2>\r
+                       <KEYWORD2>DaysInMonth</KEYWORD2>\r
+                       <KEYWORD2>DaysInYear</KEYWORD2>\r
+                       <KEYWORD2>FirstDayOfMonth</KEYWORD2>\r
+                       <KEYWORD2>Hour</KEYWORD2>\r
+                       <KEYWORD2>Minute</KEYWORD2>\r
+                       <KEYWORD2>Month</KEYWORD2>\r
+                       <KEYWORD2>MonthAsString</KEYWORD2>\r
+                       <KEYWORD2>Now</KEYWORD2>\r
+                       <KEYWORD2>ParseDateTime</KEYWORD2>\r
+                       <KEYWORD2>Quarter</KEYWORD2>\r
+                       <KEYWORD2>Second</KEYWORD2>\r
+                       <KEYWORD2>Week</KEYWORD2>\r
+                       <KEYWORD2>Year</KEYWORD2>\r
+\r
+                       <KEYWORD2>IsArray</KEYWORD2>\r
+                       <KEYWORD2>IsAuthenticated</KEYWORD2>\r
+                       <KEYWORD2>IsAuthorized</KEYWORD2>\r
+                       <KEYWORD2>IsBoolean</KEYWORD2>\r
+                       <KEYWORD2>IsDate</KEYWORD2>\r
+                       <KEYWORD2>IsDebugMode</KEYWORD2>\r
+                       <KEYWORD2>IsDefined</KEYWORD2>\r
+                       <KEYWORD2>IsLeapYear</KEYWORD2>\r
+                       <KEYWORD2>IsNumeric</KEYWORD2>\r
+                       <KEYWORD2>IsNumericDate</KEYWORD2>\r
+                       <KEYWORD2>IsQuery</KEYWORD2>\r
+                       <KEYWORD2>IsSimpleValue</KEYWORD2>\r
+                       <KEYWORD2>IsStruct</KEYWORD2>\r
+\r
+                       <KEYWORD2>DateFormat</KEYWORD2>\r
+                       <KEYWORD2>DecimalFormat</KEYWORD2>\r
+                       <KEYWORD2>DollarFormat</KEYWORD2>\r
+                       <KEYWORD2>FormatBaseN</KEYWORD2>\r
+                       <KEYWORD2>HTMLCodeFormat</KEYWORD2>\r
+                       <KEYWORD2>HTMLEditFormat</KEYWORD2>\r
+                       <KEYWORD2>NumberFormat</KEYWORD2>\r
+                       <KEYWORD2>ParagraphFormat</KEYWORD2>\r
+                       <KEYWORD2>TimeFormat</KEYWORD2>\r
+                       <KEYWORD2>YesNoFormat</KEYWORD2>\r
+\r
+                       <KEYWORD2>DE</KEYWORD2>\r
+                       <KEYWORD2>Evaluate</KEYWORD2>\r
+                       <KEYWORD2>IIf</KEYWORD2>\r
+                       <KEYWORD2>SetVariable</KEYWORD2>\r
+\r
+                       <KEYWORD2>ArrayToList</KEYWORD2>\r
+                       <KEYWORD2>ListAppend</KEYWORD2>\r
+                       <KEYWORD2>ListChangeDelims</KEYWORD2>\r
+                       <KEYWORD2>ListContains</KEYWORD2>\r
+                       <KEYWORD2>ListContainsNoCase</KEYWORD2>\r
+                       <KEYWORD2>ListDeleteAt</KEYWORD2>\r
+                       <KEYWORD2>ListFind</KEYWORD2>\r
+                       <KEYWORD2>ListFindNoCase</KEYWORD2>\r
+                       <KEYWORD2>ListFirst</KEYWORD2>\r
+                       <KEYWORD2>ListGetAt</KEYWORD2>\r
+                       <KEYWORD2>ListInsertAt</KEYWORD2>\r
+                       <KEYWORD2>ListLast</KEYWORD2>\r
+                       <KEYWORD2>ListLen</KEYWORD2>\r
+                       <KEYWORD2>ListPrepend</KEYWORD2>\r
+                       <KEYWORD2>ListRest</KEYWORD2>\r
+                       <KEYWORD2>ListSetAt</KEYWORD2>\r
+                       <KEYWORD2>ListToArray</KEYWORD2>\r
+\r
+                       <KEYWORD2>StructClear</KEYWORD2>\r
+                       <KEYWORD2>StructCopy</KEYWORD2>\r
+                       <KEYWORD2>StructCount</KEYWORD2>\r
+                       <KEYWORD2>StructDelete</KEYWORD2>\r
+                       <KEYWORD2>StructFind</KEYWORD2>\r
+                       <KEYWORD2>StructInsert</KEYWORD2>\r
+                       <KEYWORD2>StructIsEmpty</KEYWORD2>\r
+                       <KEYWORD2>StructKeyExists</KEYWORD2>\r
+                       <KEYWORD2>StructNew</KEYWORD2>\r
+                       <KEYWORD2>StructUpdate</KEYWORD2>\r
+\r
+                       <KEYWORD2>GetLocale</KEYWORD2>\r
+                       <KEYWORD2>LSCurrencyFormat</KEYWORD2>\r
+                       <KEYWORD2>LSDateFormat</KEYWORD2>\r
+                       <KEYWORD2>LSIsCurrency</KEYWORD2>\r
+                       <KEYWORD2>LSIsDate</KEYWORD2>\r
+                       <KEYWORD2>LSIsNumeric</KEYWORD2>\r
+                       <KEYWORD2>LSNumberFormat</KEYWORD2>\r
+                       <KEYWORD2>LSParseCurrency</KEYWORD2>\r
+                       <KEYWORD2>LSParseDateTime</KEYWORD2>\r
+                       <KEYWORD2>LSParseNumber</KEYWORD2>\r
+                       <KEYWORD2>LSTimeFormat</KEYWORD2>\r
+                       <KEYWORD2>SetLocale</KEYWORD2>\r
+\r
+                       <KEYWORD2>Abs</KEYWORD2>\r
+                       <KEYWORD2>Atn</KEYWORD2>\r
+                       <KEYWORD2>BitAnd</KEYWORD2>\r
+                       <KEYWORD2>BitMaskClear</KEYWORD2>\r
+                       <KEYWORD2>BitMaskRead</KEYWORD2>\r
+                       <KEYWORD2>BitMaskSet</KEYWORD2>\r
+                       <KEYWORD2>BitNot</KEYWORD2>\r
+                       <KEYWORD2>BitOr</KEYWORD2>\r
+                       <KEYWORD2>BitSHLN</KEYWORD2>\r
+                       <KEYWORD2>BitSHRN</KEYWORD2>\r
+                       <KEYWORD2>BitXor</KEYWORD2>\r
+                       <KEYWORD2>Ceiling</KEYWORD2>\r
+                       <KEYWORD2>Cos</KEYWORD2>\r
+                       <KEYWORD2>DecrementValue</KEYWORD2>\r
+                       <KEYWORD2>Exp</KEYWORD2>\r
+                       <KEYWORD2>Fix</KEYWORD2>\r
+                       <KEYWORD2>IncrementValue</KEYWORD2>\r
+                       <KEYWORD2>InputBaseN</KEYWORD2>\r
+                       <KEYWORD2>Int</KEYWORD2>\r
+                       <KEYWORD2>Log</KEYWORD2>\r
+                       <KEYWORD2>Log10</KEYWORD2>\r
+                       <KEYWORD2>Max</KEYWORD2>\r
+                       <KEYWORD2>Min</KEYWORD2>\r
+                       <KEYWORD2>Pi</KEYWORD2>\r
+                       <KEYWORD2>Rand</KEYWORD2>\r
+                       <KEYWORD2>Randomize</KEYWORD2>\r
+                       <KEYWORD2>RandRange</KEYWORD2>\r
+                       <KEYWORD2>Round</KEYWORD2>\r
+                       <KEYWORD2>Sgn</KEYWORD2>\r
+                       <KEYWORD2>Sin</KEYWORD2>\r
+                       <KEYWORD2>Sqr</KEYWORD2>\r
+                       <KEYWORD2>Tan</KEYWORD2>\r
+\r
+                       <KEYWORD2>Asc</KEYWORD2>\r
+                       <KEYWORD2>Chr</KEYWORD2>\r
+                       <KEYWORD2>CJustify</KEYWORD2>\r
+                       <KEYWORD2>Compare</KEYWORD2>\r
+                       <KEYWORD2>CompareNoCase</KEYWORD2>\r
+                       <KEYWORD2>Find</KEYWORD2>\r
+                       <KEYWORD2>FindNoCase</KEYWORD2>\r
+                       <KEYWORD2>FindOneOf</KEYWORD2>\r
+                       <KEYWORD2>GetToken</KEYWORD2>\r
+                       <KEYWORD2>Insert</KEYWORD2>\r
+                       <KEYWORD2>LCase</KEYWORD2>\r
+                       <KEYWORD2>Left</KEYWORD2>\r
+                       <KEYWORD2>Len</KEYWORD2>\r
+                       <KEYWORD2>LJustify</KEYWORD2>\r
+                       <KEYWORD2>LTrim</KEYWORD2>\r
+                       <KEYWORD2>Mid</KEYWORD2>\r
+                       <KEYWORD2>REFind</KEYWORD2>\r
+                       <KEYWORD2>REFindNoCase</KEYWORD2>\r
+                       <KEYWORD2>RemoveChars</KEYWORD2>\r
+                       <KEYWORD2>RepeatString</KEYWORD2>\r
+                       <KEYWORD2>Replace</KEYWORD2>\r
+                       <KEYWORD2>ReplaceList</KEYWORD2>\r
+                       <KEYWORD2>ReplaceNoCase</KEYWORD2>\r
+                       <KEYWORD2>REReplace</KEYWORD2>\r
+                       <KEYWORD2>REReplaceNoCase</KEYWORD2>\r
+                       <KEYWORD2>Reverse</KEYWORD2>\r
+                       <KEYWORD2>Right</KEYWORD2>\r
+                       <KEYWORD2>RJustify</KEYWORD2>\r
+                       <KEYWORD2>RTrim</KEYWORD2>\r
+                       <KEYWORD2>SpanExcluding</KEYWORD2>\r
+                       <KEYWORD2>SpanIncluding</KEYWORD2>\r
+                       <KEYWORD2>Trim</KEYWORD2>\r
+                       <KEYWORD2>UCase</KEYWORD2>\r
+                       <KEYWORD2>Val</KEYWORD2>\r
+\r
+                       <KEYWORD2>DirectoryExists</KEYWORD2>\r
+                       <KEYWORD2>ExpandPath</KEYWORD2>\r
+                       <KEYWORD2>FileExists</KEYWORD2>\r
+                       <KEYWORD2>GetDirectoryFromPath</KEYWORD2>\r
+                       <KEYWORD2>GetFileFromPath</KEYWORD2>\r
+                       <KEYWORD2>GetTempDirectory</KEYWORD2>\r
+                       <KEYWORD2>GetTempFile</KEYWORD2>\r
+                       <KEYWORD2>GetTemplatePath</KEYWORD2>\r
+\r
+                       <KEYWORD2>QueryAddRow</KEYWORD2>\r
+                       <KEYWORD2>QueryNew</KEYWORD2>\r
+                       <KEYWORD2>QuerySetCell</KEYWORD2>\r
+\r
+                       <KEYWORD2>Decrypt</KEYWORD2>\r
+                       <KEYWORD2>DeleteClientVariable</KEYWORD2>\r
+                       <KEYWORD2>Encrypt</KEYWORD2>\r
+                       <KEYWORD2>GetBaseTagData</KEYWORD2>\r
+                       <KEYWORD2>GetBaseTagList</KEYWORD2>\r
+                       <KEYWORD2>GetClientVariablesList</KEYWORD2>\r
+                       <KEYWORD2>GetTickCount</KEYWORD2>\r
+                       <KEYWORD2>PreserveSingleQuotes</KEYWORD2>\r
+                       <KEYWORD2>QuotedValueList</KEYWORD2>\r
+                       <KEYWORD2>StripCR</KEYWORD2>\r
+                       <KEYWORD2>URLEncodedFormat</KEYWORD2>\r
+                       <KEYWORD2>ValueList</KEYWORD2>\r
+                       <KEYWORD2>WriteOutput</KEYWORD2>\r
+\r
+                       <KEYWORD2>ParameterExists</KEYWORD2>\r
+\r
+                       <OPERATOR>IS</OPERATOR>\r
+                       <OPERATOR>EQ</OPERATOR>\r
+                       <OPERATOR>NEQ</OPERATOR>\r
+                       <OPERATOR>GT</OPERATOR>\r
+                       <OPERATOR>GTE</OPERATOR>\r
+                       <OPERATOR>LT</OPERATOR>\r
+                       <OPERATOR>LTE</OPERATOR>\r
+\r
+                       <OPERATOR>LESS</OPERATOR>\r
+                       <OPERATOR>GREATER</OPERATOR>\r
+                       <OPERATOR>THAN</OPERATOR>\r
+\r
+                       <OPERATOR>AND</OPERATOR>\r
+                       <OPERATOR>OR</OPERATOR>\r
+                       <OPERATOR>NOT</OPERATOR>\r
+                       <OPERATOR>XOR</OPERATOR>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>
\ No newline at end of file
diff --git a/extra/xmode/modes/cplusplus.xml b/extra/xmode/modes/cplusplus.xml
new file mode 100644 (file)
index 0000000..b781056
--- /dev/null
@@ -0,0 +1,122 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- Extension of c.xml to add C++ specific syntax. -->\r
+<MODE>\r
+    <PROPS>\r
+        <PROPERTY NAME="commentStart" VALUE="/*" />\r
+        <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+        <PROPERTY NAME="lineComment" VALUE="//" />\r
+        <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+\r
+\r
+        <!-- Auto indent -->\r
+        <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+        <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+        <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />\r
+        <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />\r
+        <PROPERTY NAME="indentNextLine"\r
+            VALUE="(?!^\s*(#|//)).*(\b(if|while|for)\s*\(.*\)|\b(else|do)\b)[^{;]*$" />\r
+        <PROPERTY NAME="unindentThisLine"\r
+            VALUE="^\s*((case\b.*|[\p{Alpha}_][\p{Alnum}_]*)\s*:(?!:)).*$" />\r
+        <PROPERTY NAME="electricKeys" VALUE=":" />\r
+    </PROPS>\r
+\r
+    <RULES\r
+        ESCAPE="\" IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+        <EOL_SPAN TYPE="KEYWORD2" AT_WHITESPACE_END="TRUE" DELEGATE="CPP">#</EOL_SPAN>\r
+\r
+        <IMPORT DELEGATE="LEX"/>\r
+        <IMPORT DELEGATE="CORE"/>\r
+    </RULES>\r
+\r
+    <!-- Core C++ language -->\r
+    <RULES SET="LEX"\r
+        ESCAPE="\" IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+\r
+        <!-- A hack not to mark namespace qualification like "std::"\r
+            as labels. -->\r
+        <SEQ TYPE="OPERATOR">::</SEQ>\r
+\r
+        <IMPORT DELEGATE="c::LEX"/>\r
+    </RULES>\r
+\r
+    <!-- Core C++ language -->\r
+    <RULES SET="CORE"\r
+        ESCAPE="\" IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+\r
+        <IMPORT DELEGATE="c::CORE"/>\r
+\r
+        <KEYWORDS>\r
+            <KEYWORD3>catch</KEYWORD3>\r
+            <KEYWORD3>class</KEYWORD3>\r
+            <KEYWORD3>const_cast</KEYWORD3>\r
+            <KEYWORD1>delete</KEYWORD1>\r
+            <KEYWORD3>dynamic_cast</KEYWORD3>\r
+            <KEYWORD1>explicit</KEYWORD1>\r
+            <KEYWORD2>export</KEYWORD2>\r
+            <KEYWORD1>friend</KEYWORD1>\r
+            <KEYWORD3>mutable</KEYWORD3>\r
+            <KEYWORD2>namespace</KEYWORD2>\r
+            <KEYWORD1>new</KEYWORD1>\r
+            <KEYWORD3>operator</KEYWORD3>\r
+            <KEYWORD1>private</KEYWORD1>\r
+            <KEYWORD1>protected</KEYWORD1>\r
+            <KEYWORD1>public</KEYWORD1>\r
+            <KEYWORD3>reinterpret_cast</KEYWORD3>\r
+            <KEYWORD3>static_assert</KEYWORD3>\r
+            <KEYWORD3>static_cast</KEYWORD3>\r
+            <KEYWORD3>template</KEYWORD3>\r
+            <LITERAL2>this</LITERAL2>\r
+            <KEYWORD1>throw</KEYWORD1>\r
+            <KEYWORD1>try</KEYWORD1>\r
+            <KEYWORD3>typeid</KEYWORD3>\r
+            <KEYWORD3>typename</KEYWORD3>\r
+            <KEYWORD2>using</KEYWORD2>\r
+            <KEYWORD1>virtual</KEYWORD1>\r
+        </KEYWORDS>\r
+    </RULES>\r
+\r
+    <!-- Preprocessor specific rules -->\r
+    <RULES SET="CPP"\r
+        ESCAPE="\" IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+\r
+        <EOL_SPAN_REGEXP HASH_CHAR="include" TYPE="MARKUP" DELEGATE="c::INCLUDE">include\b</EOL_SPAN_REGEXP>\r
+        <EOL_SPAN_REGEXP HASH_CHAR="define" TYPE="MARKUP" DELEGATE="DEFINE">define\b</EOL_SPAN_REGEXP>\r
+        <EOL_SPAN_REGEXP HASH_CHAR="endif" TYPE="MARKUP" DELEGATE="c::LEX">endif\b</EOL_SPAN_REGEXP>\r
+        <EOL_SPAN_REGEXP HASH_CHAR="elif" TYPE="MARKUP" DELEGATE="c::CONDITION">elif\b</EOL_SPAN_REGEXP>\r
+        <EOL_SPAN_REGEXP HASH_CHAR="if" TYPE="MARKUP" DELEGATE="c::CONDITION">if\b</EOL_SPAN_REGEXP>\r
+\r
+        <IMPORT DELEGATE="LEX"/>\r
+\r
+        <!-- Directives -->\r
+        <KEYWORDS>\r
+            <MARKUP>ifdef</MARKUP>\r
+            <MARKUP>ifndef</MARKUP>\r
+            <MARKUP>else</MARKUP>\r
+            <MARKUP>error</MARKUP>\r
+            <MARKUP>line</MARKUP>\r
+            <MARKUP>pragma</MARKUP>\r
+            <MARKUP>undef</MARKUP>\r
+            <MARKUP>warning</MARKUP>\r
+        </KEYWORDS>\r
+    </RULES>\r
+\r
+    <!-- After #define directive -->\r
+    <!-- Almost same as the normal code,\r
+        except two additional operators # and ##. -->\r
+    <RULES SET="DEFINE"\r
+        ESCAPE="\" IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+        <SEQ TYPE="OPERATOR">#</SEQ>\r
+        <IMPORT DELEGATE="LEX"/>\r
+        <IMPORT DELEGATE="CORE"/>\r
+    </RULES>\r
+\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/csharp.xml b/extra/xmode/modes/csharp.xml
new file mode 100644 (file)
index 0000000..f28d238
--- /dev/null
@@ -0,0 +1,189 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+\r
+               <!-- Auto indent -->\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />\r
+               <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />\r
+               <PROPERTY NAME="indentNextLine"\r
+                       VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+               <PROPERTY NAME="unindentThisLine"\r
+                       VALUE="^.*(default:\s*|case.*:.*)$" />\r
+               <PROPERTY NAME="electricKeys" VALUE=":" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\"\r
+               IGNORE_CASE="FALSE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="(0x[\p{XDigit}]+[lL]?|[\p{Digit}]+(e[\p{Digit}]*)?[lLdDfF]?)">\r
+\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <!-- DocComments may have XML in them -->\r
+               <EOL_SPAN TYPE="COMMENT3" DELEGATE="DOC_COMMENT">///</EOL_SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+\r
+               <!-- verbatim strings -->\r
+               <SPAN TYPE="LITERAL3" NO_LINE_BREAK="FALSE" NO_ESCAPE="TRUE">\r
+                       <BEGIN>@"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="KEYWORD2">#if</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#else</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#elif</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#endif</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#define</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#undef</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#warning</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#error</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#line</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#region</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#endregion</EOL_SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+               <SEQ TYPE="OPERATOR">;</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">\</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>abstract</KEYWORD1>\r
+                       <KEYWORD1>as</KEYWORD1>\r
+                       <KEYWORD1>base</KEYWORD1>\r
+                       <KEYWORD1>break</KEYWORD1>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>catch</KEYWORD1>\r
+                       <KEYWORD1>checked</KEYWORD1>\r
+                       <KEYWORD1>const</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+                       <KEYWORD1>decimal</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+                       <KEYWORD1>delegate</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>explicit</KEYWORD1>\r
+                       <KEYWORD1>extern</KEYWORD1>\r
+                       <KEYWORD1>finally</KEYWORD1>\r
+                       <KEYWORD1>fixed</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>foreach</KEYWORD1>\r
+                       <KEYWORD1>goto</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>implicit</KEYWORD1>\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <KEYWORD1>internal</KEYWORD1>\r
+                       <KEYWORD1>is</KEYWORD1>\r
+                       <KEYWORD1>lock</KEYWORD1>\r
+                       <KEYWORD1>new</KEYWORD1>\r
+                       <KEYWORD1>operator</KEYWORD1>\r
+                       <KEYWORD1>out</KEYWORD1>\r
+                       <KEYWORD1>override</KEYWORD1>\r
+                       <KEYWORD1>params</KEYWORD1>\r
+                       <KEYWORD1>private</KEYWORD1>\r
+                       <KEYWORD1>protected</KEYWORD1>\r
+                       <KEYWORD1>public</KEYWORD1>\r
+                       <KEYWORD1>readonly</KEYWORD1>\r
+                       <KEYWORD1>ref</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>sealed</KEYWORD1>\r
+                       <KEYWORD1>sizeof</KEYWORD1>\r
+                       <KEYWORD1>stackalloc</KEYWORD1>\r
+                       <KEYWORD1>static</KEYWORD1>\r
+                       <KEYWORD1>switch</KEYWORD1>\r
+                       <KEYWORD1>throw</KEYWORD1>\r
+                       <KEYWORD1>try</KEYWORD1>\r
+                       <KEYWORD1>typeof</KEYWORD1>\r
+                       <KEYWORD1>unchecked</KEYWORD1>\r
+                       <KEYWORD1>unsafe</KEYWORD1>\r
+                       <KEYWORD1>virtual</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+\r
+                       <KEYWORD2>using</KEYWORD2>\r
+                       <KEYWORD2>namespace</KEYWORD2>\r
+\r
+                       <KEYWORD3>bool</KEYWORD3>\r
+                       <KEYWORD3>byte</KEYWORD3>\r
+                       <KEYWORD3>char</KEYWORD3>\r
+                       <KEYWORD3>class</KEYWORD3>\r
+                       <KEYWORD3>double</KEYWORD3>\r
+                       <KEYWORD3>enum</KEYWORD3>\r
+                       <KEYWORD3>event</KEYWORD3>\r
+                       <KEYWORD3>float</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>interface</KEYWORD3>\r
+                       <KEYWORD3>long</KEYWORD3>\r
+                       <KEYWORD3>object</KEYWORD3>\r
+                       <KEYWORD3>sbyte</KEYWORD3>\r
+                       <KEYWORD3>short</KEYWORD3>\r
+                       <KEYWORD3>string</KEYWORD3>\r
+                       <KEYWORD3>struct</KEYWORD3>\r
+                       <KEYWORD3>uint</KEYWORD3>\r
+                       <KEYWORD3>ulong</KEYWORD3>\r
+                       <KEYWORD3>ushort</KEYWORD3>\r
+                       <KEYWORD3>void</KEYWORD3>\r
+\r
+                       <LITERAL2>false</LITERAL2>\r
+                       <LITERAL2>null</LITERAL2>\r
+                       <LITERAL2>this</LITERAL2>\r
+                       <LITERAL2>true</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="DOC_COMMENT" DEFAULT="COMMENT3" IGNORE_CASE="TRUE">\r
+               <!-- XML comments -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+               <!-- XML tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/css.xml b/extra/xmode/modes/css.xml
new file mode 100644 (file)
index 0000000..5f8708f
--- /dev/null
@@ -0,0 +1,679 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="noWordSep" VALUE="-" />\r
+               <PROPERTY NAME="noWordSep" VALUE="_" />\r
+       </PROPS>\r
+\r
+       <RULES ESCAPE="\"\r
+               IGNORE_CASE="TRUE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="-?[\p{Digit}]+(pt|pc|in|mm|cm|em|ex|px|ms|s|%)"\r
+               NO_WORD_SEP="-_%">\r
+\r
+               <!-- classes: -->\r
+               <MARK_FOLLOWING TYPE="LITERAL1">.</MARK_FOLLOWING>\r
+               <!-- IDs: -->\r
+               <MARK_FOLLOWING TYPE="LITERAL2">#</MARK_FOLLOWING>\r
+\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+\r
+               <!-- TODO: selectors, see http://www.w3.org/TR/REC-CSS2/selector.html -->\r
+\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PSEUDO">:</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+\r
+               <!-- property blocks: -->\r
+               <SPAN TYPE="OPERATOR" DELEGATE="PROPERTIES">\r
+                       <BEGIN>{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <IMPORT DELEGATE="GLOBAL" />\r
+               <IMPORT DELEGATE="html::TAGS" />\r
+       </RULES>\r
+\r
+\r
+       <!-- Pseudo classes like ":active" -->\r
+       <RULES SET="PSEUDO">\r
+               <!-- Delegate back: -->\r
+               <SEQ TYPE="NULL" DELEGATE="MAIN"> </SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="MAIN">,</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PROPERTIES">{</SEQ>\r
+\r
+               <SPAN_REGEXP HASH_CHAR="lang" TYPE="KEYWORD4">\r
+                       <BEGIN>lang\s*\(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <SPAN_REGEXP HASH_CHAR="lang" TYPE="KEYWORD4">\r
+                       <BEGIN>lang\s*\(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- For delegating to PROPERTIES: -->\r
+               <IMPORT DELEGATE="GLOBAL" />\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD4>after</KEYWORD4>\r
+                       <KEYWORD4>before</KEYWORD4>\r
+                       <KEYWORD4>first-child</KEYWORD4>\r
+                       <KEYWORD4>link</KEYWORD4>\r
+                       <KEYWORD4>visited</KEYWORD4>\r
+                       <KEYWORD4>active</KEYWORD4>\r
+                       <KEYWORD4>hover</KEYWORD4>\r
+                       <KEYWORD4>focus</KEYWORD4>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+\r
+       <RULES SET="LITERAL" DEFAULT="LITERAL1" ESCAPE="\">\r
+       </RULES>\r
+\r
+       <!-- Properties: -->\r
+       <RULES SET="PROPERTIES" ESCAPE="\">\r
+               <!-- Delegate back -->\r
+               <SEQ TYPE="OPERATOR" DELEGATE="MAIN">}</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PROP_VALUE">:</SEQ>\r
+\r
+               <IMPORT DELEGATE="GLOBAL" />\r
+\r
+               <KEYWORDS>\r
+                       <!-- CSS2 properties -->\r
+\r
+                       <!-- Color and background properties -->\r
+                       <KEYWORD2>background</KEYWORD2>\r
+                       <KEYWORD2>background-attachment</KEYWORD2>\r
+                       <KEYWORD2>background-color</KEYWORD2>\r
+                       <KEYWORD2>background-image</KEYWORD2>\r
+                       <KEYWORD2>background-position</KEYWORD2>\r
+                       <KEYWORD2>background-repeat</KEYWORD2>\r
+                       <KEYWORD2>color</KEYWORD2>\r
+\r
+                       <!-- Font properties -->\r
+                       <KEYWORD2>font</KEYWORD2>\r
+                       <KEYWORD2>font-family</KEYWORD2>\r
+                       <KEYWORD2>font-size</KEYWORD2>\r
+                       <KEYWORD2>font-size-adjust</KEYWORD2>\r
+                       <KEYWORD2>font-style</KEYWORD2>\r
+                       <KEYWORD2>font-variant</KEYWORD2>\r
+                       <KEYWORD2>font-weight</KEYWORD2>\r
+                       <KEYWORD2>font-stretch</KEYWORD2>\r
+                       <KEYWORD2>src</KEYWORD2>\r
+                       <KEYWORD2>definition-src</KEYWORD2>\r
+                       <KEYWORD2>unicode-range</KEYWORD2>\r
+                       <KEYWORD2>panose-1</KEYWORD2>\r
+                       <KEYWORD2>stemv</KEYWORD2>\r
+                       <KEYWORD2>stemh</KEYWORD2>\r
+                       <KEYWORD2>units-per-em</KEYWORD2>\r
+                       <KEYWORD2>slope</KEYWORD2>\r
+                       <KEYWORD2>cap-height</KEYWORD2>\r
+                       <KEYWORD2>x-height</KEYWORD2>\r
+                       <KEYWORD2>ascent</KEYWORD2>\r
+                       <KEYWORD2>descent</KEYWORD2>\r
+                       <KEYWORD2>baseline</KEYWORD2>\r
+                       <KEYWORD2>centerline</KEYWORD2>\r
+                       <KEYWORD2>mathline</KEYWORD2>\r
+                       <KEYWORD2>topline</KEYWORD2>\r
+\r
+                       <!-- Text properties -->\r
+                       <KEYWORD2>letter-spacing</KEYWORD2>\r
+                       <KEYWORD2>text-align</KEYWORD2>\r
+                       <KEYWORD2>text-shadow</KEYWORD2>\r
+                       <KEYWORD2>text-decoration</KEYWORD2>\r
+                       <KEYWORD2>text-indent</KEYWORD2>\r
+                       <KEYWORD2>text-transform</KEYWORD2>\r
+                       <KEYWORD2>word-spacing</KEYWORD2>\r
+                       <KEYWORD2>letter-spacing</KEYWORD2>\r
+                       <KEYWORD2>white-space</KEYWORD2>\r
+\r
+                       <!-- Box properties -->\r
+                       <KEYWORD2>border</KEYWORD2>\r
+                       <KEYWORD2>bottom</KEYWORD2>\r
+                       <KEYWORD2>border-collapse</KEYWORD2>\r
+                       <KEYWORD2>border-spacing</KEYWORD2>\r
+                       <KEYWORD2>border-bottom</KEYWORD2>\r
+                       <KEYWORD2>border-bottom-style</KEYWORD2>\r
+                       <KEYWORD2>border-bottom-width</KEYWORD2>\r
+                       <KEYWORD2>border-bottom-color</KEYWORD2>\r
+                       <KEYWORD2>border-left</KEYWORD2>\r
+                       <KEYWORD2>border-left-style</KEYWORD2>\r
+                       <KEYWORD2>border-left-width</KEYWORD2>\r
+                       <KEYWORD2>border-left-color</KEYWORD2>\r
+                       <KEYWORD2>border-right</KEYWORD2>\r
+                       <KEYWORD2>border-right-style</KEYWORD2>\r
+                       <KEYWORD2>border-right-width</KEYWORD2>\r
+                       <KEYWORD2>border-right-color</KEYWORD2>\r
+                       <KEYWORD2>border-top</KEYWORD2>\r
+                       <KEYWORD2>border-top-style</KEYWORD2>\r
+                       <KEYWORD2>border-top-width</KEYWORD2>\r
+                       <KEYWORD2>border-top-color</KEYWORD2>\r
+                       <KEYWORD2>border-color</KEYWORD2>\r
+                       <KEYWORD2>border-style</KEYWORD2>\r
+                       <KEYWORD2>border-width</KEYWORD2>\r
+                       <KEYWORD2>clear</KEYWORD2>\r
+                       <KEYWORD2>float</KEYWORD2>\r
+                       <KEYWORD2>height</KEYWORD2>\r
+                       <KEYWORD2>margin</KEYWORD2>\r
+                       <KEYWORD2>margin-bottom</KEYWORD2>\r
+                       <KEYWORD2>margin-left</KEYWORD2>\r
+                       <KEYWORD2>margin-right</KEYWORD2>\r
+                       <KEYWORD2>margin-top</KEYWORD2>\r
+                       <KEYWORD2>padding</KEYWORD2>\r
+                       <KEYWORD2>padding-bottom</KEYWORD2>\r
+                       <KEYWORD2>padding-left</KEYWORD2>\r
+                       <KEYWORD2>padding-right</KEYWORD2>\r
+                       <KEYWORD2>padding-top</KEYWORD2>\r
+                       <KEYWORD2>clear</KEYWORD2>\r
+\r
+                       <!-- Visual formatting properties -->\r
+                       <KEYWORD2>display</KEYWORD2>\r
+                       <KEYWORD2>position</KEYWORD2>\r
+                       <KEYWORD2>top</KEYWORD2>\r
+                       <KEYWORD2>right</KEYWORD2>\r
+                       <KEYWORD2>bottom</KEYWORD2>\r
+                       <KEYWORD2>left</KEYWORD2>\r
+                       <KEYWORD2>float</KEYWORD2>\r
+                       <KEYWORD2>z-index</KEYWORD2>\r
+                       <KEYWORD2>direction</KEYWORD2>\r
+                       <KEYWORD2>unicode-bidi</KEYWORD2>\r
+                       <KEYWORD2>width</KEYWORD2>\r
+                       <KEYWORD2>min-width</KEYWORD2>\r
+                       <KEYWORD2>max-width</KEYWORD2>\r
+                       <KEYWORD2>height</KEYWORD2>\r
+                       <KEYWORD2>min-height</KEYWORD2>\r
+                       <KEYWORD2>max-height</KEYWORD2>\r
+                       <KEYWORD2>line-height</KEYWORD2>\r
+                       <KEYWORD2>vertical-align</KEYWORD2>\r
+\r
+                       <!-- Visual effects -->\r
+                       <KEYWORD2>overflow</KEYWORD2>\r
+                       <KEYWORD2>clip</KEYWORD2>\r
+                       <KEYWORD2>visibility</KEYWORD2>\r
+\r
+                       <!-- Page properties -->\r
+                       <KEYWORD2>size</KEYWORD2>\r
+                       <KEYWORD2>marks</KEYWORD2>\r
+                       <KEYWORD2>page-break-before</KEYWORD2>\r
+                       <KEYWORD2>page-break-after</KEYWORD2>\r
+                       <KEYWORD2>page-break-inside</KEYWORD2>\r
+                       <KEYWORD2>page</KEYWORD2>\r
+                       <KEYWORD2>orphans</KEYWORD2>\r
+                       <KEYWORD2>widows</KEYWORD2>\r
+\r
+                       <!-- Table properties -->\r
+                       <KEYWORD2>caption-side</KEYWORD2>\r
+                       <KEYWORD2>table-layout</KEYWORD2>\r
+                       <KEYWORD2>border-collapse</KEYWORD2>\r
+                       <KEYWORD2>border-spacing</KEYWORD2>\r
+                       <KEYWORD2>empty-cells</KEYWORD2>\r
+                       <KEYWORD2>speak-headers</KEYWORD2>\r
+\r
+                       <!-- User interface -->\r
+                       <KEYWORD2>cursor</KEYWORD2>\r
+                       <KEYWORD2>outline</KEYWORD2>\r
+                       <KEYWORD2>outline-width</KEYWORD2>\r
+                       <KEYWORD2>outline-style</KEYWORD2>\r
+                       <KEYWORD2>outline-color</KEYWORD2>\r
+\r
+                       <!-- Aural properties -->\r
+                       <KEYWORD2>azimuth</KEYWORD2>\r
+                       <KEYWORD2>volume</KEYWORD2>\r
+                       <KEYWORD2>speak</KEYWORD2>\r
+                       <KEYWORD2>pause</KEYWORD2>\r
+                       <KEYWORD2>pause-before</KEYWORD2>\r
+                       <KEYWORD2>pause-after</KEYWORD2>\r
+                       <KEYWORD2>cue</KEYWORD2>\r
+                       <KEYWORD2>cue-before</KEYWORD2>\r
+                       <KEYWORD2>cue-after</KEYWORD2>\r
+                       <KEYWORD2>play-during</KEYWORD2>\r
+                       <KEYWORD2>elevation</KEYWORD2>\r
+                       <KEYWORD2>speech-rate</KEYWORD2>\r
+                       <KEYWORD2>voice-family</KEYWORD2>\r
+                       <KEYWORD2>pitch</KEYWORD2>\r
+                       <KEYWORD2>pitch-range</KEYWORD2>\r
+                       <KEYWORD2>stress</KEYWORD2>\r
+                       <KEYWORD2>richness</KEYWORD2>\r
+                       <KEYWORD2>speak-punctuation</KEYWORD2>\r
+                       <KEYWORD2>speak-numeral</KEYWORD2>\r
+                       <KEYWORD2>speak-header-cell</KEYWORD2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+\r
+       <!-- Values: -->\r
+       <RULES SET="PROP_VALUE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="-?[\p{Digit}]+(pt|pc|in|mm|cm|em|ex|px|ms|s|%)"\r
+               NO_WORD_SEP="-_%"\r
+               ESCAPE="\">\r
+\r
+               <SPAN DELEGATE="LITERAL">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- "functions" -->\r
+               <SPAN_REGEXP DELEGATE="LITERAL" HASH_CHARS="RU" TYPE="KEYWORD1">\r
+                       <BEGIN>(rgb|url)\s*\(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- <SEQ DELEGATE="PROP_VALUE_COLOR">#</SEQ> -->\r
+               <MARK_FOLLOWING TYPE="DIGIT">#</MARK_FOLLOWING>\r
+\r
+               <SEQ_REGEXP HASH_CHAR="!" TYPE="KEYWORD2">!\s*important</SEQ_REGEXP>\r
+\r
+               <!-- proprietary IE function: -->\r
+               <SPAN_REGEXP TYPE="FUNCTION" DELEGATE="javascript::MAIN" HASH_CHAR="expression">\r
+                       <BEGIN>expression\s*\(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- Delegate back: -->\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PROPERTIES">;</SEQ>\r
+               <SEQ TYPE="INVALID" DELEGATE="MAIN">}</SEQ> <!-- end properties block, but it's invalid -->\r
+\r
+               <IMPORT DELEGATE="GLOBAL" />\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD3>left</KEYWORD3>\r
+                       <KEYWORD3>right</KEYWORD3>\r
+                       <KEYWORD3>below</KEYWORD3>\r
+                       <KEYWORD3>level</KEYWORD3>\r
+                       <KEYWORD3>above</KEYWORD3>\r
+                       <KEYWORD3>higher</KEYWORD3>\r
+                       <KEYWORD3>lower</KEYWORD3>\r
+                       <KEYWORD3>show</KEYWORD3>\r
+                       <KEYWORD3>hide</KEYWORD3>\r
+                       <KEYWORD3>normal</KEYWORD3>\r
+                       <KEYWORD3>wider</KEYWORD3>\r
+                       <KEYWORD3>narrower</KEYWORD3>\r
+                       <KEYWORD3>ultra-condensed</KEYWORD3>\r
+                       <KEYWORD3>extra-condensed</KEYWORD3>\r
+                       <KEYWORD3>condensed</KEYWORD3>\r
+                       <KEYWORD3>semi-condensed</KEYWORD3>\r
+                       <KEYWORD3>semi-expanded</KEYWORD3>\r
+                       <KEYWORD3>expanded</KEYWORD3>\r
+                       <KEYWORD3>extra-expanded</KEYWORD3>\r
+                       <KEYWORD3>ultra-expanded</KEYWORD3>\r
+                       <KEYWORD3>normal</KEYWORD3>\r
+                       <KEYWORD3>italic</KEYWORD3>\r
+                       <KEYWORD3>oblique</KEYWORD3>\r
+                       <KEYWORD3>normal</KEYWORD3>\r
+                       <KEYWORD3>xx-small</KEYWORD3>\r
+                       <KEYWORD3>x-small</KEYWORD3>\r
+                       <KEYWORD3>small</KEYWORD3>\r
+                       <KEYWORD3>large</KEYWORD3>\r
+                       <KEYWORD3>x-large</KEYWORD3>\r
+                       <KEYWORD3>xx-large</KEYWORD3>\r
+                       <KEYWORD3>thin</KEYWORD3>\r
+                       <KEYWORD3>thick</KEYWORD3>\r
+                       <KEYWORD3>smaller</KEYWORD3>\r
+                       <KEYWORD3>larger</KEYWORD3>\r
+                       <KEYWORD3>small-caps</KEYWORD3>\r
+                       <KEYWORD3>inherit</KEYWORD3>\r
+                       <KEYWORD3>bold</KEYWORD3>\r
+                       <KEYWORD3>bolder</KEYWORD3>\r
+                       <KEYWORD3>lighter</KEYWORD3>\r
+                       <KEYWORD3>inside</KEYWORD3>\r
+                       <KEYWORD3>outside</KEYWORD3>\r
+                       <KEYWORD3>disc</KEYWORD3>\r
+                       <KEYWORD3>circle</KEYWORD3>\r
+                       <KEYWORD3>square</KEYWORD3>\r
+                       <KEYWORD3>decimal</KEYWORD3>\r
+                       <KEYWORD3>decimal-leading-zero</KEYWORD3>\r
+                       <KEYWORD3>lower-roman</KEYWORD3>\r
+                       <KEYWORD3>upper-roman</KEYWORD3>\r
+                       <KEYWORD3>lower-greek</KEYWORD3>\r
+                       <KEYWORD3>lower-alpha</KEYWORD3>\r
+                       <KEYWORD3>lower-latin</KEYWORD3>\r
+                       <KEYWORD3>upper-alpha</KEYWORD3>\r
+                       <KEYWORD3>upper-latin</KEYWORD3>\r
+                       <KEYWORD3>hebrew</KEYWORD3>\r
+                       <KEYWORD3>armenian</KEYWORD3>\r
+                       <KEYWORD3>georgian</KEYWORD3>\r
+                       <KEYWORD3>cjk-ideographic</KEYWORD3>\r
+                       <KEYWORD3>hiragana</KEYWORD3>\r
+                       <KEYWORD3>katakana</KEYWORD3>\r
+                       <KEYWORD3>hiragana-iroha</KEYWORD3>\r
+                       <KEYWORD3>katakana-iroha</KEYWORD3>\r
+                       <KEYWORD3>crop</KEYWORD3>\r
+                       <KEYWORD3>cross</KEYWORD3>\r
+                       <KEYWORD3>invert</KEYWORD3>\r
+                       <KEYWORD3>hidden</KEYWORD3>\r
+                       <KEYWORD3>always</KEYWORD3>\r
+                       <KEYWORD3>avoid</KEYWORD3>\r
+                       <KEYWORD3>x-low</KEYWORD3>\r
+                       <KEYWORD3>low</KEYWORD3>\r
+                       <KEYWORD3>high</KEYWORD3>\r
+                       <KEYWORD3>x-high</KEYWORD3>\r
+                       <KEYWORD3>absolute</KEYWORD3>\r
+                       <KEYWORD3>fixed</KEYWORD3>\r
+                       <KEYWORD3>relative</KEYWORD3>\r
+                       <KEYWORD3>static</KEYWORD3>\r
+                       <KEYWORD3>portrait</KEYWORD3>\r
+                       <KEYWORD3>landscape</KEYWORD3>\r
+                       <KEYWORD3>spell-out</KEYWORD3>\r
+                       <KEYWORD3>digits</KEYWORD3>\r
+                       <KEYWORD3>continuous</KEYWORD3>\r
+                       <KEYWORD3>x-slow</KEYWORD3>\r
+                       <KEYWORD3>slow</KEYWORD3>\r
+                       <KEYWORD3>fast</KEYWORD3>\r
+                       <KEYWORD3>x-fast</KEYWORD3>\r
+                       <KEYWORD3>faster</KEYWORD3>\r
+                       <KEYWORD3>slower</KEYWORD3>\r
+                       <KEYWORD3>underline</KEYWORD3>\r
+                       <KEYWORD3>overline</KEYWORD3>\r
+                       <KEYWORD3>line-through</KEYWORD3>\r
+                       <KEYWORD3>blink</KEYWORD3>\r
+                       <KEYWORD3>capitalize</KEYWORD3>\r
+                       <KEYWORD3>uppercase</KEYWORD3>\r
+                       <KEYWORD3>lowercase</KEYWORD3>\r
+                       <KEYWORD3>embed</KEYWORD3>\r
+                       <KEYWORD3>bidi-override</KEYWORD3>\r
+                       <KEYWORD3>baseline</KEYWORD3>\r
+                       <KEYWORD3>sub</KEYWORD3>\r
+                       <KEYWORD3>super</KEYWORD3>\r
+                       <KEYWORD3>top</KEYWORD3>\r
+                       <KEYWORD3>text-top</KEYWORD3>\r
+                       <KEYWORD3>middle</KEYWORD3>\r
+                       <KEYWORD3>bottom</KEYWORD3>\r
+                       <KEYWORD3>text-bottom</KEYWORD3>\r
+                       <KEYWORD3>visible</KEYWORD3>\r
+                       <KEYWORD3>hidden</KEYWORD3>\r
+                       <KEYWORD3>collapse</KEYWORD3>\r
+                       <KEYWORD3>soft</KEYWORD3>\r
+                       <KEYWORD3>loud</KEYWORD3>\r
+                       <KEYWORD3>x-loud</KEYWORD3>\r
+                       <KEYWORD3>pre</KEYWORD3>\r
+                       <KEYWORD3>nowrap</KEYWORD3>\r
+                       <KEYWORD3>dotted</KEYWORD3>\r
+                       <KEYWORD3>dashed</KEYWORD3>\r
+                       <KEYWORD3>solid</KEYWORD3>\r
+                       <KEYWORD3>double</KEYWORD3>\r
+                       <KEYWORD3>groove</KEYWORD3>\r
+                       <KEYWORD3>ridge</KEYWORD3>\r
+                       <KEYWORD3>inset</KEYWORD3>\r
+                       <KEYWORD3>outset</KEYWORD3>\r
+                       <KEYWORD3>once</KEYWORD3>\r
+                       <KEYWORD3>both</KEYWORD3>\r
+                       <KEYWORD3>silent</KEYWORD3>\r
+                       <KEYWORD3>medium</KEYWORD3>\r
+                       <KEYWORD3>mix</KEYWORD3>\r
+                       <KEYWORD3>male</KEYWORD3>\r
+                       <KEYWORD3>female</KEYWORD3>\r
+                       <KEYWORD3>child</KEYWORD3>\r
+                       <KEYWORD3>code</KEYWORD3>\r
+\r
+                       <!-- measurement units -->\r
+                       <KEYWORD3>left-side</KEYWORD3>\r
+                       <KEYWORD3>far-left</KEYWORD3>\r
+                       <KEYWORD3>center-left</KEYWORD3>\r
+                       <KEYWORD3>center</KEYWORD3>\r
+                       <KEYWORD3>right</KEYWORD3>\r
+                       <KEYWORD3>center-right</KEYWORD3>\r
+                       <KEYWORD3>far-right</KEYWORD3>\r
+                       <KEYWORD3>right-side</KEYWORD3>\r
+                       <KEYWORD3>justify</KEYWORD3>\r
+                       <KEYWORD3>behind</KEYWORD3>\r
+                       <KEYWORD3>leftwards</KEYWORD3>\r
+                       <KEYWORD3>rightwards</KEYWORD3>\r
+                       <KEYWORD3>inherit</KEYWORD3>\r
+                       <KEYWORD3>scroll</KEYWORD3>\r
+                       <KEYWORD3>fixed</KEYWORD3>\r
+                       <KEYWORD3>transparent</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+                       <KEYWORD3>repeat</KEYWORD3>\r
+                       <KEYWORD3>repeat-x</KEYWORD3>\r
+                       <KEYWORD3>repeat-y</KEYWORD3>\r
+                       <KEYWORD3>no-repeat</KEYWORD3>\r
+                       <KEYWORD3>collapse</KEYWORD3>\r
+                       <KEYWORD3>separate</KEYWORD3>\r
+                       <KEYWORD3>auto</KEYWORD3>\r
+                       <KEYWORD3>open-quote</KEYWORD3>\r
+                       <KEYWORD3>close-quote</KEYWORD3>\r
+                       <KEYWORD3>no-open-quote</KEYWORD3>\r
+                       <KEYWORD3>no-close-quote</KEYWORD3>\r
+                       <KEYWORD3>cue-before</KEYWORD3>\r
+                       <KEYWORD3>cue-after</KEYWORD3>\r
+                       <KEYWORD3>crosshair</KEYWORD3>\r
+                       <KEYWORD3>default</KEYWORD3>\r
+                       <KEYWORD3>pointer</KEYWORD3>\r
+                       <KEYWORD3>move</KEYWORD3>\r
+                       <KEYWORD3>e-resize</KEYWORD3>\r
+                       <KEYWORD3>ne-resize</KEYWORD3>\r
+                       <KEYWORD3>nw-resize</KEYWORD3>\r
+                       <KEYWORD3>n-resize</KEYWORD3>\r
+                       <KEYWORD3>se-resize</KEYWORD3>\r
+                       <KEYWORD3>sw-resize</KEYWORD3>\r
+                       <KEYWORD3>s-resize</KEYWORD3>\r
+                       <KEYWORD3>w-resize</KEYWORD3>\r
+                       <KEYWORD3>text</KEYWORD3>\r
+                       <KEYWORD3>wait</KEYWORD3>\r
+                       <KEYWORD3>help</KEYWORD3>\r
+                       <KEYWORD3>ltr</KEYWORD3>\r
+                       <KEYWORD3>rtl</KEYWORD3>\r
+                       <KEYWORD3>inline</KEYWORD3>\r
+                       <KEYWORD3>block</KEYWORD3>\r
+                       <KEYWORD3>list-item</KEYWORD3>\r
+                       <KEYWORD3>run-in</KEYWORD3>\r
+                       <KEYWORD3>compact</KEYWORD3>\r
+                       <KEYWORD3>marker</KEYWORD3>\r
+                       <KEYWORD3>table</KEYWORD3>\r
+                       <KEYWORD3>inline-table</KEYWORD3>\r
+                       <KEYWORD3>inline-block</KEYWORD3>\r
+                       <KEYWORD3>table-row-group</KEYWORD3>\r
+                       <KEYWORD3>table-header-group</KEYWORD3>\r
+                       <KEYWORD3>table-footer-group</KEYWORD3>\r
+                       <KEYWORD3>table-row</KEYWORD3>\r
+                       <KEYWORD3>table-column-group</KEYWORD3>\r
+                       <KEYWORD3>table-column</KEYWORD3>\r
+                       <KEYWORD3>table-cell</KEYWORD3>\r
+                       <KEYWORD3>table-caption</KEYWORD3>\r
+\r
+                       <!-- Colors -->\r
+                       <KEYWORD4>aliceblue</KEYWORD4>\r
+                       <KEYWORD4>antiquewhite</KEYWORD4>\r
+                       <KEYWORD4>aqua</KEYWORD4>\r
+                       <KEYWORD4>aquamarine</KEYWORD4>\r
+                       <KEYWORD4>azure</KEYWORD4>\r
+                       <KEYWORD4>beige</KEYWORD4>\r
+                       <KEYWORD4>bisque</KEYWORD4>\r
+                       <KEYWORD4>black</KEYWORD4>\r
+                       <KEYWORD4>blanchedalmond</KEYWORD4>\r
+                       <KEYWORD4>blue</KEYWORD4>\r
+                       <KEYWORD4>blueviolet</KEYWORD4>\r
+                       <KEYWORD4>brown</KEYWORD4>\r
+                       <KEYWORD4>burlywood</KEYWORD4>\r
+                       <KEYWORD4>cadetblue</KEYWORD4>\r
+                       <KEYWORD4>chartreuse</KEYWORD4>\r
+                       <KEYWORD4>chocolate</KEYWORD4>\r
+                       <KEYWORD4>coral</KEYWORD4>\r
+                       <KEYWORD4>cornflowerblue</KEYWORD4>\r
+                       <KEYWORD4>cornsilk</KEYWORD4>\r
+                       <KEYWORD4>crimson</KEYWORD4>\r
+                       <KEYWORD4>cyan</KEYWORD4>\r
+                       <KEYWORD4>darkblue</KEYWORD4>\r
+                       <KEYWORD4>darkcyan</KEYWORD4>\r
+                       <KEYWORD4>darkgoldenrod</KEYWORD4>\r
+                       <KEYWORD4>darkgray</KEYWORD4>\r
+                       <KEYWORD4>darkgreen</KEYWORD4>\r
+                       <KEYWORD4>darkgrey</KEYWORD4>\r
+                       <KEYWORD4>darkkhaki</KEYWORD4>\r
+                       <KEYWORD4>darkmagenta</KEYWORD4>\r
+                       <KEYWORD4>darkolivegreen</KEYWORD4>\r
+                       <KEYWORD4>darkorange</KEYWORD4>\r
+                       <KEYWORD4>darkorchid</KEYWORD4>\r
+                       <KEYWORD4>darkred</KEYWORD4>\r
+                       <KEYWORD4>darksalmon</KEYWORD4>\r
+                       <KEYWORD4>darkseagreen</KEYWORD4>\r
+                       <KEYWORD4>darkslateblue</KEYWORD4>\r
+                       <KEYWORD4>darkslategray</KEYWORD4>\r
+                       <KEYWORD4>darkslategrey</KEYWORD4>\r
+                       <KEYWORD4>darkturquoise</KEYWORD4>\r
+                       <KEYWORD4>darkviolet</KEYWORD4>\r
+                       <KEYWORD4>darkpink</KEYWORD4>\r
+                       <KEYWORD4>deepskyblue</KEYWORD4>\r
+                       <KEYWORD4>dimgray</KEYWORD4>\r
+                       <KEYWORD4>dimgrey</KEYWORD4>\r
+                       <KEYWORD4>dodgerblue</KEYWORD4>\r
+                       <KEYWORD4>firebrick</KEYWORD4>\r
+                       <KEYWORD4>floralwhite</KEYWORD4>\r
+                       <KEYWORD4>forestgreen</KEYWORD4>\r
+                       <KEYWORD4>fushia</KEYWORD4>\r
+                       <KEYWORD4>gainsboro</KEYWORD4>\r
+                       <KEYWORD4>ghostwhite</KEYWORD4>\r
+                       <KEYWORD4>gold</KEYWORD4>\r
+                       <KEYWORD4>goldenrod</KEYWORD4>\r
+                       <KEYWORD4>gray</KEYWORD4>\r
+                       <KEYWORD4>green</KEYWORD4>\r
+                       <KEYWORD4>greenyellow</KEYWORD4>\r
+                       <KEYWORD4>grey</KEYWORD4>\r
+                       <KEYWORD4>honeydew</KEYWORD4>\r
+                       <KEYWORD4>hotpink</KEYWORD4>\r
+                       <KEYWORD4>indianred</KEYWORD4>\r
+                       <KEYWORD4>indigo</KEYWORD4>\r
+                       <KEYWORD4>ivory</KEYWORD4>\r
+                       <KEYWORD4>khaki</KEYWORD4>\r
+                       <KEYWORD4>lavender</KEYWORD4>\r
+                       <KEYWORD4>lavenderblush</KEYWORD4>\r
+                       <KEYWORD4>lawngreen</KEYWORD4>\r
+                       <KEYWORD4>lemonchiffon</KEYWORD4>\r
+                       <KEYWORD4>lightblue</KEYWORD4>\r
+                       <KEYWORD4>lightcoral</KEYWORD4>\r
+                       <KEYWORD4>lightcyan</KEYWORD4>\r
+                       <KEYWORD4>lightgoldenrodyellow</KEYWORD4>\r
+                       <KEYWORD4>lightgray</KEYWORD4>\r
+                       <KEYWORD4>lightgreen</KEYWORD4>\r
+                       <KEYWORD4>lightgrey</KEYWORD4>\r
+                       <KEYWORD4>lightpink</KEYWORD4>\r
+                       <KEYWORD4>lightsalmon</KEYWORD4>\r
+                       <KEYWORD4>lightseagreen</KEYWORD4>\r
+                       <KEYWORD4>lightskyblue</KEYWORD4>\r
+                       <KEYWORD4>lightslategray</KEYWORD4>\r
+                       <KEYWORD4>lightslategrey</KEYWORD4>\r
+                       <KEYWORD4>lightsteelblue</KEYWORD4>\r
+                       <KEYWORD4>lightyellow</KEYWORD4>\r
+                       <KEYWORD4>lime</KEYWORD4>\r
+                       <KEYWORD4>limegreen</KEYWORD4>\r
+                       <KEYWORD4>linen</KEYWORD4>\r
+                       <KEYWORD4>magenta</KEYWORD4>\r
+                       <KEYWORD4>maroon</KEYWORD4>\r
+                       <KEYWORD4>mediumaquamarine</KEYWORD4>\r
+                       <KEYWORD4>mediumblue</KEYWORD4>\r
+                       <KEYWORD4>mediumorchid</KEYWORD4>\r
+                       <KEYWORD4>mediumpurple</KEYWORD4>\r
+                       <KEYWORD4>mediumseagreen</KEYWORD4>\r
+                       <KEYWORD4>mediumslateblue</KEYWORD4>\r
+                       <KEYWORD4>mediumspringgreen</KEYWORD4>\r
+                       <KEYWORD4>mediumturquoise</KEYWORD4>\r
+                       <KEYWORD4>mediumvioletred</KEYWORD4>\r
+                       <KEYWORD4>midnightblue</KEYWORD4>\r
+                       <KEYWORD4>mintcream</KEYWORD4>\r
+                       <KEYWORD4>mistyrose</KEYWORD4>\r
+                       <KEYWORD4>mocassin</KEYWORD4>\r
+                       <KEYWORD4>navawhite</KEYWORD4>\r
+                       <KEYWORD4>navy</KEYWORD4>\r
+                       <KEYWORD4>oldlace</KEYWORD4>\r
+                       <KEYWORD4>olive</KEYWORD4>\r
+                       <KEYWORD4>olidrab</KEYWORD4>\r
+                       <KEYWORD4>orange</KEYWORD4>\r
+                       <KEYWORD4>orangered</KEYWORD4>\r
+                       <KEYWORD4>orchid</KEYWORD4>\r
+                       <KEYWORD4>palegoldenrod</KEYWORD4>\r
+                       <KEYWORD4>palegreen</KEYWORD4>\r
+                       <KEYWORD4>paleturquoise</KEYWORD4>\r
+                       <KEYWORD4>paletvioletred</KEYWORD4>\r
+                       <KEYWORD4>papayawhip</KEYWORD4>\r
+                       <KEYWORD4>peachpuff</KEYWORD4>\r
+                       <KEYWORD4>peru</KEYWORD4>\r
+                       <KEYWORD4>pink</KEYWORD4>\r
+                       <KEYWORD4>plum</KEYWORD4>\r
+                       <KEYWORD4>powderblue</KEYWORD4>\r
+                       <KEYWORD4>purple</KEYWORD4>\r
+                       <KEYWORD4>red</KEYWORD4>\r
+                       <KEYWORD4>rosybrown</KEYWORD4>\r
+                       <KEYWORD4>royalblue</KEYWORD4>\r
+                       <KEYWORD4>saddlebrown</KEYWORD4>\r
+                       <KEYWORD4>salmon</KEYWORD4>\r
+                       <KEYWORD4>sandybrown</KEYWORD4>\r
+                       <KEYWORD4>seagreen</KEYWORD4>\r
+                       <KEYWORD4>seashell</KEYWORD4>\r
+                       <KEYWORD4>sienna</KEYWORD4>\r
+                       <KEYWORD4>silver</KEYWORD4>\r
+                       <KEYWORD4>skyblue</KEYWORD4>\r
+                       <KEYWORD4>slateblue</KEYWORD4>\r
+                       <KEYWORD4>slategray</KEYWORD4>\r
+                       <KEYWORD4>slategrey</KEYWORD4>\r
+                       <KEYWORD4>snow</KEYWORD4>\r
+                       <KEYWORD4>springgreen</KEYWORD4>\r
+                       <KEYWORD4>steelblue</KEYWORD4>\r
+                       <KEYWORD4>tan</KEYWORD4>\r
+                       <KEYWORD4>teal</KEYWORD4>\r
+                       <KEYWORD4>thistle</KEYWORD4>\r
+                       <KEYWORD4>tomato</KEYWORD4>\r
+                       <KEYWORD4>turquoise</KEYWORD4>\r
+                       <KEYWORD4>violet</KEYWORD4>\r
+                       <KEYWORD4>wheat</KEYWORD4>\r
+                       <KEYWORD4>white</KEYWORD4>\r
+                       <KEYWORD4>whitesmoke</KEYWORD4>\r
+                       <KEYWORD4>yellow</KEYWORD4>\r
+                       <KEYWORD4>yellowgreen</KEYWORD4>\r
+\r
+                       <!-- "functions", here for autocomplete: -->\r
+                       <KEYWORD1>rgb</KEYWORD1>\r
+                       <KEYWORD1>url</KEYWORD1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+\r
+       <RULES SET="GLOBAL">\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+               <SEQ TYPE="NULL">;</SEQ>\r
+               <SPAN TYPE="NULL" DELEGATE="LITERAL">\r
+                       <BEGIN>(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <KEYWORDS>\r
+                       <!-- Generated content, automatic listing -->\r
+                       <KEYWORD2>content</KEYWORD2>\r
+                       <KEYWORD2>quotes</KEYWORD2>\r
+                       <KEYWORD2>counter-reset</KEYWORD2>\r
+                       <KEYWORD2>counter-increment</KEYWORD2>\r
+                       <KEYWORD2>marker-offset</KEYWORD2>\r
+                       <KEYWORD2>list-style</KEYWORD2>\r
+                       <KEYWORD2>list-style-image</KEYWORD2>\r
+                       <KEYWORD2>list-style-position</KEYWORD2>\r
+                       <KEYWORD2>list-style-type</KEYWORD2>\r
+\r
+                       <KEYWORD2>@import</KEYWORD2>\r
+                       <KEYWORD2>@media</KEYWORD2>\r
+                       <KEYWORD2>@page</KEYWORD2>\r
+                       <KEYWORD2>@font-face</KEYWORD2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+</MODE>\r
+\r
+\r
diff --git a/extra/xmode/modes/csv.xml b/extra/xmode/modes/csv.xml
new file mode 100644 (file)
index 0000000..2e6c773
--- /dev/null
@@ -0,0 +1,140 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+\r
+Author: Jaco de Groot\r
+Version: 2.2 20070213\r
+\r
+Comma Separated Values specification used for this mode:\r
+\r
+A file containing table data where the fields are sperated by commas. Fields\r
+containing commas (,) or newlines must be quoted (surrounded by quotes (")).\r
+Quotes in quoted fields must be escaped with two quotes.\r
+\r
+Highlighted are:\r
+- Even columns\r
+- Commas seperating values\r
+- Quotes surrounding values\r
+- Escaped quotes are highlighted.\r
+\r
+It is also possible that semicolons are used instead of commas. Therefor the\r
+first rules check if the first separator found is a comma or a semicolon and\r
+then switch to the comma or semicolon rules.\r
+\r
+-->\r
+\r
+<MODE>\r
+\r
+  <!-- Switch rules -->\r
+\r
+  <RULES>\r
+    <SEQ TYPE="MARKUP" DELEGATE="ODD_QUOTED" AT_LINE_START="TRUE">"</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_EVEN_QUOTED">,"</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_EVEN_QUOTED">;"</SEQ>\r
+    <EOL_SPAN_REGEXP TYPE="MARKUP" HASH_CHAR="," DELEGATE="COMMA_LAST_COLUMN">,(?=[^,]*$)</EOL_SPAN_REGEXP>\r
+    <EOL_SPAN_REGEXP TYPE="MARKUP" HASH_CHAR=";" DELEGATE="SEMICOLON_LAST_COLUMN">;(?=[^;]*$)</EOL_SPAN_REGEXP>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_EVEN">,</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_EVEN">;</SEQ>\r
+  </RULES>\r
+\r
+  <RULES SET="ODD_QUOTED">\r
+    <SEQ TYPE="MARKUP" DELEGATE="ODD_QUOTED">""</SEQ>\r
+    <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="&quot;" DELEGATE="COMMA_MAIN">"(?=,[^"][^,]*$)</SEQ_REGEXP>\r
+    <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="&quot;" DELEGATE="SEMICOLON_MAIN">"(?=;[^"][^;]*$)</SEQ_REGEXP>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_EVEN_QUOTED">","</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_EVEN_QUOTED">";"</SEQ>\r
+    <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="&quot;," DELEGATE="COMMA_MAIN">",$</SEQ_REGEXP>\r
+    <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="&quot;;" DELEGATE="SEMICOLON_MAIN">";$</SEQ_REGEXP>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_EVEN">",</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_EVEN">";</SEQ>\r
+    <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="&quot;" DELEGATE="MAIN">"$</SEQ_REGEXP>\r
+    <SEQ TYPE="MARKUP" DELEGATE="EVEN">"</SEQ>\r
+  </RULES>\r
+\r
+  <RULES DEFAULT="COMMENT1" SET="EVEN">\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_ODD_QUOTED">,"</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_ODD_QUOTED">;"</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_MAIN">,</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_MAIN">;</SEQ>\r
+  </RULES>\r
+\r
+  <RULES DEFAULT="COMMENT1" SET="EVEN_QUOTED">\r
+    <SEQ TYPE="MARKUP" DELEGATE="EVEN_QUOTED">""</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_ODD_QUOTED">","</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_ODD_QUOTED">";"</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_MAIN">",</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_MAIN">";</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="MAIN">"</SEQ>\r
+  </RULES>\r
+\r
+  <!-- Comma rules -->\r
+\r
+  <RULES SET="COMMA_MAIN">\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_ODD_QUOTED" AT_LINE_START="TRUE">"</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_EVEN_QUOTED">,"</SEQ>\r
+    <EOL_SPAN_REGEXP TYPE="MARKUP" HASH_CHAR="," DELEGATE="COMMA_LAST_COLUMN">,(?=[^,]*$)</EOL_SPAN_REGEXP>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_EVEN">,</SEQ>\r
+  </RULES>\r
+\r
+  <RULES SET="COMMA_ODD_QUOTED">\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_ODD_QUOTED">""</SEQ>\r
+    <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="&quot;" DELEGATE="COMMA_MAIN">"(?=,[^"][^,]*$)</SEQ_REGEXP>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_EVEN_QUOTED">","</SEQ>\r
+    <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="&quot;," DELEGATE="COMMA_MAIN">",$</SEQ_REGEXP>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_EVEN">",</SEQ>\r
+    <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="&quot;" DELEGATE="COMMA_MAIN">"$</SEQ_REGEXP>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_EVEN">"</SEQ>\r
+  </RULES>\r
+\r
+  <RULES SET="COMMA_EVEN" DEFAULT="COMMENT1">\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_ODD_QUOTED">,"</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_MAIN">,</SEQ>\r
+  </RULES>\r
+\r
+  <RULES SET="COMMA_EVEN_QUOTED" DEFAULT="COMMENT1">\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_EVEN_QUOTED">""</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_ODD_QUOTED">","</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_MAIN">",</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="COMMA_MAIN">"</SEQ>\r
+  </RULES>\r
+\r
+  <RULES SET="COMMA_LAST_COLUMN" DEFAULT="COMMENT1">\r
+  </RULES>\r
+\r
+  <!-- Semicolon rules -->\r
+\r
+  <RULES SET="SEMICOLON_MAIN">\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_ODD_QUOTED" AT_LINE_START="TRUE">"</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_EVEN_QUOTED">;"</SEQ>\r
+    <EOL_SPAN_REGEXP TYPE="MARKUP" HASH_CHAR=";" DELEGATE="SEMICOLON_LAST_COLUMN">;(?=[^;]*$)</EOL_SPAN_REGEXP>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_EVEN">;</SEQ>\r
+  </RULES>\r
+\r
+  <RULES SET="SEMICOLON_ODD_QUOTED">\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_ODD_QUOTED">""</SEQ>\r
+    <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="&quot;" DELEGATE="SEMICOLON_MAIN">"(?=;[^"][^;]*$)</SEQ_REGEXP>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_EVEN_QUOTED">";"</SEQ>\r
+    <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="&quot;;" DELEGATE="SEMICOLON_MAIN">";$</SEQ_REGEXP>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_EVEN">";</SEQ>\r
+    <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="&quot;" DELEGATE="SEMICOLON_MAIN">"$</SEQ_REGEXP>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_EVEN">"</SEQ>\r
+  </RULES>\r
+\r
+  <RULES SET="SEMICOLON_EVEN" DEFAULT="COMMENT1">\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_ODD_QUOTED">;"</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_MAIN">;</SEQ>\r
+  </RULES>\r
+\r
+  <RULES SET="SEMICOLON_EVEN_QUOTED" DEFAULT="COMMENT1">\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_EVEN_QUOTED">""</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_ODD_QUOTED">";"</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_MAIN">";</SEQ>\r
+    <SEQ TYPE="MARKUP" DELEGATE="SEMICOLON_MAIN">"</SEQ>\r
+  </RULES>\r
+\r
+  <RULES SET="SEMICOLON_LAST_COLUMN" DEFAULT="COMMENT1">\r
+  </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/cvs-commit.xml b/extra/xmode/modes/cvs-commit.xml
new file mode 100644 (file)
index 0000000..d89eee4
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+<MODE NAME="cvs-commit"                FILE="cvs-commit.xml"\r
+                               FILE_NAME_GLOB="cvs*.tmp"/>\r
+-->\r
+\r
+<MODE>\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="FALSE">\r
+               <EOL_SPAN TYPE="COMMENT1" \r
+                       DELEGATE="CHANGED" \r
+                       AT_LINE_START="TRUE"\r
+               >CVS:</EOL_SPAN>\r
+       </RULES>\r
+       <RULES SET="CHANGED" DEFAULT="COMMENT2">\r
+               <SEQ TYPE="COMMENT1" AT_LINE_START="TRUE">CVS:</SEQ>\r
+               <SEQ TYPE="KEYWORD1">Committing in</SEQ>\r
+               <SEQ TYPE="KEYWORD1">Added Files:</SEQ>\r
+               <SEQ TYPE="KEYWORD1">Modified Files:</SEQ>\r
+               <SEQ TYPE="KEYWORD1">Removed Files:</SEQ>\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/d.xml b/extra/xmode/modes/d.xml
new file mode 100644 (file)
index 0000000..8b8e710
--- /dev/null
@@ -0,0 +1,213 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+    <PROPS>\r
+        <PROPERTY NAME="commentStart" VALUE="/*" />\r
+        <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+        <PROPERTY NAME="lineComment" VALUE="//" />\r
+        <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+\r
+       <!-- Auto indent -->\r
+       <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+       <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+       <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />\r
+       <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />\r
+       <PROPERTY NAME="indentNextLine"\r
+               VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+       <PROPERTY NAME="unindentThisLine"\r
+               VALUE="^.*(default:\s*|case.*:.*)$" />\r
+       <PROPERTY NAME="electricKeys" VALUE=":" />\r
+    </PROPS>\r
+\r
+    <RULES ESCAPE="\"\r
+        IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE"\r
+        DIGIT_RE="(0x[0-9a-fA-F_]+[uUlL]?|[0-9_]+(e[0-9_]*)?[uUlLdDfF]?)">\r
+\r
+        <!-- Silly comment -->\r
+        <SEQ TYPE="COMMENT1">/**/</SEQ>\r
+\r
+        <!-- Doxygen comment, Javadoc style -->\r
+        <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">\r
+            <BEGIN>/**</BEGIN>\r
+            <END>*/</END>\r
+        </SPAN>\r
+\r
+        <!-- Doxygen comment, Qt style -->\r
+        <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">\r
+            <BEGIN>/*!</BEGIN>\r
+            <END>*/</END>\r
+        </SPAN>\r
+\r
+        <!-- C style comment -->\r
+        <SPAN TYPE="COMMENT1">\r
+            <BEGIN>/*</BEGIN>\r
+            <END>*/</END>\r
+        </SPAN>\r
+\r
+        <!-- Nested comment -->\r
+        <SPAN TYPE="COMMENT1" DELEGATE="NESTED_COMMENT">\r
+            <BEGIN>/+</BEGIN>\r
+            <END>+/</END>\r
+        </SPAN>\r
+\r
+        <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+\r
+        <!-- Wysiwyg string literal -->\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" NO_ESCAPE="TRUE">\r
+            <BEGIN>r"</BEGIN>\r
+            <END>"</END>\r
+        </SPAN>\r
+        <!-- Alternate Wysiwyg string literal -->\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" NO_ESCAPE="TRUE">\r
+            <BEGIN>`</BEGIN>\r
+            <END>`</END>\r
+        </SPAN>\r
+        <!-- Doublequoted string literal -->\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>"</BEGIN>\r
+            <END>"</END>\r
+        </SPAN>\r
+        <!-- Hex string literal -->\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>x"</BEGIN>\r
+            <END>"</END>\r
+        </SPAN>\r
+        <!-- Character literal -->\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>'</BEGIN>\r
+            <END>'</END>\r
+        </SPAN>\r
+\r
+        <SEQ TYPE="OPERATOR">=</SEQ>\r
+        <SEQ TYPE="OPERATOR">!</SEQ>\r
+        <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+        <SEQ TYPE="OPERATOR">+</SEQ>\r
+        <SEQ TYPE="OPERATOR">-</SEQ>\r
+        <SEQ TYPE="OPERATOR">/</SEQ>\r
+\r
+        <SEQ TYPE="OPERATOR">*</SEQ>\r
+        <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">%</SEQ>\r
+        <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+        <SEQ TYPE="OPERATOR">|</SEQ>\r
+        <SEQ TYPE="OPERATOR">^</SEQ>\r
+        <SEQ TYPE="OPERATOR">~</SEQ>\r
+        <SEQ TYPE="OPERATOR">}</SEQ>\r
+        <SEQ TYPE="OPERATOR">{</SEQ>\r
+\r
+        <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+            AT_WHITESPACE_END="TRUE">:</MARK_PREVIOUS>\r
+\r
+        <!-- Function calls -->\r
+        <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+        <!-- Annotation types -->\r
+        <MARK_FOLLOWING TYPE="KEYWORD4">@</MARK_FOLLOWING>\r
+\r
+        <KEYWORDS>\r
+            <KEYWORD1>abstract</KEYWORD1>\r
+            <KEYWORD3>alias</KEYWORD3>\r
+            <KEYWORD4>align</KEYWORD4>\r
+            <KEYWORD2>asm</KEYWORD2>\r
+            <KEYWORD2>assert</KEYWORD2>\r
+            <KEYWORD3>auto</KEYWORD3>\r
+            <KEYWORD3>bit</KEYWORD3>\r
+            <KEYWORD4>body</KEYWORD4>\r
+            <KEYWORD1>break</KEYWORD1>\r
+            <KEYWORD3>byte</KEYWORD3>\r
+            <KEYWORD1>case</KEYWORD1>\r
+            <KEYWORD3>cast</KEYWORD3>\r
+            <KEYWORD1>catch</KEYWORD1>\r
+            <KEYWORD3>cent</KEYWORD3>\r
+            <KEYWORD3>char</KEYWORD3>\r
+            <KEYWORD3>class</KEYWORD3>\r
+            <KEYWORD3>cfloat</KEYWORD3>\r
+            <KEYWORD3>cdouble</KEYWORD3>\r
+            <KEYWORD3>creal</KEYWORD3>\r
+            <INVALID>const</INVALID>\r
+            <KEYWORD1>continue</KEYWORD1>\r
+            <KEYWORD3>dchar</KEYWORD3>\r
+            <KEYWORD2>debug</KEYWORD2>\r
+            <KEYWORD1>default</KEYWORD1>\r
+            <KEYWORD4>delegate</KEYWORD4>\r
+            <KEYWORD1>delete</KEYWORD1>\r
+            <KEYWORD2>deprecated</KEYWORD2>\r
+            <KEYWORD1>do</KEYWORD1>\r
+            <KEYWORD3>double</KEYWORD3>\r
+            <KEYWORD1>else</KEYWORD1>\r
+            <KEYWORD3>enum</KEYWORD3>\r
+            <KEYWORD2>export</KEYWORD2>\r
+            <KEYWORD2>extern</KEYWORD2>\r
+            <LITERAL2>false</LITERAL2>\r
+            <KEYWORD1>final</KEYWORD1>\r
+            <KEYWORD1>finally</KEYWORD1>\r
+            <KEYWORD3>float</KEYWORD3>\r
+            <KEYWORD1>for</KEYWORD1>\r
+            <KEYWORD1>foreach</KEYWORD1>\r
+            <KEYWORD4>function</KEYWORD4>\r
+            <INVALID>goto</INVALID>\r
+            <KEYWORD3>idouble</KEYWORD3>\r
+            <KEYWORD1>if</KEYWORD1>\r
+            <KEYWORD3>ifloat</KEYWORD3>\r
+            <KEYWORD2>import</KEYWORD2>\r
+            <INVALID>in</INVALID>\r
+            <INVALID>inout</INVALID>\r
+            <KEYWORD3>int</KEYWORD3>\r
+            <KEYWORD2>interface</KEYWORD2>\r
+            <KEYWORD2>invariant</KEYWORD2>\r
+            <KEYWORD3>ireal</KEYWORD3>\r
+            <OPERATOR>is</OPERATOR>\r
+            <KEYWORD3>long</KEYWORD3>\r
+            <KEYWORD4>module</KEYWORD4>\r
+            <KEYWORD1>new</KEYWORD1>\r
+            <LITERAL2>null</LITERAL2>\r
+            <INVALID>out</INVALID>\r
+            <KEYWORD4>override</KEYWORD4>\r
+            <KEYWORD2>package</KEYWORD2>\r
+            <KEYWORD2>pragma</KEYWORD2>\r
+            <KEYWORD1>private</KEYWORD1>\r
+            <KEYWORD1>protected</KEYWORD1>\r
+            <KEYWORD1>public</KEYWORD1>\r
+            <KEYWORD3>real</KEYWORD3>\r
+            <KEYWORD1>return</KEYWORD1>\r
+            <KEYWORD3>short</KEYWORD3>\r
+            <KEYWORD1>static</KEYWORD1>\r
+            <KEYWORD3>struct</KEYWORD3>\r
+            <LITERAL2>super</LITERAL2>\r
+            <KEYWORD1>switch</KEYWORD1>\r
+            <KEYWORD1>synchronized</KEYWORD1>\r
+            <KEYWORD3>template</KEYWORD3>\r
+            <LITERAL2>this</LITERAL2>\r
+            <KEYWORD1>throw</KEYWORD1>\r
+            <LITERAL2>true</LITERAL2>\r
+            <KEYWORD1>try</KEYWORD1>\r
+            <KEYWORD3>typedef</KEYWORD3>\r
+            <KEYWORD1>typeof</KEYWORD1>\r
+            <KEYWORD3>ubyte</KEYWORD3>\r
+            <KEYWORD3>ucent</KEYWORD3>\r
+            <KEYWORD3>uint</KEYWORD3>\r
+            <KEYWORD3>ulong</KEYWORD3>\r
+            <KEYWORD3>union</KEYWORD3>\r
+            <KEYWORD2>unittest</KEYWORD2>\r
+            <KEYWORD3>ushort</KEYWORD3>\r
+            <KEYWORD2>version</KEYWORD2>\r
+            <KEYWORD3>void</KEYWORD3>\r
+            <KEYWORD1>volatile</KEYWORD1>\r
+            <KEYWORD3>wchar</KEYWORD3>\r
+            <KEYWORD1>while</KEYWORD1>\r
+            <KEYWORD2>with</KEYWORD2>\r
+        </KEYWORDS>\r
+    </RULES>\r
+    <RULES SET="NESTED_COMMENT" DEFAULT="COMMENT1" ESCAPE="\">\r
+        <SPAN TYPE="COMMENT1" DELEGATE="NESTED_COMMENT">\r
+            <BEGIN>/+</BEGIN>\r
+            <END>+/</END>\r
+        </SPAN>\r
+    </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/django.xml b/extra/xmode/modes/django.xml
new file mode 100644 (file)
index 0000000..e9162d5
--- /dev/null
@@ -0,0 +1,136 @@
+<?xml version="1.0"?>\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="{% comment %}" />\r
+               <PROPERTY NAME="commentEnd" VALUE="{% endcomment %}" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE">\r
+               <IMPORT DELEGATE="html::MAIN"/>\r
+\r
+               <SPAN TYPE="COMMENT3">\r
+                       <BEGIN>{% comment %}</BEGIN>\r
+                       <END>{% endcomment %}</END>\r
+               </SPAN>\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="DJANGO_BLOCK">\r
+                       <BEGIN>{%</BEGIN>\r
+                       <END>%}</END>\r
+               </SPAN>\r
+               <!-- variable -->\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="DJANGO_VARIABLE">\r
+                       <BEGIN>{{</BEGIN>\r
+                       <END>}}</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="DJANGO_VARIABLE" DEFAULT="LITERAL4">\r
+               <IMPORT DELEGATE="DJANGO_CORE"/>\r
+       </RULES>\r
+\r
+       <RULES SET="DJANGO_BLOCK" DEFAULT="LITERAL4">\r
+               <IMPORT DELEGATE="DJANGO_CORE"/>\r
+               <KEYWORDS>\r
+                       <KEYWORD1>as</KEYWORD1>\r
+                       <KEYWORD1>block</KEYWORD1>\r
+                       <KEYWORD1>blocktrans</KEYWORD1>\r
+                       <KEYWORD1>by</KEYWORD1>\r
+                       <KEYWORD1>endblock</KEYWORD1>\r
+                       <KEYWORD1>endblocktrans</KEYWORD1>\r
+                       <KEYWORD1>comment</KEYWORD1>\r
+                       <KEYWORD1>endcomment</KEYWORD1>\r
+                       <KEYWORD1>cycle</KEYWORD1>\r
+                       <KEYWORD1>date</KEYWORD1>\r
+                       <KEYWORD1>debug</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>extends</KEYWORD1>\r
+                       <KEYWORD1>filter</KEYWORD1>\r
+                       <KEYWORD1>endfilter</KEYWORD1>\r
+                       <KEYWORD1>firstof</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>endfor</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>endif</KEYWORD1>\r
+                       <KEYWORD1>ifchanged</KEYWORD1>\r
+                       <KEYWORD1>endifchanged</KEYWORD1>\r
+                       <KEYWORD1>ifnotequal</KEYWORD1>\r
+                       <KEYWORD1>endifnotequal</KEYWORD1>\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <KEYWORD1>load</KEYWORD1>\r
+                       <KEYWORD1>not</KEYWORD1>\r
+                       <KEYWORD1>now</KEYWORD1>\r
+                       <KEYWORD1>or</KEYWORD1>\r
+                       <KEYWORD1>parsed</KEYWORD1>\r
+                       <KEYWORD1>regroup</KEYWORD1>\r
+                       <KEYWORD1>ssi</KEYWORD1>\r
+                       <KEYWORD1>trans</KEYWORD1>\r
+                       <KEYWORD1>with</KEYWORD1>\r
+                       <KEYWORD1>widthratio</KEYWORD1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="DJANGO_CORE">\r
+               <SPAN TYPE="LITERAL2">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <KEYWORDS>\r
+                       <LITERAL3>openblock</LITERAL3>\r
+                       <LITERAL3>closeblock</LITERAL3>\r
+                       <LITERAL3>openvariable</LITERAL3>\r
+                       <LITERAL3>closevariable</LITERAL3>\r
+\r
+                       <FUNCTION>add</FUNCTION>\r
+                       <FUNCTION>addslashes</FUNCTION>\r
+                       <FUNCTION>capfirst</FUNCTION>\r
+                       <FUNCTION>center</FUNCTION>\r
+                       <FUNCTION>cut</FUNCTION>\r
+                       <FUNCTION>date</FUNCTION>\r
+                       <FUNCTION>default</FUNCTION>\r
+                       <FUNCTION>dictsort</FUNCTION>\r
+                       <FUNCTION>dictsortreversed</FUNCTION>\r
+                       <FUNCTION>divisibleby</FUNCTION>\r
+                       <FUNCTION>escape</FUNCTION>\r
+                       <FUNCTION>filesizeformat</FUNCTION>\r
+                       <FUNCTION>first</FUNCTION>\r
+                       <FUNCTION>fix_ampersands</FUNCTION>\r
+                       <FUNCTION>floatformat</FUNCTION>\r
+                       <FUNCTION>get_digit</FUNCTION>\r
+                       <FUNCTION>join</FUNCTION>\r
+                       <FUNCTION>length</FUNCTION>\r
+                       <FUNCTION>length_is</FUNCTION>\r
+                       <FUNCTION>linebreaks</FUNCTION>\r
+                       <FUNCTION>linebreaksbr</FUNCTION>\r
+                       <FUNCTION>linenumbers</FUNCTION>\r
+                       <FUNCTION>ljust</FUNCTION>\r
+                       <FUNCTION>lower</FUNCTION>\r
+                       <FUNCTION>make_list</FUNCTION>\r
+                       <FUNCTION>phone2numeric</FUNCTION>\r
+                       <FUNCTION>pluralize</FUNCTION>\r
+                       <FUNCTION>pprint</FUNCTION>\r
+                       <FUNCTION>random</FUNCTION>\r
+                       <FUNCTION>removetags</FUNCTION>\r
+                       <FUNCTION>rjust</FUNCTION>\r
+                       <FUNCTION>slice</FUNCTION>\r
+                       <FUNCTION>slugify</FUNCTION>\r
+                       <FUNCTION>stringformat</FUNCTION>\r
+                       <FUNCTION>striptags</FUNCTION>\r
+                       <FUNCTION>time</FUNCTION>\r
+                       <FUNCTION>timesince</FUNCTION>\r
+                       <FUNCTION>title</FUNCTION>\r
+                       <FUNCTION>truncatewords</FUNCTION>\r
+                       <FUNCTION>unordered_list</FUNCTION>\r
+                       <FUNCTION>upper</FUNCTION>\r
+                       <FUNCTION>urlencode</FUNCTION>\r
+                       <FUNCTION>urlize</FUNCTION>\r
+                       <FUNCTION>urlizetrunc</FUNCTION>\r
+                       <FUNCTION>wordcount</FUNCTION>\r
+                       <FUNCTION>wordwrap</FUNCTION>\r
+                       <FUNCTION>yesno</FUNCTION>\r
+\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/doxygen.xml b/extra/xmode/modes/doxygen.xml
new file mode 100644 (file)
index 0000000..a1e448a
--- /dev/null
@@ -0,0 +1,313 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+    <PROPS>\r
+        <PROPERTY NAME="lineComment" VALUE="#" />\r
+    </PROPS>\r
+    <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+        <!-- Comment -->\r
+        <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+        <MARK_PREVIOUS TYPE="KEYWORD1"\r
+            AT_LINE_START="TRUE" MATCH_TYPE="OPERATOR">=</MARK_PREVIOUS>\r
+        <MARK_PREVIOUS TYPE="KEYWORD1"\r
+            AT_LINE_START="TRUE" MATCH_TYPE="OPERATOR">+=</MARK_PREVIOUS>\r
+\r
+        <!-- Literals -->\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>"</BEGIN>\r
+            <END>"</END>\r
+        </SPAN>\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>'</BEGIN>\r
+            <END>'</END>\r
+        </SPAN>\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>`</BEGIN>\r
+            <END>`</END>\r
+        </SPAN>\r
+        <KEYWORDS>\r
+            <KEYWORD2>YES</KEYWORD2>\r
+            <KEYWORD3>NO</KEYWORD3>\r
+        </KEYWORDS>\r
+    </RULES>\r
+\r
+    <RULES SET="DOXYGEN" DEFAULT="COMMENT3" IGNORE_CASE="TRUE">\r
+        <!-- so that *@param is highlighted -->\r
+        <SEQ TYPE="COMMENT3">*</SEQ>\r
+\r
+        <!-- HTML comments -->\r
+        <SPAN TYPE="COMMENT1">\r
+            <BEGIN>&lt;!--</BEGIN>\r
+            <END>--&gt;</END>\r
+        </SPAN>\r
+\r
+        <!-- Doxygen allows this -->\r
+        <SEQ TYPE="COMMENT3">&lt;&lt;</SEQ>\r
+        <SEQ TYPE="COMMENT3">&lt;=</SEQ>\r
+        <SEQ TYPE="COMMENT3">&lt; </SEQ>\r
+\r
+        <!-- HTML tags -->\r
+        <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS"\r
+            NO_LINE_BREAK="TRUE">\r
+            <BEGIN>&lt;</BEGIN>\r
+            <END>&gt;</END>\r
+        </SPAN>\r
+\r
+        <KEYWORDS>\r
+            <LABEL>\a</LABEL>\r
+            <LABEL>\addindex</LABEL>\r
+            <LABEL>\addtogroup</LABEL>\r
+            <LABEL>\anchor</LABEL>\r
+            <LABEL>\arg</LABEL>\r
+            <LABEL>\attention</LABEL>\r
+            <LABEL>\author</LABEL>\r
+            <LABEL>\b</LABEL>\r
+            <LABEL>\brief</LABEL>\r
+            <LABEL>\bug</LABEL>\r
+            <LABEL>\c</LABEL>\r
+            <LABEL>\callgraph</LABEL>\r
+            <LABEL>\category</LABEL>\r
+            <LABEL>\class</LABEL>\r
+            <LABEL>\code</LABEL>\r
+            <LABEL>\copydoc</LABEL>\r
+            <LABEL>\date</LABEL>\r
+            <LABEL>\def</LABEL>\r
+            <LABEL>\defgroup</LABEL>\r
+            <LABEL>\deprecated</LABEL>\r
+            <LABEL>\dontinclude</LABEL>\r
+            <LABEL>\dot</LABEL>\r
+            <LABEL>\dotfile</LABEL>\r
+            <LABEL>\e</LABEL>\r
+            <LABEL>\else</LABEL>\r
+            <LABEL>\elseif</LABEL>\r
+            <LABEL>\em</LABEL>\r
+            <LABEL>\endcode</LABEL>\r
+            <LABEL>\enddot</LABEL>\r
+            <LABEL>\endhtmlonly</LABEL>\r
+            <LABEL>\endif</LABEL>\r
+            <LABEL>\endlatexonly</LABEL>\r
+            <LABEL>\endlink</LABEL>\r
+            <LABEL>\endmanonly</LABEL>\r
+            <LABEL>\endverbatim</LABEL>\r
+            <LABEL>\endxmlonly</LABEL>\r
+            <LABEL>\enum</LABEL>\r
+            <LABEL>\example</LABEL>\r
+            <LABEL>\exception</LABEL>\r
+            <LABEL>\f$</LABEL>\r
+            <LABEL>\f[</LABEL>\r
+            <LABEL>\f]</LABEL>\r
+            <LABEL>\file</LABEL>\r
+            <LABEL>\fn</LABEL>\r
+            <LABEL>\hideinitializer</LABEL>\r
+            <LABEL>\htmlinclude</LABEL>\r
+            <LABEL>\htmlonly</LABEL>\r
+            <LABEL>\if</LABEL>\r
+            <LABEL>\ifnot</LABEL>\r
+            <LABEL>\image</LABEL>\r
+            <LABEL>\include</LABEL>\r
+            <LABEL>\includelineno</LABEL>\r
+            <LABEL>\ingroup</LABEL>\r
+            <LABEL>\internal</LABEL>\r
+            <LABEL>\invariant</LABEL>\r
+            <LABEL>\interface</LABEL>\r
+            <LABEL>\latexonly</LABEL>\r
+            <LABEL>\li</LABEL>\r
+            <LABEL>\line</LABEL>\r
+            <LABEL>\link</LABEL>\r
+            <LABEL>\mainpage</LABEL>\r
+            <LABEL>\manonly</LABEL>\r
+            <LABEL>\n</LABEL>\r
+            <LABEL>\name</LABEL>\r
+            <LABEL>\namespace</LABEL>\r
+            <LABEL>\nosubgrouping</LABEL>\r
+            <LABEL>\note</LABEL>\r
+            <LABEL>\overload</LABEL>\r
+            <LABEL>\p</LABEL>\r
+            <LABEL>\package</LABEL>\r
+            <LABEL>\page</LABEL>\r
+            <LABEL>\par</LABEL>\r
+            <LABEL>\paragraph</LABEL>\r
+            <LABEL>\param</LABEL>\r
+            <LABEL>\param[in]</LABEL>\r
+            <LABEL>\param[out]</LABEL>\r
+            <LABEL>\param[in,out]</LABEL>\r
+            <LABEL>\post</LABEL>\r
+            <LABEL>\pre</LABEL>\r
+            <LABEL>\private</LABEL>\r
+            <LABEL>\privatesection</LABEL>\r
+            <LABEL>\property</LABEL>\r
+            <LABEL>\protected</LABEL>\r
+            <LABEL>\protectedsection</LABEL>\r
+            <LABEL>\protocol</LABEL>\r
+            <LABEL>\public</LABEL>\r
+            <LABEL>\publicsection</LABEL>\r
+            <LABEL>\ref</LABEL>\r
+            <LABEL>\relates</LABEL>\r
+            <LABEL>\relatesalso</LABEL>\r
+            <LABEL>\remarks</LABEL>\r
+            <LABEL>\return</LABEL>\r
+            <LABEL>\retval</LABEL>\r
+            <LABEL>\sa</LABEL>\r
+            <LABEL>\section</LABEL>\r
+            <LABEL>\showinitializer</LABEL>\r
+            <LABEL>\since</LABEL>\r
+            <LABEL>\skip</LABEL>\r
+            <LABEL>\skipline</LABEL>\r
+            <LABEL>\struct</LABEL>\r
+            <LABEL>\subsection</LABEL>\r
+            <LABEL>\subsubsection</LABEL>\r
+            <LABEL>\test</LABEL>\r
+            <LABEL>\throw</LABEL>\r
+            <LABEL>\todo</LABEL>\r
+            <LABEL>\typedef</LABEL>\r
+            <LABEL>\union</LABEL>\r
+            <LABEL>\until</LABEL>\r
+            <LABEL>\var</LABEL>\r
+            <LABEL>\verbatim</LABEL>\r
+            <LABEL>\verbinclude</LABEL>\r
+            <LABEL>\version</LABEL>\r
+            <LABEL>\warning</LABEL>\r
+            <LABEL>\weakgroup</LABEL>\r
+            <LABEL>\xmlonly</LABEL>\r
+            <LABEL>\xrefitem</LABEL>\r
+            <LABEL>\$</LABEL>\r
+            <LABEL>\@</LABEL>\r
+            <LABEL>\\</LABEL>\r
+            <LABEL>\&amp;</LABEL>\r
+            <LABEL>\~</LABEL>\r
+            <LABEL>\&lt;</LABEL>\r
+            <LABEL>\&gt;</LABEL>\r
+            <LABEL>\#</LABEL>\r
+            <LABEL>\%</LABEL>\r
+            <LABEL>@a</LABEL>\r
+            <LABEL>@addindex</LABEL>\r
+            <LABEL>@addtogroup</LABEL>\r
+            <LABEL>@anchor</LABEL>\r
+            <LABEL>@arg</LABEL>\r
+            <LABEL>@attention</LABEL>\r
+            <LABEL>@author</LABEL>\r
+            <LABEL>@b</LABEL>\r
+            <LABEL>@brief</LABEL>\r
+            <LABEL>@bug</LABEL>\r
+            <LABEL>@c</LABEL>\r
+            <LABEL>@callgraph</LABEL>\r
+            <LABEL>@category</LABEL>\r
+            <LABEL>@class</LABEL>\r
+            <LABEL>@code</LABEL>\r
+            <LABEL>@copydoc</LABEL>\r
+            <LABEL>@date</LABEL>\r
+            <LABEL>@def</LABEL>\r
+            <LABEL>@defgroup</LABEL>\r
+            <LABEL>@deprecated</LABEL>\r
+            <LABEL>@dontinclude</LABEL>\r
+            <LABEL>@dot</LABEL>\r
+            <LABEL>@dotfile</LABEL>\r
+            <LABEL>@e</LABEL>\r
+            <LABEL>@else</LABEL>\r
+            <LABEL>@elseif</LABEL>\r
+            <LABEL>@em</LABEL>\r
+            <LABEL>@endcode</LABEL>\r
+            <LABEL>@enddot</LABEL>\r
+            <LABEL>@endhtmlonly</LABEL>\r
+            <LABEL>@endif</LABEL>\r
+            <LABEL>@endlatexonly</LABEL>\r
+            <LABEL>@endlink</LABEL>\r
+            <LABEL>@endmanonly</LABEL>\r
+            <LABEL>@endverbatim</LABEL>\r
+            <LABEL>@endxmlonly</LABEL>\r
+            <LABEL>@enum</LABEL>\r
+            <LABEL>@example</LABEL>\r
+            <LABEL>@exception</LABEL>\r
+            <LABEL>@f$</LABEL>\r
+            <LABEL>@f[</LABEL>\r
+            <LABEL>@f]</LABEL>\r
+            <LABEL>@file</LABEL>\r
+            <LABEL>@fn</LABEL>\r
+            <LABEL>@hideinitializer</LABEL>\r
+            <LABEL>@htmlinclude</LABEL>\r
+            <LABEL>@htmlonly</LABEL>\r
+            <LABEL>@if</LABEL>\r
+            <LABEL>@ifnot</LABEL>\r
+            <LABEL>@image</LABEL>\r
+            <LABEL>@include</LABEL>\r
+            <LABEL>@includelineno</LABEL>\r
+            <LABEL>@ingroup</LABEL>\r
+            <LABEL>@internal</LABEL>\r
+            <LABEL>@invariant</LABEL>\r
+            <LABEL>@interface</LABEL>\r
+            <LABEL>@latexonly</LABEL>\r
+            <LABEL>@li</LABEL>\r
+            <LABEL>@line</LABEL>\r
+            <LABEL>@link</LABEL>\r
+            <LABEL>@mainpage</LABEL>\r
+            <LABEL>@manonly</LABEL>\r
+            <LABEL>@n</LABEL>\r
+            <LABEL>@name</LABEL>\r
+            <LABEL>@namespace</LABEL>\r
+            <LABEL>@nosubgrouping</LABEL>\r
+            <LABEL>@note</LABEL>\r
+            <LABEL>@overload</LABEL>\r
+            <LABEL>@p</LABEL>\r
+            <LABEL>@package</LABEL>\r
+            <LABEL>@page</LABEL>\r
+            <LABEL>@par</LABEL>\r
+            <LABEL>@paragraph</LABEL>\r
+            <LABEL>@param</LABEL>\r
+            <LABEL>@param[in]</LABEL>\r
+            <LABEL>@param[out]</LABEL>\r
+            <LABEL>@param[in,out]</LABEL>\r
+            <LABEL>@post</LABEL>\r
+            <LABEL>@pre</LABEL>\r
+            <LABEL>@private</LABEL>\r
+            <LABEL>@privatesection</LABEL>\r
+            <LABEL>@property</LABEL>\r
+            <LABEL>@protected</LABEL>\r
+            <LABEL>@protectedsection</LABEL>\r
+            <LABEL>@protocol</LABEL>\r
+            <LABEL>@public</LABEL>\r
+            <LABEL>@publicsection</LABEL>\r
+            <LABEL>@ref</LABEL>\r
+            <LABEL>@relates</LABEL>\r
+            <LABEL>@relatesalso</LABEL>\r
+            <LABEL>@remarks</LABEL>\r
+            <LABEL>@return</LABEL>\r
+            <LABEL>@retval</LABEL>\r
+            <LABEL>@sa</LABEL>\r
+            <LABEL>@section</LABEL>\r
+            <LABEL>@showinitializer</LABEL>\r
+            <LABEL>@since</LABEL>\r
+            <LABEL>@skip</LABEL>\r
+            <LABEL>@skipline</LABEL>\r
+            <LABEL>@struct</LABEL>\r
+            <LABEL>@subsection</LABEL>\r
+            <LABEL>@subsubsection</LABEL>\r
+            <LABEL>@test</LABEL>\r
+            <LABEL>@throw</LABEL>\r
+            <LABEL>@todo</LABEL>\r
+            <LABEL>@typedef</LABEL>\r
+            <LABEL>@union</LABEL>\r
+            <LABEL>@until</LABEL>\r
+            <LABEL>@var</LABEL>\r
+            <LABEL>@verbatim</LABEL>\r
+            <LABEL>@verbinclude</LABEL>\r
+            <LABEL>@version</LABEL>\r
+            <LABEL>@warning</LABEL>\r
+            <LABEL>@weakgroup</LABEL>\r
+            <LABEL>@xmlonly</LABEL>\r
+            <LABEL>@xrefitem</LABEL>\r
+            <LABEL>@$</LABEL>\r
+            <LABEL>@@</LABEL>\r
+            <LABEL>@\</LABEL>\r
+            <LABEL>@&amp;</LABEL>\r
+            <LABEL>@~</LABEL>\r
+            <LABEL>@&lt;</LABEL>\r
+            <LABEL>@&gt;</LABEL>\r
+            <LABEL>@#</LABEL>\r
+            <LABEL>@%</LABEL>\r
+        </KEYWORDS>\r
+    </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/dsssl.xml b/extra/xmode/modes/dsssl.xml
new file mode 100644 (file)
index 0000000..789c5c0
--- /dev/null
@@ -0,0 +1,153 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- DSSSL is the Document Style Semantics Specification Language,\r
+     used by the Jade SGML documentation generation tool -->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+               <PROPERTY NAME="lineComment" VALUE=";" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- EOL comment -->\r
+               <EOL_SPAN TYPE="COMMENT1">;</EOL_SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- LISP stuff -->\r
+               <SEQ TYPE="NULL">'(</SEQ>\r
+\r
+               <MARK_FOLLOWING TYPE="LITERAL1">'</MARK_FOLLOWING>\r
+\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- DSSSL stuff -->\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>$</BEGIN>\r
+                       <END>$</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>%</BEGIN>\r
+                       <END>%</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="LITERAL2">#</MARK_FOLLOWING>\r
+\r
+               <!-- DTD Entity declarations -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="xml::ENTITY-TAGS">\r
+                       <BEGIN>&lt;!ENTITY</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- CDATA sections -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="xml::CDATA">\r
+                       <BEGIN>&lt;![CDATA[</BEGIN>\r
+                       <END>]]&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD instructions -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">\r
+                       <BEGIN>&lt;!</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SEQ TYPE="NULL">&lt;=</SEQ>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS">\r
+                       <BEGIN>&lt;/style-specification</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS">\r
+                       <BEGIN>&lt;/style-sheet</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS">\r
+                       <BEGIN>&lt;style-specification</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS">\r
+                       <BEGIN>&lt;external-specification</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS">\r
+                       <BEGIN>&lt;style-sheet</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>and</KEYWORD1>\r
+                       <KEYWORD1>cond</KEYWORD1>\r
+                       <KEYWORD1>define</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>lambda</KEYWORD1>\r
+                       <KEYWORD1>or</KEYWORD1>\r
+                       <KEYWORD1>quote</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>let</KEYWORD1>\r
+                       <KEYWORD1>let*</KEYWORD1>\r
+                       <KEYWORD1>loop</KEYWORD1>\r
+                       <KEYWORD1>not</KEYWORD1>\r
+                       <KEYWORD1>list</KEYWORD1>\r
+                       <KEYWORD1>append</KEYWORD1>\r
+                       <KEYWORD1>children</KEYWORD1>\r
+                       <KEYWORD1>normalize</KEYWORD1>\r
+\r
+                       <KEYWORD2>car</KEYWORD2>\r
+                       <KEYWORD2>cdr</KEYWORD2>\r
+                       <KEYWORD2>cons</KEYWORD2>\r
+                       <KEYWORD2>node-list-first</KEYWORD2>\r
+                       <KEYWORD2>node-list-rest</KEYWORD2>\r
+\r
+                       <KEYWORD3>eq?</KEYWORD3>\r
+                       <KEYWORD3>null?</KEYWORD3>\r
+                       <KEYWORD3>pair?</KEYWORD3>\r
+                       <KEYWORD3>zero?</KEYWORD3>\r
+                       <KEYWORD3>equal?</KEYWORD3>\r
+                       <KEYWORD3>node-list-empty?</KEYWORD3>\r
+\r
+                       <FUNCTION>external-procedure</FUNCTION>\r
+                       <FUNCTION>root</FUNCTION>\r
+                       <FUNCTION>make</FUNCTION>\r
+                       <FUNCTION>process-children</FUNCTION>\r
+                       <FUNCTION>current-node</FUNCTION>\r
+                       <FUNCTION>node</FUNCTION>\r
+                       <FUNCTION>empty-sosofo</FUNCTION>\r
+                       <FUNCTION>default</FUNCTION>\r
+                       <FUNCTION>attribute-string</FUNCTION>\r
+                       <FUNCTION>select-elements</FUNCTION>\r
+                       <FUNCTION>with-mode</FUNCTION>\r
+                       <FUNCTION>literal</FUNCTION>\r
+                       <FUNCTION>process-node-list</FUNCTION>\r
+                       <FUNCTION>element</FUNCTION>\r
+                       <FUNCTION>mode</FUNCTION>\r
+                       <FUNCTION>gi</FUNCTION>\r
+                       <FUNCTION>sosofo-append</FUNCTION>\r
+                       <FUNCTION>sequence</FUNCTION>\r
+\r
+                       <LABEL>attributes:</LABEL>\r
+                       <LABEL>gi:</LABEL>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/eiffel.xml b/extra/xmode/modes/eiffel.xml
new file mode 100644 (file)
index 0000000..41ed1bd
--- /dev/null
@@ -0,0 +1,115 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- Eiffel mode, by Slava Pestov. Based on EiffelTokenMarker by\r
+     Artur Biesiadowski -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="--" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- Comment -->\r
+               <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>\r
+\r
+               <!-- Standard literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <!-- some of these should be marked OPERATOR -->\r
+               <!-- <SEQ TYPE="NULL">)</SEQ>\r
+               <SEQ TYPE="NULL">(</SEQ>\r
+               <SEQ TYPE="NULL">=</SEQ>\r
+               <SEQ TYPE="NULL">!</SEQ>\r
+               <SEQ TYPE="NULL">&gt;=</SEQ>\r
+               <SEQ TYPE="NULL">&lt;=</SEQ>\r
+               <SEQ TYPE="NULL">+</SEQ>\r
+               <SEQ TYPE="NULL">-</SEQ>\r
+               <SEQ TYPE="NULL">/</SEQ>\r
+               <SEQ TYPE="NULL">*</SEQ>\r
+               <SEQ TYPE="NULL">&gt;</SEQ>\r
+               <SEQ TYPE="NULL">&lt;</SEQ>\r
+               <SEQ TYPE="NULL">%</SEQ>\r
+               <SEQ TYPE="NULL">&amp;</SEQ>\r
+               <SEQ TYPE="NULL">|</SEQ>\r
+               <SEQ TYPE="NULL">^</SEQ>\r
+               <SEQ TYPE="NULL">~</SEQ>\r
+               <SEQ TYPE="NULL">}</SEQ>\r
+               <SEQ TYPE="NULL">{</SEQ>\r
+               <SEQ TYPE="NULL">.</SEQ>\r
+               <SEQ TYPE="NULL">,</SEQ>\r
+               <SEQ TYPE="NULL">;</SEQ>\r
+               <SEQ TYPE="NULL">]</SEQ>\r
+               <SEQ TYPE="NULL">[</SEQ>\r
+               <SEQ TYPE="NULL">?</SEQ>\r
+               <SEQ TYPE="NULL">:</SEQ> -->\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>alias</KEYWORD1>\r
+                       <KEYWORD1>all</KEYWORD1>\r
+                       <KEYWORD1>and</KEYWORD1>\r
+                       <KEYWORD1>as</KEYWORD1>\r
+                       <KEYWORD1>check</KEYWORD1>\r
+                       <KEYWORD1>class</KEYWORD1>\r
+                       <KEYWORD1>creation</KEYWORD1>\r
+                       <KEYWORD1>debug</KEYWORD1>\r
+                       <KEYWORD1>deferred</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>elseif</KEYWORD1>\r
+                       <KEYWORD1>end</KEYWORD1>\r
+                       <KEYWORD1>ensure</KEYWORD1>\r
+                       <KEYWORD1>expanded</KEYWORD1>\r
+                       <KEYWORD1>export</KEYWORD1>\r
+                       <KEYWORD1>external</KEYWORD1>\r
+                       <KEYWORD1>feature</KEYWORD1>\r
+                       <KEYWORD1>from</KEYWORD1>\r
+                       <KEYWORD1>frozen</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>implies</KEYWORD1>\r
+                       <KEYWORD1>indexing</KEYWORD1>\r
+                       <KEYWORD1>infix</KEYWORD1>\r
+                       <KEYWORD1>inherit</KEYWORD1>\r
+                       <KEYWORD1>inspect</KEYWORD1>\r
+                       <KEYWORD1>invariant</KEYWORD1>\r
+                       <KEYWORD1>is</KEYWORD1>\r
+                       <KEYWORD1>like</KEYWORD1>\r
+                       <KEYWORD1>local</KEYWORD1>\r
+                       <KEYWORD1>loop</KEYWORD1>\r
+                       <KEYWORD1>not</KEYWORD1>\r
+                       <KEYWORD1>obsolete</KEYWORD1>\r
+                       <KEYWORD1>old</KEYWORD1>\r
+                       <KEYWORD1>once</KEYWORD1>\r
+                       <KEYWORD1>or</KEYWORD1>\r
+                       <KEYWORD1>prefix</KEYWORD1>\r
+                       <KEYWORD1>redefine</KEYWORD1>\r
+                       <KEYWORD1>rename</KEYWORD1>\r
+                       <KEYWORD1>require</KEYWORD1>\r
+                       <KEYWORD1>rescue</KEYWORD1>\r
+                       <KEYWORD1>retry</KEYWORD1>\r
+                       <KEYWORD1>select</KEYWORD1>\r
+                       <KEYWORD1>separate</KEYWORD1>\r
+                       <KEYWORD1>then</KEYWORD1>\r
+                       <KEYWORD1>undefine</KEYWORD1>\r
+                       <KEYWORD1>until</KEYWORD1>\r
+                       <KEYWORD1>variant</KEYWORD1>\r
+                       <KEYWORD1>when</KEYWORD1>\r
+                       <KEYWORD1>xor</KEYWORD1>\r
+\r
+                       <LITERAL2>current</LITERAL2>\r
+                       <LITERAL2>false</LITERAL2>\r
+                       <LITERAL2>precursor</LITERAL2>\r
+                       <LITERAL2>result</LITERAL2>\r
+                       <LITERAL2>strip</LITERAL2>\r
+                       <LITERAL2>true</LITERAL2>\r
+                       <LITERAL2>unique</LITERAL2>\r
+                       <LITERAL2>void</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/embperl.xml b/extra/xmode/modes/embperl.xml
new file mode 100644 (file)
index 0000000..4dcc35e
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+catalog entry:\r
+\r
+<MODE NAME="embperl"           FILE="embperl.xml"\r
+                               FILE_NAME_GLOB="*.epl"/>\r
+\r
+sidekick parser entry:\r
+mode.embperl.sidekick.parser=html\r
+\r
+xml completion entry:\r
+mode.embperl.xml.completion-info=jeditresource:/XML.jar!/xml/completion/html-complete.xml\r
+-->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="FALSE">\r
+               <SPAN TYPE="COMMENT2">\r
+                       <BEGIN>[#</BEGIN>\r
+                       <END>#]</END>\r
+               </SPAN>\r
+               <!-- output result -->\r
+               <SPAN DELEGATE="perl::MAIN" TYPE="LITERAL3">\r
+                       <BEGIN>[+</BEGIN>\r
+                       <END>+]</END>\r
+               </SPAN>\r
+               <!-- execute code -->\r
+               <SPAN DELEGATE="perl::MAIN" TYPE="LITERAL3">\r
+                       <BEGIN>[-</BEGIN>\r
+                       <END>-]</END>\r
+               </SPAN>\r
+               <!-- control flow -->\r
+               <SPAN DELEGATE="perl::MAIN" TYPE="LITERAL3">\r
+                       <BEGIN>[$</BEGIN>\r
+                       <END>$]</END>\r
+               </SPAN>\r
+               <!-- execute once -->\r
+               <SPAN DELEGATE="perl::MAIN" TYPE="LITERAL3">\r
+                       <BEGIN>[!</BEGIN>\r
+                       <END>!]</END>\r
+               </SPAN>\r
+               <IMPORT DELEGATE="html::MAIN"/>\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/erlang.xml b/extra/xmode/modes/erlang.xml
new file mode 100644 (file)
index 0000000..eaf39e1
--- /dev/null
@@ -0,0 +1,266 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="%"/>\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE" ESCAPE="\">\r
+               <EOL_SPAN TYPE="COMMENT1">%</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <MARK_PREVIOUS TYPE="LITERAL2" MATCH_TYPE="OPERATOR">:</MARK_PREVIOUS>\r
+\r
+               <SEQ_REGEXP HASH_CHAR="$"\r
+                       TYPE="LITERAL3"\r
+                       AT_WORD_START="TRUE"\r
+               >\$.\w*</SEQ_REGEXP>\r
+\r
+               <SEQ TYPE="LITERAL3">badarg</SEQ>\r
+               <SEQ TYPE="LITERAL3">nocookie</SEQ>\r
+               <SEQ TYPE="LITERAL3">false</SEQ>\r
+               <SEQ TYPE="LITERAL3">true</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">-&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;-</SEQ>\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <SEQ TYPE="OPERATOR">;</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">#</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <!--\r
+               <SEQ TYPE="OPERATOR">(</SEQ>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+               -->\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+\r
+               <!-- div -->\r
+               <SEQ_REGEXP HASH_CHAR="div"\r
+                       TYPE="OPERATOR"\r
+                       AT_WORD_START="TRUE"\r
+               >\bdiv\b</SEQ_REGEXP>\r
+               <!-- rem -->\r
+               <SEQ_REGEXP HASH_CHAR="rem"\r
+                       TYPE="OPERATOR"\r
+                       AT_WORD_START="TRUE"\r
+               >\brem\b</SEQ_REGEXP>\r
+               <!-- or -->\r
+               <SEQ_REGEXP HASH_CHAR="or"\r
+                       TYPE="OPERATOR"\r
+                       AT_WORD_START="TRUE"\r
+               >\bor\b</SEQ_REGEXP>\r
+               <!-- xor -->\r
+               <SEQ_REGEXP HASH_CHAR="xor"\r
+                       TYPE="OPERATOR"\r
+                       AT_WORD_START="TRUE"\r
+               >\bxor\b</SEQ_REGEXP>\r
+               <!-- bor -->\r
+               <SEQ_REGEXP HASH_CHAR="bor"\r
+                       TYPE="OPERATOR"\r
+                       AT_WORD_START="TRUE"\r
+               >\bbor\b</SEQ_REGEXP>\r
+               <!-- bxor -->\r
+               <SEQ_REGEXP HASH_CHAR="bxor"\r
+                       TYPE="OPERATOR"\r
+                       AT_WORD_START="TRUE"\r
+               >\bbxor\b</SEQ_REGEXP>\r
+               <!-- bsl -->\r
+               <SEQ_REGEXP HASH_CHAR="bsl"\r
+                       TYPE="OPERATOR"\r
+                       AT_WORD_START="TRUE"\r
+               >\bbsl\b</SEQ_REGEXP>\r
+               <!-- bsr -->\r
+               <SEQ_REGEXP HASH_CHAR="bsr"\r
+                       TYPE="OPERATOR"\r
+                       AT_WORD_START="TRUE"\r
+               >\bbsr\b</SEQ_REGEXP>\r
+               <!-- and -->\r
+               <SEQ_REGEXP HASH_CHAR="and"\r
+                       TYPE="OPERATOR"\r
+                       AT_WORD_START="TRUE"\r
+               >\band\b</SEQ_REGEXP>\r
+               <!-- band -->\r
+               <SEQ_REGEXP HASH_CHAR="band"\r
+                       TYPE="OPERATOR"\r
+                       AT_WORD_START="TRUE"\r
+               >\bband\b</SEQ_REGEXP>\r
+               <!-- not -->\r
+               <SEQ_REGEXP HASH_CHAR="not"\r
+                       TYPE="OPERATOR"\r
+                       AT_WORD_START="TRUE"\r
+               >\bnot\b</SEQ_REGEXP>\r
+               <!-- bnot -->\r
+               <SEQ_REGEXP HASH_CHAR="bnot"\r
+                       TYPE="OPERATOR"\r
+                       AT_WORD_START="TRUE"\r
+               >\bbnot\b</SEQ_REGEXP>\r
+\r
+               <KEYWORDS>\r
+                       <!-- keywords -->\r
+                       <KEYWORD1>after</KEYWORD1>\r
+                       <KEYWORD1>begin</KEYWORD1>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>catch</KEYWORD1>\r
+                       <KEYWORD1>cond</KEYWORD1>\r
+                       <KEYWORD1>end</KEYWORD1>\r
+                       <KEYWORD1>fun</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>let</KEYWORD1>\r
+                       <KEYWORD1>of</KEYWORD1>\r
+                       <KEYWORD1>query</KEYWORD1>\r
+                       <KEYWORD1>receive</KEYWORD1>\r
+                       <KEYWORD1>when</KEYWORD1>\r
+\r
+                       <!-- built-in-functions BIFs -->\r
+                       <KEYWORD2>abs</KEYWORD2>\r
+                       <KEYWORD2>alive</KEYWORD2>\r
+                       <KEYWORD2>apply</KEYWORD2>\r
+                       <KEYWORD2>atom_to_list</KEYWORD2>\r
+                       <KEYWORD2>binary_to_list</KEYWORD2>\r
+                       <KEYWORD2>binary_to_term</KEYWORD2>\r
+                       <KEYWORD2>concat_binary</KEYWORD2>\r
+                       <KEYWORD2>date</KEYWORD2>\r
+                       <KEYWORD2>disconnect_node</KEYWORD2>\r
+                       <KEYWORD2>element</KEYWORD2>\r
+                       <KEYWORD2>erase</KEYWORD2>\r
+                       <KEYWORD2>exit</KEYWORD2>\r
+                       <KEYWORD2>float</KEYWORD2>\r
+                       <KEYWORD2>float_to_list</KEYWORD2>\r
+                       <KEYWORD2>get</KEYWORD2>\r
+                       <KEYWORD2>get_keys</KEYWORD2>\r
+                       <KEYWORD2>group_leader</KEYWORD2>\r
+                       <KEYWORD2>halt</KEYWORD2>\r
+                       <KEYWORD2>hd</KEYWORD2>\r
+                       <KEYWORD2>integer_to_list</KEYWORD2>\r
+                       <KEYWORD2>is_alive</KEYWORD2>\r
+                       <KEYWORD2>length</KEYWORD2>\r
+                       <KEYWORD2>link</KEYWORD2>\r
+                       <KEYWORD2>list_to_atom</KEYWORD2>\r
+                       <KEYWORD2>list_to_binary</KEYWORD2>\r
+                       <KEYWORD2>list_to_float</KEYWORD2>\r
+                       <KEYWORD2>list_to_integer</KEYWORD2>\r
+                       <KEYWORD2>list_to_pid</KEYWORD2>\r
+                       <KEYWORD2>list_to_tuple</KEYWORD2>\r
+                       <KEYWORD2>load_module</KEYWORD2>\r
+                       <KEYWORD2>make_ref</KEYWORD2>\r
+                       <KEYWORD2>monitor_node</KEYWORD2>\r
+                       <KEYWORD2>node</KEYWORD2>\r
+                       <KEYWORD2>nodes</KEYWORD2>\r
+                       <KEYWORD2>now</KEYWORD2>\r
+                       <KEYWORD2>open_port</KEYWORD2>\r
+                       <KEYWORD2>pid_to_list</KEYWORD2>\r
+                       <KEYWORD2>process_flag</KEYWORD2>\r
+                       <KEYWORD2>process_info</KEYWORD2>\r
+                       <KEYWORD2>process</KEYWORD2>\r
+                       <KEYWORD2>put</KEYWORD2>\r
+                       <KEYWORD2>register</KEYWORD2>\r
+                       <KEYWORD2>registered</KEYWORD2>\r
+                       <KEYWORD2>round</KEYWORD2>\r
+                       <KEYWORD2>self</KEYWORD2>\r
+                       <KEYWORD2>setelement</KEYWORD2>\r
+                       <KEYWORD2>size</KEYWORD2>\r
+                       <KEYWORD2>spawn</KEYWORD2>\r
+                       <KEYWORD2>spawn_link</KEYWORD2>\r
+                       <KEYWORD2>split_binary</KEYWORD2>\r
+                       <KEYWORD2>statistics</KEYWORD2>\r
+                       <KEYWORD2>term_to_binary</KEYWORD2>\r
+                       <KEYWORD2>throw</KEYWORD2>\r
+                       <KEYWORD2>time</KEYWORD2>\r
+                       <KEYWORD2>tl</KEYWORD2>\r
+                       <KEYWORD2>trunc</KEYWORD2>\r
+                       <KEYWORD2>tuple_to_list</KEYWORD2>\r
+                       <KEYWORD2>unlink</KEYWORD2>\r
+                       <KEYWORD2>unregister</KEYWORD2>\r
+                       <KEYWORD2>whereis</KEYWORD2>\r
+\r
+                       <!-- other BIFs -->\r
+                       <KEYWORD2>atom</KEYWORD2>\r
+                       <KEYWORD2>binary</KEYWORD2>\r
+                       <KEYWORD2>constant</KEYWORD2>\r
+                       <KEYWORD2>function</KEYWORD2>\r
+                       <KEYWORD2>integer</KEYWORD2>\r
+                       <KEYWORD2>list</KEYWORD2>\r
+                       <KEYWORD2>number</KEYWORD2>\r
+                       <KEYWORD2>pid</KEYWORD2>\r
+                       <KEYWORD2>ports</KEYWORD2>\r
+                       <KEYWORD2>port_close</KEYWORD2>\r
+                       <KEYWORD2>port_info</KEYWORD2>\r
+                       <KEYWORD2>reference</KEYWORD2>\r
+                       <KEYWORD2>record</KEYWORD2>\r
+\r
+                       <!-- erlang:BIFs -->\r
+                       <KEYWORD2>check_process_code</KEYWORD2>\r
+                       <KEYWORD2>delete_module</KEYWORD2>\r
+                       <KEYWORD2>get_cookie</KEYWORD2>\r
+                       <KEYWORD2>hash</KEYWORD2>\r
+                       <KEYWORD2>math</KEYWORD2>\r
+                       <KEYWORD2>module_loaded</KEYWORD2>\r
+                       <KEYWORD2>preloaded</KEYWORD2>\r
+                       <KEYWORD2>processes</KEYWORD2>\r
+                       <KEYWORD2>purge_module</KEYWORD2>\r
+                       <KEYWORD2>set_cookie</KEYWORD2>\r
+                       <KEYWORD2>set_node</KEYWORD2>\r
+\r
+                       <!-- math functions -->\r
+                       <KEYWORD2>acos</KEYWORD2>\r
+                       <KEYWORD2>asin</KEYWORD2>\r
+                       <KEYWORD2>atan</KEYWORD2>\r
+                       <KEYWORD2>atan2</KEYWORD2>\r
+                       <KEYWORD2>cos</KEYWORD2>\r
+                       <KEYWORD2>cosh</KEYWORD2>\r
+                       <KEYWORD2>exp</KEYWORD2>\r
+                       <KEYWORD2>log</KEYWORD2>\r
+                       <KEYWORD2>log10</KEYWORD2>\r
+                       <KEYWORD2>pi</KEYWORD2>\r
+                       <KEYWORD2>pow</KEYWORD2>\r
+                       <KEYWORD2>power</KEYWORD2>\r
+                       <KEYWORD2>sin</KEYWORD2>\r
+                       <KEYWORD2>sinh</KEYWORD2>\r
+                       <KEYWORD2>sqrt</KEYWORD2>\r
+                       <KEYWORD2>tan</KEYWORD2>\r
+                       <KEYWORD2>tanh</KEYWORD2>\r
+\r
+                       <!-- directives -->\r
+                       <KEYWORD3>-behaviour</KEYWORD3>\r
+                       <KEYWORD3>-compile</KEYWORD3>\r
+                       <KEYWORD3>-define</KEYWORD3>\r
+                       <KEYWORD3>-else</KEYWORD3>\r
+                       <KEYWORD3>-endif</KEYWORD3>\r
+                       <KEYWORD3>-export</KEYWORD3>\r
+                       <KEYWORD3>-file</KEYWORD3>\r
+                       <KEYWORD3>-ifdef</KEYWORD3>\r
+                       <KEYWORD3>-ifndef</KEYWORD3>\r
+                       <KEYWORD3>-import</KEYWORD3>\r
+                       <KEYWORD3>-include</KEYWORD3>\r
+                       <KEYWORD3>-include_lib</KEYWORD3>\r
+                       <KEYWORD3>-module</KEYWORD3>\r
+                       <KEYWORD3>-record</KEYWORD3>\r
+                       <KEYWORD3>-undef</KEYWORD3>\r
+               </KEYWORDS>\r
+\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/factor.xml b/extra/xmode/modes/factor.xml
new file mode 100644 (file)
index 0000000..9aa545e
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="[{"/>\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="]}"/>\r
+               <PROPERTY NAME="indentNextLines" VALUE="^(:|M:|C:|PREDICATE:)[^;]*"/>\r
+               <PROPERTY NAME="unindentNextLines" VALUE="^.*;.*$"/>\r
+               <PROPERTY NAME="doubleBracketIndent" VALUE="true"/>\r
+               <PROPERTY NAME="commentStart" VALUE="("/>\r
+               <PROPERTY NAME="commentEnd" VALUE=")"/>\r
+               <PROPERTY NAME="lineComment" VALUE="!"/>\r
+               <PROPERTY NAME="noWordSep" VALUE="+-*=&gt;&lt;;.?/'()%,_|"/>\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="FALSE" ESCAPE="\" NO_WORD_SEP="+-*=&gt;&lt;;.?/'()%,_"\r
+               HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="-?\d+([./]\d+)?">\r
+               <EOL_SPAN TYPE="COMMENT2" AT_WORD_START="TRUE"\r
+                       DELEGATE="COMMENT">#! </EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1" AT_WORD_START="TRUE"\r
+                       DELEGATE="COMMENT">! </EOL_SPAN>\r
+\r
+               <!-- parsing words -->\r
+               <SEQ_REGEXP TYPE="MARKUP"\r
+                       HASH_CHAR="\"\r
+                       AT_WORD_START="TRUE">\\\s+(\S+)</SEQ_REGEXP>\r
+               <SEQ_REGEXP TYPE="MARKUP"\r
+                       HASH_CHAR=":"\r
+                       AT_WORD_START="TRUE">:\s+(\S+)</SEQ_REGEXP>\r
+               <SEQ_REGEXP TYPE="MARKUP"\r
+                       HASH_CHAR="IN:"\r
+                       AT_WORD_START="TRUE">IN:\s+(\S+)</SEQ_REGEXP>\r
+               <SEQ_REGEXP TYPE="MARKUP"\r
+                       HASH_CHAR="USE:"\r
+                       AT_WORD_START="TRUE">USE:\s+(\S+)</SEQ_REGEXP>\r
+               <SEQ_REGEXP TYPE="LITERAL2"\r
+                       HASH_CHAR="CHAR:"\r
+                       AT_WORD_START="TRUE">CHAR:\s+(\S+)</SEQ_REGEXP>\r
+               <SEQ_REGEXP TYPE="LITERAL2"\r
+                       HASH_CHAR="BIN:"\r
+                       AT_WORD_START="TRUE">BIN:\s+(\S+)</SEQ_REGEXP>\r
+               <SEQ_REGEXP TYPE="LITERAL2"\r
+                       HASH_CHAR="OCT:"\r
+                       AT_WORD_START="TRUE">OCT:\s+(\S+)</SEQ_REGEXP>\r
+               <SEQ_REGEXP TYPE="LITERAL2"\r
+                       HASH_CHAR="HEX:"\r
+                       AT_WORD_START="TRUE">HEX:\s+(\S+)</SEQ_REGEXP>\r
+\r
+               <SPAN TYPE="COMMENT3" DELEGATE="STACK_EFFECT" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>( </BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE"\r
+                       DELEGATE="LITERAL">\r
+                       <BEGIN>SBUF" </BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE"\r
+                       DELEGATE="LITERAL">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="MARKUP" DELEGATE="USING">\r
+                       <BEGIN>USING: </BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>&gt;r</KEYWORD1>\r
+                       <KEYWORD1>r&gt;</KEYWORD1>\r
+\r
+                       <MARKUP>;</MARKUP>\r
+\r
+                       <LITERAL3>t</LITERAL3>\r
+                       <LITERAL4>f</LITERAL4>\r
+                       \r
+                       <COMMENT2>#!</COMMENT2>\r
+                       <COMMENT1>!</COMMENT1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="STACK_EFFECT" DEFAULT="COMMENT4">\r
+               <SEQ TYPE="COMMENT3">--</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="LITERAL" DEFAULT="LITERAL1">\r
+       </RULES>\r
+\r
+       <RULES SET="COMMENT" DEFAULT="COMMENT1">\r
+       </RULES>\r
+\r
+       <RULES SET="USING" DEFAULT="LITERAL2">\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/fhtml.xml b/extra/xmode/modes/fhtml.xml
new file mode 100644 (file)
index 0000000..68646e2
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+
+<!DOCTYPE MODE SYSTEM "xmode.dtd">
+
+<!-- fhtml (factor+html) mode -->
+
+<MODE>
+       <PROPS>
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />
+               <PROPERTY NAME="commentStart" VALUE="&lt;%#" />
+               <PROPERTY NAME="commentEnd" VALUE="%&gt;" />
+               <PROPERTY NAME="tabSize" VALUE="4" />
+               <PROPERTY NAME="noTabs" VALUE="true" />
+       </PROPS>
+       <RULES IGNORE_CASE="TRUE">
+               <SPAN TYPE="MARKUP" DELEGATE="factor::MAIN">
+                       <BEGIN>&lt;%</BEGIN>
+                       <END>%&gt;</END>
+               </SPAN>
+
+               <IMPORT DELEGATE="html::MAIN" />
+       </RULES>
+</MODE>
diff --git a/extra/xmode/modes/forth.xml b/extra/xmode/modes/forth.xml
new file mode 100644 (file)
index 0000000..450676b
--- /dev/null
@@ -0,0 +1,153 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- RetroForth is one of the nicest Forth implementations, so we\r
+support that one. You can extend this to your own Forth's vocabulary\r
+easily. -->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="indentNextLines" VALUE="^:[^;]*" />\r
+               <PROPERTY NAME="unindentNextLines" VALUE="^.*;$" />\r
+               <PROPERTY NAME="commentStart" VALUE="(" />\r
+               <PROPERTY NAME="commentEnd" VALUE=")" />\r
+               <PROPERTY NAME="lineComment" VALUE="|" />\r
+               <PROPERTY NAME="noWordSep" VALUE="+-*=&gt;&lt;;.?/'()%,_|$" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="FALSE"\r
+               NO_WORD_SEP="+-*=&gt;&lt;;.?/'&quot;()%,_$"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="|-?\d+([./]\d+)?">\r
+\r
+               <EOL_SPAN TYPE="COMMENT1" AT_WORD_START="TRUE">| </EOL_SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="DIGIT" AT_WORD_START="TRUE">$</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="LITERAL3" AT_WORD_START="TRUE">'</MARK_FOLLOWING>\r
+\r
+               <!-- parsing words -->\r
+               <SEQ_REGEXP TYPE="MARKUP"\r
+                       HASH_CHAR=":"\r
+                       AT_WORD_START="TRUE">:\s+(\S+)</SEQ_REGEXP>\r
+\r
+               <SPAN TYPE="COMMENT3" DELEGATE="STACK_EFFECT">\r
+                       <BEGIN>( </BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE"\r
+                       AT_WORD_START="TRUE">\r
+                       <BEGIN>s"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE"\r
+                       AT_WORD_START="TRUE">\r
+                       <BEGIN>."</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL3" NO_LINE_BREAK="TRUE"\r
+                       AT_WORD_START="TRUE">\r
+                       <BEGIN>f"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL3" NO_LINE_BREAK="TRUE"\r
+                       AT_WORD_START="TRUE">\r
+                       <BEGIN>m"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL4" NO_LINE_BREAK="TRUE"\r
+                       AT_WORD_START="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <KEYWORDS>\r
+                       <MARKUP>;</MARKUP>\r
+                       <MARKUP>;;</MARKUP>\r
+                       <MARKUP>0;</MARKUP>\r
+\r
+                       <KEYWORD1>swap</KEYWORD1>\r
+                       <KEYWORD1>drop</KEYWORD1>\r
+                       <KEYWORD1>dup</KEYWORD1>\r
+                       <KEYWORD1>nip</KEYWORD1>\r
+                       <KEYWORD1>over</KEYWORD1>\r
+                       <KEYWORD1>rot</KEYWORD1>\r
+                       <KEYWORD1>-rot</KEYWORD1>\r
+                       <KEYWORD1>2dup</KEYWORD1>\r
+                       <KEYWORD1>2drop</KEYWORD1>\r
+                       <KEYWORD1>2over</KEYWORD1>\r
+                       <KEYWORD1>2swap</KEYWORD1>\r
+                       <KEYWORD1>&gt;r</KEYWORD1>\r
+                       <KEYWORD1>r&gt;</KEYWORD1>\r
+\r
+                       <KEYWORD2>and</KEYWORD2>\r
+                       <KEYWORD2>or</KEYWORD2>\r
+                       <KEYWORD2>xor</KEYWORD2>\r
+                       <KEYWORD2>&gt;&gt;</KEYWORD2>\r
+                       <KEYWORD2>&lt;&lt;</KEYWORD2>\r
+                       <KEYWORD2>not</KEYWORD2>\r
+                       <KEYWORD2>+</KEYWORD2>\r
+                       <KEYWORD2>*</KEYWORD2>\r
+                       <KEYWORD2>negate</KEYWORD2>\r
+                       <KEYWORD2>-</KEYWORD2>\r
+                       <KEYWORD2>/</KEYWORD2>\r
+                       <KEYWORD2>mod</KEYWORD2>\r
+                       <KEYWORD2>/mod</KEYWORD2>\r
+                       <KEYWORD2>*/</KEYWORD2>\r
+                       <KEYWORD2>1+</KEYWORD2>\r
+                       <KEYWORD2>1-</KEYWORD2>\r
+                       <KEYWORD2>base</KEYWORD2>\r
+                       <KEYWORD2>hex</KEYWORD2>\r
+                       <KEYWORD2>decimal</KEYWORD2>\r
+                       <KEYWORD2>binary</KEYWORD2>\r
+                       <KEYWORD2>octal</KEYWORD2>\r
+\r
+                       <KEYWORD3>@</KEYWORD3>\r
+                       <KEYWORD3>!</KEYWORD3>\r
+                       <KEYWORD3>c@</KEYWORD3>\r
+                       <KEYWORD3>c!</KEYWORD3>\r
+                       <KEYWORD3>+!</KEYWORD3>\r
+                       <KEYWORD3>cell+</KEYWORD3>\r
+                       <KEYWORD3>cells</KEYWORD3>\r
+                       <KEYWORD3>char+</KEYWORD3>\r
+                       <KEYWORD3>chars</KEYWORD3>\r
+\r
+                       <KEYWORD4>[</KEYWORD4>\r
+                       <KEYWORD4>]</KEYWORD4>\r
+                       <KEYWORD4>create</KEYWORD4>\r
+                       <KEYWORD4>does&gt;</KEYWORD4>\r
+                       <KEYWORD4>variable</KEYWORD4>\r
+                       <KEYWORD4>variable,</KEYWORD4>\r
+                       <KEYWORD4>literal</KEYWORD4>\r
+                       <KEYWORD4>last</KEYWORD4>\r
+                       <KEYWORD4>1,</KEYWORD4>\r
+                       <KEYWORD4>2,</KEYWORD4>\r
+                       <KEYWORD4>3,</KEYWORD4>\r
+                       <KEYWORD4>,</KEYWORD4>\r
+                       <KEYWORD4>here</KEYWORD4>\r
+                       <KEYWORD4>allot</KEYWORD4>\r
+                       <KEYWORD4>parse</KEYWORD4>\r
+                       <KEYWORD4>find</KEYWORD4>\r
+                       <KEYWORD4>compile</KEYWORD4>\r
+\r
+                       <OPERATOR>if</OPERATOR>\r
+                       <OPERATOR>=if</OPERATOR>\r
+                       <OPERATOR>&lt;if</OPERATOR>\r
+                       <OPERATOR>&gt;if</OPERATOR>\r
+                       <OPERATOR>&lt;&gt;if</OPERATOR>\r
+                       <OPERATOR>then</OPERATOR>\r
+                       <OPERATOR>repeat</OPERATOR>\r
+                       <OPERATOR>until</OPERATOR>\r
+\r
+                       <OPERATOR>forth</OPERATOR>\r
+                       <OPERATOR>macro</OPERATOR>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="STACK_EFFECT" DEFAULT="COMMENT4">\r
+               <SEQ TYPE="COMMENT3">--</SEQ>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/fortran.xml b/extra/xmode/modes/fortran.xml
new file mode 100644 (file)
index 0000000..1bc2626
--- /dev/null
@@ -0,0 +1,249 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+<!--  FORTRAN edit mode\r
+      Version $Id: fortran.xml 10573 2007-09-14 02:04:59Z ezust $\r
+-->\r
+<!-- This is a mode for FORTRAN source files.  In general, this supports\r
+common features of the F90 specification.  This may however contain some\r
+platform or vendor specific keywords (in paticular COMPAQ(Digital) FORTRAN).\r
+-->\r
+<!-- Suggested catalog file entry:\r
+\r
+<MODE NAME="FORTRAN"           FILE="FORTRAN.xml"\r
+                               FILE_NAME_GLOB="*.{f,for,fort,f77,f90}" />\r
+ -->\r
+<MODE>\r
+    <PROPS>\r
+         <!-- To get the line comment inserted correctly at line start:\r
+              use the "toggle-line-comment"-action of TextTools plugin \r
+              with the active option "Insert line comments at start of line" -->\r
+         <PROPERTY NAME="lineComment"    VALUE="C" />\r
+         \r
+         <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+         <PROPERTY NAME="indentNextLine" VALUE="\s*((if\s*\(.*\)\s*then|else\s*|do\s*)*)" />\r
+    </PROPS>\r
+\r
+    <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="FALSE">\r
+<!-- In fixed form, column 72 is the last column parsed, unless the\r
+\extend_source option is invoked -->\r
+    <!-- TERMINATE AT_CHAR="72" / -->\r
+\r
+<!-- comment either !, C, or * can be used as a comment in the first column\r
+in either free or fixed form FORTRAN-->\r
+<EOL_SPAN TYPE="COMMENT1" AT_LINE_START="TRUE">C</EOL_SPAN>\r
+<EOL_SPAN TYPE="COMMENT1" AT_LINE_START="TRUE">!</EOL_SPAN>\r
+<EOL_SPAN TYPE="COMMENT1" AT_LINE_START="TRUE">*</EOL_SPAN>\r
+<EOL_SPAN TYPE="COMMENT1">!</EOL_SPAN>\r
+<EOL_SPAN TYPE="COMMENT2" AT_LINE_START="TRUE">D</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+<!-- Highlighted Operators -->\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">/=</SEQ>\r
+               <SEQ TYPE="OPERATOR">==</SEQ>\r
+               <SEQ TYPE="OPERATOR">.lt.</SEQ>\r
+               <SEQ TYPE="OPERATOR">.gt.</SEQ>\r
+               <SEQ TYPE="OPERATOR">.eq.</SEQ>\r
+               <SEQ TYPE="OPERATOR">.ne.</SEQ>\r
+               <SEQ TYPE="OPERATOR">.le.</SEQ>\r
+               <SEQ TYPE="OPERATOR">.ge.</SEQ>\r
+               <SEQ TYPE="OPERATOR">.AND.</SEQ>\r
+               <SEQ TYPE="OPERATOR">.OR.</SEQ>\r
+\r
+<KEYWORDS>\r
+<!-- unclassified keywords -->\r
+<KEYWORD1>INCLUDE</KEYWORD1>\r
+<!-- Program units and calling them -->\r
+<KEYWORD1>PROGRAM</KEYWORD1>\r
+<KEYWORD1>MODULE</KEYWORD1>\r
+<KEYWORD1>SUBROUTINE</KEYWORD1>\r
+<KEYWORD1>FUNCTION</KEYWORD1>\r
+<KEYWORD1>CONTAINS</KEYWORD1>\r
+<KEYWORD1>USE</KEYWORD1>\r
+<KEYWORD1>CALL</KEYWORD1>\r
+<KEYWORD1>RETURN</KEYWORD1>\r
+<!-- data types, declaration, and allocation keywords -->\r
+<KEYWORD1>IMPLICIT</KEYWORD1>\r
+<KEYWORD1>EXPLICIT</KEYWORD1>\r
+<KEYWORD1>NONE</KEYWORD1>\r
+<KEYWORD1>DATA</KEYWORD1>\r
+<KEYWORD1>PARAMETER</KEYWORD1>\r
+<KEYWORD1>ALLOCATE</KEYWORD1>\r
+<KEYWORD1>ALLOCATABLE</KEYWORD1>\r
+<KEYWORD1>ALLOCATED</KEYWORD1>\r
+<KEYWORD1>DEALLOCATE</KEYWORD1>\r
+<KEYWORD1>INTEGER</KEYWORD1>\r
+<KEYWORD1>REAL</KEYWORD1>\r
+<KEYWORD1>DOUBLE</KEYWORD1>\r
+<KEYWORD1>PRECISION</KEYWORD1>\r
+<KEYWORD1>COMPLEX</KEYWORD1>\r
+<KEYWORD1>LOGICAL</KEYWORD1>\r
+<KEYWORD1>CHARACTER</KEYWORD1>\r
+<KEYWORD1>DIMENSION</KEYWORD1>\r
+<KEYWORD1>KIND</KEYWORD1>\r
+<!-- FORTRAN Statements -->\r
+<KEYWORD1>CASE</KEYWORD1>\r
+<KEYWORD1>SELECT</KEYWORD1>\r
+<KEYWORD1>DEFAULT</KEYWORD1>\r
+<KEYWORD1>CONTINUE</KEYWORD1>\r
+<KEYWORD1>CYCLE</KEYWORD1>\r
+<KEYWORD1>DO</KEYWORD1>\r
+<KEYWORD1>WHILE</KEYWORD1>\r
+<KEYWORD1>ELSE</KEYWORD1>\r
+<KEYWORD1>IF</KEYWORD1>\r
+<KEYWORD1>ELSEIF</KEYWORD1>\r
+<KEYWORD1>THEN</KEYWORD1>\r
+<KEYWORD1>ELSEWHERE</KEYWORD1>\r
+<KEYWORD1>END</KEYWORD1>\r
+<KEYWORD1>ENDIF</KEYWORD1>\r
+<KEYWORD1>ENDDO</KEYWORD1>\r
+<KEYWORD1>FORALL</KEYWORD1>\r
+<KEYWORD1>WHERE</KEYWORD1>\r
+<KEYWORD1>EXIT</KEYWORD1>\r
+<KEYWORD1>GOTO</KEYWORD1>\r
+<KEYWORD1>PAUSE</KEYWORD1>\r
+<KEYWORD1>STOP</KEYWORD1>\r
+<!-- i/o keywords -->\r
+<KEYWORD1>BACKSPACE</KEYWORD1>\r
+<KEYWORD1>CLOSE</KEYWORD1>\r
+<KEYWORD1>ENDFILE</KEYWORD1>\r
+<KEYWORD1>INQUIRE</KEYWORD1>\r
+<KEYWORD1>OPEN</KEYWORD1>\r
+<KEYWORD1>PRINT</KEYWORD1>\r
+<KEYWORD1>READ</KEYWORD1>\r
+<KEYWORD1>REWIND</KEYWORD1>\r
+<KEYWORD1>WRITE</KEYWORD1>\r
+<KEYWORD1>FORMAT</KEYWORD1>\r
+<!-- Type conversion and utility functions -->\r
+<KEYWORD1>AIMAG</KEYWORD1>\r
+<KEYWORD1>AINT</KEYWORD1>\r
+<KEYWORD1>AMAX0</KEYWORD1>\r
+<KEYWORD1>AMIN0</KEYWORD1>\r
+<KEYWORD1>ANINT</KEYWORD1>\r
+<KEYWORD1>CEILING</KEYWORD1>\r
+<KEYWORD1>CMPLX</KEYWORD1>\r
+<KEYWORD1>CONJG</KEYWORD1>\r
+<KEYWORD1>DBLE</KEYWORD1>\r
+<KEYWORD1>DCMPLX</KEYWORD1>\r
+<KEYWORD1>DFLOAT</KEYWORD1>\r
+<KEYWORD1>DIM</KEYWORD1>\r
+<KEYWORD1>DPROD</KEYWORD1>\r
+<KEYWORD1>FLOAT</KEYWORD1>\r
+<KEYWORD1>FLOOR</KEYWORD1>\r
+<KEYWORD1>IFIX</KEYWORD1>\r
+<KEYWORD1>IMAG</KEYWORD1>\r
+<KEYWORD1>INT</KEYWORD1>\r
+<KEYWORD1>LOGICAL</KEYWORD1>\r
+<KEYWORD1>MODULO</KEYWORD1>\r
+<KEYWORD1>NINT</KEYWORD1>\r
+<KEYWORD1>REAL</KEYWORD1>\r
+<KEYWORD1>SIGN</KEYWORD1>\r
+<KEYWORD1>SNGL</KEYWORD1>\r
+<KEYWORD1>TRANSFER</KEYWORD1>\r
+<KEYWORD1>ZEXT</KEYWORD1>\r
+<!-- More Functions -->\r
+<KEYWORD1>ABS</KEYWORD1>\r
+<KEYWORD1>ACOS</KEYWORD1>\r
+<KEYWORD1>AIMAG</KEYWORD1>\r
+<KEYWORD1>AINT</KEYWORD1>\r
+<KEYWORD1>ALOG</KEYWORD1>\r
+<KEYWORD1>ALOG10</KEYWORD1>\r
+<KEYWORD1>AMAX0</KEYWORD1>\r
+<KEYWORD1>AMAX1</KEYWORD1>\r
+<KEYWORD1>AMIN0</KEYWORD1>\r
+<KEYWORD1>AMIN1</KEYWORD1>\r
+<KEYWORD1>AMOD</KEYWORD1>\r
+<KEYWORD1>ANINT</KEYWORD1>\r
+<KEYWORD1>ASIN</KEYWORD1>\r
+<KEYWORD1>ATAN</KEYWORD1>\r
+<KEYWORD1>ATAN2</KEYWORD1>\r
+<KEYWORD1>CABS</KEYWORD1>\r
+<KEYWORD1>CCOS</KEYWORD1>\r
+<KEYWORD1>CHAR</KEYWORD1>\r
+<KEYWORD1>CLOG</KEYWORD1>\r
+<KEYWORD1>CMPLX</KEYWORD1>\r
+<KEYWORD1>CONJG</KEYWORD1>\r
+<KEYWORD1>COS</KEYWORD1>\r
+<KEYWORD1>COSH</KEYWORD1>\r
+<KEYWORD1>CSIN</KEYWORD1>\r
+<KEYWORD1>CSQRT</KEYWORD1>\r
+<KEYWORD1>DABS</KEYWORD1>\r
+<KEYWORD1>DACOS</KEYWORD1>\r
+<KEYWORD1>DASIN</KEYWORD1>\r
+<KEYWORD1>DATAN</KEYWORD1>\r
+<KEYWORD1>DATAN2</KEYWORD1>\r
+<KEYWORD1>DBLE</KEYWORD1>\r
+<KEYWORD1>DCOS</KEYWORD1>\r
+<KEYWORD1>DCOSH</KEYWORD1>\r
+<KEYWORD1>DDIM</KEYWORD1>\r
+<KEYWORD1>DEXP</KEYWORD1>\r
+<KEYWORD1>DIM</KEYWORD1>\r
+<KEYWORD1>DINT</KEYWORD1>\r
+<KEYWORD1>DLOG</KEYWORD1>\r
+<KEYWORD1>DLOG10</KEYWORD1>\r
+<KEYWORD1>DMAX1</KEYWORD1>\r
+<KEYWORD1>DMIN1</KEYWORD1>\r
+<KEYWORD1>DMOD</KEYWORD1>\r
+<KEYWORD1>DNINT</KEYWORD1>\r
+<KEYWORD1>DPROD</KEYWORD1>\r
+<KEYWORD1>DREAL</KEYWORD1>\r
+<KEYWORD1>DSIGN</KEYWORD1>\r
+<KEYWORD1>DSIN</KEYWORD1>\r
+<KEYWORD1>DSINH</KEYWORD1>\r
+<KEYWORD1>DSQRT</KEYWORD1>\r
+<KEYWORD1>DTAN</KEYWORD1>\r
+<KEYWORD1>DTANH</KEYWORD1>\r
+<KEYWORD1>EXP</KEYWORD1>\r
+<KEYWORD1>FLOAT</KEYWORD1>\r
+<KEYWORD1>IABS</KEYWORD1>\r
+<KEYWORD1>ICHAR</KEYWORD1>\r
+<KEYWORD1>IDIM</KEYWORD1>\r
+<KEYWORD1>IDINT</KEYWORD1>\r
+<KEYWORD1>IDNINT</KEYWORD1>\r
+<KEYWORD1>IFIX</KEYWORD1>\r
+<KEYWORD1>INDEX</KEYWORD1>\r
+<KEYWORD1>INT</KEYWORD1>\r
+<KEYWORD1>ISIGN</KEYWORD1>\r
+<KEYWORD1>LEN</KEYWORD1>\r
+<KEYWORD1>LGE</KEYWORD1>\r
+<KEYWORD1>LGT</KEYWORD1>\r
+<KEYWORD1>LLE</KEYWORD1>\r
+<KEYWORD1>LLT</KEYWORD1>\r
+<KEYWORD1>LOG</KEYWORD1>\r
+<KEYWORD1>LOG10</KEYWORD1>\r
+<KEYWORD1>MAX</KEYWORD1>\r
+<KEYWORD1>MAX0</KEYWORD1>\r
+<KEYWORD1>MAX1</KEYWORD1>\r
+<KEYWORD1>MIN</KEYWORD1>\r
+<KEYWORD1>MIN0</KEYWORD1>\r
+<KEYWORD1>MIN1</KEYWORD1>\r
+<KEYWORD1>MOD</KEYWORD1>\r
+<KEYWORD1>NINT</KEYWORD1>\r
+<KEYWORD1>REAL</KEYWORD1>\r
+<KEYWORD1>SIGN</KEYWORD1>\r
+<KEYWORD1>SIN</KEYWORD1>\r
+<KEYWORD1>SINH</KEYWORD1>\r
+<KEYWORD1>SNGL</KEYWORD1>\r
+<KEYWORD1>SQRT</KEYWORD1>\r
+<KEYWORD1>TAN</KEYWORD1>\r
+<KEYWORD1>TANH</KEYWORD1>\r
+<!-- logical values -->\r
+<KEYWORD1>.false.</KEYWORD1>\r
+<KEYWORD1>.true.</KEYWORD1>\r
+\r
+</KEYWORDS>\r
+    </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/foxpro.xml b/extra/xmode/modes/foxpro.xml
new file mode 100644 (file)
index 0000000..b49b233
--- /dev/null
@@ -0,0 +1,1858 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <!-- Created by Matthew J. Price (Matt@SoWaky.com) -->\r
+       <PROPS>\r
+               <PROPERTY NAME="blockComment" VALUE="&amp;&amp;" />\r
+               <!-- Auto indent -->\r
+               <PROPERTY NAME="indentNextLine"\r
+                       VALUE="\s*(((if|do\swhile|do\scase|try)\s*\(|else\s*|elseif\s*\|case|catch(|for\s*\(.*\))[^{;]*)" />\r
+\r
+               <PROPERTY NAME="lineComment" VALUE="&amp;&amp;" />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- String Literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <!-- conditional compilation -->\r
+               <EOL_SPAN TYPE="KEYWORD2">#if</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#else</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#end</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#define</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#include</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#Elif</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#Else</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#Endif</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#If</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#Itsexpression</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#Readclauses</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#Region</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#Section</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#Undef</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#Wname</EOL_SPAN>\r
+\r
+               <!-- Comments -->\r
+               <EOL_SPAN TYPE="COMMENT1" AT_LINE_START="FALSE">&amp;&amp;</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1" AT_WHITESPACE_END="TRUE">*</EOL_SPAN>\r
+\r
+               <!-- Comparison operators -->\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <!-- See in keywords: is -->\r
+\r
+               <!-- Arithmetic operators -->\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">\</SEQ>\r
+               <!-- See in keywords: mod -->\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+\r
+               <!-- Concatenation operators -->\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+\r
+               <!-- Logical operators -->\r
+               <!-- See in keywords: and, or, not, xor, eqv -->\r
+\r
+               <!-- EOL Continuation -->\r
+               <!-- <SEQ TYPE="NULL">_</SEQ>-->\r
+               <!-- Instruction separator -->\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+                       AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+\r
+               <KEYWORDS>\r
+                       <FUNCTION>Function</FUNCTION>\r
+                       <FUNCTION>Procedure</FUNCTION>\r
+                       <FUNCTION>EndFunc</FUNCTION>\r
+                       <FUNCTION>EndProc</FUNCTION>\r
+\r
+                       <!-- Conditional Statements -->\r
+                       <KEYWORD3>if</KEYWORD3>\r
+                       <KEYWORD3>then</KEYWORD3>\r
+                       <KEYWORD3>else</KEYWORD3>\r
+                       <KEYWORD3>elseif</KEYWORD3>\r
+                       <KEYWORD3>select</KEYWORD3>\r
+                       <KEYWORD3>case</KEYWORD3>\r
+\r
+                       <!-- Loop Statements -->\r
+                       <!-- For..Next -->\r
+                       <KEYWORD3>for</KEYWORD3>\r
+                       <KEYWORD3>to</KEYWORD3>\r
+                       <KEYWORD3>step</KEYWORD3>\r
+                       <KEYWORD3>next</KEYWORD3>\r
+                       <!-- For Each..Next -->\r
+                       <KEYWORD3>each</KEYWORD3>\r
+                       <KEYWORD3>in</KEYWORD3>\r
+                       <!-- Do..Loop -->\r
+                       <KEYWORD3>do</KEYWORD3>\r
+                       <KEYWORD3>while</KEYWORD3>\r
+                       <KEYWORD3>until</KEYWORD3>\r
+                       <KEYWORD3>loop</KEYWORD3>\r
+                       <!-- While..Wend -->\r
+                       <KEYWORD3>wend</KEYWORD3>\r
+\r
+                       <!-- Closing, Exit Statements -->\r
+                       <KEYWORD3>exit</KEYWORD3>\r
+                       <KEYWORD3>end</KEYWORD3>\r
+                       <KEYWORD3>endif</KEYWORD3>\r
+\r
+                       <!-- Methods, Functions, Class, Properties, Variables -->\r
+                       <KEYWORD3>class</KEYWORD3>\r
+                       <KEYWORD3>property</KEYWORD3>\r
+                       <KEYWORD3>get</KEYWORD3>\r
+                       <KEYWORD3>let</KEYWORD3>\r
+                       <KEYWORD3>set</KEYWORD3>\r
+\r
+                       <!-- Parameters passing -->\r
+                       <KEYWORD3>byval</KEYWORD3>\r
+                       <KEYWORD3>byref</KEYWORD3>\r
+\r
+                       <!-- Declaration -->\r
+                       <KEYWORD3>const</KEYWORD3>\r
+                       <KEYWORD3>dim</KEYWORD3>\r
+                       <KEYWORD3>redim</KEYWORD3>\r
+                       <KEYWORD3>preserve</KEYWORD3>\r
+                       <KEYWORD3>as</KEYWORD3>\r
+\r
+                       <!-- Object Assignement/Instantiation -->\r
+                       <KEYWORD3>set</KEYWORD3>\r
+                       <KEYWORD3>with</KEYWORD3>\r
+                       <KEYWORD3>new</KEYWORD3>\r
+\r
+                       <!-- Visibility -->\r
+                       <KEYWORD3>public</KEYWORD3>\r
+                       <KEYWORD3>default</KEYWORD3>\r
+                       <KEYWORD3>private</KEYWORD3>\r
+\r
+                       <!-- Comments -->\r
+                       <KEYWORD3>rem</KEYWORD3>\r
+\r
+                       <!-- Function Call - Dynamic Evaluation -->\r
+                       <KEYWORD3>call</KEYWORD3>\r
+                       <KEYWORD3>execute</KEYWORD3>\r
+                       <KEYWORD3>eval</KEYWORD3>\r
+\r
+                       <!-- Miscellaneous -->\r
+                       <KEYWORD3>on</KEYWORD3>\r
+                       <KEYWORD3>error</KEYWORD3>\r
+                       <KEYWORD3>goto</KEYWORD3>\r
+                       <KEYWORD3>resume</KEYWORD3>\r
+                       <KEYWORD3>option</KEYWORD3>\r
+                       <KEYWORD3>explicit</KEYWORD3>\r
+                       <KEYWORD3>erase</KEYWORD3>\r
+                       <KEYWORD3>randomize</KEYWORD3>\r
+\r
+                       <!-- Operators -->\r
+                       <!-- Comparison operators -->\r
+                       <OPERATOR>is</OPERATOR>\r
+                       <!-- Arithmetic operators -->\r
+                       <OPERATOR>mod</OPERATOR>\r
+                       <!-- Logical operators -->\r
+                       <OPERATOR>and</OPERATOR>\r
+                       <OPERATOR>or</OPERATOR>\r
+                       <OPERATOR>not</OPERATOR>\r
+                       <OPERATOR>xor</OPERATOR>\r
+                       <OPERATOR>imp</OPERATOR>\r
+                       <OPERATOR>?</OPERATOR>\r
+\r
+                       <!-- Datatypes Constants/Literals -->\r
+                       <KEYWORD3>false</KEYWORD3>\r
+                       <KEYWORD3>true</KEYWORD3>\r
+                       <KEYWORD3>empty</KEYWORD3>\r
+                       <KEYWORD3>nothing</KEYWORD3>\r
+                       <KEYWORD3>null</KEYWORD3>\r
+\r
+                       <!-- FoxPro's Methods -->\r
+                       <KEYWORD3>Activate</KEYWORD3>\r
+                       <KEYWORD3>ActivateCell</KEYWORD3>\r
+                       <KEYWORD3>AddColumn</KEYWORD3>\r
+                       <KEYWORD3>AddItem</KEYWORD3>\r
+                       <KEYWORD3>AddListItem</KEYWORD3>\r
+                       <KEYWORD3>AddObject</KEYWORD3>\r
+                       <KEYWORD3>AfterCloseTables</KEYWORD3>\r
+                       <KEYWORD3>AfterDock</KEYWORD3>\r
+                       <KEYWORD3>AfterRowColChange</KEYWORD3>\r
+                       <KEYWORD3>BeforeDock</KEYWORD3>\r
+                       <KEYWORD3>BeforeOpenTables</KEYWORD3>\r
+                       <KEYWORD3>BeforeRowColChange</KEYWORD3>\r
+                       <KEYWORD3>Box</KEYWORD3>\r
+                       <KEYWORD3>Circle</KEYWORD3>\r
+                       <KEYWORD3>Clear</KEYWORD3>\r
+                       <KEYWORD3>Click</KEYWORD3>\r
+                       <KEYWORD3>CloneObject</KEYWORD3>\r
+                       <KEYWORD3>CloseEditor</KEYWORD3>\r
+                       <KEYWORD3>CloseTables</KEYWORD3>\r
+                       <KEYWORD3>Cls</KEYWORD3>\r
+                       <KEYWORD3>DblClick</KEYWORD3>\r
+                       <KEYWORD3>Deactivate</KEYWORD3>\r
+                       <KEYWORD3>Delete</KEYWORD3>\r
+                       <KEYWORD3>DeleteColumn</KEYWORD3>\r
+                       <KEYWORD3>Deleted</KEYWORD3>\r
+                       <KEYWORD3>Destroy</KEYWORD3>\r
+                       <KEYWORD3>Dock</KEYWORD3>\r
+                       <KEYWORD3>DoScroll</KEYWORD3>\r
+                       <KEYWORD3>DoVerb</KEYWORD3>\r
+                       <KEYWORD3>DownClick</KEYWORD3>\r
+                       <KEYWORD3>Drag</KEYWORD3>\r
+                       <KEYWORD3>DragDrop</KEYWORD3>\r
+                       <KEYWORD3>DragOver</KEYWORD3>\r
+                       <KEYWORD3>Draw</KEYWORD3>\r
+                       <KEYWORD3>DropDown</KEYWORD3>\r
+                       <KEYWORD3>Error</KEYWORD3>\r
+                       <KEYWORD3>ErrorMessage</KEYWORD3>\r
+                       <KEYWORD3>FormatChange</KEYWORD3>\r
+                       <KEYWORD3>GotFocus</KEYWORD3>\r
+                       <KEYWORD3>Hide</KEYWORD3>\r
+                       <KEYWORD3>IndexToItemId</KEYWORD3>\r
+                       <KEYWORD3>Init</KEYWORD3>\r
+                       <KEYWORD3>InteractiveChange</KEYWORD3>\r
+                       <KEYWORD3>ItemIdToIndex</KEYWORD3>\r
+                       <KEYWORD3>KeyPress</KEYWORD3>\r
+                       <KEYWORD3>Line</KEYWORD3>\r
+                       <KEYWORD3>Load</KEYWORD3>\r
+                       <KEYWORD3>LostFocus</KEYWORD3>\r
+                       <KEYWORD3>Message</KEYWORD3>\r
+                       <KEYWORD3>MouseDown</KEYWORD3>\r
+                       <KEYWORD3>MouseMove</KEYWORD3>\r
+                       <KEYWORD3>MouseUp</KEYWORD3>\r
+                       <KEYWORD3>Move</KEYWORD3>\r
+                       <KEYWORD3>Moved</KEYWORD3>\r
+                       <KEYWORD3>OpenEditor</KEYWORD3>\r
+                       <KEYWORD3>OpenTables</KEYWORD3>\r
+                       <KEYWORD3>Paint</KEYWORD3>\r
+                       <KEYWORD3>Point</KEYWORD3>\r
+                       <KEYWORD3>Print</KEYWORD3>\r
+                       <KEYWORD3>ProgrammaticChange</KEYWORD3>\r
+                       <KEYWORD3>PSet</KEYWORD3>\r
+                       <KEYWORD3>QueryUnload</KEYWORD3>\r
+                       <KEYWORD3>RangeHigh</KEYWORD3>\r
+                       <KEYWORD3>RangeLow</KEYWORD3>\r
+                       <KEYWORD3>ReadActivate</KEYWORD3>\r
+                       <KEYWORD3>ReadDeactivate</KEYWORD3>\r
+                       <KEYWORD3>ReadExpression</KEYWORD3>\r
+                       <KEYWORD3>ReadMethod</KEYWORD3>\r
+                       <KEYWORD3>ReadShow</KEYWORD3>\r
+                       <KEYWORD3>ReadValid</KEYWORD3>\r
+                       <KEYWORD3>ReadWhen</KEYWORD3>\r
+                       <KEYWORD3>Refresh</KEYWORD3>\r
+                       <KEYWORD3>Release</KEYWORD3>\r
+                       <KEYWORD3>RemoveItem</KEYWORD3>\r
+                       <KEYWORD3>RemoveListItem</KEYWORD3>\r
+                       <KEYWORD3>RemoveObject</KEYWORD3>\r
+                       <KEYWORD3>Requery</KEYWORD3>\r
+                       <KEYWORD3>Reset</KEYWORD3>\r
+                       <KEYWORD3>Resize</KEYWORD3>\r
+                       <KEYWORD3>RightClick</KEYWORD3>\r
+                       <KEYWORD3>SaveAs</KEYWORD3>\r
+                       <KEYWORD3>SaveAsClass</KEYWORD3>\r
+                       <KEYWORD3>Scrolled</KEYWORD3>\r
+                       <KEYWORD3>SetAll</KEYWORD3>\r
+                       <KEYWORD3>SetFocus</KEYWORD3>\r
+                       <KEYWORD3>Show</KEYWORD3>\r
+                       <KEYWORD3>TextHeight</KEYWORD3>\r
+                       <KEYWORD3>TextWidth</KEYWORD3>\r
+                       <KEYWORD3>Timer</KEYWORD3>\r
+                       <KEYWORD3>UIEnable</KEYWORD3>\r
+                       <KEYWORD3>UnDock</KEYWORD3>\r
+                       <KEYWORD3>Unload</KEYWORD3>\r
+                       <KEYWORD3>UpClick</KEYWORD3>\r
+                       <KEYWORD3>Valid</KEYWORD3>\r
+                       <KEYWORD3>When</KEYWORD3>\r
+                       <KEYWORD3>WriteExpression</KEYWORD3>\r
+                       <KEYWORD3>WriteMethod</KEYWORD3>\r
+                       <KEYWORD3>ZOrder</KEYWORD3>\r
+                       <KEYWORD3>DataToClip</KEYWORD3>\r
+                       <KEYWORD3>DoCmd</KEYWORD3>\r
+                       <KEYWORD3>MiddleClick</KEYWORD3>\r
+                       <KEYWORD3>MouseWheel</KEYWORD3>\r
+                       <KEYWORD3>RequestData</KEYWORD3>\r
+                       <KEYWORD3>SetVar</KEYWORD3>\r
+                       <KEYWORD3>ShowWhatsThis</KEYWORD3>\r
+                       <KEYWORD3>WhatsThisMode</KEYWORD3>\r
+                       <KEYWORD3>AddProperty</KEYWORD3>\r
+                       <KEYWORD3>NewObject</KEYWORD3>\r
+                       <KEYWORD3>CommandTargetExec</KEYWORD3>\r
+                       <KEYWORD3>CommandTargetQueryStas</KEYWORD3>\r
+                       <KEYWORD3>ContainerRelease</KEYWORD3>\r
+                       <KEYWORD3>EnterFocus</KEYWORD3>\r
+                       <KEYWORD3>ExitFocus</KEYWORD3>\r
+                       <KEYWORD3>HideDoc</KEYWORD3>\r
+                       <KEYWORD3>Run</KEYWORD3>\r
+                       <KEYWORD3>ShowDoc</KEYWORD3>\r
+                       <KEYWORD3>ClearData</KEYWORD3>\r
+                       <KEYWORD3>GetData</KEYWORD3>\r
+                       <KEYWORD3>GetFormat</KEYWORD3>\r
+                       <KEYWORD3>SetData</KEYWORD3>\r
+                       <KEYWORD3>SetFormat</KEYWORD3>\r
+                       <KEYWORD3>OLECompleteDrag</KEYWORD3>\r
+                       <KEYWORD3>OLEGiveFeedback</KEYWORD3>\r
+                       <KEYWORD3>OLESetData</KEYWORD3>\r
+                       <KEYWORD3>OLEStartDrag</KEYWORD3>\r
+                       <KEYWORD3>OLEDrag</KEYWORD3>\r
+                       <KEYWORD3>OLEDragDrop</KEYWORD3>\r
+                       <KEYWORD3>OLEDragOver</KEYWORD3>\r
+                       <KEYWORD3>SetMain</KEYWORD3>\r
+                       <KEYWORD3>AfterBuild</KEYWORD3>\r
+                       <KEYWORD3>BeforeBuild</KEYWORD3>\r
+                       <KEYWORD3>QueryAddFile</KEYWORD3>\r
+                       <KEYWORD3>QueryModifyFile</KEYWORD3>\r
+                       <KEYWORD3>QueryRemoveFile</KEYWORD3>\r
+                       <KEYWORD3>QueryRunFile</KEYWORD3>\r
+                       <KEYWORD3>Add</KEYWORD3>\r
+                       <KEYWORD3>AddToSCC</KEYWORD3>\r
+                       <KEYWORD3>CheckIn</KEYWORD3>\r
+                       <KEYWORD3>CheckOut</KEYWORD3>\r
+                       <KEYWORD3>GetLatestVersion</KEYWORD3>\r
+                       <KEYWORD3>RemoveFromSCC</KEYWORD3>\r
+                       <KEYWORD3>UndoCheckOut</KEYWORD3>\r
+                       <KEYWORD3>Modify</KEYWORD3>\r
+\r
+                       <!-- FoxPro's Properties -->\r
+                       <KEYWORD3>Accelerate</KEYWORD3>\r
+                       <KEYWORD3>ActiveColumn</KEYWORD3>\r
+                       <KEYWORD3>ActiveControl</KEYWORD3>\r
+                       <KEYWORD3>ActiveForm</KEYWORD3>\r
+                       <KEYWORD3>ActiveObjectId</KEYWORD3>\r
+                       <KEYWORD3>ActivePage</KEYWORD3>\r
+                       <KEYWORD3>ActiveRow</KEYWORD3>\r
+                       <KEYWORD3>Alias</KEYWORD3>\r
+                       <KEYWORD3>Alignment</KEYWORD3>\r
+                       <KEYWORD3>AllowResize</KEYWORD3>\r
+                       <KEYWORD3>AllowTabs</KEYWORD3>\r
+                       <KEYWORD3>AlwaysOnTop</KEYWORD3>\r
+                       <KEYWORD3>ATGetColors</KEYWORD3>\r
+                       <KEYWORD3>ATListColors</KEYWORD3>\r
+                       <KEYWORD3>AutoActivate</KEYWORD3>\r
+                       <KEYWORD3>AutoCenter</KEYWORD3>\r
+                       <KEYWORD3>AutoCloseTables</KEYWORD3>\r
+                       <KEYWORD3>AutoOpenTables</KEYWORD3>\r
+                       <KEYWORD3>AutoRelease</KEYWORD3>\r
+                       <KEYWORD3>AutoSize</KEYWORD3>\r
+                       <KEYWORD3>AvailNum</KEYWORD3>\r
+                       <KEYWORD3>BackColor</KEYWORD3>\r
+                       <KEYWORD3>BackStyle</KEYWORD3>\r
+                       <KEYWORD3>BaseClass</KEYWORD3>\r
+                       <KEYWORD3>BorderColor</KEYWORD3>\r
+                       <KEYWORD3>BorderStyle</KEYWORD3>\r
+                       <KEYWORD3>BorderWidth</KEYWORD3>\r
+                       <KEYWORD3>Bound</KEYWORD3>\r
+                       <KEYWORD3>BoundColumn</KEYWORD3>\r
+                       <KEYWORD3>BrowseAlignment</KEYWORD3>\r
+                       <KEYWORD3>BrowseCellMarg</KEYWORD3>\r
+                       <KEYWORD3>BrowseDestWidth</KEYWORD3>\r
+                       <KEYWORD3>BufferMode</KEYWORD3>\r
+                       <KEYWORD3>BufferModeOverride</KEYWORD3>\r
+                       <KEYWORD3>ButtonCount</KEYWORD3>\r
+                       <KEYWORD3>ButtonIndex</KEYWORD3>\r
+                       <KEYWORD3>Buttons</KEYWORD3>\r
+                       <KEYWORD3>CanAccelerate</KEYWORD3>\r
+                       <KEYWORD3>Cancel</KEYWORD3>\r
+                       <KEYWORD3>CanGetFocus</KEYWORD3>\r
+                       <KEYWORD3>CanLoseFocus</KEYWORD3>\r
+                       <KEYWORD3>Caption</KEYWORD3>\r
+                       <KEYWORD3>ChildAlias</KEYWORD3>\r
+                       <KEYWORD3>ChildOrder</KEYWORD3>\r
+                       <KEYWORD3>Class</KEYWORD3>\r
+                       <KEYWORD3>ClassLibrary</KEYWORD3>\r
+                       <KEYWORD3>ClipControls</KEYWORD3>\r
+                       <KEYWORD3>ClipRect</KEYWORD3>\r
+                       <KEYWORD3>Closable</KEYWORD3>\r
+                       <KEYWORD3>ColorScheme</KEYWORD3>\r
+                       <KEYWORD3>ColorSource</KEYWORD3>\r
+                       <KEYWORD3>ColumnCount</KEYWORD3>\r
+                       <KEYWORD3>ColumnHeaders</KEYWORD3>\r
+                       <KEYWORD3>ColumnLines</KEYWORD3>\r
+                       <KEYWORD3>ColumnOrder</KEYWORD3>\r
+                       <KEYWORD3>Columns</KEYWORD3>\r
+                       <KEYWORD3>ColumnWidths</KEYWORD3>\r
+                       <KEYWORD3>Comment</KEYWORD3>\r
+                       <KEYWORD3>ControlBox</KEYWORD3>\r
+                       <KEYWORD3>ControlCount</KEYWORD3>\r
+                       <KEYWORD3>ControlIndex</KEYWORD3>\r
+                       <KEYWORD3>Controls</KEYWORD3>\r
+                       <KEYWORD3>ControlSource</KEYWORD3>\r
+                       <KEYWORD3>CurrentControl</KEYWORD3>\r
+                       <KEYWORD3>CurrentX</KEYWORD3>\r
+                       <KEYWORD3>CurrentY</KEYWORD3>\r
+                       <KEYWORD3>CursorSource</KEYWORD3>\r
+                       <KEYWORD3>Curvature</KEYWORD3>\r
+                       <KEYWORD3>Database</KEYWORD3>\r
+                       <KEYWORD3>DataSession</KEYWORD3>\r
+                       <KEYWORD3>DataSessionId</KEYWORD3>\r
+                       <KEYWORD3>DataSourceObj</KEYWORD3>\r
+                       <KEYWORD3>DataType</KEYWORD3>\r
+                       <KEYWORD3>Default</KEYWORD3>\r
+                       <KEYWORD3>DefButton</KEYWORD3>\r
+                       <KEYWORD3>DefButtonOrig</KEYWORD3>\r
+                       <KEYWORD3>DefHeight</KEYWORD3>\r
+                       <KEYWORD3>DefineWindows</KEYWORD3>\r
+                       <KEYWORD3>DefLeft</KEYWORD3>\r
+                       <KEYWORD3>DefTop</KEYWORD3>\r
+                       <KEYWORD3>DefWidth</KEYWORD3>\r
+                       <KEYWORD3>DeleteMark</KEYWORD3>\r
+                       <KEYWORD3>Desktop</KEYWORD3>\r
+                       <KEYWORD3>Dirty</KEYWORD3>\r
+                       <KEYWORD3>DisabledBackColor</KEYWORD3>\r
+                       <KEYWORD3>DisabledByEOF</KEYWORD3>\r
+                       <KEYWORD3>DisabledForeColor</KEYWORD3>\r
+                       <KEYWORD3>DisabledItemBackColor</KEYWORD3>\r
+                       <KEYWORD3>DisabledItemForeColor</KEYWORD3>\r
+                       <KEYWORD3>DisabledPicture</KEYWORD3>\r
+                       <KEYWORD3>DisplayValue</KEYWORD3>\r
+                       <KEYWORD3>DispPageHeight</KEYWORD3>\r
+                       <KEYWORD3>DispPageWidth</KEYWORD3>\r
+                       <KEYWORD3>Docked</KEYWORD3>\r
+                       <KEYWORD3>DockPosition</KEYWORD3>\r
+                       <KEYWORD3>DoCreate</KEYWORD3>\r
+                       <KEYWORD3>DocumentFile</KEYWORD3>\r
+                       <KEYWORD3>DownPicture</KEYWORD3>\r
+                       <KEYWORD3>DragIcon</KEYWORD3>\r
+                       <KEYWORD3>DragMode</KEYWORD3>\r
+                       <KEYWORD3>DragState</KEYWORD3>\r
+                       <KEYWORD3>DrawMode</KEYWORD3>\r
+                       <KEYWORD3>DrawStyle</KEYWORD3>\r
+                       <KEYWORD3>DrawWidth</KEYWORD3>\r
+                       <KEYWORD3>DynamicAlignment</KEYWORD3>\r
+                       <KEYWORD3>DynamicBackColor</KEYWORD3>\r
+                       <KEYWORD3>DynamicCurrentControl</KEYWORD3>\r
+                       <KEYWORD3>DynamicFontBold</KEYWORD3>\r
+                       <KEYWORD3>DynamicFontItalic</KEYWORD3>\r
+                       <KEYWORD3>DynamicFontName</KEYWORD3>\r
+                       <KEYWORD3>DynamicFontOutline</KEYWORD3>\r
+                       <KEYWORD3>DynamicFontShadow</KEYWORD3>\r
+                       <KEYWORD3>DynamicFontSize</KEYWORD3>\r
+                       <KEYWORD3>DynamicFontStrikethru</KEYWORD3>\r
+                       <KEYWORD3>DynamicFontUnderline</KEYWORD3>\r
+                       <KEYWORD3>DynamicForeColor</KEYWORD3>\r
+                       <KEYWORD3>EditFlags</KEYWORD3>\r
+                       <KEYWORD3>Enabled</KEYWORD3>\r
+                       <KEYWORD3>EnabledByReadLock</KEYWORD3>\r
+                       <KEYWORD3>EnvLevel</KEYWORD3>\r
+                       <KEYWORD3>ErasePage</KEYWORD3>\r
+                       <KEYWORD3>FillColor</KEYWORD3>\r
+                       <KEYWORD3>FillStyle</KEYWORD3>\r
+                       <KEYWORD3>Filter</KEYWORD3>\r
+                       <KEYWORD3>FirstElement</KEYWORD3>\r
+                       <KEYWORD3>FontBold</KEYWORD3>\r
+                       <KEYWORD3>FontItalic</KEYWORD3>\r
+                       <KEYWORD3>FontName</KEYWORD3>\r
+                       <KEYWORD3>FontOutline</KEYWORD3>\r
+                       <KEYWORD3>FontShadow</KEYWORD3>\r
+                       <KEYWORD3>FontSize</KEYWORD3>\r
+                       <KEYWORD3>FontStrikethru</KEYWORD3>\r
+                       <KEYWORD3>FontUnderline</KEYWORD3>\r
+                       <KEYWORD3>ForceFocus</KEYWORD3>\r
+                       <KEYWORD3>ForeColor</KEYWORD3>\r
+                       <KEYWORD3>Format</KEYWORD3>\r
+                       <KEYWORD3>FormCount</KEYWORD3>\r
+                       <KEYWORD3>FormIndex</KEYWORD3>\r
+                       <KEYWORD3>FormPageCount</KEYWORD3>\r
+                       <KEYWORD3>FormPageIndex</KEYWORD3>\r
+                       <KEYWORD3>Forms</KEYWORD3>\r
+                       <KEYWORD3>FoxFont</KEYWORD3>\r
+                       <KEYWORD3>GoFirst</KEYWORD3>\r
+                       <KEYWORD3>GoLast</KEYWORD3>\r
+                       <KEYWORD3>GridLineColor</KEYWORD3>\r
+                       <KEYWORD3>GridLines</KEYWORD3>\r
+                       <KEYWORD3>GridLineWidth</KEYWORD3>\r
+                       <KEYWORD3>HalfHeightCaption</KEYWORD3>\r
+                       <KEYWORD3>HasClip</KEYWORD3>\r
+                       <KEYWORD3>HeaderGap</KEYWORD3>\r
+                       <KEYWORD3>HeaderHeight</KEYWORD3>\r
+                       <KEYWORD3>Height</KEYWORD3>\r
+                       <KEYWORD3>HelpContextID</KEYWORD3>\r
+                       <KEYWORD3>HideSelection</KEYWORD3>\r
+                       <KEYWORD3>Highlight</KEYWORD3>\r
+                       <KEYWORD3>HostName</KEYWORD3>\r
+                       <KEYWORD3>HotKey</KEYWORD3>\r
+                       <KEYWORD3>HPROJ</KEYWORD3>\r
+                       <KEYWORD3>HWnd</KEYWORD3>\r
+                       <KEYWORD3>Icon</KEYWORD3>\r
+                       <KEYWORD3>IgnoreInsert</KEYWORD3>\r
+                       <KEYWORD3>Increment</KEYWORD3>\r
+                       <KEYWORD3>IncrementalSearch</KEYWORD3>\r
+                       <KEYWORD3>InitialSelectedAlias</KEYWORD3>\r
+                       <KEYWORD3>InputMask</KEYWORD3>\r
+                       <KEYWORD3>InResize</KEYWORD3>\r
+                       <KEYWORD3>Interval</KEYWORD3>\r
+                       <KEYWORD3>ItemBackColor</KEYWORD3>\r
+                       <KEYWORD3>ItemData</KEYWORD3>\r
+                       <KEYWORD3>ItemForeColor</KEYWORD3>\r
+                       <KEYWORD3>ItemIDData</KEYWORD3>\r
+                       <KEYWORD3>JustReadLocked</KEYWORD3>\r
+                       <KEYWORD3>KeyboardHighValue</KEYWORD3>\r
+                       <KEYWORD3>KeyboardLowValue</KEYWORD3>\r
+                       <KEYWORD3>KeyPreview</KEYWORD3>\r
+                       <KEYWORD3>Left</KEYWORD3>\r
+                       <KEYWORD3>LeftColumn</KEYWORD3>\r
+                       <KEYWORD3>LineSlant</KEYWORD3>\r
+                       <KEYWORD3>LinkMaster</KEYWORD3>\r
+                       <KEYWORD3>List</KEYWORD3>\r
+                       <KEYWORD3>ListCount</KEYWORD3>\r
+                       <KEYWORD3>ListIndex</KEYWORD3>\r
+                       <KEYWORD3>ListItem</KEYWORD3>\r
+                       <KEYWORD3>ListItemId</KEYWORD3>\r
+                       <KEYWORD3>LockDataSource</KEYWORD3>\r
+                       <KEYWORD3>LockScreen</KEYWORD3>\r
+                       <KEYWORD3>Margin</KEYWORD3>\r
+                       <KEYWORD3>MaxButton</KEYWORD3>\r
+                       <KEYWORD3>MaxHeight</KEYWORD3>\r
+                       <KEYWORD3>MaxLeft</KEYWORD3>\r
+                       <KEYWORD3>MaxLength</KEYWORD3>\r
+                       <KEYWORD3>MaxTop</KEYWORD3>\r
+                       <KEYWORD3>MaxWidth</KEYWORD3>\r
+                       <KEYWORD3>MDIForm</KEYWORD3>\r
+                       <KEYWORD3>MemoWindow</KEYWORD3>\r
+                       <KEYWORD3>MinButton</KEYWORD3>\r
+                       <KEYWORD3>MinHeight</KEYWORD3>\r
+                       <KEYWORD3>MinWidth</KEYWORD3>\r
+                       <KEYWORD3>MousePointer</KEYWORD3>\r
+                       <KEYWORD3>Movable</KEYWORD3>\r
+                       <KEYWORD3>MoverBars</KEYWORD3>\r
+                       <KEYWORD3>MultiSelect</KEYWORD3>\r
+                       <KEYWORD3>Name</KEYWORD3>\r
+                       <KEYWORD3>NapTime</KEYWORD3>\r
+                       <KEYWORD3>NewIndex</KEYWORD3>\r
+                       <KEYWORD3>NewItemId</KEYWORD3>\r
+                       <KEYWORD3>NoDataOnLoad</KEYWORD3>\r
+                       <KEYWORD3>NoDefine</KEYWORD3>\r
+                       <KEYWORD3>NotifyContainer</KEYWORD3>\r
+                       <KEYWORD3>NumberOfElements</KEYWORD3>\r
+                       <KEYWORD3>OleClass</KEYWORD3>\r
+                       <KEYWORD3>OleClassId</KEYWORD3>\r
+                       <KEYWORD3>OleControlContainer</KEYWORD3>\r
+                       <KEYWORD3>OleIDispatchIncoming</KEYWORD3>\r
+                       <KEYWORD3>OleIDispatchOutgoing</KEYWORD3>\r
+                       <KEYWORD3>OleIDispInValue</KEYWORD3>\r
+                       <KEYWORD3>OleIDispOutValue</KEYWORD3>\r
+                       <KEYWORD3>OLETypeAllowed</KEYWORD3>\r
+                       <KEYWORD3>OneToMany</KEYWORD3>\r
+                       <KEYWORD3>OnResize</KEYWORD3>\r
+                       <KEYWORD3>OpenWindow</KEYWORD3>\r
+                       <KEYWORD3>PageCount</KEYWORD3>\r
+                       <KEYWORD3>PageHeight</KEYWORD3>\r
+                       <KEYWORD3>PageOrder</KEYWORD3>\r
+                       <KEYWORD3>Pages</KEYWORD3>\r
+                       <KEYWORD3>PageWidth</KEYWORD3>\r
+                       <KEYWORD3>Panel</KEYWORD3>\r
+                       <KEYWORD3>PanelLink</KEYWORD3>\r
+                       <KEYWORD3>Parent</KEYWORD3>\r
+                       <KEYWORD3>ParentAlias</KEYWORD3>\r
+                       <KEYWORD3>ParentClass</KEYWORD3>\r
+                       <KEYWORD3>Partition</KEYWORD3>\r
+                       <KEYWORD3>PasswordChar</KEYWORD3>\r
+                       <KEYWORD3>Picture</KEYWORD3>\r
+                       <KEYWORD3>ReadColors</KEYWORD3>\r
+                       <KEYWORD3>ReadCycle</KEYWORD3>\r
+                       <KEYWORD3>ReadFiller</KEYWORD3>\r
+                       <KEYWORD3>ReadLock</KEYWORD3>\r
+                       <KEYWORD3>ReadMouse</KEYWORD3>\r
+                       <KEYWORD3>ReadOnly</KEYWORD3>\r
+                       <KEYWORD3>ReadSave</KEYWORD3>\r
+                       <KEYWORD3>ReadSize</KEYWORD3>\r
+                       <KEYWORD3>ReadTimeout</KEYWORD3>\r
+                       <KEYWORD3>RecordMark</KEYWORD3>\r
+                       <KEYWORD3>RecordSource</KEYWORD3>\r
+                       <KEYWORD3>RecordSourceType</KEYWORD3>\r
+                       <KEYWORD3>Rect</KEYWORD3>\r
+                       <KEYWORD3>RelationalExpr</KEYWORD3>\r
+                       <KEYWORD3>RelativeColumn</KEYWORD3>\r
+                       <KEYWORD3>RelativeRow</KEYWORD3>\r
+                       <KEYWORD3>ReleaseErase</KEYWORD3>\r
+                       <KEYWORD3>ReleaseType</KEYWORD3>\r
+                       <KEYWORD3>ReleaseWindows</KEYWORD3>\r
+                       <KEYWORD3>Resizable</KEYWORD3>\r
+                       <KEYWORD3>RowHeight</KEYWORD3>\r
+                       <KEYWORD3>RowSource</KEYWORD3>\r
+                       <KEYWORD3>RowSourceType</KEYWORD3>\r
+                       <KEYWORD3>ScaleMode</KEYWORD3>\r
+                       <KEYWORD3>ScrollBars</KEYWORD3>\r
+                       <KEYWORD3>Selected</KEYWORD3>\r
+                       <KEYWORD3>SelectedBackColor</KEYWORD3>\r
+                       <KEYWORD3>SelectedForeColor</KEYWORD3>\r
+                       <KEYWORD3>SelectedID</KEYWORD3>\r
+                       <KEYWORD3>SelectedItemBackColor</KEYWORD3>\r
+                       <KEYWORD3>SelectedItemForeColor</KEYWORD3>\r
+                       <KEYWORD3>SelectOnEntry</KEYWORD3>\r
+                       <KEYWORD3>SelfEdit</KEYWORD3>\r
+                       <KEYWORD3>SelLength</KEYWORD3>\r
+                       <KEYWORD3>SelStart</KEYWORD3>\r
+                       <KEYWORD3>SelText</KEYWORD3>\r
+                       <KEYWORD3>ShowTips</KEYWORD3>\r
+                       <KEYWORD3>Sizable</KEYWORD3>\r
+                       <KEYWORD3>Skip</KEYWORD3>\r
+                       <KEYWORD3>SkipForm</KEYWORD3>\r
+                       <KEYWORD3>Sorted</KEYWORD3>\r
+                       <KEYWORD3>SourceType</KEYWORD3>\r
+                       <KEYWORD3>Sparse</KEYWORD3>\r
+                       <KEYWORD3>SpecialEffect</KEYWORD3>\r
+                       <KEYWORD3>SpinnerHighValue</KEYWORD3>\r
+                       <KEYWORD3>SpinnerLowValue</KEYWORD3>\r
+                       <KEYWORD3>StatusBarText</KEYWORD3>\r
+                       <KEYWORD3>Stretch</KEYWORD3>\r
+                       <KEYWORD3>Style</KEYWORD3>\r
+                       <KEYWORD3>SystemRefCount</KEYWORD3>\r
+                       <KEYWORD3>Tabhit</KEYWORD3>\r
+                       <KEYWORD3>TabIndex</KEYWORD3>\r
+                       <KEYWORD3>Tabs</KEYWORD3>\r
+                       <KEYWORD3>TabStop</KEYWORD3>\r
+                       <KEYWORD3>TabStretch</KEYWORD3>\r
+                       <KEYWORD3>Tag</KEYWORD3>\r
+                       <KEYWORD3>TerminateRead</KEYWORD3>\r
+                       <KEYWORD3>ToolTipText</KEYWORD3>\r
+                       <KEYWORD3>Top</KEYWORD3>\r
+                       <KEYWORD3>TopIndex</KEYWORD3>\r
+                       <KEYWORD3>TopItemId</KEYWORD3>\r
+                       <KEYWORD3>UnlockDataSource</KEYWORD3>\r
+                       <KEYWORD3>Value</KEYWORD3>\r
+                       <KEYWORD3>ValueDirty</KEYWORD3>\r
+                       <KEYWORD3>View</KEYWORD3>\r
+                       <KEYWORD3>Visible</KEYWORD3>\r
+                       <KEYWORD3>WasActive</KEYWORD3>\r
+                       <KEYWORD3>WasOpen</KEYWORD3>\r
+                       <KEYWORD3>Width</KEYWORD3>\r
+                       <KEYWORD3>WindowList</KEYWORD3>\r
+                       <KEYWORD3>WindowNTIList</KEYWORD3>\r
+                       <KEYWORD3>WindowState</KEYWORD3>\r
+                       <KEYWORD3>WindowType</KEYWORD3>\r
+                       <KEYWORD3>WordWrap</KEYWORD3>\r
+                       <KEYWORD3>ZOrderSet</KEYWORD3>\r
+                       <KEYWORD3>AllowAddNew</KEYWORD3>\r
+                       <KEYWORD3>AllowHeaderSizing</KEYWORD3>\r
+                       <KEYWORD3>AllowRowSizing</KEYWORD3>\r
+                       <KEYWORD3>Application</KEYWORD3>\r
+                       <KEYWORD3>AutoVerbMenu</KEYWORD3>\r
+                       <KEYWORD3>AutoYield</KEYWORD3>\r
+                       <KEYWORD3>BoundTo</KEYWORD3>\r
+                       <KEYWORD3>DateFormat</KEYWORD3>\r
+                       <KEYWORD3>DateMark</KEYWORD3>\r
+                       <KEYWORD3>DefaultFilePath</KEYWORD3>\r
+                       <KEYWORD3>FullName</KEYWORD3>\r
+                       <KEYWORD3>Hours</KEYWORD3>\r
+                       <KEYWORD3>IMEMode</KEYWORD3>\r
+                       <KEYWORD3>IntegralHeight</KEYWORD3>\r
+                       <KEYWORD3>ItemTips</KEYWORD3>\r
+                       <KEYWORD3>MouseIcon</KEYWORD3>\r
+                       <KEYWORD3>NullDisplay</KEYWORD3>\r
+                       <KEYWORD3>OLERequestPendingTimou</KEYWORD3>\r
+                       <KEYWORD3>OLEServerBusyRaiseErro</KEYWORD3>\r
+                       <KEYWORD3>OLEServerBusyTimout</KEYWORD3>\r
+                       <KEYWORD3>OpenViews</KEYWORD3>\r
+                       <KEYWORD3>RightToLeft</KEYWORD3>\r
+                       <KEYWORD3>SDIForm</KEYWORD3>\r
+                       <KEYWORD3>ShowWindow</KEYWORD3>\r
+                       <KEYWORD3>SplitBar</KEYWORD3>\r
+                       <KEYWORD3>StrictDateEntry</KEYWORD3>\r
+                       <KEYWORD3>TabStyle</KEYWORD3>\r
+                       <KEYWORD3>WhatsThisButton</KEYWORD3>\r
+                       <KEYWORD3>WhatsThisHelp</KEYWORD3>\r
+                       <KEYWORD3>WhatsThisHelpID</KEYWORD3>\r
+                       <KEYWORD3>DisplayCount</KEYWORD3>\r
+                       <KEYWORD3>ContinuousScroll</KEYWORD3>\r
+                       <KEYWORD3>HscrollSmallChange</KEYWORD3>\r
+                       <KEYWORD3>TitleBar</KEYWORD3>\r
+                       <KEYWORD3>VscrollSmallChange</KEYWORD3>\r
+                       <KEYWORD3>ViewPortTop</KEYWORD3>\r
+                       <KEYWORD3>ViewPortLeft</KEYWORD3>\r
+                       <KEYWORD3>ViewPortHeight</KEYWORD3>\r
+                       <KEYWORD3>ViewPortWidth</KEYWORD3>\r
+                       <KEYWORD3>SetViewPort</KEYWORD3>\r
+                       <KEYWORD3>Scrolled</KEYWORD3>\r
+                       <KEYWORD3>StartMode</KEYWORD3>\r
+                       <KEYWORD3>ServerName</KEYWORD3>\r
+                       <KEYWORD3>OLEDragMode</KEYWORD3>\r
+                       <KEYWORD3>OLEDragPicture</KEYWORD3>\r
+                       <KEYWORD3>OLEDropEffects</KEYWORD3>\r
+                       <KEYWORD3>OLEDropHasData</KEYWORD3>\r
+                       <KEYWORD3>OLEDropMode</KEYWORD3>\r
+                       <KEYWORD3>ActiveProject</KEYWORD3>\r
+                       <KEYWORD3>Projects</KEYWORD3>\r
+                       <KEYWORD3>AutoIncrement</KEYWORD3>\r
+                       <KEYWORD3>BuildDateTime</KEYWORD3>\r
+                       <KEYWORD3>Debug</KEYWORD3>\r
+                       <KEYWORD3>Encrypted</KEYWORD3>\r
+                       <KEYWORD3>Files</KEYWORD3>\r
+                       <KEYWORD3>HomeDir</KEYWORD3>\r
+                       <KEYWORD3>MainClass</KEYWORD3>\r
+                       <KEYWORD3>MainFile</KEYWORD3>\r
+                       <KEYWORD3>ProjectHookClass</KEYWORD3>\r
+                       <KEYWORD3>ProjectHookLibrary</KEYWORD3>\r
+                       <KEYWORD3>SCCProvider</KEYWORD3>\r
+                       <KEYWORD3>ServerHelpFile</KEYWORD3>\r
+                       <KEYWORD3>ServerProject</KEYWORD3>\r
+                       <KEYWORD3>TypeLibCLSID</KEYWORD3>\r
+                       <KEYWORD3>TypeLibDesc</KEYWORD3>\r
+                       <KEYWORD3>TypeLibName</KEYWORD3>\r
+                       <KEYWORD3>VersionComments</KEYWORD3>\r
+                       <KEYWORD3>VersionCompany</KEYWORD3>\r
+                       <KEYWORD3>VersionCopyright</KEYWORD3>\r
+                       <KEYWORD3>VersionDescription</KEYWORD3>\r
+                       <KEYWORD3>VersionNumber</KEYWORD3>\r
+                       <KEYWORD3>VersionProduct</KEYWORD3>\r
+                       <KEYWORD3>VersionTrademarks</KEYWORD3>\r
+                       <KEYWORD3>Item</KEYWORD3>\r
+                       <KEYWORD3>CodePage</KEYWORD3>\r
+                       <KEYWORD3>Description</KEYWORD3>\r
+                       <KEYWORD3>FileClass</KEYWORD3>\r
+                       <KEYWORD3>FileClassLibrary</KEYWORD3>\r
+                       <KEYWORD3>LastModified</KEYWORD3>\r
+                       <KEYWORD3>SCCStatus</KEYWORD3>\r
+                       <KEYWORD3>CLSID</KEYWORD3>\r
+                       <KEYWORD3>Instancing</KEYWORD3>\r
+                       <KEYWORD3>ProgID</KEYWORD3>\r
+                       <KEYWORD3>ServerClass</KEYWORD3>\r
+                       <KEYWORD3>ServerClassLibrary</KEYWORD3>\r
+                       <KEYWORD3>ThreadID</KEYWORD3>\r
+                       <KEYWORD3>ProcessID</KEYWORD3>\r
+                       <KEYWORD3>AddLineFeeds</KEYWORD3>\r
+\r
+                       <!-- Other FoxPro's Keywords -->\r
+                       <KEYWORD3>MULTILOCKS</KEYWORD3>\r
+                       <KEYWORD3>FULLPATH</KEYWORD3>\r
+                       <KEYWORD3>UNIQUE</KEYWORD3>\r
+                       <KEYWORD3>CLASSLIB</KEYWORD3>\r
+                       <KEYWORD3>LIBRARY</KEYWORD3>\r
+                       <KEYWORD3>structure</KEYWORD3>\r
+                       <KEYWORD3>last</KEYWORD3>\r
+                       <KEYWORD3>production</KEYWORD3>\r
+                       <KEYWORD3>path</KEYWORD3>\r
+                       <KEYWORD3>date</KEYWORD3>\r
+                       <KEYWORD3>datetime</KEYWORD3>\r
+                       <KEYWORD3>rest</KEYWORD3>\r
+                       <KEYWORD3>fields</KEYWORD3>\r
+                       <KEYWORD3>array</KEYWORD3>\r
+                       <KEYWORD3>free</KEYWORD3>\r
+                       <KEYWORD3>structure</KEYWORD3>\r
+                       <KEYWORD3>ASCENDING</KEYWORD3>\r
+                       <KEYWORD3>window</KEYWORD3>\r
+                       <KEYWORD3>nowait</KEYWORD3>\r
+                       <KEYWORD3>between</KEYWORD3>\r
+                       <KEYWORD3>dbf</KEYWORD3>\r
+                       <KEYWORD3>noconsole</KEYWORD3>\r
+                       <KEYWORD3>dif</KEYWORD3>\r
+                       <KEYWORD3>xls</KEYWORD3>\r
+                       <KEYWORD3>csv</KEYWORD3>\r
+                       <KEYWORD3>delimited</KEYWORD3>\r
+                       <KEYWORD3>right</KEYWORD3>\r
+                       <KEYWORD3>decimal</KEYWORD3>\r
+                       <KEYWORD3>additive</KEYWORD3>\r
+                       <KEYWORD3>between</KEYWORD3>\r
+                       <KEYWORD3>noupdate</KEYWORD3>\r
+\r
+                       <KEYWORD3>Abs</KEYWORD3>\r
+                       <KEYWORD3>Accept</KEYWORD3>\r
+                       <KEYWORD3>Access</KEYWORD3>\r
+                       <KEYWORD3>Aclass</KEYWORD3>\r
+                       <KEYWORD3>Acopy</KEYWORD3>\r
+                       <KEYWORD3>Acos</KEYWORD3>\r
+                       <KEYWORD3>Adatabases</KEYWORD3>\r
+                       <KEYWORD3>Adbobjects</KEYWORD3>\r
+                       <KEYWORD3>Add</KEYWORD3>\r
+                       <KEYWORD3>Addrelationtoenv</KEYWORD3>\r
+                       <KEYWORD3>Addtabletoenv</KEYWORD3>\r
+                       <KEYWORD3>Adel</KEYWORD3>\r
+                       <KEYWORD3>Adir</KEYWORD3>\r
+                       <KEYWORD3>Aelement</KEYWORD3>\r
+                       <KEYWORD3>Aerror</KEYWORD3>\r
+                       <KEYWORD3>Afields</KEYWORD3>\r
+                       <KEYWORD3>Afont</KEYWORD3>\r
+                       <KEYWORD3>Again</KEYWORD3>\r
+                       <KEYWORD3>Ains</KEYWORD3>\r
+                       <KEYWORD3>Ainstance</KEYWORD3>\r
+                       <KEYWORD3>Alen</KEYWORD3>\r
+                       <KEYWORD3>All</KEYWORD3>\r
+                       <KEYWORD3>Alltrim</KEYWORD3>\r
+                       <KEYWORD3>Alter</KEYWORD3>\r
+                       <KEYWORD3>Amembers</KEYWORD3>\r
+                       <KEYWORD3>Ansitooem</KEYWORD3>\r
+                       <KEYWORD3>Append</KEYWORD3>\r
+                       <KEYWORD3>Aprinters</KEYWORD3>\r
+                       <KEYWORD3>Ascan</KEYWORD3>\r
+                       <KEYWORD3>Aselobj</KEYWORD3>\r
+                       <KEYWORD3>Asin</KEYWORD3>\r
+                       <KEYWORD3>Asort</KEYWORD3>\r
+                       <KEYWORD3>Assist</KEYWORD3>\r
+                       <KEYWORD3>Asubscript</KEYWORD3>\r
+                       <KEYWORD3>Asynchronous</KEYWORD3>\r
+                       <KEYWORD3>Atan</KEYWORD3>\r
+                       <KEYWORD3>Atc</KEYWORD3>\r
+                       <KEYWORD3>Atcline</KEYWORD3>\r
+                       <KEYWORD3>Atline</KEYWORD3>\r
+                       <KEYWORD3>Atn2</KEYWORD3>\r
+                       <KEYWORD3>Aused</KEYWORD3>\r
+                       <KEYWORD3>Autoform</KEYWORD3>\r
+                       <KEYWORD3>Autoreport</KEYWORD3>\r
+                       <KEYWORD3>Average</KEYWORD3>\r
+                       <KEYWORD3>Bar</KEYWORD3>\r
+                       <KEYWORD3>BatchMode</KEYWORD3>\r
+                       <KEYWORD3>BatchUpdateCount</KEYWORD3>\r
+                       <KEYWORD3>Begin</KEYWORD3>\r
+                       <KEYWORD3>Bell</KEYWORD3>\r
+                       <KEYWORD3>BellSound</KEYWORD3>\r
+                       <KEYWORD3>Bitand</KEYWORD3>\r
+                       <KEYWORD3>Bitclear</KEYWORD3>\r
+                       <KEYWORD3>Bitlshift</KEYWORD3>\r
+                       <KEYWORD3>Bitnot</KEYWORD3>\r
+                       <KEYWORD3>Bitor</KEYWORD3>\r
+                       <KEYWORD3>Bitrshift</KEYWORD3>\r
+                       <KEYWORD3>Bitset</KEYWORD3>\r
+                       <KEYWORD3>Bittest</KEYWORD3>\r
+                       <KEYWORD3>Bitxor</KEYWORD3>\r
+                       <KEYWORD3>Bof</KEYWORD3>\r
+                       <KEYWORD3>Bottom</KEYWORD3>\r
+                       <KEYWORD3>Browse</KEYWORD3>\r
+                       <KEYWORD3>BrowseRefresh</KEYWORD3>\r
+                       <KEYWORD3>Buffering</KEYWORD3>\r
+                       <KEYWORD3>Build</KEYWORD3>\r
+                       <KEYWORD3>BuilderLock</KEYWORD3>\r
+                       <KEYWORD3>By</KEYWORD3>\r
+                       <KEYWORD3>Calculate</KEYWORD3>\r
+                       <KEYWORD3>Call</KEYWORD3>\r
+                       <KEYWORD3>Capslock</KEYWORD3>\r
+                       <KEYWORD3>Case</KEYWORD3>\r
+                       <KEYWORD3>Cd</KEYWORD3>\r
+                       <KEYWORD3>Cdow</KEYWORD3>\r
+                       <KEYWORD3>Ceiling</KEYWORD3>\r
+                       <KEYWORD3>Central</KEYWORD3>\r
+                       <KEYWORD3>Century</KEYWORD3>\r
+                       <KEYWORD3>Change</KEYWORD3>\r
+                       <KEYWORD3>Char</KEYWORD3>\r
+                       <KEYWORD3>Chdir</KEYWORD3>\r
+                       <KEYWORD3>Checkbox</KEYWORD3>\r
+                       <KEYWORD3>Chr</KEYWORD3>\r
+                       <KEYWORD3>Chrsaw</KEYWORD3>\r
+                       <KEYWORD3>Chrtran</KEYWORD3>\r
+                       <KEYWORD3>Close</KEYWORD3>\r
+                       <KEYWORD3>Cmonth</KEYWORD3>\r
+                       <KEYWORD3>Cntbar</KEYWORD3>\r
+                       <KEYWORD3>Cntpad</KEYWORD3>\r
+                       <KEYWORD3>Col</KEYWORD3>\r
+                       <KEYWORD3>Column</KEYWORD3>\r
+                       <KEYWORD3>ComboBox</KEYWORD3>\r
+                       <KEYWORD3>CommandButton</KEYWORD3>\r
+                       <KEYWORD3>CommandGroup</KEYWORD3>\r
+                       <KEYWORD3>Compile</KEYWORD3>\r
+                       <KEYWORD3>Completed</KEYWORD3>\r
+                       <KEYWORD3>Compobj</KEYWORD3>\r
+                       <KEYWORD3>Compute</KEYWORD3>\r
+                       <KEYWORD3>Concat</KEYWORD3>\r
+                       <KEYWORD3>ConnectBusy</KEYWORD3>\r
+                       <KEYWORD3>ConnectHandle</KEYWORD3>\r
+                       <KEYWORD3>ConnectName</KEYWORD3>\r
+                       <KEYWORD3>ConnectString</KEYWORD3>\r
+                       <KEYWORD3>ConnectTimeOut</KEYWORD3>\r
+                       <KEYWORD3>Container</KEYWORD3>\r
+                       <KEYWORD3>Continue</KEYWORD3>\r
+                       <KEYWORD3>Control</KEYWORD3>\r
+                       <KEYWORD3>Copy</KEYWORD3>\r
+                       <KEYWORD3>Cos</KEYWORD3>\r
+                       <KEYWORD3>Cot</KEYWORD3>\r
+                       <KEYWORD3>Count</KEYWORD3>\r
+                       <KEYWORD3>Cpconvert</KEYWORD3>\r
+                       <KEYWORD3>Cpcurrent</KEYWORD3>\r
+                       <KEYWORD3>CPDialog</KEYWORD3>\r
+                       <KEYWORD3>Cpdbf</KEYWORD3>\r
+                       <KEYWORD3>Cpnotrans</KEYWORD3>\r
+                       <KEYWORD3>Create</KEYWORD3>\r
+                       <KEYWORD3>Createobject</KEYWORD3>\r
+                       <KEYWORD3>CrsBuffering</KEYWORD3>\r
+                       <KEYWORD3>CrsFetchMemo</KEYWORD3>\r
+                       <KEYWORD3>CrsFetchSize</KEYWORD3>\r
+                       <KEYWORD3>CrsMaxRows</KEYWORD3>\r
+                       <KEYWORD3>CrsMethodUsed</KEYWORD3>\r
+                       <KEYWORD3>CrsNumBatch</KEYWORD3>\r
+                       <KEYWORD3>CrsShareConnection</KEYWORD3>\r
+                       <KEYWORD3>CrsUseMemoSize</KEYWORD3>\r
+                       <KEYWORD3>CrsWhereClause</KEYWORD3>\r
+                       <KEYWORD3>Ctod</KEYWORD3>\r
+                       <KEYWORD3>Ctot</KEYWORD3>\r
+                       <KEYWORD3>Curdate</KEYWORD3>\r
+                       <KEYWORD3>Curdir</KEYWORD3>\r
+                       <KEYWORD3>CurrLeft</KEYWORD3>\r
+                       <KEYWORD3>CurrSymbol</KEYWORD3>\r
+                       <KEYWORD3>Cursor</KEYWORD3>\r
+                       <KEYWORD3>Curtime</KEYWORD3>\r
+                       <KEYWORD3>Curval</KEYWORD3>\r
+                       <KEYWORD3>Custom</KEYWORD3>\r
+                       <KEYWORD3>DataEnvironment</KEYWORD3>\r
+                       <KEYWORD3>Databases</KEYWORD3>\r
+                       <KEYWORD3>Datetime</KEYWORD3>\r
+                       <KEYWORD3>Day</KEYWORD3>\r
+                       <KEYWORD3>Dayname</KEYWORD3>\r
+                       <KEYWORD3>Dayofmonth</KEYWORD3>\r
+                       <KEYWORD3>Dayofweek</KEYWORD3>\r
+                       <KEYWORD3>Dayofyear</KEYWORD3>\r
+                       <KEYWORD3>Dbalias</KEYWORD3>\r
+                       <KEYWORD3>Dbused</KEYWORD3>\r
+                       <KEYWORD3>DB_BufLockRow</KEYWORD3>\r
+                       <KEYWORD3>DB_BufLockTable</KEYWORD3>\r
+                       <KEYWORD3>DB_BufOff</KEYWORD3>\r
+                       <KEYWORD3>DB_BufOptRow</KEYWORD3>\r
+                       <KEYWORD3>DB_BufOptTable</KEYWORD3>\r
+                       <KEYWORD3>DB_Complette</KEYWORD3>\r
+                       <KEYWORD3>DB_DeleteInsert</KEYWORD3>\r
+                       <KEYWORD3>DB_KeyAndModified</KEYWORD3>\r
+                       <KEYWORD3>DB_KeyAndTimestamp</KEYWORD3>\r
+                       <KEYWORD3>DB_KeyAndUpdatable</KEYWORD3>\r
+                       <KEYWORD3>DB_LocalSQL</KEYWORD3>\r
+                       <KEYWORD3>DB_NoPrompt</KEYWORD3>\r
+                       <KEYWORD3>DB_Prompt</KEYWORD3>\r
+                       <KEYWORD3>DB_RemoteSQL</KEYWORD3>\r
+                       <KEYWORD3>DB_TransAuto</KEYWORD3>\r
+                       <KEYWORD3>DB_TransManual</KEYWORD3>\r
+                       <KEYWORD3>DB_TransNone</KEYWORD3>\r
+                       <KEYWORD3>DB_Update</KEYWORD3>\r
+                       <KEYWORD3>Ddeaborttrans</KEYWORD3>\r
+                       <KEYWORD3>Ddeadvise</KEYWORD3>\r
+                       <KEYWORD3>Ddeenabled</KEYWORD3>\r
+                       <KEYWORD3>Ddeexecute</KEYWORD3>\r
+                       <KEYWORD3>Ddeinitiate</KEYWORD3>\r
+                       <KEYWORD3>Ddelasterror</KEYWORD3>\r
+                       <KEYWORD3>Ddepoke</KEYWORD3>\r
+                       <KEYWORD3>Dderequest</KEYWORD3>\r
+                       <KEYWORD3>Ddesetoption</KEYWORD3>\r
+                       <KEYWORD3>Ddesetservice</KEYWORD3>\r
+                       <KEYWORD3>Ddesettopic</KEYWORD3>\r
+                       <KEYWORD3>Ddeterminate</KEYWORD3>\r
+                       <KEYWORD3>Declare</KEYWORD3>\r
+                       <KEYWORD3>DefaultValue</KEYWORD3>\r
+                       <KEYWORD3>Define</KEYWORD3>\r
+                       <KEYWORD3>Degrees</KEYWORD3>\r
+                       <KEYWORD3>DeleteTrigger</KEYWORD3>\r
+                       <KEYWORD3>Desc</KEYWORD3>\r
+                       <KEYWORD3>Description</KEYWORD3>\r
+                       <KEYWORD3>Difference</KEYWORD3>\r
+                       <KEYWORD3>Dimension</KEYWORD3>\r
+                       <KEYWORD3>Dir</KEYWORD3>\r
+                       <KEYWORD3>Directory</KEYWORD3>\r
+                       <KEYWORD3>Diskspace</KEYWORD3>\r
+                       <KEYWORD3>Display</KEYWORD3>\r
+                       <KEYWORD3>DispLogin</KEYWORD3>\r
+                       <KEYWORD3>DispWarnings</KEYWORD3>\r
+                       <KEYWORD3>Distinct</KEYWORD3>\r
+                       <KEYWORD3>Dmy</KEYWORD3>\r
+                       <KEYWORD3>Do</KEYWORD3>\r
+                       <KEYWORD3>Doc</KEYWORD3>\r
+                       <KEYWORD3>Dow</KEYWORD3>\r
+                       <KEYWORD3>Drop</KEYWORD3>\r
+                       <KEYWORD3>Dtoc</KEYWORD3>\r
+                       <KEYWORD3>Dtor</KEYWORD3>\r
+                       <KEYWORD3>Dtos</KEYWORD3>\r
+                       <KEYWORD3>Dtot</KEYWORD3>\r
+                       <KEYWORD3>Edit</KEYWORD3>\r
+                       <KEYWORD3>EditBox</KEYWORD3>\r
+                       <KEYWORD3>Eject</KEYWORD3>\r
+                       <KEYWORD3>Elif</KEYWORD3>\r
+                       <KEYWORD3>Else</KEYWORD3>\r
+                       <KEYWORD3>Empty</KEYWORD3>\r
+                       <KEYWORD3>End</KEYWORD3>\r
+                       <KEYWORD3>Endcase</KEYWORD3>\r
+                       <KEYWORD3>Enddefine</KEYWORD3>\r
+                       <KEYWORD3>Enddo</KEYWORD3>\r
+                       <KEYWORD3>Endfor</KEYWORD3>\r
+                       <KEYWORD3>Endif</KEYWORD3>\r
+                       <KEYWORD3>Endprintjob</KEYWORD3>\r
+                       <KEYWORD3>Endscan</KEYWORD3>\r
+                       <KEYWORD3>Endtext</KEYWORD3>\r
+                       <KEYWORD3>Endwith</KEYWORD3>\r
+                       <KEYWORD3>Eof</KEYWORD3>\r
+                       <KEYWORD3>Erase</KEYWORD3>\r
+                       <KEYWORD3>Evaluate</KEYWORD3>\r
+                       <KEYWORD3>Exact</KEYWORD3>\r
+                       <KEYWORD3>Exclusive</KEYWORD3>\r
+                       <KEYWORD3>Exit</KEYWORD3>\r
+                       <KEYWORD3>Exp</KEYWORD3>\r
+                       <KEYWORD3>Export</KEYWORD3>\r
+                       <KEYWORD3>External</KEYWORD3>\r
+                       <KEYWORD3>Fchsize</KEYWORD3>\r
+                       <KEYWORD3>Fclose</KEYWORD3>\r
+                       <KEYWORD3>Fcount</KEYWORD3>\r
+                       <KEYWORD3>Fcreate</KEYWORD3>\r
+                       <KEYWORD3>Feof</KEYWORD3>\r
+                       <KEYWORD3>Ferror</KEYWORD3>\r
+                       <KEYWORD3>FetchMemo</KEYWORD3>\r
+                       <KEYWORD3>FetchSize</KEYWORD3>\r
+                       <KEYWORD3>Fflush</KEYWORD3>\r
+                       <KEYWORD3>Fgets</KEYWORD3>\r
+                       <KEYWORD3>File</KEYWORD3>\r
+                       <KEYWORD3>Filer</KEYWORD3>\r
+                       <KEYWORD3>Find</KEYWORD3>\r
+                       <KEYWORD3>Fklabel</KEYWORD3>\r
+                       <KEYWORD3>Fkmax</KEYWORD3>\r
+                       <KEYWORD3>Fldlist</KEYWORD3>\r
+                       <KEYWORD3>Flock</KEYWORD3>\r
+                       <KEYWORD3>Floor</KEYWORD3>\r
+                       <KEYWORD3>Flush</KEYWORD3>\r
+                       <KEYWORD3>FontClass</KEYWORD3>\r
+                       <KEYWORD3>Fontmetric</KEYWORD3>\r
+                       <KEYWORD3>Fopen</KEYWORD3>\r
+                       <KEYWORD3>For</KEYWORD3>\r
+                       <KEYWORD3>Form</KEYWORD3>\r
+                       <KEYWORD3>FormsClass</KEYWORD3>\r
+                       <KEYWORD3>Formset</KEYWORD3>\r
+                       <KEYWORD3>FormSetClass</KEYWORD3>\r
+                       <KEYWORD3>FormSetLib</KEYWORD3>\r
+                       <KEYWORD3>FormsLib</KEYWORD3>\r
+                       <KEYWORD3>Found</KEYWORD3>\r
+                       <KEYWORD3>Foxcode</KEYWORD3>\r
+                       <KEYWORD3>Foxdoc</KEYWORD3>\r
+                       <KEYWORD3>Foxgen</KEYWORD3>\r
+                       <KEYWORD3>Foxgraph</KEYWORD3>\r
+                       <KEYWORD3>FoxPro</KEYWORD3>\r
+                       <KEYWORD3>Foxview</KEYWORD3>\r
+                       <KEYWORD3>Fputs</KEYWORD3>\r
+                       <KEYWORD3>Fread</KEYWORD3>\r
+                       <KEYWORD3>From</KEYWORD3>\r
+                       <KEYWORD3>Fseek</KEYWORD3>\r
+                       <KEYWORD3>Fsize</KEYWORD3>\r
+                       <KEYWORD3>Fv</KEYWORD3>\r
+                       <KEYWORD3>Fwrite</KEYWORD3>\r
+                       <KEYWORD3>Gather</KEYWORD3>\r
+                       <KEYWORD3>General</KEYWORD3>\r
+                       <KEYWORD3>Getbar</KEYWORD3>\r
+                       <KEYWORD3>Getcolor</KEYWORD3>\r
+                       <KEYWORD3>Getcp</KEYWORD3>\r
+                       <KEYWORD3>Getdir</KEYWORD3>\r
+                       <KEYWORD3>Getenv</KEYWORD3>\r
+                       <KEYWORD3>Getexpr</KEYWORD3>\r
+                       <KEYWORD3>Getfile</KEYWORD3>\r
+                       <KEYWORD3>Getfldstate</KEYWORD3>\r
+                       <KEYWORD3>Getfont</KEYWORD3>\r
+                       <KEYWORD3>Getnextmodified</KEYWORD3>\r
+                       <KEYWORD3>Getobject</KEYWORD3>\r
+                       <KEYWORD3>Getpad</KEYWORD3>\r
+                       <KEYWORD3>Getpict</KEYWORD3>\r
+                       <KEYWORD3>Getprinter</KEYWORD3>\r
+                       <KEYWORD3>Go</KEYWORD3>\r
+                       <KEYWORD3>Gomonth</KEYWORD3>\r
+                       <KEYWORD3>Goto</KEYWORD3>\r
+                       <KEYWORD3>Graph</KEYWORD3>\r
+                       <KEYWORD3>Grid</KEYWORD3>\r
+                       <KEYWORD3>GridHorz</KEYWORD3>\r
+                       <KEYWORD3>GridShow</KEYWORD3>\r
+                       <KEYWORD3>GridShowPos</KEYWORD3>\r
+                       <KEYWORD3>GridSnap</KEYWORD3>\r
+                       <KEYWORD3>GridVert</KEYWORD3>\r
+                       <KEYWORD3>Header</KEYWORD3>\r
+                       <KEYWORD3>Help</KEYWORD3>\r
+                       <KEYWORD3>HelpOn</KEYWORD3>\r
+                       <KEYWORD3>HelpTo</KEYWORD3>\r
+                       <KEYWORD3>Hour</KEYWORD3>\r
+                       <KEYWORD3>IdleTimeOut</KEYWORD3>\r
+                       <KEYWORD3>Idxcollate</KEYWORD3>\r
+                       <KEYWORD3>If</KEYWORD3>\r
+                       <KEYWORD3>Ifdef</KEYWORD3>\r
+                       <KEYWORD3>Ifndef</KEYWORD3>\r
+                       <KEYWORD3>Iif</KEYWORD3>\r
+                       <KEYWORD3>Image</KEYWORD3>\r
+                       <KEYWORD3>Import</KEYWORD3>\r
+                       <KEYWORD3>Include</KEYWORD3>\r
+                       <KEYWORD3>Indbc</KEYWORD3>\r
+                       <KEYWORD3>Index</KEYWORD3>\r
+                       <KEYWORD3>Inkey</KEYWORD3>\r
+                       <KEYWORD3>Inlist</KEYWORD3>\r
+                       <KEYWORD3>Input</KEYWORD3>\r
+                       <KEYWORD3>Insert</KEYWORD3>\r
+                       <KEYWORD3>InsertTrigger</KEYWORD3>\r
+                       <KEYWORD3>Insmode</KEYWORD3>\r
+                       <KEYWORD3>Into</KEYWORD3>\r
+                       <KEYWORD3>Isalpha</KEYWORD3>\r
+                       <KEYWORD3>Iscolor</KEYWORD3>\r
+                       <KEYWORD3>Isdigit</KEYWORD3>\r
+                       <KEYWORD3>Isexclusive</KEYWORD3>\r
+                       <KEYWORD3>Islower</KEYWORD3>\r
+                       <KEYWORD3>Isnull</KEYWORD3>\r
+                       <KEYWORD3>Isreadonly</KEYWORD3>\r
+                       <KEYWORD3>Isupper</KEYWORD3>\r
+                       <KEYWORD3>Join</KEYWORD3>\r
+                       <KEYWORD3>Keyboard</KEYWORD3>\r
+                       <KEYWORD3>KeyField</KEYWORD3>\r
+                       <KEYWORD3>KeyFieldList</KEYWORD3>\r
+                       <KEYWORD3>Keymatch</KEYWORD3>\r
+                       <KEYWORD3>Label</KEYWORD3>\r
+                       <KEYWORD3>Lastkey</KEYWORD3>\r
+                       <KEYWORD3>LastProject</KEYWORD3>\r
+                       <KEYWORD3>Lcase</KEYWORD3>\r
+                       <KEYWORD3>Len</KEYWORD3>\r
+                       <KEYWORD3>Length</KEYWORD3>\r
+                       <KEYWORD3>Lineno</KEYWORD3>\r
+                       <KEYWORD3>ListBox</KEYWORD3>\r
+                       <KEYWORD3>Local</KEYWORD3>\r
+                       <KEYWORD3>Locate</KEYWORD3>\r
+                       <KEYWORD3>Locfile</KEYWORD3>\r
+                       <KEYWORD3>Log</KEYWORD3>\r
+                       <KEYWORD3>Log10</KEYWORD3>\r
+                       <KEYWORD3>Logout</KEYWORD3>\r
+                       <KEYWORD3>Lookup</KEYWORD3>\r
+                       <KEYWORD3>Loop</KEYWORD3>\r
+                       <KEYWORD3>Lower</KEYWORD3>\r
+                       <KEYWORD3>Lparameters</KEYWORD3>\r
+                       <KEYWORD3>Ltrim</KEYWORD3>\r
+                       <KEYWORD3>Lupdate</KEYWORD3>\r
+                       <KEYWORD3>Mail</KEYWORD3>\r
+                       <KEYWORD3>MaxRecords</KEYWORD3>\r
+                       <KEYWORD3>Mcol</KEYWORD3>\r
+                       <KEYWORD3>Md</KEYWORD3>\r
+                       <KEYWORD3>Mdown</KEYWORD3>\r
+                       <KEYWORD3>Mdx</KEYWORD3>\r
+                       <KEYWORD3>Mdy</KEYWORD3>\r
+                       <KEYWORD3>Memlines</KEYWORD3>\r
+                       <KEYWORD3>Memo</KEYWORD3>\r
+                       <KEYWORD3>Menu</KEYWORD3>\r
+                       <KEYWORD3>Messagebox</KEYWORD3>\r
+                       <KEYWORD3>Minute</KEYWORD3>\r
+                       <KEYWORD3>Mkdir</KEYWORD3>\r
+                       <KEYWORD3>Mline</KEYWORD3>\r
+                       <KEYWORD3>Modify</KEYWORD3>\r
+                       <KEYWORD3>Month</KEYWORD3>\r
+                       <KEYWORD3>Monthname</KEYWORD3>\r
+                       <KEYWORD3>Mouse</KEYWORD3>\r
+                       <KEYWORD3>Mrkbar</KEYWORD3>\r
+                       <KEYWORD3>Mrkpad</KEYWORD3>\r
+                       <KEYWORD3>Mrow</KEYWORD3>\r
+                       <KEYWORD3>Mton</KEYWORD3>\r
+                       <KEYWORD3>Mwindow</KEYWORD3>\r
+                       <KEYWORD3>Native</KEYWORD3>\r
+                       <KEYWORD3>Ndx</KEYWORD3>\r
+                       <KEYWORD3>Network</KEYWORD3>\r
+                       <KEYWORD3>Next</KEYWORD3>\r
+                       <KEYWORD3>Nodefault</KEYWORD3>\r
+                       <KEYWORD3>Normalize</KEYWORD3>\r
+                       <KEYWORD3>Note</KEYWORD3>\r
+                       <KEYWORD3>Now</KEYWORD3>\r
+                       <KEYWORD3>Ntom</KEYWORD3>\r
+                       <KEYWORD3>NullString</KEYWORD3>\r
+                       <KEYWORD3>Numlock</KEYWORD3>\r
+                       <KEYWORD3>Nvl</KEYWORD3>\r
+                       <KEYWORD3>Objnum</KEYWORD3>\r
+                       <KEYWORD3>Objref</KEYWORD3>\r
+                       <KEYWORD3>Objtoclient</KEYWORD3>\r
+                       <KEYWORD3>Objvar</KEYWORD3>\r
+                       <KEYWORD3>Occurs</KEYWORD3>\r
+                       <KEYWORD3>ODBChdbc</KEYWORD3>\r
+                       <KEYWORD3>ODBChstmt</KEYWORD3>\r
+                       <KEYWORD3>Oemtoansi</KEYWORD3>\r
+                       <KEYWORD3>Off</KEYWORD3>\r
+                       <KEYWORD3>Oldval</KEYWORD3>\r
+                       <KEYWORD3>OleBaseControl</KEYWORD3>\r
+                       <KEYWORD3>OleBoundControl</KEYWORD3>\r
+                       <KEYWORD3>OleClassIDispOut</KEYWORD3>\r
+                       <KEYWORD3>OleControl</KEYWORD3>\r
+                       <KEYWORD3>On</KEYWORD3>\r
+                       <KEYWORD3>Open</KEYWORD3>\r
+                       <KEYWORD3>OptionButton</KEYWORD3>\r
+                       <KEYWORD3>OptionGroup</KEYWORD3>\r
+                       <KEYWORD3>Oracle</KEYWORD3>\r
+                       <KEYWORD3>Order</KEYWORD3>\r
+                       <KEYWORD3>Os</KEYWORD3>\r
+                       <KEYWORD3>Otherwise</KEYWORD3>\r
+                       <KEYWORD3>Pack</KEYWORD3>\r
+                       <KEYWORD3>PacketSize</KEYWORD3>\r
+                       <KEYWORD3>Padc</KEYWORD3>\r
+                       <KEYWORD3>Padl</KEYWORD3>\r
+                       <KEYWORD3>Padr</KEYWORD3>\r
+                       <KEYWORD3>Page</KEYWORD3>\r
+                       <KEYWORD3>PageFrame</KEYWORD3>\r
+                       <KEYWORD3>Parameters</KEYWORD3>\r
+                       <KEYWORD3>Payment</KEYWORD3>\r
+                       <KEYWORD3>Pcol</KEYWORD3>\r
+                       <KEYWORD3>Percent</KEYWORD3>\r
+                       <KEYWORD3>Pi</KEYWORD3>\r
+                       <KEYWORD3>Pivot</KEYWORD3>\r
+                       <KEYWORD3>Play</KEYWORD3>\r
+                       <KEYWORD3>Pop</KEYWORD3>\r
+                       <KEYWORD3>Power</KEYWORD3>\r
+                       <KEYWORD3>PrimaryKey</KEYWORD3>\r
+                       <KEYWORD3>Printjob</KEYWORD3>\r
+                       <KEYWORD3>Printstatus</KEYWORD3>\r
+                       <KEYWORD3>Private</KEYWORD3>\r
+                       <KEYWORD3>Prmbar</KEYWORD3>\r
+                       <KEYWORD3>Prmpad</KEYWORD3>\r
+                       <KEYWORD3>Program</KEYWORD3>\r
+                       <KEYWORD3>ProjectClick</KEYWORD3>\r
+                       <KEYWORD3>Proper</KEYWORD3>\r
+                       <KEYWORD3>Protected</KEYWORD3>\r
+                       <KEYWORD3>Prow</KEYWORD3>\r
+                       <KEYWORD3>Prtinfo</KEYWORD3>\r
+                       <KEYWORD3>Public</KEYWORD3>\r
+                       <KEYWORD3>Push</KEYWORD3>\r
+                       <KEYWORD3>Putfile</KEYWORD3>\r
+                       <KEYWORD3>Pv</KEYWORD3>\r
+                       <KEYWORD3>Qpr</KEYWORD3>\r
+                       <KEYWORD3>Quater</KEYWORD3>\r
+                       <KEYWORD3>QueryTimeOut</KEYWORD3>\r
+                       <KEYWORD3>Quit</KEYWORD3>\r
+                       <KEYWORD3>Radians</KEYWORD3>\r
+                       <KEYWORD3>Rand</KEYWORD3>\r
+                       <KEYWORD3>Rat</KEYWORD3>\r
+                       <KEYWORD3>Ratline</KEYWORD3>\r
+                       <KEYWORD3>Rd</KEYWORD3>\r
+                       <KEYWORD3>Rdlevel</KEYWORD3>\r
+                       <KEYWORD3>Read</KEYWORD3>\r
+                       <KEYWORD3>Readkey</KEYWORD3>\r
+                       <KEYWORD3>Recall</KEYWORD3>\r
+                       <KEYWORD3>Reccount</KEYWORD3>\r
+                       <KEYWORD3>RecentlyUsedFiles</KEYWORD3>\r
+                       <KEYWORD3>Recno</KEYWORD3>\r
+                       <KEYWORD3>Recsize</KEYWORD3>\r
+                       <KEYWORD3>RectClass</KEYWORD3>\r
+                       <KEYWORD3>Regional</KEYWORD3>\r
+                       <KEYWORD3>Reindex</KEYWORD3>\r
+                       <KEYWORD3>RelatedChild</KEYWORD3>\r
+                       <KEYWORD3>RelatedTable</KEYWORD3>\r
+                       <KEYWORD3>RelatedTag</KEYWORD3>\r
+                       <KEYWORD3>Relation</KEYWORD3>\r
+                       <KEYWORD3>Remove</KEYWORD3>\r
+                       <KEYWORD3>Rename</KEYWORD3>\r
+                       <KEYWORD3>Repeat</KEYWORD3>\r
+                       <KEYWORD3>Replace</KEYWORD3>\r
+                       <KEYWORD3>Replicate</KEYWORD3>\r
+                       <KEYWORD3>Report</KEYWORD3>\r
+                       <KEYWORD3>Reprocess</KEYWORD3>\r
+                       <KEYWORD3>ResHeight</KEYWORD3>\r
+                       <KEYWORD3>ResourceOn</KEYWORD3>\r
+                       <KEYWORD3>ResourceTo</KEYWORD3>\r
+                       <KEYWORD3>Restore</KEYWORD3>\r
+                       <KEYWORD3>Resume</KEYWORD3>\r
+                       <KEYWORD3>ResWidth</KEYWORD3>\r
+                       <KEYWORD3>Retry</KEYWORD3>\r
+                       <KEYWORD3>Return</KEYWORD3>\r
+                       <KEYWORD3>Rgbscheme</KEYWORD3>\r
+                       <KEYWORD3>Rlock</KEYWORD3>\r
+                       <KEYWORD3>Rmdir</KEYWORD3>\r
+                       <KEYWORD3>Rollback</KEYWORD3>\r
+                       <KEYWORD3>Round</KEYWORD3>\r
+                       <KEYWORD3>Rtod</KEYWORD3>\r
+                       <KEYWORD3>Rtrim</KEYWORD3>\r
+                       <KEYWORD3>RuleExpression</KEYWORD3>\r
+                       <KEYWORD3>RuleText</KEYWORD3>\r
+                       <KEYWORD3>Run</KEYWORD3>\r
+                       <KEYWORD3>Runscript</KEYWORD3>\r
+                       <KEYWORD3>Rview</KEYWORD3>\r
+                       <KEYWORD3>Save</KEYWORD3>\r
+                       <KEYWORD3>Safety</KEYWORD3>\r
+                       <KEYWORD3>ScaleUnits</KEYWORD3>\r
+                       <KEYWORD3>Scan</KEYWORD3>\r
+                       <KEYWORD3>Scatter</KEYWORD3>\r
+                       <KEYWORD3>Scols</KEYWORD3>\r
+                       <KEYWORD3>Scroll</KEYWORD3>\r
+                       <KEYWORD3>Sec</KEYWORD3>\r
+                       <KEYWORD3>Second</KEYWORD3>\r
+                       <KEYWORD3>Seek</KEYWORD3>\r
+                       <KEYWORD3>Select</KEYWORD3>\r
+                       <KEYWORD3>SendUpdates</KEYWORD3>\r
+                       <KEYWORD3>Separator</KEYWORD3>\r
+                       <KEYWORD3>Set</KEYWORD3>\r
+                       <KEYWORD3>SetDefault</KEYWORD3>\r
+                       <KEYWORD3>Setfldstate</KEYWORD3>\r
+                       <KEYWORD3>Setup</KEYWORD3>\r
+                       <KEYWORD3>Shape</KEYWORD3>\r
+                       <KEYWORD3>Shared</KEYWORD3>\r
+                       <KEYWORD3>ShareConnection</KEYWORD3>\r
+                       <KEYWORD3>ShowOLEControls</KEYWORD3>\r
+                       <KEYWORD3>ShowOLEInsertable</KEYWORD3>\r
+                       <KEYWORD3>ShowVCXs</KEYWORD3>\r
+                       <KEYWORD3>Sign</KEYWORD3>\r
+                       <KEYWORD3>Sin</KEYWORD3>\r
+                       <KEYWORD3>Size</KEYWORD3>\r
+                       <KEYWORD3>Skpbar</KEYWORD3>\r
+                       <KEYWORD3>Skppad</KEYWORD3>\r
+                       <KEYWORD3>Sort</KEYWORD3>\r
+                       <KEYWORD3>Soundex</KEYWORD3>\r
+                       <KEYWORD3>SourceName</KEYWORD3>\r
+                       <KEYWORD3>Spinner</KEYWORD3>\r
+                       <KEYWORD3>SQLAsynchronous</KEYWORD3>\r
+                       <KEYWORD3>SQLBatchMode</KEYWORD3>\r
+                       <KEYWORD3>Sqlcommit</KEYWORD3>\r
+                       <KEYWORD3>SQLConnectTimeOut</KEYWORD3>\r
+                       <KEYWORD3>SQLDispLogin</KEYWORD3>\r
+                       <KEYWORD3>SQLDispWarnings</KEYWORD3>\r
+                       <KEYWORD3>SQLIdleTimeOut</KEYWORD3>\r
+                       <KEYWORD3>Sqll</KEYWORD3>\r
+                       <KEYWORD3>SQLQueryTimeOut</KEYWORD3>\r
+                       <KEYWORD3>Sqlrollback</KEYWORD3>\r
+                       <KEYWORD3>Sqlstringconnect</KEYWORD3>\r
+                       <KEYWORD3>SQLTransactions</KEYWORD3>\r
+                       <KEYWORD3>SQLWaitTime</KEYWORD3>\r
+                       <KEYWORD3>Sqrt</KEYWORD3>\r
+                       <KEYWORD3>Srows</KEYWORD3>\r
+                       <KEYWORD3>StatusBar</KEYWORD3>\r
+                       <KEYWORD3>Status</KEYWORD3>\r
+                       <KEYWORD3>Store</KEYWORD3>\r
+                       <KEYWORD3>Str</KEYWORD3>\r
+                       <KEYWORD3>Strtran</KEYWORD3>\r
+                       <KEYWORD3>Stuff</KEYWORD3>\r
+                       <KEYWORD3>Substr</KEYWORD3>\r
+                       <KEYWORD3>Substring</KEYWORD3>\r
+                       <KEYWORD3>Sum</KEYWORD3>\r
+                       <KEYWORD3>Suspend</KEYWORD3>\r
+                       <KEYWORD3>Sys</KEYWORD3>\r
+                       <KEYWORD3>Sysmetric</KEYWORD3>\r
+                       <KEYWORD3>Table</KEYWORD3>\r
+                       <KEYWORD3>TableRefresh</KEYWORD3>\r
+                       <KEYWORD3>Tablerevert</KEYWORD3>\r
+                       <KEYWORD3>Tableupdate</KEYWORD3>\r
+                       <KEYWORD3>TabOrdering</KEYWORD3>\r
+                       <KEYWORD3>Talk</KEYWORD3>\r
+                       <KEYWORD3>Tan</KEYWORD3>\r
+                       <KEYWORD3>Target</KEYWORD3>\r
+                       <KEYWORD3>Text</KEYWORD3>\r
+                       <KEYWORD3>TextBox</KEYWORD3>\r
+                       <KEYWORD3>Timestamp</KEYWORD3>\r
+                       <KEYWORD3>Timestampdiff</KEYWORD3>\r
+                       <KEYWORD3>To</KEYWORD3>\r
+                       <KEYWORD3>Toolbar</KEYWORD3>\r
+                       <KEYWORD3>Total</KEYWORD3>\r
+                       <KEYWORD3>Transaction</KEYWORD3>\r
+                       <KEYWORD3>Transform</KEYWORD3>\r
+                       <KEYWORD3>Trim</KEYWORD3>\r
+                       <KEYWORD3>Truncate</KEYWORD3>\r
+                       <KEYWORD3>Ttoc</KEYWORD3>\r
+                       <KEYWORD3>Ttod</KEYWORD3>\r
+                       <KEYWORD3>Txnlevel</KEYWORD3>\r
+                       <KEYWORD3>Txtwidth</KEYWORD3>\r
+                       <KEYWORD3>Type</KEYWORD3>\r
+                       <KEYWORD3>Ucase</KEYWORD3>\r
+                       <KEYWORD3>Undefine</KEYWORD3>\r
+                       <KEYWORD3>Unlock</KEYWORD3>\r
+                       <KEYWORD3>Unpack</KEYWORD3>\r
+                       <KEYWORD3>Updatable</KEYWORD3>\r
+                       <KEYWORD3>UpdatableFieldList</KEYWORD3>\r
+                       <KEYWORD3>Update</KEYWORD3>\r
+                       <KEYWORD3>Updated</KEYWORD3>\r
+                       <KEYWORD3>UpdateName</KEYWORD3>\r
+                       <KEYWORD3>UpdateNameList</KEYWORD3>\r
+                       <KEYWORD3>UpdateTrigger</KEYWORD3>\r
+                       <KEYWORD3>UpdateType</KEYWORD3>\r
+                       <KEYWORD3>Upper</KEYWORD3>\r
+                       <KEYWORD3>Upsizing</KEYWORD3>\r
+                       <KEYWORD3>Use</KEYWORD3>\r
+                       <KEYWORD3>Used</KEYWORD3>\r
+                       <KEYWORD3>UseMemoSize</KEYWORD3>\r
+                       <KEYWORD3>Val</KEYWORD3>\r
+                       <KEYWORD3>Validate</KEYWORD3>\r
+                       <KEYWORD3>Values</KEYWORD3>\r
+                       <KEYWORD3>Varread</KEYWORD3>\r
+                       <KEYWORD3>Version</KEYWORD3>\r
+                       <KEYWORD3>Wait</KEYWORD3>\r
+                       <KEYWORD3>WaitTime</KEYWORD3>\r
+                       <KEYWORD3>Wborder</KEYWORD3>\r
+                       <KEYWORD3>Wchild</KEYWORD3>\r
+                       <KEYWORD3>Wcols</KEYWORD3>\r
+                       <KEYWORD3>Week</KEYWORD3>\r
+                       <KEYWORD3>Wexist</KEYWORD3>\r
+                       <KEYWORD3>Wfont</KEYWORD3>\r
+                       <KEYWORD3>Where</KEYWORD3>\r
+                       <KEYWORD3>WhereType</KEYWORD3>\r
+                       <KEYWORD3>While</KEYWORD3>\r
+                       <KEYWORD3>Windcmd</KEYWORD3>\r
+                       <KEYWORD3>Windhelp</KEYWORD3>\r
+                       <KEYWORD3>Windmemo</KEYWORD3>\r
+                       <KEYWORD3>Windmenu</KEYWORD3>\r
+                       <KEYWORD3>Windmodify</KEYWORD3>\r
+                       <KEYWORD3>Windquery</KEYWORD3>\r
+                       <KEYWORD3>Windscreen</KEYWORD3>\r
+                       <KEYWORD3>Windsnip</KEYWORD3>\r
+                       <KEYWORD3>Windstproc</KEYWORD3>\r
+                       <KEYWORD3>With</KEYWORD3>\r
+                       <KEYWORD3>WizardPrompt</KEYWORD3>\r
+                       <KEYWORD3>Wlast</KEYWORD3>\r
+                       <KEYWORD3>Wlcol</KEYWORD3>\r
+                       <KEYWORD3>Wlrow</KEYWORD3>\r
+                       <KEYWORD3>Wmaximum</KEYWORD3>\r
+                       <KEYWORD3>Wminimum</KEYWORD3>\r
+                       <KEYWORD3>Wontop</KEYWORD3>\r
+                       <KEYWORD3>Woutput</KEYWORD3>\r
+                       <KEYWORD3>Wparent</KEYWORD3>\r
+                       <KEYWORD3>Wread</KEYWORD3>\r
+                       <KEYWORD3>Wrows</KEYWORD3>\r
+                       <KEYWORD3>Wtitle</KEYWORD3>\r
+                       <KEYWORD3>Wvisible</KEYWORD3>\r
+                       <KEYWORD3>Year</KEYWORD3>\r
+                       <KEYWORD3>Zap</KEYWORD3>\r
+                       <KEYWORD3>[</KEYWORD3>\r
+                       <KEYWORD3>]</KEYWORD3>\r
+                       <KEYWORD3>^</KEYWORD3>\r
+                       <KEYWORD3>_Alignment</KEYWORD3>\r
+                       <KEYWORD3>_Asciicols</KEYWORD3>\r
+                       <KEYWORD3>_Asciirows</KEYWORD3>\r
+                       <KEYWORD3>_Assist</KEYWORD3>\r
+                       <KEYWORD3>_Beautify</KEYWORD3>\r
+                       <KEYWORD3>_Box</KEYWORD3>\r
+                       <KEYWORD3>_Browser</KEYWORD3>\r
+                       <KEYWORD3>_Builder</KEYWORD3>\r
+                       <KEYWORD3>_Calcmem</KEYWORD3>\r
+                       <KEYWORD3>_Calcvalue</KEYWORD3>\r
+                       <KEYWORD3>_Cliptext</KEYWORD3>\r
+                       <KEYWORD3>_Converter</KEYWORD3>\r
+                       <KEYWORD3>_Curobj</KEYWORD3>\r
+                       <KEYWORD3>_Dblclick</KEYWORD3>\r
+                       <KEYWORD3>_Diarydate</KEYWORD3>\r
+                       <KEYWORD3>_Dos</KEYWORD3>\r
+                       <KEYWORD3>_Foxdoc</KEYWORD3>\r
+                       <KEYWORD3>_Foxgraph</KEYWORD3>\r
+                       <KEYWORD3>_Gengraph</KEYWORD3>\r
+                       <KEYWORD3>_Genmenu</KEYWORD3>\r
+                       <KEYWORD3>_Genpd</KEYWORD3>\r
+                       <KEYWORD3>_Genscrn</KEYWORD3>\r
+                       <KEYWORD3>_Genxtab</KEYWORD3>\r
+                       <KEYWORD3>_Indent</KEYWORD3>\r
+                       <KEYWORD3>_Lmargin</KEYWORD3>\r
+                       <KEYWORD3>_Mac</KEYWORD3>\r
+                       <KEYWORD3>_Mbrowse</KEYWORD3>\r
+                       <KEYWORD3>_Mbr_appnd</KEYWORD3>\r
+                       <KEYWORD3>_Mbr_cpart</KEYWORD3>\r
+                       <KEYWORD3>_Mbr_delet</KEYWORD3>\r
+                       <KEYWORD3>_Mbr_font</KEYWORD3>\r
+                       <KEYWORD3>_Mbr_goto</KEYWORD3>\r
+                       <KEYWORD3>_Mbr_grid</KEYWORD3>\r
+                       <KEYWORD3>_Mbr_link</KEYWORD3>\r
+                       <KEYWORD3>_Mbr_mode</KEYWORD3>\r
+                       <KEYWORD3>_Mbr_mvfld</KEYWORD3>\r
+                       <KEYWORD3>_Mbr_mvprt</KEYWORD3>\r
+                       <KEYWORD3>_Mbr_seek</KEYWORD3>\r
+                       <KEYWORD3>_Mbr_sp100</KEYWORD3>\r
+                       <KEYWORD3>_Mbr_sp200</KEYWORD3>\r
+                       <KEYWORD3>_Mbr_szfld</KEYWORD3>\r
+                       <KEYWORD3>_Mdata</KEYWORD3>\r
+                       <KEYWORD3>_Mda_appnd</KEYWORD3>\r
+                       <KEYWORD3>_Mda_avg</KEYWORD3>\r
+                       <KEYWORD3>_Mda_brow</KEYWORD3>\r
+                       <KEYWORD3>_Mda_calc</KEYWORD3>\r
+                       <KEYWORD3>_Mda_copy</KEYWORD3>\r
+                       <KEYWORD3>_Mda_count</KEYWORD3>\r
+                       <KEYWORD3>_Mda_label</KEYWORD3>\r
+                       <KEYWORD3>_Mda_pack</KEYWORD3>\r
+                       <KEYWORD3>_Mda_reprt</KEYWORD3>\r
+                       <KEYWORD3>_Mda_rindx</KEYWORD3>\r
+                       <KEYWORD3>_Mda_setup</KEYWORD3>\r
+                       <KEYWORD3>_Mda_sort</KEYWORD3>\r
+                       <KEYWORD3>_Mda_sp100</KEYWORD3>\r
+                       <KEYWORD3>_Mda_sp200</KEYWORD3>\r
+                       <KEYWORD3>_Mda_sp300</KEYWORD3>\r
+                       <KEYWORD3>_Mda_sum</KEYWORD3>\r
+                       <KEYWORD3>_Mda_total</KEYWORD3>\r
+                       <KEYWORD3>_Mdiary</KEYWORD3>\r
+                       <KEYWORD3>_Medit</KEYWORD3>\r
+                       <KEYWORD3>_Med_clear</KEYWORD3>\r
+                       <KEYWORD3>_Med_copy</KEYWORD3>\r
+                       <KEYWORD3>_Med_cut</KEYWORD3>\r
+                       <KEYWORD3>_Med_cvtst</KEYWORD3>\r
+                       <KEYWORD3>_Med_find</KEYWORD3>\r
+                       <KEYWORD3>_Med_finda</KEYWORD3>\r
+                       <KEYWORD3>_Med_goto</KEYWORD3>\r
+                       <KEYWORD3>_Med_insob</KEYWORD3>\r
+                       <KEYWORD3>_Med_link</KEYWORD3>\r
+                       <KEYWORD3>_Med_obj</KEYWORD3>\r
+                       <KEYWORD3>_Med_paste</KEYWORD3>\r
+                       <KEYWORD3>_Med_pref</KEYWORD3>\r
+                       <KEYWORD3>_Med_pstlk</KEYWORD3>\r
+                       <KEYWORD3>_Med_redo</KEYWORD3>\r
+                       <KEYWORD3>_Med_repl</KEYWORD3>\r
+                       <KEYWORD3>_Med_repla</KEYWORD3>\r
+                       <KEYWORD3>_Med_slcta</KEYWORD3>\r
+                       <KEYWORD3>_Med_sp100</KEYWORD3>\r
+                       <KEYWORD3>_Med_sp200</KEYWORD3>\r
+                       <KEYWORD3>_Med_sp300</KEYWORD3>\r
+                       <KEYWORD3>_Med_sp400</KEYWORD3>\r
+                       <KEYWORD3>_Med_sp500</KEYWORD3>\r
+                       <KEYWORD3>_Med_undo</KEYWORD3>\r
+                       <KEYWORD3>_Mfile</KEYWORD3>\r
+                       <KEYWORD3>_Mfiler</KEYWORD3>\r
+                       <KEYWORD3>_Mfirst</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_clall</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_close</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_export</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_import</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_new</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_open</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_pgset</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_prevu</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_print</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_quit</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_revrt</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_savas</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_save</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_send</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_setup</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_sp100</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_sp200</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_sp300</KEYWORD3>\r
+                       <KEYWORD3>_Mfi_sp400</KEYWORD3>\r
+                       <KEYWORD3>_Mlabel</KEYWORD3>\r
+                       <KEYWORD3>_Mlast</KEYWORD3>\r
+                       <KEYWORD3>_Mline</KEYWORD3>\r
+                       <KEYWORD3>_Mmacro</KEYWORD3>\r
+                       <KEYWORD3>_Mmbldr</KEYWORD3>\r
+                       <KEYWORD3>_Mprog</KEYWORD3>\r
+                       <KEYWORD3>_Mproj</KEYWORD3>\r
+                       <KEYWORD3>_Mpr_beaut</KEYWORD3>\r
+                       <KEYWORD3>_Mpr_cancl</KEYWORD3>\r
+                       <KEYWORD3>_Mpr_compl</KEYWORD3>\r
+                       <KEYWORD3>_Mpr_do</KEYWORD3>\r
+                       <KEYWORD3>_Mpr_docum</KEYWORD3>\r
+                       <KEYWORD3>_Mpr_formwz</KEYWORD3>\r
+                       <KEYWORD3>_Mpr_gener</KEYWORD3>\r
+                       <KEYWORD3>_Mpr_graph</KEYWORD3>\r
+                       <KEYWORD3>_Mpr_resum</KEYWORD3>\r
+                       <KEYWORD3>_Mpr_sp100</KEYWORD3>\r
+                       <KEYWORD3>_Mpr_sp200</KEYWORD3>\r
+                       <KEYWORD3>_Mpr_sp300</KEYWORD3>\r
+                       <KEYWORD3>_Mpr_suspend</KEYWORD3>\r
+                       <KEYWORD3>_Mrc_appnd</KEYWORD3>\r
+                       <KEYWORD3>_Mrc_chnge</KEYWORD3>\r
+                       <KEYWORD3>_Mrc_cont</KEYWORD3>\r
+                       <KEYWORD3>_Mrc_delet</KEYWORD3>\r
+                       <KEYWORD3>_Mrc_goto</KEYWORD3>\r
+                       <KEYWORD3>_Mrc_locat</KEYWORD3>\r
+                       <KEYWORD3>_Mrc_recal</KEYWORD3>\r
+                       <KEYWORD3>_Mrc_repl</KEYWORD3>\r
+                       <KEYWORD3>_Mrc_seek</KEYWORD3>\r
+                       <KEYWORD3>_Mrc_sp100</KEYWORD3>\r
+                       <KEYWORD3>_Mrc_sp200</KEYWORD3>\r
+                       <KEYWORD3>_Mrecord</KEYWORD3>\r
+                       <KEYWORD3>_Mreport</KEYWORD3>\r
+                       <KEYWORD3>_Mrqbe</KEYWORD3>\r
+                       <KEYWORD3>_Mscreen</KEYWORD3>\r
+                       <KEYWORD3>_Msm_data</KEYWORD3>\r
+                       <KEYWORD3>_Msm_edit</KEYWORD3>\r
+                       <KEYWORD3>_Msm_file</KEYWORD3>\r
+                       <KEYWORD3>_Msm_format</KEYWORD3>\r
+                       <KEYWORD3>_Msm_prog</KEYWORD3>\r
+                       <KEYWORD3>_Msm_recrd</KEYWORD3>\r
+                       <KEYWORD3>_Msm_systm</KEYWORD3>\r
+                       <KEYWORD3>_Msm_text</KEYWORD3>\r
+                       <KEYWORD3>_Msm_tools</KEYWORD3>\r
+                       <KEYWORD3>_Msm_view</KEYWORD3>\r
+                       <KEYWORD3>_Msm_windo</KEYWORD3>\r
+                       <KEYWORD3>_Mst_about</KEYWORD3>\r
+                       <KEYWORD3>_Mst_ascii</KEYWORD3>\r
+                       <KEYWORD3>_Mst_calcu</KEYWORD3>\r
+                       <KEYWORD3>_Mst_captr</KEYWORD3>\r
+                       <KEYWORD3>_Mst_dbase</KEYWORD3>\r
+                       <KEYWORD3>_Mst_diary</KEYWORD3>\r
+                       <KEYWORD3>_Mst_filer</KEYWORD3>\r
+                       <KEYWORD3>_Mst_help</KEYWORD3>\r
+                       <KEYWORD3>_Mst_hphow</KEYWORD3>\r
+                       <KEYWORD3>_Mst_hpsch</KEYWORD3>\r
+                       <KEYWORD3>_Mst_macro</KEYWORD3>\r
+                       <KEYWORD3>_Mst_office</KEYWORD3>\r
+                       <KEYWORD3>_Mst_puzzl</KEYWORD3>\r
+                       <KEYWORD3>_Mst_sp100</KEYWORD3>\r
+                       <KEYWORD3>_Mst_sp200</KEYWORD3>\r
+                       <KEYWORD3>_Mst_sp300</KEYWORD3>\r
+                       <KEYWORD3>_Mst_specl</KEYWORD3>\r
+                       <KEYWORD3>_Msysmenu</KEYWORD3>\r
+                       <KEYWORD3>_Msystem</KEYWORD3>\r
+                       <KEYWORD3>_Mtable</KEYWORD3>\r
+                       <KEYWORD3>_Mtb_appnd</KEYWORD3>\r
+                       <KEYWORD3>_Mtb_cpart</KEYWORD3>\r
+                       <KEYWORD3>_Mtb_delet</KEYWORD3>\r
+                       <KEYWORD3>_Mtb_delrc</KEYWORD3>\r
+                       <KEYWORD3>_Mtb_goto</KEYWORD3>\r
+                       <KEYWORD3>_Mtb_link</KEYWORD3>\r
+                       <KEYWORD3>_Mtb_mvfld</KEYWORD3>\r
+                       <KEYWORD3>_Mtb_mvprt</KEYWORD3>\r
+                       <KEYWORD3>_Mtb_props</KEYWORD3>\r
+                       <KEYWORD3>_Mtb_recal</KEYWORD3>\r
+                       <KEYWORD3>_Mtb_sp100</KEYWORD3>\r
+                       <KEYWORD3>_Mtb_sp200</KEYWORD3>\r
+                       <KEYWORD3>_Mtb_sp300</KEYWORD3>\r
+                       <KEYWORD3>_Mtb_sp400</KEYWORD3>\r
+                       <KEYWORD3>_Mtb_szfld</KEYWORD3>\r
+                       <KEYWORD3>_Mwindow</KEYWORD3>\r
+                       <KEYWORD3>_Mwizards</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_arran</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_clear</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_cmd</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_color</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_debug</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_hide</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_hidea</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_min</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_move</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_rotat</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_showa</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_size</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_sp100</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_sp200</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_toolb</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_trace</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_view</KEYWORD3>\r
+                       <KEYWORD3>_Mwi_zoom</KEYWORD3>\r
+                       <KEYWORD3>_Mwz_all</KEYWORD3>\r
+                       <KEYWORD3>_Mwz_form</KEYWORD3>\r
+                       <KEYWORD3>_Mwz_foxdoc</KEYWORD3>\r
+                       <KEYWORD3>_Mwz_import</KEYWORD3>\r
+                       <KEYWORD3>_Mwz_label</KEYWORD3>\r
+                       <KEYWORD3>_Mwz_mail</KEYWORD3>\r
+                       <KEYWORD3>_Mwz_pivot</KEYWORD3>\r
+                       <KEYWORD3>_Mwz_query</KEYWORD3>\r
+                       <KEYWORD3>_Mwz_reprt</KEYWORD3>\r
+                       <KEYWORD3>_Mwz_setup</KEYWORD3>\r
+                       <KEYWORD3>_Mwz_table</KEYWORD3>\r
+                       <KEYWORD3>_Mwz_upsizing</KEYWORD3>\r
+                       <KEYWORD3>_Netware</KEYWORD3>\r
+                       <KEYWORD3>_Oracle</KEYWORD3>\r
+                       <KEYWORD3>_Padvance</KEYWORD3>\r
+                       <KEYWORD3>_Pageno</KEYWORD3>\r
+                       <KEYWORD3>_Pbpage</KEYWORD3>\r
+                       <KEYWORD3>_Pcolno</KEYWORD3>\r
+                       <KEYWORD3>_Pcopies</KEYWORD3>\r
+                       <KEYWORD3>_Pdparms</KEYWORD3>\r
+                       <KEYWORD3>_Pdriver</KEYWORD3>\r
+                       <KEYWORD3>_Pdsetup</KEYWORD3>\r
+                       <KEYWORD3>_Pecode</KEYWORD3>\r
+                       <KEYWORD3>_Peject</KEYWORD3>\r
+                       <KEYWORD3>_Pepage</KEYWORD3>\r
+                       <KEYWORD3>_Pform</KEYWORD3>\r
+                       <KEYWORD3>_Plength</KEYWORD3>\r
+                       <KEYWORD3>_Plineno</KEYWORD3>\r
+                       <KEYWORD3>_Ploffset</KEYWORD3>\r
+                       <KEYWORD3>_Ppitch</KEYWORD3>\r
+                       <KEYWORD3>_Pquality</KEYWORD3>\r
+                       <KEYWORD3>_Pretext</KEYWORD3>\r
+                       <KEYWORD3>_Pscode</KEYWORD3>\r
+                       <KEYWORD3>_Pspacing</KEYWORD3>\r
+                       <KEYWORD3>_Pwait</KEYWORD3>\r
+                       <KEYWORD3>_Rmargin</KEYWORD3>\r
+                       <KEYWORD3>_Screen</KEYWORD3>\r
+                       <KEYWORD3>_Shell</KEYWORD3>\r
+                       <KEYWORD3>_Spellchk</KEYWORD3>\r
+                       <KEYWORD3>_Sqlserver</KEYWORD3>\r
+                       <KEYWORD3>_Startup</KEYWORD3>\r
+                       <KEYWORD3>_Tabs</KEYWORD3>\r
+                       <KEYWORD3>_Tally</KEYWORD3>\r
+                       <KEYWORD3>_Text</KEYWORD3>\r
+                       <KEYWORD3>_Throttle</KEYWORD3>\r
+                       <KEYWORD3>_Transport</KEYWORD3>\r
+                       <KEYWORD3>_Triggerlevel</KEYWORD3>\r
+                       <KEYWORD3>_Unix</KEYWORD3>\r
+                       <KEYWORD3>_Windows</KEYWORD3>\r
+                       <KEYWORD3>_Wizard</KEYWORD3>\r
+                       <KEYWORD3>_Wrap</KEYWORD3>\r
+                       <KEYWORD3>French</KEYWORD3>\r
+                       <KEYWORD3>German</KEYWORD3>\r
+                       <KEYWORD3>Italian</KEYWORD3>\r
+                       <KEYWORD3>Japan</KEYWORD3>\r
+                       <KEYWORD3>Usa</KEYWORD3>\r
+                       <KEYWORD3>Lparameter</KEYWORD3>\r
+                       <KEYWORD3>This</KEYWORD3>\r
+                       <KEYWORD3>Thisform</KEYWORD3>\r
+                       <KEYWORD3>Thisformset</KEYWORD3>\r
+                       <KEYWORD3>F</KEYWORD3>\r
+                       <KEYWORD3>T</KEYWORD3>\r
+                       <KEYWORD3>N</KEYWORD3>\r
+                       <KEYWORD3>Y</KEYWORD3>\r
+                       <KEYWORD3>OlePublic</KEYWORD3>\r
+                       <KEYWORD3>Hidden</KEYWORD3>\r
+                       <KEYWORD3>Each</KEYWORD3>\r
+                       <KEYWORD3>DoEvents</KEYWORD3>\r
+                       <KEYWORD3>Dll</KEYWORD3>\r
+                       <KEYWORD3>Outer</KEYWORD3>\r
+                       <KEYWORD3>At_c</KEYWORD3>\r
+                       <KEYWORD3>Atcc</KEYWORD3>\r
+                       <KEYWORD3>Ratc</KEYWORD3>\r
+                       <KEYWORD3>Leftc</KEYWORD3>\r
+                       <KEYWORD3>Rightc</KEYWORD3>\r
+                       <KEYWORD3>Substrc</KEYWORD3>\r
+                       <KEYWORD3>Stuffc</KEYWORD3>\r
+                       <KEYWORD3>Lenc</KEYWORD3>\r
+                       <KEYWORD3>Chrtranc</KEYWORD3>\r
+                       <KEYWORD3>IsLeadByte</KEYWORD3>\r
+                       <KEYWORD3>IMEStatus</KEYWORD3>\r
+                       <KEYWORD3>Strconv</KEYWORD3>\r
+                       <KEYWORD3>BinToC</KEYWORD3>\r
+                       <KEYWORD3>CToBin</KEYWORD3>\r
+                       <KEYWORD3>IsFLocked</KEYWORD3>\r
+                       <KEYWORD3>IsRLocked</KEYWORD3>\r
+                       <KEYWORD3>LoadPicture</KEYWORD3>\r
+                       <KEYWORD3>SavePicture</KEYWORD3>\r
+                       <KEYWORD3>Assert</KEYWORD3>\r
+                       <KEYWORD3>DoDefault</KEYWORD3>\r
+                       <KEYWORD3>_WebMenu</KEYWORD3>\r
+                       <KEYWORD3>_scctext</KEYWORD3>\r
+                       <KEYWORD3>_WebVFPHomePage</KEYWORD3>\r
+                       <KEYWORD3>_WebVfpOnlineSupport</KEYWORD3>\r
+                       <KEYWORD3>_WebDevOnly</KEYWORD3>\r
+                       <KEYWORD3>_WebMsftHomePage</KEYWORD3>\r
+                       <KEYWORD3>_Coverage</KEYWORD3>\r
+                       <KEYWORD3>_vfp</KEYWORD3>\r
+                       <KEYWORD3>Bintoc</KEYWORD3>\r
+                       <KEYWORD3>Resources</KEYWORD3>\r
+                       <KEYWORD3>Ctobin</KEYWORD3>\r
+                       <KEYWORD3>Createoffline</KEYWORD3>\r
+                       <KEYWORD3>Debugout</KEYWORD3>\r
+                       <KEYWORD3>Doevents</KEYWORD3>\r
+                       <KEYWORD3>Dropoffline</KEYWORD3>\r
+                       <KEYWORD3>Each</KEYWORD3>\r
+                       <KEYWORD3>Isflocked</KEYWORD3>\r
+                       <KEYWORD3>Isrlocked</KEYWORD3>\r
+                       <KEYWORD3>Loadpicture</KEYWORD3>\r
+                       <KEYWORD3>Revertoffline</KEYWORD3>\r
+                       <KEYWORD3>Savepicture</KEYWORD3>\r
+                       <KEYWORD3>Asserts</KEYWORD3>\r
+                       <KEYWORD3>Coverage</KEYWORD3>\r
+                       <KEYWORD3>Eventtracking</KEYWORD3>\r
+                       <KEYWORD3>DBGetProp</KEYWORD3>\r
+                       <KEYWORD3>DBSetProp</KEYWORD3>\r
+                       <KEYWORD3>CursorGetProp</KEYWORD3>\r
+                       <KEYWORD3>CursorSetProp</KEYWORD3>\r
+                       <KEYWORD3>Addbs</KEYWORD3>\r
+                       <KEYWORD3>Agetclass</KEYWORD3>\r
+                       <KEYWORD3>Agetfileversion</KEYWORD3>\r
+                       <KEYWORD3>Alines</KEYWORD3>\r
+                       <KEYWORD3>Amouseobj</KEYWORD3>\r
+                       <KEYWORD3>Anetresources</KEYWORD3>\r
+                       <KEYWORD3>Avcxclasses</KEYWORD3>\r
+                       <KEYWORD3>Comclassinfo</KEYWORD3>\r
+                       <KEYWORD3>Createobjectex</KEYWORD3>\r
+                       <KEYWORD3>Defaultext</KEYWORD3>\r
+                       <KEYWORD3>Drivetype</KEYWORD3>\r
+                       <KEYWORD3>Filetostr</KEYWORD3>\r
+                       <KEYWORD3>Forceext</KEYWORD3>\r
+                       <KEYWORD3>Forcepath</KEYWORD3>\r
+                       <KEYWORD3>Gethost</KEYWORD3>\r
+                       <KEYWORD3>Indexseek</KEYWORD3>\r
+                       <KEYWORD3>Ishosted</KEYWORD3>\r
+                       <KEYWORD3>Justdrive</KEYWORD3>\r
+                       <KEYWORD3>Justext</KEYWORD3>\r
+                       <KEYWORD3>Justfname</KEYWORD3>\r
+                       <KEYWORD3>Justpath</KEYWORD3>\r
+                       <KEYWORD3>Juststem</KEYWORD3>\r
+                       <KEYWORD3>Newobject</KEYWORD3>\r
+                       <KEYWORD3>Olereturnerror</KEYWORD3>\r
+                       <KEYWORD3>Strtofile</KEYWORD3>\r
+                       <KEYWORD3>Vartype</KEYWORD3>\r
+                       <KEYWORD3>_Coverage</KEYWORD3>\r
+                       <KEYWORD3>_Gallery</KEYWORD3>\r
+                       <KEYWORD3>_Genhtml</KEYWORD3>\r
+                       <KEYWORD3>_Getexpr</KEYWORD3>\r
+                       <KEYWORD3>_Include</KEYWORD3>\r
+                       <KEYWORD3>_Runactivedoc</KEYWORD3>\r
+                       <KEYWORD3>ProjectHook</KEYWORD3>\r
+                       <KEYWORD3>ActiveDoc</KEYWORD3>\r
+                       <KEYWORD3>HyperLink</KEYWORD3>\r
+                       <KEYWORD3>Session</KEYWORD3>\r
+                       <KEYWORD3>Mtdll</KEYWORD3>\r
+\r
+                       <!-- New in Visual Foxpro 8.0 -->\r
+                       <KEYWORD3>ADOCKTIP</KEYWORD3>\r
+                       <KEYWORD3>ADirtip</KEYWORD3>\r
+                       <KEYWORD3>ADockState</KEYWORD3>\r
+                       <KEYWORD3>AEvents</KEYWORD3>\r
+                       <KEYWORD3>AFONTTIP</KEYWORD3>\r
+                       <KEYWORD3>ALanguage</KEYWORD3>\r
+                       <KEYWORD3>AProcInfo</KEYWORD3>\r
+                       <KEYWORD3>AStackInfo</KEYWORD3>\r
+                       <KEYWORD3>ATagInfo</KEYWORD3>\r
+                       <KEYWORD3>Adlls</KEYWORD3>\r
+                       <KEYWORD3>Alentip</KEYWORD3>\r
+                       <KEYWORD3>Amemberstip</KEYWORD3>\r
+                       <KEYWORD3>Amemberstip2</KEYWORD3>\r
+                       <KEYWORD3>Ascantip</KEYWORD3>\r
+                       <KEYWORD3>Aselobjtip</KEYWORD3>\r
+                       <KEYWORD3>Asessions</KEYWORD3>\r
+                       <KEYWORD3>Asorttip</KEYWORD3>\r
+                       <KEYWORD3>Asorttip2</KEYWORD3>\r
+                       <KEYWORD3>BINDEVENTTIP</KEYWORD3>\r
+                       <KEYWORD3>BindEvent</KEYWORD3>\r
+                       <KEYWORD3>COMARRAYTIP</KEYWORD3>\r
+                       <KEYWORD3>COMPROPTIP</KEYWORD3>\r
+                       <KEYWORD3>Candidate</KEYWORD3>\r
+                       <KEYWORD3>Cdx</KEYWORD3>\r
+                       <KEYWORD3>ComArray</KEYWORD3>\r
+                       <KEYWORD3>ComReturnError</KEYWORD3>\r
+                       <KEYWORD3>Comprop</KEYWORD3>\r
+                       <KEYWORD3>CreateBinary</KEYWORD3>\r
+                       <KEYWORD3>CursorToXML</KEYWORD3>\r
+                       <KEYWORD3>DIRTIP</KEYWORD3>\r
+                       <KEYWORD3>Descending</KEYWORD3>\r
+                       <KEYWORD3>DisplayPath</KEYWORD3>\r
+                       <KEYWORD3>EditSource</KEYWORD3>\r
+                       <KEYWORD3>EventHandler</KEYWORD3>\r
+                       <KEYWORD3>Evl</KEYWORD3>\r
+                       <KEYWORD3>ExecScript</KEYWORD3>\r
+                       <KEYWORD3>FCREATETIP</KEYWORD3>\r
+                       <KEYWORD3>FIELDTIP</KEYWORD3>\r
+                       <KEYWORD3>FILETIP</KEYWORD3>\r
+                       <KEYWORD3>FOPENTIP</KEYWORD3>\r
+                       <KEYWORD3>FSEEKTIP</KEYWORD3>\r
+                       <KEYWORD3>Fdate</KEYWORD3>\r
+                       <KEYWORD3>Ftime</KEYWORD3>\r
+                       <KEYWORD3>GetCursorAdapter</KEYWORD3>\r
+                       <KEYWORD3>GetInterface</KEYWORD3>\r
+                       <KEYWORD3>GetPem</KEYWORD3>\r
+                       <KEYWORD3>GetWordCount</KEYWORD3>\r
+                       <KEYWORD3>GetWordNum</KEYWORD3>\r
+                       <KEYWORD3>InputBox</KEYWORD3>\r
+                       <KEYWORD3>IsBlank</KEYWORD3>\r
+                       <KEYWORD3>IsMouse</KEYWORD3>\r
+                       <KEYWORD3>Like</KEYWORD3>\r
+                       <KEYWORD3>Likec</KEYWORD3>\r
+                       <KEYWORD3>Memory</KEYWORD3>\r
+                       <KEYWORD3>Msgboxtip</KEYWORD3>\r
+                       <KEYWORD3>Pcount</KEYWORD3>\r
+                       <KEYWORD3>PemStatus</KEYWORD3>\r
+                       <KEYWORD3>Popup</KEYWORD3>\r
+                       <KEYWORD3>Quarter</KEYWORD3>\r
+                       <KEYWORD3>RaiseEvent</KEYWORD3>\r
+                       <KEYWORD3>RemoveProperty</KEYWORD3>\r
+                       <KEYWORD3>SQLCancel</KEYWORD3>\r
+                       <KEYWORD3>SQLColumns</KEYWORD3>\r
+                       <KEYWORD3>SQLDisconnect</KEYWORD3>\r
+                       <KEYWORD3>SQLExec</KEYWORD3>\r
+                       <KEYWORD3>SQLGetProp</KEYWORD3>\r
+                       <KEYWORD3>SQLMoreResults</KEYWORD3>\r
+                       <KEYWORD3>SQLPrepare</KEYWORD3>\r
+                       <KEYWORD3>SQLSetProp</KEYWORD3>\r
+                       <KEYWORD3>SQLTables</KEYWORD3>\r
+                       <KEYWORD3>STRTOFILETIP</KEYWORD3>\r
+                       <KEYWORD3>Seconds</KEYWORD3>\r
+                       <KEYWORD3>StrExTip</KEYWORD3>\r
+                       <KEYWORD3>StrExtract</KEYWORD3>\r
+                       <KEYWORD3>Strtrantip</KEYWORD3>\r
+                       <KEYWORD3>Tagcount</KEYWORD3>\r
+                       <KEYWORD3>Tagno</KEYWORD3>\r
+                       <KEYWORD3>Textmerge</KEYWORD3>\r
+                       <KEYWORD3>Try</KEYWORD3>\r
+                       <KEYWORD3>UnBindEvents</KEYWORD3>\r
+                       <KEYWORD3>WDockable</KEYWORD3>\r
+                       <KEYWORD3>XMLTIP</KEYWORD3>\r
+                       <KEYWORD3>XMLTIP2</KEYWORD3>\r
+                       <KEYWORD3>XMLTIP3</KEYWORD3>\r
+                       <KEYWORD3>XMLTIP4</KEYWORD3>\r
+                       <KEYWORD3>XMLTIP5</KEYWORD3>\r
+                       <KEYWORD3>XMLTIP6</KEYWORD3>\r
+                       <KEYWORD3>XMLToCursor</KEYWORD3>\r
+                       <KEYWORD3>XMLUpdategram</KEYWORD3>\r
+                       <KEYWORD3>Blank</KEYWORD3>\r
+                       <KEYWORD3>Catch</KEYWORD3>\r
+                       <KEYWORD3>Dotip</KEYWORD3>\r
+                       <KEYWORD3>EndTry</KEYWORD3>\r
+                       <KEYWORD3>Finally</KEYWORD3>\r
+                       <KEYWORD3>Implements</KEYWORD3>\r
+                       <KEYWORD3>Opendatatip</KEYWORD3>\r
+                       <KEYWORD3>Repltip</KEYWORD3>\r
+                       <KEYWORD3>Throw</KEYWORD3>\r
+                       <KEYWORD3>Usetip</KEYWORD3>\r
+\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/freemarker.xml b/extra/xmode/modes/freemarker.xml
new file mode 100644 (file)
index 0000000..065e5f9
--- /dev/null
@@ -0,0 +1,205 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- A JEdit mode configuration file for FTL (FreeMarker Template Language)\r
+     Note that this version will only work with JEdit 4.1pre6 or later.\r
+     by Jonathan Revusky, revusky@users.sourceforge.net -->\r
+\r
+<MODE>\r
+  <RULES IGNORE_CASE="FALSE">\r
+\r
+    <!-- JavaScript -->\r
+    <SPAN TYPE="MARKUP" DELEGATE="html::JAVASCRIPT">\r
+    <BEGIN>&lt;script</BEGIN>\r
+    <END>&lt;/script&gt;</END>\r
+    </SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="html::JAVASCRIPT">\r
+    <BEGIN>&lt;Script</BEGIN>\r
+    <END>&lt;/Script&gt;</END>\r
+    </SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="html::JAVASCRIPT">\r
+    <BEGIN>&lt;SCRIPT</BEGIN>\r
+    <END>&lt;/SCRIPT&gt;</END>\r
+    </SPAN>\r
+\r
+    <!-- stylesheet -->\r
+    <SPAN TYPE="MARKUP" DELEGATE="html::CSS">\r
+    <BEGIN>&lt;style</BEGIN>\r
+    <END>&lt;/style&gt;</END>\r
+    </SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="html::CSS">\r
+    <BEGIN>&lt;Style</BEGIN>\r
+    <END>&lt;/Style&gt;</END>\r
+    </SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="html::CSS">\r
+    <BEGIN>&lt;STYLE</BEGIN>\r
+    <END>&lt;/STYLE&gt;</END>\r
+    </SPAN>\r
+\r
+    <!-- XML/HTML comment -->\r
+    <SPAN TYPE="COMMENT2" DELEGATE="xml::DTD-TAGS">\r
+    <BEGIN>&lt;!--</BEGIN>\r
+    <END>--&gt;</END>\r
+    </SPAN>\r
+\r
+    <!-- DTD instructions -->\r
+    <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">\r
+    <BEGIN>&lt;!</BEGIN>\r
+    <END>&gt;</END>\r
+    </SPAN>\r
+\r
+    <!-- FTL markup starts here. -->\r
+\r
+    <SPAN TYPE="KEYWORD1" DELEGATE="EXPRESSION">\r
+      <BEGIN>${</BEGIN>\r
+      <END>}</END>\r
+    </SPAN>\r
+\r
+    <SPAN TYPE="KEYWORD1" DELEGATE="EXPRESSION">\r
+      <BEGIN>#{</BEGIN>\r
+      <END>}</END>\r
+    </SPAN>\r
+\r
+    <SPAN_REGEXP TYPE="KEYWORD1" HASH_CHAR="&lt;#ftl" DELEGATE="EXPRESSION">\r
+      <BEGIN>&lt;#ftl\b</BEGIN>\r
+      <END>&gt;</END>\r
+    </SPAN_REGEXP>\r
+\r
+    <SPAN_REGEXP TYPE="KEYWORD1" DELEGATE="EXPRESSION" HASH_CHAR="&lt;">\r
+      <BEGIN>&lt;#?(if|elseif|switch|foreach|list|case|assign|local|global|setting|include|import|stop|escape|macro|function|transform|call|visit|recurse)(\s|/|$)</BEGIN>\r
+      <END>&gt;</END>\r
+    </SPAN_REGEXP>\r
+\r
+    <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="&lt;/"\r
+       >&lt;/#?(assign|local|global|if|switch|foreach|list|escape|macro|function|transform|compress|noescape)&gt;</SEQ_REGEXP>\r
+\r
+    <SPAN_REGEXP TYPE="KEYWORD1" DELEGATE="INVALID" HASH_CHAR="&lt;">\r
+      <BEGIN>&lt;#?(else|compress|noescape|default|break|flush|nested|t|rt|lt|return|recurse)\b</BEGIN>\r
+      <END>&gt;</END>\r
+    </SPAN_REGEXP>\r
+\r
+    <SPAN_REGEXP TYPE="KEYWORD1" DELEGATE="INVALID" HASH_CHAR="&lt;/@">\r
+      <BEGIN>&lt;/@(([_@\p{Alpha}][_@\p{Alnum}]*)(\.[_@\p{Alpha}][_@\p{Alnum}]*)*?)?</BEGIN>\r
+      <END>&gt;</END>\r
+    </SPAN_REGEXP>\r
+\r
+    <SPAN_REGEXP TYPE="KEYWORD1" DELEGATE="EXPRESSION" HASH_CHAR="&lt;@">\r
+      <BEGIN>&lt;@([_@\p{Alpha}][_@\p{Alnum}]*)(\.[_@\p{Alpha}][_@\p{Alnum}]*?)*</BEGIN>\r
+      <END>&gt;</END>\r
+    </SPAN_REGEXP>\r
+\r
+    <SPAN TYPE="COMMENT1">\r
+      <BEGIN>&lt;#--</BEGIN>\r
+      <END>--&gt;</END>\r
+    </SPAN>\r
+\r
+    <SEQ TYPE="KEYWORD1">&lt;stop&gt;</SEQ>\r
+     <SPAN TYPE="COMMENT1">\r
+    <BEGIN>&lt;comment&gt;</BEGIN>\r
+    <END>&lt;/comment&gt;</END>\r
+    </SPAN>\r
+    <SPAN TYPE="INVALID">\r
+      <BEGIN>&lt;#</BEGIN>\r
+      <END>&gt;</END>\r
+    </SPAN>\r
+    <SPAN TYPE="INVALID">\r
+      <BEGIN>&lt;/#</BEGIN>\r
+      <END>&gt;</END>\r
+    </SPAN>\r
+\r
+    <!-- non-FTL markup -->\r
+    <SPAN TYPE="MARKUP" DELEGATE="TAGS">\r
+    <BEGIN>&lt;</BEGIN>\r
+    <END>&gt;</END>\r
+    </SPAN>\r
+  </RULES>\r
+\r
+  <RULES SET="EXPRESSION"\r
+      DEFAULT="KEYWORD2"\r
+      HIGHLIGHT_DIGITS="TRUE"\r
+      ESCAPE="\"\r
+      IGNORE_CASE="FALSE"\r
+    >\r
+    <SPAN TYPE="COMMENT1">\r
+      <BEGIN>&lt;#--</BEGIN>\r
+      <END>--&gt;</END>\r
+    </SPAN>\r
+    <SPAN TYPE="COMMENT1">\r
+      <BEGIN>&lt;!--</BEGIN>\r
+      <END>--&gt;</END>\r
+    </SPAN>\r
+\r
+    <SPAN TYPE="LITERAL1">\r
+    <BEGIN>"</BEGIN>\r
+    <END>"</END>\r
+    </SPAN>\r
+    <SPAN TYPE="OPERATOR" DELEGATE="EXPRESSION">\r
+      <BEGIN>(</BEGIN><END>)</END>\r
+    </SPAN>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">!</SEQ>\r
+    <SEQ TYPE="OPERATOR">|</SEQ>\r
+    <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+    <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">*</SEQ>\r
+    <SEQ TYPE="OPERATOR">/</SEQ>\r
+    <SEQ TYPE="OPERATOR">-</SEQ>\r
+    <SEQ TYPE="OPERATOR">+</SEQ>\r
+    <SEQ TYPE="OPERATOR">%</SEQ>\r
+    <SEQ TYPE="OPERATOR">.</SEQ>\r
+    <SEQ TYPE="OPERATOR">:</SEQ>\r
+    <SEQ TYPE="OPERATOR">.</SEQ>\r
+    <SEQ TYPE="OPERATOR">.</SEQ>\r
+    <SEQ TYPE="OPERATOR">[</SEQ>\r
+    <SEQ TYPE="OPERATOR">]</SEQ>\r
+    <SEQ TYPE="OPERATOR">{</SEQ>\r
+    <SEQ TYPE="OPERATOR">}</SEQ>\r
+    <SEQ TYPE="OPERATOR">;</SEQ>\r
+    <!-- Builtins -->\r
+    <MARK_FOLLOWING TYPE="FUNCTION">?</MARK_FOLLOWING>\r
+    <KEYWORDS>\r
+      <KEYWORD1>true</KEYWORD1>\r
+      <KEYWORD1>false</KEYWORD1>\r
+      <KEYWORD1>as</KEYWORD1>\r
+      <KEYWORD1>in</KEYWORD1>\r
+      <KEYWORD1>using</KEYWORD1>\r
+      <OPERATOR>gt</OPERATOR>\r
+      <OPERATOR>gte</OPERATOR>\r
+      <OPERATOR>lt</OPERATOR>\r
+      <OPERATOR>lte</OPERATOR>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+  <RULES SET="TAGS" DEFAULT="MARKUP" ESCAPE="\">\r
+    <SPAN TYPE="LITERAL1" DELEGATE="INQUOTE">\r
+    <BEGIN>"</BEGIN>\r
+    <END>"</END>\r
+    </SPAN>\r
+\r
+    <SPAN TYPE="LITERAL1" DELEGATE="INQUOTE">\r
+    <BEGIN>'</BEGIN>\r
+    <END>'</END>\r
+    </SPAN>\r
+\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+  </RULES>\r
+\r
+\r
+  <!-- a ruleset for when we are within a quoted string within an SGML tag\r
+       It can contain FTL interpolations -->\r
+  <RULES SET="INQUOTE">\r
+    <SPAN TYPE="KEYWORD1" DELEGATE="EXPRESSION">\r
+    <BEGIN>${</BEGIN>\r
+    <END>}</END>\r
+    </SPAN>\r
+    <SPAN TYPE="KEYWORD1" DELEGATE="EXPRESSION">\r
+    <BEGIN>#{</BEGIN>\r
+    <END>}</END>\r
+    </SPAN>\r
+  </RULES>\r
+\r
+  <!-- empty ruleset to delegate to for spots where any non-whitespace is invalid -->\r
+  <RULES SET="INVALID" DEFAULT="INVALID" />\r
+</MODE>\r
diff --git a/extra/xmode/modes/gettext.xml b/extra/xmode/modes/gettext.xml
new file mode 100644 (file)
index 0000000..b84e7c4
--- /dev/null
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+<!--\r
+       ** jEdit edit mode for gettext catalogs (.po/.pot extension)\r
+       ** Use the ConfigurableFoldHandler plugin for optimal\r
+       ** results. =)\r
+-->\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="# " />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- Comments -->\r
+               <EOL_SPAN TYPE="COMMENT2">#:</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1"># </EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT2">#.</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT2">#~</EOL_SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="COMMENT2">#,</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD3">%</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD3">$</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD3">@</MARK_FOLLOWING>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="QUOTED" >\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- keywords -->\r
+               <KEYWORDS>\r
+                       <KEYWORD1>msgid</KEYWORD1>\r
+                       <KEYWORD1>msgid_plural</KEYWORD1>\r
+                       <KEYWORD1>msgstr</KEYWORD1>\r
+                       <KEYWORD2>fuzzy</KEYWORD2>\r
+<!--           ** Ideally, we'd highlight the next msgstr differently\r
+                       ** whenever fuzzy is encountered, but this doesn't seem\r
+                       ** to be possible just yet.\r
+-->\r
+                       <KEYWORD2>c-format</KEYWORD2>\r
+                       <KEYWORD2>no-c-format</KEYWORD2>\r
+               </KEYWORDS>\r
+\r
+       </RULES>\r
+\r
+       <RULES SET="QUOTED" DEFAULT="LITERAL1">\r
+               <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>\"</BEGIN>\r
+                       <END>\"</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD3">%</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD3">$</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD3">@</MARK_FOLLOWING>\r
+       </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/gnuplot.xml b/extra/xmode/modes/gnuplot.xml
new file mode 100644 (file)
index 0000000..f66a169
--- /dev/null
@@ -0,0 +1,270 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- COBOL mode, by Loren Charnley III -->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+       </PROPS>\r
+\r
+       <RULES ESCAPE="\"  IGNORE_CASE="FALSE">\r
+\r
+       <!-- Comments -->\r
+       <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+       <!-- Literals -->\r
+       <SPAN TYPE="LITERAL1">\r
+               <BEGIN>"</BEGIN>\r
+               <END>"</END>\r
+       </SPAN>\r
+       <SPAN TYPE="LITERAL2">\r
+               <BEGIN>'</BEGIN>\r
+               <END>'</END>\r
+       </SPAN>\r
+\r
+       <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE">\r
+               <BEGIN>[</BEGIN>\r
+               <END>]</END>\r
+       </SPAN>\r
+\r
+       <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE">\r
+               <BEGIN>{</BEGIN>\r
+               <END>}</END>\r
+       </SPAN>\r
+\r
+       <!-- Operators -->\r
+       <SEQ TYPE="OPERATOR">-</SEQ>\r
+       <SEQ TYPE="OPERATOR">+</SEQ>\r
+       <SEQ TYPE="OPERATOR">~</SEQ>\r
+       <SEQ TYPE="OPERATOR">!</SEQ>\r
+       <SEQ TYPE="OPERATOR">$</SEQ>\r
+       <SEQ TYPE="OPERATOR">*</SEQ>\r
+       <SEQ TYPE="OPERATOR">%</SEQ>\r
+       <SEQ TYPE="OPERATOR">=</SEQ>\r
+       <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+       <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+       <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+       <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+       <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+       <SEQ TYPE="OPERATOR">|</SEQ>\r
+       <SEQ TYPE="OPERATOR">^</SEQ>\r
+       <SEQ TYPE="OPERATOR">?</SEQ>\r
+       <SEQ TYPE="OPERATOR">:</SEQ>\r
+\r
+       <!-- Function calls -->\r
+       <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+       <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+\r
+       <!-- Keywords -->\r
+       <KEYWORDS>\r
+\r
+               <!-- GNUplot Commands -->\r
+               <KEYWORD1>cd</KEYWORD1>\r
+               <KEYWORD1>call</KEYWORD1>\r
+               <KEYWORD1>clear</KEYWORD1>\r
+               <KEYWORD1>exit</KEYWORD1>\r
+               <KEYWORD1>fit</KEYWORD1>\r
+               <KEYWORD1>help</KEYWORD1>\r
+               <KEYWORD1>history</KEYWORD1>\r
+               <KEYWORD1>if</KEYWORD1>\r
+               <KEYWORD1>load</KEYWORD1>\r
+               <KEYWORD1>pause</KEYWORD1>\r
+               <KEYWORD1>plot</KEYWORD1>\r
+                       <KEYWORD1>using</KEYWORD1>\r
+                       <KEYWORD1>with</KEYWORD1>\r
+                       <KEYWORD1>index</KEYWORD1>\r
+                       <KEYWORD1>every</KEYWORD1>\r
+                       <KEYWORD1>smooth</KEYWORD1>\r
+                       <KEYWORD1>thru</KEYWORD1>\r
+               <KEYWORD1>print</KEYWORD1>\r
+               <KEYWORD1>pwd</KEYWORD1>\r
+               <KEYWORD1>quit</KEYWORD1>\r
+               <KEYWORD1>replot</KEYWORD1>\r
+               <KEYWORD1>reread</KEYWORD1>\r
+               <KEYWORD1>reset</KEYWORD1>\r
+               <KEYWORD1>save</KEYWORD1>\r
+               <KEYWORD1>set</KEYWORD1>\r
+               <KEYWORD1>show</KEYWORD1>\r
+               <KEYWORD1>unset</KEYWORD1>\r
+               <KEYWORD1>shell</KEYWORD1>\r
+               <KEYWORD1>splot</KEYWORD1>\r
+               <KEYWORD1>system</KEYWORD1>\r
+               <KEYWORD1>test</KEYWORD1>\r
+               <KEYWORD1>unset</KEYWORD1>\r
+               <KEYWORD1>update</KEYWORD1>\r
+\r
+               <!-- GNUplot Functions -->\r
+               <KEYWORD2>abs</KEYWORD2>\r
+               <KEYWORD2>acos</KEYWORD2>\r
+               <KEYWORD2>acosh</KEYWORD2>\r
+               <KEYWORD2>arg</KEYWORD2>\r
+               <KEYWORD2>asin</KEYWORD2>\r
+               <KEYWORD2>asinh</KEYWORD2>\r
+               <KEYWORD2>atan</KEYWORD2>\r
+               <KEYWORD2>atan2</KEYWORD2>\r
+               <KEYWORD2>atanh</KEYWORD2>\r
+               <KEYWORD2>besj0</KEYWORD2>\r
+               <KEYWORD2>besj1</KEYWORD2>\r
+               <KEYWORD2>besy0</KEYWORD2>\r
+               <KEYWORD2>besy1</KEYWORD2>\r
+               <KEYWORD2>ceil</KEYWORD2>\r
+               <KEYWORD2>cos</KEYWORD2>\r
+               <KEYWORD2>cosh</KEYWORD2>\r
+               <KEYWORD2>erf</KEYWORD2>\r
+               <KEYWORD2>erfc</KEYWORD2>\r
+               <KEYWORD2>exp</KEYWORD2>\r
+               <KEYWORD2>floor</KEYWORD2>\r
+               <KEYWORD2>gamma</KEYWORD2>\r
+               <KEYWORD2>ibeta</KEYWORD2>\r
+               <KEYWORD2>inverf</KEYWORD2>\r
+               <KEYWORD2>igamma</KEYWORD2>\r
+               <KEYWORD2>imag</KEYWORD2>\r
+               <KEYWORD2>invnorm</KEYWORD2>\r
+               <KEYWORD2>int</KEYWORD2>\r
+               <KEYWORD2>lambertw</KEYWORD2>\r
+               <KEYWORD2>lgamma</KEYWORD2>\r
+               <KEYWORD2>log</KEYWORD2>\r
+               <KEYWORD2>log10</KEYWORD2>\r
+               <KEYWORD2>norm</KEYWORD2>\r
+               <KEYWORD2>rand</KEYWORD2>\r
+               <KEYWORD2>real</KEYWORD2>\r
+               <KEYWORD2>sgn</KEYWORD2>\r
+               <KEYWORD2>sin</KEYWORD2>\r
+               <KEYWORD2>sinh</KEYWORD2>\r
+               <KEYWORD2>sqrt</KEYWORD2>\r
+               <KEYWORD2>tan</KEYWORD2>\r
+               <KEYWORD2>tanh</KEYWORD2>\r
+               <KEYWORD2>column</KEYWORD2>\r
+               <KEYWORD2>defined</KEYWORD2>\r
+               <KEYWORD2>tm_hour</KEYWORD2>\r
+               <KEYWORD2>tm_mday</KEYWORD2>\r
+               <KEYWORD2>tm_min</KEYWORD2>\r
+               <KEYWORD2>tm_mon</KEYWORD2>\r
+               <KEYWORD2>tm_sec</KEYWORD2>\r
+               <KEYWORD2>tm_wday</KEYWORD2>\r
+               <KEYWORD2>tm_yday</KEYWORD2>\r
+               <KEYWORD2>tm_year</KEYWORD2>\r
+               <KEYWORD2>valid</KEYWORD2>\r
+\r
+               <!-- GNUplot Built-in Variables -->\r
+               <KEYWORD3>angles</KEYWORD3>\r
+               <KEYWORD3>arrow</KEYWORD3>\r
+               <KEYWORD3>autoscale</KEYWORD3>\r
+               <KEYWORD3>bars</KEYWORD3>\r
+               <KEYWORD3>bmargin</KEYWORD3>\r
+               <KEYWORD3>border</KEYWORD3>\r
+               <KEYWORD3>boxwidth</KEYWORD3>\r
+               <KEYWORD3>clabel</KEYWORD3>\r
+               <KEYWORD3>clip</KEYWORD3>\r
+               <KEYWORD3>cntrparam</KEYWORD3>\r
+               <KEYWORD3>colorbox</KEYWORD3>\r
+               <KEYWORD3>contour</KEYWORD3>\r
+               <KEYWORD3>datafile </KEYWORD3>\r
+               <KEYWORD3>decimalsign</KEYWORD3>\r
+               <KEYWORD3>dgrid3d</KEYWORD3>\r
+               <KEYWORD3>dummy</KEYWORD3>\r
+               <KEYWORD3>encoding</KEYWORD3>\r
+               <KEYWORD3>fit</KEYWORD3>\r
+               <KEYWORD3>fontpath</KEYWORD3>\r
+               <KEYWORD3>format</KEYWORD3>\r
+               <KEYWORD3>functions</KEYWORD3>\r
+               <KEYWORD3>function</KEYWORD3>\r
+               <KEYWORD3>grid</KEYWORD3>\r
+               <KEYWORD3>hidden3d</KEYWORD3>\r
+               <KEYWORD3>historysize</KEYWORD3>\r
+               <KEYWORD3>isosamples</KEYWORD3>\r
+               <KEYWORD3>key</KEYWORD3>\r
+               <KEYWORD3>label</KEYWORD3>\r
+               <KEYWORD3>lmargin</KEYWORD3>\r
+               <KEYWORD3>loadpath</KEYWORD3>\r
+               <KEYWORD3>locale</KEYWORD3>\r
+               <KEYWORD3>logscale</KEYWORD3>\r
+               <KEYWORD3>mapping</KEYWORD3>\r
+               <KEYWORD3>margin</KEYWORD3>\r
+               <KEYWORD3>mouse</KEYWORD3>\r
+               <KEYWORD3>multiplot</KEYWORD3>\r
+               <KEYWORD3>mx2tics</KEYWORD3>\r
+               <KEYWORD3>mxtics</KEYWORD3>\r
+               <KEYWORD3>my2tics</KEYWORD3>\r
+               <KEYWORD3>mytics</KEYWORD3>\r
+               <KEYWORD3>mztics</KEYWORD3>\r
+               <KEYWORD3>offsets</KEYWORD3>\r
+               <KEYWORD3>origin</KEYWORD3>\r
+               <KEYWORD3>output</KEYWORD3>\r
+               <KEYWORD3>parametric</KEYWORD3>\r
+               <KEYWORD3>plot</KEYWORD3>\r
+               <KEYWORD3>pm3d</KEYWORD3>\r
+               <KEYWORD3>palette</KEYWORD3>\r
+               <KEYWORD3>pointsize</KEYWORD3>\r
+               <KEYWORD3>polar</KEYWORD3>\r
+               <KEYWORD3>print</KEYWORD3>\r
+               <KEYWORD3>rmargin</KEYWORD3>\r
+               <KEYWORD3>rrange</KEYWORD3>\r
+               <KEYWORD3>samples</KEYWORD3>\r
+               <KEYWORD3>size</KEYWORD3>\r
+               <KEYWORD3>style</KEYWORD3>\r
+               <KEYWORD3>surface</KEYWORD3>\r
+               <KEYWORD3>terminal</KEYWORD3>\r
+               <KEYWORD3>tics</KEYWORD3>\r
+               <KEYWORD3>ticslevel</KEYWORD3>\r
+               <KEYWORD3>ticscale</KEYWORD3>\r
+               <KEYWORD3>timestamp</KEYWORD3>\r
+               <KEYWORD3>timefmt</KEYWORD3>\r
+               <KEYWORD3>title</KEYWORD3>\r
+               <KEYWORD3>tmargin</KEYWORD3>\r
+               <KEYWORD3>trange</KEYWORD3>\r
+               <KEYWORD3>urange</KEYWORD3>\r
+               <KEYWORD3>variables</KEYWORD3>\r
+               <KEYWORD3>version</KEYWORD3>\r
+               <KEYWORD3>view</KEYWORD3>\r
+               <KEYWORD3>vrange</KEYWORD3>\r
+               <KEYWORD3>x2data</KEYWORD3>\r
+               <KEYWORD3>x2dtics</KEYWORD3>\r
+               <KEYWORD3>x2label</KEYWORD3>\r
+               <KEYWORD3>x2mtics</KEYWORD3>\r
+               <KEYWORD3>x2range</KEYWORD3>\r
+               <KEYWORD3>x2tics</KEYWORD3>\r
+               <KEYWORD3>x2zeroaxis</KEYWORD3>\r
+               <KEYWORD3>xdata</KEYWORD3>\r
+               <KEYWORD3>xdtics</KEYWORD3>\r
+               <KEYWORD3>xlabel</KEYWORD3>\r
+               <KEYWORD3>xmtics</KEYWORD3>\r
+               <KEYWORD3>xrange</KEYWORD3>\r
+               <KEYWORD3>xtics</KEYWORD3>\r
+               <KEYWORD3>xzeroaxis</KEYWORD3>\r
+               <KEYWORD3>y2data</KEYWORD3>\r
+               <KEYWORD3>y2dtics</KEYWORD3>\r
+               <KEYWORD3>y2label</KEYWORD3>\r
+               <KEYWORD3>y2mtics</KEYWORD3>\r
+               <KEYWORD3>y2range</KEYWORD3>\r
+               <KEYWORD3>y2tics</KEYWORD3>\r
+               <KEYWORD3>y2zeroaxis</KEYWORD3>\r
+               <KEYWORD3>ydata</KEYWORD3>\r
+               <KEYWORD3>ydtics</KEYWORD3>\r
+               <KEYWORD3>ylabel</KEYWORD3>\r
+               <KEYWORD3>ymtics</KEYWORD3>\r
+               <KEYWORD3>yrange</KEYWORD3>\r
+               <KEYWORD3>ytics</KEYWORD3>\r
+               <KEYWORD3>yzeroaxis</KEYWORD3>\r
+               <KEYWORD3>zdata</KEYWORD3>\r
+               <KEYWORD3>zdtics</KEYWORD3>\r
+               <KEYWORD3>cbdata</KEYWORD3>\r
+               <KEYWORD3>cbdtics</KEYWORD3>\r
+               <KEYWORD3>zero</KEYWORD3>\r
+               <KEYWORD3>zeroaxis</KEYWORD3>\r
+               <KEYWORD3>zlabel</KEYWORD3>\r
+               <KEYWORD3>zmtics</KEYWORD3>\r
+               <KEYWORD3>zrange</KEYWORD3>\r
+               <KEYWORD3>ztics</KEYWORD3>\r
+               <KEYWORD3>cblabel</KEYWORD3>\r
+               <KEYWORD3>cbmtics</KEYWORD3>\r
+               <KEYWORD3>cbrange</KEYWORD3>\r
+               <KEYWORD3>cbtics</KEYWORD3>\r
+\r
+       </KEYWORDS>\r
+\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/groovy.xml b/extra/xmode/modes/groovy.xml
new file mode 100644 (file)
index 0000000..5e0d8ea
--- /dev/null
@@ -0,0 +1,262 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+<MODE NAME="groovy"                    FILE="groovy.xml"\r
+                               FILE_NAME_GLOB="*.{groovy,grv}"/>\r
+-->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="indentNextLine"\r
+                       VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+       </PROPS>\r
+\r
+       <RULES ESCAPE="\" HIGHLIGHT_DIGITS="TRUE" IGNORE_CASE="FALSE">\r
+               <!-- Silly comment -->\r
+               <SEQ TYPE="COMMENT1">/**/</SEQ>\r
+\r
+               <!-- Javadoc comment -->\r
+               <SPAN TYPE="COMMENT3" DELEGATE="GROOVYDOC">\r
+                       <BEGIN>/**</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <!-- Java comment (C style) -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="LITERAL">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <!-- heredoc -->\r
+               <SPAN_REGEXP HASH_CHAR="&lt;&lt;&lt;" TYPE="LITERAL1" DELEGATE="LITERAL">\r
+                       <BEGIN><![CDATA[<<<([\p{Alpha}_][\p{Alnum}_]*)\s*]]></BEGIN>\r
+                       <END>$1</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <SEQ TYPE="OPERATOR">=~</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+\r
+               <!-- workaround to stop "*" from being colorized\r
+                    in import statements. -->\r
+               <SEQ TYPE="NULL">.*</SEQ>\r
+\r
+               <!-- Comments -->\r
+               <EOL_SPAN TYPE="COMMENT1">//</EOL_SPAN>\r
+\r
+               <!-- Function calls -->\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>abstract</KEYWORD1>\r
+                       <KEYWORD1>break</KEYWORD1>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>catch</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>extends</KEYWORD1>\r
+                       <KEYWORD1>final</KEYWORD1>\r
+                       <KEYWORD1>finally</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>implements</KEYWORD1>\r
+                       <KEYWORD1>instanceof</KEYWORD1>\r
+                       <KEYWORD1>native</KEYWORD1>\r
+                       <KEYWORD1>new</KEYWORD1>\r
+                       <KEYWORD1>private</KEYWORD1>\r
+                       <KEYWORD1>protected</KEYWORD1>\r
+                       <KEYWORD1>public</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>static</KEYWORD1>\r
+                       <KEYWORD1>switch</KEYWORD1>\r
+                       <KEYWORD1>synchronized</KEYWORD1>\r
+                       <KEYWORD1>throw</KEYWORD1>\r
+                       <KEYWORD1>throws</KEYWORD1>\r
+                       <KEYWORD1>transient</KEYWORD1>\r
+                       <KEYWORD1>try</KEYWORD1>\r
+                       <KEYWORD1>volatile</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+\r
+                       <KEYWORD1>strictfp</KEYWORD1>\r
+\r
+                       <KEYWORD1>package</KEYWORD1>\r
+                       <KEYWORD1>import</KEYWORD1>\r
+\r
+                       <!-- groovy keywords -->\r
+                       <KEYWORD2>as</KEYWORD2>\r
+                       <KEYWORD2>assert</KEYWORD2>\r
+                       <KEYWORD2>def</KEYWORD2>\r
+                       <KEYWORD2>mixin</KEYWORD2>\r
+                       <KEYWORD2>property</KEYWORD2>\r
+                       <KEYWORD2>test</KEYWORD2>\r
+                       <KEYWORD2>using</KEYWORD2>\r
+                       <KEYWORD2>in</KEYWORD2>\r
+\r
+                       <!-- types -->\r
+                       <KEYWORD3>boolean</KEYWORD3>\r
+                       <KEYWORD3>byte</KEYWORD3>\r
+                       <KEYWORD3>char</KEYWORD3>\r
+                       <KEYWORD3>class</KEYWORD3>\r
+                       <KEYWORD3>double</KEYWORD3>\r
+                       <KEYWORD3>float</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>interface</KEYWORD3>\r
+                       <KEYWORD3>long</KEYWORD3>\r
+                       <KEYWORD3>short</KEYWORD3>\r
+                       <KEYWORD3>void</KEYWORD3>\r
+\r
+                       <!-- Groovy JDK stuff -->\r
+                       <KEYWORD4>abs</KEYWORD4>\r
+                       <KEYWORD4>any</KEYWORD4>\r
+                       <KEYWORD4>append</KEYWORD4>\r
+                       <KEYWORD4>asList</KEYWORD4>\r
+                       <KEYWORD4>asWritable</KEYWORD4>\r
+                       <KEYWORD4>call</KEYWORD4>\r
+                       <KEYWORD4>collect</KEYWORD4>\r
+                       <KEYWORD4>compareTo</KEYWORD4>\r
+                       <KEYWORD4>count</KEYWORD4>\r
+                       <KEYWORD4>div</KEYWORD4>\r
+                       <KEYWORD4>dump</KEYWORD4>\r
+                       <KEYWORD4>each</KEYWORD4>\r
+                       <KEYWORD4>eachByte</KEYWORD4>\r
+                       <KEYWORD4>eachFile</KEYWORD4>\r
+                       <KEYWORD4>eachLine</KEYWORD4>\r
+                       <KEYWORD4>every</KEYWORD4>\r
+                       <KEYWORD4>find</KEYWORD4>\r
+                       <KEYWORD4>findAll</KEYWORD4>\r
+                       <KEYWORD4>flatten</KEYWORD4>\r
+                       <KEYWORD4>getAt</KEYWORD4>\r
+                       <KEYWORD4>getErr</KEYWORD4>\r
+                       <KEYWORD4>getIn</KEYWORD4>\r
+                       <KEYWORD4>getOut</KEYWORD4>\r
+                       <KEYWORD4>getText</KEYWORD4>\r
+                       <KEYWORD4>grep</KEYWORD4>\r
+                       <KEYWORD4>immutable</KEYWORD4>\r
+                       <KEYWORD4>inject</KEYWORD4>\r
+                       <KEYWORD4>inspect</KEYWORD4>\r
+                       <KEYWORD4>intersect</KEYWORD4>\r
+                       <KEYWORD4>invokeMethods</KEYWORD4>\r
+                       <KEYWORD4>isCase</KEYWORD4>\r
+                       <KEYWORD4>join</KEYWORD4>\r
+                       <KEYWORD4>leftShift</KEYWORD4>\r
+                       <KEYWORD4>minus</KEYWORD4>\r
+                       <KEYWORD4>multiply</KEYWORD4>\r
+                       <KEYWORD4>newInputStream</KEYWORD4>\r
+                       <KEYWORD4>newOutputStream</KEYWORD4>\r
+                       <KEYWORD4>newPrintWriter</KEYWORD4>\r
+                       <KEYWORD4>newReader</KEYWORD4>\r
+                       <KEYWORD4>newWriter</KEYWORD4>\r
+                       <KEYWORD4>next</KEYWORD4>\r
+                       <KEYWORD4>plus</KEYWORD4>\r
+                       <KEYWORD4>pop</KEYWORD4>\r
+                       <KEYWORD4>power</KEYWORD4>\r
+                       <KEYWORD4>previous</KEYWORD4>\r
+                       <KEYWORD4>print</KEYWORD4>\r
+                       <KEYWORD4>println</KEYWORD4>\r
+                       <KEYWORD4>push</KEYWORD4>\r
+                       <KEYWORD4>putAt</KEYWORD4>\r
+                       <KEYWORD4>read</KEYWORD4>\r
+                       <KEYWORD4>readBytes</KEYWORD4>\r
+                       <KEYWORD4>readLines</KEYWORD4>\r
+                       <KEYWORD4>reverse</KEYWORD4>\r
+                       <KEYWORD4>reverseEach</KEYWORD4>\r
+                       <KEYWORD4>round</KEYWORD4>\r
+                       <KEYWORD4>size</KEYWORD4>\r
+                       <KEYWORD4>sort</KEYWORD4>\r
+                       <KEYWORD4>splitEachLine</KEYWORD4>\r
+                       <KEYWORD4>step</KEYWORD4>\r
+                       <KEYWORD4>subMap</KEYWORD4>\r
+                       <KEYWORD4>times</KEYWORD4>\r
+                       <KEYWORD4>toInteger</KEYWORD4>\r
+                       <KEYWORD4>toList</KEYWORD4>\r
+                       <KEYWORD4>tokenize</KEYWORD4>\r
+                       <KEYWORD4>upto</KEYWORD4>\r
+                       <KEYWORD4>waitForOrKill</KEYWORD4>\r
+                       <KEYWORD4>withPrintWriter</KEYWORD4>\r
+                       <KEYWORD4>withReader</KEYWORD4>\r
+                       <KEYWORD4>withStream</KEYWORD4>\r
+                       <KEYWORD4>withWriter</KEYWORD4>\r
+                       <KEYWORD4>withWriterAppend</KEYWORD4>\r
+                       <KEYWORD4>write</KEYWORD4>\r
+                       <KEYWORD4>writeLine</KEYWORD4>\r
+\r
+                       <LITERAL2>false</LITERAL2>\r
+                       <LITERAL2>null</LITERAL2>\r
+                       <LITERAL2>super</LITERAL2>\r
+                       <LITERAL2>this</LITERAL2>\r
+                       <LITERAL2>true</LITERAL2>\r
+\r
+                       <!-- this is specific to groovy, treat like `this`? -->\r
+                       <LITERAL3>it</LITERAL3>\r
+\r
+                       <INVALID>goto</INVALID>\r
+                       <INVALID>const</INVALID>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="LITERAL" DEFAULT="LITERAL1" ESCAPE="\">\r
+               <!-- Variables -->\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING>\r
+       </RULES>\r
+\r
+       <RULES SET="GROOVYDOC" DEFAULT="COMMENT3" IGNORE_CASE="TRUE">\r
+               <!-- so that @link{...} is highlighted -->\r
+               <SEQ TYPE="COMMENT3">{</SEQ>\r
+\r
+               <!-- so that *@param is highlighted -->\r
+               <SEQ TYPE="COMMENT3">*</SEQ>\r
+\r
+               <!-- HTML comments -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Javadoc allows this -->\r
+               <SEQ TYPE="COMMENT3">&lt;&lt;</SEQ>\r
+               <SEQ TYPE="COMMENT3">&lt;=</SEQ>\r
+               <SEQ TYPE="COMMENT3">&lt; </SEQ>\r
+\r
+               <!-- HTML tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS"\r
+                       NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="LABEL">@</MARK_FOLLOWING>\r
+       </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/haskell.xml b/extra/xmode/modes/haskell.xml
new file mode 100644 (file)
index 0000000..b38b42d
--- /dev/null
@@ -0,0 +1,180 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+       Haskell mode by Kristian Ovaska (kristian.ovaska@helsinki.fi)\r
+       Based on Haskell 98\r
+-->\r
+\r
+<MODE>\r
+\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="{-" />\r
+               <PROPERTY NAME="commentEnd" VALUE="-}" />\r
+               <PROPERTY NAME="lineComment" VALUE="--" />\r
+               <!-- apparently, this is required... -->\r
+               <PROPERTY NAME="tabSize" VALUE="8" />\r
+               <PROPERTY NAME="indentSize" VALUE="8" />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE" ESCAPE="\">\r
+               <!-- Pragmas. -->\r
+               <SPAN TYPE="COMMENT2">\r
+                       <BEGIN>{-#</BEGIN>\r
+                       <END>#-}</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>{-</BEGIN>\r
+                       <END>-}</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- ' causes problems because not all ' are character\r
+               definitions. I implemented an ugly and partial workaround. -->\r
+               <SEQ TYPE="LITERAL1">' '</SEQ>\r
+               <SEQ TYPE="LITERAL1">'!'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'"'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'$'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'%'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'/'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'('</SEQ>\r
+               <SEQ TYPE="LITERAL1">')'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'['</SEQ>\r
+               <SEQ TYPE="LITERAL1">']'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'+'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'-'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'*'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'='</SEQ>\r
+               <SEQ TYPE="LITERAL1">'/'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'^'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'.'</SEQ>\r
+               <SEQ TYPE="LITERAL1">','</SEQ>\r
+               <SEQ TYPE="LITERAL1">':'</SEQ>\r
+               <SEQ TYPE="LITERAL1">';'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'&lt;'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'&gt;'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'|'</SEQ>\r
+               <SEQ TYPE="LITERAL1">'@'</SEQ>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">..</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">::</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">@</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">$</SEQ>\r
+\r
+               <!-- Defining this as OPERATOR causes float numbers not to be\r
+               highlighted... Which is more important? -->\r
+               <!-- <SEQ TYPE="NULL">.</SEQ> -->\r
+\r
+               <KEYWORDS>\r
+                       <!-- Reserved words. -->\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>class</KEYWORD1>\r
+                       <KEYWORD1>data</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+                       <KEYWORD1>deriving</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>import</KEYWORD1>\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <KEYWORD1>infix</KEYWORD1>\r
+                       <KEYWORD1>infixl</KEYWORD1>\r
+                       <KEYWORD1>infixr</KEYWORD1>\r
+                       <KEYWORD1>instance</KEYWORD1>\r
+                       <KEYWORD1>let</KEYWORD1>\r
+                       <KEYWORD1>module</KEYWORD1>\r
+                       <KEYWORD1>newtype</KEYWORD1>\r
+                       <KEYWORD1>of</KEYWORD1>\r
+                       <KEYWORD1>then</KEYWORD1>\r
+                       <KEYWORD1>type</KEYWORD1>\r
+                       <KEYWORD1>where</KEYWORD1>\r
+                       <KEYWORD1>_</KEYWORD1>\r
+                       <KEYWORD1>as</KEYWORD1>\r
+                       <KEYWORD1>qualified</KEYWORD1>\r
+                       <KEYWORD1>hiding</KEYWORD1>\r
+\r
+                       <KEYWORD3>Addr</KEYWORD3>\r
+                       <KEYWORD3>Bool</KEYWORD3>\r
+                       <KEYWORD3>Bounded</KEYWORD3>\r
+                       <KEYWORD3>Char</KEYWORD3>\r
+                       <KEYWORD3>Double</KEYWORD3>\r
+                       <KEYWORD3>Either</KEYWORD3>\r
+                       <KEYWORD3>Enum</KEYWORD3>\r
+                       <KEYWORD3>Eq</KEYWORD3>\r
+                       <KEYWORD3>FilePath</KEYWORD3>\r
+                       <KEYWORD3>Float</KEYWORD3>\r
+                       <KEYWORD3>Floating</KEYWORD3>\r
+                       <KEYWORD3>Fractional</KEYWORD3>\r
+                       <KEYWORD3>Functor</KEYWORD3>\r
+                       <KEYWORD3>IO</KEYWORD3>\r
+                       <KEYWORD3>IOError</KEYWORD3>\r
+                       <KEYWORD3>IOResult</KEYWORD3>\r
+                       <KEYWORD3>Int</KEYWORD3>\r
+                       <KEYWORD3>Integer</KEYWORD3>\r
+                       <KEYWORD3>Integral</KEYWORD3>\r
+                       <KEYWORD3>Ix</KEYWORD3>\r
+                       <KEYWORD3>Maybe</KEYWORD3>\r
+                       <KEYWORD3>Monad</KEYWORD3>\r
+                       <KEYWORD3>Num</KEYWORD3>\r
+                       <KEYWORD3>Ord</KEYWORD3>\r
+                       <KEYWORD3>Ordering</KEYWORD3>\r
+                       <KEYWORD3>Ratio</KEYWORD3>\r
+                       <KEYWORD3>Rational</KEYWORD3>\r
+                       <KEYWORD3>Read</KEYWORD3>\r
+                       <KEYWORD3>ReadS</KEYWORD3>\r
+                       <KEYWORD3>Real</KEYWORD3>\r
+                       <KEYWORD3>RealFloat</KEYWORD3>\r
+                       <KEYWORD3>RealFrac</KEYWORD3>\r
+                       <KEYWORD3>Show</KEYWORD3>\r
+                       <KEYWORD3>ShowS</KEYWORD3>\r
+                       <KEYWORD3>String</KEYWORD3>\r
+\r
+                       <LITERAL2>:</LITERAL2>\r
+                       <LITERAL2>EQ</LITERAL2>\r
+                       <LITERAL2>False</LITERAL2>\r
+                       <LITERAL2>GT</LITERAL2>\r
+                       <LITERAL2>Just</LITERAL2>\r
+                       <LITERAL2>LT</LITERAL2>\r
+                       <LITERAL2>Left</LITERAL2>\r
+                       <LITERAL2>Nothing</LITERAL2>\r
+                       <LITERAL2>Right</LITERAL2>\r
+                       <LITERAL2>True</LITERAL2>\r
+\r
+                       <OPERATOR>quot</OPERATOR>\r
+                       <OPERATOR>rem</OPERATOR>\r
+                       <OPERATOR>div</OPERATOR>\r
+                       <OPERATOR>mod</OPERATOR>\r
+                       <OPERATOR>elem</OPERATOR>\r
+                       <OPERATOR>notElem</OPERATOR>\r
+                       <OPERATOR>seq</OPERATOR>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/hex.xml b/extra/xmode/modes/hex.xml
new file mode 100644 (file)
index 0000000..73a8db9
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+    Hex mode by Andre Kaplan.\r
+    To be used in conjunction with the Hex plugin.\r
+-->\r
+\r
+<MODE>\r
+    <RULES DEFAULT="LITERAL1">\r
+\r
+        <MARK_PREVIOUS\r
+            TYPE="KEYWORD1"\r
+            AT_LINE_START="TRUE"\r
+        >:</MARK_PREVIOUS>\r
+\r
+        <EOL_SPAN TYPE="KEYWORD2">;</EOL_SPAN>\r
+    </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/hlsl.xml b/extra/xmode/modes/hlsl.xml
new file mode 100644 (file)
index 0000000..0f361c5
--- /dev/null
@@ -0,0 +1,479 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+<!--\r
+DirectX FX Files Syntax Highlighting (Edit Mode) for jEdit\r
+Including: Preprocessor, HLSL and Shader Assembler up to shader version 3.0\r
+\r
+Author: Adam Sawicki\r
+- Homepage: http://regedit.gamedev.pl/\r
+- E-mail: sawickiap@poczta.onet.pl\r
+- IRC: #warsztat @ PolNet\r
+- Gadu-Gadu: 2272474\r
+\r
+-->\r
+\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=".,+-*/=&lt;&gt;?^&amp;[]{}" />\r
+               \r
+               <!-- Auto indent -->\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="indentNextLine" VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+               <PROPERTY NAME="doubleBracketIndent" VALUE="false" />\r
+               <PROPERTY NAME="lineUpClosingBracket" VALUE="true" />\r
+       </PROPS>\r
+       \r
+       <RULES\r
+               ESCAPE="\"\r
+               IGNORE_CASE="FALSE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="((0[xX][0-9a-fA-F]+|\d+)[uUIL]?|\d+([eE]\d*)?[hHfF]?)">\r
+               \r
+               <!-- C style comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+               \r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               \r
+               <!-- preprocessor statements -->\r
+               <SEQ TYPE="KEYWORD2">##</SEQ>\r
+               <SEQ TYPE="KEYWORD2">#@</SEQ>\r
+               <EOL_SPAN TYPE="KEYWORD2" DELEGATE="Preprocessor">#</EOL_SPAN>\r
+               \r
+               <!-- asm -->\r
+               <SPAN AT_WORD_START="TRUE" EXCLUDE_MATCH="FALSE" TYPE="KEYWORD1" DELEGATE="Asm">\r
+                       <BEGIN>asm</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <SPAN AT_WORD_START="TRUE" EXCLUDE_MATCH="FALSE" TYPE="KEYWORD1" DELEGATE="Asm">\r
+                       <BEGIN>ASM</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <SPAN AT_WORD_START="TRUE" EXCLUDE_MATCH="FALSE" TYPE="KEYWORD1" DELEGATE="Asm">\r
+                       <BEGIN>Asm</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <SPAN AT_WORD_START="TRUE" EXCLUDE_MATCH="FALSE" TYPE="KEYWORD1" DELEGATE="Asm">\r
+                       <BEGIN>asm_fragment</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               \r
+               <!-- C style comment -->\r
+               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+               \r
+               <!-- Operators - multi character -->\r
+               <SEQ TYPE="OPERATOR">++</SEQ>\r
+               <SEQ TYPE="OPERATOR">--</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">||</SEQ>\r
+               <SEQ TYPE="OPERATOR">==</SEQ>\r
+               <SEQ TYPE="OPERATOR">::</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">...</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!=</SEQ>\r
+               <SEQ TYPE="OPERATOR">*=</SEQ>\r
+               <SEQ TYPE="OPERATOR">/=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+=</SEQ>\r
+               <SEQ TYPE="OPERATOR">-=</SEQ>\r
+               <SEQ TYPE="OPERATOR">%=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">|=</SEQ>\r
+               <SEQ TYPE="OPERATOR">^=</SEQ>\r
+               <SEQ TYPE="OPERATOR">-&gt;</SEQ>\r
+\r
+               <!-- Operators - single characters -->\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               \r
+               <!-- Function calls -->\r
+               <MARK_PREVIOUS TYPE="FUNCTION" EXCLUDE_MATCH="TRUE">(</MARK_PREVIOUS>\r
+               \r
+               <!-- Swizzle operator for vectors/scalars (a.xyzw OR b.rgba), matrices (c._m00_m01 OR d._11_12) indexing -->\r
+               <SEQ_REGEXP TYPE="OPERATOR" HASH_CHAR=".">.(([xyzw]{1,4})|([rgba]{1,4})|((_m[0123][0123])+)|((_[1234][1234])+))(?!\p{Alnum})</SEQ_REGEXP>\r
+               \r
+               <!-- Atomic, but complex types -->\r
+               <SEQ_REGEXP TYPE="KEYWORD2" AT_WORD_START="TRUE" HASH_CHAR="bool">bool[1234](x[1234])?\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP TYPE="KEYWORD2" AT_WORD_START="TRUE" HASH_CHAR="int">int[1234](x[1234])?\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP TYPE="KEYWORD2" AT_WORD_START="TRUE" HASH_CHAR="half">half[1234](x[1234])?\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP TYPE="KEYWORD2" AT_WORD_START="TRUE" HASH_CHAR="float">float[1234](x[1234])?\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP TYPE="KEYWORD2" AT_WORD_START="TRUE" HASH_CHAR="double">double[1234](x[1234])?\b</SEQ_REGEXP>\r
+               \r
+               <!-- Semantics -->\r
+               <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR=":">:\s*(register\s*\(\w+(\s*\,\s*\w+\s*)?\)|\w+)</SEQ_REGEXP>\r
+               \r
+               <KEYWORDS>\r
+                       <!-- Control flow keywords -->\r
+                       <KEYWORD1>discard</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>typedef</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+                       \r
+                       <!-- Other keywords -->\r
+                       <KEYWORD1>compile</KEYWORD1>\r
+                       <KEYWORD1>compile_fragment</KEYWORD1>\r
+                       <KEYWORD1>register</KEYWORD1>\r
+                       <KEYWORD1>sampler_state</KEYWORD1>\r
+                       <KEYWORD1>stateblock_state</KEYWORD1>\r
+                       <KEYWORD1>technique</KEYWORD1>\r
+                       <KEYWORD1>Technique</KEYWORD1>\r
+                       <KEYWORD1>TECHNIQUE</KEYWORD1>\r
+                       <KEYWORD1>pass</KEYWORD1>\r
+                       <KEYWORD1>Pass</KEYWORD1>\r
+                       <KEYWORD1>PASS</KEYWORD1>\r
+                       <KEYWORD1>decl</KEYWORD1>\r
+                       <KEYWORD1>Decl</KEYWORD1>\r
+                       <KEYWORD1>DECL</KEYWORD1>\r
+                       \r
+                       <!-- Atomic type keywords -->\r
+                       <KEYWORD2>void</KEYWORD2>\r
+                       <KEYWORD2>bool</KEYWORD2>\r
+                       <KEYWORD2>int</KEYWORD2>\r
+                       <KEYWORD2>half</KEYWORD2>\r
+                       <KEYWORD2>float</KEYWORD2>\r
+                       <KEYWORD2>double</KEYWORD2>\r
+                       <KEYWORD2>vector</KEYWORD2>\r
+                       <KEYWORD2>matrix</KEYWORD2>\r
+                       \r
+                       <!-- Object type keywords -->\r
+                       <KEYWORD3>string</KEYWORD3>\r
+                       <KEYWORD3>texture</KEYWORD3>\r
+                       <KEYWORD3>texture1D</KEYWORD3>\r
+                       <KEYWORD3>texture2D</KEYWORD3>\r
+                       <KEYWORD3>texture3D</KEYWORD3>\r
+                       <KEYWORD3>textureCUBE</KEYWORD3>\r
+                       <KEYWORD3>sampler</KEYWORD3>\r
+                       <KEYWORD3>sampler1D</KEYWORD3>\r
+                       <KEYWORD3>sampler2D</KEYWORD3>\r
+                       <KEYWORD3>sampler3D</KEYWORD3>\r
+                       <KEYWORD3>samplerCUBE</KEYWORD3>\r
+                       <KEYWORD3>pixelfragment</KEYWORD3>\r
+                       <KEYWORD3>vertexfragment</KEYWORD3>\r
+                       <KEYWORD3>pixelshader</KEYWORD3>\r
+                       <KEYWORD3>vertexshader</KEYWORD3>\r
+                       <KEYWORD3>stateblock</KEYWORD3>\r
+                       <KEYWORD3>struct</KEYWORD3>\r
+\r
+                       <!-- Usage keywords -->\r
+                       <KEYWORD4>static</KEYWORD4>\r
+                       <KEYWORD4>uniform</KEYWORD4>\r
+                       <KEYWORD4>extern</KEYWORD4>\r
+                       <KEYWORD4>volatile</KEYWORD4>\r
+                       <KEYWORD4>inline</KEYWORD4>\r
+                       <KEYWORD4>shared</KEYWORD4>\r
+                       <KEYWORD4>const</KEYWORD4>\r
+                       <KEYWORD4>row_major</KEYWORD4>\r
+                       <KEYWORD4>column_major</KEYWORD4>\r
+                       <KEYWORD4>in</KEYWORD4>\r
+                       <KEYWORD4>inout</KEYWORD4>\r
+                       <KEYWORD4>out</KEYWORD4>                        \r
+                       \r
+                       <!-- Literals -->\r
+                       <LITERAL1>false</LITERAL1>\r
+                       <LITERAL1>true</LITERAL1>\r
+                       <LITERAL1>NULL</LITERAL1>\r
+                       \r
+                       <!-- Intrinsic functions -->\r
+                       <LITERAL2>abs</LITERAL2>\r
+                       <LITERAL2>acos</LITERAL2>\r
+                       <LITERAL2>all</LITERAL2>\r
+                       <LITERAL2>any</LITERAL2>\r
+                       <LITERAL2>asin</LITERAL2>\r
+                       <LITERAL2>atan</LITERAL2>\r
+                       <LITERAL2>atan2</LITERAL2>\r
+                       <LITERAL2>ceil</LITERAL2>\r
+                       <LITERAL2>clamp</LITERAL2>\r
+                       <LITERAL2>clip</LITERAL2>\r
+                       <LITERAL2>cos</LITERAL2>\r
+                       <LITERAL2>cosh</LITERAL2>\r
+                       <LITERAL2>cross</LITERAL2>\r
+                       <LITERAL2>D3DCOLORtoUBYTE4</LITERAL2>\r
+                       <LITERAL2>ddx</LITERAL2>\r
+                       <LITERAL2>ddy</LITERAL2>\r
+                       <LITERAL2>degrees</LITERAL2>\r
+                       <LITERAL2>determinant</LITERAL2>\r
+                       <LITERAL2>distance</LITERAL2>\r
+                       <LITERAL2>dot</LITERAL2>\r
+                       <LITERAL2>exp</LITERAL2>\r
+                       <LITERAL2>exp2</LITERAL2>\r
+                       <LITERAL2>faceforward</LITERAL2>\r
+                       <LITERAL2>floor</LITERAL2>\r
+                       <LITERAL2>fmod</LITERAL2>\r
+                       <LITERAL2>frac</LITERAL2>\r
+                       <LITERAL2>frexp</LITERAL2>\r
+                       <LITERAL2>fwidth</LITERAL2>\r
+                       <LITERAL2>isfinite</LITERAL2>\r
+                       <LITERAL2>isinf</LITERAL2>\r
+                       <LITERAL2>isnan</LITERAL2>\r
+                       <LITERAL2>ldexp</LITERAL2>\r
+                       <LITERAL2>length</LITERAL2>\r
+                       <LITERAL2>lerp</LITERAL2>\r
+                       <LITERAL2>lit</LITERAL2>\r
+                       <LITERAL2>log</LITERAL2>\r
+                       <LITERAL2>log10</LITERAL2>\r
+                       <LITERAL2>log2</LITERAL2>\r
+                       <LITERAL2>max</LITERAL2>\r
+                       <LITERAL2>min</LITERAL2>\r
+                       <LITERAL2>modf</LITERAL2>\r
+                       <LITERAL2>mul</LITERAL2>\r
+                       <LITERAL2>noise</LITERAL2>\r
+                       <LITERAL2>normalize</LITERAL2>\r
+                       <LITERAL2>pow</LITERAL2>\r
+                       <LITERAL2>radians</LITERAL2>\r
+                       <LITERAL2>reflect</LITERAL2>\r
+                       <LITERAL2>refract</LITERAL2>\r
+                       <LITERAL2>round</LITERAL2>\r
+                       <LITERAL2>rsqrt</LITERAL2>\r
+                       <LITERAL2>saturate</LITERAL2>\r
+                       <LITERAL2>sign</LITERAL2>\r
+                       <LITERAL2>sin</LITERAL2>\r
+                       <LITERAL2>sincos</LITERAL2>\r
+                       <LITERAL2>sinh</LITERAL2>\r
+                       <LITERAL2>smoothstep</LITERAL2>\r
+                       <LITERAL2>sqrt</LITERAL2>\r
+                       <LITERAL2>step</LITERAL2>\r
+                       <LITERAL2>tan</LITERAL2>\r
+                       <LITERAL2>tanh</LITERAL2>\r
+                       <LITERAL2>transpose</LITERAL2>\r
+                       \r
+                       <!-- Intrinsic functions - sampling -->\r
+                       <LITERAL3>tex1D</LITERAL3>\r
+                       <LITERAL3>tex1Dgrad</LITERAL3>\r
+                       <LITERAL3>tex1Dbias</LITERAL3>\r
+                       <LITERAL3>tex1Dgrad</LITERAL3>\r
+                       <LITERAL3>tex1Dlod</LITERAL3>\r
+                       <LITERAL3>tex1Dproj</LITERAL3>\r
+                       <LITERAL3>tex2D</LITERAL3>\r
+                       <LITERAL3>tex2D</LITERAL3>\r
+                       <LITERAL3>tex2Dbias</LITERAL3>\r
+                       <LITERAL3>tex2Dgrad</LITERAL3>\r
+                       <LITERAL3>tex2Dlod</LITERAL3>\r
+                       <LITERAL3>tex2Dproj</LITERAL3>\r
+                       <LITERAL3>tex3D</LITERAL3>\r
+                       <LITERAL3>tex3D</LITERAL3>\r
+                       <LITERAL3>tex3Dbias</LITERAL3>\r
+                       <LITERAL3>tex3Dgrad</LITERAL3>\r
+                       <LITERAL3>tex3Dlod</LITERAL3>\r
+                       <LITERAL3>tex3Dproj</LITERAL3>\r
+                       <LITERAL3>texCUBE</LITERAL3>\r
+                       <LITERAL3>texCUBE</LITERAL3>\r
+                       <LITERAL3>texCUBEbias</LITERAL3>\r
+                       <LITERAL3>texCUBEgrad</LITERAL3>\r
+                       <LITERAL3>texCUBElod</LITERAL3>\r
+                       <LITERAL3>texCUBEproj</LITERAL3>\r
+\r
+                       <!-- Reserved but unused words -->\r
+                       <INVALID>auto</INVALID>\r
+                       <INVALID>break</INVALID>\r
+                       <INVALID>case</INVALID>\r
+                       <INVALID>catch</INVALID>\r
+                       <INVALID>char</INVALID>\r
+                       <INVALID>class</INVALID>\r
+                       <INVALID>const_cast</INVALID>\r
+                       <INVALID>continue</INVALID>\r
+                       <INVALID>default</INVALID>\r
+                       <INVALID>delete</INVALID>\r
+                       <INVALID>dynamic_cast</INVALID>\r
+                       <INVALID>enum</INVALID>\r
+                       <INVALID>explicit</INVALID>\r
+                       <INVALID>friend</INVALID>\r
+                       <INVALID>goto</INVALID>\r
+                       <INVALID>long</INVALID>\r
+                       <INVALID>mutable</INVALID>\r
+                       <INVALID>namespace</INVALID>\r
+                       <INVALID>new</INVALID>\r
+                       <INVALID>operator</INVALID>\r
+                       <INVALID>private</INVALID>\r
+                       <INVALID>protected</INVALID>\r
+                       <INVALID>public</INVALID>\r
+                       <INVALID>reinterpret_cast</INVALID>\r
+                       <INVALID>short</INVALID>\r
+                       <INVALID>signed</INVALID>\r
+                       <INVALID>sizeof</INVALID>\r
+                       <INVALID>static_cast</INVALID>\r
+                       <INVALID>switch</INVALID>\r
+                       <INVALID>template</INVALID>\r
+                       <INVALID>this</INVALID>\r
+                       <INVALID>throw</INVALID>\r
+                       <INVALID>try</INVALID>\r
+                       <INVALID>typename</INVALID>\r
+                       <INVALID>union</INVALID>\r
+                       <INVALID>unsigned</INVALID>\r
+                       <INVALID>using</INVALID>\r
+                       <INVALID>virtual</INVALID>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="Include" DEFAULT="KEYWORD2" />\r
+\r
+       <RULES\r
+               SET="Preprocessor"\r
+               DEFAULT="KEYWORD2"\r
+               IGNORE_CASE="FALSE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="((0x[[:xdigit:]]+|[[:digit:]]+)[uUIL]?|[[:digit:]]+([eE][[:digit:]]*)?[hHfF]?)">\r
+\r
+               <!-- C style comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+               \r
+               <!-- this is a hack so that #include <net/if.h> does not get the if highlighted -->\r
+               <EOL_SPAN TYPE="MARKUP" DELEGATE="Include">include</EOL_SPAN>\r
+               \r
+               <KEYWORDS>\r
+                       <!-- Directives -->\r
+                       <MARKUP>define</MARKUP>\r
+                       <MARKUP>elif</MARKUP>\r
+                       <MARKUP>else</MARKUP>\r
+                       <MARKUP>endif</MARKUP>\r
+                       <MARKUP>error</MARKUP>\r
+                       <MARKUP>if</MARKUP>\r
+                       <MARKUP>ifdef</MARKUP>\r
+                       <MARKUP>ifndef</MARKUP>\r
+                       <MARKUP>line</MARKUP>\r
+                       <MARKUP>pragma</MARKUP>\r
+                       <MARKUP>undef</MARKUP>\r
+                       \r
+                       <!-- Other -->\r
+                       <LITERAL1>pack_matrix</LITERAL1>\r
+                       <LITERAL1>warning</LITERAL1>\r
+                       <LITERAL1>def</LITERAL1>\r
+                       <LITERAL1>defined</LITERAL1>\r
+                       <LITERAL1>D3DX</LITERAL1>\r
+                       <LITERAL1>D3DX_VERSION</LITERAL1>\r
+                       <LITERAL1>DIRECT3D</LITERAL1>\r
+                       <LITERAL1>DIRECT3D_VERSION</LITERAL1>\r
+                       <LITERAL1>__FILE__</LITERAL1>\r
+                       <LITERAL1>__LINE__</LITERAL1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="Asm"\r
+               DEFAULT="NULL"\r
+               IGNORE_CASE="FALSE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="((0x[[:xdigit:]]+|[[:digit:]]+)[uUIL]?|[[:digit:]]+([eE][[:digit:]]*)?[hHfF]?)">\r
+               \r
+               <!-- Starting... -->\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+\r
+               <!-- Comments -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT2">;</EOL_SPAN>\r
+\r
+               <!-- Operators -->\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+\r
+               <!-- Swizzle operator -->\r
+               <SEQ_REGEXP TYPE="OPERATOR" HASH_CHAR=".">.(([xyzw]{1,4}))</SEQ_REGEXP>\r
+               \r
+               <!-- Instruction -->\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="abs">abs(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="add">add(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="bem">bem(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="break_comp">break_comp(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="breakp">breakp(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="callnz">callnz(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="cmp">cmp(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="cnd">cnd(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="crs">crs(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="dp2add">dp2add(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="dp3">dp3(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="dp4">dp4(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="dst">dst(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="dsx">dsx(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="dsy">dsy(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="else">else(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="endif">endif(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="endloop">endloop(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="endrep">endrep(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="exp">exp(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="frc">frc(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="if">if(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="label">label(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="lit">lit(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="logp">logp(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="loop">loop(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="lrp">lrp(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="m3x2">m3x2(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="m3x3">m3x3(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="m3x4">m3x4(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="m4x3">m4x3(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="m4x4">m4x4(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="mad">mad(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="mov">mov(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="max">max(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="min">min(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="mova">mova(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="mul">mul(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="nop">nop(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="nrm">nrm(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="phase">phase(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="pow">pow(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="rcp">rcp(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="rep">rep(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="ret">ret(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="rsq">rsq(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="setp_comp">setp_comp(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="sge">sge(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="sgn">sgn(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="sincos">sincos(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="slt">slt(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="sub">sub(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               <!-- (seen in preshader -->\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="FUNCTION" HASH_CHAR="neg">neg(_pp|_sat|_x2|_x4|_x8|_bx2|_d2|_d4|_d8)*\b</SEQ_REGEXP>\r
+               \r
+               <!-- Texturing instruction -->\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="KEYWORD2" HASH_CHAR="tex">tex\w*</SEQ_REGEXP>\r
+               \r
+               <!-- Main instruction -->\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="KEYWORD1" HASH_CHAR="ps">ps\w*</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="KEYWORD1" HASH_CHAR="vs">vs\w*</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="KEYWORD1" HASH_CHAR="def">def\w*</SEQ_REGEXP>\r
+               <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="KEYWORD1" HASH_CHAR="dcl">dcl\w*</SEQ_REGEXP>\r
+\r
+               <KEYWORDS>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/htaccess.xml b/extra/xmode/modes/htaccess.xml
new file mode 100644 (file)
index 0000000..33bf6c4
--- /dev/null
@@ -0,0 +1,563 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+               <PROPERTY NAME="noWordSep" VALUE="-" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" HIGHLIGHT_DIGITS="FALSE" IGNORE_CASE="TRUE">\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN_REGEXP HASH_CHAR="&lt;" TYPE="MARKUP" DELEGATE="DIRECTIVE">\r
+                       <BEGIN><![CDATA[<(\w+)[^>]*>]]></BEGIN>\r
+                       <END><![CDATA[</$1>]]></END>\r
+               </SPAN_REGEXP>\r
+\r
+               <KEYWORDS>\r
+\r
+                       <KEYWORD1>AcceptPathInfo</KEYWORD1>\r
+                       <KEYWORD1>Action</KEYWORD1>\r
+                       <KEYWORD1>AddAlt</KEYWORD1>\r
+                       <KEYWORD1>AddAltByEncoding</KEYWORD1>\r
+                       <KEYWORD1>AddAltByType</KEYWORD1>\r
+                       <KEYWORD1>AddCharset</KEYWORD1>\r
+                       <KEYWORD1>AddDefaultCharset</KEYWORD1>\r
+                       <KEYWORD1>AddDescription</KEYWORD1>\r
+                       <KEYWORD1>AddEncoding</KEYWORD1>\r
+                       <KEYWORD1>AddHandler</KEYWORD1>\r
+                       <KEYWORD1>AddIcon</KEYWORD1>\r
+                       <KEYWORD1>AddIconByEncoding</KEYWORD1>\r
+                       <KEYWORD1>AddIconByType</KEYWORD1>\r
+                       <KEYWORD1>AddInputFilter</KEYWORD1>\r
+                       <KEYWORD1>AddLanguage</KEYWORD1>\r
+                       <KEYWORD1>AddOutputFilter</KEYWORD1>\r
+                       <KEYWORD1>AddOutputFilterByType</KEYWORD1>\r
+                       <KEYWORD1>AddType</KEYWORD1>\r
+                       <KEYWORD1>Allow</KEYWORD1>\r
+                       <KEYWORD1>Anonymous</KEYWORD1>\r
+                       <KEYWORD1>Anonymous_Authoritative</KEYWORD1>\r
+                       <KEYWORD1>Anonymous_LogEmail</KEYWORD1>\r
+                       <KEYWORD1>Anonymous_MustGiveEmail</KEYWORD1>\r
+                       <KEYWORD1>Anonymous_NoUserID</KEYWORD1>\r
+                       <KEYWORD1>Anonymous_VerifyEmail</KEYWORD1>\r
+                       <KEYWORD1>AuthAuthoritative</KEYWORD1>\r
+                       <KEYWORD1>AuthDBMAuthoritative</KEYWORD1>\r
+                       <KEYWORD1>AuthDBMGroupFile</KEYWORD1>\r
+                       <KEYWORD1>AuthDBMType</KEYWORD1>\r
+                       <KEYWORD1>AuthDBMUserFile</KEYWORD1>\r
+                       <KEYWORD1>AuthDigestAlgorithm</KEYWORD1>\r
+                       <KEYWORD1>AuthDigestDomain</KEYWORD1>\r
+                       <KEYWORD1>AuthDigestFile</KEYWORD1>\r
+                       <KEYWORD1>AuthDigestGroupFile</KEYWORD1>\r
+                       <KEYWORD1>AuthDigestNonceFormat</KEYWORD1>\r
+                       <KEYWORD1>AuthDigestNonceLifetime</KEYWORD1>\r
+                       <KEYWORD1>AuthDigestQop</KEYWORD1>\r
+                       <KEYWORD1>AuthGroupFile</KEYWORD1>\r
+                       <KEYWORD1>AuthLDAPAuthoritative</KEYWORD1>\r
+                       <KEYWORD1>AuthLDAPBindDN</KEYWORD1>\r
+                       <KEYWORD1>AuthLDAPBindPassword</KEYWORD1>\r
+                       <KEYWORD1>AuthLDAPCompareDNOnServer</KEYWORD1>\r
+                       <KEYWORD1>AuthLDAPDereferenceAliases</KEYWORD1>\r
+                       <KEYWORD1>AuthLDAPEnabled</KEYWORD1>\r
+                       <KEYWORD1>AuthLDAPFrontPageHack</KEYWORD1>\r
+                       <KEYWORD1>AuthLDAPGroupAttribute</KEYWORD1>\r
+                       <KEYWORD1>AuthLDAPGroupAttributeIsDN</KEYWORD1>\r
+                       <KEYWORD1>AuthLDAPRemoteUserIsDN</KEYWORD1>\r
+                       <KEYWORD1>AuthLDAPUrl</KEYWORD1>\r
+                       <KEYWORD1>AuthName</KEYWORD1>\r
+                       <KEYWORD1>AuthType</KEYWORD1>\r
+                       <KEYWORD1>AuthUserFile</KEYWORD1>\r
+                       <KEYWORD1>BrowserMatch</KEYWORD1>\r
+                       <KEYWORD1>BrowserMatchNoCase</KEYWORD1>\r
+                       <KEYWORD1>CGIMapExtension</KEYWORD1>\r
+                       <KEYWORD1>CharsetDefault</KEYWORD1>\r
+                       <KEYWORD1>CharsetOptions</KEYWORD1>\r
+                       <KEYWORD1>CharsetSourceEnc</KEYWORD1>\r
+                       <KEYWORD1>CheckSpelling</KEYWORD1>\r
+                       <KEYWORD1>ContentDigest</KEYWORD1>\r
+                       <KEYWORD1>CookieDomain</KEYWORD1>\r
+                       <KEYWORD1>CookieExpires</KEYWORD1>\r
+                       <KEYWORD1>CookieName</KEYWORD1>\r
+                       <KEYWORD1>CookieStyle</KEYWORD1>\r
+                       <KEYWORD1>CookieTracking</KEYWORD1>\r
+                       <KEYWORD1>DefaultIcon</KEYWORD1>\r
+                       <KEYWORD1>DefaultLanguage</KEYWORD1>\r
+                       <KEYWORD1>DefaultType</KEYWORD1>\r
+                       <KEYWORD1>Deny</KEYWORD1>\r
+                       <KEYWORD1>DirectoryIndex</KEYWORD1>\r
+                       <KEYWORD1>DirectorySlash</KEYWORD1>\r
+                       <KEYWORD1>EnableMMAP</KEYWORD1>\r
+                       <KEYWORD1>EnableSendfile</KEYWORD1>\r
+                       <KEYWORD1>ErrorDocument</KEYWORD1>\r
+                       <KEYWORD1>Example</KEYWORD1>\r
+                       <KEYWORD1>ExpiresActive</KEYWORD1>\r
+                       <KEYWORD1>ExpiresByType</KEYWORD1>\r
+                       <KEYWORD1>ExpiresDefault</KEYWORD1>\r
+                       <KEYWORD1>FileETag</KEYWORD1>\r
+                       <KEYWORD1>ForceLanguagePriority</KEYWORD1>\r
+                       <KEYWORD1>ForceType</KEYWORD1>\r
+                       <KEYWORD1>Header</KEYWORD1>\r
+                       <KEYWORD1>HeaderName</KEYWORD1>\r
+                       <KEYWORD1>ImapBase</KEYWORD1>\r
+                       <KEYWORD1>ImapDefault</KEYWORD1>\r
+                       <KEYWORD1>ImapMenu</KEYWORD1>\r
+                       <KEYWORD1>IndexIgnore</KEYWORD1>\r
+                       <KEYWORD1>IndexOptions</KEYWORD1>\r
+                       <KEYWORD1>IndexOrderDefault</KEYWORD1>\r
+                       <KEYWORD1>ISAPIAppendLogToErrors</KEYWORD1>\r
+                       <KEYWORD1>ISAPIAppendLogToQuery</KEYWORD1>\r
+                       <KEYWORD1>ISAPIFakeAsync</KEYWORD1>\r
+                       <KEYWORD1>ISAPILogNotSupported</KEYWORD1>\r
+                       <KEYWORD1>ISAPIReadAheadBuffer</KEYWORD1>\r
+                       <KEYWORD1>LanguagePriority</KEYWORD1>\r
+                       <KEYWORD1>LimitRequestBody</KEYWORD1>\r
+                       <KEYWORD1>LimitXMLRequestBody</KEYWORD1>\r
+                       <KEYWORD1>MetaDir</KEYWORD1>\r
+                       <KEYWORD1>MetaFiles</KEYWORD1>\r
+                       <KEYWORD1>MetaSuffix</KEYWORD1>\r
+                       <KEYWORD1>MultiviewsMatch</KEYWORD1>\r
+                       <KEYWORD1>Options</KEYWORD1>\r
+                       <KEYWORD1>Order</KEYWORD1>\r
+                       <KEYWORD1>PassEnv</KEYWORD1>\r
+                       <KEYWORD1>ReadmeName</KEYWORD1>\r
+                       <KEYWORD1>Redirect</KEYWORD1>\r
+                       <KEYWORD1>RedirectMatch</KEYWORD1>\r
+                       <KEYWORD1>RedirectPermanent</KEYWORD1>\r
+                       <KEYWORD1>RedirectTemp</KEYWORD1>\r
+                       <KEYWORD1>RemoveCharset</KEYWORD1>\r
+                       <KEYWORD1>RemoveEncoding</KEYWORD1>\r
+                       <KEYWORD1>RemoveHandler</KEYWORD1>\r
+                       <KEYWORD1>RemoveInputFilter</KEYWORD1>\r
+                       <KEYWORD1>RemoveLanguage</KEYWORD1>\r
+                       <KEYWORD1>RemoveOutputFilter</KEYWORD1>\r
+                       <KEYWORD1>RemoveType</KEYWORD1>\r
+                       <KEYWORD1>RequestHeader</KEYWORD1>\r
+                       <KEYWORD1>Require</KEYWORD1>\r
+                       <KEYWORD1>RewriteBase</KEYWORD1>\r
+                       <KEYWORD1>RewriteCond</KEYWORD1>\r
+                       <KEYWORD1>RewriteEngine</KEYWORD1>\r
+                       <KEYWORD1>RewriteOptions</KEYWORD1>\r
+                       <KEYWORD1>RewriteRule</KEYWORD1>\r
+                       <KEYWORD1>RLimitCPU</KEYWORD1>\r
+                       <KEYWORD1>RLimitMEM</KEYWORD1>\r
+                       <KEYWORD1>RLimitNPROC</KEYWORD1>\r
+                       <KEYWORD1>Satisfy</KEYWORD1>\r
+                       <KEYWORD1>ScriptInterpreterSource</KEYWORD1>\r
+                       <KEYWORD1>ServerSignature</KEYWORD1>\r
+                       <KEYWORD1>SetEnv</KEYWORD1>\r
+                       <KEYWORD1>SetEnvIf</KEYWORD1>\r
+                       <KEYWORD1>SetEnvIfNoCase</KEYWORD1>\r
+                       <KEYWORD1>SetHandler</KEYWORD1>\r
+                       <KEYWORD1>SetInputFilter</KEYWORD1>\r
+                       <KEYWORD1>SetOutputFilter</KEYWORD1>\r
+                       <KEYWORD1>SSIErrorMsg</KEYWORD1>\r
+                       <KEYWORD1>SSITimeFormat</KEYWORD1>\r
+                       <KEYWORD1>SSLCipherSuite</KEYWORD1>\r
+                       <KEYWORD1>SSLOptions</KEYWORD1>\r
+                       <KEYWORD1>SSLProxyCipherSuite</KEYWORD1>\r
+                       <KEYWORD1>SSLProxyVerify</KEYWORD1>\r
+                       <KEYWORD1>SSLProxyVerifyDepth</KEYWORD1>\r
+                       <KEYWORD1>SSLRequire</KEYWORD1>\r
+                       <KEYWORD1>SSLRequireSSL</KEYWORD1>\r
+                       <KEYWORD1>SSLUserName</KEYWORD1>\r
+                       <KEYWORD1>SSLVerifyClient</KEYWORD1>\r
+                       <KEYWORD1>SSLVerifyDepth</KEYWORD1>\r
+                       <KEYWORD1>UnsetEnv</KEYWORD1>\r
+                       <KEYWORD1>XBitHack</KEYWORD1>\r
+\r
+                       <LITERAL3>Basic</LITERAL3>\r
+                       <LITERAL3>Digest</LITERAL3>\r
+                       <LITERAL3>None</LITERAL3>\r
+                       <LITERAL3>Off</LITERAL3>\r
+                       <LITERAL3>On</LITERAL3>\r
+               </KEYWORDS>\r
+\r
+       </RULES>\r
+\r
+       <RULES SET="DIRECTIVE" DEFAULT="NULL" ESCAPE="\" IGNORE_CASE="TRUE">\r
+\r
+               <EOL_SPAN TYPE="COMMENT2">#</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN_REGEXP HASH_CHAR="&lt;" TYPE="MARKUP" DELEGATE="DIRECTIVE">\r
+                       <BEGIN><![CDATA[<(\w+)[^>]*>]]></BEGIN>\r
+                       <END><![CDATA[</$1>]]></END>\r
+               </SPAN_REGEXP>\r
+\r
+               <KEYWORDS>\r
+\r
+                       <KEYWORD2>AcceptMutex</KEYWORD2>\r
+                       <KEYWORD2>AcceptPathInfo</KEYWORD2>\r
+                       <KEYWORD2>AccessFileName</KEYWORD2>\r
+                       <KEYWORD2>Action</KEYWORD2>\r
+                       <KEYWORD2>AddAlt</KEYWORD2>\r
+                       <KEYWORD2>AddAltByEncoding</KEYWORD2>\r
+                       <KEYWORD2>AddAltByType</KEYWORD2>\r
+                       <KEYWORD2>AddCharset</KEYWORD2>\r
+                       <KEYWORD2>AddDefaultCharset</KEYWORD2>\r
+                       <KEYWORD2>AddDescription</KEYWORD2>\r
+                       <KEYWORD2>AddEncoding</KEYWORD2>\r
+                       <KEYWORD2>AddHandler</KEYWORD2>\r
+                       <KEYWORD2>AddIcon</KEYWORD2>\r
+                       <KEYWORD2>AddIconByEncoding</KEYWORD2>\r
+                       <KEYWORD2>AddIconByType</KEYWORD2>\r
+                       <KEYWORD2>AddInputFilter</KEYWORD2>\r
+                       <KEYWORD2>AddLanguage</KEYWORD2>\r
+                       <KEYWORD2>AddModuleInfo</KEYWORD2>\r
+                       <KEYWORD2>AddOutputFilter</KEYWORD2>\r
+                       <KEYWORD2>AddOutputFilterByType</KEYWORD2>\r
+                       <KEYWORD2>AddType</KEYWORD2>\r
+                       <KEYWORD2>Alias</KEYWORD2>\r
+                       <KEYWORD2>AliasMatch</KEYWORD2>\r
+                       <KEYWORD2>Allow</KEYWORD2>\r
+                       <KEYWORD2>AllowCONNECT</KEYWORD2>\r
+                       <KEYWORD2>AllowEncodedSlashes</KEYWORD2>\r
+                       <KEYWORD2>AllowOverride</KEYWORD2>\r
+                       <KEYWORD2>Anonymous</KEYWORD2>\r
+                       <KEYWORD2>Anonymous_Authoritative</KEYWORD2>\r
+                       <KEYWORD2>Anonymous_LogEmail</KEYWORD2>\r
+                       <KEYWORD2>Anonymous_MustGiveEmail</KEYWORD2>\r
+                       <KEYWORD2>Anonymous_NoUserID</KEYWORD2>\r
+                       <KEYWORD2>Anonymous_VerifyEmail</KEYWORD2>\r
+                       <KEYWORD2>AuthAuthoritative</KEYWORD2>\r
+                       <KEYWORD2>AuthDBMAuthoritative</KEYWORD2>\r
+                       <KEYWORD2>AuthDBMGroupFile</KEYWORD2>\r
+                       <KEYWORD2>AuthDBMType</KEYWORD2>\r
+                       <KEYWORD2>AuthDBMUserFile</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestAlgorithm</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestDomain</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestFile</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestGroupFile</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestNcCheck</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestNonceFormat</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestNonceLifetime</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestQop</KEYWORD2>\r
+                       <KEYWORD2>AuthDigestShmemSize</KEYWORD2>\r
+                       <KEYWORD2>AuthGroupFile</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPAuthoritative</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPBindDN</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPBindPassword</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPCharsetConfig</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPCompareDNOnServer</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPDereferenceAliases</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPEnabled</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPFrontPageHack</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPGroupAttribute</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPGroupAttributeIsDN</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPRemoteUserIsDN</KEYWORD2>\r
+                       <KEYWORD2>AuthLDAPUrl</KEYWORD2>\r
+                       <KEYWORD2>AuthName</KEYWORD2>\r
+                       <KEYWORD2>AuthType</KEYWORD2>\r
+                       <KEYWORD2>AuthUserFile</KEYWORD2>\r
+                       <KEYWORD2>BS2000Account</KEYWORD2>\r
+                       <KEYWORD2>BrowserMatch</KEYWORD2>\r
+                       <KEYWORD2>BrowserMatchNoCase</KEYWORD2>\r
+                       <KEYWORD2>CGIMapExtension</KEYWORD2>\r
+                       <KEYWORD2>CacheDefaultExpire</KEYWORD2>\r
+                       <KEYWORD2>CacheDirLength</KEYWORD2>\r
+                       <KEYWORD2>CacheDirLevels</KEYWORD2>\r
+                       <KEYWORD2>CacheDisable</KEYWORD2>\r
+                       <KEYWORD2>CacheEnable</KEYWORD2>\r
+                       <KEYWORD2>CacheExpiryCheck</KEYWORD2>\r
+                       <KEYWORD2>CacheFile</KEYWORD2>\r
+                       <KEYWORD2>CacheForceCompletion</KEYWORD2>\r
+                       <KEYWORD2>CacheGcClean</KEYWORD2>\r
+                       <KEYWORD2>CacheGcDaily</KEYWORD2>\r
+                       <KEYWORD2>CacheGcInterval</KEYWORD2>\r
+                       <KEYWORD2>CacheGcMemUsage</KEYWORD2>\r
+                       <KEYWORD2>CacheGcUnused</KEYWORD2>\r
+                       <KEYWORD2>CacheIgnoreCacheControl</KEYWORD2>\r
+                       <KEYWORD2>CacheIgnoreNoLastMod</KEYWORD2>\r
+                       <KEYWORD2>CacheLastModifiedFactor</KEYWORD2>\r
+                       <KEYWORD2>CacheMaxExpire</KEYWORD2>\r
+                       <KEYWORD2>CacheMaxFileSize</KEYWORD2>\r
+                       <KEYWORD2>CacheMinFileSize</KEYWORD2>\r
+                       <KEYWORD2>CacheNegotiatedDocs</KEYWORD2>\r
+                       <KEYWORD2>CacheRoot</KEYWORD2>\r
+                       <KEYWORD2>CacheSize</KEYWORD2>\r
+                       <KEYWORD2>CacheTimeMargin</KEYWORD2>\r
+                       <KEYWORD2>CharsetDefault</KEYWORD2>\r
+                       <KEYWORD2>CharsetOptions</KEYWORD2>\r
+                       <KEYWORD2>CharsetSourceEnc</KEYWORD2>\r
+                       <KEYWORD2>CheckSpelling</KEYWORD2>\r
+                       <KEYWORD2>ChildPerUserID</KEYWORD2>\r
+                       <KEYWORD2>ContentDigest</KEYWORD2>\r
+                       <KEYWORD2>CookieDomain</KEYWORD2>\r
+                       <KEYWORD2>CookieExpires</KEYWORD2>\r
+                       <KEYWORD2>CookieLog</KEYWORD2>\r
+                       <KEYWORD2>CookieName</KEYWORD2>\r
+                       <KEYWORD2>CookieStyle</KEYWORD2>\r
+                       <KEYWORD2>CookieTracking</KEYWORD2>\r
+                       <KEYWORD2>CoreDumpDirectory</KEYWORD2>\r
+                       <KEYWORD2>CustomLog</KEYWORD2>\r
+                       <KEYWORD2>Dav</KEYWORD2>\r
+                       <KEYWORD2>DavDepthInfinity</KEYWORD2>\r
+                       <KEYWORD2>DavLockDB</KEYWORD2>\r
+                       <KEYWORD2>DavMinTimeout</KEYWORD2>\r
+                       <KEYWORD2>DefaultIcon</KEYWORD2>\r
+                       <KEYWORD2>DefaultLanguage</KEYWORD2>\r
+                       <KEYWORD2>DefaultType</KEYWORD2>\r
+                       <KEYWORD2>DeflateBufferSize</KEYWORD2>\r
+                       <KEYWORD2>DeflateCompressionLevel</KEYWORD2>\r
+                       <KEYWORD2>DeflateFilterNote</KEYWORD2>\r
+                       <KEYWORD2>DeflateMemLevel</KEYWORD2>\r
+                       <KEYWORD2>DeflateWindowSize</KEYWORD2>\r
+                       <KEYWORD2>Deny</KEYWORD2>\r
+                       <KEYWORD2>DirectoryIndex</KEYWORD2>\r
+                       <KEYWORD1>DirectorySlash</KEYWORD1>\r
+                       <KEYWORD2>DocumentRoot</KEYWORD2>\r
+                       <KEYWORD2>EnableMMAP</KEYWORD2>\r
+                       <KEYWORD2>EnableSendfile</KEYWORD2>\r
+                       <KEYWORD2>ErrorDocument</KEYWORD2>\r
+                       <KEYWORD2>ErrorLog</KEYWORD2>\r
+                       <KEYWORD2>Example</KEYWORD2>\r
+                       <KEYWORD2>ExpiresActive</KEYWORD2>\r
+                       <KEYWORD2>ExpiresByType</KEYWORD2>\r
+                       <KEYWORD2>ExpiresDefault</KEYWORD2>\r
+                       <KEYWORD2>ExtFilterDefine</KEYWORD2>\r
+                       <KEYWORD2>ExtFilterOptions</KEYWORD2>\r
+                       <KEYWORD2>ExtendedStatus</KEYWORD2>\r
+                       <KEYWORD2>FileETag</KEYWORD2>\r
+                       <KEYWORD2>ForceLanguagePriority</KEYWORD2>\r
+                       <KEYWORD2>ForceType</KEYWORD2>\r
+                       <KEYWORD2>Group</KEYWORD2>\r
+                       <KEYWORD2>Header</KEYWORD2>\r
+                       <KEYWORD2>HeaderName</KEYWORD2>\r
+                       <KEYWORD2>HostnameLookups</KEYWORD2>\r
+                       <KEYWORD2>ISAPIAppendLogToErrors</KEYWORD2>\r
+                       <KEYWORD2>ISAPIAppendLogToQuery</KEYWORD2>\r
+                       <KEYWORD2>ISAPICacheFile</KEYWORD2>\r
+                       <KEYWORD2>ISAPIFakeAsync</KEYWORD2>\r
+                       <KEYWORD2>ISAPILogNotSupported</KEYWORD2>\r
+                       <KEYWORD2>ISAPIReadAheadBuffer</KEYWORD2>\r
+                       <KEYWORD2>IdentityCheck</KEYWORD2>\r
+                       <KEYWORD2>ImapBase</KEYWORD2>\r
+                       <KEYWORD2>ImapDefault</KEYWORD2>\r
+                       <KEYWORD2>ImapMenu</KEYWORD2>\r
+                       <KEYWORD2>Include</KEYWORD2>\r
+                       <KEYWORD2>IndexIgnore</KEYWORD2>\r
+                       <KEYWORD2>IndexOptions</KEYWORD2>\r
+                       <KEYWORD2>IndexOrderDefault</KEYWORD2>\r
+                       <KEYWORD2>KeepAlive</KEYWORD2>\r
+                       <KEYWORD2>KeepAliveTimeout</KEYWORD2>\r
+                       <KEYWORD2>LDAPCacheEntries</KEYWORD2>\r
+                       <KEYWORD2>LDAPCacheTTL</KEYWORD2>\r
+                       <KEYWORD2>LDAPOpCacheEntries</KEYWORD2>\r
+                       <KEYWORD2>LDAPOpCacheTTL</KEYWORD2>\r
+                       <KEYWORD2>LDAPSharedCacheSize</KEYWORD2>\r
+                       <KEYWORD2>LDAPTrustedCA</KEYWORD2>\r
+                       <KEYWORD2>LDAPTrustedCAType</KEYWORD2>\r
+                       <KEYWORD2>LanguagePriority</KEYWORD2>\r
+                       <KEYWORD2>LimitInternalRecursion</KEYWORD2>\r
+                       <KEYWORD2>LimitRequestBody</KEYWORD2>\r
+                       <KEYWORD2>LimitRequestFields</KEYWORD2>\r
+                       <KEYWORD2>LimitRequestFieldsize</KEYWORD2>\r
+                       <KEYWORD2>LimitRequestLine</KEYWORD2>\r
+                       <KEYWORD2>LimitXMLRequestBody</KEYWORD2>\r
+                       <KEYWORD2>Listen</KEYWORD2>\r
+                       <KEYWORD2>ListenBacklog</KEYWORD2>\r
+                       <KEYWORD2>LoadFile</KEYWORD2>\r
+                       <KEYWORD2>LoadModule</KEYWORD2>\r
+                       <KEYWORD2>LockFile</KEYWORD2>\r
+                       <KEYWORD2>LogFormat</KEYWORD2>\r
+                       <KEYWORD2>LogLevel</KEYWORD2>\r
+                       <KEYWORD2>MCacheMaxObjectCount</KEYWORD2>\r
+                       <KEYWORD2>MCacheMaxObjectSize</KEYWORD2>\r
+                       <KEYWORD2>MCacheMaxStreamingBuffer</KEYWORD2>\r
+                       <KEYWORD2>MCacheMinObjectSize</KEYWORD2>\r
+                       <KEYWORD2>MCacheRemovalAlgorithm</KEYWORD2>\r
+                       <KEYWORD2>MCacheSize</KEYWORD2>\r
+                       <KEYWORD2>MMapFile</KEYWORD2>\r
+                       <KEYWORD2>MaxClients</KEYWORD2>\r
+                       <KEYWORD2>MaxKeepAliveRequests</KEYWORD2>\r
+                       <KEYWORD2>MaxMemFree</KEYWORD2>\r
+                       <KEYWORD2>MaxRequestsPerChild</KEYWORD2>\r
+                       <KEYWORD2>MaxRequestsPerThread</KEYWORD2>\r
+                       <KEYWORD2>MaxSpareServers</KEYWORD2>\r
+                       <KEYWORD2>MaxSpareThreads</KEYWORD2>\r
+                       <KEYWORD2>MaxThreads</KEYWORD2>\r
+                       <KEYWORD2>MaxThreadsPerChild</KEYWORD2>\r
+                       <KEYWORD2>MetaDir</KEYWORD2>\r
+                       <KEYWORD2>MetaFiles</KEYWORD2>\r
+                       <KEYWORD2>MetaSuffix</KEYWORD2>\r
+                       <KEYWORD2>MimeMagicFile</KEYWORD2>\r
+                       <KEYWORD2>MinSpareServers</KEYWORD2>\r
+                       <KEYWORD2>MinSpareThreads</KEYWORD2>\r
+                       <KEYWORD2>ModMimeUsePathInfo</KEYWORD2>\r
+                       <KEYWORD2>MultiviewsMatch</KEYWORD2>\r
+                       <KEYWORD2>NWSSLTrustedCerts</KEYWORD2>\r
+                       <KEYWORD2>NameVirtualHost</KEYWORD2>\r
+                       <KEYWORD2>NoProxy</KEYWORD2>\r
+                       <KEYWORD2>NumServers</KEYWORD2>\r
+                       <KEYWORD2>Options</KEYWORD2>\r
+                       <KEYWORD2>Order</KEYWORD2>\r
+                       <KEYWORD2>PassEnv</KEYWORD2>\r
+                       <KEYWORD2>PidFile</KEYWORD2>\r
+                       <KEYWORD2>ProtocolEcho</KEYWORD2>\r
+                       <KEYWORD2>ProxyBadHeader</KEYWORD2>\r
+                       <KEYWORD2>ProxyBlock</KEYWORD2>\r
+                       <KEYWORD2>ProxyDomain</KEYWORD2>\r
+                       <KEYWORD2>ProxyErrorOverride</KEYWORD2>\r
+                       <KEYWORD2>ProxyIOBufferSize</KEYWORD2>\r
+                       <KEYWORD2>ProxyMaxForwards</KEYWORD2>\r
+                       <KEYWORD2>ProxyPass</KEYWORD2>\r
+                       <KEYWORD2>ProxyPassReverse</KEYWORD2>\r
+                       <KEYWORD2>ProxyPreserveHost</KEYWORD2>\r
+                       <KEYWORD2>ProxyReceiveBufferSize</KEYWORD2>\r
+                       <KEYWORD2>ProxyRemote</KEYWORD2>\r
+                       <KEYWORD2>ProxyRemoteMatch</KEYWORD2>\r
+                       <KEYWORD2>ProxyRequests</KEYWORD2>\r
+                       <KEYWORD2>ProxyTimeout</KEYWORD2>\r
+                       <KEYWORD2>ProxyVia</KEYWORD2>\r
+                       <KEYWORD2>RLimitCPU</KEYWORD2>\r
+                       <KEYWORD2>RLimitMEM</KEYWORD2>\r
+                       <KEYWORD2>RLimitNPROC</KEYWORD2>\r
+                       <KEYWORD2>ReadmeName</KEYWORD2>\r
+                       <KEYWORD2>Redirect</KEYWORD2>\r
+                       <KEYWORD2>RedirectMatch</KEYWORD2>\r
+                       <KEYWORD2>RedirectPermanent</KEYWORD2>\r
+                       <KEYWORD2>RedirectTemp</KEYWORD2>\r
+                       <KEYWORD2>RemoveCharset</KEYWORD2>\r
+                       <KEYWORD2>RemoveEncoding</KEYWORD2>\r
+                       <KEYWORD2>RemoveHandler</KEYWORD2>\r
+                       <KEYWORD2>RemoveInputFilter</KEYWORD2>\r
+                       <KEYWORD2>RemoveLanguage</KEYWORD2>\r
+                       <KEYWORD2>RemoveOutputFilter</KEYWORD2>\r
+                       <KEYWORD2>RemoveType</KEYWORD2>\r
+                       <KEYWORD2>RequestHeader</KEYWORD2>\r
+                       <KEYWORD2>Require</KEYWORD2>\r
+                       <KEYWORD2>RewriteBase</KEYWORD2>\r
+                       <KEYWORD2>RewriteCond</KEYWORD2>\r
+                       <KEYWORD2>RewriteEngine</KEYWORD2>\r
+                       <KEYWORD2>RewriteLock</KEYWORD2>\r
+                       <KEYWORD2>RewriteLog</KEYWORD2>\r
+                       <KEYWORD2>RewriteLogLevel</KEYWORD2>\r
+                       <KEYWORD2>RewriteMap</KEYWORD2>\r
+                       <KEYWORD2>RewriteOptions</KEYWORD2>\r
+                       <KEYWORD2>RewriteRule</KEYWORD2>\r
+                       <KEYWORD2>SSIEndTag</KEYWORD2>\r
+                       <KEYWORD2>SSIErrorMsg</KEYWORD2>\r
+                       <KEYWORD2>SSIStartTag</KEYWORD2>\r
+                       <KEYWORD2>SSITimeFormat</KEYWORD2>\r
+                       <KEYWORD2>SSIUndefinedEcho</KEYWORD2>\r
+                       <KEYWORD2>SSLCACertificateFile</KEYWORD2>\r
+                       <KEYWORD2>SSLCACertificatePath</KEYWORD2>\r
+                       <KEYWORD2>SSLCARevocationFile</KEYWORD2>\r
+                       <KEYWORD2>SSLCARevocationPath</KEYWORD2>\r
+                       <KEYWORD2>SSLCertificateChainFile</KEYWORD2>\r
+                       <KEYWORD2>SSLCertificateFile</KEYWORD2>\r
+                       <KEYWORD2>SSLCertificateKeyFile</KEYWORD2>\r
+                       <KEYWORD2>SSLCipherSuite</KEYWORD2>\r
+                       <KEYWORD2>SSLEngine</KEYWORD2>\r
+                       <KEYWORD2>SSLMutex</KEYWORD2>\r
+                       <KEYWORD2>SSLOptions</KEYWORD2>\r
+                       <KEYWORD2>SSLPassPhraseDialog</KEYWORD2>\r
+                       <KEYWORD2>SSLProtocol</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyCACertificateFile</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyCACertificatePath</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyCARevocationFile</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyCARevocationPath</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyCipherSuite</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyEngine</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyMachineCertificateFile</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyMachineCertificatePath</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyProtocol</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyVerify</KEYWORD2>\r
+                       <KEYWORD2>SSLProxyVerifyDepth</KEYWORD2>\r
+                       <KEYWORD2>SSLRandomSeed</KEYWORD2>\r
+                       <KEYWORD2>SSLRequire</KEYWORD2>\r
+                       <KEYWORD2>SSLRequireSSL</KEYWORD2>\r
+                       <KEYWORD2>SSLSessionCache</KEYWORD2>\r
+                       <KEYWORD2>SSLSessionCacheTimeout</KEYWORD2>\r
+                       <KEYWORD2>SSLVerifyClient</KEYWORD2>\r
+                       <KEYWORD2>SSLVerifyDepth</KEYWORD2>\r
+                       <KEYWORD2>Satisfy</KEYWORD2>\r
+                       <KEYWORD2>ScoreBoardFile</KEYWORD2>\r
+                       <KEYWORD2>Script</KEYWORD2>\r
+                       <KEYWORD2>ScriptAlias</KEYWORD2>\r
+                       <KEYWORD2>ScriptAliasMatch</KEYWORD2>\r
+                       <KEYWORD2>ScriptInterpreterSource</KEYWORD2>\r
+                       <KEYWORD2>ScriptLog</KEYWORD2>\r
+                       <KEYWORD2>ScriptLogBuffer</KEYWORD2>\r
+                       <KEYWORD2>ScriptLogLength</KEYWORD2>\r
+                       <KEYWORD2>ScriptSock</KEYWORD2>\r
+                       <KEYWORD2>SecureListen</KEYWORD2>\r
+                       <KEYWORD2>SendBufferSize</KEYWORD2>\r
+                       <KEYWORD2>ServerAdmin</KEYWORD2>\r
+                       <KEYWORD2>ServerLimit</KEYWORD2>\r
+                       <KEYWORD2>ServerName</KEYWORD2>\r
+                       <KEYWORD2>ServerRoot</KEYWORD2>\r
+                       <KEYWORD2>ServerSignature</KEYWORD2>\r
+                       <KEYWORD2>ServerTokens</KEYWORD2>\r
+                       <KEYWORD2>SetEnv</KEYWORD2>\r
+                       <KEYWORD2>SetEnvIf</KEYWORD2>\r
+                       <KEYWORD2>SetEnvIfNoCase</KEYWORD2>\r
+                       <KEYWORD2>SetHandler</KEYWORD2>\r
+                       <KEYWORD2>SetInputFilter</KEYWORD2>\r
+                       <KEYWORD2>SetOutputFilter</KEYWORD2>\r
+                       <KEYWORD2>StartServers</KEYWORD2>\r
+                       <KEYWORD2>StartThreads</KEYWORD2>\r
+                       <KEYWORD2>SuexecUserGroup</KEYWORD2>\r
+                       <KEYWORD2>ThreadLimit</KEYWORD2>\r
+                       <KEYWORD2>ThreadStackSize</KEYWORD2>\r
+                       <KEYWORD2>ThreadsPerChild</KEYWORD2>\r
+                       <KEYWORD2>TimeOut</KEYWORD2>\r
+                       <KEYWORD2>TransferLog</KEYWORD2>\r
+                       <KEYWORD2>TypesConfig</KEYWORD2>\r
+                       <KEYWORD2>UnsetEnv</KEYWORD2>\r
+                       <KEYWORD2>UseCanonicalName</KEYWORD2>\r
+                       <KEYWORD2>User</KEYWORD2>\r
+                       <KEYWORD2>UserDir</KEYWORD2>\r
+                       <KEYWORD2>VirtualDocumentRoot</KEYWORD2>\r
+                       <KEYWORD2>VirtualDocumentRootIP</KEYWORD2>\r
+                       <KEYWORD2>VirtualScriptAlias</KEYWORD2>\r
+                       <KEYWORD2>VirtualScriptAliasIP</KEYWORD2>\r
+                       <KEYWORD2>XBitHack</KEYWORD2>\r
+\r
+                       <!-- Apache 1.x -->\r
+                       <!-- using 4 for apache 1.x vs 2.x -->\r
+                       <KEYWORD4>AddModule</KEYWORD4>\r
+                       <KEYWORD4>ClearModuleList</KEYWORD4>\r
+\r
+                       <!-- Subversion directives -->\r
+                       <KEYWORD3>SVNPath</KEYWORD3>\r
+                       <KEYWORD3>SVNParentPath</KEYWORD3>\r
+                       <KEYWORD3>SVNIndexXSLT</KEYWORD3>\r
+\r
+                       <!-- mod_python directives -->\r
+                       <KEYWORD3>PythonHandler</KEYWORD3>\r
+                       <KEYWORD3>PythonDebug</KEYWORD3>\r
+\r
+                       <!-- mod_php -->\r
+                       <KEYWORD3>php_value</KEYWORD3>\r
+                       <!-- using 4 for apache 1.x vs 2.x -->\r
+                       <KEYWORD4>php_flag</KEYWORD4>\r
+\r
+                       <LITERAL2>All</LITERAL2>\r
+                       <LITERAL2>ExecCGI</LITERAL2>\r
+                       <LITERAL2>FollowSymLinks</LITERAL2>\r
+                       <LITERAL2>Includes</LITERAL2>\r
+                       <LITERAL2>IncludesNOEXEC</LITERAL2>\r
+                       <LITERAL2>Indexes</LITERAL2>\r
+                       <LITERAL2>MultiViews</LITERAL2>\r
+                       <LITERAL2>None</LITERAL2>\r
+                       <LITERAL2>Off</LITERAL2>\r
+                       <LITERAL2>On</LITERAL2>\r
+                       <LITERAL2>SymLinksIfOwnerMatch</LITERAL2>\r
+                       <LITERAL2>from</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/html.xml b/extra/xmode/modes/html.xml
new file mode 100644 (file)
index 0000000..a5af604
--- /dev/null
@@ -0,0 +1,174 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="TRUE">\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="JAVASCRIPT">\r
+                       <BEGIN>&lt;SCRIPT</BEGIN>\r
+                       <END>&lt;/SCRIPT&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="CSS">\r
+                       <BEGIN>&lt;STYLE</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD instructions -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">\r
+                       <BEGIN>&lt;!</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <!-- ESCAPE is not exactly right but it is needed to correctly\r
+            handle JavaScript in on* parameters -->\r
+       <RULES SET="TAGS" DEFAULT="MARKUP" ESCAPE="\">\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <!-- HTML/XHTML elements, taken from http://de.selfhtml.org/html/referenz/elemente.htm -->\r
+                       <KEYWORD1>fieldset</KEYWORD1>\r
+                       <KEYWORD1>a</KEYWORD1>\r
+                       <KEYWORD1>abbr</KEYWORD1>\r
+                       <KEYWORD1>acronym</KEYWORD1>\r
+                       <KEYWORD1>address</KEYWORD1>\r
+                       <KEYWORD1>applet</KEYWORD1>\r
+                       <KEYWORD1>area</KEYWORD1>\r
+                       <KEYWORD1>b</KEYWORD1>\r
+                       <KEYWORD1>base</KEYWORD1>\r
+                       <KEYWORD1>basefont</KEYWORD1>\r
+                       <KEYWORD1>bdo</KEYWORD1>\r
+                       <KEYWORD1>big</KEYWORD1>\r
+                       <KEYWORD1>blockquote</KEYWORD1>\r
+                       <KEYWORD1>body</KEYWORD1>\r
+                       <KEYWORD1>br</KEYWORD1>\r
+                       <KEYWORD1>button</KEYWORD1>\r
+                       <KEYWORD1>caption</KEYWORD1>\r
+                       <KEYWORD1>center</KEYWORD1>\r
+                       <KEYWORD1>cite</KEYWORD1>\r
+                       <KEYWORD1>code</KEYWORD1>\r
+                       <KEYWORD1>col</KEYWORD1>\r
+                       <KEYWORD1>colgroup</KEYWORD1>\r
+                       <KEYWORD1>dd</KEYWORD1>\r
+                       <KEYWORD1>del</KEYWORD1>\r
+                       <KEYWORD1>dfn</KEYWORD1>\r
+                       <KEYWORD1>dir</KEYWORD1>\r
+                       <KEYWORD1>div</KEYWORD1>\r
+                       <KEYWORD1>dl</KEYWORD1>\r
+                       <KEYWORD1>dt</KEYWORD1>\r
+                       <KEYWORD1>em</KEYWORD1>\r
+                       <KEYWORD1>fieldset</KEYWORD1>\r
+                       <KEYWORD1>font</KEYWORD1>\r
+                       <KEYWORD1>form</KEYWORD1>\r
+                       <KEYWORD1>frame</KEYWORD1>\r
+                       <KEYWORD1>frameset</KEYWORD1>\r
+                       <KEYWORD1>h1</KEYWORD1>\r
+                       <KEYWORD1>h2</KEYWORD1>\r
+                       <KEYWORD1>h3</KEYWORD1>\r
+                       <KEYWORD1>h4</KEYWORD1>\r
+                       <KEYWORD1>h5</KEYWORD1>\r
+                       <KEYWORD1>h6</KEYWORD1>\r
+                       <KEYWORD1>head</KEYWORD1>\r
+                       <KEYWORD1>hr</KEYWORD1>\r
+                       <KEYWORD1>html</KEYWORD1>\r
+                       <KEYWORD1>i</KEYWORD1>\r
+                       <KEYWORD1>iframe</KEYWORD1>\r
+                       <KEYWORD1>img</KEYWORD1>\r
+                       <KEYWORD1>input</KEYWORD1>\r
+                       <KEYWORD1>ins</KEYWORD1>\r
+                       <KEYWORD1>isindex</KEYWORD1>\r
+                       <KEYWORD1>kbd</KEYWORD1>\r
+                       <KEYWORD1>label</KEYWORD1>\r
+                       <KEYWORD1>legend</KEYWORD1>\r
+                       <KEYWORD1>li</KEYWORD1>\r
+                       <KEYWORD1>link</KEYWORD1>\r
+                       <KEYWORD1>map</KEYWORD1>\r
+                       <KEYWORD1>menu</KEYWORD1>\r
+                       <KEYWORD1>meta</KEYWORD1>\r
+                       <KEYWORD1>noframes</KEYWORD1>\r
+                       <KEYWORD1>noscript</KEYWORD1>\r
+                       <KEYWORD1>object</KEYWORD1>\r
+                       <KEYWORD1>ol</KEYWORD1>\r
+                       <KEYWORD1>optgroup</KEYWORD1>\r
+                       <KEYWORD1>option</KEYWORD1>\r
+                       <KEYWORD1>p</KEYWORD1>\r
+                       <KEYWORD1>param</KEYWORD1>\r
+                       <KEYWORD1>pre</KEYWORD1>\r
+                       <KEYWORD1>q</KEYWORD1>\r
+                       <KEYWORD1>s</KEYWORD1>\r
+                       <KEYWORD1>samp</KEYWORD1>\r
+                       <KEYWORD1>script</KEYWORD1>\r
+                       <KEYWORD1>select</KEYWORD1>\r
+                       <KEYWORD1>small</KEYWORD1>\r
+                       <KEYWORD1>span</KEYWORD1>\r
+                       <KEYWORD1>strike</KEYWORD1>\r
+                       <KEYWORD1>strong</KEYWORD1>\r
+                       <KEYWORD1>style</KEYWORD1>\r
+                       <KEYWORD1>sub</KEYWORD1>\r
+                       <KEYWORD1>sup</KEYWORD1>\r
+                       <KEYWORD1>table</KEYWORD1>\r
+                       <KEYWORD1>tbody</KEYWORD1>\r
+                       <KEYWORD1>td</KEYWORD1>\r
+                       <KEYWORD1>textarea</KEYWORD1>\r
+                       <KEYWORD1>tfoot</KEYWORD1>\r
+                       <KEYWORD1>th</KEYWORD1>\r
+                       <KEYWORD1>thead</KEYWORD1>\r
+                       <KEYWORD1>title</KEYWORD1>\r
+                       <KEYWORD1>tr</KEYWORD1>\r
+                       <KEYWORD1>tt</KEYWORD1>\r
+                       <KEYWORD1>u</KEYWORD1>\r
+                       <KEYWORD1>ul</KEYWORD1>\r
+                       <KEYWORD1>var</KEYWORD1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="JAVASCRIPT" DEFAULT="MARKUP" IGNORE_CASE="TRUE">\r
+               <SEQ TYPE="MARKUP" DELEGATE="javascript::MAIN">&gt;</SEQ>\r
+               <!-- handle <SCRIPT SRC="..."> properly -->\r
+               <SEQ TYPE="MARKUP" DELEGATE="BACK_TO_HTML">SRC=</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="BACK_TO_HTML" DEFAULT="MARKUP">\r
+               <SEQ TYPE="MARKUP" DELEGATE="html::MAIN">&gt;</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="CSS" DEFAULT="MARKUP">\r
+               <SEQ TYPE="MARKUP" DELEGATE="css::MAIN">&gt;</SEQ>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/i4gl.xml b/extra/xmode/modes/i4gl.xml
new file mode 100644 (file)
index 0000000..0c50648
--- /dev/null
@@ -0,0 +1,665 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- i4gl.xml -->\r
+<!-- Informix 4GL mode, by Jozsa Stefan, joozsa@flash.ro -->\r
+<!-- Based on 'reserved.Z' from www.iiug.org by J.Leffler -->\r
+\r
+<MODE>\r
+\r
+  <PROPS>\r
+    <PROPERTY NAME="commentStart" VALUE="{" />\r
+    <PROPERTY NAME="commentEnd" VALUE="}" />\r
+    <PROPERTY NAME="lineComment" VALUE="--" />\r
+    <PROPERTY NAME="noWordSep" VALUE="_" />\r
+    <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+  </PROPS>\r
+\r
+  <RULES ESCAPE="\" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+\r
+    <SPAN TYPE="LITERAL1">\r
+      <BEGIN>'</BEGIN>\r
+      <END>'</END>\r
+     </SPAN>\r
+\r
+    <SPAN TYPE="LITERAL1">\r
+      <BEGIN>"</BEGIN>\r
+       <END>"</END>\r
+     </SPAN>\r
+\r
+    <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>\r
+    <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+     <SPAN TYPE="COMMENT1">\r
+      <BEGIN>{</BEGIN>\r
+      <END>}</END>\r
+     </SPAN>\r
+\r
+    <SEQ TYPE="NULL">)</SEQ>\r
+    <!-- <SEQ TYPE="NULL">(</SEQ> -->\r
+    <SEQ TYPE="NULL">]</SEQ>\r
+    <SEQ TYPE="NULL">[</SEQ>\r
+    <SEQ TYPE="NULL">.</SEQ>\r
+    <SEQ TYPE="NULL">,</SEQ>\r
+    <SEQ TYPE="NULL">;</SEQ>\r
+    <SEQ TYPE="NULL">:</SEQ>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">==</SEQ>\r
+    <SEQ TYPE="OPERATOR">!=</SEQ>\r
+    <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+    <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+    <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">+</SEQ>\r
+    <SEQ TYPE="OPERATOR">-</SEQ>\r
+    <SEQ TYPE="OPERATOR">/</SEQ>\r
+    <SEQ TYPE="OPERATOR">*</SEQ>\r
+    <SEQ TYPE="OPERATOR">||</SEQ>\r
+\r
+     <!-- Function calls -->\r
+    <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+       <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+    <KEYWORDS>\r
+\r
+      <!-- 4GL Reserved Keywords. -->\r
+      <!-- Many keywords because SQL is embeded in 4GL -->\r
+      <KEYWORD1>ABORT</KEYWORD1>\r
+      <KEYWORD1>ABS</KEYWORD1>\r
+      <KEYWORD1>ABSOLUTE</KEYWORD1>\r
+      <KEYWORD1>ACCEPT</KEYWORD1>\r
+      <KEYWORD1>ACCESS</KEYWORD1>\r
+      <KEYWORD1>ACOS</KEYWORD1>\r
+      <KEYWORD1>ADA</KEYWORD1>\r
+      <KEYWORD1>ADD</KEYWORD1>\r
+      <KEYWORD1>AFTER</KEYWORD1>\r
+      <KEYWORD1>ALL</KEYWORD1>\r
+      <KEYWORD1>ALLOCATE</KEYWORD1>\r
+      <KEYWORD1>ALTER</KEYWORD1>\r
+      <KEYWORD1>AND</KEYWORD1>\r
+      <KEYWORD1>ANSI</KEYWORD1>\r
+      <KEYWORD1>ANY</KEYWORD1>\r
+      <KEYWORD1>APPEND</KEYWORD1>\r
+      <KEYWORD1>ARG_VAL</KEYWORD1>\r
+      <KEYWORD1>ARRAY</KEYWORD1>\r
+      <KEYWORD1>ARR_COUNT</KEYWORD1>\r
+      <KEYWORD1>ARR_CURR</KEYWORD1>\r
+      <KEYWORD1>AS</KEYWORD1>\r
+      <KEYWORD1>ASC</KEYWORD1>\r
+      <KEYWORD1>ASCENDING</KEYWORD1>\r
+      <KEYWORD1>ASCII</KEYWORD1>\r
+      <KEYWORD1>ASIN</KEYWORD1>\r
+      <KEYWORD1>AT</KEYWORD1>\r
+      <KEYWORD1>ATAN</KEYWORD1>\r
+      <KEYWORD1>ATAN2</KEYWORD1>\r
+      <KEYWORD1>ATTACH</KEYWORD1>\r
+      <KEYWORD1>ATTRIBUTE</KEYWORD1>\r
+      <KEYWORD1>ATTRIBUTES</KEYWORD1>\r
+      <KEYWORD1>AUDIT</KEYWORD1>\r
+      <KEYWORD1>AUTHORIZATION</KEYWORD1>\r
+      <KEYWORD1>AUTO</KEYWORD1>\r
+      <KEYWORD1>AUTONEXT</KEYWORD1>\r
+      <KEYWORD1>AVERAGE</KEYWORD1>\r
+      <KEYWORD1>AVG</KEYWORD1>\r
+      <KEYWORD1>BEFORE</KEYWORD1>\r
+      <KEYWORD1>BEGIN</KEYWORD1>\r
+      <KEYWORD1>BETWEEN</KEYWORD1>\r
+      <KEYWORD1>BLACK</KEYWORD1>\r
+      <KEYWORD1>BLINK</KEYWORD1>\r
+      <KEYWORD1>BLUE</KEYWORD1>\r
+      <KEYWORD1>BOLD</KEYWORD1>\r
+      <KEYWORD1>BORDER</KEYWORD1>\r
+      <KEYWORD1>BOTH</KEYWORD1>\r
+      <KEYWORD1>BOTTOM</KEYWORD1>\r
+      <KEYWORD1>BREAK</KEYWORD1>\r
+      <KEYWORD1>BUFFERED</KEYWORD1>\r
+      <KEYWORD1>BY</KEYWORD1>\r
+      <KEYWORD1>BYTE</KEYWORD1>\r
+      <KEYWORD1>CALL</KEYWORD1>\r
+      <KEYWORD1>CASCADE</KEYWORD1>\r
+      <KEYWORD1>CASE</KEYWORD1>\r
+      <KEYWORD1>CHAR</KEYWORD1>\r
+      <KEYWORD1>CHARACTER</KEYWORD1>\r
+      <KEYWORD1>CHARACTER_LENGTH</KEYWORD1>\r
+      <KEYWORD1>CHAR_LENGTH</KEYWORD1>\r
+      <KEYWORD1>CHECK</KEYWORD1>\r
+      <KEYWORD1>CLASS_ORIGIN</KEYWORD1>\r
+      <KEYWORD1>CLEAR</KEYWORD1>\r
+      <KEYWORD1>CLIPPED</KEYWORD1>\r
+      <KEYWORD1>CLOSE</KEYWORD1>\r
+      <KEYWORD1>CLUSTER</KEYWORD1>\r
+      <KEYWORD1>COBOL</KEYWORD1>\r
+      <KEYWORD1>COLOR</KEYWORD1>\r
+      <KEYWORD1>COLUMN</KEYWORD1>\r
+      <KEYWORD1>COLUMNS</KEYWORD1>\r
+      <KEYWORD1>COMMAND</KEYWORD1>\r
+      <KEYWORD1>COMMENT</KEYWORD1>\r
+      <KEYWORD1>COMMENTS</KEYWORD1>\r
+      <KEYWORD1>COMMIT</KEYWORD1>\r
+      <KEYWORD1>COMMITTED</KEYWORD1>\r
+      <KEYWORD1>COMPOSITES</KEYWORD1>\r
+      <KEYWORD1>COMPRESS</KEYWORD1>\r
+      <KEYWORD1>CONCURRENT</KEYWORD1>\r
+      <KEYWORD1>CONNECT</KEYWORD1>\r
+      <KEYWORD1>CONNECTION</KEYWORD1>\r
+      <KEYWORD1>CONNECTION_ALIAS</KEYWORD1>\r
+      <KEYWORD1>CONSTRAINED</KEYWORD1>\r
+      <KEYWORD1>CONSTRAINT</KEYWORD1>\r
+      <KEYWORD1>CONSTRAINTS</KEYWORD1>\r
+      <KEYWORD1>CONSTRUCT</KEYWORD1>\r
+      <KEYWORD1>CONTINUE</KEYWORD1>\r
+      <KEYWORD1>CONTROL</KEYWORD1>\r
+      <KEYWORD1>COS</KEYWORD1>\r
+      <KEYWORD1>COUNT</KEYWORD1>\r
+      <KEYWORD1>CREATE</KEYWORD1>\r
+      <KEYWORD1>CURRENT</KEYWORD1>\r
+      <KEYWORD1>CURSOR</KEYWORD1>\r
+      <KEYWORD1>CYAN</KEYWORD1>\r
+      <KEYWORD1>DATA</KEYWORD1>\r
+      <KEYWORD1>DATABASE</KEYWORD1>\r
+      <KEYWORD1>DATASKIP</KEYWORD1>\r
+      <KEYWORD1>DATE</KEYWORD1>\r
+      <KEYWORD1>DATETIME</KEYWORD1>\r
+      <KEYWORD1>DAY</KEYWORD1>\r
+      <KEYWORD1>DBA</KEYWORD1>\r
+      <KEYWORD1>DBINFO</KEYWORD1>\r
+      <KEYWORD1>DBSERVERNAME</KEYWORD1>\r
+      <KEYWORD1>DEALLOCATE</KEYWORD1>\r
+      <KEYWORD1>DEBUG</KEYWORD1>\r
+      <KEYWORD1>DEC</KEYWORD1>\r
+      <KEYWORD1>DECIMAL</KEYWORD1>\r
+      <KEYWORD1>DECLARE</KEYWORD1>\r
+      <KEYWORD1>DEFAULT</KEYWORD1>\r
+      <KEYWORD1>DEFAULTS</KEYWORD1>\r
+      <KEYWORD1>DEFER</KEYWORD1>\r
+      <KEYWORD1>DEFERRED</KEYWORD1>\r
+      <KEYWORD1>DEFINE</KEYWORD1>\r
+      <KEYWORD1>DELETE</KEYWORD1>\r
+      <KEYWORD1>DELIMITER</KEYWORD1>\r
+      <KEYWORD1>DELIMITERS</KEYWORD1>\r
+      <KEYWORD1>DESC</KEYWORD1>\r
+      <KEYWORD1>DESCENDING</KEYWORD1>\r
+      <KEYWORD1>DESCRIBE</KEYWORD1>\r
+      <KEYWORD1>DESCRIPTOR</KEYWORD1>\r
+      <KEYWORD1>DETACH</KEYWORD1>\r
+      <KEYWORD1>DIAGNOSTICS</KEYWORD1>\r
+      <KEYWORD1>DIM</KEYWORD1>\r
+      <KEYWORD1>DIRTY</KEYWORD1>\r
+      <KEYWORD1>DISABLED</KEYWORD1>\r
+      <KEYWORD1>DISCONNECT</KEYWORD1>\r
+      <KEYWORD1>DISPLAY</KEYWORD1>\r
+      <KEYWORD1>DISTINCT</KEYWORD1>\r
+      <KEYWORD1>DISTRIBUTIONS</KEYWORD1>\r
+      <KEYWORD1>DO</KEYWORD1>\r
+      <KEYWORD1>DORMANT</KEYWORD1>\r
+      <KEYWORD1>DOUBLE</KEYWORD1>\r
+      <KEYWORD1>DOWN</KEYWORD1>\r
+      <KEYWORD1>DOWNSHIFT</KEYWORD1>\r
+      <KEYWORD1>DROP</KEYWORD1>\r
+      <KEYWORD1>EACH</KEYWORD1>\r
+      <KEYWORD1>ELIF</KEYWORD1>\r
+      <KEYWORD1>ELSE</KEYWORD1>\r
+      <KEYWORD1>ENABLED</KEYWORD1>\r
+      <KEYWORD1>END</KEYWORD1>\r
+      <KEYWORD1>ENTRY</KEYWORD1>\r
+      <KEYWORD1>ERROR</KEYWORD1>\r
+      <KEYWORD1>ERRORLOG</KEYWORD1>\r
+      <KEYWORD1>ERR_GET</KEYWORD1>\r
+      <KEYWORD1>ERR_PRINT</KEYWORD1>\r
+      <KEYWORD1>ERR_QUIT</KEYWORD1>\r
+      <KEYWORD1>ESC</KEYWORD1>\r
+      <KEYWORD1>ESCAPE</KEYWORD1>\r
+      <KEYWORD1>EVERY</KEYWORD1>\r
+      <KEYWORD1>EXCEPTION</KEYWORD1>\r
+      <KEYWORD1>EXCLUSIVE</KEYWORD1>\r
+      <KEYWORD1>EXEC</KEYWORD1>\r
+      <KEYWORD1>EXECUTE</KEYWORD1>\r
+      <KEYWORD1>EXISTS</KEYWORD1>\r
+      <KEYWORD1>EXIT</KEYWORD1>\r
+      <KEYWORD1>EXP</KEYWORD1>\r
+      <KEYWORD1>EXPLAIN</KEYWORD1>\r
+      <KEYWORD1>EXPRESSION</KEYWORD1>\r
+      <KEYWORD1>EXTEND</KEYWORD1>\r
+      <KEYWORD1>EXTENT</KEYWORD1>\r
+      <KEYWORD1>EXTERN</KEYWORD1>\r
+      <KEYWORD1>EXTERNAL</KEYWORD1>\r
+      <KEYWORD1>F1</KEYWORD1>\r
+      <KEYWORD1>F10</KEYWORD1>\r
+      <KEYWORD1>F11</KEYWORD1>\r
+      <KEYWORD1>F12</KEYWORD1>\r
+      <KEYWORD1>F13</KEYWORD1>\r
+      <KEYWORD1>F14</KEYWORD1>\r
+      <KEYWORD1>F15</KEYWORD1>\r
+      <KEYWORD1>F16</KEYWORD1>\r
+      <KEYWORD1>F17</KEYWORD1>\r
+      <KEYWORD1>F18</KEYWORD1>\r
+      <KEYWORD1>F19</KEYWORD1>\r
+      <KEYWORD1>F2</KEYWORD1>\r
+      <KEYWORD1>F20</KEYWORD1>\r
+      <KEYWORD1>F21</KEYWORD1>\r
+      <KEYWORD1>F22</KEYWORD1>\r
+      <KEYWORD1>F23</KEYWORD1>\r
+      <KEYWORD1>F24</KEYWORD1>\r
+      <KEYWORD1>F25</KEYWORD1>\r
+      <KEYWORD1>F26</KEYWORD1>\r
+      <KEYWORD1>F27</KEYWORD1>\r
+      <KEYWORD1>F28</KEYWORD1>\r
+      <KEYWORD1>F29</KEYWORD1>\r
+      <KEYWORD1>F3</KEYWORD1>\r
+      <KEYWORD1>F30</KEYWORD1>\r
+      <KEYWORD1>F31</KEYWORD1>\r
+      <KEYWORD1>F32</KEYWORD1>\r
+      <KEYWORD1>F33</KEYWORD1>\r
+      <KEYWORD1>F34</KEYWORD1>\r
+      <KEYWORD1>F35</KEYWORD1>\r
+      <KEYWORD1>F36</KEYWORD1>\r
+      <KEYWORD1>F37</KEYWORD1>\r
+      <KEYWORD1>F38</KEYWORD1>\r
+      <KEYWORD1>F39</KEYWORD1>\r
+      <KEYWORD1>F4</KEYWORD1>\r
+      <KEYWORD1>F40</KEYWORD1>\r
+      <KEYWORD1>F41</KEYWORD1>\r
+      <KEYWORD1>F42</KEYWORD1>\r
+      <KEYWORD1>F43</KEYWORD1>\r
+      <KEYWORD1>F44</KEYWORD1>\r
+      <KEYWORD1>F45</KEYWORD1>\r
+      <KEYWORD1>F46</KEYWORD1>\r
+      <KEYWORD1>F47</KEYWORD1>\r
+      <KEYWORD1>F48</KEYWORD1>\r
+      <KEYWORD1>F49</KEYWORD1>\r
+      <KEYWORD1>F5</KEYWORD1>\r
+      <KEYWORD1>F50</KEYWORD1>\r
+      <KEYWORD1>F51</KEYWORD1>\r
+      <KEYWORD1>F52</KEYWORD1>\r
+      <KEYWORD1>F53</KEYWORD1>\r
+      <KEYWORD1>F54</KEYWORD1>\r
+      <KEYWORD1>F55</KEYWORD1>\r
+      <KEYWORD1>F56</KEYWORD1>\r
+      <KEYWORD1>F57</KEYWORD1>\r
+      <KEYWORD1>F58</KEYWORD1>\r
+      <KEYWORD1>F59</KEYWORD1>\r
+      <KEYWORD1>F6</KEYWORD1>\r
+      <KEYWORD1>F60</KEYWORD1>\r
+      <KEYWORD1>F61</KEYWORD1>\r
+      <KEYWORD1>F62</KEYWORD1>\r
+      <KEYWORD1>F63</KEYWORD1>\r
+      <KEYWORD1>F64</KEYWORD1>\r
+      <KEYWORD1>F7</KEYWORD1>\r
+      <KEYWORD1>F8</KEYWORD1>\r
+      <KEYWORD1>F9</KEYWORD1>\r
+      <KEYWORD1>FALSE</KEYWORD1>\r
+      <KEYWORD1>FETCH</KEYWORD1>\r
+      <KEYWORD1>FGL_GETENV</KEYWORD1>\r
+      <KEYWORD1>FGL_KEYVAL</KEYWORD1>\r
+      <KEYWORD1>FGL_LASTKEY</KEYWORD1>\r
+      <KEYWORD1>FIELD</KEYWORD1>\r
+      <KEYWORD1>FIELD_TOUCHED</KEYWORD1>\r
+      <KEYWORD1>FILE</KEYWORD1>\r
+      <KEYWORD1>FILLFACTOR</KEYWORD1>\r
+      <KEYWORD1>FILTERING</KEYWORD1>\r
+      <KEYWORD1>FINISH</KEYWORD1>\r
+      <KEYWORD1>FIRST</KEYWORD1>\r
+      <KEYWORD1>FLOAT</KEYWORD1>\r
+      <KEYWORD1>FLUSH</KEYWORD1>\r
+      <KEYWORD1>FOR</KEYWORD1>\r
+      <KEYWORD1>FOREACH</KEYWORD1>\r
+      <KEYWORD1>FOREIGN</KEYWORD1>\r
+      <KEYWORD1>FORM</KEYWORD1>\r
+      <KEYWORD1>FORMAT</KEYWORD1>\r
+      <KEYWORD1>FORMONLY</KEYWORD1>\r
+      <KEYWORD1>FORTRAN</KEYWORD1>\r
+      <KEYWORD1>FOUND</KEYWORD1>\r
+      <KEYWORD1>FRACTION</KEYWORD1>\r
+      <KEYWORD1>FRAGMENT</KEYWORD1>\r
+      <KEYWORD1>FREE</KEYWORD1>\r
+      <KEYWORD1>FROM</KEYWORD1>\r
+      <KEYWORD1>FUNCTION</KEYWORD1>\r
+      <KEYWORD1>GET_FLDBUF</KEYWORD1>\r
+      <KEYWORD1>GLOBAL</KEYWORD1>\r
+      <KEYWORD1>GLOBALS</KEYWORD1>\r
+      <KEYWORD1>GO</KEYWORD1>\r
+      <KEYWORD1>GOTO</KEYWORD1>\r
+      <KEYWORD1>GRANT</KEYWORD1>\r
+      <KEYWORD1>GREEN</KEYWORD1>\r
+      <KEYWORD1>GROUP</KEYWORD1>\r
+      <KEYWORD1>HAVING</KEYWORD1>\r
+      <KEYWORD1>HEADER</KEYWORD1>\r
+      <KEYWORD1>HELP</KEYWORD1>\r
+      <KEYWORD1>HEX</KEYWORD1>\r
+      <KEYWORD1>HIDE</KEYWORD1>\r
+      <KEYWORD1>HIGH</KEYWORD1>\r
+      <KEYWORD1>HOLD</KEYWORD1>\r
+      <KEYWORD1>HOUR</KEYWORD1>\r
+      <KEYWORD1>IDATA</KEYWORD1>\r
+      <KEYWORD1>IF</KEYWORD1>\r
+      <KEYWORD1>ILENGTH</KEYWORD1>\r
+      <KEYWORD1>IMMEDIATE</KEYWORD1>\r
+      <KEYWORD1>IN</KEYWORD1>\r
+      <KEYWORD1>INCLUDE</KEYWORD1>\r
+      <KEYWORD1>INDEX</KEYWORD1>\r
+      <KEYWORD1>INDEXES</KEYWORD1>\r
+      <KEYWORD1>INDICATOR</KEYWORD1>\r
+      <KEYWORD1>INFIELD</KEYWORD1>\r
+      <KEYWORD1>INIT</KEYWORD1>\r
+      <KEYWORD1>INITIALIZE</KEYWORD1>\r
+      <KEYWORD1>INPUT</KEYWORD1>\r
+      <KEYWORD1>INSERT</KEYWORD1>\r
+      <KEYWORD1>INSTRUCTIONS</KEYWORD1>\r
+      <KEYWORD1>INT</KEYWORD1>\r
+      <KEYWORD1>INTEGER</KEYWORD1>\r
+      <KEYWORD1>INTERRUPT</KEYWORD1>\r
+      <KEYWORD1>INTERVAL</KEYWORD1>\r
+      <KEYWORD1>INTO</KEYWORD1>\r
+      <KEYWORD1>INT_FLAG</KEYWORD1>\r
+      <KEYWORD1>INVISIBLE</KEYWORD1>\r
+      <KEYWORD1>IS</KEYWORD1>\r
+      <KEYWORD1>ISAM</KEYWORD1>\r
+      <KEYWORD1>ISOLATION</KEYWORD1>\r
+      <KEYWORD1>ITYPE</KEYWORD1>\r
+      <KEYWORD1>KEY</KEYWORD1>\r
+      <KEYWORD1>LABEL</KEYWORD1>\r
+      <KEYWORD1>LANGUAGE</KEYWORD1>\r
+      <KEYWORD1>LAST</KEYWORD1>\r
+      <KEYWORD1>LEADING</KEYWORD1>\r
+      <KEYWORD1>LEFT</KEYWORD1>\r
+      <KEYWORD1>LENGTH</KEYWORD1>\r
+      <KEYWORD1>LET</KEYWORD1>\r
+      <KEYWORD1>LIKE</KEYWORD1>\r
+      <KEYWORD1>LINE</KEYWORD1>\r
+      <KEYWORD1>LINENO</KEYWORD1>\r
+      <KEYWORD1>LINES</KEYWORD1>\r
+      <KEYWORD1>LOAD</KEYWORD1>\r
+      <KEYWORD1>LOCATE</KEYWORD1>\r
+      <KEYWORD1>LOCK</KEYWORD1>\r
+      <KEYWORD1>LOG</KEYWORD1>\r
+      <KEYWORD1>LOG10</KEYWORD1>\r
+      <KEYWORD1>LOGN</KEYWORD1>\r
+      <KEYWORD1>LONG</KEYWORD1>\r
+      <KEYWORD1>LOW</KEYWORD1>\r
+      <KEYWORD1>MAGENTA</KEYWORD1>\r
+      <KEYWORD1>MAIN</KEYWORD1>\r
+      <KEYWORD1>MARGIN</KEYWORD1>\r
+      <KEYWORD1>MATCHES</KEYWORD1>\r
+      <KEYWORD1>MAX</KEYWORD1>\r
+      <KEYWORD1>MDY</KEYWORD1>\r
+      <KEYWORD1>MEDIUM</KEYWORD1>\r
+      <KEYWORD1>MEMORY</KEYWORD1>\r
+      <KEYWORD1>MENU</KEYWORD1>\r
+      <KEYWORD1>MESSAGE</KEYWORD1>\r
+      <KEYWORD1>MESSAGE_LENGTH</KEYWORD1>\r
+      <KEYWORD1>MESSAGE_TEXT</KEYWORD1>\r
+      <KEYWORD1>MIN</KEYWORD1>\r
+      <KEYWORD1>MINUTE</KEYWORD1>\r
+      <KEYWORD1>MOD</KEYWORD1>\r
+      <KEYWORD1>MODE</KEYWORD1>\r
+      <KEYWORD1>MODIFY</KEYWORD1>\r
+      <KEYWORD1>MODULE</KEYWORD1>\r
+      <KEYWORD1>MONEY</KEYWORD1>\r
+      <KEYWORD1>MONTH</KEYWORD1>\r
+      <KEYWORD1>MORE</KEYWORD1>\r
+      <KEYWORD1>NAME</KEYWORD1>\r
+      <KEYWORD1>NCHAR</KEYWORD1>\r
+      <KEYWORD1>NEED</KEYWORD1>\r
+      <KEYWORD1>NEW</KEYWORD1>\r
+      <KEYWORD1>NEXT</KEYWORD1>\r
+      <KEYWORD1>NEXTPAGE</KEYWORD1>\r
+      <KEYWORD1>NO</KEYWORD1>\r
+      <KEYWORD1>NOCR</KEYWORD1>\r
+      <KEYWORD1>NOENTRY</KEYWORD1>\r
+      <KEYWORD1>NONE</KEYWORD1>\r
+      <KEYWORD1>NORMAL</KEYWORD1>\r
+      <KEYWORD1>NOT</KEYWORD1>\r
+      <KEYWORD1>NOTFOUND</KEYWORD1>\r
+      <KEYWORD1>NULL</KEYWORD1>\r
+      <KEYWORD1>NULLABLE</KEYWORD1>\r
+      <KEYWORD1>NUMBER</KEYWORD1>\r
+      <KEYWORD1>NUMERIC</KEYWORD1>\r
+      <KEYWORD1>NUM_ARGS</KEYWORD1>\r
+      <KEYWORD1>NVARCHAR</KEYWORD1>\r
+      <KEYWORD1>OCTET_LENGTH</KEYWORD1>\r
+      <KEYWORD1>OF</KEYWORD1>\r
+      <KEYWORD1>OFF</KEYWORD1>\r
+      <KEYWORD1>OLD</KEYWORD1>\r
+      <KEYWORD1>ON</KEYWORD1>\r
+      <KEYWORD1>ONLY</KEYWORD1>\r
+      <KEYWORD1>OPEN</KEYWORD1>\r
+      <KEYWORD1>OPTIMIZATION</KEYWORD1>\r
+      <KEYWORD1>OPTION</KEYWORD1>\r
+      <KEYWORD1>OPTIONS</KEYWORD1>\r
+      <KEYWORD1>OR</KEYWORD1>\r
+      <KEYWORD1>ORDER</KEYWORD1>\r
+      <KEYWORD1>OTHERWISE</KEYWORD1>\r
+      <KEYWORD1>OUTER</KEYWORD1>\r
+      <KEYWORD1>OUTPUT</KEYWORD1>\r
+      <KEYWORD1>PAGE</KEYWORD1>\r
+      <KEYWORD1>PAGENO</KEYWORD1>\r
+      <KEYWORD1>PASCAL</KEYWORD1>\r
+      <KEYWORD1>PAUSE</KEYWORD1>\r
+      <KEYWORD1>PDQPRIORITY</KEYWORD1>\r
+      <KEYWORD1>PERCENT</KEYWORD1>\r
+      <KEYWORD1>PICTURE</KEYWORD1>\r
+      <KEYWORD1>PIPE</KEYWORD1>\r
+      <KEYWORD1>PLI</KEYWORD1>\r
+      <KEYWORD1>POW</KEYWORD1>\r
+      <KEYWORD1>PRECISION</KEYWORD1>\r
+      <KEYWORD1>PREPARE</KEYWORD1>\r
+      <KEYWORD1>PREVIOUS</KEYWORD1>\r
+      <KEYWORD1>PREVPAGE</KEYWORD1>\r
+      <KEYWORD1>PRIMARY</KEYWORD1>\r
+      <KEYWORD1>PRINT</KEYWORD1>\r
+      <KEYWORD1>PRINTER</KEYWORD1>\r
+      <KEYWORD1>PRIOR</KEYWORD1>\r
+      <KEYWORD1>PRIVATE</KEYWORD1>\r
+      <KEYWORD1>PRIVILEGES</KEYWORD1>\r
+      <KEYWORD1>PROCEDURE</KEYWORD1>\r
+      <KEYWORD1>PROGRAM</KEYWORD1>\r
+      <KEYWORD1>PROMPT</KEYWORD1>\r
+      <KEYWORD1>PUBLIC</KEYWORD1>\r
+      <KEYWORD1>PUT</KEYWORD1>\r
+      <KEYWORD1>QUIT</KEYWORD1>\r
+      <KEYWORD1>QUIT_FLAG</KEYWORD1>\r
+      <KEYWORD1>RAISE</KEYWORD1>\r
+      <KEYWORD1>RANGE</KEYWORD1>\r
+      <KEYWORD1>READ</KEYWORD1>\r
+      <KEYWORD1>READONLY</KEYWORD1>\r
+      <KEYWORD1>REAL</KEYWORD1>\r
+      <KEYWORD1>RECORD</KEYWORD1>\r
+      <KEYWORD1>RECOVER</KEYWORD1>\r
+      <KEYWORD1>RED</KEYWORD1>\r
+      <KEYWORD1>REFERENCES</KEYWORD1>\r
+      <KEYWORD1>REFERENCING</KEYWORD1>\r
+      <KEYWORD1>REGISTER</KEYWORD1>\r
+      <KEYWORD1>RELATIVE</KEYWORD1>\r
+      <KEYWORD1>REMAINDER</KEYWORD1>\r
+      <KEYWORD1>REMOVE</KEYWORD1>\r
+      <KEYWORD1>RENAME</KEYWORD1>\r
+      <KEYWORD1>REOPTIMIZATION</KEYWORD1>\r
+      <KEYWORD1>REPEATABLE</KEYWORD1>\r
+      <KEYWORD1>REPORT</KEYWORD1>\r
+      <KEYWORD1>REQUIRED</KEYWORD1>\r
+      <KEYWORD1>RESOLUTION</KEYWORD1>\r
+      <KEYWORD1>RESOURCE</KEYWORD1>\r
+      <KEYWORD1>RESTRICT</KEYWORD1>\r
+      <KEYWORD1>RESUME</KEYWORD1>\r
+      <KEYWORD1>RETURN</KEYWORD1>\r
+      <KEYWORD1>RETURNED_SQLSTATE</KEYWORD1>\r
+      <KEYWORD1>RETURNING</KEYWORD1>\r
+      <KEYWORD1>REVERSE</KEYWORD1>\r
+      <KEYWORD1>REVOKE</KEYWORD1>\r
+      <KEYWORD1>RIGHT</KEYWORD1>\r
+      <KEYWORD1>ROBIN</KEYWORD1>\r
+      <KEYWORD1>ROLE</KEYWORD1>\r
+      <KEYWORD1>ROLLBACK</KEYWORD1>\r
+      <KEYWORD1>ROLLFORWARD</KEYWORD1>\r
+      <KEYWORD1>ROOT</KEYWORD1>\r
+      <KEYWORD1>ROUND</KEYWORD1>\r
+      <KEYWORD1>ROW</KEYWORD1>\r
+      <KEYWORD1>ROWID</KEYWORD1>\r
+      <KEYWORD1>ROWIDS</KEYWORD1>\r
+      <KEYWORD1>ROWS</KEYWORD1>\r
+      <KEYWORD1>ROW_COUNT</KEYWORD1>\r
+      <KEYWORD1>RUN</KEYWORD1>\r
+      <KEYWORD1>SCALE</KEYWORD1>\r
+      <KEYWORD1>SCHEMA</KEYWORD1>\r
+      <KEYWORD1>SCREEN</KEYWORD1>\r
+      <KEYWORD1>SCROLL</KEYWORD1>\r
+      <KEYWORD1>SCR_LINE</KEYWORD1>\r
+      <KEYWORD1>SECOND</KEYWORD1>\r
+      <KEYWORD1>SECTION</KEYWORD1>\r
+      <KEYWORD1>SELECT</KEYWORD1>\r
+      <KEYWORD1>SERIAL</KEYWORD1>\r
+      <KEYWORD1>SERIALIZABLE</KEYWORD1>\r
+      <KEYWORD1>SERVER_NAME</KEYWORD1>\r
+      <KEYWORD1>SESSION</KEYWORD1>\r
+      <KEYWORD1>SET</KEYWORD1>\r
+      <KEYWORD1>SET_COUNT</KEYWORD1>\r
+      <KEYWORD1>SHARE</KEYWORD1>\r
+      <KEYWORD1>SHORT</KEYWORD1>\r
+      <KEYWORD1>SHOW</KEYWORD1>\r
+      <KEYWORD1>SITENAME</KEYWORD1>\r
+      <KEYWORD1>SIZE</KEYWORD1>\r
+      <KEYWORD1>SIZEOF</KEYWORD1>\r
+      <KEYWORD1>SKIP</KEYWORD1>\r
+      <KEYWORD1>SLEEP</KEYWORD1>\r
+      <KEYWORD1>SMALLFLOAT</KEYWORD1>\r
+      <KEYWORD1>SMALLINT</KEYWORD1>\r
+      <KEYWORD1>SOME</KEYWORD1>\r
+      <KEYWORD1>SPACE</KEYWORD1>\r
+      <KEYWORD1>SPACES</KEYWORD1>\r
+      <KEYWORD1>SQL</KEYWORD1>\r
+      <KEYWORD1>SQLAWARN</KEYWORD1>\r
+      <KEYWORD1>SQLCA</KEYWORD1>\r
+      <KEYWORD1>SQLCODE</KEYWORD1>\r
+      <KEYWORD1>SQLERRD</KEYWORD1>\r
+      <KEYWORD1>SQLERRM</KEYWORD1>\r
+      <KEYWORD1>SQLERROR</KEYWORD1>\r
+      <KEYWORD1>SQLERRP</KEYWORD1>\r
+      <KEYWORD1>SQLSTATE</KEYWORD1>\r
+      <KEYWORD1>SQLWARNING</KEYWORD1>\r
+      <KEYWORD1>SQRT</KEYWORD1>\r
+      <KEYWORD1>STABILITY</KEYWORD1>\r
+      <KEYWORD1>START</KEYWORD1>\r
+      <KEYWORD1>STARTLOG</KEYWORD1>\r
+      <KEYWORD1>STATIC</KEYWORD1>\r
+      <KEYWORD1>STATISTICS</KEYWORD1>\r
+      <KEYWORD1>STATUS</KEYWORD1>\r
+      <KEYWORD1>STDEV</KEYWORD1>\r
+      <KEYWORD1>STEP</KEYWORD1>\r
+      <KEYWORD1>STOP</KEYWORD1>\r
+      <KEYWORD1>STRING</KEYWORD1>\r
+      <KEYWORD1>STRUCT</KEYWORD1>\r
+      <KEYWORD1>SUBCLASS_ORIGIN</KEYWORD1>\r
+      <KEYWORD1>SUM</KEYWORD1>\r
+      <KEYWORD1>SWITCH</KEYWORD1>\r
+      <KEYWORD1>SYNONYM</KEYWORD1>\r
+      <KEYWORD1>SYSTEM</KEYWORD1>\r
+      <KEYWORD1>SysBlobs</KEYWORD1>\r
+      <KEYWORD1>SysChecks</KEYWORD1>\r
+      <KEYWORD1>SysColAuth</KEYWORD1>\r
+      <KEYWORD1>SysColDepend</KEYWORD1>\r
+      <KEYWORD1>SysColumns</KEYWORD1>\r
+      <KEYWORD1>SysConstraints</KEYWORD1>\r
+      <KEYWORD1>SysDefaults</KEYWORD1>\r
+      <KEYWORD1>SysDepend</KEYWORD1>\r
+      <KEYWORD1>SysDistrib</KEYWORD1>\r
+      <KEYWORD1>SysFragAuth</KEYWORD1>\r
+      <KEYWORD1>SysFragments</KEYWORD1>\r
+      <KEYWORD1>SysIndexes</KEYWORD1>\r
+      <KEYWORD1>SysObjState</KEYWORD1>\r
+      <KEYWORD1>SysOpClstr</KEYWORD1>\r
+      <KEYWORD1>SysProcAuth</KEYWORD1>\r
+      <KEYWORD1>SysProcBody</KEYWORD1>\r
+      <KEYWORD1>SysProcPlan</KEYWORD1>\r
+      <KEYWORD1>SysProcedures</KEYWORD1>\r
+      <KEYWORD1>SysReferences</KEYWORD1>\r
+      <KEYWORD1>SysRoleAuth</KEYWORD1>\r
+      <KEYWORD1>SysSynTable</KEYWORD1>\r
+      <KEYWORD1>SysSynonyms</KEYWORD1>\r
+      <KEYWORD1>SysTabAuth</KEYWORD1>\r
+      <KEYWORD1>SysTables</KEYWORD1>\r
+      <KEYWORD1>SysTrigBody</KEYWORD1>\r
+      <KEYWORD1>SysTriggers</KEYWORD1>\r
+      <KEYWORD1>SysUsers</KEYWORD1>\r
+      <KEYWORD1>SysViews</KEYWORD1>\r
+      <KEYWORD1>SysViolations</KEYWORD1>\r
+      <KEYWORD1>TAB</KEYWORD1>\r
+      <KEYWORD1>TABLE</KEYWORD1>\r
+      <KEYWORD1>TABLES</KEYWORD1>\r
+      <KEYWORD1>TAN</KEYWORD1>\r
+      <KEYWORD1>TEMP</KEYWORD1>\r
+      <KEYWORD1>TEXT</KEYWORD1>\r
+      <KEYWORD1>THEN</KEYWORD1>\r
+      <KEYWORD1>THROUGH</KEYWORD1>\r
+      <KEYWORD1>THRU</KEYWORD1>\r
+      <KEYWORD1>TIME</KEYWORD1>\r
+      <KEYWORD1>TO</KEYWORD1>\r
+      <KEYWORD1>TODAY</KEYWORD1>\r
+      <KEYWORD1>TOP</KEYWORD1>\r
+      <KEYWORD1>TOTAL</KEYWORD1>\r
+      <KEYWORD1>TRACE</KEYWORD1>\r
+      <KEYWORD1>TRAILER</KEYWORD1>\r
+      <KEYWORD1>TRAILING</KEYWORD1>\r
+      <KEYWORD1>TRANSACTION</KEYWORD1>\r
+      <KEYWORD1>TRIGGER</KEYWORD1>\r
+      <KEYWORD1>TRIGGERS</KEYWORD1>\r
+      <KEYWORD1>TRIM</KEYWORD1>\r
+      <KEYWORD1>TRUE</KEYWORD1>\r
+      <KEYWORD1>TRUNC</KEYWORD1>\r
+      <KEYWORD1>TYPE</KEYWORD1>\r
+      <KEYWORD1>TYPEDEF</KEYWORD1>\r
+      <KEYWORD1>UNCOMMITTED</KEYWORD1>\r
+      <KEYWORD1>UNCONSTRAINED</KEYWORD1>\r
+      <KEYWORD1>UNDERLINE</KEYWORD1>\r
+      <KEYWORD1>UNION</KEYWORD1>\r
+      <KEYWORD1>UNIQUE</KEYWORD1>\r
+      <KEYWORD1>UNITS</KEYWORD1>\r
+      <KEYWORD1>UNLOAD</KEYWORD1>\r
+      <KEYWORD1>UNLOCK</KEYWORD1>\r
+      <KEYWORD1>UNSIGNED</KEYWORD1>\r
+      <KEYWORD1>UP</KEYWORD1>\r
+      <KEYWORD1>UPDATE</KEYWORD1>\r
+      <KEYWORD1>UPSHIFT</KEYWORD1>\r
+      <KEYWORD1>USER</KEYWORD1>\r
+      <KEYWORD1>USING</KEYWORD1>\r
+      <KEYWORD1>VALIDATE</KEYWORD1>\r
+      <KEYWORD1>VALUE</KEYWORD1>\r
+      <KEYWORD1>VALUES</KEYWORD1>\r
+      <KEYWORD1>VARCHAR</KEYWORD1>\r
+      <KEYWORD1>VARIABLES</KEYWORD1>\r
+      <KEYWORD1>VARIANCE</KEYWORD1>\r
+      <KEYWORD1>VARYING</KEYWORD1>\r
+      <KEYWORD1>VERIFY</KEYWORD1>\r
+      <KEYWORD1>VIEW</KEYWORD1>\r
+      <KEYWORD1>VIOLATIONS</KEYWORD1>\r
+      <KEYWORD1>WAIT</KEYWORD1>\r
+      <KEYWORD1>WAITING</KEYWORD1>\r
+      <KEYWORD1>WARNING</KEYWORD1>\r
+      <KEYWORD1>WEEKDAY</KEYWORD1>\r
+      <KEYWORD1>WHEN</KEYWORD1>\r
+      <KEYWORD1>WHENEVER</KEYWORD1>\r
+      <KEYWORD1>WHERE</KEYWORD1>\r
+      <KEYWORD1>WHILE</KEYWORD1>\r
+      <KEYWORD1>WHITE</KEYWORD1>\r
+      <KEYWORD1>WINDOW</KEYWORD1>\r
+      <KEYWORD1>WITH</KEYWORD1>\r
+      <KEYWORD1>WITHOUT</KEYWORD1>\r
+      <KEYWORD1>WORDWRAP</KEYWORD1>\r
+      <KEYWORD1>WORK</KEYWORD1>\r
+      <KEYWORD1>WRAP</KEYWORD1>\r
+      <KEYWORD1>WRITE</KEYWORD1>\r
+      <KEYWORD1>YEAR</KEYWORD1>\r
+      <KEYWORD1>YELLOW</KEYWORD1>\r
+      <KEYWORD1>ZEROFILL</KEYWORD1>\r
+\r
+\r
+      <!-- special, keywords/literals -->\r
+      <LITERAL2>FALSE</LITERAL2>\r
+      <LITERAL2>NULL</LITERAL2>\r
+      <LITERAL2>TRUE</LITERAL2>\r
+\r
+\r
+      </KEYWORDS>\r
+   </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/icon.xml b/extra/xmode/modes/icon.xml
new file mode 100644 (file)
index 0000000..892609b
--- /dev/null
@@ -0,0 +1,198 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- Icon mode by Silas Smith (smiths@cs.arizona.edu) -->\r
+<!-- Updated 08/07/2003 -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE="|.\\:,+-*/=?^!@%&lt;&gt;&amp;" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE"\r
+           HIGHLIGHT_DIGITS="TRUE"\r
+           DIGIT_RE="(0x[\p{XDigit}]+[lL]?|[\p{Digit}]+(e[\p{Digit}]*)?[lLdDfF]?)">\r
+               <!-- comments -->\r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+               <!-- string literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- cset literals -->\r
+               <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">~===</SEQ>\r
+               <SEQ TYPE="OPERATOR">===</SEQ>\r
+               <SEQ TYPE="OPERATOR">|||</SEQ> <!-- list concatenation -->\r
+\r
+               <!-- lexical operators -->\r
+               <SEQ TYPE="OPERATOR">&gt;&gt;=</SEQ> <!-- ">>=" -->\r
+               <SEQ TYPE="OPERATOR">&gt;&gt;</SEQ> <!-- ">>" -->\r
+               <SEQ TYPE="OPERATOR">&lt;&lt;=</SEQ> <!-- "<<=" -->\r
+               <SEQ TYPE="OPERATOR">&lt;&lt;</SEQ> <!-- "<<" -->\r
+               <SEQ TYPE="OPERATOR">~==</SEQ>\r
+               <SEQ TYPE="OPERATOR">==</SEQ>\r
+               <SEQ TYPE="OPERATOR">||</SEQ>\r
+\r
+               <!-- set operators -->\r
+               <SEQ TYPE="OPERATOR">++</SEQ> <!-- union -->\r
+               <SEQ TYPE="OPERATOR">**</SEQ> <!-- intersection -->\r
+               <SEQ TYPE="OPERATOR">--</SEQ> <!-- difference -->\r
+\r
+               <SEQ TYPE="OPERATOR">&lt;-&gt;</SEQ> <!-- "<->" -->\r
+               <SEQ TYPE="OPERATOR">&lt;-</SEQ> <!-- "<-" -->\r
+               <SEQ TYPE="OPERATOR">op:=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">~=</SEQ>\r
+               <SEQ TYPE="OPERATOR">:=:</SEQ>\r
+               <SEQ TYPE="OPERATOR">:=</SEQ>\r
+               <SEQ TYPE="OPERATOR">-:</SEQ>\r
+               <SEQ TYPE="OPERATOR">+:</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">not</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+               <SEQ TYPE="OPERATOR">@</SEQ>\r
+\r
+               <!-- numerical operators -->\r
+                               <!-- NOTE: '*' defined above -->\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+\r
+               <!-- Function calls -->\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>by</KEYWORD1>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>create</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>every</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>initial</KEYWORD1>\r
+                       <KEYWORD1>next</KEYWORD1>\r
+                       <KEYWORD1>of</KEYWORD1>\r
+                       <KEYWORD1>repeat</KEYWORD1>\r
+                       <KEYWORD1>then</KEYWORD1>\r
+                       <KEYWORD1>to</KEYWORD1>\r
+                       <KEYWORD1>until</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+\r
+                       <KEYWORD2>break</KEYWORD2>\r
+                       <KEYWORD2>end</KEYWORD2>\r
+                       <KEYWORD2>fail</KEYWORD2>\r
+                       <KEYWORD2>global</KEYWORD2>\r
+                       <KEYWORD2>invocable</KEYWORD2>\r
+                       <KEYWORD2>link</KEYWORD2>\r
+                       <KEYWORD2>local</KEYWORD2>\r
+                       <KEYWORD2>procedure</KEYWORD2>\r
+                       <KEYWORD2>record</KEYWORD2>\r
+                       <KEYWORD2>return</KEYWORD2>\r
+                       <KEYWORD2>static</KEYWORD2>\r
+                       <KEYWORD2>suspend</KEYWORD2>\r
+\r
+                       <KEYWORD3>&amp;allocated</KEYWORD3>\r
+                       <KEYWORD3>&amp;ascii</KEYWORD3>\r
+                       <KEYWORD3>&amp;clock</KEYWORD3>\r
+                       <KEYWORD3>&amp;collections</KEYWORD3>\r
+                       <KEYWORD3>&amp;cset</KEYWORD3>\r
+                       <KEYWORD3>&amp;current</KEYWORD3>\r
+                       <KEYWORD3>&amp;date</KEYWORD3>\r
+                       <KEYWORD3>&amp;dateline</KEYWORD3>\r
+                       <KEYWORD3>&amp;digits</KEYWORD3>\r
+                       <KEYWORD3>&amp;dump</KEYWORD3>\r
+                       <KEYWORD3>&amp;e</KEYWORD3>\r
+                       <KEYWORD3>&amp;error</KEYWORD3>\r
+                       <KEYWORD3>&amp;errornumber</KEYWORD3>\r
+                       <KEYWORD3>&amp;errortext</KEYWORD3>\r
+                       <KEYWORD3>&amp;errorvalue</KEYWORD3>\r
+                       <KEYWORD3>&amp;errout</KEYWORD3>\r
+                       <KEYWORD3>&amp;fail</KEYWORD3>\r
+                       <KEYWORD3>&amp;features</KEYWORD3>\r
+                       <KEYWORD3>&amp;file</KEYWORD3>\r
+                       <KEYWORD3>&amp;host</KEYWORD3>\r
+                       <KEYWORD3>&amp;input</KEYWORD3>\r
+                       <KEYWORD3>&amp;lcase</KEYWORD3>\r
+                       <KEYWORD3>&amp;letters</KEYWORD3>\r
+                       <KEYWORD3>&amp;level</KEYWORD3>\r
+                       <KEYWORD3>&amp;line</KEYWORD3>\r
+                       <KEYWORD3>&amp;main</KEYWORD3>\r
+                       <KEYWORD3>&amp;null</KEYWORD3>\r
+                       <KEYWORD3>&amp;output</KEYWORD3>\r
+                       <KEYWORD3>&amp;phi</KEYWORD3>\r
+                       <KEYWORD3>&amp;pi</KEYWORD3>\r
+                       <KEYWORD3>&amp;pos</KEYWORD3>\r
+                       <KEYWORD3>&amp;progname</KEYWORD3>\r
+                       <KEYWORD3>&amp;random</KEYWORD3>\r
+                       <KEYWORD3>&amp;regions</KEYWORD3>\r
+                       <KEYWORD3>&amp;source</KEYWORD3>\r
+                       <KEYWORD3>&amp;storage</KEYWORD3>\r
+                       <KEYWORD3>&amp;subject</KEYWORD3>\r
+                       <KEYWORD3>&amp;time</KEYWORD3>\r
+                       <KEYWORD3>&amp;trace</KEYWORD3>\r
+                       <KEYWORD3>&amp;ucase</KEYWORD3>\r
+                       <KEYWORD3>&amp;version</KEYWORD3>\r
+\r
+                       <!-- preprocessor directives -->\r
+                       <KEYWORD3>$define</KEYWORD3>\r
+                       <KEYWORD3>$else</KEYWORD3>\r
+                       <KEYWORD3>$endif</KEYWORD3>\r
+                       <KEYWORD3>$error</KEYWORD3>\r
+                       <KEYWORD3>$ifdef</KEYWORD3>\r
+                       <KEYWORD3>$ifndef</KEYWORD3>\r
+                       <KEYWORD3>$include</KEYWORD3>\r
+                       <KEYWORD3>$line</KEYWORD3>\r
+                       <KEYWORD3>$undef</KEYWORD3>\r
+\r
+                       <!-- predefined prepocessor symbols -->\r
+                       <KEYWORD3>_MACINTOSH</KEYWORD3>\r
+                       <KEYWORD3>_MS_WINDOWS_NT</KEYWORD3>\r
+                       <KEYWORD3>_MS_WINDOWS</KEYWORD3>\r
+                       <KEYWORD3>_MSDOS_386</KEYWORD3>\r
+                       <KEYWORD3>_MSDOS</KEYWORD3>\r
+                       <KEYWORD3>_OS2</KEYWORD3>\r
+                       <KEYWORD3>_PIPES</KEYWORD3>\r
+                       <KEYWORD3>_PRESENTATION_MGR</KEYWORD3>\r
+                       <KEYWORD3>_SYSTEM_FUNCTION</KEYWORD3>\r
+                       <KEYWORD3>_UNIX</KEYWORD3>\r
+                       <KEYWORD3>_VMS</KEYWORD3>\r
+                       <KEYWORD3>_WINDOW_FUNCTIONS</KEYWORD3>\r
+                       <KEYWORD3>_X_WINDOW_SYSTEM</KEYWORD3>\r
+\r
+                       <KEYWORD4>co-expression</KEYWORD4>\r
+                       <KEYWORD4>cset</KEYWORD4>\r
+                       <KEYWORD4>file</KEYWORD4>\r
+                       <KEYWORD4>integer</KEYWORD4>\r
+                       <KEYWORD4>list</KEYWORD4>\r
+                       <KEYWORD4>null</KEYWORD4>\r
+                       <KEYWORD4>real</KEYWORD4>\r
+                       <KEYWORD4>set</KEYWORD4>\r
+                       <KEYWORD4>string</KEYWORD4>\r
+                       <KEYWORD4>table</KEYWORD4>\r
+                       <KEYWORD4>window</KEYWORD4>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/idl.xml b/extra/xmode/modes/idl.xml
new file mode 100644 (file)
index 0000000..65b7fc5
--- /dev/null
@@ -0,0 +1,106 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- IDL mode, by Slava Pestov\r
+     based on Java mode by Mike Dillon and IDLTokenMarker by Juha Lindfors -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="boxComment" VALUE="*" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE">\r
+               <!-- C style comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+\r
+               <!-- some of these should be marked OPERATOR -->\r
+               <!-- <SEQ TYPE="NULL">)</SEQ>\r
+               <SEQ TYPE="NULL">=</SEQ>\r
+               <SEQ TYPE="NULL">!</SEQ>\r
+               <SEQ TYPE="NULL">&gt;=</SEQ>\r
+               <SEQ TYPE="NULL">&lt;=</SEQ>\r
+               <SEQ TYPE="NULL">+</SEQ>\r
+               <SEQ TYPE="NULL">-</SEQ>\r
+               <SEQ TYPE="NULL">/</SEQ>\r
+               <SEQ TYPE="NULL">*</SEQ>\r
+               <SEQ TYPE="NULL">&gt;</SEQ>\r
+               <SEQ TYPE="NULL">&lt;</SEQ>\r
+               <SEQ TYPE="NULL">%</SEQ>\r
+               <SEQ TYPE="NULL">&amp;</SEQ>\r
+               <SEQ TYPE="NULL">|</SEQ>\r
+               <SEQ TYPE="NULL">^</SEQ>\r
+               <SEQ TYPE="NULL">~</SEQ>\r
+               <SEQ TYPE="NULL">.</SEQ>\r
+               <SEQ TYPE="NULL">,</SEQ>\r
+               <SEQ TYPE="NULL">;</SEQ>\r
+               <SEQ TYPE="NULL">]</SEQ>\r
+               <SEQ TYPE="NULL">[</SEQ>\r
+               <SEQ TYPE="NULL">?</SEQ> -->\r
+\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+\r
+               <!-- Function calls -->\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD3>any</KEYWORD3>\r
+                       <KEYWORD1>attribute</KEYWORD1>\r
+                       <KEYWORD3>boolean</KEYWORD3>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD3>char</KEYWORD3>\r
+                       <KEYWORD1>const</KEYWORD1>\r
+                       <KEYWORD1>context</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+                       <KEYWORD3>double</KEYWORD3>\r
+                       <KEYWORD3>enum</KEYWORD3>\r
+                       <KEYWORD1>exception</KEYWORD1>\r
+                       <LITERAL2>FALSE</LITERAL2>\r
+                       <KEYWORD1>fixed</KEYWORD1>\r
+                       <KEYWORD3>float</KEYWORD3>\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <KEYWORD1>inout</KEYWORD1>\r
+                       <KEYWORD1>interface</KEYWORD1>\r
+                       <KEYWORD3>long</KEYWORD3>\r
+                       <KEYWORD1>module</KEYWORD1>\r
+                       <KEYWORD3>Object</KEYWORD3>\r
+                       <KEYWORD3>octet</KEYWORD3>\r
+                       <KEYWORD1>oneway</KEYWORD1>\r
+                       <KEYWORD1>out</KEYWORD1>\r
+                       <KEYWORD1>raises</KEYWORD1>\r
+                       <KEYWORD1>readonly</KEYWORD1>\r
+                       <KEYWORD3>sequence</KEYWORD3>\r
+                       <KEYWORD3>short</KEYWORD3>\r
+                       <KEYWORD3>string</KEYWORD3>\r
+                       <KEYWORD3>struct</KEYWORD3>\r
+                       <KEYWORD1>switch</KEYWORD1>\r
+                       <LITERAL2>TRUE</LITERAL2>\r
+                       <KEYWORD3>typedef</KEYWORD3>\r
+                       <KEYWORD3>unsigned</KEYWORD3>\r
+                       <KEYWORD3>union</KEYWORD3>\r
+                       <KEYWORD3>void</KEYWORD3>\r
+                       <KEYWORD3>wchar</KEYWORD3>\r
+                       <KEYWORD3>wstring</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/inform.xml b/extra/xmode/modes/inform.xml
new file mode 100644 (file)
index 0000000..fdd7153
--- /dev/null
@@ -0,0 +1,205 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+      <!-- Syntax highlighting mode for the Inform language. You can find out more about inform at\r
+           http://www.gnelson.demon.co.uk/inform.html\r
+           And an inform language guide at\r
+           http://www.gnelson.demon.co.uk/dman/index.html\r
+        -->\r
+    <PROPS>\r
+        <!--\r
+        <PROPERTY NAME="commentStart" VALUE="/*" />\r
+        <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+        -->\r
+        <PROPERTY NAME="lineComment" VALUE="!" />\r
+        <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+\r
+        <!-- Auto indent -->\r
+        <PROPERTY NAME="indentOpenBrackets" VALUE="{[" />\r
+        <PROPERTY NAME="indentCloseBrackets" VALUE="}]" />\r
+        <PROPERTY NAME="indentNextLine"\r
+            VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+        <!-- set this to 'true' if you want to use GNU coding style -->\r
+        <PROPERTY NAME="doubleBracketIndent" VALUE="false" />\r
+\r
+        <PROPERTY NAME="filenameGlob" VALUE="*.(inf|h)" />\r
+    </PROPS>\r
+\r
+    <RULES\r
+            IGNORE_CASE="FALSE"\r
+            HIGHLIGHT_DIGITS="TRUE"\r
+            DIGIT_RE="(\$[\p{XDigit}]|[\p{Digit}])">\r
+        <EOL_SPAN TYPE="COMMENT1">!</EOL_SPAN>\r
+\r
+        <!-- strings can span lines -->\r
+        <SPAN TYPE="LITERAL1" DELEGATE="InformInnerText">\r
+            <BEGIN>"</BEGIN>\r
+            <END>"</END>\r
+        </SPAN>\r
+        <SPAN TYPE="LITERAL2">\r
+            <BEGIN>'</BEGIN>\r
+            <END>'</END>\r
+        </SPAN>\r
+\r
+        <!-- preprocessor statements -->\r
+        <EOL_SPAN TYPE="KEYWORD2">#</EOL_SPAN>\r
+        <EOL_SPAN TYPE="COMMENT1">!</EOL_SPAN>\r
+\r
+        <!-- special sequences that require special highlighting -->\r
+        <SEQ TYPE="OPERATOR">=</SEQ>\r
+        <SEQ TYPE="OPERATOR">==</SEQ>\r
+        <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+        <SEQ TYPE="OPERATOR">~=</SEQ>\r
+        <SEQ TYPE="OPERATOR">+</SEQ>\r
+        <SEQ TYPE="OPERATOR">-</SEQ>\r
+        <SEQ TYPE="OPERATOR">$</SEQ>\r
+        <SEQ TYPE="OPERATOR">/</SEQ>\r
+        <SEQ TYPE="OPERATOR">*</SEQ>\r
+        <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">%</SEQ>\r
+        <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+        <SEQ TYPE="OPERATOR">|</SEQ>\r
+        <SEQ TYPE="OPERATOR">^</SEQ>\r
+        <SEQ TYPE="OPERATOR">~</SEQ>\r
+        <SEQ TYPE="OPERATOR">}</SEQ>\r
+        <SEQ TYPE="OPERATOR">{</SEQ>\r
+        <SEQ TYPE="OPERATOR">]</SEQ>\r
+        <SEQ TYPE="OPERATOR">[</SEQ>\r
+\r
+        <SEQ TYPE="OPERATOR">.&amp;</SEQ>\r
+        <SEQ TYPE="OPERATOR">.#</SEQ>\r
+        <SEQ TYPE="OPERATOR">--></SEQ>\r
+\r
+        <!-- Function calls -->\r
+        <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+        <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">::</MARK_PREVIOUS>\r
+\r
+        <MARK_PREVIOUS AT_WHITESPACE_END="FALSE"\r
+            MATCH_TYPE="OPERATOR"\r
+            TYPE="LABEL">:</MARK_PREVIOUS>\r
+\r
+        <KEYWORDS>\r
+            <!-- operators -->\r
+            <KEYWORD1>has</KEYWORD1>\r
+            <KEYWORD1>hasnt</KEYWORD1>\r
+            <KEYWORD1>in</KEYWORD1>\r
+            <KEYWORD1>notin</KEYWORD1>\r
+            <KEYWORD1>ofclass</KEYWORD1>\r
+            <KEYWORD1>provides</KEYWORD1>\r
+            <KEYWORD1>or</KEYWORD1>\r
+\r
+            <!-- text-base conversion functions -->\r
+            <LITERAL2>char</LITERAL2>\r
+            <LITERAL2>string</LITERAL2>\r
+            <LITERAL2>address</LITERAL2>\r
+            <LITERAL2>name</LITERAL2>\r
+            <LITERAL2>a</LITERAL2>\r
+            <LITERAL2>an</LITERAL2>\r
+            <LITERAL2>the</LITERAL2>\r
+            <LITERAL2>The</LITERAL2>\r
+            <LITERAL2>property</LITERAL2>\r
+            <LITERAL2>object</LITERAL2>\r
+\r
+            <!-- language semantics -->\r
+            <KEYWORD1>break</KEYWORD1>\r
+            <KEYWORD1>continue</KEYWORD1>\r
+            <KEYWORD1>do</KEYWORD1>\r
+                <KEYWORD1>until</KEYWORD1>\r
+            <KEYWORD1>for</KEYWORD1>\r
+            <KEYWORD1>give</KEYWORD1>\r
+            <KEYWORD1>if</KEYWORD1>\r
+                <KEYWORD1>else</KEYWORD1>\r
+            <KEYWORD1>inversion</KEYWORD1>\r
+            <KEYWORD1>jump</KEYWORD1>\r
+            <KEYWORD1>move</KEYWORD1>\r
+                <KEYWORD2>to</KEYWORD2>\r
+            <KEYWORD1>objectloop</KEYWORD1>\r
+            <KEYWORD1>remove</KEYWORD1>\r
+            <KEYWORD1>return</KEYWORD1>\r
+            <KEYWORD1>rfalse</KEYWORD1>\r
+            <KEYWORD1>rtrue</KEYWORD1>\r
+            <KEYWORD1>string</KEYWORD1>\r
+            <KEYWORD1>switch</KEYWORD1>\r
+            <KEYWORD1>while</KEYWORD1>\r
+\r
+            <!-- class keyworks -->\r
+            <KEYWORD1>with</KEYWORD1>\r
+<!--                   <KEYWORD1>has</KEYWORD1> -->\r
+\r
+            <!-- built-in functions -->\r
+            <FUNCTION>new_line</FUNCTION>\r
+            <FUNCTION>print</FUNCTION>\r
+            <FUNCTION>print_ret</FUNCTION>\r
+            <FUNCTION>box</FUNCTION>\r
+            <FUNCTION>font</FUNCTION>\r
+                <KEYWORD2>on</KEYWORD2>\r
+                <KEYWORD2>off</KEYWORD2>\r
+            <FUNCTION>quit</FUNCTION>\r
+            <FUNCTION>read</FUNCTION>\r
+            <FUNCTION>restore</FUNCTION>\r
+            <FUNCTION>save</FUNCTION>\r
+            <FUNCTION>spaces</FUNCTION>\r
+            <FUNCTION>style</FUNCTION>\r
+                <KEYWORD2>roman</KEYWORD2>\r
+                <KEYWORD2>bold</KEYWORD2>\r
+                <KEYWORD2>underline</KEYWORD2>\r
+                <KEYWORD2>reverse</KEYWORD2>\r
+                <KEYWORD2>fixed</KEYWORD2>\r
+            <FUNCTION>score</FUNCTION>\r
+            <FUNCTION>time</FUNCTION>\r
+\r
+            <!-- Top-level keyworks -->\r
+            <KEYWORD3>Abbreviate</KEYWORD3>\r
+            <KEYWORD3>Array</KEYWORD3>\r
+            <KEYWORD3>Attribute</KEYWORD3>\r
+            <KEYWORD3>Class</KEYWORD3>\r
+            <KEYWORD3>Constant</KEYWORD3>\r
+            <KEYWORD3>Default</KEYWORD3>\r
+            <KEYWORD3>End</KEYWORD3>\r
+            <KEYWORD3>Endif</KEYWORD3>\r
+            <KEYWORD3>Extend</KEYWORD3>\r
+            <KEYWORD3>Global</KEYWORD3>\r
+            <KEYWORD3>Ifdef</KEYWORD3>\r
+            <KEYWORD3>Ifndef</KEYWORD3>\r
+            <KEYWORD3>Ifnot</KEYWORD3>\r
+            <KEYWORD3>Iftrue</KEYWORD3>\r
+            <KEYWORD3>Iffalse</KEYWORD3>\r
+            <KEYWORD3>Import</KEYWORD3>\r
+            <KEYWORD3>Include</KEYWORD3>\r
+            <KEYWORD3>Link</KEYWORD3>\r
+            <KEYWORD3>Lowstring</KEYWORD3>\r
+            <KEYWORD3>Message</KEYWORD3>\r
+            <KEYWORD3>Object</KEYWORD3>\r
+            <KEYWORD3>Property</KEYWORD3>\r
+            <KEYWORD3>Replace</KEYWORD3>\r
+            <KEYWORD3>Serial</KEYWORD3>\r
+            <KEYWORD3>Switches</KEYWORD3>\r
+            <KEYWORD3>Statusline</KEYWORD3>\r
+            <KEYWORD3>System_file</KEYWORD3>\r
+            <KEYWORD3>Verb</KEYWORD3>\r
+            <KEYWORD3>private</KEYWORD3>\r
+\r
+            <LITERAL2>false</LITERAL2>\r
+            <LITERAL2>true</LITERAL2>\r
+            <LITERAL2>null</LITERAL2>\r
+            <LITERAL2>super</LITERAL2>\r
+            <LITERAL2>self</LITERAL2>\r
+\r
+            <INVALID>this</INVALID>\r
+        </KEYWORDS>\r
+    </RULES>\r
+    <RULES SET="InformInnerText" IGNORE_CASE="FALSE" DEFAULT="LITERAL1">\r
+        <SEQ TYPE="OPERATOR">^</SEQ>\r
+        <SEQ TYPE="OPERATOR">~</SEQ>\r
+        <SEQ TYPE="OPERATOR">@</SEQ>\r
+        <SEQ TYPE="OPERATOR">\</SEQ>\r
+\r
+        <!-- escaping the @ symbol -->\r
+        <SEQ TYPE="LITERAL2">@@</SEQ>\r
+    </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/ini.xml b/extra/xmode/modes/ini.xml
new file mode 100644 (file)
index 0000000..71c50b6
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE=";" />\r
+       </PROPS>\r
+       <RULES HIGHLIGHT_DIGITS="TRUE">\r
+               <SPAN TYPE="KEYWORD2" AT_LINE_START="TRUE">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1" AT_LINE_START="TRUE">;</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1" AT_LINE_START="TRUE">#</EOL_SPAN>\r
+\r
+               <MARK_PREVIOUS TYPE="KEYWORD1"\r
+                       AT_LINE_START="TRUE" MATCH_TYPE="OPERATOR">=</MARK_PREVIOUS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/inno-setup.xml b/extra/xmode/modes/inno-setup.xml
new file mode 100644 (file)
index 0000000..d40575e
--- /dev/null
@@ -0,0 +1,406 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE=";" />\r
+       </PROPS>\r
+       <RULES HIGHLIGHT_DIGITS="FALSE">\r
+\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE" DELEGATE="pascal::MAIN">[code]</SEQ>\r
+\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[Setup]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[Types]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[Components]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[Tasks]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[Dirs]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[Files]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[Icons]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[INI]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[InstallDelete]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[Languages]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[Messages]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[CustomMessages]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[LangOptions]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[Registry]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[Run]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[UninstallRun]</SEQ>\r
+               <SEQ TYPE="KEYWORD2" AT_LINE_START="TRUE">[UninstallDelete]</SEQ>\r
+\r
+               <!-- pre-processor directives -->\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#define </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#dim </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#undef </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#include </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#emit </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#expr </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#insert </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#append </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#if </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#elif </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#else </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#endif</EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#ifexist </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#ifnexist </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#ifdef </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#for </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#sub </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#endsub</EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#pragma </EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">#error </EOL_SPAN>\r
+               <SPAN TYPE="LITERAL4">\r
+                       <BEGIN>{#</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="LITERAL2">%</MARK_FOLLOWING>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="STRING">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" DELEGATE="STRING">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               <!-- variable -->\r
+               <SPAN TYPE="KEYWORD3">\r
+                       <BEGIN>{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT1" AT_LINE_START="TRUE">;</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1" AT_LINE_START="TRUE">#</EOL_SPAN>\r
+\r
+               <!--\r
+               <MARK_PREVIOUS TYPE="KEYWORD1"\r
+                       AT_LINE_START="TRUE" MATCH_TYPE="CONTEXT"">=</MARK_PREVIOUS>\r
+               -->\r
+\r
+               <KEYWORDS>\r
+                       <!-- [Setup] -->\r
+                       <!-- compiler -->\r
+                       <KEYWORD1>Compression</KEYWORD1>\r
+                       <KEYWORD1>DiskClusterSize</KEYWORD1>\r
+                       <KEYWORD1>DiskSliceSize</KEYWORD1>\r
+                       <KEYWORD1>DiskSpanning</KEYWORD1>\r
+                       <KEYWORD1>Encryption</KEYWORD1>\r
+                       <KEYWORD1>InternalCompressLevel</KEYWORD1>\r
+                       <KEYWORD1>MergeDuplicateFiles</KEYWORD1>\r
+                       <KEYWORD1>OutputBaseFilename</KEYWORD1>\r
+                       <KEYWORD1>OutputDir</KEYWORD1>\r
+                       <KEYWORD1>ReserveBytes</KEYWORD1>\r
+                       <KEYWORD1>SlicesPerDisk</KEYWORD1>\r
+                       <KEYWORD1>SolidCompression</KEYWORD1>\r
+                       <KEYWORD1>SourceDir</KEYWORD1>\r
+                       <KEYWORD1>UseSetupLdr</KEYWORD1>\r
+                       <KEYWORD1>VersionInfoCompany</KEYWORD1>\r
+                       <KEYWORD1>VersionInfoDescription</KEYWORD1>\r
+                       <KEYWORD1>VersionInfoTextVersion</KEYWORD1>\r
+                       <KEYWORD1>VersionInfoVersion</KEYWORD1>\r
+                       <!-- installer, functional -->\r
+                       <KEYWORD1>AllowCancelDuringInstall</KEYWORD1>\r
+                       <KEYWORD1>AllowNoIcons</KEYWORD1>\r
+                       <KEYWORD1>AllowRootDirectory</KEYWORD1>\r
+                       <KEYWORD1>AllowUNCPath</KEYWORD1>\r
+                       <KEYWORD1>AlwaysRestart</KEYWORD1>\r
+                       <KEYWORD1>AlwaysShowComponentsList</KEYWORD1>\r
+                       <KEYWORD1>AlwaysShowDirOnReadyPage</KEYWORD1>\r
+                       <KEYWORD1>AlwaysShowGroupOnReadyPage</KEYWORD1>\r
+                       <KEYWORD1>AlwaysUsePersonalGroup</KEYWORD1>\r
+                       <KEYWORD1>AppendDefaultDirName</KEYWORD1>\r
+                       <KEYWORD1>AppendDefaultGroupName</KEYWORD1>\r
+                       <KEYWORD1>AppComments</KEYWORD1>\r
+                       <KEYWORD1>AppContact</KEYWORD1>\r
+                       <KEYWORD1>AppId</KEYWORD1>\r
+                       <KEYWORD1>AppModifyPath</KEYWORD1>\r
+                       <KEYWORD1>AppMutex</KEYWORD1>\r
+                       <KEYWORD1>AppName</KEYWORD1>\r
+                       <KEYWORD1>AppPublisher</KEYWORD1>\r
+                       <KEYWORD1>AppPublisherURL</KEYWORD1>\r
+                       <KEYWORD1>AppReadmeFile</KEYWORD1>\r
+                       <KEYWORD1>AppSupportURL</KEYWORD1>\r
+                       <KEYWORD1>AppUpdatesURL</KEYWORD1>\r
+                       <KEYWORD1>AppVersion</KEYWORD1>\r
+                       <KEYWORD1>AppVerName</KEYWORD1>\r
+                       <KEYWORD1>ChangesAssociations</KEYWORD1>\r
+                       <KEYWORD1>CreateAppDir</KEYWORD1>\r
+                       <KEYWORD1>CreateUninstallRegKey</KEYWORD1>\r
+                       <KEYWORD1>DefaultDirName</KEYWORD1>\r
+                       <KEYWORD1>DefaultGroupName</KEYWORD1>\r
+                       <KEYWORD1>DefaultUserInfoName</KEYWORD1>\r
+                       <KEYWORD1>DefaultUserInfoOrg</KEYWORD1>\r
+                       <KEYWORD1>DefaultUserInfoSerial</KEYWORD1>\r
+                       <KEYWORD1>DirExistsWarning</KEYWORD1>\r
+                       <KEYWORD1>DisableDirPage</KEYWORD1>\r
+                       <KEYWORD1>DisableFinishedPage</KEYWORD1>\r
+                       <KEYWORD1>DisableProgramGroupPage</KEYWORD1>\r
+                       <KEYWORD1>DisableReadyMemo</KEYWORD1>\r
+                       <KEYWORD1>DisableReadyPage</KEYWORD1>\r
+                       <KEYWORD1>DisableStartupPrompt</KEYWORD1>\r
+                       <KEYWORD1>EnableDirDoesntExistWarning</KEYWORD1>\r
+                       <KEYWORD1>ExtraDiskSpaceRequired</KEYWORD1>\r
+                       <KEYWORD1>InfoAfterFile</KEYWORD1>\r
+                       <KEYWORD1>InfoBeforeFile</KEYWORD1>\r
+                       <KEYWORD1>LanguageDetectionMethod</KEYWORD1>\r
+                       <KEYWORD1>LicenseFile</KEYWORD1>\r
+                       <KEYWORD1>MinVersion</KEYWORD1>\r
+                       <KEYWORD1>OnlyBelowVersion</KEYWORD1>\r
+                       <KEYWORD1>Password</KEYWORD1>\r
+                       <KEYWORD1>PrivilegesRequired</KEYWORD1>\r
+                       <KEYWORD1>RestartIfNeededByRun</KEYWORD1>\r
+                       <KEYWORD1>ShowLanguageDialog</KEYWORD1>\r
+                       <KEYWORD1>TimeStampRounding</KEYWORD1>\r
+                       <KEYWORD1>TimeStampsInUTC</KEYWORD1>\r
+                       <KEYWORD1>TouchDate</KEYWORD1>\r
+                       <KEYWORD1>TouchTime</KEYWORD1>\r
+                       <KEYWORD1>Uninstallable</KEYWORD1>\r
+                       <KEYWORD1>UninstallDisplayIcon</KEYWORD1>\r
+                       <KEYWORD1>UninstallDisplayName</KEYWORD1>\r
+                       <KEYWORD1>UninstallFilesDir</KEYWORD1>\r
+                       <KEYWORD1>UninstallLogMode</KEYWORD1>\r
+                       <KEYWORD1>UninstallRestartComputer</KEYWORD1>\r
+                       <KEYWORD1>UpdateUninstallLogAppName</KEYWORD1>\r
+                       <KEYWORD1>UsePreviousAppDir</KEYWORD1>\r
+                       <KEYWORD1>UsePreviousGroup</KEYWORD1>\r
+                       <KEYWORD1>UsePreviousSetupType</KEYWORD1>\r
+                       <KEYWORD1>UsePreviousTasks</KEYWORD1>\r
+                       <KEYWORD1>UsePreviousUserInfo</KEYWORD1>\r
+                       <KEYWORD1>UserInfoPage</KEYWORD1>\r
+                       <!-- installer, cosmetic -->\r
+                       <KEYWORD1>AppCopyright</KEYWORD1>\r
+                       <KEYWORD1>BackColor</KEYWORD1>\r
+                       <KEYWORD1>BackColor2</KEYWORD1>\r
+                       <KEYWORD1>BackColorDirection</KEYWORD1>\r
+                       <KEYWORD1>BackSolid</KEYWORD1>\r
+                       <KEYWORD1>FlatComponentsList</KEYWORD1>\r
+                       <KEYWORD1>SetupIconFile</KEYWORD1>\r
+                       <KEYWORD1>ShowComponentSizes</KEYWORD1>\r
+                       <KEYWORD1>ShowTasksTreeLines</KEYWORD1>\r
+                       <KEYWORD1>UninstallStyle</KEYWORD1>\r
+                       <KEYWORD1>WindowShowCaption</KEYWORD1>\r
+                       <KEYWORD1>WindowStartMaximized</KEYWORD1>\r
+                       <KEYWORD1>WindowResizable</KEYWORD1>\r
+                       <KEYWORD1>WindowVisible</KEYWORD1>\r
+                       <KEYWORD1>WizardImageBackColor</KEYWORD1>\r
+                       <KEYWORD1>WizardImageFile</KEYWORD1>\r
+                       <KEYWORD1>WizardImageStretch</KEYWORD1>\r
+                       <KEYWORD1>WizardSmallImageBackColor</KEYWORD1>\r
+                       <KEYWORD1>WizardSmallImageFile</KEYWORD1>\r
+                       <KEYWORD1>UninstallIconFile</KEYWORD1>\r
+\r
+                       <!-- parameters -->\r
+                       <KEYWORD4>AfterInstall</KEYWORD4>\r
+                       <KEYWORD4>Attribs</KEYWORD4>\r
+                       <KEYWORD4>BeforeInstall</KEYWORD4>\r
+                       <KEYWORD4>Check</KEYWORD4>\r
+                       <KEYWORD4>Comment</KEYWORD4>\r
+                       <KEYWORD4>Components</KEYWORD4>\r
+                       <KEYWORD4>CopyMode</KEYWORD4>\r
+                       <KEYWORD4>Description</KEYWORD4>\r
+                       <KEYWORD4>DestDir</KEYWORD4>\r
+                       <KEYWORD4>DestName</KEYWORD4>\r
+                       <KEYWORD4>Excludes</KEYWORD4>\r
+                       <KEYWORD4>ExtraDiskSpaceRequired</KEYWORD4>\r
+                       <KEYWORD4>Filename</KEYWORD4>\r
+                       <KEYWORD4>Flags</KEYWORD4>\r
+                       <KEYWORD4>FontInstall</KEYWORD4>\r
+                       <KEYWORD4>GroupDescription</KEYWORD4>\r
+                       <KEYWORD4>HotKey</KEYWORD4>\r
+                       <KEYWORD4>IconFilename</KEYWORD4>\r
+                       <KEYWORD4>IconIndex</KEYWORD4>\r
+                       <KEYWORD4>InfoBeforeFile</KEYWORD4>\r
+                       <KEYWORD4>InfoAfterFile</KEYWORD4>\r
+                       <KEYWORD4>Key</KEYWORD4>\r
+                       <!--<KEYWORD4>LicenseFile</KEYWORD4>-->\r
+                       <KEYWORD4>MessagesFile</KEYWORD4>\r
+                       <KEYWORD4>Name</KEYWORD4>\r
+                       <KEYWORD4>Parameters</KEYWORD4>\r
+                       <KEYWORD4>Permissions</KEYWORD4>\r
+                       <KEYWORD4>Root</KEYWORD4>\r
+                       <KEYWORD4>RunOnceId</KEYWORD4>\r
+                       <KEYWORD4>Section</KEYWORD4>\r
+                       <KEYWORD4>Source</KEYWORD4>\r
+                       <KEYWORD4>StatusMsg</KEYWORD4>\r
+                       <KEYWORD4>String</KEYWORD4>\r
+                       <KEYWORD4>Subkey</KEYWORD4>\r
+                       <KEYWORD4>Tasks</KEYWORD4>\r
+                       <KEYWORD4>Type</KEYWORD4>\r
+                       <KEYWORD4>Types</KEYWORD4>\r
+                       <KEYWORD4>ValueType</KEYWORD4>\r
+                       <KEYWORD4>ValueName</KEYWORD4>\r
+                       <KEYWORD4>ValueData</KEYWORD4>\r
+                       <KEYWORD4>WorkingDir</KEYWORD4>\r
+\r
+                       <!-- flags -->\r
+                       <LITERAL3>allowunsafefiles</LITERAL3>\r
+                       <LITERAL3>checkedonce</LITERAL3>\r
+                       <LITERAL3>closeonexit</LITERAL3>\r
+                       <LITERAL3>compact</LITERAL3>\r
+                       <LITERAL3>comparetimestamp</LITERAL3>\r
+                       <LITERAL3>confirmoverwrite</LITERAL3>\r
+                       <LITERAL3>createkeyifdoesntexist</LITERAL3>\r
+                       <LITERAL3>createonlyiffileexists</LITERAL3>\r
+                       <LITERAL3>createvalueifdoesntexist</LITERAL3>\r
+                       <LITERAL3>deleteafterinstall</LITERAL3>\r
+                       <LITERAL3>deletekey</LITERAL3>\r
+                       <LITERAL3>deletevalue</LITERAL3>\r
+                       <LITERAL3>desktopicon</LITERAL3>\r
+                       <LITERAL3>dirifempty</LITERAL3>\r
+                       <LITERAL3>disablenouninstallwarning</LITERAL3>\r
+                       <LITERAL3>dontcloseonexit</LITERAL3>\r
+                       <LITERAL3>dontcopy</LITERAL3>\r
+                       <LITERAL3>dontcreatekey</LITERAL3>\r
+                       <LITERAL3>dontinheritcheck</LITERAL3>\r
+                       <LITERAL3>dontverifychecksum</LITERAL3>\r
+                       <LITERAL3>exclusive</LITERAL3>\r
+                       <LITERAL3>external</LITERAL3>\r
+                       <LITERAL3>files</LITERAL3>\r
+                       <LITERAL3>filesandordirs</LITERAL3>\r
+                       <LITERAL3>fixed</LITERAL3>\r
+                       <LITERAL3>fontisnttruetype</LITERAL3>\r
+                       <LITERAL3>full</LITERAL3>\r
+                       <LITERAL3>ignoreversion</LITERAL3>\r
+                       <LITERAL3>iscustom</LITERAL3>\r
+                       <LITERAL3>isreadme</LITERAL3>\r
+                       <LITERAL3>hidden</LITERAL3>\r
+                       <LITERAL3>hidewizard</LITERAL3>\r
+                       <LITERAL3>modify</LITERAL3>\r
+                       <LITERAL3>nocompression</LITERAL3>\r
+                       <LITERAL3>noencryption</LITERAL3>\r
+                       <LITERAL3>noerror</LITERAL3>\r
+                       <LITERAL3>noregerror</LITERAL3>\r
+                       <LITERAL3>nowait</LITERAL3>\r
+                       <LITERAL3>onlyifdestfileexists</LITERAL3>\r
+                       <LITERAL3>onlyifdoesntexist</LITERAL3>\r
+                       <LITERAL3>overwritereadonly</LITERAL3>\r
+                       <LITERAL3>postinstall</LITERAL3>\r
+                       <LITERAL3>preservestringtype</LITERAL3>\r
+                       <LITERAL3>promptifolder</LITERAL3>\r
+                       <LITERAL3>quicklaunchicon</LITERAL3>\r
+                       <LITERAL3>read</LITERAL3>\r
+                       <LITERAL3>readonly</LITERAL3>\r
+                       <LITERAL3>readexec</LITERAL3>\r
+                       <LITERAL3>recursesubdirs</LITERAL3>\r
+                       <LITERAL3>regserver</LITERAL3>\r
+                       <LITERAL3>regtypelib</LITERAL3>\r
+                       <LITERAL3>replacesameversion</LITERAL3>\r
+                       <LITERAL3>restart</LITERAL3>\r
+                       <LITERAL3>restartreplace</LITERAL3>\r
+                       <LITERAL3>runhidden</LITERAL3>\r
+                       <LITERAL3>runmaximized</LITERAL3>\r
+                       <LITERAL3>runminimized</LITERAL3>\r
+                       <LITERAL3>sharedfile</LITERAL3>\r
+                       <LITERAL3>shellexec</LITERAL3>\r
+                       <LITERAL3>skipifnotsilent</LITERAL3>\r
+                       <LITERAL3>skipifsilent</LITERAL3>\r
+                       <LITERAL3>skipifdoesntexist</LITERAL3>\r
+                       <LITERAL3>skipifsourcedoesntexist</LITERAL3>\r
+                       <LITERAL3>sortfilesbyextension</LITERAL3>\r
+                       <LITERAL3>system</LITERAL3>\r
+                       <LITERAL3>touch</LITERAL3>\r
+                       <LITERAL3>unchecked</LITERAL3>\r
+                       <LITERAL3>uninsalwaysuninstall</LITERAL3>\r
+                       <LITERAL3>uninsclearvalue</LITERAL3>\r
+                       <LITERAL3>uninsdeleteentry</LITERAL3>\r
+                       <LITERAL3>uninsdeletekey</LITERAL3>\r
+                       <LITERAL3>uninsdeletekeyifempty</LITERAL3>\r
+                       <LITERAL3>uninsdeletesection</LITERAL3>\r
+                       <LITERAL3>uninsdeletesectionifempty</LITERAL3>\r
+                       <LITERAL3>uninsdeletevalue</LITERAL3>\r
+                       <LITERAL3>uninsneveruninstall</LITERAL3>\r
+                       <LITERAL3>uninsremovereadonly</LITERAL3>\r
+                       <LITERAL3>uninsrestartdelete</LITERAL3>\r
+                       <LITERAL3>useapppaths</LITERAL3>\r
+                       <LITERAL3>waituntilidle</LITERAL3>\r
+\r
+                       <!-- registry root keys -->\r
+                       <LITERAL3>HKCR</LITERAL3>\r
+                       <LITERAL3>HKCU</LITERAL3>\r
+                       <LITERAL3>HKLM</LITERAL3>\r
+                       <LITERAL3>HKU</LITERAL3>\r
+                       <LITERAL3>HKCC</LITERAL3>\r
+\r
+                       <!-- registry value types -->\r
+                       <LITERAL3>none</LITERAL3>\r
+                       <LITERAL3>string</LITERAL3>\r
+                       <LITERAL3>expandsz</LITERAL3>\r
+                       <LITERAL3>multisz</LITERAL3>\r
+                       <LITERAL3>dword</LITERAL3>\r
+                       <LITERAL3>binary</LITERAL3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="STRING" DEFAULT="LITERAL1" IGNORE_CASE="TRUE">\r
+               <!-- pre-processor constant -->\r
+               <SPAN TYPE="LITERAL4">\r
+                       <BEGIN>{#</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <!-- constant -->\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="CONSTANT">\r
+                       <BEGIN>{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="CONSTANT" DEFAULT="KEYWORD3">\r
+               <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="CONTEXT">code:</MARK_FOLLOWING>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+       </RULES>\r
+\r
+       <!-- pre-processor directives -->\r
+       <RULES SET="DIRECTIVE" DEFAULT="LITERAL4" IGNORE_CASE="TRUE">\r
+               <EOL_SPAN TYPE="COMMENT1">;</EOL_SPAN>\r
+\r
+               <SPAN TYPE="COMMENT2">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- pre-processor defined functions -->\r
+               <KEYWORDS>\r
+                       <FUNCTION>Defined</FUNCTION>\r
+                       <FUNCTION>TypeOf</FUNCTION>\r
+                       <FUNCTION>GetFileVersion</FUNCTION>\r
+                       <FUNCTION>GetStringFileInfo</FUNCTION>\r
+                       <FUNCTION>Int</FUNCTION>\r
+                       <FUNCTION>Str</FUNCTION>\r
+                       <FUNCTION>FileExists</FUNCTION>\r
+                       <FUNCTION>FileSize</FUNCTION>\r
+                       <FUNCTION>ReadIni</FUNCTION>\r
+                       <FUNCTION>WriteIni</FUNCTION>\r
+                       <FUNCTION>ReadReg</FUNCTION>\r
+                       <FUNCTION>Exec</FUNCTION>\r
+                       <FUNCTION>Copy</FUNCTION>\r
+                       <FUNCTION>Pos</FUNCTION>\r
+                       <FUNCTION>RPos</FUNCTION>\r
+                       <FUNCTION>Len</FUNCTION>\r
+                       <FUNCTION>SaveToFile</FUNCTION>\r
+                       <FUNCTION>Find</FUNCTION>\r
+                       <FUNCTION>SetupSetting</FUNCTION>\r
+                       <FUNCTION>SetSetupSetting</FUNCTION>\r
+                       <FUNCTION>LowerCase</FUNCTION>\r
+                       <FUNCTION>EntryCount</FUNCTION>\r
+                       <FUNCTION>GetEnv</FUNCTION>\r
+                       <FUNCTION>DeleteFile</FUNCTION>\r
+                       <FUNCTION>CopyFile</FUNCTION>\r
+                       <FUNCTION>FindFirst</FUNCTION>\r
+                       <FUNCTION>FindNext</FUNCTION>\r
+                       <FUNCTION>FindClose</FUNCTION>\r
+                       <FUNCTION>FindGetFileName</FUNCTION>\r
+                       <FUNCTION>FileOpen</FUNCTION>\r
+                       <FUNCTION>FileRead</FUNCTION>\r
+                       <FUNCTION>FileReset</FUNCTION>\r
+                       <FUNCTION>FileEof</FUNCTION>\r
+                       <FUNCTION>FileClose</FUNCTION>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/interlis.xml b/extra/xmode/modes/interlis.xml
new file mode 100644 (file)
index 0000000..28960bf
--- /dev/null
@@ -0,0 +1,262 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- INTERLIS mode (www.interlis.ch) by Claude Eisenhut (ce@eisenhutinformatik.ch). -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="blockComment" VALUE="!!" />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="FALSE">\r
+               <!-- Normal comments. -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">!!</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- Explanations. -->\r
+               <SPAN TYPE="COMMENT2">\r
+                       <BEGIN>//</BEGIN>\r
+                       <END>//</END>\r
+               </SPAN>\r
+\r
+               <!-- INTERLIS 1 -->\r
+               <SEQ TYPE="OPERATOR">-&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;-</SEQ>\r
+               <SEQ TYPE="OPERATOR">..</SEQ>\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">;</SEQ>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">(</SEQ>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <!-- INTERLIS 2.1 -->\r
+               <SEQ TYPE="OPERATOR">!=</SEQ>\r
+               <SEQ TYPE="OPERATOR">#</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">(</SEQ>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">--</SEQ>\r
+               <SEQ TYPE="OPERATOR">-&lt;#&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">-&lt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">-&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <SEQ TYPE="OPERATOR">..</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+               <SEQ TYPE="OPERATOR">:=</SEQ>\r
+               <SEQ TYPE="OPERATOR">;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">==</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">\</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               \r
+               <KEYWORDS>\r
+                       <!-- INTERLIS 1 -->\r
+                       <KEYWORD1>ANY</KEYWORD1>\r
+                       <KEYWORD1>ARCS</KEYWORD1>\r
+                       <KEYWORD1>AREA</KEYWORD1>\r
+                       <KEYWORD1>BASE</KEYWORD1>\r
+                       <KEYWORD1>BLANK</KEYWORD1>\r
+                       <KEYWORD1>CODE</KEYWORD1>\r
+                       <KEYWORD1>CONTINUE</KEYWORD1>\r
+                       <KEYWORD1>CONTOUR</KEYWORD1>\r
+                       <KEYWORD1>COORD2</KEYWORD1>\r
+                       <KEYWORD1>COORD3</KEYWORD1>\r
+                       <KEYWORD1>DATE</KEYWORD1>\r
+                       <KEYWORD1>DEFAULT</KEYWORD1>\r
+                       <KEYWORD1>DEGREES</KEYWORD1>\r
+                       <KEYWORD1>DERIVATIVES</KEYWORD1>\r
+                       <KEYWORD1>DIM1</KEYWORD1>\r
+                       <KEYWORD1>DIM2</KEYWORD1>\r
+                       <KEYWORD1>DOMAIN</KEYWORD1>\r
+                       <KEYWORD1>END</KEYWORD1>\r
+                       <KEYWORD1>FIX</KEYWORD1>\r
+                       <KEYWORD1>FONT</KEYWORD1>\r
+                       <KEYWORD1>FORMAT</KEYWORD1>\r
+                       <KEYWORD1>FREE</KEYWORD1>\r
+                       <KEYWORD1>GRADS</KEYWORD1>\r
+                       <KEYWORD1>HALIGNMENT</KEYWORD1>\r
+                       <KEYWORD1>I16</KEYWORD1>\r
+                       <KEYWORD1>I32</KEYWORD1>\r
+                       <KEYWORD1>IDENT</KEYWORD1>\r
+                       <KEYWORD1>LINEATTR</KEYWORD1>\r
+                       <KEYWORD1>LINESIZE</KEYWORD1>\r
+                       <KEYWORD1>MODEL</KEYWORD1>\r
+                       <KEYWORD1>NO</KEYWORD1>\r
+                       <KEYWORD1>OPTIONAL</KEYWORD1>\r
+                       <KEYWORD1>OVERLAPS</KEYWORD1>\r
+                       <KEYWORD1>PERIPHERY</KEYWORD1>\r
+                       <KEYWORD1>POLYLINE</KEYWORD1>\r
+                       <KEYWORD1>RADIANS</KEYWORD1>\r
+                       <KEYWORD1>STRAIGHTS</KEYWORD1>\r
+                       <KEYWORD1>SURFACE</KEYWORD1>\r
+                       <KEYWORD1>TABLE</KEYWORD1>\r
+                       <KEYWORD1>TEXT</KEYWORD1>\r
+                       <KEYWORD1>TID</KEYWORD1>\r
+                       <KEYWORD1>TIDSIZE</KEYWORD1>\r
+                       <KEYWORD1>TOPIC</KEYWORD1>\r
+                       <KEYWORD1>TRANSFER</KEYWORD1>\r
+                       <KEYWORD1>UNDEFINED</KEYWORD1>\r
+                       <KEYWORD1>VALIGNMENT</KEYWORD1>\r
+                       <KEYWORD1>VERTEX</KEYWORD1>\r
+                       <KEYWORD1>VERTEXINFO</KEYWORD1>\r
+                       <KEYWORD1>VIEW</KEYWORD1>\r
+                       <KEYWORD1>WITH</KEYWORD1>\r
+                       <KEYWORD1>WITHOUT</KEYWORD1>\r
+\r
+                       <!-- INTERLIS 2.3 -->\r
+                       <KEYWORD1>ABSTRACT</KEYWORD1>\r
+                       <KEYWORD1>ACCORDING</KEYWORD1>\r
+                       <KEYWORD1>AGGREGATES</KEYWORD1>\r
+                       <KEYWORD1>AGGREGATION</KEYWORD1>\r
+                       <KEYWORD1>ALL</KEYWORD1>\r
+                       <KEYWORD1>AND</KEYWORD1>\r
+                       <KEYWORD1>ANY</KEYWORD1>\r
+                       <KEYWORD1>ANYCLASS</KEYWORD1>\r
+                       <KEYWORD1>ANYSTRUCTURE</KEYWORD1>\r
+                       <KEYWORD1>ARCS</KEYWORD1>\r
+                       <KEYWORD1>AREA</KEYWORD1>\r
+                       <KEYWORD1>AS</KEYWORD1>\r
+                       <KEYWORD1>ASSOCIATION</KEYWORD1>\r
+                       <KEYWORD1>AT</KEYWORD1>\r
+                       <KEYWORD1>ATTRIBUTE</KEYWORD1>\r
+                       <KEYWORD1>ATTRIBUTES</KEYWORD1>\r
+                       <KEYWORD1>BAG</KEYWORD1>\r
+                       <KEYWORD1>BASE</KEYWORD1>\r
+                       <KEYWORD1>BASED</KEYWORD1>\r
+                       <KEYWORD1>BASKET</KEYWORD1>\r
+                       <KEYWORD1>BINARY</KEYWORD1>\r
+                       <KEYWORD1>BLACKBOX</KEYWORD1>\r
+                       <KEYWORD1>BOOLEAN</KEYWORD1>\r
+                       <KEYWORD1>BY</KEYWORD1>\r
+                       <KEYWORD1>CARDINALITY</KEYWORD1>\r
+                       <KEYWORD1>CIRCULAR</KEYWORD1>\r
+                       <KEYWORD1>CLASS</KEYWORD1>\r
+                       <KEYWORD1>CLOCKWISE</KEYWORD1>\r
+                       <KEYWORD1>CONSTRAINT</KEYWORD1>\r
+                       <KEYWORD1>CONSTRAINTS</KEYWORD1>\r
+                       <KEYWORD1>CONTINUE</KEYWORD1>\r
+                       <KEYWORD1>CONTINUOUS</KEYWORD1>\r
+                       <KEYWORD1>CONTRACTED</KEYWORD1>\r
+                       <KEYWORD1>COORD</KEYWORD1>\r
+                       <KEYWORD1>COUNTERCLOCKWISE</KEYWORD1>\r
+                       <KEYWORD1>DEFINED</KEYWORD1>\r
+                       <KEYWORD1>DEPENDS</KEYWORD1>\r
+                       <KEYWORD1>DERIVED</KEYWORD1>\r
+                       <KEYWORD1>DIRECTED</KEYWORD1>\r
+                       <KEYWORD1>DOMAIN</KEYWORD1>\r
+                       <KEYWORD1>END</KEYWORD1>\r
+                       <KEYWORD1>ENUMTREEVAL</KEYWORD1>\r
+                       <KEYWORD1>ENUMVAL</KEYWORD1>\r
+                       <KEYWORD1>EQUAL</KEYWORD1>\r
+                       <KEYWORD1>EXISTENCE</KEYWORD1>\r
+                       <KEYWORD1>EXTENDED</KEYWORD1>\r
+                       <KEYWORD1>EXTENDS</KEYWORD1>\r
+                       <KEYWORD1>EXTERNAL</KEYWORD1>\r
+                       <KEYWORD1>FINAL</KEYWORD1>\r
+                       <KEYWORD1>FIRST</KEYWORD1>\r
+                       <KEYWORD1>FORM</KEYWORD1>\r
+                       <KEYWORD1>FROM</KEYWORD1>\r
+                       <KEYWORD1>FUNCTION</KEYWORD1>\r
+                       <KEYWORD1>GRAPHIC</KEYWORD1>\r
+                       <KEYWORD1>HALIGNMENT</KEYWORD1>\r
+                       <KEYWORD1>HIDING</KEYWORD1>\r
+                       <KEYWORD1>IMPORTS</KEYWORD1>\r
+                       <KEYWORD1>IN</KEYWORD1>\r
+                       <KEYWORD1>INHERITANCE</KEYWORD1>\r
+                       <KEYWORD1>INSPECTION</KEYWORD1>\r
+                       <KEYWORD1>INTERLIS</KEYWORD1>\r
+                       <KEYWORD1>JOIN</KEYWORD1>\r
+                       <KEYWORD1>LAST</KEYWORD1>\r
+                       <KEYWORD1>LINE</KEYWORD1>\r
+                       <KEYWORD1>LIST</KEYWORD1>\r
+                       <KEYWORD1>LNBASE</KEYWORD1>\r
+                       <KEYWORD1>LOCAL</KEYWORD1>\r
+                       <KEYWORD1>MANDATORY</KEYWORD1>\r
+                       <KEYWORD1>METAOBJECT</KEYWORD1>\r
+                       <KEYWORD1>MODEL</KEYWORD1>\r
+                       <KEYWORD1>MTEXT</KEYWORD1>\r
+                       <KEYWORD1>NAME</KEYWORD1>\r
+                       <KEYWORD1>NOT</KEYWORD1>\r
+                       <KEYWORD1>NO</KEYWORD1>\r
+                       <KEYWORD1>NULL</KEYWORD1>\r
+                       <KEYWORD1>NUMERIC</KEYWORD1>\r
+                       <KEYWORD1>OBJECT</KEYWORD1>\r
+                       <KEYWORD1>OF</KEYWORD1>\r
+                       <KEYWORD1>OID</KEYWORD1>\r
+                       <KEYWORD1>ON</KEYWORD1>\r
+                       <KEYWORD1>OR</KEYWORD1>\r
+                       <KEYWORD1>ORDERED</KEYWORD1>\r
+                       <KEYWORD1>OTHERS</KEYWORD1>\r
+                       <KEYWORD1>OVERLAPS</KEYWORD1>\r
+                       <KEYWORD1>PARAMETER</KEYWORD1>\r
+                       <KEYWORD1>PARENT</KEYWORD1>\r
+                       <KEYWORD1>PI</KEYWORD1>\r
+                       <KEYWORD1>POLYLINE</KEYWORD1>\r
+                       <KEYWORD1>PROJECTION</KEYWORD1>\r
+                       <KEYWORD1>REFERENCE</KEYWORD1>\r
+                       <KEYWORD1>REFSYSTEM</KEYWORD1>\r
+                       <KEYWORD1>REQUIRED</KEYWORD1>\r
+                       <KEYWORD1>RESTRICTED</KEYWORD1>\r
+                       <KEYWORD1>ROTATION</KEYWORD1>\r
+                       <KEYWORD1>SET</KEYWORD1>\r
+                       <KEYWORD1>SIGN</KEYWORD1>\r
+                       <KEYWORD1>STRAIGHTS</KEYWORD1>\r
+                       <KEYWORD1>STRUCTURE</KEYWORD1>\r
+                       <KEYWORD1>SUBDIVISION</KEYWORD1>\r
+                       <KEYWORD1>SURFACE</KEYWORD1>\r
+                       <KEYWORD1>SYMBOLOGY</KEYWORD1>\r
+                       <KEYWORD1>TEXT</KEYWORD1>\r
+                       <KEYWORD1>THATAREA</KEYWORD1>\r
+                       <KEYWORD1>THIS</KEYWORD1>\r
+                       <KEYWORD1>THISAREA</KEYWORD1>\r
+                       <KEYWORD1>TO</KEYWORD1>\r
+                       <KEYWORD1>TOPIC</KEYWORD1>\r
+                       <KEYWORD1>TRANSIENT</KEYWORD1>\r
+                       <KEYWORD1>TRANSLATION</KEYWORD1>\r
+                       <KEYWORD1>TYPE</KEYWORD1>\r
+                       <KEYWORD1>UNDEFINED</KEYWORD1>\r
+                       <KEYWORD1>UNION</KEYWORD1>\r
+                       <KEYWORD1>UNIQUE</KEYWORD1>\r
+                       <KEYWORD1>UNIT</KEYWORD1>\r
+                       <KEYWORD1>UNQUALIFIED</KEYWORD1>\r
+                       <KEYWORD1>URI</KEYWORD1>\r
+                       <KEYWORD1>VALIGNMENT</KEYWORD1>\r
+                       <KEYWORD1>VERSION</KEYWORD1>\r
+                       <KEYWORD1>VERTEX</KEYWORD1>\r
+                       <KEYWORD1>VIEW</KEYWORD1>\r
+                       <KEYWORD1>WHEN</KEYWORD1>\r
+                       <KEYWORD1>WHERE</KEYWORD1>\r
+                       <KEYWORD1>WITH</KEYWORD1>\r
+                       <KEYWORD1>WITHOUT</KEYWORD1>\r
+                       \r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/io.xml b/extra/xmode/modes/io.xml
new file mode 100644 (file)
index 0000000..2ac4ffe
--- /dev/null
@@ -0,0 +1,153 @@
+<?xml version="1.0"?>\r
+\r
+<!-- @RisingSun//XML//1.0//EN________________________________________________\r
+       \r
+       JEdit syntax mode for Io\r
+\r
+       ..........................................................................\r
+\r
+       File name               :       io.xml\r
+       Description             :       JEdit syntax file for the Io programming language\r
+       Related links   :       <http://www.iolanguage.com>, <http://www.jedit.org>\r
+\r
+       ..........................................................................\r
+       Author                  :       Sébastien Pierre                  <spierre@type-z.org>\r
+       ..........................................................................\r
+\r
+       Creation date   :       05-May-2003\r
+       Last revision   :       19-May-2003\r
+       Revision                :       1.1\r
+    History                    :       \r
+                                               19-May-2003 Added primitives highlighting.\r
+                                               05-May-2003 First release\r
\r
+       .....................................................................  -->\r
+\r
+<!-- ________________________________________________________D O C T Y P E -->\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- ____________________________________________D O C U M E N T _ R O O T -->\r
+<MODE>\r
+\r
+       <!-- Properties_______________________________________________________ -->\r
+\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentStart" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+               <!-- FIXME: There may be a problem with this redefinition of\r
+               lineComment-->\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="(" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE=")" />\r
+       </PROPS>\r
+\r
+       <!-- Rules____________________________________________________________ -->\r
+\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+\r
+               <!-- Comments_____________________________________________________ -->\r
+\r
+               <!-- Shell-like comments -->\r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+\r
+               <!-- C-like comments -->\r
+               <EOL_SPAN TYPE="COMMENT1">//</EOL_SPAN>\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <!-- Strings______________________________________________________ -->\r
+\r
+               <!-- Single quotes -->\r
+               <SPAN TYPE="LITERAL2">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- Triple quotes -->\r
+               <SPAN TYPE="LITERAL2">\r
+                       <BEGIN>"""</BEGIN>\r
+                       <END>"""</END>\r
+               </SPAN>\r
+\r
+               <!-- Operatiors___________________________________________________ -->\r
+\r
+               <SEQ TYPE="OPERATOR">`</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">@</SEQ>\r
+               <SEQ TYPE="OPERATOR">@@</SEQ>\r
+               <SEQ TYPE="OPERATOR">$</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">\</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+\r
+               <!-- Keywords_____________________________________________________ -->\r
+\r
+               <KEYWORDS>\r
+\r
+                       <!-- Io primitives -->\r
+                       <KEYWORD1>Block</KEYWORD1>\r
+                       <KEYWORD1>Buffer</KEYWORD1>\r
+                       <KEYWORD1>CFunction</KEYWORD1>\r
+                       <KEYWORD1>Date</KEYWORD1>\r
+                       <KEYWORD1>Duration</KEYWORD1>\r
+                       <KEYWORD1>File</KEYWORD1>\r
+                       <KEYWORD1>Future</KEYWORD1>\r
+                       <KEYWORD1>List</KEYWORD1>\r
+                       <KEYWORD1>LinkedList</KEYWORD1>\r
+                       <KEYWORD1>Map</KEYWORD1>\r
+                       <KEYWORD1>Nop</KEYWORD1>\r
+                       <KEYWORD1>Message</KEYWORD1>\r
+                       <KEYWORD1>Nil</KEYWORD1>\r
+                       <KEYWORD1>Number</KEYWORD1>\r
+                       <KEYWORD1>Object</KEYWORD1>\r
+                       <KEYWORD1>String</KEYWORD1>\r
+                       <KEYWORD1>WeakLink</KEYWORD1>\r
+\r
+                       <!-- Io lambda-like primitives -->\r
+                       <KEYWORD1>block</KEYWORD1>\r
+                       <KEYWORD1>method</KEYWORD1>\r
+\r
+                       <!--  Io control primitives -->\r
+                       <KEYWORD2>while</KEYWORD2>\r
+                       <KEYWORD2>foreach</KEYWORD2>\r
+                       <KEYWORD2>if</KEYWORD2>\r
+                       <KEYWORD2>else</KEYWORD2>\r
+                       <KEYWORD2>do</KEYWORD2>\r
+\r
+                       <!--  Io basic messages -->\r
+                       <KEYWORD3>super</KEYWORD3>\r
+                       <KEYWORD3>self</KEYWORD3>\r
+                       <KEYWORD3>clone</KEYWORD3>\r
+                       <KEYWORD3>proto</KEYWORD3>\r
+                       <KEYWORD3>setSlot</KEYWORD3>\r
+                       <KEYWORD3>hasSlot</KEYWORD3>\r
+                       <KEYWORD3>type</KEYWORD3>\r
+                       <KEYWORD3>write</KEYWORD3>\r
+                       <KEYWORD3>print</KEYWORD3>\r
+                       <KEYWORD3>forward</KEYWORD3>\r
+\r
+               </KEYWORDS>\r
+\r
+       </RULES>\r
+\r
+</MODE>\r
+\r
+<!-- EOF-UNIX/iso-8895-1__________________________@RisingSun//XML//1.0//EN -->\r
diff --git a/extra/xmode/modes/java.xml b/extra/xmode/modes/java.xml
new file mode 100644 (file)
index 0000000..d350cdc
--- /dev/null
@@ -0,0 +1,273 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+\r
+               <!-- Auto indent -->\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />\r
+               <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />\r
+               <PROPERTY NAME="indentNextLine"\r
+                       VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+               <PROPERTY NAME="unindentThisLine"\r
+                       VALUE="^.*(default:\s*|case.*:.*)$" />\r
+               <PROPERTY NAME="electricKeys" VALUE=":" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\"\r
+               IGNORE_CASE="FALSE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="(0[lL]?|[1-9]\d{0,9}(\d{0,9}[lL])?|0[xX]\p{XDigit}{1,8}(\p{XDigit}{0,8}[lL])?|0[0-7]{1,11}([0-7]{0,11}[lL])?|([0-9]+\.[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?[fFdD]?|[0-9]+([eE][+-]?[0-9]+[fFdD]?|([eE][+-]?[0-9]+)?[fFdD]))">\r
+\r
+               <!-- Silly comment -->\r
+               <SEQ TYPE="COMMENT1">/**/</SEQ>\r
+\r
+               <!-- Javadoc comment -->\r
+               <SPAN TYPE="COMMENT3" DELEGATE="JAVADOC">\r
+                       <BEGIN>/**</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <!-- Java comment (C style) -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+\r
+               <!-- workaround to stop "*" from being colorized\r
+                    in import statements. -->\r
+               <SEQ TYPE="NULL">.*</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+                       AT_WHITESPACE_END="TRUE">:</MARK_PREVIOUS>\r
+\r
+               <!-- Function calls -->\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <!-- Annotation types -->\r
+               <MARK_FOLLOWING TYPE="KEYWORD4">@</MARK_FOLLOWING>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>abstract</KEYWORD1>\r
+                       <KEYWORD1>break</KEYWORD1>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>catch</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>extends</KEYWORD1>\r
+                       <KEYWORD1>final</KEYWORD1>\r
+                       <KEYWORD1>finally</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>implements</KEYWORD1>\r
+                       <KEYWORD1>instanceof</KEYWORD1>\r
+                       <KEYWORD1>native</KEYWORD1>\r
+                       <KEYWORD1>new</KEYWORD1>\r
+                       <KEYWORD1>private</KEYWORD1>\r
+                       <KEYWORD1>protected</KEYWORD1>\r
+                       <KEYWORD1>public</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>static</KEYWORD1>\r
+                       <KEYWORD1>switch</KEYWORD1>\r
+                       <KEYWORD1>synchronized</KEYWORD1>\r
+                       <KEYWORD1>throw</KEYWORD1>\r
+                       <KEYWORD1>throws</KEYWORD1>\r
+                       <KEYWORD1>transient</KEYWORD1>\r
+                       <KEYWORD1>try</KEYWORD1>\r
+                       <KEYWORD1>volatile</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+\r
+                       <KEYWORD2>package</KEYWORD2>\r
+                       <KEYWORD2>import</KEYWORD2>\r
+\r
+                       <KEYWORD3>boolean</KEYWORD3>\r
+                       <KEYWORD3>byte</KEYWORD3>\r
+                       <KEYWORD3>char</KEYWORD3>\r
+                       <KEYWORD3>class</KEYWORD3>\r
+                       <KEYWORD3>double</KEYWORD3>\r
+                       <KEYWORD3>float</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>interface</KEYWORD3>\r
+                       <KEYWORD3>long</KEYWORD3>\r
+                       <KEYWORD3>short</KEYWORD3>\r
+                       <KEYWORD3>void</KEYWORD3>\r
+\r
+                       <FUNCTION>assert</FUNCTION>\r
+                       <KEYWORD1>strictfp</KEYWORD1>\r
+\r
+\r
+                       <LITERAL2>false</LITERAL2>\r
+                       <LITERAL2>null</LITERAL2>\r
+                       <LITERAL2>super</LITERAL2>\r
+                       <LITERAL2>this</LITERAL2>\r
+                       <LITERAL2>true</LITERAL2>\r
+\r
+                       <INVALID>goto</INVALID>\r
+                       <INVALID>const</INVALID>\r
+\r
+                       <!-- Java 1.5 -->\r
+                       <KEYWORD3>enum</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="JAVADOC" DEFAULT="COMMENT3" IGNORE_CASE="TRUE">\r
+\r
+               <!-- so that *@param is highlighted -->\r
+               <SEQ TYPE="COMMENT3">*</SEQ>\r
+\r
+               <!-- Javadoc ignores tags inside <pre> -->\r
+               <!-- XXX no it doesn't -->\r
+               <!-- SPAN TYPE="MARKUP" DELEGATE="JAVADOC_PRE">\r
+                       <BEGIN>&lt;pre&gt;</BEGIN>\r
+                       <END>&lt;/pre&gt;</END>\r
+               </SPAN -->\r
+\r
+               <!-- HTML comments -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Javadoc allows this -->\r
+               <SEQ TYPE="COMMENT3">&lt;&lt;</SEQ>\r
+               <SEQ TYPE="COMMENT3">&lt;=</SEQ>\r
+               <SEQ TYPE="COMMENT3">&lt; </SEQ>\r
+\r
+               <!-- HTML tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS"\r
+                       NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- so that @link{...} is highlighted -->\r
+               <!-- XXX: this is wrong, {@link ..} is correct, see below -->\r
+               <!--<SEQ TYPE="COMMENT3">{</SEQ>-->\r
+\r
+               <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="{@" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">\r
+                       <BEGIN>\{@(link|linkplain|docRoot|code|literal)\s</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- for the common usage of the cvs keyword $Id: java.xml 9228 2007-03-27 22:01:25Z ezust $ -->\r
+               <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="@version" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">\r
+                       <BEGIN>@version\s+\$</BEGIN>\r
+                       <END>$</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- This works only when you use the same whitespace before and after the param's name,\r
+                        eg. a tab before and after, but mixing space and tab won't work.\r
+                        The reason is that you can't enter a regexp in END, except for the backreference operator $n -->\r
+               <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="@" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">\r
+                       <BEGIN>@(?:param|throws|exception|serialField)(\s)</BEGIN>\r
+                       <END>$1</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <KEYWORDS>\r
+               <!-- Note: the labels in comments are handled by SPANs above -->\r
+\r
+               <!-- Official javadoc tags:\r
+                        http://java.sun.com/j2se/1.5/docs/tooldocs/windows/javadoc.html#javadoctags -->\r
+                       <LABEL>@author</LABEL>\r
+                       <LABEL>@deprecated</LABEL>\r
+               <!--<LABEL>@docRoot</LABEL>-->\r
+               <!--<LABEL>@exception</LABEL>-->\r
+                       <LABEL>{@inheritDoc}</LABEL>\r
+               <!--<LABEL>@link</LABEL>-->\r
+               <!--<LABEL>@linkplain</LABEL>-->\r
+               <!--<LABEL>@param</LABEL>-->\r
+                       <LABEL>@return</LABEL>\r
+                       <LABEL>@see</LABEL>\r
+                       <LABEL>@serial</LABEL>\r
+                       <LABEL>@serialData</LABEL>\r
+               <!--<LABEL>@serialField</LABEL>-->\r
+                       <LABEL>@since</LABEL>\r
+               <!--<LABEL>@throws</LABEL>-->\r
+                       <LABEL>{@value}</LABEL>\r
+                       <LABEL>@version</LABEL>\r
+\r
+               <!-- new in 1.5 -->\r
+               <!--<LABEL>@code</LABEL>-->\r
+               <!--<LABEL>@literal</LABEL>-->\r
+\r
+               <!-- SUNs proposed tags:\r
+                        http://java.sun.com/j2se/javadoc/proposed-tags.html -->\r
+                       <KEYWORD2>@category</KEYWORD2>\r
+                       <KEYWORD2>@example</KEYWORD2>\r
+                       <KEYWORD2>@exclude</KEYWORD2>\r
+                       <KEYWORD2>@index</KEYWORD2>\r
+                       <KEYWORD2>@internal</KEYWORD2>\r
+                       <KEYWORD2>@obsolete</KEYWORD2>\r
+                       <KEYWORD2>@threadsafety</KEYWORD2>\r
+                       <KEYWORD2>@tutorial</KEYWORD2>\r
+                       <KEYWORD2>@todo</KEYWORD2>\r
+\r
+               <!-- Custom tags -->\r
+                       <KEYWORD4>@access</KEYWORD4>\r
+                       <KEYWORD4>@beaninfo</KEYWORD4>\r
+                       <KEYWORD4>@bon</KEYWORD4>\r
+                       <KEYWORD4>@bug</KEYWORD4>\r
+                       <KEYWORD4>@complexity</KEYWORD4>\r
+                       <KEYWORD4>@design</KEYWORD4>\r
+                       <KEYWORD4>@ensures</KEYWORD4>\r
+                       <KEYWORD4>@equivalent</KEYWORD4>\r
+                       <KEYWORD4>@generates</KEYWORD4>\r
+                       <KEYWORD4>@guard</KEYWORD4>\r
+                       <KEYWORD4>@hides</KEYWORD4>\r
+                       <KEYWORD4>@history</KEYWORD4>\r
+                       <KEYWORD4>@idea</KEYWORD4>\r
+                       <KEYWORD4>@invariant</KEYWORD4>\r
+                       <KEYWORD4>@modifies</KEYWORD4>\r
+                       <KEYWORD4>@overrides</KEYWORD4>\r
+                       <KEYWORD4>@post</KEYWORD4>\r
+                       <KEYWORD4>@pre</KEYWORD4>\r
+                       <KEYWORD4>@references</KEYWORD4>\r
+                       <KEYWORD4>@requires</KEYWORD4>\r
+                       <KEYWORD4>@review</KEYWORD4>\r
+                       <KEYWORD4>@spec</KEYWORD4>\r
+                       <KEYWORD4>@uses</KEYWORD4>\r
+                       <KEYWORD4>@values</KEYWORD4>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <!-- just a dummy which makes use of the default token type COMMENT4 for highlighting the word after @param in javadoc -->\r
+       <RULES SET="JAVADOC_PARAM" DEFAULT="COMMENT4" IGNORE_CASE="TRUE" />\r
+</MODE>\r
diff --git a/extra/xmode/modes/javacc.xml b/extra/xmode/modes/javacc.xml
new file mode 100644 (file)
index 0000000..d3172d2
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+<MODE>\r
+    <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+\r
+               <!-- Auto indent -->\r
+                <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />\r
+               <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />\r
+               <PROPERTY NAME="indentNextLine"\r
+                       VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+               <PROPERTY NAME="unindentThisLine"\r
+                       VALUE="^.*(default:\s*|case.*:.*)$" />\r
+               <PROPERTY NAME="electricKeys" VALUE=":" />\r
+       </PROPS>\r
+    <RULES IGNORE_CASE="FALSE">\r
+        <IMPORT DELEGATE="java::MAIN"/>\r
+        \r
+        <KEYWORDS>\r
+            <KEYWORD1>EOF</KEYWORD1>\r
+            <KEYWORD1>IGNORE_CASE</KEYWORD1>\r
+            <KEYWORD1>JAVACODE</KEYWORD1>\r
+            <KEYWORD1>LOOKAHEAD</KEYWORD1>\r
+            <KEYWORD1>MORE</KEYWORD1>\r
+            <KEYWORD1>PARSER_BEGIN</KEYWORD1>\r
+            <KEYWORD1>PARSER_END</KEYWORD1>\r
+            <KEYWORD1>SKIP</KEYWORD1>\r
+            <KEYWORD1>SPECIAL_TOKEN</KEYWORD1>\r
+            <KEYWORD1>TOKEN</KEYWORD1>\r
+            <KEYWORD1>TOKEN_MGR_DECLS</KEYWORD1>\r
+            <KEYWORD1>options</KEYWORD1>\r
+        </KEYWORDS>\r
+    </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/javascript.xml b/extra/xmode/modes/javascript.xml
new file mode 100644 (file)
index 0000000..e898fa1
--- /dev/null
@@ -0,0 +1,572 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- JavaScript mode by Andre Kaplan -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+\r
+               <!-- Auto indent -->\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />\r
+               <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />\r
+               <PROPERTY NAME="indentNextLine"\r
+                       VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+               <PROPERTY NAME="unindentThisLine"\r
+                       VALUE="^.*(default:\s*|case.*:.*)$" />\r
+               <PROPERTY NAME="electricKeys" VALUE=":" />\r
+       </PROPS>\r
+\r
+       <RULES ESCAPE="\"\r
+               IGNORE_CASE="FALSE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="(0x[\p{XDigit}]+[lL]?|[\p{Digit}]+(e[\p{Digit}]*)?[lLdDfF]?)">\r
+\r
+               <!-- The rest of the javascript info -->\r
+\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SPAN_REGEXP HASH_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZ_" TYPE="FUNCTION" DELEGATE="FUNCTION_PARAMS">\r
+                       <BEGIN>[A-Za-z_][\w_-]*\s*\(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- Keep brackets together: -->\r
+               <SPAN TYPE="OPERATOR" DELEGATE="MAIN">\r
+                       <BEGIN>(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="COMMENT2">//--&gt;</SEQ>\r
+               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+\r
+               <SEQ TYPE="COMMENT1">&lt;!--</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">;</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+               <MARK_PREVIOUS AT_WHITESPACE_END="TRUE"\r
+                       MATCH_TYPE="OPERATOR"\r
+                       TYPE="LABEL">:</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <!-- ECMAScript keywords -->\r
+                       <KEYWORD1>break</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+                       <KEYWORD1>delete</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>function</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <KEYWORD1>new</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <LITERAL2>this</LITERAL2>\r
+                       <KEYWORD1>typeof</KEYWORD1>\r
+                       <KEYWORD1>var</KEYWORD1>\r
+                       <KEYWORD3>void</KEYWORD3>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+                       <KEYWORD1>with</KEYWORD1>\r
+\r
+                       <!--ECMAScript keywords-->\r
+                       <!-- Reserved for future use\r
+                               (some are already used in some Javascript Engines)\r
+                       -->\r
+                       <KEYWORD1>abstract</KEYWORD1>\r
+                       <KEYWORD3>boolean</KEYWORD3>\r
+                       <KEYWORD3>byte</KEYWORD3>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>catch</KEYWORD1>\r
+                       <KEYWORD3>char</KEYWORD3>\r
+                       <KEYWORD1>class</KEYWORD1>\r
+                       <KEYWORD1>const</KEYWORD1>\r
+                       <KEYWORD1>debugger</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD3>double</KEYWORD3>\r
+                       <KEYWORD1>enum</KEYWORD1>\r
+                       <KEYWORD2>export</KEYWORD2>\r
+                       <KEYWORD1>extends</KEYWORD1>\r
+                       <KEYWORD1>final</KEYWORD1>\r
+                       <KEYWORD1>finally</KEYWORD1>\r
+                       <KEYWORD3>float</KEYWORD3>\r
+                       <KEYWORD1>goto</KEYWORD1>\r
+                       <KEYWORD1>implements</KEYWORD1>\r
+\r
+                       <KEYWORD2>import</KEYWORD2>\r
+                       <KEYWORD1>instanceof</KEYWORD1>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD1>interface</KEYWORD1>\r
+                       <KEYWORD3>long</KEYWORD3>\r
+                       <KEYWORD1>native</KEYWORD1>\r
+                       <KEYWORD2>package</KEYWORD2>\r
+                       <KEYWORD1>private</KEYWORD1>\r
+                       <KEYWORD1>protected</KEYWORD1>\r
+                       <KEYWORD1>public</KEYWORD1>\r
+\r
+                       <KEYWORD3>short</KEYWORD3>\r
+                       <KEYWORD1>static</KEYWORD1>\r
+                       <LITERAL2>super</LITERAL2>\r
+                       <KEYWORD1>switch</KEYWORD1>\r
+                       <KEYWORD1>synchronized</KEYWORD1>\r
+                       <KEYWORD1>throw</KEYWORD1>\r
+                       <KEYWORD1>throws</KEYWORD1>\r
+                       <KEYWORD1>transient</KEYWORD1>\r
+                       <KEYWORD1>try</KEYWORD1>\r
+                       <KEYWORD1>volatile</KEYWORD1>\r
+\r
+                       <!-- Intrinsic Objects (Good idea not to use these names!!)-->\r
+                       <KEYWORD3>Array</KEYWORD3>\r
+                       <KEYWORD3>Boolean</KEYWORD3>\r
+                       <KEYWORD3>Date</KEYWORD3>\r
+                       <KEYWORD3>Function</KEYWORD3>\r
+                       <KEYWORD3>Global</KEYWORD3>\r
+                       <KEYWORD3>Math</KEYWORD3>\r
+                       <KEYWORD3>Number</KEYWORD3>\r
+                       <KEYWORD3>Object</KEYWORD3>\r
+                       <KEYWORD3>RegExp</KEYWORD3><!-- Not ECMA -->\r
+                       <KEYWORD3>String</KEYWORD3>\r
+\r
+                       <!-- Literals -->\r
+                       <LITERAL2>false</LITERAL2>\r
+                       <LITERAL2>null</LITERAL2>\r
+                       <LITERAL2>true</LITERAL2>\r
+\r
+                       <LITERAL2>NaN</LITERAL2>\r
+                       <LITERAL2>Infinity</LITERAL2>\r
+\r
+                       <!-- Global functions -->\r
+                       <LITERAL2>eval</LITERAL2>\r
+                       <LITERAL2>parseInt</LITERAL2>\r
+                       <LITERAL2>parseFloat</LITERAL2>\r
+                       <LITERAL2>escape</LITERAL2>\r
+                       <LITERAL2>unescape</LITERAL2>\r
+                       <LITERAL2>isNaN</LITERAL2>\r
+                       <LITERAL2>isFinite</LITERAL2>\r
+\r
+                       <!-- Comment/Uncomment your favorite ADO Constants-->\r
+\r
+                       <!-- ADO Constants-->\r
+\r
+                       <!-- CursorTypeEnum Values -->\r
+                       <LITERAL2>adOpenForwardOnly</LITERAL2>\r
+                       <LITERAL2>adOpenKeyset</LITERAL2>\r
+                       <LITERAL2>adOpenDynamic</LITERAL2>\r
+                       <LITERAL2>adOpenStatic</LITERAL2>\r
+\r
+                       <!-- CursorOptionEnum Values -->\r
+<!--           <LITERAL2>adHoldRecords</LITERAL2>\r
+                       <LITERAL2>adMovePrevious</LITERAL2>\r
+                       <LITERAL2>adAddNew</LITERAL2>\r
+                       <LITERAL2>adDelete</LITERAL2>\r
+                       <LITERAL2>adUpdate</LITERAL2>\r
+                       <LITERAL2>adBookmark</LITERAL2>\r
+                       <LITERAL2>adApproxPosition</LITERAL2>\r
+                       <LITERAL2>adUpdateBatch</LITERAL2>\r
+                       <LITERAL2>adResync</LITERAL2>\r
+                       <LITERAL2>adNotify</LITERAL2>\r
+                       <LITERAL2>adFind</LITERAL2>\r
+                       <LITERAL2>adSeek</LITERAL2>\r
+                       <LITERAL2>adIndex</LITERAL2>\r
+-->\r
+                       <!-- LockTypeEnum Values -->\r
+                       <LITERAL2>adLockReadOnly</LITERAL2>\r
+                       <LITERAL2>adLockPessimistic</LITERAL2>\r
+                       <LITERAL2>adLockOptimistic</LITERAL2>\r
+                       <LITERAL2>adLockBatchOptimistic</LITERAL2>\r
+\r
+                       <!-- ExecuteOptionEnum Values -->\r
+                       <LITERAL2>adRunAsync</LITERAL2>\r
+                       <LITERAL2>adAsyncExecute</LITERAL2>\r
+                       <LITERAL2>adAsyncFetch</LITERAL2>\r
+                       <LITERAL2>adAsyncFetchNonBlocking</LITERAL2>\r
+                       <LITERAL2>adExecuteNoRecords</LITERAL2>\r
+\r
+                       <!-- ConnectOptionEnum Values -->\r
+<!--                   <LITERAL2>adAsyncConnect</LITERAL2>\r
+-->\r
+                       <!-- ObjectStateEnum Values -->\r
+                       <LITERAL2>adStateClosed</LITERAL2>\r
+                       <LITERAL2>adStateOpen</LITERAL2>\r
+                       <LITERAL2>adStateConnecting</LITERAL2>\r
+                       <LITERAL2>adStateExecuting</LITERAL2>\r
+                       <LITERAL2>adStateFetching</LITERAL2>\r
+\r
+                       <!-- CursorLocationEnum Values -->\r
+                       <LITERAL2>adUseServer</LITERAL2>\r
+                       <LITERAL2>adUseClient</LITERAL2>\r
+\r
+                       <!-- DataTypeEnum Values -->\r
+                       <LITERAL2>adEmpty</LITERAL2>\r
+                       <LITERAL2>adTinyInt</LITERAL2>\r
+                       <LITERAL2>adSmallInt</LITERAL2>\r
+                       <LITERAL2>adInteger</LITERAL2>\r
+                       <LITERAL2>adBigInt</LITERAL2>\r
+                       <LITERAL2>adUnsignedTinyInt</LITERAL2>\r
+                       <LITERAL2>adUnsignedSmallInt</LITERAL2>\r
+                       <LITERAL2>adUnsignedInt</LITERAL2>\r
+                       <LITERAL2>adUnsignedBigInt</LITERAL2>\r
+                       <LITERAL2>adSingle</LITERAL2>\r
+                       <LITERAL2>adDouble</LITERAL2>\r
+                       <LITERAL2>adCurrency</LITERAL2>\r
+                       <LITERAL2>adDecimal</LITERAL2>\r
+                       <LITERAL2>adNumeric</LITERAL2>\r
+                       <LITERAL2>adBoolean</LITERAL2>\r
+                       <LITERAL2>adError</LITERAL2>\r
+                       <LITERAL2>adUserDefined</LITERAL2>\r
+                       <LITERAL2>adVariant</LITERAL2>\r
+                       <LITERAL2>adIDispatch</LITERAL2>\r
+                       <LITERAL2>adIUnknown</LITERAL2>\r
+                       <LITERAL2>adGUID</LITERAL2>\r
+                       <LITERAL2>adDate</LITERAL2>\r
+                       <LITERAL2>adDBDate</LITERAL2>\r
+                       <LITERAL2>adDBTime</LITERAL2>\r
+                       <LITERAL2>adDBTimeStamp</LITERAL2>\r
+                       <LITERAL2>adBSTR</LITERAL2>\r
+                       <LITERAL2>adChar</LITERAL2>\r
+                       <LITERAL2>adVarChar</LITERAL2>\r
+                       <LITERAL2>adLongVarChar</LITERAL2>\r
+                       <LITERAL2>adWChar</LITERAL2>\r
+                       <LITERAL2>adVarWChar</LITERAL2>\r
+                       <LITERAL2>adLongVarWChar</LITERAL2>\r
+                       <LITERAL2>adBinary</LITERAL2>\r
+                       <LITERAL2>adVarBinary</LITERAL2>\r
+                       <LITERAL2>adLongVarBinary</LITERAL2>\r
+                       <LITERAL2>adChapter</LITERAL2>\r
+                       <LITERAL2>adFileTime</LITERAL2>\r
+                       <LITERAL2>adDBFileTime</LITERAL2>\r
+                       <LITERAL2>adPropVariant</LITERAL2>\r
+                       <LITERAL2>adVarNumeric</LITERAL2>\r
+\r
+                       <!-- FieldAttributeEnum Values -->\r
+<!--                   <LITERAL2>adFldMayDefer</LITERAL2>\r
+                       <LITERAL2>adFldUpdatable</LITERAL2>\r
+                       <LITERAL2>adFldUnknownUpdatable</LITERAL2>\r
+                       <LITERAL2>adFldFixed</LITERAL2>\r
+                       <LITERAL2>adFldIsNullable</LITERAL2>\r
+                       <LITERAL2>adFldMayBeNull</LITERAL2>\r
+                       <LITERAL2>adFldLong</LITERAL2>\r
+                       <LITERAL2>adFldRowID</LITERAL2>\r
+                       <LITERAL2>adFldRowVersion</LITERAL2>\r
+                       <LITERAL2>adFldCacheDeferred</LITERAL2>\r
+                       <LITERAL2>adFldKeyColumn</LITERAL2>\r
+-->\r
+\r
+                       <!-- EditModeEnum Values -->\r
+<!--                   <LITERAL2>adEditNone</LITERAL2>\r
+                       <LITERAL2>adEditInProgress</LITERAL2>\r
+                       <LITERAL2>adEditAdd</LITERAL2>\r
+                       <LITERAL2>adEditDelete</LITERAL2>\r
+-->\r
+                       <!-- RecordStatusEnum Values -->\r
+<!--                   <LITERAL2>adRecOK</LITERAL2>\r
+                       <LITERAL2>adRecNew</LITERAL2>\r
+                       <LITERAL2>adRecModified</LITERAL2>\r
+                       <LITERAL2>adRecDeleted</LITERAL2>\r
+                       <LITERAL2>adRecUnmodified</LITERAL2>\r
+                       <LITERAL2>adRecInvalid</LITERAL2>\r
+                       <LITERAL2>adRecMultipleChanges</LITERAL2>\r
+                       <LITERAL2>adRecPendingChanges</LITERAL2>\r
+                       <LITERAL2>adRecCanceled</LITERAL2>\r
+                       <LITERAL2>adRecCantRelease</LITERAL2>\r
+                       <LITERAL2>adRecConcurrencyViolation</LITERAL2>\r
+                       <LITERAL2>adRecIntegrityViolation</LITERAL2>\r
+                       <LITERAL2>adRecMaxChangesExceeded</LITERAL2>\r
+                       <LITERAL2>adRecObjectOpen</LITERAL2>\r
+                       <LITERAL2>adRecOutOfMemory</LITERAL2>\r
+                       <LITERAL2>adRecPermissionDenied</LITERAL2>\r
+                       <LITERAL2>adRecSchemaViolation</LITERAL2>\r
+                       <LITERAL2>adRecDBDeleted</LITERAL2>\r
+-->\r
+                       <!-- GetRowsOptionEnum Values -->\r
+<!--                   <LITERAL2>adGetRowsRest</LITERAL2>\r
+-->\r
+\r
+                       <!-- PositionEnum Values -->\r
+<!--                   <LITERAL2>adPosUnknown</LITERAL2>\r
+                       <LITERAL2>adPosBOF</LITERAL2>\r
+                       <LITERAL2>adPosEOF</LITERAL2>\r
+-->\r
+\r
+                       <!-- enum Values -->\r
+<!--                   <LITERAL2>adBookmarkCurrent</LITERAL2>\r
+                       <LITERAL2>adBookmarkFirst</LITERAL2>\r
+                       <LITERAL2>adBookmarkLast</LITERAL2>\r
+-->\r
+                       <!-- MarshalOptionsEnum Values -->\r
+<!--                   <LITERAL2>adMarshalAll</LITERAL2>\r
+                       <LITERAL2>adMarshalModifiedOnly</LITERAL2>\r
+-->\r
+                       <!-- AffectEnum Values -->\r
+<!--                   <LITERAL2>adAffectCurrent</LITERAL2>\r
+                       <LITERAL2>adAffectGroup</LITERAL2>\r
+                       <LITERAL2>adAffectAll</LITERAL2>\r
+                       <LITERAL2>adAffectAllChapters</LITERAL2>\r
+-->\r
+\r
+                       <!-- ResyncEnum Values -->\r
+<!--                   <LITERAL2>adResyncUnderlyingValues</LITERAL2>\r
+                       <LITERAL2>adResyncAllValues</LITERAL2>\r
+-->\r
+                       <!-- CompareEnum Values -->\r
+<!--                   <LITERAL2>adCompareLessThan</LITERAL2>\r
+                       <LITERAL2>adCompareEqual</LITERAL2>\r
+                       <LITERAL2>adCompareGreaterThan</LITERAL2>\r
+                       <LITERAL2>adCompareNotEqual</LITERAL2>\r
+                       <LITERAL2>adCompareNotComparable</LITERAL2>\r
+-->\r
+                       <!-- FilterGroupEnum Values -->\r
+<!--                   <LITERAL2>adFilterNone</LITERAL2>\r
+                       <LITERAL2>adFilterPendingRecords</LITERAL2>\r
+                       <LITERAL2>adFilterAffectedRecords</LITERAL2>\r
+                       <LITERAL2>adFilterFetchedRecords</LITERAL2>\r
+                       <LITERAL2>adFilterPredicate</LITERAL2>\r
+                       <LITERAL2>adFilterConflictingRecords</LITERAL2>\r
+-->\r
+                       <!-- SearchDirectionEnum Values -->\r
+<!--                   <LITERAL2>adSearchForward</LITERAL2>\r
+                       <LITERAL2>adSearchBackward</LITERAL2>\r
+-->\r
+\r
+                       <!-- PersistFormatEnum Values -->\r
+                       <LITERAL2>adPersistADTG</LITERAL2>\r
+                       <LITERAL2>adPersistXML</LITERAL2>\r
+\r
+                       <!-- StringFormatEnum Values -->\r
+<!--                   <LITERAL2>adStringXML</LITERAL2>\r
+                       <LITERAL2>adStringHTML</LITERAL2>\r
+                       <LITERAL2>adClipString</LITERAL2>\r
+-->\r
+                       <!-- ConnectPromptEnum Values -->\r
+<!--                   <LITERAL2>adPromptAlways</LITERAL2>\r
+                       <LITERAL2>adPromptComplete</LITERAL2>\r
+                       <LITERAL2>adPromptCompleteRequired</LITERAL2>\r
+                       <LITERAL2>adPromptNever</LITERAL2>\r
+-->\r
+                       <!-- ConnectModeEnum Values -->\r
+<!--                   <LITERAL2>adModeUnknown</LITERAL2>\r
+                       <LITERAL2>adModeRead</LITERAL2>\r
+                       <LITERAL2>adModeWrite</LITERAL2>\r
+                       <LITERAL2>adModeReadWrite</LITERAL2>\r
+                       <LITERAL2>adModeShareDenyRead</LITERAL2>\r
+                       <LITERAL2>adModeShareDenyWrite</LITERAL2>\r
+                       <LITERAL2>adModeShareExclusive</LITERAL2>\r
+                       <LITERAL2>adModeShareDenyNone</LITERAL2>\r
+-->\r
+                       <!-- IsolationLevelEnum Values -->\r
+<!--                   <LITERAL2>adXactUnspecified</LITERAL2>\r
+                       <LITERAL2>adXactChaos</LITERAL2>\r
+                       <LITERAL2>adXactReadUncommitted</LITERAL2>\r
+                       <LITERAL2>adXactBrowse</LITERAL2>\r
+                       <LITERAL2>adXactCursorStability</LITERAL2>\r
+                       <LITERAL2>adXactReadCommitted</LITERAL2>\r
+                       <LITERAL2>adXactRepeatableRead</LITERAL2>\r
+                       <LITERAL2>adXactSerializable</LITERAL2>\r
+                       <LITERAL2>adXactIsolated</LITERAL2>\r
+-->\r
+                       <!-- XactAttributeEnum Values -->\r
+<!--                   <LITERAL2>adXactCommitRetaining</LITERAL2>\r
+                       <LITERAL2>adXactAbortRetaining</LITERAL2>\r
+-->\r
+                       <!-- PropertyAttributesEnum Values -->\r
+<!--                   <LITERAL2>adPropNotSupported</LITERAL2>\r
+                       <LITERAL2>adPropRequired</LITERAL2>\r
+                       <LITERAL2>adPropOptional</LITERAL2>\r
+                       <LITERAL2>adPropRead</LITERAL2>\r
+                       <LITERAL2>adPropWrite</LITERAL2>\r
+-->\r
+                       <!-- ErrorValueEnum Values -->\r
+<!--                   <LITERAL2>adErrInvalidArgument</LITERAL2>\r
+                       <LITERAL2>adErrNoCurrentRecord</LITERAL2>\r
+                       <LITERAL2>adErrIllegalOperation</LITERAL2>\r
+                       <LITERAL2>adErrInTransaction</LITERAL2>\r
+                       <LITERAL2>adErrFeatureNotAvailable</LITERAL2>\r
+                       <LITERAL2>adErrItemNotFound</LITERAL2>\r
+                       <LITERAL2>adErrObjectInCollection</LITERAL2>\r
+                       <LITERAL2>adErrObjectNotSet</LITERAL2>\r
+                       <LITERAL2>adErrDataConversion</LITERAL2>\r
+                       <LITERAL2>adErrObjectClosed</LITERAL2>\r
+                       <LITERAL2>adErrObjectOpen</LITERAL2>\r
+                       <LITERAL2>adErrProviderNotFound</LITERAL2>\r
+                       <LITERAL2>adErrBoundToCommand</LITERAL2>\r
+                       <LITERAL2>adErrInvalidParamInfo</LITERAL2>\r
+                       <LITERAL2>adErrInvalidConnection</LITERAL2>\r
+                       <LITERAL2>adErrNotReentrant</LITERAL2>\r
+                       <LITERAL2>adErrStillExecuting</LITERAL2>\r
+                       <LITERAL2>adErrOperationCancelled</LITERAL2>\r
+                       <LITERAL2>adErrStillConnecting</LITERAL2>\r
+                       <LITERAL2>adErrNotExecuting</LITERAL2>\r
+                       <LITERAL2>adErrUnsafeOperation</LITERAL2>\r
+-->\r
+                       <!-- ParameterAttributesEnum Values -->\r
+                       <LITERAL2>adParamSigned</LITERAL2>\r
+                       <LITERAL2>adParamNullable</LITERAL2>\r
+                       <LITERAL2>adParamLong</LITERAL2>\r
+\r
+                       <!-- ParameterDirectionEnum Values -->\r
+                       <LITERAL2>adParamUnknown</LITERAL2>\r
+                       <LITERAL2>adParamInput</LITERAL2>\r
+                       <LITERAL2>adParamOutput</LITERAL2>\r
+                       <LITERAL2>adParamInputOutput</LITERAL2>\r
+                       <LITERAL2>adParamReturnValue</LITERAL2>\r
+\r
+                       <!-- CommandTypeEnum Values -->\r
+                       <LITERAL2>adCmdUnknown</LITERAL2>\r
+                       <LITERAL2>adCmdText</LITERAL2>\r
+                       <LITERAL2>adCmdTable</LITERAL2>\r
+                       <LITERAL2>adCmdStoredProc</LITERAL2>\r
+                       <LITERAL2>adCmdFile</LITERAL2>\r
+                       <LITERAL2>adCmdTableDirect</LITERAL2>\r
+\r
+                       <!-- EventStatusEnum Values -->\r
+<!--                   <LITERAL2>adStatusOK</LITERAL2>\r
+                       <LITERAL2>adStatusErrorsOccurred</LITERAL2>\r
+                       <LITERAL2>adStatusCantDeny</LITERAL2>\r
+                       <LITERAL2>adStatusCancel</LITERAL2>\r
+                       <LITERAL2>adStatusUnwantedEvent</LITERAL2>\r
+-->\r
+                       <!-- EventReasonEnum Values -->\r
+<!--                   <LITERAL2>adRsnAddNew</LITERAL2>\r
+                       <LITERAL2>adRsnDelete</LITERAL2>\r
+                       <LITERAL2>adRsnUpdate</LITERAL2>\r
+                       <LITERAL2>adRsnUndoUpdate</LITERAL2>\r
+                       <LITERAL2>adRsnUndoAddNew</LITERAL2>\r
+                       <LITERAL2>adRsnUndoDelete</LITERAL2>\r
+                       <LITERAL2>adRsnRequery</LITERAL2>\r
+                       <LITERAL2>adRsnResynch</LITERAL2>\r
+                       <LITERAL2>adRsnClose</LITERAL2>\r
+                       <LITERAL2>adRsnMove</LITERAL2>\r
+                       <LITERAL2>adRsnFirstChange</LITERAL2>\r
+                       <LITERAL2>adRsnMoveFirst</LITERAL2>\r
+                       <LITERAL2>adRsnMoveNext</LITERAL2>\r
+                       <LITERAL2>adRsnMovePrevious</LITERAL2>\r
+                       <LITERAL2>adRsnMoveLast</LITERAL2>\r
+-->\r
+                       <!-- SchemaEnum Values -->\r
+<!--                   <LITERAL2>adSchemaProviderSpecific</LITERAL2>\r
+                       <LITERAL2>adSchemaAsserts</LITERAL2>\r
+                       <LITERAL2>adSchemaCatalogs</LITERAL2>\r
+                       <LITERAL2>adSchemaCharacterSets</LITERAL2>\r
+                       <LITERAL2>adSchemaCollations</LITERAL2>\r
+                       <LITERAL2>adSchemaColumns</LITERAL2>\r
+                       <LITERAL2>adSchemaCheckConstraints</LITERAL2>\r
+                       <LITERAL2>adSchemaConstraintColumnUsage</LITERAL2>\r
+                       <LITERAL2>adSchemaConstraintTableUsage</LITERAL2>\r
+                       <LITERAL2>adSchemaKeyColumnUsage</LITERAL2>\r
+                       <LITERAL2>adSchemaReferentialConstraints</LITERAL2>\r
+                       <LITERAL2>adSchemaTableConstraints</LITERAL2>\r
+                       <LITERAL2>adSchemaColumnsDomainUsage</LITERAL2>\r
+                       <LITERAL2>adSchemaIndexes</LITERAL2>\r
+                       <LITERAL2>adSchemaColumnPrivileges</LITERAL2>\r
+                       <LITERAL2>adSchemaTablePrivileges</LITERAL2>\r
+                       <LITERAL2>adSchemaUsagePrivileges</LITERAL2>\r
+                       <LITERAL2>adSchemaProcedures</LITERAL2>\r
+                       <LITERAL2>adSchemaSchemata</LITERAL2>\r
+                       <LITERAL2>adSchemaSQLLanguages</LITERAL2>\r
+                       <LITERAL2>adSchemaStatistics</LITERAL2>\r
+                       <LITERAL2>adSchemaTables</LITERAL2>\r
+                       <LITERAL2>adSchemaTranslations</LITERAL2>\r
+                       <LITERAL2>adSchemaProviderTypes</LITERAL2>\r
+                       <LITERAL2>adSchemaViews</LITERAL2>\r
+                       <LITERAL2>adSchemaViewColumnUsage</LITERAL2>\r
+                       <LITERAL2>adSchemaViewTableUsage</LITERAL2>\r
+                       <LITERAL2>adSchemaProcedureParameters</LITERAL2>\r
+                       <LITERAL2>adSchemaForeignKeys</LITERAL2>\r
+                       <LITERAL2>adSchemaPrimaryKeys</LITERAL2>\r
+                       <LITERAL2>adSchemaProcedureColumns</LITERAL2>\r
+                       <LITERAL2>adSchemaDBInfoKeywords</LITERAL2>\r
+                       <LITERAL2>adSchemaDBInfoLiterals</LITERAL2>\r
+                       <LITERAL2>adSchemaCubes</LITERAL2>\r
+                       <LITERAL2>adSchemaDimensions</LITERAL2>\r
+                       <LITERAL2>adSchemaHierarchies</LITERAL2>\r
+                       <LITERAL2>adSchemaLevels</LITERAL2>\r
+                       <LITERAL2>adSchemaMeasures</LITERAL2>\r
+                       <LITERAL2>adSchemaProperties</LITERAL2>\r
+                       <LITERAL2>adSchemaMembers</LITERAL2>\r
+-->\r
+                       <!-- SeekEnum Values -->\r
+<!--                   <LITERAL2>adSeekFirstEQ</LITERAL2>\r
+                       <LITERAL2>adSeekLastEQ</LITERAL2>\r
+                       <LITERAL2>adSeekAfterEQ</LITERAL2>\r
+                       <LITERAL2>adSeekAfter</LITERAL2>\r
+                       <LITERAL2>adSeekBeforeEQ</LITERAL2>\r
+                       <LITERAL2>adSeekBefore</LITERAL2>\r
+-->\r
+                       <!-- ADCPROP_UPDATECRITERIA_ENUM Values -->\r
+<!--                   <LITERAL2>adCriteriaKey</LITERAL2>\r
+                       <LITERAL2>adCriteriaAllCols</LITERAL2>\r
+                       <LITERAL2>adCriteriaUpdCols</LITERAL2>\r
+                       <LITERAL2>adCriteriaTimeStamp</LITERAL2>\r
+-->\r
+                       <!-- ADCPROP_ASYNCTHREADPRIORITY_ENUM Values -->\r
+<!--                   <LITERAL2>adPriorityLowest</LITERAL2>\r
+                       <LITERAL2>adPriorityBelowNormal</LITERAL2>\r
+                       <LITERAL2>adPriorityNormal</LITERAL2>\r
+                       <LITERAL2>adPriorityAboveNormal</LITERAL2>\r
+                       <LITERAL2>adPriorityHighest</LITERAL2>\r
+-->\r
+                       <!-- CEResyncEnum Values -->\r
+<!--                   <LITERAL2>adResyncNone</LITERAL2>\r
+                       <LITERAL2>adResyncAutoIncrement</LITERAL2>\r
+                       <LITERAL2>adResyncConflicts</LITERAL2>\r
+                       <LITERAL2>adResyncUpdates</LITERAL2>\r
+                       <LITERAL2>adResyncInserts</LITERAL2>\r
+                       <LITERAL2>adResyncAll</LITERAL2>\r
+-->\r
+                       <!-- ADCPROP_AUTORECALC_ENUM Values -->\r
+<!--                   <LITERAL2>adRecalcUpFront</LITERAL2>\r
+                       <LITERAL2>adRecalcAlways</LITERAL2>\r
+-->\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="FUNCTION_PARAMS">\r
+               <!-- Keep brackets together: -->\r
+               <SPAN TYPE="OPERATOR" DELEGATE="MAIN">\r
+                       <BEGIN>(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+\r
+               <IMPORT DELEGATE="MAIN" />\r
+               <!-- <SEQ TYPE="OPERATOR">)</SEQ> -->\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/jcl.xml b/extra/xmode/modes/jcl.xml
new file mode 100644 (file)
index 0000000..b7f0ed5
--- /dev/null
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+<!--  \r
+      JCL edit mode by Bill McMilleon (bill@mcmilleon.com)\r
+      March 19, 2003\r
+\r
+      Suggested catalog file entry:\r
+\r
+      <MODE NAME="JCL"         FILE="JCL.xml"\r
+                               FILE_NAME_GLOB="*.{jcl}" />\r
+\r
+-->\r
\r
\r
+<MODE>\r
+\r
+    <PROPS>\r
+        <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+    </PROPS>\r
+\r
+    \r
+    <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="FALSE">\r
+\r
+<!-- In fixed form, column 72 is the last column parsed, unless the\r
+\extend_source option is invoked -->\r
+    <!-- TERMINATE AT_CHAR="72" / -->\r
+\r
+\r
+    <EOL_SPAN AT_LINE_START="TRUE" TYPE="COMMENT1">//*</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+<!-- Highlighted Operators -->\r
+<SEQ TYPE="OPERATOR">=</SEQ>\r
+<SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+<SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+<SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+<SEQ TYPE="OPERATOR">|</SEQ>\r
+<SEQ TYPE="OPERATOR">,</SEQ>\r
+\r
+<KEYWORDS>\r
+  <KEYWORD2>COMMAND</KEYWORD2>\r
+  <KEYWORD2>CNTL</KEYWORD2>\r
+  <KEYWORD2>DD</KEYWORD2>\r
+  <KEYWORD2>ENCNTL</KEYWORD2>\r
+  <KEYWORD2>EXEC</KEYWORD2>\r
+  <KEYWORD2>IF</KEYWORD2>\r
+  <KEYWORD2>THEN</KEYWORD2>\r
+  <KEYWORD2>ELSE</KEYWORD2>\r
+  <KEYWORD2>ENDIF</KEYWORD2>\r
+  <KEYWORD2>INCLUDE</KEYWORD2>\r
+  <KEYWORD2>JCLIB</KEYWORD2>\r
+  <KEYWORD2>JOB</KEYWORD2>\r
+  <KEYWORD2>MSG</KEYWORD2>\r
+  <KEYWORD2>OUTPUT</KEYWORD2>\r
+  <KEYWORD2>PEND</KEYWORD2>\r
+  <KEYWORD2>PROC</KEYWORD2>\r
+  <KEYWORD2>SET</KEYWORD2>\r
+  <KEYWORD2>XMIT</KEYWORD2>\r
+</KEYWORDS>\r
+\r
+    </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/jhtml.xml b/extra/xmode/modes/jhtml.xml
new file mode 100644 (file)
index 0000000..5a15907
--- /dev/null
@@ -0,0 +1,144 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+  JHTML mode by Will Sargent <wsargent@atg.com>\r
+-->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+                               <!-- Indent droplets and oparams -->\r
+                               <PROPERTY NAME="indentNextLines"\r
+                                VALUE="\s*(&lt;\s*(droplet|oparam))\s+.*" />\r
+                               <!-- Sadly, there doesn't seem to be a way to\r
+                                        undent when we see a /oparam> tag... -->\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE">\r
+                               <!-- Allow for Dynamo SSI -->\r
+                               <SPAN TYPE="NULL">\r
+                       <BEGIN>&lt;!--#</BEGIN>\r
+                       <END>--&gt;</END>\r
+                               </SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="java::MAIN">\r
+                       <BEGIN>`</BEGIN>\r
+                       <END>`</END>\r
+               </SPAN>\r
+\r
+                               <!-- Embedded Java -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="java::MAIN">\r
+                       <BEGIN>&lt;java&gt;</BEGIN>\r
+                       <END>&lt;/java&gt;</END>\r
+               </SPAN>\r
+\r
+                               <!-- Don't know how to do this correctly.\r
+                               <SPAN TYPE="MARKUP" DELEGATE="java::MAIN">\r
+                                               <BEGIN>&lt;java type=</BEGIN>\r
+                                               <END>&lt;/java&gt;</END>\r
+                               </SPAN>\r
+                               -->\r
+\r
+               <!-- JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="html::JAVASCRIPT">\r
+                       <BEGIN>&lt;SCRIPT</BEGIN>\r
+                       <END>&lt;/SCRIPT&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="html::CSS">\r
+                       <BEGIN>&lt;STYLE</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD instructions -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">\r
+                       <BEGIN>&lt;!</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+                               <!-- All markup defaults to JHTML. -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="JHTML">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="JHTML" DEFAULT="MARKUP">\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="ATTRVALUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="ATTRVALUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="MARKUP">/</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>importbean</KEYWORD1>\r
+                       <KEYWORD1>droplet</KEYWORD1>\r
+                       <KEYWORD1>param</KEYWORD1>\r
+                       <KEYWORD1>oparam</KEYWORD1>\r
+                       <KEYWORD1>valueof</KEYWORD1>\r
+                       <KEYWORD1>setvalue</KEYWORD1>\r
+                       <KEYWORD1>servlet</KEYWORD1>\r
+                       <KEYWORD2>bean</KEYWORD2>\r
+                       <KEYWORD2>submitvalue</KEYWORD2>\r
+                       <KEYWORD2>declareparam</KEYWORD2>\r
+                       <KEYWORD2>synchronized</KEYWORD2>\r
+                       <KEYWORD2>priority</KEYWORD2>\r
+\r
+                       <!-- standard converters -->\r
+                       <KEYWORD2>converter</KEYWORD2>\r
+                       <KEYWORD2>date</KEYWORD2>\r
+                       <KEYWORD2>number</KEYWORD2>\r
+                       <KEYWORD2>required</KEYWORD2>\r
+                       <KEYWORD2>nullable</KEYWORD2>\r
+                       <KEYWORD2>currency</KEYWORD2>\r
+                       <KEYWORD2>currencyConversion</KEYWORD2>\r
+                       <KEYWORD2>euro</KEYWORD2>\r
+                       <KEYWORD2>locale</KEYWORD2>\r
+                       <KEYWORD2>symbol</KEYWORD2>\r
+\r
+                       <!-- Can't use this because of image src... -->\r
+                       <!-- <KEYWORD2>src</KEYWORD2> -->\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="ATTRVALUE" DEFAULT="LITERAL1" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- backticks are java -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="java::MAIN">\r
+                       <BEGIN>`</BEGIN>\r
+                       <END>`</END>\r
+               </SPAN>\r
+\r
+                               <!-- Allow param: and bean: properties to be marked up -->\r
+                               <SEQ TYPE="LABEL">param:</SEQ>\r
+                               <SEQ TYPE="LABEL">bean:</SEQ>\r
+       </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/jmk.xml b/extra/xmode/modes/jmk.xml
new file mode 100644 (file)
index 0000000..64ffc04
--- /dev/null
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- Comment -->\r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+               <!-- Literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <!-- Brackets -->\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">(</SEQ>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>cat</KEYWORD1>\r
+                       <KEYWORD1>copy</KEYWORD1>\r
+                       <KEYWORD1>create</KEYWORD1>\r
+                       <KEYWORD1>delall</KEYWORD1>\r
+                       <KEYWORD1>delete</KEYWORD1>\r
+                       <KEYWORD1>dirs</KEYWORD1>\r
+                       <KEYWORD1>equal</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>end</KEYWORD1>\r
+                       <KEYWORD1>exec</KEYWORD1>\r
+                       <KEYWORD1>first</KEYWORD1>\r
+                       <KEYWORD1>forname</KEYWORD1>\r
+                       <KEYWORD1>function</KEYWORD1>\r
+                       <KEYWORD1>getprop</KEYWORD1>\r
+                       <KEYWORD1>glob</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>join</KEYWORD1>\r
+                       <KEYWORD1>load</KEYWORD1>\r
+                       <KEYWORD1>mkdir</KEYWORD1>\r
+                       <KEYWORD1>mkdirs</KEYWORD1>\r
+                       <KEYWORD1>note</KEYWORD1>\r
+                       <KEYWORD1>patsubst</KEYWORD1>\r
+                       <KEYWORD1>rename</KEYWORD1>\r
+                       <KEYWORD1>rest</KEYWORD1>\r
+                       <KEYWORD1>subst</KEYWORD1>\r
+                       <KEYWORD1>then</KEYWORD1>\r
+                       <KEYWORD2>@</KEYWORD2>\r
+                       <KEYWORD2>?</KEYWORD2>\r
+                       <KEYWORD2>&lt;</KEYWORD2>\r
+                       <KEYWORD2>%</KEYWORD2>\r
+                       <KEYWORD3>include</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/jsp.xml b/extra/xmode/modes/jsp.xml
new file mode 100644 (file)
index 0000000..31bf48b
--- /dev/null
@@ -0,0 +1,257 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;%--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--%&gt;" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE">\r
+               <!-- JSP comment -->\r
+               <SPAN TYPE="COMMENT2">\r
+                       <BEGIN>&lt;%--</BEGIN>\r
+                       <END>--%&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JSP directive -->\r
+               <SPAN TYPE="KEYWORD1" DELEGATE="DIRECTIVES">\r
+                       <BEGIN>&lt;%@</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+               <SPAN TYPE="KEYWORD1" DELEGATE="DIRECTIVES">\r
+                       <BEGIN>&lt;jsp:directive&gt;</BEGIN>\r
+                       <END>&lt;/jsp:directive&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JSP scriptlet expression -->\r
+               <SPAN TYPE="KEYWORD1" DELEGATE="java::MAIN">\r
+                       <BEGIN>&lt;%=</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+               <SPAN TYPE="KEYWORD1" DELEGATE="java::MAIN">\r
+                       <BEGIN>&lt;jsp:expression&gt;</BEGIN>\r
+                       <END>&lt;/jsp:expression&gt;</END>\r
+               </SPAN>\r
+\r
+\r
+               <!-- JSP scriptlet code block -->\r
+               <SPAN TYPE="KEYWORD1" DELEGATE="java::MAIN">\r
+                       <BEGIN>&lt;%!</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+               <SPAN TYPE="KEYWORD1" DELEGATE="java::MAIN">\r
+                       <BEGIN>&lt;jsp:declaration&gt;</BEGIN>\r
+                       <END>&lt;/jsp:declaration&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JSP scriptlet -->\r
+               <SPAN TYPE="KEYWORD1" DELEGATE="java::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+               <SPAN TYPE="KEYWORD1" DELEGATE="java::MAIN">\r
+                       <BEGIN>&lt;jsp:scriptlet&gt;</BEGIN>\r
+                       <END>&lt;/jsp:scriptlet&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1" DELEGATE="COMMENT">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="html::JAVASCRIPT">\r
+                       <BEGIN>&lt;SCRIPT</BEGIN>\r
+                       <END>&lt;/SCRIPT&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="html::CSS">\r
+                       <BEGIN>&lt;STYLE</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD instructions -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">\r
+                       <BEGIN>&lt;!</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="EL">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+       </RULES>\r
+       <RULES SET="COMMENT" DEFAULT="COMMENT1" IGNORE_CASE="TRUE">\r
+               <!-- JSP comment -->\r
+               <SPAN TYPE="COMMENT2">\r
+                       <BEGIN>&lt;%--</BEGIN>\r
+                       <END>--%&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JSP scriptlet expression -->\r
+               <SPAN TYPE="KEYWORD1" DELEGATE="java::MAIN">\r
+                       <BEGIN>&lt;%=</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JSP scriptlet -->\r
+               <SPAN TYPE="KEYWORD1" DELEGATE="java::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+       </RULES>\r
+       <RULES SET="DIRECTIVES" DEFAULT="MARKUP">\r
+               <!-- JSP scriptlet expression -->\r
+               <SPAN TYPE="KEYWORD1" DELEGATE="java::MAIN">\r
+                       <BEGIN>&lt;%=</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="ATTRVALUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="ATTRVALUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="MARKUP">/</SEQ>\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR">:</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>taglib</KEYWORD1>\r
+                       <KEYWORD1>include</KEYWORD1>\r
+                       <KEYWORD1>page</KEYWORD1>\r
+                       <KEYWORD1>tag</KEYWORD1>\r
+                       <KEYWORD1>tagAttribute</KEYWORD1>\r
+                       <KEYWORD1>tagVariable</KEYWORD1>\r
+\r
+                       <KEYWORD2>language</KEYWORD2>\r
+                       <KEYWORD2>session</KEYWORD2>\r
+                       <KEYWORD2>contentType</KEYWORD2>\r
+                       <KEYWORD2>charset</KEYWORD2>\r
+                       <KEYWORD2>import</KEYWORD2>\r
+                       <KEYWORD2>buffer</KEYWORD2>\r
+                       <KEYWORD2>autoflush</KEYWORD2>\r
+                       <KEYWORD2>isThreadSafe</KEYWORD2>\r
+                       <KEYWORD2>info</KEYWORD2>\r
+                       <KEYWORD2>errorPage</KEYWORD2>\r
+                       <KEYWORD2>isErrorpage</KEYWORD2>\r
+                       <KEYWORD2>extends</KEYWORD2>\r
+                       <KEYWORD2>file</KEYWORD2>\r
+                       <KEYWORD2>uri</KEYWORD2>\r
+                       <KEYWORD2>prefix</KEYWORD2>\r
+                       <KEYWORD2>method</KEYWORD2>\r
+                       <KEYWORD2>name</KEYWORD2>\r
+                       <KEYWORD2>default</KEYWORD2>\r
+                       <KEYWORD2>required</KEYWORD2>\r
+                       <KEYWORD2>rtexprvalue</KEYWORD2>\r
+                       <KEYWORD2>id</KEYWORD2>\r
+                       <KEYWORD2>type</KEYWORD2>\r
+                       <KEYWORD2>scope</KEYWORD2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="TAGS" DEFAULT="MARKUP">\r
+               <!-- JSP comment -->\r
+               <SPAN TYPE="COMMENT2">\r
+                       <BEGIN>&lt;%--</BEGIN>\r
+                       <END>--%&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JSP scriptlet expression -->\r
+               <SPAN TYPE="KEYWORD1" DELEGATE="java::MAIN">\r
+                       <BEGIN>&lt;%=</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="CSS+JSP">\r
+                       <BEGIN>style='</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="CSS+JSP">\r
+                       <BEGIN>style="</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="ATTRVALUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="ATTRVALUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="MARKUP">/</SEQ>\r
+               <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="OPERATOR">:</MARK_FOLLOWING>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+       </RULES>\r
+\r
+\r
+\r
+       <RULES SET="CSS+JSP" DEFAULT="LITERAL1">\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="java::MAIN">\r
+                       <BEGIN>&lt;%=</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="EL">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <IMPORT DELEGATE="css::MAIN"/>\r
+       </RULES>\r
+\r
+       <RULES SET="ATTRVALUE" DEFAULT="LITERAL1" ESCAPE="\">\r
+               <!-- JSP scriptlet expression -->\r
+               <SPAN TYPE="KEYWORD1" DELEGATE="java::MAIN">\r
+                       <BEGIN>&lt;%=</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="EL">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <SEQ TYPE="LITERAL1" DELEGATE="JAVASCRIPT+JSP">javascript:</SEQ>\r
+       </RULES>\r
+\r
+\r
+       <RULES SET="JAVASCRIPT+JSP">\r
+               <!-- JSP scriptlet expression -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="java::MAIN">\r
+                       <BEGIN>&lt;%=</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="EL">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <IMPORT DELEGATE="javascript::MAIN"/>\r
+       </RULES>\r
+\r
+       <RULES SET="EL" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0[lL]?|[1-9]\d{0,9}(\d{0,9}[lL])?|0[xX]\p{XDigit}{1,8}(\p{XDigit}{0,8}[lL])?|0[0-7]{1,11}([0-7]{0,11}[lL])?|([0-9]+\.[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?[fFdD]?|[0-9]+([eE][+-]?[0-9]+[fFdD]?|([eE][+-]?[0-9]+)?[fFdD]))">\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR">:</MARK_PREVIOUS>\r
+               <IMPORT DELEGATE="java::MAIN"/>\r
+       </RULES>\r
+</MODE>\r
+<!-- :noTabs=false: -->
\ No newline at end of file
diff --git a/extra/xmode/modes/latex.xml b/extra/xmode/modes/latex.xml
new file mode 100644 (file)
index 0000000..b32ba9c
--- /dev/null
@@ -0,0 +1,2361 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+<!--  jEdit LaTeX mode, by Thomas Alspaugh alspaugh@ics.uci.edu  -->\r
+<!--  v1.2  2004May30  -->\r
+<!--  Based upon BibTeX mode by Nils Krahnstoever and tex mode by unknown author.\r
+      Generated automatically from a summary of Lamport \r
+      "LaTeX : A document preparation system : User guide and reference manual",\r
+      1994 (LaTeX2e) edition, using a Perl script. \r
+  -->\r
+<!--  Catalog entry (suggested)\r
+<MODE NAME="LaTeX"             FILE="latex.xml"\r
+                               FILE_NAME_GLOB="*.{tex,ltx,latex}" />\r
+      -->\r
+<!--  latex.xml is generated automatically from a summary of Lamport \r
+      "LaTeX : A document preparation system : User guide and reference manual",\r
+      1994 (LaTeX2e) edition, using a collection of editing scripts.\r
+  -->\r
+<!--  Version history\r
+      v1.1  2004Mar23\r
+      v1.2  2004Jun09\r
+        Single-character accents such as \" accept arguments not in {}.\r
+        Changed to be produced using a single Perl script.\r
+  -->\r
+<!--\r
+      COMMENT1  % comments.\r
+      INVALID   characters or strings that are not valid in the context.\r
+      KEYWORD1  commands or declarations with arguments\r
+      KEYWORD2  commands or declarations without arguments\r
+      KEYWORD3  counters\r
+      KEYWORD4  unrecognized commands or declarations\r
+      MARKUP    environments (other than those that change rulesets)\r
+  -->\r
+<!--  Not as it should be:\r
+      - Highlighting does not account for balancing of braces {};  the next } \r
+        closes a command.\r
+      - \ensuremath{} should balance braces but does not (the first } closes it).\r
+      - #1, #2, ... are only valid in \newcommand{} but are not limited to there.\r
+      - Commands inside ``'' and `' quoted strings should be highlighted.\r
+  -->\r
+  \r
+<MODE>\r
+  <PROPS>\r
+    <PROPERTY NAME="lineComment" VALUE="%" />\r
+    <PROPERTY NAME="noWordSep" VALUE="\"/>\r
+  </PROPS>\r
+\r
+  <RULES IGNORE_CASE="FALSE"> <!-- SET="NormalMode" -->\r
+    <SEQ TYPE="LABEL">__NormalMode__</SEQ>\r
+\r
+    <!--  % comments.  -->\r
+    <EOL_SPAN TYPE="COMMENT1">%</EOL_SPAN>\r
+\r
+    <!--  "", `', and ``'' quoting.  -->\r
+    <SPAN NO_LINE_BREAK="FALSE" TYPE="LITERAL4"><BEGIN>``</BEGIN><END>''</END></SPAN>\r
+    <SPAN NO_LINE_BREAK="FALSE" TYPE="LITERAL3"><BEGIN>`</BEGIN><END>'</END></SPAN>\r
+    <SPAN NO_LINE_BREAK="FALSE" TYPE="LITERAL1"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <!--  Lone quote characters " and ` are not valid.  -->\r
+    <SEQ TYPE="INVALID">"</SEQ>\r
+    <SEQ TYPE="INVALID">`</SEQ>\r
+\r
+    <!--  # is only valid as #n inside command definitions.  -->\r
+    <SEQ TYPE="FUNCTION">#1</SEQ>\r
+    <SEQ TYPE="FUNCTION">#2</SEQ>\r
+    <SEQ TYPE="FUNCTION">#3</SEQ>\r
+    <SEQ TYPE="FUNCTION">#4</SEQ>\r
+    <SEQ TYPE="FUNCTION">#5</SEQ>\r
+    <SEQ TYPE="FUNCTION">#6</SEQ>\r
+    <SEQ TYPE="FUNCTION">#7</SEQ>\r
+    <SEQ TYPE="FUNCTION">#8</SEQ>\r
+    <SEQ TYPE="FUNCTION">#9</SEQ>\r
+\r
+    <!-- \begin{verbatim} ... \end{verbatim} -->\r
+    <SPAN TYPE="KEYWORD1" DELEGATE="VERBATIM">\r
+        <BEGIN>\begin{verbatim}</BEGIN>\r
+        <END>\end{verbatim}</END>\r
+    </SPAN>\r
+\r
+    <SEQ TYPE="INVALID">\tabs</SEQ>\r
+    <SEQ TYPE="INVALID">\tabset</SEQ>\r
+    <SEQ TYPE="INVALID">\tabsdone</SEQ>\r
+    <SEQ TYPE="INVALID">\cleartabs</SEQ>\r
+    <SEQ TYPE="INVALID">\settabs</SEQ>\r
+    <SEQ TYPE="INVALID">\tabalign</SEQ>\r
+    <SEQ TYPE="INVALID">\+</SEQ>\r
+    <SEQ TYPE="INVALID">\pageno</SEQ>\r
+    <SEQ TYPE="INVALID">\headline</SEQ>\r
+    <SEQ TYPE="INVALID">\footline</SEQ>\r
+    <SEQ TYPE="INVALID">\normalbottom</SEQ>\r
+    <SEQ TYPE="INVALID">\folio</SEQ>\r
+    <SEQ TYPE="INVALID">\nopagenumbers</SEQ>\r
+    <SEQ TYPE="INVALID">\advancepageno</SEQ>\r
+    <SEQ TYPE="INVALID">\pagebody</SEQ>\r
+    <SEQ TYPE="INVALID">\plainoutput</SEQ>\r
+    <SEQ TYPE="INVALID">\pagecontents</SEQ>\r
+    <SEQ TYPE="INVALID">\makeheadline</SEQ>\r
+    <SEQ TYPE="INVALID">\makefootline</SEQ>\r
+    <SEQ TYPE="INVALID">\dosupereject</SEQ>\r
+    <SEQ TYPE="INVALID">\footstrut</SEQ>\r
+    <SEQ TYPE="INVALID">\vfootnote</SEQ>\r
+    <SEQ TYPE="INVALID">\topins</SEQ>\r
+    <SEQ TYPE="INVALID">\topinsert</SEQ>\r
+    <SEQ TYPE="INVALID">\midinsert</SEQ>\r
+    <SEQ TYPE="INVALID">\pageinsert</SEQ>\r
+    <SEQ TYPE="INVALID">\endinsert</SEQ>\r
+    <SEQ TYPE="INVALID">\fivei</SEQ>\r
+    <SEQ TYPE="INVALID">\fiverm</SEQ>\r
+    <SEQ TYPE="INVALID">\fivesy</SEQ>\r
+    <SEQ TYPE="INVALID">\fivebf</SEQ>\r
+    <SEQ TYPE="INVALID">\seveni</SEQ>\r
+    <SEQ TYPE="INVALID">\sevenbf</SEQ>\r
+    <SEQ TYPE="INVALID">\sevensy</SEQ>\r
+    <SEQ TYPE="INVALID">\teni</SEQ>\r
+    <SEQ TYPE="INVALID">\oldstyle</SEQ>\r
+    <SEQ TYPE="INVALID">\eqalign</SEQ>\r
+    <SEQ TYPE="INVALID">\eqalignno</SEQ>\r
+    <SEQ TYPE="INVALID">\leqalignno</SEQ>\r
+    <SEQ TYPE="INVALID">$$</SEQ>\r
+    <SEQ TYPE="INVALID">\beginsection</SEQ>\r
+    <SEQ TYPE="INVALID">\bye</SEQ>\r
+    <SEQ TYPE="INVALID">\magnification</SEQ>\r
+    <SEQ TYPE="INVALID">#</SEQ>\r
+    <SEQ TYPE="INVALID">&amp;</SEQ>\r
+    <SEQ TYPE="INVALID">_</SEQ>\r
+    <SEQ TYPE="INVALID">\~</SEQ>\r
+\r
+    <SPAN TYPE="MARKUP" DELEGATE="MathMode"><BEGIN>$</BEGIN><END>$</END></SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="MathMode"><BEGIN>\(</BEGIN><END>\)</END></SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="MathMode"><BEGIN>\[</BEGIN><END>\]</END></SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="MathMode"><BEGIN>\begin{math}</BEGIN><END>\end{math}</END></SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="MathMode"><BEGIN>\begin{displaymath}</BEGIN><END>\end{displaymath}</END></SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="MathMode"><BEGIN>\begin{equation}</BEGIN><END>\end{equation}</END></SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="MathMode"><BEGIN>\ensuremath{</BEGIN><END>}</END></SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="ArrayMode"><BEGIN>\begin{eqnarray}</BEGIN><END>\end{eqnarray}</END></SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="ArrayMode"><BEGIN>\begin{eqnarray*}</BEGIN><END>\end{eqnarray*}</END></SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="TabularMode"><BEGIN>\begin{tabular}</BEGIN><END>\end{tabular}</END></SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="TabularMode"><BEGIN>\begin{tabular*}</BEGIN><END>\end{tabular*}</END></SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="TabbingMode"><BEGIN>\begin{tabbing}</BEGIN><END>\end{tabbing}</END></SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="PictureMode"><BEGIN>\begin{picture}</BEGIN><END>\end{picture}</END></SPAN>\r
+    <SEQ TYPE="OPERATOR">~</SEQ>\r
+    <SEQ TYPE="KEYWORD1">}</SEQ>\r
+    <SEQ TYPE="KEYWORD1">{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">totalnumber</SEQ>\r
+    <SEQ TYPE="KEYWORD3">topnumber</SEQ>\r
+    <SEQ TYPE="KEYWORD3">tocdepth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">secnumdepth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">dbltopnumber</SEQ>\r
+    <SEQ TYPE="KEYWORD1">]</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\~{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\~</SEQ>\r
+    <SEQ TYPE="OPERATOR">\}</SEQ>\r
+    <SEQ TYPE="OPERATOR">\|</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\width</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\whiledo{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\v{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\vspace{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\vspace*{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vfill</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\verb*</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\verb</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\value{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\v</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\u{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\usepackage{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\usepackage[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\usecounter{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\usebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\upshape</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\unboldmath{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\u</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\t{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\typeout{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\typein{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\typein[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\twocolumn[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\twocolumn</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ttfamily</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\totalheight</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\topsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\topfraction</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\today</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\title{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\tiny</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\thispagestyle{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\thinlines</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\thicklines</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\thanks{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\textwidth</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textup{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\texttt{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textsl{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textsf{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textsc{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textrm{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textnormal{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textmd{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textit{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\textfraction</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\textfloatsep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textcolor{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textbf{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\tableofcontents</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\tabcolsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\tabbingsep</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\t</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\symbol{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\suppressfloats[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\suppressfloats</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsubsection{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsubsection[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsubsection*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsection{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsection[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsection*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subparagraph{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subparagraph[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subparagraph*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\stretch{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\stepcounter{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\smallskip</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\small</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\slshape</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sloppy</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sffamily</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\settowidth{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\settoheight{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\settodepth{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\setlength{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\setcounter{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\section{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\section[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\section*{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\scshape</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\scriptsize</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\scalebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\sbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\savebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\rule{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\rule[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\rp,am{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\rotatebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rmfamily</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\rightmargin</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\reversemarginpar</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\resizebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\resizebox*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\renewenvironment{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\renewcommand{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\ref{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\refstepcounter</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\raisebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\raggedright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\raggedleft</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\qbeziermax</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\providecommand{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\protect</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\printindex</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\pounds</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\part{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\partopsep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\part[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\part*{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\parskip</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\parsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\parindent</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\parbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\parbox[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\paragraph{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\paragraph[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\paragraph*{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\par</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pagestyle{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pageref{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pagenumbering{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pagecolor{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pagebreak[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\pagebreak</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\onecolumn</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\normalsize</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\normalmarginpar</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\normalfont</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\nopagebreak[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nopagebreak</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nonfrenchspacing</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\nolinebreak[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nolinebreak</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\noindent</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\nocite{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newtheorem{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newsavebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\newpage</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newlength{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newenvironment{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newcounter{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newcommand{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\medskip</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\mdseries</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\mathindent</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\mathindent</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\markright{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\markboth{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\marginpar{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\marginparwidth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\marginparsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\marginparpush</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\marginpar[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\maketitle</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\makelabel</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\makeindex</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\makeglossary</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\makebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\makebox[</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\listparindent</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\listoftables</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\listoffigures</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\listfiles</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\linewidth</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\linethickness{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\linebreak[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\linebreak</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\lengthtest{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmarginvi</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmarginv</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmarginiv</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmarginiii</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmarginii</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmargini</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmargin</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\large</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\label{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\labelwidth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\labelsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\jot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\itshape</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\itemsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\itemindent</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\item[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\item</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\isodd{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\intextsep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\input{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\index{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\indent</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\include{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\includeonly{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\includegraphics{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\includegraphics[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\includegraphics*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\includegraphics*[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\ifthenelse{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\hyphenation{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\huge</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\hspace{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\hspace*{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\hfill</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\height</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\glossary{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\fussy</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\frenchspacing</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\framebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\framebox[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\fragile</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\footnote{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\footnotetext{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\footnotetext[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\footnotesize</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\footnotesep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\footnoterule</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\footnotemark[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\footnotemark</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\footnote[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\fnsymbol{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\floatsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\floatpagefraction</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\fill</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\fcolorbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\fbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\fboxsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\fboxrule</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\equal{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\ensuremath{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\enlargethispage{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\enlargethispage*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\end{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\emph{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\d{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\doublerulesep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\documentclass{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\documentclass[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\depth</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\definecolor{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ddag</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\dbltopfraction</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\dbltextfloatsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\dblfloatsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\dblfloatpagefraction</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\date{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\dag</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\d</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\c{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\copyright</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\columnwidth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\columnseprule</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\columnsep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\color{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\colorbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\clearpage</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cleardoublepage</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\cite{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\cite[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\chapter{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\chapter[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\chapter*{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\centering</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\caption{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\caption[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\c</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\b{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\bottomnumber</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\bottomfraction</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\boolean{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\boldmath{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigskip</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\bibliography{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\bibliographystyle{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\bibindent</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bfseries</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\belowdisplayskip</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\belowdisplayshortskip</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\begin{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\baselinestretch</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\baselineskip</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\b</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\author{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\arraystgretch</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\arrayrulewidth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\arraycolsep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\arabic{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\appendix</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\alph{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\addvspace{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\addtolength{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\addtocounter{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\addtocontents{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\addcontentsline{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\abovedisplayskip</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\abovedisplayshortskip</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\`{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\`</SEQ>\r
+    <SEQ TYPE="OPERATOR">\_</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\^{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\^</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\\[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\\*[</SEQ>\r
+    <SEQ TYPE="OPERATOR">\\*</SEQ>\r
+    <SEQ TYPE="OPERATOR">\\</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\TeX</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\S</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\Roman{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\P</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Large</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\LaTeX</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\LARGE</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\H{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Huge</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\H</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\Alph{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\@</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\={</SEQ>\r
+    <SEQ TYPE="OPERATOR">\=</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\.{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\.</SEQ>\r
+    <SEQ TYPE="OPERATOR">\-</SEQ>\r
+    <SEQ TYPE="OPERATOR">\,</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\'{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\'</SEQ>\r
+    <SEQ TYPE="OPERATOR">\&amp;</SEQ>\r
+    <SEQ TYPE="OPERATOR">\%</SEQ>\r
+    <SEQ TYPE="OPERATOR">\$</SEQ>\r
+    <SEQ TYPE="OPERATOR">\#</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\"{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\"</SEQ>\r
+    <SEQ TYPE="OPERATOR">\ </SEQ>\r
+    <SEQ TYPE="KEYWORD1">[</SEQ>\r
+    <SEQ TYPE="OPERATOR">---</SEQ>\r
+    <SEQ TYPE="OPERATOR">--</SEQ>\r
+    <SEQ TYPE="OPERATOR">-</SEQ>\r
+\r
+    <MARK_FOLLOWING TYPE="KEYWORD4">\</MARK_FOLLOWING>\r
+\r
+  </RULES>  <!--  NormalMode  -->\r
+\r
+  <RULES IGNORE_CASE="FALSE" SET="MathMode">\r
+    <SEQ TYPE="LABEL">__MathMode__</SEQ>\r
+\r
+    <!--  % comments.  -->\r
+    <EOL_SPAN TYPE="COMMENT1">%</EOL_SPAN>\r
+    <SEQ TYPE="KEYWORD1">}</SEQ>\r
+    <SEQ TYPE="KEYWORD1">{</SEQ>\r
+    <SEQ TYPE="OPERATOR">_</SEQ>\r
+    <SEQ TYPE="OPERATOR">^</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\zeta</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\xi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\wr</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\wp</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\widetilde{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\widehat{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\wedge</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\veebar</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vee</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\vec{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vdots</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vdash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vartriangleright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vartriangleleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vartriangle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vartheta</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varsupsetneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varsupsetneq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varsubsetneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varsubsetneq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varsigma</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varrho</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varpropto</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varpi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varphi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varnothing</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varkappa</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varepsilon</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vDash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\urcorner</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\upuparrows</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\upsilon</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\uplus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\upharpoonright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\upharpoonleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\updownarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\uparrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ulcorner</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\twoheadrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\twoheadleftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\trianglerighteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\triangleright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\triangleq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\trianglelefteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\triangleleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\triangledown</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\triangle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\top</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\times</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\tilde{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\thicksim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\thickapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\theta</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\therefore</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\text{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\textstyle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\tau</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\tanh</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\tan</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\swarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\surd</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\supsetneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\supsetneq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\supseteqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\supseteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\supset</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sum</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\succsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\succnsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\succnapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\succeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\succcurlyeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\succapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\succ</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\subsetneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\subsetneq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\subseteqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\subseteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\subset</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\star</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\stackrel{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\square</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sqsupseteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sqsupset</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sqsubseteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sqsubset</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\sqrt{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sqcup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sqcap</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sphericalangle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\spadesuit</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\smile</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\smallsmile</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\smallsetminus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\smallfrown</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sinh</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sin</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\simeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sigma</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\shortparallel</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\shortmid</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sharp</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\setminus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sec</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\searrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\scriptstyle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\scriptscriptstyle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rtimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\risingdotseq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right|</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightthreetimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightsquigarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightrightarrows</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightrightarrows</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightleftharpoons</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightleftharpoons</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightleftarrows</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightharpoonup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightharpoondown</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightarrowtail</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right]</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\|</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\updownarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\uparrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\rfloor</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\rceil</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\rangle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\lfloor</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\lceil</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\langle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\downarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\backslash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\Updownarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\Uparrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\Downarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\)</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\(</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\right[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right/</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right)</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right(</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rho</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\psi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\propto</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\prod</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\prime</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\precsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\precnsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\precnapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\preceq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\preccurlyeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\precapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\prec</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pmod{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pmb{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\pm</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\pitchfork</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\pi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\phi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\perp</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\partial</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\parallel</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\overline{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\otimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\oslash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\oplus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ominus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\omega</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\oint</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\odot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nwarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nvdash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nvDash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nvDash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nu</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ntrianglerighteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ntriangleright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ntrianglelefteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ntriangleleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nsupseteqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nsupseteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nsucceq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nsucc</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nsubseteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nshortparallel</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nshortmid</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\npreceq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nprec</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nparallel</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\notin</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nmid</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nless</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nleqslant</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nleqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nleq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nleftrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nleftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ni</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ngtr</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ngeqslant</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ngeqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ngeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nexists</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\neq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\neg</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nearrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ncong</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\natural</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nabla</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nVDash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nRightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nLeftrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nLeftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\multimap</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\mu</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\mp</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\models</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\min</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\mid</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\mho</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\measuredangle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\max</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mathtt{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mathsf{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\mathrm{~~ </SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mathit{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mathcal{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mathbf{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\mapsto</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lvertneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ltimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lrcorner</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lozenge</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\looparrowright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\looparrowleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\longrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\longmapsto</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\longleftrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\longleftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\log</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lnsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lneq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lnapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ln</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lll</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\llcorner</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ll</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\limsup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\liminf</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lg</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lesssim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lessgtr</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lesseqqgtr</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lesseqgtr</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lessdot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lessapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leqslant</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left|</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftthreetimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftrightsquigarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftrightharpoons</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftrightarrows</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftleftarrows</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftharpoonup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftharpoondown</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\lefteqn{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftarrowtail</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left]</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\|</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\updownarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\uparrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\rfloor</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\rceil</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\rangle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\lfloor</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\lceil</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\langle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\downarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\backslash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\Updownarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\Uparrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\Downarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\)</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\(</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\left[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left/</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left)</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left(</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ldots</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lambda</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ker</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\kappa</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\jmath</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\jmath</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\iota</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\intercal</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\int</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\infty</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\inf</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\in</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\imath</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\imath</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\hslash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\hookrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\hookleftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\hom</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\heartsuit</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\hbar</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\hat{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gvertneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gtrsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gtrless</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gtreqqless</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gtreqless</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gtrdot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gtrapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\grave{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gnsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gneq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gnapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gnapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gimel</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ggg</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gg</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\geqslant</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\geqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\geq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gcd</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gamma</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\frown</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\frak{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\frac{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\forall</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\flat</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\fallingdotseq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\exp</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\exists</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\eth</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\eta</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\equiv</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\eqslantless</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\eqslantgtr</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\eqcirc</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\epsilon</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\ensuremath{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\end{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\emptyset</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ell</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\downharpoonright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\downharpoonleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\downdownarrows</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\downarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\doublebarwedge</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\dot{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\dotplus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\doteqdot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\doteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\divideontimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\div</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\displaystyle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\dim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\digamma</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\diamondsuit</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\diamond</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\diagup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\diagdown</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\det</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\delta</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\deg</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\ddot{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ddots</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ddagger</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\dashv</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\dashrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\dashleftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\daleth</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\dagger</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\curvearrowright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\curvearrowleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\curlywedge</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\curlyvee</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\curlyeqsucc</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\curlyeqprec</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\csc</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\coth</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cosh</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cos</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\coprod</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cong</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\complement</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\clubsuit</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circleddash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circledcirc</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circledast</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circledS</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circlearrowright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circlearrowleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circ</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\chi</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\check{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\centerdot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cdots</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cdot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cap</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bumpeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bullet</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\breve{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\boxtimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\boxplus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\boxminus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\boxdot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bowtie</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bot</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\boldsymbol{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bmod</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\blacktriangleright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\blacktriangleleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\blacktriangledown</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\blacktriangle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\blacksquare</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\blacklozenge</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigwedge</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigvee</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\biguplus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigtriangleup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigtriangledown</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigstar</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigsqcup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigotimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigoplus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigodot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigcup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigcirc</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigcap</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\between</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\beth</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\beta</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\begin{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\because</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\bar{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\barwedge</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\backslash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\backsimeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\backsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\backprime</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\asymp</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ast</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\arg</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\arctan</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\arcsin</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\arccos</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\approxeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\approx</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\angle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\angle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\amalg</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\alpha</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\aleph</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\acute{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Xi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Vvdash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Vdash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Upsilon</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Updownarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Uparrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Theta</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Supset</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Subset</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Sigma</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Rsh</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Rightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Re</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Psi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Pr</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Pi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Phi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Omega</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Lsh</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Longrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Longleftrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Longleftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Lleftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Leftrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Leftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Lambda</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Im</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Gamma</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Game</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Finv</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Downarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Delta</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Cup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Cap</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Bumpeq</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\Bbb{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Bbbk</SEQ>\r
+    <SEQ TYPE="OPERATOR">\;</SEQ>\r
+    <SEQ TYPE="OPERATOR">\:</SEQ>\r
+    <SEQ TYPE="OPERATOR">\,</SEQ>\r
+    <SEQ TYPE="OPERATOR">\!</SEQ>\r
+    <SEQ TYPE="OPERATOR">'</SEQ>\r
+\r
+    <SPAN TYPE="MARKUP" DELEGATE="ArrayMode"><BEGIN>\begin{array}</BEGIN><END>\end{array}</END></SPAN>\r
+\r
+    <MARK_FOLLOWING TYPE="KEYWORD4">\</MARK_FOLLOWING>\r
+\r
+  </RULES>  <!--  MathMode  -->\r
+\r
+  <RULES IGNORE_CASE="FALSE" SET="ArrayMode">\r
+    <SEQ TYPE="LABEL">__ArrayMode__</SEQ>\r
+\r
+    <!--  % comments.  -->\r
+    <EOL_SPAN TYPE="COMMENT1">%</EOL_SPAN>\r
+    <SEQ TYPE="KEYWORD1">}</SEQ>\r
+    <SEQ TYPE="KEYWORD1">{</SEQ>\r
+    <SEQ TYPE="OPERATOR">_</SEQ>\r
+    <SEQ TYPE="OPERATOR">^</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\zeta</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\xi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\wr</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\wp</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\widetilde{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\widehat{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\wedge</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vline</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\veebar</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vee</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\vec{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vdots</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vdash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vartriangleright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vartriangleleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vartriangle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vartheta</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varsupsetneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varsupsetneq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varsubsetneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varsubsetneq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varsigma</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varrho</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varpropto</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varpi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varphi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varnothing</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varkappa</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\varepsilon</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vDash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\urcorner</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\upuparrows</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\upsilon</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\uplus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\upharpoonright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\upharpoonleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\updownarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\uparrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ulcorner</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\twoheadrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\twoheadleftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\trianglerighteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\triangleright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\triangleq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\trianglelefteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\triangleleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\triangledown</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\triangle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\top</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\times</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\tilde{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\thicksim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\thickapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\theta</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\therefore</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\text{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\textstyle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\tau</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\tanh</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\tan</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\swarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\surd</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\supsetneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\supsetneq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\supseteqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\supseteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\supset</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sum</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\succsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\succnsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\succnapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\succeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\succcurlyeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\succapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\succ</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\subsetneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\subsetneq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\subseteqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\subseteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\subset</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\star</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\stackrel{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\square</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sqsupseteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sqsupset</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sqsubseteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sqsubset</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\sqrt{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sqcup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sqcap</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sphericalangle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\spadesuit</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\smile</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\smallsmile</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\smallsetminus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\smallfrown</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sinh</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sin</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\simeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sigma</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\shortparallel</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\shortmid</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sharp</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\setminus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sec</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\searrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\scriptstyle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\scriptscriptstyle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rtimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\risingdotseq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right|</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightthreetimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightsquigarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightrightarrows</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightrightarrows</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightleftharpoons</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightleftharpoons</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightleftarrows</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightharpoonup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightharpoondown</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightarrowtail</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right]</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\|</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\updownarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\uparrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\rfloor</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\rceil</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\rangle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\lfloor</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\lceil</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\langle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\downarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\backslash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\Updownarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\Uparrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\Downarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\)</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right\(</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\right[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right/</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right)</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\right(</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rho</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\psi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\propto</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\prod</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\prime</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\precsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\precnsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\precnapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\preceq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\preccurlyeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\precapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\prec</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pmod{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pmb{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\pm</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\pitchfork</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\pi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\phi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\perp</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\partial</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\parallel</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\overline{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\otimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\oslash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\oplus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ominus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\omega</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\oint</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\odot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nwarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nvdash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nvDash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nvDash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nu</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ntrianglerighteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ntriangleright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ntrianglelefteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ntriangleleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nsupseteqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nsupseteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nsucceq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nsucc</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nsubseteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nshortparallel</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nshortmid</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\npreceq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nprec</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nparallel</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\notin</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nmid</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nless</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nleqslant</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nleqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nleq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nleftrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nleftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ni</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ngtr</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ngeqslant</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ngeqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ngeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nexists</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\neq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\neg</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nearrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ncong</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\natural</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nabla</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nVDash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nRightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nLeftrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nLeftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\multimap</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\multicolumn{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\mu</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\mp</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\models</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\min</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\mid</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\mho</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\measuredangle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\max</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mathtt{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mathsf{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\mathrm{~~ </SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mathit{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mathcal{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mathbf{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\mapsto</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lvertneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ltimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lrcorner</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lozenge</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\looparrowright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\looparrowleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\longrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\longmapsto</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\longleftrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\longleftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\log</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lnsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lneq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lnapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ln</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lll</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\llcorner</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ll</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\limsup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\liminf</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lg</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lesssim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lessgtr</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lesseqqgtr</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lesseqgtr</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lessdot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lessapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leqslant</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left|</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftthreetimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftrightsquigarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftrightharpoons</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftrightarrows</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftleftarrows</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftharpoonup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftharpoondown</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\lefteqn{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftarrowtail</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\leftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left]</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\|</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\updownarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\uparrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\rfloor</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\rceil</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\rangle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\lfloor</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\lceil</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\langle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\downarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\backslash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\Updownarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\Uparrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\Downarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\)</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left\(</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\left[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left/</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left)</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\left(</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ldots</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\lambda</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ker</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\kappa</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\jmath</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\jmath</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\iota</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\intercal</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\int</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\infty</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\inf</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\in</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\imath</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\imath</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\hslash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\hookrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\hookleftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\hom</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\hline</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\heartsuit</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\hbar</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\hat{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gvertneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gtrsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gtrless</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gtreqqless</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gtreqless</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gtrdot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gtrapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\grave{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gnsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gneqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gneq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gnapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gnapprox</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gimel</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ggg</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gg</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\geqslant</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\geqq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\geq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gcd</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\gamma</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\frown</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\frak{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\frac{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\forall</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\flat</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\fallingdotseq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\exp</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\exists</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\eth</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\eta</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\equiv</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\eqslantless</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\eqslantgtr</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\eqcirc</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\epsilon</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\ensuremath{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\end{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\emptyset</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ell</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\downharpoonright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\downharpoonleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\downdownarrows</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\downarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\doublebarwedge</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\dot{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\dotplus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\doteqdot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\doteq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\divideontimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\div</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\displaystyle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\dim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\digamma</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\diamondsuit</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\diamond</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\diagup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\diagdown</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\det</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\delta</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\deg</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\ddot{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ddots</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ddagger</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\dashv</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\dashrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\dashleftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\daleth</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\dagger</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\curvearrowright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\curvearrowleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\curlywedge</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\curlyvee</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\curlyeqsucc</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\curlyeqprec</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\csc</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\coth</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cosh</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cos</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\coprod</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cong</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\complement</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\clubsuit</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\cline{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circleddash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circledcirc</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circledast</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circledS</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circlearrowright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circlearrowleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\circ</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\chi</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\check{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\centerdot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cdots</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cdot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cap</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bumpeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bullet</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\breve{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\boxtimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\boxplus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\boxminus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\boxdot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bowtie</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bot</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\boldsymbol{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bmod</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\blacktriangleright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\blacktriangleleft</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\blacktriangledown</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\blacktriangle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\blacksquare</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\blacklozenge</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigwedge</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigvee</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\biguplus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigtriangleup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigtriangledown</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigstar</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigsqcup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigotimes</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigoplus</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigodot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigcup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigcirc</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigcap</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\between</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\beth</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\beta</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\begin{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\because</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\bar{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\barwedge</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\backslash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\backsimeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\backsim</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\backprime</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\asymp</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ast</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\arg</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\arctan</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\arcsin</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\arccos</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\approxeq</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\approx</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\angle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\angle</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\amalg</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\alpha</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\aleph</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\acute{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Xi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Vvdash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Vdash</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Upsilon</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Updownarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Uparrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Theta</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Supset</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Subset</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Sigma</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Rsh</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Rightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Re</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Psi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Pr</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Pi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Phi</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Omega</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Lsh</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Longrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Longleftrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Longleftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Lleftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Leftrightarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Leftarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Lambda</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Im</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Gamma</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Game</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Finv</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Downarrow</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Delta</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Cup</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Cap</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Bumpeq</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\Bbb{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Bbbk</SEQ>\r
+    <SEQ TYPE="OPERATOR">\;</SEQ>\r
+    <SEQ TYPE="OPERATOR">\:</SEQ>\r
+    <SEQ TYPE="OPERATOR">\,</SEQ>\r
+    <SEQ TYPE="OPERATOR">\!</SEQ>\r
+    <SEQ TYPE="OPERATOR">'</SEQ>\r
+    <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+\r
+    <MARK_FOLLOWING TYPE="KEYWORD4">\</MARK_FOLLOWING>\r
+\r
+  </RULES>  <!--  ArrayMode  -->\r
+\r
+  <RULES IGNORE_CASE="FALSE" SET="TabularMode">\r
+    <SEQ TYPE="LABEL">__TabularMode__</SEQ>\r
+\r
+    <!--  % comments.  -->\r
+    <EOL_SPAN TYPE="COMMENT1">%</EOL_SPAN>\r
+\r
+    <!--  "", `', and ``'' quoting.  -->\r
+    <SPAN NO_LINE_BREAK="FALSE" TYPE="LITERAL4"><BEGIN>``</BEGIN><END>''</END></SPAN>\r
+    <SPAN NO_LINE_BREAK="FALSE" TYPE="LITERAL3"><BEGIN>`</BEGIN><END>'</END></SPAN>\r
+    <SPAN NO_LINE_BREAK="FALSE" TYPE="LITERAL1"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <!--  Lone quote characters " and ` are not valid.  -->\r
+    <SEQ TYPE="INVALID">"</SEQ>\r
+    <SEQ TYPE="INVALID">`</SEQ>\r
+    <SEQ TYPE="OPERATOR">~</SEQ>\r
+    <SEQ TYPE="KEYWORD1">}</SEQ>\r
+    <SEQ TYPE="KEYWORD1">{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">totalnumber</SEQ>\r
+    <SEQ TYPE="KEYWORD3">topnumber</SEQ>\r
+    <SEQ TYPE="KEYWORD3">tocdepth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">secnumdepth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">dbltopnumber</SEQ>\r
+    <SEQ TYPE="KEYWORD1">]</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\~{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\~</SEQ>\r
+    <SEQ TYPE="OPERATOR">\}</SEQ>\r
+    <SEQ TYPE="OPERATOR">\|</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\width</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\whiledo{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\v{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\vspace{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\vspace*{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vline</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vfill</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\verb*</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\verb</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\value{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\v</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\u{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\usepackage{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\usepackage[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\usecounter{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\usebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\upshape</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\unboldmath{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\u</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\t{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\typeout{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\typein{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\typein[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\twocolumn[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\twocolumn</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ttfamily</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\totalheight</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\topsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\topfraction</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\today</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\title{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\tiny</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\thispagestyle{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\thinlines</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\thicklines</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\thanks{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\textwidth</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textup{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\texttt{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textsl{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textsf{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textsc{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textrm{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textnormal{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textmd{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textit{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\textfraction</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\textfloatsep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textcolor{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textbf{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\tableofcontents</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\tabcolsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\tabbingsep</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\t</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\symbol{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\suppressfloats[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\suppressfloats</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsubsection{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsubsection[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsubsection*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsection{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsection[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsection*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subparagraph{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subparagraph[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subparagraph*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\stretch{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\stepcounter{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\smallskip</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\small</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\slshape</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sloppy</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sffamily</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\settowidth{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\settoheight{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\settodepth{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\setlength{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\setcounter{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\section{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\section[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\section*{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\scshape</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\scriptsize</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\scalebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\sbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\savebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\rule{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\rule[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\rp,am{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\rotatebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rmfamily</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\rightmargin</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\reversemarginpar</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\resizebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\resizebox*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\renewenvironment{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\renewcommand{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\ref{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\refstepcounter</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\raisebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\raggedright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\raggedleft</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\qbeziermax</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\providecommand{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\protect</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\printindex</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\pounds</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\part{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\partopsep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\part[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\part*{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\parskip</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\parsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\parindent</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\parbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\parbox[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\paragraph{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\paragraph[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\paragraph*{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\par</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pagestyle{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pageref{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pagenumbering{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pagecolor{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pagebreak[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\pagebreak</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\onecolumn</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\normalsize</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\normalmarginpar</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\normalfont</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\nopagebreak[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nopagebreak</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nonfrenchspacing</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\nolinebreak[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nolinebreak</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\noindent</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\nocite{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newtheorem{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newsavebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\newpage</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newlength{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newenvironment{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newcounter{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newcommand{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\multicolumn{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\medskip</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\mdseries</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\mathindent</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\mathindent</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\markright{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\markboth{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\marginpar{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\marginparwidth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\marginparsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\marginparpush</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\marginpar[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\maketitle</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\makelabel</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\makeindex</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\makeglossary</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\makebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\makebox[</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\listparindent</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\listoftables</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\listoffigures</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\listfiles</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\linewidth</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\linethickness{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\linebreak[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\linebreak</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\lengthtest{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmarginvi</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmarginv</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmarginiv</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmarginiii</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmarginii</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmargini</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmargin</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\large</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\label{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\labelwidth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\labelsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\jot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\itshape</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\itemsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\itemindent</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\item[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\item</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\isodd{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\intextsep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\input{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\index{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\indent</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\include{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\includeonly{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\includegraphics{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\includegraphics[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\includegraphics*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\includegraphics*[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\ifthenelse{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\hyphenation{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\huge</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\hspace{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\hspace*{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\hline</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\hfill</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\height</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\glossary{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\fussy</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\frenchspacing</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\framebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\framebox[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\fragile</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\footnote{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\footnotetext{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\footnotetext[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\footnotesize</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\footnotesep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\footnoterule</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\footnotemark[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\footnotemark</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\footnote[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\fnsymbol{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\floatsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\floatpagefraction</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\fill</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\fcolorbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\fbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\fboxsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\fboxrule</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\equal{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\ensuremath{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\enlargethispage{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\enlargethispage*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\end{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\emph{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\d{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\doublerulesep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\documentclass{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\documentclass[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\depth</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\definecolor{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ddag</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\dbltopfraction</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\dbltextfloatsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\dblfloatsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\dblfloatpagefraction</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\date{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\dag</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\d</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\c{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\copyright</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\columnwidth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\columnseprule</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\columnsep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\color{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\colorbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\cline{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\clearpage</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cleardoublepage</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\cite{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\cite[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\chapter{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\chapter[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\chapter*{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\centering</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\caption{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\caption[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\c</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\b{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\bottomnumber</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\bottomfraction</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\boolean{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\boldmath{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigskip</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\bibliography{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\bibliographystyle{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\bibindent</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bfseries</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\belowdisplayskip</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\belowdisplayshortskip</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\begin{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\baselinestretch</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\baselineskip</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\b</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\author{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\arraystgretch</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\arrayrulewidth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\arraycolsep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\arabic{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\appendix</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\alph{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\addvspace{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\addtolength{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\addtocounter{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\addtocontents{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\addcontentsline{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\abovedisplayskip</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\abovedisplayshortskip</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\`{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\`</SEQ>\r
+    <SEQ TYPE="OPERATOR">\_</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\^{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\^</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\\[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\\*[</SEQ>\r
+    <SEQ TYPE="OPERATOR">\\*</SEQ>\r
+    <SEQ TYPE="OPERATOR">\\</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\TeX</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\S</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\Roman{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\P</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Large</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\LaTeX</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\LARGE</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\H{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Huge</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\H</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\Alph{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\@</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\={</SEQ>\r
+    <SEQ TYPE="OPERATOR">\=</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\.{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\.</SEQ>\r
+    <SEQ TYPE="OPERATOR">\-</SEQ>\r
+    <SEQ TYPE="OPERATOR">\,</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\'{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\'</SEQ>\r
+    <SEQ TYPE="OPERATOR">\&amp;</SEQ>\r
+    <SEQ TYPE="OPERATOR">\%</SEQ>\r
+    <SEQ TYPE="OPERATOR">\$</SEQ>\r
+    <SEQ TYPE="OPERATOR">\#</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\"{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\"</SEQ>\r
+    <SEQ TYPE="OPERATOR">\ </SEQ>\r
+    <SEQ TYPE="KEYWORD1">[</SEQ>\r
+    <SEQ TYPE="OPERATOR">---</SEQ>\r
+    <SEQ TYPE="OPERATOR">--</SEQ>\r
+    <SEQ TYPE="OPERATOR">-</SEQ>\r
+    <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+\r
+    <MARK_FOLLOWING TYPE="KEYWORD4">\</MARK_FOLLOWING>\r
+\r
+  </RULES>  <!--  TabularMode  -->\r
+\r
+  <RULES IGNORE_CASE="FALSE" SET="TabbingMode">\r
+    <SEQ TYPE="LABEL">__TabbingMode__</SEQ>\r
+\r
+    <!--  % comments.  -->\r
+    <EOL_SPAN TYPE="COMMENT1">%</EOL_SPAN>\r
+\r
+    <!--  "", `', and ``'' quoting.  -->\r
+    <SPAN NO_LINE_BREAK="FALSE" TYPE="LITERAL4"><BEGIN>``</BEGIN><END>''</END></SPAN>\r
+    <SPAN NO_LINE_BREAK="FALSE" TYPE="LITERAL3"><BEGIN>`</BEGIN><END>'</END></SPAN>\r
+    <SPAN NO_LINE_BREAK="FALSE" TYPE="LITERAL1"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+    <!--  Lone quote characters " and ` are not valid.  -->\r
+    <SEQ TYPE="INVALID">"</SEQ>\r
+    <SEQ TYPE="INVALID">`</SEQ>\r
+    <SEQ TYPE="OPERATOR">~</SEQ>\r
+    <SEQ TYPE="KEYWORD1">}</SEQ>\r
+    <SEQ TYPE="KEYWORD1">{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">totalnumber</SEQ>\r
+    <SEQ TYPE="KEYWORD3">topnumber</SEQ>\r
+    <SEQ TYPE="KEYWORD3">tocdepth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">secnumdepth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">dbltopnumber</SEQ>\r
+    <SEQ TYPE="KEYWORD1">]</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\~{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\~</SEQ>\r
+    <SEQ TYPE="OPERATOR">\}</SEQ>\r
+    <SEQ TYPE="OPERATOR">\|</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\width</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\whiledo{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\v{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\vspace{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\vspace*{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\vfill</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\verb*</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\verb</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\value{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\v</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\u{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\usepackage{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\usepackage[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\usecounter{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\usebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\upshape</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\unboldmath{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\u</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\t{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\typeout{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\typein{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\typein[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\twocolumn[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\twocolumn</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ttfamily</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\totalheight</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\topsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\topfraction</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\today</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\title{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\tiny</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\thispagestyle{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\thinlines</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\thicklines</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\thanks{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\textwidth</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textup{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\texttt{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textsl{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textsf{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textsc{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textrm{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textnormal{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textmd{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textit{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\textfraction</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\textfloatsep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textcolor{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\textbf{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\tableofcontents</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\tabcolsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\tabbingsep</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\t</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\symbol{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\suppressfloats[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\suppressfloats</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsubsection{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsubsection[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsubsection*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsection{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsection[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subsection*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subparagraph{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subparagraph[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\subparagraph*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\stretch{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\stepcounter{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\smallskip</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\small</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\slshape</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sloppy</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\sffamily</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\settowidth{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\settoheight{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\settodepth{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\setlength{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\setcounter{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\section{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\section[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\section*{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\scshape</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\scriptsize</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\scalebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\sbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\savebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\rule{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\rule[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\rp,am{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\rotatebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\rmfamily</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\rightmargin</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\reversemarginpar</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\resizebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\resizebox*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\renewenvironment{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\renewcommand{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\ref{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\refstepcounter</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\raisebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\raggedright</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\raggedleft</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\qbeziermax</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\pushtabs</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\providecommand{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\protect</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\printindex</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\pounds</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\poptabs</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\part{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\partopsep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\part[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\part*{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\parskip</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\parsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\parindent</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\parbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\parbox[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\paragraph{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\paragraph[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\paragraph*{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\par</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pagestyle{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pageref{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pagenumbering{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pagecolor{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\pagebreak[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\pagebreak</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\onecolumn</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\normalsize</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\normalmarginpar</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\normalfont</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\nopagebreak[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nopagebreak</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nonfrenchspacing</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\nolinebreak[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\nolinebreak</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\noindent</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\nocite{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newtheorem{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newsavebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\newpage</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newlength{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newenvironment{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newcounter{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\newcommand{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\medskip</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\mdseries</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\mbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\mathindent</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\mathindent</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\markright{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\markboth{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\marginpar{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\marginparwidth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\marginparsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\marginparpush</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\marginpar[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\maketitle</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\makelabel</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\makeindex</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\makeglossary</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\makebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\makebox[</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\listparindent</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\listoftables</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\listoffigures</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\listfiles</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\linewidth</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\linethickness{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\linebreak[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\linebreak</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\lengthtest{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmarginvi</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmarginv</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmarginiv</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmarginiii</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmarginii</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmargini</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\leftmargin</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\large</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\label{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\labelwidth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\labelsep</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\kill</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\jot</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\itshape</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\itemsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\itemindent</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\item[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\item</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\isodd{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\intextsep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\input{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\index{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\indent</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\include{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\includeonly{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\includegraphics{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\includegraphics[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\includegraphics*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\includegraphics*[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\ifthenelse{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\hyphenation{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\huge</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\hspace{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\hspace*{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\hfill</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\height</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\glossary{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\fussy</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\frenchspacing</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\framebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\framebox[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\fragile</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\footnote{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\footnotetext{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\footnotetext[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\footnotesize</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\footnotesep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\footnoterule</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\footnotemark[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\footnotemark</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\footnote[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\fnsymbol{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\floatsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\floatpagefraction</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\fill</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\fcolorbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\fbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\fboxsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\fboxrule</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\equal{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\ensuremath{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\enlargethispage{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\enlargethispage*{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\end{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\emph{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\d{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\doublerulesep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\documentclass{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\documentclass[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\depth</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\definecolor{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\ddag</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\dbltopfraction</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\dbltextfloatsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\dblfloatsep</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\dblfloatpagefraction</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\date{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\dag</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\d</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\c{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\copyright</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\columnwidth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\columnseprule</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\columnsep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\color{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\colorbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\clearpage</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\cleardoublepage</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\cite{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\cite[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\chapter{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\chapter[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\chapter*{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\centering</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\caption{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\caption[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\c</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\b{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\bottomnumber</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\bottomfraction</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\boolean{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\boldmath{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bigskip</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\bibliography{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\bibliographystyle{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\bibindent</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\bfseries</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\belowdisplayskip</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\belowdisplayshortskip</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\begin{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\baselinestretch</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\baselineskip</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\b</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\author{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\arraystgretch</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\arrayrulewidth</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\arraycolsep</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\arabic{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\appendix</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\alph{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\addvspace{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\addtolength{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\addtocounter{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\addtocontents{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\addcontentsline{</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\abovedisplayskip</SEQ>\r
+    <SEQ TYPE="KEYWORD3">\abovedisplayshortskip</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\a`</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\a=</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\a'</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\`{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\`</SEQ>\r
+    <SEQ TYPE="OPERATOR">\`</SEQ>\r
+    <SEQ TYPE="OPERATOR">\_</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\^{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\^</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\\[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\\*[</SEQ>\r
+    <SEQ TYPE="OPERATOR">\\*</SEQ>\r
+    <SEQ TYPE="OPERATOR">\\</SEQ>\r
+    <SEQ TYPE="OPERATOR">\\</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\TeX</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\S</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\Roman{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\P</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Large</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\LaTeX</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\LARGE</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\H{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\Huge</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\H</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\Alph{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\@</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\={</SEQ>\r
+    <SEQ TYPE="OPERATOR">\=</SEQ>\r
+    <SEQ TYPE="OPERATOR">\=</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\.{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\.</SEQ>\r
+    <SEQ TYPE="OPERATOR">\-</SEQ>\r
+    <SEQ TYPE="OPERATOR">\-</SEQ>\r
+    <SEQ TYPE="OPERATOR">\,</SEQ>\r
+    <SEQ TYPE="OPERATOR">\+</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\'{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\'</SEQ>\r
+    <SEQ TYPE="OPERATOR">\'</SEQ>\r
+    <SEQ TYPE="OPERATOR">\&lt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">\&gt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">\&amp;</SEQ>\r
+    <SEQ TYPE="OPERATOR">\%</SEQ>\r
+    <SEQ TYPE="OPERATOR">\$</SEQ>\r
+    <SEQ TYPE="OPERATOR">\#</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\"{</SEQ>\r
+    <SEQ TYPE="OPERATOR">\"</SEQ>\r
+    <SEQ TYPE="OPERATOR">\ </SEQ>\r
+    <SEQ TYPE="KEYWORD1">[</SEQ>\r
+    <SEQ TYPE="OPERATOR">---</SEQ>\r
+    <SEQ TYPE="OPERATOR">--</SEQ>\r
+    <SEQ TYPE="OPERATOR">-</SEQ>\r
+\r
+    <MARK_FOLLOWING TYPE="KEYWORD4">\</MARK_FOLLOWING>\r
+\r
+  </RULES>  <!--  TabbingMode  -->\r
+\r
+  <RULES IGNORE_CASE="FALSE" SET="PictureMode">\r
+    <SEQ TYPE="LABEL">__PictureMode__</SEQ>\r
+\r
+    <!--  % comments.  -->\r
+    <EOL_SPAN TYPE="COMMENT1">%</EOL_SPAN>\r
+    <SEQ TYPE="KEYWORD2">\vector(</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\thinlines</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\thicklines</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\shortstack{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\shortstack[</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\savebox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\qbezier[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\qbezier(</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\put(</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\oval[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\oval(</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\multiput(</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\makebox(</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\linethickness{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\line(</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\graphpaper[</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\graphpaper(</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\frame{</SEQ>\r
+    <SEQ TYPE="KEYWORD2">\framebox(</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\dashbox{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\circle{</SEQ>\r
+    <SEQ TYPE="KEYWORD1">\circle*{</SEQ>\r
+\r
+    <MARK_FOLLOWING TYPE="KEYWORD4">\</MARK_FOLLOWING>\r
+\r
+  </RULES>  <!--  PictureMode  -->\r
+\r
+  <RULES SET="VERBATIM" DEFAULT="NULL" />\r
+\r
+</MODE>\r
+\r
+<!-- normal mode  351 -->\r
+<!-- math mode    301 -->\r
+<!-- amsmath      216 -->\r
+<!-- array mode   5 -->\r
+<!-- tabbing mode 14 -->\r
+<!-- picture mode 22 -->\r
+<!-- counters     0 -->\r
+<!-- environments 30 -->\r
+<!-- invalid      47 -->\r
diff --git a/extra/xmode/modes/lilypond.xml b/extra/xmode/modes/lilypond.xml
new file mode 100644 (file)
index 0000000..ca72fae
--- /dev/null
@@ -0,0 +1,819 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- LilyPond (www.lilypond.org) mode by Bertalan Fodor <lilypondtool@organum.hu> & others at http://lily4jedit.sf.net\r
+       Requires jEdit 4.3pre6 or compatible\r
+Recommended jEdit/modes/catalog entry:\r
+       <MODE NAME="lilypond" FILE="lilypond.xml"\r
+       FILE_NAME_GLOB="*.ly" />\r
+\r
+-->\r
+\r
+<MODE>\r
+<PROPS>\r
+       <PROPERTY NAME="commentStart" VALUE="%{" />\r
+       <PROPERTY NAME="commentEnd" VALUE="%}" />\r
+       <PROPERTY NAME="lineComment" VALUE="%" />\r
+       <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+       <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+       <PROPERTY NAME="doubleBracketIndent" VALUE="false" />\r
+       <PROPERTY NAME="wordBreakChars" VALUE="=" />\r
+</PROPS>\r
+\r
+<RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="FALSE">\r
+\r
+       <SPAN TYPE="COMMENT2" NO_LINE_BREAK="FALSE">\r
+               <BEGIN>%{</BEGIN><END>%}</END>\r
+       </SPAN>\r
+       <EOL_SPAN TYPE="COMMENT1">%</EOL_SPAN>\r
+\r
+       <SEQ TYPE="DIGIT">\breve</SEQ>\r
+       <SEQ TYPE="DIGIT">\longa</SEQ>\r
+       <SEQ TYPE="DIGIT">\maxima</SEQ>\r
+       <MARK_PREVIOUS TYPE="FUNCTION" AT_WHITESPACE_END="TRUE">=</MARK_PREVIOUS>\r
+       <MARK_PREVIOUS TYPE="FUNCTION" AT_WHITESPACE_END="TRUE"> =</MARK_PREVIOUS>\r
+       <SEQ TYPE="MARKUP">{</SEQ>\r
+       <SEQ TYPE="MARKUP">}</SEQ>\r
+       <SEQ TYPE="MARKUP">[</SEQ>\r
+       <SEQ TYPE="MARKUP">]</SEQ>\r
+       <SEQ TYPE="MARKUP">&lt;&lt;</SEQ>\r
+       <SEQ TYPE="MARKUP">&gt;&gt;</SEQ>\r
+       <SEQ TYPE="NULL">-&lt;</SEQ>\r
+       <SEQ TYPE="NULL">-&gt;</SEQ>\r
+       <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+       <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+       <SEQ TYPE="OPERATOR">|</SEQ>\r
+       <SEQ_REGEXP HASH_CHAR="&quot;"  TYPE = "LITERAL1">"(\\"|[^\\"]|\\)+"</SEQ_REGEXP>\r
+       <SPAN TYPE="LITERAL1"><BEGIN>"</BEGIN><END>"</END></SPAN>\r
+\r
+<!-- Less can be more: Notes are simple black.\r
+       Now digits are highlighted.\r
+       Octave jumps now are as highlighted as markup. -->\r
+\r
+       <!--octave-->\r
+       <SEQ TYPE="MARKUP">'</SEQ>\r
+       <SEQ TYPE="MARKUP">,</SEQ>\r
+\r
+       <!-- rests and skip -->\r
+\r
+       <SEQ_REGEXP TYPE="LITERAL4" AT_WORD_START="TRUE" HASH_CHARS="rRs">[rRs]\d*\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="LITERAL4" AT_WORD_START="TRUE" HASH_CHAR="R">R\d*\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="LITERAL4" AT_WORD_START="TRUE" HASH_CHAR="s">s\d*\b</SEQ_REGEXP>\r
+\r
+       <SEQ_REGEXP TYPE="DIGIT" AT_WORD_START="FALSE" HASH_CHARS="1234567890">\d+\b</SEQ_REGEXP>\r
+\r
+       <MARK_FOLLOWING TYPE="LITERAL3" MATCH_TYPE="OPERATOR">.</MARK_FOLLOWING>\r
+\r
+<!-- Generated part follows -->\r
+<!-- internal commands -->\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\override">\\override\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\version">\\version\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\include">\\include\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\invalid">\\invalid\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\addquote">\\addquote\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\alternative">\\alternative\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\book">\\book\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\~">\\~\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\mark">\\mark\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\default">\\default\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\key">\\key\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\skip">\\skip\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\octave">\\octave\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\partial">\\partial\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\time">\\time\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\change">\\change\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\consists">\\consists\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\remove">\\remove\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\accepts">\\accepts\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\defaultchild">\\defaultchild\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\denies">\\denies\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\alias">\\alias\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\type">\\type\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\description">\\description\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\name">\\name\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\context">\\context\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\grobdescriptions">\\grobdescriptions\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\markup">\\markup\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\header">\\header\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\notemode">\\notemode\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\drummode">\\drummode\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\figuremode">\\figuremode\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\chordmode">\\chordmode\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\lyricmode">\\lyricmode\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\drums">\\drums\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\figures">\\figures\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\chords">\\chords\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\lyrics">\\lyrics\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\once">\\once\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\revert">\\revert\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\set">\\set\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\unset">\\unset\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\addlyrics">\\addlyrics\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\objectid">\\objectid\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\with">\\with\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\rest">\\rest\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\paper">\\paper\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\midi">\\midi\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\layout">\\layout\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\new">\\new\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\times">\\times\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\transpose">\\transpose\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\tag">\\tag\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\relative">\\relative\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\renameinput">\\renameinput\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\repeat">\\repeat\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\lyricsto">\\lyricsto\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\score">\\score\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\sequential">\\sequential\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\simultaneous">\\simultaneous\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\longa">\\longa\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\breve">\\breve\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\maxima">\\maxima\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="\tempo">\\tempo\b</SEQ_REGEXP>\r
+<!-- identifiers -->\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\AncientRemoveEmptyStaffContext">\\AncientRemoveEmptyStaffContext\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\RemoveEmptyRhythmicStaffContext">\\RemoveEmptyRhythmicStaffContext\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\RemoveEmptyStaffContext">\\RemoveEmptyStaffContext\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\accent">\\accent\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\aeolian">\\aeolian\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\afterGraceFraction">\\afterGraceFraction\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\aikenHeads">\\aikenHeads\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\allowPageTurn">\\allowPageTurn\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\arpeggio">\\arpeggio\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\arpeggioBracket">\\arpeggioBracket\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\arpeggioDown">\\arpeggioDown\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\arpeggioNeutral">\\arpeggioNeutral\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\arpeggioUp">\\arpeggioUp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\autoBeamOff">\\autoBeamOff\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\autoBeamOn">\\autoBeamOn\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\between-system-padding">\\between-system-padding\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\between-system-space">\\between-system-space\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\bigger">\\bigger\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\blackTriangleMarkup">\\blackTriangleMarkup\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\bookTitleMarkup">\\bookTitleMarkup\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\bracketCloseSymbol">\\bracketCloseSymbol\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\bracketOpenSymbol">\\bracketOpenSymbol\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\break">\\break\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\breve">\\breve\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\cadenzaOff">\\cadenzaOff\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\cadenzaOn">\\cadenzaOn\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\center">\\center\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\chordmodifiers">\\chordmodifiers\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\cm">\\cm\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\coda">\\coda\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\cr">\\cr\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\cresc">\\cresc\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\decr">\\decr\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\dim">\\dim\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\dorian">\\dorian\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\dotsDown">\\dotsDown\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\dotsNeutral">\\dotsNeutral\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\dotsUp">\\dotsUp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\down">\\down\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\downbow">\\downbow\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\downmordent">\\downmordent\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\downprall">\\downprall\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\drumPitchNames">\\drumPitchNames\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\dutchPitchnames">\\dutchPitchnames\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\dynamicDown">\\dynamicDown\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\dynamicNeutral">\\dynamicNeutral\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\dynamicUp">\\dynamicUp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\emptyText">\\emptyText\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\endcr">\\endcr\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\endcresc">\\endcresc\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\enddecr">\\enddecr\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\enddim">\\enddim\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\endincipit">\\endincipit\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\escapedBiggerSymbol">\\escapedBiggerSymbol\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\escapedExclamationSymbol">\\escapedExclamationSymbol\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\escapedParenthesisCloseSymbol">\\escapedParenthesisCloseSymbol\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\escapedParenthesisOpenSymbol">\\escapedParenthesisOpenSymbol\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\escapedSmallerSymbol">\\escapedSmallerSymbol\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\espressivo">\\espressivo\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\evenHeaderMarkup">\\evenHeaderMarkup\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\f">\\f\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\fatText">\\fatText\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\fermata">\\fermata\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\fermataMarkup">\\fermataMarkup\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\ff">\\ff\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\fff">\\fff\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\ffff">\\ffff\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\first-page-number">\\first-page-number\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\flageolet">\\flageolet\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\fp">\\fp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\frenchChords">\\frenchChords\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\fullJazzExceptions">\\fullJazzExceptions\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\fz">\\fz\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\germanChords">\\germanChords\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\glissando">\\glissando\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\harmonic">\\harmonic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\hideNotes">\\hideNotes\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\hideStaffSwitch">\\hideStaffSwitch\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\ignatzekExceptionMusic">\\ignatzekExceptionMusic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\ignatzekExceptions">\\ignatzekExceptions\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\improvisationOff">\\improvisationOff\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\improvisationOn">\\improvisationOn\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\in">\\in\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\input-encoding">\\input-encoding\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\instrument-definitions">\\instrument-definitions\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\ionian">\\ionian\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\italianChords">\\italianChords\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\laissezVibrer">\\laissezVibrer\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\left">\\left\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\lheel">\\lheel\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\lineprall">\\lineprall\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\locrian">\\locrian\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\longa">\\longa\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\longfermata">\\longfermata\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\ltoe">\\ltoe\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\lydian">\\lydian\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\major">\\major\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\marcato">\\marcato\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\maxima">\\maxima\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\melisma">\\melisma\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\melismaEnd">\\melismaEnd\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\mf">\\mf\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\midiDrumPitches">\\midiDrumPitches\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\minor">\\minor\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\mixolydian">\\mixolydian\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\mm">\\mm\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\mordent">\\mordent\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\mp">\\mp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\newSpacingSection">\\newSpacingSection\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\noBeam">\\noBeam\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\noBreak">\\noBreak\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\noPageBreak">\\noPageBreak\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\noPageTurn">\\noPageTurn\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\normalsize">\\normalsize\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\oddFooterMarkup">\\oddFooterMarkup\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\oddHeaderMarkup">\\oddHeaderMarkup\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\oneVoice">\\oneVoice\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\open">\\open\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\output-scale">\\output-scale\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\p">\\p\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\page-top-space">\\page-top-space\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\pageBreak">\\pageBreak\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\pageTurn">\\pageTurn\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\parenthesisCloseSymbol">\\parenthesisCloseSymbol\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\parenthesisOpenSymbol">\\parenthesisOpenSymbol\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\partialJazzExceptions">\\partialJazzExceptions\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\partialJazzMusic">\\partialJazzMusic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\phrasingSlurDown">\\phrasingSlurDown\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\phrasingSlurNeutral">\\phrasingSlurNeutral\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\phrasingSlurUp">\\phrasingSlurUp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\phrygian">\\phrygian\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\pipeSymbol">\\pipeSymbol\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\pitchnames">\\pitchnames\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\portato">\\portato\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\pp">\\pp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\ppp">\\ppp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\pppp">\\pppp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\ppppp">\\ppppp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\prall">\\prall\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\pralldown">\\pralldown\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\prallmordent">\\prallmordent\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\prallprall">\\prallprall\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\prallup">\\prallup\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\print-first-page-number">\\print-first-page-number\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\print-page-number">\\print-page-number\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\pt">\\pt\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\ragged-bottom">\\ragged-bottom\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\ragged-last-bottom">\\ragged-last-bottom\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\repeatTie">\\repeatTie\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\reverseturn">\\reverseturn\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\rfz">\\rfz\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\rheel">\\rheel\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\right">\\right\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\rtoe">\\rtoe\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\sacredHarpHeads">\\sacredHarpHeads\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\scoreTitleMarkup">\\scoreTitleMarkup\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\segno">\\segno\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\semiGermanChords">\\semiGermanChords\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\setDefaultDurationToQuarter">\\setDefaultDurationToQuarter\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\setEasyHeads">\\setEasyHeads\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\setHairpinCresc">\\setHairpinCresc\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\setHairpinDecresc">\\setHairpinDecresc\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\setHairpinDim">\\setHairpinDim\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\setTextCresc">\\setTextCresc\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\setTextDecresc">\\setTextDecresc\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\setTextDim">\\setTextDim\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\sf">\\sf\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\sff">\\sff\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\sfp">\\sfp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\sfz">\\sfz\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\shiftOff">\\shiftOff\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\shiftOn">\\shiftOn\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\shiftOnn">\\shiftOnn\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\shiftOnnn">\\shiftOnnn\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\shortfermata">\\shortfermata\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\showStaffSwitch">\\showStaffSwitch\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\signumcongruentiae">\\signumcongruentiae\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\slashSeparator">\\slashSeparator\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\slurDashed">\\slurDashed\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\slurDotted">\\slurDotted\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\slurDown">\\slurDown\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\slurNeutral">\\slurNeutral\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\slurSolid">\\slurSolid\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\slurUp">\\slurUp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\small">\\small\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\smaller">\\smaller\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\sostenutoDown">\\sostenutoDown\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\sostenutoUp">\\sostenutoUp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\sp">\\sp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\spp">\\spp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\staccatissimo">\\staccatissimo\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\staccato">\\staccato\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\start">\\start\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\startAcciaccaturaMusic">\\startAcciaccaturaMusic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\startAppoggiaturaMusic">\\startAppoggiaturaMusic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\startGraceMusic">\\startGraceMusic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\startGroup">\\startGroup\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\startStaff">\\startStaff\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\startTextSpan">\\startTextSpan\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\startTrillSpan">\\startTrillSpan\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\stemDown">\\stemDown\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\stemNeutral">\\stemNeutral\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\stemUp">\\stemUp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\stop">\\stop\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\stopAcciaccaturaMusic">\\stopAcciaccaturaMusic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\stopAppoggiaturaMusic">\\stopAppoggiaturaMusic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\stopGraceMusic">\\stopGraceMusic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\stopGroup">\\stopGroup\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\stopStaff">\\stopStaff\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\stopTextSpan">\\stopTextSpan\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\stopTrillSpan">\\stopTrillSpan\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\stopped">\\stopped\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\sustainDown">\\sustainDown\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\sustainUp">\\sustainUp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\tagline">\\tagline\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\tenuto">\\tenuto\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\textSpannerDown">\\textSpannerDown\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\textSpannerNeutral">\\textSpannerNeutral\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\textSpannerUp">\\textSpannerUp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\thumb">\\thumb\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\tieDashed">\\tieDashed\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\tieDotted">\\tieDotted\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\tieDown">\\tieDown\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\tieNeutral">\\tieNeutral\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\tieSolid">\\tieSolid\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\tieUp">\\tieUp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\tildeSymbol">\\tildeSymbol\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\tiny">\\tiny\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\treCorde">\\treCorde\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\trill">\\trill\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\tupletDown">\\tupletDown\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\tupletNeutral">\\tupletNeutral\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\tupletUp">\\tupletUp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\turn">\\turn\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\unHideNotes">\\unHideNotes\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\unaCorda">\\unaCorda\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\unit">\\unit\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\up">\\up\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\upbow">\\upbow\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\upmordent">\\upmordent\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\upprall">\\upprall\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\varcoda">\\varcoda\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\verylongfermata">\\verylongfermata\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\voiceFour">\\voiceFour\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\voiceOne">\\voiceOne\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\voiceThree">\\voiceThree\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\voiceTwo">\\voiceTwo\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\whiteTriangleMarkup">\\whiteTriangleMarkup\b</SEQ_REGEXP>\r
+<!-- music functions -->\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\acciaccatura">\\acciaccatura\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\addInstrumentDefinition">\\addInstrumentDefinition\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\addquote">\\addquote\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\afterGrace">\\afterGrace\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\applyContext">\\applyContext\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\applyMusic">\\applyMusic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\applyOutput">\\applyOutput\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\appoggiatura">\\appoggiatura\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\assertBeamQuant">\\assertBeamQuant\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\assertBeamSlope">\\assertBeamSlope\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\autochange">\\autochange\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\balloonGrobText">\\balloonGrobText\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\balloonText">\\balloonText\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\bar">\\bar\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\barNumberCheck">\\barNumberCheck\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\bendAfter">\\bendAfter\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\breathe">\\breathe\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\clef">\\clef\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\compressMusic">\\compressMusic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\cueDuring">\\cueDuring\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\displayLilyMusic">\\displayLilyMusic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\displayMusic">\\displayMusic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\featherDurations">\\featherDurations\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\grace">\\grace\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\includePageLayoutFile">\\includePageLayoutFile\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\instrumentSwitch">\\instrumentSwitch\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\keepWithTag">\\keepWithTag\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\killCues">\\killCues\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\makeClusters">\\makeClusters\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\musicMap">\\musicMap\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\octave">\\octave\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\oldaddlyrics">\\oldaddlyrics\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\overrideProperty">\\overrideProperty\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\parallelMusic">\\parallelMusic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\parenthesize">\\parenthesize\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\partcombine">\\partcombine\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\pitchedTrill">\\pitchedTrill\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\quoteDuring">\\quoteDuring\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\removeWithTag">\\removeWithTag\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\resetRelativeOctave">\\resetRelativeOctave\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\rightHandFinger">\\rightHandFinger\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\scoreTweak">\\scoreTweak\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\shiftDurations">\\shiftDurations\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\spacingTweaks">\\spacingTweaks\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\tag">\\tag\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\transposedCueDuring">\\transposedCueDuring\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\transposition">\\transposition\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\tweak">\\tweak\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\unfoldRepeats">\\unfoldRepeats\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="\withMusicProperty">\\withMusicProperty\b</SEQ_REGEXP>\r
+<!-- markup commands -->\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\arrow-head">\\arrow-head\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\beam">\\beam\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\bigger">\\bigger\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\bold">\\bold\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\box">\\box\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\bracket">\\bracket\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\bracketed-y-column">\\bracketed-y-column\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\caps">\\caps\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\center-align">\\center-align\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\char">\\char\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\circle">\\circle\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\column">\\column\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\combine">\\combine\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\dir-column">\\dir-column\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\doubleflat">\\doubleflat\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\doublesharp">\\doublesharp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\draw-circle">\\draw-circle\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\dynamic">\\dynamic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\epsfile">\\epsfile\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\fill-line">\\fill-line\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\filled-box">\\filled-box\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\finger">\\finger\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\flat">\\flat\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\fontCaps">\\fontCaps\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\fontsize">\\fontsize\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\fraction">\\fraction\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\fret-diagram">\\fret-diagram\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\fret-diagram-terse">\\fret-diagram-terse\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\fret-diagram-verbose">\\fret-diagram-verbose\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\fromproperty">\\fromproperty\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\general-align">\\general-align\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\halign">\\halign\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\hbracket">\\hbracket\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\hcenter">\\hcenter\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\hcenter-in">\\hcenter-in\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\hspace">\\hspace\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\huge">\\huge\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\italic">\\italic\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\justify">\\justify\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\justify-field">\\justify-field\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\justify-string">\\justify-string\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\large">\\large\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\left-align">\\left-align\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\line">\\line\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\lookup">\\lookup\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\lower">\\lower\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\magnify">\\magnify\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\markalphabet">\\markalphabet\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\markletter">\\markletter\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\medium">\\medium\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\musicglyph">\\musicglyph\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\natural">\\natural\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\normal-size-sub">\\normal-size-sub\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\normal-size-super">\\normal-size-super\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\normal-text">\\normal-text\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\normalsize">\\normalsize\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\note">\\note\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\note-by-number">\\note-by-number\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\null">\\null\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\number">\\number\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\on-the-fly">\\on-the-fly\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\override">\\override\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\pad-around">\\pad-around\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\pad-markup">\\pad-markup\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\pad-to-box">\\pad-to-box\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\pad-x">\\pad-x\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\postscript">\\postscript\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\put-adjacent">\\put-adjacent\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\raise">\\raise\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\right-align">\\right-align\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\roman">\\roman\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\rotate">\\rotate\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\sans">\\sans\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\score">\\score\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\semiflat">\\semiflat\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\semisharp">\\semisharp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\sesquiflat">\\sesquiflat\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\sesquisharp">\\sesquisharp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\sharp">\\sharp\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\simple">\\simple\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\slashed-digit">\\slashed-digit\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\small">\\small\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\smallCaps">\\smallCaps\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\smaller">\\smaller\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\stencil">\\stencil\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\strut">\\strut\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\sub">\\sub\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\super">\\super\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\teeny">\\teeny\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\text">\\text\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\tied-lyric">\\tied-lyric\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\tiny">\\tiny\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\translate">\\translate\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\translate-scaled">\\translate-scaled\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\transparent">\\transparent\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\triangle">\\triangle\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\typewriter">\\typewriter\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\upright">\\upright\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\vcenter">\\vcenter\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\verbatim-file">\\verbatim-file\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\whiteout">\\whiteout\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\with-color">\\with-color\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\with-dimensions">\\with-dimensions\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\with-url">\\with-url\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\wordwrap">\\wordwrap\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\wordwrap-field">\\wordwrap-field\b</SEQ_REGEXP>\r
+       <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="\wordwrap-string">\\wordwrap-string\b</SEQ_REGEXP>\r
+<MARK_FOLLOWING TYPE="FUNCTION">\</MARK_FOLLOWING>\r
+<KEYWORDS>\r
+       <KEYWORD2>staff-spacing-interface</KEYWORD2>\r
+       <KEYWORD2>text-script-interface</KEYWORD2>\r
+       <KEYWORD2>Ottava_spanner_engraver</KEYWORD2>\r
+       <KEYWORD2>Figured_bass_engraver</KEYWORD2>\r
+       <KEYWORD2>Lyrics</KEYWORD2>\r
+       <KEYWORD2>Separating_line_group_engraver</KEYWORD2>\r
+       <KEYWORD2>cluster-interface</KEYWORD2>\r
+       <KEYWORD2>Glissando_engraver</KEYWORD2>\r
+       <KEYWORD2>key-signature-interface</KEYWORD2>\r
+       <KEYWORD2>clef-interface</KEYWORD2>\r
+       <KEYWORD2>VaticanaVoice</KEYWORD2>\r
+       <KEYWORD2>Rest_collision_engraver</KEYWORD2>\r
+       <KEYWORD2>Grace_engraver</KEYWORD2>\r
+       <KEYWORD2>grid-point-interface</KEYWORD2>\r
+       <KEYWORD2>Measure_grouping_engraver</KEYWORD2>\r
+       <KEYWORD2>Laissez_vibrer_engraver</KEYWORD2>\r
+       <KEYWORD2>Script_row_engraver</KEYWORD2>\r
+       <KEYWORD2>bass-figure-alignment-interface</KEYWORD2>\r
+       <KEYWORD2>Note_head_line_engraver</KEYWORD2>\r
+       <KEYWORD2>ottava-bracket-interface</KEYWORD2>\r
+       <KEYWORD2>rhythmic-head-interface</KEYWORD2>\r
+       <KEYWORD2>Accidental_engraver</KEYWORD2>\r
+       <KEYWORD2>Mark_engraver</KEYWORD2>\r
+       <KEYWORD2>hara-kiri-group-interface</KEYWORD2>\r
+       <KEYWORD2>Instrument_name_engraver</KEYWORD2>\r
+       <KEYWORD2>Vaticana_ligature_engraver</KEYWORD2>\r
+       <KEYWORD2>Page_turn_engraver</KEYWORD2>\r
+       <KEYWORD2>staff-symbol-interface</KEYWORD2>\r
+       <KEYWORD2>Beam_performer</KEYWORD2>\r
+       <KEYWORD2>accidental-suggestion-interface</KEYWORD2>\r
+       <KEYWORD2>Key_engraver</KEYWORD2>\r
+       <KEYWORD2>GrandStaff</KEYWORD2>\r
+       <KEYWORD2>multi-measure-interface</KEYWORD2>\r
+       <KEYWORD2>rest-collision-interface</KEYWORD2>\r
+       <KEYWORD2>Dot_column_engraver</KEYWORD2>\r
+       <KEYWORD2>MensuralVoice</KEYWORD2>\r
+       <KEYWORD2>TabStaff</KEYWORD2>\r
+       <KEYWORD2>Pitched_trill_engraver</KEYWORD2>\r
+       <KEYWORD2>line-spanner-interface</KEYWORD2>\r
+       <KEYWORD2>Time_signature_performer</KEYWORD2>\r
+       <KEYWORD2>lyric-interface</KEYWORD2>\r
+       <KEYWORD2>StaffGroup</KEYWORD2>\r
+       <KEYWORD2>text-interface</KEYWORD2>\r
+       <KEYWORD2>slur-interface</KEYWORD2>\r
+       <KEYWORD2>Drum_note_performer</KEYWORD2>\r
+       <KEYWORD2>TabVoice</KEYWORD2>\r
+       <KEYWORD2>measure-grouping-interface</KEYWORD2>\r
+       <KEYWORD2>stanza-number-interface</KEYWORD2>\r
+       <KEYWORD2>self-alignment-interface</KEYWORD2>\r
+       <KEYWORD2>Span_arpeggio_engraver</KEYWORD2>\r
+       <KEYWORD2>system-interface</KEYWORD2>\r
+       <KEYWORD2>Engraver</KEYWORD2>\r
+       <KEYWORD2>RhythmicStaff</KEYWORD2>\r
+       <KEYWORD2>font-interface</KEYWORD2>\r
+       <KEYWORD2>fret-diagram-interface</KEYWORD2>\r
+       <KEYWORD2>Grace_spacing_engraver</KEYWORD2>\r
+       <KEYWORD2>Bar_engraver</KEYWORD2>\r
+       <KEYWORD2>Dynamic_engraver</KEYWORD2>\r
+       <KEYWORD2>Grob_pq_engraver</KEYWORD2>\r
+       <KEYWORD2>Default_bar_line_engraver</KEYWORD2>\r
+       <KEYWORD2>Swallow_performer</KEYWORD2>\r
+       <KEYWORD2>script-column-interface</KEYWORD2>\r
+       <KEYWORD2>Piano_pedal_performer</KEYWORD2>\r
+       <KEYWORD2>metronome-mark-interface</KEYWORD2>\r
+       <KEYWORD2>melody-spanner-interface</KEYWORD2>\r
+       <KEYWORD2>FretBoards</KEYWORD2>\r
+       <KEYWORD2>spacing-spanner-interface</KEYWORD2>\r
+       <KEYWORD2>Control_track_performer</KEYWORD2>\r
+       <KEYWORD2>Break_align_engraver</KEYWORD2>\r
+       <KEYWORD2>paper-column-interface</KEYWORD2>\r
+       <KEYWORD2>PianoStaff</KEYWORD2>\r
+       <KEYWORD2>Breathing_sign_engraver</KEYWORD2>\r
+       <KEYWORD2>accidental-placement-interface</KEYWORD2>\r
+       <KEYWORD2>Tuplet_engraver</KEYWORD2>\r
+       <KEYWORD2>stroke-finger-interface</KEYWORD2>\r
+       <KEYWORD2>side-position-interface</KEYWORD2>\r
+       <KEYWORD2>note-name-interface</KEYWORD2>\r
+       <KEYWORD2>bar-line-interface</KEYWORD2>\r
+       <KEYWORD2>lyric-extender-interface</KEYWORD2>\r
+       <KEYWORD2>Staff</KEYWORD2>\r
+       <KEYWORD2>GregorianTranscriptionStaff</KEYWORD2>\r
+       <KEYWORD2>Rest_swallow_translator</KEYWORD2>\r
+       <KEYWORD2>dynamic-text-spanner-interface</KEYWORD2>\r
+       <KEYWORD2>arpeggio-interface</KEYWORD2>\r
+       <KEYWORD2>Cluster_spanner_engraver</KEYWORD2>\r
+       <KEYWORD2>Collision_engraver</KEYWORD2>\r
+       <KEYWORD2>accidental-interface</KEYWORD2>\r
+       <KEYWORD2>rest-interface</KEYWORD2>\r
+       <KEYWORD2>Tab_note_heads_engraver</KEYWORD2>\r
+       <KEYWORD2>dots-interface</KEYWORD2>\r
+       <KEYWORD2>staff-symbol-referencer-interface</KEYWORD2>\r
+       <KEYWORD2>ambitus-interface</KEYWORD2>\r
+       <KEYWORD2>bass-figure-interface</KEYWORD2>\r
+       <KEYWORD2>vaticana-ligature-interface</KEYWORD2>\r
+       <KEYWORD2>ledgered-interface</KEYWORD2>\r
+       <KEYWORD2>item-interface</KEYWORD2>\r
+       <KEYWORD2>Tie_performer</KEYWORD2>\r
+       <KEYWORD2>volta-bracket-interface</KEYWORD2>\r
+       <KEYWORD2>vertically-spaceable-interface</KEYWORD2>\r
+       <KEYWORD2>ledger-line-interface</KEYWORD2>\r
+       <KEYWORD2>Chord_tremolo_engraver</KEYWORD2>\r
+       <KEYWORD2>note-column-interface</KEYWORD2>\r
+       <KEYWORD2>DrumVoice</KEYWORD2>\r
+       <KEYWORD2>axis-group-interface</KEYWORD2>\r
+       <KEYWORD2>Ledger_line_engraver</KEYWORD2>\r
+       <KEYWORD2>Slash_repeat_engraver</KEYWORD2>\r
+       <KEYWORD2>ligature-bracket-interface</KEYWORD2>\r
+       <KEYWORD2>Pitch_squash_engraver</KEYWORD2>\r
+       <KEYWORD2>Instrument_switch_engraver</KEYWORD2>\r
+       <KEYWORD2>Voice</KEYWORD2>\r
+       <KEYWORD2>Script_column_engraver</KEYWORD2>\r
+       <KEYWORD2>Volta_engraver</KEYWORD2>\r
+       <KEYWORD2>Stanza_number_align_engraver</KEYWORD2>\r
+       <KEYWORD2>Vertical_align_engraver</KEYWORD2>\r
+       <KEYWORD2>span-bar-interface</KEYWORD2>\r
+       <KEYWORD2>Staff_collecting_engraver</KEYWORD2>\r
+       <KEYWORD2>Ligature_bracket_engraver</KEYWORD2>\r
+       <KEYWORD2>Time_signature_engraver</KEYWORD2>\r
+       <KEYWORD2>Beam_engraver</KEYWORD2>\r
+       <KEYWORD2>Note_name_engraver</KEYWORD2>\r
+       <KEYWORD2>Note_heads_engraver</KEYWORD2>\r
+       <KEYWORD2>Forbid_line_break_engraver</KEYWORD2>\r
+       <KEYWORD2>spacing-options-interface</KEYWORD2>\r
+       <KEYWORD2>spacing-interface</KEYWORD2>\r
+       <KEYWORD2>Span_dynamic_performer</KEYWORD2>\r
+       <KEYWORD2>piano-pedal-script-interface</KEYWORD2>\r
+       <KEYWORD2>MensuralStaff</KEYWORD2>\r
+       <KEYWORD2>Global</KEYWORD2>\r
+       <KEYWORD2>trill-pitch-accidental-interface</KEYWORD2>\r
+       <KEYWORD2>grob-interface</KEYWORD2>\r
+       <KEYWORD2>Horizontal_bracket_engraver</KEYWORD2>\r
+       <KEYWORD2>Grid_line_span_engraver</KEYWORD2>\r
+       <KEYWORD2>NoteNames</KEYWORD2>\r
+       <KEYWORD2>piano-pedal-interface</KEYWORD2>\r
+       <KEYWORD2>Axis_group_engraver</KEYWORD2>\r
+       <KEYWORD2>Staff_symbol_engraver</KEYWORD2>\r
+       <KEYWORD2>stem-interface</KEYWORD2>\r
+       <KEYWORD2>Slur_engraver</KEYWORD2>\r
+       <KEYWORD2>pitched-trill-interface</KEYWORD2>\r
+       <KEYWORD2>tie-column-interface</KEYWORD2>\r
+       <KEYWORD2>stem-tremolo-interface</KEYWORD2>\r
+       <KEYWORD2>Grid_point_engraver</KEYWORD2>\r
+       <KEYWORD2>System_start_delimiter_engraver</KEYWORD2>\r
+       <KEYWORD2>Completion_heads_engraver</KEYWORD2>\r
+       <KEYWORD2>Drum_notes_engraver</KEYWORD2>\r
+       <KEYWORD2>Swallow_engraver</KEYWORD2>\r
+       <KEYWORD2>Slur_performer</KEYWORD2>\r
+       <KEYWORD2>lyric-hyphen-interface</KEYWORD2>\r
+       <KEYWORD2>Clef_engraver</KEYWORD2>\r
+       <KEYWORD2>dynamic-interface</KEYWORD2>\r
+       <KEYWORD2>Score</KEYWORD2>\r
+       <KEYWORD2>Output_property_engraver</KEYWORD2>\r
+       <KEYWORD2>Repeat_tie_engraver</KEYWORD2>\r
+       <KEYWORD2>Rest_engraver</KEYWORD2>\r
+       <KEYWORD2>break-aligned-interface</KEYWORD2>\r
+       <KEYWORD2>String_number_engraver</KEYWORD2>\r
+       <KEYWORD2>only-prebreak-interface</KEYWORD2>\r
+       <KEYWORD2>Lyric_engraver</KEYWORD2>\r
+       <KEYWORD2>Tempo_performer</KEYWORD2>\r
+       <KEYWORD2>Parenthesis_engraver</KEYWORD2>\r
+       <KEYWORD2>Repeat_acknowledge_engraver</KEYWORD2>\r
+       <KEYWORD2>mensural-ligature-interface</KEYWORD2>\r
+       <KEYWORD2>align-interface</KEYWORD2>\r
+       <KEYWORD2>Stanza_number_engraver</KEYWORD2>\r
+       <KEYWORD2>system-start-delimiter-interface</KEYWORD2>\r
+       <KEYWORD2>lyric-syllable-interface</KEYWORD2>\r
+       <KEYWORD2>bend-after-interface</KEYWORD2>\r
+       <KEYWORD2>dynamic-line-spanner-interface</KEYWORD2>\r
+       <KEYWORD2>Staff_performer</KEYWORD2>\r
+       <KEYWORD2>Bar_number_engraver</KEYWORD2>\r
+       <KEYWORD2>Fretboard_engraver</KEYWORD2>\r
+       <KEYWORD2>tablature-interface</KEYWORD2>\r
+       <KEYWORD2>Fingering_engraver</KEYWORD2>\r
+       <KEYWORD2>chord-name-interface</KEYWORD2>\r
+       <KEYWORD2>Note_swallow_translator</KEYWORD2>\r
+       <KEYWORD2>Chord_name_engraver</KEYWORD2>\r
+       <KEYWORD2>note-head-interface</KEYWORD2>\r
+       <KEYWORD2>breathing-sign-interface</KEYWORD2>\r
+       <KEYWORD2>Extender_engraver</KEYWORD2>\r
+       <KEYWORD2>Ambitus_engraver</KEYWORD2>\r
+       <KEYWORD2>DrumStaff</KEYWORD2>\r
+       <KEYWORD2>dot-column-interface</KEYWORD2>\r
+       <KEYWORD2>Lyric_performer</KEYWORD2>\r
+       <KEYWORD2>enclosing-bracket-interface</KEYWORD2>\r
+       <KEYWORD2>Trill_spanner_engraver</KEYWORD2>\r
+       <KEYWORD2>Key_performer</KEYWORD2>\r
+       <KEYWORD2>Vertically_spaced_contexts_engraver</KEYWORD2>\r
+       <KEYWORD2>hairpin-interface</KEYWORD2>\r
+       <KEYWORD2>Hyphen_engraver</KEYWORD2>\r
+       <KEYWORD2>Dots_engraver</KEYWORD2>\r
+       <KEYWORD2>multi-measure-rest-interface</KEYWORD2>\r
+       <KEYWORD2>break-alignment-align-interface</KEYWORD2>\r
+       <KEYWORD2>Multi_measure_rest_engraver</KEYWORD2>\r
+       <KEYWORD2>InnerStaffGroup</KEYWORD2>\r
+       <KEYWORD2>text-spanner-interface</KEYWORD2>\r
+       <KEYWORD2>Grace_beam_engraver</KEYWORD2>\r
+       <KEYWORD2>separation-item-interface</KEYWORD2>\r
+       <KEYWORD2>Balloon_engraver</KEYWORD2>\r
+       <KEYWORD2>Translator</KEYWORD2>\r
+       <KEYWORD2>separation-spanner-interface</KEYWORD2>\r
+       <KEYWORD2>Tweak_engraver</KEYWORD2>\r
+       <KEYWORD2>Devnull</KEYWORD2>\r
+       <KEYWORD2>Bend_after_engraver</KEYWORD2>\r
+       <KEYWORD2>Spacing_engraver</KEYWORD2>\r
+       <KEYWORD2>Piano_pedal_align_engraver</KEYWORD2>\r
+       <KEYWORD2>system-start-text-interface</KEYWORD2>\r
+       <KEYWORD2>parentheses-interface</KEYWORD2>\r
+       <KEYWORD2>Melisma_translator</KEYWORD2>\r
+       <KEYWORD2>ChoirStaff</KEYWORD2>\r
+       <KEYWORD2>Span_bar_engraver</KEYWORD2>\r
+       <KEYWORD2>Text_engraver</KEYWORD2>\r
+       <KEYWORD2>GregorianTranscriptionVoice</KEYWORD2>\r
+       <KEYWORD2>Timing_translator</KEYWORD2>\r
+       <KEYWORD2>script-interface</KEYWORD2>\r
+       <KEYWORD2>semi-tie-interface</KEYWORD2>\r
+       <KEYWORD2>Percent_repeat_engraver</KEYWORD2>\r
+       <KEYWORD2>Tab_staff_symbol_engraver</KEYWORD2>\r
+       <KEYWORD2>line-interface</KEYWORD2>\r
+       <KEYWORD2>rhythmic-grob-interface</KEYWORD2>\r
+       <KEYWORD2>Dynamic_performer</KEYWORD2>\r
+       <KEYWORD2>note-spacing-interface</KEYWORD2>\r
+       <KEYWORD2>spanner-interface</KEYWORD2>\r
+       <KEYWORD2>break-alignment-interface</KEYWORD2>\r
+       <KEYWORD2>tuplet-number-interface</KEYWORD2>\r
+       <KEYWORD2>Rhythmic_column_engraver</KEYWORD2>\r
+       <KEYWORD2>cluster-beacon-interface</KEYWORD2>\r
+       <KEYWORD2>horizontal-bracket-interface</KEYWORD2>\r
+       <KEYWORD2>Mensural_ligature_engraver</KEYWORD2>\r
+       <KEYWORD2>ChordNames</KEYWORD2>\r
+       <KEYWORD2>gregorian-ligature-interface</KEYWORD2>\r
+       <KEYWORD2>Melody_engraver</KEYWORD2>\r
+       <KEYWORD2>ligature-interface</KEYWORD2>\r
+       <KEYWORD2>Paper_column_engraver</KEYWORD2>\r
+       <KEYWORD2>FiguredBass</KEYWORD2>\r
+       <KEYWORD2>grace-spacing-interface</KEYWORD2>\r
+       <KEYWORD2>tie-interface</KEYWORD2>\r
+       <KEYWORD2>New_fingering_engraver</KEYWORD2>\r
+       <KEYWORD2>Script_engraver</KEYWORD2>\r
+       <KEYWORD2>Metronome_mark_engraver</KEYWORD2>\r
+       <KEYWORD2>string-number-interface</KEYWORD2>\r
+       <KEYWORD2>Hara_kiri_engraver</KEYWORD2>\r
+       <KEYWORD2>grid-line-interface</KEYWORD2>\r
+       <KEYWORD2>Skip_event_swallow_translator</KEYWORD2>\r
+       <KEYWORD2>Auto_beam_engraver</KEYWORD2>\r
+       <KEYWORD2>spaceable-grob-interface</KEYWORD2>\r
+       <KEYWORD2>Font_size_engraver</KEYWORD2>\r
+       <KEYWORD2>figured-bass-continuation-interface</KEYWORD2>\r
+       <KEYWORD2>semi-tie-column-interface</KEYWORD2>\r
+       <KEYWORD2>CueVoice</KEYWORD2>\r
+       <KEYWORD2>Phrasing_slur_engraver</KEYWORD2>\r
+       <KEYWORD2>InnerChoirStaff</KEYWORD2>\r
+       <KEYWORD2>Arpeggio_engraver</KEYWORD2>\r
+       <KEYWORD2>mark-interface</KEYWORD2>\r
+       <KEYWORD2>VaticanaStaff</KEYWORD2>\r
+       <KEYWORD2>piano-pedal-bracket-interface</KEYWORD2>\r
+       <KEYWORD2>beam-interface</KEYWORD2>\r
+       <KEYWORD2>Note_performer</KEYWORD2>\r
+       <KEYWORD2>custos-interface</KEYWORD2>\r
+       <KEYWORD2>percent-repeat-interface</KEYWORD2>\r
+       <KEYWORD2>time-signature-interface</KEYWORD2>\r
+       <KEYWORD2>Custos_engraver</KEYWORD2>\r
+       <KEYWORD2>Part_combine_engraver</KEYWORD2>\r
+       <KEYWORD2>Piano_pedal_engraver</KEYWORD2>\r
+       <KEYWORD2>tuplet-bracket-interface</KEYWORD2>\r
+       <KEYWORD2>Stem_engraver</KEYWORD2>\r
+       <KEYWORD2>finger-interface</KEYWORD2>\r
+       <KEYWORD2>note-collision-interface</KEYWORD2>\r
+       <KEYWORD2>Text_spanner_engraver</KEYWORD2>\r
+       <KEYWORD2>text-balloon-interface</KEYWORD2>\r
+       <KEYWORD2>Tie_engraver</KEYWORD2>\r
+       <KEYWORD2>Figured_bass_position_engraver</KEYWORD2>\r
+</KEYWORDS>\r
+<!-- Generated part ended -->\r
+\r
+</RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/lisp.xml b/extra/xmode/modes/lisp.xml
new file mode 100644 (file)
index 0000000..86983d7
--- /dev/null
@@ -0,0 +1,1038 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="#| " />\r
+               <PROPERTY NAME="commentEnd" VALUE=" |#" />\r
+               <PROPERTY NAME="lineComment" VALUE=";" />\r
+               <PROPERTY NAME="noWordSep" VALUE="_-+?:" />\r
+               <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />\r
+               <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />\r
+               <PROPERTY NAME="multipleBracketIndent" VALUE="true" />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="FALSE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               ESCAPE="\"\r
+               NO_WORD_SEP="_-+?:"\r
+               DIGIT_RE="-?\d+([./]\d+)?"\r
+       >\r
+\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>#|</BEGIN>\r
+                       <END>|#</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="NULL">'(</SEQ>\r
+\r
+               <MARK_FOLLOWING TYPE="LITERAL1">'</MARK_FOLLOWING>\r
+\r
+               <MARK_FOLLOWING AT_WORD_START="TRUE" TYPE="KEYWORD4">&amp;</MARK_FOLLOWING>\r
+\r
+               <SEQ TYPE="OPERATOR">`</SEQ>\r
+               <SEQ TYPE="OPERATOR">@</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+\r
+               <!--\r
+               Based on convention discussed here:\r
+                       http://www.gigamonkeys.com/book/syntax-and-semantics.html\r
+               -->\r
+               <EOL_SPAN TYPE="COMMENT4">;;;;</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT3">;;;</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT2">;;</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1">;</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!--\r
+                       keywords from j\r
+                               (http://armedbear-j.sourceforge.net/)\r
+                        Duplicates removed; KEYWORD1 and KEYWORD2 \r
+                          better aligned with Emacs Lisp mode\r
+                        Missing Common Lisp symbols added; now 970 symbols total\r
+                        2004-01-22  dsh\r
+               -->\r
+               <KEYWORDS>\r
+                       <KEYWORD1>defclass</KEYWORD1>\r
+                       <KEYWORD1>defconstant</KEYWORD1>\r
+                       <KEYWORD1>defgeneric</KEYWORD1>\r
+                       <KEYWORD1>define-compiler-macro</KEYWORD1>\r
+                       <KEYWORD1>define-condition</KEYWORD1>\r
+                       <KEYWORD1>define-method-combination</KEYWORD1>\r
+                       <KEYWORD1>define-modify-macro</KEYWORD1>\r
+                       <KEYWORD1>define-setf-expander</KEYWORD1>\r
+                       <KEYWORD1>define-symbol-macro</KEYWORD1>\r
+                       <KEYWORD1>defmacro</KEYWORD1>\r
+                       <KEYWORD1>defmethod</KEYWORD1>\r
+                       <KEYWORD1>defpackage</KEYWORD1>\r
+                       <KEYWORD1>defparameter</KEYWORD1>\r
+                       <KEYWORD1>defsetf</KEYWORD1>\r
+                       <KEYWORD1>defstruct</KEYWORD1>\r
+                       <KEYWORD1>deftype</KEYWORD1>\r
+                       <KEYWORD1>defun</KEYWORD1>\r
+                       <KEYWORD1>defvar</KEYWORD1>\r
+\r
+                       <KEYWORD2>abort</KEYWORD2>\r
+                       <KEYWORD2>assert</KEYWORD2>\r
+                       <KEYWORD2>block</KEYWORD2>\r
+                       <KEYWORD2>break</KEYWORD2>\r
+                       <KEYWORD2>case</KEYWORD2>\r
+                       <KEYWORD2>catch</KEYWORD2>\r
+                       <KEYWORD2>ccase</KEYWORD2>\r
+                       <KEYWORD2>cerror</KEYWORD2>\r
+                       <KEYWORD2>cond</KEYWORD2>\r
+                       <KEYWORD2>ctypecase</KEYWORD2>\r
+                       <KEYWORD2>declaim</KEYWORD2>\r
+                       <KEYWORD2>declare</KEYWORD2>\r
+                       <KEYWORD2>do</KEYWORD2>\r
+                       <KEYWORD2>do*</KEYWORD2>\r
+                       <KEYWORD2>do-all-symbols</KEYWORD2>\r
+                       <KEYWORD2>do-external-symbols</KEYWORD2>\r
+                       <KEYWORD2>do-symbols</KEYWORD2>\r
+                       <KEYWORD2>dolist</KEYWORD2>\r
+                       <KEYWORD2>dotimes</KEYWORD2>\r
+                       <KEYWORD2>ecase</KEYWORD2>\r
+                       <KEYWORD2>error</KEYWORD2>\r
+                       <KEYWORD2>etypecase</KEYWORD2>\r
+                       <KEYWORD2>eval-when</KEYWORD2>\r
+                       <KEYWORD2>flet</KEYWORD2>\r
+                       <KEYWORD2>handler-bind</KEYWORD2>\r
+                       <KEYWORD2>handler-case</KEYWORD2>\r
+                       <KEYWORD2>if</KEYWORD2>\r
+                       <KEYWORD2>ignore-errors</KEYWORD2>\r
+                       <KEYWORD2>in-package</KEYWORD2>\r
+                       <KEYWORD2>labels</KEYWORD2>\r
+                       <KEYWORD2>lambda</KEYWORD2>\r
+                       <KEYWORD2>let</KEYWORD2>\r
+                       <KEYWORD2>let*</KEYWORD2>\r
+                       <KEYWORD2>locally</KEYWORD2>\r
+                       <KEYWORD2>loop</KEYWORD2>\r
+                       <KEYWORD2>macrolet</KEYWORD2>\r
+                       <KEYWORD2>multiple-value-bind</KEYWORD2>\r
+                       <KEYWORD2>proclaim</KEYWORD2>\r
+                       <KEYWORD2>prog</KEYWORD2>\r
+                       <KEYWORD2>prog*</KEYWORD2>\r
+                       <KEYWORD2>prog1</KEYWORD2>\r
+                       <KEYWORD2>prog2</KEYWORD2>\r
+                       <KEYWORD2>progn</KEYWORD2>\r
+                       <KEYWORD2>progv</KEYWORD2>\r
+                       <KEYWORD2>provide</KEYWORD2>\r
+                       <KEYWORD2>require</KEYWORD2>\r
+                       <KEYWORD2>restart-bind</KEYWORD2>\r
+                       <KEYWORD2>restart-case</KEYWORD2>\r
+                       <KEYWORD2>restart-name</KEYWORD2>\r
+                       <KEYWORD2>return</KEYWORD2>\r
+                       <KEYWORD2>return-from</KEYWORD2>\r
+                       <KEYWORD2>signal</KEYWORD2>\r
+                       <KEYWORD2>symbol-macrolet</KEYWORD2>\r
+                       <KEYWORD2>tagbody</KEYWORD2>\r
+                       <KEYWORD2>the</KEYWORD2>\r
+                       <KEYWORD2>throw</KEYWORD2>\r
+                       <KEYWORD2>typecase</KEYWORD2>\r
+                       <KEYWORD2>unless</KEYWORD2>\r
+                       <KEYWORD2>unwind-protect</KEYWORD2>\r
+                       <KEYWORD2>when</KEYWORD2>\r
+                       <KEYWORD2>with-accessors</KEYWORD2>\r
+                       <KEYWORD2>with-compilation-unit</KEYWORD2>\r
+                       <KEYWORD2>with-condition-restarts</KEYWORD2>\r
+                       <KEYWORD2>with-hash-table-iterator</KEYWORD2>\r
+                       <KEYWORD2>with-input-from-string</KEYWORD2>\r
+                       <KEYWORD2>with-open-file</KEYWORD2>\r
+                       <KEYWORD2>with-open-stream</KEYWORD2>\r
+                       <KEYWORD2>with-output-to-string</KEYWORD2>\r
+                       <KEYWORD2>with-package-iterator</KEYWORD2>\r
+                       <KEYWORD2>with-simple-restart</KEYWORD2>\r
+                       <KEYWORD2>with-slots</KEYWORD2>\r
+                       <KEYWORD2>with-standard-io-syntax</KEYWORD2>\r
+\r
+                       <KEYWORD3>*</KEYWORD3>\r
+                       <KEYWORD3>**</KEYWORD3>\r
+                       <KEYWORD3>***</KEYWORD3>\r
+                       <KEYWORD3>*break-on-signals*</KEYWORD3>\r
+                       <KEYWORD3>*compile-file-pathname*</KEYWORD3>\r
+                       <KEYWORD3>*compile-file-truename*</KEYWORD3>\r
+                       <KEYWORD3>*compile-print*</KEYWORD3>\r
+                       <KEYWORD3>*compile-verbose*</KEYWORD3>\r
+                       <KEYWORD3>*debug-io*</KEYWORD3>\r
+                       <KEYWORD3>*debugger-hook*</KEYWORD3>\r
+                       <KEYWORD3>*default-pathname-defaults*</KEYWORD3>\r
+                       <KEYWORD3>*error-output*</KEYWORD3>\r
+                       <KEYWORD3>*features*</KEYWORD3>\r
+                       <KEYWORD3>*gensym-counter*</KEYWORD3>\r
+                       <KEYWORD3>*load-pathname*</KEYWORD3>\r
+                       <KEYWORD3>*load-print*</KEYWORD3>\r
+                       <KEYWORD3>*load-truename*</KEYWORD3>\r
+                       <KEYWORD3>*load-verbose*</KEYWORD3>\r
+                       <KEYWORD3>*macroexpand-hook*</KEYWORD3>\r
+                       <KEYWORD3>*modules*</KEYWORD3>\r
+                       <KEYWORD3>*package*</KEYWORD3>\r
+                       <KEYWORD3>*print-array*</KEYWORD3>\r
+                       <KEYWORD3>*print-base*</KEYWORD3>\r
+                       <KEYWORD3>*print-case*</KEYWORD3>\r
+                       <KEYWORD3>*print-circle*</KEYWORD3>\r
+                       <KEYWORD3>*print-escape*</KEYWORD3>\r
+                       <KEYWORD3>*print-gensym*</KEYWORD3>\r
+                       <KEYWORD3>*print-length*</KEYWORD3>\r
+                       <KEYWORD3>*print-level*</KEYWORD3>\r
+                       <KEYWORD3>*print-lines*</KEYWORD3>\r
+                       <KEYWORD3>*print-miser-width*</KEYWORD3>\r
+                       <KEYWORD3>*print-pprint-dispatch*</KEYWORD3>\r
+                       <KEYWORD3>*print-pretty*</KEYWORD3>\r
+                       <KEYWORD3>*print-radix*</KEYWORD3>\r
+                       <KEYWORD3>*print-readably*</KEYWORD3>\r
+                       <KEYWORD3>*print-right-margin*</KEYWORD3>\r
+                       <KEYWORD3>*query-io*</KEYWORD3>\r
+                       <KEYWORD3>*random-state*</KEYWORD3>\r
+                       <KEYWORD3>*read-base*</KEYWORD3>\r
+                       <KEYWORD3>*read-default-float-format*</KEYWORD3>\r
+                       <KEYWORD3>*read-eval*</KEYWORD3>\r
+                       <KEYWORD3>*read-suppress*</KEYWORD3>\r
+                       <KEYWORD3>*readtable*</KEYWORD3>\r
+                       <KEYWORD3>*standard-input*</KEYWORD3>\r
+                       <KEYWORD3>*standard-output*</KEYWORD3>\r
+                       <KEYWORD3>*terminal-io*</KEYWORD3>\r
+                       <KEYWORD3>*trace-output*</KEYWORD3>\r
+                       <KEYWORD3>+</KEYWORD3>\r
+                       <KEYWORD3>++</KEYWORD3>\r
+                       <KEYWORD3>+++</KEYWORD3>\r
+                       <KEYWORD3>-</KEYWORD3>\r
+                       <KEYWORD3>/</KEYWORD3>\r
+                       <KEYWORD3>//</KEYWORD3>\r
+                       <KEYWORD3>///</KEYWORD3>\r
+                       <KEYWORD3>/=</KEYWORD3>\r
+                       <KEYWORD3>1+</KEYWORD3>\r
+                       <KEYWORD3>1-</KEYWORD3>\r
+                       <KEYWORD3>&lt;</KEYWORD3>\r
+                       <KEYWORD3>&lt;=</KEYWORD3>\r
+                       <KEYWORD3>=</KEYWORD3>\r
+                       <KEYWORD3>&gt;</KEYWORD3>\r
+                       <KEYWORD3>&gt;=</KEYWORD3>\r
+                       <KEYWORD3>abs</KEYWORD3>\r
+                       <KEYWORD3>acons</KEYWORD3>\r
+                       <KEYWORD3>acos</KEYWORD3>\r
+                       <KEYWORD3>acosh</KEYWORD3>\r
+                       <KEYWORD3>add-method</KEYWORD3>\r
+                       <KEYWORD3>adjoin</KEYWORD3>\r
+                       <KEYWORD3>adjust-array</KEYWORD3>\r
+                       <KEYWORD3>adjustable-array-p</KEYWORD3>\r
+                       <KEYWORD3>allocate-instance</KEYWORD3>\r
+                       <KEYWORD3>alpha-char-p</KEYWORD3>\r
+                       <KEYWORD3>alphanumericp</KEYWORD3>\r
+                       <KEYWORD3>and</KEYWORD3>\r
+                       <KEYWORD3>append</KEYWORD3>\r
+                       <KEYWORD3>apply</KEYWORD3>\r
+                       <KEYWORD3>apropos</KEYWORD3>\r
+                       <KEYWORD3>apropos-list</KEYWORD3>\r
+                       <KEYWORD3>aref</KEYWORD3>\r
+                       <KEYWORD3>arithmetic-error</KEYWORD3>\r
+                       <KEYWORD3>arithmetic-error-operands</KEYWORD3>\r
+                       <KEYWORD3>arithmetic-error-operation</KEYWORD3>\r
+                       <KEYWORD3>array</KEYWORD3>\r
+                       <KEYWORD3>array-dimension</KEYWORD3>\r
+                       <KEYWORD3>array-dimension-limit</KEYWORD3>\r
+                       <KEYWORD3>array-dimensions</KEYWORD3>\r
+                       <KEYWORD3>array-displacement</KEYWORD3>\r
+                       <KEYWORD3>array-element-type</KEYWORD3>\r
+                       <KEYWORD3>array-has-fill-pointer-p</KEYWORD3>\r
+                       <KEYWORD3>array-in-bounds-p</KEYWORD3>\r
+                       <KEYWORD3>array-rank</KEYWORD3>\r
+                       <KEYWORD3>array-rank-limit</KEYWORD3>\r
+                       <KEYWORD3>array-row-major-index</KEYWORD3>\r
+                       <KEYWORD3>array-total-size</KEYWORD3>\r
+                       <KEYWORD3>array-total-size-limit</KEYWORD3>\r
+                       <KEYWORD3>arrayp</KEYWORD3>\r
+                       <KEYWORD3>ash</KEYWORD3>\r
+                       <KEYWORD3>asin</KEYWORD3>\r
+                       <KEYWORD3>asinh</KEYWORD3>\r
+                       <KEYWORD3>assoc</KEYWORD3>\r
+                       <KEYWORD3>assoc-if</KEYWORD3>\r
+                       <KEYWORD3>assoc-if-not</KEYWORD3>\r
+                       <KEYWORD3>atan</KEYWORD3>\r
+                       <KEYWORD3>atanh</KEYWORD3>\r
+                       <KEYWORD3>atom</KEYWORD3>\r
+                       <KEYWORD3>base-char</KEYWORD3>\r
+                       <KEYWORD3>base-string</KEYWORD3>\r
+                       <KEYWORD3>bignum</KEYWORD3>\r
+                       <KEYWORD3>bit</KEYWORD3>\r
+                       <KEYWORD3>bit-and</KEYWORD3>\r
+                       <KEYWORD3>bit-andc1</KEYWORD3>\r
+                       <KEYWORD3>bit-andc2</KEYWORD3>\r
+                       <KEYWORD3>bit-eqv</KEYWORD3>\r
+                       <KEYWORD3>bit-ior</KEYWORD3>\r
+                       <KEYWORD3>bit-nand</KEYWORD3>\r
+                       <KEYWORD3>bit-nor</KEYWORD3>\r
+                       <KEYWORD3>bit-not</KEYWORD3>\r
+                       <KEYWORD3>bit-orc1</KEYWORD3>\r
+                       <KEYWORD3>bit-orc2</KEYWORD3>\r
+                       <KEYWORD3>bit-vector</KEYWORD3>\r
+                       <KEYWORD3>bit-vector-p</KEYWORD3>\r
+                       <KEYWORD3>bit-xor</KEYWORD3>\r
+                       <KEYWORD3>boole</KEYWORD3>\r
+                       <KEYWORD3>boole-1</KEYWORD3>\r
+                       <KEYWORD3>boole-2</KEYWORD3>\r
+                       <KEYWORD3>boole-and</KEYWORD3>\r
+                       <KEYWORD3>boole-andc1</KEYWORD3>\r
+                       <KEYWORD3>boole-andc2</KEYWORD3>\r
+                       <KEYWORD3>boole-c1</KEYWORD3>\r
+                       <KEYWORD3>boole-c2</KEYWORD3>\r
+                       <KEYWORD3>boole-clr</KEYWORD3>\r
+                       <KEYWORD3>boole-eqv</KEYWORD3>\r
+                       <KEYWORD3>boole-ior</KEYWORD3>\r
+                       <KEYWORD3>boole-nand</KEYWORD3>\r
+                       <KEYWORD3>boole-nor</KEYWORD3>\r
+                       <KEYWORD3>boole-orc1</KEYWORD3>\r
+                       <KEYWORD3>boole-orc2</KEYWORD3>\r
+                       <KEYWORD3>boole-set</KEYWORD3>\r
+                       <KEYWORD3>boole-xor</KEYWORD3>\r
+                       <KEYWORD3>boolean</KEYWORD3>\r
+                       <KEYWORD3>both-case-p</KEYWORD3>\r
+                       <KEYWORD3>boundp</KEYWORD3>\r
+                       <KEYWORD3>broadcast-stream</KEYWORD3>\r
+                       <KEYWORD3>broadcast-stream-streams</KEYWORD3>\r
+                       <KEYWORD3>built-in-class</KEYWORD3>\r
+                       <KEYWORD3>butlast</KEYWORD3>\r
+                       <KEYWORD3>byte</KEYWORD3>\r
+                       <KEYWORD3>byte-position</KEYWORD3>\r
+                       <KEYWORD3>byte-size</KEYWORD3>\r
+                       <KEYWORD3>caaaar</KEYWORD3>\r
+                       <KEYWORD3>caaadr</KEYWORD3>\r
+                       <KEYWORD3>caaar</KEYWORD3>\r
+                       <KEYWORD3>caadar</KEYWORD3>\r
+                       <KEYWORD3>caaddr</KEYWORD3>\r
+                       <KEYWORD3>caadr</KEYWORD3>\r
+                       <KEYWORD3>caar</KEYWORD3>\r
+                       <KEYWORD3>cadaar</KEYWORD3>\r
+                       <KEYWORD3>cadadr</KEYWORD3>\r
+                       <KEYWORD3>cadar</KEYWORD3>\r
+                       <KEYWORD3>caddar</KEYWORD3>\r
+                       <KEYWORD3>cadddr</KEYWORD3>\r
+                       <KEYWORD3>caddr</KEYWORD3>\r
+                       <KEYWORD3>cadr</KEYWORD3>\r
+                       <KEYWORD3>call-arguments-limit</KEYWORD3>\r
+                       <KEYWORD3>call-method</KEYWORD3>\r
+                       <KEYWORD3>call-next-method</KEYWORD3>\r
+                       <KEYWORD3>car</KEYWORD3>\r
+                       <KEYWORD3>cdaaar</KEYWORD3>\r
+                       <KEYWORD3>cdaadr</KEYWORD3>\r
+                       <KEYWORD3>cdaar</KEYWORD3>\r
+                       <KEYWORD3>cdadar</KEYWORD3>\r
+                       <KEYWORD3>cdaddr</KEYWORD3>\r
+                       <KEYWORD3>cdadr</KEYWORD3>\r
+                       <KEYWORD3>cdar</KEYWORD3>\r
+                       <KEYWORD3>cddaar</KEYWORD3>\r
+                       <KEYWORD3>cddadr</KEYWORD3>\r
+                       <KEYWORD3>cddar</KEYWORD3>\r
+                       <KEYWORD3>cdddar</KEYWORD3>\r
+                       <KEYWORD3>cddddr</KEYWORD3>\r
+                       <KEYWORD3>cdddr</KEYWORD3>\r
+                       <KEYWORD3>cddr</KEYWORD3>\r
+                       <KEYWORD3>cdr</KEYWORD3>\r
+                       <KEYWORD3>ceiling</KEYWORD3>\r
+                       <KEYWORD3>cell-error</KEYWORD3>\r
+                       <KEYWORD3>cell-error-name</KEYWORD3>\r
+                       <KEYWORD3>change-class</KEYWORD3>\r
+                       <KEYWORD3>char</KEYWORD3>\r
+                       <KEYWORD3>char-code</KEYWORD3>\r
+                       <KEYWORD3>char-code-limit</KEYWORD3>\r
+                       <KEYWORD3>char-downcase</KEYWORD3>\r
+                       <KEYWORD3>char-equal</KEYWORD3>\r
+                       <KEYWORD3>char-greaterp</KEYWORD3>\r
+                       <KEYWORD3>char-int</KEYWORD3>\r
+                       <KEYWORD3>char-lessp</KEYWORD3>\r
+                       <KEYWORD3>char-name</KEYWORD3>\r
+                       <KEYWORD3>char-not-equal</KEYWORD3>\r
+                       <KEYWORD3>char-not-greaterp</KEYWORD3>\r
+                       <KEYWORD3>char-not-lessp</KEYWORD3>\r
+                       <KEYWORD3>char-upcase</KEYWORD3>\r
+                       <KEYWORD3>char/=</KEYWORD3>\r
+                       <KEYWORD3>char&gt;</KEYWORD3>\r
+                       <KEYWORD3>char&gt;=</KEYWORD3>\r
+                       <KEYWORD3>char&lt;</KEYWORD3>\r
+                       <KEYWORD3>char&lt;=</KEYWORD3>\r
+                       <KEYWORD3>char=</KEYWORD3>\r
+                       <KEYWORD3>character</KEYWORD3>\r
+                       <KEYWORD3>characterp</KEYWORD3>\r
+                       <KEYWORD3>check-type</KEYWORD3>\r
+                       <KEYWORD3>cis</KEYWORD3>\r
+                       <KEYWORD3>class</KEYWORD3>\r
+                       <KEYWORD3>class-name</KEYWORD3>\r
+                       <KEYWORD3>class-of</KEYWORD3>\r
+                       <KEYWORD3>clear-input</KEYWORD3>\r
+                       <KEYWORD3>clear-output</KEYWORD3>\r
+                       <KEYWORD3>close</KEYWORD3>\r
+                       <KEYWORD3>clrhash</KEYWORD3>\r
+                       <KEYWORD3>code-char</KEYWORD3>\r
+                       <KEYWORD3>coerce</KEYWORD3>\r
+                       <KEYWORD3>compilation-speed</KEYWORD3>\r
+                       <KEYWORD3>compile</KEYWORD3>\r
+                       <KEYWORD3>compile-file</KEYWORD3>\r
+                       <KEYWORD3>compile-file-pathname</KEYWORD3>\r
+                       <KEYWORD3>compiled-function</KEYWORD3>\r
+                       <KEYWORD3>compiled-function-p</KEYWORD3>\r
+                       <KEYWORD3>compiler-macro</KEYWORD3>\r
+                       <KEYWORD3>compiler-macro-function</KEYWORD3>\r
+                       <KEYWORD3>complement</KEYWORD3>\r
+                       <KEYWORD3>complex</KEYWORD3>\r
+                       <KEYWORD3>complexp</KEYWORD3>\r
+                       <KEYWORD3>compute-applicable-methods</KEYWORD3>\r
+                       <KEYWORD3>compute-restarts</KEYWORD3>\r
+                       <KEYWORD3>concatenate</KEYWORD3>\r
+                       <KEYWORD3>concatenated-stream</KEYWORD3>\r
+                       <KEYWORD3>concatenated-stream-streams</KEYWORD3>\r
+                       <KEYWORD3>condition</KEYWORD3>\r
+                       <KEYWORD3>conjugate</KEYWORD3>\r
+                       <KEYWORD3>cons</KEYWORD3>\r
+                       <KEYWORD3>consp</KEYWORD3>\r
+                       <KEYWORD3>constantly</KEYWORD3>\r
+                       <KEYWORD3>constantp</KEYWORD3>\r
+                       <KEYWORD3>continue</KEYWORD3>\r
+                       <KEYWORD3>control-error</KEYWORD3>\r
+                       <KEYWORD3>copy-alist</KEYWORD3>\r
+                       <KEYWORD3>copy-list</KEYWORD3>\r
+                       <KEYWORD3>copy-pprint-dispatch</KEYWORD3>\r
+                       <KEYWORD3>copy-readtable</KEYWORD3>\r
+                       <KEYWORD3>copy-seq</KEYWORD3>\r
+                       <KEYWORD3>copy-structure</KEYWORD3>\r
+                       <KEYWORD3>copy-symbol</KEYWORD3>\r
+                       <KEYWORD3>copy-tree</KEYWORD3>\r
+                       <KEYWORD3>cos</KEYWORD3>\r
+                       <KEYWORD3>cosh</KEYWORD3>\r
+                       <KEYWORD3>count</KEYWORD3>\r
+                       <KEYWORD3>count-if</KEYWORD3>\r
+                       <KEYWORD3>count-if-not</KEYWORD3>\r
+                       <KEYWORD3>debug</KEYWORD3>\r
+                       <KEYWORD3>decf</KEYWORD3>\r
+                       <KEYWORD3>declaration</KEYWORD3>\r
+                       <KEYWORD3>decode-float</KEYWORD3>\r
+                       <KEYWORD3>decode-universal-time</KEYWORD3>\r
+                       <KEYWORD3>delete</KEYWORD3>\r
+                       <KEYWORD3>delete-duplicates</KEYWORD3>\r
+                       <KEYWORD3>delete-file</KEYWORD3>\r
+                       <KEYWORD3>delete-if</KEYWORD3>\r
+                       <KEYWORD3>delete-if-not</KEYWORD3>\r
+                       <KEYWORD3>delete-package</KEYWORD3>\r
+                       <KEYWORD3>denominator</KEYWORD3>\r
+                       <KEYWORD3>deposit-field</KEYWORD3>\r
+                       <KEYWORD3>describe</KEYWORD3>\r
+                       <KEYWORD3>describe-object</KEYWORD3>\r
+                       <KEYWORD3>destructuring-bind</KEYWORD3>\r
+                       <KEYWORD3>digit-char</KEYWORD3>\r
+                       <KEYWORD3>digit-char-p</KEYWORD3>\r
+                       <KEYWORD3>directory</KEYWORD3>\r
+                       <KEYWORD3>directory-namestring</KEYWORD3>\r
+                       <KEYWORD3>disassemble</KEYWORD3>\r
+                       <KEYWORD3>division-by-zero</KEYWORD3>\r
+                       <KEYWORD3>documentation</KEYWORD3>\r
+                       <KEYWORD3>double-float</KEYWORD3>\r
+                       <KEYWORD3>double-float-epsilon</KEYWORD3>\r
+                       <KEYWORD3>double-float-negative-epsilon</KEYWORD3>\r
+                       <KEYWORD3>dpb</KEYWORD3>\r
+                       <KEYWORD3>dribble</KEYWORD3>\r
+                       <KEYWORD3>dynamic-extent</KEYWORD3>\r
+                       <KEYWORD3>echo-stream</KEYWORD3>\r
+                       <KEYWORD3>echo-stream-input-stream</KEYWORD3>\r
+                       <KEYWORD3>echo-stream-output-stream</KEYWORD3>\r
+                       <KEYWORD3>ed</KEYWORD3>\r
+                       <KEYWORD3>eighth</KEYWORD3>\r
+                       <KEYWORD3>elt</KEYWORD3>\r
+                       <KEYWORD3>encode-universal-time</KEYWORD3>\r
+                       <KEYWORD3>end-of-file</KEYWORD3>\r
+                       <KEYWORD3>endp</KEYWORD3>\r
+                       <KEYWORD3>enough-namestring</KEYWORD3>\r
+                       <KEYWORD3>ensure-directories-exist</KEYWORD3>\r
+                       <KEYWORD3>ensure-generic-function</KEYWORD3>\r
+                       <KEYWORD3>eq</KEYWORD3>\r
+                       <KEYWORD3>eql</KEYWORD3>\r
+                       <KEYWORD3>equal</KEYWORD3>\r
+                       <KEYWORD3>equalp</KEYWORD3>\r
+                       <KEYWORD3>eval</KEYWORD3>\r
+                       <KEYWORD3>evenp</KEYWORD3>\r
+                       <KEYWORD3>every</KEYWORD3>\r
+                       <KEYWORD3>exp</KEYWORD3>\r
+                       <KEYWORD3>export</KEYWORD3>\r
+                       <KEYWORD3>expt</KEYWORD3>\r
+                       <KEYWORD3>extended-char</KEYWORD3>\r
+                       <KEYWORD3>fboundp</KEYWORD3>\r
+                       <KEYWORD3>fceiling</KEYWORD3>\r
+                       <KEYWORD3>fdefinition</KEYWORD3>\r
+                       <KEYWORD3>ffloor</KEYWORD3>\r
+                       <KEYWORD3>fifth</KEYWORD3>\r
+                       <KEYWORD3>file-author</KEYWORD3>\r
+                       <KEYWORD3>file-error</KEYWORD3>\r
+                       <KEYWORD3>file-error-pathname</KEYWORD3>\r
+                       <KEYWORD3>file-length</KEYWORD3>\r
+                       <KEYWORD3>file-namestring</KEYWORD3>\r
+                       <KEYWORD3>file-position</KEYWORD3>\r
+                       <KEYWORD3>file-stream</KEYWORD3>\r
+                       <KEYWORD3>file-string-length</KEYWORD3>\r
+                       <KEYWORD3>file-write-date</KEYWORD3>\r
+                       <KEYWORD3>fill</KEYWORD3>\r
+                       <KEYWORD3>fill-pointer</KEYWORD3>\r
+                       <KEYWORD3>find</KEYWORD3>\r
+                       <KEYWORD3>find-all-symbols</KEYWORD3>\r
+                       <KEYWORD3>find-class</KEYWORD3>\r
+                       <KEYWORD3>find-if</KEYWORD3>\r
+                       <KEYWORD3>find-if-not</KEYWORD3>\r
+                       <KEYWORD3>find-method</KEYWORD3>\r
+                       <KEYWORD3>find-package</KEYWORD3>\r
+                       <KEYWORD3>find-restart</KEYWORD3>\r
+                       <KEYWORD3>find-symbol</KEYWORD3>\r
+                       <KEYWORD3>finish-output</KEYWORD3>\r
+                       <KEYWORD3>first</KEYWORD3>\r
+                       <KEYWORD3>fixnum</KEYWORD3>\r
+                       <KEYWORD3>float</KEYWORD3>\r
+                       <KEYWORD3>float-digits</KEYWORD3>\r
+                       <KEYWORD3>float-precision</KEYWORD3>\r
+                       <KEYWORD3>float-radix</KEYWORD3>\r
+                       <KEYWORD3>float-sign</KEYWORD3>\r
+                       <KEYWORD3>floating-point-inexact</KEYWORD3>\r
+                       <KEYWORD3>floating-point-invalid-operation</KEYWORD3>\r
+                       <KEYWORD3>floating-point-overflow</KEYWORD3>\r
+                       <KEYWORD3>floating-point-underflow</KEYWORD3>\r
+                       <KEYWORD3>floatp</KEYWORD3>\r
+                       <KEYWORD3>floor</KEYWORD3>\r
+                       <KEYWORD3>fmakunbound</KEYWORD3>\r
+                       <KEYWORD3>force-output</KEYWORD3>\r
+                       <KEYWORD3>format</KEYWORD3>\r
+                       <KEYWORD3>formatter</KEYWORD3>\r
+                       <KEYWORD3>fourth</KEYWORD3>\r
+                       <KEYWORD3>fresh-line</KEYWORD3>\r
+                       <KEYWORD3>fround</KEYWORD3>\r
+                       <KEYWORD3>ftruncate</KEYWORD3>\r
+                       <KEYWORD3>ftype</KEYWORD3>\r
+                       <KEYWORD3>funcall</KEYWORD3>\r
+                       <KEYWORD3>function</KEYWORD3>\r
+                       <KEYWORD3>function-keywords</KEYWORD3>\r
+                       <KEYWORD3>function-lambda-expression</KEYWORD3>\r
+                       <KEYWORD3>functionp</KEYWORD3>\r
+                       <KEYWORD3>gcd</KEYWORD3>\r
+                       <KEYWORD3>generic-function</KEYWORD3>\r
+                       <KEYWORD3>gensym</KEYWORD3>\r
+                       <KEYWORD3>gentemp</KEYWORD3>\r
+                       <KEYWORD3>get</KEYWORD3>\r
+                       <KEYWORD3>get-decoded-time</KEYWORD3>\r
+                       <KEYWORD3>get-dispatch-macro-character</KEYWORD3>\r
+                       <KEYWORD3>get-internal-real-time</KEYWORD3>\r
+                       <KEYWORD3>get-internal-run-time</KEYWORD3>\r
+                       <KEYWORD3>get-macro-character</KEYWORD3>\r
+                       <KEYWORD3>get-output-stream-string</KEYWORD3>\r
+                       <KEYWORD3>get-properties</KEYWORD3>\r
+                       <KEYWORD3>get-setf-expansion</KEYWORD3>\r
+                       <KEYWORD3>get-universal-time</KEYWORD3>\r
+                       <KEYWORD3>getf</KEYWORD3>\r
+                       <KEYWORD3>gethash</KEYWORD3>\r
+                       <KEYWORD3>go</KEYWORD3>\r
+                       <KEYWORD3>graphic-char-p</KEYWORD3>\r
+                       <KEYWORD3>hash-table</KEYWORD3>\r
+                       <KEYWORD3>hash-table-count</KEYWORD3>\r
+                       <KEYWORD3>hash-table-p</KEYWORD3>\r
+                       <KEYWORD3>hash-table-rehash-size</KEYWORD3>\r
+                       <KEYWORD3>hash-table-rehash-threshold</KEYWORD3>\r
+                       <KEYWORD3>hash-table-size</KEYWORD3>\r
+                       <KEYWORD3>hash-table-test</KEYWORD3>\r
+                       <KEYWORD3>host-namestring</KEYWORD3>\r
+                       <KEYWORD3>identity</KEYWORD3>\r
+                       <KEYWORD3>ignorable</KEYWORD3>\r
+                       <KEYWORD3>ignore</KEYWORD3>\r
+                       <KEYWORD3>imagpart</KEYWORD3>\r
+                       <KEYWORD3>import</KEYWORD3>\r
+                       <KEYWORD3>incf</KEYWORD3>\r
+                       <KEYWORD3>initialize-instance</KEYWORD3>\r
+                       <KEYWORD3>inline</KEYWORD3>\r
+                       <KEYWORD3>input-stream-p</KEYWORD3>\r
+                       <KEYWORD3>inspect</KEYWORD3>\r
+                       <KEYWORD3>integer</KEYWORD3>\r
+                       <KEYWORD3>integer-decode-float</KEYWORD3>\r
+                       <KEYWORD3>integer-length</KEYWORD3>\r
+                       <KEYWORD3>integerp</KEYWORD3>\r
+                       <KEYWORD3>interactive-stream-p</KEYWORD3>\r
+                       <KEYWORD3>intern</KEYWORD3>\r
+                       <KEYWORD3>internal-time-units-per-second</KEYWORD3>\r
+                       <KEYWORD3>intersection</KEYWORD3>\r
+                       <KEYWORD3>invalid-method-error</KEYWORD3>\r
+                       <KEYWORD3>invoke-debugger</KEYWORD3>\r
+                       <KEYWORD3>invoke-restart</KEYWORD3>\r
+                       <KEYWORD3>invoke-restart-interactively</KEYWORD3>\r
+                       <KEYWORD3>isqrt</KEYWORD3>\r
+                       <KEYWORD3>keyword</KEYWORD3>\r
+                       <KEYWORD3>keywordp</KEYWORD3>\r
+                       <KEYWORD3>lambda-list-keywords</KEYWORD3>\r
+                       <KEYWORD3>lambda-parameters-limit</KEYWORD3>\r
+                       <KEYWORD3>last</KEYWORD3>\r
+                       <KEYWORD3>lcm</KEYWORD3>\r
+                       <KEYWORD3>ldb</KEYWORD3>\r
+                       <KEYWORD3>ldb-test</KEYWORD3>\r
+                       <KEYWORD3>ldiff</KEYWORD3>\r
+                       <KEYWORD3>least-negative-double-float</KEYWORD3>\r
+                       <KEYWORD3>least-negative-long-float</KEYWORD3>\r
+                       <KEYWORD3>least-negative-normalized-double-float</KEYWORD3>\r
+                       <KEYWORD3>least-negative-normalized-long-float</KEYWORD3>\r
+                       <KEYWORD3>least-negative-normalized-short-float</KEYWORD3>\r
+                       <KEYWORD3>least-negative-normalized-single-float</KEYWORD3>\r
+                       <KEYWORD3>least-negative-short-float</KEYWORD3>\r
+                       <KEYWORD3>least-negative-single-float</KEYWORD3>\r
+                       <KEYWORD3>least-positive-double-float</KEYWORD3>\r
+                       <KEYWORD3>least-positive-long-float</KEYWORD3>\r
+                       <KEYWORD3>least-positive-normalized-double-float</KEYWORD3>\r
+                       <KEYWORD3>least-positive-normalized-long-float</KEYWORD3>\r
+                       <KEYWORD3>least-positive-normalized-short-float</KEYWORD3>\r
+                       <KEYWORD3>least-positive-normalized-single-float</KEYWORD3>\r
+                       <KEYWORD3>least-positive-short-float</KEYWORD3>\r
+                       <KEYWORD3>least-positive-single-float</KEYWORD3>\r
+                       <KEYWORD3>length</KEYWORD3>\r
+                       <KEYWORD3>lisp-implementation-type</KEYWORD3>\r
+                       <KEYWORD3>lisp-implementation-version</KEYWORD3>\r
+                       <KEYWORD3>list</KEYWORD3>\r
+                       <KEYWORD3>list*</KEYWORD3>\r
+                       <KEYWORD3>list-all-packages</KEYWORD3>\r
+                       <KEYWORD3>list-length</KEYWORD3>\r
+                       <KEYWORD3>listen</KEYWORD3>\r
+                       <KEYWORD3>listp</KEYWORD3>\r
+                       <KEYWORD3>load</KEYWORD3>\r
+                       <KEYWORD3>load-logical-pathname-translations</KEYWORD3>\r
+                       <KEYWORD3>load-time-value</KEYWORD3>\r
+                       <KEYWORD3>log</KEYWORD3>\r
+                       <KEYWORD3>logand</KEYWORD3>\r
+                       <KEYWORD3>logandc1</KEYWORD3>\r
+                       <KEYWORD3>logandc2</KEYWORD3>\r
+                       <KEYWORD3>logbitp</KEYWORD3>\r
+                       <KEYWORD3>logcount</KEYWORD3>\r
+                       <KEYWORD3>logeqv</KEYWORD3>\r
+                       <KEYWORD3>logical-pathname</KEYWORD3>\r
+                       <KEYWORD3>logical-pathname-translations</KEYWORD3>\r
+                       <KEYWORD3>logior</KEYWORD3>\r
+                       <KEYWORD3>lognand</KEYWORD3>\r
+                       <KEYWORD3>lognor</KEYWORD3>\r
+                       <KEYWORD3>lognot</KEYWORD3>\r
+                       <KEYWORD3>logorc1</KEYWORD3>\r
+                       <KEYWORD3>logorc2</KEYWORD3>\r
+                       <KEYWORD3>logtest</KEYWORD3>\r
+                       <KEYWORD3>logxor</KEYWORD3>\r
+                       <KEYWORD3>long-float</KEYWORD3>\r
+                       <KEYWORD3>long-float-epsilon</KEYWORD3>\r
+                       <KEYWORD3>long-float-negative-epsilon</KEYWORD3>\r
+                       <KEYWORD3>long-site-name</KEYWORD3>\r
+                       <KEYWORD3>loop-finish</KEYWORD3>\r
+                       <KEYWORD3>lower-case-p</KEYWORD3>\r
+                       <KEYWORD3>machine-instance</KEYWORD3>\r
+                       <KEYWORD3>machine-type</KEYWORD3>\r
+                       <KEYWORD3>machine-version</KEYWORD3>\r
+                       <KEYWORD3>macro-function</KEYWORD3>\r
+                       <KEYWORD3>macroexpand</KEYWORD3>\r
+                       <KEYWORD3>macroexpand-1</KEYWORD3>\r
+                       <KEYWORD3>make-array</KEYWORD3>\r
+                       <KEYWORD3>make-broadcast-stream</KEYWORD3>\r
+                       <KEYWORD3>make-concatenated-stream</KEYWORD3>\r
+                       <KEYWORD3>make-condition</KEYWORD3>\r
+                       <KEYWORD3>make-dispatch-macro-character</KEYWORD3>\r
+                       <KEYWORD3>make-echo-stream</KEYWORD3>\r
+                       <KEYWORD3>make-hash-table</KEYWORD3>\r
+                       <KEYWORD3>make-instance</KEYWORD3>\r
+                       <KEYWORD3>make-instances-obsolete</KEYWORD3>\r
+                       <KEYWORD3>make-list</KEYWORD3>\r
+                       <KEYWORD3>make-load-form</KEYWORD3>\r
+                       <KEYWORD3>make-load-form-saving-slots</KEYWORD3>\r
+                       <KEYWORD3>make-method</KEYWORD3>\r
+                       <KEYWORD3>make-package</KEYWORD3>\r
+                       <KEYWORD3>make-pathname</KEYWORD3>\r
+                       <KEYWORD3>make-random-state</KEYWORD3>\r
+                       <KEYWORD3>make-sequence</KEYWORD3>\r
+                       <KEYWORD3>make-string</KEYWORD3>\r
+                       <KEYWORD3>make-string-input-stream</KEYWORD3>\r
+                       <KEYWORD3>make-string-output-stream</KEYWORD3>\r
+                       <KEYWORD3>make-symbol</KEYWORD3>\r
+                       <KEYWORD3>make-synonym-stream</KEYWORD3>\r
+                       <KEYWORD3>make-two-way-stream</KEYWORD3>\r
+                       <KEYWORD3>makunbound</KEYWORD3>\r
+                       <KEYWORD3>map</KEYWORD3>\r
+                       <KEYWORD3>map-into</KEYWORD3>\r
+                       <KEYWORD3>mapc</KEYWORD3>\r
+                       <KEYWORD3>mapcan</KEYWORD3>\r
+                       <KEYWORD3>mapcar</KEYWORD3>\r
+                       <KEYWORD3>mapcon</KEYWORD3>\r
+                       <KEYWORD3>maphash</KEYWORD3>\r
+                       <KEYWORD3>mapl</KEYWORD3>\r
+                       <KEYWORD3>maplist</KEYWORD3>\r
+                       <KEYWORD3>mask-field</KEYWORD3>\r
+                       <KEYWORD3>max</KEYWORD3>\r
+                       <KEYWORD3>member</KEYWORD3>\r
+                       <KEYWORD3>member-if</KEYWORD3>\r
+                       <KEYWORD3>member-if-not</KEYWORD3>\r
+                       <KEYWORD3>merge</KEYWORD3>\r
+                       <KEYWORD3>merge-pathnames</KEYWORD3>\r
+                       <KEYWORD3>method</KEYWORD3>\r
+                       <KEYWORD3>method-combination</KEYWORD3>\r
+                       <KEYWORD3>method-combination-error</KEYWORD3>\r
+                       <KEYWORD3>method-qualifiers</KEYWORD3>\r
+                       <KEYWORD3>min</KEYWORD3>\r
+                       <KEYWORD3>minusp</KEYWORD3>\r
+                       <KEYWORD3>mismatch</KEYWORD3>\r
+                       <KEYWORD3>mod</KEYWORD3>\r
+                       <KEYWORD3>most-negative-double-float</KEYWORD3>\r
+                       <KEYWORD3>most-negative-fixnum</KEYWORD3>\r
+                       <KEYWORD3>most-negative-long-float</KEYWORD3>\r
+                       <KEYWORD3>most-negative-short-float</KEYWORD3>\r
+                       <KEYWORD3>most-negative-single-float</KEYWORD3>\r
+                       <KEYWORD3>most-positive-double-float</KEYWORD3>\r
+                       <KEYWORD3>most-positive-fixnum</KEYWORD3>\r
+                       <KEYWORD3>most-positive-long-float</KEYWORD3>\r
+                       <KEYWORD3>most-positive-short-float</KEYWORD3>\r
+                       <KEYWORD3>most-positive-single-float</KEYWORD3>\r
+                       <KEYWORD3>muffle-warning</KEYWORD3>\r
+                       <KEYWORD3>multiple-value-call</KEYWORD3>\r
+                       <KEYWORD3>multiple-value-list</KEYWORD3>\r
+                       <KEYWORD3>multiple-value-prog1</KEYWORD3>\r
+                       <KEYWORD3>multiple-value-setq</KEYWORD3>\r
+                       <KEYWORD3>multiple-values-limit</KEYWORD3>\r
+                       <KEYWORD3>name-char</KEYWORD3>\r
+                       <KEYWORD3>namestring</KEYWORD3>\r
+                       <KEYWORD3>nbutlast</KEYWORD3>\r
+                       <KEYWORD3>nconc</KEYWORD3>\r
+                       <KEYWORD3>next-method-p</KEYWORD3>\r
+                       <KEYWORD3>nintersection</KEYWORD3>\r
+                       <KEYWORD3>ninth</KEYWORD3>\r
+                       <KEYWORD3>no-applicable-method</KEYWORD3>\r
+                       <KEYWORD3>no-next-method</KEYWORD3>\r
+                       <KEYWORD3>not</KEYWORD3>\r
+                       <KEYWORD3>notany</KEYWORD3>\r
+                       <KEYWORD3>notevery</KEYWORD3>\r
+                       <KEYWORD3>notinline</KEYWORD3>\r
+                       <KEYWORD3>nreconc</KEYWORD3>\r
+                       <KEYWORD3>nreverse</KEYWORD3>\r
+                       <KEYWORD3>nset-difference</KEYWORD3>\r
+                       <KEYWORD3>nset-exclusive-or</KEYWORD3>\r
+                       <KEYWORD3>nstring-capitalize</KEYWORD3>\r
+                       <KEYWORD3>nstring-downcase</KEYWORD3>\r
+                       <KEYWORD3>nstring-upcase</KEYWORD3>\r
+                       <KEYWORD3>nsublis</KEYWORD3>\r
+                       <KEYWORD3>nsubst</KEYWORD3>\r
+                       <KEYWORD3>nsubst-if</KEYWORD3>\r
+                       <KEYWORD3>nsubst-if-not</KEYWORD3>\r
+                       <KEYWORD3>nsubstitute</KEYWORD3>\r
+                       <KEYWORD3>nsubstitute-if</KEYWORD3>\r
+                       <KEYWORD3>nsubstitute-if-not</KEYWORD3>\r
+                       <KEYWORD3>nth</KEYWORD3>\r
+                       <KEYWORD3>nth-value</KEYWORD3>\r
+                       <KEYWORD3>nthcdr</KEYWORD3>\r
+                       <KEYWORD3>null</KEYWORD3>\r
+                       <KEYWORD3>number</KEYWORD3>\r
+                       <KEYWORD3>numberp</KEYWORD3>\r
+                       <KEYWORD3>numerator</KEYWORD3>\r
+                       <KEYWORD3>nunion</KEYWORD3>\r
+                       <KEYWORD3>oddp</KEYWORD3>\r
+                       <KEYWORD3>open</KEYWORD3>\r
+                       <KEYWORD3>open-stream-p</KEYWORD3>\r
+                       <KEYWORD3>optimize</KEYWORD3>\r
+                       <KEYWORD3>or</KEYWORD3>\r
+                       <KEYWORD3>otherwise</KEYWORD3>\r
+                       <KEYWORD3>output-stream-p</KEYWORD3>\r
+                       <KEYWORD3>package</KEYWORD3>\r
+                       <KEYWORD3>package-error</KEYWORD3>\r
+                       <KEYWORD3>package-error-package</KEYWORD3>\r
+                       <KEYWORD3>package-name</KEYWORD3>\r
+                       <KEYWORD3>package-nicknames</KEYWORD3>\r
+                       <KEYWORD3>package-shadowing-symbols</KEYWORD3>\r
+                       <KEYWORD3>package-use-list</KEYWORD3>\r
+                       <KEYWORD3>package-used-by-list</KEYWORD3>\r
+                       <KEYWORD3>packagep</KEYWORD3>\r
+                       <KEYWORD3>pairlis</KEYWORD3>\r
+                       <KEYWORD3>parse-error</KEYWORD3>\r
+                       <KEYWORD3>parse-integer</KEYWORD3>\r
+                       <KEYWORD3>parse-namestring</KEYWORD3>\r
+                       <KEYWORD3>pathname</KEYWORD3>\r
+                       <KEYWORD3>pathname-device</KEYWORD3>\r
+                       <KEYWORD3>pathname-directory</KEYWORD3>\r
+                       <KEYWORD3>pathname-host</KEYWORD3>\r
+                       <KEYWORD3>pathname-match-p</KEYWORD3>\r
+                       <KEYWORD3>pathname-name</KEYWORD3>\r
+                       <KEYWORD3>pathname-type</KEYWORD3>\r
+                       <KEYWORD3>pathname-version</KEYWORD3>\r
+                       <KEYWORD3>pathnamep</KEYWORD3>\r
+                       <KEYWORD3>peek-char</KEYWORD3>\r
+                       <KEYWORD3>phase</KEYWORD3>\r
+                       <KEYWORD3>pi</KEYWORD3>\r
+                       <KEYWORD3>plusp</KEYWORD3>\r
+                       <KEYWORD3>pop</KEYWORD3>\r
+                       <KEYWORD3>position</KEYWORD3>\r
+                       <KEYWORD3>position-if</KEYWORD3>\r
+                       <KEYWORD3>position-if-not</KEYWORD3>\r
+                       <KEYWORD3>pprint</KEYWORD3>\r
+                       <KEYWORD3>pprint-dispatch</KEYWORD3>\r
+                       <KEYWORD3>pprint-exit-if-list-exhausted</KEYWORD3>\r
+                       <KEYWORD3>pprint-fill</KEYWORD3>\r
+                       <KEYWORD3>pprint-indent</KEYWORD3>\r
+                       <KEYWORD3>pprint-linear</KEYWORD3>\r
+                       <KEYWORD3>pprint-logical-block</KEYWORD3>\r
+                       <KEYWORD3>pprint-newline</KEYWORD3>\r
+                       <KEYWORD3>pprint-pop</KEYWORD3>\r
+                       <KEYWORD3>pprint-tab</KEYWORD3>\r
+                       <KEYWORD3>pprint-tabular</KEYWORD3>\r
+                       <KEYWORD3>prin1</KEYWORD3>\r
+                       <KEYWORD3>prin1-to-string</KEYWORD3>\r
+                       <KEYWORD3>princ</KEYWORD3>\r
+                       <KEYWORD3>princ-to-string</KEYWORD3>\r
+                       <KEYWORD3>print</KEYWORD3>\r
+                       <KEYWORD3>print-not-readable</KEYWORD3>\r
+                       <KEYWORD3>print-not-readable-object</KEYWORD3>\r
+                       <KEYWORD3>print-object</KEYWORD3>\r
+                       <KEYWORD3>print-unreadable-object</KEYWORD3>\r
+                       <KEYWORD3>probe-file</KEYWORD3>\r
+                       <KEYWORD3>program-error</KEYWORD3>\r
+                       <KEYWORD3>psetf</KEYWORD3>\r
+                       <KEYWORD3>psetq</KEYWORD3>\r
+                       <KEYWORD3>push</KEYWORD3>\r
+                       <KEYWORD3>pushnew</KEYWORD3>\r
+                       <KEYWORD3>quote</KEYWORD3>\r
+                       <KEYWORD3>random</KEYWORD3>\r
+                       <KEYWORD3>random-state</KEYWORD3>\r
+                       <KEYWORD3>random-state-p</KEYWORD3>\r
+                       <KEYWORD3>rassoc</KEYWORD3>\r
+                       <KEYWORD3>rassoc-if</KEYWORD3>\r
+                       <KEYWORD3>rassoc-if-not</KEYWORD3>\r
+                       <KEYWORD3>ratio</KEYWORD3>\r
+                       <KEYWORD3>rational</KEYWORD3>\r
+                       <KEYWORD3>rationalize</KEYWORD3>\r
+                       <KEYWORD3>rationalp</KEYWORD3>\r
+                       <KEYWORD3>read</KEYWORD3>\r
+                       <KEYWORD3>read-byte</KEYWORD3>\r
+                       <KEYWORD3>read-char</KEYWORD3>\r
+                       <KEYWORD3>read-char-no-hang</KEYWORD3>\r
+                       <KEYWORD3>read-delimited-list</KEYWORD3>\r
+                       <KEYWORD3>read-from-string</KEYWORD3>\r
+                       <KEYWORD3>read-line</KEYWORD3>\r
+                       <KEYWORD3>read-preserving-whitespace</KEYWORD3>\r
+                       <KEYWORD3>read-sequence</KEYWORD3>\r
+                       <KEYWORD3>reader-error</KEYWORD3>\r
+                       <KEYWORD3>readtable</KEYWORD3>\r
+                       <KEYWORD3>readtable-case</KEYWORD3>\r
+                       <KEYWORD3>readtablep</KEYWORD3>\r
+                       <KEYWORD3>real</KEYWORD3>\r
+                       <KEYWORD3>realp</KEYWORD3>\r
+                       <KEYWORD3>realpart</KEYWORD3>\r
+                       <KEYWORD3>reduce</KEYWORD3>\r
+                       <KEYWORD3>reinitialize-instance</KEYWORD3>\r
+                       <KEYWORD3>rem</KEYWORD3>\r
+                       <KEYWORD3>remf</KEYWORD3>\r
+                       <KEYWORD3>remhash</KEYWORD3>\r
+                       <KEYWORD3>remove</KEYWORD3>\r
+                       <KEYWORD3>remove-duplicates</KEYWORD3>\r
+                       <KEYWORD3>remove-if</KEYWORD3>\r
+                       <KEYWORD3>remove-if-not</KEYWORD3>\r
+                       <KEYWORD3>remove-method</KEYWORD3>\r
+                       <KEYWORD3>remprop</KEYWORD3>\r
+                       <KEYWORD3>rename-file</KEYWORD3>\r
+                       <KEYWORD3>rename-package</KEYWORD3>\r
+                       <KEYWORD3>replace</KEYWORD3>\r
+                       <KEYWORD3>rest</KEYWORD3>\r
+                       <KEYWORD3>restart</KEYWORD3>\r
+                       <KEYWORD3>revappend</KEYWORD3>\r
+                       <KEYWORD3>reverse</KEYWORD3>\r
+                       <KEYWORD3>room</KEYWORD3>\r
+                       <KEYWORD3>rotatef</KEYWORD3>\r
+                       <KEYWORD3>round</KEYWORD3>\r
+                       <KEYWORD3>row-major-aref</KEYWORD3>\r
+                       <KEYWORD3>rplaca</KEYWORD3>\r
+                       <KEYWORD3>rplacd</KEYWORD3>\r
+                       <KEYWORD3>safety</KEYWORD3>\r
+                       <KEYWORD3>satisfies</KEYWORD3>\r
+                       <KEYWORD3>sbit</KEYWORD3>\r
+                       <KEYWORD3>scale-float</KEYWORD3>\r
+                       <KEYWORD3>schar</KEYWORD3>\r
+                       <KEYWORD3>search</KEYWORD3>\r
+                       <KEYWORD3>second</KEYWORD3>\r
+                       <KEYWORD3>sequence</KEYWORD3>\r
+                       <KEYWORD3>serious-condition</KEYWORD3>\r
+                       <KEYWORD3>set</KEYWORD3>\r
+                       <KEYWORD3>set-difference</KEYWORD3>\r
+                       <KEYWORD3>set-dispatch-macro-character</KEYWORD3>\r
+                       <KEYWORD3>set-exclusive-or</KEYWORD3>\r
+                       <KEYWORD3>set-macro-character</KEYWORD3>\r
+                       <KEYWORD3>set-pprint-dispatch</KEYWORD3>\r
+                       <KEYWORD3>set-syntax-from-char</KEYWORD3>\r
+                       <KEYWORD3>setf</KEYWORD3>\r
+                       <KEYWORD3>setq</KEYWORD3>\r
+                       <KEYWORD3>seventh</KEYWORD3>\r
+                       <KEYWORD3>shadow</KEYWORD3>\r
+                       <KEYWORD3>shadowing-import</KEYWORD3>\r
+                       <KEYWORD3>shared-initialize</KEYWORD3>\r
+                       <KEYWORD3>shiftf</KEYWORD3>\r
+                       <KEYWORD3>short-float</KEYWORD3>\r
+                       <KEYWORD3>short-float-epsilon</KEYWORD3>\r
+                       <KEYWORD3>short-float-negative-epsilon</KEYWORD3>\r
+                       <KEYWORD3>short-site-name</KEYWORD3>\r
+                       <KEYWORD3>signed-byte</KEYWORD3>\r
+                       <KEYWORD3>signum</KEYWORD3>\r
+                       <KEYWORD3>simple-array</KEYWORD3>\r
+                       <KEYWORD3>simple-base-string</KEYWORD3>\r
+                       <KEYWORD3>simple-bit-vector</KEYWORD3>\r
+                       <KEYWORD3>simple-bit-vector-p</KEYWORD3>\r
+                       <KEYWORD3>simple-condition</KEYWORD3>\r
+                       <KEYWORD3>simple-condition-format-arguments</KEYWORD3>\r
+                       <KEYWORD3>simple-condition-format-control</KEYWORD3>\r
+                       <KEYWORD3>simple-error</KEYWORD3>\r
+                       <KEYWORD3>simple-string</KEYWORD3>\r
+                       <KEYWORD3>simple-string-p</KEYWORD3>\r
+                       <KEYWORD3>simple-type-error</KEYWORD3>\r
+                       <KEYWORD3>simple-vector</KEYWORD3>\r
+                       <KEYWORD3>simple-vector-p</KEYWORD3>\r
+                       <KEYWORD3>simple-warning</KEYWORD3>\r
+                       <KEYWORD3>sin</KEYWORD3>\r
+                       <KEYWORD3>single-float</KEYWORD3>\r
+                       <KEYWORD3>single-float-epsilon</KEYWORD3>\r
+                       <KEYWORD3>single-float-negative-epsilon</KEYWORD3>\r
+                       <KEYWORD3>sinh</KEYWORD3>\r
+                       <KEYWORD3>sixth</KEYWORD3>\r
+                       <KEYWORD3>sleep</KEYWORD3>\r
+                       <KEYWORD3>slot-boundp</KEYWORD3>\r
+                       <KEYWORD3>slot-exists-p</KEYWORD3>\r
+                       <KEYWORD3>slot-makunbound</KEYWORD3>\r
+                       <KEYWORD3>slot-missing</KEYWORD3>\r
+                       <KEYWORD3>slot-unbound</KEYWORD3>\r
+                       <KEYWORD3>slot-value</KEYWORD3>\r
+                       <KEYWORD3>software-type</KEYWORD3>\r
+                       <KEYWORD3>software-version</KEYWORD3>\r
+                       <KEYWORD3>some</KEYWORD3>\r
+                       <KEYWORD3>sort</KEYWORD3>\r
+                       <KEYWORD3>space</KEYWORD3>\r
+                       <KEYWORD3>special</KEYWORD3>\r
+                       <KEYWORD3>special-operator-p</KEYWORD3>\r
+                       <KEYWORD3>speed</KEYWORD3>\r
+                       <KEYWORD3>sqrt</KEYWORD3>\r
+                       <KEYWORD3>stable-sort</KEYWORD3>\r
+                       <KEYWORD3>standard</KEYWORD3>\r
+                       <KEYWORD3>standard-char</KEYWORD3>\r
+                       <KEYWORD3>standard-char-p</KEYWORD3>\r
+                       <KEYWORD3>standard-class</KEYWORD3>\r
+                       <KEYWORD3>standard-generic-function</KEYWORD3>\r
+                       <KEYWORD3>standard-method</KEYWORD3>\r
+                       <KEYWORD3>standard-object</KEYWORD3>\r
+                       <KEYWORD3>step</KEYWORD3>\r
+                       <KEYWORD3>storage-condition</KEYWORD3>\r
+                       <KEYWORD3>store-value</KEYWORD3>\r
+                       <KEYWORD3>stream</KEYWORD3>\r
+                       <KEYWORD3>stream-element-type</KEYWORD3>\r
+                       <KEYWORD3>stream-error</KEYWORD3>\r
+                       <KEYWORD3>stream-error-stream</KEYWORD3>\r
+                       <KEYWORD3>stream-external-format</KEYWORD3>\r
+                       <KEYWORD3>streamp</KEYWORD3>\r
+                       <KEYWORD3>string</KEYWORD3>\r
+                       <KEYWORD3>string-capitalize</KEYWORD3>\r
+                       <KEYWORD3>string-downcase</KEYWORD3>\r
+                       <KEYWORD3>string-equal</KEYWORD3>\r
+                       <KEYWORD3>string-greaterp</KEYWORD3>\r
+                       <KEYWORD3>string-left-trim</KEYWORD3>\r
+                       <KEYWORD3>string-lessp</KEYWORD3>\r
+                       <KEYWORD3>string-not-equal</KEYWORD3>\r
+                       <KEYWORD3>string-not-greaterp</KEYWORD3>\r
+                       <KEYWORD3>string-not-lessp</KEYWORD3>\r
+                       <KEYWORD3>string-right-trim</KEYWORD3>\r
+                       <KEYWORD3>string-stream</KEYWORD3>\r
+                       <KEYWORD3>string-trim</KEYWORD3>\r
+                       <KEYWORD3>string-upcase</KEYWORD3>\r
+                       <KEYWORD3>string/=</KEYWORD3>\r
+                       <KEYWORD3>string&lt;</KEYWORD3>\r
+                       <KEYWORD3>string&lt;=</KEYWORD3>\r
+                       <KEYWORD3>string=</KEYWORD3>\r
+                       <KEYWORD3>string&gt;</KEYWORD3>\r
+                       <KEYWORD3>string&gt;=</KEYWORD3>\r
+                       <KEYWORD3>stringp</KEYWORD3>\r
+                       <KEYWORD3>structure</KEYWORD3>\r
+                       <KEYWORD3>structure-class</KEYWORD3>\r
+                       <KEYWORD3>structure-object</KEYWORD3>\r
+                       <KEYWORD3>style-warning</KEYWORD3>\r
+                       <KEYWORD3>sublis</KEYWORD3>\r
+                       <KEYWORD3>subseq</KEYWORD3>\r
+                       <KEYWORD3>subsetp</KEYWORD3>\r
+                       <KEYWORD3>subst</KEYWORD3>\r
+                       <KEYWORD3>subst-if</KEYWORD3>\r
+                       <KEYWORD3>subst-if-not</KEYWORD3>\r
+                       <KEYWORD3>substitute</KEYWORD3>\r
+                       <KEYWORD3>substitute-if</KEYWORD3>\r
+                       <KEYWORD3>substitute-if-not</KEYWORD3>\r
+                       <KEYWORD3>subtypep</KEYWORD3>\r
+                       <KEYWORD3>svref</KEYWORD3>\r
+                       <KEYWORD3>sxhash</KEYWORD3>\r
+                       <KEYWORD3>symbol</KEYWORD3>\r
+                       <KEYWORD3>symbol-function</KEYWORD3>\r
+                       <KEYWORD3>symbol-name</KEYWORD3>\r
+                       <KEYWORD3>symbol-package</KEYWORD3>\r
+                       <KEYWORD3>symbol-plist</KEYWORD3>\r
+                       <KEYWORD3>symbol-value</KEYWORD3>\r
+                       <KEYWORD3>symbolp</KEYWORD3>\r
+                       <KEYWORD3>synonym-stream</KEYWORD3>\r
+                       <KEYWORD3>synonym-stream-symbol</KEYWORD3>\r
+                       <KEYWORD3>tailp</KEYWORD3>\r
+                       <KEYWORD3>tan</KEYWORD3>\r
+                       <KEYWORD3>tanh</KEYWORD3>\r
+                       <KEYWORD3>tenth</KEYWORD3>\r
+                       <KEYWORD3>terpri</KEYWORD3>\r
+                       <KEYWORD3>third</KEYWORD3>\r
+                       <KEYWORD3>time</KEYWORD3>\r
+                       <KEYWORD3>trace</KEYWORD3>\r
+                       <KEYWORD3>translate-logical-pathname</KEYWORD3>\r
+                       <KEYWORD3>translate-pathname</KEYWORD3>\r
+                       <KEYWORD3>tree-equal</KEYWORD3>\r
+                       <KEYWORD3>truename</KEYWORD3>\r
+                       <KEYWORD3>truncate</KEYWORD3>\r
+                       <KEYWORD3>two-way-stream</KEYWORD3>\r
+                       <KEYWORD3>two-way-stream-input-stream</KEYWORD3>\r
+                       <KEYWORD3>two-way-stream-output-stream</KEYWORD3>\r
+                       <KEYWORD3>type-error-datum</KEYWORD3>\r
+                       <KEYWORD3>type-error-expected-type</KEYWORD3>\r
+                       <KEYWORD3>type-error</KEYWORD3>\r
+                       <KEYWORD3>type-of</KEYWORD3>\r
+                       <KEYWORD3>typep</KEYWORD3>\r
+                       <KEYWORD3>type</KEYWORD3>\r
+                       <KEYWORD3>unbound-slot-instance</KEYWORD3>\r
+                       <KEYWORD3>unbound-slot</KEYWORD3>\r
+                       <KEYWORD3>unbound-variable</KEYWORD3>\r
+                       <KEYWORD3>undefined-function</KEYWORD3>\r
+                       <KEYWORD3>unexport</KEYWORD3>\r
+                       <KEYWORD3>unintern</KEYWORD3>\r
+                       <KEYWORD3>union</KEYWORD3>\r
+                       <KEYWORD3>unread-char</KEYWORD3>\r
+                       <KEYWORD3>unsigned-byte</KEYWORD3>\r
+                       <KEYWORD3>untrace</KEYWORD3>\r
+                       <KEYWORD3>unuse-package</KEYWORD3>\r
+                       <KEYWORD3>update-instance-for-different-class</KEYWORD3>\r
+                       <KEYWORD3>update-instance-for-redefined-class</KEYWORD3>\r
+                       <KEYWORD3>upgraded-array-element-type</KEYWORD3>\r
+                       <KEYWORD3>upgraded-complex-part-type</KEYWORD3>\r
+                       <KEYWORD3>upper-case-p</KEYWORD3>\r
+                       <KEYWORD3>use-package</KEYWORD3>\r
+                       <KEYWORD3>use-value</KEYWORD3>\r
+                       <KEYWORD3>user-homedir-pathname</KEYWORD3>\r
+                       <KEYWORD3>values</KEYWORD3>\r
+                       <KEYWORD3>values-list</KEYWORD3>\r
+                       <KEYWORD3>variable</KEYWORD3>\r
+                       <KEYWORD3>vector</KEYWORD3>\r
+                       <KEYWORD3>vector-pop</KEYWORD3>\r
+                       <KEYWORD3>vector-push</KEYWORD3>\r
+                       <KEYWORD3>vector-push-extend</KEYWORD3>\r
+                       <KEYWORD3>vectorp</KEYWORD3>\r
+                       <KEYWORD3>warn</KEYWORD3>\r
+                       <KEYWORD3>warning</KEYWORD3>\r
+                       <KEYWORD3>wild-pathname-p</KEYWORD3>\r
+                       <KEYWORD3>write</KEYWORD3>\r
+                       <KEYWORD3>write-byte</KEYWORD3>\r
+                       <KEYWORD3>write-char</KEYWORD3>\r
+                       <KEYWORD3>write-line</KEYWORD3>\r
+                       <KEYWORD3>write-sequence</KEYWORD3>\r
+                       <KEYWORD3>write-string</KEYWORD3>\r
+                       <KEYWORD3>write-to-string</KEYWORD3>\r
+                       <KEYWORD3>y-or-n-p</KEYWORD3>\r
+                       <KEYWORD3>yes-or-no-p</KEYWORD3>\r
+                       <KEYWORD3>zerop</KEYWORD3>\r
+\r
+                       <LITERAL2>t</LITERAL2>\r
+                       <LITERAL2>nil</LITERAL2>\r
+               </KEYWORDS>\r
+\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/literate-haskell.xml b/extra/xmode/modes/literate-haskell.xml
new file mode 100644 (file)
index 0000000..c74ad3a
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+       Literate Haskell mode by Cameron Morrison (c.morrison@iinet.net.au)\r
+       Modified version of the Haskell mode by Kristian Ovaska (kristian.ovaska@helsinki.fi)\r
+       Based on Haskell 98\r
+-->\r
+\r
+<MODE>\r
+\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="{-" />\r
+               <PROPERTY NAME="commentEnd" VALUE="-}" />\r
+               <PROPERTY NAME="lineComment" VALUE="--" />\r
+               <!-- apparently, this is required... -->\r
+               <PROPERTY NAME="tabSize" VALUE="8" />\r
+               <PROPERTY NAME="indentSize" VALUE="8" />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="FALSE" DEFAULT="COMMENT4">\r
+               <EOL_SPAN AT_WHITESPACE_END="TRUE" TYPE="FUNCTION" DELEGATE="haskell::MAIN">&gt;</EOL_SPAN>\r
+               <!-- for LaTeX-style -->\r
+               <EOL_SPAN AT_LINE_START="TRUE" TYPE="COMMENT3">%</EOL_SPAN>\r
+               <SPAN TYPE="LITERAL3" DELEGATE="haskell::MAIN">\r
+                       <BEGIN>\begin{code}</BEGIN>\r
+                       <END>\end{code}</END>\r
+               </SPAN>\r
+               <!--\r
+               <EOL_SPAN_REGEXP HASH_CHAR="\" AT_LINE_START="TRUE"\r
+                       DELEGATE="latex::MAIN" TYPE="KEYWORD1"\r
+               >\\\w+</EOL_SPAN_REGEXP>\r
+               -->\r
+    </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/lotos.xml b/extra/xmode/modes/lotos.xml
new file mode 100644 (file)
index 0000000..bd1d4b7
--- /dev/null
@@ -0,0 +1,125 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+  lotos.xml    K. J. Turner <kjt@cs.stir.ac.uk>        24th April 2003\r
+\r
+  LOTOS (Language Of Temporal Ordering Specification) is an ISO standard\r
+  (8807) for a formal specification language used in communications and system\r
+  specification generally.\r
+\r
+  This mode does not (yet) deal with ISO 15437 (E-LOTOS, Enhanced LOTOS).\r
+\r
+  Auto-indentation occurs if the following are at the start of a line\r
+  (ignoring leading white space): "let", "library", "process", "specification",\r
+  "type", , ">>". This also happens if the following appear on their own (i.e.\r
+  also ignoring trailing white space): "(", "[]", "[>", "||" "|||", "|[...]|",\r
+  "[...]->".\r
+-->\r
+\r
+<MODE>\r
+  <PROPS>\r
+    <PROPERTY NAME="commentStart" VALUE="(*"/>\r
+    <PROPERTY NAME="commentEnd" VALUE="*)"/>\r
+    <PROPERTY NAME="indentNextLines"\r
+      VALUE="\s*(let|library|process|specification|type|>>).*|\s*(\(|\[\]|\[>|\|\||\|\|\||\|\[.*\]\||\[.*\]\s*->)\s*"/>\r
+  </PROPS>\r
+\r
+  <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="FALSE">\r
+    <!-- Comments -->\r
+    <SPAN TYPE="COMMENT1">\r
+      <BEGIN>(*</BEGIN>\r
+      <END>*)</END>\r
+    </SPAN>\r
+\r
+    <!-- Standard Operators -->\r
+    <SEQ TYPE="OPERATOR">&gt;&gt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">[&gt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">|||</SEQ>\r
+    <SEQ TYPE="OPERATOR">||</SEQ>\r
+    <SEQ TYPE="OPERATOR">|[</SEQ>\r
+    <SEQ TYPE="OPERATOR">]|</SEQ>\r
+    <SEQ TYPE="OPERATOR">[]</SEQ>\r
+\r
+    <KEYWORDS>\r
+      <!-- Reserved Words -->\r
+      <KEYWORD1>accept</KEYWORD1>\r
+      <KEYWORD1>actualizedby</KEYWORD1>\r
+      <KEYWORD1>any</KEYWORD1>\r
+      <KEYWORD1>behavior</KEYWORD1>\r
+      <KEYWORD1>behaviour</KEYWORD1>\r
+      <KEYWORD1>choice</KEYWORD1>\r
+      <KEYWORD1>endlib</KEYWORD1>\r
+      <KEYWORD1>endproc</KEYWORD1>\r
+      <KEYWORD1>endspec</KEYWORD1>\r
+      <KEYWORD1>endtype</KEYWORD1>\r
+      <KEYWORD1>eqns</KEYWORD1>\r
+      <KEYWORD1>exit</KEYWORD1>\r
+      <KEYWORD1>for</KEYWORD1>\r
+      <KEYWORD1>forall</KEYWORD1>\r
+      <KEYWORD1>formaleqns</KEYWORD1>\r
+      <KEYWORD1>formalopns</KEYWORD1>\r
+      <KEYWORD1>formalsorts</KEYWORD1>\r
+      <KEYWORD1>hide</KEYWORD1>\r
+      <KEYWORD1>i</KEYWORD1>\r
+      <KEYWORD1>in</KEYWORD1>\r
+      <KEYWORD1>is</KEYWORD1>\r
+      <KEYWORD1>let</KEYWORD1>\r
+      <KEYWORD1>library</KEYWORD1>\r
+      <KEYWORD1>noexit</KEYWORD1>\r
+      <KEYWORD1>of</KEYWORD1>\r
+      <KEYWORD1>ofsort</KEYWORD1>\r
+      <KEYWORD1>opnnames</KEYWORD1>\r
+      <KEYWORD1>opns</KEYWORD1>\r
+      <KEYWORD1>par</KEYWORD1>\r
+      <KEYWORD1>process</KEYWORD1>\r
+      <KEYWORD1>renamedby</KEYWORD1>\r
+      <KEYWORD1>sortnames</KEYWORD1>\r
+      <KEYWORD1>sorts</KEYWORD1>\r
+      <KEYWORD1>specification</KEYWORD1>\r
+      <KEYWORD1>stop</KEYWORD1>\r
+      <KEYWORD1>type</KEYWORD1>\r
+      <KEYWORD1>using</KEYWORD1>\r
+      <KEYWORD1>where</KEYWORD1>\r
+\r
+      <!-- Standard Library Sorts -->\r
+      <KEYWORD2>Bit</KEYWORD2>\r
+      <KEYWORD2>BitString</KEYWORD2>\r
+      <KEYWORD2>Bool</KEYWORD2>\r
+      <KEYWORD2>DecDigit</KEYWORD2>\r
+      <KEYWORD2>DecString</KEYWORD2>\r
+      <KEYWORD2>Element</KEYWORD2>\r
+      <KEYWORD2>FBool</KEYWORD2>\r
+      <KEYWORD2>HexDigit</KEYWORD2>\r
+      <KEYWORD2>HexString</KEYWORD2>\r
+      <KEYWORD2>OctDigit</KEYWORD2>\r
+      <KEYWORD2>Octet</KEYWORD2>\r
+      <KEYWORD2>OctString</KEYWORD2>\r
+      <KEYWORD2>Nat</KEYWORD2>\r
+      <KEYWORD2>NonEmptyString</KEYWORD2>\r
+      <KEYWORD2>OctetString</KEYWORD2>\r
+      <KEYWORD2>Set</KEYWORD2>\r
+      <KEYWORD2>String</KEYWORD2>\r
+\r
+      <!-- Standard Library Types (where differing from Sorts) -->\r
+      <KEYWORD2>BasicNaturalNumber</KEYWORD2>\r
+      <KEYWORD2>BasicNonEmptyString</KEYWORD2>\r
+      <KEYWORD2>BitNatRepr</KEYWORD2>\r
+      <KEYWORD2>Boolean</KEYWORD2>\r
+      <KEYWORD2>FBoolean</KEYWORD2>\r
+      <KEYWORD2>DecNatRepr</KEYWORD2>\r
+      <KEYWORD2>HexNatRepr</KEYWORD2>\r
+      <KEYWORD2>NatRepresentations</KEYWORD2>\r
+      <KEYWORD2>NaturalNumber</KEYWORD2>\r
+      <KEYWORD2>OctNatRepr</KEYWORD2>\r
+      <KEYWORD2>RicherNonEmptyString</KEYWORD2>\r
+      <KEYWORD2>String0</KEYWORD2>\r
+      <KEYWORD2>String1</KEYWORD2>\r
+\r
+      <!-- Standard Library Literals -->\r
+      <LITERAL1>false</LITERAL1>\r
+      <LITERAL1>true</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/lua.xml b/extra/xmode/modes/lua.xml
new file mode 100644 (file)
index 0000000..04f9f76
--- /dev/null
@@ -0,0 +1,238 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+<!-- Lua 5.0 Mode, written by Philipp Janda -->\r
+\r
+<!-- TODO:\r
+  * Autoindent screws up, if { or ( gets typed after the indentNextLines trigger\r
+  -> This is very annoying, so I disabled the automatic indenting in this case!\r
+  -> It should be fixed if you set doubleBracketIndent to "true", but I keep it\r
+     disabled anyway since it is not that useful if you don't have an unindent!\r
+  * Should I use FUNCTION and OPERATOR tags inside of <KEYWORDS>??!!\r
+-->\r
+\r
+<MODE>\r
+  <PROPS>\r
+    <!-- Comments -->\r
+    <PROPERTY NAME="lineComment" VALUE="--"/>\r
+    <PROPERTY NAME="commentStart" VALUE="--[["/>\r
+    <PROPERTY NAME="commentEnd" VALUE="]]"/>\r
+    <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*"/>\r
+    <!-- Auto indent -->\r
+    <PROPERTY NAME="indentOpenBrackets" VALUE="{"/>\r
+    <PROPERTY NAME="indentCloseBrackets" VALUE="}"/>\r
+    <!--\r
+    <PROPERTY NAME="indentNextLines" VALUE=".*((then|else|do|function)).*"/>\r
+    -->\r
+    <PROPERTY NAME="doubleBracketIndent" VALUE="true"/>\r
+  </PROPS>\r
+  <RULES IGNORE_CASE="FALSE" NO_WORD_SEP="_:." HIGHLIGHT_DIGITS="TRUE"\r
+         DIGIT_RE="[\p{Digit}]*(\.[\p{Digit}]*)?([eE][+-]?[\p{Digit}]*)?">\r
+    <!-- Multiline comments -->\r
+    <SPAN TYPE="COMMENT1">\r
+      <BEGIN>--[[</BEGIN>\r
+      <END>]]</END>\r
+    </SPAN>\r
+    <!-- Single line comments -->\r
+    <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>\r
+    <EOL_SPAN AT_LINE_START="TRUE" TYPE="COMMENT2">#!</EOL_SPAN>\r
+    <!-- Simple string literals -->\r
+    <SPAN TYPE="LITERAL1">\r
+      <BEGIN>"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN>\r
+    <SPAN TYPE="LITERAL1">\r
+      <BEGIN>'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN>\r
+    <!-- Multiline string literals -->\r
+    <SPAN TYPE="LITERAL1">\r
+      <BEGIN>[[</BEGIN>\r
+      <END>]]</END>\r
+    </SPAN>\r
+    <!-- Operators -->\r
+    <SEQ TYPE="OPERATOR">+</SEQ>\r
+    <SEQ TYPE="OPERATOR">-</SEQ>\r
+    <SEQ TYPE="OPERATOR">*</SEQ>\r
+    <SEQ TYPE="OPERATOR">/</SEQ>\r
+    <SEQ TYPE="OPERATOR">^</SEQ>\r
+    <SEQ TYPE="OPERATOR">..</SEQ>\r
+    <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+    <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+    <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">==</SEQ>\r
+    <SEQ TYPE="OPERATOR">~=</SEQ>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <!-- Function calls and definitions -->\r
+    <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+       <SEQ TYPE="OPERATOR">)</SEQ>\r
+    <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">{</MARK_PREVIOUS>\r
+       <SEQ TYPE="OPERATOR">}</SEQ>\r
+    <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">"</MARK_PREVIOUS>\r
+       <SEQ TYPE="OPERATOR">"</SEQ>\r
+    <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">'</MARK_PREVIOUS>\r
+       <SEQ TYPE="OPERATOR">'</SEQ>\r
+\r
+    <KEYWORDS>\r
+      <!-- Keywords -->\r
+      <KEYWORD1>do</KEYWORD1>\r
+      <KEYWORD1>end</KEYWORD1>\r
+      <KEYWORD1>while</KEYWORD1>\r
+      <KEYWORD1>repeat</KEYWORD1>\r
+      <KEYWORD1>until</KEYWORD1>\r
+      <KEYWORD1>if</KEYWORD1>\r
+      <KEYWORD1>then</KEYWORD1>\r
+      <KEYWORD1>elseif</KEYWORD1>\r
+      <KEYWORD1>else</KEYWORD1>\r
+      <KEYWORD1>return</KEYWORD1>\r
+      <KEYWORD1>break</KEYWORD1>\r
+      <KEYWORD1>for</KEYWORD1>\r
+      <KEYWORD1>in</KEYWORD1>\r
+      <KEYWORD1>function</KEYWORD1>\r
+      <KEYWORD1>local</KEYWORD1>\r
+      <KEYWORD3>nil</KEYWORD3>\r
+      <KEYWORD3>true</KEYWORD3>\r
+      <KEYWORD3>false</KEYWORD3>\r
+      <KEYWORD1>and</KEYWORD1>\r
+      <KEYWORD1>or</KEYWORD1>\r
+      <KEYWORD1>not</KEYWORD1>\r
+      <!-- Builtin functions or special names -->\r
+      <KEYWORD2>assert</KEYWORD2>\r
+      <KEYWORD2>collectgarbage</KEYWORD2>\r
+      <KEYWORD2>dofile</KEYWORD2>\r
+      <KEYWORD2>error</KEYWORD2>\r
+      <KEYWORD2>_G</KEYWORD2>\r
+      <KEYWORD2>getfenv</KEYWORD2>\r
+      <KEYWORD2>getmetatable</KEYWORD2>\r
+      <KEYWORD2>gcinfo</KEYWORD2>\r
+      <KEYWORD2>ipairs</KEYWORD2>\r
+      <KEYWORD2>loadfile</KEYWORD2>\r
+      <KEYWORD2>loadlib</KEYWORD2>\r
+      <KEYWORD2>loadstring</KEYWORD2>\r
+      <KEYWORD2>next</KEYWORD2>\r
+      <KEYWORD2>pairs</KEYWORD2>\r
+      <KEYWORD2>pcall</KEYWORD2>\r
+      <KEYWORD2>print</KEYWORD2>\r
+      <KEYWORD2>rawequal</KEYWORD2>\r
+      <KEYWORD2>rawget</KEYWORD2>\r
+      <KEYWORD2>rawset</KEYWORD2>\r
+      <KEYWORD2>require</KEYWORD2>\r
+      <KEYWORD2>setfenv</KEYWORD2>\r
+      <KEYWORD2>setmetatable</KEYWORD2>\r
+      <KEYWORD2>tonumber</KEYWORD2>\r
+      <KEYWORD2>tostring</KEYWORD2>\r
+      <KEYWORD2>type</KEYWORD2>\r
+      <KEYWORD2>unpack</KEYWORD2>\r
+      <KEYWORD2>xpcall</KEYWORD2>\r
+      <KEYWORD2>_VERSION</KEYWORD2>\r
+      <KEYWORD2>LUA_PATH</KEYWORD2>\r
+      <KEYWORD2>_LOADED</KEYWORD2>\r
+      <KEYWORD2>_REQUIREDNAME</KEYWORD2>\r
+      <KEYWORD2>_ALERT</KEYWORD2>\r
+      <KEYWORD2>_ERRORMESSAGE</KEYWORD2>\r
+      <KEYWORD2>_PROMPT</KEYWORD2>\r
+      <KEYWORD2>__add</KEYWORD2>\r
+      <KEYWORD2>__sub</KEYWORD2>\r
+      <KEYWORD2>__mul</KEYWORD2>\r
+      <KEYWORD2>__div</KEYWORD2>\r
+      <KEYWORD2>__pow</KEYWORD2>\r
+      <KEYWORD2>__unm</KEYWORD2>\r
+      <KEYWORD2>__concat</KEYWORD2>\r
+      <KEYWORD2>__eq</KEYWORD2>\r
+      <KEYWORD2>__lt</KEYWORD2>\r
+      <KEYWORD2>__le</KEYWORD2>\r
+      <KEYWORD2>__index</KEYWORD2>\r
+      <KEYWORD2>__newindex</KEYWORD2>\r
+      <KEYWORD2>__call</KEYWORD2>\r
+      <KEYWORD2>__metatable</KEYWORD2>\r
+      <KEYWORD2>__mode</KEYWORD2>\r
+      <KEYWORD2>__tostring</KEYWORD2>\r
+      <KEYWORD2>__fenv</KEYWORD2>\r
+      <KEYWORD2>...</KEYWORD2>\r
+      <KEYWORD2>arg</KEYWORD2>\r
+      <KEYWORD2>coroutine.create</KEYWORD2>\r
+      <KEYWORD2>coroutine.resume</KEYWORD2>\r
+      <KEYWORD2>coroutine.status</KEYWORD2>\r
+      <KEYWORD2>coroutine.wrap</KEYWORD2>\r
+      <KEYWORD2>coroutine.yield</KEYWORD2>\r
+      <KEYWORD2>string.byte</KEYWORD2>\r
+      <KEYWORD2>string.char</KEYWORD2>\r
+      <KEYWORD2>string.dump</KEYWORD2>\r
+      <KEYWORD2>string.find</KEYWORD2>\r
+      <KEYWORD2>string.len</KEYWORD2>\r
+      <KEYWORD2>string.lower</KEYWORD2>\r
+      <KEYWORD2>string.rep</KEYWORD2>\r
+      <KEYWORD2>string.sub</KEYWORD2>\r
+      <KEYWORD2>string.upper</KEYWORD2>\r
+      <KEYWORD2>string.format</KEYWORD2>\r
+      <KEYWORD2>string.gfind</KEYWORD2>\r
+      <KEYWORD2>string.gsub</KEYWORD2>\r
+      <KEYWORD2>table.concat</KEYWORD2>\r
+      <KEYWORD2>table.foreach</KEYWORD2>\r
+      <KEYWORD2>table.foreachi</KEYWORD2>\r
+      <KEYWORD2>table.getn</KEYWORD2>\r
+      <KEYWORD2>table.sort</KEYWORD2>\r
+      <KEYWORD2>table.insert</KEYWORD2>\r
+      <KEYWORD2>table.remove</KEYWORD2>\r
+      <KEYWORD2>table.setn</KEYWORD2>\r
+      <KEYWORD2>math.abs</KEYWORD2>\r
+      <KEYWORD2>math.acos</KEYWORD2>\r
+      <KEYWORD2>math.asin</KEYWORD2>\r
+      <KEYWORD2>math.atan</KEYWORD2>\r
+      <KEYWORD2>math.atan2</KEYWORD2>\r
+      <KEYWORD2>math.ceil</KEYWORD2>\r
+      <KEYWORD2>math.cos</KEYWORD2>\r
+      <KEYWORD2>math.deg</KEYWORD2>\r
+      <KEYWORD2>math.exp</KEYWORD2>\r
+      <KEYWORD2>math.floor</KEYWORD2>\r
+      <KEYWORD2>math.log</KEYWORD2>\r
+      <KEYWORD2>math.log10</KEYWORD2>\r
+      <KEYWORD2>math.max</KEYWORD2>\r
+      <KEYWORD2>math.min</KEYWORD2>\r
+      <KEYWORD2>math.mod</KEYWORD2>\r
+      <KEYWORD2>math.pow</KEYWORD2>\r
+      <KEYWORD2>math.rad</KEYWORD2>\r
+      <KEYWORD2>math.sin</KEYWORD2>\r
+      <KEYWORD2>math.sqrt</KEYWORD2>\r
+      <KEYWORD2>math.tan</KEYWORD2>\r
+      <KEYWORD2>math.frexp</KEYWORD2>\r
+      <KEYWORD2>math.ldexp</KEYWORD2>\r
+      <KEYWORD2>math.random</KEYWORD2>\r
+      <KEYWORD2>math.randomseed</KEYWORD2>\r
+      <KEYWORD2>math.pi</KEYWORD2>\r
+      <KEYWORD2>io.close</KEYWORD2>\r
+      <KEYWORD2>io.flush</KEYWORD2>\r
+      <KEYWORD2>io.input</KEYWORD2>\r
+      <KEYWORD2>io.lines</KEYWORD2>\r
+      <KEYWORD2>io.open</KEYWORD2>\r
+      <KEYWORD2>io.read</KEYWORD2>\r
+      <KEYWORD2>io.tmpfile</KEYWORD2>\r
+      <KEYWORD2>io.type</KEYWORD2>\r
+      <KEYWORD2>io.write</KEYWORD2>\r
+      <KEYWORD2>io.stdin</KEYWORD2>\r
+      <KEYWORD2>io.stdout</KEYWORD2>\r
+      <KEYWORD2>io.stderr</KEYWORD2>\r
+      <KEYWORD2>os.clock</KEYWORD2>\r
+      <KEYWORD2>os.date</KEYWORD2>\r
+      <KEYWORD2>os.difftime</KEYWORD2>\r
+      <KEYWORD2>os.execute</KEYWORD2>\r
+      <KEYWORD2>os.exit</KEYWORD2>\r
+      <KEYWORD2>os.getenv</KEYWORD2>\r
+      <KEYWORD2>os.remove</KEYWORD2>\r
+      <KEYWORD2>os.rename</KEYWORD2>\r
+      <KEYWORD2>os.setlocale</KEYWORD2>\r
+      <KEYWORD2>os.time</KEYWORD2>\r
+      <KEYWORD2>os.tmpname</KEYWORD2>\r
+      <KEYWORD2>debug.debug</KEYWORD2>\r
+      <KEYWORD2>debug.gethook</KEYWORD2>\r
+      <KEYWORD2>debug.getinfo</KEYWORD2>\r
+      <KEYWORD2>debug.getlocal</KEYWORD2>\r
+      <KEYWORD2>debug.getupvalue</KEYWORD2>\r
+      <KEYWORD2>debug.setlocal</KEYWORD2>\r
+      <KEYWORD2>debug.setupvalue</KEYWORD2>\r
+      <KEYWORD2>debug.sethook</KEYWORD2>\r
+      <KEYWORD2>debug.traceback</KEYWORD2>\r
+    </KEYWORDS>\r
+  </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/mail.xml b/extra/xmode/modes/mail.xml
new file mode 100644 (file)
index 0000000..ac49069
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE=">" />\r
+               <PROPERTY NAME="noWordSep" VALUE="-_" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="FALSE" NO_WORD_SEP="-_:)">\r
+               <EOL_SPAN AT_LINE_START="TRUE" TYPE="COMMENT3">&gt;&gt;&gt;</EOL_SPAN>\r
+               <EOL_SPAN AT_LINE_START="TRUE" TYPE="COMMENT2">&gt;&gt;</EOL_SPAN>\r
+               <EOL_SPAN AT_LINE_START="TRUE" TYPE="COMMENT1">&gt;</EOL_SPAN>\r
+               <EOL_SPAN AT_LINE_START="TRUE" TYPE="COMMENT1">| </EOL_SPAN>\r
+               <EOL_SPAN AT_LINE_START="TRUE" TYPE="COMMENT1">:</EOL_SPAN>\r
+               <SEQ TYPE="COMMENT2" DELEGATE="SIGNATURE"\r
+                       AT_LINE_START="TRUE">-- </SEQ>\r
+               <SEQ TYPE="KEYWORD1">:-)</SEQ>\r
+               <SEQ TYPE="KEYWORD1">:-(</SEQ>\r
+               <SEQ TYPE="KEYWORD1">:)</SEQ>\r
+               <SEQ TYPE="KEYWORD1">:(</SEQ>\r
+               <SEQ TYPE="KEYWORD1">;-)</SEQ>\r
+               <SEQ TYPE="KEYWORD1">;-(</SEQ>\r
+               <SEQ TYPE="KEYWORD1">;)</SEQ>\r
+               <SEQ TYPE="KEYWORD1">;(</SEQ>\r
+               <MARK_PREVIOUS AT_LINE_START="TRUE" TYPE="LABEL">:</MARK_PREVIOUS>\r
+       </RULES>\r
+       <RULES SET="SIGNATURE" DEFAULT="COMMENT2"/>\r
+       <RULES SET="HEADER" DEFAULT="MARKUP">\r
+               <SPAN NO_LINE_BREAK="TRUE" TYPE="KEYWORD2">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/makefile.xml b/extra/xmode/modes/makefile.xml
new file mode 100644 (file)
index 0000000..3f4fae7
--- /dev/null
@@ -0,0 +1,101 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- Comment -->\r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+               <!-- Function calls -->\r
+               <SPAN_REGEXP TYPE="FUNCTION" HASH_CHAR="$" DELEGATE="MAIN">\r
+                       <BEGIN>\$\([a-zA-Z][\w-]* </BEGIN>\r
+                       <END>)</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- $(...) variables -->\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">\r
+                       <BEGIN>$(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING>\r
+\r
+               <!-- Literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>`</BEGIN>\r
+                       <END>`</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">:=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+=</SEQ>\r
+               <SEQ TYPE="OPERATOR">?=</SEQ>\r
+\r
+               <MARK_PREVIOUS TYPE="LABEL" AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>subst</KEYWORD1>\r
+                       <KEYWORD1>addprefix</KEYWORD1>\r
+                       <KEYWORD1>addsuffix</KEYWORD1>\r
+                       <KEYWORD1>basename</KEYWORD1>\r
+                       <KEYWORD1>dir</KEYWORD1>\r
+                       <KEYWORD1>filter</KEYWORD1>\r
+                       <KEYWORD1>filter-out</KEYWORD1>\r
+                       <KEYWORD1>findstring</KEYWORD1>\r
+                       <KEYWORD1>firstword</KEYWORD1>\r
+                       <KEYWORD1>foreach</KEYWORD1>\r
+                       <KEYWORD1>join</KEYWORD1>\r
+                       <KEYWORD1>notdir</KEYWORD1>\r
+                       <KEYWORD1>origin</KEYWORD1>\r
+                       <KEYWORD1>patsubst</KEYWORD1>\r
+                       <KEYWORD1>shell</KEYWORD1>\r
+                       <KEYWORD1>sort</KEYWORD1>\r
+                       <KEYWORD1>strip</KEYWORD1>\r
+                       <KEYWORD1>suffix</KEYWORD1>\r
+                       <KEYWORD1>wildcard</KEYWORD1>\r
+                       <KEYWORD1>word</KEYWORD1>\r
+                       <KEYWORD1>words</KEYWORD1>\r
+                       <KEYWORD1>ifeq</KEYWORD1>\r
+            <KEYWORD1>ifneq</KEYWORD1>\r
+            <KEYWORD1>else</KEYWORD1>\r
+            <KEYWORD1>endif</KEYWORD1>\r
+            <KEYWORD1>define</KEYWORD1>\r
+            <KEYWORD1>endef</KEYWORD1>\r
+            <KEYWORD1>ifdef</KEYWORD1>\r
+            <KEYWORD1>ifndef</KEYWORD1>\r
+               </KEYWORDS>\r
+\r
+       </RULES>\r
+\r
+       <RULES SET="VARIABLE" ESCAPE="\" IGNORE_CASE="FALSE"\r
+               DEFAULT="KEYWORD2">\r
+               <!-- Comment -->\r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+               <!-- $(...) variables -->\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">\r
+                       <BEGIN>$(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/maple.xml b/extra/xmode/modes/maple.xml
new file mode 100644 (file)
index 0000000..0bc33ca
--- /dev/null
@@ -0,0 +1,735 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- Maple mode, by Jack Perry jeperry@eos.ncsu.edu -->\r
+<!-- Based on commands for Maple 7 -->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+       </PROPS>\r
+\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- Standard literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>`</BEGIN>\r
+                       <END>`</END>\r
+               </SPAN>\r
+               \r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">$</SEQ>\r
+               <SEQ TYPE="OPERATOR">@@</SEQ>\r
+               <SEQ TYPE="OPERATOR">@</SEQ>\r
+               <SEQ TYPE="OPERATOR">||</SEQ>\r
+               <SEQ TYPE="OPERATOR">:=</SEQ>\r
+               <SEQ TYPE="OPERATOR">::</SEQ>\r
+               <SEQ TYPE="OPERATOR">:-</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <!-- Reserved words -->\r
+                       <KEYWORD1>and</KEYWORD1>\r
+                       <KEYWORD1>or</KEYWORD1>\r
+                       <KEYWORD1>xor</KEYWORD1>\r
+                       <KEYWORD1>union</KEYWORD1>\r
+                       <KEYWORD1>intersect</KEYWORD1>\r
+                       <KEYWORD1>minus</KEYWORD1>\r
+                       <KEYWORD1>mod</KEYWORD1>\r
+                       <KEYWORD1>not</KEYWORD1>\r
+                       <KEYWORD1>assuming</KEYWORD1>\r
+                       <KEYWORD1>break</KEYWORD1>\r
+                       <KEYWORD1>by</KEYWORD1>\r
+                       <KEYWORD1>catch</KEYWORD1>\r
+                       <KEYWORD1>description</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>done</KEYWORD1>\r
+                       <KEYWORD1>elif</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>end</KEYWORD1>\r
+                       <KEYWORD1>error</KEYWORD1>\r
+                       <KEYWORD1>export</KEYWORD1>\r
+                       <KEYWORD1>fi</KEYWORD1>\r
+                       <KEYWORD1>finally</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>from</KEYWORD1>\r
+                       <KEYWORD1>global</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>implies</KEYWORD1>\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <KEYWORD1>local</KEYWORD1>\r
+                       <KEYWORD1>module</KEYWORD1>\r
+                       <KEYWORD1>next</KEYWORD1>\r
+                       <KEYWORD1>od</KEYWORD1>\r
+                       <KEYWORD1>option</KEYWORD1>\r
+                       <KEYWORD1>options</KEYWORD1>\r
+                       <KEYWORD1>proc</KEYWORD1>\r
+                       <KEYWORD1>quit</KEYWORD1>\r
+                       <KEYWORD1>read</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>save</KEYWORD1>\r
+                       <KEYWORD1>stop</KEYWORD1>\r
+                       <KEYWORD1>subset</KEYWORD1>\r
+                       <KEYWORD1>then</KEYWORD1>\r
+                       <KEYWORD1>to</KEYWORD1>\r
+                       <KEYWORD1>try</KEYWORD1>\r
+                       <KEYWORD1>use</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+\r
+                       <!-- Standard library functions -->\r
+                       <FUNCTION>about</FUNCTION>\r
+                       <FUNCTION>ans</FUNCTION>\r
+                       <FUNCTION>add</FUNCTION>\r
+                       <FUNCTION>addcoords</FUNCTION>\r
+                       <FUNCTION>additionally</FUNCTION>\r
+                       <FUNCTION>addproperty</FUNCTION>\r
+                       <FUNCTION>addressof</FUNCTION>\r
+                       <FUNCTION>AFactor</FUNCTION>\r
+                       <FUNCTION>AFactors</FUNCTION>\r
+                       <FUNCTION>AIrreduc</FUNCTION>\r
+                       <FUNCTION>AiryAi</FUNCTION>\r
+                       <FUNCTION>AiryAiZeros</FUNCTION>\r
+                       <FUNCTION>AiryBi</FUNCTION>\r
+                       <FUNCTION>AiryBiZeros</FUNCTION>\r
+                       <FUNCTION>algebraic</FUNCTION>\r
+                       <FUNCTION>algsubs</FUNCTION>\r
+                       <FUNCTION>alias</FUNCTION>\r
+                       <FUNCTION>allvalues</FUNCTION>\r
+                       <FUNCTION>anames</FUNCTION>\r
+                       <FUNCTION>AngerJ</FUNCTION>\r
+                       <FUNCTION>antihermitian</FUNCTION>\r
+                       <FUNCTION>antisymm</FUNCTION>\r
+                       <FUNCTION>apply</FUNCTION>\r
+                       <FUNCTION>applyop</FUNCTION>\r
+                       <FUNCTION>applyrule</FUNCTION>\r
+                       <FUNCTION>arccos</FUNCTION>\r
+                       <FUNCTION>arccosh</FUNCTION>\r
+                       <FUNCTION>arccot</FUNCTION>\r
+                       <FUNCTION>arccoth</FUNCTION>\r
+                       <FUNCTION>arccsc</FUNCTION>\r
+                       <FUNCTION>arccsch</FUNCTION>\r
+                       <FUNCTION>arcsec</FUNCTION>\r
+                       <FUNCTION>arcsech</FUNCTION>\r
+                       <FUNCTION>arcsin</FUNCTION>\r
+                       <FUNCTION>arcsinh</FUNCTION>\r
+                       <FUNCTION>arctan</FUNCTION>\r
+                       <FUNCTION>arctanh</FUNCTION>\r
+                       <FUNCTION>argument</FUNCTION>\r
+                       <FUNCTION>Array</FUNCTION>\r
+                       <FUNCTION>array</FUNCTION>\r
+                       <FUNCTION>ArrayDims</FUNCTION>\r
+                       <FUNCTION>ArrayElems</FUNCTION>\r
+                       <FUNCTION>ArrayIndFns</FUNCTION>\r
+                       <FUNCTION>ArrayOptions</FUNCTION>\r
+                       <FUNCTION>assign</FUNCTION>\r
+                       <FUNCTION>assigned</FUNCTION>\r
+                       <FUNCTION>asspar</FUNCTION>\r
+                       <FUNCTION>assume</FUNCTION>\r
+                       <FUNCTION>asympt</FUNCTION>\r
+                       <FUNCTION>attributes</FUNCTION>\r
+                       <FUNCTION>band</FUNCTION>\r
+                       <FUNCTION>Berlekamp</FUNCTION>\r
+                       <FUNCTION>bernoulli</FUNCTION>\r
+                       <FUNCTION>bernstein</FUNCTION>\r
+                       <FUNCTION>BesselI</FUNCTION>\r
+                       <FUNCTION>BesselJ</FUNCTION>\r
+                       <FUNCTION>BesselJZeros</FUNCTION>\r
+                       <FUNCTION>BesselK</FUNCTION>\r
+                       <FUNCTION>BesselY</FUNCTION>\r
+                       <FUNCTION>BesselYZeros</FUNCTION>\r
+                       <FUNCTION>Beta</FUNCTION>\r
+                       <FUNCTION>branches</FUNCTION>\r
+                       <FUNCTION>C</FUNCTION>\r
+                       <FUNCTION>cat</FUNCTION>\r
+                       <FUNCTION>ceil</FUNCTION>\r
+                       <FUNCTION>changecoords</FUNCTION>\r
+                       <FUNCTION>charfcn</FUNCTION>\r
+                       <FUNCTION>ChebyshevT</FUNCTION>\r
+                       <FUNCTION>ChebyShevU</FUNCTION>\r
+                       <FUNCTION>CheckArgs</FUNCTION>\r
+                       <FUNCTION>Chi</FUNCTION>\r
+                       <FUNCTION>chrem</FUNCTION>\r
+                       <FUNCTION>Ci</FUNCTION>\r
+                       <FUNCTION>close</FUNCTION>\r
+                       <FUNCTION>coeff</FUNCTION>\r
+                       <FUNCTION>coeffs</FUNCTION>\r
+                       <FUNCTION>coeftayl</FUNCTION>\r
+                       <FUNCTION>collect</FUNCTION>\r
+                       <FUNCTION>combine</FUNCTION>\r
+                       <FUNCTION>comparray</FUNCTION>\r
+                       <FUNCTION>compiletable</FUNCTION>\r
+                       <FUNCTION>compoly</FUNCTION>\r
+                       <FUNCTION>CompSeq</FUNCTION>\r
+                       <FUNCTION>conjugate</FUNCTION>\r
+                       <FUNCTION>constant</FUNCTION>\r
+                       <FUNCTION>Content</FUNCTION>\r
+                       <FUNCTION>content</FUNCTION>\r
+                       <FUNCTION>convergs</FUNCTION>\r
+                       <FUNCTION>convert</FUNCTION>\r
+                       <FUNCTION>coords</FUNCTION>\r
+                       <FUNCTION>copy</FUNCTION>\r
+                       <FUNCTION>CopySign</FUNCTION>\r
+                       <FUNCTION>cos</FUNCTION>\r
+                       <FUNCTION>cosh</FUNCTION>\r
+                       <FUNCTION>cot</FUNCTION>\r
+                       <FUNCTION>coth</FUNCTION>\r
+                       <FUNCTION>coulditbe</FUNCTION>\r
+                       <FUNCTION>csc</FUNCTION>\r
+                       <FUNCTION>csch</FUNCTION>\r
+                       <FUNCTION>csgn</FUNCTION>\r
+                       <FUNCTION>currentdir</FUNCTION>\r
+                       <FUNCTION>curry</FUNCTION>\r
+                       <FUNCTION>CylinderD</FUNCTION>\r
+                       <FUNCTION>CylinderU</FUNCTION>\r
+                       <FUNCTION>CylinderV</FUNCTION>\r
+                       <FUNCTION>D</FUNCTION>\r
+                       <FUNCTION>dawson</FUNCTION>\r
+                       <FUNCTION>Default0</FUNCTION>\r
+                       <FUNCTION>DefaultOverflow</FUNCTION>\r
+                       <FUNCTION>DefaultUnderflow</FUNCTION>\r
+                       <FUNCTION>define</FUNCTION>\r
+                       <FUNCTION>define_external</FUNCTION>\r
+                       <FUNCTION>degree</FUNCTION>\r
+                       <FUNCTION>denom</FUNCTION>\r
+                       <FUNCTION>depends</FUNCTION>\r
+                       <FUNCTION>DESol</FUNCTION>\r
+                       <FUNCTION>Det</FUNCTION>\r
+                       <FUNCTION>diagon</FUNCTION>\r
+                       <FUNCTION>Diff</FUNCTION>\r
+                       <FUNCTION>diff</FUNCTION>\r
+                       <FUNCTION>diffop</FUNCTION>\r
+                       <FUNCTION>Digits</FUNCTION>\r
+                       <FUNCTION>dilog</FUNCTION>\r
+                       <FUNCTION>dinterp</FUNCTION>\r
+                       <FUNCTION>Dirac</FUNCTION>\r
+                       <FUNCTION>disassemble</FUNCTION>\r
+                       <FUNCTION>discont</FUNCTION>\r
+                       <FUNCTION>discrim</FUNCTION>\r
+                       <FUNCTION>dismantle</FUNCTION>\r
+                       <FUNCTION>DistDeg</FUNCTION>\r
+                       <FUNCTION>Divide</FUNCTION>\r
+                       <FUNCTION>divide</FUNCTION>\r
+                       <FUNCTION>dsolve</FUNCTION>\r
+                       <FUNCTION>efficiency</FUNCTION>\r
+                       <FUNCTION>Ei</FUNCTION>\r
+                       <FUNCTION>Eigenvals</FUNCTION>\r
+                       <FUNCTION>eliminate</FUNCTION>\r
+                       <FUNCTION>ellipsoid</FUNCTION>\r
+                       <FUNCTION>EllipticCE</FUNCTION>\r
+                       <FUNCTION>EllipticCK</FUNCTION>\r
+                       <FUNCTION>EllipticCPi</FUNCTION>\r
+                       <FUNCTION>EllipticE</FUNCTION>\r
+                       <FUNCTION>EllipticF</FUNCTION>\r
+                       <FUNCTION>EllipticK</FUNCTION>\r
+                       <FUNCTION>EllipticModulus</FUNCTION>\r
+                       <FUNCTION>EllipticNome</FUNCTION>\r
+                       <FUNCTION>EllipticPi</FUNCTION>\r
+                       <FUNCTION>elliptic_int</FUNCTION>\r
+                       <FUNCTION>entries</FUNCTION>\r
+                       <FUNCTION>erf</FUNCTION>\r
+                       <FUNCTION>erfc</FUNCTION>\r
+                       <FUNCTION>erfi</FUNCTION>\r
+                       <FUNCTION>euler</FUNCTION>\r
+                       <FUNCTION>eulermac</FUNCTION>\r
+                       <FUNCTION>Eval</FUNCTION>\r
+                       <FUNCTION>eval</FUNCTION>\r
+                       <FUNCTION>evala</FUNCTION>\r
+                       <FUNCTION>evalapply</FUNCTION>\r
+                       <FUNCTION>evalb</FUNCTION>\r
+                       <FUNCTION>evalc</FUNCTION>\r
+                       <FUNCTION>evalf</FUNCTION>\r
+                       <FUNCTION>evalfint</FUNCTION>\r
+                       <FUNCTION>evalhf</FUNCTION>\r
+                       <FUNCTION>evalm</FUNCTION>\r
+                       <FUNCTION>evaln</FUNCTION>\r
+                       <FUNCTION>evalr</FUNCTION>\r
+                       <FUNCTION>evalrC</FUNCTION>\r
+                       <FUNCTION>events</FUNCTION>\r
+                       <FUNCTION>Excel</FUNCTION>\r
+                       <FUNCTION>exists</FUNCTION>\r
+                       <FUNCTION>exp</FUNCTION>\r
+                       <FUNCTION>Expand</FUNCTION>\r
+                       <FUNCTION>expand</FUNCTION>\r
+                       <FUNCTION>expandoff</FUNCTION>\r
+                       <FUNCTION>expandon</FUNCTION>\r
+                       <FUNCTION>exports</FUNCTION>\r
+                       <FUNCTION>extract</FUNCTION>\r
+                       <FUNCTION>extrema</FUNCTION>\r
+                       <FUNCTION>Factor</FUNCTION>\r
+                       <FUNCTION>factor</FUNCTION>\r
+                       <FUNCTION>Factors</FUNCTION>\r
+                       <FUNCTION>factors</FUNCTION>\r
+                       <FUNCTION>fclose</FUNCTION>\r
+                       <FUNCTION>fdiscont</FUNCTION>\r
+                       <FUNCTION>feof</FUNCTION>\r
+                       <FUNCTION>fflush</FUNCTION>\r
+                       <FUNCTION>FFT</FUNCTION>\r
+                       <FUNCTION>filepos</FUNCTION>\r
+                       <FUNCTION>fixdiv</FUNCTION>\r
+                       <FUNCTION>float</FUNCTION>\r
+                       <FUNCTION>floor</FUNCTION>\r
+                       <FUNCTION>fnormal</FUNCTION>\r
+                       <FUNCTION>fold</FUNCTION>\r
+                       <FUNCTION>fopen</FUNCTION>\r
+                       <FUNCTION>forall</FUNCTION>\r
+                       <FUNCTION>forget</FUNCTION>\r
+                       <FUNCTION>fprintf</FUNCTION>\r
+                       <FUNCTION>frac</FUNCTION>\r
+                       <FUNCTION>freeze</FUNCTION>\r
+                       <FUNCTION>frem</FUNCTION>\r
+                       <FUNCTION>fremove</FUNCTION>\r
+                       <FUNCTION>FresnelC</FUNCTION>\r
+                       <FUNCTION>Fresnelf</FUNCTION>\r
+                       <FUNCTION>Fresnelg</FUNCTION>\r
+                       <FUNCTION>FresnelS</FUNCTION>\r
+                       <FUNCTION>FromInert</FUNCTION>\r
+                       <FUNCTION>frontend</FUNCTION>\r
+                       <FUNCTION>fscanf</FUNCTION>\r
+                       <FUNCTION>fsolve</FUNCTION>\r
+                       <FUNCTION>galois</FUNCTION>\r
+                       <FUNCTION>GAMMA</FUNCTION>\r
+                       <FUNCTION>GaussAGM</FUNCTION>\r
+                       <FUNCTION>Gausselim</FUNCTION>\r
+                       <FUNCTION>Gaussjord</FUNCTION>\r
+                       <FUNCTION>gc</FUNCTION>\r
+                       <FUNCTION>Gcd</FUNCTION>\r
+                       <FUNCTION>gcd</FUNCTION>\r
+                       <FUNCTION>Gcdex</FUNCTION>\r
+                       <FUNCTION>gcdex</FUNCTION>\r
+                       <FUNCTION>GegenbauerC</FUNCTION>\r
+                       <FUNCTION>genpoly</FUNCTION>\r
+                       <FUNCTION>getenv</FUNCTION>\r
+                       <FUNCTION>GetResultDataType</FUNCTION>\r
+                       <FUNCTION>GetResultShape</FUNCTION>\r
+                       <FUNCTION>GF</FUNCTION>\r
+                       <FUNCTION>Greek</FUNCTION>\r
+                       <FUNCTION>HankelH1</FUNCTION>\r
+                       <FUNCTION>HankelH2</FUNCTION>\r
+                       <FUNCTION>harmonic</FUNCTION>\r
+                       <FUNCTION>has</FUNCTION>\r
+                       <FUNCTION>hasfun</FUNCTION>\r
+                       <FUNCTION>hasoption</FUNCTION>\r
+                       <FUNCTION>hastype</FUNCTION>\r
+                       <FUNCTION>heap</FUNCTION>\r
+                       <FUNCTION>Heaviside</FUNCTION>\r
+                       <FUNCTION>Hermite</FUNCTION>\r
+                       <FUNCTION>HermiteH</FUNCTION>\r
+                       <FUNCTION>hermitian</FUNCTION>\r
+                       <FUNCTION>Hessenberg</FUNCTION>\r
+                       <FUNCTION>hfarray</FUNCTION>\r
+                       <FUNCTION>history</FUNCTION>\r
+                       <FUNCTION>hypergeom</FUNCTION>\r
+                       <FUNCTION>icontent</FUNCTION>\r
+                       <FUNCTION>identity</FUNCTION>\r
+                       <FUNCTION>IEEEdiffs</FUNCTION>\r
+                       <FUNCTION>ifactor</FUNCTION>\r
+                       <FUNCTION>ifactors</FUNCTION>\r
+                       <FUNCTION>iFFT</FUNCTION>\r
+                       <FUNCTION>igcd</FUNCTION>\r
+                       <FUNCTION>igcdex</FUNCTION>\r
+                       <FUNCTION>ilcm</FUNCTION>\r
+                       <FUNCTION>ilog10</FUNCTION>\r
+                       <FUNCTION>ilog2</FUNCTION>\r
+                       <FUNCTION>ilog</FUNCTION>\r
+                       <FUNCTION>Im</FUNCTION>\r
+                       <FUNCTION>implicitdiff</FUNCTION>\r
+                       <FUNCTION>ImportMatrix</FUNCTION>\r
+                       <FUNCTION>ImportVector</FUNCTION>\r
+                       <FUNCTION>indets</FUNCTION>\r
+                       <FUNCTION>index</FUNCTION>\r
+                       <FUNCTION>indexed</FUNCTION>\r
+                       <FUNCTION>indices</FUNCTION>\r
+                       <FUNCTION>inifcn</FUNCTION>\r
+                       <FUNCTION>ininame</FUNCTION>\r
+                       <FUNCTION>initialcondition</FUNCTION>\r
+                       <FUNCTION>initialize</FUNCTION>\r
+                       <FUNCTION>insert</FUNCTION>\r
+                       <FUNCTION>int</FUNCTION>\r
+                       <FUNCTION>intat</FUNCTION>\r
+                       <FUNCTION>interface</FUNCTION>\r
+                       <FUNCTION>Interp</FUNCTION>\r
+                       <FUNCTION>interp</FUNCTION>\r
+                       <FUNCTION>Inverse</FUNCTION>\r
+                       <FUNCTION>invfunc</FUNCTION>\r
+                       <FUNCTION>invztrans</FUNCTION>\r
+                       <FUNCTION>iostatus</FUNCTION>\r
+                       <FUNCTION>iperfpow</FUNCTION>\r
+                       <FUNCTION>iquo</FUNCTION>\r
+                       <FUNCTION>iratrecon</FUNCTION>\r
+                       <FUNCTION>irem</FUNCTION>\r
+                       <FUNCTION>iroot</FUNCTION>\r
+                       <FUNCTION>Irreduc</FUNCTION>\r
+                       <FUNCTION>irreduc</FUNCTION>\r
+                       <FUNCTION>is</FUNCTION>\r
+                       <FUNCTION>iscont</FUNCTION>\r
+                       <FUNCTION>isdifferential</FUNCTION>\r
+                       <FUNCTION>IsMatrixShape</FUNCTION>\r
+                       <FUNCTION>isolate</FUNCTION>\r
+                       <FUNCTION>isolve</FUNCTION>\r
+                       <FUNCTION>ispoly</FUNCTION>\r
+                       <FUNCTION>isprime</FUNCTION>\r
+                       <FUNCTION>isqrfree</FUNCTION>\r
+                       <FUNCTION>isqrt</FUNCTION>\r
+                       <FUNCTION>issqr</FUNCTION>\r
+                       <FUNCTION>ithprime</FUNCTION>\r
+                       <FUNCTION>JacobiAM</FUNCTION>\r
+                       <FUNCTION>JacobiCD</FUNCTION>\r
+                       <FUNCTION>JacobiCN</FUNCTION>\r
+                       <FUNCTION>JacobiCS</FUNCTION>\r
+                       <FUNCTION>JacobiDC</FUNCTION>\r
+                       <FUNCTION>JacobiDN</FUNCTION>\r
+                       <FUNCTION>JacobiDS</FUNCTION>\r
+                       <FUNCTION>JacobiNC</FUNCTION>\r
+                       <FUNCTION>JacobiND</FUNCTION>\r
+                       <FUNCTION>JacobiNS</FUNCTION>\r
+                       <FUNCTION>JacobiP</FUNCTION>\r
+                       <FUNCTION>JacobiSC</FUNCTION>\r
+                       <FUNCTION>JacobiSD</FUNCTION>\r
+                       <FUNCTION>JacobiSN</FUNCTION>\r
+                       <FUNCTION>JacobiTheta1</FUNCTION>\r
+                       <FUNCTION>JacobiTheta2</FUNCTION>\r
+                       <FUNCTION>JacobiTheta3</FUNCTION>\r
+                       <FUNCTION>JacobiTheta4</FUNCTION>\r
+                       <FUNCTION>JacobiZeta</FUNCTION>\r
+                       <FUNCTION>KelvinBei</FUNCTION>\r
+                       <FUNCTION>KelvinBer</FUNCTION>\r
+                       <FUNCTION>KelvinHei</FUNCTION>\r
+                       <FUNCTION>KelvinHer</FUNCTION>\r
+                       <FUNCTION>KelvinKei</FUNCTION>\r
+                       <FUNCTION>KelvinKer</FUNCTION>\r
+                       <FUNCTION>KummerM</FUNCTION>\r
+                       <FUNCTION>KummerU</FUNCTION>\r
+                       <FUNCTION>LaguerreL</FUNCTION>\r
+                       <FUNCTION>LambertW</FUNCTION>\r
+                       <FUNCTION>latex</FUNCTION>\r
+                       <FUNCTION>lattice</FUNCTION>\r
+                       <FUNCTION>lcm</FUNCTION>\r
+                       <FUNCTION>Lcm</FUNCTION>\r
+                       <FUNCTION>lcoeff</FUNCTION>\r
+                       <FUNCTION>leadterm</FUNCTION>\r
+                       <FUNCTION>LegendreP</FUNCTION>\r
+                       <FUNCTION>LegendreQ</FUNCTION>\r
+                       <FUNCTION>length</FUNCTION>\r
+                       <FUNCTION>LerchPhi</FUNCTION>\r
+                       <FUNCTION>lexorder</FUNCTION>\r
+                       <FUNCTION>lhs</FUNCTION>\r
+                       <FUNCTION>CLi</FUNCTION>\r
+                       <FUNCTION>Limit</FUNCTION>\r
+                       <FUNCTION>limit</FUNCTION>\r
+                       <FUNCTION>Linsolve</FUNCTION>\r
+                       <FUNCTION>ln</FUNCTION>\r
+                       <FUNCTION>lnGAMMA</FUNCTION>\r
+                       <FUNCTION>log</FUNCTION>\r
+                       <FUNCTION>log10</FUNCTION>\r
+                       <FUNCTION>LommelS1</FUNCTION>\r
+                       <FUNCTION>Lommels2</FUNCTION>\r
+                       <FUNCTION>lprint</FUNCTION>\r
+                       <FUNCTION>map</FUNCTION>\r
+                       <FUNCTION>map2</FUNCTION>\r
+                       <FUNCTION>Maple_floats</FUNCTION>\r
+                       <FUNCTION>match</FUNCTION>\r
+                       <FUNCTION>MatlabMatrix</FUNCTION>\r
+                       <FUNCTION>Matrix</FUNCTION>\r
+                       <FUNCTION>matrix</FUNCTION>\r
+                       <FUNCTION>MatrixOptions</FUNCTION>\r
+                       <FUNCTION>max</FUNCTION>\r
+                       <FUNCTION>maximize</FUNCTION>\r
+                       <FUNCTION>maxnorm</FUNCTION>\r
+                       <FUNCTION>maxorder</FUNCTION>\r
+                       <FUNCTION>MeijerG</FUNCTION>\r
+                       <FUNCTION>member</FUNCTION>\r
+                       <FUNCTION>min</FUNCTION>\r
+                       <FUNCTION>minimize</FUNCTION>\r
+                       <FUNCTION>mkdir</FUNCTION>\r
+                       <FUNCTION>ModifiedMeijerG</FUNCTION>\r
+                       <FUNCTION>modp</FUNCTION>\r
+                       <FUNCTION>modp1</FUNCTION>\r
+                       <FUNCTION>modp2</FUNCTION>\r
+                       <FUNCTION>modpol</FUNCTION>\r
+                       <FUNCTION>mods</FUNCTION>\r
+                       <FUNCTION>module</FUNCTION>\r
+                       <FUNCTION>MOLS</FUNCTION>\r
+                       <FUNCTION>msolve</FUNCTION>\r
+                       <FUNCTION>mtaylor</FUNCTION>\r
+                       <FUNCTION>mul</FUNCTION>\r
+                       <FUNCTION>NextAfter</FUNCTION>\r
+                       <FUNCTION>nextprime</FUNCTION>\r
+                       <FUNCTION>nops</FUNCTION>\r
+                       <FUNCTION>norm</FUNCTION>\r
+                       <FUNCTION>norm</FUNCTION>\r
+                       <FUNCTION>Normal</FUNCTION>\r
+                       <FUNCTION>normal</FUNCTION>\r
+                       <FUNCTION>nprintf</FUNCTION>\r
+                       <FUNCTION>Nullspace</FUNCTION>\r
+                       <FUNCTION>numboccur</FUNCTION>\r
+                       <FUNCTION>numer</FUNCTION>\r
+                       <FUNCTION>NumericClass</FUNCTION>\r
+                       <FUNCTION>NumericEvent</FUNCTION>\r
+                       <FUNCTION>NumericEventHandler</FUNCTION>\r
+                       <FUNCTION>NumericException</FUNCTION>\r
+                       <FUNCTION>numerics</FUNCTION>\r
+                       <FUNCTION>NumericStatus</FUNCTION>\r
+                       <FUNCTION>odetest</FUNCTION>\r
+                       <FUNCTION>op</FUNCTION>\r
+                       <FUNCTION>open</FUNCTION>\r
+                       <FUNCTION>order</FUNCTION>\r
+                       <FUNCTION>OrderedNE</FUNCTION>\r
+                       <FUNCTION>parse</FUNCTION>\r
+                       <FUNCTION>patmatch</FUNCTION>\r
+                       <FUNCTION>pclose</FUNCTION>\r
+                       <FUNCTION>PDEplot_options</FUNCTION>\r
+                       <FUNCTION>pdesolve</FUNCTION>\r
+                       <FUNCTION>pdetest</FUNCTION>\r
+                       <FUNCTION>pdsolve</FUNCTION>\r
+                       <FUNCTION>piecewise</FUNCTION>\r
+                       <FUNCTION>plot</FUNCTION>\r
+                       <FUNCTION>plot3d</FUNCTION>\r
+                       <FUNCTION>plotsetup</FUNCTION>\r
+                       <FUNCTION>pochhammer</FUNCTION>\r
+                       <FUNCTION>pointto</FUNCTION>\r
+                       <FUNCTION>poisson</FUNCTION>\r
+                       <FUNCTION>polar</FUNCTION>\r
+                       <FUNCTION>polylog</FUNCTION>\r
+                       <FUNCTION>polynom</FUNCTION>\r
+                       <FUNCTION>Power</FUNCTION>\r
+                       <FUNCTION>Powmod</FUNCTION>\r
+                       <FUNCTION>powmod</FUNCTION>\r
+                       <FUNCTION>Prem</FUNCTION>\r
+                       <FUNCTION>prem</FUNCTION>\r
+                       <FUNCTION>Preprocessor</FUNCTION>\r
+                       <FUNCTION>prevprime</FUNCTION>\r
+                       <FUNCTION>Primitive</FUNCTION>\r
+                       <FUNCTION>Primpart</FUNCTION>\r
+                       <FUNCTION>primpart</FUNCTION>\r
+                       <FUNCTION>print</FUNCTION>\r
+                       <FUNCTION>printf</FUNCTION>\r
+                       <FUNCTION>ProbSplit</FUNCTION>\r
+                       <FUNCTION>procbody</FUNCTION>\r
+                       <FUNCTION>ProcessOptions</FUNCTION>\r
+                       <FUNCTION>procmake</FUNCTION>\r
+                       <FUNCTION>Product</FUNCTION>\r
+                       <FUNCTION>product</FUNCTION>\r
+                       <FUNCTION>proot</FUNCTION>\r
+                       <FUNCTION>property</FUNCTION>\r
+                       <FUNCTION>protect</FUNCTION>\r
+                       <FUNCTION>Psi</FUNCTION>\r
+                       <FUNCTION>psqrt</FUNCTION>\r
+                       <FUNCTION>queue</FUNCTION>\r
+                       <FUNCTION>Quo</FUNCTION>\r
+                       <FUNCTION>quo</FUNCTION>\r
+                       <FUNCTION>radfield</FUNCTION>\r
+                       <FUNCTION>radnormal</FUNCTION>\r
+                       <FUNCTION>radsimp</FUNCTION>\r
+                       <FUNCTION>rand</FUNCTION>\r
+                       <FUNCTION>randomize</FUNCTION>\r
+                       <FUNCTION>Randpoly</FUNCTION>\r
+                       <FUNCTION>randpoly</FUNCTION>\r
+                       <FUNCTION>Randprime</FUNCTION>\r
+                       <FUNCTION>range</FUNCTION>\r
+                       <FUNCTION>ratinterp</FUNCTION>\r
+                       <FUNCTION>rationalize</FUNCTION>\r
+                       <FUNCTION>Ratrecon</FUNCTION>\r
+                       <FUNCTION>ratrecon</FUNCTION>\r
+                       <FUNCTION>Re</FUNCTION>\r
+                       <FUNCTION>readbytes</FUNCTION>\r
+                       <FUNCTION>readdata</FUNCTION>\r
+                       <FUNCTION>readlib</FUNCTION>\r
+                       <FUNCTION>readline</FUNCTION>\r
+                       <FUNCTION>readstat</FUNCTION>\r
+                       <FUNCTION>realroot</FUNCTION>\r
+                       <FUNCTION>Record</FUNCTION>\r
+                       <FUNCTION>Reduce</FUNCTION>\r
+                       <FUNCTION>references</FUNCTION>\r
+                       <FUNCTION>release</FUNCTION>\r
+                       <FUNCTION>Rem</FUNCTION>\r
+                       <FUNCTION>rem</FUNCTION>\r
+                       <FUNCTION>remove</FUNCTION>\r
+                       <FUNCTION>repository</FUNCTION>\r
+                       <FUNCTION>requires</FUNCTION>\r
+                       <FUNCTION>residue</FUNCTION>\r
+                       <FUNCTION>RESol</FUNCTION>\r
+                       <FUNCTION>Resultant</FUNCTION>\r
+                       <FUNCTION>resultant</FUNCTION>\r
+                       <FUNCTION>rhs</FUNCTION>\r
+                       <FUNCTION>rmdir</FUNCTION>\r
+                       <FUNCTION>root</FUNCTION>\r
+                       <FUNCTION>rootbound</FUNCTION>\r
+                       <FUNCTION>RootOf</FUNCTION>\r
+                       <FUNCTION>Roots</FUNCTION>\r
+                       <FUNCTION>roots</FUNCTION>\r
+                       <FUNCTION>round</FUNCTION>\r
+                       <FUNCTION>Rounding</FUNCTION>\r
+                       <FUNCTION>rsolve</FUNCTION>\r
+                       <FUNCTION>rtable</FUNCTION>\r
+                       <FUNCTION>rtable_algebra</FUNCTION>\r
+                       <FUNCTION>rtable_dims</FUNCTION>\r
+                       <FUNCTION>rtable_elems</FUNCTION>\r
+                       <FUNCTION>rtable_indfns</FUNCTION>\r
+                       <FUNCTION>rtable_options</FUNCTION>\r
+                       <FUNCTION>rtable_printf</FUNCTION>\r
+                       <FUNCTION>rtable_scanf</FUNCTION>\r
+                       <FUNCTION>SampleRTable</FUNCTION>\r
+                       <FUNCTION>savelib</FUNCTION>\r
+                       <FUNCTION>Scale10</FUNCTION>\r
+                       <FUNCTION>Scale2</FUNCTION>\r
+                       <FUNCTION>scalar</FUNCTION>\r
+                       <FUNCTION>scan</FUNCTION>\r
+                       <FUNCTION>scanf</FUNCTION>\r
+                       <FUNCTION>SearchText</FUNCTION>\r
+                       <FUNCTION>searchtext</FUNCTION>\r
+                       <FUNCTION>sec</FUNCTION>\r
+                       <FUNCTION>sech</FUNCTION>\r
+                       <FUNCTION>select</FUNCTION>\r
+                       <FUNCTION>selectfun</FUNCTION>\r
+                       <FUNCTION>selectremove</FUNCTION>\r
+                       <FUNCTION>seq</FUNCTION>\r
+                       <FUNCTION>series</FUNCTION>\r
+                       <FUNCTION>setattribute</FUNCTION>\r
+                       <FUNCTION>SFloatExponent</FUNCTION>\r
+                       <FUNCTION>SFloatMantissa</FUNCTION>\r
+                       <FUNCTION>shale</FUNCTION>\r
+                       <FUNCTION>Shi</FUNCTION>\r
+                       <FUNCTION>showprofile</FUNCTION>\r
+                       <FUNCTION>showtime</FUNCTION>\r
+                       <FUNCTION>Si</FUNCTION>\r
+                       <FUNCTION>sign</FUNCTION>\r
+                       <FUNCTION>signum</FUNCTION>\r
+                       <FUNCTION>Simplify</FUNCTION>\r
+                       <FUNCTION>simplify</FUNCTION>\r
+                       <FUNCTION>sin</FUNCTION>\r
+                       <FUNCTION>sinh</FUNCTION>\r
+                       <FUNCTION>singular</FUNCTION>\r
+                       <FUNCTION>sinterp</FUNCTION>\r
+                       <FUNCTION>smartplot3d</FUNCTION>\r
+                       <FUNCTION>Smith</FUNCTION>\r
+                       <FUNCTION>solve</FUNCTION>\r
+                       <FUNCTION>solvefor</FUNCTION>\r
+                       <FUNCTION>sort</FUNCTION>\r
+                       <FUNCTION>sparse</FUNCTION>\r
+                       <FUNCTION>spec_eval_rule</FUNCTION>\r
+                       <FUNCTION>spline</FUNCTION>\r
+                       <FUNCTION>spreadsheet</FUNCTION>\r
+                       <FUNCTION>SPrem</FUNCTION>\r
+                       <FUNCTION>sprem</FUNCTION>\r
+                       <FUNCTION>sprintf</FUNCTION>\r
+                       <FUNCTION>Sqrfree</FUNCTION>\r
+                       <FUNCTION>sqrfree</FUNCTION>\r
+                       <FUNCTION>sqrt</FUNCTION>\r
+                       <FUNCTION>sscanf</FUNCTION>\r
+                       <FUNCTION>Ssi</FUNCTION>\r
+                       <FUNCTION>ssystem</FUNCTION>\r
+                       <FUNCTION>storage</FUNCTION>\r
+                       <FUNCTION>string</FUNCTION>\r
+                       <FUNCTION>StruveH</FUNCTION>\r
+                       <FUNCTION>StruveL</FUNCTION>\r
+                       <FUNCTION>sturm</FUNCTION>\r
+                       <FUNCTION>sturmseq</FUNCTION>\r
+                       <FUNCTION>subs</FUNCTION>\r
+                       <FUNCTION>subsindets</FUNCTION>\r
+                       <FUNCTION>subsop</FUNCTION>\r
+                       <FUNCTION>substring</FUNCTION>\r
+                       <FUNCTION>subtype</FUNCTION>\r
+                       <FUNCTION>Sum</FUNCTION>\r
+                       <FUNCTION>sum</FUNCTION>\r
+                       <FUNCTION>surd</FUNCTION>\r
+                       <FUNCTION>Svd</FUNCTION>\r
+                       <FUNCTION>symmdiff</FUNCTION>\r
+                       <FUNCTION>symmetric</FUNCTION>\r
+                       <FUNCTION>syntax</FUNCTION>\r
+                       <FUNCTION>system</FUNCTION>\r
+                       <FUNCTION>table</FUNCTION>\r
+                       <FUNCTION>tan</FUNCTION>\r
+                       <FUNCTION>tang</FUNCTION>\r
+                       <FUNCTION>taylor</FUNCTION>\r
+                       <FUNCTION>testeq</FUNCTION>\r
+                       <FUNCTION>testfloat</FUNCTION>\r
+                       <FUNCTION>TEXT</FUNCTION>\r
+                       <FUNCTION>thaw</FUNCTION>\r
+                       <FUNCTION>thiele</FUNCTION>\r
+                       <FUNCTION>time</FUNCTION>\r
+                       <FUNCTION>timelimit</FUNCTION>\r
+                       <FUNCTION>ToInert</FUNCTION>\r
+                       <FUNCTION>TopologicalSort</FUNCTION>\r
+                       <FUNCTION>traperror</FUNCTION>\r
+                       <FUNCTION>triangular</FUNCTION>\r
+                       <FUNCTION>trigsubs</FUNCTION>\r
+                       <FUNCTION>trunc</FUNCTION>\r
+                       <FUNCTION>type</FUNCTION>\r
+                       <FUNCTION>typematch</FUNCTION>\r
+                       <FUNCTION>unames</FUNCTION>\r
+                       <FUNCTION>unapply</FUNCTION>\r
+                       <FUNCTION>unassign</FUNCTION>\r
+                       <FUNCTION>undefined</FUNCTION>\r
+                       <FUNCTION>unit</FUNCTION>\r
+                       <FUNCTION>Unordered</FUNCTION>\r
+                       <FUNCTION>unprotect</FUNCTION>\r
+                       <FUNCTION>update</FUNCTION>\r
+                       <FUNCTION>UseHardwareFloats</FUNCTION>\r
+                       <FUNCTION>userinfo</FUNCTION>\r
+                       <FUNCTION>value</FUNCTION>\r
+                       <FUNCTION>Vector</FUNCTION>\r
+                       <FUNCTION>vector</FUNCTION>\r
+                       <FUNCTION>verify</FUNCTION>\r
+                       <FUNCTION>WeierstrassP</FUNCTION>\r
+                       <FUNCTION>WeberE</FUNCTION>\r
+                       <FUNCTION>WeierstrassPPrime</FUNCTION>\r
+                       <FUNCTION>WeierstrassSigma</FUNCTION>\r
+                       <FUNCTION>WeierstrassZeta</FUNCTION>\r
+                       <FUNCTION>whattype</FUNCTION>\r
+                       <FUNCTION>WhittakerM</FUNCTION>\r
+                       <FUNCTION>WhittakerW</FUNCTION>\r
+                       <FUNCTION>with</FUNCTION>\r
+                       <FUNCTION>worksheet</FUNCTION>\r
+                       <FUNCTION>writebytes</FUNCTION>\r
+                       <FUNCTION>writedata</FUNCTION>\r
+                       <FUNCTION>writeline</FUNCTION>\r
+                       <FUNCTION>writestat</FUNCTION>\r
+                       <FUNCTION>writeto</FUNCTION>\r
+                       <FUNCTION>zero</FUNCTION>\r
+                       <FUNCTION>Zeta</FUNCTION>\r
+                       <FUNCTION>zip</FUNCTION>\r
+                       <FUNCTION>ztrans</FUNCTION>\r
+\r
+                       <!-- Initially known names -->\r
+                       <LITERAL2>Catalan</LITERAL2>\r
+                       <LITERAL2>constants</LITERAL2>\r
+                       <LITERAL2>Digits</LITERAL2>\r
+                       <LITERAL2>FAIL</LITERAL2>\r
+                       <LITERAL2>false</LITERAL2>\r
+                       <LITERAL2>gamma</LITERAL2>\r
+                       <LITERAL2>I</LITERAL2>\r
+                       <LITERAL2>infinity</LITERAL2>\r
+                       <LITERAL2>integrate</LITERAL2>\r
+                       <LITERAL2>lasterror</LITERAL2>\r
+                       <LITERAL2>libname</LITERAL2>\r
+                       <LITERAL2>`mod`</LITERAL2>\r
+                       <LITERAL2>NULL</LITERAL2>\r
+                       <LITERAL2>Order</LITERAL2>\r
+                       <LITERAL2>Pi</LITERAL2>\r
+                       <LITERAL2>printlevel</LITERAL2>\r
+                       <LITERAL2>true</LITERAL2>\r
+                       <LITERAL2>undefined</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/ml.xml b/extra/xmode/modes/ml.xml
new file mode 100644 (file)
index 0000000..97ec02c
--- /dev/null
@@ -0,0 +1,180 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- SML MODE by Ingmar Stein -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="(*"/>\r
+               <PROPERTY NAME="commentEnd" VALUE="*)"/>\r
+       </PROPS>\r
+\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- comments -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>(*</BEGIN>\r
+                       <END>*)</END>\r
+               </SPAN>\r
+\r
+               <!-- character literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>#"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- string literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- built-in operators -->\r
+\r
+               <!-- infix precedence 7 -->\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+\r
+               <!-- infix precedence 6 -->\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+\r
+               <!-- infix precedence 5 -->\r
+               <SEQ TYPE="OPERATOR">::</SEQ>\r
+               <SEQ TYPE="OPERATOR">@</SEQ>\r
+\r
+               <!-- infix precedence 4 -->\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+\r
+               <!-- infix precedence 3 -->\r
+               <SEQ TYPE="OPERATOR">:=</SEQ>\r
+\r
+               <!-- reserved words -->\r
+               <!-- <SEQ TYPE="NULL">(</SEQ>\r
+               <SEQ TYPE="NULL">)</SEQ>\r
+               <SEQ TYPE="NULL">[</SEQ>\r
+               <SEQ TYPE="NULL">]</SEQ>\r
+               <SEQ TYPE="NULL">{</SEQ>\r
+               <SEQ TYPE="NULL">}</SEQ>\r
+               <SEQ TYPE="NULL">,</SEQ>\r
+               <SEQ TYPE="NULL">:&gt;</SEQ>\r
+               <SEQ TYPE="NULL">:</SEQ>\r
+               <SEQ TYPE="NULL">;</SEQ>\r
+               <SEQ TYPE="NULL">...</SEQ>\r
+               <SEQ TYPE="NULL">_</SEQ>\r
+               <SEQ TYPE="NULL">|</SEQ>\r
+               <SEQ TYPE="NULL">=&gt;</SEQ>\r
+               <SEQ TYPE="NULL">-&gt;</SEQ>\r
+               <SEQ TYPE="NULL">#</SEQ> -->\r
+\r
+               <KEYWORDS>\r
+                       <!-- built-in operators -->\r
+\r
+                       <!-- infix precedence 7 -->\r
+                       <OPERATOR>div</OPERATOR>\r
+                       <OPERATOR>mod</OPERATOR>\r
+\r
+                       <!-- infix precedence 3 -->\r
+                       <OPERATOR>o</OPERATOR>\r
+\r
+                       <!-- infix precedence 0 -->\r
+                       <OPERATOR>before</OPERATOR>\r
+\r
+                       <!-- reserved words -->\r
+                       <KEYWORD1>abstype</KEYWORD1>\r
+                       <KEYWORD1>and</KEYWORD1>\r
+                       <KEYWORD1>andalso</KEYWORD1>\r
+                       <KEYWORD1>as</KEYWORD1>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>datatype</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>end</KEYWORD1>\r
+                       <KEYWORD1>eqtype</KEYWORD1>\r
+                       <KEYWORD1>exception</KEYWORD1>\r
+                       <KEYWORD1>fn</KEYWORD1>\r
+                       <KEYWORD1>fun</KEYWORD1>\r
+                       <KEYWORD1>functor</KEYWORD1>\r
+                       <KEYWORD1>handle</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <KEYWORD1>include</KEYWORD1>\r
+                       <KEYWORD1>infix</KEYWORD1>\r
+                       <KEYWORD1>infixr</KEYWORD1>\r
+                       <KEYWORD1>let</KEYWORD1>\r
+                       <KEYWORD1>local</KEYWORD1>\r
+                       <KEYWORD1>nonfix</KEYWORD1>\r
+                       <KEYWORD1>of</KEYWORD1>\r
+                       <KEYWORD1>op</KEYWORD1>\r
+                       <KEYWORD1>open</KEYWORD1>\r
+                       <KEYWORD1>orelse</KEYWORD1>\r
+                       <KEYWORD1>raise</KEYWORD1>\r
+                       <KEYWORD1>rec</KEYWORD1>\r
+                       <KEYWORD1>sharing</KEYWORD1>\r
+                       <KEYWORD1>sig</KEYWORD1>\r
+                       <KEYWORD1>signature</KEYWORD1>\r
+                       <KEYWORD1>struct</KEYWORD1>\r
+                       <KEYWORD1>structure</KEYWORD1>\r
+                       <KEYWORD1>then</KEYWORD1>\r
+                       <KEYWORD1>type</KEYWORD1>\r
+                       <KEYWORD1>val</KEYWORD1>\r
+                       <KEYWORD1>where</KEYWORD1>\r
+                       <KEYWORD1>with</KEYWORD1>\r
+                       <KEYWORD1>withtype</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+\r
+                       <!-- built-in types -->\r
+                       <KEYWORD3>array</KEYWORD3>\r
+                       <KEYWORD3>bool</KEYWORD3>\r
+                       <KEYWORD3>char</KEYWORD3>\r
+                       <KEYWORD3>exn</KEYWORD3>\r
+                       <KEYWORD3>frag</KEYWORD3>\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>list</KEYWORD3>\r
+                       <KEYWORD3>option</KEYWORD3>\r
+                       <KEYWORD3>order</KEYWORD3>\r
+                       <KEYWORD3>real</KEYWORD3>\r
+                       <KEYWORD3>ref</KEYWORD3>\r
+                       <KEYWORD3>string</KEYWORD3>\r
+                       <KEYWORD3>substring</KEYWORD3>\r
+                       <KEYWORD3>unit</KEYWORD3>\r
+                       <KEYWORD3>vector</KEYWORD3>\r
+                       <KEYWORD3>word</KEYWORD3>\r
+                       <KEYWORD3>word8</KEYWORD3>\r
+\r
+                       <!-- build-in exception constructors -->\r
+                       <KEYWORD2>Bind</KEYWORD2>\r
+                       <KEYWORD2>Chr</KEYWORD2>\r
+                       <KEYWORD2>Domain</KEYWORD2>\r
+                       <KEYWORD2>Div</KEYWORD2>\r
+                       <KEYWORD2>Fail</KEYWORD2>\r
+                       <KEYWORD2>Graphic</KEYWORD2>\r
+                       <KEYWORD2>Interrupt</KEYWORD2>\r
+                       <KEYWORD2>Io</KEYWORD2>\r
+                       <KEYWORD2>Match</KEYWORD2>\r
+                       <KEYWORD2>Option</KEYWORD2>\r
+                       <KEYWORD2>Ord</KEYWORD2>\r
+                       <KEYWORD2>Overflow</KEYWORD2>\r
+                       <KEYWORD2>Size</KEYWORD2>\r
+                       <KEYWORD2>Subscript</KEYWORD2>\r
+                       <KEYWORD2>SysErr</KEYWORD2>\r
+\r
+                       <!-- built-in literals -->\r
+                       <LITERAL2>false</LITERAL2>\r
+                       <LITERAL2>true</LITERAL2>\r
+                       <LITERAL2>QUOTE</LITERAL2>\r
+                       <LITERAL2>ANTIQUOTE</LITERAL2>\r
+                       <LITERAL2>nil</LITERAL2>\r
+                       <LITERAL2>NONE</LITERAL2>\r
+                       <LITERAL2>SOME</LITERAL2>\r
+                       <LITERAL2>LESS</LITERAL2>\r
+                       <LITERAL2>EQUAL</LITERAL2>\r
+                       <LITERAL2>GREATER</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>
\ No newline at end of file
diff --git a/extra/xmode/modes/modula3.xml b/extra/xmode/modes/modula3.xml
new file mode 100644 (file)
index 0000000..fa04e9c
--- /dev/null
@@ -0,0 +1,178 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- Modula-3 mode, by Marcio Marchini mqm@magma.ca -->\r
+<!-- See http://www.research.compaq.com/SRC/m3defn/html/syntax.html -->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="(*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*)" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- Comment -->\r
+               <!-- Compiler directives. -->\r
+               <SPAN TYPE="COMMENT2">\r
+                       <BEGIN>&lt;*</BEGIN>\r
+                       <END>*&gt;</END>\r
+               </SPAN>\r
+               \r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>(*</BEGIN>\r
+                       <END>*)</END>\r
+               </SPAN>\r
+\r
+               <!-- Standard literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">@</SEQ>\r
+               <SEQ TYPE="OPERATOR">:=</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>AND</KEYWORD1>\r
+                       <KEYWORD1>DO</KEYWORD1>\r
+                       <KEYWORD1>FROM</KEYWORD1>\r
+                       <KEYWORD1>NOT</KEYWORD1>\r
+                       <KEYWORD1>REPEAT</KEYWORD1>\r
+                       <KEYWORD1>UNTIL</KEYWORD1>\r
+                       <KEYWORD1>ANY</KEYWORD1>\r
+                       <KEYWORD1>ELSE</KEYWORD1>\r
+                       <KEYWORD1>GENERIC</KEYWORD1>\r
+                       <KEYWORD1>OBJECT</KEYWORD1>\r
+                       <KEYWORD1>RETURN</KEYWORD1>\r
+                       <KEYWORD1>UNTRACED</KEYWORD1>\r
+                       <KEYWORD1>ARRAY</KEYWORD1>\r
+                       <KEYWORD1>ELSIF</KEYWORD1>\r
+                       <KEYWORD1>IF</KEYWORD1>\r
+                       <KEYWORD1>OF</KEYWORD1>\r
+                       <KEYWORD1>REVEAL</KEYWORD1>\r
+                       <KEYWORD1>VALUE</KEYWORD1>\r
+                       <KEYWORD1>AS</KEYWORD1>\r
+                       <KEYWORD1>END</KEYWORD1>\r
+                       <KEYWORD1>IMPORT</KEYWORD1>\r
+                       <KEYWORD1>OR</KEYWORD1>\r
+                       <KEYWORD1>ROOT</KEYWORD1>\r
+                       <KEYWORD1>VAR</KEYWORD1>\r
+                       <KEYWORD1>BEGIN</KEYWORD1>\r
+                       <KEYWORD1>EVAL</KEYWORD1>\r
+                       <KEYWORD1>IN</KEYWORD1>\r
+                       <KEYWORD1>OVERRIDES</KEYWORD1>\r
+                       <KEYWORD1>SET</KEYWORD1>\r
+                       <KEYWORD1>WHILE</KEYWORD1>\r
+                       <KEYWORD1>BITS</KEYWORD1>\r
+                       <KEYWORD1>EXCEPT</KEYWORD1>\r
+                       <KEYWORD1>INTERFACE</KEYWORD1>\r
+                       <KEYWORD1>PROCEDURE</KEYWORD1>\r
+                       <KEYWORD1>THEN</KEYWORD1>\r
+                       <KEYWORD1>WITH</KEYWORD1>\r
+                       <KEYWORD1>BRANDED</KEYWORD1>\r
+                       <KEYWORD1>EXCEPTION</KEYWORD1>\r
+                       <KEYWORD1>LOCK</KEYWORD1>\r
+                       <KEYWORD1>RAISE</KEYWORD1>\r
+                       <KEYWORD1>TO</KEYWORD1>\r
+                       <KEYWORD1>BY</KEYWORD1>\r
+                       <KEYWORD1>EXIT</KEYWORD1>\r
+                       <KEYWORD1>LOOP</KEYWORD1>\r
+                       <KEYWORD1>RAISES</KEYWORD1>\r
+                       <KEYWORD1>TRY</KEYWORD1>\r
+                       <KEYWORD1>CASE</KEYWORD1>\r
+                       <KEYWORD1>EXPORTS</KEYWORD1>\r
+                       <KEYWORD1>METHODS</KEYWORD1>\r
+                       <KEYWORD1>READONLY</KEYWORD1>\r
+                       <KEYWORD1>TYPE</KEYWORD1>\r
+                       <KEYWORD1>CONST</KEYWORD1>\r
+                       <KEYWORD1>FINALLY</KEYWORD1>\r
+                       <KEYWORD1>MOD</KEYWORD1>\r
+                       <KEYWORD1>RECORD</KEYWORD1>\r
+                       <KEYWORD1>TYPECASE</KEYWORD1>\r
+                       <KEYWORD1>DIV</KEYWORD1>\r
+                       <KEYWORD1>FOR</KEYWORD1>\r
+                       <KEYWORD1>MODULE</KEYWORD1>\r
+                       <KEYWORD1>REF</KEYWORD1>\r
+                       <KEYWORD1>UNSAFE</KEYWORD1>\r
+\r
+                       <!-- Reserved identifiers -->\r
+                       <LITERAL2>ABS</LITERAL2>\r
+                       <LITERAL2>BYTESIZE</LITERAL2>\r
+                       <LITERAL2>EXTENDED</LITERAL2>\r
+                       <LITERAL2>INTEGER</LITERAL2>\r
+                       <LITERAL2>MIN</LITERAL2>\r
+                       <LITERAL2>NUMBER</LITERAL2>\r
+                       <LITERAL2>TEXT</LITERAL2>\r
+                       <LITERAL2>ADDRESS</LITERAL2>\r
+                       <LITERAL2>CARDINAL</LITERAL2>\r
+                       <LITERAL2>FALSE</LITERAL2>\r
+                       <LITERAL2>ISTYPE</LITERAL2>\r
+                       <LITERAL2>MUTEX</LITERAL2>\r
+                       <LITERAL2>ORD</LITERAL2>\r
+                       <LITERAL2>TRUE</LITERAL2>\r
+                       <LITERAL2>ADR</LITERAL2>\r
+                       <LITERAL2>CEILING</LITERAL2>\r
+                       <LITERAL2>FIRST</LITERAL2>\r
+                       <LITERAL2>LAST</LITERAL2>\r
+                       <LITERAL2>NARROW</LITERAL2>\r
+                       <LITERAL2>REAL</LITERAL2>\r
+                       <LITERAL2>TRUNC</LITERAL2>\r
+                       <LITERAL2>ADRSIZE</LITERAL2>\r
+                       <LITERAL2>CHAR</LITERAL2>\r
+                       <LITERAL2>FLOAT</LITERAL2>\r
+                       <LITERAL2>LONGREAL</LITERAL2>\r
+                       <LITERAL2>NEW</LITERAL2>\r
+                       <LITERAL2>REFANY</LITERAL2>\r
+                       <LITERAL2>TYPECODE</LITERAL2>\r
+                       <LITERAL2>BITSIZE</LITERAL2>\r
+                       <LITERAL2>DEC</LITERAL2>\r
+                       <LITERAL2>FLOOR</LITERAL2>\r
+                       <LITERAL2>LOOPHOLE</LITERAL2>\r
+                       <LITERAL2>NIL</LITERAL2>\r
+                       <LITERAL2>ROUND</LITERAL2>\r
+                       <LITERAL2>VAL</LITERAL2>\r
+                       <LITERAL2>BOOLEAN</LITERAL2>\r
+                       <LITERAL2>DISPOSE</LITERAL2>\r
+                       <LITERAL2>INC</LITERAL2>\r
+                       <LITERAL2>MAX</LITERAL2>\r
+                       <LITERAL2>NULL</LITERAL2>\r
+                       <LITERAL2>SUBARRAY</LITERAL2>\r
+                       \r
+                       <!-- Standard interfaces -->\r
+                       <!--  http://www.research.compaq.com/SRC/m3defn/html/intfs.html -->\r
+                       <KEYWORD2>Text</KEYWORD2>\r
+                       <KEYWORD2>Thread</KEYWORD2>\r
+                       <KEYWORD2>Word</KEYWORD2>\r
+                       <KEYWORD2>Real</KEYWORD2>\r
+                       <KEYWORD2>LongReal</KEYWORD2>\r
+                       <KEYWORD2>ExtendedReal</KEYWORD2>\r
+                       <KEYWORD2>RealFloat</KEYWORD2>\r
+                       <KEYWORD2>LongFloat</KEYWORD2>\r
+                       <KEYWORD2>ExtendedFloat</KEYWORD2>\r
+                       <KEYWORD2>FloatMode</KEYWORD2>\r
+\r
+                       <!-- Recommended interfaces -->\r
+                       <!--  http://www.research.compaq.com/SRC/m3defn/html/intfs.html -->\r
+                       <KEYWORD3>Fmt</KEYWORD3>\r
+                       <KEYWORD3>Lex</KEYWORD3>\r
+                       <KEYWORD3>Pickle</KEYWORD3>\r
+                       <KEYWORD3>Table</KEYWORD3>\r
+                       \r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/moin.xml b/extra/xmode/modes/moin.xml
new file mode 100644 (file)
index 0000000..cc6ac75
--- /dev/null
@@ -0,0 +1,111 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="##" />\r
+               <PROPERTY NAME="wrap" VALUE="soft" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" HIGHLIGHT_DIGITS="FALSE" IGNORE_CASE="FALSE">\r
+\r
+               <!-- comment -->\r
+               <EOL_SPAN TYPE="COMMENT1">##</EOL_SPAN>\r
+\r
+               <!-- directive -->\r
+               <EOL_SPAN TYPE="KEYWORD2">#pragma</EOL_SPAN>\r
+\r
+               <!-- macro -->\r
+               <SPAN TYPE="KEYWORD4">\r
+                       <BEGIN>[[</BEGIN>\r
+                       <END>]]</END>\r
+               </SPAN>\r
+\r
+               <!-- term definition -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR=' '\r
+                       AT_LINE_START='TRUE'\r
+                       TYPE="LABEL"\r
+               >\s+(?:\(|\)|\w)[\p{Alnum}\p{Blank}.()]+::</SEQ_REGEXP>\r
+\r
+               <!-- smileys -->\r
+               <!-- not on by default because it slows things down a bit\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\:\)\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\sB\)\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\:\)\)\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\;\)\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\:D\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\%lt;\:\(\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\sX\-\(\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\:o\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\:\(\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\/\!\\\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\%lt;\!\b\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\(\!\)\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\:\-\?\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\:\b\:\b\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\%\)\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\@\)\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\|\)\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\;\)\)\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\(\.\/\)\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\{OK\}\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\{X\}\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\{i\}\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\{1\}\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\{2\}\s</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=' ' AT_LINE_START='FALSE' TYPE="LITERAL3">\s\{3\}\s</SEQ_REGEXP>\r
+               -->\r
+\r
+               <!-- code or literal -->\r
+               <SPAN TYPE="LITERAL2">\r
+                       <BEGIN>{{{</BEGIN>\r
+                       <END>}}}</END>\r
+               </SPAN>\r
+\r
+               <!-- code or literal -->\r
+               <SPAN TYPE="LITERAL2">\r
+                       <BEGIN>`</BEGIN>\r
+                       <END>`</END>\r
+               </SPAN>\r
+\r
+               <!-- bold or italic -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="''"\r
+                       TYPE="LITERAL1"\r
+               >('{2,5})[^']+\1[^']</SEQ_REGEXP>\r
+\r
+               <!-- horizontal rule -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="----"\r
+                       TYPE="LITERAL4"\r
+               >-{4,}</SEQ_REGEXP>\r
+\r
+               <!-- section header -->\r
+               <SPAN_REGEXP\r
+                       HASH_CHAR="="\r
+                       TYPE="KEYWORD1"\r
+                       AT_LINE_START="TRUE"\r
+               >\r
+                       <BEGIN>(={1,5}) </BEGIN>\r
+                       <END> $1</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- implicit WikiWords - a bit of a hack, but I can't think of a better way... -->\r
+               <SEQ_REGEXP HASH_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZ" AT_WORD_START="TRUE" TYPE="KEYWORD2">[A-Z][a-z]+[A-Z][a-zA-Z]+</SEQ_REGEXP>\r
+\r
+               <!-- explicit WikiWord -->\r
+               <SPAN TYPE="KEYWORD2">\r
+                       <BEGIN>[&quot;</BEGIN>\r
+                       <END>&quot;]</END>\r
+               </SPAN>\r
+\r
+               <!-- url -->\r
+               <SPAN TYPE="KEYWORD3">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/mqsc.xml b/extra/xmode/modes/mqsc.xml
new file mode 100644 (file)
index 0000000..9fdc9c8
--- /dev/null
@@ -0,0 +1,231 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+<!--\r
+  IBM WebSphere MQ Scripting (MQSC)\r
+  - by Aaron Bell <aaron@clockworklogic.co.uk>\r
+  - accurate for WebSphere MQ 5.2.\r
+  - ensure your LITERAL1 and LITERAL2 colours are set differently.\r
+-->\r
+<MODE>\r
+  <PROPS>\r
+    <!-- asterisks are comments -->\r
+    <PROPERTY NAME="lineComment" VALUE="*"/>\r
+  </PROPS>\r
+  <!-- ignore case, highlight numbers -->\r
+  <RULES ESCAPE="\" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+\r
+    <!-- lines beginning with asterisk are comments -->\r
+    <EOL_SPAN TYPE="COMMENT1" AT_LINE_START="TRUE">*</EOL_SPAN>\r
+\r
+    <!-- brackets on one line delimit parameter values, don't parse -->\r
+    <!-- case 1: string values using apostrophe marks -->\r
+    <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" MATCH_TYPE="OPERATOR">\r
+      <BEGIN>('</BEGIN>\r
+      <END>')</END>\r
+    </SPAN>\r
+    <!-- case 2: literal values and object names -->\r
+    <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE" MATCH_TYPE="OPERATOR">\r
+      <BEGIN>(</BEGIN>\r
+      <END>)</END>\r
+    </SPAN>\r
+\r
+    <!-- line continuation symbol -->\r
+    <SEQ TYPE="OPERATOR">+</SEQ>\r
+\r
+    <KEYWORDS>\r
+      <!-- KEYWORD1 are core MQSC commands -->\r
+      <KEYWORD1>all</KEYWORD1><!-- as in DIS Q(X) ALL -->\r
+      <KEYWORD1>alter</KEYWORD1>\r
+      <KEYWORD1>alt</KEYWORD1>\r
+      <KEYWORD1>clear</KEYWORD1>\r
+      <KEYWORD1>define</KEYWORD1>\r
+      <KEYWORD1>def</KEYWORD1>\r
+      <KEYWORD1>delete</KEYWORD1>\r
+      <KEYWORD1>display</KEYWORD1>\r
+      <KEYWORD1>dis</KEYWORD1>\r
+      <KEYWORD1>end</KEYWORD1>\r
+      <KEYWORD1>like</KEYWORD1><!-- as in DEF Q(X) LIKE(Y) -->\r
+      <KEYWORD1>ping</KEYWORD1>\r
+      <KEYWORD1>refresh</KEYWORD1>\r
+      <KEYWORD1>ref</KEYWORD1>\r
+      <KEYWORD1>replace</KEYWORD1><!-- as in DEF Q(X) REPLACE -->\r
+      <KEYWORD1>reset</KEYWORD1>\r
+      <KEYWORD1>resolve</KEYWORD1>\r
+      <KEYWORD1>resume</KEYWORD1>\r
+      <KEYWORD1>start</KEYWORD1>\r
+      <KEYWORD1>stop</KEYWORD1>\r
+      <KEYWORD1>suspend</KEYWORD1>\r
+\r
+      <!-- KEYWORD2 are object types -->\r
+      <KEYWORD2>channel</KEYWORD2>\r
+      <KEYWORD2>chl</KEYWORD2>\r
+      <KEYWORD2>chstatus</KEYWORD2>\r
+      <KEYWORD2>chst</KEYWORD2>\r
+      <KEYWORD2>clusqmgr</KEYWORD2>\r
+      <KEYWORD2>process</KEYWORD2>\r
+      <KEYWORD2>proc</KEYWORD2>\r
+      <KEYWORD2>namelist</KEYWORD2>\r
+      <KEYWORD2>nl</KEYWORD2>\r
+      <KEYWORD2>qalias</KEYWORD2>\r
+      <KEYWORD2>qa</KEYWORD2>\r
+      <KEYWORD2>qcluster</KEYWORD2>\r
+      <KEYWORD2>qc</KEYWORD2>\r
+      <KEYWORD2>qlocal</KEYWORD2>\r
+      <KEYWORD2>ql</KEYWORD2>\r
+      <KEYWORD2>qmodel</KEYWORD2>\r
+      <KEYWORD2>qm</KEYWORD2>\r
+      <KEYWORD2>qmgr</KEYWORD2>\r
+      <KEYWORD2>qremote</KEYWORD2>\r
+      <KEYWORD2>qr</KEYWORD2>\r
+      <KEYWORD2>queue</KEYWORD2>\r
+\r
+      <!-- MARKUP are object attributes -->\r
+      <MARKUP>altdate</MARKUP>\r
+      <MARKUP>alttime</MARKUP>\r
+      <MARKUP>applicid</MARKUP>\r
+      <MARKUP>appltype</MARKUP>\r
+      <MARKUP>authorev</MARKUP>\r
+      <MARKUP>batches</MARKUP>\r
+      <MARKUP>batchint</MARKUP>\r
+      <MARKUP>batchsz</MARKUP>\r
+      <MARKUP>boqname</MARKUP>\r
+      <MARKUP>bothresh</MARKUP>\r
+      <MARKUP>bufsrcvd</MARKUP>\r
+      <MARKUP>bufssent</MARKUP>\r
+      <MARKUP>bytsrcvd</MARKUP>\r
+      <MARKUP>bytssent</MARKUP>\r
+      <MARKUP>ccsid</MARKUP>\r
+      <MARKUP>chad</MARKUP>\r
+      <MARKUP>chadev</MARKUP>\r
+      <MARKUP>chadexit</MARKUP>\r
+      <MARKUP>channel</MARKUP>\r
+      <MARKUP>chltype</MARKUP>\r
+      <MARKUP>chstada</MARKUP>\r
+      <MARKUP>chstati</MARKUP>\r
+      <MARKUP>clusdate</MARKUP>\r
+      <MARKUP>clusinfo</MARKUP>\r
+      <MARKUP>clusnl</MARKUP>\r
+      <MARKUP>clusqmgr</MARKUP>\r
+      <MARKUP>clusqt</MARKUP>\r
+      <MARKUP>cluster</MARKUP>\r
+      <MARKUP>clustime</MARKUP>\r
+      <MARKUP>clwldata</MARKUP>\r
+      <MARKUP>clwlexit</MARKUP>\r
+      <MARKUP>clwlwen</MARKUP>\r
+      <MARKUP>cmdlevel</MARKUP>\r
+      <MARKUP>commandq</MARKUP>\r
+      <MARKUP>conname</MARKUP>\r
+      <MARKUP>convert</MARKUP>\r
+      <MARKUP>crdate</MARKUP>\r
+      <MARKUP>crtime</MARKUP>\r
+      <MARKUP>curdepth</MARKUP>\r
+      <MARKUP>curluwid</MARKUP>\r
+      <MARKUP>curmsgs</MARKUP>\r
+      <MARKUP>curseqno</MARKUP>\r
+      <MARKUP>deadq</MARKUP>\r
+      <MARKUP>defbind</MARKUP>\r
+      <MARKUP>defprty</MARKUP>\r
+      <MARKUP>defpsist</MARKUP>\r
+      <MARKUP>defsopt</MARKUP>\r
+      <MARKUP>deftype</MARKUP>\r
+      <MARKUP>defxmitq</MARKUP>\r
+      <MARKUP>descr</MARKUP>\r
+      <MARKUP>discint</MARKUP>\r
+      <MARKUP>distl</MARKUP>\r
+      <MARKUP>envrdata</MARKUP>\r
+      <MARKUP>get</MARKUP>\r
+      <MARKUP>hardenbo</MARKUP>\r
+      <MARKUP>hbint</MARKUP>\r
+      <MARKUP>indoubt</MARKUP>\r
+      <MARKUP>inhibtev</MARKUP>\r
+      <MARKUP>initq</MARKUP>\r
+      <MARKUP>ipprocs</MARKUP>\r
+      <MARKUP>jobname</MARKUP>\r
+      <MARKUP>localev</MARKUP>\r
+      <MARKUP>longrts</MARKUP>\r
+      <MARKUP>longrty</MARKUP>\r
+      <MARKUP>longtmr</MARKUP>\r
+      <MARKUP>lstluwid</MARKUP>\r
+      <MARKUP>lstmsgda</MARKUP>\r
+      <MARKUP>lstmsgti</MARKUP>\r
+      <MARKUP>lstseqno</MARKUP>\r
+      <MARKUP>maxdepth</MARKUP>\r
+      <MARKUP>maxhands</MARKUP>\r
+      <MARKUP>maxmsgl</MARKUP>\r
+      <MARKUP>maxprty</MARKUP>\r
+      <MARKUP>maxumsgs</MARKUP>\r
+      <MARKUP>mcaname</MARKUP>\r
+      <MARKUP>mcastat</MARKUP>\r
+      <MARKUP>mcatype</MARKUP>\r
+      <MARKUP>mcauser</MARKUP>\r
+      <MARKUP>modename</MARKUP>\r
+      <MARKUP>mrdata</MARKUP>\r
+      <MARKUP>mrexit</MARKUP>\r
+      <MARKUP>mrrty</MARKUP>\r
+      <MARKUP>mrtmr</MARKUP>\r
+      <MARKUP>msgdata</MARKUP>\r
+      <MARKUP>msgdlvsq</MARKUP>\r
+      <MARKUP>msgexit</MARKUP>\r
+      <MARKUP>msgs</MARKUP>\r
+      <MARKUP>namcount</MARKUP>\r
+      <MARKUP>names</MARKUP>\r
+      <MARKUP>netprty</MARKUP>\r
+      <MARKUP>npmspeed</MARKUP>\r
+      <MARKUP>opprocs</MARKUP>\r
+      <MARKUP>password</MARKUP>\r
+      <MARKUP>perfmev</MARKUP>\r
+      <MARKUP>platform</MARKUP>\r
+      <MARKUP>process</MARKUP>\r
+      <MARKUP>put</MARKUP>\r
+      <MARKUP>putaut</MARKUP>\r
+      <MARKUP>qdepthhi</MARKUP>\r
+      <MARKUP>qdepthlo</MARKUP>\r
+      <MARKUP>qdphiev</MARKUP>\r
+      <MARKUP>qdploev</MARKUP>\r
+      <MARKUP>qdpmaxev</MARKUP>\r
+      <MARKUP>qmid</MARKUP>\r
+      <MARKUP>qmname</MARKUP>\r
+      <MARKUP>qmtype</MARKUP>\r
+      <MARKUP>qsvciev</MARKUP>\r
+      <MARKUP>qsvcint</MARKUP>\r
+      <MARKUP>qtype</MARKUP>\r
+      <MARKUP>rcvdata</MARKUP>\r
+      <MARKUP>rcvexit</MARKUP>\r
+      <MARKUP>remoteev</MARKUP>\r
+      <MARKUP>repos</MARKUP>\r
+      <MARKUP>reposnl</MARKUP>\r
+      <MARKUP>retintvl</MARKUP>\r
+      <MARKUP>rname</MARKUP>\r
+      <MARKUP>rqmname</MARKUP>\r
+      <MARKUP>scope</MARKUP>\r
+      <MARKUP>scydata</MARKUP>\r
+      <MARKUP>scyexit</MARKUP>\r
+      <MARKUP>senddata</MARKUP>\r
+      <MARKUP>sendexit</MARKUP>\r
+      <MARKUP>seqwrap</MARKUP>\r
+      <MARKUP>share</MARKUP>\r
+      <MARKUP>shortrts</MARKUP>\r
+      <MARKUP>shortrty</MARKUP>\r
+      <MARKUP>shorttmr</MARKUP>\r
+      <MARKUP>status</MARKUP>\r
+      <MARKUP>stopreq</MARKUP>\r
+      <MARKUP>strstpev</MARKUP>\r
+      <MARKUP>suspend</MARKUP>\r
+      <MARKUP>syncpt</MARKUP>\r
+      <MARKUP>targq</MARKUP>\r
+      <MARKUP>tpname</MARKUP>\r
+      <MARKUP>trigdata</MARKUP>\r
+      <MARKUP>trigdpth</MARKUP>\r
+      <MARKUP>trigger</MARKUP>\r
+      <MARKUP>trigint</MARKUP>\r
+      <MARKUP>trigmpri</MARKUP>\r
+      <MARKUP>trigtype</MARKUP>\r
+      <MARKUP>trptype</MARKUP>\r
+      <MARKUP>type</MARKUP>\r
+      <MARKUP>usage</MARKUP>\r
+      <MARKUP>userdata</MARKUP>\r
+      <MARKUP>userid</MARKUP>\r
+      <MARKUP>xmitq</MARKUP>\r
+    </KEYWORDS>\r
+  </RULES>\r
+</MODE>
\ No newline at end of file
diff --git a/extra/xmode/modes/myghty.xml b/extra/xmode/modes/myghty.xml
new file mode 100644 (file)
index 0000000..1cf83ef
--- /dev/null
@@ -0,0 +1,130 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+<MODE NAME="myghty"                    FILE="myghty.xml"\r
+                               FILE_NAME_GLOB="*.myt"/>\r
+-->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE">\r
+\r
+               <EOL_SPAN TYPE="COMMENT2" AT_LINE_START="TRUE">#</EOL_SPAN>\r
+               <!-- <SEQ TYPE="LITERAL4" AT_LINE_END="TRUE">\</SEQ> -->\r
+\r
+               <!-- attr block (python) -->\r
+               <SPAN DELEGATE="MYGHTY" TYPE="LITERAL4">\r
+                       <BEGIN>&lt;%attr&gt;</BEGIN>\r
+                       <END>&lt;/%attr&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- def, closure, method -->\r
+               <SPAN_REGEXP HASH_CHAR="&lt;%" TYPE="LITERAL4" DELEGATE="DEF">\r
+                       <BEGIN>&lt;%(def|closure|method)</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="&lt;/%" TYPE="LITERAL4">&lt;/%(def|closure|method)&gt;</SEQ_REGEXP>\r
+\r
+               <!-- doc block -->\r
+               <SPAN TYPE="COMMENT4">\r
+                       <BEGIN>&lt;%doc&gt;</BEGIN>\r
+                       <END>&lt;/%doc&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- flags block (python) -->\r
+               <SPAN DELEGATE="MYGHTY" TYPE="LITERAL4">\r
+                       <BEGIN>&lt;%flags&gt;</BEGIN>\r
+                       <END>&lt;/%flags&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- python block -->\r
+               <SPAN_REGEXP HASH_CHAR="&lt;%python" DELEGATE="MYGHTY" TYPE="LITERAL4">\r
+                       <BEGIN>&lt;%python[^&gt;]*&gt;</BEGIN>\r
+                       <END>&lt;/%python&gt;</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- python block aliases - don't take args -->\r
+               <SPAN_REGEXP HASH_CHAR="&lt;%" DELEGATE="MYGHTY" TYPE="LITERAL4">\r
+                       <BEGIN>&lt;%(args|cleanup|filter|global|init|once|requestlocal|requestonce|shared|threadlocal|threadonce)&gt;</BEGIN>\r
+                       <END>&lt;/%$1&gt;</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- text block -->\r
+               <SPAN TYPE="LITERAL3">\r
+                       <BEGIN>&lt;%text&gt;</BEGIN>\r
+                       <END>&lt;/%text&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- calling component -->\r
+               <SEQ TYPE="LITERAL4">&lt;/&amp;&gt;</SEQ>\r
+               <SPAN_REGEXP HASH_CHAR="&lt;&amp;" TYPE="LITERAL4" DELEGATE="MYGHTY">\r
+                       <BEGIN>&lt;&amp;[|]?</BEGIN>\r
+                       <END>&amp;&gt;</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- substitutions -->\r
+               <SPAN TYPE="LITERAL3" DELEGATE="MYGHTY">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN \r
+                       AT_LINE_START="TRUE" \r
+                       DELEGATE="MYGHTY" \r
+                       TYPE="LITERAL4">%</EOL_SPAN>\r
+\r
+               <IMPORT DELEGATE="html::MAIN"/>\r
+\r
+               <KEYWORDS>\r
+                       <!-- only here for complete-word -->\r
+                       <NULL>args</NULL>\r
+                       <NULL>attr</NULL>\r
+                       <NULL>cleanup</NULL>\r
+                       <NULL>closure</NULL>\r
+                       <NULL>def</NULL>\r
+                       <NULL>doc</NULL>\r
+                       <NULL>filter</NULL>\r
+                       <NULL>flags</NULL>\r
+                       <NULL>global</NULL>\r
+                       <NULL>init</NULL>\r
+                       <NULL>method</NULL>\r
+                       <NULL>once</NULL>\r
+                       <NULL>python</NULL>\r
+                       <NULL>requestlocal</NULL>\r
+                       <NULL>requestonce</NULL>\r
+                       <NULL>shared</NULL>\r
+                       <NULL>threadlocal</NULL>\r
+                       <NULL>threadonce</NULL>\r
+               </KEYWORDS>\r
+\r
+       </RULES>\r
+\r
+       <RULES IGNORE_CASE="FALSE" SET="MYGHTY">\r
+               <!-- alias for MODULE -->\r
+               <SEQ TYPE="KEYWORD4">@</SEQ>\r
+               <IMPORT DELEGATE="python::MAIN"/>\r
+               <KEYWORDS>\r
+                       <KEYWORD4>ARGS</KEYWORD4>\r
+                       <KEYWORD4>MODULE</KEYWORD4>\r
+                       <KEYWORD4>SELF</KEYWORD4>\r
+                       <KEYWORD4>m</KEYWORD4>\r
+                       <!-- request -->\r
+                       <KEYWORD4>r</KEYWORD4>\r
+                       <!-- session -->\r
+                       <KEYWORD4>s</KEYWORD4>\r
+                       <!-- URL encode -->\r
+                       <KEYWORD4>u</KEYWORD4>\r
+                       <!-- HTML encode -->\r
+                       <KEYWORD4>h</KEYWORD4>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <!-- only exists to color component name like a function -->\r
+       <RULES IGNORE_CASE="TRUE" SET="DEF" DEFAULT="FUNCTION">\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/mysql.xml b/extra/xmode/modes/mysql.xml
new file mode 100644 (file)
index 0000000..fe462a7
--- /dev/null
@@ -0,0 +1,244 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="--" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE" ESCAPE="\">\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <KEYWORDS>\r
+               \r
+                       <KEYWORD1>ADD</KEYWORD1>\r
+                       <KEYWORD1>ALL</KEYWORD1>\r
+                       <KEYWORD1>ALTER</KEYWORD1>\r
+                       <KEYWORD1>ANALYZE</KEYWORD1>\r
+                       <KEYWORD1>AND</KEYWORD1>\r
+                       <KEYWORD1>AS</KEYWORD1>\r
+                       <KEYWORD1>ASC</KEYWORD1>\r
+                       <KEYWORD1>ASENSITIVE</KEYWORD1>\r
+                       <KEYWORD1>BEFORE</KEYWORD1>\r
+                       <KEYWORD1>BETWEEN</KEYWORD1>\r
+                       <KEYWORD1>BIGINT</KEYWORD1>\r
+                       <KEYWORD1>BINARY</KEYWORD1>\r
+                       <KEYWORD1>BLOB</KEYWORD1>\r
+                       <KEYWORD1>BOTH</KEYWORD1>\r
+                       <KEYWORD1>BY</KEYWORD1>\r
+                       <KEYWORD1>CALL</KEYWORD1>\r
+                       <KEYWORD1>CASCADE</KEYWORD1>\r
+                       <KEYWORD1>CASE</KEYWORD1>\r
+                       <KEYWORD1>CHANGE</KEYWORD1>\r
+                       <KEYWORD1>CHAR</KEYWORD1>\r
+                       <KEYWORD1>CHARACTER</KEYWORD1>\r
+                       <KEYWORD1>CHECK</KEYWORD1>\r
+                       <KEYWORD1>COLLATE</KEYWORD1>\r
+                       <KEYWORD1>COLUMN</KEYWORD1>\r
+                       <KEYWORD1>CONDITION</KEYWORD1>\r
+                       <KEYWORD1>CONNECTION</KEYWORD1>\r
+                       <KEYWORD1>CONSTRAINT</KEYWORD1>\r
+                       <KEYWORD1>CONTINUE</KEYWORD1>\r
+                       <KEYWORD1>CONVERT</KEYWORD1>\r
+                       <KEYWORD1>CREATE</KEYWORD1>\r
+                       <KEYWORD1>CROSS</KEYWORD1>\r
+                       <KEYWORD1>CURRENT_DATE</KEYWORD1>\r
+                       <KEYWORD1>CURRENT_TIME</KEYWORD1>\r
+                       <KEYWORD1>CURRENT_TIMESTAMP</KEYWORD1>\r
+                       <KEYWORD1>CURRENT_USER</KEYWORD1>\r
+                       <KEYWORD1>CURSOR</KEYWORD1>\r
+                       <KEYWORD1>DATABASE</KEYWORD1>\r
+                       <KEYWORD1>DATABASES</KEYWORD1>\r
+                       <KEYWORD1>DAY_HOUR</KEYWORD1>\r
+                       <KEYWORD1>DAY_MICROSECOND</KEYWORD1>\r
+                       <KEYWORD1>DAY_MINUTE</KEYWORD1>\r
+                       <KEYWORD1>DAY_SECOND</KEYWORD1>\r
+                       <KEYWORD1>DEC</KEYWORD1>\r
+                       <KEYWORD1>DECIMAL</KEYWORD1>\r
+                       <KEYWORD1>DECLARE</KEYWORD1>\r
+                       <KEYWORD1>DEFAULT</KEYWORD1>\r
+                       <KEYWORD1>DELAYED</KEYWORD1>\r
+                       <KEYWORD1>DELETE</KEYWORD1>\r
+                       <KEYWORD1>DESC</KEYWORD1>\r
+                       <KEYWORD1>DESCRIBE</KEYWORD1>\r
+                       <KEYWORD1>DETERMINISTIC</KEYWORD1>\r
+                       <KEYWORD1>DISTINCT</KEYWORD1>\r
+                       <KEYWORD1>DISTINCTROW</KEYWORD1>\r
+                       <KEYWORD1>DIV</KEYWORD1>\r
+                       <KEYWORD1>DOUBLE</KEYWORD1>\r
+                       <KEYWORD1>DROP</KEYWORD1>\r
+                       <KEYWORD1>DUAL</KEYWORD1>\r
+                       <KEYWORD1>EACH</KEYWORD1>\r
+                       <KEYWORD1>ELSE</KEYWORD1>\r
+                       <KEYWORD1>ELSEIF</KEYWORD1>\r
+                       <KEYWORD1>ENCLOSED</KEYWORD1>\r
+                       <KEYWORD1>ESCAPED</KEYWORD1>\r
+                       <KEYWORD1>EXISTS</KEYWORD1>\r
+                       <KEYWORD1>EXIT</KEYWORD1>\r
+                       <KEYWORD1>EXPLAIN</KEYWORD1>\r
+                       <KEYWORD1>FALSE</KEYWORD1>\r
+                       <KEYWORD1>FETCH</KEYWORD1>\r
+                       <KEYWORD1>FLOAT</KEYWORD1>\r
+                       <KEYWORD1>FOR</KEYWORD1>\r
+                       <KEYWORD1>FORCE</KEYWORD1>\r
+                       <KEYWORD1>FOREIGN</KEYWORD1>\r
+                       <KEYWORD1>FROM</KEYWORD1>\r
+                       <KEYWORD1>FULLTEXT</KEYWORD1>\r
+                       <KEYWORD1>GOTO</KEYWORD1>\r
+                       <KEYWORD1>GRANT</KEYWORD1>\r
+                       <KEYWORD1>GROUP</KEYWORD1>\r
+                       <KEYWORD1>HAVING</KEYWORD1>\r
+                       <KEYWORD1>HIGH_PRIORITY</KEYWORD1>\r
+                       <KEYWORD1>HOUR_MICROSECOND</KEYWORD1>\r
+                       <KEYWORD1>HOUR_MINUTE</KEYWORD1>\r
+                       <KEYWORD1>HOUR_SECOND</KEYWORD1>\r
+                       <KEYWORD1>IF</KEYWORD1>\r
+                       <KEYWORD1>IGNORE</KEYWORD1>\r
+                       <KEYWORD1>IN</KEYWORD1>\r
+                       <KEYWORD1>INDEX</KEYWORD1>\r
+                       <KEYWORD1>INFILE</KEYWORD1>\r
+                       <KEYWORD1>INNER</KEYWORD1>\r
+                       <KEYWORD1>INOUT</KEYWORD1>\r
+                       <KEYWORD1>INSENSITIVE</KEYWORD1>\r
+                       <KEYWORD1>INSERT</KEYWORD1>\r
+                       <KEYWORD1>INT</KEYWORD1>\r
+                       <KEYWORD1>INTEGER</KEYWORD1>\r
+                       <KEYWORD1>INTERVAL</KEYWORD1>\r
+                       <KEYWORD1>INTO</KEYWORD1>\r
+                       <KEYWORD1>IS</KEYWORD1>\r
+                       <KEYWORD1>ITERATE</KEYWORD1>\r
+                       <KEYWORD1>JOIN</KEYWORD1>\r
+                       <KEYWORD1>KEY</KEYWORD1>\r
+                       <KEYWORD1>KEYS</KEYWORD1>\r
+                       <KEYWORD1>KILL</KEYWORD1>\r
+                       <KEYWORD1>LEADING</KEYWORD1>\r
+                       <KEYWORD1>LEAVE</KEYWORD1>\r
+                       <KEYWORD1>LEFT</KEYWORD1>\r
+                       <KEYWORD1>LIKE</KEYWORD1>\r
+                       <KEYWORD1>LIMIT</KEYWORD1>\r
+                       <KEYWORD1>LINES</KEYWORD1>\r
+                       <KEYWORD1>LOAD</KEYWORD1>\r
+                       <KEYWORD1>LOCALTIME</KEYWORD1>\r
+                       <KEYWORD1>LOCALTIMESTAMP</KEYWORD1>\r
+                       <KEYWORD1>LOCK</KEYWORD1>\r
+                       <KEYWORD1>LONG</KEYWORD1>\r
+                       <KEYWORD1>LONGBLOB</KEYWORD1>\r
+                       <KEYWORD1>LONGTEXT</KEYWORD1>\r
+                       <KEYWORD1>LOOP</KEYWORD1>\r
+                       <KEYWORD1>LOW_PRIORITY</KEYWORD1>\r
+                       <KEYWORD1>MATCH</KEYWORD1>\r
+                       <KEYWORD1>MEDIUMBLOB</KEYWORD1>\r
+                       <KEYWORD1>MEDIUMINT</KEYWORD1>\r
+                       <KEYWORD1>MEDIUMTEXT</KEYWORD1>\r
+                       <KEYWORD1>MIDDLEINT</KEYWORD1>\r
+                       <KEYWORD1>MINUTE_MICROSECOND</KEYWORD1>\r
+                       <KEYWORD1>MINUTE_SECOND</KEYWORD1>\r
+                       <KEYWORD1>MOD</KEYWORD1>\r
+                       <KEYWORD1>MODIFIES</KEYWORD1>\r
+                       <KEYWORD1>NATURAL</KEYWORD1>\r
+                       <KEYWORD1>NOT</KEYWORD1>\r
+                       <KEYWORD1>NO_WRITE_TO_BINLOG</KEYWORD1>\r
+                       <KEYWORD1>NULL</KEYWORD1>\r
+                       <KEYWORD1>NUMERIC</KEYWORD1>\r
+                       <KEYWORD1>ON</KEYWORD1>\r
+                       <KEYWORD1>OPTIMIZE</KEYWORD1>\r
+                       <KEYWORD1>OPTION</KEYWORD1>\r
+                       <KEYWORD1>OPTIONALLY</KEYWORD1>\r
+                       <KEYWORD1>OR</KEYWORD1>\r
+                       <KEYWORD1>ORDER</KEYWORD1>\r
+                       <KEYWORD1>OUT</KEYWORD1>\r
+                       <KEYWORD1>OUTER</KEYWORD1>\r
+                       <KEYWORD1>OUTFILE</KEYWORD1>\r
+                       <KEYWORD1>PRECISION</KEYWORD1>\r
+                       <KEYWORD1>PRIMARY</KEYWORD1>\r
+                       <KEYWORD1>PROCEDURE</KEYWORD1>\r
+                       <KEYWORD1>PURGE</KEYWORD1>\r
+                       <KEYWORD1>READ</KEYWORD1>\r
+                       <KEYWORD1>READS</KEYWORD1>\r
+                       <KEYWORD1>REAL</KEYWORD1>\r
+                       <KEYWORD1>REFERENCES</KEYWORD1>\r
+                       <KEYWORD1>REGEXP</KEYWORD1>\r
+                       <KEYWORD1>RENAME</KEYWORD1>\r
+                       <KEYWORD1>REPEAT</KEYWORD1>\r
+                       <KEYWORD1>REPLACE</KEYWORD1>\r
+                       <KEYWORD1>REQUIRE</KEYWORD1>\r
+                       <KEYWORD1>RESTRICT</KEYWORD1>\r
+                       <KEYWORD1>RETURN</KEYWORD1>\r
+                       <KEYWORD1>REVOKE</KEYWORD1>\r
+                       <KEYWORD1>RIGHT</KEYWORD1>\r
+                       <KEYWORD1>RLIKE</KEYWORD1>\r
+                       <KEYWORD1>SCHEMA</KEYWORD1>\r
+                       <KEYWORD1>SCHEMAS</KEYWORD1>\r
+                       <KEYWORD1>SECOND_MICROSECOND</KEYWORD1>\r
+                       <KEYWORD1>SELECT</KEYWORD1>\r
+                       <KEYWORD1>SENSITIVE</KEYWORD1>\r
+                       <KEYWORD1>SEPARATOR</KEYWORD1>\r
+                       <KEYWORD1>SET</KEYWORD1>\r
+                       <KEYWORD1>SHOW</KEYWORD1>\r
+                       <KEYWORD1>SMALLINT</KEYWORD1>\r
+                       <KEYWORD1>SONAME</KEYWORD1>\r
+                       <KEYWORD1>SPATIAL</KEYWORD1>\r
+                       <KEYWORD1>SPECIFIC</KEYWORD1>\r
+                       <KEYWORD1>SQL</KEYWORD1>\r
+                       <KEYWORD1>SQLEXCEPTION</KEYWORD1>\r
+                       <KEYWORD1>SQLSTATE</KEYWORD1>\r
+                       <KEYWORD1>SQLWARNING</KEYWORD1>\r
+                       <KEYWORD1>SQL_BIG_RESULT</KEYWORD1>\r
+                       <KEYWORD1>SQL_CALC_FOUND_ROWS</KEYWORD1>\r
+                       <KEYWORD1>SQL_SMALL_RESULT</KEYWORD1>\r
+                       <KEYWORD1>SSL</KEYWORD1>\r
+                       <KEYWORD1>STARTING</KEYWORD1>\r
+                       <KEYWORD1>STRAIGHT_JOIN</KEYWORD1>\r
+                       <KEYWORD1>TABLE</KEYWORD1>\r
+                       <KEYWORD1>TERMINATED</KEYWORD1>\r
+                       <KEYWORD1>THEN</KEYWORD1>\r
+                       <KEYWORD1>TINYBLOB</KEYWORD1>\r
+                       <KEYWORD1>TINYINT</KEYWORD1>\r
+                       <KEYWORD1>TINYTEXT</KEYWORD1>\r
+                       <KEYWORD1>TO</KEYWORD1>\r
+                       <KEYWORD1>TRAILING</KEYWORD1>\r
+                       <KEYWORD1>TRIGGER</KEYWORD1>\r
+                       <KEYWORD1>TRUE</KEYWORD1>\r
+                       <KEYWORD1>UNDO</KEYWORD1>\r
+                       <KEYWORD1>UNION</KEYWORD1>\r
+                       <KEYWORD1>UNIQUE</KEYWORD1>\r
+                       <KEYWORD1>UNLOCK</KEYWORD1>\r
+                       <KEYWORD1>UNSIGNED</KEYWORD1>\r
+                       <KEYWORD1>UPDATE</KEYWORD1>\r
+                       <KEYWORD1>USAGE</KEYWORD1>\r
+                       <KEYWORD1>USE</KEYWORD1>\r
+                       <KEYWORD1>USING</KEYWORD1>\r
+                       <KEYWORD1>UTC_DATE</KEYWORD1>\r
+                       <KEYWORD1>UTC_TIME</KEYWORD1>\r
+                       <KEYWORD1>UTC_TIMESTAMP</KEYWORD1>\r
+                       <KEYWORD1>VALUES</KEYWORD1>\r
+                       <KEYWORD1>VARBINARY</KEYWORD1>\r
+                       <KEYWORD1>VARCHAR</KEYWORD1>\r
+                       <KEYWORD1>VARCHARACTER</KEYWORD1>\r
+                       <KEYWORD1>VARYING</KEYWORD1>\r
+                       <KEYWORD1>WHEN</KEYWORD1>\r
+                       <KEYWORD1>WHERE</KEYWORD1>\r
+                       <KEYWORD1>WHILE</KEYWORD1>\r
+                       <KEYWORD1>WITH</KEYWORD1>\r
+                       <KEYWORD1>WRITE</KEYWORD1>\r
+                       <KEYWORD1>XOR</KEYWORD1>\r
+                       <KEYWORD1>YEAR_MONTH</KEYWORD1>\r
+                       <KEYWORD1>ZEROFILL</KEYWORD1>\r
+               \r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/netrexx.xml b/extra/xmode/modes/netrexx.xml
new file mode 100644 (file)
index 0000000..48d50eb
--- /dev/null
@@ -0,0 +1,414 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+  <PROPS>\r
+    <PROPERTY NAME="indentNextLines"\r
+      VALUE="\s*(if|loop|do|else|select|otherwise|catch|finally|class|method|properties)(.*)"/>\r
+    <!-- VALUE="\s*(((if|while)\s*\(|else\s*(\{|$)|else\s+if\s*\(|case\s+.+:|default:)[^;]*|for\s*\(.*)" -->\r
+    <PROPERTY NAME="commentStart" VALUE="/*" />\r
+    <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+    <PROPERTY NAME="lineComment" VALUE="--" />\r
+    <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+  </PROPS>\r
+  <RULES ESCAPE="\" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+    <!-- Documentation comment -->\r
+    <SPAN TYPE="COMMENT2" DELEGATE="java::JAVADOC">\r
+      <BEGIN>/**</BEGIN>\r
+      <END>*/</END>\r
+    </SPAN>\r
+\r
+    <!-- C style comment -->\r
+    <SPAN TYPE="COMMENT1">\r
+      <BEGIN>/*</BEGIN>\r
+      <END>*/</END>\r
+    </SPAN>\r
+\r
+    <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+      <BEGIN>"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN>\r
+    <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+      <BEGIN>'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN>\r
+\r
+    <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>\r
+\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">!</SEQ>\r
+    <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+    <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+    <SEQ TYPE="OPERATOR">+</SEQ>\r
+    <SEQ TYPE="OPERATOR">-</SEQ>\r
+    <SEQ TYPE="OPERATOR">/</SEQ>\r
+\r
+    <!-- workaround to stop "*" from being colorized\r
+         in import statements. -->\r
+    <SEQ TYPE="NULL">.*</SEQ>\r
+\r
+    <SEQ TYPE="OPERATOR">*</SEQ>\r
+    <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">%</SEQ>\r
+    <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+    <SEQ TYPE="OPERATOR">|</SEQ>\r
+    <SEQ TYPE="OPERATOR">^</SEQ>\r
+    <SEQ TYPE="OPERATOR">~</SEQ>\r
+    <SEQ TYPE="OPERATOR">}</SEQ>\r
+    <SEQ TYPE="OPERATOR">{</SEQ>\r
+\r
+    <KEYWORDS>\r
+\r
+      <FUNCTION>abbrev</FUNCTION>\r
+      <FUNCTION>abs</FUNCTION>\r
+      <FUNCTION>b2x</FUNCTION>\r
+      <FUNCTION>center</FUNCTION>\r
+      <FUNCTION>centre</FUNCTION>\r
+      <FUNCTION>changestr</FUNCTION>\r
+      <FUNCTION>charAt</FUNCTION>\r
+      <FUNCTION>compare</FUNCTION>\r
+      <FUNCTION>copies</FUNCTION>\r
+      <FUNCTION>copyIndexed</FUNCTION>\r
+      <FUNCTION>countstr</FUNCTION>\r
+      <FUNCTION>c2d</FUNCTION>\r
+      <FUNCTION>c2x</FUNCTION>\r
+      <FUNCTION>datatype</FUNCTION>\r
+      <FUNCTION>delstr</FUNCTION>\r
+      <FUNCTION>delword</FUNCTION>\r
+      <FUNCTION>d2c</FUNCTION>\r
+      <FUNCTION>d2X</FUNCTION>\r
+      <FUNCTION>equals</FUNCTION>\r
+      <FUNCTION>exists</FUNCTION>\r
+      <FUNCTION>format</FUNCTION>\r
+      <FUNCTION>hashCode</FUNCTION>\r
+      <FUNCTION>insert</FUNCTION>\r
+      <FUNCTION>lastpos</FUNCTION>\r
+      <FUNCTION>left</FUNCTION>\r
+      <FUNCTION>length</FUNCTION>\r
+      <FUNCTION>lower</FUNCTION>\r
+      <FUNCTION>max</FUNCTION>\r
+      <FUNCTION>min</FUNCTION>\r
+      <FUNCTION>nop</FUNCTION>\r
+      <FUNCTION>overlay</FUNCTION>\r
+      <FUNCTION>parse</FUNCTION>\r
+      <FUNCTION>pos</FUNCTION>\r
+      <FUNCTION>reverse</FUNCTION>\r
+      <FUNCTION>right</FUNCTION>\r
+      <FUNCTION>say</FUNCTION>\r
+      <FUNCTION>sequence</FUNCTION>\r
+      <FUNCTION>sign</FUNCTION>\r
+      <FUNCTION>space</FUNCTION>\r
+      <FUNCTION>strip</FUNCTION>\r
+      <FUNCTION>substr</FUNCTION>\r
+      <FUNCTION>subword</FUNCTION>\r
+      <FUNCTION>toCharArray</FUNCTION>\r
+      <FUNCTION>toString</FUNCTION>\r
+      <FUNCTION>toboolean</FUNCTION>\r
+      <FUNCTION>tobyte</FUNCTION>\r
+      <FUNCTION>tochar</FUNCTION>\r
+      <FUNCTION>todouble</FUNCTION>\r
+      <FUNCTION>tofloat</FUNCTION>\r
+      <FUNCTION>toint</FUNCTION>\r
+      <FUNCTION>tolong</FUNCTION>\r
+      <FUNCTION>toshort</FUNCTION>\r
+      <FUNCTION>trunc</FUNCTION>\r
+      <FUNCTION>translate</FUNCTION>\r
+      <FUNCTION>upper</FUNCTION>\r
+      <FUNCTION>verify</FUNCTION>\r
+      <FUNCTION>word</FUNCTION>\r
+      <FUNCTION>wordindex</FUNCTION>\r
+      <FUNCTION>wordlength</FUNCTION>\r
+      <FUNCTION>wordpos</FUNCTION>\r
+      <FUNCTION>words</FUNCTION>\r
+      <FUNCTION>x2b</FUNCTION>\r
+      <FUNCTION>x2c</FUNCTION>\r
+      <FUNCTION>x2d</FUNCTION>\r
+\r
+      <KEYWORD1>class</KEYWORD1>\r
+      <KEYWORD1>private</KEYWORD1>\r
+      <KEYWORD1>public</KEYWORD1>\r
+      <KEYWORD1>abstract</KEYWORD1>\r
+      <KEYWORD1>final</KEYWORD1>\r
+      <KEYWORD1>interface</KEYWORD1>\r
+      <KEYWORD1>dependent</KEYWORD1>\r
+      <KEYWORD1>adapter</KEYWORD1>\r
+      <KEYWORD1>deprecated</KEYWORD1>\r
+      <KEYWORD1>extends</KEYWORD1>\r
+      <KEYWORD1>uses</KEYWORD1>\r
+      <KEYWORD1>implements</KEYWORD1>\r
+\r
+      <KEYWORD1>method</KEYWORD1>\r
+      <KEYWORD1>native</KEYWORD1>\r
+      <KEYWORD1>returns</KEYWORD1>\r
+      <KEYWORD1>signals</KEYWORD1>\r
+\r
+      <KEYWORD1>properties</KEYWORD1>\r
+      <KEYWORD1>private</KEYWORD1>\r
+      <KEYWORD1>public</KEYWORD1>\r
+      <KEYWORD1>inheritable</KEYWORD1>\r
+      <KEYWORD1>constant</KEYWORD1>\r
+      <KEYWORD1>static</KEYWORD1>\r
+      <KEYWORD1>volatile</KEYWORD1>\r
+      <KEYWORD1>unused</KEYWORD1>\r
+      <KEYWORD1>transient</KEYWORD1>\r
+      <KEYWORD1>indirect</KEYWORD1>\r
+\r
+      <KEYWORD2>do</KEYWORD2>\r
+      <KEYWORD2>label</KEYWORD2>\r
+      <KEYWORD2>protect</KEYWORD2>\r
+      <KEYWORD2>catch</KEYWORD2>\r
+      <KEYWORD2>finally</KEYWORD2>\r
+      <KEYWORD2>end</KEYWORD2>\r
+      <KEYWORD2>signal</KEYWORD2>\r
+\r
+      <KEYWORD2>if</KEYWORD2>\r
+      <KEYWORD2>then</KEYWORD2>\r
+      <KEYWORD2>else</KEYWORD2>\r
+      <KEYWORD2>select</KEYWORD2>\r
+      <KEYWORD2>case</KEYWORD2>\r
+      <KEYWORD2>when</KEYWORD2>\r
+      <KEYWORD2>otherwise</KEYWORD2>\r
+\r
+      <KEYWORD2>loop</KEYWORD2>\r
+      <KEYWORD2>forever</KEYWORD2>\r
+      <KEYWORD2>for</KEYWORD2>\r
+      <KEYWORD2>to</KEYWORD2>\r
+      <KEYWORD2>by</KEYWORD2>\r
+      <KEYWORD2>over</KEYWORD2>\r
+      <KEYWORD2>until</KEYWORD2>\r
+      <KEYWORD2>while</KEYWORD2>\r
+      <KEYWORD2>leave</KEYWORD2>\r
+      <KEYWORD2>iterate</KEYWORD2>\r
+\r
+      <KEYWORD2>return</KEYWORD2>\r
+      <KEYWORD2>exit</KEYWORD2>\r
+\r
+      <KEYWORD3>ask</KEYWORD3>\r
+      <KEYWORD3>digits</KEYWORD3>\r
+      <KEYWORD3>form</KEYWORD3>\r
+      <KEYWORD3>null</KEYWORD3>\r
+      <KEYWORD3>source</KEYWORD3>\r
+      <KEYWORD3>this</KEYWORD3>\r
+      <KEYWORD3>super</KEYWORD3>\r
+      <KEYWORD3>parent</KEYWORD3>\r
+      <KEYWORD3>sourceline</KEYWORD3>\r
+      <KEYWORD3>version</KEYWORD3>\r
+\r
+      <KEYWORD3>trace</KEYWORD3>\r
+      <KEYWORD3>var</KEYWORD3>\r
+      <KEYWORD3>all</KEYWORD3>\r
+      <KEYWORD3>results</KEYWORD3>\r
+      <KEYWORD3>off</KEYWORD3>\r
+      <KEYWORD3>methods</KEYWORD3>\r
+\r
+      <KEYWORD3>package</KEYWORD3>\r
+      <KEYWORD3>import</KEYWORD3>\r
+      <KEYWORD3>numeric</KEYWORD3>\r
+      <KEYWORD3>scientific</KEYWORD3>\r
+      <KEYWORD3>engineering</KEYWORD3>\r
+\r
+      <LITERAL2>options</LITERAL2>\r
+      <LITERAL2>comments</LITERAL2>\r
+      <LITERAL2>nocomments</LITERAL2>\r
+      <LITERAL2>keep</LITERAL2>\r
+      <LITERAL2>nokeep</LITERAL2>\r
+      <LITERAL2>compact</LITERAL2>\r
+      <LITERAL2>nocompact</LITERAL2>\r
+      <LITERAL2>console</LITERAL2>\r
+      <LITERAL2>noconsole</LITERAL2>\r
+      <LITERAL2>decimal</LITERAL2>\r
+      <LITERAL2>nodecimal</LITERAL2>\r
+      <LITERAL2>explicit</LITERAL2>\r
+      <LITERAL2>noexplicit</LITERAL2>\r
+      <LITERAL2>java</LITERAL2>\r
+      <LITERAL2>nojava</LITERAL2>\r
+      <LITERAL2>savelog</LITERAL2>\r
+      <LITERAL2>nosavelog</LITERAL2>\r
+\r
+      <LITERAL2>sourcedir</LITERAL2>\r
+      <LITERAL2>nosourcedir</LITERAL2>\r
+      <LITERAL2>symbols</LITERAL2>\r
+      <LITERAL2>nosymbols</LITERAL2>\r
+      <LITERAL2>utf8</LITERAL2>\r
+      <LITERAL2>noutf8</LITERAL2>\r
+\r
+      <LITERAL2>notrace</LITERAL2>\r
+      <LITERAL2>binary</LITERAL2>\r
+      <LITERAL2>nobinary</LITERAL2>\r
+      <LITERAL2>crossref</LITERAL2>\r
+      <LITERAL2>nocrossref</LITERAL2>\r
+      <LITERAL2>diag</LITERAL2>\r
+      <LITERAL2>nodiag</LITERAL2>\r
+      <LITERAL2>format</LITERAL2>\r
+      <LITERAL2>noformat</LITERAL2>\r
+      <LITERAL2>logo</LITERAL2>\r
+      <LITERAL2>nologo</LITERAL2>\r
+      <LITERAL2>replace</LITERAL2>\r
+      <LITERAL2>noreplace</LITERAL2>\r
+\r
+      <LITERAL2>strictassign</LITERAL2>\r
+      <LITERAL2>nostrictassign</LITERAL2>\r
+      <LITERAL2>strictcase</LITERAL2>\r
+      <LITERAL2>nostrictcase</LITERAL2>\r
+      <LITERAL2>strictargs</LITERAL2>\r
+      <LITERAL2>nostrictargs</LITERAL2>\r
+      <LITERAL2>strictimport</LITERAL2>\r
+      <LITERAL2>nostrictimport</LITERAL2>\r
+      <LITERAL2>strictsignal</LITERAL2>\r
+      <LITERAL2>nostrictsignal</LITERAL2>\r
+      <LITERAL2>strictprops</LITERAL2>\r
+      <LITERAL2>nostrictprops</LITERAL2>\r
+\r
+      <LITERAL2>verbose</LITERAL2>\r
+      <LITERAL2>noverbose</LITERAL2>\r
+      <LITERAL2>verbose0</LITERAL2>\r
+      <LITERAL2>verbose1</LITERAL2>\r
+      <LITERAL2>verbose2</LITERAL2>\r
+      <LITERAL2>verbose3</LITERAL2>\r
+      <LITERAL2>verbose4</LITERAL2>\r
+      <LITERAL2>verbose5</LITERAL2>\r
+\r
+      <LABEL>boolean</LABEL>\r
+      <LABEL>char</LABEL>\r
+      <LABEL>byte</LABEL>\r
+      <LABEL>short</LABEL>\r
+      <LABEL>int</LABEL>\r
+      <LABEL>long</LABEL>\r
+      <LABEL>float</LABEL>\r
+      <LABEL>double</LABEL>\r
+      <LABEL>Boolean</LABEL>\r
+      <LABEL>Character</LABEL>\r
+      <LABEL>Byte</LABEL>\r
+      <LABEL>Short</LABEL>\r
+      <LABEL>Integer</LABEL>\r
+      <LABEL>Long</LABEL>\r
+      <LABEL>Float</LABEL>\r
+      <LABEL>Double</LABEL>\r
+      <LABEL>BigDecimal</LABEL>\r
+      <LABEL>BigInteger</LABEL>\r
+      <LABEL>String</LABEL>\r
+      <LABEL>Rexx</LABEL>\r
+\r
+      <LABEL>StringBuffer</LABEL>\r
+      <LABEL>Object</LABEL>\r
+      <LABEL>Number</LABEL>\r
+      <LABEL>ArrayList</LABEL>\r
+      <LABEL>Calendar</LABEL>\r
+      <LABEL>Date</LABEL>\r
+      <LABEL>HashMap</LABEL>\r
+      <LABEL>HashSet</LABEL>\r
+      <LABEL>Hashtable</LABEL>\r
+      <LABEL>LinkedHashMap</LABEL>\r
+      <LABEL>LinkedHashSet</LABEL>\r
+      <LABEL>TreeMap</LABEL>\r
+      <LABEL>TreeSet</LABEL>\r
+      <LABEL>Vector</LABEL>\r
+      <LABEL>ConcurrentModificationException</LABEL>\r
+\r
+      <LABEL>BufferedInputStream</LABEL>\r
+      <LABEL>BufferedOutputStream</LABEL>\r
+      <LABEL>BufferedReader</LABEL>\r
+      <LABEL>BufferedWriter</LABEL>\r
+      <LABEL>ByteArrayInputStream</LABEL>\r
+      <LABEL>ByteArrayOutputStream</LABEL>\r
+      <LABEL>CharArrayReader</LABEL>\r
+      <LABEL>CharArrayWriter</LABEL>\r
+      <LABEL>DataInputStream</LABEL>\r
+      <LABEL>DataOutputStream</LABEL>\r
+      <LABEL>File</LABEL>\r
+      <LABEL>FileDescriptor</LABEL>\r
+      <LABEL>FileInputStream</LABEL>\r
+      <LABEL>FileOutputStream</LABEL>\r
+      <LABEL>FilePermission</LABEL>\r
+      <LABEL>FileReader</LABEL>\r
+      <LABEL>FileWriter</LABEL>\r
+      <LABEL>FilterInputStream</LABEL>\r
+      <LABEL>FilterOutputStream</LABEL>\r
+      <LABEL>FilterReader</LABEL>\r
+      <LABEL>FilterWriter</LABEL>\r
+      <LABEL>InputStream</LABEL>\r
+      <LABEL>InputStreamReader</LABEL>\r
+      <LABEL>LineNumberInputStream</LABEL>\r
+      <LABEL>LineNumberReader</LABEL>\r
+      <LABEL>ObjectInputStream</LABEL>\r
+      <LABEL>ObjectOutputStream</LABEL>\r
+      <LABEL>OutputStream</LABEL>\r
+      <LABEL>OutputStreamWriter</LABEL>\r
+      <LABEL>PipedInputStream</LABEL>\r
+      <LABEL>PipedOutputStream</LABEL>\r
+      <LABEL>PipedReader</LABEL>\r
+      <LABEL>PipedWriter</LABEL>\r
+      <LABEL>PrintStream</LABEL>\r
+      <LABEL>PrintWriter</LABEL>\r
+      <LABEL>PushbackInputStream</LABEL>\r
+      <LABEL>PushbackReader</LABEL>\r
+      <LABEL>RandomAccessFile</LABEL>\r
+      <LABEL>Reader</LABEL>\r
+      <LABEL>SequenceInputStream</LABEL>\r
+      <LABEL>StreamTokenizer</LABEL>\r
+      <LABEL>StringBufferInputStream</LABEL>\r
+      <LABEL>StringReader</LABEL>\r
+      <LABEL>StringWriter</LABEL>\r
+      <LABEL>Writer</LABEL>\r
+\r
+      <!-- Commonly used (=java.lang.* and java.io.*) Exceptions -->\r
+      <MARKUP>ArithmeticException</MARKUP>\r
+      <MARKUP>ArrayIndexOutOfBoundsException</MARKUP>\r
+      <MARKUP>ArrayStoreException</MARKUP>\r
+      <MARKUP>ClassCastException</MARKUP>\r
+      <MARKUP>ClassNotFoundException</MARKUP>\r
+      <MARKUP>CloneNotSupportedException</MARKUP>\r
+      <MARKUP>Exception</MARKUP>\r
+      <MARKUP>IllegalAccessException</MARKUP>\r
+      <MARKUP>IllegalArgumentException</MARKUP>\r
+      <MARKUP>IllegalMonitorStateException</MARKUP>\r
+      <MARKUP>IllegalStateException</MARKUP>\r
+      <MARKUP>IllegalThreadStateException</MARKUP>\r
+      <MARKUP>IndexOutOfBoundsException</MARKUP>\r
+      <MARKUP>InstantiationException</MARKUP>\r
+      <MARKUP>InterruptedException</MARKUP>\r
+      <MARKUP>NegativeArraySizeException</MARKUP>\r
+      <MARKUP>NoSuchFieldException</MARKUP>\r
+      <MARKUP>NoSuchMethodException</MARKUP>\r
+      <MARKUP>NullPointerException</MARKUP>\r
+      <MARKUP>NumberFormatException</MARKUP>\r
+      <MARKUP>RuntimeException</MARKUP>\r
+      <MARKUP>SecurityException</MARKUP>\r
+      <MARKUP>StringIndexOutOfBoundsException</MARKUP>\r
+      <MARKUP>UnsupportedOperationException</MARKUP>\r
+\r
+      <MARKUP>CharConversionException</MARKUP>\r
+      <MARKUP>EOFException</MARKUP>\r
+      <MARKUP>FileNotFoundException</MARKUP>\r
+      <MARKUP>InterruptedIOException</MARKUP>\r
+      <MARKUP>InvalidClassException</MARKUP>\r
+      <MARKUP>InvalidObjectException</MARKUP>\r
+      <MARKUP>IOException</MARKUP>\r
+      <MARKUP>NotActiveException</MARKUP>\r
+      <MARKUP>NotSerializableException</MARKUP>\r
+      <MARKUP>ObjectStreamException</MARKUP>\r
+      <MARKUP>OptionalDataException</MARKUP>\r
+      <MARKUP>StreamCorruptedException</MARKUP>\r
+      <MARKUP>SyncFailedException</MARKUP>\r
+      <MARKUP>UnsupportedEncodingException</MARKUP>\r
+      <MARKUP>UTFDataFormatException</MARKUP>\r
+      <MARKUP>WriteAbortedException</MARKUP>\r
+\r
+      <!-- all rmi functions need to signal this -->\r
+      <MARKUP>RemoteException</MARKUP>\r
+\r
+      <!-- Rexx specific Exception -->\r
+      <MARKUP>BadArgumentException</MARKUP>\r
+      <MARKUP>BadColumnException</MARKUP>\r
+      <MARKUP>BadNumericException</MARKUP>\r
+      <MARKUP>DivideException</MARKUP>\r
+      <MARKUP>ExponentOverflowException</MARKUP>\r
+      <MARKUP>NoOtherwiseException</MARKUP>\r
+      <MARKUP>NotCharacterException</MARKUP>\r
+      <MARKUP>NotLogicException</MARKUP>\r
+\r
+    </KEYWORDS>\r
+  </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/nqc.xml b/extra/xmode/modes/nqc.xml
new file mode 100644 (file)
index 0000000..1c0e038
--- /dev/null
@@ -0,0 +1,219 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+\r
+               <!-- Auto indent -->\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="indentNextLine"\r
+                       VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+               <!-- set this to 'true' if you want to use GNU coding style -->\r
+               <PROPERTY NAME="doubleBracketIndent" VALUE="false" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\"\r
+               IGNORE_CASE="FALSE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="(0x[\p{XDigit}]+[lL]?|[\p{Digit}]+(e[\p{Digit}]*)?[lLdDfF]?)">\r
+\r
+               <!-- C style comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <!-- preprocessor statements -->\r
+               <EOL_SPAN TYPE="KEYWORD2">#</EOL_SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <MARK_PREVIOUS AT_WHITESPACE_END="TRUE"\r
+                       MATCH_TYPE="OPERATOR"\r
+                       TYPE="LABEL">:</MARK_PREVIOUS>\r
+\r
+               <!-- Function calls -->\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>__event_src</KEYWORD1>\r
+                       <KEYWORD1>__sensor</KEYWORD1>\r
+                       <KEYWORD1>__type</KEYWORD1>\r
+                       <KEYWORD1>abs</KEYWORD1>\r
+                       <KEYWORD1>aquire</KEYWORD1>\r
+                       <KEYWORD1>catch</KEYWORD1>\r
+                       <KEYWORD1>const</KEYWORD1>\r
+                       <KEYWORD1>break</KEYWORD1>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>monitor</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>repeat</KEYWORD1>\r
+                       <KEYWORD1>sign</KEYWORD1>\r
+                       <KEYWORD1>start</KEYWORD1>\r
+                       <KEYWORD1>stop</KEYWORD1>\r
+                       <KEYWORD1>sub</KEYWORD1>\r
+                       <KEYWORD1>switch</KEYWORD1>\r
+                       <KEYWORD1>task</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+\r
+                       <KEYWORD2>asm</KEYWORD2>\r
+                       <KEYWORD2>inline</KEYWORD2>\r
+\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>void</KEYWORD3>\r
+\r
+                       <LITERAL2>true</LITERAL2>\r
+                       <LITERAL2>false</LITERAL2>\r
+                       <LITERAL2>NULL</LITERAL2>\r
+\r
+                       <LITERAL2>SENSOR_1</LITERAL2>\r
+                       <LITERAL2>SENSOR_2</LITERAL2>\r
+                       <LITERAL2>SENSOR_3</LITERAL2>\r
+\r
+                       <LITERAL2>SENSOR_TYPE_NONE</LITERAL2>\r
+                       <LITERAL2>SENSOR_TYPE_TOUCH</LITERAL2>\r
+                       <LITERAL2>SENSOR_TYPE_TEMPERATURE</LITERAL2>\r
+                       <LITERAL2>SENSOR_TYPE_LIGHT</LITERAL2>\r
+                       <LITERAL2>SENSOR_TYPE_ROTATION</LITERAL2>\r
+\r
+                       <LITERAL2>SENSOR_MODE_RAW</LITERAL2>\r
+                       <LITERAL2>SENSOR_MODE_BOOL</LITERAL2>\r
+                       <LITERAL2>SENSOR_MODE_EDGE</LITERAL2>\r
+                       <LITERAL2>SENSOR_MODE_PULSE</LITERAL2>\r
+                       <LITERAL2>SENSOR_MODE_PERCENT</LITERAL2>\r
+                       <LITERAL2>SENSOR_MODE_FAHRENHEIT</LITERAL2>\r
+                       <LITERAL2>SENSOR_MODE_CELSIUS</LITERAL2>\r
+                       <LITERAL2>SENSOR_MODE_ROTATION</LITERAL2>\r
+\r
+                       <LITERAL2>SENSOR_TOUCH</LITERAL2>\r
+                       <LITERAL2>SENSOR_LIGHT</LITERAL2>\r
+                       <LITERAL2>SENSOR_EDGE</LITERAL2>\r
+                       <LITERAL2>SENSOR_PULSE</LITERAL2>\r
+                       <LITERAL2>SENSOR_FAHRENHEIT</LITERAL2>\r
+                       <LITERAL2>SENSOR_CELSIUS</LITERAL2>\r
+                       <LITERAL2>SENSOR_ROTATION</LITERAL2>\r
+\r
+                       <LITERAL2>OUT_A</LITERAL2>\r
+                       <LITERAL2>OUT_B</LITERAL2>\r
+                       <LITERAL2>OUT_C</LITERAL2>\r
+\r
+                       <LITERAL2>OUT_OFF</LITERAL2>\r
+                       <LITERAL2>OUT_ON</LITERAL2>\r
+                       <LITERAL2>OUT_FLOAT</LITERAL2>\r
+\r
+                       <LITERAL2>OUT_FWD</LITERAL2>\r
+                       <LITERAL2>OUT_REV</LITERAL2>\r
+                       <LITERAL2>OUT_TOOGLE</LITERAL2>\r
+\r
+                       <LITERAL2>OUT_FULL</LITERAL2>\r
+                       <LITERAL2>OUT_HALF</LITERAL2>\r
+                       <LITERAL2>OUT_LOW</LITERAL2>\r
+\r
+                       <LITERAL2>SOUND_CLICK</LITERAL2>\r
+                       <LITERAL2>SOUND_DOUBLE_BEEP</LITERAL2>\r
+                       <LITERAL2>SOUND_DOWN</LITERAL2>\r
+                       <LITERAL2>SOUND_UP</LITERAL2>\r
+                       <LITERAL2>SOUND_LOW_BEEP</LITERAL2>\r
+                       <LITERAL2>SOUND_FAST_UP</LITERAL2>\r
+\r
+                       <LITERAL2>DISPLAY_WATCH</LITERAL2>\r
+                       <LITERAL2>DISPLAY_OUT_A</LITERAL2>\r
+                       <LITERAL2>DISPLAY_OUT_B</LITERAL2>\r
+                       <LITERAL2>DISPLAY_OUT_C</LITERAL2>\r
+                       <LITERAL2>DISPLAY_SENSOR_1</LITERAL2>\r
+                       <LITERAL2>DISPLAY_SENSOR_2</LITERAL2>\r
+                       <LITERAL2>DISPLAY_SENSOR_3</LITERAL2>\r
+\r
+                       <LITERAL2>TX_POWER_LO</LITERAL2>\r
+                       <LITERAL2>TX_POWER_HI</LITERAL2>\r
+\r
+                       <LITERAL2>SERIAL_COMM_DEFAULT</LITERAL2>\r
+                       <LITERAL2>SERIAL_COMM_4800</LITERAL2>\r
+                       <LITERAL2>SERIAL_COMM_DUTY25</LITERAL2>\r
+                       <LITERAL2>SERIAL_COMM_76KHZ</LITERAL2>\r
+\r
+                       <LITERAL2>SERIAL_PACKET_PREAMBLE</LITERAL2>\r
+                       <LITERAL2>SERIAL_PACKET_DEFAULT</LITERAL2>\r
+                       <LITERAL2>SERIAL_PACKET_NEGATED</LITERAL2>\r
+                       <LITERAL2>SERIAL_PACKET_CHECKSUM</LITERAL2>\r
+                       <LITERAL2>SERIAL_PACKET_RCX</LITERAL2>\r
+                       <LITERAL2>SERIAL_PACKET_</LITERAL2>\r
+\r
+                       <LITERAL2>ACQUIRE_OUT_A</LITERAL2>\r
+                       <LITERAL2>ACQUIRE_OUT_B</LITERAL2>\r
+                       <LITERAL2>ACQUIRE_OUT_C</LITERAL2>\r
+                       <LITERAL2>ACQUIRE_SOUND</LITERAL2>\r
+                       <LITERAL2>ACQUIRE_USER_1</LITERAL2>\r
+                       <LITERAL2>ACQUIRE_USER_2</LITERAL2>\r
+                       <LITERAL2>ACQUIRE_USER_3</LITERAL2>\r
+                       <LITERAL2>ACQUIRE_USER_4</LITERAL2>\r
+\r
+                       <LITERAL2>EVENT_TYPE_PRESSED</LITERAL2>\r
+                       <LITERAL2>EVENT_TYPE_RELEASED</LITERAL2>\r
+                       <LITERAL2>EVENT_TYPE_PULSE</LITERAL2>\r
+                       <LITERAL2>EVENT_TYPE_EDGE</LITERAL2>\r
+                       <LITERAL2>EVENT_TYPE_FASTCHANGE</LITERAL2>\r
+                       <LITERAL2>EVENT_TYPE_LOW</LITERAL2>\r
+                       <LITERAL2>EVENT_TYPE_NORMAL</LITERAL2>\r
+                       <LITERAL2>EVENT_TYPE_HIGH</LITERAL2>\r
+                       <LITERAL2>EVENT_TYPE_CLICK</LITERAL2>\r
+                       <LITERAL2>EVENT_TYPE_DOUBLECLICK</LITERAL2>\r
+                       <LITERAL2>EVENT_TYPE_MESSAGE</LITERAL2>\r
+\r
+                       <LITERAL2>EVENT_1_PRESSED</LITERAL2>\r
+                       <LITERAL2>EVENT_1_RELEASED</LITERAL2>\r
+                       <LITERAL2>EVENT_2_PRESSED</LITERAL2>\r
+                       <LITERAL2>EVENT_2_RELEASED</LITERAL2>\r
+                       <LITERAL2>EVENT_LIGHT_HIGH</LITERAL2>\r
+                       <LITERAL2>EVENT_LIGHT_NORMAL</LITERAL2>\r
+                       <LITERAL2>EVENT_LIGHT_LOW</LITERAL2>\r
+                       <LITERAL2>EVENT_LIGHT_CLICK</LITERAL2>\r
+                       <LITERAL2>EVENT_LIGHT_DOUBLECLICK</LITERAL2>\r
+                       <LITERAL2>EVENT_COUNTER_0</LITERAL2>\r
+                       <LITERAL2>EVENT_COUNTER_1</LITERAL2>\r
+                       <LITERAL2>EVENT_TIMER_0</LITERAL2>\r
+                       <LITERAL2>EVENT_TIMER_1</LITERAL2>\r
+                       <LITERAL2>EVENT_TIMER_2</LITERAL2>\r
+                       <LITERAL2>EVENT_MESSAGE</LITERAL2>\r
+\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/nsis2.xml b/extra/xmode/modes/nsis2.xml
new file mode 100644 (file)
index 0000000..1b104bd
--- /dev/null
@@ -0,0 +1,480 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+Nullsoft Scriptable Installation System mode by Ryan Grove 2003\r
+Updated by Uwe (donovaly@users.sourceforge.net) 2007\r
+Updated for 4.3pre9 by Alan Ezust 2007\r
+$Id: nsis2.xml 9932 2007-07-06 15:44:46Z Vampire0 $\r
+\r
+This file should be accurate as of the version of NSIS 2.25. If I've left something out, please let me know.\r
+-->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE=";" />\r
+               <PROPERTY NAME="indentNextLine" VALUE="\s*(.*:|(function\s+.*)|(section\s+.*)|(subsection\s+.*))" />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="TRUE" ESCAPE="$\" HIGHLIGHT_DIGITS="TRUE" DEFAULT="NULL">\r
+               <EOL_SPAN TYPE="COMMENT1">;</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT2">#</EOL_SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD3">$</MARK_FOLLOWING>\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">::</MARK_PREVIOUS>\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR">:</MARK_PREVIOUS>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="NSIS_LITERAL">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="NSIS_LITERAL">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="NSIS_LITERAL">\r
+                       <BEGIN>`</BEGIN>\r
+                       <END>`</END>\r
+               </SPAN>\r
+\r
+               <KEYWORDS>\r
+                       <!-- Deprecated stuff -->\r
+                       <INVALID>dim</INVALID>\r
+                       <INVALID>uninstallexename</INVALID>\r
+\r
+                       <!-- Global variables -->\r
+                       <KEYWORD3>$0</KEYWORD3>\r
+                       <KEYWORD3>$1</KEYWORD3>\r
+                       <KEYWORD3>$2</KEYWORD3>\r
+                       <KEYWORD3>$3</KEYWORD3>\r
+                       <KEYWORD3>$4</KEYWORD3>\r
+                       <KEYWORD3>$5</KEYWORD3>\r
+                       <KEYWORD3>$6</KEYWORD3>\r
+                       <KEYWORD3>$7</KEYWORD3>\r
+                       <KEYWORD3>$8</KEYWORD3>\r
+                       <KEYWORD3>$9</KEYWORD3>\r
+                       <KEYWORD3>$INSTDIR</KEYWORD3>\r
+                       <KEYWORD3>$OUTDIR</KEYWORD3>\r
+                       <KEYWORD3>$CMDLINE</KEYWORD3>\r
+                       <KEYWORD3>$LANGUAGE</KEYWORD3>\r
+\r
+                       <!-- Local variables -->\r
+                       <KEYWORD3>$R0</KEYWORD3>\r
+                       <KEYWORD3>$R1</KEYWORD3>\r
+                       <KEYWORD3>$R2</KEYWORD3>\r
+                       <KEYWORD3>$R3</KEYWORD3>\r
+                       <KEYWORD3>$R4</KEYWORD3>\r
+                       <KEYWORD3>$R5</KEYWORD3>\r
+                       <KEYWORD3>$R6</KEYWORD3>\r
+                       <KEYWORD3>$R7</KEYWORD3>\r
+                       <KEYWORD3>$R8</KEYWORD3>\r
+                       <KEYWORD3>$R9</KEYWORD3>\r
+\r
+                       <!-- Constants -->\r
+                       <LITERAL3>ARCHIVE</LITERAL3>\r
+                       <LITERAL3>CENTER</LITERAL3>\r
+                       <LITERAL3>CONTROL</LITERAL3>\r
+                       <LITERAL3>CUR</LITERAL3>\r
+                       <LITERAL3>EXT</LITERAL3>\r
+                       <LITERAL3>F1</LITERAL3>\r
+                       <LITERAL3>F2</LITERAL3>\r
+                       <LITERAL3>F3</LITERAL3>\r
+                       <LITERAL3>F4</LITERAL3>\r
+                       <LITERAL3>F5</LITERAL3>\r
+                       <LITERAL3>F6</LITERAL3>\r
+                       <LITERAL3>F7</LITERAL3>\r
+                       <LITERAL3>F8</LITERAL3>\r
+                       <LITERAL3>F9</LITERAL3>\r
+                       <LITERAL3>F10</LITERAL3>\r
+                       <LITERAL3>F11</LITERAL3>\r
+                       <LITERAL3>F12</LITERAL3>\r
+                       <LITERAL3>F13</LITERAL3>\r
+                       <LITERAL3>F14</LITERAL3>\r
+                       <LITERAL3>F15</LITERAL3>\r
+                       <LITERAL3>F16</LITERAL3>\r
+                       <LITERAL3>F17</LITERAL3>\r
+                       <LITERAL3>F18</LITERAL3>\r
+                       <LITERAL3>F19</LITERAL3>\r
+                       <LITERAL3>F20</LITERAL3>\r
+                       <LITERAL3>F21</LITERAL3>\r
+                       <LITERAL3>F22</LITERAL3>\r
+                       <LITERAL3>F23</LITERAL3>\r
+                       <LITERAL3>F24</LITERAL3>\r
+                       <LITERAL3>FILE_ATTRIBUTE_ARCHIVE</LITERAL3>\r
+                       <LITERAL3>MB_ABORTRETRYIGNORE</LITERAL3>\r
+                       <LITERAL3>RIGHT</LITERAL3>\r
+                       <LITERAL3>RO</LITERAL3>\r
+                       <LITERAL3>SET</LITERAL3>\r
+                       <LITERAL3>SHIFT</LITERAL3>\r
+                       <LITERAL3>SW_SHOWMAXIMIZED</LITERAL3>\r
+                       <LITERAL3>SW_SHOWMINIMIZED</LITERAL3>\r
+                       <LITERAL3>SW_SHOWNORMAL</LITERAL3>\r
+                       <LITERAL3>a</LITERAL3>\r
+                       <LITERAL3>all</LITERAL3>\r
+                       <LITERAL3>alwaysoff</LITERAL3>\r
+                       <LITERAL3>auto</LITERAL3>\r
+                       <LITERAL3>both</LITERAL3>\r
+                       <LITERAL3>bottom</LITERAL3>\r
+                       <LITERAL3>bzip2</LITERAL3>\r
+                       <LITERAL3>checkbox</LITERAL3>\r
+                       <LITERAL3>colored</LITERAL3>\r
+                       <LITERAL3>components</LITERAL3>\r
+                       <LITERAL3>current</LITERAL3>\r
+                       <LITERAL3>custom</LITERAL3>\r
+                       <LITERAL3>directory</LITERAL3>\r
+                       <LITERAL3>false</LITERAL3>\r
+                       <LITERAL3>force</LITERAL3>\r
+                       <LITERAL3>hide</LITERAL3>\r
+                       <LITERAL3>ifnewer</LITERAL3>\r
+                       <LITERAL3>instfiles</LITERAL3>\r
+                       <LITERAL3>license</LITERAL3>\r
+                       <LITERAL3>listonly</LITERAL3>\r
+                       <LITERAL3>manual</LITERAL3>\r
+                       <LITERAL3>nevershow</LITERAL3>\r
+                       <LITERAL3>none</LITERAL3>\r
+                       <LITERAL3>off</LITERAL3>\r
+                       <LITERAL3>on</LITERAL3>\r
+                       <LITERAL3>r</LITERAL3>\r
+                       <LITERAL3>radiobuttons</LITERAL3>\r
+                       <LITERAL3>show</LITERAL3>\r
+                       <LITERAL3>silent</LITERAL3>\r
+                       <LITERAL3>silentlog</LITERAL3>\r
+                       <LITERAL3>smooth</LITERAL3>\r
+                       <LITERAL3>textonly</LITERAL3>\r
+                       <LITERAL3>top</LITERAL3>\r
+                       <LITERAL3>true</LITERAL3>\r
+                       <LITERAL3>try</LITERAL3>\r
+                       <LITERAL3>uninstConfirm</LITERAL3>\r
+                       <LITERAL3>w</LITERAL3>\r
+                       <LITERAL3>zlib</LITERAL3>\r
+                       <LITERAL3>$$</LITERAL3>\r
+                       <LITERAL3>$DESKTOP</LITERAL3>\r
+                       <LITERAL3>$EXEDIR</LITERAL3>\r
+                       <LITERAL3>$HWNDPARENT</LITERAL3>\r
+                       <LITERAL3>$PLUGINSDIR</LITERAL3>\r
+                       <LITERAL3>$PROGRAMFILES</LITERAL3>\r
+                       <LITERAL3>$QUICKLAUNCH</LITERAL3>\r
+                       <LITERAL3>$SMPROGRAMS</LITERAL3>\r
+                       <LITERAL3>$SMSTARTUP</LITERAL3>\r
+                       <LITERAL3>$STARTMENU</LITERAL3>\r
+                       <LITERAL3>$SYSDIR</LITERAL3>\r
+                       <LITERAL3>$TEMP</LITERAL3>\r
+                       <LITERAL3>$WINDIR</LITERAL3>\r
+                       <LITERAL3>$\n</LITERAL3>\r
+                       <LITERAL3>$\r</LITERAL3>\r
+                       <LITERAL3>${NSISDIR}</LITERAL3>\r
+                       <LITERAL3>ALT</LITERAL3>\r
+                       <LITERAL3>END</LITERAL3>\r
+                       <LITERAL3>FILE_ATTRIBUTE_HIDDEN</LITERAL3>\r
+                       <LITERAL3>FILE_ATTRIBUTE_NORMAL</LITERAL3>\r
+                       <LITERAL3>FILE_ATTRIBUTE_OFFLINE</LITERAL3>\r
+                       <LITERAL3>FILE_ATTRIBUTE_READONLY</LITERAL3>\r
+                       <LITERAL3>FILE_ATTRIBUTE_SYSTEM</LITERAL3>\r
+                       <LITERAL3>FILE_ATTRIBUTE_TEMPORARY</LITERAL3>\r
+                       <LITERAL3>HIDDEN</LITERAL3>\r
+                       <LITERAL3>HKCC</LITERAL3>\r
+                       <LITERAL3>HKCR</LITERAL3>\r
+                       <LITERAL3>HKCU</LITERAL3>\r
+                       <LITERAL3>HKDD</LITERAL3>\r
+                       <LITERAL3>HKLM</LITERAL3>\r
+                       <LITERAL3>HKPD</LITERAL3>\r
+                       <LITERAL3>HKU</LITERAL3>\r
+                       <LITERAL3>SHCTX</LITERAL3>\r
+                       <LITERAL3>IDABORT</LITERAL3>\r
+                       <LITERAL3>IDCANCEL</LITERAL3>\r
+                       <LITERAL3>IDIGNORE</LITERAL3>\r
+                       <LITERAL3>IDNO</LITERAL3>\r
+                       <LITERAL3>IDOK</LITERAL3>\r
+                       <LITERAL3>IDRETRY</LITERAL3>\r
+                       <LITERAL3>IDYES</LITERAL3>\r
+                       <LITERAL3>LEFT</LITERAL3>\r
+                       <LITERAL3>MB_DEFBUTTON1</LITERAL3>\r
+                       <LITERAL3>MB_DEFBUTTON2</LITERAL3>\r
+                       <LITERAL3>MB_DEFBUTTON3</LITERAL3>\r
+                       <LITERAL3>MB_DEFBUTTON4</LITERAL3>\r
+                       <LITERAL3>MB_ICONEXCLAMATION</LITERAL3>\r
+                       <LITERAL3>MB_ICONINFORMATION</LITERAL3>\r
+                       <LITERAL3>MB_ICONQUESTION</LITERAL3>\r
+                       <LITERAL3>MB_ICONSTOP</LITERAL3>\r
+                       <LITERAL3>MB_OK</LITERAL3>\r
+                       <LITERAL3>MB_OKCANCEL</LITERAL3>\r
+                       <LITERAL3>MB_RETRYCANCEL</LITERAL3>\r
+                       <LITERAL3>MB_RIGHT</LITERAL3>\r
+                       <LITERAL3>MB_SETFOREGROUND</LITERAL3>\r
+                       <LITERAL3>MB_TOPMOST</LITERAL3>\r
+                       <LITERAL3>MB_YESNO</LITERAL3>\r
+                       <LITERAL3>MB_YESNOCANCEL</LITERAL3>\r
+                       <LITERAL3>NORMAL</LITERAL3>\r
+                       <LITERAL3>OFFLINE</LITERAL3>\r
+                       <LITERAL3>READONLY</LITERAL3>\r
+                       <LITERAL3>SYSTEM</LITERAL3>\r
+                       <LITERAL3>TEMPORARY</LITERAL3>\r
+\r
+                       <!-- Command flags -->\r
+                       <KEYWORD4>/0</KEYWORD4>\r
+                       <KEYWORD4>/COMPONENTSONLYONCUSTOM</KEYWORD4>\r
+                       <KEYWORD4>/CUSTOMSTRING</KEYWORD4>\r
+                       <KEYWORD4>/FILESONLY</KEYWORD4>\r
+                       <KEYWORD4>/IMGID</KEYWORD4>\r
+                       <KEYWORD4>/ITALIC</KEYWORD4>\r
+                       <KEYWORD4>/LANG</KEYWORD4>\r
+                       <KEYWORD4>/NOCUSTOM</KEYWORD4>\r
+                       <KEYWORD4>/NOUNLOAD</KEYWORD4>\r
+                       <KEYWORD4>/REBOOTOK</KEYWORD4>\r
+                       <KEYWORD4>/RESIZETOFIT</KEYWORD4>\r
+                       <KEYWORD4>/RTL</KEYWORD4>\r
+                       <KEYWORD4>/SHORT</KEYWORD4>\r
+                       <KEYWORD4>/SILENT</KEYWORD4>\r
+                       <KEYWORD4>/STRIKE</KEYWORD4>\r
+                       <KEYWORD4>/TIMEOUT</KEYWORD4>\r
+                       <KEYWORD4>/TRIM</KEYWORD4>\r
+                       <KEYWORD4>/UNDERLINE</KEYWORD4>\r
+                       <KEYWORD4>/a</KEYWORD4>\r
+                       <KEYWORD4>/e</KEYWORD4>\r
+                       <KEYWORD4>/ifempty</KEYWORD4>\r
+                       <KEYWORD4>/nonfatal</KEYWORD4>\r
+                       <KEYWORD4>/oname</KEYWORD4>\r
+                       <KEYWORD4>/r</KEYWORD4>\r
+                       <KEYWORD4>/windows</KEYWORD4>\r
+\r
+                       <!-- Compiler utility commands -->\r
+                       <KEYWORD2>!addincludedir</KEYWORD2>\r
+                       <KEYWORD2>!addplugindir</KEYWORD2>\r
+                       <KEYWORD2>!define</KEYWORD2>\r
+                       <KEYWORD2>!include</KEYWORD2>\r
+                       <KEYWORD2>!cd</KEYWORD2>\r
+                       <KEYWORD2>!echo</KEYWORD2>\r
+                       <KEYWORD2>!error</KEYWORD2>\r
+                       <KEYWORD2>!insertmacro</KEYWORD2>\r
+                       <KEYWORD2>!packhdr</KEYWORD2>\r
+                       <KEYWORD2>!system</KEYWORD2>\r
+                       <KEYWORD2>!warning</KEYWORD2>\r
+                       <KEYWORD2>!undef</KEYWORD2>\r
+                       <KEYWORD2>!verbose</KEYWORD2>\r
+\r
+                       <!-- Conditional compilation -->\r
+                       <KEYWORD1>!ifdef</KEYWORD1>\r
+                       <KEYWORD1>!ifndef</KEYWORD1>\r
+                       <KEYWORD1>!if</KEYWORD1>\r
+                       <KEYWORD1>!else</KEYWORD1>\r
+                       <KEYWORD1>!endif</KEYWORD1>\r
+                       <KEYWORD1>!macro</KEYWORD1>\r
+                       <KEYWORD1>!macroend</KEYWORD1>\r
+\r
+                       <!-- Keywords -->\r
+                       <KEYWORD1>function</KEYWORD1>\r
+                       <KEYWORD1>functionend</KEYWORD1>\r
+                       <KEYWORD1>section</KEYWORD1>\r
+                       <KEYWORD1>sectionend</KEYWORD1>\r
+                       <KEYWORD1>subsection</KEYWORD1>\r
+                       <KEYWORD1>subsectionend</KEYWORD1>\r
+\r
+                       <!-- Instructions -->\r
+                       <KEYWORD2>addbrandingimage</KEYWORD2>\r
+                       <KEYWORD2>addsize</KEYWORD2>\r
+                       <KEYWORD2>allowrootdirinstall</KEYWORD2>\r
+                       <KEYWORD2>allowskipfiles</KEYWORD2>\r
+                       <KEYWORD2>autoclosewindow</KEYWORD2>\r
+                       <KEYWORD2>bggradient</KEYWORD2>\r
+                       <KEYWORD2>brandingtext</KEYWORD2>\r
+                       <KEYWORD2>bringtofront</KEYWORD2>\r
+                       <KEYWORD2>callinstdll</KEYWORD2>\r
+                       <KEYWORD2>caption</KEYWORD2>\r
+                       <KEYWORD2>changeui</KEYWORD2>\r
+                       <KEYWORD2>checkbitmap</KEYWORD2>\r
+                       <KEYWORD2>completedtext</KEYWORD2>\r
+                       <KEYWORD2>componenttext</KEYWORD2>\r
+                       <KEYWORD2>copyfiles</KEYWORD2>\r
+                       <KEYWORD2>crccheck</KEYWORD2>\r
+                       <KEYWORD2>createdirectory</KEYWORD2>\r
+                       <KEYWORD2>createfont</KEYWORD2>\r
+                       <KEYWORD2>createshortcut</KEYWORD2>\r
+                       <KEYWORD2>delete</KEYWORD2>\r
+                       <KEYWORD2>deleteinisec</KEYWORD2>\r
+                       <KEYWORD2>deleteinistr</KEYWORD2>\r
+                       <KEYWORD2>deleteregkey</KEYWORD2>\r
+                       <KEYWORD2>deleteregvalue</KEYWORD2>\r
+                       <KEYWORD2>detailprint</KEYWORD2>\r
+                       <KEYWORD2>detailsbuttontext</KEYWORD2>\r
+                       <KEYWORD2>dirshow</KEYWORD2>\r
+                       <KEYWORD2>dirtext</KEYWORD2>\r
+                       <KEYWORD2>enumregkey</KEYWORD2>\r
+                       <KEYWORD2>enumregvalue</KEYWORD2>\r
+                       <KEYWORD2>exch</KEYWORD2>\r
+                       <KEYWORD2>exec</KEYWORD2>\r
+                       <KEYWORD2>execshell</KEYWORD2>\r
+                       <KEYWORD2>execwait</KEYWORD2>\r
+                       <KEYWORD2>expandenvstrings</KEYWORD2>\r
+                       <KEYWORD2>file</KEYWORD2>\r
+                       <KEYWORD2>fileclose</KEYWORD2>\r
+                       <KEYWORD2>fileerrortext</KEYWORD2>\r
+                       <KEYWORD2>fileopen</KEYWORD2>\r
+                       <KEYWORD2>fileread</KEYWORD2>\r
+                       <KEYWORD2>filereadbyte</KEYWORD2>\r
+                       <KEYWORD2>fileseek</KEYWORD2>\r
+                       <KEYWORD2>filewrite</KEYWORD2>\r
+                       <KEYWORD2>filewritebyte</KEYWORD2>\r
+                       <KEYWORD2>findclose</KEYWORD2>\r
+                       <KEYWORD2>findfirst</KEYWORD2>\r
+                       <KEYWORD2>findnext</KEYWORD2>\r
+                       <KEYWORD2>findwindow</KEYWORD2>\r
+                       <KEYWORD2>flushini</KEYWORD2>\r
+                       <KEYWORD2>getcurinsttype</KEYWORD2>\r
+                       <KEYWORD2>getcurrentaddress</KEYWORD2>\r
+                       <KEYWORD2>getdlgitem</KEYWORD2>\r
+                       <KEYWORD2>getdllversion</KEYWORD2>\r
+                       <KEYWORD2>getdllversionlocal</KEYWORD2>\r
+                       <KEYWORD2>getfiletime</KEYWORD2>\r
+                       <KEYWORD2>getfiletimelocal</KEYWORD2>\r
+                       <KEYWORD2>getfullpathname</KEYWORD2>\r
+                       <KEYWORD2>getfunctionaddress</KEYWORD2>\r
+                       <KEYWORD2>getlabeladdress</KEYWORD2>\r
+                       <KEYWORD2>gettempfilename</KEYWORD2>\r
+                       <KEYWORD2>getwindowtext</KEYWORD2>\r
+                       <KEYWORD2>hidewindow</KEYWORD2>\r
+                       <KEYWORD2>icon</KEYWORD2>\r
+                       <KEYWORD2>initpluginsdir</KEYWORD2>\r
+                       <KEYWORD2>installbuttontext</KEYWORD2>\r
+                       <KEYWORD2>installcolors</KEYWORD2>\r
+                       <KEYWORD2>installdir</KEYWORD2>\r
+                       <KEYWORD2>installdirregkey</KEYWORD2>\r
+                       <KEYWORD2>instprogressflags</KEYWORD2>\r
+                       <KEYWORD2>insttype</KEYWORD2>\r
+                       <KEYWORD2>insttypegettext</KEYWORD2>\r
+                       <KEYWORD2>insttypesettext</KEYWORD2>\r
+                       <KEYWORD2>intfmt</KEYWORD2>\r
+                       <KEYWORD2>intop</KEYWORD2>\r
+                       <KEYWORD2>langstring</KEYWORD2>\r
+                       <KEYWORD2>langstringup</KEYWORD2>\r
+                       <KEYWORD2>licensebkcolor</KEYWORD2>\r
+                       <KEYWORD2>licensedata</KEYWORD2>\r
+                       <KEYWORD2>licenseforceselection</KEYWORD2>\r
+                       <KEYWORD2>licensetext</KEYWORD2>\r
+                       <KEYWORD2>loadlanguagefile</KEYWORD2>\r
+                       <KEYWORD2>loadlanguagefile</KEYWORD2>\r
+                       <KEYWORD2>logset</KEYWORD2>\r
+                       <KEYWORD2>logtext</KEYWORD2>\r
+                       <KEYWORD2>miscbuttontext</KEYWORD2>\r
+                       <KEYWORD2>name</KEYWORD2>\r
+                       <KEYWORD2>nop</KEYWORD2>\r
+                       <KEYWORD2>outfile</KEYWORD2>\r
+                       <KEYWORD2>page</KEYWORD2>\r
+                       <KEYWORD2>plugindir</KEYWORD2>\r
+                       <KEYWORD2>pop</KEYWORD2>\r
+                       <KEYWORD2>push</KEYWORD2>\r
+                       <KEYWORD2>readenvstr</KEYWORD2>\r
+                       <KEYWORD2>readinistr</KEYWORD2>\r
+                       <KEYWORD2>readregdword</KEYWORD2>\r
+                       <KEYWORD2>readregstr</KEYWORD2>\r
+                       <KEYWORD2>regdll</KEYWORD2>\r
+                       <KEYWORD2>rename</KEYWORD2>\r
+                       <KEYWORD2>reservefile</KEYWORD2>\r
+                       <KEYWORD2>rmdir</KEYWORD2>\r
+                       <KEYWORD2>searchpath</KEYWORD2>\r
+                       <KEYWORD2>sectiongetflags</KEYWORD2>\r
+                       <KEYWORD2>sectiongetinsttypes</KEYWORD2>\r
+                       <KEYWORD2>sectiongetsize</KEYWORD2>\r
+                       <KEYWORD2>sectiongettext</KEYWORD2>\r
+                       <KEYWORD2>sectionin</KEYWORD2>\r
+                       <KEYWORD2>sectionsetflags</KEYWORD2>\r
+                       <KEYWORD2>sectionsetinsttypes</KEYWORD2>\r
+                       <KEYWORD2>sectionsetsize</KEYWORD2>\r
+                       <KEYWORD2>sectionsettext</KEYWORD2>\r
+                       <KEYWORD2>sendmessage</KEYWORD2>\r
+                       <KEYWORD2>setautoclose</KEYWORD2>\r
+                       <KEYWORD2>setbkcolor</KEYWORD2>\r
+                       <KEYWORD2>setbrandingimage</KEYWORD2>\r
+                       <KEYWORD2>setcompress</KEYWORD2>\r
+                       <KEYWORD2>setcompressor</KEYWORD2>\r
+                       <KEYWORD2>setcurinsttype</KEYWORD2>\r
+                       <KEYWORD2>setdatablockoptimize</KEYWORD2>\r
+                       <KEYWORD2>setdatesave</KEYWORD2>\r
+                       <KEYWORD2>setdetailsprint</KEYWORD2>\r
+                       <KEYWORD2>setdetailsview</KEYWORD2>\r
+                       <KEYWORD2>setfileattributes</KEYWORD2>\r
+                       <KEYWORD2>setfont</KEYWORD2>\r
+                       <KEYWORD2>setoutpath</KEYWORD2>\r
+                       <KEYWORD2>setoverwrite</KEYWORD2>\r
+                       <KEYWORD2>setpluginunload</KEYWORD2>\r
+                       <KEYWORD2>setrebootflag</KEYWORD2>\r
+                       <KEYWORD2>setshellvarcontext</KEYWORD2>\r
+                       <KEYWORD2>setstaticbkcolor</KEYWORD2>\r
+                       <KEYWORD2>setwindowlong</KEYWORD2>\r
+                       <KEYWORD2>showinstdetails</KEYWORD2>\r
+                       <KEYWORD2>showuninstdetails</KEYWORD2>\r
+                       <KEYWORD2>showwindow</KEYWORD2>\r
+                       <KEYWORD2>silentinstall</KEYWORD2>\r
+                       <KEYWORD2>silentuninstall</KEYWORD2>\r
+                       <KEYWORD2>sleep</KEYWORD2>\r
+                       <KEYWORD2>spacetexts</KEYWORD2>\r
+                       <KEYWORD2>strcpy</KEYWORD2>\r
+                       <KEYWORD2>strlen</KEYWORD2>\r
+                       <KEYWORD2>subcaption</KEYWORD2>\r
+                       <KEYWORD2>uninstallbuttontext</KEYWORD2>\r
+                       <KEYWORD2>uninstallcaption</KEYWORD2>\r
+                       <KEYWORD2>uninstallicon</KEYWORD2>\r
+                       <KEYWORD2>uninstallsubcaption</KEYWORD2>\r
+                       <KEYWORD2>uninstalltext</KEYWORD2>\r
+                       <KEYWORD2>uninstpage</KEYWORD2>\r
+                       <KEYWORD2>unregdll</KEYWORD2>\r
+                       <KEYWORD2>var</KEYWORD2>\r
+                       <KEYWORD2>viaddversionkey</KEYWORD2>\r
+                       <KEYWORD2>videscription</KEYWORD2>\r
+                       <KEYWORD2>vicompanyname</KEYWORD2>\r
+                       <KEYWORD2>vicomments</KEYWORD2>\r
+                       <KEYWORD2>vilegalcopyrights</KEYWORD2>\r
+                       <KEYWORD2>vilegaltrademarks</KEYWORD2>\r
+                       <KEYWORD2>viproductname</KEYWORD2>\r
+                       <KEYWORD2>viproductversion</KEYWORD2>\r
+                       <KEYWORD2>windowicon</KEYWORD2>\r
+                       <KEYWORD2>writeinistr</KEYWORD2>\r
+                       <KEYWORD2>writeregbin</KEYWORD2>\r
+                       <KEYWORD2>writeregdword</KEYWORD2>\r
+                       <KEYWORD2>writeregexpandstr</KEYWORD2>\r
+                       <KEYWORD2>writeregstr</KEYWORD2>\r
+                       <KEYWORD2>writeuninstaller</KEYWORD2>\r
+                       <KEYWORD2>xpstyle</KEYWORD2>\r
+\r
+                       <!-- Flow control instructions -->\r
+                       <KEYWORD1>abort</KEYWORD1>\r
+                       <KEYWORD1>call</KEYWORD1>\r
+                       <KEYWORD1>clearerrors</KEYWORD1>\r
+                       <KEYWORD1>goto</KEYWORD1>\r
+                       <KEYWORD1>ifabort</KEYWORD1>\r
+                       <KEYWORD1>iferrors</KEYWORD1>\r
+                       <KEYWORD1>iffileexists</KEYWORD1>\r
+                       <KEYWORD1>ifrebootflag</KEYWORD1>\r
+                       <KEYWORD1>intcmp</KEYWORD1>\r
+                       <KEYWORD1>intcmpu</KEYWORD1>\r
+                       <KEYWORD1>iswindow</KEYWORD1>\r
+                       <KEYWORD1>messagebox</KEYWORD1>\r
+                       <KEYWORD1>reboot</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>quit</KEYWORD1>\r
+                       <KEYWORD1>seterrors</KEYWORD1>\r
+                       <KEYWORD1>strcmp</KEYWORD1>\r
+\r
+                       <!-- Callback functions -->\r
+                       <KEYWORD3>.onguiinit</KEYWORD3>\r
+                       <KEYWORD3>.oninit</KEYWORD3>\r
+                       <KEYWORD3>.oninstfailed</KEYWORD3>\r
+                       <KEYWORD3>.oninstsuccess</KEYWORD3>\r
+                       <KEYWORD3>.onmouseoversection</KEYWORD3>\r
+                       <KEYWORD3>.onselchange</KEYWORD3>\r
+                       <KEYWORD3>.onuserabort</KEYWORD3>\r
+                       <KEYWORD3>.onverifyinstdir</KEYWORD3>\r
+                       <KEYWORD3>un.onguiinit</KEYWORD3>\r
+                       <KEYWORD3>un.oninit</KEYWORD3>\r
+                       <KEYWORD3>un.onuninstfailed</KEYWORD3>\r
+                       <KEYWORD3>un.onuninstsuccess</KEYWORD3>\r
+                       <KEYWORD3>un.onuserabort</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="NSIS_LITERAL" DEFAULT="LITERAL1" NO_WORD_SEP="-{}_">\r
+       </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/objective-c.xml b/extra/xmode/modes/objective-c.xml
new file mode 100644 (file)
index 0000000..c6c52c8
--- /dev/null
@@ -0,0 +1,119 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- Extension of c.xml to handle Objective-C keywords. -->\r
+<MODE>\r
+    <PROPS>\r
+        <PROPERTY NAME="commentStart" VALUE="/*" />\r
+        <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+        <PROPERTY NAME="lineComment" VALUE="//" />\r
+        <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+\r
+       <!-- Auto indent -->\r
+       <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+       <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+       <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />\r
+       <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />\r
+       <PROPERTY NAME="indentNextLine"\r
+               VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+       <PROPERTY NAME="unindentThisLine"\r
+               VALUE="^.*(default:\s*|case.*:.*)$" />\r
+       <PROPERTY NAME="electricKeys" VALUE=":" />\r
+    </PROPS>\r
+\r
+    <RULES\r
+        ESCAPE="\" IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+        <EOL_SPAN TYPE="KEYWORD2" AT_WHITESPACE_END="TRUE" DELEGATE="CPP">#</EOL_SPAN>\r
+\r
+        <IMPORT DELEGATE="c::LEX"/>\r
+        <IMPORT DELEGATE="c::CORE"/>\r
+               <IMPORT DELEGATE="CORE"/>\r
+    </RULES>\r
+\r
+    <!-- Core language -->\r
+    <RULES SET="CORE"\r
+        ESCAPE="\" IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+        <KEYWORDS>\r
+            <!-- Types (Objective C) -->\r
+            <KEYWORD3>id</KEYWORD3>\r
+            <KEYWORD3>Class</KEYWORD3>\r
+            <KEYWORD3>SEL</KEYWORD3>\r
+            <KEYWORD3>IMP</KEYWORD3>\r
+            <KEYWORD3>BOOL</KEYWORD3>\r
+\r
+            <!-- Keywords (Objective C) -->\r
+            <KEYWORD1>oneway</KEYWORD1>\r
+            <KEYWORD1>in</KEYWORD1>\r
+            <KEYWORD1>out</KEYWORD1>\r
+            <KEYWORD1>inout</KEYWORD1>\r
+            <KEYWORD1>bycopy</KEYWORD1>\r
+            <KEYWORD1>byref</KEYWORD1>\r
+            <KEYWORD1>self</KEYWORD1>\r
+            <KEYWORD1>super</KEYWORD1>\r
+\r
+            <!-- Preprocessor Directives (Objective C)-->\r
+            <KEYWORD1>@interface</KEYWORD1>\r
+            <KEYWORD1>@implementation</KEYWORD1>\r
+            <KEYWORD1>@protocol</KEYWORD1>\r
+            <KEYWORD1>@end</KEYWORD1>\r
+            <KEYWORD1>@private</KEYWORD1>\r
+            <KEYWORD1>@protected</KEYWORD1>\r
+            <KEYWORD1>@public</KEYWORD1>\r
+            <KEYWORD1>@class</KEYWORD1>\r
+            <KEYWORD1>@selector</KEYWORD1>\r
+            <KEYWORD1>@endcode</KEYWORD1>\r
+            <KEYWORD1>@defs</KEYWORD1>\r
+\r
+            <LITERAL2>TRUE</LITERAL2>\r
+            <LITERAL2>FALSE</LITERAL2>\r
+            <LITERAL2>YES</LITERAL2>\r
+            <LITERAL2>NO</LITERAL2>\r
+            <LITERAL2>NULL</LITERAL2>\r
+            <LITERAL2>nil</LITERAL2>\r
+            <LITERAL2>Nil</LITERAL2>\r
+        </KEYWORDS>\r
+    </RULES>\r
+\r
+    <!-- Preprocessor specific rules -->\r
+    <RULES SET="CPP"\r
+        ESCAPE="\" IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+\r
+        <EOL_SPAN_REGEXP HASH_CHAR="include" TYPE="MARKUP" DELEGATE="c::INCLUDE">include\b</EOL_SPAN_REGEXP>\r
+        <EOL_SPAN_REGEXP HASH_CHAR="import" TYPE="MARKUP" DELEGATE="c::INCLUDE">import\b</EOL_SPAN_REGEXP>\r
+        <EOL_SPAN_REGEXP HASH_CHAR="define" TYPE="MARKUP" DELEGATE="DEFINE">define\b</EOL_SPAN_REGEXP>\r
+        <EOL_SPAN_REGEXP HASH_CHAR="endif" TYPE="MARKUP" DELEGATE="c::LEX">endif\b</EOL_SPAN_REGEXP>\r
+        <EOL_SPAN_REGEXP HASH_CHAR="elif" TYPE="MARKUP" DELEGATE="c::CONDITION">elif\b</EOL_SPAN_REGEXP>\r
+        <EOL_SPAN_REGEXP HASH_CHAR="if" TYPE="MARKUP" DELEGATE="c::CONDITION">if\b</EOL_SPAN_REGEXP>\r
+\r
+        <IMPORT DELEGATE="LEX"/>\r
+\r
+        <!-- Directives -->\r
+        <KEYWORDS>\r
+            <MARKUP>ifdef</MARKUP>\r
+            <MARKUP>ifndef</MARKUP>\r
+            <MARKUP>else</MARKUP>\r
+            <MARKUP>error</MARKUP>\r
+            <MARKUP>line</MARKUP>\r
+            <MARKUP>pragma</MARKUP>\r
+            <MARKUP>undef</MARKUP>\r
+            <MARKUP>warning</MARKUP>\r
+        </KEYWORDS>\r
+    </RULES>\r
+\r
+    <!-- After #define directive -->\r
+    <!-- Almost same as the normal code,\r
+        except two additional operators # and ##. -->\r
+    <RULES SET="DEFINE"\r
+        ESCAPE="\" IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
+        <SEQ TYPE="OPERATOR">#</SEQ>\r
+        <IMPORT DELEGATE="c::LEX"/>\r
+        <IMPORT DELEGATE="c::CORE"/>\r
+        <IMPORT DELEGATE="CORE"/>\r
+    </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/objectrexx.xml b/extra/xmode/modes/objectrexx.xml
new file mode 100644 (file)
index 0000000..875e83e
--- /dev/null
@@ -0,0 +1,246 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="indentNextLines"\r
+                       VALUE="\s*(if|loop|do|else|select|otherwise|catch|finally|class|method|properties)(.*)"/>\r
+               <!-- set this to 'true' if you want to use GNU coding style -->\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="--" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\"\r
+               IGNORE_CASE="FALSE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="(0x[\p{XDigit}]+[lL]?|[\p{Digit}]+(e[\p{Digit}]*)?[lLdDfF]?)">\r
+\r
+               <!-- C style comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <!-- preprocessor statements -->\r
+               <EOL_SPAN TYPE="KEYWORD2">#</EOL_SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+\r
+               <MARK_PREVIOUS TYPE="FUNCTION">::</MARK_PREVIOUS>\r
+\r
+               <MARK_PREVIOUS AT_WHITESPACE_END="TRUE"\r
+                       MATCH_TYPE="OPERATOR"\r
+                       TYPE="LABEL">:</MARK_PREVIOUS>\r
+\r
+               <!-- Function calls -->\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>Address</KEYWORD1>\r
+                       <KEYWORD1>Arg</KEYWORD1>\r
+                       <KEYWORD1>Call</KEYWORD1>\r
+                       <KEYWORD1>Do</KEYWORD1>\r
+                       <KEYWORD1>Drop</KEYWORD1>\r
+                       <KEYWORD1>Exit</KEYWORD1>\r
+                       <KEYWORD1>Expose</KEYWORD1>\r
+                       <KEYWORD1>Forward</KEYWORD1>\r
+                       <KEYWORD1>Guard</KEYWORD1>\r
+                       <KEYWORD1>If</KEYWORD1>\r
+                       <KEYWORD1>Interpret</KEYWORD1>\r
+                       <KEYWORD1>Iterate</KEYWORD1>\r
+                       <KEYWORD1>Leave</KEYWORD1>\r
+                       <KEYWORD1>Nop</KEYWORD1>\r
+                       <KEYWORD1>Numeric</KEYWORD1>\r
+                       <KEYWORD1>Parse</KEYWORD1>\r
+                       <KEYWORD1>Procedure</KEYWORD1>\r
+                       <KEYWORD1>pull</KEYWORD1>\r
+                       <KEYWORD1>Push</KEYWORD1>\r
+                       <KEYWORD1>Queue</KEYWORD1>\r
+                       <KEYWORD1>Raise</KEYWORD1>\r
+                       <KEYWORD1>reply</KEYWORD1>\r
+                       <KEYWORD1>Return</KEYWORD1>\r
+                       <KEYWORD1>Say</KEYWORD1>\r
+                       <KEYWORD1>Seleect</KEYWORD1>\r
+                       <KEYWORD1>Signal</KEYWORD1>\r
+                       <KEYWORD1>Trace</KEYWORD1>\r
+                       <KEYWORD1>use</KEYWORD1>\r
+                       <KEYWORD1>Class</KEYWORD1>\r
+                       <KEYWORD1>Method</KEYWORD1>\r
+                       <KEYWORD1>Requires</KEYWORD1>\r
+                       <KEYWORD1>Routine</KEYWORD1>\r
+                       <KEYWORD1>Result</KEYWORD1>\r
+                       <KEYWORD1>RC</KEYWORD1>\r
+                       <KEYWORD1>Self</KEYWORD1>\r
+                       <KEYWORD1>Sigl</KEYWORD1>\r
+                       <KEYWORD1>Super</KEYWORD1>\r
+                       <KEYWORD2>Abbrev</KEYWORD2>\r
+                       <KEYWORD2>Abs</KEYWORD2>\r
+                       <KEYWORD2>Address</KEYWORD2>\r
+                       <KEYWORD2>Arg</KEYWORD2>\r
+                       <KEYWORD2>Beep</KEYWORD2>\r
+                       <KEYWORD2>BitAnd</KEYWORD2>\r
+                       <KEYWORD2>BitOr</KEYWORD2>\r
+                       <KEYWORD2>BitXor</KEYWORD2>\r
+                       <KEYWORD2>B2X</KEYWORD2>\r
+                       <KEYWORD2>Center</KEYWORD2>\r
+                       <KEYWORD2>ChangeStr</KEYWORD2>\r
+                       <KEYWORD2>CharIn</KEYWORD2>\r
+                       <KEYWORD2>CharOut</KEYWORD2>\r
+                       <KEYWORD2>Chars</KEYWORD2>\r
+                       <KEYWORD2>Compare</KEYWORD2>\r
+                       <KEYWORD2>Consition</KEYWORD2>\r
+                       <KEYWORD2>Copies</KEYWORD2>\r
+                       <KEYWORD2>CountStr</KEYWORD2>\r
+                       <KEYWORD2>C2D</KEYWORD2>\r
+                       <KEYWORD2>C2X</KEYWORD2>\r
+                       <KEYWORD2>DataType</KEYWORD2>\r
+                       <KEYWORD2>Date</KEYWORD2>\r
+                       <KEYWORD2>DelStr</KEYWORD2>\r
+                       <KEYWORD2>DelWord</KEYWORD2>\r
+                       <KEYWORD2>Digits</KEYWORD2>\r
+                       <KEYWORD2>Directory</KEYWORD2>\r
+                       <KEYWORD2>D2C</KEYWORD2>\r
+                       <KEYWORD2>D2X</KEYWORD2>\r
+                       <KEYWORD2>ErrorText</KEYWORD2>\r
+                       <KEYWORD2>FileSpec</KEYWORD2>\r
+                       <KEYWORD2>Form</KEYWORD2>\r
+                       <KEYWORD2>Format</KEYWORD2>\r
+                       <KEYWORD2>Fuzz</KEYWORD2>\r
+                       <KEYWORD2>Insert</KEYWORD2>\r
+                       <KEYWORD2>LastPos</KEYWORD2>\r
+                       <KEYWORD2>Left</KEYWORD2>\r
+                       <KEYWORD2>Length</KEYWORD2>\r
+                       <KEYWORD2>LineIn</KEYWORD2>\r
+                       <KEYWORD2>LineOut</KEYWORD2>\r
+                       <KEYWORD2>Lines</KEYWORD2>\r
+                       <KEYWORD2>Max</KEYWORD2>\r
+                       <KEYWORD2>Min</KEYWORD2>\r
+                       <KEYWORD2>Overlay</KEYWORD2>\r
+                       <KEYWORD2>Pos</KEYWORD2>\r
+                       <KEYWORD2>Queued</KEYWORD2>\r
+                       <KEYWORD2>Random</KEYWORD2>\r
+                       <KEYWORD2>Reverse</KEYWORD2>\r
+                       <KEYWORD2>Right</KEYWORD2>\r
+                       <KEYWORD2>Sign</KEYWORD2>\r
+                       <KEYWORD2>SourceLine</KEYWORD2>\r
+                       <KEYWORD2>Space</KEYWORD2>\r
+                       <KEYWORD2>Stream</KEYWORD2>\r
+                       <KEYWORD2>Strip</KEYWORD2>\r
+                       <KEYWORD2>SubStr</KEYWORD2>\r
+                       <KEYWORD2>SubWord</KEYWORD2>\r
+                       <KEYWORD2>Symbol</KEYWORD2>\r
+                       <KEYWORD2>Time</KEYWORD2>\r
+                       <KEYWORD2>Trace</KEYWORD2>\r
+                       <KEYWORD2>Translate</KEYWORD2>\r
+                       <KEYWORD2>Trunc</KEYWORD2>\r
+                       <KEYWORD2>Value</KEYWORD2>\r
+                       <KEYWORD2>Var</KEYWORD2>\r
+                       <KEYWORD2>Verify</KEYWORD2>\r
+                       <KEYWORD2>Word</KEYWORD2>\r
+                       <KEYWORD2>WordIndex</KEYWORD2>\r
+                       <KEYWORD2>WordLength</KEYWORD2>\r
+                       <KEYWORD2>WordPos</KEYWORD2>\r
+                       <KEYWORD2>Words</KEYWORD2>\r
+                       <KEYWORD2>XRange</KEYWORD2>\r
+                       <KEYWORD2>X2B</KEYWORD2>\r
+                       <KEYWORD2>X2C</KEYWORD2>\r
+                       <KEYWORD2>X2D</KEYWORD2>\r
+                       <KEYWORD2>RxFuncAdd</KEYWORD2>\r
+                       <KEYWORD2>RxFuncDrop</KEYWORD2>\r
+                       <KEYWORD2>RxFuncQuery</KEYWORD2>\r
+                       <KEYWORD2>RxMessageBox</KEYWORD2>\r
+                       <KEYWORD2>RxWinExec</KEYWORD2>\r
+                       <KEYWORD2>SysAddRexxMacro</KEYWORD2>\r
+                       <KEYWORD2>SysBootDrive</KEYWORD2>\r
+                       <KEYWORD2>SysClearRexxMacroSpace</KEYWORD2>\r
+                       <KEYWORD2>SysCloseEventSem</KEYWORD2>\r
+                       <KEYWORD2>SysCloseMutexSem</KEYWORD2>\r
+                       <KEYWORD2>SysCls</KEYWORD2>\r
+                       <KEYWORD2>SysCreateEventSem</KEYWORD2>\r
+                       <KEYWORD2>SysCreateMutexSem</KEYWORD2>\r
+                       <KEYWORD2>SysCurPos</KEYWORD2>\r
+                       <KEYWORD2>SysCurState</KEYWORD2>\r
+                       <KEYWORD2>SysDriveInfo</KEYWORD2>\r
+                       <KEYWORD2>SysDriveMap</KEYWORD2>\r
+                       <KEYWORD2>SysDropFuncs</KEYWORD2>\r
+                       <KEYWORD2>SysDropRexxMacro</KEYWORD2>\r
+                       <KEYWORD2>SysDumpVariables</KEYWORD2>\r
+                       <KEYWORD2>SysFileDelete</KEYWORD2>\r
+                       <KEYWORD2>SysFileSearch</KEYWORD2>\r
+                       <KEYWORD2>SysFileSystemType</KEYWORD2>\r
+                       <KEYWORD2>SysFileTree</KEYWORD2>\r
+                       <KEYWORD2>SysFromUnicode</KEYWORD2>\r
+                       <KEYWORD2>SysToUnicode</KEYWORD2>\r
+                       <KEYWORD2>SysGetErrortext</KEYWORD2>\r
+                       <KEYWORD2>SysGetFileDateTime</KEYWORD2>\r
+                       <KEYWORD2>SysGetKey</KEYWORD2>\r
+                       <KEYWORD2>SysIni</KEYWORD2>\r
+                       <KEYWORD2>SysLoadFuncs</KEYWORD2>\r
+                       <KEYWORD2>SysLoadRexxMacroSpace</KEYWORD2>\r
+                       <KEYWORD2>SysMkDir</KEYWORD2>\r
+                       <KEYWORD2>SysOpenEventSem</KEYWORD2>\r
+                       <KEYWORD2>SysOpenMutexSem</KEYWORD2>\r
+                       <KEYWORD2>SysPostEventSem</KEYWORD2>\r
+                       <KEYWORD2>SysPulseEventSem</KEYWORD2>\r
+                       <KEYWORD2>SysQueryProcess</KEYWORD2>\r
+                       <KEYWORD2>SysQueryRexxMacro</KEYWORD2>\r
+                       <KEYWORD2>SysReleaseMutexSem</KEYWORD2>\r
+                       <KEYWORD2>SysReorderRexxMacro</KEYWORD2>\r
+                       <KEYWORD2>SysRequestMutexSem</KEYWORD2>\r
+                       <KEYWORD2>SysResetEventSem</KEYWORD2>\r
+                       <KEYWORD2>SysRmDir</KEYWORD2>\r
+                       <KEYWORD2>SysSaveRexxMacroSpace</KEYWORD2>\r
+                       <KEYWORD2>SysSearchPath</KEYWORD2>\r
+                       <KEYWORD2>SysSetFileDateTime</KEYWORD2>\r
+                       <KEYWORD2>SysSetPriority</KEYWORD2>\r
+                       <KEYWORD2>SysSleep</KEYWORD2>\r
+                       <KEYWORD2>SysStemCopy</KEYWORD2>\r
+                       <KEYWORD2>SysStemDelete</KEYWORD2>\r
+                       <KEYWORD2>SysStemInsert</KEYWORD2>\r
+                       <KEYWORD2>SysStemSort</KEYWORD2>\r
+                       <KEYWORD2>SysSwitchSession</KEYWORD2>\r
+                       <KEYWORD2>SysSystemDirectory</KEYWORD2>\r
+                       <KEYWORD2>SysTempFileName</KEYWORD2>\r
+                       <KEYWORD2>SysTextScreenRead</KEYWORD2>\r
+                       <KEYWORD2>SysTextScreenSize</KEYWORD2>\r
+                       <KEYWORD2>SysUtilVersion</KEYWORD2>\r
+                       <KEYWORD2>SysVersion</KEYWORD2>\r
+                       <KEYWORD2>SysVolumeLabel</KEYWORD2>\r
+                       <KEYWORD2>SysWaitEventSem</KEYWORD2>\r
+                       <KEYWORD2>SysWaitNamedPipe</KEYWORD2>\r
+                       <KEYWORD2>SysWinDecryptFile</KEYWORD2>\r
+                       <KEYWORD2>SysWinEncryptFile</KEYWORD2>\r
+                       <KEYWORD2>SysWinVer</KEYWORD2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/occam.xml b/extra/xmode/modes/occam.xml
new file mode 100644 (file)
index 0000000..4e7265e
--- /dev/null
@@ -0,0 +1,260 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- Occam mode by Rick Beton. -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="" />\r
+               <PROPERTY NAME="blockComment" VALUE="" />\r
+               <PROPERTY NAME="noWordSep" VALUE="." />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+\r
+               <!-- Normal comments. -->\r
+               <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>\r
+\r
+               <!-- Compiler directives. -->\r
+               <EOL_SPAN TYPE="COMMENT2">#</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">:=</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">\</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">/\</SEQ>\r
+               <SEQ TYPE="OPERATOR">\/</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+\r
+               <KEYWORDS>\r
+                        <!-- Structure keywords -->\r
+                       <KEYWORD1>ALT</KEYWORD1>\r
+                       <KEYWORD1>ASM</KEYWORD1>\r
+                       <KEYWORD1>CASE</KEYWORD1>\r
+                       <KEYWORD1>FUNCTION</KEYWORD1>\r
+                       <KEYWORD1>IF</KEYWORD1>\r
+                       <KEYWORD1>INLINE</KEYWORD1>\r
+                       <KEYWORD1>PAR</KEYWORD1>\r
+                       <KEYWORD1>PLACED</KEYWORD1>\r
+                       <KEYWORD1>PRI</KEYWORD1>\r
+                       <KEYWORD1>PROC</KEYWORD1>\r
+                       <KEYWORD1>RESULT</KEYWORD1>\r
+                       <KEYWORD1>SEQ</KEYWORD1>\r
+                       <KEYWORD1>VALOF</KEYWORD1>\r
+                       <KEYWORD1>WHILE</KEYWORD1>\r
+                        \r
+                       <!-- main keywords -->\r
+                        <KEYWORD2>AT</KEYWORD2>\r
+                       <KEYWORD2>ELSE</KEYWORD2>\r
+                       <KEYWORD2>FOR</KEYWORD2>\r
+                       <KEYWORD2>FROM</KEYWORD2>\r
+                       <KEYWORD2>IS</KEYWORD2>\r
+                       <KEYWORD2>PLACE</KEYWORD2>\r
+                       <KEYWORD2>PORT</KEYWORD2>\r
+                       <KEYWORD2>PROTOCOL</KEYWORD2>\r
+                       <KEYWORD2>SKIP</KEYWORD2>\r
+                       <KEYWORD2>STOP</KEYWORD2>\r
+                       <KEYWORD2>VAL</KEYWORD2>\r
+\r
+                        <!-- type and conversion keywords -->\r
+                       <KEYWORD2>AFTER</KEYWORD2>\r
+                       <KEYWORD2>AND</KEYWORD2>\r
+                       <KEYWORD2>ANY</KEYWORD2>\r
+                       <KEYWORD2>BITAND</KEYWORD2>\r
+                       <KEYWORD2>BITNOT</KEYWORD2>\r
+                       <KEYWORD2>BITOR</KEYWORD2>\r
+                       <KEYWORD2>BOOL</KEYWORD2>\r
+                       <KEYWORD2>BYTE</KEYWORD2>\r
+                       <KEYWORD2>BYTESIN</KEYWORD2>\r
+                       <KEYWORD2>CHAN</KEYWORD2>\r
+                       <KEYWORD2>DATA</KEYWORD2>\r
+                       <KEYWORD2>INT</KEYWORD2>\r
+                       <KEYWORD2>INT32</KEYWORD2>\r
+                       <KEYWORD2>INT16</KEYWORD2>\r
+                       <KEYWORD2>INT64</KEYWORD2>\r
+                       <KEYWORD2>MINUS</KEYWORD2>\r
+                       <KEYWORD2>MOSTNEG</KEYWORD2>\r
+                       <KEYWORD2>MOSTPOS</KEYWORD2>\r
+                       <KEYWORD2>NOT</KEYWORD2>\r
+                       <KEYWORD2>PLUS</KEYWORD2>\r
+                       <KEYWORD2>OF</KEYWORD2>\r
+                       <KEYWORD2>OFFSETOF</KEYWORD2>\r
+                       <KEYWORD2>OR</KEYWORD2>\r
+                       <KEYWORD2>PACKED</KEYWORD2>\r
+                       <KEYWORD2>REAL32</KEYWORD2>\r
+                       <KEYWORD2>REAL64</KEYWORD2>\r
+                       <KEYWORD2>RECORD</KEYWORD2>\r
+                       <KEYWORD2>REM</KEYWORD2>\r
+                       <KEYWORD2>RESHAPES</KEYWORD2>\r
+                       <KEYWORD2>RETYPES</KEYWORD2>\r
+                       <KEYWORD2>ROUND</KEYWORD2>\r
+                       <KEYWORD2>SIZE</KEYWORD2>\r
+                       <KEYWORD2>TIMER</KEYWORD2>\r
+                       <KEYWORD2>TIMES</KEYWORD2>\r
+                       <KEYWORD2>TRUNC</KEYWORD2>\r
+                       <KEYWORD2>TYPE</KEYWORD2>\r
+\r
+                        <!-- Occam3 and extensions to occam2.1 -->\r
+                       <KEYWORD2>BUCKET</KEYWORD2>\r
+                       <KEYWORD2>CLAIM</KEYWORD2>\r
+                       <KEYWORD2>ENROLL</KEYWORD2>\r
+                       <KEYWORD2>EVENT</KEYWORD2>\r
+                       <KEYWORD2>FALL</KEYWORD2>\r
+                       <KEYWORD2>FLUSH</KEYWORD2>\r
+                       <KEYWORD2>GRANT</KEYWORD2>\r
+                       <KEYWORD2>INITIAL</KEYWORD2>\r
+                       <KEYWORD2>RESOURCE</KEYWORD2>\r
+                       <KEYWORD2>SEMAPHORE</KEYWORD2>\r
+                       <KEYWORD2>SHARED</KEYWORD2>\r
+                       <KEYWORD2>SYNC</KEYWORD2>\r
+                        \r
+                        <!-- arithmetic & trigonometric functions -->\r
+                       <KEYWORD3>LONGADD</KEYWORD3>\r
+                       <KEYWORD3>LONGSUB</KEYWORD3>\r
+                       <KEYWORD3>ASHIFTRIGHT</KEYWORD3>\r
+                       <KEYWORD3>ASHIFTLEFT</KEYWORD3>\r
+                       <KEYWORD3>ROTATERIGHT</KEYWORD3>\r
+                       <KEYWORD3>ROTATELEFT</KEYWORD3>\r
+                       <KEYWORD3>LONGSUM</KEYWORD3>\r
+                       <KEYWORD3>LONGDIFF</KEYWORD3>\r
+                       <KEYWORD3>LONGPROD</KEYWORD3>\r
+                       <KEYWORD3>LONGDIV</KEYWORD3>\r
+                       <KEYWORD3>SHIFTLEFT</KEYWORD3>\r
+                       <KEYWORD3>SHIFTRIGHT</KEYWORD3>\r
+                       <KEYWORD3>NORMALISE</KEYWORD3>\r
+                       <KEYWORD3>ABS</KEYWORD3>\r
+                       <KEYWORD3>DABS</KEYWORD3>\r
+                       <KEYWORD3>SCALEB</KEYWORD3>\r
+                       <KEYWORD3>DSCALEB</KEYWORD3>\r
+                       <KEYWORD3>COPYSIGN</KEYWORD3>\r
+                       <KEYWORD3>DCOPYSIGN</KEYWORD3>\r
+                       <KEYWORD3>SQRT</KEYWORD3>\r
+                       <KEYWORD3>DSQRT</KEYWORD3>\r
+                       <KEYWORD3>MINUSX</KEYWORD3>\r
+                       <KEYWORD3>DMINUSX</KEYWORD3>\r
+                       <KEYWORD3>NEXTAFTER</KEYWORD3>\r
+                       <KEYWORD3>DNEXTAFTER</KEYWORD3>\r
+                       <KEYWORD3>MULBY2</KEYWORD3>\r
+                       <KEYWORD3>DMULBY2</KEYWORD3>\r
+                       <KEYWORD3>DIVBY2</KEYWORD3>\r
+                       <KEYWORD3>DDIVBY2</KEYWORD3>\r
+                       <KEYWORD3>LOGB</KEYWORD3>\r
+                       <KEYWORD3>DLOGB</KEYWORD3>\r
+                       <KEYWORD3>ISNAN</KEYWORD3>\r
+                       <KEYWORD3>DISNAN</KEYWORD3>\r
+                       <KEYWORD3>NOTFINITE</KEYWORD3>\r
+                       <KEYWORD3>DNOTFINITE</KEYWORD3>\r
+                       <KEYWORD3>ORDERED</KEYWORD3>\r
+                       <KEYWORD3>DORDERED</KEYWORD3>\r
+                       <KEYWORD3>FLOATING.UNPACK</KEYWORD3>\r
+                       <KEYWORD3>DFLOATING.UNPACK</KEYWORD3>\r
+                       <KEYWORD3>ARGUMENT.REDUCE</KEYWORD3>\r
+                       <KEYWORD3>DARGUMENT.REDUCE</KEYWORD3>\r
+                       <KEYWORD3>FPINT</KEYWORD3>\r
+                       <KEYWORD3>DFPINT</KEYWORD3>\r
+                       <KEYWORD3>REAL32OP</KEYWORD3>\r
+                       <KEYWORD3>REAL64OP</KEYWORD3>\r
+                       <KEYWORD3>IEEE32OP</KEYWORD3>\r
+                       <KEYWORD3>IEEE64OP</KEYWORD3>\r
+                       <KEYWORD3>REAL32REM</KEYWORD3>\r
+                       <KEYWORD3>REAL64REM</KEYWORD3>\r
+                       <KEYWORD3>IEEE32REM</KEYWORD3>\r
+                       <KEYWORD3>IEEE64REM</KEYWORD3>\r
+                       <KEYWORD3>REAL32EQ</KEYWORD3>\r
+                       <KEYWORD3>REAL64EQ</KEYWORD3>\r
+                       <KEYWORD3>REAL32GT</KEYWORD3>\r
+                       <KEYWORD3>REAL64GT</KEYWORD3>\r
+                       <KEYWORD3>IEEECOMPARE</KEYWORD3>\r
+                       <KEYWORD3>DIEEECOMPARE</KEYWORD3>\r
+                       <KEYWORD3>ALOG</KEYWORD3>\r
+                       <KEYWORD3>DALOG</KEYWORD3>\r
+                       <KEYWORD3>ALOG10</KEYWORD3>\r
+                       <KEYWORD3>DALOG10</KEYWORD3>\r
+                       <KEYWORD3>EXP</KEYWORD3>\r
+                       <KEYWORD3>DEXP</KEYWORD3>\r
+                       <KEYWORD3>TAN</KEYWORD3>\r
+                       <KEYWORD3>DTAN</KEYWORD3>\r
+                       <KEYWORD3>SIN</KEYWORD3>\r
+                       <KEYWORD3>DSIN</KEYWORD3>\r
+                       <KEYWORD3>ASIN</KEYWORD3>\r
+                       <KEYWORD3>DASIN</KEYWORD3>\r
+                       <KEYWORD3>COS</KEYWORD3>\r
+                       <KEYWORD3>DCOS</KEYWORD3>\r
+                       <KEYWORD3>SINH</KEYWORD3>\r
+                       <KEYWORD3>DSINH</KEYWORD3>\r
+                       <KEYWORD3>COSH</KEYWORD3>\r
+                       <KEYWORD3>DCOSH</KEYWORD3>\r
+                       <KEYWORD3>TANH</KEYWORD3>\r
+                       <KEYWORD3>DTANH</KEYWORD3>\r
+                       <KEYWORD3>ATAN</KEYWORD3>\r
+                       <KEYWORD3>DATAN</KEYWORD3>\r
+                       <KEYWORD3>ATAN2</KEYWORD3>\r
+                       <KEYWORD3>DATAN2</KEYWORD3>\r
+                       <KEYWORD3>RAN</KEYWORD3>\r
+                       <KEYWORD3>DRAN</KEYWORD3>\r
+                       <KEYWORD3>POWER</KEYWORD3>\r
+                       <KEYWORD3>DPOWER</KEYWORD3>\r
+\r
+                        <!-- basic data conversion functions -->\r
+                       <KEYWORD3>INTTOSTRING</KEYWORD3>\r
+                       <KEYWORD3>INT16TOSTRING</KEYWORD3>\r
+                       <KEYWORD3>INT32TOSTRING</KEYWORD3>\r
+                       <KEYWORD3>INT64TOSTRING</KEYWORD3>\r
+                       <KEYWORD3>STRINGTOINT</KEYWORD3>\r
+                       <KEYWORD3>STRINGTOINT16</KEYWORD3>\r
+                       <KEYWORD3>STRINGTOINT32</KEYWORD3>\r
+                       <KEYWORD3>STRINGTOINT64</KEYWORD3>\r
+                       <KEYWORD3>HEXTOSTRING</KEYWORD3>\r
+                       <KEYWORD3>HEX16TOSTRING</KEYWORD3>\r
+                       <KEYWORD3>HEX32TOSTRING</KEYWORD3>\r
+                       <KEYWORD3>HEX64TOSTRING</KEYWORD3>\r
+                       <KEYWORD3>STRINGTOHEX</KEYWORD3>\r
+                       <KEYWORD3>STRINGTOHEX16</KEYWORD3>\r
+                       <KEYWORD3>STRINGTOHEX32</KEYWORD3>\r
+                       <KEYWORD3>STRINGTOHEX64</KEYWORD3>\r
+                       <KEYWORD3>STRINGTOREAL32</KEYWORD3>\r
+                       <KEYWORD3>STRINGTOREAL64</KEYWORD3>\r
+                       <KEYWORD3>REAL32TOSTRING</KEYWORD3>\r
+                       <KEYWORD3>REAL64TOSTRING</KEYWORD3>\r
+                       <KEYWORD3>STRINGTOBOOL</KEYWORD3>\r
+                       <KEYWORD3>BOOLTOSTRING</KEYWORD3>\r
+                       <KEYWORD3>RESCHEDULE</KEYWORD3>\r
+                       <KEYWORD3>ASSERT</KEYWORD3>\r
+\r
+                        <!-- preprocessor directives\r
+                        #INCLUDE\r
+                        #USE\r
+                        #OPTION\r
+                        #PRAGMA\r
+                        #COMMENT\r
+                        -->\r
+\r
+                       <LITERAL2>FALSE</LITERAL2>\r
+                       <LITERAL2>TRUE</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/omnimark.xml b/extra/xmode/modes/omnimark.xml
new file mode 100644 (file)
index 0000000..721ba4a
--- /dev/null
@@ -0,0 +1,455 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+<!-- contributed by Lionel Fiol <lio-sand@ifrance.com>       -->\r
+<!-- 09/NOV/2001: add automatic indentation properties       -->\r
+<!--              correct and add some keywords              -->\r
+<!--              reorganize all keywords (sorted)           -->\r
+<!-- 20/APR/2004: all keywords are now in lower case         -->\r
+<!-- 06/MAY/2004: add specific patterns for invalid literals -->\r
+<!-- 06/JUN/2004: add '.' (dot) in the noWordSep property    -->\r
+<MODE>\r
+    <PROPS>\r
+        <PROPERTY NAME="indentNextLines" VALUE="\s*((PROCESS|MARKUP|EXTERNAL|DOCUMENT|DTD|ELEMENT|FIND|TRANSLATE)((-|\s).*|\s*)|(DO|ELSE|REPEAT|MATCH|CASE|USING|GROUP|DEFINE|MACRO)(\s+.*|\s*))" />\r
+        <PROPERTY NAME="lineComment" VALUE=";" />\r
+        <PROPERTY NAME="noWordSep" VALUE=".-_" />\r
+    </PROPS>\r
+    <RULES ESCAPE="%" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+        <!-- Comments -->\r
+        <EOL_SPAN TYPE="COMMENT1">#!</EOL_SPAN>\r
+        <EOL_SPAN TYPE="COMMENT1">;</EOL_SPAN>\r
+        <!-- Literals -->\r
+        <SPAN_REGEXP HASH_CHAR='"' NO_LINE_BREAK="TRUE" TYPE="INVALID">\r
+            <BEGIN>"((?!$)[^"])*$</BEGIN>\r
+            <END>$</END>\r
+        </SPAN_REGEXP>\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>"</BEGIN>\r
+            <END>"</END>\r
+        </SPAN>\r
+        <SPAN_REGEXP HASH_CHAR="'" NO_LINE_BREAK="TRUE" TYPE="INVALID">\r
+            <BEGIN>'((?!$)[^'])*$</BEGIN>\r
+            <END>$</END>\r
+        </SPAN_REGEXP>\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>'</BEGIN>\r
+            <END>'</END>\r
+        </SPAN>\r
+        <!-- Operators -->\r
+        <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+        <SEQ TYPE="OPERATOR">|</SEQ>\r
+        <!-- two next lines were removed as they conflict with the noWordSep property -->\r
+        <!-- <SEQ TYPE="OPERATOR">-</SEQ> -->\r
+        <!-- <SEQ TYPE="OPERATOR">_</SEQ> -->\r
+        <SEQ TYPE="OPERATOR">+</SEQ>\r
+        <SEQ TYPE="OPERATOR">=</SEQ>\r
+        <SEQ TYPE="OPERATOR">/</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">~</SEQ>\r
+        <SEQ TYPE="OPERATOR">@</SEQ>\r
+        <SEQ TYPE="OPERATOR">$</SEQ>\r
+        <SEQ TYPE="OPERATOR">%</SEQ>\r
+        <SEQ TYPE="OPERATOR">^</SEQ>\r
+        <SEQ TYPE="OPERATOR">*</SEQ>\r
+        <SEQ TYPE="OPERATOR">?</SEQ>\r
+        <SEQ TYPE="OPERATOR">!</SEQ>\r
+        <!-- Keywords -->\r
+        <KEYWORDS>\r
+            <KEYWORD2>#additional-info</KEYWORD2>\r
+            <KEYWORD2>#appinfo</KEYWORD2>\r
+            <KEYWORD2>#args</KEYWORD2>\r
+            <KEYWORD2>#capacity</KEYWORD2>\r
+            <KEYWORD2>#charset</KEYWORD2>\r
+            <KEYWORD2>#class</KEYWORD2>\r
+            <KEYWORD2>#command-line-names</KEYWORD2>\r
+            <KEYWORD2>#console</KEYWORD2>\r
+            <KEYWORD2>#current-input</KEYWORD2>\r
+            <KEYWORD2>#current-output</KEYWORD2>\r
+            <KEYWORD2>#data</KEYWORD2>\r
+            <KEYWORD2>#doctype</KEYWORD2>\r
+            <KEYWORD2>#document</KEYWORD2>\r
+            <KEYWORD2>#dtd</KEYWORD2>\r
+            <KEYWORD2>#empty</KEYWORD2>\r
+            <KEYWORD2>#error</KEYWORD2>\r
+            <KEYWORD2>#error-code</KEYWORD2>\r
+            <KEYWORD2>#external-exception</KEYWORD2>\r
+            <KEYWORD2>#file-name</KEYWORD2>\r
+            <KEYWORD2>#first</KEYWORD2>\r
+            <KEYWORD2>#group</KEYWORD2>\r
+            <KEYWORD2>#implied</KEYWORD2>\r
+            <KEYWORD2>#item</KEYWORD2>\r
+            <KEYWORD2>#language-version</KEYWORD2>\r
+            <KEYWORD2>#last</KEYWORD2>\r
+            <KEYWORD2>#libpath</KEYWORD2>\r
+            <KEYWORD2>#library</KEYWORD2>\r
+            <KEYWORD2>#libvalue</KEYWORD2>\r
+            <KEYWORD2>#line-number</KEYWORD2>\r
+            <KEYWORD2>#main-input</KEYWORD2>\r
+            <KEYWORD2>#main-output</KEYWORD2>\r
+            <KEYWORD2>#markup-error-count</KEYWORD2>\r
+            <KEYWORD2>#markup-error-total</KEYWORD2>\r
+            <KEYWORD2>#markup-parser</KEYWORD2>\r
+            <KEYWORD2>#markup-warning-count</KEYWORD2>\r
+            <KEYWORD2>#markup-warning-total</KEYWORD2>\r
+            <KEYWORD2>#message</KEYWORD2>\r
+            <KEYWORD2>#none</KEYWORD2>\r
+            <KEYWORD2>#output</KEYWORD2>\r
+            <KEYWORD2>#platform-info</KEYWORD2>\r
+            <KEYWORD2>#process-input</KEYWORD2>\r
+            <KEYWORD2>#process-output</KEYWORD2>\r
+            <KEYWORD2>#program-error</KEYWORD2>\r
+            <KEYWORD2>#recovery-info</KEYWORD2>\r
+            <KEYWORD2>#sgml</KEYWORD2>\r
+            <KEYWORD2>#sgml-error-count</KEYWORD2>\r
+            <KEYWORD2>#sgml-error-total</KEYWORD2>\r
+            <KEYWORD2>#sgml-warning-count</KEYWORD2>\r
+            <KEYWORD2>#sgml-warning-total</KEYWORD2>\r
+            <KEYWORD2>#suppress</KEYWORD2>\r
+            <KEYWORD2>#syntax</KEYWORD2>\r
+            <KEYWORD2>#!</KEYWORD2>\r
+            <OPERATOR>abs</OPERATOR>\r
+            <KEYWORD1>activate</KEYWORD1>\r
+            <OPERATOR>active</OPERATOR>\r
+            <KEYWORD2>after</KEYWORD2>\r
+            <KEYWORD1>again</KEYWORD1>\r
+            <KEYWORD2>ancestor</KEYWORD2>\r
+            <KEYWORD2>and</KEYWORD2>\r
+            <KEYWORD2>another</KEYWORD2>\r
+            <KEYWORD1>always</KEYWORD1>\r
+            <OPERATOR>and</OPERATOR>\r
+            <KEYWORD3>any</KEYWORD3>\r
+            <KEYWORD3>any-text</KEYWORD3>\r
+            <KEYWORD2>arg</KEYWORD2>\r
+            <OPERATOR>as</OPERATOR>\r
+            <KEYWORD1>assert</KEYWORD1>\r
+            <KEYWORD2>attached</KEYWORD2>\r
+            <KEYWORD2>attribute</KEYWORD2>\r
+            <KEYWORD2>attributes</KEYWORD2>\r
+            <OPERATOR>base</OPERATOR>\r
+            <KEYWORD2>bcd</KEYWORD2>\r
+            <KEYWORD2>before</KEYWORD2>\r
+            <OPERATOR>binary</OPERATOR>\r
+            <KEYWORD2>binary-input</KEYWORD2>\r
+            <KEYWORD2>binary-mode</KEYWORD2>\r
+            <KEYWORD2>binary-output</KEYWORD2>\r
+            <KEYWORD3>blank</KEYWORD3>\r
+            <KEYWORD2>break-width</KEYWORD2>\r
+            <KEYWORD2>buffer</KEYWORD2>\r
+            <KEYWORD2>buffered</KEYWORD2>\r
+            <KEYWORD2>by</KEYWORD2>\r
+            <KEYWORD1>case</KEYWORD1>\r
+            <KEYWORD1>catch</KEYWORD1>\r
+            <KEYWORD2>catchable</KEYWORD2>\r
+            <KEYWORD3>cdata</KEYWORD3>\r
+            <KEYWORD2>cdata-entity</KEYWORD2>\r
+            <OPERATOR>ceiling</OPERATOR>\r
+            <KEYWORD2>children</KEYWORD2>\r
+            <KEYWORD1>clear</KEYWORD1>\r
+            <KEYWORD1>close</KEYWORD1>\r
+            <KEYWORD2>closed</KEYWORD2>\r
+            <OPERATOR>compiled-date</OPERATOR>\r
+            <OPERATOR>complement</OPERATOR>\r
+            <KEYWORD2>conref</KEYWORD2>\r
+            <KEYWORD2>content</KEYWORD2>\r
+            <KEYWORD3>content-end</KEYWORD3>\r
+            <KEYWORD3>content-start</KEYWORD3>\r
+            <KEYWORD2>context-translate</KEYWORD2>\r
+            <KEYWORD1>copy</KEYWORD1>\r
+            <KEYWORD1>copy-clear</KEYWORD1>\r
+            <KEYWORD2>counter</KEYWORD2>\r
+            <KEYWORD2>created</KEYWORD2>\r
+            <OPERATOR>creating</OPERATOR>\r
+            <OPERATOR>creator</OPERATOR>\r
+            <KEYWORD2>cross-translate</KEYWORD2>\r
+            <KEYWORD2>current</KEYWORD2>\r
+            <KEYWORD2>data-attribute</KEYWORD2>\r
+            <KEYWORD2>data-attributes</KEYWORD2>\r
+            <KEYWORD2>data-content</KEYWORD2>\r
+            <KEYWORD2>data-letters</KEYWORD2>\r
+            <OPERATOR>date</OPERATOR>\r
+            <KEYWORD1>deactivate</KEYWORD1>\r
+            <KEYWORD2>declare</KEYWORD2>\r
+            <KEYWORD2>declared-conref</KEYWORD2>\r
+            <KEYWORD2>declared-current</KEYWORD2>\r
+            <KEYWORD2>declared-defaulted</KEYWORD2>\r
+            <KEYWORD2>declared-fixed</KEYWORD2>\r
+            <KEYWORD2>declared-implied</KEYWORD2>\r
+            <KEYWORD2>declared-required</KEYWORD2>\r
+            <KEYWORD1>decrement</KEYWORD1>\r
+            <KEYWORD2>default-entity</KEYWORD2>\r
+            <KEYWORD2>defaulted</KEYWORD2>\r
+            <KEYWORD2>defaulting</KEYWORD2>\r
+            <KEYWORD2>define</KEYWORD2>\r
+            <KEYWORD2>delimiter</KEYWORD2>\r
+            <OPERATOR>difference</OPERATOR>\r
+            <KEYWORD3>digit</KEYWORD3>\r
+            <KEYWORD2>directory</KEYWORD2>\r
+            <KEYWORD1>discard</KEYWORD1>\r
+            <OPERATOR>divide</OPERATOR>\r
+            <KEYWORD1>do</KEYWORD1>\r
+            <KEYWORD2>doctype</KEYWORD2>\r
+            <KEYWORD2>document</KEYWORD2>\r
+            <KEYWORD2>document-element</KEYWORD2>\r
+            <KEYWORD2>document-end</KEYWORD2>\r
+            <KEYWORD2>document-start</KEYWORD2>\r
+            <KEYWORD2>domain-free</KEYWORD2>\r
+            <KEYWORD1>done</KEYWORD1>\r
+            <KEYWORD2>down-translate</KEYWORD2>\r
+            <OPERATOR>drop</OPERATOR>\r
+            <KEYWORD2>dtd</KEYWORD2>\r
+            <KEYWORD2>dtd-end</KEYWORD2>\r
+            <KEYWORD2>dtd-start</KEYWORD2>\r
+            <KEYWORD2>dtds</KEYWORD2>\r
+            <KEYWORD2>element</KEYWORD2>\r
+            <KEYWORD2>elements</KEYWORD2>\r
+            <KEYWORD1>else</KEYWORD1>\r
+            <KEYWORD2>elsewhere</KEYWORD2>\r
+            <KEYWORD2>empty</KEYWORD2>\r
+            <KEYWORD2>entities</KEYWORD2>\r
+            <KEYWORD2>entity</KEYWORD2>\r
+            <KEYWORD2>epilog-start</KEYWORD2>\r
+            <OPERATOR>equal</OPERATOR>\r
+            <OPERATOR>equals</OPERATOR>\r
+            <KEYWORD2>escape</KEYWORD2>\r
+            <KEYWORD1>except</KEYWORD1>\r
+            <OPERATOR>exists</OPERATOR>\r
+            <KEYWORD1>exit</KEYWORD1>\r
+            <KEYWORD2>external</KEYWORD2>\r
+            <KEYWORD2>external-data-entity</KEYWORD2>\r
+            <KEYWORD2>external-entity</KEYWORD2>\r
+            <KEYWORD2>external-function</KEYWORD2>\r
+            <KEYWORD2>external-output-function</KEYWORD2>\r
+            <KEYWORD2>external-text-entity</KEYWORD2>\r
+            <KEYWORD2>false</KEYWORD2>\r
+            <OPERATOR>file</OPERATOR>\r
+            <KEYWORD2>find</KEYWORD2>\r
+            <KEYWORD2>find-end</KEYWORD2>\r
+            <KEYWORD2>find-start</KEYWORD2>\r
+            <OPERATOR>floor</OPERATOR>\r
+            <KEYWORD1>flush</KEYWORD1>\r
+            <KEYWORD1>for</KEYWORD1>\r
+            <KEYWORD1>format</KEYWORD1>\r
+            <KEYWORD2>function</KEYWORD2>\r
+            <KEYWORD2>function-library</KEYWORD2>\r
+            <KEYWORD2>general</KEYWORD2>\r
+            <KEYWORD2>global</KEYWORD2>\r
+            <OPERATOR>greater-equal</OPERATOR>\r
+            <OPERATOR>greater-than</OPERATOR>\r
+            <KEYWORD2>group</KEYWORD2>\r
+            <KEYWORD2>groups</KEYWORD2>\r
+            <KEYWORD1>halt</KEYWORD1>\r
+            <KEYWORD1>halt-everything</KEYWORD1>\r
+            <OPERATOR>has</OPERATOR>\r
+            <OPERATOR>hasnt</OPERATOR>\r
+            <KEYWORD2>heralded-names</KEYWORD2>\r
+            <KEYWORD2>id</KEYWORD2>\r
+            <KEYWORD2>id-checking</KEYWORD2>\r
+            <KEYWORD2>idref</KEYWORD2>\r
+            <KEYWORD2>idrefs</KEYWORD2>\r
+            <KEYWORD2>ignore</KEYWORD2>\r
+            <KEYWORD2>implied</KEYWORD2>\r
+            <KEYWORD2>in</KEYWORD2>\r
+            <KEYWORD2>in-library</KEYWORD2>\r
+            <KEYWORD2>include</KEYWORD2>\r
+            <KEYWORD2>include-end</KEYWORD2>\r
+            <KEYWORD2>include-guard</KEYWORD2>\r
+            <KEYWORD2>include-start</KEYWORD2>\r
+            <KEYWORD2>inclusion</KEYWORD2>\r
+            <KEYWORD1>increment</KEYWORD1>\r
+            <KEYWORD2>initial</KEYWORD2>\r
+            <KEYWORD2>initial-size</KEYWORD2>\r
+            <KEYWORD1>input</KEYWORD1>\r
+            <KEYWORD2>insertion-break</KEYWORD2>\r
+            <KEYWORD2>instance</KEYWORD2>\r
+            <KEYWORD2>integer</KEYWORD2>\r
+            <KEYWORD2>internal</KEYWORD2>\r
+            <KEYWORD2>invalid-data</KEYWORD2>\r
+            <OPERATOR>is</OPERATOR>\r
+            <OPERATOR>isnt</OPERATOR>\r
+            <OPERATOR>item</OPERATOR>\r
+            <KEYWORD1>join</KEYWORD1>\r
+            <OPERATOR>key</OPERATOR>\r
+            <KEYWORD2>keyed</KEYWORD2>\r
+            <OPERATOR>last</OPERATOR>\r
+            <OPERATOR>lastmost</OPERATOR>\r
+            <KEYWORD3>lc</KEYWORD3>\r
+            <OPERATOR>length</OPERATOR>\r
+            <OPERATOR>less-equal</OPERATOR>\r
+            <OPERATOR>less-than</OPERATOR>\r
+            <KEYWORD3>letter</KEYWORD3>\r
+            <KEYWORD2>letters</KEYWORD2>\r
+            <KEYWORD2>library</KEYWORD2>\r
+            <KEYWORD3>line-end</KEYWORD3>\r
+            <KEYWORD3>line-start</KEYWORD3>\r
+            <OPERATOR>literal</OPERATOR>\r
+            <KEYWORD2>local</KEYWORD2>\r
+            <OPERATOR>ln</OPERATOR>\r
+            <KEYWORD1>log</KEYWORD1>\r
+            <OPERATOR>log10</OPERATOR>\r
+            <OPERATOR>lookahead</OPERATOR>\r
+            <KEYWORD2>macro</KEYWORD2>\r
+            <KEYWORD2>macro-end</KEYWORD2>\r
+            <KEYWORD2>marked-section</KEYWORD2>\r
+            <KEYWORD2>markup-comment</KEYWORD2>\r
+            <KEYWORD2>markup-error</KEYWORD2>\r
+            <KEYWORD2>markup-parser</KEYWORD2>\r
+            <KEYWORD2>markup-wrapper</KEYWORD2>\r
+            <OPERATOR>mask</OPERATOR>\r
+            <KEYWORD1>match</KEYWORD1>\r
+            <OPERATOR>matches</OPERATOR>\r
+            <OPERATOR>minus</OPERATOR>\r
+            <KEYWORD2>mixed</KEYWORD2>\r
+            <KEYWORD2>modifiable</KEYWORD2>\r
+            <OPERATOR>modulo</OPERATOR>\r
+            <OPERATOR>name</OPERATOR>\r
+            <KEYWORD2>name-letters</KEYWORD2>\r
+            <KEYWORD2>namecase</KEYWORD2>\r
+            <KEYWORD2>named</KEYWORD2>\r
+            <KEYWORD2>names</KEYWORD2>\r
+            <KEYWORD2>ndata-entity</KEYWORD2>\r
+            <OPERATOR>negate</OPERATOR>\r
+            <KEYWORD2>nested-referents</KEYWORD2>\r
+            <KEYWORD1>new</KEYWORD1>\r
+            <KEYWORD2>newline</KEYWORD2>\r
+            <KEYWORD1>next</KEYWORD1>\r
+            <KEYWORD2>nmtoken</KEYWORD2>\r
+            <KEYWORD2>nmtokens</KEYWORD2>\r
+            <KEYWORD2>no</KEYWORD2>\r
+            <KEYWORD2>no-default-io</KEYWORD2>\r
+            <KEYWORD3>non-cdata</KEYWORD3>\r
+            <KEYWORD2>non-implied</KEYWORD2>\r
+            <KEYWORD3>non-sdata</KEYWORD3>\r
+            <OPERATOR>not</OPERATOR>\r
+            <KEYWORD1>not-reached</KEYWORD1>\r
+            <KEYWORD2>notation</KEYWORD2>\r
+            <KEYWORD2>number</KEYWORD2>\r
+            <OPERATOR>number-of</OPERATOR>\r
+            <KEYWORD2>numbers</KEYWORD2>\r
+            <KEYWORD3>null</KEYWORD3>\r
+            <KEYWORD2>nutoken</KEYWORD2>\r
+            <KEYWORD2>nutokens</KEYWORD2>\r
+            <OPERATOR>occurrence</OPERATOR>\r
+            <OPERATOR>of</OPERATOR>\r
+            <KEYWORD2>opaque</KEYWORD2>\r
+            <KEYWORD1>open</KEYWORD1>\r
+            <KEYWORD2>optional</KEYWORD2>\r
+            <OPERATOR>or</OPERATOR>\r
+            <KEYWORD1>output</KEYWORD1>\r
+            <KEYWORD1>output-to</KEYWORD1>\r
+            <KEYWORD1>over</KEYWORD1>\r
+            <KEYWORD2>parameter</KEYWORD2>\r
+            <KEYWORD2>parent</KEYWORD2>\r
+            <KEYWORD2>past</KEYWORD2>\r
+            <KEYWORD2>pattern</KEYWORD2>\r
+            <KEYWORD3>pcdata</KEYWORD3>\r
+            <KEYWORD2>plus</KEYWORD2>\r
+            <KEYWORD2>preparent</KEYWORD2>\r
+            <KEYWORD2>previous</KEYWORD2>\r
+            <KEYWORD2>process</KEYWORD2>\r
+            <KEYWORD2>process-end</KEYWORD2>\r
+            <KEYWORD2>process-start</KEYWORD2>\r
+            <KEYWORD2>processing-instruction</KEYWORD2>\r
+            <KEYWORD2>prolog-end</KEYWORD2>\r
+            <KEYWORD2>prolog-in-error</KEYWORD2>\r
+            <KEYWORD2>proper</KEYWORD2>\r
+            <KEYWORD2>public</KEYWORD2>\r
+            <KEYWORD1>put</KEYWORD1>\r
+            <KEYWORD3>rcdata</KEYWORD3>\r
+            <KEYWORD1>remove</KEYWORD1>\r
+            <KEYWORD2>read-only</KEYWORD2>\r
+            <KEYWORD2>readable</KEYWORD2>\r
+            <KEYWORD2>referent</KEYWORD2>\r
+            <KEYWORD2>referents</KEYWORD2>\r
+            <KEYWORD2>referents-allowed</KEYWORD2>\r
+            <KEYWORD2>referents-displayed</KEYWORD2>\r
+            <KEYWORD2>referents-not-allowed</KEYWORD2>\r
+            <KEYWORD2>remainder</KEYWORD2>\r
+            <KEYWORD1>reopen</KEYWORD1>\r
+            <KEYWORD1>repeat</KEYWORD1>\r
+            <KEYWORD2>repeated</KEYWORD2>\r
+            <KEYWORD2>replacement-break</KEYWORD2>\r
+            <KEYWORD1>reset</KEYWORD1>\r
+            <KEYWORD1>rethrow</KEYWORD1>\r
+            <KEYWORD1>return</KEYWORD1>\r
+            <KEYWORD2>reversed</KEYWORD2>\r
+            <OPERATOR>round</OPERATOR>\r
+            <KEYWORD1>save</KEYWORD1>\r
+            <KEYWORD1>save-clear</KEYWORD1>\r
+            <KEYWORD1>scan</KEYWORD1>\r
+            <KEYWORD3>sdata</KEYWORD3>\r
+            <KEYWORD2>sdata-entity</KEYWORD2>\r
+            <KEYWORD1>select</KEYWORD1>\r
+            <KEYWORD1>set</KEYWORD1>\r
+            <KEYWORD1>sgml</KEYWORD1>\r
+            <KEYWORD2>sgml-comment</KEYWORD2>\r
+            <KEYWORD2>sgml-declaration-end</KEYWORD2>\r
+            <KEYWORD2>sgml-dtd</KEYWORD2>\r
+            <KEYWORD2>sgml-dtds</KEYWORD2>\r
+            <KEYWORD2>sgml-error</KEYWORD2>\r
+            <KEYWORD1>sgml-in</KEYWORD1>\r
+            <KEYWORD1>sgml-out</KEYWORD1>\r
+            <KEYWORD1>sgml-parse</KEYWORD1>\r
+            <KEYWORD1>sgml-parser</KEYWORD1>\r
+            <OPERATOR>shift</OPERATOR>\r
+            <KEYWORD2>silent-referent</KEYWORD2>\r
+            <KEYWORD2>size</KEYWORD2>\r
+            <KEYWORD1>skip</KEYWORD1>\r
+            <KEYWORD2>source</KEYWORD2>\r
+            <KEYWORD3>space</KEYWORD3>\r
+            <KEYWORD2>specified</KEYWORD2>\r
+            <OPERATOR>sqrt</OPERATOR>\r
+            <OPERATOR>status</OPERATOR>\r
+            <KEYWORD2>stream</KEYWORD2>\r
+            <KEYWORD2>subdoc-entity</KEYWORD2>\r
+            <KEYWORD2>subdocument</KEYWORD2>\r
+            <KEYWORD2>subdocuments</KEYWORD2>\r
+            <KEYWORD2>subelement</KEYWORD2>\r
+            <KEYWORD1>submit</KEYWORD1>\r
+            <KEYWORD1>succeed</KEYWORD1>\r
+            <KEYWORD1>suppress</KEYWORD1>\r
+            <KEYWORD2>switch</KEYWORD2>\r
+            <KEYWORD2>symbol</KEYWORD2>\r
+            <KEYWORD2>system</KEYWORD2>\r
+            <KEYWORD1>system-call</KEYWORD1>\r
+            <OPERATOR>take</OPERATOR>\r
+            <KEYWORD1>test-system</KEYWORD1>\r
+            <KEYWORD3>text</KEYWORD3>\r
+            <KEYWORD2>text-mode</KEYWORD2>\r
+            <OPERATOR>this</OPERATOR>\r
+            <KEYWORD1>throw</KEYWORD1>\r
+            <KEYWORD2>thrown</KEYWORD2>\r
+            <KEYWORD2>times</KEYWORD2>\r
+            <KEYWORD1>to</KEYWORD1>\r
+            <KEYWORD2>token</KEYWORD2>\r
+            <KEYWORD2>translate</KEYWORD2>\r
+            <KEYWORD2>true</KEYWORD2>\r
+            <OPERATOR>truncate</OPERATOR>\r
+            <KEYWORD3>uc</KEYWORD3>\r
+            <OPERATOR>ul</OPERATOR>\r
+            <OPERATOR>unanchored</OPERATOR>\r
+            <KEYWORD2>unattached</KEYWORD2>\r
+            <KEYWORD2>unbuffered</KEYWORD2>\r
+            <OPERATOR>union</OPERATOR>\r
+            <KEYWORD1>unless</KEYWORD1>\r
+            <KEYWORD2>up-translate</KEYWORD2>\r
+            <OPERATOR>usemap</OPERATOR>\r
+            <KEYWORD1>using</KEYWORD1>\r
+            <KEYWORD2>value</KEYWORD2>\r
+            <KEYWORD3>value-end</KEYWORD3>\r
+            <KEYWORD3>value-start</KEYWORD3>\r
+            <KEYWORD2>valued</KEYWORD2>\r
+            <KEYWORD2>variable</KEYWORD2>\r
+            <KEYWORD1>when</KEYWORD1>\r
+            <KEYWORD3>white-space</KEYWORD3>\r
+            <OPERATOR>with</OPERATOR>\r
+            <KEYWORD3>word-end</KEYWORD3>\r
+            <KEYWORD3>word-start</KEYWORD3>\r
+            <KEYWORD2>writable</KEYWORD2>\r
+            <KEYWORD2>xml</KEYWORD2>\r
+            <KEYWORD2>xml-dtd</KEYWORD2>\r
+            <KEYWORD2>xml-dtds</KEYWORD2>\r
+            <KEYWORD1>xml-parse</KEYWORD1>\r
+            <KEYWORD2>yes</KEYWORD2>\r
+        </KEYWORDS>\r
+    </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/pascal.xml b/extra/xmode/modes/pascal.xml
new file mode 100644 (file)
index 0000000..d411d56
--- /dev/null
@@ -0,0 +1,221 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- Pascal mode by Kristian Ovaska.\r
+     Delphi 3 was used as reference.\r
+     Modified by Barry Carr (Ixian Software Components Ltd)\r
+     Delphi 6 was used as reference.\r
+     Modified by Barry Carr (Ixian Software Components Ltd) Feb '04\r
+     Delphi 8 (for .NET) was used as reference\r
+     Keywords   = KEYWORD1\r
+     Directives = KEYWORD2.\r
+     Everything else as is-->\r
+<MODE>\r
+    <PROPS>\r
+        <PROPERTY NAME="commentStart" VALUE="{" />\r
+        <PROPERTY NAME="commentEnd" VALUE="}" />\r
+        <PROPERTY NAME="lineComment" VALUE="//" />\r
+    </PROPS>\r
+\r
+    <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+        <!-- Compiler directives. -->\r
+        <SPAN TYPE="COMMENT3">\r
+            <BEGIN>{$</BEGIN>\r
+            <END>}</END>\r
+        </SPAN>\r
+        <SPAN TYPE="COMMENT3">\r
+            <BEGIN>(*$</BEGIN>\r
+            <END>*)</END>\r
+        </SPAN>\r
+\r
+        <!-- Normal comments. -->\r
+        <SPAN TYPE="COMMENT1">\r
+            <BEGIN>{</BEGIN>\r
+            <END>}</END>\r
+        </SPAN>\r
+\r
+        <SPAN TYPE="COMMENT1">\r
+            <BEGIN>(*</BEGIN>\r
+            <END>*)</END>\r
+        </SPAN>\r
+\r
+        <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>'</BEGIN>\r
+            <END>'</END>\r
+        </SPAN>\r
+\r
+        <SEQ TYPE="OPERATOR">)</SEQ>\r
+        <SEQ TYPE="OPERATOR">(</SEQ>\r
+        <SEQ TYPE="OPERATOR">]</SEQ>\r
+        <SEQ TYPE="OPERATOR">[</SEQ>\r
+        <SEQ TYPE="OPERATOR">.</SEQ>\r
+        <SEQ TYPE="OPERATOR">,</SEQ>\r
+        <SEQ TYPE="OPERATOR">;</SEQ>\r
+        <SEQ TYPE="OPERATOR">^</SEQ>\r
+        <SEQ TYPE="OPERATOR">@</SEQ>\r
+        <SEQ TYPE="OPERATOR">:=</SEQ>\r
+        <SEQ TYPE="OPERATOR">:</SEQ>\r
+        <SEQ TYPE="OPERATOR">=</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+        <SEQ TYPE="OPERATOR">+</SEQ>\r
+        <SEQ TYPE="OPERATOR">-</SEQ>\r
+        <SEQ TYPE="OPERATOR">/</SEQ>\r
+        <SEQ TYPE="OPERATOR">*</SEQ>\r
+\r
+        <KEYWORDS>\r
+            <!-- Reserved words. Standard directives are not included, except\r
+                 private, protected, public, published, and automated. -->\r
+            <KEYWORD1>and</KEYWORD1>\r
+            <KEYWORD1>array</KEYWORD1>\r
+            <KEYWORD1>as</KEYWORD1>\r
+            <KEYWORD1>at</KEYWORD1>\r
+            <KEYWORD1>asm</KEYWORD1>\r
+            <KEYWORD1>begin</KEYWORD1>\r
+            <KEYWORD1>case</KEYWORD1>\r
+            <KEYWORD1>class</KEYWORD1>\r
+            <KEYWORD1>const</KEYWORD1>\r
+            <KEYWORD1>constructor</KEYWORD1>\r
+            <KEYWORD1>destructor</KEYWORD1>\r
+            <KEYWORD1>dispinterface</KEYWORD1>\r
+            <KEYWORD1>div</KEYWORD1>\r
+            <KEYWORD1>do</KEYWORD1>\r
+            <KEYWORD1>downto</KEYWORD1>\r
+            <KEYWORD1>else</KEYWORD1>\r
+            <KEYWORD1>end</KEYWORD1>\r
+            <KEYWORD1>except</KEYWORD1>\r
+            <KEYWORD1>exports</KEYWORD1>\r
+            <KEYWORD1>file</KEYWORD1>\r
+            <KEYWORD1>final</KEYWORD1>\r
+            <KEYWORD1>finalization</KEYWORD1>\r
+            <KEYWORD1>finally</KEYWORD1>\r
+            <KEYWORD1>for</KEYWORD1>\r
+            <KEYWORD1>function</KEYWORD1>\r
+            <KEYWORD1>goto</KEYWORD1>\r
+            <KEYWORD1>if</KEYWORD1>\r
+            <KEYWORD1>implementation</KEYWORD1>\r
+            <KEYWORD1>in</KEYWORD1>\r
+            <KEYWORD1>inherited</KEYWORD1>\r
+            <KEYWORD1>initialization</KEYWORD1>\r
+            <KEYWORD1>inline</KEYWORD1>\r
+            <KEYWORD1>interface</KEYWORD1>\r
+            <KEYWORD1>is</KEYWORD1>\r
+            <KEYWORD1>label</KEYWORD1>\r
+            <KEYWORD1>mod</KEYWORD1>\r
+            <KEYWORD1>not</KEYWORD1>\r
+            <KEYWORD1>object</KEYWORD1>\r
+            <KEYWORD1>of</KEYWORD1>\r
+            <KEYWORD1>on</KEYWORD1>\r
+            <KEYWORD1>or</KEYWORD1>\r
+            <KEYWORD1>out</KEYWORD1>\r
+            <KEYWORD1>packed</KEYWORD1>\r
+            <KEYWORD1>procedure</KEYWORD1>\r
+            <KEYWORD1>program</KEYWORD1>\r
+            <KEYWORD1>property</KEYWORD1>\r
+            <KEYWORD1>raise</KEYWORD1>\r
+            <KEYWORD1>record</KEYWORD1>\r
+            <KEYWORD1>repeat</KEYWORD1>\r
+            <KEYWORD1>resourcestring</KEYWORD1>\r
+            <KEYWORD1>set</KEYWORD1>\r
+            <KEYWORD1>sealed</KEYWORD1>\r
+            <KEYWORD1>shl</KEYWORD1>\r
+            <KEYWORD1>shr</KEYWORD1>\r
+            <KEYWORD1>static</KEYWORD1>\r
+            <KEYWORD1>string</KEYWORD1>\r
+            <KEYWORD1>then</KEYWORD1>\r
+            <KEYWORD1>threadvar</KEYWORD1>\r
+            <KEYWORD1>to</KEYWORD1>\r
+            <KEYWORD1>try</KEYWORD1>\r
+            <KEYWORD1>type</KEYWORD1>\r
+            <KEYWORD1>unit</KEYWORD1>\r
+            <KEYWORD1>unsafe</KEYWORD1>\r
+            <KEYWORD1>until</KEYWORD1>\r
+            <KEYWORD1>uses</KEYWORD1>\r
+            <KEYWORD1>var</KEYWORD1>\r
+            <KEYWORD1>while</KEYWORD1>\r
+            <KEYWORD1>with</KEYWORD1>\r
+            <KEYWORD1>xor</KEYWORD1>\r
+\r
+            <KEYWORD2>absolute</KEYWORD2>\r
+            <KEYWORD2>abstract</KEYWORD2>\r
+            <KEYWORD2>assembler</KEYWORD2>\r
+            <KEYWORD2>automated</KEYWORD2>\r
+            <KEYWORD2>cdecl</KEYWORD2>\r
+            <KEYWORD2>contains</KEYWORD2>\r
+            <KEYWORD2>default</KEYWORD2>\r
+            <KEYWORD2>deprecated</KEYWORD2>\r
+            <KEYWORD2>dispid</KEYWORD2>\r
+            <KEYWORD2>dynamic</KEYWORD2>\r
+            <KEYWORD2>export</KEYWORD2>\r
+            <KEYWORD2>external</KEYWORD2>\r
+            <KEYWORD2>far</KEYWORD2>\r
+            <KEYWORD2>forward</KEYWORD2>\r
+            <KEYWORD2>implements</KEYWORD2>\r
+            <KEYWORD2>index</KEYWORD2>\r
+            <KEYWORD2>library</KEYWORD2>\r
+            <KEYWORD2>local</KEYWORD2>\r
+            <KEYWORD2>message</KEYWORD2>\r
+            <KEYWORD2>name</KEYWORD2>\r
+            <KEYWORD2>namespaces</KEYWORD2>\r
+            <KEYWORD2>near</KEYWORD2>\r
+            <KEYWORD2>nodefault</KEYWORD2>\r
+            <KEYWORD2>overload</KEYWORD2>\r
+            <KEYWORD2>override</KEYWORD2>\r
+            <KEYWORD2>package</KEYWORD2>\r
+            <KEYWORD2>pascal</KEYWORD2>\r
+            <KEYWORD2>platform</KEYWORD2>\r
+            <KEYWORD2>private</KEYWORD2>\r
+            <KEYWORD2>protected</KEYWORD2>\r
+            <KEYWORD2>public</KEYWORD2>\r
+            <KEYWORD2>published</KEYWORD2>\r
+            <KEYWORD2>read</KEYWORD2>\r
+            <KEYWORD2>readonly</KEYWORD2>\r
+            <KEYWORD2>register</KEYWORD2>\r
+            <KEYWORD2>reintroduce</KEYWORD2>\r
+            <KEYWORD2>requires</KEYWORD2>\r
+            <KEYWORD2>resident</KEYWORD2>\r
+            <KEYWORD2>safecall</KEYWORD2>\r
+            <KEYWORD2>stdcall</KEYWORD2>\r
+            <KEYWORD2>stored</KEYWORD2>\r
+            <KEYWORD2>varargs</KEYWORD2>\r
+            <KEYWORD2>virtual</KEYWORD2>\r
+            <KEYWORD2>write</KEYWORD2>\r
+            <KEYWORD2>writeonly</KEYWORD2>\r
+\r
+            <!-- Ordinal types. -->\r
+            <KEYWORD3>shortint</KEYWORD3>\r
+            <KEYWORD3>byte</KEYWORD3>\r
+            <KEYWORD3>char</KEYWORD3>\r
+            <KEYWORD3>smallint</KEYWORD3>\r
+            <KEYWORD3>integer</KEYWORD3>\r
+            <KEYWORD3>word</KEYWORD3>\r
+            <KEYWORD3>longint</KEYWORD3>\r
+            <KEYWORD3>cardinal</KEYWORD3>\r
+            <!-- Boolean types. -->\r
+            <KEYWORD3>boolean</KEYWORD3>\r
+            <KEYWORD3>bytebool</KEYWORD3>\r
+            <KEYWORD3>wordbool</KEYWORD3>\r
+            <KEYWORD3>longbool</KEYWORD3>\r
+            <!-- Real types. -->\r
+            <KEYWORD3>real</KEYWORD3>\r
+            <KEYWORD3>single</KEYWORD3>\r
+            <KEYWORD3>double</KEYWORD3>\r
+            <KEYWORD3>extended</KEYWORD3>\r
+            <KEYWORD3>comp</KEYWORD3>\r
+            <KEYWORD3>currency</KEYWORD3>\r
+            <!-- Untyped pointer. -->\r
+            <KEYWORD3>pointer</KEYWORD3>\r
+\r
+            <LITERAL2>false</LITERAL2>\r
+            <LITERAL2>nil</LITERAL2>\r
+            <LITERAL2>self</LITERAL2>\r
+            <LITERAL2>true</LITERAL2>\r
+        </KEYWORDS>\r
+    </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/patch.xml b/extra/xmode/modes/patch.xml
new file mode 100644 (file)
index 0000000..c2ac51a
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <RULES>\r
+               <EOL_SPAN TYPE="LITERAL1" AT_LINE_START="TRUE">+++</EOL_SPAN>\r
+               <EOL_SPAN TYPE="LITERAL2" AT_LINE_START="TRUE">---</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD3" AT_LINE_START="TRUE">Index: </EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD1" AT_LINE_START="TRUE">+</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD1" AT_LINE_START="TRUE">&gt;</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2" AT_LINE_START="TRUE">-</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2" AT_LINE_START="TRUE">&lt;</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD3" AT_LINE_START="TRUE">!</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD3" AT_LINE_START="TRUE">@@</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD3" AT_LINE_START="TRUE">*</EOL_SPAN>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/perl.xml b/extra/xmode/modes/perl.xml
new file mode 100644 (file)
index 0000000..2bb9f66
--- /dev/null
@@ -0,0 +1,732 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />\r
+               <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />\r
+               <PROPERTY NAME="indentNextLine" VALUE="[^#]*\.\s*$" />\r
+       </PROPS>\r
+\r
+       <!-- no ESCAPE char because we need the backslash for references -->\r
+       <RULES HIGHLIGHT_DIGITS="TRUE" IGNORE_CASE="FALSE">\r
+               <!-- Comments -->\r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+               <!-- TYPE is LABEL so that =head1 and =cut are highlighted as so -->\r
+               <SPAN TYPE="LABEL" DELEGATE="POD" AT_LINE_START="TRUE">\r
+                       <BEGIN>=head1</BEGIN>\r
+                       <END>=cut</END>\r
+               </SPAN>\r
+               <SPAN AT_LINE_START="TRUE" TYPE="LABEL" DELEGATE="POD">\r
+                       <BEGIN>=head2</BEGIN>\r
+                       <END>=cut</END>\r
+               </SPAN>\r
+        <SPAN TYPE="LABEL" DELEGATE="POD" AT_LINE_START="TRUE">\r
+                       <BEGIN>=head3</BEGIN>\r
+                       <END>=cut</END>\r
+               </SPAN>\r
+               <SPAN  AT_LINE_START="TRUE" TYPE="LABEL" DELEGATE="POD">\r
+                       <BEGIN>=head4</BEGIN>\r
+                       <END>=cut</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LABEL"  AT_LINE_START="TRUE" DELEGATE="POD">\r
+                       <BEGIN>=item</BEGIN>\r
+                       <END>=cut</END>\r
+               </SPAN>\r
+               <SPAN  AT_LINE_START="TRUE" TYPE="LABEL" DELEGATE="POD">\r
+                       <BEGIN>=over</BEGIN>\r
+                       <END>=cut</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LABEL" DELEGATE="POD" AT_LINE_START="TRUE">\r
+                       <BEGIN>=back</BEGIN>\r
+                       <END>=cut</END>\r
+               </SPAN>\r
+               <SPAN AT_LINE_START="TRUE" TYPE="LABEL" DELEGATE="POD">\r
+                       <BEGIN>=pod</BEGIN>\r
+                       <END>=cut</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LABEL" DELEGATE="POD"  AT_LINE_START="TRUE">\r
+                       <BEGIN>=for</BEGIN>\r
+                       <END>=cut</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LABEL" DELEGATE="POD" AT_LINE_START="TRUE">\r
+                       <BEGIN>=begin</BEGIN>\r
+                       <END>=cut</END>\r
+               </SPAN>\r
+               <SPAN AT_LINE_START="TRUE" TYPE="LABEL" DELEGATE="POD">\r
+                       <BEGIN>=end</BEGIN>\r
+                       <END>=cut</END>\r
+               </SPAN>\r
+\r
+               <!-- Some other things that confuse the mode file. -->\r
+               <SEQ TYPE="OPERATOR">*"</SEQ>\r
+               <SEQ TYPE="OPERATOR">*'</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;"</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;'</SEQ>\r
+\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <!-- Scalar variables -->\r
+               <SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD2">\$#?((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>\r
+\r
+               <!-- Array variables -->\r
+               <SEQ_REGEXP HASH_CHAR="@" TYPE="KEYWORD2">@((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>\r
+\r
+               <!-- Associative Array (= Hash) variables -->\r
+               <SEQ_REGEXP HASH_CHAR="%" TYPE="KEYWORD2">%((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>\r
+\r
+               <!-- Dereferences -->\r
+               <SEQ_REGEXP HASH_CHAR="$$" TYPE="KEYWORD4">\$\$+((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="@$" TYPE="KEYWORD4">@\$((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="%$" TYPE="KEYWORD4">%\$((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="*" TYPE="KEYWORD4">\*((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>\r
+\r
+               <!-- Perl predefined variables -->\r
+               <SEQ_REGEXP HASH_CHAR="$^" TYPE="KEYWORD2">\$\^\p{Alpha}</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD2">\$\p{Punct}</SEQ_REGEXP>\r
+\r
+               <!-- references to vars and code, starting with a backslash -->\r
+               <SEQ_REGEXP HASH_CHAR="\" TYPE="KEYWORD4">\\[@%\$&amp;]((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>\r
+\r
+               <!-- complex code dereference -->\r
+               <SPAN TYPE="KEYWORD4" NO_LINE_BREAK="TRUE" DELEGATE="MAIN">\r
+                       <BEGIN>&amp;{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <!-- Function calls from variables -->\r
+               <SEQ_REGEXP HASH_CHAR="&amp;$" TYPE="FUNCTION">&amp;\$((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>\r
+\r
+               <!-- Special handling for subs, since they can have a ' in the name;\r
+                        try to do highlight as well as possible - this version will\r
+                        highlight both 'sub' and the opening '{' as KEYWORD1, so the\r
+                        opening bracket will be different than other brackets. -->\r
+               <SPAN_REGEXP HASH_CHAR="sub" TYPE="OPERATOR" NO_LINE_BREAK="FALSE" DELEGATE="SUB_NAME">\r
+                       <BEGIN>sub\s</BEGIN>\r
+                       <END>{</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- Highlight calls to subs that contain ' in the name. -->\r
+               <SEQ_REGEXP HASH_CHAR="&amp;" TYPE="FUNCTION"\r
+               >&amp;\p{Alpha}[\p{Alnum}_]*'\p{Alpha}[\p{Alnum}_]*</SEQ_REGEXP>\r
+\r
+               <!-- Literals -->\r
+               <SPAN TYPE="LITERAL1" DELEGATE="LITERAL">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- apostroph literals -->\r
+               <SPAN TYPE="LITERAL1" DELEGATE="APOSTR">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <!-- options: -text -->\r
+               <SEQ_REGEXP HASH_CHAR="-" TYPE="LITERAL1">-[\p{Lower}]\w+</SEQ_REGEXP>\r
+\r
+               <!-- file stat expressions -->\r
+               <SEQ_REGEXP HASH_CHAR="-" TYPE="KEYWORD3">-[\p{Lower}]</SEQ_REGEXP>\r
+\r
+               <!-- non-quoted literals in hashes -->\r
+               <SPAN_REGEXP TYPE="OPERATOR" HASH_CHAR="{" NO_LINE_BREAK="TRUE" DELEGATE="LITERAL">\r
+                       <BEGIN>\{(?=\s*[\p{Alpha}_\-][\p{Alnum}_]*\s*\})</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- Code blocks. This is a hack to correctly highlight some\r
+                        complex expressions that can have arbitrary perl code\r
+                        inside brackets (like array deferences below). Declaring\r
+                        this *before* the other rules is needed to maintain\r
+                        correct bracket matching.\r
+               -->\r
+               <SPAN TYPE="OPERATOR" NO_LINE_BREAK="FALSE" DELEGATE="MAIN">\r
+                       <BEGIN>{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <!-- Array dereference -->\r
+               <SPAN TYPE="KEYWORD4" NO_LINE_BREAK="TRUE" DELEGATE="MAIN">\r
+                       <BEGIN>@{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <!-- Hash dereference -->\r
+               <SPAN TYPE="KEYWORD4" NO_LINE_BREAK="TRUE" DELEGATE="MAIN">\r
+                       <BEGIN>%{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <!-- labels, catches also package prefixes at line start :( -->\r
+               <MARK_PREVIOUS TYPE="LABEL" AT_LINE_START="TRUE" MATCH_TYPE="OPERATOR">:</MARK_PREVIOUS>\r
+\r
+               <!-- __DATA__ and similar -->\r
+               <SEQ_REGEXP HASH_CHAR="__" TYPE="KEYWORD4">__\w+__</SEQ_REGEXP>\r
+\r
+               <!-- Exec -->\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="EXEC">\r
+                       <BEGIN>`</BEGIN>\r
+                       <END>`</END>\r
+               </SPAN>\r
+\r
+               <!-- file globs / IO operators -->\r
+               <SEQ_REGEXP HASH_CHAR="&lt;" TYPE="KEYWORD4">&lt;[\p{Punct}\p{Alnum}_]*&gt;</SEQ_REGEXP>\r
+\r
+               <!-- Heredoc -->\r
+               <SPAN_REGEXP HASH_CHAR="&lt;&lt;" TYPE="LITERAL2" DELEGATE="LITERAL">\r
+               <BEGIN><![CDATA[<<\p{Space}*(['"])([\p{Space}\p{Alnum}_]*)\1;?\s*]]></BEGIN>\r
+               <END>$2</END>\r
+               </SPAN_REGEXP>\r
+               <SPAN_REGEXP HASH_CHAR="&lt;&lt;" TYPE="LITERAL2" DELEGATE="LITERAL">\r
+               <BEGIN><![CDATA[<<([\p{Alpha}_][\p{Alnum}_]*);?\s*]]></BEGIN>\r
+               <END>$1</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- jEdit 4.1 adds regular expression syntax rules so we can\r
+                    highlight this sort of crap. -->\r
+\r
+               <!-- /Regexp/, avoid confusion with a sequence of two divisions! -->\r
+               <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="/"\r
+                       AT_WORD_START="TRUE">/.*?[^\\]/[cgimosx]*(?!\s*[\d\$\@\(\-])</SEQ_REGEXP>\r
+\r
+        <!-- q//, qq//, qr//, qx// -->\r
+               <SPAN_REGEXP HASH_CHAR="q"\r
+                                        TYPE="MARKUP"\r
+                                        MATCH_TYPE="OPERATOR"\r
+                                        DELEGATE="QUOTED"\r
+                                        AT_WORD_START="TRUE"\r
+                                        NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>q(?:|[qrxw])([#\[{(/|])</BEGIN>\r
+                       <END>~1</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- tr/// transliteration -->\r
+               <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="tr"\r
+            AT_WORD_START="TRUE">tr\s*\{.*?[^\\]\}\s*\{(?:.*?[^\\])*\}[cds]*</SEQ_REGEXP>\r
+\r
+               <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="tr"\r
+            AT_WORD_START="TRUE">tr([^\p{Alnum}\p{Space}\}])(?:.*?)\1(?:.*?)\1[cds]*</SEQ_REGEXP>\r
+\r
+               <!-- y/// translation -->\r
+               <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="y"\r
+            AT_WORD_START="TRUE">y\s*\{.*?[^\\]\}\s*\{(?:.*?[^\\])*\}[cds]*</SEQ_REGEXP>\r
+\r
+               <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="y"\r
+            AT_WORD_START="TRUE">y([^\p{Alnum}\p{Space}\}])(?:.*?)\1(?:.*?)\1[cds]*</SEQ_REGEXP>\r
+\r
+               <!-- m// regular expression matching -->\r
+               <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="m"\r
+                       AT_WORD_START="TRUE">m\s*\{.*?[^\\]\}[cgimosx]*</SEQ_REGEXP>\r
+\r
+               <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="m"\r
+                       AT_WORD_START="TRUE">m([^\p{Alnum}\p{Space}\}])(?:.*?[^\\])\1[cgimosx]*</SEQ_REGEXP>\r
+\r
+               <!-- s/// regular expression substitution -->\r
+               <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="s"\r
+            AT_WORD_START="TRUE">s\s*\{.*?\}\s*\{.*?\}[egimosx]*</SEQ_REGEXP>\r
+\r
+               <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="s"\r
+            AT_WORD_START="TRUE">s([^\p{Alnum}\p{Space}\}])(?:.*?)\1(?:.*?)\1[egimosx]*</SEQ_REGEXP>\r
+\r
+               <!-- complex operators -->\r
+               <SEQ TYPE="OPERATOR">||</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">!=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">-&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">=&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">==</SEQ>\r
+               <SEQ TYPE="OPERATOR">=~</SEQ>\r
+               <SEQ TYPE="OPERATOR">!~</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">+=</SEQ>\r
+               <SEQ TYPE="OPERATOR">-=</SEQ>\r
+               <SEQ TYPE="OPERATOR">/=</SEQ>\r
+               <SEQ TYPE="OPERATOR">*=</SEQ>\r
+               <SEQ TYPE="OPERATOR">.=</SEQ>\r
+               <SEQ TYPE="OPERATOR">%=</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">&amp;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">|=</SEQ>\r
+               <SEQ TYPE="OPERATOR">**=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;&amp;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">||=</SEQ>\r
+               <SEQ TYPE="OPERATOR">^=</SEQ>\r
+               <SEQ TYPE="OPERATOR">x=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+\r
+               <!-- simple operators -->\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">**</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+\r
+               <!-- Keywords -->\r
+               <KEYWORDS>\r
+                       <KEYWORD1>new</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>until</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+                       <KEYWORD1>elsif</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>unless</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>foreach</KEYWORD1>\r
+                       <KEYWORD1>BEGIN</KEYWORD1>\r
+                       <KEYWORD1>END</KEYWORD1>\r
+\r
+                       <OPERATOR>cmp</OPERATOR>\r
+                       <OPERATOR>eq</OPERATOR>\r
+                       <OPERATOR>ne</OPERATOR>\r
+                       <OPERATOR>le</OPERATOR>\r
+                       <OPERATOR>ge</OPERATOR>\r
+                       <OPERATOR>not</OPERATOR>\r
+                       <OPERATOR>and</OPERATOR>\r
+                       <OPERATOR>or</OPERATOR>\r
+                       <OPERATOR>xor</OPERATOR>\r
+\r
+                       <!-- At least attempt to highlight 'x', although this misses some -->\r
+                       <OPERATOR>x</OPERATOR>\r
+\r
+                       <!--\r
+                               The following function list was derived from the perlfunc man\r
+                               page, Perl version 5.00503\r
+\r
+                               Certain keywords have been commented out where they appear more\r
+                               than once, and the y///, qx//, etc. functions have been removed,\r
+                               since they would are colorized not as keywords, but with separate\r
+                               rules.\r
+                       -->\r
+\r
+                       <!-- Functions for SCALARs or strings -->\r
+                       <KEYWORD3>chomp</KEYWORD3>\r
+                       <KEYWORD3>chop</KEYWORD3>\r
+                       <KEYWORD3>chr</KEYWORD3>\r
+                       <KEYWORD3>crypt</KEYWORD3>\r
+                       <KEYWORD3>hex</KEYWORD3>\r
+                       <KEYWORD3>index</KEYWORD3>\r
+                       <KEYWORD3>lc</KEYWORD3>\r
+                       <KEYWORD3>lcfirst</KEYWORD3>\r
+                       <KEYWORD3>length</KEYWORD3>\r
+                       <KEYWORD3>oct</KEYWORD3>\r
+                       <KEYWORD3>ord</KEYWORD3>\r
+                       <KEYWORD3>pack</KEYWORD3>\r
+                       <KEYWORD3>reverse</KEYWORD3>\r
+                       <KEYWORD3>rindex</KEYWORD3>\r
+                       <KEYWORD3>sprintf</KEYWORD3>\r
+                       <KEYWORD3>substr</KEYWORD3>\r
+                       <KEYWORD3>uc</KEYWORD3>\r
+                       <KEYWORD3>ucfirst</KEYWORD3>\r
+\r
+                       <!-- Regular expressions and pattern matching -->\r
+                       <KEYWORD3>pos</KEYWORD3>\r
+                       <KEYWORD3>quotemeta</KEYWORD3>\r
+                       <KEYWORD3>split</KEYWORD3>\r
+                       <KEYWORD3>study</KEYWORD3>\r
+\r
+                       <!-- Numeric functions -->\r
+                       <KEYWORD3>abs</KEYWORD3>\r
+                       <KEYWORD3>atan2</KEYWORD3>\r
+                       <KEYWORD3>cos</KEYWORD3>\r
+                       <KEYWORD3>exp</KEYWORD3>\r
+                       <!--<KEYWORD3>hex</KEYWORD3>-->\r
+                       <KEYWORD3>int</KEYWORD3>\r
+                       <KEYWORD3>log</KEYWORD3>\r
+                       <!--<KEYWORD3>oct</KEYWORD3>-->\r
+                       <KEYWORD3>rand</KEYWORD3>\r
+                       <KEYWORD3>sin</KEYWORD3>\r
+                       <KEYWORD3>sqrt</KEYWORD3>\r
+                       <KEYWORD3>srand</KEYWORD3>\r
+\r
+                       <!-- Functions for real @ARRAYs -->\r
+                       <KEYWORD3>pop</KEYWORD3>\r
+                       <KEYWORD3>push</KEYWORD3>\r
+                       <KEYWORD3>shift</KEYWORD3>\r
+                       <KEYWORD3>splice</KEYWORD3>\r
+                       <KEYWORD3>unshift</KEYWORD3>\r
+\r
+                       <!-- Functions for list data -->\r
+                       <KEYWORD3>grep</KEYWORD3>\r
+                       <KEYWORD3>join</KEYWORD3>\r
+                       <KEYWORD3>map</KEYWORD3>\r
+                       <!--<KEYWORD3>reverse</KEYWORD3>-->\r
+                       <KEYWORD3>sort</KEYWORD3>\r
+                       <KEYWORD3>unpack</KEYWORD3>\r
+\r
+                       <!-- Functions for real %HASHes -->\r
+                       <KEYWORD3>delete</KEYWORD3>\r
+                       <KEYWORD3>each</KEYWORD3>\r
+                       <KEYWORD3>exists</KEYWORD3>\r
+                       <KEYWORD3>keys</KEYWORD3>\r
+                       <KEYWORD3>values</KEYWORD3>\r
+\r
+                       <!-- Input and output functions -->\r
+                       <KEYWORD3>binmode</KEYWORD3>\r
+                       <KEYWORD3>close</KEYWORD3>\r
+                       <KEYWORD3>closedir</KEYWORD3>\r
+                       <KEYWORD3>dbmclose</KEYWORD3>\r
+                       <KEYWORD3>dbmopen</KEYWORD3>\r
+                       <!--<KEYWORD3>die</KEYWORD3>-->\r
+                       <KEYWORD3>eof</KEYWORD3>\r
+                       <KEYWORD3>fileno</KEYWORD3>\r
+                       <KEYWORD3>flock</KEYWORD3>\r
+                       <KEYWORD3>format</KEYWORD3>\r
+                       <KEYWORD3>getc</KEYWORD3>\r
+                       <KEYWORD3>print</KEYWORD3>\r
+                       <KEYWORD3>printf</KEYWORD3>\r
+                       <KEYWORD3>read</KEYWORD3>\r
+                       <KEYWORD3>readdir</KEYWORD3>\r
+                       <KEYWORD3>rewinddir</KEYWORD3>\r
+                       <KEYWORD3>seek</KEYWORD3>\r
+                       <KEYWORD3>seekdir</KEYWORD3>\r
+                       <KEYWORD3>select</KEYWORD3>\r
+                       <KEYWORD3>syscall</KEYWORD3>\r
+                       <KEYWORD3>sysread</KEYWORD3>\r
+                       <KEYWORD3>sysseek</KEYWORD3>\r
+                       <KEYWORD3>syswrite</KEYWORD3>\r
+                       <KEYWORD3>tell</KEYWORD3>\r
+                       <KEYWORD3>telldir</KEYWORD3>\r
+                       <KEYWORD3>truncate</KEYWORD3>\r
+                       <KEYWORD3>warn</KEYWORD3>\r
+                       <KEYWORD3>write</KEYWORD3>\r
+\r
+                       <!-- Functions for fixed length data or records -->\r
+                       <!--<KEYWORD3>pack</KEYWORD3>-->\r
+                       <!--<KEYWORD3>read</KEYWORD3>-->\r
+                       <!--<KEYWORD3>syscall</KEYWORD3>-->\r
+                       <!--<KEYWORD3>sysread</KEYWORD3>-->\r
+                       <!--<KEYWORD3>syswrite</KEYWORD3>-->\r
+                       <!--<KEYWORD3>unpack</KEYWORD3>-->\r
+                       <KEYWORD3>vec</KEYWORD3>\r
+\r
+                       <!-- Functions for filehandles, files, or directories -->\r
+                       <KEYWORD3>chdir</KEYWORD3>\r
+                       <KEYWORD3>chmod</KEYWORD3>\r
+                       <KEYWORD3>chown</KEYWORD3>\r
+                       <KEYWORD3>chroot</KEYWORD3>\r
+                       <KEYWORD3>fcntl</KEYWORD3>\r
+                       <KEYWORD3>glob</KEYWORD3>\r
+                       <KEYWORD3>ioctl</KEYWORD3>\r
+                       <KEYWORD3>link</KEYWORD3>\r
+                       <KEYWORD3>lstat</KEYWORD3>\r
+                       <KEYWORD3>mkdir</KEYWORD3>\r
+                       <KEYWORD3>open</KEYWORD3>\r
+                       <KEYWORD3>opendir</KEYWORD3>\r
+                       <KEYWORD3>readlink</KEYWORD3>\r
+                       <KEYWORD3>rename</KEYWORD3>\r
+                       <KEYWORD3>rmdir</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>symlink</KEYWORD3>\r
+                       <KEYWORD3>umask</KEYWORD3>\r
+                       <KEYWORD3>unlink</KEYWORD3>\r
+                       <KEYWORD3>utime</KEYWORD3>\r
+\r
+                       <!-- Keywords related to the control flow of your perl program -->\r
+                       <KEYWORD1>caller</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+                       <KEYWORD1>die</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>dump</KEYWORD1>\r
+                       <KEYWORD1>eval</KEYWORD1>\r
+                       <KEYWORD1>exit</KEYWORD1>\r
+                       <KEYWORD1>goto</KEYWORD1>\r
+                       <KEYWORD1>last</KEYWORD1>\r
+                       <KEYWORD1>next</KEYWORD1>\r
+                       <KEYWORD1>redo</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>wantarray</KEYWORD1>\r
+\r
+                       <!-- Keywords related to scoping -->\r
+                       <!--<KEYWORD1>caller</KEYWORD1>-->\r
+                       <!--<KEYWORD1>import</KEYWORD1>-->\r
+                       <KEYWORD1>local</KEYWORD1>\r
+                       <KEYWORD1>my</KEYWORD1>\r
+                       <KEYWORD1>our</KEYWORD1>\r
+                       <KEYWORD1>package</KEYWORD1>\r
+                       <KEYWORD1>use</KEYWORD1>\r
+\r
+                       <!-- Miscellaneous functions -->\r
+                       <KEYWORD3>defined</KEYWORD3>\r
+                       <!--<KEYWORD3>dump</KEYWORD3>-->\r
+                       <!--<KEYWORD3>eval</KEYWORD3>-->\r
+                       <KEYWORD3>formline</KEYWORD3>\r
+                       <!--<KEYWORD3>local</KEYWORD3>-->\r
+                       <!--<KEYWORD3>my</KEYWORD3>-->\r
+                       <KEYWORD3>reset</KEYWORD3>\r
+                       <KEYWORD3>scalar</KEYWORD3>\r
+                       <KEYWORD3>undef</KEYWORD3>\r
+                       <!--<KEYWORD3>wantarray</KEYWORD3>-->\r
+\r
+                       <!-- Functions for processes and process groups -->\r
+                       <KEYWORD3>alarm</KEYWORD3>\r
+                       <KEYWORD3>exec</KEYWORD3>\r
+                       <KEYWORD3>fork</KEYWORD3>\r
+                       <KEYWORD3>getpgrp</KEYWORD3>\r
+                       <KEYWORD3>getppid</KEYWORD3>\r
+                       <KEYWORD3>getpriority</KEYWORD3>\r
+                       <KEYWORD3>kill</KEYWORD3>\r
+                       <KEYWORD3>pipe</KEYWORD3>\r
+                       <KEYWORD3>setpgrp</KEYWORD3>\r
+                       <KEYWORD3>setpriority</KEYWORD3>\r
+                       <KEYWORD3>sleep</KEYWORD3>\r
+                       <KEYWORD3>system</KEYWORD3>\r
+                       <KEYWORD3>times</KEYWORD3>\r
+                       <KEYWORD3>wait</KEYWORD3>\r
+                       <KEYWORD3>waitpid</KEYWORD3>\r
+\r
+                       <!-- Keywords related to perl modules -->\r
+                       <!--<KEYWORD1>do</KEYWORD1>-->\r
+                       <KEYWORD1>import</KEYWORD1>\r
+                       <KEYWORD1>no</KEYWORD1>\r
+                       <!--<KEYWORD1>package</KEYWORD1>-->\r
+                       <KEYWORD1>require</KEYWORD1>\r
+                       <!--<KEYWORD1>use</KEYWORD1>-->\r
+\r
+                       <!-- Keywords related to classes and object-orientedness -->\r
+                       <KEYWORD3>bless</KEYWORD3>\r
+                       <!--<KEYWORD3>dbmclose</KEYWORD3>-->\r
+                       <!--<KEYWORD3>dbmopen</KEYWORD3>-->\r
+                       <!--<KEYWORD3>package</KEYWORD3>-->\r
+                       <KEYWORD3>ref</KEYWORD3>\r
+                       <KEYWORD3>tie</KEYWORD3>\r
+                       <KEYWORD3>tied</KEYWORD3>\r
+                       <KEYWORD3>untie</KEYWORD3>\r
+                       <!--<KEYWORD3>use</KEYWORD3>-->\r
+\r
+                       <!-- Low-level socket functions -->\r
+                       <KEYWORD3>accept</KEYWORD3>\r
+                       <KEYWORD3>bind</KEYWORD3>\r
+                       <KEYWORD3>connect</KEYWORD3>\r
+                       <KEYWORD3>getpeername</KEYWORD3>\r
+                       <KEYWORD3>getsockname</KEYWORD3>\r
+                       <KEYWORD3>getsockopt</KEYWORD3>\r
+                       <KEYWORD3>listen</KEYWORD3>\r
+                       <KEYWORD3>recv</KEYWORD3>\r
+                       <KEYWORD3>send</KEYWORD3>\r
+                       <KEYWORD3>setsockopt</KEYWORD3>\r
+                       <KEYWORD3>shutdown</KEYWORD3>\r
+                       <KEYWORD3>socket</KEYWORD3>\r
+                       <KEYWORD3>socketpair</KEYWORD3>\r
+\r
+                       <!-- System V interprocess communication functions -->\r
+                       <KEYWORD3>msgctl</KEYWORD3>\r
+                       <KEYWORD3>msgget</KEYWORD3>\r
+                       <KEYWORD3>msgrcv</KEYWORD3>\r
+                       <KEYWORD3>msgsnd</KEYWORD3>\r
+                       <KEYWORD3>semctl</KEYWORD3>\r
+                       <KEYWORD3>semget</KEYWORD3>\r
+\r
+                       <KEYWORD3>semop</KEYWORD3>\r
+                       <KEYWORD3>shmctl</KEYWORD3>\r
+                       <KEYWORD3>shmget</KEYWORD3>\r
+                       <KEYWORD3>shmread</KEYWORD3>\r
+                       <KEYWORD3>shmwrite</KEYWORD3>\r
+\r
+                       <!-- Fetching user and group info -->\r
+                       <KEYWORD3>endgrent</KEYWORD3>\r
+                       <KEYWORD3>endhostent</KEYWORD3>\r
+                       <KEYWORD3>endnetent</KEYWORD3>\r
+                       <KEYWORD3>endpwent</KEYWORD3>\r
+                       <KEYWORD3>getgrent</KEYWORD3>\r
+                       <KEYWORD3>getgrgid</KEYWORD3>\r
+                       <KEYWORD3>getgrnam</KEYWORD3>\r
+                       <KEYWORD3>getlogin</KEYWORD3>\r
+                       <KEYWORD3>getpwent</KEYWORD3>\r
+                       <KEYWORD3>getpwnam</KEYWORD3>\r
+                       <KEYWORD3>getpwuid</KEYWORD3>\r
+                       <KEYWORD3>setgrent</KEYWORD3>\r
+                       <KEYWORD3>setpwent</KEYWORD3>\r
+\r
+                       <!-- Fetching network info -->\r
+                       <KEYWORD3>endprotoent</KEYWORD3>\r
+                       <KEYWORD3>endservent</KEYWORD3>\r
+                       <KEYWORD3>gethostbyaddr</KEYWORD3>\r
+                       <KEYWORD3>gethostbyname</KEYWORD3>\r
+                       <KEYWORD3>gethostent</KEYWORD3>\r
+                       <KEYWORD3>getnetbyaddr</KEYWORD3>\r
+                       <KEYWORD3>getnetbyname</KEYWORD3>\r
+                       <KEYWORD3>getnetent</KEYWORD3>\r
+                       <KEYWORD3>getprotobyname</KEYWORD3>\r
+                       <KEYWORD3>getprotobynumber</KEYWORD3>\r
+                       <KEYWORD3>getprotoent</KEYWORD3>\r
+                       <KEYWORD3>getservbyname</KEYWORD3>\r
+                       <KEYWORD3>getservbyport</KEYWORD3>\r
+                       <KEYWORD3>getservent</KEYWORD3>\r
+                       <KEYWORD3>sethostent</KEYWORD3>\r
+                       <KEYWORD3>setnetent</KEYWORD3>\r
+                       <KEYWORD3>setprotoent</KEYWORD3>\r
+                       <KEYWORD3>setservent</KEYWORD3>\r
+\r
+                       <!-- Time-related functions -->\r
+                       <KEYWORD3>gmtime</KEYWORD3>\r
+                       <KEYWORD3>localtime</KEYWORD3>\r
+                       <KEYWORD3>time</KEYWORD3>\r
+                       <!--<KEYWORD3>times</KEYWORD3>-->\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="POD" DEFAULT="COMMENT2">\r
+               <MARK_FOLLOWING TYPE="LABEL" AT_LINE_START="TRUE">=</MARK_FOLLOWING>\r
+       </RULES>\r
+\r
+       <RULES SET="LITERAL" DEFAULT="LITERAL1" ESCAPE="\">\r
+               <!-- Variables inside a Literal -->\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <!-- object method inside a Literal -->\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">\r
+                       <BEGIN>->{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$#</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING>\r
+\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">\r
+                       <BEGIN>@{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">@</MARK_FOLLOWING>\r
+\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">\r
+                       <BEGIN>%{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">%</MARK_FOLLOWING>\r
+\r
+               <SEQ TYPE="LITERAL1">|</SEQ>\r
+               <SEQ TYPE="LITERAL1">&amp;</SEQ>\r
+               <SEQ TYPE="LITERAL1">!</SEQ>\r
+               <SEQ TYPE="LITERAL1">&gt;</SEQ>\r
+               <SEQ TYPE="LITERAL1">&lt;</SEQ>\r
+               <SEQ TYPE="LITERAL1">)</SEQ>\r
+               <SEQ TYPE="LITERAL1">(</SEQ>\r
+               <SEQ TYPE="LITERAL1">=</SEQ>\r
+               <SEQ TYPE="LITERAL1">!</SEQ>\r
+               <SEQ TYPE="LITERAL1">+</SEQ>\r
+               <SEQ TYPE="LITERAL1">-</SEQ>\r
+               <SEQ TYPE="LITERAL1">/</SEQ>\r
+               <SEQ TYPE="LITERAL1">*</SEQ>\r
+               <SEQ TYPE="LITERAL1">^</SEQ>\r
+               <SEQ TYPE="LITERAL1">~</SEQ>\r
+               <SEQ TYPE="LITERAL1">}</SEQ>\r
+               <SEQ TYPE="LITERAL1">{</SEQ>\r
+               <SEQ TYPE="LITERAL1">.</SEQ>\r
+               <SEQ TYPE="LITERAL1">,</SEQ>\r
+               <SEQ TYPE="LITERAL1">;</SEQ>\r
+               <SEQ TYPE="LITERAL1">]</SEQ>\r
+               <SEQ TYPE="LITERAL1">[</SEQ>\r
+               <SEQ TYPE="LITERAL1">?</SEQ>\r
+               <SEQ TYPE="LITERAL1">:</SEQ>\r
+       </RULES>\r
+\r
+       <!-- Literals framed by apostrophs -->\r
+       <RULES SET="APOSTR" DEFAULT="LITERAL1" ESCAPE="\">\r
+\r
+               <!-- just a hack for sprintf -->\r
+               <SEQ_REGEXP HASH_CHAR="%" TYPE="LITERAL4">%\d*\.?\d*[dfis]</SEQ_REGEXP>\r
+\r
+       </RULES>\r
+\r
+       <RULES SET="EXEC" DEFAULT="KEYWORD3" ESCAPE="\">\r
+               <!-- Comments -->\r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+               <!-- Variables -->\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$#</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING>\r
+\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>@{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">@</MARK_FOLLOWING>\r
+\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>%{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">%</MARK_FOLLOWING>\r
+       </RULES>\r
+\r
+       <RULES SET="VARIABLE" DEFAULT="KEYWORD2" ESCAPE="\">\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">\r
+                       <BEGIN>{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">-&gt;</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="REGEXP" DEFAULT="MARKUP" ESCAPE="\">\r
+               <!-- ??? -->\r
+               <SEQ TYPE="MARKUP">)(</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="SUB_NAME" DEFAULT="FUNCTION">\r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+               <SPAN TYPE="OPERATOR" DELEGATE="SUB_PROTO">\r
+                       <BEGIN>(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="SUB_PROTO" DEFAULT="LITERAL1">\r
+               <SEQ TYPE="LITERAL2">$</SEQ>\r
+               <SEQ TYPE="LITERAL2">@</SEQ>\r
+               <SEQ TYPE="LITERAL2">%</SEQ>\r
+               <SEQ TYPE="LITERAL2">&amp;</SEQ>\r
+               <SEQ TYPE="LITERAL2">*</SEQ>\r
+               <SEQ TYPE="LITERAL3">\</SEQ>\r
+       </RULES>\r
+\r
+       <!-- Used for quote-like operators; just makes sure the brackets are balanced. -->\r
+       <RULES SET="QUOTED" DEFAULT="LITERAL1">\r
+               <SPAN_REGEXP NO_LINE_BREAK="FALSE"\r
+                                        TYPE="LITERAL1"\r
+                                        MATCH_TYPE="OPERATOR"\r
+                                        DELEGATE="QUOTED"\r
+                                        HASH_CHARS="|[{(/">\r
+                       <BEGIN>([\[{\(])</BEGIN>\r
+                       <END>~1</END>\r
+               </SPAN_REGEXP>\r
+       </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/php.xml b/extra/xmode/modes/php.xml
new file mode 100644 (file)
index 0000000..91d8781
--- /dev/null
@@ -0,0 +1,4832 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- Catalog entry:\r
+<MODE NAME="php" FILE="php.xml"\r
+                               FILE_NAME_GLOB="*.{php3,php4,php5,php,phtml}"\r
+                               FIRST_LINE_GLOB="&lt;?php*" />\r
+-->\r
+\r
+\r
+<!--\r
+Usage of keywords:\r
+ - COMMENT1: range comments  (/* ... */)\r
+ - COMMENT2: line comments   (using //)\r
+ - COMMENT3: phpdoc comments (/** .. */)\r
+ - COMMENT4: line comments   (using #)\r
+ - DIGIT:    numbers\r
+ - FUNCTION: custom functions and class/object methods, e.g. foo(), $foo->bar() and foo::bar()\r
+ - KEYWORD1: basic PHP keywords, e.g. true, false, extends, implements\r
+             language constructs, e.g. if .. then .. else\r
+ - KEYWORD2: internal PHP functions,\r
+ - KEYWORD3: variables, e.g. $foo\r
+ - KEYWORD4: class definitions, object members, internal PHP objects\r
+ - LABEL:    phpdoc labels, like @see\r
+             CDATA blocks\r
+ - LITERAL1: Strings in single quotes, e.g. 'foo'\r
+ - LITERAL2: Strings in double quotes, e.g. "foo"\r
+ - LITERAL3: Strings in backtick quotes, e.g. `foo`\r
+ - LITERAL4: heredocs, e.g. "<<< FOO .... FOO\r
+ - MARKUP:   tags, e.g. <?php .. ?>\r
+ - OPERATOR: normal operators, e.g. + - ( ) { } [ ]\r
+             PHP language types in phpdoc block (TODO: sane?!)\r
+-->\r
+\r
+<!--\r
+TODO:\r
+ - cleanup/factorize PHPDOC section\r
+-->\r
+\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <!-- Default comment props (used when a ruleset has no other props) -->\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+\r
+               <!-- Auto indent -->\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />\r
+               <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />\r
+               <PROPERTY NAME="indentNextLine"\r
+                       VALUE="\s*(((if|while|else\s*(if)?|for(each)?|switch|declare)\s*\(.*\)[^{:;]*)|(do\s*[^\({:;]*))" />\r
+               <PROPERTY NAME="lineUpClosingBracket" VALUE="true" /><!-- @deprecated since 4.3pre2 -->\r
+               <PROPERTY NAME="unindentThisLine"\r
+                       VALUE="^.*(default:\s*|case.*:.*)$" />\r
+               <PROPERTY NAME="electricKeys" VALUE=":" />\r
+       </PROPS>\r
+\r
+\r
+       <RULES IGNORE_CASE="TRUE">\r
+               <PROPS>\r
+                       <!-- comment props for "HTML"/not-PHP: -->\r
+                       <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+                       <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+                       <PROPERTY NAME="lineComment" VALUE="" />\r
+               </PROPS>\r
+\r
+               <!-- regular PHP tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="PHP">\r
+                       <BEGIN>&lt;?php</BEGIN>\r
+                       <END>?&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- short tags: -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="PHP">\r
+                       <BEGIN>&lt;?</BEGIN>\r
+                       <END>?&gt;</END>\r
+               </SPAN>\r
+               <SPAN TYPE="MARKUP" DELEGATE="PHP">\r
+                       <BEGIN>&lt;?=</BEGIN>\r
+                       <END>?&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- ASP style tags: -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="PHP">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+               <SPAN TYPE="MARKUP" DELEGATE="PHP">\r
+                       <BEGIN>&lt;%=</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SSI? -->\r
+               <SPAN_REGEXP HASH_CHAR="&lt;SCRIPT" TYPE="MARKUP" DELEGATE="PHP">\r
+                       <BEGIN>&lt;SCRIPT\s+LANGUAGE="?PHP"?&gt;</BEGIN>\r
+                       <END>&lt;/SCRIPT&gt;</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1" DELEGATE="COMMENT1+PHP">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="JAVASCRIPT_OPENTAG">\r
+                       <BEGIN>&lt;SCRIPT</BEGIN>\r
+                       <END>&lt;/SCRIPT&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- CSS -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="CSS_OPENTAG">\r
+                       <BEGIN>&lt;STYLE</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- CDATA -->\r
+               <SPAN TYPE="LABEL" DELEGATE="MAIN">\r
+                       <BEGIN>&lt;![CDATA[</BEGIN>\r
+                       <END>]]&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD instructions -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="xml::DTD-TAGS">\r
+                       <BEGIN>&lt;!</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SEQ_REGEXP HASH_CHAR="&lt;" TYPE="MARKUP" DELEGATE="TAGS">&lt;/?\w+</SEQ_REGEXP>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+\r
+       <!-- HTML tags (from MAIN rule) -->\r
+       <RULES SET="TAGS" DEFAULT="MARKUP" ESCAPE="\">\r
+               <SEQ TYPE="MARKUP" DELEGATE="MAIN">&gt;</SEQ><!-- from SEQ_REGEXP delegate -->\r
+\r
+               <IMPORT DELEGATE="TO_LITERAL+PHP" />\r
+               <IMPORT DELEGATE="TO_PHP" />\r
+               <IMPORT DELEGATE="INVALID_LT" />\r
+               <IMPORT DELEGATE="html::TAGS" />\r
+       </RULES>\r
+\r
+\r
+       <!-- CSS where PHP code may be injected -->\r
+       <RULES SET="CSS_OPENTAG" DEFAULT="MARKUP">\r
+               <SEQ TYPE="MARKUP" DELEGATE="CSS">&gt;</SEQ>\r
+\r
+               <IMPORT DELEGATE="TO_LITERAL+PHP"/>\r
+       </RULES>\r
+\r
+       <RULES SET="CSS" DEFAULT="MARKUP">\r
+               <!-- CSS has no line comment: -->\r
+               <PROPS>\r
+                       <PROPERTY NAME="lineComment" VALUE="" />\r
+               </PROPS>\r
+\r
+               <SPAN DELEGATE="CSS"><!-- give priority to PHP -->\r
+                       <BEGIN>(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+               <IMPORT DELEGATE="TO_PHP"/>\r
+               <IMPORT DELEGATE="css::MAIN"/>\r
+       </RULES>\r
+\r
+\r
+       <!-- Helper for class references in rule PHP -->\r
+       <RULES SET="OBJECT_PHP" DEFAULT="KEYWORD4" ESCAPE="\"> <!-- TODO: ESCAPE should not be needed, see http://sourceforge.net/tracker/index.php?func=detail&aid=1600458&group_id=588&atid=100588 -->\r
+               <SPAN TYPE="OPERATOR" DELEGATE="PHP">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+\r
+               <!-- Keep brackets together and handle the expression therein with "PHP" -->\r
+               <SPAN TYPE="OPERATOR" DELEGATE="PHP">\r
+                       <BEGIN>(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+\r
+               <!-- Recurse methods: -->\r
+               <SEQ_REGEXP HASH_CHAR="-&gt;" TYPE="FUNCTION" DELEGATE="OBJECT_PHP">-&gt;\s*\w+\s*(?=\()</SEQ_REGEXP>\r
+\r
+               <!-- Recurse members: -->\r
+               <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="-&gt;" DELEGATE="OBJECT_PHP">-&gt;\w*</SEQ_REGEXP>\r
+\r
+               <!-- Operators delegate back to PHP {{{ -->\r
+               <SEQ DELEGATE="PHP"> </SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">!</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">%</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">*</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">+</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">,</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">-</SEQ><!-- "->" gets handled before -->\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">.</SEQ>\r
+               <SEQ_REGEXP HASH_CHAR="/" TYPE="OPERATOR" DELEGATE="PHP">/(?!/)</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR=":" TYPE="OPERATOR" DELEGATE="PHP">:(?!:)</SEQ_REGEXP><!-- not "::" -->\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">;</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">=</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">?</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">@</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">[</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">]</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">^</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">`</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">{</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">|</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">}</SEQ>\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">~</SEQ>\r
+               <!-- }}} -->\r
+\r
+               <IMPORT DELEGATE="PHP" />\r
+               <IMPORT DELEGATE="PHP_VAR" />\r
+               <IMPORT DELEGATE="PHP_KEYWORDS" />\r
+       </RULES>\r
+\r
+\r
+       <!-- PHP literal where variables get parsed -->\r
+       <RULES SET="PHP_LITERAL2" DEFAULT="LITERAL2" ESCAPE="\">\r
+               <SPAN_REGEXP HASH_CHAR="{" TYPE="LITERAL2" DELEGATE="OBJECT_PHP">\r
+                       <BEGIN>\{(?=\$)</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN_REGEXP>\r
+               <IMPORT DELEGATE="PHP_VAR" />\r
+       </RULES>\r
+\r
+\r
+       <!-- PHP literal in backticks, where variables get parsed; see PHP_LITERAL2 -->\r
+       <RULES SET="PHP_LITERAL3" DEFAULT="LITERAL3" ESCAPE="\">\r
+               <SPAN_REGEXP HASH_CHAR="{" TYPE="LITERAL3" DELEGATE="OBJECT_PHP">\r
+                       <BEGIN>\{(?=\$)</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN_REGEXP>\r
+               <IMPORT DELEGATE="PHP_VAR" />\r
+       </RULES>\r
+\r
+\r
+       <!-- PHP heredoc blocks, where variables get parsed; see PHP_LITERAL2 -->\r
+       <RULES SET="PHP_LITERAL4" DEFAULT="LITERAL4" ESCAPE="\">\r
+               <SPAN_REGEXP HASH_CHAR="{" TYPE="LITERAL4" DELEGATE="OBJECT_PHP">\r
+                       <BEGIN>\{(?=\$)</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN_REGEXP>\r
+               <IMPORT DELEGATE="PHP_VAR" />\r
+       </RULES>\r
+\r
+\r
+       <!-- Helper for class / interface definition -->\r
+       <RULES SET="DEF_CLASS" DEFAULT="KEYWORD4">\r
+               <SEQ TYPE="OPERATOR" DELEGATE="PHP">{</SEQ>\r
+\r
+               <!-- TODO: redundant comments {{{ -->\r
+               <!-- Silly comment -->\r
+               <SEQ TYPE="COMMENT1">/**/</SEQ>\r
+\r
+               <!-- PHPdoc comment -->\r
+               <SPAN TYPE="COMMENT3" DELEGATE="PHPDOC">\r
+                       <BEGIN>/**</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT4">#</EOL_SPAN>\r
+               <!-- redundant }}} -->\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>extends</KEYWORD1>\r
+                       <KEYWORD1>implements</KEYWORD1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+\r
+       <!-- PHP variables (PHPDOC_VAR for phpdoc blocks) -->\r
+       <RULES SET="PHP_VAR">\r
+               <!-- (Class-)Variables -->\r
+               <SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD4">\$\w+(?=\s*=\s*(&amp;\s*)?new)</SEQ_REGEXP>\r
+\r
+               <!-- Normal variables -->\r
+               <MARK_FOLLOWING TYPE="KEYWORD3">$</MARK_FOLLOWING>\r
+       </RULES>\r
+\r
+\r
+       <RULES SET="PHP" ESCAPE="\" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[0-9a-f]+|([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)">\r
+               <!-- Silly comment -->\r
+               <SEQ TYPE="COMMENT1">/**/</SEQ>\r
+\r
+               <!-- PHPdoc comment -->\r
+               <SPAN TYPE="COMMENT3" DELEGATE="PHPDOC">\r
+                       <BEGIN>/**</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">\r
+                       <BEGIN>`</BEGIN>\r
+                       <END>`</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT4">#</EOL_SPAN>\r
+\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR"> (</MARK_PREVIOUS>\r
+\r
+               <!-- Readins/Heredoc -->\r
+               <SPAN_REGEXP HASH_CHAR="&lt;&lt;&lt;" TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">\r
+                       <BEGIN><![CDATA[<<<[\p{Space}'"]*([\p{Alnum}_]+)[\p{Space}'"]*]]></BEGIN>\r
+                       <END AT_LINE_START="TRUE">$1</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- operators -->\r
+               <!-- {{{ -->\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">(array)</SEQ>\r
+               <SEQ TYPE="OPERATOR">(bool)</SEQ>\r
+               <SEQ TYPE="OPERATOR">(boolean)</SEQ>\r
+               <SEQ TYPE="OPERATOR">(double)</SEQ>\r
+               <SEQ TYPE="OPERATOR">(float)</SEQ>\r
+               <SEQ TYPE="OPERATOR">(int)</SEQ>\r
+               <SEQ TYPE="OPERATOR">(integer)</SEQ>\r
+               <SEQ TYPE="OPERATOR">(object)</SEQ>\r
+               <SEQ TYPE="OPERATOR">(real)</SEQ>\r
+               <SEQ TYPE="OPERATOR">(string)</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ_REGEXP HASH_CHAR=":" TYPE="OPERATOR">:(?!:)</SEQ_REGEXP><!-- not "::" -->\r
+               <SEQ TYPE="OPERATOR">;</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+               <SEQ TYPE="OPERATOR">@</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">`</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">(</SEQ>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+               <!-- }}} -->\r
+\r
+               <!-- Fix this variables to not start class definitions -->\r
+               <SEQ_REGEXP HASH_CHAR="$class" TYPE="KEYWORD3">\$class\w*</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="$interface" TYPE="KEYWORD3">\$interface\w*</SEQ_REGEXP>\r
+\r
+               <!-- Class definitions -->\r
+               <SEQ_REGEXP HASH_CHAR="class" AT_WORD_START="TRUE" DELEGATE="DEF_CLASS" TYPE="KEYWORD1">class(\s+|$)</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="interface" AT_WORD_START="TRUE" DELEGATE="DEF_CLASS" TYPE="KEYWORD1">interface(\s+|$)</SEQ_REGEXP>\r
+\r
+\r
+               <!-- to OBJECT_PHP: (Class-)Variables/Methods -->\r
+               <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="$" DELEGATE="OBJECT_PHP">\$\w+(?=(\[\$?[\s\w'"]+\])?-&gt;)</SEQ_REGEXP>\r
+               <MARK_PREVIOUS TYPE="KEYWORD4">::</MARK_PREVIOUS>\r
+\r
+               <!-- Imports: -->\r
+               <IMPORT DELEGATE="PHP_KEYWORDS" />\r
+               <IMPORT DELEGATE="PHP_VAR" />\r
+       </RULES>\r
+\r
+\r
+       <RULES SET="PHP_BASIC_KEYWORD1">\r
+               <KEYWORDS>\r
+                       <KEYWORD1>true</KEYWORD1>\r
+                       <KEYWORD1>false</KEYWORD1>\r
+                       <KEYWORD1>null</KEYWORD1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+\r
+       <RULES SET="PHP_KEYWORDS">\r
+               <IMPORT DELEGATE="KEYWORDS_VISIBILITY" />\r
+               <IMPORT DELEGATE="PHP_BASIC_KEYWORD1" />\r
+\r
+               <KEYWORDS>\r
+                       <!-- start: generated by buildfunctionlist.php -->\r
+                       <!-- {{{ -->\r
+                       <!-- Internal classes (61) -->\r
+                       <KEYWORD4>arrayiterator</KEYWORD4>\r
+                       <KEYWORD4>arrayobject</KEYWORD4>\r
+                       <KEYWORD4>cachingiterator</KEYWORD4>\r
+                       <KEYWORD4>cachingrecursiveiterator</KEYWORD4>\r
+                       <KEYWORD4>collection</KEYWORD4>\r
+                       <KEYWORD4>descriptor</KEYWORD4>\r
+                       <KEYWORD4>directoryiterator</KEYWORD4>\r
+                       <KEYWORD4>domattr</KEYWORD4>\r
+                       <KEYWORD4>domattribute</KEYWORD4>\r
+                       <KEYWORD4>domcharacterdata</KEYWORD4>\r
+                       <KEYWORD4>domdocument</KEYWORD4>\r
+                       <KEYWORD4>domdocumenttype</KEYWORD4>\r
+                       <KEYWORD4>domelement</KEYWORD4>\r
+                       <KEYWORD4>domimplementation</KEYWORD4>\r
+                       <KEYWORD4>domnamednodemap</KEYWORD4>\r
+                       <KEYWORD4>domnode</KEYWORD4>\r
+                       <KEYWORD4>domnodelist</KEYWORD4>\r
+                       <KEYWORD4>domprocessinginstruction</KEYWORD4>\r
+                       <KEYWORD4>domtext</KEYWORD4>\r
+                       <KEYWORD4>domxpath</KEYWORD4>\r
+                       <KEYWORD4>domxsltstylesheet</KEYWORD4>\r
+                       <KEYWORD4>filteriterator</KEYWORD4>\r
+                       <KEYWORD4>hw_api</KEYWORD4>\r
+                       <KEYWORD4>hw_api_attribute</KEYWORD4>\r
+                       <KEYWORD4>hw_api_content</KEYWORD4>\r
+                       <KEYWORD4>hw_api_error</KEYWORD4>\r
+                       <KEYWORD4>hw_api_object</KEYWORD4>\r
+                       <KEYWORD4>hw_api_reason</KEYWORD4>\r
+                       <KEYWORD4>limititerator</KEYWORD4>\r
+                       <KEYWORD4>lob</KEYWORD4>\r
+                       <KEYWORD4>memcache</KEYWORD4>\r
+                       <KEYWORD4>parentiterator</KEYWORD4>\r
+                       <KEYWORD4>pdo</KEYWORD4>\r
+                       <KEYWORD4>pdostatement</KEYWORD4>\r
+                       <KEYWORD4>rar</KEYWORD4>\r
+                       <KEYWORD4>recursivedirectoryiterator</KEYWORD4>\r
+                       <KEYWORD4>recursiveiteratoriterator</KEYWORD4>\r
+                       <KEYWORD4>simplexmlelement</KEYWORD4>\r
+                       <KEYWORD4>simplexmliterator</KEYWORD4>\r
+                       <KEYWORD4>soapclient</KEYWORD4>\r
+                       <KEYWORD4>soapfault</KEYWORD4>\r
+                       <KEYWORD4>soapheader</KEYWORD4>\r
+                       <KEYWORD4>soapparam</KEYWORD4>\r
+                       <KEYWORD4>soapserver</KEYWORD4>\r
+                       <KEYWORD4>soapvar</KEYWORD4>\r
+                       <KEYWORD4>swfaction</KEYWORD4>\r
+                       <KEYWORD4>swfbitmap</KEYWORD4>\r
+                       <KEYWORD4>swfbutton</KEYWORD4>\r
+                       <KEYWORD4>swfdisplayitem</KEYWORD4>\r
+                       <KEYWORD4>swffill</KEYWORD4>\r
+                       <KEYWORD4>swffont</KEYWORD4>\r
+                       <KEYWORD4>swfgradient</KEYWORD4>\r
+                       <KEYWORD4>swfmorph</KEYWORD4>\r
+                       <KEYWORD4>swfmovie</KEYWORD4>\r
+                       <KEYWORD4>swfshape</KEYWORD4>\r
+                       <KEYWORD4>swfsprite</KEYWORD4>\r
+                       <KEYWORD4>swftext</KEYWORD4>\r
+                       <KEYWORD4>swftextfield</KEYWORD4>\r
+                       <KEYWORD4>tidy</KEYWORD4>\r
+                       <KEYWORD4>tidy_node</KEYWORD4>\r
+                       <KEYWORD4>variant</KEYWORD4>\r
+\r
+\r
+                       <!-- Internal functions (3549) -->\r
+                       <KEYWORD2>__call</KEYWORD2> <!-- soapclient -->\r
+                       <KEYWORD2>__construct</KEYWORD2> <!-- arrayobject, directoryiterator, pdo, tidy -->\r
+                       <KEYWORD2>__getfunctions</KEYWORD2> <!-- soapclient -->\r
+                       <KEYWORD2>__getlastrequest</KEYWORD2> <!-- soapclient -->\r
+                       <KEYWORD2>__getlastresponse</KEYWORD2> <!-- soapclient -->\r
+                       <KEYWORD2>__gettypes</KEYWORD2> <!-- soapclient -->\r
+                       <KEYWORD2>__tostring</KEYWORD2> <!-- cachingiterator -->\r
+                       <KEYWORD2>abs</KEYWORD2>\r
+                       <KEYWORD2>acos</KEYWORD2>\r
+                       <KEYWORD2>acosh</KEYWORD2>\r
+                       <KEYWORD2>add</KEYWORD2> <!-- memcache, swfmovie, swfsprite -->\r
+                       <KEYWORD2>add_namespace</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>add_root</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>addaction</KEYWORD2> <!-- swfbutton -->\r
+                       <KEYWORD2>addcolor</KEYWORD2> <!-- swfdisplayitem -->\r
+                       <KEYWORD2>addcslashes</KEYWORD2>\r
+                       <KEYWORD2>addentry</KEYWORD2> <!-- swfgradient -->\r
+                       <KEYWORD2>addfill</KEYWORD2> <!-- swfshape -->\r
+                       <KEYWORD2>addfunction</KEYWORD2> <!-- soapserver -->\r
+                       <KEYWORD2>addshape</KEYWORD2> <!-- swfbutton -->\r
+                       <KEYWORD2>addslashes</KEYWORD2>\r
+                       <KEYWORD2>addstring</KEYWORD2> <!-- swftext, swftextfield -->\r
+                       <KEYWORD2>aggregate</KEYWORD2>\r
+                       <KEYWORD2>aggregate_info</KEYWORD2>\r
+                       <KEYWORD2>aggregate_methods</KEYWORD2>\r
+                       <KEYWORD2>aggregate_methods_by_list</KEYWORD2>\r
+                       <KEYWORD2>aggregate_methods_by_regexp</KEYWORD2>\r
+                       <KEYWORD2>aggregate_properties</KEYWORD2>\r
+                       <KEYWORD2>aggregate_properties_by_list</KEYWORD2>\r
+                       <KEYWORD2>aggregate_properties_by_regexp</KEYWORD2>\r
+                       <KEYWORD2>aggregation_info</KEYWORD2>\r
+                       <KEYWORD2>align</KEYWORD2> <!-- swftextfield -->\r
+                       <KEYWORD2>apache_child_terminate</KEYWORD2>\r
+                       <KEYWORD2>apache_get_modules</KEYWORD2>\r
+                       <KEYWORD2>apache_get_version</KEYWORD2>\r
+                       <KEYWORD2>apache_getenv</KEYWORD2>\r
+                       <KEYWORD2>apache_lookup_uri</KEYWORD2>\r
+                       <KEYWORD2>apache_note</KEYWORD2>\r
+                       <KEYWORD2>apache_request_headers</KEYWORD2>\r
+                       <KEYWORD2>apache_response_headers</KEYWORD2>\r
+                       <KEYWORD2>apache_setenv</KEYWORD2>\r
+                       <KEYWORD2>apd_breakpoint</KEYWORD2>\r
+                       <KEYWORD2>apd_callstack</KEYWORD2>\r
+                       <KEYWORD2>apd_clunk</KEYWORD2>\r
+                       <KEYWORD2>apd_continue</KEYWORD2>\r
+                       <KEYWORD2>apd_croak</KEYWORD2>\r
+                       <KEYWORD2>apd_dump_function_table</KEYWORD2>\r
+                       <KEYWORD2>apd_dump_persistent_resources</KEYWORD2>\r
+                       <KEYWORD2>apd_dump_regular_resources</KEYWORD2>\r
+                       <KEYWORD2>apd_echo</KEYWORD2>\r
+                       <KEYWORD2>apd_get_active_symbols</KEYWORD2>\r
+                       <KEYWORD2>apd_set_pprof_trace</KEYWORD2>\r
+                       <KEYWORD2>apd_set_session</KEYWORD2>\r
+                       <KEYWORD2>apd_set_session_trace</KEYWORD2>\r
+                       <KEYWORD2>apd_set_socket_session_trace</KEYWORD2>\r
+                       <KEYWORD2>append</KEYWORD2> <!-- arrayobject, collection, lob -->\r
+                       <KEYWORD2>append_child</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>append_sibling</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>appendchild</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>appenddata</KEYWORD2> <!-- domcharacterdata -->\r
+                       <KEYWORD2>array_change_key_case</KEYWORD2>\r
+                       <KEYWORD2>array_chunk</KEYWORD2>\r
+                       <KEYWORD2>array_combine</KEYWORD2>\r
+                       <KEYWORD2>array_count_values</KEYWORD2>\r
+                       <KEYWORD2>array_diff</KEYWORD2>\r
+                       <KEYWORD2>array_diff_assoc</KEYWORD2>\r
+                       <KEYWORD2>array_diff_key</KEYWORD2>\r
+                       <KEYWORD2>array_diff_uassoc</KEYWORD2>\r
+                       <KEYWORD2>array_diff_ukey</KEYWORD2>\r
+                       <KEYWORD2>array_fill</KEYWORD2>\r
+                       <KEYWORD2>array_filter</KEYWORD2>\r
+                       <KEYWORD2>array_flip</KEYWORD2>\r
+                       <KEYWORD2>array_intersect</KEYWORD2>\r
+                       <KEYWORD2>array_intersect_assoc</KEYWORD2>\r
+                       <KEYWORD2>array_intersect_key</KEYWORD2>\r
+                       <KEYWORD2>array_intersect_uassoc</KEYWORD2>\r
+                       <KEYWORD2>array_intersect_ukey</KEYWORD2>\r
+                       <KEYWORD2>array_key_exists</KEYWORD2>\r
+                       <KEYWORD2>array_keys</KEYWORD2>\r
+                       <KEYWORD2>array_map</KEYWORD2>\r
+                       <KEYWORD2>array_merge</KEYWORD2>\r
+                       <KEYWORD2>array_merge_recursive</KEYWORD2>\r
+                       <KEYWORD2>array_multisort</KEYWORD2>\r
+                       <KEYWORD2>array_pad</KEYWORD2>\r
+                       <KEYWORD2>array_pop</KEYWORD2>\r
+                       <KEYWORD2>array_push</KEYWORD2>\r
+                       <KEYWORD2>array_rand</KEYWORD2>\r
+                       <KEYWORD2>array_reduce</KEYWORD2>\r
+                       <KEYWORD2>array_reverse</KEYWORD2>\r
+                       <KEYWORD2>array_search</KEYWORD2>\r
+                       <KEYWORD2>array_shift</KEYWORD2>\r
+                       <KEYWORD2>array_slice</KEYWORD2>\r
+                       <KEYWORD2>array_splice</KEYWORD2>\r
+                       <KEYWORD2>array_sum</KEYWORD2>\r
+                       <KEYWORD2>array_udiff</KEYWORD2>\r
+                       <KEYWORD2>array_udiff_assoc</KEYWORD2>\r
+                       <KEYWORD2>array_udiff_uassoc</KEYWORD2>\r
+                       <KEYWORD2>array_uintersect</KEYWORD2>\r
+                       <KEYWORD2>array_uintersect_assoc</KEYWORD2>\r
+                       <KEYWORD2>array_uintersect_uassoc</KEYWORD2>\r
+                       <KEYWORD2>array_unique</KEYWORD2>\r
+                       <KEYWORD2>array_unshift</KEYWORD2>\r
+                       <KEYWORD2>array_values</KEYWORD2>\r
+                       <KEYWORD2>array_walk</KEYWORD2>\r
+                       <KEYWORD2>array_walk_recursive</KEYWORD2>\r
+                       <KEYWORD2>arsort</KEYWORD2>\r
+                       <KEYWORD2>ascii2ebcdic</KEYWORD2>\r
+                       <KEYWORD2>asin</KEYWORD2>\r
+                       <KEYWORD2>asinh</KEYWORD2>\r
+                       <KEYWORD2>asort</KEYWORD2>\r
+                       <KEYWORD2>aspell_check</KEYWORD2>\r
+                       <KEYWORD2>aspell_check_raw</KEYWORD2>\r
+                       <KEYWORD2>aspell_new</KEYWORD2>\r
+                       <KEYWORD2>aspell_suggest</KEYWORD2>\r
+                       <KEYWORD2>assert</KEYWORD2>\r
+                       <KEYWORD2>assert_options</KEYWORD2>\r
+                       <KEYWORD2>assign</KEYWORD2> <!-- collection, hw_api_object -->\r
+                       <KEYWORD2>assignelem</KEYWORD2> <!-- collection -->\r
+                       <KEYWORD2>asxml</KEYWORD2> <!-- simplexmlelement -->\r
+                       <KEYWORD2>atan</KEYWORD2>\r
+                       <KEYWORD2>atan2</KEYWORD2>\r
+                       <KEYWORD2>atanh</KEYWORD2>\r
+                       <KEYWORD2>attreditable</KEYWORD2> <!-- hw_api_object -->\r
+                       <KEYWORD2>attributes</KEYWORD2> <!-- domnode, simplexmlelement, tidy_node -->\r
+                       <KEYWORD2>base64_decode</KEYWORD2>\r
+                       <KEYWORD2>base64_encode</KEYWORD2>\r
+                       <KEYWORD2>base_convert</KEYWORD2>\r
+                       <KEYWORD2>basename</KEYWORD2>\r
+                       <KEYWORD2>bcadd</KEYWORD2>\r
+                       <KEYWORD2>bccomp</KEYWORD2>\r
+                       <KEYWORD2>bcdiv</KEYWORD2>\r
+                       <KEYWORD2>bcmod</KEYWORD2>\r
+                       <KEYWORD2>bcmul</KEYWORD2>\r
+                       <KEYWORD2>bcpow</KEYWORD2>\r
+                       <KEYWORD2>bcpowmod</KEYWORD2>\r
+                       <KEYWORD2>bcscale</KEYWORD2>\r
+                       <KEYWORD2>bcsqrt</KEYWORD2>\r
+                       <KEYWORD2>bcsub</KEYWORD2>\r
+                       <KEYWORD2>begintransaction</KEYWORD2> <!-- pdo -->\r
+                       <KEYWORD2>bin2hex</KEYWORD2>\r
+                       <KEYWORD2>bind_textdomain_codeset</KEYWORD2>\r
+                       <KEYWORD2>bindcolumn</KEYWORD2> <!-- pdostatement -->\r
+                       <KEYWORD2>bindec</KEYWORD2>\r
+                       <KEYWORD2>bindparam</KEYWORD2> <!-- pdostatement -->\r
+                       <KEYWORD2>bindtextdomain</KEYWORD2>\r
+                       <KEYWORD2>bzclose</KEYWORD2>\r
+                       <KEYWORD2>bzcompress</KEYWORD2>\r
+                       <KEYWORD2>bzdecompress</KEYWORD2>\r
+                       <KEYWORD2>bzerrno</KEYWORD2>\r
+                       <KEYWORD2>bzerror</KEYWORD2>\r
+                       <KEYWORD2>bzerrstr</KEYWORD2>\r
+                       <KEYWORD2>bzflush</KEYWORD2>\r
+                       <KEYWORD2>bzopen</KEYWORD2>\r
+                       <KEYWORD2>bzread</KEYWORD2>\r
+                       <KEYWORD2>bzwrite</KEYWORD2>\r
+                       <KEYWORD2>cal_days_in_month</KEYWORD2>\r
+                       <KEYWORD2>cal_from_jd</KEYWORD2>\r
+                       <KEYWORD2>cal_info</KEYWORD2>\r
+                       <KEYWORD2>cal_to_jd</KEYWORD2>\r
+                       <KEYWORD2>call_user_func</KEYWORD2>\r
+                       <KEYWORD2>call_user_func_array</KEYWORD2>\r
+                       <KEYWORD2>call_user_method</KEYWORD2>\r
+                       <KEYWORD2>call_user_method_array</KEYWORD2>\r
+                       <KEYWORD2>ccvs_add</KEYWORD2>\r
+                       <KEYWORD2>ccvs_auth</KEYWORD2>\r
+                       <KEYWORD2>ccvs_command</KEYWORD2>\r
+                       <KEYWORD2>ccvs_count</KEYWORD2>\r
+                       <KEYWORD2>ccvs_delete</KEYWORD2>\r
+                       <KEYWORD2>ccvs_done</KEYWORD2>\r
+                       <KEYWORD2>ccvs_init</KEYWORD2>\r
+                       <KEYWORD2>ccvs_lookup</KEYWORD2>\r
+                       <KEYWORD2>ccvs_new</KEYWORD2>\r
+                       <KEYWORD2>ccvs_report</KEYWORD2>\r
+                       <KEYWORD2>ccvs_return</KEYWORD2>\r
+                       <KEYWORD2>ccvs_reverse</KEYWORD2>\r
+                       <KEYWORD2>ccvs_sale</KEYWORD2>\r
+                       <KEYWORD2>ccvs_status</KEYWORD2>\r
+                       <KEYWORD2>ccvs_textvalue</KEYWORD2>\r
+                       <KEYWORD2>ccvs_void</KEYWORD2>\r
+                       <KEYWORD2>ceil</KEYWORD2>\r
+                       <KEYWORD2>chdir</KEYWORD2>\r
+                       <KEYWORD2>checkdate</KEYWORD2>\r
+                       <KEYWORD2>checkdnsrr</KEYWORD2>\r
+                       <KEYWORD2>checkin</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>checkout</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>chgrp</KEYWORD2>\r
+                       <KEYWORD2>child_nodes</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>children</KEYWORD2> <!-- hw_api, simplexmlelement, tidy_node -->\r
+                       <KEYWORD2>chmod</KEYWORD2>\r
+                       <KEYWORD2>chop</KEYWORD2>\r
+                       <KEYWORD2>chown</KEYWORD2>\r
+                       <KEYWORD2>chr</KEYWORD2>\r
+                       <KEYWORD2>chroot</KEYWORD2>\r
+                       <KEYWORD2>chunk_split</KEYWORD2>\r
+                       <KEYWORD2>class_exists</KEYWORD2>\r
+                       <KEYWORD2>class_implements</KEYWORD2>\r
+                       <KEYWORD2>class_parents</KEYWORD2>\r
+                       <KEYWORD2>classkit_import</KEYWORD2>\r
+                       <KEYWORD2>classkit_method_add</KEYWORD2>\r
+                       <KEYWORD2>classkit_method_copy</KEYWORD2>\r
+                       <KEYWORD2>classkit_method_redefine</KEYWORD2>\r
+                       <KEYWORD2>classkit_method_remove</KEYWORD2>\r
+                       <KEYWORD2>classkit_method_rename</KEYWORD2>\r
+                       <KEYWORD2>clearstatcache</KEYWORD2>\r
+                       <KEYWORD2>clone_node</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>clonenode</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>close</KEYWORD2> <!-- lob, memcache -->\r
+                       <KEYWORD2>closedir</KEYWORD2>\r
+                       <KEYWORD2>closelog</KEYWORD2>\r
+                       <KEYWORD2>com</KEYWORD2>\r
+                       <KEYWORD2>com_addref</KEYWORD2>\r
+                       <KEYWORD2>com_create_guid</KEYWORD2>\r
+                       <KEYWORD2>com_event_sink</KEYWORD2>\r
+                       <KEYWORD2>com_get</KEYWORD2>\r
+                       <KEYWORD2>com_get_active_object</KEYWORD2>\r
+                       <KEYWORD2>com_invoke</KEYWORD2>\r
+                       <KEYWORD2>com_isenum</KEYWORD2>\r
+                       <KEYWORD2>com_load</KEYWORD2>\r
+                       <KEYWORD2>com_load_typelib</KEYWORD2>\r
+                       <KEYWORD2>com_message_pump</KEYWORD2>\r
+                       <KEYWORD2>com_print_typeinfo</KEYWORD2>\r
+                       <KEYWORD2>com_propget</KEYWORD2>\r
+                       <KEYWORD2>com_propput</KEYWORD2>\r
+                       <KEYWORD2>com_propset</KEYWORD2>\r
+                       <KEYWORD2>com_release</KEYWORD2>\r
+                       <KEYWORD2>com_set</KEYWORD2>\r
+                       <KEYWORD2>commit</KEYWORD2> <!-- pdo -->\r
+                       <KEYWORD2>compact</KEYWORD2>\r
+                       <KEYWORD2>connect</KEYWORD2> <!-- memcache -->\r
+                       <KEYWORD2>connection_aborted</KEYWORD2>\r
+                       <KEYWORD2>connection_status</KEYWORD2>\r
+                       <KEYWORD2>connection_timeout</KEYWORD2>\r
+                       <KEYWORD2>constant</KEYWORD2>\r
+                       <KEYWORD2>content</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>convert_cyr_string</KEYWORD2>\r
+                       <KEYWORD2>convert_uudecode</KEYWORD2>\r
+                       <KEYWORD2>convert_uuencode</KEYWORD2>\r
+                       <KEYWORD2>copy</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>cos</KEYWORD2>\r
+                       <KEYWORD2>cosh</KEYWORD2>\r
+                       <KEYWORD2>count</KEYWORD2> <!-- arrayobject, hw_api_error, hw_api_object -->\r
+                       <KEYWORD2>count_chars</KEYWORD2>\r
+                       <KEYWORD2>cpdf_add_annotation</KEYWORD2>\r
+                       <KEYWORD2>cpdf_add_outline</KEYWORD2>\r
+                       <KEYWORD2>cpdf_arc</KEYWORD2>\r
+                       <KEYWORD2>cpdf_begin_text</KEYWORD2>\r
+                       <KEYWORD2>cpdf_circle</KEYWORD2>\r
+                       <KEYWORD2>cpdf_clip</KEYWORD2>\r
+                       <KEYWORD2>cpdf_close</KEYWORD2>\r
+                       <KEYWORD2>cpdf_closepath</KEYWORD2>\r
+                       <KEYWORD2>cpdf_closepath_fill_stroke</KEYWORD2>\r
+                       <KEYWORD2>cpdf_closepath_stroke</KEYWORD2>\r
+                       <KEYWORD2>cpdf_continue_text</KEYWORD2>\r
+                       <KEYWORD2>cpdf_curveto</KEYWORD2>\r
+                       <KEYWORD2>cpdf_end_text</KEYWORD2>\r
+                       <KEYWORD2>cpdf_fill</KEYWORD2>\r
+                       <KEYWORD2>cpdf_fill_stroke</KEYWORD2>\r
+                       <KEYWORD2>cpdf_finalize</KEYWORD2>\r
+                       <KEYWORD2>cpdf_finalize_page</KEYWORD2>\r
+                       <KEYWORD2>cpdf_global_set_document_limits</KEYWORD2>\r
+                       <KEYWORD2>cpdf_import_jpeg</KEYWORD2>\r
+                       <KEYWORD2>cpdf_lineto</KEYWORD2>\r
+                       <KEYWORD2>cpdf_moveto</KEYWORD2>\r
+                       <KEYWORD2>cpdf_newpath</KEYWORD2>\r
+                       <KEYWORD2>cpdf_open</KEYWORD2>\r
+                       <KEYWORD2>cpdf_output_buffer</KEYWORD2>\r
+                       <KEYWORD2>cpdf_page_init</KEYWORD2>\r
+                       <KEYWORD2>cpdf_place_inline_image</KEYWORD2>\r
+                       <KEYWORD2>cpdf_rect</KEYWORD2>\r
+                       <KEYWORD2>cpdf_restore</KEYWORD2>\r
+                       <KEYWORD2>cpdf_rlineto</KEYWORD2>\r
+                       <KEYWORD2>cpdf_rmoveto</KEYWORD2>\r
+                       <KEYWORD2>cpdf_rotate</KEYWORD2>\r
+                       <KEYWORD2>cpdf_rotate_text</KEYWORD2>\r
+                       <KEYWORD2>cpdf_save</KEYWORD2>\r
+                       <KEYWORD2>cpdf_save_to_file</KEYWORD2>\r
+                       <KEYWORD2>cpdf_scale</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_action_url</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_char_spacing</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_creator</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_current_page</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_font</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_font_directories</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_font_map_file</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_horiz_scaling</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_keywords</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_leading</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_page_animation</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_subject</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_text_matrix</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_text_pos</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_text_rendering</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_text_rise</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_title</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_viewer_preferences</KEYWORD2>\r
+                       <KEYWORD2>cpdf_set_word_spacing</KEYWORD2>\r
+                       <KEYWORD2>cpdf_setdash</KEYWORD2>\r
+                       <KEYWORD2>cpdf_setflat</KEYWORD2>\r
+                       <KEYWORD2>cpdf_setgray</KEYWORD2>\r
+                       <KEYWORD2>cpdf_setgray_fill</KEYWORD2>\r
+                       <KEYWORD2>cpdf_setgray_stroke</KEYWORD2>\r
+                       <KEYWORD2>cpdf_setlinecap</KEYWORD2>\r
+                       <KEYWORD2>cpdf_setlinejoin</KEYWORD2>\r
+                       <KEYWORD2>cpdf_setlinewidth</KEYWORD2>\r
+                       <KEYWORD2>cpdf_setmiterlimit</KEYWORD2>\r
+                       <KEYWORD2>cpdf_setrgbcolor</KEYWORD2>\r
+                       <KEYWORD2>cpdf_setrgbcolor_fill</KEYWORD2>\r
+                       <KEYWORD2>cpdf_setrgbcolor_stroke</KEYWORD2>\r
+                       <KEYWORD2>cpdf_show</KEYWORD2>\r
+                       <KEYWORD2>cpdf_show_xy</KEYWORD2>\r
+                       <KEYWORD2>cpdf_stringwidth</KEYWORD2>\r
+                       <KEYWORD2>cpdf_stroke</KEYWORD2>\r
+                       <KEYWORD2>cpdf_text</KEYWORD2>\r
+                       <KEYWORD2>cpdf_translate</KEYWORD2>\r
+                       <KEYWORD2>crack_check</KEYWORD2>\r
+                       <KEYWORD2>crack_closedict</KEYWORD2>\r
+                       <KEYWORD2>crack_getlastmessage</KEYWORD2>\r
+                       <KEYWORD2>crack_opendict</KEYWORD2>\r
+                       <KEYWORD2>crc32</KEYWORD2>\r
+                       <KEYWORD2>create_attribute</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>create_cdata_section</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>create_comment</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>create_element</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>create_element_ns</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>create_entity_reference</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>create_function</KEYWORD2>\r
+                       <KEYWORD2>create_processing_instruction</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>create_text_node</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>createattribute</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>createattributens</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>createcdatasection</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>createcomment</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>createdocument</KEYWORD2> <!-- domimplementation -->\r
+                       <KEYWORD2>createdocumentfragment</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>createdocumenttype</KEYWORD2> <!-- domimplementation -->\r
+                       <KEYWORD2>createelement</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>createelementns</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>createentityreference</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>createprocessinginstruction</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>createtextnode</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>crypt</KEYWORD2>\r
+                       <KEYWORD2>ctype_alnum</KEYWORD2>\r
+                       <KEYWORD2>ctype_alpha</KEYWORD2>\r
+                       <KEYWORD2>ctype_cntrl</KEYWORD2>\r
+                       <KEYWORD2>ctype_digit</KEYWORD2>\r
+                       <KEYWORD2>ctype_graph</KEYWORD2>\r
+                       <KEYWORD2>ctype_lower</KEYWORD2>\r
+                       <KEYWORD2>ctype_print</KEYWORD2>\r
+                       <KEYWORD2>ctype_punct</KEYWORD2>\r
+                       <KEYWORD2>ctype_space</KEYWORD2>\r
+                       <KEYWORD2>ctype_upper</KEYWORD2>\r
+                       <KEYWORD2>ctype_xdigit</KEYWORD2>\r
+                       <KEYWORD2>curl_close</KEYWORD2>\r
+                       <KEYWORD2>curl_copy_handle</KEYWORD2>\r
+                       <KEYWORD2>curl_errno</KEYWORD2>\r
+                       <KEYWORD2>curl_error</KEYWORD2>\r
+                       <KEYWORD2>curl_exec</KEYWORD2>\r
+                       <KEYWORD2>curl_getinfo</KEYWORD2>\r
+                       <KEYWORD2>curl_init</KEYWORD2>\r
+                       <KEYWORD2>curl_multi_add_handle</KEYWORD2>\r
+                       <KEYWORD2>curl_multi_close</KEYWORD2>\r
+                       <KEYWORD2>curl_multi_exec</KEYWORD2>\r
+                       <KEYWORD2>curl_multi_getcontent</KEYWORD2>\r
+                       <KEYWORD2>curl_multi_info_read</KEYWORD2>\r
+                       <KEYWORD2>curl_multi_init</KEYWORD2>\r
+                       <KEYWORD2>curl_multi_remove_handle</KEYWORD2>\r
+                       <KEYWORD2>curl_multi_select</KEYWORD2>\r
+                       <KEYWORD2>curl_setopt</KEYWORD2>\r
+                       <KEYWORD2>curl_version</KEYWORD2>\r
+                       <KEYWORD2>current</KEYWORD2> <!-- arrayiterator, directoryiterator, filteriterator, recursiveiteratoriterator, simplexmliterator -->\r
+                       <KEYWORD2>cybercash_base64_decode</KEYWORD2>\r
+                       <KEYWORD2>cybercash_base64_encode</KEYWORD2>\r
+                       <KEYWORD2>cybercash_decr</KEYWORD2>\r
+                       <KEYWORD2>cybercash_encr</KEYWORD2>\r
+                       <KEYWORD2>cyrus_authenticate</KEYWORD2>\r
+                       <KEYWORD2>cyrus_bind</KEYWORD2>\r
+                       <KEYWORD2>cyrus_close</KEYWORD2>\r
+                       <KEYWORD2>cyrus_connect</KEYWORD2>\r
+                       <KEYWORD2>cyrus_query</KEYWORD2>\r
+                       <KEYWORD2>cyrus_unbind</KEYWORD2>\r
+                       <KEYWORD2>data</KEYWORD2> <!-- domprocessinginstruction -->\r
+                       <KEYWORD2>date</KEYWORD2>\r
+                       <KEYWORD2>date_sunrise</KEYWORD2>\r
+                       <KEYWORD2>date_sunset</KEYWORD2>\r
+                       <KEYWORD2>dba_close</KEYWORD2>\r
+                       <KEYWORD2>dba_delete</KEYWORD2>\r
+                       <KEYWORD2>dba_exists</KEYWORD2>\r
+                       <KEYWORD2>dba_fetch</KEYWORD2>\r
+                       <KEYWORD2>dba_firstkey</KEYWORD2>\r
+                       <KEYWORD2>dba_handlers</KEYWORD2>\r
+                       <KEYWORD2>dba_insert</KEYWORD2>\r
+                       <KEYWORD2>dba_key_split</KEYWORD2>\r
+                       <KEYWORD2>dba_list</KEYWORD2>\r
+                       <KEYWORD2>dba_nextkey</KEYWORD2>\r
+                       <KEYWORD2>dba_open</KEYWORD2>\r
+                       <KEYWORD2>dba_optimize</KEYWORD2>\r
+                       <KEYWORD2>dba_popen</KEYWORD2>\r
+                       <KEYWORD2>dba_replace</KEYWORD2>\r
+                       <KEYWORD2>dba_sync</KEYWORD2>\r
+                       <KEYWORD2>dbase_add_record</KEYWORD2>\r
+                       <KEYWORD2>dbase_close</KEYWORD2>\r
+                       <KEYWORD2>dbase_create</KEYWORD2>\r
+                       <KEYWORD2>dbase_delete_record</KEYWORD2>\r
+                       <KEYWORD2>dbase_get_header_info</KEYWORD2>\r
+                       <KEYWORD2>dbase_get_record</KEYWORD2>\r
+                       <KEYWORD2>dbase_get_record_with_names</KEYWORD2>\r
+                       <KEYWORD2>dbase_numfields</KEYWORD2>\r
+                       <KEYWORD2>dbase_numrecords</KEYWORD2>\r
+                       <KEYWORD2>dbase_open</KEYWORD2>\r
+                       <KEYWORD2>dbase_pack</KEYWORD2>\r
+                       <KEYWORD2>dbase_replace_record</KEYWORD2>\r
+                       <KEYWORD2>dblist</KEYWORD2>\r
+                       <KEYWORD2>dbmclose</KEYWORD2>\r
+                       <KEYWORD2>dbmdelete</KEYWORD2>\r
+                       <KEYWORD2>dbmexists</KEYWORD2>\r
+                       <KEYWORD2>dbmfetch</KEYWORD2>\r
+                       <KEYWORD2>dbmfirstkey</KEYWORD2>\r
+                       <KEYWORD2>dbminsert</KEYWORD2>\r
+                       <KEYWORD2>dbmnextkey</KEYWORD2>\r
+                       <KEYWORD2>dbmopen</KEYWORD2>\r
+                       <KEYWORD2>dbmreplace</KEYWORD2>\r
+                       <KEYWORD2>dbplus_add</KEYWORD2>\r
+                       <KEYWORD2>dbplus_aql</KEYWORD2>\r
+                       <KEYWORD2>dbplus_chdir</KEYWORD2>\r
+                       <KEYWORD2>dbplus_close</KEYWORD2>\r
+                       <KEYWORD2>dbplus_curr</KEYWORD2>\r
+                       <KEYWORD2>dbplus_errcode</KEYWORD2>\r
+                       <KEYWORD2>dbplus_errno</KEYWORD2>\r
+                       <KEYWORD2>dbplus_find</KEYWORD2>\r
+                       <KEYWORD2>dbplus_first</KEYWORD2>\r
+                       <KEYWORD2>dbplus_flush</KEYWORD2>\r
+                       <KEYWORD2>dbplus_freealllocks</KEYWORD2>\r
+                       <KEYWORD2>dbplus_freelock</KEYWORD2>\r
+                       <KEYWORD2>dbplus_freerlocks</KEYWORD2>\r
+                       <KEYWORD2>dbplus_getlock</KEYWORD2>\r
+                       <KEYWORD2>dbplus_getunique</KEYWORD2>\r
+                       <KEYWORD2>dbplus_info</KEYWORD2>\r
+                       <KEYWORD2>dbplus_last</KEYWORD2>\r
+                       <KEYWORD2>dbplus_lockrel</KEYWORD2>\r
+                       <KEYWORD2>dbplus_next</KEYWORD2>\r
+                       <KEYWORD2>dbplus_open</KEYWORD2>\r
+                       <KEYWORD2>dbplus_prev</KEYWORD2>\r
+                       <KEYWORD2>dbplus_rchperm</KEYWORD2>\r
+                       <KEYWORD2>dbplus_rcreate</KEYWORD2>\r
+                       <KEYWORD2>dbplus_rcrtexact</KEYWORD2>\r
+                       <KEYWORD2>dbplus_rcrtlike</KEYWORD2>\r
+                       <KEYWORD2>dbplus_resolve</KEYWORD2>\r
+                       <KEYWORD2>dbplus_restorepos</KEYWORD2>\r
+                       <KEYWORD2>dbplus_rkeys</KEYWORD2>\r
+                       <KEYWORD2>dbplus_ropen</KEYWORD2>\r
+                       <KEYWORD2>dbplus_rquery</KEYWORD2>\r
+                       <KEYWORD2>dbplus_rrename</KEYWORD2>\r
+                       <KEYWORD2>dbplus_rsecindex</KEYWORD2>\r
+                       <KEYWORD2>dbplus_runlink</KEYWORD2>\r
+                       <KEYWORD2>dbplus_rzap</KEYWORD2>\r
+                       <KEYWORD2>dbplus_savepos</KEYWORD2>\r
+                       <KEYWORD2>dbplus_setindex</KEYWORD2>\r
+                       <KEYWORD2>dbplus_setindexbynumber</KEYWORD2>\r
+                       <KEYWORD2>dbplus_sql</KEYWORD2>\r
+                       <KEYWORD2>dbplus_tcl</KEYWORD2>\r
+                       <KEYWORD2>dbplus_tremove</KEYWORD2>\r
+                       <KEYWORD2>dbplus_undo</KEYWORD2>\r
+                       <KEYWORD2>dbplus_undoprepare</KEYWORD2>\r
+                       <KEYWORD2>dbplus_unlockrel</KEYWORD2>\r
+                       <KEYWORD2>dbplus_unselect</KEYWORD2>\r
+                       <KEYWORD2>dbplus_update</KEYWORD2>\r
+                       <KEYWORD2>dbplus_xlockrel</KEYWORD2>\r
+                       <KEYWORD2>dbplus_xunlockrel</KEYWORD2>\r
+                       <KEYWORD2>dbstat</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>dbx_close</KEYWORD2>\r
+                       <KEYWORD2>dbx_compare</KEYWORD2>\r
+                       <KEYWORD2>dbx_connect</KEYWORD2>\r
+                       <KEYWORD2>dbx_error</KEYWORD2>\r
+                       <KEYWORD2>dbx_escape_string</KEYWORD2>\r
+                       <KEYWORD2>dbx_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>dbx_query</KEYWORD2>\r
+                       <KEYWORD2>dbx_sort</KEYWORD2>\r
+                       <KEYWORD2>dcgettext</KEYWORD2>\r
+                       <KEYWORD2>dcngettext</KEYWORD2>\r
+                       <KEYWORD2>dcstat</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>deaggregate</KEYWORD2>\r
+                       <KEYWORD2>debug_backtrace</KEYWORD2>\r
+                       <KEYWORD2>debug_print_backtrace</KEYWORD2>\r
+                       <KEYWORD2>debug_zval_dump</KEYWORD2>\r
+                       <KEYWORD2>debugger_off</KEYWORD2>\r
+                       <KEYWORD2>debugger_on</KEYWORD2>\r
+                       <KEYWORD2>decbin</KEYWORD2>\r
+                       <KEYWORD2>dechex</KEYWORD2>\r
+                       <KEYWORD2>decoct</KEYWORD2>\r
+                       <KEYWORD2>decrement</KEYWORD2> <!-- memcache -->\r
+                       <KEYWORD2>define</KEYWORD2>\r
+                       <KEYWORD2>define_syslog_variables</KEYWORD2>\r
+                       <KEYWORD2>defined</KEYWORD2>\r
+                       <KEYWORD2>deg2rad</KEYWORD2>\r
+                       <KEYWORD2>delete</KEYWORD2> <!-- memcache -->\r
+                       <KEYWORD2>deletedata</KEYWORD2> <!-- domcharacterdata -->\r
+                       <KEYWORD2>description</KEYWORD2> <!-- hw_api_reason -->\r
+                       <KEYWORD2>dgettext</KEYWORD2>\r
+                       <KEYWORD2>dio_close</KEYWORD2>\r
+                       <KEYWORD2>dio_fcntl</KEYWORD2>\r
+                       <KEYWORD2>dio_open</KEYWORD2>\r
+                       <KEYWORD2>dio_read</KEYWORD2>\r
+                       <KEYWORD2>dio_seek</KEYWORD2>\r
+                       <KEYWORD2>dio_stat</KEYWORD2>\r
+                       <KEYWORD2>dio_tcsetattr</KEYWORD2>\r
+                       <KEYWORD2>dio_truncate</KEYWORD2>\r
+                       <KEYWORD2>dio_write</KEYWORD2>\r
+                       <KEYWORD2>dir</KEYWORD2>\r
+                       <KEYWORD2>dirname</KEYWORD2>\r
+                       <KEYWORD2>disk_free_space</KEYWORD2>\r
+                       <KEYWORD2>disk_total_space</KEYWORD2>\r
+                       <KEYWORD2>diskfreespace</KEYWORD2>\r
+                       <KEYWORD2>dl</KEYWORD2>\r
+                       <KEYWORD2>dngettext</KEYWORD2>\r
+                       <KEYWORD2>dns_check_record</KEYWORD2>\r
+                       <KEYWORD2>dns_get_mx</KEYWORD2>\r
+                       <KEYWORD2>dns_get_record</KEYWORD2>\r
+                       <KEYWORD2>doctype</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>document_element</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>dom_import_simplexml</KEYWORD2>\r
+                       <KEYWORD2>domxml_new_doc</KEYWORD2>\r
+                       <KEYWORD2>domxml_open_file</KEYWORD2>\r
+                       <KEYWORD2>domxml_open_mem</KEYWORD2>\r
+                       <KEYWORD2>domxml_version</KEYWORD2>\r
+                       <KEYWORD2>domxml_xmltree</KEYWORD2>\r
+                       <KEYWORD2>domxml_xslt_stylesheet</KEYWORD2>\r
+                       <KEYWORD2>domxml_xslt_stylesheet_doc</KEYWORD2>\r
+                       <KEYWORD2>domxml_xslt_stylesheet_file</KEYWORD2>\r
+                       <KEYWORD2>dotnet</KEYWORD2>\r
+                       <KEYWORD2>dotnet_load</KEYWORD2>\r
+                       <KEYWORD2>doubleval</KEYWORD2>\r
+                       <KEYWORD2>drawcurve</KEYWORD2> <!-- swfshape -->\r
+                       <KEYWORD2>drawcurveto</KEYWORD2> <!-- swfshape -->\r
+                       <KEYWORD2>drawline</KEYWORD2> <!-- swfshape -->\r
+                       <KEYWORD2>drawlineto</KEYWORD2> <!-- swfshape -->\r
+                       <KEYWORD2>dstanchors</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>dstofsrcanchors</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>dump_file</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>dump_mem</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>dump_node</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>each</KEYWORD2>\r
+                       <KEYWORD2>easter_date</KEYWORD2>\r
+                       <KEYWORD2>easter_days</KEYWORD2>\r
+                       <KEYWORD2>ebcdic2ascii</KEYWORD2>\r
+                       <KEYWORD2>end</KEYWORD2>\r
+                       <KEYWORD2>entities</KEYWORD2> <!-- domdocumenttype -->\r
+                       <KEYWORD2>eof</KEYWORD2> <!-- lob -->\r
+                       <KEYWORD2>erase</KEYWORD2> <!-- lob -->\r
+                       <KEYWORD2>ereg</KEYWORD2>\r
+                       <KEYWORD2>ereg_replace</KEYWORD2>\r
+                       <KEYWORD2>eregi</KEYWORD2>\r
+                       <KEYWORD2>eregi_replace</KEYWORD2>\r
+                       <KEYWORD2>error_log</KEYWORD2>\r
+                       <KEYWORD2>error_reporting</KEYWORD2>\r
+                       <KEYWORD2>errorcode</KEYWORD2> <!-- pdo, pdostatement -->\r
+                       <KEYWORD2>errorinfo</KEYWORD2> <!-- pdo, pdostatement -->\r
+                       <KEYWORD2>escapeshellarg</KEYWORD2>\r
+                       <KEYWORD2>escapeshellcmd</KEYWORD2>\r
+                       <KEYWORD2>exec</KEYWORD2> <!-- pdo -->\r
+                       <KEYWORD2>execute</KEYWORD2> <!-- pdostatement -->\r
+                       <KEYWORD2>exif_imagetype</KEYWORD2>\r
+                       <KEYWORD2>exif_read_data</KEYWORD2>\r
+                       <KEYWORD2>exif_tagname</KEYWORD2>\r
+                       <KEYWORD2>exif_thumbnail</KEYWORD2>\r
+                       <KEYWORD2>exp</KEYWORD2>\r
+                       <KEYWORD2>explode</KEYWORD2>\r
+                       <KEYWORD2>expm1</KEYWORD2>\r
+                       <KEYWORD2>export</KEYWORD2> <!-- lob -->\r
+                       <KEYWORD2>extension_loaded</KEYWORD2>\r
+                       <KEYWORD2>extract</KEYWORD2> <!-- rar -->\r
+                       <KEYWORD2>ezmlm_hash</KEYWORD2>\r
+                       <KEYWORD2>fam_cancel_monitor</KEYWORD2>\r
+                       <KEYWORD2>fam_close</KEYWORD2>\r
+                       <KEYWORD2>fam_monitor_collection</KEYWORD2>\r
+                       <KEYWORD2>fam_monitor_directory</KEYWORD2>\r
+                       <KEYWORD2>fam_monitor_file</KEYWORD2>\r
+                       <KEYWORD2>fam_next_event</KEYWORD2>\r
+                       <KEYWORD2>fam_open</KEYWORD2>\r
+                       <KEYWORD2>fam_pending</KEYWORD2>\r
+                       <KEYWORD2>fam_resume_monitor</KEYWORD2>\r
+                       <KEYWORD2>fam_suspend_monitor</KEYWORD2>\r
+                       <KEYWORD2>fbsql_affected_rows</KEYWORD2>\r
+                       <KEYWORD2>fbsql_autocommit</KEYWORD2>\r
+                       <KEYWORD2>fbsql_blob_size</KEYWORD2>\r
+                       <KEYWORD2>fbsql_change_user</KEYWORD2>\r
+                       <KEYWORD2>fbsql_clob_size</KEYWORD2>\r
+                       <KEYWORD2>fbsql_close</KEYWORD2>\r
+                       <KEYWORD2>fbsql_commit</KEYWORD2>\r
+                       <KEYWORD2>fbsql_connect</KEYWORD2>\r
+                       <KEYWORD2>fbsql_create_blob</KEYWORD2>\r
+                       <KEYWORD2>fbsql_create_clob</KEYWORD2>\r
+                       <KEYWORD2>fbsql_create_db</KEYWORD2>\r
+                       <KEYWORD2>fbsql_data_seek</KEYWORD2>\r
+                       <KEYWORD2>fbsql_database</KEYWORD2>\r
+                       <KEYWORD2>fbsql_database_password</KEYWORD2>\r
+                       <KEYWORD2>fbsql_db_query</KEYWORD2>\r
+                       <KEYWORD2>fbsql_db_status</KEYWORD2>\r
+                       <KEYWORD2>fbsql_drop_db</KEYWORD2>\r
+                       <KEYWORD2>fbsql_errno</KEYWORD2>\r
+                       <KEYWORD2>fbsql_error</KEYWORD2>\r
+                       <KEYWORD2>fbsql_fetch_array</KEYWORD2>\r
+                       <KEYWORD2>fbsql_fetch_assoc</KEYWORD2>\r
+                       <KEYWORD2>fbsql_fetch_field</KEYWORD2>\r
+                       <KEYWORD2>fbsql_fetch_lengths</KEYWORD2>\r
+                       <KEYWORD2>fbsql_fetch_object</KEYWORD2>\r
+                       <KEYWORD2>fbsql_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>fbsql_field_flags</KEYWORD2>\r
+                       <KEYWORD2>fbsql_field_len</KEYWORD2>\r
+                       <KEYWORD2>fbsql_field_name</KEYWORD2>\r
+                       <KEYWORD2>fbsql_field_seek</KEYWORD2>\r
+                       <KEYWORD2>fbsql_field_table</KEYWORD2>\r
+                       <KEYWORD2>fbsql_field_type</KEYWORD2>\r
+                       <KEYWORD2>fbsql_free_result</KEYWORD2>\r
+                       <KEYWORD2>fbsql_get_autostart_info</KEYWORD2>\r
+                       <KEYWORD2>fbsql_hostname</KEYWORD2>\r
+                       <KEYWORD2>fbsql_insert_id</KEYWORD2>\r
+                       <KEYWORD2>fbsql_list_dbs</KEYWORD2>\r
+                       <KEYWORD2>fbsql_list_fields</KEYWORD2>\r
+                       <KEYWORD2>fbsql_list_tables</KEYWORD2>\r
+                       <KEYWORD2>fbsql_next_result</KEYWORD2>\r
+                       <KEYWORD2>fbsql_num_fields</KEYWORD2>\r
+                       <KEYWORD2>fbsql_num_rows</KEYWORD2>\r
+                       <KEYWORD2>fbsql_password</KEYWORD2>\r
+                       <KEYWORD2>fbsql_pconnect</KEYWORD2>\r
+                       <KEYWORD2>fbsql_query</KEYWORD2>\r
+                       <KEYWORD2>fbsql_read_blob</KEYWORD2>\r
+                       <KEYWORD2>fbsql_read_clob</KEYWORD2>\r
+                       <KEYWORD2>fbsql_result</KEYWORD2>\r
+                       <KEYWORD2>fbsql_rollback</KEYWORD2>\r
+                       <KEYWORD2>fbsql_select_db</KEYWORD2>\r
+                       <KEYWORD2>fbsql_set_lob_mode</KEYWORD2>\r
+                       <KEYWORD2>fbsql_set_password</KEYWORD2>\r
+                       <KEYWORD2>fbsql_set_transaction</KEYWORD2>\r
+                       <KEYWORD2>fbsql_start_db</KEYWORD2>\r
+                       <KEYWORD2>fbsql_stop_db</KEYWORD2>\r
+                       <KEYWORD2>fbsql_tablename</KEYWORD2>\r
+                       <KEYWORD2>fbsql_username</KEYWORD2>\r
+                       <KEYWORD2>fbsql_warnings</KEYWORD2>\r
+                       <KEYWORD2>fclose</KEYWORD2>\r
+                       <KEYWORD2>fdf_add_doc_javascript</KEYWORD2>\r
+                       <KEYWORD2>fdf_add_template</KEYWORD2>\r
+                       <KEYWORD2>fdf_close</KEYWORD2>\r
+                       <KEYWORD2>fdf_create</KEYWORD2>\r
+                       <KEYWORD2>fdf_enum_values</KEYWORD2>\r
+                       <KEYWORD2>fdf_errno</KEYWORD2>\r
+                       <KEYWORD2>fdf_error</KEYWORD2>\r
+                       <KEYWORD2>fdf_get_ap</KEYWORD2>\r
+                       <KEYWORD2>fdf_get_attachment</KEYWORD2>\r
+                       <KEYWORD2>fdf_get_encoding</KEYWORD2>\r
+                       <KEYWORD2>fdf_get_file</KEYWORD2>\r
+                       <KEYWORD2>fdf_get_flags</KEYWORD2>\r
+                       <KEYWORD2>fdf_get_opt</KEYWORD2>\r
+                       <KEYWORD2>fdf_get_status</KEYWORD2>\r
+                       <KEYWORD2>fdf_get_value</KEYWORD2>\r
+                       <KEYWORD2>fdf_get_version</KEYWORD2>\r
+                       <KEYWORD2>fdf_header</KEYWORD2>\r
+                       <KEYWORD2>fdf_next_field_name</KEYWORD2>\r
+                       <KEYWORD2>fdf_open</KEYWORD2>\r
+                       <KEYWORD2>fdf_open_string</KEYWORD2>\r
+                       <KEYWORD2>fdf_remove_item</KEYWORD2>\r
+                       <KEYWORD2>fdf_save</KEYWORD2>\r
+                       <KEYWORD2>fdf_save_string</KEYWORD2>\r
+                       <KEYWORD2>fdf_set_ap</KEYWORD2>\r
+                       <KEYWORD2>fdf_set_encoding</KEYWORD2>\r
+                       <KEYWORD2>fdf_set_file</KEYWORD2>\r
+                       <KEYWORD2>fdf_set_flags</KEYWORD2>\r
+                       <KEYWORD2>fdf_set_javascript_action</KEYWORD2>\r
+                       <KEYWORD2>fdf_set_on_import_javascript</KEYWORD2>\r
+                       <KEYWORD2>fdf_set_opt</KEYWORD2>\r
+                       <KEYWORD2>fdf_set_status</KEYWORD2>\r
+                       <KEYWORD2>fdf_set_submit_form_action</KEYWORD2>\r
+                       <KEYWORD2>fdf_set_target_frame</KEYWORD2>\r
+                       <KEYWORD2>fdf_set_value</KEYWORD2>\r
+                       <KEYWORD2>fdf_set_version</KEYWORD2>\r
+                       <KEYWORD2>feof</KEYWORD2>\r
+                       <KEYWORD2>fetch</KEYWORD2> <!-- pdostatement -->\r
+                       <KEYWORD2>fetchall</KEYWORD2> <!-- pdostatement -->\r
+                       <KEYWORD2>fetchsingle</KEYWORD2> <!-- pdostatement -->\r
+                       <KEYWORD2>fflush</KEYWORD2>\r
+                       <KEYWORD2>fgetc</KEYWORD2>\r
+                       <KEYWORD2>fgetcsv</KEYWORD2>\r
+                       <KEYWORD2>fgets</KEYWORD2>\r
+                       <KEYWORD2>fgetss</KEYWORD2>\r
+                       <KEYWORD2>file</KEYWORD2>\r
+                       <KEYWORD2>file_exists</KEYWORD2>\r
+                       <KEYWORD2>file_get_contents</KEYWORD2>\r
+                       <KEYWORD2>file_put_contents</KEYWORD2>\r
+                       <KEYWORD2>fileatime</KEYWORD2>\r
+                       <KEYWORD2>filectime</KEYWORD2>\r
+                       <KEYWORD2>filegroup</KEYWORD2>\r
+                       <KEYWORD2>fileinode</KEYWORD2>\r
+                       <KEYWORD2>filemtime</KEYWORD2>\r
+                       <KEYWORD2>fileowner</KEYWORD2>\r
+                       <KEYWORD2>fileperms</KEYWORD2>\r
+                       <KEYWORD2>filepro</KEYWORD2>\r
+                       <KEYWORD2>filepro_fieldcount</KEYWORD2>\r
+                       <KEYWORD2>filepro_fieldname</KEYWORD2>\r
+                       <KEYWORD2>filepro_fieldtype</KEYWORD2>\r
+                       <KEYWORD2>filepro_fieldwidth</KEYWORD2>\r
+                       <KEYWORD2>filepro_retrieve</KEYWORD2>\r
+                       <KEYWORD2>filepro_rowcount</KEYWORD2>\r
+                       <KEYWORD2>filesize</KEYWORD2>\r
+                       <KEYWORD2>filetype</KEYWORD2>\r
+                       <KEYWORD2>find</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>first_child</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>floatval</KEYWORD2>\r
+                       <KEYWORD2>flock</KEYWORD2>\r
+                       <KEYWORD2>floor</KEYWORD2>\r
+                       <KEYWORD2>flush</KEYWORD2> <!-- lob, memcache -->\r
+                       <KEYWORD2>fmod</KEYWORD2>\r
+                       <KEYWORD2>fnmatch</KEYWORD2>\r
+                       <KEYWORD2>fopen</KEYWORD2>\r
+                       <KEYWORD2>fpassthru</KEYWORD2>\r
+                       <KEYWORD2>fprintf</KEYWORD2>\r
+                       <KEYWORD2>fputcsv</KEYWORD2>\r
+                       <KEYWORD2>fputs</KEYWORD2>\r
+                       <KEYWORD2>fread</KEYWORD2>\r
+                       <KEYWORD2>free</KEYWORD2> <!-- collection, descriptor -->\r
+                       <KEYWORD2>frenchtojd</KEYWORD2>\r
+                       <KEYWORD2>fribidi_log2vis</KEYWORD2>\r
+                       <KEYWORD2>fscanf</KEYWORD2>\r
+                       <KEYWORD2>fseek</KEYWORD2>\r
+                       <KEYWORD2>fsockopen</KEYWORD2>\r
+                       <KEYWORD2>fstat</KEYWORD2>\r
+                       <KEYWORD2>ftell</KEYWORD2>\r
+                       <KEYWORD2>ftok</KEYWORD2>\r
+                       <KEYWORD2>ftp_alloc</KEYWORD2>\r
+                       <KEYWORD2>ftp_cdup</KEYWORD2>\r
+                       <KEYWORD2>ftp_chdir</KEYWORD2>\r
+                       <KEYWORD2>ftp_chmod</KEYWORD2>\r
+                       <KEYWORD2>ftp_close</KEYWORD2>\r
+                       <KEYWORD2>ftp_connect</KEYWORD2>\r
+                       <KEYWORD2>ftp_delete</KEYWORD2>\r
+                       <KEYWORD2>ftp_exec</KEYWORD2>\r
+                       <KEYWORD2>ftp_fget</KEYWORD2>\r
+                       <KEYWORD2>ftp_fput</KEYWORD2>\r
+                       <KEYWORD2>ftp_get</KEYWORD2>\r
+                       <KEYWORD2>ftp_get_option</KEYWORD2>\r
+                       <KEYWORD2>ftp_login</KEYWORD2>\r
+                       <KEYWORD2>ftp_mdtm</KEYWORD2>\r
+                       <KEYWORD2>ftp_mkdir</KEYWORD2>\r
+                       <KEYWORD2>ftp_nb_continue</KEYWORD2>\r
+                       <KEYWORD2>ftp_nb_fget</KEYWORD2>\r
+                       <KEYWORD2>ftp_nb_fput</KEYWORD2>\r
+                       <KEYWORD2>ftp_nb_get</KEYWORD2>\r
+                       <KEYWORD2>ftp_nb_put</KEYWORD2>\r
+                       <KEYWORD2>ftp_nlist</KEYWORD2>\r
+                       <KEYWORD2>ftp_pasv</KEYWORD2>\r
+                       <KEYWORD2>ftp_put</KEYWORD2>\r
+                       <KEYWORD2>ftp_pwd</KEYWORD2>\r
+                       <KEYWORD2>ftp_quit</KEYWORD2>\r
+                       <KEYWORD2>ftp_raw</KEYWORD2>\r
+                       <KEYWORD2>ftp_rawlist</KEYWORD2>\r
+                       <KEYWORD2>ftp_rename</KEYWORD2>\r
+                       <KEYWORD2>ftp_rmdir</KEYWORD2>\r
+                       <KEYWORD2>ftp_set_option</KEYWORD2>\r
+                       <KEYWORD2>ftp_site</KEYWORD2>\r
+                       <KEYWORD2>ftp_size</KEYWORD2>\r
+                       <KEYWORD2>ftp_ssl_connect</KEYWORD2>\r
+                       <KEYWORD2>ftp_systype</KEYWORD2>\r
+                       <KEYWORD2>ftruncate</KEYWORD2>\r
+                       <KEYWORD2>ftstat</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>func_get_arg</KEYWORD2>\r
+                       <KEYWORD2>func_get_args</KEYWORD2>\r
+                       <KEYWORD2>func_num_args</KEYWORD2>\r
+                       <KEYWORD2>function_exists</KEYWORD2>\r
+                       <KEYWORD2>fwrite</KEYWORD2>\r
+                       <KEYWORD2>gd_info</KEYWORD2>\r
+                       <KEYWORD2>get</KEYWORD2> <!-- memcache -->\r
+                       <KEYWORD2>get_attr</KEYWORD2> <!-- tidy_node -->\r
+                       <KEYWORD2>get_attribute</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>get_attribute_node</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>get_browser</KEYWORD2>\r
+                       <KEYWORD2>get_cfg_var</KEYWORD2>\r
+                       <KEYWORD2>get_class</KEYWORD2>\r
+                       <KEYWORD2>get_class_methods</KEYWORD2>\r
+                       <KEYWORD2>get_class_vars</KEYWORD2>\r
+                       <KEYWORD2>get_content</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>get_current_user</KEYWORD2>\r
+                       <KEYWORD2>get_declared_classes</KEYWORD2>\r
+                       <KEYWORD2>get_declared_interfaces</KEYWORD2>\r
+                       <KEYWORD2>get_defined_constants</KEYWORD2>\r
+                       <KEYWORD2>get_defined_functions</KEYWORD2>\r
+                       <KEYWORD2>get_defined_vars</KEYWORD2>\r
+                       <KEYWORD2>get_element_by_id</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>get_elements_by_tagname</KEYWORD2> <!-- domdocument, domelement -->\r
+                       <KEYWORD2>get_extension_funcs</KEYWORD2>\r
+                       <KEYWORD2>get_headers</KEYWORD2>\r
+                       <KEYWORD2>get_html_translation_table</KEYWORD2>\r
+                       <KEYWORD2>get_include_path</KEYWORD2>\r
+                       <KEYWORD2>get_included_files</KEYWORD2>\r
+                       <KEYWORD2>get_loaded_extensions</KEYWORD2>\r
+                       <KEYWORD2>get_magic_quotes_gpc</KEYWORD2>\r
+                       <KEYWORD2>get_magic_quotes_runtime</KEYWORD2>\r
+                       <KEYWORD2>get_meta_tags</KEYWORD2>\r
+                       <KEYWORD2>get_nodes</KEYWORD2> <!-- tidy_node -->\r
+                       <KEYWORD2>get_object_vars</KEYWORD2>\r
+                       <KEYWORD2>get_parent_class</KEYWORD2>\r
+                       <KEYWORD2>get_required_files</KEYWORD2>\r
+                       <KEYWORD2>get_resource_type</KEYWORD2>\r
+                       <KEYWORD2>getallheaders</KEYWORD2>\r
+                       <KEYWORD2>getatime</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>getattr</KEYWORD2> <!-- rar -->\r
+                       <KEYWORD2>getattribute</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>getattributenode</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>getattributenodens</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>getattributens</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>getbuffering</KEYWORD2> <!-- lob -->\r
+                       <KEYWORD2>getchildren</KEYWORD2> <!-- cachingrecursiveiterator, directoryiterator, parentiterator, recursivedirectoryiterator, simplexmliterator -->\r
+                       <KEYWORD2>getcrc</KEYWORD2> <!-- rar -->\r
+                       <KEYWORD2>getctime</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>getcwd</KEYWORD2>\r
+                       <KEYWORD2>getdate</KEYWORD2>\r
+                       <KEYWORD2>getdepth</KEYWORD2> <!-- recursiveiteratoriterator -->\r
+                       <KEYWORD2>getelem</KEYWORD2> <!-- collection -->\r
+                       <KEYWORD2>getelementbyid</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>getelementsbytagname</KEYWORD2> <!-- domdocument, domelement -->\r
+                       <KEYWORD2>getelementsbytagnamens</KEYWORD2> <!-- domdocument, domelement -->\r
+                       <KEYWORD2>getenv</KEYWORD2>\r
+                       <KEYWORD2>getfilename</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>getfiletime</KEYWORD2> <!-- rar -->\r
+                       <KEYWORD2>getfunctions</KEYWORD2> <!-- soapserver -->\r
+                       <KEYWORD2>getgroup</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>getheight</KEYWORD2> <!-- swfbitmap -->\r
+                       <KEYWORD2>gethostbyaddr</KEYWORD2>\r
+                       <KEYWORD2>gethostbyname</KEYWORD2>\r
+                       <KEYWORD2>gethostbynamel</KEYWORD2>\r
+                       <KEYWORD2>gethostos</KEYWORD2> <!-- rar -->\r
+                       <KEYWORD2>getimagesize</KEYWORD2>\r
+                       <KEYWORD2>getinneriterator</KEYWORD2> <!-- filteriterator -->\r
+                       <KEYWORD2>getinode</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>getiterator</KEYWORD2> <!-- arrayobject -->\r
+                       <KEYWORD2>getlastmod</KEYWORD2>\r
+                       <KEYWORD2>getmethod</KEYWORD2> <!-- rar -->\r
+                       <KEYWORD2>getmtime</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>getmxrr</KEYWORD2>\r
+                       <KEYWORD2>getmygid</KEYWORD2>\r
+                       <KEYWORD2>getmyinode</KEYWORD2>\r
+                       <KEYWORD2>getmypid</KEYWORD2>\r
+                       <KEYWORD2>getmyuid</KEYWORD2>\r
+                       <KEYWORD2>getname</KEYWORD2> <!-- rar -->\r
+                       <KEYWORD2>getnameditem</KEYWORD2> <!-- domnamednodemap -->\r
+                       <KEYWORD2>getnameditemns</KEYWORD2> <!-- domnamednodemap -->\r
+                       <KEYWORD2>getopt</KEYWORD2>\r
+                       <KEYWORD2>getowner</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>getpackedsize</KEYWORD2> <!-- rar -->\r
+                       <KEYWORD2>getpath</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>getpathname</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>getperms</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>getposition</KEYWORD2> <!-- limititerator -->\r
+                       <KEYWORD2>getprotobyname</KEYWORD2>\r
+                       <KEYWORD2>getprotobynumber</KEYWORD2>\r
+                       <KEYWORD2>getrandmax</KEYWORD2>\r
+                       <KEYWORD2>getrusage</KEYWORD2>\r
+                       <KEYWORD2>getservbyname</KEYWORD2>\r
+                       <KEYWORD2>getservbyport</KEYWORD2>\r
+                       <KEYWORD2>getshape1</KEYWORD2> <!-- swfmorph -->\r
+                       <KEYWORD2>getshape2</KEYWORD2> <!-- swfmorph -->\r
+                       <KEYWORD2>getsize</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>getstats</KEYWORD2> <!-- memcache -->\r
+                       <KEYWORD2>getsubiterator</KEYWORD2> <!-- recursiveiteratoriterator -->\r
+                       <KEYWORD2>gettext</KEYWORD2>\r
+                       <KEYWORD2>gettimeofday</KEYWORD2>\r
+                       <KEYWORD2>gettype</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>getunpackedsize</KEYWORD2> <!-- rar -->\r
+                       <KEYWORD2>getversion</KEYWORD2> <!-- memcache, rar -->\r
+                       <KEYWORD2>getwidth</KEYWORD2> <!-- swfbitmap, swffont, swftext -->\r
+                       <KEYWORD2>glob</KEYWORD2>\r
+                       <KEYWORD2>gmdate</KEYWORD2>\r
+                       <KEYWORD2>gmmktime</KEYWORD2>\r
+                       <KEYWORD2>gmp_abs</KEYWORD2>\r
+                       <KEYWORD2>gmp_add</KEYWORD2>\r
+                       <KEYWORD2>gmp_and</KEYWORD2>\r
+                       <KEYWORD2>gmp_clrbit</KEYWORD2>\r
+                       <KEYWORD2>gmp_cmp</KEYWORD2>\r
+                       <KEYWORD2>gmp_com</KEYWORD2>\r
+                       <KEYWORD2>gmp_div</KEYWORD2>\r
+                       <KEYWORD2>gmp_div_q</KEYWORD2>\r
+                       <KEYWORD2>gmp_div_qr</KEYWORD2>\r
+                       <KEYWORD2>gmp_div_r</KEYWORD2>\r
+                       <KEYWORD2>gmp_divexact</KEYWORD2>\r
+                       <KEYWORD2>gmp_fact</KEYWORD2>\r
+                       <KEYWORD2>gmp_gcd</KEYWORD2>\r
+                       <KEYWORD2>gmp_gcdext</KEYWORD2>\r
+                       <KEYWORD2>gmp_hamdist</KEYWORD2>\r
+                       <KEYWORD2>gmp_init</KEYWORD2>\r
+                       <KEYWORD2>gmp_intval</KEYWORD2>\r
+                       <KEYWORD2>gmp_invert</KEYWORD2>\r
+                       <KEYWORD2>gmp_jacobi</KEYWORD2>\r
+                       <KEYWORD2>gmp_legendre</KEYWORD2>\r
+                       <KEYWORD2>gmp_mod</KEYWORD2>\r
+                       <KEYWORD2>gmp_mul</KEYWORD2>\r
+                       <KEYWORD2>gmp_neg</KEYWORD2>\r
+                       <KEYWORD2>gmp_or</KEYWORD2>\r
+                       <KEYWORD2>gmp_perfect_square</KEYWORD2>\r
+                       <KEYWORD2>gmp_popcount</KEYWORD2>\r
+                       <KEYWORD2>gmp_pow</KEYWORD2>\r
+                       <KEYWORD2>gmp_powm</KEYWORD2>\r
+                       <KEYWORD2>gmp_prob_prime</KEYWORD2>\r
+                       <KEYWORD2>gmp_random</KEYWORD2>\r
+                       <KEYWORD2>gmp_scan0</KEYWORD2>\r
+                       <KEYWORD2>gmp_scan1</KEYWORD2>\r
+                       <KEYWORD2>gmp_setbit</KEYWORD2>\r
+                       <KEYWORD2>gmp_sign</KEYWORD2>\r
+                       <KEYWORD2>gmp_sqrt</KEYWORD2>\r
+                       <KEYWORD2>gmp_sqrtrem</KEYWORD2>\r
+                       <KEYWORD2>gmp_strval</KEYWORD2>\r
+                       <KEYWORD2>gmp_sub</KEYWORD2>\r
+                       <KEYWORD2>gmp_xor</KEYWORD2>\r
+                       <KEYWORD2>gmstrftime</KEYWORD2>\r
+                       <KEYWORD2>gregoriantojd</KEYWORD2>\r
+                       <KEYWORD2>gzclose</KEYWORD2>\r
+                       <KEYWORD2>gzcompress</KEYWORD2>\r
+                       <KEYWORD2>gzdeflate</KEYWORD2>\r
+                       <KEYWORD2>gzencode</KEYWORD2>\r
+                       <KEYWORD2>gzeof</KEYWORD2>\r
+                       <KEYWORD2>gzfile</KEYWORD2>\r
+                       <KEYWORD2>gzgetc</KEYWORD2>\r
+                       <KEYWORD2>gzgets</KEYWORD2>\r
+                       <KEYWORD2>gzgetss</KEYWORD2>\r
+                       <KEYWORD2>gzinflate</KEYWORD2>\r
+                       <KEYWORD2>gzopen</KEYWORD2>\r
+                       <KEYWORD2>gzpassthru</KEYWORD2>\r
+                       <KEYWORD2>gzputs</KEYWORD2>\r
+                       <KEYWORD2>gzread</KEYWORD2>\r
+                       <KEYWORD2>gzrewind</KEYWORD2>\r
+                       <KEYWORD2>gzseek</KEYWORD2>\r
+                       <KEYWORD2>gztell</KEYWORD2>\r
+                       <KEYWORD2>gzuncompress</KEYWORD2>\r
+                       <KEYWORD2>gzwrite</KEYWORD2>\r
+                       <KEYWORD2>handle</KEYWORD2> <!-- soapserver -->\r
+                       <KEYWORD2>has_attribute</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>has_attributes</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>has_child_nodes</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>hasattribute</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>hasattributens</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>hasattributes</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>haschildnodes</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>haschildren</KEYWORD2> <!-- cachingrecursiveiterator, parentiterator, recursivedirectoryiterator, simplexmliterator, tidy_node -->\r
+                       <KEYWORD2>hasfeature</KEYWORD2> <!-- domimplementation -->\r
+                       <KEYWORD2>hasnext</KEYWORD2> <!-- cachingiterator -->\r
+                       <KEYWORD2>hassiblings</KEYWORD2> <!-- tidy_node -->\r
+                       <KEYWORD2>header</KEYWORD2>\r
+                       <KEYWORD2>headers_list</KEYWORD2>\r
+                       <KEYWORD2>headers_sent</KEYWORD2>\r
+                       <KEYWORD2>hebrev</KEYWORD2>\r
+                       <KEYWORD2>hebrevc</KEYWORD2>\r
+                       <KEYWORD2>hexdec</KEYWORD2>\r
+                       <KEYWORD2>highlight_file</KEYWORD2>\r
+                       <KEYWORD2>highlight_string</KEYWORD2>\r
+                       <KEYWORD2>html_dump_mem</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>html_entity_decode</KEYWORD2>\r
+                       <KEYWORD2>htmlentities</KEYWORD2>\r
+                       <KEYWORD2>htmlspecialchars</KEYWORD2>\r
+                       <KEYWORD2>http_build_query</KEYWORD2>\r
+                       <KEYWORD2>hw_array2objrec</KEYWORD2>\r
+                       <KEYWORD2>hw_changeobject</KEYWORD2>\r
+                       <KEYWORD2>hw_children</KEYWORD2>\r
+                       <KEYWORD2>hw_childrenobj</KEYWORD2>\r
+                       <KEYWORD2>hw_close</KEYWORD2>\r
+                       <KEYWORD2>hw_connect</KEYWORD2>\r
+                       <KEYWORD2>hw_connection_info</KEYWORD2>\r
+                       <KEYWORD2>hw_cp</KEYWORD2>\r
+                       <KEYWORD2>hw_deleteobject</KEYWORD2>\r
+                       <KEYWORD2>hw_docbyanchor</KEYWORD2>\r
+                       <KEYWORD2>hw_docbyanchorobj</KEYWORD2>\r
+                       <KEYWORD2>hw_document_attributes</KEYWORD2>\r
+                       <KEYWORD2>hw_document_bodytag</KEYWORD2>\r
+                       <KEYWORD2>hw_document_content</KEYWORD2>\r
+                       <KEYWORD2>hw_document_setcontent</KEYWORD2>\r
+                       <KEYWORD2>hw_document_size</KEYWORD2>\r
+                       <KEYWORD2>hw_dummy</KEYWORD2>\r
+                       <KEYWORD2>hw_edittext</KEYWORD2>\r
+                       <KEYWORD2>hw_error</KEYWORD2>\r
+                       <KEYWORD2>hw_errormsg</KEYWORD2>\r
+                       <KEYWORD2>hw_free_document</KEYWORD2>\r
+                       <KEYWORD2>hw_getanchors</KEYWORD2>\r
+                       <KEYWORD2>hw_getanchorsobj</KEYWORD2>\r
+                       <KEYWORD2>hw_getandlock</KEYWORD2>\r
+                       <KEYWORD2>hw_getchildcoll</KEYWORD2>\r
+                       <KEYWORD2>hw_getchildcollobj</KEYWORD2>\r
+                       <KEYWORD2>hw_getchilddoccoll</KEYWORD2>\r
+                       <KEYWORD2>hw_getchilddoccollobj</KEYWORD2>\r
+                       <KEYWORD2>hw_getobject</KEYWORD2>\r
+                       <KEYWORD2>hw_getobjectbyquery</KEYWORD2>\r
+                       <KEYWORD2>hw_getobjectbyquerycoll</KEYWORD2>\r
+                       <KEYWORD2>hw_getobjectbyquerycollobj</KEYWORD2>\r
+                       <KEYWORD2>hw_getobjectbyqueryobj</KEYWORD2>\r
+                       <KEYWORD2>hw_getparents</KEYWORD2>\r
+                       <KEYWORD2>hw_getparentsobj</KEYWORD2>\r
+                       <KEYWORD2>hw_getrellink</KEYWORD2>\r
+                       <KEYWORD2>hw_getremote</KEYWORD2>\r
+                       <KEYWORD2>hw_getremotechildren</KEYWORD2>\r
+                       <KEYWORD2>hw_getsrcbydestobj</KEYWORD2>\r
+                       <KEYWORD2>hw_gettext</KEYWORD2>\r
+                       <KEYWORD2>hw_getusername</KEYWORD2>\r
+                       <KEYWORD2>hw_identify</KEYWORD2>\r
+                       <KEYWORD2>hw_incollections</KEYWORD2>\r
+                       <KEYWORD2>hw_info</KEYWORD2>\r
+                       <KEYWORD2>hw_inscoll</KEYWORD2>\r
+                       <KEYWORD2>hw_insdoc</KEYWORD2>\r
+                       <KEYWORD2>hw_insertanchors</KEYWORD2>\r
+                       <KEYWORD2>hw_insertdocument</KEYWORD2>\r
+                       <KEYWORD2>hw_insertobject</KEYWORD2>\r
+                       <KEYWORD2>hw_mapid</KEYWORD2>\r
+                       <KEYWORD2>hw_modifyobject</KEYWORD2>\r
+                       <KEYWORD2>hw_mv</KEYWORD2>\r
+                       <KEYWORD2>hw_new_document</KEYWORD2>\r
+                       <KEYWORD2>hw_objrec2array</KEYWORD2>\r
+                       <KEYWORD2>hw_output_document</KEYWORD2>\r
+                       <KEYWORD2>hw_pconnect</KEYWORD2>\r
+                       <KEYWORD2>hw_pipedocument</KEYWORD2>\r
+                       <KEYWORD2>hw_root</KEYWORD2>\r
+                       <KEYWORD2>hw_setlinkroot</KEYWORD2>\r
+                       <KEYWORD2>hw_stat</KEYWORD2>\r
+                       <KEYWORD2>hw_unlock</KEYWORD2>\r
+                       <KEYWORD2>hw_who</KEYWORD2>\r
+                       <KEYWORD2>hwapi_hgcsp</KEYWORD2>\r
+                       <KEYWORD2>hwstat</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>hypot</KEYWORD2>\r
+                       <KEYWORD2>ibase_add_user</KEYWORD2>\r
+                       <KEYWORD2>ibase_affected_rows</KEYWORD2>\r
+                       <KEYWORD2>ibase_backup</KEYWORD2>\r
+                       <KEYWORD2>ibase_blob_add</KEYWORD2>\r
+                       <KEYWORD2>ibase_blob_cancel</KEYWORD2>\r
+                       <KEYWORD2>ibase_blob_close</KEYWORD2>\r
+                       <KEYWORD2>ibase_blob_create</KEYWORD2>\r
+                       <KEYWORD2>ibase_blob_echo</KEYWORD2>\r
+                       <KEYWORD2>ibase_blob_get</KEYWORD2>\r
+                       <KEYWORD2>ibase_blob_import</KEYWORD2>\r
+                       <KEYWORD2>ibase_blob_info</KEYWORD2>\r
+                       <KEYWORD2>ibase_blob_open</KEYWORD2>\r
+                       <KEYWORD2>ibase_close</KEYWORD2>\r
+                       <KEYWORD2>ibase_commit</KEYWORD2>\r
+                       <KEYWORD2>ibase_commit_ret</KEYWORD2>\r
+                       <KEYWORD2>ibase_connect</KEYWORD2>\r
+                       <KEYWORD2>ibase_db_info</KEYWORD2>\r
+                       <KEYWORD2>ibase_delete_user</KEYWORD2>\r
+                       <KEYWORD2>ibase_drop_db</KEYWORD2>\r
+                       <KEYWORD2>ibase_errcode</KEYWORD2>\r
+                       <KEYWORD2>ibase_errmsg</KEYWORD2>\r
+                       <KEYWORD2>ibase_execute</KEYWORD2>\r
+                       <KEYWORD2>ibase_fetch_assoc</KEYWORD2>\r
+                       <KEYWORD2>ibase_fetch_object</KEYWORD2>\r
+                       <KEYWORD2>ibase_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>ibase_field_info</KEYWORD2>\r
+                       <KEYWORD2>ibase_free_event_handler</KEYWORD2>\r
+                       <KEYWORD2>ibase_free_query</KEYWORD2>\r
+                       <KEYWORD2>ibase_free_result</KEYWORD2>\r
+                       <KEYWORD2>ibase_gen_id</KEYWORD2>\r
+                       <KEYWORD2>ibase_maintain_db</KEYWORD2>\r
+                       <KEYWORD2>ibase_modify_user</KEYWORD2>\r
+                       <KEYWORD2>ibase_name_result</KEYWORD2>\r
+                       <KEYWORD2>ibase_num_fields</KEYWORD2>\r
+                       <KEYWORD2>ibase_num_params</KEYWORD2>\r
+                       <KEYWORD2>ibase_param_info</KEYWORD2>\r
+                       <KEYWORD2>ibase_pconnect</KEYWORD2>\r
+                       <KEYWORD2>ibase_prepare</KEYWORD2>\r
+                       <KEYWORD2>ibase_query</KEYWORD2>\r
+                       <KEYWORD2>ibase_restore</KEYWORD2>\r
+                       <KEYWORD2>ibase_rollback</KEYWORD2>\r
+                       <KEYWORD2>ibase_rollback_ret</KEYWORD2>\r
+                       <KEYWORD2>ibase_server_info</KEYWORD2>\r
+                       <KEYWORD2>ibase_service_attach</KEYWORD2>\r
+                       <KEYWORD2>ibase_service_detach</KEYWORD2>\r
+                       <KEYWORD2>ibase_set_event_handler</KEYWORD2>\r
+                       <KEYWORD2>ibase_timefmt</KEYWORD2>\r
+                       <KEYWORD2>ibase_trans</KEYWORD2>\r
+                       <KEYWORD2>ibase_wait_event</KEYWORD2>\r
+                       <KEYWORD2>iconv</KEYWORD2>\r
+                       <KEYWORD2>iconv_get_encoding</KEYWORD2>\r
+                       <KEYWORD2>iconv_mime_decode</KEYWORD2>\r
+                       <KEYWORD2>iconv_mime_decode_headers</KEYWORD2>\r
+                       <KEYWORD2>iconv_mime_encode</KEYWORD2>\r
+                       <KEYWORD2>iconv_set_encoding</KEYWORD2>\r
+                       <KEYWORD2>iconv_strlen</KEYWORD2>\r
+                       <KEYWORD2>iconv_strpos</KEYWORD2>\r
+                       <KEYWORD2>iconv_strrpos</KEYWORD2>\r
+                       <KEYWORD2>iconv_substr</KEYWORD2>\r
+                       <KEYWORD2>id3_get_genre_id</KEYWORD2>\r
+                       <KEYWORD2>id3_get_genre_list</KEYWORD2>\r
+                       <KEYWORD2>id3_get_genre_name</KEYWORD2>\r
+                       <KEYWORD2>id3_get_tag</KEYWORD2>\r
+                       <KEYWORD2>id3_get_version</KEYWORD2>\r
+                       <KEYWORD2>id3_remove_tag</KEYWORD2>\r
+                       <KEYWORD2>id3_set_tag</KEYWORD2>\r
+                       <KEYWORD2>idate</KEYWORD2>\r
+                       <KEYWORD2>identify</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>ifx_affected_rows</KEYWORD2>\r
+                       <KEYWORD2>ifx_blobinfile_mode</KEYWORD2>\r
+                       <KEYWORD2>ifx_byteasvarchar</KEYWORD2>\r
+                       <KEYWORD2>ifx_close</KEYWORD2>\r
+                       <KEYWORD2>ifx_connect</KEYWORD2>\r
+                       <KEYWORD2>ifx_copy_blob</KEYWORD2>\r
+                       <KEYWORD2>ifx_create_blob</KEYWORD2>\r
+                       <KEYWORD2>ifx_create_char</KEYWORD2>\r
+                       <KEYWORD2>ifx_do</KEYWORD2>\r
+                       <KEYWORD2>ifx_error</KEYWORD2>\r
+                       <KEYWORD2>ifx_errormsg</KEYWORD2>\r
+                       <KEYWORD2>ifx_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>ifx_fieldproperties</KEYWORD2>\r
+                       <KEYWORD2>ifx_fieldtypes</KEYWORD2>\r
+                       <KEYWORD2>ifx_free_blob</KEYWORD2>\r
+                       <KEYWORD2>ifx_free_char</KEYWORD2>\r
+                       <KEYWORD2>ifx_free_result</KEYWORD2>\r
+                       <KEYWORD2>ifx_get_blob</KEYWORD2>\r
+                       <KEYWORD2>ifx_get_char</KEYWORD2>\r
+                       <KEYWORD2>ifx_getsqlca</KEYWORD2>\r
+                       <KEYWORD2>ifx_htmltbl_result</KEYWORD2>\r
+                       <KEYWORD2>ifx_nullformat</KEYWORD2>\r
+                       <KEYWORD2>ifx_num_fields</KEYWORD2>\r
+                       <KEYWORD2>ifx_num_rows</KEYWORD2>\r
+                       <KEYWORD2>ifx_pconnect</KEYWORD2>\r
+                       <KEYWORD2>ifx_prepare</KEYWORD2>\r
+                       <KEYWORD2>ifx_query</KEYWORD2>\r
+                       <KEYWORD2>ifx_textasvarchar</KEYWORD2>\r
+                       <KEYWORD2>ifx_update_blob</KEYWORD2>\r
+                       <KEYWORD2>ifx_update_char</KEYWORD2>\r
+                       <KEYWORD2>ifxus_close_slob</KEYWORD2>\r
+                       <KEYWORD2>ifxus_create_slob</KEYWORD2>\r
+                       <KEYWORD2>ifxus_free_slob</KEYWORD2>\r
+                       <KEYWORD2>ifxus_open_slob</KEYWORD2>\r
+                       <KEYWORD2>ifxus_read_slob</KEYWORD2>\r
+                       <KEYWORD2>ifxus_seek_slob</KEYWORD2>\r
+                       <KEYWORD2>ifxus_tell_slob</KEYWORD2>\r
+                       <KEYWORD2>ifxus_write_slob</KEYWORD2>\r
+                       <KEYWORD2>ignore_user_abort</KEYWORD2>\r
+                       <KEYWORD2>image2wbmp</KEYWORD2>\r
+                       <KEYWORD2>image_type_to_extension</KEYWORD2>\r
+                       <KEYWORD2>image_type_to_mime_type</KEYWORD2>\r
+                       <KEYWORD2>imagealphablending</KEYWORD2>\r
+                       <KEYWORD2>imageantialias</KEYWORD2>\r
+                       <KEYWORD2>imagearc</KEYWORD2>\r
+                       <KEYWORD2>imagechar</KEYWORD2>\r
+                       <KEYWORD2>imagecharup</KEYWORD2>\r
+                       <KEYWORD2>imagecolorallocate</KEYWORD2>\r
+                       <KEYWORD2>imagecolorallocatealpha</KEYWORD2>\r
+                       <KEYWORD2>imagecolorat</KEYWORD2>\r
+                       <KEYWORD2>imagecolorclosest</KEYWORD2>\r
+                       <KEYWORD2>imagecolorclosestalpha</KEYWORD2>\r
+                       <KEYWORD2>imagecolorclosesthwb</KEYWORD2>\r
+                       <KEYWORD2>imagecolordeallocate</KEYWORD2>\r
+                       <KEYWORD2>imagecolorexact</KEYWORD2>\r
+                       <KEYWORD2>imagecolorexactalpha</KEYWORD2>\r
+                       <KEYWORD2>imagecolormatch</KEYWORD2>\r
+                       <KEYWORD2>imagecolorresolve</KEYWORD2>\r
+                       <KEYWORD2>imagecolorresolvealpha</KEYWORD2>\r
+                       <KEYWORD2>imagecolorset</KEYWORD2>\r
+                       <KEYWORD2>imagecolorsforindex</KEYWORD2>\r
+                       <KEYWORD2>imagecolorstotal</KEYWORD2>\r
+                       <KEYWORD2>imagecolortransparent</KEYWORD2>\r
+                       <KEYWORD2>imagecopy</KEYWORD2>\r
+                       <KEYWORD2>imagecopymerge</KEYWORD2>\r
+                       <KEYWORD2>imagecopymergegray</KEYWORD2>\r
+                       <KEYWORD2>imagecopyresampled</KEYWORD2>\r
+                       <KEYWORD2>imagecopyresized</KEYWORD2>\r
+                       <KEYWORD2>imagecreate</KEYWORD2>\r
+                       <KEYWORD2>imagecreatefromgd</KEYWORD2>\r
+                       <KEYWORD2>imagecreatefromgd2</KEYWORD2>\r
+                       <KEYWORD2>imagecreatefromgd2part</KEYWORD2>\r
+                       <KEYWORD2>imagecreatefromgif</KEYWORD2>\r
+                       <KEYWORD2>imagecreatefromjpeg</KEYWORD2>\r
+                       <KEYWORD2>imagecreatefrompng</KEYWORD2>\r
+                       <KEYWORD2>imagecreatefromstring</KEYWORD2>\r
+                       <KEYWORD2>imagecreatefromwbmp</KEYWORD2>\r
+                       <KEYWORD2>imagecreatefromxbm</KEYWORD2>\r
+                       <KEYWORD2>imagecreatefromxpm</KEYWORD2>\r
+                       <KEYWORD2>imagecreatetruecolor</KEYWORD2>\r
+                       <KEYWORD2>imagedashedline</KEYWORD2>\r
+                       <KEYWORD2>imagedestroy</KEYWORD2>\r
+                       <KEYWORD2>imageellipse</KEYWORD2>\r
+                       <KEYWORD2>imagefill</KEYWORD2>\r
+                       <KEYWORD2>imagefilledarc</KEYWORD2>\r
+                       <KEYWORD2>imagefilledellipse</KEYWORD2>\r
+                       <KEYWORD2>imagefilledpolygon</KEYWORD2>\r
+                       <KEYWORD2>imagefilledrectangle</KEYWORD2>\r
+                       <KEYWORD2>imagefilltoborder</KEYWORD2>\r
+                       <KEYWORD2>imagefilter</KEYWORD2>\r
+                       <KEYWORD2>imagefontheight</KEYWORD2>\r
+                       <KEYWORD2>imagefontwidth</KEYWORD2>\r
+                       <KEYWORD2>imageftbbox</KEYWORD2>\r
+                       <KEYWORD2>imagefttext</KEYWORD2>\r
+                       <KEYWORD2>imagegammacorrect</KEYWORD2>\r
+                       <KEYWORD2>imagegd</KEYWORD2>\r
+                       <KEYWORD2>imagegd2</KEYWORD2>\r
+                       <KEYWORD2>imagegif</KEYWORD2>\r
+                       <KEYWORD2>imageinterlace</KEYWORD2>\r
+                       <KEYWORD2>imageistruecolor</KEYWORD2>\r
+                       <KEYWORD2>imagejpeg</KEYWORD2>\r
+                       <KEYWORD2>imagelayereffect</KEYWORD2>\r
+                       <KEYWORD2>imageline</KEYWORD2>\r
+                       <KEYWORD2>imageloadfont</KEYWORD2>\r
+                       <KEYWORD2>imagepalettecopy</KEYWORD2>\r
+                       <KEYWORD2>imagepng</KEYWORD2>\r
+                       <KEYWORD2>imagepolygon</KEYWORD2>\r
+                       <KEYWORD2>imagepsbbox</KEYWORD2>\r
+                       <KEYWORD2>imagepscopyfont</KEYWORD2>\r
+                       <KEYWORD2>imagepsencodefont</KEYWORD2>\r
+                       <KEYWORD2>imagepsextendfont</KEYWORD2>\r
+                       <KEYWORD2>imagepsfreefont</KEYWORD2>\r
+                       <KEYWORD2>imagepsloadfont</KEYWORD2>\r
+                       <KEYWORD2>imagepsslantfont</KEYWORD2>\r
+                       <KEYWORD2>imagepstext</KEYWORD2>\r
+                       <KEYWORD2>imagerectangle</KEYWORD2>\r
+                       <KEYWORD2>imagerotate</KEYWORD2>\r
+                       <KEYWORD2>imagesavealpha</KEYWORD2>\r
+                       <KEYWORD2>imagesetbrush</KEYWORD2>\r
+                       <KEYWORD2>imagesetpixel</KEYWORD2>\r
+                       <KEYWORD2>imagesetstyle</KEYWORD2>\r
+                       <KEYWORD2>imagesetthickness</KEYWORD2>\r
+                       <KEYWORD2>imagesettile</KEYWORD2>\r
+                       <KEYWORD2>imagestring</KEYWORD2>\r
+                       <KEYWORD2>imagestringup</KEYWORD2>\r
+                       <KEYWORD2>imagesx</KEYWORD2>\r
+                       <KEYWORD2>imagesy</KEYWORD2>\r
+                       <KEYWORD2>imagetruecolortopalette</KEYWORD2>\r
+                       <KEYWORD2>imagettfbbox</KEYWORD2>\r
+                       <KEYWORD2>imagettftext</KEYWORD2>\r
+                       <KEYWORD2>imagetypes</KEYWORD2>\r
+                       <KEYWORD2>imagewbmp</KEYWORD2>\r
+                       <KEYWORD2>imagexbm</KEYWORD2>\r
+                       <KEYWORD2>imap_8bit</KEYWORD2>\r
+                       <KEYWORD2>imap_alerts</KEYWORD2>\r
+                       <KEYWORD2>imap_append</KEYWORD2>\r
+                       <KEYWORD2>imap_base64</KEYWORD2>\r
+                       <KEYWORD2>imap_binary</KEYWORD2>\r
+                       <KEYWORD2>imap_body</KEYWORD2>\r
+                       <KEYWORD2>imap_bodystruct</KEYWORD2>\r
+                       <KEYWORD2>imap_check</KEYWORD2>\r
+                       <KEYWORD2>imap_clearflag_full</KEYWORD2>\r
+                       <KEYWORD2>imap_close</KEYWORD2>\r
+                       <KEYWORD2>imap_createmailbox</KEYWORD2>\r
+                       <KEYWORD2>imap_delete</KEYWORD2>\r
+                       <KEYWORD2>imap_deletemailbox</KEYWORD2>\r
+                       <KEYWORD2>imap_errors</KEYWORD2>\r
+                       <KEYWORD2>imap_expunge</KEYWORD2>\r
+                       <KEYWORD2>imap_fetch_overview</KEYWORD2>\r
+                       <KEYWORD2>imap_fetchbody</KEYWORD2>\r
+                       <KEYWORD2>imap_fetchheader</KEYWORD2>\r
+                       <KEYWORD2>imap_fetchstructure</KEYWORD2>\r
+                       <KEYWORD2>imap_get_quota</KEYWORD2>\r
+                       <KEYWORD2>imap_get_quotaroot</KEYWORD2>\r
+                       <KEYWORD2>imap_getacl</KEYWORD2>\r
+                       <KEYWORD2>imap_getmailboxes</KEYWORD2>\r
+                       <KEYWORD2>imap_getsubscribed</KEYWORD2>\r
+                       <KEYWORD2>imap_header</KEYWORD2>\r
+                       <KEYWORD2>imap_headerinfo</KEYWORD2>\r
+                       <KEYWORD2>imap_headers</KEYWORD2>\r
+                       <KEYWORD2>imap_last_error</KEYWORD2>\r
+                       <KEYWORD2>imap_list</KEYWORD2>\r
+                       <KEYWORD2>imap_listmailbox</KEYWORD2>\r
+                       <KEYWORD2>imap_listscan</KEYWORD2>\r
+                       <KEYWORD2>imap_listsubscribed</KEYWORD2>\r
+                       <KEYWORD2>imap_lsub</KEYWORD2>\r
+                       <KEYWORD2>imap_mail</KEYWORD2>\r
+                       <KEYWORD2>imap_mail_compose</KEYWORD2>\r
+                       <KEYWORD2>imap_mail_copy</KEYWORD2>\r
+                       <KEYWORD2>imap_mail_move</KEYWORD2>\r
+                       <KEYWORD2>imap_mailboxmsginfo</KEYWORD2>\r
+                       <KEYWORD2>imap_mime_header_decode</KEYWORD2>\r
+                       <KEYWORD2>imap_msgno</KEYWORD2>\r
+                       <KEYWORD2>imap_num_msg</KEYWORD2>\r
+                       <KEYWORD2>imap_num_recent</KEYWORD2>\r
+                       <KEYWORD2>imap_open</KEYWORD2>\r
+                       <KEYWORD2>imap_ping</KEYWORD2>\r
+                       <KEYWORD2>imap_qprint</KEYWORD2>\r
+                       <KEYWORD2>imap_renamemailbox</KEYWORD2>\r
+                       <KEYWORD2>imap_reopen</KEYWORD2>\r
+                       <KEYWORD2>imap_rfc822_parse_adrlist</KEYWORD2>\r
+                       <KEYWORD2>imap_rfc822_parse_headers</KEYWORD2>\r
+                       <KEYWORD2>imap_rfc822_write_address</KEYWORD2>\r
+                       <KEYWORD2>imap_scanmailbox</KEYWORD2>\r
+                       <KEYWORD2>imap_search</KEYWORD2>\r
+                       <KEYWORD2>imap_set_quota</KEYWORD2>\r
+                       <KEYWORD2>imap_setacl</KEYWORD2>\r
+                       <KEYWORD2>imap_setflag_full</KEYWORD2>\r
+                       <KEYWORD2>imap_sort</KEYWORD2>\r
+                       <KEYWORD2>imap_status</KEYWORD2>\r
+                       <KEYWORD2>imap_subscribe</KEYWORD2>\r
+                       <KEYWORD2>imap_thread</KEYWORD2>\r
+                       <KEYWORD2>imap_timeout</KEYWORD2>\r
+                       <KEYWORD2>imap_uid</KEYWORD2>\r
+                       <KEYWORD2>imap_undelete</KEYWORD2>\r
+                       <KEYWORD2>imap_unsubscribe</KEYWORD2>\r
+                       <KEYWORD2>imap_utf7_decode</KEYWORD2>\r
+                       <KEYWORD2>imap_utf7_encode</KEYWORD2>\r
+                       <KEYWORD2>imap_utf8</KEYWORD2>\r
+                       <KEYWORD2>implode</KEYWORD2>\r
+                       <KEYWORD2>import</KEYWORD2> <!-- lob -->\r
+                       <KEYWORD2>import_request_variables</KEYWORD2>\r
+                       <KEYWORD2>importnode</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>in_array</KEYWORD2>\r
+                       <KEYWORD2>increment</KEYWORD2> <!-- memcache -->\r
+                       <KEYWORD2>inet_ntop</KEYWORD2>\r
+                       <KEYWORD2>inet_pton</KEYWORD2>\r
+                       <KEYWORD2>info</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>ingres_autocommit</KEYWORD2>\r
+                       <KEYWORD2>ingres_close</KEYWORD2>\r
+                       <KEYWORD2>ingres_commit</KEYWORD2>\r
+                       <KEYWORD2>ingres_connect</KEYWORD2>\r
+                       <KEYWORD2>ingres_fetch_array</KEYWORD2>\r
+                       <KEYWORD2>ingres_fetch_object</KEYWORD2>\r
+                       <KEYWORD2>ingres_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>ingres_field_length</KEYWORD2>\r
+                       <KEYWORD2>ingres_field_name</KEYWORD2>\r
+                       <KEYWORD2>ingres_field_nullable</KEYWORD2>\r
+                       <KEYWORD2>ingres_field_precision</KEYWORD2>\r
+                       <KEYWORD2>ingres_field_scale</KEYWORD2>\r
+                       <KEYWORD2>ingres_field_type</KEYWORD2>\r
+                       <KEYWORD2>ingres_num_fields</KEYWORD2>\r
+                       <KEYWORD2>ingres_num_rows</KEYWORD2>\r
+                       <KEYWORD2>ingres_pconnect</KEYWORD2>\r
+                       <KEYWORD2>ingres_query</KEYWORD2>\r
+                       <KEYWORD2>ingres_rollback</KEYWORD2>\r
+                       <KEYWORD2>ini_alter</KEYWORD2>\r
+                       <KEYWORD2>ini_get</KEYWORD2>\r
+                       <KEYWORD2>ini_get_all</KEYWORD2>\r
+                       <KEYWORD2>ini_restore</KEYWORD2>\r
+                       <KEYWORD2>ini_set</KEYWORD2>\r
+                       <KEYWORD2>insert</KEYWORD2> <!-- hw_api, hw_api_object -->\r
+                       <KEYWORD2>insert_before</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>insertanchor</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>insertbefore</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>insertcollection</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>insertdata</KEYWORD2> <!-- domcharacterdata -->\r
+                       <KEYWORD2>insertdocument</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>interface_exists</KEYWORD2>\r
+                       <KEYWORD2>internal_subset</KEYWORD2> <!-- domdocumenttype -->\r
+                       <KEYWORD2>intval</KEYWORD2>\r
+                       <KEYWORD2>ip2long</KEYWORD2>\r
+                       <KEYWORD2>iptcembed</KEYWORD2>\r
+                       <KEYWORD2>iptcparse</KEYWORD2>\r
+                       <KEYWORD2>ircg_channel_mode</KEYWORD2>\r
+                       <KEYWORD2>ircg_disconnect</KEYWORD2>\r
+                       <KEYWORD2>ircg_eval_ecmascript_params</KEYWORD2>\r
+                       <KEYWORD2>ircg_fetch_error_msg</KEYWORD2>\r
+                       <KEYWORD2>ircg_get_username</KEYWORD2>\r
+                       <KEYWORD2>ircg_html_encode</KEYWORD2>\r
+                       <KEYWORD2>ircg_ignore_add</KEYWORD2>\r
+                       <KEYWORD2>ircg_ignore_del</KEYWORD2>\r
+                       <KEYWORD2>ircg_invite</KEYWORD2>\r
+                       <KEYWORD2>ircg_is_conn_alive</KEYWORD2>\r
+                       <KEYWORD2>ircg_join</KEYWORD2>\r
+                       <KEYWORD2>ircg_kick</KEYWORD2>\r
+                       <KEYWORD2>ircg_list</KEYWORD2>\r
+                       <KEYWORD2>ircg_lookup_format_messages</KEYWORD2>\r
+                       <KEYWORD2>ircg_lusers</KEYWORD2>\r
+                       <KEYWORD2>ircg_msg</KEYWORD2>\r
+                       <KEYWORD2>ircg_names</KEYWORD2>\r
+                       <KEYWORD2>ircg_nick</KEYWORD2>\r
+                       <KEYWORD2>ircg_nickname_escape</KEYWORD2>\r
+                       <KEYWORD2>ircg_nickname_unescape</KEYWORD2>\r
+                       <KEYWORD2>ircg_notice</KEYWORD2>\r
+                       <KEYWORD2>ircg_oper</KEYWORD2>\r
+                       <KEYWORD2>ircg_part</KEYWORD2>\r
+                       <KEYWORD2>ircg_pconnect</KEYWORD2>\r
+                       <KEYWORD2>ircg_register_format_messages</KEYWORD2>\r
+                       <KEYWORD2>ircg_set_current</KEYWORD2>\r
+                       <KEYWORD2>ircg_set_file</KEYWORD2>\r
+                       <KEYWORD2>ircg_set_on_die</KEYWORD2>\r
+                       <KEYWORD2>ircg_topic</KEYWORD2>\r
+                       <KEYWORD2>ircg_who</KEYWORD2>\r
+                       <KEYWORD2>ircg_whois</KEYWORD2>\r
+                       <KEYWORD2>is_a</KEYWORD2>\r
+                       <KEYWORD2>is_array</KEYWORD2>\r
+                       <KEYWORD2>is_blank_node</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>is_bool</KEYWORD2>\r
+                       <KEYWORD2>is_callable</KEYWORD2>\r
+                       <KEYWORD2>is_dir</KEYWORD2>\r
+                       <KEYWORD2>is_double</KEYWORD2>\r
+                       <KEYWORD2>is_executable</KEYWORD2>\r
+                       <KEYWORD2>is_file</KEYWORD2>\r
+                       <KEYWORD2>is_finite</KEYWORD2>\r
+                       <KEYWORD2>is_float</KEYWORD2>\r
+                       <KEYWORD2>is_infinite</KEYWORD2>\r
+                       <KEYWORD2>is_int</KEYWORD2>\r
+                       <KEYWORD2>is_integer</KEYWORD2>\r
+                       <KEYWORD2>is_link</KEYWORD2>\r
+                       <KEYWORD2>is_long</KEYWORD2>\r
+                       <KEYWORD2>is_nan</KEYWORD2>\r
+                       <KEYWORD2>is_null</KEYWORD2>\r
+                       <KEYWORD2>is_numeric</KEYWORD2>\r
+                       <KEYWORD2>is_object</KEYWORD2>\r
+                       <KEYWORD2>is_readable</KEYWORD2>\r
+                       <KEYWORD2>is_real</KEYWORD2>\r
+                       <KEYWORD2>is_resource</KEYWORD2>\r
+                       <KEYWORD2>is_scalar</KEYWORD2>\r
+                       <KEYWORD2>is_soap_fault</KEYWORD2>\r
+                       <KEYWORD2>is_string</KEYWORD2>\r
+                       <KEYWORD2>is_subclass_of</KEYWORD2>\r
+                       <KEYWORD2>is_uploaded_file</KEYWORD2>\r
+                       <KEYWORD2>is_writable</KEYWORD2>\r
+                       <KEYWORD2>is_writeable</KEYWORD2>\r
+                       <KEYWORD2>isasp</KEYWORD2> <!-- tidy_node -->\r
+                       <KEYWORD2>iscomment</KEYWORD2> <!-- tidy_node -->\r
+                       <KEYWORD2>isdir</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>isdot</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>isexecutable</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>isfile</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>ishtml</KEYWORD2> <!-- tidy_node -->\r
+                       <KEYWORD2>isid</KEYWORD2> <!-- domattr -->\r
+                       <KEYWORD2>isjste</KEYWORD2> <!-- tidy_node -->\r
+                       <KEYWORD2>islink</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>isphp</KEYWORD2> <!-- tidy_node -->\r
+                       <KEYWORD2>isreadable</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>issamenode</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>issupported</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>istext</KEYWORD2> <!-- tidy_node -->\r
+                       <KEYWORD2>iswhitespaceinelementcontent</KEYWORD2> <!-- domtext -->\r
+                       <KEYWORD2>iswritable</KEYWORD2> <!-- directoryiterator -->\r
+                       <KEYWORD2>isxhtml</KEYWORD2> <!-- tidy_node -->\r
+                       <KEYWORD2>isxml</KEYWORD2> <!-- tidy_node -->\r
+                       <KEYWORD2>item</KEYWORD2> <!-- domnamednodemap, domnodelist -->\r
+                       <KEYWORD2>iterator_count</KEYWORD2>\r
+                       <KEYWORD2>iterator_to_array</KEYWORD2>\r
+                       <KEYWORD2>java_last_exception_clear</KEYWORD2>\r
+                       <KEYWORD2>java_last_exception_get</KEYWORD2>\r
+                       <KEYWORD2>jddayofweek</KEYWORD2>\r
+                       <KEYWORD2>jdmonthname</KEYWORD2>\r
+                       <KEYWORD2>jdtofrench</KEYWORD2>\r
+                       <KEYWORD2>jdtogregorian</KEYWORD2>\r
+                       <KEYWORD2>jdtojewish</KEYWORD2>\r
+                       <KEYWORD2>jdtojulian</KEYWORD2>\r
+                       <KEYWORD2>jdtounix</KEYWORD2>\r
+                       <KEYWORD2>jewishtojd</KEYWORD2>\r
+                       <KEYWORD2>join</KEYWORD2>\r
+                       <KEYWORD2>jpeg2wbmp</KEYWORD2>\r
+                       <KEYWORD2>juliantojd</KEYWORD2>\r
+                       <KEYWORD2>key</KEYWORD2> <!-- arrayiterator, directoryiterator, filteriterator, hw_api_attribute, recursivedirectoryiterator, recursiveiteratoriterator, simplexmliterator -->\r
+                       <KEYWORD2>krsort</KEYWORD2>\r
+                       <KEYWORD2>ksort</KEYWORD2>\r
+                       <KEYWORD2>langdepvalue</KEYWORD2> <!-- hw_api_attribute -->\r
+                       <KEYWORD2>last_child</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>lastinsertid</KEYWORD2> <!-- pdo -->\r
+                       <KEYWORD2>lcg_value</KEYWORD2>\r
+                       <KEYWORD2>ldap_8859_to_t61</KEYWORD2>\r
+                       <KEYWORD2>ldap_add</KEYWORD2>\r
+                       <KEYWORD2>ldap_bind</KEYWORD2>\r
+                       <KEYWORD2>ldap_close</KEYWORD2>\r
+                       <KEYWORD2>ldap_compare</KEYWORD2>\r
+                       <KEYWORD2>ldap_connect</KEYWORD2>\r
+                       <KEYWORD2>ldap_count_entries</KEYWORD2>\r
+                       <KEYWORD2>ldap_delete</KEYWORD2>\r
+                       <KEYWORD2>ldap_dn2ufn</KEYWORD2>\r
+                       <KEYWORD2>ldap_err2str</KEYWORD2>\r
+                       <KEYWORD2>ldap_errno</KEYWORD2>\r
+                       <KEYWORD2>ldap_error</KEYWORD2>\r
+                       <KEYWORD2>ldap_explode_dn</KEYWORD2>\r
+                       <KEYWORD2>ldap_first_attribute</KEYWORD2>\r
+                       <KEYWORD2>ldap_first_entry</KEYWORD2>\r
+                       <KEYWORD2>ldap_first_reference</KEYWORD2>\r
+                       <KEYWORD2>ldap_free_result</KEYWORD2>\r
+                       <KEYWORD2>ldap_get_attributes</KEYWORD2>\r
+                       <KEYWORD2>ldap_get_dn</KEYWORD2>\r
+                       <KEYWORD2>ldap_get_entries</KEYWORD2>\r
+                       <KEYWORD2>ldap_get_option</KEYWORD2>\r
+                       <KEYWORD2>ldap_get_values</KEYWORD2>\r
+                       <KEYWORD2>ldap_get_values_len</KEYWORD2>\r
+                       <KEYWORD2>ldap_list</KEYWORD2>\r
+                       <KEYWORD2>ldap_mod_add</KEYWORD2>\r
+                       <KEYWORD2>ldap_mod_del</KEYWORD2>\r
+                       <KEYWORD2>ldap_mod_replace</KEYWORD2>\r
+                       <KEYWORD2>ldap_modify</KEYWORD2>\r
+                       <KEYWORD2>ldap_next_attribute</KEYWORD2>\r
+                       <KEYWORD2>ldap_next_entry</KEYWORD2>\r
+                       <KEYWORD2>ldap_next_reference</KEYWORD2>\r
+                       <KEYWORD2>ldap_parse_reference</KEYWORD2>\r
+                       <KEYWORD2>ldap_parse_result</KEYWORD2>\r
+                       <KEYWORD2>ldap_read</KEYWORD2>\r
+                       <KEYWORD2>ldap_rename</KEYWORD2>\r
+                       <KEYWORD2>ldap_sasl_bind</KEYWORD2>\r
+                       <KEYWORD2>ldap_search</KEYWORD2>\r
+                       <KEYWORD2>ldap_set_option</KEYWORD2>\r
+                       <KEYWORD2>ldap_set_rebind_proc</KEYWORD2>\r
+                       <KEYWORD2>ldap_sort</KEYWORD2>\r
+                       <KEYWORD2>ldap_start_tls</KEYWORD2>\r
+                       <KEYWORD2>ldap_t61_to_8859</KEYWORD2>\r
+                       <KEYWORD2>ldap_unbind</KEYWORD2>\r
+                       <KEYWORD2>levenshtein</KEYWORD2>\r
+                       <KEYWORD2>link</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>linkinfo</KEYWORD2>\r
+                       <KEYWORD2>load</KEYWORD2> <!-- domdocument, lob -->\r
+                       <KEYWORD2>loadhtml</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>loadhtmlfile</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>loadxml</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>localeconv</KEYWORD2>\r
+                       <KEYWORD2>localtime</KEYWORD2>\r
+                       <KEYWORD2>lock</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>log</KEYWORD2>\r
+                       <KEYWORD2>log10</KEYWORD2>\r
+                       <KEYWORD2>log1p</KEYWORD2>\r
+                       <KEYWORD2>long2ip</KEYWORD2>\r
+                       <KEYWORD2>lookupnamespaceuri</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>lookupprefix</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>lstat</KEYWORD2>\r
+                       <KEYWORD2>ltrim</KEYWORD2>\r
+                       <KEYWORD2>lzf_compress</KEYWORD2>\r
+                       <KEYWORD2>lzf_decompress</KEYWORD2>\r
+                       <KEYWORD2>lzf_optimized_for</KEYWORD2>\r
+                       <KEYWORD2>mail</KEYWORD2>\r
+                       <KEYWORD2>mailparse_determine_best_xfer_encoding</KEYWORD2>\r
+                       <KEYWORD2>mailparse_msg_create</KEYWORD2>\r
+                       <KEYWORD2>mailparse_msg_extract_part</KEYWORD2>\r
+                       <KEYWORD2>mailparse_msg_extract_part_file</KEYWORD2>\r
+                       <KEYWORD2>mailparse_msg_free</KEYWORD2>\r
+                       <KEYWORD2>mailparse_msg_get_part</KEYWORD2>\r
+                       <KEYWORD2>mailparse_msg_get_part_data</KEYWORD2>\r
+                       <KEYWORD2>mailparse_msg_get_structure</KEYWORD2>\r
+                       <KEYWORD2>mailparse_msg_parse</KEYWORD2>\r
+                       <KEYWORD2>mailparse_msg_parse_file</KEYWORD2>\r
+                       <KEYWORD2>mailparse_rfc822_parse_addresses</KEYWORD2>\r
+                       <KEYWORD2>mailparse_stream_encode</KEYWORD2>\r
+                       <KEYWORD2>mailparse_uudecode_all</KEYWORD2>\r
+                       <KEYWORD2>main</KEYWORD2>\r
+                       <KEYWORD2>max</KEYWORD2> <!-- collection -->\r
+                       <KEYWORD2>mb_convert_case</KEYWORD2>\r
+                       <KEYWORD2>mb_convert_encoding</KEYWORD2>\r
+                       <KEYWORD2>mb_convert_kana</KEYWORD2>\r
+                       <KEYWORD2>mb_convert_variables</KEYWORD2>\r
+                       <KEYWORD2>mb_decode_mimeheader</KEYWORD2>\r
+                       <KEYWORD2>mb_decode_numericentity</KEYWORD2>\r
+                       <KEYWORD2>mb_detect_encoding</KEYWORD2>\r
+                       <KEYWORD2>mb_detect_order</KEYWORD2>\r
+                       <KEYWORD2>mb_encode_mimeheader</KEYWORD2>\r
+                       <KEYWORD2>mb_encode_numericentity</KEYWORD2>\r
+                       <KEYWORD2>mb_ereg</KEYWORD2>\r
+                       <KEYWORD2>mb_ereg_match</KEYWORD2>\r
+                       <KEYWORD2>mb_ereg_replace</KEYWORD2>\r
+                       <KEYWORD2>mb_ereg_search</KEYWORD2>\r
+                       <KEYWORD2>mb_ereg_search_getpos</KEYWORD2>\r
+                       <KEYWORD2>mb_ereg_search_getregs</KEYWORD2>\r
+                       <KEYWORD2>mb_ereg_search_init</KEYWORD2>\r
+                       <KEYWORD2>mb_ereg_search_pos</KEYWORD2>\r
+                       <KEYWORD2>mb_ereg_search_regs</KEYWORD2>\r
+                       <KEYWORD2>mb_ereg_search_setpos</KEYWORD2>\r
+                       <KEYWORD2>mb_eregi</KEYWORD2>\r
+                       <KEYWORD2>mb_eregi_replace</KEYWORD2>\r
+                       <KEYWORD2>mb_get_info</KEYWORD2>\r
+                       <KEYWORD2>mb_http_input</KEYWORD2>\r
+                       <KEYWORD2>mb_http_output</KEYWORD2>\r
+                       <KEYWORD2>mb_internal_encoding</KEYWORD2>\r
+                       <KEYWORD2>mb_language</KEYWORD2>\r
+                       <KEYWORD2>mb_list_encodings</KEYWORD2>\r
+                       <KEYWORD2>mb_output_handler</KEYWORD2>\r
+                       <KEYWORD2>mb_parse_str</KEYWORD2>\r
+                       <KEYWORD2>mb_preferred_mime_name</KEYWORD2>\r
+                       <KEYWORD2>mb_regex_encoding</KEYWORD2>\r
+                       <KEYWORD2>mb_regex_set_options</KEYWORD2>\r
+                       <KEYWORD2>mb_send_mail</KEYWORD2>\r
+                       <KEYWORD2>mb_split</KEYWORD2>\r
+                       <KEYWORD2>mb_strcut</KEYWORD2>\r
+                       <KEYWORD2>mb_strimwidth</KEYWORD2>\r
+                       <KEYWORD2>mb_strlen</KEYWORD2>\r
+                       <KEYWORD2>mb_strpos</KEYWORD2>\r
+                       <KEYWORD2>mb_strrpos</KEYWORD2>\r
+                       <KEYWORD2>mb_strtolower</KEYWORD2>\r
+                       <KEYWORD2>mb_strtoupper</KEYWORD2>\r
+                       <KEYWORD2>mb_strwidth</KEYWORD2>\r
+                       <KEYWORD2>mb_substitute_character</KEYWORD2>\r
+                       <KEYWORD2>mb_substr</KEYWORD2>\r
+                       <KEYWORD2>mb_substr_count</KEYWORD2>\r
+                       <KEYWORD2>mcal_append_event</KEYWORD2>\r
+                       <KEYWORD2>mcal_close</KEYWORD2>\r
+                       <KEYWORD2>mcal_create_calendar</KEYWORD2>\r
+                       <KEYWORD2>mcal_date_compare</KEYWORD2>\r
+                       <KEYWORD2>mcal_date_valid</KEYWORD2>\r
+                       <KEYWORD2>mcal_day_of_week</KEYWORD2>\r
+                       <KEYWORD2>mcal_day_of_year</KEYWORD2>\r
+                       <KEYWORD2>mcal_days_in_month</KEYWORD2>\r
+                       <KEYWORD2>mcal_delete_calendar</KEYWORD2>\r
+                       <KEYWORD2>mcal_delete_event</KEYWORD2>\r
+                       <KEYWORD2>mcal_event_add_attribute</KEYWORD2>\r
+                       <KEYWORD2>mcal_event_init</KEYWORD2>\r
+                       <KEYWORD2>mcal_event_set_alarm</KEYWORD2>\r
+                       <KEYWORD2>mcal_event_set_category</KEYWORD2>\r
+                       <KEYWORD2>mcal_event_set_class</KEYWORD2>\r
+                       <KEYWORD2>mcal_event_set_description</KEYWORD2>\r
+                       <KEYWORD2>mcal_event_set_end</KEYWORD2>\r
+                       <KEYWORD2>mcal_event_set_recur_daily</KEYWORD2>\r
+                       <KEYWORD2>mcal_event_set_recur_monthly_mday</KEYWORD2>\r
+                       <KEYWORD2>mcal_event_set_recur_monthly_wday</KEYWORD2>\r
+                       <KEYWORD2>mcal_event_set_recur_none</KEYWORD2>\r
+                       <KEYWORD2>mcal_event_set_recur_weekly</KEYWORD2>\r
+                       <KEYWORD2>mcal_event_set_recur_yearly</KEYWORD2>\r
+                       <KEYWORD2>mcal_event_set_start</KEYWORD2>\r
+                       <KEYWORD2>mcal_event_set_title</KEYWORD2>\r
+                       <KEYWORD2>mcal_expunge</KEYWORD2>\r
+                       <KEYWORD2>mcal_fetch_current_stream_event</KEYWORD2>\r
+                       <KEYWORD2>mcal_fetch_event</KEYWORD2>\r
+                       <KEYWORD2>mcal_is_leap_year</KEYWORD2>\r
+                       <KEYWORD2>mcal_list_alarms</KEYWORD2>\r
+                       <KEYWORD2>mcal_list_events</KEYWORD2>\r
+                       <KEYWORD2>mcal_next_recurrence</KEYWORD2>\r
+                       <KEYWORD2>mcal_open</KEYWORD2>\r
+                       <KEYWORD2>mcal_popen</KEYWORD2>\r
+                       <KEYWORD2>mcal_rename_calendar</KEYWORD2>\r
+                       <KEYWORD2>mcal_reopen</KEYWORD2>\r
+                       <KEYWORD2>mcal_snooze</KEYWORD2>\r
+                       <KEYWORD2>mcal_store_event</KEYWORD2>\r
+                       <KEYWORD2>mcal_time_valid</KEYWORD2>\r
+                       <KEYWORD2>mcal_week_of_year</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_cbc</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_cfb</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_create_iv</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_decrypt</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_ecb</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_enc_get_algorithms_name</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_enc_get_block_size</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_enc_get_iv_size</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_enc_get_key_size</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_enc_get_modes_name</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_enc_get_supported_key_sizes</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_enc_is_block_algorithm</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_enc_is_block_algorithm_mode</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_enc_is_block_mode</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_enc_self_test</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_encrypt</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_generic</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_generic_deinit</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_generic_end</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_generic_init</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_get_block_size</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_get_cipher_name</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_get_iv_size</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_get_key_size</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_list_algorithms</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_list_modes</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_module_close</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_module_get_algo_block_size</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_module_get_algo_key_size</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_module_get_supported_key_sizes</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_module_is_block_algorithm</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_module_is_block_algorithm_mode</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_module_is_block_mode</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_module_open</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_module_self_test</KEYWORD2>\r
+                       <KEYWORD2>mcrypt_ofb</KEYWORD2>\r
+                       <KEYWORD2>mcve_adduser</KEYWORD2>\r
+                       <KEYWORD2>mcve_adduserarg</KEYWORD2>\r
+                       <KEYWORD2>mcve_bt</KEYWORD2>\r
+                       <KEYWORD2>mcve_checkstatus</KEYWORD2>\r
+                       <KEYWORD2>mcve_chkpwd</KEYWORD2>\r
+                       <KEYWORD2>mcve_chngpwd</KEYWORD2>\r
+                       <KEYWORD2>mcve_completeauthorizations</KEYWORD2>\r
+                       <KEYWORD2>mcve_connect</KEYWORD2>\r
+                       <KEYWORD2>mcve_connectionerror</KEYWORD2>\r
+                       <KEYWORD2>mcve_deleteresponse</KEYWORD2>\r
+                       <KEYWORD2>mcve_deletetrans</KEYWORD2>\r
+                       <KEYWORD2>mcve_deleteusersetup</KEYWORD2>\r
+                       <KEYWORD2>mcve_deluser</KEYWORD2>\r
+                       <KEYWORD2>mcve_destroyconn</KEYWORD2>\r
+                       <KEYWORD2>mcve_destroyengine</KEYWORD2>\r
+                       <KEYWORD2>mcve_disableuser</KEYWORD2>\r
+                       <KEYWORD2>mcve_edituser</KEYWORD2>\r
+                       <KEYWORD2>mcve_enableuser</KEYWORD2>\r
+                       <KEYWORD2>mcve_force</KEYWORD2>\r
+                       <KEYWORD2>mcve_getcell</KEYWORD2>\r
+                       <KEYWORD2>mcve_getcellbynum</KEYWORD2>\r
+                       <KEYWORD2>mcve_getcommadelimited</KEYWORD2>\r
+                       <KEYWORD2>mcve_getheader</KEYWORD2>\r
+                       <KEYWORD2>mcve_getuserarg</KEYWORD2>\r
+                       <KEYWORD2>mcve_getuserparam</KEYWORD2>\r
+                       <KEYWORD2>mcve_gft</KEYWORD2>\r
+                       <KEYWORD2>mcve_gl</KEYWORD2>\r
+                       <KEYWORD2>mcve_gut</KEYWORD2>\r
+                       <KEYWORD2>mcve_initconn</KEYWORD2>\r
+                       <KEYWORD2>mcve_initengine</KEYWORD2>\r
+                       <KEYWORD2>mcve_initusersetup</KEYWORD2>\r
+                       <KEYWORD2>mcve_iscommadelimited</KEYWORD2>\r
+                       <KEYWORD2>mcve_liststats</KEYWORD2>\r
+                       <KEYWORD2>mcve_listusers</KEYWORD2>\r
+                       <KEYWORD2>mcve_maxconntimeout</KEYWORD2>\r
+                       <KEYWORD2>mcve_monitor</KEYWORD2>\r
+                       <KEYWORD2>mcve_numcolumns</KEYWORD2>\r
+                       <KEYWORD2>mcve_numrows</KEYWORD2>\r
+                       <KEYWORD2>mcve_override</KEYWORD2>\r
+                       <KEYWORD2>mcve_parsecommadelimited</KEYWORD2>\r
+                       <KEYWORD2>mcve_ping</KEYWORD2>\r
+                       <KEYWORD2>mcve_preauth</KEYWORD2>\r
+                       <KEYWORD2>mcve_preauthcompletion</KEYWORD2>\r
+                       <KEYWORD2>mcve_qc</KEYWORD2>\r
+                       <KEYWORD2>mcve_responseparam</KEYWORD2>\r
+                       <KEYWORD2>mcve_return</KEYWORD2>\r
+                       <KEYWORD2>mcve_returncode</KEYWORD2>\r
+                       <KEYWORD2>mcve_returnstatus</KEYWORD2>\r
+                       <KEYWORD2>mcve_sale</KEYWORD2>\r
+                       <KEYWORD2>mcve_setblocking</KEYWORD2>\r
+                       <KEYWORD2>mcve_setdropfile</KEYWORD2>\r
+                       <KEYWORD2>mcve_setip</KEYWORD2>\r
+                       <KEYWORD2>mcve_setssl</KEYWORD2>\r
+                       <KEYWORD2>mcve_setssl_files</KEYWORD2>\r
+                       <KEYWORD2>mcve_settimeout</KEYWORD2>\r
+                       <KEYWORD2>mcve_settle</KEYWORD2>\r
+                       <KEYWORD2>mcve_text_avs</KEYWORD2>\r
+                       <KEYWORD2>mcve_text_code</KEYWORD2>\r
+                       <KEYWORD2>mcve_text_cv</KEYWORD2>\r
+                       <KEYWORD2>mcve_transactionauth</KEYWORD2>\r
+                       <KEYWORD2>mcve_transactionavs</KEYWORD2>\r
+                       <KEYWORD2>mcve_transactionbatch</KEYWORD2>\r
+                       <KEYWORD2>mcve_transactioncv</KEYWORD2>\r
+                       <KEYWORD2>mcve_transactionid</KEYWORD2>\r
+                       <KEYWORD2>mcve_transactionitem</KEYWORD2>\r
+                       <KEYWORD2>mcve_transactionssent</KEYWORD2>\r
+                       <KEYWORD2>mcve_transactiontext</KEYWORD2>\r
+                       <KEYWORD2>mcve_transinqueue</KEYWORD2>\r
+                       <KEYWORD2>mcve_transnew</KEYWORD2>\r
+                       <KEYWORD2>mcve_transparam</KEYWORD2>\r
+                       <KEYWORD2>mcve_transsend</KEYWORD2>\r
+                       <KEYWORD2>mcve_ub</KEYWORD2>\r
+                       <KEYWORD2>mcve_uwait</KEYWORD2>\r
+                       <KEYWORD2>mcve_verifyconnection</KEYWORD2>\r
+                       <KEYWORD2>mcve_verifysslcert</KEYWORD2>\r
+                       <KEYWORD2>mcve_void</KEYWORD2>\r
+                       <KEYWORD2>md5</KEYWORD2>\r
+                       <KEYWORD2>md5_file</KEYWORD2>\r
+                       <KEYWORD2>mdecrypt_generic</KEYWORD2>\r
+                       <KEYWORD2>memcache_debug</KEYWORD2>\r
+                       <KEYWORD2>memory_get_usage</KEYWORD2>\r
+                       <KEYWORD2>metaphone</KEYWORD2>\r
+                       <KEYWORD2>method_exists</KEYWORD2>\r
+                       <KEYWORD2>mhash</KEYWORD2>\r
+                       <KEYWORD2>mhash_count</KEYWORD2>\r
+                       <KEYWORD2>mhash_get_block_size</KEYWORD2>\r
+                       <KEYWORD2>mhash_get_hash_name</KEYWORD2>\r
+                       <KEYWORD2>mhash_keygen_s2k</KEYWORD2>\r
+                       <KEYWORD2>microtime</KEYWORD2>\r
+                       <KEYWORD2>mime_content_type</KEYWORD2>\r
+                       <KEYWORD2>mimetype</KEYWORD2> <!-- hw_api_content -->\r
+                       <KEYWORD2>min</KEYWORD2>\r
+                       <KEYWORD2>ming_setcubicthreshold</KEYWORD2>\r
+                       <KEYWORD2>ming_setscale</KEYWORD2>\r
+                       <KEYWORD2>ming_useswfversion</KEYWORD2>\r
+                       <KEYWORD2>mkdir</KEYWORD2>\r
+                       <KEYWORD2>mktime</KEYWORD2>\r
+                       <KEYWORD2>money_format</KEYWORD2>\r
+                       <KEYWORD2>move</KEYWORD2> <!-- hw_api, swfdisplayitem -->\r
+                       <KEYWORD2>move_uploaded_file</KEYWORD2>\r
+                       <KEYWORD2>movepen</KEYWORD2> <!-- swfshape -->\r
+                       <KEYWORD2>movepento</KEYWORD2> <!-- swfshape -->\r
+                       <KEYWORD2>moveto</KEYWORD2> <!-- swfdisplayitem, swffill, swftext -->\r
+                       <KEYWORD2>msession_connect</KEYWORD2>\r
+                       <KEYWORD2>msession_count</KEYWORD2>\r
+                       <KEYWORD2>msession_create</KEYWORD2>\r
+                       <KEYWORD2>msession_destroy</KEYWORD2>\r
+                       <KEYWORD2>msession_disconnect</KEYWORD2>\r
+                       <KEYWORD2>msession_find</KEYWORD2>\r
+                       <KEYWORD2>msession_get</KEYWORD2>\r
+                       <KEYWORD2>msession_get_array</KEYWORD2>\r
+                       <KEYWORD2>msession_get_data</KEYWORD2>\r
+                       <KEYWORD2>msession_inc</KEYWORD2>\r
+                       <KEYWORD2>msession_list</KEYWORD2>\r
+                       <KEYWORD2>msession_listvar</KEYWORD2>\r
+                       <KEYWORD2>msession_lock</KEYWORD2>\r
+                       <KEYWORD2>msession_plugin</KEYWORD2>\r
+                       <KEYWORD2>msession_randstr</KEYWORD2>\r
+                       <KEYWORD2>msession_set</KEYWORD2>\r
+                       <KEYWORD2>msession_set_array</KEYWORD2>\r
+                       <KEYWORD2>msession_set_data</KEYWORD2>\r
+                       <KEYWORD2>msession_timeout</KEYWORD2>\r
+                       <KEYWORD2>msession_uniq</KEYWORD2>\r
+                       <KEYWORD2>msession_unlock</KEYWORD2>\r
+                       <KEYWORD2>msg_get_queue</KEYWORD2>\r
+                       <KEYWORD2>msg_receive</KEYWORD2>\r
+                       <KEYWORD2>msg_remove_queue</KEYWORD2>\r
+                       <KEYWORD2>msg_send</KEYWORD2>\r
+                       <KEYWORD2>msg_set_queue</KEYWORD2>\r
+                       <KEYWORD2>msg_stat_queue</KEYWORD2>\r
+                       <KEYWORD2>msql</KEYWORD2>\r
+                       <KEYWORD2>msql_affected_rows</KEYWORD2>\r
+                       <KEYWORD2>msql_close</KEYWORD2>\r
+                       <KEYWORD2>msql_connect</KEYWORD2>\r
+                       <KEYWORD2>msql_create_db</KEYWORD2>\r
+                       <KEYWORD2>msql_createdb</KEYWORD2>\r
+                       <KEYWORD2>msql_data_seek</KEYWORD2>\r
+                       <KEYWORD2>msql_db_query</KEYWORD2>\r
+                       <KEYWORD2>msql_dbname</KEYWORD2>\r
+                       <KEYWORD2>msql_drop_db</KEYWORD2>\r
+                       <KEYWORD2>msql_error</KEYWORD2>\r
+                       <KEYWORD2>msql_fetch_array</KEYWORD2>\r
+                       <KEYWORD2>msql_fetch_field</KEYWORD2>\r
+                       <KEYWORD2>msql_fetch_object</KEYWORD2>\r
+                       <KEYWORD2>msql_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>msql_field_flags</KEYWORD2>\r
+                       <KEYWORD2>msql_field_len</KEYWORD2>\r
+                       <KEYWORD2>msql_field_name</KEYWORD2>\r
+                       <KEYWORD2>msql_field_seek</KEYWORD2>\r
+                       <KEYWORD2>msql_field_table</KEYWORD2>\r
+                       <KEYWORD2>msql_field_type</KEYWORD2>\r
+                       <KEYWORD2>msql_fieldflags</KEYWORD2>\r
+                       <KEYWORD2>msql_fieldlen</KEYWORD2>\r
+                       <KEYWORD2>msql_fieldname</KEYWORD2>\r
+                       <KEYWORD2>msql_fieldtable</KEYWORD2>\r
+                       <KEYWORD2>msql_fieldtype</KEYWORD2>\r
+                       <KEYWORD2>msql_free_result</KEYWORD2>\r
+                       <KEYWORD2>msql_list_dbs</KEYWORD2>\r
+                       <KEYWORD2>msql_list_fields</KEYWORD2>\r
+                       <KEYWORD2>msql_list_tables</KEYWORD2>\r
+                       <KEYWORD2>msql_num_fields</KEYWORD2>\r
+                       <KEYWORD2>msql_num_rows</KEYWORD2>\r
+                       <KEYWORD2>msql_numfields</KEYWORD2>\r
+                       <KEYWORD2>msql_numrows</KEYWORD2>\r
+                       <KEYWORD2>msql_pconnect</KEYWORD2>\r
+                       <KEYWORD2>msql_query</KEYWORD2>\r
+                       <KEYWORD2>msql_regcase</KEYWORD2>\r
+                       <KEYWORD2>msql_result</KEYWORD2>\r
+                       <KEYWORD2>msql_select_db</KEYWORD2>\r
+                       <KEYWORD2>msql_tablename</KEYWORD2>\r
+                       <KEYWORD2>mssql_bind</KEYWORD2>\r
+                       <KEYWORD2>mssql_close</KEYWORD2>\r
+                       <KEYWORD2>mssql_connect</KEYWORD2>\r
+                       <KEYWORD2>mssql_data_seek</KEYWORD2>\r
+                       <KEYWORD2>mssql_execute</KEYWORD2>\r
+                       <KEYWORD2>mssql_fetch_array</KEYWORD2>\r
+                       <KEYWORD2>mssql_fetch_assoc</KEYWORD2>\r
+                       <KEYWORD2>mssql_fetch_batch</KEYWORD2>\r
+                       <KEYWORD2>mssql_fetch_field</KEYWORD2>\r
+                       <KEYWORD2>mssql_fetch_object</KEYWORD2>\r
+                       <KEYWORD2>mssql_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>mssql_field_length</KEYWORD2>\r
+                       <KEYWORD2>mssql_field_name</KEYWORD2>\r
+                       <KEYWORD2>mssql_field_seek</KEYWORD2>\r
+                       <KEYWORD2>mssql_field_type</KEYWORD2>\r
+                       <KEYWORD2>mssql_free_result</KEYWORD2>\r
+                       <KEYWORD2>mssql_free_statement</KEYWORD2>\r
+                       <KEYWORD2>mssql_get_last_message</KEYWORD2>\r
+                       <KEYWORD2>mssql_guid_string</KEYWORD2>\r
+                       <KEYWORD2>mssql_init</KEYWORD2>\r
+                       <KEYWORD2>mssql_min_error_severity</KEYWORD2>\r
+                       <KEYWORD2>mssql_min_message_severity</KEYWORD2>\r
+                       <KEYWORD2>mssql_next_result</KEYWORD2>\r
+                       <KEYWORD2>mssql_num_fields</KEYWORD2>\r
+                       <KEYWORD2>mssql_num_rows</KEYWORD2>\r
+                       <KEYWORD2>mssql_pconnect</KEYWORD2>\r
+                       <KEYWORD2>mssql_query</KEYWORD2>\r
+                       <KEYWORD2>mssql_result</KEYWORD2>\r
+                       <KEYWORD2>mssql_rows_affected</KEYWORD2>\r
+                       <KEYWORD2>mssql_select_db</KEYWORD2>\r
+                       <KEYWORD2>mt_getrandmax</KEYWORD2>\r
+                       <KEYWORD2>mt_rand</KEYWORD2>\r
+                       <KEYWORD2>mt_srand</KEYWORD2>\r
+                       <KEYWORD2>multcolor</KEYWORD2> <!-- swfdisplayitem -->\r
+                       <KEYWORD2>muscat_close</KEYWORD2>\r
+                       <KEYWORD2>muscat_get</KEYWORD2>\r
+                       <KEYWORD2>muscat_give</KEYWORD2>\r
+                       <KEYWORD2>muscat_setup</KEYWORD2>\r
+                       <KEYWORD2>muscat_setup_net</KEYWORD2>\r
+                       <KEYWORD2>mysql_affected_rows</KEYWORD2>\r
+                       <KEYWORD2>mysql_change_user</KEYWORD2>\r
+                       <KEYWORD2>mysql_client_encoding</KEYWORD2>\r
+                       <KEYWORD2>mysql_close</KEYWORD2>\r
+                       <KEYWORD2>mysql_connect</KEYWORD2>\r
+                       <KEYWORD2>mysql_create_db</KEYWORD2>\r
+                       <KEYWORD2>mysql_data_seek</KEYWORD2>\r
+                       <KEYWORD2>mysql_db_name</KEYWORD2>\r
+                       <KEYWORD2>mysql_db_query</KEYWORD2>\r
+                       <KEYWORD2>mysql_drop_db</KEYWORD2>\r
+                       <KEYWORD2>mysql_errno</KEYWORD2>\r
+                       <KEYWORD2>mysql_error</KEYWORD2>\r
+                       <KEYWORD2>mysql_escape_string</KEYWORD2>\r
+                       <KEYWORD2>mysql_fetch_array</KEYWORD2>\r
+                       <KEYWORD2>mysql_fetch_assoc</KEYWORD2>\r
+                       <KEYWORD2>mysql_fetch_field</KEYWORD2>\r
+                       <KEYWORD2>mysql_fetch_lengths</KEYWORD2>\r
+                       <KEYWORD2>mysql_fetch_object</KEYWORD2>\r
+                       <KEYWORD2>mysql_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>mysql_field_flags</KEYWORD2>\r
+                       <KEYWORD2>mysql_field_len</KEYWORD2>\r
+                       <KEYWORD2>mysql_field_name</KEYWORD2>\r
+                       <KEYWORD2>mysql_field_seek</KEYWORD2>\r
+                       <KEYWORD2>mysql_field_table</KEYWORD2>\r
+                       <KEYWORD2>mysql_field_type</KEYWORD2>\r
+                       <KEYWORD2>mysql_free_result</KEYWORD2>\r
+                       <KEYWORD2>mysql_get_client_info</KEYWORD2>\r
+                       <KEYWORD2>mysql_get_host_info</KEYWORD2>\r
+                       <KEYWORD2>mysql_get_proto_info</KEYWORD2>\r
+                       <KEYWORD2>mysql_get_server_info</KEYWORD2>\r
+                       <KEYWORD2>mysql_info</KEYWORD2>\r
+                       <KEYWORD2>mysql_insert_id</KEYWORD2>\r
+                       <KEYWORD2>mysql_list_dbs</KEYWORD2>\r
+                       <KEYWORD2>mysql_list_fields</KEYWORD2>\r
+                       <KEYWORD2>mysql_list_processes</KEYWORD2>\r
+                       <KEYWORD2>mysql_list_tables</KEYWORD2>\r
+                       <KEYWORD2>mysql_num_fields</KEYWORD2>\r
+                       <KEYWORD2>mysql_num_rows</KEYWORD2>\r
+                       <KEYWORD2>mysql_pconnect</KEYWORD2>\r
+                       <KEYWORD2>mysql_ping</KEYWORD2>\r
+                       <KEYWORD2>mysql_query</KEYWORD2>\r
+                       <KEYWORD2>mysql_real_escape_string</KEYWORD2>\r
+                       <KEYWORD2>mysql_result</KEYWORD2>\r
+                       <KEYWORD2>mysql_select_db</KEYWORD2>\r
+                       <KEYWORD2>mysql_stat</KEYWORD2>\r
+                       <KEYWORD2>mysql_tablename</KEYWORD2>\r
+                       <KEYWORD2>mysql_thread_id</KEYWORD2>\r
+                       <KEYWORD2>mysql_unbuffered_query</KEYWORD2>\r
+                       <KEYWORD2>mysqli_affected_rows</KEYWORD2>\r
+                       <KEYWORD2>mysqli_autocommit</KEYWORD2>\r
+                       <KEYWORD2>mysqli_bind_param</KEYWORD2>\r
+                       <KEYWORD2>mysqli_bind_result</KEYWORD2>\r
+                       <KEYWORD2>mysqli_change_user</KEYWORD2>\r
+                       <KEYWORD2>mysqli_character_set_name</KEYWORD2>\r
+                       <KEYWORD2>mysqli_client_encoding</KEYWORD2>\r
+                       <KEYWORD2>mysqli_close</KEYWORD2>\r
+                       <KEYWORD2>mysqli_commit</KEYWORD2>\r
+                       <KEYWORD2>mysqli_connect</KEYWORD2>\r
+                       <KEYWORD2>mysqli_connect_errno</KEYWORD2>\r
+                       <KEYWORD2>mysqli_connect_error</KEYWORD2>\r
+                       <KEYWORD2>mysqli_data_seek</KEYWORD2>\r
+                       <KEYWORD2>mysqli_debug</KEYWORD2>\r
+                       <KEYWORD2>mysqli_disable_reads_from_master</KEYWORD2>\r
+                       <KEYWORD2>mysqli_disable_rpl_parse</KEYWORD2>\r
+                       <KEYWORD2>mysqli_dump_debug_info</KEYWORD2>\r
+                       <KEYWORD2>mysqli_embedded_connect</KEYWORD2>\r
+                       <KEYWORD2>mysqli_enable_reads_from_master</KEYWORD2>\r
+                       <KEYWORD2>mysqli_enable_rpl_parse</KEYWORD2>\r
+                       <KEYWORD2>mysqli_errno</KEYWORD2>\r
+                       <KEYWORD2>mysqli_error</KEYWORD2>\r
+                       <KEYWORD2>mysqli_escape_string</KEYWORD2>\r
+                       <KEYWORD2>mysqli_execute</KEYWORD2>\r
+                       <KEYWORD2>mysqli_fetch</KEYWORD2>\r
+                       <KEYWORD2>mysqli_fetch_array</KEYWORD2>\r
+                       <KEYWORD2>mysqli_fetch_assoc</KEYWORD2>\r
+                       <KEYWORD2>mysqli_fetch_field</KEYWORD2>\r
+                       <KEYWORD2>mysqli_fetch_field_direct</KEYWORD2>\r
+                       <KEYWORD2>mysqli_fetch_fields</KEYWORD2>\r
+                       <KEYWORD2>mysqli_fetch_lengths</KEYWORD2>\r
+                       <KEYWORD2>mysqli_fetch_object</KEYWORD2>\r
+                       <KEYWORD2>mysqli_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>mysqli_field_count</KEYWORD2>\r
+                       <KEYWORD2>mysqli_field_seek</KEYWORD2>\r
+                       <KEYWORD2>mysqli_field_tell</KEYWORD2>\r
+                       <KEYWORD2>mysqli_free_result</KEYWORD2>\r
+                       <KEYWORD2>mysqli_get_client_info</KEYWORD2>\r
+                       <KEYWORD2>mysqli_get_client_version</KEYWORD2>\r
+                       <KEYWORD2>mysqli_get_host_info</KEYWORD2>\r
+                       <KEYWORD2>mysqli_get_metadata</KEYWORD2>\r
+                       <KEYWORD2>mysqli_get_proto_info</KEYWORD2>\r
+                       <KEYWORD2>mysqli_get_server_info</KEYWORD2>\r
+                       <KEYWORD2>mysqli_get_server_version</KEYWORD2>\r
+                       <KEYWORD2>mysqli_info</KEYWORD2>\r
+                       <KEYWORD2>mysqli_init</KEYWORD2>\r
+                       <KEYWORD2>mysqli_insert_id</KEYWORD2>\r
+                       <KEYWORD2>mysqli_kill</KEYWORD2>\r
+                       <KEYWORD2>mysqli_master_query</KEYWORD2>\r
+                       <KEYWORD2>mysqli_more_results</KEYWORD2>\r
+                       <KEYWORD2>mysqli_multi_query</KEYWORD2>\r
+                       <KEYWORD2>mysqli_next_result</KEYWORD2>\r
+                       <KEYWORD2>mysqli_num_fields</KEYWORD2>\r
+                       <KEYWORD2>mysqli_num_rows</KEYWORD2>\r
+                       <KEYWORD2>mysqli_options</KEYWORD2>\r
+                       <KEYWORD2>mysqli_param_count</KEYWORD2>\r
+                       <KEYWORD2>mysqli_ping</KEYWORD2>\r
+                       <KEYWORD2>mysqli_prepare</KEYWORD2>\r
+                       <KEYWORD2>mysqli_query</KEYWORD2>\r
+                       <KEYWORD2>mysqli_real_connect</KEYWORD2>\r
+                       <KEYWORD2>mysqli_real_escape_string</KEYWORD2>\r
+                       <KEYWORD2>mysqli_real_query</KEYWORD2>\r
+                       <KEYWORD2>mysqli_report</KEYWORD2>\r
+                       <KEYWORD2>mysqli_rollback</KEYWORD2>\r
+                       <KEYWORD2>mysqli_rpl_parse_enabled</KEYWORD2>\r
+                       <KEYWORD2>mysqli_rpl_probe</KEYWORD2>\r
+                       <KEYWORD2>mysqli_rpl_query_type</KEYWORD2>\r
+                       <KEYWORD2>mysqli_select_db</KEYWORD2>\r
+                       <KEYWORD2>mysqli_send_long_data</KEYWORD2>\r
+                       <KEYWORD2>mysqli_send_query</KEYWORD2>\r
+                       <KEYWORD2>mysqli_server_end</KEYWORD2>\r
+                       <KEYWORD2>mysqli_server_init</KEYWORD2>\r
+                       <KEYWORD2>mysqli_set_opt</KEYWORD2>\r
+                       <KEYWORD2>mysqli_sqlstate</KEYWORD2>\r
+                       <KEYWORD2>mysqli_ssl_set</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stat</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_affected_rows</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_bind_param</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_bind_result</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_close</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_data_seek</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_errno</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_error</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_execute</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_fetch</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_free_result</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_init</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_num_rows</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_param_count</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_prepare</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_reset</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_result_metadata</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_send_long_data</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_sqlstate</KEYWORD2>\r
+                       <KEYWORD2>mysqli_stmt_store_result</KEYWORD2>\r
+                       <KEYWORD2>mysqli_store_result</KEYWORD2>\r
+                       <KEYWORD2>mysqli_thread_id</KEYWORD2>\r
+                       <KEYWORD2>mysqli_thread_safe</KEYWORD2>\r
+                       <KEYWORD2>mysqli_use_result</KEYWORD2>\r
+                       <KEYWORD2>mysqli_warning_count</KEYWORD2>\r
+                       <KEYWORD2>name</KEYWORD2> <!-- domattribute, domdocumenttype -->\r
+                       <KEYWORD2>natcasesort</KEYWORD2>\r
+                       <KEYWORD2>natsort</KEYWORD2>\r
+                       <KEYWORD2>ncurses_addch</KEYWORD2>\r
+                       <KEYWORD2>ncurses_addchnstr</KEYWORD2>\r
+                       <KEYWORD2>ncurses_addchstr</KEYWORD2>\r
+                       <KEYWORD2>ncurses_addnstr</KEYWORD2>\r
+                       <KEYWORD2>ncurses_addstr</KEYWORD2>\r
+                       <KEYWORD2>ncurses_assume_default_colors</KEYWORD2>\r
+                       <KEYWORD2>ncurses_attroff</KEYWORD2>\r
+                       <KEYWORD2>ncurses_attron</KEYWORD2>\r
+                       <KEYWORD2>ncurses_attrset</KEYWORD2>\r
+                       <KEYWORD2>ncurses_baudrate</KEYWORD2>\r
+                       <KEYWORD2>ncurses_beep</KEYWORD2>\r
+                       <KEYWORD2>ncurses_bkgd</KEYWORD2>\r
+                       <KEYWORD2>ncurses_bkgdset</KEYWORD2>\r
+                       <KEYWORD2>ncurses_border</KEYWORD2>\r
+                       <KEYWORD2>ncurses_bottom_panel</KEYWORD2>\r
+                       <KEYWORD2>ncurses_can_change_color</KEYWORD2>\r
+                       <KEYWORD2>ncurses_cbreak</KEYWORD2>\r
+                       <KEYWORD2>ncurses_clear</KEYWORD2>\r
+                       <KEYWORD2>ncurses_clrtobot</KEYWORD2>\r
+                       <KEYWORD2>ncurses_clrtoeol</KEYWORD2>\r
+                       <KEYWORD2>ncurses_color_content</KEYWORD2>\r
+                       <KEYWORD2>ncurses_color_set</KEYWORD2>\r
+                       <KEYWORD2>ncurses_curs_set</KEYWORD2>\r
+                       <KEYWORD2>ncurses_def_prog_mode</KEYWORD2>\r
+                       <KEYWORD2>ncurses_def_shell_mode</KEYWORD2>\r
+                       <KEYWORD2>ncurses_define_key</KEYWORD2>\r
+                       <KEYWORD2>ncurses_del_panel</KEYWORD2>\r
+                       <KEYWORD2>ncurses_delay_output</KEYWORD2>\r
+                       <KEYWORD2>ncurses_delch</KEYWORD2>\r
+                       <KEYWORD2>ncurses_deleteln</KEYWORD2>\r
+                       <KEYWORD2>ncurses_delwin</KEYWORD2>\r
+                       <KEYWORD2>ncurses_doupdate</KEYWORD2>\r
+                       <KEYWORD2>ncurses_echo</KEYWORD2>\r
+                       <KEYWORD2>ncurses_echochar</KEYWORD2>\r
+                       <KEYWORD2>ncurses_end</KEYWORD2>\r
+                       <KEYWORD2>ncurses_erase</KEYWORD2>\r
+                       <KEYWORD2>ncurses_erasechar</KEYWORD2>\r
+                       <KEYWORD2>ncurses_filter</KEYWORD2>\r
+                       <KEYWORD2>ncurses_flash</KEYWORD2>\r
+                       <KEYWORD2>ncurses_flushinp</KEYWORD2>\r
+                       <KEYWORD2>ncurses_getch</KEYWORD2>\r
+                       <KEYWORD2>ncurses_getmaxyx</KEYWORD2>\r
+                       <KEYWORD2>ncurses_getmouse</KEYWORD2>\r
+                       <KEYWORD2>ncurses_getyx</KEYWORD2>\r
+                       <KEYWORD2>ncurses_halfdelay</KEYWORD2>\r
+                       <KEYWORD2>ncurses_has_colors</KEYWORD2>\r
+                       <KEYWORD2>ncurses_has_ic</KEYWORD2>\r
+                       <KEYWORD2>ncurses_has_il</KEYWORD2>\r
+                       <KEYWORD2>ncurses_has_key</KEYWORD2>\r
+                       <KEYWORD2>ncurses_hide_panel</KEYWORD2>\r
+                       <KEYWORD2>ncurses_hline</KEYWORD2>\r
+                       <KEYWORD2>ncurses_inch</KEYWORD2>\r
+                       <KEYWORD2>ncurses_init</KEYWORD2>\r
+                       <KEYWORD2>ncurses_init_color</KEYWORD2>\r
+                       <KEYWORD2>ncurses_init_pair</KEYWORD2>\r
+                       <KEYWORD2>ncurses_insch</KEYWORD2>\r
+                       <KEYWORD2>ncurses_insdelln</KEYWORD2>\r
+                       <KEYWORD2>ncurses_insertln</KEYWORD2>\r
+                       <KEYWORD2>ncurses_insstr</KEYWORD2>\r
+                       <KEYWORD2>ncurses_instr</KEYWORD2>\r
+                       <KEYWORD2>ncurses_isendwin</KEYWORD2>\r
+                       <KEYWORD2>ncurses_keyok</KEYWORD2>\r
+                       <KEYWORD2>ncurses_keypad</KEYWORD2>\r
+                       <KEYWORD2>ncurses_killchar</KEYWORD2>\r
+                       <KEYWORD2>ncurses_longname</KEYWORD2>\r
+                       <KEYWORD2>ncurses_meta</KEYWORD2>\r
+                       <KEYWORD2>ncurses_mouse_trafo</KEYWORD2>\r
+                       <KEYWORD2>ncurses_mouseinterval</KEYWORD2>\r
+                       <KEYWORD2>ncurses_mousemask</KEYWORD2>\r
+                       <KEYWORD2>ncurses_move</KEYWORD2>\r
+                       <KEYWORD2>ncurses_move_panel</KEYWORD2>\r
+                       <KEYWORD2>ncurses_mvaddch</KEYWORD2>\r
+                       <KEYWORD2>ncurses_mvaddchnstr</KEYWORD2>\r
+                       <KEYWORD2>ncurses_mvaddchstr</KEYWORD2>\r
+                       <KEYWORD2>ncurses_mvaddnstr</KEYWORD2>\r
+                       <KEYWORD2>ncurses_mvaddstr</KEYWORD2>\r
+                       <KEYWORD2>ncurses_mvcur</KEYWORD2>\r
+                       <KEYWORD2>ncurses_mvdelch</KEYWORD2>\r
+                       <KEYWORD2>ncurses_mvgetch</KEYWORD2>\r
+                       <KEYWORD2>ncurses_mvhline</KEYWORD2>\r
+                       <KEYWORD2>ncurses_mvinch</KEYWORD2>\r
+                       <KEYWORD2>ncurses_mvvline</KEYWORD2>\r
+                       <KEYWORD2>ncurses_mvwaddstr</KEYWORD2>\r
+                       <KEYWORD2>ncurses_napms</KEYWORD2>\r
+                       <KEYWORD2>ncurses_new_panel</KEYWORD2>\r
+                       <KEYWORD2>ncurses_newpad</KEYWORD2>\r
+                       <KEYWORD2>ncurses_newwin</KEYWORD2>\r
+                       <KEYWORD2>ncurses_nl</KEYWORD2>\r
+                       <KEYWORD2>ncurses_nocbreak</KEYWORD2>\r
+                       <KEYWORD2>ncurses_noecho</KEYWORD2>\r
+                       <KEYWORD2>ncurses_nonl</KEYWORD2>\r
+                       <KEYWORD2>ncurses_noqiflush</KEYWORD2>\r
+                       <KEYWORD2>ncurses_noraw</KEYWORD2>\r
+                       <KEYWORD2>ncurses_pair_content</KEYWORD2>\r
+                       <KEYWORD2>ncurses_panel_above</KEYWORD2>\r
+                       <KEYWORD2>ncurses_panel_below</KEYWORD2>\r
+                       <KEYWORD2>ncurses_panel_window</KEYWORD2>\r
+                       <KEYWORD2>ncurses_pnoutrefresh</KEYWORD2>\r
+                       <KEYWORD2>ncurses_prefresh</KEYWORD2>\r
+                       <KEYWORD2>ncurses_putp</KEYWORD2>\r
+                       <KEYWORD2>ncurses_qiflush</KEYWORD2>\r
+                       <KEYWORD2>ncurses_raw</KEYWORD2>\r
+                       <KEYWORD2>ncurses_refresh</KEYWORD2>\r
+                       <KEYWORD2>ncurses_replace_panel</KEYWORD2>\r
+                       <KEYWORD2>ncurses_reset_prog_mode</KEYWORD2>\r
+                       <KEYWORD2>ncurses_reset_shell_mode</KEYWORD2>\r
+                       <KEYWORD2>ncurses_resetty</KEYWORD2>\r
+                       <KEYWORD2>ncurses_savetty</KEYWORD2>\r
+                       <KEYWORD2>ncurses_scr_dump</KEYWORD2>\r
+                       <KEYWORD2>ncurses_scr_init</KEYWORD2>\r
+                       <KEYWORD2>ncurses_scr_restore</KEYWORD2>\r
+                       <KEYWORD2>ncurses_scr_set</KEYWORD2>\r
+                       <KEYWORD2>ncurses_scrl</KEYWORD2>\r
+                       <KEYWORD2>ncurses_show_panel</KEYWORD2>\r
+                       <KEYWORD2>ncurses_slk_attr</KEYWORD2>\r
+                       <KEYWORD2>ncurses_slk_attroff</KEYWORD2>\r
+                       <KEYWORD2>ncurses_slk_attron</KEYWORD2>\r
+                       <KEYWORD2>ncurses_slk_attrset</KEYWORD2>\r
+                       <KEYWORD2>ncurses_slk_clear</KEYWORD2>\r
+                       <KEYWORD2>ncurses_slk_color</KEYWORD2>\r
+                       <KEYWORD2>ncurses_slk_init</KEYWORD2>\r
+                       <KEYWORD2>ncurses_slk_noutrefresh</KEYWORD2>\r
+                       <KEYWORD2>ncurses_slk_refresh</KEYWORD2>\r
+                       <KEYWORD2>ncurses_slk_restore</KEYWORD2>\r
+                       <KEYWORD2>ncurses_slk_set</KEYWORD2>\r
+                       <KEYWORD2>ncurses_slk_touch</KEYWORD2>\r
+                       <KEYWORD2>ncurses_standend</KEYWORD2>\r
+                       <KEYWORD2>ncurses_standout</KEYWORD2>\r
+                       <KEYWORD2>ncurses_start_color</KEYWORD2>\r
+                       <KEYWORD2>ncurses_termattrs</KEYWORD2>\r
+                       <KEYWORD2>ncurses_termname</KEYWORD2>\r
+                       <KEYWORD2>ncurses_timeout</KEYWORD2>\r
+                       <KEYWORD2>ncurses_top_panel</KEYWORD2>\r
+                       <KEYWORD2>ncurses_typeahead</KEYWORD2>\r
+                       <KEYWORD2>ncurses_ungetch</KEYWORD2>\r
+                       <KEYWORD2>ncurses_ungetmouse</KEYWORD2>\r
+                       <KEYWORD2>ncurses_update_panels</KEYWORD2>\r
+                       <KEYWORD2>ncurses_use_default_colors</KEYWORD2>\r
+                       <KEYWORD2>ncurses_use_env</KEYWORD2>\r
+                       <KEYWORD2>ncurses_use_extended_names</KEYWORD2>\r
+                       <KEYWORD2>ncurses_vidattr</KEYWORD2>\r
+                       <KEYWORD2>ncurses_vline</KEYWORD2>\r
+                       <KEYWORD2>ncurses_waddch</KEYWORD2>\r
+                       <KEYWORD2>ncurses_waddstr</KEYWORD2>\r
+                       <KEYWORD2>ncurses_wattroff</KEYWORD2>\r
+                       <KEYWORD2>ncurses_wattron</KEYWORD2>\r
+                       <KEYWORD2>ncurses_wattrset</KEYWORD2>\r
+                       <KEYWORD2>ncurses_wborder</KEYWORD2>\r
+                       <KEYWORD2>ncurses_wclear</KEYWORD2>\r
+                       <KEYWORD2>ncurses_wcolor_set</KEYWORD2>\r
+                       <KEYWORD2>ncurses_werase</KEYWORD2>\r
+                       <KEYWORD2>ncurses_wgetch</KEYWORD2>\r
+                       <KEYWORD2>ncurses_whline</KEYWORD2>\r
+                       <KEYWORD2>ncurses_wmouse_trafo</KEYWORD2>\r
+                       <KEYWORD2>ncurses_wmove</KEYWORD2>\r
+                       <KEYWORD2>ncurses_wnoutrefresh</KEYWORD2>\r
+                       <KEYWORD2>ncurses_wrefresh</KEYWORD2>\r
+                       <KEYWORD2>ncurses_wstandend</KEYWORD2>\r
+                       <KEYWORD2>ncurses_wstandout</KEYWORD2>\r
+                       <KEYWORD2>ncurses_wvline</KEYWORD2>\r
+                       <KEYWORD2>next</KEYWORD2> <!-- arrayiterator, cachingiterator, directoryiterator, filteriterator, limititerator, parentiterator, recursivedirectoryiterator, recursiveiteratoriterator, simplexmliterator, tidy_node -->\r
+                       <KEYWORD2>next_sibling</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>nextframe</KEYWORD2> <!-- swfmovie, swfsprite -->\r
+                       <KEYWORD2>ngettext</KEYWORD2>\r
+                       <KEYWORD2>nl2br</KEYWORD2>\r
+                       <KEYWORD2>nl_langinfo</KEYWORD2>\r
+                       <KEYWORD2>node_name</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>node_type</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>node_value</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>normalize</KEYWORD2> <!-- domdocument, domnode -->\r
+                       <KEYWORD2>notations</KEYWORD2> <!-- domdocumenttype -->\r
+                       <KEYWORD2>notes_body</KEYWORD2>\r
+                       <KEYWORD2>notes_copy_db</KEYWORD2>\r
+                       <KEYWORD2>notes_create_db</KEYWORD2>\r
+                       <KEYWORD2>notes_create_note</KEYWORD2>\r
+                       <KEYWORD2>notes_drop_db</KEYWORD2>\r
+                       <KEYWORD2>notes_find_note</KEYWORD2>\r
+                       <KEYWORD2>notes_header_info</KEYWORD2>\r
+                       <KEYWORD2>notes_list_msgs</KEYWORD2>\r
+                       <KEYWORD2>notes_mark_read</KEYWORD2>\r
+                       <KEYWORD2>notes_mark_unread</KEYWORD2>\r
+                       <KEYWORD2>notes_nav_create</KEYWORD2>\r
+                       <KEYWORD2>notes_search</KEYWORD2>\r
+                       <KEYWORD2>notes_unread</KEYWORD2>\r
+                       <KEYWORD2>notes_version</KEYWORD2>\r
+                       <KEYWORD2>nsapi_request_headers</KEYWORD2>\r
+                       <KEYWORD2>nsapi_response_headers</KEYWORD2>\r
+                       <KEYWORD2>nsapi_virtual</KEYWORD2>\r
+                       <KEYWORD2>number_format</KEYWORD2>\r
+                       <KEYWORD2>ob_clean</KEYWORD2>\r
+                       <KEYWORD2>ob_end_clean</KEYWORD2>\r
+                       <KEYWORD2>ob_end_flush</KEYWORD2>\r
+                       <KEYWORD2>ob_flush</KEYWORD2>\r
+                       <KEYWORD2>ob_get_clean</KEYWORD2>\r
+                       <KEYWORD2>ob_get_contents</KEYWORD2>\r
+                       <KEYWORD2>ob_get_flush</KEYWORD2>\r
+                       <KEYWORD2>ob_get_length</KEYWORD2>\r
+                       <KEYWORD2>ob_get_level</KEYWORD2>\r
+                       <KEYWORD2>ob_get_status</KEYWORD2>\r
+                       <KEYWORD2>ob_gzhandler</KEYWORD2>\r
+                       <KEYWORD2>ob_iconv_handler</KEYWORD2>\r
+                       <KEYWORD2>ob_implicit_flush</KEYWORD2>\r
+                       <KEYWORD2>ob_list_handlers</KEYWORD2>\r
+                       <KEYWORD2>ob_start</KEYWORD2>\r
+                       <KEYWORD2>ob_tidyhandler</KEYWORD2>\r
+                       <KEYWORD2>object</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>objectbyanchor</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>oci_bind_by_name</KEYWORD2>\r
+                       <KEYWORD2>oci_cancel</KEYWORD2>\r
+                       <KEYWORD2>oci_close</KEYWORD2>\r
+                       <KEYWORD2>oci_commit</KEYWORD2>\r
+                       <KEYWORD2>oci_connect</KEYWORD2>\r
+                       <KEYWORD2>oci_define_by_name</KEYWORD2>\r
+                       <KEYWORD2>oci_error</KEYWORD2>\r
+                       <KEYWORD2>oci_execute</KEYWORD2>\r
+                       <KEYWORD2>oci_fetch</KEYWORD2>\r
+                       <KEYWORD2>oci_fetch_all</KEYWORD2>\r
+                       <KEYWORD2>oci_fetch_array</KEYWORD2>\r
+                       <KEYWORD2>oci_fetch_assoc</KEYWORD2>\r
+                       <KEYWORD2>oci_fetch_object</KEYWORD2>\r
+                       <KEYWORD2>oci_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>oci_field_is_null</KEYWORD2>\r
+                       <KEYWORD2>oci_field_name</KEYWORD2>\r
+                       <KEYWORD2>oci_field_precision</KEYWORD2>\r
+                       <KEYWORD2>oci_field_scale</KEYWORD2>\r
+                       <KEYWORD2>oci_field_size</KEYWORD2>\r
+                       <KEYWORD2>oci_field_type</KEYWORD2>\r
+                       <KEYWORD2>oci_field_type_raw</KEYWORD2>\r
+                       <KEYWORD2>oci_free_statement</KEYWORD2>\r
+                       <KEYWORD2>oci_internal_debug</KEYWORD2>\r
+                       <KEYWORD2>oci_lob_copy</KEYWORD2>\r
+                       <KEYWORD2>oci_lob_is_equal</KEYWORD2>\r
+                       <KEYWORD2>oci_new_collection</KEYWORD2>\r
+                       <KEYWORD2>oci_new_connect</KEYWORD2>\r
+                       <KEYWORD2>oci_new_cursor</KEYWORD2>\r
+                       <KEYWORD2>oci_new_descriptor</KEYWORD2>\r
+                       <KEYWORD2>oci_num_fields</KEYWORD2>\r
+                       <KEYWORD2>oci_num_rows</KEYWORD2>\r
+                       <KEYWORD2>oci_parse</KEYWORD2>\r
+                       <KEYWORD2>oci_password_change</KEYWORD2>\r
+                       <KEYWORD2>oci_pconnect</KEYWORD2>\r
+                       <KEYWORD2>oci_result</KEYWORD2>\r
+                       <KEYWORD2>oci_rollback</KEYWORD2>\r
+                       <KEYWORD2>oci_server_version</KEYWORD2>\r
+                       <KEYWORD2>oci_set_prefetch</KEYWORD2>\r
+                       <KEYWORD2>oci_statement_type</KEYWORD2>\r
+                       <KEYWORD2>ocibindbyname</KEYWORD2>\r
+                       <KEYWORD2>ocicancel</KEYWORD2>\r
+                       <KEYWORD2>ocicloselob</KEYWORD2>\r
+                       <KEYWORD2>ocicollappend</KEYWORD2>\r
+                       <KEYWORD2>ocicollassign</KEYWORD2>\r
+                       <KEYWORD2>ocicollassignelem</KEYWORD2>\r
+                       <KEYWORD2>ocicollgetelem</KEYWORD2>\r
+                       <KEYWORD2>ocicollmax</KEYWORD2>\r
+                       <KEYWORD2>ocicollsize</KEYWORD2>\r
+                       <KEYWORD2>ocicolltrim</KEYWORD2>\r
+                       <KEYWORD2>ocicolumnisnull</KEYWORD2>\r
+                       <KEYWORD2>ocicolumnname</KEYWORD2>\r
+                       <KEYWORD2>ocicolumnprecision</KEYWORD2>\r
+                       <KEYWORD2>ocicolumnscale</KEYWORD2>\r
+                       <KEYWORD2>ocicolumnsize</KEYWORD2>\r
+                       <KEYWORD2>ocicolumntype</KEYWORD2>\r
+                       <KEYWORD2>ocicolumntyperaw</KEYWORD2>\r
+                       <KEYWORD2>ocicommit</KEYWORD2>\r
+                       <KEYWORD2>ocidefinebyname</KEYWORD2>\r
+                       <KEYWORD2>ocierror</KEYWORD2>\r
+                       <KEYWORD2>ociexecute</KEYWORD2>\r
+                       <KEYWORD2>ocifetch</KEYWORD2>\r
+                       <KEYWORD2>ocifetchinto</KEYWORD2>\r
+                       <KEYWORD2>ocifetchstatement</KEYWORD2>\r
+                       <KEYWORD2>ocifreecollection</KEYWORD2>\r
+                       <KEYWORD2>ocifreecursor</KEYWORD2>\r
+                       <KEYWORD2>ocifreedesc</KEYWORD2>\r
+                       <KEYWORD2>ocifreestatement</KEYWORD2>\r
+                       <KEYWORD2>ociinternaldebug</KEYWORD2>\r
+                       <KEYWORD2>ociloadlob</KEYWORD2>\r
+                       <KEYWORD2>ocilogoff</KEYWORD2>\r
+                       <KEYWORD2>ocilogon</KEYWORD2>\r
+                       <KEYWORD2>ocinewcollection</KEYWORD2>\r
+                       <KEYWORD2>ocinewcursor</KEYWORD2>\r
+                       <KEYWORD2>ocinewdescriptor</KEYWORD2>\r
+                       <KEYWORD2>ocinlogon</KEYWORD2>\r
+                       <KEYWORD2>ocinumcols</KEYWORD2>\r
+                       <KEYWORD2>ociparse</KEYWORD2>\r
+                       <KEYWORD2>ociplogon</KEYWORD2>\r
+                       <KEYWORD2>ociresult</KEYWORD2>\r
+                       <KEYWORD2>ocirollback</KEYWORD2>\r
+                       <KEYWORD2>ocirowcount</KEYWORD2>\r
+                       <KEYWORD2>ocisavelob</KEYWORD2>\r
+                       <KEYWORD2>ocisavelobfile</KEYWORD2>\r
+                       <KEYWORD2>ociserverversion</KEYWORD2>\r
+                       <KEYWORD2>ocisetprefetch</KEYWORD2>\r
+                       <KEYWORD2>ocistatementtype</KEYWORD2>\r
+                       <KEYWORD2>ociwritelobtofile</KEYWORD2>\r
+                       <KEYWORD2>ociwritetemporarylob</KEYWORD2>\r
+                       <KEYWORD2>octdec</KEYWORD2>\r
+                       <KEYWORD2>odbc_autocommit</KEYWORD2>\r
+                       <KEYWORD2>odbc_binmode</KEYWORD2>\r
+                       <KEYWORD2>odbc_close</KEYWORD2>\r
+                       <KEYWORD2>odbc_close_all</KEYWORD2>\r
+                       <KEYWORD2>odbc_columnprivileges</KEYWORD2>\r
+                       <KEYWORD2>odbc_columns</KEYWORD2>\r
+                       <KEYWORD2>odbc_commit</KEYWORD2>\r
+                       <KEYWORD2>odbc_connect</KEYWORD2>\r
+                       <KEYWORD2>odbc_cursor</KEYWORD2>\r
+                       <KEYWORD2>odbc_data_source</KEYWORD2>\r
+                       <KEYWORD2>odbc_do</KEYWORD2>\r
+                       <KEYWORD2>odbc_error</KEYWORD2>\r
+                       <KEYWORD2>odbc_errormsg</KEYWORD2>\r
+                       <KEYWORD2>odbc_exec</KEYWORD2>\r
+                       <KEYWORD2>odbc_execute</KEYWORD2>\r
+                       <KEYWORD2>odbc_fetch_array</KEYWORD2>\r
+                       <KEYWORD2>odbc_fetch_into</KEYWORD2>\r
+                       <KEYWORD2>odbc_fetch_object</KEYWORD2>\r
+                       <KEYWORD2>odbc_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>odbc_field_len</KEYWORD2>\r
+                       <KEYWORD2>odbc_field_name</KEYWORD2>\r
+                       <KEYWORD2>odbc_field_num</KEYWORD2>\r
+                       <KEYWORD2>odbc_field_precision</KEYWORD2>\r
+                       <KEYWORD2>odbc_field_scale</KEYWORD2>\r
+                       <KEYWORD2>odbc_field_type</KEYWORD2>\r
+                       <KEYWORD2>odbc_foreignkeys</KEYWORD2>\r
+                       <KEYWORD2>odbc_free_result</KEYWORD2>\r
+                       <KEYWORD2>odbc_gettypeinfo</KEYWORD2>\r
+                       <KEYWORD2>odbc_longreadlen</KEYWORD2>\r
+                       <KEYWORD2>odbc_next_result</KEYWORD2>\r
+                       <KEYWORD2>odbc_num_fields</KEYWORD2>\r
+                       <KEYWORD2>odbc_num_rows</KEYWORD2>\r
+                       <KEYWORD2>odbc_pconnect</KEYWORD2>\r
+                       <KEYWORD2>odbc_prepare</KEYWORD2>\r
+                       <KEYWORD2>odbc_primarykeys</KEYWORD2>\r
+                       <KEYWORD2>odbc_procedurecolumns</KEYWORD2>\r
+                       <KEYWORD2>odbc_procedures</KEYWORD2>\r
+                       <KEYWORD2>odbc_result</KEYWORD2>\r
+                       <KEYWORD2>odbc_result_all</KEYWORD2>\r
+                       <KEYWORD2>odbc_rollback</KEYWORD2>\r
+                       <KEYWORD2>odbc_setoption</KEYWORD2>\r
+                       <KEYWORD2>odbc_specialcolumns</KEYWORD2>\r
+                       <KEYWORD2>odbc_statistics</KEYWORD2>\r
+                       <KEYWORD2>odbc_tableprivileges</KEYWORD2>\r
+                       <KEYWORD2>odbc_tables</KEYWORD2>\r
+                       <KEYWORD2>offsetexists</KEYWORD2> <!-- arrayobject -->\r
+                       <KEYWORD2>offsetget</KEYWORD2> <!-- arrayobject -->\r
+                       <KEYWORD2>offsetset</KEYWORD2> <!-- arrayobject -->\r
+                       <KEYWORD2>offsetunset</KEYWORD2> <!-- arrayobject -->\r
+                       <KEYWORD2>openal_buffer_create</KEYWORD2>\r
+                       <KEYWORD2>openal_buffer_data</KEYWORD2>\r
+                       <KEYWORD2>openal_buffer_destroy</KEYWORD2>\r
+                       <KEYWORD2>openal_buffer_get</KEYWORD2>\r
+                       <KEYWORD2>openal_buffer_loadwav</KEYWORD2>\r
+                       <KEYWORD2>openal_context_create</KEYWORD2>\r
+                       <KEYWORD2>openal_context_current</KEYWORD2>\r
+                       <KEYWORD2>openal_context_destroy</KEYWORD2>\r
+                       <KEYWORD2>openal_context_process</KEYWORD2>\r
+                       <KEYWORD2>openal_context_suspend</KEYWORD2>\r
+                       <KEYWORD2>openal_device_close</KEYWORD2>\r
+                       <KEYWORD2>openal_device_open</KEYWORD2>\r
+                       <KEYWORD2>openal_listener_get</KEYWORD2>\r
+                       <KEYWORD2>openal_listener_set</KEYWORD2>\r
+                       <KEYWORD2>openal_source_create</KEYWORD2>\r
+                       <KEYWORD2>openal_source_destroy</KEYWORD2>\r
+                       <KEYWORD2>openal_source_get</KEYWORD2>\r
+                       <KEYWORD2>openal_source_pause</KEYWORD2>\r
+                       <KEYWORD2>openal_source_play</KEYWORD2>\r
+                       <KEYWORD2>openal_source_rewind</KEYWORD2>\r
+                       <KEYWORD2>openal_source_set</KEYWORD2>\r
+                       <KEYWORD2>openal_source_stop</KEYWORD2>\r
+                       <KEYWORD2>openal_stream</KEYWORD2>\r
+                       <KEYWORD2>opendir</KEYWORD2>\r
+                       <KEYWORD2>openlog</KEYWORD2>\r
+                       <KEYWORD2>openssl_csr_export</KEYWORD2>\r
+                       <KEYWORD2>openssl_csr_export_to_file</KEYWORD2>\r
+                       <KEYWORD2>openssl_csr_new</KEYWORD2>\r
+                       <KEYWORD2>openssl_csr_sign</KEYWORD2>\r
+                       <KEYWORD2>openssl_error_string</KEYWORD2>\r
+                       <KEYWORD2>openssl_free_key</KEYWORD2>\r
+                       <KEYWORD2>openssl_get_privatekey</KEYWORD2>\r
+                       <KEYWORD2>openssl_get_publickey</KEYWORD2>\r
+                       <KEYWORD2>openssl_open</KEYWORD2>\r
+                       <KEYWORD2>openssl_pkcs7_decrypt</KEYWORD2>\r
+                       <KEYWORD2>openssl_pkcs7_encrypt</KEYWORD2>\r
+                       <KEYWORD2>openssl_pkcs7_sign</KEYWORD2>\r
+                       <KEYWORD2>openssl_pkcs7_verify</KEYWORD2>\r
+                       <KEYWORD2>openssl_pkey_export</KEYWORD2>\r
+                       <KEYWORD2>openssl_pkey_export_to_file</KEYWORD2>\r
+                       <KEYWORD2>openssl_pkey_get_private</KEYWORD2>\r
+                       <KEYWORD2>openssl_pkey_get_public</KEYWORD2>\r
+                       <KEYWORD2>openssl_pkey_new</KEYWORD2>\r
+                       <KEYWORD2>openssl_private_decrypt</KEYWORD2>\r
+                       <KEYWORD2>openssl_private_encrypt</KEYWORD2>\r
+                       <KEYWORD2>openssl_public_decrypt</KEYWORD2>\r
+                       <KEYWORD2>openssl_public_encrypt</KEYWORD2>\r
+                       <KEYWORD2>openssl_seal</KEYWORD2>\r
+                       <KEYWORD2>openssl_sign</KEYWORD2>\r
+                       <KEYWORD2>openssl_verify</KEYWORD2>\r
+                       <KEYWORD2>openssl_x509_check_private_key</KEYWORD2>\r
+                       <KEYWORD2>openssl_x509_checkpurpose</KEYWORD2>\r
+                       <KEYWORD2>openssl_x509_export</KEYWORD2>\r
+                       <KEYWORD2>openssl_x509_export_to_file</KEYWORD2>\r
+                       <KEYWORD2>openssl_x509_free</KEYWORD2>\r
+                       <KEYWORD2>openssl_x509_parse</KEYWORD2>\r
+                       <KEYWORD2>openssl_x509_read</KEYWORD2>\r
+                       <KEYWORD2>ora_bind</KEYWORD2>\r
+                       <KEYWORD2>ora_close</KEYWORD2>\r
+                       <KEYWORD2>ora_columnname</KEYWORD2>\r
+                       <KEYWORD2>ora_columnsize</KEYWORD2>\r
+                       <KEYWORD2>ora_columntype</KEYWORD2>\r
+                       <KEYWORD2>ora_commit</KEYWORD2>\r
+                       <KEYWORD2>ora_commitoff</KEYWORD2>\r
+                       <KEYWORD2>ora_commiton</KEYWORD2>\r
+                       <KEYWORD2>ora_do</KEYWORD2>\r
+                       <KEYWORD2>ora_error</KEYWORD2>\r
+                       <KEYWORD2>ora_errorcode</KEYWORD2>\r
+                       <KEYWORD2>ora_exec</KEYWORD2>\r
+                       <KEYWORD2>ora_fetch</KEYWORD2>\r
+                       <KEYWORD2>ora_fetch_into</KEYWORD2>\r
+                       <KEYWORD2>ora_getcolumn</KEYWORD2>\r
+                       <KEYWORD2>ora_logoff</KEYWORD2>\r
+                       <KEYWORD2>ora_logon</KEYWORD2>\r
+                       <KEYWORD2>ora_numcols</KEYWORD2>\r
+                       <KEYWORD2>ora_numrows</KEYWORD2>\r
+                       <KEYWORD2>ora_open</KEYWORD2>\r
+                       <KEYWORD2>ora_parse</KEYWORD2>\r
+                       <KEYWORD2>ora_plogon</KEYWORD2>\r
+                       <KEYWORD2>ora_rollback</KEYWORD2>\r
+                       <KEYWORD2>ord</KEYWORD2>\r
+                       <KEYWORD2>output</KEYWORD2> <!-- swfmovie -->\r
+                       <KEYWORD2>output_add_rewrite_var</KEYWORD2>\r
+                       <KEYWORD2>output_reset_rewrite_vars</KEYWORD2>\r
+                       <KEYWORD2>overload</KEYWORD2>\r
+                       <KEYWORD2>override_function</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_close</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_commit</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_connect</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_cursor</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_exec</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_execute</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_fetch_into</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_field_len</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_field_name</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_field_num</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_field_type</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_free_result</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_longreadlen</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_num_fields</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_num_rows</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_prepare</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_result</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_result_all</KEYWORD2>\r
+                       <KEYWORD2>ovrimos_rollback</KEYWORD2>\r
+                       <KEYWORD2>owner_document</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>pack</KEYWORD2>\r
+                       <KEYWORD2>parent_node</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>parents</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>parse_ini_file</KEYWORD2>\r
+                       <KEYWORD2>parse_str</KEYWORD2>\r
+                       <KEYWORD2>parse_url</KEYWORD2>\r
+                       <KEYWORD2>parsekit_compile_file</KEYWORD2>\r
+                       <KEYWORD2>parsekit_compile_string</KEYWORD2>\r
+                       <KEYWORD2>parsekit_func_arginfo</KEYWORD2>\r
+                       <KEYWORD2>passthru</KEYWORD2>\r
+                       <KEYWORD2>pathinfo</KEYWORD2>\r
+                       <KEYWORD2>pclose</KEYWORD2>\r
+                       <KEYWORD2>pcntl_alarm</KEYWORD2>\r
+                       <KEYWORD2>pcntl_exec</KEYWORD2>\r
+                       <KEYWORD2>pcntl_fork</KEYWORD2>\r
+                       <KEYWORD2>pcntl_getpriority</KEYWORD2>\r
+                       <KEYWORD2>pcntl_setpriority</KEYWORD2>\r
+                       <KEYWORD2>pcntl_signal</KEYWORD2>\r
+                       <KEYWORD2>pcntl_wait</KEYWORD2>\r
+                       <KEYWORD2>pcntl_waitpid</KEYWORD2>\r
+                       <KEYWORD2>pcntl_wexitstatus</KEYWORD2>\r
+                       <KEYWORD2>pcntl_wifexited</KEYWORD2>\r
+                       <KEYWORD2>pcntl_wifsignaled</KEYWORD2>\r
+                       <KEYWORD2>pcntl_wifstopped</KEYWORD2>\r
+                       <KEYWORD2>pcntl_wstopsig</KEYWORD2>\r
+                       <KEYWORD2>pcntl_wtermsig</KEYWORD2>\r
+                       <KEYWORD2>pconnect</KEYWORD2> <!-- memcache -->\r
+                       <KEYWORD2>pdf_add_annotation</KEYWORD2>\r
+                       <KEYWORD2>pdf_add_bookmark</KEYWORD2>\r
+                       <KEYWORD2>pdf_add_launchlink</KEYWORD2>\r
+                       <KEYWORD2>pdf_add_locallink</KEYWORD2>\r
+                       <KEYWORD2>pdf_add_note</KEYWORD2>\r
+                       <KEYWORD2>pdf_add_outline</KEYWORD2>\r
+                       <KEYWORD2>pdf_add_pdflink</KEYWORD2>\r
+                       <KEYWORD2>pdf_add_thumbnail</KEYWORD2>\r
+                       <KEYWORD2>pdf_add_weblink</KEYWORD2>\r
+                       <KEYWORD2>pdf_arc</KEYWORD2>\r
+                       <KEYWORD2>pdf_arcn</KEYWORD2>\r
+                       <KEYWORD2>pdf_attach_file</KEYWORD2>\r
+                       <KEYWORD2>pdf_begin_page</KEYWORD2>\r
+                       <KEYWORD2>pdf_begin_pattern</KEYWORD2>\r
+                       <KEYWORD2>pdf_begin_template</KEYWORD2>\r
+                       <KEYWORD2>pdf_circle</KEYWORD2>\r
+                       <KEYWORD2>pdf_clip</KEYWORD2>\r
+                       <KEYWORD2>pdf_close</KEYWORD2>\r
+                       <KEYWORD2>pdf_close_image</KEYWORD2>\r
+                       <KEYWORD2>pdf_close_pdi</KEYWORD2>\r
+                       <KEYWORD2>pdf_close_pdi_page</KEYWORD2>\r
+                       <KEYWORD2>pdf_closepath</KEYWORD2>\r
+                       <KEYWORD2>pdf_closepath_fill_stroke</KEYWORD2>\r
+                       <KEYWORD2>pdf_closepath_stroke</KEYWORD2>\r
+                       <KEYWORD2>pdf_concat</KEYWORD2>\r
+                       <KEYWORD2>pdf_continue_text</KEYWORD2>\r
+                       <KEYWORD2>pdf_curveto</KEYWORD2>\r
+                       <KEYWORD2>pdf_delete</KEYWORD2>\r
+                       <KEYWORD2>pdf_end_page</KEYWORD2>\r
+                       <KEYWORD2>pdf_end_pattern</KEYWORD2>\r
+                       <KEYWORD2>pdf_end_template</KEYWORD2>\r
+                       <KEYWORD2>pdf_endpath</KEYWORD2>\r
+                       <KEYWORD2>pdf_fill</KEYWORD2>\r
+                       <KEYWORD2>pdf_fill_stroke</KEYWORD2>\r
+                       <KEYWORD2>pdf_findfont</KEYWORD2>\r
+                       <KEYWORD2>pdf_fit_pdi_page</KEYWORD2>\r
+                       <KEYWORD2>pdf_get_buffer</KEYWORD2>\r
+                       <KEYWORD2>pdf_get_font</KEYWORD2>\r
+                       <KEYWORD2>pdf_get_fontname</KEYWORD2>\r
+                       <KEYWORD2>pdf_get_fontsize</KEYWORD2>\r
+                       <KEYWORD2>pdf_get_image_height</KEYWORD2>\r
+                       <KEYWORD2>pdf_get_image_width</KEYWORD2>\r
+                       <KEYWORD2>pdf_get_majorversion</KEYWORD2>\r
+                       <KEYWORD2>pdf_get_minorversion</KEYWORD2>\r
+                       <KEYWORD2>pdf_get_parameter</KEYWORD2>\r
+                       <KEYWORD2>pdf_get_pdi_parameter</KEYWORD2>\r
+                       <KEYWORD2>pdf_get_pdi_value</KEYWORD2>\r
+                       <KEYWORD2>pdf_get_value</KEYWORD2>\r
+                       <KEYWORD2>pdf_initgraphics</KEYWORD2>\r
+                       <KEYWORD2>pdf_lineto</KEYWORD2>\r
+                       <KEYWORD2>pdf_load_font</KEYWORD2>\r
+                       <KEYWORD2>pdf_makespotcolor</KEYWORD2>\r
+                       <KEYWORD2>pdf_moveto</KEYWORD2>\r
+                       <KEYWORD2>pdf_new</KEYWORD2>\r
+                       <KEYWORD2>pdf_open</KEYWORD2>\r
+                       <KEYWORD2>pdf_open_ccitt</KEYWORD2>\r
+                       <KEYWORD2>pdf_open_file</KEYWORD2>\r
+                       <KEYWORD2>pdf_open_gif</KEYWORD2>\r
+                       <KEYWORD2>pdf_open_image</KEYWORD2>\r
+                       <KEYWORD2>pdf_open_image_file</KEYWORD2>\r
+                       <KEYWORD2>pdf_open_jpeg</KEYWORD2>\r
+                       <KEYWORD2>pdf_open_memory_image</KEYWORD2>\r
+                       <KEYWORD2>pdf_open_pdi</KEYWORD2>\r
+                       <KEYWORD2>pdf_open_pdi_page</KEYWORD2>\r
+                       <KEYWORD2>pdf_open_png</KEYWORD2>\r
+                       <KEYWORD2>pdf_open_tiff</KEYWORD2>\r
+                       <KEYWORD2>pdf_place_image</KEYWORD2>\r
+                       <KEYWORD2>pdf_place_pdi_page</KEYWORD2>\r
+                       <KEYWORD2>pdf_rect</KEYWORD2>\r
+                       <KEYWORD2>pdf_restore</KEYWORD2>\r
+                       <KEYWORD2>pdf_rotate</KEYWORD2>\r
+                       <KEYWORD2>pdf_save</KEYWORD2>\r
+                       <KEYWORD2>pdf_scale</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_border_color</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_border_dash</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_border_style</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_char_spacing</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_duration</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_font</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_horiz_scaling</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_info</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_info_author</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_info_creator</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_info_keywords</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_info_subject</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_info_title</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_leading</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_parameter</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_text_matrix</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_text_pos</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_text_rendering</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_text_rise</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_value</KEYWORD2>\r
+                       <KEYWORD2>pdf_set_word_spacing</KEYWORD2>\r
+                       <KEYWORD2>pdf_setcolor</KEYWORD2>\r
+                       <KEYWORD2>pdf_setdash</KEYWORD2>\r
+                       <KEYWORD2>pdf_setflat</KEYWORD2>\r
+                       <KEYWORD2>pdf_setfont</KEYWORD2>\r
+                       <KEYWORD2>pdf_setgray</KEYWORD2>\r
+                       <KEYWORD2>pdf_setgray_fill</KEYWORD2>\r
+                       <KEYWORD2>pdf_setgray_stroke</KEYWORD2>\r
+                       <KEYWORD2>pdf_setlinecap</KEYWORD2>\r
+                       <KEYWORD2>pdf_setlinejoin</KEYWORD2>\r
+                       <KEYWORD2>pdf_setlinewidth</KEYWORD2>\r
+                       <KEYWORD2>pdf_setmatrix</KEYWORD2>\r
+                       <KEYWORD2>pdf_setmiterlimit</KEYWORD2>\r
+                       <KEYWORD2>pdf_setpolydash</KEYWORD2>\r
+                       <KEYWORD2>pdf_setrgbcolor</KEYWORD2>\r
+                       <KEYWORD2>pdf_setrgbcolor_fill</KEYWORD2>\r
+                       <KEYWORD2>pdf_setrgbcolor_stroke</KEYWORD2>\r
+                       <KEYWORD2>pdf_show</KEYWORD2>\r
+                       <KEYWORD2>pdf_show_boxed</KEYWORD2>\r
+                       <KEYWORD2>pdf_show_xy</KEYWORD2>\r
+                       <KEYWORD2>pdf_skew</KEYWORD2>\r
+                       <KEYWORD2>pdf_stringwidth</KEYWORD2>\r
+                       <KEYWORD2>pdf_stroke</KEYWORD2>\r
+                       <KEYWORD2>pdf_translate</KEYWORD2>\r
+                       <KEYWORD2>pfpro_cleanup</KEYWORD2>\r
+                       <KEYWORD2>pfpro_init</KEYWORD2>\r
+                       <KEYWORD2>pfpro_process</KEYWORD2>\r
+                       <KEYWORD2>pfpro_process_raw</KEYWORD2>\r
+                       <KEYWORD2>pfpro_version</KEYWORD2>\r
+                       <KEYWORD2>pfsockopen</KEYWORD2>\r
+                       <KEYWORD2>pg_affected_rows</KEYWORD2>\r
+                       <KEYWORD2>pg_cancel_query</KEYWORD2>\r
+                       <KEYWORD2>pg_client_encoding</KEYWORD2>\r
+                       <KEYWORD2>pg_close</KEYWORD2>\r
+                       <KEYWORD2>pg_connect</KEYWORD2>\r
+                       <KEYWORD2>pg_connection_busy</KEYWORD2>\r
+                       <KEYWORD2>pg_connection_reset</KEYWORD2>\r
+                       <KEYWORD2>pg_connection_status</KEYWORD2>\r
+                       <KEYWORD2>pg_convert</KEYWORD2>\r
+                       <KEYWORD2>pg_copy_from</KEYWORD2>\r
+                       <KEYWORD2>pg_copy_to</KEYWORD2>\r
+                       <KEYWORD2>pg_dbname</KEYWORD2>\r
+                       <KEYWORD2>pg_delete</KEYWORD2>\r
+                       <KEYWORD2>pg_end_copy</KEYWORD2>\r
+                       <KEYWORD2>pg_escape_bytea</KEYWORD2>\r
+                       <KEYWORD2>pg_escape_string</KEYWORD2>\r
+                       <KEYWORD2>pg_fetch_all</KEYWORD2>\r
+                       <KEYWORD2>pg_fetch_array</KEYWORD2>\r
+                       <KEYWORD2>pg_fetch_assoc</KEYWORD2>\r
+                       <KEYWORD2>pg_fetch_object</KEYWORD2>\r
+                       <KEYWORD2>pg_fetch_result</KEYWORD2>\r
+                       <KEYWORD2>pg_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>pg_field_is_null</KEYWORD2>\r
+                       <KEYWORD2>pg_field_name</KEYWORD2>\r
+                       <KEYWORD2>pg_field_num</KEYWORD2>\r
+                       <KEYWORD2>pg_field_prtlen</KEYWORD2>\r
+                       <KEYWORD2>pg_field_size</KEYWORD2>\r
+                       <KEYWORD2>pg_field_type</KEYWORD2>\r
+                       <KEYWORD2>pg_free_result</KEYWORD2>\r
+                       <KEYWORD2>pg_get_notify</KEYWORD2>\r
+                       <KEYWORD2>pg_get_pid</KEYWORD2>\r
+                       <KEYWORD2>pg_get_result</KEYWORD2>\r
+                       <KEYWORD2>pg_host</KEYWORD2>\r
+                       <KEYWORD2>pg_insert</KEYWORD2>\r
+                       <KEYWORD2>pg_last_error</KEYWORD2>\r
+                       <KEYWORD2>pg_last_notice</KEYWORD2>\r
+                       <KEYWORD2>pg_last_oid</KEYWORD2>\r
+                       <KEYWORD2>pg_lo_close</KEYWORD2>\r
+                       <KEYWORD2>pg_lo_create</KEYWORD2>\r
+                       <KEYWORD2>pg_lo_export</KEYWORD2>\r
+                       <KEYWORD2>pg_lo_import</KEYWORD2>\r
+                       <KEYWORD2>pg_lo_open</KEYWORD2>\r
+                       <KEYWORD2>pg_lo_read</KEYWORD2>\r
+                       <KEYWORD2>pg_lo_read_all</KEYWORD2>\r
+                       <KEYWORD2>pg_lo_seek</KEYWORD2>\r
+                       <KEYWORD2>pg_lo_tell</KEYWORD2>\r
+                       <KEYWORD2>pg_lo_unlink</KEYWORD2>\r
+                       <KEYWORD2>pg_lo_write</KEYWORD2>\r
+                       <KEYWORD2>pg_meta_data</KEYWORD2>\r
+                       <KEYWORD2>pg_num_fields</KEYWORD2>\r
+                       <KEYWORD2>pg_num_rows</KEYWORD2>\r
+                       <KEYWORD2>pg_options</KEYWORD2>\r
+                       <KEYWORD2>pg_parameter_status</KEYWORD2>\r
+                       <KEYWORD2>pg_pconnect</KEYWORD2>\r
+                       <KEYWORD2>pg_ping</KEYWORD2>\r
+                       <KEYWORD2>pg_port</KEYWORD2>\r
+                       <KEYWORD2>pg_put_line</KEYWORD2>\r
+                       <KEYWORD2>pg_query</KEYWORD2>\r
+                       <KEYWORD2>pg_result_error</KEYWORD2>\r
+                       <KEYWORD2>pg_result_seek</KEYWORD2>\r
+                       <KEYWORD2>pg_result_status</KEYWORD2>\r
+                       <KEYWORD2>pg_select</KEYWORD2>\r
+                       <KEYWORD2>pg_send_query</KEYWORD2>\r
+                       <KEYWORD2>pg_set_client_encoding</KEYWORD2>\r
+                       <KEYWORD2>pg_trace</KEYWORD2>\r
+                       <KEYWORD2>pg_tty</KEYWORD2>\r
+                       <KEYWORD2>pg_unescape_bytea</KEYWORD2>\r
+                       <KEYWORD2>pg_untrace</KEYWORD2>\r
+                       <KEYWORD2>pg_update</KEYWORD2>\r
+                       <KEYWORD2>pg_version</KEYWORD2>\r
+                       <KEYWORD2>php_check_syntax</KEYWORD2>\r
+                       <KEYWORD2>php_ini_scanned_files</KEYWORD2>\r
+                       <KEYWORD2>php_logo_guid</KEYWORD2>\r
+                       <KEYWORD2>php_sapi_name</KEYWORD2>\r
+                       <KEYWORD2>php_strip_whitespace</KEYWORD2>\r
+                       <KEYWORD2>php_uname</KEYWORD2>\r
+                       <KEYWORD2>phpcredits</KEYWORD2>\r
+                       <KEYWORD2>phpinfo</KEYWORD2>\r
+                       <KEYWORD2>phpversion</KEYWORD2>\r
+                       <KEYWORD2>pi</KEYWORD2>\r
+                       <KEYWORD2>png2wbmp</KEYWORD2>\r
+                       <KEYWORD2>popen</KEYWORD2>\r
+                       <KEYWORD2>pos</KEYWORD2>\r
+                       <KEYWORD2>posix_ctermid</KEYWORD2>\r
+                       <KEYWORD2>posix_get_last_error</KEYWORD2>\r
+                       <KEYWORD2>posix_getcwd</KEYWORD2>\r
+                       <KEYWORD2>posix_getegid</KEYWORD2>\r
+                       <KEYWORD2>posix_geteuid</KEYWORD2>\r
+                       <KEYWORD2>posix_getgid</KEYWORD2>\r
+                       <KEYWORD2>posix_getgrgid</KEYWORD2>\r
+                       <KEYWORD2>posix_getgrnam</KEYWORD2>\r
+                       <KEYWORD2>posix_getgroups</KEYWORD2>\r
+                       <KEYWORD2>posix_getlogin</KEYWORD2>\r
+                       <KEYWORD2>posix_getpgid</KEYWORD2>\r
+                       <KEYWORD2>posix_getpgrp</KEYWORD2>\r
+                       <KEYWORD2>posix_getpid</KEYWORD2>\r
+                       <KEYWORD2>posix_getppid</KEYWORD2>\r
+                       <KEYWORD2>posix_getpwnam</KEYWORD2>\r
+                       <KEYWORD2>posix_getpwuid</KEYWORD2>\r
+                       <KEYWORD2>posix_getrlimit</KEYWORD2>\r
+                       <KEYWORD2>posix_getsid</KEYWORD2>\r
+                       <KEYWORD2>posix_getuid</KEYWORD2>\r
+                       <KEYWORD2>posix_isatty</KEYWORD2>\r
+                       <KEYWORD2>posix_kill</KEYWORD2>\r
+                       <KEYWORD2>posix_mkfifo</KEYWORD2>\r
+                       <KEYWORD2>posix_setegid</KEYWORD2>\r
+                       <KEYWORD2>posix_seteuid</KEYWORD2>\r
+                       <KEYWORD2>posix_setgid</KEYWORD2>\r
+                       <KEYWORD2>posix_setpgid</KEYWORD2>\r
+                       <KEYWORD2>posix_setsid</KEYWORD2>\r
+                       <KEYWORD2>posix_setuid</KEYWORD2>\r
+                       <KEYWORD2>posix_strerror</KEYWORD2>\r
+                       <KEYWORD2>posix_times</KEYWORD2>\r
+                       <KEYWORD2>posix_ttyname</KEYWORD2>\r
+                       <KEYWORD2>posix_uname</KEYWORD2>\r
+                       <KEYWORD2>pow</KEYWORD2>\r
+                       <KEYWORD2>prefix</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>preg_grep</KEYWORD2>\r
+                       <KEYWORD2>preg_match</KEYWORD2>\r
+                       <KEYWORD2>preg_match_all</KEYWORD2>\r
+                       <KEYWORD2>preg_quote</KEYWORD2>\r
+                       <KEYWORD2>preg_replace</KEYWORD2>\r
+                       <KEYWORD2>preg_replace_callback</KEYWORD2>\r
+                       <KEYWORD2>preg_split</KEYWORD2>\r
+                       <KEYWORD2>prepare</KEYWORD2> <!-- pdo -->\r
+                       <KEYWORD2>prev</KEYWORD2> <!-- tidy_node -->\r
+                       <KEYWORD2>previous_sibling</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>print_r</KEYWORD2>\r
+                       <KEYWORD2>printer_abort</KEYWORD2>\r
+                       <KEYWORD2>printer_close</KEYWORD2>\r
+                       <KEYWORD2>printer_create_brush</KEYWORD2>\r
+                       <KEYWORD2>printer_create_dc</KEYWORD2>\r
+                       <KEYWORD2>printer_create_font</KEYWORD2>\r
+                       <KEYWORD2>printer_create_pen</KEYWORD2>\r
+                       <KEYWORD2>printer_delete_brush</KEYWORD2>\r
+                       <KEYWORD2>printer_delete_dc</KEYWORD2>\r
+                       <KEYWORD2>printer_delete_font</KEYWORD2>\r
+                       <KEYWORD2>printer_delete_pen</KEYWORD2>\r
+                       <KEYWORD2>printer_draw_bmp</KEYWORD2>\r
+                       <KEYWORD2>printer_draw_chord</KEYWORD2>\r
+                       <KEYWORD2>printer_draw_elipse</KEYWORD2>\r
+                       <KEYWORD2>printer_draw_line</KEYWORD2>\r
+                       <KEYWORD2>printer_draw_pie</KEYWORD2>\r
+                       <KEYWORD2>printer_draw_rectangle</KEYWORD2>\r
+                       <KEYWORD2>printer_draw_roundrect</KEYWORD2>\r
+                       <KEYWORD2>printer_draw_text</KEYWORD2>\r
+                       <KEYWORD2>printer_end_doc</KEYWORD2>\r
+                       <KEYWORD2>printer_end_page</KEYWORD2>\r
+                       <KEYWORD2>printer_get_option</KEYWORD2>\r
+                       <KEYWORD2>printer_list</KEYWORD2>\r
+                       <KEYWORD2>printer_logical_fontheight</KEYWORD2>\r
+                       <KEYWORD2>printer_open</KEYWORD2>\r
+                       <KEYWORD2>printer_select_brush</KEYWORD2>\r
+                       <KEYWORD2>printer_select_font</KEYWORD2>\r
+                       <KEYWORD2>printer_select_pen</KEYWORD2>\r
+                       <KEYWORD2>printer_set_option</KEYWORD2>\r
+                       <KEYWORD2>printer_start_doc</KEYWORD2>\r
+                       <KEYWORD2>printer_start_page</KEYWORD2>\r
+                       <KEYWORD2>printer_write</KEYWORD2>\r
+                       <KEYWORD2>printf</KEYWORD2>\r
+                       <KEYWORD2>proc_close</KEYWORD2>\r
+                       <KEYWORD2>proc_get_status</KEYWORD2>\r
+                       <KEYWORD2>proc_nice</KEYWORD2>\r
+                       <KEYWORD2>proc_open</KEYWORD2>\r
+                       <KEYWORD2>proc_terminate</KEYWORD2>\r
+                       <KEYWORD2>process</KEYWORD2> <!-- domxsltstylesheet -->\r
+                       <KEYWORD2>pspell_add_to_personal</KEYWORD2>\r
+                       <KEYWORD2>pspell_add_to_session</KEYWORD2>\r
+                       <KEYWORD2>pspell_check</KEYWORD2>\r
+                       <KEYWORD2>pspell_clear_session</KEYWORD2>\r
+                       <KEYWORD2>pspell_config_create</KEYWORD2>\r
+                       <KEYWORD2>pspell_config_data_dir</KEYWORD2>\r
+                       <KEYWORD2>pspell_config_dict_dir</KEYWORD2>\r
+                       <KEYWORD2>pspell_config_ignore</KEYWORD2>\r
+                       <KEYWORD2>pspell_config_mode</KEYWORD2>\r
+                       <KEYWORD2>pspell_config_personal</KEYWORD2>\r
+                       <KEYWORD2>pspell_config_repl</KEYWORD2>\r
+                       <KEYWORD2>pspell_config_runtogether</KEYWORD2>\r
+                       <KEYWORD2>pspell_config_save_repl</KEYWORD2>\r
+                       <KEYWORD2>pspell_new</KEYWORD2>\r
+                       <KEYWORD2>pspell_new_config</KEYWORD2>\r
+                       <KEYWORD2>pspell_new_personal</KEYWORD2>\r
+                       <KEYWORD2>pspell_save_wordlist</KEYWORD2>\r
+                       <KEYWORD2>pspell_store_replacement</KEYWORD2>\r
+                       <KEYWORD2>pspell_suggest</KEYWORD2>\r
+                       <KEYWORD2>public_id</KEYWORD2> <!-- domdocumenttype -->\r
+                       <KEYWORD2>putenv</KEYWORD2>\r
+                       <KEYWORD2>qdom_error</KEYWORD2>\r
+                       <KEYWORD2>qdom_tree</KEYWORD2>\r
+                       <KEYWORD2>query</KEYWORD2> <!-- domxpath -->\r
+                       <KEYWORD2>quoted_printable_decode</KEYWORD2>\r
+                       <KEYWORD2>quotemeta</KEYWORD2>\r
+                       <KEYWORD2>rad2deg</KEYWORD2>\r
+                       <KEYWORD2>rand</KEYWORD2>\r
+                       <KEYWORD2>range</KEYWORD2>\r
+                       <KEYWORD2>rar_close</KEYWORD2>\r
+                       <KEYWORD2>rar_entry_get</KEYWORD2>\r
+                       <KEYWORD2>rar_list</KEYWORD2>\r
+                       <KEYWORD2>rar_open</KEYWORD2>\r
+                       <KEYWORD2>rawurldecode</KEYWORD2>\r
+                       <KEYWORD2>rawurlencode</KEYWORD2>\r
+                       <KEYWORD2>read</KEYWORD2> <!-- hw_api_content, lob -->\r
+                       <KEYWORD2>read_exif_data</KEYWORD2>\r
+                       <KEYWORD2>readdir</KEYWORD2>\r
+                       <KEYWORD2>readfile</KEYWORD2>\r
+                       <KEYWORD2>readgzfile</KEYWORD2>\r
+                       <KEYWORD2>readline</KEYWORD2>\r
+                       <KEYWORD2>readline_add_history</KEYWORD2>\r
+                       <KEYWORD2>readline_callback_handler_install</KEYWORD2>\r
+                       <KEYWORD2>readline_callback_handler_remove</KEYWORD2>\r
+                       <KEYWORD2>readline_callback_read_char</KEYWORD2>\r
+                       <KEYWORD2>readline_clear_history</KEYWORD2>\r
+                       <KEYWORD2>readline_completion_function</KEYWORD2>\r
+                       <KEYWORD2>readline_info</KEYWORD2>\r
+                       <KEYWORD2>readline_list_history</KEYWORD2>\r
+                       <KEYWORD2>readline_on_new_line</KEYWORD2>\r
+                       <KEYWORD2>readline_read_history</KEYWORD2>\r
+                       <KEYWORD2>readline_redisplay</KEYWORD2>\r
+                       <KEYWORD2>readline_write_history</KEYWORD2>\r
+                       <KEYWORD2>readlink</KEYWORD2>\r
+                       <KEYWORD2>realpath</KEYWORD2>\r
+                       <KEYWORD2>reason</KEYWORD2> <!-- hw_api_error -->\r
+                       <KEYWORD2>recode</KEYWORD2>\r
+                       <KEYWORD2>recode_file</KEYWORD2>\r
+                       <KEYWORD2>recode_string</KEYWORD2>\r
+                       <KEYWORD2>register_shutdown_function</KEYWORD2>\r
+                       <KEYWORD2>register_tick_function</KEYWORD2>\r
+                       <KEYWORD2>registernamespace</KEYWORD2> <!-- domxpath -->\r
+                       <KEYWORD2>relaxngvalidate</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>relaxngvalidatesource</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>remove</KEYWORD2> <!-- hw_api, hw_api_object, swfdisplayitem, swfmovie, swfsprite -->\r
+                       <KEYWORD2>remove_attribute</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>remove_child</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>removeattribute</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>removeattributenode</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>removeattributens</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>removechild</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>rename</KEYWORD2>\r
+                       <KEYWORD2>rename_function</KEYWORD2>\r
+                       <KEYWORD2>replace</KEYWORD2> <!-- hw_api, memcache -->\r
+                       <KEYWORD2>replace_child</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>replace_node</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>replacechild</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>replacedata</KEYWORD2> <!-- domcharacterdata -->\r
+                       <KEYWORD2>reset</KEYWORD2>\r
+                       <KEYWORD2>restore_error_handler</KEYWORD2>\r
+                       <KEYWORD2>restore_exception_handler</KEYWORD2>\r
+                       <KEYWORD2>restore_include_path</KEYWORD2>\r
+                       <KEYWORD2>result_dump_file</KEYWORD2> <!-- domxsltstylesheet -->\r
+                       <KEYWORD2>result_dump_mem</KEYWORD2> <!-- domxsltstylesheet -->\r
+                       <KEYWORD2>rewind</KEYWORD2> <!-- arrayiterator, cachingiterator, directoryiterator, filteriterator, limititerator, lob, parentiterator, recursivedirectoryiterator, recursiveiteratoriterator, simplexmliterator -->\r
+                       <KEYWORD2>rewinddir</KEYWORD2>\r
+                       <KEYWORD2>rmdir</KEYWORD2>\r
+                       <KEYWORD2>rollback</KEYWORD2> <!-- pdo -->\r
+                       <KEYWORD2>rotate</KEYWORD2> <!-- swfdisplayitem -->\r
+                       <KEYWORD2>rotateto</KEYWORD2> <!-- swfdisplayitem, swffill -->\r
+                       <KEYWORD2>round</KEYWORD2>\r
+                       <KEYWORD2>rowcount</KEYWORD2> <!-- pdostatement -->\r
+                       <KEYWORD2>rsort</KEYWORD2>\r
+                       <KEYWORD2>rtrim</KEYWORD2>\r
+                       <KEYWORD2>save</KEYWORD2> <!-- domdocument, lob, swfmovie -->\r
+                       <KEYWORD2>savehtml</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>savehtmlfile</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>savexml</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>scale</KEYWORD2> <!-- swfdisplayitem -->\r
+                       <KEYWORD2>scaleto</KEYWORD2> <!-- swfdisplayitem, swffill -->\r
+                       <KEYWORD2>scandir</KEYWORD2>\r
+                       <KEYWORD2>schemavalidate</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>schemavalidatesource</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>seek</KEYWORD2> <!-- arrayiterator, limititerator, lob -->\r
+                       <KEYWORD2>sem_acquire</KEYWORD2>\r
+                       <KEYWORD2>sem_get</KEYWORD2>\r
+                       <KEYWORD2>sem_release</KEYWORD2>\r
+                       <KEYWORD2>sem_remove</KEYWORD2>\r
+                       <KEYWORD2>serialize</KEYWORD2>\r
+                       <KEYWORD2>sesam_affected_rows</KEYWORD2>\r
+                       <KEYWORD2>sesam_commit</KEYWORD2>\r
+                       <KEYWORD2>sesam_connect</KEYWORD2>\r
+                       <KEYWORD2>sesam_diagnostic</KEYWORD2>\r
+                       <KEYWORD2>sesam_disconnect</KEYWORD2>\r
+                       <KEYWORD2>sesam_errormsg</KEYWORD2>\r
+                       <KEYWORD2>sesam_execimm</KEYWORD2>\r
+                       <KEYWORD2>sesam_fetch_array</KEYWORD2>\r
+                       <KEYWORD2>sesam_fetch_result</KEYWORD2>\r
+                       <KEYWORD2>sesam_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>sesam_field_array</KEYWORD2>\r
+                       <KEYWORD2>sesam_field_name</KEYWORD2>\r
+                       <KEYWORD2>sesam_free_result</KEYWORD2>\r
+                       <KEYWORD2>sesam_num_fields</KEYWORD2>\r
+                       <KEYWORD2>sesam_query</KEYWORD2>\r
+                       <KEYWORD2>sesam_rollback</KEYWORD2>\r
+                       <KEYWORD2>sesam_seek_row</KEYWORD2>\r
+                       <KEYWORD2>sesam_settransaction</KEYWORD2>\r
+                       <KEYWORD2>session_cache_expire</KEYWORD2>\r
+                       <KEYWORD2>session_cache_limiter</KEYWORD2>\r
+                       <KEYWORD2>session_commit</KEYWORD2>\r
+                       <KEYWORD2>session_decode</KEYWORD2>\r
+                       <KEYWORD2>session_destroy</KEYWORD2>\r
+                       <KEYWORD2>session_encode</KEYWORD2>\r
+                       <KEYWORD2>session_get_cookie_params</KEYWORD2>\r
+                       <KEYWORD2>session_id</KEYWORD2>\r
+                       <KEYWORD2>session_is_registered</KEYWORD2>\r
+                       <KEYWORD2>session_module_name</KEYWORD2>\r
+                       <KEYWORD2>session_name</KEYWORD2>\r
+                       <KEYWORD2>session_regenerate_id</KEYWORD2>\r
+                       <KEYWORD2>session_register</KEYWORD2>\r
+                       <KEYWORD2>session_save_path</KEYWORD2>\r
+                       <KEYWORD2>session_set_cookie_params</KEYWORD2>\r
+                       <KEYWORD2>session_set_save_handler</KEYWORD2>\r
+                       <KEYWORD2>session_start</KEYWORD2>\r
+                       <KEYWORD2>session_unregister</KEYWORD2>\r
+                       <KEYWORD2>session_unset</KEYWORD2>\r
+                       <KEYWORD2>session_write_close</KEYWORD2>\r
+                       <KEYWORD2>set</KEYWORD2> <!-- memcache -->\r
+                       <KEYWORD2>set_attribute</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>set_content</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>set_error_handler</KEYWORD2>\r
+                       <KEYWORD2>set_exception_handler</KEYWORD2>\r
+                       <KEYWORD2>set_file_buffer</KEYWORD2>\r
+                       <KEYWORD2>set_include_path</KEYWORD2>\r
+                       <KEYWORD2>set_magic_quotes_runtime</KEYWORD2>\r
+                       <KEYWORD2>set_name</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>set_namespace</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>set_time_limit</KEYWORD2>\r
+                       <KEYWORD2>setaction</KEYWORD2> <!-- swfbutton -->\r
+                       <KEYWORD2>setattribute</KEYWORD2> <!-- domelement, pdo -->\r
+                       <KEYWORD2>setattributenode</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>setattributenodens</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>setattributens</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>setbackground</KEYWORD2> <!-- swfmovie -->\r
+                       <KEYWORD2>setbounds</KEYWORD2> <!-- swftextfield -->\r
+                       <KEYWORD2>setbuffering</KEYWORD2> <!-- lob -->\r
+                       <KEYWORD2>setclass</KEYWORD2> <!-- soapserver -->\r
+                       <KEYWORD2>setcolor</KEYWORD2> <!-- swftext, swftextfield -->\r
+                       <KEYWORD2>setcommitedversion</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>setcookie</KEYWORD2>\r
+                       <KEYWORD2>setdepth</KEYWORD2> <!-- swfdisplayitem -->\r
+                       <KEYWORD2>setdimension</KEYWORD2> <!-- swfmovie -->\r
+                       <KEYWORD2>setdown</KEYWORD2> <!-- swfbutton -->\r
+                       <KEYWORD2>setfont</KEYWORD2> <!-- swftext, swftextfield -->\r
+                       <KEYWORD2>setframes</KEYWORD2> <!-- swfmovie, swfsprite -->\r
+                       <KEYWORD2>setheight</KEYWORD2> <!-- swftext, swftextfield -->\r
+                       <KEYWORD2>sethit</KEYWORD2> <!-- swfbutton -->\r
+                       <KEYWORD2>setindentation</KEYWORD2> <!-- swftextfield -->\r
+                       <KEYWORD2>setleftfill</KEYWORD2> <!-- swfshape -->\r
+                       <KEYWORD2>setleftmargin</KEYWORD2> <!-- swftextfield -->\r
+                       <KEYWORD2>setline</KEYWORD2> <!-- swfshape -->\r
+                       <KEYWORD2>setlinespacing</KEYWORD2> <!-- swftextfield -->\r
+                       <KEYWORD2>setlocale</KEYWORD2>\r
+                       <KEYWORD2>setmargins</KEYWORD2> <!-- swftextfield -->\r
+                       <KEYWORD2>setname</KEYWORD2> <!-- swfdisplayitem, swftextfield -->\r
+                       <KEYWORD2>setover</KEYWORD2> <!-- swfbutton -->\r
+                       <KEYWORD2>setpersistence</KEYWORD2> <!-- soapserver -->\r
+                       <KEYWORD2>setrate</KEYWORD2> <!-- swfmovie -->\r
+                       <KEYWORD2>setratio</KEYWORD2> <!-- swfdisplayitem -->\r
+                       <KEYWORD2>setrawcookie</KEYWORD2>\r
+                       <KEYWORD2>setrightfill</KEYWORD2> <!-- swfshape -->\r
+                       <KEYWORD2>setrightmargin</KEYWORD2> <!-- swftextfield -->\r
+                       <KEYWORD2>setspacing</KEYWORD2> <!-- swftext -->\r
+                       <KEYWORD2>settype</KEYWORD2>\r
+                       <KEYWORD2>setup</KEYWORD2> <!-- swfbutton -->\r
+                       <KEYWORD2>sha1</KEYWORD2>\r
+                       <KEYWORD2>sha1_file</KEYWORD2>\r
+                       <KEYWORD2>shell_exec</KEYWORD2>\r
+                       <KEYWORD2>shm_attach</KEYWORD2>\r
+                       <KEYWORD2>shm_detach</KEYWORD2>\r
+                       <KEYWORD2>shm_get_var</KEYWORD2>\r
+                       <KEYWORD2>shm_put_var</KEYWORD2>\r
+                       <KEYWORD2>shm_remove</KEYWORD2>\r
+                       <KEYWORD2>shm_remove_var</KEYWORD2>\r
+                       <KEYWORD2>shmop_close</KEYWORD2>\r
+                       <KEYWORD2>shmop_delete</KEYWORD2>\r
+                       <KEYWORD2>shmop_open</KEYWORD2>\r
+                       <KEYWORD2>shmop_read</KEYWORD2>\r
+                       <KEYWORD2>shmop_size</KEYWORD2>\r
+                       <KEYWORD2>shmop_write</KEYWORD2>\r
+                       <KEYWORD2>show_source</KEYWORD2>\r
+                       <KEYWORD2>shuffle</KEYWORD2>\r
+                       <KEYWORD2>similar_text</KEYWORD2>\r
+                       <KEYWORD2>simplexml_import_dom</KEYWORD2>\r
+                       <KEYWORD2>simplexml_load_file</KEYWORD2>\r
+                       <KEYWORD2>simplexml_load_string</KEYWORD2>\r
+                       <KEYWORD2>sin</KEYWORD2>\r
+                       <KEYWORD2>sinh</KEYWORD2>\r
+                       <KEYWORD2>size</KEYWORD2> <!-- collection, lob -->\r
+                       <KEYWORD2>sizeof</KEYWORD2>\r
+                       <KEYWORD2>skewx</KEYWORD2> <!-- swfdisplayitem -->\r
+                       <KEYWORD2>skewxto</KEYWORD2> <!-- swfdisplayitem, swffill -->\r
+                       <KEYWORD2>skewy</KEYWORD2> <!-- swfdisplayitem -->\r
+                       <KEYWORD2>skewyto</KEYWORD2> <!-- swfdisplayitem, swffill -->\r
+                       <KEYWORD2>sleep</KEYWORD2>\r
+                       <KEYWORD2>snmp_get_quick_print</KEYWORD2>\r
+                       <KEYWORD2>snmp_get_valueretrieval</KEYWORD2>\r
+                       <KEYWORD2>snmp_read_mib</KEYWORD2>\r
+                       <KEYWORD2>snmp_set_enum_print</KEYWORD2>\r
+                       <KEYWORD2>snmp_set_oid_numeric_print</KEYWORD2>\r
+                       <KEYWORD2>snmp_set_quick_print</KEYWORD2>\r
+                       <KEYWORD2>snmp_set_valueretrieval</KEYWORD2>\r
+                       <KEYWORD2>snmpget</KEYWORD2>\r
+                       <KEYWORD2>snmpgetnext</KEYWORD2>\r
+                       <KEYWORD2>snmprealwalk</KEYWORD2>\r
+                       <KEYWORD2>snmpset</KEYWORD2>\r
+                       <KEYWORD2>snmpwalk</KEYWORD2>\r
+                       <KEYWORD2>snmpwalkoid</KEYWORD2>\r
+                       <KEYWORD2>socket_accept</KEYWORD2>\r
+                       <KEYWORD2>socket_bind</KEYWORD2>\r
+                       <KEYWORD2>socket_clear_error</KEYWORD2>\r
+                       <KEYWORD2>socket_close</KEYWORD2>\r
+                       <KEYWORD2>socket_connect</KEYWORD2>\r
+                       <KEYWORD2>socket_create</KEYWORD2>\r
+                       <KEYWORD2>socket_create_listen</KEYWORD2>\r
+                       <KEYWORD2>socket_create_pair</KEYWORD2>\r
+                       <KEYWORD2>socket_get_option</KEYWORD2>\r
+                       <KEYWORD2>socket_get_status</KEYWORD2>\r
+                       <KEYWORD2>socket_getpeername</KEYWORD2>\r
+                       <KEYWORD2>socket_getsockname</KEYWORD2>\r
+                       <KEYWORD2>socket_last_error</KEYWORD2>\r
+                       <KEYWORD2>socket_listen</KEYWORD2>\r
+                       <KEYWORD2>socket_read</KEYWORD2>\r
+                       <KEYWORD2>socket_recv</KEYWORD2>\r
+                       <KEYWORD2>socket_recvfrom</KEYWORD2>\r
+                       <KEYWORD2>socket_select</KEYWORD2>\r
+                       <KEYWORD2>socket_send</KEYWORD2>\r
+                       <KEYWORD2>socket_sendto</KEYWORD2>\r
+                       <KEYWORD2>socket_set_block</KEYWORD2>\r
+                       <KEYWORD2>socket_set_blocking</KEYWORD2>\r
+                       <KEYWORD2>socket_set_nonblock</KEYWORD2>\r
+                       <KEYWORD2>socket_set_option</KEYWORD2>\r
+                       <KEYWORD2>socket_set_timeout</KEYWORD2>\r
+                       <KEYWORD2>socket_shutdown</KEYWORD2>\r
+                       <KEYWORD2>socket_strerror</KEYWORD2>\r
+                       <KEYWORD2>socket_write</KEYWORD2>\r
+                       <KEYWORD2>sort</KEYWORD2>\r
+                       <KEYWORD2>soundex</KEYWORD2>\r
+                       <KEYWORD2>specified</KEYWORD2> <!-- domattribute -->\r
+                       <KEYWORD2>spl_classes</KEYWORD2>\r
+                       <KEYWORD2>split</KEYWORD2>\r
+                       <KEYWORD2>spliti</KEYWORD2>\r
+                       <KEYWORD2>splittext</KEYWORD2> <!-- domtext -->\r
+                       <KEYWORD2>sprintf</KEYWORD2>\r
+                       <KEYWORD2>sql_regcase</KEYWORD2>\r
+                       <KEYWORD2>sqlite_array_query</KEYWORD2>\r
+                       <KEYWORD2>sqlite_busy_timeout</KEYWORD2>\r
+                       <KEYWORD2>sqlite_changes</KEYWORD2>\r
+                       <KEYWORD2>sqlite_close</KEYWORD2>\r
+                       <KEYWORD2>sqlite_column</KEYWORD2>\r
+                       <KEYWORD2>sqlite_create_aggregate</KEYWORD2>\r
+                       <KEYWORD2>sqlite_create_function</KEYWORD2>\r
+                       <KEYWORD2>sqlite_current</KEYWORD2>\r
+                       <KEYWORD2>sqlite_error_string</KEYWORD2>\r
+                       <KEYWORD2>sqlite_escape_string</KEYWORD2>\r
+                       <KEYWORD2>sqlite_exec</KEYWORD2>\r
+                       <KEYWORD2>sqlite_factory</KEYWORD2>\r
+                       <KEYWORD2>sqlite_fetch_all</KEYWORD2>\r
+                       <KEYWORD2>sqlite_fetch_array</KEYWORD2>\r
+                       <KEYWORD2>sqlite_fetch_column_types</KEYWORD2>\r
+                       <KEYWORD2>sqlite_fetch_object</KEYWORD2>\r
+                       <KEYWORD2>sqlite_fetch_single</KEYWORD2>\r
+                       <KEYWORD2>sqlite_fetch_string</KEYWORD2>\r
+                       <KEYWORD2>sqlite_field_name</KEYWORD2>\r
+                       <KEYWORD2>sqlite_has_more</KEYWORD2>\r
+                       <KEYWORD2>sqlite_has_prev</KEYWORD2>\r
+                       <KEYWORD2>sqlite_last_error</KEYWORD2>\r
+                       <KEYWORD2>sqlite_last_insert_rowid</KEYWORD2>\r
+                       <KEYWORD2>sqlite_libencoding</KEYWORD2>\r
+                       <KEYWORD2>sqlite_libversion</KEYWORD2>\r
+                       <KEYWORD2>sqlite_next</KEYWORD2>\r
+                       <KEYWORD2>sqlite_num_fields</KEYWORD2>\r
+                       <KEYWORD2>sqlite_num_rows</KEYWORD2>\r
+                       <KEYWORD2>sqlite_open</KEYWORD2>\r
+                       <KEYWORD2>sqlite_popen</KEYWORD2>\r
+                       <KEYWORD2>sqlite_prev</KEYWORD2>\r
+                       <KEYWORD2>sqlite_query</KEYWORD2>\r
+                       <KEYWORD2>sqlite_rewind</KEYWORD2>\r
+                       <KEYWORD2>sqlite_seek</KEYWORD2>\r
+                       <KEYWORD2>sqlite_single_query</KEYWORD2>\r
+                       <KEYWORD2>sqlite_udf_decode_binary</KEYWORD2>\r
+                       <KEYWORD2>sqlite_udf_encode_binary</KEYWORD2>\r
+                       <KEYWORD2>sqlite_unbuffered_query</KEYWORD2>\r
+                       <KEYWORD2>sqrt</KEYWORD2>\r
+                       <KEYWORD2>srand</KEYWORD2>\r
+                       <KEYWORD2>srcanchors</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>srcsofdst</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>sscanf</KEYWORD2>\r
+                       <KEYWORD2>stat</KEYWORD2>\r
+                       <KEYWORD2>str_ireplace</KEYWORD2>\r
+                       <KEYWORD2>str_pad</KEYWORD2>\r
+                       <KEYWORD2>str_repeat</KEYWORD2>\r
+                       <KEYWORD2>str_replace</KEYWORD2>\r
+                       <KEYWORD2>str_rot13</KEYWORD2>\r
+                       <KEYWORD2>str_shuffle</KEYWORD2>\r
+                       <KEYWORD2>str_split</KEYWORD2>\r
+                       <KEYWORD2>str_word_count</KEYWORD2>\r
+                       <KEYWORD2>strcasecmp</KEYWORD2>\r
+                       <KEYWORD2>strchr</KEYWORD2>\r
+                       <KEYWORD2>strcmp</KEYWORD2>\r
+                       <KEYWORD2>strcoll</KEYWORD2>\r
+                       <KEYWORD2>strcspn</KEYWORD2>\r
+                       <KEYWORD2>stream_context_create</KEYWORD2>\r
+                       <KEYWORD2>stream_context_get_default</KEYWORD2>\r
+                       <KEYWORD2>stream_context_get_options</KEYWORD2>\r
+                       <KEYWORD2>stream_context_set_option</KEYWORD2>\r
+                       <KEYWORD2>stream_context_set_params</KEYWORD2>\r
+                       <KEYWORD2>stream_copy_to_stream</KEYWORD2>\r
+                       <KEYWORD2>stream_filter_append</KEYWORD2>\r
+                       <KEYWORD2>stream_filter_prepend</KEYWORD2>\r
+                       <KEYWORD2>stream_filter_register</KEYWORD2>\r
+                       <KEYWORD2>stream_filter_remove</KEYWORD2>\r
+                       <KEYWORD2>stream_get_contents</KEYWORD2>\r
+                       <KEYWORD2>stream_get_filters</KEYWORD2>\r
+                       <KEYWORD2>stream_get_line</KEYWORD2>\r
+                       <KEYWORD2>stream_get_meta_data</KEYWORD2>\r
+                       <KEYWORD2>stream_get_transports</KEYWORD2>\r
+                       <KEYWORD2>stream_get_wrappers</KEYWORD2>\r
+                       <KEYWORD2>stream_register_wrapper</KEYWORD2>\r
+                       <KEYWORD2>stream_select</KEYWORD2>\r
+                       <KEYWORD2>stream_set_blocking</KEYWORD2>\r
+                       <KEYWORD2>stream_set_timeout</KEYWORD2>\r
+                       <KEYWORD2>stream_set_write_buffer</KEYWORD2>\r
+                       <KEYWORD2>stream_socket_accept</KEYWORD2>\r
+                       <KEYWORD2>stream_socket_client</KEYWORD2>\r
+                       <KEYWORD2>stream_socket_enable_crypto</KEYWORD2>\r
+                       <KEYWORD2>stream_socket_get_name</KEYWORD2>\r
+                       <KEYWORD2>stream_socket_recvfrom</KEYWORD2>\r
+                       <KEYWORD2>stream_socket_sendto</KEYWORD2>\r
+                       <KEYWORD2>stream_socket_server</KEYWORD2>\r
+                       <KEYWORD2>stream_wrapper_register</KEYWORD2>\r
+                       <KEYWORD2>stream_wrapper_restore</KEYWORD2>\r
+                       <KEYWORD2>stream_wrapper_unregister</KEYWORD2>\r
+                       <KEYWORD2>streammp3</KEYWORD2> <!-- swfmovie -->\r
+                       <KEYWORD2>strftime</KEYWORD2>\r
+                       <KEYWORD2>strip_tags</KEYWORD2>\r
+                       <KEYWORD2>stripcslashes</KEYWORD2>\r
+                       <KEYWORD2>stripos</KEYWORD2>\r
+                       <KEYWORD2>stripslashes</KEYWORD2>\r
+                       <KEYWORD2>stristr</KEYWORD2>\r
+                       <KEYWORD2>strlen</KEYWORD2>\r
+                       <KEYWORD2>strnatcasecmp</KEYWORD2>\r
+                       <KEYWORD2>strnatcmp</KEYWORD2>\r
+                       <KEYWORD2>strncasecmp</KEYWORD2>\r
+                       <KEYWORD2>strncmp</KEYWORD2>\r
+                       <KEYWORD2>strpbrk</KEYWORD2>\r
+                       <KEYWORD2>strpos</KEYWORD2>\r
+                       <KEYWORD2>strptime</KEYWORD2>\r
+                       <KEYWORD2>strrchr</KEYWORD2>\r
+                       <KEYWORD2>strrev</KEYWORD2>\r
+                       <KEYWORD2>strripos</KEYWORD2>\r
+                       <KEYWORD2>strrpos</KEYWORD2>\r
+                       <KEYWORD2>strspn</KEYWORD2>\r
+                       <KEYWORD2>strstr</KEYWORD2>\r
+                       <KEYWORD2>strtok</KEYWORD2>\r
+                       <KEYWORD2>strtolower</KEYWORD2>\r
+                       <KEYWORD2>strtotime</KEYWORD2>\r
+                       <KEYWORD2>strtoupper</KEYWORD2>\r
+                       <KEYWORD2>strtr</KEYWORD2>\r
+                       <KEYWORD2>strval</KEYWORD2>\r
+                       <KEYWORD2>substr</KEYWORD2>\r
+                       <KEYWORD2>substr_compare</KEYWORD2>\r
+                       <KEYWORD2>substr_count</KEYWORD2>\r
+                       <KEYWORD2>substr_replace</KEYWORD2>\r
+                       <KEYWORD2>substringdata</KEYWORD2> <!-- domcharacterdata -->\r
+                       <KEYWORD2>swf_actiongeturl</KEYWORD2>\r
+                       <KEYWORD2>swf_actiongotoframe</KEYWORD2>\r
+                       <KEYWORD2>swf_actiongotolabel</KEYWORD2>\r
+                       <KEYWORD2>swf_actionnextframe</KEYWORD2>\r
+                       <KEYWORD2>swf_actionplay</KEYWORD2>\r
+                       <KEYWORD2>swf_actionprevframe</KEYWORD2>\r
+                       <KEYWORD2>swf_actionsettarget</KEYWORD2>\r
+                       <KEYWORD2>swf_actionstop</KEYWORD2>\r
+                       <KEYWORD2>swf_actiontogglequality</KEYWORD2>\r
+                       <KEYWORD2>swf_actionwaitforframe</KEYWORD2>\r
+                       <KEYWORD2>swf_addbuttonrecord</KEYWORD2>\r
+                       <KEYWORD2>swf_addcolor</KEYWORD2>\r
+                       <KEYWORD2>swf_closefile</KEYWORD2>\r
+                       <KEYWORD2>swf_definebitmap</KEYWORD2>\r
+                       <KEYWORD2>swf_definefont</KEYWORD2>\r
+                       <KEYWORD2>swf_defineline</KEYWORD2>\r
+                       <KEYWORD2>swf_definepoly</KEYWORD2>\r
+                       <KEYWORD2>swf_definerect</KEYWORD2>\r
+                       <KEYWORD2>swf_definetext</KEYWORD2>\r
+                       <KEYWORD2>swf_endbutton</KEYWORD2>\r
+                       <KEYWORD2>swf_enddoaction</KEYWORD2>\r
+                       <KEYWORD2>swf_endshape</KEYWORD2>\r
+                       <KEYWORD2>swf_endsymbol</KEYWORD2>\r
+                       <KEYWORD2>swf_fontsize</KEYWORD2>\r
+                       <KEYWORD2>swf_fontslant</KEYWORD2>\r
+                       <KEYWORD2>swf_fonttracking</KEYWORD2>\r
+                       <KEYWORD2>swf_getbitmapinfo</KEYWORD2>\r
+                       <KEYWORD2>swf_getfontinfo</KEYWORD2>\r
+                       <KEYWORD2>swf_getframe</KEYWORD2>\r
+                       <KEYWORD2>swf_labelframe</KEYWORD2>\r
+                       <KEYWORD2>swf_lookat</KEYWORD2>\r
+                       <KEYWORD2>swf_modifyobject</KEYWORD2>\r
+                       <KEYWORD2>swf_mulcolor</KEYWORD2>\r
+                       <KEYWORD2>swf_nextid</KEYWORD2>\r
+                       <KEYWORD2>swf_oncondition</KEYWORD2>\r
+                       <KEYWORD2>swf_openfile</KEYWORD2>\r
+                       <KEYWORD2>swf_ortho</KEYWORD2>\r
+                       <KEYWORD2>swf_ortho2</KEYWORD2>\r
+                       <KEYWORD2>swf_perspective</KEYWORD2>\r
+                       <KEYWORD2>swf_placeobject</KEYWORD2>\r
+                       <KEYWORD2>swf_polarview</KEYWORD2>\r
+                       <KEYWORD2>swf_popmatrix</KEYWORD2>\r
+                       <KEYWORD2>swf_posround</KEYWORD2>\r
+                       <KEYWORD2>swf_pushmatrix</KEYWORD2>\r
+                       <KEYWORD2>swf_removeobject</KEYWORD2>\r
+                       <KEYWORD2>swf_rotate</KEYWORD2>\r
+                       <KEYWORD2>swf_scale</KEYWORD2>\r
+                       <KEYWORD2>swf_setfont</KEYWORD2>\r
+                       <KEYWORD2>swf_setframe</KEYWORD2>\r
+                       <KEYWORD2>swf_shapearc</KEYWORD2>\r
+                       <KEYWORD2>swf_shapecurveto</KEYWORD2>\r
+                       <KEYWORD2>swf_shapecurveto3</KEYWORD2>\r
+                       <KEYWORD2>swf_shapefillbitmapclip</KEYWORD2>\r
+                       <KEYWORD2>swf_shapefillbitmaptile</KEYWORD2>\r
+                       <KEYWORD2>swf_shapefilloff</KEYWORD2>\r
+                       <KEYWORD2>swf_shapefillsolid</KEYWORD2>\r
+                       <KEYWORD2>swf_shapelinesolid</KEYWORD2>\r
+                       <KEYWORD2>swf_shapelineto</KEYWORD2>\r
+                       <KEYWORD2>swf_shapemoveto</KEYWORD2>\r
+                       <KEYWORD2>swf_showframe</KEYWORD2>\r
+                       <KEYWORD2>swf_startbutton</KEYWORD2>\r
+                       <KEYWORD2>swf_startdoaction</KEYWORD2>\r
+                       <KEYWORD2>swf_startshape</KEYWORD2>\r
+                       <KEYWORD2>swf_startsymbol</KEYWORD2>\r
+                       <KEYWORD2>swf_textwidth</KEYWORD2>\r
+                       <KEYWORD2>swf_translate</KEYWORD2>\r
+                       <KEYWORD2>swf_viewport</KEYWORD2>\r
+                       <KEYWORD2>swfbutton_keypress</KEYWORD2>\r
+                       <KEYWORD2>sybase_affected_rows</KEYWORD2>\r
+                       <KEYWORD2>sybase_close</KEYWORD2>\r
+                       <KEYWORD2>sybase_connect</KEYWORD2>\r
+                       <KEYWORD2>sybase_data_seek</KEYWORD2>\r
+                       <KEYWORD2>sybase_deadlock_retry_count</KEYWORD2>\r
+                       <KEYWORD2>sybase_fetch_array</KEYWORD2>\r
+                       <KEYWORD2>sybase_fetch_assoc</KEYWORD2>\r
+                       <KEYWORD2>sybase_fetch_field</KEYWORD2>\r
+                       <KEYWORD2>sybase_fetch_object</KEYWORD2>\r
+                       <KEYWORD2>sybase_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>sybase_field_seek</KEYWORD2>\r
+                       <KEYWORD2>sybase_free_result</KEYWORD2>\r
+                       <KEYWORD2>sybase_get_last_message</KEYWORD2>\r
+                       <KEYWORD2>sybase_min_client_severity</KEYWORD2>\r
+                       <KEYWORD2>sybase_min_error_severity</KEYWORD2>\r
+                       <KEYWORD2>sybase_min_message_severity</KEYWORD2>\r
+                       <KEYWORD2>sybase_min_server_severity</KEYWORD2>\r
+                       <KEYWORD2>sybase_num_fields</KEYWORD2>\r
+                       <KEYWORD2>sybase_num_rows</KEYWORD2>\r
+                       <KEYWORD2>sybase_pconnect</KEYWORD2>\r
+                       <KEYWORD2>sybase_query</KEYWORD2>\r
+                       <KEYWORD2>sybase_result</KEYWORD2>\r
+                       <KEYWORD2>sybase_select_db</KEYWORD2>\r
+                       <KEYWORD2>sybase_set_message_handler</KEYWORD2>\r
+                       <KEYWORD2>sybase_unbuffered_query</KEYWORD2>\r
+                       <KEYWORD2>symlink</KEYWORD2>\r
+                       <KEYWORD2>syslog</KEYWORD2>\r
+                       <KEYWORD2>system</KEYWORD2>\r
+                       <KEYWORD2>system_id</KEYWORD2> <!-- domdocumenttype -->\r
+                       <KEYWORD2>tagname</KEYWORD2> <!-- domelement -->\r
+                       <KEYWORD2>tan</KEYWORD2>\r
+                       <KEYWORD2>tanh</KEYWORD2>\r
+                       <KEYWORD2>target</KEYWORD2> <!-- domprocessinginstruction -->\r
+                       <KEYWORD2>tcpwrap_check</KEYWORD2>\r
+                       <KEYWORD2>tell</KEYWORD2> <!-- lob -->\r
+                       <KEYWORD2>tempnam</KEYWORD2>\r
+                       <KEYWORD2>textdomain</KEYWORD2>\r
+                       <KEYWORD2>tidy_access_count</KEYWORD2>\r
+                       <KEYWORD2>tidy_clean_repair</KEYWORD2>\r
+                       <KEYWORD2>tidy_config_count</KEYWORD2>\r
+                       <KEYWORD2>tidy_diagnose</KEYWORD2>\r
+                       <KEYWORD2>tidy_error_count</KEYWORD2>\r
+                       <KEYWORD2>tidy_get_body</KEYWORD2>\r
+                       <KEYWORD2>tidy_get_config</KEYWORD2>\r
+                       <KEYWORD2>tidy_get_error_buffer</KEYWORD2>\r
+                       <KEYWORD2>tidy_get_head</KEYWORD2>\r
+                       <KEYWORD2>tidy_get_html</KEYWORD2>\r
+                       <KEYWORD2>tidy_get_html_ver</KEYWORD2>\r
+                       <KEYWORD2>tidy_get_output</KEYWORD2>\r
+                       <KEYWORD2>tidy_get_release</KEYWORD2>\r
+                       <KEYWORD2>tidy_get_root</KEYWORD2>\r
+                       <KEYWORD2>tidy_get_status</KEYWORD2>\r
+                       <KEYWORD2>tidy_getopt</KEYWORD2>\r
+                       <KEYWORD2>tidy_is_xhtml</KEYWORD2>\r
+                       <KEYWORD2>tidy_is_xml</KEYWORD2>\r
+                       <KEYWORD2>tidy_load_config</KEYWORD2>\r
+                       <KEYWORD2>tidy_parse_file</KEYWORD2>\r
+                       <KEYWORD2>tidy_parse_string</KEYWORD2>\r
+                       <KEYWORD2>tidy_repair_file</KEYWORD2>\r
+                       <KEYWORD2>tidy_repair_string</KEYWORD2>\r
+                       <KEYWORD2>tidy_reset_config</KEYWORD2>\r
+                       <KEYWORD2>tidy_save_config</KEYWORD2>\r
+                       <KEYWORD2>tidy_set_encoding</KEYWORD2>\r
+                       <KEYWORD2>tidy_setopt</KEYWORD2>\r
+                       <KEYWORD2>tidy_warning_count</KEYWORD2>\r
+                       <KEYWORD2>time</KEYWORD2>\r
+                       <KEYWORD2>time_nanosleep</KEYWORD2>\r
+                       <KEYWORD2>title</KEYWORD2> <!-- hw_api_object -->\r
+                       <KEYWORD2>tmpfile</KEYWORD2>\r
+                       <KEYWORD2>token_get_all</KEYWORD2>\r
+                       <KEYWORD2>token_name</KEYWORD2>\r
+                       <KEYWORD2>touch</KEYWORD2>\r
+                       <KEYWORD2>trigger_error</KEYWORD2>\r
+                       <KEYWORD2>trim</KEYWORD2> <!-- collection -->\r
+                       <KEYWORD2>truncate</KEYWORD2> <!-- lob -->\r
+                       <KEYWORD2>type</KEYWORD2> <!-- hw_api_reason -->\r
+                       <KEYWORD2>uasort</KEYWORD2>\r
+                       <KEYWORD2>ucfirst</KEYWORD2>\r
+                       <KEYWORD2>ucwords</KEYWORD2>\r
+                       <KEYWORD2>udm_add_search_limit</KEYWORD2>\r
+                       <KEYWORD2>udm_alloc_agent</KEYWORD2>\r
+                       <KEYWORD2>udm_alloc_agent_array</KEYWORD2>\r
+                       <KEYWORD2>udm_api_version</KEYWORD2>\r
+                       <KEYWORD2>udm_cat_list</KEYWORD2>\r
+                       <KEYWORD2>udm_cat_path</KEYWORD2>\r
+                       <KEYWORD2>udm_check_charset</KEYWORD2>\r
+                       <KEYWORD2>udm_check_stored</KEYWORD2>\r
+                       <KEYWORD2>udm_clear_search_limits</KEYWORD2>\r
+                       <KEYWORD2>udm_close_stored</KEYWORD2>\r
+                       <KEYWORD2>udm_crc32</KEYWORD2>\r
+                       <KEYWORD2>udm_errno</KEYWORD2>\r
+                       <KEYWORD2>udm_error</KEYWORD2>\r
+                       <KEYWORD2>udm_find</KEYWORD2>\r
+                       <KEYWORD2>udm_free_agent</KEYWORD2>\r
+                       <KEYWORD2>udm_free_ispell_data</KEYWORD2>\r
+                       <KEYWORD2>udm_free_res</KEYWORD2>\r
+                       <KEYWORD2>udm_get_doc_count</KEYWORD2>\r
+                       <KEYWORD2>udm_get_res_field</KEYWORD2>\r
+                       <KEYWORD2>udm_get_res_param</KEYWORD2>\r
+                       <KEYWORD2>udm_hash32</KEYWORD2>\r
+                       <KEYWORD2>udm_load_ispell_data</KEYWORD2>\r
+                       <KEYWORD2>udm_open_stored</KEYWORD2>\r
+                       <KEYWORD2>udm_set_agent_param</KEYWORD2>\r
+                       <KEYWORD2>uksort</KEYWORD2>\r
+                       <KEYWORD2>umask</KEYWORD2>\r
+                       <KEYWORD2>uniqid</KEYWORD2>\r
+                       <KEYWORD2>unixtojd</KEYWORD2>\r
+                       <KEYWORD2>unlink</KEYWORD2>\r
+                       <KEYWORD2>unlink_node</KEYWORD2> <!-- domnode -->\r
+                       <KEYWORD2>unlock</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>unpack</KEYWORD2>\r
+                       <KEYWORD2>unregister_tick_function</KEYWORD2>\r
+                       <KEYWORD2>unserialize</KEYWORD2>\r
+                       <KEYWORD2>urldecode</KEYWORD2>\r
+                       <KEYWORD2>urlencode</KEYWORD2>\r
+                       <KEYWORD2>user</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>user_error</KEYWORD2>\r
+                       <KEYWORD2>userlist</KEYWORD2> <!-- hw_api -->\r
+                       <KEYWORD2>usleep</KEYWORD2>\r
+                       <KEYWORD2>usort</KEYWORD2>\r
+                       <KEYWORD2>utf8_decode</KEYWORD2>\r
+                       <KEYWORD2>utf8_encode</KEYWORD2>\r
+                       <KEYWORD2>valid</KEYWORD2> <!-- arrayiterator, cachingiterator, directoryiterator, filteriterator, limititerator, recursiveiteratoriterator, simplexmliterator -->\r
+                       <KEYWORD2>validate</KEYWORD2> <!-- domdocument -->\r
+                       <KEYWORD2>value</KEYWORD2> <!-- domattribute, hw_api_attribute, hw_api_object -->\r
+                       <KEYWORD2>values</KEYWORD2> <!-- hw_api_attribute -->\r
+                       <KEYWORD2>var_dump</KEYWORD2>\r
+                       <KEYWORD2>var_export</KEYWORD2>\r
+                       <KEYWORD2>variant_abs</KEYWORD2>\r
+                       <KEYWORD2>variant_add</KEYWORD2>\r
+                       <KEYWORD2>variant_and</KEYWORD2>\r
+                       <KEYWORD2>variant_cast</KEYWORD2>\r
+                       <KEYWORD2>variant_cat</KEYWORD2>\r
+                       <KEYWORD2>variant_cmp</KEYWORD2>\r
+                       <KEYWORD2>variant_date_from_timestamp</KEYWORD2>\r
+                       <KEYWORD2>variant_date_to_timestamp</KEYWORD2>\r
+                       <KEYWORD2>variant_div</KEYWORD2>\r
+                       <KEYWORD2>variant_eqv</KEYWORD2>\r
+                       <KEYWORD2>variant_fix</KEYWORD2>\r
+                       <KEYWORD2>variant_get_type</KEYWORD2>\r
+                       <KEYWORD2>variant_idiv</KEYWORD2>\r
+                       <KEYWORD2>variant_imp</KEYWORD2>\r
+                       <KEYWORD2>variant_int</KEYWORD2>\r
+                       <KEYWORD2>variant_mod</KEYWORD2>\r
+                       <KEYWORD2>variant_mul</KEYWORD2>\r
+                       <KEYWORD2>variant_neg</KEYWORD2>\r
+                       <KEYWORD2>variant_not</KEYWORD2>\r
+                       <KEYWORD2>variant_or</KEYWORD2>\r
+                       <KEYWORD2>variant_pow</KEYWORD2>\r
+                       <KEYWORD2>variant_round</KEYWORD2>\r
+                       <KEYWORD2>variant_set</KEYWORD2>\r
+                       <KEYWORD2>variant_set_type</KEYWORD2>\r
+                       <KEYWORD2>variant_sub</KEYWORD2>\r
+                       <KEYWORD2>variant_xor</KEYWORD2>\r
+                       <KEYWORD2>version_compare</KEYWORD2>\r
+                       <KEYWORD2>vfprintf</KEYWORD2>\r
+                       <KEYWORD2>virtual</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_add_alias_domain</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_add_alias_domain_ex</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_add_domain</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_add_domain_ex</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_add_user</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_alias_add</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_alias_del</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_alias_del_domain</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_alias_get</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_alias_get_all</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_auth_user</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_del_domain</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_del_domain_ex</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_del_user</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_error</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_passwd</KEYWORD2>\r
+                       <KEYWORD2>vpopmail_set_user_quota</KEYWORD2>\r
+                       <KEYWORD2>vprintf</KEYWORD2>\r
+                       <KEYWORD2>vsprintf</KEYWORD2>\r
+                       <KEYWORD2>w32api_deftype</KEYWORD2>\r
+                       <KEYWORD2>w32api_init_dtype</KEYWORD2>\r
+                       <KEYWORD2>w32api_invoke_function</KEYWORD2>\r
+                       <KEYWORD2>w32api_register_function</KEYWORD2>\r
+                       <KEYWORD2>w32api_set_call_method</KEYWORD2>\r
+                       <KEYWORD2>wddx_add_vars</KEYWORD2>\r
+                       <KEYWORD2>wddx_deserialize</KEYWORD2>\r
+                       <KEYWORD2>wddx_packet_end</KEYWORD2>\r
+                       <KEYWORD2>wddx_packet_start</KEYWORD2>\r
+                       <KEYWORD2>wddx_serialize_value</KEYWORD2>\r
+                       <KEYWORD2>wddx_serialize_vars</KEYWORD2>\r
+                       <KEYWORD2>wordwrap</KEYWORD2>\r
+                       <KEYWORD2>write</KEYWORD2> <!-- lob -->\r
+                       <KEYWORD2>writetemporary</KEYWORD2> <!-- lob -->\r
+                       <KEYWORD2>xattr_get</KEYWORD2>\r
+                       <KEYWORD2>xattr_list</KEYWORD2>\r
+                       <KEYWORD2>xattr_remove</KEYWORD2>\r
+                       <KEYWORD2>xattr_set</KEYWORD2>\r
+                       <KEYWORD2>xattr_supported</KEYWORD2>\r
+                       <KEYWORD2>xdiff_file_diff</KEYWORD2>\r
+                       <KEYWORD2>xdiff_file_diff_binary</KEYWORD2>\r
+                       <KEYWORD2>xdiff_file_merge3</KEYWORD2>\r
+                       <KEYWORD2>xdiff_file_patch</KEYWORD2>\r
+                       <KEYWORD2>xdiff_file_patch_binary</KEYWORD2>\r
+                       <KEYWORD2>xdiff_string_diff</KEYWORD2>\r
+                       <KEYWORD2>xdiff_string_diff_binary</KEYWORD2>\r
+                       <KEYWORD2>xdiff_string_merge3</KEYWORD2>\r
+                       <KEYWORD2>xdiff_string_patch</KEYWORD2>\r
+                       <KEYWORD2>xdiff_string_patch_binary</KEYWORD2>\r
+                       <KEYWORD2>xinclude</KEYWORD2> <!-- domdocument, domdocument -->\r
+                       <KEYWORD2>xml_error_string</KEYWORD2>\r
+                       <KEYWORD2>xml_get_current_byte_index</KEYWORD2>\r
+                       <KEYWORD2>xml_get_current_column_number</KEYWORD2>\r
+                       <KEYWORD2>xml_get_current_line_number</KEYWORD2>\r
+                       <KEYWORD2>xml_get_error_code</KEYWORD2>\r
+                       <KEYWORD2>xml_parse</KEYWORD2>\r
+                       <KEYWORD2>xml_parse_into_struct</KEYWORD2>\r
+                       <KEYWORD2>xml_parser_create</KEYWORD2>\r
+                       <KEYWORD2>xml_parser_create_ns</KEYWORD2>\r
+                       <KEYWORD2>xml_parser_free</KEYWORD2>\r
+                       <KEYWORD2>xml_parser_get_option</KEYWORD2>\r
+                       <KEYWORD2>xml_parser_set_option</KEYWORD2>\r
+                       <KEYWORD2>xml_set_character_data_handler</KEYWORD2>\r
+                       <KEYWORD2>xml_set_default_handler</KEYWORD2>\r
+                       <KEYWORD2>xml_set_element_handler</KEYWORD2>\r
+                       <KEYWORD2>xml_set_end_namespace_decl_handler</KEYWORD2>\r
+                       <KEYWORD2>xml_set_external_entity_ref_handler</KEYWORD2>\r
+                       <KEYWORD2>xml_set_notation_decl_handler</KEYWORD2>\r
+                       <KEYWORD2>xml_set_object</KEYWORD2>\r
+                       <KEYWORD2>xml_set_processing_instruction_handler</KEYWORD2>\r
+                       <KEYWORD2>xml_set_start_namespace_decl_handler</KEYWORD2>\r
+                       <KEYWORD2>xml_set_unparsed_entity_decl_handler</KEYWORD2>\r
+                       <KEYWORD2>xmlrpc_decode</KEYWORD2>\r
+                       <KEYWORD2>xmlrpc_decode_request</KEYWORD2>\r
+                       <KEYWORD2>xmlrpc_encode</KEYWORD2>\r
+                       <KEYWORD2>xmlrpc_encode_request</KEYWORD2>\r
+                       <KEYWORD2>xmlrpc_get_type</KEYWORD2>\r
+                       <KEYWORD2>xmlrpc_is_fault</KEYWORD2>\r
+                       <KEYWORD2>xmlrpc_parse_method_descriptions</KEYWORD2>\r
+                       <KEYWORD2>xmlrpc_server_add_introspection_data</KEYWORD2>\r
+                       <KEYWORD2>xmlrpc_server_call_method</KEYWORD2>\r
+                       <KEYWORD2>xmlrpc_server_create</KEYWORD2>\r
+                       <KEYWORD2>xmlrpc_server_destroy</KEYWORD2>\r
+                       <KEYWORD2>xmlrpc_server_register_introspection_callback</KEYWORD2>\r
+                       <KEYWORD2>xmlrpc_server_register_method</KEYWORD2>\r
+                       <KEYWORD2>xmlrpc_set_type</KEYWORD2>\r
+                       <KEYWORD2>xpath</KEYWORD2> <!-- simplexmlelement -->\r
+                       <KEYWORD2>xpath_eval</KEYWORD2>\r
+                       <KEYWORD2>xpath_eval_expression</KEYWORD2>\r
+                       <KEYWORD2>xpath_new_context</KEYWORD2>\r
+                       <KEYWORD2>xptr_eval</KEYWORD2>\r
+                       <KEYWORD2>xptr_new_context</KEYWORD2>\r
+                       <KEYWORD2>xsl_xsltprocessor_get_parameter</KEYWORD2>\r
+                       <KEYWORD2>xsl_xsltprocessor_has_exslt_support</KEYWORD2>\r
+                       <KEYWORD2>xsl_xsltprocessor_import_stylesheet</KEYWORD2>\r
+                       <KEYWORD2>xsl_xsltprocessor_register_php_functions</KEYWORD2>\r
+                       <KEYWORD2>xsl_xsltprocessor_remove_parameter</KEYWORD2>\r
+                       <KEYWORD2>xsl_xsltprocessor_set_parameter</KEYWORD2>\r
+                       <KEYWORD2>xsl_xsltprocessor_transform_to_doc</KEYWORD2>\r
+                       <KEYWORD2>xsl_xsltprocessor_transform_to_uri</KEYWORD2>\r
+                       <KEYWORD2>xsl_xsltprocessor_transform_to_xml</KEYWORD2>\r
+                       <KEYWORD2>xslt_backend_info</KEYWORD2>\r
+                       <KEYWORD2>xslt_backend_name</KEYWORD2>\r
+                       <KEYWORD2>xslt_backend_version</KEYWORD2>\r
+                       <KEYWORD2>xslt_create</KEYWORD2>\r
+                       <KEYWORD2>xslt_errno</KEYWORD2>\r
+                       <KEYWORD2>xslt_error</KEYWORD2>\r
+                       <KEYWORD2>xslt_free</KEYWORD2>\r
+                       <KEYWORD2>xslt_getopt</KEYWORD2>\r
+                       <KEYWORD2>xslt_process</KEYWORD2>\r
+                       <KEYWORD2>xslt_set_base</KEYWORD2>\r
+                       <KEYWORD2>xslt_set_encoding</KEYWORD2>\r
+                       <KEYWORD2>xslt_set_error_handler</KEYWORD2>\r
+                       <KEYWORD2>xslt_set_log</KEYWORD2>\r
+                       <KEYWORD2>xslt_set_object</KEYWORD2>\r
+                       <KEYWORD2>xslt_set_sax_handler</KEYWORD2>\r
+                       <KEYWORD2>xslt_set_sax_handlers</KEYWORD2>\r
+                       <KEYWORD2>xslt_set_scheme_handler</KEYWORD2>\r
+                       <KEYWORD2>xslt_set_scheme_handlers</KEYWORD2>\r
+                       <KEYWORD2>xslt_setopt</KEYWORD2>\r
+                       <KEYWORD2>yaz_addinfo</KEYWORD2>\r
+                       <KEYWORD2>yaz_ccl_conf</KEYWORD2>\r
+                       <KEYWORD2>yaz_ccl_parse</KEYWORD2>\r
+                       <KEYWORD2>yaz_close</KEYWORD2>\r
+                       <KEYWORD2>yaz_connect</KEYWORD2>\r
+                       <KEYWORD2>yaz_database</KEYWORD2>\r
+                       <KEYWORD2>yaz_element</KEYWORD2>\r
+                       <KEYWORD2>yaz_errno</KEYWORD2>\r
+                       <KEYWORD2>yaz_error</KEYWORD2>\r
+                       <KEYWORD2>yaz_es_result</KEYWORD2>\r
+                       <KEYWORD2>yaz_get_option</KEYWORD2>\r
+                       <KEYWORD2>yaz_hits</KEYWORD2>\r
+                       <KEYWORD2>yaz_itemorder</KEYWORD2>\r
+                       <KEYWORD2>yaz_present</KEYWORD2>\r
+                       <KEYWORD2>yaz_range</KEYWORD2>\r
+                       <KEYWORD2>yaz_record</KEYWORD2>\r
+                       <KEYWORD2>yaz_scan</KEYWORD2>\r
+                       <KEYWORD2>yaz_scan_result</KEYWORD2>\r
+                       <KEYWORD2>yaz_schema</KEYWORD2>\r
+                       <KEYWORD2>yaz_search</KEYWORD2>\r
+                       <KEYWORD2>yaz_set_option</KEYWORD2>\r
+                       <KEYWORD2>yaz_sort</KEYWORD2>\r
+                       <KEYWORD2>yaz_syntax</KEYWORD2>\r
+                       <KEYWORD2>yaz_wait</KEYWORD2>\r
+                       <KEYWORD2>yp_all</KEYWORD2>\r
+                       <KEYWORD2>yp_cat</KEYWORD2>\r
+                       <KEYWORD2>yp_err_string</KEYWORD2>\r
+                       <KEYWORD2>yp_errno</KEYWORD2>\r
+                       <KEYWORD2>yp_first</KEYWORD2>\r
+                       <KEYWORD2>yp_get_default_domain</KEYWORD2>\r
+                       <KEYWORD2>yp_master</KEYWORD2>\r
+                       <KEYWORD2>yp_match</KEYWORD2>\r
+                       <KEYWORD2>yp_next</KEYWORD2>\r
+                       <KEYWORD2>yp_order</KEYWORD2>\r
+                       <KEYWORD2>zend_logo_guid</KEYWORD2>\r
+                       <KEYWORD2>zend_version</KEYWORD2>\r
+                       <KEYWORD2>zip_close</KEYWORD2>\r
+                       <KEYWORD2>zip_entry_close</KEYWORD2>\r
+                       <KEYWORD2>zip_entry_compressedsize</KEYWORD2>\r
+                       <KEYWORD2>zip_entry_compressionmethod</KEYWORD2>\r
+                       <KEYWORD2>zip_entry_filesize</KEYWORD2>\r
+                       <KEYWORD2>zip_entry_name</KEYWORD2>\r
+                       <KEYWORD2>zip_entry_open</KEYWORD2>\r
+                       <KEYWORD2>zip_entry_read</KEYWORD2>\r
+                       <KEYWORD2>zip_open</KEYWORD2>\r
+                       <KEYWORD2>zip_read</KEYWORD2>\r
+                       <KEYWORD2>zlib_get_coding_type</KEYWORD2>\r
+\r
+\r
+                       <!-- Alias functions (343)\r
+                               http://zend.com/phpfunc/all_aliases.php -->\r
+                       <KEYWORD2>apache_request_headers</KEYWORD2>\r
+                       <KEYWORD2>apache_response_headers</KEYWORD2>\r
+                       <KEYWORD2>attr_get</KEYWORD2>\r
+                       <KEYWORD2>attr_set</KEYWORD2>\r
+                       <KEYWORD2>autocommit</KEYWORD2>\r
+                       <KEYWORD2>bind_param</KEYWORD2>\r
+                       <KEYWORD2>bind_result</KEYWORD2>\r
+                       <KEYWORD2>bzclose</KEYWORD2>\r
+                       <KEYWORD2>bzflush</KEYWORD2>\r
+                       <KEYWORD2>bzwrite</KEYWORD2>\r
+                       <KEYWORD2>change_user</KEYWORD2>\r
+                       <KEYWORD2>character_set_name</KEYWORD2>\r
+                       <KEYWORD2>checkdnsrr</KEYWORD2>\r
+                       <KEYWORD2>chop</KEYWORD2>\r
+                       <KEYWORD2>client_encoding</KEYWORD2>\r
+                       <KEYWORD2>close</KEYWORD2>\r
+                       <KEYWORD2>commit</KEYWORD2>\r
+                       <KEYWORD2>connect</KEYWORD2>\r
+                       <KEYWORD2>data_seek</KEYWORD2>\r
+                       <KEYWORD2>debug</KEYWORD2>\r
+                       <KEYWORD2>disable_reads_from_master</KEYWORD2>\r
+                       <KEYWORD2>disable_rpl_parse</KEYWORD2>\r
+                       <KEYWORD2>diskfreespace</KEYWORD2>\r
+                       <KEYWORD2>doubleval</KEYWORD2>\r
+                       <KEYWORD2>dump_debug_info</KEYWORD2>\r
+                       <KEYWORD2>enable_reads_from_master</KEYWORD2>\r
+                       <KEYWORD2>enable_rpl_parse</KEYWORD2>\r
+                       <KEYWORD2>escape_string</KEYWORD2>\r
+                       <KEYWORD2>execute</KEYWORD2>\r
+                       <KEYWORD2>fbird_add_user</KEYWORD2>\r
+                       <KEYWORD2>fbird_affected_rows</KEYWORD2>\r
+                       <KEYWORD2>fbird_backup</KEYWORD2>\r
+                       <KEYWORD2>fbird_blob_add</KEYWORD2>\r
+                       <KEYWORD2>fbird_blob_cancel</KEYWORD2>\r
+                       <KEYWORD2>fbird_blob_close</KEYWORD2>\r
+                       <KEYWORD2>fbird_blob_create</KEYWORD2>\r
+                       <KEYWORD2>fbird_blob_echo</KEYWORD2>\r
+                       <KEYWORD2>fbird_blob_get</KEYWORD2>\r
+                       <KEYWORD2>fbird_blob_import</KEYWORD2>\r
+                       <KEYWORD2>fbird_blob_info</KEYWORD2>\r
+                       <KEYWORD2>fbird_blob_open</KEYWORD2>\r
+                       <KEYWORD2>fbird_close</KEYWORD2>\r
+                       <KEYWORD2>fbird_commit</KEYWORD2>\r
+                       <KEYWORD2>fbird_commit_ret</KEYWORD2>\r
+                       <KEYWORD2>fbird_connect</KEYWORD2>\r
+                       <KEYWORD2>fbird_db_info</KEYWORD2>\r
+                       <KEYWORD2>fbird_delete_user</KEYWORD2>\r
+                       <KEYWORD2>fbird_drop_db</KEYWORD2>\r
+                       <KEYWORD2>fbird_errcode</KEYWORD2>\r
+                       <KEYWORD2>fbird_errmsg</KEYWORD2>\r
+                       <KEYWORD2>fbird_execute</KEYWORD2>\r
+                       <KEYWORD2>fbird_fetch_assoc</KEYWORD2>\r
+                       <KEYWORD2>fbird_fetch_object</KEYWORD2>\r
+                       <KEYWORD2>fbird_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>fbird_field_info</KEYWORD2>\r
+                       <KEYWORD2>fbird_free_event_handler</KEYWORD2>\r
+                       <KEYWORD2>fbird_free_query</KEYWORD2>\r
+                       <KEYWORD2>fbird_free_result</KEYWORD2>\r
+                       <KEYWORD2>fbird_gen_id</KEYWORD2>\r
+                       <KEYWORD2>fbird_maintain_db</KEYWORD2>\r
+                       <KEYWORD2>fbird_modify_user</KEYWORD2>\r
+                       <KEYWORD2>fbird_name_result</KEYWORD2>\r
+                       <KEYWORD2>fbird_num_fields</KEYWORD2>\r
+                       <KEYWORD2>fbird_num_params</KEYWORD2>\r
+                       <KEYWORD2>fbird_num_rows</KEYWORD2>\r
+                       <KEYWORD2>fbird_param_info</KEYWORD2>\r
+                       <KEYWORD2>fbird_pconnect</KEYWORD2>\r
+                       <KEYWORD2>fbird_prepare</KEYWORD2>\r
+                       <KEYWORD2>fbird_query</KEYWORD2>\r
+                       <KEYWORD2>fbird_restore</KEYWORD2>\r
+                       <KEYWORD2>fbird_rollback</KEYWORD2>\r
+                       <KEYWORD2>fbird_rollback_ret</KEYWORD2>\r
+                       <KEYWORD2>fbird_server_info</KEYWORD2>\r
+                       <KEYWORD2>fbird_service_attach</KEYWORD2>\r
+                       <KEYWORD2>fbird_service_detach</KEYWORD2>\r
+                       <KEYWORD2>fbird_set_event_handler</KEYWORD2>\r
+                       <KEYWORD2>fbird_trans</KEYWORD2>\r
+                       <KEYWORD2>fbird_wait_event</KEYWORD2>\r
+                       <KEYWORD2>fbsql</KEYWORD2>\r
+                       <KEYWORD2>fbsql_tablename</KEYWORD2>\r
+                       <KEYWORD2>fetch</KEYWORD2>\r
+                       <KEYWORD2>fetch_array</KEYWORD2>\r
+                       <KEYWORD2>fetch_assoc</KEYWORD2>\r
+                       <KEYWORD2>fetch_field</KEYWORD2>\r
+                       <KEYWORD2>fetch_field_direct</KEYWORD2>\r
+                       <KEYWORD2>fetch_fields</KEYWORD2>\r
+                       <KEYWORD2>fetch_object</KEYWORD2>\r
+                       <KEYWORD2>fetch_row</KEYWORD2>\r
+                       <KEYWORD2>field_count</KEYWORD2>\r
+                       <KEYWORD2>field_seek</KEYWORD2>\r
+                       <KEYWORD2>fputs</KEYWORD2>\r
+                       <KEYWORD2>free</KEYWORD2>\r
+                       <KEYWORD2>free_result</KEYWORD2>\r
+                       <KEYWORD2>ftp_quit</KEYWORD2>\r
+                       <KEYWORD2>get_client_info</KEYWORD2>\r
+                       <KEYWORD2>get_required_files</KEYWORD2>\r
+                       <KEYWORD2>get_server_info</KEYWORD2>\r
+                       <KEYWORD2>getallheaders</KEYWORD2>\r
+                       <KEYWORD2>getmxrr</KEYWORD2>\r
+                       <KEYWORD2>gmp_div</KEYWORD2>\r
+                       <KEYWORD2>gzclose</KEYWORD2>\r
+                       <KEYWORD2>gzeof</KEYWORD2>\r
+                       <KEYWORD2>gzgetc</KEYWORD2>\r
+                       <KEYWORD2>gzgets</KEYWORD2>\r
+                       <KEYWORD2>gzgetss</KEYWORD2>\r
+                       <KEYWORD2>gzpassthru</KEYWORD2>\r
+                       <KEYWORD2>gzputs</KEYWORD2>\r
+                       <KEYWORD2>gzread</KEYWORD2>\r
+                       <KEYWORD2>gzrewind</KEYWORD2>\r
+                       <KEYWORD2>gzseek</KEYWORD2>\r
+                       <KEYWORD2>gztell</KEYWORD2>\r
+                       <KEYWORD2>gzwrite</KEYWORD2>\r
+                       <KEYWORD2>imap_create</KEYWORD2>\r
+                       <KEYWORD2>imap_fetchtext</KEYWORD2>\r
+                       <KEYWORD2>imap_header</KEYWORD2>\r
+                       <KEYWORD2>imap_listmailbox</KEYWORD2>\r
+                       <KEYWORD2>imap_listsubscribed</KEYWORD2>\r
+                       <KEYWORD2>imap_rename</KEYWORD2>\r
+                       <KEYWORD2>ini_alter</KEYWORD2>\r
+                       <KEYWORD2>init</KEYWORD2>\r
+                       <KEYWORD2>is_double</KEYWORD2>\r
+                       <KEYWORD2>is_int</KEYWORD2>\r
+                       <KEYWORD2>is_integer</KEYWORD2>\r
+                       <KEYWORD2>is_real</KEYWORD2>\r
+                       <KEYWORD2>is_writeable</KEYWORD2>\r
+                       <KEYWORD2>join</KEYWORD2>\r
+                       <KEYWORD2>key_exists</KEYWORD2>\r
+                       <KEYWORD2>kill</KEYWORD2>\r
+                       <KEYWORD2>ldap_close</KEYWORD2>\r
+                       <KEYWORD2>ldap_modify</KEYWORD2>\r
+                       <KEYWORD2>magic_quotes_runtime</KEYWORD2>\r
+                       <KEYWORD2>master_query</KEYWORD2>\r
+                       <KEYWORD2>ming_keypress</KEYWORD2>\r
+                       <KEYWORD2>ming_setcubicthreshold</KEYWORD2>\r
+                       <KEYWORD2>ming_setscale</KEYWORD2>\r
+                       <KEYWORD2>ming_useconstants</KEYWORD2>\r
+                       <KEYWORD2>ming_useswfversion</KEYWORD2>\r
+                       <KEYWORD2>more_results</KEYWORD2>\r
+                       <KEYWORD2>msql</KEYWORD2>\r
+                       <KEYWORD2>msql_affected_rows</KEYWORD2>\r
+                       <KEYWORD2>msql_createdb</KEYWORD2>\r
+                       <KEYWORD2>msql_dbname</KEYWORD2>\r
+                       <KEYWORD2>msql_dropdb</KEYWORD2>\r
+                       <KEYWORD2>msql_fieldflags</KEYWORD2>\r
+                       <KEYWORD2>msql_fieldlen</KEYWORD2>\r
+                       <KEYWORD2>msql_fieldname</KEYWORD2>\r
+                       <KEYWORD2>msql_fieldtable</KEYWORD2>\r
+                       <KEYWORD2>msql_fieldtype</KEYWORD2>\r
+                       <KEYWORD2>msql_freeresult</KEYWORD2>\r
+                       <KEYWORD2>msql_listdbs</KEYWORD2>\r
+                       <KEYWORD2>msql_listfields</KEYWORD2>\r
+                       <KEYWORD2>msql_listtables</KEYWORD2>\r
+                       <KEYWORD2>msql_numfields</KEYWORD2>\r
+                       <KEYWORD2>msql_numrows</KEYWORD2>\r
+                       <KEYWORD2>msql_regcase</KEYWORD2>\r
+                       <KEYWORD2>msql_selectdb</KEYWORD2>\r
+                       <KEYWORD2>msql_tablename</KEYWORD2>\r
+                       <KEYWORD2>mssql_affected_rows</KEYWORD2>\r
+                       <KEYWORD2>mssql_close</KEYWORD2>\r
+                       <KEYWORD2>mssql_connect</KEYWORD2>\r
+                       <KEYWORD2>mssql_data_seek</KEYWORD2>\r
+                       <KEYWORD2>mssql_deadlock_retry_count</KEYWORD2>\r
+                       <KEYWORD2>mssql_fetch_array</KEYWORD2>\r
+                       <KEYWORD2>mssql_fetch_assoc</KEYWORD2>\r
+                       <KEYWORD2>mssql_fetch_field</KEYWORD2>\r
+                       <KEYWORD2>mssql_fetch_object</KEYWORD2>\r
+                       <KEYWORD2>mssql_fetch_row</KEYWORD2>\r
+                       <KEYWORD2>mssql_field_seek</KEYWORD2>\r
+                       <KEYWORD2>mssql_free_result</KEYWORD2>\r
+                       <KEYWORD2>mssql_get_last_message</KEYWORD2>\r
+                       <KEYWORD2>mssql_min_client_severity</KEYWORD2>\r
+                       <KEYWORD2>mssql_min_error_severity</KEYWORD2>\r
+                       <KEYWORD2>mssql_min_message_severity</KEYWORD2>\r
+                       <KEYWORD2>mssql_min_server_severity</KEYWORD2>\r
+                       <KEYWORD2>mssql_num_fields</KEYWORD2>\r
+                       <KEYWORD2>mssql_num_rows</KEYWORD2>\r
+                       <KEYWORD2>mssql_pconnect</KEYWORD2>\r
+                       <KEYWORD2>mssql_query</KEYWORD2>\r
+                       <KEYWORD2>mssql_result</KEYWORD2>\r
+                       <KEYWORD2>mssql_select_db</KEYWORD2>\r
+                       <KEYWORD2>mssql_set_message_handler</KEYWORD2>\r
+                       <KEYWORD2>mssql_unbuffered_query</KEYWORD2>\r
+                       <KEYWORD2>multi_query</KEYWORD2>\r
+                       <KEYWORD2>mysql</KEYWORD2>\r
+                       <KEYWORD2>mysql_createdb</KEYWORD2>\r
+                       <KEYWORD2>mysql_db_name</KEYWORD2>\r
+                       <KEYWORD2>mysql_dbname</KEYWORD2>\r
+                       <KEYWORD2>mysql_dropdb</KEYWORD2>\r
+                       <KEYWORD2>mysql_fieldflags</KEYWORD2>\r
+                       <KEYWORD2>mysql_fieldlen</KEYWORD2>\r
+                       <KEYWORD2>mysql_fieldname</KEYWORD2>\r
+                       <KEYWORD2>mysql_fieldtable</KEYWORD2>\r
+                       <KEYWORD2>mysql_fieldtype</KEYWORD2>\r
+                       <KEYWORD2>mysql_freeresult</KEYWORD2>\r
+                       <KEYWORD2>mysql_listdbs</KEYWORD2>\r
+                       <KEYWORD2>mysql_listfields</KEYWORD2>\r
+                       <KEYWORD2>mysql_listtables</KEYWORD2>\r
+                       <KEYWORD2>mysql_numfields</KEYWORD2>\r
+                       <KEYWORD2>mysql_numrows</KEYWORD2>\r
+                       <KEYWORD2>mysql_selectdb</KEYWORD2>\r
+                       <KEYWORD2>mysql_table_name</KEYWORD2>\r
+                       <KEYWORD2>mysql_tablename</KEYWORD2>\r
+                       <KEYWORD2>mysqli</KEYWORD2>\r
+                       <KEYWORD2>mysqli_execute</KEYWORD2>\r
+                       <KEYWORD2>mysqli_fetch</KEYWORD2>\r
+                       <KEYWORD2>mysqli_set_opt</KEYWORD2>\r
+                       <KEYWORD2>next_result</KEYWORD2>\r
+                       <KEYWORD2>num_rows</KEYWORD2>\r
+                       <KEYWORD2>oci_free_cursor</KEYWORD2>\r
+                       <KEYWORD2>ocibindbyname</KEYWORD2>\r
+                       <KEYWORD2>ocicancel</KEYWORD2>\r
+                       <KEYWORD2>ocicollappend</KEYWORD2>\r
+                       <KEYWORD2>ocicollassignelem</KEYWORD2>\r
+                       <KEYWORD2>ocicollgetelem</KEYWORD2>\r
+                       <KEYWORD2>ocicollmax</KEYWORD2>\r
+                       <KEYWORD2>ocicollsize</KEYWORD2>\r
+                       <KEYWORD2>ocicolltrim</KEYWORD2>\r
+                       <KEYWORD2>ocicolumnisnull</KEYWORD2>\r
+                       <KEYWORD2>ocicolumnname</KEYWORD2>\r
+                       <KEYWORD2>ocicolumnprecision</KEYWORD2>\r
+                       <KEYWORD2>ocicolumnscale</KEYWORD2>\r
+                       <KEYWORD2>ocicolumnsize</KEYWORD2>\r
+                       <KEYWORD2>ocicolumntype</KEYWORD2>\r
+                       <KEYWORD2>ocicolumntyperaw</KEYWORD2>\r
+                       <KEYWORD2>ocicommit</KEYWORD2>\r
+                       <KEYWORD2>ocidefinebyname</KEYWORD2>\r
+                       <KEYWORD2>ocierror</KEYWORD2>\r
+                       <KEYWORD2>ociexecute</KEYWORD2>\r
+                       <KEYWORD2>ocifetch</KEYWORD2>\r
+                       <KEYWORD2>ocifetchstatement</KEYWORD2>\r
+                       <KEYWORD2>ocifreecollection</KEYWORD2>\r
+                       <KEYWORD2>ocifreecursor</KEYWORD2>\r
+                       <KEYWORD2>ocifreedesc</KEYWORD2>\r
+                       <KEYWORD2>ocifreestatement</KEYWORD2>\r
+                       <KEYWORD2>ociinternaldebug</KEYWORD2>\r
+                       <KEYWORD2>ociloadlob</KEYWORD2>\r
+                       <KEYWORD2>ocilogoff</KEYWORD2>\r
+                       <KEYWORD2>ocilogon</KEYWORD2>\r
+                       <KEYWORD2>ocinewcollection</KEYWORD2>\r
+                       <KEYWORD2>ocinewcursor</KEYWORD2>\r
+                       <KEYWORD2>ocinewdescriptor</KEYWORD2>\r
+                       <KEYWORD2>ocinlogon</KEYWORD2>\r
+                       <KEYWORD2>ocinumcols</KEYWORD2>\r
+                       <KEYWORD2>ociparse</KEYWORD2>\r
+                       <KEYWORD2>ocipasswordchange</KEYWORD2>\r
+                       <KEYWORD2>ociplogon</KEYWORD2>\r
+                       <KEYWORD2>ociresult</KEYWORD2>\r
+                       <KEYWORD2>ocirollback</KEYWORD2>\r
+                       <KEYWORD2>ocirowcount</KEYWORD2>\r
+                       <KEYWORD2>ocisavelob</KEYWORD2>\r
+                       <KEYWORD2>ocisavelobfile</KEYWORD2>\r
+                       <KEYWORD2>ociserverversion</KEYWORD2>\r
+                       <KEYWORD2>ocisetprefetch</KEYWORD2>\r
+                       <KEYWORD2>ocistatementtype</KEYWORD2>\r
+                       <KEYWORD2>ociwritelobtofile</KEYWORD2>\r
+                       <KEYWORD2>odbc_do</KEYWORD2>\r
+                       <KEYWORD2>odbc_field_precision</KEYWORD2>\r
+                       <KEYWORD2>openssl_free_key</KEYWORD2>\r
+                       <KEYWORD2>openssl_get_privatekey</KEYWORD2>\r
+                       <KEYWORD2>openssl_get_publickey</KEYWORD2>\r
+                       <KEYWORD2>options</KEYWORD2>\r
+                       <KEYWORD2>pg_clientencoding</KEYWORD2>\r
+                       <KEYWORD2>pg_cmdtuples</KEYWORD2>\r
+                       <KEYWORD2>pg_errormessage</KEYWORD2>\r
+                       <KEYWORD2>pg_exec</KEYWORD2>\r
+                       <KEYWORD2>pg_fieldisnull</KEYWORD2>\r
+                       <KEYWORD2>pg_fieldname</KEYWORD2>\r
+                       <KEYWORD2>pg_fieldnum</KEYWORD2>\r
+                       <KEYWORD2>pg_fieldprtlen</KEYWORD2>\r
+                       <KEYWORD2>pg_fieldsize</KEYWORD2>\r
+                       <KEYWORD2>pg_fieldtype</KEYWORD2>\r
+                       <KEYWORD2>pg_freeresult</KEYWORD2>\r
+                       <KEYWORD2>pg_getlastoid</KEYWORD2>\r
+                       <KEYWORD2>pg_loclose</KEYWORD2>\r
+                       <KEYWORD2>pg_locreate</KEYWORD2>\r
+                       <KEYWORD2>pg_loexport</KEYWORD2>\r
+                       <KEYWORD2>pg_loimport</KEYWORD2>\r
+                       <KEYWORD2>pg_loopen</KEYWORD2>\r
+                       <KEYWORD2>pg_loread</KEYWORD2>\r
+                       <KEYWORD2>pg_loreadall</KEYWORD2>\r
+                       <KEYWORD2>pg_lounlink</KEYWORD2>\r
+                       <KEYWORD2>pg_lowrite</KEYWORD2>\r
+                       <KEYWORD2>pg_numfields</KEYWORD2>\r
+                       <KEYWORD2>pg_numrows</KEYWORD2>\r
+                       <KEYWORD2>pg_result</KEYWORD2>\r
+                       <KEYWORD2>pg_setclientencoding</KEYWORD2>\r
+                       <KEYWORD2>ping</KEYWORD2>\r
+                       <KEYWORD2>pos</KEYWORD2>\r
+                       <KEYWORD2>posix_errno</KEYWORD2>\r
+                       <KEYWORD2>prepare</KEYWORD2>\r
+                       <KEYWORD2>query</KEYWORD2>\r
+                       <KEYWORD2>read_exif_data</KEYWORD2>\r
+                       <KEYWORD2>real_connect</KEYWORD2>\r
+                       <KEYWORD2>real_escape_string</KEYWORD2>\r
+                       <KEYWORD2>real_query</KEYWORD2>\r
+                       <KEYWORD2>recode</KEYWORD2>\r
+                       <KEYWORD2>reset</KEYWORD2>\r
+                       <KEYWORD2>result_metadata</KEYWORD2>\r
+                       <KEYWORD2>rollback</KEYWORD2>\r
+                       <KEYWORD2>rpl_parse_enabled</KEYWORD2>\r
+                       <KEYWORD2>rpl_probe</KEYWORD2>\r
+                       <KEYWORD2>rpl_query_type</KEYWORD2>\r
+                       <KEYWORD2>select_db</KEYWORD2>\r
+                       <KEYWORD2>send_long_data</KEYWORD2>\r
+                       <KEYWORD2>session_commit</KEYWORD2>\r
+                       <KEYWORD2>set_file_buffer</KEYWORD2>\r
+                       <KEYWORD2>set_local_infile_default</KEYWORD2>\r
+                       <KEYWORD2>set_local_infile_handler</KEYWORD2>\r
+                       <KEYWORD2>set_opt</KEYWORD2>\r
+                       <KEYWORD2>show_source</KEYWORD2>\r
+                       <KEYWORD2>sizeof</KEYWORD2>\r
+                       <KEYWORD2>slave_query</KEYWORD2>\r
+                       <KEYWORD2>snmpwalkoid</KEYWORD2>\r
+                       <KEYWORD2>socket_get_status</KEYWORD2>\r
+                       <KEYWORD2>socket_getopt</KEYWORD2>\r
+                       <KEYWORD2>socket_set_blocking</KEYWORD2>\r
+                       <KEYWORD2>socket_set_timeout</KEYWORD2>\r
+                       <KEYWORD2>socket_setopt</KEYWORD2>\r
+                       <KEYWORD2>sqlite_fetch_string</KEYWORD2>\r
+                       <KEYWORD2>sqlite_has_more</KEYWORD2>\r
+                       <KEYWORD2>ssl_set</KEYWORD2>\r
+                       <KEYWORD2>stat</KEYWORD2>\r
+                       <KEYWORD2>stmt</KEYWORD2>\r
+                       <KEYWORD2>stmt_init</KEYWORD2>\r
+                       <KEYWORD2>store_result</KEYWORD2>\r
+                       <KEYWORD2>strchr</KEYWORD2>\r
+                       <KEYWORD2>stream_register_wrapper</KEYWORD2>\r
+                       <KEYWORD2>thread_safe</KEYWORD2>\r
+                       <KEYWORD2>use_result</KEYWORD2>\r
+                       <KEYWORD2>user_error</KEYWORD2>\r
+                       <KEYWORD2>velocis_autocommit</KEYWORD2>\r
+                       <KEYWORD2>velocis_close</KEYWORD2>\r
+                       <KEYWORD2>velocis_commit</KEYWORD2>\r
+                       <KEYWORD2>velocis_connect</KEYWORD2>\r
+                       <KEYWORD2>velocis_exec</KEYWORD2>\r
+                       <KEYWORD2>velocis_fetch</KEYWORD2>\r
+                       <KEYWORD2>velocis_fieldname</KEYWORD2>\r
+                       <KEYWORD2>velocis_fieldnum</KEYWORD2>\r
+                       <KEYWORD2>velocis_freeresult</KEYWORD2>\r
+                       <KEYWORD2>velocis_off_autocommit</KEYWORD2>\r
+                       <KEYWORD2>velocis_result</KEYWORD2>\r
+                       <KEYWORD2>velocis_rollback</KEYWORD2>\r
+                       <KEYWORD2>virtual</KEYWORD2>\r
+\r
+\r
+                       <!-- Language constructs (69)\r
+                               http://www.php.net/manual/en/reserved.php -->\r
+                       <KEYWORD1>__CLASS__</KEYWORD1>\r
+                       <KEYWORD1>__FILE__</KEYWORD1>\r
+                       <KEYWORD1>__FUNCTION__</KEYWORD1>\r
+                       <KEYWORD1>__LINE__</KEYWORD1>\r
+                       <KEYWORD1>__METHOD__</KEYWORD1>\r
+                       <KEYWORD1>abstract</KEYWORD1>\r
+                       <OPERATOR>and</OPERATOR>\r
+                       <KEYWORD1>array</KEYWORD1>\r
+                       <KEYWORD1>as</KEYWORD1>\r
+                       <KEYWORD1>break</KEYWORD1>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>catch</KEYWORD1>\r
+                       <KEYWORD1>cfunction</KEYWORD1>\r
+                       <KEYWORD1>class</KEYWORD1>\r
+                       <KEYWORD1>clone</KEYWORD1>\r
+                       <KEYWORD1>const</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+                       <KEYWORD1>declare</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+                       <KEYWORD1>die</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>echo</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>elseif</KEYWORD1>\r
+                       <KEYWORD1>empty</KEYWORD1>\r
+                       <KEYWORD1>enddeclare</KEYWORD1>\r
+                       <KEYWORD1>endfor</KEYWORD1>\r
+                       <KEYWORD1>endforeach</KEYWORD1>\r
+                       <KEYWORD1>endif</KEYWORD1>\r
+                       <KEYWORD1>endswitch</KEYWORD1>\r
+                       <KEYWORD1>endwhile</KEYWORD1>\r
+                       <KEYWORD1>eval</KEYWORD1>\r
+                       <KEYWORD1>exception</KEYWORD1>\r
+                       <KEYWORD1>exit</KEYWORD1>\r
+                       <KEYWORD1>extends</KEYWORD1>\r
+                       <KEYWORD1>false</KEYWORD1>\r
+                       <KEYWORD1>final</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>foreach</KEYWORD1>\r
+                       <KEYWORD1>function</KEYWORD1>\r
+                       <KEYWORD1>global</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>implements</KEYWORD1>\r
+                       <KEYWORD1>include</KEYWORD1>\r
+                       <KEYWORD1>include_once</KEYWORD1>\r
+                       <KEYWORD1>instanceof</KEYWORD1>\r
+                       <KEYWORD1>interface</KEYWORD1>\r
+                       <KEYWORD1>isset</KEYWORD1>\r
+                       <KEYWORD1>list</KEYWORD1>\r
+                       <KEYWORD1>new</KEYWORD1>\r
+                       <KEYWORD1>null</KEYWORD1>\r
+                       <KEYWORD1>old_function</KEYWORD1>\r
+                       <OPERATOR>or</OPERATOR>\r
+                       <KEYWORD1>php_user_filter</KEYWORD1>\r
+                       <KEYWORD1>print</KEYWORD1>\r
+                       <KEYWORD1>private</KEYWORD1>\r
+                       <KEYWORD1>protected</KEYWORD1>\r
+                       <KEYWORD1>public</KEYWORD1>\r
+                       <KEYWORD1>require</KEYWORD1>\r
+                       <KEYWORD1>require_once</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>static</KEYWORD1>\r
+                       <KEYWORD1>switch</KEYWORD1>\r
+                       <KEYWORD1>throw</KEYWORD1>\r
+                       <KEYWORD1>true</KEYWORD1>\r
+                       <KEYWORD1>try</KEYWORD1>\r
+                       <KEYWORD1>unset</KEYWORD1>\r
+                       <KEYWORD1>use</KEYWORD1>\r
+                       <KEYWORD1>var</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+                       <OPERATOR>xor</OPERATOR>\r
+                       <!-- end: generated by buildfunctionlist.php -->\r
+                       <!-- }}} -->\r
+\r
+                       <!-- xdebug functions -->\r
+                       <!-- {{{ -->\r
+                       <KEYWORD2>xdebug_break</KEYWORD2>\r
+                       <KEYWORD2>xdebug_call_class</KEYWORD2>\r
+                       <KEYWORD2>xdebug_call_file</KEYWORD2>\r
+                       <KEYWORD2>xdebug_call_function</KEYWORD2>\r
+                       <KEYWORD2>xdebug_call_line</KEYWORD2>\r
+                       <KEYWORD2>xdebug_disable</KEYWORD2>\r
+                       <KEYWORD2>xdebug_dump_function_profile</KEYWORD2><!-- version 1 only -->\r
+                       <KEYWORD2>xdebug_dump_function_trace</KEYWORD2><!-- version 1 only -->\r
+                       <KEYWORD2>xdebug_dump_superglobals</KEYWORD2>\r
+                       <KEYWORD2>xdebug_enable</KEYWORD2>\r
+                       <KEYWORD2>xdebug_get_code_coverage</KEYWORD2>\r
+                       <KEYWORD2>xdebug_get_function_count</KEYWORD2>\r
+                       <KEYWORD2>xdebug_get_function_profile</KEYWORD2><!-- version 1 only -->\r
+                       <KEYWORD2>xdebug_get_function_stack</KEYWORD2>\r
+                       <KEYWORD2>xdebug_get_function_trace</KEYWORD2><!-- version 1 only -->\r
+                       <KEYWORD2>xdebug_get_stack_depth</KEYWORD2>\r
+                       <KEYWORD2>xdebug_is_enabled</KEYWORD2>\r
+                       <KEYWORD2>xdebug_memory_usage</KEYWORD2>\r
+                       <KEYWORD2>xdebug_peak_memory_usage</KEYWORD2>\r
+                       <KEYWORD2>xdebug_start_code_coverage</KEYWORD2>\r
+                       <KEYWORD2>xdebug_start_profiling</KEYWORD2><!-- version 1 only -->\r
+                       <KEYWORD2>xdebug_start_trace</KEYWORD2><!-- version 1 only -->\r
+                       <KEYWORD2>xdebug_stop_code_coverage</KEYWORD2>\r
+                       <KEYWORD2>xdebug_stop_profiling</KEYWORD2><!-- version 1 only -->\r
+                       <KEYWORD2>xdebug_stop_trace</KEYWORD2><!-- version 1 only -->\r
+                       <KEYWORD2>xdebug_time_index</KEYWORD2>\r
+                       <KEYWORD2>xdebug_var_dump</KEYWORD2>\r
+                       <!-- }}} -->\r
+\r
+                       <!-- Basic SimpleTest methods -->\r
+                       <!-- {{{ -->\r
+                       <KEYWORD2>assertCopy</KEYWORD2>\r
+                       <KEYWORD2>assertEqual</KEYWORD2>\r
+                       <KEYWORD2>assertError</KEYWORD2>\r
+                       <KEYWORD2>assertErrorPattern</KEYWORD2>\r
+                       <KEYWORD2>assertFalse</KEYWORD2>\r
+                       <KEYWORD2>assertIdentical</KEYWORD2>\r
+                       <KEYWORD2>assertIsA</KEYWORD2>\r
+                       <KEYWORD2>assertNoErrors</KEYWORD2>\r
+                       <KEYWORD2>assertNoUnwantedPattern</KEYWORD2>\r
+                       <KEYWORD2>assertNotA</KEYWORD2>\r
+                       <KEYWORD2>assertNotEqual</KEYWORD2>\r
+                       <KEYWORD2>assertNotIdentical</KEYWORD2>\r
+                       <KEYWORD2>assertNotNull</KEYWORD2>\r
+                       <KEYWORD2>assertNull</KEYWORD2>\r
+                       <KEYWORD2>assertReference</KEYWORD2>\r
+                       <KEYWORD2>assertTrue</KEYWORD2>\r
+                       <KEYWORD2>assertWantedPattern</KEYWORD2>\r
+\r
+                       <KEYWORD2>setReturnValue</KEYWORD2>\r
+                       <KEYWORD2>setReturnValueAt</KEYWORD2>\r
+                       <KEYWORD2>setReturnReference</KEYWORD2>\r
+                       <KEYWORD2>setReturnReferenceAt</KEYWORD2>\r
+                       <KEYWORD2>expectArguments</KEYWORD2>\r
+                       <KEYWORD2>expectArgumentsAt</KEYWORD2>\r
+                       <KEYWORD2>expectCallCount</KEYWORD2>\r
+                       <KEYWORD2>expectMaximumCallCount</KEYWORD2>\r
+                       <KEYWORD2>expectMinimumCallCount</KEYWORD2>\r
+                       <KEYWORD2>expectNever</KEYWORD2>\r
+                       <KEYWORD2>expectOnce</KEYWORD2>\r
+                       <KEYWORD2>expectAtLeastOnce</KEYWORD2>\r
+                       <KEYWORD2>tally</KEYWORD2>\r
+\r
+                       <KEYWORD2>dump</KEYWORD2>\r
+                       <KEYWORD2>error</KEYWORD2>\r
+                       <KEYWORD2>fail</KEYWORD2>\r
+                       <KEYWORD2>pass</KEYWORD2>\r
+                       <KEYWORD2>sendMessage</KEYWORD2>\r
+                       <KEYWORD2>setUp</KEYWORD2>\r
+                       <KEYWORD2>signal</KEYWORD2>\r
+                       <KEYWORD2>swallowErrors</KEYWORD2>\r
+                       <KEYWORD2>tearDown</KEYWORD2>\r
+                       <!-- }}} -->\r
+\r
+                       <!-- more magical functions -->\r
+                       <KEYWORD2>__autoload</KEYWORD2>\r
+                       <KEYWORD2>__destruct</KEYWORD2>\r
+                       <KEYWORD2>__get</KEYWORD2>\r
+                       <KEYWORD2>__set</KEYWORD2>\r
+                       <KEYWORD2>__sleep</KEYWORD2>\r
+                       <KEYWORD2>__wakeup</KEYWORD2>\r
+\r
+                       <!-- more constructs -->\r
+                       <KEYWORD4>parent</KEYWORD4>\r
+                       <KEYWORD4>self</KEYWORD4>\r
+                       <KEYWORD4>stdClass</KEYWORD4>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+\r
+       <RULES SET="KEYWORDS_VISIBILITY">\r
+               <KEYWORDS>\r
+                       <KEYWORD1>private</KEYWORD1>\r
+                       <KEYWORD1>protected</KEYWORD1>\r
+                       <KEYWORD1>public</KEYWORD1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+\r
+       <!-- Javascript -->\r
+       <RULES SET="JAVASCRIPT_OPENTAG" DEFAULT="MARKUP">\r
+               <SEQ TYPE="MARKUP" DELEGATE="JAVASCRIPT">&gt;</SEQ>\r
+               <IMPORT DELEGATE="TO_LITERAL+PHP"/> <!-- handle PHP in <script> tag -->\r
+               <IMPORT DELEGATE="html::TAGS" /> <!-- handle e.g. 'style="width:1px"' -->\r
+       </RULES>\r
+\r
+\r
+       <!-- Handle literals, but allow switching to PHP therein, e.g. from html TAGS -->\r
+       <RULES SET="TO_LITERAL+PHP">\r
+               <SPAN TYPE="LITERAL1" DELEGATE="LITERAL1+PHP">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL2" DELEGATE="LITERAL2+PHP">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <IMPORT DELEGATE="TO_PHP"/>\r
+       </RULES>\r
+\r
+\r
+       <RULES SET="JAVASCRIPT" DEFAULT="MARKUP" ESCAPE="\">\r
+               <IMPORT DELEGATE="TO_LITERAL+PHP"/>\r
+               <IMPORT DELEGATE="TO_PHP"/>\r
+               <IMPORT DELEGATE="javascript::MAIN"/>\r
+       </RULES>\r
+\r
+\r
+       <!-- Handle PHP tags in LITERAL1, e.g. in the "type" attribute of a <SCRIPT> tag -->\r
+       <RULES SET="LITERAL1+PHP" DEFAULT="LITERAL1">\r
+               <IMPORT DELEGATE="TO_PHP"/>\r
+       </RULES>\r
+\r
+\r
+       <!-- Handle PHP tags in LITERAL2, e.g. in the "type" attribute of a <SCRIPT> tag -->\r
+       <RULES SET="LITERAL2+PHP" DEFAULT="LITERAL2">\r
+               <IMPORT DELEGATE="TO_PHP"/>\r
+       </RULES>\r
+\r
+\r
+       <!-- Handle PHP tags in comments -->\r
+       <RULES SET="COMMENT1+PHP" DEFAULT="COMMENT1">\r
+               <IMPORT DELEGATE="TO_PHP"/>\r
+       </RULES>\r
+\r
+\r
+       <!-- Go to PHP mode again -->\r
+       <RULES SET="TO_PHP" DEFAULT="MARKUP">\r
+               <SPAN TYPE="MARKUP" DELEGATE="PHP">\r
+                       <BEGIN>&lt;?php</BEGIN>\r
+                       <END>?&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="PHP">\r
+                       <BEGIN>&lt;?</BEGIN>\r
+                       <END>?&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="PHP">\r
+                       <BEGIN>&lt;%=</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+\r
+       <!-- Extended label block, also uses "|" as seperator -->\r
+       <RULES SET="PHPDOC_LABEL_BLOCK_EXTENDED" DEFAULT="COMMENT3"\r
+               HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[0-9a-f]+|([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)">\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+\r
+               <!-- Delegate back (gets not caught from PHPDOC_LABEL_BLOCK): -->\r
+               <IMPORT DELEGATE="PHPDOC_DELEGATE_LABEL_BLOCKS" />\r
+               <IMPORT DELEGATE="PHPDOC_LABEL_BLOCK" />\r
+\r
+               <IMPORT DELEGATE="PHPDOC_LABEL_KEYWORDS" />\r
+               <IMPORT DELEGATE="PHPDOC" />\r
+               <IMPORT DELEGATE="PHPDOC_VAR" />\r
+               <IMPORT DELEGATE="PHP_BASIC_KEYWORD1" />\r
+       </RULES>\r
+\r
+       <!-- A block after a label tag like "@see" -->\r
+       <RULES SET="PHPDOC_LABEL_BLOCK" DEFAULT="COMMENT3"\r
+               HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[0-9a-f]+|([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)">\r
+\r
+               <!-- Delegate back -->\r
+               <!-- <IMPORT DELEGATE="PHPDOC_DELEGATE_LABEL_BLOCKS" /> -->\r
+\r
+               <SEQ TYPE="COMMENT3" DELEGATE="PHPDOC">*/</SEQ>\r
+\r
+               <MARK_PREVIOUS TYPE="FUNCTION">()</MARK_PREVIOUS>\r
+\r
+               <IMPORT DELEGATE="PHPDOC_LABEL_KEYWORDS" />\r
+               <IMPORT DELEGATE="PHPDOC" />\r
+               <IMPORT DELEGATE="PHPDOC_VAR" />\r
+               <IMPORT DELEGATE="PHP_BASIC_KEYWORD1" />\r
+\r
+               <!-- Taken from: http://php.net/manual/en/language.types.php -->\r
+               <KEYWORDS>\r
+                       <OPERATOR>array</OPERATOR>\r
+                       <OPERATOR>bool</OPERATOR>\r
+                       <OPERATOR>boolean</OPERATOR>\r
+                       <OPERATOR>callback</OPERATOR>\r
+                       <OPERATOR>double</OPERATOR>\r
+                       <OPERATOR>float</OPERATOR>\r
+                       <OPERATOR>int</OPERATOR>\r
+                       <OPERATOR>integer</OPERATOR>\r
+                       <OPERATOR>mixed</OPERATOR>\r
+                       <OPERATOR>number</OPERATOR>\r
+                       <OPERATOR>NULL</OPERATOR>\r
+                       <OPERATOR>object</OPERATOR>\r
+                       <OPERATOR>real</OPERATOR><!-- not listed, but valid in a typecast -->\r
+                       <OPERATOR>resource</OPERATOR>\r
+                       <OPERATOR>string</OPERATOR>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+\r
+       <!-- A block after @access -->\r
+       <RULES SET="PHPDOC_LABEL_BLOCK_ACCESS" DEFAULT="COMMENT3"\r
+               HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[0-9a-f]+|([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)">\r
+               <IMPORT DELEGATE="KEYWORDS_VISIBILITY" />\r
+\r
+               <!-- Delegate back: -->\r
+               <IMPORT DELEGATE="PHPDOC_DELEGATE_LABEL_BLOCKS"/>\r
+       </RULES>\r
+\r
+\r
+       <RULES SET="PHPDOC_BLOCK" DEFAULT="COMMENT3"\r
+               HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[0-9a-f]+|([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)">\r
+               <!-- highlight function/method name as token type FUNCTION -->\r
+               <MARK_PREVIOUS TYPE="FUNCTION">()</MARK_PREVIOUS>\r
+\r
+               <!-- Delegate back: -->\r
+               <IMPORT DELEGATE="PHPDOC_DELEGATE_LABEL_BLOCKS"/>\r
+               <IMPORT DELEGATE="PHPDOC"/>\r
+               <IMPORT DELEGATE="PHPDOC_VAR"/>\r
+       </RULES>\r
+\r
+\r
+       <!-- Helper for class references in rule PHPDOC -->\r
+       <RULES SET="OBJECT_PHPDOC">\r
+               <SPAN TYPE="OPERATOR" DELEGATE="PHP">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+               <SEQ_REGEXP TYPE="FUNCTION" HASH_CHAR="-&gt;" DELEGATE="PHPDOC">-&gt;\w+\s*(?=\()</SEQ_REGEXP>\r
+               <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="-&gt;" DELEGATE="OBJECT_PHPDOC">-&gt;\w+(?=(\[[\s\w'"]+\])?-&gt;)</SEQ_REGEXP>\r
+               <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="-&gt;" DELEGATE="PHPDOC">-&gt;\w*</SEQ_REGEXP>\r
+\r
+               <IMPORT DELEGATE="PHP_KEYWORDS" />\r
+       </RULES>\r
+\r
+\r
+       <!-- Almost like PHP_VAR - but with another delegate -->\r
+       <RULES SET="PHPDOC_VAR">\r
+               <!-- (Class-)Variables -->\r
+               <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="$" DELEGATE="OBJECT_PHPDOC">\$\w+(?=(\[[\s\w'"]+\])?-&gt;)</SEQ_REGEXP>\r
+\r
+               <MARK_PREVIOUS TYPE="KEYWORD4">::</MARK_PREVIOUS>\r
+\r
+               <SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD4">\$\w+(?=\s*=\s*(&amp;\s*)?new)</SEQ_REGEXP>\r
+\r
+               <!-- Normal variables -->\r
+               <MARK_FOLLOWING TYPE="KEYWORD3">$</MARK_FOLLOWING>\r
+       </RULES>\r
+\r
+\r
+       <!-- phpdoc / phpDocumentor label tags -->\r
+       <RULES SET="PHPDOC_LABEL_KEYWORDS">\r
+               <!-- {{{\r
+                       Some (@global, @param, ..) are here just for complete-word -->\r
+               <KEYWORDS>\r
+                       <LABEL>@abstract</LABEL>\r
+                       <LABEL>@access</LABEL>\r
+                       <LABEL>@author</LABEL>\r
+                       <LABEL>@category</LABEL>\r
+                       <LABEL>@const</LABEL>\r
+                       <LABEL>@constant</LABEL>\r
+                       <LABEL>@copyright</LABEL>\r
+                       <LABEL>@deprecated</LABEL>\r
+                       <LABEL>@example</LABEL>\r
+                       <LABEL>@filesource</LABEL>\r
+                       <LABEL>@final</LABEL>\r
+                       <LABEL>@global</LABEL>\r
+                       <LABEL>@ignore</LABEL>\r
+                       <LABEL>@internal</LABEL>\r
+                       <LABEL>@license</LABEL>\r
+                       <LABEL>@link</LABEL>\r
+                       <LABEL>@name</LABEL>\r
+                       <LABEL>@package</LABEL>\r
+                       <LABEL>@param</LABEL>\r
+                       <LABEL>@return</LABEL>\r
+                       <LABEL>@see</LABEL>\r
+                       <LABEL>@since</LABEL>\r
+                       <LABEL>@static</LABEL>\r
+                       <LABEL>@staticvar</LABEL>\r
+                       <LABEL>@subpackage</LABEL>\r
+                       <LABEL>@todo</LABEL>\r
+                       <LABEL>@tutorial</LABEL>\r
+                       <LABEL>@uses</LABEL>\r
+                       <LABEL>@var</LABEL>\r
+                       <LABEL>@version</LABEL>\r
+               </KEYWORDS>\r
+               <!-- }}} -->\r
+       </RULES>\r
+\r
+\r
+       <!-- Delegate to PHPDOC_LABEL_BLOCK[_EXTENDED|_ACCESS] or back to PHPDOC -->\r
+       <RULES SET="PHPDOC_DELEGATE_LABEL_BLOCKS" DEFAULT="COMMENT3">\r
+               <!-- Delegate empty line (just an asterisk) back to PHPDOC -->\r
+               <SEQ_REGEXP TYPE="COMMENT3" AT_WHITESPACE_END="TRUE" DELEGATE="PHPDOC" HASH_CHAR="*">\*\s*$</SEQ_REGEXP>\r
+\r
+               <SEQ_REGEXP TYPE="LABEL" HASH_CHAR="@"\r
+                       DELEGATE="PHPDOC_LABEL_BLOCK_EXTENDED">@(global|param|return|staticvar|var)</SEQ_REGEXP>\r
+\r
+               <SEQ_REGEXP TYPE="LABEL" HASH_CHAR="@"\r
+                       DELEGATE="PHPDOC_LABEL_BLOCK">@(deprecated|see|uses)</SEQ_REGEXP>\r
+\r
+               <SEQ TYPE="LABEL" DELEGATE="PHPDOC_LABEL_BLOCK_ACCESS">@access</SEQ>\r
+\r
+               <!-- Delegate the remaining phpdoc tags back to PHPDOC_BLOCK: -->\r
+               <SEQ_REGEXP TYPE="LABEL" HASH_CHAR="@"\r
+                       DELEGATE="PHPDOC_BLOCK">@(abstract|author|category|const|constant|copyright|example|filesource|final|ignore|internal|license|link|name|package|since|static|subpackage|todo|tutorial|version)</SEQ_REGEXP>\r
+       </RULES>\r
+\r
+\r
+       <!-- The main phpdoc rules -->\r
+       <RULES SET="PHPDOC" DEFAULT="COMMENT3" IGNORE_CASE="TRUE"\r
+               HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[0-9a-f]+|([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)">\r
+               <!-- HTML comments -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="PHPDOC_BLOCK">\r
+                       <BEGIN>{@internal</BEGIN>\r
+                       <END>}}</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="PHPDOC_BLOCK">\r
+                       <BEGIN>{@link</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <!-- PHPdoc allows this -->\r
+               <SEQ TYPE="COMMENT3">&lt;&lt;</SEQ>\r
+               <SEQ TYPE="COMMENT3">&lt;=</SEQ>\r
+               <SEQ TYPE="COMMENT3">&lt; </SEQ>\r
+\r
+               <SPAN DELEGATE="PHP" TYPE="MARKUP">\r
+                       <BEGIN>&lt;code&gt;</BEGIN>\r
+                       <END>&lt;/code&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- HTML tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Imports: -->\r
+               <IMPORT DELEGATE="PHPDOC_DELEGATE_LABEL_BLOCKS" />\r
+               <IMPORT DELEGATE="PHPDOC_LABEL_KEYWORDS" />\r
+               <IMPORT DELEGATE="PHPDOC_VAR" />\r
+               <IMPORT DELEGATE="PHP_BASIC_KEYWORD1" />\r
+       </RULES>\r
+\r
+\r
+       <RULES SET="INVALID_LT" DEFAULT="INVALID">\r
+               <SEQ TYPE="INVALID">&lt;</SEQ>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/pike.xml b/extra/xmode/modes/pike.xml
new file mode 100644 (file)
index 0000000..fa50f3e
--- /dev/null
@@ -0,0 +1,242 @@
+<?xml version="1.0"?>\r
+\r
+<!-- Pike mode, contributed by\r
+                      Marco G?tze, <gomar@gmx.net> -->\r
+<!-- Small fixes and autodoc support contributed by\r
+                      Peter Lundqvist <peterl@update.uu.se> -->\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+  <PROPS>\r
+    <PROPERTY NAME="commentStart" VALUE="/*"/>\r
+    <PROPERTY NAME="commentEnd" VALUE="*/"/>\r
+    <PROPERTY NAME="lineComment" VALUE="//"/>\r
+    <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*`"/>\r
+\r
+    <!-- Auto indent -->\r
+    <PROPERTY NAME="indentOpenBrackets" VALUE="{"/>\r
+    <PROPERTY NAME="indentCloseBrackets" VALUE="}"/>\r
+    <PROPERTY NAME="indentNextLine" VALUE="\s*(((if|(for(each)?)|while|catch|gauge)\s*\(|(do|else)\s*|else\s+if\s*\()[^{;]*)"/>\r
+    <!-- set this to 'true' if you want to use GNU coding style -->\r
+    <PROPERTY NAME="doubleBracketIndent" VALUE="false"/>\r
+  </PROPS>\r
+  <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[\p{XDigit}]+|[\p{Digit}]+|0[bB][01]+)[lLdDfF]?">\r
+\r
+    <!-- comments -->\r
+    <SPAN TYPE="COMMENT1" DELEGATE="COMMENT">\r
+      <BEGIN>/*</BEGIN>\r
+      <END>*/</END>\r
+    </SPAN>\r
+    <SEQ TYPE="INVALID">*/</SEQ>\r
+\r
+    <!-- Autodoc comment -->\r
+    <EOL_SPAN TYPE="COMMENT1" DELEGATE="AUTODOC">//!</EOL_SPAN>\r
+    <!-- C++ line comment -->\r
+    <EOL_SPAN TYPE="COMMENT1" DELEGATE="COMMENT">//</EOL_SPAN>\r
+\r
+    <!-- string, char literals -->\r
+    <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" DELEGATE="STRING_LITERAL">\r
+      <BEGIN>"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN>\r
+    <SPAN TYPE="LITERAL1" DELEGATE="STRING_LITERAL">\r
+      <BEGIN>#"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN>\r
+    <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+      <BEGIN>'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN>\r
+\r
+    <!-- preprocessor statements -->\r
+    <SEQ_REGEXP TYPE="KEYWORD2" HASH_CHAR="#" AT_LINE_START="TRUE">#.*?(?=($|/\*|//))</SEQ_REGEXP>\r
+\r
+    <!-- operators -->\r
+    <SEQ TYPE="OPERATOR">({</SEQ>\r
+    <SEQ TYPE="OPERATOR">})</SEQ>\r
+    <SEQ TYPE="OPERATOR">([</SEQ>\r
+    <SEQ TYPE="OPERATOR">])</SEQ>\r
+    <SEQ TYPE="OPERATOR">(&lt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">&gt;)</SEQ>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">!</SEQ>\r
+    <SEQ TYPE="OPERATOR">+</SEQ>\r
+    <SEQ TYPE="OPERATOR">-</SEQ>\r
+    <SEQ TYPE="OPERATOR">/</SEQ>\r
+    <SEQ TYPE="OPERATOR">*</SEQ>\r
+    <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">%</SEQ>\r
+    <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+    <SEQ TYPE="OPERATOR">|</SEQ>\r
+    <SEQ TYPE="OPERATOR">^</SEQ>\r
+    <SEQ TYPE="OPERATOR">~</SEQ>\r
+    <SEQ TYPE="OPERATOR">@</SEQ>\r
+    <SEQ TYPE="OPERATOR">`</SEQ>\r
+    <SEQ TYPE="OPERATOR">.</SEQ>\r
+\r
+    <!-- function calls -->\r
+    <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+       <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+    <KEYWORDS>\r
+      <!-- type modifiers -->\r
+      <KEYWORD1>constant</KEYWORD1>\r
+      <KEYWORD1>extern</KEYWORD1>\r
+      <KEYWORD1>final</KEYWORD1>\r
+      <KEYWORD1>inline</KEYWORD1>\r
+      <KEYWORD1>local</KEYWORD1>\r
+      <KEYWORD1>nomask</KEYWORD1>\r
+      <KEYWORD1>optional</KEYWORD1>\r
+      <KEYWORD1>private</KEYWORD1>\r
+      <KEYWORD1>protected</KEYWORD1>\r
+      <KEYWORD1>public</KEYWORD1>\r
+      <KEYWORD1>static</KEYWORD1>\r
+      <KEYWORD1>variant</KEYWORD1>\r
+\r
+      <!-- types -->\r
+      <KEYWORD3>array</KEYWORD3>\r
+      <KEYWORD3>class</KEYWORD3>\r
+      <KEYWORD3>float</KEYWORD3>\r
+      <KEYWORD3>function</KEYWORD3>\r
+      <KEYWORD3>int</KEYWORD3>\r
+      <KEYWORD3>mapping</KEYWORD3>\r
+      <KEYWORD3>mixed</KEYWORD3>\r
+      <KEYWORD3>multiset</KEYWORD3>\r
+      <KEYWORD3>object</KEYWORD3>\r
+      <KEYWORD3>program</KEYWORD3>\r
+      <KEYWORD3>string</KEYWORD3>\r
+      <KEYWORD3>void</KEYWORD3>\r
+\r
+      <!-- flow control and block-introducing keywords -->\r
+      <KEYWORD1>break</KEYWORD1>\r
+      <KEYWORD1>case</KEYWORD1>\r
+      <KEYWORD1>catch</KEYWORD1>\r
+      <KEYWORD1>continue</KEYWORD1>\r
+      <KEYWORD1>default</KEYWORD1>\r
+      <KEYWORD1>do</KEYWORD1>\r
+      <KEYWORD1>else</KEYWORD1>\r
+      <KEYWORD1>for</KEYWORD1>\r
+      <KEYWORD1>foreach</KEYWORD1>\r
+      <KEYWORD1>gauge</KEYWORD1>\r
+      <KEYWORD1>if</KEYWORD1>\r
+      <KEYWORD1>lambda</KEYWORD1>\r
+      <KEYWORD1>return</KEYWORD1>\r
+      <KEYWORD1>sscanf</KEYWORD1>\r
+      <KEYWORD1>switch</KEYWORD1>\r
+      <KEYWORD1>while</KEYWORD1>\r
+\r
+      <!-- special instructions -->\r
+      <KEYWORD2>import</KEYWORD2>\r
+      <KEYWORD2>inherit</KEYWORD2>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+  <RULES SET="COMMENT" IGNORE_CASE="FALSE" DEFAULT="COMMENT1">\r
+    <KEYWORDS>\r
+      <COMMENT2>FIXME</COMMENT2>\r
+      <COMMENT2>XXX</COMMENT2>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+  <RULES SET="AUTODOC" IGNORE_CASE="TRUE" DEFAULT="COMMENT1">\r
+\r
+               <EOL_SPAN TYPE="NULL" DELEGATE="MAIN" MATCH_TYPE="CONTEXT">@decl</EOL_SPAN>\r
+\r
+               <!-- XML tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS">\r
+                 <BEGIN>@xml{</BEGIN>\r
+                       <END>@}</END>\r
+               </SPAN>\r
+               <!-- Cross references -->\r
+               <SPAN TYPE="FUNCTION" NO_LINE_BREAK="TRUE">\r
+               <BEGIN>@[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+\r
+               <!-- Brace keywords -->\r
+               <SEQ_REGEXP TYPE="FUNCTION" HASH_CHAR="@">@(b|i|u|tt|url|pre|ref|code|expr|image)?(\{.*@\})</SEQ_REGEXP>\r
+\r
+               <!-- Attempt to get syntax highlighting of @decl-ed functions\r
+                    inside of the autodoc-rule.\r
+\r
+                    It works - but jEdit 4.1 has problems keeping it highlighted\r
+                    (the syntax highlighting works depending on how you travel\r
+                    past the @decl-ed region).\r
+                    Can't figure aout how to to proper coloring of the @decl\r
+                    keyword either.\r
+\r
+                    If there are problems with what regions are highlighted -\r
+                    try to uncomment this first.\r
+               -->\r
+               <EOL_SPAN TYPE="NULL" DELEGATE="MAIN">@decl</EOL_SPAN>\r
+\r
+               <KEYWORDS>\r
+                 <!-- Meta keywords -->\r
+                 <LABEL>@appears</LABEL>\r
+                 <LABEL>@belongs</LABEL>\r
+                 <LABEL>@class</LABEL>\r
+                 <LABEL>@endclass</LABEL>\r
+                 <LABEL>@example</LABEL>\r
+                 <LABEL>@module</LABEL>\r
+                 <LABEL>@endmodule</LABEL>\r
+                 <LABEL>@namespace</LABEL>\r
+                 <LABEL>@endnamespace</LABEL>\r
+                 <!-- <LABEL>@decl</LABEL>\r
+                 -->\r
+\r
+                 <!-- Single keywords -->\r
+                 <LABEL>@deprecated</LABEL>\r
+\r
+                 <!-- Delimiter keywords -->\r
+                 <LABEL>@note</LABEL>\r
+                 <LABEL>@example</LABEL>\r
+                 <LABEL>@bugs</LABEL>\r
+                 <LABEL>@returns</LABEL>\r
+                 <LABEL>@throws</LABEL>\r
+                 <LABEL>@param</LABEL>\r
+                 <LABEL>@seealso</LABEL>\r
+                 <LABEL>@fixme</LABEL>\r
+                 <LABEL>@constant</LABEL>\r
+                 <LABEL>@member</LABEL>\r
+                 <LABEL>@index</LABEL>\r
+                 <LABEL>@elem</LABEL>\r
+                 <LABEL>@value</LABEL>\r
+                 <LABEL>@type</LABEL>\r
+                 <LABEL>@item</LABEL>\r
+\r
+                 <!-- Container keywords -->\r
+                 <LABEL>@section</LABEL>\r
+                 <LABEL>@mapping</LABEL>\r
+                 <LABEL>@endmapping</LABEL>\r
+                 <LABEL>@multiset</LABEL>\r
+                 <LABEL>@endmultiset</LABEL>\r
+                 <LABEL>@array</LABEL>\r
+                 <LABEL>@endarray</LABEL>\r
+                 <LABEL>@int</LABEL>\r
+                 <LABEL>@endint</LABEL>\r
+                 <LABEL>@string</LABEL>\r
+                 <LABEL>@endstring</LABEL>\r
+                 <LABEL>@mixed</LABEL>\r
+                 <LABEL>@endmixed</LABEL>\r
+                 <LABEL>@dl</LABEL>\r
+                 <LABEL>@enddl</LABEL>\r
+                 <LABEL>@ol</LABEL>\r
+                 <LABEL>@endol</LABEL>\r
+                 <LABEL>@ul</LABEL>\r
+                 <LABEL>@endol</LABEL>\r
+\r
+                 <!-- Special keywords -->\r
+                 <LABEL>@ignore</LABEL>\r
+                 <LABEL>@endignore</LABEL>\r
+\r
+               </KEYWORDS>\r
+\r
+       </RULES>\r
+\r
+  <RULES SET="STRING_LITERAL" ESCAPE="\" IGNORE_CASE="TRUE" DEFAULT="LITERAL1">\r
+    <SEQ_REGEXP TYPE="LITERAL2" HASH_CHAR="%">%([^ a-z]*[a-z]|\[[^\]]*\])</SEQ_REGEXP>\r
+    <SEQ TYPE="COMMENT2">DEBUG:</SEQ>\r
+  </RULES>\r
+</MODE>
\ No newline at end of file
diff --git a/extra/xmode/modes/pl-sql.xml b/extra/xmode/modes/pl-sql.xml
new file mode 100644 (file)
index 0000000..b3e084d
--- /dev/null
@@ -0,0 +1,502 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="--" />\r
+        <PROPERTY NAME="indentNextLines" VALUE="\s*(.*THEN|ELSE|LOOP).*" />\r
+               <PROPERTY NAME="unindentNextLines" VALUE="^\s*(ELSE|ELSIF|END IF|END LOOP).*" />\r
+               <PROPERTY NAME="unindentThisLine" VALUE="^\s*(ELSE|ELSIF|END IF|END LOOP).*" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <SPAN TYPE="LABEL">\r
+                       <BEGIN>/*+</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+               <EOL_SPAN TYPE="LABEL">--+</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1" AT_LINE_START="TRUE">REM </EOL_SPAN>\r
+        <EOL_SPAN TYPE="COMMENT1" AT_LINE_START="TRUE">REMARK</EOL_SPAN>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">!=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">!&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">:=</SEQ>\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <SEQ TYPE="OPERATOR">(</SEQ>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+        <MARK_FOLLOWING AT_LINE_START="TRUE" AT_WHITESPACE_END="TRUE"\r
+                TYPE="LABEL">@@</MARK_FOLLOWING>\r
+        <MARK_FOLLOWING AT_LINE_START="TRUE"\r
+                AT_WHITESPACE_END="TRUE" TYPE="LABEL">@</MARK_FOLLOWING>\r
+               <EOL_SPAN AT_LINE_START="TRUE" DELEGATE="shellscript::MAIN">!</EOL_SPAN>\r
+               <EOL_SPAN AT_LINE_START="TRUE"\r
+                DELEGATE="shellscript::MAIN">host</EOL_SPAN>\r
+               <MARK_PREVIOUS TYPE="LABEL" AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+\r
+               <KEYWORDS>\r
+                       <!-- reserved words -->\r
+                       <KEYWORD1>ABORT</KEYWORD1>\r
+                       <KEYWORD1>ACCESS</KEYWORD1>\r
+                       <KEYWORD1>ACCEPT</KEYWORD1>\r
+                       <KEYWORD1>ADD</KEYWORD1>\r
+                       <KEYWORD1>ALTER</KEYWORD1>\r
+                       <KEYWORD1>ARRAY</KEYWORD1>\r
+                       <KEYWORD1>ARRAY_LEN</KEYWORD1>\r
+                       <KEYWORD1>AS</KEYWORD1>\r
+                       <KEYWORD1>ASC</KEYWORD1>\r
+                       <KEYWORD1>ASSERT</KEYWORD1>\r
+                       <KEYWORD1>ASSIGN</KEYWORD1>\r
+                       <KEYWORD1>AT</KEYWORD1>\r
+                       <KEYWORD1>AUDIT</KEYWORD1>\r
+                       <KEYWORD1>AUTHORIZATION</KEYWORD1>\r
+                       <KEYWORD1>AVG</KEYWORD1>\r
+                       <KEYWORD1>BASE_TABLE</KEYWORD1>\r
+                       <KEYWORD1>BEGIN</KEYWORD1>\r
+                       <KEYWORD1>BINARY_INTEGER</KEYWORD1>\r
+                       <KEYWORD1>BODY</KEYWORD1>\r
+                       <KEYWORD1>BREAK</KEYWORD1>\r
+                       <KEYWORD1>BREAKS</KEYWORD1>\r
+                       <KEYWORD1>BTITLE</KEYWORD1>\r
+                       <KEYWORD1>CASE</KEYWORD1>\r
+                       <KEYWORD1>CALL</KEYWORD1>\r
+                       <KEYWORD1>CENTER</KEYWORD1>\r
+                       <KEYWORD1>CHAR</KEYWORD1>\r
+                       <KEYWORD1>CHAR_BASE</KEYWORD1>\r
+                       <KEYWORD1>CHECK</KEYWORD1>\r
+                       <KEYWORD1>CLEAR</KEYWORD1>\r
+                       <KEYWORD1>CLOSE</KEYWORD1>\r
+                       <KEYWORD1>CLUSTER</KEYWORD1>\r
+                       <KEYWORD1>CLUSTERS</KEYWORD1>\r
+                       <KEYWORD1>CMPVAR</KEYWORD1>\r
+                       <KEYWORD1>COL</KEYWORD1>\r
+                       <KEYWORD1>COLAUTH</KEYWORD1>\r
+                       <KEYWORD1>COLUMN</KEYWORD1>\r
+                       <KEYWORD1>COLUMNS</KEYWORD1>\r
+                       <KEYWORD1>COMMENT</KEYWORD1>\r
+                       <KEYWORD1>COMMIT</KEYWORD1>\r
+                       <KEYWORD1>COMPRESS</KEYWORD1>\r
+                       <KEYWORD1>COMPUTE</KEYWORD1>\r
+                       <KEYWORD1>CONSTANT</KEYWORD1>\r
+                       <KEYWORD1>CONSTRAINT</KEYWORD1>\r
+                       <KEYWORD1>CONTINUE</KEYWORD1>\r
+                       <KEYWORD1>COUNT</KEYWORD1>\r
+                       <KEYWORD1>CREATE</KEYWORD1>\r
+                       <KEYWORD1>CURRENT</KEYWORD1>\r
+                       <KEYWORD1>CURRVAL</KEYWORD1>\r
+                       <KEYWORD1>CURSOR</KEYWORD1>\r
+                       <KEYWORD1>DATABASE</KEYWORD1>\r
+                       <KEYWORD1>DATA_BASE</KEYWORD1>\r
+                       <KEYWORD1>DATE</KEYWORD1>\r
+                       <KEYWORD1>DBA</KEYWORD1>\r
+                       <KEYWORD1>DEBUGOFF</KEYWORD1>\r
+                       <KEYWORD1>DEBUGON</KEYWORD1>\r
+                       <KEYWORD1>DECLARE</KEYWORD1>\r
+                       <KEYWORD1>DEFAULT</KEYWORD1>\r
+                       <KEYWORD1>DEFINITION</KEYWORD1>\r
+                       <KEYWORD1>DELAY</KEYWORD1>\r
+                       <KEYWORD1>DELETE</KEYWORD1>\r
+                       <KEYWORD1>DESC</KEYWORD1>\r
+                       <KEYWORD1>EXPLAIN</KEYWORD1>\r
+                       <KEYWORD1>DIGITS</KEYWORD1>\r
+                       <KEYWORD1>DISPOSE</KEYWORD1>\r
+                       <KEYWORD1>DISTINCT</KEYWORD1>\r
+                       <KEYWORD1>DO</KEYWORD1>\r
+                       <KEYWORD1>DROP</KEYWORD1>\r
+                       <KEYWORD1>DUMP</KEYWORD1>\r
+                       <KEYWORD1>ELSE</KEYWORD1>\r
+                       <KEYWORD1>ELSIF</KEYWORD1>\r
+                       <KEYWORD1>END</KEYWORD1>\r
+                       <KEYWORD1>ENTRY</KEYWORD1>>\r
+                       <KEYWORD1>ERRORS</KEYWORD1>\r
+                       <KEYWORD1>EXCEPTION</KEYWORD1>\r
+                       <KEYWORD1>EXCEPTION_INIT</KEYWORD1>\r
+                       <KEYWORD1>EXCLUSIVE</KEYWORD1>\r
+                       <KEYWORD1>EXECUTE</KEYWORD1>\r
+                       <KEYWORD1>EXIT</KEYWORD1>\r
+                       <KEYWORD1>EXTERNAL</KEYWORD1>\r
+                       <KEYWORD1>FALSE</KEYWORD1>\r
+                       <KEYWORD1>FETCH</KEYWORD1>\r
+                       <KEYWORD1>FILE</KEYWORD1>\r
+                       <KEYWORD1>FOR</KEYWORD1>\r
+            <KEYWORD1>FOREIGN</KEYWORD1>\r
+                       <KEYWORD1>FORM</KEYWORD1>\r
+                       <KEYWORD1>FORMAT</KEYWORD1>\r
+                       <KEYWORD1>FROM</KEYWORD1>\r
+                       <KEYWORD1>FUNCTION</KEYWORD1>\r
+                       <KEYWORD1>GENERIC</KEYWORD1>\r
+                       <KEYWORD1>GOTO</KEYWORD1>\r
+                       <KEYWORD1>GRANT</KEYWORD1>\r
+                       <KEYWORD1>GREATEST</KEYWORD1>\r
+                       <KEYWORD1>GROUP</KEYWORD1>\r
+                       <KEYWORD1>HAVING</KEYWORD1>\r
+                       <KEYWORD1>HEADING</KEYWORD1>\r
+                       <KEYWORD1>IDENTIFIED</KEYWORD1>\r
+                       <KEYWORD1>IDENTITYCOL</KEYWORD1>\r
+                       <KEYWORD1>IF</KEYWORD1>\r
+                       <KEYWORD1>IMMEDIATE</KEYWORD1>\r
+                       <KEYWORD1>INCREMENT</KEYWORD1>\r
+                       <KEYWORD1>INDEX</KEYWORD1>\r
+                       <KEYWORD1>INDEXES</KEYWORD1>\r
+                       <KEYWORD1>INDICATOR</KEYWORD1>\r
+                       <KEYWORD1>INITIAL</KEYWORD1>\r
+                       <KEYWORD1>INSERT</KEYWORD1>\r
+                       <KEYWORD1>INTERFACE</KEYWORD1>\r
+                       <KEYWORD1>INTO</KEYWORD1>\r
+                       <KEYWORD1>IS</KEYWORD1>\r
+                       <KEYWORD1>KEY</KEYWORD1>\r
+                       <KEYWORD1>LEAST</KEYWORD1>\r
+                       <KEYWORD1>LEVEL</KEYWORD1>\r
+                       <KEYWORD1>LIMITED</KEYWORD1>\r
+                       <KEYWORD1>LOCK</KEYWORD1>\r
+                       <KEYWORD1>LONG</KEYWORD1>\r
+                       <KEYWORD1>LOOP</KEYWORD1>\r
+                       <KEYWORD1>MATCHED</KEYWORD1>\r
+                       <KEYWORD1>MAX</KEYWORD1>\r
+                       <KEYWORD1>MAXEXTENTS</KEYWORD1>\r
+                       <KEYWORD1>MERGE</KEYWORD1>\r
+                       <KEYWORD1>MEMBER</KEYWORD1>\r
+                       <KEYWORD1>MIN</KEYWORD1>\r
+                       <KEYWORD1>MINUS</KEYWORD1>\r
+                       <KEYWORD1>MLSLABEL</KEYWORD1>\r
+                       <KEYWORD1>MOD</KEYWORD1>\r
+                       <KEYWORD1>MODIFY</KEYWORD1>\r
+                       <KEYWORD1>MORE</KEYWORD1>\r
+                       <KEYWORD1>NATURAL</KEYWORD1>\r
+                       <KEYWORD1>NATURALN</KEYWORD1>\r
+                       <KEYWORD1>NEW</KEYWORD1>\r
+                       <KEYWORD1>NEW_VALUE</KEYWORD1>\r
+                       <KEYWORD1>NEXT</KEYWORD1>\r
+                       <KEYWORD1>NEXTVAL</KEYWORD1>\r
+                       <KEYWORD1>NOAUDIT</KEYWORD1>\r
+                       <KEYWORD1>NOCOMPRESS</KEYWORD1>\r
+                       <KEYWORD1>NOPRINT</KEYWORD1>\r
+                       <KEYWORD1>NOWAIT</KEYWORD1>\r
+                       <KEYWORD1>NULL</KEYWORD1>\r
+                       <KEYWORD1>NUMBER</KEYWORD1>\r
+                       <KEYWORD1>NUMBER_BASE</KEYWORD1>\r
+                       <KEYWORD1>OF</KEYWORD1>\r
+                       <KEYWORD1>OFFLINE</KEYWORD1>\r
+                       <KEYWORD1>ON</KEYWORD1>\r
+                       <KEYWORD1>OFF</KEYWORD1>\r
+                       <KEYWORD1>ONLINE</KEYWORD1>\r
+                       <KEYWORD1>OPEN</KEYWORD1>\r
+                       <KEYWORD1>OPTION</KEYWORD1>\r
+                       <KEYWORD1>ORDER</KEYWORD1>\r
+                       <KEYWORD1>ORGANIZATION</KEYWORD1>\r
+                       <KEYWORD1>OTHERS</KEYWORD1>\r
+                       <KEYWORD1>OUT</KEYWORD1>\r
+                       <KEYWORD1>PACKAGE</KEYWORD1>\r
+                       <KEYWORD1>PAGE</KEYWORD1>\r
+                       <KEYWORD1>PARTITION</KEYWORD1>\r
+                       <KEYWORD1>PCTFREE</KEYWORD1>\r
+                       <KEYWORD1>PCTINCREASE</KEYWORD1>\r
+                       <KEYWORD1>PLAN</KEYWORD1>\r
+                       <KEYWORD1>POSITIVE</KEYWORD1>\r
+                       <KEYWORD1>POSITIVEN</KEYWORD1>\r
+                       <KEYWORD1>PRAGMA</KEYWORD1>\r
+                       <KEYWORD1>PRINT</KEYWORD1>\r
+                       <KEYWORD1>PRIMARY</KEYWORD1>\r
+                       <KEYWORD1>PRIOR</KEYWORD1>\r
+                       <KEYWORD1>PRIVATE</KEYWORD1>\r
+                       <KEYWORD1>PRIVILEGES</KEYWORD1>\r
+                       <KEYWORD1>PROCEDURE</KEYWORD1>\r
+                       <KEYWORD1>PROMPT</KEYWORD1>\r
+                       <KEYWORD1>PUBLIC</KEYWORD1>\r
+                       <KEYWORD1>QUOTED_IDENTIFIER</KEYWORD1>\r
+                       <KEYWORD1>RAISE</KEYWORD1>\r
+                       <KEYWORD1>RANGE</KEYWORD1>\r
+                       <KEYWORD1>RAW</KEYWORD1>\r
+                       <KEYWORD1>RECORD</KEYWORD1>\r
+                       <KEYWORD1>REF</KEYWORD1>\r
+            <KEYWORD1>REFERENCES</KEYWORD1>\r
+                       <KEYWORD1>RELEASE</KEYWORD1>\r
+                       <KEYWORD1>REMR</KEYWORD1>\r
+                       <KEYWORD1>RENAME</KEYWORD1>\r
+                       <KEYWORD1>RESOURCE</KEYWORD1>\r
+                       <KEYWORD1>RETURN</KEYWORD1>\r
+                       <KEYWORD1>REVERSE</KEYWORD1>\r
+                       <KEYWORD1>REVOKE</KEYWORD1>\r
+                       <KEYWORD1>ROLLBACK</KEYWORD1>\r
+                       <KEYWORD1>ROW</KEYWORD1>\r
+                       <KEYWORD1>ROWID</KEYWORD1>\r
+                       <KEYWORD1>ROWLABEL</KEYWORD1>\r
+                       <KEYWORD1>ROWNUM</KEYWORD1>\r
+                       <KEYWORD1>ROWS</KEYWORD1>\r
+                       <KEYWORD1>ROWTYPE</KEYWORD1>\r
+                       <KEYWORD1>RUN</KEYWORD1>\r
+                       <KEYWORD1>SAVEPOINT</KEYWORD1>\r
+                       <KEYWORD1>SCHEMA</KEYWORD1>\r
+                       <KEYWORD1>SELECT</KEYWORD1>\r
+                       <KEYWORD1>SEPERATE</KEYWORD1>\r
+                       <KEYWORD1>SEQUENCE</KEYWORD1>\r
+                       <KEYWORD1>SESSION</KEYWORD1>\r
+                       <KEYWORD1>SET</KEYWORD1>\r
+                       <KEYWORD1>SHARE</KEYWORD1>\r
+                       <KEYWORD1>SHOW</KEYWORD1>\r
+                       <KEYWORD1>SIGNTYPE</KEYWORD1>\r
+                       <KEYWORD1>SKIP</KEYWORD1>\r
+                       <KEYWORD1>SPACE</KEYWORD1>\r
+                       <KEYWORD1>SPOOL</KEYWORD1>\r
+                       <NULL>.SQL</NULL> <!-- for 'SPOOL some.sql;' stuff -->\r
+                       <KEYWORD1>SQL</KEYWORD1>\r
+                       <KEYWORD1>SQLCODE</KEYWORD1>\r
+                       <KEYWORD1>SQLERRM</KEYWORD1>\r
+                       <KEYWORD1>SQLERROR</KEYWORD1>\r
+                       <KEYWORD1>STATEMENT</KEYWORD1>\r
+                       <KEYWORD1>STDDEV</KEYWORD1>\r
+                       <KEYWORD1>STORAGE</KEYWORD1>\r
+                       <KEYWORD1>SUBTYPE</KEYWORD1>\r
+                       <KEYWORD1>SUCCESSFULL</KEYWORD1>\r
+                       <KEYWORD1>SUM</KEYWORD1>\r
+                       <KEYWORD1>SYNONYM</KEYWORD1>\r
+                       <KEYWORD1>SYSDATE</KEYWORD1>\r
+                       <KEYWORD1>TABAUTH</KEYWORD1>\r
+                       <KEYWORD1>TABLE</KEYWORD1>\r
+                       <KEYWORD1>TABLES</KEYWORD1>\r
+                       <KEYWORD1>TABLESPACE</KEYWORD1>\r
+                       <KEYWORD1>TASK</KEYWORD1>\r
+                       <KEYWORD1>TERMINATE</KEYWORD1>\r
+                       <KEYWORD1>THEN</KEYWORD1>\r
+                       <KEYWORD1>TO</KEYWORD1>\r
+                       <KEYWORD1>TRIGGER</KEYWORD1>\r
+                       <KEYWORD1>TRUE</KEYWORD1>\r
+                       <KEYWORD1>TRUNCATE</KEYWORD1>\r
+                       <KEYWORD1>TTITLE</KEYWORD1>\r
+                       <KEYWORD1>TYPE</KEYWORD1>\r
+                       <KEYWORD1>UID</KEYWORD1>\r
+                       <KEYWORD1>UNION</KEYWORD1>\r
+                       <KEYWORD1>UNIQUE</KEYWORD1>\r
+                       <KEYWORD1>UNDEFINE</KEYWORD1>\r
+                       <KEYWORD1>UPDATE</KEYWORD1>\r
+                       <KEYWORD1>UPDATETEXT</KEYWORD1>\r
+                       <KEYWORD1>USE</KEYWORD1>\r
+                       <KEYWORD1>USER</KEYWORD1>\r
+                       <KEYWORD1>USING</KEYWORD1>\r
+                       <KEYWORD1>VALIDATE</KEYWORD1>\r
+                       <KEYWORD1>VALUES</KEYWORD1>\r
+                       <KEYWORD1>VARIANCE</KEYWORD1>\r
+                       <KEYWORD1>VIEW</KEYWORD1>\r
+                       <KEYWORD1>VIEWS</KEYWORD1>\r
+                       <KEYWORD1>WHEN</KEYWORD1>\r
+                       <KEYWORD1>WHENEVER</KEYWORD1>\r
+                       <KEYWORD1>WHERE</KEYWORD1>\r
+                       <KEYWORD1>WHILE</KEYWORD1>\r
+                       <KEYWORD1>WITH</KEYWORD1>\r
+                       <KEYWORD1>WORK</KEYWORD1>\r
+                       <KEYWORD1>WRITE</KEYWORD1>\r
+                       <KEYWORD1>XOR</KEYWORD1>\r
+\r
+                       <!-- data types -->\r
+                       <KEYWORD1>binary</KEYWORD1>\r
+                       <KEYWORD1>bit</KEYWORD1>\r
+                       <KEYWORD1>blob</KEYWORD1>\r
+                       <KEYWORD1>boolean</KEYWORD1>\r
+                       <KEYWORD1>char</KEYWORD1>\r
+                       <KEYWORD1>character</KEYWORD1>\r
+                       <KEYWORD1>datetime</KEYWORD1>\r
+                       <KEYWORD1>decimal</KEYWORD1>\r
+                       <KEYWORD1>float</KEYWORD1>\r
+                       <KEYWORD1>image</KEYWORD1>\r
+                       <KEYWORD1>int</KEYWORD1>\r
+                       <KEYWORD1>integer</KEYWORD1>\r
+                       <KEYWORD1>money</KEYWORD1>\r
+                       <KEYWORD1>numeric</KEYWORD1>\r
+                       <KEYWORD1>nchar</KEYWORD1>\r
+                       <KEYWORD1>nvarchar</KEYWORD1>\r
+                       <KEYWORD1>ntext</KEYWORD1>\r
+                       <KEYWORD1>object</KEYWORD1>\r
+                       <KEYWORD1>pls_integer</KEYWORD1>\r
+                       <KEYWORD1>real</KEYWORD1>\r
+                       <KEYWORD1>smalldatetime</KEYWORD1>\r
+                       <KEYWORD1>smallint</KEYWORD1>\r
+                       <KEYWORD1>smallmoney</KEYWORD1>\r
+                       <KEYWORD1>text</KEYWORD1>\r
+                       <KEYWORD1>timestamp</KEYWORD1>\r
+                       <KEYWORD1>tinyint</KEYWORD1>\r
+                       <KEYWORD1>uniqueidentifier</KEYWORD1>\r
+                       <KEYWORD1>varbinary</KEYWORD1>\r
+                       <KEYWORD1>varchar</KEYWORD1>\r
+                       <KEYWORD1>varchar2</KEYWORD1>\r
+                       <KEYWORD1>varray</KEYWORD1>\r
+\r
+                       <!-- system functions -->\r
+                       <KEYWORD2>ABS</KEYWORD2>\r
+                       <KEYWORD2>ACOS</KEYWORD2>\r
+                       <KEYWORD2>ADD_MONTHS</KEYWORD2>\r
+                       <KEYWORD2>ASCII</KEYWORD2>\r
+                       <KEYWORD2>ASIN</KEYWORD2>\r
+                       <KEYWORD2>ATAN</KEYWORD2>\r
+                       <KEYWORD2>ATAN2</KEYWORD2>\r
+                       <KEYWORD2>BITAND</KEYWORD2>\r
+                       <KEYWORD2>CEIL</KEYWORD2>\r
+                       <KEYWORD2>CHARTOROWID</KEYWORD2>\r
+                       <KEYWORD2>CHR</KEYWORD2>\r
+                       <KEYWORD2>CONCAT</KEYWORD2>\r
+                       <KEYWORD2>CONVERT</KEYWORD2>\r
+                       <KEYWORD2>COS</KEYWORD2>\r
+                       <KEYWORD2>COSH</KEYWORD2>\r
+                       <KEYWORD2>DECODE</KEYWORD2>\r
+                       <KEYWORD2>DEFINE</KEYWORD2>\r
+                       <KEYWORD2>DUAL</KEYWORD2>\r
+                       <KEYWORD2>FLOOR</KEYWORD2>\r
+                       <KEYWORD2>HEXTORAW</KEYWORD2>\r
+                       <KEYWORD2>INITCAP</KEYWORD2>\r
+                       <KEYWORD2>INSTR</KEYWORD2>\r
+                       <KEYWORD2>INSTRB</KEYWORD2>\r
+                       <KEYWORD2>LAST_DAY</KEYWORD2>\r
+                       <KEYWORD2>LENGTH</KEYWORD2>\r
+                       <KEYWORD2>LENGTHB</KEYWORD2>\r
+                       <KEYWORD2>LN</KEYWORD2>\r
+                       <KEYWORD2>LOG</KEYWORD2>\r
+                       <KEYWORD2>LOWER</KEYWORD2>\r
+                       <KEYWORD2>LPAD</KEYWORD2>\r
+                       <KEYWORD2>LTRIM</KEYWORD2>\r
+                       <KEYWORD2>MOD</KEYWORD2>\r
+                       <KEYWORD2>MONTHS_BETWEEN</KEYWORD2>\r
+                       <KEYWORD2>NEW_TIME</KEYWORD2>\r
+                       <KEYWORD2>NEXT_DAY</KEYWORD2>\r
+                       <KEYWORD2>NLSSORT</KEYWORD2>\r
+                       <KEYWORD2>NSL_INITCAP</KEYWORD2>\r
+                       <KEYWORD2>NLS_LOWER</KEYWORD2>\r
+                       <KEYWORD2>NLS_UPPER</KEYWORD2>\r
+                       <KEYWORD2>NVL</KEYWORD2>\r
+                       <KEYWORD2>POWER</KEYWORD2>\r
+                       <KEYWORD2>RAWTOHEX</KEYWORD2>\r
+                       <KEYWORD2>REPLACE</KEYWORD2>\r
+                       <KEYWORD2>ROUND</KEYWORD2>\r
+                       <KEYWORD2>ROWIDTOCHAR</KEYWORD2>\r
+                       <KEYWORD2>RPAD</KEYWORD2>\r
+                       <KEYWORD2>RTRIM</KEYWORD2>\r
+                       <KEYWORD2>SIGN</KEYWORD2>\r
+                       <KEYWORD2>SOUNDEX</KEYWORD2>\r
+                       <KEYWORD2>SIN</KEYWORD2>\r
+                       <KEYWORD2>SINH</KEYWORD2>\r
+                       <KEYWORD2>SQRT</KEYWORD2>\r
+                       <KEYWORD2>SUBSTR</KEYWORD2>\r
+                       <KEYWORD2>SUBSTRB</KEYWORD2>\r
+                       <KEYWORD2>TAN</KEYWORD2>\r
+                       <KEYWORD2>TANH</KEYWORD2>\r
+                       <KEYWORD2>TO_CHAR</KEYWORD2>\r
+                       <KEYWORD2>TO_DATE</KEYWORD2>\r
+                       <KEYWORD2>TO_MULTIBYTE</KEYWORD2>\r
+                       <KEYWORD2>TO_NUMBER</KEYWORD2>\r
+                       <KEYWORD2>TO_SINGLE_BYTE</KEYWORD2>\r
+                       <KEYWORD2>TRANSLATE</KEYWORD2>\r
+                       <KEYWORD2>TRUNC</KEYWORD2>\r
+                       <KEYWORD2>UPPER</KEYWORD2>\r
+\r
+                       <!-- operators -->\r
+                       <KEYWORD1>ALL</KEYWORD1>\r
+                       <KEYWORD1>AND</KEYWORD1>\r
+                       <KEYWORD1>ANY</KEYWORD1>\r
+                       <KEYWORD1>BETWEEN</KEYWORD1>\r
+                       <KEYWORD1>BY</KEYWORD1>\r
+                       <KEYWORD1>CONNECT</KEYWORD1>\r
+                       <KEYWORD1>EXISTS</KEYWORD1>\r
+                       <KEYWORD1>IN</KEYWORD1>\r
+                       <KEYWORD1>INTERSECT</KEYWORD1>\r
+                       <KEYWORD1>LIKE</KEYWORD1>\r
+                       <KEYWORD1>NOT</KEYWORD1>\r
+                       <KEYWORD1>NULL</KEYWORD1>\r
+                       <KEYWORD1>OR</KEYWORD1>\r
+                       <KEYWORD1>START</KEYWORD1>\r
+                       <KEYWORD1>UNION</KEYWORD1>\r
+                       <KEYWORD1>WITH</KEYWORD1>\r
+                       <KEYWORD1>NOTFOUND</KEYWORD1>\r
+                       <KEYWORD1>ISOPEN</KEYWORD1>\r
+                       <KEYWORD1>JOIN</KEYWORD1>\r
+                       <KEYWORD1>LEFT</KEYWORD1>\r
+                       <KEYWORD1>RIGHT</KEYWORD1>\r
+                       <KEYWORD1>FULL</KEYWORD1>\r
+                       <KEYWORD1>OUTER</KEYWORD1>\r
+                       <KEYWORD1>CROSS</KEYWORD1>\r
+\r
+                       <!-- Some common packages -->\r
+                       <KEYWORD3>DBMS_SQL</KEYWORD3>\r
+                       <FUNCTION>OPEN_CURSOR</FUNCTION>\r
+                       <FUNCTION>PARSE</FUNCTION>\r
+                       <FUNCTION>BIND_VARIABLE</FUNCTION>\r
+                       <FUNCTION>BIND_ARRAY</FUNCTION>\r
+                       <FUNCTION>DEFINE_COLUMN</FUNCTION>\r
+                       <FUNCTION>DEFINE_COLUMN_LONG</FUNCTION>\r
+                       <FUNCTION>DEFINE_ARRAY</FUNCTION>\r
+                       <FUNCTION>EXECUTE</FUNCTION>\r
+                       <FUNCTION>FETCH_ROWS</FUNCTION>\r
+                       <FUNCTION>EXECUTE_AND_FETCH</FUNCTION>\r
+                       <FUNCTION>VARIABLE_VALUE</FUNCTION>\r
+                       <FUNCTION>COLUMN_VALUE</FUNCTION>\r
+                       <FUNCTION>COLUMN_VALUE_LONG</FUNCTION>\r
+                       <FUNCTION>CLOSE_CURSOR</FUNCTION>\r
+                       <FUNCTION>DEFINE_COLUMN_CHAR</FUNCTION>\r
+                       <FUNCTION>COLUMN_VALUE_CHAR</FUNCTION>\r
+\r
+                       <KEYWORD3>DBMS_PROFILER</KEYWORD3>\r
+                       <FUNCTION>START_PROFILER</FUNCTION>\r
+                       <FUNCTION>STOP_PROFILER</FUNCTION>\r
+                       <FUNCTION>ROLLUP_RUN</FUNCTION>\r
+\r
+                       <!-- other keywords (output-related) -->\r
+                       <KEYWORD3>_EDITOR</KEYWORD3>\r
+                       <KEYWORD3>ARRAYSIZE</KEYWORD3>\r
+                       <KEYWORD3>AUTOTRACE</KEYWORD3>\r
+                       <KEYWORD3>DBMS_OUTPUT</KEYWORD3>\r
+                       <KEYWORD3>ECHO</KEYWORD3>\r
+                       <KEYWORD3>ENABLE</KEYWORD3>\r
+                       <KEYWORD3>FCLOSE</KEYWORD3>\r
+                       <KEYWORD3>FCLOSE_ALL</KEYWORD3>\r
+                       <KEYWORD3>FEED</KEYWORD3>\r
+                       <KEYWORD3>FEEDBACK</KEYWORD3>\r
+                       <KEYWORD3>FILE_TYPE</KEYWORD3>\r
+                       <KEYWORD3>FOPEN</KEYWORD3>\r
+                       <KEYWORD3>HEAD</KEYWORD3>\r
+                       <KEYWORD3>INVALID_OPERATION</KEYWORD3>\r
+                       <KEYWORD3>INVALID_PATH</KEYWORD3>\r
+                       <KEYWORD3>LINESIZE</KEYWORD3>\r
+                       <KEYWORD3>PAGESIZE</KEYWORD3>\r
+                       <KEYWORD3>PAGES</KEYWORD3>\r
+                       <KEYWORD3>PAUSE</KEYWORD3>\r
+                       <KEYWORD3>DOC</KEYWORD3>\r
+                       <KEYWORD3>PUTF</KEYWORD3>\r
+                       <KEYWORD3>PUT_LINE</KEYWORD3>\r
+                       <KEYWORD3>SERVEROUTPUT</KEYWORD3>\r
+                       <KEYWORD3>SQL.PNO</KEYWORD3>\r
+                       <KEYWORD3>UTL_FILE</KEYWORD3>\r
+                       <KEYWORD3>VER</KEYWORD3>\r
+                       <KEYWORD3>VERIFY</KEYWORD3>\r
+                       <KEYWORD3>WRITE_ERROR</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
+\r
+\r
diff --git a/extra/xmode/modes/pl1.xml b/extra/xmode/modes/pl1.xml
new file mode 100644 (file)
index 0000000..ae4f609
--- /dev/null
@@ -0,0 +1,597 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd"   VALUE="*/" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+\r
+               <!-- Auto indent -->\r
+               <!-- set this to 'true' if you want to use GNU coding style -->\r
+       </PROPS>\r
+       <RULES ESCAPE="\"\r
+               IGNORE_CASE="TRUE"\r
+               HIGHLIGHT_DIGITS="FALSE">\r
+\r
+               <!-- C style comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- preprocessor statements -->\r
+               <EOL_SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="*" AT_LINE_START="TRUE">\* *process</EOL_SPAN_REGEXP>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">¬</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">;</SEQ>\r
+               <MARK_PREVIOUS AT_WHITESPACE_END="TRUE"\r
+                       MATCH_TYPE="OPERATOR"\r
+                       TYPE="LABEL">:</MARK_PREVIOUS>\r
+\r
+               <!-- Function calls -->\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <KEYWORDS>\r
+      <!-- Statements, keywords and directives -->\r
+                       <KEYWORD1>alias</KEYWORD1>\r
+                       <KEYWORD1>alloc</KEYWORD1>\r
+                       <KEYWORD1>allocate</KEYWORD1>\r
+                       <KEYWORD1>attach</KEYWORD1>\r
+                       <KEYWORD1>begin</KEYWORD1>\r
+      <KEYWORD1>by</KEYWORD1>\r
+      <KEYWORD1>byname</KEYWORD1>\r
+                       <KEYWORD1>call</KEYWORD1>\r
+                       <KEYWORD1>close</KEYWORD1>\r
+                       <KEYWORD1>copy</KEYWORD1>\r
+                       <KEYWORD1>dcl</KEYWORD1>\r
+                       <KEYWORD1>declare</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+                       <KEYWORD1>define</KEYWORD1>\r
+                       <KEYWORD1>delay</KEYWORD1>\r
+                       <KEYWORD1>delete</KEYWORD1>\r
+                       <KEYWORD1>detach</KEYWORD1>\r
+                       <KEYWORD1>dft</KEYWORD1>\r
+                       <KEYWORD1>display</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+      <KEYWORD1>downthru</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>end</KEYWORD1>\r
+                       <KEYWORD1>entry</KEYWORD1>\r
+      <KEYWORD1>exit</KEYWORD1>\r
+      <KEYWORD1>fetch</KEYWORD1>\r
+      <KEYWORD1>flush</KEYWORD1>\r
+      <KEYWORD1>format</KEYWORD1>\r
+                       <KEYWORD1>free</KEYWORD1>\r
+                       <KEYWORD1>from</KEYWORD1>\r
+      <KEYWORD1>get</KEYWORD1>\r
+      <KEYWORD1>go</KEYWORD1>\r
+                       <KEYWORD1>goto</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>ignore</KEYWORD1>\r
+                       <KEYWORD1>%include</KEYWORD1>\r
+                       <KEYWORD1>into</KEYWORD1>\r
+                       <KEYWORD1>iterate</KEYWORD1>\r
+                       <KEYWORD1>key</KEYWORD1>\r
+                       <KEYWORD1>keyfrom</KEYWORD1>\r
+                       <KEYWORD1>keyto</KEYWORD1>\r
+                       <KEYWORD1>leave</KEYWORD1>\r
+      <KEYWORD1>line</KEYWORD1>\r
+      <KEYWORD1>locate</KEYWORD1>\r
+      <KEYWORD1>loop</KEYWORD1>\r
+      <KEYWORD1>name</KEYWORD1>\r
+      <KEYWORD1>on</KEYWORD1>\r
+      <KEYWORD1>open</KEYWORD1>\r
+                       <KEYWORD1>ordinal</KEYWORD1>\r
+      <KEYWORD1>other</KEYWORD1>\r
+      <KEYWORD1>otherwise</KEYWORD1>\r
+      <KEYWORD1>package</KEYWORD1>\r
+      <KEYWORD1>page</KEYWORD1>\r
+      <KEYWORD1>proc</KEYWORD1>\r
+      <KEYWORD1>procedure</KEYWORD1>\r
+      <KEYWORD1>put</KEYWORD1>\r
+      <KEYWORD1>read</KEYWORD1>\r
+      <KEYWORD1>release</KEYWORD1>\r
+      <KEYWORD1>repeat</KEYWORD1>\r
+      <KEYWORD1>reply</KEYWORD1>\r
+      <KEYWORD1>resignal</KEYWORD1>\r
+      <KEYWORD1>return</KEYWORD1>\r
+      <KEYWORD1>revert</KEYWORD1>\r
+      <KEYWORD1>rewrite</KEYWORD1>\r
+      <KEYWORD1>select</KEYWORD1>\r
+                       <KEYWORD1>set</KEYWORD1>\r
+      <KEYWORD1>signal</KEYWORD1>\r
+                       <KEYWORD1>skip</KEYWORD1>\r
+                       <KEYWORD1>snap</KEYWORD1>\r
+      <KEYWORD1>stop</KEYWORD1>\r
+                       <KEYWORD1>string</KEYWORD1>\r
+                       <KEYWORD1>structure</KEYWORD1>\r
+      <KEYWORD1>then</KEYWORD1>\r
+      <KEYWORD1>thread</KEYWORD1>\r
+      <KEYWORD1>to</KEYWORD1>\r
+      <KEYWORD1>tstack</KEYWORD1>\r
+      <KEYWORD1>unlock</KEYWORD1>\r
+                       <KEYWORD1>until</KEYWORD1>\r
+      <KEYWORD1>upthru</KEYWORD1>\r
+      <KEYWORD1>wait</KEYWORD1>\r
+      <KEYWORD1>when</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+      <KEYWORD1>write</KEYWORD1>\r
+\r
+      <!-- Options & attributes -->\r
+                       <KEYWORD2>A</KEYWORD2>\r
+                       <KEYWORD2>abnormal</KEYWORD2>\r
+                       <KEYWORD2>aligned</KEYWORD2>\r
+                       <KEYWORD2>anycond</KEYWORD2>\r
+                       <KEYWORD2>anycondition</KEYWORD2>\r
+                       <KEYWORD2>area</KEYWORD2>\r
+                       <KEYWORD2>asgn</KEYWORD2>\r
+                       <KEYWORD2>asm</KEYWORD2>\r
+                       <KEYWORD2>assembler</KEYWORD2>\r
+                       <KEYWORD2>assignable</KEYWORD2>\r
+                       <KEYWORD2>attn</KEYWORD2>\r
+                       <KEYWORD2>attention</KEYWORD2>\r
+                       <KEYWORD2>auto</KEYWORD2>\r
+                       <KEYWORD2>automatic</KEYWORD2>\r
+                       <KEYWORD2>b</KEYWORD2>\r
+                       <KEYWORD2>b3</KEYWORD2>\r
+                       <KEYWORD2>b4</KEYWORD2>\r
+                       <KEYWORD2>based</KEYWORD2>\r
+                       <KEYWORD2>bigendian</KEYWORD2>\r
+                       <KEYWORD2>bin</KEYWORD2>\r
+                       <KEYWORD2>binary</KEYWORD2>\r
+                       <KEYWORD2>bit</KEYWORD2>\r
+                       <KEYWORD2>buf</KEYWORD2>\r
+                       <KEYWORD2>buffered</KEYWORD2>\r
+                       <KEYWORD2>builtin</KEYWORD2>\r
+                       <KEYWORD2>bx</KEYWORD2>\r
+                       <KEYWORD2>byaddr</KEYWORD2>\r
+                       <KEYWORD2>byvalue</KEYWORD2>\r
+      <KEYWORD2>C</KEYWORD2>\r
+                       <KEYWORD2>cdecl</KEYWORD2>\r
+                       <KEYWORD2>cell</KEYWORD2>\r
+                       <KEYWORD2>char</KEYWORD2>\r
+                       <KEYWORD2>character</KEYWORD2>\r
+                       <KEYWORD2>charg</KEYWORD2>\r
+                       <KEYWORD2>chargraphic</KEYWORD2>\r
+                       <KEYWORD2>cobol</KEYWORD2>\r
+                       <KEYWORD2>column</KEYWORD2>\r
+                       <KEYWORD2>complex</KEYWORD2>\r
+                       <KEYWORD2>cond</KEYWORD2>\r
+                       <KEYWORD2>condition</KEYWORD2>\r
+                       <KEYWORD2>conn</KEYWORD2>\r
+                       <KEYWORD2>connected</KEYWORD2>\r
+                       <KEYWORD2>controlled</KEYWORD2>\r
+                       <KEYWORD2>conv</KEYWORD2>\r
+                       <KEYWORD2>conversion</KEYWORD2>\r
+                       <KEYWORD2>cplx</KEYWORD2>\r
+                       <KEYWORD2>ctl</KEYWORD2>\r
+                       <KEYWORD2>data</KEYWORD2>\r
+                       <KEYWORD2>date</KEYWORD2>\r
+                       <KEYWORD2>dec</KEYWORD2>\r
+                       <KEYWORD2>decimal</KEYWORD2>\r
+                       <KEYWORD2>def</KEYWORD2>\r
+                       <KEYWORD2>defined</KEYWORD2>\r
+                       <KEYWORD2>descriptor</KEYWORD2>\r
+                       <KEYWORD2>descriptors</KEYWORD2>\r
+                       <KEYWORD2>dim</KEYWORD2>\r
+                       <KEYWORD2>dimension</KEYWORD2>\r
+                       <KEYWORD2>direct</KEYWORD2>\r
+                       <KEYWORD2>E</KEYWORD2>\r
+                       <KEYWORD2>edit</KEYWORD2>\r
+                       <KEYWORD2>endfile</KEYWORD2>\r
+                       <KEYWORD2>endpage</KEYWORD2>\r
+                       <KEYWORD2>env</KEYWORD2>\r
+                       <KEYWORD2>environment</KEYWORD2>\r
+                       <KEYWORD2>error</KEYWORD2>\r
+                       <KEYWORD2>exclusive</KEYWORD2>\r
+                       <KEYWORD2>exports</KEYWORD2>\r
+                       <KEYWORD2>ext</KEYWORD2>\r
+                       <KEYWORD2>external</KEYWORD2>\r
+                       <KEYWORD2>F</KEYWORD2>\r
+                       <KEYWORD2>fetchable</KEYWORD2>\r
+                       <KEYWORD2>file</KEYWORD2>\r
+                       <KEYWORD2>finish</KEYWORD2>\r
+                       <KEYWORD2>fixed</KEYWORD2>\r
+                       <KEYWORD2>fixedoverflow</KEYWORD2>\r
+                       <KEYWORD2>float</KEYWORD2>\r
+                       <KEYWORD2>fofl</KEYWORD2>\r
+                       <KEYWORD2>format</KEYWORD2>\r
+                       <KEYWORD2>fortran</KEYWORD2>\r
+                       <KEYWORD2>fromalien</KEYWORD2>\r
+                       <KEYWORD2>g</KEYWORD2>\r
+                       <KEYWORD2>generic</KEYWORD2>\r
+                       <KEYWORD2>graphic</KEYWORD2>\r
+                       <KEYWORD2>gx</KEYWORD2>\r
+                       <KEYWORD2>handle</KEYWORD2>\r
+                       <KEYWORD2>hexadec</KEYWORD2>\r
+                       <KEYWORD2>ieee</KEYWORD2>\r
+                       <KEYWORD2>imported</KEYWORD2>\r
+                       <KEYWORD2>init</KEYWORD2>\r
+                       <KEYWORD2>initial</KEYWORD2>\r
+                       <KEYWORD2>inline</KEYWORD2>\r
+                       <KEYWORD2>input</KEYWORD2>\r
+                       <KEYWORD2>inter</KEYWORD2>\r
+                       <KEYWORD2>internal</KEYWORD2>\r
+                       <KEYWORD2>invalidop</KEYWORD2>\r
+                       <KEYWORD2>irred</KEYWORD2>\r
+                       <KEYWORD2>irreducible</KEYWORD2>\r
+                       <KEYWORD2>keyed</KEYWORD2>\r
+                       <KEYWORD2>L</KEYWORD2>\r
+                       <KEYWORD2>label</KEYWORD2>\r
+                       <KEYWORD2>like</KEYWORD2>\r
+                       <KEYWORD2>limited</KEYWORD2>\r
+                       <KEYWORD2>linesize</KEYWORD2>\r
+                       <KEYWORD2>linkage</KEYWORD2>\r
+                       <KEYWORD2>list</KEYWORD2>\r
+                       <KEYWORD2>littleendian</KEYWORD2>\r
+                       <KEYWORD2>m</KEYWORD2>\r
+                       <KEYWORD2>main</KEYWORD2>\r
+                       <KEYWORD2>native</KEYWORD2>\r
+                       <KEYWORD2>nonasgn</KEYWORD2>\r
+                       <KEYWORD2>nocharg</KEYWORD2>\r
+                       <KEYWORD2>nochargraphic</KEYWORD2>\r
+                       <KEYWORD2>nodescriptor</KEYWORD2>\r
+                       <KEYWORD2>noexecops</KEYWORD2>\r
+                       <KEYWORD2>nomap</KEYWORD2>\r
+                       <KEYWORD2>nomapin</KEYWORD2>\r
+                       <KEYWORD2>nomapout</KEYWORD2>\r
+                       <KEYWORD2>nonasgn</KEYWORD2>\r
+                       <KEYWORD2>nonassignable</KEYWORD2>\r
+                       <KEYWORD2>nonconn</KEYWORD2>\r
+                       <KEYWORD2>nonconnected</KEYWORD2>\r
+                       <KEYWORD2>nonnative</KEYWORD2>\r
+                       <KEYWORD2>nonvar</KEYWORD2>\r
+                       <KEYWORD2>nonvarying</KEYWORD2>\r
+                       <KEYWORD2>normal</KEYWORD2>\r
+                       <KEYWORD2>offset</KEYWORD2>\r
+                       <KEYWORD2>ofl</KEYWORD2>\r
+                       <KEYWORD2>optional</KEYWORD2>\r
+                       <KEYWORD2>options</KEYWORD2>\r
+                       <KEYWORD2>optlink</KEYWORD2>\r
+                       <KEYWORD2>order</KEYWORD2>\r
+                       <KEYWORD2>output</KEYWORD2>\r
+                       <KEYWORD2>overflow</KEYWORD2>\r
+                       <KEYWORD2>P</KEYWORD2>\r
+                       <KEYWORD2>pagesize</KEYWORD2>\r
+                       <KEYWORD2>parameter</KEYWORD2>\r
+                       <KEYWORD2>pic</KEYWORD2>\r
+                       <KEYWORD2>picture</KEYWORD2>\r
+                       <KEYWORD2>pointer</KEYWORD2>\r
+                       <KEYWORD2>pos</KEYWORD2>\r
+                       <KEYWORD2>position</KEYWORD2>\r
+                       <KEYWORD2>prec</KEYWORD2>\r
+                       <KEYWORD2>precision</KEYWORD2>\r
+                       <KEYWORD2>print</KEYWORD2>\r
+                       <KEYWORD2>ptr</KEYWORD2>\r
+                       <KEYWORD2>R</KEYWORD2>\r
+                       <KEYWORD2>range</KEYWORD2>\r
+                       <KEYWORD2>real</KEYWORD2>\r
+                       <KEYWORD2>record</KEYWORD2>\r
+                       <KEYWORD2>recursive</KEYWORD2>\r
+                       <KEYWORD2>red</KEYWORD2>\r
+                       <KEYWORD2>reducible</KEYWORD2>\r
+                       <KEYWORD2>reentrant</KEYWORD2>\r
+                       <KEYWORD2>refer</KEYWORD2>\r
+                       <KEYWORD2>reorder</KEYWORD2>\r
+                       <KEYWORD2>reserved</KEYWORD2>\r
+                       <KEYWORD2>reserves</KEYWORD2>\r
+                       <KEYWORD2>retcode</KEYWORD2>\r
+                       <KEYWORD2>returns</KEYWORD2>\r
+                       <KEYWORD2>seql</KEYWORD2>\r
+                       <KEYWORD2>sequential</KEYWORD2>\r
+                       <KEYWORD2>signed</KEYWORD2>\r
+                       <KEYWORD2>size</KEYWORD2>\r
+                       <KEYWORD2>static</KEYWORD2>\r
+                       <KEYWORD2>stdcall</KEYWORD2>\r
+                       <KEYWORD2>storage</KEYWORD2>\r
+                       <KEYWORD2>stream</KEYWORD2>\r
+                       <KEYWORD2>strg</KEYWORD2>\r
+                       <KEYWORD2>stringrange</KEYWORD2>\r
+                       <KEYWORD2>strz</KEYWORD2>\r
+                       <KEYWORD2>stringsize</KEYWORD2>\r
+                       <KEYWORD2>subrg</KEYWORD2>\r
+                       <KEYWORD2>subscriptrange</KEYWORD2>\r
+                       <KEYWORD2>system</KEYWORD2>\r
+                       <KEYWORD2>task</KEYWORD2>\r
+                       <KEYWORD2>title</KEYWORD2>\r
+                       <KEYWORD2>transmit</KEYWORD2>\r
+                       <KEYWORD2>type</KEYWORD2>\r
+                       <KEYWORD2>ufl</KEYWORD2>\r
+                       <KEYWORD2>unal</KEYWORD2>\r
+                       <KEYWORD2>unaligned</KEYWORD2>\r
+                       <KEYWORD2>unbuf</KEYWORD2>\r
+                       <KEYWORD2>unbuffered</KEYWORD2>\r
+                       <KEYWORD2>undefinedfile</KEYWORD2>\r
+                       <KEYWORD2>underflow</KEYWORD2>\r
+                       <KEYWORD2>undf</KEYWORD2>\r
+                       <KEYWORD2>union</KEYWORD2>\r
+                       <KEYWORD2>unsigned</KEYWORD2>\r
+                       <KEYWORD2>update</KEYWORD2>\r
+                       <KEYWORD2>value</KEYWORD2>\r
+                       <KEYWORD2>var</KEYWORD2>\r
+                       <KEYWORD2>variable</KEYWORD2>\r
+                       <KEYWORD2>varying</KEYWORD2>\r
+                       <KEYWORD2>varyingz</KEYWORD2>\r
+                       <KEYWORD2>varz</KEYWORD2>\r
+                       <KEYWORD2>wchar</KEYWORD2>\r
+                       <KEYWORD2>widechar</KEYWORD2>\r
+                       <KEYWORD2>winmain</KEYWORD2>\r
+                       <KEYWORD2>wx</KEYWORD2>\r
+                       <KEYWORD2>x</KEYWORD2>\r
+                       <KEYWORD2>xn</KEYWORD2>\r
+                       <KEYWORD2>xu</KEYWORD2>\r
+                       <KEYWORD2>zdiv</KEYWORD2>\r
+                       <KEYWORD2>zerodivide</KEYWORD2>\r
+\r
+      <!-- Builtins -->\r
+                       <KEYWORD3>abs</KEYWORD3>\r
+                       <KEYWORD3>acos</KEYWORD3>\r
+                       <KEYWORD3>acosf</KEYWORD3>\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>addr</KEYWORD3>\r
+                       <KEYWORD3>address</KEYWORD3>\r
+                       <KEYWORD3>addrdata</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>allocation</KEYWORD3>\r
+                       <KEYWORD3>allocn</KEYWORD3>\r
+                       <KEYWORD3>allocsize</KEYWORD3>\r
+                       <KEYWORD3>any</KEYWORD3>\r
+                       <KEYWORD3>asin</KEYWORD3>\r
+                       <KEYWORD3>asinf</KEYWORD3>\r
+                       <KEYWORD3>atan</KEYWORD3>\r
+                       <KEYWORD3>atand</KEYWORD3>\r
+                       <KEYWORD3>atanf</KEYWORD3>\r
+                       <KEYWORD3>atanh</KEYWORD3>\r
+                       <KEYWORD3>availablearea</KEYWORD3>\r
+                       <KEYWORD3>binaryvalue</KEYWORD3>\r
+                       <KEYWORD3>bind</KEYWORD3>\r
+                       <KEYWORD3>binvalue</KEYWORD3>\r
+                       <KEYWORD3>bitlocation</KEYWORD3>\r
+                       <KEYWORD3>bitloc</KEYWORD3>\r
+                       <KEYWORD3>bool</KEYWORD3>\r
+                       <KEYWORD3>byte</KEYWORD3>\r
+                       <KEYWORD3>cast</KEYWORD3>\r
+                       <KEYWORD3>cds</KEYWORD3>\r
+                       <KEYWORD3>ceil</KEYWORD3>\r
+                       <KEYWORD3>center</KEYWORD3>\r
+                       <KEYWORD3>centre</KEYWORD3>\r
+                       <KEYWORD3>centreleft</KEYWORD3>\r
+                       <KEYWORD3>centreleft</KEYWORD3>\r
+                       <KEYWORD3>centreright</KEYWORD3>\r
+                       <KEYWORD3>centerright</KEYWORD3>\r
+                       <KEYWORD3>charg</KEYWORD3>\r
+                       <KEYWORD3>chargraphic</KEYWORD3>\r
+                       <KEYWORD3>chargval</KEYWORD3>\r
+                       <KEYWORD3>checkstg</KEYWORD3>\r
+                       <KEYWORD3>collate</KEYWORD3>\r
+                       <KEYWORD3>compare</KEYWORD3>\r
+                       <KEYWORD3>conjg</KEYWORD3>\r
+                       <KEYWORD3>cos</KEYWORD3>\r
+                       <KEYWORD3>cosd</KEYWORD3>\r
+                       <KEYWORD3>cosf</KEYWORD3>\r
+                       <KEYWORD3>cosh</KEYWORD3>\r
+                       <KEYWORD3>count</KEYWORD3>\r
+                       <KEYWORD3>cs</KEYWORD3>\r
+                       <KEYWORD3>cstg</KEYWORD3>\r
+                       <KEYWORD3>currentsize</KEYWORD3>\r
+                       <KEYWORD3>currentstorage</KEYWORD3>\r
+                       <KEYWORD3>datafield</KEYWORD3>\r
+                       <KEYWORD3>date</KEYWORD3>\r
+                       <KEYWORD3>datetime</KEYWORD3>\r
+                       <KEYWORD3>days</KEYWORD3>\r
+                       <KEYWORD3>daystodate</KEYWORD3>\r
+                       <KEYWORD3>daystosecs</KEYWORD3>\r
+                       <KEYWORD3>divide</KEYWORD3>\r
+                       <KEYWORD3>empty</KEYWORD3>\r
+                       <KEYWORD3>entryaddr</KEYWORD3>\r
+                       <KEYWORD3>epsilon</KEYWORD3>\r
+                       <KEYWORD3>erfc</KEYWORD3>\r
+                       <KEYWORD3>exp</KEYWORD3>\r
+                       <KEYWORD3>expf</KEYWORD3>\r
+                       <KEYWORD3>exponent</KEYWORD3>\r
+                       <KEYWORD3>fileddint</KEYWORD3>\r
+                       <KEYWORD3>fileddtest</KEYWORD3>\r
+                       <KEYWORD3>fileddword</KEYWORD3>\r
+                       <KEYWORD3>fileid</KEYWORD3>\r
+                       <KEYWORD3>fileopen</KEYWORD3>\r
+                       <KEYWORD3>fileread</KEYWORD3>\r
+                       <KEYWORD3>fileseek</KEYWORD3>\r
+                       <KEYWORD3>filetell</KEYWORD3>\r
+                       <KEYWORD3>filewrite</KEYWORD3>\r
+                       <KEYWORD3>first</KEYWORD3>\r
+                       <KEYWORD3>floor</KEYWORD3>\r
+                       <KEYWORD3>gamma</KEYWORD3>\r
+                       <KEYWORD3>getenv</KEYWORD3>\r
+                       <KEYWORD3>hbound</KEYWORD3>\r
+                       <KEYWORD3>hex</KEYWORD3>\r
+                       <KEYWORD3>heximage</KEYWORD3>\r
+                       <KEYWORD3>high</KEYWORD3>\r
+                       <KEYWORD3>huge</KEYWORD3>\r
+                       <KEYWORD3>iand</KEYWORD3>\r
+                       <KEYWORD3>ieor</KEYWORD3>\r
+                       <KEYWORD3>imag</KEYWORD3>\r
+                       <KEYWORD3>index</KEYWORD3>\r
+                       <KEYWORD3>inot</KEYWORD3>\r
+                       <KEYWORD3>ior</KEYWORD3>\r
+                       <KEYWORD3>isigned</KEYWORD3>\r
+                       <KEYWORD3>isll</KEYWORD3>\r
+                       <KEYWORD3>ismain</KEYWORD3>\r
+                       <KEYWORD3>isrl</KEYWORD3>\r
+                       <KEYWORD3>iunsigned</KEYWORD3>\r
+                       <KEYWORD3>last</KEYWORD3>\r
+                       <KEYWORD3>lbound</KEYWORD3>\r
+                       <KEYWORD3>left</KEYWORD3>\r
+                       <KEYWORD3>length</KEYWORD3>\r
+                       <KEYWORD3>lineno</KEYWORD3>\r
+                       <KEYWORD3>loc</KEYWORD3>\r
+                       <KEYWORD3>location</KEYWORD3>\r
+                       <KEYWORD3>log</KEYWORD3>\r
+                       <KEYWORD3>logf</KEYWORD3>\r
+                       <KEYWORD3>loggamma</KEYWORD3>\r
+                       <KEYWORD3>log2</KEYWORD3>\r
+                       <KEYWORD3>log10</KEYWORD3>\r
+                       <KEYWORD3>log10f</KEYWORD3>\r
+                       <KEYWORD3>low</KEYWORD3>\r
+                       <KEYWORD3>lowercase</KEYWORD3>\r
+                       <KEYWORD3>lower2</KEYWORD3>\r
+                       <KEYWORD3>max</KEYWORD3>\r
+                       <KEYWORD3>maxexp</KEYWORD3>\r
+                       <KEYWORD3>maxlength</KEYWORD3>\r
+                       <KEYWORD3>min</KEYWORD3>\r
+                       <KEYWORD3>minexp</KEYWORD3>\r
+                       <KEYWORD3>mod</KEYWORD3>\r
+                       <KEYWORD3>mpstr</KEYWORD3>\r
+                       <KEYWORD3>multiply</KEYWORD3>\r
+                       <KEYWORD3>new</KEYWORD3>\r
+                       <KEYWORD3>null</KEYWORD3>\r
+                       <KEYWORD3>offestadd</KEYWORD3>\r
+                       <KEYWORD3>offestdiff</KEYWORD3>\r
+                       <KEYWORD3>offestsubtract</KEYWORD3>\r
+                       <KEYWORD3>offestvalue</KEYWORD3>\r
+                       <KEYWORD3>omitted</KEYWORD3>\r
+                       <KEYWORD3>onchar</KEYWORD3>\r
+                       <KEYWORD3>oncode</KEYWORD3>\r
+                       <KEYWORD3>oncondond</KEYWORD3>\r
+                       <KEYWORD3>oncondid</KEYWORD3>\r
+                       <KEYWORD3>oncount</KEYWORD3>\r
+                       <KEYWORD3>onfile</KEYWORD3>\r
+                       <KEYWORD3>ongsource</KEYWORD3>\r
+                       <KEYWORD3>onkey</KEYWORD3>\r
+                       <KEYWORD3>onloc</KEYWORD3>\r
+                       <KEYWORD3>onsource</KEYWORD3>\r
+                       <KEYWORD3>onsubcode</KEYWORD3>\r
+                       <KEYWORD3>onwchar</KEYWORD3>\r
+                       <KEYWORD3>onwsource</KEYWORD3>\r
+                       <KEYWORD3>ordinalname</KEYWORD3>\r
+                       <KEYWORD3>ordinalpred</KEYWORD3>\r
+                       <KEYWORD3>ordinalsucc</KEYWORD3>\r
+                       <KEYWORD3>packagename</KEYWORD3>\r
+                       <KEYWORD3>pageno</KEYWORD3>\r
+                       <KEYWORD3>places</KEYWORD3>\r
+                       <KEYWORD3>pliascii</KEYWORD3>\r
+                       <KEYWORD3>plianc</KEYWORD3>\r
+                       <KEYWORD3>plickpt</KEYWORD3>\r
+                       <KEYWORD3>plidelete</KEYWORD3>\r
+                       <KEYWORD3>plidump</KEYWORD3>\r
+                       <KEYWORD3>pliebcdic</KEYWORD3>\r
+                       <KEYWORD3>plifill</KEYWORD3>\r
+                       <KEYWORD3>plifree</KEYWORD3>\r
+                       <KEYWORD3>plimove</KEYWORD3>\r
+                       <KEYWORD3>pliover</KEYWORD3>\r
+                       <KEYWORD3>plirest</KEYWORD3>\r
+                       <KEYWORD3>pliretc</KEYWORD3>\r
+                       <KEYWORD3>pliretv</KEYWORD3>\r
+                       <KEYWORD3>plisaxa</KEYWORD3>\r
+                       <KEYWORD3>plisaxb</KEYWORD3>\r
+                       <KEYWORD3>plisrta</KEYWORD3>\r
+                       <KEYWORD3>plisrtb</KEYWORD3>\r
+                       <KEYWORD3>plisrtc</KEYWORD3>\r
+                       <KEYWORD3>plisrtd</KEYWORD3>\r
+                       <KEYWORD3>pointeradd</KEYWORD3>\r
+                       <KEYWORD3>ptradd</KEYWORD3>\r
+                       <KEYWORD3>pointerdiff</KEYWORD3>\r
+                       <KEYWORD3>ptrdiff</KEYWORD3>\r
+                       <KEYWORD3>pointersubtract</KEYWORD3>\r
+                       <KEYWORD3>ptrsubtract</KEYWORD3>\r
+                       <KEYWORD3>pointervalue</KEYWORD3>\r
+                       <KEYWORD3>ptrvalue</KEYWORD3>\r
+                       <KEYWORD3>poly</KEYWORD3>\r
+                       <KEYWORD3>pred</KEYWORD3>\r
+                       <KEYWORD3>present</KEYWORD3>\r
+                       <KEYWORD3>procname</KEYWORD3>\r
+                       <KEYWORD3>procedurename</KEYWORD3>\r
+                       <KEYWORD3>prod</KEYWORD3>\r
+                       <KEYWORD3>putenv</KEYWORD3>\r
+                       <KEYWORD3>radix</KEYWORD3>\r
+                       <KEYWORD3>raise</KEYWORD3>\r
+                       <KEYWORD3>random</KEYWORD3>\r
+                       <KEYWORD3>rank</KEYWORD3>\r
+                       <KEYWORD3>rem</KEYWORD3>\r
+                       <KEYWORD3>repattern</KEYWORD3>\r
+                       <KEYWORD3>respec</KEYWORD3>\r
+                       <KEYWORD3>reverse</KEYWORD3>\r
+                       <KEYWORD3>right</KEYWORD3>\r
+                       <KEYWORD3>round</KEYWORD3>\r
+                       <KEYWORD3>samekey</KEYWORD3>\r
+                       <KEYWORD3>scale</KEYWORD3>\r
+                       <KEYWORD3>search</KEYWORD3>\r
+                       <KEYWORD3>searchr</KEYWORD3>\r
+                       <KEYWORD3>secs</KEYWORD3>\r
+                       <KEYWORD3>secstodate</KEYWORD3>\r
+                       <KEYWORD3>secstodays</KEYWORD3>\r
+                       <KEYWORD3>sign</KEYWORD3>\r
+                       <KEYWORD3>signed</KEYWORD3>\r
+                       <KEYWORD3>sin</KEYWORD3>\r
+                       <KEYWORD3>sind</KEYWORD3>\r
+                       <KEYWORD3>sinf</KEYWORD3>\r
+                       <KEYWORD3>sinh</KEYWORD3>\r
+                       <KEYWORD3>size</KEYWORD3>\r
+                       <KEYWORD3>sourcefile</KEYWORD3>\r
+                       <KEYWORD3>sourceline</KEYWORD3>\r
+                       <KEYWORD3>sqrt</KEYWORD3>\r
+                       <KEYWORD3>sqrtf</KEYWORD3>\r
+                       <KEYWORD3>stg</KEYWORD3>\r
+                       <KEYWORD3>storage</KEYWORD3>\r
+                       <KEYWORD3>string</KEYWORD3>\r
+                       <KEYWORD3>substr</KEYWORD3>\r
+                       <KEYWORD3>subtract</KEYWORD3>\r
+                       <KEYWORD3>succ</KEYWORD3>\r
+                       <KEYWORD3>sum</KEYWORD3>\r
+                       <KEYWORD3>sysnull</KEYWORD3>\r
+                       <KEYWORD3>tally</KEYWORD3>\r
+                       <KEYWORD3>tan</KEYWORD3>\r
+                       <KEYWORD3>tand</KEYWORD3>\r
+                       <KEYWORD3>tanf</KEYWORD3>\r
+                       <KEYWORD3>tanh</KEYWORD3>\r
+                       <KEYWORD3>threadid</KEYWORD3>\r
+                       <KEYWORD3>time</KEYWORD3>\r
+                       <KEYWORD3>tiny</KEYWORD3>\r
+                       <KEYWORD3>translate</KEYWORD3>\r
+                       <KEYWORD3>trim</KEYWORD3>\r
+                       <KEYWORD3>trunc</KEYWORD3>\r
+                       <KEYWORD3>type</KEYWORD3>\r
+                       <KEYWORD3>unallocated</KEYWORD3>\r
+                       <KEYWORD3>unspec</KEYWORD3>\r
+                       <KEYWORD3>uppercase</KEYWORD3>\r
+                       <KEYWORD3>valid</KEYWORD3>\r
+                       <KEYWORD3>validdate</KEYWORD3>\r
+                       <KEYWORD3>varglist</KEYWORD3>\r
+                       <KEYWORD3>vargsizer</KEYWORD3>\r
+                       <KEYWORD3>verify</KEYWORD3>\r
+                       <KEYWORD3>verifyr</KEYWORD3>\r
+                       <KEYWORD3>wcharval</KEYWORD3>\r
+                       <KEYWORD3>weekday</KEYWORD3>\r
+                       <KEYWORD3>whigh</KEYWORD3>\r
+                       <KEYWORD3>wlow</KEYWORD3>\r
+                       <KEYWORD3>y4date</KEYWORD3>\r
+                       <KEYWORD3>y4julian</KEYWORD3>\r
+                       <KEYWORD3>y4year</KEYWORD3>\r
+\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/pop11.xml b/extra/xmode/modes/pop11.xml
new file mode 100644 (file)
index 0000000..47685dd
--- /dev/null
@@ -0,0 +1,262 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- pop11 mode by David S. Moss -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE=";;;" />\r
+    </PROPS>\r
+\r
+       <RULES SET="MAIN" ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- Normal comments. -->\r
+               <SPAN TYPE="COMMENT1" DELEGATE="COMMENT">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+        <EOL_SPAN TYPE="COMMENT1">;;;</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" DELEGATE="STRING">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" DELEGATE="STRING">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" DELEGATE="STRING">\r
+                       <BEGIN>`</BEGIN>\r
+                       <END>`</END>\r
+               </SPAN>\r
+\r
+        <SPAN TYPE="LITERAL1" DELEGATE="LIST">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+\r
+        <SPAN TYPE="LITERAL1" DELEGATE="LIST">\r
+                       <BEGIN>{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+        <SPAN TYPE="LITERAL1" DELEGATE="LIST">\r
+                       <BEGIN>![</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+\r
+        <!-- Functions -->\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <MARK_PREVIOUS AT_LINE_START="TRUE" TYPE="LABEL" MATCH_TYPE="OPERATOR">:</MARK_PREVIOUS>\r
+\r
+        <!-- Needs to be before conditional compilation or won't work -->\r
+        <SEQ TYPE="NULL">#_&lt;</SEQ>\r
+        <SEQ TYPE="NULL">&gt;_#</SEQ>\r
+\r
+        <!-- Conditional compilation -->\r
+        <MARK_FOLLOWING AT_LINE_START="TRUE" TYPE="LABEL">#_</MARK_FOLLOWING>\r
+\r
+               <SEQ TYPE="NULL">)</SEQ>\r
+               <SEQ TYPE="NULL">(</SEQ>\r
+               <SEQ TYPE="NULL">.</SEQ>\r
+               <SEQ TYPE="NULL">,</SEQ>\r
+               <SEQ TYPE="NULL">;</SEQ>\r
+               <SEQ TYPE="NULL">^</SEQ>\r
+               <SEQ TYPE="NULL">@</SEQ>\r
+               <SEQ TYPE="NULL">:</SEQ>\r
+               <SEQ TYPE="NULL">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+\r
+               <KEYWORDS>\r
+                   <LITERAL2>false</LITERAL2>\r
+                   <LITERAL2>true</LITERAL2>\r
+                   <LITERAL2>database</LITERAL2>\r
+                   <LITERAL2>it</LITERAL2>\r
+                   <LITERAL2>undef</LITERAL2>\r
+\r
+            <!-- keywords -->\r
+            <KEYWORD1>define</KEYWORD1>\r
+            <KEYWORD1>class</KEYWORD1>\r
+            <KEYWORD1>enddefine</KEYWORD1>\r
+            <KEYWORD1>dlocal</KEYWORD1>\r
+            <KEYWORD1>lvars</KEYWORD1>\r
+            <KEYWORD1>vars</KEYWORD1>\r
+            <KEYWORD1>slot</KEYWORD1>\r
+            <KEYWORD1>instance</KEYWORD1>\r
+            <KEYWORD1>endinstance</KEYWORD1>\r
+            <KEYWORD1>method</KEYWORD1>\r
+                   <KEYWORD1>syntax</KEYWORD1>\r
+            <KEYWORD1>biginteger</KEYWORD1>\r
+            <KEYWORD1>boolean</KEYWORD1>\r
+            <KEYWORD1>complex</KEYWORD1>\r
+            <KEYWORD1>ddecimal</KEYWORD1>\r
+            <KEYWORD1>decimal</KEYWORD1>\r
+            <KEYWORD1>device</KEYWORD1>\r
+            <KEYWORD1>ident</KEYWORD1>\r
+            <KEYWORD1>integer</KEYWORD1>\r
+            <KEYWORD1>intvec</KEYWORD1>\r
+            <KEYWORD1>key</KEYWORD1>\r
+            <KEYWORD1>nil</KEYWORD1>\r
+            <KEYWORD1>pair</KEYWORD1>\r
+            <KEYWORD1>procedure</KEYWORD1>\r
+            <KEYWORD1>process</KEYWORD1>\r
+            <KEYWORD1>prologterm</KEYWORD1>\r
+            <KEYWORD1>prologvar</KEYWORD1>\r
+            <KEYWORD1>ratio</KEYWORD1>\r
+            <KEYWORD1>ref</KEYWORD1>\r
+            <KEYWORD1>section</KEYWORD1>\r
+            <KEYWORD1>string</KEYWORD1>\r
+            <KEYWORD1>termin</KEYWORD1>\r
+            <KEYWORD1>vector</KEYWORD1>\r
+            <KEYWORD1>word</KEYWORD1>\r
+\r
+            <!-- flow control -->\r
+            <KEYWORD3>if</KEYWORD3>\r
+            <KEYWORD3>forevery</KEYWORD3>\r
+            <KEYWORD3>endforevery</KEYWORD3>\r
+            <KEYWORD3>then</KEYWORD3>\r
+            <KEYWORD3>switchon</KEYWORD3>\r
+            <KEYWORD3>endswitchon</KEYWORD3>\r
+            <KEYWORD3>case</KEYWORD3>\r
+            <KEYWORD3>elseif</KEYWORD3>\r
+            <KEYWORD3>else</KEYWORD3>\r
+            <KEYWORD3>endif</KEYWORD3>\r
+            <KEYWORD3>for</KEYWORD3>\r
+            <KEYWORD3>repeat</KEYWORD3>\r
+            <KEYWORD3>from</KEYWORD3>\r
+            <KEYWORD3>till</KEYWORD3>\r
+            <KEYWORD3>step</KEYWORD3>\r
+            <KEYWORD3>while</KEYWORD3>\r
+            <KEYWORD3>endfor</KEYWORD3>\r
+            <KEYWORD3>endrepeat</KEYWORD3>\r
+            <KEYWORD3>endwhile</KEYWORD3>\r
+            <KEYWORD3>times</KEYWORD3>\r
+            <KEYWORD3>to</KEYWORD3>\r
+            <KEYWORD3>do</KEYWORD3>\r
+            <KEYWORD3>by</KEYWORD3>\r
+            <KEYWORD3>in</KEYWORD3>\r
+            <KEYWORD3>return</KEYWORD3>\r
+\r
+            <!-- other statements -->\r
+            <KEYWORD2>and</KEYWORD2>\r
+            <KEYWORD2>or</KEYWORD2>\r
+            <KEYWORD2>matches</KEYWORD2>\r
+            <KEYWORD2>quitloop</KEYWORD2>\r
+            <KEYWORD2>goto</KEYWORD2>\r
+            <KEYWORD2>uses</KEYWORD2>\r
+            <KEYWORD2>trace</KEYWORD2>\r
+            <KEYWORD2>cons_with</KEYWORD2>\r
+            <KEYWORD2>consstring</KEYWORD2>\r
+\r
+            <!-- Built in functions -->\r
+            <LITERAL2>interrupt</LITERAL2>\r
+            <LITERAL2>partapply</LITERAL2>\r
+            <LITERAL2>consclosure</LITERAL2>\r
+            <LITERAL2>max</LITERAL2>\r
+            <LITERAL2>add</LITERAL2>\r
+            <LITERAL2>remove</LITERAL2>\r
+            <LITERAL2>alladd</LITERAL2>\r
+            <LITERAL2>quitif</LITERAL2>\r
+            <LITERAL2>copydata</LITERAL2>\r
+            <LITERAL2>copytree</LITERAL2>\r
+            <LITERAL2>copylist</LITERAL2>\r
+            <LITERAL2>length</LITERAL2>\r
+            <LITERAL2>hd</LITERAL2>\r
+            <LITERAL2>tl</LITERAL2>\r
+            <LITERAL2>rev</LITERAL2>\r
+            <LITERAL2>shuffle</LITERAL2>\r
+            <LITERAL2>oneof</LITERAL2>\r
+            <LITERAL2>sort</LITERAL2>\r
+            <LITERAL2>syssort</LITERAL2>\r
+            <LITERAL2>random</LITERAL2>\r
+            <LITERAL2>readline</LITERAL2>\r
+            <LITERAL2>not</LITERAL2>\r
+            <LITERAL2>pr</LITERAL2>\r
+            <LITERAL2>nl</LITERAL2>\r
+            <LITERAL2>present</LITERAL2>\r
+            <LITERAL2>subword</LITERAL2>\r
+            <LITERAL2>member</LITERAL2>\r
+            <LITERAL2>length</LITERAL2>\r
+            <LITERAL2>listlength</LITERAL2>\r
+            <LITERAL2>datalength</LITERAL2>\r
+            <LITERAL2>mishap</LITERAL2>\r
+            <LITERAL2>last</LITERAL2>\r
+            <LITERAL2>delete</LITERAL2>\r
+            <LITERAL2>valof</LITERAL2>\r
+            <LITERAL2>dataword</LITERAL2>\r
+\r
+            <!-- input validation functions -->\r
+            <LITERAL2>isnumber</LITERAL2>\r
+            <LITERAL2>isinteger</LITERAL2>\r
+            <LITERAL2>islist</LITERAL2>\r
+            <LITERAL2>isboolean</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+    <RULES SET="LIST" DEFAULT="LITERAL1" HIGHLIGHT_DIGITS="TRUE">\r
+        <SPAN TYPE="LITERAL1" DELEGATE="LIST">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+\r
+        <SPAN TYPE="LITERAL1" DELEGATE="LIST">\r
+                       <BEGIN>{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+        <SPAN TYPE="LITERAL1" DELEGATE="LIST">\r
+                       <BEGIN>![</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" DELEGATE="STRING">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" DELEGATE="STRING">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+        <SPAN DELEGATE="MAIN" TYPE="NULL">\r
+                       <BEGIN>%</BEGIN>\r
+                       <END>%</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="COMMENT1" DELEGATE="COMMENT">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+        <EOL_SPAN TYPE="COMMENT1">;;;</EOL_SPAN>\r
+               <SEQ TYPE="LITERAL2">=</SEQ>\r
+               <SEQ TYPE="LITERAL2">==</SEQ>\r
+\r
+        <MARK_FOLLOWING TYPE="LITERAL2">^</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="LITERAL2">?</MARK_FOLLOWING>\r
+       </RULES>\r
+\r
+    <RULES SET="STRING" ESCAPE="\" DEFAULT="LITERAL1" HIGHLIGHT_DIGITS="FALSE">\r
+    </RULES>\r
+\r
+    <RULES NO_WORD_SEP="." SET="COMMENT" DEFAULT="COMMENT1" HIGHLIGHT_DIGITS="FALSE">\r
+        <MARK_PREVIOUS TYPE="LABEL">:</MARK_PREVIOUS>\r
+               <SEQ TYPE="COMMENT1">*</SEQ>\r
+    </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/postscript.xml b/extra/xmode/modes/postscript.xml
new file mode 100644 (file)
index 0000000..1588b62
--- /dev/null
@@ -0,0 +1,97 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- PostScript mode, by Slava Pestov. Based on PostScriptTokenMarker by\r
+     Ralf Engels -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="%" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- Comments -->\r
+               <EOL_SPAN TYPE="COMMENT2">%!</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT2">%?</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT2">%%</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1">%</EOL_SPAN>\r
+\r
+               <!-- Literals -->\r
+               <SPAN TYPE="LITERAL1" DELEGATE="LITERAL">\r
+                       <BEGIN>(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="LABEL">/</MARK_FOLLOWING>\r
+\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>pop</KEYWORD1>\r
+                       <KEYWORD1>exch</KEYWORD1>\r
+                       <KEYWORD1>dup</KEYWORD1>\r
+                       <KEYWORD1>copy</KEYWORD1>\r
+                       <KEYWORD1>roll</KEYWORD1>\r
+                       <KEYWORD1>clear</KEYWORD1>\r
+                       <KEYWORD1>count</KEYWORD1>\r
+                       <KEYWORD1>mark</KEYWORD1>\r
+                       <KEYWORD1>cleartomark</KEYWORD1>\r
+                       <KEYWORD1>counttomark</KEYWORD1>\r
+\r
+                       <KEYWORD1>exec</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>ifelse</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>repeat</KEYWORD1>\r
+                       <KEYWORD1>loop</KEYWORD1>\r
+                       <KEYWORD1>exit</KEYWORD1>\r
+                       <KEYWORD1>stop</KEYWORD1>\r
+                       <KEYWORD1>stopped</KEYWORD1>\r
+                       <KEYWORD1>countexecstack</KEYWORD1>\r
+                       <KEYWORD1>execstack</KEYWORD1>\r
+                       <KEYWORD1>quit</KEYWORD1>\r
+                       <KEYWORD1>start</KEYWORD1>\r
+\r
+                       <OPERATOR>add</OPERATOR>\r
+                       <OPERATOR>div</OPERATOR>\r
+                       <OPERATOR>idiv</OPERATOR>\r
+                       <OPERATOR>mod</OPERATOR>\r
+                       <OPERATOR>mul</OPERATOR>\r
+                       <OPERATOR>sub</OPERATOR>\r
+                       <OPERATOR>abs</OPERATOR>\r
+                       <OPERATOR>ned</OPERATOR>\r
+                       <OPERATOR>ceiling</OPERATOR>\r
+                       <OPERATOR>floor</OPERATOR>\r
+                       <OPERATOR>round</OPERATOR>\r
+                       <OPERATOR>truncate</OPERATOR>\r
+                       <OPERATOR>sqrt</OPERATOR>\r
+                       <OPERATOR>atan</OPERATOR>\r
+                       <OPERATOR>cos</OPERATOR>\r
+                       <OPERATOR>sin</OPERATOR>\r
+                       <OPERATOR>exp</OPERATOR>\r
+                       <OPERATOR>ln</OPERATOR>\r
+                       <OPERATOR>log</OPERATOR>\r
+                       <OPERATOR>rand</OPERATOR>\r
+                       <OPERATOR>srand</OPERATOR>\r
+                       <OPERATOR>rrand</OPERATOR>\r
+\r
+                       <LITERAL2>true</LITERAL2>\r
+                       <LITERAL2>false</LITERAL2>\r
+                       <LITERAL2>NULL</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="LITERAL" DEFAULT="LITERAL1" ESCAPE="\">\r
+               <SPAN TYPE="LITERAL1" DELEGATE="LITERAL">\r
+                       <BEGIN>(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/povray.xml b/extra/xmode/modes/povray.xml
new file mode 100644 (file)
index 0000000..b76ba9e
--- /dev/null
@@ -0,0 +1,518 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- Povray mode, by Jan Schaefer\r
+     based on original Povray mode by Slava Pestov\r
+     based on PovrayTokenMarker, by Romain Guy -->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- C style comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR" AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+\r
+               <!-- Function calls -->\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD2>aa_level</KEYWORD2>\r
+                       <KEYWORD2>aa_threshold</KEYWORD2>\r
+                       <FUNCTION>abs</FUNCTION>\r
+                       <KEYWORD2>absorption</KEYWORD2>\r
+                       <KEYWORD2>accuracy</KEYWORD2>\r
+                       <FUNCTION>acos</FUNCTION>\r
+                       <FUNCTION>acosh</FUNCTION>\r
+                       <KEYWORD2>adaptive</KEYWORD2>\r
+                       <KEYWORD2>adc_bailout</KEYWORD2>\r
+                       <KEYWORD2>agate</KEYWORD2>\r
+                       <KEYWORD2>agate_turb</KEYWORD2>\r
+                       <KEYWORD2>all</KEYWORD2>\r
+                       <KEYWORD2>all_intersections</KEYWORD2>\r
+                       <KEYWORD2>alpha</KEYWORD2>\r
+                       <KEYWORD2>altitude</KEYWORD2>\r
+                       <KEYWORD2>always_sample</KEYWORD2>\r
+                       <KEYWORD2>ambient</KEYWORD2>\r
+                       <KEYWORD2>ambient_light</KEYWORD2>\r
+                       <KEYWORD2>angle</KEYWORD2>\r
+                       <KEYWORD2>aperture</KEYWORD2>\r
+                       <KEYWORD2>append</KEYWORD2>\r
+                       <KEYWORD2>arc_angle</KEYWORD2>\r
+                       <KEYWORD2>area_light</KEYWORD2>\r
+                       <KEYWORD2>array</KEYWORD2>\r
+                       <FUNCTION>asc</FUNCTION>\r
+                       <KEYWORD2>ascii</KEYWORD2>\r
+                       <FUNCTION>asin</FUNCTION>\r
+                       <FUNCTION>asinh</FUNCTION>\r
+                       <KEYWORD2>assumed_gamma</KEYWORD2>\r
+                       <FUNCTION>atan</FUNCTION>\r
+                       <FUNCTION>atan2</FUNCTION>\r
+                       <FUNCTION>atanh</FUNCTION>\r
+                       <KEYWORD2>autostop</KEYWORD2>\r
+                       <KEYWORD2>average</KEYWORD2>\r
+                       <KEYWORD2>b_spline</KEYWORD2>\r
+                       <KEYWORD1>background</KEYWORD1>\r
+                       <KEYWORD2>bezier_spline</KEYWORD2>\r
+                       <KEYWORD1>bicubic_patch</KEYWORD1>\r
+                       <KEYWORD2>black_hole</KEYWORD2>\r
+                       <KEYWORD1>blob</KEYWORD1>\r
+                       <LITERAL1>blue</LITERAL1>\r
+                       <KEYWORD2>blur_samples</KEYWORD2>\r
+                       <KEYWORD1>bounded_by</KEYWORD1>\r
+                       <KEYWORD1>box</KEYWORD1>\r
+                       <KEYWORD2>boxed</KEYWORD2>\r
+                       <KEYWORD2>bozo</KEYWORD2>\r
+                       <KEYWORD1>#break</KEYWORD1>\r
+                       <KEYWORD2>brick</KEYWORD2>\r
+                       <KEYWORD2>brick_size</KEYWORD2>\r
+                       <KEYWORD2>brightness</KEYWORD2>\r
+                       <KEYWORD2>brilliance</KEYWORD2>\r
+                       <KEYWORD1>bump_map</KEYWORD1>\r
+                       <KEYWORD2>bump_size</KEYWORD2>\r
+                       <KEYWORD2>bumps</KEYWORD2>\r
+                       <KEYWORD1>camera</KEYWORD1>\r
+                       <KEYWORD1>#case</KEYWORD1>\r
+                       <KEYWORD2>caustics</KEYWORD2>\r
+                       <FUNCTION>ceil</FUNCTION>\r
+                       <KEYWORD2>cells</KEYWORD2>\r
+                       <KEYWORD2>charset</KEYWORD2>\r
+                       <KEYWORD2>checker</KEYWORD2>\r
+                       <FUNCTION>chr</FUNCTION>\r
+                       <KEYWORD2>circular</KEYWORD2>\r
+                       <KEYWORD1>clipped_by</KEYWORD1>\r
+                       <LITERAL1>clock</LITERAL1>\r
+                       <LITERAL1>clock_delta</LITERAL1>\r
+                       <LITERAL1>clock_on</LITERAL1>\r
+                       <KEYWORD2>collect</KEYWORD2>\r
+                       <KEYWORD2>color</KEYWORD2>\r
+                       <KEYWORD2>color_map</KEYWORD2>\r
+                       <KEYWORD2>colour</KEYWORD2>\r
+                       <KEYWORD2>colour_map</KEYWORD2>\r
+                       <KEYWORD2>component</KEYWORD2>\r
+                       <KEYWORD2>composite</KEYWORD2>\r
+                       <FUNCTION>concat</FUNCTION>\r
+                       <KEYWORD1>cone</KEYWORD1>\r
+                       <KEYWORD2>confidence</KEYWORD2>\r
+                       <KEYWORD2>conic_sweep</KEYWORD2>\r
+                       <KEYWORD2>conserve_energy</KEYWORD2>\r
+                       <KEYWORD1>contained_by</KEYWORD1>\r
+                       <KEYWORD2>control0</KEYWORD2>\r
+                       <KEYWORD2>control1</KEYWORD2>\r
+                       <KEYWORD2>coords</KEYWORD2>\r
+                       <FUNCTION>cos</FUNCTION>\r
+                       <FUNCTION>cosh</FUNCTION>\r
+                       <KEYWORD2>count</KEYWORD2>\r
+                       <KEYWORD2>crackle</KEYWORD2>\r
+                       <KEYWORD2>crand</KEYWORD2>\r
+                       <KEYWORD1>cube</KEYWORD1>\r
+                       <KEYWORD1>cubic</KEYWORD1>\r
+                       <KEYWORD2>cubic_spline</KEYWORD2>\r
+                       <KEYWORD2>cubic_wave</KEYWORD2>\r
+                       <KEYWORD2>cutaway_textures</KEYWORD2>\r
+                       <KEYWORD1>cylinder</KEYWORD1>\r
+                       <KEYWORD2>cylindrical</KEYWORD2>\r
+                       <KEYWORD1>#debug</KEYWORD1>\r
+                       <KEYWORD1>#declare</KEYWORD1>\r
+                       <KEYWORD1>#default</KEYWORD1>\r
+                       <FUNCTION>defined</FUNCTION>\r
+                       <FUNCTION>degrees</FUNCTION>\r
+                       <KEYWORD2>density</KEYWORD2>\r
+                       <KEYWORD2>density_file</KEYWORD2>\r
+                       <KEYWORD1>density_map</KEYWORD1>\r
+                       <KEYWORD2>dents</KEYWORD2>\r
+                       <KEYWORD2>df3</KEYWORD2>\r
+                       <KEYWORD1>difference</KEYWORD1>\r
+                       <KEYWORD2>diffuse</KEYWORD2>\r
+                       <FUNCTION>dimension_size</FUNCTION>\r
+                       <FUNCTION>dimensions</FUNCTION>\r
+                       <KEYWORD2>direction</KEYWORD2>\r
+                       <KEYWORD1>disc</KEYWORD1>\r
+                       <KEYWORD2>dispersion</KEYWORD2>\r
+                       <KEYWORD2>dispersion_samples</KEYWORD2>\r
+                       <KEYWORD2>dist_exp</KEYWORD2>\r
+                       <KEYWORD2>distance</KEYWORD2>\r
+                       <FUNCTION>div</FUNCTION>\r
+                       <KEYWORD2>double_illuminate</KEYWORD2>\r
+                       <KEYWORD2>eccentricity</KEYWORD2>\r
+                       <KEYWORD1>#else</KEYWORD1>\r
+                       <KEYWORD2>emission</KEYWORD2>\r
+                       <KEYWORD1>#end</KEYWORD1>\r
+                       <KEYWORD1>#error</KEYWORD1>\r
+                       <KEYWORD2>error_bound</KEYWORD2>\r
+                       <KEYWORD2>evaluate</KEYWORD2>\r
+                       <FUNCTION>exp</FUNCTION>\r
+                       <KEYWORD2>expand_thresholds</KEYWORD2>\r
+                       <KEYWORD2>exponent</KEYWORD2>\r
+                       <KEYWORD2>exterior</KEYWORD2>\r
+                       <KEYWORD2>extinction</KEYWORD2>\r
+                       <KEYWORD1>face_indices</KEYWORD1>\r
+                       <KEYWORD2>facets</KEYWORD2>\r
+                       <KEYWORD2>fade_color</KEYWORD2>\r
+                       <KEYWORD2>fade_colour</KEYWORD2>\r
+                       <KEYWORD2>fade_distance</KEYWORD2>\r
+                       <KEYWORD2>fade_power</KEYWORD2>\r
+                       <KEYWORD2>falloff</KEYWORD2>\r
+                       <KEYWORD2>falloff_angle</KEYWORD2>\r
+                       <LITERAL1>false</LITERAL1>\r
+                       <KEYWORD1>#fclose</KEYWORD1>\r
+                       <FUNCTION>file_exists</FUNCTION>\r
+                       <KEYWORD2>filter</KEYWORD2>\r
+                       <LITERAL1>final_clock</LITERAL1>\r
+                       <LITERAL1>final_frame</LITERAL1>\r
+                       <KEYWORD1>finish</KEYWORD1>\r
+                       <KEYWORD2>fisheye</KEYWORD2>\r
+                       <KEYWORD2>flatness</KEYWORD2>\r
+                       <KEYWORD2>flip</KEYWORD2>\r
+                       <FUNCTION>floor</FUNCTION>\r
+                       <KEYWORD2>focal_point</KEYWORD2>\r
+                       <KEYWORD1>fog</KEYWORD1>\r
+                       <KEYWORD2>fog_alt</KEYWORD2>\r
+                       <KEYWORD2>fog_offset</KEYWORD2>\r
+                       <KEYWORD2>fog_type</KEYWORD2>\r
+                       <KEYWORD1>#fopen</KEYWORD1>\r
+                       <KEYWORD2>form</KEYWORD2>\r
+                       <LITERAL1>frame_number</LITERAL1>\r
+                       <KEYWORD2>frequency</KEYWORD2>\r
+                       <KEYWORD2>fresnel</KEYWORD2>\r
+                       <KEYWORD1>function</KEYWORD1>\r
+                       <KEYWORD2>gather</KEYWORD2>\r
+                       <KEYWORD2>gif</KEYWORD2>\r
+                       <KEYWORD2>global_lights</KEYWORD2>\r
+                       <KEYWORD1>global_settings</KEYWORD1>\r
+                       <KEYWORD2>gradient</KEYWORD2>\r
+                       <KEYWORD2>granite</KEYWORD2>\r
+                       <LITERAL1>gray</LITERAL1>\r
+                       <KEYWORD2>gray_threshold</KEYWORD2>\r
+                       <LITERAL1>green</LITERAL1>\r
+                       <KEYWORD2>h_angle</KEYWORD2>\r
+                       <KEYWORD1>height_field</KEYWORD1>\r
+                       <KEYWORD2>hexagon</KEYWORD2>\r
+                       <KEYWORD2>hf_gray_16</KEYWORD2>\r
+                       <KEYWORD2>hierarchy</KEYWORD2>\r
+                       <KEYWORD2>hollow</KEYWORD2>\r
+                       <KEYWORD2>hypercomplex</KEYWORD2>\r
+                       <KEYWORD1>#if</KEYWORD1>\r
+                       <KEYWORD1>#ifdef</KEYWORD1>\r
+                       <KEYWORD2>iff</KEYWORD2>\r
+                       <KEYWORD1>#ifndef</KEYWORD1>\r
+                       <LITERAL1>image_height</LITERAL1>\r
+                       <KEYWORD1>image_map</KEYWORD1>\r
+                       <KEYWORD2>image_pattern</KEYWORD2>\r
+                       <LITERAL1>image_width</LITERAL1>\r
+                       <KEYWORD1>#include</KEYWORD1>\r
+                       <LITERAL1>initial_clock</LITERAL1>\r
+                       <LITERAL1>initial_frame</LITERAL1>\r
+                       <FUNCTION>inside</FUNCTION>\r
+                       <FUNCTION>int</FUNCTION>\r
+                       <KEYWORD1>interior</KEYWORD1>\r
+                       <KEYWORD1>interior_texture</KEYWORD1>\r
+                       <FUNCTION>internal</FUNCTION>\r
+                       <KEYWORD2>interpolate</KEYWORD2>\r
+                       <KEYWORD1>intersection</KEYWORD1>\r
+                       <KEYWORD2>intervals</KEYWORD2>\r
+                       <KEYWORD2>inverse</KEYWORD2>\r
+                       <KEYWORD1>ior</KEYWORD1>\r
+                       <KEYWORD1>irid</KEYWORD1>\r
+                       <KEYWORD2>irid_wavelength</KEYWORD2>\r
+                       <KEYWORD1>isosurface</KEYWORD1>\r
+                       <KEYWORD2>jitter</KEYWORD2>\r
+                       <KEYWORD2>jpeg</KEYWORD2>\r
+                       <KEYWORD2>julia</KEYWORD2>\r
+                       <KEYWORD1>julia_fractal</KEYWORD1>\r
+                       <KEYWORD1>lathe</KEYWORD1>\r
+                       <KEYWORD2>lambda</KEYWORD2>\r
+                       <KEYWORD2>leopard</KEYWORD2>\r
+                       <KEYWORD1>light_group</KEYWORD1>\r
+                       <KEYWORD1>light_source</KEYWORD1>\r
+                       <KEYWORD2>linear_spline</KEYWORD2>\r
+                       <KEYWORD2>linear_sweep</KEYWORD2>\r
+                       <FUNCTION>ln</FUNCTION>\r
+                       <KEYWORD2>load_file</KEYWORD2>\r
+                       <KEYWORD1>#local</KEYWORD1>\r
+                       <KEYWORD2>location</KEYWORD2>\r
+                       <FUNCTION>log</FUNCTION>\r
+                       <KEYWORD2>look_at</KEYWORD2>\r
+                       <KEYWORD1>looks_like</KEYWORD1>\r
+                       <KEYWORD2>low_error_factor</KEYWORD2>\r
+                       <KEYWORD1>#macro</KEYWORD1>\r
+                       <KEYWORD2>magnet</KEYWORD2>\r
+                       <KEYWORD2>major_radius</KEYWORD2>\r
+                       <KEYWORD2>mandel</KEYWORD2>\r
+                       <KEYWORD2>map_type</KEYWORD2>\r
+                       <KEYWORD2>marble</KEYWORD2>\r
+                       <KEYWORD1>material</KEYWORD1>\r
+                       <KEYWORD1>material_map</KEYWORD1>\r
+                       <KEYWORD2>matrix</KEYWORD2>\r
+                       <FUNCTION>max</FUNCTION>\r
+                       <KEYWORD2>max_extent</KEYWORD2>\r
+                       <KEYWORD2>max_gradient</KEYWORD2>\r
+                       <KEYWORD2>max_intersections</KEYWORD2>\r
+                       <KEYWORD2>max_iteration</KEYWORD2>\r
+                       <KEYWORD2>max_sample</KEYWORD2>\r
+                       <KEYWORD2>max_trace</KEYWORD2>\r
+                       <KEYWORD2>max_trace_level</KEYWORD2>\r
+                       <KEYWORD1>media</KEYWORD1>\r
+                       <KEYWORD2>media_attenuation</KEYWORD2>\r
+                       <KEYWORD2>media_interaction</KEYWORD2>\r
+                       <KEYWORD1>merge</KEYWORD1>\r
+                       <KEYWORD1>mesh</KEYWORD1>\r
+                       <KEYWORD1>mesh2</KEYWORD1>\r
+                       <KEYWORD2>metallic</KEYWORD2>\r
+                       <KEYWORD2>method</KEYWORD2>\r
+                       <KEYWORD2>metric</KEYWORD2>\r
+                       <FUNCTION>min</FUNCTION>\r
+                       <KEYWORD2>min_extent</KEYWORD2>\r
+                       <KEYWORD2>minimum_reuse</KEYWORD2>\r
+                       <FUNCTION>mod</FUNCTION>\r
+                       <KEYWORD2>mortar</KEYWORD2>\r
+                       <KEYWORD2>natural_spline</KEYWORD2>\r
+                       <KEYWORD2>nearest_count</KEYWORD2>\r
+                       <LITERAL1>no</LITERAL1>\r
+                       <KEYWORD2>no_bump_scale</KEYWORD2>\r
+                       <KEYWORD2>no_image</KEYWORD2>\r
+                       <KEYWORD2>no_reflection</KEYWORD2>\r
+                       <KEYWORD2>no_shadow</KEYWORD2>\r
+                       <KEYWORD2>noise_generator</KEYWORD2>\r
+                       <KEYWORD1>normal</KEYWORD1>\r
+                       <KEYWORD1>normal_indices</KEYWORD1>\r
+                       <KEYWORD1>normal_map</KEYWORD1>\r
+                       <KEYWORD1>normal_vectors</KEYWORD1>\r
+                       <KEYWORD2>number_of_waves</KEYWORD2>\r
+                       <KEYWORD1>object</KEYWORD1>\r
+                       <KEYWORD2>octaves</KEYWORD2>\r
+                       <LITERAL1>off</LITERAL1>\r
+                       <KEYWORD2>offset</KEYWORD2>\r
+                       <KEYWORD2>omega</KEYWORD2>\r
+                       <KEYWORD2>omnimax</KEYWORD2>\r
+                       <LITERAL1>on</LITERAL1>\r
+                       <KEYWORD2>once</KEYWORD2>\r
+                       <KEYWORD2>onion</KEYWORD2>\r
+                       <KEYWORD2>open</KEYWORD2>\r
+                       <KEYWORD2>orient</KEYWORD2>\r
+                       <KEYWORD2>orientation</KEYWORD2>\r
+                       <KEYWORD2>orthographic</KEYWORD2>\r
+                       <KEYWORD2>panoramic</KEYWORD2>\r
+                       <KEYWORD2>parallel</KEYWORD2>\r
+                       <KEYWORD2>parametric</KEYWORD2>\r
+                       <KEYWORD2>pass_through</KEYWORD2>\r
+                       <KEYWORD1>pattern</KEYWORD1>\r
+                       <KEYWORD2>perspective</KEYWORD2>\r
+                       <KEYWORD2>pgm</KEYWORD2>\r
+                       <KEYWORD2>phase</KEYWORD2>\r
+                       <KEYWORD2>phong</KEYWORD2>\r
+                       <KEYWORD2>phong_size</KEYWORD2>\r
+                       <KEYWORD1>photons</KEYWORD1>\r
+                       <LITERAL1>pi</LITERAL1>\r
+                       <KEYWORD1>pigment</KEYWORD1>\r
+                       <KEYWORD1>pigment_map</KEYWORD1>\r
+                       <KEYWORD1>pigment_pattern</KEYWORD1>\r
+                       <KEYWORD2>planar</KEYWORD2>\r
+                       <KEYWORD1>plane</KEYWORD1>\r
+                       <KEYWORD1>png</KEYWORD1>\r
+                       <KEYWORD2>point_at</KEYWORD2>\r
+                       <KEYWORD1>poly</KEYWORD1>\r
+                       <KEYWORD2>poly_wave</KEYWORD2>\r
+                       <KEYWORD1>polygon</KEYWORD1>\r
+                       <KEYWORD2>pot</KEYWORD2>\r
+                       <FUNCTION>pow</FUNCTION>\r
+                       <KEYWORD2>ppm</KEYWORD2>\r
+                       <KEYWORD2>precision</KEYWORD2>\r
+                       <KEYWORD2>precompute</KEYWORD2>\r
+                       <KEYWORD2>pretrace_end</KEYWORD2>\r
+                       <KEYWORD2>pretrace_start</KEYWORD2>\r
+                       <KEYWORD1>prism</KEYWORD1>\r
+                       <KEYWORD2>projected_through</KEYWORD2>\r
+                       <KEYWORD2>pwr</KEYWORD2>\r
+                       <KEYWORD2>quadratic_spline</KEYWORD2>\r
+                       <KEYWORD2>quadric</KEYWORD2>\r
+                       <KEYWORD2>quartic</KEYWORD2>\r
+                       <KEYWORD2>quaternion</KEYWORD2>\r
+                       <KEYWORD2>quick_color</KEYWORD2>\r
+                       <KEYWORD2>quick_colour</KEYWORD2>\r
+                       <KEYWORD2>quilted</KEYWORD2>\r
+                       <KEYWORD2>radial</KEYWORD2>\r
+                       <FUNCTION>radians</FUNCTION>\r
+                       <KEYWORD1>radiosity</KEYWORD1>\r
+                       <KEYWORD2>radius</KEYWORD2>\r
+                       <KEYWORD1>rainbow</KEYWORD1>\r
+                       <KEYWORD2>ramp_wave</KEYWORD2>\r
+                       <FUNCTION>rand</FUNCTION>\r
+                       <KEYWORD1>#range</KEYWORD1>\r
+                       <KEYWORD2>range_divider</KEYWORD2>\r
+                       <KEYWORD2>ratio</KEYWORD2>\r
+                       <KEYWORD1>#read</KEYWORD1>\r
+                       <KEYWORD2>reciprocal</KEYWORD2>\r
+                       <KEYWORD2>recursion_limit</KEYWORD2>\r
+                       <LITERAL1>red</LITERAL1>\r
+                       <KEYWORD1>reflection</KEYWORD1>\r
+                       <KEYWORD2>reflection_exponent</KEYWORD2>\r
+                       <KEYWORD2>refraction</KEYWORD2>\r
+                       <KEYWORD1>#render</KEYWORD1>\r
+                       <KEYWORD2>repeat</KEYWORD2>\r
+                       <KEYWORD2>rgb</KEYWORD2>\r
+                       <KEYWORD2>rgbf</KEYWORD2>\r
+                       <KEYWORD2>rgbft</KEYWORD2>\r
+                       <KEYWORD2>rgbt</KEYWORD2>\r
+                       <KEYWORD2>right</KEYWORD2>\r
+                       <KEYWORD2>ripples</KEYWORD2>\r
+                       <KEYWORD2>rotate</KEYWORD2>\r
+                       <KEYWORD2>roughness</KEYWORD2>\r
+                       <KEYWORD2>samples</KEYWORD2>\r
+                       <KEYWORD2>save_file</KEYWORD2>\r
+                       <KEYWORD2>scale</KEYWORD2>\r
+                       <KEYWORD2>scallop_wave</KEYWORD2>\r
+                       <KEYWORD2>scattering</KEYWORD2>\r
+                       <FUNCTION>seed</FUNCTION>\r
+                       <KEYWORD2>select</KEYWORD2>\r
+                       <KEYWORD2>shadowless</KEYWORD2>\r
+                       <FUNCTION>sin</FUNCTION>\r
+                       <KEYWORD2>sine_wave</KEYWORD2>\r
+                       <FUNCTION>sinh</FUNCTION>\r
+                       <KEYWORD2>size</KEYWORD2>\r
+                       <KEYWORD2>sky</KEYWORD2>\r
+                       <KEYWORD1>sky_sphere</KEYWORD1>\r
+                       <KEYWORD2>slice</KEYWORD2>\r
+                       <KEYWORD1>slope</KEYWORD1>\r
+                       <KEYWORD1>slope_map</KEYWORD1>\r
+                       <KEYWORD2>smooth</KEYWORD2>\r
+                       <KEYWORD1>smooth_triangle</KEYWORD1>\r
+                       <KEYWORD1>solid</KEYWORD1>\r
+                       <KEYWORD1>sor</KEYWORD1>\r
+                       <KEYWORD2>spacing</KEYWORD2>\r
+                       <KEYWORD2>specular</KEYWORD2>\r
+                       <KEYWORD1>sphere</KEYWORD1>\r
+                       <KEYWORD1>sphere_sweep</KEYWORD1>\r
+                       <KEYWORD2>spherical</KEYWORD2>\r
+                       <KEYWORD2>spiral1</KEYWORD2>\r
+                       <KEYWORD2>spiral2</KEYWORD2>\r
+                       <KEYWORD1>spline</KEYWORD1>\r
+                       <KEYWORD2>split_union</KEYWORD2>\r
+                       <KEYWORD2>spotlight</KEYWORD2>\r
+                       <KEYWORD2>spotted</KEYWORD2>\r
+                       <KEYWORD2>sqr</KEYWORD2>\r
+                       <FUNCTION>sqrt</FUNCTION>\r
+                       <KEYWORD1>#statistics</KEYWORD1>\r
+                       <FUNCTION>str</FUNCTION>\r
+                       <FUNCTION>strcmp</FUNCTION>\r
+                       <KEYWORD2>strength</KEYWORD2>\r
+                       <FUNCTION>strlen</FUNCTION>\r
+                       <FUNCTION>strlwr</FUNCTION>\r
+                       <FUNCTION>strupr</FUNCTION>\r
+                       <KEYWORD2>sturm</KEYWORD2>\r
+                       <FUNCTION>substr</FUNCTION>\r
+                       <KEYWORD1>superellipsoid</KEYWORD1>\r
+                       <KEYWORD1>#switch</KEYWORD1>\r
+                       <KEYWORD2>sys</KEYWORD2>\r
+                       <LITERAL1>t</LITERAL1>\r
+                       <FUNCTION>tan</FUNCTION>\r
+                       <FUNCTION>tanh</FUNCTION>\r
+                       <KEYWORD2>target</KEYWORD2>\r
+                       <KEYWORD1>text</KEYWORD1>\r
+                       <KEYWORD1>texture</KEYWORD1>\r
+                       <KEYWORD1>texture_list</KEYWORD1>\r
+                       <KEYWORD1>texture_map</KEYWORD1>\r
+                       <KEYWORD2>tga</KEYWORD2>\r
+                       <KEYWORD2>thickness</KEYWORD2>\r
+                       <KEYWORD2>threshold</KEYWORD2>\r
+                       <KEYWORD2>tiff</KEYWORD2>\r
+                       <KEYWORD2>tightness</KEYWORD2>\r
+                       <KEYWORD2>tile2</KEYWORD2>\r
+                       <KEYWORD2>tiles</KEYWORD2>\r
+                       <KEYWORD2>tolerance</KEYWORD2>\r
+                       <KEYWORD2>toroidal</KEYWORD2>\r
+                       <KEYWORD1>torus</KEYWORD1>\r
+                       <FUNCTION>trace</FUNCTION>\r
+                       <KEYWORD2>transform</KEYWORD2>\r
+                       <KEYWORD2>translate</KEYWORD2>\r
+                       <KEYWORD2>transmit</KEYWORD2>\r
+                       <KEYWORD1>triangle</KEYWORD1>\r
+                       <KEYWORD2>triangle_wave</KEYWORD2>\r
+                       <LITERAL1>true</LITERAL1>\r
+                       <KEYWORD2>ttf</KEYWORD2>\r
+                       <KEYWORD2>turb_depth</KEYWORD2>\r
+                       <KEYWORD2>turbulence</KEYWORD2>\r
+                       <KEYWORD2>type</KEYWORD2>\r
+                       <LITERAL1>u</LITERAL1>\r
+                       <KEYWORD2>u_steps</KEYWORD2>\r
+                       <KEYWORD2>ultra_wide_angle</KEYWORD2>\r
+                       <KEYWORD1>#undef</KEYWORD1>\r
+                       <KEYWORD1>union</KEYWORD1>\r
+                       <KEYWORD2>up</KEYWORD2>\r
+                       <KEYWORD2>use_alpha</KEYWORD2>\r
+                       <KEYWORD2>use_color</KEYWORD2>\r
+                       <KEYWORD2>use_colour</KEYWORD2>\r
+                       <KEYWORD2>use_index</KEYWORD2>\r
+                       <KEYWORD2>utf8</KEYWORD2>\r
+                       <KEYWORD1>uv_indices</KEYWORD1>\r
+                       <KEYWORD1>uv_mapping</KEYWORD1>\r
+                       <KEYWORD1>uv_vectors</KEYWORD1>\r
+                       <LITERAL1>v</LITERAL1>\r
+                       <KEYWORD2>v_angle</KEYWORD2>\r
+                       <KEYWORD2>v_steps</KEYWORD2>\r
+                       <FUNCTION>val</FUNCTION>\r
+                       <KEYWORD2>variance</KEYWORD2>\r
+                       <FUNCTION>vaxis_rotate</FUNCTION>\r
+                       <FUNCTION>vcross</FUNCTION>\r
+                       <FUNCTION>vdot</FUNCTION>\r
+                       <KEYWORD1>#version</KEYWORD1>\r
+                       <KEYWORD1>vertex_vectors</KEYWORD1>\r
+                       <FUNCTION>vlength</FUNCTION>\r
+                       <FUNCTION>vnormalize</FUNCTION>\r
+                       <FUNCTION>vrotate</FUNCTION>\r
+                       <FUNCTION>vstr</FUNCTION>\r
+                       <FUNCTION>vturbulence</FUNCTION>\r
+                       <KEYWORD1>#warning</KEYWORD1>\r
+                       <KEYWORD1>warp</KEYWORD1>\r
+                       <KEYWORD2>water_level</KEYWORD2>\r
+                       <KEYWORD2>waves</KEYWORD2>\r
+                       <KEYWORD1>#while</KEYWORD1>\r
+                       <KEYWORD2>width</KEYWORD2>\r
+                       <KEYWORD2>wood</KEYWORD2>\r
+                       <KEYWORD2>wrinkles</KEYWORD2>\r
+                       <KEYWORD1>#write</KEYWORD1>\r
+                       <LITERAL1>x</LITERAL1>\r
+                       <LITERAL1>y</LITERAL1>\r
+                       <LITERAL1>yes</LITERAL1>\r
+                       <LITERAL1>z</LITERAL1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/powerdynamo.xml b/extra/xmode/modes/powerdynamo.xml
new file mode 100644 (file)
index 0000000..7babf3d
--- /dev/null
@@ -0,0 +1,464 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+<!--\r
+Sybase PowerDynamo mode file for jEdit - v 1.0\r
+(For the 5 people in the world who still have to program in dynamo.)\r
+\r
+By Ben Williams (benw@webmedia.com.au)\r
+\r
+1.0  2003-11-13\r
+Initial release - supports dynamo script, SQL tags, and mostly complete support\r
+for the other tags (data, document, etc). more support planned for future.\r
+\r
+-->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=" @       %^*()+=|\{}[]:;,.?$&amp;" />\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE">\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-script">\r
+                       <BEGIN>&lt;!--script</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- these are the other dynamo tag types. for the meoment, we'll just hand them over to powerdynamo-script,\r
+                        but in future versions we can easily add individual processing for each of them, as they should have.\r
+               -->\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-data">\r
+                       <BEGIN>&lt;!--data</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-document">\r
+                       <BEGIN>&lt;!--document</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-script">\r
+                       <BEGIN>&lt;!--evaluate</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-script">\r
+                       <BEGIN>&lt;!--execute</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-general">\r
+                       <BEGIN>&lt;!--formatting</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-general">\r
+                       <BEGIN>&lt;!--/formatting</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-general">\r
+                       <BEGIN>&lt;!--include</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-general">\r
+                       <BEGIN>&lt;!--label</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="transact-sql::MAIN">\r
+                       <BEGIN>&lt;!--sql</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-general">\r
+                       <BEGIN>&lt;!--sql_error_code</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-general">\r
+                       <BEGIN>&lt;!--sql_error_info</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-general">\r
+                       <BEGIN>&lt;!--sql_state</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-general">\r
+                       <BEGIN>&lt;!--sql_on_no_error</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-general">\r
+                       <BEGIN>&lt;!--/sql_on_no_error</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-general">\r
+                       <BEGIN>&lt;!--sql_on_error</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-general">\r
+                       <BEGIN>&lt;!--/sql_on_error</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-general">\r
+                       <BEGIN>&lt;!--sql_on_no_rows</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-general">\r
+                       <BEGIN>&lt;!--/sql_on_no_rows</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-general">\r
+                       <BEGIN>&lt;!--sql_on_rows</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-tag-general">\r
+                       <BEGIN>&lt;!--/sql_on_rows</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="html::JAVASCRIPT">\r
+                       <BEGIN>&lt;SCRIPT</BEGIN>\r
+                       <END>&lt;/SCRIPT&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="html::CSS">\r
+                       <BEGIN>&lt;STYLE</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD instructions -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">\r
+                       <BEGIN>&lt;!</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="TAGS" DEFAULT="MARKUP">\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-script">\r
+                       <BEGIN>&lt;!--script</BEGIN>\r
+                       <END>--?&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="TAGS_LITERAL">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="TAGS_LITERAL">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="TAGS_LITERAL" DEFAULT="LITERAL1">\r
+               <SPAN TYPE="LABEL" DELEGATE="powerdynamo-script">\r
+                       <BEGIN>&lt;!--script</BEGIN>\r
+                       <END>?--&gt;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="powerdynamo-script" ESCAPE="\" HIGHLIGHT_DIGITS="TRUE">\r
+               <!--PROPS>\r
+                       <PROPERTY NAME="commentStart" VALUE="/*" />\r
+                       <PROPERTY NAME="lineComment" VALUE="//" />\r
+               </PROPS-->\r
+\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="powerdynamo_LITERAL">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" DELEGATE="powerdynamo_LITERAL">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">//</EOL_SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">;</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+               <SEQ TYPE="OPERATOR">@</SEQ>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <!-- Language constructs (24) -->\r
+                       <KEYWORD1>abstract</KEYWORD1>\r
+                       <KEYWORD1>break</KEYWORD1>\r
+                       <KEYWORD1>byte</KEYWORD1>\r
+                       <KEYWORD1>boolean</KEYWORD1>\r
+                       <KEYWORD1>catch</KEYWORD1>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>class</KEYWORD1>\r
+                       <KEYWORD1>char</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+                       <KEYWORD1>double</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>exists</KEYWORD1>\r
+                       <KEYWORD1>extends</KEYWORD1>\r
+                       <KEYWORD1>false</KEYWORD1>\r
+                       <KEYWORD1>file</KEYWORD1>\r
+                       <KEYWORD1>final</KEYWORD1>\r
+                       <KEYWORD1>float</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>finally</KEYWORD1>\r
+                       <KEYWORD1>function</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>import</KEYWORD1>\r
+                       <KEYWORD1>implements</KEYWORD1>\r
+                       <KEYWORD1>int</KEYWORD1>\r
+                       <KEYWORD1>interface</KEYWORD1>\r
+                       <KEYWORD1>instanceof</KEYWORD1>\r
+                       <KEYWORD1>long</KEYWORD1>\r
+                       <KEYWORD1>length</KEYWORD1>\r
+                       <KEYWORD1>native</KEYWORD1>\r
+                       <KEYWORD1>new</KEYWORD1>\r
+                       <KEYWORD1>null</KEYWORD1>\r
+                       <KEYWORD1>package</KEYWORD1>\r
+                       <KEYWORD1>private</KEYWORD1>\r
+                       <KEYWORD1>protected</KEYWORD1>\r
+                       <KEYWORD1>public</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>switch</KEYWORD1>\r
+                       <KEYWORD1>synchronized</KEYWORD1>\r
+                       <KEYWORD1>short</KEYWORD1>\r
+                       <KEYWORD1>static</KEYWORD1>\r
+                       <KEYWORD1>super</KEYWORD1>\r
+                       <KEYWORD1>try</KEYWORD1>\r
+                       <KEYWORD1>true</KEYWORD1>\r
+                       <KEYWORD1>this</KEYWORD1>\r
+                       <KEYWORD1>throw</KEYWORD1>\r
+                       <KEYWORD1>throws</KEYWORD1>\r
+                       <KEYWORD1>threadsafe</KEYWORD1>\r
+                       <KEYWORD1>transient</KEYWORD1>\r
+                       <KEYWORD1>var</KEYWORD1>\r
+                       <KEYWORD1>void</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+\r
+                       <!-- objects -->\r
+                       <KEYWORD2></KEYWORD2>\r
+                       <KEYWORD2>document</KEYWORD2>\r
+                       <KEYWORD2>connection</KEYWORD2>\r
+                       <KEYWORD2>file</KEYWORD2>\r
+                       <KEYWORD2>query</KEYWORD2>\r
+                       <KEYWORD2>session</KEYWORD2>\r
+                       <KEYWORD2>site</KEYWORD2>\r
+                       <KEYWORD2>system</KEYWORD2>\r
+                       <KEYWORD2>typeof</KEYWORD2>\r
+\r
+                       <!-- methods & attributes -->\r
+                       <KEYWORD3>AskQuestion</KEYWORD3>\r
+                       <KEYWORD3>autoCommit</KEYWORD3>\r
+                       <KEYWORD3>Close</KEYWORD3>\r
+                       <KEYWORD3>Commit</KEYWORD3>\r
+                       <KEYWORD3>Connect</KEYWORD3>\r
+                       <KEYWORD3>CreateConnection</KEYWORD3>\r
+                       <KEYWORD3>CreateDocument</KEYWORD3>\r
+                       <KEYWORD3>CreatePropertySheet</KEYWORD3>\r
+                       <KEYWORD3>CreateQuery</KEYWORD3>\r
+                       <KEYWORD3>CreateWizard</KEYWORD3>\r
+                       <KEYWORD3>cachedOutputTimeOut</KEYWORD3>\r
+                       <KEYWORD3>charAt</KEYWORD3>\r
+                       <KEYWORD3>connected</KEYWORD3>\r
+                       <KEYWORD3>connection</KEYWORD3>\r
+                       <KEYWORD3>connectionId</KEYWORD3>\r
+                       <KEYWORD3>connectionName</KEYWORD3>\r
+                       <KEYWORD3>connectionType</KEYWORD3>\r
+                       <KEYWORD3>connectParameters</KEYWORD3>\r
+                       <KEYWORD3>contentType</KEYWORD3>\r
+                       <KEYWORD3>DeleteConnection</KEYWORD3>\r
+                       <KEYWORD3>DeleteDocument</KEYWORD3>\r
+                       <KEYWORD3>Disconnect</KEYWORD3>\r
+                       <KEYWORD3>database</KEYWORD3>\r
+                       <KEYWORD3>dataSource</KEYWORD3>\r
+                       <KEYWORD3>dataSourceList</KEYWORD3>\r
+                       <KEYWORD3>description</KEYWORD3>\r
+                       <KEYWORD3>Exec</KEYWORD3>\r
+                       <KEYWORD3>Execute</KEYWORD3>\r
+                       <KEYWORD3>ExportTo</KEYWORD3>\r
+                       <KEYWORD3>eof</KEYWORD3>\r
+                       <KEYWORD3>errorNumber</KEYWORD3>\r
+                       <KEYWORD3>errorString</KEYWORD3>\r
+                       <KEYWORD3>GetColumnCount</KEYWORD3>\r
+                       <KEYWORD3>GetColumnIndex</KEYWORD3>\r
+                       <KEYWORD3>GetColumnLabel</KEYWORD3>\r
+                       <KEYWORD3>GetConnection</KEYWORD3>\r
+                       <KEYWORD3>GetConnectionIdList</KEYWORD3>\r
+                       <KEYWORD3>GetConnectionNameList</KEYWORD3>\r
+                       <KEYWORD3>GetCWD</KEYWORD3>\r
+                       <KEYWORD3>GetDirectory</KEYWORD3>\r
+                       <KEYWORD3>GetDocument</KEYWORD3>\r
+                       <KEYWORD3>GetEmpty</KEYWORD3>\r
+                       <KEYWORD3>GetEnv</KEYWORD3>\r
+                       <KEYWORD3>GetErrorCode</KEYWORD3>\r
+                       <KEYWORD3>GetErrorInfo</KEYWORD3>\r
+                       <KEYWORD3>GetEventList</KEYWORD3>\r
+                       <KEYWORD3>GetFilePtr</KEYWORD3>\r
+                       <KEYWORD3>GetGenerated</KEYWORD3>\r
+                       <KEYWORD3>GetRootDocument</KEYWORD3>\r
+                       <KEYWORD3>GetRowCount</KEYWORD3>\r
+                       <KEYWORD3>GetServerVariable</KEYWORD3>\r
+                       <KEYWORD3>GetState</KEYWORD3>\r
+                       <KEYWORD3>GetSupportedMoves</KEYWORD3>\r
+                       <KEYWORD3>GetValue</KEYWORD3>\r
+                       <KEYWORD3>ImportFrom</KEYWORD3>\r
+                       <KEYWORD3>Include</KEYWORD3>\r
+                       <KEYWORD3>id</KEYWORD3>\r
+                       <KEYWORD3>indexOf</KEYWORD3>\r
+                       <KEYWORD3>lastIndexOf</KEYWORD3>\r
+                       <KEYWORD3>lastModified</KEYWORD3>\r
+                       <KEYWORD3>length</KEYWORD3>\r
+                       <KEYWORD3>location</KEYWORD3>\r
+                       <KEYWORD3>Move</KEYWORD3>\r
+                       <KEYWORD3>MoveFirst</KEYWORD3>\r
+                       <KEYWORD3>MoveLast</KEYWORD3>\r
+                       <KEYWORD3>MoveNext</KEYWORD3>\r
+                       <KEYWORD3>MovePrevious</KEYWORD3>\r
+                       <KEYWORD3>MoveRelative</KEYWORD3>\r
+                       <KEYWORD3>mode</KEYWORD3>\r
+                       <KEYWORD3>name</KEYWORD3>\r
+                       <KEYWORD3>OnEvent</KEYWORD3>\r
+                       <KEYWORD3>Open</KEYWORD3>\r
+                       <KEYWORD3>Opened</KEYWORD3>\r
+                       <KEYWORD3>parent</KEYWORD3>\r
+                       <KEYWORD3>password</KEYWORD3>\r
+                       <KEYWORD3>ReadChar</KEYWORD3>\r
+                       <KEYWORD3>ReadLine</KEYWORD3>\r
+                       <KEYWORD3>Refresh</KEYWORD3>\r
+                       <KEYWORD3>Rollback</KEYWORD3>\r
+                       <KEYWORD3>redirect</KEYWORD3>\r
+                       <KEYWORD3>Seek</KEYWORD3>\r
+                       <KEYWORD3>SetEnv</KEYWORD3>\r
+                       <KEYWORD3>SetSQL</KEYWORD3>\r
+                       <KEYWORD3>ShowMessage</KEYWORD3>\r
+                       <KEYWORD3>substring</KEYWORD3>\r
+                       <KEYWORD3>server</KEYWORD3>\r
+                       <KEYWORD3>simulateCursors</KEYWORD3>\r
+                       <KEYWORD3>size</KEYWORD3>\r
+                       <KEYWORD3>source</KEYWORD3>\r
+                       <KEYWORD3>status</KEYWORD3>\r
+                       <KEYWORD3>timeOut</KEYWORD3>\r
+                       <KEYWORD3>toLowerCase</KEYWORD3>\r
+                       <KEYWORD3>toUpperCase</KEYWORD3>\r
+                       <KEYWORD3>type</KEYWORD3>\r
+                       <KEYWORD3>userId</KEYWORD3>\r
+                       <KEYWORD3>value</KEYWORD3>\r
+                       <KEYWORD3>WriteLine</KEYWORD3>\r
+                       <KEYWORD3>Write</KEYWORD3>\r
+                       <KEYWORD3>write</KEYWORD3>\r
+                       <KEYWORD3>writeln</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES IGNORE_CASE="TRUE" SET="powerdynamo-tag-general">\r
+               <SPAN TYPE="LITERAL1" DELEGATE="powerdynamo_LITERAL">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" DELEGATE="powerdynamo_LITERAL">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD2>NAME</KEYWORD2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES IGNORE_CASE="TRUE" SET="powerdynamo-tag-data">\r
+               <SPAN TYPE="LITERAL1" DELEGATE="powerdynamo_LITERAL">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" DELEGATE="powerdynamo_LITERAL">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD2>NAME</KEYWORD2>\r
+                       <KEYWORD2>QUERY</KEYWORD2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES IGNORE_CASE="TRUE" SET="powerdynamo-tag-document">\r
+               <SPAN TYPE="LITERAL1" DELEGATE="powerdynamo_LITERAL">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" DELEGATE="powerdynamo_LITERAL">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD2>CONTENT_TYPE</KEYWORD2>\r
+                       <KEYWORD2>REDIRECT</KEYWORD2>\r
+                       <KEYWORD2>STATUS</KEYWORD2>\r
+                       <KEYWORD2>CACHED_OUTPUT_TIMEOUT</KEYWORD2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/progress.xml b/extra/xmode/modes/progress.xml
new file mode 100644 (file)
index 0000000..480bdef
--- /dev/null
@@ -0,0 +1,3748 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- ====================================================================== -->\r
+<!-- Progress mode for jEdit 4.2+                                           -->\r
+<!--                                                                        -->\r
+<!-- This is a jEdit syntax file for Progress Open Edge 10.0A               -->\r
+<!--                                                                        -->\r
+<!-- For comments / suggestions / contributions, please contact me at       -->\r
+<!-- p.tingen@vcd.nl                                                        -->\r
+<!--                                                                        -->\r
+<!-- ====================================================================== -->\r
+<!--                                                                        -->\r
+<!-- Contributors: PT Patrick Tingen                                        -->\r
+<!--               GW Gerben Wieringa                                       -->\r
+<!--               SH Stephen Hawkins                                       -->\r
+<!--                                                                        -->\r
+<!-- ====================================================================== -->\r
+<!-- 2001-07-17 PT Initial version for Progress 8.2                         -->\r
+<!-- 2002-10-08 GW Added some keywords                                      -->\r
+<!-- 2003-02-18 PT Added some keywords                                      -->\r
+<!-- 2003-05-21 PT Rewritten. Thanks to GW & SH !                           -->\r
+<!-- 2004-01-26 PT Generated using Progress program for Progress 9.1D       -->\r
+<!-- 2004-02-04 PT Generated using Progress program for Open Edge 10.0A     -->\r
+<!-- 2004-02-06 PT Corrected due to validating errors against xmode.dtd     -->\r
+<!-- 2004-02-16 PT Fixed 'or choose of' being reported as invalid.          -->\r
+<!-- 2004-04-29 PT Added some appbuilder constants                          -->\r
+<!-- ====================================================================== -->\r
+<!-- Special thanks to Gerben and Stephen for their support.                -->\r
+<!-- ====================================================================== -->\r
+\r
+<MODE>\r
+  <PROPS>\r
+    <PROPERTY NAME="commentStart"        VALUE="/*" />\r
+    <PROPERTY NAME="commentEnd"          VALUE="*/" />\r
+    <PROPERTY NAME="boxComment"          VALUE="**" />\r
+    <PROPERTY NAME="lineComment"         VALUE="&amp;scop cmt " />\r
+    <PROPERTY NAME="indentNextLine"      VALUE="\s*(if|do|for|else|case|repeat|procedure|function)(\s+.*|\s*)" />\r
+    <PROPERTY NAME="wordBreakChars"      VALUE=",.;:/?^[]@" />\r
+    <PROPERTY NAME="indentOpenBrackets"  VALUE="{" />\r
+    <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+  </PROPS>\r
+\r
+  <RULES SET="COMMENT" DEFAULT="COMMENT1" IGNORE_CASE="TRUE">\r
+      <SPAN TYPE="COMMENT1" DELEGATE="COMMENT">\r
+      <BEGIN>/*</BEGIN> <END>*/</END>\r
+      </SPAN>\r
+  </RULES>\r
+\r
+  <RULES ESCAPE="~" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+    <!-- COMMENT1   : Normal Progress comments -->\r
+    <!-- LITERAL1   : text between ' or " -->\r
+    <!-- LITERAL2   :  -->\r
+    <!-- MARKUP     :  -->\r
+    <!-- LABEL      : Progress block labels -->\r
+    <!-- FUNCTION   : attributes and methods -->\r
+    <!-- OPERATOR   : All operators -->\r
+    <!-- INVALID    : Deprecated keywords -->\r
+    <!-- NON INVALID: Correction for non-invalid keywords -->\r
+\r
+    <!-- COMMENT1   : Normal Progress comments -->\r
+    <SPAN TYPE="COMMENT1" DELEGATE="COMMENT">\r
+     <BEGIN>/*</BEGIN>\r
+     <END>*/</END>\r
+    </SPAN>\r
+    <!-- LITERAL1   : text between ' or " -->\r
+      <SPAN TYPE="LITERAL1">\r
+        <BEGIN>'</BEGIN>\r
+        <END>'</END>\r
+      </SPAN>\r
+\r
+      <SPAN TYPE="LITERAL1">\r
+        <BEGIN>"</BEGIN>\r
+        <END>"</END>\r
+      </SPAN>\r
+\r
+    <!-- LABEL      : Progress block labels -->\r
+      <MARK_FOLLOWING TYPE="LABEL">{&amp;</MARK_FOLLOWING>\r
+\r
+    <!-- OPERATOR   : All operators -->\r
+      <SEQ TYPE="OPERATOR">*</SEQ>\r
+      <SEQ TYPE="OPERATOR">+</SEQ>\r
+      <SEQ TYPE="OPERATOR">,</SEQ>\r
+      <SEQ TYPE="OPERATOR">.</SEQ>\r
+      <SEQ TYPE="OPERATOR">/</SEQ>\r
+      <SEQ TYPE="OPERATOR">=</SEQ>\r
+      <SEQ TYPE="OPERATOR">?</SEQ>\r
+      <SEQ TYPE="OPERATOR">@</SEQ>\r
+      <SEQ TYPE="OPERATOR">[</SEQ>\r
+      <SEQ TYPE="OPERATOR">]</SEQ>\r
+      <SEQ TYPE="OPERATOR">^</SEQ>\r
+      <SEQ TYPE="OPERATOR">(</SEQ>\r
+      <SEQ TYPE="OPERATOR">)</SEQ>\r
+      <!-- GT, EQ etc -->\r
+      <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+      <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+      <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>\r
+\r
+    <!-- LABEL      : Progress block labels -->\r
+      <!-- Better would be to search for regexp  ^[[:blank:]]*[[:graph:]]+:$ -->\r
+      <!-- but this is not (yet) implemented since regexps cannot match     -->\r
+      <!-- anything that does not have a fixed starting character.          -->\r
+      <MARK_PREVIOUS TYPE="LABEL" AT_WHITESPACE_END="TRUE" MATCH_TYPE="OPERATOR">:</MARK_PREVIOUS>\r
+\r
+    <!-- FUNCTION   : attributes and methods -->\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:accelerator</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:accept-changes</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:accept-row-changes</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:add-buffer</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:add-calc-column</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:add-columns-from</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:add-events-procedure</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:add-fields-from</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:add-first</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:add-index-field</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:add-last</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:add-like-column</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:add-like-field</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:add-like-index</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:add-new-field</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:add-new-index</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:add-super-procedure</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:adm-data</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:after-buffer</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:after-rowid</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:after-table</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:allow-column-searching</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:always-on-top</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:ambiguous</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:append-child</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:appl-alert-boxes</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:apply-callback</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:appserver-info</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:appserver-password</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:appserver-userid</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:async-request-count</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:async-request-handle</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:asynchronous</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:attach-data-source</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:attr-space</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:attribute-names</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:auto-completion</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:auto-delete</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:auto-delete-xml</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:auto-end-key</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:auto-go</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:auto-indent</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:auto-resize</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:auto-return</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:auto-validate</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:auto-zap</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:available</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:available-formats</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:background</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:base-ade</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:basic-logging</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:batch-mode</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:before-buffer</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:before-rowid</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:before-table</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:bgcolor</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:blank</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:block-iteration-display</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:border-bottom-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:border-bottom-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:border-left-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:border-left-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:border-right-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:border-right-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:border-top-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:border-top-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:box</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:box-selectable</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:browse-column-data-types</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:browse-column-formats</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:browse-column-labels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:buffer-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:buffer-compare</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:buffer-copy</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:buffer-create</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:buffer-delete</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:buffer-field</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:buffer-handle</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:buffer-lines</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:buffer-name</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:buffer-release</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:buffer-validate</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:buffer-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:bytes-read</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:bytes-written</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cache</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:call-name</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:call-type</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:can-create</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:can-delete</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:can-read</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:can-write</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cancel-break</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cancel-button</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cancel-requests</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cancelled</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:careful-paint</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:case-sensitive</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:centered</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:character_length</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:charset</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:checked</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:child-num</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:clear</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:clear-selection</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:client-connection-id</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:client-type</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:clone-node</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:code</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:codepage</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:column-bgcolor</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:column-dcolor</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:column-fgcolor</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:column-font</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:column-label</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:column-movable</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:column-pfcolor</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:column-read-only</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:column-resizable</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:column-scrolling</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:columns</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:com-handle</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:complete</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:config-name</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:connect</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:connected</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:context-help</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:context-help-file</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:context-help-id</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:control-box</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:convert-3d-colors</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:convert-to-offset</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:coverage</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cpcase</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cpcoll</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cplog</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cpprint</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cprcodein</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cprcodeout</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cpstream</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cpterm</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:crc-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:create-like</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:create-node</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:create-node-namespace</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:create-on-add</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:create-result-list-entry</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:current-changed</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:current-column</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:current-environment</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:current-iteration</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:current-result-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:current-row-modified</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:current-window</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cursor-char</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cursor-line</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:cursor-offset</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:data-entry-return</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:data-source</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:data-type</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:dataset</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:date-format</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:db-references</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:dbname</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:dcolor</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:dde-error</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:dde-id</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:dde-item</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:dde-name</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:dde-topic</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:deblank</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:debug</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:debug-alert</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:decimals</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:default</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:default-buffer-handle</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:default-button</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:default-commit</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:default-string</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:delete</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:delete-current-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:delete-line</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:delete-node</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:delete-result-list-entry</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:delete-selected-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:delete-selected-rows</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:delimiter</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:description</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:deselect-focused-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:deselect-rows</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:deselect-selected-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:detach-data-source</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:directory</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:disable</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:disable-auto-zap</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:disable-connections</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:disable-dump-triggers</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:disable-load-triggers</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:disconnect</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:display-message</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:display-timezone</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:display-type</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:down</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:drag-enabled</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:drop-target</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:dump-logging-now</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:dynamic</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:edge-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:edge-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:edit-can-paste</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:edit-can-undo</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:edit-clear</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:edit-copy</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:edit-cut</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:edit-paste</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:edit-undo</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:empty</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:empty-temp-table</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:enable</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:enable-connections</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:enabled</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:encoding</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:end-file-drop</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:end-user-prompt</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:error-column</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:error-object-detail</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:error-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:error-string</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:event-procedure</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:event-procedure-context</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:event-type</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:exclusive-id</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:execution-log</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:expand</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:expandable</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:export</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:extent</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:fetch-selected-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:fgcolor</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:file-create-date</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:file-create-time</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:file-mod-date</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:file-mod-time</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:file-name</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:file-offset</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:file-size</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:file-type</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:fill</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:fill-mode</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:filled</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:find-by-rowid</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:find-current</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:find-first</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:find-last</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:find-unique</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:first-async-request</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:first-buffer</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:first-child</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:first-column</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:first-data-source</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:first-dataset</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:first-procedure</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:first-query</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:first-server</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:first-server-socket</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:first-socket</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:first-tab-item</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:fit-last-column</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:flat-button</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:focused-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:focused-row-selected</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:font</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:font-based-layout</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:foreground</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:form-input</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:format</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:forward-only</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:frame</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:frame-col</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:frame-name</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:frame-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:frame-spacing</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:frame-x</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:frame-y</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:frequency</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:full-height-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:full-height-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:full-pathname</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:full-width-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:full-width-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:function</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-attribute</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-attribute-node</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-blue-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-browse-column</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-buffer-handle</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-bytes-available</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-cgi-list</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-cgi-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-changes</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-child</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-child-relation</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-config-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-current</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-document-element</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-dropped-file</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-dynamic</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-first</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-green-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-iteration</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-last</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-message</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-next</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-number</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-parent</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-prev</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-printers</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-red-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-repositioned-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-rgb-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-selected-widget</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-signature</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-socket-option</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-tab-item</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-text-height-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-text-height-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-text-width-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-text-width-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:get-wait-state</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:graphic-edge</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:grid-factor-horizontal</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:grid-factor-vertical</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:grid-snap</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:grid-unit-height-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:grid-unit-height-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:grid-unit-width-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:grid-unit-width-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:grid-visible</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:handle</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:handler</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:has-lobs</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:has-records</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:height-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:height-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:hidden</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:horizontal</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:html-charset</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:html-end-of-line</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:html-end-of-page</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:html-frame-begin</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:html-frame-end</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:html-header-begin</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:html-header-end</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:html-title-begin</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:html-title-end</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:hwnd</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:icfparameter</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:icon</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:image</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:image-down</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:image-insensitive</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:image-up</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:immediate-display</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:import-node</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:in-handle</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:increment-exclusive-id</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:index</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:index-information</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:initial</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:initialize-document-type</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:initiate</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:inner-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:inner-lines</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:input-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:insert</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:insert-backtab</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:insert-before</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:insert-file</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:insert-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:insert-string</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:insert-tab</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:instantiating-procedure</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:internal-entries</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:invoke</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:is-open</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:is-parameter-set</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:is-row-selected</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:is-selected</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:is-xml</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:items-per-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:keep-connection-open</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:keep-frame-z-order</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:keep-security-cache</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:key</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:label</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:label-bgcolor</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:label-dcolor</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:label-fgcolor</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:label-font</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:labels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:languages</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:large</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:large-to-small</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:last-async-request</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:last-child</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:last-procedure</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:last-server</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:last-server-socket</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:last-socket</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:last-tab-item</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:line</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:list-item-pairs</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:list-items</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:listings</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:literal-question</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:load</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:load-icon</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:load-image</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:load-image-down</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:load-image-insensitive</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:load-image-up</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:load-mouse-pointer</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:load-small-icon</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:local-host</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:local-name</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:local-port</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:locator-column-number</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:locator-line-number</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:locator-public-id</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:locator-system-id</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:locator-type</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:locked</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:log-id</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:longchar-to-node-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:lookup</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:mandatory</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:manual-highlight</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:margin-height-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:margin-height-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:margin-width-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:margin-width-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:max-button</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:max-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:max-data-guess</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:max-height-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:max-height-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:max-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:max-width-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:max-width-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:md5-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:memptr-to-node-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:menu-bar</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:menu-key</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:menu-mouse</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:merge-changes</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:merge-row-changes</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:message-area</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:message-area-font</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:min-button</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:min-column-width-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:min-column-width-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:min-height-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:min-height-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:min-schema-marshall</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:min-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:min-width-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:min-width-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:modified</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:mouse-pointer</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:movable</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:move-after-tab-item</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:move-before-tab-item</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:move-column</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:move-to-bottom</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:move-to-eof</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:move-to-top</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:multiple</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:multitasking-interval</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:name</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:namespace-prefix</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:namespace-uri</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:needs-appserver-prompt</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:needs-prompt</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:new</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:new-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:next-column</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:next-sibling</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:next-tab-item</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:no-current-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:no-empty-space</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:no-focus</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:no-schema-marshall</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:no-validate</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:node-type</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:node-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:node-value-to-longchar</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:node-value-to-memptr</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:normalize</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-buffers</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-buttons</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-child-relations</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-children</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-columns</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-dropped-files</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-entries</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-fields</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-formats</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-items</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-iterations</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-lines</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-locked-columns</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-messages</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-parameters</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-replaced</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-results</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-selected-rows</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-selected-widgets</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-tabs</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-to-retain</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:num-visible-columns</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:numeric-decimal-point</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:numeric-format</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:numeric-separator</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:ole-invoke-locale</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:ole-names-locale</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:on-frame-border</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:origin-handle</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:origin-rowid</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:overlay</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:owner</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:owner-document</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:page-bottom</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:page-top</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:parameter</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:parent</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:parent-relation</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:parse-status</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:password-field</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:pathname</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:persistent</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:persistent-cache-disabled</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:persistent-procedure</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:pfcolor</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:pixels-per-column</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:pixels-per-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:popup-menu</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:popup-only</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:position</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:prepare-string</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:prepared</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:prev-column</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:prev-sibling</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:prev-tab-item</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:primary</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:printer-control-handle</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:printer-hdc</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:printer-name</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:printer-port</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:private-data</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:procedure-name</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:profiling</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:progress-source</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:proxy</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:proxy-password</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:proxy-userid</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:public-id</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:published-events</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:query</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:query-close</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:query-off-end</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:query-open</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:query-prepare</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:quit</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:radio-buttons</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:raw-transfer</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:read</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:read-file</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:read-only</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:recid</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:record-length</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:refresh</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:refreshable</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:reject-changes</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:reject-row-changes</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:rejected</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:remote</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:remote-host</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:remote-port</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:remove-attribute</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:remove-child</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:remove-events-procedure</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:remove-super-procedure</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:replace</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:replace-child</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:replace-selection-text</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:reposition-backwards</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:reposition-forwards</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:reposition-parent-relation</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:reposition-to-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:reposition-to-rowid</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:resizable</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:resize</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:retain-shape</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:return-inserted</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:return-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:return-value-data-type</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:row-height-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:row-height-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:row-markers</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:row-resizable</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:row-state</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:rowid</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:rule-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:rule-y</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:save</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:save-file</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:save-row-changes</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:sax-parse</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:sax-parse-first</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:sax-parse-next</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:sax-xml</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:schema-change</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:schema-path</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:screen-lines</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:screen-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:scroll-bars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:scroll-delta</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:scroll-offset</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:scroll-to-current-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:scroll-to-item</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:scroll-to-selected-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:scrollable</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:scrollbar-horizontal</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:scrollbar-vertical</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:search</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:select-all</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:select-focused-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:select-next-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:select-prev-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:select-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:selectable</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:selected</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:selection-end</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:selection-start</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:selection-text</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:sensitive</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:separator-fgcolor</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:separators</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:server</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:server-connection-bound</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:server-connection-bound-request</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:server-connection-context</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:server-connection-id</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:server-operating-mode</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:session-end</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-attribute</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-attribute-node</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-blue-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-break</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-buffers</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-callback-procedure</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-commit</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-connect-procedure</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-dynamic</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-green-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-input-source</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-numeric-format</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-parameter</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-read-response-procedure</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-red-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-repositioned-row</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-rgb-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-rollback</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-selection</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-socket-option</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:set-wait-state</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:show-in-taskbar</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:side-label-handle</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:side-labels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:skip-deleted-record</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:small-icon</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:small-title</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:sort</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:startup-parameters</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:status-area</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:status-area-font</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:stop</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:stop-parsing</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:stopped</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:stretch-to-fit</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:string-value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:sub-menu-help</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:subtype</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:super-procedures</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:suppress-namespace-processing</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:suppress-warnings</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:synchronize</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:system-alert-boxes</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:system-id</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:tab-position</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:tab-stop</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:table</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:table-crc-list</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:table-handle</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:table-list</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:table-number</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:temp-directory</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:temp-table-prepare</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:text-selected</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:three-d</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:tic-marks</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:time-source</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:title</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:title-bgcolor</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:title-dcolor</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:title-fgcolor</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:title-font</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:toggle-box</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:tooltip</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:tooltips</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:top-only</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:trace-filter</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:tracing</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:tracking-changes</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:trans-init-procedure</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:transaction</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:transparent</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:type</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:undo</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:unique-id</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:unique-match</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:url</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:url-decode</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:url-encode</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:url-password</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:url-userid</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:user-data</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:v6display</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:validate</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:validate-expression</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:validate-message</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:validate-xml</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:validation-enabled</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:value</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:view-first-column-on-reopen</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:virtual-height-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:virtual-height-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:virtual-width-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:virtual-width-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:visible</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:warning</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:widget-enter</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:widget-leave</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:width-chars</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:width-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:window</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:window-state</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:window-system</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:word-wrap</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:work-area-height-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:work-area-width-pixels</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:work-area-x</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:work-area-y</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:write</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:write-data</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:x</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:x-document</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:xml-schema-path</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:xml-suppress-namespace-processing</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:y</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:year-offset</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="FUNCTION">:_dcm</MARK_FOLLOWING>\r
+\r
+    <!-- INVALID    : Deprecated keywords -->\r
+      <SEQ_REGEXP TYPE="INVALID" HASH_CHAR="put" AT_WORD_START="TRUE">put\s+screen</SEQ_REGEXP>\r
+      <MARK_FOLLOWING TYPE="INVALID">:WHERE-STRING</MARK_FOLLOWING>\r
+      <MARK_FOLLOWING TYPE="INVALID">:REPOSITION-PARENT-RELATION</MARK_FOLLOWING>\r
+\r
+    <!-- NON INVALID: Correction for non-invalid keywords -->\r
+      <SEQ_REGEXP TYPE="KEYWORD3" HASH_CHAR="choose" AT_WORD_START="TRUE">choose\s+of</SEQ_REGEXP>\r
+\r
+    <KEYWORDS>\r
+      <!-- Keep the following sections in the specified order since -->\r
+      <!-- some keywords occur in more than 1 section. The last one -->\r
+      <!-- determines the appearance of a certain keyword.          -->\r
+\r
+      <!-- KEYWORD3   : events -->\r
+      <!-- KEYWORD1   : Statements, functions, attributes, methods -->\r
+      <!-- KEYWORD2   : VST & metaschema files and fields -->\r
+      <!-- INVALID    : Deprecated keywords -->\r
+      <!-- COMMENT2   : Preprocessor statements -->\r
+\r
+      <!-- KEYWORD3   : events -->\r
+        <KEYWORD3>any-key</KEYWORD3>\r
+        <KEYWORD3>any-printable</KEYWORD3>\r
+        <KEYWORD3>back-tab</KEYWORD3>\r
+        <KEYWORD3>backspace</KEYWORD3>\r
+        <KEYWORD3>bell</KEYWORD3>\r
+        <KEYWORD3>choose</KEYWORD3>\r
+        <KEYWORD3>container-event</KEYWORD3>\r
+        <KEYWORD3>dde-notify</KEYWORD3>\r
+        <KEYWORD3>default-action</KEYWORD3>\r
+        <KEYWORD3>del</KEYWORD3>\r
+        <KEYWORD3>delete-char</KEYWORD3>\r
+        <KEYWORD3>delete-character</KEYWORD3>\r
+        <KEYWORD3>deselect</KEYWORD3>\r
+        <KEYWORD3>deselection</KEYWORD3>\r
+        <KEYWORD3>drop-file-notify</KEYWORD3>\r
+        <KEYWORD3>empty-selection</KEYWORD3>\r
+        <KEYWORD3>end</KEYWORD3>\r
+        <KEYWORD3>end-box-selection</KEYWORD3>\r
+        <KEYWORD3>end-error</KEYWORD3>\r
+        <KEYWORD3>end-move</KEYWORD3>\r
+        <KEYWORD3>end-resize</KEYWORD3>\r
+        <KEYWORD3>end-search</KEYWORD3>\r
+        <KEYWORD3>endkey</KEYWORD3>\r
+        <KEYWORD3>entry</KEYWORD3>\r
+        <KEYWORD3>error</KEYWORD3>\r
+        <KEYWORD3>go</KEYWORD3>\r
+        <KEYWORD3>help</KEYWORD3>\r
+        <KEYWORD3>home</KEYWORD3>\r
+        <KEYWORD3>leave</KEYWORD3>\r
+        <KEYWORD3>menu-drop</KEYWORD3>\r
+        <KEYWORD3>off-end</KEYWORD3>\r
+        <KEYWORD3>off-home</KEYWORD3>\r
+        <KEYWORD3>parent-window-close</KEYWORD3>\r
+        <KEYWORD3>procedure-complete</KEYWORD3>\r
+        <KEYWORD3>read-response</KEYWORD3>\r
+        <KEYWORD3>recall</KEYWORD3>\r
+        <KEYWORD3>return</KEYWORD3>\r
+        <KEYWORD3>row-display</KEYWORD3>\r
+        <KEYWORD3>row-entry</KEYWORD3>\r
+        <KEYWORD3>row-leave</KEYWORD3>\r
+        <KEYWORD3>scroll-notify</KEYWORD3>\r
+        <KEYWORD3>select</KEYWORD3>\r
+        <KEYWORD3>selection</KEYWORD3>\r
+        <KEYWORD3>start-box-selection</KEYWORD3>\r
+        <KEYWORD3>start-move</KEYWORD3>\r
+        <KEYWORD3>start-resize</KEYWORD3>\r
+        <KEYWORD3>start-search</KEYWORD3>\r
+        <KEYWORD3>tab</KEYWORD3>\r
+        <KEYWORD3>value-changed</KEYWORD3>\r
+        <KEYWORD3>window-close</KEYWORD3>\r
+        <KEYWORD3>window-maximized</KEYWORD3>\r
+        <KEYWORD3>window-minimized</KEYWORD3>\r
+        <KEYWORD3>window-resized</KEYWORD3>\r
+        <KEYWORD3>window-restored</KEYWORD3>\r
+\r
+\r
+      <!-- KEYWORD1   : Statements, functions -->\r
+        <KEYWORD1>abort</KEYWORD1>\r
+        <KEYWORD1>absolute</KEYWORD1>\r
+        <KEYWORD1>accelerator</KEYWORD1>\r
+        <KEYWORD1>accept-changes</KEYWORD1>\r
+        <KEYWORD1>accept-row-changes</KEYWORD1>\r
+        <KEYWORD1>accumulate</KEYWORD1>\r
+        <KEYWORD1>across</KEYWORD1>\r
+        <KEYWORD1>active</KEYWORD1>\r
+        <KEYWORD1>active-window</KEYWORD1>\r
+        <KEYWORD1>actor</KEYWORD1>\r
+        <KEYWORD1>add</KEYWORD1>\r
+        <KEYWORD1>add-buffer</KEYWORD1>\r
+        <KEYWORD1>add-calc-column</KEYWORD1>\r
+        <KEYWORD1>add-columns-from</KEYWORD1>\r
+        <KEYWORD1>add-events-procedure</KEYWORD1>\r
+        <KEYWORD1>add-fields-from</KEYWORD1>\r
+        <KEYWORD1>add-first</KEYWORD1>\r
+        <KEYWORD1>add-header-entry</KEYWORD1>\r
+        <KEYWORD1>add-index-field</KEYWORD1>\r
+        <KEYWORD1>add-interval</KEYWORD1>\r
+        <KEYWORD1>add-last</KEYWORD1>\r
+        <KEYWORD1>add-like-column</KEYWORD1>\r
+        <KEYWORD1>add-like-field</KEYWORD1>\r
+        <KEYWORD1>add-like-index</KEYWORD1>\r
+        <KEYWORD1>add-new-field</KEYWORD1>\r
+        <KEYWORD1>add-new-index</KEYWORD1>\r
+        <KEYWORD1>add-relation</KEYWORD1>\r
+        <KEYWORD1>add-source-buffer</KEYWORD1>\r
+        <KEYWORD1>add-super-procedure</KEYWORD1>\r
+        <KEYWORD1>adm-data</KEYWORD1>\r
+        <KEYWORD1>advise</KEYWORD1>\r
+        <KEYWORD1>after-buffer</KEYWORD1>\r
+        <KEYWORD1>after-rowid</KEYWORD1>\r
+        <KEYWORD1>after-table</KEYWORD1>\r
+        <KEYWORD1>alert-box</KEYWORD1>\r
+        <KEYWORD1>alias</KEYWORD1>\r
+        <KEYWORD1>all</KEYWORD1>\r
+        <KEYWORD1>allow-column-searching</KEYWORD1>\r
+        <KEYWORD1>allow-replication</KEYWORD1>\r
+        <KEYWORD1>alter</KEYWORD1>\r
+        <KEYWORD1>alternate-key</KEYWORD1>\r
+        <KEYWORD1>always-on-top</KEYWORD1>\r
+        <KEYWORD1>ambiguous</KEYWORD1>\r
+        <KEYWORD1>and</KEYWORD1>\r
+        <KEYWORD1>ansi-only</KEYWORD1>\r
+        <KEYWORD1>any</KEYWORD1>\r
+        <KEYWORD1>anywhere</KEYWORD1>\r
+        <KEYWORD1>append</KEYWORD1>\r
+        <KEYWORD1>append-child</KEYWORD1>\r
+        <KEYWORD1>append-line</KEYWORD1>\r
+        <KEYWORD1>appl-alert-boxes</KEYWORD1>\r
+        <KEYWORD1>application</KEYWORD1>\r
+        <KEYWORD1>apply</KEYWORD1>\r
+        <KEYWORD1>apply-callback</KEYWORD1>\r
+        <KEYWORD1>appserver-info</KEYWORD1>\r
+        <KEYWORD1>appserver-password</KEYWORD1>\r
+        <KEYWORD1>appserver-userid</KEYWORD1>\r
+        <KEYWORD1>array-message</KEYWORD1>\r
+        <KEYWORD1>as</KEYWORD1>\r
+        <KEYWORD1>as-cursor</KEYWORD1>\r
+        <KEYWORD1>ascending</KEYWORD1>\r
+        <KEYWORD1>ask-overwrite</KEYWORD1>\r
+        <KEYWORD1>assign</KEYWORD1>\r
+        <KEYWORD1>async-request-count</KEYWORD1>\r
+        <KEYWORD1>async-request-handle</KEYWORD1>\r
+        <KEYWORD1>asynchronous</KEYWORD1>\r
+        <KEYWORD1>at</KEYWORD1>\r
+        <KEYWORD1>attach</KEYWORD1>\r
+        <KEYWORD1>attach-data-source</KEYWORD1>\r
+        <KEYWORD1>attachment</KEYWORD1>\r
+        <KEYWORD1>attr-space</KEYWORD1>\r
+        <KEYWORD1>attribute-names</KEYWORD1>\r
+        <KEYWORD1>attribute-type</KEYWORD1>\r
+        <KEYWORD1>authorization</KEYWORD1>\r
+        <KEYWORD1>auto-completion</KEYWORD1>\r
+        <KEYWORD1>auto-delete</KEYWORD1>\r
+        <KEYWORD1>auto-delete-xml</KEYWORD1>\r
+        <KEYWORD1>auto-end-key</KEYWORD1>\r
+        <KEYWORD1>auto-endkey</KEYWORD1>\r
+        <KEYWORD1>auto-go</KEYWORD1>\r
+        <KEYWORD1>auto-indent</KEYWORD1>\r
+        <KEYWORD1>auto-resize</KEYWORD1>\r
+        <KEYWORD1>auto-return</KEYWORD1>\r
+        <KEYWORD1>auto-validate</KEYWORD1>\r
+        <KEYWORD1>auto-zap</KEYWORD1>\r
+        <KEYWORD1>automatic</KEYWORD1>\r
+        <KEYWORD1>available</KEYWORD1>\r
+        <KEYWORD1>available-formats</KEYWORD1>\r
+        <KEYWORD1>average</KEYWORD1>\r
+        <KEYWORD1>avg</KEYWORD1>\r
+        <KEYWORD1>background</KEYWORD1>\r
+        <KEYWORD1>backwards</KEYWORD1>\r
+        <KEYWORD1>base-ade</KEYWORD1>\r
+        <KEYWORD1>base-key</KEYWORD1>\r
+        <KEYWORD1>base64</KEYWORD1>\r
+        <KEYWORD1>basic-logging</KEYWORD1>\r
+        <KEYWORD1>batch-mode</KEYWORD1>\r
+        <KEYWORD1>before-buffer</KEYWORD1>\r
+        <KEYWORD1>before-hide</KEYWORD1>\r
+        <KEYWORD1>before-rowid</KEYWORD1>\r
+        <KEYWORD1>before-table</KEYWORD1>\r
+        <KEYWORD1>begins</KEYWORD1>\r
+        <KEYWORD1>between</KEYWORD1>\r
+        <KEYWORD1>bgcolor</KEYWORD1>\r
+        <KEYWORD1>big-endian</KEYWORD1>\r
+        <KEYWORD1>binary</KEYWORD1>\r
+        <KEYWORD1>bind-where</KEYWORD1>\r
+        <KEYWORD1>blank</KEYWORD1>\r
+        <KEYWORD1>blob</KEYWORD1>\r
+        <KEYWORD1>block</KEYWORD1>\r
+        <KEYWORD1>block-iteration-display</KEYWORD1>\r
+        <KEYWORD1>border-bottom</KEYWORD1>\r
+        <KEYWORD1>border-bottom-chars</KEYWORD1>\r
+        <KEYWORD1>border-bottom-pixels</KEYWORD1>\r
+        <KEYWORD1>border-left</KEYWORD1>\r
+        <KEYWORD1>border-left-chars</KEYWORD1>\r
+        <KEYWORD1>border-left-pixels</KEYWORD1>\r
+        <KEYWORD1>border-right</KEYWORD1>\r
+        <KEYWORD1>border-right-chars</KEYWORD1>\r
+        <KEYWORD1>border-right-pixels</KEYWORD1>\r
+        <KEYWORD1>border-top</KEYWORD1>\r
+        <KEYWORD1>border-top-chars</KEYWORD1>\r
+        <KEYWORD1>border-top-pixels</KEYWORD1>\r
+        <KEYWORD1>both</KEYWORD1>\r
+        <KEYWORD1>bottom</KEYWORD1>\r
+        <KEYWORD1>bottom-column</KEYWORD1>\r
+        <KEYWORD1>box</KEYWORD1>\r
+        <KEYWORD1>box-selectable</KEYWORD1>\r
+        <KEYWORD1>break</KEYWORD1>\r
+        <KEYWORD1>break-line</KEYWORD1>\r
+        <KEYWORD1>browse</KEYWORD1>\r
+        <KEYWORD1>browse-column-data-types</KEYWORD1>\r
+        <KEYWORD1>browse-column-formats</KEYWORD1>\r
+        <KEYWORD1>browse-column-labels</KEYWORD1>\r
+        <KEYWORD1>browse-header</KEYWORD1>\r
+        <KEYWORD1>btos</KEYWORD1>\r
+        <KEYWORD1>buffer</KEYWORD1>\r
+        <KEYWORD1>buffer-chars</KEYWORD1>\r
+        <KEYWORD1>buffer-compare</KEYWORD1>\r
+        <KEYWORD1>buffer-copy</KEYWORD1>\r
+        <KEYWORD1>buffer-create</KEYWORD1>\r
+        <KEYWORD1>buffer-delete</KEYWORD1>\r
+        <KEYWORD1>buffer-field</KEYWORD1>\r
+        <KEYWORD1>buffer-handle</KEYWORD1>\r
+        <KEYWORD1>buffer-lines</KEYWORD1>\r
+        <KEYWORD1>buffer-name</KEYWORD1>\r
+        <KEYWORD1>buffer-release</KEYWORD1>\r
+        <KEYWORD1>buffer-validate</KEYWORD1>\r
+        <KEYWORD1>buffer-value</KEYWORD1>\r
+        <KEYWORD1>buttons</KEYWORD1>\r
+        <KEYWORD1>by</KEYWORD1>\r
+        <KEYWORD1>by-pointer</KEYWORD1>\r
+        <KEYWORD1>by-reference</KEYWORD1>\r
+        <KEYWORD1>by-value</KEYWORD1>\r
+        <KEYWORD1>by-variant-pointer</KEYWORD1>\r
+        <KEYWORD1>byte</KEYWORD1>\r
+        <KEYWORD1>bytes-read</KEYWORD1>\r
+        <KEYWORD1>bytes-written</KEYWORD1>\r
+        <KEYWORD1>cache</KEYWORD1>\r
+        <KEYWORD1>cache-size</KEYWORD1>\r
+        <KEYWORD1>call</KEYWORD1>\r
+        <KEYWORD1>call-name</KEYWORD1>\r
+        <KEYWORD1>call-type</KEYWORD1>\r
+        <KEYWORD1>can-create</KEYWORD1>\r
+        <KEYWORD1>can-delete</KEYWORD1>\r
+        <KEYWORD1>can-do</KEYWORD1>\r
+        <KEYWORD1>can-find</KEYWORD1>\r
+        <KEYWORD1>can-query</KEYWORD1>\r
+        <KEYWORD1>can-read</KEYWORD1>\r
+        <KEYWORD1>can-set</KEYWORD1>\r
+        <KEYWORD1>can-write</KEYWORD1>\r
+        <KEYWORD1>cancel-break</KEYWORD1>\r
+        <KEYWORD1>cancel-button</KEYWORD1>\r
+        <KEYWORD1>cancel-pick</KEYWORD1>\r
+        <KEYWORD1>cancel-requests</KEYWORD1>\r
+        <KEYWORD1>cancelled</KEYWORD1>\r
+        <KEYWORD1>caps</KEYWORD1>\r
+        <KEYWORD1>careful-paint</KEYWORD1>\r
+        <KEYWORD1>case</KEYWORD1>\r
+        <KEYWORD1>case-sensitive</KEYWORD1>\r
+        <KEYWORD1>cdecl</KEYWORD1>\r
+        <KEYWORD1>centered</KEYWORD1>\r
+        <KEYWORD1>chained</KEYWORD1>\r
+        <KEYWORD1>character</KEYWORD1>\r
+        <KEYWORD1>character_length</KEYWORD1>\r
+        <KEYWORD1>charset</KEYWORD1>\r
+        <KEYWORD1>check</KEYWORD1>\r
+        <KEYWORD1>checked</KEYWORD1>\r
+        <KEYWORD1>child-buffer</KEYWORD1>\r
+        <KEYWORD1>child-num</KEYWORD1>\r
+        <KEYWORD1>choices</KEYWORD1>\r
+        <KEYWORD1>chr</KEYWORD1>\r
+        <KEYWORD1>clear</KEYWORD1>\r
+        <KEYWORD1>clear-selection</KEYWORD1>\r
+        <KEYWORD1>client-connection-id</KEYWORD1>\r
+        <KEYWORD1>client-type</KEYWORD1>\r
+        <KEYWORD1>clipboard</KEYWORD1>\r
+        <KEYWORD1>clob</KEYWORD1>\r
+        <KEYWORD1>clone-node</KEYWORD1>\r
+        <KEYWORD1>close</KEYWORD1>\r
+        <KEYWORD1>code</KEYWORD1>\r
+        <KEYWORD1>codebase-locator</KEYWORD1>\r
+        <KEYWORD1>codepage</KEYWORD1>\r
+        <KEYWORD1>codepage-convert</KEYWORD1>\r
+        <KEYWORD1>col</KEYWORD1>\r
+        <KEYWORD1>col-of</KEYWORD1>\r
+        <KEYWORD1>collate</KEYWORD1>\r
+        <KEYWORD1>colon</KEYWORD1>\r
+        <KEYWORD1>colon-aligned</KEYWORD1>\r
+        <KEYWORD1>color</KEYWORD1>\r
+        <KEYWORD1>color-table</KEYWORD1>\r
+        <KEYWORD1>column-bgcolor</KEYWORD1>\r
+        <KEYWORD1>column-codepage</KEYWORD1>\r
+        <KEYWORD1>column-dcolor</KEYWORD1>\r
+        <KEYWORD1>column-fgcolor</KEYWORD1>\r
+        <KEYWORD1>column-font</KEYWORD1>\r
+        <KEYWORD1>column-label</KEYWORD1>\r
+        <KEYWORD1>column-label-bgcolor</KEYWORD1>\r
+        <KEYWORD1>column-label-dcolor</KEYWORD1>\r
+        <KEYWORD1>column-label-fgcolor</KEYWORD1>\r
+        <KEYWORD1>column-label-font</KEYWORD1>\r
+        <KEYWORD1>column-label-height-chars</KEYWORD1>\r
+        <KEYWORD1>column-label-height-pixels</KEYWORD1>\r
+        <KEYWORD1>column-movable</KEYWORD1>\r
+        <KEYWORD1>column-of</KEYWORD1>\r
+        <KEYWORD1>column-pfcolor</KEYWORD1>\r
+        <KEYWORD1>column-read-only</KEYWORD1>\r
+        <KEYWORD1>column-resizable</KEYWORD1>\r
+        <KEYWORD1>column-scrolling</KEYWORD1>\r
+        <KEYWORD1>columns</KEYWORD1>\r
+        <KEYWORD1>com-handle</KEYWORD1>\r
+        <KEYWORD1>com-self</KEYWORD1>\r
+        <KEYWORD1>combo-box</KEYWORD1>\r
+        <KEYWORD1>command</KEYWORD1>\r
+        <KEYWORD1>compares</KEYWORD1>\r
+        <KEYWORD1>compile</KEYWORD1>\r
+        <KEYWORD1>compiler</KEYWORD1>\r
+        <KEYWORD1>complete</KEYWORD1>\r
+        <KEYWORD1>component-handle</KEYWORD1>\r
+        <KEYWORD1>component-self</KEYWORD1>\r
+        <KEYWORD1>config-name</KEYWORD1>\r
+        <KEYWORD1>connect</KEYWORD1>\r
+        <KEYWORD1>connected</KEYWORD1>\r
+        <KEYWORD1>constrained</KEYWORD1>\r
+        <KEYWORD1>contains</KEYWORD1>\r
+        <KEYWORD1>contents</KEYWORD1>\r
+        <KEYWORD1>context</KEYWORD1>\r
+        <KEYWORD1>context-help</KEYWORD1>\r
+        <KEYWORD1>context-help-file</KEYWORD1>\r
+        <KEYWORD1>context-help-id</KEYWORD1>\r
+        <KEYWORD1>context-popup</KEYWORD1>\r
+        <KEYWORD1>control</KEYWORD1>\r
+        <KEYWORD1>control-box</KEYWORD1>\r
+        <KEYWORD1>control-container</KEYWORD1>\r
+        <KEYWORD1>control-frame</KEYWORD1>\r
+        <KEYWORD1>convert</KEYWORD1>\r
+        <KEYWORD1>convert-3d-colors</KEYWORD1>\r
+        <KEYWORD1>convert-to-offset</KEYWORD1>\r
+        <KEYWORD1>copy</KEYWORD1>\r
+        <KEYWORD1>copy-lob</KEYWORD1>\r
+        <KEYWORD1>count</KEYWORD1>\r
+        <KEYWORD1>count-of</KEYWORD1>\r
+        <KEYWORD1>coverage</KEYWORD1>\r
+        <KEYWORD1>cpcase</KEYWORD1>\r
+        <KEYWORD1>cpcoll</KEYWORD1>\r
+        <KEYWORD1>cpinternal</KEYWORD1>\r
+        <KEYWORD1>cplog</KEYWORD1>\r
+        <KEYWORD1>cpprint</KEYWORD1>\r
+        <KEYWORD1>cprcodein</KEYWORD1>\r
+        <KEYWORD1>cprcodeout</KEYWORD1>\r
+        <KEYWORD1>cpstream</KEYWORD1>\r
+        <KEYWORD1>cpterm</KEYWORD1>\r
+        <KEYWORD1>crc-value</KEYWORD1>\r
+        <KEYWORD1>create</KEYWORD1>\r
+        <KEYWORD1>create-like</KEYWORD1>\r
+        <KEYWORD1>create-node</KEYWORD1>\r
+        <KEYWORD1>create-node-namespace</KEYWORD1>\r
+        <KEYWORD1>create-on-add</KEYWORD1>\r
+        <KEYWORD1>create-result-list-entry</KEYWORD1>\r
+        <KEYWORD1>create-test-file</KEYWORD1>\r
+        <KEYWORD1>ctos</KEYWORD1>\r
+        <KEYWORD1>current</KEYWORD1>\r
+        <KEYWORD1>current-changed</KEYWORD1>\r
+        <KEYWORD1>current-column</KEYWORD1>\r
+        <KEYWORD1>current-environment</KEYWORD1>\r
+        <KEYWORD1>current-iteration</KEYWORD1>\r
+        <KEYWORD1>current-language</KEYWORD1>\r
+        <KEYWORD1>current-result-row</KEYWORD1>\r
+        <KEYWORD1>current-row-modified</KEYWORD1>\r
+        <KEYWORD1>current-value</KEYWORD1>\r
+        <KEYWORD1>current-window</KEYWORD1>\r
+        <KEYWORD1>current_date</KEYWORD1>\r
+        <KEYWORD1>cursor</KEYWORD1>\r
+        <KEYWORD1>cursor-char</KEYWORD1>\r
+        <KEYWORD1>cursor-down</KEYWORD1>\r
+        <KEYWORD1>cursor-left</KEYWORD1>\r
+        <KEYWORD1>cursor-line</KEYWORD1>\r
+        <KEYWORD1>cursor-offset</KEYWORD1>\r
+        <KEYWORD1>cursor-right</KEYWORD1>\r
+        <KEYWORD1>cursor-up</KEYWORD1>\r
+        <KEYWORD1>cut</KEYWORD1>\r
+        <KEYWORD1>data-bind</KEYWORD1>\r
+        <KEYWORD1>data-entry-return</KEYWORD1>\r
+        <KEYWORD1>data-refresh-line</KEYWORD1>\r
+        <KEYWORD1>data-refresh-page</KEYWORD1>\r
+        <KEYWORD1>data-relation</KEYWORD1>\r
+        <KEYWORD1>data-source</KEYWORD1>\r
+        <KEYWORD1>data-type</KEYWORD1>\r
+        <KEYWORD1>database</KEYWORD1>\r
+        <KEYWORD1>dataservers</KEYWORD1>\r
+        <KEYWORD1>dataset</KEYWORD1>\r
+        <KEYWORD1>dataset-handle</KEYWORD1>\r
+        <KEYWORD1>date</KEYWORD1>\r
+        <KEYWORD1>date-format</KEYWORD1>\r
+        <KEYWORD1>datetime</KEYWORD1>\r
+        <KEYWORD1>datetime-tz</KEYWORD1>\r
+        <KEYWORD1>day</KEYWORD1>\r
+        <KEYWORD1>db-references</KEYWORD1>\r
+        <KEYWORD1>dbcodepage</KEYWORD1>\r
+        <KEYWORD1>dbcollation</KEYWORD1>\r
+        <KEYWORD1>dbname</KEYWORD1>\r
+        <KEYWORD1>dbparam</KEYWORD1>\r
+        <KEYWORD1>dbrestrictions</KEYWORD1>\r
+        <KEYWORD1>dbtaskid</KEYWORD1>\r
+        <KEYWORD1>dbtype</KEYWORD1>\r
+        <KEYWORD1>dbversion</KEYWORD1>\r
+        <KEYWORD1>dcolor</KEYWORD1>\r
+        <KEYWORD1>dde</KEYWORD1>\r
+        <KEYWORD1>dde-error</KEYWORD1>\r
+        <KEYWORD1>dde-id</KEYWORD1>\r
+        <KEYWORD1>dde-item</KEYWORD1>\r
+        <KEYWORD1>dde-name</KEYWORD1>\r
+        <KEYWORD1>dde-topic</KEYWORD1>\r
+        <KEYWORD1>deblank</KEYWORD1>\r
+        <KEYWORD1>debug</KEYWORD1>\r
+        <KEYWORD1>debug-alert</KEYWORD1>\r
+        <KEYWORD1>debug-list</KEYWORD1>\r
+        <KEYWORD1>debugger</KEYWORD1>\r
+        <KEYWORD1>decimal</KEYWORD1>\r
+        <KEYWORD1>decimals</KEYWORD1>\r
+        <KEYWORD1>declare</KEYWORD1>\r
+        <KEYWORD1>default</KEYWORD1>\r
+        <KEYWORD1>default-buffer-handle</KEYWORD1>\r
+        <KEYWORD1>default-button</KEYWORD1>\r
+        <KEYWORD1>default-commit</KEYWORD1>\r
+        <KEYWORD1>default-extension</KEYWORD1>\r
+        <KEYWORD1>default-noxlate</KEYWORD1>\r
+        <KEYWORD1>default-pop-up</KEYWORD1>\r
+        <KEYWORD1>default-string</KEYWORD1>\r
+        <KEYWORD1>default-window</KEYWORD1>\r
+        <KEYWORD1>defer-lob-fetch</KEYWORD1>\r
+        <KEYWORD1>define</KEYWORD1>\r
+        <KEYWORD1>defined</KEYWORD1>\r
+        <KEYWORD1>delete</KEYWORD1>\r
+        <KEYWORD1>delete-column</KEYWORD1>\r
+        <KEYWORD1>delete-current-row</KEYWORD1>\r
+        <KEYWORD1>delete-end-line</KEYWORD1>\r
+        <KEYWORD1>delete-field</KEYWORD1>\r
+        <KEYWORD1>delete-header-entry</KEYWORD1>\r
+        <KEYWORD1>delete-line</KEYWORD1>\r
+        <KEYWORD1>delete-node</KEYWORD1>\r
+        <KEYWORD1>delete-result-list-entry</KEYWORD1>\r
+        <KEYWORD1>delete-selected-row</KEYWORD1>\r
+        <KEYWORD1>delete-selected-rows</KEYWORD1>\r
+        <KEYWORD1>delete-word</KEYWORD1>\r
+        <KEYWORD1>delimiter</KEYWORD1>\r
+        <KEYWORD1>descending</KEYWORD1>\r
+        <KEYWORD1>description</KEYWORD1>\r
+        <KEYWORD1>deselect-extend</KEYWORD1>\r
+        <KEYWORD1>deselect-focused-row</KEYWORD1>\r
+        <KEYWORD1>deselect-rows</KEYWORD1>\r
+        <KEYWORD1>deselect-selected-row</KEYWORD1>\r
+        <KEYWORD1>deselection-extend</KEYWORD1>\r
+        <KEYWORD1>detach</KEYWORD1>\r
+        <KEYWORD1>detach-data-source</KEYWORD1>\r
+        <KEYWORD1>dialog-box</KEYWORD1>\r
+        <KEYWORD1>dialog-help</KEYWORD1>\r
+        <KEYWORD1>dictionary</KEYWORD1>\r
+        <KEYWORD1>dir</KEYWORD1>\r
+        <KEYWORD1>directory</KEYWORD1>\r
+        <KEYWORD1>disable</KEYWORD1>\r
+        <KEYWORD1>disable-auto-zap</KEYWORD1>\r
+        <KEYWORD1>disable-connections</KEYWORD1>\r
+        <KEYWORD1>disable-dump-triggers</KEYWORD1>\r
+        <KEYWORD1>disable-load-triggers</KEYWORD1>\r
+        <KEYWORD1>disabled</KEYWORD1>\r
+        <KEYWORD1>disconnect</KEYWORD1>\r
+        <KEYWORD1>dismiss-menu</KEYWORD1>\r
+        <KEYWORD1>display</KEYWORD1>\r
+        <KEYWORD1>display-message</KEYWORD1>\r
+        <KEYWORD1>display-timezone</KEYWORD1>\r
+        <KEYWORD1>display-type</KEYWORD1>\r
+        <KEYWORD1>distinct</KEYWORD1>\r
+        <KEYWORD1>do</KEYWORD1>\r
+        <KEYWORD1>dos</KEYWORD1>\r
+        <KEYWORD1>dos-end</KEYWORD1>\r
+        <KEYWORD1>double</KEYWORD1>\r
+        <KEYWORD1>down</KEYWORD1>\r
+        <KEYWORD1>drag-enabled</KEYWORD1>\r
+        <KEYWORD1>drop</KEYWORD1>\r
+        <KEYWORD1>drop-down</KEYWORD1>\r
+        <KEYWORD1>drop-down-list</KEYWORD1>\r
+        <KEYWORD1>drop-target</KEYWORD1>\r
+        <KEYWORD1>dump</KEYWORD1>\r
+        <KEYWORD1>dump-logging-now</KEYWORD1>\r
+        <KEYWORD1>dynamic</KEYWORD1>\r
+        <KEYWORD1>dynamic-current-value</KEYWORD1>\r
+        <KEYWORD1>dynamic-function</KEYWORD1>\r
+        <KEYWORD1>dynamic-next-value</KEYWORD1>\r
+        <KEYWORD1>each</KEYWORD1>\r
+        <KEYWORD1>echo</KEYWORD1>\r
+        <KEYWORD1>edge</KEYWORD1>\r
+        <KEYWORD1>edge-chars</KEYWORD1>\r
+        <KEYWORD1>edge-pixels</KEYWORD1>\r
+        <KEYWORD1>edit-can-paste</KEYWORD1>\r
+        <KEYWORD1>edit-can-undo</KEYWORD1>\r
+        <KEYWORD1>edit-clear</KEYWORD1>\r
+        <KEYWORD1>edit-copy</KEYWORD1>\r
+        <KEYWORD1>edit-cut</KEYWORD1>\r
+        <KEYWORD1>edit-paste</KEYWORD1>\r
+        <KEYWORD1>edit-undo</KEYWORD1>\r
+        <KEYWORD1>editing</KEYWORD1>\r
+        <KEYWORD1>editor</KEYWORD1>\r
+        <KEYWORD1>editor-backtab</KEYWORD1>\r
+        <KEYWORD1>editor-tab</KEYWORD1>\r
+        <KEYWORD1>else</KEYWORD1>\r
+        <KEYWORD1>empty</KEYWORD1>\r
+        <KEYWORD1>empty-dataset</KEYWORD1>\r
+        <KEYWORD1>empty-temp-table</KEYWORD1>\r
+        <KEYWORD1>enable</KEYWORD1>\r
+        <KEYWORD1>enable-connections</KEYWORD1>\r
+        <KEYWORD1>enabled</KEYWORD1>\r
+        <KEYWORD1>encode</KEYWORD1>\r
+        <KEYWORD1>encoding</KEYWORD1>\r
+        <KEYWORD1>end-file-drop</KEYWORD1>\r
+        <KEYWORD1>end-key</KEYWORD1>\r
+        <KEYWORD1>end-row-resize</KEYWORD1>\r
+        <KEYWORD1>end-user-prompt</KEYWORD1>\r
+        <KEYWORD1>enter-menubar</KEYWORD1>\r
+        <KEYWORD1>entered</KEYWORD1>\r
+        <KEYWORD1>entry-types-list</KEYWORD1>\r
+        <KEYWORD1>eq</KEYWORD1>\r
+        <KEYWORD1>error-column</KEYWORD1>\r
+        <KEYWORD1>error-object-detail</KEYWORD1>\r
+        <KEYWORD1>error-row</KEYWORD1>\r
+        <KEYWORD1>error-status</KEYWORD1>\r
+        <KEYWORD1>error-string</KEYWORD1>\r
+        <KEYWORD1>escape</KEYWORD1>\r
+        <KEYWORD1>etime</KEYWORD1>\r
+        <KEYWORD1>event-procedure</KEYWORD1>\r
+        <KEYWORD1>event-procedure-context</KEYWORD1>\r
+        <KEYWORD1>event-type</KEYWORD1>\r
+        <KEYWORD1>events</KEYWORD1>\r
+        <KEYWORD1>except</KEYWORD1>\r
+        <KEYWORD1>exclusive</KEYWORD1>\r
+        <KEYWORD1>exclusive-id</KEYWORD1>\r
+        <KEYWORD1>exclusive-lock</KEYWORD1>\r
+        <KEYWORD1>exclusive-web-user</KEYWORD1>\r
+        <KEYWORD1>execute</KEYWORD1>\r
+        <KEYWORD1>execution-log</KEYWORD1>\r
+        <KEYWORD1>exists</KEYWORD1>\r
+        <KEYWORD1>exit</KEYWORD1>\r
+        <KEYWORD1>exp</KEYWORD1>\r
+        <KEYWORD1>expand</KEYWORD1>\r
+        <KEYWORD1>expandable</KEYWORD1>\r
+        <KEYWORD1>explicit</KEYWORD1>\r
+        <KEYWORD1>export</KEYWORD1>\r
+        <KEYWORD1>extended</KEYWORD1>\r
+        <KEYWORD1>extent</KEYWORD1>\r
+        <KEYWORD1>external</KEYWORD1>\r
+        <KEYWORD1>extract</KEYWORD1>\r
+        <KEYWORD1>false</KEYWORD1>\r
+        <KEYWORD1>fetch</KEYWORD1>\r
+        <KEYWORD1>fetch-selected-row</KEYWORD1>\r
+        <KEYWORD1>fgcolor</KEYWORD1>\r
+        <KEYWORD1>fields</KEYWORD1>\r
+        <KEYWORD1>file</KEYWORD1>\r
+        <KEYWORD1>file-access-date</KEYWORD1>\r
+        <KEYWORD1>file-access-time</KEYWORD1>\r
+        <KEYWORD1>file-create-date</KEYWORD1>\r
+        <KEYWORD1>file-create-time</KEYWORD1>\r
+        <KEYWORD1>file-information</KEYWORD1>\r
+        <KEYWORD1>file-mod-date</KEYWORD1>\r
+        <KEYWORD1>file-mod-time</KEYWORD1>\r
+        <KEYWORD1>file-name</KEYWORD1>\r
+        <KEYWORD1>file-offset</KEYWORD1>\r
+        <KEYWORD1>file-size</KEYWORD1>\r
+        <KEYWORD1>file-type</KEYWORD1>\r
+        <KEYWORD1>filename</KEYWORD1>\r
+        <KEYWORD1>fill</KEYWORD1>\r
+        <KEYWORD1>fill-in</KEYWORD1>\r
+        <KEYWORD1>fill-mode</KEYWORD1>\r
+        <KEYWORD1>fill-where-string</KEYWORD1>\r
+        <KEYWORD1>filled</KEYWORD1>\r
+        <KEYWORD1>filters</KEYWORD1>\r
+        <KEYWORD1>find</KEYWORD1>\r
+        <KEYWORD1>find-by-rowid</KEYWORD1>\r
+        <KEYWORD1>find-case-sensitive</KEYWORD1>\r
+        <KEYWORD1>find-current</KEYWORD1>\r
+        <KEYWORD1>find-first</KEYWORD1>\r
+        <KEYWORD1>find-global</KEYWORD1>\r
+        <KEYWORD1>find-last</KEYWORD1>\r
+        <KEYWORD1>find-next</KEYWORD1>\r
+        <KEYWORD1>find-next-occurrence</KEYWORD1>\r
+        <KEYWORD1>find-prev-occurrence</KEYWORD1>\r
+        <KEYWORD1>find-previous</KEYWORD1>\r
+        <KEYWORD1>find-select</KEYWORD1>\r
+        <KEYWORD1>find-unique</KEYWORD1>\r
+        <KEYWORD1>find-wrap-around</KEYWORD1>\r
+        <KEYWORD1>finder</KEYWORD1>\r
+        <KEYWORD1>first</KEYWORD1>\r
+        <KEYWORD1>first-async-request</KEYWORD1>\r
+        <KEYWORD1>first-buffer</KEYWORD1>\r
+        <KEYWORD1>first-child</KEYWORD1>\r
+        <KEYWORD1>first-column</KEYWORD1>\r
+        <KEYWORD1>first-data-source</KEYWORD1>\r
+        <KEYWORD1>first-dataset</KEYWORD1>\r
+        <KEYWORD1>first-of</KEYWORD1>\r
+        <KEYWORD1>first-procedure</KEYWORD1>\r
+        <KEYWORD1>first-query</KEYWORD1>\r
+        <KEYWORD1>first-server</KEYWORD1>\r
+        <KEYWORD1>first-server-socket</KEYWORD1>\r
+        <KEYWORD1>first-socket</KEYWORD1>\r
+        <KEYWORD1>first-tab-item</KEYWORD1>\r
+        <KEYWORD1>fit-last-column</KEYWORD1>\r
+        <KEYWORD1>fix-codepage</KEYWORD1>\r
+        <KEYWORD1>fixed-only</KEYWORD1>\r
+        <KEYWORD1>flat-button</KEYWORD1>\r
+        <KEYWORD1>float</KEYWORD1>\r
+        <KEYWORD1>focus</KEYWORD1>\r
+        <KEYWORD1>focus-in</KEYWORD1>\r
+        <KEYWORD1>focused-row</KEYWORD1>\r
+        <KEYWORD1>focused-row-selected</KEYWORD1>\r
+        <KEYWORD1>font</KEYWORD1>\r
+        <KEYWORD1>font-based-layout</KEYWORD1>\r
+        <KEYWORD1>font-table</KEYWORD1>\r
+        <KEYWORD1>for</KEYWORD1>\r
+        <KEYWORD1>force-file</KEYWORD1>\r
+        <KEYWORD1>foreground</KEYWORD1>\r
+        <KEYWORD1>form-input</KEYWORD1>\r
+        <KEYWORD1>format</KEYWORD1>\r
+        <KEYWORD1>forward-only</KEYWORD1>\r
+        <KEYWORD1>forwards</KEYWORD1>\r
+        <KEYWORD1>frame</KEYWORD1>\r
+        <KEYWORD1>frame-col</KEYWORD1>\r
+        <KEYWORD1>frame-db</KEYWORD1>\r
+        <KEYWORD1>frame-down</KEYWORD1>\r
+        <KEYWORD1>frame-field</KEYWORD1>\r
+        <KEYWORD1>frame-file</KEYWORD1>\r
+        <KEYWORD1>frame-index</KEYWORD1>\r
+        <KEYWORD1>frame-line</KEYWORD1>\r
+        <KEYWORD1>frame-name</KEYWORD1>\r
+        <KEYWORD1>frame-row</KEYWORD1>\r
+        <KEYWORD1>frame-spacing</KEYWORD1>\r
+        <KEYWORD1>frame-value</KEYWORD1>\r
+        <KEYWORD1>frame-x</KEYWORD1>\r
+        <KEYWORD1>frame-y</KEYWORD1>\r
+        <KEYWORD1>frequency</KEYWORD1>\r
+        <KEYWORD1>from</KEYWORD1>\r
+        <KEYWORD1>from-chars</KEYWORD1>\r
+        <KEYWORD1>from-current</KEYWORD1>\r
+        <KEYWORD1>from-pixels</KEYWORD1>\r
+        <KEYWORD1>fromnoreorder</KEYWORD1>\r
+        <KEYWORD1>full-height</KEYWORD1>\r
+        <KEYWORD1>full-height-chars</KEYWORD1>\r
+        <KEYWORD1>full-height-pixels</KEYWORD1>\r
+        <KEYWORD1>full-pathname</KEYWORD1>\r
+        <KEYWORD1>full-width-chars</KEYWORD1>\r
+        <KEYWORD1>full-width-pixels</KEYWORD1>\r
+        <KEYWORD1>function</KEYWORD1>\r
+        <KEYWORD1>function-call-type</KEYWORD1>\r
+        <KEYWORD1>gateways</KEYWORD1>\r
+        <KEYWORD1>ge</KEYWORD1>\r
+        <KEYWORD1>generate-md5</KEYWORD1>\r
+        <KEYWORD1>get</KEYWORD1>\r
+        <KEYWORD1>get-attr-call-type</KEYWORD1>\r
+        <KEYWORD1>get-attribute</KEYWORD1>\r
+        <KEYWORD1>get-attribute-node</KEYWORD1>\r
+        <KEYWORD1>get-bits</KEYWORD1>\r
+        <KEYWORD1>get-blue-value</KEYWORD1>\r
+        <KEYWORD1>get-browse-column</KEYWORD1>\r
+        <KEYWORD1>get-buffer-handle</KEYWORD1>\r
+        <KEYWORD1>get-byte</KEYWORD1>\r
+        <KEYWORD1>get-byte-order</KEYWORD1>\r
+        <KEYWORD1>get-bytes</KEYWORD1>\r
+        <KEYWORD1>get-bytes-available</KEYWORD1>\r
+        <KEYWORD1>get-cgi-list</KEYWORD1>\r
+        <KEYWORD1>get-cgi-value</KEYWORD1>\r
+        <KEYWORD1>get-changes</KEYWORD1>\r
+        <KEYWORD1>get-child</KEYWORD1>\r
+        <KEYWORD1>get-child-relation</KEYWORD1>\r
+        <KEYWORD1>get-codepages</KEYWORD1>\r
+        <KEYWORD1>get-collations</KEYWORD1>\r
+        <KEYWORD1>get-config-value</KEYWORD1>\r
+        <KEYWORD1>get-current</KEYWORD1>\r
+        <KEYWORD1>get-dataset-buffer</KEYWORD1>\r
+        <KEYWORD1>get-dir</KEYWORD1>\r
+        <KEYWORD1>get-document-element</KEYWORD1>\r
+        <KEYWORD1>get-double</KEYWORD1>\r
+        <KEYWORD1>get-dropped-file</KEYWORD1>\r
+        <KEYWORD1>get-dynamic</KEYWORD1>\r
+        <KEYWORD1>get-file</KEYWORD1>\r
+        <KEYWORD1>get-first</KEYWORD1>\r
+        <KEYWORD1>get-float</KEYWORD1>\r
+        <KEYWORD1>get-green-value</KEYWORD1>\r
+        <KEYWORD1>get-header-entry</KEYWORD1>\r
+        <KEYWORD1>get-index-by-namespace-name</KEYWORD1>\r
+        <KEYWORD1>get-index-by-qname</KEYWORD1>\r
+        <KEYWORD1>get-iteration</KEYWORD1>\r
+        <KEYWORD1>get-key-value</KEYWORD1>\r
+        <KEYWORD1>get-last</KEYWORD1>\r
+        <KEYWORD1>get-localname-by-index</KEYWORD1>\r
+        <KEYWORD1>get-long</KEYWORD1>\r
+        <KEYWORD1>get-message</KEYWORD1>\r
+        <KEYWORD1>get-next</KEYWORD1>\r
+        <KEYWORD1>get-node</KEYWORD1>\r
+        <KEYWORD1>get-number</KEYWORD1>\r
+        <KEYWORD1>get-parent</KEYWORD1>\r
+        <KEYWORD1>get-pointer-value</KEYWORD1>\r
+        <KEYWORD1>get-prev</KEYWORD1>\r
+        <KEYWORD1>get-printers</KEYWORD1>\r
+        <KEYWORD1>get-qname-by-index</KEYWORD1>\r
+        <KEYWORD1>get-red-value</KEYWORD1>\r
+        <KEYWORD1>get-relation</KEYWORD1>\r
+        <KEYWORD1>get-repositioned-row</KEYWORD1>\r
+        <KEYWORD1>get-rgb-value</KEYWORD1>\r
+        <KEYWORD1>get-selected-widget</KEYWORD1>\r
+        <KEYWORD1>get-serialized</KEYWORD1>\r
+        <KEYWORD1>get-short</KEYWORD1>\r
+        <KEYWORD1>get-signature</KEYWORD1>\r
+        <KEYWORD1>get-size</KEYWORD1>\r
+        <KEYWORD1>get-socket-option</KEYWORD1>\r
+        <KEYWORD1>get-source-buffer</KEYWORD1>\r
+        <KEYWORD1>get-string</KEYWORD1>\r
+        <KEYWORD1>get-tab-item</KEYWORD1>\r
+        <KEYWORD1>get-text-height</KEYWORD1>\r
+        <KEYWORD1>get-text-height-chars</KEYWORD1>\r
+        <KEYWORD1>get-text-height-pixels</KEYWORD1>\r
+        <KEYWORD1>get-text-width</KEYWORD1>\r
+        <KEYWORD1>get-text-width-chars</KEYWORD1>\r
+        <KEYWORD1>get-text-width-pixels</KEYWORD1>\r
+        <KEYWORD1>get-top-buffer</KEYWORD1>\r
+        <KEYWORD1>get-type-by-index</KEYWORD1>\r
+        <KEYWORD1>get-type-by-namespace-name</KEYWORD1>\r
+        <KEYWORD1>get-type-by-qname</KEYWORD1>\r
+        <KEYWORD1>get-unsigned-short</KEYWORD1>\r
+        <KEYWORD1>get-uri-by-index</KEYWORD1>\r
+        <KEYWORD1>get-value-by-index</KEYWORD1>\r
+        <KEYWORD1>get-value-by-namespace-name</KEYWORD1>\r
+        <KEYWORD1>get-value-by-qname</KEYWORD1>\r
+        <KEYWORD1>get-wait-state</KEYWORD1>\r
+        <KEYWORD1>getbyte</KEYWORD1>\r
+        <KEYWORD1>global</KEYWORD1>\r
+        <KEYWORD1>go-on</KEYWORD1>\r
+        <KEYWORD1>go-pending</KEYWORD1>\r
+        <KEYWORD1>goto</KEYWORD1>\r
+        <KEYWORD1>grant</KEYWORD1>\r
+        <KEYWORD1>graphic-edge</KEYWORD1>\r
+        <KEYWORD1>grayed</KEYWORD1>\r
+        <KEYWORD1>grid-factor-horizontal</KEYWORD1>\r
+        <KEYWORD1>grid-factor-vertical</KEYWORD1>\r
+        <KEYWORD1>grid-set</KEYWORD1>\r
+        <KEYWORD1>grid-snap</KEYWORD1>\r
+        <KEYWORD1>grid-unit-height</KEYWORD1>\r
+        <KEYWORD1>grid-unit-height-chars</KEYWORD1>\r
+        <KEYWORD1>grid-unit-height-pixels</KEYWORD1>\r
+        <KEYWORD1>grid-unit-width</KEYWORD1>\r
+        <KEYWORD1>grid-unit-width-chars</KEYWORD1>\r
+        <KEYWORD1>grid-unit-width-pixels</KEYWORD1>\r
+        <KEYWORD1>grid-visible</KEYWORD1>\r
+        <KEYWORD1>group</KEYWORD1>\r
+        <KEYWORD1>gt</KEYWORD1>\r
+        <KEYWORD1>handle</KEYWORD1>\r
+        <KEYWORD1>handler</KEYWORD1>\r
+        <KEYWORD1>has-lobs</KEYWORD1>\r
+        <KEYWORD1>has-records</KEYWORD1>\r
+        <KEYWORD1>having</KEYWORD1>\r
+        <KEYWORD1>header</KEYWORD1>\r
+        <KEYWORD1>height</KEYWORD1>\r
+        <KEYWORD1>height-chars</KEYWORD1>\r
+        <KEYWORD1>height-pixels</KEYWORD1>\r
+        <KEYWORD1>help-context</KEYWORD1>\r
+        <KEYWORD1>help-topic</KEYWORD1>\r
+        <KEYWORD1>helpfile-name</KEYWORD1>\r
+        <KEYWORD1>hidden</KEYWORD1>\r
+        <KEYWORD1>hide</KEYWORD1>\r
+        <KEYWORD1>hint</KEYWORD1>\r
+        <KEYWORD1>horiz-end</KEYWORD1>\r
+        <KEYWORD1>horiz-home</KEYWORD1>\r
+        <KEYWORD1>horiz-scroll-drag</KEYWORD1>\r
+        <KEYWORD1>horizontal</KEYWORD1>\r
+        <KEYWORD1>host-byte-order</KEYWORD1>\r
+        <KEYWORD1>html-charset</KEYWORD1>\r
+        <KEYWORD1>html-end-of-line</KEYWORD1>\r
+        <KEYWORD1>html-end-of-page</KEYWORD1>\r
+        <KEYWORD1>html-frame-begin</KEYWORD1>\r
+        <KEYWORD1>html-frame-end</KEYWORD1>\r
+        <KEYWORD1>html-header-begin</KEYWORD1>\r
+        <KEYWORD1>html-header-end</KEYWORD1>\r
+        <KEYWORD1>html-title-begin</KEYWORD1>\r
+        <KEYWORD1>html-title-end</KEYWORD1>\r
+        <KEYWORD1>hwnd</KEYWORD1>\r
+        <KEYWORD1>icfparameter</KEYWORD1>\r
+        <KEYWORD1>icon</KEYWORD1>\r
+        <KEYWORD1>if</KEYWORD1>\r
+        <KEYWORD1>ignore-current-modified</KEYWORD1>\r
+        <KEYWORD1>image</KEYWORD1>\r
+        <KEYWORD1>image-down</KEYWORD1>\r
+        <KEYWORD1>image-insensitive</KEYWORD1>\r
+        <KEYWORD1>image-size</KEYWORD1>\r
+        <KEYWORD1>image-size-chars</KEYWORD1>\r
+        <KEYWORD1>image-size-pixels</KEYWORD1>\r
+        <KEYWORD1>image-up</KEYWORD1>\r
+        <KEYWORD1>immediate-display</KEYWORD1>\r
+        <KEYWORD1>import</KEYWORD1>\r
+        <KEYWORD1>import-node</KEYWORD1>\r
+        <KEYWORD1>in</KEYWORD1>\r
+        <KEYWORD1>in-handle</KEYWORD1>\r
+        <KEYWORD1>increment-exclusive-id</KEYWORD1>\r
+        <KEYWORD1>index</KEYWORD1>\r
+        <KEYWORD1>index-hint</KEYWORD1>\r
+        <KEYWORD1>index-information</KEYWORD1>\r
+        <KEYWORD1>indexed-reposition</KEYWORD1>\r
+        <KEYWORD1>indicator</KEYWORD1>\r
+        <KEYWORD1>information</KEYWORD1>\r
+        <KEYWORD1>init</KEYWORD1>\r
+        <KEYWORD1>initial</KEYWORD1>\r
+        <KEYWORD1>initial-dir</KEYWORD1>\r
+        <KEYWORD1>initial-filter</KEYWORD1>\r
+        <KEYWORD1>initialize-document-type</KEYWORD1>\r
+        <KEYWORD1>initiate</KEYWORD1>\r
+        <KEYWORD1>inner</KEYWORD1>\r
+        <KEYWORD1>inner-chars</KEYWORD1>\r
+        <KEYWORD1>inner-lines</KEYWORD1>\r
+        <KEYWORD1>input</KEYWORD1>\r
+        <KEYWORD1>input-output</KEYWORD1>\r
+        <KEYWORD1>input-value</KEYWORD1>\r
+        <KEYWORD1>insert</KEYWORD1>\r
+        <KEYWORD1>insert-backtab</KEYWORD1>\r
+        <KEYWORD1>insert-before</KEYWORD1>\r
+        <KEYWORD1>insert-column</KEYWORD1>\r
+        <KEYWORD1>insert-field</KEYWORD1>\r
+        <KEYWORD1>insert-field-data</KEYWORD1>\r
+        <KEYWORD1>insert-field-label</KEYWORD1>\r
+        <KEYWORD1>insert-file</KEYWORD1>\r
+        <KEYWORD1>insert-mode</KEYWORD1>\r
+        <KEYWORD1>insert-row</KEYWORD1>\r
+        <KEYWORD1>insert-string</KEYWORD1>\r
+        <KEYWORD1>insert-tab</KEYWORD1>\r
+        <KEYWORD1>instantiating-procedure</KEYWORD1>\r
+        <KEYWORD1>integer</KEYWORD1>\r
+        <KEYWORD1>internal-entries</KEYWORD1>\r
+        <KEYWORD1>interval</KEYWORD1>\r
+        <KEYWORD1>into</KEYWORD1>\r
+        <KEYWORD1>invoke</KEYWORD1>\r
+        <KEYWORD1>is</KEYWORD1>\r
+        <KEYWORD1>is-attr-space</KEYWORD1>\r
+        <KEYWORD1>is-codepage-fixed</KEYWORD1>\r
+        <KEYWORD1>is-column-codepage</KEYWORD1>\r
+        <KEYWORD1>is-lead-byte</KEYWORD1>\r
+        <KEYWORD1>is-open</KEYWORD1>\r
+        <KEYWORD1>is-parameter-set</KEYWORD1>\r
+        <KEYWORD1>is-row-selected</KEYWORD1>\r
+        <KEYWORD1>is-selected</KEYWORD1>\r
+        <KEYWORD1>is-xml</KEYWORD1>\r
+        <KEYWORD1>iso-date</KEYWORD1>\r
+        <KEYWORD1>item</KEYWORD1>\r
+        <KEYWORD1>items-per-row</KEYWORD1>\r
+        <KEYWORD1>iteration-changed</KEYWORD1>\r
+        <KEYWORD1>join</KEYWORD1>\r
+        <KEYWORD1>join-by-sqldb</KEYWORD1>\r
+        <KEYWORD1>kblabel</KEYWORD1>\r
+        <KEYWORD1>keep-connection-open</KEYWORD1>\r
+        <KEYWORD1>keep-frame-z-order</KEYWORD1>\r
+        <KEYWORD1>keep-messages</KEYWORD1>\r
+        <KEYWORD1>keep-security-cache</KEYWORD1>\r
+        <KEYWORD1>keep-tab-order</KEYWORD1>\r
+        <KEYWORD1>key</KEYWORD1>\r
+        <KEYWORD1>key-code</KEYWORD1>\r
+        <KEYWORD1>key-function</KEYWORD1>\r
+        <KEYWORD1>key-label</KEYWORD1>\r
+        <KEYWORD1>keycode</KEYWORD1>\r
+        <KEYWORD1>keyfunction</KEYWORD1>\r
+        <KEYWORD1>keylabel</KEYWORD1>\r
+        <KEYWORD1>keys</KEYWORD1>\r
+        <KEYWORD1>keyword</KEYWORD1>\r
+        <KEYWORD1>keyword-all</KEYWORD1>\r
+        <KEYWORD1>label</KEYWORD1>\r
+        <KEYWORD1>label-bgcolor</KEYWORD1>\r
+        <KEYWORD1>label-dcolor</KEYWORD1>\r
+        <KEYWORD1>label-fgcolor</KEYWORD1>\r
+        <KEYWORD1>label-font</KEYWORD1>\r
+        <KEYWORD1>label-pfcolor</KEYWORD1>\r
+        <KEYWORD1>labels</KEYWORD1>\r
+        <KEYWORD1>landscape</KEYWORD1>\r
+        <KEYWORD1>languages</KEYWORD1>\r
+        <KEYWORD1>large</KEYWORD1>\r
+        <KEYWORD1>large-to-small</KEYWORD1>\r
+        <KEYWORD1>last</KEYWORD1>\r
+        <KEYWORD1>last-async-request</KEYWORD1>\r
+        <KEYWORD1>last-child</KEYWORD1>\r
+        <KEYWORD1>last-event</KEYWORD1>\r
+        <KEYWORD1>last-key</KEYWORD1>\r
+        <KEYWORD1>last-of</KEYWORD1>\r
+        <KEYWORD1>last-procedure</KEYWORD1>\r
+        <KEYWORD1>last-server</KEYWORD1>\r
+        <KEYWORD1>last-server-socket</KEYWORD1>\r
+        <KEYWORD1>last-socket</KEYWORD1>\r
+        <KEYWORD1>last-tab-item</KEYWORD1>\r
+        <KEYWORD1>lastkey</KEYWORD1>\r
+        <KEYWORD1>lc</KEYWORD1>\r
+        <KEYWORD1>ldbname</KEYWORD1>\r
+        <KEYWORD1>le</KEYWORD1>\r
+        <KEYWORD1>leading</KEYWORD1>\r
+        <KEYWORD1>left</KEYWORD1>\r
+        <KEYWORD1>left-aligned</KEYWORD1>\r
+        <KEYWORD1>left-end</KEYWORD1>\r
+        <KEYWORD1>left-trim</KEYWORD1>\r
+        <KEYWORD1>length</KEYWORD1>\r
+        <KEYWORD1>library</KEYWORD1>\r
+        <KEYWORD1>like</KEYWORD1>\r
+        <KEYWORD1>line</KEYWORD1>\r
+        <KEYWORD1>line-counter</KEYWORD1>\r
+        <KEYWORD1>line-down</KEYWORD1>\r
+        <KEYWORD1>line-left</KEYWORD1>\r
+        <KEYWORD1>line-right</KEYWORD1>\r
+        <KEYWORD1>line-up</KEYWORD1>\r
+        <KEYWORD1>list-events</KEYWORD1>\r
+        <KEYWORD1>list-item-pairs</KEYWORD1>\r
+        <KEYWORD1>list-items</KEYWORD1>\r
+        <KEYWORD1>list-query-attrs</KEYWORD1>\r
+        <KEYWORD1>list-set-attrs</KEYWORD1>\r
+        <KEYWORD1>list-widgets</KEYWORD1>\r
+        <KEYWORD1>listing</KEYWORD1>\r
+        <KEYWORD1>listings</KEYWORD1>\r
+        <KEYWORD1>literal-question</KEYWORD1>\r
+        <KEYWORD1>little-endian</KEYWORD1>\r
+        <KEYWORD1>load</KEYWORD1>\r
+        <KEYWORD1>load-from</KEYWORD1>\r
+        <KEYWORD1>load-icon</KEYWORD1>\r
+        <KEYWORD1>load-image</KEYWORD1>\r
+        <KEYWORD1>load-image-down</KEYWORD1>\r
+        <KEYWORD1>load-image-insensitive</KEYWORD1>\r
+        <KEYWORD1>load-image-up</KEYWORD1>\r
+        <KEYWORD1>load-mouse-pointer</KEYWORD1>\r
+        <KEYWORD1>load-picture</KEYWORD1>\r
+        <KEYWORD1>load-small-icon</KEYWORD1>\r
+        <KEYWORD1>lob-dir</KEYWORD1>\r
+        <KEYWORD1>local-host</KEYWORD1>\r
+        <KEYWORD1>local-name</KEYWORD1>\r
+        <KEYWORD1>local-port</KEYWORD1>\r
+        <KEYWORD1>locator-column-number</KEYWORD1>\r
+        <KEYWORD1>locator-line-number</KEYWORD1>\r
+        <KEYWORD1>locator-public-id</KEYWORD1>\r
+        <KEYWORD1>locator-system-id</KEYWORD1>\r
+        <KEYWORD1>locator-type</KEYWORD1>\r
+        <KEYWORD1>locked</KEYWORD1>\r
+        <KEYWORD1>log</KEYWORD1>\r
+        <KEYWORD1>log-entry-types</KEYWORD1>\r
+        <KEYWORD1>log-id</KEYWORD1>\r
+        <KEYWORD1>log-manager</KEYWORD1>\r
+        <KEYWORD1>log-threshold</KEYWORD1>\r
+        <KEYWORD1>logfile-name</KEYWORD1>\r
+        <KEYWORD1>logging-level</KEYWORD1>\r
+        <KEYWORD1>logical</KEYWORD1>\r
+        <KEYWORD1>long</KEYWORD1>\r
+        <KEYWORD1>longchar</KEYWORD1>\r
+        <KEYWORD1>longchar-to-node-value</KEYWORD1>\r
+        <KEYWORD1>lookahead</KEYWORD1>\r
+        <KEYWORD1>lookup</KEYWORD1>\r
+        <KEYWORD1>lower</KEYWORD1>\r
+        <KEYWORD1>lt</KEYWORD1>\r
+        <KEYWORD1>machine-class</KEYWORD1>\r
+        <KEYWORD1>main-menu</KEYWORD1>\r
+        <KEYWORD1>mandatory</KEYWORD1>\r
+        <KEYWORD1>manual-highlight</KEYWORD1>\r
+        <KEYWORD1>map</KEYWORD1>\r
+        <KEYWORD1>margin-extra</KEYWORD1>\r
+        <KEYWORD1>margin-height</KEYWORD1>\r
+        <KEYWORD1>margin-height-chars</KEYWORD1>\r
+        <KEYWORD1>margin-height-pixels</KEYWORD1>\r
+        <KEYWORD1>margin-width</KEYWORD1>\r
+        <KEYWORD1>margin-width-chars</KEYWORD1>\r
+        <KEYWORD1>margin-width-pixels</KEYWORD1>\r
+        <KEYWORD1>matches</KEYWORD1>\r
+        <KEYWORD1>max</KEYWORD1>\r
+        <KEYWORD1>max-button</KEYWORD1>\r
+        <KEYWORD1>max-chars</KEYWORD1>\r
+        <KEYWORD1>max-data-guess</KEYWORD1>\r
+        <KEYWORD1>max-height</KEYWORD1>\r
+        <KEYWORD1>max-height-chars</KEYWORD1>\r
+        <KEYWORD1>max-height-pixels</KEYWORD1>\r
+        <KEYWORD1>max-rows</KEYWORD1>\r
+        <KEYWORD1>max-size</KEYWORD1>\r
+        <KEYWORD1>max-value</KEYWORD1>\r
+        <KEYWORD1>max-width</KEYWORD1>\r
+        <KEYWORD1>max-width-chars</KEYWORD1>\r
+        <KEYWORD1>max-width-pixels</KEYWORD1>\r
+        <KEYWORD1>maximize</KEYWORD1>\r
+        <KEYWORD1>maximum</KEYWORD1>\r
+        <KEYWORD1>md5-value</KEYWORD1>\r
+        <KEYWORD1>member</KEYWORD1>\r
+        <KEYWORD1>memptr</KEYWORD1>\r
+        <KEYWORD1>memptr-to-node-value</KEYWORD1>\r
+        <KEYWORD1>menu</KEYWORD1>\r
+        <KEYWORD1>menu-bar</KEYWORD1>\r
+        <KEYWORD1>menu-item</KEYWORD1>\r
+        <KEYWORD1>menu-key</KEYWORD1>\r
+        <KEYWORD1>menu-mouse</KEYWORD1>\r
+        <KEYWORD1>menubar</KEYWORD1>\r
+        <KEYWORD1>merge-changes</KEYWORD1>\r
+        <KEYWORD1>merge-row-changes</KEYWORD1>\r
+        <KEYWORD1>message</KEYWORD1>\r
+        <KEYWORD1>message-area</KEYWORD1>\r
+        <KEYWORD1>message-area-font</KEYWORD1>\r
+        <KEYWORD1>message-line</KEYWORD1>\r
+        <KEYWORD1>message-lines</KEYWORD1>\r
+        <KEYWORD1>min-button</KEYWORD1>\r
+        <KEYWORD1>min-column-width-chars</KEYWORD1>\r
+        <KEYWORD1>min-column-width-pixels</KEYWORD1>\r
+        <KEYWORD1>min-height</KEYWORD1>\r
+        <KEYWORD1>min-height-chars</KEYWORD1>\r
+        <KEYWORD1>min-height-pixels</KEYWORD1>\r
+        <KEYWORD1>min-row-height</KEYWORD1>\r
+        <KEYWORD1>min-row-height-chars</KEYWORD1>\r
+        <KEYWORD1>min-row-height-pixels</KEYWORD1>\r
+        <KEYWORD1>min-schema-marshall</KEYWORD1>\r
+        <KEYWORD1>min-size</KEYWORD1>\r
+        <KEYWORD1>min-value</KEYWORD1>\r
+        <KEYWORD1>min-width</KEYWORD1>\r
+        <KEYWORD1>min-width-chars</KEYWORD1>\r
+        <KEYWORD1>min-width-pixels</KEYWORD1>\r
+        <KEYWORD1>minimum</KEYWORD1>\r
+        <KEYWORD1>mod</KEYWORD1>\r
+        <KEYWORD1>modified</KEYWORD1>\r
+        <KEYWORD1>modulo</KEYWORD1>\r
+        <KEYWORD1>month</KEYWORD1>\r
+        <KEYWORD1>mouse</KEYWORD1>\r
+        <KEYWORD1>mouse-pointer</KEYWORD1>\r
+        <KEYWORD1>movable</KEYWORD1>\r
+        <KEYWORD1>move</KEYWORD1>\r
+        <KEYWORD1>move-after-tab-item</KEYWORD1>\r
+        <KEYWORD1>move-before-tab-item</KEYWORD1>\r
+        <KEYWORD1>move-column</KEYWORD1>\r
+        <KEYWORD1>move-to-bottom</KEYWORD1>\r
+        <KEYWORD1>move-to-eof</KEYWORD1>\r
+        <KEYWORD1>move-to-top</KEYWORD1>\r
+        <KEYWORD1>mpe</KEYWORD1>\r
+        <KEYWORD1>mtime</KEYWORD1>\r
+        <KEYWORD1>multiple</KEYWORD1>\r
+        <KEYWORD1>multiple-key</KEYWORD1>\r
+        <KEYWORD1>multitasking-interval</KEYWORD1>\r
+        <KEYWORD1>must-exist</KEYWORD1>\r
+        <KEYWORD1>must-understand</KEYWORD1>\r
+        <KEYWORD1>name</KEYWORD1>\r
+        <KEYWORD1>namespace-prefix</KEYWORD1>\r
+        <KEYWORD1>namespace-uri</KEYWORD1>\r
+        <KEYWORD1>native</KEYWORD1>\r
+        <KEYWORD1>ne</KEYWORD1>\r
+        <KEYWORD1>needs-appserver-prompt</KEYWORD1>\r
+        <KEYWORD1>needs-prompt</KEYWORD1>\r
+        <KEYWORD1>nested</KEYWORD1>\r
+        <KEYWORD1>new</KEYWORD1>\r
+        <KEYWORD1>new-line</KEYWORD1>\r
+        <KEYWORD1>new-row</KEYWORD1>\r
+        <KEYWORD1>next</KEYWORD1>\r
+        <KEYWORD1>next-column</KEYWORD1>\r
+        <KEYWORD1>next-error</KEYWORD1>\r
+        <KEYWORD1>next-frame</KEYWORD1>\r
+        <KEYWORD1>next-prompt</KEYWORD1>\r
+        <KEYWORD1>next-sibling</KEYWORD1>\r
+        <KEYWORD1>next-tab-item</KEYWORD1>\r
+        <KEYWORD1>next-value</KEYWORD1>\r
+        <KEYWORD1>next-word</KEYWORD1>\r
+        <KEYWORD1>no</KEYWORD1>\r
+        <KEYWORD1>no-apply</KEYWORD1>\r
+        <KEYWORD1>no-array-message</KEYWORD1>\r
+        <KEYWORD1>no-assign</KEYWORD1>\r
+        <KEYWORD1>no-attr</KEYWORD1>\r
+        <KEYWORD1>no-attr-list</KEYWORD1>\r
+        <KEYWORD1>no-attr-space</KEYWORD1>\r
+        <KEYWORD1>no-auto-validate</KEYWORD1>\r
+        <KEYWORD1>no-bind-where</KEYWORD1>\r
+        <KEYWORD1>no-box</KEYWORD1>\r
+        <KEYWORD1>no-column-scrolling</KEYWORD1>\r
+        <KEYWORD1>no-console</KEYWORD1>\r
+        <KEYWORD1>no-convert</KEYWORD1>\r
+        <KEYWORD1>no-convert-3d-colors</KEYWORD1>\r
+        <KEYWORD1>no-current-value</KEYWORD1>\r
+        <KEYWORD1>no-debug</KEYWORD1>\r
+        <KEYWORD1>no-drag</KEYWORD1>\r
+        <KEYWORD1>no-echo</KEYWORD1>\r
+        <KEYWORD1>no-empty-space</KEYWORD1>\r
+        <KEYWORD1>no-error</KEYWORD1>\r
+        <KEYWORD1>no-fill</KEYWORD1>\r
+        <KEYWORD1>no-focus</KEYWORD1>\r
+        <KEYWORD1>no-help</KEYWORD1>\r
+        <KEYWORD1>no-hide</KEYWORD1>\r
+        <KEYWORD1>no-index-hint</KEYWORD1>\r
+        <KEYWORD1>no-join-by-sqldb</KEYWORD1>\r
+        <KEYWORD1>no-labels</KEYWORD1>\r
+        <KEYWORD1>no-lobs</KEYWORD1>\r
+        <KEYWORD1>no-lock</KEYWORD1>\r
+        <KEYWORD1>no-lookahead</KEYWORD1>\r
+        <KEYWORD1>no-map</KEYWORD1>\r
+        <KEYWORD1>no-message</KEYWORD1>\r
+        <KEYWORD1>no-pause</KEYWORD1>\r
+        <KEYWORD1>no-prefetch</KEYWORD1>\r
+        <KEYWORD1>no-return-value</KEYWORD1>\r
+        <KEYWORD1>no-row-markers</KEYWORD1>\r
+        <KEYWORD1>no-schema-marshall</KEYWORD1>\r
+        <KEYWORD1>no-scrollbar-vertical</KEYWORD1>\r
+        <KEYWORD1>no-scrolling</KEYWORD1>\r
+        <KEYWORD1>no-separate-connection</KEYWORD1>\r
+        <KEYWORD1>no-separators</KEYWORD1>\r
+        <KEYWORD1>no-tab-stop</KEYWORD1>\r
+        <KEYWORD1>no-underline</KEYWORD1>\r
+        <KEYWORD1>no-undo</KEYWORD1>\r
+        <KEYWORD1>no-validate</KEYWORD1>\r
+        <KEYWORD1>no-wait</KEYWORD1>\r
+        <KEYWORD1>no-word-wrap</KEYWORD1>\r
+        <KEYWORD1>node-type</KEYWORD1>\r
+        <KEYWORD1>node-value</KEYWORD1>\r
+        <KEYWORD1>node-value-to-longchar</KEYWORD1>\r
+        <KEYWORD1>node-value-to-memptr</KEYWORD1>\r
+        <KEYWORD1>none</KEYWORD1>\r
+        <KEYWORD1>normalize</KEYWORD1>\r
+        <KEYWORD1>not</KEYWORD1>\r
+        <KEYWORD1>now</KEYWORD1>\r
+        <KEYWORD1>null</KEYWORD1>\r
+        <KEYWORD1>num-aliases</KEYWORD1>\r
+        <KEYWORD1>num-buffers</KEYWORD1>\r
+        <KEYWORD1>num-buttons</KEYWORD1>\r
+        <KEYWORD1>num-child-relations</KEYWORD1>\r
+        <KEYWORD1>num-children</KEYWORD1>\r
+        <KEYWORD1>num-columns</KEYWORD1>\r
+        <KEYWORD1>num-copies</KEYWORD1>\r
+        <KEYWORD1>num-dbs</KEYWORD1>\r
+        <KEYWORD1>num-dropped-files</KEYWORD1>\r
+        <KEYWORD1>num-entries</KEYWORD1>\r
+        <KEYWORD1>num-fields</KEYWORD1>\r
+        <KEYWORD1>num-formats</KEYWORD1>\r
+        <KEYWORD1>num-header-entries</KEYWORD1>\r
+        <KEYWORD1>num-items</KEYWORD1>\r
+        <KEYWORD1>num-iterations</KEYWORD1>\r
+        <KEYWORD1>num-lines</KEYWORD1>\r
+        <KEYWORD1>num-locked-columns</KEYWORD1>\r
+        <KEYWORD1>num-log-files</KEYWORD1>\r
+        <KEYWORD1>num-messages</KEYWORD1>\r
+        <KEYWORD1>num-parameters</KEYWORD1>\r
+        <KEYWORD1>num-relations</KEYWORD1>\r
+        <KEYWORD1>num-replaced</KEYWORD1>\r
+        <KEYWORD1>num-results</KEYWORD1>\r
+        <KEYWORD1>num-selected</KEYWORD1>\r
+        <KEYWORD1>num-selected-rows</KEYWORD1>\r
+        <KEYWORD1>num-selected-widgets</KEYWORD1>\r
+        <KEYWORD1>num-source-buffers</KEYWORD1>\r
+        <KEYWORD1>num-tabs</KEYWORD1>\r
+        <KEYWORD1>num-to-retain</KEYWORD1>\r
+        <KEYWORD1>num-top-buffers</KEYWORD1>\r
+        <KEYWORD1>num-visible-columns</KEYWORD1>\r
+        <KEYWORD1>numeric</KEYWORD1>\r
+        <KEYWORD1>numeric-decimal-point</KEYWORD1>\r
+        <KEYWORD1>numeric-format</KEYWORD1>\r
+        <KEYWORD1>numeric-separator</KEYWORD1>\r
+        <KEYWORD1>object</KEYWORD1>\r
+        <KEYWORD1>octet_length</KEYWORD1>\r
+        <KEYWORD1>of</KEYWORD1>\r
+        <KEYWORD1>off</KEYWORD1>\r
+        <KEYWORD1>ok</KEYWORD1>\r
+        <KEYWORD1>ok-cancel</KEYWORD1>\r
+        <KEYWORD1>old</KEYWORD1>\r
+        <KEYWORD1>ole-invoke-locale</KEYWORD1>\r
+        <KEYWORD1>ole-names-locale</KEYWORD1>\r
+        <KEYWORD1>on</KEYWORD1>\r
+        <KEYWORD1>on-frame-border</KEYWORD1>\r
+        <KEYWORD1>open</KEYWORD1>\r
+        <KEYWORD1>open-line-above</KEYWORD1>\r
+        <KEYWORD1>opsys</KEYWORD1>\r
+        <KEYWORD1>option</KEYWORD1>\r
+        <KEYWORD1>options</KEYWORD1>\r
+        <KEYWORD1>or</KEYWORD1>\r
+        <KEYWORD1>ordered-join</KEYWORD1>\r
+        <KEYWORD1>ordinal</KEYWORD1>\r
+        <KEYWORD1>orientation</KEYWORD1>\r
+        <KEYWORD1>origin-handle</KEYWORD1>\r
+        <KEYWORD1>origin-rowid</KEYWORD1>\r
+        <KEYWORD1>os-append</KEYWORD1>\r
+        <KEYWORD1>os-command</KEYWORD1>\r
+        <KEYWORD1>os-copy</KEYWORD1>\r
+        <KEYWORD1>os-create-dir</KEYWORD1>\r
+        <KEYWORD1>os-delete</KEYWORD1>\r
+        <KEYWORD1>os-dir</KEYWORD1>\r
+        <KEYWORD1>os-drives</KEYWORD1>\r
+        <KEYWORD1>os-error</KEYWORD1>\r
+        <KEYWORD1>os-getenv</KEYWORD1>\r
+        <KEYWORD1>os-rename</KEYWORD1>\r
+        <KEYWORD1>os2</KEYWORD1>\r
+        <KEYWORD1>os400</KEYWORD1>\r
+        <KEYWORD1>otherwise</KEYWORD1>\r
+        <KEYWORD1>out-of-data</KEYWORD1>\r
+        <KEYWORD1>outer</KEYWORD1>\r
+        <KEYWORD1>outer-join</KEYWORD1>\r
+        <KEYWORD1>output</KEYWORD1>\r
+        <KEYWORD1>overlay</KEYWORD1>\r
+        <KEYWORD1>override</KEYWORD1>\r
+        <KEYWORD1>owner</KEYWORD1>\r
+        <KEYWORD1>owner-document</KEYWORD1>\r
+        <KEYWORD1>page</KEYWORD1>\r
+        <KEYWORD1>page-bottom</KEYWORD1>\r
+        <KEYWORD1>page-down</KEYWORD1>\r
+        <KEYWORD1>page-left</KEYWORD1>\r
+        <KEYWORD1>page-number</KEYWORD1>\r
+        <KEYWORD1>page-right</KEYWORD1>\r
+        <KEYWORD1>page-right-text</KEYWORD1>\r
+        <KEYWORD1>page-size</KEYWORD1>\r
+        <KEYWORD1>page-top</KEYWORD1>\r
+        <KEYWORD1>page-up</KEYWORD1>\r
+        <KEYWORD1>page-width</KEYWORD1>\r
+        <KEYWORD1>paged</KEYWORD1>\r
+        <KEYWORD1>parameter</KEYWORD1>\r
+        <KEYWORD1>parent</KEYWORD1>\r
+        <KEYWORD1>parent-buffer</KEYWORD1>\r
+        <KEYWORD1>parent-relation</KEYWORD1>\r
+        <KEYWORD1>parse-status</KEYWORD1>\r
+        <KEYWORD1>partial-key</KEYWORD1>\r
+        <KEYWORD1>pascal</KEYWORD1>\r
+        <KEYWORD1>password-field</KEYWORD1>\r
+        <KEYWORD1>paste</KEYWORD1>\r
+        <KEYWORD1>pathname</KEYWORD1>\r
+        <KEYWORD1>pause</KEYWORD1>\r
+        <KEYWORD1>pdbname</KEYWORD1>\r
+        <KEYWORD1>performance</KEYWORD1>\r
+        <KEYWORD1>persistent</KEYWORD1>\r
+        <KEYWORD1>persistent-cache-disabled</KEYWORD1>\r
+        <KEYWORD1>persistent-procedure</KEYWORD1>\r
+        <KEYWORD1>pfcolor</KEYWORD1>\r
+        <KEYWORD1>pick</KEYWORD1>\r
+        <KEYWORD1>pick-area</KEYWORD1>\r
+        <KEYWORD1>pick-both</KEYWORD1>\r
+        <KEYWORD1>pixels</KEYWORD1>\r
+        <KEYWORD1>pixels-per-column</KEYWORD1>\r
+        <KEYWORD1>pixels-per-row</KEYWORD1>\r
+        <KEYWORD1>popup-menu</KEYWORD1>\r
+        <KEYWORD1>popup-only</KEYWORD1>\r
+        <KEYWORD1>portrait</KEYWORD1>\r
+        <KEYWORD1>position</KEYWORD1>\r
+        <KEYWORD1>precision</KEYWORD1>\r
+        <KEYWORD1>prepare-string</KEYWORD1>\r
+        <KEYWORD1>prepared</KEYWORD1>\r
+        <KEYWORD1>preprocess</KEYWORD1>\r
+        <KEYWORD1>preselect</KEYWORD1>\r
+        <KEYWORD1>prev</KEYWORD1>\r
+        <KEYWORD1>prev-column</KEYWORD1>\r
+        <KEYWORD1>prev-frame</KEYWORD1>\r
+        <KEYWORD1>prev-sibling</KEYWORD1>\r
+        <KEYWORD1>prev-tab-item</KEYWORD1>\r
+        <KEYWORD1>prev-word</KEYWORD1>\r
+        <KEYWORD1>primary</KEYWORD1>\r
+        <KEYWORD1>printer</KEYWORD1>\r
+        <KEYWORD1>printer-control-handle</KEYWORD1>\r
+        <KEYWORD1>printer-hdc</KEYWORD1>\r
+        <KEYWORD1>printer-name</KEYWORD1>\r
+        <KEYWORD1>printer-port</KEYWORD1>\r
+        <KEYWORD1>printer-setup</KEYWORD1>\r
+        <KEYWORD1>private</KEYWORD1>\r
+        <KEYWORD1>private-data</KEYWORD1>\r
+        <KEYWORD1>privileges</KEYWORD1>\r
+        <KEYWORD1>proc-handle</KEYWORD1>\r
+        <KEYWORD1>proc-status</KEYWORD1>\r
+        <KEYWORD1>procedure</KEYWORD1>\r
+        <KEYWORD1>procedure-call-type</KEYWORD1>\r
+        <KEYWORD1>procedure-name</KEYWORD1>\r
+        <KEYWORD1>process</KEYWORD1>\r
+        <KEYWORD1>profile-file</KEYWORD1>\r
+        <KEYWORD1>profiler</KEYWORD1>\r
+        <KEYWORD1>profiling</KEYWORD1>\r
+        <KEYWORD1>program-name</KEYWORD1>\r
+        <KEYWORD1>progress</KEYWORD1>\r
+        <KEYWORD1>progress-source</KEYWORD1>\r
+        <KEYWORD1>prompt</KEYWORD1>\r
+        <KEYWORD1>prompt-for</KEYWORD1>\r
+        <KEYWORD1>promsgs</KEYWORD1>\r
+        <KEYWORD1>propath</KEYWORD1>\r
+        <KEYWORD1>proversion</KEYWORD1>\r
+        <KEYWORD1>proxy</KEYWORD1>\r
+        <KEYWORD1>proxy-password</KEYWORD1>\r
+        <KEYWORD1>proxy-userid</KEYWORD1>\r
+        <KEYWORD1>public-id</KEYWORD1>\r
+        <KEYWORD1>publish</KEYWORD1>\r
+        <KEYWORD1>published-events</KEYWORD1>\r
+        <KEYWORD1>put</KEYWORD1>\r
+        <KEYWORD1>put-bits</KEYWORD1>\r
+        <KEYWORD1>put-byte</KEYWORD1>\r
+        <KEYWORD1>put-bytes</KEYWORD1>\r
+        <KEYWORD1>put-double</KEYWORD1>\r
+        <KEYWORD1>put-float</KEYWORD1>\r
+        <KEYWORD1>put-key-value</KEYWORD1>\r
+        <KEYWORD1>put-long</KEYWORD1>\r
+        <KEYWORD1>put-short</KEYWORD1>\r
+        <KEYWORD1>put-string</KEYWORD1>\r
+        <KEYWORD1>put-unsigned-short</KEYWORD1>\r
+        <KEYWORD1>putbyte</KEYWORD1>\r
+        <KEYWORD1>query</KEYWORD1>\r
+        <KEYWORD1>query-close</KEYWORD1>\r
+        <KEYWORD1>query-off-end</KEYWORD1>\r
+        <KEYWORD1>query-open</KEYWORD1>\r
+        <KEYWORD1>query-prepare</KEYWORD1>\r
+        <KEYWORD1>query-tuning</KEYWORD1>\r
+        <KEYWORD1>question</KEYWORD1>\r
+        <KEYWORD1>quit</KEYWORD1>\r
+        <KEYWORD1>quoter</KEYWORD1>\r
+        <KEYWORD1>r-index</KEYWORD1>\r
+        <KEYWORD1>radio-buttons</KEYWORD1>\r
+        <KEYWORD1>radio-set</KEYWORD1>\r
+        <KEYWORD1>random</KEYWORD1>\r
+        <KEYWORD1>raw</KEYWORD1>\r
+        <KEYWORD1>raw-transfer</KEYWORD1>\r
+        <KEYWORD1>rcode-information</KEYWORD1>\r
+        <KEYWORD1>read</KEYWORD1>\r
+        <KEYWORD1>read-available</KEYWORD1>\r
+        <KEYWORD1>read-exact-num</KEYWORD1>\r
+        <KEYWORD1>read-file</KEYWORD1>\r
+        <KEYWORD1>read-only</KEYWORD1>\r
+        <KEYWORD1>readkey</KEYWORD1>\r
+        <KEYWORD1>real</KEYWORD1>\r
+        <KEYWORD1>recid</KEYWORD1>\r
+        <KEYWORD1>record-length</KEYWORD1>\r
+        <KEYWORD1>rectangle</KEYWORD1>\r
+        <KEYWORD1>recursive</KEYWORD1>\r
+        <KEYWORD1>refresh</KEYWORD1>\r
+        <KEYWORD1>refreshable</KEYWORD1>\r
+        <KEYWORD1>reject-changes</KEYWORD1>\r
+        <KEYWORD1>reject-row-changes</KEYWORD1>\r
+        <KEYWORD1>rejected</KEYWORD1>\r
+        <KEYWORD1>relation-fields</KEYWORD1>\r
+        <KEYWORD1>relations-active</KEYWORD1>\r
+        <KEYWORD1>release</KEYWORD1>\r
+        <KEYWORD1>remote</KEYWORD1>\r
+        <KEYWORD1>remote-host</KEYWORD1>\r
+        <KEYWORD1>remote-port</KEYWORD1>\r
+        <KEYWORD1>remove-attribute</KEYWORD1>\r
+        <KEYWORD1>remove-child</KEYWORD1>\r
+        <KEYWORD1>remove-events-procedure</KEYWORD1>\r
+        <KEYWORD1>remove-super-procedure</KEYWORD1>\r
+        <KEYWORD1>repeat</KEYWORD1>\r
+        <KEYWORD1>replace</KEYWORD1>\r
+        <KEYWORD1>replace-child</KEYWORD1>\r
+        <KEYWORD1>replace-selection-text</KEYWORD1>\r
+        <KEYWORD1>replication-create</KEYWORD1>\r
+        <KEYWORD1>replication-delete</KEYWORD1>\r
+        <KEYWORD1>replication-write</KEYWORD1>\r
+        <KEYWORD1>reports</KEYWORD1>\r
+        <KEYWORD1>reposition</KEYWORD1>\r
+        <KEYWORD1>reposition-backwards</KEYWORD1>\r
+        <KEYWORD1>reposition-forwards</KEYWORD1>\r
+        <KEYWORD1>reposition-mode</KEYWORD1>\r
+        <KEYWORD1>reposition-parent-relation</KEYWORD1>\r
+        <KEYWORD1>reposition-to-row</KEYWORD1>\r
+        <KEYWORD1>reposition-to-rowid</KEYWORD1>\r
+        <KEYWORD1>request</KEYWORD1>\r
+        <KEYWORD1>resizable</KEYWORD1>\r
+        <KEYWORD1>resize</KEYWORD1>\r
+        <KEYWORD1>result</KEYWORD1>\r
+        <KEYWORD1>resume-display</KEYWORD1>\r
+        <KEYWORD1>retain</KEYWORD1>\r
+        <KEYWORD1>retain-shape</KEYWORD1>\r
+        <KEYWORD1>retry</KEYWORD1>\r
+        <KEYWORD1>retry-cancel</KEYWORD1>\r
+        <KEYWORD1>return-inserted</KEYWORD1>\r
+        <KEYWORD1>return-to-start-dir</KEYWORD1>\r
+        <KEYWORD1>return-value</KEYWORD1>\r
+        <KEYWORD1>return-value-data-type</KEYWORD1>\r
+        <KEYWORD1>returns</KEYWORD1>\r
+        <KEYWORD1>reverse-from</KEYWORD1>\r
+        <KEYWORD1>revert</KEYWORD1>\r
+        <KEYWORD1>revoke</KEYWORD1>\r
+        <KEYWORD1>rgb-value</KEYWORD1>\r
+        <KEYWORD1>right</KEYWORD1>\r
+        <KEYWORD1>right-aligned</KEYWORD1>\r
+        <KEYWORD1>right-end</KEYWORD1>\r
+        <KEYWORD1>right-trim</KEYWORD1>\r
+        <KEYWORD1>round</KEYWORD1>\r
+        <KEYWORD1>row</KEYWORD1>\r
+        <KEYWORD1>row-created</KEYWORD1>\r
+        <KEYWORD1>row-deleted</KEYWORD1>\r
+        <KEYWORD1>row-height</KEYWORD1>\r
+        <KEYWORD1>row-height-chars</KEYWORD1>\r
+        <KEYWORD1>row-height-pixels</KEYWORD1>\r
+        <KEYWORD1>row-markers</KEYWORD1>\r
+        <KEYWORD1>row-modified</KEYWORD1>\r
+        <KEYWORD1>row-of</KEYWORD1>\r
+        <KEYWORD1>row-resizable</KEYWORD1>\r
+        <KEYWORD1>row-state</KEYWORD1>\r
+        <KEYWORD1>row-unmodified</KEYWORD1>\r
+        <KEYWORD1>rowid</KEYWORD1>\r
+        <KEYWORD1>rule</KEYWORD1>\r
+        <KEYWORD1>rule-row</KEYWORD1>\r
+        <KEYWORD1>rule-y</KEYWORD1>\r
+        <KEYWORD1>run</KEYWORD1>\r
+        <KEYWORD1>run-procedure</KEYWORD1>\r
+        <KEYWORD1>save</KEYWORD1>\r
+        <KEYWORD1>save-as</KEYWORD1>\r
+        <KEYWORD1>save-file</KEYWORD1>\r
+        <KEYWORD1>save-row-changes</KEYWORD1>\r
+        <KEYWORD1>save-where-string</KEYWORD1>\r
+        <KEYWORD1>sax-attributes</KEYWORD1>\r
+        <KEYWORD1>sax-complete</KEYWORD1>\r
+        <KEYWORD1>sax-parse</KEYWORD1>\r
+        <KEYWORD1>sax-parse-first</KEYWORD1>\r
+        <KEYWORD1>sax-parse-next</KEYWORD1>\r
+        <KEYWORD1>sax-parser-error</KEYWORD1>\r
+        <KEYWORD1>sax-reader</KEYWORD1>\r
+        <KEYWORD1>sax-running</KEYWORD1>\r
+        <KEYWORD1>sax-uninitialized</KEYWORD1>\r
+        <KEYWORD1>sax-xml</KEYWORD1>\r
+        <KEYWORD1>schema</KEYWORD1>\r
+        <KEYWORD1>schema-change</KEYWORD1>\r
+        <KEYWORD1>schema-path</KEYWORD1>\r
+        <KEYWORD1>screen</KEYWORD1>\r
+        <KEYWORD1>screen-io</KEYWORD1>\r
+        <KEYWORD1>screen-lines</KEYWORD1>\r
+        <KEYWORD1>screen-value</KEYWORD1>\r
+        <KEYWORD1>scroll</KEYWORD1>\r
+        <KEYWORD1>scroll-bars</KEYWORD1>\r
+        <KEYWORD1>scroll-delta</KEYWORD1>\r
+        <KEYWORD1>scroll-left</KEYWORD1>\r
+        <KEYWORD1>scroll-mode</KEYWORD1>\r
+        <KEYWORD1>scroll-offset</KEYWORD1>\r
+        <KEYWORD1>scroll-right</KEYWORD1>\r
+        <KEYWORD1>scroll-to-current-row</KEYWORD1>\r
+        <KEYWORD1>scroll-to-item</KEYWORD1>\r
+        <KEYWORD1>scroll-to-selected-row</KEYWORD1>\r
+        <KEYWORD1>scrollable</KEYWORD1>\r
+        <KEYWORD1>scrollbar-drag</KEYWORD1>\r
+        <KEYWORD1>scrollbar-horizontal</KEYWORD1>\r
+        <KEYWORD1>scrollbar-vertical</KEYWORD1>\r
+        <KEYWORD1>scrolled-row-position</KEYWORD1>\r
+        <KEYWORD1>scrolling</KEYWORD1>\r
+        <KEYWORD1>sdbname</KEYWORD1>\r
+        <KEYWORD1>search</KEYWORD1>\r
+        <KEYWORD1>search-self</KEYWORD1>\r
+        <KEYWORD1>search-target</KEYWORD1>\r
+        <KEYWORD1>section</KEYWORD1>\r
+        <KEYWORD1>seek</KEYWORD1>\r
+        <KEYWORD1>select-all</KEYWORD1>\r
+        <KEYWORD1>select-extend</KEYWORD1>\r
+        <KEYWORD1>select-focused-row</KEYWORD1>\r
+        <KEYWORD1>select-next-row</KEYWORD1>\r
+        <KEYWORD1>select-prev-row</KEYWORD1>\r
+        <KEYWORD1>select-repositioned-row</KEYWORD1>\r
+        <KEYWORD1>select-row</KEYWORD1>\r
+        <KEYWORD1>selectable</KEYWORD1>\r
+        <KEYWORD1>selected</KEYWORD1>\r
+        <KEYWORD1>selected-items</KEYWORD1>\r
+        <KEYWORD1>selection-end</KEYWORD1>\r
+        <KEYWORD1>selection-extend</KEYWORD1>\r
+        <KEYWORD1>selection-list</KEYWORD1>\r
+        <KEYWORD1>selection-start</KEYWORD1>\r
+        <KEYWORD1>selection-text</KEYWORD1>\r
+        <KEYWORD1>self</KEYWORD1>\r
+        <KEYWORD1>send</KEYWORD1>\r
+        <KEYWORD1>sensitive</KEYWORD1>\r
+        <KEYWORD1>separate-connection</KEYWORD1>\r
+        <KEYWORD1>separator-fgcolor</KEYWORD1>\r
+        <KEYWORD1>separators</KEYWORD1>\r
+        <KEYWORD1>server</KEYWORD1>\r
+        <KEYWORD1>server-connection-bound</KEYWORD1>\r
+        <KEYWORD1>server-connection-bound-request</KEYWORD1>\r
+        <KEYWORD1>server-connection-context</KEYWORD1>\r
+        <KEYWORD1>server-connection-id</KEYWORD1>\r
+        <KEYWORD1>server-operating-mode</KEYWORD1>\r
+        <KEYWORD1>server-socket</KEYWORD1>\r
+        <KEYWORD1>session</KEYWORD1>\r
+        <KEYWORD1>session-end</KEYWORD1>\r
+        <KEYWORD1>set</KEYWORD1>\r
+        <KEYWORD1>set-actor</KEYWORD1>\r
+        <KEYWORD1>set-attr-call-type</KEYWORD1>\r
+        <KEYWORD1>set-attribute</KEYWORD1>\r
+        <KEYWORD1>set-attribute-node</KEYWORD1>\r
+        <KEYWORD1>set-blue-value</KEYWORD1>\r
+        <KEYWORD1>set-break</KEYWORD1>\r
+        <KEYWORD1>set-buffers</KEYWORD1>\r
+        <KEYWORD1>set-byte-order</KEYWORD1>\r
+        <KEYWORD1>set-callback-procedure</KEYWORD1>\r
+        <KEYWORD1>set-cell-focus</KEYWORD1>\r
+        <KEYWORD1>set-commit</KEYWORD1>\r
+        <KEYWORD1>set-connect-procedure</KEYWORD1>\r
+        <KEYWORD1>set-contents</KEYWORD1>\r
+        <KEYWORD1>set-dynamic</KEYWORD1>\r
+        <KEYWORD1>set-green-value</KEYWORD1>\r
+        <KEYWORD1>set-input-source</KEYWORD1>\r
+        <KEYWORD1>set-must-understand</KEYWORD1>\r
+        <KEYWORD1>set-node</KEYWORD1>\r
+        <KEYWORD1>set-numeric-format</KEYWORD1>\r
+        <KEYWORD1>set-parameter</KEYWORD1>\r
+        <KEYWORD1>set-pointer-value</KEYWORD1>\r
+        <KEYWORD1>set-read-response-procedure</KEYWORD1>\r
+        <KEYWORD1>set-red-value</KEYWORD1>\r
+        <KEYWORD1>set-repositioned-row</KEYWORD1>\r
+        <KEYWORD1>set-rgb-value</KEYWORD1>\r
+        <KEYWORD1>set-rollback</KEYWORD1>\r
+        <KEYWORD1>set-selection</KEYWORD1>\r
+        <KEYWORD1>set-serialized</KEYWORD1>\r
+        <KEYWORD1>set-size</KEYWORD1>\r
+        <KEYWORD1>set-socket-option</KEYWORD1>\r
+        <KEYWORD1>set-wait-state</KEYWORD1>\r
+        <KEYWORD1>settings</KEYWORD1>\r
+        <KEYWORD1>setuserid</KEYWORD1>\r
+        <KEYWORD1>share-lock</KEYWORD1>\r
+        <KEYWORD1>shared</KEYWORD1>\r
+        <KEYWORD1>short</KEYWORD1>\r
+        <KEYWORD1>show-in-taskbar</KEYWORD1>\r
+        <KEYWORD1>show-stats</KEYWORD1>\r
+        <KEYWORD1>side-label</KEYWORD1>\r
+        <KEYWORD1>side-label-handle</KEYWORD1>\r
+        <KEYWORD1>side-labels</KEYWORD1>\r
+        <KEYWORD1>silent</KEYWORD1>\r
+        <KEYWORD1>simple</KEYWORD1>\r
+        <KEYWORD1>single</KEYWORD1>\r
+        <KEYWORD1>size</KEYWORD1>\r
+        <KEYWORD1>size-chars</KEYWORD1>\r
+        <KEYWORD1>size-pixels</KEYWORD1>\r
+        <KEYWORD1>skip</KEYWORD1>\r
+        <KEYWORD1>skip-deleted-record</KEYWORD1>\r
+        <KEYWORD1>skip-schema-check</KEYWORD1>\r
+        <KEYWORD1>slider</KEYWORD1>\r
+        <KEYWORD1>small-icon</KEYWORD1>\r
+        <KEYWORD1>small-title</KEYWORD1>\r
+        <KEYWORD1>smallint</KEYWORD1>\r
+        <KEYWORD1>soap-fault</KEYWORD1>\r
+        <KEYWORD1>soap-fault-actor</KEYWORD1>\r
+        <KEYWORD1>soap-fault-code</KEYWORD1>\r
+        <KEYWORD1>soap-fault-detail</KEYWORD1>\r
+        <KEYWORD1>soap-fault-string</KEYWORD1>\r
+        <KEYWORD1>soap-header</KEYWORD1>\r
+        <KEYWORD1>soap-header-entryref</KEYWORD1>\r
+        <KEYWORD1>socket</KEYWORD1>\r
+        <KEYWORD1>some</KEYWORD1>\r
+        <KEYWORD1>sort</KEYWORD1>\r
+        <KEYWORD1>source</KEYWORD1>\r
+        <KEYWORD1>source-procedure</KEYWORD1>\r
+        <KEYWORD1>space</KEYWORD1>\r
+        <KEYWORD1>sql</KEYWORD1>\r
+        <KEYWORD1>sqrt</KEYWORD1>\r
+        <KEYWORD1>start</KEYWORD1>\r
+        <KEYWORD1>start-extend-box-selection</KEYWORD1>\r
+        <KEYWORD1>start-row-resize</KEYWORD1>\r
+        <KEYWORD1>starting</KEYWORD1>\r
+        <KEYWORD1>startup-parameters</KEYWORD1>\r
+        <KEYWORD1>status</KEYWORD1>\r
+        <KEYWORD1>status-area</KEYWORD1>\r
+        <KEYWORD1>status-area-font</KEYWORD1>\r
+        <KEYWORD1>stdcall</KEYWORD1>\r
+        <KEYWORD1>stop</KEYWORD1>\r
+        <KEYWORD1>stop-display</KEYWORD1>\r
+        <KEYWORD1>stop-parsing</KEYWORD1>\r
+        <KEYWORD1>stopped</KEYWORD1>\r
+        <KEYWORD1>stored-procedure</KEYWORD1>\r
+        <KEYWORD1>stream</KEYWORD1>\r
+        <KEYWORD1>stream-io</KEYWORD1>\r
+        <KEYWORD1>stretch-to-fit</KEYWORD1>\r
+        <KEYWORD1>string</KEYWORD1>\r
+        <KEYWORD1>string-value</KEYWORD1>\r
+        <KEYWORD1>string-xref</KEYWORD1>\r
+        <KEYWORD1>sub-average</KEYWORD1>\r
+        <KEYWORD1>sub-count</KEYWORD1>\r
+        <KEYWORD1>sub-maximum</KEYWORD1>\r
+        <KEYWORD1>sub-menu</KEYWORD1>\r
+        <KEYWORD1>sub-menu-help</KEYWORD1>\r
+        <KEYWORD1>sub-minimum</KEYWORD1>\r
+        <KEYWORD1>sub-total</KEYWORD1>\r
+        <KEYWORD1>subscribe</KEYWORD1>\r
+        <KEYWORD1>substitute</KEYWORD1>\r
+        <KEYWORD1>substring</KEYWORD1>\r
+        <KEYWORD1>subtype</KEYWORD1>\r
+        <KEYWORD1>sum</KEYWORD1>\r
+        <KEYWORD1>summary</KEYWORD1>\r
+        <KEYWORD1>super</KEYWORD1>\r
+        <KEYWORD1>super-procedures</KEYWORD1>\r
+        <KEYWORD1>suppress-namespace-processing</KEYWORD1>\r
+        <KEYWORD1>suppress-warnings</KEYWORD1>\r
+        <KEYWORD1>synchronize</KEYWORD1>\r
+        <KEYWORD1>system-alert-boxes</KEYWORD1>\r
+        <KEYWORD1>system-dialog</KEYWORD1>\r
+        <KEYWORD1>system-help</KEYWORD1>\r
+        <KEYWORD1>system-id</KEYWORD1>\r
+        <KEYWORD1>tab-position</KEYWORD1>\r
+        <KEYWORD1>tab-stop</KEYWORD1>\r
+        <KEYWORD1>table</KEYWORD1>\r
+        <KEYWORD1>table-crc-list</KEYWORD1>\r
+        <KEYWORD1>table-handle</KEYWORD1>\r
+        <KEYWORD1>table-list</KEYWORD1>\r
+        <KEYWORD1>table-number</KEYWORD1>\r
+        <KEYWORD1>target</KEYWORD1>\r
+        <KEYWORD1>target-procedure</KEYWORD1>\r
+        <KEYWORD1>temp-directory</KEYWORD1>\r
+        <KEYWORD1>temp-table</KEYWORD1>\r
+        <KEYWORD1>temp-table-prepare</KEYWORD1>\r
+        <KEYWORD1>term</KEYWORD1>\r
+        <KEYWORD1>terminal</KEYWORD1>\r
+        <KEYWORD1>terminate</KEYWORD1>\r
+        <KEYWORD1>text</KEYWORD1>\r
+        <KEYWORD1>text-cursor</KEYWORD1>\r
+        <KEYWORD1>text-seg-growth</KEYWORD1>\r
+        <KEYWORD1>text-selected</KEYWORD1>\r
+        <KEYWORD1>then</KEYWORD1>\r
+        <KEYWORD1>this-procedure</KEYWORD1>\r
+        <KEYWORD1>three-d</KEYWORD1>\r
+        <KEYWORD1>through</KEYWORD1>\r
+        <KEYWORD1>thru</KEYWORD1>\r
+        <KEYWORD1>tic-marks</KEYWORD1>\r
+        <KEYWORD1>time</KEYWORD1>\r
+        <KEYWORD1>time-source</KEYWORD1>\r
+        <KEYWORD1>timezone</KEYWORD1>\r
+        <KEYWORD1>title</KEYWORD1>\r
+        <KEYWORD1>title-bgcolor</KEYWORD1>\r
+        <KEYWORD1>title-dcolor</KEYWORD1>\r
+        <KEYWORD1>title-fgcolor</KEYWORD1>\r
+        <KEYWORD1>title-font</KEYWORD1>\r
+        <KEYWORD1>to</KEYWORD1>\r
+        <KEYWORD1>to-rowid</KEYWORD1>\r
+        <KEYWORD1>today</KEYWORD1>\r
+        <KEYWORD1>toggle-box</KEYWORD1>\r
+        <KEYWORD1>tooltip</KEYWORD1>\r
+        <KEYWORD1>tooltips</KEYWORD1>\r
+        <KEYWORD1>top</KEYWORD1>\r
+        <KEYWORD1>top-column</KEYWORD1>\r
+        <KEYWORD1>top-only</KEYWORD1>\r
+        <KEYWORD1>topic</KEYWORD1>\r
+        <KEYWORD1>total</KEYWORD1>\r
+        <KEYWORD1>trace-filter</KEYWORD1>\r
+        <KEYWORD1>tracing</KEYWORD1>\r
+        <KEYWORD1>tracking-changes</KEYWORD1>\r
+        <KEYWORD1>trailing</KEYWORD1>\r
+        <KEYWORD1>trans</KEYWORD1>\r
+        <KEYWORD1>trans-init-procedure</KEYWORD1>\r
+        <KEYWORD1>transaction</KEYWORD1>\r
+        <KEYWORD1>transaction-mode</KEYWORD1>\r
+        <KEYWORD1>transparent</KEYWORD1>\r
+        <KEYWORD1>trigger</KEYWORD1>\r
+        <KEYWORD1>triggers</KEYWORD1>\r
+        <KEYWORD1>trim</KEYWORD1>\r
+        <KEYWORD1>true</KEYWORD1>\r
+        <KEYWORD1>truncate</KEYWORD1>\r
+        <KEYWORD1>ttcodepage</KEYWORD1>\r
+        <KEYWORD1>type</KEYWORD1>\r
+        <KEYWORD1>unbuffered</KEYWORD1>\r
+        <KEYWORD1>underline</KEYWORD1>\r
+        <KEYWORD1>undo</KEYWORD1>\r
+        <KEYWORD1>unformatted</KEYWORD1>\r
+        <KEYWORD1>union</KEYWORD1>\r
+        <KEYWORD1>unique</KEYWORD1>\r
+        <KEYWORD1>unique-id</KEYWORD1>\r
+        <KEYWORD1>unique-match</KEYWORD1>\r
+        <KEYWORD1>unix</KEYWORD1>\r
+        <KEYWORD1>unix-end</KEYWORD1>\r
+        <KEYWORD1>unless-hidden</KEYWORD1>\r
+        <KEYWORD1>unload</KEYWORD1>\r
+        <KEYWORD1>unsigned-short</KEYWORD1>\r
+        <KEYWORD1>unsubscribe</KEYWORD1>\r
+        <KEYWORD1>up</KEYWORD1>\r
+        <KEYWORD1>update</KEYWORD1>\r
+        <KEYWORD1>upper</KEYWORD1>\r
+        <KEYWORD1>url</KEYWORD1>\r
+        <KEYWORD1>url-decode</KEYWORD1>\r
+        <KEYWORD1>url-encode</KEYWORD1>\r
+        <KEYWORD1>url-password</KEYWORD1>\r
+        <KEYWORD1>url-userid</KEYWORD1>\r
+        <KEYWORD1>use</KEYWORD1>\r
+        <KEYWORD1>use-dict-exps</KEYWORD1>\r
+        <KEYWORD1>use-filename</KEYWORD1>\r
+        <KEYWORD1>use-index</KEYWORD1>\r
+        <KEYWORD1>use-revvideo</KEYWORD1>\r
+        <KEYWORD1>use-text</KEYWORD1>\r
+        <KEYWORD1>use-underline</KEYWORD1>\r
+        <KEYWORD1>user</KEYWORD1>\r
+        <KEYWORD1>user-data</KEYWORD1>\r
+        <KEYWORD1>userid</KEYWORD1>\r
+        <KEYWORD1>using</KEYWORD1>\r
+        <KEYWORD1>utc-offset</KEYWORD1>\r
+        <KEYWORD1>v6display</KEYWORD1>\r
+        <KEYWORD1>v6frame</KEYWORD1>\r
+        <KEYWORD1>valid-event</KEYWORD1>\r
+        <KEYWORD1>valid-handle</KEYWORD1>\r
+        <KEYWORD1>validate</KEYWORD1>\r
+        <KEYWORD1>validate-expression</KEYWORD1>\r
+        <KEYWORD1>validate-message</KEYWORD1>\r
+        <KEYWORD1>validate-xml</KEYWORD1>\r
+        <KEYWORD1>validation-enabled</KEYWORD1>\r
+        <KEYWORD1>value</KEYWORD1>\r
+        <KEYWORD1>values</KEYWORD1>\r
+        <KEYWORD1>variable</KEYWORD1>\r
+        <KEYWORD1>verbose</KEYWORD1>\r
+        <KEYWORD1>vertical</KEYWORD1>\r
+        <KEYWORD1>view</KEYWORD1>\r
+        <KEYWORD1>view-as</KEYWORD1>\r
+        <KEYWORD1>view-first-column-on-reopen</KEYWORD1>\r
+        <KEYWORD1>virtual-height</KEYWORD1>\r
+        <KEYWORD1>virtual-height-chars</KEYWORD1>\r
+        <KEYWORD1>virtual-height-pixels</KEYWORD1>\r
+        <KEYWORD1>virtual-width</KEYWORD1>\r
+        <KEYWORD1>virtual-width-chars</KEYWORD1>\r
+        <KEYWORD1>virtual-width-pixels</KEYWORD1>\r
+        <KEYWORD1>visible</KEYWORD1>\r
+        <KEYWORD1>vms</KEYWORD1>\r
+        <KEYWORD1>wait</KEYWORD1>\r
+        <KEYWORD1>wait-for</KEYWORD1>\r
+        <KEYWORD1>warning</KEYWORD1>\r
+        <KEYWORD1>web-context</KEYWORD1>\r
+        <KEYWORD1>web-notify</KEYWORD1>\r
+        <KEYWORD1>weekday</KEYWORD1>\r
+        <KEYWORD1>when</KEYWORD1>\r
+        <KEYWORD1>where</KEYWORD1>\r
+        <KEYWORD1>where-string</KEYWORD1>\r
+        <KEYWORD1>while</KEYWORD1>\r
+        <KEYWORD1>widget</KEYWORD1>\r
+        <KEYWORD1>widget-enter</KEYWORD1>\r
+        <KEYWORD1>widget-handle</KEYWORD1>\r
+        <KEYWORD1>widget-leave</KEYWORD1>\r
+        <KEYWORD1>widget-pool</KEYWORD1>\r
+        <KEYWORD1>width</KEYWORD1>\r
+        <KEYWORD1>width-chars</KEYWORD1>\r
+        <KEYWORD1>width-pixels</KEYWORD1>\r
+        <KEYWORD1>window</KEYWORD1>\r
+        <KEYWORD1>window-delayed-minimize</KEYWORD1>\r
+        <KEYWORD1>window-name</KEYWORD1>\r
+        <KEYWORD1>window-normal</KEYWORD1>\r
+        <KEYWORD1>window-state</KEYWORD1>\r
+        <KEYWORD1>window-system</KEYWORD1>\r
+        <KEYWORD1>with</KEYWORD1>\r
+        <KEYWORD1>word-index</KEYWORD1>\r
+        <KEYWORD1>word-wrap</KEYWORD1>\r
+        <KEYWORD1>work-area-height-pixels</KEYWORD1>\r
+        <KEYWORD1>work-area-width-pixels</KEYWORD1>\r
+        <KEYWORD1>work-area-x</KEYWORD1>\r
+        <KEYWORD1>work-area-y</KEYWORD1>\r
+        <KEYWORD1>work-table</KEYWORD1>\r
+        <KEYWORD1>workfile</KEYWORD1>\r
+        <KEYWORD1>write</KEYWORD1>\r
+        <KEYWORD1>write-data</KEYWORD1>\r
+        <KEYWORD1>x</KEYWORD1>\r
+        <KEYWORD1>x-document</KEYWORD1>\r
+        <KEYWORD1>x-noderef</KEYWORD1>\r
+        <KEYWORD1>x-of</KEYWORD1>\r
+        <KEYWORD1>xcode</KEYWORD1>\r
+        <KEYWORD1>xml-schema-path</KEYWORD1>\r
+        <KEYWORD1>xml-suppress-namespace-processing</KEYWORD1>\r
+        <KEYWORD1>xref</KEYWORD1>\r
+        <KEYWORD1>y</KEYWORD1>\r
+        <KEYWORD1>y-of</KEYWORD1>\r
+        <KEYWORD1>year</KEYWORD1>\r
+        <KEYWORD1>year-offset</KEYWORD1>\r
+        <KEYWORD1>yes</KEYWORD1>\r
+        <KEYWORD1>yes-no</KEYWORD1>\r
+        <KEYWORD1>yes-no-cancel</KEYWORD1>\r
+        <KEYWORD1>_dcm</KEYWORD1>\r
+\r
+      <!-- Some commonly used abbreviations -->\r
+        <!-- And words missing from -zgenkwlist option -->\r
+        <KEYWORD1>accum</KEYWORD1>\r
+        <KEYWORD1>asc</KEYWORD1>\r
+        <KEYWORD1>avail</KEYWORD1>\r
+        <KEYWORD1>button</KEYWORD1>\r
+        <KEYWORD1>char</KEYWORD1>\r
+        <KEYWORD1>column</KEYWORD1>\r
+        <KEYWORD1>dec</KEYWORD1>\r
+        <KEYWORD1>def</KEYWORD1>\r
+        <KEYWORD1>disp</KEYWORD1>\r
+        <KEYWORD1>dict</KEYWORD1>\r
+        <KEYWORD1>dyn-function</KEYWORD1>\r
+        <KEYWORD1>excl</KEYWORD1>\r
+        <KEYWORD1>field</KEYWORD1>\r
+        <KEYWORD1>field-group</KEYWORD1>\r
+        <KEYWORD1>file-info</KEYWORD1>\r
+        <KEYWORD1>form</KEYWORD1>\r
+        <KEYWORD1>forward</KEYWORD1>\r
+        <KEYWORD1>funct</KEYWORD1>\r
+        <KEYWORD1>int</KEYWORD1>\r
+        <KEYWORD1>info</KEYWORD1>\r
+        <KEYWORD1>index-field</KEYWORD1>\r
+        <KEYWORD1>log</KEYWORD1>\r
+        <KEYWORD1>literal</KEYWORD1>\r
+        <KEYWORD1>load-control</KEYWORD1>\r
+        <KEYWORD1>no-label</KEYWORD1>\r
+        <KEYWORD1>prim</KEYWORD1>\r
+        <KEYWORD1>rcode-info</KEYWORD1>\r
+        <KEYWORD1>share</KEYWORD1>\r
+        <KEYWORD1>substr</KEYWORD1>\r
+        <KEYWORD1>var</KEYWORD1>\r
+\r
+\r
+      <!-- KEYWORD2   : VST & metaschema files and fields -->\r
+        <KEYWORD2>_abbreviate</KEYWORD2>\r
+        <KEYWORD2>_account_expires</KEYWORD2>\r
+        <KEYWORD2>_actailog</KEYWORD2>\r
+        <KEYWORD2>_actbilog</KEYWORD2>\r
+        <KEYWORD2>_actbuffer</KEYWORD2>\r
+        <KEYWORD2>_actindex</KEYWORD2>\r
+        <KEYWORD2>_actiofile</KEYWORD2>\r
+        <KEYWORD2>_actiotype</KEYWORD2>\r
+        <KEYWORD2>_active</KEYWORD2>\r
+        <KEYWORD2>_actlock</KEYWORD2>\r
+        <KEYWORD2>_actother</KEYWORD2>\r
+        <KEYWORD2>_actpws</KEYWORD2>\r
+        <KEYWORD2>_actrecord</KEYWORD2>\r
+        <KEYWORD2>_actserver</KEYWORD2>\r
+        <KEYWORD2>_actspace</KEYWORD2>\r
+        <KEYWORD2>_actsummary</KEYWORD2>\r
+        <KEYWORD2>_admin</KEYWORD2>\r
+        <KEYWORD2>_ailog-aiwwrites</KEYWORD2>\r
+        <KEYWORD2>_ailog-bbuffwaits</KEYWORD2>\r
+        <KEYWORD2>_ailog-byteswritn</KEYWORD2>\r
+        <KEYWORD2>_ailog-forcewaits</KEYWORD2>\r
+        <KEYWORD2>_ailog-id</KEYWORD2>\r
+        <KEYWORD2>_ailog-misc</KEYWORD2>\r
+        <KEYWORD2>_ailog-nobufavail</KEYWORD2>\r
+        <KEYWORD2>_ailog-partialwrt</KEYWORD2>\r
+        <KEYWORD2>_ailog-recwriten</KEYWORD2>\r
+        <KEYWORD2>_ailog-totwrites</KEYWORD2>\r
+        <KEYWORD2>_ailog-trans</KEYWORD2>\r
+        <KEYWORD2>_ailog-uptime</KEYWORD2>\r
+        <KEYWORD2>_alt</KEYWORD2>\r
+        <KEYWORD2>_area</KEYWORD2>\r
+        <KEYWORD2>_area-attrib</KEYWORD2>\r
+        <KEYWORD2>_area-block</KEYWORD2>\r
+        <KEYWORD2>_area-blocksize</KEYWORD2>\r
+        <KEYWORD2>_area-clustersize</KEYWORD2>\r
+        <KEYWORD2>_area-extents</KEYWORD2>\r
+        <KEYWORD2>_area-misc</KEYWORD2>\r
+        <KEYWORD2>_area-name</KEYWORD2>\r
+        <KEYWORD2>_area-number</KEYWORD2>\r
+        <KEYWORD2>_area-recbits</KEYWORD2>\r
+        <KEYWORD2>_area-recid</KEYWORD2>\r
+        <KEYWORD2>_area-type</KEYWORD2>\r
+        <KEYWORD2>_area-version</KEYWORD2>\r
+        <KEYWORD2>_areaextent</KEYWORD2>\r
+        <KEYWORD2>_areastatus</KEYWORD2>\r
+        <KEYWORD2>_areastatus-areaname</KEYWORD2>\r
+        <KEYWORD2>_areastatus-areanum</KEYWORD2>\r
+        <KEYWORD2>_areastatus-extents</KEYWORD2>\r
+        <KEYWORD2>_areastatus-freenum</KEYWORD2>\r
+        <KEYWORD2>_areastatus-hiwater</KEYWORD2>\r
+        <KEYWORD2>_areastatus-id</KEYWORD2>\r
+        <KEYWORD2>_areastatus-lastextent</KEYWORD2>\r
+        <KEYWORD2>_areastatus-rmnum</KEYWORD2>\r
+        <KEYWORD2>_areastatus-totblocks</KEYWORD2>\r
+        <KEYWORD2>_argtype</KEYWORD2>\r
+        <KEYWORD2>_ascending</KEYWORD2>\r
+        <KEYWORD2>_attribute</KEYWORD2>\r
+        <KEYWORD2>_attributes1</KEYWORD2>\r
+        <KEYWORD2>_auth-id</KEYWORD2>\r
+        <KEYWORD2>_autoincr</KEYWORD2>\r
+        <KEYWORD2>_base-col</KEYWORD2>\r
+        <KEYWORD2>_base-tables</KEYWORD2>\r
+        <KEYWORD2>_bfstatus-apwq</KEYWORD2>\r
+        <KEYWORD2>_bfstatus-ckpmarked</KEYWORD2>\r
+        <KEYWORD2>_bfstatus-ckpq</KEYWORD2>\r
+        <KEYWORD2>_bfstatus-hashsize</KEYWORD2>\r
+        <KEYWORD2>_bfstatus-id</KEYWORD2>\r
+        <KEYWORD2>_bfstatus-lastckpnum</KEYWORD2>\r
+        <KEYWORD2>_bfstatus-lru</KEYWORD2>\r
+        <KEYWORD2>_bfstatus-misc</KEYWORD2>\r
+        <KEYWORD2>_bfstatus-modbuffs</KEYWORD2>\r
+        <KEYWORD2>_bfstatus-totbufs</KEYWORD2>\r
+        <KEYWORD2>_bfstatus-usedbuffs</KEYWORD2>\r
+        <KEYWORD2>_bilog-bbuffwaits</KEYWORD2>\r
+        <KEYWORD2>_bilog-biwwrites</KEYWORD2>\r
+        <KEYWORD2>_bilog-bytesread</KEYWORD2>\r
+        <KEYWORD2>_bilog-byteswrtn</KEYWORD2>\r
+        <KEYWORD2>_bilog-clstrclose</KEYWORD2>\r
+        <KEYWORD2>_bilog-ebuffwaits</KEYWORD2>\r
+        <KEYWORD2>_bilog-forcewaits</KEYWORD2>\r
+        <KEYWORD2>_bilog-forcewrts</KEYWORD2>\r
+        <KEYWORD2>_bilog-id</KEYWORD2>\r
+        <KEYWORD2>_bilog-misc</KEYWORD2>\r
+        <KEYWORD2>_bilog-partialwrts</KEYWORD2>\r
+        <KEYWORD2>_bilog-recread</KEYWORD2>\r
+        <KEYWORD2>_bilog-recwriten</KEYWORD2>\r
+        <KEYWORD2>_bilog-totalwrts</KEYWORD2>\r
+        <KEYWORD2>_bilog-totreads</KEYWORD2>\r
+        <KEYWORD2>_bilog-trans</KEYWORD2>\r
+        <KEYWORD2>_bilog-uptime</KEYWORD2>\r
+        <KEYWORD2>_block</KEYWORD2>\r
+        <KEYWORD2>_block-area</KEYWORD2>\r
+        <KEYWORD2>_block-bkupctr</KEYWORD2>\r
+        <KEYWORD2>_block-block</KEYWORD2>\r
+        <KEYWORD2>_block-chaintype</KEYWORD2>\r
+        <KEYWORD2>_block-dbkey</KEYWORD2>\r
+        <KEYWORD2>_block-id</KEYWORD2>\r
+        <KEYWORD2>_block-misc</KEYWORD2>\r
+        <KEYWORD2>_block-nextdbkey</KEYWORD2>\r
+        <KEYWORD2>_block-type</KEYWORD2>\r
+        <KEYWORD2>_block-update</KEYWORD2>\r
+        <KEYWORD2>_buffer-apwenq</KEYWORD2>\r
+        <KEYWORD2>_buffer-chkpts</KEYWORD2>\r
+        <KEYWORD2>_buffer-deferred</KEYWORD2>\r
+        <KEYWORD2>_buffer-flushed</KEYWORD2>\r
+        <KEYWORD2>_buffer-id</KEYWORD2>\r
+        <KEYWORD2>_buffer-logicrds</KEYWORD2>\r
+        <KEYWORD2>_buffer-logicwrts</KEYWORD2>\r
+        <KEYWORD2>_buffer-lruskips</KEYWORD2>\r
+        <KEYWORD2>_buffer-lruwrts</KEYWORD2>\r
+        <KEYWORD2>_buffer-marked</KEYWORD2>\r
+        <KEYWORD2>_buffer-misc</KEYWORD2>\r
+        <KEYWORD2>_buffer-osrds</KEYWORD2>\r
+        <KEYWORD2>_buffer-oswrts</KEYWORD2>\r
+        <KEYWORD2>_buffer-trans</KEYWORD2>\r
+        <KEYWORD2>_buffer-uptime</KEYWORD2>\r
+        <KEYWORD2>_buffstatus</KEYWORD2>\r
+        <KEYWORD2>_cache</KEYWORD2>\r
+        <KEYWORD2>_can-create</KEYWORD2>\r
+        <KEYWORD2>_can-delete</KEYWORD2>\r
+        <KEYWORD2>_can-dump</KEYWORD2>\r
+        <KEYWORD2>_can-load</KEYWORD2>\r
+        <KEYWORD2>_can-read</KEYWORD2>\r
+        <KEYWORD2>_can-write</KEYWORD2>\r
+        <KEYWORD2>_casesensitive</KEYWORD2>\r
+        <KEYWORD2>_charset</KEYWORD2>\r
+        <KEYWORD2>_checkpoint</KEYWORD2>\r
+        <KEYWORD2>_checkpoint-apwq</KEYWORD2>\r
+        <KEYWORD2>_checkpoint-cptq</KEYWORD2>\r
+        <KEYWORD2>_checkpoint-dirty</KEYWORD2>\r
+        <KEYWORD2>_checkpoint-flush</KEYWORD2>\r
+        <KEYWORD2>_checkpoint-id</KEYWORD2>\r
+        <KEYWORD2>_checkpoint-len</KEYWORD2>\r
+        <KEYWORD2>_checkpoint-misc</KEYWORD2>\r
+        <KEYWORD2>_checkpoint-scan</KEYWORD2>\r
+        <KEYWORD2>_checkpoint-time</KEYWORD2>\r
+        <KEYWORD2>_chkclause</KEYWORD2>\r
+        <KEYWORD2>_chkseq</KEYWORD2>\r
+        <KEYWORD2>_cnstrname</KEYWORD2>\r
+        <KEYWORD2>_cnstrtype</KEYWORD2>\r
+        <KEYWORD2>_code-feature</KEYWORD2>\r
+        <KEYWORD2>_codefeature-id</KEYWORD2>\r
+        <KEYWORD2>_codefeature-res01</KEYWORD2>\r
+        <KEYWORD2>_codefeature-res02</KEYWORD2>\r
+        <KEYWORD2>_codefeature_name</KEYWORD2>\r
+        <KEYWORD2>_codefeature_required</KEYWORD2>\r
+        <KEYWORD2>_codefeature_supported</KEYWORD2>\r
+        <KEYWORD2>_codepage</KEYWORD2>\r
+        <KEYWORD2>_col</KEYWORD2>\r
+        <KEYWORD2>_col-label</KEYWORD2>\r
+        <KEYWORD2>_col-label-sa</KEYWORD2>\r
+        <KEYWORD2>_col-name</KEYWORD2>\r
+        <KEYWORD2>_colid</KEYWORD2>\r
+        <KEYWORD2>_coll-cp</KEYWORD2>\r
+        <KEYWORD2>_coll-data</KEYWORD2>\r
+        <KEYWORD2>_coll-name</KEYWORD2>\r
+        <KEYWORD2>_coll-segment</KEYWORD2>\r
+        <KEYWORD2>_coll-sequence</KEYWORD2>\r
+        <KEYWORD2>_coll-strength</KEYWORD2>\r
+        <KEYWORD2>_coll-tran-subtype</KEYWORD2>\r
+        <KEYWORD2>_coll-tran-version</KEYWORD2>\r
+        <KEYWORD2>_collation</KEYWORD2>\r
+        <KEYWORD2>_colname</KEYWORD2>\r
+        <KEYWORD2>_colposition</KEYWORD2>\r
+        <KEYWORD2>_connect</KEYWORD2>\r
+        <KEYWORD2>_connect-2phase</KEYWORD2>\r
+        <KEYWORD2>_connect-batch</KEYWORD2>\r
+        <KEYWORD2>_connect-device</KEYWORD2>\r
+        <KEYWORD2>_connect-disconnect</KEYWORD2>\r
+        <KEYWORD2>_connect-id</KEYWORD2>\r
+        <KEYWORD2>_connect-interrupt</KEYWORD2>\r
+        <KEYWORD2>_connect-misc</KEYWORD2>\r
+        <KEYWORD2>_connect-name</KEYWORD2>\r
+        <KEYWORD2>_connect-pid</KEYWORD2>\r
+        <KEYWORD2>_connect-resync</KEYWORD2>\r
+        <KEYWORD2>_connect-semid</KEYWORD2>\r
+        <KEYWORD2>_connect-semnum</KEYWORD2>\r
+        <KEYWORD2>_connect-server</KEYWORD2>\r
+        <KEYWORD2>_connect-time</KEYWORD2>\r
+        <KEYWORD2>_connect-transid</KEYWORD2>\r
+        <KEYWORD2>_connect-type</KEYWORD2>\r
+        <KEYWORD2>_connect-usr</KEYWORD2>\r
+        <KEYWORD2>_connect-wait</KEYWORD2>\r
+        <KEYWORD2>_connect-wait1</KEYWORD2>\r
+        <KEYWORD2>_cp-attr</KEYWORD2>\r
+        <KEYWORD2>_cp-dbrecid</KEYWORD2>\r
+        <KEYWORD2>_cp-name</KEYWORD2>\r
+        <KEYWORD2>_cp-sequence</KEYWORD2>\r
+        <KEYWORD2>_crc</KEYWORD2>\r
+        <KEYWORD2>_create-limit</KEYWORD2>\r
+        <KEYWORD2>_createparams</KEYWORD2>\r
+        <KEYWORD2>_create_date</KEYWORD2>\r
+        <KEYWORD2>_creator</KEYWORD2>\r
+        <KEYWORD2>_cycle-ok</KEYWORD2>\r
+        <KEYWORD2>_data-type</KEYWORD2>\r
+        <KEYWORD2>_database-feature</KEYWORD2>\r
+        <KEYWORD2>_datatype</KEYWORD2>\r
+        <KEYWORD2>_db</KEYWORD2>\r
+        <KEYWORD2>_db-addr</KEYWORD2>\r
+        <KEYWORD2>_db-coll-name</KEYWORD2>\r
+        <KEYWORD2>_db-collate</KEYWORD2>\r
+        <KEYWORD2>_db-comm</KEYWORD2>\r
+        <KEYWORD2>_db-lang</KEYWORD2>\r
+        <KEYWORD2>_db-local</KEYWORD2>\r
+        <KEYWORD2>_db-misc1</KEYWORD2>\r
+        <KEYWORD2>_db-misc2</KEYWORD2>\r
+        <KEYWORD2>_db-name</KEYWORD2>\r
+        <KEYWORD2>_db-recid</KEYWORD2>\r
+        <KEYWORD2>_db-res1</KEYWORD2>\r
+        <KEYWORD2>_db-res2</KEYWORD2>\r
+        <KEYWORD2>_db-revision</KEYWORD2>\r
+        <KEYWORD2>_db-slave</KEYWORD2>\r
+        <KEYWORD2>_db-type</KEYWORD2>\r
+        <KEYWORD2>_db-xl-name</KEYWORD2>\r
+        <KEYWORD2>_db-xlate</KEYWORD2>\r
+        <KEYWORD2>_dbaacc</KEYWORD2>\r
+        <KEYWORD2>_dbfeature-id</KEYWORD2>\r
+        <KEYWORD2>_dbfeature-res01</KEYWORD2>\r
+        <KEYWORD2>_dbfeature-res02</KEYWORD2>\r
+        <KEYWORD2>_dbfeature_active</KEYWORD2>\r
+        <KEYWORD2>_dbfeature_enabled</KEYWORD2>\r
+        <KEYWORD2>_dbfeature_name</KEYWORD2>\r
+        <KEYWORD2>_dblink</KEYWORD2>\r
+        <KEYWORD2>_dbstatus</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-aiblksize</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-biblksize</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-biclsize</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-biopen</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-bisize</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-bitrunc</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-cachestamp</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-changed</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-clversminor</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-codepage</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-collation</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-createdate</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-dbblksize</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-dbvers</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-dbversminor</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-emptyblks</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-fbdate</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-freeblks</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-hiwater</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-ibdate</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-ibseq</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-id</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-integrity</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-intflags</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-lastopen</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-lasttable</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-lasttran</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-misc</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-mostlocks</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-numareas</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-numlocks</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-numsems</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-prevopen</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-rmfreeblks</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-sharedmemver</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-shmvers</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-starttime</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-state</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-tainted</KEYWORD2>\r
+        <KEYWORD2>_dbstatus-totalblks</KEYWORD2>\r
+        <KEYWORD2>_decimals</KEYWORD2>\r
+        <KEYWORD2>_del</KEYWORD2>\r
+        <KEYWORD2>_deleterule</KEYWORD2>\r
+        <KEYWORD2>_desc</KEYWORD2>\r
+        <KEYWORD2>_description</KEYWORD2>\r
+        <KEYWORD2>_dfltvalue</KEYWORD2>\r
+        <KEYWORD2>_dft-pk</KEYWORD2>\r
+        <KEYWORD2>_dhtypename</KEYWORD2>\r
+        <KEYWORD2>_disabled</KEYWORD2>\r
+        <KEYWORD2>_dtype</KEYWORD2>\r
+        <KEYWORD2>_dump-name</KEYWORD2>\r
+        <KEYWORD2>_email</KEYWORD2>\r
+        <KEYWORD2>_event</KEYWORD2>\r
+        <KEYWORD2>_exe</KEYWORD2>\r
+        <KEYWORD2>_extent</KEYWORD2>\r
+        <KEYWORD2>_extent-attrib</KEYWORD2>\r
+        <KEYWORD2>_extent-misc</KEYWORD2>\r
+        <KEYWORD2>_extent-number</KEYWORD2>\r
+        <KEYWORD2>_extent-path</KEYWORD2>\r
+        <KEYWORD2>_extent-size</KEYWORD2>\r
+        <KEYWORD2>_extent-system</KEYWORD2>\r
+        <KEYWORD2>_extent-type</KEYWORD2>\r
+        <KEYWORD2>_extent-version</KEYWORD2>\r
+        <KEYWORD2>_fetch-type</KEYWORD2>\r
+        <KEYWORD2>_field</KEYWORD2>\r
+        <KEYWORD2>_field-map</KEYWORD2>\r
+        <KEYWORD2>_field-name</KEYWORD2>\r
+        <KEYWORD2>_field-physpos</KEYWORD2>\r
+        <KEYWORD2>_field-recid</KEYWORD2>\r
+        <KEYWORD2>_field-rpos</KEYWORD2>\r
+        <KEYWORD2>_field-trig</KEYWORD2>\r
+        <KEYWORD2>_fil-misc1</KEYWORD2>\r
+        <KEYWORD2>_fil-misc2</KEYWORD2>\r
+        <KEYWORD2>_fil-res1</KEYWORD2>\r
+        <KEYWORD2>_fil-res2</KEYWORD2>\r
+        <KEYWORD2>_file</KEYWORD2>\r
+        <KEYWORD2>_file-label</KEYWORD2>\r
+        <KEYWORD2>_file-label-sa</KEYWORD2>\r
+        <KEYWORD2>_file-name</KEYWORD2>\r
+        <KEYWORD2>_file-number</KEYWORD2>\r
+        <KEYWORD2>_file-recid</KEYWORD2>\r
+        <KEYWORD2>_file-trig</KEYWORD2>\r
+        <KEYWORD2>_filelist</KEYWORD2>\r
+        <KEYWORD2>_filelist-blksize</KEYWORD2>\r
+        <KEYWORD2>_filelist-extend</KEYWORD2>\r
+        <KEYWORD2>_filelist-id</KEYWORD2>\r
+        <KEYWORD2>_filelist-logicalsz</KEYWORD2>\r
+        <KEYWORD2>_filelist-misc</KEYWORD2>\r
+        <KEYWORD2>_filelist-name</KEYWORD2>\r
+        <KEYWORD2>_filelist-openmode</KEYWORD2>\r
+        <KEYWORD2>_filelist-size</KEYWORD2>\r
+        <KEYWORD2>_fire_4gl</KEYWORD2>\r
+        <KEYWORD2>_fld</KEYWORD2>\r
+        <KEYWORD2>_fld-case</KEYWORD2>\r
+        <KEYWORD2>_fld-misc1</KEYWORD2>\r
+        <KEYWORD2>_fld-misc2</KEYWORD2>\r
+        <KEYWORD2>_fld-res1</KEYWORD2>\r
+        <KEYWORD2>_fld-res2</KEYWORD2>\r
+        <KEYWORD2>_fld-stdtype</KEYWORD2>\r
+        <KEYWORD2>_fld-stlen</KEYWORD2>\r
+        <KEYWORD2>_fld-stoff</KEYWORD2>\r
+        <KEYWORD2>_for-allocated</KEYWORD2>\r
+        <KEYWORD2>_for-cnt1</KEYWORD2>\r
+        <KEYWORD2>_for-cnt2</KEYWORD2>\r
+        <KEYWORD2>_for-flag</KEYWORD2>\r
+        <KEYWORD2>_for-format</KEYWORD2>\r
+        <KEYWORD2>_for-id</KEYWORD2>\r
+        <KEYWORD2>_for-info</KEYWORD2>\r
+        <KEYWORD2>_for-itype</KEYWORD2>\r
+        <KEYWORD2>_for-maxsize</KEYWORD2>\r
+        <KEYWORD2>_for-name</KEYWORD2>\r
+        <KEYWORD2>_for-number</KEYWORD2>\r
+        <KEYWORD2>_for-owner</KEYWORD2>\r
+        <KEYWORD2>_for-primary</KEYWORD2>\r
+        <KEYWORD2>_for-retrieve</KEYWORD2>\r
+        <KEYWORD2>_for-scale</KEYWORD2>\r
+        <KEYWORD2>_for-separator</KEYWORD2>\r
+        <KEYWORD2>_for-size</KEYWORD2>\r
+        <KEYWORD2>_for-spacing</KEYWORD2>\r
+        <KEYWORD2>_for-type</KEYWORD2>\r
+        <KEYWORD2>_for-xpos</KEYWORD2>\r
+        <KEYWORD2>_format</KEYWORD2>\r
+        <KEYWORD2>_format-sa</KEYWORD2>\r
+        <KEYWORD2>_frozen</KEYWORD2>\r
+        <KEYWORD2>_given_name</KEYWORD2>\r
+        <KEYWORD2>_grantee</KEYWORD2>\r
+        <KEYWORD2>_grantor</KEYWORD2>\r
+        <KEYWORD2>_group-by</KEYWORD2>\r
+        <KEYWORD2>_group_number</KEYWORD2>\r
+        <KEYWORD2>_has-ccnstrs</KEYWORD2>\r
+        <KEYWORD2>_has-fcnstrs</KEYWORD2>\r
+        <KEYWORD2>_has-pcnstrs</KEYWORD2>\r
+        <KEYWORD2>_has-ucnstrs</KEYWORD2>\r
+        <KEYWORD2>_hasresultset</KEYWORD2>\r
+        <KEYWORD2>_hasreturnval</KEYWORD2>\r
+        <KEYWORD2>_help</KEYWORD2>\r
+        <KEYWORD2>_help-sa</KEYWORD2>\r
+        <KEYWORD2>_hidden</KEYWORD2>\r
+        <KEYWORD2>_host</KEYWORD2>\r
+        <KEYWORD2>_i-misc1</KEYWORD2>\r
+        <KEYWORD2>_i-misc2</KEYWORD2>\r
+        <KEYWORD2>_i-res1</KEYWORD2>\r
+        <KEYWORD2>_i-res2</KEYWORD2>\r
+        <KEYWORD2>_ianum</KEYWORD2>\r
+        <KEYWORD2>_id</KEYWORD2>\r
+        <KEYWORD2>_idx-crc</KEYWORD2>\r
+        <KEYWORD2>_idx-num</KEYWORD2>\r
+        <KEYWORD2>_idxid</KEYWORD2>\r
+        <KEYWORD2>_idxmethod</KEYWORD2>\r
+        <KEYWORD2>_idxname</KEYWORD2>\r
+        <KEYWORD2>_idxowner</KEYWORD2>\r
+        <KEYWORD2>_if-misc1</KEYWORD2>\r
+        <KEYWORD2>_if-misc2</KEYWORD2>\r
+        <KEYWORD2>_if-res1</KEYWORD2>\r
+        <KEYWORD2>_if-res2</KEYWORD2>\r
+        <KEYWORD2>_index</KEYWORD2>\r
+        <KEYWORD2>_index-create</KEYWORD2>\r
+        <KEYWORD2>_index-delete</KEYWORD2>\r
+        <KEYWORD2>_index-field</KEYWORD2>\r
+        <KEYWORD2>_index-find</KEYWORD2>\r
+        <KEYWORD2>_index-free</KEYWORD2>\r
+        <KEYWORD2>_index-id</KEYWORD2>\r
+        <KEYWORD2>_index-misc</KEYWORD2>\r
+        <KEYWORD2>_index-name</KEYWORD2>\r
+        <KEYWORD2>_index-recid</KEYWORD2>\r
+        <KEYWORD2>_index-remove</KEYWORD2>\r
+        <KEYWORD2>_index-seq</KEYWORD2>\r
+        <KEYWORD2>_index-splits</KEYWORD2>\r
+        <KEYWORD2>_index-trans</KEYWORD2>\r
+        <KEYWORD2>_index-uptime</KEYWORD2>\r
+        <KEYWORD2>_indexbase</KEYWORD2>\r
+        <KEYWORD2>_indexstat</KEYWORD2>\r
+        <KEYWORD2>_indexstat-blockdelete</KEYWORD2>\r
+        <KEYWORD2>_indexstat-create</KEYWORD2>\r
+        <KEYWORD2>_indexstat-delete</KEYWORD2>\r
+        <KEYWORD2>_indexstat-id</KEYWORD2>\r
+        <KEYWORD2>_indexstat-read</KEYWORD2>\r
+        <KEYWORD2>_indexstat-split</KEYWORD2>\r
+        <KEYWORD2>_initial</KEYWORD2>\r
+        <KEYWORD2>_initial-sa</KEYWORD2>\r
+        <KEYWORD2>_ins</KEYWORD2>\r
+        <KEYWORD2>_iofile-bufreads</KEYWORD2>\r
+        <KEYWORD2>_iofile-bufwrites</KEYWORD2>\r
+        <KEYWORD2>_iofile-extends</KEYWORD2>\r
+        <KEYWORD2>_iofile-filename</KEYWORD2>\r
+        <KEYWORD2>_iofile-id</KEYWORD2>\r
+        <KEYWORD2>_iofile-misc</KEYWORD2>\r
+        <KEYWORD2>_iofile-reads</KEYWORD2>\r
+        <KEYWORD2>_iofile-trans</KEYWORD2>\r
+        <KEYWORD2>_iofile-ubufreads</KEYWORD2>\r
+        <KEYWORD2>_iofile-ubufwrites</KEYWORD2>\r
+        <KEYWORD2>_iofile-uptime</KEYWORD2>\r
+        <KEYWORD2>_iofile-writes</KEYWORD2>\r
+        <KEYWORD2>_iotype-airds</KEYWORD2>\r
+        <KEYWORD2>_iotype-aiwrts</KEYWORD2>\r
+        <KEYWORD2>_iotype-birds</KEYWORD2>\r
+        <KEYWORD2>_iotype-biwrts</KEYWORD2>\r
+        <KEYWORD2>_iotype-datareads</KEYWORD2>\r
+        <KEYWORD2>_iotype-datawrts</KEYWORD2>\r
+        <KEYWORD2>_iotype-id</KEYWORD2>\r
+        <KEYWORD2>_iotype-idxrds</KEYWORD2>\r
+        <KEYWORD2>_iotype-idxwrts</KEYWORD2>\r
+        <KEYWORD2>_iotype-misc</KEYWORD2>\r
+        <KEYWORD2>_iotype-trans</KEYWORD2>\r
+        <KEYWORD2>_iotype-uptime</KEYWORD2>\r
+        <KEYWORD2>_ispublic</KEYWORD2>\r
+        <KEYWORD2>_keyvalue-expr</KEYWORD2>\r
+        <KEYWORD2>_label</KEYWORD2>\r
+        <KEYWORD2>_label-sa</KEYWORD2>\r
+        <KEYWORD2>_lang</KEYWORD2>\r
+        <KEYWORD2>_last-change</KEYWORD2>\r
+        <KEYWORD2>_last-modified</KEYWORD2>\r
+        <KEYWORD2>_last_login</KEYWORD2>\r
+        <KEYWORD2>_latch</KEYWORD2>\r
+        <KEYWORD2>_latch-busy</KEYWORD2>\r
+        <KEYWORD2>_latch-hold</KEYWORD2>\r
+        <KEYWORD2>_latch-id</KEYWORD2>\r
+        <KEYWORD2>_latch-lock</KEYWORD2>\r
+        <KEYWORD2>_latch-lockedt</KEYWORD2>\r
+        <KEYWORD2>_latch-lockt</KEYWORD2>\r
+        <KEYWORD2>_latch-name</KEYWORD2>\r
+        <KEYWORD2>_latch-qhold</KEYWORD2>\r
+        <KEYWORD2>_latch-spin</KEYWORD2>\r
+        <KEYWORD2>_latch-type</KEYWORD2>\r
+        <KEYWORD2>_latch-wait</KEYWORD2>\r
+        <KEYWORD2>_latch-waitt</KEYWORD2>\r
+        <KEYWORD2>_lic-activeconns</KEYWORD2>\r
+        <KEYWORD2>_lic-batchconns</KEYWORD2>\r
+        <KEYWORD2>_lic-currconns</KEYWORD2>\r
+        <KEYWORD2>_lic-id</KEYWORD2>\r
+        <KEYWORD2>_lic-maxactive</KEYWORD2>\r
+        <KEYWORD2>_lic-maxbatch</KEYWORD2>\r
+        <KEYWORD2>_lic-maxcurrent</KEYWORD2>\r
+        <KEYWORD2>_lic-minactive</KEYWORD2>\r
+        <KEYWORD2>_lic-minbatch</KEYWORD2>\r
+        <KEYWORD2>_lic-mincurrent</KEYWORD2>\r
+        <KEYWORD2>_lic-validusers</KEYWORD2>\r
+        <KEYWORD2>_license</KEYWORD2>\r
+        <KEYWORD2>_linkowner</KEYWORD2>\r
+        <KEYWORD2>_literalprefix</KEYWORD2>\r
+        <KEYWORD2>_literalsuffix</KEYWORD2>\r
+        <KEYWORD2>_localtypename</KEYWORD2>\r
+        <KEYWORD2>_lock</KEYWORD2>\r
+        <KEYWORD2>_lock-canclreq</KEYWORD2>\r
+        <KEYWORD2>_lock-chain</KEYWORD2>\r
+        <KEYWORD2>_lock-downgrade</KEYWORD2>\r
+        <KEYWORD2>_lock-exclfind</KEYWORD2>\r
+        <KEYWORD2>_lock-excllock</KEYWORD2>\r
+        <KEYWORD2>_lock-exclreq</KEYWORD2>\r
+        <KEYWORD2>_lock-exclwait</KEYWORD2>\r
+        <KEYWORD2>_lock-flags</KEYWORD2>\r
+        <KEYWORD2>_lock-id</KEYWORD2>\r
+        <KEYWORD2>_lock-misc</KEYWORD2>\r
+        <KEYWORD2>_lock-name</KEYWORD2>\r
+        <KEYWORD2>_lock-recgetlock</KEYWORD2>\r
+        <KEYWORD2>_lock-recgetreq</KEYWORD2>\r
+        <KEYWORD2>_lock-recgetwait</KEYWORD2>\r
+        <KEYWORD2>_lock-recid</KEYWORD2>\r
+        <KEYWORD2>_lock-redreq</KEYWORD2>\r
+        <KEYWORD2>_lock-shrfind</KEYWORD2>\r
+        <KEYWORD2>_lock-shrlock</KEYWORD2>\r
+        <KEYWORD2>_lock-shrreq</KEYWORD2>\r
+        <KEYWORD2>_lock-shrwait</KEYWORD2>\r
+        <KEYWORD2>_lock-table</KEYWORD2>\r
+        <KEYWORD2>_lock-trans</KEYWORD2>\r
+        <KEYWORD2>_lock-type</KEYWORD2>\r
+        <KEYWORD2>_lock-upglock</KEYWORD2>\r
+        <KEYWORD2>_lock-upgreq</KEYWORD2>\r
+        <KEYWORD2>_lock-upgwait</KEYWORD2>\r
+        <KEYWORD2>_lock-uptime</KEYWORD2>\r
+        <KEYWORD2>_lock-usr</KEYWORD2>\r
+        <KEYWORD2>_lockreq</KEYWORD2>\r
+        <KEYWORD2>_lockreq-exclfind</KEYWORD2>\r
+        <KEYWORD2>_lockreq-id</KEYWORD2>\r
+        <KEYWORD2>_lockreq-misc</KEYWORD2>\r
+        <KEYWORD2>_lockreq-name</KEYWORD2>\r
+        <KEYWORD2>_lockreq-num</KEYWORD2>\r
+        <KEYWORD2>_lockreq-reclock</KEYWORD2>\r
+        <KEYWORD2>_lockreq-recwait</KEYWORD2>\r
+        <KEYWORD2>_lockreq-schlock</KEYWORD2>\r
+        <KEYWORD2>_lockreq-schwait</KEYWORD2>\r
+        <KEYWORD2>_lockreq-shrfind</KEYWORD2>\r
+        <KEYWORD2>_lockreq-trnlock</KEYWORD2>\r
+        <KEYWORD2>_lockreq-trnwait</KEYWORD2>\r
+        <KEYWORD2>_logging</KEYWORD2>\r
+        <KEYWORD2>_logging-2pc</KEYWORD2>\r
+        <KEYWORD2>_logging-2pcnickname</KEYWORD2>\r
+        <KEYWORD2>_logging-2pcpriority</KEYWORD2>\r
+        <KEYWORD2>_logging-aibegin</KEYWORD2>\r
+        <KEYWORD2>_logging-aiblksize</KEYWORD2>\r
+        <KEYWORD2>_logging-aibuffs</KEYWORD2>\r
+        <KEYWORD2>_logging-aicurrext</KEYWORD2>\r
+        <KEYWORD2>_logging-aiextents</KEYWORD2>\r
+        <KEYWORD2>_logging-aigennum</KEYWORD2>\r
+        <KEYWORD2>_logging-aiio</KEYWORD2>\r
+        <KEYWORD2>_logging-aijournal</KEYWORD2>\r
+        <KEYWORD2>_logging-ailogsize</KEYWORD2>\r
+        <KEYWORD2>_logging-ainew</KEYWORD2>\r
+        <KEYWORD2>_logging-aiopen</KEYWORD2>\r
+        <KEYWORD2>_logging-biblksize</KEYWORD2>\r
+        <KEYWORD2>_logging-bibuffs</KEYWORD2>\r
+        <KEYWORD2>_logging-bibytesfree</KEYWORD2>\r
+        <KEYWORD2>_logging-biclage</KEYWORD2>\r
+        <KEYWORD2>_logging-biclsize</KEYWORD2>\r
+        <KEYWORD2>_logging-biextents</KEYWORD2>\r
+        <KEYWORD2>_logging-bifullbuffs</KEYWORD2>\r
+        <KEYWORD2>_logging-biio</KEYWORD2>\r
+        <KEYWORD2>_logging-bilogsize</KEYWORD2>\r
+        <KEYWORD2>_logging-commitdelay</KEYWORD2>\r
+        <KEYWORD2>_logging-crashprot</KEYWORD2>\r
+        <KEYWORD2>_logging-id</KEYWORD2>\r
+        <KEYWORD2>_logging-lastckp</KEYWORD2>\r
+        <KEYWORD2>_logging-misc</KEYWORD2>\r
+        <KEYWORD2>_logins</KEYWORD2>\r
+        <KEYWORD2>_login_failures</KEYWORD2>\r
+        <KEYWORD2>_mandatory</KEYWORD2>\r
+        <KEYWORD2>_max_logins</KEYWORD2>\r
+        <KEYWORD2>_max_tries</KEYWORD2>\r
+        <KEYWORD2>_middle_initial</KEYWORD2>\r
+        <KEYWORD2>_mod-sequence</KEYWORD2>\r
+        <KEYWORD2>_mode</KEYWORD2>\r
+        <KEYWORD2>_mstrblk</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-aiblksize</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-biblksize</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-biopen</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-biprev</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-bistate</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-cfilnum</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-crdate</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-dbstate</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-dbvers</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-fbdate</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-hiwater</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-ibdate</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-ibseq</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-id</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-integrity</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-lasttask</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-misc</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-oppdate</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-oprdate</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-rlclsize</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-rltime</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-tainted</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-timestamp</KEYWORD2>\r
+        <KEYWORD2>_mstrblk-totblks</KEYWORD2>\r
+        <KEYWORD2>_myconn-id</KEYWORD2>\r
+        <KEYWORD2>_myconn-numseqbuffers</KEYWORD2>\r
+        <KEYWORD2>_myconn-pid</KEYWORD2>\r
+        <KEYWORD2>_myconn-usedseqbuffers</KEYWORD2>\r
+        <KEYWORD2>_myconn-userid</KEYWORD2>\r
+        <KEYWORD2>_myconnection</KEYWORD2>\r
+        <KEYWORD2>_name_loc</KEYWORD2>\r
+        <KEYWORD2>_ndx</KEYWORD2>\r
+        <KEYWORD2>_nullable</KEYWORD2>\r
+        <KEYWORD2>_nullflag</KEYWORD2>\r
+        <KEYWORD2>_num-comp</KEYWORD2>\r
+        <KEYWORD2>_numfld</KEYWORD2>\r
+        <KEYWORD2>_numkcomp</KEYWORD2>\r
+        <KEYWORD2>_numkey</KEYWORD2>\r
+        <KEYWORD2>_numkfld</KEYWORD2>\r
+        <KEYWORD2>_object-associate</KEYWORD2>\r
+        <KEYWORD2>_object-associate-type</KEYWORD2>\r
+        <KEYWORD2>_object-attrib</KEYWORD2>\r
+        <KEYWORD2>_object-block</KEYWORD2>\r
+        <KEYWORD2>_object-misc</KEYWORD2>\r
+        <KEYWORD2>_object-number</KEYWORD2>\r
+        <KEYWORD2>_object-root</KEYWORD2>\r
+        <KEYWORD2>_object-system</KEYWORD2>\r
+        <KEYWORD2>_object-type</KEYWORD2>\r
+        <KEYWORD2>_odbcmoney</KEYWORD2>\r
+        <KEYWORD2>_order</KEYWORD2>\r
+        <KEYWORD2>_other-commit</KEYWORD2>\r
+        <KEYWORD2>_other-flushmblk</KEYWORD2>\r
+        <KEYWORD2>_other-id</KEYWORD2>\r
+        <KEYWORD2>_other-misc</KEYWORD2>\r
+        <KEYWORD2>_other-trans</KEYWORD2>\r
+        <KEYWORD2>_other-undo</KEYWORD2>\r
+        <KEYWORD2>_other-uptime</KEYWORD2>\r
+        <KEYWORD2>_other-wait</KEYWORD2>\r
+        <KEYWORD2>_override</KEYWORD2>\r
+        <KEYWORD2>_owner</KEYWORD2>\r
+        <KEYWORD2>_password</KEYWORD2>\r
+        <KEYWORD2>_prime-index</KEYWORD2>\r
+        <KEYWORD2>_proc-name</KEYWORD2>\r
+        <KEYWORD2>_procbin</KEYWORD2>\r
+        <KEYWORD2>_procid</KEYWORD2>\r
+        <KEYWORD2>_procname</KEYWORD2>\r
+        <KEYWORD2>_proctext</KEYWORD2>\r
+        <KEYWORD2>_proctype</KEYWORD2>\r
+        <KEYWORD2>_property</KEYWORD2>\r
+        <KEYWORD2>_pw-apwqwrites</KEYWORD2>\r
+        <KEYWORD2>_pw-buffsscaned</KEYWORD2>\r
+        <KEYWORD2>_pw-bufsckp</KEYWORD2>\r
+        <KEYWORD2>_pw-checkpoints</KEYWORD2>\r
+        <KEYWORD2>_pw-ckpqwrites</KEYWORD2>\r
+        <KEYWORD2>_pw-dbwrites</KEYWORD2>\r
+        <KEYWORD2>_pw-flushed</KEYWORD2>\r
+        <KEYWORD2>_pw-id</KEYWORD2>\r
+        <KEYWORD2>_pw-marked</KEYWORD2>\r
+        <KEYWORD2>_pw-misc</KEYWORD2>\r
+        <KEYWORD2>_pw-scancycles</KEYWORD2>\r
+        <KEYWORD2>_pw-scanwrites</KEYWORD2>\r
+        <KEYWORD2>_pw-totdbwrites</KEYWORD2>\r
+        <KEYWORD2>_pw-trans</KEYWORD2>\r
+        <KEYWORD2>_pw-uptime</KEYWORD2>\r
+        <KEYWORD2>_pwd</KEYWORD2>\r
+        <KEYWORD2>_pwd_duration</KEYWORD2>\r
+        <KEYWORD2>_pwd_expires</KEYWORD2>\r
+        <KEYWORD2>_record-bytescreat</KEYWORD2>\r
+        <KEYWORD2>_record-bytesdel</KEYWORD2>\r
+        <KEYWORD2>_record-bytesread</KEYWORD2>\r
+        <KEYWORD2>_record-bytesupd</KEYWORD2>\r
+        <KEYWORD2>_record-fragcreat</KEYWORD2>\r
+        <KEYWORD2>_record-fragdel</KEYWORD2>\r
+        <KEYWORD2>_record-fragread</KEYWORD2>\r
+        <KEYWORD2>_record-fragupd</KEYWORD2>\r
+        <KEYWORD2>_record-id</KEYWORD2>\r
+        <KEYWORD2>_record-misc</KEYWORD2>\r
+        <KEYWORD2>_record-reccreat</KEYWORD2>\r
+        <KEYWORD2>_record-recdel</KEYWORD2>\r
+        <KEYWORD2>_record-recread</KEYWORD2>\r
+        <KEYWORD2>_record-recupd</KEYWORD2>\r
+        <KEYWORD2>_record-trans</KEYWORD2>\r
+        <KEYWORD2>_record-uptime</KEYWORD2>\r
+        <KEYWORD2>_ref</KEYWORD2>\r
+        <KEYWORD2>_ref-table</KEYWORD2>\r
+        <KEYWORD2>_refcnstrname</KEYWORD2>\r
+        <KEYWORD2>_referstonew</KEYWORD2>\r
+        <KEYWORD2>_referstoold</KEYWORD2>\r
+        <KEYWORD2>_refowner</KEYWORD2>\r
+        <KEYWORD2>_reftblname</KEYWORD2>\r
+        <KEYWORD2>_remowner</KEYWORD2>\r
+        <KEYWORD2>_remtbl</KEYWORD2>\r
+        <KEYWORD2>_repl-agent</KEYWORD2>\r
+        <KEYWORD2>_repl-agentcontrol</KEYWORD2>\r
+        <KEYWORD2>_repl-server</KEYWORD2>\r
+        <KEYWORD2>_replagt-agentid</KEYWORD2>\r
+        <KEYWORD2>_replagt-agentname</KEYWORD2>\r
+        <KEYWORD2>_replagt-blocksack</KEYWORD2>\r
+        <KEYWORD2>_replagt-blocksprocessed</KEYWORD2>\r
+        <KEYWORD2>_replagt-blocksreceived</KEYWORD2>\r
+        <KEYWORD2>_replagt-commstatus</KEYWORD2>\r
+        <KEYWORD2>_replagt-connecttime</KEYWORD2>\r
+        <KEYWORD2>_replagt-dbname</KEYWORD2>\r
+        <KEYWORD2>_replagt-lasttrid</KEYWORD2>\r
+        <KEYWORD2>_replagt-method</KEYWORD2>\r
+        <KEYWORD2>_replagt-notesprocessed</KEYWORD2>\r
+        <KEYWORD2>_replagt-port</KEYWORD2>\r
+        <KEYWORD2>_replagt-reservedchar</KEYWORD2>\r
+        <KEYWORD2>_replagt-reservedint</KEYWORD2>\r
+        <KEYWORD2>_replagt-serverhost</KEYWORD2>\r
+        <KEYWORD2>_replagt-status</KEYWORD2>\r
+        <KEYWORD2>_replagtctl-agentid</KEYWORD2>\r
+        <KEYWORD2>_replagtctl-agentname</KEYWORD2>\r
+        <KEYWORD2>_replagtctl-blocksack</KEYWORD2>\r
+        <KEYWORD2>_replagtctl-blockssent</KEYWORD2>\r
+        <KEYWORD2>_replagtctl-commstatus</KEYWORD2>\r
+        <KEYWORD2>_replagtctl-connecttime</KEYWORD2>\r
+        <KEYWORD2>_replagtctl-lastblocksentat</KEYWORD2>\r
+        <KEYWORD2>_replagtctl-method</KEYWORD2>\r
+        <KEYWORD2>_replagtctl-port</KEYWORD2>\r
+        <KEYWORD2>_replagtctl-remotedbname</KEYWORD2>\r
+        <KEYWORD2>_replagtctl-remotehost</KEYWORD2>\r
+        <KEYWORD2>_replagtctl-reservedchar</KEYWORD2>\r
+        <KEYWORD2>_replagtctl-reservedint</KEYWORD2>\r
+        <KEYWORD2>_replagtctl-status</KEYWORD2>\r
+        <KEYWORD2>_replsrv-agentcount</KEYWORD2>\r
+        <KEYWORD2>_replsrv-blockssent</KEYWORD2>\r
+        <KEYWORD2>_replsrv-id</KEYWORD2>\r
+        <KEYWORD2>_replsrv-lastblocksentat</KEYWORD2>\r
+        <KEYWORD2>_replsrv-reservedchar</KEYWORD2>\r
+        <KEYWORD2>_replsrv-reservedint</KEYWORD2>\r
+        <KEYWORD2>_replsrv-starttime</KEYWORD2>\r
+        <KEYWORD2>_resacc</KEYWORD2>\r
+        <KEYWORD2>_resrc</KEYWORD2>\r
+        <KEYWORD2>_resrc-id</KEYWORD2>\r
+        <KEYWORD2>_resrc-lock</KEYWORD2>\r
+        <KEYWORD2>_resrc-name</KEYWORD2>\r
+        <KEYWORD2>_resrc-time</KEYWORD2>\r
+        <KEYWORD2>_resrc-wait</KEYWORD2>\r
+        <KEYWORD2>_rolename</KEYWORD2>\r
+        <KEYWORD2>_rssid</KEYWORD2>\r
+        <KEYWORD2>_scale</KEYWORD2>\r
+        <KEYWORD2>_schemaname</KEYWORD2>\r
+        <KEYWORD2>_screator</KEYWORD2>\r
+        <KEYWORD2>_searchable</KEYWORD2>\r
+        <KEYWORD2>_segment-bytefree</KEYWORD2>\r
+        <KEYWORD2>_segment-bytesused</KEYWORD2>\r
+        <KEYWORD2>_segment-id</KEYWORD2>\r
+        <KEYWORD2>_segment-misc</KEYWORD2>\r
+        <KEYWORD2>_segment-segid</KEYWORD2>\r
+        <KEYWORD2>_segment-segsize</KEYWORD2>\r
+        <KEYWORD2>_segments</KEYWORD2>\r
+        <KEYWORD2>_sel</KEYWORD2>\r
+        <KEYWORD2>_seq</KEYWORD2>\r
+        <KEYWORD2>_seq-incr</KEYWORD2>\r
+        <KEYWORD2>_seq-init</KEYWORD2>\r
+        <KEYWORD2>_seq-max</KEYWORD2>\r
+        <KEYWORD2>_seq-min</KEYWORD2>\r
+        <KEYWORD2>_seq-misc</KEYWORD2>\r
+        <KEYWORD2>_seq-name</KEYWORD2>\r
+        <KEYWORD2>_seq-num</KEYWORD2>\r
+        <KEYWORD2>_seq-owner</KEYWORD2>\r
+        <KEYWORD2>_sequence</KEYWORD2>\r
+        <KEYWORD2>_server-byterec</KEYWORD2>\r
+        <KEYWORD2>_server-bytesent</KEYWORD2>\r
+        <KEYWORD2>_server-currusers</KEYWORD2>\r
+        <KEYWORD2>_server-id</KEYWORD2>\r
+        <KEYWORD2>_server-logins</KEYWORD2>\r
+        <KEYWORD2>_server-maxusers</KEYWORD2>\r
+        <KEYWORD2>_server-misc</KEYWORD2>\r
+        <KEYWORD2>_server-msgrec</KEYWORD2>\r
+        <KEYWORD2>_server-msgsent</KEYWORD2>\r
+        <KEYWORD2>_server-num</KEYWORD2>\r
+        <KEYWORD2>_server-pendconn</KEYWORD2>\r
+        <KEYWORD2>_server-pid</KEYWORD2>\r
+        <KEYWORD2>_server-portnum</KEYWORD2>\r
+        <KEYWORD2>_server-protocol</KEYWORD2>\r
+        <KEYWORD2>_server-qryrec</KEYWORD2>\r
+        <KEYWORD2>_server-recrec</KEYWORD2>\r
+        <KEYWORD2>_server-recsent</KEYWORD2>\r
+        <KEYWORD2>_server-timeslice</KEYWORD2>\r
+        <KEYWORD2>_server-trans</KEYWORD2>\r
+        <KEYWORD2>_server-type</KEYWORD2>\r
+        <KEYWORD2>_server-uptime</KEYWORD2>\r
+        <KEYWORD2>_servers</KEYWORD2>\r
+        <KEYWORD2>_sname</KEYWORD2>\r
+        <KEYWORD2>_sowner</KEYWORD2>\r
+        <KEYWORD2>_space-allocnewrm</KEYWORD2>\r
+        <KEYWORD2>_space-backadd</KEYWORD2>\r
+        <KEYWORD2>_space-bytesalloc</KEYWORD2>\r
+        <KEYWORD2>_space-dbexd</KEYWORD2>\r
+        <KEYWORD2>_space-examined</KEYWORD2>\r
+        <KEYWORD2>_space-fromfree</KEYWORD2>\r
+        <KEYWORD2>_space-fromrm</KEYWORD2>\r
+        <KEYWORD2>_space-front2back</KEYWORD2>\r
+        <KEYWORD2>_space-frontadd</KEYWORD2>\r
+        <KEYWORD2>_space-id</KEYWORD2>\r
+        <KEYWORD2>_space-locked</KEYWORD2>\r
+        <KEYWORD2>_space-misc</KEYWORD2>\r
+        <KEYWORD2>_space-removed</KEYWORD2>\r
+        <KEYWORD2>_space-retfree</KEYWORD2>\r
+        <KEYWORD2>_space-takefree</KEYWORD2>\r
+        <KEYWORD2>_space-trans</KEYWORD2>\r
+        <KEYWORD2>_space-uptime</KEYWORD2>\r
+        <KEYWORD2>_spare1</KEYWORD2>\r
+        <KEYWORD2>_spare2</KEYWORD2>\r
+        <KEYWORD2>_spare3</KEYWORD2>\r
+        <KEYWORD2>_spare4</KEYWORD2>\r
+        <KEYWORD2>_sql_properties</KEYWORD2>\r
+        <KEYWORD2>_sremdb</KEYWORD2>\r
+        <KEYWORD2>_startup</KEYWORD2>\r
+        <KEYWORD2>_startup-aibuffs</KEYWORD2>\r
+        <KEYWORD2>_startup-ainame</KEYWORD2>\r
+        <KEYWORD2>_startup-apwbuffs</KEYWORD2>\r
+        <KEYWORD2>_startup-apwmaxwrites</KEYWORD2>\r
+        <KEYWORD2>_startup-apwqtime</KEYWORD2>\r
+        <KEYWORD2>_startup-apwstime</KEYWORD2>\r
+        <KEYWORD2>_startup-bibuffs</KEYWORD2>\r
+        <KEYWORD2>_startup-bidelay</KEYWORD2>\r
+        <KEYWORD2>_startup-biio</KEYWORD2>\r
+        <KEYWORD2>_startup-biname</KEYWORD2>\r
+        <KEYWORD2>_startup-bitrunc</KEYWORD2>\r
+        <KEYWORD2>_startup-buffs</KEYWORD2>\r
+        <KEYWORD2>_startup-crashprot</KEYWORD2>\r
+        <KEYWORD2>_startup-directio</KEYWORD2>\r
+        <KEYWORD2>_startup-id</KEYWORD2>\r
+        <KEYWORD2>_startup-locktable</KEYWORD2>\r
+        <KEYWORD2>_startup-maxclients</KEYWORD2>\r
+        <KEYWORD2>_startup-maxservers</KEYWORD2>\r
+        <KEYWORD2>_startup-maxusers</KEYWORD2>\r
+        <KEYWORD2>_startup-misc</KEYWORD2>\r
+        <KEYWORD2>_startup-spin</KEYWORD2>\r
+        <KEYWORD2>_statbase</KEYWORD2>\r
+        <KEYWORD2>_statbase-id</KEYWORD2>\r
+        <KEYWORD2>_statementorrow</KEYWORD2>\r
+        <KEYWORD2>_stbl</KEYWORD2>\r
+        <KEYWORD2>_stblowner</KEYWORD2>\r
+        <KEYWORD2>_storageobject</KEYWORD2>\r
+        <KEYWORD2>_summary-aiwrites</KEYWORD2>\r
+        <KEYWORD2>_summary-bireads</KEYWORD2>\r
+        <KEYWORD2>_summary-biwrites</KEYWORD2>\r
+        <KEYWORD2>_summary-chkpts</KEYWORD2>\r
+        <KEYWORD2>_summary-commits</KEYWORD2>\r
+        <KEYWORD2>_summary-dbaccesses</KEYWORD2>\r
+        <KEYWORD2>_summary-dbreads</KEYWORD2>\r
+        <KEYWORD2>_summary-dbwrites</KEYWORD2>\r
+        <KEYWORD2>_summary-flushed</KEYWORD2>\r
+        <KEYWORD2>_summary-id</KEYWORD2>\r
+        <KEYWORD2>_summary-misc</KEYWORD2>\r
+        <KEYWORD2>_summary-reccreat</KEYWORD2>\r
+        <KEYWORD2>_summary-recdel</KEYWORD2>\r
+        <KEYWORD2>_summary-reclock</KEYWORD2>\r
+        <KEYWORD2>_summary-recreads</KEYWORD2>\r
+        <KEYWORD2>_summary-recupd</KEYWORD2>\r
+        <KEYWORD2>_summary-recwait</KEYWORD2>\r
+        <KEYWORD2>_summary-transcomm</KEYWORD2>\r
+        <KEYWORD2>_summary-undos</KEYWORD2>\r
+        <KEYWORD2>_summary-uptime</KEYWORD2>\r
+        <KEYWORD2>_surname</KEYWORD2>\r
+        <KEYWORD2>_sys-field</KEYWORD2>\r
+        <KEYWORD2>_sysattachtbls</KEYWORD2>\r
+        <KEYWORD2>_sysbigintstat</KEYWORD2>\r
+        <KEYWORD2>_syscalctable</KEYWORD2>\r
+        <KEYWORD2>_syscharstat</KEYWORD2>\r
+        <KEYWORD2>_syschkcolusage</KEYWORD2>\r
+        <KEYWORD2>_syschkconstrs</KEYWORD2>\r
+        <KEYWORD2>_syschkconstr_name_map</KEYWORD2>\r
+        <KEYWORD2>_syscolauth</KEYWORD2>\r
+        <KEYWORD2>_syscolstat</KEYWORD2>\r
+        <KEYWORD2>_sysdatatypes</KEYWORD2>\r
+        <KEYWORD2>_sysdatestat</KEYWORD2>\r
+        <KEYWORD2>_sysdbauth</KEYWORD2>\r
+        <KEYWORD2>_sysdblinks</KEYWORD2>\r
+        <KEYWORD2>_sysfloatstat</KEYWORD2>\r
+        <KEYWORD2>_sysidxstat</KEYWORD2>\r
+        <KEYWORD2>_sysintstat</KEYWORD2>\r
+        <KEYWORD2>_syskeycolusage</KEYWORD2>\r
+        <KEYWORD2>_sysncharstat</KEYWORD2>\r
+        <KEYWORD2>_sysnumstat</KEYWORD2>\r
+        <KEYWORD2>_sysnvarcharstat</KEYWORD2>\r
+        <KEYWORD2>_sysprocbin</KEYWORD2>\r
+        <KEYWORD2>_sysproccolumns</KEYWORD2>\r
+        <KEYWORD2>_sysprocedures</KEYWORD2>\r
+        <KEYWORD2>_sysproctext</KEYWORD2>\r
+        <KEYWORD2>_sysrealstat</KEYWORD2>\r
+        <KEYWORD2>_sysrefconstrs</KEYWORD2>\r
+        <KEYWORD2>_sysroles</KEYWORD2>\r
+        <KEYWORD2>_sysschemas</KEYWORD2>\r
+        <KEYWORD2>_sysseqauth</KEYWORD2>\r
+        <KEYWORD2>_syssmintstat</KEYWORD2>\r
+        <KEYWORD2>_syssynonyms</KEYWORD2>\r
+        <KEYWORD2>_systabauth</KEYWORD2>\r
+        <KEYWORD2>_systblconstrs</KEYWORD2>\r
+        <KEYWORD2>_systblstat</KEYWORD2>\r
+        <KEYWORD2>_systimestat</KEYWORD2>\r
+        <KEYWORD2>_systinyintstat</KEYWORD2>\r
+        <KEYWORD2>_systrigcols</KEYWORD2>\r
+        <KEYWORD2>_systrigger</KEYWORD2>\r
+        <KEYWORD2>_systsstat</KEYWORD2>\r
+        <KEYWORD2>_syststzstat</KEYWORD2>\r
+        <KEYWORD2>_sysvarcharstat</KEYWORD2>\r
+        <KEYWORD2>_sysviews</KEYWORD2>\r
+        <KEYWORD2>_sysviews_name_map</KEYWORD2>\r
+        <KEYWORD2>_tablebase</KEYWORD2>\r
+        <KEYWORD2>_tablestat</KEYWORD2>\r
+        <KEYWORD2>_tablestat-create</KEYWORD2>\r
+        <KEYWORD2>_tablestat-delete</KEYWORD2>\r
+        <KEYWORD2>_tablestat-id</KEYWORD2>\r
+        <KEYWORD2>_tablestat-read</KEYWORD2>\r
+        <KEYWORD2>_tablestat-update</KEYWORD2>\r
+        <KEYWORD2>_tbl</KEYWORD2>\r
+        <KEYWORD2>_tbl-status</KEYWORD2>\r
+        <KEYWORD2>_tbl-type</KEYWORD2>\r
+        <KEYWORD2>_tblid</KEYWORD2>\r
+        <KEYWORD2>_tblname</KEYWORD2>\r
+        <KEYWORD2>_tblowner</KEYWORD2>\r
+        <KEYWORD2>_telephone</KEYWORD2>\r
+        <KEYWORD2>_template</KEYWORD2>\r
+        <KEYWORD2>_toss-limit</KEYWORD2>\r
+        <KEYWORD2>_trans</KEYWORD2>\r
+        <KEYWORD2>_trans-coord</KEYWORD2>\r
+        <KEYWORD2>_trans-coordtx</KEYWORD2>\r
+        <KEYWORD2>_trans-counter</KEYWORD2>\r
+        <KEYWORD2>_trans-duration</KEYWORD2>\r
+        <KEYWORD2>_trans-flags</KEYWORD2>\r
+        <KEYWORD2>_trans-id</KEYWORD2>\r
+        <KEYWORD2>_trans-misc</KEYWORD2>\r
+        <KEYWORD2>_trans-num</KEYWORD2>\r
+        <KEYWORD2>_trans-state</KEYWORD2>\r
+        <KEYWORD2>_trans-txtime</KEYWORD2>\r
+        <KEYWORD2>_trans-usrnum</KEYWORD2>\r
+        <KEYWORD2>_trig-crc</KEYWORD2>\r
+        <KEYWORD2>_triggerevent</KEYWORD2>\r
+        <KEYWORD2>_triggerid</KEYWORD2>\r
+        <KEYWORD2>_triggername</KEYWORD2>\r
+        <KEYWORD2>_triggertime</KEYWORD2>\r
+        <KEYWORD2>_txe-id</KEYWORD2>\r
+        <KEYWORD2>_txe-locks</KEYWORD2>\r
+        <KEYWORD2>_txe-lockss</KEYWORD2>\r
+        <KEYWORD2>_txe-time</KEYWORD2>\r
+        <KEYWORD2>_txe-type</KEYWORD2>\r
+        <KEYWORD2>_txe-wait-time</KEYWORD2>\r
+        <KEYWORD2>_txe-waits</KEYWORD2>\r
+        <KEYWORD2>_txe-waitss</KEYWORD2>\r
+        <KEYWORD2>_txelock</KEYWORD2>\r
+        <KEYWORD2>_typeprecision</KEYWORD2>\r
+        <KEYWORD2>_u-misc1</KEYWORD2>\r
+        <KEYWORD2>_u-misc2</KEYWORD2>\r
+        <KEYWORD2>_unique</KEYWORD2>\r
+        <KEYWORD2>_unsignedattr</KEYWORD2>\r
+        <KEYWORD2>_unsorted</KEYWORD2>\r
+        <KEYWORD2>_upd</KEYWORD2>\r
+        <KEYWORD2>_updatable</KEYWORD2>\r
+        <KEYWORD2>_user</KEYWORD2>\r
+        <KEYWORD2>_user-misc</KEYWORD2>\r
+        <KEYWORD2>_user-name</KEYWORD2>\r
+        <KEYWORD2>_userid</KEYWORD2>\r
+        <KEYWORD2>_userio</KEYWORD2>\r
+        <KEYWORD2>_userio-airead</KEYWORD2>\r
+        <KEYWORD2>_userio-aiwrite</KEYWORD2>\r
+        <KEYWORD2>_userio-biread</KEYWORD2>\r
+        <KEYWORD2>_userio-biwrite</KEYWORD2>\r
+        <KEYWORD2>_userio-dbaccess</KEYWORD2>\r
+        <KEYWORD2>_userio-dbread</KEYWORD2>\r
+        <KEYWORD2>_userio-dbwrite</KEYWORD2>\r
+        <KEYWORD2>_userio-id</KEYWORD2>\r
+        <KEYWORD2>_userio-misc</KEYWORD2>\r
+        <KEYWORD2>_userio-name</KEYWORD2>\r
+        <KEYWORD2>_userio-usr</KEYWORD2>\r
+        <KEYWORD2>_userlock</KEYWORD2>\r
+        <KEYWORD2>_userlock-chain</KEYWORD2>\r
+        <KEYWORD2>_userlock-flags</KEYWORD2>\r
+        <KEYWORD2>_userlock-id</KEYWORD2>\r
+        <KEYWORD2>_userlock-misc</KEYWORD2>\r
+        <KEYWORD2>_userlock-name</KEYWORD2>\r
+        <KEYWORD2>_userlock-recid</KEYWORD2>\r
+        <KEYWORD2>_userlock-type</KEYWORD2>\r
+        <KEYWORD2>_userlock-usr</KEYWORD2>\r
+        <KEYWORD2>_username</KEYWORD2>\r
+        <KEYWORD2>_userstatus</KEYWORD2>\r
+        <KEYWORD2>_userstatus-counter</KEYWORD2>\r
+        <KEYWORD2>_userstatus-objectid</KEYWORD2>\r
+        <KEYWORD2>_userstatus-objecttype</KEYWORD2>\r
+        <KEYWORD2>_userstatus-operation</KEYWORD2>\r
+        <KEYWORD2>_userstatus-state</KEYWORD2>\r
+        <KEYWORD2>_userstatus-target</KEYWORD2>\r
+        <KEYWORD2>_userstatus-userid</KEYWORD2>\r
+        <KEYWORD2>_user_number</KEYWORD2>\r
+        <KEYWORD2>_valexp</KEYWORD2>\r
+        <KEYWORD2>_valmsg</KEYWORD2>\r
+        <KEYWORD2>_valmsg-sa</KEYWORD2>\r
+        <KEYWORD2>_value</KEYWORD2>\r
+        <KEYWORD2>_value_ch</KEYWORD2>\r
+        <KEYWORD2>_value_n</KEYWORD2>\r
+        <KEYWORD2>_val_ts</KEYWORD2>\r
+        <KEYWORD2>_vcol-order</KEYWORD2>\r
+        <KEYWORD2>_version</KEYWORD2>\r
+        <KEYWORD2>_view</KEYWORD2>\r
+        <KEYWORD2>_view-as</KEYWORD2>\r
+        <KEYWORD2>_view-col</KEYWORD2>\r
+        <KEYWORD2>_view-def</KEYWORD2>\r
+        <KEYWORD2>_view-name</KEYWORD2>\r
+        <KEYWORD2>_view-ref</KEYWORD2>\r
+        <KEYWORD2>_viewname</KEYWORD2>\r
+        <KEYWORD2>_viewtext</KEYWORD2>\r
+        <KEYWORD2>_where-cls</KEYWORD2>\r
+        <KEYWORD2>_width</KEYWORD2>\r
+        <KEYWORD2>_word-rule</KEYWORD2>\r
+        <KEYWORD2>_word-rules</KEYWORD2>\r
+        <KEYWORD2>_wordidx</KEYWORD2>\r
+        <KEYWORD2>_wr-attr</KEYWORD2>\r
+        <KEYWORD2>_wr-cp</KEYWORD2>\r
+        <KEYWORD2>_wr-name</KEYWORD2>\r
+        <KEYWORD2>_wr-number</KEYWORD2>\r
+        <KEYWORD2>_wr-segment</KEYWORD2>\r
+        <KEYWORD2>_wr-type</KEYWORD2>\r
+        <KEYWORD2>_wr-version</KEYWORD2>\r
+\r
+\r
+\r
+\r
+\r
+\r
+      <!-- INVALID    : Deprecated keywords -->\r
+        <INVALID>USE-INDEX</INVALID>\r
+        <INVALID>UNIX</INVALID>\r
+        <INVALID>DOS</INVALID>\r
+        <INVALID>VMS</INVALID>\r
+        <INVALID>BTOS</INVALID>\r
+        <INVALID>CTOS</INVALID>\r
+        <INVALID>OS2</INVALID>\r
+        <INVALID>OS400</INVALID>\r
+        <INVALID>EDITING</INVALID>\r
+        <INVALID>CHOOSE</INVALID>\r
+        <INVALID>PROMPT-FOR</INVALID>\r
+        <INVALID>SHARE-LOCK</INVALID>\r
+        <INVALID>READKEY</INVALID>\r
+        <INVALID>GO-PENDING</INVALID>\r
+        <INVALID>VALIDATE</INVALID>\r
+        <INVALID>IS-ATTR-SPACE</INVALID>\r
+        <INVALID>GATEWAYS</INVALID>\r
+        <INVALID>SCROLL</INVALID>\r
+\r
+        <!-- Removed or renamed keywords -->\r
+        <INVALID>ITERATION-CHANGED</INVALID>\r
+        <INVALID>BEFORE-RECORD-FILL</INVALID>\r
+        <INVALID>AFTER-RECORD-FILL</INVALID>\r
+        <INVALID>REPOSITION-MODE</INVALID>\r
+\r
+\r
+\r
+      <!-- COMMENT2   : Preprocessor statements -->\r
+        <COMMENT2>&amp;ADM-CONTAINER</COMMENT2>\r
+        <COMMENT2>&amp;ADM-SUPPORTED-LINKS</COMMENT2>\r
+        <COMMENT2>&amp;ANALYZE-RESUME</COMMENT2>\r
+        <COMMENT2>&amp;ANALYZE-SUSPEND</COMMENT2>\r
+        <COMMENT2>&amp;BATCH-MODE</COMMENT2>\r
+        <COMMENT2>&amp;BROWSE-NAME</COMMENT2>\r
+        <COMMENT2>&amp;DEFINED</COMMENT2>\r
+        <COMMENT2>&amp;DISPLAYED-FIELDS</COMMENT2>\r
+        <COMMENT2>&amp;DISPLAYED-OBJECTS</COMMENT2>\r
+        <COMMENT2>&amp;ELSE</COMMENT2>\r
+        <COMMENT2>&amp;ELSEIF</COMMENT2>\r
+        <COMMENT2>&amp;ENABLED-FIELDS-IN-QUERY</COMMENT2>\r
+        <COMMENT2>&amp;ENABLED-FIELDS</COMMENT2>\r
+        <COMMENT2>&amp;ENABLED-OBJECTS</COMMENT2>\r
+        <COMMENT2>&amp;ENABLED-TABLES-IN-QUERY</COMMENT2>\r
+        <COMMENT2>&amp;ENABLED-TABLES</COMMENT2>\r
+        <COMMENT2>&amp;ENDIF</COMMENT2>\r
+        <COMMENT2>&amp;EXTERNAL-TABLES</COMMENT2>\r
+        <COMMENT2>&amp;FIELD-PAIRS-IN-QUERY</COMMENT2>\r
+        <COMMENT2>&amp;FIELD-PAIRS</COMMENT2>\r
+        <COMMENT2>&amp;FIELDS-IN-QUERY</COMMENT2>\r
+        <COMMENT2>&amp;FILE-NAME</COMMENT2>\r
+        <COMMENT2>&amp;FIRST-EXTERNAL-TABLE</COMMENT2>\r
+        <COMMENT2>&amp;FIRST-TABLE-IN-QUERY</COMMENT2>\r
+        <COMMENT2>&amp;FRAME-NAME</COMMENT2>\r
+        <COMMENT2>&amp;GLOB</COMMENT2>\r
+        <COMMENT2>&amp;GLOBAL-DEFINE</COMMENT2>\r
+        <COMMENT2>&amp;IF</COMMENT2>\r
+        <COMMENT2>&amp;INCLUDE</COMMENT2>\r
+        <COMMENT2>&amp;INTERNAL-TABLES</COMMENT2>\r
+        <COMMENT2>&amp;LAYOUT-VARIABLE</COMMENT2>\r
+        <COMMENT2>&amp;LINE-NUMBER</COMMENT2>\r
+        <COMMENT2>&amp;LIST-1</COMMENT2>\r
+        <COMMENT2>&amp;LIST-2</COMMENT2>\r
+        <COMMENT2>&amp;LIST-3</COMMENT2>\r
+        <COMMENT2>&amp;LIST-4</COMMENT2>\r
+        <COMMENT2>&amp;LIST-5</COMMENT2>\r
+        <COMMENT2>&amp;LIST-6</COMMENT2>\r
+        <COMMENT2>&amp;MESSAGE</COMMENT2>\r
+        <COMMENT2>&amp;NEW</COMMENT2>\r
+        <COMMENT2>&amp;OPEN-BROWSERS-IN-QUERY</COMMENT2>\r
+        <COMMENT2>&amp;OPEN-QUERY</COMMENT2>\r
+        <COMMENT2>&amp;OPSYS</COMMENT2>\r
+        <COMMENT2>&amp;PROCEDURE-TYPE</COMMENT2>\r
+        <COMMENT2>&amp;QUERY-NAME</COMMENT2>\r
+        <COMMENT2>&amp;SCOP</COMMENT2>\r
+        <COMMENT2>&amp;SCOPED-DEFINE</COMMENT2>\r
+        <COMMENT2>&amp;SELF-NAME</COMMENT2>\r
+        <COMMENT2>&amp;SEQUENCE</COMMENT2>\r
+        <COMMENT2>&amp;TABLES-IN-QUERY</COMMENT2>\r
+        <COMMENT2>&amp;THEN</COMMENT2>\r
+        <COMMENT2>&amp;UIB_is_Running</COMMENT2>\r
+        <COMMENT2>&amp;UNDEFINE</COMMENT2>\r
+        <COMMENT2>&amp;WINDOW-NAME</COMMENT2>\r
+        <COMMENT2>&amp;WINDOW-SYSTEM</COMMENT2>\r
+        <COMMENT2>DEFINED</COMMENT2>\r
+        <COMMENT2>PROCEDURE-TYPE</COMMENT2>\r
+        <COMMENT2>_CREATE-WINDOW</COMMENT2>\r
+        <COMMENT2>_CUSTOM _DEFINITIONS</COMMENT2>\r
+        <COMMENT2>_CUSTOM _MAIN-BLOCK</COMMENT2>\r
+        <COMMENT2>_CUSTOM</COMMENT2>\r
+        <COMMENT2>_DEFINITIONS</COMMENT2>\r
+        <COMMENT2>_END-PROCEDURE-SETTINGS</COMMENT2>\r
+        <COMMENT2>_FUNCTION-FORWARD</COMMENT2>\r
+        <COMMENT2>_FUNCTION</COMMENT2>\r
+        <COMMENT2>_INCLUDED-LIB</COMMENT2>\r
+        <COMMENT2>_INLINE</COMMENT2>\r
+        <COMMENT2>_MAIN-BLOCK</COMMENT2>\r
+        <COMMENT2>_PROCEDURE-SETTINGS</COMMENT2>\r
+        <COMMENT2>_PROCEDURE</COMMENT2>\r
+        <COMMENT2>_UIB-CODE-BLOCK</COMMENT2>\r
+        <COMMENT2>_UIB-PREPROCESSOR-BLOCK</COMMENT2>\r
+        <COMMENT2>_VERSION-NUMBER</COMMENT2>\r
+        <COMMENT2>_XFTR</COMMENT2>\r
+\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/prolog.xml b/extra/xmode/modes/prolog.xml
new file mode 100644 (file)
index 0000000..bd5adbd
--- /dev/null
@@ -0,0 +1,195 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--   jEdit Prolog syntax file\r
+       based on the INRIA ISO Prolog web page @ http://pauillac.inria.fr/~hodgson/prolog\r
+\r
+       written by      Giulio Piancastelli\r
+       version         1.0\r
+       created on      31st December 2001\r
+       last revised    19th November 2002\r
+-->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="%" />\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+       \r
+               <!-- Comments -->\r
+               <EOL_SPAN TYPE="COMMENT1">%</EOL_SPAN>\r
+               <!--- ISO compliant C-style comments -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+               \r
+               <!-- String literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               \r
+               <!-- List literals -->\r
+               <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE" DELEGATE="LIST">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+               \r
+               <!-- Operators -->\r
+               <SEQ TYPE="OPERATOR">--&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">:-</SEQ>\r
+               <SEQ TYPE="OPERATOR">?-</SEQ>\r
+               <SEQ TYPE="OPERATOR">;</SEQ>\r
+               <SEQ TYPE="OPERATOR">-&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">\+</SEQ> <!-- ISO Prolog uses it instead of 'not' -->\r
+               <SEQ TYPE="OPERATOR">==</SEQ>\r
+               <SEQ TYPE="OPERATOR">\==</SEQ>\r
+               <SEQ TYPE="OPERATOR">\=</SEQ>\r
+               <SEQ TYPE="OPERATOR">@&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">@=&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">@&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">@&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">=..</SEQ>\r
+               <SEQ TYPE="OPERATOR">=:=</SEQ>\r
+               <SEQ TYPE="OPERATOR">=\=</SEQ>\r
+               <SEQ TYPE="OPERATOR">=&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/\</SEQ>\r
+               <SEQ TYPE="OPERATOR">\/</SEQ>\r
+               <SEQ TYPE="OPERATOR">//</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">**</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">\</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               \r
+               <!-- The '.' at the end of each clause -->\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               \r
+               <!-- Parentheses -->\r
+               <SEQ TYPE="MARKUP">(</SEQ>\r
+               <SEQ TYPE="MARKUP">)</SEQ>\r
+               <SEQ TYPE="NULL">{</SEQ>\r
+               <SEQ TYPE="NULL">}</SEQ>\r
+               \r
+               <KEYWORDS>\r
+               \r
+                       <!-- Keywords that are 0 arity built-in predicates -->\r
+                       <KEYWORD1>true</KEYWORD1>\r
+                       <KEYWORD1>fail</KEYWORD1>\r
+                       <KEYWORD1>!</KEYWORD1> <!-- cut -->\r
+                       <KEYWORD1>at_end_of_stream</KEYWORD1>\r
+                       <KEYWORD1>nl</KEYWORD1>\r
+                       <KEYWORD1>repeat</KEYWORD1>\r
+                       <KEYWORD1>halt</KEYWORD1>\r
+                       \r
+                       <!-- Keywords that are built-in predicates with arity greater than or equal to 1 -->\r
+                       <FUNCTION>call</FUNCTION>\r
+                       <FUNCTION>catch</FUNCTION>\r
+                       <FUNCTION>throw</FUNCTION>\r
+                       <FUNCTION>unify_with_occurs_check</FUNCTION>\r
+                       <FUNCTION>var</FUNCTION>\r
+                       <FUNCTION>atom</FUNCTION>\r
+                       <FUNCTION>integer</FUNCTION>\r
+                       <FUNCTION>float</FUNCTION>\r
+                       <FUNCTION>atomic</FUNCTION>\r
+                       <FUNCTION>compound</FUNCTION>\r
+                       <FUNCTION>nonvar</FUNCTION>\r
+                       <FUNCTION>number</FUNCTION>\r
+                       <FUNCTION>functor</FUNCTION>\r
+                       <FUNCTION>arg</FUNCTION>\r
+                       <FUNCTION>copy_term</FUNCTION>\r
+                       <FUNCTION>clause</FUNCTION>\r
+                       <FUNCTION>current_predicate</FUNCTION>\r
+                       <FUNCTION>asserta</FUNCTION>\r
+                       <FUNCTION>assertz</FUNCTION>\r
+                       <FUNCTION>retract</FUNCTION>\r
+                       <FUNCTION>abolish</FUNCTION>\r
+                       <FUNCTION>findall</FUNCTION>\r
+                       <FUNCTION>bagof</FUNCTION>\r
+                       <FUNCTION>setof</FUNCTION>\r
+                       <FUNCTION>current_input</FUNCTION>\r
+                       <FUNCTION>current_output</FUNCTION>\r
+                       <FUNCTION>set_input</FUNCTION>\r
+                       <FUNCTION>set_output</FUNCTION>\r
+                       <FUNCTION>open</FUNCTION>\r
+                       <FUNCTION>close</FUNCTION>\r
+                       <FUNCTION>stream_property</FUNCTION>\r
+                       <FUNCTION>at_end_of_stream</FUNCTION> <!-- arity 1 -->\r
+                       <FUNCTION>set_stream_position</FUNCTION>\r
+                       <FUNCTION>get_char</FUNCTION>\r
+                       <FUNCTION>get_code</FUNCTION>\r
+                       <FUNCTION>peek_char</FUNCTION>\r
+                       <FUNCTION>peek_code</FUNCTION>\r
+                       <FUNCTION>put_char</FUNCTION>\r
+                       <FUNCTION>put_code</FUNCTION>\r
+                       <FUNCTION>nl</FUNCTION> <!-- arity 1 -->\r
+                       <FUNCTION>get_byte</FUNCTION>\r
+                       <FUNCTION>peek_byte</FUNCTION>\r
+                       <FUNCTION>put_byte</FUNCTION>\r
+                       <FUNCTION>read_term</FUNCTION>\r
+                       <FUNCTION>read</FUNCTION>\r
+                       <FUNCTION>write_term</FUNCTION>\r
+                       <FUNCTION>write</FUNCTION>\r
+                       <FUNCTION>writeq</FUNCTION>\r
+                       <FUNCTION>write_canonical</FUNCTION>\r
+                       <FUNCTION>op</FUNCTION>\r
+                       <FUNCTION>current_op</FUNCTION>\r
+                       <FUNCTION>char_conversion</FUNCTION>\r
+                       <FUNCTION>current_char_conversion</FUNCTION>\r
+                       <FUNCTION>once</FUNCTION>\r
+                       <FUNCTION>atom_length</FUNCTION>\r
+                       <FUNCTION>atom_concat</FUNCTION>\r
+                       <FUNCTION>sub_atom</FUNCTION>\r
+                       <FUNCTION>atom_chars</FUNCTION>\r
+                       <FUNCTION>atom_codes</FUNCTION>\r
+                       <FUNCTION>char_code</FUNCTION>\r
+                       <FUNCTION>number_chars</FUNCTION>\r
+                       <FUNCTION>number_codes</FUNCTION>\r
+                       <FUNCTION>set_prolog_flag</FUNCTION>\r
+                       <FUNCTION>current_prolog_flag</FUNCTION>\r
+                       <FUNCTION>halt</FUNCTION> <!-- arity 1 -->\r
+                       \r
+                       <!-- Mathematical functions -->\r
+                       <FUNCTION>sin</FUNCTION>\r
+                       <FUNCTION>cos</FUNCTION>\r
+                       <FUNCTION>atan</FUNCTION>\r
+                       <FUNCTION>exp</FUNCTION>\r
+                       <FUNCTION>log</FUNCTION>\r
+                       <FUNCTION>sqrt</FUNCTION>\r
+                       \r
+                       <!-- Keywords that should be operators -->\r
+                       <KEYWORD2>is</KEYWORD2>\r
+                       <KEYWORD2>rem</KEYWORD2>\r
+                       <KEYWORD2>mod</KEYWORD2>\r
+                       \r
+                       <!-- Singleton variable -->\r
+                       <KEYWORD3>_</KEYWORD3>\r
+                       \r
+               </KEYWORDS>\r
+               \r
+       </RULES>\r
+\r
+       <RULES SET="LIST" DEFAULT="LITERAL2">\r
+               <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE" DELEGATE="LIST">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/props.xml b/extra/xmode/modes/props.xml
new file mode 100644 (file)
index 0000000..f3d0511
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+       </PROPS>\r
+       <RULES DEFAULT="KEYWORD1">\r
+               <EOL_SPAN TYPE="COMMENT1" AT_LINE_START="TRUE">#</EOL_SPAN>\r
+               <EOL_SPAN TYPE="NULL" DELEGATE="PROP_VALUE">=</EOL_SPAN>\r
+               <EOL_SPAN TYPE="NULL" DELEGATE="PROP_VALUE">:</EOL_SPAN>\r
+               <EOL_SPAN TYPE="NULL" DELEGATE="PROP_VALUE"> </EOL_SPAN>\r
+               <EOL_SPAN TYPE="NULL" DELEGATE="PROP_VALUE">    </EOL_SPAN>\r
+       </RULES>\r
+       <RULES SET="PROP_VALUE" HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="([\p{Digit}]+|#[\p{XDigit}]+)"\r
+               NO_WORD_SEP="#">\r
+               <!-- MessageFormat { ... } stuff -->\r
+               <SPAN TYPE="KEYWORD3" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <!-- Sillyness -->\r
+               <MARK_FOLLOWING TYPE="DIGIT">#</MARK_FOLLOWING>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/psp.xml b/extra/xmode/modes/psp.xml
new file mode 100644 (file)
index 0000000..2adc5a1
--- /dev/null
@@ -0,0 +1,126 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+               <PROPERTY NAME="indentNextLines" VALUE="\s*[^#]{3,}:\s*(#.*)?" />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="TRUE">\r
+\r
+               <SPAN TYPE="LITERAL4" DELEGATE="DIRECTIVE">\r
+                       <BEGIN>&lt;%@</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- PSP comment -->\r
+               <SPAN TYPE="COMMENT2">\r
+                       <BEGIN>&lt;%--</BEGIN>\r
+                       <END>--%&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- inline Python code -->\r
+               <SPAN TYPE="LITERAL3" DELEGATE="python::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Client-side javascript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;script language="jscript"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;script language="javascript"&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP" DELEGATE="javascript::MAIN">\r
+                       <BEGIN>&lt;script&gt;</BEGIN>\r
+                       <END>&lt;/script&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Server-Side include -->\r
+               <SPAN TYPE="MARKUP">\r
+                       <BEGIN>&lt;!--#</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="css::MAIN">\r
+                       <BEGIN>&lt;STYLE&gt;</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+\r
+       </RULES>\r
+\r
+       <!-- ESCAPE is not exactly right but it is needed to correctly\r
+            handle JavaScript in on* parameters -->\r
+       <RULES SET="TAGS" DEFAULT="MARKUP" ESCAPE="\">\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+\r
+               <!-- PSP comment -->\r
+               <SPAN TYPE="COMMENT2">\r
+                       <BEGIN>&lt;%--</BEGIN>\r
+                       <END>--%&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL3" DELEGATE="python::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="DIRECTIVE" DEFAULT="LITERAL4">\r
+\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD4>include</KEYWORD4>\r
+\r
+                       <KEYWORD4>file</KEYWORD4>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/ptl.xml b/extra/xmode/modes/ptl.xml
new file mode 100644 (file)
index 0000000..b47f9a9
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+<MODE NAME="ptl"                       FILE="ptl.xml"\r
+                               FILE_NAME_GLOB="*.ptl"/>\r
+-->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="indentNextLines" VALUE="\s*[^#]{3,}:\s*(#.*)?" />\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+\r
+               <IMPORT DELEGATE="python::MAIN"/>\r
+\r
+               <SEQ TYPE="KEYWORD4">[html]</SEQ>\r
+               <SEQ TYPE="KEYWORD4">[plain]</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <LITERAL4>_q_access</LITERAL4>\r
+                       <LITERAL4>_q_exports</LITERAL4>\r
+                       <LITERAL4>_q_index</LITERAL4>\r
+                       <LITERAL4>_q_lookup</LITERAL4>\r
+                       <LITERAL4>_q_resolve</LITERAL4>\r
+                       <LITERAL4>_q_exception_handler</LITERAL4>\r
+               </KEYWORDS>\r
+\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/pvwave.xml b/extra/xmode/modes/pvwave.xml
new file mode 100644 (file)
index 0000000..8a74b4a
--- /dev/null
@@ -0,0 +1,722 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- PV-WAVE mode, by Ed Stewart\r
+     based on Java mode by Mike Dillon and IDLTokenMarker by Juha Lindfors -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE=";" />\r
+       </PROPS>\r
+       <RULES HIGHLIGHT_DIGITS="TRUE" IGNORE_CASE="TRUE">\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">;</EOL_SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">(</SEQ>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">#</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+               <SEQ TYPE="LABEL">$</SEQ>\r
+               <SEQ TYPE="LABEL">&amp;</SEQ>\r
+               <SEQ TYPE="LABEL">@</SEQ>\r
+               <SEQ TYPE="LABEL">!</SEQ>\r
+\r
+               <KEYWORDS>\r
+               <!--KEYWORD1s are standard functions and procedures -->\r
+                       <KEYWORD1>abs</KEYWORD1>\r
+                       <KEYWORD1>acos</KEYWORD1>\r
+                       <KEYWORD1>add_exec_on_select</KEYWORD1>\r
+                       <KEYWORD1>addsysvar</KEYWORD1>\r
+                       <KEYWORD1>addvar</KEYWORD1>\r
+                       <KEYWORD1>affine</KEYWORD1>\r
+                       <KEYWORD1>alog</KEYWORD1>\r
+                       <KEYWORD1>alog10</KEYWORD1>\r
+                       <KEYWORD1>asarr</KEYWORD1>\r
+                       <KEYWORD1>asin</KEYWORD1>\r
+                       <KEYWORD1>askeys</KEYWORD1>\r
+                       <KEYWORD1>assoc</KEYWORD1>\r
+                       <KEYWORD1>atan</KEYWORD1>\r
+                       <KEYWORD1>avg</KEYWORD1>\r
+                       <KEYWORD1>axis</KEYWORD1>\r
+                       <KEYWORD1>bar</KEYWORD1>\r
+                       <KEYWORD1>bar2d</KEYWORD1>\r
+                       <KEYWORD1>bar3d</KEYWORD1>\r
+                       <KEYWORD1>beseli</KEYWORD1>\r
+                       <KEYWORD1>beselj</KEYWORD1>\r
+                       <KEYWORD1>besely</KEYWORD1>\r
+                       <KEYWORD1>bilinear</KEYWORD1>\r
+                       <KEYWORD1>bindgen</KEYWORD1>\r
+                       <KEYWORD1>blob</KEYWORD1>\r
+                       <KEYWORD1>blobcount</KEYWORD1>\r
+                       <KEYWORD1>boundary</KEYWORD1>\r
+                       <KEYWORD1>build_table</KEYWORD1>\r
+                       <KEYWORD1>buildresourcefilename</KEYWORD1>\r
+                       <KEYWORD1>bytarr</KEYWORD1>\r
+                       <KEYWORD1>byte</KEYWORD1>\r
+                       <KEYWORD1>byteorder</KEYWORD1>\r
+                       <KEYWORD1>bytscl</KEYWORD1>\r
+                       <KEYWORD1>c_edit</KEYWORD1>\r
+                       <KEYWORD1>call_unix</KEYWORD1>\r
+                       <KEYWORD1>cd</KEYWORD1>\r
+                       <KEYWORD1>center_view</KEYWORD1>\r
+                       <KEYWORD1>chebyshev</KEYWORD1>\r
+                       <KEYWORD1>check_math</KEYWORD1>\r
+                       <KEYWORD1>checkfile</KEYWORD1>\r
+                       <KEYWORD1>cindgen</KEYWORD1>\r
+                       <KEYWORD1>close</KEYWORD1>\r
+                       <KEYWORD1>color_convert</KEYWORD1>\r
+                       <KEYWORD1>color_edit</KEYWORD1>\r
+                       <KEYWORD1>color_palette</KEYWORD1>\r
+                       <KEYWORD1>complex</KEYWORD1>\r
+                       <KEYWORD1>complexarr</KEYWORD1>\r
+                       <KEYWORD1>cone</KEYWORD1>\r
+                       <KEYWORD1>congrid</KEYWORD1>\r
+                       <KEYWORD1>conj</KEYWORD1>\r
+                       <KEYWORD1>contour</KEYWORD1>\r
+                       <KEYWORD1>contour2</KEYWORD1>\r
+                       <KEYWORD1>contourfill</KEYWORD1>\r
+                       <KEYWORD1>conv_from_rect</KEYWORD1>\r
+                       <KEYWORD1>conv_to_rect</KEYWORD1>\r
+                       <KEYWORD1>convert_coord</KEYWORD1>\r
+                       <KEYWORD1>convol</KEYWORD1>\r
+                       <KEYWORD1>correlate</KEYWORD1>\r
+                       <KEYWORD1>cos</KEYWORD1>\r
+                       <KEYWORD1>cosh</KEYWORD1>\r
+                       <KEYWORD1>cosines</KEYWORD1>\r
+                       <KEYWORD1>cprod</KEYWORD1>\r
+                       <KEYWORD1>create_holidays</KEYWORD1>\r
+                       <KEYWORD1>create_weekdends</KEYWORD1>\r
+                       <KEYWORD1>crossp</KEYWORD1>\r
+                       <KEYWORD1>cursor</KEYWORD1>\r
+                       <KEYWORD1>curvatures</KEYWORD1>\r
+                       <KEYWORD1>curvefit</KEYWORD1>\r
+                       <KEYWORD1>cylinder</KEYWORD1>\r
+                       <KEYWORD1>day_name</KEYWORD1>\r
+                       <KEYWORD1>day_of_week</KEYWORD1>\r
+                       <KEYWORD1>day_of_year</KEYWORD1>\r
+                       <KEYWORD1>dblarr</KEYWORD1>\r
+                       <KEYWORD1>dc_error_msg</KEYWORD1>\r
+                       <KEYWORD1>dc_options</KEYWORD1>\r
+                       <KEYWORD1>dc_read_24_bit</KEYWORD1>\r
+                       <KEYWORD1>dc_read_8_bit</KEYWORD1>\r
+                       <KEYWORD1>dc_read_container</KEYWORD1>\r
+                       <KEYWORD1>dc_read_dib</KEYWORD1>\r
+                       <KEYWORD1>dc_read_fixed</KEYWORD1>\r
+                       <KEYWORD1>dc_read_free</KEYWORD1>\r
+                       <KEYWORD1>dc_read_tiff</KEYWORD1>\r
+                       <KEYWORD1>dc_scan_container</KEYWORD1>\r
+                       <KEYWORD1>dc_write_24_bit</KEYWORD1>\r
+                       <KEYWORD1>dc_write_8_bit</KEYWORD1>\r
+                       <KEYWORD1>dc_write_dib</KEYWORD1>\r
+                       <KEYWORD1>dc_write_fixed</KEYWORD1>\r
+                       <KEYWORD1>dc_write_free</KEYWORD1>\r
+                       <KEYWORD1>dc_write_tiff</KEYWORD1>\r
+                       <KEYWORD1>dcindgen</KEYWORD1>\r
+                       <KEYWORD1>dcomplex</KEYWORD1>\r
+                       <KEYWORD1>dcomplexarr</KEYWORD1>\r
+                       <KEYWORD1>declare func</KEYWORD1>\r
+                       <KEYWORD1>declare function</KEYWORD1>\r
+                       <KEYWORD1>define_key</KEYWORD1>\r
+                       <KEYWORD1>defroi</KEYWORD1>\r
+                       <KEYWORD1>defsysv</KEYWORD1>\r
+                       <KEYWORD1>del_file</KEYWORD1>\r
+                       <KEYWORD1>delfunc</KEYWORD1>\r
+                       <KEYWORD1>dellog</KEYWORD1>\r
+                       <KEYWORD1>delproc</KEYWORD1>\r
+                       <KEYWORD1>delstruct</KEYWORD1>\r
+                       <KEYWORD1>delvar</KEYWORD1>\r
+                       <KEYWORD1>demo</KEYWORD1>\r
+                       <KEYWORD1>deriv</KEYWORD1>\r
+                       <KEYWORD1>derivn</KEYWORD1>\r
+                       <KEYWORD1>determ</KEYWORD1>\r
+                       <KEYWORD1>device</KEYWORD1>\r
+                       <KEYWORD1>diag</KEYWORD1>\r
+                       <KEYWORD1>dicm_tag_info</KEYWORD1>\r
+                       <KEYWORD1>digital_filter</KEYWORD1>\r
+                       <KEYWORD1>dilate</KEYWORD1>\r
+                       <KEYWORD1>dindgen</KEYWORD1>\r
+                       <KEYWORD1>dist</KEYWORD1>\r
+                       <KEYWORD1>dminit</KEYWORD1>\r
+                       <KEYWORD1>doc_lib_unix</KEYWORD1>\r
+                       <KEYWORD1>doc_library</KEYWORD1>\r
+                       <KEYWORD1>double</KEYWORD1>\r
+                       <KEYWORD1>drop_exec_on_select</KEYWORD1>\r
+                       <KEYWORD1>dt_add</KEYWORD1>\r
+                       <KEYWORD1>dt_addly</KEYWORD1>\r
+                       <KEYWORD1>dt_compress</KEYWORD1>\r
+                       <KEYWORD1>dt_duration</KEYWORD1>\r
+                       <KEYWORD1>dt_print</KEYWORD1>\r
+                       <KEYWORD1>dt_subly</KEYWORD1>\r
+                       <KEYWORD1>dt_subtract</KEYWORD1>\r
+                       <KEYWORD1>dt_to_sec</KEYWORD1>\r
+                       <KEYWORD1>dt_to_str</KEYWORD1>\r
+                       <KEYWORD1>dt_to_var</KEYWORD1>\r
+                       <KEYWORD1>dtegn</KEYWORD1>\r
+                       <KEYWORD1>empty</KEYWORD1>\r
+                       <KEYWORD1>environment</KEYWORD1>\r
+                       <KEYWORD1>eof</KEYWORD1>\r
+                       <KEYWORD1>erase</KEYWORD1>\r
+                       <KEYWORD1>erode</KEYWORD1>\r
+                       <KEYWORD1>errorf</KEYWORD1>\r
+                       <KEYWORD1>errplot</KEYWORD1>\r
+                       <KEYWORD1>euclidean</KEYWORD1>\r
+                       <KEYWORD1>exec_on_select</KEYWORD1>\r
+                       <KEYWORD1>execute</KEYWORD1>\r
+                       <KEYWORD1>exp</KEYWORD1>\r
+                       <KEYWORD1>expand</KEYWORD1>\r
+                       <KEYWORD1>expon</KEYWORD1>\r
+                       <KEYWORD1>extrema</KEYWORD1>\r
+                       <KEYWORD1>factor</KEYWORD1>\r
+                       <KEYWORD1>fast_grid2</KEYWORD1>\r
+                       <KEYWORD1>fast_grid3</KEYWORD1>\r
+                       <KEYWORD1>fast_grid4</KEYWORD1>\r
+                       <KEYWORD1>fft</KEYWORD1>\r
+                       <KEYWORD1>filepath</KEYWORD1>\r
+                       <KEYWORD1>findfile</KEYWORD1>\r
+                       <KEYWORD1>findgen</KEYWORD1>\r
+                       <KEYWORD1>finite</KEYWORD1>\r
+                       <KEYWORD1>fix</KEYWORD1>\r
+                       <KEYWORD1>float</KEYWORD1>\r
+                       <KEYWORD1>fltarr</KEYWORD1>\r
+                       <KEYWORD1>flush</KEYWORD1>\r
+                       <KEYWORD1>free_lun</KEYWORD1>\r
+                       <KEYWORD1>fstat</KEYWORD1>\r
+                       <KEYWORD1>funct</KEYWORD1>\r
+                       <KEYWORD1>gamma</KEYWORD1>\r
+                       <KEYWORD1>gaussfit</KEYWORD1>\r
+                       <KEYWORD1>gaussint</KEYWORD1>\r
+                       <KEYWORD1>gcd</KEYWORD1>\r
+                       <KEYWORD1>get_kbrd</KEYWORD1>\r
+                       <KEYWORD1>get_lun</KEYWORD1>\r
+                       <KEYWORD1>getenv</KEYWORD1>\r
+                       <KEYWORD1>get_named_color</KEYWORD1>\r
+                       <KEYWORD1>getncerr</KEYWORD1>\r
+                       <KEYWORD1>getncopts</KEYWORD1>\r
+                       <KEYWORD1>getparam</KEYWORD1>\r
+                       <KEYWORD1>great_int</KEYWORD1>\r
+                       <KEYWORD1>grid</KEYWORD1>\r
+                       <KEYWORD1>grid_2d</KEYWORD1>\r
+                       <KEYWORD1>grid_3d</KEYWORD1>\r
+                       <KEYWORD1>grid_4d</KEYWORD1>\r
+                       <KEYWORD1>grid_sphere</KEYWORD1>\r
+                       <KEYWORD1>gridn</KEYWORD1>\r
+                       <KEYWORD1>group_by</KEYWORD1>\r
+                       <KEYWORD1>hak</KEYWORD1>\r
+                       <KEYWORD1>hanning</KEYWORD1>\r
+                       <KEYWORD1>hdf_test</KEYWORD1>\r
+                       <KEYWORD1>hdfgetsds</KEYWORD1>\r
+                       <KEYWORD1>help</KEYWORD1>\r
+                       <KEYWORD1>hilbert</KEYWORD1>\r
+                       <KEYWORD1>hist_equal</KEYWORD1>\r
+                       <KEYWORD1>hist_equal_ct</KEYWORD1>\r
+                       <KEYWORD1>histn</KEYWORD1>\r
+                       <KEYWORD1>histogram</KEYWORD1>\r
+                       <KEYWORD1>hls</KEYWORD1>\r
+                       <KEYWORD1>hsv</KEYWORD1>\r
+                       <KEYWORD1>hsv_to_rgd</KEYWORD1>\r
+                       <KEYWORD1>image_check</KEYWORD1>\r
+                       <KEYWORD1>image_color_quant</KEYWORD1>\r
+                       <KEYWORD1>image_cont</KEYWORD1>\r
+                       <KEYWORD1>image_create</KEYWORD1>\r
+                       <KEYWORD1>image_display</KEYWORD1>\r
+                       <KEYWORD1>image_filetypes</KEYWORD1>\r
+                       <KEYWORD1>image_query_file</KEYWORD1>\r
+                       <KEYWORD1>image_read</KEYWORD1>\r
+                       <KEYWORD1>image_write</KEYWORD1>\r
+                       <KEYWORD1>imaginary</KEYWORD1>\r
+                       <KEYWORD1>img_true8</KEYWORD1>\r
+                       <KEYWORD1>index_and</KEYWORD1>\r
+                       <KEYWORD1>index_conv</KEYWORD1>\r
+                       <KEYWORD1>index_or</KEYWORD1>\r
+                       <KEYWORD1>indgen</KEYWORD1>\r
+                       <KEYWORD1>intarr</KEYWORD1>\r
+                       <KEYWORD1>interpol</KEYWORD1>\r
+                       <KEYWORD1>interpolate</KEYWORD1>\r
+                       <KEYWORD1>intrp</KEYWORD1>\r
+                       <KEYWORD1>invert</KEYWORD1>\r
+                       <KEYWORD1>isaskey</KEYWORD1>\r
+                       <KEYWORD1>ishft</KEYWORD1>\r
+                       <KEYWORD1>jacobian</KEYWORD1>\r
+                       <KEYWORD1>jul_to_dt</KEYWORD1>\r
+                       <KEYWORD1>keyword_set</KEYWORD1>\r
+                       <KEYWORD1>lcm</KEYWORD1>\r
+                       <KEYWORD1>leefilt</KEYWORD1>\r
+                       <KEYWORD1>legend</KEYWORD1>\r
+                       <KEYWORD1>lindgen</KEYWORD1>\r
+                       <KEYWORD1>linknload</KEYWORD1>\r
+                       <KEYWORD1>list</KEYWORD1>\r
+                       <KEYWORD1>listarr</KEYWORD1>\r
+                       <KEYWORD1>load_holidays</KEYWORD1>\r
+                       <KEYWORD1>load_option</KEYWORD1>\r
+                       <KEYWORD1>load_weekends</KEYWORD1>\r
+                       <KEYWORD1>loadct</KEYWORD1>\r
+                       <KEYWORD1>loadct_custom</KEYWORD1>\r
+                       <KEYWORD1>loadresources</KEYWORD1>\r
+                       <KEYWORD1>loadstrings</KEYWORD1>\r
+                       <KEYWORD1>lonarr</KEYWORD1>\r
+                       <KEYWORD1>long</KEYWORD1>\r
+                       <KEYWORD1>lubksb</KEYWORD1>\r
+                       <KEYWORD1>ludcmp</KEYWORD1>\r
+                       <KEYWORD1>make_array</KEYWORD1>\r
+                       <KEYWORD1>map</KEYWORD1>\r
+                       <KEYWORD1>map_axes</KEYWORD1>\r
+                       <KEYWORD1>map_contour</KEYWORD1>\r
+                       <KEYWORD1>map_grid</KEYWORD1>\r
+                       <KEYWORD1>map_plots</KEYWORD1>\r
+                       <KEYWORD1>map_polyfill</KEYWORD1>\r
+                       <KEYWORD1>map_proj</KEYWORD1>\r
+                       <KEYWORD1>map_reverse</KEYWORD1>\r
+                       <KEYWORD1>map_velovect</KEYWORD1>\r
+                       <KEYWORD1>map_version</KEYWORD1>\r
+                       <KEYWORD1>map_xyouts</KEYWORD1>\r
+                       <KEYWORD1>max</KEYWORD1>\r
+                       <KEYWORD1>median</KEYWORD1>\r
+                       <KEYWORD1>mesh</KEYWORD1>\r
+                       <KEYWORD1>message</KEYWORD1>\r
+                       <KEYWORD1>min</KEYWORD1>\r
+                       <KEYWORD1>modifyct</KEYWORD1>\r
+                       <KEYWORD1>molec</KEYWORD1>\r
+                       <KEYWORD1>moment</KEYWORD1>\r
+                       <KEYWORD1>month_name</KEYWORD1>\r
+                       <KEYWORD1>movie</KEYWORD1>\r
+                       <KEYWORD1>mprove</KEYWORD1>\r
+                       <KEYWORD1>msword_cgm_setup</KEYWORD1>\r
+                       <KEYWORD1>n_elements</KEYWORD1>\r
+                       <KEYWORD1>n_params</KEYWORD1>\r
+                       <KEYWORD1>n_tags</KEYWORD1>\r
+                       <KEYWORD1>nint</KEYWORD1>\r
+                       <KEYWORD1>normals</KEYWORD1>\r
+                       <KEYWORD1>null_processor</KEYWORD1>\r
+                       <KEYWORD1>openr</KEYWORD1>\r
+                       <KEYWORD1>openu</KEYWORD1>\r
+                       <KEYWORD1>openw</KEYWORD1>\r
+                       <KEYWORD1>oplot</KEYWORD1>\r
+                       <KEYWORD1>oploterr</KEYWORD1>\r
+                       <KEYWORD1>option_is_loaded</KEYWORD1>\r
+                       <KEYWORD1>order_by</KEYWORD1>\r
+                       <KEYWORD1>padit</KEYWORD1>\r
+                       <KEYWORD1>packimage</KEYWORD1>\r
+                       <KEYWORD1>packtable</KEYWORD1>\r
+                       <KEYWORD1>palette</KEYWORD1>\r
+                       <KEYWORD1>param_present</KEYWORD1>\r
+                       <KEYWORD1>parsefilename</KEYWORD1>\r
+                       <KEYWORD1>pie</KEYWORD1>\r
+                       <KEYWORD1>pie_chart</KEYWORD1>\r
+                       <KEYWORD1>plot</KEYWORD1>\r
+                       <KEYWORD1>plot_field</KEYWORD1>\r
+                       <KEYWORD1>plot_histogram</KEYWORD1>\r
+                       <KEYWORD1>plot_io</KEYWORD1>\r
+                       <KEYWORD1>plot_oi</KEYWORD1>\r
+                       <KEYWORD1>plot_oo</KEYWORD1>\r
+                       <KEYWORD1>plot_windrose</KEYWORD1>\r
+                       <KEYWORD1>ploterr</KEYWORD1>\r
+                       <KEYWORD1>plots</KEYWORD1>\r
+                       <KEYWORD1>pm</KEYWORD1>\r
+                       <KEYWORD1>pmf</KEYWORD1>\r
+                       <KEYWORD1>point_lun</KEYWORD1>\r
+                       <KEYWORD1>poly</KEYWORD1>\r
+                       <KEYWORD1>poly_2d</KEYWORD1>\r
+                       <KEYWORD1>poly_area</KEYWORD1>\r
+                       <KEYWORD1>poly_c_conv</KEYWORD1>\r
+                       <KEYWORD1>poly_count</KEYWORD1>\r
+                       <KEYWORD1>poly_dev</KEYWORD1>\r
+                       <KEYWORD1>poly_fit</KEYWORD1>\r
+                       <KEYWORD1>poly_merge</KEYWORD1>\r
+                       <KEYWORD1>poly_norm</KEYWORD1>\r
+                       <KEYWORD1>poly_plot</KEYWORD1>\r
+                       <KEYWORD1>poly_sphere</KEYWORD1>\r
+                       <KEYWORD1>poly_surf</KEYWORD1>\r
+                       <KEYWORD1>poly_trans</KEYWORD1>\r
+                       <KEYWORD1>polyfill</KEYWORD1>\r
+                       <KEYWORD1>polyfillv</KEYWORD1>\r
+                       <KEYWORD1>polyfitw</KEYWORD1>\r
+                       <KEYWORD1>polyshade</KEYWORD1>\r
+                       <KEYWORD1>polywarp</KEYWORD1>\r
+                       <KEYWORD1>popd</KEYWORD1>\r
+                       <KEYWORD1>prime</KEYWORD1>\r
+                       <KEYWORD1>print</KEYWORD1>\r
+                       <KEYWORD1>printd</KEYWORD1>\r
+                       <KEYWORD1>printf</KEYWORD1>\r
+                       <KEYWORD1>profile</KEYWORD1>\r
+                       <KEYWORD1>profiles</KEYWORD1>\r
+                       <KEYWORD1>prompt</KEYWORD1>\r
+                       <KEYWORD1>pseudo</KEYWORD1>\r
+                       <KEYWORD1>pushd</KEYWORD1>\r
+                       <KEYWORD1>query_table</KEYWORD1>\r
+                       <KEYWORD1>randomn</KEYWORD1>\r
+                       <KEYWORD1>randomu</KEYWORD1>\r
+                       <KEYWORD1>rdpix</KEYWORD1>\r
+                       <KEYWORD1>read</KEYWORD1>\r
+                       <KEYWORD1>read_airs</KEYWORD1>\r
+                       <KEYWORD1>read_xbm</KEYWORD1>\r
+                       <KEYWORD1>readf</KEYWORD1>\r
+                       <KEYWORD1>readu</KEYWORD1>\r
+                       <KEYWORD1>rebin</KEYWORD1>\r
+                       <KEYWORD1>reform</KEYWORD1>\r
+                       <KEYWORD1>regress</KEYWORD1>\r
+                       <KEYWORD1>rename</KEYWORD1>\r
+                       <KEYWORD1>render</KEYWORD1>\r
+                       <KEYWORD1>render24</KEYWORD1>\r
+                       <KEYWORD1>replicate</KEYWORD1>\r
+                       <KEYWORD1>replv</KEYWORD1>\r
+                       <KEYWORD1>resamp</KEYWORD1>\r
+                       <KEYWORD1>reverse</KEYWORD1>\r
+                       <KEYWORD1>rgb_to_hsv</KEYWORD1>\r
+                       <KEYWORD1>rm</KEYWORD1>\r
+                       <KEYWORD1>rmf</KEYWORD1>\r
+                       <KEYWORD1>roberts</KEYWORD1>\r
+                       <KEYWORD1>rot</KEYWORD1>\r
+                       <KEYWORD1>rot_int</KEYWORD1>\r
+                       <KEYWORD1>rotate</KEYWORD1>\r
+                       <KEYWORD1>same</KEYWORD1>\r
+                       <KEYWORD1>scale3d</KEYWORD1>\r
+                       <KEYWORD1>sec_to_dt</KEYWORD1>\r
+                       <KEYWORD1>select_read_lun</KEYWORD1>\r
+                       <KEYWORD1>set_plot</KEYWORD1>\r
+                       <KEYWORD1>set_screen</KEYWORD1>\r
+                       <KEYWORD1>set_shading</KEYWORD1>\r
+                       <KEYWORD1>set_symbol</KEYWORD1>\r
+                       <KEYWORD1>set_view3d</KEYWORD1>\r
+                       <KEYWORD1>set_viewport</KEYWORD1>\r
+                       <KEYWORD1>set_xy</KEYWORD1>\r
+                       <KEYWORD1>setdemo</KEYWORD1>\r
+                       <KEYWORD1>setenv</KEYWORD1>\r
+                       <KEYWORD1>setimagesize</KEYWORD1>\r
+                       <KEYWORD1>setlog</KEYWORD1>\r
+                       <KEYWORD1>setncopts</KEYWORD1>\r
+                       <KEYWORD1>setup_keys</KEYWORD1>\r
+                       <KEYWORD1>sgn</KEYWORD1>\r
+                       <KEYWORD1>shade_surf</KEYWORD1>\r
+                       <KEYWORD1>shade_surf_irr</KEYWORD1>\r
+                       <KEYWORD1>shade_volume</KEYWORD1>\r
+                       <KEYWORD1>shif</KEYWORD1>\r
+                       <KEYWORD1>shift</KEYWORD1>\r
+                       <KEYWORD1>show_options</KEYWORD1>\r
+                       <KEYWORD1>show3</KEYWORD1>\r
+                       <KEYWORD1>sigma</KEYWORD1>\r
+                       <KEYWORD1>sin</KEYWORD1>\r
+                       <KEYWORD1>sindgen</KEYWORD1>\r
+                       <KEYWORD1>sinh</KEYWORD1>\r
+                       <KEYWORD1>size</KEYWORD1>\r
+                       <KEYWORD1>skipf</KEYWORD1>\r
+                       <KEYWORD1>slice</KEYWORD1>\r
+                       <KEYWORD1>slice_vol</KEYWORD1>\r
+                       <KEYWORD1>small_int</KEYWORD1>\r
+                       <KEYWORD1>smooth</KEYWORD1>\r
+                       <KEYWORD1>sobel</KEYWORD1>\r
+                       <KEYWORD1>socket_accept</KEYWORD1>\r
+                       <KEYWORD1>socket_close</KEYWORD1>\r
+                       <KEYWORD1>socket_connect</KEYWORD1>\r
+                       <KEYWORD1>socket_getport</KEYWORD1>\r
+                       <KEYWORD1>socket_init</KEYWORD1>\r
+                       <KEYWORD1>socket_read</KEYWORD1>\r
+                       <KEYWORD1>socket_write</KEYWORD1>\r
+                       <KEYWORD1>sort</KEYWORD1>\r
+                       <KEYWORD1>sortn</KEYWORD1>\r
+                       <KEYWORD1>spawn</KEYWORD1>\r
+                       <KEYWORD1>sphere</KEYWORD1>\r
+                       <KEYWORD1>spline</KEYWORD1>\r
+                       <KEYWORD1>sqrt</KEYWORD1>\r
+                       <KEYWORD1>stdev</KEYWORD1>\r
+                       <KEYWORD1>str_to_dt</KEYWORD1>\r
+                       <KEYWORD1>strarr</KEYWORD1>\r
+                       <KEYWORD1>strcompress</KEYWORD1>\r
+                       <KEYWORD1>stretch</KEYWORD1>\r
+                       <KEYWORD1>string</KEYWORD1>\r
+                       <KEYWORD1>strjoin</KEYWORD1>\r
+                       <KEYWORD1>strlen</KEYWORD1>\r
+                       <KEYWORD1>strlookup</KEYWORD1>\r
+                       <KEYWORD1>strlowcase</KEYWORD1>\r
+                       <KEYWORD1>strmatch</KEYWORD1>\r
+                       <KEYWORD1>strmessage</KEYWORD1>\r
+                       <KEYWORD1>strmid</KEYWORD1>\r
+                       <KEYWORD1>strpos</KEYWORD1>\r
+                       <KEYWORD1>strput</KEYWORD1>\r
+                       <KEYWORD1>strsplit</KEYWORD1>\r
+                       <KEYWORD1>strsubst</KEYWORD1>\r
+                       <KEYWORD1>strtrim</KEYWORD1>\r
+                       <KEYWORD1>structref</KEYWORD1>\r
+                       <KEYWORD1>strupcase</KEYWORD1>\r
+                       <KEYWORD1>sum</KEYWORD1>\r
+                       <KEYWORD1>surface</KEYWORD1>\r
+                       <KEYWORD1>surface_fit</KEYWORD1>\r
+                       <KEYWORD1>surfr</KEYWORD1>\r
+                       <KEYWORD1>svbksb</KEYWORD1>\r
+                       <KEYWORD1>svd</KEYWORD1>\r
+                       <KEYWORD1>svdfit</KEYWORD1>\r
+                       <KEYWORD1>systime</KEYWORD1>\r
+                       <KEYWORD1>t3d</KEYWORD1>\r
+                       <KEYWORD1>tag_names</KEYWORD1>\r
+                       <KEYWORD1>tan</KEYWORD1>\r
+                       <KEYWORD1>tanh</KEYWORD1>\r
+                       <KEYWORD1>tek_color</KEYWORD1>\r
+                       <KEYWORD1>tensor_add</KEYWORD1>\r
+                       <KEYWORD1>tensor_div</KEYWORD1>\r
+                       <KEYWORD1>tensor_eq</KEYWORD1>\r
+                       <KEYWORD1>tensor_exp</KEYWORD1>\r
+                       <KEYWORD1>tensor_ge</KEYWORD1>\r
+                       <KEYWORD1>tensor_gt</KEYWORD1>\r
+                       <KEYWORD1>tensor_le</KEYWORD1>\r
+                       <KEYWORD1>tensor_lt</KEYWORD1>\r
+                       <KEYWORD1>tensor_max</KEYWORD1>\r
+                       <KEYWORD1>tensor_min</KEYWORD1>\r
+                       <KEYWORD1>tensor_mod</KEYWORD1>\r
+                       <KEYWORD1>tensor_mul</KEYWORD1>\r
+                       <KEYWORD1>tensor_ne</KEYWORD1>\r
+                       <KEYWORD1>tensor_sub</KEYWORD1>\r
+                       <KEYWORD1>threed</KEYWORD1>\r
+                       <KEYWORD1>today</KEYWORD1>\r
+                       <KEYWORD1>total</KEYWORD1>\r
+                       <KEYWORD1>tqli</KEYWORD1>\r
+                       <KEYWORD1>transpose</KEYWORD1>\r
+                       <KEYWORD1>tred2</KEYWORD1>\r
+                       <KEYWORD1>tridag</KEYWORD1>\r
+                       <KEYWORD1>tv</KEYWORD1>\r
+                       <KEYWORD1>tvcrs</KEYWORD1>\r
+                       <KEYWORD1>tvlct</KEYWORD1>\r
+                       <KEYWORD1>tvrd</KEYWORD1>\r
+                       <KEYWORD1>tvscl</KEYWORD1>\r
+                       <KEYWORD1>tvsize</KEYWORD1>\r
+                       <KEYWORD1>uniqn</KEYWORD1>\r
+                       <KEYWORD1>unique</KEYWORD1>\r
+                       <KEYWORD1>unix_listen</KEYWORD1>\r
+                       <KEYWORD1>unix_reply</KEYWORD1>\r
+                       <KEYWORD1>unload_option</KEYWORD1>\r
+                       <KEYWORD1>upvar</KEYWORD1>\r
+                       <KEYWORD1>usersym</KEYWORD1>\r
+                       <KEYWORD1>usgs_names</KEYWORD1>\r
+                       <KEYWORD1>value_length</KEYWORD1>\r
+                       <KEYWORD1>var_match</KEYWORD1>\r
+                       <KEYWORD1>var_to_dt</KEYWORD1>\r
+                       <KEYWORD1>vector_field3</KEYWORD1>\r
+                       <KEYWORD1>vel</KEYWORD1>\r
+                       <KEYWORD1>velovect</KEYWORD1>\r
+                       <KEYWORD1>viewer</KEYWORD1>\r
+                       <KEYWORD1>vol_marker</KEYWORD1>\r
+                       <KEYWORD1>vol_pad</KEYWORD1>\r
+                       <KEYWORD1>vol_red</KEYWORD1>\r
+                       <KEYWORD1>vol_trans</KEYWORD1>\r
+                       <KEYWORD1>volume</KEYWORD1>\r
+                       <KEYWORD1>vtkaddattribute</KEYWORD1>\r
+                       <KEYWORD1>vtkaxes</KEYWORD1>\r
+                       <KEYWORD1>vtkcamera</KEYWORD1>\r
+                       <KEYWORD1>vtkclose</KEYWORD1>\r
+                       <KEYWORD1>vtkcolorbar</KEYWORD1>\r
+                       <KEYWORD1>vtkcolornames</KEYWORD1>\r
+                       <KEYWORD1>vtkcommand</KEYWORD1>\r
+                       <KEYWORD1>vtkerase</KEYWORD1>\r
+                       <KEYWORD1>vtkformat</KEYWORD1>\r
+                       <KEYWORD1>vtkgrid</KEYWORD1>\r
+                       <KEYWORD1>vtkhedgehog</KEYWORD1>\r
+                       <KEYWORD1>vtkinit</KEYWORD1>\r
+                       <KEYWORD1>vtklight</KEYWORD1>\r
+                       <KEYWORD1>vtkplots</KEYWORD1>\r
+                       <KEYWORD1>vtkpolydata</KEYWORD1>\r
+                       <KEYWORD1>vtkpolyformat</KEYWORD1>\r
+                       <KEYWORD1>vtkpolyshade</KEYWORD1>\r
+                       <KEYWORD1>vtkppmread</KEYWORD1>\r
+                       <KEYWORD1>vtkppmwrite</KEYWORD1>\r
+                       <KEYWORD1>vtkreadvtk</KEYWORD1>\r
+                       <KEYWORD1>vtkrectilineargrid</KEYWORD1>\r
+                       <KEYWORD1>vtkrenderwindow</KEYWORD1>\r
+                       <KEYWORD1>vtkscatter</KEYWORD1>\r
+                       <KEYWORD1>vtkslicevol</KEYWORD1>\r
+                       <KEYWORD1>vtkstructuredpoints</KEYWORD1>\r
+                       <KEYWORD1>vtkstructuredgrid</KEYWORD1>\r
+                       <KEYWORD1>vtksurface</KEYWORD1>\r
+                       <KEYWORD1>vtksurfgen</KEYWORD1>\r
+                       <KEYWORD1>vtktext</KEYWORD1>\r
+                       <KEYWORD1>vtktvrd</KEYWORD1>\r
+                       <KEYWORD1>vtkunstructuredgrid</KEYWORD1>\r
+                       <KEYWORD1>vtkwdelete</KEYWORD1>\r
+                       <KEYWORD1>vtkwindow</KEYWORD1>\r
+                       <KEYWORD1>vtkwritevrml</KEYWORD1>\r
+                       <KEYWORD1>vtkwset</KEYWORD1>\r
+                       <KEYWORD1>wait</KEYWORD1>\r
+                       <KEYWORD1>wavedatamanager</KEYWORD1>\r
+                       <KEYWORD1>waveserver</KEYWORD1>\r
+                       <KEYWORD1>wcopy</KEYWORD1>\r
+                       <KEYWORD1>wdelete</KEYWORD1>\r
+                       <KEYWORD1>where</KEYWORD1>\r
+                       <KEYWORD1>wherein</KEYWORD1>\r
+                       <KEYWORD1>window</KEYWORD1>\r
+                       <KEYWORD1>wmenu</KEYWORD1>\r
+                       <KEYWORD1>wpaste</KEYWORD1>\r
+                       <KEYWORD1>wprint</KEYWORD1>\r
+                       <KEYWORD1>wread_dib</KEYWORD1>\r
+                       <KEYWORD1>wread_meta</KEYWORD1>\r
+                       <KEYWORD1>write_xbm</KEYWORD1>\r
+                       <KEYWORD1>writeu</KEYWORD1>\r
+                       <KEYWORD1>wset</KEYWORD1>\r
+                       <KEYWORD1>whow</KEYWORD1>\r
+                       <KEYWORD1>wwrite_dib</KEYWORD1>\r
+                       <KEYWORD1>wwrite_meta</KEYWORD1>\r
+                       <KEYWORD1>xyouts</KEYWORD1>\r
+                       <KEYWORD1>zoom</KEYWORD1>\r
+                       <KEYWORD1>zroots</KEYWORD1>\r
+               <!--KEYWORD2s are PV-WAVE keywords -->\r
+                       <KEYWORD2>begin</KEYWORD2>\r
+                       <KEYWORD2>breakpoint</KEYWORD2>\r
+                       <KEYWORD2>case</KEYWORD2>\r
+                       <KEYWORD2>common</KEYWORD2>\r
+                       <KEYWORD2>compile</KEYWORD2>\r
+                       <KEYWORD2>declare</KEYWORD2>\r
+                       <KEYWORD2>do</KEYWORD2>\r
+                       <KEYWORD2>else</KEYWORD2>\r
+                       <KEYWORD2>end</KEYWORD2>\r
+                       <KEYWORD2>endcase</KEYWORD2>\r
+                       <KEYWORD2>endelse</KEYWORD2>\r
+                       <KEYWORD2>endfor</KEYWORD2>\r
+                       <KEYWORD2>endif</KEYWORD2>\r
+                       <KEYWORD2>endrepeat</KEYWORD2>\r
+                       <KEYWORD2>endwhile</KEYWORD2>\r
+                       <KEYWORD2>exit</KEYWORD2>\r
+                       <KEYWORD2>for</KEYWORD2>\r
+                       <KEYWORD2>func</KEYWORD2>\r
+                       <KEYWORD2>function</KEYWORD2>\r
+                       <KEYWORD2>goto</KEYWORD2>\r
+                       <KEYWORD2>help</KEYWORD2>\r
+                       <KEYWORD2>if</KEYWORD2>\r
+                       <KEYWORD2>info</KEYWORD2>\r
+                       <KEYWORD2>journal</KEYWORD2>\r
+                       <KEYWORD2>locals</KEYWORD2>\r
+                       <KEYWORD2>of</KEYWORD2>\r
+                       <KEYWORD2>on_error</KEYWORD2>\r
+                       <KEYWORD2>on_error_goto</KEYWORD2>\r
+                       <KEYWORD2>on_ioerror</KEYWORD2>\r
+                       <KEYWORD2>pro</KEYWORD2>\r
+                       <KEYWORD2>quit</KEYWORD2>\r
+                       <KEYWORD2>repeat</KEYWORD2>\r
+                       <KEYWORD2>restore</KEYWORD2>\r
+                       <KEYWORD2>retall</KEYWORD2>\r
+                       <KEYWORD2>return</KEYWORD2>\r
+                       <KEYWORD2>save</KEYWORD2>\r
+                       <KEYWORD2>stop</KEYWORD2>\r
+                       <KEYWORD2>then</KEYWORD2>\r
+                       <KEYWORD2>while</KEYWORD2>\r
+               <!-- KEYWORD3s are binary ops and Widget stuff -->\r
+                       <KEYWORD3>and</KEYWORD3>\r
+                       <KEYWORD3>not</KEYWORD3>\r
+                       <KEYWORD3>or</KEYWORD3>\r
+                       <KEYWORD3>xor</KEYWORD3>\r
+                       <KEYWORD3>eq</KEYWORD3>\r
+                       <KEYWORD3>ne</KEYWORD3>\r
+                       <KEYWORD3>gt</KEYWORD3>\r
+                       <KEYWORD3>lt</KEYWORD3>\r
+                       <KEYWORD3>ge</KEYWORD3>\r
+                       <KEYWORD3>le</KEYWORD3>\r
+                       <KEYWORD3>mod</KEYWORD3>\r
+                       <KEYWORD3>WgAnimateTool</KEYWORD3>\r
+                       <KEYWORD3>WgCbarTool</KEYWORD3>\r
+                       <KEYWORD3>WgCtTool</KEYWORD3>\r
+                       <KEYWORD3>WgIsoSurfTool</KEYWORD3>\r
+                       <KEYWORD3>WgMovieTool</KEYWORD3>\r
+                       <KEYWORD3>WgSimageTool</KEYWORD3>\r
+                       <KEYWORD3>WgSliceTool</KEYWORD3>\r
+                       <KEYWORD3>WgSurfaceTool</KEYWORD3>\r
+                       <KEYWORD3>WgTextTool</KEYWORD3>\r
+                       <KEYWORD3>WoAddButtons</KEYWORD3>\r
+                       <KEYWORD3>WoAddMessage</KEYWORD3>\r
+                       <KEYWORD3>WoAddStatus</KEYWORD3>\r
+                       <KEYWORD3>WoButtonBar</KEYWORD3>\r
+                       <KEYWORD3>WoCheckFile</KEYWORD3>\r
+                       <KEYWORD3>WoColorButton</KEYWORD3>\r
+                       <KEYWORD3>WoColorConvert</KEYWORD3>\r
+                       <KEYWORD3>WoColorGrid</KEYWORD3>\r
+                       <KEYWORD3>WoColorWheel</KEYWORD3>\r
+                       <KEYWORD3>WoConfirmClose</KEYWORD3>\r
+                       <KEYWORD3>WoDialogStatus</KEYWORD3>\r
+                       <KEYWORD3>WoFontOptionMenu</KEYWORD3>\r
+                       <KEYWORD3>WoGenericDialog</KEYWORD3>\r
+                       <KEYWORD3>WoLabeledText</KEYWORD3>\r
+                       <KEYWORD3>WoMenuBar</KEYWORD3>\r
+                       <KEYWORD3>WoMessage</KEYWORD3>\r
+                       <KEYWORD3>WoSaveAsPixmap</KEYWORD3>\r
+                       <KEYWORD3>WoSetCursor</KEYWORD3>\r
+                       <KEYWORD3>WoSetWindowTitle</KEYWORD3>\r
+                       <KEYWORD3>WoStatus</KEYWORD3>\r
+                       <KEYWORD3>WoVariableOptionMenu</KEYWORD3>\r
+                       <KEYWORD3>WtAddCallback</KEYWORD3>\r
+                       <KEYWORD3>WtAddHandler</KEYWORD3>\r
+                       <KEYWORD3>WtCursor</KEYWORD3>\r
+                       <KEYWORD3>WtGet</KEYWORD3>\r
+                       <KEYWORD3>WtPointer</KEYWORD3>\r
+                       <KEYWORD3>WtSet</KEYWORD3>\r
+                       <KEYWORD3>WtTimer</KEYWORD3>\r
+                       <KEYWORD3>WwAlert</KEYWORD3>\r
+                       <KEYWORD3>WwAlertPopdown</KEYWORD3>\r
+                       <KEYWORD3>WwButtonBox</KEYWORD3>\r
+                       <KEYWORD3>WwCallback</KEYWORD3>\r
+                       <KEYWORD3>WwControlsBox</KEYWORD3>\r
+                       <KEYWORD3>WwDialog</KEYWORD3>\r
+                       <KEYWORD3>WwDrawing</KEYWORD3>\r
+                       <KEYWORD3>WwFileSelection</KEYWORD3>\r
+                       <KEYWORD3>WwGenericDialog</KEYWORD3>\r
+                       <KEYWORD3>WwGetButton</KEYWORD3>\r
+                       <KEYWORD3>WwGetKey</KEYWORD3>\r
+                       <KEYWORD3>WwGetPosition</KEYWORD3>\r
+                       <KEYWORD3>WwGetValue</KEYWORD3>\r
+                       <KEYWORD3>WwHandler</KEYWORD3>\r
+                       <KEYWORD3>WwInit</KEYWORD3>\r
+                       <KEYWORD3>WwLayout</KEYWORD3>\r
+                       <KEYWORD3>WwList</KEYWORD3>\r
+                       <KEYWORD3>WwListUtils</KEYWORD3>\r
+                       <KEYWORD3>WwLoop</KEYWORD3>\r
+                       <KEYWORD3>WwMainWindow</KEYWORD3>\r
+                       <KEYWORD3>WwMenuBar</KEYWORD3>\r
+                       <KEYWORD3>WwMenuItem</KEYWORD3>\r
+                       <KEYWORD3>WwMessage</KEYWORD3>\r
+                       <KEYWORD3>WwMultiClickHandler</KEYWORD3>\r
+                       <KEYWORD3>WwOptionMenu</KEYWORD3>\r
+                       <KEYWORD3>WwPickFile</KEYWORD3>\r
+                       <KEYWORD3>WwPopupMenu</KEYWORD3>\r
+                       <KEYWORD3>WwPreview</KEYWORD3>\r
+                       <KEYWORD3>WwPreviewUtils</KEYWORD3>\r
+                       <KEYWORD3>WwRadioBox</KEYWORD3>\r
+                       <KEYWORD3>WwResource</KEYWORD3>\r
+                       <KEYWORD3>WwSeparator</KEYWORD3>\r
+                       <KEYWORD3>WwSetCursor</KEYWORD3>\r
+                       <KEYWORD3>WwSetValue</KEYWORD3>\r
+                       <KEYWORD3>WwTable</KEYWORD3>\r
+                       <KEYWORD3>WwTableUtils</KEYWORD3>\r
+                       <KEYWORD3>WwText</KEYWORD3>\r
+                       <KEYWORD3>WwTimer</KEYWORD3>\r
+                       <KEYWORD3>WwToolBox</KEYWORD3>\r
+                       <KEYWORD3>WzAnimate</KEYWORD3>\r
+                       <KEYWORD3>WzColorEdit</KEYWORD3>\r
+                       <KEYWORD3>WzContour</KEYWORD3>\r
+                       <KEYWORD3>WzExport</KEYWORD3>\r
+                       <KEYWORD3>WzHistogram</KEYWORD3>\r
+                       <KEYWORD3>WzImage</KEYWORD3>\r
+                       <KEYWORD3>WzImport</KEYWORD3>\r
+                       <KEYWORD3>WzMultiView</KEYWORD3>\r
+                       <KEYWORD3>WzPlot</KEYWORD3>\r
+                       <KEYWORD3>WzPreview</KEYWORD3>\r
+                       <KEYWORD3>WzSurface</KEYWORD3>\r
+                       <KEYWORD3>WzTable</KEYWORD3>\r
+                       <KEYWORD3>WzVariable</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/pyrex.xml b/extra/xmode/modes/pyrex.xml
new file mode 100644 (file)
index 0000000..c46d574
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="indentNextLines" VALUE="\s*[^#]{3,}:\s*(#.*)?" />\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+\r
+               <IMPORT DELEGATE="python::MAIN"/>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD4>cdef</KEYWORD4>\r
+                       <KEYWORD4>char</KEYWORD4>\r
+                       <KEYWORD4>cinclude</KEYWORD4>\r
+                       <KEYWORD4>ctypedef</KEYWORD4>\r
+                       <KEYWORD4>double</KEYWORD4>\r
+                       <KEYWORD4>enum</KEYWORD4>\r
+                       <KEYWORD4>extern</KEYWORD4>\r
+                       <KEYWORD4>float</KEYWORD4>\r
+                       <KEYWORD4>include</KEYWORD4>\r
+                       <KEYWORD4>private</KEYWORD4>\r
+                       <KEYWORD4>public</KEYWORD4>\r
+                       <KEYWORD4>short</KEYWORD4>\r
+                       <KEYWORD4>signed</KEYWORD4>\r
+                       <KEYWORD4>sizeof</KEYWORD4>\r
+                       <KEYWORD4>struct</KEYWORD4>\r
+                       <KEYWORD4>union</KEYWORD4>\r
+                       <KEYWORD4>unsigned</KEYWORD4>\r
+                       <KEYWORD4>void</KEYWORD4>\r
+\r
+                       <LITERAL3>NULL</LITERAL3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/python.xml b/extra/xmode/modes/python.xml
new file mode 100644 (file)
index 0000000..654860e
--- /dev/null
@@ -0,0 +1,396 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- Python mode, by Slava Pestov. Based on PythonTokenMarker by -->\r
+<!-- Jonathan Revusky -->\r
+\r
+<!-- Modified 19-Jul-00 by Ivan Frohne to: -->\r
+<!--  (a) implement 'indentOnEnter'; -->\r
+<!--  (b) indent next line automatically after control structures followed -->\r
+<!--     by ':'; -->\r
+<!--  (c) make """ or ''' multiline quotes TYPE LITERAL2; -->\r
+<!--  (d) add TYPE FUNCTION identified by a following '(' -->\r
+<!--  (e) eliminate the '?' SEQ TYPE ('?' has no meaning in Python); -->\r
+<!--  (f) change the TYPE of 'and', 'or', and 'not' to KEYWORD1; and -->\r
+<!--  (g) add all builtin functions, builtin exceptions, -->\r
+<!--     builtin type methods, File object methods, and special type -->\r
+<!--     attributes as TYPE KEYWORD3. -->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="indentNextLines" VALUE="\s*[^#]{3,}:\s*(#.*)?" />\r
+               <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />\r
+               <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />\r
+               <PROPERTY NAME="unindentNextLines" VALUE="^\s*(pass|else\s*:|elif\s.*:|except(\s.*)?:|finally\s*:)$" />\r
+               <PROPERTY NAME="unindentThisLine" VALUE="^\s*(else|elif\s.*|except(\s.*)?|finally)\s*:" />\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+               <PROPERTY NAME="electricKeys" VALUE=":" />\r
+               <PROPERTY NAME="ignoreWhitespace" VALUE="false" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- Comment -->\r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+               <!-- decorator -->\r
+               <EOL_SPAN_REGEXP HASH_CHAR="@" AT_WORD_START="TRUE" TYPE="KEYWORD4">@\w</EOL_SPAN_REGEXP>\r
+\r
+               <!-- Triple-quotes -->\r
+               <SPAN TYPE="LITERAL2" DELEGATE="LITERAL_TWO">\r
+                       <BEGIN>"""</BEGIN>\r
+                       <END>"""</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL2" DELEGATE="LITERAL_TWO">\r
+                       <BEGIN>'''</BEGIN>\r
+                       <END>'''</END>\r
+               </SPAN>\r
+\r
+               <!-- Standard literals -->\r
+               <SPAN TYPE="LITERAL1" DELEGATE="LITERAL_ONE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" DELEGATE="LITERAL_ONE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="KEYWORD1">:</SEQ>\r
+\r
+               <MARK_PREVIOUS TYPE="FUNCTION"\r
+                       MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <!--  Reserved Words  -->\r
+                       <KEYWORD1>and</KEYWORD1>\r
+                       <KEYWORD1>as</KEYWORD1>\r
+                       <KEYWORD1>assert</KEYWORD1>\r
+                       <KEYWORD1>break</KEYWORD1>\r
+                       <KEYWORD1>class</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+                       <KEYWORD1>def</KEYWORD1>\r
+                       <KEYWORD1>del</KEYWORD1>\r
+                       <KEYWORD1>elif</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>except</KEYWORD1>\r
+                       <KEYWORD1>exec</KEYWORD1>\r
+                       <KEYWORD1>finally</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>from</KEYWORD1>\r
+                       <KEYWORD1>global</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>import</KEYWORD1>\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <KEYWORD1>is</KEYWORD1>\r
+                       <KEYWORD1>lambda</KEYWORD1>\r
+                       <KEYWORD1>not</KEYWORD1>\r
+                       <KEYWORD1>or</KEYWORD1>\r
+                       <KEYWORD1>pass</KEYWORD1>\r
+                       <KEYWORD1>print</KEYWORD1>\r
+                       <KEYWORD1>raise</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>reversed</KEYWORD1>\r
+                       <KEYWORD1>sorted</KEYWORD1>\r
+                       <KEYWORD1>try</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+                       <KEYWORD1>with</KEYWORD1>\r
+                       <KEYWORD1>yield</KEYWORD1>\r
+                       <KEYWORD1>self</KEYWORD1>\r
+\r
+                       <!-- builtins -->\r
+                       <KEYWORD2>abs</KEYWORD2>\r
+                       <KEYWORD2>all</KEYWORD2>\r
+                       <KEYWORD2>any</KEYWORD2>\r
+                       <KEYWORD2>apply</KEYWORD2>\r
+                       <KEYWORD2>bool</KEYWORD2>\r
+                       <KEYWORD2>buffer</KEYWORD2>\r
+                       <KEYWORD2>callable</KEYWORD2>\r
+                       <KEYWORD2>chr</KEYWORD2>\r
+                       <KEYWORD2>classmethod</KEYWORD2>\r
+                       <KEYWORD2>cmp</KEYWORD2>\r
+                       <KEYWORD2>coerce</KEYWORD2>\r
+                       <KEYWORD2>compile</KEYWORD2>\r
+                       <KEYWORD2>complex</KEYWORD2>\r
+                       <KEYWORD2>delattr</KEYWORD2>\r
+                       <KEYWORD2>dict</KEYWORD2>\r
+                       <KEYWORD2>dir</KEYWORD2>\r
+                       <KEYWORD2>divmod</KEYWORD2>\r
+                       <KEYWORD2>enumerate</KEYWORD2>\r
+                       <KEYWORD2>eval</KEYWORD2>\r
+                       <KEYWORD2>execfile</KEYWORD2>\r
+                       <KEYWORD2>file</KEYWORD2>\r
+                       <KEYWORD2>filter</KEYWORD2>\r
+                       <KEYWORD2>float</KEYWORD2>\r
+                       <KEYWORD2>frozenset</KEYWORD2>\r
+                       <KEYWORD2>getattr</KEYWORD2>\r
+                       <KEYWORD2>globals</KEYWORD2>\r
+                       <KEYWORD2>hasattr</KEYWORD2>\r
+                       <KEYWORD2>hash</KEYWORD2>\r
+                       <KEYWORD2>hex</KEYWORD2>\r
+                       <KEYWORD2>id</KEYWORD2>\r
+                       <KEYWORD2>input</KEYWORD2>\r
+                       <KEYWORD2>int</KEYWORD2>\r
+                       <KEYWORD2>intern</KEYWORD2>\r
+                       <KEYWORD2>isinstance</KEYWORD2>\r
+                       <KEYWORD2>issubclass</KEYWORD2>\r
+                       <KEYWORD2>iter</KEYWORD2>\r
+                       <KEYWORD2>len</KEYWORD2>\r
+                       <KEYWORD2>list</KEYWORD2>\r
+                       <KEYWORD2>locals</KEYWORD2>\r
+                       <KEYWORD2>long</KEYWORD2>\r
+                       <KEYWORD2>map</KEYWORD2>\r
+                       <KEYWORD2>max</KEYWORD2>\r
+                       <KEYWORD2>min</KEYWORD2>\r
+                       <KEYWORD2>object</KEYWORD2>\r
+                       <KEYWORD2>oct</KEYWORD2>\r
+                       <KEYWORD2>open</KEYWORD2>\r
+                       <KEYWORD2>ord</KEYWORD2>\r
+                       <KEYWORD2>pow</KEYWORD2>\r
+                       <KEYWORD2>property</KEYWORD2>\r
+                       <KEYWORD2>range</KEYWORD2>\r
+                       <KEYWORD2>raw_input</KEYWORD2>\r
+                       <KEYWORD2>reduce</KEYWORD2>\r
+                       <KEYWORD2>reload</KEYWORD2>\r
+                       <KEYWORD2>repr</KEYWORD2>\r
+                       <KEYWORD2>round</KEYWORD2>\r
+                       <KEYWORD2>set</KEYWORD2>\r
+                       <KEYWORD2>setattr</KEYWORD2>\r
+                       <KEYWORD2>slice</KEYWORD2>\r
+                       <KEYWORD2>staticmethod</KEYWORD2>\r
+                       <KEYWORD2>str</KEYWORD2>\r
+                       <KEYWORD2>sum</KEYWORD2>\r
+                       <KEYWORD2>super</KEYWORD2>\r
+                       <KEYWORD2>tuple</KEYWORD2>\r
+                       <KEYWORD2>type</KEYWORD2>\r
+                       <KEYWORD2>unichr</KEYWORD2>\r
+                       <KEYWORD2>unicode</KEYWORD2>\r
+                       <KEYWORD2>vars</KEYWORD2>\r
+                       <KEYWORD2>xrange</KEYWORD2>\r
+                       <KEYWORD2>zip</KEYWORD2>\r
+\r
+                       <!-- exceptions -->\r
+                       <KEYWORD3>ArithmeticError</KEYWORD3>\r
+                       <KEYWORD3>AssertionError</KEYWORD3>\r
+                       <KEYWORD3>AttributeError</KEYWORD3>\r
+                       <KEYWORD3>DeprecationWarning</KEYWORD3>\r
+                       <KEYWORD3>EOFError</KEYWORD3>\r
+                       <KEYWORD3>EnvironmentError</KEYWORD3>\r
+                       <KEYWORD3>Exception</KEYWORD3>\r
+                       <KEYWORD3>FloatingPointError</KEYWORD3>\r
+                       <KEYWORD3>IOError</KEYWORD3>\r
+                       <KEYWORD3>ImportError</KEYWORD3>\r
+                       <KEYWORD3>IndentationError</KEYWORD3>\r
+                       <KEYWORD3>IndexError</KEYWORD3>\r
+                       <KEYWORD3>KeyError</KEYWORD3>\r
+                       <KEYWORD3>KeyboardInterrupt</KEYWORD3>\r
+                       <KEYWORD3>LookupError</KEYWORD3>\r
+                       <KEYWORD3>MemoryError</KEYWORD3>\r
+                       <KEYWORD3>NameError</KEYWORD3>\r
+                       <KEYWORD3>NotImplemented</KEYWORD3>\r
+                       <KEYWORD3>NotImplementedError</KEYWORD3>\r
+                       <KEYWORD3>OSError</KEYWORD3>\r
+                       <KEYWORD3>OverflowError</KEYWORD3>\r
+                       <KEYWORD3>OverflowWarning</KEYWORD3>\r
+                       <KEYWORD3>ReferenceError</KEYWORD3>\r
+                       <KEYWORD3>RuntimeError</KEYWORD3>\r
+                       <KEYWORD3>RuntimeWarning</KEYWORD3>\r
+                       <KEYWORD3>StandardError</KEYWORD3>\r
+                       <KEYWORD3>StopIteration</KEYWORD3>\r
+                       <KEYWORD3>SyntaxError</KEYWORD3>\r
+                       <KEYWORD3>SyntaxWarning</KEYWORD3>\r
+                       <KEYWORD3>SystemError</KEYWORD3>\r
+                       <KEYWORD3>SystemExit</KEYWORD3>\r
+                       <KEYWORD3>TabError</KEYWORD3>\r
+                       <KEYWORD3>TypeError</KEYWORD3>\r
+                       <KEYWORD3>UnboundLocalError</KEYWORD3>\r
+                       <KEYWORD3>UnicodeError</KEYWORD3>\r
+                       <KEYWORD3>UserWarning</KEYWORD3>\r
+                       <KEYWORD3>ValueError</KEYWORD3>\r
+                       <KEYWORD3>Warning</KEYWORD3>\r
+                       <KEYWORD3>WindowsError</KEYWORD3>\r
+                       <KEYWORD3>ZeroDivisionError</KEYWORD3>\r
+\r
+                       <!-- types (from types module) -->\r
+                       <KEYWORD3>BufferType</KEYWORD3>\r
+                       <KEYWORD3>BuiltinFunctionType</KEYWORD3>\r
+                       <KEYWORD3>BuiltinMethodType</KEYWORD3>\r
+                       <KEYWORD3>ClassType</KEYWORD3>\r
+                       <KEYWORD3>CodeType</KEYWORD3>\r
+                       <KEYWORD3>ComplexType</KEYWORD3>\r
+                       <KEYWORD3>DictProxyType</KEYWORD3>\r
+                       <KEYWORD3>DictType</KEYWORD3>\r
+                       <KEYWORD3>DictionaryType</KEYWORD3>\r
+                       <KEYWORD3>EllipsisType</KEYWORD3>\r
+                       <KEYWORD3>FileType</KEYWORD3>\r
+                       <KEYWORD3>FloatType</KEYWORD3>\r
+                       <KEYWORD3>FrameType</KEYWORD3>\r
+                       <KEYWORD3>FunctionType</KEYWORD3>\r
+                       <KEYWORD3>GeneratorType</KEYWORD3>\r
+                       <KEYWORD3>InstanceType</KEYWORD3>\r
+                       <KEYWORD3>IntType</KEYWORD3>\r
+                       <KEYWORD3>LambdaType</KEYWORD3>\r
+                       <KEYWORD3>ListType</KEYWORD3>\r
+                       <KEYWORD3>LongType</KEYWORD3>\r
+                       <KEYWORD3>MethodType</KEYWORD3>\r
+                       <KEYWORD3>ModuleType</KEYWORD3>\r
+                       <KEYWORD3>NoneType</KEYWORD3>\r
+                       <KEYWORD3>ObjectType</KEYWORD3>\r
+                       <KEYWORD3>SliceType</KEYWORD3>\r
+                       <KEYWORD3>StringType</KEYWORD3>\r
+                       <KEYWORD3>StringTypes</KEYWORD3>\r
+                       <KEYWORD3>TracebackType</KEYWORD3>\r
+                       <KEYWORD3>TupleType</KEYWORD3>\r
+                       <KEYWORD3>TypeType</KEYWORD3>\r
+                       <KEYWORD3>UnboundMethodType</KEYWORD3>\r
+                       <KEYWORD3>UnicodeType</KEYWORD3>\r
+                       <KEYWORD3>XRangeType</KEYWORD3>\r
+\r
+                       <KEYWORD3>False</KEYWORD3>\r
+                       <KEYWORD3>None</KEYWORD3>\r
+                       <KEYWORD3>True</KEYWORD3>\r
+\r
+                       <KEYWORD3>__abs__</KEYWORD3>\r
+                       <KEYWORD3>__add__</KEYWORD3>\r
+                       <KEYWORD3>__all__</KEYWORD3>\r
+                       <KEYWORD3>__author__</KEYWORD3>\r
+                       <KEYWORD3>__bases__</KEYWORD3>\r
+                       <KEYWORD3>__builtins__</KEYWORD3>\r
+                       <KEYWORD3>__call__</KEYWORD3>\r
+                       <KEYWORD3>__class__</KEYWORD3>\r
+                       <KEYWORD3>__cmp__</KEYWORD3>\r
+                       <KEYWORD3>__coerce__</KEYWORD3>\r
+                       <KEYWORD3>__contains__</KEYWORD3>\r
+                       <KEYWORD3>__debug__</KEYWORD3>\r
+                       <KEYWORD3>__del__</KEYWORD3>\r
+                       <KEYWORD3>__delattr__</KEYWORD3>\r
+                       <KEYWORD3>__delitem__</KEYWORD3>\r
+                       <KEYWORD3>__delslice__</KEYWORD3>\r
+                       <KEYWORD3>__dict__</KEYWORD3>\r
+                       <KEYWORD3>__div__</KEYWORD3>\r
+                       <KEYWORD3>__divmod__</KEYWORD3>\r
+                       <KEYWORD3>__doc__</KEYWORD3>\r
+                       <KEYWORD3>__docformat__</KEYWORD3>\r
+                       <KEYWORD3>__eq__</KEYWORD3>\r
+                       <KEYWORD3>__file__</KEYWORD3>\r
+                       <KEYWORD3>__float__</KEYWORD3>\r
+                       <KEYWORD3>__floordiv__</KEYWORD3>\r
+                       <KEYWORD3>__future__</KEYWORD3>\r
+                       <KEYWORD3>__ge__</KEYWORD3>\r
+                       <KEYWORD3>__getattr__</KEYWORD3>\r
+                       <KEYWORD3>__getattribute__</KEYWORD3>\r
+                       <KEYWORD3>__getitem__</KEYWORD3>\r
+                       <KEYWORD3>__getslice__</KEYWORD3>\r
+                       <KEYWORD3>__gt__</KEYWORD3>\r
+                       <KEYWORD3>__hash__</KEYWORD3>\r
+                       <KEYWORD3>__hex__</KEYWORD3>\r
+                       <KEYWORD3>__iadd__</KEYWORD3>\r
+                       <KEYWORD3>__import__</KEYWORD3>\r
+                       <KEYWORD3>__imul__</KEYWORD3>\r
+                       <KEYWORD3>__init__</KEYWORD3>\r
+                       <KEYWORD3>__int__</KEYWORD3>\r
+                       <KEYWORD3>__invert__</KEYWORD3>\r
+                       <KEYWORD3>__iter__</KEYWORD3>\r
+                       <KEYWORD3>__le__</KEYWORD3>\r
+                       <KEYWORD3>__len__</KEYWORD3>\r
+                       <KEYWORD3>__long__</KEYWORD3>\r
+                       <KEYWORD3>__lshift__</KEYWORD3>\r
+                       <KEYWORD3>__lt__</KEYWORD3>\r
+                       <KEYWORD3>__members__</KEYWORD3>\r
+                       <KEYWORD3>__metaclass__</KEYWORD3>\r
+                       <KEYWORD3>__mod__</KEYWORD3>\r
+                       <KEYWORD3>__mro__</KEYWORD3>\r
+                       <KEYWORD3>__mul__</KEYWORD3>\r
+                       <KEYWORD3>__name__</KEYWORD3>\r
+                       <KEYWORD3>__ne__</KEYWORD3>\r
+                       <KEYWORD3>__neg__</KEYWORD3>\r
+                       <KEYWORD3>__new__</KEYWORD3>\r
+                       <KEYWORD3>__nonzero__</KEYWORD3>\r
+                       <KEYWORD3>__oct__</KEYWORD3>\r
+                       <KEYWORD3>__or__</KEYWORD3>\r
+                       <KEYWORD3>__path__</KEYWORD3>\r
+                       <KEYWORD3>__pos__</KEYWORD3>\r
+                       <KEYWORD3>__pow__</KEYWORD3>\r
+                       <KEYWORD3>__radd__</KEYWORD3>\r
+                       <KEYWORD3>__rdiv__</KEYWORD3>\r
+                       <KEYWORD3>__rdivmod__</KEYWORD3>\r
+                       <KEYWORD3>__reduce__</KEYWORD3>\r
+                       <KEYWORD3>__repr__</KEYWORD3>\r
+                       <KEYWORD3>__rfloordiv__</KEYWORD3>\r
+                       <KEYWORD3>__rlshift__</KEYWORD3>\r
+                       <KEYWORD3>__rmod__</KEYWORD3>\r
+                       <KEYWORD3>__rmul__</KEYWORD3>\r
+                       <KEYWORD3>__ror__</KEYWORD3>\r
+                       <KEYWORD3>__rpow__</KEYWORD3>\r
+                       <KEYWORD3>__rrshift__</KEYWORD3>\r
+                       <KEYWORD3>__rsub__</KEYWORD3>\r
+                       <KEYWORD3>__rtruediv__</KEYWORD3>\r
+                       <KEYWORD3>__rxor__</KEYWORD3>\r
+                       <KEYWORD3>__setattr__</KEYWORD3>\r
+                       <KEYWORD3>__setitem__</KEYWORD3>\r
+                       <KEYWORD3>__setslice__</KEYWORD3>\r
+                       <KEYWORD3>__self__</KEYWORD3>\r
+                       <KEYWORD3>__slots__</KEYWORD3>\r
+                       <KEYWORD3>__str__</KEYWORD3>\r
+                       <KEYWORD3>__sub__</KEYWORD3>\r
+                       <KEYWORD3>__truediv__</KEYWORD3>\r
+                       <KEYWORD3>__version__</KEYWORD3>\r
+                       <KEYWORD3>__xor__</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <!-- rulesets to syntax highlight string interpolation sequences -->\r
+       <RULES SET="LITERAL_ONE" DEFAULT="LITERAL1" ESCAPE="\">\r
+               <SEQ_REGEXP HASH_CHAR="%" TYPE="LITERAL4">%[.]?\d*[diouxXeEfFgGcrs]</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="%(" TYPE="LITERAL4">%\([^)]+\)[+ -]?\d*[diouxXeEfFgGcrs]</SEQ_REGEXP>\r
+       </RULES>\r
+       <!-- triple-quoted strings has its own, since it's LITERAL2 by default -->\r
+       <RULES SET="LITERAL_TWO" DEFAULT="LITERAL2" ESCAPE="\">\r
+               <SEQ_REGEXP HASH_CHAR="%" TYPE="LITERAL4">%\d*[diouxXeEfFgGcrs]</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="%(" TYPE="LITERAL4">%\([^)]+\)[+ -]?\d*[diouxXeEfFgGcrs]</SEQ_REGEXP>\r
+               <SPAN TYPE="LITERAL3">\r
+                       <BEGIN>B{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL3">\r
+                       <BEGIN>C{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL3">\r
+                       <BEGIN>E{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL3">\r
+                       <BEGIN>I{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL3">\r
+                       <BEGIN>L{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <!--\r
+               <EOL_SPAN AT_WHITESPACE_END="TRUE" DELEGATE="python::MAIN" TYPE="LITERAL3">&gt;&gt;&gt;</EOL_SPAN>\r
+               <EOL_SPAN AT_WHITESPACE_END="TRUE" DELEGATE="python::MAIN" TYPE="LITERAL3">...</EOL_SPAN>\r
+               -->\r
+               <EOL_SPAN AT_WHITESPACE_END="TRUE" TYPE="LITERAL3">&gt;&gt;&gt;</EOL_SPAN>\r
+               <EOL_SPAN AT_WHITESPACE_END="TRUE" TYPE="LITERAL3">...</EOL_SPAN>\r
+               <MARK_FOLLOWING TYPE="LITERAL3" AT_WHITESPACE_END="TRUE">@</MARK_FOLLOWING>\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/quake.xml b/extra/xmode/modes/quake.xml
new file mode 100644 (file)
index 0000000..08af289
--- /dev/null
@@ -0,0 +1,485 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+       Quake mode by Marcus Augustine <mail [at] ma [dash] online [dot] net>\r
+-->\r
+<MODE>\r
+    <PROPS>\r
+        <PROPERTY NAME="commentStart" VALUE="/*" />\r
+        <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+        <PROPERTY NAME="lineComment" VALUE="//" />\r
+    </PROPS>\r
+\r
+    <RULES IGNORE_CASE="TRUE">\r
+            <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                <BEGIN>"</BEGIN>\r
+                <END>"</END>\r
+            </SPAN>\r
+            \r
+            <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                <BEGIN>'</BEGIN>\r
+                <END>'</END>\r
+            </SPAN>\r
+            \r
+            <SPAN TYPE="COMMENT1">\r
+                <BEGIN>/*</BEGIN>\r
+                <END>*/</END>\r
+            </SPAN>\r
+            \r
+             <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+            \r
+            <KEYWORDS>\r
+                <KEYWORD2>+attack</KEYWORD2>\r
+                <KEYWORD2>+back</KEYWORD2>\r
+                <KEYWORD2>+forward</KEYWORD2>\r
+                <KEYWORD2>+klook</KEYWORD2>\r
+                <KEYWORD2>+left</KEYWORD2>\r
+                <KEYWORD2>+lookdown</KEYWORD2>\r
+                <KEYWORD2>+lookup</KEYWORD2>\r
+                <KEYWORD2>+mlook</KEYWORD2>\r
+                <KEYWORD2>+movedown</KEYWORD2>\r
+                <KEYWORD2>+moveleft</KEYWORD2>\r
+                <KEYWORD2>+moveright</KEYWORD2>\r
+                <KEYWORD2>+moveup</KEYWORD2>\r
+                <KEYWORD2>+right</KEYWORD2>\r
+                <KEYWORD2>+speed</KEYWORD2>\r
+                <KEYWORD2>+strafe</KEYWORD2>\r
+                <KEYWORD2>+use</KEYWORD2>\r
+                <KEYWORD2>-attack</KEYWORD2>\r
+                <KEYWORD2>-back</KEYWORD2>\r
+                <KEYWORD2>-forward</KEYWORD2>\r
+                <KEYWORD2>-klook</KEYWORD2>\r
+                <KEYWORD2>-left</KEYWORD2>\r
+                <KEYWORD2>-lookdown</KEYWORD2>\r
+                <KEYWORD2>-lookup</KEYWORD2>\r
+                <KEYWORD2>-mlook</KEYWORD2>\r
+                <KEYWORD2>-movedown</KEYWORD2>\r
+                <KEYWORD2>-moveleft</KEYWORD2>\r
+                <KEYWORD2>-moveright</KEYWORD2>\r
+                <KEYWORD2>-moveup</KEYWORD2>\r
+                <KEYWORD2>-right</KEYWORD2>\r
+                <KEYWORD2>-speed</KEYWORD2>\r
+                <KEYWORD2>-strafe</KEYWORD2>\r
+                <KEYWORD2>-use</KEYWORD2>\r
+                <KEYWORD3>adr0</KEYWORD3>\r
+                <KEYWORD3>adr1</KEYWORD3>\r
+                <KEYWORD3>adr2</KEYWORD3>\r
+                <KEYWORD3>adr3</KEYWORD3>\r
+                <KEYWORD3>adr4</KEYWORD3>\r
+                <KEYWORD3>adr5</KEYWORD3>\r
+                <KEYWORD3>adr6</KEYWORD3>\r
+                <KEYWORD3>adr7</KEYWORD3>\r
+                <KEYWORD3>adr8</KEYWORD3>\r
+                <KEYWORD3>alias</KEYWORD3>\r
+                <KEYWORD3>allow_download</KEYWORD3>\r
+                <KEYWORD3>allow_download_maps</KEYWORD3>\r
+                <KEYWORD3>allow_download_models</KEYWORD3>\r
+                <KEYWORD3>allow_download_players</KEYWORD3>\r
+                <KEYWORD3>allow_download_sounds</KEYWORD3>\r
+                <KEYWORD3>basedir</KEYWORD3>\r
+                <KEYWORD1>bind</KEYWORD1>\r
+                <KEYWORD3>bindlist</KEYWORD3>\r
+                <KEYWORD3>bob_pitch</KEYWORD3>\r
+                <KEYWORD3>bob_roll</KEYWORD3>\r
+                <KEYWORD3>bob_up</KEYWORD3>\r
+                <KEYWORD3>cd</KEYWORD3>\r
+                <KEYWORD3>cd_loopcount</KEYWORD3>\r
+                <KEYWORD3>cd_looptrack</KEYWORD3>\r
+                <KEYWORD3>cd_nocd</KEYWORD3>\r
+                <KEYWORD3>cddir</KEYWORD3>\r
+                <KEYWORD3>centerview</KEYWORD3>\r
+                <KEYWORD3>changing</KEYWORD3>\r
+                <KEYWORD3>cheats</KEYWORD3>\r
+                <KEYWORD3>cl_anglespeedkey</KEYWORD3>\r
+                <KEYWORD3>cl_autoskins</KEYWORD3>\r
+                <KEYWORD3>cl_blend</KEYWORD3>\r
+                <KEYWORD3>cl_entities</KEYWORD3>\r
+                <KEYWORD3>cl_footsteps</KEYWORD3>\r
+                <KEYWORD3>cl_forwardspeed</KEYWORD3>\r
+                <KEYWORD3>cl_gun</KEYWORD3>\r
+                <KEYWORD3>cl_lights</KEYWORD3>\r
+                <KEYWORD3>cl_maxfps</KEYWORD3>\r
+                <KEYWORD3>cl_nodelta</KEYWORD3>\r
+                <KEYWORD3>cl_noskins</KEYWORD3>\r
+                <KEYWORD3>cl_particles</KEYWORD3>\r
+                <KEYWORD3>cl_pitchspeed</KEYWORD3>\r
+                <KEYWORD3>cl_predict</KEYWORD3>\r
+                <KEYWORD3>cl_run</KEYWORD3>\r
+                <KEYWORD3>cl_showmiss</KEYWORD3>\r
+                <KEYWORD3>cl_shownet</KEYWORD3>\r
+                <KEYWORD3>cl_sidespeed</KEYWORD3>\r
+                <KEYWORD3>cl_stats</KEYWORD3>\r
+                <KEYWORD3>cl_stereo</KEYWORD3>\r
+                <KEYWORD3>cl_stereo_separation</KEYWORD3>\r
+                <KEYWORD3>cl_testblend</KEYWORD3>\r
+                <KEYWORD3>cl_testentities</KEYWORD3>\r
+                <KEYWORD3>cl_testlights</KEYWORD3>\r
+                <KEYWORD3>cl_testparticles</KEYWORD3>\r
+                <KEYWORD3>cl_timeout</KEYWORD3>\r
+                <KEYWORD3>cl_upspeed</KEYWORD3>\r
+                <KEYWORD3>cl_vwep</KEYWORD3>\r
+                <KEYWORD3>cl_yawspeed</KEYWORD3>\r
+                <KEYWORD3>clear</KEYWORD3>\r
+                <KEYWORD3>clientport</KEYWORD3>\r
+                <KEYWORD3>cmd</KEYWORD3>\r
+                <KEYWORD3>cmdlist</KEYWORD3>\r
+                <KEYWORD3>con_notifytime</KEYWORD3>\r
+                <KEYWORD3>condump</KEYWORD3>\r
+                <KEYWORD3>connect</KEYWORD3>\r
+                <KEYWORD3>coop</KEYWORD3>\r
+                <KEYWORD3>crosshair</KEYWORD3>\r
+                <KEYWORD3>cvarlist</KEYWORD3>\r
+                <KEYWORD3>deathmatch</KEYWORD3>\r
+                <KEYWORD3>debuggraph</KEYWORD3>\r
+                <KEYWORD3>dedicated</KEYWORD3>\r
+                <KEYWORD3>demomap</KEYWORD3>\r
+                <KEYWORD3>developer</KEYWORD3>\r
+                <KEYWORD3>dir</KEYWORD3>\r
+                <KEYWORD3>disconnect</KEYWORD3>\r
+                <KEYWORD3>dmflags</KEYWORD3>\r
+                <KEYWORD3>download</KEYWORD3>\r
+                <KEYWORD3>drop</KEYWORD3>\r
+                <KEYWORD3>dumpuser</KEYWORD3>\r
+                <KEYWORD3>echo</KEYWORD3>\r
+                <KEYWORD3>error</KEYWORD3>\r
+                <KEYWORD3>exec</KEYWORD3>\r
+                <KEYWORD3>filterban</KEYWORD3>\r
+                <KEYWORD3>fixedtime</KEYWORD3>\r
+                <KEYWORD3>flood_msgs</KEYWORD3>\r
+                <KEYWORD3>flood_persecond</KEYWORD3>\r
+                <KEYWORD3>flood_waitdelay</KEYWORD3>\r
+                <KEYWORD3>flushmap</KEYWORD3>\r
+                <KEYWORD3>fov</KEYWORD3>\r
+                <KEYWORD3>fraglimit</KEYWORD3>\r
+                <KEYWORD3>freelook</KEYWORD3>\r
+                <KEYWORD3>g_select_empty</KEYWORD3>\r
+                <KEYWORD3>game</KEYWORD3>\r
+                <KEYWORD3>gamedate</KEYWORD3>\r
+                <KEYWORD3>gamedir</KEYWORD3>\r
+                <KEYWORD3>gamemap</KEYWORD3>\r
+                <KEYWORD3>gamename</KEYWORD3>\r
+                <KEYWORD3>gameversion</KEYWORD3>\r
+                <KEYWORD3>gender</KEYWORD3>\r
+                <KEYWORD3>gender_auto</KEYWORD3>\r
+                <KEYWORD3>give</KEYWORD3>\r
+                <KEYWORD3>gl_3dlabs_broken</KEYWORD3>\r
+                <KEYWORD3>gl_allow_software</KEYWORD3>\r
+                <KEYWORD3>gl_bitdepth</KEYWORD3>\r
+                <KEYWORD3>gl_clear</KEYWORD3>\r
+                <KEYWORD3>gl_cull</KEYWORD3>\r
+                <KEYWORD3>gl_drawbuffer</KEYWORD3>\r
+                <KEYWORD3>gl_driver</KEYWORD3>\r
+                <KEYWORD3>gl_dynamic</KEYWORD3>\r
+                <KEYWORD3>gl_ext_compiled_vertex_array</KEYWORD3>\r
+                <KEYWORD3>gl_ext_multitexture</KEYWORD3>\r
+                <KEYWORD3>gl_ext_palettedtexture</KEYWORD3>\r
+                <KEYWORD3>gl_ext_pointparameters</KEYWORD3>\r
+                <KEYWORD3>gl_ext_swapinterval</KEYWORD3>\r
+                <KEYWORD3>gl_finish</KEYWORD3>\r
+                <KEYWORD3>gl_flashblend</KEYWORD3>\r
+                <KEYWORD3>gl_lightmap</KEYWORD3>\r
+                <KEYWORD3>gl_lockpvs</KEYWORD3>\r
+                <KEYWORD3>gl_log</KEYWORD3>\r
+                <KEYWORD3>gl_mode</KEYWORD3>\r
+                <KEYWORD3>gl_modulate</KEYWORD3>\r
+                <KEYWORD3>gl_monolightmap</KEYWORD3>\r
+                <KEYWORD3>gl_nobind</KEYWORD3>\r
+                <KEYWORD3>gl_nosubimage</KEYWORD3>\r
+                <KEYWORD3>gl_particle_att_a</KEYWORD3>\r
+                <KEYWORD3>gl_particle_att_b</KEYWORD3>\r
+                <KEYWORD3>gl_particle_att_c</KEYWORD3>\r
+                <KEYWORD3>gl_particle_max_size</KEYWORD3>\r
+                <KEYWORD3>gl_particle_min_size</KEYWORD3>\r
+                <KEYWORD3>gl_particle_size</KEYWORD3>\r
+                <KEYWORD3>gl_picmip</KEYWORD3>\r
+                <KEYWORD3>gl_playermip</KEYWORD3>\r
+                <KEYWORD3>gl_polyblend</KEYWORD3>\r
+                <KEYWORD3>gl_round_down</KEYWORD3>\r
+                <KEYWORD3>gl_saturatelighting</KEYWORD3>\r
+                <KEYWORD3>gl_shadows</KEYWORD3>\r
+                <KEYWORD3>gl_showtris</KEYWORD3>\r
+                <KEYWORD3>gl_skymip</KEYWORD3>\r
+                <KEYWORD3>gl_swapinterval</KEYWORD3>\r
+                <KEYWORD3>gl_texturealphamode</KEYWORD3>\r
+                <KEYWORD3>gl_texturemode</KEYWORD3>\r
+                <KEYWORD3>gl_texturesolidmode</KEYWORD3>\r
+                <KEYWORD3>gl_triplebuffer</KEYWORD3>\r
+                <KEYWORD3>gl_vertex_arrays</KEYWORD3>\r
+                <KEYWORD3>gl_ztrick</KEYWORD3>\r
+                <KEYWORD3>god</KEYWORD3>\r
+                <KEYWORD3>graphheight</KEYWORD3>\r
+                <KEYWORD3>graphscale</KEYWORD3>\r
+                <KEYWORD3>graphshift</KEYWORD3>\r
+                <KEYWORD3>gun_model</KEYWORD3>\r
+                <KEYWORD3>gun_next</KEYWORD3>\r
+                <KEYWORD3>gun_prev</KEYWORD3>\r
+                <KEYWORD3>gun_x</KEYWORD3>\r
+                <KEYWORD3>gun_y</KEYWORD3>\r
+                <KEYWORD3>gun_z</KEYWORD3>\r
+                <KEYWORD3>hand</KEYWORD3>\r
+                <KEYWORD3>heartbeat</KEYWORD3>\r
+                <KEYWORD3>host_speeds</KEYWORD3>\r
+                <KEYWORD3>hostname</KEYWORD3>\r
+                <KEYWORD3>hostport</KEYWORD3>\r
+                <KEYWORD3>imagelist</KEYWORD3>\r
+                <KEYWORD3>impulse</KEYWORD3>\r
+                <KEYWORD3>in_initjoy</KEYWORD3>\r
+                <KEYWORD3>in_initmouse</KEYWORD3>\r
+                <KEYWORD3>in_joystick</KEYWORD3>\r
+                <KEYWORD3>in_mouse</KEYWORD3>\r
+                <KEYWORD3>info</KEYWORD3>\r
+                <KEYWORD3>intensity</KEYWORD3>\r
+                <KEYWORD3>invdrop</KEYWORD3>\r
+                <KEYWORD3>inven</KEYWORD3>\r
+                <KEYWORD3>invnext</KEYWORD3>\r
+                <KEYWORD3>invnextp</KEYWORD3>\r
+                <KEYWORD3>invnextw</KEYWORD3>\r
+                <KEYWORD3>invprev</KEYWORD3>\r
+                <KEYWORD3>invprevp</KEYWORD3>\r
+                <KEYWORD3>invprevw</KEYWORD3>\r
+                <KEYWORD3>invuse</KEYWORD3>\r
+                <KEYWORD3>ip</KEYWORD3>\r
+                <KEYWORD3>ip_clientport</KEYWORD3>\r
+                <KEYWORD3>ip_hostport</KEYWORD3>\r
+                <KEYWORD3>ipx_clientport</KEYWORD3>\r
+                <KEYWORD3>ipx_hostport</KEYWORD3>\r
+                <KEYWORD3>joy_advanced</KEYWORD3>\r
+                <KEYWORD3>joy_advancedupdate</KEYWORD3>\r
+                <KEYWORD3>joy_advaxisr</KEYWORD3>\r
+                <KEYWORD3>joy_advaxisu</KEYWORD3>\r
+                <KEYWORD3>joy_advaxisv</KEYWORD3>\r
+                <KEYWORD3>joy_advaxisx</KEYWORD3>\r
+                <KEYWORD3>joy_advaxisy</KEYWORD3>\r
+                <KEYWORD3>joy_advaxisz</KEYWORD3>\r
+                <KEYWORD3>joy_forwardsensitivity</KEYWORD3>\r
+                <KEYWORD3>joy_forwardthreshold</KEYWORD3>\r
+                <KEYWORD3>joy_name</KEYWORD3>\r
+                <KEYWORD3>joy_pitchsensitivity</KEYWORD3>\r
+                <KEYWORD3>joy_pitchthreshold</KEYWORD3>\r
+                <KEYWORD3>joy_sidesensitivity</KEYWORD3>\r
+                <KEYWORD3>joy_sidethreshold</KEYWORD3>\r
+                <KEYWORD3>joy_upsensitivity</KEYWORD3>\r
+                <KEYWORD3>joy_upthreshold</KEYWORD3>\r
+                <KEYWORD3>joy_yawsensitivity</KEYWORD3>\r
+                <KEYWORD3>joy_yawthreshold</KEYWORD3>\r
+                <KEYWORD3>kick</KEYWORD3>\r
+                <KEYWORD3>kill</KEYWORD3>\r
+                <KEYWORD3>killserver</KEYWORD3>\r
+                <KEYWORD3>link</KEYWORD3>\r
+                <KEYWORD3>load</KEYWORD3>\r
+                <KEYWORD3>loading</KEYWORD3>\r
+                <KEYWORD3>log_stats</KEYWORD3>\r
+                <KEYWORD3>logfile</KEYWORD3>\r
+                <KEYWORD3>lookspring</KEYWORD3>\r
+                <KEYWORD3>lookstrafe</KEYWORD3>\r
+                <KEYWORD3>m_filter</KEYWORD3>\r
+                <KEYWORD3>m_forward</KEYWORD3>\r
+                <KEYWORD3>m_pitch</KEYWORD3>\r
+                <KEYWORD3>m_side</KEYWORD3>\r
+                <KEYWORD3>m_yaw</KEYWORD3>\r
+                <KEYWORD3>map</KEYWORD3>\r
+                <KEYWORD3>map_noareas</KEYWORD3>\r
+                <KEYWORD3>mapname</KEYWORD3>\r
+                <KEYWORD3>maxclients</KEYWORD3>\r
+                <KEYWORD3>maxentities</KEYWORD3>\r
+                <KEYWORD3>maxspectators</KEYWORD3>\r
+                <KEYWORD3>menu_addressbook</KEYWORD3>\r
+                <KEYWORD3>menu_credits</KEYWORD3>\r
+                <KEYWORD3>menu_dmoptions</KEYWORD3>\r
+                <KEYWORD3>menu_game</KEYWORD3>\r
+                <KEYWORD3>menu_joinserver</KEYWORD3>\r
+                <KEYWORD3>menu_keys</KEYWORD3>\r
+                <KEYWORD3>menu_loadgame</KEYWORD3>\r
+                <KEYWORD3>menu_main</KEYWORD3>\r
+                <KEYWORD3>menu_multiplayer</KEYWORD3>\r
+                <KEYWORD3>menu_options</KEYWORD3>\r
+                <KEYWORD3>menu_playerconfig</KEYWORD3>\r
+                <KEYWORD3>menu_quit</KEYWORD3>\r
+                <KEYWORD3>menu_savegame</KEYWORD3>\r
+                <KEYWORD3>menu_startserver</KEYWORD3>\r
+                <KEYWORD3>menu_video</KEYWORD3>\r
+                <KEYWORD3>messagemode</KEYWORD3>\r
+                <KEYWORD3>messagemode3</KEYWORD3>\r
+                <KEYWORD3>modellist</KEYWORD3>\r
+                <KEYWORD3>msg</KEYWORD3>\r
+                <KEYWORD3>name</KEYWORD3>\r
+                <KEYWORD3>needpass</KEYWORD3>\r
+                <KEYWORD3>net_shownet</KEYWORD3>\r
+                <KEYWORD3>netgraph</KEYWORD3>\r
+                <KEYWORD3>nextserver</KEYWORD3>\r
+                <KEYWORD3>noclip</KEYWORD3>\r
+                <KEYWORD3>noipx</KEYWORD3>\r
+                <KEYWORD3>notarget</KEYWORD3>\r
+                <KEYWORD3>noudp</KEYWORD3>\r
+                <KEYWORD3>password</KEYWORD3>\r
+                <KEYWORD3>path</KEYWORD3>\r
+                <KEYWORD3>pause</KEYWORD3>\r
+                <KEYWORD3>paused</KEYWORD3>\r
+                <KEYWORD3>pingservers</KEYWORD3>\r
+                <KEYWORD3>play</KEYWORD3>\r
+                <KEYWORD3>playerlist</KEYWORD3>\r
+                <KEYWORD3>players</KEYWORD3>\r
+                <KEYWORD3>port</KEYWORD3>\r
+                <KEYWORD3>precache</KEYWORD3>\r
+                <KEYWORD3>prog</KEYWORD3>\r
+                <KEYWORD3>protocol</KEYWORD3>\r
+                <KEYWORD3>public</KEYWORD3>\r
+                <KEYWORD3>qport</KEYWORD3>\r
+                <KEYWORD3>quit</KEYWORD3>\r
+                <KEYWORD3>r_drawentities</KEYWORD3>\r
+                <KEYWORD3>r_drawworld</KEYWORD3>\r
+                <KEYWORD3>r_dspeeds</KEYWORD3>\r
+                <KEYWORD3>r_fullbright</KEYWORD3>\r
+                <KEYWORD3>r_lerpmodels</KEYWORD3>\r
+                <KEYWORD3>r_lightlevel</KEYWORD3>\r
+                <KEYWORD3>r_nocull</KEYWORD3>\r
+                <KEYWORD3>r_norefresh</KEYWORD3>\r
+                <KEYWORD3>r_novis</KEYWORD3>\r
+                <KEYWORD3>r_speeds</KEYWORD3>\r
+                <KEYWORD3>rate</KEYWORD3>\r
+                <KEYWORD3>rcon</KEYWORD3>\r
+                <KEYWORD3>rcon_address</KEYWORD3>\r
+                <KEYWORD3>rcon_password</KEYWORD3>\r
+                <KEYWORD3>reconnect</KEYWORD3>\r
+                <KEYWORD3>record</KEYWORD3>\r
+                <KEYWORD3>run_pitch</KEYWORD3>\r
+                <KEYWORD3>run_roll</KEYWORD3>\r
+                <KEYWORD3>s_initsound</KEYWORD3>\r
+                <KEYWORD3>s_khz</KEYWORD3>\r
+                <KEYWORD3>s_loadas8bit</KEYWORD3>\r
+                <KEYWORD3>s_mixahead</KEYWORD3>\r
+                <KEYWORD3>s_primary</KEYWORD3>\r
+                <KEYWORD3>s_show</KEYWORD3>\r
+                <KEYWORD3>s_testsound</KEYWORD3>\r
+                <KEYWORD3>s_volume</KEYWORD3>\r
+                <KEYWORD3>s_wavonly</KEYWORD3>\r
+                <KEYWORD3>save</KEYWORD3>\r
+                <KEYWORD3>say</KEYWORD3>\r
+                <KEYWORD3>say_team</KEYWORD3>\r
+                <KEYWORD3>score</KEYWORD3>\r
+                <KEYWORD3>scr_centertime</KEYWORD3>\r
+                <KEYWORD3>scr_conspeed</KEYWORD3>\r
+                <KEYWORD3>scr_drawall</KEYWORD3>\r
+                <KEYWORD3>scr_printspeed</KEYWORD3>\r
+                <KEYWORD3>scr_showpause</KEYWORD3>\r
+                <KEYWORD3>scr_showturtle</KEYWORD3>\r
+                <KEYWORD3>screenshot</KEYWORD3>\r
+                <KEYWORD3>sensitivity</KEYWORD3>\r
+                <KEYWORD3>serverinfo</KEYWORD3>\r
+                <KEYWORD3>serverrecord</KEYWORD3>\r
+                <KEYWORD3>serverstop</KEYWORD3>\r
+                <KEYWORD1>set</KEYWORD1>\r
+                <KEYWORD3>setenv</KEYWORD3>\r
+                <KEYWORD3>setmaster</KEYWORD3>\r
+                <KEYWORD3>showclamp</KEYWORD3>\r
+                <KEYWORD3>showdrop</KEYWORD3>\r
+                <KEYWORD3>showpackets</KEYWORD3>\r
+                <KEYWORD3>showtrace</KEYWORD3>\r
+                <KEYWORD3>sizedown</KEYWORD3>\r
+                <KEYWORD3>sizeup</KEYWORD3>\r
+                <KEYWORD3>skill</KEYWORD3>\r
+                <KEYWORD3>skin</KEYWORD3>\r
+                <KEYWORD3>skins</KEYWORD3>\r
+                <KEYWORD3>sky</KEYWORD3>\r
+                <KEYWORD3>snd_restart</KEYWORD3>\r
+                <KEYWORD3>soundinfo</KEYWORD3>\r
+                <KEYWORD3>soundlist</KEYWORD3>\r
+                <KEYWORD3>spectator</KEYWORD3>\r
+                <KEYWORD3>spectator_password</KEYWORD3>\r
+                <KEYWORD3>status</KEYWORD3>\r
+                <KEYWORD3>stop</KEYWORD3>\r
+                <KEYWORD3>stopsound</KEYWORD3>\r
+                <KEYWORD3>sv</KEYWORD3>\r
+                <KEYWORD3>sv_airaccelerate</KEYWORD3>\r
+                <KEYWORD3>sv_enforcetime</KEYWORD3>\r
+                <KEYWORD3>sv_gravity</KEYWORD3>\r
+                <KEYWORD3>sv_maplist</KEYWORD3>\r
+                <KEYWORD3>sv_maxvelocity</KEYWORD3>\r
+                <KEYWORD3>sv_noreload</KEYWORD3>\r
+                <KEYWORD3>sv_reconnect_limit</KEYWORD3>\r
+                <KEYWORD3>sv_rollangle</KEYWORD3>\r
+                <KEYWORD3>sv_rollspeed</KEYWORD3>\r
+                <KEYWORD3>sw_allow_modex</KEYWORD3>\r
+                <KEYWORD3>sw_clearcolor</KEYWORD3>\r
+                <KEYWORD3>sw_drawflat</KEYWORD3>\r
+                <KEYWORD3>sw_draworder</KEYWORD3>\r
+                <KEYWORD3>sw_maxedges</KEYWORD3>\r
+                <KEYWORD3>sw_maxsurfs</KEYWORD3>\r
+                <KEYWORD3>sw_mipcap</KEYWORD3>\r
+                <KEYWORD3>sw_mipscale</KEYWORD3>\r
+                <KEYWORD3>sw_mode</KEYWORD3>\r
+                <KEYWORD3>sw_polymodelstats</KEYWORD3>\r
+                <KEYWORD3>sw_reportedgeout</KEYWORD3>\r
+                <KEYWORD3>sw_reportsurfout</KEYWORD3>\r
+                <KEYWORD3>sw_stipplealpha</KEYWORD3>\r
+                <KEYWORD3>sw_surfcacheoverride</KEYWORD3>\r
+                <KEYWORD3>sw_waterwarp</KEYWORD3>\r
+                <KEYWORD3>timedemo</KEYWORD3>\r
+                <KEYWORD3>timegraph</KEYWORD3>\r
+                <KEYWORD3>timelimit</KEYWORD3>\r
+                <KEYWORD3>timeout</KEYWORD3>\r
+                <KEYWORD3>timerefresh</KEYWORD3>\r
+                <KEYWORD3>timescale</KEYWORD3>\r
+                <KEYWORD3>togglechat</KEYWORD3>\r
+                <KEYWORD3>toggleconsole</KEYWORD3>\r
+                <KEYWORD3>unbind</KEYWORD3>\r
+                <KEYWORD3>unbindall</KEYWORD3>\r
+                <KEYWORD3>use</KEYWORD3>\r
+                <KEYWORD3>userinfo</KEYWORD3>\r
+                <KEYWORD3>v_centermove</KEYWORD3>\r
+                <KEYWORD3>v_centerspeed</KEYWORD3>\r
+                <KEYWORD3>version</KEYWORD3>\r
+                <KEYWORD3>vid_front</KEYWORD3>\r
+                <KEYWORD3>vid_fullscreen</KEYWORD3>\r
+                <KEYWORD3>vid_gamma</KEYWORD3>\r
+                <KEYWORD3>vid_ref</KEYWORD3>\r
+                <KEYWORD3>vid_restart</KEYWORD3>\r
+                <KEYWORD3>vid_xpos</KEYWORD3>\r
+                <KEYWORD3>vid_ypos</KEYWORD3>\r
+                <KEYWORD3>viewpos</KEYWORD3>\r
+                <KEYWORD3>viewsize</KEYWORD3>\r
+                <KEYWORD3>wait</KEYWORD3>\r
+                <KEYWORD3>wave</KEYWORD3>\r
+                <KEYWORD3>weaplast</KEYWORD3>\r
+                <KEYWORD3>weapnext</KEYWORD3>\r
+                <KEYWORD3>weapprev</KEYWORD3>\r
+                <KEYWORD3>win_noalttab</KEYWORD3>\r
+                <KEYWORD3>z_stats</KEYWORD3>\r
+                <KEYWORD1>zombietime</KEYWORD1>\r
+                <KEYWORD4>shift</KEYWORD4>\r
+                <KEYWORD4>ctrl</KEYWORD4>\r
+                <KEYWORD4>space</KEYWORD4>\r
+                <KEYWORD4>tab</KEYWORD4>\r
+                <KEYWORD4>enter</KEYWORD4>\r
+                <KEYWORD4>escape</KEYWORD4>\r
+                <KEYWORD4>F1</KEYWORD4>\r
+                <KEYWORD4>F2</KEYWORD4>\r
+                <KEYWORD4>F3</KEYWORD4>\r
+                <KEYWORD4>F4</KEYWORD4>\r
+                <KEYWORD4>F5</KEYWORD4>\r
+                <KEYWORD4>F6</KEYWORD4>\r
+                <KEYWORD4>F7</KEYWORD4>\r
+                <KEYWORD4>F8</KEYWORD4>\r
+                <KEYWORD4>F9</KEYWORD4>\r
+                <KEYWORD4>F10</KEYWORD4>\r
+                <KEYWORD4>F11</KEYWORD4>\r
+                <KEYWORD4>F12</KEYWORD4>\r
+                <KEYWORD4>INS</KEYWORD4>\r
+                <KEYWORD4>DEL</KEYWORD4>\r
+                <KEYWORD4>PGUP</KEYWORD4>\r
+                <KEYWORD4>PGDN</KEYWORD4>\r
+                <KEYWORD4>HOME</KEYWORD4>\r
+                <KEYWORD4>END</KEYWORD4>\r
+                <KEYWORD4>MOUSE1</KEYWORD4>\r
+                <KEYWORD4>MOUSE2</KEYWORD4>\r
+                <KEYWORD4>uparrow</KEYWORD4>\r
+                <KEYWORD4>downarrow</KEYWORD4>\r
+                <KEYWORD4>leftarrow</KEYWORD4>\r
+                <KEYWORD4>rightarrow</KEYWORD4>\r
+                <KEYWORD4>mwheelup</KEYWORD4>\r
+                <KEYWORD4>mwheeldown</KEYWORD4>\r
+                <KEYWORD4>backspace</KEYWORD4>\r
+            </KEYWORDS>\r
+        </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/rcp.xml b/extra/xmode/modes/rcp.xml
new file mode 100644 (file)
index 0000000..1b2f4c5
--- /dev/null
@@ -0,0 +1,318 @@
+<?xml version="1.0"?>\r
+\r
+<!--\r
+ **\r
+ ** Pilrc *.prc highlight rules for jEdit\r
+ **\r
+ ** Marcin Orlowski - carlos@wfmh.org.pl\r
+ **\r
+ ** v1.0 (2006.04.25)\r
+ **\r
+-->\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+       <!--\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+       -->\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="TRUE">\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+       </RULES>\r
+\r
+\r
+       <RULES>\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+       </RULES>\r
+\r
+\r
+       <RULES ESCAPE="\" HIGHLIGHT_DIGITS="TRUE">\r
+               <PROPS>\r
+                       <PROPERTY NAME="commentStart" VALUE="/*" />\r
+                       <PROPERTY NAME="lineComment" VALUE="//" />\r
+               </PROPS>\r
+\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="RCP_LITERAL">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">//</EOL_SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">;</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+               <SEQ TYPE="OPERATOR">@</SEQ>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <FUNCTION>ALERT</FUNCTION>\r
+                       <FUNCTION>APPLICATION</FUNCTION>\r
+                       <FUNCTION>APPLICATIONICONNAME</FUNCTION>\r
+                       <FUNCTION>AREA</FUNCTION>\r
+                       <FUNCTION>BITMAP</FUNCTION>\r
+                       <FUNCTION>BITMAPCOLOR</FUNCTION>\r
+                       <FUNCTION>BITMAPCOLOR16</FUNCTION>\r
+                       <FUNCTION>BITMAPCOLOR16K</FUNCTION>\r
+                       <FUNCTION>BITMAPFAMILY</FUNCTION>\r
+                       <FUNCTION>BITMAPFAMILYEX</FUNCTION>\r
+                       <FUNCTION>BITMAPFAMILYSPECIAL</FUNCTION>\r
+                       <FUNCTION>BITMAPGREY</FUNCTION>\r
+                       <FUNCTION>BITMAPGREY16</FUNCTION>\r
+                       <FUNCTION>BITMAPSCREENFAMILY</FUNCTION>\r
+                       <FUNCTION>BOOTSCREENFAMILY</FUNCTION>\r
+                       <FUNCTION>BUTTON</FUNCTION>\r
+                       <FUNCTION>BUTTONS</FUNCTION>\r
+                       <FUNCTION>BYTELIST</FUNCTION>\r
+                       <FUNCTION>CATEGORIES</FUNCTION>\r
+                       <FUNCTION>CHECKBOX</FUNCTION>\r
+                       <FUNCTION>COUNTRYLOCALISATION</FUNCTION>\r
+                       <FUNCTION>DATA</FUNCTION>\r
+                       <FUNCTION>FEATURE</FUNCTION>\r
+                       <FUNCTION>FIELD</FUNCTION>\r
+                       <FUNCTION>FONTINDEX</FUNCTION>\r
+                       <FUNCTION>FORM</FUNCTION>\r
+                       <FUNCTION>FORMBITMAP</FUNCTION>\r
+                       <FUNCTION>GADGET</FUNCTION>\r
+                       <FUNCTION>GENERATEHEADER</FUNCTION>\r
+                       <FUNCTION>GRAFFITIINPUTAREA</FUNCTION>\r
+                       <FUNCTION>GRAFFITISTATEINDICATOR</FUNCTION>\r
+                       <FUNCTION>HEX</FUNCTION>\r
+                       <FUNCTION>ICON</FUNCTION>\r
+                       <FUNCTION>ICONFAMILY</FUNCTION>\r
+                       <FUNCTION>ICONFAMILYEX</FUNCTION>\r
+                       <FUNCTION>INTEGER</FUNCTION>\r
+                       <FUNCTION>KEYBOARD</FUNCTION>\r
+                       <FUNCTION>LABEL</FUNCTION>\r
+                       <FUNCTION>LAUNCHERCATEGORY</FUNCTION>\r
+                       <FUNCTION>LIST</FUNCTION>\r
+                       <FUNCTION>LONGWORDLIST</FUNCTION>\r
+                       <FUNCTION>MENU</FUNCTION>\r
+                       <FUNCTION>MENUITEM</FUNCTION>\r
+                       <FUNCTION>MESSAGE</FUNCTION>\r
+                       <FUNCTION>MIDI</FUNCTION>\r
+                       <FUNCTION>NOGRAFFITISTATEINDICATOR</FUNCTION>\r
+                       <FUNCTION>PALETTETABLE</FUNCTION>\r
+                       <FUNCTION>POPUPLIST</FUNCTION>\r
+                       <FUNCTION>POPUPTRIGGER</FUNCTION>\r
+                       <FUNCTION>PULLDOWN</FUNCTION>\r
+                       <FUNCTION>PUSHBUTTON</FUNCTION>\r
+                       <FUNCTION>REPEATBUTTON</FUNCTION>\r
+                       <FUNCTION>RESETAUTOID</FUNCTION>\r
+                       <FUNCTION>SCROLLBAR</FUNCTION>\r
+                       <FUNCTION>SELECTORTRIGGER</FUNCTION>\r
+                       <FUNCTION>SLIDER</FUNCTION>\r
+                       <FUNCTION>SMALLICON</FUNCTION>\r
+                       <FUNCTION>SMALLICONFAMILY</FUNCTION>\r
+                       <FUNCTION>SMALLICONFAMILYEX</FUNCTION>\r
+                       <FUNCTION>STRING</FUNCTION>\r
+                       <FUNCTION>STRINGTABLE</FUNCTION>\r
+                       <FUNCTION>TABLE</FUNCTION>\r
+                       <FUNCTION>TITLE</FUNCTION>\r
+                       <FUNCTION>TRANSLATION</FUNCTION>\r
+                       <FUNCTION>TRAP</FUNCTION>\r
+                       <FUNCTION>VERSION</FUNCTION>\r
+                       <FUNCTION>WORDLIST</FUNCTION>\r
+\r
+                       <KEYWORD1>PREVTOP</KEYWORD1>\r
+                       <KEYWORD1>PREVBOTTOM</KEYWORD1>\r
+                       <KEYWORD1>PREVLEFT</KEYWORD1>\r
+                       <KEYWORD1>PREVRIGHT</KEYWORD1>\r
+                       <KEYWORD1>AUTO</KEYWORD1>\r
+                       <KEYWORD1>AUTOID</KEYWORD1>\r
+\r
+                       <KEYWORD2>AT</KEYWORD2>\r
+                       <KEYWORD2>AUTOSHIFT</KEYWORD2>\r
+                       <KEYWORD2>BACKGROUNDID</KEYWORD2>\r
+                       <KEYWORD2>BITMAPID</KEYWORD2>\r
+                       <KEYWORD2>BOLDFRAME</KEYWORD2>\r
+                       <KEYWORD2>BPP</KEYWORD2>\r
+                       <KEYWORD2>CHECKED</KEYWORD2>\r
+                       <KEYWORD2>COLORTABLE</KEYWORD2>\r
+                       <KEYWORD2>COLUMNS</KEYWORD2>\r
+                       <KEYWORD2>COLUMNWIDTHS</KEYWORD2>\r
+                       <KEYWORD2>COMPRESS</KEYWORD2>\r
+                       <KEYWORD2>COMPRESSBEST</KEYWORD2>\r
+                       <KEYWORD2>COMPRESSPACKBITS</KEYWORD2>\r
+                       <KEYWORD2>COMPRESSRLE</KEYWORD2>\r
+                       <KEYWORD2>COMPRESSSCANLINE</KEYWORD2>\r
+                       <KEYWORD2>CONFIRMATION</KEYWORD2>\r
+                       <KEYWORD2>COUNTRY</KEYWORD2>\r
+                       <KEYWORD2>CREATOR</KEYWORD2>\r
+                       <KEYWORD2>CURRENCYDECIMALPLACES</KEYWORD2>\r
+                       <KEYWORD2>CURRENCYNAME</KEYWORD2>\r
+                       <KEYWORD2>CURRENCYSYMBOL</KEYWORD2>\r
+                       <KEYWORD2>CURRENCYUNIQUESYMBOL</KEYWORD2>\r
+                       <KEYWORD2>DATEFORMAT</KEYWORD2>\r
+                       <KEYWORD2>DAYLIGHTSAVINGS</KEYWORD2>\r
+                       <KEYWORD2>DEFAULTBTNID</KEYWORD2>\r
+                       <KEYWORD2>DEFAULTBUTTON</KEYWORD2>\r
+                       <KEYWORD2>DENSITY</KEYWORD2>\r
+                       <KEYWORD2>DISABLED</KEYWORD2>\r
+                       <KEYWORD2>DYNAMICSIZE</KEYWORD2>\r
+                       <KEYWORD2>EDITABLE</KEYWORD2>\r
+                       <KEYWORD2>ENTRY</KEYWORD2>\r
+                       <KEYWORD2>ERROR</KEYWORD2>\r
+                       <KEYWORD2>EXTENDED</KEYWORD2>\r
+                       <KEYWORD2>FEEDBACK</KEYWORD2>\r
+                       <KEYWORD2>FILE</KEYWORD2>\r
+                       <KEYWORD2>FONTID</KEYWORD2>\r
+                       <KEYWORD2>FORCECOMPRESS</KEYWORD2>\r
+                       <KEYWORD2>FRAME</KEYWORD2>\r
+                       <KEYWORD2>GRAFFITI</KEYWORD2>\r
+                       <KEYWORD2>GRAPHICAL</KEYWORD2>\r
+                       <KEYWORD2>GROUP</KEYWORD2>\r
+                       <KEYWORD2>HASSCROLLBAR</KEYWORD2>\r
+                       <KEYWORD2>HELPID</KEYWORD2>\r
+                       <KEYWORD2>ID</KEYWORD2>\r
+                       <KEYWORD2>INDEX</KEYWORD2>\r
+                       <KEYWORD2>INFORMATION</KEYWORD2>\r
+                       <KEYWORD2>KEYDOWNCHR</KEYWORD2>\r
+                       <KEYWORD2>KEYDOWNKEYCODE</KEYWORD2>\r
+                       <KEYWORD2>KEYDOWNMODIFIERS</KEYWORD2>\r
+                       <KEYWORD2>LANGUAGE</KEYWORD2>\r
+                       <KEYWORD2>LEFTALIGN</KEYWORD2>\r
+                       <KEYWORD2>LEFTANCHOR</KEYWORD2>\r
+                       <KEYWORD2>LONGDATEFORMAT</KEYWORD2>\r
+                       <KEYWORD2>MAX</KEYWORD2>\r
+                       <KEYWORD2>MAXCHARS</KEYWORD2>\r
+                       <KEYWORD2>MEASUREMENTSYSTEM</KEYWORD2>\r
+                       <KEYWORD2>MENUID</KEYWORD2>\r
+                       <KEYWORD2>MIN</KEYWORD2>\r
+                       <KEYWORD2>LOCALE</KEYWORD2>\r
+                       <KEYWORD2>MINUTESWESTOFGMT</KEYWORD2>\r
+                       <KEYWORD2>MODAL</KEYWORD2>\r
+                       <KEYWORD2>MULTIPLELINES</KEYWORD2>\r
+                       <KEYWORD2>NAME</KEYWORD2>\r
+                       <KEYWORD2>NOCOLORTABLE</KEYWORD2>\r
+                       <KEYWORD2>NOCOMPRESS</KEYWORD2>\r
+                       <KEYWORD2>NOFRAME</KEYWORD2>\r
+                       <KEYWORD2>NONEDITABLE</KEYWORD2>\r
+                       <KEYWORD2>NONEXTENDED</KEYWORD2>\r
+                       <KEYWORD2>NONUSABLE</KEYWORD2>\r
+                       <KEYWORD2>NOSAVEBEHIND</KEYWORD2>\r
+                       <KEYWORD2>NUMBER</KEYWORD2>\r
+                       <KEYWORD2>NUMBERFORMAT</KEYWORD2>\r
+                       <KEYWORD2>NUMERIC</KEYWORD2>\r
+                       <KEYWORD2>PAGESIZE</KEYWORD2>\r
+                       <KEYWORD2>RECTFRAME</KEYWORD2>\r
+                       <KEYWORD2>RIGHTALIGN</KEYWORD2>\r
+                       <KEYWORD2>RIGHTANCHOR</KEYWORD2>\r
+                       <KEYWORD2>ROWS</KEYWORD2>\r
+                       <KEYWORD2>SAVEBEHIND</KEYWORD2>\r
+                       <KEYWORD2>SEARCH</KEYWORD2>\r
+                       <KEYWORD2>SCREEN</KEYWORD2>\r
+                       <KEYWORD2>SELECTEDBITMAPID</KEYWORD2>\r
+                       <KEYWORD2>SINGLELINE</KEYWORD2>\r
+                       <KEYWORD2>THUMBID</KEYWORD2>\r
+                       <KEYWORD2>TRANSPARENTINDEX</KEYWORD2>\r
+                       <KEYWORD2>TIMEFORMAT</KEYWORD2>\r
+                       <KEYWORD2>UNDERLINED</KEYWORD2>\r
+                       <KEYWORD2>USABLE</KEYWORD2>\r
+                       <KEYWORD2>VALUE</KEYWORD2>\r
+                       <KEYWORD2>VERTICAL</KEYWORD2>\r
+                       <KEYWORD2>VISIBLEITEMS</KEYWORD2>\r
+                       <KEYWORD2>WARNING</KEYWORD2>\r
+                       <KEYWORD2>WEEKSTARTDAY</KEYWORD2>\r
+\r
+                       <KEYWORD2>FONT</KEYWORD2>\r
+                       <!-- FONT ID -->\r
+                       <KEYWORD2>TRANSPARENT</KEYWORD2>\r
+\r
+                       <KEYWORD3>BEGIN</KEYWORD3>\r
+                       <KEYWORD3>END</KEYWORD3>\r
+\r
+                       <!-- Language constructs (24) -->\r
+                       <KEYWORD4>#include</KEYWORD4>\r
+                       <KEYWORD4>#define</KEYWORD4>\r
+                       <KEYWORD4>equ</KEYWORD4>\r
+                       <KEYWORD4>#undef</KEYWORD4>\r
+                       <KEYWORD4>#ifdef</KEYWORD4>\r
+                       <KEYWORD4>#ifndef</KEYWORD4>\r
+                       <KEYWORD4>#else</KEYWORD4>\r
+                       <KEYWORD4>#endif</KEYWORD4>\r
+\r
+                       <KEYWORD4>package</KEYWORD4>\r
+                       <!-- syn region pilrcInclude start="public class" end="}" -->\r
+\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="RCP_LITERAL" ESCAPE="\" DEFAULT="LITERAL1">\r
+               <MARK_FOLLOWING TYPE="KEYWORD3">$</MARK_FOLLOWING>\r
+               <SEQ TYPE="LITERAL1">\</SEQ>\r
+               <SEQ TYPE="LITERAL1">=</SEQ>\r
+               <SEQ TYPE="LITERAL1">!</SEQ>\r
+               <SEQ TYPE="LITERAL1">=</SEQ>\r
+               <SEQ TYPE="LITERAL1">+</SEQ>\r
+               <SEQ TYPE="LITERAL1">-</SEQ>\r
+               <SEQ TYPE="LITERAL1">/</SEQ>\r
+               <SEQ TYPE="LITERAL1">*</SEQ>\r
+               <SEQ TYPE="LITERAL1">%</SEQ>\r
+               <SEQ TYPE="LITERAL1">|</SEQ>\r
+               <SEQ TYPE="LITERAL1">^</SEQ>\r
+               <SEQ TYPE="LITERAL1">~</SEQ>\r
+               <SEQ TYPE="LITERAL1">.</SEQ>\r
+               <SEQ TYPE="LITERAL1">}</SEQ>\r
+               <SEQ TYPE="LITERAL1">{</SEQ>\r
+               <SEQ TYPE="LITERAL1">,</SEQ>\r
+               <SEQ TYPE="LITERAL1">;</SEQ>\r
+               <SEQ TYPE="LITERAL1">]</SEQ>\r
+               <SEQ TYPE="LITERAL1">[</SEQ>\r
+               <SEQ TYPE="LITERAL1">?</SEQ>\r
+               <SEQ TYPE="LITERAL1">@</SEQ>\r
+               <SEQ TYPE="LITERAL1">:</SEQ>\r
+               <SEQ TYPE="LITERAL1">)</SEQ>\r
+               <SEQ TYPE="LITERAL1">'</SEQ>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/rd.xml b/extra/xmode/modes/rd.xml
new file mode 100644 (file)
index 0000000..2c94a64
--- /dev/null
@@ -0,0 +1,70 @@
+<?xml version="1.0" ?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd"> \r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <KEYWORDS>\r
+                       <KEYWORD1>\name</KEYWORD1>\r
+                       <KEYWORD1>\alias</KEYWORD1>\r
+                       <KEYWORD1>\title</KEYWORD1>\r
+                       <KEYWORD1>\description</KEYWORD1>\r
+                       <KEYWORD1>\synopsis</KEYWORD1>\r
+                       <KEYWORD1>\usage</KEYWORD1>\r
+                       <KEYWORD1>\arguments</KEYWORD1>\r
+                       <KEYWORD1>\details</KEYWORD1>\r
+                       <KEYWORD1>\value</KEYWORD1>\r
+                       <KEYWORD1>\references</KEYWORD1>\r
+                       <KEYWORD1>\note</KEYWORD1>\r
+                       <KEYWORD1>\author</KEYWORD1>\r
+                       <KEYWORD1>\seealso</KEYWORD1>\r
+                       <KEYWORD1>\examples</KEYWORD1>\r
+                       <KEYWORD1>\keyword</KEYWORD1>\r
+                       <KEYWORD2>\itemize</KEYWORD2>\r
+                       <KEYWORD2>\method</KEYWORD2>\r
+                       <KEYWORD2>\docType</KEYWORD2>\r
+                       <KEYWORD2>\format</KEYWORD2>\r
+                       <KEYWORD2>\source</KEYWORD2>\r
+                       <KEYWORD2>\itemize</KEYWORD2>\r
+                       <KEYWORD2>\section</KEYWORD2>\r
+                       <KEYWORD2>\enumerate</KEYWORD2>\r
+                       <KEYWORD2>\describe</KEYWORD2>\r
+                       <KEYWORD2>\tabular</KEYWORD2>\r
+                       <KEYWORD2>\link</KEYWORD2>\r
+                       <KEYWORD2>\item</KEYWORD2>\r
+                       <KEYWORD2>\eqn</KEYWORD2>\r
+                       <KEYWORD2>\deqn</KEYWORD2>\r
+                       <KEYWORD2>\concept</KEYWORD2>\r
+                       <KEYWORD3>\emph</KEYWORD3>\r
+                       <KEYWORD3>\strong</KEYWORD3>\r
+                       <KEYWORD3>\bold</KEYWORD3>\r
+                       <KEYWORD3>\sQuote</KEYWORD3>\r
+                       <KEYWORD3>\dQuote</KEYWORD3>\r
+                       <KEYWORD3>\code</KEYWORD3>\r
+                       <KEYWORD3>\preformatted</KEYWORD3>\r
+                       <KEYWORD3>\kbd</KEYWORD3>\r
+                       <KEYWORD3>\samp</KEYWORD3>\r
+                       <KEYWORD3>\pkg</KEYWORD3>\r
+                       <KEYWORD3>\file</KEYWORD3>\r
+                       <KEYWORD3>\email</KEYWORD3>\r
+                       <KEYWORD3>\url</KEYWORD3>\r
+                       <KEYWORD3>\var</KEYWORD3>\r
+                       <KEYWORD3>\env</KEYWORD3>\r
+                       <KEYWORD3>\option</KEYWORD3>\r
+                       <KEYWORD3>\command</KEYWORD3>\r
+                       <KEYWORD3>\dfn</KEYWORD3>\r
+                       <KEYWORD3>\cite</KEYWORD3>\r
+                       <KEYWORD3>\acronym</KEYWORD3>\r
+                       <KEYWORD3>\tab</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/rebol.xml b/extra/xmode/modes/rebol.xml
new file mode 100644 (file)
index 0000000..6d672b9
--- /dev/null
@@ -0,0 +1,546 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{[(" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}])" />\r
+               <PROPERTY NAME="commentStart" VALUE="comment {" />\r
+               <PROPERTY NAME="commentEnd" VALUE="}" />\r
+               <PROPERTY NAME="lineComment" VALUE=";" />\r
+               <PROPERTY NAME="noWordSep" VALUE="_-" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="FALSE">\r
+               <!-- Javadoc comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>comment {</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>comment{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">;</EOL_SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+\r
+               <MARK_FOLLOWING TYPE="LITERAL2" MATCH_TYPE="OPERATOR">'</MARK_FOLLOWING>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>abs</KEYWORD1>\r
+                       <KEYWORD1>absolute</KEYWORD1>\r
+                       <KEYWORD1>add</KEYWORD1>\r
+                       <KEYWORD1>and~</KEYWORD1>\r
+                       <KEYWORD1>at</KEYWORD1>\r
+                       <KEYWORD1>back</KEYWORD1>\r
+                       <KEYWORD1>change</KEYWORD1>\r
+                       <KEYWORD1>clear</KEYWORD1>\r
+                       <KEYWORD1>complement</KEYWORD1>\r
+                       <KEYWORD1>copy</KEYWORD1>\r
+                       <KEYWORD1>cp</KEYWORD1>\r
+                       <KEYWORD1>divide</KEYWORD1>\r
+                       <KEYWORD1>fifth</KEYWORD1>\r
+                       <KEYWORD1>find</KEYWORD1>\r
+                       <KEYWORD1>first</KEYWORD1>\r
+                       <KEYWORD1>fourth</KEYWORD1>\r
+                       <KEYWORD1>head</KEYWORD1>\r
+                       <KEYWORD1>insert</KEYWORD1>\r
+                       <KEYWORD1>last</KEYWORD1>\r
+                       <KEYWORD1>make</KEYWORD1>\r
+                       <KEYWORD1>max</KEYWORD1>\r
+                       <KEYWORD1>maximum</KEYWORD1>\r
+                       <KEYWORD1>min</KEYWORD1>\r
+                       <KEYWORD1>minimum</KEYWORD1>\r
+                       <KEYWORD1>multiply</KEYWORD1>\r
+                       <KEYWORD1>negate</KEYWORD1>\r
+                       <KEYWORD1>next</KEYWORD1>\r
+                       <KEYWORD1>or~</KEYWORD1>\r
+                       <KEYWORD1>pick</KEYWORD1>\r
+                       <KEYWORD1>poke</KEYWORD1>\r
+                       <KEYWORD1>power</KEYWORD1>\r
+                       <KEYWORD1>random</KEYWORD1>\r
+                       <KEYWORD1>remainder</KEYWORD1>\r
+                       <KEYWORD1>remove</KEYWORD1>\r
+                       <KEYWORD1>second</KEYWORD1>\r
+                       <KEYWORD1>select</KEYWORD1>\r
+                       <KEYWORD1>skip</KEYWORD1>\r
+                       <KEYWORD1>sort</KEYWORD1>\r
+                       <KEYWORD1>subtract</KEYWORD1>\r
+                       <KEYWORD1>tail</KEYWORD1>\r
+                       <KEYWORD1>third</KEYWORD1>\r
+                       <KEYWORD1>to</KEYWORD1>\r
+                       <KEYWORD1>trim</KEYWORD1>\r
+                       <KEYWORD1>xor~</KEYWORD1>\r
+                       <KEYWORD1>alias</KEYWORD1>\r
+                       <KEYWORD1>all</KEYWORD1>\r
+                       <KEYWORD1>any</KEYWORD1>\r
+                       <KEYWORD1>arccosine</KEYWORD1>\r
+                       <KEYWORD1>arcsine</KEYWORD1>\r
+                       <KEYWORD1>arctangent</KEYWORD1>\r
+                       <KEYWORD1>bind</KEYWORD1>\r
+                       <KEYWORD1>break</KEYWORD1>\r
+                       <KEYWORD1>browse</KEYWORD1>\r
+                       <KEYWORD1>call</KEYWORD1>\r
+                       <KEYWORD1>caret-to-offset</KEYWORD1>\r
+                       <KEYWORD1>catch</KEYWORD1>\r
+                       <KEYWORD1>checksum</KEYWORD1>\r
+                       <KEYWORD1>close</KEYWORD1>\r
+                       <KEYWORD1>comment</KEYWORD1>\r
+                       <KEYWORD1>compose</KEYWORD1>\r
+                       <KEYWORD1>compress</KEYWORD1>\r
+                       <KEYWORD1>cosine</KEYWORD1>\r
+                       <KEYWORD1>debase</KEYWORD1>\r
+                       <KEYWORD1>decompress</KEYWORD1>\r
+                       <KEYWORD1>dehex</KEYWORD1>\r
+                       <KEYWORD1>detab</KEYWORD1>\r
+                       <KEYWORD1>dh-compute-key</KEYWORD1>\r
+                       <KEYWORD1>dh-generate-key</KEYWORD1>\r
+                       <KEYWORD1>dh-make-key</KEYWORD1>\r
+                       <KEYWORD1>difference</KEYWORD1>\r
+                       <KEYWORD1>disarm</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>dsa-generate-key</KEYWORD1>\r
+                       <KEYWORD1>dsa-make-key</KEYWORD1>\r
+                       <KEYWORD1>dsa-make-signature</KEYWORD1>\r
+                       <KEYWORD1>dsa-verify-signature</KEYWORD1>\r
+                       <KEYWORD1>either</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>enbase</KEYWORD1>\r
+                       <KEYWORD1>entab</KEYWORD1>\r
+                       <KEYWORD1>exclude</KEYWORD1>\r
+                       <KEYWORD1>exit</KEYWORD1>\r
+                       <KEYWORD1>exp</KEYWORD1>\r
+                       <KEYWORD1>foreach</KEYWORD1>\r
+                       <KEYWORD1>form</KEYWORD1>\r
+                       <KEYWORD1>free</KEYWORD1>\r
+                       <KEYWORD1>get</KEYWORD1>\r
+                       <KEYWORD1>get-modes</KEYWORD1>\r
+                       <KEYWORD1>halt</KEYWORD1>\r
+                       <KEYWORD1>hide</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <KEYWORD1>intersect</KEYWORD1>\r
+                       <KEYWORD1>load</KEYWORD1>\r
+                       <KEYWORD1>log-10</KEYWORD1>\r
+                       <KEYWORD1>log-2</KEYWORD1>\r
+                       <KEYWORD1>log-e</KEYWORD1>\r
+                       <KEYWORD1>loop</KEYWORD1>\r
+                       <KEYWORD1>lowercase</KEYWORD1>\r
+                       <KEYWORD1>maximum-of</KEYWORD1>\r
+                       <KEYWORD1>minimum-of</KEYWORD1>\r
+                       <KEYWORD1>mold</KEYWORD1>\r
+                       <KEYWORD1>not</KEYWORD1>\r
+                       <KEYWORD1>now</KEYWORD1>\r
+                       <KEYWORD1>offset-to-caret</KEYWORD1>\r
+                       <KEYWORD1>open</KEYWORD1>\r
+                       <KEYWORD1>parse</KEYWORD1>\r
+                       <KEYWORD1>prin</KEYWORD1>\r
+                       <KEYWORD1>print</KEYWORD1>\r
+                       <KEYWORD1>protect</KEYWORD1>\r
+                       <KEYWORD1>q</KEYWORD1>\r
+                       <KEYWORD1>query</KEYWORD1>\r
+                       <KEYWORD1>quit</KEYWORD1>\r
+                       <KEYWORD1>read</KEYWORD1>\r
+                       <KEYWORD1>read-io</KEYWORD1>\r
+                       <KEYWORD1>recycle</KEYWORD1>\r
+                       <KEYWORD1>reduce</KEYWORD1>\r
+                       <KEYWORD1>repeat</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>reverse</KEYWORD1>\r
+                       <KEYWORD1>rsa-encrypt</KEYWORD1>\r
+                       <KEYWORD1>rsa-generate-key</KEYWORD1>\r
+                       <KEYWORD1>rsa-make-key</KEYWORD1>\r
+                       <KEYWORD1>save</KEYWORD1>\r
+                       <KEYWORD1>secure</KEYWORD1>\r
+                       <KEYWORD1>set</KEYWORD1>\r
+                       <KEYWORD1>set-modes</KEYWORD1>\r
+                       <KEYWORD1>show</KEYWORD1>\r
+                       <KEYWORD1>sine</KEYWORD1>\r
+                       <KEYWORD1>size-text</KEYWORD1>\r
+                       <KEYWORD1>square-root</KEYWORD1>\r
+                       <KEYWORD1>tangent</KEYWORD1>\r
+                       <KEYWORD1>textinfo</KEYWORD1>\r
+                       <KEYWORD1>throw</KEYWORD1>\r
+                       <KEYWORD1>to-hex</KEYWORD1>\r
+                       <KEYWORD1>to-local-file</KEYWORD1>\r
+                       <KEYWORD1>to-rebol-file</KEYWORD1>\r
+                       <KEYWORD1>trace</KEYWORD1>\r
+                       <KEYWORD1>try</KEYWORD1>\r
+                       <KEYWORD1>union</KEYWORD1>\r
+                       <KEYWORD1>unique</KEYWORD1>\r
+                       <KEYWORD1>unprotect</KEYWORD1>\r
+                       <KEYWORD1>unset</KEYWORD1>\r
+                       <KEYWORD1>until</KEYWORD1>\r
+                       <KEYWORD1>update</KEYWORD1>\r
+                       <KEYWORD1>uppercase</KEYWORD1>\r
+                       <KEYWORD1>use</KEYWORD1>\r
+                       <KEYWORD1>wait</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+                       <KEYWORD1>write</KEYWORD1>\r
+                       <KEYWORD1>write-io</KEYWORD1>\r
+                       <KEYWORD1>basic-syntax-header</KEYWORD1>\r
+                       <KEYWORD1>crlf</KEYWORD1>\r
+                       <KEYWORD1>font-fixed</KEYWORD1>\r
+                       <KEYWORD1>font-sans-serif</KEYWORD1>\r
+                       <KEYWORD1>font-serif</KEYWORD1>\r
+                       <KEYWORD1>list-words</KEYWORD1>\r
+                       <KEYWORD1>outstr</KEYWORD1>\r
+                       <KEYWORD1>val</KEYWORD1>\r
+                       <KEYWORD1>value</KEYWORD1>\r
+                       <KEYWORD1>about</KEYWORD1>\r
+                       <KEYWORD1>alert</KEYWORD1>\r
+                       <KEYWORD1>alter</KEYWORD1>\r
+                       <KEYWORD1>append</KEYWORD1>\r
+                       <KEYWORD1>array</KEYWORD1>\r
+                       <KEYWORD1>ask</KEYWORD1>\r
+                       <KEYWORD1>boot-prefs</KEYWORD1>\r
+                       <KEYWORD1>build-tag</KEYWORD1>\r
+                       <KEYWORD1>center-face</KEYWORD1>\r
+                       <KEYWORD1>change-dir</KEYWORD1>\r
+                       <KEYWORD1>charset</KEYWORD1>\r
+                       <KEYWORD1>choose</KEYWORD1>\r
+                       <KEYWORD1>clean-path</KEYWORD1>\r
+                       <KEYWORD1>clear-fields</KEYWORD1>\r
+                       <KEYWORD1>confine</KEYWORD1>\r
+                       <KEYWORD1>confirm</KEYWORD1>\r
+                       <KEYWORD1>context</KEYWORD1>\r
+                       <KEYWORD1>cvs-date</KEYWORD1>\r
+                       <KEYWORD1>cvs-version</KEYWORD1>\r
+                       <KEYWORD1>decode-cgi</KEYWORD1>\r
+                       <KEYWORD1>decode-url</KEYWORD1>\r
+                       <KEYWORD1>deflag-face</KEYWORD1>\r
+                       <KEYWORD1>delete</KEYWORD1>\r
+                       <KEYWORD1>demo</KEYWORD1>\r
+                       <KEYWORD1>desktop</KEYWORD1>\r
+                       <KEYWORD1>dirize</KEYWORD1>\r
+                       <KEYWORD1>dispatch</KEYWORD1>\r
+                       <KEYWORD1>do-boot</KEYWORD1>\r
+                       <KEYWORD1>do-events</KEYWORD1>\r
+                       <KEYWORD1>do-face</KEYWORD1>\r
+                       <KEYWORD1>do-face-alt</KEYWORD1>\r
+                       <KEYWORD1>does</KEYWORD1>\r
+                       <KEYWORD1>dump-face</KEYWORD1>\r
+                       <KEYWORD1>dump-pane</KEYWORD1>\r
+                       <KEYWORD1>echo</KEYWORD1>\r
+                       <KEYWORD1>editor</KEYWORD1>\r
+                       <KEYWORD1>emailer</KEYWORD1>\r
+                       <KEYWORD1>emit</KEYWORD1>\r
+                       <KEYWORD1>extract</KEYWORD1>\r
+                       <KEYWORD1>find-by-type</KEYWORD1>\r
+                       <KEYWORD1>find-key-face</KEYWORD1>\r
+                       <KEYWORD1>find-window</KEYWORD1>\r
+                       <KEYWORD1>flag-face</KEYWORD1>\r
+                       <KEYWORD1>flash</KEYWORD1>\r
+                       <KEYWORD1>focus</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>forall</KEYWORD1>\r
+                       <KEYWORD1>forever</KEYWORD1>\r
+                       <KEYWORD1>forskip</KEYWORD1>\r
+                       <KEYWORD1>func</KEYWORD1>\r
+                       <KEYWORD1>function</KEYWORD1>\r
+                       <KEYWORD1>get-net-info</KEYWORD1>\r
+                       <KEYWORD1>get-style</KEYWORD1>\r
+                       <KEYWORD1>has</KEYWORD1>\r
+                       <KEYWORD1>help</KEYWORD1>\r
+                       <KEYWORD1>hide-popup</KEYWORD1>\r
+                       <KEYWORD1>import-email</KEYWORD1>\r
+                       <KEYWORD1>inform</KEYWORD1>\r
+                       <KEYWORD1>input</KEYWORD1>\r
+                       <KEYWORD1>insert-event-func</KEYWORD1>\r
+                       <KEYWORD1>join</KEYWORD1>\r
+                       <KEYWORD1>launch</KEYWORD1>\r
+                       <KEYWORD1>launch-thru</KEYWORD1>\r
+                       <KEYWORD1>layout</KEYWORD1>\r
+                       <KEYWORD1>license</KEYWORD1>\r
+                       <KEYWORD1>list-dir</KEYWORD1>\r
+                       <KEYWORD1>load-image</KEYWORD1>\r
+                       <KEYWORD1>load-prefs</KEYWORD1>\r
+                       <KEYWORD1>load-thru</KEYWORD1>\r
+                       <KEYWORD1>make-dir</KEYWORD1>\r
+                       <KEYWORD1>make-face</KEYWORD1>\r
+                       <KEYWORD1>net-error</KEYWORD1>\r
+                       <KEYWORD1>open-events</KEYWORD1>\r
+                       <KEYWORD1>parse-email-addrs</KEYWORD1>\r
+                       <KEYWORD1>parse-header</KEYWORD1>\r
+                       <KEYWORD1>parse-header-date</KEYWORD1>\r
+                       <KEYWORD1>parse-xml</KEYWORD1>\r
+                       <KEYWORD1>path-thru</KEYWORD1>\r
+                       <KEYWORD1>probe</KEYWORD1>\r
+                       <KEYWORD1>protect-system</KEYWORD1>\r
+                       <KEYWORD1>read-net</KEYWORD1>\r
+                       <KEYWORD1>read-thru</KEYWORD1>\r
+                       <KEYWORD1>reboot</KEYWORD1>\r
+                       <KEYWORD1>reform</KEYWORD1>\r
+                       <KEYWORD1>rejoin</KEYWORD1>\r
+                       <KEYWORD1>remold</KEYWORD1>\r
+                       <KEYWORD1>remove-event-func</KEYWORD1>\r
+                       <KEYWORD1>rename</KEYWORD1>\r
+                       <KEYWORD1>repend</KEYWORD1>\r
+                       <KEYWORD1>replace</KEYWORD1>\r
+                       <KEYWORD1>request</KEYWORD1>\r
+                       <KEYWORD1>request-color</KEYWORD1>\r
+                       <KEYWORD1>request-date</KEYWORD1>\r
+                       <KEYWORD1>request-download</KEYWORD1>\r
+                       <KEYWORD1>request-file</KEYWORD1>\r
+                       <KEYWORD1>request-list</KEYWORD1>\r
+                       <KEYWORD1>request-pass</KEYWORD1>\r
+                       <KEYWORD1>request-text</KEYWORD1>\r
+                       <KEYWORD1>resend</KEYWORD1>\r
+                       <KEYWORD1>save-prefs</KEYWORD1>\r
+                       <KEYWORD1>save-user</KEYWORD1>\r
+                       <KEYWORD1>scroll-para</KEYWORD1>\r
+                       <KEYWORD1>send</KEYWORD1>\r
+                       <KEYWORD1>set-font</KEYWORD1>\r
+                       <KEYWORD1>set-net</KEYWORD1>\r
+                       <KEYWORD1>set-para</KEYWORD1>\r
+                       <KEYWORD1>set-style</KEYWORD1>\r
+                       <KEYWORD1>set-user</KEYWORD1>\r
+                       <KEYWORD1>set-user-name</KEYWORD1>\r
+                       <KEYWORD1>show-popup</KEYWORD1>\r
+                       <KEYWORD1>source</KEYWORD1>\r
+                       <KEYWORD1>split-path</KEYWORD1>\r
+                       <KEYWORD1>stylize</KEYWORD1>\r
+                       <KEYWORD1>switch</KEYWORD1>\r
+                       <KEYWORD1>throw-on-error</KEYWORD1>\r
+                       <KEYWORD1>to-binary</KEYWORD1>\r
+                       <KEYWORD1>to-bitset</KEYWORD1>\r
+                       <KEYWORD1>to-block</KEYWORD1>\r
+                       <KEYWORD1>to-char</KEYWORD1>\r
+                       <KEYWORD1>to-date</KEYWORD1>\r
+                       <KEYWORD1>to-decimal</KEYWORD1>\r
+                       <KEYWORD1>to-email</KEYWORD1>\r
+                       <KEYWORD1>to-event</KEYWORD1>\r
+                       <KEYWORD1>to-file</KEYWORD1>\r
+                       <KEYWORD1>to-get-word</KEYWORD1>\r
+                       <KEYWORD1>to-hash</KEYWORD1>\r
+                       <KEYWORD1>to-idate</KEYWORD1>\r
+                       <KEYWORD1>to-image</KEYWORD1>\r
+                       <KEYWORD1>to-integer</KEYWORD1>\r
+                       <KEYWORD1>to-issue</KEYWORD1>\r
+                       <KEYWORD1>to-list</KEYWORD1>\r
+                       <KEYWORD1>to-lit-path</KEYWORD1>\r
+                       <KEYWORD1>to-lit-word</KEYWORD1>\r
+                       <KEYWORD1>to-logic</KEYWORD1>\r
+                       <KEYWORD1>to-money</KEYWORD1>\r
+                       <KEYWORD1>to-none</KEYWORD1>\r
+                       <KEYWORD1>to-pair</KEYWORD1>\r
+                       <KEYWORD1>to-paren</KEYWORD1>\r
+                       <KEYWORD1>to-path</KEYWORD1>\r
+                       <KEYWORD1>to-refinement</KEYWORD1>\r
+                       <KEYWORD1>to-set-path</KEYWORD1>\r
+                       <KEYWORD1>to-set-word</KEYWORD1>\r
+                       <KEYWORD1>to-string</KEYWORD1>\r
+                       <KEYWORD1>to-tag</KEYWORD1>\r
+                       <KEYWORD1>to-time</KEYWORD1>\r
+                       <KEYWORD1>to-tuple</KEYWORD1>\r
+                       <KEYWORD1>to-url</KEYWORD1>\r
+                       <KEYWORD1>to-word</KEYWORD1>\r
+                       <KEYWORD1>unfocus</KEYWORD1>\r
+                       <KEYWORD1>uninstall</KEYWORD1>\r
+                       <KEYWORD1>unview</KEYWORD1>\r
+                       <KEYWORD1>upgrade</KEYWORD1>\r
+                       <KEYWORD1>Usage</KEYWORD1>\r
+                       <KEYWORD1>vbug</KEYWORD1>\r
+                       <KEYWORD1>view</KEYWORD1>\r
+                       <KEYWORD1>view-install</KEYWORD1>\r
+                       <KEYWORD1>view-prefs</KEYWORD1>\r
+                       <KEYWORD1>what</KEYWORD1>\r
+                       <KEYWORD1>what-dir</KEYWORD1>\r
+                       <KEYWORD1>write-user</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>at</KEYWORD1>\r
+                       <KEYWORD1>space</KEYWORD1>\r
+                       <KEYWORD1>pad</KEYWORD1>\r
+                       <KEYWORD1>across</KEYWORD1>\r
+                       <KEYWORD1>below</KEYWORD1>\r
+                       <KEYWORD1>origin</KEYWORD1>\r
+                       <KEYWORD1>guide</KEYWORD1>\r
+                       <KEYWORD1>tabs</KEYWORD1>\r
+                       <KEYWORD1>indent</KEYWORD1>\r
+                       <KEYWORD1>style</KEYWORD1>\r
+                       <KEYWORD1>styles</KEYWORD1>\r
+                       <KEYWORD1>size</KEYWORD1>\r
+                       <KEYWORD1>sense</KEYWORD1>\r
+                       <KEYWORD1>backcolor</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>none</KEYWORD1>\r
+                       <KEYWORD2>action?</KEYWORD2>\r
+                       <KEYWORD2>any-block?</KEYWORD2>\r
+                       <KEYWORD2>any-function?</KEYWORD2>\r
+                       <KEYWORD2>any-string?</KEYWORD2>\r
+                       <KEYWORD2>any-type?</KEYWORD2>\r
+                       <KEYWORD2>any-word?</KEYWORD2>\r
+                       <KEYWORD2>binary?</KEYWORD2>\r
+                       <KEYWORD2>bitset?</KEYWORD2>\r
+                       <KEYWORD2>block?</KEYWORD2>\r
+                       <KEYWORD2>char?</KEYWORD2>\r
+                       <KEYWORD2>datatype?</KEYWORD2>\r
+                       <KEYWORD2>date?</KEYWORD2>\r
+                       <KEYWORD2>decimal?</KEYWORD2>\r
+                       <KEYWORD2>email?</KEYWORD2>\r
+                       <KEYWORD2>empty?</KEYWORD2>\r
+                       <KEYWORD2>equal?</KEYWORD2>\r
+                       <KEYWORD2>error?</KEYWORD2>\r
+                       <KEYWORD2>even?</KEYWORD2>\r
+                       <KEYWORD2>event?</KEYWORD2>\r
+                       <KEYWORD2>file?</KEYWORD2>\r
+                       <KEYWORD2>function?</KEYWORD2>\r
+                       <KEYWORD2>get-word?</KEYWORD2>\r
+                       <KEYWORD2>greater-or-equal?</KEYWORD2>\r
+                       <KEYWORD2>greater?</KEYWORD2>\r
+                       <KEYWORD2>hash?</KEYWORD2>\r
+                       <KEYWORD2>head?</KEYWORD2>\r
+                       <KEYWORD2>image?</KEYWORD2>\r
+                       <KEYWORD2>index?</KEYWORD2>\r
+                       <KEYWORD2>integer?</KEYWORD2>\r
+                       <KEYWORD2>issue?</KEYWORD2>\r
+                       <KEYWORD2>length?</KEYWORD2>\r
+                       <KEYWORD2>lesser-or-equal?</KEYWORD2>\r
+                       <KEYWORD2>lesser?</KEYWORD2>\r
+                       <KEYWORD2>library?</KEYWORD2>\r
+                       <KEYWORD2>list?</KEYWORD2>\r
+                       <KEYWORD2>lit-path?</KEYWORD2>\r
+                       <KEYWORD2>lit-word?</KEYWORD2>\r
+                       <KEYWORD2>logic?</KEYWORD2>\r
+                       <KEYWORD2>money?</KEYWORD2>\r
+                       <KEYWORD2>native?</KEYWORD2>\r
+                       <KEYWORD2>negative?</KEYWORD2>\r
+                       <KEYWORD2>none?</KEYWORD2>\r
+                       <KEYWORD2>not-equal?</KEYWORD2>\r
+                       <KEYWORD2>number?</KEYWORD2>\r
+                       <KEYWORD2>object?</KEYWORD2>\r
+                       <KEYWORD2>odd?</KEYWORD2>\r
+                       <KEYWORD2>op?</KEYWORD2>\r
+                       <KEYWORD2>pair?</KEYWORD2>\r
+                       <KEYWORD2>paren?</KEYWORD2>\r
+                       <KEYWORD2>path?</KEYWORD2>\r
+                       <KEYWORD2>port?</KEYWORD2>\r
+                       <KEYWORD2>positive?</KEYWORD2>\r
+                       <KEYWORD2>refinement?</KEYWORD2>\r
+                       <KEYWORD2>routine?</KEYWORD2>\r
+                       <KEYWORD2>same?</KEYWORD2>\r
+                       <KEYWORD2>series?</KEYWORD2>\r
+                       <KEYWORD2>set-path?</KEYWORD2>\r
+                       <KEYWORD2>set-word?</KEYWORD2>\r
+                       <KEYWORD2>strict-equal?</KEYWORD2>\r
+                       <KEYWORD2>strict-not-equal?</KEYWORD2>\r
+                       <KEYWORD2>string?</KEYWORD2>\r
+                       <KEYWORD2>struct?</KEYWORD2>\r
+                       <KEYWORD2>tag?</KEYWORD2>\r
+                       <KEYWORD2>tail?</KEYWORD2>\r
+                       <KEYWORD2>time?</KEYWORD2>\r
+                       <KEYWORD2>tuple?</KEYWORD2>\r
+                       <KEYWORD2>unset?</KEYWORD2>\r
+                       <KEYWORD2>url?</KEYWORD2>\r
+                       <KEYWORD2>word?</KEYWORD2>\r
+                       <KEYWORD2>zero?</KEYWORD2>\r
+                       <KEYWORD2>connected?</KEYWORD2>\r
+                       <KEYWORD2>crypt-strength?</KEYWORD2>\r
+                       <KEYWORD2>exists-key?</KEYWORD2>\r
+                       <KEYWORD2>input?</KEYWORD2>\r
+                       <KEYWORD2>script?</KEYWORD2>\r
+                       <KEYWORD2>type?</KEYWORD2>\r
+                       <KEYWORD2>value?</KEYWORD2>\r
+                       <KEYWORD2>?</KEYWORD2>\r
+                       <KEYWORD2>??</KEYWORD2>\r
+                       <KEYWORD2>dir?</KEYWORD2>\r
+                       <KEYWORD2>exists-thru?</KEYWORD2>\r
+                       <KEYWORD2>exists?</KEYWORD2>\r
+                       <KEYWORD2>flag-face?</KEYWORD2>\r
+                       <KEYWORD2>found?</KEYWORD2>\r
+                       <KEYWORD2>in-window?</KEYWORD2>\r
+                       <KEYWORD2>info?</KEYWORD2>\r
+                       <KEYWORD2>inside?</KEYWORD2>\r
+                       <KEYWORD2>link-app?</KEYWORD2>\r
+                       <KEYWORD2>link?</KEYWORD2>\r
+                       <KEYWORD2>modified?</KEYWORD2>\r
+                       <KEYWORD2>offset?</KEYWORD2>\r
+                       <KEYWORD2>outside?</KEYWORD2>\r
+                       <KEYWORD2>screen-offset?</KEYWORD2>\r
+                       <KEYWORD2>size?</KEYWORD2>\r
+                       <KEYWORD2>span?</KEYWORD2>\r
+                       <KEYWORD2>view?</KEYWORD2>\r
+                       <KEYWORD2>viewed?</KEYWORD2>\r
+                       <KEYWORD2>win-offset?</KEYWORD2>\r
+                       <KEYWORD2>within?</KEYWORD2>\r
+                       <KEYWORD3>action!</KEYWORD3>\r
+                       <KEYWORD3>any-block!</KEYWORD3>\r
+                       <KEYWORD3>any-function!</KEYWORD3>\r
+                       <KEYWORD3>any-string!</KEYWORD3>\r
+                       <KEYWORD3>any-type!</KEYWORD3>\r
+                       <KEYWORD3>any-word!</KEYWORD3>\r
+                       <KEYWORD3>binary!</KEYWORD3>\r
+                       <KEYWORD3>bitset!</KEYWORD3>\r
+                       <KEYWORD3>block!</KEYWORD3>\r
+                       <KEYWORD3>char!</KEYWORD3>\r
+                       <KEYWORD3>datatype!</KEYWORD3>\r
+                       <KEYWORD3>date!</KEYWORD3>\r
+                       <KEYWORD3>decimal!</KEYWORD3>\r
+                       <KEYWORD3>email!</KEYWORD3>\r
+                       <KEYWORD3>error!</KEYWORD3>\r
+                       <KEYWORD3>event!</KEYWORD3>\r
+                       <KEYWORD3>file!</KEYWORD3>\r
+                       <KEYWORD3>function!</KEYWORD3>\r
+                       <KEYWORD3>get-word!</KEYWORD3>\r
+                       <KEYWORD3>hash!</KEYWORD3>\r
+                       <KEYWORD3>image!</KEYWORD3>\r
+                       <KEYWORD3>integer!</KEYWORD3>\r
+                       <KEYWORD3>issue!</KEYWORD3>\r
+                       <KEYWORD3>library!</KEYWORD3>\r
+                       <KEYWORD3>list!</KEYWORD3>\r
+                       <KEYWORD3>lit-path!</KEYWORD3>\r
+                       <KEYWORD3>lit-word!</KEYWORD3>\r
+                       <KEYWORD3>logic!</KEYWORD3>\r
+                       <KEYWORD3>money!</KEYWORD3>\r
+                       <KEYWORD3>native!</KEYWORD3>\r
+                       <KEYWORD3>none!</KEYWORD3>\r
+                       <KEYWORD3>number!</KEYWORD3>\r
+                       <KEYWORD3>object!</KEYWORD3>\r
+                       <KEYWORD3>op!</KEYWORD3>\r
+                       <KEYWORD3>pair!</KEYWORD3>\r
+                       <KEYWORD3>paren!</KEYWORD3>\r
+                       <KEYWORD3>path!</KEYWORD3>\r
+                       <KEYWORD3>port!</KEYWORD3>\r
+                       <KEYWORD3>refinement!</KEYWORD3>\r
+                       <KEYWORD3>routine!</KEYWORD3>\r
+                       <KEYWORD3>series!</KEYWORD3>\r
+                       <KEYWORD3>set-path!</KEYWORD3>\r
+                       <KEYWORD3>set-word!</KEYWORD3>\r
+                       <KEYWORD3>string!</KEYWORD3>\r
+                       <KEYWORD3>struct!</KEYWORD3>\r
+                       <KEYWORD3>symbol!</KEYWORD3>\r
+                       <KEYWORD3>tag!</KEYWORD3>\r
+                       <KEYWORD3>time!</KEYWORD3>\r
+                       <KEYWORD3>tuple!</KEYWORD3>\r
+                       <KEYWORD3>unset!</KEYWORD3>\r
+                       <KEYWORD3>url!</KEYWORD3>\r
+                       <KEYWORD3>word!</KEYWORD3>\r
+\r
+                       <LITERAL2>true</LITERAL2>\r
+                       <LITERAL2>false</LITERAL2>\r
+                       <LITERAL2>self</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/redcode.xml b/extra/xmode/modes/redcode.xml
new file mode 100644 (file)
index 0000000..1c64d60
--- /dev/null
@@ -0,0 +1,126 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+\r
+       redcode syntax highlighting file for jedit\r
+\r
+       Will Varfar, 2002\r
+\r
+-->\r
+\r
+<MODE>\r
+\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE=";" />\r
+       </PROPS>\r
+\r
+       <RULES HIGHLIGHT_DIGITS="TRUE" DEFAULT="MARKUP" IGNORE_CASE="TRUE">\r
+\r
+           <EOL_SPAN TYPE="COMMENT2">;redcode</EOL_SPAN>\r
+           <EOL_SPAN TYPE="COMMENT2">;author</EOL_SPAN>\r
+           <EOL_SPAN TYPE="COMMENT2">;name</EOL_SPAN>\r
+           <EOL_SPAN TYPE="COMMENT2">;strategy</EOL_SPAN>\r
+           <EOL_SPAN TYPE="COMMENT2">;password</EOL_SPAN>\r
+           <EOL_SPAN TYPE="COMMENT1">;</EOL_SPAN>\r
+\r
+               <SEQ TYPE="KEYWORD3">.AB</SEQ> <!-- Instructions read the A-field of the A-instruction  and the B-field of the B-instruction and write to B-fields. -->\r
+               <SEQ TYPE="KEYWORD3">.BA</SEQ> <!-- Instructions read the B-field of the A-instruction  and the A-field of the B-instruction and write to A-fields. -->\r
+               <SEQ TYPE="KEYWORD3">.A</SEQ> <!--Instructions read and write A-fields. -->\r
+               <SEQ TYPE="KEYWORD3">.B</SEQ> <!-- Instructions read and write B-fields. -->\r
+               <SEQ TYPE="KEYWORD3">.F</SEQ> <!-- Instructions read both A- and B-fields of  the  the  A- and  B-instruction and write to both A- and B-fields (A to A and B to B). -->\r
+               <SEQ TYPE="KEYWORD3">.X</SEQ> <!-- Instructions read both A- and B-fields of  the  the  A- and  B-instruction  and  write  to both A- and B-fields exchanging fields (A to B and B to A). -->\r
+               <SEQ TYPE="KEYWORD3">.I</SEQ> <!-- Instructions read and write entire instructions. -->\r
+\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+               <SEQ TYPE="OPERATOR">(</SEQ>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <!-- Arithmetic: -->\r
+               <SEQ TYPE="OPERATOR">+</SEQ>   <!-- addition or unary plus -->\r
+               <SEQ TYPE="OPERATOR">-</SEQ>   <!-- subtraction or unary minus -->\r
+               <SEQ TYPE="OPERATOR">/</SEQ>   <!-- division -->\r
+               <SEQ TYPE="OPERATOR">%</SEQ>   <!-- modulo (remainder of division) -->\r
+\r
+               <!-- Comparison (*): -->\r
+               <SEQ TYPE="OPERATOR">==</SEQ>  <!-- equality -->\r
+               <SEQ TYPE="OPERATOR">!=</SEQ>  <!-- inequality -->\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>  <!-- less than or equal -->\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>  <!-- greater than or equal -->\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>   <!-- less than -->\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>   <!-- greater than -->\r
+\r
+               <!-- Logical (*): -->\r
+               <SEQ TYPE="OPERATOR">&amp;&amp;</SEQ>  <!-- and -->\r
+               <SEQ TYPE="OPERATOR">||</SEQ>  <!-- or -->\r
+               <SEQ TYPE="OPERATOR">!</SEQ>   <!-- unary negation -->\r
+\r
+               <!-- Assignment (*): -->\r
+               <SEQ TYPE="OPERATOR">=</SEQ>   <!-- (to register variables a..z) -->\r
+\r
+\r
+               <SEQ TYPE="LITERAL1">$</SEQ>\r
+               <SEQ TYPE="LITERAL1">@</SEQ>\r
+               <SEQ TYPE="LITERAL1">#</SEQ>\r
+               <SEQ TYPE="LITERAL1">*</SEQ>\r
+               <SEQ TYPE="LITERAL1">{</SEQ>\r
+               <SEQ TYPE="LITERAL1">}</SEQ>\r
+\r
+               <KEYWORDS>\r
+\r
+                       <LITERAL2>CORESIZE</LITERAL2> <!-- value of -s parameter (default: 8000) -->\r
+                       <LITERAL2>MAXPROCESSES</LITERAL2> <!-- value of -p parameter (default: 8000) -->\r
+                       <LITERAL2>MAXCYCLES</LITERAL2> <!-- value of -c parameter (default: 80000) -->\r
+                       <LITERAL2>MAXLENGTH</LITERAL2> <!-- value of -l parameter (default: 100) -->\r
+                       <LITERAL2>MINDISTANCE</LITERAL2> <!-- value of -d parameter (default: 100) -->\r
+                       <LITERAL2>ROUNDS</LITERAL2> <!-- (+) value of -r parameter (default: 1) -->\r
+                       <LITERAL2>PSPACESIZE</LITERAL2> <!-- (+) value of -S parameter (default: 1/16th CORESIZE) -->\r
+                       <LITERAL2>CURLINE</LITERAL2> <!-- current line in generated assembly (starts with 0) -->\r
+                       <LITERAL2>VERSION</LITERAL2> <!-- pMARS version ("60" is v0.6.0) -->\r
+                       <LITERAL2>WARRIORS</LITERAL2> <!-- number of warriors specified on command line -->\r
+\r
+                       <KEYWORD1>DAT</KEYWORD1> <!-- terminate process -->\r
+                       <KEYWORD1>MOV</KEYWORD1> <!-- move from A to B -->\r
+                       <KEYWORD1>ADD</KEYWORD1> <!-- add A to B, store result in B -->\r
+                       <KEYWORD1>SUB</KEYWORD1> <!-- subtract A from B, store result in B -->\r
+                       <KEYWORD1>MUL</KEYWORD1> <!-- multiply A by B, store result in B -->\r
+                       <KEYWORD1>DIV</KEYWORD1> <!-- divide B by A, store result in B if A <> 0, else terminate -->\r
+                       <KEYWORD1>MOD</KEYWORD1> <!-- divide B by A, store remainder in B if A <> 0, else terminate -->\r
+                       <KEYWORD1>JMP</KEYWORD1> <!-- transfer execution to A -->\r
+                       <KEYWORD1>JMZ</KEYWORD1> <!-- transfer execution to A if B is zero -->\r
+                       <KEYWORD1>JMN</KEYWORD1> <!-- transfer execution to A if B is non-zero -->\r
+                       <KEYWORD1>DJN</KEYWORD1> <!-- decrement B, if B is non-zero, transfer execution to A -->\r
+                       <KEYWORD1>SPL</KEYWORD1> <!-- split off process to A -->\r
+                       <KEYWORD1>SLT</KEYWORD1> <!-- skip next instruction if A is less than B -->\r
+                       <KEYWORD1>CMP</KEYWORD1> <!-- same as SEQ -->\r
+                       <KEYWORD1>SEQ</KEYWORD1> <!-- (*) Skip next instruction if A is equal to B -->\r
+                       <KEYWORD1>SNE</KEYWORD1> <!-- (*) Skip next instruction if A is not equal to B -->\r
+                       <KEYWORD1>NOP</KEYWORD1> <!-- (*) No operation -->\r
+                       <KEYWORD1>LDP</KEYWORD1> <!-- (+) Load P-space cell A into core address B -->\r
+                       <KEYWORD1>STP</KEYWORD1> <!-- (+) Store A-number into P-space cell B -->\r
+\r
+                       <KEYWORD2>EQU</KEYWORD2>\r
+                       <KEYWORD2>ORG</KEYWORD2>\r
+                       <KEYWORD2>FOR</KEYWORD2>\r
+                       <KEYWORD2>ROF</KEYWORD2>\r
+                       <KEYWORD2>END</KEYWORD2>\r
+                       <KEYWORD2>PIN</KEYWORD2>\r
+                       <KEYWORD2>CORESIZE</KEYWORD2> <!-- value of -s parameter (default: 8000) -->\r
+                       <KEYWORD2>MAXPROCESSES</KEYWORD2> <!-- value of -p parameter (default: 8000) -->\r
+                       <KEYWORD2>MAXCYCLES</KEYWORD2> <!-- value of -c parameter (default: 80000) -->\r
+                       <KEYWORD2>MAXLENGTH</KEYWORD2> <!-- value of -l parameter (default: 100) -->\r
+                       <KEYWORD2>MINDISTANCE</KEYWORD2> <!-- value of -d parameter (default: 100) -->\r
+                       <KEYWORD2>ROUNDS</KEYWORD2> <!-- (+) value of -r parameter (default: 1) -->\r
+                       <KEYWORD2>PSPACESIZE</KEYWORD2> <!-- (+) value of -S parameter (default: 1/16th CORESIZE) -->\r
+                       <KEYWORD2>CURLINE</KEYWORD2> <!-- current line in generated assembly (starts with 0) -->\r
+                       <KEYWORD2>VERSION</KEYWORD2> <!-- pMARS version ("60" is v0.6.0) -->\r
+                       <KEYWORD2>WARRIORS</KEYWORD2> <!-- number of warriors specified on command line -->\r
+\r
+               </KEYWORDS>\r
+\r
+       </RULES>\r
+\r
+</MODE>\r
+\r
+\r
diff --git a/extra/xmode/modes/relax-ng-compact.xml b/extra/xmode/modes/relax-ng-compact.xml
new file mode 100644 (file)
index 0000000..cdf6706
--- /dev/null
@@ -0,0 +1,74 @@
+<?xml version='1.0'?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- RELAX NG Compact Syntax mode, by Randy Hudson. -->\r
+<!-- mode catalog entry:\r
+     \r
+  <MODE NAME="relax-ng-compact" FILE="relax-ng-compact.xml"\r
+      FILE_NAME_GLOB="*.rnc" /> \r
+  -->\r
+\r
+<MODE>\r
+    <PROPS>\r
+        <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+        <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+        <PROPERTY NAME="doubleBracketIndent" VALUE="false" />\r
+        <PROPERTY NAME="lineComment" VALUE="#" />\r
+        <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+    </PROPS>  \r
+    \r
+    <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+    \r
+        <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>"</BEGIN>\r
+            <END>"</END>\r
+        </SPAN>\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>'</BEGIN>\r
+            <END>'</END>\r
+        </SPAN>\r
+        <SPAN TYPE='LITERAL2'>\r
+            <BEGIN>"""</BEGIN>\r
+            <END>"""</END>\r
+        </SPAN>\r
+        <SPAN TYPE='LITERAL2'>\r
+            <BEGIN>'''</BEGIN>\r
+            <END>'''</END>\r
+        </SPAN>\r
\r
+        <SEQ TYPE="OPERATOR">+</SEQ>\r
+        <SEQ TYPE="OPERATOR">*</SEQ>\r
+        <SEQ TYPE="OPERATOR">?</SEQ>\r
+        <SEQ TYPE="OPERATOR">&amp;=</SEQ>\r
+        <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+        <SEQ TYPE="OPERATOR">|=</SEQ>\r
+        <SEQ TYPE="OPERATOR">|</SEQ>\r
+        <SEQ TYPE="OPERATOR">=</SEQ>\r
+        <SEQ TYPE="OPERATOR">-</SEQ>\r
+        \r
+        <MARK_FOLLOWING TYPE="NULL">\</MARK_FOLLOWING>\r
+        \r
+        <KEYWORDS>\r
+            <KEYWORD1>attribute</KEYWORD1>\r
+            <KEYWORD1>default</KEYWORD1>\r
+            <KEYWORD1>datatypes</KEYWORD1>\r
+            <KEYWORD1>div</KEYWORD1>\r
+            <KEYWORD1>element</KEYWORD1>\r
+            <KEYWORD1>empty</KEYWORD1>\r
+            <KEYWORD1>external</KEYWORD1>\r
+            <KEYWORD1>grammar</KEYWORD1>\r
+            <KEYWORD1>include</KEYWORD1>\r
+            <KEYWORD1>inherit</KEYWORD1>\r
+            <KEYWORD1>list</KEYWORD1>\r
+            <KEYWORD1>mixed</KEYWORD1>\r
+            <KEYWORD1>namespace</KEYWORD1>\r
+            <KEYWORD1>notAllowed</KEYWORD1>\r
+            <KEYWORD1>parent</KEYWORD1>\r
+            <KEYWORD1>start</KEYWORD1>\r
+            <KEYWORD2>string</KEYWORD2>\r
+            <KEYWORD1>text</KEYWORD1>\r
+            <KEYWORD2>token</KEYWORD2>\r
+        </KEYWORDS>\r
+    </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/rest.xml b/extra/xmode/modes/rest.xml
new file mode 100644 (file)
index 0000000..0f51ecf
--- /dev/null
@@ -0,0 +1,135 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE=".. "/>\r
+               <!-- indent after literal blocks and directives -->\r
+               <PROPERTY NAME="indentNextLines" VALUE=".*::$"/>\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="FALSE" ESCAPE="\">\r
+\r
+               <!-- targets -->\r
+               <EOL_SPAN AT_LINE_START="TRUE" TYPE="KEYWORD3">__</EOL_SPAN>\r
+               <EOL_SPAN AT_LINE_START="TRUE" TYPE="KEYWORD3">.. _</EOL_SPAN>\r
+\r
+               <!-- section titles -->\r
+               <SEQ_REGEXP HASH_CHAR="===" TYPE="LABEL">={3,}</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="---" TYPE="LABEL">-{3,}</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="~~~" TYPE="LABEL">~{3,}</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="###" TYPE="LABEL">#{3,}</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR='"""' TYPE="LABEL">"{3,}</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="^^^" TYPE="LABEL">\^{3,}</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="+++" TYPE="LABEL">\+{3,}</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="***" TYPE="LABEL">\*{3,}</SEQ_REGEXP>\r
+\r
+               <!-- replacement -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR=".."\r
+                       AT_LINE_START="TRUE"\r
+                       TYPE="LITERAL3"\r
+               >\.\.\s\|[^|]+\|</SEQ_REGEXP>\r
+\r
+               <!-- substitution -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="|"\r
+                       AT_LINE_START="FALSE"\r
+                       TYPE="LITERAL4"\r
+               >\|[^|]+\|</SEQ_REGEXP>\r
+\r
+               <!-- directives: .. name:: -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR=".."\r
+                       AT_LINE_START="TRUE"\r
+                       TYPE="LITERAL2"\r
+               >\.\.\s[A-z][A-z0-9-_]+::</SEQ_REGEXP>\r
+\r
+               <!-- strong emphasis: **...** -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="**"\r
+                       AT_LINE_START="FALSE"\r
+                       TYPE="KEYWORD2"\r
+               >\*\*[^*]+\*\*</SEQ_REGEXP>\r
+\r
+               <!-- emphasis: *...* -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="*"\r
+                       AT_LINE_START="FALSE"\r
+                       TYPE="KEYWORD4"\r
+               >\*[^\s*][^*]*\*</SEQ_REGEXP>\r
+\r
+               <!-- comments -->\r
+               <EOL_SPAN AT_LINE_START="TRUE" TYPE="COMMENT1">.. </EOL_SPAN>\r
+\r
+               <!-- links: `...`_ or `...`__ -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="`"\r
+                       TYPE="LABEL"\r
+               >`[A-z0-9]+[^`]+`_{1,2}</SEQ_REGEXP>\r
+\r
+               <!-- footnote reference: [0]_ -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="["\r
+                       TYPE="LABEL"\r
+               >\[[0-9]+\]_</SEQ_REGEXP>\r
+\r
+               <!-- footnote reference: [#]_ or [#foo]_ -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="[#"\r
+                       TYPE="LABEL"\r
+               >\[#[A-z0-9_]*\]_</SEQ_REGEXP>\r
+\r
+               <!-- footnote reference: [*]_ -->\r
+               <SEQ TYPE="LABEL">[*]_</SEQ>\r
+\r
+               <!-- citation reference: [foo]_ -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="["\r
+                       TYPE="LABEL"\r
+               >\[[A-z][A-z0-9_-]*\]_</SEQ_REGEXP>\r
+\r
+               <!-- inline literal: ``...``-->\r
+               <!--<SEQ_REGEXP\r
+                       HASH_CHAR="``"\r
+                       TYPE="LITERAL1"\r
+               >``[^`]+``</SEQ_REGEXP>-->\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>``</BEGIN>\r
+                       <END>``</END>\r
+               </SPAN>\r
+\r
+               <!-- interpreted text: `...` -->\r
+               <!--\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="`"\r
+                       TYPE="KEYWORD1"\r
+               >`[^`]+`</SEQ_REGEXP>\r
+               -->\r
+               <SPAN TYPE="KEYWORD1">\r
+                       <BEGIN>`</BEGIN>\r
+                       <END>`</END>\r
+               </SPAN>\r
+\r
+               <SEQ_REGEXP HASH_CHAR="```" TYPE="LABEL">`{3,}</SEQ_REGEXP>\r
+\r
+               <!-- :field list: -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR=":"\r
+                       TYPE="KEYWORD1"\r
+               >:[A-z][A-z0-9  =\s\t_]*:</SEQ_REGEXP>\r
+\r
+               <!-- table -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="+-"\r
+                       TYPE="LABEL"\r
+               >\+-[+-]+</SEQ_REGEXP>\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="+?"\r
+                       TYPE="LABEL"\r
+               >\+=[+=]+</SEQ_REGEXP>\r
+\r
+       </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/rfc.xml b/extra/xmode/modes/rfc.xml
new file mode 100644 (file)
index 0000000..9d84db8
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>\r
+\r
+<!-- RFC mode by Matthieu Casanova -->\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+<MODE>\r
+       <RULES HIGHLIGHT_DIGITS="TRUE" IGNORE_CASE="FALSE">\r
+               <SEQ_REGEXP HASH_CHAR="[" TYPE="KEYWORD3">\[Page \d+\]</SEQ_REGEXP>\r
+               <SEQ_REGEXP HASH_CHAR="[" TYPE="KEYWORD2">\[RFC\d+\]</SEQ_REGEXP>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <KEYWORDS>\r
+                       <!--{{{ Keyword list from RFC2119 -->\r
+                       <KEYWORD1>MUST</KEYWORD1>\r
+                       <KEYWORD1>MUST NOT</KEYWORD1>\r
+                       <KEYWORD1>REQUIRED</KEYWORD1>\r
+                       <KEYWORD1>SHALL</KEYWORD1>\r
+                       <KEYWORD1>SHALL NOT</KEYWORD1>\r
+                       <KEYWORD1>SHOULD</KEYWORD1>\r
+                       <KEYWORD1>SHOULD NOT</KEYWORD1>\r
+                       <KEYWORD1>RECOMMENDED</KEYWORD1>\r
+                       <KEYWORD1>MAY</KEYWORD1>\r
+                       <KEYWORD1>OPTIONAL</KEYWORD1> \r
+                       <!--}}}-->\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/rhtml.xml b/extra/xmode/modes/rhtml.xml
new file mode 100644 (file)
index 0000000..76e4f91
--- /dev/null
@@ -0,0 +1,108 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- rhtml (ruby+html) mode -->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;%#" />\r
+               <PROPERTY NAME="commentEnd" VALUE="%&gt;" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE">\r
+               \r
+               <!-- eRuby comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;%#</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- eRuby assignment -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="ruby::MAIN">\r
+                       <BEGIN>&lt;%=</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- eRuby statement -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="ruby::MAIN">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="html::JAVASCRIPT">\r
+                       <BEGIN>&lt;SCRIPT</BEGIN>\r
+                       <END>&lt;/SCRIPT&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="html::CSS">\r
+                       <BEGIN>&lt;STYLE</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD instructions -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">\r
+                       <BEGIN>&lt;!</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="TAGS" DEFAULT="MARKUP">\r
+\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;%#</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="TAGS_LITERAL">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="TAGS_LITERAL">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="TAGS_LITERAL" DEFAULT="LITERAL1">\r
+\r
+               <SPAN TYPE="MARKUP">\r
+                       <BEGIN>&lt;%</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="MARKUP">\r
+                       <BEGIN>&lt;%=</BEGIN>\r
+                       <END>%&gt;</END>\r
+               </SPAN>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/rib.xml b/extra/xmode/modes/rib.xml
new file mode 100644 (file)
index 0000000..81b579f
--- /dev/null
@@ -0,0 +1,219 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+<!--\r
+jEdit edit mode for Renderman Interface Bytestream (*.rib) files\r
+version 1.0 - 9 nov 2003\r
+by Alessandro Falappa (alessandro@falappa.net)\r
+Initial keyword list taken from a syntax highlighting definition\r
+for TextPad text editor by Kharitonov Konstantin (aqua@sm.bmstu.ru)\r
+-->\r
+<MODE>\r
+    <PROPS>\r
+        <PROPERTY NAME="lineComment" VALUE="#" />\r
+        <PROPERTY NAME="indentNextLines" VALUE="Begin|WorldBegin|FrameBegin|TransformBegin|AttributeBegin|SolidBegin|ObjectBegin|MotionBegin" />\r
+        <PROPERTY NAME="doubleBracketIndent" VALUE="false" />\r
+    </PROPS>\r
+    <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="([\p{Digit}]+(e[\p{Digit}]*)?)">\r
+               <EOL_SPAN AT_WHITESPACE_END="TRUE" TYPE="COMMENT1">#</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT2">#</EOL_SPAN>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" DELEGATE="LITERALS">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <KEYWORDS>\r
+                       <KEYWORD1>float</KEYWORD1>\r
+                       <KEYWORD1>string</KEYWORD1>\r
+                       <KEYWORD1>color</KEYWORD1>\r
+                       <KEYWORD1>point</KEYWORD1>\r
+                       <KEYWORD1>vector</KEYWORD1>\r
+                       <KEYWORD1>normal</KEYWORD1>\r
+                       <KEYWORD1>matrix</KEYWORD1>\r
+                       <KEYWORD1>void</KEYWORD1>\r
+                       <KEYWORD1>varying</KEYWORD1>\r
+                       <KEYWORD1>uniform</KEYWORD1>\r
+                       <KEYWORD1>output</KEYWORD1>\r
+                       <KEYWORD1>extern</KEYWORD1>\r
+\r
+                       <KEYWORD2>Begin</KEYWORD2>\r
+                       <KEYWORD2>End</KEYWORD2>\r
+                       <KEYWORD2>Declare</KEYWORD2>\r
+                       <KEYWORD2>RtContextHandle </KEYWORD2>\r
+                       <KEYWORD2>ContextHandle </KEYWORD2>\r
+                       <KEYWORD2>Context</KEYWORD2>\r
+                       <KEYWORD2>FrameBegin</KEYWORD2>\r
+                       <KEYWORD2>FrameEnd</KEYWORD2>\r
+                       <KEYWORD2>WorldBegin</KEYWORD2>\r
+                       <KEYWORD2>WorldEnd</KEYWORD2>\r
+                       <KEYWORD2>SolidBegin</KEYWORD2>\r
+                       <KEYWORD2>SolidEnd</KEYWORD2>\r
+                       <KEYWORD2>MotionBegin</KEYWORD2>\r
+                       <KEYWORD2>MotionEnd</KEYWORD2>\r
+                       <KEYWORD2>ObjectBegin</KEYWORD2>\r
+                       <KEYWORD2>ObjectEnd</KEYWORD2>\r
+                       <KEYWORD2>Format</KEYWORD2>\r
+                       <KEYWORD2>FrameAspectRatio</KEYWORD2>\r
+                       <KEYWORD2>ScreenWindow</KEYWORD2>\r
+                       <KEYWORD2>CropWindow</KEYWORD2>\r
+                       <KEYWORD2>Projection</KEYWORD2>\r
+                       <KEYWORD2>Clipping</KEYWORD2>\r
+                       <KEYWORD2>ClippingPlane</KEYWORD2>\r
+                       <KEYWORD2>DepthOfField</KEYWORD2>\r
+                       <KEYWORD2>Shutter</KEYWORD2>\r
+                       <KEYWORD2>PixelVariance</KEYWORD2>\r
+                       <KEYWORD2>PixelSamples</KEYWORD2>\r
+                       <KEYWORD2>PixelFilter</KEYWORD2>\r
+                       <KEYWORD2>Exposure</KEYWORD2>\r
+                       <KEYWORD2>Imager</KEYWORD2>\r
+                       <KEYWORD2>Quantize</KEYWORD2>\r
+                       <KEYWORD2>Display</KEYWORD2>\r
+                       <KEYWORD2>Hider</KEYWORD2>\r
+                       <KEYWORD2>ColorSamples</KEYWORD2>\r
+                       <KEYWORD2>RelativeDetail</KEYWORD2>\r
+                       <KEYWORD2>Option</KEYWORD2>\r
+                       <KEYWORD2>AttributeBegin</KEYWORD2>\r
+                       <KEYWORD2>AttributeEnd</KEYWORD2>\r
+                       <KEYWORD2>Color</KEYWORD2>\r
+                       <KEYWORD2>Opacity</KEYWORD2>\r
+                       <KEYWORD2>TextureCoordinates</KEYWORD2>\r
+                       <KEYWORD2>RtLightHandle</KEYWORD2>\r
+                       <KEYWORD2>LightSource</KEYWORD2>\r
+                       <KEYWORD2>AreaLightSource</KEYWORD2>\r
+                       <KEYWORD2>Illuminate</KEYWORD2>\r
+                       <KEYWORD2>Surface</KEYWORD2>\r
+                       <KEYWORD2>Displacement</KEYWORD2>\r
+                       <KEYWORD2>Atmosphere</KEYWORD2>\r
+                       <KEYWORD2>Interior</KEYWORD2>\r
+                       <KEYWORD2>Exterior</KEYWORD2>\r
+                       <KEYWORD2>ShadingRate</KEYWORD2>\r
+                       <KEYWORD2>ShadingInterpolation</KEYWORD2>\r
+                       <KEYWORD2>Matte</KEYWORD2>\r
+                       <KEYWORD2>Bound</KEYWORD2>\r
+                       <KEYWORD2>Detail</KEYWORD2>\r
+                       <KEYWORD2>DetailRange</KEYWORD2>\r
+                       <KEYWORD2>GeometricApproximation</KEYWORD2>\r
+                       <KEYWORD2>Orientation</KEYWORD2>\r
+                       <KEYWORD2>ReverseOrientation</KEYWORD2>\r
+                       <KEYWORD2>Sides</KEYWORD2>\r
+                       <KEYWORD2>Identity</KEYWORD2>\r
+                       <KEYWORD2>Transform</KEYWORD2>\r
+                       <KEYWORD2>ConcatTransform</KEYWORD2>\r
+                       <KEYWORD2>Perspective</KEYWORD2>\r
+                       <KEYWORD2>Translate</KEYWORD2>\r
+                       <KEYWORD2>Rotate</KEYWORD2>\r
+                       <KEYWORD2>Scale</KEYWORD2>\r
+                       <KEYWORD2>Skew</KEYWORD2>\r
+                       <KEYWORD2>CoordinateSystem</KEYWORD2>\r
+                       <KEYWORD2>CoordSysTransform</KEYWORD2>\r
+                       <KEYWORD2>TransformPoints</KEYWORD2>\r
+                       <KEYWORD2>TransformBegin</KEYWORD2>\r
+                       <KEYWORD2>TransformEnd</KEYWORD2>\r
+                       <KEYWORD2>Attribute</KEYWORD2>\r
+\r
+                       <KEYWORD3>Polygon</KEYWORD3>\r
+                       <KEYWORD3>GeneralPolygon</KEYWORD3>\r
+                       <KEYWORD3>PointsPolygons</KEYWORD3>\r
+                       <KEYWORD3>PointsGeneralPolygons</KEYWORD3>\r
+                       <KEYWORD3>Basis</KEYWORD3>\r
+                       <KEYWORD3>Patch</KEYWORD3>\r
+                       <KEYWORD3>PatchMesh</KEYWORD3>\r
+                       <KEYWORD3>NuPatch</KEYWORD3>\r
+                       <KEYWORD3>TrimCurve</KEYWORD3>\r
+                       <KEYWORD3>SubdivisionMesh</KEYWORD3>\r
+                       <KEYWORD3>Sphere</KEYWORD3>\r
+                       <KEYWORD3>Cone</KEYWORD3>\r
+                       <KEYWORD3>Cylinder</KEYWORD3>\r
+                       <KEYWORD3>Hyperboloid</KEYWORD3>\r
+                       <KEYWORD3>Paraboloid</KEYWORD3>\r
+                       <KEYWORD3>Disk</KEYWORD3>\r
+                       <KEYWORD3>Torus</KEYWORD3>\r
+                       <KEYWORD3>Points</KEYWORD3>\r
+                       <KEYWORD3>Curves</KEYWORD3>\r
+                       <KEYWORD3>Blobby</KEYWORD3>\r
+                       <KEYWORD3>Procedural</KEYWORD3>\r
+                       <KEYWORD3>DelayedReadArchive</KEYWORD3>\r
+                       <KEYWORD3>RunProgram</KEYWORD3>\r
+                       <KEYWORD3>DynamicLoad</KEYWORD3>\r
+                       <KEYWORD3>Geometry</KEYWORD3>\r
+                       <KEYWORD3>SolidBegin</KEYWORD3>\r
+                       <KEYWORD3>SolidEnd</KEYWORD3>\r
+                       <KEYWORD3>RtObjectHandle</KEYWORD3>\r
+                       <KEYWORD3>ObjectBegin</KEYWORD3>\r
+                       <KEYWORD3>ObjectEnd</KEYWORD3>\r
+                       <KEYWORD3>ObjectInstance</KEYWORD3>\r
+\r
+                       <KEYWORD4>MakeTexture</KEYWORD4>\r
+                       <KEYWORD4>MakeLatLongEnvironment</KEYWORD4>\r
+                       <KEYWORD4>MakeCubeFaceEnvironment</KEYWORD4>\r
+                       <KEYWORD4>MakeShadow</KEYWORD4>\r
+                       <KEYWORD4>ErrorHandler</KEYWORD4>\r
+                       <KEYWORD4>ArchiveRecord</KEYWORD4>\r
+                       <KEYWORD4>ReadArchive</KEYWORD4>\r
+                       <KEYWORD4>Deformation</KEYWORD4>\r
+                       <KEYWORD4>MakeBump</KEYWORD4>\r
+               </KEYWORDS>\r
+    </RULES>\r
+    <RULES SET="LITERALS" ESCAPE="\" IGNORE_CASE="FALSE" DEFAULT="LITERAL1">\r
+               <KEYWORDS>\r
+                       <KEYWORD1>float</KEYWORD1>\r
+                       <KEYWORD1>string</KEYWORD1>\r
+                       <KEYWORD1>color</KEYWORD1>\r
+                       <KEYWORD1>point</KEYWORD1>\r
+                       <KEYWORD1>vector</KEYWORD1>\r
+                       <KEYWORD1>normal</KEYWORD1>\r
+                       <KEYWORD1>matrix</KEYWORD1>\r
+                       <KEYWORD1>void</KEYWORD1>\r
+                       <KEYWORD1>varying</KEYWORD1>\r
+                       <KEYWORD1>uniform</KEYWORD1>\r
+                       <KEYWORD1>output</KEYWORD1>\r
+                       <KEYWORD1>extern</KEYWORD1>\r
+\r
+                       <LITERAL2>P</LITERAL2>\r
+                       <LITERAL2>Pw</LITERAL2>\r
+                       <LITERAL2>Pz</LITERAL2>\r
+                       <LITERAL2>N</LITERAL2>\r
+                       <LITERAL2>Cs</LITERAL2>\r
+                       <LITERAL2>Os</LITERAL2>\r
+                       <LITERAL2>RI_NULL</LITERAL2>\r
+                       <LITERAL2>RI_INFINITY</LITERAL2>\r
+                       <LITERAL2>orthographic</LITERAL2>\r
+                       <LITERAL2>perspective</LITERAL2>\r
+                       <LITERAL2>bezier</LITERAL2>\r
+                       <LITERAL2>catmull-rom</LITERAL2>\r
+                       <LITERAL2>b-spline</LITERAL2>\r
+                       <LITERAL2>hermite</LITERAL2>\r
+                       <LITERAL2>power</LITERAL2>\r
+                       <LITERAL2>catmull-clark</LITERAL2>\r
+                       <LITERAL2>hole</LITERAL2>\r
+                       <LITERAL2>crease</LITERAL2>\r
+                       <LITERAL2>corner</LITERAL2>\r
+                       <LITERAL2>interpolateboundary</LITERAL2>\r
+                       <LITERAL2>object</LITERAL2>\r
+                       <LITERAL2>world</LITERAL2>\r
+                       <LITERAL2>camera</LITERAL2>\r
+                       <LITERAL2>screen</LITERAL2>\r
+                       <LITERAL2>raster</LITERAL2>\r
+                       <LITERAL2>NDC</LITERAL2>\r
+                       <LITERAL2>box</LITERAL2>\r
+                       <LITERAL2>triangle</LITERAL2>\r
+                       <LITERAL2>sinc</LITERAL2>\r
+                       <LITERAL2>gaussian</LITERAL2>\r
+                       <LITERAL2>constant</LITERAL2>\r
+                       <LITERAL2>smooth</LITERAL2>\r
+                       <LITERAL2>outside</LITERAL2>\r
+                       <LITERAL2>inside</LITERAL2>\r
+                       <LITERAL2>lh</LITERAL2>\r
+                       <LITERAL2>rh</LITERAL2>\r
+                       <LITERAL2>bicubic</LITERAL2>\r
+                       <LITERAL2>bilinear</LITERAL2>\r
+                       <LITERAL2>periodic</LITERAL2>\r
+                       <LITERAL2>nonperiodic</LITERAL2>\r
+                       <LITERAL2>hidden</LITERAL2>\r
+                       <LITERAL2>null</LITERAL2>\r
+               </KEYWORDS>\r
+    </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/rpmspec.xml b/extra/xmode/modes/rpmspec.xml
new file mode 100644 (file)
index 0000000..9bc3e12
--- /dev/null
@@ -0,0 +1,130 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+       </PROPS>\r
+       <RULES>\r
+               <!-- comments -->\r
+               <EOL_SPAN TYPE="COMMENT1" AT_LINE_START="TRUE">#</EOL_SPAN>\r
+\r
+               <!-- Dependency operators -->\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+\r
+               <!-- %attr -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="ATTR" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>%attr(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+\r
+               <!-- %verify -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="VERIFY" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>%verify(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+\r
+               <!-- Source -->\r
+               <MARK_FOLLOWING TYPE="KEYWORD1"\r
+                       AT_LINE_START="TRUE">Source</MARK_FOLLOWING>\r
+\r
+               <!-- Patch -->\r
+               <MARK_FOLLOWING TYPE="KEYWORD1"\r
+                       AT_LINE_START="TRUE">Patch</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="FUNCTION"\r
+                       AT_LINE_START="TRUE">%patch</MARK_FOLLOWING>\r
+\r
+               <!-- Variables -->\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="KEYWORD3" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>%{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$#</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$?</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$*</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$&lt;</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>Summary:</KEYWORD1>\r
+                       <KEYWORD1>Name:</KEYWORD1>\r
+                       <KEYWORD1>Version:</KEYWORD1>\r
+                       <KEYWORD1>Release:</KEYWORD1>\r
+                       <KEYWORD1>Copyright:</KEYWORD1>\r
+                       <KEYWORD1>Group:</KEYWORD1>\r
+                       <KEYWORD1>URL:</KEYWORD1>\r
+                       <KEYWORD1>Packager:</KEYWORD1>\r
+                       <KEYWORD1>Prefix:</KEYWORD1>\r
+                       <KEYWORD1>Distribution:</KEYWORD1>\r
+                       <KEYWORD1>Vendor:</KEYWORD1>\r
+                       <KEYWORD1>Icon:</KEYWORD1>\r
+                       <KEYWORD1>Provides:</KEYWORD1>\r
+                       <KEYWORD1>Requires:</KEYWORD1>\r
+                       <KEYWORD1>Serial:</KEYWORD1>\r
+                       <KEYWORD1>Conflicts:</KEYWORD1>\r
+                       <KEYWORD1>AutoReqProv:</KEYWORD1>\r
+                       <KEYWORD1>BuildArch:</KEYWORD1>\r
+                       <KEYWORD1>ExcludeArch:</KEYWORD1>\r
+                       <KEYWORD1>ExclusiveArch:</KEYWORD1>\r
+                       <KEYWORD1>ExclusiveOS:</KEYWORD1>\r
+                       <KEYWORD1>BuildRoot:</KEYWORD1>\r
+                       <KEYWORD1>NoSource:</KEYWORD1>\r
+                       <KEYWORD1>NoPatch:</KEYWORD1>\r
+\r
+                       <LABEL>%prep</LABEL>\r
+                       <LABEL>%install</LABEL>\r
+                       <LABEL>%description</LABEL>\r
+                       <LABEL>%build</LABEL>\r
+                       <LABEL>%files</LABEL>\r
+                       <LABEL>%clean</LABEL>\r
+                       <LABEL>%pre</LABEL>\r
+                       <LABEL>%post</LABEL>\r
+                       <LABEL>%preun</LABEL>\r
+                       <LABEL>%postun</LABEL>\r
+                       <LABEL>%verifyscript</LABEL>\r
+\r
+                       <FUNCTION>%setup</FUNCTION>\r
+                       <FUNCTION>%ifarch</FUNCTION>\r
+                       <FUNCTION>%ifnarch</FUNCTION>\r
+                       <FUNCTION>%ifos</FUNCTION>\r
+                       <FUNCTION>%ifnos</FUNCTION>\r
+                       <FUNCTION>%else</FUNCTION>\r
+                       <FUNCTION>%endif</FUNCTION>\r
+\r
+                       <MARKUP>%doc</MARKUP>\r
+                       <MARKUP>%config</MARKUP>\r
+                       <MARKUP>%docdir</MARKUP>\r
+                       <MARKUP>%dir</MARKUP>\r
+                       <MARKUP>%package</MARKUP>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="ATTR" HIGHLIGHT_DIGITS="TRUE">\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="VERIFY">\r
+               <KEYWORDS>\r
+                       <KEYWORD2>owner</KEYWORD2>\r
+                       <KEYWORD2>group</KEYWORD2>\r
+                       <KEYWORD2>mode</KEYWORD2>\r
+                       <KEYWORD2>md5</KEYWORD2>\r
+                       <KEYWORD2>size</KEYWORD2>\r
+                       <KEYWORD2>maj</KEYWORD2>\r
+                       <KEYWORD2>min</KEYWORD2>\r
+                       <KEYWORD2>symlink</KEYWORD2>\r
+                       <KEYWORD2>mtime</KEYWORD2>\r
+                       <OPERATOR>not</OPERATOR>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/rtf.xml b/extra/xmode/modes/rtf.xml
new file mode 100644 (file)
index 0000000..889e79e
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- contributed by Lionel Fiol <lio-sand@ifrance.com>  -->\r
+<!-- 30/MAR/2004: initial contribution                  -->\r
+\r
+<MODE>\r
+  <RULES ESCAPE="\\">\r
+    <!-- groups -->\r
+    <SEQ TYPE="OPERATOR">{</SEQ>\r
+    <SEQ TYPE="OPERATOR">}</SEQ>\r
+    <!-- characters as hexadecimal values - eg "\'e9" -->\r
+    <SEQ_REGEXP HASH_CHAR="\'" TYPE="LITERAL2">\\'\w\d</SEQ_REGEXP>\r
+    <!-- control words added after the RTF Specification published in March 1987 - eg "\*\panose" -->\r
+    <MARK_FOLLOWING TYPE="KEYWORD2">\*\</MARK_FOLLOWING>\r
+    <!-- control words - eg "\par" -->\r
+    <MARK_FOLLOWING TYPE="KEYWORD1">\</MARK_FOLLOWING>\r
+  </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/ruby.xml b/extra/xmode/modes/ruby.xml
new file mode 100644 (file)
index 0000000..2d29c2d
--- /dev/null
@@ -0,0 +1,462 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+<!-- Ruby mode by Ian Maclean (Ruby edit mode v0.6.2) -->\r
+<!-- tweakage by Chris Morris - clabs.org -->\r
+<!-- further tweakage by Christophe Grandsire -->\r
+<!-- further tweakage by Robert McKinnon 2004 -->\r
+<!-- Major overhaul by Karl von Laudermann -->\r
+<!-- recommended mode catalog entry:\r
+    <MODE NAME="ruby" FILE="ruby.xml" FILE_NAME_GLOB="*.{rb,rbw}" FIRST_LINE_GLOB="#!*/*ruby*" /> -->\r
+<MODE>\r
+    <PROPS>\r
+        <PROPERTY NAME="indentOpenBrackets" VALUE=""/>\r
+        <PROPERTY NAME="indentCloseBrackets" VALUE="}"/>\r
+        <PROPERTY NAME="lineUpClosingBracket" VALUE="true"/>\r
+        <PROPERTY NAME="commentStart" VALUE="=begin"/>\r
+        <PROPERTY NAME="commentEnd" VALUE="=end"/>\r
+        <PROPERTY NAME="lineComment" VALUE="#"/>\r
+        <PROPERTY NAME="indentNextLines" VALUE="\s*((if\s+.*|elsif\s+.*|else\s*|do(\s*|\s+.*)|case\s+.*|when\s+.*|while\s+.*|for\s+.*|until\s+.*|loop\s+.*|def\s+.*|class\s+.*|module\s+.*|begin.*|unless\s+.*)*)"/>\r
+    </PROPS>\r
+    <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0b[01]([01_]*[01])?)|(0x[\p{XDigit}]([\p{XDigit}_]*[\p{XDigit}])?)|(0([0-7_]*[0-7])?)|(0d[0-9]([0-9_]*[0-9])?)|([1-9]([0-9_]*[0-9])?)|([0-9]([0-9_]*[0-9])?[Ee]([0-9]([0-9_]*[0-9])?)?)">\r
+        <!--       ^ Binary literal    | ^ Hex literal                               | ^ Octal literal  | ^ "0d" Style Dec lit   | ^ Normal Dec literal | ^ Float literal w/out dec point, with exp. -->\r
+\r
+        <!-- Ruby comment (Inline Documentation ) -->\r
+        <SPAN TYPE="COMMENT2">\r
+            <BEGIN>=begin</BEGIN>\r
+            <END>=end</END>\r
+        </SPAN>\r
+\r
+        <!-- Class and instance vars -->\r
+        <MARK_FOLLOWING TYPE="KEYWORD4">@</MARK_FOLLOWING>\r
+\r
+               <!-- Perl-style regexps - from perl.xml -->\r
+               <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="/" AT_WORD_START="TRUE"\r
+               >/[^\p{Blank}]*?/</SEQ_REGEXP>\r
+\r
+        <!-- String literals -->\r
+\r
+        <SPAN TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">\r
+            <BEGIN>"</BEGIN>\r
+            <END>"</END>\r
+        </SPAN>\r
+\r
+        <SPAN TYPE="LITERAL1">\r
+            <BEGIN>'</BEGIN>\r
+            <END>'</END>\r
+        </SPAN>\r
+\r
+        <!-- %Q(Hello world) %(Hello world)-->\r
+        <SPAN_REGEXP HASH_CHAR="%" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">\r
+            <BEGIN>%Q?\(</BEGIN>\r
+            <END>)</END>\r
+        </SPAN_REGEXP>\r
+\r
+        <!-- %q(Hello world) -->\r
+        <SPAN TYPE="LITERAL1">\r
+            <BEGIN>%q(</BEGIN>\r
+            <END>)</END>\r
+        </SPAN>\r
+\r
+        <!-- %Q{Hello world} %{Hello world} -->\r
+        <SPAN_REGEXP HASH_CHAR="%" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">\r
+            <BEGIN>%Q?\{</BEGIN>\r
+            <END>}</END>\r
+        </SPAN_REGEXP>\r
+\r
+        <!-- %q{Hello world} -->\r
+        <SPAN TYPE="LITERAL1">\r
+            <BEGIN>%q{</BEGIN>\r
+            <END>}</END>\r
+        </SPAN>\r
+\r
+        <!-- %Q[Hello world] %[Hello world] -->\r
+        <SPAN_REGEXP HASH_CHAR="%" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">\r
+            <BEGIN>%Q?\[</BEGIN>\r
+            <END>]</END>\r
+        </SPAN_REGEXP>\r
+\r
+        <!-- %q[Hello world] -->\r
+        <SPAN TYPE="LITERAL1">\r
+            <BEGIN>%q[</BEGIN>\r
+            <END>]</END>\r
+        </SPAN>\r
+\r
+        <!-- %Q<Hello world> %<Hello world> -->\r
+        <SPAN_REGEXP HASH_CHAR="%" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">\r
+            <BEGIN>%Q?&lt;</BEGIN>\r
+            <END>&gt;</END>\r
+        </SPAN_REGEXP>\r
+\r
+        <!-- %q<Hello world> -->\r
+        <SPAN TYPE="LITERAL1">\r
+            <BEGIN>%q&lt;</BEGIN>\r
+            <END>&gt;</END>\r
+        </SPAN>\r
+\r
+        <!-- I made the next three forms as three instead of two, because the\r
+         first two actually support whitespace as a delimiter, and the third\r
+         one doesn't. -->\r
+        <!-- %Q$Hello world$ -->\r
+        <SPAN_REGEXP HASH_CHAR="%Q" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">\r
+            <BEGIN>%Q([^\p{Alnum}])</BEGIN>\r
+            <END>$1</END>\r
+        </SPAN_REGEXP>\r
+\r
+        <!-- %q$Hello world$ -->\r
+        <SPAN_REGEXP HASH_CHAR="%q" TYPE="LITERAL1">\r
+            <BEGIN>%q([^\p{Alnum}])</BEGIN>\r
+            <END>$1</END>\r
+        </SPAN_REGEXP>\r
+\r
+        <!-- %$Hello world$ -->\r
+        <SPAN_REGEXP HASH_CHAR="%" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">\r
+            <BEGIN>%([^\p{Alnum}\p{Space}])</BEGIN>\r
+            <END>$1</END>\r
+        </SPAN_REGEXP>\r
+\r
+        <!-- %W(Array of strings) -->\r
+        <SPAN TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">\r
+            <BEGIN>%W(</BEGIN>\r
+            <END>)</END>\r
+        </SPAN>\r
+\r
+        <!-- %w(Array of strings) -->\r
+        <SPAN TYPE="LITERAL1">\r
+            <BEGIN>%w(</BEGIN>\r
+            <END>)</END>\r
+        </SPAN>\r
+\r
+        <!-- %W{Array of strings} -->\r
+        <SPAN TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">\r
+            <BEGIN>%W{</BEGIN>\r
+            <END>}</END>\r
+        </SPAN>\r
+\r
+        <!-- %w{Array of strings} -->\r
+        <SPAN TYPE="LITERAL1">\r
+            <BEGIN>%w{</BEGIN>\r
+            <END>}</END>\r
+        </SPAN>\r
+\r
+        <!-- %W[Array of strings] -->\r
+        <SPAN TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">\r
+            <BEGIN>%W[</BEGIN>\r
+            <END>]</END>\r
+        </SPAN>\r
+\r
+        <!-- %w[Array of strings] -->\r
+        <SPAN TYPE="LITERAL1">\r
+            <BEGIN>%w[</BEGIN>\r
+            <END>]</END>\r
+        </SPAN>\r
+\r
+        <!-- %W<Array of strings>  -->\r
+        <SPAN TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">\r
+            <BEGIN>%W&lt;</BEGIN>\r
+            <END>&gt;</END>\r
+        </SPAN>\r
+\r
+        <!-- %w<Array of strings> -->\r
+        <SPAN TYPE="LITERAL1">\r
+            <BEGIN>%w&lt;</BEGIN>\r
+            <END>&gt;</END>\r
+        </SPAN>\r
+\r
+        <!-- %W$Array of strings$ -->\r
+        <SPAN_REGEXP HASH_CHAR="%W" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">\r
+            <BEGIN>%W([^\p{Alnum}\p{Space}])</BEGIN>\r
+            <END>$1</END>\r
+        </SPAN_REGEXP>\r
+\r
+        <!-- %w@Array of strings@ -->\r
+        <SPAN_REGEXP HASH_CHAR="%w" TYPE="LITERAL1">\r
+            <BEGIN>%w([^\p{Alnum}\p{Space}])</BEGIN>\r
+            <END>$1</END>\r
+        </SPAN_REGEXP>\r
+\r
+        <!-- Here documents <<"FOO" <<-"FOO" -->\r
+        <!-- Unfortunately, in a SPAN_REGEXP element only the <BEGIN> tag takes\r
+         a regex, not the <END> tag. So an instance of FOO anywhere in the here\r
+         document will terminate highlighting; I couldn't make it smarter. -->\r
+        <SPAN_REGEXP HASH_CHAR="&lt;&lt;" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">\r
+            <BEGIN>&lt;&lt;-?"([\p{Graph}]+)"</BEGIN>\r
+            <END>$1</END>\r
+        </SPAN_REGEXP>\r
+\r
+        <!-- Here documents <<'FOO' <<-'FOO' -->\r
+        <!-- Unfortunately, in a SPAN_REGEXP element only the <BEGIN> tag takes\r
+         a regex, not the <END> tag. So an instance of FOO anywhere in the here\r
+         document will terminate highlighting; I couldn't make it smarter. -->\r
+        <SPAN_REGEXP HASH_CHAR="&lt;&lt;" TYPE="LITERAL1">\r
+            <BEGIN>&lt;&lt;-?'([\p{Graph}]+)'</BEGIN>\r
+            <END>$1</END>\r
+        </SPAN_REGEXP>\r
+\r
+        <!-- Here documents <<FOO <<-FOO -->\r
+        <!-- Unfortunately, in a SPAN_REGEXP element only the <BEGIN> tag takes\r
+         a regex, not the <END> tag. So an instance of FOO anywhere in the here\r
+         document will terminate highlighting; I couldn't make it smarter. -->\r
+        <SPAN_REGEXP HASH_CHAR="&lt;&lt;" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">\r
+            <BEGIN>&lt;&lt;-?([A-Za-z_]+)</BEGIN>\r
+            <END>$1</END>\r
+        </SPAN_REGEXP>\r
+\r
+        <!-- Shell command strings -->\r
+\r
+        <!-- `echo foo` -->\r
+        <SPAN TYPE="LITERAL2" DELEGATE="BackquoteLiteral">\r
+            <BEGIN>`</BEGIN>\r
+            <END>`</END>\r
+        </SPAN>\r
+\r
+        <!-- %x(echo foo) -->\r
+        <SPAN TYPE="LITERAL2" DELEGATE="BackquoteLiteral">\r
+            <BEGIN>%x(</BEGIN>\r
+            <END>)</END>\r
+        </SPAN>\r
+\r
+        <!-- %x{echo foo} -->\r
+        <SPAN TYPE="LITERAL2" DELEGATE="BackquoteLiteral">\r
+            <BEGIN>%x{</BEGIN>\r
+            <END>}</END>\r
+        </SPAN>\r
+\r
+        <!-- %x[echo foo] -->\r
+        <SPAN TYPE="LITERAL2" DELEGATE="BackquoteLiteral">\r
+            <BEGIN>%x[</BEGIN>\r
+            <END>]</END>\r
+        </SPAN>\r
+\r
+        <!-- %x<echo foo> -->\r
+        <SPAN TYPE="LITERAL2" DELEGATE="BackquoteLiteral">\r
+            <BEGIN>%x&lt;</BEGIN>\r
+            <END>&gt;</END>\r
+        </SPAN>\r
+\r
+        <!-- %x$echo foo$ -->\r
+        <SPAN_REGEXP HASH_CHAR="%x" TYPE="LITERAL2" DELEGATE="BackquoteLiteral">\r
+            <BEGIN>%x([^\p{Alnum}\p{Space}])</BEGIN>\r
+            <END>$1</END>\r
+        </SPAN_REGEXP>\r
+\r
+        <!-- Regular expressions   -->\r
+\r
+        <!-- /regexp?/i -->\r
+        <!-- This doesn't really work well, because it can't distinguish a regexp\r
+         from multiple instances of the "/" division operator on the same line. -->\r
+        <!-- <SEQ_REGEXP HASH_CHAR="/" AT_WORD_START="TRUE"\r
+            TYPE="LITERAL3">/[^/]+/[iomx]*</SEQ_REGEXP> -->\r
+\r
+        <!-- %r(regexp?) -->\r
+        <SPAN TYPE="LITERAL3" DELEGATE="RegexpLiteral">\r
+            <BEGIN>%r(</BEGIN>\r
+            <END>)</END>\r
+        </SPAN>\r
+\r
+        <!-- %r{regexp?} -->\r
+        <SPAN TYPE="LITERAL3" DELEGATE="RegexpLiteral">\r
+            <BEGIN>%r{</BEGIN>\r
+            <END>}</END>\r
+        </SPAN>\r
+\r
+        <!-- %r[regexp?] -->\r
+        <SPAN TYPE="LITERAL3" DELEGATE="RegexpLiteral">\r
+            <BEGIN>%r[</BEGIN>\r
+            <END>]</END>\r
+        </SPAN>\r
+\r
+        <!-- %r<regexp?> -->\r
+        <SPAN TYPE="LITERAL3" DELEGATE="RegexpLiteral">\r
+            <BEGIN>%r&lt;</BEGIN>\r
+            <END>&gt;</END>\r
+        </SPAN>\r
+\r
+        <!-- %r$regexp?$ -->\r
+        <SPAN_REGEXP HASH_CHAR="%r" TYPE="LITERAL3" DELEGATE="RegexpLiteral">\r
+            <BEGIN>%r([^\p{Alnum}\p{Space}])</BEGIN>\r
+            <END>$1</END>\r
+        </SPAN_REGEXP>\r
+\r
+        <!-- (/regexp/) -->\r
+        <SPAN DELEGATE="RegexpLiteral" MATCH_TYPE="OPERATOR" TYPE="LITERAL3">\r
+            <BEGIN>(/</BEGIN>\r
+            <END>/</END>\r
+        </SPAN>\r
+\r
+        <!-- Nested code block -->\r
+        <!-- I included this just because it can appear in a "/" delimited\r
+        regular expression, handling of which is commented out above. So this\r
+        would otherwise be colored as a comment. -->\r
+        <SPAN TYPE="OPERATOR" DELEGATE="MAIN">\r
+            <BEGIN>#{</BEGIN>\r
+            <END>}</END>\r
+        </SPAN>\r
+\r
+        <!-- Std Comment -->\r
+        <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+        <!-- Predefined global variables -->\r
+        <SEQ_REGEXP HASH_CHAR="$-" TYPE="KEYWORD3" AT_WORD_START="TRUE">\$-[0adFiIKlpvw](?![\p{Alnum}_])</SEQ_REGEXP>\r
+\r
+        <SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD3" AT_WORD_START="TRUE">\$[0-9!@&amp;\+`'=~/\\,\.;&lt;&gt;_\*"\$\?\:F](?![\p{Alnum}_])</SEQ_REGEXP>\r
+\r
+        <!-- Because of the ? char, this can't be done as a KEYWORD element -->\r
+        <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">defined?</SEQ>\r
+\r
+        <!-- Highlight "include" but not "include?" -->\r
+        <SEQ_REGEXP HASH_CHAR="include" TYPE="KEYWORD2" AT_WORD_START="TRUE">include(?![\p{Alnum}_\?])</SEQ_REGEXP>\r
+\r
+        <!-- Not Operators but like the syntax highlight to match operators -->\r
+        <SEQ TYPE="OPERATOR">{</SEQ>\r
+        <SEQ TYPE="OPERATOR">}</SEQ>\r
+        <SEQ TYPE="OPERATOR">(</SEQ>\r
+        <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+        <!-- Arithmetic operators -->\r
+        <SEQ TYPE="OPERATOR">::</SEQ>\r
+        <SEQ TYPE="OPERATOR">===</SEQ>\r
+        <SEQ TYPE="OPERATOR">=</SEQ>\r
+        <SEQ TYPE="OPERATOR">&gt;&gt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;&lt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+        <SEQ TYPE="OPERATOR">+</SEQ>\r
+        <SEQ TYPE="OPERATOR">-</SEQ>\r
+        <SEQ TYPE="OPERATOR">/</SEQ>\r
+\r
+        <SEQ TYPE="OPERATOR">**</SEQ>\r
+        <SEQ TYPE="OPERATOR">*</SEQ>\r
+\r
+        <SEQ TYPE="OPERATOR">%</SEQ>\r
+\r
+        <!-- Logical Operators -->\r
+        <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+        <SEQ TYPE="OPERATOR">|</SEQ>\r
+        <SEQ TYPE="OPERATOR">!</SEQ>\r
+        <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">^</SEQ>\r
+        <SEQ TYPE="OPERATOR">~</SEQ>\r
+\r
+        <!-- Range operators -->\r
+        <SEQ TYPE="OPERATOR">...</SEQ>\r
+        <SEQ TYPE="OPERATOR">..</SEQ>\r
+\r
+        <SEQ TYPE="OPERATOR">]</SEQ>\r
+        <SEQ TYPE="OPERATOR">[</SEQ>\r
+        <SEQ TYPE="OPERATOR">?</SEQ>\r
+\r
+        <!-- Symbols -->\r
+        <SEQ_REGEXP AT_WORD_START="TRUE" HASH_CHAR=":" TYPE="LABEL">:[\p{Alpha}_][\p{Alnum}_]*</SEQ_REGEXP>\r
+\r
+        <SEQ TYPE="OPERATOR">:</SEQ>\r
+\r
+        <KEYWORDS>\r
+            <KEYWORD1>BEGIN</KEYWORD1>\r
+            <KEYWORD1>END</KEYWORD1>\r
+            <KEYWORD1>alias</KEYWORD1>\r
+            <KEYWORD1>begin</KEYWORD1>\r
+            <KEYWORD1>break</KEYWORD1>\r
+            <KEYWORD1>case</KEYWORD1>\r
+            <KEYWORD1>class</KEYWORD1>\r
+            <KEYWORD1>def</KEYWORD1>\r
+            <KEYWORD1>do</KEYWORD1>\r
+            <KEYWORD1>else</KEYWORD1>\r
+            <KEYWORD1>elsif</KEYWORD1>\r
+            <KEYWORD1>end</KEYWORD1>\r
+            <KEYWORD1>ensure</KEYWORD1>\r
+            <KEYWORD1>for</KEYWORD1>\r
+            <KEYWORD1>if</KEYWORD1>\r
+            <KEYWORD1>in</KEYWORD1>\r
+            <KEYWORD1>module</KEYWORD1>\r
+            <KEYWORD1>next</KEYWORD1>\r
+            <KEYWORD1>redo</KEYWORD1>\r
+            <KEYWORD1>rescue</KEYWORD1>\r
+            <KEYWORD1>retry</KEYWORD1>\r
+            <KEYWORD1>return</KEYWORD1>\r
+            <KEYWORD1>then</KEYWORD1>\r
+            <KEYWORD1>undef</KEYWORD1>\r
+            <KEYWORD1>unless</KEYWORD1>\r
+            <KEYWORD1>until</KEYWORD1>\r
+            <KEYWORD1>when</KEYWORD1>\r
+            <KEYWORD1>while</KEYWORD1>\r
+            <KEYWORD1>yield</KEYWORD1>\r
+\r
+            <KEYWORD2>load</KEYWORD2>\r
+            <KEYWORD2>require</KEYWORD2>\r
+\r
+            <OPERATOR>and</OPERATOR>\r
+            <OPERATOR>not</OPERATOR>\r
+            <OPERATOR>or</OPERATOR>\r
+\r
+            <KEYWORD3>false</KEYWORD3>\r
+            <KEYWORD3>nil</KEYWORD3>\r
+            <KEYWORD3>self</KEYWORD3>\r
+            <KEYWORD3>super</KEYWORD3>\r
+            <KEYWORD3>true</KEYWORD3>\r
+\r
+            <KEYWORD3>$defout</KEYWORD3>\r
+            <KEYWORD3>$deferr</KEYWORD3>\r
+            <KEYWORD3>$stderr</KEYWORD3>\r
+            <KEYWORD3>$stdin</KEYWORD3>\r
+            <KEYWORD3>$stdout</KEYWORD3>\r
+            <KEYWORD3>$DEBUG</KEYWORD3>\r
+            <KEYWORD3>$FILENAME</KEYWORD3>\r
+            <KEYWORD3>$LOAD_PATH</KEYWORD3>\r
+            <KEYWORD3>$SAFE</KEYWORD3>\r
+            <KEYWORD3>$VERBOSE</KEYWORD3>\r
+            <KEYWORD3>__FILE__</KEYWORD3>\r
+            <KEYWORD3>__LINE__</KEYWORD3>\r
+            <KEYWORD3>ARGF</KEYWORD3>\r
+            <KEYWORD3>ARGV</KEYWORD3>\r
+            <KEYWORD3>ENV</KEYWORD3>\r
+            <KEYWORD3>DATA</KEYWORD3>\r
+            <KEYWORD3>FALSE</KEYWORD3>\r
+            <KEYWORD3>NIL</KEYWORD3>\r
+            <KEYWORD3>RUBY_PLATFORM</KEYWORD3>\r
+            <KEYWORD3>RUBY_RELEASE_DATE</KEYWORD3>\r
+            <KEYWORD3>RUBY_VERSION</KEYWORD3>\r
+            <KEYWORD3>STDERR</KEYWORD3>\r
+            <KEYWORD3>STDIN</KEYWORD3>\r
+            <KEYWORD3>STDOUT</KEYWORD3>\r
+            <KEYWORD3>SCRIPT_LINES__</KEYWORD3>\r
+            <KEYWORD3>TOPLEVEL_BINDING</KEYWORD3>\r
+            <KEYWORD3>TRUE</KEYWORD3>\r
+        </KEYWORDS>\r
+    </RULES>\r
+\r
+    <!-- Delegate contents of #{} expression in double quotes to MAIN so that\r
+     it will be syntax highlighted as well -->\r
+    <RULES DEFAULT="LITERAL1" SET="doubleQuoteLiteral">\r
+        <SPAN DELEGATE="MAIN" TYPE="OPERATOR">\r
+            <BEGIN>#{</BEGIN>\r
+            <END>}</END>\r
+        </SPAN>\r
+        <MARK_FOLLOWING TYPE="KEYWORD4">#@@</MARK_FOLLOWING>\r
+        <MARK_FOLLOWING TYPE="KEYWORD4">#@</MARK_FOLLOWING>\r
+        <MARK_FOLLOWING TYPE="NULL">#$</MARK_FOLLOWING>\r
+    </RULES>\r
+\r
+    <!-- Delegate contents of #{} expression in backquotes to MAIN so that\r
+     it will be syntax highlighted as well -->\r
+    <RULES DEFAULT="LITERAL2" SET="BackquoteLiteral">\r
+        <SPAN DELEGATE="MAIN" TYPE="OPERATOR">\r
+            <BEGIN>#{</BEGIN>\r
+            <END>}</END>\r
+        </SPAN>\r
+        <MARK_FOLLOWING TYPE="KEYWORD4">#@@</MARK_FOLLOWING>\r
+        <MARK_FOLLOWING TYPE="KEYWORD4">#@</MARK_FOLLOWING>\r
+        <MARK_FOLLOWING TYPE="NULL">#$</MARK_FOLLOWING>\r
+    </RULES>\r
+\r
+    <!-- Delegate contents of #{} expression in a regexp to MAIN so that\r
+     it will be syntax highlighted as well -->\r
+    <RULES DEFAULT="LITERAL3" SET="RegexpLiteral">\r
+        <SPAN DELEGATE="MAIN" TYPE="OPERATOR">\r
+            <BEGIN>#{</BEGIN>\r
+            <END>}</END>\r
+        </SPAN>\r
+        <MARK_FOLLOWING TYPE="KEYWORD4">#@@</MARK_FOLLOWING>\r
+        <MARK_FOLLOWING TYPE="KEYWORD4">#@</MARK_FOLLOWING>\r
+        <MARK_FOLLOWING TYPE="NULL">#$</MARK_FOLLOWING>\r
+    </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/rview.xml b/extra/xmode/modes/rview.xml
new file mode 100644 (file)
index 0000000..9747465
--- /dev/null
@@ -0,0 +1,217 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+  Relational View (rview) mode by Will Sargent <wsargent@atg.com>\r
+-->\r
+<MODE>\r
+       <PROPS>\r
+                <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+                <PROPERTY NAME="lineComment" VALUE="//" />\r
+       </PROPS>\r
+\r
+        <!--\r
+          Unicode escapes are allowed in identifiers.\r
+          Ignoring case is bad.\r
+          Digits may be returned from functions.\r
+        -->\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+                <SEQ TYPE="COMMENT1">/**/</SEQ>\r
+\r
+               <!-- Javadoc comment -->\r
+               <SPAN TYPE="COMMENT2" DELEGATE="JAVADOC">\r
+                       <BEGIN>/**</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+                <!-- Java comment (C style) -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" DELEGATE="RVIEWSTMT">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+                <SEQ TYPE="OPERATOR">}</SEQ>\r
+                <SEQ TYPE="OPERATOR">{</SEQ>\r
+                <SEQ TYPE="OPERATOR">=</SEQ>\r
+\r
+                <!-- Function calls -->\r
+                <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+                               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+                <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+\r
+                <KEYWORDS>\r
+\r
+                        <!--\r
+                          Keywords (WAY more than I thought there were, please\r
+                          e-mail me if I've left one out).\r
+                        -->\r
+                        <KEYWORD1>unique</KEYWORD1>\r
+                        <KEYWORD1>relationalview</KEYWORD1>\r
+                        <KEYWORD1>class</KEYWORD1>\r
+\r
+                        <KEYWORD1>rowmap</KEYWORD1>\r
+                        <KEYWORD1>table</KEYWORD1>\r
+                        <KEYWORD1>function</KEYWORD1>\r
+                        <KEYWORD1>subview</KEYWORD1>\r
+                        <KEYWORD1>query</KEYWORD1>\r
+\r
+                        <KEYWORD1>join</KEYWORD1>\r
+                        <KEYWORD1>jointype</KEYWORD1>\r
+                        <KEYWORD1>leftouter</KEYWORD1>\r
+                        <KEYWORD1>rightouter</KEYWORD1>\r
+\r
+                        <KEYWORD1>switch</KEYWORD1>\r
+                        <KEYWORD1>case</KEYWORD1>\r
+\r
+                        <KEYWORD1>sql</KEYWORD1>\r
+                        <KEYWORD1>constraints</KEYWORD1>\r
+                        <KEYWORD1>where</KEYWORD1>\r
+                        <KEYWORD1>orderby</KEYWORD1>\r
+                        <KEYWORD1>return</KEYWORD1>\r
+                        <KEYWORD1>distinct</KEYWORD1>\r
+\r
+                        <!--\r
+                          Allow parameters...\r
+                        -->\r
+                        <KEYWORD1>allow</KEYWORD1>\r
+                        <KEYWORD1>delete</KEYWORD1>\r
+                        <!-- also used in update function -->\r
+                        <KEYWORD1>update</KEYWORD1>\r
+                        <KEYWORD1>select</KEYWORD1>\r
+                        <KEYWORD1>insert</KEYWORD1>\r
+\r
+                        <!-- We're allowed to return primitive types -->\r
+                        <KEYWORD3>boolean</KEYWORD3>\r
+                        <KEYWORD3>byte</KEYWORD3>\r
+                        <KEYWORD3>char</KEYWORD3>\r
+                        <KEYWORD3>double</KEYWORD3>\r
+                        <KEYWORD3>float</KEYWORD3>\r
+                        <KEYWORD3>int</KEYWORD3>\r
+                        <KEYWORD3>long</KEYWORD3>\r
+                        <KEYWORD3>short</KEYWORD3>\r
+\r
+                        <KEYWORD1>useCallableStatement</KEYWORD1>\r
+\r
+                        <!--\r
+                          JDBC mapping statements (must be UPPERCASE)\r
+                        -->\r
+                        <KEYWORD3>CHAR</KEYWORD3>\r
+                        <KEYWORD3>VARCHAR</KEYWORD3>\r
+                        <KEYWORD3>LONGVARCHAR</KEYWORD3>\r
+                        <KEYWORD3>NUMERIC</KEYWORD3>\r
+                        <KEYWORD3>DECIMAL</KEYWORD3>\r
+                        <KEYWORD3>BIT</KEYWORD3>\r
+                        <KEYWORD3>TINYINT</KEYWORD3>\r
+                        <KEYWORD3>SMALLINT</KEYWORD3>\r
+                        <KEYWORD3>INTEGER</KEYWORD3>\r
+                        <KEYWORD3>BIGINT</KEYWORD3>\r
+                        <KEYWORD3>REAL</KEYWORD3>\r
+                        <KEYWORD3>FLOAT</KEYWORD3>\r
+                        <KEYWORD3>DOUBLE</KEYWORD3>\r
+                        <KEYWORD3>BINARY</KEYWORD3>\r
+                        <KEYWORD3>VARBINARY</KEYWORD3>\r
+                        <KEYWORD3>LONGVARBINARY</KEYWORD3>\r
+                        <KEYWORD3>DATE</KEYWORD3>\r
+                        <KEYWORD3>TIME</KEYWORD3>\r
+                        <KEYWORD3>TIMESTAMP</KEYWORD3>\r
+                </KEYWORDS>\r
+        </RULES>\r
+\r
+        <!--\r
+          Everything that happens in between quotes happens here.\r
+        -->\r
+        <RULES SET="RVIEWSTMT" ESCAPE="\" DEFAULT="LITERAL1"\r
+               HIGHLIGHT_DIGITS="TRUE" IGNORE_CASE="TRUE">\r
+                <!-- Allow quoting for characters. -->\r
+                <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                        <BEGIN>'</BEGIN>\r
+                        <END>'</END>\r
+                </SPAN>\r
+\r
+                <!--\r
+                  Standard arithmetic\r
+                -->\r
+                <SEQ TYPE="OPERATOR">+</SEQ>\r
+                <SEQ TYPE="OPERATOR">-</SEQ>\r
+                <SEQ TYPE="OPERATOR">/</SEQ>\r
+                <SEQ TYPE="OPERATOR">*</SEQ>\r
+                <SEQ TYPE="OPERATOR">=</SEQ>\r
+\r
+                <!--\r
+                  Standard logic\r
+                -->\r
+                <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+                <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+                <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+                <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+\r
+                <!--\r
+                  For callable statements, { } must be used.\r
+                -->\r
+                <SEQ TYPE="OPERATOR">}</SEQ>\r
+                <SEQ TYPE="OPERATOR">{</SEQ>\r
+\r
+                <!--\r
+                  Escape colons for full tables\r
+                -->\r
+                <SEQ TYPE="NULL">::</SEQ>\r
+\r
+                <!-- Mark most colons as a label indicator -->\r
+                <MARK_FOLLOWING TYPE="LABEL">:</MARK_FOLLOWING>\r
+\r
+                <!-- Function calls (these can happen even inside quotes) -->\r
+                <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+                               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+                <KEYWORDS>\r
+                        <KEYWORD1>SELECT</KEYWORD1>\r
+                        <KEYWORD1>FROM</KEYWORD1>\r
+                        <KEYWORD1>WHERE</KEYWORD1>\r
+                        <KEYWORD1>AND</KEYWORD1>\r
+                        <KEYWORD1>NOT</KEYWORD1>\r
+                        <KEYWORD1>IN</KEYWORD1>\r
+                        <KEYWORD1>BETWEEN</KEYWORD1>\r
+                        <KEYWORD1>UPDATE</KEYWORD1>\r
+                        <KEYWORD1>SET</KEYWORD1>\r
+\r
+                        <KEYWORD1>call</KEYWORD1>\r
+                        <KEYWORD1>desc</KEYWORD1>\r
+\r
+                        <!--\r
+                          It's possible to do casting to a particular SQL\r
+                          type, so include the JDBC types here\r
+                        -->\r
+                        <KEYWORD3>CHAR</KEYWORD3>\r
+                        <KEYWORD3>VARCHAR</KEYWORD3>\r
+                        <KEYWORD3>LONGVARCHAR</KEYWORD3>\r
+                        <KEYWORD3>NUMERIC</KEYWORD3>\r
+                        <KEYWORD3>DECIMAL</KEYWORD3>\r
+                        <KEYWORD3>BIT</KEYWORD3>\r
+                        <KEYWORD3>TINYINT</KEYWORD3>\r
+                        <KEYWORD3>SMALLINT</KEYWORD3>\r
+                        <KEYWORD3>INTEGER</KEYWORD3>\r
+                        <KEYWORD3>BIGINT</KEYWORD3>\r
+                        <KEYWORD3>REAL</KEYWORD3>\r
+                        <KEYWORD3>FLOAT</KEYWORD3>\r
+                        <KEYWORD3>DOUBLE</KEYWORD3>\r
+                        <KEYWORD3>BINARY</KEYWORD3>\r
+                        <KEYWORD3>VARBINARY</KEYWORD3>\r
+                        <KEYWORD3>LONGVARBINARY</KEYWORD3>\r
+                        <KEYWORD3>DATE</KEYWORD3>\r
+                        <KEYWORD3>TIME</KEYWORD3>\r
+                        <KEYWORD3>TIMESTAMP</KEYWORD3>\r
+                </KEYWORDS>\r
+        </RULES>\r
+\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/sas.xml b/extra/xmode/modes/sas.xml
new file mode 100644 (file)
index 0000000..4f51536
--- /dev/null
@@ -0,0 +1,318 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--  \r
+      SAS edit mode by Bill McMilleon (bill@mcmilleon.com)\r
+      March 19, 2003\r
+      \r
+      Suggested catalog file entry:\r
+\r
+      <MODE NAME="SAS"         FILE="sas.xml" FILE_NAME_GLOB="*.{sas}" />\r
+\r
+-->\r
\r
+\r
+<MODE>\r
+\r
+    \r
+    <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="FALSE">\r
+\r
+<!-- In fixed form, column 72 is the last column parsed, unless the\r
+\extend_source option is invoked -->\r
+    <!-- TERMINATE AT_CHAR="72" / -->\r
+\r
+               <!-- C style comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+    <!-- Highlighted Operators -->\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">_</SEQ>\r
+    <SEQ TYPE="OPERATOR">|</SEQ>\r
+    <SEQ TYPE="OPERATOR">~</SEQ>\r
+    <SEQ TYPE="OPERATOR">^</SEQ>\r
+    <SEQ TYPE="OPERATOR">@</SEQ>\r
+    <SEQ TYPE="OPERATOR">?</SEQ>\r
+    <SEQ TYPE="OPERATOR">/</SEQ>\r
+    <SEQ TYPE="OPERATOR">.</SEQ>\r
+    <SEQ TYPE="OPERATOR">-</SEQ>\r
+    <SEQ TYPE="OPERATOR">+</SEQ>\r
+    <SEQ TYPE="OPERATOR">*</SEQ>\r
+    <SEQ TYPE="OPERATOR">!</SEQ>\r
+    \r
+    <KEYWORDS>\r
+      <KEYWORD2>$ASCII</KEYWORD2>\r
+      <KEYWORD2>$BINARY</KEYWORD2>\r
+      <KEYWORD2>$CB</KEYWORD2>\r
+      <KEYWORD2>$CHAR</KEYWORD2>\r
+      <KEYWORD2>$CHARZB</KEYWORD2>\r
+      <KEYWORD2>$EBCDIC</KEYWORD2>\r
+      <KEYWORD2>$HEX</KEYWORD2>\r
+      <KEYWORD2>$OCTAL</KEYWORD2>\r
+      <KEYWORD2>$VARYING</KEYWORD2>\r
+      <KEYWORD2>%BQUOTE</KEYWORD2>\r
+      <KEYWORD2>%DO</KEYWORD2>\r
+      <KEYWORD2>%ELSE</KEYWORD2>\r
+      <KEYWORD2>%END</KEYWORD2>\r
+      <KEYWORD2>%EVAL</KEYWORD2>\r
+      <KEYWORD2>%Global</KEYWORD2>\r
+      <KEYWORD2>%GOTO</KEYWORD2>\r
+      <KEYWORD2>%IF</KEYWORD2>\r
+      <KEYWORD2>%INC</KEYWORD2>\r
+      <KEYWORD2>%INCLUDE</KEYWORD2>\r
+      <KEYWORD2>%INDEX</KEYWORD2>\r
+      <KEYWORD2>%INPUT</KEYWORD2>\r
+      <KEYWORD2>%LENGTH</KEYWORD2>\r
+      <KEYWORD2>%LET</KEYWORD2>\r
+      <KEYWORD2>%LOCAL</KEYWORD2>\r
+      <KEYWORD2>%MACRO</KEYWORD2>\r
+      <KEYWORD2>%MEND</KEYWORD2>\r
+      <KEYWORD2>%NRBQUOTE</KEYWORD2>\r
+      <KEYWORD2>%NRQUOTE</KEYWORD2>\r
+      <KEYWORD2>%NRSTR</KEYWORD2>\r
+      <KEYWORD2>%PUT</KEYWORD2>\r
+      <KEYWORD2>%QSCAN</KEYWORD2>\r
+      <KEYWORD2>%Quote</KEYWORD2>\r
+      <KEYWORD2>%RUN</KEYWORD2>\r
+      <KEYWORD2>%SUBSTR</KEYWORD2>\r
+      <KEYWORD2>%SYSEXEC</KEYWORD2>\r
+      <KEYWORD2>%THEN</KEYWORD2>\r
+      <KEYWORD2>%UNTIL</KEYWORD2>\r
+      <KEYWORD2>%WHILE</KEYWORD2>\r
+      <KEYWORD2>%WINDOW</KEYWORD2>\r
+      <KEYWORD2>_ALL_</KEYWORD2>\r
+      <KEYWORD2>_CHARACTER_</KEYWORD2>\r
+      <KEYWORD2>_CMD_</KEYWORD2>\r
+      <KEYWORD2>_ERROR_</KEYWORD2>\r
+      <KEYWORD2>_I_</KEYWORD2>\r
+      <KEYWORD2>_INFILE_</KEYWORD2>\r
+      <KEYWORD2>_LAST_</KEYWORD2>\r
+      <KEYWORD2>_MSG_</KEYWORD2>\r
+      <KEYWORD2>_N_</KEYWORD2>\r
+      <KEYWORD2>_NULL_</KEYWORD2>\r
+      <KEYWORD2>_NUMERIC_</KEYWORD2>\r
+      <KEYWORD2>_TEMPORARY_</KEYWORD2>\r
+      <KEYWORD2>_TYPE_</KEYWORD2>\r
+      <KEYWORD2>=DATA</KEYWORD2>\r
+      <KEYWORD2>ABORT</KEYWORD2>\r
+      <KEYWORD2>ADD</KEYWORD2>\r
+      <KEYWORD2>ADJRSQ</KEYWORD2>\r
+      <KEYWORD2>AND</KEYWORD2>\r
+      <KEYWORD2>ARRAY</KEYWORD2>\r
+      <KEYWORD2>ATTRIB</KEYWORD2>\r
+      <KEYWORD2>BACKWARD</KEYWORD2>\r
+      <KEYWORD2>BINARY</KEYWORD2>\r
+      <KEYWORD2>BLOCKSIZE</KEYWORD2>\r
+      <KEYWORD2>BY</KEYWORD2>\r
+      <KEYWORD2>BZ</KEYWORD2>\r
+      <KEYWORD2>CALL</KEYWORD2>\r
+      <KEYWORD2>CARDS</KEYWORD2>\r
+      <KEYWORD2>CARDS4</KEYWORD2>\r
+      <KEYWORD2>CHAR</KEYWORD2>\r
+      <KEYWORD2>CLASS</KEYWORD2>\r
+      <KEYWORD2>COL</KEYWORD2>\r
+      <KEYWORD2>COLLIN</KEYWORD2>\r
+      <KEYWORD2>COLUMN</KEYWORD2>\r
+      <KEYWORD2>COMMA</KEYWORD2>\r
+      <KEYWORD2>COMMAX</KEYWORD2>\r
+      <KEYWORD2>CREATE</KEYWORD2>\r
+      <KEYWORD2>DATA</KEYWORD2>\r
+      <KEYWORD2>DATA=</KEYWORD2>\r
+      <KEYWORD2>DATE</KEYWORD2>\r
+      <KEYWORD2>DATETIME</KEYWORD2>\r
+      <KEYWORD2>DDMMYY</KEYWORD2>\r
+      <KEYWORD2>DECENDING</KEYWORD2>\r
+      <KEYWORD2>DEFINE</KEYWORD2>\r
+      <KEYWORD2>DELETE</KEYWORD2>\r
+      <KEYWORD2>DELIMITER</KEYWORD2>\r
+      <KEYWORD2>DISPLAY</KEYWORD2>\r
+      <KEYWORD2>DLM</KEYWORD2>\r
+      <KEYWORD2>DO</KEYWORD2>\r
+      <KEYWORD2>DROP</KEYWORD2>\r
+      <KEYWORD2>ELSE</KEYWORD2>\r
+      <KEYWORD2>END</KEYWORD2>\r
+      <KEYWORD2>ENDSAS</KEYWORD2>\r
+      <KEYWORD2>EOF</KEYWORD2>\r
+      <KEYWORD2>EOV</KEYWORD2>\r
+      <KEYWORD2>EQ</KEYWORD2>\r
+      <KEYWORD2>ERRORS</KEYWORD2>\r
+      <KEYWORD2>FILE</KEYWORD2>\r
+      <KEYWORD2>FILENAME</KEYWORD2>\r
+      <KEYWORD2>FILEVAR</KEYWORD2>\r
+      <KEYWORD2>FIRST.</KEYWORD2>\r
+      <KEYWORD2>FIRSTOBS</KEYWORD2>\r
+      <KEYWORD2>FOOTNOTE</KEYWORD2>\r
+      <KEYWORD2>FOOTNOTE1</KEYWORD2>\r
+      <KEYWORD2>FOOTNOTE2</KEYWORD2>\r
+      <KEYWORD2>FOOTNOTE3</KEYWORD2>\r
+      <KEYWORD2>FORM</KEYWORD2>\r
+      <KEYWORD2>FORMAT</KEYWORD2>\r
+      <KEYWORD2>FORMCHAR</KEYWORD2>\r
+      <KEYWORD2>FORMDELIM</KEYWORD2>\r
+      <KEYWORD2>FORMDLIM</KEYWORD2>\r
+      <KEYWORD2>FORWARD</KEYWORD2>\r
+      <KEYWORD2>FROM</KEYWORD2>\r
+      <KEYWORD2>GO</KEYWORD2>\r
+      <KEYWORD2>GROUP</KEYWORD2>\r
+      <KEYWORD2>GT</KEYWORD2>\r
+      <KEYWORD2>HBAR</KEYWORD2>\r
+      <KEYWORD2>HEX</KEYWORD2>\r
+      <KEYWORD2>HPCT</KEYWORD2>\r
+      <KEYWORD2>HVAR</KEYWORD2>\r
+      <KEYWORD2>IB</KEYWORD2>\r
+      <KEYWORD2>ID</KEYWORD2>\r
+      <KEYWORD2>IEEE</KEYWORD2>\r
+      <KEYWORD2>IF</KEYWORD2>\r
+      <KEYWORD2>IN</KEYWORD2>\r
+      <KEYWORD2>INFILE</KEYWORD2>\r
+      <KEYWORD2>INFORMAT</KEYWORD2>\r
+      <KEYWORD2>INPUT</KEYWORD2>\r
+      <KEYWORD2>INR</KEYWORD2>\r
+      <KEYWORD2>JOIN</KEYWORD2>\r
+      <KEYWORD2>JULIAN</KEYWORD2>\r
+      <KEYWORD2>KEEP</KEYWORD2>\r
+      <KEYWORD2>LABEL</KEYWORD2>\r
+      <KEYWORD2>LAG</KEYWORD2>\r
+      <KEYWORD2>LAST.</KEYWORD2>\r
+      <KEYWORD2>LE</KEYWORD2>\r
+      <KEYWORD2>LIB</KEYWORD2>\r
+      <KEYWORD2>LIBNAME</KEYWORD2>\r
+      <KEYWORD2>LINE</KEYWORD2>\r
+      <KEYWORD2>LINESIZE</KEYWORD2>\r
+      <KEYWORD2>LINK</KEYWORD2>\r
+      <KEYWORD2>LIST</KEYWORD2>\r
+      <KEYWORD2>LOSTCARD</KEYWORD2>\r
+      <KEYWORD2>LRECL</KEYWORD2>\r
+      <KEYWORD2>LS</KEYWORD2>\r
+      <KEYWORD2>MACRO</KEYWORD2>\r
+      <KEYWORD2>MACROGEN</KEYWORD2>\r
+      <KEYWORD2>MAXDEC</KEYWORD2>\r
+      <KEYWORD2>MAXR</KEYWORD2>\r
+      <KEYWORD2>MEDIAN</KEYWORD2>\r
+      <KEYWORD2>MEMTYPE</KEYWORD2>\r
+      <KEYWORD2>MERGE</KEYWORD2>\r
+      <KEYWORD2>MERROR</KEYWORD2>\r
+      <KEYWORD2>MISSOVE</KEYWORD2>\r
+      <KEYWORD2>MLOGIC</KEYWORD2>\r
+      <KEYWORD2>MMDDYY</KEYWORD2>\r
+      <KEYWORD2>MODE</KEYWORD2>\r
+      <KEYWORD2>MODEL</KEYWORD2>\r
+      <KEYWORD2>MONYY</KEYWORD2>\r
+      <KEYWORD2>MPRINT</KEYWORD2>\r
+      <KEYWORD2>MRECALL</KEYWORD2>\r
+      <KEYWORD2>NE</KEYWORD2>\r
+      <KEYWORD2>NEW</KEYWORD2>\r
+      <KEYWORD2>NO</KEYWORD2>\r
+      <KEYWORD2>NOBS</KEYWORD2>\r
+      <KEYWORD2>NOCENTER</KEYWORD2>\r
+      <KEYWORD2>NOCUM</KEYWORD2>\r
+      <KEYWORD2>NODATE</KEYWORD2>\r
+      <KEYWORD2>NODUP</KEYWORD2>\r
+      <KEYWORD2>NODUPKEY</KEYWORD2>\r
+      <KEYWORD2>NOINT</KEYWORD2>\r
+      <KEYWORD2>NONUMBER</KEYWORD2>\r
+      <KEYWORD2>NOPAD</KEYWORD2>\r
+      <KEYWORD2>NOPRINT</KEYWORD2>\r
+      <KEYWORD2>NOROW</KEYWORD2>\r
+      <KEYWORD2>NOT</KEYWORD2>\r
+      <KEYWORD2>NOTITLE</KEYWORD2>\r
+      <KEYWORD2>NOTITLES</KEYWORD2>\r
+      <KEYWORD2>NOXSYNC</KEYWORD2>\r
+      <KEYWORD2>NOXWAIT</KEYWORD2>\r
+      <KEYWORD2>NUMBER</KEYWORD2>\r
+      <KEYWORD2>NWAY</KEYWORD2>\r
+      <KEYWORD2>OBS</KEYWORD2>\r
+      <KEYWORD2>OPTION</KEYWORD2>\r
+      <KEYWORD2>OPTIONS</KEYWORD2>\r
+      <KEYWORD2>OR</KEYWORD2>\r
+      <KEYWORD2>ORDER</KEYWORD2>\r
+      <KEYWORD2>OTHERWISE</KEYWORD2>\r
+      <KEYWORD2>OUT</KEYWORD2>\r
+      <KEYWORD2>OUTPUT</KEYWORD2>\r
+      <KEYWORD2>OVER</KEYWORD2>\r
+      <KEYWORD2>PAD</KEYWORD2>\r
+      <KEYWORD2>PAD2</KEYWORD2>\r
+      <KEYWORD2>PAGESIZE</KEYWORD2>\r
+      <KEYWORD2>PD</KEYWORD2>\r
+      <KEYWORD2>PERCENT</KEYWORD2>\r
+      <KEYWORD2>PIB</KEYWORD2>\r
+      <KEYWORD2>PK</KEYWORD2>\r
+      <KEYWORD2>POINT</KEYWORD2>\r
+      <KEYWORD2>POSITION</KEYWORD2>\r
+      <KEYWORD2>PRINTER</KEYWORD2>\r
+      <KEYWORD2>PROC</KEYWORD2>\r
+      <KEYWORD2>PS</KEYWORD2>\r
+      <KEYWORD2>PUT</KEYWORD2>\r
+      <KEYWORD2>QUIT</KEYWORD2>\r
+      <KEYWORD2>R</KEYWORD2>\r
+      <KEYWORD2>RB</KEYWORD2>\r
+      <KEYWORD2>RECFM</KEYWORD2>\r
+      <KEYWORD2>REG</KEYWORD2>\r
+      <KEYWORD2>REGR</KEYWORD2>\r
+      <KEYWORD2>RENAME</KEYWORD2>\r
+      <KEYWORD2>REPLACE</KEYWORD2>\r
+      <KEYWORD2>RETAIN</KEYWORD2>\r
+      <KEYWORD2>RETURN</KEYWORD2>\r
+      <KEYWORD2>REUSE</KEYWORD2>\r
+      <KEYWORD2>RSQUARE</KEYWORD2>\r
+      <KEYWORD2>RUN</KEYWORD2>\r
+      <KEYWORD2>SASAUTOS</KEYWORD2>\r
+      <KEYWORD2>SCAN</KEYWORD2>\r
+      <KEYWORD2>SELECT</KEYWORD2>\r
+      <KEYWORD2>SELECTION</KEYWORD2>\r
+      <KEYWORD2>SERROR</KEYWORD2>\r
+      <KEYWORD2>SET</KEYWORD2>\r
+      <KEYWORD2>SIMPLE</KEYWORD2>\r
+      <KEYWORD2>SLE</KEYWORD2>\r
+      <KEYWORD2>SLS</KEYWORD2>\r
+      <KEYWORD2>START</KEYWORD2>\r
+      <KEYWORD2>STDIN</KEYWORD2>\r
+      <KEYWORD2>STOP</KEYWORD2>\r
+      <KEYWORD2>STOPOVER</KEYWORD2>\r
+      <KEYWORD2>SUBSTR</KEYWORD2>\r
+      <KEYWORD2>SYMBOL</KEYWORD2>\r
+      <KEYWORD2>SYMBOLGEN</KEYWORD2>\r
+      <KEYWORD2>T</KEYWORD2>\r
+      <KEYWORD2>TABLE</KEYWORD2>\r
+      <KEYWORD2>TABLES</KEYWORD2>\r
+      <KEYWORD2>THEN</KEYWORD2>\r
+      <KEYWORD2>TITLE</KEYWORD2>\r
+      <KEYWORD2>TITLE1</KEYWORD2>\r
+      <KEYWORD2>TITLE2</KEYWORD2>\r
+      <KEYWORD2>TITLE3</KEYWORD2>\r
+      <KEYWORD2>TITLE4</KEYWORD2>\r
+      <KEYWORD2>TITLE5</KEYWORD2>\r
+      <KEYWORD2>TO</KEYWORD2>\r
+      <KEYWORD2>TOL</KEYWORD2>\r
+      <KEYWORD2>UNFORMATTED</KEYWORD2>\r
+      <KEYWORD2>UNTIL</KEYWORD2>\r
+      <KEYWORD2>UPDATE</KEYWORD2>\r
+      <KEYWORD2>VALUE</KEYWORD2>\r
+      <KEYWORD2>VAR</KEYWORD2>\r
+      <KEYWORD2>WHEN</KEYWORD2>\r
+      <KEYWORD2>WHERE</KEYWORD2>\r
+      <KEYWORD2>WHILE</KEYWORD2>\r
+      <KEYWORD2>WINDOW</KEYWORD2>\r
+      <KEYWORD2>WORK</KEYWORD2>\r
+      <KEYWORD2>X</KEYWORD2>\r
+      <KEYWORD2>XSYNC</KEYWORD2>\r
+      <KEYWORD2>XWAIT</KEYWORD2>\r
+      <KEYWORD2>YES</KEYWORD2>\r
+      <KEYWORD2>YYMMDD</KEYWORD2>\r
+    </KEYWORDS>\r
+\r
+    </RULES>\r
+</MODE>\r
+\r
+\r
+\r
diff --git a/extra/xmode/modes/scheme.xml b/extra/xmode/modes/scheme.xml
new file mode 100644 (file)
index 0000000..1117eaa
--- /dev/null
@@ -0,0 +1,236 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd"><MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="#|"/>\r
+               <PROPERTY NAME="commentEnd" VALUE="|#"/>\r
+               <PROPERTY NAME="lineComment" VALUE=";"/>\r
+               <PROPERTY NAME="noWordSep" VALUE="_-+?:*/!"/>\r
+               <PROPERTY NAME="unalignedOpenBrackets" VALUE="("/>\r
+               <PROPERTY NAME="unalignedCloseBrackets" VALUE=")"/>\r
+               <PROPERTY NAME="multipleBracketIndent" VALUE="true" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE" NO_WORD_SEP="_-+?:*/!">\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>#|</BEGIN>\r
+                       <END>|#</END>\r
+               </SPAN>\r
+               <SEQ TYPE="NULL">'(</SEQ>\r
+               <MARK_FOLLOWING TYPE="LITERAL1">'</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="LITERAL1">#\</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="LITERAL1">#b</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="LITERAL1">#d</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="LITERAL1">#o</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="LITERAL1">#x</MARK_FOLLOWING>\r
+               <EOL_SPAN TYPE="COMMENT1">;</EOL_SPAN>\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <KEYWORDS>\r
+                       <KEYWORD1>and</KEYWORD1>\r
+                       <KEYWORD1>begin</KEYWORD1>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>cond</KEYWORD1>\r
+                       <KEYWORD1>cond-expand</KEYWORD1>\r
+                       <KEYWORD1>define</KEYWORD1>\r
+                       <KEYWORD1>define-macro</KEYWORD1>\r
+                       <KEYWORD1>delay</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>fluid-let</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>lambda</KEYWORD1>\r
+                       <KEYWORD1>let</KEYWORD1>\r
+                       <KEYWORD1>let*</KEYWORD1>\r
+                       <KEYWORD1>letrec</KEYWORD1>\r
+                       <KEYWORD1>or</KEYWORD1>\r
+                       <KEYWORD1>quasiquote</KEYWORD1>\r
+                       <KEYWORD1>quote</KEYWORD1>\r
+                       <KEYWORD1>set!</KEYWORD1>\r
+                       <KEYWORD2>abs</KEYWORD2>\r
+                       <KEYWORD2>acos</KEYWORD2>\r
+                       <KEYWORD2>angle</KEYWORD2>\r
+                       <KEYWORD2>append</KEYWORD2>\r
+                       <KEYWORD2>apply</KEYWORD2>\r
+                       <KEYWORD2>asin</KEYWORD2>\r
+                       <KEYWORD2>assoc</KEYWORD2>\r
+                       <KEYWORD2>assq</KEYWORD2>\r
+                       <KEYWORD2>assv</KEYWORD2>\r
+                       <KEYWORD2>atan</KEYWORD2>\r
+                       <KEYWORD2>car</KEYWORD2>\r
+                       <KEYWORD2>cdr</KEYWORD2>\r
+                       <KEYWORD2>caar</KEYWORD2>\r
+                       <KEYWORD2>cadr</KEYWORD2>\r
+                       <KEYWORD2>cdar</KEYWORD2>\r
+                       <KEYWORD2>cddr</KEYWORD2>\r
+                       <KEYWORD2>caaar</KEYWORD2>\r
+                       <KEYWORD2>caadr</KEYWORD2>\r
+                       <KEYWORD2>cadar</KEYWORD2>\r
+                       <KEYWORD2>caddr</KEYWORD2>\r
+                       <KEYWORD2>cdaar</KEYWORD2>\r
+                       <KEYWORD2>cdadr</KEYWORD2>\r
+                       <KEYWORD2>cddar</KEYWORD2>\r
+                       <KEYWORD2>cdddr</KEYWORD2>\r
+                       <KEYWORD2>call-with-current-continuation</KEYWORD2>\r
+                       <KEYWORD2>call-with-input-file</KEYWORD2>\r
+                       <KEYWORD2>call-with-output-file</KEYWORD2>\r
+                       <KEYWORD2>call-with-values</KEYWORD2>\r
+                       <KEYWORD2>call/cc</KEYWORD2>\r
+                       <KEYWORD2>catch</KEYWORD2>\r
+                       <KEYWORD2>ceiling</KEYWORD2>\r
+                       <KEYWORD2>char-&gt;integer</KEYWORD2>\r
+                       <KEYWORD2>char-downcase</KEYWORD2>\r
+                       <KEYWORD2>char-upcase</KEYWORD2>\r
+                       <KEYWORD2>close-input-port</KEYWORD2>\r
+                       <KEYWORD2>close-output-port</KEYWORD2>\r
+                       <KEYWORD2>cons</KEYWORD2>\r
+                       <KEYWORD2>cos</KEYWORD2>\r
+                       <KEYWORD2>current-input-port</KEYWORD2>\r
+                       <KEYWORD2>current-output-port</KEYWORD2>\r
+                       <KEYWORD2>delete-file</KEYWORD2>\r
+                       <KEYWORD2>display</KEYWORD2>\r
+                       <KEYWORD2>dynamic-wind</KEYWORD2>\r
+                       <KEYWORD2>eval</KEYWORD2>\r
+                       <KEYWORD2>exit</KEYWORD2>\r
+                       <KEYWORD2>exact-&gt;inexact</KEYWORD2>\r
+                       <KEYWORD2>exp</KEYWORD2>\r
+                       <KEYWORD2>expt</KEYWORD2>\r
+                       <KEYWORD2>file-or-directory-modify-seconds</KEYWORD2>\r
+                       <KEYWORD2>floor</KEYWORD2>\r
+                       <KEYWORD2>force</KEYWORD2>\r
+                       <KEYWORD2>for-each</KEYWORD2>\r
+                       <KEYWORD2>gcd</KEYWORD2>\r
+                       <KEYWORD2>gensym</KEYWORD2>\r
+                       <KEYWORD2>get-output-string</KEYWORD2>\r
+                       <KEYWORD2>getenv</KEYWORD2>\r
+                       <KEYWORD2>imag-part</KEYWORD2>\r
+                       <KEYWORD2>integer-&gt;char</KEYWORD2>\r
+                       <KEYWORD2>lcm</KEYWORD2>\r
+                       <KEYWORD2>length</KEYWORD2>\r
+                       <KEYWORD2>list</KEYWORD2>\r
+                       <KEYWORD2>list-&gt;string</KEYWORD2>\r
+                       <KEYWORD2>list-&gt;vector</KEYWORD2>\r
+                       <KEYWORD2>list-ref</KEYWORD2>\r
+                       <KEYWORD2>list-tail</KEYWORD2>\r
+                       <KEYWORD2>load</KEYWORD2>\r
+                       <KEYWORD2>log</KEYWORD2>\r
+                       <KEYWORD2>magnitude</KEYWORD2>\r
+                       <KEYWORD2>make-polar</KEYWORD2>\r
+                       <KEYWORD2>make-rectangular</KEYWORD2>\r
+                       <KEYWORD2>make-string</KEYWORD2>\r
+                       <KEYWORD2>make-vector</KEYWORD2>\r
+                       <KEYWORD2>map</KEYWORD2>\r
+                       <KEYWORD2>max</KEYWORD2>\r
+                       <KEYWORD2>member</KEYWORD2>\r
+                       <KEYWORD2>memq</KEYWORD2>\r
+                       <KEYWORD2>memv</KEYWORD2>\r
+                       <KEYWORD2>min</KEYWORD2>\r
+                       <KEYWORD2>modulo</KEYWORD2>\r
+                       <KEYWORD2>newline</KEYWORD2>\r
+                       <KEYWORD2>nil</KEYWORD2>\r
+                       <KEYWORD2>not</KEYWORD2>\r
+                       <KEYWORD2>number-&gt;string</KEYWORD2>\r
+                       <KEYWORD2>open-input-file</KEYWORD2>\r
+                       <KEYWORD2>open-input-string</KEYWORD2>\r
+                       <KEYWORD2>open-output-file</KEYWORD2>\r
+                       <KEYWORD2>open-output-string</KEYWORD2>\r
+                       <KEYWORD2>peek-char</KEYWORD2>\r
+                       <KEYWORD2>quotient</KEYWORD2>\r
+                       <KEYWORD2>read</KEYWORD2>\r
+                       <KEYWORD2>read-char</KEYWORD2>\r
+                       <KEYWORD2>read-line</KEYWORD2>\r
+                       <KEYWORD2>real-part</KEYWORD2>\r
+                       <KEYWORD2>remainder</KEYWORD2>\r
+                       <KEYWORD2>reverse</KEYWORD2>\r
+                       <KEYWORD2>reverse!</KEYWORD2>\r
+                       <KEYWORD2>round</KEYWORD2>\r
+                       <KEYWORD2>set-car!</KEYWORD2>\r
+                       <KEYWORD2>set-cdr!</KEYWORD2>\r
+                       <KEYWORD2>sin</KEYWORD2>\r
+                       <KEYWORD2>sqrt</KEYWORD2>\r
+                       <KEYWORD2>string</KEYWORD2>\r
+                       <KEYWORD2>string-&gt;list</KEYWORD2>\r
+                       <KEYWORD2>string-&gt;number</KEYWORD2>\r
+                       <KEYWORD2>string-&gt;symbol</KEYWORD2>\r
+                       <KEYWORD2>string-append</KEYWORD2>\r
+                       <KEYWORD2>string-copy</KEYWORD2>\r
+                       <KEYWORD2>string-fill!</KEYWORD2>\r
+                       <KEYWORD2>string-length</KEYWORD2>\r
+                       <KEYWORD2>string-ref</KEYWORD2>\r
+                       <KEYWORD2>string-set!</KEYWORD2>\r
+                       <KEYWORD2>substring</KEYWORD2>\r
+                       <KEYWORD2>symbol-&gt;string</KEYWORD2>\r
+                       <KEYWORD2>system</KEYWORD2>\r
+                       <KEYWORD2>tan</KEYWORD2>\r
+                       <KEYWORD2>truncate</KEYWORD2>\r
+                       <KEYWORD2>values</KEYWORD2>\r
+                       <KEYWORD2>vector</KEYWORD2>\r
+                       <KEYWORD2>vector-&gt;list</KEYWORD2>\r
+                       <KEYWORD2>vector-fill!</KEYWORD2>\r
+                       <KEYWORD2>vector-length</KEYWORD2>\r
+                       <KEYWORD2>vector-ref</KEYWORD2>\r
+                       <KEYWORD2>vector-set!</KEYWORD2>\r
+                       <KEYWORD2>with-input-from-file</KEYWORD2>\r
+                       <KEYWORD2>with-output-to-file</KEYWORD2>\r
+                       <KEYWORD2>write</KEYWORD2>\r
+                       <KEYWORD2>write-char</KEYWORD2>\r
+                       <KEYWORD3>boolean?</KEYWORD3>\r
+                       <KEYWORD3>char-alphabetic?</KEYWORD3>\r
+                       <KEYWORD3>char-ci&lt;=?</KEYWORD3>\r
+                       <KEYWORD3>char-ci&lt;?</KEYWORD3>\r
+                       <KEYWORD3>char-ci=?</KEYWORD3>\r
+                       <KEYWORD3>char-ci&gt;=?</KEYWORD3>\r
+                       <KEYWORD3>char-ci&gt;?</KEYWORD3>\r
+                       <KEYWORD3>char-lower-case?</KEYWORD3>\r
+                       <KEYWORD3>char-numeric?</KEYWORD3>\r
+                       <KEYWORD3>char-ready?</KEYWORD3>\r
+                       <KEYWORD3>char-upper-case?</KEYWORD3>\r
+                       <KEYWORD3>char-whitespace?</KEYWORD3>\r
+                       <KEYWORD3>char&lt;=?</KEYWORD3>\r
+                       <KEYWORD3>char&lt;?</KEYWORD3>\r
+                       <KEYWORD3>char=?</KEYWORD3>\r
+                       <KEYWORD3>char&gt;=?</KEYWORD3>\r
+                       <KEYWORD3>char&gt;?</KEYWORD3>\r
+                       <KEYWORD3>char?</KEYWORD3>\r
+                       <KEYWORD3>complex?</KEYWORD3>\r
+                       <KEYWORD3>eof-object?</KEYWORD3>\r
+                       <KEYWORD3>eq?</KEYWORD3>\r
+                       <KEYWORD3>equal?</KEYWORD3>\r
+                       <KEYWORD3>eqv?</KEYWORD3>\r
+                       <KEYWORD3>even?</KEYWORD3>\r
+                       <KEYWORD3>exact?</KEYWORD3>\r
+                       <KEYWORD3>file-exists?</KEYWORD3>\r
+                       <KEYWORD3>inexact?</KEYWORD3>\r
+                       <KEYWORD3>input-port?</KEYWORD3>\r
+                       <KEYWORD3>integer?</KEYWORD3>\r
+                       <KEYWORD3>list?</KEYWORD3>\r
+                       <KEYWORD3>negative?</KEYWORD3>\r
+                       <KEYWORD3>null?</KEYWORD3>\r
+                       <KEYWORD3>number?</KEYWORD3>\r
+                       <KEYWORD3>odd?</KEYWORD3>\r
+                       <KEYWORD3>output-port?</KEYWORD3>\r
+                       <KEYWORD3>pair?</KEYWORD3>\r
+                       <KEYWORD3>port?</KEYWORD3>\r
+                       <KEYWORD3>positive?</KEYWORD3>\r
+                       <KEYWORD3>procedure?</KEYWORD3>\r
+                       <KEYWORD3>rational?</KEYWORD3>\r
+                       <KEYWORD3>real?</KEYWORD3>\r
+                       <KEYWORD3>string-ci&lt;=?</KEYWORD3>\r
+                       <KEYWORD3>string-ci&lt;?</KEYWORD3>\r
+                       <KEYWORD3>string-ci=?</KEYWORD3>\r
+                       <KEYWORD3>string-ci&gt;=?</KEYWORD3>\r
+                       <KEYWORD3>string-ci&gt;?</KEYWORD3>\r
+                       <KEYWORD3>string&lt;=?</KEYWORD3>\r
+                       <KEYWORD3>string&lt;?</KEYWORD3>\r
+                       <KEYWORD3>string=?</KEYWORD3>\r
+                       <KEYWORD3>string&gt;=?</KEYWORD3>\r
+                       <KEYWORD3>string&gt;?</KEYWORD3>\r
+                       <KEYWORD3>string?</KEYWORD3>\r
+                       <KEYWORD3>symbol?</KEYWORD3>\r
+                       <KEYWORD3>vector?</KEYWORD3>\r
+                       <KEYWORD3>zero?</KEYWORD3>\r
+                       <LITERAL2>#t</LITERAL2>\r
+                       <LITERAL2>#f</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/sdl_pr.xml b/extra/xmode/modes/sdl_pr.xml
new file mode 100644 (file)
index 0000000..0f67aa8
--- /dev/null
@@ -0,0 +1,228 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+  sdl_pr.xml   K. J. Turner <kjt@cs.stir.ac.uk>        26th February 2004\r
+\r
+  SDL (Specification and Description Language) is an ITU standard (Z.100)\r
+  for a formal specification language used in communications and system specification generally.\r
+\r
+  This mode handles SDL/PR (Phrase Representation), but does not (yet) deal with SDL 2000.\r
+\r
+  Auto-indentation occurs if the following are at the start of a line (ignoring\r
+  leading white space): "block", "channel", "connection", "decision", "generator", "input", "macro", "newtype", "operator", "package", "procedure", "process", "refinement", "service", "start", "state", "substructure", "syntype", "system".\r
+\r
+  This also happens if the following appear on their own (i.e. also ignoring\r
+  trailing white space): "signal".\r
+-->\r
+\r
+<MODE>\r
+  <PROPS>\r
+    <PROPERTY NAME="commentStart" VALUE="/*"/>\r
+    <PROPERTY NAME="commentEnd" VALUE="*/"/>\r
+    <PROPERTY NAME="indentNextLines"\r
+      VALUE="\s*(block|channel|connection|decision|generator|input|macro|newtype|operator|package|procedure|process|refinement|service|start|state|substructure|syntype|system).*|\s*(signal)\s*"/>\r
+  </PROPS>\r
+\r
+  <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+    <!-- SDT/TAU Comments -->\r
+    <SPAN TYPE="COMMENT2">\r
+      <BEGIN>/*#SDTREF</BEGIN>\r
+      <END>*/</END>\r
+    </SPAN>\r
+\r
+    <!-- Standard Comments -->\r
+    <SPAN TYPE="COMMENT1">\r
+      <BEGIN>/*</BEGIN>\r
+      <END>*/</END>\r
+    </SPAN>\r
+\r
+    <!-- String Literals -->\r
+    <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE">\r
+      <BEGIN>'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN>\r
+\r
+    <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE">\r
+      <BEGIN>"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN>\r
+\r
+    <!-- Standard Operators -->\r
+    <SEQ TYPE="OPERATOR">+</SEQ>\r
+    <SEQ TYPE="OPERATOR">-</SEQ>\r
+    <SEQ TYPE="OPERATOR">*</SEQ>\r
+    <SEQ TYPE="OPERATOR">/</SEQ>\r
+    <SEQ TYPE="OPERATOR">==</SEQ>\r
+    <SEQ TYPE="OPERATOR">/=</SEQ>\r
+    <SEQ TYPE="OPERATOR">:=</SEQ>\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+    <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+    <SEQ TYPE="OPERATOR">.</SEQ>\r
+    <SEQ TYPE="OPERATOR">!</SEQ>\r
+    <SEQ TYPE="OPERATOR">//</SEQ>\r
+\r
+    <SEQ TYPE="OPERATOR" AT_WORD_START="TRUE">and</SEQ>\r
+    <SEQ TYPE="OPERATOR" AT_WORD_START="TRUE">mod</SEQ>\r
+    <SEQ TYPE="OPERATOR" AT_WORD_START="TRUE">not</SEQ>\r
+    <SEQ TYPE="OPERATOR" AT_WORD_START="TRUE">or</SEQ>\r
+    <SEQ TYPE="OPERATOR" AT_WORD_START="TRUE">rem</SEQ>\r
+    <SEQ TYPE="OPERATOR" AT_WORD_START="TRUE">xor</SEQ>\r
+\r
+    <KEYWORDS>\r
+      <!-- Reserved Words -->\r
+      <KEYWORD1>active</KEYWORD1>\r
+      <KEYWORD1>adding</KEYWORD1>\r
+      <KEYWORD1>all</KEYWORD1>\r
+      <KEYWORD1>alternative</KEYWORD1>\r
+      <KEYWORD1>any</KEYWORD1>\r
+      <KEYWORD1>as</KEYWORD1>\r
+      <KEYWORD1>atleast</KEYWORD1>\r
+      <KEYWORD1>axioms</KEYWORD1>\r
+      <KEYWORD1>block</KEYWORD1>\r
+      <KEYWORD1>call</KEYWORD1>\r
+      <KEYWORD1>channel</KEYWORD1>\r
+      <KEYWORD1>comment</KEYWORD1>\r
+      <KEYWORD1>connect</KEYWORD1>\r
+      <KEYWORD1>connection</KEYWORD1>\r
+      <KEYWORD1>constant</KEYWORD1>\r
+      <KEYWORD1>constants</KEYWORD1>\r
+      <KEYWORD1>create</KEYWORD1>\r
+      <KEYWORD1>dcl</KEYWORD1>\r
+      <KEYWORD1>decision</KEYWORD1>\r
+      <KEYWORD1>default</KEYWORD1>\r
+      <KEYWORD1>else</KEYWORD1>\r
+      <KEYWORD1>end</KEYWORD1>\r
+      <KEYWORD1>endalternative</KEYWORD1>\r
+      <KEYWORD1>endblock</KEYWORD1>\r
+      <KEYWORD1>endchannel</KEYWORD1>\r
+      <KEYWORD1>endconnection</KEYWORD1>\r
+      <KEYWORD1>enddecision</KEYWORD1>\r
+      <KEYWORD1>endgenerator</KEYWORD1>\r
+      <KEYWORD1>endmacro</KEYWORD1>\r
+      <KEYWORD1>endnewtype</KEYWORD1>\r
+      <KEYWORD1>endoperator</KEYWORD1>\r
+      <KEYWORD1>endpackage</KEYWORD1>\r
+      <KEYWORD1>endprocedure</KEYWORD1>\r
+      <KEYWORD1>endprocess</KEYWORD1>\r
+      <KEYWORD1>endrefinement</KEYWORD1>\r
+      <KEYWORD1>endselect</KEYWORD1>\r
+      <KEYWORD1>endservice</KEYWORD1>\r
+      <KEYWORD1>endstate</KEYWORD1>\r
+      <KEYWORD1>endsubstructure</KEYWORD1>\r
+      <KEYWORD1>endsyntype</KEYWORD1>\r
+      <KEYWORD1>endsystem</KEYWORD1>\r
+      <KEYWORD1>env</KEYWORD1>\r
+      <KEYWORD1>error</KEYWORD1>\r
+      <KEYWORD1>export</KEYWORD1>\r
+      <KEYWORD1>exported</KEYWORD1>\r
+      <KEYWORD1>external</KEYWORD1>\r
+      <KEYWORD1>fi</KEYWORD1>\r
+      <KEYWORD1>finalized</KEYWORD1>\r
+      <KEYWORD1>for</KEYWORD1>\r
+      <KEYWORD1>fpar</KEYWORD1>\r
+      <KEYWORD1>from</KEYWORD1>\r
+      <KEYWORD1>gate</KEYWORD1>\r
+      <KEYWORD1>generator</KEYWORD1>\r
+      <KEYWORD1>if</KEYWORD1>\r
+      <KEYWORD1>import</KEYWORD1>\r
+      <KEYWORD1>imported</KEYWORD1>\r
+      <KEYWORD1>in</KEYWORD1>\r
+      <KEYWORD1>inherits</KEYWORD1>\r
+      <KEYWORD1>input</KEYWORD1>\r
+      <KEYWORD1>interface</KEYWORD1>\r
+      <KEYWORD1>join</KEYWORD1>\r
+      <KEYWORD1>literal</KEYWORD1>\r
+      <KEYWORD1>literals</KEYWORD1>\r
+      <KEYWORD1>macro</KEYWORD1>\r
+      <KEYWORD1>macrodefinition</KEYWORD1>\r
+      <KEYWORD1>macroid</KEYWORD1>\r
+      <KEYWORD1>map</KEYWORD1>\r
+      <KEYWORD1>nameclass</KEYWORD1>\r
+      <KEYWORD1>newtype</KEYWORD1>\r
+      <KEYWORD1>nextstate</KEYWORD1>\r
+      <KEYWORD1>nodelay</KEYWORD1>\r
+      <KEYWORD1>noequality</KEYWORD1>\r
+      <KEYWORD1>none</KEYWORD1>\r
+      <KEYWORD1>now</KEYWORD1>\r
+      <KEYWORD1>offspring</KEYWORD1>\r
+      <KEYWORD1>operator</KEYWORD1>\r
+      <KEYWORD1>operators</KEYWORD1>\r
+      <KEYWORD1>ordering</KEYWORD1>\r
+      <KEYWORD1>out</KEYWORD1>\r
+      <KEYWORD1>output</KEYWORD1>\r
+      <KEYWORD1>package</KEYWORD1>\r
+      <KEYWORD1>parent</KEYWORD1>\r
+      <KEYWORD1>priority</KEYWORD1>\r
+      <KEYWORD1>procedure</KEYWORD1>\r
+      <KEYWORD1>process</KEYWORD1>\r
+      <KEYWORD1>provided</KEYWORD1>\r
+      <KEYWORD1>redefined</KEYWORD1>\r
+      <KEYWORD1>referenced</KEYWORD1>\r
+      <KEYWORD1>refinement</KEYWORD1>\r
+      <KEYWORD1>remote</KEYWORD1>\r
+      <KEYWORD1>reset</KEYWORD1>\r
+      <KEYWORD1>return</KEYWORD1>\r
+      <KEYWORD1>returns</KEYWORD1>\r
+      <KEYWORD1>revealed</KEYWORD1>\r
+      <KEYWORD1>reverse</KEYWORD1>\r
+      <KEYWORD1>route</KEYWORD1>\r
+      <KEYWORD1>save</KEYWORD1>\r
+      <KEYWORD1>select</KEYWORD1>\r
+      <KEYWORD1>self</KEYWORD1>\r
+      <KEYWORD1>sender</KEYWORD1>\r
+      <KEYWORD1>service</KEYWORD1>\r
+      <KEYWORD1>set</KEYWORD1>\r
+      <KEYWORD1>signal</KEYWORD1>\r
+      <KEYWORD1>signallist</KEYWORD1>\r
+      <KEYWORD1>signalroute</KEYWORD1>\r
+      <KEYWORD1>signalset</KEYWORD1>\r
+      <KEYWORD1>spelling</KEYWORD1>\r
+      <KEYWORD1>start</KEYWORD1>\r
+      <KEYWORD1>state</KEYWORD1>\r
+      <KEYWORD1>stop</KEYWORD1>\r
+      <KEYWORD1>struct</KEYWORD1>\r
+      <KEYWORD1>substructure</KEYWORD1>\r
+      <KEYWORD1>synonym</KEYWORD1>\r
+      <KEYWORD1>syntype</KEYWORD1>\r
+      <KEYWORD1>system</KEYWORD1>\r
+      <KEYWORD1>task</KEYWORD1>\r
+      <KEYWORD1>then</KEYWORD1>\r
+      <KEYWORD1>this</KEYWORD1>\r
+      <KEYWORD1>timer</KEYWORD1>\r
+      <KEYWORD1>to</KEYWORD1>\r
+      <KEYWORD1>type</KEYWORD1>\r
+      <KEYWORD1>use</KEYWORD1>\r
+      <KEYWORD1>via</KEYWORD1>\r
+      <KEYWORD1>view</KEYWORD1>\r
+      <KEYWORD1>viewed</KEYWORD1>\r
+      <KEYWORD1>virtual</KEYWORD1>\r
+      <KEYWORD1>with</KEYWORD1>\r
+\r
+      <!-- Standard Library Sorts -->\r
+      <KEYWORD2>Boolean</KEYWORD2>\r
+      <KEYWORD2>Character</KEYWORD2>\r
+      <KEYWORD2>Charstring</KEYWORD2>\r
+      <KEYWORD2>Duration</KEYWORD2>\r
+      <KEYWORD2>Integer</KEYWORD2>\r
+      <KEYWORD2>Natural</KEYWORD2>\r
+      <KEYWORD2>Real</KEYWORD2>\r
+      <KEYWORD2>PId</KEYWORD2>\r
+      <KEYWORD2>Time</KEYWORD2>\r
+\r
+      <!-- Standard Library Generators -->\r
+      <KEYWORD3>Array</KEYWORD3>\r
+      <KEYWORD3>String</KEYWORD3>\r
+      <KEYWORD3>Powerset</KEYWORD3>\r
+\r
+      <!-- Standard Library Literals -->\r
+      <LITERAL1>false</LITERAL1>\r
+      <LITERAL1>null</LITERAL1>\r
+      <LITERAL1>true</LITERAL1>\r
+    </KEYWORDS>\r
+  </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/sgml.xml b/extra/xmode/modes/sgml.xml
new file mode 100644 (file)
index 0000000..6f7737d
--- /dev/null
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+       </PROPS>\r
+       <RULES>\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD Entity declarations -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="xml::ENTITY-TAGS">\r
+                       <BEGIN>&lt;!ENTITY</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- CDATA sections -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="xml::CDATA">\r
+                       <BEGIN>&lt;![CDATA[</BEGIN>\r
+                       <END>]]&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD instructions -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">\r
+                       <BEGIN>&lt;!</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/shellscript.xml b/extra/xmode/modes/shellscript.xml
new file mode 100644 (file)
index 0000000..5d265b7
--- /dev/null
@@ -0,0 +1,163 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- Comments -->\r
+               <EOL_SPAN TYPE="COMMENT2">#!</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+\r
+               <!-- Variables -->\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$#</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$?</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$*</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$@</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$$</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$&lt;</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING>\r
+               <MARK_PREVIOUS TYPE="KEYWORD2" MATCH_TYPE="OPERATOR">=</MARK_PREVIOUS>\r
+\r
+               <!-- weird stuff -->\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="EXEC">\r
+                       <BEGIN>$((</BEGIN>\r
+                       <END>))</END>\r
+               </SPAN>\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="EXEC">\r
+                       <BEGIN>$(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="EXEC">\r
+                       <BEGIN>$[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="EXEC">\r
+                       <BEGIN>`</BEGIN>\r
+                       <END>`</END>\r
+               </SPAN>\r
+\r
+               <!-- Literals -->\r
+               <SPAN TYPE="LITERAL1" DELEGATE="LITERAL">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <!-- Readins -->\r
+               <SPAN_REGEXP HASH_CHAR="&lt;&lt;" TYPE="LITERAL1" DELEGATE="LITERAL">\r
+                       <BEGIN><![CDATA[<<[\p{Space}'"]*([\p{Alnum}_]+)[\p{Space}'"]*]]></BEGIN>\r
+                       <END>$1</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- Operators -->\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+\r
+               <!-- %jobnumber -->\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">%</MARK_FOLLOWING>\r
+\r
+               <!-- functions -->\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>then</KEYWORD1>\r
+                       <KEYWORD1>elif</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>fi</KEYWORD1>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <OPERATOR>;;</OPERATOR>\r
+                       <KEYWORD1>esac</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>done</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+\r
+                       <KEYWORD1>local</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+               </KEYWORDS>\r
+\r
+               <!-- some of these should be marked OPERATOR -->\r
+               <!-- <SEQ TYPE="NULL">)</SEQ>\r
+               <SEQ TYPE="NULL">(</SEQ>\r
+               <SEQ TYPE="NULL">=</SEQ>\r
+               <SEQ TYPE="NULL">!</SEQ>\r
+               <SEQ TYPE="NULL">&gt;=</SEQ>\r
+               <SEQ TYPE="NULL">&lt;=</SEQ>\r
+               <SEQ TYPE="NULL">+</SEQ>\r
+               <SEQ TYPE="NULL">-</SEQ>\r
+               <SEQ TYPE="NULL">/</SEQ>\r
+               <SEQ TYPE="NULL">*</SEQ>\r
+               <SEQ TYPE="NULL">^</SEQ>\r
+               <SEQ TYPE="NULL">~</SEQ>\r
+               <SEQ TYPE="NULL">}</SEQ>\r
+               <SEQ TYPE="NULL">{</SEQ>\r
+               SEQ TYPE="NULL">.</SEQ\r
+               <SEQ TYPE="NULL">,</SEQ>\r
+               <SEQ TYPE="NULL">;</SEQ>\r
+               <SEQ TYPE="NULL">]</SEQ>\r
+               <SEQ TYPE="NULL">[</SEQ>\r
+               <SEQ TYPE="NULL">?</SEQ>\r
+               <SEQ TYPE="NULL">:</SEQ> -->\r
+       </RULES>\r
+\r
+       <RULES SET="LITERAL" DEFAULT="LITERAL1" ESCAPE="\">\r
+               <!-- Variables -->\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING>\r
+       </RULES>\r
+\r
+       <RULES SET="EXEC" DEFAULT="KEYWORD3" ESCAPE="\">\r
+               <!-- Variables -->\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="KEYWORD3">\r
+                       <BEGIN>$((</BEGIN>\r
+                       <END>))</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="KEYWORD3">\r
+                       <BEGIN>$(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="KEYWORD3">\r
+                       <BEGIN>$[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING>\r
+\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/shtml.xml b/extra/xmode/modes/shtml.xml
new file mode 100644 (file)
index 0000000..b5ee02e
--- /dev/null
@@ -0,0 +1,117 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE">\r
+               <!-- SSI -->\r
+               <!-- SSI directives should ALWAYS end like this, with a space\r
+                       before the tag end, so let's make it colorize poorly otherwise -->\r
+               <!-- ... or really? see bug report 964860 -->\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="SSI">\r
+                       <BEGIN>&lt;!--#</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="html::JAVASCRIPT">\r
+                       <BEGIN>&lt;SCRIPT</BEGIN>\r
+                       <END>&lt;/SCRIPT&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="html::CSS">\r
+                       <BEGIN>&lt;STYLE</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD instructions -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">\r
+                       <BEGIN>&lt;!</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="TAGS" DEFAULT="MARKUP">\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="SSI" DEFAULT="KEYWORD3">\r
+               <SPAN TYPE="LITERAL1" MATCH_TYPE="OPERATOR" DELEGATE="SSI-EXPRESSION">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- MD: i don't think this is valid\r
+               <SPAN TYPE="LITERAL1" MATCH_TYPE="OPERATOR" DELEGATE="SSI-EXPRESSION">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               -->\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>config</KEYWORD1>\r
+                       <KEYWORD1>echo</KEYWORD1>\r
+                       <KEYWORD1>exec</KEYWORD1>\r
+                       <KEYWORD1>flastmod</KEYWORD1>\r
+                       <KEYWORD1>fsize</KEYWORD1>\r
+                       <KEYWORD1>include</KEYWORD1>\r
+\r
+                       <KEYWORD2>cgi</KEYWORD2>\r
+                       <KEYWORD2>errmsg</KEYWORD2>\r
+                       <KEYWORD2>file</KEYWORD2>\r
+                       <KEYWORD2>sizefmt</KEYWORD2>\r
+                       <KEYWORD2>timefmt</KEYWORD2>\r
+                       <KEYWORD2>var</KEYWORD2>\r
+                       <KEYWORD2>cmd</KEYWORD2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="SSI-EXPRESSION" DEFAULT="LITERAL1" ESCAPE="\">\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">||</SEQ>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/slate.xml b/extra/xmode/modes/slate.xml
new file mode 100644 (file)
index 0000000..4f9b2c5
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="unalignedOpenBrackets" VALUE="["/>\r
+               <PROPERTY NAME="unalignedCloseBrackets" VALUE="]"/>\r
+               <PROPERTY NAME="commentStart" VALUE="&quot;"/>\r
+               <PROPERTY NAME="commentEnd" VALUE="&quot;"/>\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="FALSE" ESCAPE="\"\r
+               HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="-?\d+([./]\d+)?">\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="LITERAL2">#</MARK_FOLLOWING>\r
+               \r
+               <SEQ TYPE="MARKUP">@</SEQ>\r
+               \r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               \r
+               <SPAN TYPE="KEYWORD1">\r
+                       <BEGIN>|</BEGIN>\r
+                       <END>|</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="LITERAL4">&amp;</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">`</MARK_FOLLOWING>\r
+               \r
+               <MARK_FOLLOWING TYPE="LITERAL3">$\</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="LITERAL3">$</MARK_FOLLOWING>\r
+               \r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/smalltalk.xml b/extra/xmode/modes/smalltalk.xml
new file mode 100644 (file)
index 0000000..27eefe7
--- /dev/null
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- Smalltalk mode, by Marcio Marchini mqm@magma.ca -->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&quot;" />\r
+               <PROPERTY NAME="commentEnd" VALUE="&quot;" />\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="[" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="]" />\r
+\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- Standard literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">:=</SEQ>\r
+               <SEQ TYPE="OPERATOR">_</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">==</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+\r
+               <MARK_PREVIOUS TYPE="KEYWORD3" MATCH_TYPE="OPERATOR">:</MARK_PREVIOUS>\r
+               <MARK_FOLLOWING TYPE="LABEL" MATCH_TYPE="OPERATOR">#</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="LITERAL1" MATCH_TYPE="OPERATOR">$</MARK_FOLLOWING>\r
+\r
+\r
+               <KEYWORDS>\r
+                       <!-- Constants -->\r
+                       <KEYWORD1>true</KEYWORD1>\r
+                       <KEYWORD1>false</KEYWORD1>\r
+                       <KEYWORD1>nil</KEYWORD1>\r
+\r
+                       <!-- Reserved identifiers -->\r
+                       <KEYWORD2>self</KEYWORD2>\r
+                       <KEYWORD2>super</KEYWORD2>\r
+\r
+                       <!-- not really keywords, but a different color works well-->\r
+                       <KEYWORD3>isNil</KEYWORD3>\r
+                       <KEYWORD3>not</KEYWORD3>\r
+\r
+                       <!-- not really -->\r
+                       <LITERAL2>Smalltalk</LITERAL2>\r
+                       <LITERAL2>Transcript</LITERAL2>\r
+\r
+                       <!-- base classes -->\r
+                       <LITERAL2>Date</LITERAL2>\r
+                       <LITERAL2>Time</LITERAL2>\r
+                       <LITERAL2>Boolean</LITERAL2>\r
+                       <LITERAL2>True</LITERAL2>\r
+                       <LITERAL2>False</LITERAL2>\r
+                       <LITERAL2>Character</LITERAL2>\r
+                       <LITERAL2>String</LITERAL2>\r
+                       <LITERAL2>Array</LITERAL2>\r
+                       <LITERAL2>Symbol</LITERAL2>\r
+                       <LITERAL2>Integer</LITERAL2>\r
+                       <LITERAL2>Object</LITERAL2>\r
+\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/smi-mib.xml b/extra/xmode/modes/smi-mib.xml
new file mode 100644 (file)
index 0000000..ed8982e
--- /dev/null
@@ -0,0 +1,131 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+       SMI MIB mode by Scott Allen (scotta@idirect.com)\r
+       For "Structure of Management Information" version 2 (SMIv2)\r
+           "Management Information Base" (MIB) modules as used by the\r
+           "Simple Network Management Protocol" (SNMP).\r
+\r
+       As per RFC's 2578, 2579 and 2580\r
+-->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="--" />\r
+\r
+               <PROPERTY NAME="noWordSep" VALUE="-_" />\r
+\r
+               <!-- Auto indent -->\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="unindentNextLines" VALUE=".*::=\s*\{.*\}\s*$" />\r
+               <PROPERTY NAME="indentNextLines"\r
+                       VALUE=".*(::=|AGENT-CAPABILITIES|DESCRIPTION|IMPORTS|MODULE-COMPLIANCE|MODULE-IDENTITY|NOTIFICATION-GROUP|NOTIFICATION-TYPE|OBJECT-GROUP|OBJECT-IDENTITY|OBJECT-TYPE|TEXTUAL-CONVENTION)\s*$" />\r
+       </PROPS>\r
+\r
+       <RULES\r
+               IGNORE_CASE="FALSE"\r
+               HIGHLIGHT_DIGITS="TRUE">\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">::=</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+\r
+               <SEQ TYPE="KEYWORD2">OBJECT IDENTIFIER</SEQ>\r
+               <SEQ TYPE="KEYWORD2">SEQUENCE OF</SEQ>\r
+               <SEQ TYPE="KEYWORD2">OCTET STRING</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <FUNCTION>AGENT-CAPABILITIES</FUNCTION>\r
+                       <FUNCTION>BEGIN</FUNCTION>\r
+                       <FUNCTION>END</FUNCTION>\r
+                       <FUNCTION>FROM</FUNCTION>\r
+                       <FUNCTION>IMPORTS</FUNCTION>\r
+                       <FUNCTION>MODULE-COMPLIANCE</FUNCTION>\r
+                       <FUNCTION>MODULE-IDENTITY</FUNCTION>\r
+                       <FUNCTION>NOTIFICATION-GROUP</FUNCTION>\r
+                       <FUNCTION>NOTIFICATION-TYPE</FUNCTION>\r
+                       <FUNCTION>OBJECT-GROUP</FUNCTION>\r
+                       <FUNCTION>OBJECT-IDENTITY</FUNCTION>\r
+                       <FUNCTION>OBJECT-TYPE</FUNCTION>\r
+                       <FUNCTION>TEXTUAL-CONVENTION</FUNCTION>\r
+\r
+                       <KEYWORD1>ACCESS</KEYWORD1>\r
+                       <KEYWORD1>AUGMENTS</KEYWORD1>\r
+                       <KEYWORD1>CONTACT-INFO</KEYWORD1>\r
+                       <KEYWORD1>CREATION-REQUIRES</KEYWORD1>\r
+                       <KEYWORD1>DEFINITIONS</KEYWORD1>\r
+                       <KEYWORD1>DEFVAL</KEYWORD1>\r
+                       <KEYWORD1>DESCRIPTION</KEYWORD1>\r
+                       <KEYWORD1>DISPLAY-HINT</KEYWORD1>\r
+                       <KEYWORD1>GROUP</KEYWORD1>\r
+                       <KEYWORD1>INCLUDES</KEYWORD1>\r
+                       <KEYWORD1>INDEX</KEYWORD1>\r
+                       <KEYWORD1>LAST-UPDATED</KEYWORD1>\r
+                       <KEYWORD1>MANDATORY-GROUPS</KEYWORD1>\r
+                       <KEYWORD1>MAX-ACCESS</KEYWORD1>\r
+                       <KEYWORD1>MIN-ACCESS</KEYWORD1>\r
+                       <KEYWORD1>MODULE</KEYWORD1>\r
+                       <KEYWORD1>NOTIFICATIONS</KEYWORD1>\r
+                       <KEYWORD1>OBJECT</KEYWORD1>\r
+                       <KEYWORD1>OBJECTS</KEYWORD1>\r
+                       <KEYWORD1>ORGANIZATION</KEYWORD1>\r
+                       <KEYWORD1>PRODUCT-RELEASE</KEYWORD1>\r
+                       <KEYWORD1>REFERENCE</KEYWORD1>\r
+                       <KEYWORD1>REVISION</KEYWORD1>\r
+                       <KEYWORD1>STATUS</KEYWORD1>\r
+                       <KEYWORD1>SYNTAX</KEYWORD1>\r
+                       <KEYWORD1>SUPPORTS</KEYWORD1>\r
+                       <KEYWORD1>UNITS</KEYWORD1>\r
+                       <KEYWORD1>VARIATION</KEYWORD1>\r
+                       <KEYWORD1>WRITE-SYNTAX</KEYWORD1>\r
+\r
+                       <KEYWORD2>AutonomousType</KEYWORD2>\r
+                       <KEYWORD2>BITS</KEYWORD2>\r
+                       <KEYWORD2>Counter32</KEYWORD2>\r
+                       <KEYWORD2>Counter64</KEYWORD2>\r
+                       <KEYWORD2>DateAndTime</KEYWORD2>\r
+                       <KEYWORD2>DisplayString</KEYWORD2>\r
+                       <KEYWORD2>Gauge32</KEYWORD2>\r
+                       <KEYWORD2>InstancePointer</KEYWORD2>\r
+                       <KEYWORD2>INTEGER</KEYWORD2>\r
+                       <KEYWORD2>Integer32</KEYWORD2>\r
+                       <KEYWORD2>IpAddress</KEYWORD2>\r
+                       <KEYWORD2>MacAddress</KEYWORD2>\r
+                       <KEYWORD2>Opaque</KEYWORD2>\r
+                       <KEYWORD2>PhysAddress</KEYWORD2>\r
+                       <KEYWORD2>RowPointer</KEYWORD2>\r
+                       <KEYWORD2>RowStatus</KEYWORD2>\r
+                       <KEYWORD2>SEQUENCE</KEYWORD2>\r
+                       <KEYWORD2>TAddress</KEYWORD2>\r
+                       <KEYWORD2>TDomain</KEYWORD2>\r
+                       <KEYWORD2>TestAndIncr</KEYWORD2>\r
+                       <KEYWORD2>TimeInterval</KEYWORD2>\r
+                       <KEYWORD2>TimeStamp</KEYWORD2>\r
+                       <KEYWORD2>TimeTicks</KEYWORD2>\r
+                       <KEYWORD2>TruthValue</KEYWORD2>\r
+                       <KEYWORD2>StorageType</KEYWORD2>\r
+                       <KEYWORD2>Unsigned32</KEYWORD2>\r
+                       <KEYWORD2>VariablePointer</KEYWORD2>\r
+\r
+                       <KEYWORD3>accessible-for-notify</KEYWORD3>\r
+                       <KEYWORD3>current</KEYWORD3>\r
+                       <KEYWORD3>deprecated</KEYWORD3>\r
+                       <KEYWORD3>not-accessible</KEYWORD3>\r
+                       <KEYWORD3>obsolete</KEYWORD3>\r
+                       <KEYWORD3>read-create</KEYWORD3>\r
+                       <KEYWORD3>read-only</KEYWORD3>\r
+                       <KEYWORD3>read-write</KEYWORD3>\r
+                       <KEYWORD3>SIZE</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/splus.xml b/extra/xmode/modes/splus.xml
new file mode 100644 (file)
index 0000000..12e10d7
--- /dev/null
@@ -0,0 +1,82 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+    <PROPS>\r
+        <PROPERTY NAME="lineComment" VALUE="#" />\r
+        <PROPERTY NAME="wordBreakChars" VALUE="_,+-=&lt;&gt;/?^&amp;*" />\r
+\r
+        <!-- Auto indent -->\r
+        <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+        <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+        <PROPERTY NAME="indentNextLine"\r
+            VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+        <!-- set this to 'true' if you want to use GNU coding style -->\r
+        <PROPERTY NAME="doubleBracketIndent" VALUE="false" />\r
+    </PROPS>\r
+    <RULES ESCAPE="\"\r
+        IGNORE_CASE="FALSE"\r
+        HIGHLIGHT_DIGITS="TRUE"\r
+        DIGIT_RE="(0x[\p{XDigit}]+[lL]?|[\p{Digit}]+(e[\p{Digit}]*)?[lLdDfF]?)">\r
+\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>"</BEGIN>\r
+            <END>"</END>\r
+        </SPAN>\r
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+            <BEGIN>'</BEGIN>\r
+            <END>'</END>\r
+        </SPAN>\r
+\r
+        <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+        <SEQ TYPE="OPERATOR">=</SEQ>\r
+        <SEQ TYPE="OPERATOR">!</SEQ>\r
+        <SEQ TYPE="OPERATOR">_</SEQ>\r
+        <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;-</SEQ>\r
+        <SEQ TYPE="OPERATOR">+</SEQ>\r
+        <SEQ TYPE="OPERATOR">-</SEQ>\r
+        <SEQ TYPE="OPERATOR">/</SEQ>\r
+\r
+        <SEQ TYPE="OPERATOR">*</SEQ>\r
+        <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">%</SEQ>\r
+        <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+        <SEQ TYPE="OPERATOR">|</SEQ>\r
+        <SEQ TYPE="OPERATOR">^</SEQ>\r
+        <SEQ TYPE="OPERATOR">~</SEQ>\r
+        <SEQ TYPE="OPERATOR">}</SEQ>\r
+        <SEQ TYPE="OPERATOR">{</SEQ>\r
+        <MARK_PREVIOUS AT_WHITESPACE_END="TRUE"\r
+            MATCH_TYPE="OPERATOR"\r
+            TYPE="LABEL">:</MARK_PREVIOUS>\r
+\r
+        <!-- Function calls -->\r
+        <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+        <KEYWORDS>\r
+            <KEYWORD1>break</KEYWORD1>\r
+            <KEYWORD1>case</KEYWORD1>\r
+            <KEYWORD1>continue</KEYWORD1>\r
+            <KEYWORD1>default</KEYWORD1>\r
+            <KEYWORD1>do</KEYWORD1>\r
+            <KEYWORD1>else</KEYWORD1>\r
+            <KEYWORD1>for</KEYWORD1>\r
+            <KEYWORD1>goto</KEYWORD1>\r
+            <KEYWORD1>if</KEYWORD1>\r
+            <KEYWORD1>return</KEYWORD1>\r
+            <KEYWORD1>sizeof</KEYWORD1>\r
+            <KEYWORD1>switch</KEYWORD1>\r
+            <KEYWORD1>while</KEYWORD1>\r
+\r
+            <KEYWORD1>function</KEYWORD1>\r
+\r
+            <LITERAL2>T</LITERAL2>\r
+            <LITERAL2>F</LITERAL2>\r
+        </KEYWORDS>\r
+    </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/sql-loader.xml b/extra/xmode/modes/sql-loader.xml
new file mode 100644 (file)
index 0000000..ae62fc3
--- /dev/null
@@ -0,0 +1,122 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="--" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               <SPAN DELEGATE="pl-sql::MAIN">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">!=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">!&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">:=</SEQ>\r
+        \r
+               <KEYWORDS>\r
+                       <!-- reserved words -->\r
+                       <KEYWORD1>LOAD</KEYWORD1>\r
+                       <KEYWORD1>DATA</KEYWORD1>\r
+                       <KEYWORD1>INFILE</KEYWORD1>\r
+                       <KEYWORD1>BADFILE</KEYWORD1>\r
+                       <KEYWORD1>DISCARDFILE</KEYWORD1>\r
+                       <KEYWORD1>INTO</KEYWORD1>\r
+                       <KEYWORD1>TABLE</KEYWORD1>\r
+                       <KEYWORD1>FIELDS</KEYWORD1>\r
+                       <KEYWORD1>TERMINATED</KEYWORD1>\r
+                       <KEYWORD1>BY</KEYWORD1>\r
+                       <KEYWORD1>OPTIONALLY</KEYWORD1>\r
+                       <KEYWORD1>ENCLOSED</KEYWORD1>\r
+                       <KEYWORD1>EXTERNAL</KEYWORD1>\r
+                       <KEYWORD1>TRAILING</KEYWORD1>\r
+                       <KEYWORD1>NULLCOLS</KEYWORD1>\r
+                       <KEYWORD1>NULLIF</KEYWORD1>\r
+                       <KEYWORD1>DATA</KEYWORD1>\r
+                       <KEYWORD1>BLANKS</KEYWORD1>\r
+                       <KEYWORD1>INSERT</KEYWORD1>\r
+                       <KEYWORD1>INTO</KEYWORD1>\r
+                       <KEYWORD1>POSITION</KEYWORD1>\r
+                       <KEYWORD1>WHEN</KEYWORD1>\r
+                       <KEYWORD1>APPEND</KEYWORD1>\r
+                       <KEYWORD1>REPLACE</KEYWORD1>\r
+                       <KEYWORD1>EOF</KEYWORD1>\r
+                       <KEYWORD1>LOBFILE</KEYWORD1>\r
+                       <KEYWORD1>TRUNCATE</KEYWORD1>\r
+                       <KEYWORD1>COLUMN</KEYWORD1>\r
+            \r
+            <!--function-->\r
+                       <KEYWORD1>COUNT</KEYWORD1>\r
+                       <KEYWORD1>AND</KEYWORD1>\r
+                       <KEYWORD1>SDF</KEYWORD1>\r
+                       <KEYWORD1>OR</KEYWORD1>\r
+                       <KEYWORD1>SYSDATE</KEYWORD1>\r
+\r
+                       <!-- data types -->\r
+                       <KEYWORD1>binary</KEYWORD1>\r
+                       <KEYWORD1>bit</KEYWORD1>\r
+                       <KEYWORD1>blob</KEYWORD1>\r
+                       <KEYWORD1>boolean</KEYWORD1>\r
+                       <KEYWORD1>char</KEYWORD1>\r
+                       <KEYWORD1>character</KEYWORD1>\r
+                       <KEYWORD1>constant</KEYWORD1>\r
+                       <KEYWORD1>date</KEYWORD1>\r
+                       <KEYWORD1>datetime</KEYWORD1>\r
+                       <KEYWORD1>decimal</KEYWORD1>\r
+                       <KEYWORD1>double</KEYWORD1>\r
+                       <KEYWORD1>filler</KEYWORD1>\r
+                       <KEYWORD1>float</KEYWORD1>\r
+                       <KEYWORD1>image</KEYWORD1>\r
+                       <KEYWORD1>int</KEYWORD1>\r
+                       <KEYWORD1>integer</KEYWORD1>\r
+                       <KEYWORD1>money</KEYWORD1>\r
+                       <!-- KEYWORD1>name</KEYWORD1 -->\r
+                       <KEYWORD1>numeric</KEYWORD1>\r
+                       <KEYWORD1>nchar</KEYWORD1>\r
+                       <KEYWORD1>nvarchar</KEYWORD1>\r
+                       <KEYWORD1>ntext</KEYWORD1>\r
+                       <KEYWORD1>object</KEYWORD1>\r
+                       <KEYWORD1>pls_integer</KEYWORD1>\r
+                       <KEYWORD1>raw</KEYWORD1>\r
+                       <KEYWORD1>real</KEYWORD1>\r
+                       <KEYWORD1>smalldatetime</KEYWORD1>\r
+                       <KEYWORD1>smallint</KEYWORD1>\r
+                       <KEYWORD1>smallmoney</KEYWORD1>\r
+                       <KEYWORD1>sequence</KEYWORD1>\r
+                       <KEYWORD1>text</KEYWORD1>\r
+                       <KEYWORD1>timestamp</KEYWORD1>\r
+                       <KEYWORD1>tinyint</KEYWORD1>\r
+                       <KEYWORD1>uniqueidentifier</KEYWORD1>\r
+                       <KEYWORD1>varbinary</KEYWORD1>\r
+                       <KEYWORD1>varchar</KEYWORD1>\r
+                       <KEYWORD1>varchar2</KEYWORD1>\r
+                       <KEYWORD1>varray</KEYWORD1>\r
+                       <KEYWORD1>zoned</KEYWORD1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
+\r
+                \r
diff --git a/extra/xmode/modes/sqr.xml b/extra/xmode/modes/sqr.xml
new file mode 100644 (file)
index 0000000..6e28544
--- /dev/null
@@ -0,0 +1,152 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- SQR Mode by Richard F. Ashwell III  -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="!" />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- Normal comments. -->\r
+               <EOL_SPAN TYPE="COMMENT1">!</EOL_SPAN>\r
+\r
+               <!-- Literal String --> \r
+               <SPAN TYPE="LABEL" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN> \r
+\r
+               <!-- SQR Replacement String -->                 \r
+               <SPAN TYPE="LABEL" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN> \r
+               \r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">@</SEQ>\r
+               <SEQ TYPE="OPERATOR">:=</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               \r
+               <MARK_FOLLOWING TYPE="LITERAL1">$</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="LITERAL2">#</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="MARKUP">&amp;</MARK_FOLLOWING>\r
+\r
+               <KEYWORDS>\r
+                       <!-- Section KeyWords -->\r
+                       <FUNCTION>begin-procedure</FUNCTION>                     \r
+                       <FUNCTION>end-procedure</FUNCTION>                      \r
+                       <FUNCTION>begin-report</FUNCTION>\r
+                       <FUNCTION>end-report</FUNCTION>\r
+                       <FUNCTION>begin-heading</FUNCTION>\r
+                       <FUNCTION>end-heading</FUNCTION>\r
+                       <FUNCTION>begin-setup</FUNCTION>\r
+                       <FUNCTION>end-setup</FUNCTION>\r
+                       <FUNCTION>begin-footing</FUNCTION>\r
+                       <FUNCTION>end-footing</FUNCTION>\r
+                       <FUNCTION>begin-program</FUNCTION>\r
+                       <FUNCTION>end-program</FUNCTION>\r
+\r
+                       <!-- Block Keywords -->\r
+                       <KEYWORD1>begin-select</KEYWORD1>\r
+                       <KEYWORD1>end-select</KEYWORD1>\r
+                       <KEYWORD1>begin-sql</KEYWORD1>\r
+                       <KEYWORD1>end-sql</KEYWORD1>\r
+                       \r
+                       <!-- SQR Functional Keywords -->\r
+                       <KEYWORD2>add</KEYWORD2> \r
+                       <KEYWORD2>array-add</KEYWORD2> \r
+                       <KEYWORD2>array-divide</KEYWORD2> \r
+                       <KEYWORD2>array-multiply</KEYWORD2> \r
+                       <KEYWORD2>array-subtract</KEYWORD2> \r
+                       <KEYWORD2>ask</KEYWORD2>\r
+                       <KEYWORD2>break</KEYWORD2>\r
+                       <KEYWORD2>call</KEYWORD2> \r
+                       <KEYWORD2>clear-array</KEYWORD2> \r
+                       <KEYWORD2>close</KEYWORD2> \r
+                       <KEYWORD2>columns</KEYWORD2> \r
+                       <KEYWORD2>commit</KEYWORD2> \r
+                       <KEYWORD2>concat</KEYWORD2> \r
+                       <KEYWORD2>connect</KEYWORD2> \r
+                       <KEYWORD2>create-array</KEYWORD2>\r
+                       <KEYWORD2>date-time</KEYWORD2> \r
+                       <KEYWORD2>display</KEYWORD2> \r
+                       <KEYWORD2>divide</KEYWORD2> \r
+                       <KEYWORD2>do</KEYWORD2> \r
+                       <KEYWORD2>dollar-symbol</KEYWORD2>\r
+                       <KEYWORD2>else</KEYWORD2> \r
+                       <KEYWORD2>encode</KEYWORD2> \r
+                       <KEYWORD2>end-evaluate</KEYWORD2> \r
+                       <KEYWORD2>end-if</KEYWORD2> \r
+                       <KEYWORD2>end-while</KEYWORD2> \r
+                       <KEYWORD2>evaluate</KEYWORD2> \r
+                       <KEYWORD2>execute</KEYWORD2> \r
+                       <KEYWORD2>extract</KEYWORD2>\r
+                       <KEYWORD2>find</KEYWORD2> \r
+                       <KEYWORD2>font</KEYWORD2>\r
+                       <KEYWORD2>get</KEYWORD2> \r
+                       <KEYWORD2>goto</KEYWORD2> \r
+                       <KEYWORD2>graphic</KEYWORD2>\r
+                       <KEYWORD2>if</KEYWORD2>\r
+                       <KEYWORD2>last-page</KEYWORD2> \r
+                       <KEYWORD2>let</KEYWORD2> \r
+                       <KEYWORD2>lookup</KEYWORD2> \r
+                       <KEYWORD2>lowercase</KEYWORD2>\r
+                       <KEYWORD2>money-symbol</KEYWORD2> \r
+                       <KEYWORD2>move</KEYWORD2> \r
+                       <KEYWORD2>multiply</KEYWORD2>\r
+                       <KEYWORD2>new-page</KEYWORD2> \r
+                       <KEYWORD2>new-report</KEYWORD2> \r
+                       <KEYWORD2>next-column</KEYWORD2> \r
+                       <KEYWORD2>next-listing</KEYWORD2> \r
+                       <KEYWORD2>no-formfeed</KEYWORD2>\r
+                       <KEYWORD2>open</KEYWORD2>\r
+                       <KEYWORD2>page-number</KEYWORD2> \r
+                       <KEYWORD2>page-size</KEYWORD2> \r
+                       <KEYWORD2>position</KEYWORD2> \r
+                       <KEYWORD2>print</KEYWORD2> \r
+                       <KEYWORD2>print-bar-code</KEYWORD2> \r
+                       <KEYWORD2>print-chart</KEYWORD2> \r
+                       <KEYWORD2>print-direct</KEYWORD2> \r
+                       <KEYWORD2>print-image</KEYWORD2> \r
+                       <KEYWORD2>printer-deinit</KEYWORD2> \r
+                       <KEYWORD2>printer-init</KEYWORD2> \r
+                       <KEYWORD2>put</KEYWORD2>\r
+                       <KEYWORD2>read</KEYWORD2> \r
+                       <KEYWORD2>rollback</KEYWORD2>\r
+                       <KEYWORD2>show</KEYWORD2> \r
+                       <KEYWORD2>stop</KEYWORD2> \r
+                       <KEYWORD2>string</KEYWORD2> \r
+                       <KEYWORD2>subtract</KEYWORD2>\r
+                       <KEYWORD2>unstring</KEYWORD2> \r
+                       <KEYWORD2>uppercase</KEYWORD2> \r
+                       <KEYWORD2>use</KEYWORD2> \r
+                       <KEYWORD2>use-column</KEYWORD2> \r
+                       <KEYWORD2>use-printer-type</KEYWORD2> \r
+                       <KEYWORD2>use-procedure</KEYWORD2> \r
+                       <KEYWORD2>use-report</KEYWORD2> \r
+                       <KEYWORD2>use-report</KEYWORD2>\r
+                       <KEYWORD2>while</KEYWORD2> \r
+                       <KEYWORD2>write</KEYWORD2>\r
+                       <KEYWORD2>to</KEYWORD2>\r
+\r
+                       <!-- SQL Keywords -->\r
+                       <KEYWORD3>from</KEYWORD3>\r
+                       <KEYWORD3>where</KEYWORD3>\r
+                       <KEYWORD3>and</KEYWORD3>\r
+                       <KEYWORD3>between</KEYWORD3>\r
+                       <KEYWORD3>or</KEYWORD3>\r
+                       <KEYWORD3>in</KEYWORD3>\r
+                       \r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/squidconf.xml b/extra/xmode/modes/squidconf.xml
new file mode 100644 (file)
index 0000000..d8d84a6
--- /dev/null
@@ -0,0 +1,227 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- Highlighting for squid.conf by Kris Kopicki (29/11/2003). For squid 2.5-stable -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="#"/>\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- Comment -->\r
+               <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>\r
+               \r
+               <KEYWORDS>\r
+                       <KEYWORD1>http_port</KEYWORD1>\r
+                       <KEYWORD1>https_port</KEYWORD1>\r
+                       <KEYWORD1>ssl_unclean_shutdown</KEYWORD1>\r
+                       <KEYWORD1>icp_port</KEYWORD1>\r
+                       <KEYWORD1>htcp_port</KEYWORD1>\r
+                       <KEYWORD1>mcast_groups</KEYWORD1>\r
+                       <KEYWORD1>udp_incoming_address</KEYWORD1>\r
+                       <KEYWORD1>udp_outgoing_address</KEYWORD1>\r
+                       <KEYWORD1>cache_peer</KEYWORD1>\r
+                       <KEYWORD1>cache_peer_domain</KEYWORD1>\r
+                       <KEYWORD1>neighbor_type_domain</KEYWORD1>\r
+                       <KEYWORD1>icp_query_timeout</KEYWORD1>\r
+                       <KEYWORD1>maximum_icp_query_timeout</KEYWORD1>\r
+                       <KEYWORD1>mcast_icp_query_timeout</KEYWORD1>\r
+                       <KEYWORD1>dead_peer_timeout</KEYWORD1>\r
+                       <KEYWORD1>hierarchy_stoplist</KEYWORD1>\r
+                       <KEYWORD1>no_cache</KEYWORD1>\r
+                       <KEYWORD1>cache_mem</KEYWORD1>\r
+                       <KEYWORD1>cache_swap_low</KEYWORD1>\r
+                       <KEYWORD1>cache_swap_high</KEYWORD1>\r
+                       <KEYWORD1>maximum_object_size</KEYWORD1>\r
+                       <KEYWORD1>minimum_object_size</KEYWORD1>\r
+                       <KEYWORD1>maximum_object_size_in_memory</KEYWORD1>\r
+                       <KEYWORD1>ipcache_size</KEYWORD1>\r
+                       <KEYWORD1>ipcache_low</KEYWORD1>\r
+                       <KEYWORD1>ipcache_high</KEYWORD1>\r
+                       <KEYWORD1>fqdncache_size</KEYWORD1>\r
+                       <KEYWORD1>cache_replacement_policy</KEYWORD1>\r
+                       <KEYWORD1>memory_replacement_policy</KEYWORD1>\r
+                       <KEYWORD1>cache_dir</KEYWORD1>\r
+                       <KEYWORD1>cache_access_log</KEYWORD1>\r
+                       <KEYWORD1>cache_log</KEYWORD1>\r
+                       <KEYWORD1>cache_store_log</KEYWORD1>\r
+                       <KEYWORD1>cache_swap_log</KEYWORD1>\r
+                       <KEYWORD1>emulate_httpd_log</KEYWORD1>\r
+                       <KEYWORD1>log_ip_on_direct</KEYWORD1>\r
+                       <KEYWORD1>mime_table</KEYWORD1>\r
+                       <KEYWORD1>log_mime_hdrs</KEYWORD1>\r
+                       <KEYWORD1>useragent_log</KEYWORD1>\r
+                       <KEYWORD1>referer_log</KEYWORD1>\r
+                       <KEYWORD1>pid_filename</KEYWORD1>\r
+                       <KEYWORD1>debug_options</KEYWORD1>\r
+                       <KEYWORD1>log_fqdn</KEYWORD1>\r
+                       <KEYWORD1>client_netmask</KEYWORD1>\r
+                       <KEYWORD1>ftp_user</KEYWORD1>\r
+                       <KEYWORD1>ftp_list_width</KEYWORD1>\r
+                       <KEYWORD1>ftp_passive</KEYWORD1>\r
+                       <KEYWORD1>ftp_sanitycheck</KEYWORD1>\r
+                       <KEYWORD1>cache_dns_program</KEYWORD1>\r
+                       <KEYWORD1>dns_children</KEYWORD1>\r
+                       <KEYWORD1>dns_retransmit_interval</KEYWORD1>\r
+                       <KEYWORD1>dns_timeout</KEYWORD1>\r
+                       <KEYWORD1>dns_defnames</KEYWORD1>\r
+                       <KEYWORD1>dns_nameservers</KEYWORD1>\r
+                       <KEYWORD1>hosts_file</KEYWORD1>\r
+                       <KEYWORD1>diskd_program</KEYWORD1>\r
+                       <KEYWORD1>unlinkd_program</KEYWORD1>\r
+                       <KEYWORD1>pinger_program</KEYWORD1>\r
+                       <KEYWORD1>redirect_program</KEYWORD1>\r
+                       <KEYWORD1>redirect_children</KEYWORD1>\r
+                       <KEYWORD1>redirect_rewrites_host_header</KEYWORD1>\r
+                       <KEYWORD1>redirector_access</KEYWORD1>\r
+                       <KEYWORD1>auth_param</KEYWORD1>\r
+                       <KEYWORD1>authenticate_cache_garbage_interval</KEYWORD1>\r
+                       <KEYWORD1>authenticate_ttl</KEYWORD1>\r
+                       <KEYWORD1>authenticate_ip_ttl</KEYWORD1>\r
+                       <KEYWORD1>external_acl_type</KEYWORD1>\r
+                       <KEYWORD1>wais_relay_host</KEYWORD1>\r
+                       <KEYWORD1>wais_relay_port</KEYWORD1>\r
+                       <KEYWORD1>request_header_max_size</KEYWORD1>\r
+                       <KEYWORD1>request_body_max_size</KEYWORD1>\r
+                       <KEYWORD1>refresh_pattern</KEYWORD1>\r
+                       <KEYWORD1>quick_abort_min</KEYWORD1>\r
+                       <KEYWORD1>quick_abort_max</KEYWORD1>\r
+                       <KEYWORD1>quick_abort_pct</KEYWORD1>\r
+                       <KEYWORD1>negative_ttl</KEYWORD1>\r
+                       <KEYWORD1>positive_dns_ttl</KEYWORD1>\r
+                       <KEYWORD1>negative_dns_ttl</KEYWORD1>\r
+                       <KEYWORD1>range_offset_limit</KEYWORD1>\r
+                       <KEYWORD1>connect_timeout</KEYWORD1>\r
+                       <KEYWORD1>peer_connect_timeout</KEYWORD1>\r
+                       <KEYWORD1>read_timeout</KEYWORD1>\r
+                       <KEYWORD1>request_timeout</KEYWORD1>\r
+                       <KEYWORD1>persistent_request_timeout</KEYWORD1>\r
+                       <KEYWORD1>client_lifetime</KEYWORD1>\r
+                       <KEYWORD1>half_closed_clients</KEYWORD1>\r
+                       <KEYWORD1>pconn_timeout</KEYWORD1>\r
+                       <KEYWORD1>ident_timeout</KEYWORD1>\r
+                       <KEYWORD1>shutdown_lifetime</KEYWORD1>\r
+                       <KEYWORD1>acl</KEYWORD1>\r
+                       <KEYWORD1>http_access</KEYWORD1>\r
+                       <KEYWORD1>http_reply_access</KEYWORD1>\r
+                       <KEYWORD1>icp_access</KEYWORD1>\r
+                       <KEYWORD1>miss_access</KEYWORD1>\r
+                       <KEYWORD1>cache_peer_access</KEYWORD1>\r
+                       <KEYWORD1>ident_lookup_access</KEYWORD1>\r
+                       <KEYWORD1>tcp_outgoing_tos</KEYWORD1>\r
+                       <KEYWORD1>tcp_outgoing_address</KEYWORD1>\r
+                       <KEYWORD1>reply_body_max_size</KEYWORD1>\r
+                       <KEYWORD1>cache_mgr</KEYWORD1>\r
+                       <KEYWORD1>cache_effective_user</KEYWORD1>\r
+                       <KEYWORD1>cache_effective_group</KEYWORD1>\r
+                       <KEYWORD1>visible_hostname</KEYWORD1>\r
+                       <KEYWORD1>unique_hostname</KEYWORD1>\r
+                       <KEYWORD1>hostname_aliases</KEYWORD1>\r
+                       <KEYWORD1>announce_period</KEYWORD1>\r
+                       <KEYWORD1>announce_host</KEYWORD1>\r
+                       <KEYWORD1>announce_file</KEYWORD1>\r
+                       <KEYWORD1>announce_port</KEYWORD1>\r
+                       <KEYWORD1>httpd_accel_host</KEYWORD1>\r
+                       <KEYWORD1>httpd_accel_port</KEYWORD1>\r
+                       <KEYWORD1>httpd_accel_single_host</KEYWORD1>\r
+                       <KEYWORD1>httpd_accel_with_proxy</KEYWORD1>\r
+                       <KEYWORD1>httpd_accel_uses_host_header</KEYWORD1>\r
+                       <KEYWORD1>dns_testnames</KEYWORD1>\r
+                       <KEYWORD1>logfile_rotate</KEYWORD1>\r
+                       <KEYWORD1>append_domain</KEYWORD1>\r
+                       <KEYWORD1>tcp_recv_bufsize</KEYWORD1>\r
+                       <KEYWORD1>err_html_text</KEYWORD1>\r
+                       <KEYWORD1>deny_info</KEYWORD1>\r
+                       <KEYWORD1>memory_pools</KEYWORD1>\r
+                       <KEYWORD1>memory_pools_limit</KEYWORD1>\r
+                       <KEYWORD1>forwarded_for</KEYWORD1>\r
+                       <KEYWORD1>log_icp_queries</KEYWORD1>\r
+                       <KEYWORD1>icp_hit_stale</KEYWORD1>\r
+                       <KEYWORD1>minimum_direct_hops</KEYWORD1>\r
+                       <KEYWORD1>minimum_direct_rtt</KEYWORD1>\r
+                       <KEYWORD1>cachemgr_passwd</KEYWORD1>\r
+                       <KEYWORD1>store_avg_object_size</KEYWORD1>\r
+                       <KEYWORD1>store_objects_per_bucket</KEYWORD1>\r
+                       <KEYWORD1>client_db</KEYWORD1>\r
+                       <KEYWORD1>netdb_low</KEYWORD1>\r
+                       <KEYWORD1>netdb_high</KEYWORD1>\r
+                       <KEYWORD1>netdb_ping_period</KEYWORD1>\r
+                       <KEYWORD1>query_icmp</KEYWORD1>\r
+                       <KEYWORD1>test_reachability</KEYWORD1>\r
+                       <KEYWORD1>buffered_logs</KEYWORD1>\r
+                       <KEYWORD1>reload_into_ims</KEYWORD1>\r
+                       <KEYWORD1>always_direct</KEYWORD1>\r
+                       <KEYWORD1>never_direct</KEYWORD1>\r
+                       <KEYWORD1>header_access</KEYWORD1>\r
+                       <KEYWORD1>header_replace</KEYWORD1>\r
+                       <KEYWORD1>icon_directory</KEYWORD1>\r
+                       <KEYWORD1>error_directory</KEYWORD1>\r
+                       <KEYWORD1>maximum_single_addr_tries</KEYWORD1>\r
+                       <KEYWORD1>snmp_port</KEYWORD1>\r
+                       <KEYWORD1>snmp_access</KEYWORD1>\r
+                       <KEYWORD1>snmp_incoming_address</KEYWORD1>\r
+                       <KEYWORD1>snmp_outgoing_address</KEYWORD1>\r
+                       <KEYWORD1>as_whois_server</KEYWORD1>\r
+                       <KEYWORD1>wccp_router</KEYWORD1>\r
+                       <KEYWORD1>wccp_version</KEYWORD1>\r
+                       <KEYWORD1>wccp_incoming_address</KEYWORD1>\r
+                       <KEYWORD1>wccp_outgoing_address</KEYWORD1>\r
+                       <KEYWORD1>delay_pools</KEYWORD1>\r
+                       <KEYWORD1>delay_class</KEYWORD1>\r
+                       <KEYWORD1>delay_access</KEYWORD1>\r
+                       <KEYWORD1>delay_parameters</KEYWORD1>\r
+                       <KEYWORD1>delay_initial_bucket_level</KEYWORD1>\r
+                       <KEYWORD1>incoming_icp_average</KEYWORD1>\r
+                       <KEYWORD1>incoming_http_average</KEYWORD1>\r
+                       <KEYWORD1>incoming_dns_average</KEYWORD1>\r
+                       <KEYWORD1>min_icp_poll_cnt</KEYWORD1>\r
+                       <KEYWORD1>min_dns_poll_cnt</KEYWORD1>\r
+                       <KEYWORD1>min_http_poll_cnt</KEYWORD1>\r
+                       <KEYWORD1>max_open_disk_fds</KEYWORD1>\r
+                       <KEYWORD1>offline_mode</KEYWORD1>\r
+                       <KEYWORD1>uri_whitespace</KEYWORD1>\r
+                       <KEYWORD1>broken_posts</KEYWORD1>\r
+                       <KEYWORD1>mcast_miss_addr</KEYWORD1>\r
+                       <KEYWORD1>mcast_miss_ttl</KEYWORD1>\r
+                       <KEYWORD1>mcast_miss_port</KEYWORD1>\r
+                       <KEYWORD1>mcast_miss_encode_key</KEYWORD1>\r
+                       <KEYWORD1>nonhierarchical_direct</KEYWORD1>\r
+                       <KEYWORD1>prefer_direct</KEYWORD1>\r
+                       <KEYWORD1>strip_query_terms</KEYWORD1>\r
+                       <KEYWORD1>coredump_dir</KEYWORD1>\r
+                       <KEYWORD1>redirector_bypass</KEYWORD1>\r
+                       <KEYWORD1>ignore_unknown_nameservers</KEYWORD1>\r
+                       <KEYWORD1>digest_generation</KEYWORD1>\r
+                       <KEYWORD1>digest_bits_per_entry</KEYWORD1>\r
+                       <KEYWORD1>digest_rebuild_period</KEYWORD1>\r
+                       <KEYWORD1>digest_rewrite_period</KEYWORD1>\r
+                       <KEYWORD1>digest_swapout_chunk_size</KEYWORD1>\r
+                       <KEYWORD1>digest_rebuild_chunk_percentage</KEYWORD1>\r
+                       <KEYWORD1>chroot</KEYWORD1>\r
+                       <KEYWORD1>client_persistent_connections</KEYWORD1>\r
+                       <KEYWORD1>server_persistent_connections</KEYWORD1>\r
+                       <KEYWORD1>pipeline_prefetch</KEYWORD1>\r
+                       <KEYWORD1>extension_methods</KEYWORD1>\r
+                       <KEYWORD1>request_entities</KEYWORD1>\r
+                       <KEYWORD1>high_response_time_warning</KEYWORD1>\r
+                       <KEYWORD1>high_page_fault_warning</KEYWORD1>\r
+                       <KEYWORD1>high_memory_warning</KEYWORD1>\r
+                       <KEYWORD1>store_dir_select_algorithm</KEYWORD1>\r
+                       <KEYWORD1>forward_log</KEYWORD1>\r
+                       <KEYWORD1>ie_refresh</KEYWORD1>\r
+                       <KEYWORD1>vary_ignore_expire</KEYWORD1>\r
+                       <KEYWORD1>sleep_after_fork</KEYWORD1>\r
+                       \r
+                       <KEYWORD2>dst</KEYWORD2>\r
+                       <KEYWORD2>src</KEYWORD2>\r
+                       <KEYWORD2>method</KEYWORD2>\r
+                       <KEYWORD2>port</KEYWORD2>\r
+                       <KEYWORD2>proxy_auth</KEYWORD2>\r
+                       \r
+                       <LITERAL2>on</LITERAL2>\r
+                       <LITERAL2>off</LITERAL2>\r
+                       <LITERAL2>allow</LITERAL2>\r
+                       <LITERAL2>deny</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/ssharp.xml b/extra/xmode/modes/ssharp.xml
new file mode 100644 (file)
index 0000000..019a6fd
--- /dev/null
@@ -0,0 +1,145 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- S# mode, by Barry Carr (Ixian Software Components Ltd)\r
+     based on Marcio Marchini mqm@magma.ca Smalltalk mode -->\r
+\r
+<MODE>\r
+       <PROPS>\r
+        <PROPERTY NAME="lineComment" VALUE="#" />\r
+               <PROPERTY NAME="commentStart" VALUE="&quot;" />\r
+               <PROPERTY NAME="commentEnd" VALUE="&quot;" />\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="[" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="]" />\r
+\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">\r
+               <!-- Standard literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+        <EOL_SPAN TYPE="COMMENT3">#</EOL_SPAN>\r
+        <EOL_SPAN TYPE="COMMENT2">""</EOL_SPAN>\r
+\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+        <SPAN TYPE="LITERAL2" >\r
+            <BEGIN>«</BEGIN>\r
+            <END>»</END>\r
+        </SPAN>\r
+\r
+        <SEQ TYPE="OPERATOR">(</SEQ>\r
+        <SEQ TYPE="OPERATOR">)</SEQ>\r
+        <SEQ TYPE="OPERATOR">{</SEQ>\r
+        <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">:=</SEQ>\r
+               <SEQ TYPE="OPERATOR">_</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">==</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+        <SEQ TYPE="OPERATOR">//</SEQ>\r
+        <SEQ TYPE="OPERATOR">\\</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+        <SEQ TYPE="OPERATOR">**</SEQ>\r
+        <SEQ TYPE="OPERATOR">#</SEQ>\r
+        <SEQ TYPE="OPERATOR">^</SEQ>\r
+        <SEQ TYPE="OPERATOR">^^</SEQ>\r
+        <SEQ TYPE="OPERATOR">;</SEQ>\r
+        <SEQ TYPE="OPERATOR">.</SEQ>\r
+        <SEQ TYPE="OPERATOR">-&gt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&amp;&amp;</SEQ>\r
+        <SEQ TYPE="OPERATOR">||</SEQ>\r
+        <SEQ TYPE="OPERATOR">^|</SEQ>\r
+        <SEQ TYPE="OPERATOR">!=</SEQ>\r
+        <SEQ TYPE="OPERATOR">~=</SEQ>\r
+        <SEQ TYPE="OPERATOR">!==</SEQ>\r
+        <SEQ TYPE="OPERATOR">~~</SEQ>\r
+\r
+               <MARK_PREVIOUS TYPE="KEYWORD3" MATCH_TYPE="OPERATOR">:</MARK_PREVIOUS>\r
+               <MARK_FOLLOWING TYPE="LABEL" MATCH_TYPE="OPERATOR">#</MARK_FOLLOWING>\r
+               <MARK_FOLLOWING TYPE="LITERAL1" MATCH_TYPE="OPERATOR">$</MARK_FOLLOWING>\r
+\r
+               <KEYWORDS>\r
+                       <!-- Constants -->\r
+            <KEYWORD1>disable</KEYWORD1>\r
+            <KEYWORD1>enable</KEYWORD1>\r
+            <KEYWORD1>no</KEYWORD1>\r
+            <KEYWORD1>off</KEYWORD1>\r
+            <KEYWORD1>on</KEYWORD1>\r
+                       <KEYWORD1>yes</KEYWORD1>\r
+\r
+                       <!-- Reserved identifiers -->\r
+                       <KEYWORD2>self</KEYWORD2>\r
+                       <KEYWORD2>true</KEYWORD2>\r
+            <KEYWORD2>false</KEYWORD2>\r
+            <KEYWORD2>nil</KEYWORD2>\r
+            <KEYWORD2>super</KEYWORD2>\r
+            <KEYWORD2>thread</KEYWORD2>\r
+            <KEYWORD2>sender</KEYWORD2>\r
+            <KEYWORD2>senderMethod</KEYWORD2>\r
+            <KEYWORD2>blockSelf</KEYWORD2>\r
+            <KEYWORD2>scheduler</KEYWORD2>\r
+            <KEYWORD2>¼</KEYWORD2>\r
+\r
+                       <!-- not really keywords, but a different color works well-->\r
+                       <KEYWORD4>isNil</KEYWORD4>\r
+                       <KEYWORD4>not</KEYWORD4>\r
+\r
+                       <!-- not really -->\r
+                       <LITERAL2>Smalltalk</LITERAL2>\r
+                       <LITERAL2>Transcript</LITERAL2>\r
+\r
+                       <!-- base classes -->\r
+                       <LITERAL2>Date</LITERAL2>\r
+                       <LITERAL2>Time</LITERAL2>\r
+                       <LITERAL2>Boolean</LITERAL2>\r
+                       <LITERAL2>True</LITERAL2>\r
+                       <LITERAL2>False</LITERAL2>\r
+                       <LITERAL2>Character</LITERAL2>\r
+                       <LITERAL2>String</LITERAL2>\r
+                       <LITERAL2>Array</LITERAL2>\r
+                       <LITERAL2>Symbol</LITERAL2>\r
+                       <LITERAL2>Integer</LITERAL2>\r
+                       <LITERAL2>Object</LITERAL2>\r
+\r
+            <LITERAL3>Application</LITERAL3>\r
+            <LITERAL3>Category</LITERAL3>\r
+            <LITERAL3>Class</LITERAL3>\r
+            <LITERAL3>Compiler</LITERAL3>\r
+            <LITERAL3>EntryPoint</LITERAL3>\r
+            <LITERAL3>Enum</LITERAL3>\r
+            <LITERAL3>Eval</LITERAL3>\r
+            <LITERAL3>Exception</LITERAL3>\r
+            <LITERAL3>Function</LITERAL3>\r
+            <LITERAL3>IconResource</LITERAL3>\r
+            <LITERAL3>Interface</LITERAL3>\r
+            <LITERAL3>Literal</LITERAL3>\r
+            <LITERAL3>Namespace</LITERAL3>\r
+            <LITERAL3>Method</LITERAL3>\r
+            <LITERAL3>Mixin</LITERAL3>\r
+            <LITERAL3>Module</LITERAL3>\r
+            <LITERAL3>Project</LITERAL3>\r
+            <LITERAL3>Reference</LITERAL3>\r
+            <LITERAL3>Require</LITERAL3>\r
+            <LITERAL3>Resource</LITERAL3>\r
+            <LITERAL3>Signal</LITERAL3>\r
+            <LITERAL3>Struct</LITERAL3>\r
+            <LITERAL3>Subsystem</LITERAL3>\r
+            <LITERAL3>Specifications</LITERAL3>\r
+            <LITERAL3>Warning</LITERAL3>\r
+\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/svn-commit.xml b/extra/xmode/modes/svn-commit.xml
new file mode 100644 (file)
index 0000000..5cd415c
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+<MODE NAME="svn-commit"                FILE="svn-commit.xml"/>\r
+-->\r
+\r
+<MODE>\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="FALSE">\r
+               <SEQ TYPE="COMMENT1" \r
+                       DELEGATE="CHANGED" \r
+                       AT_LINE_START="TRUE"\r
+               >--This line, and those below, will be ignored--</SEQ>\r
+       </RULES>\r
+       <RULES SET="CHANGED">\r
+               <EOL_SPAN AT_LINE_START="TRUE" TYPE="COMMENT2">A</EOL_SPAN>\r
+               <EOL_SPAN AT_LINE_START="TRUE" TYPE="COMMENT2">D</EOL_SPAN>\r
+               <EOL_SPAN AT_LINE_START="TRUE" TYPE="COMMENT2">M</EOL_SPAN>\r
+               <EOL_SPAN AT_LINE_START="TRUE" TYPE="COMMENT2">_</EOL_SPAN>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/swig.xml b/extra/xmode/modes/swig.xml
new file mode 100644 (file)
index 0000000..ac5a23a
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+\r
+               <!-- Auto indent -->\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="indentNextLine"\r
+                       VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+               <!-- set this to 'true' if you want to use GNU coding style -->\r
+               <PROPERTY NAME="doubleBracketIndent" VALUE="false" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\"\r
+               IGNORE_CASE="FALSE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="(0x[\p{XDigit}]+[lL]?|[\p{Digit}]+(e[\p{Digit}]*)?[lLdDfF]?)">\r
+\r
+               <SPAN TYPE="LITERAL3">\r
+                       <BEGIN>%{</BEGIN>\r
+                       <END>%}</END>\r
+               </SPAN>\r
+\r
+               <!-- swig directive -->\r
+               <MARK_FOLLOWING AT_WORD_START="TRUE" TYPE="KEYWORD4">%</MARK_FOLLOWING>\r
+\r
+               <IMPORT DELEGATE="c::MAIN"/>\r
+    </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/tcl.xml b/extra/xmode/modes/tcl.xml
new file mode 100644 (file)
index 0000000..4927f13
--- /dev/null
@@ -0,0 +1,682 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- Tcl mode by Michael Jacobson.\r
+     cplusplus and pascal modes used as reference.\r
+    2006/10/20 Jean-Francois Larvoire: \r
+     - Fixed comments detection: Only # at the beginning of Tcl commands are comments!\r
+     - Quoted strings can span multiple lines.\r
+     - Added recursive in-string substituted command and variable analysis.\r
+     - Added numerous missing tcl keywords and variables up to version 8.4.14.\r
+     - Removed $ on global variable keywords, as they're often used with $::.\r
+     - Added Expect keywords, as KEYWORD2. (send was already in tk as KEYWORD2)\r
+     - Avoid colouring substituted variables that are homonyms of a keyword.\r
+     - Highlight hexadecimal numbers too.\r
+    2006/10/23 Jean-Francois Larvoire:\r
+     - Strings and blocks only begin at word start.\r
+     - Updated {# comment detection to manage the whole {} block. This catches\r
+       all { and }, and makes it unnecessary to define them as KEYWORDs.\r
+     - Bug fix: Do not delegate content evaluation for ${} scalar variables.\r
+    Limitations:\r
+     - Unbalanced quotes or brackets within braces, such as in regular expressions,\r
+       will confuse the analysis. Workaround: If possible, use a \ to escape the\r
+       unbalanced character. Else add a ;# comment with a closing " or ].\r
+    Known bugs:\r
+     - Continuation line detection does not work. Same bug as espace chars below.\r
+     - ; highlighting as an OPERATOR does not work.\r
+    Known bugs (Were there before, and I failed to fix them):\r
+     - \c escape colouring does not work for escapes embedded in words.\r
+           I attemted numerous workarounds using spans and regexps, but they\r
+          all seem to fail to detect anything beginning with a \. And using\r
+          NO_ESCAPE="TRUE" does not help.\r
+     - {} within quoted strings should not affect indentation. -->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="lineUpClosingBracket" VALUE="true" />\r
+       </PROPS>\r
+\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE" \r
+               DIGIT_RE="0x\p{XDigit}+|\d+">\r
+\r
+               <!-- Continuation line. Processed before anything else by Tcl. (Does not work)-->\r
+               <EOL_SPAN_REGEXP TYPE="OPERATOR" HASH_CHAR="\">\\$</EOL_SPAN_REGEXP>\r
+\r
+               <!-- Comments after a ; command separator -->\r
+               <!-- Note: The ; isn't bolded as other operators. Why?-->\r
+               <EOL_SPAN_REGEXP TYPE="OPERATOR" HASH_CHAR=";" DELEGATE="TCL_COMMENT">;\s*(?=#)</EOL_SPAN_REGEXP>\r
+               <!-- Comments at the { opening of a block -->\r
+               <SPAN_REGEXP TYPE="OPERATOR" HASH_CHAR="{" DELEGATE="TCL_COMMENT">\r
+                       <BEGIN>\{\s*(?=#)</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN_REGEXP>\r
+               <!-- Comments on a line of their own. -->\r
+               <EOL_SPAN TYPE="COMMENT1" AT_WHITESPACE_END="TRUE">#</EOL_SPAN>\r
+\r
+               <!-- Quoted strings -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE" AT_WORD_START="TRUE" DELEGATE="TCL_STRING">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- Avoid colouring substituted variables that are homonyms of a keyword -->\r
+               <!-- Indexed array variable. Delegate to MAIN, as the index string is evaluated by Tcl.-->\r
+               <SPAN_REGEXP TYPE="NULL" HASH_CHAR="$" DELEGATE="MAIN">\r
+                       <BEGIN>\$(\w|::)+\(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN_REGEXP>\r
+               <!-- General scalar variable. Do not delegate, as the ${} block content is not evalutated by Tcl. -->\r
+               <SPAN TYPE="NULL">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <!-- Plain scalar variable. -->\r
+               <SEQ_REGEXP TYPE="NULL" HASH_CHAR="$">\$(\w|::)+</SEQ_REGEXP>\r
+\r
+               <!-- Sub-block -->\r
+               <SPAN TYPE="OPERATOR" NO_LINE_BREAK="FALSE" AT_WORD_START="TRUE" DELEGATE="MAIN">\r
+                       <BEGIN>{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <!-- Sub-commands to be substituted -->\r
+               <SPAN TYPE="OPERATOR" NO_LINE_BREAK="FALSE" DELEGATE="MAIN">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+\r
+               <!-- Escaped characters -->\r
+               <SEQ TYPE="KEYWORD3">\a</SEQ>\r
+               <SEQ TYPE="KEYWORD3">\b</SEQ>\r
+               <SEQ TYPE="KEYWORD3">\f</SEQ>\r
+               <SEQ TYPE="KEYWORD3">\n</SEQ>\r
+               <SEQ TYPE="KEYWORD3">\r</SEQ>\r
+               <SEQ TYPE="KEYWORD3">\t</SEQ>\r
+               <SEQ TYPE="KEYWORD3">\v</SEQ>\r
+\r
+               <!-- Tcl syntax operators. -->\r
+               <!-- Note that "{}[]" are already caught above.-->\r
+               <!-- Delegate to main, as a new command begins after the ; -->\r
+               <SEQ TYPE="OPERATOR" DELEGATE="MAIN">;</SEQ>\r
+               <SEQ TYPE="NULL">::</SEQ>\r
+\r
+               <!-- Math expression operators -->\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <!-- Tcl keywords-->\r
+                       <KEYWORD1>append</KEYWORD1>\r
+                       <KEYWORD1>array</KEYWORD1>\r
+                       <KEYWORD1>concat</KEYWORD1>\r
+                       <KEYWORD1>console</KEYWORD1>\r
+                       <KEYWORD1>eval</KEYWORD1>\r
+                       <KEYWORD1>expr</KEYWORD1>\r
+                       <KEYWORD1>format</KEYWORD1>\r
+                       <KEYWORD1>global</KEYWORD1>\r
+                       <KEYWORD1>set</KEYWORD1>\r
+                       <KEYWORD1>trace</KEYWORD1>\r
+                       <KEYWORD1>unset</KEYWORD1>\r
+                       <KEYWORD1>upvar</KEYWORD1>\r
+                       <KEYWORD1>join</KEYWORD1>\r
+                       <KEYWORD1>lappend</KEYWORD1>\r
+                       <KEYWORD1>lindex</KEYWORD1>\r
+                       <KEYWORD1>linsert</KEYWORD1>\r
+                       <KEYWORD1>list</KEYWORD1>\r
+                       <KEYWORD1>llength</KEYWORD1>\r
+                       <KEYWORD1>lrange</KEYWORD1>\r
+                       <KEYWORD1>lreplace</KEYWORD1>\r
+                       <KEYWORD1>lsearch</KEYWORD1>\r
+                       <KEYWORD1>lsort</KEYWORD1>\r
+                       <KEYWORD1>split</KEYWORD1>\r
+                       <KEYWORD1>scan</KEYWORD1>\r
+                       <KEYWORD1>string</KEYWORD1>\r
+                       <KEYWORD1>regexp</KEYWORD1>\r
+                       <KEYWORD1>regsub</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>elseif</KEYWORD1>\r
+                       <KEYWORD1>switch</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>foreach</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+                       <KEYWORD1>break</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+                       <KEYWORD1>proc</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>source</KEYWORD1>\r
+                       <KEYWORD1>unknown</KEYWORD1>\r
+                       <KEYWORD1>uplevel</KEYWORD1>\r
+                       <KEYWORD1>cd</KEYWORD1>\r
+                       <KEYWORD1>close</KEYWORD1>\r
+                       <KEYWORD1>eof</KEYWORD1>\r
+                       <KEYWORD1>file</KEYWORD1>\r
+                       <KEYWORD1>flush</KEYWORD1>\r
+                       <KEYWORD1>gets</KEYWORD1>\r
+                       <KEYWORD1>glob</KEYWORD1>\r
+                       <KEYWORD1>open</KEYWORD1>\r
+                       <KEYWORD1>read</KEYWORD1>\r
+                       <KEYWORD1>puts</KEYWORD1>\r
+                       <KEYWORD1>pwd</KEYWORD1>\r
+                       <KEYWORD1>seek</KEYWORD1>\r
+                       <KEYWORD1>tell</KEYWORD1>\r
+                       <KEYWORD1>catch</KEYWORD1>\r
+                       <KEYWORD1>error</KEYWORD1>\r
+                       <KEYWORD1>exec</KEYWORD1>\r
+                       <KEYWORD1>pid</KEYWORD1>\r
+                       <KEYWORD1>after</KEYWORD1>\r
+                       <KEYWORD1>time</KEYWORD1>\r
+                       <KEYWORD1>exit</KEYWORD1>\r
+                       <KEYWORD1>history</KEYWORD1>\r
+                       <KEYWORD1>rename</KEYWORD1>\r
+                       <KEYWORD1>info</KEYWORD1>\r
+                       <!-- expr keywords-->\r
+                       <KEYWORD1>ceil</KEYWORD1>\r
+                       <KEYWORD1>floor</KEYWORD1>\r
+                       <KEYWORD1>round</KEYWORD1>\r
+                       <KEYWORD1>incr</KEYWORD1>\r
+                       <KEYWORD1>abs</KEYWORD1>\r
+                       <KEYWORD1>acos</KEYWORD1>\r
+                       <KEYWORD1>cos</KEYWORD1>\r
+                       <KEYWORD1>cosh</KEYWORD1>\r
+                       <KEYWORD1>asin</KEYWORD1>\r
+                       <KEYWORD1>sin</KEYWORD1>\r
+                       <KEYWORD1>sinh</KEYWORD1>\r
+                       <KEYWORD1>atan</KEYWORD1>\r
+                       <KEYWORD1>atan2</KEYWORD1>\r
+                       <KEYWORD1>tan</KEYWORD1>\r
+                       <KEYWORD1>tanh</KEYWORD1>\r
+                       <KEYWORD1>log</KEYWORD1>\r
+                       <KEYWORD1>log10</KEYWORD1>\r
+                       <KEYWORD1>fmod</KEYWORD1>\r
+                       <KEYWORD1>pow</KEYWORD1>\r
+                       <KEYWORD1>hypot</KEYWORD1>\r
+                       <KEYWORD1>sqrt</KEYWORD1>\r
+                       <KEYWORD1>double</KEYWORD1>\r
+                       <KEYWORD1>int</KEYWORD1>\r
+                       <!-- New Tcl keywords up to tcl 8.4.14 -->\r
+                       <KEYWORD1>bgerror</KEYWORD1>\r
+                       <KEYWORD1>binary</KEYWORD1>\r
+                       <KEYWORD1>clock</KEYWORD1>\r
+                       <KEYWORD1>dde</KEYWORD1>\r
+                       <KEYWORD1>encoding</KEYWORD1>\r
+                       <KEYWORD1>fblocked</KEYWORD1>\r
+                       <KEYWORD1>fconfigure</KEYWORD1>\r
+                       <KEYWORD1>fcopy</KEYWORD1>\r
+                       <KEYWORD1>fileevent</KEYWORD1>\r
+                       <KEYWORD1>filename</KEYWORD1>\r
+                       <KEYWORD1>http</KEYWORD1>\r
+                       <KEYWORD1>interp</KEYWORD1>\r
+                       <KEYWORD1>load</KEYWORD1>\r
+                       <KEYWORD1>lset</KEYWORD1>\r
+                       <KEYWORD1>memory</KEYWORD1>\r
+                       <KEYWORD1>msgcat</KEYWORD1>\r
+                       <KEYWORD1>namespace</KEYWORD1>\r
+                       <KEYWORD1>package</KEYWORD1>\r
+                       <KEYWORD1>pkg::create</KEYWORD1>\r
+                       <KEYWORD1>pkg_mkIndex</KEYWORD1>\r
+                       <KEYWORD1>registry</KEYWORD1>\r
+                       <KEYWORD1>resource</KEYWORD1>\r
+                       <KEYWORD1>socket</KEYWORD1>\r
+                       <KEYWORD1>subst</KEYWORD1>\r
+                       <KEYWORD1>update</KEYWORD1>\r
+                       <KEYWORD1>variable</KEYWORD1>\r
+                       <KEYWORD1>vwait</KEYWORD1>\r
+                       <!-- Standard library of Tcl interpretor procedures -->\r
+                       <KEYWORD1>auto_execok</KEYWORD1>\r
+                       <KEYWORD1>auto_import</KEYWORD1>\r
+                       <KEYWORD1>auto_load</KEYWORD1>\r
+                       <KEYWORD1>auto_mkindex</KEYWORD1>\r
+                       <KEYWORD1>auto_mkindex_old</KEYWORD1>\r
+                       <KEYWORD1>auto_qualify</KEYWORD1>\r
+                       <KEYWORD1>auto_reset</KEYWORD1>\r
+                       <KEYWORD1>parray</KEYWORD1>\r
+                       <KEYWORD1>tcl_endOfWord</KEYWORD1>\r
+                       <KEYWORD1>tcl_findLibrary</KEYWORD1>\r
+                       <KEYWORD1>tcl_startOfNextWord</KEYWORD1>\r
+                       <KEYWORD1>tcl_startOfPreviousWord</KEYWORD1>\r
+                       <KEYWORD1>tcl_wordBreakAfter</KEYWORD1>\r
+                       <KEYWORD1>tcl_wordBreakBefore</KEYWORD1>\r
+\r
+                       <!-- Tk keywords -->\r
+                       <KEYWORD2>bind</KEYWORD2>\r
+                       <KEYWORD2>button</KEYWORD2>\r
+                       <KEYWORD2>canvas</KEYWORD2>\r
+                       <KEYWORD2>checkbutton</KEYWORD2>\r
+                       <KEYWORD2>destroy</KEYWORD2>\r
+                       <KEYWORD2>entry</KEYWORD2>\r
+                       <KEYWORD2>focus</KEYWORD2>\r
+                       <KEYWORD2>frame</KEYWORD2>\r
+                       <KEYWORD2>grab</KEYWORD2>\r
+                       <KEYWORD2>image</KEYWORD2>\r
+                       <KEYWORD2>label</KEYWORD2>\r
+                       <KEYWORD2>listbox</KEYWORD2>\r
+                       <KEYWORD2>lower</KEYWORD2>\r
+                       <KEYWORD2>menu</KEYWORD2>\r
+                       <KEYWORD2>menubutton</KEYWORD2>\r
+                       <KEYWORD2>message</KEYWORD2>\r
+                       <KEYWORD2>option</KEYWORD2>\r
+                       <KEYWORD2>pack</KEYWORD2>\r
+                       <KEYWORD2>placer</KEYWORD2>\r
+                       <KEYWORD2>radiobutton</KEYWORD2>\r
+                       <KEYWORD2>raise</KEYWORD2>\r
+                       <KEYWORD2>scale</KEYWORD2>\r
+                       <KEYWORD2>scrollbar</KEYWORD2>\r
+                       <KEYWORD2>selection</KEYWORD2>\r
+                       <KEYWORD2>send</KEYWORD2>\r
+                       <KEYWORD2>text</KEYWORD2>\r
+                       <KEYWORD2>tk</KEYWORD2>\r
+                       <KEYWORD2>tkerror</KEYWORD2>\r
+                       <KEYWORD2>tkwait</KEYWORD2>\r
+                       <KEYWORD2>toplevel</KEYWORD2>\r
+                       <KEYWORD2>update</KEYWORD2>\r
+                       <KEYWORD2>winfo</KEYWORD2>\r
+                       <KEYWORD2>wm</KEYWORD2>\r
+\r
+                       <!-- Expect keywords. Using KEYWORD2 as send is already one -->\r
+                       <!-- KEYWORD2 close -->\r
+                       <KEYWORD2>debug</KEYWORD2>\r
+                       <KEYWORD2>disconnect</KEYWORD2>\r
+                       <!-- KEYWORD2 exit -->\r
+                       <KEYWORD2>exp_continue</KEYWORD2>\r
+                       <KEYWORD2>exp_internal</KEYWORD2>\r
+                       <KEYWORD2>exp_open</KEYWORD2>\r
+                       <KEYWORD2>exp_pid</KEYWORD2>\r
+                       <KEYWORD2>exp_version</KEYWORD2>\r
+                       <KEYWORD2>expect</KEYWORD2>\r
+                       <KEYWORD2>expect_after</KEYWORD2>\r
+                       <KEYWORD2>expect_background</KEYWORD2>\r
+                       <KEYWORD2>expect_before</KEYWORD2>\r
+                       <KEYWORD2>expect_tty</KEYWORD2>\r
+                       <KEYWORD2>expect_user</KEYWORD2>\r
+                       <KEYWORD2>fork</KEYWORD2>\r
+                       <KEYWORD2>inter_return</KEYWORD2>\r
+                       <KEYWORD2>interact</KEYWORD2>\r
+                       <KEYWORD2>interpreter</KEYWORD2>\r
+                       <KEYWORD2>log_file</KEYWORD2>\r
+                       <KEYWORD2>log_user</KEYWORD2>\r
+                       <KEYWORD2>match_max</KEYWORD2>\r
+                       <KEYWORD2>overlay</KEYWORD2>\r
+                       <KEYWORD2>parity</KEYWORD2>\r
+                       <KEYWORD2>promptl</KEYWORD2>\r
+                       <KEYWORD2>prompt2</KEYWORD2>\r
+                       <KEYWORD2>remove_nulls</KEYWORD2>\r
+                       <!-- KEYWORD2 send -->\r
+                       <KEYWORD2>send_error </KEYWORD2>\r
+                       <KEYWORD2>send_log</KEYWORD2>\r
+                       <KEYWORD2>send_tty</KEYWORD2>\r
+                       <KEYWORD2>send_user</KEYWORD2>\r
+                       <KEYWORD2>sleep</KEYWORD2>\r
+                       <KEYWORD2>spawn</KEYWORD2>\r
+                       <KEYWORD2>strace</KEYWORD2>\r
+                       <KEYWORD2>stty</KEYWORD2>\r
+                       <KEYWORD2>system</KEYWORD2>\r
+                       <KEYWORD2>timestamp</KEYWORD2>\r
+                       <KEYWORD2>trap</KEYWORD2>\r
+                       <KEYWORD2>wait</KEYWORD2>\r
+                       <!-- Arguments to expect commands-->\r
+                       <KEYWORD3>full_buffer</KEYWORD3>\r
+                       <KEYWORD3>timeout</KEYWORD3>\r
+                       <!-- KEYWORD3 eof-->\r
+\r
+                       <!-- Global variables-->\r
+                       <KEYWORD3>argv0</KEYWORD3>\r
+                       <KEYWORD3>argv</KEYWORD3>\r
+                       <KEYWORD3>argc</KEYWORD3>\r
+                       <KEYWORD3>tk_version</KEYWORD3>\r
+                       <KEYWORD3>tk_library</KEYWORD3>\r
+                       <KEYWORD3>tk_strictMotif</KEYWORD3>\r
+                       <!-- New global variables up to tcl 8.4.14 -->\r
+                       <KEYWORD3>env</KEYWORD3>\r
+                       <KEYWORD3>errorCode</KEYWORD3>\r
+                       <KEYWORD3>errorInfo</KEYWORD3>\r
+                       <KEYWORD3>geometry</KEYWORD3>\r
+                       <KEYWORD3>tcl_library</KEYWORD3>\r
+                       <KEYWORD3>tcl_patchLevel</KEYWORD3>\r
+                       <KEYWORD3>tcl_pkgPath</KEYWORD3>\r
+                       <KEYWORD3>tcl_platform</KEYWORD3>\r
+                       <KEYWORD3>tcl_precision</KEYWORD3>\r
+                       <KEYWORD3>tcl_rcFileName</KEYWORD3>\r
+                       <KEYWORD3>tcl_rcRsrcName</KEYWORD3>\r
+                       <KEYWORD3>tcl_traceCompile</KEYWORD3>\r
+                       <KEYWORD3>tcl_traceExec</KEYWORD3>\r
+                       <KEYWORD3>tcl_wordchars</KEYWORD3>\r
+                       <KEYWORD3>tcl_nonwordchars</KEYWORD3>\r
+                       <KEYWORD3>tcl_version</KEYWORD3>\r
+                       <KEYWORD3>tcl_interactive</KEYWORD3>\r
+\r
+                       <!-- Common arguments to tcl and Tk keywords -->\r
+                       <KEYWORD3>exact</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+                       <KEYWORD3>indices</KEYWORD3>\r
+                       <KEYWORD3>nocase</KEYWORD3>\r
+                       <KEYWORD3>nocomplain</KEYWORD3>\r
+                       <KEYWORD3>nonewline</KEYWORD3>\r
+                       <KEYWORD3>code</KEYWORD3>\r
+                       <KEYWORD3>errorinfo</KEYWORD3>\r
+                       <KEYWORD3>errorcode</KEYWORD3>\r
+                       <KEYWORD3>atime</KEYWORD3>\r
+                       <KEYWORD3>anymore</KEYWORD3>\r
+                       <KEYWORD3>args</KEYWORD3>\r
+                       <KEYWORD3>body</KEYWORD3>\r
+                       <KEYWORD3>compare</KEYWORD3>\r
+                       <KEYWORD3>cmdcount</KEYWORD3>\r
+                       <KEYWORD3>commands</KEYWORD3>\r
+                       <KEYWORD3>ctime</KEYWORD3>\r
+                       <KEYWORD3>current</KEYWORD3>\r
+                       <KEYWORD3>default</KEYWORD3>\r
+                       <KEYWORD3>dev</KEYWORD3>\r
+                       <KEYWORD3>dirname</KEYWORD3>\r
+                       <KEYWORD3>donesearch</KEYWORD3>\r
+                       <KEYWORD3>errorinfo</KEYWORD3>\r
+                       <KEYWORD3>executable</KEYWORD3>\r
+                       <KEYWORD3>extension</KEYWORD3>\r
+                       <KEYWORD3>first</KEYWORD3>\r
+                       <KEYWORD3>globals</KEYWORD3>\r
+                       <KEYWORD3>gid</KEYWORD3>\r
+                       <KEYWORD3>index</KEYWORD3>\r
+                       <KEYWORD3>ino</KEYWORD3>\r
+                       <KEYWORD3>isdirectory</KEYWORD3>\r
+                       <KEYWORD3>isfile</KEYWORD3>\r
+                       <KEYWORD3>keep</KEYWORD3>\r
+                       <KEYWORD3>last</KEYWORD3>\r
+                       <KEYWORD3>level</KEYWORD3>\r
+                       <KEYWORD3>length</KEYWORD3>\r
+                       <KEYWORD3>library</KEYWORD3>\r
+                       <KEYWORD3>locals</KEYWORD3>\r
+                       <KEYWORD3>lstat</KEYWORD3>\r
+                       <KEYWORD3>match</KEYWORD3>\r
+                       <KEYWORD3>mode</KEYWORD3>\r
+                       <KEYWORD3>mtime</KEYWORD3>\r
+                       <KEYWORD3>names</KEYWORD3>\r
+                       <KEYWORD3>nextelement</KEYWORD3>\r
+                       <KEYWORD3>nextid</KEYWORD3>\r
+                       <KEYWORD3>nlink</KEYWORD3>\r
+                       <KEYWORD3>none</KEYWORD3>\r
+                       <KEYWORD3>procs</KEYWORD3>\r
+                       <KEYWORD3>owned</KEYWORD3>\r
+                       <KEYWORD3>range</KEYWORD3>\r
+                       <KEYWORD3>readable</KEYWORD3>\r
+                       <KEYWORD3>readlink</KEYWORD3>\r
+                       <KEYWORD3>redo</KEYWORD3>\r
+                       <KEYWORD3>release</KEYWORD3>\r
+                       <KEYWORD3>rootname</KEYWORD3>\r
+                       <KEYWORD3>script</KEYWORD3>\r
+                       <KEYWORD3>show</KEYWORD3>\r
+                       <KEYWORD3>size</KEYWORD3>\r
+                       <KEYWORD3>startsearch</KEYWORD3>\r
+                       <KEYWORD3>stat</KEYWORD3>\r
+                       <KEYWORD3>status</KEYWORD3>\r
+                       <KEYWORD3>substitute</KEYWORD3>\r
+                       <KEYWORD3>tail</KEYWORD3>\r
+                       <KEYWORD3>tclversion</KEYWORD3>\r
+                       <KEYWORD3>tolower</KEYWORD3>\r
+                       <KEYWORD3>toupper</KEYWORD3>\r
+                       <KEYWORD3>trim</KEYWORD3>\r
+                       <KEYWORD3>trimleft</KEYWORD3>\r
+                       <KEYWORD3>trimright</KEYWORD3>\r
+                       <KEYWORD3>type</KEYWORD3>\r
+                       <KEYWORD3>uid</KEYWORD3>\r
+                       <KEYWORD3>variable</KEYWORD3>\r
+                       <KEYWORD3>vars</KEYWORD3>\r
+                       <KEYWORD3>vdelete</KEYWORD3>\r
+                       <KEYWORD3>vinfo</KEYWORD3>\r
+                       <KEYWORD3>visibility</KEYWORD3>\r
+                       <KEYWORD3>window</KEYWORD3>\r
+                       <KEYWORD3>writable</KEYWORD3>\r
+                       <KEYWORD3>accelerator</KEYWORD3>\r
+                       <KEYWORD3>activeforeground</KEYWORD3>\r
+                       <KEYWORD3>activebackground</KEYWORD3>\r
+                       <KEYWORD3>anchor</KEYWORD3>\r
+                       <KEYWORD3>aspect</KEYWORD3>\r
+                       <KEYWORD3>background</KEYWORD3>\r
+                       <KEYWORD3>before</KEYWORD3>\r
+                       <KEYWORD3>bg</KEYWORD3>\r
+                       <KEYWORD3>borderwidth</KEYWORD3>\r
+                       <KEYWORD3>bd</KEYWORD3>\r
+                       <KEYWORD3>bitmap</KEYWORD3>\r
+                       <KEYWORD3>command</KEYWORD3>\r
+                       <KEYWORD3>cursor</KEYWORD3>\r
+                       <KEYWORD3>default</KEYWORD3>\r
+                       <KEYWORD3>expand</KEYWORD3>\r
+                       <KEYWORD3>family</KEYWORD3>\r
+                       <KEYWORD3>fg</KEYWORD3>\r
+                       <KEYWORD3>fill</KEYWORD3>\r
+                       <KEYWORD3>font</KEYWORD3>\r
+                       <KEYWORD3>force</KEYWORD3>\r
+                       <KEYWORD3>foreground</KEYWORD3>\r
+                       <KEYWORD3>from</KEYWORD3>\r
+                       <KEYWORD3>height</KEYWORD3>\r
+                       <KEYWORD3>icon</KEYWORD3>\r
+                       <KEYWORD3>question</KEYWORD3>\r
+                       <KEYWORD3>warning</KEYWORD3>\r
+                       <KEYWORD3>in</KEYWORD3>\r
+                       <KEYWORD3>ipadx</KEYWORD3>\r
+                       <KEYWORD3>ipady</KEYWORD3>\r
+                       <KEYWORD3>justify</KEYWORD3>\r
+                       <KEYWORD3>left</KEYWORD3>\r
+                       <KEYWORD3>center</KEYWORD3>\r
+                       <KEYWORD3>right</KEYWORD3>\r
+                       <KEYWORD3>length</KEYWORD3>\r
+                       <KEYWORD3>padx</KEYWORD3>\r
+                       <KEYWORD3>pady</KEYWORD3>\r
+                       <KEYWORD3>offvalue</KEYWORD3>\r
+                       <KEYWORD3>onvalue</KEYWORD3>\r
+                       <KEYWORD3>orient</KEYWORD3>\r
+                       <KEYWORD3>horizontal</KEYWORD3>\r
+                       <KEYWORD3>vertical</KEYWORD3>\r
+                       <KEYWORD3>outline</KEYWORD3>\r
+                       <KEYWORD3>oversrike</KEYWORD3>\r
+                       <KEYWORD3>relief</KEYWORD3>\r
+                       <KEYWORD3>raised</KEYWORD3>\r
+                       <KEYWORD3>sunken</KEYWORD3>\r
+                       <KEYWORD3>flat</KEYWORD3>\r
+                       <KEYWORD3>groove</KEYWORD3>\r
+                       <KEYWORD3>ridge</KEYWORD3>\r
+                       <KEYWORD3>solid</KEYWORD3>\r
+                       <KEYWORD3>screen</KEYWORD3>\r
+                       <KEYWORD3>selectbackground</KEYWORD3>\r
+                       <KEYWORD3>selectforeground</KEYWORD3>\r
+                       <KEYWORD3>setgrid</KEYWORD3>\r
+                       <KEYWORD3>side</KEYWORD3>\r
+                       <KEYWORD3>size</KEYWORD3>\r
+                       <KEYWORD3>slant</KEYWORD3>\r
+                       <KEYWORD3>left</KEYWORD3>\r
+                       <KEYWORD3>right</KEYWORD3>\r
+                       <KEYWORD3>top</KEYWORD3>\r
+                       <KEYWORD3>bottom</KEYWORD3>\r
+                       <KEYWORD3>spacing1</KEYWORD3>\r
+                       <KEYWORD3>spacing2</KEYWORD3>\r
+                       <KEYWORD3>spacing3</KEYWORD3>\r
+                       <KEYWORD3>state</KEYWORD3>\r
+                       <KEYWORD3>stipple</KEYWORD3>\r
+                       <KEYWORD3>takefocus</KEYWORD3>\r
+                       <KEYWORD3>tearoff</KEYWORD3>\r
+                       <KEYWORD3>textvariable</KEYWORD3>\r
+                       <KEYWORD3>title</KEYWORD3>\r
+                       <KEYWORD3>to</KEYWORD3>\r
+                       <KEYWORD3>type</KEYWORD3>\r
+                       <KEYWORD3>abortretryignore</KEYWORD3>\r
+                       <KEYWORD3>ok</KEYWORD3>\r
+                       <KEYWORD3>okcancel</KEYWORD3>\r
+                       <KEYWORD3>retrycancel</KEYWORD3>\r
+                       <KEYWORD3>yesno</KEYWORD3>\r
+                       <KEYWORD3>yesnocancel</KEYWORD3>\r
+                       <KEYWORD3>underline</KEYWORD3>\r
+                       <KEYWORD3>value</KEYWORD3>\r
+                       <KEYWORD3>variable</KEYWORD3>\r
+                       <KEYWORD3>weight</KEYWORD3>\r
+                       <KEYWORD3>width</KEYWORD3>\r
+                       <KEYWORD3>xscrollcommand</KEYWORD3>\r
+                       <KEYWORD3>yscrollcommand</KEYWORD3>\r
+                       <KEYWORD3>active</KEYWORD3>\r
+                       <KEYWORD3>add</KEYWORD3>\r
+                       <KEYWORD3>arc</KEYWORD3>\r
+                       <KEYWORD3>aspect</KEYWORD3>\r
+                       <KEYWORD3>bitmap</KEYWORD3>\r
+                       <KEYWORD3>cascade</KEYWORD3>\r
+                       <KEYWORD3>cget</KEYWORD3>\r
+                       <KEYWORD3>children</KEYWORD3>\r
+                       <KEYWORD3>class</KEYWORD3>\r
+                       <KEYWORD3>clear</KEYWORD3>\r
+                       <KEYWORD3>client</KEYWORD3>\r
+                       <KEYWORD3>create</KEYWORD3>\r
+                       <KEYWORD3>colormodel</KEYWORD3>\r
+                       <KEYWORD3>command</KEYWORD3>\r
+                       <KEYWORD3>configure</KEYWORD3>\r
+                       <KEYWORD3>deiconify</KEYWORD3>\r
+                       <KEYWORD3>delete</KEYWORD3>\r
+                       <KEYWORD3>disabled</KEYWORD3>\r
+                       <KEYWORD3>exists</KEYWORD3>\r
+                       <KEYWORD3>focusmodel</KEYWORD3>\r
+                       <KEYWORD3>flash</KEYWORD3>\r
+                       <KEYWORD3>forget</KEYWORD3>\r
+                       <KEYWORD3>geometry</KEYWORD3>\r
+                       <KEYWORD3>get</KEYWORD3>\r
+                       <KEYWORD3>group</KEYWORD3>\r
+                       <KEYWORD3>handle</KEYWORD3>\r
+                       <KEYWORD3>iconbitmap</KEYWORD3>\r
+                       <KEYWORD3>iconify</KEYWORD3>\r
+                       <KEYWORD3>iconmask</KEYWORD3>\r
+                       <KEYWORD3>iconname</KEYWORD3>\r
+                       <KEYWORD3>iconposition</KEYWORD3>\r
+                       <KEYWORD3>iconwindow</KEYWORD3>\r
+                       <KEYWORD3>idletasks</KEYWORD3>\r
+                       <KEYWORD3>insert</KEYWORD3>\r
+                       <KEYWORD3>interps</KEYWORD3>\r
+                       <KEYWORD3>itemconfigure</KEYWORD3>\r
+                       <KEYWORD3>invoke</KEYWORD3>\r
+                       <KEYWORD3>line</KEYWORD3>\r
+                       <KEYWORD3>mark</KEYWORD3>\r
+                       <KEYWORD3>maxsize</KEYWORD3>\r
+                       <KEYWORD3>minsize</KEYWORD3>\r
+                       <KEYWORD3>move</KEYWORD3>\r
+                       <KEYWORD3>name</KEYWORD3>\r
+                       <KEYWORD3>normal</KEYWORD3>\r
+                       <KEYWORD3>overrideredirect</KEYWORD3>\r
+                       <KEYWORD3>oval</KEYWORD3>\r
+                       <KEYWORD3>own</KEYWORD3>\r
+                       <KEYWORD3>photo</KEYWORD3>\r
+                       <KEYWORD3>polygon</KEYWORD3>\r
+                       <KEYWORD3>positionfrom</KEYWORD3>\r
+                       <KEYWORD3>propagate</KEYWORD3>\r
+                       <KEYWORD3>protocol</KEYWORD3>\r
+                       <KEYWORD3>ranges</KEYWORD3>\r
+                       <KEYWORD3>rectangle</KEYWORD3>\r
+                       <KEYWORD3>remove</KEYWORD3>\r
+                       <KEYWORD3>resizable</KEYWORD3>\r
+                       <KEYWORD3>separator</KEYWORD3>\r
+                       <KEYWORD3>slaves</KEYWORD3>\r
+                       <KEYWORD3>sizefrom</KEYWORD3>\r
+                       <KEYWORD3>state</KEYWORD3>\r
+                       <KEYWORD3>tag</KEYWORD3>\r
+                       <KEYWORD3>title</KEYWORD3>\r
+                       <KEYWORD3>transient</KEYWORD3>\r
+                       <KEYWORD3>window</KEYWORD3>\r
+                       <KEYWORD3>withdraw</KEYWORD3>\r
+                       <KEYWORD3>xview</KEYWORD3>\r
+                       <KEYWORD3>yview</KEYWORD3>\r
+                       <KEYWORD3>Activate</KEYWORD3>\r
+                       <KEYWORD3>Alt</KEYWORD3>\r
+                       <KEYWORD3>Any</KEYWORD3>\r
+                       <KEYWORD3>B1</KEYWORD3>\r
+                       <KEYWORD3>B2</KEYWORD3>\r
+                       <KEYWORD3>B3</KEYWORD3>\r
+                       <KEYWORD3>Button1</KEYWORD3>\r
+                       <KEYWORD3>Button2</KEYWORD3>\r
+                       <KEYWORD3>Button3</KEYWORD3>\r
+                       <KEYWORD3>ButtonPress</KEYWORD3>\r
+                       <KEYWORD3>ButtonRelease</KEYWORD3>\r
+                       <KEYWORD3>Double</KEYWORD3>\r
+                       <KEYWORD3>Circulate</KEYWORD3>\r
+                       <KEYWORD3>Colormap</KEYWORD3>\r
+                       <KEYWORD3>Configure</KEYWORD3>\r
+                       <KEYWORD3>Control</KEYWORD3>\r
+                       <KEYWORD3>Deactivate</KEYWORD3>\r
+                       <KEYWORD3>Escape</KEYWORD3>\r
+                       <KEYWORD3>Expose</KEYWORD3>\r
+                       <KEYWORD3>FocusIn</KEYWORD3>\r
+                       <KEYWORD3>FocusOut</KEYWORD3>\r
+                       <KEYWORD3>Gravity</KEYWORD3>\r
+                       <KEYWORD3>Key</KEYWORD3>\r
+                       <KEYWORD3>KeyPress</KEYWORD3>\r
+                       <KEYWORD3>KeyRelease</KEYWORD3>\r
+                       <KEYWORD3>Lock</KEYWORD3>\r
+                       <KEYWORD3>Meta</KEYWORD3>\r
+                       <KEYWORD3>Property</KEYWORD3>\r
+                       <KEYWORD3>Reparent</KEYWORD3>\r
+                       <KEYWORD3>Shift</KEYWORD3>\r
+                       <KEYWORD3>Unmap</KEYWORD3>\r
+                       <KEYWORD3>Visibility</KEYWORD3>\r
+                       <KEYWORD3>Button</KEYWORD3>\r
+                       <KEYWORD3>ButtonPress</KEYWORD3>\r
+                       <KEYWORD3>ButtonRelease</KEYWORD3>\r
+                       <KEYWORD3>Destroy</KEYWORD3>\r
+                       <KEYWORD3>Escape</KEYWORD3>\r
+                       <KEYWORD3>Enter</KEYWORD3>\r
+                       <KEYWORD3>Leave</KEYWORD3>\r
+                       <KEYWORD3>Motion</KEYWORD3>\r
+                       <KEYWORD3>MenuSelect</KEYWORD3>\r
+                       <KEYWORD3>Triple</KEYWORD3>\r
+                       <KEYWORD3>all</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="TCL_COMMENT" DEFAULT="OPERATOR">\r
+               <!-- Allows catching blocks starting with a comment.\r
+                   or comments following a ; -->\r
+               <SEQ_REGEXP TYPE="COMMENT1" HASH_CHAR="#" DELEGATE="MAIN">#.*</SEQ_REGEXP>\r
+       </RULES>\r
+\r
+       <RULES SET="TCL_STRING" DEFAULT="LITERAL1">\r
+               <PROPS>\r
+                       <PROPERTY NAME="indentOpenBrackets" VALUE="" />\r
+                       <PROPERTY NAME="indentCloseBrackets" VALUE="" />\r
+               </PROPS>\r
+\r
+               <!-- Continuation line. Processed before anything else by Tcl.-->\r
+               <EOL_SPAN_REGEXP TYPE="OPERATOR" HASH_CHAR="\">\\$</EOL_SPAN_REGEXP>\r
+\r
+               <!-- Avoid colouring variables substituted inside strings -->\r
+               <SPAN_REGEXP TYPE="NULL" HASH_CHAR="$" DELEGATE="MAIN">\r
+                       <BEGIN>\$(\w|::)+\(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN_REGEXP>\r
+               <SPAN_REGEXP TYPE="NULL" HASH_CHAR="$" DELEGATE="MAIN">\r
+                       <BEGIN>\$\{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN_REGEXP>\r
+               <SEQ_REGEXP TYPE="NULL" HASH_CHAR="$">\$(\w|::)+</SEQ_REGEXP>\r
+\r
+               <!-- Sub-commands to be substituted -->\r
+               <SPAN TYPE="OPERATOR" NO_LINE_BREAK="FALSE" DELEGATE="MAIN">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+\r
+               <!-- Escaped characters -->\r
+               <SEQ TYPE="KEYWORD3">\a</SEQ>\r
+               <SEQ TYPE="KEYWORD3">\b</SEQ>\r
+               <SEQ TYPE="KEYWORD3">\f</SEQ>\r
+               <SEQ TYPE="KEYWORD3">\n</SEQ>\r
+               <SEQ TYPE="KEYWORD3">\r</SEQ>\r
+               <SEQ TYPE="KEYWORD3">\t</SEQ>\r
+               <SEQ TYPE="KEYWORD3">\v</SEQ>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/tex.xml b/extra/xmode/modes/tex.xml
new file mode 100644 (file)
index 0000000..c59bfa8
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="%" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE="{}" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="FALSE">\r
+               <!-- $$...$$ -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="MATH">\r
+                       <BEGIN>$$</BEGIN>\r
+                       <END>$$</END>\r
+               </SPAN>\r
+\r
+               <!-- $...$ -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="MATH">\r
+                       <BEGIN>$</BEGIN>\r
+                       <END>$</END>\r
+               </SPAN>\r
+\r
+               <!-- \[...\] (LaTeX math mode) -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="MATH">\r
+                       <BEGIN>\[</BEGIN>\r
+                       <END>\]</END>\r
+               </SPAN>\r
+\r
+               <!-- some commands must be handled specially -->\r
+               <SEQ TYPE="KEYWORD1">\$</SEQ>\r
+               <SEQ TYPE="KEYWORD1">\\</SEQ>\r
+               <SEQ TYPE="KEYWORD1">\%</SEQ>\r
+\r
+               <!-- \iffalse ... \fi - a block comment -->\r
+                <SPAN TYPE="COMMENT1">\r
+                        <BEGIN>\iffalse</BEGIN>\r
+                        <END>\fi</END>\r
+                </SPAN>\r
+\r
+               <!-- \begin{verbatim} ... \end{verbatim} -->\r
+                <SPAN TYPE="KEYWORD1" DELEGATE="VERBATIM">\r
+                        <BEGIN>\begin{verbatim}</BEGIN>\r
+                        <END>\end{verbatim}</END>\r
+                </SPAN>\r
+\r
+               <!-- \verb|sometext| -->\r
+               <SPAN TYPE="KEYWORD1" DELEGATE="VERBATIM"\r
+                       NO_LINE_BREAK="TRUE">\r
+                        <BEGIN>\verb|</BEGIN>\r
+                        <END>|</END>\r
+                </SPAN>\r
+               <!-- \... commands -->\r
+               <MARK_FOLLOWING TYPE="KEYWORD1">\</MARK_FOLLOWING>\r
+\r
+               <!-- comments -->\r
+               <EOL_SPAN TYPE="COMMENT1">%</EOL_SPAN>\r
+\r
+               <!-- word separators -->\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="MATH" DEFAULT="MARKUP">\r
+               <!-- some commands must be handled specially -->\r
+               <SEQ TYPE="KEYWORD3">\$</SEQ>\r
+               <SEQ TYPE="KEYWORD3">\\</SEQ>\r
+               <SEQ TYPE="KEYWORD3">\%</SEQ>\r
+\r
+               <!-- \... commands -->\r
+               <MARK_FOLLOWING TYPE="KEYWORD3">\</MARK_FOLLOWING>\r
+\r
+               <!-- word separators -->\r
+               <SEQ TYPE="KEYWORD2">)</SEQ>\r
+               <SEQ TYPE="KEYWORD2">(</SEQ>\r
+               <SEQ TYPE="KEYWORD2">{</SEQ>\r
+               <SEQ TYPE="KEYWORD2">}</SEQ>\r
+               <SEQ TYPE="KEYWORD2">[</SEQ>\r
+               <SEQ TYPE="KEYWORD2">]</SEQ>\r
+               <SEQ TYPE="KEYWORD2">=</SEQ>\r
+               <SEQ TYPE="KEYWORD2">!</SEQ>\r
+               <SEQ TYPE="KEYWORD2">+</SEQ>\r
+               <SEQ TYPE="KEYWORD2">-</SEQ>\r
+               <SEQ TYPE="KEYWORD2">/</SEQ>\r
+               <SEQ TYPE="KEYWORD2">*</SEQ>\r
+               <SEQ TYPE="KEYWORD2">&gt;</SEQ>\r
+               <SEQ TYPE="KEYWORD2">&lt;</SEQ>\r
+               <SEQ TYPE="KEYWORD2">&amp;</SEQ>\r
+               <SEQ TYPE="KEYWORD2">|</SEQ>\r
+               <SEQ TYPE="KEYWORD2">^</SEQ>\r
+               <SEQ TYPE="KEYWORD2">~</SEQ>\r
+               <SEQ TYPE="KEYWORD2">.</SEQ>\r
+               <SEQ TYPE="KEYWORD2">,</SEQ>\r
+               <SEQ TYPE="KEYWORD2">;</SEQ>\r
+               <SEQ TYPE="KEYWORD2">?</SEQ>\r
+               <SEQ TYPE="KEYWORD2">:</SEQ>\r
+               <SEQ TYPE="KEYWORD2">'</SEQ>\r
+               <SEQ TYPE="KEYWORD2">"</SEQ>\r
+               <SEQ TYPE="KEYWORD2">`</SEQ>\r
+\r
+               <!-- comments -->\r
+               <EOL_SPAN TYPE="COMMENT1">%</EOL_SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="VERBATIM" DEFAULT="NULL" />\r
+</MODE>\r
diff --git a/extra/xmode/modes/texinfo.xml b/extra/xmode/modes/texinfo.xml
new file mode 100644 (file)
index 0000000..32ce589
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="@c" />\r
+       </PROPS>\r
+       <RULES>\r
+               <!-- comments -->\r
+               <EOL_SPAN TYPE="COMMENT1">@c </EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1">@comment </EOL_SPAN>\r
+\r
+               <!-- @... commands -->\r
+               <MARK_FOLLOWING TYPE="KEYWORD1">@</MARK_FOLLOWING>\r
+\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/text.xml b/extra/xmode/modes/text.xml
new file mode 100644 (file)
index 0000000..fe66537
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>\r
+\r
+<!-- The most complicated edit mode ever, for plain text mode -->\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <RULES>\r
+               <TERMINATE AT_CHAR="0" />\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/tpl.xml b/extra/xmode/modes/tpl.xml
new file mode 100644 (file)
index 0000000..9b215f6
--- /dev/null
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+       Tpl mode by Brant Gurganus <brantgurganus2001@cherokeescouting.org>\r
+    Adapted from ColdFusion\r
+-->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+       </PROPS>\r
+    <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               \r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT3">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+               \r
+               <!-- JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="html::JAVASCRIPT">\r
+                       <BEGIN>&lt;SCRIPT</BEGIN>\r
+                       <END>&lt;/SCRIPT&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="html::CSS">\r
+                       <BEGIN>&lt;STYLE</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+        \r
+        <!-- TPL markup start tags -->\r
+               <SPAN TYPE="KEYWORD3" DELEGATE="TPL">\r
+                       <BEGIN>{</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+       </RULES>\r
+    \r
+    <RULES SET="TPL" DEFAULT="KEYWORD1" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+       \r
+               <SPAN TYPE="LABEL">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LABEL">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               \r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+\r
+               \r
+               <KEYWORDS>\r
+                       <KEYWORD1>include</KEYWORD1>\r
+            <OPERATOR>=</OPERATOR>\r
+            <KEYWORD2>START</KEYWORD2>\r
+            <KEYWORD2>END</KEYWORD2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+    \r
+    <RULES SET="TAGS" DEFAULT="MARKUP" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/tsql.xml b/extra/xmode/modes/tsql.xml
new file mode 100644 (file)
index 0000000..ad4d151
--- /dev/null
@@ -0,0 +1,1013 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="--" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+\r
+               <MARK_PREVIOUS TYPE="FUNCTION"\r
+                       MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">!=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">!&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">::</SEQ>\r
+               <MARK_PREVIOUS TYPE="LABEL" AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+\r
+               <MARK_FOLLOWING TYPE="LITERAL2">@</MARK_FOLLOWING>\r
+\r
+               <KEYWORDS>\r
+                       <!-- reserved words -->\r
+                       <KEYWORD1>ABSOLUTE</KEYWORD1>\r
+                       <KEYWORD1>ADD</KEYWORD1>\r
+                       <KEYWORD1>ALTER</KEYWORD1>\r
+                       <KEYWORD1>ANSI_NULLS</KEYWORD1>\r
+                       <KEYWORD1>AS</KEYWORD1>\r
+                       <KEYWORD1>ASC</KEYWORD1>\r
+                       <KEYWORD1>AUTHORIZATION</KEYWORD1>\r
+                       <KEYWORD1>BACKUP</KEYWORD1>\r
+                       <KEYWORD1>BEGIN</KEYWORD1>\r
+                       <KEYWORD1>BREAK</KEYWORD1>\r
+                       <KEYWORD1>BROWSE</KEYWORD1>\r
+                       <KEYWORD1>BULK</KEYWORD1>\r
+                       <KEYWORD1>BY</KEYWORD1>\r
+                       <KEYWORD1>CASCADE</KEYWORD1>\r
+                       <KEYWORD1>CHECK</KEYWORD1>\r
+                       <KEYWORD1>CHECKPOINT</KEYWORD1>\r
+                       <KEYWORD1>CLOSE</KEYWORD1>\r
+                       <KEYWORD1>CLUSTERED</KEYWORD1>\r
+                       <KEYWORD1>COLUMN</KEYWORD1>\r
+                       <KEYWORD1>COMMIT</KEYWORD1>\r
+                       <KEYWORD1>COMMITTED</KEYWORD1>\r
+                       <KEYWORD1>COMPUTE</KEYWORD1>\r
+                       <KEYWORD1>CONFIRM</KEYWORD1>\r
+                       <KEYWORD1>CONSTRAINT</KEYWORD1>\r
+                       <KEYWORD1>CONTAINS</KEYWORD1>\r
+                       <KEYWORD1>CONTAINSTABLE</KEYWORD1>\r
+                       <KEYWORD1>CONTINUE</KEYWORD1>\r
+                       <KEYWORD1>CONTROLROW</KEYWORD1>\r
+                       <KEYWORD1>CREATE</KEYWORD1>\r
+                       <KEYWORD1>CURRENT</KEYWORD1>\r
+                       <KEYWORD1>CURRENT_DATE</KEYWORD1>\r
+                       <KEYWORD1>CURRENT_TIME</KEYWORD1>\r
+                       <KEYWORD1>CURSOR</KEYWORD1>\r
+                       <KEYWORD1>DATABASE</KEYWORD1>\r
+                       <KEYWORD1>DBCC</KEYWORD1>\r
+                       <KEYWORD1>DEALLOCATE</KEYWORD1>\r
+                       <KEYWORD1>DECLARE</KEYWORD1>\r
+                       <KEYWORD1>DEFAULT</KEYWORD1>\r
+                       <KEYWORD1>DELETE</KEYWORD1>\r
+                       <KEYWORD1>DENY</KEYWORD1>\r
+                       <KEYWORD1>DESC</KEYWORD1>\r
+                       <KEYWORD1>DISK</KEYWORD1>\r
+                       <KEYWORD1>DISTINCT</KEYWORD1>\r
+                       <KEYWORD1>DISTRIBUTED</KEYWORD1>\r
+                       <KEYWORD1>DOUBLE</KEYWORD1>\r
+                       <KEYWORD1>DROP</KEYWORD1>\r
+                       <KEYWORD1>DUMMY</KEYWORD1>\r
+                       <KEYWORD1>DUMP</KEYWORD1>\r
+                       <KEYWORD1>DYNAMIC</KEYWORD1>\r
+                       <KEYWORD1>ELSE</KEYWORD1>\r
+                       <KEYWORD1>END</KEYWORD1>\r
+                       <KEYWORD1>ERRLVL</KEYWORD1>\r
+                       <KEYWORD1>ERROREXIT</KEYWORD1>\r
+                       <KEYWORD1>ESCAPE</KEYWORD1>\r
+                       <KEYWORD1>EXCEPT</KEYWORD1>\r
+                       <KEYWORD1>EXEC</KEYWORD1>\r
+                       <KEYWORD1>EXECUTE</KEYWORD1>\r
+                       <KEYWORD1>EXIT</KEYWORD1>\r
+                       <KEYWORD1>FAST_FORWARD</KEYWORD1>\r
+                       <KEYWORD1>FETCH</KEYWORD1>\r
+                       <KEYWORD1>FILE</KEYWORD1>\r
+                       <KEYWORD1>FILLFACTOR</KEYWORD1>\r
+                       <KEYWORD1>FIRST</KEYWORD1>\r
+                       <KEYWORD1>FLOPPY</KEYWORD1>\r
+                       <KEYWORD1>FOR</KEYWORD1>\r
+                       <KEYWORD1>FOREIGN</KEYWORD1>\r
+                       <KEYWORD1>FORWARD_ONLY</KEYWORD1>\r
+                       <KEYWORD1>FREETEXT</KEYWORD1>\r
+                       <KEYWORD1>FREETEXTTABLE</KEYWORD1>\r
+                       <KEYWORD1>FROM</KEYWORD1>\r
+                       <KEYWORD1>FULL</KEYWORD1>\r
+                       <KEYWORD1>FUNCTION</KEYWORD1>\r
+                       <KEYWORD1>GLOBAL</KEYWORD1>\r
+                       <KEYWORD1>GOTO</KEYWORD1>\r
+                       <KEYWORD1>GRANT</KEYWORD1>\r
+                       <KEYWORD1>GROUP</KEYWORD1>\r
+                       <KEYWORD1>HAVING</KEYWORD1>\r
+                       <KEYWORD1>HOLDLOCK</KEYWORD1>\r
+                       <KEYWORD1>ID</KEYWORD1>\r
+                       <KEYWORD1>IDENTITYCOL</KEYWORD1>\r
+                       <KEYWORD1>IDENTITY_INSERT</KEYWORD1>\r
+                       <KEYWORD1>IF</KEYWORD1>\r
+                       <KEYWORD1>INDEX</KEYWORD1>\r
+                       <KEYWORD1>INNER</KEYWORD1>\r
+                       <KEYWORD1>INSENSITIVE</KEYWORD1>\r
+                       <KEYWORD1>INSERT</KEYWORD1>\r
+                       <KEYWORD1>INTO</KEYWORD1>\r
+                       <KEYWORD1>IS</KEYWORD1>\r
+                       <KEYWORD1>ISOLATION</KEYWORD1>\r
+                       <KEYWORD1>KEY</KEYWORD1>\r
+                       <KEYWORD1>KEYSET</KEYWORD1>\r
+                       <KEYWORD1>KILL</KEYWORD1>\r
+                       <KEYWORD1>LAST</KEYWORD1>\r
+                       <KEYWORD1>LEVEL</KEYWORD1>\r
+                       <KEYWORD1>LINENO</KEYWORD1>\r
+                       <KEYWORD1>LOAD</KEYWORD1>\r
+                       <KEYWORD1>LOCAL</KEYWORD1>\r
+                       <KEYWORD1>MAX</KEYWORD1>\r
+                       <KEYWORD1>MIN</KEYWORD1>\r
+                       <KEYWORD1>MIRROREXIT</KEYWORD1>\r
+                       <KEYWORD1>NATIONAL</KEYWORD1>\r
+                       <KEYWORD1>NEXT</KEYWORD1>\r
+                       <KEYWORD1>NOCHECK</KEYWORD1>\r
+                       <KEYWORD1>NONCLUSTERED</KEYWORD1>\r
+                       <KEYWORD1>OF</KEYWORD1>\r
+                       <KEYWORD1>OFF</KEYWORD1>\r
+                       <KEYWORD1>OFFSETS</KEYWORD1>\r
+                       <KEYWORD1>ON</KEYWORD1>\r
+                       <KEYWORD1>ONCE</KEYWORD1>\r
+                       <KEYWORD1>ONLY</KEYWORD1>\r
+                       <KEYWORD1>OPEN</KEYWORD1>\r
+                       <KEYWORD1>OPENDATASOURCE</KEYWORD1>\r
+                       <KEYWORD1>OPENQUERY</KEYWORD1>\r
+                       <KEYWORD1>OPENROWSET</KEYWORD1>\r
+                       <KEYWORD1>OPTIMISTIC</KEYWORD1>\r
+                       <KEYWORD1>OPTION</KEYWORD1>\r
+                       <KEYWORD1>ORDER</KEYWORD1>\r
+                       <KEYWORD1>OUTPUT</KEYWORD1>\r
+                       <KEYWORD1>OVER</KEYWORD1>\r
+                       <KEYWORD1>PERCENT</KEYWORD1>\r
+                       <KEYWORD1>PERM</KEYWORD1>\r
+                       <KEYWORD1>PERMANENT</KEYWORD1>\r
+                       <KEYWORD1>PIPE</KEYWORD1>\r
+                       <KEYWORD1>PLAN</KEYWORD1>\r
+                       <KEYWORD1>PRECISION</KEYWORD1>\r
+                       <KEYWORD1>PREPARE</KEYWORD1>\r
+                       <KEYWORD1>PRIMARY</KEYWORD1>\r
+                       <KEYWORD1>PRINT</KEYWORD1>\r
+                       <KEYWORD1>PRIOR</KEYWORD1>\r
+                       <KEYWORD1>PRIVILEGES</KEYWORD1>\r
+                       <KEYWORD1>PROC</KEYWORD1>\r
+                       <KEYWORD1>PROCEDURE</KEYWORD1>\r
+                       <KEYWORD1>PROCESSEXIT</KEYWORD1>\r
+                       <KEYWORD1>PUBLIC</KEYWORD1>\r
+                       <KEYWORD1>QUOTED_IDENTIFIER</KEYWORD1>\r
+                       <KEYWORD1>RAISERROR</KEYWORD1>\r
+                       <KEYWORD1>READ</KEYWORD1>\r
+                       <KEYWORD1>READTEXT</KEYWORD1>\r
+                       <KEYWORD1>READ_ONLY</KEYWORD1>\r
+                       <KEYWORD1>RECONFIGURE</KEYWORD1>\r
+                       <KEYWORD1>REFERENCES</KEYWORD1>\r
+                       <KEYWORD1>RELATIVE</KEYWORD1>\r
+                       <KEYWORD1>REPEATABLE</KEYWORD1>\r
+                       <KEYWORD1>REPLICATION</KEYWORD1>\r
+                       <KEYWORD1>RESTORE</KEYWORD1>\r
+                       <KEYWORD1>RESTRICT</KEYWORD1>\r
+                       <KEYWORD1>RETURN</KEYWORD1>\r
+                       <KEYWORD1>RETURNS</KEYWORD1>\r
+                       <KEYWORD1>REVOKE</KEYWORD1>\r
+                       <KEYWORD1>ROLLBACK</KEYWORD1>\r
+                       <KEYWORD1>ROWGUIDCOL</KEYWORD1>\r
+                       <KEYWORD1>RULE</KEYWORD1>\r
+                       <KEYWORD1>SAVE</KEYWORD1>\r
+                       <KEYWORD1>SCHEMA</KEYWORD1>\r
+                       <KEYWORD1>SCROLL</KEYWORD1>\r
+                       <KEYWORD1>SCROLL_LOCKS</KEYWORD1>\r
+                       <KEYWORD1>SELECT</KEYWORD1>\r
+                       <KEYWORD1>SERIALIZABLE</KEYWORD1>\r
+                       <KEYWORD1>SET</KEYWORD1>\r
+                       <KEYWORD1>SETUSER</KEYWORD1>\r
+                       <KEYWORD1>SHUTDOWN</KEYWORD1>\r
+                       <KEYWORD1>STATIC</KEYWORD1>\r
+                       <KEYWORD1>STATISTICS</KEYWORD1>\r
+                       <KEYWORD1>TABLE</KEYWORD1>\r
+                       <KEYWORD1>TAPE</KEYWORD1>\r
+                       <KEYWORD1>TEMP</KEYWORD1>\r
+                       <KEYWORD1>TEMPORARY</KEYWORD1>\r
+                       <KEYWORD1>TEXTIMAGE_ON</KEYWORD1>\r
+                       <KEYWORD1>THEN</KEYWORD1>\r
+                       <KEYWORD1>TO</KEYWORD1>\r
+                       <KEYWORD1>TOP</KEYWORD1>\r
+                       <KEYWORD1>TRAN</KEYWORD1>\r
+                       <KEYWORD1>TRANSACTION</KEYWORD1>\r
+                       <KEYWORD1>TRIGGER</KEYWORD1>\r
+                       <KEYWORD1>TRUNCATE</KEYWORD1>\r
+                       <KEYWORD1>TSEQUAL</KEYWORD1>\r
+                       <KEYWORD1>UNCOMMITTED</KEYWORD1>\r
+                       <KEYWORD1>UNION</KEYWORD1>\r
+                       <KEYWORD1>UNIQUE</KEYWORD1>\r
+                       <KEYWORD1>UPDATE</KEYWORD1>\r
+                       <KEYWORD1>UPDATETEXT</KEYWORD1>\r
+                       <KEYWORD1>USE</KEYWORD1>\r
+                       <KEYWORD1>VALUES</KEYWORD1>\r
+                       <KEYWORD1>VARYING</KEYWORD1>\r
+                       <KEYWORD1>VIEW</KEYWORD1>\r
+                       <KEYWORD1>WAITFOR</KEYWORD1>\r
+                       <KEYWORD1>WHEN</KEYWORD1>\r
+                       <KEYWORD1>WHERE</KEYWORD1>\r
+                       <KEYWORD1>WHILE</KEYWORD1>\r
+                       <KEYWORD1>WITH</KEYWORD1>\r
+                       <KEYWORD1>WORK</KEYWORD1>\r
+                       <KEYWORD1>WRITETEXT</KEYWORD1>\r
+\r
+                       <!-- data types -->\r
+                       <KEYWORD1>binary</KEYWORD1>\r
+                       <KEYWORD1>bit</KEYWORD1>\r
+                       <KEYWORD1>char</KEYWORD1>\r
+                       <KEYWORD1>character</KEYWORD1>\r
+                       <KEYWORD1>datetime</KEYWORD1>\r
+                       <KEYWORD1>decimal</KEYWORD1>\r
+                       <KEYWORD1>float</KEYWORD1>\r
+                       <KEYWORD1>image</KEYWORD1>\r
+                       <KEYWORD1>int</KEYWORD1>\r
+                       <KEYWORD1>integer</KEYWORD1>\r
+                       <KEYWORD1>money</KEYWORD1>\r
+                       <KEYWORD1>name</KEYWORD1>\r
+                       <KEYWORD1>numeric</KEYWORD1>\r
+                       <KEYWORD1>nchar</KEYWORD1>\r
+                       <KEYWORD1>nvarchar</KEYWORD1>\r
+                       <KEYWORD1>ntext</KEYWORD1>\r
+                       <KEYWORD1>real</KEYWORD1>\r
+                       <KEYWORD1>smalldatetime</KEYWORD1>\r
+                       <KEYWORD1>smallint</KEYWORD1>\r
+                       <KEYWORD1>smallmoney</KEYWORD1>\r
+                       <KEYWORD1>text</KEYWORD1>\r
+                       <KEYWORD1>timestamp</KEYWORD1>\r
+                       <KEYWORD1>tinyint</KEYWORD1>\r
+                       <KEYWORD1>uniqueidentifier</KEYWORD1>\r
+                       <KEYWORD1>varbinary</KEYWORD1>\r
+                       <KEYWORD1>varchar</KEYWORD1>\r
+\r
+                       <!-- system functions -->\r
+                       <KEYWORD2>@@CONNECTIONS</KEYWORD2>\r
+                       <KEYWORD2>@@CPU_BUSY</KEYWORD2>\r
+                       <KEYWORD2>@@CURSOR_ROWS</KEYWORD2>\r
+                       <KEYWORD2>@@DATEFIRST</KEYWORD2>\r
+                       <KEYWORD2>@@DBTS</KEYWORD2>\r
+                       <KEYWORD2>@@ERROR</KEYWORD2>\r
+                       <KEYWORD2>@@FETCH_STATUS</KEYWORD2>\r
+                       <KEYWORD2>@@IDENTITY</KEYWORD2>\r
+                       <KEYWORD2>@@IDLE</KEYWORD2>\r
+                       <KEYWORD2>@@IO_BUSY</KEYWORD2>\r
+                       <KEYWORD2>@@LANGID</KEYWORD2>\r
+                       <KEYWORD2>@@LANGUAGE</KEYWORD2>\r
+                       <KEYWORD2>@@LOCK_TIMEOUT</KEYWORD2>\r
+                       <KEYWORD2>@@MAX_CONNECTIONS</KEYWORD2>\r
+                       <KEYWORD2>@@MAX_PRECISION</KEYWORD2>\r
+                       <KEYWORD2>@@NESTLEVEL</KEYWORD2>\r
+                       <KEYWORD2>@@OPTIONS</KEYWORD2>\r
+                       <KEYWORD2>@@PACKET_ERRORS</KEYWORD2>\r
+                       <KEYWORD2>@@PACK_RECEIVED</KEYWORD2>\r
+                       <KEYWORD2>@@PACK_SENT</KEYWORD2>\r
+                       <KEYWORD2>@@PROCID</KEYWORD2>\r
+                       <KEYWORD2>@@REMSERVER</KEYWORD2>\r
+                       <KEYWORD2>@@ROWCOUNT</KEYWORD2>\r
+                       <KEYWORD2>@@SERVERNAME</KEYWORD2>\r
+                       <KEYWORD2>@@SERVICENAME</KEYWORD2>\r
+                       <KEYWORD2>@@SPID</KEYWORD2>\r
+                       <KEYWORD2>@@TEXTSIZE</KEYWORD2>\r
+                       <KEYWORD2>@@TIMETICKS</KEYWORD2>\r
+                       <KEYWORD2>@@TOTAL_ERRORS</KEYWORD2>\r
+                       <KEYWORD2>@@TOTAL_READ</KEYWORD2>\r
+                       <KEYWORD2>@@TOTAL_WRITE</KEYWORD2>\r
+                       <KEYWORD2>@@TRANCOUNT</KEYWORD2>\r
+                       <KEYWORD2>@@VERSION</KEYWORD2>\r
+                       <KEYWORD2>ABS</KEYWORD2>\r
+                       <KEYWORD2>ACOS</KEYWORD2>\r
+                       <KEYWORD2>APP_NAME</KEYWORD2>\r
+                       <KEYWORD2>ASCII</KEYWORD2>\r
+                       <KEYWORD2>ASIN</KEYWORD2>\r
+                       <KEYWORD2>ATAN</KEYWORD2>\r
+                       <KEYWORD2>ATN2</KEYWORD2>\r
+                       <KEYWORD2>AVG</KEYWORD2>\r
+                       <KEYWORD2>BINARY_CHECKSUM</KEYWORD2>\r
+                       <KEYWORD2>CASE</KEYWORD2>\r
+                       <KEYWORD2>CAST</KEYWORD2>\r
+                       <KEYWORD2>CEILING</KEYWORD2>\r
+                       <KEYWORD2>CHARINDEX</KEYWORD2>\r
+                       <KEYWORD2>CHECKSUM</KEYWORD2>\r
+                       <KEYWORD2>CHECKSUM_AGG</KEYWORD2>\r
+                       <KEYWORD2>COALESCE</KEYWORD2>\r
+                       <KEYWORD2>COLLATIONPROPERTY</KEYWORD2>\r
+                       <KEYWORD2>COLUMNPROPERTY</KEYWORD2>\r
+                       <KEYWORD2>COL_LENGTH</KEYWORD2>\r
+                       <KEYWORD2>COL_NAME</KEYWORD2>\r
+                       <KEYWORD2>CONVERT</KEYWORD2>\r
+                       <KEYWORD2>COS</KEYWORD2>\r
+                       <KEYWORD2>COT</KEYWORD2>\r
+                       <KEYWORD2>COUNT</KEYWORD2>\r
+                       <KEYWORD2>COUNT_BIG</KEYWORD2>\r
+                       <KEYWORD2>CURRENT_DATE</KEYWORD2>\r
+                       <KEYWORD2>CURRENT_TIME</KEYWORD2>\r
+                       <KEYWORD2>CURRENT_TIMESTAMP</KEYWORD2>\r
+                       <KEYWORD2>CURRENT_USER</KEYWORD2>\r
+                       <KEYWORD2>CURSOR_STATUS</KEYWORD2>\r
+                       <KEYWORD2>DATABASEPROPERTY</KEYWORD2>\r
+                       <KEYWORD2>DATALENGTH</KEYWORD2>\r
+                       <KEYWORD2>DATEADD</KEYWORD2>\r
+                       <KEYWORD2>DATEDIFF</KEYWORD2>\r
+                       <KEYWORD2>DATENAME</KEYWORD2>\r
+                       <KEYWORD2>DATEPART</KEYWORD2>\r
+                       <KEYWORD2>DAY</KEYWORD2>\r
+                       <KEYWORD2>DB_ID</KEYWORD2>\r
+                       <KEYWORD2>DB_NAME</KEYWORD2>\r
+                       <KEYWORD2>DEGREES</KEYWORD2>\r
+                       <KEYWORD2>DIFFERENCE</KEYWORD2>\r
+                       <KEYWORD2>EXP</KEYWORD2>\r
+                       <KEYWORD2>FILEGROUPPROPERTY</KEYWORD2>\r
+                       <KEYWORD2>FILEGROUP_ID</KEYWORD2>\r
+                       <KEYWORD2>FILEGROUP_NAME</KEYWORD2>\r
+                       <KEYWORD2>FILEPROPERTY</KEYWORD2>\r
+                       <KEYWORD2>FILE_ID</KEYWORD2>\r
+                       <KEYWORD2>FILE_NAME</KEYWORD2>\r
+                       <KEYWORD2>FLOOR</KEYWORD2>\r
+                       <KEYWORD2>FORMATMESSAGE</KEYWORD2>\r
+                       <KEYWORD2>FULLTEXTCATALOGPROPERTY</KEYWORD2>\r
+                       <KEYWORD2>FULLTEXTSERVICEPROPERTY</KEYWORD2>\r
+                       <KEYWORD2>GETANSINULL</KEYWORD2>\r
+                       <KEYWORD2>GETDATE</KEYWORD2>\r
+                       <KEYWORD2>GETUTCDATE</KEYWORD2>\r
+                       <KEYWORD2>GROUPING</KEYWORD2>\r
+                       <KEYWORD2>HOST_ID</KEYWORD2>\r
+                       <KEYWORD2>HOST_NAME</KEYWORD2>\r
+                       <KEYWORD2>IDENTITY</KEYWORD2>\r
+                       <KEYWORD2>IDENTITY_INSERT</KEYWORD2>\r
+                       <KEYWORD2>IDENT_CURRENT</KEYWORD2>\r
+                       <KEYWORD2>IDENT_INCR</KEYWORD2>\r
+                       <KEYWORD2>IDENT_SEED</KEYWORD2>\r
+                       <KEYWORD2>INDEXPROPERTY</KEYWORD2>\r
+                       <KEYWORD2>INDEX_COL</KEYWORD2>\r
+                       <KEYWORD2>ISDATE</KEYWORD2>\r
+                       <KEYWORD2>ISNULL</KEYWORD2>\r
+                       <KEYWORD2>ISNUMERIC</KEYWORD2>\r
+                       <KEYWORD2>IS_MEMBER</KEYWORD2>\r
+                       <KEYWORD2>IS_SRVROLEMEMBER</KEYWORD2>\r
+                       <KEYWORD2>LEFT</KEYWORD2>\r
+                       <KEYWORD2>LEN</KEYWORD2>\r
+                       <KEYWORD2>LOG10</KEYWORD2>\r
+                       <KEYWORD2>LOG</KEYWORD2>\r
+                       <KEYWORD2>LOWER</KEYWORD2>\r
+                       <KEYWORD2>LTRIM</KEYWORD2>\r
+                       <KEYWORD2>MONTH</KEYWORD2>\r
+                       <KEYWORD2>NEWID</KEYWORD2>\r
+                       <KEYWORD2>NULLIF</KEYWORD2>\r
+                       <KEYWORD2>OBJECTPROPERTY</KEYWORD2>\r
+                       <KEYWORD2>OBJECT_ID</KEYWORD2>\r
+                       <KEYWORD2>OBJECT_NAME</KEYWORD2>\r
+                       <KEYWORD2>PARSENAME</KEYWORD2>\r
+                       <KEYWORD2>PATINDEX</KEYWORD2>\r
+                       <KEYWORD2>PERMISSIONS</KEYWORD2>\r
+                       <KEYWORD2>PI</KEYWORD2>\r
+                       <KEYWORD2>POWER</KEYWORD2>\r
+                       <KEYWORD2>QUOTENAME</KEYWORD2>\r
+                       <KEYWORD2>RADIANS</KEYWORD2>\r
+                       <KEYWORD2>RAND</KEYWORD2>\r
+                       <KEYWORD2>REPLACE</KEYWORD2>\r
+                       <KEYWORD2>REPLICATE</KEYWORD2>\r
+                       <KEYWORD2>REVERSE</KEYWORD2>\r
+                       <KEYWORD2>RIGHT</KEYWORD2>\r
+                       <KEYWORD2>ROUND</KEYWORD2>\r
+                       <KEYWORD2>ROWCOUNT_BIG</KEYWORD2>\r
+                       <KEYWORD2>RTRIM</KEYWORD2>\r
+                       <KEYWORD2>SCOPE_IDENTITY</KEYWORD2>\r
+                       <KEYWORD2>SERVERPROPERTY</KEYWORD2>\r
+                       <KEYWORD2>SESSIONPROPERTY</KEYWORD2>\r
+                       <KEYWORD2>SESSION_USER</KEYWORD2>\r
+                       <KEYWORD2>SIGN</KEYWORD2>\r
+                       <KEYWORD2>SIN</KEYWORD2>\r
+                       <KEYWORD2>SOUNDEX</KEYWORD2>\r
+                       <KEYWORD2>SPACE</KEYWORD2>\r
+                       <KEYWORD2>SQRT</KEYWORD2>\r
+                       <KEYWORD2>SQUARE</KEYWORD2>\r
+                       <KEYWORD2>STATS_DATE</KEYWORD2>\r
+                       <KEYWORD2>STDEV</KEYWORD2>\r
+                       <KEYWORD2>STDEVP</KEYWORD2>\r
+                       <KEYWORD2>STR</KEYWORD2>\r
+                       <KEYWORD2>STUFF</KEYWORD2>\r
+                       <KEYWORD2>SUBSTRING</KEYWORD2>\r
+                       <KEYWORD2>SUM</KEYWORD2>\r
+                       <KEYWORD2>SUSER_ID</KEYWORD2>\r
+                       <KEYWORD2>SUSER_NAME</KEYWORD2>\r
+                       <KEYWORD2>SUSER_SID</KEYWORD2>\r
+                       <KEYWORD2>SUSER_SNAME</KEYWORD2>\r
+                       <KEYWORD2>SYSTEM_USER</KEYWORD2>\r
+                       <KEYWORD2>TAN</KEYWORD2>\r
+                       <KEYWORD2>TEXTPTR</KEYWORD2>\r
+                       <KEYWORD2>TEXTVALID</KEYWORD2>\r
+                       <KEYWORD2>TYPEPROPERTY</KEYWORD2>\r
+                       <KEYWORD2>UNICODE</KEYWORD2>\r
+                       <KEYWORD2>UPPER</KEYWORD2>\r
+                       <KEYWORD2>USER</KEYWORD2>\r
+                       <KEYWORD2>USER_ID</KEYWORD2>\r
+                       <KEYWORD2>USER_NAME</KEYWORD2>\r
+                       <KEYWORD2>VAR</KEYWORD2>\r
+                       <KEYWORD2>VARP</KEYWORD2>\r
+                       <KEYWORD2>YEAR</KEYWORD2>\r
+\r
+                       <!-- operators -->\r
+                       <KEYWORD1>ALL</KEYWORD1>\r
+                       <KEYWORD1>AND</KEYWORD1>\r
+                       <KEYWORD1>ANY</KEYWORD1>\r
+                       <KEYWORD1>BETWEEN</KEYWORD1>\r
+                       <KEYWORD1>CROSS</KEYWORD1>\r
+                       <KEYWORD1>EXISTS</KEYWORD1>\r
+                       <KEYWORD1>IN</KEYWORD1>\r
+                       <KEYWORD1>INTERSECT</KEYWORD1>\r
+                       <KEYWORD1>JOIN</KEYWORD1>\r
+                       <KEYWORD1>LIKE</KEYWORD1>\r
+                       <KEYWORD1>NOT</KEYWORD1>\r
+                       <KEYWORD1>NULL</KEYWORD1>\r
+                       <KEYWORD1>OR</KEYWORD1>\r
+                       <KEYWORD1>OUTER</KEYWORD1>\r
+                       <KEYWORD1>SOME</KEYWORD1>\r
+\r
+                       <!-- SQL Server 7.0 system stored procedures -->\r
+                       <KEYWORD3>sp_add_agent_parameter</KEYWORD3>\r
+                       <KEYWORD3>sp_add_agent_profile</KEYWORD3>\r
+                       <KEYWORD3>sp_add_alert</KEYWORD3>\r
+                       <KEYWORD3>sp_add_category</KEYWORD3>\r
+                       <KEYWORD3>sp_add_data_file_recover_suspect_db</KEYWORD3>\r
+                       <KEYWORD3>sp_add_job</KEYWORD3>\r
+                       <KEYWORD3>sp_add_jobschedule</KEYWORD3>\r
+                       <KEYWORD3>sp_add_jobserver</KEYWORD3>\r
+                       <KEYWORD3>sp_add_jobstep</KEYWORD3>\r
+                       <KEYWORD3>sp_add_log_file_recover_suspect_db</KEYWORD3>\r
+                       <KEYWORD3>sp_add_notification</KEYWORD3>\r
+                       <KEYWORD3>sp_add_operator</KEYWORD3>\r
+                       <KEYWORD3>sp_add_targetservergroup</KEYWORD3>\r
+                       <KEYWORD3>sp_add_targetsvrgrp_member</KEYWORD3>\r
+                       <KEYWORD3>sp_addalias</KEYWORD3>\r
+                       <KEYWORD3>sp_addapprole</KEYWORD3>\r
+                       <KEYWORD3>sp_addarticle</KEYWORD3>\r
+                       <KEYWORD3>sp_adddistpublisher</KEYWORD3>\r
+                       <KEYWORD3>sp_adddistributiondb</KEYWORD3>\r
+                       <KEYWORD3>sp_adddistributor</KEYWORD3>\r
+                       <KEYWORD3>sp_addextendedproc</KEYWORD3>\r
+                       <KEYWORD3>sp_addgroup</KEYWORD3>\r
+                       <KEYWORD3>sp_addlinkedserver</KEYWORD3>\r
+                       <KEYWORD3>sp_addlinkedsrvlogin</KEYWORD3>\r
+                       <KEYWORD3>sp_addlinkedsrvlogin</KEYWORD3>\r
+                       <KEYWORD3>sp_addlogin</KEYWORD3>\r
+                       <KEYWORD3>sp_addmergearticle</KEYWORD3>\r
+                       <KEYWORD3>sp_addmergefilter</KEYWORD3>\r
+                       <KEYWORD3>sp_addmergepublication</KEYWORD3>\r
+                       <KEYWORD3>sp_addmergepullsubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_addmergepullsubscription_agent</KEYWORD3>\r
+                       <KEYWORD3>sp_addmergesubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_addmessage</KEYWORD3>\r
+                       <KEYWORD3>sp_addpublication</KEYWORD3>\r
+                       <KEYWORD3>sp_addpublication_snapshot</KEYWORD3>\r
+                       <KEYWORD3>sp_addpublisher70</KEYWORD3>\r
+                       <KEYWORD3>sp_addpullsubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_addpullsubscription_agent</KEYWORD3>\r
+                       <KEYWORD3>sp_addremotelogin</KEYWORD3>\r
+                       <KEYWORD3>sp_addrole</KEYWORD3>\r
+                       <KEYWORD3>sp_addrolemember</KEYWORD3>\r
+                       <KEYWORD3>sp_addserver</KEYWORD3>\r
+                       <KEYWORD3>sp_addsrvrolemember</KEYWORD3>\r
+                       <KEYWORD3>sp_addsubscriber</KEYWORD3>\r
+                       <KEYWORD3>sp_addsubscriber_schedule</KEYWORD3>\r
+                       <KEYWORD3>sp_addsubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_addsynctriggers</KEYWORD3>\r
+                       <KEYWORD3>sp_addtabletocontents</KEYWORD3>\r
+                       <KEYWORD3>sp_addtask</KEYWORD3>\r
+                       <KEYWORD3>sp_addtype</KEYWORD3>\r
+                       <KEYWORD3>sp_addumpdevice</KEYWORD3>\r
+                       <KEYWORD3>sp_adduser</KEYWORD3>\r
+                       <KEYWORD3>sp_altermessage</KEYWORD3>\r
+                       <KEYWORD3>sp_apply_job_to_targets</KEYWORD3>\r
+                       <KEYWORD3>sp_approlepassword</KEYWORD3>\r
+                       <KEYWORD3>sp_article_validation</KEYWORD3>\r
+                       <KEYWORD3>sp_articlecolumn</KEYWORD3>\r
+                       <KEYWORD3>sp_articlefilter</KEYWORD3>\r
+                       <KEYWORD3>sp_articlesynctranprocs</KEYWORD3>\r
+                       <KEYWORD3>sp_articleview</KEYWORD3>\r
+                       <KEYWORD3>sp_attach_db</KEYWORD3>\r
+                       <KEYWORD3>sp_attach_single_file_db</KEYWORD3>\r
+                       <KEYWORD3>sp_autostats</KEYWORD3>\r
+                       <KEYWORD3>sp_bindefault</KEYWORD3>\r
+                       <KEYWORD3>sp_bindrule</KEYWORD3>\r
+                       <KEYWORD3>sp_bindsession</KEYWORD3>\r
+                       <KEYWORD3>sp_browsereplcmds</KEYWORD3>\r
+                       <KEYWORD3>sp_catalogs</KEYWORD3>\r
+                       <KEYWORD3>sp_certify_removable</KEYWORD3>\r
+                       <KEYWORD3>sp_change_agent_parameter</KEYWORD3>\r
+                       <KEYWORD3>sp_change_agent_profile</KEYWORD3>\r
+                       <KEYWORD3>sp_change_subscription_properties</KEYWORD3>\r
+                       <KEYWORD3>sp_change_users_login</KEYWORD3>\r
+                       <KEYWORD3>sp_changearticle</KEYWORD3>\r
+                       <KEYWORD3>sp_changedbowner</KEYWORD3>\r
+                       <KEYWORD3>sp_changedistpublisher</KEYWORD3>\r
+                       <KEYWORD3>sp_changedistributiondb</KEYWORD3>\r
+                       <KEYWORD3>sp_changedistributor_password</KEYWORD3>\r
+                       <KEYWORD3>sp_changedistributor_property</KEYWORD3>\r
+                       <KEYWORD3>sp_changegroup</KEYWORD3>\r
+                       <KEYWORD3>sp_changemergearticle</KEYWORD3>\r
+                       <KEYWORD3>sp_changemergefilter</KEYWORD3>\r
+                       <KEYWORD3>sp_changemergepublication</KEYWORD3>\r
+                       <KEYWORD3>sp_changemergepullsubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_changemergesubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_changeobjectowner</KEYWORD3>\r
+                       <KEYWORD3>sp_changepublication</KEYWORD3>\r
+                       <KEYWORD3>sp_changesubscriber</KEYWORD3>\r
+                       <KEYWORD3>sp_changesubscriber_schedule</KEYWORD3>\r
+                       <KEYWORD3>sp_changesubstatus</KEYWORD3>\r
+                       <KEYWORD3>sp_check_for_sync_trigger</KEYWORD3>\r
+                       <KEYWORD3>sp_column_privileges</KEYWORD3>\r
+                       <KEYWORD3>sp_column_privileges_ex</KEYWORD3>\r
+                       <KEYWORD3>sp_columns</KEYWORD3>\r
+                       <KEYWORD3>sp_columns_ex</KEYWORD3>\r
+                       <KEYWORD3>sp_configure</KEYWORD3>\r
+                       <KEYWORD3>sp_create_removable</KEYWORD3>\r
+                       <KEYWORD3>sp_createorphan</KEYWORD3>\r
+                       <KEYWORD3>sp_createstats</KEYWORD3>\r
+                       <KEYWORD3>sp_cursor</KEYWORD3>\r
+                       <KEYWORD3>sp_cursor_list</KEYWORD3>\r
+                       <KEYWORD3>sp_cursorclose</KEYWORD3>\r
+                       <KEYWORD3>sp_cursorexecute</KEYWORD3>\r
+                       <KEYWORD3>sp_cursorfetch</KEYWORD3>\r
+                       <KEYWORD3>sp_cursoropen</KEYWORD3>\r
+                       <KEYWORD3>sp_cursoroption</KEYWORD3>\r
+                       <KEYWORD3>sp_cursorprepare</KEYWORD3>\r
+                       <KEYWORD3>sp_cursorunprepare</KEYWORD3>\r
+                       <KEYWORD3>sp_cycle_errorlog</KEYWORD3>\r
+                       <KEYWORD3>sp_databases</KEYWORD3>\r
+                       <KEYWORD3>sp_datatype_info</KEYWORD3>\r
+                       <KEYWORD3>sp_dbcmptlevel</KEYWORD3>\r
+                       <KEYWORD3>sp_dbfixedrolepermission</KEYWORD3>\r
+                       <KEYWORD3>sp_dboption</KEYWORD3>\r
+                       <KEYWORD3>sp_defaultdb</KEYWORD3>\r
+                       <KEYWORD3>sp_defaultlanguage</KEYWORD3>\r
+                       <KEYWORD3>sp_delete_alert</KEYWORD3>\r
+                       <KEYWORD3>sp_delete_backuphistory</KEYWORD3>\r
+                       <KEYWORD3>sp_delete_category</KEYWORD3>\r
+                       <KEYWORD3>sp_delete_job</KEYWORD3>\r
+                       <KEYWORD3>sp_delete_jobschedule</KEYWORD3>\r
+                       <KEYWORD3>sp_delete_jobserver</KEYWORD3>\r
+                       <KEYWORD3>sp_delete_jobstep</KEYWORD3>\r
+                       <KEYWORD3>sp_delete_notification</KEYWORD3>\r
+                       <KEYWORD3>sp_delete_operator</KEYWORD3>\r
+                       <KEYWORD3>sp_delete_targetserver</KEYWORD3>\r
+                       <KEYWORD3>sp_delete_targetservergroup</KEYWORD3>\r
+                       <KEYWORD3>sp_delete_targetsvrgrp_member</KEYWORD3>\r
+                       <KEYWORD3>sp_deletemergeconflictrow</KEYWORD3>\r
+                       <KEYWORD3>sp_denylogin</KEYWORD3>\r
+                       <KEYWORD3>sp_depends</KEYWORD3>\r
+                       <KEYWORD3>sp_describe_cursor</KEYWORD3>\r
+                       <KEYWORD3>sp_describe_cursor_columns</KEYWORD3>\r
+                       <KEYWORD3>sp_describe_cursor_tables</KEYWORD3>\r
+                       <KEYWORD3>sp_detach_db</KEYWORD3>\r
+                       <KEYWORD3>sp_drop_agent_parameter</KEYWORD3>\r
+                       <KEYWORD3>sp_drop_agent_profile</KEYWORD3>\r
+                       <KEYWORD3>sp_dropalias</KEYWORD3>\r
+                       <KEYWORD3>sp_dropapprole</KEYWORD3>\r
+                       <KEYWORD3>sp_droparticle</KEYWORD3>\r
+                       <KEYWORD3>sp_dropdevice</KEYWORD3>\r
+                       <KEYWORD3>sp_dropdistpublisher</KEYWORD3>\r
+                       <KEYWORD3>sp_dropdistributiondb</KEYWORD3>\r
+                       <KEYWORD3>sp_dropdistributor</KEYWORD3>\r
+                       <KEYWORD3>sp_dropextendedproc</KEYWORD3>\r
+                       <KEYWORD3>sp_dropgroup</KEYWORD3>\r
+                       <KEYWORD3>sp_droplinkedsrvlogin</KEYWORD3>\r
+                       <KEYWORD3>sp_droplinkedsrvlogin</KEYWORD3>\r
+                       <KEYWORD3>sp_droplogin</KEYWORD3>\r
+                       <KEYWORD3>sp_dropmergearticle</KEYWORD3>\r
+                       <KEYWORD3>sp_dropmergefilter</KEYWORD3>\r
+                       <KEYWORD3>sp_dropmergepublication</KEYWORD3>\r
+                       <KEYWORD3>sp_dropmergepullsubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_dropmergesubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_dropmessage</KEYWORD3>\r
+                       <KEYWORD3>sp_droporphans</KEYWORD3>\r
+                       <KEYWORD3>sp_droppublication</KEYWORD3>\r
+                       <KEYWORD3>sp_droppullsubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_dropremotelogin</KEYWORD3>\r
+                       <KEYWORD3>sp_droprole</KEYWORD3>\r
+                       <KEYWORD3>sp_droprolemember</KEYWORD3>\r
+                       <KEYWORD3>sp_dropserver</KEYWORD3>\r
+                       <KEYWORD3>sp_dropsrvrolemember</KEYWORD3>\r
+                       <KEYWORD3>sp_dropsubscriber</KEYWORD3>\r
+                       <KEYWORD3>sp_dropsubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_droptask</KEYWORD3>\r
+                       <KEYWORD3>sp_droptype</KEYWORD3>\r
+                       <KEYWORD3>sp_dropuser</KEYWORD3>\r
+                       <KEYWORD3>sp_dropwebtask</KEYWORD3>\r
+                       <KEYWORD3>sp_dsninfo</KEYWORD3>\r
+                       <KEYWORD3>sp_dumpparamcmd</KEYWORD3>\r
+                       <KEYWORD3>sp_enumcodepages</KEYWORD3>\r
+                       <KEYWORD3>sp_enumcustomresolvers</KEYWORD3>\r
+                       <KEYWORD3>sp_enumdsn</KEYWORD3>\r
+                       <KEYWORD3>sp_enumfullsubscribers</KEYWORD3>\r
+                       <KEYWORD3>sp_execute</KEYWORD3>\r
+                       <KEYWORD3>sp_executesql</KEYWORD3>\r
+                       <KEYWORD3>sp_expired_subscription_cleanup</KEYWORD3>\r
+                       <KEYWORD3>sp_fkeys</KEYWORD3>\r
+                       <KEYWORD3>sp_foreignkeys</KEYWORD3>\r
+                       <KEYWORD3>sp_fulltext_catalog</KEYWORD3>\r
+                       <KEYWORD3>sp_fulltext_column</KEYWORD3>\r
+                       <KEYWORD3>sp_fulltext_database</KEYWORD3>\r
+                       <KEYWORD3>sp_fulltext_service</KEYWORD3>\r
+                       <KEYWORD3>sp_fulltext_table</KEYWORD3>\r
+                       <KEYWORD3>sp_generatefilters</KEYWORD3>\r
+                       <KEYWORD3>sp_get_distributor</KEYWORD3>\r
+                       <KEYWORD3>sp_getbindtoken</KEYWORD3>\r
+                       <KEYWORD3>sp_getmergedeletetype</KEYWORD3>\r
+                       <KEYWORD3>sp_grant_publication_access</KEYWORD3>\r
+                       <KEYWORD3>sp_grantdbaccess</KEYWORD3>\r
+                       <KEYWORD3>sp_grantlogin</KEYWORD3>\r
+                       <KEYWORD3>sp_help</KEYWORD3>\r
+                       <KEYWORD3>sp_help_agent_default</KEYWORD3>\r
+                       <KEYWORD3>sp_help_agent_parameter</KEYWORD3>\r
+                       <KEYWORD3>sp_help_agent_profile</KEYWORD3>\r
+                       <KEYWORD3>sp_help_alert</KEYWORD3>\r
+                       <KEYWORD3>sp_help_category</KEYWORD3>\r
+                       <KEYWORD3>sp_help_downloadlist</KEYWORD3>\r
+                       <KEYWORD3>sp_help_fulltext_catalogs</KEYWORD3>\r
+                       <KEYWORD3>sp_help_fulltext_catalogs_cursor</KEYWORD3>\r
+                       <KEYWORD3>sp_help_fulltext_columns</KEYWORD3>\r
+                       <KEYWORD3>sp_help_fulltext_columns_cursor</KEYWORD3>\r
+                       <KEYWORD3>sp_help_fulltext_tables</KEYWORD3>\r
+                       <KEYWORD3>sp_help_fulltext_tables_cursor</KEYWORD3>\r
+                       <KEYWORD3>sp_help_job</KEYWORD3>\r
+                       <KEYWORD3>sp_help_jobhistory</KEYWORD3>\r
+                       <KEYWORD3>sp_help_jobschedule</KEYWORD3>\r
+                       <KEYWORD3>sp_help_jobserver</KEYWORD3>\r
+                       <KEYWORD3>sp_help_jobstep</KEYWORD3>\r
+                       <KEYWORD3>sp_help_notification</KEYWORD3>\r
+                       <KEYWORD3>sp_help_operator</KEYWORD3>\r
+                       <KEYWORD3>sp_help_publication_access</KEYWORD3>\r
+                       <KEYWORD3>sp_help_targetserver</KEYWORD3>\r
+                       <KEYWORD3>sp_help_targetservergroup</KEYWORD3>\r
+                       <KEYWORD3>sp_helparticle</KEYWORD3>\r
+                       <KEYWORD3>sp_helparticlecolumns</KEYWORD3>\r
+                       <KEYWORD3>sp_helpconstraint</KEYWORD3>\r
+                       <KEYWORD3>sp_helpdb</KEYWORD3>\r
+                       <KEYWORD3>sp_helpdbfixedrole</KEYWORD3>\r
+                       <KEYWORD3>sp_helpdevice</KEYWORD3>\r
+                       <KEYWORD3>sp_helpdistpublisher</KEYWORD3>\r
+                       <KEYWORD3>sp_helpdistributiondb</KEYWORD3>\r
+                       <KEYWORD3>sp_helpdistributor</KEYWORD3>\r
+                       <KEYWORD3>sp_helpextendedproc</KEYWORD3>\r
+                       <KEYWORD3>sp_helpfile</KEYWORD3>\r
+                       <KEYWORD3>sp_helpfilegroup</KEYWORD3>\r
+                       <KEYWORD3>sp_helpgroup</KEYWORD3>\r
+                       <KEYWORD3>sp_helphistory</KEYWORD3>\r
+                       <KEYWORD3>sp_helpindex</KEYWORD3>\r
+                       <KEYWORD3>sp_helplanguage</KEYWORD3>\r
+                       <KEYWORD3>sp_helplinkedsrvlogin</KEYWORD3>\r
+                       <KEYWORD3>sp_helplogins</KEYWORD3>\r
+                       <KEYWORD3>sp_helpmergearticle</KEYWORD3>\r
+                       <KEYWORD3>sp_helpmergearticleconflicts</KEYWORD3>\r
+                       <KEYWORD3>sp_helpmergeconflictrows</KEYWORD3>\r
+                       <KEYWORD3>sp_helpmergedeleteconflictrows</KEYWORD3>\r
+                       <KEYWORD3>sp_helpmergefilter</KEYWORD3>\r
+                       <KEYWORD3>sp_helpmergepublication</KEYWORD3>\r
+                       <KEYWORD3>sp_helpmergepullsubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_helpmergesubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_helpntgroup</KEYWORD3>\r
+                       <KEYWORD3>sp_helppublication</KEYWORD3>\r
+                       <KEYWORD3>sp_helppullsubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_helpremotelogin</KEYWORD3>\r
+                       <KEYWORD3>sp_helpreplicationdboption</KEYWORD3>\r
+                       <KEYWORD3>sp_helprole</KEYWORD3>\r
+                       <KEYWORD3>sp_helprolemember</KEYWORD3>\r
+                       <KEYWORD3>sp_helprotect</KEYWORD3>\r
+                       <KEYWORD3>sp_helpserver</KEYWORD3>\r
+                       <KEYWORD3>sp_helpsort</KEYWORD3>\r
+                       <KEYWORD3>sp_helpsrvrole</KEYWORD3>\r
+                       <KEYWORD3>sp_helpsrvrolemember</KEYWORD3>\r
+                       <KEYWORD3>sp_helpsubscriberinfo</KEYWORD3>\r
+                       <KEYWORD3>sp_helpsubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_helpsubscription_properties</KEYWORD3>\r
+                       <KEYWORD3>sp_helptask</KEYWORD3>\r
+                       <KEYWORD3>sp_helptext</KEYWORD3>\r
+                       <KEYWORD3>sp_helptrigger</KEYWORD3>\r
+                       <KEYWORD3>sp_helpuser</KEYWORD3>\r
+                       <KEYWORD3>sp_indexes</KEYWORD3>\r
+                       <KEYWORD3>sp_indexoption</KEYWORD3>\r
+                       <KEYWORD3>sp_link_publication</KEYWORD3>\r
+                       <KEYWORD3>sp_linkedservers</KEYWORD3>\r
+                       <KEYWORD3>sp_lock</KEYWORD3>\r
+                       <KEYWORD3>sp_makewebtask</KEYWORD3>\r
+                       <KEYWORD3>sp_manage_jobs_by_login</KEYWORD3>\r
+                       <KEYWORD3>sp_mergedummyupdate</KEYWORD3>\r
+                       <KEYWORD3>sp_mergesubscription_cleanup</KEYWORD3>\r
+                       <KEYWORD3>sp_monitor</KEYWORD3>\r
+                       <KEYWORD3>sp_msx_defect</KEYWORD3>\r
+                       <KEYWORD3>sp_msx_enlist</KEYWORD3>\r
+                       <KEYWORD3>sp_OACreate</KEYWORD3>\r
+                       <KEYWORD3>sp_OADestroy</KEYWORD3>\r
+                       <KEYWORD3>sp_OAGetErrorInfo</KEYWORD3>\r
+                       <KEYWORD3>sp_OAGetProperty</KEYWORD3>\r
+                       <KEYWORD3>sp_OAMethod</KEYWORD3>\r
+                       <KEYWORD3>sp_OASetProperty</KEYWORD3>\r
+                       <KEYWORD3>sp_OAStop</KEYWORD3>\r
+                       <KEYWORD3>sp_password</KEYWORD3>\r
+                       <KEYWORD3>sp_pkeys</KEYWORD3>\r
+                       <KEYWORD3>sp_post_msx_operation</KEYWORD3>\r
+                       <KEYWORD3>sp_prepare</KEYWORD3>\r
+                       <KEYWORD3>sp_primarykeys</KEYWORD3>\r
+                       <KEYWORD3>sp_processmail</KEYWORD3>\r
+                       <KEYWORD3>sp_procoption</KEYWORD3>\r
+                       <KEYWORD3>sp_publication_validation</KEYWORD3>\r
+                       <KEYWORD3>sp_purge_jobhistory</KEYWORD3>\r
+                       <KEYWORD3>sp_purgehistory</KEYWORD3>\r
+                       <KEYWORD3>sp_reassigntask</KEYWORD3>\r
+                       <KEYWORD3>sp_recompile</KEYWORD3>\r
+                       <KEYWORD3>sp_refreshsubscriptions</KEYWORD3>\r
+                       <KEYWORD3>sp_refreshview</KEYWORD3>\r
+                       <KEYWORD3>sp_reinitmergepullsubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_reinitmergesubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_reinitpullsubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_reinitsubscription</KEYWORD3>\r
+                       <KEYWORD3>sp_remoteoption</KEYWORD3>\r
+                       <KEYWORD3>sp_remove_job_from_targets</KEYWORD3>\r
+                       <KEYWORD3>sp_removedbreplication</KEYWORD3>\r
+                       <KEYWORD3>sp_rename</KEYWORD3>\r
+                       <KEYWORD3>sp_renamedb</KEYWORD3>\r
+                       <KEYWORD3>sp_replcmds</KEYWORD3>\r
+                       <KEYWORD3>sp_replcounters</KEYWORD3>\r
+                       <KEYWORD3>sp_repldone</KEYWORD3>\r
+                       <KEYWORD3>sp_replflush</KEYWORD3>\r
+                       <KEYWORD3>sp_replication_agent_checkup</KEYWORD3>\r
+                       <KEYWORD3>sp_replicationdboption</KEYWORD3>\r
+                       <KEYWORD3>sp_replsetoriginator</KEYWORD3>\r
+                       <KEYWORD3>sp_replshowcmds</KEYWORD3>\r
+                       <KEYWORD3>sp_repltrans</KEYWORD3>\r
+                       <KEYWORD3>sp_reset_connection</KEYWORD3>\r
+                       <KEYWORD3>sp_resync_targetserver</KEYWORD3>\r
+                       <KEYWORD3>sp_revoke_publication_access</KEYWORD3>\r
+                       <KEYWORD3>sp_revokedbaccess</KEYWORD3>\r
+                       <KEYWORD3>sp_revokelogin</KEYWORD3>\r
+                       <KEYWORD3>sp_runwebtask</KEYWORD3>\r
+                       <KEYWORD3>sp_script_synctran_commands</KEYWORD3>\r
+                       <KEYWORD3>sp_scriptdelproc</KEYWORD3>\r
+                       <KEYWORD3>sp_scriptinsproc</KEYWORD3>\r
+                       <KEYWORD3>sp_scriptmappedupdproc</KEYWORD3>\r
+                       <KEYWORD3>sp_scriptupdproc</KEYWORD3>\r
+                       <KEYWORD3>sp_sdidebug</KEYWORD3>\r
+                       <KEYWORD3>sp_server_info</KEYWORD3>\r
+                       <KEYWORD3>sp_serveroption</KEYWORD3>\r
+                       <KEYWORD3>sp_serveroption</KEYWORD3>\r
+                       <KEYWORD3>sp_setapprole</KEYWORD3>\r
+                       <KEYWORD3>sp_setnetname</KEYWORD3>\r
+                       <KEYWORD3>sp_spaceused</KEYWORD3>\r
+                       <KEYWORD3>sp_special_columns</KEYWORD3>\r
+                       <KEYWORD3>sp_sproc_columns</KEYWORD3>\r
+                       <KEYWORD3>sp_srvrolepermission</KEYWORD3>\r
+                       <KEYWORD3>sp_start_job</KEYWORD3>\r
+                       <KEYWORD3>sp_statistics</KEYWORD3>\r
+                       <KEYWORD3>sp_stop_job</KEYWORD3>\r
+                       <KEYWORD3>sp_stored_procedures</KEYWORD3>\r
+                       <KEYWORD3>sp_subscription_cleanup</KEYWORD3>\r
+                       <KEYWORD3>sp_table_privileges</KEYWORD3>\r
+                       <KEYWORD3>sp_table_privileges_ex</KEYWORD3>\r
+                       <KEYWORD3>sp_table_validation</KEYWORD3>\r
+                       <KEYWORD3>sp_tableoption</KEYWORD3>\r
+                       <KEYWORD3>sp_tables</KEYWORD3>\r
+                       <KEYWORD3>sp_tables_ex</KEYWORD3>\r
+                       <KEYWORD3>sp_unbindefault</KEYWORD3>\r
+                       <KEYWORD3>sp_unbindrule</KEYWORD3>\r
+                       <KEYWORD3>sp_unprepare</KEYWORD3>\r
+                       <KEYWORD3>sp_update_agent_profile</KEYWORD3>\r
+                       <KEYWORD3>sp_update_alert</KEYWORD3>\r
+                       <KEYWORD3>sp_update_category</KEYWORD3>\r
+                       <KEYWORD3>sp_update_job</KEYWORD3>\r
+                       <KEYWORD3>sp_update_jobschedule</KEYWORD3>\r
+                       <KEYWORD3>sp_update_jobstep</KEYWORD3>\r
+                       <KEYWORD3>sp_update_notification</KEYWORD3>\r
+                       <KEYWORD3>sp_update_operator</KEYWORD3>\r
+                       <KEYWORD3>sp_update_targetservergroup</KEYWORD3>\r
+                       <KEYWORD3>sp_updatestats</KEYWORD3>\r
+                       <KEYWORD3>sp_updatetask</KEYWORD3>\r
+                       <KEYWORD3>sp_validatelogins</KEYWORD3>\r
+                       <KEYWORD3>sp_validname</KEYWORD3>\r
+                       <KEYWORD3>sp_who</KEYWORD3>\r
+                       <KEYWORD3>xp_cmdshell</KEYWORD3>\r
+                       <KEYWORD3>xp_deletemail</KEYWORD3>\r
+                       <KEYWORD3>xp_enumgroups</KEYWORD3>\r
+                       <KEYWORD3>xp_findnextmsg</KEYWORD3>\r
+                       <KEYWORD3>xp_findnextmsg</KEYWORD3>\r
+                       <KEYWORD3>xp_grantlogin</KEYWORD3>\r
+                       <KEYWORD3>xp_logevent</KEYWORD3>\r
+                       <KEYWORD3>xp_loginconfig</KEYWORD3>\r
+                       <KEYWORD3>xp_logininfo</KEYWORD3>\r
+                       <KEYWORD3>xp_msver</KEYWORD3>\r
+                       <KEYWORD3>xp_readmail</KEYWORD3>\r
+                       <KEYWORD3>xp_revokelogin</KEYWORD3>\r
+                       <KEYWORD3>xp_sendmail</KEYWORD3>\r
+                       <KEYWORD3>xp_sprintf</KEYWORD3>\r
+                       <KEYWORD3>xp_sqlinventory</KEYWORD3>\r
+                       <KEYWORD3>xp_sqlmaint</KEYWORD3>\r
+                       <KEYWORD3>xp_sqltrace</KEYWORD3>\r
+                       <KEYWORD3>xp_sscanf</KEYWORD3>\r
+                       <KEYWORD3>xp_startmail</KEYWORD3>\r
+                       <KEYWORD3>xp_stopmail</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_addnewqueue</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_deletequeuedefinition</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_destroyqueue</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_enumqueuedefname</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_enumqueuehandles</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_eventclassrequired</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_flushqueryhistory</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_generate_event</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getappfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getconnectionidfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getcpufilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getdbidfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getdurationfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_geteventfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_geteventnames</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getevents</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_gethostfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_gethpidfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getindidfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getntdmfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getntnmfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getobjidfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getqueueautostart</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getqueuedestination</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getqueueproperties</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getreadfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getserverfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getseverityfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getspidfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getsysobjectsfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_gettextfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getuserfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_getwritefilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_loadqueuedefinition</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_pausequeue</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_restartqueue</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_savequeuedefinition</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setappfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setconnectionidfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setcpufilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setdbidfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setdurationfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_seteventclassrequired</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_seteventfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_sethostfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_sethpidfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setindidfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setntdmfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setntnmfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setobjidfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setqueryhistory</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setqueueautostart</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setqueuecreateinfo</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setqueuedestination</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setreadfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setserverfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setseverityfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setspidfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setsysobjectsfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_settextfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setuserfilter</KEYWORD3>\r
+                       <KEYWORD3>xp_trace_setwritefilter</KEYWORD3>\r
+                       <KEYWORD3>fn_helpcollations</KEYWORD3>\r
+                       <KEYWORD3>fn_servershareddrives</KEYWORD3>\r
+                       <KEYWORD3>fn_virtualfilestats</KEYWORD3>\r
+\r
+                       <!-- SQL Server 7.0 system tables -->\r
+                       <KEYWORD3>backupfile</KEYWORD3>\r
+                       <KEYWORD3>backupmediafamily</KEYWORD3>\r
+                       <KEYWORD3>backupmediaset</KEYWORD3>\r
+                       <KEYWORD3>backupset</KEYWORD3>\r
+                       <KEYWORD3>MSagent_parameters</KEYWORD3>\r
+                       <KEYWORD3>MSagent_profiles</KEYWORD3>\r
+                       <KEYWORD3>MSarticles</KEYWORD3>\r
+                       <KEYWORD3>MSdistpublishers</KEYWORD3>\r
+                       <KEYWORD3>MSdistribution_agents</KEYWORD3>\r
+                       <KEYWORD3>MSdistribution_history</KEYWORD3>\r
+                       <KEYWORD3>MSdistributiondbs</KEYWORD3>\r
+                       <KEYWORD3>MSdistributor</KEYWORD3>\r
+                       <KEYWORD3>MSlogreader_agents</KEYWORD3>\r
+                       <KEYWORD3>MSlogreader_history</KEYWORD3>\r
+                       <KEYWORD3>MSmerge_agents</KEYWORD3>\r
+                       <KEYWORD3>MSmerge_contents</KEYWORD3>\r
+                       <KEYWORD3>MSmerge_delete_conflicts</KEYWORD3>\r
+                       <KEYWORD3>MSmerge_genhistory</KEYWORD3>\r
+                       <KEYWORD3>MSmerge_history</KEYWORD3>\r
+                       <KEYWORD3>MSmerge_replinfo</KEYWORD3>\r
+                       <KEYWORD3>MSmerge_subscriptions</KEYWORD3>\r
+                       <KEYWORD3>MSmerge_tombstone</KEYWORD3>\r
+                       <KEYWORD3>MSpublication_access</KEYWORD3>\r
+                       <KEYWORD3>Mspublications</KEYWORD3>\r
+                       <KEYWORD3>Mspublisher_databases</KEYWORD3>\r
+                       <KEYWORD3>MSrepl_commands</KEYWORD3>\r
+                       <KEYWORD3>MSrepl_errors</KEYWORD3>\r
+                       <KEYWORD3>Msrepl_originators</KEYWORD3>\r
+                       <KEYWORD3>MSrepl_transactions</KEYWORD3>\r
+                       <KEYWORD3>MSrepl_version</KEYWORD3>\r
+                       <KEYWORD3>MSreplication_objects</KEYWORD3>\r
+                       <KEYWORD3>MSreplication_subscriptions</KEYWORD3>\r
+                       <KEYWORD3>MSsnapshot_agents</KEYWORD3>\r
+                       <KEYWORD3>MSsnapshot_history</KEYWORD3>\r
+                       <KEYWORD3>MSsubscriber_info</KEYWORD3>\r
+                       <KEYWORD3>MSsubscriber_schedule</KEYWORD3>\r
+                       <KEYWORD3>MSsubscription_properties</KEYWORD3>\r
+                       <KEYWORD3>MSsubscriptions</KEYWORD3>\r
+                       <KEYWORD3>restorefile</KEYWORD3>\r
+                       <KEYWORD3>restorefilegroup</KEYWORD3>\r
+                       <KEYWORD3>restorehistory</KEYWORD3>\r
+                       <KEYWORD3>sysalerts</KEYWORD3>\r
+                       <KEYWORD3>sysallocations</KEYWORD3>\r
+                       <KEYWORD3>sysaltfiles</KEYWORD3>\r
+                       <KEYWORD3>sysarticles</KEYWORD3>\r
+                       <KEYWORD3>sysarticleupdates</KEYWORD3>\r
+                       <KEYWORD3>syscacheobjects</KEYWORD3>\r
+                       <KEYWORD3>syscategories</KEYWORD3>\r
+                       <KEYWORD3>syscharsets</KEYWORD3>\r
+                       <KEYWORD3>syscolumns</KEYWORD3>\r
+                       <KEYWORD3>syscomments</KEYWORD3>\r
+                       <KEYWORD3>sysconfigures</KEYWORD3>\r
+                       <KEYWORD3>sysconstraints</KEYWORD3>\r
+                       <KEYWORD3>syscurconfigs</KEYWORD3>\r
+                       <KEYWORD3>sysdatabases</KEYWORD3>\r
+                       <KEYWORD3>sysdatabases</KEYWORD3>\r
+                       <KEYWORD3>sysdepends</KEYWORD3>\r
+                       <KEYWORD3>sysdevices</KEYWORD3>\r
+                       <KEYWORD3>sysdownloadlist</KEYWORD3>\r
+                       <KEYWORD3>sysfilegroups</KEYWORD3>\r
+                       <KEYWORD3>sysfiles</KEYWORD3>\r
+                       <KEYWORD3>sysforeignkeys</KEYWORD3>\r
+                       <KEYWORD3>sysfulltextcatalogs</KEYWORD3>\r
+                       <KEYWORD3>sysindexes</KEYWORD3>\r
+                       <KEYWORD3>sysindexkeys</KEYWORD3>\r
+                       <KEYWORD3>sysjobhistory</KEYWORD3>\r
+                       <KEYWORD3>sysjobs</KEYWORD3>\r
+                       <KEYWORD3>sysjobschedules</KEYWORD3>\r
+                       <KEYWORD3>sysjobservers</KEYWORD3>\r
+                       <KEYWORD3>sysjobsteps</KEYWORD3>\r
+                       <KEYWORD3>syslanguages</KEYWORD3>\r
+                       <KEYWORD3>syslockinfo</KEYWORD3>\r
+                       <KEYWORD3>syslogins</KEYWORD3>\r
+                       <KEYWORD3>sysmembers</KEYWORD3>\r
+                       <KEYWORD3>sysmergearticles</KEYWORD3>\r
+                       <KEYWORD3>sysmergepublications</KEYWORD3>\r
+                       <KEYWORD3>sysmergeschemachange</KEYWORD3>\r
+                       <KEYWORD3>sysmergesubscriptions</KEYWORD3>\r
+                       <KEYWORD3>sysmergesubsetfilters</KEYWORD3>\r
+                       <KEYWORD3>sysmessages</KEYWORD3>\r
+                       <KEYWORD3>sysnotifications</KEYWORD3>\r
+                       <KEYWORD3>sysobjects</KEYWORD3>\r
+                       <KEYWORD3>sysobjects</KEYWORD3>\r
+                       <KEYWORD3>sysoledbusers</KEYWORD3>\r
+                       <KEYWORD3>sysoperators</KEYWORD3>\r
+                       <KEYWORD3>sysperfinfo</KEYWORD3>\r
+                       <KEYWORD3>syspermissions</KEYWORD3>\r
+                       <KEYWORD3>sysprocesses</KEYWORD3>\r
+                       <KEYWORD3>sysprotects</KEYWORD3>\r
+                       <KEYWORD3>syspublications</KEYWORD3>\r
+                       <KEYWORD3>sysreferences</KEYWORD3>\r
+                       <KEYWORD3>sysremotelogins</KEYWORD3>\r
+                       <KEYWORD3>sysreplicationalerts</KEYWORD3>\r
+                       <KEYWORD3>sysservers</KEYWORD3>\r
+                       <KEYWORD3>sysservers</KEYWORD3>\r
+                       <KEYWORD3>syssubscriptions</KEYWORD3>\r
+                       <KEYWORD3>systargetservergroupmembers</KEYWORD3>\r
+                       <KEYWORD3>systargetservergroups</KEYWORD3>\r
+                       <KEYWORD3>systargetservers</KEYWORD3>\r
+                       <KEYWORD3>systaskids</KEYWORD3>\r
+                       <KEYWORD3>systypes</KEYWORD3>\r
+                       <KEYWORD3>sysusers</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/tthtml.xml b/extra/xmode/modes/tthtml.xml
new file mode 100644 (file)
index 0000000..24d9667
--- /dev/null
@@ -0,0 +1,266 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+<MODE>\r
+       <!--\r
+               Made by Krassimir Berov: k.berov@gmail.com \r
+       -->\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+               <PROPERTY NAME="lineComment" VALUE="#" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+\r
+               <!-- Auto indent -->\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="[" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="]" />\r
+               <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />\r
+               <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />\r
+               <PROPERTY NAME="lineUpClosingBracket" VALUE="true" />\r
+               <PROPERTY NAME="indentNextLine" VALUE="(FOREACH|FOR|WHILE|IF|ELSIF|ELSE|UNLESS|SWITCH|CASE|TRY|CATCH)(\s.*?)?;" />\r
+       </PROPS>\r
+\r
+       <!-- ESCAPE is not exactly right but it is needed to correctly\r
+            handle JavaScript in on* parameters -->\r
+       <RULES SET="TAGS" DEFAULT="MARKUP" ESCAPE="\">\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+               <SEQ TYPE="OPERATOR">=</SEQ><!-- give priority to TT -->\r
+\r
+       </RULES>\r
+\r
+       <RULES SET="JAVASCRIPT" DEFAULT="MARKUP" IGNORE_CASE="TRUE">\r
+               <SEQ TYPE="MARKUP" DELEGATE="javascript::MAIN">&gt;</SEQ>\r
+               <!-- handle <SCRIPT SRC="..."> properly -->\r
+               <SEQ TYPE="MARKUP" DELEGATE="html::MAIN">SRC=</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="CSS" DEFAULT="MARKUP">\r
+               <SEQ TYPE="MARKUP" DELEGATE="css::MAIN">&gt;</SEQ>\r
+       </RULES>\r
+       <RULES IGNORE_CASE="TRUE">\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="JAVASCRIPT">\r
+                       <BEGIN>&lt;SCRIPT</BEGIN>\r
+                       <END>&lt;/SCRIPT&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="CSS">\r
+                       <BEGIN>&lt;STYLE</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD instructions -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">\r
+                       <BEGIN>&lt;!</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+               <SPAN TYPE="COMMENT2">\r
+                       <BEGIN>[%#</BEGIN>\r
+                       <END>%]</END>\r
+               </SPAN>\r
+               <SPAN_REGEXP DELEGATE="perl::MAIN" HASH_CHAR="[%">\r
+                       <BEGIN>\[%\s*?PERL\s*?%\]</BEGIN>\r
+                       <END>\[%\s*?END\s*?%\]</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <SPAN TYPE="LITERAL3" DELEGATE="TT">\r
+                       <BEGIN>[%</BEGIN>\r
+                       <END>%]</END>\r
+               </SPAN>\r
+       </RULES>\r
+       <RULES SET="TT"\r
+                       IGNORE_CASE="FALSE"\r
+                       HIGHLIGHT_DIGITS="TRUE"\r
+                       DIGIT_RE="(0x[\p{XDigit}]+[lL]?|[\p{Digit}]+(e[\p{Digit}]*)?[lLdDfF]?)">\r
+\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <!-- Scalar variables -->\r
+               <SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD2">\$#?[\w:]+</SEQ_REGEXP>\r
+               <!-- Scalar variables\r
+               <SEQ_REGEXP ->ADD HASH_CHARS here if uncommenting<- TYPE="KEYWORD2">\s[a-z_0-9]+\s</SEQ_REGEXP> -->\r
+               <!-- Compound Variables -->\r
+               <MARK_PREVIOUS TYPE="KEYWORD4" MATCH_TYPE="CONTEXT">.</MARK_PREVIOUS>\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="CONTEXT">(</MARK_PREVIOUS>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+               <SEQ TYPE="OPERATOR">;</SEQ>\r
+               <SEQ TYPE="OPERATOR">]</SEQ>\r
+               <SEQ TYPE="OPERATOR">[</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+               <KEYWORDS>\r
+                       <!-- Template directives -->\r
+                       <KEYWORD1>SET</KEYWORD1>\r
+                       <KEYWORD1>GET</KEYWORD1>\r
+                       <KEYWORD1>CALL</KEYWORD1>\r
+                       <KEYWORD1>DEFAULT</KEYWORD1>\r
+                       <KEYWORD1>IF</KEYWORD1>\r
+                       <KEYWORD1>ELSIF</KEYWORD1>\r
+                       <KEYWORD1>ELSE</KEYWORD1>\r
+                       <KEYWORD1>UNLESS</KEYWORD1>\r
+                       <KEYWORD1>LAST</KEYWORD1>\r
+                       <KEYWORD1>NEXT</KEYWORD1>\r
+                       <KEYWORD1>FOR</KEYWORD1>\r
+                       <KEYWORD1>FOREACH</KEYWORD1>\r
+                       <KEYWORD1>WHILE</KEYWORD1>\r
+                       <KEYWORD1>SWITCH</KEYWORD1>\r
+                       <KEYWORD1>CASE</KEYWORD1>\r
+                       <KEYWORD1>PROCESS</KEYWORD1>\r
+                       <KEYWORD1>INCLUDE</KEYWORD1>\r
+                       <KEYWORD1>INSERT</KEYWORD1>\r
+                       <KEYWORD1>WRAPPER</KEYWORD1>\r
+                       <KEYWORD1>BLOCK</KEYWORD1>\r
+                       <KEYWORD1>MACRO</KEYWORD1>\r
+                       <KEYWORD1>END</KEYWORD1>\r
+                       <KEYWORD1>USE</KEYWORD1>\r
+                       <KEYWORD1>IN</KEYWORD1>\r
+                       <KEYWORD1>FILTER</KEYWORD1>\r
+                       <KEYWORD1>TRY</KEYWORD1>\r
+                       <KEYWORD1>THROW</KEYWORD1>\r
+                       <KEYWORD1>CATCH</KEYWORD1>\r
+                       <KEYWORD1>FINAL</KEYWORD1>\r
+                       <KEYWORD1>META</KEYWORD1>\r
+                       <KEYWORD1>TAGS</KEYWORD1>\r
+                       <KEYWORD1>DEBUG</KEYWORD1>\r
+                       <KEYWORD1>PERL</KEYWORD1>\r
+                       <!-- Compile Time Constant Folding -->\r
+                       <KEYWORD1>constants</KEYWORD1>\r
+                       <!-- Special Variables -->\r
+                       <KEYWORD2>template</KEYWORD2>\r
+                       <KEYWORD2>component</KEYWORD2>\r
+                       <KEYWORD2>loop</KEYWORD2>\r
+                       <KEYWORD2>error</KEYWORD2>\r
+                       <KEYWORD2>content</KEYWORD2>\r
+\r
+                       <!-- VMethods -->\r
+                       <!-- Scalar Virtual Methods -->\r
+                       <KEYWORD3>defined</KEYWORD3>\r
+                       <KEYWORD3>length</KEYWORD3>\r
+                       <KEYWORD3>repeat</KEYWORD3>\r
+                       <KEYWORD3>replace</KEYWORD3>\r
+                       <KEYWORD3>match</KEYWORD3>\r
+                       <KEYWORD3>search</KEYWORD3>\r
+                       <KEYWORD3>split</KEYWORD3>\r
+                       <KEYWORD3>chunk</KEYWORD3>\r
+                       <KEYWORD3>list</KEYWORD3>\r
+                       <KEYWORD3>hash</KEYWORD3>\r
+                       <KEYWORD3>size</KEYWORD3>\r
+\r
+                       <!-- Hash Virtual Methods -->\r
+                       <KEYWORD3>keys</KEYWORD3>\r
+                       <KEYWORD3>values</KEYWORD3>\r
+                       <KEYWORD3>each</KEYWORD3>\r
+                       <KEYWORD3>sort</KEYWORD3>\r
+                       <KEYWORD3>nsort</KEYWORD3>\r
+                       <KEYWORD3>import</KEYWORD3>\r
+                       <KEYWORD3>defined</KEYWORD3>\r
+                       <KEYWORD3>exists</KEYWORD3>\r
+                       <KEYWORD3>item</KEYWORD3>\r
+\r
+                       <!-- List Virtual Methods -->\r
+                       <KEYWORD3>first</KEYWORD3>\r
+                       <KEYWORD3>last</KEYWORD3>\r
+                       <KEYWORD3>max</KEYWORD3>\r
+                       <KEYWORD3>reverse</KEYWORD3>\r
+                       <KEYWORD3>join</KEYWORD3>\r
+                       <KEYWORD3>grep</KEYWORD3>\r
+                       <KEYWORD3>unshift</KEYWORD3>\r
+                       <KEYWORD3>push</KEYWORD3>\r
+                       <KEYWORD3>shift</KEYWORD3>\r
+                       <KEYWORD3>pop</KEYWORD3>\r
+                       <KEYWORD3>unique</KEYWORD3>\r
+                       <KEYWORD3>merge</KEYWORD3>\r
+                       <KEYWORD3>slice</KEYWORD3>\r
+                       <KEYWORD3>splice</KEYWORD3>\r
+                       <KEYWORD3>count</KEYWORD3>\r
+\r
+                       <!-- Standard filters -->\r
+                       <FUNCTION>format</FUNCTION>\r
+                       <FUNCTION>upper</FUNCTION>\r
+                       <FUNCTION>lower</FUNCTION>\r
+                       <FUNCTION>ucfirst</FUNCTION>\r
+                       <FUNCTION>lcfirst</FUNCTION>\r
+                       <FUNCTION>trim</FUNCTION>\r
+                       <FUNCTION>collapse</FUNCTION>\r
+                       <FUNCTION>html</FUNCTION>\r
+                       <FUNCTION>html_entity</FUNCTION>\r
+                       <FUNCTION>html_para</FUNCTION>\r
+                       <FUNCTION>html_break</FUNCTION>\r
+                       <FUNCTION>html_para_break</FUNCTION>\r
+                       <FUNCTION>html_line_break</FUNCTION>\r
+                       <FUNCTION>uri</FUNCTION>\r
+                       <FUNCTION>url</FUNCTION>\r
+                       <FUNCTION>indent</FUNCTION>\r
+                       <FUNCTION>truncate</FUNCTION>\r
+                       <FUNCTION>repeat</FUNCTION>\r
+                       <FUNCTION>remove</FUNCTION>\r
+                       <FUNCTION>replace</FUNCTION>\r
+                       <FUNCTION>redirect</FUNCTION>\r
+                       <FUNCTION>eval</FUNCTION>\r
+                       <FUNCTION>evaltt</FUNCTION>\r
+                       <FUNCTION>perl</FUNCTION>\r
+                       <FUNCTION>evalperl</FUNCTION>\r
+                       <FUNCTION>stdout</FUNCTION>\r
+                       <FUNCTION>stderr</FUNCTION>\r
+                       <FUNCTION>null</FUNCTION>\r
+                       <FUNCTION>latex</FUNCTION>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/twiki.xml b/extra/xmode/modes/twiki.xml
new file mode 100644 (file)
index 0000000..364fec0
--- /dev/null
@@ -0,0 +1,153 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- catalog entry:\r
+\r
+<MODE NAME="twiki"             FILE="twiki.xml"\r
+                               FILE_NAME_GLOB="*.twiki"/>\r
+\r
+-->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="noTabs" VALUE="true" />\r
+               <PROPERTY NAME="wrap" VALUE="soft" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" HIGHLIGHT_DIGITS="FALSE" IGNORE_CASE="FALSE">\r
+\r
+               <!-- though not encouraged, HTML is supported -->\r
+               <IMPORT DELEGATE="html::MAIN"/>\r
+\r
+               <!-- signature - a convention, not actual markup -->\r
+               <EOL_SPAN AT_LINE_START="TRUE" TYPE="COMMENT1">-- </EOL_SPAN>\r
+\r
+               <!-- header -->\r
+               <EOL_SPAN_REGEXP HASH_CHAR="---+" \r
+                       TYPE="KEYWORD1" \r
+                       AT_LINE_START="TRUE"\r
+                       >-{3}[+]{1,6}(?:!!)?\s</EOL_SPAN_REGEXP>\r
+\r
+               <!-- bold -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="*"\r
+                       AT_LINE_START="FALSE"\r
+                       TYPE="KEYWORD4"\r
+               >\*[^\s*][^*]*\*</SEQ_REGEXP>\r
+\r
+               <!-- bold and italic -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="__"\r
+                       AT_LINE_START="FALSE"\r
+                       TYPE="KEYWORD4"\r
+               >__\w.*?\w__</SEQ_REGEXP>\r
+\r
+               <!-- italic -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="_"\r
+                       AT_LINE_START="FALSE"\r
+                       TYPE="KEYWORD4"\r
+               >_\w.*?\w_</SEQ_REGEXP>\r
+\r
+               <!-- bold and fixed font -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="=="\r
+                       AT_LINE_START="FALSE"\r
+                       TYPE="KEYWORD4"\r
+               >==\w.*?\w==</SEQ_REGEXP>\r
+\r
+               <!-- fixed font -->\r
+               <SEQ_REGEXP\r
+                       HASH_CHAR="="\r
+                       AT_LINE_START="FALSE"\r
+                       TYPE="KEYWORD4"\r
+               >=\w.*?\w=</SEQ_REGEXP>\r
+\r
+               <!-- separator -->\r
+               <EOL_SPAN AT_LINE_START="TRUE" TYPE="KEYWORD4">---</EOL_SPAN>\r
+\r
+               <!-- wiki words -->\r
+               <SEQ_REGEXP HASH_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZ" AT_WORD_START="TRUE" TYPE="KEYWORD2">[A-Z][A-Z.]*[a-z.]+(?:[A-Z][A-Z.]*[a-z.]*[a-z])+</SEQ_REGEXP>\r
+\r
+               <!-- links -->\r
+               <SPAN TYPE="KEYWORD3">\r
+                       <BEGIN>[[</BEGIN>\r
+                       <END>]]</END>\r
+               </SPAN>\r
+\r
+               <!-- verbatim -->\r
+               <SPAN TYPE="LITERAL2">\r
+                       <BEGIN>&lt;verbatim&gt;</BEGIN>\r
+                       <END>&lt;/verbatim&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- prevent a link -->\r
+               <SEQ TYPE="LITERAL2">&lt;nop&gt;</SEQ>\r
+\r
+               <!-- disable links -->\r
+               <SPAN TYPE="LITERAL2">\r
+                       <BEGIN>&lt;noautolink&gt;</BEGIN>\r
+                       <END>&lt;/noautolink&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- terms -->\r
+               <SEQ_REGEXP HASH_CHAR=" " TYPE="KEYWORD2" AT_LINE_START="FALSE"\r
+                       >\s{3}\w(?:&amp;nbsp;|-|\w)*?\w+:\s</SEQ_REGEXP>\r
+\r
+               <!-- twiki variables -->\r
+               <SEQ_REGEXP HASH_CHAR="%" \r
+                       TYPE="FUNCTION"\r
+                       >%[A-Z]+(?:\{[^\}]+\})?%</SEQ_REGEXP>\r
+\r
+               <KEYWORDS>\r
+                       <!-- variables, just here for complete-word -->\r
+                       <NULL>ATTACHURL</NULL>\r
+                       <NULL>ATTACHURLPATH</NULL>\r
+                       <NULL>BASETOPIC</NULL>\r
+                       <NULL>BASEWEB</NULL>\r
+                       <NULL>GMTIME</NULL>\r
+                       <NULL>HOMETOPIC</NULL>\r
+                       <NULL>HTTP_HOST</NULL>\r
+                       <NULL>INCLUDE</NULL>\r
+                       <NULL>INCLUDINGTOPIC</NULL>\r
+                       <NULL>INCLUDINGWEB</NULL>\r
+                       <NULL>MAINWEB</NULL>\r
+                       <NULL>NOTIFYTOPIC</NULL>\r
+                       <NULL>PUBURL</NULL>\r
+                       <NULL>PUBURLPATH</NULL>\r
+                       <NULL>REMOTE_ADDR</NULL>\r
+                       <NULL>REMOTE_PORT</NULL>\r
+                       <NULL>REMOTE_USER</NULL>\r
+                       <NULL>SCRIPTSUFFIX</NULL>\r
+                       <NULL>SCRIPTURL</NULL>\r
+                       <NULL>SCRIPTURLPATH</NULL>\r
+                       <NULL>SEARCH</NULL>\r
+                       <NULL>SERVERTIME</NULL>\r
+                       <NULL>SPACEDTOPIC</NULL>\r
+                       <NULL>STARTINCLUDE</NULL>\r
+                       <NULL>STATISTICSTOPIC</NULL>\r
+                       <NULL>STOPINCLUDE</NULL>\r
+                       <NULL>TOC</NULL>\r
+                       <NULL>TOPIC</NULL>\r
+                       <NULL>TOPICLIST</NULL>\r
+                       <NULL>TWIKIWEB</NULL>\r
+                       <NULL>URLENCODE</NULL>\r
+                       <NULL>URLPARAM</NULL>\r
+                       <NULL>USERNAME</NULL>\r
+                       <NULL>WEB</NULL>\r
+                       <NULL>WEBLIST</NULL>\r
+                       <NULL>WEBPREFSTOPIC</NULL>\r
+                       <NULL>WIKIHOMEURL</NULL>\r
+                       <NULL>WIKINAME</NULL>\r
+                       <NULL>WIKIPREFSTOPIC</NULL>\r
+                       <NULL>WIKITOOLNAME</NULL>\r
+                       <NULL>WIKIUSERNAME</NULL>\r
+                       <NULL>WIKIUSERSTOPIC</NULL>\r
+                       <NULL>WIKIVERSION</NULL>\r
+               </KEYWORDS>\r
+\r
+       </RULES>\r
+\r
+</MODE>\r
+\r
+\r
diff --git a/extra/xmode/modes/typoscript.xml b/extra/xmode/modes/typoscript.xml
new file mode 100644 (file)
index 0000000..b9a705b
--- /dev/null
@@ -0,0 +1,81 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- TypoScript syntax highlighting, by Neil Bertram <neil@tasmanstudios.co.nz>\r
+       Based on Kasper's highlighter in ExtDevEval and his "TypoScript Syntax and In-depth Study"\r
+       available at http://typo3.org/documentation/document-library/doc_core_ts/\r
+\r
+  -->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="#"/>\r
+               <PROPERTY NAME="lineComment" VALUE="/"/>\r
+               <PROPERTY NAME="commentStart" VALUE="/*"/>\r
+               <PROPERTY NAME="commentEnd" VALUE="*/"/>\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="({"/>\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE=")}"/>\r
+               <PROPERTY NAME="lineUpClosingBracket" VALUE="true"/>\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="FALSE" NO_WORD_SEP=":" DEFAULT="MARKUP">\r
+               <!-- Include statement (<INCLUDE_TYPOSCRIPT: source="FILE: fileadmin/html/mainmenu_typoscript.txt">) -->\r
+               <SPAN TYPE="KEYWORD4" NO_LINE_BREAK="TRUE" AT_LINE_START="TRUE">\r
+                       <BEGIN>&lt;INCLUDE</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- Assignments (using the = operator) are delegated to the assignment rule for more flexibility -->\r
+               <EOL_SPAN TYPE="OPERATOR" DELEGATE="typoscript::assignment" AT_LINE_START="FALSE" AT_WHITESPACE_END="FALSE">=</EOL_SPAN>\r
+\r
+               <!-- Multi-line assignments (using the (blah blah) syntax) -->\r
+               <SPAN TYPE="OPERATOR" AT_LINE_START="FALSE" NO_LINE_BREAK="FALSE" DELEGATE="typoscript::assignment">\r
+                       <BEGIN>(</BEGIN>\r
+                       <END>)</END>\r
+               </SPAN>\r
+\r
+               <!-- Object copies (using the < operator)\r
+                       Note that object references (=<) are not highlighted due to the fact\r
+                       that they're only supported by the core template engine, and not\r
+                       actually a feature of typoscript itself\r
+                 -->\r
+               <EOL_SPAN TYPE="OPERATOR" AT_LINE_START="FALSE" DELEGATE="typoscript::copy">&lt;</EOL_SPAN>\r
+\r
+               <!-- Comments\r
+                       - note that block comments must start/end at the beginning of the trimmed line\r
+                         but this is difficult to accomplish here, so we just force it to be line-start\r
+                 -->\r
+               <EOL_SPAN AT_WORD_START="TRUE" TYPE="COMMENT4">#</EOL_SPAN>\r
+               <SPAN TYPE="COMMENT1" NO_LINE_BREAK="FALSE" AT_LINE_START="TRUE">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+               <EOL_SPAN AT_WORD_START="TRUE" TYPE="COMMENT2">/</EOL_SPAN>\r
+\r
+               <!-- Conditionals (anything inside square brackets at a word start -->\r
+               <SPAN TYPE="KEYWORD1" NO_LINE_BREAK="TRUE" AT_WORD_START="TRUE">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+\r
+               <!-- Special characters that haven't been caught yet -->\r
+               <SEQ TYPE="NULL">{</SEQ>\r
+               <SEQ TYPE="NULL">}</SEQ>\r
+               <SEQ TYPE="NULL">(</SEQ>\r
+               <SEQ TYPE="NULL">)</SEQ>\r
+       </RULES>\r
+\r
+       <!-- Rule for both single and multi-line assignments -->\r
+       <RULES SET="assignment" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="FALSE" DEFAULT="LITERAL1">\r
+               <!-- TypoScript constants inserted with {$blah} are highlighted -->\r
+               <SPAN TYPE="LABEL" AT_WORD_START="FALSE" AT_LINE_START="FALSE">\r
+                       <BEGIN>{$</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <!-- Rule for object copies -->\r
+       <RULES SET="copy" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="FALSE" DEFAULT="KEYWORD2">\r
+               <!-- nothing right now -->\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/uscript.xml b/extra/xmode/modes/uscript.xml
new file mode 100644 (file)
index 0000000..c9c947f
--- /dev/null
@@ -0,0 +1,161 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+\r
+               <!-- Auto indent -->\r
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
+               <PROPERTY NAME="indentNextLine"\r
+                       VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+               <!-- set this to 'true' if you want to use GNU coding style -->\r
+               <PROPERTY NAME="doubleBracketIndent" VALUE="false" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\"\r
+               IGNORE_CASE="TRUE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="(0x[\p{XDigit}]+[lL]?|[\p{Digit}]+(e[\p{Digit}]*)?[lLdDfF]?)">\r
+\r
+               <!-- Silly comment -->\r
+               <SEQ TYPE="COMMENT1">/**/</SEQ>\r
+\r
+               <!-- Java comment (C style) -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">//</EOL_SPAN>\r
+\r
+        <SEQ TYPE="OPERATOR">~</SEQ>\r
+        <SEQ TYPE="OPERATOR">!</SEQ>\r
+        <SEQ TYPE="OPERATOR">@</SEQ>\r
+        <SEQ TYPE="OPERATOR">#</SEQ>\r
+        <SEQ TYPE="OPERATOR">$</SEQ>\r
+        <SEQ TYPE="OPERATOR">^</SEQ>\r
+        <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+        <SEQ TYPE="OPERATOR">*</SEQ>\r
+        <SEQ TYPE="OPERATOR">-</SEQ>\r
+        <SEQ TYPE="OPERATOR">=</SEQ>\r
+        <SEQ TYPE="OPERATOR">+</SEQ>\r
+        <SEQ TYPE="OPERATOR">|</SEQ>\r
+        <SEQ TYPE="OPERATOR">\\</SEQ>\r
+        <SEQ TYPE="OPERATOR">:</SEQ>\r
+        <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+        <SEQ TYPE="OPERATOR">/</SEQ>\r
+        <SEQ TYPE="OPERATOR">?</SEQ>\r
+        <SEQ TYPE="OPERATOR">`</SEQ>\r
+\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+                       AT_WHITESPACE_END="TRUE">:</MARK_PREVIOUS>\r
+\r
+               <!-- Function calls -->\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <KEYWORDS>\r
+            <KEYWORD1>abstract</KEYWORD1>\r
+            <KEYWORD1>auto</KEYWORD1>\r
+            <KEYWORD1>array</KEYWORD1>\r
+            <KEYWORD1>case</KEYWORD1>\r
+            <KEYWORD1>class</KEYWORD1>\r
+            <KEYWORD1>coerce</KEYWORD1>\r
+            <KEYWORD1>collapscategories</KEYWORD1>\r
+            <KEYWORD1>config</KEYWORD1>\r
+            <KEYWORD1>const</KEYWORD1>\r
+            <KEYWORD1>default</KEYWORD1>\r
+            <KEYWORD1>defaultproperties</KEYWORD1>\r
+            <KEYWORD1>deprecated</KEYWORD1>\r
+            <KEYWORD1>do</KEYWORD1>\r
+            <KEYWORD1>dontcollapsecategories</KEYWORD1>\r
+            <KEYWORD1>edfindable</KEYWORD1>\r
+            <KEYWORD1>editconst</KEYWORD1>\r
+            <KEYWORD1>editinline</KEYWORD1>\r
+            <KEYWORD1>editinlinenew</KEYWORD1>\r
+            <KEYWORD1>else</KEYWORD1>\r
+            <KEYWORD1>enum</KEYWORD1>\r
+            <KEYWORD1>event</KEYWORD1>\r
+            <KEYWORD1>exec</KEYWORD1>\r
+            <KEYWORD1>export</KEYWORD1>\r
+            <KEYWORD1>exportstructs</KEYWORD1>\r
+            <KEYWORD1>extends</KEYWORD1>\r
+            <KEYWORD1>false</KEYWORD1>\r
+            <KEYWORD1>final</KEYWORD1>\r
+            <KEYWORD1>for</KEYWORD1>\r
+            <KEYWORD1>foreach</KEYWORD1>\r
+            <KEYWORD1>function</KEYWORD1>\r
+            <KEYWORD1>globalconfig</KEYWORD1>\r
+            <KEYWORD1>hidecategories</KEYWORD1>\r
+            <KEYWORD1>if</KEYWORD1>\r
+            <KEYWORD1>ignores</KEYWORD1>\r
+            <KEYWORD1>input</KEYWORD1>\r
+            <KEYWORD1>iterator</KEYWORD1>\r
+            <KEYWORD1>latent</KEYWORD1>\r
+            <KEYWORD1>local</KEYWORD1>\r
+            <KEYWORD1>localized</KEYWORD1>\r
+            <KEYWORD1>native</KEYWORD1>\r
+            <KEYWORD1>nativereplication</KEYWORD1>\r
+            <KEYWORD1>noexport</KEYWORD1>\r
+            <KEYWORD1>noteditinlinenew</KEYWORD1>\r
+                       <KEYWORD1>notplaceable</KEYWORD1>\r
+            <KEYWORD1>operator</KEYWORD1>\r
+            <KEYWORD1>optional</KEYWORD1>\r
+            <KEYWORD1>out</KEYWORD1>\r
+            <KEYWORD1>perobjectconfig</KEYWORD1>\r
+            <KEYWORD1>placeable</KEYWORD1>\r
+            <KEYWORD1>postoperator</KEYWORD1>\r
+            <KEYWORD1>preoperator</KEYWORD1>\r
+            <KEYWORD1>private</KEYWORD1>\r
+            <KEYWORD1>protected</KEYWORD1>\r
+            <KEYWORD1>reliable</KEYWORD1>\r
+            <KEYWORD1>replication</KEYWORD1>\r
+            <KEYWORD1>return</KEYWORD1>\r
+            <KEYWORD1>safereplace</KEYWORD1>\r
+            <KEYWORD1>showcategories</KEYWORD1>\r
+            <KEYWORD1>simulated</KEYWORD1>\r
+            <KEYWORD1>singular</KEYWORD1>\r
+            <KEYWORD1>state</KEYWORD1>\r
+            <KEYWORD1>static</KEYWORD1>\r
+            <KEYWORD1>struct</KEYWORD1>\r
+            <KEYWORD1>switch</KEYWORD1>\r
+            <KEYWORD1>transient</KEYWORD1>\r
+            <KEYWORD1>travel</KEYWORD1>\r
+            <KEYWORD1>true</KEYWORD1>\r
+            <KEYWORD1>unreliable</KEYWORD1>\r
+            <KEYWORD1>until</KEYWORD1>\r
+            <KEYWORD1>var</KEYWORD1>\r
+            <KEYWORD1>while</KEYWORD1>\r
+            <KEYWORD1>within</KEYWORD1>\r
+\r
+            <KEYWORD2>default</KEYWORD2>\r
+            <KEYWORD2>global</KEYWORD2>\r
+            <KEYWORD2>none</KEYWORD2>\r
+            <KEYWORD2>self</KEYWORD2>\r
+            <KEYWORD2>static</KEYWORD2>\r
+            <KEYWORD2>super</KEYWORD2>\r
+\r
+            <KEYWORD3>bool</KEYWORD3>\r
+            <KEYWORD3>byte</KEYWORD3>\r
+            <KEYWORD3>float</KEYWORD3>\r
+            <KEYWORD3>int</KEYWORD3>\r
+            <KEYWORD3>name</KEYWORD3>\r
+            <KEYWORD3>string</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/vbscript.xml b/extra/xmode/modes/vbscript.xml
new file mode 100644 (file)
index 0000000..9f0e9bf
--- /dev/null
@@ -0,0 +1,739 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- VBScript mode by Andre Kaplan -->\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="lineComment" VALUE="'" />\r
+       </PROPS>\r
+\r
+       <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <!-- conditional compilation -->\r
+               <EOL_SPAN TYPE="KEYWORD2">#if</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#else</EOL_SPAN>\r
+               <EOL_SPAN TYPE="KEYWORD2">#end</EOL_SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">'</EOL_SPAN>\r
+               <EOL_SPAN TYPE="COMMENT1">rem </EOL_SPAN>\r
+\r
+               <!-- Comparison operators -->\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">.</SEQ>\r
+               <!-- See in keywords: is -->\r
+\r
+               <!-- Arithmetic operators -->\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">\</SEQ>\r
+               <!-- See in keywords: mod -->\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+\r
+               <!-- Concatenation operators -->\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <!-- <SEQ TYPE="OPERATOR">+</SEQ> -->\r
+\r
+               <!-- Logical operators -->\r
+               <!-- See in keywords: and, or, not, xor, eqv -->\r
+\r
+               <!-- EOL Continuation -->\r
+<!--           <SEQ TYPE="NULL">_</SEQ>-->\r
+               <!-- Instruction separator -->\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+                       AT_LINE_START="TRUE">:</MARK_PREVIOUS>\r
+\r
+               <KEYWORDS>\r
+                       <!-- Conditional Statements -->\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>then</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>elseif</KEYWORD1>\r
+                       <KEYWORD1>select</KEYWORD1>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+\r
+                       <!-- Loop Statements -->\r
+                       <!-- For..Next -->\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>to</KEYWORD1>\r
+                       <KEYWORD1>step</KEYWORD1>\r
+                       <KEYWORD1>next</KEYWORD1>\r
+                       <!-- For Each..Next -->\r
+                       <KEYWORD1>each</KEYWORD1>\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <!-- Do..Loop -->\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+                       <KEYWORD1>until</KEYWORD1>\r
+                       <KEYWORD1>loop</KEYWORD1>\r
+                       <!-- While..Wend -->\r
+                       <KEYWORD1>wend</KEYWORD1>\r
+\r
+                       <!-- Closing, Exit Statements -->\r
+                       <KEYWORD1>exit</KEYWORD1>\r
+                       <KEYWORD1>end</KEYWORD1>\r
+\r
+                       <!-- Methods, Functions, Class, Properties, Variables -->\r
+                       <KEYWORD1>function</KEYWORD1>\r
+                       <KEYWORD1>sub</KEYWORD1>\r
+                       <KEYWORD1>class</KEYWORD1>\r
+                       <KEYWORD1>property</KEYWORD1>\r
+                       <KEYWORD1>get</KEYWORD1>\r
+                       <KEYWORD1>let</KEYWORD1>\r
+                       <KEYWORD1>set</KEYWORD1>\r
+\r
+                       <!-- Parameters passing -->\r
+                       <KEYWORD1>byval</KEYWORD1>\r
+                       <KEYWORD1>byref</KEYWORD1>\r
+\r
+                       <!-- Declaration -->\r
+                       <KEYWORD1>const</KEYWORD1>\r
+                       <KEYWORD1>dim</KEYWORD1>\r
+                       <KEYWORD1>redim</KEYWORD1>\r
+                       <KEYWORD1>preserve</KEYWORD1>\r
+                       <KEYWORD1>as</KEYWORD1>\r
+\r
+                       <!-- Object Assignement/Instantiation -->\r
+                       <KEYWORD1>set</KEYWORD1>\r
+                       <KEYWORD1>with</KEYWORD1>\r
+                       <KEYWORD1>new</KEYWORD1>\r
+\r
+                       <!-- Visibility -->\r
+                       <KEYWORD1>public</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+                       <KEYWORD1>private</KEYWORD1>\r
+\r
+                       <!-- Comments -->\r
+                       <KEYWORD1>rem</KEYWORD1>\r
+\r
+                       <!-- Function Call - Dynamic Evaluation -->\r
+                       <KEYWORD1>call</KEYWORD1>\r
+                       <KEYWORD1>execute</KEYWORD1>\r
+                       <KEYWORD1>eval</KEYWORD1>\r
+\r
+                       <!-- Miscellaneous -->\r
+                       <KEYWORD1>on</KEYWORD1>\r
+                       <KEYWORD1>error</KEYWORD1>\r
+                       <KEYWORD1>goto</KEYWORD1>\r
+                       <KEYWORD1>resume</KEYWORD1>\r
+                       <KEYWORD1>option</KEYWORD1>\r
+                       <KEYWORD1>explicit</KEYWORD1>\r
+                       <KEYWORD1>erase</KEYWORD1>\r
+                       <KEYWORD1>randomize</KEYWORD1>\r
+\r
+                       <!-- Operators -->\r
+                       <!-- Comparison operators -->\r
+                       <OPERATOR>is</OPERATOR>\r
+                       <!-- Arithmetic operators -->\r
+                       <OPERATOR>mod</OPERATOR>\r
+                       <!-- Logical operators -->\r
+                       <OPERATOR>and</OPERATOR>\r
+                       <OPERATOR>or</OPERATOR>\r
+                       <OPERATOR>not</OPERATOR>\r
+                       <OPERATOR>xor</OPERATOR>\r
+                       <OPERATOR>imp</OPERATOR>\r
+\r
+                       <!-- Datatypes Constants/Literals -->\r
+                       <KEYWORD3>false</KEYWORD3>\r
+                       <KEYWORD3>true</KEYWORD3>\r
+                       <KEYWORD3>empty</KEYWORD3>\r
+                       <KEYWORD3>nothing</KEYWORD3>\r
+                       <KEYWORD3>null</KEYWORD3>\r
+\r
+                       <!-- VBScript Constants -->\r
+                       <!-- Color constants -->\r
+                       <LITERAL2>vbblack</LITERAL2>\r
+                       <LITERAL2>vbred</LITERAL2>\r
+                       <LITERAL2>vbgreen</LITERAL2>\r
+                       <LITERAL2>vbyellow</LITERAL2>\r
+                       <LITERAL2>vbblue</LITERAL2>\r
+                       <LITERAL2>vbmagenta</LITERAL2>\r
+                       <LITERAL2>vbcyan</LITERAL2>\r
+                       <LITERAL2>vbwhite</LITERAL2>\r
+\r
+                       <!-- Date & Time Constants -->\r
+<!--                   <LITERAL2>vbSunday</LITERAL2>\r
+                       <LITERAL2>vbMonday</LITERAL2>\r
+                       <LITERAL2>vbTuesday</LITERAL2>\r
+                       <LITERAL2>vbWednesday</LITERAL2>\r
+                       <LITERAL2>vbThursday</LITERAL2>\r
+                       <LITERAL2>vbFriday</LITERAL2>\r
+                       <LITERAL2>vbSaturday</LITERAL2>\r
+                       <LITERAL2>vbUseSystem</LITERAL2>\r
+                       <LITERAL2>vbUseSystemDayOfWeek</LITERAL2>\r
+                       <LITERAL2>vbFirstJan1</LITERAL2>\r
+                       <LITERAL2>vbFirstFourDays</LITERAL2>\r
+                       <LITERAL2>vbFirstFullWeek</LITERAL2>\r
+-->\r
+                       <!-- Date Format Constants -->\r
+                       <LITERAL2>vbGeneralDate</LITERAL2>\r
+                       <LITERAL2>vbLongDate</LITERAL2>\r
+                       <LITERAL2>vbShortDate</LITERAL2>\r
+                       <LITERAL2>vbLongTime</LITERAL2>\r
+                       <LITERAL2>vbShortTime</LITERAL2>\r
+\r
+                       <!-- Miscellaneous  -->\r
+                       <LITERAL2>vbObjectError</LITERAL2>\r
+                       <KEYWORD2>Err</KEYWORD2>\r
+\r
+                       <!-- MsgBox Constants -->\r
+                       <LITERAL2>vbOKOnly</LITERAL2>\r
+                       <LITERAL2>vbOKCancel</LITERAL2>\r
+                       <LITERAL2>vbAbortRetryIgnore</LITERAL2>\r
+                       <LITERAL2>vbYesNoCancel</LITERAL2>\r
+                       <LITERAL2>vbYesNo</LITERAL2>\r
+                       <LITERAL2>vbRetryCancel</LITERAL2>\r
+                       <LITERAL2>vbCritical</LITERAL2>\r
+                       <LITERAL2>vbQuestion</LITERAL2>\r
+                       <LITERAL2>vbExclamation</LITERAL2>\r
+                       <LITERAL2>vbInformation</LITERAL2>\r
+                       <LITERAL2>vbDefaultButton1</LITERAL2>\r
+                       <LITERAL2>vbDefaultButton2</LITERAL2>\r
+                       <LITERAL2>vbDefaultButton3</LITERAL2>\r
+                       <LITERAL2>vbDefaultButton4</LITERAL2>\r
+                       <LITERAL2>vbApplicationModal</LITERAL2>\r
+                       <LITERAL2>vbSystemModal</LITERAL2>\r
+                       <LITERAL2>vbOK</LITERAL2>\r
+                       <LITERAL2>vbCancel</LITERAL2>\r
+                       <LITERAL2>vbAbort</LITERAL2>\r
+                       <LITERAL2>vbRetry</LITERAL2>\r
+                       <LITERAL2>vbIgnore</LITERAL2>\r
+                       <LITERAL2>vbYes</LITERAL2>\r
+                       <LITERAL2>vbNo</LITERAL2>\r
+\r
+                       <!-- Tristate Constants -->\r
+                       <LITERAL2>vbUseDefault</LITERAL2>\r
+                       <LITERAL2>vbTrue</LITERAL2>\r
+                       <LITERAL2>vbFalse</LITERAL2>\r
+\r
+                       <!-- String Constants -->\r
+                       <LITERAL2>vbcr</LITERAL2>\r
+                       <LITERAL2>vbcrlf</LITERAL2>\r
+                       <LITERAL2>vbformfeed</LITERAL2>\r
+                       <LITERAL2>vblf</LITERAL2>\r
+                       <LITERAL2>vbnewline</LITERAL2>\r
+                       <LITERAL2>vbnullchar</LITERAL2>\r
+                       <LITERAL2>vbnullstring</LITERAL2>\r
+                       <LITERAL2>vbtab</LITERAL2>\r
+                       <LITERAL2>vbverticaltab</LITERAL2>\r
+                       <!-- VarType Constants -->\r
+                       <LITERAL2>vbempty</LITERAL2>\r
+                       <LITERAL2>vbnull</LITERAL2>\r
+                       <LITERAL2>vbinteger</LITERAL2>\r
+                       <LITERAL2>vblong</LITERAL2>\r
+                       <LITERAL2>vbsingle</LITERAL2>\r
+                       <LITERAL2>vbdouble</LITERAL2>\r
+                       <LITERAL2>vbcurrency</LITERAL2>\r
+                       <LITERAL2>vbdate</LITERAL2>\r
+                       <LITERAL2>vbstring</LITERAL2>\r
+                       <LITERAL2>vbobject</LITERAL2>\r
+                       <LITERAL2>vberror</LITERAL2>\r
+                       <LITERAL2>vbboolean</LITERAL2>\r
+                       <LITERAL2>vbvariant</LITERAL2>\r
+                       <LITERAL2>vbdataobject</LITERAL2>\r
+                       <LITERAL2>vbdecimal</LITERAL2>\r
+                       <LITERAL2>vbbyte</LITERAL2>\r
+                       <LITERAL2>vbarray</LITERAL2>\r
+\r
+                       <!-- Built-in Functions -->\r
+                       <!-- Array Handling -->\r
+                       <KEYWORD2>array</KEYWORD2>\r
+                       <KEYWORD2>lbound</KEYWORD2>\r
+                       <KEYWORD2>ubound</KEYWORD2>\r
+                       <!-- Conversion Functions (Variant) -->\r
+                       <KEYWORD2>cbool</KEYWORD2>\r
+                       <KEYWORD2>cbyte</KEYWORD2>\r
+                       <KEYWORD2>ccur</KEYWORD2>\r
+                       <KEYWORD2>cdate</KEYWORD2>\r
+                       <KEYWORD2>cdbl</KEYWORD2>\r
+                       <KEYWORD2>cint</KEYWORD2>\r
+                       <KEYWORD2>clng</KEYWORD2>\r
+                       <KEYWORD2>csng</KEYWORD2>\r
+                       <KEYWORD2>cstr</KEYWORD2>\r
+                       <!-- Conversion Functions (Radix) -->\r
+                       <KEYWORD2>hex</KEYWORD2>\r
+                       <KEYWORD2>oct</KEYWORD2>\r
+                       <!-- Date/Time Functions -->\r
+                       <KEYWORD2>date</KEYWORD2>\r
+                       <KEYWORD2>time</KEYWORD2>\r
+                       <KEYWORD2>dateadd</KEYWORD2>\r
+                       <KEYWORD2>datediff</KEYWORD2>\r
+                       <KEYWORD2>datepart</KEYWORD2>\r
+                       <KEYWORD2>dateserial</KEYWORD2>\r
+                       <KEYWORD2>datevalue</KEYWORD2>\r
+                       <KEYWORD2>day</KEYWORD2>\r
+                       <KEYWORD2>month</KEYWORD2>\r
+                       <KEYWORD2>monthname</KEYWORD2>\r
+                       <KEYWORD2>weekday</KEYWORD2>\r
+                       <KEYWORD2>weekdayname</KEYWORD2>\r
+                       <KEYWORD2>year</KEYWORD2>\r
+                       <KEYWORD2>hour</KEYWORD2>\r
+                       <KEYWORD2>minute</KEYWORD2>\r
+                       <KEYWORD2>second</KEYWORD2>\r
+                       <KEYWORD2>now</KEYWORD2>\r
+                       <KEYWORD2>timeserial</KEYWORD2>\r
+                       <KEYWORD2>timevalue</KEYWORD2>\r
+                       <!-- Formatting Strings -->\r
+                       <KEYWORD2>formatcurrency</KEYWORD2>\r
+                       <KEYWORD2>formatdatetime</KEYWORD2>\r
+                       <KEYWORD2>formatnumber</KEYWORD2>\r
+                       <KEYWORD2>formatpercent</KEYWORD2>\r
+                       <!-- Input/Output -->\r
+                       <KEYWORD2>inputbox</KEYWORD2>\r
+                       <KEYWORD2>loadpicture</KEYWORD2>\r
+                       <KEYWORD2>msgbox</KEYWORD2>\r
+                       <!-- Math Functions -->\r
+                       <KEYWORD2>atn</KEYWORD2>\r
+                       <KEYWORD2>cos</KEYWORD2>\r
+                       <KEYWORD2>sin</KEYWORD2>\r
+                       <KEYWORD2>tan</KEYWORD2>\r
+                       <KEYWORD2>exp</KEYWORD2>\r
+                       <KEYWORD2>log</KEYWORD2>\r
+                       <KEYWORD2>sqr</KEYWORD2>\r
+                       <KEYWORD2>rnd</KEYWORD2>\r
+                       <!-- Miscellaneous -->\r
+                       <KEYWORD2>rgb</KEYWORD2>\r
+                       <!-- Objects -->\r
+                       <KEYWORD2>createobject</KEYWORD2>\r
+                       <KEYWORD2>getobject</KEYWORD2>\r
+                       <KEYWORD2>getref</KEYWORD2>\r
+                       <!-- Rounding -->\r
+                       <KEYWORD2>abs</KEYWORD2>\r
+                       <KEYWORD2>int</KEYWORD2>\r
+                       <KEYWORD2>fix</KEYWORD2>\r
+                       <KEYWORD2>round</KEYWORD2>\r
+                       <KEYWORD2>sgn</KEYWORD2>\r
+                       <!-- Script Engine ID -->\r
+                       <KEYWORD2>scriptengine</KEYWORD2>\r
+                       <KEYWORD2>scriptenginebuildversion</KEYWORD2>\r
+                       <KEYWORD2>scriptenginemajorversion</KEYWORD2>\r
+                       <KEYWORD2>scriptengineminorversion</KEYWORD2>\r
+                       <!-- Strings -->\r
+                       <KEYWORD2>asc</KEYWORD2>\r
+                       <KEYWORD2>ascb</KEYWORD2>\r
+                       <KEYWORD2>ascw</KEYWORD2>\r
+                       <KEYWORD2>chr</KEYWORD2>\r
+                       <KEYWORD2>chrb</KEYWORD2>\r
+                       <KEYWORD2>chrw</KEYWORD2>\r
+                       <KEYWORD2>filter</KEYWORD2>\r
+                       <KEYWORD2>instr</KEYWORD2>\r
+                       <KEYWORD2>instrb</KEYWORD2>\r
+                       <KEYWORD2>instrrev</KEYWORD2>\r
+                       <KEYWORD2>join</KEYWORD2>\r
+                       <KEYWORD2>len</KEYWORD2>\r
+                       <KEYWORD2>lenb</KEYWORD2>\r
+                       <KEYWORD2>lcase</KEYWORD2>\r
+                       <KEYWORD2>ucase</KEYWORD2>\r
+                       <KEYWORD2>left</KEYWORD2>\r
+                       <KEYWORD2>leftb</KEYWORD2>\r
+                       <KEYWORD2>mid</KEYWORD2>\r
+                       <KEYWORD2>midb</KEYWORD2>\r
+                       <KEYWORD2>right</KEYWORD2>\r
+                       <KEYWORD2>rightb</KEYWORD2>\r
+                       <KEYWORD2>replace</KEYWORD2>\r
+                       <KEYWORD2>space</KEYWORD2>\r
+                       <KEYWORD2>split</KEYWORD2>\r
+                       <KEYWORD2>strcomp</KEYWORD2>\r
+                       <KEYWORD2>string</KEYWORD2>\r
+                       <KEYWORD2>strreverse</KEYWORD2>\r
+                       <KEYWORD2>ltrim</KEYWORD2>\r
+                       <KEYWORD2>rtrim</KEYWORD2>\r
+                       <KEYWORD2>trim</KEYWORD2>\r
+                       <!-- Variants -->\r
+                       <KEYWORD2>isarray</KEYWORD2>\r
+                       <KEYWORD2>isdate</KEYWORD2>\r
+                       <KEYWORD2>isempty</KEYWORD2>\r
+                       <KEYWORD2>isnull</KEYWORD2>\r
+                       <KEYWORD2>isnumeric</KEYWORD2>\r
+                       <KEYWORD2>isobject</KEYWORD2>\r
+                       <KEYWORD2>typename</KEYWORD2>\r
+                       <KEYWORD2>vartype</KEYWORD2>\r
+\r
+                       <!-- Comment/Uncomment your favorite ADO Constants-->\r
+\r
+                       <!-- ADO Constants-->\r
+\r
+                       <!-- CursorTypeEnum Values -->\r
+                       <LITERAL2>adOpenForwardOnly</LITERAL2>\r
+                       <LITERAL2>adOpenKeyset</LITERAL2>\r
+                       <LITERAL2>adOpenDynamic</LITERAL2>\r
+                       <LITERAL2>adOpenStatic</LITERAL2>\r
+\r
+                       <!-- CursorOptionEnum Values -->\r
+<!--           <LITERAL2>adHoldRecords</LITERAL2>\r
+                       <LITERAL2>adMovePrevious</LITERAL2>\r
+                       <LITERAL2>adAddNew</LITERAL2>\r
+                       <LITERAL2>adDelete</LITERAL2>\r
+                       <LITERAL2>adUpdate</LITERAL2>\r
+                       <LITERAL2>adBookmark</LITERAL2>\r
+                       <LITERAL2>adApproxPosition</LITERAL2>\r
+                       <LITERAL2>adUpdateBatch</LITERAL2>\r
+                       <LITERAL2>adResync</LITERAL2>\r
+                       <LITERAL2>adNotify</LITERAL2>\r
+                       <LITERAL2>adFind</LITERAL2>\r
+                       <LITERAL2>adSeek</LITERAL2>\r
+                       <LITERAL2>adIndex</LITERAL2>\r
+-->\r
+                       <!-- LockTypeEnum Values -->\r
+                       <LITERAL2>adLockReadOnly</LITERAL2>\r
+                       <LITERAL2>adLockPessimistic</LITERAL2>\r
+                       <LITERAL2>adLockOptimistic</LITERAL2>\r
+                       <LITERAL2>adLockBatchOptimistic</LITERAL2>\r
+\r
+                       <!-- ExecuteOptionEnum Values -->\r
+                       <LITERAL2>adRunAsync</LITERAL2>\r
+                       <LITERAL2>adAsyncExecute</LITERAL2>\r
+                       <LITERAL2>adAsyncFetch</LITERAL2>\r
+                       <LITERAL2>adAsyncFetchNonBlocking</LITERAL2>\r
+                       <LITERAL2>adExecuteNoRecords</LITERAL2>\r
+\r
+                       <!-- ConnectOptionEnum Values -->\r
+<!--                   <LITERAL2>adAsyncConnect</LITERAL2>\r
+-->\r
+                       <!-- ObjectStateEnum Values -->\r
+                       <LITERAL2>adStateClosed</LITERAL2>\r
+                       <LITERAL2>adStateOpen</LITERAL2>\r
+                       <LITERAL2>adStateConnecting</LITERAL2>\r
+                       <LITERAL2>adStateExecuting</LITERAL2>\r
+                       <LITERAL2>adStateFetching</LITERAL2>\r
+\r
+                       <!-- CursorLocationEnum Values -->\r
+                       <LITERAL2>adUseServer</LITERAL2>\r
+                       <LITERAL2>adUseClient</LITERAL2>\r
+\r
+                       <!-- DataTypeEnum Values -->\r
+                       <LITERAL2>adEmpty</LITERAL2>\r
+                       <LITERAL2>adTinyInt</LITERAL2>\r
+                       <LITERAL2>adSmallInt</LITERAL2>\r
+                       <LITERAL2>adInteger</LITERAL2>\r
+                       <LITERAL2>adBigInt</LITERAL2>\r
+                       <LITERAL2>adUnsignedTinyInt</LITERAL2>\r
+                       <LITERAL2>adUnsignedSmallInt</LITERAL2>\r
+                       <LITERAL2>adUnsignedInt</LITERAL2>\r
+                       <LITERAL2>adUnsignedBigInt</LITERAL2>\r
+                       <LITERAL2>adSingle</LITERAL2>\r
+                       <LITERAL2>adDouble</LITERAL2>\r
+                       <LITERAL2>adCurrency</LITERAL2>\r
+                       <LITERAL2>adDecimal</LITERAL2>\r
+                       <LITERAL2>adNumeric</LITERAL2>\r
+                       <LITERAL2>adBoolean</LITERAL2>\r
+                       <LITERAL2>adError</LITERAL2>\r
+                       <LITERAL2>adUserDefined</LITERAL2>\r
+                       <LITERAL2>adVariant</LITERAL2>\r
+                       <LITERAL2>adIDispatch</LITERAL2>\r
+                       <LITERAL2>adIUnknown</LITERAL2>\r
+                       <LITERAL2>adGUID</LITERAL2>\r
+                       <LITERAL2>adDate</LITERAL2>\r
+                       <LITERAL2>adDBDate</LITERAL2>\r
+                       <LITERAL2>adDBTime</LITERAL2>\r
+                       <LITERAL2>adDBTimeStamp</LITERAL2>\r
+                       <LITERAL2>adBSTR</LITERAL2>\r
+                       <LITERAL2>adChar</LITERAL2>\r
+                       <LITERAL2>adVarChar</LITERAL2>\r
+                       <LITERAL2>adLongVarChar</LITERAL2>\r
+                       <LITERAL2>adWChar</LITERAL2>\r
+                       <LITERAL2>adVarWChar</LITERAL2>\r
+                       <LITERAL2>adLongVarWChar</LITERAL2>\r
+                       <LITERAL2>adBinary</LITERAL2>\r
+                       <LITERAL2>adVarBinary</LITERAL2>\r
+                       <LITERAL2>adLongVarBinary</LITERAL2>\r
+                       <LITERAL2>adChapter</LITERAL2>\r
+                       <LITERAL2>adFileTime</LITERAL2>\r
+                       <LITERAL2>adDBFileTime</LITERAL2>\r
+                       <LITERAL2>adPropVariant</LITERAL2>\r
+                       <LITERAL2>adVarNumeric</LITERAL2>\r
+\r
+                       <!-- FieldAttributeEnum Values -->\r
+<!--                   <LITERAL2>adFldMayDefer</LITERAL2>\r
+                       <LITERAL2>adFldUpdatable</LITERAL2>\r
+                       <LITERAL2>adFldUnknownUpdatable</LITERAL2>\r
+                       <LITERAL2>adFldFixed</LITERAL2>\r
+                       <LITERAL2>adFldIsNullable</LITERAL2>\r
+                       <LITERAL2>adFldMayBeNull</LITERAL2>\r
+                       <LITERAL2>adFldLong</LITERAL2>\r
+                       <LITERAL2>adFldRowID</LITERAL2>\r
+                       <LITERAL2>adFldRowVersion</LITERAL2>\r
+                       <LITERAL2>adFldCacheDeferred</LITERAL2>\r
+                       <LITERAL2>adFldKeyColumn</LITERAL2>\r
+-->\r
+\r
+                       <!-- EditModeEnum Values -->\r
+<!--                   <LITERAL2>adEditNone</LITERAL2>\r
+                       <LITERAL2>adEditInProgress</LITERAL2>\r
+                       <LITERAL2>adEditAdd</LITERAL2>\r
+                       <LITERAL2>adEditDelete</LITERAL2>\r
+-->\r
+                       <!-- RecordStatusEnum Values -->\r
+<!--                   <LITERAL2>adRecOK</LITERAL2>\r
+                       <LITERAL2>adRecNew</LITERAL2>\r
+                       <LITERAL2>adRecModified</LITERAL2>\r
+                       <LITERAL2>adRecDeleted</LITERAL2>\r
+                       <LITERAL2>adRecUnmodified</LITERAL2>\r
+                       <LITERAL2>adRecInvalid</LITERAL2>\r
+                       <LITERAL2>adRecMultipleChanges</LITERAL2>\r
+                       <LITERAL2>adRecPendingChanges</LITERAL2>\r
+                       <LITERAL2>adRecCanceled</LITERAL2>\r
+                       <LITERAL2>adRecCantRelease</LITERAL2>\r
+                       <LITERAL2>adRecConcurrencyViolation</LITERAL2>\r
+                       <LITERAL2>adRecIntegrityViolation</LITERAL2>\r
+                       <LITERAL2>adRecMaxChangesExceeded</LITERAL2>\r
+                       <LITERAL2>adRecObjectOpen</LITERAL2>\r
+                       <LITERAL2>adRecOutOfMemory</LITERAL2>\r
+                       <LITERAL2>adRecPermissionDenied</LITERAL2>\r
+                       <LITERAL2>adRecSchemaViolation</LITERAL2>\r
+                       <LITERAL2>adRecDBDeleted</LITERAL2>\r
+-->\r
+                       <!-- GetRowsOptionEnum Values -->\r
+<!--                   <LITERAL2>adGetRowsRest</LITERAL2>\r
+-->\r
+\r
+                       <!-- PositionEnum Values -->\r
+<!--                   <LITERAL2>adPosUnknown</LITERAL2>\r
+                       <LITERAL2>adPosBOF</LITERAL2>\r
+                       <LITERAL2>adPosEOF</LITERAL2>\r
+-->\r
+\r
+                       <!-- enum Values -->\r
+<!--                   <LITERAL2>adBookmarkCurrent</LITERAL2>\r
+                       <LITERAL2>adBookmarkFirst</LITERAL2>\r
+                       <LITERAL2>adBookmarkLast</LITERAL2>\r
+-->\r
+                       <!-- MarshalOptionsEnum Values -->\r
+<!--                   <LITERAL2>adMarshalAll</LITERAL2>\r
+                       <LITERAL2>adMarshalModifiedOnly</LITERAL2>\r
+-->\r
+                       <!-- AffectEnum Values -->\r
+<!--                   <LITERAL2>adAffectCurrent</LITERAL2>\r
+                       <LITERAL2>adAffectGroup</LITERAL2>\r
+                       <LITERAL2>adAffectAll</LITERAL2>\r
+                       <LITERAL2>adAffectAllChapters</LITERAL2>\r
+-->\r
+\r
+                       <!-- ResyncEnum Values -->\r
+<!--                   <LITERAL2>adResyncUnderlyingValues</LITERAL2>\r
+                       <LITERAL2>adResyncAllValues</LITERAL2>\r
+-->\r
+                       <!-- CompareEnum Values -->\r
+<!--                   <LITERAL2>adCompareLessThan</LITERAL2>\r
+                       <LITERAL2>adCompareEqual</LITERAL2>\r
+                       <LITERAL2>adCompareGreaterThan</LITERAL2>\r
+                       <LITERAL2>adCompareNotEqual</LITERAL2>\r
+                       <LITERAL2>adCompareNotComparable</LITERAL2>\r
+-->\r
+                       <!-- FilterGroupEnum Values -->\r
+<!--                   <LITERAL2>adFilterNone</LITERAL2>\r
+                       <LITERAL2>adFilterPendingRecords</LITERAL2>\r
+                       <LITERAL2>adFilterAffectedRecords</LITERAL2>\r
+                       <LITERAL2>adFilterFetchedRecords</LITERAL2>\r
+                       <LITERAL2>adFilterPredicate</LITERAL2>\r
+                       <LITERAL2>adFilterConflictingRecords</LITERAL2>\r
+-->\r
+                       <!-- SearchDirectionEnum Values -->\r
+<!--                   <LITERAL2>adSearchForward</LITERAL2>\r
+                       <LITERAL2>adSearchBackward</LITERAL2>\r
+-->\r
+\r
+                       <!-- PersistFormatEnum Values -->\r
+                       <LITERAL2>adPersistADTG</LITERAL2>\r
+                       <LITERAL2>adPersistXML</LITERAL2>\r
+\r
+                       <!-- StringFormatEnum Values -->\r
+<!--                   <LITERAL2>adStringXML</LITERAL2>\r
+                       <LITERAL2>adStringHTML</LITERAL2>\r
+                       <LITERAL2>adClipString</LITERAL2>\r
+-->\r
+                       <!-- ConnectPromptEnum Values -->\r
+<!--                   <LITERAL2>adPromptAlways</LITERAL2>\r
+                       <LITERAL2>adPromptComplete</LITERAL2>\r
+                       <LITERAL2>adPromptCompleteRequired</LITERAL2>\r
+                       <LITERAL2>adPromptNever</LITERAL2>\r
+-->\r
+                       <!-- ConnectModeEnum Values -->\r
+<!--                   <LITERAL2>adModeUnknown</LITERAL2>\r
+                       <LITERAL2>adModeRead</LITERAL2>\r
+                       <LITERAL2>adModeWrite</LITERAL2>\r
+                       <LITERAL2>adModeReadWrite</LITERAL2>\r
+                       <LITERAL2>adModeShareDenyRead</LITERAL2>\r
+                       <LITERAL2>adModeShareDenyWrite</LITERAL2>\r
+                       <LITERAL2>adModeShareExclusive</LITERAL2>\r
+                       <LITERAL2>adModeShareDenyNone</LITERAL2>\r
+-->\r
+                       <!-- IsolationLevelEnum Values -->\r
+<!--                   <LITERAL2>adXactUnspecified</LITERAL2>\r
+                       <LITERAL2>adXactChaos</LITERAL2>\r
+                       <LITERAL2>adXactReadUncommitted</LITERAL2>\r
+                       <LITERAL2>adXactBrowse</LITERAL2>\r
+                       <LITERAL2>adXactCursorStability</LITERAL2>\r
+                       <LITERAL2>adXactReadCommitted</LITERAL2>\r
+                       <LITERAL2>adXactRepeatableRead</LITERAL2>\r
+                       <LITERAL2>adXactSerializable</LITERAL2>\r
+                       <LITERAL2>adXactIsolated</LITERAL2>\r
+-->\r
+                       <!-- XactAttributeEnum Values -->\r
+<!--                   <LITERAL2>adXactCommitRetaining</LITERAL2>\r
+                       <LITERAL2>adXactAbortRetaining</LITERAL2>\r
+-->\r
+                       <!-- PropertyAttributesEnum Values -->\r
+<!--                   <LITERAL2>adPropNotSupported</LITERAL2>\r
+                       <LITERAL2>adPropRequired</LITERAL2>\r
+                       <LITERAL2>adPropOptional</LITERAL2>\r
+                       <LITERAL2>adPropRead</LITERAL2>\r
+                       <LITERAL2>adPropWrite</LITERAL2>\r
+-->\r
+                       <!-- ErrorValueEnum Values -->\r
+<!--                   <LITERAL2>adErrInvalidArgument</LITERAL2>\r
+                       <LITERAL2>adErrNoCurrentRecord</LITERAL2>\r
+                       <LITERAL2>adErrIllegalOperation</LITERAL2>\r
+                       <LITERAL2>adErrInTransaction</LITERAL2>\r
+                       <LITERAL2>adErrFeatureNotAvailable</LITERAL2>\r
+                       <LITERAL2>adErrItemNotFound</LITERAL2>\r
+                       <LITERAL2>adErrObjectInCollection</LITERAL2>\r
+                       <LITERAL2>adErrObjectNotSet</LITERAL2>\r
+                       <LITERAL2>adErrDataConversion</LITERAL2>\r
+                       <LITERAL2>adErrObjectClosed</LITERAL2>\r
+                       <LITERAL2>adErrObjectOpen</LITERAL2>\r
+                       <LITERAL2>adErrProviderNotFound</LITERAL2>\r
+                       <LITERAL2>adErrBoundToCommand</LITERAL2>\r
+                       <LITERAL2>adErrInvalidParamInfo</LITERAL2>\r
+                       <LITERAL2>adErrInvalidConnection</LITERAL2>\r
+                       <LITERAL2>adErrNotReentrant</LITERAL2>\r
+                       <LITERAL2>adErrStillExecuting</LITERAL2>\r
+                       <LITERAL2>adErrOperationCancelled</LITERAL2>\r
+                       <LITERAL2>adErrStillConnecting</LITERAL2>\r
+                       <LITERAL2>adErrNotExecuting</LITERAL2>\r
+                       <LITERAL2>adErrUnsafeOperation</LITERAL2>\r
+-->\r
+                       <!-- ParameterAttributesEnum Values -->\r
+                       <LITERAL2>adParamSigned</LITERAL2>\r
+                       <LITERAL2>adParamNullable</LITERAL2>\r
+                       <LITERAL2>adParamLong</LITERAL2>\r
+\r
+                       <!-- ParameterDirectionEnum Values -->\r
+                       <LITERAL2>adParamUnknown</LITERAL2>\r
+                       <LITERAL2>adParamInput</LITERAL2>\r
+                       <LITERAL2>adParamOutput</LITERAL2>\r
+                       <LITERAL2>adParamInputOutput</LITERAL2>\r
+                       <LITERAL2>adParamReturnValue</LITERAL2>\r
+\r
+                       <!-- CommandTypeEnum Values -->\r
+                       <LITERAL2>adCmdUnknown</LITERAL2>\r
+                       <LITERAL2>adCmdText</LITERAL2>\r
+                       <LITERAL2>adCmdTable</LITERAL2>\r
+                       <LITERAL2>adCmdStoredProc</LITERAL2>\r
+                       <LITERAL2>adCmdFile</LITERAL2>\r
+                       <LITERAL2>adCmdTableDirect</LITERAL2>\r
+\r
+                       <!-- EventStatusEnum Values -->\r
+<!--                   <LITERAL2>adStatusOK</LITERAL2>\r
+                       <LITERAL2>adStatusErrorsOccurred</LITERAL2>\r
+                       <LITERAL2>adStatusCantDeny</LITERAL2>\r
+                       <LITERAL2>adStatusCancel</LITERAL2>\r
+                       <LITERAL2>adStatusUnwantedEvent</LITERAL2>\r
+-->\r
+                       <!-- EventReasonEnum Values -->\r
+<!--                   <LITERAL2>adRsnAddNew</LITERAL2>\r
+                       <LITERAL2>adRsnDelete</LITERAL2>\r
+                       <LITERAL2>adRsnUpdate</LITERAL2>\r
+                       <LITERAL2>adRsnUndoUpdate</LITERAL2>\r
+                       <LITERAL2>adRsnUndoAddNew</LITERAL2>\r
+                       <LITERAL2>adRsnUndoDelete</LITERAL2>\r
+                       <LITERAL2>adRsnRequery</LITERAL2>\r
+                       <LITERAL2>adRsnResynch</LITERAL2>\r
+                       <LITERAL2>adRsnClose</LITERAL2>\r
+                       <LITERAL2>adRsnMove</LITERAL2>\r
+                       <LITERAL2>adRsnFirstChange</LITERAL2>\r
+                       <LITERAL2>adRsnMoveFirst</LITERAL2>\r
+                       <LITERAL2>adRsnMoveNext</LITERAL2>\r
+                       <LITERAL2>adRsnMovePrevious</LITERAL2>\r
+                       <LITERAL2>adRsnMoveLast</LITERAL2>\r
+-->\r
+                       <!-- SchemaEnum Values -->\r
+<!--                   <LITERAL2>adSchemaProviderSpecific</LITERAL2>\r
+                       <LITERAL2>adSchemaAsserts</LITERAL2>\r
+                       <LITERAL2>adSchemaCatalogs</LITERAL2>\r
+                       <LITERAL2>adSchemaCharacterSets</LITERAL2>\r
+                       <LITERAL2>adSchemaCollations</LITERAL2>\r
+                       <LITERAL2>adSchemaColumns</LITERAL2>\r
+                       <LITERAL2>adSchemaCheckConstraints</LITERAL2>\r
+                       <LITERAL2>adSchemaConstraintColumnUsage</LITERAL2>\r
+                       <LITERAL2>adSchemaConstraintTableUsage</LITERAL2>\r
+                       <LITERAL2>adSchemaKeyColumnUsage</LITERAL2>\r
+                       <LITERAL2>adSchemaReferentialConstraints</LITERAL2>\r
+                       <LITERAL2>adSchemaTableConstraints</LITERAL2>\r
+                       <LITERAL2>adSchemaColumnsDomainUsage</LITERAL2>\r
+                       <LITERAL2>adSchemaIndexes</LITERAL2>\r
+                       <LITERAL2>adSchemaColumnPrivileges</LITERAL2>\r
+                       <LITERAL2>adSchemaTablePrivileges</LITERAL2>\r
+                       <LITERAL2>adSchemaUsagePrivileges</LITERAL2>\r
+                       <LITERAL2>adSchemaProcedures</LITERAL2>\r
+                       <LITERAL2>adSchemaSchemata</LITERAL2>\r
+                       <LITERAL2>adSchemaSQLLanguages</LITERAL2>\r
+                       <LITERAL2>adSchemaStatistics</LITERAL2>\r
+                       <LITERAL2>adSchemaTables</LITERAL2>\r
+                       <LITERAL2>adSchemaTranslations</LITERAL2>\r
+                       <LITERAL2>adSchemaProviderTypes</LITERAL2>\r
+                       <LITERAL2>adSchemaViews</LITERAL2>\r
+                       <LITERAL2>adSchemaViewColumnUsage</LITERAL2>\r
+                       <LITERAL2>adSchemaViewTableUsage</LITERAL2>\r
+                       <LITERAL2>adSchemaProcedureParameters</LITERAL2>\r
+                       <LITERAL2>adSchemaForeignKeys</LITERAL2>\r
+                       <LITERAL2>adSchemaPrimaryKeys</LITERAL2>\r
+                       <LITERAL2>adSchemaProcedureColumns</LITERAL2>\r
+                       <LITERAL2>adSchemaDBInfoKeywords</LITERAL2>\r
+                       <LITERAL2>adSchemaDBInfoLiterals</LITERAL2>\r
+                       <LITERAL2>adSchemaCubes</LITERAL2>\r
+                       <LITERAL2>adSchemaDimensions</LITERAL2>\r
+                       <LITERAL2>adSchemaHierarchies</LITERAL2>\r
+                       <LITERAL2>adSchemaLevels</LITERAL2>\r
+                       <LITERAL2>adSchemaMeasures</LITERAL2>\r
+                       <LITERAL2>adSchemaProperties</LITERAL2>\r
+                       <LITERAL2>adSchemaMembers</LITERAL2>\r
+-->\r
+                       <!-- SeekEnum Values -->\r
+<!--                   <LITERAL2>adSeekFirstEQ</LITERAL2>\r
+                       <LITERAL2>adSeekLastEQ</LITERAL2>\r
+                       <LITERAL2>adSeekAfterEQ</LITERAL2>\r
+                       <LITERAL2>adSeekAfter</LITERAL2>\r
+                       <LITERAL2>adSeekBeforeEQ</LITERAL2>\r
+                       <LITERAL2>adSeekBefore</LITERAL2>\r
+-->\r
+                       <!-- ADCPROP_UPDATECRITERIA_ENUM Values -->\r
+<!--                   <LITERAL2>adCriteriaKey</LITERAL2>\r
+                       <LITERAL2>adCriteriaAllCols</LITERAL2>\r
+                       <LITERAL2>adCriteriaUpdCols</LITERAL2>\r
+                       <LITERAL2>adCriteriaTimeStamp</LITERAL2>\r
+-->\r
+                       <!-- ADCPROP_ASYNCTHREADPRIORITY_ENUM Values -->\r
+<!--                   <LITERAL2>adPriorityLowest</LITERAL2>\r
+                       <LITERAL2>adPriorityBelowNormal</LITERAL2>\r
+                       <LITERAL2>adPriorityNormal</LITERAL2>\r
+                       <LITERAL2>adPriorityAboveNormal</LITERAL2>\r
+                       <LITERAL2>adPriorityHighest</LITERAL2>\r
+-->\r
+                       <!-- CEResyncEnum Values -->\r
+<!--                   <LITERAL2>adResyncNone</LITERAL2>\r
+                       <LITERAL2>adResyncAutoIncrement</LITERAL2>\r
+                       <LITERAL2>adResyncConflicts</LITERAL2>\r
+                       <LITERAL2>adResyncUpdates</LITERAL2>\r
+                       <LITERAL2>adResyncInserts</LITERAL2>\r
+                       <LITERAL2>adResyncAll</LITERAL2>\r
+-->\r
+                       <!-- ADCPROP_AUTORECALC_ENUM Values -->\r
+<!--                   <LITERAL2>adRecalcUpFront</LITERAL2>\r
+                       <LITERAL2>adRecalcAlways</LITERAL2>\r
+-->\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/velocity.xml b/extra/xmode/modes/velocity.xml
new file mode 100644 (file)
index 0000000..7fa160a
--- /dev/null
@@ -0,0 +1,116 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="#*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*#" />\r
+               <PROPERTY NAME="lineComment" VALUE="##" />\r
+               <!-- Auto indent -->\r
+               <PROPERTY NAME="indentNextLines" VALUE="^\s*(#(foreach|if|elseif|else))\s*\(.*\)\s*"/>\r
+               <PROPERTY NAME="unindentThisLine" VALUE="^\s*#(end|elseif|else)\b.*"/>\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE">\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="JAVASCRIPT">\r
+                       <BEGIN>&lt;SCRIPT</BEGIN>\r
+                       <END>&lt;/SCRIPT&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="CSS">\r
+                       <BEGIN>&lt;STYLE</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD instructions -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">\r
+                       <BEGIN>&lt;!</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="html::TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+               <IMPORT DELEGATE="VELOCITY" />\r
+       </RULES>\r
+\r
+       <RULES SET="VELOCITY">\r
+               <SPAN TYPE="COMMENT2">\r
+                       <BEGIN>#*</BEGIN>\r
+                       <END>*#</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT3">##</EOL_SPAN>\r
+\r
+               <SPAN TYPE="KEYWORD3" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+\r
+               <SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD3"\r
+                       >\$!?[A-z][A-z0-9._-]*</SEQ_REGEXP>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>#set</KEYWORD1>\r
+                       <KEYWORD1>#foreach</KEYWORD1>\r
+                       <KEYWORD1>#end</KEYWORD1>\r
+                       <KEYWORD1>#if</KEYWORD1>\r
+                       <KEYWORD1>#else</KEYWORD1>\r
+                       <KEYWORD1>#elseif</KEYWORD1>\r
+                       <KEYWORD1>#parse</KEYWORD1>\r
+                       <KEYWORD1>#macro</KEYWORD1>\r
+                       <KEYWORD1>#stop</KEYWORD1>\r
+                       <KEYWORD1>#include</KEYWORD1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="JAVASCRIPT" DEFAULT="MARKUP" IGNORE_CASE="TRUE">\r
+               <SEQ TYPE="MARKUP" DELEGATE="JAVASCRIPT2">&gt;</SEQ>\r
+               <!-- handle <SCRIPT SRC="..."> properly -->\r
+               <SEQ TYPE="MARKUP" DELEGATE="BACK_TO_HTML">SRC=</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="JAVASCRIPT2"\r
+               ESCAPE="\"\r
+               IGNORE_CASE="FALSE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="(0x[\p{XDigit}]+[lL]?|[\p{Digit}]+(e[\p{Digit}]*)?[lLdDfF]?)">\r
+\r
+               <IMPORT DELEGATE="VELOCITY" />\r
+               <IMPORT DELEGATE="javascript::MAIN" />\r
+       </RULES>\r
+\r
+       <RULES SET="BACK_TO_HTML" DEFAULT="MARKUP">\r
+               <SEQ TYPE="MARKUP" DELEGATE="MAIN">&gt;</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="CSS" DEFAULT="MARKUP">\r
+               <SEQ TYPE="MARKUP" DELEGATE="CSS2">&gt;</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="CSS2"\r
+               IGNORE_CASE="TRUE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="[\p{Digit}]+(pt|pc|in|mm|cm|em|ex|px|ms|s|%)"\r
+               NO_WORD_SEP="-_">\r
+\r
+               <IMPORT DELEGATE="VELOCITY" />\r
+               <IMPORT DELEGATE="css::MAIN" />\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/verilog.xml b/extra/xmode/modes/verilog.xml
new file mode 100644 (file)
index 0000000..ee1602e
--- /dev/null
@@ -0,0 +1,219 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!-- Written By: Wojciech Stryjewski - thvortex@sourceforge.net -->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <!-- Rules for indenting:\r
+                  - Case expressions (a line ending with colon) are indented\r
+                  - Keywords begin, module, task, etc. always indented\r
+                  - Keywords if, while, etc. indent only if ; not on the same line\r
+               -->\r
+               <PROPERTY NAME="indentNextLines" VALUE="(.*:\s*)|(\s*(begin|fork|task|table|specify|primitive|module|generate|function|case[xz]?)\b.*)|(\s*(always|if|else|for|forever|initial|repeat|while)\b[^;]*)" />\r
+\r
+               <PROPERTY NAME="commentStart" VALUE="/*" />\r
+               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
+               <PROPERTY NAME="lineComment" VALUE="//" />\r
+               <PROPERTY NAME="noWordSep" VALUE="_'" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="([\p{Digit}]|_)+" NO_WORD_SEP="'">\r
+               <!-- Comments -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>/*</BEGIN>\r
+                       <END>*/</END>\r
+               </SPAN>\r
+               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
+\r
+               <!--String Literals -->\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="DIGIT">'d</SEQ>\r
+               <SEQ TYPE="DIGIT">'h</SEQ>\r
+               <SEQ TYPE="DIGIT">'b</SEQ>\r
+               <SEQ TYPE="DIGIT">'o</SEQ>\r
+\r
+               <!-- Function calls, module instantiation, system tasks with args -->\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <!-- Operators -->\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <!-- Regular Keywords -->\r
+                       <KEYWORD1>always</KEYWORD1>\r
+                       <KEYWORD1>assign</KEYWORD1>\r
+                       <KEYWORD1>begin</KEYWORD1>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>casex</KEYWORD1>\r
+                       <KEYWORD1>casez</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+                       <KEYWORD1>deassign</KEYWORD1>\r
+                       <KEYWORD1>disable</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>end</KEYWORD1>\r
+                       <KEYWORD1>endcase</KEYWORD1>\r
+                       <KEYWORD1>endfunction</KEYWORD1>\r
+                       <KEYWORD1>endgenerate</KEYWORD1>\r
+                       <KEYWORD1>endmodule</KEYWORD1>\r
+                       <KEYWORD1>endprimitive</KEYWORD1>\r
+                       <KEYWORD1>endspecify</KEYWORD1>\r
+                       <KEYWORD1>endtable</KEYWORD1>\r
+                       <KEYWORD1>endtask</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>force</KEYWORD1>\r
+                       <KEYWORD1>forever</KEYWORD1>\r
+                       <KEYWORD1>fork</KEYWORD1>\r
+                       <KEYWORD1>function</KEYWORD1>\r
+                       <KEYWORD1>generate</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>initial</KEYWORD1>\r
+                       <KEYWORD1>join</KEYWORD1>\r
+                       <KEYWORD1>macromodule</KEYWORD1>\r
+                       <KEYWORD1>module</KEYWORD1>\r
+                       <KEYWORD1>negedge</KEYWORD1>\r
+                       <KEYWORD1>posedge</KEYWORD1>\r
+                       <KEYWORD1>primitive</KEYWORD1>\r
+                       <KEYWORD1>repeat</KEYWORD1>\r
+                       <KEYWORD1>release</KEYWORD1>\r
+                       <KEYWORD1>specify</KEYWORD1>\r
+                       <KEYWORD1>table</KEYWORD1>\r
+                       <KEYWORD1>task</KEYWORD1>\r
+                       <KEYWORD1>wait</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+\r
+                       <!-- Compiler Directives -->\r
+                       <KEYWORD2>`include</KEYWORD2>\r
+                       <KEYWORD2>`define</KEYWORD2>\r
+                       <KEYWORD2>`undef</KEYWORD2>\r
+                       <KEYWORD2>`ifdef</KEYWORD2>\r
+                       <KEYWORD2>`ifndef</KEYWORD2>\r
+                       <KEYWORD2>`else</KEYWORD2>\r
+                       <KEYWORD2>`endif</KEYWORD2>\r
+                       <KEYWORD2>`timescale</KEYWORD2>\r
+                       <KEYWORD2>`resetall</KEYWORD2>\r
+                       <KEYWORD2>`signed</KEYWORD2>\r
+                       <KEYWORD2>`unsigned</KEYWORD2>\r
+                       <KEYWORD2>`celldefine</KEYWORD2>\r
+                       <KEYWORD2>`endcelldefine</KEYWORD2>\r
+                       <KEYWORD2>`default_nettype</KEYWORD2>\r
+                       <KEYWORD2>`unconnected_drive</KEYWORD2>\r
+                       <KEYWORD2>`nounconnected_drive</KEYWORD2>\r
+                       <KEYWORD2>`protect</KEYWORD2>\r
+                       <KEYWORD2>`endprotect</KEYWORD2>\r
+                       <KEYWORD2>`protected</KEYWORD2>\r
+                       <KEYWORD2>`endprotected</KEYWORD2>\r
+                       <KEYWORD2>`remove_gatename</KEYWORD2>\r
+                       <KEYWORD2>`noremove_gatename</KEYWORD2>\r
+                       <KEYWORD2>`remove_netname</KEYWORD2>\r
+                       <KEYWORD2>`noremove_netname</KEYWORD2>\r
+                       <KEYWORD2>`expand_vectornets</KEYWORD2>\r
+                       <KEYWORD2>`noexpand_vectornets</KEYWORD2>\r
+                       <KEYWORD2>`autoexpand_vectornets</KEYWORD2>\r
+\r
+                       <!-- Type Declaration Keywords -->\r
+                       <KEYWORD3>integer</KEYWORD3>\r
+                       <KEYWORD3>reg</KEYWORD3>\r
+                       <KEYWORD3>time</KEYWORD3>\r
+                       <KEYWORD3>realtime</KEYWORD3>\r
+                       <KEYWORD3>defparam</KEYWORD3>\r
+                       <KEYWORD3>parameter</KEYWORD3>\r
+                       <KEYWORD3>event</KEYWORD3>\r
+                       <KEYWORD3>wire</KEYWORD3>\r
+                       <KEYWORD3>wand</KEYWORD3>\r
+                       <KEYWORD3>wor</KEYWORD3>\r
+                       <KEYWORD3>tri</KEYWORD3>\r
+                       <KEYWORD3>triand</KEYWORD3>\r
+                       <KEYWORD3>trior</KEYWORD3>\r
+                       <KEYWORD3>tri0</KEYWORD3>\r
+                       <KEYWORD3>tri1</KEYWORD3>\r
+                       <KEYWORD3>trireg</KEYWORD3>\r
+                       <KEYWORD3>vectored</KEYWORD3>\r
+                       <KEYWORD3>scalared</KEYWORD3>\r
+                       <KEYWORD3>input</KEYWORD3>\r
+                       <KEYWORD3>output</KEYWORD3>\r
+                       <KEYWORD3>inout</KEYWORD3>\r
+\r
+                       <!-- Signal Strengths -->\r
+                       <KEYWORD3>supply0</KEYWORD3>\r
+                       <KEYWORD3>supply1</KEYWORD3>\r
+                       <KEYWORD3>strong0</KEYWORD3>\r
+                       <KEYWORD3>strong1</KEYWORD3>\r
+                       <KEYWORD3>pull0</KEYWORD3>\r
+                       <KEYWORD3>pull1</KEYWORD3>\r
+                       <KEYWORD3>weak0</KEYWORD3>\r
+                       <KEYWORD3>weak1</KEYWORD3>\r
+                       <KEYWORD3>highz0</KEYWORD3>\r
+                       <KEYWORD3>highz1</KEYWORD3>\r
+                       <KEYWORD3>small</KEYWORD3>\r
+                       <KEYWORD3>medium</KEYWORD3>\r
+                       <KEYWORD3>large</KEYWORD3>\r
+\r
+                       <!-- System Tasks With No/Optional Arguments -->\r
+                       <FUNCTION>$stop</FUNCTION>\r
+                       <FUNCTION>$finish</FUNCTION>\r
+                       <FUNCTION>$time</FUNCTION>\r
+                       <FUNCTION>$stime</FUNCTION>\r
+                       <FUNCTION>$realtime</FUNCTION>\r
+                       <FUNCTION>$settrace</FUNCTION>\r
+                       <FUNCTION>$cleartrace</FUNCTION>\r
+                       <FUNCTION>$showscopes</FUNCTION>\r
+                       <FUNCTION>$showvars</FUNCTION>\r
+                       <FUNCTION>$monitoron</FUNCTION>\r
+                       <FUNCTION>$monitoroff</FUNCTION>\r
+                       <FUNCTION>$random</FUNCTION>\r
+                       <FUNCTION>$printtimescale</FUNCTION>\r
+                       <FUNCTION>$timeformat</FUNCTION>\r
+\r
+                       <!-- Built-in primitives -->\r
+                       <FUNCTION>and</FUNCTION>\r
+                       <FUNCTION>nand</FUNCTION>\r
+                       <FUNCTION>or</FUNCTION>\r
+                       <FUNCTION>nor</FUNCTION>\r
+                       <FUNCTION>xor</FUNCTION>\r
+                       <FUNCTION>xnor</FUNCTION>\r
+                       <FUNCTION>buf</FUNCTION>\r
+                       <FUNCTION>bufif0</FUNCTION>\r
+                       <FUNCTION>bufif1</FUNCTION>\r
+                       <FUNCTION>not</FUNCTION>\r
+                       <FUNCTION>notif0</FUNCTION>\r
+                       <FUNCTION>notif1</FUNCTION>\r
+                       <FUNCTION>nmos</FUNCTION>\r
+                       <FUNCTION>pmos</FUNCTION>\r
+                       <FUNCTION>cmos</FUNCTION>\r
+                       <FUNCTION>rnmos</FUNCTION>\r
+                       <FUNCTION>rpmos</FUNCTION>\r
+                       <FUNCTION>rcmos</FUNCTION>\r
+                       <FUNCTION>tran</FUNCTION>\r
+                       <FUNCTION>tranif0</FUNCTION>\r
+                       <FUNCTION>tranif1</FUNCTION>\r
+                       <FUNCTION>rtran</FUNCTION>\r
+                       <FUNCTION>rtranif0</FUNCTION>\r
+                       <FUNCTION>rtranif1</FUNCTION>\r
+                       <FUNCTION>pullup</FUNCTION>\r
+                       <FUNCTION>pulldown</FUNCTION>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/modes/vhdl.xml b/extra/xmode/modes/vhdl.xml
new file mode 100644 (file)
index 0000000..a5d6dce
--- /dev/null
@@ -0,0 +1,195 @@
+<?xml version="1.0"?>\r
+\r
+<!-- VHDL mode, contributed by Dante Fabrizio and Nitsan Vardi -->\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="label" VALUE="VHDL" />\r
+               <PROPERTY NAME="lineComment" VALUE="--" />\r
+       </PROPS>\r
+       <RULES ESCAPE="\" IGNORE_CASE="TRUE">\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="NULL">'event</SEQ>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">/=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!</SEQ>\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">**</SEQ>\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">^</SEQ>\r
+               <SEQ TYPE="OPERATOR">~</SEQ>\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
+                       AT_LINE_START="FALSE">: </MARK_PREVIOUS>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>architecture</KEYWORD1>\r
+                       <KEYWORD1>alias</KEYWORD1>\r
+                       <KEYWORD1>assert</KEYWORD1>\r
+                       <KEYWORD1>entity</KEYWORD1>\r
+                       <KEYWORD1>process</KEYWORD1>\r
+                       <KEYWORD1>variable</KEYWORD1>\r
+                       <KEYWORD1>signal</KEYWORD1>\r
+                       <KEYWORD1>function</KEYWORD1>\r
+                       <KEYWORD1>generic</KEYWORD1>\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <KEYWORD1>out</KEYWORD1>\r
+                       <KEYWORD1>inout</KEYWORD1>\r
+                       <KEYWORD1>begin</KEYWORD1>\r
+                       <KEYWORD1>end</KEYWORD1>\r
+                       <KEYWORD1>component</KEYWORD1>\r
+                       <KEYWORD1>use</KEYWORD1>\r
+                       <KEYWORD1>library</KEYWORD1>\r
+                       <KEYWORD1>loop</KEYWORD1>\r
+                       <KEYWORD1>constant</KEYWORD1>\r
+                       <KEYWORD1>break</KEYWORD1>\r
+                       <KEYWORD1>case</KEYWORD1>\r
+                       <KEYWORD1>port</KEYWORD1>\r
+                       <KEYWORD1>is</KEYWORD1>\r
+                       <KEYWORD1>to</KEYWORD1>\r
+                       <KEYWORD1>of</KEYWORD1>\r
+                       <KEYWORD1>array</KEYWORD1>\r
+                       <KEYWORD1>catch</KEYWORD1>\r
+                       <KEYWORD1>continue</KEYWORD1>\r
+                       <KEYWORD1>default</KEYWORD1>\r
+                       <KEYWORD1>do</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+                       <KEYWORD1>elsif</KEYWORD1>\r
+                       <KEYWORD1>when</KEYWORD1>\r
+                       <KEYWORD1>then</KEYWORD1>\r
+                       <KEYWORD1>downto</KEYWORD1>\r
+                       <KEYWORD1>upto</KEYWORD1>\r
+                       <KEYWORD1>extends</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>implements</KEYWORD1>\r
+                       <KEYWORD1>instanceof</KEYWORD1>\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>static</KEYWORD1>\r
+                       <KEYWORD1>switch</KEYWORD1>\r
+                       <KEYWORD1>type</KEYWORD1>\r
+                       <KEYWORD1>while</KEYWORD1>\r
+                       <KEYWORD1>others</KEYWORD1>\r
+                       <KEYWORD1>all</KEYWORD1>\r
+                       <KEYWORD1>record</KEYWORD1>\r
+                       <KEYWORD1>range</KEYWORD1>\r
+                       <KEYWORD1>wait</KEYWORD1>\r
+\r
+                       <KEYWORD2>package</KEYWORD2>\r
+                       <KEYWORD2>import</KEYWORD2>\r
+                       <KEYWORD2>std_logic</KEYWORD2>\r
+                       <KEYWORD2>std_ulogic</KEYWORD2>\r
+                       <KEYWORD2>std_logic_vector</KEYWORD2>\r
+                       <KEYWORD2>std_ulogic_vector</KEYWORD2>\r
+                       <KEYWORD2>integer</KEYWORD2>\r
+                       <KEYWORD2>natural</KEYWORD2>\r
+                       <KEYWORD2>bit</KEYWORD2>\r
+                       <KEYWORD2>bit_vector</KEYWORD2>\r
+\r
+\r
+                       <OPERATOR>or</OPERATOR>\r
+                       <OPERATOR>nor</OPERATOR>\r
+                       <OPERATOR>not</OPERATOR>\r
+                       <OPERATOR>nand</OPERATOR>\r
+                       <OPERATOR>and</OPERATOR>\r
+                       <OPERATOR>xnor</OPERATOR>\r
+                       <OPERATOR>sll</OPERATOR>\r
+                       <OPERATOR>srl</OPERATOR>\r
+                       <OPERATOR>sla</OPERATOR>\r
+                       <OPERATOR>sra</OPERATOR>\r
+                       <OPERATOR>rol</OPERATOR>\r
+                       <OPERATOR>ror</OPERATOR>\r
+                       <OPERATOR>or</OPERATOR>\r
+                       <OPERATOR>or</OPERATOR>\r
+                       <OPERATOR>mod</OPERATOR>\r
+                       <OPERATOR>rem</OPERATOR>\r
+                       <OPERATOR>abs</OPERATOR>\r
+\r
+                       <KEYWORD3>EVENT</KEYWORD3>\r
+                       <KEYWORD3>BASE</KEYWORD3>\r
+                       <KEYWORD3>LEFT</KEYWORD3>\r
+                       <KEYWORD3>RIGHT</KEYWORD3>\r
+                       <KEYWORD3>LOW</KEYWORD3>\r
+                       <KEYWORD3>HIGH</KEYWORD3>\r
+                       <KEYWORD3>ASCENDING</KEYWORD3>\r
+                       <KEYWORD3>IMAGE</KEYWORD3>\r
+                       <KEYWORD3>VALUE</KEYWORD3>\r
+                       <KEYWORD3>POS</KEYWORD3>\r
+                       <KEYWORD3>VAL</KEYWORD3>\r
+                       <KEYWORD3>SUCC</KEYWORD3>\r
+                       <KEYWORD3>VAL</KEYWORD3>\r
+                       <KEYWORD3>POS</KEYWORD3>\r
+                       <KEYWORD3>PRED</KEYWORD3>\r
+                       <KEYWORD3>VAL</KEYWORD3>\r
+                       <KEYWORD3>POS</KEYWORD3>\r
+                       <KEYWORD3>LEFTOF</KEYWORD3>\r
+                       <KEYWORD3>RIGHTOF</KEYWORD3>\r
+                       <KEYWORD3>LEFT</KEYWORD3>\r
+                       <KEYWORD3>RIGHT</KEYWORD3>\r
+                       <KEYWORD3>LOW</KEYWORD3>\r
+                       <KEYWORD3>HIGH</KEYWORD3>\r
+                       <KEYWORD3>RANGE</KEYWORD3>\r
+                       <KEYWORD3>REVERSE</KEYWORD3>\r
+                       <KEYWORD3>LENGTH</KEYWORD3>\r
+                       <KEYWORD3>ASCENDING</KEYWORD3>\r
+                       <KEYWORD3>DELAYED</KEYWORD3>\r
+                       <KEYWORD3>STABLE</KEYWORD3>\r
+                       <KEYWORD3>QUIET</KEYWORD3>\r
+                       <KEYWORD3>TRANSACTION</KEYWORD3>\r
+                       <KEYWORD3>EVENT</KEYWORD3>\r
+                       <KEYWORD3>ACTIVE</KEYWORD3>\r
+                       <KEYWORD3>LAST</KEYWORD3>\r
+                       <KEYWORD3>LAST</KEYWORD3>\r
+                       <KEYWORD3>LAST</KEYWORD3>\r
+                       <KEYWORD3>DRIVING</KEYWORD3>\r
+                       <KEYWORD3>DRIVING</KEYWORD3>\r
+                       <KEYWORD3>SIMPLE</KEYWORD3>\r
+                       <KEYWORD3>INSTANCE</KEYWORD3>\r
+                       <KEYWORD3>PATH</KEYWORD3>\r
+\r
+                       <FUNCTION>rising_edge</FUNCTION>\r
+                       <FUNCTION>shift_left</FUNCTION>\r
+                       <FUNCTION>shift_right</FUNCTION>\r
+                       <FUNCTION>rotate_left</FUNCTION>\r
+                       <FUNCTION>rotate_right</FUNCTION>\r
+                       <FUNCTION>resize</FUNCTION>\r
+                       <FUNCTION>std_match</FUNCTION>\r
+                       <FUNCTION>to_integer</FUNCTION>\r
+                       <FUNCTION>to_unsigned</FUNCTION>\r
+                       <FUNCTION>to_signed</FUNCTION>\r
+                       <FUNCTION>unsigned</FUNCTION>\r
+                       <FUNCTION>signed</FUNCTION>\r
+                       <FUNCTION>to_bit</FUNCTION>\r
+                       <FUNCTION>to_bitvector</FUNCTION>\r
+                       <FUNCTION>to_stdulogic</FUNCTION>\r
+                       <FUNCTION>to_stdlogicvector</FUNCTION>\r
+                       <FUNCTION>to_stdulogicvector</FUNCTION>\r
+\r
+                       <LITERAL2>false</LITERAL2>\r
+                       <LITERAL2>true</LITERAL2>\r
+               </KEYWORDS>\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/xml.xml b/extra/xmode/modes/xml.xml
new file mode 100644 (file)
index 0000000..116be46
--- /dev/null
@@ -0,0 +1,161 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+       </PROPS>\r
+       <RULES>\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD Entity declarations -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="ENTITY-TAGS">\r
+                       <BEGIN>&lt;!ENTITY</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- CDATA sections -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="CDATA">\r
+                       <BEGIN>&lt;![CDATA[</BEGIN>\r
+                       <END>]]&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD instructions -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="DTD-TAGS">\r
+                       <BEGIN>&lt;!</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- PI directives -->\r
+               <SPAN TYPE="KEYWORD3">\r
+                       <BEGIN>&lt;?</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+       </RULES>\r
+       <RULES SET="TAGS" DEFAULT="MARKUP" NO_WORD_SEP="-_">\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="MARKUP">/</SEQ>\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR">:</MARK_PREVIOUS>\r
+       </RULES>\r
+       <RULES SET="DTD-TAGS" DEFAULT="KEYWORD2" IGNORE_CASE="FALSE" NO_WORD_SEP="-_">\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>--</BEGIN>\r
+                       <END>--</END>\r
+               </SPAN>\r
+\r
+               <!-- Parameter entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>%</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <!-- This appears in some SGML documents -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="MAIN">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">(</SEQ>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>CDATA</KEYWORD1>\r
+                       <KEYWORD1>EMPTY</KEYWORD1>\r
+                       <KEYWORD1>INCLUDE</KEYWORD1>\r
+                       <KEYWORD1>IGNORE</KEYWORD1>\r
+                       <KEYWORD1>NDATA</KEYWORD1>\r
+                       <KEYWORD1>#IMPLIED</KEYWORD1>\r
+                       <KEYWORD1>#PCDATA</KEYWORD1>\r
+                       <KEYWORD1>#REQUIRED</KEYWORD1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+       <RULES SET="ENTITY-TAGS" DEFAULT="KEYWORD2">\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>--</BEGIN>\r
+                       <END>--</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>SYSTEM</KEYWORD1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+       <RULES SET="CDATA" DEFAULT="COMMENT2">\r
+               <!-- no rules -->\r
+       </RULES>\r
+</MODE>\r
diff --git a/extra/xmode/modes/xq.xml b/extra/xmode/modes/xq.xml
new file mode 100644 (file)
index 0000000..b49dc68
--- /dev/null
@@ -0,0 +1,462 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+               <PROPERTY NAME="commentStart" VALUE="(:" />\r
+               <PROPERTY NAME="commentEnd" VALUE=":)" />\r
+               <PROPERTY NAME="wordBreakChars" VALUE=":,+=&lt;&gt;/?^&amp;*" />\r
+\r
+               <!-- Auto indent -->\r
+               <!-- <PROPERTY NAME="indentOpenBrackets" VALUE="{" /> -->\r
+               <!-- <PROPERTY NAME="indentCloseBrackets" VALUE="}" /> -->\r
+               <PROPERTY NAME="indentNextLine"\r
+                       VALUE="\s*(((if)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
+               <!-- set this to 'true' if you want to use GNU coding style -->\r
+               <PROPERTY NAME="doubleBracketIndent" VALUE="false" />\r
+               <PROPERTY NAME="lineUpClosingBracket" VALUE="true" />\r
+       </PROPS>\r
+       <RULES>\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+\r
+               <!-- DTD Entity declarations -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="ENTITY-TAGS">\r
+                       <BEGIN>&lt;!ENTITY</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- CDATA sections -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="CDATA">\r
+                       <BEGIN>&lt;![CDATA[</BEGIN>\r
+                       <END>]]&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD instructions -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="DTD-TAGS">\r
+                       <BEGIN>&lt;!</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- PI directives -->\r
+               <SPAN TYPE="KEYWORD3">\r
+                       <BEGIN>&lt;?</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN_REGEXP HASH_CHAR="&lt;" TYPE="MARKUP" DELEGATE="TAGS">\r
+                       <BEGIN><![CDATA[<[a-zA-Z/]\w*]]></BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN_REGEXP>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <RULES SET="TAGS" DEFAULT="MARKUP" NO_WORD_SEP="-_">\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+\r
+               <SEQ TYPE="MARKUP">/</SEQ>\r
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR">:</MARK_PREVIOUS>\r
+       </RULES>\r
+\r
+       <RULES SET="DTD-TAGS" DEFAULT="KEYWORD2" IGNORE_CASE="FALSE">\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>--</BEGIN>\r
+                       <END>--</END>\r
+               </SPAN>\r
+\r
+               <!-- Parameter entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>%</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <!-- This appears in some SGML documents -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="MAIN">\r
+                       <BEGIN>[</BEGIN>\r
+                       <END>]</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">(</SEQ>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>CDATA</KEYWORD1>\r
+                       <KEYWORD1>EMPTY</KEYWORD1>\r
+                       <KEYWORD1>INCLUDE</KEYWORD1>\r
+                       <KEYWORD1>IGNORE</KEYWORD1>\r
+                       <KEYWORD1>NDATA</KEYWORD1>\r
+                       <KEYWORD1>#IMPLIED</KEYWORD1>\r
+                       <KEYWORD1>#PCDATA</KEYWORD1>\r
+                       <KEYWORD1>#REQUIRED</KEYWORD1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="ENTITY-TAGS" DEFAULT="KEYWORD2">\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>--</BEGIN>\r
+                       <END>--</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">%</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <KEYWORD1>SYSTEM</KEYWORD1>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="CDATA" DEFAULT="COMMENT2">\r
+               <!-- no rules -->\r
+       </RULES>\r
+\r
+       <RULES ESCAPE="\"\r
+               IGNORE_CASE="FALSE"\r
+               HIGHLIGHT_DIGITS="TRUE"\r
+               DIGIT_RE="(0x\p{XDigit}+[lL]?|\d+(e\d*)?[lLdDfF]?)">\r
+\r
+               <!-- XQuery style comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>(:</BEGIN>\r
+                       <END>:)</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING>\r
+\r
+\r
+\r
+               <!-- Function calls -->\r
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+               <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">,</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+               <SEQ TYPE="OPERATOR">!=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">&lt;&lt;</SEQ>\r
+               <SEQ TYPE="OPERATOR">&gt;&gt;</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">+</SEQ>\r
+<!--\r
+               <SEQ TYPE="OPERATOR">-</SEQ>\r
+ -->\r
+               <SEQ TYPE="OPERATOR">*</SEQ>\r
+\r
+               <!-- unary -/+ ? -->\r
+\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">/</SEQ>\r
+               <SEQ TYPE="OPERATOR">//</SEQ>\r
+\r
+               <SEQ TYPE="OPERATOR">}</SEQ>\r
+               <SEQ TYPE="OPERATOR">{</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <OPERATOR>some</OPERATOR>\r
+                       <OPERATOR>every</OPERATOR>\r
+\r
+                       <OPERATOR>or</OPERATOR>\r
+                       <OPERATOR>and</OPERATOR>\r
+\r
+                       <OPERATOR>instance of</OPERATOR>\r
+\r
+                       <OPERATOR>treat as</OPERATOR>\r
+\r
+                       <OPERATOR>castable as</OPERATOR>\r
+\r
+                       <OPERATOR>cast as</OPERATOR>\r
+\r
+                       <OPERATOR>eq</OPERATOR>\r
+                       <OPERATOR>ne</OPERATOR>\r
+                       <OPERATOR>lt</OPERATOR>\r
+                       <OPERATOR>gt</OPERATOR>\r
+                       <OPERATOR>ge</OPERATOR>\r
+                       <OPERATOR>is</OPERATOR>\r
+\r
+                       <OPERATOR>to</OPERATOR>\r
+\r
+                       <OPERATOR>div</OPERATOR>\r
+                       <OPERATOR>idiv</OPERATOR>\r
+                       <OPERATOR>mod</OPERATOR>\r
+\r
+                       <OPERATOR>union</OPERATOR>\r
+\r
+                       <OPERATOR>intersect</OPERATOR>\r
+                       <OPERATOR>except</OPERATOR>\r
+\r
+                       <KEYWORD1>return</KEYWORD1>\r
+                       <KEYWORD1>for</KEYWORD1>\r
+                       <KEYWORD1>in</KEYWORD1>\r
+                       <KEYWORD1>to</KEYWORD1>\r
+                       <KEYWORD1>at</KEYWORD1>\r
+\r
+                       <KEYWORD1>let</KEYWORD1>\r
+                       <KEYWORD1>:=</KEYWORD1>\r
+\r
+                       <KEYWORD1>where</KEYWORD1>\r
+\r
+                       <KEYWORD1>stable</KEYWORD1>\r
+                       <KEYWORD1>order</KEYWORD1>\r
+                       <KEYWORD1>by</KEYWORD1>\r
+\r
+                       <LITERAL2>ascending</LITERAL2>\r
+                       <LITERAL2>descending</LITERAL2>\r
+\r
+                       <LITERAL2>greatest</LITERAL2>\r
+                       <LITERAL2>least</LITERAL2>\r
+                       <LITERAL2>collation</LITERAL2>\r
+\r
+                       <KEYWORD3>typeswitch</KEYWORD3>\r
+                       <KEYWORD3>default</KEYWORD3>\r
+\r
+                       <KEYWORD1>cast</KEYWORD1>\r
+                       <KEYWORD1>as</KEYWORD1>\r
+                       <KEYWORD1>if</KEYWORD1>\r
+                       <KEYWORD1>then</KEYWORD1>\r
+                       <KEYWORD1>else</KEYWORD1>\r
+\r
+                       <LITERAL2>true</LITERAL2>\r
+                       <LITERAL2>false</LITERAL2>\r
+\r
+                       <KEYWORD3>xquery</KEYWORD3>\r
+                       <KEYWORD3>version</KEYWORD3>\r
+\r
+                       <KEYWORD3>declare</KEYWORD3>\r
+                       <KEYWORD3>function</KEYWORD3>\r
+                       <KEYWORD3>library</KEYWORD3>\r
+                       <KEYWORD3>variable</KEYWORD3>\r
+                       <KEYWORD3>module</KEYWORD3>\r
+                       <KEYWORD3>namespace</KEYWORD3>\r
+                       <KEYWORD3>local</KEYWORD3>\r
+\r
+                       <KEYWORD3>validate</KEYWORD3>\r
+                       <KEYWORD3>import</KEYWORD3>\r
+                       <KEYWORD3>schema</KEYWORD3>\r
+                       <KEYWORD3>validation</KEYWORD3>\r
+                       <KEYWORD3>collection</KEYWORD3>\r
+\r
+                       <KEYWORD3>ancestor</KEYWORD3>\r
+                       <KEYWORD3>descendant</KEYWORD3>\r
+                       <KEYWORD3>self</KEYWORD3>\r
+                       <KEYWORD3>parent</KEYWORD3>\r
+                       <KEYWORD3>child</KEYWORD3>\r
+                       <KEYWORD3>self</KEYWORD3>\r
+                       <KEYWORD3>descendant-or-self</KEYWORD3>\r
+                       <KEYWORD3>ancestor-or-self</KEYWORD3>\r
+                       <KEYWORD3>preceding-sibling</KEYWORD3>\r
+                       <KEYWORD3>following-sibling</KEYWORD3>\r
+                       <KEYWORD3>following</KEYWORD3>\r
+                       <KEYWORD3>preceding</KEYWORD3>\r
+\r
+                       <KEYWORD4>xs:integer</KEYWORD4>\r
+                       <KEYWORD4>xs:decimal</KEYWORD4>\r
+                       <KEYWORD4>xs:double</KEYWORD4>\r
+                       <KEYWORD4>xs:string</KEYWORD4>\r
+                       <KEYWORD4>xs:date</KEYWORD4>\r
+                       <KEYWORD4>xs:time</KEYWORD4>\r
+                       <KEYWORD4>xs:dateTime</KEYWORD4>\r
+                       <KEYWORD4>xs:boolean</KEYWORD4>\r
+\r
+                       <KEYWORD4>item</KEYWORD4>\r
+                       <KEYWORD4>element</KEYWORD4>\r
+                       <KEYWORD4>attribute</KEYWORD4>\r
+                       <KEYWORD4>comment</KEYWORD4>\r
+                       <KEYWORD4>document</KEYWORD4>\r
+                       <KEYWORD4>document-node</KEYWORD4>\r
+                       <KEYWORD4>node</KEYWORD4>\r
+                       <KEYWORD4>empty</KEYWORD4>\r
+\r
+                       <FUNCTION>zero-or-one</FUNCTION>\r
+                       <FUNCTION>avg</FUNCTION>\r
+                       <FUNCTION>base-uri</FUNCTION>\r
+                       <FUNCTION>boolean</FUNCTION>\r
+                       <FUNCTION>ceiling</FUNCTION>\r
+                       <FUNCTION>codepoints-to-string</FUNCTION>\r
+                       <FUNCTION>collection</FUNCTION>\r
+                       <FUNCTION>compare</FUNCTION>\r
+                       <FUNCTION>concat</FUNCTION>\r
+                       <FUNCTION>contains</FUNCTION>\r
+                       <FUNCTION>count</FUNCTION>\r
+                       <FUNCTION>current-date</FUNCTION>\r
+                       <FUNCTION>current-dateTime</FUNCTION>\r
+                       <FUNCTION>current-time</FUNCTION>\r
+                       <FUNCTION>data</FUNCTION>\r
+                       <FUNCTION>day-from-date</FUNCTION>\r
+                       <FUNCTION>day-from-dateTime</FUNCTION>\r
+                       <FUNCTION>days-from-duration</FUNCTION>\r
+                       <FUNCTION>deep-equal</FUNCTION>\r
+                       <FUNCTION>distinct-values</FUNCTION>\r
+                       <FUNCTION>doc</FUNCTION>\r
+                       <FUNCTION>adjust-time-to-timezone</FUNCTION>\r
+                       <FUNCTION>adjust-dateTime-to-timezone</FUNCTION>\r
+                       <FUNCTION>string-length</FUNCTION>\r
+                       <FUNCTION>string-join</FUNCTION>\r
+                       <FUNCTION>string</FUNCTION>\r
+                       <FUNCTION>starts-with</FUNCTION>\r
+                       <FUNCTION>seconds-from-time</FUNCTION>\r
+                       <FUNCTION>seconds-from-duration</FUNCTION>\r
+                       <FUNCTION>seconds-from-dateTime</FUNCTION>\r
+                       <FUNCTION>round-half-to-even</FUNCTION>\r
+                       <FUNCTION>round</FUNCTION>\r
+                       <FUNCTION>root</FUNCTION>\r
+                       <FUNCTION>reverse</FUNCTION>\r
+                       <FUNCTION>replace</FUNCTION>\r
+                       <FUNCTION>remove</FUNCTION>\r
+                       <FUNCTION>prefix-from-QName</FUNCTION>\r
+                       <FUNCTION>position</FUNCTION>\r
+                       <FUNCTION>one-or-more</FUNCTION>\r
+                       <FUNCTION>number</FUNCTION>\r
+                       <FUNCTION>QName</FUNCTION>\r
+                       <FUNCTION>abs</FUNCTION>\r
+                       <FUNCTION>adjust-date-to-timezone</FUNCTION>\r
+                       <FUNCTION>doc-available</FUNCTION>\r
+                       <FUNCTION>doctype</FUNCTION>\r
+                       <FUNCTION>document</FUNCTION>\r
+                       <FUNCTION>last</FUNCTION>\r
+                       <FUNCTION>local-name</FUNCTION>\r
+                       <FUNCTION>local-name-from-QName</FUNCTION>\r
+                       <FUNCTION>lower-case</FUNCTION>\r
+                       <FUNCTION>match-all</FUNCTION>\r
+                       <FUNCTION>match-any</FUNCTION>\r
+                       <FUNCTION>matches</FUNCTION>\r
+                       <FUNCTION>max</FUNCTION>\r
+                       <FUNCTION>min</FUNCTION>\r
+                       <FUNCTION>minutes-from-dateTime</FUNCTION>\r
+                       <FUNCTION>minutes-from-duration</FUNCTION>\r
+                       <FUNCTION>minutes-from-time</FUNCTION>\r
+                       <FUNCTION>month-from-date</FUNCTION>\r
+                       <FUNCTION>month-from-dateTime</FUNCTION>\r
+                       <FUNCTION>name</FUNCTION>\r
+                       <FUNCTION>namespace-uri</FUNCTION>\r
+                       <FUNCTION>namespace-uri-for-prefix</FUNCTION>\r
+                       <FUNCTION>namespace-uri-from-QName</FUNCTION>\r
+                       <FUNCTION>node-name</FUNCTION>\r
+                       <FUNCTION>normalize-space</FUNCTION>\r
+                       <FUNCTION>lang</FUNCTION>\r
+                       <FUNCTION>item-at</FUNCTION>\r
+                       <FUNCTION>document-uri</FUNCTION>\r
+                       <FUNCTION>empty</FUNCTION>\r
+                       <FUNCTION>encode-for-uri</FUNCTION>\r
+                       <FUNCTION>ends-with</FUNCTION>\r
+                       <FUNCTION>error</FUNCTION>\r
+                       <FUNCTION>escape-html-uri</FUNCTION>\r
+                       <FUNCTION>escape-uri</FUNCTION>\r
+                       <FUNCTION>exactly-one</FUNCTION>\r
+                       <FUNCTION>exists</FUNCTION>\r
+                       <FUNCTION>false</FUNCTION>\r
+                       <FUNCTION>floor</FUNCTION>\r
+                       <FUNCTION>hours-from-dateTime</FUNCTION>\r
+                       <FUNCTION>hours-from-duration</FUNCTION>\r
+                       <FUNCTION>hours-from-time</FUNCTION>\r
+                       <FUNCTION>id</FUNCTION>\r
+                       <FUNCTION>implicit-timezone</FUNCTION>\r
+                       <FUNCTION>in-scope-prefixes</FUNCTION>\r
+                       <FUNCTION>index-of</FUNCTION>\r
+                       <FUNCTION>insert-before</FUNCTION>\r
+                       <FUNCTION>iri-to-uri</FUNCTION>\r
+                       <FUNCTION>string-pad</FUNCTION>\r
+                       <FUNCTION>string-to-codepoints</FUNCTION>\r
+                       <FUNCTION>sum</FUNCTION>\r
+                       <FUNCTION>timezone-from-date</FUNCTION>\r
+                       <FUNCTION>timezone-from-dateTime</FUNCTION>\r
+                       <FUNCTION>timezone-from-time</FUNCTION>\r
+                       <FUNCTION>not</FUNCTION>\r
+                       <FUNCTION>tokenize</FUNCTION>\r
+                       <FUNCTION>translate</FUNCTION>\r
+                       <FUNCTION>true</FUNCTION>\r
+                       <FUNCTION>unordered</FUNCTION>\r
+                       <FUNCTION>upper-case</FUNCTION>\r
+                       <FUNCTION>xcollection</FUNCTION>\r
+                       <FUNCTION>year-from-date</FUNCTION>\r
+                       <FUNCTION>year-from-dateTime</FUNCTION>\r
+                       <FUNCTION>substring-before</FUNCTION>\r
+                       <FUNCTION>subsequence</FUNCTION>\r
+                       <FUNCTION>substring</FUNCTION>\r
+                       <FUNCTION>substring-after</FUNCTION>\r
+\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/xsl.xml b/extra/xmode/modes/xsl.xml
new file mode 100644 (file)
index 0000000..94a5610
--- /dev/null
@@ -0,0 +1,436 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd"><!--\r
+  ======================================================================\r
+  Edit mode for XSLT 1.0 and XSLT 2.0\r
+  ======================================================================\r
+  Token types:\r
+\r
+  COMMENT1    XML comments\r
+  COMMENT2    XPath 2.0 comments - top or nested within COMMENT3\r
+  COMMENT3    XPath 2.0 comments - nested within COMMENT2\r
+  COMMENT4    Default task names used in Task List\r
+  DIGIT       Digits\r
+  FUNCTION    Functions\r
+  INVALID     -\r
+  KEYWORD1    XSLT element names\r
+  KEYWORD2    XSLT attribute names\r
+  KEYWORD3    Attribute values\r
+  KEYWORD4    Axes specifiers\r
+  LABEL       Namespace prefixes\r
+  LITERAL1    String literals\r
+  LITERAL2    Parameter and variable references\r
+  LITERAL3    Entity references and processing instructions\r
+  LITERAL4    DTD constructs and CDATA sections\r
+  MARKUP      Result elements and extension elements\r
+  OPERATOR    XPath 2.0 keywords + some other stuff\r
+  ======================================================================\r
+-->\r
+\r
+<MODE>\r
+\r
+  <PROPS>\r
+    <PROPERTY NAME="commentStart" VALUE="&lt;!--"/>\r
+    <PROPERTY NAME="commentEnd" VALUE="--&gt;"/>\r
+  </PROPS>\r
+\r
+  <RULES HIGHLIGHT_DIGITS="FALSE" IGNORE_CASE="FALSE">\r
+\r
+    <!-- XML comments -->\r
+    <SPAN DELEGATE="TASKS" TYPE="COMMENT1">\r
+      <BEGIN>&lt;!--</BEGIN>\r
+      <END>--&gt;</END>\r
+    </SPAN>\r
+\r
+    <!-- Assume 'xsl' prefix for XSLT elements -->\r
+    <SPAN_REGEXP HASH_CHAR="&lt;" DELEGATE="XSLTAGS" TYPE="KEYWORD2">\r
+      <BEGIN>&lt;(?=xsl:)</BEGIN>\r
+      <END>&gt;</END>\r
+    </SPAN_REGEXP>\r
+\r
+    <SPAN_REGEXP HASH_CHAR="&lt;" DELEGATE="XSLTAGS" TYPE="KEYWORD2">\r
+      <BEGIN>&lt;(?=/xsl:)</BEGIN>\r
+      <END>&gt;</END>\r
+    </SPAN_REGEXP>\r
+\r
+    <!-- CDATA marked sections. Reuse common xml mode -->\r
+    <SPAN TYPE="KEYWORD2" DELEGATE="xml::CDATA">\r
+      <BEGIN>&lt;![CDATA[</BEGIN>\r
+      <END>]]&gt;</END>\r
+    </SPAN>\r
+\r
+    <!-- DTD constructs. Reuse common xml mode  -->\r
+    <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">\r
+      <BEGIN>&lt;!</BEGIN>\r
+      <END>&gt;</END>\r
+    </SPAN>\r
+\r
+    <!-- Entity references -->\r
+    <SPAN TYPE="LITERAL3" NO_WORD_BREAK="TRUE">\r
+      <BEGIN>&amp;</BEGIN>\r
+      <END>;</END>\r
+    </SPAN>\r
+\r
+    <!-- Processing instructions -->\r
+    <SPAN TYPE="LITERAL3">\r
+      <BEGIN>&lt;?</BEGIN>\r
+      <END>?&gt;</END>\r
+    </SPAN>\r
+\r
+    <!-- Result elements and extension elements -->\r
+    <SPAN DELEGATE="TAGS" TYPE="MARKUP">\r
+      <BEGIN>&lt;</BEGIN>\r
+      <END>&gt;</END>\r
+    </SPAN>\r
+  </RULES>\r
+\r
+  <!-- XML comments -->\r
+  <RULES DEFAULT="COMMENT1" IGNORE_CASE="FALSE" SET="TASKS">\r
+    <!-- Default task names used in Task List -->\r
+    <KEYWORDS>\r
+      <COMMENT4>DEBUG:</COMMENT4>\r
+      <COMMENT4>DONE:</COMMENT4>\r
+      <COMMENT4>FIXME:</COMMENT4>\r
+      <COMMENT4>IDEA:</COMMENT4>\r
+      <COMMENT4>NOTE:</COMMENT4>\r
+      <COMMENT4>QUESTION:</COMMENT4>\r
+      <COMMENT4>TODO:</COMMENT4>\r
+      <COMMENT4>XXX</COMMENT4>\r
+      <COMMENT4>???</COMMENT4>\r
+    </KEYWORDS>\r
+  </RULES>\r
+\r
+  <!-- Result elements and extension elements -->\r
+  <RULES DEFAULT="MARKUP" HIGHLIGHT_DIGITS="FALSE" NO_WORD_SEP=".-_:" SET="TAGS">\r
+\r
+    <!-- Highlight all AVTs in result attribute values. -->\r
+    <SPAN TYPE="MARKUP" DELEGATE="AVT">\r
+      <BEGIN>"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN>\r
+    <SPAN TYPE="MARKUP" DELEGATE="AVT">\r
+      <BEGIN>'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN>\r
+\r
+    <!-- Namespace declarations -->\r
+    <SEQ TYPE="OPERATOR">xmlns:</SEQ>\r
+    <!-- Default namespace declaration. Not really used in XSLT -->\r
+    <SEQ TYPE="OPERATOR">xmlns</SEQ>\r
+\r
+    <!-- Namespace prefixes -->\r
+    <MARK_PREVIOUS TYPE="LABEL">:</MARK_PREVIOUS>\r
+\r
+  </RULES>\r
+\r
+  <!-- AVTs -->\r
+  <RULES DEFAULT="KEYWORD3" HIGHLIGHT_DIGITS="FALSE" NO_WORD_SEP=".-_:" SET="AVT">\r
+\r
+    <!-- Literal curly braces ({}) must be written as {{ or }} -->\r
+    <SEQ>{{</SEQ>\r
+    <SEQ>}}</SEQ><!-- Does nothing. Is overridden by the SPAN below. -->\r
+\r
+    <!-- The AVT itself -->\r
+    <SPAN DELEGATE="XPATH" TYPE="OPERATOR">\r
+      <BEGIN>{</BEGIN>\r
+      <END>}</END>\r
+    </SPAN>\r
+\r
+    <!-- Entity references -->\r
+    <SPAN TYPE="LITERAL3" NO_WORD_BREAK="TRUE">\r
+      <BEGIN>&amp;</BEGIN>\r
+      <END>;</END>\r
+    </SPAN>\r
+\r
+  </RULES>\r
+\r
+  <!-- XSLT tags -->\r
+  <RULES DEFAULT="KEYWORD2" HIGHLIGHT_DIGITS="FALSE" NO_WORD_SEP=".-_:" SET="XSLTAGS">\r
+\r
+    <!-- If we spot something that looks like an AVT, assume it is. Lazy, I know... -->\r
+    <SPAN TYPE="KEYWORD2" DELEGATE="AVT">\r
+      <BEGIN>"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN>\r
+    <SPAN TYPE="KEYWORD2" DELEGATE="AVT">\r
+      <BEGIN>'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN>\r
+\r
+    <!-- XSLT attributes that contains XPath expressions or match patterns -->\r
+    <!-- count -->\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="count" DELEGATE="XPATH">\r
+      <BEGIN>count[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN_REGEXP>\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="count" DELEGATE="XPATH">\r
+      <BEGIN>count[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN_REGEXP>\r
+    <!-- from -->\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="from" DELEGATE="XPATH">\r
+      <BEGIN>from[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN_REGEXP>\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="from" DELEGATE="XPATH">\r
+      <BEGIN>from[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN_REGEXP>\r
+    <!-- group-adjacent -->\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-adjacent" DELEGATE="XPATH">\r
+      <BEGIN>group-adjacent[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN_REGEXP>\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-adjacent" DELEGATE="XPATH">\r
+      <BEGIN>group-adjacent[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN_REGEXP>\r
+    <!-- group-by -->\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-by" DELEGATE="XPATH">\r
+      <BEGIN>group-by[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN_REGEXP>\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-by" DELEGATE="XPATH">\r
+      <BEGIN>group-by[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN_REGEXP>\r
+    <!-- group-ending-with -->\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-ending-with" DELEGATE="XPATH">\r
+      <BEGIN>group-ending-with[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN_REGEXP>\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-ending-with" DELEGATE="XPATH">\r
+      <BEGIN>group-ending-with[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN_REGEXP>\r
+    <!-- group-starting-with -->\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-starting-with" DELEGATE="XPATH">\r
+      <BEGIN>group-starting-with[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN_REGEXP>\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-starting-with" DELEGATE="XPATH">\r
+      <BEGIN>group-starting-with[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN_REGEXP>\r
+    <!-- match -->\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="match" DELEGATE="XPATH">\r
+      <BEGIN>match[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN_REGEXP>\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="match" DELEGATE="XPATH">\r
+      <BEGIN>match[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN_REGEXP>\r
+    <!-- select -->\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="select" DELEGATE="XPATH">\r
+      <BEGIN>select[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN_REGEXP>\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="select" DELEGATE="XPATH">\r
+      <BEGIN>select[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN_REGEXP>\r
+    <!-- test -->\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="test" DELEGATE="XPATH">\r
+      <BEGIN>test[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN_REGEXP>\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="test" DELEGATE="XPATH">\r
+      <BEGIN>test[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN_REGEXP>\r
+    <!-- use -->\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="use" DELEGATE="XPATH">\r
+      <BEGIN>use[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN_REGEXP>\r
+    <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="use" DELEGATE="XPATH">\r
+      <BEGIN>use[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN_REGEXP>\r
+\r
+    <!-- Namespace declarations -->\r
+    <SEQ TYPE="OPERATOR">xmlns:</SEQ>\r
+    <!-- Default namespace declaration. Not really used in XSLT -->\r
+    <SEQ TYPE="OPERATOR">xmlns</SEQ>\r
+\r
+    <!-- Namespace prefixes -->\r
+    <MARK_PREVIOUS TYPE="LABEL">:</MARK_PREVIOUS>\r
+\r
+    <!-- XSLT 2.0 element names -->\r
+    <KEYWORDS>\r
+      <KEYWORD1>analyze-string</KEYWORD1>\r
+      <KEYWORD1>apply-imports</KEYWORD1>\r
+      <KEYWORD1>apply-templates</KEYWORD1>\r
+      <KEYWORD1>attribute</KEYWORD1>\r
+      <KEYWORD1>attribute-set</KEYWORD1>\r
+      <KEYWORD1>call-template</KEYWORD1>\r
+      <KEYWORD1>character-map</KEYWORD1>\r
+      <KEYWORD1>choose</KEYWORD1>\r
+      <KEYWORD1>comment</KEYWORD1>\r
+      <KEYWORD1>copy</KEYWORD1>\r
+      <KEYWORD1>copy-of</KEYWORD1>\r
+      <KEYWORD1>date-format</KEYWORD1>\r
+      <KEYWORD1>decimal-format</KEYWORD1>\r
+      <KEYWORD1>element</KEYWORD1>\r
+      <KEYWORD1>fallback</KEYWORD1>\r
+      <KEYWORD1>for-each</KEYWORD1>\r
+      <KEYWORD1>for-each-group</KEYWORD1>\r
+      <KEYWORD1>function</KEYWORD1>\r
+      <KEYWORD1>if</KEYWORD1>\r
+      <KEYWORD1>import</KEYWORD1>\r
+      <KEYWORD1>import-schema</KEYWORD1>\r
+      <KEYWORD1>include</KEYWORD1>\r
+      <KEYWORD1>key</KEYWORD1>\r
+      <KEYWORD1>matching-substring</KEYWORD1>\r
+      <KEYWORD1>message</KEYWORD1>\r
+      <KEYWORD1>namespace</KEYWORD1>\r
+      <KEYWORD1>namespace-alias</KEYWORD1>\r
+      <KEYWORD1>next-match</KEYWORD1>\r
+      <KEYWORD1>non-matching-substring</KEYWORD1>\r
+      <KEYWORD1>number</KEYWORD1>\r
+      <KEYWORD1>otherwise</KEYWORD1>\r
+      <KEYWORD1>output</KEYWORD1>\r
+      <KEYWORD1>output-character</KEYWORD1>\r
+      <KEYWORD1>param</KEYWORD1>\r
+      <KEYWORD1>preserve-space</KEYWORD1>\r
+      <KEYWORD1>processing-instruction</KEYWORD1>\r
+      <KEYWORD1>result-document</KEYWORD1>\r
+      <KEYWORD1>sequence</KEYWORD1>\r
+      <KEYWORD1>sort</KEYWORD1>\r
+      <KEYWORD1>sort-key</KEYWORD1>\r
+      <KEYWORD1>strip-space</KEYWORD1>\r
+      <KEYWORD1>stylesheet</KEYWORD1>\r
+      <KEYWORD1>template</KEYWORD1>\r
+      <KEYWORD1>text</KEYWORD1>\r
+      <KEYWORD1>transform</KEYWORD1>\r
+      <KEYWORD1>value-of</KEYWORD1>\r
+      <KEYWORD1>variable</KEYWORD1>\r
+      <KEYWORD1>when</KEYWORD1>\r
+      <KEYWORD1>with-param</KEYWORD1>\r
+    </KEYWORDS>\r
+\r
+  </RULES>\r
+\r
+  <RULES DEFAULT="KEYWORD3" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[\p{Digit}]+([\p{Punct}][\p{Digit}]+)?" NO_WORD_SEP=".-_" SET="XPATH">\r
+    <!-- String literals -->\r
+    <SPAN TYPE="LITERAL1">\r
+      <BEGIN>"</BEGIN>\r
+      <END>"</END>\r
+    </SPAN>\r
+    <SPAN TYPE="LITERAL1">\r
+      <BEGIN>'</BEGIN>\r
+      <END>'</END>\r
+    </SPAN>\r
+\r
+    <!-- XPath comments -->\r
+    <SPAN TYPE="COMMENT2" DELEGATE="XPATHCOMMENT2">\r
+      <BEGIN>(:</BEGIN>\r
+      <END>:)</END>\r
+    </SPAN>\r
+\r
+    <!-- Axes specifiers -->\r
+    <MARK_PREVIOUS TYPE="KEYWORD4">::</MARK_PREVIOUS>\r
+    <!-- Abbreviated 'attribute::' -->\r
+    <SEQ TYPE="KEYWORD4">@</SEQ>\r
+\r
+    <!-- XPath 2.0 operators + some other stuff -->\r
+    <!-- Comparison expressions -->\r
+    <SEQ TYPE="OPERATOR">=</SEQ>\r
+    <SEQ TYPE="OPERATOR">!=</SEQ>\r
+    <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
+    <SEQ TYPE="OPERATOR">&amp;gt;</SEQ><!-- Treat as operator -->\r
+    <SEQ TYPE="OPERATOR">&amp;lt;</SEQ><!-- Treat as operator -->\r
+    <!-- Optional occurrence indicator -->\r
+    <SEQ TYPE="OPERATOR">?</SEQ>\r
+    <!-- Addition operator, one-or-more occurrence indicator-->\r
+    <SEQ TYPE="OPERATOR">+</SEQ>\r
+    <!-- Multiplication operator, zero-or-more occurrence indicator, node test -->\r
+    <SEQ TYPE="OPERATOR">*</SEQ>\r
+    <!-- Path expression step separator -->\r
+    <SEQ TYPE="OPERATOR">/</SEQ>\r
+    <!-- Union operator -->\r
+    <SEQ TYPE="OPERATOR">|</SEQ>\r
+    <!-- Sequence expression item separator -->\r
+    <SEQ TYPE="OPERATOR">,</SEQ>\r
+\r
+    <!-- Predicates -->\r
+    <SPAN TYPE="OPERATOR" DELEGATE="XPATH">\r
+      <BEGIN>[</BEGIN>\r
+      <END>]</END>\r
+    </SPAN>\r
+\r
+    <!-- Entity references -->\r
+    <SPAN TYPE="LITERAL3" NO_WORD_BREAK="TRUE">\r
+      <BEGIN>&amp;</BEGIN>\r
+      <END>;</END>\r
+    </SPAN>\r
+\r
+    <!-- Namespace prefixes -->\r
+    <MARK_PREVIOUS TYPE="LABEL">:</MARK_PREVIOUS>\r
+\r
+    <!-- Functions -->\r
+    <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
+       <SEQ TYPE="OPERATOR">)</SEQ>\r
+\r
+    <!-- Variables -->\r
+    <MARK_FOLLOWING TYPE="LITERAL2">$</MARK_FOLLOWING>\r
+    <!-- XPath 2.0 keywords + some other stuff -->\r
+    <KEYWORDS>\r
+      <!-- Keywords -->\r
+      <OPERATOR>and</OPERATOR>\r
+      <OPERATOR>as</OPERATOR>\r
+      <OPERATOR>castable</OPERATOR>\r
+      <OPERATOR>div</OPERATOR>\r
+      <OPERATOR>else</OPERATOR>\r
+      <OPERATOR>eq</OPERATOR>\r
+      <OPERATOR>every</OPERATOR>\r
+      <OPERATOR>except</OPERATOR>\r
+      <OPERATOR>for</OPERATOR>\r
+      <OPERATOR>ge</OPERATOR>\r
+      <OPERATOR>gt</OPERATOR>\r
+      <OPERATOR>idiv</OPERATOR>\r
+      <OPERATOR>if</OPERATOR>\r
+      <OPERATOR>in</OPERATOR>\r
+      <OPERATOR>instance</OPERATOR>\r
+      <OPERATOR>intersect</OPERATOR>\r
+      <OPERATOR>is</OPERATOR>\r
+      <OPERATOR>isnot</OPERATOR>\r
+      <OPERATOR>le</OPERATOR>\r
+      <OPERATOR>lt</OPERATOR>\r
+      <OPERATOR>mod</OPERATOR>\r
+      <OPERATOR>nillable</OPERATOR>\r
+      <OPERATOR>ne</OPERATOR>\r
+      <OPERATOR>of</OPERATOR>\r
+      <OPERATOR>or</OPERATOR>\r
+      <OPERATOR>return</OPERATOR>\r
+      <OPERATOR>satisfies</OPERATOR>\r
+      <OPERATOR>some</OPERATOR>\r
+      <OPERATOR>then</OPERATOR>\r
+      <OPERATOR>to</OPERATOR>\r
+      <OPERATOR>treat</OPERATOR>\r
+      <OPERATOR>union</OPERATOR>\r
+\r
+      <!-- Subtraction operator -->\r
+      <OPERATOR>-</OPERATOR>\r
+\r
+    </KEYWORDS>\r
+\r
+  </RULES>\r
+\r
+  <!-- XPath comments - top or nested within COMMENT3 -->\r
+  <RULES DEFAULT="COMMENT2" SET="XPATHCOMMENT2">\r
+    <SPAN TYPE="COMMENT3" DELEGATE="XPATHCOMMENT3">\r
+      <BEGIN>(:</BEGIN>\r
+      <END>:)</END>\r
+    </SPAN>\r
+  </RULES>\r
+\r
+  <!-- XPath comments - nested within COMMENT2 -->\r
+  <RULES DEFAULT="COMMENT3" SET="XPATHCOMMENT3">\r
+    <SPAN TYPE="COMMENT2" DELEGATE="XPATHCOMMENT2">\r
+      <BEGIN>(:</BEGIN>\r
+      <END>:)</END>\r
+    </SPAN>\r
+  </RULES>\r
+\r
+</MODE>\r
diff --git a/extra/xmode/modes/zpt.xml b/extra/xmode/modes/zpt.xml
new file mode 100644 (file)
index 0000000..f962acf
--- /dev/null
@@ -0,0 +1,173 @@
+<?xml version="1.0"?>\r
+\r
+<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
+\r
+<!--\r
+<MODE NAME="zpt"                       FILE="zpt.xml"\r
+                               FILE_NAME_GLOB="*.{pt,zpt}"/>\r
+-->\r
+\r
+<MODE>\r
+       <PROPS>\r
+               <PROPERTY NAME="commentStart" VALUE="&lt;!--" />\r
+               <PROPERTY NAME="commentEnd" VALUE="--&gt;" />\r
+       </PROPS>\r
+       <RULES IGNORE_CASE="TRUE">\r
+               <!-- SGML comment -->\r
+               <SPAN TYPE="COMMENT1">\r
+                       <BEGIN>&lt;!--</BEGIN>\r
+                       <END>--&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- JavaScript -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="JAVASCRIPT">\r
+                       <BEGIN>&lt;SCRIPT</BEGIN>\r
+                       <END>&lt;/SCRIPT&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- stylesheet -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="CSS">\r
+                       <BEGIN>&lt;STYLE</BEGIN>\r
+                       <END>&lt;/STYLE&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- DTD instructions -->\r
+               <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">\r
+                       <BEGIN>&lt;!</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- markup tags -->\r
+               <SPAN TYPE="MARKUP" DELEGATE="TAGS">\r
+                       <BEGIN>&lt;</BEGIN>\r
+                       <END>&gt;</END>\r
+               </SPAN>\r
+\r
+               <!-- SGML entities -->\r
+               <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">\r
+                       <BEGIN>&amp;</BEGIN>\r
+                       <END>;</END>\r
+               </SPAN>\r
+       </RULES>\r
+\r
+       <!-- ESCAPE is not exactly right but it is needed to correctly\r
+            handle JavaScript in on* parameters -->\r
+       <RULES SET="TAGS" DEFAULT="MARKUP" ESCAPE="\">\r
+               <SPAN TYPE="LITERAL1" DELEGATE="ATTRIBUTE">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL1" DELEGATE="ATTRIBUTE">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SEQ TYPE="OPERATOR">=</SEQ>\r
+\r
+               <KEYWORDS>\r
+                       <!-- TAL -->\r
+                       <KEYWORD1>tal</KEYWORD1>\r
+                       <KEYWORD3>attributes</KEYWORD3>\r
+                       <KEYWORD3>define</KEYWORD3>\r
+                       <KEYWORD3>condition</KEYWORD3>\r
+                       <KEYWORD3>content</KEYWORD3>\r
+                       <KEYWORD3>omit-tag</KEYWORD3>\r
+                       <KEYWORD3>on-error</KEYWORD3>\r
+                       <KEYWORD3>repeat</KEYWORD3>\r
+                       <KEYWORD3>replace</KEYWORD3>\r
+\r
+                       <!-- METAL -->\r
+                       <KEYWORD1>metal</KEYWORD1>\r
+                       <KEYWORD3>define-macro</KEYWORD3>\r
+                       <KEYWORD3>define-slot</KEYWORD3>\r
+                       <KEYWORD3>fill-slot</KEYWORD3>\r
+                       <KEYWORD3>use-macro</KEYWORD3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="ATTRIBUTE" DEFAULT="LITERAL1">\r
+               <SEQ TYPE="OPERATOR">:</SEQ>\r
+               <SEQ TYPE="OPERATOR">;</SEQ>\r
+               <SEQ TYPE="OPERATOR">?</SEQ>\r
+               <SEQ TYPE="OPERATOR">|</SEQ>\r
+               <SEQ TYPE="LITERAL2">$$</SEQ>\r
+\r
+               <SPAN TYPE="LITERAL4">\r
+                       <BEGIN>"</BEGIN>\r
+                       <END>"</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="LITERAL4">\r
+                       <BEGIN>'</BEGIN>\r
+                       <END>'</END>\r
+               </SPAN>\r
+\r
+               <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">\r
+                       <BEGIN>${</BEGIN>\r
+                       <END>}</END>\r
+               </SPAN>\r
+               <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING>\r
+               <!-- highligh python expressions -->\r
+               <!--\r
+               <SEQ TYPE="LITERAL2" DELEGATE="python::MAIN"\r
+                       AT_LINE_START="FALSE">python:</SEQ>\r
+               -->\r
+               <KEYWORDS>\r
+                       <!-- TALES expression types -->\r
+                       <KEYWORD4>exists</KEYWORD4>\r
+                       <KEYWORD4>nocall</KEYWORD4>\r
+                       <KEYWORD4>not</KEYWORD4>\r
+                       <KEYWORD4>path</KEYWORD4>\r
+                       <KEYWORD4>python</KEYWORD4>\r
+                       <KEYWORD4>string</KEYWORD4>\r
+                       <KEYWORD4>structure</KEYWORD4>\r
+\r
+                       <!-- built-in TALES variables -->\r
+                       <!-- NOTE: root, here, container, template, \r
+                            request, user, and modules are optional -->\r
+                       <LITERAL3>CONTEXTS</LITERAL3>\r
+                       <LITERAL3>attrs</LITERAL3>\r
+                       <LITERAL3>container</LITERAL3>\r
+                       <LITERAL3>default</LITERAL3>\r
+                       <LITERAL3>here</LITERAL3>\r
+                       <LITERAL3>modules</LITERAL3>\r
+                       <LITERAL3>nothing</LITERAL3>\r
+                       <LITERAL3>options</LITERAL3>\r
+                       <LITERAL3>repeat</LITERAL3>\r
+                       <LITERAL3>request</LITERAL3>\r
+                       <LITERAL3>root</LITERAL3>\r
+                       <LITERAL3>template</LITERAL3>\r
+                       <LITERAL3>user</LITERAL3>\r
+\r
+                       <!-- repeat variable attributes -->\r
+                       <LITERAL3>index</LITERAL3>\r
+                       <LITERAL3>number</LITERAL3>\r
+                       <LITERAL3>even</LITERAL3>\r
+                       <LITERAL3>odd</LITERAL3>\r
+                       <LITERAL3>start</LITERAL3>\r
+                       <LITERAL3>end</LITERAL3>\r
+                       <LITERAL3>first</LITERAL3>\r
+                       <LITERAL3>last</LITERAL3>\r
+                       <LITERAL3>length</LITERAL3>\r
+                       <LITERAL3>letter</LITERAL3>\r
+                       <LITERAL3>Letter</LITERAL3>\r
+                       <LITERAL3>roman</LITERAL3>\r
+                       <LITERAL3>Roman</LITERAL3>\r
+               </KEYWORDS>\r
+       </RULES>\r
+\r
+       <RULES SET="JAVASCRIPT" DEFAULT="MARKUP" IGNORE_CASE="TRUE">\r
+               <SEQ TYPE="MARKUP" DELEGATE="javascript::MAIN">&gt;</SEQ>\r
+               <SEQ TYPE="MARKUP" DELEGATE="BACK_TO_HTML">SRC=</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="BACK_TO_HTML" DEFAULT="MARKUP">\r
+               <SEQ TYPE="MARKUP" DELEGATE="zpt::MAIN">&gt;</SEQ>\r
+       </RULES>\r
+\r
+       <RULES SET="CSS" DEFAULT="MARKUP">\r
+               <SEQ TYPE="MARKUP" DELEGATE="css::MAIN">&gt;</SEQ>\r
+       </RULES>\r
+</MODE>\r
+\r
diff --git a/extra/xmode/rules/rules-tests.factor b/extra/xmode/rules/rules-tests.factor
new file mode 100644 (file)
index 0000000..404dbb8
--- /dev/null
@@ -0,0 +1,6 @@
+IN: temporary
+USING: xmode.rules tools.test ;
+
+[ { 1 2 3 } ] [ f { 1 2 3 } ?push-all ] unit-test
+[ { 1 2 3 } ] [ { 1 2 3 } f ?push-all ] unit-test
+[ V{ 1 2 3 4 5 } ] [ { 1 2 3 } { 4 5 } ?push-all ] unit-test
diff --git a/extra/xmode/rules/rules.factor b/extra/xmode/rules/rules.factor
new file mode 100755 (executable)
index 0000000..acc6308
--- /dev/null
@@ -0,0 +1,129 @@
+USING: xmode.tokens xmode.keyword-map kernel
+sequences vectors assocs strings memoize regexp ;
+IN: xmode.rules
+
+TUPLE: string-matcher string ignore-case? ;
+
+C: <string-matcher> string-matcher
+
+! Based on org.gjt.sp.jedit.syntax.ParserRuleSet
+TUPLE: rule-set
+name
+props
+keywords
+rules
+imports
+terminate-char
+ignore-case?
+default
+escape-rule
+highlight-digits?
+digit-re
+no-word-sep
+finalized?
+;
+
+: init-rule-set ( ruleset -- )
+    #! Call after constructor.
+    >r H{ } clone H{ } clone V{ } clone r>
+    {
+        set-rule-set-rules
+        set-rule-set-props
+        set-rule-set-imports
+    } set-slots ;
+
+: <rule-set> ( -- ruleset )
+    rule-set construct-empty dup init-rule-set ;
+
+MEMO: standard-rule-set ( id -- ruleset )
+    <rule-set> [ set-rule-set-default ] keep ;
+
+: import-rule-set ( import ruleset -- )
+    rule-set-imports push ;
+
+: inverted-index ( hashes key index -- )
+    [ swapd [ ?push ] change-at ] 2curry each ;
+
+: ?push-all ( seq1 seq2 -- seq1+seq2 )
+    [
+        over [ >r V{ } like r> over push-all ] [ nip ] if
+    ] when* ;
+
+: rule-set-no-word-sep* ( ruleset -- str )
+    dup rule-set-no-word-sep
+    swap rule-set-keywords dup [ keyword-map-no-word-sep* ] when
+    "_" 3append ;
+
+! Match restrictions
+TUPLE: matcher text at-line-start? at-whitespace-end? at-word-start? ;
+
+C: <matcher> matcher
+
+! Based on org.gjt.sp.jedit.syntax.ParserRule
+TUPLE: rule
+no-line-break?
+no-word-break?
+no-escape?
+start
+end
+match-token
+body-token
+delegate
+chars
+;
+
+: construct-rule ( class -- rule )
+    >r rule construct-empty r> construct-delegate ; inline
+
+TUPLE: seq-rule ;
+
+TUPLE: span-rule ;
+
+TUPLE: eol-span-rule ;
+
+: init-span ( rule -- )
+    dup rule-delegate [ drop ] [
+        dup rule-body-token standard-rule-set
+        swap set-rule-delegate
+    ] if ;
+
+: init-eol-span ( rule -- )
+    dup init-span
+    t swap set-rule-no-line-break? ;
+
+TUPLE: mark-following-rule ;
+
+TUPLE: mark-previous-rule ;
+
+TUPLE: escape-rule ;
+
+: <escape-rule> ( string -- rule )
+    f <string-matcher> f f f <matcher>
+    escape-rule construct-rule
+    [ set-rule-start ] keep ;
+
+GENERIC: text-hash-char ( text -- ch )
+
+M: f text-hash-char ;
+
+M: string-matcher text-hash-char string-matcher-string first ;
+
+M: regexp text-hash-char drop f ;
+
+: rule-chars* ( rule -- string )
+    dup rule-chars
+    swap rule-start matcher-text
+    text-hash-char [ add ] when* ;
+
+: add-rule ( rule ruleset -- )
+    >r dup rule-chars* >upper swap
+    r> rule-set-rules inverted-index ;
+
+: add-escape-rule ( string ruleset -- )
+    over [
+        >r <escape-rule> r>
+        2dup set-rule-set-escape-rule
+        add-rule
+    ] [
+        2drop
+    ] if ;
diff --git a/extra/xmode/summary.txt b/extra/xmode/summary.txt
new file mode 100644 (file)
index 0000000..4482fb8
--- /dev/null
@@ -0,0 +1 @@
+Syntax highlighting engine using jEdit mode files
diff --git a/extra/xmode/tokens/tokens.factor b/extra/xmode/tokens/tokens.factor
new file mode 100644 (file)
index 0000000..14a4858
--- /dev/null
@@ -0,0 +1,21 @@
+USING: parser words sequences namespaces kernel assocs ;
+IN: xmode.tokens
+
+! Based on org.gjt.sp.jedit.syntax.Token
+SYMBOL: tokens
+
+: string>token ( string -- id ) tokens get at ;
+
+: TOKENS:
+    ";" parse-tokens [
+        create-in dup define-symbol
+        dup word-name swap
+    ] H{ } map>assoc tokens set-global ; parsing
+
+TOKENS: COMMENT1 COMMENT2 COMMENT3 COMMENT4 DIGIT FUNCTION
+INVALID KEYWORD1 KEYWORD2 KEYWORD3 KEYWORD4 LABEL LITERAL1
+LITERAL2 LITERAL3 LITERAL4 MARKUP OPERATOR END NULL ;
+
+TUPLE: token str id ;
+
+C: <token> token
diff --git a/extra/xmode/utilities/test.xml b/extra/xmode/utilities/test.xml
new file mode 100644 (file)
index 0000000..09a83fa
--- /dev/null
@@ -0,0 +1 @@
+<company type="public"><employee name="Joe">VP Sales</employee><employee name="Jane">CFO</employee></company>
diff --git a/extra/xmode/utilities/utilities-tests.factor b/extra/xmode/utilities/utilities-tests.factor
new file mode 100644 (file)
index 0000000..d31aac6
--- /dev/null
@@ -0,0 +1,53 @@
+IN: temporary
+USING: xmode.utilities tools.test xml xml.data
+kernel strings vectors sequences io.files prettyprint assocs ;
+
+[ "hi" 3 ] [
+    { 1 2 3 4 5 6 7 8 } [ H{ { 3 "hi" } } at ] map-find
+] unit-test
+
+[ f f ] [
+    { 1 2 3 4 5 6 7 8 } [ H{ { 11 "hi" } } at ] map-find
+] unit-test
+
+TUPLE: company employees type ;
+
+: <company> V{ } clone f company construct-boa ;
+
+: add-employee company-employees push ;
+
+<TAGS: parse-employee-tag
+
+TUPLE: employee name description ;
+
+TAG: employee
+    employee construct-empty
+    { { "name" f set-employee-name } { f set-employee-description } }
+    init-from-tag swap add-employee ;
+
+TAGS>
+
+\ parse-employee-tag see
+
+: parse-company-tag
+    [
+        <company>
+        { { "type" >upper set-company-type } }
+        init-from-tag dup
+    ] keep
+    tag-children [ tag? ] subset
+    [ parse-employee-tag ] curry* each ;
+
+[
+    T{ company f
+        V{
+            T{ employee f "Joe" "VP Sales" }
+            T{ employee f "Jane" "CFO" }
+        }
+        "PUBLIC"
+        "This is a great company"
+    }
+] [
+    "extra/xmode/utilities/test.xml"
+    resource-path <file-reader> read-xml parse-company-tag
+] unit-test
diff --git a/extra/xmode/utilities/utilities.factor b/extra/xmode/utilities/utilities.factor
new file mode 100644 (file)
index 0000000..d4096b1
--- /dev/null
@@ -0,0 +1,58 @@
+USING: sequences assocs kernel quotations namespaces xml.data
+xml.utilities combinators macros parser words ;
+IN: xmode.utilities
+
+: implies >r not r> or ; inline
+
+: child-tags ( tag -- seq ) tag-children [ tag? ] subset ;
+
+: map-find ( seq quot -- result elt )
+    f -rot
+    [ nip ] swap [ dup ] 3compose find
+    >r [ drop f ] unless r> ; inline
+
+: tag-init-form ( spec -- quot )
+    {
+        { [ dup quotation? ] [ [ object get tag get ] swap compose ] }
+        { [ dup length 2 = ] [
+            first2 [
+                >r >r tag get children>string
+                r> [ execute ] when* object get r> execute
+            ] 2curry
+        ] }
+        { [ dup length 3 = ] [
+            first3 [
+                >r >r tag get at
+                r> [ execute ] when* object get r> execute
+            ] 3curry
+        ] }
+    } cond ;
+
+: with-tag-initializer ( tag obj quot -- )
+    [ object set tag set ] swap compose with-scope ; inline
+
+MACRO: (init-from-tag) ( specs -- )
+    [ tag-init-form ] map concat [ ] like
+    [ with-tag-initializer ] curry ;
+
+: init-from-tag ( tag tuple specs -- tuple )
+    over >r (init-from-tag) r> ; inline
+
+SYMBOL: tag-handlers
+SYMBOL: tag-handler-word
+
+: <TAGS:
+    CREATE tag-handler-word set
+    H{ } clone tag-handlers set ; parsing
+
+: (TAG:) swap tag-handlers get set-at ;
+
+: TAG:
+    f set-word
+    scan parse-definition
+    (TAG:) ; parsing
+
+: TAGS>
+    tag-handler-word get
+    tag-handlers get >alist [ >r dup name-tag r> case ] curry
+    define-compound ; parsing
diff --git a/extra/xmode/xmode.dtd b/extra/xmode/xmode.dtd
new file mode 100644 (file)
index 0000000..d96df44
--- /dev/null
@@ -0,0 +1,166 @@
+<!-- Syntax tokens -->\r
+<!ENTITY % token_values "NULL | COMMENT1 | COMMENT2 | COMMENT3 | COMMENT4 |\r
+       DIGIT | FUNCTION | INVALID | KEYWORD1 | KEYWORD2 | KEYWORD3 | KEYWORD4 |\r
+       LABEL | LITERAL1 | LITERAL2 | LITERAL3 | LITERAL4 | MARKUP | OPERATOR" >\r
+<!ENTITY % tokens "( %token_values; )" >\r
+\r
+<!-- Entities for attributes shared by multiple rules -->\r
+<!ENTITY % att-bool '( TRUE | FALSE ) #IMPLIED' >\r
+<!ENTITY % att-type 'TYPE %tokens; #IMPLIED' >\r
+<!ENTITY % att-position-mix 'AT_LINE_START %att-bool;\r
+       AT_WHITESPACE_END %att-bool;\r
+       AT_WORD_START %att-bool; ' >\r
+<!ENTITY % att-match-type 'MATCH_TYPE ( %token_values; | CONTEXT | RULE ) #IMPLIED' >\r
+<!ENTITY % att-delegate 'DELEGATE CDATA #IMPLIED' >\r
+<!ENTITY % att-span-mix 'NO_LINE_BREAK %att-bool;\r
+       NO_WORD_BREAK %att-bool;\r
+       NO_ESCAPE %att-bool; '>\r
+<!ENTITY % att-hash-char 'HASH_CHAR CDATA #IMPLIED\r
+       HASH_CHARS CDATA #IMPLIED' >\r
+\r
+<!-- MODE element -->\r
+<!ELEMENT MODE ( PROPS?, RULES* ) >\r
+\r
+<!-- MODE children -->\r
+<!-- PROPS element -->\r
+<!ELEMENT PROPS ( PROPERTY+ ) >\r
+\r
+<!-- PROPS children -->\r
+<!ELEMENT PROPERTY EMPTY >\r
+<!ATTLIST PROPERTY\r
+       NAME CDATA #REQUIRED\r
+       VALUE CDATA #REQUIRED >\r
+\r
+<!-- RULES element -->\r
+<!ELEMENT RULES ( PROPS?, ( IMPORT | TERMINATE | SEQ | SEQ_REGEXP | SPAN\r
+       | SPAN_REGEXP | EOL_SPAN | EOL_SPAN_REGEXP | MARK_PREVIOUS\r
+       | MARK_FOLLOWING )*, KEYWORDS? ) >\r
+\r
+<!-- RULES attributes -->\r
+<!ATTLIST RULES\r
+       SET CDATA #IMPLIED\r
+       IGNORE_CASE %att-bool;\r
+       HIGHLIGHT_DIGITS %att-bool;\r
+       DIGIT_RE CDATA #IMPLIED\r
+       ESCAPE CDATA #IMPLIED\r
+       DEFAULT %tokens; #IMPLIED\r
+       NO_WORD_SEP CDATA #IMPLIED >\r
+\r
+<!-- IMPORT element -->\r
+<!ELEMENT IMPORT EMPTY >\r
+<!ATTLIST IMPORT DELEGATE CDATA #REQUIRED >\r
+\r
+<!-- TERMINATE element -->\r
+<!ELEMENT TERMINATE EMPTY >\r
+<!ATTLIST TERMINATE AT_CHAR CDATA #REQUIRED >\r
+\r
+<!-- SEQ element -->\r
+<!ELEMENT SEQ ( #PCDATA ) >\r
+\r
+<!-- SEQ attributes -->\r
+<!ATTLIST SEQ\r
+       %att-type;\r
+       %att-position-mix;\r
+       %att-delegate; >\r
+\r
+<!-- SEQ_REGEXP element -->\r
+<!ELEMENT SEQ_REGEXP ( #PCDATA ) >\r
+\r
+<!-- SEQ_REGEXP attributes -->\r
+<!ATTLIST SEQ_REGEXP\r
+       %att-hash-char;\r
+       %att-type;\r
+       %att-position-mix;\r
+       %att-delegate; >\r
+\r
+<!-- SPAN element -->\r
+<!ELEMENT SPAN ( BEGIN, END ) >\r
+\r
+<!-- SPAN attributes -->\r
+<!ATTLIST SPAN\r
+       %att-type;\r
+       %att-position-mix;\r
+       %att-span-mix;\r
+       %att-match-type;\r
+       %att-delegate; >\r
+\r
+<!-- SPAN_REGEXP element -->\r
+<!ELEMENT SPAN_REGEXP ( BEGIN, END ) >\r
+\r
+<!-- SPAN_REGEXP attributes -->\r
+<!ATTLIST SPAN_REGEXP\r
+       %att-hash-char;\r
+       %att-type;\r
+       %att-position-mix;\r
+       %att-span-mix;\r
+       %att-match-type;\r
+       %att-delegate; >\r
+\r
+<!-- SPAN and SPAN_REGEXP children -->\r
+<!ELEMENT BEGIN ( #PCDATA ) >\r
+<!ATTLIST BEGIN %att-position-mix; >\r
+<!ELEMENT END ( #PCDATA ) >\r
+<!ATTLIST END %att-position-mix; >\r
+\r
+<!-- EOL_SPAN element -->\r
+<!ELEMENT EOL_SPAN ( #PCDATA ) >\r
+\r
+<!-- EOL_SPAN attributes -->\r
+<!ATTLIST EOL_SPAN\r
+       %att-type;\r
+       %att-position-mix;\r
+       %att-match-type;\r
+       %att-delegate; >\r
+\r
+<!-- EOL_SPAN_REGEXP element -->\r
+<!ELEMENT EOL_SPAN_REGEXP ( #PCDATA ) >\r
+\r
+<!-- EOL_SPAN_REGEXP attributes -->\r
+<!ATTLIST EOL_SPAN_REGEXP\r
+       %att-hash-char;\r
+       %att-type;\r
+       %att-position-mix;\r
+       %att-match-type;\r
+       %att-delegate; >\r
+\r
+<!-- MARK_FOLLOWING element -->\r
+<!ELEMENT MARK_FOLLOWING ( #PCDATA ) >\r
+\r
+<!-- MARK_FOLLOWING attributes -->\r
+<!ATTLIST MARK_FOLLOWING\r
+       %att-type;\r
+       %att-position-mix;\r
+       %att-match-type; >\r
+\r
+<!-- MARK_PREVIOUS element -->\r
+<!ELEMENT MARK_PREVIOUS ( #PCDATA ) >\r
+\r
+<!-- MARK_PREVIOUS attributes -->\r
+<!ATTLIST MARK_PREVIOUS\r
+       %att-type;\r
+       %att-position-mix;\r
+       %att-match-type; >\r
+\r
+<!-- KEYWORDS element -->\r
+<!ELEMENT KEYWORDS (%tokens;)+ >\r
+\r
+<!-- KEYWORDS children -->\r
+<!ELEMENT COMMENT1 ( #PCDATA ) >\r
+<!ELEMENT COMMENT2 ( #PCDATA ) >\r
+<!ELEMENT COMMENT3 ( #PCDATA ) >\r
+<!ELEMENT COMMENT4 ( #PCDATA ) >\r
+<!ELEMENT DIGIT ( #PCDATA ) >\r
+<!ELEMENT FUNCTION ( #PCDATA ) >\r
+<!ELEMENT KEYWORD1 ( #PCDATA ) >\r
+<!ELEMENT KEYWORD2 ( #PCDATA ) >\r
+<!ELEMENT KEYWORD3 ( #PCDATA ) >\r
+<!ELEMENT KEYWORD4 ( #PCDATA ) >\r
+<!ELEMENT LABEL ( #PCDATA ) >\r
+<!ELEMENT LITERAL1 ( #PCDATA ) >\r
+<!ELEMENT LITERAL2 ( #PCDATA ) >\r
+<!ELEMENT LITERAL3 ( #PCDATA ) >\r
+<!ELEMENT LITERAL4 ( #PCDATA ) >\r
+<!ELEMENT MARKUP ( #PCDATA ) >\r
+<!ELEMENT NULL ( #PCDATA ) >\r
+<!ELEMENT OPERATOR ( #PCDATA ) >\r
+<!ELEMENT INVALID ( #PCDATA ) >\r
index 98f9104549e68ecf01a6149d28866bad8d5ef6bd..4913a57b7578032251c3c2a8ff499b448a4d121b 100755 (executable)
@@ -32,12 +32,16 @@ check_ret() {
 }
 
 check_gcc_version() {
+       echo -n "Checking gcc version..."
        GCC_VERSION=`gcc --version`
+       check_ret gcc
        if [[ $GCC_VERSION == *3.3.* ]] ; then
+               echo "bad!"
                echo "You have a known buggy version of gcc (3.3)"
                echo "Install gcc 3.4 or higher and try again."
                exit 3
        fi
+       echo "ok."
 }
 
 check_installed_programs() {
@@ -53,16 +57,20 @@ check_installed_programs() {
 check_library_exists() {
        GCC_TEST=factor-library-test.c
        GCC_OUT=factor-library-test.out
-       echo "Checking for library $1"
+       echo -n "Checking for library $1..."
        echo "int main(){return 0;}" > $GCC_TEST
        gcc $GCC_TEST -o $GCC_OUT -l $1
        if [[ $? -ne 0 ]] ; then
+               echo "not found!"
                echo "Warning: library $1 not found."
                echo "***Factor will compile NO_UI=1"
                NO_UI=1
        fi
        rm -f $GCC_TEST
+       check_ret rm
        rm -f $GCC_OUT
+       check_ret rm
+       echo "found."
 }
 
 check_X11_libraries() {
@@ -87,7 +95,9 @@ check_factor_exists() {
 }
 
 find_os() {
+       echo "Finding OS..."
        uname_s=`uname -s`
+       check_ret uname
        case $uname_s in
                CYGWIN_NT-5.2-WOW64) OS=windows-nt;;
                *CYGWIN_NT*) OS=windows-nt;;
@@ -100,11 +110,14 @@ find_os() {
 }
 
 find_architecture() {
+       echo "Finding ARCH..."
        uname_m=`uname -m`
+       check_ret uname
        case $uname_m in
           i386) ARCH=x86;;
           i686) ARCH=x86;;
           *86) ARCH=x86;;
+          *86_64) ARCH=x86;;
           "Power Macintosh") ARCH=ppc;;
        esac
 }
@@ -115,6 +128,7 @@ write_test_program() {
 }
 
 find_word_size() {
+       echo "Finding WORD..."
        C_WORD=factor-word-size
        write_test_program
        gcc -o $C_WORD $C_WORD.c
@@ -138,20 +152,31 @@ echo_build_info() {
        echo FACTOR_BINARY=$FACTOR_BINARY
        echo MAKE_TARGET=$MAKE_TARGET
        echo BOOT_IMAGE=$BOOT_IMAGE
+       echo MAKE_IMAGE_TARGET=$MAKE_IMAGE_TARGET
 }
 
 set_build_info() {
        if ! [[ -n $OS && -n $ARCH && -n $WORD ]] ; then
+               echo "OS: $OS"
+               echo "ARCH: $ARCH"
+               echo "WORD: $WORD"
                echo "OS, ARCH, or WORD is empty.  Please report this"
                exit 5
        fi
        
        MAKE_TARGET=$OS-$ARCH-$WORD
+       MAKE_IMAGE_TARGET=$ARCH.$WORD
        BOOT_IMAGE=boot.$ARCH.$WORD.image
        if [[ $OS == macosx && $ARCH == ppc ]] ; then
+               MAKE_IMAGE_TARGET=$OS-$ARCH
                MAKE_TARGET=$OS-$ARCH
                BOOT_IMAGE=boot.macosx-ppc.image
        fi
+       if [[ $OS == linux && $ARCH == ppc ]] ; then
+               MAKE_IMAGE_TARGET=$OS-$ARCH
+               MAKE_TARGET=$OS-$ARCH
+               BOOT_IMAGE=boot.linux-ppc.image
+       fi
 }
 
 find_build_info() {
@@ -170,6 +195,7 @@ git_clone() {
 }
 
 git_pull_factorcode() {
+       echo "Updating the git repository from factorcode.org..."
        git pull git://factorcode.org/git/factor.git
        check_ret git
 }
@@ -203,11 +229,11 @@ get_boot_image() {
 maybe_download_dlls() {
        if [[ $OS == windows-nt ]] ; then
                wget http://factorcode.org/dlls/freetype6.dll
-               check_ret
+               check_ret wget
                wget http://factorcode.org/dlls/zlib1.dll
-               check_ret
+               check_ret wget
                chmod 777 *.dll
-               check_ret
+               check_ret chmod
        fi
 }
 
@@ -216,7 +242,7 @@ bootstrap() {
 }
 
 usage() {
-       echo "usage: $0 install|update"
+       echo "usage: $0 install|install-x11|update|quick-update"
 }
 
 install() {
@@ -239,13 +265,34 @@ update() {
        git_pull_factorcode
        make_clean
        make_factor
+}
+
+update_bootstrap() {
        delete_boot_images
        get_boot_image
        bootstrap
 }
 
+refresh_image() {
+       ./$FACTOR_BINARY -script -e="refresh-all save 0 USE: system exit"
+       check_ret factor
+}
+
+make_boot_image() {
+       ./$FACTOR_BINARY -script -e="\"$MAKE_IMAGE_TARGET\" USE: bootstrap.image make-image save 0 USE: system exit"
+       check_ret factor
+       
+}
+
+install_libraries() {
+       sudo apt-get install libc6-dev libfreetype6-dev libx11-dev xorg-dev glutg3-dev wget git-core git-doc rlwrap
+}
+
 case "$1" in
        install) install ;;
-       update) update ;;
+       install-x11) install_libraries; install ;;
+       self-update) update; make_boot_image; bootstrap;;
+       quick-update) update; refresh_image ;;
+       update) update; update_bootstrap ;;
        *) usage ;;
 esac
index 6a25ba201229130c26123a0cacd93a2670218755..3a080e0ae65c019eb5281df40433f4da7c102dad 100644 (file)
@@ -1,15 +1,21 @@
+source misc/version.sh
+
 TARGET=$1
 
-if [ "$TARGET" = "x86" ]; then
+if [ "$1" = "x86" ]; then
        CPU="x86.32"
+       TARGET=macosx-x86-32
 else
-       CPU="ppc"
+       CPU="macosx-ppc"
+       TARGET=macosx-ppc
 fi
 
-make macosx-$TARGET
-Factor.app/Contents/MacOS/factor -i=boot.$CPU.image -no-user-init
+BOOT_IMAGE=boot.$CPU.image
+wget http://factorcode.org/images/$VERSION/$BOOT_IMAGE
+
+make $TARGET
+Factor.app/Contents/MacOS/factor -i=$BOOT_IMAGE -no-user-init
 
-VERSION=0.91
 DISK_IMAGE_DIR=Factor-$VERSION
 DISK_IMAGE=Factor-$VERSION-$TARGET.dmg
 
@@ -24,3 +30,6 @@ find core extra fonts misc unmaintained -type f \
        -exec ./cp_dir {} $DISK_IMAGE_DIR/Factor/{} \;
 hdiutil create -srcfolder "$DISK_IMAGE_DIR" -fs HFS+ \
        -volname "$DISK_IMAGE_DIR" "$DISK_IMAGE"
+
+ssh linode mkdir -p w/downloads/$VERSION/
+scp $DISK_IMAGE linode:w/downloads/$VERSION/
diff --git a/misc/source-release.sh b/misc/source-release.sh
new file mode 100644 (file)
index 0000000..37aa98e
--- /dev/null
@@ -0,0 +1,7 @@
+source misc/version.sh
+rm -rf .git
+cd ..
+tar cfz Factor-$VERSION.tar.gz factor/
+
+ssh linode mkdir -p w/downloads/$VERSION/
+scp Factor-$VERSION.tar.gz linode:w/downloads/$VERSION/
diff --git a/misc/version.sh b/misc/version.sh
new file mode 100644 (file)
index 0000000..9c5d02d
--- /dev/null
@@ -0,0 +1 @@
+export VERSION=0.92
index 052dc396ae0147cebeee9a09b7630085d0e1d675..91c5935f81cfa6b4e09a5ba0b8ceb8dd46ba2d03 100644 (file)
@@ -1,19 +1,31 @@
+source misc/version.sh
+
 CPU=$1
-VERSION=0.91
 
 if [ "$CPU" = "x86" ]; then
     FLAGS="-no-sse2"
 fi
 
 make windows-nt-x86
+
+wget http://factorcode.org/dlls/freetype6.dll
+wget http://factorcode.org/dlls/zlib1.dll
+wget http://factorcode.org/images/$VERSION/boot.x86.32.image
+
 CMD="./factor-nt -i=boot.x86.32.image -no-user-init $FLAGS"
 echo $CMD
 $CMD
+rm -rf .git/
 rm -rf Factor.app/
 rm -rf vm/
 rm -f Makefile
 rm -f cp_dir
 rm -f boot.*.image
 
+FILE=Factor-$VERSION-win32-$CPU.zip
+
 cd ..
-zip -r Factor-$VERSION-win32-$CPU.zip Factor/
+zip -r $FILE Factor/
+
+ssh linode mkdir -p w/downloads/$VERSION/
+scp $FILE linode:w/downloads/$VERSION/
diff --git a/unmaintained/alarms/alarms.factor b/unmaintained/alarms/alarms.factor
deleted file mode 100644 (file)
index 0402ead..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-! Copyright (C) 2007 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-
-USING: arrays calendar concurrency generic kernel math
-namespaces sequences threads ;
-IN: alarms-internals
-
-! for now a V{ }, eventually a min-heap to store alarms
-SYMBOL: alarms
-SYMBOL: alarm-receiver
-SYMBOL: alarm-looper
-
-TUPLE: alarm time quot ;
-
-: add-alarm ( alarm -- )
-    alarms get-global push ;
-
-: remove-alarm ( alarm -- )
-    alarms get-global remove alarms set-global ;
-
-: handle-alarm ( alarm -- )
-    dup delegate {
-        { "register" [ add-alarm ] }
-        { "unregister" [ remove-alarm  ] }
-    } case ;
-    
-: expired-alarms ( -- seq )
-    now alarms get-global
-    [ alarm-time compare-timestamps 0 > ] subset-with ;
-
-: unexpired-alarms ( -- seq )
-    now alarms get-global
-    [ alarm-time compare-timestamps 0 <= ] subset-with ;
-
-: call-alarm ( alarm -- )
-    alarm-quot spawn drop ;
-    
-: do-alarms ( -- )
-    alarms get-global expired-alarms
-    [ call-alarm ] each
-    unexpired-alarms alarms set-global ;
-
-: alarm-receive-loop ( -- )
-    receive dup alarm? [ handle-alarm ] [ drop ] if
-    alarm-receive-loop ;
-
-: start-alarm-receiver ( -- )
-    [
-        alarm-receive-loop
-    ] spawn alarm-receiver set-global ;
-
-: alarm-loop ( -- )
-    alarms get-global empty? [
-        do-alarms
-    ] unless 100 sleep alarm-loop ;
-    
-: start-alarm-looper ( -- )
-    [
-        alarm-loop
-    ] spawn alarm-looper set-global ;
-
-: send-alarm ( alarm -- )
-    over set-delegate
-    alarm-receiver get-global send ;
-
-: start-alarm-daemon ( -- process )
-    alarms get-global [
-        V{ } clone alarms set-global
-        start-alarm-looper
-        start-alarm-receiver
-    ] unless ;
-
-start-alarm-daemon
-
-IN: alarms
-
-: register-alarm ( alarm -- )
-    "register" send-alarm ;
-
-: unregister-alarm ( alarm -- )
-    "unregister" send-alarm ;
-
-: change-alarm ( alarm-old alarm-new -- )
-    "register" send-alarm
-    "unregister" send-alarm ;
-
-! Example:
-! now 5 seconds +dt [ "hi" print flush ] <alarm> register-alarm
diff --git a/unmaintained/alarms/load.factor b/unmaintained/alarms/load.factor
deleted file mode 100644 (file)
index 4b52ce6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-REQUIRES: libs/calendar libs/concurrency ;
-PROVIDE: libs/alarms
-{ +files+ {
-    "alarms.factor"
-} } ;
diff --git a/unmaintained/random-tester/load.factor b/unmaintained/random-tester/load.factor
deleted file mode 100644 (file)
index ba69545..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-REQUIRES: libs/lazy-lists libs/null-stream libs/shuffle ;
-PROVIDE: apps/random-tester
-{ +files+ {
-    "utils.factor"
-    "random.factor"
-    "random-tester.factor"
-    "random-tester2.factor"
-    "type.factor"
-} } ;
diff --git a/unmaintained/random-tester/random-tester.factor b/unmaintained/random-tester/random-tester.factor
deleted file mode 100644 (file)
index 649ca9d..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-USING: kernel math math-internals memory sequences namespaces errors
-assocs words  arrays parser compiler syntax io
-quotations tools prettyprint optimizer inference ;
-IN: random-tester
-
-! n-foo>bar -- list of words of type 'foo' that take n parameters
-!              and output a 'bar'
-
-
-! Math vocabulary words
-: 1-x>y
-    {
-        1+ 1- >bignum >digit >fixnum abs absq arg 
-        bitnot bits>double bits>float ceiling cis conjugate cos cosec cosech
-        cosh cot coth denominator double>bits exp float>bits floor imaginary
-        log neg numerator real sec ! next-power-of-2
-        sech sgn sin sinh sq sqrt tan tanh truncate 
-    } ;
-
-: 1-x>y-throws
-    {
-        recip log2
-        asec asech acot acoth acosec acosech acos acosh asin asinh atan atanh
-    } ;
-
-: 2-x>y ( -- seq ) { * + - /f max min polar> bitand bitor bitxor align } ;
-: 2-x>y-throws ( -- seq ) { / /i mod rem } ;
-
-: 1-integer>x
-    {
-        1+ 1- >bignum >digit >fixnum abs absq arg 
-        bitnot bits>double bits>float ceiling cis conjugate cos cosec cosech
-        cosh cot coth denominator exp floor imaginary
-        log neg next-power-of-2 numerator real sec
-        sech sgn sin sinh sq sqrt tan tanh truncate 
-    } ;
-
-: 1-ratio>x
-    {
-        1+ 1- >bignum >digit >fixnum abs absq arg ceiling
-        cis conjugate cos cosec cosech
-        cosh cot coth exp floor imaginary
-        log neg next-power-of-2 real sec
-        sech sgn sin sinh sq sqrt tan tanh truncate 
-    } ;
-
-: 1-float>x ( -- seq )
-    {
-        1+ 1- >bignum >digit >fixnum abs absq arg 
-        ceiling cis conjugate cos cosec cosech
-        cosh cot coth double>bits exp float>bits floor imaginary
-        log neg real sec ! next-power-of-2
-        sech sgn sin sinh sq sqrt tan tanh truncate
-    } ;
-
-: 1-complex>x
-    {
-        1+ 1- abs absq arg conjugate cos cosec cosech
-        cosh cot coth exp imaginary log neg real
-        sec sech sin sinh sq sqrt tan tanh 
-    } ;
-
-: 1-integer>x-throws
-    {
-        recip log2
-        asec asech acot acoth acosec acosech acos acosh asin asinh atan atanh
-    } ;
-
-: 1-ratio>x-throws
-    {
-        recip
-        asec asech acot acoth acosec acosech acos acosh asin asinh atan atanh
-    } ;
-
-: 1-integer>integer
-    {
-        1+ 1- >bignum >digit >fixnum abs absq bitnot ceiling conjugate 
-        denominator floor imaginary
-        neg next-power-of-2 numerator real sgn sq truncate 
-    } ;
-
-: 1-ratio>ratio
-    { 1+ 1- >digit abs absq conjugate neg real sq } ;
-
-: 1-float>float
-    {
-        1+ 1- >digit abs absq arg ceiling
-        conjugate exp floor neg real sq truncate
-    } ;
-
-: 1-complex>complex
-    {
-        1+ 1- abs absq arg conjugate cosec cosech cosh cot coth exp log
-        neg sech sin sinh sq sqrt tanh 
-    } ;
-
-: 2-integer>x { * + - /f max min polar> bitand bitor bitxor align } ;
-: 2-ratio>x { * + - /f max min polar> } ;
-: 2-float>x { float+ float- float* float/f + - * /f max min polar> } ;
-: 2-complex>x { * + - /f } ;
-
-: 2-integer>integer { * + - max min bitand bitor bitxor align } ;
-: 2-ratio>ratio { * + - max min } ;
-: 2-float>float { float* float+ float- float/f max min /f + - } ;
-: 2-complex>complex { * + - /f } ;
-
-
-SYMBOL: last-quot
-SYMBOL: first-arg
-SYMBOL: second-arg
-: 0-runtime-check ( quot -- )
-    #! Checks the runtime only, not the compiler
-    #! Evaluates the quotation twice and makes sure the results agree
-    [ last-quot set ] keep
-    [ call ] keep
-    call
-    ! 2dup swap unparse write " " write unparse print flush
-    = [ last-quot get . "problem in runtime" throw ] unless ;
-
-: 1-runtime-check ( quot -- )
-    #! Checks the runtime only, not the compiler
-    #! Evaluates the quotation twice and makes sure the results agree
-    #! For quotations that are given one argument
-    [ last-quot set first-arg set ] 2keep
-    [ call ] 2keep
-    call
-    2dup swap unparse write " " write unparse print flush
-    = [ "problem in runtime" throw ] unless ;
-
-: 1-interpreted-vs-compiled-check ( x quot -- ) 
-    #! Checks the runtime output vs the compiler output
-    #! quot: ( x -- y )
-    2dup swap unparse write " " write . flush
-    [ last-quot set first-arg set ] 2keep
-    [ call ] 2keep compile-1
-    2dup swap unparse write " " write unparse print flush
-    = [ "problem in math1" throw ] unless ;
-
-: 2-interpreted-vs-compiled-check ( x y quot -- )
-    #! Checks the runtime output vs the compiler output
-    #! quot: ( x y -- z )
-    .s flush
-    [ last-quot set first-arg set second-arg set ] 3keep
-    [ call ] 3keep compile-1
-    2dup swap unparse write " " write unparse print flush
-    = [ "problem in math2" throw ] unless ;
-
-: 0-interpreted-vs-compiled-check-catch ( quot -- )
-    #! Check the runtime output vs the compiler output for words that throw
-    #!
-    dup .
-    [ last-quot set ] keep
-    [ catch [ "caught: " write dup print-error ] when* ] keep 
-    [ compile-1 ] catch [ nip "caught: " write dup print-error ] when*
-    = [ "problem in math3" throw ] unless ;
-
-: 1-interpreted-vs-compiled-check-catch ( quot -- )
-    #! Check the runtime output vs the compiler output for words that throw
-    2dup swap unparse write " " write .
-    ! "." write
-    [ last-quot set first-arg set ] 2keep
-    [ catch [ nip "caught: " write dup print-error ] when* ] 2keep 
-    [ compile-1 ] catch [ 2nip "caught: " write dup print-error ] when*
-    = [ "problem in math4" throw ] unless ;
-
-: 2-interpreted-vs-compiled-check-catch ( quot -- )
-    #! Check the runtime output vs the compiler output for words that throw
-    ! 3dup rot unparse write " " write swap unparse write " " write .
-    "." write
-    [ last-quot set first-arg set second-arg set ] 3keep
-    [ catch [ 2nip "caught: " write dup print-error ] when* ] 3keep
-    [ compile-1 ] catch [ 2nip nip "caught: " write dup print-error ] when*
-    = [ "problem in math5" throw ] unless ;
-
-
-! RANDOM QUOTATIONS TO TEST
-: random-1-integer>x-quot ( -- quot ) 1-integer>x random 1quotation ;
-: random-1-ratio>x-quot ( -- quot ) 1-ratio>x random 1quotation ;
-: random-1-float>x-quot ( -- quot ) 1-float>x random 1quotation ;
-: random-1-complex>x-quot ( -- quot ) 1-complex>x random 1quotation ;
-
-: test-1-integer>x ( -- )
-    random-integer random-1-integer>x-quot 1-interpreted-vs-compiled-check ;
-: test-1-ratio>x ( -- )
-    random-ratio random-1-ratio>x-quot 1-interpreted-vs-compiled-check ;
-: test-1-float>x ( -- )
-    random-float random-1-float>x-quot 1-interpreted-vs-compiled-check ;
-: test-1-complex>x ( -- )
-    random-complex random-1-complex>x-quot 1-interpreted-vs-compiled-check ;
-
-
-: random-1-float>float-quot ( -- obj ) 1-float>float random 1quotation ;
-: random-2-float>float-quot ( -- obj ) 2-float>float random 1quotation ;
-: nrandom-2-float>float-quot ( -- obj )
-    [
-        5
-        [
-            {
-                [ 2-float>float random , random-float , ]
-                [ 1-float>float random ,  ]
-            } do-one
-        ] times 
-        2-float>float random ,
-    ] [ ] make ;
-
-: test-1-float>float ( -- )
-    random-float random-1-float>float-quot 1-interpreted-vs-compiled-check ;
-: test-2-float>float ( -- )
-    random-float random-float random-2-float>float-quot
-    2-interpreted-vs-compiled-check ;
-
-: test-n-2-float>float ( -- )
-    random-float random-float nrandom-2-float>float-quot
-    2-interpreted-vs-compiled-check ;
-
-: test-1-integer>x-runtime ( -- )
-    random-integer random-1-integer>x-quot 1-runtime-check ;
-
-: random-1-integer>x-throws-quot ( -- obj ) 1-integer>x-throws random 1quotation ;
-: random-1-ratio>x-throws-quot ( -- obj ) 1-ratio>x-throws random 1quotation ;
-: test-1-integer>x-throws ( -- obj )
-    random-integer random-1-integer>x-throws-quot
-    1-interpreted-vs-compiled-check-catch ;
-: test-1-ratio>x-throws ( -- obj )
-    random-ratio random-1-ratio>x-throws-quot
-    1-interpreted-vs-compiled-check-catch ;
-
-
-
-: test-2-integer>x-throws ( -- )
-    [
-        random-integer , random-integer ,
-        2-x>y-throws random ,
-    ] [ ] make 2-interpreted-vs-compiled-check-catch ;
-
-! : test-^-ratio ( -- )
-    ! [
-        ! random-ratio , random-ratio , \ ^ ,
-    ! ] [ ] make interp-compile-check-catch ;
-
-: test-0-float?-when
-    [
-        random-number , \ dup , \ float? , 1-float>x random 1quotation , \ when ,
-    ] [ ] make 0-runtime-check ;
-
-: test-1-integer?-when
-    random-integer [
-        \ dup , \ integer? , 1-integer>x random 1quotation , \ when ,
-    ] [ ] make 1-interpreted-vs-compiled-check ;
-
-: test-1-ratio?-when
-    random-ratio [
-        \ dup , \ ratio? , 1-ratio>x random 1quotation , \ when ,
-    ] [ ] make 1-interpreted-vs-compiled-check ;
-
-: test-1-float?-when
-    random-float [
-        \ dup , \ float? , 1-float>x random 1quotation , \ when ,
-    ] [ ] make 1-interpreted-vs-compiled-check ;
-
-: test-1-complex?-when
-    random-complex [
-        \ dup , \ complex? , 1-complex>x random 1quotation , \ when ,
-    ] [ ] make 1-interpreted-vs-compiled-check ;
-
-
-: many-word-test ( -- )
-    #! defines words a1000 down to a0, which does a trivial addition
-    "random-tester-scratchpad" vocabularies get delete-at
-    "random-tester-scratchpad" set-in
-    "a0" "random-tester-scratchpad" create [ 1 1 + ] define-compound
-    100 [
-        [ 1+ "a" swap unparse append "random-tester-scratchpad" create ] keep
-        "a" swap unparse append [ parse ] catch [ :1 ] when define-compound
-    ] each ;
-
-: compile-loop ( -- )
-    10 [ many-word-test "a100" parse first compile ] times ;
-
-: random-test
-    "----" print
-    {
-        test-1-integer>x
-        test-1-ratio>x
-        test-1-float>x
-        test-1-complex>x
-        test-1-integer>x-throws
-        test-1-ratio>x-throws
-        test-1-float>float
-        test-2-float>float
-        ! test-n-2-float>float
-        test-1-integer>x-runtime
-        ! test-0-float?-when
-        test-1-integer?-when
-        test-1-ratio?-when
-        test-1-float?-when
-        test-1-complex?-when
-        ! full-gc
-        ! code-gc
-    } random dup . execute nl ;
-
diff --git a/unmaintained/random-tester/random-tester2.factor b/unmaintained/random-tester/random-tester2.factor
deleted file mode 100644 (file)
index 8a49830..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-USING: compiler errors inference interpreter io kernel math
-memory namespaces prettyprint random-tester sequences tools
-quotations words arrays definitions generic graphs
-hashtables byte-arrays assocs network ;
-IN: random-tester2
-
-: dangerous-words ( -- array )
-    {
-        die
-        set-walker-hook exit
-        >r r> ndrop
-
-        set-callstack set-word set-word-prop
-        set-catchstack set-namestack set-retainstack
-        set-continuation-retain continuation-catch
-        set-continuation-name catchstack retainstack
-        set-no-math-method-generic
-        set-no-math-method-right
-        set-check-method-class
-        set-check-create-name
-        set-pathname-string
-        set-check-create-vocab
-        set-check-method-generic
-        <check-create> check-create?
-        reset-generic forget-class
-        create forget-word forget-vocab forget
-        forget-methods forget-predicate
-        remove-word-prop empty-method
-        continue-with <continuation>
-
-        define-compound define make-generic
-        define-method define-predicate-class
-        define-tuple-class define-temp define-tuple-slots
-        define-writer define-predicate define-generic
-        (define-union-class)
-        define-declared define-class
-        define-union-class define-inline
-        ?make-generic define-reader define-slot define-slots
-        define-typecheck define-slot-word define-union-class
-        define-simple-generic with-methods define-constructor
-        predicate-word condition-continuation define-symbol
-        tuple-predicate (sort-classes)
-
-        stdio
-        close readln read1 read read-until
-        stream-read stream-readln stream-read1 lines
-        contents stream-copy stream-flush
-        lines-loop
-        stream-format set-line-reader-cr
-        <client-stream> <server> <client>
-        <duplex-stream> <file-writer> <file-reader>
-        <style-stream> style-stream default-constructor
-        init-namespaces plain-writer
-        
-        with-datastack <quotation> datastack-underflow.
-        (delegates) simple-slot , # %
-        <continuation> continue-with set-delegate
-        callcc0 callcc1
-
-        :r :s :c
-
-        (next-power-of-2) (^) d>w/w w>h/h millis
-        (random) ^n integer, first-bignum
-        most-positive-fixnum ^ init-random next-power-of-2
-        most-negative-fixnum
-
-        clear-assoc build-graph
-
-        set-word-def set-word-name
-        set-word-props
-        set set-axis set-delegate set-global set-restart-obj
-
-
-
-        gensym random
-
-        double>bits float>bits >bignum
-
-        class-predicates delete (delete) memq?
-        prune join concat group at+
-        normalize norm vneg vmax vmin v- v+ [v-]
-        times repeat (repeat)
-        supremum infimum at norm-sq
-        product sum curry remove-all member? subseq?
-
-        ! O(n) on bignums
-        (add-vertex) (prune) (split) digits>integer
-        substitute ?head ?tail add-vertex all? base> closure
-        drop-prefix
-        find-last-sep format-column head? index index*
-        last-index mismatch push-new remove-vertex reset-props
-        seq-quot-uses sequence= split split, split1 start
-        start* string-lines string>integer tail? v.
-        
-        stack-picture
-        
-        ! allot crashes
-        at+ natural-sort
-
-        # % (delegates) +@ , . .s <continuation>
-        <quotation> <word> be> bin> callstack changed-word
-        changed-words continue-with counter dec
-        global
-        hex> inc le> namespace namestack nest oct> off
-        on parent-dir path+ 
-        simple-slot simple-slots string>number tabular-output
-        unxref-word xref-word xref-words vocabularies
-        with-datastack
-
-        bind if-graph ! 0 >n ! GCs
-
-        move-backward move-forward open-slice (open-slice) ! infinite loop
-        (assoc-stack) ! infinite loop
-
-        case ! 100000000000 t case ! takes a long time
-    } ;
-
-: safe-words ( -- array )
-    dangerous-words {
-        "arrays" "assocs" "bit-arrays" "byte-arrays"
-        "errors" "generic" "graphs" "hashtables" "io"
-        "kernel" "math" "namespaces" "quotations" "sbufs"
-        "queues" "strings" "sequences" "vectors" "words"
-    } [ words ] map concat seq-diff natural-sort ;
-    
-safe-words \ safe-words set-global
-
-: databank ( -- array )
-    {
-        ! V{ } H{ } V{ 3 } { 3 } { } "" "asdf"
-        pi 1/0. -1/0. 0/0. [ ]
-        f t "" 0 0.0 3.14 2 -3 -7 20 3/4 -3/4 1.2/3 3.5
-        C{ 2 2 } C{ 1/0. 1/0. }
-    } ;
-
-: setup-test ( #data #code -- data... quot )
-    #! variable stack effect
-    >r [ databank random ] times r>
-    [ drop \ safe-words get random ] map >quotation ;
-
-SYMBOL: before
-SYMBOL: after
-SYMBOL: quot
-SYMBOL: err
-err off
-
-: test-compiler ( data... quot -- ... )
-    err off
-    dup quot set
-    datastack clone dup pop* before set
-    [ call ] catch drop datastack clone after set
-    clear
-    before get [ ] each
-    quot get [ compile-1 ] [ err on ] recover ;
-
-: do-test ( data... quot -- )
-    .s flush test-compiler
-    err get [
-        datastack after get 2dup = [
-            2drop
-        ] [
-            [ . ] each
-            "--" print [ . ] each quot get .
-            "not =" throw
-        ] if
-    ] unless
-    clear ;
-
-: random-test* ( #data #code -- )
-    setup-test do-test ;
-
-: run-random-tester2
-    100000000000000 [ 6 3 random-test* ] times ;
-
-
-! A worthwhile test that has not been run extensively
-
-1000 [ drop gensym ] map "syms" set-global
-
-: fooify-test
-    "syms" get-global random
-    2000 random >quotation
-    over set-word-def
-    100 random zero? [ code-gc ] when
-    compile fooify-test ;
-
diff --git a/unmaintained/random-tester/random.factor b/unmaintained/random-tester/random.factor
deleted file mode 100644 (file)
index da9a5c2..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-USING: kernel math sequences namespaces errors hashtables words
-arrays parser compiler syntax io tools prettyprint optimizer
-inference ;
-IN: random-tester
-
-! Tweak me
-: max-length 15 ; inline
-: max-value 1000000000 ; inline
-
-: 10% ( -- bool ) 10 random 8 > ;
-: 20% ( -- bool ) 10 random 7 > ;
-: 30% ( -- bool ) 10 random 6 > ;
-: 40% ( -- bool ) 10 random 5 > ;
-: 50% ( -- bool ) 10 random 4 > ;
-: 60% ( -- bool ) 10 random 3 > ;
-: 70% ( -- bool ) 10 random 2 > ;
-: 80% ( -- bool ) 10 random 1 > ;
-: 90% ( -- bool ) 10 random 0 > ;
-
-! varying bit-length random number
-: random-bits ( n -- int )
-    random 2 swap ^ random ;
-
-: random-seq ( -- seq )
-    { [ ] { } V{ } "" } random
-    [ max-length random [ max-value random , ] times ] swap make ;
-
-: random-string
-    [ max-length random [ max-value random , ] times ] "" make ;
-
-SYMBOL: special-integers
-[ { -1 0 1 } % most-negative-fixnum , most-positive-fixnum , first-bignum , ] 
-{ } make \ special-integers set-global
-: special-integers ( -- seq ) \ special-integers get ;
-SYMBOL: special-floats
-[ { 0.0 -0.0 } % e , pi , 1./0. , -1./0. , 0./0. , epsilon , epsilon neg , ]
-{ } make \ special-floats set-global
-: special-floats ( -- seq ) \ special-floats get ;
-SYMBOL: special-complexes
-[ 
-    { -1 0 1 i -i } %
-    e , e neg , pi , pi neg ,
-    0 pi rect> , 0 pi neg rect> , pi neg 0 rect> , pi pi rect> ,
-    pi pi neg rect> , pi neg pi rect> , pi neg pi neg rect> ,
-    e neg e neg rect> , e e rect> ,
-] { } make \ special-complexes set-global
-: special-complexes ( -- seq ) \ special-complexes get ;
-
-: random-fixnum ( -- fixnum )
-    most-positive-fixnum random 1+ coin-flip [ neg 1- ] when >fixnum ;
-
-: random-bignum ( -- bignum )
-     400 random-bits first-bignum + coin-flip [ neg ] when ;
-    
-: random-integer ( -- n )
-    coin-flip [
-        random-fixnum
-    ] [
-        coin-flip [ random-bignum ] [ special-integers random ] if
-    ] if ;
-
-: random-positive-integer ( -- int )
-    random-integer dup 0 < [
-            neg
-        ] [
-            dup 0 = [ 1 + ] when
-    ] if ;
-
-: random-ratio ( -- ratio )
-    1000000000 dup [ random ] 2apply 1+ / coin-flip [ neg ] when dup [ drop random-ratio ] unless 10% [ drop 0 ] when ;
-
-: random-float ( -- float )
-    coin-flip [ random-ratio ] [ special-floats random ] if
-    coin-flip 
-    [ .0000000000000000001 /f ] [ coin-flip [ .00000000000000001 * ] when ] if
-    >float ;
-
-: random-number ( -- number )
-    {
-        [ random-integer ]
-        [ random-ratio ]
-        [ random-float ]
-    } do-one ;
-
-: random-complex ( -- C )
-    random-number random-number rect> ;
-
diff --git a/unmaintained/random-tester/type.factor b/unmaintained/random-tester/type.factor
deleted file mode 100644 (file)
index bda0284..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-USING: arrays errors generic hashtables io kernel lazy-lists math
-memory modules namespaces null-stream prettyprint random-tester2
-quotations sequences strings
-tools vectors words ;
-IN: random-tester
-
-: inert ;
-TUPLE: inert-object ;
-
-: inputs ( -- seq )
-    {
-        0 -1 -1000000000000000000000000 2
-        inert
-        -29/2
-        1000000000000000000000000000000/1111111111111111111111111111111111
-        3/4
-            -1000000000000000000000000/111111111111111111
-        -3.14 1/0. 0.0 -1/0. 3.14 0/0.
-        20102101010100110110
-        C{ 1 -1 }
-        W{ 55 }
-        { }
-        f  t
-        ""
-        "asdf"
-        [ ]
-        ! DLL" libm.dylib"
-        ! ALIEN: 1
-        T{ inert-object f }
-    }
-    [
-        H{ { 1 2 } { "asdf" "foo" } } clone ,
-        H{ } clone ,
-        V{ 1 0 65536 } clone ,
-        V{ } clone ,
-        SBUF" " clone ,
-        B{ } clone ,
-        ?{ } clone ,
-    ] { } make append ;
-
-TUPLE: success quot inputs outputs input-types output-types ;
-
-SYMBOL: err
-SYMBOL: last-time
-SYMBOL: quot
-SYMBOL: output
-SYMBOL: input
-SYMBOL: silent
-t silent set-global
-
-: test-quot ( input quot -- success/f )
-    ! 2dup swap . . flush
-    ! dup [ hash+ ] = [ 2dup . . flush ] when
-    err off
-    quot set input set
-    silent get [
-        quot get last-time get = [
-            quot get
-            dup . flush
-            last-time set
-        ] unless
-    ] unless
-    [
-        clear
-        input get >vector set-datastack quot get
-        [ [ [ call ] { } make drop ] with-null-stream ]
-        [ err on ] recover
-        datastack clone output set
-    ] with-saved-datastack
-    err get [
-        f
-    ] [
-        quot get input get output get
-        2dup [ [ type ] map ] 2apply <success>
-    ] if ;
-    
-: test-inputs ( word -- seq )
-    [
-        [ word-input-count inputs swap ] keep
-        1quotation [
-            test-quot [ , ] when*
-        ] curry each-permutation
-    ] { } make ;
-    
-: >types ( quot -- seq )
-    map concat prune natural-sort ;
-
-: >output-types ( seq -- seq )
-    #! input seq is the result of test-inputs
-    [ success-output-types ] >types ;
-
-: >input-types ( seq -- seq )
-    #! input seq is the result of test-inputs
-    [ success-input-types ] >types ;
-  
-TUPLE: typed quot inputs outputs ;
-
-: successes>typed ( seq -- typed )
-    dup empty? [
-        drop f { } clone { } clone <typed>
-    ] [
-        [ first success-quot ] keep
-        [ >input-types ] keep >output-types <typed>
-    ] if ;
-
-: word>type-check ( word -- tuple )
-    [
-        dup test-inputs
-        successes>typed ,
-    ] curry [ with-saved-datastack ] { } make first ;
-
-: type>name ( n -- string )
-    dup integer? [
-        {
-            "fixnum"
-            "bignum"
-            "word"
-            "obj"
-            "ratio"
-            "float"
-            "complex"
-            "wrapper"
-            "array"
-            "boolean"
-            "hashtable"
-            "vector"
-            "string"
-            "sbuf"
-            "quotation"
-            "dll"
-            "alien"
-            "tuple"
-        } nth
-    ] when ;
-    
-: replace-subseqs ( seq new old -- seq )
-    [
-        swapd split1 [ append swap add ] [ nip ] if*
-    ] 2each ;
-
-: type-array>name ( seq -- seq )
-    {
-        { "object" { 0 1 2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 } }
-        { "seq3" { 0 1 8 9 11 12 13 14 } }
-        { "seq2" { 0 8 9 11 12 13 14 } }
-        { "seq" { 8 9 11 12 13 14 } }
-        { "number" { 0 1 4 5 6 } }
-        { "real" { 0 1 4 5 } }
-        { "rational" { 0 1 4 } }
-        { "integer" { 0 1 } }
-        { "float/complex" { 5 6 } }
-        { "word/f" { 2 9 } }
-    } flip first2 replace-subseqs [ type>name ] map ;
-
-: buggy?
-    [ word>type-check ] catch [
-        drop f
-    ] [
-        2array [ [ type-array>name ] map ] map
-        [ [ length 1 = ] all? ] all? not
-    ] if ;
-
-: variable-stack-effect?
-    [ word>type-check ] catch nip ;
-
-: find-words ( quot -- seq )
-    \ safe-words get
-    [
-        word-input-count 3 <=
-    ] subset swap subset ;
-
-: find-safe ( -- seq ) [ buggy? not ] find-words ;
-
-: find-buggy ( -- seq ) [ buggy? ] find-words ;
-
-: test-word ( output input word -- ? )
-    1quotation test-quot dup [
-        success-outputs sequence=
-    ] [
-        nip
-    ] if ;
-
-: word-finder ( inputs outputs -- seq )
-    swap safe-words
-    [ >r 2dup r> test-word ] subset 2nip ;
-
-: (enumeration-test)
-    [
-        [ stack-effect effect-in length ] catch [ 4 < ] unless
-    ] subset [ [ test-inputs successes>typed , ] each ] { } make ;
-
-! full-gc finds corrupted memory faster
-
-: enumeration-test ( -- seq )
-    [
-        \ safe-words get
-        f silent set
-        (enumeration-test)
-    ] with-scope ;
-    
-: array>all-quots ( seq n -- seq )
-    [
-        [ 1+ [ >quotation , ] each-permutation ] each-with
-    ] { } make ;
-
-: array>all ( seq n -- seq )
-    dupd array>all-quots append ;
-
-: quot-finder ( inputs outputs -- seq )
-    swap safe-words 2 array>all
-    [
-        3 [ >quotation >r 2dup r> [ test-quot ] keep
-        swap [ , ] [ drop ] if ] each-permutation
-    ] { } make ;
-
-: word-frequency ( -- alist )
-    all-words [ dup usage length 2array ] map sort-values ;
-
diff --git a/unmaintained/random-tester/utils.factor b/unmaintained/random-tester/utils.factor
deleted file mode 100644 (file)
index e699d53..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-USING: generic kernel math sequences namespaces errors
-assocs words arrays parser compiler syntax io
-quotations optimizer inference shuffle tools prettyprint ;
-IN: random-tester
-
-: word-input-count ( word -- n )
-    [ stack-effect effect-in length ] [ 2drop 0 ] recover ;
-    
-: type-error? ( exception -- ? )
-    [ swap execute or ] curry
-    >r { no-method? no-math-method? } f r> reduce ;
-
-! HASHTABLES
-: random-hash-entry ( hash -- key value )
-    [ keys random dup ] keep at ;
-
-: coin-flip ( -- bool ) 2 random zero? ;
-: do-one ( seq -- ) random call ; inline
-
-: nzero-array ( seq -- )
-    dup length >r 0 r> [ pick set-nth ] each-with drop ;
-    
-: zero-array ( n -- seq ) [ drop 0 ] map ;
-
-TUPLE: p-list seq max count count-vec ;
-: make-p-list ( seq n -- tuple )
-    >r dup length [ 1- ] keep r>
-    [ ^ 0 swap 2array ] keep
-    zero-array <p-list> ;
-
-: inc-seq ( seq max -- )
-    2dup [ < ] curry find-last over -1 = [
-        3drop nzero-array
-    ] [
-        nipd 1+ 2over swap set-nth
-        1+ over length rot <slice> nzero-array
-    ] if ;
-
-: inc-count ( tuple -- )
-    [ p-list-count first2 >r 1+ r> 2array ] keep
-    set-p-list-count ;
-
-: get-permutation ( tuple -- seq )
-    [ p-list-seq ] keep p-list-count-vec [ swap nth ] map-with ;
-
-: p-list-next ( tuple -- seq/f )
-    dup p-list-count first2 < [
-        [
-            [ get-permutation ] keep 
-            [ p-list-count-vec ] keep p-list-max
-            inc-seq
-        ] keep inc-count
-    ] [
-        drop f
-    ] if ;
-
-: (permutations) ( tuple -- )
-    dup p-list-next [ , (permutations) ] [ drop ] if* ;
-
-: permutations ( seq n -- seq )
-    make-p-list [ (permutations) ] { } make ;
-
-: (each-permutation) ( tuple quot -- )
-    over p-list-next [
-        [ rot drop swap call ] 3keep
-        drop (each-permutation)
-    ] [
-        2drop
-    ] if* ; inline
-
-: each-permutation ( seq n quot -- )
-    >r make-p-list r> (each-permutation) ;
-
-SYMBOL: saved-datastack
-: with-saved-datastack
-    >r datastack saved-datastack set r> call
-    saved-datastack get set-datastack ; inline
diff --git a/unmaintained/reader/reader.factor b/unmaintained/reader/reader.factor
new file mode 100644 (file)
index 0000000..205b51b
--- /dev/null
@@ -0,0 +1,133 @@
+! Copyright (C) 2006 Chris Double.
+! See http://factorcode.org/license.txt for BSD license.
+!
+! Create a test database like follows:
+!
+!   sqlite3 history.db
+!   > create table rss (url text, title text, link text, primary key (url));
+!   > create table entries (url text, link text, title text, description text, pubdate text, primary key(url, link));
+!   > [eof]
+!
+IN: rss.reader
+USING: kernel html namespaces sequences io quotations
+assocs sqlite.tuple-db sqlite io.files html.elements
+rss webapps.continuation ;
+   
+TUPLE: reader-feed url title link ;
+
+C: <reader-feed> reader-feed
+
+TUPLE: reader-entry url link title description pubdate ;
+
+C: <reader-entry> reader-entry
+
+reader-feed default-mapping set-mapping
+reader-entry default-mapping set-mapping
+
+: init-db ( -- )
+  db get-global [ sqlite-close ] when*
+  "rss-reader.db" exists? [
+    "rss-reader.db" sqlite-open db set-global
+  ] [
+    "rss-reader.db" sqlite-open dup db set-global
+    dup reader-feed create-tuple-table
+    reader-entry create-tuple-table
+  ] if ;
+
+: add-feed ( url -- )
+  "" "" <reader-feed> db get swap insert-tuple ;
+
+: remove-feed ( url -- )
+  f f <reader-feed> db get swap find-tuples [ db get swap delete-tuple ] each ;
+
+: all-urls ( -- urls )
+  f f f <reader-feed> db get swap find-tuples [ reader-feed-url ] map ;
+
+: ask-for-url ( -- url )
+  [
+    <html>
+      <head> <title> "Enter a Feed URL" write </title> </head>
+      <body>
+        <form =action "post" =method form>
+          "URL: " write
+          <input "text" =type "url" =name "100" =size input/>
+          <input "submit" =type input/>
+        </form>
+      </body>
+    </html>
+  ] show "url" swap at ;
+
+: get-entries ( url -- entries )
+  f f f f <reader-entry> db get swap find-tuples ;
+  
+: display-entries ( url -- )
+  [
+    <html> 
+      <head> <title> "View entries for " write over write </title> </head>
+      <body>
+        swap get-entries [
+         <h2> dup reader-entry-title write </h2>
+         <p>
+           reader-entry-description write
+         </p>        
+        ] each        
+        <p> <a =href a> "Back" write </a> </p>
+      </body>
+    </html>
+  ] show 2drop ;
+
+: rss>reader-feed ( url rss -- reader-feed )
+  [ feed-title ] keep feed-link <reader-feed> ;   
+
+: rss-entry>reader-entry ( url entry -- reader-entry )
+  [ entry-link ] keep
+  [ entry-title ] keep
+  [ entry-description ] keep
+  entry-pub-date 
+  <reader-entry> ;
+
+: update-feed-database ( url -- )
+  dup remove-feed
+  dup news-get 
+  2dup rss>reader-feed db get swap save-tuple
+  feed-entries [
+    dupd rss-entry>reader-entry
+    dup >r reader-entry-link f f f <reader-entry> db get swap find-tuples [ db get swap delete-tuple ] each r>
+    db get swap save-tuple
+  ] curry* each ;
+
+: update-feeds ( seq -- )
+  [ update-feed-database ] each
+  [
+    <html>
+      <head> <title> "Feeds Updated" write </title> </head>
+      <body>
+        <p> "Feeds Updated." write </p>
+        <p> <a =href a> "Back" write </a> </p>
+      </body>
+    </html>          
+  ] show drop ;
+  
+: maintain-feeds ( -- )
+  [
+    <html>
+      <head> <title> "Maintain Feeds" write </title> </head>
+      <body>
+       <p>
+          <table "1" =border table>
+            all-urls [
+              <tr> 
+                <td> dup write </td>
+                <td> dup [ remove-feed ] curry "Remove" swap quot-href </td>
+                <td> [ display-entries ] curry "Database" swap quot-href </td>
+              </tr>
+            ] each
+          </table>
+        </p>
+        <p> "Add Feed" [ ask-for-url add-feed ] quot-href </p>
+        <p> "Update Feeds" [ all-urls update-feeds ] quot-href </p>
+      </body>
+    </html>
+  ] show-final ;
+
+"maintain-feeds" [ init-db maintain-feeds ] install-cont-responder
diff --git a/unmaintained/regexp/load.factor b/unmaintained/regexp/load.factor
deleted file mode 100644 (file)
index 989452e..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-REQUIRES: libs/memoize ;
-PROVIDE: libs/regexp
-{ +files+ {
-    "tables.factor"
-    "regexp.factor"
-} } { +tests+ {
-    "test/regexp.factor"
-    "test/tables.factor"
-} } ;
-
diff --git a/unmaintained/regexp/regexp.factor b/unmaintained/regexp/regexp.factor
deleted file mode 100644 (file)
index de233b2..0000000
+++ /dev/null
@@ -1,501 +0,0 @@
-USING: arrays errors generic assocs io kernel math
-memoize namespaces kernel sequences strings tables
-vectors ;
-USE: interpreter
-USE: prettyprint
-USE: test
-
-IN: regexp-internals
-
-SYMBOL: trans-table
-SYMBOL: eps
-SYMBOL: start-state
-SYMBOL: final-state
-
-SYMBOL: paren-count
-SYMBOL: currentstate
-SYMBOL: stack
-
-SYMBOL: bot
-SYMBOL: eot
-SYMBOL: alternation
-SYMBOL: lparen
-SYMBOL: rparen
-
-: regexp-init ( -- )
-    0 paren-count set
-    -1 currentstate set
-    V{ } clone stack set
-    <vector-table> final-state over add-column trans-table set ;
-
-: paren-underflow? ( -- )
-    paren-count get 0 < [ "too many rparen" throw ] when ;
-
-: unbalanced-paren? ( -- )
-    paren-count get 0 > [ "neesds closing paren" throw ] when ;
-
-: inc-paren-count ( -- )
-    paren-count [ 1+ ] change ;
-
-: dec-paren-count ( -- )
-    paren-count [ 1- ] change paren-underflow? ;
-
-: push-stack ( n -- ) stack get push ;
-: next-state ( -- n )
-    currentstate [ 1+ ] change currentstate get ;
-: current-state ( -- n ) currentstate get ;
-
-: set-trans-table ( row col data -- )
-    <entry> trans-table get set-value ;
-
-: add-trans-table ( row col data -- )
-    <entry> trans-table get add-value ;
-
-: data-stack-slice ( token -- seq )
-    stack get reverse [ index ] keep cut reverse dup pop* stack set reverse ;
-
-: find-start-state ( table -- n )
-    start-state t rot find-by-column first ;
-
-: find-final-state ( table -- n )
-    final-state t rot find-by-column first ;
-
-: final-state? ( row table -- ? )
-    get-row final-state swap key? ;
-
-: switch-rows ( r1 r2 -- )
-    [ 2array [ trans-table get get-row ] each ] 2keep
-    2array [ trans-table get set-row ] each ;
-
-: set-table-prop ( prop s table -- )
-    pick over add-column table-rows
-    [
-        pick rot member? [
-            pick t swap rot set-at
-        ] [
-            drop
-        ] if
-    ] assoc-each 2drop ;
-
-: add-numbers ( n obj -- obj )
-    dup sequence? [ 
-        [ + ] map-with
-    ] [
-        dup number? [ + ] [ nip ] if
-    ] if ;
-
-: increment-cols ( n row -- )
-    ! n row
-    dup [ >r pick r> add-numbers swap pick set-at ] assoc-each 2drop ;
-
-: complex-count ( c -- ci-cr+1 )
-    >rect swap - 1+ ;
-
-: copy-rows ( c1 -- )
-    #! copy rows to the bottom with a new row-name c1_range higher
-    [ complex-count ] keep trans-table get table-rows ! 2 C{ 0 1 } rows
-    [ drop [ over real >= ] keep pick imaginary <= and ] assoc-subset nip
-    [ clone [ >r over r> increment-cols ] keep swap pick + trans-table get set-row ] assoc-each ! 2
-    currentstate get 1+ dup pick + 1- rect> push-stack
-    currentstate [ + ] change ;
-
-
-! s1 final f ! s1 eps s2 ! output s0,s3
-: apply-concat ( seq -- )
-    ! "Concat: " write dup .
-    dup pop over pop swap
-    over imaginary final-state f set-trans-table
-    2dup >r imaginary eps r> real add-trans-table
-    >r real r> imaginary rect> swap push ; 
-
-! swap 0, 4 so 0 is incoming
-! ! s1 final f ! s3 final f ! s4 e s0 ! s4 e s2 ! s1 e s5 ! s3 e s5
-! ! s5 final t ! s4,s5 push
-
-SYMBOL: saved-state
-: apply-alternation ( seq -- )
-    ! "Alternation: " print
-    dup pop over pop* over pop swap
-    next-state trans-table get add-row
-    >r >rect >r saved-state set current-state r> rect> r> 
-    ! 4,1 2,3
-    over real saved-state get trans-table get swap-rows
-    saved-state get start-state t set-trans-table
-    over real start-state f set-trans-table
-    over imaginary final-state f set-trans-table
-    dup imaginary final-state f set-trans-table
-    over real saved-state get eps rot add-trans-table
-    dup real saved-state get eps rot add-trans-table
-    imaginary eps next-state add-trans-table
-    imaginary eps current-state add-trans-table
-    current-state final-state t set-trans-table
-    saved-state get current-state rect> swap push ;
-
-! s1 final f ! s1 e s0 ! s2 e s0 ! s2 e s3 ! s1 e s3 ! s3 final t
-: apply-kleene-closure ( -- )
-    ! "Apply kleene closure" print
-    stack get pop
-    next-state trans-table get add-row
-    >rect >r [ saved-state set ] keep current-state 
-        [ trans-table get swap-rows ] keep r> rect>
-
-    dup imaginary final-state f set-trans-table
-    dup imaginary eps pick real add-trans-table
-    saved-state get eps pick real add-trans-table
-    saved-state get eps next-state add-trans-table
-    imaginary eps current-state add-trans-table
-    current-state final-state t add-trans-table
-    saved-state get current-state rect> push-stack ;
-
-: apply-plus-closure ( -- )
-    ! "Apply plus closure" print
-    stack get peek copy-rows
-    apply-kleene-closure stack get apply-concat ;
-
-: apply-alternation? ( seq -- ? )
-    dup length dup 3 < [
-        2drop f
-    ] [
-        2 - swap nth alternation =
-    ] if ; 
-
-: apply-concat? ( seq -- ? )
-    dup length dup 2 < [
-        2drop f
-    ] [
-        2 - swap nth complex?
-    ] if ;
-
-: (apply) ( slice -- slice )
-    dup length 1 > [
-        {
-            { [ dup apply-alternation? ]
-                [ [ apply-alternation ] keep (apply) ] }
-            { [ dup apply-concat? ]
-                [ [ apply-concat ] keep (apply) ] }
-        } cond
-    ] when ;
-
-: apply-til-last ( tokens -- slice )
-    data-stack-slice (apply) ;
-
-: maybe-concat ( -- )
-    stack get apply-concat? [ stack get apply-concat ] when ;
-
-: maybe-concat-loop ( -- )
-    stack get length maybe-concat stack get length > [
-        maybe-concat-loop
-    ] when ;
-
-: create-nontoken-nfa ( tok -- )
-    next-state swap next-state <entry>
-    [ trans-table get set-value ] keep
-    entry-value final-state t set-trans-table
-    current-state [ 1- ] keep rect> push-stack ;
-
-! stack gets:  alternation C{ 0 1 }
-: apply-question-closure ( -- )
-    alternation push-stack
-    eps create-nontoken-nfa stack get apply-alternation ;
-
-! {2}  exactly twice,  {2,} 2 or more,  {2,4} exactly 2,3,4 times
-! : apply-bracket-closure ( c1 -- )
-    ! ;
-SYMBOL: character-class
-SYMBOL: brace
-SYMBOL: escaped-character
-SYMBOL: octal
-SYMBOL: hex
-SYMBOL: control
-SYMBOL: posix
-
-: addto-character-class ( char -- )
-    ;
-
-: make-escaped ( char -- )
-    {
-        ! TODO: POSIX character classes (US-ASCII only)
-        ! TODO: Classes for Unicode blocks and categories
-
-        ! { CHAR: { [ ] } ! left brace
-        { CHAR: \\ [ ] } ! backaslash
-
-        { CHAR: 0 [ ] } ! octal \0n \0nn \0mnn (0 <= m <= 3, 0 <= n <= 7)
-        { CHAR: x [ ] } ! \xhh
-        { CHAR: u [ ] } ! \uhhhh
-        { CHAR: t [ ] } ! tab \u0009
-        { CHAR: n [ ] } ! newline \u000a
-        { CHAR: r [ ] } ! carriage-return \u000d
-        { CHAR: f [ ] } ! form-feed \u000c
-        { CHAR: a [ ] } ! alert (bell) \u0007
-        { CHAR: e [ ] } ! escape \u001b
-        { CHAR: c [ ] } ! control character corresoding to X in \cX
-
-        { CHAR: d [ ] } ! [0-9]
-        { CHAR: D [ ] } ! [^0-9]
-        { CHAR: s [ ] } ! [ \t\n\x0B\f\r]
-        { CHAR: S [ ] } ! [^\s]
-        { CHAR: w [ ] } ! [a-zA-Z_0-9]
-        { CHAR: W [ ] } ! [^\w]
-
-        { CHAR: b [ ] } ! a word boundary
-        { CHAR: B [ ] } ! a non-word boundary
-        { CHAR: A [ ] } ! the beginning of input
-        { CHAR: G [ ] } ! the end of the previous match
-        { CHAR: Z [ ] } ! the end of the input but for the
-                        ! final terminator, if any
-        { CHAR: z [ ] } ! the end of the input
-    } case ;
-
-: handle-character-class ( char -- )
-    {
-        { [ \ escaped-character get ] [ make-escaped \ escaped-character off ] }
-        { [ dup CHAR: ] = ] [ \ character-class off ] }
-        { [ t ] [ addto-character-class ] }
-    } cond ;
-
-: parse-token ( char -- )
-    {
-        ! { [ \ character-class get ] [ ] }
-        ! { [ \ escaped-character get ] [ ] }
-        ! { [ dup CHAR: [ = ] [ \ character-class on ] }
-        ! { [ dup CHAR: \\ = ] [ drop \ escaped-character on ] }
-
-        ! { [ dup CHAR: ^ = ] [ ] }
-        ! { [ dup CHAR: $ = ] [ ] }
-        ! { [ dup CHAR: { = ] [ ] }
-        ! { [ dup CHAR: } = ] [ ] }
-
-        { [ dup CHAR: | = ]
-            [ drop maybe-concat-loop alternation push-stack ] }
-        { [ dup CHAR: * = ]
-            [ drop apply-kleene-closure ] }
-        { [ dup CHAR: + = ]
-            [ drop apply-plus-closure ] }
-        { [ dup CHAR: ? = ]
-            [ drop apply-question-closure ] }
-
-        { [ dup CHAR: ( = ]
-            [ drop inc-paren-count lparen push-stack ] }
-        { [ dup CHAR: ) = ]
-            [
-                drop dec-paren-count lparen apply-til-last
-                stack get push-all
-            ] } ! apply
-
-
-        { [ dup bot = ] [ push-stack ] }
-        { [ dup eot = ]
-            [
-                drop unbalanced-paren? maybe-concat-loop bot apply-til-last
-                dup length 1 = [
-                    pop real start-state t set-trans-table
-                ] [
-                    drop
-                ] if
-            ] }
-        { [ t ] [ create-nontoken-nfa ] }
-    } cond ;
-
-: cut-at-index ( i string ch -- i subseq )
-    -rot [ index* ] 2keep >r >r [ 1+ ] keep r> swap r> subseq ;
-
-: parse-character-class ( index string -- new-index obj )
-    2dup >r 1+ r> nth CHAR: ] = [ >r 1+ r> ] when
-    cut-at-index ;
-
-: (parse-regexp) ( str -- )
-    dup length [
-        2dup swap character-class get [
-            parse-character-class
-            "CHARACTER CLASS: " write .
-            character-class off
-            nip ! adjust index
-        ] [
-            nth parse-token
-        ] if
-    ] repeat ;
-
-: parse-regexp ( str -- )
-    bot parse-token
-    ! [ "parsing: " write dup ch>string . parse-token ] each
-    [ parse-token ] each
-    ! (parse-regexp)
-    eot parse-token ;
-
-: push-all-diff ( seq seq -- diff )
-    [ swap seq-diff ] 2keep push-all ;
-
-: prune-sort ( vec -- vec )
-    prune natural-sort >vector ;
-
-SYMBOL: ttable
-SYMBOL: transition
-SYMBOL: check-list
-SYMBOL: initial-check-list
-SYMBOL: result
-
-: init-find ( data state table -- )
-    ttable set
-    dup sequence? [ clone >vector ] [ V{ } clone [ push ] keep ] if
-    [ check-list set ] keep clone initial-check-list set
-    V{ } clone result set
-    transition set ;
-
-: (find-next-state) ( -- )
-    check-list get [
-        [
-            ttable get get-row transition get swap at*
-                [ dup sequence? [ % ] [ , ] if ] [ drop ] if
-        ] each
-    ] { } make
-    result get push-all-diff
-    check-list set
-    result get prune-sort result set ;
-
-: (find-next-state-recursive) ( -- )
-    check-list get empty? [ (find-next-state) (find-next-state-recursive) ] unless ;
-
-: find-epsilon-closure ( state table -- vec )
-    eps -rot init-find
-    (find-next-state-recursive) result get initial-check-list get append natural-sort ;
-
-: find-next-state ( data state table -- vec )
-    find-epsilon-closure check-list set
-    V{ } clone result set transition set
-    (find-next-state) result get ttable get find-epsilon-closure ;
-
-: filter-cols ( vec -- vec )
-    #! remove info columns state-state, eps, final
-    clone start-state over delete-at eps over delete-at
-    final-state over delete-at ;
-
-SYMBOL: old-table
-SYMBOL: new-table
-SYMBOL: todo-states
-SYMBOL: transitions
-
-: init-nfa>dfa ( table -- )
-    <vector-table> new-table set
-    [ table-columns clone filter-cols keys transitions set ] keep
-    dup [ find-start-state ] keep find-epsilon-closure
-    V{ } clone [ push ] keep todo-states set
-    old-table set ;
-
-: create-row ( state table -- )
-    2dup row-exists?
-    [ 2drop ] [ [ add-row ] 2keep drop todo-states get push ] if ;
-
-: (nfa>dfa) ( -- )
-    todo-states get dup empty? [
-        pop transitions get [
-            2dup swap old-table get find-next-state
-            dup empty? [
-                3drop
-            ] [
-                dup new-table get create-row
-                <entry> new-table get set-value
-            ] if
-        ] each-with 
-    ] unless* todo-states get empty? [ (nfa>dfa) ] unless ;
-
-: nfa>dfa ( table -- table )
-    init-nfa>dfa
-    (nfa>dfa)
-    start-state old-table get find-start-state
-    new-table get set-table-prop
-    final-state old-table get find-final-state
-    new-table get [ set-table-prop ] keep ;
-
-SYMBOL: regexp
-SYMBOL: text
-SYMBOL: matches
-SYMBOL: partial-matches
-TUPLE: partial-match index row count ;
-! a state is a vector
-! state is a key in a hashtable. the value is a hashtable of transition states
-
-: save-partial-match ( index row -- )
-    1 <partial-match> dup partial-match-index
-    \ partial-matches get set-at ;
-
-: inc-partial-match ( partial-match -- )
-    [ partial-match-count 1+ ] keep set-partial-match-count ;
-
-: check-final-state ( partial-match -- )
-    dup partial-match-row regexp get final-state? [
-        clone dup partial-match-index matches get set-at
-    ] [
-        drop
-    ] if ;
-
-: check-trivial-match ( row regexp -- )
-    dupd final-state? [
-        >r 0 r> 0 <partial-match>
-        0 matches get set-at
-    ] [
-        drop
-    ] if ;
-
-: update-partial-match ( char partial-match -- )
-    tuck partial-match-row regexp get get-row at* [
-        over set-partial-match-row
-        inc-partial-match
-    ] [
-        drop
-        partial-match-index partial-matches get delete-at
-    ] if ;
-
-: regexp-step ( index char start-state -- )
-    ! check partial-matches
-    over \ partial-matches get
-    [ nip update-partial-match ] assoc-each-with
-
-    ! check new match
-    at* [
-        save-partial-match
-    ] [
-        2drop
-    ] if
-    partial-matches get values [ check-final-state ] each ;
-
-: regexp-match ( text regexp -- seq )
-    #! text is the haystack
-    #! regexp is a table describing the needle
-    H{ } clone \ matches set
-    H{ } clone \ partial-matches set
-    dup regexp set
-    >r dup text set r>
-    [ find-start-state ] keep
-    2dup check-trivial-match
-    get-row
-    swap [ length ] keep
-    [ pick regexp-step ] 2each drop
-    matches get values [
-        [ partial-match-index ] keep
-        partial-match-count dupd + text get <slice>
-    ] map ;
-
-IN: regexp
-MEMO: make-regexp ( str -- table )
-    [
-        regexp-init
-        parse-regexp
-        trans-table get nfa>dfa
-    ] with-scope ;
-
-! TODO: make compatible with
-! http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
-
-! Greedy
-! Match the longest possible string, default
-! a+
-
-! Reluctant
-! Match on shortest possible string
-! / in vi does this (find next)
-! a+?
-
-! Possessive
-! Match only when the entire text string matches
-! a++
diff --git a/unmaintained/regexp/tables.factor b/unmaintained/regexp/tables.factor
deleted file mode 100644 (file)
index 76b27e1..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-USING: errors generic kernel namespaces
-sequences vectors assocs ;
-IN: tables
-
-TUPLE: table rows columns ;
-TUPLE: entry row-key column-key value ;
-GENERIC: add-value ( entry table -- )
-
-C: table ( -- obj )
-       H{ } clone over set-table-rows
-       H{ } clone over set-table-columns ;
-
-: (add-row) ( row-key table -- row )
-       2dup table-rows at* [
-        2nip
-       ] [
-               drop H{ } clone [ -rot table-rows set-at ] keep
-       ] if ;
-
-: add-row ( row-key table -- )
-    (add-row) drop ;
-
-: add-column ( column-key table -- )
-       t -rot table-columns set-at ;
-
-: set-row ( row row-key table -- )
-       table-rows set-at ;
-
-: lookup-row ( row-key table -- row/f ? )
-    table-rows at* ;
-
-: row-exists? ( row-key table -- ? )
-    lookup-row nip ;
-
-: lookup-column ( column-key table -- column/f ? )
-    table-columns at* ;
-
-: column-exists? ( column-key table -- ? )
-    lookup-column nip ;
-
-TUPLE: no-row key ;
-TUPLE: no-column key ;
-
-: get-row ( row-key table -- row )
-    dupd lookup-row [
-        nip
-    ] [
-        drop <no-row> throw
-    ] if ;
-
-: get-column ( column-key table -- column )
-    dupd lookup-column [
-        nip
-    ] [
-        drop <no-column> throw
-    ] if ;
-
-: get-value ( row-key column-key table -- obj ? )
-    swapd lookup-row [
-        at*
-    ] [
-        2drop f f
-    ] if ;
-
-: (set-value) ( entry table -- value column-key row )
-    [ >r entry-column-key r> add-column ] 2keep
-    dupd >r entry-row-key r> (add-row)
-    >r [ entry-value ] keep entry-column-key r> ;
-
-: set-value ( entry table -- )
-    (set-value) set-at ;
-    
-: swap-rows ( row-key1 row-key2 table -- )
-       [ tuck get-row >r get-row r> ] 3keep
-       >r >r rot r> r> [ set-row ] keep set-row ;
-
-: member?* ( obj obj -- bool )
-    2dup = [ 2drop t ] [ member? ] if ;
-
-: find-by-column ( column-key data table -- seq )
-    swapd 2dup lookup-column 2drop 
-    [
-        table-rows [
-            pick swap at* [ 
-                >r pick r> member?* [ , ] [ drop ] if
-            ] [ 
-                2drop
-            ] if 
-        ] assoc-each
-    ] { } make 2nip ;
-
-    
-TUPLE: vector-table ;
-C: vector-table ( -- obj )
-    <table> over set-delegate ;
-
-: add-hash-vector ( value key hash -- )
-    2dup at* [
-        dup vector? [
-            2nip push
-        ] [
-            V{ } clone [ push ] keep
-            -rot >r >r [ push ] keep r> r> set-at
-        ] if
-    ] [
-        drop set-at
-    ] if ;
-M: vector-table add-value ( entry table -- )
-    (set-value) add-hash-vector ;
-
diff --git a/unmaintained/regexp/test/regexp.factor b/unmaintained/regexp/test/regexp.factor
deleted file mode 100644 (file)
index 36c627c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-USING: kernel sequences namespaces errors io math tables arrays generic hashtables vectors strings parser ;
-USING: prettyprint test ;
-USING: regexp-internals regexp ;
-
-[ "dog" ] [ "dog" "cat|dog" make-regexp regexp-match first >string ] unit-test 
-[ "cat" ] [ "cat" "cat|dog" make-regexp regexp-match first >string ] unit-test 
-[ "a" ] [ "a" "a|b|c" make-regexp regexp-match first >string ] unit-test 
-[ "" ] [ "" "a*" make-regexp regexp-match first >string ] unit-test 
-[ "aaaa" ] [ "aaaa" "a*" make-regexp regexp-match first >string ] unit-test 
-[ "aaaa" ] [ "aaaa" "a+" make-regexp regexp-match first >string ] unit-test 
-[ t ] [ "" "a+" make-regexp regexp-match empty? ] unit-test 
-[ "cadog" ] [ "cadog" "ca(t|d)og" make-regexp regexp-match first >string ] unit-test 
-[ "catog" ] [ "catog" "ca(t|d)og" make-regexp regexp-match first >string ] unit-test 
-[ "cadog" ] [ "abcadoghi" "ca(t|d)og" make-regexp regexp-match first >string ] unit-test 
-[ t ] [ "abcatdoghi" "ca(t|d)og" make-regexp regexp-match empty? ] unit-test 
-
-[ "abcdefghijklmnopqrstuvwxyz" ] [ "abcdefghijklmnopqrstuvwxyz" "a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z+" make-regexp regexp-match first >string ] unit-test 
-[ "aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz" ] [ "aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz" "a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z+" make-regexp regexp-match first >string ] unit-test 
-[ t ] [ "aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyy" "a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z+" make-regexp regexp-match empty? ] unit-test 
-[ "abcdefghijklmnopqrstuvwxyz" ] [ "abcdefghijklmnopqrstuvwxyz" "a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*" make-regexp regexp-match first >string ] unit-test 
-[ "" ] [ "" "a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*" make-regexp regexp-match first >string ] unit-test 
-[ "az" ] [ "az" "a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*" make-regexp regexp-match first >string ] unit-test 
-
-[ t ] [ "abc" "a?b?c?" make-regexp regexp-match length 3 = ] unit-test
-[ "ac" ] [ "ac" "a?b?c?" make-regexp regexp-match first >string ] unit-test
-[ "" ] [ "" "a?b?c?" make-regexp regexp-match first >string ] unit-test
-[ t ] [ "aabc" "a?b?c?" make-regexp regexp-match length 4 = ] unit-test
-[ "abbbccdefefffeffe" ] [ "abbbccdefefffeffe" "(a?b*c+d(e|f)*)+" make-regexp regexp-match first >string ] unit-test
-[ t ] [ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" make-regexp regexp-match length 29 = ] unit-test
-
diff --git a/unmaintained/regexp/test/tables.factor b/unmaintained/regexp/test/tables.factor
deleted file mode 100644 (file)
index 4ce339a..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-USING: kernel tables test ;
-
-: test-table
-    <table>
-    "a" "c" "z" <entry> over set-value
-    "a" "o" "y" <entry> over set-value
-    "a" "l" "x" <entry> over set-value
-    "b" "o" "y" <entry> over set-value
-    "b" "l" "x" <entry> over set-value
-    "b" "s" "u" <entry> over set-value ;
-
-[
-    T{ table f
-    H{ 
-        { "a" H{ { "l" "x" } { "c" "z" } { "o" "y" } } }
-        { "b" H{ { "l" "x" } { "s" "u" } { "o" "y" } } }
-    }
-    H{ { "l" t } { "s" t } { "c" t } { "o" t } } }
-] [ test-table ] unit-test
-
-[ "x" t ] [ "a" "l" test-table get-value ] unit-test
-[ "har" t ] [
-    "a" "z" "har" <entry> test-table [ set-value ] keep
-    >r "a" "z" r> get-value
-] unit-test
-
-: vector-test-table
-    <vector-table>
-    "a" "c" "z" <entry> over add-value
-    "a" "c" "r" <entry> over add-value
-    "a" "o" "y" <entry> over add-value
-    "a" "l" "x" <entry> over add-value
-    "b" "o" "y" <entry> over add-value
-    "b" "l" "x" <entry> over add-value
-    "b" "s" "u" <entry> over add-value ;
-
-[
-T{ vector-table
-    T{ table f
-    H{ 
-        { "a"
-            H{ { "l" "x" } { "c" V{ "z" "r" } } { "o" "y" } } }
-        { "b"
-            H{ { "l" "x" } { "s" "u" } { "o" "y" } } }
-    }
-    H{ { "l" t } { "s" t } { "c" t } { "o" t } } }
-}
-] [ vector-test-table ] unit-test
-
diff --git a/unmaintained/scaffold/crud-templates/edit.furnace b/unmaintained/scaffold/crud-templates/edit.furnace
new file mode 100644 (file)
index 0000000..249ad0a
--- /dev/null
@@ -0,0 +1,21 @@
+<% USING: namespaces io kernel furnace words prettyprint
+generic sequences parser ; %>
+
+<% "model" get %>
+
+<form action="<% dup class dup word-vocabulary use+ unparse write %>-update" method="post">
+
+<% dup crud-index [ %>
+
+<input type="hidden" name="crud-index" value="<% write %>"/>
+
+<% ] when* %>
+
+<table>
+
+<% dup tuple-slots swap class "slot-names" word-prop [ %> <tr><td><% dup write %>:</td>
+    <td><input type="text" name="<% write %>" value="<% write %>"/></td></tr><% ] 2each %>
+    
+</table>
+<input type="submit" name="submit" value="submit"/>
+</form>
\ No newline at end of file
diff --git a/unmaintained/scaffold/crud-templates/list.furnace b/unmaintained/scaffold/crud-templates/list.furnace
new file mode 100644 (file)
index 0000000..a472f29
--- /dev/null
@@ -0,0 +1,27 @@
+<% USING: namespaces kernel io sequences generic words
+prettyprint furnace parser ; %>
+
+<% "model" get dup sequence? not [ unparse %>
+<p><a href="<% write %>-new">New</a></p><% ] [ %>
+
+<p><a href="<% first class unparse write %>-new">New</a></p>
+
+<table>
+<% "model" get dup first class dup
+    word-vocabulary use+ "slot-names" word-prop %>
+<tr><% [ %><th><% write %></th><% ] each %></tr>
+
+<% [ %>
+    
+<tr><% dup tuple-slots [ %><td><% write %></td><% ] each %>
+    
+    <% dup crud-index swap class dup "crud-index" word-prop swap unparse %>
+    <td><a href="<% 3dup write %>-show?<% write %>=<% write %>">Show</a></td>
+    <td><a href="<% 3dup write %>-edit?<% write %>=<% write %>">Edit</a></td>
+    <td><a href="<% write %>-delete?<% write %>=<% write %>">Delete</a></td></tr>
+
+<% ] each %>
+
+</table>
+
+<% ] if %>
\ No newline at end of file
diff --git a/unmaintained/scaffold/crud-templates/show.furnace b/unmaintained/scaffold/crud-templates/show.furnace
new file mode 100644 (file)
index 0000000..3500f24
--- /dev/null
@@ -0,0 +1,20 @@
+<% USING: namespaces io kernel words generic sequences 
+prettyprint furnace parser ; %>
+
+<% "model" get [ %>
+
+<% dup tuple-slots over class dup
+    word-vocabulary use+ "slot-names" word-prop %>
+
+<table>
+    
+<% [ %><tr><td><% write %>:</td><td><% write %></td></tr><% ] 2each %>
+
+</table>
+
+<% dup crud-index swap class dup "crud-index" word-prop swap unparse %>
+<p><a href="<% 3dup write %>-edit?<% write %>=<% write %>">Edit</a> |
+    <a href="<% [ write %>-delete?<% write %>=<% write  ] keep %>">Delete</a> |
+    <a href="<% dup write %>-new">New</a> | <a href="<% write %>-list">List</a></p>
+
+<% ] [ %><p>No such tuple</p><% ] if* %>
\ No newline at end of file
diff --git a/unmaintained/scaffold/scaffold.factor b/unmaintained/scaffold/scaffold.factor
new file mode 100644 (file)
index 0000000..e74374c
--- /dev/null
@@ -0,0 +1,128 @@
+USING: http.server help.markup help.syntax kernel prettyprint
+sequences parser namespaces words classes math tuples.private
+quotations arrays strings ;
+
+IN: furnace.scaffold
+
+TUPLE: furnace-model model ;
+C: <furnace-model> furnace-model
+
+HELP: furnace-model "This definition exists to circumvent a limitation in furnace with regard to sending arbitrary objects as models to .furnace templates." ;
+
+: crud-create ( class string -- word )
+    swap unparse "-" rot 3append in get create ;
+
+HELP: crud-create
+{ $values { "class" class } { "string" string } { "word" word } }
+{ $description "A CRUD utility function - creates a new action word for a given class and suffix string" } ;
+
+: crud-word ( class string -- word )
+    swap unparse "-" rot 3append parse first ;
+HELP: crud-word
+{ $values { "class" class } { "string" string } { "word" word } }
+{ $description "A CRUD utility function - looks up a word that has been crud-created" } ;
+
+: crud-index ( tuple -- )
+    dup class dup "crud-index" word-prop crud-word execute ;
+
+: crud-lookup ( string class -- obj )
+    get-global [ crud-index = ] curry* subset
+    dup empty? [ drop f ] [ first ] if ;
+HELP: crud-lookup
+{ $values { "string" string } { "class" class } { "obj" object } }
+{ $description "A CRUD utility function - looks up an object in the store by the pre-designated index." } ;
+
+: crud-lookup* ( string class -- tuple )
+    tuck crud-lookup
+    [ ] [ dup "slot-names" word-prop length 2 + <tuple> ] ?if ;
+
+HELP: crud-lookup*
+{ $values { "string" string } { "class" class } { "tuple" tuple } }
+"A CRUD utility function - same as crud-lookup, but always returns a tuple of the given class.  When the lookup fails, returns a tuple of the given class with all slots set to f." ;
+
+: render-page ( model template title -- )
+    [
+        [ render-component ] simple-html-document
+    ] serve-html ;
+
+: crud-page ( model template title -- )
+    [ "libs/furnace/crud-templates" template-path set render-page ]
+    with-scope ;
+
+: define-list ( class -- word )
+    dup "list" crud-create swap
+    [ dup get-global dup empty? -rot ? <furnace-model> "list" "List" crud-page ]
+    curry dupd define-compound ;
+
+: define-show ( class -- word )
+    dup "show" crud-create swap
+    [ crud-lookup <furnace-model> "show" "Show" crud-page ] 
+    curry dupd define-compound ;
+
+: define-edit ( class -- word )
+    dup "edit" crud-create swap
+    [ crud-lookup* <furnace-model> "edit" "Edit" crud-page ] 
+    curry dupd define-compound ;
+    
+: define-new ( class -- word )
+    dup "new" crud-create swap "edit" crud-word
+    [ f swap execute ]
+    curry dupd define-compound ;
+    
+: define-update ( class -- word )
+    dup "update" crud-create swap
+    [ 
+        tuck crud-lookup [ over get-global remove over set-global ] when* 
+        dup >r "constructor" word-prop execute
+        r> 2dup get-global swap add over set-global swap
+        crud-index swap "show" crud-word execute
+    ] curry dupd define-compound ;
+
+: define-delete ( class -- word )
+    dup "delete" crud-create swap
+    [ 
+        tuck crud-lookup [ over get-global remove over set-global ] when* 
+        "list" crud-word execute
+    ] curry dupd define-compound ;
+
+: define-lookup ( class -- )
+    dup "crud-index" word-prop ">" pick unparse 3append in get create
+    swap [ crud-lookup ] curry define-compound ;
+
+: define-lookup* ( class -- )
+    dup "crud-index" word-prop ">" pick unparse "*" append 3append 
+    in get create swap [ crud-lookup* ] curry define-compound ;
+
+: scaffold-params ( class -- array )
+    "crud-index" word-prop 1array 1array ;
+
+: scaffold ( class index realm -- )
+    -rot dupd "crud-index" set-word-prop
+    [ define-lookup ] keep [ define-lookup* ] keep
+    [ get-global [ { } over set-global ] unless ] keep
+    [ define-list { } rot define-authenticated-action ] 2keep
+    [ dup define-show swap scaffold-params rot 
+        define-authenticated-action ] 2keep
+    [ dup define-edit swap scaffold-params rot
+        define-authenticated-action ] 2keep
+    [ define-new { } rot define-authenticated-action ] 2keep
+    [ dup define-update swap "slot-names" word-prop 
+        "crud-index" add [ 1array ] map rot 
+        define-authenticated-action ] 2keep
+    dup define-delete swap scaffold-params rot
+    define-authenticated-action ;
+
+HELP: scaffold
+{ $values { "class" class } { "index" "an index" } { "realm" "a realm" } }
+"If realm is not f, then realm is used as the basic authentication realm for the scaffolding actions." ;
+
+ARTICLE: { "furnace" "crud" } "CRUD Scaffolding"
+{ $code 
+    "\"libs/furnace\" require"
+    "USING: furnace httpd threads ;"
+    "IN: furnace:crud-example"
+    "TUPLE: foo bar baz ;"
+    "\"crud-example\" \"foo-list\" f web-app"
+    "foo \"bar\" f scaffold"
+    "[ 8888 httpd ] in-thread"
+} ;
\ No newline at end of file
diff --git a/vm/Config.macosx.x86.64 b/vm/Config.macosx.x86.64
new file mode 100644 (file)
index 0000000..e2063c4
--- /dev/null
@@ -0,0 +1,3 @@
+include vm/Config.macosx
+include vm/Config.x86.64
+CFLAGS += -arch x86_64
index 2bbae86f6e110d4ece2cbdc680cc5af048158444..911c2f1749340e008ef448ab38581a60f79e2d96 100644 (file)
@@ -1,2 +1,10 @@
+#include <ucontext.h>
+
+INLINE void *ucontext_stack_pointer(void *uap)
+{
+        ucontext_t *ucontext = (ucontext_t *)uap;
+        return (void *)ucontext->uc_mcontext.gregs[15];
+}
+
 #define UAP_PROGRAM_COUNTER(ucontext) \
        (((ucontext_t *)(ucontext))->uc_mcontext.gregs[16])
diff --git a/vm/os-macosx-x86.64.h b/vm/os-macosx-x86.64.h
new file mode 100644 (file)
index 0000000..d2bb48c
--- /dev/null
@@ -0,0 +1,35 @@
+/* Fault handler information.  MacOSX version.
+Copyright (C) 1993-1999, 2002-2003  Bruno Haible <clisp.org at bruno>
+Copyright (C) 2003  Paolo Bonzini <gnu.org at bonzini>
+
+Used under BSD license with permission from Paolo Bonzini and Bruno Haible,
+2005-03-10:
+
+http://sourceforge.net/mailarchive/message.php?msg_name=200503102200.32002.bruno%40clisp.org
+
+Modified for Factor by Slava Pestov and Daniel Ehrenberg */
+#define MACH_EXC_STATE_TYPE x86_exception_state64_t
+#define MACH_EXC_STATE_FLAVOR x86_EXCEPTION_STATE64
+#define MACH_EXC_STATE_COUNT x86_EXCEPTION_STATE64_COUNT
+#define MACH_THREAD_STATE_TYPE x86_thread_state64_t
+#define MACH_THREAD_STATE_FLAVOR x86_THREAD_STATE64
+#define MACH_THREAD_STATE_COUNT MACHINE_THREAD_STATE_COUNT
+
+#if __DARWIN_UNIX03
+       #define MACH_EXC_STATE_FAULT(exc_state) (exc_state)->__faultvaddr
+       #define MACH_STACK_POINTER(thr_state) (thr_state)->__rsp
+       #define MACH_PROGRAM_COUNTER(thr_state) (thr_state)->__rip
+       #define UAP_PROGRAM_COUNTER(ucontext) \
+               MACH_PROGRAM_COUNTER(&(((ucontext_t *)(ucontext))->uc_mcontext->__ss))
+#else
+       #define MACH_EXC_STATE_FAULT(exc_state) (exc_state)->faultvaddr
+       #define MACH_STACK_POINTER(thr_state) (thr_state)->rsp
+       #define MACH_PROGRAM_COUNTER(thr_state) (thr_state)->rip
+       #define UAP_PROGRAM_COUNTER(ucontext) \
+               MACH_PROGRAM_COUNTER(&(((ucontext_t *)(ucontext))->uc_mcontext->ss))    
+#endif
+
+INLINE CELL fix_stack_pointer(CELL sp)
+{
+       return ((sp + 8) & ~15) - 8;
+}
index 437a528fb8fd421b9d7b8890e30c2c81e00634f9..b33c879d8844df4a079e6aaf84cbcec9158654b4 100644 (file)
@@ -219,6 +219,9 @@ static void sigaction_safe(int signum, const struct sigaction *act, struct sigac
                ret = sigaction(signum, act, oldact);
        }
        while(ret == -1 && errno == EINTR);
+
+       if(ret == -1)
+               fatal_error("sigaction failed", 0);
 }
 
 void unix_init_signals(void)
index be9dde1fa85b73a71615c2cbae410b06e114153d..2b08d5f39413efc49998a8a74da58e5960bc5b00 100755 (executable)
@@ -10,9 +10,9 @@ s64 current_millis(void)
 
 DEFINE_PRIMITIVE(cwd)
 {
-       F_CHAR buf[MAX_PATH + 4];
+       F_CHAR buf[MAX_UNICODE_PATH];
 
-       if(!GetCurrentDirectory(MAX_PATH + 4, buf))
+       if(!GetCurrentDirectory(MAX_UNICODE_PATH, buf))
                io_error();
 
        box_u16_string(buf);
@@ -84,7 +84,8 @@ long exception_handler(PEXCEPTION_POINTERS pe)
 
 void c_to_factor_toplevel(CELL quot)
 {
-       AddVectoredExceptionHandler(0, (void*)exception_handler);
+       if(!AddVectoredExceptionHandler(0, (void*)exception_handler))
+               fatal_error("AddVectoredExceptionHandler failed", 0);
        c_to_factor(quot);
        RemoveVectoredExceptionHandler((void*)exception_handler);
 }
index aa0e0ed8c155a2142d0213d53f04b75820554721..9d7bd85465543080c2a31c7352df884a27bb9768 100755 (executable)
@@ -98,21 +98,22 @@ const F_CHAR *vm_executable_path(void)
        return safe_strdup(full_path);
 }
 
-DEFINE_PRIMITIVE(stat)
+void stat_not_found(void)
+{
+       dpush(F);
+       dpush(F);
+       dpush(F);
+       dpush(F);
+}
+
+void find_file_stat(F_CHAR *path)
 {
+       // FindFirstFile is the only call that can stat c:\pagefile.sys
        WIN32_FIND_DATA st;
        HANDLE h;
 
-       F_CHAR *path = unbox_u16_string();
-       if(INVALID_HANDLE_VALUE == (h = FindFirstFile(
-               path,
-               &st)))
-       {
-               dpush(F);
-               dpush(F);
-               dpush(F);
-               dpush(F);
-       }
+       if(INVALID_HANDLE_VALUE == (h = FindFirstFile(path, &st)))
+               stat_not_found();
        else
        {
                box_boolean(st.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
@@ -129,6 +130,42 @@ DEFINE_PRIMITIVE(stat)
        }
 }
 
+DEFINE_PRIMITIVE(stat)
+{
+       HANDLE h;
+       BY_HANDLE_FILE_INFORMATION bhfi;
+
+       F_CHAR *path = unbox_u16_string();
+       //wprintf(L"path = %s\n", path);
+       h = CreateFileW(path,
+                                       GENERIC_READ,
+                                       FILE_SHARE_READ,
+                                       NULL,
+                                       OPEN_EXISTING,
+                                       FILE_FLAG_BACKUP_SEMANTICS,
+                                       NULL);
+       if(h == INVALID_HANDLE_VALUE)
+       {
+               find_file_stat(path);
+               return;
+       }
+
+       if(!GetFileInformationByHandle(h, &bhfi))
+               stat_not_found();
+       else {
+               box_boolean(bhfi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
+               dpush(tag_fixnum(0));
+               box_unsigned_8(
+                       (u64)bhfi.nFileSizeLow | (u64)bhfi.nFileSizeHigh << 32);
+               u64 lo = bhfi.ftLastWriteTime.dwLowDateTime;
+               u64 hi = bhfi.ftLastWriteTime.dwHighDateTime;
+               u64 modTime = (hi << 32) + lo;
+
+               box_unsigned_8((modTime - EPOCH_OFFSET) / 10000000);
+       }
+       CloseHandle(h);
+}
+
 DEFINE_PRIMITIVE(read_dir)
 {
        HANDLE dir;
index f181c93e2c9ba7136a3f8789545c87dcd4090322..d5687b849d633cd5b09b51f76420b70a8369208e 100644 (file)
@@ -30,6 +30,8 @@
                        #include "os-macosx-x86.32.h"
                #elif defined(FACTOR_PPC)
                        #include "os-macosx-ppc.h"
+               #elif defined(FACTOR_AMD64)
+                       #include "os-macosx-x86.64.h"
                #else
                        #error "Unsupported Mac OS X flavor"
                #endif
@@ -70,7 +72,6 @@
                        #elif defined(FACTOR_ARM)
                                #include "os-linux-arm.h"
                        #elif defined(FACTOR_AMD64)
-                               #include "os-unix-ucontext.h"
                                #include "os-linux-x86-64.h"
                        #else
                                #error "Unsupported Linux flavor"
index 9d98fa7842ab28f9c1a0b5341fcf808021cfbacb..649aaf81898c7457b8e6a6485aca4853ff83906d 100755 (executable)
@@ -191,12 +191,13 @@ XT quot_offset_to_pc(F_QUOTATION *quot, F_FIXNUM offset)
 
 DEFINE_PRIMITIVE(curry)
 {
-       F_CURRY *curry = allot_object(CURRY_TYPE,sizeof(F_CURRY));
+       F_CURRY *curry;
 
        switch(type_of(dpeek()))
        {
        case QUOTATION_TYPE:
        case CURRY_TYPE:
+               curry = allot_object(CURRY_TYPE,sizeof(F_CURRY));
                curry->quot = dpop();
                curry->obj = dpop();
                dpush(tag_object(curry));