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,79 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Kotlin < RegexLexer
6
+ # https://kotlinlang.org/docs/reference/grammar.html
7
+
8
+ title "Kotlin"
9
+ desc "Kotlin Programming Language (http://kotlinlang.org)"
10
+
11
+ tag 'kotlin'
12
+ filenames '*.kt'
13
+ mimetypes 'text/x-kotlin'
14
+
15
+ keywords = %w(
16
+ abstract annotation as break by catch class companion const
17
+ constructor continue crossinline do dynamic else enum
18
+ external false final finally for fun get if import in infix
19
+ inline inner interface internal is lateinit noinline null
20
+ object open operator out override package private protected
21
+ public reified return sealed set super tailrec this throw
22
+ true try typealias typeof val var vararg when where while
23
+ yield
24
+ )
25
+
26
+ name = %r'@?[_\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Nl}][\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Nl}\p{Nd}\p{Pc}\p{Cf}\p{Mn}\p{Mc}]*'
27
+
28
+ id = %r'(#{name}|`#{name}`)'
29
+
30
+ state :root do
31
+ rule %r'^\s*\[.*?\]', Name::Attribute
32
+ rule %r'[^\S\n]+', Text
33
+ rule %r'\\\n', Text # line continuation
34
+ rule %r'//.*?$', Comment::Single
35
+ rule %r'/[*].*?[*]/'m, Comment::Multiline
36
+ rule %r'\n', Text
37
+ rule %r'::|!!|\?[:.]', Operator
38
+ rule %r"(\.\.)", Operator
39
+ rule %r'[~!%^&*()+=|\[\]:;,.<>/?-]', Punctuation
40
+ rule %r'[{}]', Punctuation
41
+ rule %r'@"(""|[^"])*"'m, Str
42
+ rule %r'""".*?"""'m, Str
43
+ rule %r'"(\\\\|\\"|[^"\n])*["\n]'m, Str
44
+ rule %r"'\\.'|'[^\\]'", Str::Char
45
+ rule %r"[0-9](\.[0-9]+)?([eE][+-][0-9]+)?[flFL]?|0[xX][0-9a-fA-F]+[Ll]?", Num
46
+ rule %r'\b(companion)(\s+)(object)\b' do
47
+ groups Keyword, Text, Keyword
48
+ end
49
+ rule %r'\b(class|data\s+class|interface|object)(\s+)' do
50
+ groups Keyword::Declaration, Text
51
+ push :class
52
+ end
53
+ rule %r'\b(package|import)(\s+)' do
54
+ groups Keyword, Text
55
+ push :package
56
+ end
57
+ rule %r'\b(val|var)(\s+)' do
58
+ groups Keyword::Declaration, Text
59
+ push :property
60
+ end
61
+ rule %r/\bfun\b/, Keyword
62
+ rule /\b(?:#{keywords.join('|')})\b/, Keyword
63
+ rule id, Name
64
+ end
65
+
66
+ state :package do
67
+ rule /\S+/, Name::Namespace, :pop!
68
+ end
69
+
70
+ state :class do
71
+ rule id, Name::Class, :pop!
72
+ end
73
+
74
+ state :property do
75
+ rule id, Name::Property, :pop!
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,214 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ require 'yaml'
4
+
5
+ module Rouge
6
+ module Lexers
7
+ class Lasso < TemplateLexer
8
+ title "Lasso"
9
+ desc "The Lasso programming language (lassosoft.com)"
10
+ tag 'lasso'
11
+ aliases 'lassoscript'
12
+ filenames '*.lasso', '*.lasso[89]'
13
+ mimetypes 'text/x-lasso', 'text/html+lasso', 'application/x-httpd-lasso'
14
+
15
+ option :start_inline, 'Whether to start inline instead of requiring <?lasso or ['
16
+
17
+ def self.detect?(text)
18
+ return true if text.shebang?('lasso9')
19
+ return true if text =~ /\A.*?<\?(lasso(script)?|=)/
20
+ end
21
+
22
+ def initialize(*)
23
+ super
24
+
25
+ @start_inline = bool_option(:start_inline)
26
+ end
27
+
28
+ def start_inline?
29
+ @start_inline
30
+ end
31
+
32
+ start do
33
+ push :lasso if start_inline?
34
+ end
35
+
36
+ class << self
37
+ attr_reader :keywords
38
+ end
39
+
40
+ # Load Lasso keywords from separate YML file
41
+ @keywords = ::YAML.load_file(Pathname.new(__FILE__).dirname.join('lasso/keywords.yml')).tap do |h|
42
+ h.each do |k,v|
43
+ h[k] = Set.new v
44
+ end
45
+ end
46
+
47
+ id = /[a-z_][\w.]*/i
48
+
49
+ state :root do
50
+ rule /^#![ \S]+lasso9\b/, Comment::Preproc, :lasso
51
+ rule(/(?=\[|<)/) { push :delimiters }
52
+ rule /\s+/, Text::Whitespace
53
+ rule(//) { push :delimiters; push :lassofile }
54
+ end
55
+
56
+ state :delimiters do
57
+ rule /\[no_square_brackets\]/, Comment::Preproc, :nosquarebrackets
58
+ rule /\[noprocess\]/, Comment::Preproc, :noprocess
59
+ rule /\[/, Comment::Preproc, :squarebrackets
60
+ rule /<\?(lasso(script)?|=)/i, Comment::Preproc, :anglebrackets
61
+ rule(/([^\[<]|<!--.*?-->|<(script|style).*?\2>|<(?!\?(lasso(script)?|=)))+/im) { delegate parent }
62
+ end
63
+
64
+ state :nosquarebrackets do
65
+ rule /\[noprocess\]/, Comment::Preproc, :noprocess
66
+ rule /<\?(lasso(script)?|=)/i, Comment::Preproc, :anglebrackets
67
+ rule(/([^\[<]|<!--.*?-->|<(script|style).*?\2>|<(?!\?(lasso(script)?|=))|\[(?!noprocess))+/im) { delegate parent }
68
+ end
69
+
70
+ state :noprocess do
71
+ rule %r(\[/noprocess\]), Comment::Preproc, :pop!
72
+ rule(%r(([^\[]|\[(?!/noprocess))+)i) { delegate parent }
73
+ end
74
+
75
+ state :squarebrackets do
76
+ rule /\]/, Comment::Preproc, :pop!
77
+ mixin :lasso
78
+ end
79
+
80
+ state :anglebrackets do
81
+ rule /\?>/, Comment::Preproc, :pop!
82
+ mixin :lasso
83
+ end
84
+
85
+ state :lassofile do
86
+ rule /\]|\?>/, Comment::Preproc, :pop!
87
+ mixin :lasso
88
+ end
89
+
90
+ state :whitespacecomments do
91
+ rule /\s+/, Text
92
+ rule %r(//.*?\n), Comment::Single
93
+ rule %r(/\*\*!.*?\*/)m, Comment::Doc
94
+ rule %r(/\*.*?\*/)m, Comment::Multiline
95
+ end
96
+
97
+ state :lasso do
98
+ mixin :whitespacecomments
99
+
100
+ # literals
101
+ rule /\d*\.\d+(e[+-]?\d+)?/i, Num::Float
102
+ rule /0x[\da-f]+/i, Num::Hex
103
+ rule /\d+/, Num::Integer
104
+ rule /(infinity|NaN)\b/i, Num
105
+ rule /'[^'\\]*(\\.[^'\\]*)*'/m, Str::Single
106
+ rule /"[^"\\]*(\\.[^"\\]*)*"/m, Str::Double
107
+ rule /`[^`]*`/m, Str::Backtick
108
+
109
+ # names
110
+ rule /\$#{id}/, Name::Variable
111
+ rule /#(#{id}|\d+\b)/, Name::Variable::Instance
112
+ rule /(\.\s*)('#{id}')/ do
113
+ groups Name::Builtin::Pseudo, Name::Variable::Class
114
+ end
115
+ rule /(self)(\s*->\s*)('#{id}')/i do
116
+ groups Name::Builtin::Pseudo, Operator, Name::Variable::Class
117
+ end
118
+ rule /(\.\.?\s*)(#{id}(=(?!=))?)/ do
119
+ groups Name::Builtin::Pseudo, Name::Other
120
+ end
121
+ rule /(->\\?\s*|&\s*)(#{id}(=(?!=))?)/ do
122
+ groups Operator, Name::Other
123
+ end
124
+ rule /(?<!->)(self|inherited|currentcapture|givenblock)\b/i, Name::Builtin::Pseudo
125
+ rule /-(?!infinity)#{id}/i, Name::Attribute
126
+ rule /::\s*#{id}/, Name::Label
127
+ rule /error_((code|msg)_\w+|adderror|columnrestriction|databaseconnectionunavailable|databasetimeout|deleteerror|fieldrestriction|filenotfound|invaliddatabase|invalidpassword|invalidusername|modulenotfound|noerror|nopermission|outofmemory|reqcolumnmissing|reqfieldmissing|requiredcolumnmissing|requiredfieldmissing|updateerror)/i, Name::Exception
128
+
129
+ # definitions
130
+ rule /(define)(\s+)(#{id})(\s*=>\s*)(type|trait|thread)\b/i do
131
+ groups Keyword::Declaration, Text, Name::Class, Operator, Keyword
132
+ end
133
+ rule %r((define)(\s+)(#{id})(\s*->\s*)(#{id}=?|[-+*/%]))i do
134
+ groups Keyword::Declaration, Text, Name::Class, Operator, Name::Function
135
+ push :signature
136
+ end
137
+ rule /(define)(\s+)(#{id})/i do
138
+ groups Keyword::Declaration, Text, Name::Function
139
+ push :signature
140
+ end
141
+ rule %r((public|protected|private|provide)(\s+)((#{id}=?|[-+*/%])(?=\s*\()))i do
142
+ groups Keyword, Text, Name::Function
143
+ push :signature
144
+ end
145
+ rule /(public|protected|private|provide)(\s+)(#{id})/i do
146
+ groups Keyword, Text, Name::Function
147
+ end
148
+
149
+ # keywords
150
+ rule /(true|false|none|minimal|full|all|void)\b/i, Keyword::Constant
151
+ rule /(local|var|variable|global|data(?=\s))\b/i, Keyword::Declaration
152
+ rule /(array|date|decimal|duration|integer|map|pair|string|tag|xml|null|boolean|bytes|keyword|list|locale|queue|set|stack|staticarray)\b/i, Keyword::Type
153
+ rule /(#{id})(\s+)(in)\b/i do
154
+ groups Name, Text, Keyword
155
+ end
156
+ rule /(let|into)(\s+)(#{id})/i do
157
+ groups Keyword, Text, Name
158
+ end
159
+
160
+ # other
161
+ rule /,/, Punctuation, :commamember
162
+ rule /(and|or|not)\b/i, Operator::Word
163
+ rule /(#{id})(\s*::\s*#{id})?(\s*=(?!=|>))/ do
164
+ groups Name, Name::Label, Operator
165
+ end
166
+
167
+ rule %r((/?)([\w.]+)) do |m|
168
+ name = m[2].downcase
169
+
170
+ if m[1] != ''
171
+ token Punctuation, m[1]
172
+ end
173
+
174
+ if name == 'namespace_using'
175
+ token Keyword::Namespace, m[2]
176
+ elsif self.class.keywords[:keywords].include? name
177
+ token Keyword, m[2]
178
+ elsif self.class.keywords[:types_traits].include? name
179
+ token Name::Builtin, m[2]
180
+ else
181
+ token Name::Other, m[2]
182
+ end
183
+ end
184
+
185
+ rule /(=)(n?bw|n?ew|n?cn|lte?|gte?|n?eq|n?rx|ft)\b/i do
186
+ groups Operator, Operator::Word
187
+ end
188
+ rule %r(:=|[-+*/%=<>&|!?\\]+), Operator
189
+ rule /[{}():;,@^]/, Punctuation
190
+ end
191
+
192
+ state :signature do
193
+ rule /\=>/, Operator, :pop!
194
+ rule /\)/, Punctuation, :pop!
195
+ rule /[(,]/, Punctuation, :parameter
196
+ mixin :lasso
197
+ end
198
+
199
+ state :parameter do
200
+ rule /\)/, Punctuation, :pop!
201
+ rule /-?#{id}/, Name::Attribute, :pop!
202
+ rule /\.\.\./, Name::Builtin::Pseudo
203
+ mixin :lasso
204
+ end
205
+
206
+ state :commamember do
207
+ rule %r((#{id}=?|[-+*/%])(?=\s*(\(([^()]*\([^()]*\))*[^\)]*\)\s*)?(::[\w.\s]+)?=>)), Name::Function, :signature
208
+ mixin :whitespacecomments
209
+ rule //, Text, :pop!
210
+ end
211
+
212
+ end
213
+ end
214
+ end
@@ -0,0 +1,446 @@
1
+ :keywords:
2
+ - "cache"
3
+ - "database_names"
4
+ - "database_schemanames"
5
+ - "database_tablenames"
6
+ - "define_tag"
7
+ - "define_type"
8
+ - "email_batch"
9
+ - "encode_set"
10
+ - "html_comment"
11
+ - "handle"
12
+ - "handle_error"
13
+ - "header"
14
+ - "if"
15
+ - "inline"
16
+ - "iterate"
17
+ - "ljax_target"
18
+ - "link"
19
+ - "link_currentaction"
20
+ - "link_currentgroup"
21
+ - "link_currentrecord"
22
+ - "link_detail"
23
+ - "link_firstgroup"
24
+ - "link_firstrecord"
25
+ - "link_lastgroup"
26
+ - "link_lastrecord"
27
+ - "link_nextgroup"
28
+ - "link_nextrecord"
29
+ - "link_prevgroup"
30
+ - "link_prevrecord"
31
+ - "log"
32
+ - "loop"
33
+ - "namespace_using"
34
+ - "output_none"
35
+ - "portal"
36
+ - "private"
37
+ - "protect"
38
+ - "records"
39
+ - "referer"
40
+ - "referrer"
41
+ - "repeating"
42
+ - "resultset"
43
+ - "rows"
44
+ - "search_args"
45
+ - "search_arguments"
46
+ - "select"
47
+ - "sort_args"
48
+ - "sort_arguments"
49
+ - "thread_atomic"
50
+ - "value_list"
51
+ - "while"
52
+ - "abort"
53
+ - "case"
54
+ - "else"
55
+ - "fail_if"
56
+ - "fail_ifnot"
57
+ - "fail"
58
+ - "if_empty"
59
+ - "if_false"
60
+ - "if_null"
61
+ - "if_true"
62
+ - "loop_abort"
63
+ - "loop_continue"
64
+ - "loop_count"
65
+ - "params"
66
+ - "params_up"
67
+ - "return"
68
+ - "return_value"
69
+ - "run_children"
70
+ - "soap_definetag"
71
+ - "soap_lastrequest"
72
+ - "soap_lastresponse"
73
+ - "tag_name"
74
+ - "ascending"
75
+ - "average"
76
+ - "by"
77
+ - "define"
78
+ - "descending"
79
+ - "do"
80
+ - "equals"
81
+ - "frozen"
82
+ - "group"
83
+ - "handle_failure"
84
+ - "import"
85
+ - "in"
86
+ - "into"
87
+ - "join"
88
+ - "let"
89
+ - "match"
90
+ - "max"
91
+ - "min"
92
+ - "on"
93
+ - "order"
94
+ - "parent"
95
+ - "protected"
96
+ - "provide"
97
+ - "public"
98
+ - "require"
99
+ - "returnhome"
100
+ - "skip"
101
+ - "split_thread"
102
+ - "sum"
103
+ - "take"
104
+ - "thread"
105
+ - "to"
106
+ - "trait"
107
+ - "type"
108
+ - "where"
109
+ - "with"
110
+ - "yield"
111
+ - "yieldhome"
112
+
113
+ :types_traits:
114
+ - "atbegin"
115
+ - "bson_iter"
116
+ - "bson"
117
+ - "bytes_document_body"
118
+ - "cache_server_element"
119
+ - "cache_server"
120
+ - "capture"
121
+ - "client_address"
122
+ - "client_ip"
123
+ - "component_container"
124
+ - "component_render_state"
125
+ - "component"
126
+ - "curl"
127
+ - "curltoken"
128
+ - "currency"
129
+ - "custom"
130
+ - "data_document"
131
+ - "database_registry"
132
+ - "dateandtime"
133
+ - "dbgp_packet"
134
+ - "dbgp_server"
135
+ - "debugging_stack"
136
+ - "delve"
137
+ - "dir"
138
+ - "dirdesc"
139
+ - "dns_response"
140
+ - "document_base"
141
+ - "document_body"
142
+ - "document_header"
143
+ - "dsinfo"
144
+ - "eacher"
145
+ - "email_compose"
146
+ - "email_parse"
147
+ - "email_pop"
148
+ - "email_queue_impl_base"
149
+ - "email_queue_impl"
150
+ - "email_smtp"
151
+ - "email_stage_impl_base"
152
+ - "email_stage_impl"
153
+ - "fastcgi_each_fcgi_param"
154
+ - "fastcgi_server"
155
+ - "fcgi_record"
156
+ - "fcgi_request"
157
+ - "file"
158
+ - "filedesc"
159
+ - "filemaker_datasource"
160
+ - "generateforeachkeyed"
161
+ - "generateforeachunkeyed"
162
+ - "generateseries"
163
+ - "hash_map"
164
+ - "html_atomic_element"
165
+ - "html_attr"
166
+ - "html_base"
167
+ - "html_binary"
168
+ - "html_br"
169
+ - "html_cdata"
170
+ - "html_container_element"
171
+ - "html_div"
172
+ - "html_document_body"
173
+ - "html_document_head"
174
+ - "html_eol"
175
+ - "html_fieldset"
176
+ - "html_form"
177
+ - "html_h1"
178
+ - "html_h2"
179
+ - "html_h3"
180
+ - "html_h4"
181
+ - "html_h5"
182
+ - "html_h6"
183
+ - "html_hr"
184
+ - "html_img"
185
+ - "html_input"
186
+ - "html_json"
187
+ - "html_label"
188
+ - "html_legend"
189
+ - "html_link"
190
+ - "html_meta"
191
+ - "html_object"
192
+ - "html_option"
193
+ - "html_raw"
194
+ - "html_script"
195
+ - "html_select"
196
+ - "html_span"
197
+ - "html_style"
198
+ - "html_table"
199
+ - "html_td"
200
+ - "html_text"
201
+ - "html_th"
202
+ - "html_tr"
203
+ - "http_document_header"
204
+ - "http_document"
205
+ - "http_error"
206
+ - "http_header_field"
207
+ - "http_server_connection_handler_globals"
208
+ - "http_server_connection_handler"
209
+ - "http_server_request_logger_thread"
210
+ - "http_server_web_connection"
211
+ - "http_server"
212
+ - "image"
213
+ - "include_cache"
214
+ - "inline_type"
215
+ - "java_jnienv"
216
+ - "jbyte"
217
+ - "jbytearray"
218
+ - "jchar"
219
+ - "jchararray"
220
+ - "jfieldid"
221
+ - "jfloat"
222
+ - "jint"
223
+ - "jmethodid"
224
+ - "jobject"
225
+ - "jshort"
226
+ - "json_decode"
227
+ - "json_encode"
228
+ - "json_literal"
229
+ - "json_object"
230
+ - "lassoapp_compiledsrc_appsource"
231
+ - "lassoapp_compiledsrc_fileresource"
232
+ - "lassoapp_content_rep_halt"
233
+ - "lassoapp_dirsrc_appsource"
234
+ - "lassoapp_dirsrc_fileresource"
235
+ - "lassoapp_installer"
236
+ - "lassoapp_livesrc_appsource"
237
+ - "lassoapp_livesrc_fileresource"
238
+ - "lassoapp_long_expiring_bytes"
239
+ - "lassoapp_manualsrc_appsource"
240
+ - "lassoapp_zip_file_server"
241
+ - "lassoapp_zipsrc_appsource"
242
+ - "lassoapp_zipsrc_fileresource"
243
+ - "ldap"
244
+ - "library_thread_loader"
245
+ - "list_node"
246
+ - "log_impl_base"
247
+ - "log_impl"
248
+ - "magick_image"
249
+ - "map_node"
250
+ - "memberstream"
251
+ - "memory_session_driver_impl_entry"
252
+ - "memory_session_driver_impl"
253
+ - "memory_session_driver"
254
+ - "mime_reader"
255
+ - "mongo_client"
256
+ - "mongo_collection"
257
+ - "mongo_cursor"
258
+ - "mustache_ctx"
259
+ - "mysql_session_driver_impl"
260
+ - "mysql_session_driver"
261
+ - "net_named_pipe"
262
+ - "net_tcp_ssl"
263
+ - "net_tcp"
264
+ - "net_udp_packet"
265
+ - "net_udp"
266
+ - "odbc_session_driver_impl"
267
+ - "odbc_session_driver"
268
+ - "opaque"
269
+ - "os_process"
270
+ - "pair_compare"
271
+ - "pairup"
272
+ - "pdf_barcode"
273
+ - "pdf_chunk"
274
+ - "pdf_color"
275
+ - "pdf_doc"
276
+ - "pdf_font"
277
+ - "pdf_hyphenator"
278
+ - "pdf_image"
279
+ - "pdf_list"
280
+ - "pdf_paragraph"
281
+ - "pdf_phrase"
282
+ - "pdf_read"
283
+ - "pdf_table"
284
+ - "pdf_text"
285
+ - "pdf_typebase"
286
+ - "percent"
287
+ - "portal_impl"
288
+ - "queriable_groupby"
289
+ - "queriable_grouping"
290
+ - "queriable_groupjoin"
291
+ - "queriable_join"
292
+ - "queriable_orderby"
293
+ - "queriable_orderbydescending"
294
+ - "queriable_select"
295
+ - "queriable_selectmany"
296
+ - "queriable_skip"
297
+ - "queriable_take"
298
+ - "queriable_thenby"
299
+ - "queriable_thenbydescending"
300
+ - "queriable_where"
301
+ - "raw_document_body"
302
+ - "regexp"
303
+ - "repeat"
304
+ - "scientific"
305
+ - "security_registry"
306
+ - "serialization_element"
307
+ - "serialization_object_identity_compare"
308
+ - "serialization_reader"
309
+ - "serialization_writer_ref"
310
+ - "serialization_writer_standin"
311
+ - "serialization_writer"
312
+ - "session_delete_expired_thread"
313
+ - "signature"
314
+ - "sourcefile"
315
+ - "sqlite_column"
316
+ - "sqlite_currentrow"
317
+ - "sqlite_db"
318
+ - "sqlite_results"
319
+ - "sqlite_session_driver_impl_entry"
320
+ - "sqlite_session_driver_impl"
321
+ - "sqlite_session_driver"
322
+ - "sqlite_table"
323
+ - "sqlite3_stmt"
324
+ - "sqlite3"
325
+ - "sys_process"
326
+ - "text_document"
327
+ - "tie"
328
+ - "timeonly"
329
+ - "tree_base"
330
+ - "tree_node"
331
+ - "tree_nullnode"
332
+ - "ucal"
333
+ - "usgcpu"
334
+ - "usgvm"
335
+ - "web_error_atend"
336
+ - "web_node_base"
337
+ - "web_node_content_representation_css_specialized"
338
+ - "web_node_content_representation_html_specialized"
339
+ - "web_node_content_representation_js_specialized"
340
+ - "web_node_content_representation_xhr_container"
341
+ - "web_node_echo"
342
+ - "web_node_root"
343
+ - "web_request_impl"
344
+ - "web_request"
345
+ - "web_response_impl"
346
+ - "web_response"
347
+ - "web_router"
348
+ - "websocket_handler"
349
+ - "worker_pool"
350
+ - "xml_attr"
351
+ - "xml_cdatasection"
352
+ - "xml_characterdata"
353
+ - "xml_comment"
354
+ - "xml_document"
355
+ - "xml_documentfragment"
356
+ - "xml_documenttype"
357
+ - "xml_domimplementation"
358
+ - "xml_element"
359
+ - "xml_entity"
360
+ - "xml_entityreference"
361
+ - "xml_namednodemap_attr"
362
+ - "xml_namednodemap_ht"
363
+ - "xml_namednodemap"
364
+ - "xml_node"
365
+ - "xml_nodelist"
366
+ - "xml_notation"
367
+ - "xml_processinginstruction"
368
+ - "xml_text"
369
+ - "xmlstream"
370
+ - "zip_file_impl"
371
+ - "zip_file"
372
+ - "zip_impl"
373
+ - "zip"
374
+ - "any"
375
+ - "formattingbase"
376
+ - "html_attributed"
377
+ - "html_element_coreattrs"
378
+ - "html_element_eventsattrs"
379
+ - "html_element_i18nattrs"
380
+ - "lassoapp_capabilities"
381
+ - "lassoapp_resource"
382
+ - "lassoapp_source"
383
+ - "queriable_asstring"
384
+ - "session_driver"
385
+ - "trait_array"
386
+ - "trait_asstring"
387
+ - "trait_backcontractible"
388
+ - "trait_backended"
389
+ - "trait_backexpandable"
390
+ - "trait_close"
391
+ - "trait_contractible"
392
+ - "trait_decompose_assignment"
393
+ - "trait_doubleended"
394
+ - "trait_each_sub"
395
+ - "trait_encodeurl"
396
+ - "trait_endedfullymutable"
397
+ - "trait_expandable"
398
+ - "trait_file"
399
+ - "trait_finite"
400
+ - "trait_finiteforeach"
401
+ - "trait_foreach"
402
+ - "trait_foreachtextelement"
403
+ - "trait_frontcontractible"
404
+ - "trait_frontended"
405
+ - "trait_frontexpandable"
406
+ - "trait_fullymutable"
407
+ - "trait_generator"
408
+ - "trait_generatorcentric"
409
+ - "trait_hashable"
410
+ - "trait_json_serialize"
411
+ - "trait_keyed"
412
+ - "trait_keyedfinite"
413
+ - "trait_keyedforeach"
414
+ - "trait_keyedmutable"
415
+ - "trait_list"
416
+ - "trait_map"
417
+ - "trait_net"
418
+ - "trait_pathcomponents"
419
+ - "trait_positionallykeyed"
420
+ - "trait_positionallysearchable"
421
+ - "trait_queriable"
422
+ - "trait_queriablelambda"
423
+ - "trait_readbytes"
424
+ - "trait_readstring"
425
+ - "trait_scalar"
426
+ - "trait_searchable"
427
+ - "trait_serializable"
428
+ - "trait_setencoding"
429
+ - "trait_setoperations"
430
+ - "trait_stack"
431
+ - "trait_treenode"
432
+ - "trait_writebytes"
433
+ - "trait_writestring"
434
+ - "trait_xml_elementcompat"
435
+ - "trait_xml_nodecompat"
436
+ - "web_connection"
437
+ - "web_node_container"
438
+ - "web_node_content_css_specialized"
439
+ - "web_node_content_document"
440
+ - "web_node_content_html_specialized"
441
+ - "web_node_content_js_specialized"
442
+ - "web_node_content_json_specialized"
443
+ - "web_node_content_representation"
444
+ - "web_node_content"
445
+ - "web_node_postable"
446
+ - "web_node"