rougegal 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (311) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +26 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +17 -0
  5. data/lib/rouge/cli.rb +394 -0
  6. data/lib/rouge/demos/abap +6 -0
  7. data/lib/rouge/demos/actionscript +4 -0
  8. data/lib/rouge/demos/apache +21 -0
  9. data/lib/rouge/demos/apiblueprint +33 -0
  10. data/lib/rouge/demos/applescript +2 -0
  11. data/lib/rouge/demos/awk +4 -0
  12. data/lib/rouge/demos/biml +38 -0
  13. data/lib/rouge/demos/bsl +7 -0
  14. data/lib/rouge/demos/c +8 -0
  15. data/lib/rouge/demos/ceylon +7 -0
  16. data/lib/rouge/demos/cfscript +18 -0
  17. data/lib/rouge/demos/clojure +5 -0
  18. data/lib/rouge/demos/cmake +7 -0
  19. data/lib/rouge/demos/coffeescript +5 -0
  20. data/lib/rouge/demos/common_lisp +1 -0
  21. data/lib/rouge/demos/conf +4 -0
  22. data/lib/rouge/demos/console +6 -0
  23. data/lib/rouge/demos/coq +13 -0
  24. data/lib/rouge/demos/cpp +8 -0
  25. data/lib/rouge/demos/csharp +5 -0
  26. data/lib/rouge/demos/css +4 -0
  27. data/lib/rouge/demos/d +16 -0
  28. data/lib/rouge/demos/dart +6 -0
  29. data/lib/rouge/demos/diff +7 -0
  30. data/lib/rouge/demos/digdag +19 -0
  31. data/lib/rouge/demos/docker +9 -0
  32. data/lib/rouge/demos/dot +5 -0
  33. data/lib/rouge/demos/eiffel +30 -0
  34. data/lib/rouge/demos/elixir +1 -0
  35. data/lib/rouge/demos/erb +1 -0
  36. data/lib/rouge/demos/erlang +7 -0
  37. data/lib/rouge/demos/factor +5 -0
  38. data/lib/rouge/demos/fortran +22 -0
  39. data/lib/rouge/demos/fsharp +12 -0
  40. data/lib/rouge/demos/gal +22 -0
  41. data/lib/rouge/demos/gherkin +17 -0
  42. data/lib/rouge/demos/glsl +14 -0
  43. data/lib/rouge/demos/go +7 -0
  44. data/lib/rouge/demos/gradle +10 -0
  45. data/lib/rouge/demos/graphql +17 -0
  46. data/lib/rouge/demos/groovy +9 -0
  47. data/lib/rouge/demos/haml +5 -0
  48. data/lib/rouge/demos/handlebars +7 -0
  49. data/lib/rouge/demos/haskell +6 -0
  50. data/lib/rouge/demos/html +8 -0
  51. data/lib/rouge/demos/http +14 -0
  52. data/lib/rouge/demos/hylang +10 -0
  53. data/lib/rouge/demos/idlang +8 -0
  54. data/lib/rouge/demos/igorpro +9 -0
  55. data/lib/rouge/demos/ini +4 -0
  56. data/lib/rouge/demos/io +11 -0
  57. data/lib/rouge/demos/irb +4 -0
  58. data/lib/rouge/demos/irb_output +2 -0
  59. data/lib/rouge/demos/java +5 -0
  60. data/lib/rouge/demos/javascript +1 -0
  61. data/lib/rouge/demos/jinja +9 -0
  62. data/lib/rouge/demos/json +1 -0
  63. data/lib/rouge/demos/json-doc +1 -0
  64. data/lib/rouge/demos/jsonnet +28 -0
  65. data/lib/rouge/demos/jsx +17 -0
  66. data/lib/rouge/demos/julia +11 -0
  67. data/lib/rouge/demos/kotlin +3 -0
  68. data/lib/rouge/demos/lasso +12 -0
  69. data/lib/rouge/demos/liquid +11 -0
  70. data/lib/rouge/demos/literate_coffeescript +3 -0
  71. data/lib/rouge/demos/literate_haskell +7 -0
  72. data/lib/rouge/demos/llvm +20 -0
  73. data/lib/rouge/demos/lua +12 -0
  74. data/lib/rouge/demos/make +6 -0
  75. data/lib/rouge/demos/markdown +4 -0
  76. data/lib/rouge/demos/matlab +6 -0
  77. data/lib/rouge/demos/moonscript +16 -0
  78. data/lib/rouge/demos/mosel +10 -0
  79. data/lib/rouge/demos/mxml +22 -0
  80. data/lib/rouge/demos/nasm +26 -0
  81. data/lib/rouge/demos/nginx +5 -0
  82. data/lib/rouge/demos/nim +27 -0
  83. data/lib/rouge/demos/objective_c +18 -0
  84. data/lib/rouge/demos/ocaml +12 -0
  85. data/lib/rouge/demos/pascal +14 -0
  86. data/lib/rouge/demos/perl +5 -0
  87. data/lib/rouge/demos/php +3 -0
  88. data/lib/rouge/demos/plaintext +1 -0
  89. data/lib/rouge/demos/plist +142 -0
  90. data/lib/rouge/demos/pony +17 -0
  91. data/lib/rouge/demos/powershell +49 -0
  92. data/lib/rouge/demos/praat +26 -0
  93. data/lib/rouge/demos/prolog +9 -0
  94. data/lib/rouge/demos/prometheus +9 -0
  95. data/lib/rouge/demos/properties +7 -0
  96. data/lib/rouge/demos/protobuf +5 -0
  97. data/lib/rouge/demos/puppet +6 -0
  98. data/lib/rouge/demos/python +6 -0
  99. data/lib/rouge/demos/q +2 -0
  100. data/lib/rouge/demos/qml +9 -0
  101. data/lib/rouge/demos/r +8 -0
  102. data/lib/rouge/demos/racket +24 -0
  103. data/lib/rouge/demos/ruby +9 -0
  104. data/lib/rouge/demos/rust +12 -0
  105. data/lib/rouge/demos/sass +3 -0
  106. data/lib/rouge/demos/scala +3 -0
  107. data/lib/rouge/demos/scheme +4 -0
  108. data/lib/rouge/demos/scss +5 -0
  109. data/lib/rouge/demos/sed +4 -0
  110. data/lib/rouge/demos/shell +2 -0
  111. data/lib/rouge/demos/sieve +10 -0
  112. data/lib/rouge/demos/slim +17 -0
  113. data/lib/rouge/demos/smalltalk +6 -0
  114. data/lib/rouge/demos/smarty +12 -0
  115. data/lib/rouge/demos/sml +4 -0
  116. data/lib/rouge/demos/sql +1 -0
  117. data/lib/rouge/demos/swift +5 -0
  118. data/lib/rouge/demos/tap +5 -0
  119. data/lib/rouge/demos/tcl +1 -0
  120. data/lib/rouge/demos/tex +1 -0
  121. data/lib/rouge/demos/toml +9 -0
  122. data/lib/rouge/demos/tsx +17 -0
  123. data/lib/rouge/demos/tulip +13 -0
  124. data/lib/rouge/demos/turtle +26 -0
  125. data/lib/rouge/demos/twig +9 -0
  126. data/lib/rouge/demos/typescript +1 -0
  127. data/lib/rouge/demos/vala +8 -0
  128. data/lib/rouge/demos/vb +4 -0
  129. data/lib/rouge/demos/verilog +27 -0
  130. data/lib/rouge/demos/vhdl +23 -0
  131. data/lib/rouge/demos/viml +14 -0
  132. data/lib/rouge/demos/vue +11 -0
  133. data/lib/rouge/demos/wollok +11 -0
  134. data/lib/rouge/demos/xml +2 -0
  135. data/lib/rouge/demos/yaml +4 -0
  136. data/lib/rouge/formatter.rb +75 -0
  137. data/lib/rouge/formatters/html.rb +37 -0
  138. data/lib/rouge/formatters/html_inline.rb +30 -0
  139. data/lib/rouge/formatters/html_legacy.rb +44 -0
  140. data/lib/rouge/formatters/html_linewise.rb +27 -0
  141. data/lib/rouge/formatters/html_pygments.rb +16 -0
  142. data/lib/rouge/formatters/html_table.rb +61 -0
  143. data/lib/rouge/formatters/null.rb +19 -0
  144. data/lib/rouge/formatters/terminal256.rb +172 -0
  145. data/lib/rouge/guesser.rb +55 -0
  146. data/lib/rouge/guessers/filename.rb +25 -0
  147. data/lib/rouge/guessers/glob_mapping.rb +46 -0
  148. data/lib/rouge/guessers/mimetype.rb +14 -0
  149. data/lib/rouge/guessers/modeline.rb +42 -0
  150. data/lib/rouge/guessers/source.rb +39 -0
  151. data/lib/rouge/lexer.rb +452 -0
  152. data/lib/rouge/lexers/abap.rb +238 -0
  153. data/lib/rouge/lexers/actionscript.rb +195 -0
  154. data/lib/rouge/lexers/apache.rb +71 -0
  155. data/lib/rouge/lexers/apache/keywords.yml +764 -0
  156. data/lib/rouge/lexers/apiblueprint.rb +51 -0
  157. data/lib/rouge/lexers/apple_script.rb +367 -0
  158. data/lib/rouge/lexers/awk.rb +161 -0
  159. data/lib/rouge/lexers/biml.rb +41 -0
  160. data/lib/rouge/lexers/bsl.rb +81 -0
  161. data/lib/rouge/lexers/c.rb +217 -0
  162. data/lib/rouge/lexers/ceylon.rb +123 -0
  163. data/lib/rouge/lexers/cfscript.rb +153 -0
  164. data/lib/rouge/lexers/clojure.rb +112 -0
  165. data/lib/rouge/lexers/cmake.rb +206 -0
  166. data/lib/rouge/lexers/coffeescript.rb +174 -0
  167. data/lib/rouge/lexers/common_lisp.rb +345 -0
  168. data/lib/rouge/lexers/conf.rb +24 -0
  169. data/lib/rouge/lexers/console.rb +136 -0
  170. data/lib/rouge/lexers/coq.rb +191 -0
  171. data/lib/rouge/lexers/cpp.rb +78 -0
  172. data/lib/rouge/lexers/csharp.rb +114 -0
  173. data/lib/rouge/lexers/css.rb +273 -0
  174. data/lib/rouge/lexers/d.rb +176 -0
  175. data/lib/rouge/lexers/dart.rb +104 -0
  176. data/lib/rouge/lexers/diff.rb +31 -0
  177. data/lib/rouge/lexers/digdag.rb +72 -0
  178. data/lib/rouge/lexers/docker.rb +50 -0
  179. data/lib/rouge/lexers/dot.rb +68 -0
  180. data/lib/rouge/lexers/eiffel.rb +65 -0
  181. data/lib/rouge/lexers/elixir.rb +133 -0
  182. data/lib/rouge/lexers/erb.rb +56 -0
  183. data/lib/rouge/lexers/erlang.rb +118 -0
  184. data/lib/rouge/lexers/factor.rb +302 -0
  185. data/lib/rouge/lexers/fortran.rb +170 -0
  186. data/lib/rouge/lexers/fsharp.rb +118 -0
  187. data/lib/rouge/lexers/gal.rb +50 -0
  188. data/lib/rouge/lexers/gherkin.rb +137 -0
  189. data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
  190. data/lib/rouge/lexers/glsl.rb +135 -0
  191. data/lib/rouge/lexers/go.rb +178 -0
  192. data/lib/rouge/lexers/gradle.rb +37 -0
  193. data/lib/rouge/lexers/graphql.rb +243 -0
  194. data/lib/rouge/lexers/groovy.rb +112 -0
  195. data/lib/rouge/lexers/haml.rb +233 -0
  196. data/lib/rouge/lexers/handlebars.rb +79 -0
  197. data/lib/rouge/lexers/haskell.rb +183 -0
  198. data/lib/rouge/lexers/html.rb +138 -0
  199. data/lib/rouge/lexers/http.rb +80 -0
  200. data/lib/rouge/lexers/hylang.rb +93 -0
  201. data/lib/rouge/lexers/idlang.rb +316 -0
  202. data/lib/rouge/lexers/igorpro.rb +407 -0
  203. data/lib/rouge/lexers/ini.rb +57 -0
  204. data/lib/rouge/lexers/io.rb +68 -0
  205. data/lib/rouge/lexers/irb.rb +66 -0
  206. data/lib/rouge/lexers/java.rb +87 -0
  207. data/lib/rouge/lexers/javascript.rb +269 -0
  208. data/lib/rouge/lexers/jinja.rb +137 -0
  209. data/lib/rouge/lexers/json.rb +29 -0
  210. data/lib/rouge/lexers/json_doc.rb +23 -0
  211. data/lib/rouge/lexers/jsonnet.rb +151 -0
  212. data/lib/rouge/lexers/jsx.rb +102 -0
  213. data/lib/rouge/lexers/julia.rb +172 -0
  214. data/lib/rouge/lexers/kotlin.rb +84 -0
  215. data/lib/rouge/lexers/lasso.rb +217 -0
  216. data/lib/rouge/lexers/lasso/keywords.yml +446 -0
  217. data/lib/rouge/lexers/liquid.rb +287 -0
  218. data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
  219. data/lib/rouge/lexers/literate_haskell.rb +36 -0
  220. data/lib/rouge/lexers/llvm.rb +84 -0
  221. data/lib/rouge/lexers/lua.rb +125 -0
  222. data/lib/rouge/lexers/lua/builtins.rb +22 -0
  223. data/lib/rouge/lexers/make.rb +116 -0
  224. data/lib/rouge/lexers/markdown.rb +154 -0
  225. data/lib/rouge/lexers/matlab.rb +75 -0
  226. data/lib/rouge/lexers/matlab/builtins.rb +11 -0
  227. data/lib/rouge/lexers/moonscript.rb +114 -0
  228. data/lib/rouge/lexers/mosel.rb +231 -0
  229. data/lib/rouge/lexers/mxml.rb +68 -0
  230. data/lib/rouge/lexers/nasm.rb +203 -0
  231. data/lib/rouge/lexers/nginx.rb +71 -0
  232. data/lib/rouge/lexers/nim.rb +152 -0
  233. data/lib/rouge/lexers/objective_c.rb +208 -0
  234. data/lib/rouge/lexers/ocaml.rb +100 -0
  235. data/lib/rouge/lexers/pascal.rb +66 -0
  236. data/lib/rouge/lexers/perl.rb +197 -0
  237. data/lib/rouge/lexers/php.rb +193 -0
  238. data/lib/rouge/lexers/php/builtins.rb +194 -0
  239. data/lib/rouge/lexers/plain_text.rb +26 -0
  240. data/lib/rouge/lexers/plist.rb +49 -0
  241. data/lib/rouge/lexers/pony.rb +93 -0
  242. data/lib/rouge/lexers/powershell.rb +132 -0
  243. data/lib/rouge/lexers/praat.rb +350 -0
  244. data/lib/rouge/lexers/prolog.rb +64 -0
  245. data/lib/rouge/lexers/prometheus.rb +121 -0
  246. data/lib/rouge/lexers/properties.rb +55 -0
  247. data/lib/rouge/lexers/protobuf.rb +70 -0
  248. data/lib/rouge/lexers/puppet.rb +128 -0
  249. data/lib/rouge/lexers/python.rb +231 -0
  250. data/lib/rouge/lexers/q.rb +124 -0
  251. data/lib/rouge/lexers/qml.rb +73 -0
  252. data/lib/rouge/lexers/r.rb +89 -0
  253. data/lib/rouge/lexers/racket.rb +542 -0
  254. data/lib/rouge/lexers/ruby.rb +437 -0
  255. data/lib/rouge/lexers/rust.rb +192 -0
  256. data/lib/rouge/lexers/sass.rb +74 -0
  257. data/lib/rouge/lexers/sass/common.rb +180 -0
  258. data/lib/rouge/lexers/scala.rb +142 -0
  259. data/lib/rouge/lexers/scheme.rb +112 -0
  260. data/lib/rouge/lexers/scss.rb +34 -0
  261. data/lib/rouge/lexers/sed.rb +172 -0
  262. data/lib/rouge/lexers/shell.rb +180 -0
  263. data/lib/rouge/lexers/sieve.rb +96 -0
  264. data/lib/rouge/lexers/slim.rb +228 -0
  265. data/lib/rouge/lexers/smalltalk.rb +116 -0
  266. data/lib/rouge/lexers/smarty.rb +91 -0
  267. data/lib/rouge/lexers/sml.rb +348 -0
  268. data/lib/rouge/lexers/sql.rb +140 -0
  269. data/lib/rouge/lexers/swift.rb +161 -0
  270. data/lib/rouge/lexers/tap.rb +91 -0
  271. data/lib/rouge/lexers/tcl.rb +192 -0
  272. data/lib/rouge/lexers/tex.rb +69 -0
  273. data/lib/rouge/lexers/toml.rb +71 -0
  274. data/lib/rouge/lexers/tsx.rb +19 -0
  275. data/lib/rouge/lexers/tulip.rb +107 -0
  276. data/lib/rouge/lexers/turtle.rb +72 -0
  277. data/lib/rouge/lexers/twig.rb +39 -0
  278. data/lib/rouge/lexers/typescript.rb +22 -0
  279. data/lib/rouge/lexers/typescript/common.rb +33 -0
  280. data/lib/rouge/lexers/vala.rb +77 -0
  281. data/lib/rouge/lexers/vb.rb +164 -0
  282. data/lib/rouge/lexers/verilog.rb +164 -0
  283. data/lib/rouge/lexers/vhdl.rb +97 -0
  284. data/lib/rouge/lexers/viml.rb +101 -0
  285. data/lib/rouge/lexers/viml/keywords.rb +12 -0
  286. data/lib/rouge/lexers/vue.rb +124 -0
  287. data/lib/rouge/lexers/wollok.rb +107 -0
  288. data/lib/rouge/lexers/xml.rb +59 -0
  289. data/lib/rouge/lexers/yaml.rb +373 -0
  290. data/lib/rouge/plugins/redcarpet.rb +30 -0
  291. data/lib/rouge/regex_lexer.rb +441 -0
  292. data/lib/rouge/template_lexer.rb +20 -0
  293. data/lib/rouge/text_analyzer.rb +48 -0
  294. data/lib/rouge/theme.rb +213 -0
  295. data/lib/rouge/themes/base16.rb +130 -0
  296. data/lib/rouge/themes/colorful.rb +67 -0
  297. data/lib/rouge/themes/github.rb +71 -0
  298. data/lib/rouge/themes/gruvbox.rb +167 -0
  299. data/lib/rouge/themes/igor_pro.rb +20 -0
  300. data/lib/rouge/themes/molokai.rb +82 -0
  301. data/lib/rouge/themes/monokai.rb +92 -0
  302. data/lib/rouge/themes/monokai_sublime.rb +90 -0
  303. data/lib/rouge/themes/pastie.rb +69 -0
  304. data/lib/rouge/themes/thankful_eyes.rb +74 -0
  305. data/lib/rouge/themes/tulip.rb +69 -0
  306. data/lib/rouge/token.rb +182 -0
  307. data/lib/rouge/util.rb +101 -0
  308. data/lib/rouge/version.rb +7 -0
  309. data/lib/rougegal.rb +80 -0
  310. data/rougegal.gemspec +18 -0
  311. metadata +356 -0
