highlight_js-rails 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/.gitignore +19 -0
  2. data/AUTHORS.en.txt +46 -0
  3. data/AUTHORS.ru.txt +46 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE +24 -0
  6. data/README.md +34 -0
  7. data/Rakefile +2 -0
  8. data/classref.txt +437 -0
  9. data/highlight_js-rails.gemspec +19 -0
  10. data/lib/highlight_js/rails/engine.rb +6 -0
  11. data/lib/highlight_js/version.rb +5 -0
  12. data/lib/highlight_js-rails.rb +2 -0
  13. data/vendor/assets/images/highlight_js/brown_papersq.png +0 -0
  14. data/vendor/assets/images/highlight_js/school_book.png +0 -0
  15. data/vendor/assets/javascripts/highlight_js/highlight.js +630 -0
  16. data/vendor/assets/javascripts/highlight_js/languages/1c.js +68 -0
  17. data/vendor/assets/javascripts/highlight_js/languages/apache.js +432 -0
  18. data/vendor/assets/javascripts/highlight_js/languages/avrasm.js +75 -0
  19. data/vendor/assets/javascripts/highlight_js/languages/axapta.js +43 -0
  20. data/vendor/assets/javascripts/highlight_js/languages/bash.js +56 -0
  21. data/vendor/assets/javascripts/highlight_js/languages/cmake.js +24 -0
  22. data/vendor/assets/javascripts/highlight_js/languages/cpp.js +62 -0
  23. data/vendor/assets/javascripts/highlight_js/languages/cs.js +41 -0
  24. data/vendor/assets/javascripts/highlight_js/languages/css.js +101 -0
  25. data/vendor/assets/javascripts/highlight_js/languages/delphi.js +70 -0
  26. data/vendor/assets/javascripts/highlight_js/languages/diff.js +64 -0
  27. data/vendor/assets/javascripts/highlight_js/languages/django.js +72 -0
  28. data/vendor/assets/javascripts/highlight_js/languages/dos.js +29 -0
  29. data/vendor/assets/javascripts/highlight_js/languages/erlang-repl.js +81 -0
  30. data/vendor/assets/javascripts/highlight_js/languages/erlang.js +201 -0
  31. data/vendor/assets/javascripts/highlight_js/languages/go.js +58 -0
  32. data/vendor/assets/javascripts/highlight_js/languages/haskell.js +77 -0
  33. data/vendor/assets/javascripts/highlight_js/languages/ini.js +32 -0
  34. data/vendor/assets/javascripts/highlight_js/languages/java.js +45 -0
  35. data/vendor/assets/javascripts/highlight_js/languages/javascript.js +53 -0
  36. data/vendor/assets/javascripts/highlight_js/languages/lisp.js +87 -0
  37. data/vendor/assets/javascripts/highlight_js/languages/lua.js +75 -0
  38. data/vendor/assets/javascripts/highlight_js/languages/mel.js +40 -0
  39. data/vendor/assets/javascripts/highlight_js/languages/nginx.js +224 -0
  40. data/vendor/assets/javascripts/highlight_js/languages/objectivec.js +94 -0
  41. data/vendor/assets/javascripts/highlight_js/languages/parser3.js +52 -0
  42. data/vendor/assets/javascripts/highlight_js/languages/perl.js +143 -0
  43. data/vendor/assets/javascripts/highlight_js/languages/php.js +55 -0
  44. data/vendor/assets/javascripts/highlight_js/languages/profile.js +49 -0
  45. data/vendor/assets/javascripts/highlight_js/languages/python.js +71 -0
  46. data/vendor/assets/javascripts/highlight_js/languages/renderman.js +230 -0
  47. data/vendor/assets/javascripts/highlight_js/languages/ruby.js +203 -0
  48. data/vendor/assets/javascripts/highlight_js/languages/scala.js +60 -0
  49. data/vendor/assets/javascripts/highlight_js/languages/smalltalk.js +55 -0
  50. data/vendor/assets/javascripts/highlight_js/languages/sql.js +90 -0
  51. data/vendor/assets/javascripts/highlight_js/languages/tex.js +62 -0
  52. data/vendor/assets/javascripts/highlight_js/languages/vala.js +75 -0
  53. data/vendor/assets/javascripts/highlight_js/languages/vbscript.js +30 -0
  54. data/vendor/assets/javascripts/highlight_js/languages/vhdl.js +30 -0
  55. data/vendor/assets/javascripts/highlight_js/languages/xml.js +103 -0
  56. data/vendor/assets/stylesheets/highlight_js/arta.css +151 -0
  57. data/vendor/assets/stylesheets/highlight_js/ascetic.css +45 -0
  58. data/vendor/assets/stylesheets/highlight_js/brown_paper.css.erb +105 -0
  59. data/vendor/assets/stylesheets/highlight_js/dark.css +103 -0
  60. data/vendor/assets/stylesheets/highlight_js/default.css +121 -0
  61. data/vendor/assets/stylesheets/highlight_js/far.css +118 -0
  62. data/vendor/assets/stylesheets/highlight_js/github.css +129 -0
  63. data/vendor/assets/stylesheets/highlight_js/idea.css +118 -0
  64. data/vendor/assets/stylesheets/highlight_js/ir_black.css +103 -0
  65. data/vendor/assets/stylesheets/highlight_js/magula.css +118 -0
  66. data/vendor/assets/stylesheets/highlight_js/school_book.css.erb +111 -0
  67. data/vendor/assets/stylesheets/highlight_js/solarized_dark.css +96 -0
  68. data/vendor/assets/stylesheets/highlight_js/solarized_light.css +96 -0
  69. data/vendor/assets/stylesheets/highlight_js/sunburst.css +147 -0
  70. data/vendor/assets/stylesheets/highlight_js/vs.css +84 -0
  71. data/vendor/assets/stylesheets/highlight_js/zenburn.css +115 -0
  72. metadata +129 -0
