diff options
| author | hallgren <hallgren@chalmers.se> | 2011-09-20 12:41:32 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2011-09-20 12:41:32 +0000 |
| commit | c32a244a3c80433a1cfc593db7701a037363fe9c (patch) | |
| tree | a2c4021072111accd3ddbeae97e5be6214898051 /src/tools/gf.lang | |
| parent | a4a1f33cd398ee4ea86d9a24c20857b3eef5be1e (diff) | |
Created a new page documenting available editor modes for GF
Also adding editing modes for Gedit and Geany contributed by John J. Camilleri.
Diffstat (limited to 'src/tools/gf.lang')
| -rw-r--r-- | src/tools/gf.lang | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/src/tools/gf.lang b/src/tools/gf.lang new file mode 100644 index 000000000..6ddd37fb8 --- /dev/null +++ b/src/tools/gf.lang @@ -0,0 +1,211 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + Author: John J. Camilleri + Copyright (C) 2011, John J. Camilleri + Based on haskell.lang by Duncan Coutts <duncan@haskell.org> and Anders Carlsson <andersca@gnome.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +--> +<language id="gf" _name="Grammatical Framework" version="2.0" _section="Sources"> + <metadata> + <property name="mimetypes">text/x-gf;text/plain</property> + <property name="globs">*.gf</property> + </metadata> + + <styles> + <style id="preprocessor" _name="Preprocessor" map-to="def:preprocessor"/> + <style id="comment" _name="Comment" map-to="def:comment"/> + <style id="variable" _name="Variable" /> + <style id="symbol" _name="Symbol" /> + <style id="keyword" _name="Keyword" map-to="def:keyword"/> + <style id="type" _name="Data Type" map-to="def:type"/> + <style id="string" _name="String" map-to="def:string"/> + <style id="character" _name="Character" map-to="def:character"/> + <style id="char-escape" _name="Escaped Character" map-to="def:special-char"/> + <style id="decimal" _name="Decimal" map-to="def:decimal"/> + </styles> + + <definitions> + + <define-regex id="symbolchar">[!#$%&*+./>=<?@:\\^|~-]</define-regex> + + <context id="line-comment" style-ref="comment" end-at-line-end="true" class="comment" class-disabled="no-spell-check"> + <start>(?<!\%{symbolchar})--+(?!\%{symbolchar})</start> + <include> + <context ref="def:in-comment"/> + <context ref="haddock:line-paragraph"/> + <context ref="haddock:directive"/> + </include> + </context> + + <context id="block-comment" style-ref="comment" class="comment" class-disabled="no-spell-check"> + <start>\{-</start> + <end>-\}</end> + <include> + <context ref="def:in-comment"/> + <context ref="haddock:block-paragraph"/> + <context ref="haddock:directive"/> + <context ref="block-comment"/> + </include> + </context> + + <context id="pragma" style-ref="preprocessor"> + <start>\{-#</start> + <end>#-\}</end> + </context> + + <context id="variable" style-ref="variable"> + <match>\b[a-z_][0-9a-zA-Z_'#]*</match> + </context> + + <context id="type-or-constructor" style-ref="type"> + <match>\b[A-Z][0-9a-zA-Z._'#]*</match> + </context> + + <!-- Must not extend parent context, or we end up matching + "\end{code}" as part of the Haskell context, but when in + literate haskell mode it should be terminating a code block. --> + <context id="symbol" style-ref="symbol" extend-parent="false"> + <match>\%{symbolchar}+</match> + </context> + + <context id="keysymbol" style-ref="keyword"> + <prefix>(?<!\%{symbolchar})</prefix> + <suffix>(?!\%{symbolchar})</suffix> + <keyword>\.\.</keyword> + <keyword>::</keyword> + <keyword>=</keyword> + <keyword>\|</keyword> + <keyword>\</keyword> + <keyword>-></keyword> + <keyword><-</keyword> + <keyword>@</keyword> + <keyword>~</keyword> + <keyword>=></keyword> + </context> + + <define-regex id="escaped-character" extended="true"> + \\( # leading backslash + [abfnrtv\\"\'&] | # escaped character + [0-9]+ | # decimal digits + o[0-7]+ | # 'o' followed by octal digits + x[0-9A-Fa-f]+ | # 'x' followed by hex digits + \^[A-Z@\[\\\]^_] | # control character codes + NUL | SOH | STX | ETX | EOT | ENQ | ACK | + BEL | BS | HT | LF | VT | FF | CR | SO | + SI | DLE | DC1 | DC2 | DC3 | DC4 | NAK | + SYN | ETB | CAN | EM | SUB | ESC | FS | GS | + RS | US | SP | DEL # control char names + ) + </define-regex> + + <context id="string" style-ref="string" end-at-line-end="true" class="string" class-disabled="no-spell-check"> + <start>"</start> + <end>"</end> + <include> + <context ref="def:line-continue"/> + <context style-ref="char-escape"> + <match>\%{escaped-character}</match> + </context> + </include> + </context> + + <context id="char" style-ref="character" end-at-line-end="true"> + <start>'</start> + <end>'</end> + <include> + <context style-ref="char-escape" once-only="true"> + <match>\%{escaped-character}</match> + </context> + <context once-only="true" extend-parent="false"> + <match>.</match> + </context> + <context style-ref="def:error" extend-parent="false"> + <match>.</match> + </context> + </include> + </context> + + <context id="decimal" style-ref="decimal"> + <match>[0-9]+</match> + </context> + + <context id="keyword" style-ref="keyword"> + <keyword>PType</keyword> + <keyword>Str</keyword> + <keyword>Strs</keyword> + <keyword>Type</keyword> + <keyword>abstract</keyword> + <keyword>case</keyword> + <keyword>cat</keyword> + <keyword>concrete</keyword> + <keyword>data</keyword> + <keyword>def</keyword> + <keyword>flags</keyword> + <keyword>fun</keyword> + <keyword>in</keyword> + <keyword>incomplete</keyword> + <keyword>instance</keyword> + <keyword>interface</keyword> + <keyword>let</keyword> + <keyword>lin</keyword> + <keyword>lincat</keyword> + <keyword>lindef</keyword> + <keyword>of</keyword> + <keyword>open</keyword> + <keyword>oper</keyword> + <keyword>param</keyword> + <keyword>pre</keyword> + <keyword>printname</keyword> + <keyword>resource</keyword> + <keyword>strs</keyword> + <keyword>table</keyword> + <keyword>transfer</keyword> + <keyword>variants</keyword> + <keyword>where</keyword> + <keyword>with</keyword> + </context> + + <context id="body"> + <include> + <context ref="line-comment"/> + <context ref="pragma"/> + <context ref="block-comment"/> + <context ref="keyword"/> + <context ref="variable"/> + <context ref="type-or-constructor"/> + <context ref="keysymbol"/> + <context ref="symbol"/> + <context ref="string"/> + <context ref="char"/> + <context ref="decimal"/> + </include> + </context> + + <context id="gf" class="no-spell-check"> + <include> + <context ref="def:shebang"/> + <context ref="c:if0-comment"/> + <context ref="c:include"/> + <context ref="c:preprocessor"/> + <context ref="body"/> + </include> + </context> + + </definitions> +</language>
\ No newline at end of file |
