rouge 3.19.0 → 3.20.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -12,24 +12,30 @@ module Rouge
12
12
 
13
13
  def self.keywords
14
14
  @keywords ||= %w(
15
- Ascender Attach CapHeight CaretOffset CodePageRange Descender FontRevision FSType
16
- GlyphClassDef HorizAxis.BaseScriptList HorizAxis.BaseTagList HorizAxis.MinMax
17
- IgnoreBaseGlyphs IgnoreLigatures IgnoreMarks LigatureCaretByDev LigatureCaretByIndex
18
- LigatureCaretByPos LineGap MarkAttachClass MarkAttachmentType NULL Panose RightToLeft
19
- TypoAscender TypoDescender TypoLineGap UnicodeRange UseMarkFilteringSet Vendor
20
- VertAdvanceY VertAxis.BaseScriptList VertAxis.BaseTagList VertAxis.MinMax VertOriginY
21
- VertTypoAscender VertTypoDescender VertTypoLineGap WeightClass WidthClass XHeight
22
-
23
- anchorDef anchor anonymous anon by contour cursive device enumerate enum
24
- exclude_dflt featureNames feature from ignore include_dflt include languagesystem
25
- language lookupflag lookup markClass mark nameid name parameters position pos required
26
- reversesub rsub script sizemenuname substitute subtable sub table useExtension
15
+ Ascender Attach AxisValue CapHeight CaretOffset CodePageRange
16
+ DesignAxis Descender ElidedFallbackName ElidedFallbackNameID
17
+ ElidableAxisValueName FeatUILabelNameID FeatUITooltipTextNameID
18
+ FontRevision FSType GlyphClassDef HorizAxis.BaseScriptList
19
+ HorizAxis.BaseTagList HorizAxis.MinMax IgnoreBaseGlyphs
20
+ IgnoreLigatures IgnoreMarks LigatureCaretByDev LigatureCaretByIndex
21
+ LigatureCaretByPos LineGap MarkAttachClass MarkAttachmentType NULL
22
+ OlderSiblingFontAttribute Panose ParamUILabelNameID RightToLeft
23
+ SampleTextNameID TypoAscender TypoDescender TypoLineGap UnicodeRange
24
+ UseMarkFilteringSet Vendor VertAdvanceY VertAxis.BaseScriptList
25
+ VertAxis.BaseTagList VertAxis.MinMax VertOriginY VertTypoAscender
26
+ VertTypoDescender VertTypoLineGap WeightClass WidthClass XHeight
27
+
28
+ anchorDef anchor anonymous anon by contour cursive device enumerate
29
+ enum exclude_dflt featureNames feature flag from ignore include_dflt
30
+ include languagesystem language location lookupflag lookup markClass
31
+ mark nameid name parameters position pos required reversesub rsub
32
+ script sizemenuname substitute subtable sub table useExtension
27
33
  valueRecordDef winAscent winDescent
28
34
  )
29
35
  end
30
36
 
31
37
 
32
- identifier = %r/[a-z_][a-z0-9\/_]*/i
38
+ identifier = %r/[a-z_][a-z0-9\/_.-]*/i
33
39
 
34
40
  state :root do
35
41
  rule %r/\s+/m, Text::Whitespace
@@ -41,17 +47,18 @@ module Rouge
41
47
  push :featurename
42
48
  end
43
49
  # } <tag> ;
44
- rule %r/(\})((?:\s)*)/ do
50
+ rule %r/(\})((?:\s))/ do
45
51
  groups Punctuation, Text
46
52
  push :featurename
47
53
  end
48
54
  # solve include( ../path)
49
- rule %r/(include)/i, Keyword, :includepath
55
+ rule %r/include\b/i, Keyword, :includepath
50
56
 
