rouge 3.2.0 → 3.18.0

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 (316) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +17 -3
  3. data/bin/rougify +1 -0
  4. data/lib/rouge.rb +67 -43
  5. data/lib/rouge/cli.rb +84 -17
  6. data/lib/rouge/demos/ada +26 -0
  7. data/lib/rouge/demos/apex +9 -0
  8. data/lib/rouge/demos/armasm +12 -0
  9. data/lib/rouge/demos/batchfile +3 -0
  10. data/lib/rouge/demos/bbcbasic +6 -0
  11. data/lib/rouge/demos/bpf +7 -0
  12. data/lib/rouge/demos/brainfuck +5 -0
  13. data/lib/rouge/demos/clean +6 -0
  14. data/lib/rouge/demos/cmhg +8 -0
  15. data/lib/rouge/demos/csvs +8 -0
  16. data/lib/rouge/demos/cuda +11 -0
  17. data/lib/rouge/demos/cypher +5 -0
  18. data/lib/rouge/demos/cython +6 -0
  19. data/lib/rouge/demos/datastudio +21 -0
  20. data/lib/rouge/demos/ecl +18 -0
  21. data/lib/rouge/demos/eex +1 -0
  22. data/lib/rouge/demos/epp +4 -0
  23. data/lib/rouge/demos/escape +3 -0
  24. data/lib/rouge/demos/freefem +16 -0
  25. data/lib/rouge/demos/gdscript +18 -0
  26. data/lib/rouge/demos/ghc-cmm +23 -0
  27. data/lib/rouge/demos/ghc-core +26 -0
  28. data/lib/rouge/demos/haxe +5 -0
  29. data/lib/rouge/demos/hocon +8 -0
  30. data/lib/rouge/demos/hql +5 -0
  31. data/lib/rouge/demos/isbl +4 -0
  32. data/lib/rouge/demos/jsl +3 -0
  33. data/lib/rouge/demos/jsp +29 -0
  34. data/lib/rouge/demos/liquid +0 -1
  35. data/lib/rouge/demos/lustre +6 -0
  36. data/lib/rouge/demos/lutin +18 -0
  37. data/lib/rouge/demos/m68k +16 -0
  38. data/lib/rouge/demos/magik +6 -0
  39. data/lib/rouge/demos/mason +22 -0
  40. data/lib/rouge/demos/mathematica +8 -0
  41. data/lib/rouge/demos/minizinc +23 -0
  42. data/lib/rouge/demos/msgtrans +4 -0
  43. data/lib/rouge/demos/nasm +6 -6
  44. data/lib/rouge/demos/nesasm +11 -0
  45. data/lib/rouge/demos/objective_cpp +17 -0
  46. data/lib/rouge/demos/openedge +4 -0
  47. data/lib/rouge/demos/opentype_feature_file +6 -0
  48. data/lib/rouge/demos/plist +1 -132
  49. data/lib/rouge/demos/powershell +12 -48
  50. data/lib/rouge/demos/q +6 -0
  51. data/lib/rouge/demos/reasonml +12 -0
  52. data/lib/rouge/demos/rego +8 -0
  53. data/lib/rouge/demos/robot_framework +27 -0
  54. data/lib/rouge/demos/sas +13 -0
  55. data/lib/rouge/demos/slice +10 -0
  56. data/lib/rouge/demos/solidity +13 -0
  57. data/lib/rouge/demos/sparql +6 -0
  58. data/lib/rouge/demos/sqf +14 -0
  59. data/lib/rouge/demos/supercollider +11 -0
  60. data/lib/rouge/demos/terraform +0 -15
  61. data/lib/rouge/demos/ttcn3 +6 -0
  62. data/lib/rouge/demos/vcl +12 -0
  63. data/lib/rouge/demos/xojo +14 -0
  64. data/lib/rouge/demos/xpath +2 -0
  65. data/lib/rouge/demos/xquery +22 -0
  66. data/lib/rouge/demos/yang +17 -0
  67. data/lib/rouge/formatter.rb +39 -2
  68. data/lib/rouge/formatters/html.rb +21 -2
  69. data/lib/rouge/formatters/html_inline.rb +1 -0
  70. data/lib/rouge/formatters/html_legacy.rb +1 -0
  71. data/lib/rouge/formatters/html_line_table.rb +53 -0
  72. data/lib/rouge/formatters/html_linewise.rb +7 -11
  73. data/lib/rouge/formatters/html_pygments.rb +2 -0
  74. data/lib/rouge/formatters/html_table.rb +21 -31
  75. data/lib/rouge/formatters/null.rb +1 -0
  76. data/lib/rouge/formatters/terminal256.rb +23 -5
  77. data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
  78. data/lib/rouge/formatters/tex.rb +92 -0
  79. data/lib/rouge/guesser.rb +2 -0
  80. data/lib/rouge/guessers/disambiguation.rb +35 -0
  81. data/lib/rouge/guessers/filename.rb +2 -0
  82. data/lib/rouge/guessers/glob_mapping.rb +3 -1
  83. data/lib/rouge/guessers/mimetype.rb +2 -0
  84. data/lib/rouge/guessers/modeline.rb +3 -1
  85. data/lib/rouge/guessers/source.rb +3 -1
  86. data/lib/rouge/guessers/util.rb +2 -0
  87. data/lib/rouge/lexer.rb +71 -15
  88. data/lib/rouge/lexers/abap.rb +13 -11
  89. data/lib/rouge/lexers/actionscript.rb +35 -34
  90. data/lib/rouge/lexers/ada.rb +162 -0
  91. data/lib/rouge/lexers/apache.rb +13 -15
  92. data/lib/rouge/lexers/apache/keywords.rb +15 -0
  93. data/lib/rouge/lexers/apex.rb +126 -0
  94. data/lib/rouge/lexers/apiblueprint.rb +2 -0
  95. data/lib/rouge/lexers/apple_script.rb +17 -14
  96. data/lib/rouge/lexers/armasm.rb +145 -0
  97. data/lib/rouge/lexers/awk.rb +26 -25
  98. data/lib/rouge/lexers/batchfile.rb +164 -0
  99. data/lib/rouge/lexers/bbcbasic.rb +112 -0
  100. data/lib/rouge/lexers/biml.rb +6 -4
  101. data/lib/rouge/lexers/bpf.rb +118 -0
  102. data/lib/rouge/lexers/brainfuck.rb +53 -0
  103. data/lib/rouge/lexers/bsl.rb +13 -12
  104. data/lib/rouge/lexers/c.rb +35 -57
  105. data/lib/rouge/lexers/ceylon.rb +7 -34
  106. data/lib/rouge/lexers/cfscript.rb +27 -26
  107. data/lib/rouge/lexers/clean.rb +156 -0
  108. data/lib/rouge/lexers/clojure.rb +15 -14
  109. data/lib/rouge/lexers/cmake.rb +16 -14
  110. data/lib/rouge/lexers/cmhg.rb +34 -0
  111. data/lib/rouge/lexers/coffeescript.rb +90 -49
  112. data/lib/rouge/lexers/common_lisp.rb +39 -38
  113. data/lib/rouge/lexers/conf.rb +7 -6
  114. data/lib/rouge/lexers/console.rb +92 -38
  115. data/lib/rouge/lexers/coq.rb +27 -23
  116. data/lib/rouge/lexers/cpp.rb +24 -13
  117. data/lib/rouge/lexers/crystal.rb +71 -70
  118. data/lib/rouge/lexers/csharp.rb +29 -29
  119. data/lib/rouge/lexers/css.rb +24 -23
  120. data/lib/rouge/lexers/csvs.rb +44 -0
  121. data/lib/rouge/lexers/cuda.rb +35 -0
  122. data/lib/rouge/lexers/cypher.rb +108 -0
  123. data/lib/rouge/lexers/cython.rb +151 -0
  124. data/lib/rouge/lexers/d.rb +64 -63
  125. data/lib/rouge/lexers/dart.rb +34 -33
  126. data/lib/rouge/lexers/datastudio.rb +138 -0
  127. data/lib/rouge/lexers/diff.rb +10 -4
  128. data/lib/rouge/lexers/digdag.rb +3 -1
  129. data/lib/rouge/lexers/docker.rb +12 -11
  130. data/lib/rouge/lexers/dot.rb +19 -18
  131. data/lib/rouge/lexers/ecl.rb +175 -0
  132. data/lib/rouge/lexers/eex.rb +52 -0
  133. data/lib/rouge/lexers/eiffel.rb +21 -20
  134. data/lib/rouge/lexers/elixir.rb +52 -36
  135. data/lib/rouge/lexers/elm.rb +30 -29
  136. data/lib/rouge/lexers/epp.rb +51 -0
  137. data/lib/rouge/lexers/erb.rb +5 -4
  138. data/lib/rouge/lexers/erlang.rb +1 -0
  139. data/lib/rouge/lexers/escape.rb +58 -0
  140. data/lib/rouge/lexers/factor.rb +41 -40
  141. data/lib/rouge/lexers/fortran.rb +34 -32
  142. data/lib/rouge/lexers/freefem.rb +240 -0
  143. data/lib/rouge/lexers/fsharp.rb +33 -31
  144. data/lib/rouge/lexers/gdscript.rb +171 -0
  145. data/lib/rouge/lexers/ghc_cmm.rb +340 -0
  146. data/lib/rouge/lexers/ghc_core.rb +151 -0
  147. data/lib/rouge/lexers/gherkin.rb +17 -14
  148. data/lib/rouge/lexers/gherkin/keywords.rb +2 -0
  149. data/lib/rouge/lexers/glsl.rb +2 -5
  150. data/lib/rouge/lexers/go.rb +3 -2
  151. data/lib/rouge/lexers/gradle.rb +1 -0
  152. data/lib/rouge/lexers/graphql.rb +78 -60
  153. data/lib/rouge/lexers/groovy.rb +24 -25
  154. data/lib/rouge/lexers/hack.rb +2 -1
  155. data/lib/rouge/lexers/haml.rb +26 -29
  156. data/lib/rouge/lexers/handlebars.rb +32 -20
  157. data/lib/rouge/lexers/haskell.rb +67 -65
  158. data/lib/rouge/lexers/haxe.rb +246 -0
  159. data/lib/rouge/lexers/hcl.rb +26 -25
  160. data/lib/rouge/lexers/hocon.rb +86 -0
  161. data/lib/rouge/lexers/hql.rb +139 -0
  162. data/lib/rouge/lexers/html.rb +33 -31
  163. data/lib/rouge/lexers/http.rb +10 -9
  164. data/lib/rouge/lexers/hylang.rb +15 -14
  165. data/lib/rouge/lexers/idlang.rb +34 -32
  166. data/lib/rouge/lexers/igorpro.rb +32 -31
  167. data/lib/rouge/lexers/ini.rb +13 -12
  168. data/lib/rouge/lexers/io.rb +10 -9
  169. data/lib/rouge/lexers/irb.rb +6 -5
  170. data/lib/rouge/lexers/isbl.rb +97 -0
  171. data/lib/rouge/lexers/isbl/builtins.rb +17 -0
  172. data/lib/rouge/lexers/java.rb +29 -25
  173. data/lib/rouge/lexers/javascript.rb +58 -61
  174. data/lib/rouge/lexers/jinja.rb +39 -22
  175. data/lib/rouge/lexers/jsl.rb +55 -0
  176. data/lib/rouge/lexers/json.rb +54 -11
  177. data/lib/rouge/lexers/json_doc.rb +8 -5
  178. data/lib/rouge/lexers/jsonnet.rb +19 -18
  179. data/lib/rouge/lexers/jsp.rb +120 -0
  180. data/lib/rouge/lexers/jsx.rb +18 -16
  181. data/lib/rouge/lexers/julia.rb +182 -58
  182. data/lib/rouge/lexers/kotlin.rb +78 -26
  183. data/lib/rouge/lexers/lasso.rb +54 -58
  184. data/lib/rouge/lexers/lasso/keywords.rb +14 -0
  185. data/lib/rouge/lexers/liquid.rb +116 -118
  186. data/lib/rouge/lexers/literate_coffeescript.rb +3 -2
  187. data/lib/rouge/lexers/literate_haskell.rb +6 -5
  188. data/lib/rouge/lexers/llvm.rb +66 -49
  189. data/lib/rouge/lexers/lua.rb +43 -4
  190. data/lib/rouge/lexers/lua/builtins.rb +2 -0
  191. data/lib/rouge/lexers/lustre.rb +79 -0
  192. data/lib/rouge/lexers/lutin.rb +33 -0
  193. data/lib/rouge/lexers/m68k.rb +143 -0
  194. data/lib/rouge/lexers/magik.rb +127 -0
  195. data/lib/rouge/lexers/make.rb +57 -34
  196. data/lib/rouge/lexers/markdown.rb +67 -39
  197. data/lib/rouge/lexers/mason.rb +110 -0
  198. data/lib/rouge/lexers/mathematica.rb +96 -0
  199. data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
  200. data/lib/rouge/lexers/matlab.rb +26 -17
  201. data/lib/rouge/lexers/matlab/builtins.rb +4 -4
  202. data/lib/rouge/lexers/minizinc.rb +87 -0
  203. data/lib/rouge/lexers/moonscript.rb +4 -3
  204. data/lib/rouge/lexers/mosel.rb +64 -63
  205. data/lib/rouge/lexers/msgtrans.rb +26 -0
  206. data/lib/rouge/lexers/mxml.rb +19 -18
  207. data/lib/rouge/lexers/nasm.rb +43 -169
  208. data/lib/rouge/lexers/nesasm.rb +78 -0
  209. data/lib/rouge/lexers/nginx.rb +15 -14
  210. data/lib/rouge/lexers/nim.rb +4 -2
  211. data/lib/rouge/lexers/nix.rb +44 -43
  212. data/lib/rouge/lexers/objective_c.rb +5 -178
  213. data/lib/rouge/lexers/objective_c/common.rb +184 -0
  214. data/lib/rouge/lexers/objective_cpp.rb +31 -0
  215. data/lib/rouge/lexers/ocaml.rb +29 -64
  216. data/lib/rouge/lexers/ocaml/common.rb +53 -0
  217. data/lib/rouge/lexers/openedge.rb +429 -0
  218. data/lib/rouge/lexers/opentype_feature_file.rb +113 -0
  219. data/lib/rouge/lexers/pascal.rb +6 -5
  220. data/lib/rouge/lexers/perl.rb +102 -67
  221. data/lib/rouge/lexers/php.rb +91 -53
  222. data/lib/rouge/lexers/php/builtins.rb +183 -174
  223. data/lib/rouge/lexers/plain_text.rb +2 -1
  224. data/lib/rouge/lexers/plist.rb +16 -14
  225. data/lib/rouge/lexers/pony.rb +21 -20
  226. data/lib/rouge/lexers/powershell.rb +190 -638
  227. data/lib/rouge/lexers/praat.rb +76 -75
  228. data/lib/rouge/lexers/prolog.rb +27 -19
  229. data/lib/rouge/lexers/prometheus.rb +32 -30
  230. data/lib/rouge/lexers/properties.rb +13 -12
  231. data/lib/rouge/lexers/protobuf.rb +23 -22
  232. data/lib/rouge/lexers/puppet.rb +33 -32
  233. data/lib/rouge/lexers/python.rb +124 -99
  234. data/lib/rouge/lexers/q.rb +17 -14
  235. data/lib/rouge/lexers/qml.rb +13 -12
  236. data/lib/rouge/lexers/r.rb +13 -13
  237. data/lib/rouge/lexers/racket.rb +47 -22
  238. data/lib/rouge/lexers/reasonml.rb +65 -0
  239. data/lib/rouge/lexers/rego.rb +45 -0
  240. data/lib/rouge/lexers/robot_framework.rb +249 -0
  241. data/lib/rouge/lexers/ruby.rb +88 -71
  242. data/lib/rouge/lexers/rust.rb +45 -44
  243. data/lib/rouge/lexers/sas.rb +563 -0
  244. data/lib/rouge/lexers/sass.rb +9 -8
  245. data/lib/rouge/lexers/sass/common.rb +41 -40
  246. data/lib/rouge/lexers/scala.rb +67 -40
  247. data/lib/rouge/lexers/scheme.rb +19 -18
  248. data/lib/rouge/lexers/scss.rb +4 -3
  249. data/lib/rouge/lexers/sed.rb +31 -30
  250. data/lib/rouge/lexers/shell.rb +67 -55
  251. data/lib/rouge/lexers/sieve.rb +10 -9
  252. data/lib/rouge/lexers/slice.rb +32 -0
  253. data/lib/rouge/lexers/slim.rb +27 -26
  254. data/lib/rouge/lexers/smalltalk.rb +34 -33
  255. data/lib/rouge/lexers/smarty.rb +20 -19
  256. data/lib/rouge/lexers/sml.rb +68 -67
  257. data/lib/rouge/lexers/solidity.rb +185 -0
  258. data/lib/rouge/lexers/sparql.rb +129 -0
  259. data/lib/rouge/lexers/sqf.rb +109 -0
  260. data/lib/rouge/lexers/sqf/commands.rb +15 -0
  261. data/lib/rouge/lexers/sql.rb +47 -26
  262. data/lib/rouge/lexers/supercollider.rb +116 -0
  263. data/lib/rouge/lexers/swift.rb +49 -44
  264. data/lib/rouge/lexers/tap.rb +22 -20
  265. data/lib/rouge/lexers/tcl.rb +28 -27
  266. data/lib/rouge/lexers/terraform.rb +37 -13
  267. data/lib/rouge/lexers/tex.rb +20 -19
  268. data/lib/rouge/lexers/toml.rb +59 -20
  269. data/lib/rouge/lexers/tsx.rb +1 -0
  270. data/lib/rouge/lexers/ttcn3.rb +119 -0
  271. data/lib/rouge/lexers/tulip.rb +38 -36
  272. data/lib/rouge/lexers/turtle.rb +36 -38
  273. data/lib/rouge/lexers/twig.rb +1 -0
  274. data/lib/rouge/lexers/typescript.rb +12 -0
  275. data/lib/rouge/lexers/typescript/common.rb +1 -0
  276. data/lib/rouge/lexers/vala.rb +19 -18
  277. data/lib/rouge/lexers/varnish.rb +168 -0
  278. data/lib/rouge/lexers/vb.rb +28 -27
  279. data/lib/rouge/lexers/verilog.rb +27 -28
  280. data/lib/rouge/lexers/vhdl.rb +12 -11
  281. data/lib/rouge/lexers/viml.rb +15 -14
  282. data/lib/rouge/lexers/viml/keywords.rb +2 -0
  283. data/lib/rouge/lexers/vue.rb +15 -10
  284. data/lib/rouge/lexers/wollok.rb +27 -26
  285. data/lib/rouge/lexers/xml.rb +18 -21
  286. data/lib/rouge/lexers/xojo.rb +61 -0
  287. data/lib/rouge/lexers/xpath.rb +332 -0
  288. data/lib/rouge/lexers/xquery.rb +145 -0
  289. data/lib/rouge/lexers/yaml.rb +64 -61
  290. data/lib/rouge/lexers/yang.rb +147 -0
  291. data/lib/rouge/plugins/redcarpet.rb +9 -2
  292. data/lib/rouge/regex_lexer.rb +27 -25
  293. data/lib/rouge/template_lexer.rb +1 -0
  294. data/lib/rouge/tex_theme_renderer.rb +132 -0
  295. data/lib/rouge/text_analyzer.rb +1 -0
  296. data/lib/rouge/theme.rb +5 -0
  297. data/lib/rouge/themes/base16.rb +1 -0
  298. data/lib/rouge/themes/bw.rb +41 -0
  299. data/lib/rouge/themes/colorful.rb +1 -0
  300. data/lib/rouge/themes/github.rb +1 -0
  301. data/lib/rouge/themes/gruvbox.rb +1 -0
  302. data/lib/rouge/themes/igor_pro.rb +1 -0
  303. data/lib/rouge/themes/magritte.rb +78 -0
  304. data/lib/rouge/themes/molokai.rb +1 -0
  305. data/lib/rouge/themes/monokai.rb +1 -0
  306. data/lib/rouge/themes/monokai_sublime.rb +4 -1
  307. data/lib/rouge/themes/pastie.rb +2 -1
  308. data/lib/rouge/themes/thankful_eyes.rb +2 -1
  309. data/lib/rouge/themes/tulip.rb +2 -1
  310. data/lib/rouge/token.rb +31 -22
  311. data/lib/rouge/util.rb +3 -2
  312. data/lib/rouge/version.rb +2 -1
  313. data/rouge.gemspec +6 -3
  314. metadata +130 -8
  315. data/lib/rouge/lexers/apache/keywords.yml +0 -764
  316. data/lib/rouge/lexers/lasso/keywords.yml +0 -446
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Rouge
4
5
  module Lexers
