%PDF- %PDF-
Direktori : /usr/share/gtksourceview-5/language-specs/ |
Current File : //usr/share/gtksourceview-5/language-specs/python3.lang |
<?xml version="1.0" encoding="UTF-8"?> <!-- This file is part of GtkSourceView Author: Stefano Palazzo <stefano-palazzo@ubuntu.com> Copyright (C) 2012 Stefano Palazzo <stefano-palazzo@ubuntu.com> 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="python3" name="Python" version="2.0" _section="Script"> <metadata> <property name="mimetypes">text/x-python;application/x-python;text/x-python3</property> <property name="globs">*.py;*.py3;*.pyi</property> <property name="line-comment-start">#</property> <property name="suggested-suffix">.py</property> </metadata> <styles> <style id="module-handler" name="Module Handler" map-to="python:module-handler"/> <style id="keyword" name="Keyword" map-to="python:keyword"/> <style id="multiline-string" name="Multiline string" map-to="python:multiline-string"/> <style id="string" name="String" map-to="python:string"/> <style id="escaped-char" name="Escaped Character" map-to="python:escaped-char"/> <style id="format" name="Format" map-to="python:format"/> <style id="string-conversion" name="String Conversion" map-to="python:string-conversion"/> <style id="special-variable" name="Special Variable" map-to="python:special-variable"/> <style id="boolean" name="Boolean" map-to="python:boolean"/> <style id="floating-point" name="Floating point number" map-to="python:floating-point"/> <style id="decimal" name="Decimal number" map-to="python:decimal"/> <style id="base-n-integer" name="Base-N number" map-to="python:base-n-integer"/> <style id="complex" name="Complex number" map-to="python:complex"/> <style id="builtin-constant" name="Builtin Constant" map-to="python:builtin-constant"/> <style id="builtin-object" name="Builtin Object" map-to="python:builtin-object"/> <style id="builtin-function" name="Builtin Function" map-to="python:builtin-function"/> <style id="function-name" name="Function Name" map-to="python:function-name"/> <style id="class-name" name="Class Name" map-to="python:class-name"/> <style id="decorator" name="Decorator" map-to="python:decorator"/> <style id="f-string-curly-braces" name="f-string curly braces" map-to="def:special-char"/> </styles> <definitions> <!-- https://docs.python.org/3/reference/lexical_analysis.html#identifiers Underscore (U+005F LOW LINE) is a member of \p{Pc}, and so included in def:unicode-xid-continue --> <define-regex id="identifier" extended="true"> (?> (?: _ | \%{def:unicode-xid-start} ) \%{def:unicode-xid-continue}* ) </define-regex> <define-regex id="number">[1-9][0-9]*</define-regex> <define-regex id="identifier-path" extended="true"> (\%{identifier}\.)*\%{identifier} </define-regex> <define-regex id="relative-path" extended="true"> (\.*\%{identifier-path}|\.+) </define-regex> <!-- http://docs.python.org/lib/typesseq-strings.html --> <context id="format" style-ref="format" extend-parent="false"> <match extended="true"> % # leading % sign \(\%{identifier}\)? # mapping key [#0\-\ \+]* # conversion flags (\-?\%{number}|\*)? # minimum field width (\.(\-?\%{number}|\*))? # precision (hlL)? # length modifier [diouxXeEfFgGcrs%] # conversion type </match> </context> <context id="curly-braces" extend-parent="true"> <start>\{</start> <end>\}</end> <include> <context ref="python3"/> <context ref="curly-braces"/> </include> </context> <context id="f-string-curly-braces" extend-parent="false" class-disabled="string"> <start>(\{)</start> <end>(\})</end> <include> <context ref="python3"/> <context ref="curly-braces"/> <context sub-pattern="1" where="start" style-ref="f-string-curly-braces"/> <context sub-pattern="1" where="end" style-ref="f-string-curly-braces"/> </include> </context> <context id="escaped-curly-brace" style-ref="escaped-char" extend-parent="true"> <match>\{\{</match> </context> <define-regex id="string-prefix">(b|B)?</define-regex> <define-regex id="raw-string-prefix">(r|R|rb|RB|rB|Rb|br|BR|bR|Br)</define-regex> <define-regex id="f-string-prefix">(f|F)</define-regex> <context id="multiline-double-quoted-string" style-ref="multiline-string" class="string" class-disabled="no-spell-check"> <start>\%{string-prefix}"""</start> <end>"""</end> <include> <context ref="format"/> <context ref="python:escaped-char"/> </include> </context> <context id="multiline-single-quoted-string" style-ref="multiline-string" class="string" class-disabled="no-spell-check"> <start>\%{string-prefix}'''</start> <end>'''</end> <include> <context ref="format"/> <context ref="python:escaped-char"/> </include> </context> <context id="double-quoted-string" style-ref="string" end-at-line-end="true" class="string" class-disabled="no-spell-check"> <start>\%{string-prefix}"</start> <end>"</end> <include> <context ref="format"/> <context ref="python:escaped-char"/> <context ref="def:line-continue"/> </include> </context> <context id="single-quoted-string" style-ref="string" end-at-line-end="true" class="string" class-disabled="no-spell-check"> <start>\%{string-prefix}'</start> <end>'</end> <include> <context ref="format"/> <context ref="python:escaped-char"/> <context ref="def:line-continue"/> </include> </context> <context id="multiline-double-quoted-f-string" class="string" class-disabled="no-spell-check"> <start>(\%{f-string-prefix}""")</start> <end>(""")</end> <include> <context ref="escaped-curly-brace"/> <context ref="f-string-curly-braces"/> <context ref="python:escaped-char"/> <context ref="def:line-continue"/> <context style-ref="multiline-string" extend-parent="false" class="string"> <match>.</match> </context> <context sub-pattern="1" where="start" style-ref="string"/> <context sub-pattern="1" where="end" style-ref="string"/> </include> </context> <context id="multiline-single-quoted-f-string" class="string" class-disabled="no-spell-check"> <start>(\%{f-string-prefix}''')</start> <end>(''')</end> <include> <context ref="escaped-curly-brace"/> <context ref="f-string-curly-braces"/> <context ref="python:escaped-char"/> <context ref="def:line-continue"/> <context style-ref="multiline-string" extend-parent="false" class="string"> <match>.</match> </context> <context sub-pattern="1" where="start" style-ref="string"/> <context sub-pattern="1" where="end" style-ref="string"/> </include> </context> <context id="double-quoted-f-string" end-at-line-end="true" class="string" class-disabled="no-spell-check"> <start>(\%{f-string-prefix}")</start> <end>(")</end> <include> <context ref="escaped-curly-brace"/> <context ref="f-string-curly-braces"/> <context ref="python:escaped-char"/> <context ref="def:line-continue"/> <context style-ref="string" extend-parent="false" class="string"> <match>.</match> </context> <context sub-pattern="1" where="start" style-ref="string"/> <context sub-pattern="1" where="end" style-ref="string"/> </include> </context> <context id="single-quoted-f-string" end-at-line-end="true" class="string" class-disabled="no-spell-check"> <start>(\%{f-string-prefix}')</start> <end>(')</end> <include> <context ref="escaped-curly-brace"/> <context ref="f-string-curly-braces"/> <context ref="python:escaped-char"/> <context ref="def:line-continue"/> <context style-ref="string" extend-parent="false" class="string"> <match>.</match> </context> <context sub-pattern="1" where="start" style-ref="string"/> <context sub-pattern="1" where="end" style-ref="string"/> </include> </context> <context id="multiline-double-quoted-raw-string" style-ref="multiline-string" class="string" class-disabled="no-spell-check"> <start>\%{raw-string-prefix}"""</start> <end>"""</end> <include> <context ref="format"/> </include> </context> <context id="multiline-single-quoted-raw-string" style-ref="multiline-string" class="string" class-disabled="no-spell-check"> <start>\%{raw-string-prefix}'''</start> <end>'''</end> <include> <context ref="format"/> </include> </context> <context id="double-quoted-raw-string" style-ref="string" end-at-line-end="true" class="string" class-disabled="no-spell-check"> <start>\%{raw-string-prefix}"</start> <end>"</end> <include> <context ref="format"/> <context ref="def:line-continue"/> </include> </context> <context id="single-quoted-raw-string" style-ref="string" end-at-line-end="true" class="string" class-disabled="no-spell-check"> <start>\%{raw-string-prefix}'</start> <end>'</end> <include> <context ref="format"/> <context ref="def:line-continue"/> </include> </context> <context id="module-handler-from"> <match extended="true"> (from) \s+ (\%{relative-path}) </match> <include> <context sub-pattern="1" style-ref="module-handler"/> <context sub-pattern="2" style-ref="class-name"/> </include> </context> <!-- 'def' is also present in the 'keyword' context, but has a lower priority, so 'def' is highlighted even if the function name doesn't match. --> <context id="function-definition"> <match extended="true"> (def) \s+ (\%{identifier}) </match> <include> <context sub-pattern="1" style-ref="keyword"/> <context sub-pattern="2" style-ref="function-name"/> </include> </context> <!-- 'class' is also present in the 'keyword' context, but has a lower priority, so 'class' is highlighted even if the class name doesn't match. --> <context id="class-definition"> <match extended="true"> (class) \s+ (\%{identifier}) </match> <include> <context sub-pattern="1" style-ref="keyword"/> <context sub-pattern="2" style-ref="class-name"/> </include> </context> <context id="decorator" style-ref="decorator"> <match>@\%{identifier-path}</match> </context> <context id="python3" class="no-spell-check"> <include> <context ref="def:shebang"/> <context ref="def:shell-like-comment"/> <context ref="multiline-double-quoted-string"/> <context ref="multiline-single-quoted-string"/> <context ref="double-quoted-string"/> <context ref="single-quoted-string"/> <context ref="multiline-double-quoted-f-string"/> <context ref="multiline-single-quoted-f-string"/> <context ref="single-quoted-f-string"/> <context ref="double-quoted-f-string"/> <context ref="multiline-double-quoted-raw-string"/> <context ref="multiline-single-quoted-raw-string"/> <context ref="double-quoted-raw-string"/> <context ref="single-quoted-raw-string"/> <context ref="python:special-variables"/> <context ref="python:boolean"/> <context ref="python:complex"/> <context ref="python:float"/> <context id="decimal" style-ref="decimal"> <match>(?<![\w\.])([1-9](_?[0-9])*|0)(?![\w\.])</match> </context> <context id="binary" style-ref="base-n-integer"> <match>(?<![\w\.])0[bB](_?[0-1])+(?![\w\.])</match> </context> <context id="octal" style-ref="base-n-integer"> <match>(?<![\w\.])0[oO](_?[0-7])+(?![\w\.])</match> </context> <context id="hex" style-ref="base-n-integer"> <match>(?<![\w\.])0[xX](_?[0-9A-Fa-f])+(?![\w\.])</match> </context> <context ref="module-handler-from"/> <context ref="python:module-handler"/> <context ref="function-definition"/> <context ref="class-definition"/> <context ref="decorator"/> <context ref="python:keywords"/> <context id="3x-only-keywords" style-ref="keyword"> <keyword>async</keyword> <keyword>await</keyword> <keyword>nonlocal</keyword> </context> <context id="3x-soft-keywords"> <!-- Soft keywords "match" and "case" are only reserved under specific contexts. Use refined regex to eliminate most false positives. --> <match extended="true"> ^[ \t]* (match|case) \b(?![ \t]*[:,;=^&|@~\)\]\}]) </match> <include> <context sub-pattern="1" style-ref="keyword"/> </include> </context> <context ref="python:builtin-constants"/> <context ref="python:builtin-objects"/> <context id="3x-only-builtin-objects" style-ref="builtin-object"> <prefix>(?<![\w\.])</prefix> <keyword>BaseException</keyword> <keyword>BaseExceptionGroup</keyword> <keyword>BlockingIOError</keyword> <keyword>BrokenPipeError</keyword> <keyword>BufferError</keyword> <keyword>BytesWarning</keyword> <keyword>ChildProcessError</keyword> <keyword>ConnectionAbortedError</keyword> <keyword>ConnectionError</keyword> <keyword>ConnectionRefusedError</keyword> <keyword>ConnectionResetError</keyword> <keyword>EncodingWarning</keyword> <keyword>ExceptionGroup</keyword> <keyword>FileExistsError</keyword> <keyword>FileNotFoundError</keyword> <keyword>GeneratorExit</keyword> <keyword>ImportWarning</keyword> <keyword>InterruptedError</keyword> <keyword>IsADirectoryError</keyword> <keyword>ModuleNotFoundError</keyword> <keyword>NotADirectoryError</keyword> <keyword>PermissionError</keyword> <keyword>ProcessLookupError</keyword> <keyword>RecursionError</keyword> <keyword>ResourceWarning</keyword> <keyword>StopAsyncIteration</keyword> <keyword>TimeoutError</keyword> <keyword>UnicodeWarning</keyword> </context> <context ref="python:builtin-functions"/> <context id="3x-only-builtin-functions" style-ref="builtin-function"> <prefix>(?<![\w\.])</prefix> <keyword>aiter</keyword> <keyword>anext</keyword> <keyword>ascii</keyword> <keyword>breakpoint</keyword> <keyword>bytearray</keyword> <keyword>bytes</keyword> <keyword>exec</keyword> <keyword>memoryview</keyword> <keyword>next</keyword> <keyword>print</keyword> </context> </include> </context> </definitions> </language>