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,71 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Nginx < RegexLexer
6
+ title "nginx"
7
+ desc 'configuration files for the nginx web server (nginx.org)'
8
+ tag 'nginx'
9
+ mimetypes 'text/x-nginx-conf'
10
+ filenames 'nginx.conf'
11
+
12
+ id = /[^\s$;{}()#]+/
13
+
14
+ state :root do
15
+ rule /(include)(\s+)([^\s;]+)/ do
16
+ groups Keyword, Text, Name
17
+ end
18
+
19
+ rule id, Keyword, :statement
20
+
21
+ mixin :base
22
+ end
23
+
24
+ state :block do
25
+ rule /}/, Punctuation, :pop!
26
+ rule id, Keyword::Namespace, :statement
27
+ mixin :base
28
+ end
29
+
30
+ state :statement do
31
+ rule /{/ do
32
+ token Punctuation; pop!; push :block
33
+ end
34
+
35
+ rule /;/, Punctuation, :pop!
36
+
37
+ mixin :base
38
+ end
39
+
40
+ state :base do
41
+ rule /\s+/, Text
42
+
43
+ rule /#.*?\n/, Comment::Single
44
+ rule /(?:on|off)\b/, Name::Constant
45
+ rule /[$][\w-]+/, Name::Variable
46
+
47
+ # host/port
48
+ rule /([a-z0-9.-]+)(:)([0-9]+)/i do
49
+ groups Name::Function, Punctuation, Num::Integer
50
+ end
51
+
52
+ # mimetype
53
+ rule %r([a-z-]+/[a-z-]+)i, Name::Class
54
+
55
+ rule /[0-9]+[kmg]?\b/i, Num::Integer
56
+ rule /(~)(\s*)([^\s{]+)/ do
57
+ groups Punctuation, Text, Str::Regex
58
+ end
59
+
60
+ rule /[:=~]/, Punctuation
61
+
62
+ # pathname
63
+ rule %r(/#{id}?), Name
64
+
65
+ rule /[^#\s;{}$\\]+/, Str # catchall
66
+
67
+ rule /[$;]/, Text
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,152 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Nim < RegexLexer
6
+ # This is pretty much a 1-1 port of the pygments NimrodLexer class
7
+ title "Nim"
8
+ desc "The Nim programming language (http://nim-lang.org/)"
9
+
10
+ tag 'nim'
11
+ aliases 'nimrod'
12
+ filenames '*.nim'
13
+
14
+ KEYWORDS = %w(
15
+ addr as asm atomic bind block break case cast const continue
16
+ converter defer discard distinct do elif else end enum except export
17
+ func finally for from generic if import include interface iterator let
18
+ macro method mixin nil object of out proc ptr raise ref return static
19
+ template try tuple type using var when while with without yield
20
+ )
21
+
22
+ OPWORDS = %w(
23
+ and or not xor shl shr div mod in notin is isnot
24
+ )
25
+
26
+ PSEUDOKEYWORDS = %w(
27
+ nil true false
28
+ )
29
+
30
+ TYPES = %w(
31
+ int int8 int16 int32 int64 float float32 float64 bool char range array
32
+ seq set string
33
+ )
34
+
35
+ NAMESPACE = %w(
36
+ from import include
37
+ )
38
+
39
+ def self.underscorize(words)
40
+ words.map do |w|
41
+ w.gsub(/./) { |x| "#{Regexp.escape(x)}_?" }
42
+ end.join('|')
43
+ end
44
+
45
+ state :chars do
46
+ rule(/\\([\\abcefnrtvl"\']|x[a-fA-F0-9]{2}|[0-9]{1,3})/, Str::Escape)
47
+ rule(/'/, Str::Char, :pop!)
48
+ rule(/./, Str::Char)
49
+ end
50
+
51
+ state :strings do
52
+ rule(/(?<!\$)\$(\d+|#|\w+)+/, Str::Interpol)
53
+ rule(/[^\\\'"\$\n]+/, Str)
54
+ rule(/[\'"\\]/, Str)
55
+ rule(/\$/, Str)
56
+ end
57
+
58
+ state :dqs do
59
+ rule(/\\([\\abcefnrtvl"\']|\n|x[a-fA-F0-9]{2}|[0-9]{1,3})/,
60
+ Str::Escape)
61
+ rule(/"/, Str, :pop!)
62
+ mixin :strings
63
+ end
64
+
65
+ state :rdqs do
66
+ rule(/"(?!")/, Str, :pop!)
67
+ rule(/"/, Str::Escape, :pop!)
68
+ mixin :strings
69
+ end
70
+
71
+ state :tdqs do
72
+ rule(/"""(?!")/, Str, :pop!)
73
+ mixin :strings
74
+ mixin :nl
75
+ end
76
+
77
+ state :funcname do
78
+ rule(/((?![\d_])\w)(((?!_)\w)|(_(?!_)\w))*/, Name::Function, :pop!)
79
+ rule(/`.+`/, Name::Function, :pop!)
80
+ end
81
+
82
+ state :nl do
83
+ rule(/\n/, Str)
84
+ end
85
+
86
+ state :floatnumber do
87
+ rule(/\.(?!\.)[0-9_]*/, Num::Float)
88
+ rule(/[eE][+-]?[0-9][0-9_]*/, Num::Float)
89
+ rule(//, Text, :pop!)
90
+ end
91
+
92
+ # Making apostrophes optional, as only hexadecimal with type suffix
93
+ # possibly ambiguous.
94
+ state :floatsuffix do
95
+ rule(/'?[fF](32|64)/, Num::Float)
96
+ rule(//, Text, :pop!)
97
+ end
98
+
99
+ state :intsuffix do
100
+ rule(/'?[iI](32|64)/, Num::Integer::Long)
101
+ rule(/'?[iI](8|16)/, Num::Integer)
102
+ rule(/'?[uU]/, Num::Integer)
103
+ rule(//, Text, :pop!)
104
+ end
105
+
106
+ state :root do
107
+ rule(/##.*$/, Str::Doc)
108
+ rule(/#.*$/, Comment)
109
+ rule(/\*|=|>|<|\+|-|\/|@|\$|~|&|%|\!|\?|\||\\|\[|\]/, Operator)
110
+ rule(/\.\.|\.|,|\[\.|\.\]|{\.|\.}|\(\.|\.\)|{|}|\(|\)|:|\^|`|;/,
111
+ Punctuation)
112
+
113
+ # Strings
114
+ rule(/(?:[\w]+)"/,Str, :rdqs)
115
+ rule(/"""/, Str, :tdqs)
116
+ rule(/"/, Str, :dqs)
117
+
118
+ # Char
119
+ rule(/'/, Str::Char, :chars)
120
+
121
+ # Keywords
122
+ rule(%r[(#{Nim.underscorize(OPWORDS)})\b], Operator::Word)
123
+ rule(/(p_?r_?o_?c_?\s)(?![\(\[\]])/, Keyword, :funcname)
124
+ rule(%r[(#{Nim.underscorize(KEYWORDS)})\b], Keyword)
125
+ rule(%r[(#{Nim.underscorize(NAMESPACE)})\b], Keyword::Namespace)
126
+ rule(/(v_?a_?r)\b/, Keyword::Declaration)
127
+ rule(%r[(#{Nim.underscorize(TYPES)})\b], Keyword::Type)
128
+ rule(%r[(#{Nim.underscorize(PSEUDOKEYWORDS)})\b], Keyword::Pseudo)
129
+ # Identifiers
130
+ rule(/\b((?![_\d])\w)(((?!_)\w)|(_(?!_)\w))*/, Name)
131
+
132
+ # Numbers
133
+ # Note: Have to do this with a block to push multiple states first,
134
+ # since we can't pass array of states like w/ Pygments.
135
+ rule(/[0-9][0-9_]*(?=([eE.]|'?[fF](32|64)))/) do |number|
136
+ push :floatsuffix
137
+ push :floatnumber
138
+ token Num::Float
139
+ end
140
+ rule(/0[xX][a-fA-F0-9][a-fA-F0-9_]*/, Num::Hex, :intsuffix)
141
+ rule(/0[bB][01][01_]*/, Num, :intsuffix)
142
+ rule(/0o[0-7][0-7_]*/, Num::Oct, :intsuffix)
143
+ rule(/[0-9][0-9_]*/, Num::Integer, :intsuffix)
144
+
145
+ # Whitespace
146
+ rule(/\s+/, Text)
147
+ rule(/.+$/, Error)
148
+ end
149
+
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,205 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Nix < RegexLexer
6
+ title 'Nix'
7
+ desc 'The Nix expression language (https://nixos.org/nix/manual/#ch-expression-language)'
8
+ tag 'nix'
9
+ aliases 'nixos'
10
+ filenames '*.nix'
11
+
12
+ state :whitespaces do
13
+ rule /^\s*\n\s*$/m, Text
14
+ rule /\s+/, Text
15
+ end
16
+
17
+ state :comment do
18
+ rule /#.*$/, Comment
19
+ rule /\/\*/, Comment, :multiline_comment
20
+ end
21
+
22
+ state :multiline_comment do
23
+ rule /\*\//, Comment, :pop!
24
+ rule /./, Comment
25
+ end
26
+
27
+ state :number do
28
+ rule /[0-9]/, Num::Integer
29
+ end
30
+
31
+ state :null do
32
+ rule /(null)/, Keyword::Constant
33
+ end
34
+
35
+ state :boolean do
36
+ rule /(true|false)/, Keyword::Constant
37
+ end
38
+
39
+ state :binding do
40
+ rule /[a-zA-Z_][a-zA-Z0-9-]*/, Name::Variable
41
+ end
42
+
43
+ state :path do
44
+ word = "[a-zA-Z0-9\._-]+"
45
+ section = "(\/#{word})"
46
+ prefix = "[a-z\+]+:\/\/"
47
+ root = /#{section}+/.source
48
+ tilde = /~#{section}+/.source
49
+ basic = /#{word}(\/#{word})+/.source
50
+ url = /#{prefix}(\/?#{basic})/.source
51
+ rule /(#{root}|#{tilde}|#{basic}|#{url})/, Str::Other
52
+ end
53
+
54
+ state :string do
55
+ rule /"/, Str::Double, :string_double_quoted
56
+ rule /''/, Str::Double, :string_indented
57
+ end
58
+
59
+ state :string_content do
60
+ rule /\${/, Str::Interpol, :string_interpolated_arg
61
+ mixin :escaped_sequence
62
+ end
63
+
64
+ state :escaped_sequence do
65
+ rule /\\./, Str::Escape
66
+ end
67
+
68
+ state :string_interpolated_arg do
69
+ mixin :expression
70
+ rule /}/, Str::Interpol, :pop!
71
+ end
72
+
73
+ state :string_indented do
74
+ mixin :string_content
75
+ rule /''/, Str::Double, :pop!
76
+ rule /./, Str::Double
77
+ end
78
+
79
+ state :string_double_quoted do
80
+ mixin :string_content
81
+ rule /"/, Str::Double, :pop!
82
+ rule /./, Str::Double
83
+ end
84
+
85
+ state :operator do
86
+ rule /(\.|\?|\+\+|\+|!=|!|\/\/|\=\=|&&|\|\||->|\/|\*|-|<|>|<=|=>)/, Operator
87
+ end
88
+
89
+ state :assignment do
90
+ rule /(=)/, Operator
91
+ rule /(@)/, Operator
92
+ end
93
+
94
+ state :accessor do
95
+ rule /(\$)/, Punctuation
96
+ end
97
+
98
+ state :delimiter do
99
+ rule /(;|,|:)/, Punctuation
100
+ end
101
+
102
+ state :atom_content do
103
+ mixin :expression
104
+ rule /\)/, Punctuation, :pop!
105
+ end
106
+
107
+ state :atom do
108
+ rule /\(/, Punctuation, :atom_content
109
+ end
110
+
111
+ state :list do
112
+ rule /\[/, Punctuation, :list_content
113
+ end
114
+
115
+ state :list_content do
116
+ rule /\]/, Punctuation, :pop!
117
+ mixin :expression
118
+ end
119
+
120
+ state :set do
121
+ rule /{/, Punctuation, :set_content
122
+ end
123
+
124
+ state :set_content do
125
+ rule /}/, Punctuation, :pop!
126
+ mixin :expression
127
+ end
128
+
129
+ state :expression do
130
+ mixin :ignore
131
+ mixin :comment
132
+ mixin :boolean
133
+ mixin :null
134
+ mixin :number
135
+ mixin :path
136
+ mixin :string
137
+ mixin :keywords
138
+ mixin :operator
139
+ mixin :accessor
140
+ mixin :assignment
141
+ mixin :delimiter
142
+ mixin :binding
143
+ mixin :atom
144
+ mixin :set
145
+ mixin :list
146
+ end
147
+
148
+ state :keywords do
149
+ mixin :keywords_namespace
150
+ mixin :keywords_declaration
151
+ mixin :keywords_conditional
152
+ mixin :keywords_reserved
153
+ mixin :keywords_builtin
154
+ end
155
+
156
+ state :keywords_namespace do
157
+ keywords = %w(with in inherit)
158
+ rule /(?:#{keywords.join('|')})\b/, Keyword::Namespace
159
+ end
160
+
161
+ state :keywords_declaration do
162
+ keywords = %w(let)
163
+ rule /(?:#{keywords.join('|')})\b/, Keyword::Declaration
164
+ end
165
+
166
+ state :keywords_conditional do
167
+ keywords = %w(if then else)
168
+ rule /(?:#{keywords.join('|')})\b/, Keyword
169
+ end
170
+
171
+ state :keywords_reserved do
172
+ keywords = %w(rec assert map)
173
+ rule /(?:#{keywords.join('|')})\b/, Keyword::Reserved
174
+ end
175
+
176
+ state :keywords_builtin do
177
+ keywords = %w(
178
+ abort
179
+ baseNameOf
180
+ builtins
181
+ derivation
182
+ fetchTarball
183
+ import
184
+ isNull
185
+ removeAttrs
186
+ throw
187
+ toString
188
+ )
189
+ rule /(?:#{keywords.join('|')})\b/, Keyword::Reserved
190
+ end
191
+
192
+ state :ignore do
193
+ mixin :whitespaces
194
+ end
195
+
196
+ state :root do
197
+ mixin :ignore
198
+ mixin :expression
199
+ end
200
+
201
+ start do
202
+ end
203
+ end
204
+ end
205
+ end
@@ -0,0 +1,194 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ load_lexer 'c.rb'
6
+
7
+ class ObjectiveC < C
8
+ tag 'objective_c'
9
+ title "Objective-C"
10
+ desc 'an extension of C commonly used to write Apple software'
11
+ aliases 'objc'
12
+ filenames '*.m', '*.h'
13
+
14
+ mimetypes 'text/x-objective_c', 'application/x-objective_c'
15
+
16
+ def self.at_keywords
17
+ @at_keywords ||= %w(
18
+ selector private protected public encode synchronized try
19
+ throw catch finally end property synthesize dynamic optional
20
+ interface implementation import
21
+ )
22
+ end
23
+
24
+ def self.at_builtins
25
+ @at_builtins ||= %w(true false YES NO)
26
+ end
27
+
28
+ def self.builtins
29
+ @builtins ||= %w(YES NO nil)
30
+ end
31
+
32
+ id = /[a-z$_][a-z0-9$_]*/i
33
+
34
+ prepend :statements do
35
+ rule /@"/, Str, :string
36
+ rule /@'(\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|\\.|[^\\'\n]')/,
37
+ Str::Char
38
+ rule /@(\d+[.]\d*|[.]\d+|\d+)e[+-]?\d+l?/i,
39
+ Num::Float
40
+ rule /@(\d+[.]\d*|[.]\d+|\d+f)f?/i, Num::Float
41
+ rule /@0x\h+[lL]?/, Num::Hex
42
+ rule /@0[0-7]+l?/i, Num::Oct
43
+ rule /@\d+l?/, Num::Integer
44
+ rule /\bin\b/, Keyword
45
+
46
+ rule /@(?:interface|implementation)\b/ do
47
+ token Keyword
48
+ goto :classname
49
+ end
50
+
51
+ rule /@(?:class|protocol)\b/ do
52
+ token Keyword
53
+ goto :forward_classname
54
+ end
55
+
56
+ rule /@([[:alnum:]]+)/ do |m|
57
+ if self.class.at_keywords.include? m[1]
58
+ token Keyword
59
+ elsif self.class.at_builtins.include? m[1]
60
+ token Name::Builtin
61
+ else
62
+ token Error
63
+ end
64
+ end
65
+
66
+ rule /[?]/, Punctuation, :ternary
67
+ rule /\[/, Punctuation, :message
68
+ rule /@\[/, Punctuation, :array_literal
69
+ rule /@\{/, Punctuation, :dictionary_literal
70
+ end
71
+
72
+ state :ternary do
73
+ rule /:/, Punctuation, :pop!
74
+ mixin :statements
75
+ end
76
+
77
+ state :message_shared do
78
+ rule /\]/, Punctuation, :pop!
79
+ rule /\{/, Punctuation, :pop!
80
+ rule /;/, Error
81
+
82
+ mixin :statement
83
+ end
84
+
85
+ state :message do
86
+ rule /(#{id})(\s*)(:)/ do
87
+ groups(Name::Function, Text, Punctuation)
88
+ goto :message_with_args
89
+ end
90
+
91
+ rule /(#{id})(\s*)(\])/ do
92
+ groups(Name::Function, Text, Punctuation)
93
+ pop!
94
+ end
95
+
96
+ mixin :message_shared
97
+ end
98
+
99
+ state :message_with_args do
100
+ rule /\{/, Punctuation, :function
101
+ rule /(#{id})(\s*)(:)/ do
102
+ groups(Name::Function, Text, Punctuation)
103
+ pop!
104
+ end
105
+
106
+ mixin :message_shared
107
+ end
108
+
109
+ state :array_literal do
110
+ rule /]/, Punctuation, :pop!
111
+ rule /,/, Punctuation
112
+ mixin :statements
113
+ end
114
+
115
+ state :dictionary_literal do
116
+ rule /}/, Punctuation, :pop!
117
+ rule /,/, Punctuation
118
+ mixin :statements
119
+ end
120
+
121
+ state :classname do
122
+ mixin :whitespace
123
+
124
+ rule /(#{id})(\s*)(:)(\s*)(#{id})/ do
125
+ groups(Name::Class, Text,
126
+ Punctuation, Text,
127
+ Name::Class)
128
+ pop!
129
+ end
130
+
131
+ rule /(#{id})(\s*)([(])(\s*)(#{id})(\s*)([)])/ do
132
+ groups(Name::Class, Text,
133
+ Punctuation, Text,
134
+ Name::Label, Text,
135
+ Punctuation)
136
+ pop!
137
+ end
138
+
139
+ rule id, Name::Class, :pop!
140
+ end
141
+
142
+ state :forward_classname do
143
+ mixin :whitespace
144
+
145
+ rule /(#{id})(\s*)(,)(\s*)/ do
146
+ groups(Name::Class, Text, Punctuation, Text)
147
+ push
148
+ end
149
+
150
+ rule /(#{id})(\s*)(;?)/ do
151
+ groups(Name::Class, Text, Punctuation)
152
+ pop!
153
+ end
154
+ end
155
+
156
+ prepend :root do
157
+ rule %r(
158
+ ([-+])(\s*)
159
+ ([(].*?[)])?(\s*)
160
+ (?=#{id}:?)
161
+ )ix do |m|
162
+ token Keyword, m[1]; token Text, m[2]
163
+ recurse m[3]; token Text, m[4]
164
+ push :method_definition
165
+ end
166
+ end
167
+
168
+ state :method_definition do
169
+ rule /,/, Punctuation
170
+ rule /[.][.][.]/, Punctuation
171
+ rule /([(].*?[)])(#{id})/ do |m|
172
+ recurse m[1]; token Name::Variable, m[2]
173
+ end
174
+
175
+ rule /(#{id})(\s*)(:)/m do
176
+ groups(Name::Function, Text, Punctuation)
177
+ end
178
+
179
+ rule /;/, Punctuation, :pop!
180
+
181
+ rule /{/ do
182
+ token Punctuation
183
+ goto :function
184
+ end
185
+
186
+ mixin :inline_whitespace
187
+ rule %r(//.*?\n), Comment::Single
188
+ rule /\s+/m, Text
189
+
190
+ rule(//) { pop! }
191
+ end
192
+ end
193
+ end
194
+ end