rouge_ecl 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) 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.rb +82 -0
  6. data/lib/rouge/cli.rb +429 -0
  7. data/lib/rouge/demos/abap +6 -0
  8. data/lib/rouge/demos/actionscript +4 -0
  9. data/lib/rouge/demos/apache +21 -0
  10. data/lib/rouge/demos/apiblueprint +33 -0
  11. data/lib/rouge/demos/applescript +2 -0
  12. data/lib/rouge/demos/awk +4 -0
  13. data/lib/rouge/demos/biml +38 -0
  14. data/lib/rouge/demos/bsl +7 -0
  15. data/lib/rouge/demos/c +8 -0
  16. data/lib/rouge/demos/ceylon +7 -0
  17. data/lib/rouge/demos/cfscript +18 -0
  18. data/lib/rouge/demos/clojure +5 -0
  19. data/lib/rouge/demos/cmake +7 -0
  20. data/lib/rouge/demos/coffeescript +5 -0
  21. data/lib/rouge/demos/common_lisp +1 -0
  22. data/lib/rouge/demos/conf +4 -0
  23. data/lib/rouge/demos/console +6 -0
  24. data/lib/rouge/demos/coq +13 -0
  25. data/lib/rouge/demos/cpp +8 -0
  26. data/lib/rouge/demos/csharp +5 -0
  27. data/lib/rouge/demos/css +4 -0
  28. data/lib/rouge/demos/d +16 -0
  29. data/lib/rouge/demos/dart +6 -0
  30. data/lib/rouge/demos/diff +7 -0
  31. data/lib/rouge/demos/digdag +19 -0
  32. data/lib/rouge/demos/docker +9 -0
  33. data/lib/rouge/demos/dot +5 -0
  34. data/lib/rouge/demos/ecl +1 -0
  35. data/lib/rouge/demos/eiffel +30 -0
  36. data/lib/rouge/demos/elixir +1 -0
  37. data/lib/rouge/demos/elm +4 -0
  38. data/lib/rouge/demos/erb +1 -0
  39. data/lib/rouge/demos/erlang +7 -0
  40. data/lib/rouge/demos/factor +5 -0
  41. data/lib/rouge/demos/fortran +22 -0
  42. data/lib/rouge/demos/fsharp +12 -0
  43. data/lib/rouge/demos/gherkin +17 -0
  44. data/lib/rouge/demos/glsl +14 -0
  45. data/lib/rouge/demos/go +7 -0
  46. data/lib/rouge/demos/gradle +10 -0
  47. data/lib/rouge/demos/graphql +17 -0
  48. data/lib/rouge/demos/groovy +9 -0
  49. data/lib/rouge/demos/hack +5 -0
  50. data/lib/rouge/demos/haml +5 -0
  51. data/lib/rouge/demos/handlebars +7 -0
  52. data/lib/rouge/demos/haskell +6 -0
  53. data/lib/rouge/demos/html +8 -0
  54. data/lib/rouge/demos/http +14 -0
  55. data/lib/rouge/demos/hylang +10 -0
  56. data/lib/rouge/demos/idlang +8 -0
  57. data/lib/rouge/demos/igorpro +9 -0
  58. data/lib/rouge/demos/ini +4 -0
  59. data/lib/rouge/demos/io +11 -0
  60. data/lib/rouge/demos/irb +4 -0
  61. data/lib/rouge/demos/irb_output +2 -0
  62. data/lib/rouge/demos/java +5 -0
  63. data/lib/rouge/demos/javascript +1 -0
  64. data/lib/rouge/demos/jinja +9 -0
  65. data/lib/rouge/demos/json +1 -0
  66. data/lib/rouge/demos/json-doc +1 -0
  67. data/lib/rouge/demos/jsonnet +28 -0
  68. data/lib/rouge/demos/jsx +17 -0
  69. data/lib/rouge/demos/julia +11 -0
  70. data/lib/rouge/demos/kotlin +3 -0
  71. data/lib/rouge/demos/lasso +12 -0
  72. data/lib/rouge/demos/liquid +11 -0
  73. data/lib/rouge/demos/literate_coffeescript +3 -0
  74. data/lib/rouge/demos/literate_haskell +7 -0
  75. data/lib/rouge/demos/llvm +20 -0
  76. data/lib/rouge/demos/lua +12 -0
  77. data/lib/rouge/demos/make +6 -0
  78. data/lib/rouge/demos/markdown +4 -0
  79. data/lib/rouge/demos/matlab +6 -0
  80. data/lib/rouge/demos/moonscript +16 -0
  81. data/lib/rouge/demos/mosel +10 -0
  82. data/lib/rouge/demos/mxml +22 -0
  83. data/lib/rouge/demos/nasm +26 -0
  84. data/lib/rouge/demos/nginx +5 -0
  85. data/lib/rouge/demos/nim +27 -0
  86. data/lib/rouge/demos/nix +19 -0
  87. data/lib/rouge/demos/objective_c +18 -0
  88. data/lib/rouge/demos/ocaml +12 -0
  89. data/lib/rouge/demos/pascal +14 -0
  90. data/lib/rouge/demos/perl +5 -0
  91. data/lib/rouge/demos/php +3 -0
  92. data/lib/rouge/demos/plaintext +1 -0
  93. data/lib/rouge/demos/plist +142 -0
  94. data/lib/rouge/demos/pony +17 -0
  95. data/lib/rouge/demos/powershell +49 -0
  96. data/lib/rouge/demos/praat +26 -0
  97. data/lib/rouge/demos/prolog +9 -0
  98. data/lib/rouge/demos/prometheus +9 -0
  99. data/lib/rouge/demos/properties +7 -0
  100. data/lib/rouge/demos/protobuf +5 -0
  101. data/lib/rouge/demos/puppet +6 -0
  102. data/lib/rouge/demos/python +6 -0
  103. data/lib/rouge/demos/q +2 -0
  104. data/lib/rouge/demos/qml +9 -0
  105. data/lib/rouge/demos/r +8 -0
  106. data/lib/rouge/demos/racket +24 -0
  107. data/lib/rouge/demos/ruby +9 -0
  108. data/lib/rouge/demos/rust +12 -0
  109. data/lib/rouge/demos/sass +3 -0
  110. data/lib/rouge/demos/scala +3 -0
  111. data/lib/rouge/demos/scheme +4 -0
  112. data/lib/rouge/demos/scss +5 -0
  113. data/lib/rouge/demos/sed +4 -0
  114. data/lib/rouge/demos/shell +2 -0
  115. data/lib/rouge/demos/sieve +10 -0
  116. data/lib/rouge/demos/slim +17 -0
  117. data/lib/rouge/demos/smalltalk +6 -0
  118. data/lib/rouge/demos/smarty +12 -0
  119. data/lib/rouge/demos/sml +4 -0
  120. data/lib/rouge/demos/sql +1 -0
  121. data/lib/rouge/demos/swift +5 -0
  122. data/lib/rouge/demos/tap +5 -0
  123. data/lib/rouge/demos/tcl +1 -0
  124. data/lib/rouge/demos/tex +1 -0
  125. data/lib/rouge/demos/toml +9 -0
  126. data/lib/rouge/demos/tsx +17 -0
  127. data/lib/rouge/demos/tulip +13 -0
  128. data/lib/rouge/demos/turtle +26 -0
  129. data/lib/rouge/demos/twig +9 -0
  130. data/lib/rouge/demos/typescript +1 -0
  131. data/lib/rouge/demos/vala +8 -0
  132. data/lib/rouge/demos/vb +4 -0
  133. data/lib/rouge/demos/verilog +27 -0
  134. data/lib/rouge/demos/vhdl +23 -0
  135. data/lib/rouge/demos/viml +14 -0
  136. data/lib/rouge/demos/vue +11 -0
  137. data/lib/rouge/demos/wollok +11 -0
  138. data/lib/rouge/demos/xml +2 -0
  139. data/lib/rouge/demos/yaml +4 -0
  140. data/lib/rouge/formatter.rb +75 -0
  141. data/lib/rouge/formatters/html.rb +37 -0
  142. data/lib/rouge/formatters/html_inline.rb +30 -0
  143. data/lib/rouge/formatters/html_legacy.rb +44 -0
  144. data/lib/rouge/formatters/html_linewise.rb +27 -0
  145. data/lib/rouge/formatters/html_pygments.rb +16 -0
  146. data/lib/rouge/formatters/html_table.rb +61 -0
  147. data/lib/rouge/formatters/null.rb +19 -0
  148. data/lib/rouge/formatters/terminal256.rb +180 -0
  149. data/lib/rouge/guesser.rb +55 -0
  150. data/lib/rouge/guessers/disambiguation.rb +101 -0
  151. data/lib/rouge/guessers/filename.rb +25 -0
  152. data/lib/rouge/guessers/glob_mapping.rb +43 -0
  153. data/lib/rouge/guessers/mimetype.rb +14 -0
  154. data/lib/rouge/guessers/modeline.rb +44 -0
  155. data/lib/rouge/guessers/source.rb +29 -0
  156. data/lib/rouge/guessers/util.rb +32 -0
  157. data/lib/rouge/lexer.rb +461 -0
  158. data/lib/rouge/lexers/abap.rb +238 -0
  159. data/lib/rouge/lexers/actionscript.rb +195 -0
  160. data/lib/rouge/lexers/apache.rb +71 -0
  161. data/lib/rouge/lexers/apache/keywords.yml +764 -0
  162. data/lib/rouge/lexers/apiblueprint.rb +47 -0
  163. data/lib/rouge/lexers/apple_script.rb +367 -0
  164. data/lib/rouge/lexers/awk.rb +161 -0
  165. data/lib/rouge/lexers/biml.rb +41 -0
  166. data/lib/rouge/lexers/bsl.rb +81 -0
  167. data/lib/rouge/lexers/c.rb +212 -0
  168. data/lib/rouge/lexers/ceylon.rb +123 -0
  169. data/lib/rouge/lexers/cfscript.rb +153 -0
  170. data/lib/rouge/lexers/clojure.rb +112 -0
  171. data/lib/rouge/lexers/cmake.rb +206 -0
  172. data/lib/rouge/lexers/coffeescript.rb +174 -0
  173. data/lib/rouge/lexers/common_lisp.rb +345 -0
  174. data/lib/rouge/lexers/conf.rb +24 -0
  175. data/lib/rouge/lexers/console.rb +136 -0
  176. data/lib/rouge/lexers/coq.rb +187 -0
  177. data/lib/rouge/lexers/cpp.rb +78 -0
  178. data/lib/rouge/lexers/csharp.rb +114 -0
  179. data/lib/rouge/lexers/css.rb +273 -0
  180. data/lib/rouge/lexers/d.rb +176 -0
  181. data/lib/rouge/lexers/dart.rb +104 -0
  182. data/lib/rouge/lexers/diff.rb +31 -0
  183. data/lib/rouge/lexers/digdag.rb +68 -0
  184. data/lib/rouge/lexers/docker.rb +50 -0
  185. data/lib/rouge/lexers/dot.rb +68 -0
  186. data/lib/rouge/lexers/ecl.rb +138 -0
  187. data/lib/rouge/lexers/eiffel.rb +65 -0
  188. data/lib/rouge/lexers/elixir.rb +133 -0
  189. data/lib/rouge/lexers/elm.rb +89 -0
  190. data/lib/rouge/lexers/erb.rb +52 -0
  191. data/lib/rouge/lexers/erlang.rb +114 -0
  192. data/lib/rouge/lexers/factor.rb +302 -0
  193. data/lib/rouge/lexers/fortran.rb +176 -0
  194. data/lib/rouge/lexers/fsharp.rb +118 -0
  195. data/lib/rouge/lexers/gherkin.rb +137 -0
  196. data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
  197. data/lib/rouge/lexers/glsl.rb +135 -0
  198. data/lib/rouge/lexers/go.rb +174 -0
  199. data/lib/rouge/lexers/gradle.rb +37 -0
  200. data/lib/rouge/lexers/graphql.rb +243 -0
  201. data/lib/rouge/lexers/groovy.rb +112 -0
  202. data/lib/rouge/lexers/hack.rb +48 -0
  203. data/lib/rouge/lexers/haml.rb +229 -0
  204. data/lib/rouge/lexers/handlebars.rb +79 -0
  205. data/lib/rouge/lexers/haskell.rb +182 -0
  206. data/lib/rouge/lexers/html.rb +139 -0
  207. data/lib/rouge/lexers/http.rb +80 -0
  208. data/lib/rouge/lexers/hylang.rb +93 -0
  209. data/lib/rouge/lexers/idlang.rb +310 -0
  210. data/lib/rouge/lexers/igorpro.rb +408 -0
  211. data/lib/rouge/lexers/ini.rb +53 -0
  212. data/lib/rouge/lexers/io.rb +68 -0
  213. data/lib/rouge/lexers/irb.rb +66 -0
  214. data/lib/rouge/lexers/java.rb +87 -0
  215. data/lib/rouge/lexers/javascript.rb +281 -0
  216. data/lib/rouge/lexers/jinja.rb +137 -0
  217. data/lib/rouge/lexers/json.rb +29 -0
  218. data/lib/rouge/lexers/json_doc.rb +23 -0
  219. data/lib/rouge/lexers/jsonnet.rb +151 -0
  220. data/lib/rouge/lexers/jsx.rb +102 -0
  221. data/lib/rouge/lexers/julia.rb +172 -0
  222. data/lib/rouge/lexers/kotlin.rb +79 -0
  223. data/lib/rouge/lexers/lasso.rb +214 -0
  224. data/lib/rouge/lexers/lasso/keywords.yml +446 -0
  225. data/lib/rouge/lexers/liquid.rb +287 -0
  226. data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
  227. data/lib/rouge/lexers/literate_haskell.rb +36 -0
  228. data/lib/rouge/lexers/llvm.rb +80 -0
  229. data/lib/rouge/lexers/lua.rb +125 -0
  230. data/lib/rouge/lexers/lua/builtins.rb +22 -0
  231. data/lib/rouge/lexers/make.rb +112 -0
  232. data/lib/rouge/lexers/markdown.rb +154 -0
  233. data/lib/rouge/lexers/matlab.rb +71 -0
  234. data/lib/rouge/lexers/matlab/builtins.rb +11 -0
  235. data/lib/rouge/lexers/moonscript.rb +114 -0
  236. data/lib/rouge/lexers/mosel.rb +231 -0
  237. data/lib/rouge/lexers/mxml.rb +68 -0
  238. data/lib/rouge/lexers/nasm.rb +198 -0
  239. data/lib/rouge/lexers/nginx.rb +71 -0
  240. data/lib/rouge/lexers/nim.rb +152 -0
  241. data/lib/rouge/lexers/nix.rb +205 -0
  242. data/lib/rouge/lexers/objective_c.rb +194 -0
  243. data/lib/rouge/lexers/ocaml.rb +100 -0
  244. data/lib/rouge/lexers/pascal.rb +66 -0
  245. data/lib/rouge/lexers/perl.rb +196 -0
  246. data/lib/rouge/lexers/php.rb +193 -0
  247. data/lib/rouge/lexers/php/builtins.rb +194 -0
  248. data/lib/rouge/lexers/plain_text.rb +26 -0
  249. data/lib/rouge/lexers/plist.rb +45 -0
  250. data/lib/rouge/lexers/pony.rb +93 -0
  251. data/lib/rouge/lexers/powershell.rb +678 -0
  252. data/lib/rouge/lexers/praat.rb +350 -0
  253. data/lib/rouge/lexers/prolog.rb +59 -0
  254. data/lib/rouge/lexers/prometheus.rb +121 -0
  255. data/lib/rouge/lexers/properties.rb +51 -0
  256. data/lib/rouge/lexers/protobuf.rb +70 -0
  257. data/lib/rouge/lexers/puppet.rb +128 -0
  258. data/lib/rouge/lexers/python.rb +232 -0
  259. data/lib/rouge/lexers/q.rb +123 -0
  260. data/lib/rouge/lexers/qml.rb +73 -0
  261. data/lib/rouge/lexers/r.rb +89 -0
  262. data/lib/rouge/lexers/racket.rb +543 -0
  263. data/lib/rouge/lexers/ruby.rb +437 -0
  264. data/lib/rouge/lexers/rust.rb +192 -0
  265. data/lib/rouge/lexers/sass.rb +74 -0
  266. data/lib/rouge/lexers/sass/common.rb +180 -0
  267. data/lib/rouge/lexers/scala.rb +142 -0
  268. data/lib/rouge/lexers/scheme.rb +112 -0
  269. data/lib/rouge/lexers/scss.rb +34 -0
  270. data/lib/rouge/lexers/sed.rb +172 -0
  271. data/lib/rouge/lexers/shell.rb +189 -0
  272. data/lib/rouge/lexers/sieve.rb +96 -0
  273. data/lib/rouge/lexers/slim.rb +228 -0
  274. data/lib/rouge/lexers/smalltalk.rb +116 -0
  275. data/lib/rouge/lexers/smarty.rb +80 -0
  276. data/lib/rouge/lexers/sml.rb +344 -0
  277. data/lib/rouge/lexers/sql.rb +140 -0
  278. data/lib/rouge/lexers/swift.rb +181 -0
  279. data/lib/rouge/lexers/tap.rb +87 -0
  280. data/lib/rouge/lexers/tcl.rb +192 -0
  281. data/lib/rouge/lexers/tex.rb +69 -0
  282. data/lib/rouge/lexers/toml.rb +67 -0
  283. data/lib/rouge/lexers/tsx.rb +19 -0
  284. data/lib/rouge/lexers/tulip.rb +106 -0
  285. data/lib/rouge/lexers/turtle.rb +63 -0
  286. data/lib/rouge/lexers/twig.rb +39 -0
  287. data/lib/rouge/lexers/typescript.rb +22 -0
  288. data/lib/rouge/lexers/typescript/common.rb +33 -0
  289. data/lib/rouge/lexers/vala.rb +77 -0
  290. data/lib/rouge/lexers/vb.rb +164 -0
  291. data/lib/rouge/lexers/verilog.rb +164 -0
  292. data/lib/rouge/lexers/vhdl.rb +97 -0
  293. data/lib/rouge/lexers/viml.rb +101 -0
  294. data/lib/rouge/lexers/viml/keywords.rb +12 -0
  295. data/lib/rouge/lexers/vue.rb +122 -0
  296. data/lib/rouge/lexers/wollok.rb +103 -0
  297. data/lib/rouge/lexers/xml.rb +57 -0
  298. data/lib/rouge/lexers/yaml.rb +373 -0
  299. data/lib/rouge/plugins/redcarpet.rb +30 -0
  300. data/lib/rouge/regex_lexer.rb +441 -0
  301. data/lib/rouge/template_lexer.rb +20 -0
  302. data/lib/rouge/text_analyzer.rb +49 -0
  303. data/lib/rouge/theme.rb +213 -0
  304. data/lib/rouge/themes/base16.rb +130 -0
  305. data/lib/rouge/themes/colorful.rb +67 -0
  306. data/lib/rouge/themes/github.rb +71 -0
  307. data/lib/rouge/themes/gruvbox.rb +167 -0
  308. data/lib/rouge/themes/igor_pro.rb +20 -0
  309. data/lib/rouge/themes/molokai.rb +82 -0
  310. data/lib/rouge/themes/monokai.rb +92 -0
  311. data/lib/rouge/themes/monokai_sublime.rb +90 -0
  312. data/lib/rouge/themes/pastie.rb +69 -0
  313. data/lib/rouge/themes/thankful_eyes.rb +74 -0
  314. data/lib/rouge/themes/tulip.rb +69 -0
  315. data/lib/rouge/token.rb +182 -0
  316. data/lib/rouge/util.rb +101 -0
  317. data/lib/rouge/version.rb +7 -0
  318. data/rouge.gemspec +23 -0
  319. metadata +365 -0
