rougegal 2.1.2

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 (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,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,191 @@
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.analyze_text(text)
12
+ return 0.3 if text.include? "Require"
13
+ end
14
+
15
+ def self.gallina
16
+ @gallina ||= Set.new %w(
17
+ as fun if in let match then else return end Type Set Prop
18
+ forall
19
+ )
20
+ end
21
+
22
+ def self.coq
23
+ @coq ||= Set.new %w(
24
+ Definition Theorem Lemma Remark Example Fixpoint CoFixpoint
25
+ Record Inductive CoInductive Corollary Goal Proof
26
+ Ltac Require Import Export Module Section End Variable
27
+ Context Polymorphic Monomorphic Universe Universes
28
+ Variables Class Instance Global Local Include
29
+ Printing Notation Infix Arguments Hint Rewrite Immediate
30
+ Qed Defined Opaque Transparent Existing
31
+ Compute Eval Print SearchAbout Search About Check
32
+ )
33
+ end
34
+
35
+ def self.ltac
36
+ @ltac ||= Set.new %w(
37
+ apply eapply auto eauto rewrite setoid_rewrite
38
+ with in as at destruct split inversion injection
39
+ intro intros unfold fold cbv cbn lazy subst
40
+ clear symmetry transitivity etransitivity erewrite
41
+ edestruct constructor econstructor eexists exists
42
+ f_equal refine instantiate revert simpl
43
+ specialize generalize dependent red induction
44
+ beta iota zeta delta exfalso autorewrite setoid_rewrite
45
+ compute vm_compute native_compute
46
+ )
47
+ end
48
+
49
+ def self.tacticals
50
+ @tacticals ||= Set.new %w(
51
+ repeat first try
52
+ )
53
+ end
54
+
55
+ def self.terminators
56
+ @terminators ||= Set.new %w(
57
+ omega solve congruence reflexivity exact
58
+ assumption eassumption
59
+ )
60
+ end
61
+
62
+ def self.keyopts
63
+ @keyopts ||= Set.new %w(
64
+ := => -> /\\ \\/ _ ; :> :
65
+ )
66
+ end
67
+
68
+ def self.end_sentence
69
+ @end_sentence ||= Punctuation::Indicator
70
+ end
71
+
72
+ def self.classify(x)
73
+ if self.coq.include? x
74
+ return Keyword
75
+ elsif self.gallina.include? x
76
+ return Keyword::Reserved
77
+ elsif self.ltac.include? x
78
+ return Keyword::Pseudo
79
+ elsif self.terminators.include? x
80
+ return Name::Exception
81
+ elsif self.tacticals.include? x
82
+ return Keyword::Pseudo
83
+ else
84
+ return Name::Constant
85
+ end
86
+ end
87
+
88
+ operator = %r([\[\];,{}_()!$%&*+./:<=>?@^|~#-]+)
89
+ id = /(?:[a-z][\w']*)|(?:[_a-z][\w']+)/i
90
+ dot_id = /\.((?:[a-z][\w']*)|(?:[_a-z][\w']+))/i
91
+ dot_space = /\.(\s+)/
92
+ module_type = /Module(\s+)Type(\s+)/
93
+ set_options = /(Set|Unset)(\s+)(Universe|Printing|Implicit|Strict)(\s+)(Polymorphism|All|Notations|Arguments|Universes|Implicit)(\s*)\./m
94
+
95
+ state :root do
96
+ rule /[(][*](?![)])/, Comment, :comment
97
+ rule /\s+/m, Text::Whitespace
98
+ rule module_type do |m|
99
+ token Keyword , 'Module'
100
+ token Text::Whitespace , m[1]
101
+ token Keyword , 'Type'
102
+ token Text::Whitespace , m[2]
103
+ end
104
+ rule set_options do |m|
105
+ token Keyword , m[1]
106
+ i = 2
107
+ while m[i] != ''
108
+ token Text::Whitespace , m[i]
109
+ token Keyword , m[i+1]
110
+ i += 2
111
+ end
112
+ token self.class.end_sentence , '.'
113
+ end
114
+ rule id do |m|
115
+ @name = m[0]
116
+ @continue = false
117
+ push :continue_id
118
+ end
119
+ rule /\/\\/, Operator
120
+ rule /\\\//, Operator
121
+ rule operator do |m|
122
+ match = m[0]
123
+ if self.class.keyopts.include? match
124
+ token Punctuation
125
+ else
126
+ token Operator
127
+ end
128
+ end
129
+
130
+ rule /-?\d[\d_]*(.[\d_]*)?(e[+-]?\d[\d_]*)/i, Num::Float
131
+ rule /\d[\d_]*/, Num::Integer
132
+
133
+ rule /'(?:(\\[\\"'ntbr ])|(\\[0-9]{3})|(\\x\h{2}))'/, Str::Char
134
+ rule /'/, Keyword
135
+ rule /"/, Str::Double, :string
136
+ rule /[~?]#{id}/, Name::Variable
137
+ end
138
+
139
+ state :comment do
140
+ rule /[^(*)]+/, Comment
141
+ rule(/[(][*]/) { token Comment; push }
142
+ rule /[*][)]/, Comment, :pop!
143
+ rule /[(*)]/, Comment
144
+ end
145
+
146
+ state :string do
147
+ rule /[^\\"]+/, Str::Double
148
+ mixin :escape_sequence
149
+ rule /\\\n/, Str::Double
150
+ rule /"/, Str::Double, :pop!
151
+ end
152
+
153
+ state :escape_sequence do
154
+ rule /\\[\\"'ntbr]/, Str::Escape
155
+ end
156
+
157
+ state :continue_id do
158
+ # the stream starts with an id (stored in @name) and continues here
159
+ rule dot_id do |m|
160
+ token Name::Namespace , @name
161
+ token Punctuation , '.'
162
+ @continue = true
163
+ @name = m[1]
164
+ end
165
+ rule dot_space do |m|
166
+ if @continue
167
+ token Name::Constant , @name
168
+ else
169
+ token self.class.classify(@name) , @name
170
+ end
171
+ token self.class.end_sentence , '.'
172
+ token Text::Whitespace , m[1]
173
+ @name = false
174
+ @continue = false
175
+ pop!
176
+ end
177
+ rule // do
178
+ if @continue
179
+ token Name::Constant , @name
180
+ else
181
+ token self.class.classify(@name) , @name
182
+ end
183
+ @name = false
184
+ @continue = false
185
+ pop!
186
+ end
187
+ end
188
+
189
+ end
190
+ end
191
+ 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