51
57
  rule %r/[\-\[\]\/(){},.:;=%*<>']/, Punctuation
52
58
 
53
59
  rule %r/`.*?/, Str::Backtick
54
- rule %r/\"/, Str, :dqs
60
+ rule %r/\"/, Str, :strings
61
+ rule %r/\\[^.*\s]+/i, Str::Escape
55
62
 
56
63
  # classes, start with @<nameOfClass>
57
64
  rule %r/@#{identifier}/, Name::Class
@@ -66,6 +73,7 @@ module Rouge
66
73
  end
67
74
 
68
75
  rule identifier, Name
76
+ rule %r/(?:0x|\\)[0-9A-Fa-f]+/, Num::Hex
69
77
  rule %r/-?\d+/, Num::Integer
70
78
  end
71
79
 
@@ -77,37 +85,14 @@ module Rouge
77
85
  rule %r/\s+/, Text::Whitespace
78
86
  rule %r/\)/, Punctuation, :pop!
79
87
  rule %r/\(/, Punctuation
80
- rule %r/[a-z0-9\/_.]*/i, Str
88
+ rule %r/[^\s()]+/, Str
81
89
  end
82
90
 
83
91
  state :strings do
84
- rule %r/(\([a-z0-9_]+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?/i, Str
85
- end
86
-
87
- state :strings_double do
88
- rule %r/[^\\"%\n]+/, Str
89
- mixin :strings
90
- end
91
-
92
- state :escape do
93
- rule %r(\\
94
- ( [\\abfnrtv"']
95
- | \n
96
- | N{[a-zA-z][a-zA-Z ]+[a-zA-Z]}
97
- | u[a-fA-F0-9]{4}
98
- | U[a-fA-F0-9]{8}
99
- | x[a-fA-F0-9]{2}
100
- | [0-7]{1,3}
101
- )
102
- )x, Str::Escape
103
- end
104
-
105
- state :dqs do
106
92
  rule %r/"/, Str, :pop!
107
- mixin :escape
108
- mixin :strings_double
93
+ rule %r/[^"%\n]+/, Str
94
+ rule %r/(\([a-z0-9_]+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?/i, Str
109
95
  end
110
-
111
96
  end
112
97
  end
113
98
  end
@@ -201,7 +201,7 @@ module Rouge
201
201
  rule %r/(?:#{KEYWORDS})\b(?![-.])/i, Keyword::Reserved
202
202
 
203
203
  rule %r/-{1,2}\w+/, Name::Tag
204
-
204
+
205
205
  rule %r/(\.)?([-\w]+)(\[)/ do |m|
206
206
  groups Operator, Name::Function, Punctuation
207
207
  push :bracket
@@ -209,12 +209,12 @@ module Rouge
209
209
 
210
210
  rule %r/([\/\\~\w][-.:\/\\~\w]*)(\n)?/ do |m|
211
211
  groups Name::Function, Text::Whitespace
212
- push :parameters unless m[2]
212
+ push :parameters
213
213
  end
214
214
 
215
215
  rule %r/(\.)?([-\w]+)(?:(\()|(\n))?/ do |m|
216
216
  groups Operator, Name::Function, Punctuation, Text::Whitespace
217
- push :parameters unless m[3]
217
+ push :parameters unless m[3].nil?
218
218
  end
219
219
 
220
220
  rule %r/[-+*\/%=!.&|]/, Operator
@@ -7,13 +7,20 @@ module Rouge
7
7
  load_lexer 'typescript/common.rb'
8
8
 
9
9
  class TSX < JSX
10
- include TypescriptCommon
10
+ extend TypescriptCommon
11
11
 
12
- title 'TypeScript'
13
- desc 'tsx'
12
+ title 'TSX'
13
+ desc 'TypeScript-compatible JSX (www.typescriptlang.org/docs/handbook/jsx.html)'
14
14
 
15
15
  tag 'tsx'
16
16
  filenames '*.tsx'
17
+
18
+ prepend :element_name do
19
+ rule %r/(\w+)(,)/ do
20
+ groups Name::Other, Punctuation
21
+ pop! 3
22
+ end
23
+ end
17
24
  end
18
25
  end
19
26
  end
@@ -7,7 +7,7 @@ module Rouge
7
7
  load_lexer 'typescript/common.rb'
8
8
 
9
9
  class Typescript < Javascript
10
- include TypescriptCommon
10
+ extend TypescriptCommon
11
11
 
12
12
  title "TypeScript"
13
13
  desc "TypeScript, a superset of JavaScript"
@@ -18,17 +18,6 @@ module Rouge
18
18
  filenames '*.ts', '*.d.ts'
19
19
 
20
20
  mimetypes 'text/typescript'
21
-
22
- prepend :root do
23
- rule %r/[?][.]/, Punctuation
24
- end
25
-
26
- prepend :statement do
27
- rule %r/(#{Javascript.id_regex})(\??)(\s*)(:)/ do
28
- groups Name::Label, Punctuation, Text, Punctuation
29
- push :expr_start
30
- end
31
- end
32
21
  end
33
22
  end
34
23
  end
@@ -4,31 +4,45 @@
4
4
  module Rouge
5
5
  module Lexers
6
6
  module TypescriptCommon
7
- def self.keywords
7
+ def keywords
8
8
  @keywords ||= super + Set.new(%w(
9
9
  is namespace static private protected public
10
10
  implements readonly
11
11
  ))
12
12
  end
13
13
 
14
- def self.declarations
14
+ def declarations
15
15
  @declarations ||= super + Set.new(%w(
16
16
  type abstract
17
17
  ))
18
18
  end
19
19
 
20
- def self.reserved
20
+ def reserved
21
21
  @reserved ||= super + Set.new(%w(
22
22
  string any void number namespace module
23
23
  declare default interface keyof
24
24
  ))
25
25
  end
26
26
 
27
- def self.builtins
27
+ def builtins
28
28
  @builtins ||= super + %w(
29
29
  Pick Partial Readonly Record
30
30
  )
31
31
  end
32
+
33
+ def self.extended(base)
34
+ base.prepend :root do
35
+ rule %r/[?][.]/, base::Punctuation
36
+ rule %r/[?]{2}/, base::Operator
37
+ end
38
+
39
+ base.prepend :statement do
40
+ rule %r/(#{Javascript.id_regex})(\??)(\s*)(:)/ do
41
+ groups base::Name::Label, base::Punctuation, base::Text, base::Punctuation
42
+ push :expr_start
43
+ end
44
+ end
45
+ end
32
46
  end
33
47
  end
34
48
  end
@@ -0,0 +1,71 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Velocity < TemplateLexer
6
+ title 'Velocity'
7
+ desc 'Velocity is a Java-based template engine (velocity.apache.org)'
8
+ tag 'velocity'
9
+ filenames '*.vm', '*.velocity', '*.fhtml'
10
+ mimetypes 'text/html+velocity'
11
+
12
+ id = /[a-z_]\w*/i
13
+
14
+ state :root do
15
+ rule %r/[^{#$]+/ do
16
+ delegate parent
17
+ end
18
+
19
+ rule %r/(#)(\*.*?\*)(#)/m, Comment::Multiline
20
+ rule %r/(##)(.*?$)/, Comment::Single
21
+
22
+ rule %r/(#\{?)(#{id})(\}?)(\s?\()/m do
23
+ groups Punctuation, Name::Function, Punctuation, Punctuation
24
+ push :directive_params
25
+ end
26
+
27
+ rule %r/(#\{?)(#{id})(\}|\b)/m do
28
+ groups Punctuation, Name::Function, Punctuation
29
+ end
30
+
31
+ rule %r/\$\{?/, Punctuation, :variable
32
+ end
33
+
34
+ state :variable do
35
+ rule %r/#{id}/, Name::Variable
36
+ rule %r/\(/, Punctuation, :func_params
37
+ rule %r/(\.)(#{id})/ do
38
+ groups Punctuation, Name::Variable
39
+ end
40
+ rule %r/\}/, Punctuation, :pop!
41
+ rule(//) { pop! }
42
+ end
43
+
44
+ state :directive_params do
45
+ rule %r/(&&|\|\||==?|!=?|[-<>+*%&|^\/])|\b(eq|ne|gt|lt|ge|le|not|in)\b/, Operator
46
+ rule %r/\[/, Operator, :range_operator
47
+ rule %r/\b#{id}\b/, Name::Function
48
+ mixin :func_params
49
+ end
50
+
51
+ state :range_operator do
52
+ rule %r/[.]{2}/, Operator
53
+ mixin :func_params
54
+ rule %r/\]/, Operator, :pop!
55
+ end
56
+
57
+ state :func_params do
58
+ rule %r/\$\{?/, Punctuation, :variable
59
+ rule %r/\s+/, Text
60
+ rule %r/,/, Punctuation
61
+ rule %r/"(\\\\|\\"|[^"])*"/, Str::Double
62
+ rule %r/'(\\\\|\\'|[^'])*'/, Str::Single
63
+ rule %r/0[xX][0-9a-fA-F]+[Ll]?/, Num::Hex
64
+ rule %r/\b[0-9]+\b/, Num::Integer
65
+ rule %r/(true|false|null)\b/, Keyword::Constant
66
+ rule %r/[(\[]/, Punctuation, :push!
67
+ rule %r/[)\]}]/, Punctuation, :pop!
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,139 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Zig < RegexLexer
7
+ tag 'zig'
8
+ aliases 'zir'
9
+ filenames '*.zig'
10
+ mimetypes 'text/x-zig'
11
+
12
+ title 'Zig'
13
+ desc 'The Zig programming language (ziglang.org)'
14
+
15
+ def self.keywords
16
+ @keywords ||= %w(
17
+ align linksection threadlocal struct enum union error break return
18
+ anyframe fn c_longlong c_ulonglong c_longdouble c_void comptime_float
19
+ c_short c_ushort c_int c_uint c_long c_ulong continue asm defer
20
+ errdefer const var extern packed export pub if else switch and or
21
+ orelse while for bool unreachable try catch async suspend nosuspend
22
+ await resume undefined usingnamespace test void noreturn type
23
+ anyerror usize noalias inline noinline comptime callconv volatile
24
+ allowzero
25
+ )
26
+ end
27
+
28
+ def self.builtins
29
+ @builtins ||= %w(
30
+ @addWithOverflow @as @atomicLoad @atomicStore @bitCast @breakpoint
31
+ @alignCast @alignOf @cDefine @cImport @cInclude @bitOffsetOf
32
+ @atomicRmw @bytesToSlice @byteOffsetOf @OpaqueType @panic @ptrCast
33
+ @bitReverse @Vector @sin @cUndef @canImplicitCast @clz @cmpxchgWeak
34
+ @cmpxchgStrong @compileError @compileLog @ctz @popCount @divExact
35
+ @divFloor @cos @divTrunc @embedFile @export @tagName @TagType
36
+ @errorName @call @errorReturnTrace @fence @fieldParentPtr @field
37
+ @unionInit @errorToInt @intToEnum @enumToInt @setAlignStack @frame
38
+ @Frame @exp @exp2 @log @log2 @log10 @fabs @floor @ceil @trunc @round
39
+ @floatCast @intToFloat @floatToInt @boolToInt @errSetCast @intToError
40
+ @frameAddress @import @newStackCall @asyncCall @intToPtr @intCast
41
+ @frameSize @memcpy @memset @mod @mulWithOverflow @splat @ptrToInt
42
+ @rem @returnAddress @setCold @Type @shuffle @setGlobalLinkage
43
+ @setGlobalSection @shlExact @This @hasDecl @hasField
44
+ @setRuntimeSafety @setEvalBranchQuota @setFloatMode @shlWithOverflow
45
+ @shrExact @sizeOf @bitSizeOf @sqrt @byteSwap @subWithOverflow
46
+ @sliceToBytes comptime_int @truncate @typeInfo @typeName @TypeOf
47
+ )
48
+ end
49
+
50
+ id = /[a-z_]\w*/i
51
+ escapes = /\\ ([nrt'"\\0] | x\h{2} | u\h{4} | U\h{8})/x
52
+
53
+ state :bol do
54
+ mixin :whitespace
55
+ rule %r/#\s[^\n]*/, Comment::Special
56
+ rule(//) { pop! }
57
+ end
58
+
59
+ state :attribute do
60
+ mixin :whitespace
61
+ mixin :literals
62
+ rule %r/[(,)=:]/, Name::Decorator
63
+ rule %r/\]/, Name::Decorator, :pop!
64
+ rule id, Name::Decorator
65
+ end
66
+
67
+ state :whitespace do
68
+ rule %r/\s+/, Text
69
+ rule %r(//[^\n]*), Comment
70
+ end
71
+
72
+ state :root do
73
+ rule %r/\n/, Text, :bol
74
+
75
+ mixin :whitespace
76
+
77
+ rule %r/\b(?:(i|u)[0-9]+)\b/, Keyword::Type
78
+ rule %r/\b(?:f(16|32|64|128))\b/, Keyword::Type
79
+ rule %r/\b(?:(isize|usize))\b/, Keyword::Type
80
+
81
+ mixin :literals
82
+
83
+ rule %r/'#{id}/, Name::Variable
84
+ rule %r/([.]?)(\s*)(@?#{id})(\s*)([(]?)/ do |m|
85
+ name = m[3]
86
+ t = if self.class.keywords.include? name
87
+ Keyword
88
+ elsif self.class.builtins.include? name
89
+ Name::Builtin
90
+ elsif !m[1].empty? && !m[5].empty?
91
+ Name::Function
92
+ elsif !m[1].empty?
93
+ Name::Property
94
+ else
95
+ Name
96
+ end
97
+
98
+ groups Punctuation, Text, t, Text, Punctuation
99
+ end
100
+
101
+ rule %r/[()\[\]{}|,:;]/, Punctuation
102
+ rule %r/[*\/!@~&+%^<>=\?-]|\.{1,3}/, Operator
103
+ end
104
+
105
+ state :literals do
106
+ rule %r/\b(?:true|false|null)\b/, Keyword::Constant
107
+ rule %r(
108
+ ' (?: #{escapes} | [^\\] ) '
109
+ )x, Str::Char
110
+
111
+ rule %r/"/, Str, :string
112
+ rule %r/r(#*)".*?"\1/m, Str
113
+
114
+ dot = /[.][0-9_]+/
115
+ exp = /e[-+]?[0-9_]+/
116
+
117
+ rule %r(
118
+ [0-9]+
119
+ (#{dot} #{exp}?
120
+ |#{dot}? #{exp}
121
+ )
122
+ )x, Num::Float
123
+
124
+ rule %r(
125
+ ( 0b[10_]+
126
+ | 0x[0-9a-fA-F_]+
127
+ | [0-9_]+
128
+ )
129
+ )x, Num::Integer
130
+ end
131
+
132
+ state :string do
133
+ rule %r/"/, Str, :pop!
134
+ rule escapes, Str::Escape
135
+ rule %r/[^"\\]+/m, Str
136
+ end
137
+ end
138
+ end
139
+ end