[gtksourceview] toml.lang: Add new definition for toml files



commit 4e4a9c5d38c964d77039f41b9cb50323d53f5b1e
Author: Dumea Liviu <liv dumea gmail com>
Date:   Sun Mar 4 18:05:09 2018 +0100

    toml.lang: Add new definition for toml files
    
    Changes to be committed:
        modified:   data/language-specs/Makefile.am
        new file:   data/language-specs/toml.lang
        modified:   po/POTFILES.skip
        new file:   tests/syntax-highlighting/file.toml
    
    https://bugzilla.gnome.org/show_bug.cgi?id=764032

 data/language-specs/Makefile.am     |    1 +
 data/language-specs/toml.lang       |  282 +++++++++++++++++++++++++++++++++++
 po/POTFILES.skip                    |    1 +
 tests/syntax-highlighting/file.toml |   47 ++++++
 4 files changed, 331 insertions(+), 0 deletions(-)
---
diff --git a/data/language-specs/Makefile.am b/data/language-specs/Makefile.am
index 88f01c4..aea1b60 100644
--- a/data/language-specs/Makefile.am
+++ b/data/language-specs/Makefile.am
@@ -122,6 +122,7 @@ LANGUAGES =                 \
        tera.lang               \
        texinfo.lang            \
        thrift.lang             \
+       toml.lang               \
        vala.lang               \
        vbnet.lang              \
        verilog.lang            \
