rouge 3.3.0 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (216) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +15 -3
  3. data/lib/rouge.rb +49 -41
  4. data/lib/rouge/cli.rb +64 -15
  5. data/lib/rouge/demos/ada +26 -0
  6. data/lib/rouge/demos/armasm +12 -0
  7. data/lib/rouge/demos/batchfile +3 -0
  8. data/lib/rouge/demos/bbcbasic +6 -0
  9. data/lib/rouge/demos/bpf +7 -0
  10. data/lib/rouge/demos/brainfuck +5 -0
  11. data/lib/rouge/demos/cmhg +8 -0
  12. data/lib/rouge/demos/cuda +11 -0
  13. data/lib/rouge/demos/cython +6 -0
  14. data/lib/rouge/demos/epp +4 -0
  15. data/lib/rouge/demos/escape +3 -0
  16. data/lib/rouge/demos/gdscript +18 -0
  17. data/lib/rouge/demos/hocon +8 -0
  18. data/lib/rouge/demos/magik +6 -0
  19. data/lib/rouge/demos/mason +22 -0
  20. data/lib/rouge/demos/msgtrans +4 -0
  21. data/lib/rouge/demos/openedge +4 -0
  22. data/lib/rouge/demos/opentype_feature_file +6 -0
  23. data/lib/rouge/demos/plist +1 -132
  24. data/lib/rouge/demos/powershell +12 -48
  25. data/lib/rouge/demos/reasonml +12 -0
  26. data/lib/rouge/demos/sas +13 -0
  27. data/lib/rouge/demos/supercollider +11 -0
  28. data/lib/rouge/demos/xojo +14 -0
  29. data/lib/rouge/demos/xpath +2 -0
  30. data/lib/rouge/demos/xquery +22 -0
  31. data/lib/rouge/formatter.rb +37 -1
  32. data/lib/rouge/formatters/html.rb +20 -2
  33. data/lib/rouge/formatters/html_line_table.rb +53 -0
  34. data/lib/rouge/formatters/html_linewise.rb +6 -11
  35. data/lib/rouge/formatters/html_table.rb +20 -31
  36. data/lib/rouge/formatters/terminal256.rb +1 -0
  37. data/lib/rouge/formatters/tex.rb +92 -0
  38. data/lib/rouge/guessers/disambiguation.rb +25 -0
  39. data/lib/rouge/guessers/glob_mapping.rb +1 -1
  40. data/lib/rouge/guessers/modeline.rb +1 -1
  41. data/lib/rouge/guessers/source.rb +1 -1
  42. data/lib/rouge/lexer.rb +64 -14
  43. data/lib/rouge/lexers/abap.rb +11 -11
  44. data/lib/rouge/lexers/actionscript.rb +34 -34
  45. data/lib/rouge/lexers/ada.rb +162 -0
  46. data/lib/rouge/lexers/apache.rb +8 -8
  47. data/lib/rouge/lexers/apple_script.rb +15 -14
  48. data/lib/rouge/lexers/armasm.rb +145 -0
  49. data/lib/rouge/lexers/awk.rb +25 -25
  50. data/lib/rouge/lexers/batchfile.rb +164 -0
  51. data/lib/rouge/lexers/bbcbasic.rb +112 -0
  52. data/lib/rouge/lexers/biml.rb +4 -4
  53. data/lib/rouge/lexers/bpf.rb +104 -0
  54. data/lib/rouge/lexers/brainfuck.rb +53 -0
  55. data/lib/rouge/lexers/bsl.rb +12 -12
  56. data/lib/rouge/lexers/c.rb +34 -57
  57. data/lib/rouge/lexers/ceylon.rb +6 -34
  58. data/lib/rouge/lexers/cfscript.rb +26 -26
  59. data/lib/rouge/lexers/clojure.rb +14 -14
  60. data/lib/rouge/lexers/cmake.rb +14 -14
  61. data/lib/rouge/lexers/cmhg.rb +34 -0
  62. data/lib/rouge/lexers/coffeescript.rb +43 -35
  63. data/lib/rouge/lexers/common_lisp.rb +37 -37
  64. data/lib/rouge/lexers/conf.rb +6 -6
  65. data/lib/rouge/lexers/console.rb +3 -3
  66. data/lib/rouge/lexers/coq.rb +18 -18
  67. data/lib/rouge/lexers/cpp.rb +12 -9
  68. data/lib/rouge/lexers/crystal.rb +70 -70
  69. data/lib/rouge/lexers/csharp.rb +28 -29
  70. data/lib/rouge/lexers/css.rb +23 -23
  71. data/lib/rouge/lexers/cuda.rb +35 -0
  72. data/lib/rouge/lexers/cython.rb +151 -0
  73. data/lib/rouge/lexers/d.rb +59 -59
  74. data/lib/rouge/lexers/dart.rb +33 -33
  75. data/lib/rouge/lexers/diff.rb +8 -4
  76. data/lib/rouge/lexers/digdag.rb +1 -1
  77. data/lib/rouge/lexers/docker.rb +11 -11
  78. data/lib/rouge/lexers/dot.rb +16 -16
  79. data/lib/rouge/lexers/eiffel.rb +20 -20
  80. data/lib/rouge/lexers/elixir.rb +34 -30
  81. data/lib/rouge/lexers/elm.rb +29 -29
  82. data/lib/rouge/lexers/epp.rb +51 -0
  83. data/lib/rouge/lexers/erb.rb +4 -4
  84. data/lib/rouge/lexers/escape.rb +58 -0
  85. data/lib/rouge/lexers/factor.rb +40 -40
  86. data/lib/rouge/lexers/fortran.rb +32 -32
  87. data/lib/rouge/lexers/fsharp.rb +30 -30
  88. data/lib/rouge/lexers/gdscript.rb +171 -0
  89. data/lib/rouge/lexers/gherkin.rb +16 -14
  90. data/lib/rouge/lexers/glsl.rb +1 -5
  91. data/lib/rouge/lexers/go.rb +2 -2
  92. data/lib/rouge/lexers/graphql.rb +77 -60
  93. data/lib/rouge/lexers/groovy.rb +23 -25
  94. data/lib/rouge/lexers/hack.rb +1 -1
  95. data/lib/rouge/lexers/haml.rb +25 -29
  96. data/lib/rouge/lexers/handlebars.rb +31 -20
  97. data/lib/rouge/lexers/haskell.rb +66 -65
  98. data/lib/rouge/lexers/hcl.rb +25 -25
  99. data/lib/rouge/lexers/hocon.rb +86 -0
  100. data/lib/rouge/lexers/html.rb +32 -31
  101. data/lib/rouge/lexers/http.rb +4 -4
  102. data/lib/rouge/lexers/hylang.rb +14 -14
  103. data/lib/rouge/lexers/idlang.rb +32 -32
  104. data/lib/rouge/lexers/igorpro.rb +31 -31
  105. data/lib/rouge/lexers/ini.rb +12 -12
  106. data/lib/rouge/lexers/io.rb +7 -7
  107. data/lib/rouge/lexers/irb.rb +5 -5
  108. data/lib/rouge/lexers/java.rb +28 -24
  109. data/lib/rouge/lexers/javascript.rb +57 -61
  110. data/lib/rouge/lexers/jinja.rb +34 -20
  111. data/lib/rouge/lexers/json.rb +50 -11
  112. data/lib/rouge/lexers/json_doc.rb +2 -2
  113. data/lib/rouge/lexers/jsonnet.rb +18 -18
  114. data/lib/rouge/lexers/jsp.rb +30 -30
  115. data/lib/rouge/lexers/jsx.rb +16 -16
  116. data/lib/rouge/lexers/julia.rb +181 -58
  117. data/lib/rouge/lexers/kotlin.rb +14 -7
  118. data/lib/rouge/lexers/lasso.rb +50 -50
  119. data/lib/rouge/lexers/liquid.rb +76 -53
  120. data/lib/rouge/lexers/literate_coffeescript.rb +2 -2
  121. data/lib/rouge/lexers/literate_haskell.rb +5 -5
  122. data/lib/rouge/lexers/llvm.rb +23 -16
  123. data/lib/rouge/lexers/lua.rb +3 -3
  124. data/lib/rouge/lexers/m68k.rb +18 -19
  125. data/lib/rouge/lexers/magik.rb +127 -0
  126. data/lib/rouge/lexers/make.rb +56 -34
  127. data/lib/rouge/lexers/markdown.rb +55 -38
  128. data/lib/rouge/lexers/mason.rb +115 -0
  129. data/lib/rouge/lexers/mathematica.rb +11 -11
  130. data/lib/rouge/lexers/matlab.rb +23 -16
  131. data/lib/rouge/lexers/moonscript.rb +3 -3
  132. data/lib/rouge/lexers/mosel.rb +63 -63
  133. data/lib/rouge/lexers/msgtrans.rb +26 -0
  134. data/lib/rouge/lexers/mxml.rb +18 -18
  135. data/lib/rouge/lexers/nasm.rb +24 -25
  136. data/lib/rouge/lexers/nginx.rb +14 -14
  137. data/lib/rouge/lexers/nim.rb +3 -2
  138. data/lib/rouge/lexers/nix.rb +43 -43
  139. data/lib/rouge/lexers/objective_c.rb +43 -48
  140. data/lib/rouge/lexers/ocaml.rb +28 -64
  141. data/lib/rouge/lexers/ocaml/common.rb +53 -0
  142. data/lib/rouge/lexers/openedge.rb +429 -0
  143. data/lib/rouge/lexers/opentype_feature_file.rb +113 -0
  144. data/lib/rouge/lexers/pascal.rb +4 -4
  145. data/lib/rouge/lexers/perl.rb +98 -68
  146. data/lib/rouge/lexers/php.rb +66 -44
  147. data/lib/rouge/lexers/php/builtins.rb +181 -174
  148. data/lib/rouge/lexers/plain_text.rb +1 -1
  149. data/lib/rouge/lexers/plist.rb +14 -14
  150. data/lib/rouge/lexers/pony.rb +19 -19
  151. data/lib/rouge/lexers/powershell.rb +184 -638
  152. data/lib/rouge/lexers/praat.rb +75 -75
  153. data/lib/rouge/lexers/prolog.rb +26 -20
  154. data/lib/rouge/lexers/prometheus.rb +30 -30
  155. data/lib/rouge/lexers/properties.rb +12 -12
  156. data/lib/rouge/lexers/protobuf.rb +22 -22
  157. data/lib/rouge/lexers/puppet.rb +32 -32
  158. data/lib/rouge/lexers/python.rb +52 -52
  159. data/lib/rouge/lexers/q.rb +12 -12
  160. data/lib/rouge/lexers/qml.rb +12 -12
  161. data/lib/rouge/lexers/r.rb +12 -13
  162. data/lib/rouge/lexers/racket.rb +22 -22
  163. data/lib/rouge/lexers/reasonml.rb +65 -0
  164. data/lib/rouge/lexers/ruby.rb +72 -70
  165. data/lib/rouge/lexers/rust.rb +38 -35
  166. data/lib/rouge/lexers/sas.rb +563 -0
  167. data/lib/rouge/lexers/sass.rb +8 -8
  168. data/lib/rouge/lexers/sass/common.rb +40 -40
  169. data/lib/rouge/lexers/scala.rb +63 -37
  170. data/lib/rouge/lexers/scheme.rb +18 -18
  171. data/lib/rouge/lexers/scss.rb +3 -3
  172. data/lib/rouge/lexers/sed.rb +30 -30
  173. data/lib/rouge/lexers/shell.rb +62 -53
  174. data/lib/rouge/lexers/sieve.rb +8 -8
  175. data/lib/rouge/lexers/slim.rb +26 -26
  176. data/lib/rouge/lexers/smalltalk.rb +33 -33
  177. data/lib/rouge/lexers/smarty.rb +19 -19
  178. data/lib/rouge/lexers/sml.rb +67 -67
  179. data/lib/rouge/lexers/sqf.rb +1 -1
  180. data/lib/rouge/lexers/sql.rb +21 -21
  181. data/lib/rouge/lexers/supercollider.rb +116 -0
  182. data/lib/rouge/lexers/swift.rb +46 -43
  183. data/lib/rouge/lexers/tap.rb +20 -20
  184. data/lib/rouge/lexers/tcl.rb +27 -27
  185. data/lib/rouge/lexers/terraform.rb +13 -13
  186. data/lib/rouge/lexers/tex.rb +19 -19
  187. data/lib/rouge/lexers/toml.rb +19 -19
  188. data/lib/rouge/lexers/tulip.rb +36 -36
  189. data/lib/rouge/lexers/turtle.rb +35 -38
  190. data/lib/rouge/lexers/vala.rb +18 -18
  191. data/lib/rouge/lexers/vb.rb +27 -27
  192. data/lib/rouge/lexers/verilog.rb +25 -27
  193. data/lib/rouge/lexers/vhdl.rb +11 -11
  194. data/lib/rouge/lexers/viml.rb +14 -14
  195. data/lib/rouge/lexers/vue.rb +9 -9
  196. data/lib/rouge/lexers/wollok.rb +26 -26
  197. data/lib/rouge/lexers/xml.rb +17 -21
  198. data/lib/rouge/lexers/xojo.rb +61 -0
  199. data/lib/rouge/lexers/xpath.rb +332 -0
  200. data/lib/rouge/lexers/xquery.rb +145 -0
  201. data/lib/rouge/lexers/yaml.rb +63 -61
  202. data/lib/rouge/plugins/redcarpet.rb +1 -1
  203. data/lib/rouge/regex_lexer.rb +26 -25
  204. data/lib/rouge/tex_theme_renderer.rb +132 -0
  205. data/lib/rouge/theme.rb +4 -0
  206. data/lib/rouge/themes/bw.rb +41 -0
  207. data/lib/rouge/themes/magritte.rb +78 -0
  208. data/lib/rouge/themes/monokai_sublime.rb +2 -1
  209. data/lib/rouge/themes/pastie.rb +1 -1
  210. data/lib/rouge/themes/thankful_eyes.rb +1 -1
  211. data/lib/rouge/themes/tulip.rb +1 -1
  212. data/lib/rouge/token.rb +30 -22
  213. data/lib/rouge/util.rb +2 -2
  214. data/lib/rouge/version.rb +1 -1
  215. data/rouge.gemspec +4 -3
  216. metadata +61 -6
