[gtksourceview: 4/9] css.lang (and family): Replace word boundaries with custom regexes



commit 4fc20f804f0cf2c979604b973fef9ab8a26f873f
Author: Jeffery To <jeffery to gmail com>
Date:   Tue Jun 2 01:11:39 2020 +0800

    css.lang (and family): Replace word boundaries with custom regexes
    
    This replaces uses of \%[ and \%] with custom regexes that only test
    "outside" the keyword.
    
    This also adds the custom regexes in places that should have a word
    boundary test.

 data/language-specs/css.lang  | 138 +++++++++++++++++++++++++++++++-----------
 data/language-specs/less.lang |  32 +++++++---
 data/language-specs/scss.lang |  56 ++++++++++++-----
 3 files changed, 170 insertions(+), 56 deletions(-)
---
diff --git a/data/language-specs/css.lang b/data/language-specs/css.lang
index 1dd21fc5..ec1e648f 100644
--- a/data/language-specs/css.lang
+++ b/data/language-specs/css.lang
@@ -232,6 +232,14 @@
       -- \%{identifier-chars}+
     </define-regex>
 
+    <define-regex id="keyword-start" extended="true">
+      (?&lt;! \%{keyword-code-point} )
+    </define-regex>
+
+    <define-regex id="keyword-end" extended="true">
+      (?! \%{keyword-code-point} )
+    </define-regex>
+
     <define-regex id="declaration-value-end">(?=[!;}])</define-regex>
 
     <define-regex id="test-value-end">(?=\))</define-regex>
@@ -279,15 +287,21 @@
 
     <!-- custom identifier -->
     <context id="name" style-ref="name">