@@ -0,0 +1,630 @@
1
+ /*
2
+ Syntax highlighting with language autodetection.
3
+ http://softwaremaniacs.org/soft/highlight/
4
+ */
5
+
6
+ var hljs = new function() {
7
+
8
+ /* Utility functions */
9
+
10
+ function escape(value) {
11
+ return value.replace(/&/gm, '&amp;').replace(/</gm, '&lt;');
12
+ }
13
+
14
+ function langRe(language, value, global) {
15
+ return RegExp(
16
+ value,
17
+ 'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '')
18
+ );
19
+ }
20
+
21
+ function findCode(pre) {
22
+ for (var i = 0; i < pre.childNodes.length; i++) {
23
+ var node = pre.childNodes[i];
24
+ if (node.nodeName == 'CODE')
25
+ return node;
26
+ if (!(node.nodeType == 3 && node.nodeValue.match(/\s+/)))
27
+ break;
28
+ }
29
+ }
30
+
31
+ function blockText(block, ignoreNewLines) {
32
+ var result = '';
33
+ for (var i = 0; i < block.childNodes.length; i++)
34
+ if (block.childNodes[i].nodeType == 3) {
35
+ var chunk = block.childNodes[i].nodeValue;
36
+ if (ignoreNewLines)
37
+ chunk = chunk.replace(/\n/g, '');
38
+ result += chunk;
39
+ } else if (block.childNodes[i].nodeName == 'BR')
40
+ result += '\n';
41
+ else
42
+ result += blockText(block.childNodes[i]);
43
+ // Thank you, MSIE...
44
+ if (/MSIE [678]/.test(navigator.userAgent))
45
+ result = result.replace(/\r/g, '\n');
46
+ return result;
47
+ }
48
+
49
+ function blockLanguage(block) {
50
+ var classes = block.className.split(/\s+/)
51
+ classes = classes.concat(block.parentNode.className.split(/\s+/));
52
+ for (var i = 0; i < classes.length; i++) {
53
+ var class_ = classes[i].replace(/^language-/, '');
54
+ if (languages[class_] || class_ == 'no-highlight') {
55
+ return class_;
56
+ }
57
+ }
58
+ }
59
+
60
+ /* Stream merging */
61
+
62
+ function nodeStream(node) {
63
+ var result = [];
64
+ (function (node, offset) {
65
+ for (var i = 0; i < node.childNodes.length; i++) {
66
+ if (node.childNodes[i].nodeType == 3)
67
+ offset += node.childNodes[i].nodeValue.length;
68
+ else if (node.childNodes[i].nodeName == 'BR')
69
+ offset += 1
70
+ else {
71
+ result.push({
72
+ event: 'start',
73
+ offset: offset,
74
+ node: node.childNodes[i]
75
+ });
76
+ offset = arguments.callee(node.childNodes[i], offset)
77
+ result.push({
78
+ event: 'stop',
79
+ offset: offset,
80
+ node: node.childNodes[i]
81
+ });
82
+ }
83
+ }
84
+ return offset;
85
+ })(node, 0);
86
+ return result;
87
+ }
88
+
89
+ function mergeStreams(stream1, stream2, value) {
90
+ var processed = 0;
91
+ var result = '';
92
+ var nodeStack = [];
93
+
94
+ function selectStream() {
95
+ if (stream1.length && stream2.length) {
96
+ if (stream1[0].offset != stream2[0].offset)
97
+ return (stream1[0].offset < stream2[0].offset) ? stream1 : stream2;
98
+ else {
99
+ /*
100
+ To avoid starting the stream just before it should stop the order is
101
+ ensured that stream1 always starts first and closes last:
102
+
103
+ if (event1 == 'start' && event2 == 'start')
104
+ return stream1;
105
+ if (event1 == 'start' && event2 == 'stop')
106
+ return stream2;
107
+ if (event1 == 'stop' && event2 == 'start')
108
+ return stream1;
109
+ if (event1 == 'stop' && event2 == 'stop')
110
+ return stream2;
111
+
112
+ ... which is collapsed to:
113
+ */
114
+ return stream2[0].event == 'start' ? stream1 : stream2;
115
+ }
116
+ } else {
117
+ return stream1.length ? stream1 : stream2;
118
+ }
119
+ }
120
+
121
+ function open(node) {
122
+ var result = '<' + node.nodeName.toLowerCase();
123
+ for (var i = 0; i < node.attributes.length; i++) {
124
+ var attribute = node.attributes[i];
125
+ result += ' ' + attribute.nodeName.toLowerCase();
126
+ if (attribute.nodeValue != undefined && attribute.nodeValue != false && attribute.nodeValue != null) {
127
+ result += '="' + escape(attribute.nodeValue) + '"';
128
+ }
129
+ }
130
+ return result + '>';
131
+ }
132
+
133
+ while (stream1.length || stream2.length) {
134
+ var current = selectStream().splice(0, 1)[0];
135
+ result += escape(value.substr(processed, current.offset - processed));
136
+ processed = current.offset;
137
+ if ( current.event == 'start') {
138
+ result += open(current.node);
139
+ nodeStack.push(current.node);
140
+ } else if (current.event == 'stop') {
141
+ var i = nodeStack.length;
142
+ do {
143
+ i--;
144
+ var node = nodeStack[i];
145
+ result += ('</' + node.nodeName.toLowerCase() + '>');
146
+ } while (node != current.node);
147
+ nodeStack.splice(i, 1);
148
+ while (i < nodeStack.length) {
149
+ result += open(nodeStack[i]);
150
+ i++;
151
+ }
152
+ }
153
+ }
154
+ result += value.substr(processed);
155
+ return result;
156
+ }
157
+
158
+ /* Initialization */
159
+
160
+ function compileModes() {
161
+
162
+ function compileMode(mode, language, is_default) {
163
+ if (mode.compiled)
164
+ return;
165
+
166
+ if (!is_default) {
167
+ mode.beginRe = langRe(language, mode.begin ? mode.begin : '\\B|\\b');
168
+ if (!mode.end && !mode.endsWithParent)
169
+ mode.end = '\\B|\\b'
170
+ if (mode.end)
171
+ mode.endRe = langRe(language, mode.end);
172
+ }
173
+ if (mode.illegal)
174
+ mode.illegalRe = langRe(language, mode.illegal);
175
+ if (mode.relevance == undefined)
176
+ mode.relevance = 1;
177
+ if (mode.keywords)
178
+ mode.lexemsRe = langRe(language, mode.lexems || hljs.IDENT_RE, true);
179
+ for (var key in mode.keywords) {
180
+ if (!mode.keywords.hasOwnProperty(key))
181
+ continue;
182
+ if (mode.keywords[key] instanceof Object)
183
+ mode.keywordGroups = mode.keywords;
184
+ else
185
+ mode.keywordGroups = {'keyword': mode.keywords};
186
+ break;
187
+ }
188
+ if (!mode.contains) {
189
+ mode.contains = [];
190
+ }
191
+ // compiled flag is set before compiling submodes to avoid self-recursion
192
+ // (see lisp where quoted_list contains quoted_list)
193
+ mode.compiled = true;
194
+ for (var i = 0; i < mode.contains.length; i++) {
195
+ compileMode(mode.contains[i], language, false);
196
+ }
197
+ if (mode.starts) {
198
+ compileMode(mode.starts, language, false);
199
+ }
200
+ }
201
+
202
+ for (var i in languages) {
203
+ if (!languages.hasOwnProperty(i))
204
+ continue;
205
+ compileMode(languages[i].defaultMode, languages[i], true);
206
+ }
207
+ }
208
+
209
+ /*
210
+ Core highlighting function. Accepts a language name and a string with the
211
+ code to highlight. Returns an object with the following properties:
212
+
213
+ - relevance (int)
214
+ - keyword_count (int)
215
+ - value (an HTML string with highlighting markup)
216
+
217
+ */
218
+ function highlight(language_name, value) {
219
+ if (!compileModes.called) {
220
+ compileModes();
221
+ compileModes.called = true;
222
+ }
223
+
224
+ function subMode(lexem, mode) {
225
+ for (var i = 0; i < mode.contains.length; i++) {
226
+ if (mode.contains[i].beginRe.test(lexem)) {
227
+ return mode.contains[i];
228
+ }
229
+ }
230
+ }
231
+
232
+ function endOfMode(mode_index, lexem) {
233
+ if (modes[mode_index].end && modes[mode_index].endRe.test(lexem))
234
+ return 1;
235
+ if (modes[mode_index].endsWithParent) {
236
+ var level = endOfMode(mode_index - 1, lexem);
237
+ return level ? level + 1 : 0;
238
+ }
239
+ return 0;
240
+ }
241
+
242
+ function isIllegal(lexem, mode) {
243
+ return mode.illegalRe && mode.illegalRe.test(lexem);
244
+ }
245
+
246
+ function compileTerminators(mode, language) {
247
+ var terminators = [];
248
+
249
+ for (var i = 0; i < mode.contains.length; i++) {
250
+ terminators.push(mode.contains[i].begin);
251
+ }
252
+
253
+ var index = modes.length - 1;
254
+ do {
255
+ if (modes[index].end) {
256
+ terminators.push(modes[index].end);
257
+ }
258
+ index--;
259
+ } while (modes[index + 1].endsWithParent);
260
+
261
+ if (mode.illegal) {
262
+ terminators.push(mode.illegal);
263
+ }
264
+
265
+ return langRe(language, '(' + terminators.join('|') + ')', true);
266
+ }
267
+
268
+ function eatModeChunk(value, index) {
269
+ var mode = modes[modes.length - 1];
270
+ if (!mode.terminators) {
271
+ mode.terminators = compileTerminators(mode, language);
272
+ }
273
+ mode.terminators.lastIndex = index;
274
+ var match = mode.terminators.exec(value);
275
+ if (match)
276
+ return [value.substr(index, match.index - index), match[0], false];
277
+ else
278
+ return [value.substr(index), '', true];
279
+ }
280
+
281
+ function keywordMatch(mode, match) {
282
+ var match_str = language.case_insensitive ? match[0].toLowerCase() : match[0]
283
+ for (var className in mode.keywordGroups) {
284
+ if (!mode.keywordGroups.hasOwnProperty(className))
285
+ continue;
286
+ var value = mode.keywordGroups[className].hasOwnProperty(match_str);
287
+ if (value)
288
+ return [className, value];
289
+ }
290
+ return false;
291
+ }
292
+
293
+ function processKeywords(buffer, mode) {
294
+ if (!mode.keywords)
295
+ return escape(buffer);
296
+ var result = '';
297
+ var last_index = 0;
298
+ mode.lexemsRe.lastIndex = 0;
299
+ var match = mode.lexemsRe.exec(buffer);
300
+ while (match) {
301
+ result += escape(buffer.substr(last_index, match.index - last_index));
302
+ var keyword_match = keywordMatch(mode, match);
303
+ if (keyword_match) {
304
+ keyword_count += keyword_match[1];
305
+ result += '<span class="'+ keyword_match[0] +'">' + escape(match[0]) + '</span>';
306
+ } else {
307
+ result += escape(match[0]);
308
+ }
309
+ last_index = mode.lexemsRe.lastIndex;
310
+ match = mode.lexemsRe.exec(buffer);
311
+ }
312
+ result += escape(buffer.substr(last_index, buffer.length - last_index));
313
+ return result;
314
+ }
315
+
316
+ function processBuffer(buffer, mode) {
317
+ if (mode.subLanguage && languages[mode.subLanguage]) {
318
+ var result = highlight(mode.subLanguage, buffer);
319
+ keyword_count += result.keyword_count;
320
+ return result.value;
321
+ } else {
322
+ return processKeywords(buffer, mode);
323
+ }
324
+ }
325
+
326
+ function startNewMode(mode, lexem) {
327
+ var markup = mode.className?'<span class="' + mode.className + '">':'';
328
+ if (mode.returnBegin) {
329
+ result += markup;
330
+ mode.buffer = '';
331
+ } else if (mode.excludeBegin) {
332
+ result += escape(lexem) + markup;
333
+ mode.buffer = '';
334
+ } else {
335
+ result += markup;
336
+ mode.buffer = lexem;
337
+ }
338
+ modes.push(mode);
339
+ relevance += mode.relevance;
340
+ }
341
+
342
+ function processModeInfo(buffer, lexem, end) {
343
+ var current_mode = modes[modes.length - 1];
344
+ if (end) {
345
+ result += processBuffer(current_mode.buffer + buffer, current_mode);
346
+ return false;
347
+ }
348
+
349
+ var new_mode = subMode(lexem, current_mode);
350
+ if (new_mode) {
351
+ result += processBuffer(current_mode.buffer + buffer, current_mode);
352
+ startNewMode(new_mode, lexem);
353
+ return new_mode.returnBegin;
354
+ }
355
+
356
+ var end_level = endOfMode(modes.length - 1, lexem);
357
+ if (end_level) {
358
+ var markup = current_mode.className?'</span>':'';
359
+ if (current_mode.returnEnd) {
360
+ result += processBuffer(current_mode.buffer + buffer, current_mode) + markup;
361
+ } else if (current_mode.excludeEnd) {
362
+ result += processBuffer(current_mode.buffer + buffer, current_mode) + markup + escape(lexem);
363
+ } else {
364
+ result += processBuffer(current_mode.buffer + buffer + lexem, current_mode) + markup;
365
+ }
366
+ while (end_level > 1) {
367
+ markup = modes[modes.length - 2].className?'</span>':'';
368
+ result += markup;
369
+ end_level--;
370
+ modes.length--;
371
+ }
372
+ var last_ended_mode = modes[modes.length - 1];
373
+ modes.length--;
374
+ modes[modes.length - 1].buffer = '';
375
+ if (last_ended_mode.starts) {
376
+ startNewMode(last_ended_mode.starts, '');
377
+ }
378
+ return current_mode.returnEnd;
379
+ }
380
+
381
+ if (isIllegal(lexem, current_mode))
382
+ throw 'Illegal';
383
+ }
384
+
385
+ var language = languages[language_name];
386
+ var modes = [language.defaultMode];
387
+ var relevance = 0;
388
+ var keyword_count = 0;
389
+ var result = '';
390
+ try {
391
+ var index = 0;
392
+ language.defaultMode.buffer = '';
393
+ do {
394
+ var mode_info = eatModeChunk(value, index);
395
+ var return_lexem = processModeInfo(mode_info[0], mode_info[1], mode_info[2]);
396
+ index += mode_info[0].length;
397
+ if (!return_lexem) {
398
+ index += mode_info[1].length;
399
+ }
400
+ } while (!mode_info[2]);
401
+ if(modes.length > 1)
402
+ throw 'Illegal';
403
+ return {
404
+ relevance: relevance,
405
+ keyword_count: keyword_count,
406
+ value: result
407
+ }
408
+ } catch (e) {
409
+ if (e == 'Illegal') {
410
+ return {
411
+ relevance: 0,
412
+ keyword_count: 0,
413
+ value: escape(value)
414
+ }
415
+ } else {
416
+ throw e;
417
+ }
418
+ }
419
+ }
420
+
421
+ /*
422
+ Highlighting with language detection. Accepts a string with the code to
423
+ highlight. Returns an object with the following properties:
424
+
425
+ - language (detected language)
426
+ - relevance (int)
427
+ - keyword_count (int)
428
+ - value (an HTML string with highlighting markup)
429
+ - second_best (object with the same structure for second-best heuristically
430
+ detected language, may be absent)
431
+
432
+ */
433
+ function highlightAuto(text) {
434
+ var result = {
435
+ keyword_count: 0,
436
+ relevance: 0,
437
+ value: escape(text)
438
+ };
439
+ var second_best = result;
440
+ for (var key in languages) {
441
+ if (!languages.hasOwnProperty(key))
442
+ continue;
443
+ var current = highlight(key, text);
444
+ current.language = key;
445
+ if (current.keyword_count + current.relevance > second_best.keyword_count + second_best.relevance) {
446
+ second_best = current;
447
+ }
448
+ if (current.keyword_count + current.relevance > result.keyword_count + result.relevance) {
449
+ second_best = result;
450
+ result = current;
451
+ }
452
+ }
453
+ if (second_best.language) {
454
+ result.second_best = second_best;
455
+ }
456
+ return result;
457
+ }
458
+
459
+ /*
460
+ Post-processing of the highlighted markup:
461
+
462
+ - replace TABs with something more useful
463
+ - replace real line-breaks with '<br>' for non-pre containers
464
+
465
+ */
466
+ function fixMarkup(value, tabReplace, useBR) {
467
+ if (tabReplace) {
468
+ value = value.replace(/^((<[^>]+>|\t)+)/gm, function(match, p1, offset, s) {
469
+ return p1.replace(/\t/g, tabReplace);
470
+ })
471
+ }
472
+ if (useBR) {
473
+ value = value.replace(/\n/g, '<br>');
474
+ }
475
+ return value;
476
+ }
477
+
478
+ /*
479
+ Applies highlighting to a DOM node containing code. Accepts a DOM node and
480
+ two optional parameters for fixMarkup.
481
+ */
482
+ function highlightBlock(block, tabReplace, useBR) {
483
+ var text = blockText(block, useBR);
484
+ var language = blockLanguage(block);
485
+ if (language == 'no-highlight')
486
+ return;
487
+ if (language) {
488
+ var result = highlight(language, text);
489
+ } else {
490
+ var result = highlightAuto(text);
491
+ language = result.language;
492
+ }
493
+ var original = nodeStream(block);
494
+ if (original.length) {
495
+ var pre = document.createElement('pre');
496
+ pre.innerHTML = result.value;
497
+ result.value = mergeStreams(original, nodeStream(pre), text);
498
+ }
499
+ result.value = fixMarkup(result.value, tabReplace, useBR);
500
+
501
+ var class_name = block.className;
502
+ if (!class_name.match('(\\s|^)(language-)?' + language + '(\\s|$)')) {
503
+ class_name = class_name ? (class_name + ' ' + language) : language;
504
+ }
505
+ if (/MSIE [678]/.test(navigator.userAgent) && block.tagName == 'CODE' && block.parentNode.tagName == 'PRE') {
506
+ // This is for backwards compatibility only. IE needs this strange
507
+ // hack becasue it cannot just cleanly replace <code> block contents.
508
+ var pre = block.parentNode;
509
+ var container = document.createElement('div');
510
+ container.innerHTML = '<pre><code>' + result.value + '</code></pre>';
511
+ block = container.firstChild.firstChild;
512
+ container.firstChild.className = pre.className;
513
+ pre.parentNode.replaceChild(container.firstChild, pre);
514
+ } else {
515
+ block.innerHTML = result.value;
516
+ }
517
+ block.className = class_name;
518
+ block.result = {
519
+ language: language,
520
+ kw: result.keyword_count,
521
+ re: result.relevance
522
+ };
523
+ if (result.second_best) {
524
+ block.second_best = {
525
+ language: result.second_best.language,
526
+ kw: result.second_best.keyword_count,
527
+ re: result.second_best.relevance
528
+ };
529
+ }
530
+ }
531
+
532
+ /*
533
+ Applies highlighting to all <pre><code>..</code></pre> blocks on a page.
534
+ */
535
+ function initHighlighting() {
536
+ if (initHighlighting.called)
537
+ return;
538
+ initHighlighting.called = true;
539
+ var pres = document.getElementsByTagName('pre');
540
+ for (var i = 0; i < pres.length; i++) {
541
+ var code = findCode(pres[i]);
542
+ if (code)
543
+ highlightBlock(code, hljs.tabReplace);
544
+ }
545
+ }
546
+
547
+ /*
548
+ Attaches highlighting to the page load event.
549
+ */
550
+ function initHighlightingOnLoad() {
551
+ if (window.addEventListener) {
552
+ window.addEventListener('DOMContentLoaded', initHighlighting, false);
553
+ window.addEventListener('load', initHighlighting, false);
554
+ } else if (window.attachEvent)
555
+ window.attachEvent('onload', initHighlighting);
556
+ else
557
+ window.onload = initHighlighting;
558
+ }
559
+
560
+ var languages = {}; // a shortcut to avoid writing "this." everywhere
561
+
562
+ /* Interface definition */
563
+
564
+ this.LANGUAGES = languages;
565
+ this.highlight = highlight;
566
+ this.highlightAuto = highlightAuto;
567
+ this.fixMarkup = fixMarkup;
568
+ this.highlightBlock = highlightBlock;
569
+ this.initHighlighting = initHighlighting;
570
+ this.initHighlightingOnLoad = initHighlightingOnLoad;
571
+
572
+ // Common regexps
573
+ this.IDENT_RE = '[a-zA-Z][a-zA-Z0-9_]*';
574
+ this.UNDERSCORE_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_]*';
575
+ this.NUMBER_RE = '\\b\\d+(\\.\\d+)?';
576
+ this.C_NUMBER_RE = '\\b(0x[A-Za-z0-9]+|\\d+(\\.\\d+)?)';
577
+ this.RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~';
578
+
579
+ // Common modes
580
+ this.BACKSLASH_ESCAPE = {
581
+ begin: '\\\\.', relevance: 0
582
+ };
583
+ this.APOS_STRING_MODE = {
584
+ className: 'string',
585
+ begin: '\'', end: '\'',
586
+ illegal: '\\n',
587
+ contains: [this.BACKSLASH_ESCAPE],
588
+ relevance: 0
589
+ };
590
+ this.QUOTE_STRING_MODE = {
591
+ className: 'string',
592
+ begin: '"', end: '"',
593
+ illegal: '\\n',
594
+ contains: [this.BACKSLASH_ESCAPE],
595
+ relevance: 0
596
+ };
597
+ this.C_LINE_COMMENT_MODE = {
598
+ className: 'comment',
599
+ begin: '//', end: '$'
600
+ };
601
+ this.C_BLOCK_COMMENT_MODE = {
602
+ className: 'comment',
603
+ begin: '/\\*', end: '\\*/'
604
+ };
605
+ this.HASH_COMMENT_MODE = {
606
+ className: 'comment',
607
+ begin: '#', end: '$'
608
+ };
609
+ this.NUMBER_MODE = {
610
+ className: 'number',
611
+ begin: this.NUMBER_RE,
612
+ relevance: 0
613
+ };
614
+ this.C_NUMBER_MODE = {
615
+ className: 'number',
616
+ begin: this.C_NUMBER_RE,
617
+ relevance: 0
618
+ };
619
+
620
+ // Utility functions
621
+ this.inherit = function(parent, obj) {
622
+ var result = {}
623
+ for (var key in parent)
624
+ result[key] = parent[key];
625
+ if (obj)
626
+ for (var key in obj)
627
+ result[key] = obj[key];
628
+ return result;
629
+ }
630
+ }();
@@ -0,0 +1,68 @@
1
+ /*
2
+ Language: 1C
3
+ Author: Yuri Ivanov <ivanov@supersoft.ru>
4
+ Contributors: Sergey Baranov <segyrn@yandex.ru>
5
+ */
6
+
7
+ hljs.LANGUAGES['1c'] = function(){
8
+ var IDENT_RE_RU = '[a-zA-Zа-яА-Я][a-zA-Z0-9_а-яА-Я]*';
9
+ var OneS_KEYWORDS = {'возврат':1,'дата':1,'для':1,'если':1,'и':1,'или':1,'иначе':1,'иначеесли':1,'исключение':1,'конецесли':1,'конецпопытки':1,'конецпроцедуры':1,'конецфункции':1,'конеццикла':1,'константа':1,'не':1,'перейти':1,'перем':1,'перечисление':1,'по':1,'пока':1,'попытка':1,'прервать':1,'продолжить':1,'процедура':1,'строка':1,'тогда':1,'фс':1,'функция':1,'цикл':1,'число':1,'экспорт':1};
10
+ var OneS_BUILT_IN = {'ansitooem':1,'oemtoansi':1,'ввестивидсубконто':1,'ввестидату':1,'ввестизначение':1,'ввестиперечисление':1,'ввестипериод':1,'ввестиплансчетов':1,'ввестистроку':1,'ввестичисло':1,'вопрос':1,'восстановитьзначение':1,'врег':1,'выбранныйплансчетов':1,'вызватьисключение':1,'датагод':1,'датамесяц':1,'датачисло':1,'добавитьмесяц':1,'завершитьработусистемы':1,'заголовоксистемы':1,'записьжурналарегистрации':1,'запуститьприложение':1,'зафиксироватьтранзакцию':1,'значениевстроку':1,'значениевстрокувнутр':1,'значениевфайл':1,'значениеизстроки':1,'значениеизстрокивнутр':1,'значениеизфайла':1,'имякомпьютера':1,'имяпользователя':1,'каталогвременныхфайлов':1,'каталогиб':1,'каталогпользователя':1,'каталогпрограммы':1,'кодсимв':1,'командасистемы':1,'конгода':1,'конецпериодаби':1,'конецрассчитанногопериодаби':1,'конецстандартногоинтервала':1,'конквартала':1,'конмесяца':1,'коннедели':1,'лев':1,'лог':1,'лог10':1,'макс':1,'максимальноеколичествосубконто':1,'мин':1,'монопольныйрежим':1,'названиеинтерфейса':1,'названиенабораправ':1,'назначитьвид':1,'назначитьсчет':1,'найти':1,'найтипомеченныенаудаление':1,'найтиссылки':1,'началопериодаби':1,'началостандартногоинтервала':1,'начатьтранзакцию':1,'начгода':1,'начквартала':1,'начмесяца':1,'начнедели':1,'номерднягода':1,'номерднянедели':1,'номернеделигода':1,'нрег':1,'обработкаожидания':1,'окр':1,'описаниеошибки':1,'основнойжурналрасчетов':1,'основнойплансчетов':1,'основнойязык':1,'открытьформу':1,'открытьформумодально':1,'отменитьтранзакцию':1,'очиститьокносообщений':1,'периодстр':1,'полноеимяпользователя':1,'получитьвремята':1,'получитьдатута':1,'получитьдокументта':1,'получитьзначенияотбора':1,'получитьпозициюта':1,'получитьпустоезначение':1,'получитьта':1,'прав':1,'праводоступа':1,'предупреждение':1,'префиксавтонумерации':1,'пустаястрока':1,'пустоезначение':1,'рабочаядаттьпустоезначение':1,'получитьта':1,'прав':1,'праводоступа':1,'предупреждение':1,'префиксавтонумерации':1,'пустаястрока':1,'пустоезначение':1,'рабочаядата':1,'разделительстраниц':1,'разделительстрок':1,'разм':1,'разобратьпозициюдокумента':1,'рассчитатьрегистрына':1,'рассчитатьрегистрыпо':1,'сигнал':1,'симв':1,'символтабуляции':1,'создатьобъект':1,'сокрл':1,'сокрлп':1,'сокрп':1,' сообщить':1,'состояние':1,'сохранитьзначение':1,'сред':1,'статусвозврата':1,'стрдлина':1,'стрзаменить':1,'стрколичествострок':1,'стрполучитьстроку':1,' стрчисловхождений':1,'сформироватьпозициюдокумента':1,'счетпокоду':1,'текущаядата':1,'текущеевремя':1,'типзначения':1,'типзначениястр':1,'удалитьобъекты':1,'установитьтана':1,'установитьтапо':1,'фиксшаблон':1,'формат':1,'цел':1,'шаблон':1};
11
+ var DQUOTE = {className: 'dquote', begin: '""'};
12
+ var STR_START = {
13
+ className: 'string',
14
+ begin: '"', end: '"|$',
15
+ contains: [DQUOTE],
16
+ relevance: 0
17
+ };
18
+ var STR_CONT = {
19
+ className: 'string',
20
+ begin: '\\|', end: '"|$',
21
+ contains: [DQUOTE]
22
+ };
23
+
24
+ return {
25
+ case_insensitive: true,
26
+ defaultMode: {
27
+ lexems: IDENT_RE_RU,
28
+ keywords: {'keyword':OneS_KEYWORDS,'built_in':OneS_BUILT_IN},
29
+ contains: [
30
+ hljs.C_LINE_COMMENT_MODE,
31
+ hljs.NUMBER_MODE,
32
+ STR_START, STR_CONT,
33
+ {
34
+ className: 'function',
35
+ begin: '(процедура|функция)', end: '$',
36
+ lexems: IDENT_RE_RU,
37
+ keywords: {'процедура': 1, 'экспорт': 1, 'функция': 1},
38
+ contains: [
39
+ {className: 'title', begin: IDENT_RE_RU},
40
+ {
41
+ className: 'tail',
42
+ endsWithParent: true,
43
+ contains: [
44
+ {
45
+ className: 'params',
46
+ begin: '\\(', end: '\\)',
47
+ lexems: IDENT_RE_RU,
48
+ keywords: {'знач':1},
49
+ contains: [STR_START, STR_CONT]
50
+ },
51
+ {
52
+ className: 'export',
53
+ begin: 'экспорт', endsWithParent: true,
54
+ lexems: IDENT_RE_RU,
55
+ keywords: {'экспорт': 1},
56
+ contains: [hljs.C_LINE_COMMENT_MODE]
57
+ }
58
+ ]
59
+ },
60
+ hljs.C_LINE_COMMENT_MODE
61
+ ]
62
+ },
63
+ {className: 'preprocessor', begin: '#', end: '$'},
64
+ {className: 'date', begin: '\'\\d{2}\\.\\d{2}\\.(\\d{2}|\\d{4})\''}
65
+ ]
66
+ }
67
+ };
68
+ }();