--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Authors: Marco Barisione, Emanuele Aina
+ Copyright (C) 2005-2007 Marco Barisione <barisione@gmail.com>
+ Copyright (C) 2005-2007 Emanuele Aina
+
+ 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="faust" _name="Faust" version="2.0" _section="Sources">
+ <metadata>
+ <property name="mimetypes">text/x-faust</property>
+ <property name="globs">*.dsp</property>
+ <property name="line-comment-start">//</property>
+ <property name="block-comment-start">/*</property>
+ <property name="block-comment-end">*/</property>
+ </metadata>
+
+ <styles>
+ <style id="primitive" _name="Primitive" map-to="def:keyword"/>
+ <style id="structure" _name="Structure" map-to="def:statement"/>
+
+ <style id="comment" _name="Comment" map-to="def:comment"/>
+ <style id="error" _name="Error" map-to="def:error"/>
+ <style id="string" _name="String" map-to="def:string"/>
+ <style id="preprocessor" _name="Preprocessor" map-to="def:preprocessor"/>
+ <style id="common-defines" _name="Common Defines" map-to="def:special-constant"/>
+ <style id="included-file" _name="Included File" map-to="def:string"/>
+ <style id="char" _name="Character" map-to="def:character"/>
+ <style id="keyword" _name="Keyword" map-to="def:keyword"/>
+ <style id="type" _name="Data Type" map-to="def:type"/>
+ <style id="storage-class" _name="Storage Class" map-to="def:type"/>
+ <style id="printf" _name="printf Conversion" map-to="def:special-char"/>
+ <style id="escaped-character" _name="Escaped Character" map-to="def:special-char"/>
+ <style id="floating-point" _name="Floating point number" map-to="def:floating-point"/>
+ <style id="decimal" _name="Decimal number" map-to="def:decimal"/>
+ <style id="octal" _name="Octal number" map-to="def:base-n-integer"/>
+ <style id="hexadecimal" _name="Hexadecimal number" map-to="def:base-n-integer"/>
+ <style id="boolean" _name="Boolean value" map-to="def:boolean"/>
+ </styles>
+
+ <definitions>
+ <!-- TODO: what about scanf ? -->
+ <!-- man 3 printf -->
+ <context id="printf" style-ref="printf" extend-parent="false">
+ <match extended="true">
+ \%\%|\%
+ (?:[1-9][0-9]*\$)? # argument
+ [#0\-\ \+\'I]* # flags
+ (?:[1-9][0-9]*|\*)? # width
+ (?:\.\-?(?:[0-9]+|\*))? # precision
+ (?:hh|ll|[hlLqjzt])? # length modifier
+ [diouxXeEfFgGaAcsCSpnm] # conversion specifier
+ </match>
+ </context>
+
+ <define-regex id="escaped-character" extended="true">
+ \\( # leading backslash
+ [\\\"\'nrbtfav\?] | # escaped character
+ [0-7]{1,3} | # one, two, or three octal digits
+ x[0-9A-Fa-f]+ # 'x' followed by hex digits
+ )
+ </define-regex>
+
+ <context id="faust">
+ <include>
+
+ <!-- gtk-doc -->
+ <context ref="gtk-doc:inline-docs-section"/>
+
+ <!-- Comments -->
+ <context id="comment" style-ref="comment" end-at-line-end="true">
+ <start>//</start>
+ <include>
+ <context ref="def:in-line-comment"/>
+ </include>
+ </context>
+
+ <context id="comment-multiline" style-ref="comment">
+ <start>/\*</start>
+ <end>\*/</end>
+ <include>
+ <context ref="def:in-comment"/>
+ </include>
+ </context>
+
+ <context id="close-comment-outside-comment" style-ref="error">
+ <match>\*/(?!\*)</match>
+ </context>
+
+ <!-- Preprocessor -->
+ <define-regex id="preproc-start">^\s*#\s*</define-regex>
+
+ <context id="if0-comment" style-ref="comment">
+ <start>\%{preproc-start}if\b\s*0\b</start>
+ <end>\%{preproc-start}(endif|else|elif)\b</end>
+ <include>
+ <context id="if-in-if0">
+ <start>\%{preproc-start}if(n?def)?\b</start>
+ <end>\%{preproc-start}endif\b</end>
+ <include>
+ <context ref="if-in-if0"/>
+ <context ref="def:in-comment"/>
+ </include>
+ </context>
+ <context ref="def:in-comment"/>
+ </include>
+ </context>
+
+ <context id="include" style-ref="preprocessor">
+ <match extended="true">
+ \%{preproc-start}
+ (include|import)\s*
+ (".*?"|<.*>)
+ </match>
+ <include>
+ <context id="included-file" sub-pattern="2" style-ref="included-file"/>
+ </include>
+ </context>
+
+ <context id="preprocessor" style-ref="preprocessor" end-at-line-end="true">
+ <start extended="true">
+ \%{preproc-start}
+ (define|undef|error|pragma|ident|if(n?def)?|else|elif|endif|line|warning)
+ \b
+ </start>
+ <include>
+ <context ref="def:line-continue" ignore-style="true"/>
+ <context ref="string" ignore-style="true"/>
+ <context ref="comment"/>
+ <context ref="comment-multiline"/>
+ </include>
+ </context>
+
+ <context id="string" style-ref="string" end-at-line-end="true">
+ <start>L?"</start>
+ <end>"</end>
+ <include>
+ <context ref="printf"/>
+ <context id="escaped-character" style-ref="escaped-character">
+ <match>\%{escaped-character}</match>
+ </context>
+ <context ref="def:line-continue"/>
+ </include>
+ </context>
+
+ <context id="char" style-ref="char">
+ <match>L?'(\%{escaped-character}|.)'</match>
+ </context>
+
+ <!-- http://www.lysator.liu.se/c/ANSI-C-grammar-l.html -->
+ <context id="float" style-ref="floating-point">
+ <match extended="true">
+ (?<![\w\.])
+ ((\.[0-9]+ | [0-9]+\.[0-9]*) ([Ee][+-]?[0-9]*)? |
+ ([0-9]+[Ee][+-]?[0-9]*))
+ [fFlL]?
+ (?![\w\.])
+ </match>
+ </context>
+
+ <context id="hexadecimal" style-ref="hexadecimal">
+ <match extended="true">
+ (?<![\w\.])
+ 0[xX][a-fA-F0-9]+[uUlL]*
+ (?![\w\.])
+ </match>
+ </context>
+
+ <context id="octal" style-ref="octal">
+ <match extended="true">
+ (?<![\w\.])
+ 0[0-7]+[uUlL]*
+ (?![\w\.])
+ </match>
+ </context>
+
+ <context id="decimal" style-ref="decimal">
+ <match extended="true">
+ (?<![\w\.])
+ [0-9]+[uUlL]*
+ (?![\w\.])
+ </match>
+ </context>
+
+ <!-- Keywords -->
+ <context id="primitive" style-ref="primitive">
+ <keyword>mem</keyword>
+ <keyword>prefix</keyword>
+ <keyword>int</keyword>
+ <keyword>float</keyword>
+ <keyword>rdtable</keyword>
+ <keyword>rwtable</keyword>
+ <keyword>select2</keyword>
+ <keyword>select3</keyword>
+ <keyword>ffunction</keyword>
+ <keyword>fconstant</keyword>
+ <keyword>fvariable</keyword>
+ <keyword>button</keyword>
+ <keyword>checkbox</keyword>
+ <keyword>vslider</keyword>
+ <keyword>hslider</keyword>
+ <keyword>nentry</keyword>
+ <keyword>vgroup</keyword>
+ <keyword>hgroup</keyword>
+ <keyword>tgroup</keyword>
+ <keyword>vbargraph</keyword>
+ <keyword>hbargraph</keyword>
+ <keyword>attach</keyword>
+ <keyword>acos</keyword>
+ <keyword>asin</keyword>
+ <keyword>atan</keyword>
+ <keyword>atan2</keyword>
+ <keyword>cos</keyword>
+ <keyword>sin</keyword>
+ <keyword>tan</keyword>
+ <keyword>exp</keyword>
+ <keyword>log</keyword>
+ <keyword>log10</keyword>
+ <keyword>pow</keyword>
+ <keyword>sqrt</keyword>
+ <keyword>abs</keyword>
+ <keyword>min</keyword>
+ <keyword>max</keyword>
+ <keyword>fmod</keyword>
+ <keyword>remainder</keyword>
+ <keyword>floor</keyword>
+ <keyword>ceil</keyword>
+ <keyword>rint</keyword>
+ </context>
+
+ <context id="structure" style-ref="structure">
+ <keyword>process</keyword>
+
+ <keyword>with</keyword>
+ <keyword>case</keyword>
+ <keyword>seq</keyword>
+ <keyword>par</keyword>
+ <keyword>sum</keyword>
+ <keyword>prod</keyword>
+ <keyword>import</keyword>
+
+ <keyword>component</keyword>
+ <keyword>library</keyword>
+ <keyword>environment</keyword>
+
+ <keyword>declare</keyword>
+ </context>
+
+
+
+ </include>
+ </context>
+ </definitions>
+</language>