[gtksourceview] Vala syntax highlighting plugin updated



commit c4cefd24310f8712563268d51d98bdd879170fc3
Author: Marco Trevisan (Treviño) <mail 3v1n0 net>
Date:   Sun Mar 13 21:34:38 2011 +0100

    Vala syntax highlighting plugin updated
    
    * Added extension support to *.vapi files
    * Support for verbatim strings (triple quoted strings)
    * Dropped standard string support since Vala supports multiline
       strings by default
    * Support for string templates highlighting
       Each string starting with @" is now parsed for variable references
       (using the $ prefix) or for expressions (using the $(expr) container)
    * Dropped support for strings with single quote (they are char's!)
    * Support for directives (#if, #else, #elif, #endif)
    * Support for #if 0, #if false comments
    * Support for @identifiers: they aren't highlighted now
    * Added async modifier keyword
    * Use void as a type
    * Support for Vala attributes
    * Support for types declaration highlighting
    * Support for gtk-doc syntax in comments
    * Fallback to c implementations for decimal, hexadecimal, float, octal
       and char (before not supported)

 data/language-specs/vala.lang |  206 ++++++++++++++++++++++++++++++++++-------
 1 files changed, 172 insertions(+), 34 deletions(-)
---
diff --git a/data/language-specs/vala.lang b/data/language-specs/vala.lang
index 4462526..40b9b77 100644
--- a/data/language-specs/vala.lang
+++ b/data/language-specs/vala.lang
@@ -8,6 +8,7 @@
  Copyright (C) 2004 Jeroen Zwartepoorte <jeroen xs4all nl>
  Copyright (C) 2004 Alessio Frusciante <algol firenze linux it>
  Copyright (C) 2005 Brion Vibber <brion pobox com>
+ Copyright (C) 2011 Marco Trevisan <mail 3v1n0 net>
 
  GtkSourceView is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
@@ -27,7 +28,7 @@
 <language id="vala" _name="Vala" version="2.0" _section="Sources">
   <metadata>
     <property name="mimetypes">text/x-vala</property>
-    <property name="globs">*.vala</property>
+    <property name="globs">*.vala;*.vapi</property>
     <property name="line-comment-start">//</property>
     <property name="block-comment-start">/*</property>
     <property name="block-comment-end">*/</property>
@@ -39,14 +40,17 @@
     <style id="type" _name="Data Type" map-to="def:type"/>
     <style id="string" _name="String" map-to="def:string"/>
     <style id="keyword" _name="Keyword" map-to="def:keyword"/>
-    <style id="null-value" _name="Null Value" map-to="def:special-constant"/>
     <style id="boolean" _name="Boolean value" map-to="def:boolean"/>
-    <style id="decimal" _name="Decimal number" map-to="def:decimal"/>
-    <style id="hexadecimal" _name="Hexadecimal number" map-to="def:base-n-integer"/>
-    <style id="real" _name="Real number" map-to="def:floating-point"/>
+    <style id="null-value" _name="Null Value" map-to="def:special-constant"/>
+    <style id="directive" name="Directives" map-to="def:preprocessor"/>
+    <style id="attributes" name="Vala Attributes" map-to="def:function"/>
+    <style id="string-template" name="Vala String template" map-to="def:function"/>
   </styles>
 
   <definitions>
+    <define-regex id="preproc-start">^\s*#\s*</define-regex>
+    <define-regex id="identifier">[_a-zA-Z][_a-zA-Z0-9]*</define-regex>
+    <define-regex id="type_name">[_a-zA-Z][_a-zA-Z0-9.]*</define-regex>
 
     <context id="line-comment" style-ref="comment" end-at-line-end="true" class="comment" class-disabled="no-spell-check">
       <start>//</start>
@@ -67,15 +71,88 @@
       <match>\*/(?!\*)</match>
     </context>
 
+	<context id="multiline-double-quoted-string" class="string" style-ref="string" class-disabled="no-spell-check">
+      <start>"""</start>
+      <end>"""</end>
+      <include>
+        <context ref="c:printf"/>
+        <context ref="c:escaped-character"/>
+        <context ref="def:line-continue"/>
+      </include>
+    </context>
+
     <context id="multiline-string" style-ref="string" class="string" class-disabled="no-spell-check">
-      <start>@"([^"]|"")*</start>
+      <start>"</start>
+      <end>"</end>
+      <include>
+        <context ref="c:printf"/>
+        <context ref="c:escaped-character"/>
+        <context ref="def:line-continue"/>
+      </include>
+    </context>
+
+    <context id="multiline-string-templates" style-ref="string" class="string" class-disabled="no-spell-check">
+      <start>@"</start>
       <end>"</end>
       <include>
