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
@@ -21,6 +21,8 @@ module Rouge
21
21
  | NaN | NaN16 | NaN32 | NaN64
22
22
  | stdout | stderr | stdin | devnull
23
23
  | pi | π | ℯ | im
24
+ | ARGS | C_NULL | ENV | ENDIAN_BOM
25
+ | VERSION | undef | (LOAD|DEPOT)_PATH
24
26
  )\b/x
25
27
 
26
28
  KEYWORDS = /\b(?:
@@ -30,21 +32,137 @@ module Rouge
30
32
  | const | local | global | using | struct
31
33
  | mutable struct | abstract type | finally
32
34
  | begin | do | quote | macro | for outer
35
+ | where
33
36
  )\b/x
34
37
 
38
+ # NOTE: The list of types was generated automatically using the following script:
39
+ # using Pkg, InteractiveUtils
40
+ #
41
+ # allnames = [names(Core); names(Base, imported=true)]
42
+ #
43
+ # for stdlib in readdir(Pkg.Types.stdlib_dir())
44
+ # mod = Symbol(basename(stdlib))
45
+ # @eval begin
46
+ # using $mod
47
+ # append!(allnames, names($mod))
48
+ # end
49
+ # end
50
+ #
51
+ # sort!(unique!(allnames))
52
+ #
53
+ # i = 1
54
+ # for sym in allnames
55
+ # global i # needed at the top level, e.g. in the REPL
56
+ # isdefined(Main, sym) || continue
57
+ # getfield(which(Main, sym), sym) isa Type || continue
58
+ # sym === :(=>) && continue # Actually an alias for Pair
59
+ # print("| ", sym)
60
+ # i % 3 == 0 ? println() : print(" ") # print 3 to a line
61
+ # i += 1
62
+ # end
35
63
  TYPES = /\b(?:
36
- Int | UInt | Int8
37
- | UInt8 | Int16 | UInt16
38
- | Int32 | UInt32 | Int64
39
- | UInt64 | Int128 | UInt128
40
- | Float16 | Float32 | Float64
41
- | Bool | BigInt | BigFloat
42
- | Complex | ComplexF16 | ComplexF32
43
- | ComplexF64 | Missing | Nothing
44
- | Char | String | SubString
45
- | Regex | RegexMatch | Any
46
- | Type | DataType | UnionAll
47
- | (Abstract)?(Array|Vector|Matrix|VecOrMat)
64
+ ARPACKException | AbstractArray | AbstractChannel
65
+ | AbstractChar | AbstractDict | AbstractDisplay
66
+ | AbstractFloat | AbstractIrrational | AbstractLogger
67
+ | AbstractMatrix | AbstractREPL | AbstractRNG
68
+ | AbstractRange | AbstractSerializer | AbstractSet
69
+ | AbstractSparseArray | AbstractSparseMatrix | AbstractSparseVector
70
+ | AbstractString | AbstractUnitRange | AbstractVecOrMat
71
+ | AbstractVector | AbstractWorkerPool | Adjoint
72
+ | Any | ArgumentError | Array
73
+ | AssertionError | Base64DecodePipe | Base64EncodePipe
74
+ | BasicREPL | Bidiagonal | BigFloat
75
+ | BigInt | BitArray | BitMatrix
76
+ | BitSet | BitVector | Bool
77
+ | BoundsError | BunchKaufman | CachingPool
78
+ | CapturedException | CartesianIndex | CartesianIndices
79
+ | Cchar | Cdouble | Cfloat
80
+ | Channel | Char | Cholesky
81
+ | CholeskyPivoted | Cint | Cintmax_t
82
+ | Clong | Clonglong | ClusterManager
83
+ | Cmd | Colon | Complex
84
+ | ComplexF16 | ComplexF32 | ComplexF64
85
+ | CompositeException | Condition | ConsoleLogger
86
+ | Cptrdiff_t | Cshort | Csize_t
87
+ | Cssize_t | Cstring | Cuchar
88
+ | Cuint | Cuintmax_t | Culong
89
+ | Culonglong | Cushort | Cvoid
90
+ | Cwchar_t | Cwstring | DataType
91
+ | Date | DateFormat | DatePeriod
92
+ | DateTime | Day | DenseArray
93
+ | DenseMatrix | DenseVecOrMat | DenseVector
94
+ | Diagonal | Dict | DimensionMismatch
95
+ | Dims | DivideError | DomainError
96
+ | EOFError | Eigen | Enum
97
+ | ErrorException | Exception | ExponentialBackOff
98
+ | Expr | FDWatcher | Factorization
99
+ | FileMonitor | Float16 | Float32
100
+ | Float64 | FolderMonitor | Function
101
+ | GeneralizedEigen | GeneralizedSVD | GeneralizedSchur
102
+ | GenericArray | GenericDict | GenericSet
103
+ | GenericString | GitConfig | GitRepo
104
+ | GlobalRef | HMAC_CTX | HTML
105
+ | Hermitian | Hessenberg | Hour
106
+ | IO | IOBuffer | IOContext
107
+ | IOStream | IPAddr | IPv4
108
+ | IPv6 | IdDict | IndexCartesian
109
+ | IndexLinear | IndexStyle | InexactError
110
+ | InitError | Int | Int128
111
+ | Int16 | Int32 | Int64
112
+ | Int8 | Integer | InterruptException
113
+ | InvalidStateException | Irrational | KeyError
114
+ | LAPACKException | LDLt | LQ
115
+ | LU | LinRange | LineEditREPL
116
+ | LineNumberNode | LinearIndices | LoadError
117
+ | LogLevel | LowerTriangular | MIME
118
+ | Matrix | MersenneTwister | Method
119
+ | MethodError | Microsecond | Millisecond
120
+ | Minute | Missing | MissingException
121
+ | Module | Month | NTuple
122
+ | NamedTuple | Nanosecond | Nothing
123
+ | NullLogger | Number | OrdinalRange
124
+ | OutOfMemoryError | OverflowError | PackageMode
125
+ | PackageSpec | Pair | PartialQuickSort
126
+ | Period | PermutedDimsArray | Pipe
127
+ | PollingFileWatcher | PosDefException | ProcessExitedException
128
+ | Ptr | QR | QRPivoted
129
+ | QuoteNode | RandomDevice | RankDeficientException
130
+ | Rational | RawFD | ReadOnlyMemoryError
131
+ | Real | ReentrantLock | Ref
132
+ | Regex | RegexMatch | RemoteChannel
133
+ | RemoteException | RoundingMode | SHA1_CTX
134
+ | SHA224_CTX | SHA256_CTX | SHA2_224_CTX
135
+ | SHA2_256_CTX | SHA2_384_CTX | SHA2_512_CTX
136
+ | SHA384_CTX | SHA3_224_CTX | SHA3_256_CTX
137
+ | SHA3_384_CTX | SHA3_512_CTX | SHA512_CTX
138
+ | SVD | Schur | Second
139
+ | SegmentationFault | Serializer | Set
140
+ | SharedArray | SharedMatrix | SharedVector
141
+ | Signed | SimpleLogger | SingularException
142
+ | Some | SparseMatrixCSC | SparseVector
143
+ | StackOverflowError | StepRange | StepRangeLen
144
+ | StreamREPL | StridedArray | StridedMatrix
145
+ | StridedVecOrMat | StridedVector | String
146
+ | StringIndexError | SubArray | SubString
147
+ | SubstitutionString | SymTridiagonal | Symbol
148
+ | Symmetric | SystemError | TCPSocket
149
+ | Task | TestSetException | Text
150
+ | TextDisplay | Time | TimePeriod
151
+ | TimeType | TimeZone | Timer
152
+ | Transpose | Tridiagonal | Tuple
153
+ | Type | TypeError | TypeVar
154
+ | UDPSocket | UInt | UInt128
155
+ | UInt16 | UInt32 | UInt64
156
+ | UInt8 | UTC | UUID
157
+ | UndefInitializer | UndefKeywordError | UndefRefError
158
+ | UndefVarError | UniformScaling | Union
159
+ | UnionAll | UnitLowerTriangular | UnitRange
160
+ | UnitUpperTriangular | Unsigned | UpgradeLevel
161
+ | UpperTriangular | Val | Vararg
162
+ | VecElement | VecOrMat | Vector
163
+ | VersionNumber | WeakKeyDict | WeakRef
164
+ | Week | WorkerConfig | WorkerPool
165
+ | Year
48
166
  )\b/x
