highlight_js-rails 0.0.2 → 7.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/AUTHORS.en.txt +20 -2
  2. data/AUTHORS.ru.txt +20 -2
  3. data/classref.txt +122 -6
  4. data/lib/highlight_js/version.rb +1 -1
  5. data/vendor/assets/images/highlight_js/pojoaque.jpg +0 -0
  6. data/vendor/assets/javascripts/highlight_js/highlight.js +116 -80
  7. data/vendor/assets/javascripts/highlight_js/languages/1c.js +34 -8
  8. data/vendor/assets/javascripts/highlight_js/languages/actionscript.js +85 -0
  9. data/vendor/assets/javascripts/highlight_js/languages/apache.js +96 -409
  10. data/vendor/assets/javascripts/highlight_js/languages/avrasm.js +53 -66
  11. data/vendor/assets/javascripts/highlight_js/languages/axapta.js +41 -38
  12. data/vendor/assets/javascripts/highlight_js/languages/bash.js +19 -16
  13. data/vendor/assets/javascripts/highlight_js/languages/clojure.js +105 -0
  14. data/vendor/assets/javascripts/highlight_js/languages/cmake.js +33 -17
  15. data/vendor/assets/javascripts/highlight_js/languages/coffeescript.js +112 -0
  16. data/vendor/assets/javascripts/highlight_js/languages/cpp.js +26 -37
  17. data/vendor/assets/javascripts/highlight_js/languages/cs.js +46 -34
  18. data/vendor/assets/javascripts/highlight_js/languages/css.js +6 -9
  19. data/vendor/assets/javascripts/highlight_js/languages/d.js +269 -0
  20. data/vendor/assets/javascripts/highlight_js/languages/delphi.js +20 -11
  21. data/vendor/assets/javascripts/highlight_js/languages/diff.js +60 -58
  22. data/vendor/assets/javascripts/highlight_js/languages/django.js +23 -5
  23. data/vendor/assets/javascripts/highlight_js/languages/dos.js +31 -23
  24. data/vendor/assets/javascripts/highlight_js/languages/erlang-repl.js +52 -76
  25. data/vendor/assets/javascripts/highlight_js/languages/erlang.js +27 -64
  26. data/vendor/assets/javascripts/highlight_js/languages/glsl.js +101 -0
  27. data/vendor/assets/javascripts/highlight_js/languages/go.js +14 -25
  28. data/vendor/assets/javascripts/highlight_js/languages/haskell.js +34 -21
  29. data/vendor/assets/javascripts/highlight_js/languages/http.js +41 -0
  30. data/vendor/assets/javascripts/highlight_js/languages/ini.js +30 -28
  31. data/vendor/assets/javascripts/highlight_js/languages/java.js +46 -40
  32. data/vendor/assets/javascripts/highlight_js/languages/javascript.js +55 -49
  33. data/vendor/assets/javascripts/highlight_js/languages/json.js +44 -0
  34. data/vendor/assets/javascripts/highlight_js/languages/lisp.js +27 -26
  35. data/vendor/assets/javascripts/highlight_js/languages/lua.js +31 -39
  36. data/vendor/assets/javascripts/highlight_js/languages/markdown.js +87 -0
  37. data/vendor/assets/javascripts/highlight_js/languages/matlab.js +64 -0
  38. data/vendor/assets/javascripts/highlight_js/languages/mel.js +232 -34
  39. data/vendor/assets/javascripts/highlight_js/languages/nginx.js +85 -207
  40. data/vendor/assets/javascripts/highlight_js/languages/objectivec.js +33 -37
  41. data/vendor/assets/javascripts/highlight_js/languages/parser3.js +10 -10
  42. data/vendor/assets/javascripts/highlight_js/languages/perl.js +50 -22
  43. data/vendor/assets/javascripts/highlight_js/languages/php.js +106 -49
  44. data/vendor/assets/javascripts/highlight_js/languages/profile.js +44 -42
  45. data/vendor/assets/javascripts/highlight_js/languages/python.js +59 -46
  46. data/vendor/assets/javascripts/highlight_js/languages/r.js +82 -0
  47. data/vendor/assets/javascripts/highlight_js/languages/rib.js +34 -0
  48. data/vendor/assets/javascripts/highlight_js/languages/rsl.js +46 -0
  49. data/vendor/assets/javascripts/highlight_js/languages/ruby.js +96 -107
  50. data/vendor/assets/javascripts/highlight_js/languages/rust.js +62 -0
  51. data/vendor/assets/javascripts/highlight_js/languages/scala.js +10 -7
  52. data/vendor/assets/javascripts/highlight_js/languages/smalltalk.js +3 -3
  53. data/vendor/assets/javascripts/highlight_js/languages/sql.js +61 -85
  54. data/vendor/assets/javascripts/highlight_js/languages/tex.js +4 -6
  55. data/vendor/assets/javascripts/highlight_js/languages/vala.js +62 -68
  56. data/vendor/assets/javascripts/highlight_js/languages/vbscript.js +41 -23
  57. data/vendor/assets/javascripts/highlight_js/languages/vhdl.js +45 -24
  58. data/vendor/assets/javascripts/highlight_js/languages/xml.js +13 -9
  59. data/vendor/assets/stylesheets/highlight_js/arta.css +15 -11
  60. data/vendor/assets/stylesheets/highlight_js/ascetic.css +8 -3
  61. data/vendor/assets/stylesheets/highlight_js/{brown_paper.css.erb → brown_paper.scss} +11 -14
  62. data/vendor/assets/stylesheets/highlight_js/dark.css +10 -12
  63. data/vendor/assets/stylesheets/highlight_js/default.css +27 -16
  64. data/vendor/assets/stylesheets/highlight_js/far.css +14 -21
  65. data/vendor/assets/stylesheets/highlight_js/github.css +14 -12
  66. data/vendor/assets/stylesheets/highlight_js/googlecode.css +144 -0
  67. data/vendor/assets/stylesheets/highlight_js/idea.css +7 -4
  68. data/vendor/assets/stylesheets/highlight_js/ir_black.css +9 -14
  69. data/vendor/assets/stylesheets/highlight_js/magula.css +8 -7
  70. data/vendor/assets/stylesheets/highlight_js/monokai.css +112 -0
  71. data/vendor/assets/stylesheets/highlight_js/pojoaque.scss +104 -0
  72. data/vendor/assets/stylesheets/highlight_js/rainbow.css +114 -0
  73. data/vendor/assets/stylesheets/highlight_js/{school_book.css.erb → school_book.scss} +11 -13
  74. data/vendor/assets/stylesheets/highlight_js/solarized_dark.css +10 -18
  75. data/vendor/assets/stylesheets/highlight_js/solarized_light.css +10 -18
  76. data/vendor/assets/stylesheets/highlight_js/sunburst.css +8 -7
  77. data/vendor/assets/stylesheets/highlight_js/tomorrow-night-blue.css +42 -0
  78. data/vendor/assets/stylesheets/highlight_js/tomorrow-night-bright.css +41 -0
  79. data/vendor/assets/stylesheets/highlight_js/tomorrow-night-eighties.css +41 -0
  80. data/vendor/assets/stylesheets/highlight_js/tomorrow-night.css +42 -0
  81. data/vendor/assets/stylesheets/highlight_js/tomorrow.css +39 -0
  82. data/vendor/assets/stylesheets/highlight_js/vs.css +8 -7
  83. data/vendor/assets/stylesheets/highlight_js/xcode.css +154 -0
  84. data/vendor/assets/stylesheets/highlight_js/zenburn.css +9 -11
  85. metadata +42 -8
  86. data/vendor/assets/javascripts/highlight_js/languages/renderman.js +0 -230