-        <context ref="def:escape"/>
+        <context ref="c:printf"/>
+        <context ref="c:escaped-character"/>
         <context ref="def:line-continue"/>
+        <context id="string-templates" style-ref="string-template">
+            <match>\$\%{identifier}</match>
+        </context>
+        <context id="string-templates-brackets" style-ref="string-template">
+          <start>\$\(</start>
+          <end>\)</end>
+          <include>
+            <context id="in-string-templates-brackets">
+              <include>
+                <context>
+                  <start>\(</start>
+                  <end>\)</end>
+                  <include>
+                    <context ref="in-string-templates-brackets"/>
+                  </include>
+                </context>
+              </include>
+            </context>
+          </include>
+        </context>
       </include>
     </context>
 
+    <context id="if0-comment" style-ref="comment">
+        <start>\%{preproc-start}if\b\s*(0|false|\!true|\!1)\b</start>
+        <end>(\%{preproc-start}endif)|(\%{preproc-start}(else|elif).*)\b</end>
+        <include>
+            <context sub-pattern="2" where="end" style-ref="directive"/>
+            <context id="if-in-if0">
+                <start>\%{preproc-start}if\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="directive" style-ref="directive" end-at-line-end="true">
+        <start extended="true">
+                \%{preproc-start}
+                (if|else|elif|endif)
+                \b
+        </start>
+        <include>
+            <context ref="boolean"/>
+        </include>
+    </context>
+
+    <context id="at-identifier">
+        <match>@\%{identifier}</match>
+    </context>
+
     <context id="keywords" style-ref="keyword">
       <keyword>class</keyword>
       <keyword>delegate</keyword>
@@ -88,6 +165,7 @@
       <keyword>using</keyword>
       <!-- modifiers -->
       <keyword>abstract</keyword>
+      <keyword>async</keyword>
       <keyword>const</keyword>
       <keyword>dynamic</keyword>
       <keyword>extern</keyword>
@@ -127,6 +205,7 @@
       <keyword>is</keyword>
       <keyword>lock</keyword>
       <keyword>new</keyword>
+      <keyword>params</keyword>
       <keyword>requires</keyword>
       <keyword>return</keyword>
       <keyword>set</keyword>
@@ -139,7 +218,6 @@
       <keyword>typeof</keyword>
       <keyword>value</keyword>
       <keyword>var</keyword>
-      <keyword>void</keyword>
       <keyword>while</keyword>
       <keyword>yield</keyword>
       <keyword>yields</keyword>
@@ -169,6 +247,51 @@
       <keyword>ulong</keyword>
       <keyword>unichar</keyword>
       <keyword>ushort</keyword>
