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,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
@@ -0,0 +1,66 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Pascal < RegexLexer
6
+ tag 'pascal'
7
+ title "Pascal"
8
+ desc 'a procedural programming language commonly used as a teaching language.'
9
+ filenames '*.pas'
10
+
11
+ mimetypes 'text/x-pascal'
12
+
13
+ id = /@?[_a-z]\w*/i
14
+
15
+ keywords = %w(
16
+ absolute abstract all and and_then array as asm assembler attribute
17
+ begin bindable case class const constructor delay destructor div do
18
+ downto else end except exit export exports external far file finalization
19
+ finally for forward function goto if implementation import in inc index
20
+ inherited initialization inline interface interrupt is label library
21
+ message mod module near nil not object of on only operator or or_else
22
+ otherwise out overload override packed pascal pow private procedure program
23
+ property protected public published qualified raise read record register
24
+ repeat resident resourcestring restricted safecall segment set shl shr
25
+ stdcall stored string then threadvar to try type unit until uses value var
26
+ view virtual while with write writeln xor
27
+ )
28
+
29
+ keywords_type = %w(
30
+ ansichar ansistring bool boolean byte bytebool cardinal char comp currency
31
+ double dword extended int64 integer iunknown longbool longint longword pansichar
32
+ pansistring pbool pboolean pbyte pbytearray pcardinal pchar pcomp pcurrency
33
+ pdate pdatetime pdouble pdword pextended phandle pint64 pinteger plongint plongword
34
+ pointer ppointer pshortint pshortstring psingle psmallint pstring pvariant pwidechar
35
+ pwidestring pword pwordarray pwordbool real real48 shortint shortstring single
36
+ smallint string tclass tdate tdatetime textfile thandle tobject ttime variant
37
+ widechar widestring word wordbool
38
+ )
39
+
40
+ state :whitespace do
41
+ # Spaces
42
+ rule /\s+/m, Text
43
+ # // Comments
44
+ rule %r((//).*$\n?), Comment::Single
45
+ # -- Comments
46
+ rule %r((--).*$\n?), Comment::Single
47
+ # (* Comments *)
48
+ rule %r(\(\*.*?\*\))m, Comment::Multiline
49
+ # { Comments }
50
+ rule %r(\{.*?\})m, Comment::Multiline
51
+ end
52
+
53
+ state :root do
54
+ mixin :whitespace
55
+
56
+ rule %r{((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?}, Num
57
+ rule %r{[~!@#\$%\^&\*\(\)\+`\-={}\[\]:;<>\?,\.\/\|\\]}, Punctuation
58
+ rule %r{'([^']|'')*'}, Str
59
+ rule /(true|false|nil)\b/i, Name::Builtin
60
+ rule /\b(#{keywords.join('|')})\b/i, Keyword
61
+ rule /\b(#{keywords_type.join('|')})\b/i, Keyword::Type
62
+ rule id, Name
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,196 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Perl < RegexLexer
6
+ title "Perl"
7
+ desc "The Perl scripting language (perl.org)"
8
+
9
+ tag 'perl'
10
+ aliases 'pl'
11
+
12
+ filenames '*.pl', '*.pm'
13
+ mimetypes 'text/x-perl', 'application/x-perl'
14
+
15
+ def self.detect?(text)
16
+ return true if text.shebang? 'perl'
17
+ end
18
+
19
+ keywords = %w(
20
+ case continue do else elsif for foreach if last my next our
21
+ redo reset then unless until while use print new BEGIN CHECK
22
+ INIT END return
23
+ )
24
+
25
+ builtins = %w(
26
+ abs accept alarm atan2 bind binmode bless caller chdir chmod
27
+ chomp chop chown chr chroot close closedir connect continue cos
28
+ crypt dbmclose dbmopen defined delete die dump each endgrent
29
+ endhostent endnetent endprotoent endpwent endservent eof eval
30
+ exec exists exit exp fcntl fileno flock fork format formline getc
31
+ getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent
32
+ getlogin getnetbyaddr getnetbyname getnetent getpeername
33
+ getpgrp getppid getpriority getprotobyname getprotobynumber
34
+ getprotoent getpwent getpwnam getpwuid getservbyname getservbyport
35
+ getservent getsockname getsockopt glob gmtime goto grep hex
36
+ import index int ioctl join keys kill last lc lcfirst length
37
+ link listen local localtime log lstat map mkdir msgctl msgget
38
+ msgrcv msgsnd my next no oct open opendir ord our pack package
39
+ pipe pop pos printf prototype push quotemeta rand read readdir
40
+ readline readlink readpipe recv redo ref rename require reverse
41
+ rewinddir rindex rmdir scalar seek seekdir select semctl semget
42
+ semop send setgrent sethostent setnetent setpgrp setpriority
43
+ setprotoent setpwent setservent setsockopt shift shmctl shmget
44
+ shmread shmwrite shutdown sin sleep socket socketpair sort splice
45
+ split sprintf sqrt srand stat study substr symlink syscall sysopen
46
+ sysread sysseek system syswrite tell telldir tie tied time times
47
+ tr truncate uc ucfirst umask undef unlink unpack unshift untie
48
+ utime values vec wait waitpid wantarray warn write
49
+ )
50
+
51
+ re_tok = Str::Regex
52
+
53
+ state :balanced_regex do
54
+ rule %r(/(\\[\\/]|[^/])*/[egimosx]*)m, re_tok, :pop!
55
+ rule %r(!(\\[\\!]|[^!])*![egimosx]*)m, re_tok, :pop!
56
+ rule %r(\\(\\\\|[^\\])*\\[egimosx]*)m, re_tok, :pop!
57
+ rule %r({(\\[\\}]|[^}])*}[egimosx]*), re_tok, :pop!
58
+ rule %r(<(\\[\\>]|[^>])*>[egimosx]*), re_tok, :pop!
59
+ rule %r(\[(\\[\\\]]|[^\]])*\][egimosx]*), re_tok, :pop!
60
+ rule %r[\((\\[\\\)]|[^\)])*\)[egimosx]*], re_tok, :pop!
61
+ rule %r(@(\\[\\@]|[^@])*@[egimosx]*), re_tok, :pop!
62
+ rule %r(%(\\[\\%]|[^%])*%[egimosx]*), re_tok, :pop!
63
+ rule %r(\$(\\[\\\$]|[^\$])*\$[egimosx]*), re_tok, :pop!
64
+ end
65
+
66
+ state :root do
67
+ rule /#.*?$/, Comment::Single
68
+ rule /^=[a-zA-Z0-9]+\s+.*?\n=cut/m, Comment::Multiline
69
+ rule /(?:#{keywords.join('|')})\b/, Keyword
70
+
71
+ rule /(format)(\s+)([a-zA-Z0-9_]+)(\s*)(=)(\s*\n)/ do
72
+ groups Keyword, Text, Name, Text, Punctuation, Text
73
+
74
+ push :format
75
+ end
76
+
77
+ rule /(?:eq|lt|gt|le|ge|ne|not|and|or|cmp)\b/, Operator::Word
78
+
79
+ # common delimiters
80
+ rule %r(s/(\\\\|\\/|[^/])*/(\\\\|\\/|[^/])*/[egimosx]*), re_tok
81
+ rule %r(s!(\\\\|\\!|[^!])*!(\\\\|\\!|[^!])*![egimosx]*), re_tok
82
+ rule %r(s\\(\\\\|[^\\])*\\(\\\\|[^\\])*\\[egimosx]*), re_tok
83
+ rule %r(s@(\\\\|\\@|[^@])*@(\\\\|\\@|[^@])*@[egimosx]*), re_tok
84
+ rule %r(s%(\\\\|\\%|[^%])*%(\\\\|\\%|[^%])*%[egimosx]*), re_tok
85
+
86
+ # balanced delimiters
87
+ rule %r(s{(\\\\|\\}|[^}])*}\s*), re_tok, :balanced_regex
88
+ rule %r(s<(\\\\|\\>|[^>])*>\s*), re_tok, :balanced_regex
89
+ rule %r(s\[(\\\\|\\\]|[^\]])*\]\s*), re_tok, :balanced_regex
90
+ rule %r[s\((\\\\|\\\)|[^\)])*\)\s*], re_tok, :balanced_regex
91
+
92
+ rule %r(m?/(\\\\|\\/|[^/\n])*/[gcimosx]*), re_tok
93
+ rule %r(m(?=[/!\\{<\[\(@%\$])), re_tok, :balanced_regex
94
+ rule %r(((?<==~)|(?<=\())\s*/(\\\\|\\/|[^/])*/[gcimosx]*),
95
+ re_tok, :balanced_regex
96
+
97
+ rule /\s+/, Text
98
+ rule /(?:#{builtins.join('|')})\b/, Name::Builtin
99
+ rule /((__(DATA|DIE|WARN)__)|(STD(IN|OUT|ERR)))\b/,
100
+ Name::Builtin::Pseudo
101
+
102
+ rule /<<([\'"]?)([a-zA-Z_][a-zA-Z0-9_]*)\1;?\n.*?\n\2\n/m, Str
103
+
104
+ rule /__END__\b/, Comment::Preproc, :end_part
105
+ rule /\$\^[ADEFHILMOPSTWX]/, Name::Variable::Global
106
+ rule /\$[\\"'\[\]&`+*.,;=%~?@$!<>(^\|\/-](?!\w)/, Name::Variable::Global
107
+ rule /[-+\/*%=<>&^\|!\\~]=?/, Operator
108
+ rule /[$@%#]+/, Name::Variable, :varname
109
+
110
+ rule /0_?[0-7]+(_[0-7]+)*/, Num::Oct
111
+ rule /0x[0-9A-Fa-f]+(_[0-9A-Fa-f]+)*/, Num::Hex
112
+ rule /0b[01]+(_[01]+)*/, Num::Bin
113
+ rule /(\d*(_\d*)*\.\d+(_\d*)*|\d+(_\d*)*\.\d+(_\d*)*)(e[+-]?\d+)?/i,
114
+ Num::Float
115
+ rule /\d+(_\d*)*e[+-]?\d+(_\d*)*/i, Num::Float
116
+ rule /\d+(_\d+)*/, Num::Integer
117
+
118
+ rule /'(\\\\|\\'|[^'])*'/, Str
119
+ rule /"(\\\\|\\"|[^"])*"/, Str
120
+ rule /`(\\\\|\\`|[^`])*`/, Str::Backtick
121
+ rule /<([^\s>]+)>/, re_tok
122
+ rule /(q|qq|qw|qr|qx)\{/, Str::Other, :cb_string
123
+ rule /(q|qq|qw|qr|qx)\(/, Str::Other, :rb_string
124
+ rule /(q|qq|qw|qr|qx)\[/, Str::Other, :sb_string
125
+ rule /(q|qq|qw|qr|qx)</, Str::Other, :lt_string
126
+ rule /(q|qq|qw|qr|qx)([^a-zA-Z0-9])(.|\n)*?\2/, Str::Other
127
+
128
+ rule /package\s+/, Keyword, :modulename
129
+ rule /sub\s+/, Keyword, :funcname
130
+ rule /\[\]|\*\*|::|<<|>>|>=|<=|<=>|={3}|!=|=~|!~|&&?|\|\||\.{1,3}/,
131
+ Operator
132
+ rule /[()\[\]:;,<>\/?{}]/, Punctuation
133
+ rule(/(?=\w)/) { push :name }
134
+ end
135
+
136
+ state :format do
137
+ rule /\.\n/, Str::Interpol, :pop!
138
+ rule /.*?\n/, Str::Interpol
139
+ end
140
+
141
+ state :name_common do
142
+ rule /\w+::/, Name::Namespace
143
+ rule /[\w:]+/, Name::Variable, :pop!
144
+ end
145
+
146
+ state :varname do
147
+ rule /\s+/, Text
148
+ rule /\{/, Punctuation, :pop! # hash syntax
149
+ rule /\)|,/, Punctuation, :pop! # arg specifier
150
+ mixin :name_common
151
+ end
152
+
153
+ state :name do
154
+ mixin :name_common
155
+ rule /[A-Z_]+(?=[^a-zA-Z0-9_])/, Name::Constant, :pop!
156
+ rule(/(?=\W)/) { pop! }
157
+ end
158
+
159
+ state :modulename do
160
+ rule /[a-z_]\w*/i, Name::Namespace, :pop!
161
+ end
162
+
163
+ state :funcname do
164
+ rule /[a-zA-Z_]\w*[!?]?/, Name::Function
165
+ rule /\s+/, Text
166
+
167
+ # argument declaration
168
+ rule /(\([$@%]*\))(\s*)/ do
169
+ groups Punctuation, Text
170
+ end
171
+
172
+ rule /.*?{/, Punctuation, :pop!
173
+ rule /;/, Punctuation, :pop!
174
+ end
175
+
176
+ [[:cb, '\{', '\}'],
177
+ [:rb, '\(', '\)'],
178
+ [:sb, '\[', '\]'],
179
+ [:lt, '<', '>']].each do |name, open, close|
180
+ tok = Str::Other
181
+ state :"#{name}_string" do
182
+ rule /\\[#{open}#{close}\\]/, tok
183
+ rule /\\/, tok
184
+ rule(/#{open}/) { token tok; push }
185
+ rule /#{close}/, tok, :pop!
186
+ rule /[^#{open}#{close}\\]+/, tok
187
+ end
188
+ end
189
+
190
+ state :end_part do
191
+ # eat the rest of the stream
192
+ rule /.+/m, Comment::Preproc, :pop!
193
+ end
194
+ end
195
+ end
196
+ end
@@ -0,0 +1,193 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class PHP < TemplateLexer
6
+ title "PHP"
7
+ desc "The PHP scripting language (php.net)"
8
+ tag 'php'
9
+ aliases 'php', 'php3', 'php4', 'php5'
10
+ filenames '*.php', '*.php[345t]','*.phtml',
11
+ # Support Drupal file extensions, see:
12
+ # https://github.com/gitlabhq/gitlabhq/issues/8900
13
+ '*.module', '*.inc', '*.profile', '*.install', '*.test'
14
+ mimetypes 'text/x-php'
15
+
16
+ option :start_inline, 'Whether to start with inline php or require <?php ... ?>. (default: best guess)'
17
+ option :funcnamehighlighting, 'Whether to highlight builtin functions (default: true)'
18
+ option :disabledmodules, 'Disable certain modules from being highlighted as builtins (default: empty)'
19
+
20
+ def initialize(*)
21
+ super
22
+
23
+ # if truthy, the lexer starts highlighting with php code
24
+ # (no <?php required)
25
+ @start_inline = bool_option(:start_inline) { :guess }
26
+ @funcnamehighlighting = bool_option(:funcnamehighlighting) { true }
27
+ @disabledmodules = list_option(:disabledmodules)
28
+ end
29
+
30
+ def self.builtins
31
+ load Pathname.new(__FILE__).dirname.join('php/builtins.rb')
32
+ self.builtins
33
+ end
34
+
35
+ def builtins
36
+ return [] unless @funcnamehighlighting
37
+
38
+ @builtins ||= Set.new.tap do |builtins|
39
+ self.class.builtins.each do |mod, fns|
40
+ next if @disabledmodules.include? mod
41
+ builtins.merge(fns)
42
+ end
43
+ end
44
+ end
45
+
46
+ # source: http://php.net/manual/en/language.variables.basics.php
47
+ # the given regex is invalid utf8, so... we're using the unicode
48
+ # "Letter" property instead.
49
+ id = /[\p{L}_][\p{L}\p{N}_]*/
50
+ nsid = /#{id}(?:\\#{id})*/
51
+
52
+ start do
53
+ case @start_inline
54
+ when true
55
+ push :template
56
+ push :php
57
+ when false
58
+ push :template
59
+ when :guess
60
+ # pass
61
+ end
62
+ end
63
+
64
+ def self.keywords
65
+ @keywords ||= Set.new %w(
66
+ and E_PARSE old_function E_ERROR or as E_WARNING parent eval
67
+ PHP_OS break exit case extends PHP_VERSION cfunction FALSE
68
+ print for require continue foreach require_once declare return
69
+ default static do switch die stdClass echo else TRUE elseif
70
+ var empty if xor enddeclare include virtual endfor include_once
71
+ while endforeach global __FILE__ endif list __LINE__ endswitch
72
+ new __sleep endwhile not array __wakeup E_ALL NULL final
73
+ php_user_filter interface implements public private protected
74
+ abstract clone try catch throw this use namespace yield
75
+ )
76
+ end
77
+
78
+ def self.detect?(text)
79
+ return true if text.shebang?('php')
80
+ return false if /^<\?hh/ =~ text
81
+ return true if /^<\?php/ =~ text
82
+ end
83
+
84
+ state :root do
85
+ # some extremely rough heuristics to decide whether to start inline or not
86
+ rule(/\s*(?=<)/m) { delegate parent; push :template }
87
+ rule(/[^$]+(?=<\?(php|=))/) { delegate parent; push :template }
88
+
89
+ rule(//) { push :template; push :php }
90
+ end
91
+
92
+ state :template do
93
+ rule /<\?(php|=)?/, Comment::Preproc, :php
94
+ rule(/.*?(?=<\?)|.*/m) { delegate parent }
95
+ end
96
+
97
+ state :php do
98
+ rule /\?>/, Comment::Preproc, :pop!
99
+ # heredocs
100
+ rule /<<<('?)(#{id})\1\n.*?\n\2;?\n/im, Str::Heredoc
101
+ rule /\s+/, Text
102
+ rule /#.*?$/, Comment::Single
103
+ rule %r(//.*?$), Comment::Single
104
+ # empty comment, otherwise seen as the start of a docstring
105
+ rule %r(/\*\*/), Comment::Multiline
106
+ rule %r(/\*\*.*?\*/)m, Str::Doc
107
+ rule %r(/\*.*?\*/)m, Comment::Multiline
108
+ rule /(->|::)(\s*)(#{id})/ do
109
+ groups Operator, Text, Name::Attribute
110
+ end
111
+
112
+ rule /[~!%^&*+=\|:.<>\/?@-]+/, Operator
113
+ rule /[\[\]{}();,]/, Punctuation
114
+ rule /class\b/, Keyword, :classname
115
+ # anonymous functions
116
+ rule /(function)(\s*)(?=\()/ do
117
+ groups Keyword, Text
118
+ end
119
+
120
+ # named functions
121
+ rule /(function)(\s+)(&?)(\s*)/ do
122
+ groups Keyword, Text, Operator, Text
123
+ push :funcname
124
+ end
125
+
126
+ rule /(const)(\s+)(#{id})/i do
127
+ groups Keyword, Text, Name::Constant
128
+ end
129
+
130
+ rule /(true|false|null)\b/, Keyword::Constant
131
+ rule /\$\{\$+#{id}\}/i, Name::Variable
132
+ rule /\$+#{id}/i, Name::Variable
133
+
134
+ # may be intercepted for builtin highlighting
135
+ rule /\\?#{nsid}/i do |m|
136
+ name = m[0]
137
+
138
+ if self.class.keywords.include? name
139
+ token Keyword
140
+ elsif self.builtins.include? name
141
+ token Name::Builtin
142
+ else
143
+ token Name::Other
144
+ end
145
+ end
146
+
147
+ rule /(\d+\.\d*|\d*\.\d+)(e[+-]?\d+)?/i, Num::Float
148
+ rule /\d+e[+-]?\d+/i, Num::Float
149
+ rule /0[0-7]+/, Num::Oct
150
+ rule /0x[a-f0-9]+/i, Num::Hex
151
+ rule /\d+/, Num::Integer
152
+ rule /'([^'\\]*(?:\\.[^'\\]*)*)'/, Str::Single
153
+ rule /`([^`\\]*(?:\\.[^`\\]*)*)`/, Str::Backtick
154
+ rule /"/, Str::Double, :string
155
+ end
156
+
157
+ state :classname do
158
+ rule /\s+/, Text
159
+ rule /#{nsid}/, Name::Class, :pop!
160
+ end
161
+
162
+ state :funcname do
163
+ rule /#{id}/, Name::Function, :pop!
164
+ end
165
+
166
+ state :string do
167
+ rule /"/, Str::Double, :pop!
168
+ rule /[^\\{$"]+/, Str::Double
169
+ rule /\\([nrt\"$\\]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})/,
170
+ Str::Escape
171
+ rule /\$#{id}(\[\S+\]|->#{id})?/, Name::Variable
172
+
173
+ rule /\{\$\{/, Str::Interpol, :interp_double
174
+ rule /\{(?=\$)/, Str::Interpol, :interp_single
175
+ rule /(\{)(\S+)(\})/ do
176
+ groups Str::Interpol, Name::Variable, Str::Interpol
177
+ end
178
+
179
+ rule /[${\\]+/, Str::Double
180
+ end
181
+
182
+ state :interp_double do
183
+ rule /\}\}/, Str::Interpol, :pop!
184
+ mixin :php
185
+ end
186
+
187
+ state :interp_single do
188
+ rule /\}/, Str::Interpol, :pop!
189
+ mixin :php
190
+ end
191
+ end
192
+ end
193
+ end