-      <match>\%[\%{identifier}</match>
+      <match extended="true">
+        \%{keyword-start} \%{identifier}
+      </match>
     </context>
 
     <context id="vendor-specific-name" style-ref="vendor-specific">
-      <match>\%[\%{vendor-specific-identifier}</match>
+      <match extended="true">
+        \%{keyword-start} \%{vendor-specific-identifier}
+      </match>
     </context>
 
     <context id="custom-property-name" style-ref="custom-property-name">
-      <match>\%[\%{custom-property-identifier}</match>
+      <match extended="true">
+        \%{keyword-start} \%{custom-property-identifier}
+      </match>
     </context>
 
     <context id="escape" style-ref="escape">
@@ -329,7 +343,10 @@
     </context>
 
     <context id="hexadecimal-color" style-ref="color">
-      <match>#(?:[a-f0-9]{8}|[a-f0-9]{6}|[a-f0-9]{4}|[a-f0-9]{3})\%]</match>
+      <match extended="true">
+        \# (?: [a-f0-9]{8} | [a-f0-9]{6} | [a-f0-9]{4} | [a-f0-9]{3} )
+        \%{keyword-end}
+      </match>
     </context>
 
     <context id="css3-named-color" style-ref="color">
@@ -593,8 +610,9 @@
 
     <context id="unicode-range" style-ref="unicode-range">
       <match extended="true">
-        \%[ u \+ (?&gt; [a-f0-9?]{1,6} ) (?&gt; - [a-f0-9]{1,6} )?
-        (?! \%{keyword-code-point} )
+        \%{keyword-start}
+        u \+ (?&gt; [a-f0-9?]{1,6} ) (?&gt; - [a-f0-9]{1,6} )?
+        \%{keyword-end}
       </match>
     </context>
 
@@ -625,7 +643,9 @@
     </context>
 
     <context id="url">
-      <start>url\(</start>
+      <start extended="true">
+        \%{keyword-start} url \(
+      </start>
       <end>\)</end>
       <include>
         <context sub-pattern="0" where="start" style-ref="function"/>
@@ -639,7 +659,9 @@
 
     <!-- https://drafts.csswg.org/css-variables/#using-variables -->
     <context id="var">
-      <start>var\(</start>
+      <start extended="true">
+        \%{keyword-start} var \(
+      </start>
       <end>\)</end>
       <include>
         <context sub-pattern="0" where="start" style-ref="function"/>
@@ -659,7 +681,9 @@
     </context>
 
     <context id="vendor-specific-function">
-      <start>\%[\%{vendor-specific-identifier}\(</start>
+      <start extended="true">
+        \%{keyword-start} \%{vendor-specific-identifier} \(
+      </start>
       <end>\)</end>
       <include>
         <context sub-pattern="0" where="start" style-ref="vendor-specific"/>
@@ -671,7 +695,9 @@
     </context>
 
     <context id="function">
-      <start>\%[\%{identifier}\(</start>
+      <start extended="true">
+        \%{keyword-start} \%{identifier} \(
+      </start>
       <end>\)</end>
       <include>
         <context sub-pattern="0" where="start" style-ref="function"/>
@@ -1894,7 +1920,9 @@
     </context>
 
     <context id="at-charset-error" style-ref="error">
-      <start>@charset\%]</start>
+      <start extended="true">
+        @charset \%{keyword-end}
+      </start>
       <include>
         <context ref="embedded-lang-hook"/>
         <!-- no comment here -->
@@ -1903,7 +1931,9 @@
     </context>
 
     <context id="at-charset-no-error">
-      <start>@charset\%]</start>
+      <start extended="true">
+        @charset \%{keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="at-rule"/>
         <context ref="embedded-lang-hook"/>
@@ -1931,7 +1961,9 @@
     -->
 
     <context id="at-font-face">
-      <start>@font-face\%]</start>
+      <start extended="true">
+        @font-face \%{keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="at-rule"/>
         <context ref="embedded-lang-hook"/>
@@ -2015,7 +2047,9 @@
     </context>
 
     <context id="at-font-feature-values">
-      <start>@font-feature-values\%]</start>
+      <start extended="true">
+        @font-feature-values \%{keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="at-rule"/>
         <context ref="embedded-lang-hook"/>
@@ -2031,7 +2065,9 @@
     -->
 
     <context id="at-import">
-      <start>@import\%]</start>
+      <start extended="true">
+        @import \%{keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="at-rule"/>
         <context ref="embedded-lang-hook"/>
@@ -2075,7 +2111,9 @@
     </context>
 
     <context id="vendor-specific-at-keyframes">
-      <start>@\%{vendor-specific-prefix}keyframes\%]</start>
+      <start extended="true">
+        @ \%{vendor-specific-prefix} keyframes \%{keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="vendor-specific"/>
         <context ref="embedded-lang-hook"/>
@@ -2087,7 +2125,9 @@
     </context>
 
     <context id="at-keyframes">
-      <start>@keyframes\%]</start>
+      <start extended="true">
+        @keyframes \%{keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="at-rule"/>
         <context ref="embedded-lang-hook"/>
@@ -2103,7 +2143,9 @@
     -->
 
     <context id="at-media">
-      <start>@media\%]</start>
+      <start extended="true">
+        @media \%{keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="at-rule"/>
         <context ref="embedded-lang-hook"/>
@@ -2124,7 +2166,9 @@
     </context>
 
     <context id="at-namespace">
-      <start>@namespace\%]</start>
+      <start extended="true">
+        @namespace \%{keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="at-rule"/>
         <context ref="embedded-lang-hook"/>
@@ -2145,7 +2189,9 @@
 
     <context id="pseudo-page-names" end-parent="true" style-ref="pseudo-class">
       <start extended="true">
-        \%[ (?: blank | first | left | right ) \%]
+        \%{keyword-start}
+        (?: blank | first | left | right )
+        \%{keyword-end}
       </start>
       <end>\%{def:always-match}</end>
     </context>
@@ -2196,7 +2242,9 @@
     </context>
 
     <context id="at-page">
-      <start>@page\%]</start>
+      <start extended="true">
+        @page \%{keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="at-rule"/>
         <context ref="embedded-lang-hook"/>
@@ -2261,7 +2309,9 @@
     </context>
 
     <context id="at-supports">
-      <start>@supports\%]</start>
+      <start extended="true">
+        @supports \%{keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="at-rule"/>
         <context ref="embedded-lang-hook"/>
@@ -2296,7 +2346,9 @@
     <!-- namespace qualifier -->
 
     <context id="namespace-qualifier">
-      <match>(\%[\%{identifier}|\*)?(\|)</match>
+      <match extended="true">
+        ( \%{keyword-start} \%{identifier} | \* )? ( \| )
+      </match>
       <include>
         <context sub-pattern="1" style-ref="namespace"/>
         <context sub-pattern="2" style-ref="namespace-qualifier"/>
@@ -2314,7 +2366,9 @@
     </context>
 
     <context id="type-selector" style-ref="type-selector">
-      <match>\%[\%{identifier}</match>
+      <match extended="true">
+        \%{keyword-start} \%{identifier}
+      </match>
     </context>
 
     <context id="universal-selector" style-ref="universal-selector">
@@ -2322,7 +2376,9 @@
     </context>
 
     <context id="attribute-selector-attribute-name" once-only="true" style-ref="attribute-selector-name">
-      <match>\%[\%{identifier}</match>
+      <match extended="true">
+        \%{keyword-start} \%{identifier}
+      </match>
     </context>
 
     <context id="attribute-selector-operator" once-only="true" style-ref="attribute-selector-operator">
@@ -2370,20 +2426,26 @@
     <!-- pseudo-elements -->
 
     <context id="vendor-specific-pseudo-element-name" end-parent="true" style-ref="vendor-specific">
-      <start>\%[\%{vendor-specific-identifier}</start>
+      <start extended="true">
+        \%{keyword-start} \%{vendor-specific-identifier}
+      </start>
       <end>\%{def:always-match}</end>
     </context>
 
     <context id="single-colon-pseudo-element-names" end-parent="true" style-ref="pseudo-element">
       <start extended="true">
-        \%[ (?: after | before | first-letter | first-line ) \%]
+        \%{keyword-start}
+        (?: after | before | first-letter | first-line )
+        \%{keyword-end}
       </start>
       <end>\%{def:always-match}</end>
     </context>
 
     <context id="pseudo-element-names" end-parent="true" style-ref="pseudo-element">
       <start extended="true">
-        \%[ (?: placeholder | selection ) \%]
+        \%{keyword-start}
+        (?: placeholder | selection )
+        \%{keyword-end}
       </start>
       <end>\%{def:always-match}</end>
     </context>
@@ -2410,13 +2472,15 @@
     <!-- pseudo-classes -->
 
     <context id="vendor-specific-pseudo-class-name" end-parent="true" style-ref="vendor-specific">
-      <start>\%[\%{vendor-specific-identifier}</start>
+      <start extended="true">
+        \%{keyword-start} \%{vendor-specific-identifier}
+      </start>
       <end>\%{def:always-match}</end>
     </context>
 
     <context id="pseudo-class-names" end-parent="true" style-ref="pseudo-class">
       <start extended="true">
-        \%[
+        \%{keyword-start}
         (?:
           active |
           checked |
@@ -2446,7 +2510,7 @@
           valid |
           visited
         )
-        \%]
+        \%{keyword-end}
       </start>
       <end>\%{def:always-match}</end>
     </context>
@@ -2458,7 +2522,9 @@
     </context>
 
     <context id="lang-pseudo-class" end-parent="true">
-      <start>\%[lang\(</start>
+      <start extended="true">
+        \%{keyword-start} lang \(
+      </start>
       <end>\)</end>
       <include>
         <context sub-pattern="0" where="start" style-ref="pseudo-class"/>
@@ -2484,7 +2550,9 @@
     </context>
 
     <context id="not-pseudo-class" end-parent="true">
-      <start>\%[not\(</start>
+      <start extended="true">
+        \%{keyword-start} not \(
+      </start>
       <end>\)</end>
       <include>
         <context sub-pattern="0" where="start" style-ref="pseudo-class"/>
@@ -2556,7 +2624,9 @@
 
     <context id="nth-pseudo-class" end-parent="true">
       <start extended="true">
-        \%[ (?: nth-child | nth-of-type | nth-last-child | nth-last-of-type ) \(
+        \%{keyword-start}
+        (?: nth-child | nth-of-type | nth-last-child | nth-last-of-type )
+        \(
       </start>
       <end>\)</end>
       <include>
diff --git a/data/language-specs/less.lang b/data/language-specs/less.lang
index d0c7a177..2a20d4c1 100644
--- a/data/language-specs/less.lang
+++ b/data/language-specs/less.lang
@@ -121,7 +121,9 @@
     </context>
 
     <context id="arguments-variable" style-ref="built-in-variable">
-      <match>@arguments\%]</match>
+      <match extended="true">
+        @arguments \%{css:keyword-end}
+      </match>
     </context>
 
     <context id="arguments-variable-interpolation" style-ref="built-in-variable">
@@ -278,7 +280,9 @@
     <!-- functions -->
 
     <context id="less-url">
-      <start>url\(</start>
+      <start extended="true">
+        \%{css:keyword-start} url \(
+      </start>
       <end>\)</end>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:function"/>
@@ -586,7 +590,9 @@
     </context>
 
     <context id="at-plugin">
-      <start>@plugin\%]</start>
+      <start extended="true">
+        @plugin \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>
@@ -601,7 +607,9 @@
     </context>
 
     <context id="standalone-plugin-function-call">
-      <start>(?=\%{identifier}\()</start>
+      <start extended="true">
+        \%{css:keyword-start} (?= \%{identifier} \( )
+      </start>
       <end>\%{statement-end}</end>
       <include>
         <context sub-pattern="0" where="end" style-ref="css:delimiter"/>
@@ -615,7 +623,9 @@
     <!-- at-rules -->
 
     <context id="less-at-charset">
-      <start case-sensitive="true">@charset\%]</start>
+      <start case-sensitive="true" extended="true">
+        @charset \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>
@@ -675,7 +685,9 @@
     </context>
 
     <context id="less-at-import">
-      <start>@import\%]</start>
+      <start extended="true">
+        @import \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>
@@ -766,7 +778,9 @@
     </context>
 
     <context id="guard">
-      <start>\%[when\%]</start>
+      <start extended="true">
+        \%{css:keyword-start} when \%{css:keyword-end}
+      </start>
       <end>(?={)</end>
       <include>
         <context sub-pattern="0" where="start" style-ref="guard-operator"/>
@@ -798,7 +812,9 @@
     </context>
 
     <context id="extend-pseudo-class" end-parent="true">
-      <start>\%[extend\(</start>
+      <start extended="true">
+        \%{css:keyword-start} extend \(
+      </start>
       <end>\)</end>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:pseudo-class"/>
diff --git a/data/language-specs/scss.lang b/data/language-specs/scss.lang
index 1266edf7..2fe5e545 100644
--- a/data/language-specs/scss.lang
+++ b/data/language-specs/scss.lang
@@ -245,7 +245,9 @@
     </context>
 
     <context id="scss-url">
-      <start>url\(</start>
+      <start extended="true">
+        \%{css:keyword-start} url \(
+      </start>
       <end>\)</end>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:function"/>
@@ -613,7 +615,9 @@
     -->
 
     <context id="at-extend">
-      <start>@extend\%]</start>
+      <start extended="true">
+        @extend \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>
@@ -669,7 +673,9 @@
     </context>
 
     <context id="at-at-root">
-      <start>@at-root\%]</start>
+      <start extended="true">
+        @at-root \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>
@@ -687,7 +693,9 @@
     -->
 
     <context id="at-debug-warn-error">
-      <start>@(?:debug|warn|error)\%]</start>
+      <start extended="true">
+        @ (?: debug | warn | error ) \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>
@@ -704,7 +712,9 @@
     -->
 
     <context id="at-if-else-if">
-      <start>@(?:if|else\s+if)\%]</start>
+      <start extended="true">
+        @ (?: if | else \s+ if ) \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>
@@ -715,7 +725,9 @@
     </context>
 
     <context id="at-else">
-      <start>@else\%]</start>
+      <start extended="true">
+        @else \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>
@@ -735,7 +747,9 @@
     </context>
 
     <context id="at-for">
-      <start>@for\%]</start>
+      <start extended="true">
+        @for \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>
@@ -756,7 +770,9 @@
     </context>
 
     <context id="at-each">
-      <start>@each\%]</start>
+      <start extended="true">
+        @each \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>
@@ -774,7 +790,9 @@
     -->
 
     <context id="at-while">
-      <start>@while\%]</start>
+      <start extended="true">
+        @while \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>
@@ -801,7 +819,9 @@
     </context>
 
     <context id="at-mixin">
-      <start>@mixin\%]</start>
+      <start extended="true">
+        @mixin \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>
@@ -817,7 +837,9 @@
     -->
 
     <context id="at-include">
-      <start>@include\%]</start>
+      <start extended="true">
+        @include \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>
@@ -834,7 +856,9 @@
     -->
 
     <context id="at-content">
-      <start>@content\%]</start>
+      <start extended="true">
+        @content \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>
@@ -860,7 +884,9 @@
     </context>
 
     <context id="at-function">
-      <start>@function\%]</start>
+      <start extended="true">
+        @function \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>
@@ -878,7 +904,9 @@
     -->
 
     <context id="at-return">
-      <start>@return\%]</start>
+      <start extended="true">
+        @return \%{css:keyword-end}
+      </start>
       <include>
         <context sub-pattern="0" where="start" style-ref="css:at-rule"/>
         <context ref="css:embedded-lang-hook"/>


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