@@ -0,0 +1,137 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Jinja < TemplateLexer
6
+ title "Jinja"
7
+ desc "Django/Jinja template engine (jinja.pocoo.org)"
8
+
9
+ tag 'jinja'
10
+ aliases 'django'
11
+
12
+ mimetypes 'application/x-django-templating', 'application/x-jinja',
13
+ 'text/html+django', 'text/html+jinja'
14
+
15
+ def self.keywords
16
+ @@keywords ||= %w(as context do else extends from ignore missing
17
+ import include reversed recursive scoped
18
+ autoescape endautoescape block endblock call endcall
19
+ filter endfilter for endfor if endif macro endmacro
20
+ set endset trans endtrans with endwith without)
21
+ end
22
+
23
+ def self.tests
24
+ @@tests ||= %w(callable defined divisibleby equalto escaped even iterable
25
+ lower mapping none number odd sameas sequence string
26
+ undefined upper)
27
+ end
28
+
29
+ def self.pseudo_keywords
30
+ @@pseudo_keywords ||= %w(true false none True False None)
31
+ end
32
+
33
+ def self.word_operators
34
+ @@word_operators ||= %w(is in and or not)
35
+ end
36
+
37
+ state :root do
38
+ # Comments
39
+ rule /{#/, Comment, :comment
40
+
41
+ # Statements
42
+ rule /\{\%/ do
43
+ token Comment::Preproc
44
+ push :statement
45
+ end
46
+
47
+ # Expressions
48
+ rule /\{\{/ do
49
+ token Comment::Preproc
50
+ push :expression
51
+ end
52
+
53
+ rule(/(.+?)(?=\\|{{|{%|{#)/m) { delegate parent }
54
+ rule(/.+/m) { delegate parent }
55
+ end
56
+
57
+ state :filter do
58
+ # Filters are called like variable|foo(arg1, ...)
59
+ rule /(\|)(\w+)/ do
60
+ groups Operator, Name::Function
61
+ end
62
+ end
63
+
64
+ state :function do
65
+ rule /(\w+)(\()/ do
66
+ groups Name::Function, Punctuation
67
+ end
68
+ end
69
+
70
+ state :text do
71
+ rule /\s+/m, Text
72
+ end
73
+
74
+ state :literal do
75
+ # Strings
76
+ rule /"(\\.|.)*?"/, Str::Double
77
+ rule /'(\\.|.)*?'/, Str::Single
78
+
79
+ # Numbers
80
+ rule /\d+(?=}\s)/, Num
81
+
82
+ # Arithmetic operators (+, -, *, **, //, /)
83
+ # TODO : implement modulo (%)
84
+ rule /(\+|\-|\*|\/\/?|\*\*?)/, Operator
85
+
86
+ # Comparisons operators (<=, <, >=, >, ==, ===, !=)
87
+ rule /(<=?|>=?|===?|!=)/, Operator
88
+
89
+ # Punctuation (the comma, [], ())
90
+ rule /,/, Punctuation
91
+ rule /\[/, Punctuation
92
+ rule /\]/, Punctuation
93
+ rule /\(/, Punctuation
94
+ rule /\)/, Punctuation
95
+ end
96
+
97
+ state :comment do
98
+ rule(/[^{#]+/m) { token Comment }
99
+ rule(/#}/) { token Comment; pop! }
100
+ end
101
+
102
+ state :expression do
103
+ rule /\w+\.?/m, Name::Variable
104
+
105
+ mixin :filter
106
+ mixin :function
107
+ mixin :literal
108
+ mixin :text
109
+
110
+ rule /%}|}}/, Comment::Preproc, :pop!
111
+ end
112
+
113
+ state :statement do
114
+ rule /(\w+\.?)/ do |m|
115
+ if self.class.keywords.include?(m[0])
116
+ groups Keyword
117
+ elsif self.class.pseudo_keywords.include?(m[0])
118
+ groups Keyword::Pseudo
119
+ elsif self.class.word_operators.include?(m[0])
120
+ groups Operator::Word
121
+ elsif self.class.tests.include?(m[0])
122
+ groups Name::Builtin
123
+ else
124
+ groups Name::Variable
125
+ end
126
+ end
127
+
128
+ mixin :filter
129
+ mixin :function
130
+ mixin :literal
131
+ mixin :text
132
+
133
+ rule /\%\}/, Comment::Preproc, :pop!
134
+ end
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,29 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class JSON < RegexLexer
6
+ title 'JSON'
7
+ desc "JavaScript Object Notation (json.org)"
8
+ tag 'json'
9
+ filenames '*.json'
10
+ mimetypes 'application/json', 'application/vnd.api+json',
11
+ 'application/hal+json'
12
+
13
+ state :root do
14
+ rule /\s+/m, Text::Whitespace
15
+ rule /"/, Str::Double, :string
16
+ rule /(?:true|false|null)\b/, Keyword::Constant
17
+ rule /[{},:\[\]]/, Punctuation
18
+ rule /-?(?:0|[1-9]\d*)\.\d+(?:e[+-]?\d+)?/i, Num::Float
19
+ rule /-?(?:0|[1-9]\d*)(?:e[+-]?\d+)?/i, Num::Integer
20
+ end
21
+
22
+ state :string do
23
+ rule /[^\\"]+/, Str::Double
24
+ rule /\\./, Str::Escape
25
+ rule /"/, Str::Double, :pop!
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,23 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ load_lexer 'json.rb'
6
+
7
+ class JSONDOC < JSON
8
+ desc "JavaScript Object Notation with extenstions for documentation"
9
+ tag 'json-doc'
10
+
11
+ prepend :root do
12
+ rule /([$\w]+)(\s*)(:)/ do
13
+ groups Name::Attribute, Text, Punctuation
14
+ end
15
+
16
+ rule %r(/[*].*?[*]/), Comment
17
+
18
+ rule %r(//.*?$), Comment::Single
19
+ rule /(\.\.\.)/, Comment::Single
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,151 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Jsonnet < RegexLexer
6
+ title 'Jsonnet'
7
+ desc 'An elegant, formally-specified config language for JSON'
8
+ tag 'jsonnet'
9
+ filenames '*.jsonnet'
10
+ mimetypes 'text/x-jsonnet'
11
+
12
+ def self.keywords
13
+ @keywords ||= Set.new %w(
14
+ self super local for in if then else import importstr error
15
+ tailstrict assert
16
+ )
17
+ end
18
+
19
+ def self.declarations
20
+ @declarations ||= Set.new %w(
21
+ function
22
+ )
23
+ end
24
+
25
+ def self.constants
26
+ @constants ||= Set.new %w(
27
+ null true false
28
+ )
29
+ end
30
+
31
+ def self.builtins
32
+ @builtins ||= Set.new %w(
33
+ acos
34
+ asin
35
+ atan
36
+ ceil
37
+ char
38
+ codepoint
39
+ cos
40
+ exp
41
+ exponent
42
+ filter
43
+ floor
44
+ force
45
+ length
46
+ log
47
+ makeArray
48
+ mantissa
49
+ objectFields
50
+ objectHas
51
+ pow
52
+ sin
53
+ sqrt
54
+ tan
55
+ thisFile
56
+ type
57
+ abs
58
+ assertEqual
59
+ escapeStringBash
60
+ escapeStringDollars
61
+ escapeStringJson
62
+ escapeStringPython
63
+ filterMap
64
+ flattenArrays
65
+ foldl
66
+ foldr
67
+ format
68
+ join
69
+ lines
70
+ manifestIni
71
+ manifestPython
72
+ manifestPythonVars
73
+ map
74
+ max
75
+ min
76
+ mod
77
+ range
78
+ set
79
+ setDiff
80
+ setInter
81
+ setMember
82
+ setUnion
83
+ sort
84
+ split
85
+ stringChars
86
+ substr
87
+ toString
88
+ uniq
89
+ )
90
+ end
91
+
92
+ identifier = /[a-zA-Z_][a-zA-Z0-9_]*/
93
+
94
+ state :root do
95
+ rule /\s+/, Text
96
+ rule %r(//.*?$), Comment::Single
97
+ rule %r(#.*?$), Comment::Single
98
+ rule %r(/\*.*?\*/)m, Comment::Multiline
99
+
100
+ rule /-?(?:0|[1-9]\d*)\.\d+(?:e[+-]\d+)?/i, Num::Float
101
+ rule /-?(?:0|[1-9]\d*)(?:e[+-]\d+)?/i, Num::Integer
102
+
103
+ rule /[{}:\.,;+\[\]=%\(\)]/, Punctuation
104
+
105
+ rule /"/, Str, :string_double
106
+ rule /'/, Str, :string_single
107
+ rule /\|\|\|/, Str, :string_block
108
+
109
+ rule /\$/, Keyword
110
+
111
+ rule identifier do |m|
112
+ if self.class.keywords.include? m[0]
113
+ token Keyword
114
+ elsif self.class.declarations.include? m[0]
115
+ token Keyword::Declaration
116
+ elsif self.class.constants.include? m[0]
117
+ token Keyword::Constant
118
+ elsif self.class.builtins.include? m[0]
119
+ token Name::Builtin
120
+ else
121
+ token Name::Other
122
+ end
123
+ end
124
+ end
125
+
126
+ state :string do
127
+ rule /\\([\\\/bfnrt]|(u[0-9a-fA-F]{4}))/, Str::Escape
128
+ end
129
+
130
+ state :string_double do
131
+ mixin :string
132
+ rule /\\"/, Str::Escape
133
+ rule /"/, Str, :pop!
134
+ rule /[^\\"]+/, Str
135
+ end
136
+
137
+ state :string_single do
138
+ mixin :string
139
+ rule /\\'/, Str::Escape
140
+ rule /'/, Str, :pop!
141
+ rule /[^\\']+/, Str
142
+ end
143
+
144
+ state :string_block do
145
+ mixin :string
146
+ rule /\|\|\|/, Str, :pop!
147
+ rule /.*/, Str
148
+ end
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,102 @@
1
+ module Rouge
2
+ module Lexers
3
+ load_lexer 'javascript.rb'
4
+
5
+ class JSX < Javascript
6
+ title 'JSX'
7
+ desc 'React JSX (https://facebook.github.io/react/)'
8
+ tag 'jsx'
9
+ aliases 'jsx', 'react'
10
+ filenames '*.jsx'
11
+
12
+ mimetypes 'text/x-jsx', 'application/x-jsx'
13
+
14
+ id = Javascript.id_regex
15
+
16
+ def start_embed!
17
+ @embed ||= JSX.new(options)
18
+ @embed.reset!
19
+ @embed.push(:expr_start)
20
+ push :jsx_embed_root
21
+ end
22
+
23
+ def tag_token(name)
24
+ name[0] =~ /\p{Lower}/ ? Name::Tag : Name::Class
25
+ end
26
+
27
+ start { @html = HTML.new(options) }
28
+
29
+ state :jsx_tags do
30
+ rule /</, Punctuation, :jsx_element
31
+ end
32
+
33
+ state :jsx_internal do
34
+ rule %r(</) do
35
+ token Punctuation
36
+ goto :jsx_end_tag
37
+ end
38
+
39
+ rule /{/ do
40
+ token Str::Interpol
41
+ start_embed!
42
+ end
43
+
44
+ rule /[^<>{]+/ do
45
+ delegate @html
46
+ end
47
+
48
+ mixin :jsx_tags
49
+ end
50
+
51
+ prepend :expr_start do
52
+ mixin :jsx_tags
53
+ end
54
+
55
+ state :jsx_tag do
56
+ mixin :comments_and_whitespace
57
+ rule /#{id}/ do |m|
58
+ token tag_token(m[0])
59
+ end
60
+
61
+ rule /[.]/, Punctuation
62
+ end
63
+
64
+ state :jsx_end_tag do
65
+ mixin :jsx_tag
66
+ rule />/, Punctuation, :pop!
67
+ end
68
+
69
+ state :jsx_element do
70
+ rule /#{id}=/, Name::Attribute, :jsx_attribute
71
+ mixin :jsx_tag
72
+ rule />/ do token Punctuation; goto :jsx_internal end
73
+ rule %r(/>), Punctuation, :pop!
74
+ end
75
+
76
+ state :jsx_attribute do
77
+ rule /"(\\[\\"]|[^"])*"/, Str::Double, :pop!
78
+ rule /'(\\[\\']|[^'])*'/, Str::Single, :pop!
79
+ rule /{/ do
80
+ token Str::Interpol
81
+ pop!
82
+ start_embed!
83
+ end
84
+ end
85
+
86
+ state :jsx_embed_root do
87
+ rule /[.][.][.]/, Punctuation
88
+ rule /}/, Str::Interpol, :pop!
89
+ mixin :jsx_embed
90
+ end
91
+
92
+ state :jsx_embed do
93
+ rule /{/ do delegate @embed; push :jsx_embed end
94
+ rule /}/ do delegate @embed; pop! end
95
+ rule /[^{}]+/ do
96
+ delegate @embed
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+
@@ -0,0 +1,172 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Julia < RegexLexer
6
+ title "Julia"
7
+ desc "The Julia programming language"
8
+ tag 'julia'
9
+ aliases 'jl'
10
+ filenames '*.jl'
11
+ mimetypes 'text/x-julia', 'application/x-julia'
12
+
13
+ def self.analyze_text(text)
14
+ 1 if text.shebang? 'julia'
15
+ end
16
+
17
+ BUILTINS = /\b(?:
18
+ applicable | assert | convert
19
+ | dlopen | dlsym | edit
20
+ | eps | error | exit
21
+ | finalizer | hash | im
22
+ | Inf | invoke | is
23
+ | isa | isequal | load
24
+ | method_exists | Nan | new
25
+ | ntuple | pi | promote
26
+ | promote_type | realmax | realmin
27
+ | sizeof | subtype | system
28
+ | throw | tuple | typemax
29
+ | typemin | typeof | uid
30
+ | whos
31
+ )\b/x
32
+
33
+ KEYWORDS = /\b(?:
34
+ function | return | module | import | export
35
+ | if | else | elseif | end | for
36
+ | in | while | try | catch | super
37
+ | const
38
+ )\b/x
39
+
40
+ TYPES = /\b(?:
41
+ Int | UInt | Int8
42
+ | UInt8 | Int16 | UInt16
43
+ | Int32 | UInt32 | Int64
44
+ | UInt64 | Int128 | UInt128
45
+ | Float16 | Float32 | Float64
46
+ | Bool | Inf | Inf16
47
+ | Inf32 | NaN | NaN16
48
+ | NaN32 | BigInt | BigFloat
49
+ | Char | ASCIIString | UTF8String
50
+ | UTF16String | UTF32String | AbstractString
51
+ | WString | String | Regex
52
+ | RegexMatch | Complex64 | Complex128
53
+ | Any | Nothing | None
54
+ )\b/x
55
+
56
+ OPERATORS = / \+ | = | - | \* | \/
57
+ | \\ | & | \| | \$ | ~
58
+ | \^ | % | ! | >>> | >>
59
+ | << | && | \|\| | \+= | -=
60
+ | \*= | \/= | \\= | ÷= | %=
61
+ | \^= | &= | \|= | \$= | >>>=
62
+ | >>= | <<= | == | != | ≠
63
+ | <= | ≤ | >= | ≥ | \.
64
+ | :: | <: | -> | \? | \.\*
65
+ | \.\^ | \.\\ | \.\/ | \\ | <
66
+ | >
67
+ /x
68
+
69
+ PUNCTUATION = / [ \[ \] { } : \( \) , ; @ ] /x
70
+
71
+
72
+ state :root do
73
+ rule /\n/, Text
74
+ rule /[^\S\n]+/, Text
75
+ rule /#=/, Comment::Multiline, :blockcomment
76
+ rule /#.*$/, Comment
77
+ rule OPERATORS, Operator
78
+ rule /\\\n/, Text
79
+ rule /\\/, Text
80
+
81
+
82
+ # functions
83
+ rule /(function)((?:\s|\\\s)+)/ do
84
+ groups Keyword, Name::Function
85
+ push :funcname
86
+ end
87
+
88
+ # types
89
+ rule /(type|typealias|abstract)((?:\s|\\\s)+)/ do
90
+ groups Keyword, Name::Class
91
+ push :typename
92
+ end
93
+ rule TYPES, Keyword::Type
94
+
95
+ # keywords
96
+ rule /(local|global|const)\b/, Keyword::Declaration
97
+ rule KEYWORDS, Keyword
98
+
99
+ rule BUILTINS, Name::Builtin
100
+
101
+ # backticks
102
+ rule /`.*?`/, Literal::String::Backtick
103
+
104
+ # chars
105
+ rule /'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,3}|\\u[a-fA-F0-9]{1,4}|\\U[a-fA-F0-9]{1,6}|[^\\\'\n])'/, Literal::String::Char
106
+
107
+ # try to match trailing transpose
108
+ rule /(?<=[.\w)\]])\'+/, Operator
109
+
110
+ # strings
111
+ rule /(?:[IL])"/, Literal::String, :string
112
+ rule /[E]?"/, Literal::String, :string
113
+
114
+ # names
115
+ rule /@[\w.]+/, Name::Decorator
116
+ rule /(?:[a-zA-Z_\u00A1-\uffff]|[\u1000-\u10ff])(?:[a-zA-Z_0-9\u00A1-\uffff]|[\u1000-\u10ff])*!*/, Name
117
+
118
+ rule PUNCTUATION, Other
119
+
120
+ # numbers
121
+ rule /(\d+(_\d+)+\.\d*|\d*\.\d+(_\d+)+)([eEf][+-]?[0-9]+)?/, Literal::Number::Float
122
+ rule /(\d+\.\d*|\d*\.\d+)([eEf][+-]?[0-9]+)?/, Literal::Number::Float
123
+ rule /\d+(_\d+)+[eEf][+-]?[0-9]+/, Literal::Number::Float
124
+ rule /\d+[eEf][+-]?[0-9]+/, Literal::Number::Float
125
+ rule /0b[01]+(_[01]+)+/, Literal::Number::Bin
126
+ rule /0b[01]+/, Literal::Number::Bin
127
+ rule /0o[0-7]+(_[0-7]+)+/, Literal::Number::Oct
128
+ rule /0o[0-7]+/, Literal::Number::Oct
129
+ rule /0x[a-fA-F0-9]+(_[a-fA-F0-9]+)+/, Literal::Number::Hex
130
+ rule /0x[a-fA-F0-9]+/, Literal::Number::Hex
131
+ rule /\d+(_\d+)+/, Literal::Number::Integer
132
+ rule /\d+/, Literal::Number::Integer
133
+ end
134
+
135
+
136
+ state :funcname do
137
+ rule /[a-zA-Z_]\w*/, Name::Function, :pop!
138
+ rule /\([^\s\w{]{1,2}\)/, Operator, :pop!
139
+ rule /[^\s\w{]{1,2}/, Operator, :pop!
140
+ end
141
+
142
+ state :typename do
143
+ rule /[a-zA-Z_]\w*/, Name::Class, :pop!
144
+ end
145
+
146
+ state :stringescape do
147
+ rule /\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})/,
148
+ Literal::String::Escape
149
+ end
150
+
151
+ state :blockcomment do
152
+ rule /[^=#]/, Comment::Multiline
153
+ rule /#=/, Comment::Multiline, :blockcomment
154
+ rule /\=#/, Comment::Multiline, :pop!
155
+ rule /[=#]/, Comment::Multiline
156
+ end
157
+
158
+ state :string do
159
+ mixin :stringescape
160
+
161
+ rule /"/, Literal::String, :pop!
162
+ rule /\\\\|\\"|\\\n/, Literal::String::Escape # included here for raw strings
163
+ rule /\$(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?/, Literal::String::Interpol
164
+ rule /[^\\"$]+/, Literal::String
165
+ # quotes, dollar signs, and backslashes must be parsed one at a time
166
+ rule /["\\]/, Literal::String
167
+ # unhandled string formatting sign
168
+ rule /\$/, Literal::String
169
+ end
170
+ end
171
+ end
172
+ end