|
jEdit example source code file (tcl.xml)
The jEdit tcl.xml source code<?xml version="1.0"?> <!DOCTYPE MODE SYSTEM "xmode.dtd"> <!-- Tcl mode by Michael Jacobson. cplusplus and pascal modes used as reference. 2006/10/20 Jean-Francois Larvoire: - Fixed comments detection: Only # at the beginning of Tcl commands are comments! - Quoted strings can span multiple lines. - Added recursive in-string substituted command and variable analysis. - Added numerous missing tcl keywords and variables up to version 8.4.14. - Removed $ on global variable keywords, as they're often used with $::. - Added Expect keywords, as KEYWORD2. (send was already in tk as KEYWORD2) - Avoid colouring substituted variables that are homonyms of a keyword. - Highlight hexadecimal numbers too. 2006/10/23 Jean-Francois Larvoire: - Strings and blocks only begin at word start. - Updated {# comment detection to manage the whole {} block. This catches all { and }, and makes it unnecessary to define them as KEYWORDs. - Bug fix: Do not delegate content evaluation for ${} scalar variables. 2009/02/10: Albert Davidson Chou - added lineComment property for TCL mode (2119958) Limitations: - Unbalanced quotes or brackets within braces, such as in regular expressions, will confuse the analysis. Workaround: If possible, use a \ to escape the unbalanced character. Else add a ;# comment with a closing " or ]. Known bugs: - Continuation line detection does not work. Same bug as espace chars below. - ; highlighting as an OPERATOR does not work. Known bugs (Were there before, and I failed to fix them): - \c escape colouring does not work for escapes embedded in words. I attemted numerous workarounds using spans and regexps, but they all seem to fail to detect anything beginning with a \. And using NO_ESCAPE="TRUE" does not help. - {} within quoted strings should not affect indentation. --> <MODE> <PROPS> <PROPERTY NAME="indentOpenBrackets" VALUE="{" /> <PROPERTY NAME="indentCloseBrackets" VALUE="}" /> <PROPERTY NAME="lineUpClosingBracket" VALUE="true" /> <PROPERTY NAME="lineComment" VALUE="#" /> </PROPS> <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="0x\p{XDigit}+|\d+"> <!-- Continuation line. Processed before anything else by Tcl. (Does not work)--> <EOL_SPAN_REGEXP TYPE="OPERATOR" HASH_CHAR="\">\\$ <!-- Comments after a ; command separator --> <!-- Note: The ; isn't bolded as other operators. Why?--> <EOL_SPAN_REGEXP TYPE="OPERATOR" HASH_CHAR=";" DELEGATE="TCL_COMMENT">;\s*(?=#) <!-- Comments at the { opening of a block --> <SPAN_REGEXP TYPE="OPERATOR" HASH_CHAR="{" DELEGATE="TCL_COMMENT"> <BEGIN>\{\s*(?=#) <END>} </SPAN_REGEXP> <!-- Comments on a line of their own. --> <EOL_SPAN TYPE="COMMENT1" AT_WHITESPACE_END="TRUE"># <!-- Quoted strings --> <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE" AT_WORD_START="TRUE" DELEGATE="TCL_STRING"> <BEGIN>" <END>" </SPAN> <!-- Avoid colouring substituted variables that are homonyms of a keyword --> <!-- Indexed array variable. Delegate to MAIN, as the index string is evaluated by Tcl.--> <SPAN_REGEXP TYPE="NULL" HASH_CHAR="$" DELEGATE="MAIN"> <BEGIN>\$(\w|::)+\( <END>) </SPAN_REGEXP> <!-- General scalar variable. Do not delegate, as the ${} block content is not evalutated by Tcl. --> <SPAN TYPE="NULL"> <BEGIN>${ <END>} </SPAN> <!-- Plain scalar variable. --> <SEQ_REGEXP TYPE="NULL" HASH_CHAR="$">\$(\w|::)+ <!-- Sub-block --> <SPAN TYPE="OPERATOR" NO_LINE_BREAK="FALSE" AT_WORD_START="TRUE" DELEGATE="MAIN"> <BEGIN>{ <END>} </SPAN> <!-- Sub-commands to be substituted --> <SPAN TYPE="OPERATOR" NO_LINE_BREAK="FALSE" DELEGATE="MAIN"> <BEGIN>[ <END>] </SPAN> <!-- Escaped characters --> <SEQ TYPE="KEYWORD3">\a <SEQ TYPE="KEYWORD3">\b <SEQ TYPE="KEYWORD3">\f <SEQ TYPE="KEYWORD3">\n <SEQ TYPE="KEYWORD3">\r <SEQ TYPE="KEYWORD3">\t <SEQ TYPE="KEYWORD3">\v <!-- Tcl syntax operators. --> <!-- Note that "{}[]" are already caught above.--> <!-- Delegate to main, as a new command begins after the ; --> <SEQ TYPE="OPERATOR" DELEGATE="MAIN">; <SEQ TYPE="NULL">:: <!-- Math expression operators --> <SEQ TYPE="OPERATOR">= <SEQ TYPE="OPERATOR">! <SEQ TYPE="OPERATOR">>= <SEQ TYPE="OPERATOR"><= <SEQ TYPE="OPERATOR">+ <SEQ TYPE="OPERATOR">- <SEQ TYPE="OPERATOR">/ <SEQ TYPE="OPERATOR">* <SEQ TYPE="OPERATOR">> <SEQ TYPE="OPERATOR">< <SEQ TYPE="OPERATOR">% <SEQ TYPE="OPERATOR">& <SEQ TYPE="OPERATOR">| <SEQ TYPE="OPERATOR">^ <SEQ TYPE="OPERATOR">~ <KEYWORDS> <!-- Tcl keywords--> <KEYWORD1>append <KEYWORD1>array <KEYWORD1>concat <KEYWORD1>console <KEYWORD1>eval <KEYWORD1>expr <KEYWORD1>format <KEYWORD1>global <KEYWORD1>set <KEYWORD1>trace <KEYWORD1>unset <KEYWORD1>upvar <KEYWORD1>join <KEYWORD1>lappend <KEYWORD1>lindex <KEYWORD1>linsert <KEYWORD1>list <KEYWORD1>llength <KEYWORD1>lrange <KEYWORD1>lreplace <KEYWORD1>lsearch <KEYWORD1>lsort <KEYWORD1>split <KEYWORD1>scan <KEYWORD1>string <KEYWORD1>regexp <KEYWORD1>regsub <KEYWORD1>if <KEYWORD1>else <KEYWORD1>elseif <KEYWORD1>switch <KEYWORD1>for <KEYWORD1>foreach <KEYWORD1>while <KEYWORD1>break <KEYWORD1>continue <KEYWORD1>proc <KEYWORD1>return <KEYWORD1>source <KEYWORD1>unknown <KEYWORD1>uplevel <KEYWORD1>cd <KEYWORD1>close <KEYWORD1>eof <KEYWORD1>file <KEYWORD1>flush <KEYWORD1>gets <KEYWORD1>glob <KEYWORD1>open <KEYWORD1>read <KEYWORD1>puts <KEYWORD1>pwd <KEYWORD1>seek <KEYWORD1>tell <KEYWORD1>catch <KEYWORD1>error <KEYWORD1>exec <KEYWORD1>pid <KEYWORD1>after <KEYWORD1>time <KEYWORD1>exit <KEYWORD1>history <KEYWORD1>rename <KEYWORD1>info <!-- expr keywords--> <KEYWORD1>ceil <KEYWORD1>floor <KEYWORD1>round <KEYWORD1>incr <KEYWORD1>abs <KEYWORD1>acos <KEYWORD1>cos <KEYWORD1>cosh <KEYWORD1>asin <KEYWORD1>sin <KEYWORD1>sinh <KEYWORD1>atan <KEYWORD1>atan2 <KEYWORD1>tan <KEYWORD1>tanh <KEYWORD1>log <KEYWORD1>log10 <KEYWORD1>fmod <KEYWORD1>pow <KEYWORD1>hypot <KEYWORD1>sqrt <KEYWORD1>double <KEYWORD1>int <!-- New Tcl keywords up to tcl 8.4.14 --> <KEYWORD1>bgerror <KEYWORD1>binary <KEYWORD1>clock <KEYWORD1>dde <KEYWORD1>encoding <KEYWORD1>fblocked <KEYWORD1>fconfigure <KEYWORD1>fcopy <KEYWORD1>fileevent <KEYWORD1>filename <KEYWORD1>http <KEYWORD1>interp <KEYWORD1>load <KEYWORD1>lset <KEYWORD1>memory <KEYWORD1>msgcat <KEYWORD1>namespace <KEYWORD1>package <KEYWORD1>pkg::create <KEYWORD1>pkg_mkIndex <KEYWORD1>registry <KEYWORD1>resource <KEYWORD1>socket <KEYWORD1>subst <KEYWORD1>update <KEYWORD1>variable <KEYWORD1>vwait <!-- Standard library of Tcl interpretor procedures --> <KEYWORD1>auto_execok <KEYWORD1>auto_import <KEYWORD1>auto_load <KEYWORD1>auto_mkindex <KEYWORD1>auto_mkindex_old <KEYWORD1>auto_qualify <KEYWORD1>auto_reset <KEYWORD1>parray <KEYWORD1>tcl_endOfWord <KEYWORD1>tcl_findLibrary <KEYWORD1>tcl_startOfNextWord <KEYWORD1>tcl_startOfPreviousWord <KEYWORD1>tcl_wordBreakAfter <KEYWORD1>tcl_wordBreakBefore <!-- Tk keywords --> <KEYWORD2>bind <KEYWORD2>button <KEYWORD2>canvas <KEYWORD2>checkbutton <KEYWORD2>destroy <KEYWORD2>entry <KEYWORD2>focus <KEYWORD2>frame <KEYWORD2>grab <KEYWORD2>image <KEYWORD2>label <KEYWORD2>listbox <KEYWORD2>lower <KEYWORD2>menu <KEYWORD2>menubutton <KEYWORD2>message <KEYWORD2>option <KEYWORD2>pack <KEYWORD2>placer <KEYWORD2>radiobutton <KEYWORD2>raise <KEYWORD2>scale <KEYWORD2>scrollbar <KEYWORD2>selection <KEYWORD2>send <KEYWORD2>text <KEYWORD2>tk <KEYWORD2>tkerror <KEYWORD2>tkwait <KEYWORD2>toplevel <KEYWORD2>update <KEYWORD2>winfo <KEYWORD2>wm <!-- Expect keywords. Using KEYWORD2 as send is already one --> <!-- KEYWORD2 close --> <KEYWORD2>debug <KEYWORD2>disconnect <!-- KEYWORD2 exit --> <KEYWORD2>exp_continue <KEYWORD2>exp_internal <KEYWORD2>exp_open <KEYWORD2>exp_pid <KEYWORD2>exp_version <KEYWORD2>expect <KEYWORD2>expect_after <KEYWORD2>expect_background <KEYWORD2>expect_before <KEYWORD2>expect_tty <KEYWORD2>expect_user <KEYWORD2>fork <KEYWORD2>inter_return <KEYWORD2>interact <KEYWORD2>interpreter <KEYWORD2>log_file <KEYWORD2>log_user <KEYWORD2>match_max <KEYWORD2>overlay <KEYWORD2>parity <KEYWORD2>promptl <KEYWORD2>prompt2 <KEYWORD2>remove_nulls <!-- KEYWORD2 send --> <KEYWORD2>send_error <KEYWORD2>send_log <KEYWORD2>send_tty <KEYWORD2>send_user <KEYWORD2>sleep <KEYWORD2>spawn <KEYWORD2>strace <KEYWORD2>stty <KEYWORD2>system <KEYWORD2>timestamp <KEYWORD2>trap <KEYWORD2>wait <!-- Arguments to expect commands--> <KEYWORD3>full_buffer <KEYWORD3>timeout <!-- KEYWORD3 eof--> <!-- Global variables--> <KEYWORD3>argv0 <KEYWORD3>argv <KEYWORD3>argc <KEYWORD3>tk_version <KEYWORD3>tk_library <KEYWORD3>tk_strictMotif <!-- New global variables up to tcl 8.4.14 --> <KEYWORD3>env <KEYWORD3>errorCode <KEYWORD3>errorInfo <KEYWORD3>geometry <KEYWORD3>tcl_library <KEYWORD3>tcl_patchLevel <KEYWORD3>tcl_pkgPath <KEYWORD3>tcl_platform <KEYWORD3>tcl_precision <KEYWORD3>tcl_rcFileName <KEYWORD3>tcl_rcRsrcName <KEYWORD3>tcl_traceCompile <KEYWORD3>tcl_traceExec <KEYWORD3>tcl_wordchars <KEYWORD3>tcl_nonwordchars <KEYWORD3>tcl_version <KEYWORD3>tcl_interactive <!-- Common arguments to tcl and Tk keywords --> <KEYWORD3>exact <KEYWORD3>all <KEYWORD3>indices <KEYWORD3>nocase <KEYWORD3>nocomplain <KEYWORD3>nonewline <KEYWORD3>code <KEYWORD3>errorinfo <KEYWORD3>errorcode <KEYWORD3>atime <KEYWORD3>anymore <KEYWORD3>args <KEYWORD3>body <KEYWORD3>compare <KEYWORD3>cmdcount <KEYWORD3>commands <KEYWORD3>ctime <KEYWORD3>current <KEYWORD3>default <KEYWORD3>dev <KEYWORD3>dirname <KEYWORD3>donesearch <KEYWORD3>errorinfo <KEYWORD3>executable <KEYWORD3>extension <KEYWORD3>first <KEYWORD3>globals <KEYWORD3>gid <KEYWORD3>index <KEYWORD3>ino <KEYWORD3>isdirectory <KEYWORD3>isfile <KEYWORD3>keep <KEYWORD3>last <KEYWORD3>level <KEYWORD3>length <KEYWORD3>library <KEYWORD3>locals <KEYWORD3>lstat <KEYWORD3>match <KEYWORD3>mode <KEYWORD3>mtime <KEYWORD3>names <KEYWORD3>nextelement <KEYWORD3>nextid <KEYWORD3>nlink <KEYWORD3>none <KEYWORD3>procs <KEYWORD3>owned <KEYWORD3>range <KEYWORD3>readable <KEYWORD3>readlink <KEYWORD3>redo <KEYWORD3>release <KEYWORD3>rootname <KEYWORD3>script <KEYWORD3>show <KEYWORD3>size <KEYWORD3>startsearch <KEYWORD3>stat <KEYWORD3>status <KEYWORD3>substitute <KEYWORD3>tail <KEYWORD3>tclversion <KEYWORD3>tolower <KEYWORD3>toupper <KEYWORD3>trim <KEYWORD3>trimleft <KEYWORD3>trimright <KEYWORD3>type <KEYWORD3>uid <KEYWORD3>variable <KEYWORD3>vars <KEYWORD3>vdelete <KEYWORD3>vinfo <KEYWORD3>visibility <KEYWORD3>window <KEYWORD3>writable <KEYWORD3>accelerator <KEYWORD3>activeforeground <KEYWORD3>activebackground <KEYWORD3>anchor <KEYWORD3>aspect <KEYWORD3>background <KEYWORD3>before <KEYWORD3>bg <KEYWORD3>borderwidth <KEYWORD3>bd <KEYWORD3>bitmap <KEYWORD3>command <KEYWORD3>cursor <KEYWORD3>default <KEYWORD3>expand <KEYWORD3>family <KEYWORD3>fg <KEYWORD3>fill <KEYWORD3>font <KEYWORD3>force <KEYWORD3>foreground <KEYWORD3>from <KEYWORD3>height <KEYWORD3>icon <KEYWORD3>question <KEYWORD3>warning <KEYWORD3>in <KEYWORD3>ipadx <KEYWORD3>ipady <KEYWORD3>justify <KEYWORD3>left <KEYWORD3>center <KEYWORD3>right <KEYWORD3>length <KEYWORD3>padx <KEYWORD3>pady <KEYWORD3>offvalue <KEYWORD3>onvalue <KEYWORD3>orient <KEYWORD3>horizontal <KEYWORD3>vertical <KEYWORD3>outline <KEYWORD3>oversrike <KEYWORD3>relief <KEYWORD3>raised <KEYWORD3>sunken <KEYWORD3>flat <KEYWORD3>groove <KEYWORD3>ridge <KEYWORD3>solid <KEYWORD3>screen <KEYWORD3>selectbackground <KEYWORD3>selectforeground <KEYWORD3>setgrid <KEYWORD3>side <KEYWORD3>size <KEYWORD3>slant <KEYWORD3>left <KEYWORD3>right <KEYWORD3>top <KEYWORD3>bottom <KEYWORD3>spacing1 <KEYWORD3>spacing2 <KEYWORD3>spacing3 <KEYWORD3>state <KEYWORD3>stipple <KEYWORD3>takefocus <KEYWORD3>tearoff <KEYWORD3>textvariable <KEYWORD3>title <KEYWORD3>to <KEYWORD3>type <KEYWORD3>abortretryignore <KEYWORD3>ok <KEYWORD3>okcancel <KEYWORD3>retrycancel <KEYWORD3>yesno <KEYWORD3>yesnocancel <KEYWORD3>underline <KEYWORD3>value <KEYWORD3>variable <KEYWORD3>weight <KEYWORD3>width <KEYWORD3>xscrollcommand <KEYWORD3>yscrollcommand <KEYWORD3>active <KEYWORD3>add <KEYWORD3>arc <KEYWORD3>aspect <KEYWORD3>bitmap <KEYWORD3>cascade <KEYWORD3>cget <KEYWORD3>children <KEYWORD3>class <KEYWORD3>clear <KEYWORD3>client <KEYWORD3>create <KEYWORD3>colormodel <KEYWORD3>command <KEYWORD3>configure <KEYWORD3>deiconify <KEYWORD3>delete <KEYWORD3>disabled <KEYWORD3>exists <KEYWORD3>focusmodel <KEYWORD3>flash <KEYWORD3>forget <KEYWORD3>geometry <KEYWORD3>get <KEYWORD3>group <KEYWORD3>handle <KEYWORD3>iconbitmap <KEYWORD3>iconify <KEYWORD3>iconmask <KEYWORD3>iconname <KEYWORD3>iconposition <KEYWORD3>iconwindow <KEYWORD3>idletasks <KEYWORD3>insert <KEYWORD3>interps <KEYWORD3>itemconfigure <KEYWORD3>invoke <KEYWORD3>line <KEYWORD3>mark <KEYWORD3>maxsize <KEYWORD3>minsize <KEYWORD3>move <KEYWORD3>name <KEYWORD3>normal <KEYWORD3>overrideredirect <KEYWORD3>oval <KEYWORD3>own <KEYWORD3>photo <KEYWORD3>polygon <KEYWORD3>positionfrom <KEYWORD3>propagate <KEYWORD3>protocol <KEYWORD3>ranges <KEYWORD3>rectangle <KEYWORD3>remove <KEYWORD3>resizable <KEYWORD3>separator <KEYWORD3>slaves <KEYWORD3>sizefrom <KEYWORD3>state <KEYWORD3>tag <KEYWORD3>title <KEYWORD3>transient <KEYWORD3>window <KEYWORD3>withdraw <KEYWORD3>xview <KEYWORD3>yview <KEYWORD3>Activate <KEYWORD3>Alt <KEYWORD3>Any <KEYWORD3>B1 <KEYWORD3>B2 <KEYWORD3>B3 <KEYWORD3>Button1 <KEYWORD3>Button2 <KEYWORD3>Button3 <KEYWORD3>ButtonPress <KEYWORD3>ButtonRelease <KEYWORD3>Double <KEYWORD3>Circulate <KEYWORD3>Colormap <KEYWORD3>Configure <KEYWORD3>Control <KEYWORD3>Deactivate <KEYWORD3>Escape <KEYWORD3>Expose <KEYWORD3>FocusIn <KEYWORD3>FocusOut <KEYWORD3>Gravity <KEYWORD3>Key <KEYWORD3>KeyPress <KEYWORD3>KeyRelease <KEYWORD3>Lock <KEYWORD3>Meta <KEYWORD3>Property <KEYWORD3>Reparent <KEYWORD3>Shift <KEYWORD3>Unmap <KEYWORD3>Visibility <KEYWORD3>Button <KEYWORD3>ButtonPress <KEYWORD3>ButtonRelease <KEYWORD3>Destroy <KEYWORD3>Escape <KEYWORD3>Enter <KEYWORD3>Leave <KEYWORD3>Motion <KEYWORD3>MenuSelect <KEYWORD3>Triple <KEYWORD3>all </KEYWORDS> </RULES> <RULES SET="TCL_COMMENT" DEFAULT="OPERATOR"> <!-- Allows catching blocks starting with a comment. or comments following a ; --> <SEQ_REGEXP TYPE="COMMENT1" HASH_CHAR="#" DELEGATE="MAIN">#.* </RULES> <RULES SET="TCL_STRING" DEFAULT="LITERAL1" ESCAPE="\"> <PROPS> <PROPERTY NAME="indentOpenBrackets" VALUE="" /> <PROPERTY NAME="indentCloseBrackets" VALUE="" /> </PROPS> <!-- Continuation line. Processed before anything else by Tcl.--> <EOL_SPAN_REGEXP TYPE="OPERATOR" HASH_CHAR="\">\\$ <!-- Avoid colouring variables substituted inside strings --> <SPAN_REGEXP TYPE="NULL" HASH_CHAR="$" DELEGATE="MAIN"> <BEGIN>\$(\w|::)+\( <END>) </SPAN_REGEXP> <SPAN_REGEXP TYPE="NULL" HASH_CHAR="$" DELEGATE="MAIN"> <BEGIN>\$\{ <END>} </SPAN_REGEXP> <SEQ_REGEXP TYPE="NULL" HASH_CHAR="$">\$(\w|::)+ <!-- Sub-commands to be substituted --> <SPAN TYPE="OPERATOR" NO_LINE_BREAK="FALSE" DELEGATE="MAIN"> <BEGIN>[ <END>] </SPAN> <!-- Escaped characters --> <SEQ TYPE="KEYWORD3">\a <SEQ TYPE="KEYWORD3">\b <SEQ TYPE="KEYWORD3">\f <SEQ TYPE="KEYWORD3">\n <SEQ TYPE="KEYWORD3">\r <SEQ TYPE="KEYWORD3">\t <SEQ TYPE="KEYWORD3">\v </RULES> </MODE> Other jEdit examples (source code examples)Here is a short list of links related to this jEdit tcl.xml source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.