263 lines
8.7 KiB
XML
263 lines
8.7 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!-- vim: tabstop=2 shiftwidth=2
|
|
|
|
yaml.lang basic syntax highlighting of YAML for GtkSourceView
|
|
|
|
Copyright (C) 2013 Masood Behabadi <masood@dentcat.com>
|
|
|
|
This program 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.
|
|
|
|
This program 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="yaml" name="YAML" _section="Other" version="2.0">
|
|
<metadata>
|
|
<property name="mimetypes">application/x-yaml</property>
|
|
<property name="globs">*.yaml;*.yml;</property>
|
|
<property name="line-comment-start">#</property>
|
|
</metadata>
|
|
|
|
<styles>
|
|
<style id="scalar" name="Block literal" map-to="def:string"/>
|
|
<style id="comment" name="Comment" map-to="def:comment"/>
|
|
<style id="string" name="String" map-to="def:string"/>
|
|
<style id="escape-sequence"
|
|
name="Escape sequence" map-to="def:special-char"/>
|
|
<style id="anchor" name="Anchor" map-to="def:identifier"/>
|
|
<style id="tag" name="Tag" map-to="def:preprocessor"/>
|
|
<style id="alias" name="Alias" map-to="def:type"/>
|
|
<style id="map-key" name="Map key" map-to="def:keyword"/>
|
|
<style id="directive" name="Directive" map-to="def:shebang"/>
|
|
<style id="null" name="Null" map-to="def:special-constant"/>
|
|
<style id="bool" name="Boolean" map-to="def:boolean"/>
|
|
<style id="int" name="Integer" map-to="def:decimal"/>
|
|
<style id="float" name="Floating point" map-to="def:floating-point"/>
|
|
</styles>
|
|
|
|
<definitions>
|
|
|
|
<define-regex id="ischar">[^-\?:,\[\]\{\}#&*!|>'"%@\s]</define-regex>
|
|
|
|
<define-regex id="lschar">[\s\[\{,]</define-regex>
|
|
<define-regex id="rschar">[\s\]\},]</define-regex>
|
|
|
|
<context id="scalar" class-disabled="no-spell-check">
|
|
<start extended="true">
|
|
(?<= ^ | \s)
|
|
[|>] # block scalar indicator
|
|
(?: [-+]?[0-9]? | [0-9]?[-+]?) # optional indentation and chomping indicators
|
|
(?: \s+ (\#.*)?)? # optional whitespace and comment
|
|
$
|
|
</start>
|
|
<include>
|
|
<context sub-pattern="1" where="start" style-ref="comment"/>
|
|
<context end-parent="true" style-ref="scalar">
|
|
<start>^(?'indent'\s+)</start>
|
|
<end>^(?!\%{indent@start})</end>
|
|
</context>
|
|
<context end-parent="true">
|
|
<match>(?=.)</match>
|
|
</context>
|
|
</include>
|
|
</context>
|
|
|
|
<context id="alias" style-ref="alias">
|
|
<match>(?<=^|\s)\*\%{ischar}+(?=$|\s)</match>
|
|
</context>
|
|
|
|
<context id="tag" style-ref="tag">
|
|
<match>(?<=^|\s)!(?:\%{ischar}*)?!?\%{ischar}+(?=$|\s)</match>
|
|
</context>
|
|
|
|
<context id="anchor" style-ref="anchor">
|
|
<match>(?<=^|\s)&\%{ischar}+(?=$|\s)</match>
|
|
</context>
|
|
|
|
<context id="double-quoted-string" style-ref="string" class-disabled="no-spell-check">
|
|
<start>(?<=^|\%{lschar})"</start>
|
|
<end>"</end>
|
|
<include>
|
|
<context style-ref="escape-sequence">
|
|
<match extended="true">
|
|
\\ (?:
|
|
[0abt\tnvfre "/\\N_LP] |
|
|
x [0-9a-fA-F]{2} |
|
|
u [0-9a-fA-F]{4} |
|
|
U [0-9a-fA-F]{8} |
|
|
$
|
|
)
|
|
</match>
|
|
</context>
|
|
</include>
|
|
</context>
|
|
|
|
<context id="single-quoted-string" style-ref="string" class-disabled="no-spell-check">
|
|
<start>(?<=^|\%{lschar})'</start>
|
|
<end>'</end>
|
|
<include>
|
|
<context style-ref="escape-sequence">
|
|
<match>''</match>
|
|
</context>
|
|
</include>
|
|
</context>
|
|
|
|
<context id="unquoted-string" end-at-line-end="true" style-ref="string" class-disabled="no-spell-check">
|
|
<start>(?=\%{ischar}|[:-\?\]\}]\S)</start>
|
|
<end>(?=:\s|:$|\s#)</end>
|
|
</context>
|
|
|
|
<context id="inline-unquoted" end-at-line-end="true" style-ref="string" class-disabled="no-spell-check">
|
|
<start>(?=\%{ischar}|-\S)</start>
|
|
<end>(?=[:,?\[\{\]\}]|\s#)</end>
|
|
</context>
|
|
|
|
<context id="null" style-ref="null">
|
|
<match>(?:null)(?=\s*$|\s+#)</match>
|
|
</context>
|
|
|
|
<context id="inline-null" style-ref="null">
|
|
<match>(?:null)(?=\s*[:,?\[\{\]\}]|\s+#)</match>
|
|
</context>
|
|
|
|
<context id="bool" style-ref="bool">
|
|
<match>(?:true|false)(?=\s*$|\s+#)</match>
|
|
</context>
|
|
|
|
<context id="inline-bool" style-ref="bool">
|
|
<match>(?:true|false)(?=\s*[:,?\[\{\]\}]|\s+#)</match>
|
|
</context>
|
|
|
|
<context id="inline-int" style-ref="int">
|
|
<match>-?(?:0|[1-9][0-9]*)(?=\s*[:,?\[\{\]\}]|\s+#)</match>
|
|
</context>
|
|
|
|
<context id="int" style-ref="int">
|
|
<match>-?(?:0|[1-9][0-9]*)(?=\s*$|\s+#)</match>
|
|
</context>
|
|
|
|
<context id="inline-float" style-ref="float">
|
|
<match>-?(?:0|[1-9][0-9]*)(?:[.][0-9]*)?(?:[eE][-+]?[0-9]+)?(?=\s*[:,?\[\{\]\}]|\s+#)</match>
|
|
</context>
|
|
|
|
<context id="float" style-ref="float">
|
|
<match>-?(?:0|[1-9][0-9]*)(?:[.][0-9]*)?(?:[eE][-+]?[0-9]+)?(?=\s*$|\s+#)</match>
|
|
</context>
|
|
|
|
<context id="comment" style-ref="comment">
|
|
<match>(?<=^|\s)#.*$</match>
|
|
</context>
|
|
|
|
<context id="inline-sequence">
|
|
<start>(?<=^|\s)\[</start>
|
|
<include>
|
|
<context ref="scalar"/>
|
|
<context ref="inline-sequence"/>
|
|
<context ref="inline-map"/>
|
|
<context ref="comment"/>
|
|
<context ref="alias"/>
|
|
<context ref="tag"/>
|
|
<context ref="anchor"/>
|
|
<context ref="single-quoted-string"/>
|
|
<context ref="double-quoted-string"/>
|
|
<context ref="inline-null"/>
|
|
<context ref="inline-bool"/>
|
|
<context ref="inline-int"/>
|
|
<context ref="inline-float"/>
|
|
<context ref="inline-unquoted"/>
|
|
<context end-parent="true">
|
|
<match>\]</match>
|
|
</context>
|
|
</include>
|
|
</context>
|
|
|
|
<context id="inline-map">
|
|
<start>(?<=^|\s)\{</start>
|
|
<include>
|
|
<context ref="scalar"/>
|
|
<context ref="inline-sequence"/>
|
|
<context ref="inline-map"/>
|
|
<context ref="comment"/>
|
|
<context ref="alias"/>
|
|
<context ref="tag"/>
|
|
<context ref="anchor"/>
|
|
<context ref="single-quoted-string"/>
|
|
<context ref="double-quoted-string"/>
|
|
<context ref="inline-null"/>
|
|
<context ref="inline-bool"/>
|
|
<context ref="inline-int"/>
|
|
<context ref="inline-float"/>
|
|
<context ref="inline-unquoted"/>
|
|
<context end-parent="true">
|
|
<match>\}</match>
|
|
</context>
|
|
</include>
|
|
</context>
|
|
|
|
|
|
<context id="map">
|
|
<!--
|
|
The following can cause a stack-overflow in libpcre if the map entry
|
|
contains lots of HTTP urls. If you have a better design for this, please
|
|
contribute an improvement. Another option might be for GRegex to be
|
|
compiled without recurse support, but that doesn't fix things that
|
|
are out in the wild already.
|
|
|
|
To generate the failure case try:
|
|
|
|
python3 -c 'print("key:", "http://example.com " * 1000)' > testcase.yml
|
|
|
|
<match>(?<=^|\s)((?:[^:]|:(?=\S))+)(?::\s+|:$)</match>
|
|
-->
|
|
<match>(?<=^|\s)([^:\s][^:]*)(?::\s+|:$)</match>
|
|
<include>
|
|
<context sub-pattern="1" style-ref="map-key"/>
|
|
</include>
|
|
</context>
|
|
|
|
<context id="sequence">
|
|
<match>^\s*-\s+</match>
|
|
</context>
|
|
|
|
<context id="document" style-ref="comment">
|
|
<match>^(?:-{3}|[.]{3})(?:\s+|$)</match>
|
|
</context>
|
|
|
|
<context id="directive" style-ref="directive">
|
|
<match>^%\%{ischar}(?:\%{ischar}|\s+)*</match>
|
|
</context>
|
|
|
|
<context id="yaml" class="no-spell-check">
|
|
<include>
|
|
<context ref="directive"/>
|
|
<context ref="document"/>
|
|
<context ref="scalar"/>
|
|
<context ref="sequence"/>
|
|
<context ref="inline-sequence"/>
|
|
<context ref="inline-map"/>
|
|
<context ref="comment"/>
|
|
<context ref="null"/>
|
|
<context ref="bool"/>
|
|
<context ref="int"/>
|
|
<context ref="float"/>
|
|
<context ref="alias"/>
|
|
<context ref="tag"/>
|
|
<context ref="anchor"/>
|
|
<context ref="single-quoted-string"/>
|
|
<context ref="double-quoted-string"/>
|
|
<context ref="map"/>
|
|
<context ref="unquoted-string"/>
|
|
</include>
|
|
</context>
|
|
|
|
</definitions>
|
|
|
|
</language>
|