2 " Language: LESS Cascading Style Sheets
3 " Maintainer: Leaf Corcoran <leafot@gmail.com>
4 " Modifier: Bryan J Swift <bryan@bryanjswift.com>
5 " URL: http://leafo.net/lessphp/vim/less.vim
6 " URL: http://gist.github.com/161047
7 " Last Change: 2009 August 4
8 " LESS by Leaf Corcoran
9 " CSS2 by Nikolai Weibull
10 " Full CSS2, HTML4 support by Yeti
12 " For version 5.x: Clear all syntax items
13 " For version 6.x: Quit when a syntax file was already loaded
14 if !exists("main_syntax")
17 elseif exists("b:current_syntax")
20 let main_syntax = 'less'
27 syn keyword cssTagName abbr acronym address applet area a b base
28 syn keyword cssTagName basefont bdo big blockquote body br button
29 syn keyword cssTagName caption center cite code col colgroup dd del
30 syn keyword cssTagName dfn dir div dl dt em fieldset font form frame
31 syn keyword cssTagName frameset h1 h2 h3 h4 h5 h6 head hr html img i
32 syn keyword cssTagName iframe img input ins isindex kbd label legend li
33 syn keyword cssTagName link map menu meta noframes noscript ol optgroup
34 syn keyword cssTagName option p param pre q s samp script select small
35 syn keyword cssTagName span strike strong style sub sup tbody td
36 syn keyword cssTagName textarea tfoot th thead title tr tt ul u var
37 syn match cssTagName "\<table\>"
38 syn match cssTagName "\*"
40 syn match cssTagName "@page\>" nextgroup=cssDefinition
42 syn match cssSelectorOp "[+>.]"
43 syn match cssSelectorOp2 "[~|]\?=" contained
44 syn region cssAttributeSelector matchgroup=cssSelectorOp start="\[" end="]" transparent contains=cssUnicodeEscape,cssSelectorOp2,cssStringQ,cssStringQQ
47 syn match cssIdentifier "#[A-Za-zÀ-ÿ_@][A-Za-zÀ-ÿ0-9_@-]*"
49 syn match cssIdentifier "#[A-Za-z_@][A-Za-z0-9_@-]*"
52 syn match cssMedia "@media\>" nextgroup=cssMediaType skipwhite skipnl
53 syn keyword cssMediaType contained screen print aural braile embosed handheld projection ty tv all nextgroup=cssMediaComma,cssMediaBlock skipwhite skipnl
54 syn match cssMediaComma "," nextgroup=cssMediaType skipwhite skipnl
55 syn region cssMediaBlock transparent matchgroup=cssBraces start='{' end='}' contains=cssTagName,cssError,cssComment,cssDefinition,cssURL,cssUnicodeEscape,cssIdentifier
57 syn match cssValueInteger "[-+]\=\d\+"
58 syn match cssValueNumber "[-+]\=\d\+\(\.\d*\)\="
59 syn match cssValueLength "[-+]\=\d\+\(\.\d*\)\=\(%\|mm\|cm\|in\|pt\|pc\|em\|ex\|px\)"
61 syn match cssValueAngle contained "[-+]\=\d\+\(\.\d*\)\=\(deg\|grad\|rad\)"
62 syn match cssValueTime contained "+\=\d\+\(\.\d*\)\=\(ms\|s\)"
63 syn match cssValueFrequency contained "+\=\d\+\(\.\d*\)\=\(Hz\|kHz\)"
65 syn match cssFontDescriptor "@font-face\>" nextgroup=cssFontDescriptorBlock skipwhite skipnl
66 syn region cssFontDescriptorBlock contained transparent matchgroup=cssBraces start="{" end="}" contains=cssComment,cssError,cssUnicodeEscape,cssFontProp,cssFontAttr,cssCommonAttr,cssStringQ,cssStringQQ,cssFontDescriptorProp,cssValue.*,cssFontDescriptorFunction,cssUnicodeRange,cssFontDescriptorAttr
67 syn match cssFontDescriptorProp contained "\<\(unicode-range\|unit-per-em\|panose-1\|cap-height\|x-height\|definition-src\)\>"
68 syn keyword cssFontDescriptorProp contained src stemv stemh slope ascent descent widths bbox baseline centerline mathline topline
69 syn keyword cssFontDescriptorAttr contained all
70 syn region cssFontDescriptorFunction contained matchgroup=cssFunctionName start="\<\(uri\|url\|local\|format\)\s*(" end=")" contains=cssStringQ,cssStringQQ oneline keepend
71 syn match cssUnicodeRange contained "U+[0-9A-Fa-f?]\+"
72 syn match cssUnicodeRange contained "U+\x\+-\x\+"
74 syn keyword cssColor contained aqua black blue fuchsia gray green lime maroon navy olive purple red silver teal yellow
75 " FIXME: These are actually case-insentivie too, but (a) specs recommend using
76 " mixed-case (b) it's hard to highlight the word `Background' correctly in
79 syn keyword cssColor contained ActiveBorder ActiveCaption AppWorkspace ButtonFace ButtonHighlight ButtonShadow ButtonText CaptionText GrayText Highlight HighlightText InactiveBorder InactiveCaption InactiveCaptionText InfoBackground InfoText Menu MenuText Scrollbar ThreeDDarkShadow ThreeDFace ThreeDHighlight ThreeDLightShadow ThreeDShadow Window WindowFrame WindowText Background
81 syn match cssColor contained "\<transparent\>"
82 syn match cssColor contained "\<white\>"
83 syn match cssColor contained "#[0-9A-Fa-f]\{3\}\>"
84 syn match cssColor contained "#[0-9A-Fa-f]\{6\}\>"
85 "syn match cssColor contained "\<rgb\s*(\s*\d\+\(\.\d*\)\=%\=\s*,\s*\d\+\(\.\d*\)\=%\=\s*,\s*\d\+\(\.\d*\)\=%\=\s*)"
86 syn region cssURL contained matchgroup=cssFunctionName start="\<url\s*(" end=")" oneline keepend
87 syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgb\|clip\|attr\|counter\|rect\)\s*(" end=")" oneline keepend
89 syn match cssImportant contained "!\s*important\>"
91 syn keyword cssCommonAttr contained auto none inherit
92 syn keyword cssCommonAttr contained top bottom
93 syn keyword cssCommonAttr contained medium normal
95 syn match cssFontProp contained "\<font\>\(-\(family\|style\|variant\|weight\|size\(-adjust\)\=\|stretch\)\>\)\="
96 syn match cssFontAttr contained "\<\(sans-\)\=\<serif\>"
97 syn match cssFontAttr contained "\<small\>\(-\(caps\|caption\)\>\)\="
98 syn match cssFontAttr contained "\<x\{1,2\}-\(large\|small\)\>"
99 syn match cssFontAttr contained "\<message-box\>"
100 syn match cssFontAttr contained "\<status-bar\>"
101 syn match cssFontAttr contained "\<\(\(ultra\|extra\|semi\|status-bar\)-\)\=\(condensed\|expanded\)\>"
102 syn keyword cssFontAttr contained cursive fantasy monospace italic oblique
103 syn keyword cssFontAttr contained bold bolder lighter larger smaller
104 syn keyword cssFontAttr contained icon menu
105 syn match cssFontAttr contained "\<caption\>"
106 syn keyword cssFontAttr contained large smaller larger
107 syn keyword cssFontAttr contained narrower wider
109 syn keyword cssColorProp contained color
110 syn match cssColorProp contained "\<background\(-\(color\|image\|attachment\|position\)\)\="
111 syn keyword cssColorAttr contained center scroll fixed
112 syn match cssColorAttr contained "\<repeat\(-[xy]\)\=\>"
113 syn match cssColorAttr contained "\<no-repeat\>"
115 syn match cssTextProp "\<\(\(word\|letter\)-spacing\|text\(-\(decoration\|transform\|align\|index\|shadow\)\)\=\|vertical-align\|unicode-bidi\|line-height\)\>"
116 syn match cssTextAttr contained "\<line-through\>"
117 syn match cssTextAttr contained "\<text-indent\>"
118 syn match cssTextAttr contained "\<\(text-\)\=\(top\|bottom\)\>"
119 syn keyword cssTextAttr contained underline overline blink sub super middle
120 syn keyword cssTextAttr contained capitalize uppercase lowercase center justify baseline sub super
122 syn match cssBoxProp contained "\<\(margin\|padding\|border\)\(-\(top\|right\|bottom\|left\)\)\=\>"
123 syn match cssBoxProp contained "\<border-\(\(\(top\|right\|bottom\|left\)-\)\=\(width\|color\|style\)\)\=\>"
124 syn match cssBoxProp contained "\<\(width\|z-index\)\>"
125 syn match cssBoxProp contained "\<\(min\|max\)-\(width\|height\)\>"
126 syn keyword cssBoxProp contained width height float clear overflow clip visibility
127 syn keyword cssBoxAttr contained thin thick both
128 syn keyword cssBoxAttr contained dotted dashed solid double groove ridge inset outset
129 syn keyword cssBoxAttr contained hidden visible scroll collapse
131 syn keyword cssGeneratedContentProp contained content quotes
132 syn match cssGeneratedContentProp contained "\<counter-\(reset\|increment\)\>"
133 syn match cssGeneratedContentProp contained "\<list-style\(-\(type\|position\|image\)\)\=\>"
134 syn match cssGeneratedContentAttr contained "\<\(no-\)\=\(open\|close\)-quote\>"
135 syn match cssAuralAttr contained "\<lower\>"
136 syn match cssGeneratedContentAttr contained "\<\(lower\|upper\)-\(roman\|alpha\|greek\|latin\)\>"
137 syn match cssGeneratedContentAttr contained "\<\(hiragana\|katakana\)\(-iroha\)\=\>"
138 syn match cssGeneratedContentAttr contained "\<\(decimal\(-leading-zero\)\=\|cjk-ideographic\)\>"
139 syn keyword cssGeneratedContentAttr contained disc circle square hebrew armenian georgian
140 syn keyword cssGeneratedContentAttr contained inside outside
142 syn match cssPagingProp contained "\<page\(-break-\(before\|after\|inside\)\)\=\>"
143 syn keyword cssPagingProp contained size marks inside orphans widows
144 syn keyword cssPagingAttr contained landscape portrait crop cross always avoid
146 syn keyword cssUIProp contained cursor
147 syn match cssUIProp contained "\<outline\(-\(width\|style\|color\)\)\=\>"
148 syn match cssUIAttr contained "\<[ns]\=[ew]\=-resize\>"
149 syn keyword cssUIAttr contained default crosshair pointer move wait help
150 syn keyword cssUIAttr contained thin thick
151 syn keyword cssUIAttr contained dotted dashed solid double groove ridge inset outset
152 syn keyword cssUIAttr contained invert
154 syn match cssRenderAttr contained "\<marker\>"
155 syn match cssRenderProp contained "\<\(display\|marker-offset\|unicode-bidi\|white-space\|list-item\|run-in\|inline-table\)\>"
156 syn keyword cssRenderProp contained position top bottom direction
157 syn match cssRenderProp contained "\<\(left\|right\)\>"
158 syn keyword cssRenderAttr contained block inline compact
159 syn match cssRenderAttr contained "\<table\(-\(row-gorup\|\(header\|footer\)-group\|row\|column\(-group\)\=\|cell\|caption\)\)\=\>"
160 syn keyword cssRenderAttr contained static relative absolute fixed
161 syn keyword cssRenderAttr contained ltr rtl embed bidi-override pre nowrap
162 syn match cssRenderAttr contained "\<bidi-override\>"
164 syn match cssAuralProp contained "\<\(pause\|cue\)\(-\(before\|after\)\)\=\>"
165 syn match cssAuralProp contained "\<\(play-during\|speech-rate\|voice-family\|pitch\(-range\)\=\|speak\(-\(punctuation\|numerals\)\)\=\)\>"
166 syn keyword cssAuralProp contained volume during azimuth elevation stress richness
167 syn match cssAuralAttr contained "\<\(x-\)\=\(soft\|loud\)\>"
168 syn keyword cssAuralAttr contained silent
169 syn match cssAuralAttr contained "\<spell-out\>"
170 syn keyword cssAuralAttr contained non mix
171 syn match cssAuralAttr contained "\<\(left\|right\)-side\>"
172 syn match cssAuralAttr contained "\<\(far\|center\)-\(left\|center\|right\)\>"
173 syn keyword cssAuralAttr contained leftwards rightwards behind
174 syn keyword cssAuralAttr contained below level above higher
175 syn match cssAuralAttr contained "\<\(x-\)\=\(slow\|fast\)\>"
176 syn keyword cssAuralAttr contained faster slower
177 syn keyword cssAuralAttr contained male female child code digits continuous
179 syn match cssTableProp contained "\<\(caption-side\|table-layout\|border-collapse\|border-spacing\|empty-cells\|speak-header\)\>"
180 syn keyword cssTableAttr contained fixed collapse separate show hide once always
184 syn match lessComment "//.*$" contains=@Spell
185 syn match lessVariable "@[A-Za-z_-][A-Za-z0-9_-]*" contained
186 syn region lessVariableDefinition start="^@" end=";" contains=css.*Attr,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssDefinition,cssClassName,cssTagName,cssIdentifier,lessComment,lessVariable,lessFunction
188 " captures both the definition and the call
189 syn region lessFunction matchgroup=lessFuncDef start="@[A-Za-z_-][A-Za-z0-9_-]*(" end=")" contains=css.*Attr,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssDefinition,cssClassName,cssTagName,cssIdentifier,lessComment,lessVariable,lessFunction
195 " FIXME: This allows cssMediaBlock before the semicolon, which is wrong.
196 syn region cssInclude start="@import" end=";" contains=cssComment,cssURL,cssUnicodeEscape,cssMediaType
197 syn match cssBraces contained "[{}]"
198 syn match cssError contained "{@<>"
199 syn region cssDefinition transparent matchgroup=cssBraces start='{' end='}' contains=css.*Attr,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssDefinition,cssClassName,cssTagName,cssIdentifier,lessComment,lessVariable,lessFunction
200 " syn match cssBraceError "}"
202 syn match cssPseudoClass ":\S*" contains=cssPseudoClassId,cssUnicodeEscape
203 syn keyword cssPseudoClassId contained link visited active hover focus before after left right
204 syn match cssPseudoClassId contained "\<first\(-\(line\|letter\|child\)\)\=\>"
205 syn region cssPseudoClassLang matchgroup=cssPseudoClassId start=":lang(" end=")" oneline
207 syn region cssComment start="/\*" end="\*/" contains=@Spell
209 syn match cssUnicodeEscape "\\\x\{1,6}\s\?"
210 syn match cssSpecialCharQQ +\\"+ contained
211 syn match cssSpecialCharQ +\\'+ contained
212 syn region cssStringQQ start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=cssUnicodeEscape,cssSpecialCharQQ
213 syn region cssStringQ start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=cssUnicodeEscape,cssSpecialCharQ
214 syn match cssClassName "\.[A-Za-z][A-Za-z0-9_-]\+"
219 if main_syntax == "css"
223 " Define the default highlighting.
224 " For version 5.7 and earlier: only when not done already
225 " For version 5.8 and later: only when an item doesn't have highlighting yet
226 if version >= 508 || !exists("did_less_syn_inits")
228 let did_less_syn_inits = 1
229 command -nargs=+ HiLink hi link <args>
231 command -nargs=+ HiLink hi def link <args>
234 HiLink lessComment Comment
235 HiLink lessVariable Special
236 HiLink lessFuncDef Function
237 HiLink cssComment Comment
238 HiLink cssTagName Statement
239 HiLink cssSelectorOp Special
240 HiLink cssSelectorOp2 Special
241 HiLink cssFontProp StorageClass
242 HiLink cssColorProp storageClass
243 HiLink cssTextProp StorageClass
244 HiLink cssBoxProp StorageClass
245 HiLink cssRenderProp StorageClass
246 HiLink cssAuralProp StorageClass
247 HiLink cssRenderProp StorageClass
248 HiLink cssGeneratedContentProp StorageClass
249 HiLink cssPagingProp StorageClass
250 HiLink cssTableProp StorageClass
251 HiLink cssUIProp StorageClass
252 HiLink cssFontAttr Type
253 HiLink cssColorAttr Type
254 HiLink cssTextAttr Type
255 HiLink cssBoxAttr Type
256 HiLink cssRenderAttr Type
257 HiLink cssAuralAttr Type
258 HiLink cssGeneratedContentAttr Type
259 HiLink cssPagingAttr Type
260 HiLink cssTableAttr Type
261 HiLink cssUIAttr Type
262 HiLink cssCommonAttr Type
263 HiLink cssPseudoClassId PreProc
264 HiLink cssPseudoClassLang Constant
265 HiLink cssValueLength Number
266 HiLink cssValueInteger Number
267 HiLink cssValueNumber Number
268 HiLink cssValueAngle Number
269 HiLink cssValueTime Number
270 HiLink cssValueFrequency Number
271 HiLink cssFunction Constant
273 HiLink cssFunctionName Function
274 HiLink cssColor Constant
275 HiLink cssIdentifier Function
276 HiLink cssInclude Include
277 HiLink cssImportant Special
278 HiLink cssBraces SpecialChar
279 HiLink cssBraceError Error
280 HiLink cssError Error
281 HiLink cssInclude Include
282 HiLink cssUnicodeEscape Special
283 HiLink cssStringQQ String
284 HiLink cssStringQ String
285 HiLink cssMedia Special
286 HiLink cssMediaType Special
287 HiLink cssMediaComma Normal
288 HiLink cssFontDescriptor Special
289 HiLink cssFontDescriptorFunction Constant
290 HiLink cssFontDescriptorProp StorageClass
291 HiLink cssFontDescriptorAttr Type
292 HiLink cssUnicodeRange Constant
293 HiLink cssClassName Function
297 let b:current_syntax = "less"
299 if main_syntax == 'less'