+      <keyword>void</keyword>
+    </context>
+
+    <define-regex id="attributes-names" extended="true">
+      Assert|
+      CCode|
+      SimpleType|
+      BooleanType|
+      IntegerType|
+      FloatingType|
+      Signal|
+      Deprecated|
+      Description|
+      DBus|
+      Compact|
+      Diagnostics|
+      ErrorBase|
+      Flags|
+      GIR|
+      HasEmitter|
+      Immutable|
+      ModuleInit|
+      NoAccessorMethod|
+      NoArrayLength|
+      NoReturn|
+      NoThrow|
+      NoWrapper|
+      PointerType|
+      Print|
+      PrintfFormat|
+      ReturnsModifiedPointer|
+      ScanfFormat|
+      ThreadLocal
+    </define-regex>
+
+    <context id="attributes" style-ref="attributes">
+        <start>\[\s*(\%{attributes-names})</start>
+        <end>\]</end>
+        <include>
+            <context sub-pattern="1" where="start" style-ref="type"/>
+            <context ref="boolean"/>
+            <context ref="multiline-string"/>
+            <context ref="c:float"/>
+            <context ref="c:decimal"/>
+        </include>
     </context>
 
     <context id="null-value" style-ref="null-value">
@@ -180,47 +303,62 @@
       <keyword>true</keyword>
     </context>
 
-    <context id="decimal" style-ref="decimal">
-      <match extended="true">
-        (?&lt;![\w\.])
-        [0-9]+[uUlL]*
-        (?![\w\.])
-      </match>
-    </context>
+    <define-regex id="type-prefixes" extended="true">
+      class|
+      delegate|
+      enum|
+      errordomain|
+      interface|
+      namespace|
+      struct
+    </define-regex>
 
-    <context id="hexadecimal" style-ref="hexadecimal">
-      <match extended="true">
-        (?&lt;![\w\.])
-        0[xX][a-fA-F0-9]+[uUlL]*
-        (?![\w\.])
-      </match>
+	<context id="type-declaration">
+        <start>(\%{type-prefixes})\s+(\%{type_name})(\s*&lt;[^&gt;]&gt;)?\s*(\s*:\s*(\%{type_name}))?</start>
+        <end>\s</end>
+        <include>
+            <context sub-pattern="1" where="start" style-ref="keyword"/>
+            <context sub-pattern="2" where="start" style-ref="type"/>
+            <context sub-pattern="5" where="start" style-ref="type"/>
+            <context ref="vala"/>
+        </include>
     </context>
 
-    <context id="real" style-ref="real">
-      <match extended="true">
-        (?&lt;![\w\.])
-        ((\.[0-9]+|[0-9]+\.[0-9]*)([Ee][+-]?[0-9]*)?[FfDdMm]?|
-         ([0-9]+[Ee][+-]?[0-9]*)[FfDdMm]? |
-         ([0-9]+)[FfDdMm])
-        (?![\w\.])
-      </match>
+<!-- Function support, disabled by default.
+    <context id="function">
+        <start>(\%{identifier})\s*\(</start>
+        <end>\)</end>
+        <include>
+            <context sub-pattern="1" where="start" style-ref="def:function"/>
+            <context ref="vala"/>
+        </include>
     </context>
+-->
 
     <context id="vala" class="no-spell-check">
       <include>
-        <context ref="def:string"/>
-        <context ref="def:single-quoted-string"/>
+        <context ref="gtk-doc:inline-docs-section"/>
         <context ref="line-comment"/>
         <context ref="multiline-comment"/>
         <context ref="close-comment-outside-comment"/>
+        <context ref="multiline-string-templates"/>
+        <context ref="multiline-double-quoted-string"/>
         <context ref="multiline-string"/>
+        <context ref="at-identifier"/>
+        <context ref="type-declaration"/>
         <context ref="keywords"/>
         <context ref="primitives"/>
+        <context ref="attributes"/>
         <context ref="null-value"/>
         <context ref="boolean"/>
-        <context ref="decimal"/>
-        <context ref="hexadecimal"/>
-        <context ref="real"/>
+        <context ref="c:char"/>
+        <context ref="c:decimal"/>
+        <context ref="c:hexadecimal"/>
+        <context ref="c:float"/>
+        <context ref="c:octal"/>
+        <context ref="if0-comment"/>
+        <context ref="directive"/>
+        <!-- <context ref="function"/> -->
       </include>
     </context>
   </definitions>



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