1. <lexer>
    
  2.   <config>
    
  3.     <name>Sass</name>
    
  4.     <alias>sass</alias>
    
  5.     <filename>*.sass</filename>
    
  6.     <mime_type>text/x-sass</mime_type>
    
  7.     <case_insensitive>true</case_insensitive>
    
  8.   </config>
    
  9.   <rules>
    
  10.     <state name="import">
    
  11.       <rule pattern="[ \t]+">
    
  12.         <token type="Text"/>
    
  13.       </rule>
    
  14.       <rule pattern="\S+">
    
  15.         <token type="LiteralString"/>
    
  16.       </rule>
    
  17.       <rule pattern="\n">
    
  18.         <token type="Text"/>
    
  19.         <push state="root"/>
    
  20.       </rule>
    
  21.     </state>
    
  22.     <state name="string-single">
    
  23.       <rule pattern="(\\.|#(?=[^\n{])|[^\n&#39;#])+">
    
  24.         <token type="LiteralStringSingle"/>
    
  25.       </rule>
    
  26.       <rule pattern="#\{">
    
  27.         <token type="LiteralStringInterpol"/>
    
  28.         <push state="interpolation"/>
    
  29.       </rule>
    
  30.       <rule pattern="&#39;">
    
  31.         <token type="LiteralStringSingle"/>
    
  32.         <pop depth="1"/>
    
  33.       </rule>
    
  34.     </state>
    
  35.     <state name="string-double">
    
  36.       <rule pattern="(\\.|#(?=[^\n{])|[^\n&#34;#])+">
    
  37.         <token type="LiteralStringDouble"/>
    
  38.       </rule>
    
  39.       <rule pattern="#\{">
    
  40.         <token type="LiteralStringInterpol"/>
    
  41.         <push state="interpolation"/>
    
  42.       </rule>
    
  43.       <rule pattern="&#34;">
    
  44.         <token type="LiteralStringDouble"/>
    
  45.         <pop depth="1"/>
    
  46.       </rule>
    
  47.     </state>
    
  48.     <state name="pseudo-class">
    
  49.       <rule pattern="[\w-]+">
    
  50.         <token type="NameDecorator"/>
    
  51.       </rule>
    
  52.       <rule pattern="#\{">
    
  53.         <token type="LiteralStringInterpol"/>
    
  54.         <push state="interpolation"/>
    
  55.       </rule>
    
  56.       <rule>
    
  57.         <pop depth="1"/>
    
  58.       </rule>
    
  59.     </state>
    
  60.     <state name="for">
    
  61.       <rule pattern="(from|to|through)">
    
  62.         <token type="OperatorWord"/>
    
  63.       </rule>
    
  64.       <rule>
    
  65.         <include state="value"/>
    
  66.       </rule>
    
  67.     </state>
    
  68.     <state name="selector">
    
  69.       <rule pattern="[ \t]+">
    
  70.         <token type="Text"/>
    
  71.       </rule>
    
  72.       <rule pattern="\:">
    
  73.         <token type="NameDecorator"/>
    
  74.         <push state="pseudo-class"/>
    
  75.       </rule>
    
  76.       <rule pattern="\.">
    
  77.         <token type="NameClass"/>
    
  78.         <push state="class"/>
    
  79.       </rule>
    
  80.       <rule pattern="\#">
    
  81.         <token type="NameNamespace"/>
    
  82.         <push state="id"/>
    
  83.       </rule>
    
  84.       <rule pattern="[\w-]+">
    
  85.         <token type="NameTag"/>
    
  86.       </rule>
    
  87.       <rule pattern="#\{">
    
  88.         <token type="LiteralStringInterpol"/>
    
  89.         <push state="interpolation"/>
    
  90.       </rule>
    
  91.       <rule pattern="&amp;">
    
  92.         <token type="Keyword"/>
    
  93.       </rule>
    
  94.       <rule pattern="[~^*!&amp;\[\]()&lt;&gt;|+=@:;,./?-]">
    
  95.         <token type="Operator"/>
    
  96.       </rule>
    
  97.       <rule pattern="&#34;">
    
  98.         <token type="LiteralStringDouble"/>
    
  99.         <push state="string-double"/>
    
  100.       </rule>
    
  101.       <rule pattern="&#39;">
    
  102.         <token type="LiteralStringSingle"/>
    
  103.         <push state="string-single"/>
    
  104.       </rule>
    
  105.       <rule pattern="\n">
    
  106.         <token type="Text"/>
    
  107.         <push state="root"/>
    
  108.       </rule>
    
  109.     </state>
    
  110.     <state name="value">
    
  111.       <rule pattern="[ \t]+">
    
  112.         <token type="Text"/>
    
  113.       </rule>
    
  114.       <rule pattern="[!$][\w-]+">
    
  115.         <token type="NameVariable"/>
    
  116.       </rule>
    
  117.       <rule pattern="url\(">
    
  118.         <token type="LiteralStringOther"/>
    
  119.         <push state="string-url"/>
    
  120.       </rule>
    
  121.       <rule pattern="[a-z_-][\w-]*(?=\()">
    
  122.         <token type="NameFunction"/>
    
  123.       </rule>
    
  124.       <rule pattern="(color-interpolation-filters|glyph-orientation-vertical|transition-timing-function|border-bottom-right-radius|border-bottom-left-radius|animation-iteration-count|animation-timing-function|font-variant-alternates|font-variant-east-asian|text-underline-position|border-top-right-radius|scroll-snap-destination|scroll-snap-coordinate|font-language-override|text-emphasis-position|font-variant-ligatures|border-top-left-radius|background-blend-mode|background-attachment|text-decoration-color|text-decoration-style|font-feature-settings|grid-template-columns|shape-image-threshold|hyphenate-limit-lines|hyphenate-limit-chars|font-variant-position|hyphenate-limit-last|scroll-snap-points-x|initial-letter-align|decimal-leading-zero|box-decoration-break|hyphenate-limit-zone|text-combine-upright|text-decoration-skip|font-variant-numeric|scroll-snap-points-y|animation-play-state|text-decoration-line|hyphenate-character|transition-duration|text-emphasis-style|border-bottom-width|border-image-repeat|grid-template-areas|border-image-source|animation-direction|initial-letter-wrap|list-style-position|transition-property|text-space-collapse|border-bottom-style|hanging-punctuation|text-emphasis-color|border-image-outset|background-position|animation-fill-mode|backface-visibility|border-bottom-color|border-right-width|alignment-baseline|mask-border-outset|border-right-style|border-right-color|mask-border-repeat|table-header-group|grid-template-rows|animation-duration|perspective-origin|presentation-level|table-footer-group|mask-border-source|border-image-width|border-image-slice|table-column-group|counter-increment|dominant-baseline|column-rule-width|speak-punctuation|page-break-before|image-orientation|font-variant-caps|grid-auto-columns|page-break-inside|border-left-width|marquee-direction|border-left-style|border-left-color|grid-column-start|mask-border-width|column-rule-color|column-rule-style|background-repeat|background-origin|mask-border-slice|scroll-snap-type|border-top-style|border-top-width|background-image|page-break-after|transform-origin|border-top-color|text-orientation|background-color|transition-delay|footnote-display|list-style-image|mask-border-mode|font-size-adjust|image-resolution|footnote-policy|object-position|ultra-condensed|motion-rotation|cjk-ideographic|justify-content|animation-delay|region-fragment|table-row-group|caret-animation|text-align-last|float-reference|extra-condensed|transform-style|text-decoration|grid-column-gap|border-collapse|background-clip|border-boundary|text-space-trim|grid-column-end|list-style-type|background-size|font-synthesis|padding-bottom|outline-offset|initial-letter|animation-name|hiragana-iroha|katakana-iroha|no-close-quote|border-spacing|rotation-point|flex-direction|voice-duration|grid-row-start|vertical-align|extra-expanded|polar-distance|baseline-shift|letter-spacing|grid-auto-flow|grid-auto-rows|lighting-color|bookmark-label|text-transform|semi-condensed|bookmark-level|mask-composite|bookmark-state|ultra-expanded|mix-blend-mode|overflow-style|grid-template|border-bottom|small-caption|semi-expanded|mask-position|no-open-quote|motion-offset|border-radius|offset-before|outline-color|outline-style|table-caption|outline-width|overflow-wrap|padding-right|flood-opacity|voice-balance|ruby-position|justify-items|bidi-override|marquee-style|shape-outside|speak-numeral|marquee-speed|counter-reset|margin-bottom|text-overflow|text-emphasis|align-content|break-before|border-width|border-image|shape-margin|speak-header|margin-right|inline-table|table-layout|center-right|marquee-loop|border-color|line-through|box-suppress|shape-inside|justify-self|float-offset|pause-before|table-column|grid-row-gap|grid-row-end|padding-left|text-justify|column-count|wrap-through|font-kerning|font-stretch|border-right|border-style|word-spacing|offset-start|caption-side|voice-volume|voice-stress|font-variant|text-spacing|offset-after|voice-family|unicode-bidi|break-inside|writing-mode|column-width|break-after|user-select|align-items|motion-path|font-weight|grid-column|voice-range|white-space|will-change|wrap-before|transparent|caret-color|text-bottom|caret-shape|mask-repeat|wrap-inside|upper-latin|text-shadow|mask-origin|font-family|flex-shrink|column-fill|message-box|text-indent|lower-roman|column-rule|padding-top|column-span|play-during|upper-roman|flood-color|page-policy|border-left|pause-after|lower-greek|perspective|lower-alpha|counter-set|mask-border|center-left|polar-angle|float-defer|marker-side|speech-rate|upper-alpha|line-height|pitch-range|empty-cells|close-quote|rest-before|margin-left|voice-pitch|overflow-y|small-caps|ruby-align|ruby-merge|wrap-after|box-shadow|word-break|flex-basis|max-height|rest-after|mask-image|list-style|min-height|voice-rate|visibility|sans-serif|object-fit|continuous|status-bar|offset-end|align-self|box-sizing|right-side|string-set|transition|margin-top|text-align|cue-before|border-top|font-style|line-break|background|capitalize|table-cell|open-quote|appearance|overflow-x|column-gap|rightwards|table-row|animation|flow-into|landscape|left-side|clip-rule|font-size|clip-path|flow-from|text-wrap|nw-resize|transform|no-repeat|line-grid|condensed|sw-resize|leftwards|line-snap|direction|crosshair|nav-right|list-item|se-resize|isolation|underline|grid-area|uppercase|min-width|flex-wrap|spell-out|max-width|ne-resize|max-lines|mask-clip|elevation|far-right|flex-flow|mask-type|word-wrap|flex-grow|mask-size|wrap-flow|monospace|mask-mode|cue-after|lowercase|relative|absolute|grid-row|armenian|e-resize|narrower|expanded|baseline|nav-down|nav-left|w-resize|xx-large|text-top|overline|overflow|katakana|n-resize|repeat-x|repeat-y|rotation|position|box-snap|xx-small|collapse|tab-size|speak-as|hiragana|s-resize|portrait|georgian|richness|separate|grid-gap|far-left|inherit|columns|content|oblique|default|outside|display|x-small|decimal|fantasy|z-index|running|azimuth|x-large|lighter|cursive|padding|outline|orphans|opacity|pointer|move-to|visible|hyphens|justify|smaller|nav-up|circle|inline|motion|inside|invert|italic|height|center|higher|x-fast|larger|hidden|digits|hebrew|groove|x-high|faster|quotes|static|behind|square|resize|border|slower|silent|dashed|medium|always|middle|filter|x-loud|bottom|widows|volume|scroll|chains|x-soft|stress|normal|nowrap|repeat|double|dotted|margin|outset|cursor|bolder|avoid|embed|x-low|above|fixed|wider|cross|inset|ridge|large|clear|speak|order|caret|width|thick|block|level|serif|blink|lower|pause|pitch|right|aural|super|below|solid|color|float|hide|soft|rest|grid|auto|slow|flow|show|page|disc|left|clip|text|flex|bold|loud|thin|size|none|help|both|once|icon|crop|fast|crop|high|mask|wait|font|all|url|top|rgb|mix|yes|low|ltr|cue|px)\b">
    
  125.         <token type="NameConstant"/>
    
  126.       </rule>
    
  127.       <rule pattern="(lightgoldenrodyellow|mediumspringgreen|mediumaquamarine|mediumslateblue|mediumturquoise|mediumvioletred|lightsteelblue|cornflowerblue|lightslategray|blanchedalmond|mediumseagreen|lightslategrey|darkolivegreen|darkgoldenrod|darkslateblue|lightseagreen|rebeccapurple|darkslategrey|darkslategray|palegoldenrod|paleturquoise|palevioletred|darkturquoise|lavenderblush|antiquewhite|mediumorchid|lightskyblue|mediumpurple|midnightblue|darkseagreen|lemonchiffon|springgreen|yellowgreen|greenyellow|navajowhite|darkmagenta|lightyellow|transparent|lightsalmon|forestgreen|saddlebrown|deepskyblue|floralwhite|dodgerblue|ghostwhite|lightcoral|sandybrown|darkviolet|papayawhip|mediumblue|chartreuse|lightgreen|whitesmoke|aquamarine|darkorange|darksalmon|powderblue|darkorchid|blueviolet|indianred|mintcream|mistyrose|olivedrab|goldenrod|orangered|lawngreen|gainsboro|lightblue|firebrick|lightcyan|peachpuff|lightgray|darkkhaki|lightgrey|darkgreen|rosybrown|royalblue|slateblue|chocolate|cadetblue|burlywood|slategray|slategrey|limegreen|steelblue|turquoise|palegreen|lightpink|aliceblue|moccasin|darkgrey|darkblue|seagreen|lavender|cornsilk|deeppink|seashell|darkgray|honeydew|darkcyan|dimgrey|magenta|crimson|darkred|hotpink|skyblue|oldlace|dimgray|fuchsia|thistle|orchid|indigo|orange|tomato|violet|salmon|yellow|silver|purple|bisque|sienna|maroon|black|linen|azure|white|wheat|khaki|green|olive|ivory|coral|brown|beige|snow|blue|navy|aqua|teal|gray|gold|grey|lime|peru|cyan|pink|plum|tan|red)\b">
    
  128.         <token type="NameEntity"/>
    
  129.       </rule>
    
  130.       <rule pattern="(fuchsia|purple|yellow|maroon|silver|white|olive|green|black|lime|gray|navy|blue|teal|aqua|red)\b">
    
  131.         <token type="NameBuiltin"/>
    
  132.       </rule>
    
  133.       <rule pattern="\!(important|default)">
    
  134.         <token type="NameException"/>
    
  135.       </rule>
    
  136.       <rule pattern="(true|false)">
    
  137.         <token type="NamePseudo"/>
    
  138.       </rule>
    
  139.       <rule pattern="(and|or|not)">
    
  140.         <token type="OperatorWord"/>
    
  141.       </rule>
    
  142.       <rule pattern="/\*">
    
  143.         <token type="CommentMultiline"/>
    
  144.         <push state="inline-comment"/>
    
  145.       </rule>
    
  146.       <rule pattern="//[^\n]*">
    
  147.         <token type="CommentSingle"/>
    
  148.       </rule>
    
  149.       <rule pattern="\#[a-z0-9]{1,6}">
    
  150.         <token type="LiteralNumberHex"/>
    
  151.       </rule>
    
  152.       <rule pattern="(-?\d+)(\%|[a-z]+)?">
    
  153.         <bygroups>
    
  154.           <token type="LiteralNumberInteger"/>
    
  155.           <token type="KeywordType"/>
    
  156.         </bygroups>
    
  157.       </rule>
    
  158.       <rule pattern="(-?\d*\.\d+)(\%|[a-z]+)?">
    
  159.         <bygroups>
    
  160.           <token type="LiteralNumberFloat"/>
    
  161.           <token type="KeywordType"/>
    
  162.         </bygroups>
    
  163.       </rule>
    
  164.       <rule pattern="#\{">
    
  165.         <token type="LiteralStringInterpol"/>
    
  166.         <push state="interpolation"/>
    
  167.       </rule>
    
  168.       <rule pattern="[~^*!&amp;%&lt;&gt;|+=@:,./?-]+">
    
  169.         <token type="Operator"/>
    
  170.       </rule>
    
  171.       <rule pattern="[\[\]()]+">
    
  172.         <token type="Punctuation"/>
    
  173.       </rule>
    
  174.       <rule pattern="&#34;">
    
  175.         <token type="LiteralStringDouble"/>
    
  176.         <push state="string-double"/>
    
  177.       </rule>
    
  178.       <rule pattern="&#39;">
    
  179.         <token type="LiteralStringSingle"/>
    
  180.         <push state="string-single"/>
    
  181.       </rule>
    
  182.       <rule pattern="[a-z_-][\w-]*">
    
  183.         <token type="Name"/>
    
  184.       </rule>
    
  185.       <rule pattern="\n">
    
  186.         <token type="Text"/>
    
  187.         <push state="root"/>
    
  188.       </rule>
    
  189.     </state>
    
  190.     <state name="id">
    
  191.       <rule pattern="[\w-]+">
    
  192.         <token type="NameNamespace"/>
    
  193.       </rule>
    
  194.       <rule pattern="#\{">
    
  195.         <token type="LiteralStringInterpol"/>
    
  196.         <push state="interpolation"/>
    
  197.       </rule>
    
  198.       <rule>
    
  199.         <pop depth="1"/>
    
  200.       </rule>
    
  201.     </state>
    
  202.     <state name="multi-comment">
    
  203.       <rule pattern=".+">
    
  204.         <token type="CommentMultiline"/>
    
  205.       </rule>
    
  206.       <rule pattern="\n">
    
  207.         <token type="Text"/>
    
  208.         <push state="root"/>
    
  209.       </rule>
    
  210.     </state>
    
  211.     <state name="interpolation">
    
  212.       <rule pattern="\}">
    
  213.         <token type="LiteralStringInterpol"/>
    
  214.         <pop depth="1"/>
    
  215.       </rule>
    
  216.       <rule>
    
  217.         <include state="value"/>
    
  218.       </rule>
    
  219.     </state>
    
  220.     <state name="string-url">
    
  221.       <rule pattern="(\\#|#(?=[^\n{])|[^\n#)])+">
    
  222.         <token type="LiteralStringOther"/>
    
  223.       </rule>
    
  224.       <rule pattern="#\{">
    
  225.         <token type="LiteralStringInterpol"/>
    
  226.         <push state="interpolation"/>
    
  227.       </rule>
    
  228.       <rule pattern="\)">
    
  229.         <token type="LiteralStringOther"/>
    
  230.         <pop depth="1"/>
    
  231.       </rule>
    
  232.     </state>
    
  233.     <state name="inline-comment">
    
  234.       <rule pattern="(\\#|#(?=[^\n{])|\*(?=[^\n/])|[^\n#*])+">
    
  235.         <token type="CommentMultiline"/>
    
  236.       </rule>
    
  237.       <rule pattern="#\{">
    
  238.         <token type="LiteralStringInterpol"/>
    
  239.         <push state="interpolation"/>
    
  240.       </rule>
    
  241.       <rule pattern="\*/">
    
  242.         <token type="Comment"/>
    
  243.         <pop depth="1"/>
    
  244.       </rule>
    
  245.     </state>
    
  246.     <state name="root">
    
  247.       <rule pattern="[ \t]*\n">
    
  248.         <token type="Text"/>
    
  249.       </rule>
    
  250.       <rule pattern="@import">
    
  251.         <token type="Keyword"/>
    
  252.         <push state="import"/>
    
  253.       </rule>
    
  254.       <rule pattern="@for">
    
  255.         <token type="Keyword"/>
    
  256.         <push state="for"/>
    
  257.       </rule>
    
  258.       <rule pattern="@(debug|warn|if|while)">
    
  259.         <token type="Keyword"/>
    
  260.         <push state="value"/>
    
  261.       </rule>
    
  262.       <rule pattern="(@mixin)( [\w-]+)">
    
  263.         <bygroups>
    
  264.           <token type="Keyword"/>
    
  265.           <token type="NameFunction"/>
    
  266.         </bygroups>
    
  267.         <push state="value"/>
    
  268.       </rule>
    
  269.       <rule pattern="(@include)( [\w-]+)">
    
  270.         <bygroups>
    
  271.           <token type="Keyword"/>
    
  272.           <token type="NameDecorator"/>
    
  273.         </bygroups>
    
  274.         <push state="value"/>
    
  275.       </rule>
    
  276.       <rule pattern="@extend">
    
  277.         <token type="Keyword"/>
    
  278.         <push state="selector"/>
    
  279.       </rule>
    
  280.       <rule pattern="@[\w-]+">
    
  281.         <token type="Keyword"/>
    
  282.         <push state="selector"/>
    
  283.       </rule>
    
  284.       <rule pattern="=[\w-]+">
    
  285.         <token type="NameFunction"/>
    
  286.         <push state="value"/>
    
  287.       </rule>
    
  288.       <rule pattern="\+[\w-]+">
    
  289.         <token type="NameDecorator"/>
    
  290.         <push state="value"/>
    
  291.       </rule>
    
  292.       <rule pattern="([!$][\w-]\w*)([ \t]*(?:(?:\|\|)?=|:))">
    
  293.         <bygroups>
    
  294.           <token type="NameVariable"/>
    
  295.           <token type="Operator"/>
    
  296.         </bygroups>
    
  297.         <push state="value"/>
    
  298.       </rule>
    
  299.       <rule pattern=":">
    
  300.         <token type="NameAttribute"/>
    
  301.         <push state="old-style-attr"/>
    
  302.       </rule>
    
  303.       <rule pattern="(?=.+?[=:]([^a-z]|$))">
    
  304.         <token type="NameAttribute"/>
    
  305.         <push state="new-style-attr"/>
    
  306.       </rule>
    
  307.       <rule>
    
  308.         <push state="selector"/>
    
  309.       </rule>
    
  310.     </state>
    
  311.     <state name="single-comment">
    
  312.       <rule pattern=".+">
    
  313.         <token type="CommentSingle"/>
    
  314.       </rule>
    
  315.       <rule pattern="\n">
    
  316.         <token type="Text"/>
    
  317.         <push state="root"/>
    
  318.       </rule>
    
  319.     </state>
    
  320.     <state name="new-style-attr">
    
  321.       <rule pattern="[^\s:=&#34;\[]+">
    
  322.         <token type="NameAttribute"/>
    
  323.       </rule>
    
  324.       <rule pattern="#\{">
    
  325.         <token type="LiteralStringInterpol"/>
    
  326.         <push state="interpolation"/>
    
  327.       </rule>
    
  328.       <rule pattern="[ \t]*[=:]">
    
  329.         <token type="Operator"/>
    
  330.         <push state="value"/>
    
  331.       </rule>
    
  332.     </state>
    
  333.     <state name="class">
    
  334.       <rule pattern="[\w-]+">
    
  335.         <token type="NameClass"/>
    
  336.       </rule>
    
  337.       <rule pattern="#\{">
    
  338.         <token type="LiteralStringInterpol"/>
    
  339.         <push state="interpolation"/>
    
  340.       </rule>
    
  341.       <rule>
    
  342.         <pop depth="1"/>
    
  343.       </rule>
    
  344.     </state>
    
  345.     <state name="old-style-attr">
    
  346.       <rule pattern="[^\s:=&#34;\[]+">
    
  347.         <token type="NameAttribute"/>
    
  348.       </rule>
    
  349.       <rule pattern="#\{">
    
  350.         <token type="LiteralStringInterpol"/>
    
  351.         <push state="interpolation"/>
    
  352.       </rule>
    
  353.       <rule pattern="[ \t]*=">
    
  354.         <token type="Operator"/>
    
  355.         <push state="value"/>
    
  356.       </rule>
    
  357.       <rule>
    
  358.         <push state="value"/>
    
  359.       </rule>
    
  360.     </state>
    
  361.   </rules>
    
  362. </lexer>