rougegal 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +26 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +17 -0
  5. data/lib/rouge/cli.rb +394 -0
  6. data/lib/rouge/demos/abap +6 -0
  7. data/lib/rouge/demos/actionscript +4 -0
  8. data/lib/rouge/demos/apache +21 -0
  9. data/lib/rouge/demos/apiblueprint +33 -0
  10. data/lib/rouge/demos/applescript +2 -0
  11. data/lib/rouge/demos/awk +4 -0
  12. data/lib/rouge/demos/biml +38 -0
  13. data/lib/rouge/demos/bsl +7 -0
  14. data/lib/rouge/demos/c +8 -0
  15. data/lib/rouge/demos/ceylon +7 -0
  16. data/lib/rouge/demos/cfscript +18 -0
  17. data/lib/rouge/demos/clojure +5 -0
  18. data/lib/rouge/demos/cmake +7 -0
  19. data/lib/rouge/demos/coffeescript +5 -0
  20. data/lib/rouge/demos/common_lisp +1 -0
  21. data/lib/rouge/demos/conf +4 -0
  22. data/lib/rouge/demos/console +6 -0
  23. data/lib/rouge/demos/coq +13 -0
  24. data/lib/rouge/demos/cpp +8 -0
  25. data/lib/rouge/demos/csharp +5 -0
  26. data/lib/rouge/demos/css +4 -0
  27. data/lib/rouge/demos/d +16 -0
  28. data/lib/rouge/demos/dart +6 -0
  29. data/lib/rouge/demos/diff +7 -0
  30. data/lib/rouge/demos/digdag +19 -0
  31. data/lib/rouge/demos/docker +9 -0
  32. data/lib/rouge/demos/dot +5 -0
  33. data/lib/rouge/demos/eiffel +30 -0
  34. data/lib/rouge/demos/elixir +1 -0
  35. data/lib/rouge/demos/erb +1 -0
  36. data/lib/rouge/demos/erlang +7 -0
  37. data/lib/rouge/demos/factor +5 -0
  38. data/lib/rouge/demos/fortran +22 -0
  39. data/lib/rouge/demos/fsharp +12 -0
  40. data/lib/rouge/demos/gal +22 -0
  41. data/lib/rouge/demos/gherkin +17 -0
  42. data/lib/rouge/demos/glsl +14 -0
  43. data/lib/rouge/demos/go +7 -0
  44. data/lib/rouge/demos/gradle +10 -0
  45. data/lib/rouge/demos/graphql +17 -0
  46. data/lib/rouge/demos/groovy +9 -0
  47. data/lib/rouge/demos/haml +5 -0
  48. data/lib/rouge/demos/handlebars +7 -0
  49. data/lib/rouge/demos/haskell +6 -0
  50. data/lib/rouge/demos/html +8 -0
  51. data/lib/rouge/demos/http +14 -0
  52. data/lib/rouge/demos/hylang +10 -0
  53. data/lib/rouge/demos/idlang +8 -0
  54. data/lib/rouge/demos/igorpro +9 -0
  55. data/lib/rouge/demos/ini +4 -0
  56. data/lib/rouge/demos/io +11 -0
  57. data/lib/rouge/demos/irb +4 -0
  58. data/lib/rouge/demos/irb_output +2 -0
  59. data/lib/rouge/demos/java +5 -0
  60. data/lib/rouge/demos/javascript +1 -0
  61. data/lib/rouge/demos/jinja +9 -0
  62. data/lib/rouge/demos/json +1 -0
  63. data/lib/rouge/demos/json-doc +1 -0
  64. data/lib/rouge/demos/jsonnet +28 -0
  65. data/lib/rouge/demos/jsx +17 -0
  66. data/lib/rouge/demos/julia +11 -0
  67. data/lib/rouge/demos/kotlin +3 -0
  68. data/lib/rouge/demos/lasso +12 -0
  69. data/lib/rouge/demos/liquid +11 -0
  70. data/lib/rouge/demos/literate_coffeescript +3 -0
  71. data/lib/rouge/demos/literate_haskell +7 -0
  72. data/lib/rouge/demos/llvm +20 -0
  73. data/lib/rouge/demos/lua +12 -0
  74. data/lib/rouge/demos/make +6 -0
  75. data/lib/rouge/demos/markdown +4 -0
  76. data/lib/rouge/demos/matlab +6 -0
  77. data/lib/rouge/demos/moonscript +16 -0
  78. data/lib/rouge/demos/mosel +10 -0
  79. data/lib/rouge/demos/mxml +22 -0
  80. data/lib/rouge/demos/nasm +26 -0
  81. data/lib/rouge/demos/nginx +5 -0
  82. data/lib/rouge/demos/nim +27 -0
  83. data/lib/rouge/demos/objective_c +18 -0
  84. data/lib/rouge/demos/ocaml +12 -0
  85. data/lib/rouge/demos/pascal +14 -0
  86. data/lib/rouge/demos/perl +5 -0
  87. data/lib/rouge/demos/php +3 -0
  88. data/lib/rouge/demos/plaintext +1 -0
  89. data/lib/rouge/demos/plist +142 -0
  90. data/lib/rouge/demos/pony +17 -0
  91. data/lib/rouge/demos/powershell +49 -0
  92. data/lib/rouge/demos/praat +26 -0
  93. data/lib/rouge/demos/prolog +9 -0
  94. data/lib/rouge/demos/prometheus +9 -0
  95. data/lib/rouge/demos/properties +7 -0
  96. data/lib/rouge/demos/protobuf +5 -0
  97. data/lib/rouge/demos/puppet +6 -0
  98. data/lib/rouge/demos/python +6 -0
  99. data/lib/rouge/demos/q +2 -0
  100. data/lib/rouge/demos/qml +9 -0
  101. data/lib/rouge/demos/r +8 -0
  102. data/lib/rouge/demos/racket +24 -0
  103. data/lib/rouge/demos/ruby +9 -0
  104. data/lib/rouge/demos/rust +12 -0
  105. data/lib/rouge/demos/sass +3 -0
  106. data/lib/rouge/demos/scala +3 -0
  107. data/lib/rouge/demos/scheme +4 -0
  108. data/lib/rouge/demos/scss +5 -0
  109. data/lib/rouge/demos/sed +4 -0
  110. data/lib/rouge/demos/shell +2 -0
  111. data/lib/rouge/demos/sieve +10 -0
  112. data/lib/rouge/demos/slim +17 -0
  113. data/lib/rouge/demos/smalltalk +6 -0
  114. data/lib/rouge/demos/smarty +12 -0
  115. data/lib/rouge/demos/sml +4 -0
  116. data/lib/rouge/demos/sql +1 -0
  117. data/lib/rouge/demos/swift +5 -0
  118. data/lib/rouge/demos/tap +5 -0
  119. data/lib/rouge/demos/tcl +1 -0
  120. data/lib/rouge/demos/tex +1 -0
  121. data/lib/rouge/demos/toml +9 -0
  122. data/lib/rouge/demos/tsx +17 -0
  123. data/lib/rouge/demos/tulip +13 -0
  124. data/lib/rouge/demos/turtle +26 -0
  125. data/lib/rouge/demos/twig +9 -0
  126. data/lib/rouge/demos/typescript +1 -0
  127. data/lib/rouge/demos/vala +8 -0
  128. data/lib/rouge/demos/vb +4 -0
  129. data/lib/rouge/demos/verilog +27 -0
  130. data/lib/rouge/demos/vhdl +23 -0
  131. data/lib/rouge/demos/viml +14 -0
  132. data/lib/rouge/demos/vue +11 -0
  133. data/lib/rouge/demos/wollok +11 -0
  134. data/lib/rouge/demos/xml +2 -0
  135. data/lib/rouge/demos/yaml +4 -0
  136. data/lib/rouge/formatter.rb +75 -0
  137. data/lib/rouge/formatters/html.rb +37 -0
  138. data/lib/rouge/formatters/html_inline.rb +30 -0
  139. data/lib/rouge/formatters/html_legacy.rb +44 -0
  140. data/lib/rouge/formatters/html_linewise.rb +27 -0
  141. data/lib/rouge/formatters/html_pygments.rb +16 -0
  142. data/lib/rouge/formatters/html_table.rb +61 -0
  143. data/lib/rouge/formatters/null.rb +19 -0
  144. data/lib/rouge/formatters/terminal256.rb +172 -0
  145. data/lib/rouge/guesser.rb +55 -0
  146. data/lib/rouge/guessers/filename.rb +25 -0
  147. data/lib/rouge/guessers/glob_mapping.rb +46 -0
  148. data/lib/rouge/guessers/mimetype.rb +14 -0
  149. data/lib/rouge/guessers/modeline.rb +42 -0
  150. data/lib/rouge/guessers/source.rb +39 -0
  151. data/lib/rouge/lexer.rb +452 -0
  152. data/lib/rouge/lexers/abap.rb +238 -0
  153. data/lib/rouge/lexers/actionscript.rb +195 -0
  154. data/lib/rouge/lexers/apache.rb +71 -0
  155. data/lib/rouge/lexers/apache/keywords.yml +764 -0
  156. data/lib/rouge/lexers/apiblueprint.rb +51 -0
  157. data/lib/rouge/lexers/apple_script.rb +367 -0
  158. data/lib/rouge/lexers/awk.rb +161 -0
  159. data/lib/rouge/lexers/biml.rb +41 -0
  160. data/lib/rouge/lexers/bsl.rb +81 -0
  161. data/lib/rouge/lexers/c.rb +217 -0
  162. data/lib/rouge/lexers/ceylon.rb +123 -0
  163. data/lib/rouge/lexers/cfscript.rb +153 -0
  164. data/lib/rouge/lexers/clojure.rb +112 -0
  165. data/lib/rouge/lexers/cmake.rb +206 -0
  166. data/lib/rouge/lexers/coffeescript.rb +174 -0
  167. data/lib/rouge/lexers/common_lisp.rb +345 -0
  168. data/lib/rouge/lexers/conf.rb +24 -0
  169. data/lib/rouge/lexers/console.rb +136 -0
  170. data/lib/rouge/lexers/coq.rb +191 -0
  171. data/lib/rouge/lexers/cpp.rb +78 -0
  172. data/lib/rouge/lexers/csharp.rb +114 -0
  173. data/lib/rouge/lexers/css.rb +273 -0
  174. data/lib/rouge/lexers/d.rb +176 -0
  175. data/lib/rouge/lexers/dart.rb +104 -0
  176. data/lib/rouge/lexers/diff.rb +31 -0
  177. data/lib/rouge/lexers/digdag.rb +72 -0
  178. data/lib/rouge/lexers/docker.rb +50 -0
  179. data/lib/rouge/lexers/dot.rb +68 -0
  180. data/lib/rouge/lexers/eiffel.rb +65 -0
  181. data/lib/rouge/lexers/elixir.rb +133 -0
  182. data/lib/rouge/lexers/erb.rb +56 -0
  183. data/lib/rouge/lexers/erlang.rb +118 -0
  184. data/lib/rouge/lexers/factor.rb +302 -0
  185. data/lib/rouge/lexers/fortran.rb +170 -0
  186. data/lib/rouge/lexers/fsharp.rb +118 -0
  187. data/lib/rouge/lexers/gal.rb +50 -0
  188. data/lib/rouge/lexers/gherkin.rb +137 -0
  189. data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
  190. data/lib/rouge/lexers/glsl.rb +135 -0
  191. data/lib/rouge/lexers/go.rb +178 -0
  192. data/lib/rouge/lexers/gradle.rb +37 -0
  193. data/lib/rouge/lexers/graphql.rb +243 -0
  194. data/lib/rouge/lexers/groovy.rb +112 -0
  195. data/lib/rouge/lexers/haml.rb +233 -0
  196. data/lib/rouge/lexers/handlebars.rb +79 -0
  197. data/lib/rouge/lexers/haskell.rb +183 -0
  198. data/lib/rouge/lexers/html.rb +138 -0
  199. data/lib/rouge/lexers/http.rb +80 -0
  200. data/lib/rouge/lexers/hylang.rb +93 -0
  201. data/lib/rouge/lexers/idlang.rb +316 -0
  202. data/lib/rouge/lexers/igorpro.rb +407 -0
  203. data/lib/rouge/lexers/ini.rb +57 -0
  204. data/lib/rouge/lexers/io.rb +68 -0
  205. data/lib/rouge/lexers/irb.rb +66 -0
  206. data/lib/rouge/lexers/java.rb +87 -0
  207. data/lib/rouge/lexers/javascript.rb +269 -0
  208. data/lib/rouge/lexers/jinja.rb +137 -0
  209. data/lib/rouge/lexers/json.rb +29 -0
  210. data/lib/rouge/lexers/json_doc.rb +23 -0
  211. data/lib/rouge/lexers/jsonnet.rb +151 -0
  212. data/lib/rouge/lexers/jsx.rb +102 -0
  213. data/lib/rouge/lexers/julia.rb +172 -0
  214. data/lib/rouge/lexers/kotlin.rb +84 -0
  215. data/lib/rouge/lexers/lasso.rb +217 -0
  216. data/lib/rouge/lexers/lasso/keywords.yml +446 -0
  217. data/lib/rouge/lexers/liquid.rb +287 -0
  218. data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
  219. data/lib/rouge/lexers/literate_haskell.rb +36 -0
  220. data/lib/rouge/lexers/llvm.rb +84 -0
  221. data/lib/rouge/lexers/lua.rb +125 -0
  222. data/lib/rouge/lexers/lua/builtins.rb +22 -0
  223. data/lib/rouge/lexers/make.rb +116 -0
  224. data/lib/rouge/lexers/markdown.rb +154 -0
  225. data/lib/rouge/lexers/matlab.rb +75 -0
  226. data/lib/rouge/lexers/matlab/builtins.rb +11 -0
  227. data/lib/rouge/lexers/moonscript.rb +114 -0
  228. data/lib/rouge/lexers/mosel.rb +231 -0
  229. data/lib/rouge/lexers/mxml.rb +68 -0
  230. data/lib/rouge/lexers/nasm.rb +203 -0
  231. data/lib/rouge/lexers/nginx.rb +71 -0
  232. data/lib/rouge/lexers/nim.rb +152 -0
  233. data/lib/rouge/lexers/objective_c.rb +208 -0
  234. data/lib/rouge/lexers/ocaml.rb +100 -0
  235. data/lib/rouge/lexers/pascal.rb +66 -0
  236. data/lib/rouge/lexers/perl.rb +197 -0
  237. data/lib/rouge/lexers/php.rb +193 -0
  238. data/lib/rouge/lexers/php/builtins.rb +194 -0
  239. data/lib/rouge/lexers/plain_text.rb +26 -0
  240. data/lib/rouge/lexers/plist.rb +49 -0
  241. data/lib/rouge/lexers/pony.rb +93 -0
  242. data/lib/rouge/lexers/powershell.rb +132 -0
  243. data/lib/rouge/lexers/praat.rb +350 -0
  244. data/lib/rouge/lexers/prolog.rb +64 -0
  245. data/lib/rouge/lexers/prometheus.rb +121 -0
  246. data/lib/rouge/lexers/properties.rb +55 -0
  247. data/lib/rouge/lexers/protobuf.rb +70 -0
  248. data/lib/rouge/lexers/puppet.rb +128 -0
  249. data/lib/rouge/lexers/python.rb +231 -0
  250. data/lib/rouge/lexers/q.rb +124 -0
  251. data/lib/rouge/lexers/qml.rb +73 -0
  252. data/lib/rouge/lexers/r.rb +89 -0
  253. data/lib/rouge/lexers/racket.rb +542 -0
  254. data/lib/rouge/lexers/ruby.rb +437 -0
  255. data/lib/rouge/lexers/rust.rb +192 -0
  256. data/lib/rouge/lexers/sass.rb +74 -0
  257. data/lib/rouge/lexers/sass/common.rb +180 -0
  258. data/lib/rouge/lexers/scala.rb +142 -0
  259. data/lib/rouge/lexers/scheme.rb +112 -0
  260. data/lib/rouge/lexers/scss.rb +34 -0
  261. data/lib/rouge/lexers/sed.rb +172 -0
  262. data/lib/rouge/lexers/shell.rb +180 -0
  263. data/lib/rouge/lexers/sieve.rb +96 -0
  264. data/lib/rouge/lexers/slim.rb +228 -0
  265. data/lib/rouge/lexers/smalltalk.rb +116 -0
  266. data/lib/rouge/lexers/smarty.rb +91 -0
  267. data/lib/rouge/lexers/sml.rb +348 -0
  268. data/lib/rouge/lexers/sql.rb +140 -0
  269. data/lib/rouge/lexers/swift.rb +161 -0
  270. data/lib/rouge/lexers/tap.rb +91 -0
  271. data/lib/rouge/lexers/tcl.rb +192 -0
  272. data/lib/rouge/lexers/tex.rb +69 -0
  273. data/lib/rouge/lexers/toml.rb +71 -0
  274. data/lib/rouge/lexers/tsx.rb +19 -0
  275. data/lib/rouge/lexers/tulip.rb +107 -0
  276. data/lib/rouge/lexers/turtle.rb +72 -0
  277. data/lib/rouge/lexers/twig.rb +39 -0
  278. data/lib/rouge/lexers/typescript.rb +22 -0
  279. data/lib/rouge/lexers/typescript/common.rb +33 -0
  280. data/lib/rouge/lexers/vala.rb +77 -0
  281. data/lib/rouge/lexers/vb.rb +164 -0
  282. data/lib/rouge/lexers/verilog.rb +164 -0
  283. data/lib/rouge/lexers/vhdl.rb +97 -0
  284. data/lib/rouge/lexers/viml.rb +101 -0
  285. data/lib/rouge/lexers/viml/keywords.rb +12 -0
  286. data/lib/rouge/lexers/vue.rb +124 -0
  287. data/lib/rouge/lexers/wollok.rb +107 -0
  288. data/lib/rouge/lexers/xml.rb +59 -0
  289. data/lib/rouge/lexers/yaml.rb +373 -0
  290. data/lib/rouge/plugins/redcarpet.rb +30 -0
  291. data/lib/rouge/regex_lexer.rb +441 -0
  292. data/lib/rouge/template_lexer.rb +20 -0
  293. data/lib/rouge/text_analyzer.rb +48 -0
  294. data/lib/rouge/theme.rb +213 -0
  295. data/lib/rouge/themes/base16.rb +130 -0
  296. data/lib/rouge/themes/colorful.rb +67 -0
  297. data/lib/rouge/themes/github.rb +71 -0
  298. data/lib/rouge/themes/gruvbox.rb +167 -0
  299. data/lib/rouge/themes/igor_pro.rb +20 -0
  300. data/lib/rouge/themes/molokai.rb +82 -0
  301. data/lib/rouge/themes/monokai.rb +92 -0
  302. data/lib/rouge/themes/monokai_sublime.rb +90 -0
  303. data/lib/rouge/themes/pastie.rb +69 -0
  304. data/lib/rouge/themes/thankful_eyes.rb +74 -0
  305. data/lib/rouge/themes/tulip.rb +69 -0
  306. data/lib/rouge/token.rb +182 -0
  307. data/lib/rouge/util.rb +101 -0
  308. data/lib/rouge/version.rb +7 -0
  309. data/lib/rougegal.rb +80 -0
  310. data/rougegal.gemspec +18 -0
  311. metadata +356 -0
