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,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