[Templates] Syntax highlighting for Template Toolkit in gedit
Clinton Gormley
clint@traveljury.com
Thu, 28 Sep 2006 19:54:07 +0200
--=-mPbqx62VM2P8DmCRT5E7
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
Here's a syntax highlighter for gedit running in Gnome.
it's not perfect, but gnu-regexes are fairly limited in comparison with
what we have in Perl.
Any my mime stuff is probably not the recommended way of doing it.
However, it works for me (at least it does on SuSE 10.1)
I have assigned a made up mime type of text/html+tt, which recognises
files of the pattern '*.tt'. If you want to change this, you need to
edit tt.lang and Overrides.xml.
To use it:
==========
To specify the regexes for gtksourceview:
1) Save tt.lang to /opt/gnome/share/gtksourceview-1.0/language-specs/
To create the mime type:
2) Save Overrides.xml to /usr/share/mime/packages/
To specify the syntax highlighting colours for your user:
3) mkdir ~/.gconf/apps/gedit-2/preferences/syntax_highlighting/TT2/
4) Save %gconf.xml to that directory
5) killall gconf-2
If there are any corrections/improvements, please let me know
thanks
Clint
--=-mPbqx62VM2P8DmCRT5E7
Content-Disposition: attachment; filename=tt.lang
Content-Type: application/xml; name=tt.lang
Content-Transfer-Encoding: 7bit
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<language _name="TT2" version="1.0" _section="Markup" mimetypes="text/html+tt">
<block-comment _name="Block Comment" style="Comment">
<start-regex><!--</start-regex>
<end-regex>--></end-regex>
</block-comment>
<syntax-item _name="DTD" style="Preprocessor">
<start-regex><!</start-regex>
<end-regex>></end-regex>
</syntax-item>
<pattern-item _name="TT Tag" style="Keyword">
<regex>(\[%)|(%\])</regex>
</pattern-item>
<pattern-item _name="TT in quote" style="String">
<regex>(("[^"\[]*\[%)|(%\][^\["\n]*"))</regex>
</pattern-item>
<pattern-item _name="HTML as string" style="String">
<regex>(("[^"<]*<)[^">\n]*(>[^\["\n]*"))|(('[^'<]*<)[^'>\n]*(>[^\['\n]*'))</regex>
</pattern-item>
<pattern-item _name="Double quoted String" style="String">
<regex>("[^"\[]*")</regex>
</pattern-item>
<pattern-item _name="Single quoted string" style="String">
<regex>('[^'\n]*')</regex>
</pattern-item>
<pattern-item _name="Entity" style="Character">
<regex>&[a-zA-Z]+;</regex>
</pattern-item>
<pattern-item _name="Symbol" style="Keyword">
<regex>([\${}()=;|:]|\[|\]|(=>)|(==)|(\s\?\s))</regex>
</pattern-item>
<pattern-item _name="Closing Bracket" style="Keyword">
<regex>></regex>
</pattern-item>
<keyword-list _name="TT Directive" style="Keyword" case-sensitive="TRUE"
match-empty-string-at-beginning = "TRUE"
match-empty-string-at-end = "TRUE">
<keyword>PROCESS</keyword>
<keyword>GET</keyword>
<keyword>SET</keyword>
<keyword>CALL</keyword>
<keyword>DEFAULT</keyword>
<keyword>INSERT</keyword>
<keyword>INCLUDE</keyword>
<keyword>WRAPPER</keyword>
<keyword>BLOCK</keyword>
<keyword>IF</keyword>
<keyword>UNLESS</keyword>
<keyword>ELSE</keyword>
<keyword>ELSIF</keyword>
<keyword>END</keyword>
<keyword>SWITCH</keyword>
<keyword>CASE</keyword>
<keyword>FOREACH</keyword>
<keyword>WHILE</keyword>
<keyword>FILTER</keyword>
<keyword>USE</keyword>
<keyword>MACRO</keyword>
<keyword>PERL</keyword>
<keyword>RAWPERL</keyword>
<keyword>TRY</keyword>
<keyword>THROW</keyword>
<keyword>CATCH</keyword>
<keyword>FINAL</keyword>
<keyword>NEXT</keyword>
<keyword>LAST</keyword>
<keyword>RETURN</keyword>
<keyword>STOP</keyword>
<keyword>CLEAR</keyword>
<keyword>META</keyword>
<keyword>TAGS</keyword>
<keyword>DEBUG</keyword>
</keyword-list>
<keyword-list _name="TT VMethod" style="Keyword" case-sensitive="TRUE"
match-empty-string-at-beginning = "FALSE"
match-empty-string-at-end = "FALSE"
beginning-regex="\."
end-regex="((\([^)]*)|\s|\.|;)">
<keyword>defined</keyword>
<keyword>length</keyword>
<keyword>repeat</keyword>
<keyword>replace</keyword>
<keyword>remove</keyword>
<keyword>match</keyword>
<keyword>search</keyword>
<keyword>split</keyword>
<keyword>chunk</keyword>
<keyword>substr</keyword>
<keyword>list</keyword>
<keyword>hash</keyword>
<keyword>size</keyword>
<keyword>keys</keyword>
<keyword>values</keyword>
<keyword>items</keyword>
<keyword>each</keyword>
<keyword>pairs</keyword>
<keyword>sort</keyword>
<keyword>nsort</keyword>
<keyword>import</keyword>
<keyword>exists</keyword>
<keyword>delete</keyword>
<keyword>first</keyword>
<keyword>last</keyword>
<keyword>max</keyword>
<keyword>reverse</keyword>
<keyword>join</keyword>
<keyword>grep</keyword>
<keyword>unshift</keyword>
<keyword>push</keyword>
<keyword>shift</keyword>
<keyword>pop</keyword>
<keyword>unique</keyword>
<keyword>merge</keyword>
<keyword>slice</keyword>
<keyword>splice</keyword>
<keyword>hash</keyword>
</keyword-list>
<keyword-list _name="TT Special Variables" style="Keyword" case-sensitive="TRUE"
match-empty-string-at-beginning = "TRUE"
match-empty-string-at-end = "TRUE">
<keyword>template</keyword>
<keyword>component</keyword>
<keyword>loop</keyword>
<keyword>error</keyword>
<keyword>content</keyword>
</keyword-list>
<keyword-list _name="Tag" style="Keyword" case-sensitive="FALSE"
match-empty-string-at-beginning = "FALSE"
match-empty-string-at-end = "FALSE"
beginning-regex="</?"
end-regex="(\b|>)">
<keyword>a</keyword>
<keyword>abbr</keyword>
<keyword>acronym</keyword>
<keyword>address</keyword>
<keyword>applet</keyword>
<keyword>area</keyword>
<keyword>b</keyword>
<keyword>base</keyword>
<keyword>basefont</keyword>
<keyword>bdo</keyword>
<keyword>big</keyword>
<keyword>blockquote</keyword>
<keyword>body</keyword>
<keyword>br</keyword>
<keyword>button</keyword>
<keyword>caption</keyword>
<keyword>center</keyword>
<keyword>cite</keyword>
<keyword>code</keyword>
<keyword>col</keyword>
<keyword>colgroup</keyword>
<keyword>dd</keyword>
<keyword>del</keyword>
<keyword>dfn</keyword>
<keyword>dir</keyword>
<keyword>div</keyword>
<keyword>dl</keyword>
<keyword>dt</keyword>
<keyword>em</keyword>
<keyword>fieldset</keyword>
<keyword>font</keyword>
<keyword>form</keyword>
<keyword>frame</keyword>
<keyword>frameset</keyword>
<keyword>h[1-6]</keyword>
<keyword>head</keyword>
<keyword>hr</keyword>
<keyword>html</keyword>
<keyword>i</keyword>
<keyword>iframe</keyword>
<keyword>img</keyword>
<keyword>input</keyword>
<keyword>ins</keyword>
<keyword>kbd</keyword>
<keyword>label</keyword>
<keyword>legend</keyword>
<keyword>li</keyword>
<keyword>link</keyword>
<keyword>map</keyword>
<keyword>menu</keyword>
<keyword>meta</keyword>
<keyword>noframes</keyword>
<keyword>noscript</keyword>
<keyword>object</keyword>
<keyword>ol</keyword>
<keyword>optgroup</keyword>
<keyword>option</keyword>
<keyword>p</keyword>
<keyword>param</keyword>
<keyword>pre</keyword>
<keyword>q</keyword>
<keyword>s</keyword>
<keyword>samp</keyword>
<keyword>script</keyword>
<keyword>select</keyword>
<keyword>small</keyword>
<keyword>span</keyword>
<keyword>strike</keyword>
<keyword>strong</keyword>
<keyword>style</keyword>
<keyword>sub</keyword>
<keyword>sup</keyword>
<keyword>table</keyword>
<keyword>tbody</keyword>
<keyword>td</keyword>
<keyword>text</keyword>
<keyword>textarea</keyword>
<keyword>tfoot</keyword>
<keyword>th</keyword>
<keyword>thead</keyword>
<keyword>title</keyword>
<keyword>tr</keyword>
<keyword>tt</keyword>
<keyword>u</keyword>
<keyword>ul</keyword>
<keyword>var</keyword>
</keyword-list>
<keyword-list _name="Attribute" style="Others" case-sensitive="FALSE"
match-empty-string-at-beginning="TRUE"
match-empty-string-at-end="FALSE"
end-regex="[ \t]*=">
<keyword>abbr</keyword>
<keyword>accept-charset</keyword>
<keyword>accept</keyword>
<keyword>accesskey</keyword>
<keyword>action</keyword>
<keyword>align</keyword>
<keyword>alink</keyword>
<keyword>alt</keyword>
<keyword>archive</keyword>
<keyword>axis</keyword>
<keyword>background</keyword>
<keyword>bgcolor</keyword>
<keyword>border</keyword>
<keyword>cellpadding</keyword>
<keyword>cellspacing</keyword>
<keyword>char</keyword>
<keyword>charoff</keyword>
<keyword>charset</keyword>
<keyword>checked</keyword>
<keyword>cite</keyword>
<keyword>class</keyword>
<keyword>classid</keyword>
<keyword>clear</keyword>
<keyword>code</keyword>
<keyword>codebase</keyword>
<keyword>codetype</keyword>
<keyword>color</keyword>
<keyword>cols</keyword>
<keyword>colspan</keyword>
<keyword>content</keyword>
<keyword>coords</keyword>
<keyword>data</keyword>
<keyword>datetime</keyword>
<keyword>declare</keyword>
<keyword>defer</keyword>
<keyword>dir</keyword>
<keyword>disabled</keyword>
<keyword>enctype</keyword>
<keyword>face</keyword>
<keyword>for</keyword>
<keyword>frame</keyword>
<keyword>frameborder</keyword>
<keyword>headers</keyword>
<keyword>height</keyword>
<keyword>href</keyword>
<keyword>hreflang</keyword>
<keyword>hspace</keyword>
<keyword>http-equiv</keyword>
<keyword>id</keyword>
<keyword>ismap</keyword>
<keyword>label</keyword>
<keyword>lang</keyword>
<keyword>language</keyword>
<keyword>link</keyword>
<keyword>longdesc</keyword>
<keyword>marginheight</keyword>
<keyword>marginwidth</keyword>
<keyword>maxlength</keyword>
<keyword>media</keyword>
<keyword>method</keyword>
<keyword>multiple</keyword>
<keyword>name</keyword>
<keyword>nohref</keyword>
<keyword>noresize</keyword>
<keyword>noshade</keyword>
<keyword>nowrap</keyword>
<keyword>object</keyword>
<keyword>onblur</keyword>
<keyword>onchange</keyword>
<keyword>onclick</keyword>
<keyword>ondblclick</keyword>
<keyword>onfocus</keyword>
<keyword>onkeydown</keyword>
<keyword>onkeypress</keyword>
<keyword>onkeyup</keyword>
<keyword>onload</keyword>
<keyword>onmousedown</keyword>
<keyword>onmousemove</keyword>
<keyword>onmouseout</keyword>
<keyword>onmouseover</keyword>
<keyword>onmouseup</keyword>
<keyword>onreset</keyword>
<keyword>onselect</keyword>
<keyword>onsubmit</keyword>
<keyword>onunload</keyword>
<keyword>profile</keyword>
<keyword>prompt</keyword>
<keyword>readonly</keyword>
<keyword>rel</keyword>
<keyword>rev</keyword>
<keyword>rows</keyword>
<keyword>rowspan</keyword>
<keyword>rules</keyword>
<keyword>scheme</keyword>
<keyword>scope</keyword>
<keyword>scrolling</keyword>
<keyword>selected</keyword>
<keyword>shape</keyword>
<keyword>size</keyword>
<keyword>span</keyword>
<keyword>src</keyword>
<keyword>standby</keyword>
<keyword>start</keyword>
<keyword>style</keyword>
<keyword>summary</keyword>
<keyword>tabindex</keyword>
<keyword>target</keyword>
<keyword>text</keyword>
<keyword>title</keyword>
<keyword>type</keyword>
<keyword>usemap</keyword>
<keyword>valign</keyword>
<keyword>value</keyword>
<keyword>valuetype</keyword>
<keyword>version</keyword>
<keyword>vlink</keyword>
<keyword>vspace</keyword>
<keyword>width</keyword>
</keyword-list>
</language>
--=-mPbqx62VM2P8DmCRT5E7
Content-Disposition: attachment; filename=Overrides.xml
Content-Type: application/xml; name=Overrides.xml
Content-Transfer-Encoding: 7bit
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
<!-- generated by mime-info-to-mime (Remove this line to prevent overwriting!) -->
<mime-type type="text/html+tt">
<comment>Template Toolkit Template</comment>
<glob pattern="*.tt" />
</mime-type>
</mime-info>
--=-mPbqx62VM2P8DmCRT5E7
Content-Disposition: attachment; filename=%gconf.xml
Content-Type: application/octet-stream; name=%gconf.xml
Content-Transfer-Encoding: 7bit
<?xml version="1.0"?>
<gconf>
<entry name="HTML@32@as@32@string" mtime="1159014518" type="string">
<stringvalue>2/#ffff0000ffff/#000000000000/0/0/0/0</stringvalue>
</entry>
<entry name="Double@32@quoted@32@String" mtime="1158956051" type="string">
<stringvalue>2/#ffff0000ffff/#000000000000/0/0/0/0</stringvalue>
</entry>
<entry name="Single@32@quoted@32@string" mtime="1158956138" type="string">
<stringvalue>2/#ffff0000ffff/#000000000000/0/0/0/0</stringvalue>
</entry>
<entry name="TT@32@in@32@quote" mtime="1158956797" type="string">
<stringvalue>2/#ffff0000ffff/#000000000000/0/0/0/0</stringvalue>
</entry>
<entry name="Symbol" mtime="1159465027" type="string">
<stringvalue>2/#c7ad32d432d4/#000000000000/0/1/0/0</stringvalue>
</entry>
<entry name="TT@32@Special@32@Variables" mtime="1158948914" type="string">
<stringvalue>2/#ffff00000000/#000000000000/0/1/0/0</stringvalue>
</entry>
<entry name="TT@32@VMethod" mtime="1159019426" type="string">
<stringvalue>0/#a5a52a2a2a2a/#000000000000/1/0/0/0</stringvalue>
</entry>
<entry name="TT@32@Tag" mtime="1158948224" type="string">
<stringvalue>2/#30308080a0a0/#000000000000/0/1/0/0</stringvalue>
</entry>
<entry name="TT@32@Directive" mtime="1158946508" type="string">
<stringvalue>2/#30308080a0a0/#000000000000/0/1/0/0</stringvalue>
</entry>
<entry name="Tag" mtime="1158944067" type="string">
<stringvalue>2/#a5a52a2a2a2a/#000000000000/0/1/0/0</stringvalue>
</entry>
<entry name="Entity" mtime="1158955840" type="string">
<stringvalue>2/#ffff0000ffff/#000000000000/0/0/0/0</stringvalue>
</entry>
<entry name="DTD" mtime="1158944057" type="string">
<stringvalue>2/#a0a02020f0f0/#000000000000/0/0/0/0</stringvalue>
</entry>
<entry name="Block@32@Comment" mtime="1158944052" type="string">
<stringvalue>2/#00000000ffff/#000000000000/0/0/0/0</stringvalue>
</entry>
<entry name="Attribute" mtime="1158944049" type="string">
<stringvalue>2/#2e2e8b8b5757/#000000000000/0/1/0/0</stringvalue>
</entry>
<entry name="Closing@32@Bracket" mtime="1158944046" type="string">
<stringvalue>2/#a5a52a2a2a2a/#000000000000/0/1/0/0</stringvalue>
</entry>
</gconf>
--=-mPbqx62VM2P8DmCRT5E7--