49
167
 
50
168
  OPERATORS = / \+ | = | - | \* | \/
@@ -58,109 +176,114 @@ module Rouge
58
176
  | :: | <: | -> | \? | \.\*
59
177
  | \.\^ | \.\\ | \.\/ | \\ | <
60
178
  | > | ÷ | >: | : | ===
61
- | !==
179
+ | !== | =>
62
180
  /x
63
181
 
64
- PUNCTUATION = / [ \[ \] { } \( \) , ; @ ] /x
182
+ PUNCTUATION = /[\[\]{}\(\),;]/
65
183
 
66
184
 
67
185
  state :root do
68
- rule /\n/, Text
69
- rule /[^\S\n]+/, Text
70
- rule /#=/, Comment::Multiline, :blockcomment
71
- rule /#.*$/, Comment
186
+ rule %r/\n/, Text
187
+ rule %r/[^\S\n]+/, Text
188
+ rule %r/#=/, Comment::Multiline, :blockcomment
189
+ rule %r/#.*$/, Comment
72
190
  rule OPERATORS, Operator
73
- rule /\\\n/, Text
74
- rule /\\/, Text
191
+ rule %r/\\\n/, Text
192
+ rule %r/\\/, Text
75
193
 
76
194
 
77
- # functions
78
- rule /(function)((?:\s|\\\s)+)/ do
195
+ # functions and macros
196
+ rule %r/(function|macro)((?:\s|\\\s)+)/ do
79
197
  groups Keyword, Name::Function
