Robert wrote:
> Has anyone created a TT mode for jEdit?
Here's my attempt. It's not perfect, but it gives me some pretty colors
to look at. Note that, since my use of tt is currently all web-based, it
does inherit from the html syntax file (which you could easily remove,
of course.) Also note that it assumes all "bare words" are variables,
which of course is not necessarily true. I'd certainly appreciate
hearing about any improvements you can make!
<?xml version="1.0"?>
<!DOCTYPE MODE SYSTEM "xmode.dtd">
<MODE>
<PROPS>
<PROPERTY NAME="lineComment" VALUE="#" />
<PROPERTY NAME="commentStart" VALUE="[%#" />
<PROPERTY NAME="commentEnd" VALUE="%]" />
</PROPS>
<RULES IGNORE_CASE="FALSE">
<SPAN_REGEXP HASH_CHAR="[" DELEGATE="perl::MAIN" TYPE="FUNCTION">
<BEGIN>\[% (?:RAW)?PERL %\]</BEGIN>
<END>[% END %]</END>
</SPAN_REGEXP>
<SPAN TYPE="COMMENT2">
<BEGIN>[%#</BEGIN>
<END>%]</END>
</SPAN>
<SPAN TYPE="FUNCTION" DELEGATE="TT">
<BEGIN>[%</BEGIN>
<END>%]</END>
</SPAN>
<IMPORT DELEGATE="html::MAIN" />
</RULES>
<RULES SET="TT" DEFAULT="KEYWORD2" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">
<SPAN TYPE="LITERAL1" DELEGATE="transact-sql::MAIN" EXCLUDE_MATCH="TRUE">
<BEGIN>query("</BEGIN>
<END>")</END>
</SPAN>
<SPAN TYPE="LITERAL1" DELEGATE="LITERAL">
<BEGIN>"</BEGIN>
<END>"</END>
</SPAN>
<SPAN TYPE="LITERAL1">
<BEGIN>'</BEGIN>
<END>'</END>
</SPAN>
<SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="TT">
<BEGIN>${</BEGIN>
<END>}</END>
</SPAN>
<MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING>
<SEQ_REGEXP TYPE="COMMENT2" HASH_CHAR="#"
>#(\w|\s|\d)+</SEQ_REGEXP>
<!-- perl module names -->
<SEQ_REGEXP TYPE="NULL" HASH_CHAR=" "
> \w+(::\w+)+</SEQ_REGEXP>
<!-- hash keys -->
<SEQ_REGEXP TYPE="NULL" HASH_CHAR=" "
> \w+\s*=></SEQ_REGEXP>
<SEQ_REGEXP TYPE="NULL" HASH_CHAR="{"
>{\w+\s*=></SEQ_REGEXP>
<SEQ_REGEXP TYPE="NULL" HASH_CHAR=" "
>\t\w+\s*=></SEQ_REGEXP>
<SEQ TYPE="OPERATOR">|</SEQ>
<SEQ TYPE="OPERATOR">&</SEQ>
<SEQ TYPE="OPERATOR">!</SEQ>
<SEQ TYPE="OPERATOR">=></SEQ>
<SEQ TYPE="OPERATOR">>=</SEQ>
<SEQ TYPE="OPERATOR"><=</SEQ>
<SEQ TYPE="OPERATOR">></SEQ>
<SEQ TYPE="OPERATOR"><</SEQ>
<SEQ TYPE="OPERATOR">=</SEQ>
<SEQ TYPE="OPERATOR">+</SEQ>
<SEQ TYPE="OPERATOR">-</SEQ>
<SEQ TYPE="OPERATOR">/</SEQ>
<SEQ TYPE="OPERATOR">*</SEQ>
<SEQ TYPE="OPERATOR">^</SEQ>
<SEQ TYPE="OPERATOR">~</SEQ>
<SEQ TYPE="OPERATOR">?</SEQ>
<SEQ TYPE="OPERATOR">:</SEQ>
<SEQ TYPE="NULL">(</SEQ>
<SEQ TYPE="NULL">)</SEQ>
<SEQ TYPE="OPERATOR">{</SEQ>
<SEQ TYPE="OPERATOR">}</SEQ>
<SEQ TYPE="OPERATOR">[</SEQ>
<SEQ TYPE="OPERATOR">]</SEQ>
<SEQ TYPE="OPERATOR">,</SEQ>
<SEQ TYPE="OPERATOR">.</SEQ>
<SEQ TYPE="OPERATOR">;</SEQ>
<SEQ_REGEXP HASH_CHAR=" " TYPE="OPERATOR"> _</SEQ_REGEXP>
<SEQ_REGEXP HASH_CHAR=" " TYPE="OPERATOR">\t_</SEQ_REGEXP>
<KEYWORDS>
<KEYWORD1>GET</KEYWORD1>
<KEYWORD1>CALL</KEYWORD1>
<KEYWORD1>SET</KEYWORD1>
<KEYWORD1>DEFAULT</KEYWORD1>
<KEYWORD1>META</KEYWORD1>
<KEYWORD1>BLOCK</KEYWORD1>
<KEYWORD1>INSERT</KEYWORD1>
<KEYWORD1>INCLUDE</KEYWORD1>
<KEYWORD1>PROCESS</KEYWORD1>
<KEYWORD1>WRAPPER</KEYWORD1>
<KEYWORD1>RETURN</KEYWORD1>
<KEYWORD1>STOP</KEYWORD1>
<KEYWORD1>END</KEYWORD1>
<KEYWORD1>SWITCH</KEYWORD1>
<KEYWORD1>CASE</KEYWORD1>
<KEYWORD1>IF</KEYWORD1>
<KEYWORD1>UNLESS</KEYWORD1>
<KEYWORD1>ELSIF</KEYWORD1>
<KEYWORD1>ELSE</KEYWORD1>
<KEYWORD1>FOREACH</KEYWORD1>
<KEYWORD1>IN</KEYWORD1>
<KEYWORD1>NEXT</KEYWORD1>
<KEYWORD1>BREAK</KEYWORD1>
<KEYWORD1>LAST</KEYWORD1>
<KEYWORD1>WHILE</KEYWORD1>
<KEYWORD1>FILTER</KEYWORD1>
<KEYWORD1>USE</KEYWORD1>
<KEYWORD1>MACRO</KEYWORD1>
<KEYWORD1>TRY</KEYWORD1>
<KEYWORD1>CATCH</KEYWORD1>
<KEYWORD1>FINAL</KEYWORD1>
<KEYWORD1>THROW</KEYWORD1>
<KEYWORD1>PERL</KEYWORD1>
<KEYWORD1>RAWPERL</KEYWORD1>
<KEYWORD3>defined</KEYWORD3>
<KEYWORD3>length</KEYWORD3>
<KEYWORD3>repeat</KEYWORD3>
<KEYWORD3>replace</KEYWORD3>
<KEYWORD3>match</KEYWORD3>
<KEYWORD3>split</KEYWORD3>
<KEYWORD3>chunk</KEYWORD3>
<KEYWORD3>list</KEYWORD3>
<KEYWORD3>hash</KEYWORD3>
<KEYWORD3>size</KEYWORD3>
<KEYWORD3>first</KEYWORD3>
<KEYWORD3>last</KEYWORD3>
<KEYWORD3>size</KEYWORD3>
<KEYWORD3>max</KEYWORD3>
<KEYWORD3>reverse</KEYWORD3>
<KEYWORD3>join</KEYWORD3>
<KEYWORD3>grep</KEYWORD3>
<KEYWORD3>sort</KEYWORD3>
<KEYWORD3>nsort</KEYWORD3>
<KEYWORD3>unshift</KEYWORD3>
<KEYWORD3>push</KEYWORD3>
<KEYWORD3>shift</KEYWORD3>
<KEYWORD3>pop</KEYWORD3>
<KEYWORD3>unique</KEYWORD3>
<KEYWORD3>merge</KEYWORD3>
<KEYWORD3>slice</KEYWORD3>
<KEYWORD3>splice</KEYWORD3>
<KEYWORD3>keys</KEYWORD3>
<KEYWORD3>values</KEYWORD3>
<KEYWORD3>each</KEYWORD3>
<KEYWORD3>import</KEYWORD3>
<KEYWORD3>exists</KEYWORD3>
<KEYWORD3>defined</KEYWORD3>
<KEYWORD3>item</KEYWORD3>
<OPERATOR>and</OPERATOR>
<OPERATOR>or</OPERATOR>
<OPERATOR>not</OPERATOR>
<!-- special variables -->
<KEYWORD3>template</KEYWORD3>
<KEYWORD3>component</KEYWORD3>
<KEYWORD3>loop</KEYWORD3>
<KEYWORD3>error</KEYWORD3>
<KEYWORD3>content</KEYWORD3>
<KEYWORD3>global</KEYWORD3>
<!-- standard filters -->
<OPERATOR>collapse</OPERATOR>
<OPERATOR>eval</OPERATOR>
<OPERATOR>format</OPERATOR>
<OPERATOR>html</OPERATOR>
<OPERATOR>html_break</OPERATOR>
<OPERATOR>html_entity</OPERATOR>
<OPERATOR>html_line_break</OPERATOR>
<OPERATOR>html_para</OPERATOR>
<OPERATOR>indent</OPERATOR>
<OPERATOR>latex</OPERATOR>
<OPERATOR>ucfirst</OPERATOR>
<OPERATOR>lower</OPERATOR>
<OPERATOR>null</OPERATOR>
<OPERATOR>perl</OPERATOR>
<OPERATOR>redirect</OPERATOR>
<OPERATOR>remove</OPERATOR>
<OPERATOR>stderr</OPERATOR>
<OPERATOR>stdout</OPERATOR>
<OPERATOR>trim</OPERATOR>
<OPERATOR>truncate</OPERATOR>
<OPERATOR>ucfirst</OPERATOR>
<OPERATOR>upper</OPERATOR>
<OPERATOR>uri</OPERATOR>
</KEYWORDS>
</RULES>
<RULES SET="LITERAL" DEFAULT="LITERAL1" ESCAPE="\">
<!-- Variables -->
<SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">
<BEGIN>${</BEGIN>
<END>}</END>
</SPAN>
<SEQ_REGEXP TYPE="KEYWORD2" HASH_CHAR="$"
>\$\w+(.\w+)*</SEQ_REGEXP>
<SEQ TYPE="LITERAL1">|</SEQ>
<SEQ TYPE="LITERAL1">&</SEQ>
<SEQ TYPE="LITERAL1">!</SEQ>
<SEQ TYPE="LITERAL1">></SEQ>
<SEQ TYPE="LITERAL1"><</SEQ>
<SEQ TYPE="LITERAL1">)</SEQ>
<SEQ TYPE="LITERAL1">(</SEQ>
<SEQ TYPE="LITERAL1">=</SEQ>
<SEQ TYPE="LITERAL1">!</SEQ>
<SEQ TYPE="LITERAL1">+</SEQ>
<SEQ TYPE="LITERAL1">-</SEQ>
<SEQ TYPE="LITERAL1">/</SEQ>
<SEQ TYPE="LITERAL1">*</SEQ>
<SEQ TYPE="LITERAL1">^</SEQ>
<SEQ TYPE="LITERAL1">~</SEQ>
<SEQ TYPE="LITERAL1">}</SEQ>
<SEQ TYPE="LITERAL1">{</SEQ>
<SEQ TYPE="LITERAL1">.</SEQ>
<SEQ TYPE="LITERAL1">,</SEQ>
<SEQ TYPE="LITERAL1">;</SEQ>
<SEQ TYPE="LITERAL1">]</SEQ>
<SEQ TYPE="LITERAL1">[</SEQ>
<SEQ TYPE="LITERAL1">?</SEQ>
<SEQ TYPE="LITERAL1">:</SEQ>
</RULES>
<RULES SET="VARIABLE" DEFAULT="KEYWORD2" ESCAPE="\">
<SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">
<BEGIN>{</BEGIN>
<END>}</END>
</SPAN>
<SEQ TYPE="OPERATOR">-></SEQ>
</RULES>
<RULES SET="HASHREF" DEFAULT="LITERAL1">
<SEQ TYPE="OPERATOR">=></SEQ>
</RULES>
</MODE>