Blame view

bower_components/prism/components/prism-jade.js 4.54 KB
73bcce88   luigser   COMPONENTS
1
  (function(Prism) {
eb240478   Luigi Serra   public room cards...
2
3
4
5
6
7
8
9
  	// TODO:
  	// - Add CSS highlighting inside <style> tags
  	// - Add support for multi-line code blocks
  	// - Add support for interpolation #{} and !{}
  	// - Add support for tag interpolation #[]
  	// - Add explicit support for plain text using |
  	// - Add support for markup embedded in plain text
  
73bcce88   luigser   COMPONENTS
10
11
12
13
  	Prism.languages.jade = {
  
  		// Multiline stuff should appear before the rest
  
eb240478   Luigi Serra   public room cards...
14
15
16
17
  		// This handles both single-line and multi-line comments
  		'comment': {
  			pattern: /(^([\t ]*))\/\/.*((?:\r?\n|\r)\2[\t ]+.+)*/m,
  			lookbehind: true
73bcce88   luigser   COMPONENTS
18
19
20
21
22
  		},
  
  		// All the tag-related part is in lookbehind
  		// so that it can be highlighted by the "tag" pattern
  		'multiline-script': {
eb240478   Luigi Serra   public room cards...
23
  			pattern: /(^([\t ]*)script\b.*\.[\t ]*)((?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,
73bcce88   luigser   COMPONENTS
24
25
26
27
28
29
30
31
  			lookbehind: true,
  			inside: {
  				rest: Prism.languages.javascript
  			}
  		},
  
  		// See at the end of the file for known filters
  		'filter': {
eb240478   Luigi Serra   public room cards...
32
  			pattern: /(^([\t ]*)):.+((?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,
73bcce88   luigser   COMPONENTS
33
34
35
36
37
38
39
40
41
42
  			lookbehind: true,
  			inside: {
  				'filter-name': {
  					pattern: /^:[\w-]+/,
  					alias: 'variable'
  				}
  			}
  		},
  
  		'multiline-plain-text': {
eb240478   Luigi Serra   public room cards...
43
  			pattern: /(^([\t ]*)[\w\-#.]+\.[\t ]*)((?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,
73bcce88   luigser   COMPONENTS
44
45
46
  			lookbehind: true
  		},
  		'markup': {
eb240478   Luigi Serra   public room cards...
47
  			pattern: /(^[\t ]*)<.+/m,
73bcce88   luigser   COMPONENTS
48
49
50
51
52
  			lookbehind: true,
  			inside: {
  				rest: Prism.languages.markup
  			}
  		},
73bcce88   luigser   COMPONENTS
53
54
55
56
57
58
59
  		'doctype': {
  			pattern: /((?:^|\n)[\t ]*)doctype(?: .+)?/,
  			lookbehind: true
  		},
  
  		// This handle all conditional and loop keywords
  		'flow-control': {
eb240478   Luigi Serra   public room cards...
60
  			pattern: /(^[\t ]*)(?:if|unless|else|case|when|default|each|while)\b(?: .+)?/m,
73bcce88   luigser   COMPONENTS
61
62
63
  			lookbehind: true,
  			inside: {
  				'each': {
eb240478   Luigi Serra   public room cards...
64
  					pattern: /^each .+? in\b/,
73bcce88   luigser   COMPONENTS
65
66
67
68
69
70
  					inside: {
  						'keyword': /\b(?:each|in)\b/,
  						'punctuation': /,/
  					}
  				},
  				'branch': {
eb240478   Luigi Serra   public room cards...
71
  					pattern: /^(?:if|unless|else|case|when|default|while)\b/,
73bcce88   luigser   COMPONENTS
72
73
74
75
76
77
  					alias: 'keyword'
  				},
  				rest: Prism.languages.javascript
  			}
  		},
  		'keyword': {
eb240478   Luigi Serra   public room cards...
78
  			pattern: /(^[\t ]*)(?:block|extends|include|append|prepend)\b.+/m,
73bcce88   luigser   COMPONENTS
79
80
81
82
83
  			lookbehind: true
  		},
  		'mixin': [
  			// Declaration
  			{
eb240478   Luigi Serra   public room cards...
84
  				pattern: /(^[\t ]*)mixin .+/m,
73bcce88   luigser   COMPONENTS
85
86
87
88
89
90
91
92
93
  				lookbehind: true,
  				inside: {
  					'keyword': /^mixin/,
  					'function': /\w+(?=\s*\(|\s*$)/,
  					'punctuation': /[(),.]/
  				}
  			},
  			// Usage
  			{
eb240478   Luigi Serra   public room cards...
94
  				pattern: /(^[\t ]*)\+.+/m,
73bcce88   luigser   COMPONENTS
95
96
97
98
99
100
101
102
103
104
105
  				lookbehind: true,
  				inside: {
  					'name': {
  						pattern: /^\+\w+/,
  						alias: 'function'
  					},
  					'rest': Prism.languages.javascript
  				}
  			}
  		],
  		'script': {
eb240478   Luigi Serra   public room cards...
106
  			pattern: /(^[\t ]*script(?:(?:&[^(]+)?\([^)]+\))*[\t ]+).+/m,
73bcce88   luigser   COMPONENTS
107
108
109
110
111
112
113
  			lookbehind: true,
  			inside: {
  				rest: Prism.languages.javascript
  			}
  		},
  
  		'plain-text': {
eb240478   Luigi Serra   public room cards...
114
115
  			pattern: /(^[\t ]*(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?[\t ]+).+/m,
  			lookbehind: true
73bcce88   luigser   COMPONENTS
116
117
  		},
  		'tag': {
eb240478   Luigi Serra   public room cards...
118
  			pattern: /(^[\t ]*)(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?:?/m,
73bcce88   luigser   COMPONENTS
119
120
121
122
123
124
125
126
127
128
129
130
131
  			lookbehind: true,
  			inside: {
  				'attributes': [
  					{
  						pattern: /&[^(]+\([^)]+\)/,
  						inside: {
  							rest: Prism.languages.javascript
  						}
  					},
  					{
  						pattern: /\([^)]+\)/,
  						inside: {
  							'attr-value': {
eb240478   Luigi Serra   public room cards...
132
  								pattern: /(=\s*)(?:\{[^}]*\}|[^,)\r\n]+)/,
73bcce88   luigser   COMPONENTS
133
134
135
136
137
138
  								lookbehind: true,
  								inside: {
  									rest: Prism.languages.javascript
  								}
  							},
  							'attr-name': /[\w-]+(?=\s*!?=|\s*[,)])/,
eb240478   Luigi Serra   public room cards...
139
  							'punctuation': /[!=(),]+/
73bcce88   luigser   COMPONENTS
140
141
142
  						}
  					}
  				],
eb240478   Luigi Serra   public room cards...
143
  				'punctuation': /:/
73bcce88   luigser   COMPONENTS
144
145
146
147
  			}
  		},
  		'code': [
  			{
eb240478   Luigi Serra   public room cards...
148
  				pattern: /(^[\t ]*(?:-|!?=)).+/m,
73bcce88   luigser   COMPONENTS
149
150
151
152
153
154
  				lookbehind: true,
  				inside: {
  					rest: Prism.languages.javascript
  				}
  			}
  		],
eb240478   Luigi Serra   public room cards...
155
  		'punctuation': /[.\-!=|]+/
73bcce88   luigser   COMPONENTS
156
157
  	};
  
eb240478   Luigi Serra   public room cards...
158
  	var filter_pattern = '(^([\\t ]*)):{{filter_name}}((?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ]+.+|\\s*?(?=\\r?\\n|\\r)))+';
73bcce88   luigser   COMPONENTS
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
  
  	// Non exhaustive list of available filters and associated languages
  	var filters = [
  		{filter:'atpl',language:'twig'},
  		{filter:'coffee',language:'coffeescript'},
  		'ejs',
  		'handlebars',
  		'hogan',
  		'less',
  		'livescript',
  		'markdown',
  		'mustache',
  		'plates',
  		{filter:'sass',language:'scss'},
  		'stylus',
  		'swig'
  
  	];
  	var all_filters = {};
  	for (var i = 0, l = filters.length; i < l; i++) {
  		var filter = filters[i];
  		filter = typeof filter === 'string' ? {filter: filter, language: filter} : filter;
  		if (Prism.languages[filter.language]) {
  			all_filters['filter-' + filter.filter] = {
eb240478   Luigi Serra   public room cards...
183
  				pattern: RegExp(filter_pattern.replace('{{filter_name}}', filter.filter), 'm'),
73bcce88   luigser   COMPONENTS
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
  				lookbehind: true,
  				inside: {
  					'filter-name': {
  						pattern: /^:[\w-]+/,
  						alias: 'variable'
  					},
  					rest: Prism.languages[filter.language]
  				}
  			}
  		}
  	}
  
  	Prism.languages.insertBefore('jade', 'filter', all_filters);
  
  }(Prism));