rouge-alda 3.3.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 (335) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +28 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +18 -0
  5. data/lib/rouge/cli.rb +432 -0
  6. data/lib/rouge/demos/abap +6 -0
  7. data/lib/rouge/demos/actionscript +4 -0
  8. data/lib/rouge/demos/alda +10 -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/crystal +45 -0
  27. data/lib/rouge/demos/csharp +5 -0
  28. data/lib/rouge/demos/css +4 -0
  29. data/lib/rouge/demos/d +16 -0
  30. data/lib/rouge/demos/dart +6 -0
  31. data/lib/rouge/demos/diff +7 -0
  32. data/lib/rouge/demos/digdag +19 -0
  33. data/lib/rouge/demos/docker +9 -0
  34. data/lib/rouge/demos/dot +5 -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/hcl +7 -0
  54. data/lib/rouge/demos/html +8 -0
  55. data/lib/rouge/demos/http +14 -0
  56. data/lib/rouge/demos/hylang +10 -0
  57. data/lib/rouge/demos/idlang +8 -0
  58. data/lib/rouge/demos/igorpro +9 -0
  59. data/lib/rouge/demos/ini +4 -0
  60. data/lib/rouge/demos/io +11 -0
  61. data/lib/rouge/demos/irb +4 -0
  62. data/lib/rouge/demos/irb_output +2 -0
  63. data/lib/rouge/demos/java +5 -0
  64. data/lib/rouge/demos/javascript +1 -0
  65. data/lib/rouge/demos/jinja +9 -0
  66. data/lib/rouge/demos/json +1 -0
  67. data/lib/rouge/demos/json-doc +1 -0
  68. data/lib/rouge/demos/jsonnet +28 -0
  69. data/lib/rouge/demos/jsp +29 -0
  70. data/lib/rouge/demos/jsx +17 -0
  71. data/lib/rouge/demos/julia +11 -0
  72. data/lib/rouge/demos/kotlin +3 -0
  73. data/lib/rouge/demos/lasso +12 -0
  74. data/lib/rouge/demos/liquid +11 -0
  75. data/lib/rouge/demos/literate_coffeescript +3 -0
  76. data/lib/rouge/demos/literate_haskell +7 -0
  77. data/lib/rouge/demos/llvm +20 -0
  78. data/lib/rouge/demos/lua +12 -0
  79. data/lib/rouge/demos/m68k +16 -0
  80. data/lib/rouge/demos/make +6 -0
  81. data/lib/rouge/demos/markdown +4 -0
  82. data/lib/rouge/demos/mathematica +8 -0
  83. data/lib/rouge/demos/matlab +6 -0
  84. data/lib/rouge/demos/moonscript +16 -0
  85. data/lib/rouge/demos/mosel +10 -0
  86. data/lib/rouge/demos/mxml +22 -0
  87. data/lib/rouge/demos/nasm +26 -0
  88. data/lib/rouge/demos/nginx +5 -0
  89. data/lib/rouge/demos/nim +27 -0
  90. data/lib/rouge/demos/nix +19 -0
  91. data/lib/rouge/demos/objective_c +18 -0
  92. data/lib/rouge/demos/ocaml +12 -0
  93. data/lib/rouge/demos/pascal +14 -0
  94. data/lib/rouge/demos/perl +5 -0
  95. data/lib/rouge/demos/php +3 -0
  96. data/lib/rouge/demos/plaintext +1 -0
  97. data/lib/rouge/demos/plist +142 -0
  98. data/lib/rouge/demos/pony +17 -0
  99. data/lib/rouge/demos/powershell +49 -0
  100. data/lib/rouge/demos/praat +26 -0
  101. data/lib/rouge/demos/prolog +9 -0
  102. data/lib/rouge/demos/prometheus +9 -0
  103. data/lib/rouge/demos/properties +7 -0
  104. data/lib/rouge/demos/protobuf +5 -0
  105. data/lib/rouge/demos/puppet +6 -0
  106. data/lib/rouge/demos/python +6 -0
  107. data/lib/rouge/demos/q +2 -0
  108. data/lib/rouge/demos/qml +9 -0
  109. data/lib/rouge/demos/r +8 -0
  110. data/lib/rouge/demos/racket +24 -0
  111. data/lib/rouge/demos/ruby +9 -0
  112. data/lib/rouge/demos/rust +12 -0
  113. data/lib/rouge/demos/sass +3 -0
  114. data/lib/rouge/demos/scala +3 -0
  115. data/lib/rouge/demos/scheme +4 -0
  116. data/lib/rouge/demos/scss +5 -0
  117. data/lib/rouge/demos/sed +4 -0
  118. data/lib/rouge/demos/shell +2 -0
  119. data/lib/rouge/demos/sieve +10 -0
  120. data/lib/rouge/demos/slim +17 -0
  121. data/lib/rouge/demos/smalltalk +6 -0
  122. data/lib/rouge/demos/smarty +12 -0
  123. data/lib/rouge/demos/sml +4 -0
  124. data/lib/rouge/demos/sqf +14 -0
  125. data/lib/rouge/demos/sql +1 -0
  126. data/lib/rouge/demos/swift +5 -0
  127. data/lib/rouge/demos/tap +5 -0
  128. data/lib/rouge/demos/tcl +1 -0
  129. data/lib/rouge/demos/terraform +31 -0
  130. data/lib/rouge/demos/tex +1 -0
  131. data/lib/rouge/demos/toml +9 -0
  132. data/lib/rouge/demos/tsx +17 -0
  133. data/lib/rouge/demos/tulip +13 -0
  134. data/lib/rouge/demos/turtle +26 -0
  135. data/lib/rouge/demos/twig +9 -0
  136. data/lib/rouge/demos/typescript +1 -0
  137. data/lib/rouge/demos/vala +8 -0
  138. data/lib/rouge/demos/vb +4 -0
  139. data/lib/rouge/demos/verilog +27 -0
  140. data/lib/rouge/demos/vhdl +23 -0
  141. data/lib/rouge/demos/viml +14 -0
  142. data/lib/rouge/demos/vue +11 -0
  143. data/lib/rouge/demos/wollok +11 -0
  144. data/lib/rouge/demos/xml +2 -0
  145. data/lib/rouge/demos/yaml +4 -0
  146. data/lib/rouge/formatter.rb +76 -0
  147. data/lib/rouge/formatters/html.rb +38 -0
  148. data/lib/rouge/formatters/html_inline.rb +31 -0
  149. data/lib/rouge/formatters/html_legacy.rb +45 -0
  150. data/lib/rouge/formatters/html_linewise.rb +28 -0
  151. data/lib/rouge/formatters/html_pygments.rb +18 -0
  152. data/lib/rouge/formatters/html_table.rb +62 -0
  153. data/lib/rouge/formatters/null.rb +20 -0
  154. data/lib/rouge/formatters/terminal256.rb +181 -0
  155. data/lib/rouge/guesser.rb +57 -0
  156. data/lib/rouge/guessers/disambiguation.rb +106 -0
  157. data/lib/rouge/guessers/filename.rb +27 -0
  158. data/lib/rouge/guessers/glob_mapping.rb +45 -0
  159. data/lib/rouge/guessers/mimetype.rb +16 -0
  160. data/lib/rouge/guessers/modeline.rb +46 -0
  161. data/lib/rouge/guessers/source.rb +31 -0
  162. data/lib/rouge/guessers/util.rb +34 -0
  163. data/lib/rouge/lexer.rb +462 -0
  164. data/lib/rouge/lexers/abap.rb +240 -0
  165. data/lib/rouge/lexers/actionscript.rb +196 -0
  166. data/lib/rouge/lexers/alda.rb +43 -0
  167. data/lib/rouge/lexers/apache/keywords.yml +764 -0
  168. data/lib/rouge/lexers/apache.rb +73 -0
  169. data/lib/rouge/lexers/apiblueprint.rb +49 -0
  170. data/lib/rouge/lexers/apple_script.rb +369 -0
  171. data/lib/rouge/lexers/awk.rb +162 -0
  172. data/lib/rouge/lexers/biml.rb +43 -0
  173. data/lib/rouge/lexers/bsl.rb +82 -0
  174. data/lib/rouge/lexers/c.rb +213 -0
  175. data/lib/rouge/lexers/ceylon.rb +124 -0
  176. data/lib/rouge/lexers/cfscript.rb +154 -0
  177. data/lib/rouge/lexers/clojure.rb +113 -0
  178. data/lib/rouge/lexers/cmake.rb +207 -0
  179. data/lib/rouge/lexers/coffeescript.rb +175 -0
  180. data/lib/rouge/lexers/common_lisp.rb +346 -0
  181. data/lib/rouge/lexers/conf.rb +25 -0
  182. data/lib/rouge/lexers/console.rb +137 -0
  183. data/lib/rouge/lexers/coq.rb +188 -0
  184. data/lib/rouge/lexers/cpp.rb +79 -0
  185. data/lib/rouge/lexers/crystal.rb +430 -0
  186. data/lib/rouge/lexers/csharp.rb +115 -0
  187. data/lib/rouge/lexers/css.rb +274 -0
  188. data/lib/rouge/lexers/d.rb +177 -0
  189. data/lib/rouge/lexers/dart.rb +105 -0
  190. data/lib/rouge/lexers/diff.rb +33 -0
  191. data/lib/rouge/lexers/digdag.rb +70 -0
  192. data/lib/rouge/lexers/docker.rb +51 -0
  193. data/lib/rouge/lexers/dot.rb +69 -0
  194. data/lib/rouge/lexers/eiffel.rb +66 -0
  195. data/lib/rouge/lexers/elixir.rb +134 -0
  196. data/lib/rouge/lexers/elm.rb +90 -0
  197. data/lib/rouge/lexers/erb.rb +53 -0
  198. data/lib/rouge/lexers/erlang.rb +115 -0
  199. data/lib/rouge/lexers/factor.rb +303 -0
  200. data/lib/rouge/lexers/fortran.rb +178 -0
  201. data/lib/rouge/lexers/fsharp.rb +119 -0
  202. data/lib/rouge/lexers/gherkin/keywords.rb +16 -0
  203. data/lib/rouge/lexers/gherkin.rb +138 -0
  204. data/lib/rouge/lexers/glsl.rb +136 -0
  205. data/lib/rouge/lexers/go.rb +175 -0
  206. data/lib/rouge/lexers/gradle.rb +38 -0
  207. data/lib/rouge/lexers/graphql.rb +254 -0
  208. data/lib/rouge/lexers/groovy.rb +113 -0
  209. data/lib/rouge/lexers/hack.rb +49 -0
  210. data/lib/rouge/lexers/haml.rb +230 -0
  211. data/lib/rouge/lexers/handlebars.rb +80 -0
  212. data/lib/rouge/lexers/haskell.rb +198 -0
  213. data/lib/rouge/lexers/hcl.rb +163 -0
  214. data/lib/rouge/lexers/html.rb +140 -0
  215. data/lib/rouge/lexers/http.rb +81 -0
  216. data/lib/rouge/lexers/hylang.rb +94 -0
  217. data/lib/rouge/lexers/idlang.rb +312 -0
  218. data/lib/rouge/lexers/igorpro.rb +664 -0
  219. data/lib/rouge/lexers/ini.rb +54 -0
  220. data/lib/rouge/lexers/io.rb +69 -0
  221. data/lib/rouge/lexers/irb.rb +67 -0
  222. data/lib/rouge/lexers/java.rb +88 -0
  223. data/lib/rouge/lexers/javascript.rb +283 -0
  224. data/lib/rouge/lexers/jinja.rb +138 -0
  225. data/lib/rouge/lexers/json.rb +30 -0
  226. data/lib/rouge/lexers/json_doc.rb +24 -0
  227. data/lib/rouge/lexers/jsonnet.rb +152 -0
  228. data/lib/rouge/lexers/jsp.rb +120 -0
  229. data/lib/rouge/lexers/jsx.rb +104 -0
  230. data/lib/rouge/lexers/julia.rb +167 -0
  231. data/lib/rouge/lexers/kotlin.rb +127 -0
  232. data/lib/rouge/lexers/lasso/keywords.yml +446 -0
  233. data/lib/rouge/lexers/lasso.rb +215 -0
  234. data/lib/rouge/lexers/liquid.rb +288 -0
  235. data/lib/rouge/lexers/literate_coffeescript.rb +34 -0
  236. data/lib/rouge/lexers/literate_haskell.rb +37 -0
  237. data/lib/rouge/lexers/llvm.rb +81 -0
  238. data/lib/rouge/lexers/lua/builtins.rb +24 -0
  239. data/lib/rouge/lexers/lua.rb +126 -0
  240. data/lib/rouge/lexers/m68k.rb +144 -0
  241. data/lib/rouge/lexers/make.rb +113 -0
  242. data/lib/rouge/lexers/markdown.rb +155 -0
  243. data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
  244. data/lib/rouge/lexers/mathematica.rb +96 -0
  245. data/lib/rouge/lexers/matlab/builtins.rb +13 -0
  246. data/lib/rouge/lexers/matlab.rb +72 -0
  247. data/lib/rouge/lexers/moonscript.rb +115 -0
  248. data/lib/rouge/lexers/mosel.rb +232 -0
  249. data/lib/rouge/lexers/mxml.rb +69 -0
  250. data/lib/rouge/lexers/nasm.rb +199 -0
  251. data/lib/rouge/lexers/nginx.rb +72 -0
  252. data/lib/rouge/lexers/nim.rb +153 -0
  253. data/lib/rouge/lexers/nix.rb +211 -0
  254. data/lib/rouge/lexers/objective_c.rb +195 -0
  255. data/lib/rouge/lexers/ocaml.rb +101 -0
  256. data/lib/rouge/lexers/pascal.rb +67 -0
  257. data/lib/rouge/lexers/perl.rb +201 -0
  258. data/lib/rouge/lexers/php/builtins.rb +196 -0
  259. data/lib/rouge/lexers/php.rb +194 -0
  260. data/lib/rouge/lexers/plain_text.rb +27 -0
  261. data/lib/rouge/lexers/plist.rb +47 -0
  262. data/lib/rouge/lexers/pony.rb +94 -0
  263. data/lib/rouge/lexers/powershell.rb +679 -0
  264. data/lib/rouge/lexers/praat.rb +351 -0
  265. data/lib/rouge/lexers/prolog.rb +61 -0
  266. data/lib/rouge/lexers/prometheus.rb +123 -0
  267. data/lib/rouge/lexers/properties.rb +52 -0
  268. data/lib/rouge/lexers/protobuf.rb +71 -0
  269. data/lib/rouge/lexers/puppet.rb +129 -0
  270. data/lib/rouge/lexers/python.rb +247 -0
  271. data/lib/rouge/lexers/q.rb +125 -0
  272. data/lib/rouge/lexers/qml.rb +74 -0
  273. data/lib/rouge/lexers/r.rb +90 -0
  274. data/lib/rouge/lexers/racket.rb +545 -0
  275. data/lib/rouge/lexers/ruby.rb +439 -0
  276. data/lib/rouge/lexers/rust.rb +198 -0
  277. data/lib/rouge/lexers/sass/common.rb +181 -0
  278. data/lib/rouge/lexers/sass.rb +75 -0
  279. data/lib/rouge/lexers/scala.rb +143 -0
  280. data/lib/rouge/lexers/scheme.rb +113 -0
  281. data/lib/rouge/lexers/scss.rb +35 -0
  282. data/lib/rouge/lexers/sed.rb +173 -0
  283. data/lib/rouge/lexers/shell.rb +190 -0
  284. data/lib/rouge/lexers/sieve.rb +97 -0
  285. data/lib/rouge/lexers/slim.rb +229 -0
  286. data/lib/rouge/lexers/smalltalk.rb +117 -0
  287. data/lib/rouge/lexers/smarty.rb +81 -0
  288. data/lib/rouge/lexers/sml.rb +345 -0
  289. data/lib/rouge/lexers/sqf/commands.rb +15 -0
  290. data/lib/rouge/lexers/sqf.rb +109 -0
  291. data/lib/rouge/lexers/sql.rb +141 -0
  292. data/lib/rouge/lexers/swift.rb +182 -0
  293. data/lib/rouge/lexers/tap.rb +89 -0
  294. data/lib/rouge/lexers/tcl.rb +193 -0
  295. data/lib/rouge/lexers/terraform.rb +105 -0
  296. data/lib/rouge/lexers/tex.rb +70 -0
  297. data/lib/rouge/lexers/toml.rb +68 -0
  298. data/lib/rouge/lexers/tsx.rb +20 -0
  299. data/lib/rouge/lexers/tulip.rb +108 -0
  300. data/lib/rouge/lexers/turtle.rb +64 -0
  301. data/lib/rouge/lexers/twig.rb +40 -0
  302. data/lib/rouge/lexers/typescript/common.rb +34 -0
  303. data/lib/rouge/lexers/typescript.rb +23 -0
  304. data/lib/rouge/lexers/vala.rb +78 -0
  305. data/lib/rouge/lexers/vb.rb +165 -0
  306. data/lib/rouge/lexers/verilog.rb +165 -0
  307. data/lib/rouge/lexers/vhdl.rb +98 -0
  308. data/lib/rouge/lexers/viml/keywords.rb +14 -0
  309. data/lib/rouge/lexers/viml.rb +102 -0
  310. data/lib/rouge/lexers/vue.rb +124 -0
  311. data/lib/rouge/lexers/wollok.rb +104 -0
  312. data/lib/rouge/lexers/xml.rb +58 -0
  313. data/lib/rouge/lexers/yaml.rb +374 -0
  314. data/lib/rouge/plugins/redcarpet.rb +31 -0
  315. data/lib/rouge/regex_lexer.rb +442 -0
  316. data/lib/rouge/template_lexer.rb +21 -0
  317. data/lib/rouge/text_analyzer.rb +50 -0
  318. data/lib/rouge/theme.rb +214 -0
  319. data/lib/rouge/themes/base16.rb +131 -0
  320. data/lib/rouge/themes/colorful.rb +68 -0
  321. data/lib/rouge/themes/github.rb +72 -0
  322. data/lib/rouge/themes/gruvbox.rb +168 -0
  323. data/lib/rouge/themes/igor_pro.rb +21 -0
  324. data/lib/rouge/themes/molokai.rb +83 -0
  325. data/lib/rouge/themes/monokai.rb +93 -0
  326. data/lib/rouge/themes/monokai_sublime.rb +92 -0
  327. data/lib/rouge/themes/pastie.rb +70 -0
  328. data/lib/rouge/themes/thankful_eyes.rb +75 -0
  329. data/lib/rouge/themes/tulip.rb +70 -0
  330. data/lib/rouge/token.rb +183 -0
  331. data/lib/rouge/util.rb +102 -0
  332. data/lib/rouge/version.rb +8 -0
  333. data/lib/rouge.rb +84 -0
  334. data/rouge.gemspec +25 -0
  335. metadata +384 -0