@@ -111,7 +112,7 @@ module Rouge
111
112
  Punctuation)
112
113
 
113
114
  # Strings
114
- rule(/(?:[\w]+)"/,Str, :rdqs)
115
+ rule(/(?:\w+)"/,Str, :rdqs)
115
116
  rule(/"""/, Str, :tdqs)
116
117
  rule(/"/, Str, :dqs)
117
118
 
@@ -132,11 +133,12 @@ module Rouge
132
133
  # Numbers
133
134
  # Note: Have to do this with a block to push multiple states first,
134
135
  # since we can't pass array of states like w/ Pygments.
135
- rule(/[0-9][0-9_]*(?=([eE.]|'?[fF](32|64)))/) do |number|
136
+ rule(/[0-9][0-9_]*(?=([eE.]|'?[fF](32|64)))/) do
136
137
  push :floatsuffix
137
138
  push :floatnumber
138
139
  token Num::Float
139
140
  end
141
+
140
142
  rule(/0[xX][a-fA-F0-9][a-fA-F0-9_]*/, Num::Hex, :intsuffix)
141
143
  rule(/0[bB][01][01_]*/, Num, :intsuffix)
142
144
  rule(/0o[0-7][0-7_]*/, Num::Oct, :intsuffix)
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Rouge
4
5
  module Lexers
@@ -10,34 +11,34 @@ module Rouge
10
11
  filenames '*.nix'
11
12
 
12
13
  state :whitespaces do
13
- rule /^\s*\n\s*$/m, Text
14
- rule /\s+/, Text
14
+ rule %r/^\s*\n\s*$/m, Text
15
+ rule %r/\s+/, Text
15
16
  end
16
17
 
17
18
  state :comment do
18
- rule /#.*$/, Comment
19
- rule /\/\*/, Comment, :multiline_comment
19
+ rule %r/#.*$/, Comment
20
+ rule %r(/\*), Comment, :multiline_comment
20
21
  end
21
22
 
22
23
  state :multiline_comment do
23
- rule /\*\//, Comment, :pop!
24
- rule /./, Comment
24
+ rule %r(\*/), Comment, :pop!
25
+ rule %r/./, Comment
25
26
  end
26
27
 
27
28
  state :number do
28
- rule /[0-9]/, Num::Integer
29
+ rule %r/[0-9]/, Num::Integer
29
30
  end
30
31
 
31
32
  state :null do
32
- rule /(null)/, Keyword::Constant
33
+ rule %r/(null)/, Keyword::Constant
33
34
  end
34
35
 
35
36
  state :boolean do
36
- rule /(true|false)/, Keyword::Constant
37
+ rule %r/(true|false)/, Keyword::Constant
37
38
  end
38
39
 
39
40
  state :binding do
40
- rule /[a-zA-Z_][a-zA-Z0-9-]*/, Name::Variable
41
+ rule %r/[a-zA-Z_][a-zA-Z0-9-]*/, Name::Variable
41
42
  end
42
43
 
43
44
  state :path do
@@ -48,89 +49,89 @@ module Rouge
48
49
  tilde = /~#{section}+/.source
49
50
  basic = /#{word}(\/#{word})+/.source
50
51
  url = /#{prefix}(\/?#{basic})/.source
51
- rule /(#{root}|#{tilde}|#{basic}|#{url})/, Str::Other
52
+ rule %r/(#{root}|#{tilde}|#{basic}|#{url})/, Str::Other
52
53
  end
53
54
 
54
55
  state :string do
55
- rule /"/, Str::Double, :double_quoted_string
56
- rule /''/, Str::Double, :indented_string
56
+ rule %r/"/, Str::Double, :double_quoted_string
57
+ rule %r/''/, Str::Double, :indented_string
57
58
  end
58
59
 
59
60
  state :string_content do
60
- rule /\\./, Str::Escape
61
- rule /\$\$/, Str::Escape
62
- rule /\${/, Str::Interpol, :string_interpolated_arg
61
+ rule %r/\\./, Str::Escape
62
+ rule %r/\$\$/, Str::Escape
63
+ rule %r/\${/, Str::Interpol, :string_interpolated_arg
63
64
  end
64
65
 
65
66
  state :indented_string_content do
66
- rule /'''/, Str::Escape
67
- rule /''\$/, Str::Escape
68
- rule /\$\$/, Str::Escape
69
- rule /''\\./, Str::Escape
70
- rule /\${/, Str::Interpol, :string_interpolated_arg
67
+ rule %r/'''/, Str::Escape
68
+ rule %r/''\$/, Str::Escape
69
+ rule %r/\$\$/, Str::Escape
70
+ rule %r/''\\./, Str::Escape
71
+ rule %r/\${/, Str::Interpol, :string_interpolated_arg
71
72
  end
72
73
 
73
74
  state :string_interpolated_arg do
74
75
  mixin :expression
75
- rule /}/, Str::Interpol, :pop!
76
+ rule %r/}/, Str::Interpol, :pop!
76
77
  end
77
78
 
78
79
  state :indented_string do
79
80
  mixin :indented_string_content
80
- rule /''/, Str::Double, :pop!
81
- rule /./, Str::Double
81
+ rule %r/''/, Str::Double, :pop!
82
+ rule %r/./, Str::Double
82
83
  end
83
84
 
84
85
  state :double_quoted_string do
85
86
  mixin :string_content
86
- rule /"/, Str::Double, :pop!
87
- rule /./, Str::Double
87
+ rule %r/"/, Str::Double, :pop!
88
+ rule %r/./, Str::Double
88
89
  end
89
90
 
90
91
  state :operator do
91
- rule /(\.|\?|\+\+|\+|!=|!|\/\/|\=\=|&&|\|\||->|\/|\*|-|<|>|<=|=>)/, Operator
92
+ rule %r/(\.|\?|\+\+|\+|!=|!|\/\/|\=\=|&&|\|\||->|\/|\*|-|<|>|<=|=>)/, Operator
92
93
  end
93
94
 
94
95
  state :assignment do
95
- rule /(=)/, Operator
96
- rule /(@)/, Operator
96
+ rule %r/(=)/, Operator
97
+ rule %r/(@)/, Operator
97
98
  end
98
99
 
99
100
  state :accessor do
100
- rule /(\$)/, Punctuation
101
+ rule %r/(\$)/, Punctuation
101
102
  end
102
103
 
103
104
  state :delimiter do
104
- rule /(;|,|:)/, Punctuation
105
+ rule %r/(;|,|:)/, Punctuation
105
106
  end
106
107
 
107
108
  state :atom_content do
108
109
  mixin :expression
109
- rule /\)/, Punctuation, :pop!
110
+ rule %r/\)/, Punctuation, :pop!
110
111
  end
111
112
 
112
113
  state :atom do
113
- rule /\(/, Punctuation, :atom_content
114
+ rule %r/\(/, Punctuation, :atom_content
114
115
  end
115
116
 
116
117
  state :list do
117
- rule /\[/, Punctuation, :list_content
118
+ rule %r/\[/, Punctuation, :list_content
118
119
  end
119
120
 
120
121
  state :list_content do
121
- rule /\]/, Punctuation, :pop!
122
+ rule %r/\]/, Punctuation, :pop!
122
123
  mixin :expression
123
124
  end
124
125
 
125
126
  state :set do
126
- rule /{/, Punctuation, :set_content
127
+ rule %r/{/, Punctuation, :set_content
127
128
  end
128
129
 
129
130
  state :set_content do
130
- rule /}/, Punctuation, :pop!
131
+ rule %r/}/, Punctuation, :pop!
131
132
  mixin :expression
132
133
  end
133
-
134
+
134
135
  state :expression do
135
136
  mixin :ignore
136
137
  mixin :comment
@@ -160,22 +161,22 @@ module Rouge
160
161
 
161
162
  state :keywords_namespace do
162
163
  keywords = %w(with in inherit)
163
- rule /(?:#{keywords.join('|')})\b/, Keyword::Namespace
164
+ rule %r/(?:#{keywords.join('|')})\b/, Keyword::Namespace
164
165
  end
165
166
 
166
167
  state :keywords_declaration do
167
168
  keywords = %w(let)
168
- rule /(?:#{keywords.join('|')})\b/, Keyword::Declaration
169
+ rule %r/(?:#{keywords.join('|')})\b/, Keyword::Declaration
169
170
  end
170
171
 
171
172
  state :keywords_conditional do
172
173
  keywords = %w(if then else)
173
- rule /(?:#{keywords.join('|')})\b/, Keyword
174
+ rule %r/(?:#{keywords.join('|')})\b/, Keyword
174
175
  end
175
176
 
176
177
  state :keywords_reserved do
177
178
  keywords = %w(rec assert map)
178
- rule /(?:#{keywords.join('|')})\b/, Keyword::Reserved
179
+ rule %r/(?:#{keywords.join('|')})\b/, Keyword::Reserved
179
180
  end
180
181
 
181
182
  state :keywords_builtin do
@@ -191,7 +192,7 @@ module Rouge
191
192
  throw
192
193
  toString
193
194
  )
194
- rule /(?:#{keywords.join('|')})\b/, Keyword::Reserved
195
+ rule %r/(?:#{keywords.join('|')})\b/, Keyword::Reserved
195
196
  end
196
197
 
197
198
  state :ignore do
@@ -1,194 +1,21 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Rouge
4
5
  module Lexers
5
6
  load_lexer 'c.rb'
7
+ load_lexer 'objective_c/common.rb'
6
8
 
7
9
  class ObjectiveC < C
10
+ extend ObjectiveCCommon
11
+
8
12
  tag 'objective_c'
9
13
  title "Objective-C"
10
14
  desc 'an extension of C commonly used to write Apple software'
11
- aliases 'objc', 'obj-c', 'obj_c'
15
+ aliases 'objc', 'obj-c', 'obj_c', 'objectivec'
12
16
  filenames '*.m', '*.h'
13
17
 
14
18
  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
19
  end
193
20
  end
194
21
  end
@@ -0,0 +1,184 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ module ObjectiveCCommon
7
+ id = /[a-z$_][a-z0-9$_]*/i
8
+
9
+ def at_keywords
10
+ @at_keywords ||= %w(
11
+ selector private protected public encode synchronized try
12
+ throw catch finally end property synthesize dynamic optional
13
+ interface implementation import autoreleasepool
14
+ )
15
+ end
16
+
17
+ def at_builtins
18
+ @at_builtins ||= %w(true false YES NO)
19
+ end
20
+
21
+ def builtins
22
+ @builtins ||= %w(YES NO nil)
23
+ end
24
+
25
+ def self.extended(base)
26
+ base.prepend :statements do
27
+ rule %r/@"/, base::Str, :string
28
+ rule %r/@'(\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|\\.|[^\\'\n]')/,
29
+ base::Str::Char
30
+ rule %r/@(\d+[.]\d*|[.]\d+|\d+)e[+-]?\d+l?/i,
31
+ base::Num::Float
32
+ rule %r/@(\d+[.]\d*|[.]\d+|\d+f)f?/i, base::Num::Float
33
+ rule %r/@0x\h+[lL]?/, base::Num::Hex
34
+ rule %r/@0[0-7]+l?/i, base::Num::Oct
35
+ rule %r/@\d+l?/, base::Num::Integer
36
+ rule %r/\bin\b/, base::Keyword
37
+
38
+ rule %r/@(?:interface|implementation)\b/, base::Keyword, :objc_classname
39
+ rule %r/@(?:class|protocol)\b/, base::Keyword, :forward_classname
40
+
41
+ rule %r/@([[:alnum:]]+)/ do |m|
42
+ if base.at_keywords.include? m[1]
43
+ token base::Keyword
44
+ elsif base.at_builtins.include? m[1]
45
+ token base::Name::Builtin
46
+ else
47
+ token base::Error
48
+ end
49
+ end
50
+
51
+ rule %r/[?]/, base::Punctuation, :ternary
52
+ rule %r/\[/, base::Punctuation, :message
53
+ rule %r/@\[/, base::Punctuation, :array_literal
54
+ rule %r/@\{/, base::Punctuation, :dictionary_literal
55
+ end
56
+
57
+ id = /[a-z$_][a-z0-9$_]*/i
58
+
59
+ base.state :ternary do
60
+ rule %r/:/, base::Punctuation, :pop!
61
+ mixin :statements
62
+ end
63
+
64
+ base.state :message_shared do
65
+ rule %r/\]/, base::Punctuation, :pop!
66
+ rule %r/\{/, base::Punctuation, :pop!
67
+ rule %r/;/, base::Error
68
+
69
+ mixin :statements
70
+ end
71
+
72
+ base.state :message do
73
+ rule %r/(#{id})(\s*)(:)/ do
74
+ groups(base::Name::Function, base::Text, base::Punctuation)
75
+ goto :message_with_args
76
+ end
77
+
78
+ rule %r/(#{id})(\s*)(\])/ do
79
+ groups(base::Name::Function, base::Text, base::Punctuation)
80
+ pop!
81
+ end
82
+
83
+ mixin :message_shared
84
+ end
85
+
86
+ base.state :message_with_args do
87
+ rule %r/\{/, base::Punctuation, :function
88
+ rule %r/(#{id})(\s*)(:)/ do
89
+ groups(base::Name::Function, base::Text, base::Punctuation)
90
+ pop!
91
+ end
92
+
93
+ mixin :message_shared
94
+ end
95
+
96
+ base.state :array_literal do
97
+ rule %r/]/, base::Punctuation, :pop!
98
+ rule %r/,/, base::Punctuation
99
+ mixin :statements
100
+ end
101
+
102
+ base.state :dictionary_literal do
103
+ rule %r/}/, base::Punctuation, :pop!
104
+ rule %r/,/, base::Punctuation
105
+ mixin :statements
106
+ end
107
+
108
+ base.state :objc_classname do
109
+ mixin :whitespace
110
+
111
+ rule %r/(#{id})(\s*)(:)(\s*)(#{id})/ do
112
+ groups(base::Name::Class, base::Text,
113
+ base::Punctuation, base::Text,
114
+ base::Name::Class)
115
+ pop!
116
+ end
117
+
118
+ rule %r/(#{id})(\s*)([(])(\s*)(#{id})(\s*)([)])/ do
119
+ groups(base::Name::Class, base::Text,
120
+ base::Punctuation, base::Text,
121
+ base::Name::Label, base::Text,
122
+ base::Punctuation)
123
+ pop!
124
+ end
125
+
126
+ rule id, base::Name::Class, :pop!
127
+ end
128
+
129
+ base.state :forward_classname do
130
+ mixin :whitespace
131
+
132
+ rule %r/(#{id})(\s*)(,)(\s*)/ do
133
+ groups(base::Name::Class, base::Text, base::Punctuation, base::Text)
134
+ push
135
+ end
136
+
137
+ rule %r/(#{id})(\s*)(;?)/ do
138
+ groups(base::Name::Class, base::Text, base::Punctuation)
139
+ pop!
140
+ end
141
+ end
142
+
143
+ base.prepend :root do
144
+ rule %r(
145
+ ([-+])(\s*)
146
+ ([(].*?[)])?(\s*)
147
+ (?=#{id}:?)
148
+ )ix do |m|
149
+ token base::Keyword, m[1]
150
+ token base::Text, m[2]
151
+ recurse(m[3]) if m[3]
152
+ token base::Text, m[4]
153
+ push :method_definition
154
+ end
155
+ end
156
+
157
+ base.state :method_definition do
158
+ rule %r/,/, base::Punctuation
159
+ rule %r/[.][.][.]/, base::Punctuation
160
+ rule %r/([(].*?[)])(#{id})/ do |m|
161
+ recurse m[1]; token base::Name::Variable, m[2]
162
+ end
163
+
164
+ rule %r/(#{id})(\s*)(:)/m do
165
+ groups(base::Name::Function, base::Text, base::Punctuation)
166
+ end
167
+
168
+ rule %r/;/, base::Punctuation, :pop!
169
+
170
+ rule %r/{/ do
171
+ token base::Punctuation
172
+ goto :function
173
+ end
174
+
175
+ mixin :inline_whitespace
176
+ rule %r(//.*?\n), base::Comment::Single
177
+ rule %r/\s+/m, base::Text
178
+
179
+ rule(//) { pop! }
180
+ end
181
+ end
182
+ end
183
+ end
184
+ end