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,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,208 @@
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
+ def self.analyze_text(text)
33
+ return 1 if text =~ /@(end|implementation|protocol|property)\b/
34
+
35
+ id = /[a-z$_][a-z0-9$_]*/i
36
+ return 0.4 if text =~ %r(
37
+ \[ \s* #{id} \s+
38
+ (?:
39
+ #{id} \s* \]
40
+ | #{id}? :
41
+ )
42
+ )x
43
+ return 0.4 if text.include? '@"'
44
+ end
45
+
46
+ id = /[a-z$_][a-z0-9$_]*/i
47
+
48
+ prepend :statements do
49
+ rule /@"/, Str, :string
50
+ rule /@'(\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|\\.|[^\\'\n]')/,
51
+ Str::Char
52
+ rule /@(\d+[.]\d*|[.]\d+|\d+)e[+-]?\d+l?/i,
53
+ Num::Float
54
+ rule /@(\d+[.]\d*|[.]\d+|\d+f)f?/i, Num::Float
55
+ rule /@0x\h+[lL]?/, Num::Hex
56
+ rule /@0[0-7]+l?/i, Num::Oct
57
+ rule /@\d+l?/, Num::Integer
58
+ rule /\bin\b/, Keyword
59
+
60
+ rule /@(?:interface|implementation)\b/ do
61
+ token Keyword
62
+ goto :classname
63
+ end
64
+
65
+ rule /@(?:class|protocol)\b/ do
66
+ token Keyword
67
+ goto :forward_classname
68
+ end
69
+
70
+ rule /@([[:alnum:]]+)/ do |m|
71
+ if self.class.at_keywords.include? m[1]
72
+ token Keyword
73
+ elsif self.class.at_builtins.include? m[1]
74
+ token Name::Builtin
75
+ else
76
+ token Error
77
+ end
78
+ end
79
+
80
+ rule /[?]/, Punctuation, :ternary
81
+ rule /\[/, Punctuation, :message
82
+ rule /@\[/, Punctuation, :array_literal
83
+ rule /@\{/, Punctuation, :dictionary_literal
84
+ end
85
+
86
+ state :ternary do
87
+ rule /:/, Punctuation, :pop!
88
+ mixin :statements
89
+ end
90
+
91
+ state :message_shared do
92
+ rule /\]/, Punctuation, :pop!
93
+ rule /\{/, Punctuation, :pop!
94
+ rule /;/, Error
95
+
96
+ mixin :statement
97
+ end
98
+
99
+ state :message do
100
+ rule /(#{id})(\s*)(:)/ do
101
+ groups(Name::Function, Text, Punctuation)
102
+ goto :message_with_args
103
+ end
104
+
105
+ rule /(#{id})(\s*)(\])/ do
106
+ groups(Name::Function, Text, Punctuation)
107
+ pop!
108
+ end
109
+
110
+ mixin :message_shared
111
+ end
112
+
113
+ state :message_with_args do
114
+ rule /\{/, Punctuation, :function
115
+ rule /(#{id})(\s*)(:)/ do
116
+ groups(Name::Function, Text, Punctuation)
117
+ pop!
118
+ end
119
+
120
+ mixin :message_shared
121
+ end
122
+
123
+ state :array_literal do
124
+ rule /]/, Punctuation, :pop!
125
+ rule /,/, Punctuation
126
+ mixin :statements
127
+ end
128
+
129
+ state :dictionary_literal do
130
+ rule /}/, Punctuation, :pop!
131
+ rule /,/, Punctuation
132
+ mixin :statements
133
+ end
134
+
135
+ state :classname do
136
+ mixin :whitespace
137
+
138
+ rule /(#{id})(\s*)(:)(\s*)(#{id})/ do
139
+ groups(Name::Class, Text,
140
+ Punctuation, Text,
141
+ Name::Class)
142
+ pop!
143
+ end
144
+
145
+ rule /(#{id})(\s*)([(])(\s*)(#{id})(\s*)([)])/ do
146
+ groups(Name::Class, Text,
147
+ Punctuation, Text,
148
+ Name::Label, Text,
149
+ Punctuation)
150
+ pop!
151
+ end
152
+
153
+ rule id, Name::Class, :pop!
154
+ end
155
+
156
+ state :forward_classname do
157
+ mixin :whitespace
158
+
159
+ rule /(#{id})(\s*)(,)(\s*)/ do
160
+ groups(Name::Class, Text, Punctuation, Text)
161
+ push
162
+ end
163
+
164
+ rule /(#{id})(\s*)(;?)/ do
165
+ groups(Name::Class, Text, Punctuation)
166
+ pop!
167
+ end
168
+ end
169
+
170
+ prepend :root do
171
+ rule %r(
172
+ ([-+])(\s*)
173
+ ([(].*?[)])?(\s*)
174
+ (?=#{id}:?)
175
+ )ix do |m|
176
+ token Keyword, m[1]; token Text, m[2]
177
+ recurse m[3]; token Text, m[4]
178
+ push :method_definition
179
+ end
180
+ end
181
+
182
+ state :method_definition do
183
+ rule /,/, Punctuation
184
+ rule /[.][.][.]/, Punctuation
185
+ rule /([(].*?[)])(#{id})/ do |m|
186
+ recurse m[1]; token Name::Variable, m[2]
187
+ end
188
+
189
+ rule /(#{id})(\s*)(:)/m do
190
+ groups(Name::Function, Text, Punctuation)
191
+ end
192
+
193
+ rule /;/, Punctuation, :pop!
194
+
195
+ rule /{/ do
196
+ token Punctuation
197
+ goto :function
198
+ end
199
+
200
+ mixin :inline_whitespace
201
+ rule %r(//.*?\n), Comment::Single
202
+ rule /\s+/m, Text
203
+
204
+ rule(//) { pop! }
205
+ end
206
+ end
207
+ end
208
+ end
@@ -0,0 +1,100 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class OCaml < RegexLexer
6
+ title "OCaml"
7
+ desc 'Objective Caml (ocaml.org)'
8
+ tag 'ocaml'
9
+ filenames '*.ml', '*.mli', '*.mll', '*.mly'
10
+ mimetypes 'text/x-ocaml'
11
+
12
+ def self.keywords
13
+ @keywords ||= Set.new %w(
14
+ as assert begin class constraint do done downto else end
15
+ exception external false for fun function functor if in include
16
+ inherit initializer lazy let match method module mutable new
17
+ nonrec object of open private raise rec sig struct then to true
18
+ try type val virtual when while with
19
+ )
20
+ end
21
+
22
+ def self.word_operators
23
+ @word_operators ||= Set.new %w(and asr land lor lsl lxor mod or)
24
+ end
25
+
26
+ def self.primitives
27
+ @primitives ||= Set.new %w(unit int float bool string char list array)
28
+ end
29
+
30
+ operator = %r([;,_!$%&*+./:<=>?@^|~#-]+)
31
+ id = /[a-z_][\w']*/i
32
+ upper_id = /[A-Z][\w']*/
33
+
34
+ state :root do
35
+ rule /\s+/m, Text
36
+ rule /false|true|[(][)]|\[\]/, Name::Builtin::Pseudo
37
+ rule /#{upper_id}(?=\s*[.])/, Name::Namespace, :dotted
38
+ rule /`#{id}/, Name::Tag
39
+ rule upper_id, Name::Class
40
+ rule /[(][*](?![)])/, Comment, :comment
41
+ rule id do |m|
42
+ match = m[0]
43
+ if self.class.keywords.include? match
44
+ token Keyword
45
+ elsif self.class.word_operators.include? match
46
+ token Operator::Word
47
+ elsif self.class.primitives.include? match
48
+ token Keyword::Type
49
+ else
50
+ token Name
51
+ end
52
+ end
53
+
54
+ rule /[(){}\[\];]+/, Punctuation
55
+ rule operator, Operator
56
+
57
+ rule /-?\d[\d_]*(.[\d_]*)?(e[+-]?\d[\d_]*)/i, Num::Float
58
+ rule /0x\h[\h_]*/i, Num::Hex
59
+ rule /0o[0-7][0-7_]*/i, Num::Oct
60
+ rule /0b[01][01_]*/i, Num::Bin
61
+ rule /\d[\d_]*/, Num::Integer
62
+
63
+ rule /'(?:(\\[\\"'ntbr ])|(\\[0-9]{3})|(\\x\h{2}))'/, Str::Char
64
+ rule /'[.]'/, Str::Char
65
+ rule /'/, Keyword
66
+ rule /"/, Str::Double, :string
67
+ rule /[~?]#{id}/, Name::Variable
68
+ end
69
+
70
+ state :comment do
71
+ rule /[^(*)]+/, Comment
72
+ rule(/[(][*]/) { token Comment; push }
73
+ rule /[*][)]/, Comment, :pop!
74
+ rule /[(*)]/, Comment
75
+ end
76
+
77
+ state :string do
78
+ rule /[^\\"]+/, Str::Double
79
+ mixin :escape_sequence
80
+ rule /\\\n/, Str::Double
81
+ rule /"/, Str::Double, :pop!
82
+ end
83
+
84
+ state :escape_sequence do
85
+ rule /\\[\\"'ntbr]/, Str::Escape
86
+ rule /\\\d{3}/, Str::Escape
87
+ rule /\\x\h{2}/, Str::Escape
88
+ end
89
+
90
+ state :dotted do
91
+ rule /\s+/m, Text
92
+ rule /[.]/, Punctuation
93
+ rule /#{upper_id}(?=\s*[.])/, Name::Namespace
94
+ rule upper_id, Name::Class, :pop!
95
+ rule id, Name, :pop!
96
+ rule /[({\[]/, Punctuation, :pop!
97
+ end
98
+ end
99
+ end
100
+ end