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,24 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Conf < RegexLexer
6
+ tag 'conf'
7
+ aliases 'config', 'configuration'
8
+
9
+ title "Config File"
10
+ desc 'A generic lexer for configuration files'
11
+ filenames '*.conf', '*.config'
12
+
13
+ # short and sweet
14
+ state :root do
15
+ rule /#.*?\n/, Comment
16
+ rule /".*?"/, Str::Double
17
+ rule /'.*?'/, Str::Single
18
+ rule /[a-z]\w*/i, Name
19
+ rule /\d+/, Num
20
+ rule /[^\d\w#"']+/, Text
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,136 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class ConsoleLexer < Lexer
6
+ tag 'console'
7
+ aliases 'terminal', 'shell_session', 'shell-session'
8
+ filenames '*.cap'
9
+ desc 'A generic lexer for shell sessions. Accepts ?lang and ?output lexer options, a ?prompt option, and ?comments to enable # comments.'
10
+
11
+ option :lang, 'the shell language to lex (default: shell)'
12
+ option :output, 'the output language (default: plaintext?token=Generic.Output)'
13
+ option :prompt, 'comma-separated list of strings that indicate the end of a prompt. (default: $,#,>,;)'
14
+ option :comments, 'enable hash-comments at the start of a line - otherwise interpreted as a prompt. (default: false, implied by ?prompt not containing `#`)'
15
+
16
+ def initialize(*)
17
+ super
18
+ @prompt = list_option(:prompt) { nil }
19
+ @lang = lexer_option(:lang) { 'shell' }
20
+ @output = lexer_option(:output) { PlainText.new(token: Generic::Output) }
21
+ @comments = bool_option(:comments) { :guess }
22
+ end
23
+
24
+ def prompt_regex
25
+ @prompt_regex ||= begin
26
+ /^#{prompt_prefix_regex}(?:#{end_chars.map(&Regexp.method(:escape)).join('|')})/
27
+ end
28
+ end
29
+
30
+ def end_chars
31
+ @end_chars ||= if @prompt.any?
32
+ @prompt.reject { |c| c.empty? }
33
+ else
34
+ %w($ # > ;)
35
+ end
36
+ end
37
+
38
+ # whether to allow comments. if manually specifying a prompt that isn't
39
+ # simply "#", we flag this to on
40
+ def allow_comments?
41
+ case @comments
42
+ when :guess
43
+ @prompt && !@prompt.empty? && !end_chars.include?('#')
44
+ else
45
+ @comments
46
+ end
47
+ end
48
+
49
+ def prompt_prefix_regex
50
+ if allow_comments?
51
+ /[^<#]*?/m
52
+ else
53
+ /.*?/m
54
+ end
55
+ end
56
+
57
+ def lang_lexer
58
+ @lang_lexer ||= case @lang
59
+ when Lexer
60
+ @lang
61
+ when nil
62
+ Shell.new(options)
63
+ when Class
64
+ @lang.new(options)
65
+ when String
66
+ Lexer.find(@lang).new(options)
67
+ end
68
+ end
69
+
70
+ def output_lexer
71
+ @output_lexer ||= case @output
72
+ when nil
73
+ PlainText.new(token: Generic::Output)
74
+ when Lexer
75
+ @output
76
+ when Class
77
+ @output.new(options)
78
+ when String
79
+ Lexer.find(@output).new(options)
80
+ end
81
+ end
82
+
83
+ def line_regex
84
+ /(\\.|[^\\])*?(\n|$)/m
85
+ end
86
+
87
+ def comment_regex
88
+ /\A\s*?#/
89
+ end
90
+
91
+ def stream_tokens(input, &output)
92
+ input = StringScanner.new(input)
93
+ lang_lexer.reset!
94
+ output_lexer.reset!
95
+
96
+ process_line(input, &output) while !input.eos?
97
+ end
98
+
99
+ def process_line(input, &output)
100
+ input.scan(line_regex)
101
+
102
+ if input[0] =~ /\A\s*(?:<[.]+>|[.]+)\s*\z/
103
+ puts "console: matched snip #{input[0].inspect}" if @debug
104
+ output_lexer.reset!
105
+ lang_lexer.reset!
106
+
107
+ yield Comment, input[0]
108
+ elsif prompt_regex =~ input[0]
109
+ puts "console: matched prompt #{input[0].inspect}" if @debug
110
+ output_lexer.reset!
111
+
112
+ yield Generic::Prompt, $&
113
+
114
+ # make sure to take care of initial whitespace
115
+ # before we pass to the lang lexer so it can determine where
116
+ # the "real" beginning of the line is
117
+ $' =~ /\A\s*/
118
+ yield Text, $& unless $&.empty?
119
+
120
+ lang_lexer.lex($', continue: true, &output)
121
+ elsif comment_regex =~ input[0].strip
122
+ puts "console: matched comment #{input[0].inspect}" if @debug
123
+ output_lexer.reset!
124
+ lang_lexer.reset!
125
+
126
+ yield Comment, input[0]
127
+ else
128
+ puts "console: matched output #{input[0].inspect}" if @debug
129
+ lang_lexer.reset!
130
+
131
+ output_lexer.lex(input[0], continue: true, &output)
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,187 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Coq < RegexLexer
6
+ title "Coq"
7
+ desc 'Coq (coq.inria.fr)'
8
+ tag 'coq'
9
+ mimetypes 'text/x-coq'
10
+
11
+ def self.gallina
12
+ @gallina ||= Set.new %w(
13
+ as fun if in let match then else return end Type Set Prop
14
+ forall
15
+ )
16
+ end
17
+
18
+ def self.coq
19
+ @coq ||= Set.new %w(
20
+ Definition Theorem Lemma Remark Example Fixpoint CoFixpoint
21
+ Record Inductive CoInductive Corollary Goal Proof
22
+ Ltac Require Import Export Module Section End Variable
23
+ Context Polymorphic Monomorphic Universe Universes
24
+ Variables Class Instance Global Local Include
25
+ Printing Notation Infix Arguments Hint Rewrite Immediate
26
+ Qed Defined Opaque Transparent Existing
27
+ Compute Eval Print SearchAbout Search About Check
28
+ )
29
+ end
30
+
31
+ def self.ltac
32
+ @ltac ||= Set.new %w(
33
+ apply eapply auto eauto rewrite setoid_rewrite
34
+ with in as at destruct split inversion injection
35
+ intro intros unfold fold cbv cbn lazy subst
36
+ clear symmetry transitivity etransitivity erewrite
37
+ edestruct constructor econstructor eexists exists
38
+ f_equal refine instantiate revert simpl
39
+ specialize generalize dependent red induction
40
+ beta iota zeta delta exfalso autorewrite setoid_rewrite
41
+ compute vm_compute native_compute
42
+ )
43
+ end
44
+
45
+ def self.tacticals
46
+ @tacticals ||= Set.new %w(
47
+ repeat first try
48
+ )
49
+ end
50
+
51
+ def self.terminators
52
+ @terminators ||= Set.new %w(
53
+ omega solve congruence reflexivity exact
54
+ assumption eassumption
55
+ )
56
+ end
57
+
58
+ def self.keyopts
59
+ @keyopts ||= Set.new %w(
60
+ := => -> /\\ \\/ _ ; :> :
61
+ )
62
+ end
63
+
64
+ def self.end_sentence
65
+ @end_sentence ||= Punctuation::Indicator
66
+ end
67
+
68
+ def self.classify(x)
69
+ if self.coq.include? x
70
+ return Keyword
71
+ elsif self.gallina.include? x
72
+ return Keyword::Reserved
73
+ elsif self.ltac.include? x
74
+ return Keyword::Pseudo
75
+ elsif self.terminators.include? x
76
+ return Name::Exception
77
+ elsif self.tacticals.include? x
78
+ return Keyword::Pseudo
79
+ else
80
+ return Name::Constant
81
+ end
82
+ end
83
+
84
+ operator = %r([\[\];,{}_()!$%&*+./:<=>?@^|~#-]+)
85
+ id = /(?:[a-z][\w']*)|(?:[_a-z][\w']+)/i
86
+ dot_id = /\.((?:[a-z][\w']*)|(?:[_a-z][\w']+))/i
87
+ dot_space = /\.(\s+)/
88
+ module_type = /Module(\s+)Type(\s+)/
89
+ set_options = /(Set|Unset)(\s+)(Universe|Printing|Implicit|Strict)(\s+)(Polymorphism|All|Notations|Arguments|Universes|Implicit)(\s*)\./m
90
+
91
+ state :root do
92
+ rule /[(][*](?![)])/, Comment, :comment
93
+ rule /\s+/m, Text::Whitespace
94
+ rule module_type do |m|
95
+ token Keyword , 'Module'
96
+ token Text::Whitespace , m[1]
97
+ token Keyword , 'Type'
98
+ token Text::Whitespace , m[2]
99
+ end
100
+ rule set_options do |m|
101
+ token Keyword , m[1]
102
+ i = 2
103
+ while m[i] != ''
104
+ token Text::Whitespace , m[i]
105
+ token Keyword , m[i+1]
106
+ i += 2
107
+ end
108
+ token self.class.end_sentence , '.'
109
+ end
110
+ rule id do |m|
111
+ @name = m[0]
112
+ @continue = false
113
+ push :continue_id
114
+ end
115
+ rule /\/\\/, Operator
116
+ rule /\\\//, Operator
117
+ rule operator do |m|
118
+ match = m[0]
119
+ if self.class.keyopts.include? match
120
+ token Punctuation
121
+ else
122
+ token Operator
123
+ end
124
+ end
125
+
126
+ rule /-?\d[\d_]*(.[\d_]*)?(e[+-]?\d[\d_]*)/i, Num::Float
127
+ rule /\d[\d_]*/, Num::Integer
128
+
129
+ rule /'(?:(\\[\\"'ntbr ])|(\\[0-9]{3})|(\\x\h{2}))'/, Str::Char
130
+ rule /'/, Keyword
131
+ rule /"/, Str::Double, :string
132
+ rule /[~?]#{id}/, Name::Variable
133
+ end
134
+
135
+ state :comment do
136
+ rule /[^(*)]+/, Comment
137
+ rule(/[(][*]/) { token Comment; push }
138
+ rule /[*][)]/, Comment, :pop!
139
+ rule /[(*)]/, Comment
140
+ end
141
+
142
+ state :string do
143
+ rule /[^\\"]+/, Str::Double
144
+ mixin :escape_sequence
145
+ rule /\\\n/, Str::Double
146
+ rule /"/, Str::Double, :pop!
147
+ end
148
+
149
+ state :escape_sequence do
150
+ rule /\\[\\"'ntbr]/, Str::Escape
151
+ end
152
+
153
+ state :continue_id do
154
+ # the stream starts with an id (stored in @name) and continues here
155
+ rule dot_id do |m|
156
+ token Name::Namespace , @name
157
+ token Punctuation , '.'
158
+ @continue = true
159
+ @name = m[1]
160
+ end
161
+ rule dot_space do |m|
162
+ if @continue
163
+ token Name::Constant , @name
164
+ else
165
+ token self.class.classify(@name) , @name
166
+ end
167
+ token self.class.end_sentence , '.'
168
+ token Text::Whitespace , m[1]
169
+ @name = false
170
+ @continue = false
171
+ pop!
172
+ end
173
+ rule // do
174
+ if @continue
175
+ token Name::Constant , @name
176
+ else
177
+ token self.class.classify(@name) , @name
178
+ end
179
+ @name = false
180
+ @continue = false
181
+ pop!
182
+ end
183
+ end
184
+
185
+ end
186
+ end
187
+ end
@@ -0,0 +1,78 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ load_lexer 'c.rb'
6
+
7
+ class Cpp < C
8
+ title "C++"
9
+ desc "The C++ programming language"
10
+
11
+ tag 'cpp'
12
+ aliases 'c++'
13
+ # the many varied filenames of c++ source files...
14
+ filenames '*.cpp', '*.hpp',
15
+ '*.c++', '*.h++',
16
+ '*.cc', '*.hh',
17
+ '*.cxx', '*.hxx',
18
+ '*.pde', '*.ino',
19
+ '*.tpp'
20
+ mimetypes 'text/x-c++hdr', 'text/x-c++src'
21
+
22
+ def self.keywords
23
+ @keywords ||= super + Set.new(%w(
24
+ asm auto catch const_cast delete dynamic_cast explicit export
25
+ friend mutable namespace new operator private protected public
26
+ reinterpret_cast restrict size_of static_cast template this throw
27
+ throws typeid typename using virtual final override
28
+
29
+ alignas alignof constexpr decltype noexcept static_assert
30
+ thread_local try
31
+ ))
32
+ end
33
+
34
+ def self.keywords_type
35
+ @keywords_type ||= super + Set.new(%w(
36
+ bool
37
+ ))
38
+ end
39
+
40
+ def self.reserved
41
+ @reserved ||= super + Set.new(%w(
42
+ __virtual_inheritance __uuidof __super __single_inheritance
43
+ __multiple_inheritance __interface __event
44
+ ))
45
+ end
46
+
47
+ id = /[a-zA-Z_][a-zA-Z0-9_]*/
48
+
49
+ prepend :root do
50
+ # Offload C++ extensions, http://offload.codeplay.com/
51
+ rule /(?:__offload|__blockingoffload|__outer)\b/, Keyword::Pseudo
52
+ end
53
+
54
+ # digits with optional inner quotes
55
+ # see www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf
56
+ dq = /\d('?\d)*/
57
+
58
+ prepend :statements do
59
+ rule /class\b/, Keyword, :classname
60
+ rule %r((#{dq}[.]#{dq}?|[.]#{dq})(e[+-]?#{dq}[lu]*)?)i, Num::Float
61
+ rule %r(#{dq}e[+-]?#{dq}[lu]*)i, Num::Float
62
+ rule /0x\h('?\h)*[lu]*/i, Num::Hex
63
+ rule /0[0-7]('?[0-7])*[lu]*/i, Num::Oct
64
+ rule /#{dq}[lu]*/i, Num::Integer
65
+ rule /\bnullptr\b/, Name::Builtin
66
+ rule /(?:u8|u|U|L)?R"([a-zA-Z0-9_{}\[\]#<>%:;.?*\+\-\/\^&|~!=,"']{,16})\(.*?\)\1"/m, Str
67
+ end
68
+
69
+ state :classname do
70
+ rule id, Name::Class, :pop!
71
+
72
+ # template specification
73
+ rule /\s*(?=>)/m, Text, :pop!
74
+ mixin :whitespace
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,114 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class CSharp < RegexLexer
6
+ tag 'csharp'
7
+ aliases 'c#', 'cs'
8
+ filenames '*.cs'
9
+ mimetypes 'text/x-csharp'
10
+
11
+ title "C#"
12
+ desc 'a multi-paradigm language targeting .NET'
13
+
14
+ # TODO: support more of unicode
15
+ id = /@?[_a-z]\w*/i
16
+
17
+ #Reserved Identifiers
18
+ #Contextual Keywords
19
+ #LINQ Query Expressions
20
+ keywords = %w(
21
+ abstract as base break case catch checked const continue
22
+ default delegate do else enum event explicit extern false
23
+ finally fixed for foreach goto if implicit in interface
24
+ internal is lock new null operator out override params private
25
+ protected public readonly ref return sealed sizeof stackalloc
26
+ static switch this throw true try typeof unchecked unsafe
27
+ virtual void volatile while
28
+ add alias async await get global partial remove set value where
29
+ yield nameof
30
+ ascending by descending equals from group in into join let on
31
+ orderby select
32
+ )
33
+
34
+ keywords_type = %w(
35
+ bool byte char decimal double dynamic float int long object
36
+ sbyte short string uint ulong ushort var
37
+ )
38
+
39
+ cpp_keywords = %w(
40
+ if endif else elif define undef line error warning region
41
+ endregion pragma
42
+ )
43
+
44
+ state :whitespace do
45
+ rule /\s+/m, Text
46
+ rule %r(//.*?$), Comment::Single
47
+ rule %r(/[*].*?[*]/)m, Comment::Multiline
48
+ end
49
+
50
+ state :nest do
51
+ rule /{/, Punctuation, :nest
52
+ rule /}/, Punctuation, :pop!
53
+ mixin :root
54
+ end
55
+
56
+ state :splice_string do
57
+ rule /\\./, Str
58
+ rule /{/, Punctuation, :nest
59
+ rule /"|\n/, Str, :pop!
60
+ rule /./, Str
61
+ end
62
+
63
+ state :splice_literal do
64
+ rule /""/, Str
65
+ rule /{/, Punctuation, :nest
66
+ rule /"/, Str, :pop!
67
+ rule /./, Str
68
+ end
69
+
70
+ state :root do
71
+ mixin :whitespace
72
+
73
+ rule /^\s*\[.*?\]/, Name::Attribute
74
+ rule /[$]\s*"/, Str, :splice_string
75
+ rule /[$]@\s*"/, Str, :splice_literal
76
+
77
+ rule /(<\[)\s*(#{id}:)?/, Keyword
78
+ rule /\]>/, Keyword
79
+
80
+ rule /[~!%^&*()+=|\[\]{}:;,.<>\/?-]/, Punctuation
81
+ rule /@"(""|[^"])*"/m, Str
82
+ rule /"(\\.|.)*?["\n]/, Str
83
+ rule /'(\\.|.)'/, Str::Char
84
+ rule /0x[0-9a-f]+[lu]?/i, Num
85
+ rule %r(
86
+ [0-9]
87
+ ([.][0-9]*)? # decimal
88
+ (e[+-][0-9]+)? # exponent
89
+ [fldu]? # type
90
+ )ix, Num
91
+ rule /\b(?:class|struct|interface)\b/, Keyword, :class
92
+ rule /\b(?:namespace|using)\b/, Keyword, :namespace
93
+ rule /^#[ \t]*(#{cpp_keywords.join('|')})\b.*?\n/,
94
+ Comment::Preproc
95
+ rule /\b(#{keywords.join('|')})\b/, Keyword
96
+ rule /\b(#{keywords_type.join('|')})\b/, Keyword::Type
97
+ rule /#{id}(?=\s*[(])/, Name::Function
98
+ rule id, Name
99
+ end
100
+
101
+ state :class do
102
+ mixin :whitespace
103
+ rule id, Name::Class, :pop!
104
+ end
105
+
106
+ state :namespace do
107
+ mixin :whitespace
108
+ rule /(?=[(])/, Text, :pop!
109
+ rule /(#{id}|[.])+/, Name::Namespace, :pop!
110
+ end
111
+
112
+ end
113
+ end
114
+ end