diff --git a/data/language-specs/toml.lang b/data/language-specs/toml.lang
new file mode 100644
index 0000000..eedf21f
--- /dev/null
+++ b/data/language-specs/toml.lang
@@ -0,0 +1,282 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ This file is part of GtkSourceView
+
+ Author: Liviu Dumea <liviu dumea ro gmail com>
+ Copyright (C) 2015, 2018 by Liviu Dumea <liviu dumea ro gmail 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="toml" name="TOML" version="2.0" _section="Other">
+  <metadata>
+    <property name="globs">*.toml;*.tml;*.lock</property>
+    <property name="line-comment-start">#</property>
+  </metadata>
+
+  <styles>
+    <style id="comment" name="Comment" map-to="def:comment"/>
+    <style id="floating-point" name="Floating Point" map-to="def:floating-point"/>
+    <style id="string" name="String" map-to="def:string"/>
+    <style id="keyword" name="Keyword" map-to="def:keyword"/>
+    <style id="decimal" name="Decimal" map-to="def:decimal"/>
+    <style id="variable" name="Variable" map-to="def:type"/>
+    <style id="non-standard-key" name="Data Type" map-to="def:type"/>
+    <style id="boolean-value" name="Boolean value" map-to="def:boolean"/>
+    <style id="datetime-value" name="Datetime value" map-to="def:constant"/>
+    <style id="error" name="Error" map-to="def:error"/>
+  </styles>
+
+  <definitions>
+    <context id="line-comment" style-ref="comment" end-at-line-end="true" class="comment" 
class-disabled="no-spell-check">
+      <start>#</start>
+      <end>$</end>
+    </context>
+
+    <context id="table-entry">
+      <include>
+        <context ref="array-table"/>
+        <context ref="table"/>
+        <context ref="line-comment" />
+      </include>
+    </context>
+
+    <context id="table" style-ref="keyword">
+      <start>^\s*\[</start>
+      <end>\]</end>
+    </context>
+
+    <context id="array-table" style-ref="keyword">
+      <start>^\s*\[\[</start>
+      <end>\]\]</end>
+    </context>
+
+    <context id="variable" style-ref="variable">
+      <match>[a-zA-Z0-9_.-]*</match>
+    </context>
+
+    <context id="datetime-value" style-ref="datetime-value">
+      
<match>(\d{4})(-)?(\d\d)(-)?(\d\d)(T)?(\d\d)(:)?(\d\d)(:)?(\d\d)(.\d+)?(Z|([+-])(\d\d)(:)?(\d\d))</match>
+    </context>
+
+    <context id="datetime-not-strict-value" style-ref="datetime-value">
+      
<match>((\d{4})(-)?(\d\d)(-)?(\d\d)(T|\s)?)?(\d\d)(:)?(\d\d)(:)?(\d\d)(.\d+)?(Z|([+-])(\d\d)(:)?(\d\d))?</match>
+    </context>
+
+    <context id="boolean-value" style-ref="boolean-value">
+      <keyword>true</keyword>
+      <keyword>false</keyword>
+    </context>
+
+    <context id="integer" style-ref="decimal">
+      <match>[+\-]?(?:[1-9][0-9_]*|0)(?![.eE])</match>
+    </context>
+
+    <context id="float" style-ref="floating-point">
+      <match>[+\-]?(?:[1-9][0-9_]*|0)(?:\.[0-9_]+)?(?:[eE][+\-]?[0-9_]+)?</match>
+    </context>
+
+    <context id="catch-all" style-ref="error" extend-parent="false">
+      <match>\S</match>
+    </context>
+
+    <define-regex id="hex_digit" extended="true">
+      [0-9a-fA-F]
+    </define-regex>
+
+    <define-regex id="common_escape" extended="true">
+      '|"|
+      \\|n|r|t|0|
+      x\%{hex_digit}{2}
+    </define-regex>
+
+    <define-regex id="unicode_escape" extended="true">
+      u{\%{hex_digit}{1,6}}
+    </define-regex>
+
+    <context id="hex-number" style-ref="decimal">
+        <match>0[xX][0-9a-fA-F][_0-9a-fA-F]*</match>
+    </context>
+
+    <context id="octal-number" style-ref="decimal">
+        <match>0o[0-7][_0-7]*</match>
+    </context>
+
+    <context id="binary-number" style-ref="decimal">
+        <match>0[bB][01][_01]*</match>
+    </context>
+
+    <context id="infinity-number" style-ref="floating-point">
+        <match>[+-]?inf</match>
+    </context>
+
+    <context id="not-a-number" style-ref="floating-point">
+        <match>[+-]?nan</match>
+    </context>
+
+    <context id="string_escape" style-ref="def:special-char">
+      <match>\\\%{common_escape}|\\\%{unicode_escape}</match>
+    </context>
+
+    <context id="basic-string" style-ref="string" class="string" end-at-line-end="true" 
class-disabled="no-spell-check">
+      <start>"</start>
+      <end>"</end>
+      <include>
+        <context ref="string_escape"/>
+      </include>
+    </context>
+
+    <context id="multiline-basic-string" style-ref="string"  class="string" class-disabled="no-spell-check">
+      <start>"""</start>
+      <end>"""</end>
+      <include>
+        <context ref="string_escape"/>
+        <context ref="def:line-continue"/>
+      </include>
+    </context>
+
+    <context id="literal-string" style-ref="string">
+      <start>'</start>
+      <end>'</end>
+    </context>
+
+    <context id="multiline-literal-string" style-ref="string" class="string" class-disabled="no-spell-check">
+      <start>'''</start>
+      <end>'''</end>
+      <include>
+        <context ref="def:line-continue"/>
+      </include>
+    </context>
+
+    <context id="array">
+      <start>\[</start>
+      <end>\]</end>
+      <include>
+        <context>
+          <start></start>
+          <end>,|\s*(?=\&#93;)</end>
+            <include>
+            <context ref="value"/>
+          </include>
+        </context>
+      </include>
+    </context>
+
+   <context id="name" style-ref="variable">
+      <match>("[a-zA-Z0-9_.-]*")|[a-zA-Z0-9_.-]*</match>
+    </context>
+
+    <context id="inline-table">
+      <start>\s*\{|\{</start>
+      <end>\}</end>
+      <include>
+        <context ref="name" style-ref="variable"/>
+        <context>
+          <start>=</start>
+          <end>,|\s*(?=})</end>
+          <include>
+            <context ref="value"/>
+          </include>
+        </context>
+        <context ref="catch-all"/>
+      </include>
+    </context>
+
+    <context id="pair-value">
+      <start>=</start>
+      <end>$</end>
+      <include>
+        <context ref="value"/>
+      </include>
+    </context>
+
+    <context id="key">
+      <include>
+        <context ref="variable"/>
+        <context ref="basic-string" style-ref="variable"/>
+      </include>
+    </context>
+
+    <context id="assign-error-line" style-ref="error">
+      <match>^\s*=([^#]*(?=#)|.*$)</match>
+    </context>
+
+    <context id="empty-key-error" style-ref="error">
+      <match>^[^=]*=\s*#.*$</match>
+    </context>
+
+    <context id="text-after-table-error" style-ref="error">
+      <match>^\s*\[[^\]\[]*\]s*[^#]+$</match>
+    </context>
+
+    <context id="text-after-array-error" style-ref="error">
+      <match>^\s*\[\[[^\]]*\]\]s*[^#]+$</match>
+    </context>
+
+    <!--
+    []     # INVALID
+    [a.]   # INVALID
+    [a..b] # INVALID
+    [.b]   # INVALID
+    [.]    # INVALID
+    -->
+    <context id="invalid-table-error" style-ref="error">
+      <match>^\s*\[(\.?|[^.]+\.{2,}[^.]+|\.+[^.]+|[^.]+\.+|\.+[^.]+\.+)\]\s*(#.*)?$</match>
+    </context>
+
+    <context id="invalid-array-error" style-ref="error">
+      <match>^\s*\[\[(\.*|[^.]+\.{2,}[^.]+|\.+[^.]+|[^.]+\.+|\.+[^.]+\.+)\]\]s*(#.*)?$</match>
+    </context>
+
+    <context id="value">
+      <include>
+        <context ref="array"/>
+        <context ref="inline-table"/>
+        <context ref="boolean-value"/>
+        <context ref="datetime-value"/>
+        <context ref="datetime-not-strict-value"/>
+        <context ref="multiline-basic-string"/>
+        <context ref="basic-string"/>
+        <context ref="multiline-literal-string"/>
+        <context ref="literal-string"/>
+        <context ref="hex-number"/>
+        <context ref="octal-number"/>
+        <context ref="binary-number"/>
+        <context ref="infinity-number"/>
+        <context ref="not-a-number"/>
+        <context ref="integer"/>
+        <context ref="float"/>
+        <context ref="line-comment"/>
+        <context ref="catch-all"/>
+     </include>
+    </context>
+
+    <context id="toml" class="no-spell-check">
+      <include>
+        <context ref="line-comment"/>
+        <context ref="assign-error-line" />
+        <context ref="empty-key-error" />
+        <context ref="invalid-table-error" />
+        <context ref="invalid-array-error" />
+        <context ref="text-after-table-error" />
+        <context ref="text-after-array-error" />
+        <context ref="key"/>
+        <context ref="pair-value"/>
+        <context ref="table-entry"/>
+        <context ref="catch-all"/>
+      </include>
+    </context>
+  </definitions>
+</language>
\ No newline at end of file
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index cec9d5d..57e4531 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -125,6 +125,7 @@ data/language-specs/tcl.lang
 data/language-specs/tera.lang
 data/language-specs/texinfo.lang
 data/language-specs/thrift.lang
+data/language-specs/toml.lang
 data/language-specs/vala.lang
 data/language-specs/vbnet.lang
 data/language-specs/verilog.lang
diff --git a/tests/syntax-highlighting/file.toml b/tests/syntax-highlighting/file.toml
new file mode 100644
index 0000000..902a1ae
--- /dev/null
+++ b/tests/syntax-highlighting/file.toml
@@ -0,0 +1,47 @@
+# comment
+
+[table]
+key = "value  - #"          # " comment "
+lines = '''
+multi
+lines
+'''
+
+[tabel] #comment
+date = 1979-05-27T00:32:00.999999-07:00 #date
+int = 1_000
+float = 6.626e-34
+
+hex = 0xDEADBEEF
+oct = 0o012345
+bin = 0b11010110
+inf = inf  # positive infinity
+
+    [[more.complex."array#"]]
+        "key" = "text"
+        multi_line_array = [
+            "]",
+            # ] commmet
+            ]
+
+
+="no key name"   #not allowed
+[...fasd...]     # INVALID
+[a.]   # INVALID
+[a..b] # INVALID
+[.b]   # INVALID
+[.]    # INVALID
+
+
+[error] if you didn't catch this, your parser is broken
+key = # INVALID
+
+string = "after value error" like this
+
+array = [
+         "This might most likely happen in multiline arrays",
+         Like here,
+         "or here,
+         and here"
+         ]     End of array comment, forgot the #
+number = 3.14 pi <--again forgot the #
\ No newline at end of file


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]