<?xml version="1.0"?>
<syntax name="styling.sass">
<zones>
<include collection="at-rules"/>
<include collection="at-sass"/>
<include collection="sass-variable"/>
<include collection="sass-mixin"/>
<include collection="sass-mixin-definition"/>
<include collection="comments"/>
<include collection="style"/>
</zones>
<library>
<collection name="style">
<zone name="style.sass">
<starts-with>(?=([.&>+*#a-zA-Z@-]))</starts-with>
<ends-with>^\s*\n</ends-with>
<subzones>
<include collection="at-sass"/>
<include collection="sass-variable"/>
<include collection="properties"/>
<include collection="selectors"/>
<include collection="comments"/>
<subzones>
<include collection="comments"/>
</subzones>
</subzones>
</zone>
</collection>
<collection name="selectors">
<zone name="selector.psuedo.sass">
<expression>:[a-zA-Z0-9_-]+</expression>
</zone>
<zone name="selector.class.sass">
<expression>\.[a-zA-Z0-9_-]+</expression>
</zone>
<zone name="selector.id.sass">
<expression>#[a-zA-Z0-9_-]+</expression>
</zone>
<zone name="selector.parent.sass">
<expression>&</expression>
</zone>
<zone name="selector.child.sass">
<expression>>\s*</expression>
</zone>
<zone name="selector.adjacent.sass">
<expression>\+\s+</expression>
</zone>
<zone name="selector.advanced.sass">
<expression>\[[a-zA-Z0-9'"#.:^$\/=_ -]+\]</expression>
</zone>
<zone name="selector.named.sass">
<expression>(xmp|video|var|ul|u|tt|tr|title|time|thead|th|tfoot|textarea|td|tbody|table|sup|sub|style|strong|strike|span|source|small|select|section|script|samp|s|ruby|rt|rp|q|progress|pre|param|p|output|option|optgroup|ol|object|noscript|noframes|nav|meter|meta|menu|mark|map|link|li|legend|label|keygen|kbd|ins|input|img|iframe|i|html|hr|hgroup|header|head|h6|h5|h4|h3|h2|h1|frameset|frame|form|footer|figure|fieldset|embed|em|dt|dl|div|dialog|dfn|details|del|dd|datalist|command|colgroup|col|code|cite|center|caption|canvas|button|br|body|blockquote|big|bdo|base|b|audio|aside|article|area|applet|address|acronym|abbr|a|\*)</expression>
</zone>
</collection>
<collection name="properties">
<include collection="sass-mixin"/>
<zone name="property-name">
<expression>(?=[a-z-])[a-z-]*(?=: | =)</expression>
</zone>
<include collection="values"/>
</collection>
<collection name="file-name">
<zone name="file.sass">
<expression>([\/a-zA-Z0-9_-]+)(\.)([a-zA-Z0-9_-]+)</expression>
<capture number="2" name="punctuation.path.seperator"/>
<capture number="3" name="file.extension.sass"/>
</zone>
</collection>
<collection name="comments">
<zone name="comment.block.sass">
<starts-with>
<expression>/\*</expression>
<capture number="0" name="punctuation.begin"/>
</starts-with>
<ends-with>
<expression>\*/</expression>
<capture number="0" name="punctuation.end"/>
</ends-with>
</zone>
<zone name="comment.line.sass">
<starts-with>
<expression>//</expression>
<capture number="0" name="punctuation.begin"/>
</starts-with>
<ends-with>$</ends-with>
</zone>
</collection>
<collection name="values">
<zone name="property-value">
<starts-with>
<expression>(=)|(: )(?=)</expression>
<capture number="0" name="punctuation.separator.key-value.sass"/>
</starts-with>
<ends-with>
<expression>\n</expression>
</ends-with>
<subzones>
<include collection="comments"/>
<include collection="sass-variable"/>
<include collection="constants"/>
<include collection="important"/>
<zone>
<starts-with>
<expression>(url|attr|counter|counters)\s*(\()</expression>
<capture number="1" name="support.function.misc.sass"/>
<capture number="2" name="punctuation.section.function.sass"/>
</starts-with>
<ends-with>
<expression>(\))</expression>
<capture number="1" name="punctuation.section.function.sass"/>
</ends-with>
<subzones>
<include collection="string"/>
<zone name="variable.parameter.misc.sass">
<expression>[^'") \t]+</expression>
</zone>
</subzones>
</zone>
<zone name="keyword.default">
<expression>!default</expression>
</zone>
</subzones>
</zone>
</collection>
<!-- Constants, etc. -->
<collection name="constants">
<include collection="string"/>
<include collection="numeric"/>
<include collection="color"/>
<include collection="named-values"/>
</collection>
<collection name="string">
<zone name="string.quoted.double">
<starts-with>
<expression>"</expression>
<capture number="0" name="punctuation.definition.string.begin.css"/>
</starts-with>
<ends-with>
<expression>"</expression>
<capture number="0" name="punctuation.definition.string.end.css"/>
</ends-with>
<subzones>
<zone name="constant.character.escaped.sass">
<expression>\\.</expression>
</zone>
</subzones>
</zone>
</collection>
<collection name="numeric">
<zone name="zconstant.nzumeric.sass">
<expression>(-|\+)?\s*[0-9]+(\.[0-9]+)?</expression>
</zone>
<zone name="zkeyword.other.zunit.sass">
<expression>(?<=[\d])(px|pt|cm|mm|in|em|ex|pc|s|ms)\b|%</expression>
</zone>
</collection>
<collection name="color">
<zone name="zconstant.zother.color.hex-value.sass">
<expression>(#)([0-9a-fA-F]{3}|[0-9a-fA-F]{6})\b</expression>
<capture number="1" name="punctuation.definition.constant.sass"/>
</zone>
<zone name="zconstant.zother.color.rgb-value.sass">
<starts-with>
<expression>(rgb|rgba)\s*(\()</expression>
<capture number="1" name="support.function.misc.sass"/>
<capture number="2" name="punctuation.section.function.sass"/>
</starts-with>
<ends-with>
<expression>(\))</expression>
<capture number="1" name="punctuation.section.function.sass"/>
</ends-with>
<subzones>
<zone name="constant.other.color.rgb-value.sass">
<expression>(\b0*((1?[0-9]{1,2})|(2([0-4][0-9]|5[0-5])))\s*,\s*)(0*((1?[0-9]{1,2})|(2([0-4][0-9]|5[0-5])))\s*,\s*)(0*((1?[0-9]{1,2})|(2([0-4][0-9]|5[0-5])))\b)</expression>
</zone>
<zone name="constant.other.color.rgb-percentage.sass">
<expression>\b([0-9]{1,2}|100)\s*%,\s*([0-9]{1,2}|100)\s*%,\s*([0-9]{1,2}|100)\s*%</expression>
</zone>
</subzones>
</zone>
</collection>
<collection name="important">
<zone name="keyword.important.sass">
<expression>!important</expression>
</zone>
</collection>
<collection name="named-values">
<zone name="keyword.property-value.sass">
<expression>\b(absolute|all-scroll|always|auto|baseline|below|bidi-override|block|bold|bolder|both|bottom|break-all|break-word|capitalize|center|char|circle|col-resize|collapse|crosshair|dashed|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|groove|hand|help|hidden|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace)\b</expression>
</zone>
<zone name="constant.font-name.sass">
<expression>(\b(?i:arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace)\b)</expression>
</zone>
</collection>
<!-- @rules -->
<collection name="at-rules">
<zone name="at-rule.import.sass">
<starts-with>
<expression>^\s*((@)import\b)</expression>
<capture number="1" name="keyword.control"/>
<capture number="2" name="punctuation.definition.keyword"/>
</starts-with>
<ends-with>
<expression>$</expression>
<capture number="0" name="punctuation.definition.end"/>
</ends-with>
<subzones>
<include collection="file-name"/>
</subzones>
</zone>
</collection>
<!-- Definitions for @rules that are allowed within selectors.
@mixin
@include
@media
@extend
@debug
@warn
along with control-flow
-->
<collection name="at-sass">
<zone name="at-rule.mixin.definition.sass">
<starts-with>
<expression>((@)mixin)\s([a-zA-Z0-9_-]+)</expression>
<capture number="1" name="keyword.control"/>
<capture number="2" name="punctuation.definition.keyword"/>
<capture number="3" name="mixin.name.sass"/>
</starts-with>
<ends-with>$</ends-with>
<subzones>
<include collection="arg-list"/>
</subzones>
</zone>
<zone name="at-rule.mixin.include.sass">
<starts-with>
<expression>((@)include)\s([a-zA-Z0-9_-]+)</expression>
<capture number="1" name="keyword.control"/>
<capture number="2" name="punctuation.definition.keyword"/>
<capture number="3" name="mixin.name.sass"/>
</starts-with>
<ends-with>$</ends-with>
<subzones>
<include collection="arg-list"/>
</subzones>
</zone>
<zone name="at-rule.media.sass">
<starts-with>
<expression>^\s*((@)media\b)</expression>
<capture number="1" name="keyword.control"/>
<capture number="2" name="punctuation.definition.keyword"/>
</starts-with>
<ends-with>$</ends-with>
<subzones>
<zone name="media-type">
<expression>(screen|print|handheld)</expression>
</zone>
<zone name="connector">
<expression>(and|or)</expression>
</zone>
<zone name="condition">
<begins-with>
<expression>(</expression>
<capture number="0" name="punctuation.definition.begin"/>
</begins-with>
<ends-with>
<expression>)</expression>
<capture number="0" name="punctuation.definition.end"/>
</ends-with>
<subzones>
<zone name="property-name">
<expression>[a-zA-Z0-9_-]+(?=:)</expression>
</zone>
<include collection="values"/>
</subzones>
</zone>
</subzones>
</zone>
<zone name="at-rule.extend.sass">
<starts-with>
<expression>((@)extend)</expression>
<capture number="1" name="keyword.control"/>
<capture number="2" name="punctuation.definition.keyword"/>
</starts-with>
<ends-with>$</ends-with>
<subzones>
<zone name="keyword.optional">
<expression>!optional</expression>
</zone>
</subzones>
</zone>
<zone name="at-rule.debug.sass">
<starts-with>
<expression>((@)debug)</expression>
<capture number="1" name="keyword.control"/>
<capture number="2" name="punctuation.definition.keyword"/>
</starts-with>
<ends-with>$</ends-with>
<subzones>
<include collection="constants"/>
</subzones>
</zone>
<zone name="at-rule.warn.sass">
<starts-with>
<expression>((@)warn)</expression>
<capture number="1" name="keyword.control"/>
<capture number="2" name="punctuation.definition.keyword"/>
</starts-with>
<ends-with>$</ends-with>
<subzones>
<include collection="constants"/>
</subzones>
</zone>
<include collection="control-flow"/>
</collection>
<collection name="control-flow">
<zone name="control-flow.if">
<expression>((@)if)</expression>
<capture number="1" name="keyword.control"/>
<capture number="2" name="punctuation.definition.keyword"/>
</zone>
<zone name="control-flow.else-if">
<expression>((@)else\s+if)</expression>
<capture number="1" name="keyword.control"/>
<capture number="2" name="punctuation.definition.keyword"/>
</zone>
<zone name="control-flow.else">
<expression>((@)else)</expression>
<capture number="1" name="keyword.control"/>
<capture number="2" name="punctuation.definition.keyword"/>
</zone>
<zone name="control-flow.for">
<expression>((@)for)</expression>
<capture number="1" name="keyword.control"/>
<capture number="2" name="punctuation.definition.keyword"/>
</zone>
<zone name="keyword.control.for.from">
<expression>from</expression>
</zone>
<zone name="keyword.control.for.through">
<expression>through</expression>
</zone>
<zone name="control-flow.each">
<starts-with>
<expression>((@)each)</expression>
<capture number="1" name="keyword.control"/>
<capture number="2" name="punctuation.definition.keyword"/>
</starts-with>
<ends-with>$</ends-with>
<subzones>
<include collection="sass-variable"/>
<zone name="keyword.in">
<expression>in</expression>
</zone>
</subzones>
</zone>
<zone name="control-flow.while">
<starts-with>
<expression>((@)while)</expression>
<capture number="1" name="keyword.control"/>
<capture number="2" name="punctuation.definition.keyword"/>
</starts-with>
<ends-with>$</ends-with>
</zone>
</collection>
<!-- Arg-List (should handle assignments as well!)-->
<collection name="arg-list">
<zone name="arg-list.sass">
<begins-with>
<expression>(</expression>
<capture number="0" name="punctuation.definition.begin"/>
</begins-with>
<ends-with>
<expression>)</expression>
<capture number="0" name="punctuation.definition.end"/>
</ends-with>
<subzones>
<zone name="punctuation.separator">
<expression>,</expression>
</zone>
<include collection="constants"/>
<include collection="sass-variable"/>
</subzones>
</zone>
</collection>
<!-- Variables -->
<collection name="sass-variable">
<zone name="variable.definition.style.sass">
<starts-with>
<expression>(\$)([a-zA-Z0-9_-]+(?=:))</expression>
<capture number="1" name="punctuation.definition.variable.sass"/>
<capture number="2" name="variable.property-name.sass"/>
</starts-with>
<ends-with>
<expression>$</expression>
</ends-with>
<subzones>
<include collection="values"/>
</subzones>
</zone>
<zone name="variable.style.sass">
<expression>(\$)([a-zA-Z0-9_-]+)</expression>
<capture number="1" name="punctuation.definition.variable.sass"/>
<capture number="2" name="variable.property-name.sass"/>
</zone>
</collection>
<!-- Mixins -->
<collection name="sass-mixin">
<zone name="mixin.sass">
<starts-with>
<expression>(\+)([a-zA-Z0-9_-]+)</expression>
<capture number="1" name="punctuation.definition.keyword"/>
<capture number="2" name="mixin.name.sass"/>
<capture number="3" name="punctuation.definition.begin"/>
</starts-with>
<ends-with>
<expression>$</expression>
<capture number="0" name="punctuation.definition.end"/>
</ends-with>
<subzones>
<zone name="mixin.arguments">
<starts-with>
<expression>\(</expression>
<capture number="0" name="punctuation.definition.begin"/>
</starts-with>
<ends-with>
<expression>\)\s*$</expression>
<capture number="0" name="punctuation.definition.end"/>
</ends-with>
<subzones>
<zone name="punctuation.separator">
<expression>,</expression>
</zone>
<include collection="constants"/>
<include collection="sass-variable"/>
</subzones>
</zone>
</subzones>
</zone>
</collection>
<collection name="sass-mixin-definition">
<zone name="mixin.definition.style.sass">
<starts-with>
<expression>(^=)([a-zA-Z0-9_-]+)((\()([a-zA-Z0-9_!$,'" -]+)(\)))?</expression>
</starts-with>
<ends-with>\s*\n</ends-with>
<subzones>
<include collection="style"/>
<include collection="properties"/>
</subzones>
</zone>
</collection>
</library>
</syntax>