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,138 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class HTML < RegexLexer
6
+ title "HTML"
7
+ desc "HTML, the markup language of the web"
8
+ tag 'html'
9
+ filenames '*.htm', '*.html', '*.xhtml'
10
+ mimetypes 'text/html', 'application/xhtml+xml'
11
+
12
+ def self.analyze_text(text)
13
+ return 1 if text.doctype?(/\bhtml\b/i)
14
+ return 1 if text =~ /<\s*html\b/
15
+ end
16
+
17
+ start do
18
+ @javascript = Javascript.new(options)
19
+ @css = CSS.new(options)
20
+ end
21
+
22
+ state :root do
23
+ rule /[^<&]+/m, Text
24
+ rule /&\S*?;/, Name::Entity
25
+ rule /<!DOCTYPE .*?>/im, Comment::Preproc
26
+ rule /<!\[CDATA\[.*?\]\]>/m, Comment::Preproc
27
+ rule /<!--/, Comment, :comment
28
+ rule /<\?.*?\?>/m, Comment::Preproc # php? really?
29
+
30
+ rule /<\s*script\s*/m do
31
+ token Name::Tag
32
+ @javascript.reset!
33
+ push :script_content
34
+ push :tag
35
+ end
36
+
37
+ rule /<\s*style\s*/m do
38
+ token Name::Tag
39
+ @css.reset!
40
+ push :style_content
41
+ push :tag
42
+ end
43
+
44
+ rule /<\//, Name::Tag, :tag_end
45
+ rule /</, Name::Tag, :tag_start
46
+
47
+ rule %r(<\s*[a-zA-Z0-9:-]+), Name::Tag, :tag # opening tags
48
+ rule %r(<\s*/\s*[a-zA-Z0-9:-]+\s*>), Name::Tag # closing tags
49
+ end
50
+
51
+ state :tag_end do
52
+ mixin :tag_end_end
53
+ rule /[a-zA-Z0-9:-]+/ do
54
+ token Name::Tag
55
+ goto :tag_end_end
56
+ end
57
+ end
58
+
59
+ state :tag_end_end do
60
+ rule /\s+/, Text
61
+ rule />/, Name::Tag, :pop!
62
+ end
63
+
64
+ state :tag_start do
65
+ rule /\s+/, Text
66
+
67
+ rule /[a-zA-Z0-9:-]+/ do
68
+ token Name::Tag
69
+ goto :tag
70
+ end
71
+
72
+ rule(//) { goto :tag }
73
+ end
74
+
75
+ state :comment do
76
+ rule /[^-]+/, Comment
77
+ rule /-->/, Comment, :pop!
78
+ rule /-/, Comment
79
+ end
80
+
81
+ state :tag do
82
+ rule /\s+/m, Text
83
+ rule /[a-zA-Z0-9_:-]+\s*=/m, Name::Attribute, :attr
84
+ rule /[a-zA-Z0-9_:-]+/, Name::Attribute
85
+ rule %r(/?\s*>)m, Name::Tag, :pop!
86
+ end
87
+
88
+ state :attr do
89
+ # TODO: are backslash escapes valid here?
90
+ rule /"/ do
91
+ token Str
92
+ goto :dq
93
+ end
94
+
95
+ rule /'/ do
96
+ token Str
97
+ goto :sq
98
+ end
99
+
100
+ rule /[^\s>]+/, Str, :pop!
101
+ end
102
+
103
+ state :dq do
104
+ rule /"/, Str, :pop!
105
+ rule /[^"]+/, Str
106
+ end
107
+
108
+ state :sq do
109
+ rule /'/, Str, :pop!
110
+ rule /[^']+/, Str
111
+ end
112
+
113
+ state :script_content do
114
+ rule %r([^<]+) do
115
+ delegate @javascript
116
+ end
117
+
118
+ rule %r(<\s*/\s*script\s*>)m, Name::Tag, :pop!
119
+
120
+ rule %r(<) do
121
+ delegate @javascript
122
+ end
123
+ end
124
+
125
+ state :style_content do
126
+ rule /[^<]+/ do
127
+ delegate @css
128
+ end
129
+
130
+ rule %r(<\s*/\s*style\s*>)m, Name::Tag, :pop!
131
+
132
+ rule /</ do
133
+ delegate @css
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,80 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class HTTP < RegexLexer
6
+ tag 'http'
7
+ title "HTTP"
8
+ desc 'http requests and responses'
9
+
10
+ def self.http_methods
11
+ @http_methods ||= %w(GET POST PUT DELETE HEAD OPTIONS TRACE PATCH)
12
+ end
13
+
14
+ def content_lexer
15
+ return Lexers::PlainText unless @content_type
16
+
17
+ @content_lexer ||= Lexer.guess_by_mimetype(@content_type)
18
+ rescue Lexer::AmbiguousGuess
19
+ @content_lexer = Lexers::PlainText
20
+ end
21
+
22
+ start { @content_type = 'text/plain' }
23
+
24
+ state :root do
25
+ # request
26
+ rule %r(
27
+ (#{HTTP.http_methods.join('|')})([ ]+) # method
28
+ ([^ ]+)([ ]+) # path
29
+ (HTTPS?)(/)(1[.][01])(\r?\n|$) # http version
30
+ )ox do
31
+ groups(
32
+ Name::Function, Text,
33
+ Name::Namespace, Text,
34
+ Keyword, Operator, Num, Text
35
+ )
36
+
37
+ push :headers
38
+ end
39
+
40
+ # response
41
+ rule %r(
42
+ (HTTPS?)(/)(1[.][01])([ ]+) # http version
43
+ (\d{3})([ ]+) # status
44
+ ([^\r\n]+)(\r?\n|$) # status message
45
+ )x do
46
+ groups(
47
+ Keyword, Operator, Num, Text,
48
+ Num, Text,
49
+ Name::Exception, Text
50
+ )
51
+ push :headers
52
+ end
53
+ end
54
+
55
+ state :headers do
56
+ rule /([^\s:]+)( *)(:)( *)([^\r\n]+)(\r?\n|$)/ do |m|
57
+ key = m[1]
58
+ value = m[5]
59
+ if key.strip.casecmp('content-type').zero?
60
+ @content_type = value.split(';')[0].downcase
61
+ end
62
+
63
+ groups Name::Attribute, Text, Punctuation, Text, Str, Text
64
+ end
65
+
66
+ rule /([^\r\n]+)(\r?\n|$)/ do
67
+ groups Str, Text
68
+ end
69
+
70
+ rule /\r?\n/, Text, :content
71
+ end
72
+
73
+ state :content do
74
+ rule /.+/m do |m|
75
+ delegate(content_lexer)
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,93 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class HyLang < RegexLexer
6
+ title "HyLang"
7
+ desc "The HyLang programming language (hylang.org)"
8
+
9
+ tag 'hylang'
10
+ aliases 'hy'
11
+
12
+ filenames '*.hy'
13
+
14
+ mimetypes 'text/x-hy', 'application/x-hy'
15
+
16
+ def self.keywords
17
+ @keywords ||= Set.new %w(
18
+ False None True and as assert break class continue def
19
+ del elif else except finally for from global if import
20
+ in is lambda nonlocal not or pass raise return try
21
+ )
22
+ end
23
+
24
+ def self.builtins
25
+ @builtins ||= Set.new %w(
26
+ != % %= & &= * ** **= *= *map
27
+ + += , - -= -> ->> . / //
28
+ //= /= < << <<= <= = > >= >>
29
+ >>= @ @= ^ ^= accumulate apply as-> assoc butlast
30
+ calling-module-name car cdr chain coll? combinations comp complement compress cond
31
+ cons cons? constantly count cut cycle dec defclass defmacro defmacro!
32
+ defmacro/g! defmain defn defreader dict-comp disassemble dispatch-reader-macro distinct do doto
33
+ drop drop-last drop-while empty? eval eval-and-compile eval-when-compile even? every? filter
34
+ first flatten float? fn for* fraction genexpr gensym get group-by
35
+ identity if* if-not if-python2 inc input instance? integer integer-char? integer?
36
+ interleave interpose islice iterable? iterate iterator? juxt keyword keyword? last
37
+ let lif lif-not list* list-comp macro-error macroexpand macroexpand-1 map merge-with
38
+ multicombinations name neg? none? not-in not? nth numeric? odd? partition
39
+ permutations pos? product quasiquote quote range read read-str reduce remove
40
+ repeat repeatedly require rest second set-comp setv some string string?
41
+ symbol? take take-nth take-while tee unless unquote unquote-splicing when with*
42
+ with-decorator with-gensyms xor yield-from zero? zip zip-longest | |= ~
43
+ )
44
+ end
45
+
46
+ identifier = %r([\w!$%*+,<=>?/.-]+)
47
+ keyword = %r([\w!\#$%*+,<=>?/.-]+)
48
+
49
+ def name_token(name)
50
+ return Keyword if self.class.keywords.include?(name)
51
+ return Name::Builtin if self.class.builtins.include?(name)
52
+ nil
53
+ end
54
+
55
+ state :root do
56
+ rule /;.*?$/, Comment::Single
57
+ rule /\s+/m, Text::Whitespace
58
+
59
+ rule /-?\d+\.\d+/, Num::Float
60
+ rule /-?\d+/, Num::Integer
61
+ rule /0x-?[0-9a-fA-F]+/, Num::Hex
62
+
63
+ rule /"(\\.|[^"])*"/, Str
64
+ rule /'#{keyword}/, Str::Symbol
65
+ rule /::?#{keyword}/, Name::Constant
66
+ rule /\\(.|[a-z]+)/i, Str::Char
67
+
68
+
69
+ rule /~@|[`\'#^~&@]/, Operator
70
+
71
+ rule /(\()(\s*)(#{identifier})/m do |m|
72
+ token Punctuation, m[1]
73
+ token Text::Whitespace, m[2]
74
+ token(name_token(m[3]) || Name::Function, m[3])
75
+ end
76
+
77
+ rule identifier do |m|
78
+ token name_token(m[0]) || Name
79
+ end
80
+
81
+ # vectors
82
+ rule /[\[\]]/, Punctuation
83
+
84
+ # maps
85
+ rule /[{}]/, Punctuation
86
+
87
+ # parentheses
88
+ rule /[()]/, Punctuation
89
+ end
90
+ end
91
+ end
92
+ end
93
+
@@ -0,0 +1,316 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # vim: set ts=2 sw=2 et:
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class IDLang < RegexLexer
7
+ title "IDL"
8
+ desc "Interactive Data Language"
9
+
10
+ tag 'idlang'
11
+ filenames '*.idl'
12
+
13
+ def self.analyze_text(text)
14
+ # Does there exist a statement that starts with 'pro' or
15
+ # 'function'?
16
+ return 0.4 if text =~ /^\s+(pro|function)\z/
17
+ end
18
+
19
+ name = /[_A-Z]\w*/i
20
+ kind_param = /(\d+|#{name})/
21
+ exponent = /[dDeE][+-]\d+/
22
+
23
+ def self.exec_unit
24
+ @exec_unit ||= Set.new %w(
25
+ PRO FUNCTION
26
+ )
27
+ end
28
+
29
+ def self.keywords
30
+ @keywords ||= Set.new %w(
31
+ STRUCT INHERITS
32
+ RETURN CONTINUE BEGIN END BREAK GOTO
33
+ )
34
+ end
35
+
36
+ def self.standalone_statements
37
+ # Must not have a comma afterwards
38
+ @standalone_statements ||= Set.new %w(
39
+ COMMON FORWARD_FUNCTION
40
+ )
41
+ end
42
+
43
+ def self.decorators
44
+ # Must not have a comma afterwards
45
+ @decorators ||= Set.new %w(
46
+ COMPILE_OPT
47
+ )
48
+ end
49
+
50
+ def self.operators
51
+ @operators ||= Set.new %w(
52
+ AND= EQ= GE= GT= LE= LT= MOD= NE= OR= XOR= NOT=
53
+ )
54
+ end
55
+
56
+ def self.conditionals
57
+ @conditionals ||= Set.new %w(
58
+ OF DO ENDIF ENDELSE ENDFOR ENDFOREACH ENDWHILE ENDREP ENDCASE ENDSWITCH
59
+ IF THEN ELSE FOR FOREACH WHILE REPEAT UNTIL CASE SWITCH
60
+ AND EQ GE GT LE LT MOD NE OR XOR NOT
61
+ )
62
+ end
63
+
64
+ def self.routines
65
+ @routines ||= Set.new %w(
66
+ A_CORRELATE ABS ACOS ADAPT_HIST_EQUAL ALOG ALOG10
67
+ AMOEBA ANNOTATE ARG_PRESENT ARRAY_EQUAL
68
+ ARRAY_INDICES ARROW ASCII_TEMPLATE ASIN ASSOC ATAN
69
+ AXIS BAR_PLOT BESELI BESELJ BESELK BESELY BETA
70
+ BILINEAR BIN_DATE BINARY_TEMPLATE BINDGEN BINOMIAL
71
+ BLAS_AXPY BLK_CON BOX_CURSOR BREAK BREAKPOINT
72
+ BROYDEN BYTARR BYTE BYTEORDER BYTSCL C_CORRELATE
73
+ CALDAT CALENDAR CALL_EXTERNAL CALL_FUNCTION
74
+ CALL_METHOD CALL_PROCEDURE CATCH CD CEIL CHEBYSHEV
75
+ CHECK_MATH CHISQR_CVF CHISQR_PDF CHOLDC CHOLSOL
76
+ CINDGEN CIR_3PNT CLOSE CLUST_WTS CLUSTER
77
+ COLOR_CONVERT COLOR_QUAN COLORMAP_APPLICABLE COMFIT
78
+ COMPLEX COMPLEXARR COMPLEXROUND
79
+ COMPUTE_MESH_NORMALS COND CONGRID CONJ
80
+ CONSTRAINED_MIN CONTOUR CONVERT_COORD CONVOL
81
+ COORD2TO3 CORRELATE COS COSH CRAMER CREATE_STRUCT
82
+ CREATE_VIEW CROSSP CRVLENGTH CT_LUMINANCE CTI_TEST
83
+ CURSOR CURVEFIT CV_COORD CVTTOBM CW_ANIMATE
84
+ CW_ANIMATE_GETP CW_ANIMATE_LOAD CW_ANIMATE_RUN
85
+ CW_ARCBALL CW_BGROUP CW_CLR_INDEX CW_COLORSEL
86
+ CW_DEFROI CW_FIELD CW_FILESEL CW_FORM CW_FSLIDER
87
+ CW_LIGHT_EDITOR CW_LIGHT_EDITOR_GET
88
+ CW_LIGHT_EDITOR_SET CW_ORIENT CW_PALETTE_EDITOR
89
+ CW_PALETTE_EDITOR_GET CW_PALETTE_EDITOR_SET
90
+ CW_PDMENU CW_RGBSLIDER CW_TMPL CW_ZOOM DBLARR
91
+ DCINDGEN DCOMPLEX DCOMPLEXARR DEFINE_KEY DEFROI
92
+ DEFSYSV DELETE_SYMBOL DELLOG DELVAR DERIV DERIVSIG
93
+ DETERM DEVICE DFPMIN DIALOG_MESSAGE
94
+ DIALOG_PICKFILE DIALOG_PRINTERSETUP
95
+ DIALOG_PRINTJOB DIALOG_READ_IMAGE
96
+ DIALOG_WRITE_IMAGE DICTIONARY DIGITAL_FILTER DILATE DINDGEN
97
+ DISSOLVE DIST DLM_LOAD DLM_REGISTER
98
+ DO_APPLE_SCRIPT DOC_LIBRARY DOUBLE DRAW_ROI EFONT
99
+ EIGENQL EIGENVEC ELMHES EMPTY ENABLE_SYSRTN EOF
100
+ ERASE ERODE ERRORF ERRPLOT EXECUTE EXIT EXP EXPAND
101
+ EXPAND_PATH EXPINT EXTRAC EXTRACT_SLICE F_CVF
102
+ F_PDF FACTORIAL FFT FILE_CHMOD FILE_DELETE
103
+ FILE_EXPAND_PATH FILE_MKDIR FILE_TEST FILE_WHICH
104
+ FILE_SEARCH PATH_SEP FILE_DIRNAME FILE_BASENAME
105
+ FILE_INFO FILE_MOVE FILE_COPY FILE_LINK FILE_POLL_INPUT
106
+ FILEPATH FINDFILE FINDGEN FINITE FIX FLICK FLOAT
107
+ FLOOR FLOW3 FLTARR FLUSH FORMAT_AXIS_VALUES
108
+ FORWARD_FUNCTION FREE_LUN FSTAT FULSTR FUNCT
109
+ FV_TEST FX_ROOT FZ_ROOTS GAMMA GAMMA_CT
110
+ GAUSS_CVF GAUSS_PDF GAUSS2DFIT GAUSSFIT GAUSSINT
111
+ GET_DRIVE_LIST GET_KBRD GET_LUN GET_SCREEN_SIZE
112
+ GET_SYMBOL GETENV GOTO GREG2JUL GRID_TPS GRID3 GS_ITER
113
+ H_EQ_CT H_EQ_INT HANNING HASH HEAP_GC HELP HILBERT
114
+ HIST_2D HIST_EQUAL HISTOGRAM HLS HOUGH HQR HSV
115
+ IBETA IDENTITY IDL_CONTAINER IDLANROI
116
+ IDLANROIGROUP IDLFFDICOM IDLFFDXF IDLFFLANGUAGECAT
117
+ IDLFFSHAPE IDLGRAXIS IDLGRBUFFER IDLGRCLIPBOARD
118
+ IDLGRCOLORBAR IDLGRCONTOUR IDLGRFONT IDLGRIMAGE
119
+ IDLGRLEGEND IDLGRLIGHT IDLGRMODEL IDLGRMPEG
120
+ IDLGRPALETTE IDLGRPATTERN IDLGRPLOT IDLGRPOLYGON
121
+ IDLGRPOLYLINE IDLGRPRINTER IDLGRROI IDLGRROIGROUP
122
+ IDLGRSCENE IDLGRSURFACE IDLGRSYMBOL
123
+ IDLGRTESSELLATOR IDLGRTEXT IDLGRVIEW
124
+ IDLGRVIEWGROUP IDLGRVOLUME IDLGRVRML IDLGRWINDOW
125
+ IGAMMA IMAGE_CONT IMAGE_STATISTICS IMAGINARY
126
+ INDGEN INT_2D INT_3D INT_TABULATED INTARR INTERPOL
127
+ INTERPOLATE INVERT IOCTL ISA ISHFT ISOCONTOUR
128
+ ISOSURFACE JOURNAL JUL2GREG JULDAY KEYWORD_SET KRIG2D
129
+ KURTOSIS KW_TEST L64INDGEN LABEL_DATE LABEL_REGION
130
+ LADFIT LAGUERRE LEEFILT LEGENDRE LINBCG LINDGEN
131
+ LINFIT LINKIMAGE LIST LIVE_CONTOUR LIVE_CONTROL
132
+ LIVE_DESTROY LIVE_EXPORT LIVE_IMAGE LIVE_INFO
133
+ LIVE_LINE LIVE_LOAD LIVE_OPLOT LIVE_PLOT
134
+ LIVE_PRINT LIVE_RECT LIVE_STYLE LIVE_SURFACE
135
+ LIVE_TEXT LJLCT LL_ARC_DISTANCE LMFIT LMGR LNGAMMA
136
+ LNP_TEST LOADCT LOCALE_GET LON64ARR LONARR LONG
137
+ LONG64 LSODE LU_COMPLEX LUDC LUMPROVE LUSOL
138
+ M_CORRELATE MACHAR MAKE_ARRAY MAKE_DLL MAP_2POINTS
139
+ MAP_CONTINENTS MAP_GRID MAP_IMAGE MAP_PATCH
140
+ MAP_PROJ_INFO MAP_SET MAX MATRIX_MULTIPLY MD_TEST MEAN
141
+ MEANABSDEV MEDIAN MEMORY MESH_CLIP MESH_DECIMATE
142
+ MESH_ISSOLID MESH_MERGE MESH_NUMTRIANGLES MESH_OBJ
143
+ MESH_SMOOTH MESH_SURFACEAREA MESH_VALIDATE
144
+ MESH_VOLUME MESSAGE MIN MIN_CURVE_SURF MK_HTML_HELP
145
+ MODIFYCT MOMENT MORPH_CLOSE MORPH_DISTANCE
146
+ MORPH_GRADIENT MORPH_HITORMISS MORPH_OPEN
147
+ MORPH_THIN MORPH_TOPHAT MPEG_CLOSE MPEG_OPEN
148
+ MPEG_PUT MPEG_SAVE MSG_CAT_CLOSE MSG_CAT_COMPILE
149
+ MSG_CAT_OPEN MULTI N_ELEMENTS N_PARAMS N_TAGS
150
+ NEWTON NORM OBJ_CLASS OBJ_DESTROY OBJ_ISA OBJ_NEW
151
+ OBJ_VALID OBJARR ON_ERROR ON_IOERROR ONLINE_HELP
152
+ OPEN OPENR OPENW OPENU OPLOT OPLOTERR ORDEREDHASH P_CORRELATE
153
+ PARTICLE_TRACE PCOMP PLOT PLOT_3DBOX PLOT_FIELD
154
+ PLOTERR PLOTS PNT_LINE POINT_LUN POLAR_CONTOUR
155
+ POLAR_SURFACE POLY POLY_2D POLY_AREA POLY_FIT
156
+ POLYFILL POLYFILLV POLYSHADE POLYWARP POPD POWELL
157
+ PRIMES PRINT PRINTF PRINTD PRODUCT PROFILE PROFILER
158
+ PROFILES PROJECT_VOL PS_SHOW_FONTS PSAFM PSEUDO
159
+ PTR_FREE PTR_NEW PTR_VALID PTRARR PUSHD QROMB
160
+ QROMO QSIMP QUERY_CSV R_CORRELATE R_TEST RADON RANDOMN
161
+ RANDOMU RANKS RDPIX READ READF READ_ASCII
162
+ READ_BINARY READ_BMP READ_CSV READ_DICOM READ_IMAGE
163
+ READ_INTERFILE READ_JPEG READ_PICT READ_PNG
164
+ READ_PPM READ_SPR READ_SRF READ_SYLK READ_TIFF
165
+ READ_WAV READ_WAVE READ_X11_BITMAP READ_XWD READS
166
+ READU REBIN RECALL_COMMANDS RECON3 REDUCE_COLORS
167
+ REFORM REGRESS REPLICATE REPLICATE_INPLACE
168
+ RESOLVE_ALL RESOLVE_ROUTINE RESTORE RETALL
169
+ REVERSE REWIND RK4 ROBERTS ROT ROTATE ROUND
170
+ ROUTINE_INFO RS_TEST S_TEST SAVE SAVGOL SCALE3
171
+ SCALE3D SCOPE_LEVEL SCOPE_TRACEBACK SCOPE_VARFETCH
172
+ SCOPE_VARNAME SEARCH2D SEARCH3D SET_PLOT SET_SHADING
173
+ SET_SYMBOL SETENV SETLOG SETUP_KEYS SFIT
174
+ SHADE_SURF SHADE_SURF_IRR SHADE_VOLUME SHIFT SHOW3
175
+ SHOWFONT SIGNUM SIN SINDGEN SINH SIZE SKEWNESS SKIPF
176
+ SLICER3 SLIDE_IMAGE SMOOTH SOBEL SOCKET SORT SPAWN
177
+ SPH_4PNT SPH_SCAT SPHER_HARM SPL_INIT SPL_INTERP
178
+ SPLINE SPLINE_P SPRSAB SPRSAX SPRSIN SPRSTP SQRT
179
+ STANDARDIZE STDDEV STOP STRARR STRCMP STRCOMPRESS
180
+ STREAMLINE STREGEX STRETCH STRING STRJOIN STRLEN
181
+ STRLOWCASE STRMATCH STRMESSAGE STRMID STRPOS
182
+ STRPUT STRSPLIT STRTRIM STRUCT_ASSIGN STRUCT_HIDE
183
+ STRUPCASE SURFACE SURFR SVDC SVDFIT SVSOL
184
+ SWAP_ENDIAN SWITCH SYSTIME T_CVF T_PDF T3D
185
+ TAG_NAMES TAN TANH TAPRD TAPWRT TEK_COLOR
186
+ TEMPORARY TETRA_CLIP TETRA_SURFACE TETRA_VOLUME
187
+ THIN THREED TIME_TEST2 TIMEGEN TM_TEST TOTAL TRACE
188
+ TRANSPOSE TRI_SURF TRIANGULATE TRIGRID TRIQL
189
+ TRIRED TRISOL TRNLOG TS_COEF TS_DIFF TS_FCAST
190
+ TS_SMOOTH TV TVCRS TVLCT TVRD TVSCL TYPENAME UINDGEN UINT
191
+ UINTARR UL64INDGEN ULINDGEN ULON64ARR ULONARR
192
+ ULONG ULONG64 UNIQ USERSYM VALUE_LOCATE VARIANCE
193
+ VAX_FLOAT VECTOR_FIELD VEL VELOVECT VERT_T3D VOIGT
194
+ VORONOI VOXEL_PROJ WAIT WARP_TRI WATERSHED WDELETE
195
+ WEOF WF_DRAW WHERE WIDGET_BASE WIDGET_BUTTON
196
+ WIDGET_CONTROL WIDGET_DRAW WIDGET_DROPLIST
197
+ WIDGET_EVENT WIDGET_INFO WIDGET_LABEL WIDGET_LIST
198
+ WIDGET_SLIDER WIDGET_TABLE WIDGET_TEXT WINDOW
199
+ WRITE_BMP WRITE_CSV WRITE_IMAGE WRITE_JPEG WRITE_NRIF
200
+ WRITE_PICT WRITE_PNG WRITE_PPM WRITE_SPR WRITE_SRF
201
+ WRITE_SYLK WRITE_TIFF WRITE_WAV WRITE_WAVE WRITEU
202
+ WSET WSHOW WTN WV_APPLET WV_CW_WAVELET WV_CWT
203
+ WV_DENOISE WV_DWT WV_FN_COIFLET WV_FN_DAUBECHIES
204
+ WV_FN_GAUSSIAN WV_FN_HAAR WV_FN_MORLET WV_FN_PAUL
205
+ WV_FN_SYMLET WV_IMPORT_DATA WV_IMPORT_WAVELET
206
+ WV_PLOT3D_WPS WV_PLOT_MULTIRES WV_PWT
207
+ WV_TOOL_DENOISE XBM_EDIT XDISPLAYFILE XDXF XFONT
208
+ XINTERANIMATE XLOADCT XMANAGER XMNG_TMPL XMTOOL
209
+ XOBJVIEW XPALETTE XPCOLOR XPLOT3D XREGISTERED XROI
210
+ XSQ_TEST XSURFACE XVAREDIT XVOLUME XVOLUME_ROTATE
211
+ XVOLUME_WRITE_IMAGE XYOUTS ZOOM ZOOM_24
212
+ )
213
+ end
214
+
215
+ state :root do
216
+ rule /[\s\n]+/, Text::Whitespace
217
+ # Normal comments
218
+ rule /;.*$/, Comment::Single
219
+ rule /\,\s*\,/, Error
220
+ rule /\!#{name}/, Name::Variable::Global
221
+
222
+ rule /[(),:\&\$]/, Punctuation
223
+
224
+ ## Format statements are quite a strange beast.
225
+ ## Better process them in their own state.
226
+ #rule /\b(FORMAT)(\s*)(\()/mi do |m|
227
+ # token Keyword, m[1]
228
+ # token Text::Whitespace, m[2]
229
+ # token Punctuation, m[3]
230
+ # push :format_spec
231
+ #end
232
+
233
+ rule %r(
234
+ [+-]? # sign
235
+ (
236
+ (\d+[.]\d*|[.]\d+)(#{exponent})?
237
+ | \d+#{exponent} # exponent is mandatory
238
+ )
239
+ (_#{kind_param})? # kind parameter
240
+ )xi, Num::Float
241
+
242
+ rule /\d+(B|S|U|US|LL|L|ULL|UL)?/i, Num::Integer
243
+ rule /"[0-7]+(B|O|U|ULL|UL|LL|L)?/i, Num::Oct
244
+ rule /'[0-9A-F]+'X(B|S|US|ULL|UL|U|LL|L)?/i, Num::Hex
245
+ rule /(#{kind_param}_)?'/, Str::Single, :string_single
246
+ rule /(#{kind_param}_)?"/, Str::Double, :string_double
247
+
248
+ rule %r{\#\#|\#|\&\&|\|\||/=|<=|>=|->|\@|\?|[-+*/<=~^{}]}, Operator
249
+ # Structures and the like
250
+ rule /(#{name})(\.)([^\s,]*)/i do |m|
251
+ groups Name, Operator, Name
252
+ #delegate IDLang, m[3]
253
+ end
254
+
255
+ rule /(function|pro)((?:\s|\$\s)+)/i do
256
+ groups Keyword, Text::Whitespace
257
+ push :funcname
258
+ end
259
+
260
+ rule /#{name}/m do |m|
261
+ match = m[0].upcase
262
+ if self.class.keywords.include? match
263
+ token Keyword
264
+ elsif self.class.conditionals.include? match
265
+ token Keyword
266
+ elsif self.class.decorators.include? match
267
+ token Name::Decorator
268
+ elsif self.class.standalone_statements.include? match
269
+ token Keyword::Reserved
270
+ elsif self.class.operators.include? match
271
+ token Operator::Word
272
+ elsif self.class.routines.include? match
273
+ token Name::Builtin
274
+ else
275
+ token Name
276
+ end
277
+ end
278
+
279
+ end
280
+
281
+ state :funcname do
282
+ rule /#{name}/, Name::Function
283
+
284
+ rule /\s+/, Text::Whitespace
285
+ rule /(:+|\$)/, Operator
286
+ rule /;.*/, Comment::Single
287
+
288
+ # Be done with this state if we hit EOL or comma
289
+ rule /$/, Text::Whitespace, :pop!
290
+ rule /,/, Operator, :pop!
291
+ end
292
+
293
+ state :string_single do
294
+ rule /[^']+/, Str::Single
295
+ rule /''/, Str::Escape
296
+ rule /'/, Str::Single, :pop!
297
+ end
298
+
299
+ state :string_double do
300
+ rule /[^"]+/, Str::Double
301
+ rule /"/, Str::Double, :pop!
302
+ end
303
+
304
+ state :format_spec do
305
+ rule /'/, Str::Single, :string_single
306
+ rule /"/, Str::Double, :string_double
307
+ rule /\(/, Punctuation, :format_spec
308
+ rule /\)/, Punctuation, :pop!
309
+ rule /,/, Punctuation
310
+ rule /[\s\n]+/, Text::Whitespace
311
+ # Edit descriptors could be seen as a kind of "format literal".
312
+ rule /[^\s'"(),]+/, Literal
313
+ end
314
+ end
315
+ end
316
+ end