80
198
  push :funcname
81
199
  end
82
200
 
83
201
  # types
84
- rule /(type|typealias|abstract)((?:\s|\\\s)+)/ do
202
+ rule %r/((?:mutable )?struct|(?:abstract|primitive) type)((?:\s|\\\s)+)/ do
85
203
  groups Keyword, Name::Class
86
204
  push :typename
87
205
  end
88
206
  rule TYPES, Keyword::Type
89
207
 
90
208
  # keywords
91
- rule /(local|global|const)\b/, Keyword::Declaration
209
+ rule %r/(local|global|const)\b/, Keyword::Declaration
92
210
  rule KEYWORDS, Keyword
93
211
 
212
+ # TODO: end is a builtin when inside of an indexing expression
94
213
  rule BUILTINS, Name::Builtin
95
214
 
215
+ # TODO: symbols
216
+
96
217
  # backticks
97
- rule /`.*?`/, Literal::String::Backtick
218
+ rule %r/`.*?`/, Literal::String::Backtick
98
219
 
99
220
  # chars
100
- rule /'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,3}|\\u[a-fA-F0-9]{1,4}|\\U[a-fA-F0-9]{1,6}|[^\\\'\n])'/, Literal::String::Char
221
+ rule %r/'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,3}|\\u[a-fA-F0-9]{1,4}|\\U[a-fA-F0-9]{1,6}|[^\\\'\n])'/, Literal::String::Char
101
222
 
102
223
  # try to match trailing transpose
103
- rule /(?<=[.\w)\]])\'+/, Operator
224
+ rule %r/(?<=[.\w)\]])\'+/, Operator
104
225
 
105
226
  # strings
106
- rule /(?:[IL])"/, Literal::String, :string
107
- rule /[E]?"/, Literal::String, :string
227
+ # TODO: triple quoted string literals
228
+ # TODO: Detect string interpolation
229
+ rule %r/(?:[IL])"/, Literal::String, :string
230
+ rule %r/[E]?"/, Literal::String, :string
108
231
 
109
232
  # names
