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