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,51 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Properties < RegexLexer
6
+ title ".properties"
7
+ desc '.properties config files for Java'
8
+ tag 'properties'
9
+
10
+ filenames '*.properties'
11
+ mimetypes 'text/x-java-properties'
12
+
13
+ identifier = /[\w.-]+/
14
+
15
+ state :basic do
16
+ rule /[!#].*?\n/, Comment
17
+ rule /\s+/, Text
18
+ rule /\\\n/, Str::Escape
19
+ end
20
+
21
+ state :root do
22
+ mixin :basic
23
+
24
+ rule /(#{identifier})(\s*)([=:])/ do
25
+ groups Name::Property, Text, Punctuation
26
+ push :value
27
+ end
28
+ end
29
+
30
+ state :value do
31
+ rule /\n/, Text, :pop!
32
+ mixin :basic
33
+ rule /"/, Str, :dq
34
+ rule /'.*?'/, Str
35
+ mixin :esc_str
36
+ rule /[^\\\n]+/, Str
37
+ end
38
+
39
+ state :dq do
40
+ rule /"/, Str, :pop!
41
+ mixin :esc_str
42
+ rule /[^\\"]+/m, Str
43
+ end
44
+
45
+ state :esc_str do
46
+ rule /\\u[0-9]{4}/, Str::Escape
47
+ rule /\\./m, Str::Escape
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,70 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Protobuf < RegexLexer
6
+ title 'Protobuf'
7
+ desc 'Google\'s language-neutral, platform-neutral, extensible mechanism for serializing structured data'
8
+ tag 'protobuf'
9
+ aliases 'proto'
10
+ filenames '*.proto'
11
+ mimetypes 'text/x-proto'
12
+
13
+ kw = /\b(ctype|default|extensions|import|max|oneof|option|optional|packed|repeated|required|returns|rpc|to)\b/
14
+ datatype = /\b(bool|bytes|double|fixed32|fixed64|float|int32|int64|sfixed32|sfixed64|sint32|sint64|string|uint32|uint64)\b/
15
+
16
+ state :root do
17
+ rule /[\s]+/, Text
18
+ rule /[,;{}\[\]()]/, Punctuation
19
+ rule /\/(\\\n)?\/(\n|(.|\n)*?[^\\]\n)/, Comment::Single
20
+ rule /\/(\\\n)?\*(.|\n)*?\*(\\\n)?\//, Comment::Multiline
21
+ rule kw, Keyword
22
+ rule datatype, Keyword::Type
23
+ rule /true|false/, Keyword::Constant
24
+ rule /(package)(\s+)/ do
25
+ groups Keyword::Namespace, Text
26
+ push :package
27
+ end
28
+
29
+ rule /(message|extend)(\s+)/ do
30
+ groups Keyword::Declaration, Text
31
+ push :message
32
+ end
33
+
34
+ rule /(enum|group|service)(\s+)/ do
35
+ groups Keyword::Declaration, Text
36
+ push :type
37
+ end
38
+
39
+ rule /".*?"/, Str
40
+ rule /'.*?'/, Str
41
+ rule /(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*/, Num::Float
42
+ rule /(\d+\.\d*|\.\d+|\d+[fF])[fF]?/, Num::Float
43
+ rule /(\-?(inf|nan))\b/, Num::Float
44
+ rule /0x[0-9a-fA-F]+[LlUu]*/, Num::Hex
45
+ rule /0[0-7]+[LlUu]*/, Num::Oct
46
+ rule /\d+[LlUu]*/, Num::Integer
47
+ rule /[+-=]/, Operator
48
+ rule /([a-zA-Z_][\w.]*)([ \t]*)(=)/ do
49
+ groups Name::Attribute, Text, Operator
50
+ end
51
+ rule /[a-zA-Z_][\w.]*/, Name
52
+ end
53
+
54
+ state :package do
55
+ rule /[a-zA-Z_]\w*/, Name::Namespace, :pop!
56
+ rule(//) { pop! }
57
+ end
58
+
59
+ state :message do
60
+ rule /[a-zA-Z_]\w*/, Name::Class, :pop!
61
+ rule(//) { pop! }
62
+ end
63
+
64
+ state :type do
65
+ rule /[a-zA-Z_]\w*/, Name, :pop!
66
+ rule(//) { pop! }
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,128 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Puppet < RegexLexer
6
+ title "Puppet"
7
+ desc 'The Puppet configuration management language (puppetlabs.org)'
8
+ tag 'puppet'
9
+ aliases 'pp'
10
+ filenames '*.pp'
11
+
12
+ def self.detect?(text)
13
+ return true if text.shebang? 'puppet-apply'
14
+ return true if text.shebang? 'puppet'
15
+ end
16
+
17
+ def self.keywords
18
+ @keywords ||= Set.new %w(
19
+ and case class default define else elsif if in import inherits
20
+ node unless
21
+ )
22
+ end
23
+
24
+ def self.constants
25
+ @constants ||= Set.new %w(
26
+ false true undef
27
+ )
28
+ end
29
+
30
+ def self.metaparameters
31
+ @metaparameters ||= Set.new %w(
32
+ before require notify subscribe
33
+ )
34
+ end
35
+
36
+ id = /[a-z]\w*/
37
+ cap_id = /[A-Z]\w*/
38
+ qualname = /(::)?(#{id}::)*\w+/
39
+
40
+ state :whitespace do
41
+ rule /\s+/m, Text
42
+ rule /#.*?\n/, Comment
43
+ end
44
+
45
+ state :root do
46
+ mixin :whitespace
47
+
48
+ rule /[$]#{qualname}/, Name::Variable
49
+ rule /(#{id})(?=\s*[=+]>)/m do |m|
50
+ if self.class.metaparameters.include? m[0]
51
+ token Keyword::Pseudo
52
+ else
53
+ token Name::Property
54
+ end
55
+ end
56
+
57
+ rule /(#{qualname})(?=\s*[(])/m, Name::Function
58
+ rule cap_id, Name::Class
59
+
60
+ rule /[+=|~-]>|<[|~-]/, Punctuation
61
+ rule /[:}();\[\]]/, Punctuation
62
+
63
+ # HACK for case statements and selectors
64
+ rule /{/, Punctuation, :regex_allowed
65
+ rule /,/, Punctuation, :regex_allowed
66
+
67
+ rule /(in|and|or)\b/, Operator::Word
68
+ rule /[=!<>]=/, Operator
69
+ rule /[=!]~/, Operator, :regex_allowed
70
+ rule %r([<>!+*/-]), Operator
71
+
72
+ rule /(class|include)(\s*)(#{qualname})/ do
73
+ groups Keyword, Text, Name::Class
74
+ end
75
+
76
+ rule /node\b/, Keyword, :regex_allowed
77
+
78
+ rule /'(\\[\\']|[^'])*'/m, Str::Single
79
+ rule /"/, Str::Double, :dquotes
80
+
81
+ rule /\d+([.]\d+)?(e[+-]\d+)?/, Num
82
+
83
+ # a valid regex. TODO: regexes are only allowed
84
+ # in certain places in puppet.
85
+ rule qualname do |m|
86
+ if self.class.keywords.include? m[0]
87
+ token Keyword
88
+ elsif self.class.constants.include? m[0]
89
+ token Keyword::Constant
90
+ else
91
+ token Name
92
+ end
93
+ end
94
+ end
95
+
96
+ state :regex_allowed do
97
+ mixin :whitespace
98
+ rule %r(/), Str::Regex, :regex
99
+
100
+ rule(//) { pop! }
101
+ end
102
+
103
+ state :regex do
104
+ rule %r(/), Str::Regex, :pop!
105
+ rule /\\./, Str::Escape
106
+ rule /[(){}]/, Str::Interpol
107
+ rule /\[/, Str::Interpol, :regex_class
108
+ rule /./, Str::Regex
109
+ end
110
+
111
+ state :regex_class do
112
+ rule /\]/, Str::Interpol, :pop!
113
+ rule /(?<!\[)-(?=\])/, Str::Regex
114
+ rule /-/, Str::Interpol
115
+ rule /\\./, Str::Escape
116
+ rule /[^\\\]-]+/, Str::Regex
117
+ end
118
+
119
+ state :dquotes do
120
+ rule /"/, Str::Double, :pop!
121
+ rule /[^$\\"]+/m, Str::Double
122
+ rule /\\./m, Str::Escape
123
+ rule /[$]#{qualname}/, Name::Variable
124
+ rule /[$][{]#{qualname}[}]/, Name::Variable
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,232 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Python < RegexLexer
6
+ title "Python"
7
+ desc "The Python programming language (python.org)"
8
+ tag 'python'
9
+ aliases 'py'
10
+ filenames '*.py', '*.pyw', '*.sc', 'SConstruct', 'SConscript', '*.tac'
11
+ mimetypes 'text/x-python', 'application/x-python'
12
+
13
+ def self.detect?(text)
14
+ return true if text.shebang?(/pythonw?(3|2(\.\d)?)?/)
15
+ end
16
+
17
+ def self.keywords
18
+ @keywords ||= %w(
19
+ assert break continue del elif else except exec
20
+ finally for global if lambda pass print raise
21
+ return try while yield as with from import yield
22
+ async await
23
+ )
24
+ end
25
+
26
+ def self.builtins
27
+ @builtins ||= %w(
28
+ __import__ abs all any apply basestring bin bool buffer
29
+ bytearray bytes callable chr classmethod cmp coerce compile
30
+ complex delattr dict dir divmod enumerate eval execfile exit
31
+ file filter float frozenset getattr globals hasattr hash hex id
32
+ input int intern isinstance issubclass iter len list locals
33
+ long map max min next object oct open ord pow property range
34
+ raw_input reduce reload repr reversed round set setattr slice
35
+ sorted staticmethod str sum super tuple type unichr unicode
36
+ vars xrange zip
37
+ )
38
+ end
39
+
40
+ def self.builtins_pseudo
41
+ @builtins_pseudo ||= %w(self None Ellipsis NotImplemented False True)
42
+ end
43
+
44
+ def self.exceptions
45
+ @exceptions ||= %w(
46
+ ArithmeticError AssertionError AttributeError
47
+ BaseException DeprecationWarning EOFError EnvironmentError
48
+ Exception FloatingPointError FutureWarning GeneratorExit IOError
49
+ ImportError ImportWarning IndentationError IndexError KeyError
50
+ KeyboardInterrupt LookupError MemoryError NameError
51
+ NotImplemented NotImplementedError OSError OverflowError
52
+ OverflowWarning PendingDeprecationWarning ReferenceError
53
+ RuntimeError RuntimeWarning StandardError StopIteration
54
+ SyntaxError SyntaxWarning SystemError SystemExit TabError
55
+ TypeError UnboundLocalError UnicodeDecodeError
56
+ UnicodeEncodeError UnicodeError UnicodeTranslateError
57
+ UnicodeWarning UserWarning ValueError VMSError Warning
58
+ WindowsError ZeroDivisionError
59
+ )
60
+ end
61
+
62
+ identifier = /[a-z_][a-z0-9_]*/i
63
+ dotted_identifier = /[a-z_.][a-z0-9_.]*/i
64
+ state :root do
65
+ rule /\n+/m, Text
66
+ rule /^(:)(\s*)([ru]{,2}""".*?""")/mi do
67
+ groups Punctuation, Text, Str::Doc
68
+ end
69
+
70
+ rule /[^\S\n]+/, Text
71
+ rule /#.*$/, Comment
72
+ rule /[\[\]{}:(),;]/, Punctuation
73
+ rule /\\\n/, Text
74
+ rule /\\/, Text
75
+
76
+ rule /(in|is|and|or|not)\b/, Operator::Word
77
+ rule /!=|==|<<|>>|[-~+\/*%=<>&^|.]/, Operator
78
+
79
+ rule /(from)((?:\\\s|\s)+)(#{dotted_identifier})((?:\\\s|\s)+)(import)/ do
80
+ groups Keyword::Namespace,
81
+ Text,
82
+ Name::Namespace,
83
+ Text,
84
+ Keyword::Namespace
85
+ end
86
+
87
+ rule /(import)(\s+)(#{dotted_identifier})/ do
88
+ groups Keyword::Namespace, Text, Name::Namespace
89
+ end
90
+
91
+ rule /(def)((?:\s|\\\s)+)/ do
92
+ groups Keyword, Text
93
+ push :funcname
94
+ end
95
+
96
+ rule /(class)((?:\s|\\\s)+)/ do
97
+ groups Keyword, Text
98
+ push :classname
99
+ end
100
+
101
+ # TODO: not in python 3
102
+ rule /`.*?`/, Str::Backtick
103
+ rule /(?:r|ur|ru)"""/i, Str, :raw_tdqs
104
+ rule /(?:r|ur|ru)'''/i, Str, :raw_tsqs
105
+ rule /(?:r|ur|ru)"/i, Str, :raw_dqs
106
+ rule /(?:r|ur|ru)'/i, Str, :raw_sqs
107
+ rule /u?"""/i, Str, :tdqs
108
+ rule /u?'''/i, Str, :tsqs
109
+ rule /u?"/i, Str, :dqs
110
+ rule /u?'/i, Str, :sqs
111
+
112
+ rule /@#{dotted_identifier}/i, Name::Decorator
113
+
114
+ # using negative lookbehind so we don't match property names
115
+ rule /(?<!\.)#{identifier}/ do |m|
116
+ if self.class.keywords.include? m[0]
117
+ token Keyword
118
+ elsif self.class.exceptions.include? m[0]
119
+ token Name::Builtin
120
+ elsif self.class.builtins.include? m[0]
121
+ token Name::Builtin
122
+ elsif self.class.builtins_pseudo.include? m[0]
123
+ token Name::Builtin::Pseudo
124
+ else
125
+ token Name
126
+ end
127
+ end
128
+
129
+ rule identifier, Name
130
+
131
+ rule /(\d+\.\d*|\d*\.\d+)(e[+-]?[0-9]+)?/i, Num::Float
132
+ rule /\d+e[+-]?[0-9]+/i, Num::Float
133
+ rule /0[0-7]+/, Num::Oct
134
+ rule /0x[a-f0-9]+/i, Num::Hex
135
+ rule /\d+L/, Num::Integer::Long
136
+ rule /\d+/, Num::Integer
137
+ end
138
+
139
+ state :funcname do
140
+ rule identifier, Name::Function, :pop!
141
+ end
142
+
143
+ state :classname do
144
+ rule identifier, Name::Class, :pop!
145
+ end
146
+
147
+ state :raise do
148
+ rule /from\b/, Keyword
149
+ rule /raise\b/, Keyword
150
+ rule /yield\b/, Keyword
151
+ rule /\n/, Text, :pop!
152
+ rule /;/, Punctuation, :pop!
153
+ mixin :root
154
+ end
155
+
156
+ state :yield do
157
+ mixin :raise
158
+ end
159
+
160
+ state :strings do
161
+ rule /%(\([a-z0-9_]+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?/i, Str::Interpol
162
+ end
163
+
164
+ state :strings_double do
165
+ rule /[^\\"%\n]+/, Str
166
+ mixin :strings
167
+ end
168
+
169
+ state :strings_single do
170
+ rule /[^\\'%\n]+/, Str
171
+ mixin :strings
172
+ end
173
+
174
+ state :nl do
175
+ rule /\n/, Str
176
+ end
177
+
178
+ state :escape do
179
+ rule %r(\\
180
+ ( [\\abfnrtv"']
181
+ | \n
182
+ | N{[a-zA-z][a-zA-Z ]+[a-zA-Z]}
183
+ | u[a-fA-F0-9]{4}
184
+ | U[a-fA-F0-9]{8}
185
+ | x[a-fA-F0-9]{2}
186
+ | [0-7]{1,3}
187
+ )
188
+ )x, Str::Escape
189
+ end
190
+
191
+ state :raw_escape do
192
+ rule /\\./, Str
193
+ end
194
+
195
+ state :dqs do
196
+ rule /"/, Str, :pop!
197
+ mixin :escape
198
+ mixin :strings_double
199
+ end
200
+
201
+ state :sqs do
202
+ rule /'/, Str, :pop!
203
+ mixin :escape
204
+ mixin :strings_single
205
+ end
206
+
207
+ state :tdqs do
208
+ rule /"""/, Str, :pop!
209
+ rule /"/, Str
210
+ mixin :escape
211
+ mixin :strings_double
212
+ mixin :nl
213
+ end
214
+
215
+ state :tsqs do
216
+ rule /'''/, Str, :pop!
217
+ rule /'/, Str
218
+ mixin :escape
219
+ mixin :strings_single
220
+ mixin :nl
221
+ end
222
+
223
+ %w(tdqs tsqs dqs sqs).each do |qtype|
224
+ state :"raw_#{qtype}" do
225
+ mixin :raw_escape
226
+ mixin :"#{qtype}"
227
+ end
228
+ end
229
+
230
+ end
231
+ end
232
+ end