data/AUTHORS.en.txt CHANGED
@@ -21,7 +21,7 @@ Contributors:
21
21
  - MajestiC <majestic2k@gmail.com>
22
22
  - Vasily Polovnyov <vast@whiteants.net>
23
23
  - Vladimir Epifanov <voldmar@voldmar.ru>
24
- - Alexander Makarov (http://rmcreative.ru/)
24
+ - Alexander Makarov <sam@rmcreative.ru>
25
25
  - Vah <vahtenberg@gmail.com>
26
26
  - Shuen-Huei Guan <drake.guan@gmail.com>
27
27
  - Jason Diamond <jason@diamond.name>
@@ -35,7 +35,7 @@ Contributors:
35
35
  - Vladimir Moskva <vladmos@gmail.com>
36
36
  - Loren Segal <lsegal@soen.ca>
37
37
  - Andrew Fedorov <dmmdrs@mail.ru>
38
- - Igor Kalnitsky <igor.kalnitsky@gmail.com>
38
+ - Igor Kalnitsky <igor@kalnitsky.org>
39
39
  - Jeremy Hull <sourdrums@gmail.com>
40
40
  - Valerii Hiora <valerii.hiora@gmail.com>
41
41
  - Nikolay Zakharov <nikolay.desh@gmail.com>
@@ -44,3 +44,21 @@ Contributors:
44
44
  - Antono Vasiljev <self@antono.info>
45
45
  - Stephan Kountso <steplg@gmail.com>
46
46
  - pumbur <pumbur@pumbur.net>
47
+ - John Crepezzi <john.crepezzi@gmail.com>
48
+ - Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>
49
+ - Alexander Myadzel <myadzel@gmail.com>
50
+ - Evgeny Stepanischev <imbolk@gmail.com>
51
+ - Dmytrii Nagirniak <dnagir@gmail.com>
52
+ - Oleg Efimov <efimovov@gmail.com>
53
+ - Luigi Maselli <grigio.org@gmail.com>
54
+ - Denis Bardadym <bardadymchik@gmail.com>
55
+ - Aahan Krish <geekpanth3r@gmail.com>
56
+ - Ilya Baryshev <baryshev@gmail.com>
57
+ - Aleksandar Ruzicic <aleksandar@ruzicic.info>
58
+ - Joe Cheng <joe@rstudio.org>
59
+ - Angel G. Olloqui <angelgarcia.mail@gmail.com>
60
+ - Jason Tate <adminz@web-cms-designs.com>
61
+ - Sergey Tikhomirov <me@stikhomirov.com>
62
+ - Marc Fornos <marc.fornos@gmail.com>
63
+ - Yoshihide Jimbo <yjimbo@gmail.com>
64
+ - Casey Duncan <casey.duncan@gmail.com>
data/AUTHORS.ru.txt CHANGED
@@ -21,7 +21,7 @@ URL: http://softwaremaniacs.org/soft/highlight/
21
21
  - MajestiC <majestic2k@gmail.com>
22
22
  - Василий Половнёв <vast@whiteants.net>
23
23
  - Владимир Епифанов <voldmar@voldmar.ru>
24
- - Александр Макаров (http://rmcreative.ru/)
24
+ - Александр Макаров <sam@rmcreative.ru>
25
25
  - Vah <vahtenberg@gmail.com>
26
26
  - Шуэн-Хуэй Гуан <drake.guan@gmail.com>
27
27
  - Джейсон Даймонд <jason@diamond.name>
@@ -35,7 +35,7 @@ URL: http://softwaremaniacs.org/soft/highlight/
35
35
  - Владимир Москва <vladmos@gmail.com>
36
36
  - Лорен Сегал <lsegal@soen.ca>
37
37
  - Андрей Фёдоров <dmmdrs@mail.ru>
38
- - Игорь Кальницкий <igor.kalnitsky@gmail.com>
38
+ - Игорь Кальницкий <igor@kalnitsky.org>
39
39
  - Джереми Халл <sourdrums@gmail.com>
40
40
  - Валерий Хиора <valerii.hiora@gmail.com>
41
41
  - Николай Захаров <nikolay.desh@gmail.com>
@@ -44,3 +44,21 @@ URL: http://softwaremaniacs.org/soft/highlight/
44
44
  - Антоно Васильев <self@antono.info>
45
45
  - Степан Кунцьо <steplg@gmail.com>
46
46
  - pumbur <pumbur@pumbur.net>
47
+ - Джон Крепецци <john.crepezzi@gmail.com>
48
+ - Андрей Власовских <andrey.vlasovskikh@gmail.com>
49
+ - Александр Мядзель <myadzel@gmail.com>
50
+ - Евгений Степанищев <imbolk@gmail.com>
51
+ - Дмитрий Нагирняк <dnagir@gmail.com>
52
+ - Олег Ефимов <efimovov@gmail.com>
53
+ - Луиджи Мазелли <grigio.org@gmail.com>
54
+ - Денис Бардадым <bardadymchik@gmail.com>
55
+ - Аахан Криш <geekpanth3r@gmail.com>
56
+ - Илья Барышев <baryshev@gmail.com>
57
+ - Александр Ружичич <aleksandar@ruzicic.info>
58
+ - Джо Ченг <joe@rstudio.org>
59
+ - Анхель Ойоки <angelgarcia.mail@gmail.com>
60
+ - Джейсон Тейт <adminz@web-cms-designs.com>
61
+ - Сергей Тихомиров <me@stikhomirov.com>
62
+ - Марк Форнос <marc.fornos@gmail.com>
63
+ - Йошихиде Джимбо <yjimbo@gmail.com>
64
+ - Кейси Данкан <casey.duncan@gmail.com>
data/classref.txt CHANGED
@@ -39,7 +39,6 @@ Ruby ("ruby"):
39
39
  title name of a function or a class inside a header
40
40
  parent name of a parent class
41
41
  symbol symbol
42
- instancevar instance variable
43
42
 
44
43
  Perl ("perl"):
45
44
 
@@ -124,6 +123,18 @@ CSS ("css"):
124
123
  params everything between "(" and ")" within a function
125
124
  important "!important" symbol
126
125
 
126
+ Markdown ("markdown"):
127
+
128
+ header header
129
+ bullet list bullet
130
+ emphasis emphasis
131
+ strong strong emphasis
132
+ blockquote blockquote
133
+ code code
134
+ horizontal_rule horizontal rule
135
+ link_label link label
136
+ link_url link url
137
+
127
138
  Django ("django"):
128
139
 
129
140
  keyword HTML tag in HTML, default tags and default filters in templates
@@ -138,7 +149,15 @@ Django ("django"):
138
149
  filter filter from "|" till the next filter or the end of tag
139
150
  argument filter argument
140
151
 
141
- Javascript ("javascript"):
152
+ JSON ("json"):
153
+
154
+ number number
155
+ literal "true", "false" and "null"
156
+ string string value
157
+ attribute name of an object property
158
+ value value of an object property
159
+
160
+ JavaScript ("javascript"):
142
161
 
143
162
  keyword keyword
144
163
  comment comment
@@ -148,7 +167,36 @@ Javascript ("javascript"):
148
167
  regexp regular expression
149
168
  function header of a function
150
169
  title name of a function inside a header
151
- params everything inside parentheses in a function's header
170
+ params parentheses and everything inside them in a function's header
171
+
172
+ CoffeeScript ("coffeescript"):
173
+
174
+ keyword keyword
175
+ comment comment
176
+ number number
177
+ literal special literal: "true", "false" and "null"
178
+ string string
179
+ regexp regular expression
180
+ function header of a function
181
+ title name of a function variable inside a header
182
+ params parentheses and everything inside them in a function's header
183
+
184
+ ActionScript ("actionscript"):
185
+
186
+ comment comment
187
+ string string
188
+ number number
189
+ keyword keywords
190
+ literal literal
191
+ reserved reserved keyword
192
+ title name of declaration (package, class or function)
193
+ preprocessor preprocessor directive (import, include)
194
+ type type of returned value (for functions)
195
+ package package (named or not)
196
+ class class/interface
197
+ function function
198
+ param params of function
199
+ rest_arg rest argument of function
152
200
 
153
201
  VBScript ("vbscript"):
154
202
 
@@ -158,6 +206,14 @@ VBScript ("vbscript"):
158
206
  comment comment
159
207
  built_in built-in function
160
208
 
209
+ HTTP ("http"):
210
+
211
+ request first line of a request
212
+ status first line of a response
213
+ attribute header name
214
+ string header value or query string in a request line
215
+ number status code
216
+
161
217
  Lua ("lua"):
162
218
 
163
219
  keyword keyword
@@ -212,6 +268,7 @@ Objective C ("objectivec"):
212
268
  comment comment
213
269
  preprocessor preprocessor directive
214
270
  class interface/implementation, protocol and forward class declaration
271
+ variable properties and struct accesors
215
272
 
216
273
  Vala ("vala"):
217
274
 
@@ -231,6 +288,15 @@ C# ("cs"):
231
288
  comment commment
232
289
  xmlDocTag xmldoc tag ("///", "<!--", "-->", "<..>")
233
290
 
291
+ D language ("d"):
292
+
293
+ comment comment
294
+ string string constant
295
+ number number
296
+ keyword language keywords (including @attributes)
297
+ constant true false null
298
+ built_in built-in plain types (int, string etc.)
299
+
234
300
  RenderMan RSL ("rsl"):
235
301
 
236
302
  keyword keyword
@@ -291,6 +357,16 @@ Lisp ("lisp"):
291
357
  body remainder of the non-quoted list
292
358
  quoted quoted list, both "(quote .. )" and "'(..)"
293
359
 
360
+ Clojure ("clojure"):
361
+
362
+ comment comments and hints
363
+ string string
364
+ number number
365
+ collection collections
366
+ attribute :keyword
367
+ title function name (built-in or user defined)
368
+ built_in built-in function name
369
+
294
370
  Ini ("ini"):
295
371
 
296
372
  title title of a section
@@ -311,12 +387,13 @@ Apache ("apache"):
311
387
 
312
388
  Nginx ("nginx"):
313
389
 
314
- keyword keyword
390
+ title directive title
315
391
  string string
316
392
  number number
317
393
  comment comment
318
394
  built_in built-in constant
319
395
  variable $-variable
396
+ regexp regexp
320
397
 
321
398
  Diff ("diff"):
322
399
 
@@ -394,6 +471,8 @@ VHDL ("vhdl")
394
471
  string string
395
472
  comment commment
396
473
  literal signal logical value
474
+ typename typename
475
+ attribute signal attribute
397
476
 
398
477
  Parser3 ("parser3"):
399
478
 
@@ -416,13 +495,13 @@ TeX ("tex"):
416
495
  Haskell ("haskell"):
417
496
 
418
497
  keyword keyword
419
- built_in built-in typeclass/functions (Bool, Int)
420
498
  number number
421
499
  string string
422
500
  comment comment
423
501
  class type classes and other data types
424
502
  title function name
425
- label type class name
503
+ type type class name
504
+ typedef definition of types (type, newtype, data)
426
505
 
427
506
  Erlang ("erlang"):
428
507
 
@@ -435,3 +514,40 @@ Erlang ("erlang"):
435
514
  variable variable (starts with capital letter or with _)
436
515
  pp.keywords module's attribute (-attribute)
437
516
  function_name atom or atom:atom in case of function call
517
+
518
+ Rust ("rust"):
519
+
520
+ comment comment
521
+ string string
522
+ number number
523
+ keyword keyword
524
+ title name of declaration
525
+ preprocessor preprocessor directive
526
+
527
+ Matlab ("matlab"):
528
+
529
+ comment comment
530
+ string string
531
+ number number
532
+ keyword keyword
533
+ title function name
534
+ function function
535
+ param params of function
536
+
537
+ R ("r"):
538
+
539
+ comment comment
540
+ string string constant
541
+ number number
542
+ keyword language keywords (function, if) plus "structural"
543
+ functions (attach, require, setClass)
544
+ literal special literal: TRUE, FALSE, NULL, NA, etc.
545
+
546
+ OpenGL Shading Language ("glsl"):
547
+
548
+ comment comment
549
+ number number
550
+ preprocessor preprocessor directive
551
+ keyword keyword
552
+ built_in GLSL built-in functions and variables
553
+ literal true false
@@ -1,5 +1,5 @@
1
1
  module HighlightJs
2
2
  module Rails
3
- VERSION = "0.0.2"
3
+ VERSION = "7.1.0"
4
4
  end
5
5
  end
@@ -28,6 +28,8 @@ var hljs = new function() {
28
28
  }
29
29
  }
30
30
 
31
+ var is_old_IE = (typeof navigator !== 'undefined' && /MSIE [678]/.test(navigator.userAgent));
32
+
31
33
  function blockText(block, ignoreNewLines) {
32
34
  var result = '';
33
35
  for (var i = 0; i < block.childNodes.length; i++)
@@ -40,14 +42,13 @@ var hljs = new function() {
40
42
  result += '\n';
41
43
  else
42
44
  result += blockText(block.childNodes[i]);
43
- // Thank you, MSIE...
44
- if (/MSIE [678]/.test(navigator.userAgent))
45
+ if (is_old_IE)
45
46
  result = result.replace(/\r/g, '\n');
46
47
  return result;
47
48
  }
48
49
 
49
50
  function blockLanguage(block) {
50
- var classes = block.className.split(/\s+/)
51
+ var classes = block.className.split(/\s+/);
51
52
  classes = classes.concat(block.parentNode.className.split(/\s+/));
52
53
  for (var i = 0; i < classes.length; i++) {
53
54
  var class_ = classes[i].replace(/^language-/, '');
@@ -61,19 +62,19 @@ var hljs = new function() {
61
62
 
62
63
  function nodeStream(node) {
63
64
  var result = [];
64
- (function (node, offset) {
65
+ (function _nodeStream(node, offset) {
65
66
  for (var i = 0; i < node.childNodes.length; i++) {
66
67
  if (node.childNodes[i].nodeType == 3)
67
68
  offset += node.childNodes[i].nodeValue.length;
68
69
  else if (node.childNodes[i].nodeName == 'BR')
69
- offset += 1
70
- else {
70
+ offset += 1;
71
+ else if (node.childNodes[i].nodeType == 1) {
71
72
  result.push({
72
73
  event: 'start',
73
74
  offset: offset,
74
75
  node: node.childNodes[i]
75
76
  });
76
- offset = arguments.callee(node.childNodes[i], offset)
77
+ offset = _nodeStream(node.childNodes[i], offset);
77
78
  result.push({
78
79
  event: 'stop',
79
80
  offset: offset,
@@ -123,8 +124,8 @@ var hljs = new function() {
123
124
  for (var i = 0; i < node.attributes.length; i++) {
124
125
  var attribute = node.attributes[i];
125
126
  result += ' ' + attribute.nodeName.toLowerCase();
126
- if (attribute.nodeValue != undefined && attribute.nodeValue != false && attribute.nodeValue != null) {
127
- result += '="' + escape(attribute.nodeValue) + '"';
127
+ if (attribute.value !== undefined && attribute.value !== false && attribute.value !== null) {
128
+ result += '="' + escape(attribute.value) + '"';
128
129
  }
129
130
  }
130
131
  return result + '>';
@@ -138,10 +139,10 @@ var hljs = new function() {
138
139
  result += open(current.node);
139
140
  nodeStack.push(current.node);
140
141
  } else if (current.event == 'stop') {
141
- var i = nodeStack.length;
142
+ var node, i = nodeStack.length;
142
143
  do {
143
144
  i--;
144
- var node = nodeStack[i];
145
+ node = nodeStack[i];
145
146
  result += ('</' + node.nodeName.toLowerCase() + '>');
146
147
  } while (node != current.node);
147
148
  nodeStack.splice(i, 1);
@@ -151,40 +152,56 @@ var hljs = new function() {
151
152
  }
152
153
  }
153
154
  }
154
- result += value.substr(processed);
155
- return result;
155
+ return result + escape(value.substr(processed));
156
156
  }
157
157
 
158
158
  /* Initialization */
159
159
 
160
- function compileModes() {
160
+ function compileModes(language_name) {
161
161
 
162
162
  function compileMode(mode, language, is_default) {
163
163
  if (mode.compiled)
164
164
  return;
165
165
 
166
+ var keywords = []; // used later with beginWithKeyword but filled as a side-effect of keywords compilation
167
+ if (mode.keywords) {
168
+ var compiled_keywords = {};
169
+
170
+ function flatten(className, str) {
171
+ var group = str.split(' ');
172
+ for (var i = 0; i < group.length; i++) {
173
+ var pair = group[i].split('|');
174
+ compiled_keywords[pair[0]] = [className, pair[1] ? Number(pair[1]) : 1];
175
+ keywords.push(pair[0]);
176
+ }
177
+ }
178
+
179
+ mode.lexemsRe = langRe(language, mode.lexems || hljs.IDENT_RE, true);
180
+ if (typeof mode.keywords == 'string') { // string
181
+ flatten('keyword', mode.keywords)
182
+ } else {
183
+ for (var className in mode.keywords) {
184
+ if (!mode.keywords.hasOwnProperty(className))
185
+ continue;
186
+ flatten(className, mode.keywords[className]);
187
+ }
188
+ }
189
+ mode.keywords = compiled_keywords;
190
+ }
166
191
  if (!is_default) {
192
+ if (mode.beginWithKeyword) {
193
+ mode.begin = '\\b(' + keywords.join('|') + ')\\s';
194
+ }
167
195
  mode.beginRe = langRe(language, mode.begin ? mode.begin : '\\B|\\b');
168
196
  if (!mode.end && !mode.endsWithParent)
169
- mode.end = '\\B|\\b'
197
+ mode.end = '\\B|\\b';
170
198
  if (mode.end)
171
199
  mode.endRe = langRe(language, mode.end);
172
200
  }
173
201
  if (mode.illegal)
174
202
  mode.illegalRe = langRe(language, mode.illegal);
175
- if (mode.relevance == undefined)
203
+ if (mode.relevance === undefined)
176
204
  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
205
  if (!mode.contains) {
189
206
  mode.contains = [];
190
207
  }
@@ -192,20 +209,20 @@ var hljs = new function() {
192
209
  // (see lisp where quoted_list contains quoted_list)
193
210
  mode.compiled = true;
194
211
  for (var i = 0; i < mode.contains.length; i++) {
212
+ if (mode.contains[i] == 'self') {
213
+ mode.contains[i] = mode;
214
+ }
195
215
  compileMode(mode.contains[i], language, false);
196
216
  }
197
217
  if (mode.starts) {
198
218
  compileMode(mode.starts, language, false);
199
219
  }
200
220
  }
201
-
202
- for (var i in languages) {
203
- if (!languages.hasOwnProperty(i))
204
- continue;
205
- compileMode(languages[i].defaultMode, languages[i], true);
206
- }
221
+ compileMode(languages[language_name].defaultMode, languages[language_name], true);
207
222
  }
208
223
 
224
+ var compiled_languages = {};
225
+
209
226
  /*
210
227
  Core highlighting function. Accepts a language name and a string with the
211
228
  code to highlight. Returns an object with the following properties:
@@ -216,14 +233,15 @@ var hljs = new function() {
216
233
 
217
234
  */
218
235
  function highlight(language_name, value) {
219
- if (!compileModes.called) {
220
- compileModes();
221
- compileModes.called = true;
236
+ if (!compiled_languages[language_name]) {
237
+ compileModes(language_name);
238
+ compiled_languages[language_name] = true;
222
239
  }
223
240
 
224
241
  function subMode(lexem, mode) {
225
242
  for (var i = 0; i < mode.contains.length; i++) {
226
- if (mode.contains[i].beginRe.test(lexem)) {
243
+ var match = mode.contains[i].beginRe.exec(lexem);
244
+ if (match && match.index == 0) {
227
245
  return mode.contains[i];
228
246
  }
229
247
  }
@@ -240,7 +258,7 @@ var hljs = new function() {
240
258
  }
241
259
 
242
260
  function isIllegal(lexem, mode) {
243
- return mode.illegalRe && mode.illegalRe.test(lexem);
261
+ return mode.illegal && mode.illegalRe.test(lexem);
244
262
  }
245
263
 
246
264
  function compileTerminators(mode, language) {
@@ -262,69 +280,81 @@ var hljs = new function() {
262
280
  terminators.push(mode.illegal);
263
281
  }
264
282
 
265
- return langRe(language, '(' + terminators.join('|') + ')', true);
283
+ return terminators.length ? langRe(language, terminators.join('|'), true) : null;
266
284
  }
267
285
 
268
286
  function eatModeChunk(value, index) {
269
287
  var mode = modes[modes.length - 1];
270
- if (!mode.terminators) {
288
+ if (mode.terminators === undefined) {
271
289
  mode.terminators = compileTerminators(mode, language);
272
290
  }
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];
291
+ var match;
292
+ if (mode.terminators) {
293
+ mode.terminators.lastIndex = index;
294
+ match = mode.terminators.exec(value);
295
+ }
296
+ return match ? [value.substr(index, match.index - index), match[0], false] : [value.substr(index), '', true];
279
297
  }
280
298
 
281
299
  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
- }
300
+ var match_str = language.case_insensitive ? match[0].toLowerCase() : match[0];
301
+ var value = mode.keywords[match_str];
302
+ if (value && value instanceof Array)
303
+ return value;
290
304
  return false;
291
305
  }
292
306
 
293
307
  function processKeywords(buffer, mode) {
308
+ buffer = escape(buffer);
294
309
  if (!mode.keywords)
295
- return escape(buffer);
310
+ return buffer;
296
311
  var result = '';
297
312
  var last_index = 0;
298
313
  mode.lexemsRe.lastIndex = 0;
299
314
  var match = mode.lexemsRe.exec(buffer);
300
315
  while (match) {
301
- result += escape(buffer.substr(last_index, match.index - last_index));
316
+ result += buffer.substr(last_index, match.index - last_index);
302
317
  var keyword_match = keywordMatch(mode, match);
303
318
  if (keyword_match) {
304
319
  keyword_count += keyword_match[1];
305
- result += '<span class="'+ keyword_match[0] +'">' + escape(match[0]) + '</span>';
320
+ result += '<span class="'+ keyword_match[0] +'">' + match[0] + '</span>';
306
321
  } else {
307
- result += escape(match[0]);
322
+ result += match[0];
308
323
  }
309
324
  last_index = mode.lexemsRe.lastIndex;
310
325
  match = mode.lexemsRe.exec(buffer);
311
326
  }
312
- result += escape(buffer.substr(last_index, buffer.length - last_index));
313
- return result;
327
+ return result + buffer.substr(last_index);
314
328
  }
315
329
 
316
- function processBuffer(buffer, mode) {
317
- if (mode.subLanguage && languages[mode.subLanguage]) {
318
- var result = highlight(mode.subLanguage, buffer);
330
+ function processSubLanguage(buffer, mode) {
331
+ var result;
332
+ if (mode.subLanguage == '') {
333
+ result = highlightAuto(buffer);
334
+ } else {
335
+ result = highlight(mode.subLanguage, buffer);
336
+ }
337
+ // Counting embedded language score towards the host language may be disabled
338
+ // with zeroing the containing mode relevance. Usecase in point is Markdown that
339
+ // allows XML everywhere and makes every XML snippet to have a much larger Markdown
340
+ // score.
341
+ if (mode.relevance > 0) {
319
342
  keyword_count += result.keyword_count;
320
- return result.value;
343
+ relevance += result.relevance;
344
+ }
345
+ return '<span class="' + result.language + '">' + result.value + '</span>';
346
+ }
347
+
348
+ function processBuffer(buffer, mode) {
349
+ if (mode.subLanguage && languages[mode.subLanguage] || mode.subLanguage == '') {
350
+ return processSubLanguage(buffer, mode);
321
351
  } else {
322
352
  return processKeywords(buffer, mode);
323
353
  }
324
354
  }
325
355
 
326
356
  function startNewMode(mode, lexem) {
327
- var markup = mode.className?'<span class="' + mode.className + '">':'';
357
+ var markup = mode.className? '<span class="' + mode.className + '">': '';
328
358
  if (mode.returnBegin) {
329
359
  result += markup;
330
360
  mode.buffer = '';
@@ -388,30 +418,29 @@ var hljs = new function() {
388
418
  var keyword_count = 0;
389
419
  var result = '';
390
420
  try {
391
- var index = 0;
421
+ var mode_info, index = 0;
392
422
  language.defaultMode.buffer = '';
393
423
  do {
394
- var mode_info = eatModeChunk(value, index);
424
+ mode_info = eatModeChunk(value, index);
395
425
  var return_lexem = processModeInfo(mode_info[0], mode_info[1], mode_info[2]);
396
426
  index += mode_info[0].length;
397
427
  if (!return_lexem) {
398
428
  index += mode_info[1].length;
399
429
  }
400
430
  } while (!mode_info[2]);
401
- if(modes.length > 1)
402
- throw 'Illegal';
403
431
  return {
404
432
  relevance: relevance,
405
433
  keyword_count: keyword_count,
406
- value: result
407
- }
434
+ value: result,
435
+ language: language_name
436
+ };
408
437
  } catch (e) {
409
438
  if (e == 'Illegal') {
410
439
  return {
411
440
  relevance: 0,
412
441
  keyword_count: 0,
413
442
  value: escape(value)
414
- }
443
+ };
415
444
  } else {
416
445
  throw e;
417
446
  }
@@ -467,7 +496,7 @@ var hljs = new function() {
467
496
  if (tabReplace) {
468
497
  value = value.replace(/^((<[^>]+>|\t)+)/gm, function(match, p1, offset, s) {
469
498
  return p1.replace(/\t/g, tabReplace);
470
- })
499
+ });
471
500
  }
472
501
  if (useBR) {
473
502
  value = value.replace(/\n/g, '<br>');
@@ -482,17 +511,18 @@ var hljs = new function() {
482
511
  function highlightBlock(block, tabReplace, useBR) {
483
512
  var text = blockText(block, useBR);
484
513
  var language = blockLanguage(block);
514
+ var result, pre;
485
515
  if (language == 'no-highlight')
486
516
  return;
487
517
  if (language) {
488
- var result = highlight(language, text);
518
+ result = highlight(language, text);
489
519
  } else {
490
- var result = highlightAuto(text);
520
+ result = highlightAuto(text);
491
521
  language = result.language;
492
522
  }
493
523
  var original = nodeStream(block);
494
524
  if (original.length) {
495
- var pre = document.createElement('pre');
525
+ pre = document.createElement('pre');
496
526
  pre.innerHTML = result.value;
497
527
  result.value = mergeStreams(original, nodeStream(pre), text);
498
528
  }
@@ -502,10 +532,10 @@ var hljs = new function() {
502
532
  if (!class_name.match('(\\s|^)(language-)?' + language + '(\\s|$)')) {
503
533
  class_name = class_name ? (class_name + ' ' + language) : language;
504
534
  }
505
- if (/MSIE [678]/.test(navigator.userAgent) && block.tagName == 'CODE' && block.parentNode.tagName == 'PRE') {
535
+ if (is_old_IE && block.tagName == 'CODE' && block.parentNode.tagName == 'PRE') {
506
536
  // This is for backwards compatibility only. IE needs this strange
507
537
  // hack becasue it cannot just cleanly replace <code> block contents.
508
- var pre = block.parentNode;
538
+ pre = block.parentNode;
509
539
  var container = document.createElement('div');
510
540
  container.innerHTML = '<pre><code>' + result.value + '</code></pre>';
511
541
  block = container.firstChild.firstChild;
@@ -573,12 +603,13 @@ var hljs = new function() {
573
603
  this.IDENT_RE = '[a-zA-Z][a-zA-Z0-9_]*';
574
604
  this.UNDERSCORE_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_]*';
575
605
  this.NUMBER_RE = '\\b\\d+(\\.\\d+)?';
576
- this.C_NUMBER_RE = '\\b(0x[A-Za-z0-9]+|\\d+(\\.\\d+)?)';
606
+ this.C_NUMBER_RE = '(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)'; // 0x..., 0..., decimal, float
607
+ this.BINARY_NUMBER_RE = '\\b(0b[01]+)'; // 0b...
577
608
  this.RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~';
578
609
 
579
610
  // Common modes
580
611
  this.BACKSLASH_ESCAPE = {
581
- begin: '\\\\.', relevance: 0
612
+ begin: '\\\\[\\s\\S]', relevance: 0
582
613
  };
583
614
  this.APOS_STRING_MODE = {
584
615
  className: 'string',
@@ -616,6 +647,11 @@ var hljs = new function() {
616
647
  begin: this.C_NUMBER_RE,
617
648
  relevance: 0
618
649
  };
650
+ this.BINARY_NUMBER_MODE = {
651
+ className: 'number',
652
+ begin: this.BINARY_NUMBER_RE,
653
+ relevance: 0
654
+ };
619
655
 
620
656
  // Utility functions
621
657
  this.inherit = function(parent, obj) {