110
- rule /@[\w.]+/, Name::Decorator
111
- rule /(?:[a-zA-Z_\u00A1-\uffff]|[\u1000-\u10ff])(?:[a-zA-Z_0-9\u00A1-\uffff]|[\u1000-\u10ff])*!*/, Name
233
+ rule %r/@[\w.]+/, Name::Decorator
234
+ rule %r/(?:[a-zA-Z_\u00A1-\uffff]|[\u1000-\u10ff])(?:[a-zA-Z_0-9\u00A1-\uffff]|[\u1000-\u10ff])*!*/, Name
112
235
 
113
236
  rule PUNCTUATION, Other
114
237
 
115
238
  # numbers
116
- rule /(\d+(_\d+)+\.\d*|\d*\.\d+(_\d+)+)([eEf][+-]?[0-9]+)?/, Literal::Number::Float
117
- rule /(\d+\.\d*|\d*\.\d+)([eEf][+-]?[0-9]+)?/, Literal::Number::Float
118
- rule /\d+(_\d+)+[eEf][+-]?[0-9]+/, Literal::Number::Float
119
- rule /\d+[eEf][+-]?[0-9]+/, Literal::Number::Float
120
- rule /0b[01]+(_[01]+)+/, Literal::Number::Bin
121
- rule /0b[01]+/, Literal::Number::Bin
122
- rule /0o[0-7]+(_[0-7]+)+/, Literal::Number::Oct
123
- rule /0o[0-7]+/, Literal::Number::Oct
124
- rule /0x[a-fA-F0-9]+(_[a-fA-F0-9]+)+/, Literal::Number::Hex
125
- rule /0x[a-fA-F0-9]+/, Literal::Number::Hex
126
- rule /\d+(_\d+)+/, Literal::Number::Integer
127
- rule /\d+/, Literal::Number::Integer
239
+ rule %r/(\d+(_\d+)+\.\d*|\d*\.\d+(_\d+)+)([eEf][+-]?[0-9]+)?/, Literal::Number::Float
240
+ rule %r/(\d+\.\d*|\d*\.\d+)([eEf][+-]?[0-9]+)?/, Literal::Number::Float
241
+ rule %r/\d+(_\d+)+[eEf][+-]?[0-9]+/, Literal::Number::Float
242
+ rule %r/\d+[eEf][+-]?[0-9]+/, Literal::Number::Float
243
+ rule %r/0b[01]+(_[01]+)+/, Literal::Number::Bin
244
+ rule %r/0b[01]+/, Literal::Number::Bin
245
+ rule %r/0o[0-7]+(_[0-7]+)+/, Literal::Number::Oct
246
+ rule %r/0o[0-7]+/, Literal::Number::Oct
247
+ rule %r/0x[a-fA-F0-9]+(_[a-fA-F0-9]+)+/, Literal::Number::Hex
248
+ rule %r/0x[a-fA-F0-9]+/, Literal::Number::Hex
249
+ rule %r/\d+(_\d+)+/, Literal::Number::Integer
250
+ rule %r/\d+/, Literal::Number::Integer
128
251
  end
129
252
 
130
253
 
131
254
  state :funcname do
132
- rule /[a-zA-Z_]\w*/, Name::Function, :pop!
133
- rule /\([^\s\w{]{1,2}\)/, Operator, :pop!
134
- rule /[^\s\w{]{1,2}/, Operator, :pop!
255
+ rule %r/[a-zA-Z_]\w*/, Name::Function, :pop!
256
+ rule %r/\([^\s\w{]{1,2}\)/, Operator, :pop!
257
+ rule %r/[^\s\w{]{1,2}/, Operator, :pop!
135
258
  end
136
259
 
137
260
  state :typename do
138
- rule /[a-zA-Z_]\w*/, Name::Class, :pop!
261
+ rule %r/[a-zA-Z_]\w*/, Name::Class, :pop!
139
262
  end
140
263
 
141
264
  state :stringescape do
142
- rule /\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})/,
265
+ rule %r/\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})/,
143
266
  Literal::String::Escape
144
267
  end