@@ -0,0 +1,194 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class PHP < TemplateLexer
7
+ title "PHP"
8
+ desc "The PHP scripting language (php.net)"
9
+ tag 'php'
10
+ aliases 'php', 'php3', 'php4', 'php5'
11
+ filenames '*.php', '*.php[345t]','*.phtml',
12
+ # Support Drupal file extensions, see:
13
+ # https://github.com/gitlabhq/gitlabhq/issues/8900
14
+ '*.module', '*.inc', '*.profile', '*.install', '*.test'
15
+ mimetypes 'text/x-php'
16
+
17
+ option :start_inline, 'Whether to start with inline php or require <?php ... ?>. (default: best guess)'
18
+ option :funcnamehighlighting, 'Whether to highlight builtin functions (default: true)'
19
+ option :disabledmodules, 'Disable certain modules from being highlighted as builtins (default: empty)'
20
+
21
+ def initialize(*)
22
+ super
23
+
24
+ # if truthy, the lexer starts highlighting with php code
25
+ # (no <?php required)
26
+ @start_inline = bool_option(:start_inline) { :guess }
27
+ @funcnamehighlighting = bool_option(:funcnamehighlighting) { true }
28
+ @disabledmodules = list_option(:disabledmodules)
29
+ end
30
+
31
+ def self.builtins
32
+ load Pathname.new(__FILE__).dirname.join('php/builtins.rb')
33
+ self.builtins
34
+ end
35
+
36
+ def builtins
37
+ return [] unless @funcnamehighlighting
38
+
39
+ @builtins ||= Set.new.tap do |builtins|
40
+ self.class.builtins.each do |mod, fns|
41
+ next if @disabledmodules.include? mod
42
+ builtins.merge(fns)
43
+ end
44
+ end
45
+ end
46
+
47
+ # source: http://php.net/manual/en/language.variables.basics.php
48
+ # the given regex is invalid utf8, so... we're using the unicode
49
+ # "Letter" property instead.
50
+ id = /[\p{L}_][\p{L}\p{N}_]*/
51
+ nsid = /#{id}(?:\\#{id})*/
52
+
53
+ start do
54
+ case @start_inline
55
+ when true
56
+ push :template
57
+ push :php
58
+ when false
59
+ push :template
60
+ when :guess
61
+ # pass
62
+ end
63
+ end
64
+
65
+ def self.keywords
66
+ @keywords ||= Set.new %w(
67
+ and E_PARSE old_function E_ERROR or as E_WARNING parent eval
68
+ PHP_OS break exit case extends PHP_VERSION cfunction FALSE
69
+ print for require continue foreach require_once declare return
70
+ default static do switch die stdClass echo else TRUE elseif
71
+ var empty if xor enddeclare include virtual endfor include_once
72
+ while endforeach global __FILE__ endif list __LINE__ endswitch
73
+ new __sleep endwhile not array __wakeup E_ALL NULL final
74
+ php_user_filter interface implements public private protected
75
+ abstract clone try catch throw this use namespace yield
76
+ )
77
+ end
78
+
79
+ def self.detect?(text)
80
+ return true if text.shebang?('php')
81
+ return false if /^<\?hh/ =~ text
82
+ return true if /^<\?php/ =~ text
83
+ end
84
+
85
+ state :root do
86
+ # some extremely rough heuristics to decide whether to start inline or not
87
+ rule(/\s*(?=<)/m) { delegate parent; push :template }
88
+ rule(/[^$]+(?=<\?(php|=))/) { delegate parent; push :template }
89
+
90
+ rule(//) { push :template; push :php }
91
+ end
92
+
93
+ state :template do
94
+ rule /<\?(php|=)?/, Comment::Preproc, :php
95
+ rule(/.*?(?=<\?)|.*/m) { delegate parent }
96
+ end
97
+
98
+ state :php do
99
+ rule /\?>/, Comment::Preproc, :pop!
100
+ # heredocs
101
+ rule /<<<('?)(#{id})\1\n.*?\n\2;?\n/im, Str::Heredoc
102
+ rule /\s+/, Text
103
+ rule /#.*?$/, Comment::Single
104
+ rule %r(//.*?$), Comment::Single
105
+ # empty comment, otherwise seen as the start of a docstring
106
+ rule %r(/\*\*/), Comment::Multiline
107
+ rule %r(/\*\*.*?\*/)m, Str::Doc
108
+ rule %r(/\*.*?\*/)m, Comment::Multiline
109
+ rule /(->|::)(\s*)(#{id})/ do
110
+ groups Operator, Text, Name::Attribute
111
+ end
112
+
113
+ rule /[~!%^&*+=\|:.<>\/?@-]+/, Operator
114
+ rule /[\[\]{}();,]/, Punctuation
115
+ rule /class\b/, Keyword, :classname
116
+ # anonymous functions
117
+ rule /(function)(\s*)(?=\()/ do
118
+ groups Keyword, Text
119
+ end
120
+
121
+ # named functions
122
+ rule /(function)(\s+)(&?)(\s*)/ do
123
+ groups Keyword, Text, Operator, Text
124
+ push :funcname
125
+ end
126
+
127
+ rule /(const)(\s+)(#{id})/i do
128
+ groups Keyword, Text, Name::Constant
129
+ end
130
+
131
+ rule /(true|false|null)\b/, Keyword::Constant
132
+ rule /\$\{\$+#{id}\}/i, Name::Variable
133
+ rule /\$+#{id}/i, Name::Variable
134
+
135
+ # may be intercepted for builtin highlighting
136
+ rule /\\?#{nsid}/i do |m|
137
+ name = m[0]
138
+
139
+ if self.class.keywords.include? name
140
+ token Keyword
141
+ elsif self.builtins.include? name
142
+ token Name::Builtin
143
+ else
144
+ token Name::Other
145
+ end
146
+ end
147
+
148
+ rule /(\d+\.\d*|\d*\.\d+)(e[+-]?\d+)?/i, Num::Float
149
+ rule /\d+e[+-]?\d+/i, Num::Float
150
+ rule /0[0-7]+/, Num::Oct
151
+ rule /0x[a-f0-9]+/i, Num::Hex
152
+ rule /\d+/, Num::Integer
153
+ rule /'([^'\\]*(?:\\.[^'\\]*)*)'/, Str::Single
154
+ rule /`([^`\\]*(?:\\.[^`\\]*)*)`/, Str::Backtick
155
+ rule /"/, Str::Double, :string
156
+ end
157
+
158
+ state :classname do
159
+ rule /\s+/, Text
160
+ rule /#{nsid}/, Name::Class, :pop!
161
+ end
162
+
163
+ state :funcname do
164
+ rule /#{id}/, Name::Function, :pop!
165
+ end
166
+
167
+ state :string do
168
+ rule /"/, Str::Double, :pop!
169
+ rule /[^\\{$"]+/, Str::Double
170
+ rule /\\([nrt\"$\\]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})/,
171
+ Str::Escape
172
+ rule /\$#{id}(\[\S+\]|->#{id})?/, Name::Variable
173
+
174
+ rule /\{\$\{/, Str::Interpol, :interp_double
175
+ rule /\{(?=\$)/, Str::Interpol, :interp_single
176
+ rule /(\{)(\S+)(\})/ do
177
+ groups Str::Interpol, Name::Variable, Str::Interpol
178
+ end
179
+
180
+ rule /[${\\]+/, Str::Double
181
+ end
182
+
183
+ state :interp_double do
184
+ rule /\}\}/, Str::Interpol, :pop!
185
+ mixin :php
186
+ end
187
+
188
+ state :interp_single do
189
+ rule /\}/, Str::Interpol, :pop!
190
+ mixin :php
191
+ end
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,27 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class PlainText < Lexer
7
+ title "Plain Text"
8
+ desc "A boring lexer that doesn't highlight anything"
9
+
10
+ tag 'plaintext'
11
+ aliases 'text'
12
+ filenames '*.txt'
13
+ mimetypes 'text/plain'
14
+
15
+ attr_reader :token
16
+ def initialize(*)
17
+ super
18
+
19
+ @token = token_option(:token) || Text
20
+ end
21
+
22
+ def stream_tokens(string, &b)
23
+ yield self.token, string
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Plist < RegexLexer
6
+ desc 'plist'
7
+ tag 'plist'
8
+ aliases 'plist'
9
+ filenames *%w(*.plist *.pbxproj)
10
+
11
+ mimetypes 'text/x-plist', 'application/x-plist'
12
+
13
+ state :whitespace do
14
+ rule /\s+/, Text::Whitespace
15
+ end
16
+
17
+ state :root do
18
+ rule %r{//.*$}, Comment
19
+ rule %r{/\*.+?\*/}m, Comment
20
+ mixin :whitespace
21
+ rule /{/, Punctuation, :dictionary
22
+ rule /\(/, Punctuation, :array
23
+ rule /"([^"\\]|\\.)*"/, Literal::String::Double
24
+ rule /'([^'\\]|\\.)*'/, Literal::String::Single
25
+ rule /</, Punctuation, :data
26
+ rule %r{[\w_$/:.-]+}, Literal
27
+ end
28
+
29
+ state :dictionary do
30
+ mixin :root
31
+ rule /[=;]/, Punctuation
32
+ rule /}/, Punctuation, :pop!
33
+ end
34
+
35
+ state :array do
36
+ mixin :root
37
+ rule /[,]/, Punctuation
38
+ rule /\)/, Punctuation, :pop!
39
+ end
40
+
41
+ state :data do
42
+ rule /[\h\s]+/, Literal::Number::Hex
43
+ rule />/, Punctuation, :pop!
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,94 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Pony < RegexLexer
7
+ tag 'pony'
8
+ filenames '*.pony'
9
+
10
+ keywords = Set.new %w(
11
+ actor addressof and as
12
+ be break
13
+ class compiler_intrinsic consume continue
14
+ do
15
+ else elseif embed end error
16
+ for fun
17
+ if ifdef in interface is isnt
18
+ lambda let
19
+ match
20
+ new not
21
+ object
22
+ primitive
23
+ recover repeat return
24
+ struct
25
+ then this trait try type
26
+ until use
27
+ var
28
+ where while with
29
+ )
30
+
31
+ capabilities = Set.new %w(
32
+ box iso ref tag trn val
33
+ )
34
+
35
+ types = Set.new %w(
36
+ Number Signed Unsigned Float
37
+ I8 I16 I32 I64 I128 U8 U32 U64 U128 F32 F64
38
+ EventID Align IntFormat NumberPrefix FloatFormat
39
+ Type
40
+ )
41
+
42
+ state :whitespace do
43
+ rule /[\s\t\r\n]+/m, Text
44
+ end
45
+
46
+ state :root do
47
+ mixin :whitespace
48
+ rule /"""/, Str::Doc, :docstring
49
+ rule %r{//(.*?)\n}, Comment::Single
50
+ rule %r{/(\\\n)?[*](.|\n)*?[*](\\\n)?/}, Comment::Multiline
51
+ rule /"/, Str, :string
52
+ rule %r([~!%^&*+=\|?:<>/-]), Operator
53
+ rule /(true|false|NULL)\b/, Name::Constant
54
+ rule %r{(?:[A-Z_][a-zA-Z0-9_]*)}, Name::Class
55
+ rule /[()\[\],.';]/, Punctuation
56
+
57
+ # Numbers
58
+ rule /0[xX]([0-9a-fA-F_]*\.[0-9a-fA-F_]+|[0-9a-fA-F_]+)[pP][+\-]?[0-9_]+[fFL]?[i]?/, Num::Float
59
+ rule /[0-9_]+(\.[0-9_]+[eE][+\-]?[0-9_]+|\.[0-9_]*|[eE][+\-]?[0-9_]+)[fFL]?[i]?/, Num::Float
60
+ rule /\.(0|[1-9][0-9_]*)([eE][+\-]?[0-9_]+)?[fFL]?[i]?/, Num::Float
61
+ rule /0[xX][0-9a-fA-F_]+/, Num::Hex
62
+ rule /(0|[1-9][0-9_]*)([LUu]|Lu|LU|uL|UL)?/, Num::Integer
63
+
64
+ rule /[a-z_][a-z0-9_]*/io do |m|
65
+ match = m[0]
66
+
67
+ if capabilities.include?(match)
68
+ token Keyword::Declaration
69
+ elsif keywords.include?(match)
70
+ token Keyword::Reserved
71
+ elsif types.include?(match)
72
+ token Keyword::Type
73
+ else
74
+ token Name
75
+ end
76
+ end
77
+ end
78
+
79
+ state :string do
80
+ rule /"/, Str, :pop!
81
+ rule /\\([\\abfnrtv"']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})/, Str::Escape
82
+ rule /[^\\"\n]+/, Str
83
+ rule /\\\n/, Str
84
+ rule /\\/, Str # stray backslash
85
+ end
86
+
87
+ state :docstring do
88
+ rule /"""/, Str::Doc, :pop!
89
+ rule /\n/, Str::Doc
90
+ rule /./, Str::Doc
91
+ end
92
+ end
93
+ end
94
+ end