1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
| module.exports = function(hljs) {
| var FUNCTION_LIKE = {
| begin: /[\w-]+\(/, returnBegin: true,
| contains: [
| {
| className: 'built_in',
| begin: /[\w-]+/
| },
| {
| begin: /\(/, end: /\)/,
| contains: [
| hljs.APOS_STRING_MODE,
| hljs.QUOTE_STRING_MODE,
| hljs.CSS_NUMBER_MODE,
| ]
| }
| ]
| }
| var ATTRIBUTE = {
| className: 'attribute',
| begin: /\S/, end: ':', excludeEnd: true,
| starts: {
| endsWithParent: true, excludeEnd: true,
| contains: [
| FUNCTION_LIKE,
| hljs.CSS_NUMBER_MODE,
| hljs.QUOTE_STRING_MODE,
| hljs.APOS_STRING_MODE,
| hljs.C_BLOCK_COMMENT_MODE,
| {
| className: 'number', begin: '#[0-9A-Fa-f]+'
| },
| {
| className: 'meta', begin: '!important'
| }
| ]
| }
| }
| var AT_IDENTIFIER = '@[a-z-]+' // @font-face
| var AT_MODIFIERS = "and or not only"
| var MEDIA_TYPES = "all print screen speech"
| var AT_PROPERTY_RE = /@\-?\w[\w]*(\-\w+)*/ // @-webkit-keyframes
| var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';
| var RULE = {
| begin: /(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/, returnBegin: true, end: ';', endsWithParent: true,
| contains: [
| ATTRIBUTE
| ]
| };
|
| return {
| case_insensitive: true,
| illegal: /[=\/|'\$]/,
| contains: [
| hljs.C_BLOCK_COMMENT_MODE,
| {
| className: 'selector-id', begin: /#[A-Za-z0-9_-]+/
| },
| {
| className: 'selector-class', begin: /\.[A-Za-z0-9_-]+/
| },
| {
| className: 'selector-attr',
| begin: /\[/, end: /\]/,
| illegal: '$',
| contains: [
| hljs.APOS_STRING_MODE,
| hljs.QUOTE_STRING_MODE,
| ]
| },
| {
| className: 'selector-pseudo',
| begin: /:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/
| },
| // matching these here allows us to treat them more like regular CSS
| // rules so everything between the {} gets regular rule highlighting,
| // which is what we want for page and font-face
| {
| begin: '@(page|font-face)',
| lexemes: AT_IDENTIFIER,
| keywords: '@page @font-face'
| },
| {
| begin: '@', end: '[{;]', // at_rule eating first "{" is a good thing
| // because it doesn’t let it to be parsed as
| // a rule set but instead drops parser into
| // the default mode which is how it should be.
| illegal: /:/, // break on Less variables @var: ...
| returnBegin: true,
| contains: [
| {
| className: 'keyword',
| begin: AT_PROPERTY_RE
| },
| {
| begin: /\s/, endsWithParent: true, excludeEnd: true,
| relevance: 0,
| keywords: AT_MODIFIERS,
| contains: [
| {
| begin: /[a-z-]+:/,
| className:"attribute"
| },
| hljs.APOS_STRING_MODE,
| hljs.QUOTE_STRING_MODE,
| hljs.CSS_NUMBER_MODE
| ]
| }
| ]
| },
| {
| className: 'selector-tag', begin: IDENT_RE,
| relevance: 0
| },
| {
| begin: '{', end: '}',
| illegal: /\S/,
| contains: [
| hljs.C_BLOCK_COMMENT_MODE,
| RULE,
| ]
| }
| ]
| };
| };
|
|