@@ -0,0 +1,55 @@
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
+ def self.analyze_text(text)
14
+ return 0.1 if text =~ /\A\[[\w.-]+\]\s*\w+=\w+/
15
+ end
16
+
17
+ identifier = /[\w.-]+/
18
+
19
+ state :basic do
20
+ rule /[!#].*?\n/, Comment
21
+ rule /\s+/, Text
22
+ rule /\\\n/, Str::Escape
23
+ end
24
+
25
+ state :root do
26
+ mixin :basic
27
+
28
+ rule /(#{identifier})(\s*)([=:])/ do
29
+ groups Name::Property, Text, Punctuation
30
+ push :value
31
+ end
32
+ end
33
+
34
+ state :value do
35
+ rule /\n/, Text, :pop!
36
+ mixin :basic
37
+ rule /"/, Str, :dq
38
+ rule /'.*?'/, Str
39
+ mixin :esc_str
40
+ rule /[^\\\n]+/, Str
41
+ end
42
+
43
+ state :dq do
44
+ rule /"/, Str, :pop!
45
+ mixin :esc_str
46
+ rule /[^\\"]+/m, Str
47
+ end
48
+
49
+ state :esc_str do
50
+ rule /\\u[0-9]{4}/, Str::Escape
51
+ rule /\\./m, Str::Escape
52
+ end
53
+ end
54
+ end
55
+ 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.analyze_text(text)
13
+ return 1 if text.shebang? 'puppet-apply'
14
+ return 1 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,231 @@
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.analyze_text(text)
14
+ return 1 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
+ )
23
+ end
24
+
25
+ def self.builtins
26
+ @builtins ||= %w(
27
+ __import__ abs all any apply basestring bin bool buffer
28
+ bytearray bytes callable chr classmethod cmp coerce compile
29
+ complex delattr dict dir divmod enumerate eval execfile exit
30
+ file filter float frozenset getattr globals hasattr hash hex id
31
+ input int intern isinstance issubclass iter len list locals
32
+ long map max min next object oct open ord pow property range
33
+ raw_input reduce reload repr reversed round set setattr slice
34
+ sorted staticmethod str sum super tuple type unichr unicode
35
+ vars xrange zip
36
+ )
37
+ end
38
+
39
+ def self.builtins_pseudo
40
+ @builtins_pseudo ||= %w(self None Ellipsis NotImplemented False True)
41
+ end
42
+
43
+ def self.exceptions
44
+ @exceptions ||= %w(
45
+ ArithmeticError AssertionError AttributeError
46
+ BaseException DeprecationWarning EOFError EnvironmentError
47
+ Exception FloatingPointError FutureWarning GeneratorExit IOError
48
+ ImportError ImportWarning IndentationError IndexError KeyError
49
+ KeyboardInterrupt LookupError MemoryError NameError
50
+ NotImplemented NotImplementedError OSError OverflowError
51
+ OverflowWarning PendingDeprecationWarning ReferenceError
52
+ RuntimeError RuntimeWarning StandardError StopIteration
53
+ SyntaxError SyntaxWarning SystemError SystemExit TabError
54
+ TypeError UnboundLocalError UnicodeDecodeError
55
+ UnicodeEncodeError UnicodeError UnicodeTranslateError
56
+ UnicodeWarning UserWarning ValueError VMSError Warning
57
+ WindowsError ZeroDivisionError
58
+ )
59
+ end
60
+
61
+ identifier = /[a-z_][a-z0-9_]*/i
62
+ dotted_identifier = /[a-z_.][a-z0-9_.]*/i
63
+ state :root do
64
+ rule /\n+/m, Text
65
+ rule /^(:)(\s*)([ru]{,2}""".*?""")/mi do
66
+ groups Punctuation, Text, Str::Doc
67
+ end
68
+
69
+ rule /[^\S\n]+/, Text
70
+ rule /#.*$/, Comment
71
+ rule /[\[\]{}:(),;]/, Punctuation
72
+ rule /\\\n/, Text
73
+ rule /\\/, Text
74
+
75
+ rule /(in|is|and|or|not)\b/, Operator::Word
76
+ rule /!=|==|<<|>>|[-~+\/*%=<>&^|.]/, Operator
77
+
78
+ rule /(from)((?:\\\s|\s)+)(#{dotted_identifier})((?:\\\s|\s)+)(import)/ do
79
+ groups Keyword::Namespace,
80
+ Text,
81
+ Name::Namespace,
82
+ Text,
83
+ Keyword::Namespace
84
+ end
85
+
86
+ rule /(import)(\s+)(#{dotted_identifier})/ do
87
+ groups Keyword::Namespace, Text, Name::Namespace
88
+ end
89
+
90
+ rule /(def)((?:\s|\\\s)+)/ do
91
+ groups Keyword, Text
92
+ push :funcname
93
+ end
94
+
95
+ rule /(class)((?:\s|\\\s)+)/ do
96
+ groups Keyword, Text
97
+ push :classname
98
+ end
99
+
100
+ # TODO: not in python 3
101
+ rule /`.*?`/, Str::Backtick
102
+ rule /(?:r|ur|ru)"""/i, Str, :raw_tdqs
103
+ rule /(?:r|ur|ru)'''/i, Str, :raw_tsqs
104
+ rule /(?:r|ur|ru)"/i, Str, :raw_dqs
105
+ rule /(?:r|ur|ru)'/i, Str, :raw_sqs
106
+ rule /u?"""/i, Str, :tdqs
107
+ rule /u?'''/i, Str, :tsqs
108
+ rule /u?"/i, Str, :dqs
109
+ rule /u?'/i, Str, :sqs
110
+
111
+ rule /@#{dotted_identifier}/i, Name::Decorator
112
+
113
+ # using negative lookbehind so we don't match property names
114
+ rule /(?<!\.)#{identifier}/ do |m|
115
+ if self.class.keywords.include? m[0]
116
+ token Keyword
117
+ elsif self.class.exceptions.include? m[0]
118
+ token Name::Builtin
119
+ elsif self.class.builtins.include? m[0]
120
+ token Name::Builtin
121
+ elsif self.class.builtins_pseudo.include? m[0]
122
+ token Name::Builtin::Pseudo
123
+ else
124
+ token Name
125
+ end
126
+ end
127
+
128
+ rule identifier, Name
129
+
130
+ rule /(\d+\.\d*|\d*\.\d+)(e[+-]?[0-9]+)?/i, Num::Float
131
+ rule /\d+e[+-]?[0-9]+/i, Num::Float
132
+ rule /0[0-7]+/, Num::Oct
133
+ rule /0x[a-f0-9]+/i, Num::Hex
134
+ rule /\d+L/, Num::Integer::Long
135
+ rule /\d+/, Num::Integer
136
+ end
137
+
138
+ state :funcname do
139
+ rule identifier, Name::Function, :pop!
140
+ end
141
+
142
+ state :classname do
143
+ rule identifier, Name::Class, :pop!
144
+ end
145
+
146
+ state :raise do
147
+ rule /from\b/, Keyword
148
+ rule /raise\b/, Keyword
149
+ rule /yield\b/, Keyword
150
+ rule /\n/, Text, :pop!
151
+ rule /;/, Punctuation, :pop!
152
+ mixin :root
153
+ end
154
+
155
+ state :yield do
156
+ mixin :raise
157
+ end
158
+
159
+ state :strings do
160
+ rule /%(\([a-z0-9_]+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?/i, Str::Interpol
161
+ end
162
+
163
+ state :strings_double do
164
+ rule /[^\\"%\n]+/, Str
165
+ mixin :strings
166
+ end
167
+
168
+ state :strings_single do
169
+ rule /[^\\'%\n]+/, Str
170
+ mixin :strings
171
+ end
172
+
173
+ state :nl do
174
+ rule /\n/, Str
175
+ end
176
+
177
+ state :escape do
178
+ rule %r(\\
179
+ ( [\\abfnrtv"']
180
+ | \n
181
+ | N{[a-zA-z][a-zA-Z ]+[a-zA-Z]}
182
+ | u[a-fA-F0-9]{4}
183
+ | U[a-fA-F0-9]{8}
184
+ | x[a-fA-F0-9]{2}
185
+ | [0-7]{1,3}
186
+ )
187
+ )x, Str::Escape
188
+ end
189
+
190
+ state :raw_escape do
191
+ rule /\\./, Str
192
+ end
193
+
194
+ state :dqs do
195
+ rule /"/, Str, :pop!
196
+ mixin :escape
197
+ mixin :strings_double
198
+ end
199
+
200
+ state :sqs do
201
+ rule /'/, Str, :pop!
202
+ mixin :escape
203
+ mixin :strings_single
204
+ end
205
+
206
+ state :tdqs do
207
+ rule /"""/, Str, :pop!
208
+ rule /"/, Str
209
+ mixin :escape
210
+ mixin :strings_double
211
+ mixin :nl
212
+ end
213
+
214
+ state :tsqs do
215
+ rule /'''/, Str, :pop!
216
+ rule /'/, Str
217
+ mixin :escape
218
+ mixin :strings_single
219
+ mixin :nl
220
+ end
221
+
222
+ %w(tdqs tsqs dqs sqs).each do |qtype|
223
+ state :"raw_#{qtype}" do
224
+ mixin :raw_escape
225
+ mixin :"#{qtype}"
226
+ end
227
+ end
228
+
229
+ end
230
+ end
231
+ end