@@ -0,0 +1,115 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Mason < TemplateLexer
7
+ title 'Mason'
8
+ desc 'The HTML::Mason framework (https://metacpan.org/pod/HTML::Mason)'
9
+ tag 'mason'
10
+ filenames '*.mi', '*.mc', '*.mas', '*.m', '*.mhtml', '*.mcomp', 'autohandler', 'dhandler'
11
+ mimetypes 'text/x-mason', 'application/x-mason'
12
+
13
+ def initialize(*)
14
+ super
15
+ @perl = Perl.new
16
+ end
17
+
18
+ def self.detect?(text)
19
+ return false if text.doctype?(/((?:ht|x)ml)/)
20
+ return true if text.doctype?
21
+ end
22
+
23
+ # Note: If you add a tag in the lines below, you also need to modify "disambiguate '*.m'" in file disambiguation.rb
24
+ TEXT_BLOCKS = %w(text doc)
25
+ PERL_BLOCKS = %w(args flags attr init once shared perl cleanup filter)
26
+ COMPONENTS = %w(def method)
27
+
28
+ state :root do
29
+ mixin :mason_tags
30
+ end
31
+
32
+ state :mason_tags do
33
+ rule %r/\s+/, Text::Whitespace
34
+
35
+ rule %r/<%(#{TEXT_BLOCKS.join('|')})>/oi, Comment::Preproc, :text_block
36
+
37
+ rule %r/<%(#{PERL_BLOCKS.join('|')})>/oi, Comment::Preproc, :perl_block
38
+
39
+ rule %r/(<%(#{COMPONENTS.join('|')}))([^>]*)(>)/oi do |m|
40
+ token Comment::Preproc, m[1]
41
+ token Name, m[3]
42
+ token Comment::Preproc, m[4]
43
+ push :component_block
44
+ end
45
+
46
+ # perl line
47
+ rule %r/^(%)(.*)$/ do |m|
48
+ token Comment::Preproc, m[1]
49
+ delegate @perl, m[2]
50
+ end
51
+
52
+ # start of component call
53
+ rule %r/<%/, Comment::Preproc, :component_call
54
+
55
+ # start of component with content
56
+ rule %r/<&\|/ do
57
+ token Comment::Preproc
58
+ push :component_with_content
59
+ push :component_sub
60
+ end
61
+
62
+ # start of component substitution
63
+ rule %r/<&/, Comment::Preproc, :component_sub
64
+
65
+ # fallback to HTML until a mason tag is encountered
66
+ rule(/(.+?)(?=(<\/?&|<\/?%|^%|^#))/m) { delegate parent }
67
+
68
+ # if we get here, there's no more mason tags, so we parse the rest of the doc as HTML
69
+ rule(/.+/m) { delegate parent }
70
+ end
71
+
72
+ state :perl_block do
73
+ rule %r/<\/%(#{PERL_BLOCKS.join('|')})>/oi, Comment::Preproc, :pop!
74
+ rule %r/\s+/, Text::Whitespace
75
+ rule %r/^(#.*)$/, Comment
76
+ rule(/(.*?[^"])(?=<\/%)/m) { delegate @perl }
77
+ end
78
+
79
+ state :text_block do
80
+ rule %r/<\/%(#{TEXT_BLOCKS.join('|')})>/oi, Comment::Preproc, :pop!
81
+ rule %r/\s+/, Text::Whitespace
82
+ rule %r/^(#.*)$/, Comment
83
+ rule %r/(.*?[^"])(?=<\/%)/m, Comment
84
+ end
85
+
86
+ state :component_block do
87
+ rule %r/<\/%(#{COMPONENTS.join('|')})>/oi, Comment::Preproc, :pop!
88
+ rule %r/\s+/, Text::Whitespace
89
+ rule %r/^(#.*)$/, Comment
90
+ mixin :mason_tags
91
+ end
92
+
93
+ state :component_with_content do
94
+ rule %r/<\/&>/ do
95
+ token Comment::Preproc
96
+ pop!
97
+ end
98
+
99
+ mixin :mason_tags
100
+ end
101
+
102
+ state :component_sub do
103
+ rule %r/&>/, Comment::Preproc, :pop!
104
+
105
+ rule(/(.*?)(?=&>)/m) { delegate @perl }
106
+ end
107
+
108
+ state :component_call do
109
+ rule %r/%>/, Comment::Preproc, :pop!
110
+
111
+ rule(/(.*?)(?=%>)/m) { delegate @perl }
112
+ end
113
+ end
114
+ end
115
+ end
@@ -56,18 +56,18 @@ module Rouge
56
56
 
57
57
  # The list of built-in symbols comes from a wolfram server and is created automatically by rake
58
58
  def self.builtins
59
- load Pathname.new(__FILE__).dirname.join('mathematica/builtins.rb')
59
+ load File.join(__dir__, 'mathematica/builtins.rb')
60
60
  self.builtins
61
61
  end
62
62
 
63
63
  state :root do
64
- rule /\s+/, Text::Whitespace
65
- rule /\(\*/, Comment, :comment
66
- rule /#{base}\^\^#{number_base}#{precision}?(\*\^[+-]?\d+)?/, Num # a number with a base
67
- rule /(?:#{number}#{precision}?(?:\*\^[+-]?\d+)?)/, Num # all other numbers
64
+ rule %r/\s+/, Text::Whitespace
65
+ rule %r/\(\*/, Comment, :comment
66
+ rule %r/#{base}\^\^#{number_base}#{precision}?(\*\^[+-]?\d+)?/, Num # a number with a base
67
+ rule %r/(?:#{number}#{precision}?(?:\*\^[+-]?\d+)?)/, Num # all other numbers
68
68
  rule message, Name::Tag
69
69
  rule in_out, Generic::Prompt
70
- rule /#{context_symbol}/m do |m|
70
+ rule %r/#{context_symbol}/m do |m|
71
71
  match = m[0]
72
72
  if self.class.keywords.include? match
73
73
  token Name::Builtin::Pseudo
@@ -85,11 +85,11 @@ module Rouge
85
85
 
86
86
  # Allow for nested comments and special treatment of ::Section:: or :Author: markup
87
87
  state :comment do
88
- rule /\(\*/, Comment, :comment
89
- rule /\*\)/, Comment, :pop!
90
- rule /::#{identifier}::/, Comment::Preproc
91
- rule /[ ]:(#{identifier}|[^\S])+:[ ]/, Comment::Preproc
92
- rule /./, Comment
88
+ rule %r/\(\*/, Comment, :comment
89
+ rule %r/\*\)/, Comment, :pop!
90
+ rule %r/::#{identifier}::/, Comment::Preproc
91
+ rule %r/[ ]:(#{identifier}|[^\S])+:[ ]/, Comment::Preproc
92
+ rule %r/./, Comment
93
93
  end
94
94
  end
95
95
  end
@@ -19,25 +19,25 @@ module Rouge
19
19
  end
20
20
 
21
21
  def self.builtins
22
- load Pathname.new(__FILE__).dirname.join('matlab/builtins.rb')
22
+ load File.join(__dir__, 'matlab/builtins.rb')
23
23
  self.builtins
24
24
  end
25
25
 
26
26
  state :root do
27
- rule /\s+/m, Text # Whitespace
27
+ rule %r/\s+/m, Text # Whitespace
28
28
  rule %r([{]%.*?%[}])m, Comment::Multiline
29
- rule /%.*$/, Comment::Single
30
- rule /([.][.][.])(.*?)$/ do
29
+ rule %r/%.*$/, Comment::Single
30
+ rule %r/([.][.][.])(.*?)$/ do
31
31
  groups(Keyword, Comment)
32
32
  end
33
33
 
34
- rule /^(!)(.*?)(?=%|$)/ do |m|
34
+ rule %r/^(!)(.*?)(?=%|$)/ do |m|
35
35
  token Keyword, m[1]
36
36
  delegate Shell, m[2]
37
37
  end
38
38
 
39
39
 
40
- rule /[a-zA-Z][_a-zA-Z0-9]*/m do |m|
40
+ rule %r/[a-zA-Z][_a-zA-Z0-9]*/m do |m|
41
41
  match = m[0]
42
42
  if self.class.keywords.include? match
43
43
  token Keyword
@@ -50,22 +50,29 @@ module Rouge
50
50
 
51
51
  rule %r{[(){};:,\/\\\]\[]}, Punctuation
52
52
 
53
- rule /~=|==|<<|>>|[-~+\/*%=<>&^|.@]/, Operator
53
+ rule %r/~=|==|<<|>>|[-~+\/*%=<>&^|.@]/, Operator
54
54
 
55
55
 
56
- rule /(\d+\.\d*|\d*\.\d+)(e[+-]?[0-9]+)?/i, Num::Float
57
- rule /\d+e[+-]?[0-9]+/i, Num::Float
58
- rule /\d+L/, Num::Integer::Long
59
- rule /\d+/, Num::Integer
56
+ rule %r/(\d+\.\d*|\d*\.\d+)(e[+-]?[0-9]+)?/i, Num::Float
57
+ rule %r/\d+e[+-]?[0-9]+/i, Num::Float
58
+ rule %r/\d+L/, Num::Integer::Long
59
+ rule %r/\d+/, Num::Integer
60
60
 
61
- rule /'(?=(.*'))/, Str::Single, :string
62
- rule /'/, Operator
61
+ rule %r/'(?=(.*'))/, Str::Single, :chararray
62
+ rule %r/"(?=(.*"))/, Str::Double, :string
63
+ rule %r/'/, Operator
64
+ end
65
+
66
+ state :chararray do
67
+ rule %r/[^']+/, Str::Single
68
+ rule %r/''/, Str::Escape
69
+ rule %r/'/, Str::Single, :pop!
63
70
  end
64
71
 
65
72
  state :string do
66
- rule /[^']+/, Str::Single
67
- rule /''/, Str::Escape
68
- rule /'/, Str::Single, :pop!
73
+ rule %r/[^"]+/, Str::Double
74
+ rule %r/""/, Str::Escape
75
+ rule %r/"/, Str::Double, :pop!
69
76
  end
70
77
  end
71
78
  end
@@ -40,18 +40,18 @@ module Rouge
40
40
 
41
41
  state :root do
42
42
  rule %r(#!(.*?)$), Comment::Preproc # shebang
43
- rule //, Text, :main
43
+ rule %r//, Text, :main
44
44
  end
45
45
 
46
46
  state :base do
47
- ident = '(?:[\w_][\w\d_]*)'
47
+ ident = '(?:\w\w*)'
48
48
 
49
49
  rule %r((?i)(\d*\.\d+|\d+\.\d*)(e[+-]?\d+)?'), Num::Float
50
50
  rule %r((?i)\d+e[+-]?\d+), Num::Float
51
51
  rule %r((?i)0x[0-9a-f]*), Num::Hex
52
52
  rule %r(\d+), Num::Integer
53
53
  rule %r(@#{ident}*), Name::Variable::Instance
54
- rule %r([A-Z][\w\d_]*), Name::Class
54
+ rule %r([A-Z]\w*), Name::Class
55
55
  rule %r("?[^"]+":), Literal::String::Symbol
56
56
  rule %r(#{ident}:), Literal::String::Symbol
57
57
  rule %r(:#{ident}), Literal::String::Symbol
@@ -7,7 +7,7 @@ module Rouge
7
7
  tag 'mosel'
8
8
  filenames '*.mos'
9
9
  title "Mosel"
10
- desc "An optimization language used by Fico's Xpress."
10
+ desc "An optimization language used by Fico's Xpress."
11
11
  # http://www.fico.com/en/products/fico-xpress-optimization-suite
12
12
  filenames '*.mos'
13
13
 
@@ -24,46 +24,46 @@ module Rouge
24
24
  ############################################################################################################################
25
25
 
26
26
  core_keywords = %w(
27
- and array as
28
- boolean break
29
- case count counter
30
- declarations div do dynamic
31
- elif else end evaluation exit
32
- false forall forward from function
33
- if imports in include initialisations initializations integer inter is_binary is_continuous is_free is_integer is_partint is_semcont is_semint is_sos1 is_sos2
34
- linctr list
27
+ and array as
28
+ boolean break
29
+ case count counter
30
+ declarations div do dynamic
31
+ elif else end evaluation exit
32
+ false forall forward from function
33
+ if imports in include initialisations initializations integer inter is_binary is_continuous is_free is_integer is_partint is_semcont is_semint is_sos1 is_sos2
34
+ linctr list
35
35
  max min mod model mpvar
36
36
  next not of options or
37
- package parameters procedure
38
- public prod range real record repeat requirements
37
+ package parameters procedure
38
+ public prod range real record repeat requirements
39
39
  set string sum
40
40
  then to true
41
41
  union until uses
42
42
  version
43
43
  while with
44
44
  )
45
-
45
+
46
46
  core_functions = %w(
47
47
  abs arctan assert
48
48
  bitflip bitneg bitset bitshift bittest bitval
49
49
  ceil cos create currentdate currenttime cuthead cuttail
50
50
  delcell exists exit exp exportprob
51
- fclose fflush finalize findfirst findlast floor fopen fselect fskipline
51
+ fclose fflush finalize findfirst findlast floor fopen fselect fskipline
52
52
  getact getcoeff getcoeffs getdual getfid getfirst gethead getfname getlast getobjval getparam getrcost getreadcnt getreverse getsize getslack getsol gettail gettype getvars
53
- iseof ishidden isodd ln log
54
- makesos1 makesos2 maxlist minlist
55
- publish
53
+ iseof ishidden isodd ln log
54
+ makesos1 makesos2 maxlist minlist
55
+ publish
56
56
  random read readln reset reverse round
57
- setcoeff sethidden setioerr setname setparam setrandseed settype sin splithead splittail sqrt strfmt substr
58
- timestamp
59
- unpublish
57
+ setcoeff sethidden setioerr setname setparam setrandseed settype sin splithead splittail sqrt strfmt substr
58
+ timestamp
59
+ unpublish
60
60
  write writeln
61
61
  )
62
-
62
+
63
63
  ############################################################################################################################
64
64
  # mmxprs module elements
65
65
  ############################################################################################################################
66
-
66
+
67
67
  mmxprs_functions = %w(
68
68
  addmipsol
69
69
  basisstability
@@ -79,26 +79,26 @@ module Rouge
79
79
  readbasis readdirs readsol refinemipsol rejectintsol repairinfeas resetbasis resetiis resetsol
80
80
  savebasis savemipsol savesol savestate selectsol setbstat setcallback setcbcutoff setgndata setlb setmipdir setmodcut setsol setub setucbdata stopoptimize
81
81
  unloadprob
82
- writebasis writedirs writeprob writesol
82
+ writebasis writedirs writeprob writesol
83
83
  xor
84
84
  )
85
-
85
+
86
86
  mmxpres_constants = %w(XPRS_OPT XPRS_UNF XPRS_INF XPRS_UNB XPRS_OTH)
87
-
87
+
88
88
  mmxprs_parameters = %w(XPRS_colorder XPRS_enumduplpol XPRS_enummaxsol XPRS_enumsols XPRS_fullversion XPRS_loadnames XPRS_problem XPRS_probname XPRS_verbose)
89
-
90
-
89
+
90
+
91
91
  ############################################################################################################################
92
92
  # mmsystem module elements
93
93
  ############################################################################################################################
94
-
94
+
95
95
  mmsystem_functions = %w(
96
96
  addmonths
97
97
  copytext cuttext
98
- deltext
98
+ deltext
99
99
  endswith expandpath
100
100
  fcopy fdelete findfiles findtext fmove
101
- getasnumber getchar getcwd getdate getday getdaynum getdays getdirsep
101
+ getasnumber getchar getcwd getdate getday getdaynum getdays getdirsep
102
102
  getendparse setendparse
103
103
  getenv getfsize getfstat getftime gethour getminute getmonth getmsec getpathsep
104
104
  getqtype setqtype
@@ -108,29 +108,29 @@ module Rouge
108
108
  getstart setstart
109
109
  getsucc setsucc
110
110
  getsysinfo getsysstat gettime
111
- gettmpdir
111
+ gettmpdir
112
112
  gettrim settrim
113
113
  getweekday getyear
114
114
  inserttext isvalid
115
115
  makedir makepath newtar
116
116
  newzip nextfield
117
- openpipe
117
+ openpipe
118
118
  parseextn parseint parsereal parsetext pastetext pathmatch pathsplit
119
119
  qsort quote
120
- readtextline regmatch regreplace removedir removefiles
120
+ readtextline regmatch regreplace removedir removefiles
121
121
  setchar setdate setday setenv sethour
122
122
  setminute setmonth setmsec setsecond settime setyear sleep startswith system
123
123
  tarlist textfmt tolower toupper trim
124
124
  untar unzip
125
125
  ziplist
126
126
  )
127
-
127
+
128
128
  mmsystem_parameters = %w(datefmt datetimefmt monthnames sys_endparse sys_fillchar sys_pid sys_qtype sys_regcache sys_sepchar)
129
129
 
130
130
  ############################################################################################################################
131
131
  # mmjobs module elements
132
132
  ############################################################################################################################
133
-
133
+
134
134
  mmjobs_instance_mgmt_functions = %w(
135
135
  clearaliases connect
136
136
  disconnect
@@ -138,7 +138,7 @@ module Rouge
138
138
  getaliases getbanner gethostalias
139
139
  sethostalias
140
140
  )
141
-
141
+
142
142
  mmjobs_model_mgmt_functions = %w(
143
143
  compile
144
144
  detach
@@ -148,7 +148,7 @@ module Rouge
148
148
  setcontrol setdefstream setmodpar setworkdir stop
149
149
  unload
150
150
  )
151
-
151
+
152
152
  mmjobs_synchornization_functions = %w(
153
153
  dropnextevent
154
154
  getclass getfromgid getfromid getfromuid getnextevent getvalue
@@ -158,15 +158,15 @@ module Rouge
158
158
  send setgid setuid
159
159
  wait waitfor
160
160
  )
161
-
161
+
162
162
  mmjobs_functions = mmjobs_instance_mgmt_functions + mmjobs_model_mgmt_functions + mmjobs_synchornization_functions
163
-
163
+
164
164
  mmjobs_parameters = %w(conntmpl defaultnode fsrvdelay fsrvnbiter fsrvport jobid keepalive nodenumber parentnumber)
165
165
 
166
166
 
167
167
  state :whitespace do
168
168
  # Spaces
169
- rule /\s+/m, Text
169
+ rule %r/\s+/m, Text
170
170
  # ! Comments
171
171
  rule %r((!).*$\n?), Comment::Single
172
172
  # (! Comments !)
@@ -182,14 +182,14 @@ module Rouge
182
182
  # The escape sequences are not interpreted if they are contained in strings that are enclosed in single quotes.
183
183
 
184
184
  state :single_quotes do
185
- rule /'/, Str::Single, :pop!
186
- rule /[^']+/, Str::Single
185
+ rule %r/'/, Str::Single, :pop!
186
+ rule %r/[^']+/, Str::Single
187
187
  end
188
188
 
189
189
  state :double_quotes do
190
- rule /"/, Str::Double, :pop!
191
- rule /(\\"|\\[0-7]{1,3}\D|\\[abfnrtv]|\\\\)/, Str::Escape
192
- rule /[^"]/, Str::Double
190
+ rule %r/"/, Str::Double, :pop!
191
+ rule %r/(\\"|\\[0-7]{1,3}\D|\\[abfnrtv]|\\\\)/, Str::Escape
192
+ rule %r/[^"]/, Str::Double
193
193
  end
194
194
 
195
195
  state :base do
@@ -200,25 +200,25 @@ module Rouge
200
200
  rule %r{((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?}, Num
201
201
  rule %r{[~!@#\$%\^&\*\(\)\+`\-={}\[\]:;<>\?,\.\/\|\\]}, Punctuation
202
202
  # rule %r{'([^']|'')*'}, Str
203
- # rule /"(\\\\|\\"|[^"])*"/, Str
204
-
205
-
206
-
207
- rule /(true|false)\b/i, Name::Builtin
208
- rule /\b(#{core_keywords.join('|')})\b/i, Keyword
209
- rule /\b(#{core_functions.join('|')})\b/, Name::Builtin
210
-
211
-
212
-
213
- rule /\b(#{mmxprs_functions.join('|')})\b/, Name::Function
214
- rule /\b(#{mmxpres_constants.join('|')})\b/, Name::Constant
215
- rule /\b(#{mmxprs_parameters.join('|')})\b/i, Name::Property
216
-
217
- rule /\b(#{mmsystem_functions.join('|')})\b/i, Name::Function
218
- rule /\b(#{mmsystem_parameters.join('|')})\b/, Name::Property
219
-
220
- rule /\b(#{mmjobs_functions.join('|')})\b/i, Name::Function
221
- rule /\b(#{mmjobs_parameters.join('|')})\b/, Name::Property
203
+ # rule %r/"(\\\\|\\"|[^"])*"/, Str
204
+
205
+
206
+
207
+ rule %r/(true|false)\b/i, Name::Builtin
208
+ rule %r/\b(#{core_keywords.join('|')})\b/i, Keyword
209
+ rule %r/\b(#{core_functions.join('|')})\b/, Name::Builtin
210
+
211
+
212
+
213
+ rule %r/\b(#{mmxprs_functions.join('|')})\b/, Name::Function
214
+ rule %r/\b(#{mmxpres_constants.join('|')})\b/, Name::Constant
215
+ rule %r/\b(#{mmxprs_parameters.join('|')})\b/i, Name::Property
216
+
217
+ rule %r/\b(#{mmsystem_functions.join('|')})\b/i, Name::Function
218
+ rule %r/\b(#{mmsystem_parameters.join('|')})\b/, Name::Property
219
+
220
+ rule %r/\b(#{mmjobs_functions.join('|')})\b/i, Name::Function
221
+ rule %r/\b(#{mmjobs_parameters.join('|')})\b/, Name::Property
222
222
 
223
223
  rule id, Name
224
224
  end