aboutsummaryrefslogtreecommitdiffstats
path: root/src/share
diff options
context:
space:
mode:
authorAlessandro Portale <alessandro.portale@qt.io>2018-08-17 21:09:51 +0200
committerhjk <hjk@qt.io>2018-08-20 10:43:41 +0000
commite3d65fcf3f87806031f647da0da71675e1bc404f (patch)
treec02a9582626a33abb5d00b43d5e724ca9be2887f /src/share
parent4b57f6ac3d5df7359bf13c03aa82fb52bdf33bce (diff)
TextEditor: Ship generic Kate highlight definition for Python
Qt Creator comes with several Kate highlighter definition files. With the release of Qt for Python and, soon, the possibility for Python code completion via lsp, it seems appropriate to support Python syntax highlighting by default. Change-Id: If42c620d802920b54c508780b0d264343401b9a7 Reviewed-by: Orgad Shaneh <orgads@gmail.com> Reviewed-by: David Schulz <david.schulz@qt.io> Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/share')
-rw-r--r--src/share/3rdparty/generic-highlighter/python.xml686
1 files changed, 686 insertions, 0 deletions
diff --git a/src/share/3rdparty/generic-highlighter/python.xml b/src/share/3rdparty/generic-highlighter/python.xml
new file mode 100644
index 0000000000..59b31d6c6f
--- /dev/null
+++ b/src/share/3rdparty/generic-highlighter/python.xml
@@ -0,0 +1,686 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language>
+<!-- Python syntax highlightning v0.9 by Per Wigren -->
+<!-- Python syntax highlighting v1.9 by Michael Bueker (improved keyword differentiation) -->
+<!-- Python syntax highlighting v1.97 by Paul Giannaros -->
+<!-- Python syntax highlighting v1.99 by Primoz Anzur -->
+<!-- Python syntax highlighting v2.01 by Paul Giannaros:
+ * full format character support
+ * unicode string modifier supported -->
+<!-- v2.02 remove RegExpr for nums and make indent consistent -->
+<!-- v2.03 highlight decorators, remove operator regex, don't highlight parens as operators -->
+<!-- v2.04 make alerts visible even if they are directly after ''' or # without a space -->
+<!-- v2.06 decorator names can (and often do) contain periods -->
+<!-- v2.07 add support for %prog and co, see bug 142832 -->
+<!-- v2.08 add missing overloaders, new Python 3 statements, builtins, and keywords -->
+<!-- v2.29 recognize escape sequenzes correctly -->
+<language name="Python" version="7" style="python" indenter="python" kateversion="5.0" section="Scripts" extensions="*.py;*.pyw;SConstruct;SConscript" mimetype="application/x-python;text/x-python;text/x-python3" casesensitive="1" author="Michael Bueker" license="">
+ <highlighting>
+ <list name="import">
+ <item>import</item>
+ <item>from</item>
+ <item>as</item>
+ </list>
+ <list name="defs">
+ <item>class</item>
+ <item>def</item>
+ <item>del</item>
+ <item>global</item>
+ <item>lambda</item>
+ <item>nonlocal</item>
+ </list>
+ <list name="operators">
+ <item>and</item>
+ <item>in</item>
+ <item>is</item>
+ <item>not</item>
+ <item>or</item>
+ </list>
+ <list name="flow">
+ <item>assert</item>
+ <item>break</item>
+ <item>continue</item>
+ <item>elif</item>
+ <item>else</item>
+ <item>except</item>
+ <item>finally</item>
+ <item>for</item>
+ <item>if</item>
+ <item>pass</item>
+ <item>raise</item>
+ <item>return</item>
+ <item>try</item>
+ <item>while</item>
+ <item>with</item>
+ <item>yield</item>
+ <item>async</item>
+ <item>await</item>
+ </list>
+ <list name="builtinfuncs">
+ <item>__import__</item>
+ <item>abs</item>
+ <item>all</item>
+ <item>any</item>
+ <item>apply</item>
+ <item>ascii</item>
+ <item>basestring</item>
+ <item>bin</item>
+ <item>bool</item>
+ <item>buffer</item>
+ <item>bytearray</item>
+ <item>bytes</item>
+ <item>callable</item>
+ <item>chr</item>
+ <item>classmethod</item>
+ <item>cmp</item>
+ <item>coerce</item>
+ <item>compile</item>
+ <item>complex</item>
+ <item>delattr</item>
+ <item>dict</item>
+ <item>dir</item>
+ <item>divmod</item>
+ <item>enumerate</item>
+ <item>eval</item>
+ <item>exec</item>
+ <item>execfile</item>
+ <item>file</item>
+ <item>filter</item>
+ <item>float</item>
+ <item>format</item>
+ <item>frozenset</item>
+ <item>getattr</item>
+ <item>globals</item>
+ <item>hasattr</item>
+ <item>hash</item>
+ <item>help</item>
+ <item>hex</item>
+ <item>id</item>
+ <item>input</item>
+ <item>int</item>
+ <item>intern</item>
+ <item>isinstance</item>
+ <item>issubclass</item>
+ <item>iter</item>
+ <item>len</item>
+ <item>list</item>
+ <item>locals</item>
+ <item>long</item>
+ <item>map</item>
+ <item>max</item>
+ <item>memoryview</item>
+ <item>min</item>
+ <item>next</item>
+ <item>object</item>
+ <item>oct</item>
+ <item>open</item>
+ <item>ord</item>
+ <item>pow</item>
+ <item>print</item>
+ <item>property</item>
+ <item>range</item>
+ <item>raw_input</item>
+ <item>reduce</item>
+ <item>reload</item>
+ <item>repr</item>
+ <item>reversed</item>
+ <item>round</item>
+ <item>set</item>
+ <item>setattr</item>
+ <item>slice</item>
+ <item>sorted</item>
+ <item>staticmethod</item>
+ <item>str</item>
+ <item>sum</item>
+ <item>super</item>
+ <item>tuple</item>
+ <item>type</item>
+ <item>unichr</item>
+ <item>unicode</item>
+ <item>vars</item>
+ <item>xrange</item>
+ <item>zip</item>
+ </list>
+ <list name="specialvars">
+ <item>None</item>
+ <item>self</item>
+ <item>True</item>
+ <item>False</item>
+ <item>NotImplemented</item>
+ <item>Ellipsis</item>
+ <item>__debug__</item>
+ <item>__file__</item>
+ <item>__name__</item>
+ </list>
+ <list name="bindings">
+ <item>SIGNAL</item>
+ <item>SLOT</item>
+ <item>connect</item>
+ </list>
+ <list name="overloaders">
+ <item>__new__</item>
+ <item>__init__</item>
+ <item>__del__</item>
+ <item>__repr__</item>
+ <item>__str__</item>
+ <item>__lt__</item>
+ <item>__le__</item>
+ <item>__eq__</item>
+ <item>__ne__</item>
+ <item>__gt__</item>
+ <item>__ge__</item>
+ <item>__cmp__</item>
+ <item>__rcmp__</item>
+ <item>__hash__</item>
+ <item>__nonzero__</item>
+ <item>__unicode__</item>
+ <item>__getattr__</item>
+ <item>__setattr__</item>
+ <item>__delattr__</item>
+ <item>__getattribute__</item>
+ <item>__get__</item>
+ <item>__set__</item>
+ <item>__delete__</item>
+ <item>__call__</item>
+ <item>__len__</item>
+ <item>__getitem__</item>
+ <item>__setitem__</item>
+ <item>__delitem__</item>
+ <item>__iter__</item>
+ <item>__reversed__</item>
+ <item>__contains__</item>
+ <item>__getslice__</item>
+ <item>__setslice__</item>
+ <item>__delslice__</item>
+ <item>__add__</item>
+ <item>__sub__</item>
+ <item>__mul__</item>
+ <item>__floordiv__</item>
+ <item>__mod__</item>
+ <item>__divmod__</item>
+ <item>__pow__</item>
+ <item>__lshift__</item>
+ <item>__rshift__</item>
+ <item>__and__</item>
+ <item>__xor__</item>
+ <item>__or__</item>
+ <item>__div__</item>
+ <item>__truediv__</item>
+ <item>__radd__</item>
+ <item>__rsub__</item>
+ <item>__rmul__</item>
+ <item>__rdiv__</item>
+ <item>__rtruediv__</item>
+ <item>__rfloordiv__</item>
+ <item>__rmod__</item>
+ <item>__rdivmod__</item>
+ <item>__rpow__</item>
+ <item>__rlshift__</item>
+ <item>__rrshift__</item>
+ <item>__rand__</item>
+ <item>__rxor__</item>
+ <item>__ror__</item>
+ <item>__iadd__</item>
+ <item>__isub__</item>
+ <item>__imul__</item>
+ <item>__idiv__</item>
+ <item>__itruediv__</item>
+ <item>__ifloordiv__</item>
+ <item>__imod__</item>
+ <item>__ipow__</item>
+ <item>__ilshift__</item>
+ <item>__irshift__</item>
+ <item>__iand__</item>
+ <item>__ixor__</item>
+ <item>__ior__</item>
+ <item>__neg__</item>
+ <item>__pos__</item>
+ <item>__abs__</item>
+ <item>__invert__</item>
+ <item>__complex__</item>
+ <item>__int__</item>
+ <item>__long__</item>
+ <item>__float__</item>
+ <item>__oct__</item>
+ <item>__hex__</item>
+ <item>__index__</item>
+ <item>__coerce__</item>
+ <item>__enter__</item>
+ <item>__exit__</item>
+ <item>__bytes__</item>
+ <item>__format__</item>
+ <item>__next__</item>
+ <item>__dir__</item>
+ <item>__await__</item>
+ <item>__aiter__</item>
+ <item>__anext__</item>
+ <item>__aenter__</item>
+ <item>__aexit__</item>
+ </list>
+ <list name="exceptions">
+ <!--
+ Exceptions list resources used:
+ - http://docs.python.org/2.7/library/exceptions.html#exception-hierarchy
+ - http://docs.python.org/3.4/library/exceptions.html#exception-hierarchy
+ -->
+ <item>ArithmeticError</item>
+ <item>AssertionError</item>
+ <item>AttributeError</item>
+ <item>BaseException</item>
+ <item>BlockingIOError</item>
+ <item>BrokenPipeError</item>
+ <item>BufferError</item>
+ <item>BytesWarning</item>
+ <item>ChildProcessError</item>
+ <item>ConnectionAbortedError</item>
+ <item>ConnectionError</item>
+ <item>ConnectionRefusedError</item>
+ <item>ConnectionResetError</item>
+ <item>DeprecationWarning</item>
+ <item>EnvironmentError</item>
+ <item>EOFError</item>
+ <item>Exception</item>
+ <item>FileExistsError</item>
+ <item>FileNotFoundError</item>
+ <item>FloatingPointError</item>
+ <item>FutureWarning</item>
+ <item>GeneratorExit</item>
+ <item>ImportError</item>
+ <item>ImportWarning</item>
+ <item>IndentationError</item>
+ <item>IndexError</item>
+ <item>InterruptedError</item>
+ <item>IOError</item>
+ <item>IsADirectoryError</item>
+ <item>KeyboardInterrupt</item>
+ <item>KeyError</item>
+ <item>LookupError</item>
+ <item>MemoryError</item>
+ <item>NameError</item>
+ <item>NotADirectoryError</item>
+ <item>NotImplementedError</item>
+ <item>OSError</item>
+ <item>OverflowError</item>
+ <item>PendingDeprecationWarning</item>
+ <item>PermissionError</item>
+ <item>ProcessLookupError</item>
+ <item>ReferenceError</item>
+ <item>ResourceWarning</item>
+ <item>RuntimeError</item>
+ <item>RuntimeWarning</item>
+ <item>StandardError</item>
+ <item>StopIteration</item>
+ <item>SyntaxError</item>
+ <item>SyntaxWarning</item>
+ <item>SystemError</item>
+ <item>SystemExit</item>
+ <item>TabError</item>
+ <item>TimeoutError</item>
+ <item>TypeError</item>
+ <item>UnboundLocalError</item>
+ <item>UnicodeDecodeError</item>
+ <item>UnicodeEncodeError</item>
+ <item>UnicodeError</item>
+ <item>UnicodeTranslateError</item>
+ <item>UnicodeWarning</item>
+ <item>UserWarning</item>
+ <item>ValueError</item>
+ <item>Warning</item>
+ <item>WindowsError</item>
+ <item>ZeroDivisionError</item>
+ </list>
+ <contexts>
+ <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
+ <keyword attribute="Import" String="import" context="#stay"/>
+ <keyword attribute="Definition Keyword" String="defs" context="#stay"/>
+ <keyword attribute="Operator Keyword" String="operators" context="#stay"/>
+ <keyword attribute="Flow Control Keyword" String="flow" context="#stay"/>
+ <keyword attribute="Builtin Function" String="builtinfuncs" context="#stay"/>
+ <keyword attribute="Special Variable" String="specialvars" context="#stay"/>
+ <keyword attribute="Extensions" String="bindings" context="#stay"/>
+ <keyword attribute="Exceptions" String="exceptions" context="#stay"/>
+ <keyword attribute="Overloaders" String="overloaders" context="#stay"/>
+ <RegExpr attribute="Normal Text" String="[a-zA-Z_][a-zA-Z_0-9]{2,}" context="#stay"/>
+
+ <RegExpr attribute="Complex" String=" ((([0-9]*\.[0-9]+|[0-9]+\.)|([0-9]+|([0-9]*\.[0-9]+|[0-9]+\.))[eE](\+|-)?[0-9]+)|[0-9]+)[jJ]" context="#stay"/>
+ <Float attribute="Float" context="#stay" />
+ <HlCHex attribute="Hex" context="#stay"/>
+ <HlCOct attribute="Octal" context="#stay"/>
+ <Int attribute="Int" context="#stay">
+ <StringDetect attribute="Int" String="L" insensitive="true" context="#stay"/>
+ </Int>
+
+ <RegExpr attribute="Int" String=" ([0-9]+_)+[0-9]+" context="#stay"/>
+ <RegExpr attribute="Float" String=" ([0-9]+_)+[0-9]+\.[0-9]+" context="#stay"/>
+ <RegExpr attribute="Hex" String=" [0-9]x([A-F0-9]+_)+[A-F0-9]+" context="#stay"/>
+
+ <DetectChar attribute="Normal Text" char="{" context="Dictionary" beginRegion="Dictionary"/>
+ <DetectChar attribute="Normal Text" char="[" context="List" beginRegion="List"/>
+ <DetectChar attribute="Normal Text" char="(" context="Tuple" beginRegion="Tuple"/>
+
+ <IncludeRules context="CommentVariants" />
+
+ <DetectChar attribute="Comment" char="#" context="Hash comment"/>
+
+ <IncludeRules context="StringVariants" />
+
+ <RegExpr attribute="Decorator" String="@[_a-zA-Z][\._a-zA-Z0-9]*" firstNonSpace="true"/>
+ <AnyChar attribute="Operator" String="+*/%\|=;\!&lt;&gt;!^&amp;~-@" context="#stay"/>
+ </context>
+
+ <context name="#CheckForString" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+ <DetectSpaces/>
+ <LineContinue attribute="Normal Text" context="CheckForStringNext"/>
+ </context>
+
+ <context name="CheckForStringNext" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+ <DetectSpaces/>
+ <LineContinue attribute="Normal Text" context="CheckForStringNext"/>
+ <IncludeRules context="StringVariants"/>
+ </context>
+
+ <context name="StringVariants" attribute="Normal Text" lineEndContext="#stay">
+ <DetectSpaces/>
+
+ <RegExpr attribute="String" String="u?'''" insensitive="true" context="Triple A-string" beginRegion="Triple A-region"/>
+ <RegExpr attribute="String" String="u?&quot;&quot;&quot;" insensitive="true" context="Triple Q-string" beginRegion="Triple Q-region"/>
+ <RegExpr attribute="String" String="u?'" insensitive="true" context="Single A-string"/>
+ <RegExpr attribute="String" String="u?&quot;" insensitive="true" context="Single Q-string"/>
+
+ <RegExpr attribute="Raw String" String="(u?r|ru)'''" insensitive="true" context="Raw Triple A-string" beginRegion="Triple A-region"/>
+ <RegExpr attribute="Raw String" String="(u?r|ru)&quot;&quot;&quot;" insensitive="true" context="Raw Triple Q-string" beginRegion="Triple Q-region"/>
+ <RegExpr attribute="Raw String" String="(u?r|ru)'" insensitive="true" context="Raw A-string"/>
+ <RegExpr attribute="Raw String" String="(u?r|ru)&quot;" insensitive="true" context="Raw Q-string"/>
+
+ <StringDetect attribute="F-String" String="f'''" insensitive="true" context="Triple A-F-String" beginRegion="Triple A-region"/>
+ <StringDetect attribute="F-String" String="f&quot;&quot;&quot;" insensitive="true" context="Triple Q-F-String" beginRegion="Triple Q-region"/>
+ <StringDetect attribute="F-String" String="f'" insensitive="true" context="Single A-F-String"/>
+ <StringDetect attribute="F-String" String="f&quot;" insensitive="true" context="Single Q-F-String"/>
+
+ <RegExpr attribute="Raw F-String" String="(fr|rf)'''" insensitive="true" context="Raw Triple A-F-String" beginRegion="Triple A-region"/>
+ <RegExpr attribute="Raw F-String" String="(fr|rf)&quot;&quot;&quot;" insensitive="true" context="Raw Triple Q-F-String" beginRegion="Triple Q-region"/>
+ <RegExpr attribute="Raw F-String" String="(fr|rf)'" insensitive="true" context="Raw A-F-String"/>
+ <RegExpr attribute="Raw F-String" String="(fr|rf)&quot;" insensitive="true" context="Raw Q-F-String"/>
+ </context>
+
+ <context name="CommentVariants" attribute="Normal Text" lineEndContext="#stay">
+ <DetectSpaces/>
+
+ <RegExpr attribute="Comment" String="u?'''" insensitive="true" firstNonSpace="true" context="Triple A-comment" beginRegion="Triple A-region"/>
+ <RegExpr attribute="Comment" String="u?&quot;&quot;&quot;" insensitive="true" firstNonSpace="true" context="Triple Q-comment" beginRegion="Triple Q-region"/>
+ <RegExpr attribute="Comment" String="u?'" insensitive="true" firstNonSpace="true" context="Single A-comment"/>
+ <RegExpr attribute="Comment" String="u?&quot;" insensitive="true" firstNonSpace="true" context="Single Q-comment"/>
+
+ <RegExpr attribute="Comment" String="(u?r|ru)'''" insensitive="true" firstNonSpace="true" context="Triple A-comment" beginRegion="Triple A-region"/>
+ <RegExpr attribute="Comment" String="(u?r|ru)&quot;&quot;&quot;" insensitive="true" firstNonSpace="true" context="Triple Q-comment" beginRegion="Triple Q-region"/>
+ <RegExpr attribute="Comment" String="(u?r|ru)'" insensitive="true" firstNonSpace="true" context="Single A-comment"/>
+ <RegExpr attribute="Comment" String="(u?r|ru)&quot;" insensitive="true" firstNonSpace="true" context="Single Q-comment"/>
+ </context>
+
+ <context name="Dictionary" attribute="Normal Text" lineEndContext="#stay" noIndentationBasedFolding="true">
+ <DetectSpaces/>
+ <DetectChar attribute="Normal Text" char="}" context="#pop" endRegion="Dictionary"/>
+ <IncludeRules context="StringVariants" />
+ <IncludeRules context="Normal" />
+ </context>
+
+ <context name="List" attribute="Normal Text" lineEndContext="#stay" noIndentationBasedFolding="true">
+ <DetectSpaces/>
+ <DetectChar attribute="Normal Text" char="]" context="#pop" endRegion="List"/>
+ <IncludeRules context="StringVariants" />
+ <IncludeRules context="Normal" />
+ </context>
+
+ <context name="Tuple" attribute="Normal Text" lineEndContext="#stay" noIndentationBasedFolding="true">
+ <DetectSpaces/>
+ <DetectChar attribute="Normal Text" char=")" context="#pop" endRegion="Tuple"/>
+ <IncludeRules context="StringVariants" />
+ <IncludeRules context="Normal" />
+ </context>
+
+ <!-- Comments -->
+
+ <context name="Hash comment" attribute="Comment" lineEndContext="#pop">
+ <IncludeRules context="##Alerts" />
+ <IncludeRules context="##Modelines" />
+ </context>
+
+ <context name="Triple A-comment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
+ <IncludeRules context="stringescape"/>
+ <StringDetect attribute="Comment" String="'''" context="#pop" endRegion="Triple A-region"/>
+ <IncludeRules context="##Alerts_indent" />
+ </context>
+
+ <context name="Triple Q-comment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
+ <IncludeRules context="stringescape"/>
+ <StringDetect attribute="Comment" String="&quot;&quot;&quot;" context="#pop" endRegion="Triple Q-region"/>
+ <IncludeRules context="##Alerts_indent" />
+ </context>
+
+ <context name="Single A-comment" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="stringescape"/>
+ <DetectChar attribute="Comment" char="'" context="#pop"/>
+ <IncludeRules context="##Alerts_indent" />
+ </context>
+
+ <context name="Single Q-comment" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="stringescape"/>
+ <DetectChar attribute="Comment" char="&quot;" context="#pop"/>
+ <IncludeRules context="##Alerts_indent" />
+ </context>
+
+ <!-- Strings -->
+
+ <!-- format characters -->
+ <context name="stringformat" attribute="String Substitution" lineEndContext="#stay">
+ <!-- Python 2 style. Syntax:
+ 1. start character '%'
+ 2. [optional] Mapping key, e.g. '(foo)'
+ 3. [optional] Conversion flags, one of '#0- +'
+ 4. [optional] Minimum width, integer or '*'
+ 5. [optional] Precision, '.' followed by integer or '*'
+ 6. [optional] Length modifier, one of 'hlL'
+ 7. conversion type, one of 'crsdiouxXeEfFgG%'
+ [Special cases: %prog and %default - see http://docs.python.org/library/optparse.html]
+ -->
+ <RegExpr attribute="String Substitution" String="%((\([a-zA-Z0-9_]+\))?[#0\- +]?([1-9][0-9]*|\*)?(\.([1-9][0-9]*|\*))?[hlL]?[crsdiouxXeEfFgG%]|prog|default)" context="#stay"/>
+ <!-- http://docs.python.org/2/library/string.html#format-string-syntax:
+ replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
+ field_name ::= arg_name ("." attribute_name | "[" element_index "]")*
+ arg_name ::= [identifier | integer]
+ attribute_name ::= identifier
+ element_index ::= integer | index_string
+ index_string ::= <any source character except "]"> +
+ conversion ::= "r" | "s"
+ format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type]
+ fill ::= <any character>
+ align ::= "<" | ">" | "=" | "^"
+ sign ::= "+" | "-" | " "
+ width ::= integer
+ precision ::= integer
+ type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
+ -->
+ <RegExpr attribute="String Substitution" String="\{(([a-zA-Z0-9_]+|[0-9]+)(\.[a-zA-Z0-9_]+|\[[^ \]]+\])*)?(![rs])?(:([^}]?[&lt;&gt;=^])?[ +-]?#?0?[0-9]*(\.[0-9]+)?[bcdeEfFgGnosxX%]?)?\}" context="#stay"/>
+ <Detect2Chars attribute="String Substitution" char="{" char1="{" context="#stay" />
+ <Detect2Chars attribute="String Substitution" char="}" char1="}" context="#stay" />
+ </context>
+
+ <!-- escape characters -->
+ <context name="stringescape" attribute="String Char" lineEndContext="#stay">
+ <!-- As this highlighting style is for both, Python 2 and 3,
+ we do not know if a normal string is “unicode” or not. So we
+ -->
+ <RegExpr attribute="String Char" String="\\[\\'&quot;abfnrtv]" context="#stay"/>
+ <RegExpr attribute="String Char" String="\\[0-7]{1,3}" context="#stay"/>
+ <RegExpr attribute="String Char" String="\\x[0-9A-Fa-f]{2}" context="#stay"/>
+ <RegExpr attribute="String Char" String="\\u[0-9A-Fa-f]{4}" context="#stay"/>
+ <RegExpr attribute="String Char" String="\\U[0-9A-Fa-f]{8}" context="#stay"/>
+ <RegExpr attribute="String Char" String="\\N\{[a-zA-Z0-9\- ]+\}" context="#stay"/>
+ </context>
+
+ <!-- f-literals -->
+ <context name="stringinterpolation" attribute="F-String" lineEndContext="#stay">
+ <Detect2Chars attribute="String Char" char="{" char1="{" context="#stay"/>
+ <DetectChar attribute="String Substitution" char="{" context="String Interpolation"/>
+ </context>
+ <context name="String Interpolation" attribute="String Substitution" lineEndContext="#stay">
+ <DetectChar attribute="Error" char="\" context="#pop"/>
+ <RegExpr attribute="String Substitution" String="(![rs])?(:([^}]?[&lt;&gt;=^])?[ +-]?#?0?[0-9]*(\.[0-9]+)?[bcdeEfFgGnosxX%]?)?\}" context="#pop"/>
+ <IncludeRules context="Normal"/> <!-- TODO: create expression context instead -->
+ </context>
+
+
+ <!--
+ It follows a Binary tree of string kinds (not even touching byte literals).
+ The levels are:
+ 1. triple- vs. single-quoted
+ 2. apostrophe vs. quotation mark
+ 3. static vs. interpolated (f-literal)
+ 4. escaped vs. raw
+ Adding byte literals wouldn’t make the current 2⁴ into 2⁵ contexts, as there are no byte f-literals
+ -->
+
+
+ <!-- Triple-quoted A-strings -->
+ <context name="Triple A-string" attribute="String" lineEndContext="#stay" noIndentationBasedFolding="true">
+ <IncludeRules context="stringescape"/>
+ <IncludeRules context="stringformat"/>
+ <StringDetect attribute="String" String="'''" context="#pop#CheckForString" endRegion="Triple A-region"/>
+ </context>
+
+ <context name="Raw Triple A-string" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+ <HlCStringChar attribute="Raw String" context="#stay"/>
+ <IncludeRules context="stringformat"/>
+ <StringDetect attribute="Raw String" String="'''" context="#pop#CheckForString" endRegion="Triple A-region"/>
+ </context>
+
+ <context name="Triple A-F-String" attribute="F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+ <IncludeRules context="stringescape"/>
+ <IncludeRules context="stringinterpolation"/>
+ <StringDetect attribute="F-String" String="'''" context="#pop#CheckForString" endRegion="Triple A-region"/>
+ </context>
+
+ <context name="Raw Triple A-F-String" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+ <HlCStringChar attribute="Raw F-String" context="#stay"/>
+ <IncludeRules context="stringinterpolation"/>
+ <StringDetect attribute="Raw F-String" String="'''" context="#pop#CheckForString" endRegion="Triple A-region"/>
+ </context>
+
+ <!-- Triple-quoted Q-strings -->
+ <context name="Triple Q-string" attribute="String" lineEndContext="#stay" noIndentationBasedFolding="true">
+ <IncludeRules context="stringescape"/>
+ <IncludeRules context="stringformat"/>
+ <StringDetect attribute="String" String="&quot;&quot;&quot;" context="#pop#CheckForString" endRegion="Triple Q-region"/>
+ </context>
+
+ <context name="Raw Triple Q-string" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
+ <HlCStringChar attribute="Raw String" context="#stay"/>
+ <IncludeRules context="stringformat"/>
+ <StringDetect attribute="Raw String" String="&quot;&quot;&quot;" context="#pop#CheckForString" endRegion="Triple Q-region"/>
+ </context>
+
+ <context name="Triple Q-F-String" attribute="F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+ <IncludeRules context="stringescape"/>
+ <IncludeRules context="stringinterpolation"/>
+ <StringDetect attribute="F-String" String="&quot;&quot;&quot;" context="#pop#CheckForString" endRegion="Triple Q-region"/>
+ </context>
+
+ <context name="Raw Triple Q-F-String" attribute="Raw F-String" lineEndContext="#stay" noIndentationBasedFolding="true">
+ <HlCStringChar attribute="Raw F-String" context="#stay"/>
+ <IncludeRules context="stringinterpolation"/>
+ <StringDetect attribute="Raw F-String" String="&quot;&quot;&quot;" context="#pop#CheckForString" endRegion="Triple Q-region"/>
+ </context>
+
+
+ <!-- Single-quoted A-strings -->
+ <context name="Single A-string" attribute="String" lineEndContext="#stay">
+ <IncludeRules context="stringescape"/>
+ <IncludeRules context="stringformat"/>
+ <DetectChar attribute="String" char="'" context="#pop#CheckForString"/>
+ </context>
+
+ <context name="Raw A-string" attribute="Raw String" lineEndContext="#stay">
+ <HlCStringChar attribute="Raw String" context="#stay"/>
+ <IncludeRules context="stringformat"/>
+ <DetectChar attribute="Raw String" char="'" context="#pop#CheckForString"/>
+ </context>
+
+ <context name="Single A-F-String" attribute="F-String" lineEndContext="#stay">
+ <IncludeRules context="stringescape"/>
+ <IncludeRules context="stringinterpolation"/>
+ <DetectChar attribute="F-String" char="'" context="#pop#CheckForString"/>
+ </context>
+
+ <context name="Raw A-F-String" attribute="Raw F-String" lineEndContext="#stay">
+ <HlCStringChar attribute="Raw F-String" context="#stay"/>
+ <IncludeRules context="stringinterpolation"/>
+ <DetectChar attribute="Raw F-String" char="'" context="#pop#CheckForString"/>
+ </context>
+
+ <!-- Single-quoted Q-strings -->
+ <context name="Single Q-string" attribute="String" lineEndContext="#stay">
+ <IncludeRules context="stringescape"/>
+ <IncludeRules context="stringformat"/>
+ <DetectChar attribute="String" char="&quot;" context="#pop#CheckForString"/>
+ </context>
+
+ <context name="Raw Q-string" attribute="Raw String" lineEndContext="#stay">
+ <HlCStringChar attribute="Raw String" context="#stay"/>
+ <IncludeRules context="stringformat"/>
+ <DetectChar attribute="Raw String" char="&quot;" context="#pop#CheckForString"/>
+ </context>
+
+ <context name="Single Q-F-String" attribute="F-String" lineEndContext="#stay">
+ <IncludeRules context="stringescape"/>
+ <IncludeRules context="stringinterpolation"/>
+ <DetectChar attribute="F-String" char="&quot;" context="#pop#CheckForString"/>
+ </context>
+
+ <context name="Raw Q-F-String" attribute="Raw F-String" lineEndContext="#stay">
+ <HlCStringChar attribute="Raw F-String" context="#stay"/>
+ <IncludeRules context="stringinterpolation"/>
+ <DetectChar attribute="Raw F-String" char="&quot;" context="#pop#CheckForString"/>
+ </context>
+ </contexts>
+
+ <itemDatas>
+ <itemData name="Normal Text" defStyleNum="dsNormal" spellChecking="false"/>
+ <itemData name="Definition Keyword" defStyleNum="dsKeyword" spellChecking="false"/>
+ <itemData name="Operator" defStyleNum="dsOperator" spellChecking="false"/>
+ <itemData name="Operator Keyword" defStyleNum="dsKeyword" spellChecking="false"/>
+ <itemData name="Flow Control Keyword" defStyleNum="dsControlFlow" spellChecking="false"/>
+ <itemData name="Builtin Function" defStyleNum="dsBuiltIn" spellChecking="false"/>
+ <itemData name="Special Variable" defStyleNum="dsVariable" spellChecking="false"/>
+ <itemData name="Extensions" defStyleNum="dsExtension" spellChecking="false"/>
+ <itemData name="Exceptions" defStyleNum="dsPreprocessor" spellChecking="false"/>
+ <itemData name="Overloaders" defStyleNum="dsFunction" spellChecking="false"/>
+ <itemData name="Import" defStyleNum="dsImport" spellChecking="false"/>
+ <itemData name="Float" defStyleNum="dsFloat" spellChecking="false"/>
+ <itemData name="Int" defStyleNum="dsDecVal" spellChecking="false"/>
+ <itemData name="Hex" defStyleNum="dsBaseN" spellChecking="false"/>
+ <itemData name="Octal" defStyleNum="dsBaseN" spellChecking="false"/>
+ <itemData name="Complex" defStyleNum="dsOthers" spellChecking="false"/>
+ <itemData name="Comment" defStyleNum="dsComment"/>
+ <itemData name="String" defStyleNum="dsString"/>
+ <itemData name="Raw String" defStyleNum="dsVerbatimString"/>
+ <itemData name="F-String" defStyleNum="dsSpecialString"/>
+ <itemData name="Raw F-String" defStyleNum="dsVerbatimString"/>
+ <itemData name="String Char" defStyleNum="dsChar" spellChecking="false"/>
+ <itemData name="String Substitution" defStyleNum="dsSpecialChar" spellChecking="false"/>
+ <itemData name="Decorator" defStyleNum="dsAttribute" spellChecking="false"/>
+ <itemData name="Error" defStyleNum="dsError"/>
+ </itemDatas>
+ </highlighting>
+ <general>
+ <folding indentationsensitive="1" />
+ <emptyLines>
+ <emptyLine regexpr="(?:\s+|\s*#.*)"/>
+ </emptyLines>
+ <comments>
+ <comment name="singleLine" start="#" position="afterwhitespace"/>
+ </comments>
+ <keywords casesensitive="1" additionalDeliminator="#'"/>
+ </general>
+</language>
+
+<!-- kate: space-indent off; indent-width 4; -->