%PDF- %PDF-
Direktori : /usr/share/gtksourceview-5/language-specs/ |
Current File : //usr/share/gtksourceview-5/language-specs/c.lang |
<?xml version="1.0" encoding="UTF-8"?> <!-- This file is part of GtkSourceView Authors: Marco Barisione, Emanuele Aina Copyright (C) 2005-2007 Marco Barisione <barisione@gmail.com> Copyright (C) 2005-2007 Emanuele Aina GtkSourceView is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. GtkSourceView 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, see <http://www.gnu.org/licenses/>. --> <language id="c" name="C" version="2.0" _section="Source"> <metadata> <property name="mimetypes">text/x-c;text/x-csrc;image/x-xpixmap</property> <property name="globs">*.c</property> <property name="line-comment-start">//</property> <property name="block-comment-start">/*</property> <property name="block-comment-end">*/</property> <property name="suggested-suffix">.c</property> </metadata> <styles> <style id="comment" name="Comment" map-to="def:comment"/> <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="included-relative-file" name="Included Relative File" map-to="c:included-file"/> <style id="char" name="Character" map-to="def:character"/> <style id="keyword" name="Keyword" map-to="def:keyword"/> <style id="type-keyword" name="Type Keyword" map-to="c:keyword"/> <style id="operator" name="Operator" map-to="def:operator"/> <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="binary" name="Binary number" map-to="def:base-n-integer"/> <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"/> <style id="nullptr" name="Null Pointer Value" map-to="def:special-constant"/> <style id="standard-stream" name="Standard stream" map-to="def:constant"/> <style id="signal-name" name="Signal name" map-to="def:constant"/> <style id="error" name="Error" map-to="def:error"/> </styles> <definitions> <!--regexs--> <define-regex id="preproc-start">^\s*#\s*</define-regex> <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 u[0-9A-Fa-f]{4} | # 'u' followed by 4 hex digits U[0-9A-Fa-f]{8} # 'U' followed by 8 hex digits ) </define-regex> <define-regex id="integer-suffix">(?:ll?|LL?)[uU]|[uU]?(?:ll?|LL?)|[uU]?</define-regex> <!--contexts NOT used on the main context--> <!-- 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 \[\^?\]?[^\]]*\]) # specific to scanf </match> </context> <!--contexts used on the main context--> <!-- Preprocessor --> <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-relative" end-at-line-end="true"> <start extended="true"> (\%{preproc-start}(include|import))\s* (".*?") </start> <include> <context sub-pattern="1" where="start" style-ref="preprocessor"/> <context id="included-relative-file" sub-pattern="3" where="start" style-ref="included-relative-file" class="path"/> <context ref="def:line-continue"/> <context ref="def:c-like-comment"/> <context ref="def:c-like-comment-multiline"/> </include> </context> <context id="include" end-at-line-end="true"> <start extended="true"> (\%{preproc-start}(include|import))\s* (<.*?>)? </start> <include> <context sub-pattern="1" where="start" style-ref="preprocessor"/> <context id="included-file" sub-pattern="3" where="start" style-ref="included-file" class="path"/> <context ref="def:line-continue"/> <context ref="def:c-like-comment"/> <context ref="def:c-like-comment-multiline"/> </include> </context> <context id="preprocessor-with-c-code" end-at-line-end="true"> <start extended="true"> \%{preproc-start} ((el)?if| define(\s+\w+(\([^)]*\)?)?)? ) </start> <include> <context sub-pattern="0" where="start" style-ref="preprocessor"/> <context ref="def:line-continue"/> <context ref="comments:*"/> <context ref="no-preprocessor:*"/> </include> </context> <context id="preprocessor" end-at-line-end="true"> <start extended="true"> (\%{preproc-start} (undef|pragma|ident|(el)?ifn?def|else|endif|line|error|warning|embed) )\b </start> <include> <context sub-pattern="1" where="start" style-ref="preprocessor"/> <context ref="def:line-continue"/> <context ref="comments:*"/> <context ref="string"/> </include> </context> <context id="misplaced-char" style-ref="error"> <match>[#\\]</match> </context> <context id="string" style-ref="string" end-at-line-end="true" class="string" class-disabled="no-spell-check"> <start>(L|u8|u|U)?"</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" class="string"> <match>(L|u8|u|U)?'(\%{escaped-character}|.)'</match> </context> <!-- http://www.lysator.liu.se/c/ANSI-C-grammar-l.html --> <context id="float"> <match extended="true" case-sensitive="false"> (?<![\w\.]) (((\.\d+ | \d+\.\d*) (e[+-]?\d+)? | (\d+e[+-]?\d+) | (0x[a-f\d]*\.?[a-f\d]*p[+-]?\d+)) [fl]?) (\w*) </match> <include> <context sub-pattern="1" style-ref="floating-point"/> <context sub-pattern="7" style-ref="error"/> </include> </context> <context id="hexadecimal"> <match extended="true" case-sensitive="false"> (?<![\w\.]) (0x[a-f\d]+\%{integer-suffix}) (\w*) </match> <include> <context sub-pattern="1" style-ref="hexadecimal"/> <context sub-pattern="2" style-ref="error"/> </include> </context> <context id="octal"> <match extended="true"> (?<![\w\.]) (0[0-7]+\%{integer-suffix}) (\w*) </match> <include> <context sub-pattern="1" style-ref="octal"/> <context sub-pattern="2" style-ref="error"/> </include> </context> <context id="binary"> <match extended="true"> (?<![\w\.]) (0[bB][01]+\%{integer-suffix}) (\w*) </match> <include> <context sub-pattern="1" style-ref="binary"/> <context sub-pattern="2" style-ref="error"/> </include> </context> <context id="decimal"> <match extended="true"> (?<![\w\.]) ((?:0|[1-9]\d*)\%{integer-suffix}) (\w*) </match> <include> <context sub-pattern="1" style-ref="decimal"/> <context sub-pattern="2" style-ref="error"/> </include> </context> <context id="keywords" style-ref="keyword"> <keyword>asm</keyword> <keyword>break</keyword> <keyword>case</keyword> <keyword>constexpr</keyword> <keyword>continue</keyword> <keyword>default</keyword> <keyword>do</keyword> <keyword>else</keyword> <keyword>for</keyword> <keyword>fortran</keyword> <keyword>goto</keyword> <keyword>if</keyword> <keyword>return</keyword> <keyword>switch</keyword> <keyword>while</keyword> </context> <context id="type-keywords" style-ref="type-keyword"> <keyword>enum</keyword> <keyword>struct</keyword> <keyword>typedef</keyword> <keyword>union</keyword> </context> <context id="operators" style-ref="operator"> <keyword>(_A|a)lignof</keyword> <keyword>defined</keyword> <keyword>_Generic</keyword> <keyword>offsetof</keyword> <keyword>_Pragma</keyword> <keyword>sizeof</keyword> <keyword>(_S|s)tatic_assert</keyword> <keyword>typeof</keyword> </context> <context id="types" style-ref="type"> <keyword>(_B|b)ool</keyword> <keyword>_Complex</keyword> <keyword>_Imaginary</keyword> <keyword>char</keyword> <keyword>double</keyword> <keyword>float</keyword> <keyword>int</keyword> <keyword>long</keyword> <keyword>short</keyword> <keyword>signed</keyword> <keyword>unsigned</keyword> <keyword>va_list</keyword> <keyword>void</keyword> <keyword>[a-z_][0-9a-z_]+(_t|_T)</keyword> </context> <context id="storage-class" style-ref="storage-class"> <keyword>(_A|a)lignas</keyword> <keyword>_Atomic</keyword> <keyword>(_N|n)oreturn</keyword> <keyword>(_T|t)hread_local</keyword> <keyword>auto</keyword> <keyword>const</keyword> <keyword>extern</keyword> <keyword>inline</keyword> <keyword>register</keyword> <keyword>restrict</keyword> <keyword>static</keyword> <keyword>volatile</keyword> </context> <!-- C99 booleans --> <context id="boolean" style-ref="boolean"> <keyword>true</keyword> <keyword>false</keyword> </context> <context id="nullptr" style-ref="nullptr"> <keyword>nullptr</keyword> </context> <context id="common-defines" style-ref="common-defines"> <keyword>NULL</keyword> <keyword>MAX</keyword> <keyword>MIN</keyword> <keyword>TRUE</keyword> <keyword>FALSE</keyword> <keyword>__LINE__</keyword> <keyword>__DATE__</keyword> <keyword>__FILE__</keyword> <keyword>__func__</keyword> <keyword>__TIME__</keyword> <keyword>__STDC(_VERSION)?__</keyword> <keyword>__VA_ARGS__</keyword> </context> <context id="standard-streams" style-ref="standard-stream"> <keyword>stdin</keyword> <keyword>stdout</keyword> <keyword>stderr</keyword> </context> <context id="signals" style-ref="signal-name"> <keyword>SIGABRT</keyword> <keyword>SIGALRM</keyword> <keyword>SIGCHLD</keyword> <keyword>SIGCONT</keyword> <keyword>SIGFPE</keyword> <keyword>SIGHUP</keyword> <keyword>SIGILL</keyword> <keyword>SIGINT</keyword> <keyword>SIGKILL</keyword> <keyword>SIGPIPE</keyword> <keyword>SIGQUIT</keyword> <keyword>SIGSEGV</keyword> <keyword>SIGSTOP</keyword> <keyword>SIGTERM</keyword> <keyword>SIGTRAP</keyword> <keyword>SIGTSTP</keyword> <keyword>SIGTTIN</keyword> <keyword>SIGTTOU</keyword> <keyword>SIGUSR1</keyword> <keyword>SIGUSR2</keyword> </context> <context id="comments"> <include> <context ref="gtk-doc:inline-docs-section"/> <context ref="def:c-like-comment" style-ref="comment"/> <context ref="def:c-like-comment-multiline" style-ref="comment"/> <context ref="def:c-like-close-comment-outside-comment" style-ref="error"/> </include> </context> <context id="no-preprocessor"> <include> <context ref="string"/> <context ref="char"/> <context ref="float"/> <context ref="hexadecimal"/> <context ref="octal"/> <context ref="binary"/> <context ref="decimal"/> <context ref="keywords"/> <context ref="type-keywords"/> <context ref="operators"/> <context ref="types"/> <context ref="storage-class"/> <context ref="boolean"/> <context ref="nullptr"/> <context ref="common-defines"/> <context ref="standard-streams"/> <context ref="signals"/> </include> </context> <!--Main context--> <context id="c" class="no-spell-check"> <include> <context ref="def:line-continue" ignore-style="true"/> <context ref="comments:*"/> <context ref="if0-comment"/> <context ref="include-relative"/> <context ref="include"/> <context ref="preprocessor"/> <context ref="preprocessor-with-c-code"/> <context ref="no-preprocessor:*"/> <context ref="misplaced-char"/> </include> </context> </definitions> </language>