145
268
 
146
269
  state :blockcomment do
147
- rule /[^=#]/, Comment::Multiline
148
- rule /#=/, Comment::Multiline, :blockcomment
149
- rule /\=#/, Comment::Multiline, :pop!
150
- rule /[=#]/, Comment::Multiline
270
+ rule %r/[^=#]/, Comment::Multiline
271
+ rule %r/#=/, Comment::Multiline, :blockcomment
272
+ rule %r/\=#/, Comment::Multiline, :pop!
273
+ rule %r/[=#]/, Comment::Multiline
151
274
  end
152
275
 
153
276
  state :string do
154
277
  mixin :stringescape
155
278
 
156
- rule /"/, Literal::String, :pop!
157
- rule /\\\\|\\"|\\\n/, Literal::String::Escape # included here for raw strings
158
- rule /\$(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?/, Literal::String::Interpol
159
- rule /[^\\"$]+/, Literal::String
279
+ rule %r/"/, Literal::String, :pop!
280
+ rule %r/\\\\|\\"|\\\n/, Literal::String::Escape # included here for raw strings
281
+ rule %r/\$(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?/, Literal::String::Interpol
282
+ rule %r/[^\\"$]+/, Literal::String
160
283
  # quotes, dollar signs, and backslashes must be parsed one at a time
161
- rule /["\\]/, Literal::String
284
+ rule %r/["\\]/, Literal::String
162
285
  # unhandled string formatting sign
163
- rule /\$/, Literal::String
286
+ rule %r/\$/, Literal::String
164
287
  end
165
288
  end
166
289
  end
@@ -19,9 +19,9 @@ module Rouge
19
19
  external false final finally for fun get if import in infix
20
20
  inline inner interface internal is lateinit noinline null
21
21
  object open operator out override package private protected
22
- public reified return sealed set super tailrec this throw
23
- true try typealias typeof val var vararg when where while
24
- yield
22
+ public reified return sealed set super suspend tailrec this
23
+ throw true try typealias typeof val var vararg when where
24
+ while yield
25
25
  )
26
26
 
27
27
  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}]*'
@@ -68,12 +68,13 @@ module Rouge
68
68
  push :property
69
69
  end
70
70
  rule %r/\bfun\b/, Keyword
71
- rule /\b(?:#{keywords.join('|')})\b/, Keyword
71
+ rule %r/\b(?:#{keywords.join('|')})\b/, Keyword
72
72
  rule %r'^\s*\[.*?\]', Name::Attribute
73
73
  rule %r'[^\S\n]+', Text
74
74
  rule %r'\\\n', Text # line continuation
75
75
  rule %r'//.*?$', Comment::Single
76
- rule %r'/[*].*?[*]/'m, Comment::Multiline
76
+ rule %r'/[*].*[*]/', Comment::Multiline # single line block comment
77
+ rule %r'/[*].*', Comment::Multiline, :comment # multiline block comment
77
78
  rule %r'\n', Text
78
79
  rule %r'::|!!|\?[:.]', Operator
79
80
  rule %r"(\.\.)", Operator
@@ -84,12 +85,12 @@ module Rouge
84
85
  rule %r'"(\\\\|\\"|[^"\n])*["\n]'m, Str
85
86
  rule %r"'\\.'|'[^\\]'", Str::Char
86
87
  rule %r"[0-9](\.[0-9]+)?([eE][+-][0-9]+)?[flFL]?|0[xX][0-9a-fA-F]+[Ll]?", Num
87
- rule /@#{id}/, Name::Decorator
88
+ rule %r/@#{id}/, Name::Decorator
88
89
  rule id, Name
89
90
  end
90
91
 
91
92
  state :package do
92
- rule /\S+/, Name::Namespace, :pop!
93
+ rule %r/\S+/, Name::Namespace, :pop!
93
94
  end
94
95
 
95
96
  state :class do
@@ -122,6 +123,12 @@ module Rouge
122
123
  rule %r'(\s+)', Text
123
124
  rule id, Name::Property
124
125
  end
126
+
127
+ state :comment do
128
+ rule %r'\s*/[*].*', Comment::Multiline, :comment
129
+ rule %r'.*[*]/', Comment::Multiline, :pop!
130
+ rule %r'.*', Comment::Multiline
131
+ end
125
132
  end
126
133
  end
127
134
  end
@@ -39,7 +39,7 @@ module Rouge
39
39
  end
40
40
 
41
41
  # Load Lasso keywords from separate YML file
42
- @keywords = ::YAML.load_file(Pathname.new(__FILE__).dirname.join('lasso/keywords.yml')).tap do |h|
42
+ @keywords = ::YAML.load_file(File.join(__dir__, 'lasso/keywords.yml')).tap do |h|
43
43
  h.each do |k,v|
44
44
  h[k] = Set.new v
45
45
  end
@@ -48,23 +48,23 @@ module Rouge
48
48
  id = /[a-z_][\w.]*/i
49
49
 
50
50
  state :root do
51
- rule /^#![ \S]+lasso9\b/, Comment::Preproc, :lasso
51
+ rule %r/^#![ \S]+lasso9\b/, Comment::Preproc, :lasso
52
52
  rule(/(?=\[|<)/) { push :delimiters }
53
- rule /\s+/, Text::Whitespace
53
+ rule %r/\s+/, Text::Whitespace
54
54
  rule(//) { push :delimiters; push :lassofile }
55
55
  end
56
56
 
57
57
  state :delimiters do
58
- rule /\[no_square_brackets\]/, Comment::Preproc, :nosquarebrackets
59
- rule /\[noprocess\]/, Comment::Preproc, :noprocess
60
- rule /\[/, Comment::Preproc, :squarebrackets
61
- rule /<\?(lasso(script)?|=)/i, Comment::Preproc, :anglebrackets
58
+ rule %r/\[no_square_brackets\]/, Comment::Preproc, :nosquarebrackets
59
+ rule %r/\[noprocess\]/, Comment::Preproc, :noprocess
60
+ rule %r/\[/, Comment::Preproc, :squarebrackets
61
+ rule %r/<\?(lasso(script)?|=)/i, Comment::Preproc, :anglebrackets
62
62
  rule(/([^\[<]|<!--.*?-->|<(script|style).*?\2>|<(?!\?(lasso(script)?|=)))+/im) { delegate parent }
63
63
  end
64
64
 
65
65
  state :nosquarebrackets do
66
- rule /\[noprocess\]/, Comment::Preproc, :noprocess
67
- rule /<\?(lasso(script)?|=)/i, Comment::Preproc, :anglebrackets
66
+ rule %r/\[noprocess\]/, Comment::Preproc, :noprocess
67
+ rule %r/<\?(lasso(script)?|=)/i, Comment::Preproc, :anglebrackets
68
68
  rule(/([^\[<]|<!--.*?-->|<(script|style).*?\2>|<(?!\?(lasso(script)?|=))|\[(?!noprocess))+/im) { delegate parent }
69
69
  end
70
70
 
@@ -74,22 +74,22 @@ module Rouge
74
74
  end
75
75
 
76
76
  state :squarebrackets do
77
- rule /\]/, Comment::Preproc, :pop!
77
+ rule %r/\]/, Comment::Preproc, :pop!
78
78
  mixin :lasso
79
79
  end
80
80
 
81
81
  state :anglebrackets do
82
- rule /\?>/, Comment::Preproc, :pop!
82
+ rule %r/\?>/, Comment::Preproc, :pop!
83
83
  mixin :lasso
84
84
  end
85
85
 
86
86
  state :lassofile do
87
- rule /\]|\?>/, Comment::Preproc, :pop!
87
+ rule %r/\]|\?>/, Comment::Preproc, :pop!
88
88
  mixin :lasso
89
89
  end
90
90
 
91
91
  state :whitespacecomments do
92
- rule /\s+/, Text
92
+ rule %r/\s+/, Text
93
93
  rule %r(//.*?\n), Comment::Single
94
94
  rule %r(/\*\*!.*?\*/)m, Comment::Doc
95
95
  rule %r(/\*.*?\*/)m, Comment::Multiline
@@ -99,43 +99,43 @@ module Rouge
99
99
  mixin :whitespacecomments
100
100
 
101
101
  # literals
102
- rule /\d*\.\d+(e[+-]?\d+)?/i, Num::Float
103
- rule /0x[\da-f]+/i, Num::Hex
104
- rule /\d+/, Num::Integer
105
- rule /(infinity|NaN)\b/i, Num
106
- rule /'[^'\\]*(\\.[^'\\]*)*'/m, Str::Single
107
- rule /"[^"\\]*(\\.[^"\\]*)*"/m, Str::Double
108
- rule /`[^`]*`/m, Str::Backtick
102
+ rule %r/\d*\.\d+(e[+-]?\d+)?/i, Num::Float
103
+ rule %r/0x[\da-f]+/i, Num::Hex
104
+ rule %r/\d+/, Num::Integer
105
+ rule %r/(infinity|NaN)\b/i, Num
106
+ rule %r/'[^'\\]*(\\.[^'\\]*)*'/m, Str::Single
107
+ rule %r/"[^"\\]*(\\.[^"\\]*)*"/m, Str::Double
108
+ rule %r/`[^`]*`/m, Str::Backtick
109
109
 
110
110
  # names
111
- rule /\$#{id}/, Name::Variable
112
- rule /#(#{id}|\d+\b)/, Name::Variable::Instance
113
- rule /(\.\s*)('#{id}')/ do
111
+ rule %r/\$#{id}/, Name::Variable
112
+ rule %r/#(#{id}|\d+\b)/, Name::Variable::Instance
113
+ rule %r/(\.\s*)('#{id}')/ do
114
114
  groups Name::Builtin::Pseudo, Name::Variable::Class
115
115
  end
116
- rule /(self)(\s*->\s*)('#{id}')/i do
116
+ rule %r/(self)(\s*->\s*)('#{id}')/i do
117
117
  groups Name::Builtin::Pseudo, Operator, Name::Variable::Class
118
118
  end
119
- rule /(\.\.?\s*)(#{id}(=(?!=))?)/ do
119
+ rule %r/(\.\.?\s*)(#{id}(=(?!=))?)/ do
120
120
  groups Name::Builtin::Pseudo, Name::Other
121
121
  end
122
- rule /(->\\?\s*|&\s*)(#{id}(=(?!=))?)/ do
122
+ rule %r/(->\\?\s*|&\s*)(#{id}(=(?!=))?)/ do
123
123
  groups Operator, Name::Other
124
124
  end
125
- rule /(?<!->)(self|inherited|currentcapture|givenblock)\b/i, Name::Builtin::Pseudo
126
- rule /-(?!infinity)#{id}/i, Name::Attribute
127
- rule /::\s*#{id}/, Name::Label
128
- 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
125
+ rule %r/(?<!->)(self|inherited|currentcapture|givenblock)\b/i, Name::Builtin::Pseudo
126
+ rule %r/-(?!infinity)#{id}/i, Name::Attribute
127
+ rule %r/::\s*#{id}/, Name::Label
128
+ rule %r/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
129
129
 
130
130
  # definitions
131
- rule /(define)(\s+)(#{id})(\s*=>\s*)(type|trait|thread)\b/i do
131
+ rule %r/(define)(\s+)(#{id})(\s*=>\s*)(type|trait|thread)\b/i do
132
132
  groups Keyword::Declaration, Text, Name::Class, Operator, Keyword
133
133
  end
134
134
  rule %r((define)(\s+)(#{id})(\s*->\s*)(#{id}=?|[-+*/%]))i do
135
135
  groups Keyword::Declaration, Text, Name::Class, Operator, Name::Function
136
136
  push :signature
137
137
  end
138
- rule /(define)(\s+)(#{id})/i do
138
+ rule %r/(define)(\s+)(#{id})/i do
139
139
  groups Keyword::Declaration, Text, Name::Function
140
140
  push :signature
141
141
  end
@@ -143,25 +143,25 @@ module Rouge
143
143
  groups Keyword, Text, Name::Function
144
144
  push :signature
145
145
  end
146
- rule /(public|protected|private|provide)(\s+)(#{id})/i do
146
+ rule %r/(public|protected|private|provide)(\s+)(#{id})/i do
147
147
  groups Keyword, Text, Name::Function
148
148
  end
149
149
 
150
150
  # keywords
151
- rule /(true|false|none|minimal|full|all|void)\b/i, Keyword::Constant
152
- rule /(local|var|variable|global|data(?=\s))\b/i, Keyword::Declaration
153
- 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
154
- rule /(#{id})(\s+)(in)\b/i do
151
+ rule %r/(true|false|none|minimal|full|all|void)\b/i, Keyword::Constant
152
+ rule %r/(local|var|variable|global|data(?=\s))\b/i, Keyword::Declaration
153
+ rule %r/(array|date|decimal|duration|integer|map|pair|string|tag|xml|null|boolean|bytes|keyword|list|locale|queue|set|stack|staticarray)\b/i, Keyword::Type
154
+ rule %r/(#{id})(\s+)(in)\b/i do
155
155
  groups Name, Text, Keyword
156
156
  end
157
- rule /(let|into)(\s+)(#{id})/i do
157
+ rule %r/(let|into)(\s+)(#{id})/i do
158
158
  groups Keyword, Text, Name
159
159
  end
160
160
 
161
161
  # other
162
- rule /,/, Punctuation, :commamember
163
- rule /(and|or|not)\b/i, Operator::Word
164
- rule /(#{id})(\s*::\s*#{id})?(\s*=(?!=|>))/ do
162
+ rule %r/,/, Punctuation, :commamember
163
+ rule %r/(and|or|not)\b/i, Operator::Word
164
+ rule %r/(#{id})(\s*::\s*#{id})?(\s*=(?!=|>))/ do
165
165
  groups Name, Name::Label, Operator
166
166
  end
167
167
 
@@ -183,31 +183,31 @@ module Rouge
183
183
  end
184
184
  end
185
185
 
186
- rule /(=)(n?bw|n?ew|n?cn|lte?|gte?|n?eq|n?rx|ft)\b/i do
186
+ rule %r/(=)(n?bw|n?ew|n?cn|lte?|gte?|n?eq|n?rx|ft)\b/i do
187
187
  groups Operator, Operator::Word
188
188
  end
189
189
  rule %r(:=|[-+*/%=<>&|!?\\]+), Operator
190
- rule /[{}():;,@^]/, Punctuation
190
+ rule %r/[{}():;,@^]/, Punctuation
191
191
  end
192
192
 
193
193
  state :signature do
194
- rule /\=>/, Operator, :pop!
195
- rule /\)/, Punctuation, :pop!
196
- rule /[(,]/, Punctuation, :parameter
194
+ rule %r/\=>/, Operator, :pop!
195
+ rule %r/\)/, Punctuation, :pop!
196
+ rule %r/[(,]/, Punctuation, :parameter
197
197
  mixin :lasso
198
198
  end
199
199
 
200
200
  state :parameter do
201
- rule /\)/, Punctuation, :pop!
202
- rule /-?#{id}/, Name::Attribute, :pop!
203
- rule /\.\.\./, Name::Builtin::Pseudo
201
+ rule %r/\)/, Punctuation, :pop!
202
+ rule %r/-?#{id}/, Name::Attribute, :pop!
203
+ rule %r/\.\.\./, Name::Builtin::Pseudo
204
204
  mixin :lasso
205
205
  end
206
206
 
207
207
  state :commamember do
208
208
  rule %r((#{id}=?|[-+*/%])(?=\s*(\(([^()]*\([^()]*\))*[^\)]*\)\s*)?(::[\w.\s]+)?=>)), Name::Function, :signature
209
209
  mixin :whitespacecomments
210
- rule //, Text, :pop!
210
+ rule %r//, Text, :pop!
211
211
  end
212
212
 
213
213
  end