@@ -0,0 +1,53 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class INI < RegexLexer
6
+ title "INI"
7
+ desc 'the INI configuration format'
8
+ tag 'ini'
9
+
10
+ # TODO add more here
11
+ filenames '*.ini', '*.INI', '*.gitconfig'
12
+ mimetypes 'text/x-ini'
13
+
14
+ identifier = /[\w\-.]+/
15
+
16
+ state :basic do
17
+ rule /[;#].*?\n/, Comment
18
+ rule /\s+/, Text
19
+ rule /\\\n/, Str::Escape
20
+ end
21
+
22
+ state :root do
23
+ mixin :basic
24
+
25
+ rule /(#{identifier})(\s*)(=)/ do
26
+ groups Name::Property, Text, Punctuation
27
+ push :value
28
+ end
29
+
30
+ rule /\[.*?\]/, Name::Namespace
31
+ end
32
+
33
+ state :value do
34
+ rule /\n/, Text, :pop!
35
+ mixin :basic
36
+ rule /"/, Str, :dq
37
+ rule /'.*?'/, Str
38
+ mixin :esc_str
39
+ rule /[^\\\n]+/, Str
40
+ end
41
+
42
+ state :dq do
43
+ rule /"/, Str, :pop!
44
+ mixin :esc_str
45
+ rule /[^\\"]+/m, Str
46
+ end
47
+
48
+ state :esc_str do
49
+ rule /\\./m, Str::Escape
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,68 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class IO < RegexLexer
6
+ tag 'io'
7
+ title "Io"
8
+ desc 'The IO programming language (http://iolanguage.com)'
9
+ mimetypes 'text/x-iosrc'
10
+ filenames '*.io'
11
+
12
+ def self.detect?(text)
13
+ return true if text.shebang? 'io'
14
+ end
15
+
16
+ def self.constants
17
+ @constants ||= Set.new %w(nil false true)
18
+ end
19
+
20
+ def self.builtins
21
+ @builtins ||= Set.new %w(
22
+ args call clone do doFile doString else elseif for if list
23
+ method return super then
24
+ )
25
+ end
26
+
27
+ state :root do
28
+ rule /\s+/m, Text
29
+ rule %r(//.*?\n), Comment::Single
30
+ rule %r(#.*?\n), Comment::Single
31
+ rule %r(/(\\\n)?[*].*?[*](\\\n)?/)m, Comment::Multiline
32
+ rule %r(/[+]), Comment::Multiline, :nested_comment
33
+
34
+ rule /"(\\\\|\\"|[^"])*"/, Str
35
+
36
+ rule %r(:?:=), Keyword
37
+ rule /[()]/, Punctuation
38
+
39
+ rule %r([-=;,*+><!/|^.%&\[\]{}]), Operator
40
+
41
+ rule /[A-Z]\w*/, Name::Class
42
+
43
+ rule /[a-z_]\w*/ do |m|
44
+ name = m[0]
45
+
46
+ if self.class.constants.include? name
47
+ token Keyword::Constant
48
+ elsif self.class.builtins.include? name
49
+ token Name::Builtin
50
+ else
51
+ token Name
52
+ end
53
+ end
54
+
55
+ rule %r((\d+[.]?\d*|\d*[.]\d+)(e[+-]?[0-9]+)?)i, Num::Float
56
+ rule /\d+/, Num::Integer
57
+
58
+ rule /@@?/, Keyword
59
+ end
60
+
61
+ state :nested_comment do
62
+ rule %r([^/+]+)m, Comment::Multiline
63
+ rule %r(/[+]), Comment::Multiline, :nested_comment
64
+ rule %r([+]/), Comment::Multiline, :pop!
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,66 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ load_lexer 'console.rb'
6
+
7
+ class IRBLexer < ConsoleLexer
8
+ tag 'irb'
9
+ aliases 'pry'
10
+
11
+ desc 'Shell sessions in IRB or Pry'
12
+
13
+ # unlike the superclass, we do not accept any options
14
+ @option_docs = {}
15
+
16
+ def output_lexer
17
+ @output_lexer ||= IRBOutputLexer.new(@options)
18
+ end
19
+
20
+ def lang_lexer
21
+ @lang_lexer ||= Ruby.new(@options)
22
+ end
23
+
24
+ def prompt_regex
25
+ /^.*?(irb|pry).*?[>"*]/
26
+ end
27
+
28
+ def allow_comments?
29
+ true
30
+ end
31
+ end
32
+
33
+ load_lexer 'ruby.rb'
34
+ class IRBOutputLexer < Ruby
35
+ tag 'irb_output'
36
+
37
+ start do
38
+ push :stdout
39
+ end
40
+
41
+ state :has_irb_output do
42
+ rule %r(=>), Punctuation, :pop!
43
+ rule /.+?(\n|$)/, Generic::Output
44
+ end
45
+
46
+ state :irb_error do
47
+ rule /.+?(\n|$)/, Generic::Error
48
+ mixin :has_irb_output
49
+ end
50
+
51
+ state :stdout do
52
+ rule /\w+?(Error|Exception):.+?(\n|$)/, Generic::Error, :irb_error
53
+ mixin :has_irb_output
54
+ end
55
+
56
+ prepend :root do
57
+ rule /#</, Keyword::Type, :irb_object
58
+ end
59
+
60
+ state :irb_object do
61
+ rule />/, Keyword::Type, :pop!
62
+ mixin :root
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,87 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Java < RegexLexer
6
+ title "Java"
7
+ desc "The Java programming language (java.com)"
8
+
9
+ tag 'java'
10
+ filenames '*.java'
11
+ mimetypes 'text/x-java'
12
+
13
+ keywords = %w(
14
+ assert break case catch continue default do else finally for
15
+ if goto instanceof new return switch this throw try while
16
+ )
17
+
18
+ declarations = %w(
19
+ abstract const enum extends final implements native private protected
20
+ public static strictfp super synchronized throws transient volatile
21
+ )
22
+
23
+ types = %w(boolean byte char double float int long short void)
24
+
25
+ id = /[a-zA-Z_][a-zA-Z0-9_]*/
26
+
27
+ state :root do
28
+ rule /[^\S\n]+/, Text
29
+ rule %r(//.*?$), Comment::Single
30
+ rule %r(/\*.*?\*/)m, Comment::Multiline
31
+ # keywords: go before method names to avoid lexing "throw new XYZ"
32
+ # as a method signature
33
+ rule /(?:#{keywords.join('|')})\b/, Keyword
34
+
35
+ rule %r(
36
+ (\s*(?:[a-zA-Z_][a-zA-Z0-9_.\[\]<>]*\s+)+?) # return arguments
37
+ ([a-zA-Z_][a-zA-Z0-9_]*) # method name
38
+ (\s*)(\() # signature start
39
+ )mx do |m|
40
+ # TODO: do this better, this shouldn't need a delegation
41
+ delegate Java, m[1]
42
+ token Name::Function, m[2]
43
+ token Text, m[3]
44
+ token Operator, m[4]
45
+ end
46
+
47
+ rule /@#{id}/, Name::Decorator
48
+ rule /(?:#{declarations.join('|')})\b/, Keyword::Declaration
49
+ rule /(?:#{types.join('|')})\b/, Keyword::Type
50
+ rule /package\b/, Keyword::Namespace
51
+ rule /(?:true|false|null)\b/, Keyword::Constant
52
+ rule /(?:class|interface)\b/, Keyword::Declaration, :class
53
+ rule /import\b/, Keyword::Namespace, :import
54
+ rule /"(\\\\|\\"|[^"])*"/, Str
55
+ rule /'(?:\\.|[^\\]|\\u[0-9a-f]{4})'/, Str::Char
56
+ rule /(\.)(#{id})/ do
57
+ groups Operator, Name::Attribute
58
+ end
59
+
60
+ rule /#{id}:/, Name::Label
61
+ rule /\$?#{id}/, Name
62
+ rule /[~^*!%&\[\](){}<>\|+=:;,.\/?-]/, Operator
63
+
64
+ digit = /[0-9]_+[0-9]|[0-9]/
65
+ bin_digit = /[01]_+[01]|[01]/
66
+ oct_digit = /[0-7]_+[0-7]|[0-7]/
67
+ hex_digit = /[0-9a-f]_+[0-9a-f]|[0-9a-f]/i
68
+ rule /#{digit}+\.#{digit}+([eE]#{digit}+)?[fd]?/, Num::Float
69
+ rule /0b#{bin_digit}+/i, Num::Bin
70
+ rule /0x#{hex_digit}+/i, Num::Hex
71
+ rule /0#{oct_digit}+/, Num::Oct
72
+ rule /#{digit}+L?/, Num::Integer
73
+ rule /\n/, Text
74
+ end
75
+
76
+ state :class do
77
+ rule /\s+/m, Text
78
+ rule id, Name::Class, :pop!
79
+ end
80
+
81
+ state :import do
82
+ rule /\s+/m, Text
83
+ rule /[a-z0-9_.]+\*?/i, Name::Namespace, :pop!
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,281 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ # IMPORTANT NOTICE:
6
+ #
7
+ # Please do not copy this lexer and open a pull request
8
+ # for a new language. It will not get merged, you will
9
+ # be unhappy, and kittens will cry.
10
+ #
11
+ class Javascript < RegexLexer
12
+ title "JavaScript"
13
+ desc "JavaScript, the browser scripting language"
14
+
15
+ tag 'javascript'
16
+ aliases 'js'
17
+ filenames '*.js', '*.mjs'
18
+ mimetypes 'application/javascript', 'application/x-javascript',
19
+ 'text/javascript', 'text/x-javascript'
20
+
21
+ def self.detect?(text)
22
+ return 1 if text.shebang?('node')
23
+ return 1 if text.shebang?('jsc')
24
+ # TODO: rhino, spidermonkey, etc
25
+ end
26
+
27
+ state :multiline_comment do
28
+ rule %r([*]/), Comment::Multiline, :pop!
29
+ rule %r([^*/]+), Comment::Multiline
30
+ rule %r([*/]), Comment::Multiline
31
+ end
32
+
33
+ state :comments_and_whitespace do
34
+ rule /\s+/, Text
35
+ rule /<!--/, Comment # really...?
36
+ rule %r(//.*?$), Comment::Single
37
+ rule %r(/[*]), Comment::Multiline, :multiline_comment
38
+ end
39
+
40
+ state :expr_start do
41
+ mixin :comments_and_whitespace
42
+
43
+ rule %r(/) do
44
+ token Str::Regex
45
+ goto :regex
46
+ end
47
+
48
+ rule /[{]/ do
49
+ token Punctuation
50
+ goto :object
51
+ end
52
+
53
+ rule //, Text, :pop!
54
+ end
55
+
56
+ state :regex do
57
+ rule %r(/) do
58
+ token Str::Regex
59
+ goto :regex_end
60
+ end
61
+
62
+ rule %r([^/]\n), Error, :pop!
63
+
64
+ rule /\n/, Error, :pop!
65
+ rule /\[\^/, Str::Escape, :regex_group
66
+ rule /\[/, Str::Escape, :regex_group
67
+ rule /\\./, Str::Escape
68
+ rule %r{[(][?][:=<!]}, Str::Escape
69
+ rule /[{][\d,]+[}]/, Str::Escape
70
+ rule /[()?]/, Str::Escape
71
+ rule /./, Str::Regex
72
+ end
73
+
74
+ state :regex_end do
75
+ rule /[gim]+/, Str::Regex, :pop!
76
+ rule(//) { pop! }
77
+ end
78
+
79
+ state :regex_group do
80
+ # specially highlight / in a group to indicate that it doesn't
81
+ # close the regex
82
+ rule /\//, Str::Escape
83
+
84
+ rule %r([^/]\n) do
85
+ token Error
86
+ pop! 2
87
+ end
88
+
89
+ rule /\]/, Str::Escape, :pop!
90
+ rule /\\./, Str::Escape
91
+ rule /./, Str::Regex
92
+ end
93
+
94
+ state :bad_regex do
95
+ rule /[^\n]+/, Error, :pop!
96
+ end
97
+
98
+ def self.keywords
99
+ @keywords ||= Set.new %w(
100
+ for in of while do break return continue switch case default
101
+ if else throw try catch finally new delete typeof instanceof
102
+ void this yield import export from as async super this
103
+ )
104
+ end
105
+
106
+ def self.declarations
107
+ @declarations ||= Set.new %w(
108
+ var let const with function class
109
+ extends constructor get set
110
+ )
111
+ end
112
+
113
+ def self.reserved
114
+ @reserved ||= Set.new %w(
115
+ abstract boolean byte char debugger double enum
116
+ final float goto implements int interface
117
+ long native package private protected public short static
118
+ synchronized throws transient volatile
119
+ eval arguments await
120
+ )
121
+ end
122
+
123
+ def self.constants
124
+ @constants ||= Set.new %w(true false null NaN Infinity undefined)
125
+ end
126
+
127
+ def self.builtins
128
+ @builtins ||= %w(
129
+ Array Boolean Date Error Function Math netscape
130
+ Number Object Packages RegExp String sun decodeURI
131
+ decodeURIComponent encodeURI encodeURIComponent
132
+ Error eval isFinite isNaN parseFloat parseInt
133
+ document window navigator self global
134
+ Promise Set Map WeakSet WeakMap Symbol Proxy Reflect
135
+ Int8Array Uint8Array Uint8ClampedArray
136
+ Int16Array Uint16Array Uint16ClampedArray
137
+ Int32Array Uint32Array Uint32ClampedArray
138
+ Float32Array Float64Array DataView ArrayBuffer
139
+ )
140
+ end
141
+
142
+ def self.id_regex
143
+ /[$a-z_][a-z0-9_]*/io
144
+ end
145
+
146
+ id = self.id_regex
147
+
148
+ state :root do
149
+ rule /\A\s*#!.*?\n/m, Comment::Preproc, :statement
150
+ rule %r((?<=\n)(?=\s|/|<!--)), Text, :expr_start
151
+ mixin :comments_and_whitespace
152
+ rule %r(\+\+ | -- | ~ | && | \|\| | \\(?=\n) | << | >>>? | ===
153
+ | !== )x,
154
+ Operator, :expr_start
155
+ rule %r([-<>+*%&|\^/!=]=?), Operator, :expr_start
156
+ rule /[(\[,]/, Punctuation, :expr_start
157
+ rule /;/, Punctuation, :statement
158
+ rule /[)\].]/, Punctuation
159
+
160
+ rule /`/ do
161
+ token Str::Double
162
+ push :template_string
163
+ end
164
+
165
+ rule /[?]/ do
166
+ token Punctuation
167
+ push :ternary
168
+ push :expr_start
169
+ end
170
+
171
+ rule /(\@)(\w+)?/ do
172
+ groups Punctuation, Name::Decorator
173
+ push :expr_start
174
+ end
175
+
176
+ rule /[{}]/, Punctuation, :statement
177
+
178
+ rule id do |m|
179
+ if self.class.keywords.include? m[0]
180
+ token Keyword
181
+ push :expr_start
182
+ elsif self.class.declarations.include? m[0]
183
+ token Keyword::Declaration
184
+ push :expr_start
185
+ elsif self.class.reserved.include? m[0]
186
+ token Keyword::Reserved
187
+ elsif self.class.constants.include? m[0]
188
+ token Keyword::Constant
189
+ elsif self.class.builtins.include? m[0]
190
+ token Name::Builtin
191
+ else
192
+ token Name::Other
193
+ end
194
+ end
195
+
196
+ rule /[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?/, Num::Float
197
+ rule /0x[0-9a-fA-F]+/i, Num::Hex
198
+ rule /0o[0-7][0-7_]*/i, Num::Oct
199
+ rule /0b[01][01_]*/i, Num::Bin
200
+ rule /[0-9]+/, Num::Integer
201
+
202
+ rule /"/, Str::Double, :dq
203
+ rule /'/, Str::Single, :sq
204
+ rule /:/, Punctuation
205
+ end
206
+
207
+ state :dq do
208
+ rule /[^\\"]+/, Str::Double
209
+ rule /\\"/, Str::Escape
210
+ rule /"/, Str::Double, :pop!
211
+ end
212
+
213
+ state :sq do
214
+ rule /[^\\']+/, Str::Single
215
+ rule /\\'/, Str::Escape
216
+ rule /'/, Str::Single, :pop!
217
+ end
218
+
219
+ # braced parts that aren't object literals
220
+ state :statement do
221
+ rule /case\b/ do
222
+ token Keyword
223
+ goto :expr_start
224
+ end
225
+
226
+ rule /(#{id})(\s*)(:)/ do
227
+ groups Name::Label, Text, Punctuation
228
+ end
229
+
230
+ rule /[{}]/, Punctuation
231
+
232
+ mixin :expr_start
233
+ end
234
+
235
+ # object literals
236
+ state :object do
237
+ mixin :comments_and_whitespace
238
+
239
+ rule /[{]/ do
240
+ token Punctuation
241
+ push
242
+ end
243
+
244
+ rule /[}]/ do
245
+ token Punctuation
246
+ goto :statement
247
+ end
248
+
249
+ rule /(#{id})(\s*)(:)/ do
250
+ groups Name::Attribute, Text, Punctuation
251
+ push :expr_start
252
+ end
253
+
254
+ rule /:/, Punctuation
255
+ mixin :root
256
+ end
257
+
258
+ # ternary expressions, where <id>: is not a label!
259
+ state :ternary do
260
+ rule /:/ do
261
+ token Punctuation
262
+ goto :expr_start
263
+ end
264
+
265
+ mixin :root
266
+ end
267
+
268
+ # template strings
269
+ state :template_string do
270
+ rule /\${/, Punctuation, :template_string_expr
271
+ rule /`/, Str::Double, :pop!
272
+ rule /(\\\\|\\[\$`]|[^\$`]|\$(?!{))*/, Str::Double
273
+ end
274
+
275
+ state :template_string_expr do
276
+ rule /}/, Punctuation, :pop!
277
+ mixin :root
278
+ end
279
+ end
280
+ end
281
+ end