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,164 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class VisualBasic < RegexLexer
6
+ title "Visual Basic"
7
+ desc "Visual Basic"
8
+ tag 'vb'
9
+ aliases 'visualbasic'
10
+ filenames '*.vbs', '*.vb'
11
+ mimetypes 'text/x-visualbasic', 'application/x-visualbasic'
12
+
13
+ def self.keywords
14
+ @keywords ||= Set.new %w(
15
+ AddHandler Alias ByRef ByVal CBool CByte CChar CDate CDbl CDec
16
+ CInt CLng CObj CSByte CShort CSng CStr CType CUInt CULng CUShort
17
+ Call Case Catch Class Const Continue Declare Default Delegate
18
+ Dim DirectCast Do Each Else ElseIf End EndIf Enum Erase Error
19
+ Event Exit False Finally For Friend Function Get Global GoSub
20
+ GoTo Handles If Implements Imports Inherits Interface Let
21
+ Lib Loop Me Module MustInherit MustOverride MyBase MyClass
22
+ Namespace Narrowing New Next Not NotInheritable NotOverridable
23
+ Nothing Of On Operator Option Optional Overloads Overridable
24
+ Overrides ParamArray Partial Private Property Protected Public
25
+ RaiseEvent ReDim ReadOnly RemoveHandler Resume Return Select Set
26
+ Shadows Shared Single Static Step Stop Structure Sub SyncLock
27
+ Then Throw To True Try TryCast Using Wend When While Widening
28
+ With WithEvents WriteOnly
29
+ )
30
+ end
31
+
32
+ def self.keywords_type
33
+ @keywords_type ||= Set.new %w(
34
+ Boolean Byte Char Date Decimal Double Integer Long Object
35
+ SByte Short Single String Variant UInteger ULong UShort
36
+ )
37
+ end
38
+
39
+ def self.operator_words
40
+ @operator_words ||= Set.new %w(
41
+ AddressOf And AndAlso As GetType In Is IsNot Like Mod Or OrElse
42
+ TypeOf Xor
43
+ )
44
+ end
45
+
46
+ def self.builtins
47
+ @builtins ||= Set.new %w(
48
+ Console ConsoleColor
49
+ )
50
+ end
51
+
52
+ id = /[a-z_]\w*/i
53
+ upper_id = /[A-Z]\w*/
54
+
55
+ state :whitespace do
56
+ rule /\s+/, Text
57
+ rule /\n/, Text, :bol
58
+ rule /rem\b.*?$/i, Comment::Single
59
+ rule %r(%\{.*?%\})m, Comment::Multiline
60
+ rule /'.*$/, Comment::Single
61
+ end
62
+
63
+ state :bol do
64
+ rule /\s+/, Text
65
+ rule /<.*?>/, Name::Attribute
66
+ rule(//) { :pop! }
67
+ end
68
+
69
+ state :root do
70
+ mixin :whitespace
71
+ rule %r(
72
+ [#]If\b .*? \bThen
73
+ | [#]ElseIf\b .*? \bThen
74
+ | [#]End \s+ If
75
+ | [#]Const
76
+ | [#]ExternalSource .*? \n
77
+ | [#]End \s+ ExternalSource
78
+ | [#]Region .*? \n
79
+ | [#]End \s+ Region
80
+ | [#]ExternalChecksum
81
+ )x, Comment::Preproc
82
+ rule /[.]/, Punctuation, :dotted
83
+ rule /[(){}!#,:]/, Punctuation
84
+ rule /Option\s+(Strict|Explicit|Compare)\s+(On|Off|Binary|Text)/,
85
+ Keyword::Declaration
86
+ rule /End\b/, Keyword, :end
87
+ rule /(Dim|Const)\b/, Keyword, :dim
88
+ rule /(Function|Sub|Property)\b/, Keyword, :funcname
89
+ rule /(Class|Structure|Enum)\b/, Keyword, :classname
90
+ rule /(Module|Namespace|Imports)\b/, Keyword, :namespace
91
+
92
+ rule upper_id do |m|
93
+ match = m[0]
94
+ if self.class.keywords.include? match
95
+ token Keyword
96
+ elsif self.class.keywords_type.include? match
97
+ token Keyword::Type
98
+ elsif self.class.operator_words.include? match
99
+ token Operator::Word
100
+ elsif self.class.builtins.include? match
101
+ token Name::Builtin
102
+ else
103
+ token Name
104
+ end
105
+ end
106
+
107
+ rule(
108
+ %r(&=|[*]=|/=|\\=|\^=|\+=|-=|<<=|>>=|<<|>>|:=|<=|>=|<>|[-&*/\\^+=<>.]),
109
+ Operator
110
+ )
111
+
112
+ rule /"/, Str, :string
113
+ rule /#{id}[%&@!#\$]?/, Name
114
+ rule /#.*?#/, Literal::Date
115
+
116
+ rule /(\d+\.\d*|\d*\.\d+)(f[+-]?\d+)?/i, Num::Float
117
+ rule /\d+([SILDFR]|US|UI|UL)?/, Num::Integer
118
+ rule /&H[0-9a-f]+([SILDFR]|US|UI|UL)?/, Num::Integer
119
+ rule /&O[0-7]+([SILDFR]|US|UI|UL)?/, Num::Integer
120
+
121
+ rule /_\n/, Keyword
122
+ end
123
+
124
+ state :dotted do
125
+ mixin :whitespace
126
+ rule id, Name, :pop!
127
+ end
128
+
129
+ state :string do
130
+ rule /""/, Str::Escape
131
+ rule /"C?/, Str, :pop!
132
+ rule /[^"]+/, Str
133
+ end
134
+
135
+ state :dim do
136
+ mixin :whitespace
137
+ rule id, Name::Variable, :pop!
138
+ rule(//) { pop! }
139
+ end
140
+
141
+ state :funcname do
142
+ mixin :whitespace
143
+ rule id, Name::Function, :pop!
144
+ end
145
+
146
+ state :classname do
147
+ mixin :whitespace
148
+ rule id, Name::Class, :pop!
149
+ end
150
+
151
+ state :namespace do
152
+ mixin :whitespace
153
+ rule /#{id}([.]#{id})*/, Name::Namespace, :pop!
154
+ end
155
+
156
+ state :end do
157
+ mixin :whitespace
158
+ rule /(Function|Sub|Property|Class|Structure|Enum|Module|Namespace)\b/,
159
+ Keyword, :pop!
160
+ rule(//) { pop! }
161
+ end
162
+ end
163
+ end
164
+ end
@@ -0,0 +1,164 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Verilog < RegexLexer
6
+ title "Verilog and System Verilog"
7
+ desc "The System Verilog hardware description language"
8
+ tag 'verilog'
9
+ filenames '*.v', '*.sv', '*.svh'
10
+ mimetypes 'text/x-verilog', 'text/x-systemverilog'
11
+
12
+ # optional comment or whitespace
13
+ ws = %r((?:\s|//.*?\n|/[*].*?[*]/)+)
14
+ id = /[a-zA-Z_][a-zA-Z0-9_]*/
15
+
16
+ def self.keywords
17
+ @keywords ||= Set.new %w(
18
+ alias always always_comb always_ff always_latch assert assert_strobe
19
+ assign assume automatic attribute before begin bind bins binsof break
20
+ case casex casez clocking config constraint context continue cover
21
+ covergroup coverpoint cross deassign defparam default design dist do
22
+ else end endattribute endcase endclass endclocking endconfig
23
+ endfunction endgenerate endgroup endinterface endmodule endpackage
24
+ endprimitive endprogram endproperty endspecify endsequence endtable
25
+ endtask expect export extends extern final first_match for force
26
+ foreach fork forkjoin forever function generate genvar if iff ifnone
27
+ ignore_bins illegal_bins import incdir include initial inside instance
28
+ interface intersect join join_any join_none liblist library local
29
+ localparam matches module modport new noshowcancelled null package
30
+ parameter primitive priority program property protected
31
+ pulsestyle_onevent pulsestyle_ondetect pure rand randc randcase
32
+ randsequence release return sequence showcancelled solve specify super
33
+ table task this throughout timeprecision timeunit type typedef unique
34
+ use wait wait_order while wildcard with within
35
+ )
36
+ end
37
+
38
+ def self.keywords_type
39
+ @keywords_type ||= Set.new %w(
40
+ and bit buf bufif0 bufif1 byte cell chandle class cmos const disable
41
+ edge enum event highz0 highz1 initial inout input int integer join
42
+ logic longint macromodule medium nand negedge nmos nor not
43
+ notif0 notif1 or output packed parameter pmos posedge pull0 pull1
44
+ pulldown pullup rcmos real realtime ref reg repeat rnmos rpmos rtran
45
+ rtranif0 rtranif1 scalared shortint shortreal signed specparam
46
+ static string strength strong0 strong1 struct supply0 supply1 tagged
47
+ time tran tranif0 tranif1 tri tri0 tri1 triand trior trireg union
48
+ unsigned uwire var vectored virtual void wait wand weak[01] wire wor
49
+ xnor xor
50
+ )
51
+ end
52
+
53
+ def self.keywords_system_task
54
+ @keyword_system_task ||= Set.new %w(
55
+ acos acosh asin asinh assertfailoff assertfailon assertkill
56
+ assertnonvacuouson assertoff asserton assertpassoff assertpasson
57
+ assertvacuousoff atan atan2 atanh bits bitstoreal bitstoshortreal
58
+ cast ceil changed changed_gclk changing_gclk clog2 cos cosh countones
59
+ coverage_control coverage_get coverage_get_max coverage_merge
60
+ coverage_save dimensions display displayb displayh displayo
61
+ dist_chi_square dist_erlang dist_exponential dist_normal dist_poisson
62
+ dist_t dist_uniform dumpall dumpfile dumpflush dumplimit dumpoff
63
+ dumpon dumpports dumpportsall dumpportsflush dumpportslimit
64
+ dumpportsoff dumpportson dumpvars error exit exp falling_gclk fclose
65
+ fdisplay fdisplayb fdisplayh fdisplayo fell fell_gclk feof ferror
66
+ fflush fgetc fgets finish floor fmonitor fmonitorb fmonitorh fmonitoro
67
+ fopen fread fscanf fseek fstrobe fstrobeb fstrobeh fstrobeo ftell
68
+ future_gclk fwrite fwriteb fwriteh fwriteo get_coverage high hypot
69
+ increment info isunbounded isunknown itor left ln load_coverage_db
70
+ log10 low monitor monitorb monitorh monitoro monitoroff monitoron
71
+ onehot onehot0 past past_gclk pow printtimescale q_add q_exam q_full
72
+ q_initialize q_remove random readmemb readmemh realtime realtobits
73
+ rewind right rising_gclk rose rose_gclk rtoi sampled
74
+ set_coverage_db_name sformat sformatf shortrealtobits signed sin sinh
75
+ size sqrt sscanf stable stable_gclk steady_gclk stime stop strobe
76
+ strobeb strobeh strobeo swrite swriteb swriteh swriteo system tan tanh
77
+ time timeformat typename ungetc unpacked_dimensions unsigned warning
78
+ write writeb writeh writememb writememh writeo
79
+ )
80
+ end
81
+
82
+ state :expr_bol do
83
+ mixin :inline_whitespace
84
+ rule /`define/, Comment::Preproc, :macro
85
+
86
+ rule(//) { pop! }
87
+ end
88
+
89
+ # :expr_bol is the same as :bol but without labels, since
90
+ # labels can only appear at the beginning of a statement.
91
+ state :bol do
92
+ rule /#{id}:(?!:)/, Name::Label
93
+ mixin :expr_bol
94
+ end
95
+
96
+ state :inline_whitespace do
97
+ rule /[ \t\r]+/, Text
98
+ rule /\\\n/, Text # line continuation
99
+ rule %r(/(\\\n)?[*].*?[*](\\\n)?/)m, Comment::Multiline
100
+ end
101
+
102
+ state :whitespace do
103
+ rule /\n+/m, Text, :bol
104
+ rule %r(//(\\.|.)*?\n), Comment::Single, :bol
105
+ mixin :inline_whitespace
106
+ end
107
+
108
+ state :expr_whitespace do
109
+ rule /\n+/m, Text, :expr_bol
110
+ mixin :whitespace
111
+ end
112
+
113
+ state :string do
114
+ rule /"/, Str, :pop!
115
+ rule /\\([\\abfnrtv"']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})/, Str::Escape
116
+ rule /[^\\"\n]+/, Str
117
+ rule /\\\n/, Str
118
+ rule /\\/, Str # stray backslash
119
+ end
120
+
121
+ state :statement do
122
+ mixin :whitespace
123
+ rule /L?"/, Str, :string
124
+ rule /([0-9_]+\.[0-9_]*|[0-9_]*\.[0-9_]+)(e[+-]?[0-9_]+)?/i, Num::Float
125
+ rule /[0-9_]+e[+-]?[0-9_]+/i, Num::Float
126
+ rule /[0-9]*'h[0-9a-fA-F_?]+/, Num::Hex
127
+ rule /[0-9]*'b?[01xz_?]+/, Num::Bin
128
+ rule /[0-9]*'d[0-9_?]+/, Num::Integer
129
+ rule /[0-9_]+[lu]*/i, Num::Integer
130
+ rule %r([~!%^&*+-=\|?:<>/@{}]), Operator
131
+ rule /[()\[\],.$\#]/, Punctuation
132
+ rule /`(\w+)/, Comment::Preproc
133
+
134
+ rule id do |m|
135
+ name = m[0]
136
+
137
+ if self.class.keywords.include? name
138
+ token Keyword
139
+ elsif self.class.keywords_type.include? name
140
+ token Keyword::Type
141
+ elsif self.class.keywords_system_task.include? name
142
+ token Name::Builtin
143
+ else
144
+ token Name
145
+ end
146
+ end
147
+ end
148
+
149
+ state :root do
150
+ mixin :expr_whitespace
151
+ rule(//) { push :statement }
152
+ end
153
+
154
+ state :macro do
155
+ rule /\n/, Comment::Preproc, :pop!
156
+ mixin :inline_whitespace
157
+ rule /;/, Punctuation
158
+ rule /\=/, Operator
159
+ rule /(\w+)/, Text
160
+ end
161
+
162
+ end
163
+ end
164
+ end
@@ -0,0 +1,97 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class VHDL < RegexLexer
6
+ title "VHDL 2008"
7
+ desc "Very High Speed Integrated Circuit Hardware Description Language"
8
+ tag 'vhdl'
9
+
10
+ filenames '*.vhd', '*.vhdl', '*.vho'
11
+
12
+ mimetypes 'text/x-vhdl'
13
+ def self.keywords
14
+ @keywords ||= Set.new %w(
15
+ access after alias all architecture array assert assume assume_guarantee attribute
16
+ begin block body buffer bus case component configuration constant context cover
17
+ default disconnect downto else elsif end entity exit fairness file for force function
18
+ generate generic group guarded if impure in inertial inout is label library linkage
19
+ literal loop map new next null of on open others out package parameter port postponed
20
+ procedure process property protected pure range record register reject release report
21
+ return select sequence severity shared signal strong subtype then to transport type
22
+ unaffected units until use variable vmode vprop vunit wait when while with
23
+ )
24
+ end
25
+
26
+ def self.keywords_type
27
+ @keywords_type ||= Set.new %w(
28
+ bit bit_vector boolean boolean_vector character integer integer_vector natural positive
29
+ real real_vector severity_level signed std_logic std_logic_vector std_ulogic
30
+ std_ulogic_vector string unsigned time time__vector
31
+ )
32
+ end
33
+
34
+ def self.operator_words
35
+ @operator_words ||= Set.new %w(
36
+ abs and mod nand nor not or rem rol ror sla sll sra srl xnor xor
37
+ )
38
+ end
39
+
40
+ id = /[a-zA-Z][a-zA-Z0-9_]*/
41
+
42
+ state :whitespace do
43
+ rule /\s+/, Text
44
+ rule /\n/, Text
45
+ # Find Comments (VHDL doesn't support multiline comments)
46
+ rule /--.*$/, Comment::Single
47
+ end
48
+
49
+ state :statements do
50
+
51
+ # Find Numbers
52
+ rule /-?\d+/i, Num::Integer
53
+ rule /-?\d+[.]\d+/i, Num::Float
54
+
55
+ # Find Strings
56
+ rule /[box]?"[^"]*"/i, Str::Single
57
+ rule /'[^']?'/i, Str::Char
58
+
59
+ # Find Attributes
60
+ rule /'#{id}/i, Name::Attribute
61
+
62
+ # Punctuations
63
+ rule /[(),:;]/, Punctuation
64
+
65
+ # Boolean and NULL
66
+ rule /(?:true|false|null)\b/i, Name::Builtin
67
+
68
+ rule id do |m|
69
+ match = m[0].downcase #convert to lower case
70
+ if self.class.keywords.include? match
71
+ token Keyword
72
+ elsif self.class.keywords_type.include? match
73
+ token Keyword::Type
74
+ elsif self.class.operator_words.include? match
75
+ token Operator::Word
76
+ else
77
+ token Name
78
+ end
79
+ end
80
+
81
+ rule(
82
+ %r(=>|[*][*]|:=|\/=|>=|<=|<>|\?\?|\?=|\?\/=|\?>|\?<|\?>=|\?<=|<<|>>|[#&'*+-.\/:<=>\?@^]),
83
+ Operator
84
+ )
85
+
86
+ end
87
+
88
+ state :root do
89
+
90
+ mixin :whitespace
91
+ mixin :statements
92
+
93
+ end
94
+
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,101 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class VimL < RegexLexer
6
+ title "VimL"
7
+ desc "VimL, the scripting language for the Vim editor (vim.org)"
8
+ tag 'viml'
9
+ aliases 'vim', 'vimscript', 'ex'
10
+ filenames '*.vim', '*.vba', '.vimrc', '.exrc', '.gvimrc',
11
+ '_vimrc', '_exrc', '_gvimrc' # _ names for windows
12
+
13
+ mimetypes 'text/x-vim'
14
+
15
+ def self.keywords
16
+ load Pathname.new(__FILE__).dirname.join('viml/keywords.rb')
17
+ self.keywords
18
+ end
19
+
20
+ state :root do
21
+ rule /^(\s*)(".*?)$/ do
22
+ groups Text, Comment
23
+ end
24
+
25
+ rule /^\s*\\/, Str::Escape
26
+
27
+ rule /[ \t]+/, Text
28
+
29
+ # TODO: regexes can have other delimiters
30
+ rule %r(/(\\\\|\\/|[^\n/])*/), Str::Regex
31
+ rule %r("(\\\\|\\"|[^\n"])*"), Str::Double
32
+ rule %r('(\\\\|\\'|[^\n'])*'), Str::Single
33
+
34
+ # if it's not a string, it's a comment.
35
+ rule /(?<=\s)"[^-:.%#=*].*?$/, Comment
36
+
37
+ rule /-?\d+/, Num
38
+ rule /#[0-9a-f]{6}/i, Num::Hex
39
+ rule /^:/, Punctuation
40
+ rule /[():<>+=!\[\]{}\|,~.-]/, Punctuation
41
+ rule /\b(let|if|else|endif|elseif|fun|function|endfunction)\b/,
42
+ Keyword
43
+
44
+ rule /\b(NONE|bold|italic|underline|dark|light)\b/, Name::Builtin
45
+
46
+ rule /[absg]:\w+\b/, Name::Variable
47
+ rule /\b\w+\b/ do |m|
48
+ name = m[0]
49
+ keywords = self.class.keywords
50
+
51
+ if mapping_contains?(keywords[:command], name)
52
+ token Keyword
53
+ elsif mapping_contains?(keywords[:option], name)
54
+ token Name::Builtin
55
+ elsif mapping_contains?(keywords[:auto], name)
56
+ token Name::Builtin
57
+ else
58
+ token Text
59
+ end
60
+ end
61
+
62
+ # no errors in VimL!
63
+ rule /./m, Text
64
+ end
65
+
66
+ def mapping_contains?(mapping, word)
67
+ shortest, longest = find_likely_mapping(mapping, word)
68
+
69
+ shortest and word.start_with?(shortest) and
70
+ longest and longest.start_with?(word)
71
+ end
72
+
73
+ # binary search through the mappings to find the one that's likely
74
+ # to actually work.
75
+ def find_likely_mapping(mapping, word)
76
+ min = 0
77
+ max = mapping.size
78
+
79
+ until max == min
80
+ mid = (max + min) / 2
81
+
82
+ cmp, _ = mapping[mid]
83
+
84
+ case word <=> cmp
85
+ when 1
86
+ # too low
87
+ min = mid + 1
88
+ when -1
89
+ # too high
90
+ max = mid
91
+ when 0
92
+ # just right, abort!
93
+ return mapping[mid]
94
+ end
95
+ end
96
+
97
+ mapping[max - 1]
98
+ end
99
+ end
100
+ end
101
+ end