rouge 3.20.0 → 3.21.0
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.
- checksums.yaml +4 -4
- data/lib/rouge/demos/brightscript +6 -0
- data/lib/rouge/demos/janet +3 -0
- data/lib/rouge/demos/ssh +4 -0
- data/lib/rouge/lexers/batchfile.rb +1 -1
- data/lib/rouge/lexers/brightscript.rb +147 -0
- data/lib/rouge/lexers/cpp.rb +5 -4
- data/lib/rouge/lexers/css.rb +3 -1
- data/lib/rouge/lexers/docker.rb +1 -1
- data/lib/rouge/lexers/html.rb +6 -6
- data/lib/rouge/lexers/janet.rb +217 -0
- data/lib/rouge/lexers/javascript.rb +3 -1
- data/lib/rouge/lexers/jinja.rb +22 -7
- data/lib/rouge/lexers/julia.rb +4 -2
- data/lib/rouge/lexers/perl.rb +21 -3
- data/lib/rouge/lexers/powershell.rb +2 -0
- data/lib/rouge/lexers/rego.rb +27 -12
- data/lib/rouge/lexers/sass/common.rb +1 -0
- data/lib/rouge/lexers/ssh.rb +33 -0
- data/lib/rouge/lexers/twig.rb +4 -4
- data/lib/rouge/lexers/xml.rb +5 -3
- data/lib/rouge/lexers/yaml.rb +5 -3
- data/lib/rouge/version.rb +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ef1072cc2523dba637a191d195865b0b2fb9f38c4f6d9961fb58748306f6cd1
|
4
|
+
data.tar.gz: 4cd1b0d5262fa8a1d4ddb564cf4e9a185d6e8043bee0261f119e7a8ccb81e1fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04a39cda7513ce8084b6cdddd3016e7ca679218688dfb2dcb6f6fd8a0e627ec189f38a31ba2c44bd2a8c5b16191e24d0f343f860db5dfbcbb7ca49b92aaff197
|
7
|
+
data.tar.gz: 50172d87860fa9fb4b187dee66c72954ce926e0d73f3e78e1a15a7f3437e749d48b2f935fa6ad08be457a6dd317a3c5c20340a7f7cc1621825b97887e82822c1
|
data/lib/rouge/demos/ssh
ADDED
@@ -0,0 +1,147 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Rouge
|
5
|
+
module Lexers
|
6
|
+
class Brightscript < RegexLexer
|
7
|
+
title "BrightScript"
|
8
|
+
desc "BrightScript Programming Language (https://developer.roku.com/en-ca/docs/references/brightscript/language/brightscript-language-reference.md)"
|
9
|
+
tag 'brightscript'
|
10
|
+
aliases 'bs', 'brs'
|
11
|
+
filenames '*.brs'
|
12
|
+
|
13
|
+
# https://developer.roku.com/en-ca/docs/references/brightscript/language/global-utility-functions.md
|
14
|
+
# https://developer.roku.com/en-ca/docs/references/brightscript/language/global-string-functions.md
|
15
|
+
# https://developer.roku.com/en-ca/docs/references/brightscript/language/global-math-functions.md
|
16
|
+
def self.name_builtin
|
17
|
+
@name_builtin ||= Set.new %w(
|
18
|
+
ABS ASC ATN CDBL CHR CINT CONTROL COPYFILE COS CREATEDIRECTORY CSNG
|
19
|
+
DELETEDIRECTORY DELETEFILE EXP FINDMEMBERFUNCTION FINDNODE FIX
|
20
|
+
FORMATDRIVEFORMATJSON GETINTERFACE INSTR INT LCASE LEFT LEN LISTDIR
|
21
|
+
LOG MATCHFILES MID MOVEFILE OBSERVEFIELD PARSEJSON PARSEXML
|
22
|
+
READASCIIFILE REBOOTSYSTEM RIGHT RND RUNGARBAGECOLLECTOR SGN SIN
|
23
|
+
SLEEP SQR STR STRI STRING STRINGI STRTOI SUBSTITUTE TANTEXTTOP TEXT
|
24
|
+
TRUCASE UPTIME VALVISIBLE VISIBLE WAIT
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
# https://developer.roku.com/en-ca/docs/references/brightscript/language/reserved-words.md
|
29
|
+
def self.keyword_reserved
|
30
|
+
@keyword_reserved ||= Set.new %w(
|
31
|
+
BOX CREATEOBJECT DIM EACH ELSE ELSEIF END ENDFUNCTION ENDIF ENDSUB
|
32
|
+
ENDWHILE EVAL EXIT EXITWHILE FALSE FOR FUNCTION GETGLOBALAA
|
33
|
+
GETLASTRUNCOMPILEERROR GETLASTRUNRUNTIMEERROR GOTO IF IN INVALID LET
|
34
|
+
LINE_NUM M NEXT OBJFUN POS PRINT REM RETURN RUN STEP STOP SUB TAB TO
|
35
|
+
TRUE TYPE WHILE
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
# These keywords are present in BrightScript, but not supported in standard .brs files
|
40
|
+
def self.keyword_reserved_unsupported
|
41
|
+
@keyword_reserved_unsupported ||= Set.new %w(
|
42
|
+
CLASS CONST IMPORT LIBRARY NAMESPACE PRIVATE PROTECTED PUBLIC
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
# https://developer.roku.com/en-ca/docs/references/brightscript/language/expressions-variables-types.md
|
47
|
+
def self.keyword_type
|
48
|
+
@keyword_type ||= Set.new %w(
|
49
|
+
BOOLEAN DIM DOUBLE DYNAMIC FLOAT FUNCTION INTEGER INTERFACE INVALID
|
50
|
+
LONGINTEGER OBJECT STRING VOID
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
54
|
+
# https://developer.roku.com/en-ca/docs/references/brightscript/language/expressions-variables-types.md#operators
|
55
|
+
def self.operator_word
|
56
|
+
@operator_word ||= Set.new %w(
|
57
|
+
AND AS MOD NOT OR THEN
|
58
|
+
)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Scene graph components configured as builtins. See BrightScript component documentation e.g.
|
62
|
+
# https://developer.roku.com/en-ca/docs/references/brightscript/components/roappinfo.md
|
63
|
+
def self.builtins
|
64
|
+
@builtins ||= Set.new %w(
|
65
|
+
roAppendFile roAppInfo roAppManager roArray roAssociativeArray
|
66
|
+
roAudioGuide roAudioMetadata roAudioPlayer roAudioPlayerEvent
|
67
|
+
roAudioResourceroBitmap roBoolean roBoolean roBrightPackage roBrSub
|
68
|
+
roButton roByteArray roCaptionRenderer roCaptionRendererEvent
|
69
|
+
roCecInterface roCECStatusEvent roChannelStore roChannelStoreEvent
|
70
|
+
roClockWidget roCodeRegistrationScreen
|
71
|
+
roCodeRegistrationScreenEventroCompositor roControlDown roControlPort
|
72
|
+
roControlPort roControlUp roCreateFile roDatagramReceiver
|
73
|
+
roDatagramSender roDataGramSocket roDateTime roDeviceInfo
|
74
|
+
roDeviceInfoEvent roDoubleroEVPCipher roEVPDigest roFileSystem
|
75
|
+
roFileSystemEvent roFloat roFont roFontMetrics roFontRegistry
|
76
|
+
roFunction roGlobal roGpio roGridScreen roGridScreenEvent
|
77
|
+
roHdmiHotPlugEventroHdmiStatus roHdmiStatusEvent roHMAC roHttpAgent
|
78
|
+
roImageCanvas roImageCanvasEvent roImageMetadata roImagePlayer
|
79
|
+
roImageWidgetroInput roInputEvent roInt roInt roInvalid roInvalid
|
80
|
+
roIRRemote roKeyboard roKeyboardPress roKeyboardScreen
|
81
|
+
roKeyboardScreenEventroList roListScreen roListScreenEvent
|
82
|
+
roLocalization roLongInteger roMessageDialog roMessageDialogEvent
|
83
|
+
roMessagePort roMicrophone roMicrophoneEvent roNetworkConfiguration
|
84
|
+
roOneLineDialog roOneLineDialogEventroParagraphScreen
|
85
|
+
roParagraphScreenEvent roPath roPinEntryDialog roPinEntryDialogEvent
|
86
|
+
roPinentryScreen roPosterScreen roPosterScreenEventroProgramGuide
|
87
|
+
roQuadravoxButton roReadFile roRectangleroRegexroRegion roRegistry
|
88
|
+
roRegistrySection roResourceManager roRSA roRssArticle roRssParser
|
89
|
+
roScreen roSearchHistory roSearchScreen roSearchScreenEvent
|
90
|
+
roSerialPort roSGNode roSGNodeEvent roSGScreenroSGScreenEvent
|
91
|
+
roSlideShowroSlideShowEvent roSNS5 roSocketAddress roSocketEvent
|
92
|
+
roSpringboardScreen roSpringboardScreenEventroSprite roStorageInfo
|
93
|
+
roStreamSocket roStringroSystemLogroSystemLogEvent roSystemTime
|
94
|
+
roTextFieldroTextScreen roTextScreenEvent roTextToSpeech
|
95
|
+
roTextToSpeechEvent roTextureManager roTextureRequest
|
96
|
+
roTextureRequestEventroTextWidget roTimer roTimespan roTouchScreen
|
97
|
+
roTunerroTunerEvent roUniversalControlEvent roUrlEvent roUrlTransfer
|
98
|
+
roVideoEvent roVideoInput roVideoMode roVideoPlayer roVideoPlayerEvent
|
99
|
+
roVideoScreen roVideoScreenEventroWriteFile roXMLElement roXMLList
|
100
|
+
)
|
101
|
+
end
|
102
|
+
|
103
|
+
id = /[$a-z_][a-z0-9_]*/io
|
104
|
+
|
105
|
+
state :root do
|
106
|
+
rule %r/\s+/m, Text::Whitespace
|
107
|
+
|
108
|
+
# https://developer.roku.com/en-ca/docs/references/brightscript/language/expressions-variables-types.md#comments
|
109
|
+
rule %r/\'.*/, Comment::Single
|
110
|
+
rule %r/REM.*/i, Comment::Single
|
111
|
+
|
112
|
+
# https://developer.roku.com/en-ca/docs/references/brightscript/language/expressions-variables-types.md#operators
|
113
|
+
rule %r([~!%^&*+=\|?:<>/-]), Operator
|
114
|
+
|
115
|
+
rule %r/\d*\.\d+(e-?\d+)?/i, Num::Float
|
116
|
+
rule %r/\d+[lu]*/i, Num::Integer
|
117
|
+
|
118
|
+
rule %r/".*?"/, Str::Double
|
119
|
+
|
120
|
+
rule %r/#{id}(?=\s*[(])/, Name::Function
|
121
|
+
|
122
|
+
rule %r/[()\[\],.;{}]/, Punctuation
|
123
|
+
|
124
|
+
rule id do |m|
|
125
|
+
caseSensitiveChunk = m[0]
|
126
|
+
caseInsensitiveChunk = m[0].upcase
|
127
|
+
|
128
|
+
if self.class.builtins.include?(caseSensitiveChunk)
|
129
|
+
token Keyword::Reserved
|
130
|
+
elsif self.class.keyword_reserved.include?(caseInsensitiveChunk)
|
131
|
+
token Keyword::Reserved
|
132
|
+
elsif self.class.keyword_reserved_unsupported.include?(caseInsensitiveChunk)
|
133
|
+
token Keyword::Reserved
|
134
|
+
elsif self.class.keyword_type.include?(caseInsensitiveChunk)
|
135
|
+
token Keyword::Type
|
136
|
+
elsif self.class.name_builtin.include?(caseInsensitiveChunk)
|
137
|
+
token Name::Builtin
|
138
|
+
elsif self.class.operator_word.include?(caseInsensitiveChunk)
|
139
|
+
token Operator::Word
|
140
|
+
else
|
141
|
+
token Name
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
data/lib/rouge/lexers/cpp.rb
CHANGED
@@ -75,15 +75,16 @@ module Rouge
|
|
75
75
|
rule id, Name::Class, :pop!
|
76
76
|
|
77
77
|
# template specification
|
78
|
-
rule %r/\s*(?=>)/m, Text, :pop!
|
79
|
-
rule %r/[.]{3}/, Operator
|
80
78
|
mixin :whitespace
|
79
|
+
rule %r/[.]{3}/, Operator
|
80
|
+
rule %r/,/, Punctuation, :pop!
|
81
|
+
rule(//) { pop! }
|
81
82
|
end
|
82
83
|
|
83
84
|
state :template do
|
84
|
-
rule %r
|
85
|
+
rule %r/[>;]/, Punctuation, :pop!
|
85
86
|
rule %r/typename\b/, Keyword, :classname
|
86
|
-
mixin :
|
87
|
+
mixin :statements
|
87
88
|
end
|
88
89
|
|
89
90
|
state :case do
|
data/lib/rouge/lexers/css.rb
CHANGED
@@ -11,7 +11,9 @@ module Rouge
|
|
11
11
|
filenames '*.css'
|
12
12
|
mimetypes 'text/css'
|
13
13
|
|
14
|
-
|
14
|
+
# Documentation: https://www.w3.org/TR/CSS21/syndata.html#characters
|
15
|
+
|
16
|
+
identifier = /[\p{L}_-][\p{Word}\p{Cf}-]*/
|
15
17
|
number = /-?(?:[0-9]+(\.[0-9]+)?|\.[0-9]+)/
|
16
18
|
|
17
19
|
def self.attributes
|
data/lib/rouge/lexers/docker.rb
CHANGED
data/lib/rouge/lexers/html.rb
CHANGED
@@ -47,13 +47,13 @@ module Rouge
|
|
47
47
|
rule %r(</), Name::Tag, :tag_end
|
48
48
|
rule %r/</, Name::Tag, :tag_start
|
49
49
|
|
50
|
-
rule %r(<\s*[
|
51
|
-
rule %r(<\s*/\s*[
|
50
|
+
rule %r(<\s*[\p{L}:_-][\p{Word}\p{Cf}:.·-]*), Name::Tag, :tag # opening tags
|
51
|
+
rule %r(<\s*/\s*[\p{L}:_-][\p{Word}\p{Cf}:.·-]*\s*>), Name::Tag # closing tags
|
52
52
|
end
|
53
53
|
|
54
54
|
state :tag_end do
|
55
55
|
mixin :tag_end_end
|
56
|
-
rule %r/[
|
56
|
+
rule %r/[\p{L}:_-][\p{Word}\p{Cf}:.·-]*/ do
|
57
57
|
token Name::Tag
|
58
58
|
goto :tag_end_end
|
59
59
|
end
|
@@ -67,7 +67,7 @@ module Rouge
|
|
67
67
|
state :tag_start do
|
68
68
|
rule %r/\s+/, Text
|
69
69
|
|
70
|
-
rule %r/[
|
70
|
+
rule %r/[\p{L}:_-][\p{Word}\p{Cf}:.·-]*/ do
|
71
71
|
token Name::Tag
|
72
72
|
goto :tag
|
73
73
|
end
|
@@ -83,8 +83,8 @@ module Rouge
|
|
83
83
|
|
84
84
|
state :tag do
|
85
85
|
rule %r/\s+/m, Text
|
86
|
-
rule %r/[
|
87
|
-
rule %r/[
|
86
|
+
rule %r/[\p{L}:_\[\]()*.-][\p{Word}\p{Cf}:.·\[\]()*-]*\s*=\s*/m, Name::Attribute, :attr
|
87
|
+
rule %r/[\p{L}:_*#-][\p{Word}\p{Cf}:.·*#-]*/, Name::Attribute
|
88
88
|
rule %r(/?\s*>)m, Name::Tag, :pop!
|
89
89
|
end
|
90
90
|
|
@@ -0,0 +1,217 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Rouge
|
5
|
+
module Lexers
|
6
|
+
class Janet < RegexLexer
|
7
|
+
title "Janet"
|
8
|
+
desc "The Janet programming language (janet-lang.org)"
|
9
|
+
|
10
|
+
tag 'janet'
|
11
|
+
aliases 'jdn'
|
12
|
+
|
13
|
+
filenames '*.janet', '*.jdn'
|
14
|
+
|
15
|
+
mimetypes 'text/x-janet', 'application/x-janet'
|
16
|
+
|
17
|
+
def self.specials
|
18
|
+
@specials ||= Set.new %w(
|
19
|
+
break def do fn if quote quasiquote splice set unquote var while
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.bundled
|
24
|
+
@bundled ||= Set.new %w(
|
25
|
+
% %= * *= + ++ += - -- -= -> ->> -?> -?>> / /= < <= = > >=
|
26
|
+
abstract? accumulate accumulate2 all all-bindings
|
27
|
+
all-dynamics and apply array array/concat array/ensure
|
28
|
+
array/fill array/insert array/new array/new-filled
|
29
|
+
array/peek array/pop array/push array/remove array/slice
|
30
|
+
array? as-> as?-> asm assert bad-compile bad-parse band
|
31
|
+
blshift bnot boolean? bor brshift brushift buffer buffer/bit
|
32
|
+
buffer/bit-clear buffer/bit-set buffer/bit-toggle
|
33
|
+
buffer/blit buffer/clear buffer/fill buffer/format
|
34
|
+
buffer/new buffer/new-filled buffer/popn buffer/push-byte
|
35
|
+
buffer/push-string buffer/push-word buffer/slice buffer?
|
36
|
+
bxor bytes? case cfunction? chr cli-main comment comp
|
37
|
+
compare compare= compare< compare<= compare> compare>=
|
38
|
+
compile complement comptime cond coro count debug
|
39
|
+
debug/arg-stack debug/break debug/fbreak debug/lineage
|
40
|
+
debug/stack debug/stacktrace debug/step debug/unbreak
|
41
|
+
debug/unfbreak debugger-env dec deep-not= deep= default
|
42
|
+
default-peg-grammar def- defer defmacro defmacro- defn defn-
|
43
|
+
defglobal describe dictionary? disasm distinct doc doc*
|
44
|
+
doc-format dofile drop drop-until drop-while dyn each eachk
|
45
|
+
eachp eachy edefer eflush empty? env-lookup eprin eprinf
|
46
|
+
eprint eprintf error errorf eval eval-string even? every?
|
47
|
+
extreme false? fiber/can-resume? fiber/current fiber/getenv
|
48
|
+
fiber/maxstack fiber/new fiber/root fiber/setenv
|
49
|
+
fiber/setmaxstack fiber/status fiber? file/close file/flush
|
50
|
+
file/open file/popen file/read file/seek file/temp
|
51
|
+
file/write filter find find-index first flatten flatten-into
|
52
|
+
flush for forv freeze frequencies function? gccollect
|
53
|
+
gcinterval gcsetinterval generate gensym get get-in getline
|
54
|
+
hash idempotent? identity import import* if-let if-not
|
55
|
+
if-with in inc indexed? int/s64 int/u64 int? interleave
|
56
|
+
interpose invert janet/build janet/config-bits janet/version
|
57
|
+
juxt juxt* keep keys keyword keyword? kvs label last length
|
58
|
+
let load-image load-image-dict loop macex macex1 make-env
|
59
|
+
make-image make-image-dict map mapcat marshal math/-inf
|
60
|
+
math/abs math/acos math/acosh math/asin math/asinh math/atan
|
61
|
+
math/atan2 math/atanh math/cbrt math/ceil math/cos math/cosh
|
62
|
+
math/e math/erf math/erfc math/exp math/exp2 math/expm1
|
63
|
+
math/floor math/gamma math/hypot math/inf math/log
|
64
|
+
math/log10 math/log1p math/log2 math/next math/pi math/pow
|
65
|
+
math/random math/rng math/rng-buffer math/rng-int
|
66
|
+
math/rng-uniform math/round math/seedrandom math/sin
|
67
|
+
math/sinh math/sqrt math/tan math/tanh math/trunc match max
|
68
|
+
mean merge merge-into min mod module/add-paths module/cache
|
69
|
+
module/expand-path module/find module/loaders module/loading
|
70
|
+
module/paths nan? nat? native neg? net/chunk net/close
|
71
|
+
net/connect net/read net/server net/write next nil? not not=
|
72
|
+
number? odd? one? or os/arch os/cd os/chmod os/clock
|
73
|
+
os/cryptorand os/cwd os/date os/dir os/environ os/execute
|
74
|
+
os/exit os/getenv os/link os/lstat os/mkdir os/mktime
|
75
|
+
os/perm-int os/perm-string os/readlink os/realpath os/rename
|
76
|
+
os/rm os/rmdir os/setenv os/shell os/sleep os/stat
|
77
|
+
os/symlink os/time os/touch os/umask os/which pairs parse
|
78
|
+
parser/byte parser/clone parser/consume parser/eof
|
79
|
+
parser/error parser/flush parser/has-more parser/insert
|
80
|
+
parser/new parser/produce parser/state parser/status
|
81
|
+
parser/where partial partition peg/compile peg/match pos?
|
82
|
+
postwalk pp prewalk prin prinf print printf product prompt
|
83
|
+
propagate protect put put-in quit range reduce reduce2
|
84
|
+
repeat repl require resume return reverse reversed root-env
|
85
|
+
run-context scan-number seq setdyn shortfn signal slice
|
86
|
+
slurp some sort sort-by sorted sorted-by spit stderr stdin
|
87
|
+
stdout string string/ascii-lower string/ascii-upper
|
88
|
+
string/bytes string/check-set string/find string/find-all
|
89
|
+
string/format string/from-bytes string/has-prefix?
|
90
|
+
string/has-suffix? string/join string/repeat string/replace
|
91
|
+
string/replace-all string/reverse string/slice string/split
|
92
|
+
string/trim string/triml string/trimr string? struct struct?
|
93
|
+
sum symbol symbol? table table/clone table/getproto
|
94
|
+
table/new table/rawget table/setproto table/to-struct table?
|
95
|
+
take take-until take-while tarray/buffer tarray/copy-bytes
|
96
|
+
tarray/length tarray/new tarray/properties tarray/slice
|
97
|
+
tarray/swap-bytes thread/close thread/current thread/new
|
98
|
+
thread/receive thread/send trace tracev true? truthy? try
|
99
|
+
tuple tuple/brackets tuple/setmap tuple/slice
|
100
|
+
tuple/sourcemap tuple/type tuple? type unless unmarshal
|
101
|
+
untrace update update-in use values var- varfn varglobal
|
102
|
+
walk walk-ind walk-dict when when-let when-with with
|
103
|
+
with-dyns with-syms with-vars yield zero? zipcoll
|
104
|
+
)
|
105
|
+
end
|
106
|
+
|
107
|
+
def name_token(name)
|
108
|
+
if self.class.specials.include? name
|
109
|
+
Keyword
|
110
|
+
elsif self.class.bundled.include? name
|
111
|
+
Keyword::Reserved
|
112
|
+
else
|
113
|
+
Name::Function
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
punctuation = %r/[_!@$%^&*+=~<>.?\/-]/o
|
118
|
+
symbol = %r/([[:alpha:]]|#{punctuation})([[:word:]]|#{punctuation}|:)*/o
|
119
|
+
|
120
|
+
state :root do
|
121
|
+
rule %r/#.*?$/, Comment::Single
|
122
|
+
rule %r/\s+/m, Text::Whitespace
|
123
|
+
|
124
|
+
rule %r/(true|false|nil)\b/, Name::Constant
|
125
|
+
rule %r/(['~])(#{symbol})/ do
|
126
|
+
groups Operator, Str::Symbol
|
127
|
+
end
|
128
|
+
rule %r/:([[:word:]]|#{punctuation}|:)*/, Keyword::Constant
|
129
|
+
|
130
|
+
# radix-specified numbers
|
131
|
+
rule %r/[+-]?\d{1,2}r[\w.]+(&[+-]?\w+)?/, Num::Float
|
132
|
+
|
133
|
+
# hex numbers
|
134
|
+
rule %r/[+-]?0x\h[\h_]*(\.\h[\h_]*)?/, Num::Hex
|
135
|
+
rule %r/[+-]?0x\.\h[\h_]*/, Num::Hex
|
136
|
+
|
137
|
+
# decimal numbers (Janet treats all decimals as floats)
|
138
|
+
rule %r/[+-]?\d[\d_]*(\.\d[\d_]*)?([e][+-]?\d+)?/i, Num::Float
|
139
|
+
rule %r/[+-]?\.\d[\d_]*([e][+-]?\d+)?/i, Num::Float
|
140
|
+
|
141
|
+
rule %r/@?"/, Str::Double, :string
|
142
|
+
rule %r/@?(`+).*?\1/m, Str::Heredoc
|
143
|
+
|
144
|
+
rule %r/\(/, Punctuation, :function
|
145
|
+
|
146
|
+
rule %r/(')([\(\[])/ do
|
147
|
+
groups Operator, Punctuation
|
148
|
+
push :quote
|
149
|
+
end
|
150
|
+
|
151
|
+
rule %r/(~)([\(\[])/ do
|
152
|
+
groups Operator, Punctuation
|
153
|
+
push :quasiquote
|
154
|
+
end
|
155
|
+
|
156
|
+
rule %r/[\#~,';\|]/, Operator
|
157
|
+
|
158
|
+
rule %r/@?[({\[]/, Punctuation, :push
|
159
|
+
rule %r/[)}\]]/, Punctuation, :pop!
|
160
|
+
|
161
|
+
rule symbol, Name
|
162
|
+
end
|
163
|
+
|
164
|
+
state :string do
|
165
|
+
rule %r/"/, Str::Double, :pop!
|
166
|
+
rule %r/\\(u\h{4}|U\h{6})/, Str::Escape
|
167
|
+
rule %r/\\./, Str::Escape
|
168
|
+
rule %r/[^"\\]+/, Str::Double
|
169
|
+
end
|
170
|
+
|
171
|
+
state :function do
|
172
|
+
rule symbol do |m|
|
173
|
+
case m[0]
|
174
|
+
when "quote"
|
175
|
+
token Keyword
|
176
|
+
goto :quote
|
177
|
+
when "quasiquote"
|
178
|
+
token Keyword
|
179
|
+
goto :quasiquote
|
180
|
+
else
|
181
|
+
token name_token(m[0])
|
182
|
+
goto :root
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
mixin :root
|
187
|
+
end
|
188
|
+
|
189
|
+
state :quote do
|
190
|
+
rule %r/[\(\[]/, Punctuation, :push
|
191
|
+
rule symbol, Str::Symbol
|
192
|
+
mixin :root
|
193
|
+
end
|
194
|
+
|
195
|
+
state :quasiquote do
|
196
|
+
rule %r/(,)(\()/ do
|
197
|
+
groups Operator, Punctuation
|
198
|
+
push :function
|
199
|
+
end
|
200
|
+
rule %r/(\()(\s*)(unquote)(\s+)(\()/ do
|
201
|
+
groups Punctuation, Text, Keyword, Text, Punctuation
|
202
|
+
push :root
|
203
|
+
push :function
|
204
|
+
end
|
205
|
+
|
206
|
+
rule %r/(,)(#{symbol})/ do
|
207
|
+
groups Operator, Name
|
208
|
+
end
|
209
|
+
rule %r/(\()(\s*)(unquote)(\s+)(#{symbol})/ do
|
210
|
+
groups Punctuation, Text, Keyword, Text, Name
|
211
|
+
end
|
212
|
+
|
213
|
+
mixin :quote
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
@@ -19,6 +19,8 @@ module Rouge
|
|
19
19
|
mimetypes 'application/javascript', 'application/x-javascript',
|
20
20
|
'text/javascript', 'text/x-javascript'
|
21
21
|
|
22
|
+
# Pseudo-documentation: https://stackoverflow.com/questions/1661197/what-characters-are-valid-for-javascript-variable-names
|
23
|
+
|
22
24
|
def self.detect?(text)
|
23
25
|
return 1 if text.shebang?('node')
|
24
26
|
return 1 if text.shebang?('jsc')
|
@@ -138,7 +140,7 @@ module Rouge
|
|
138
140
|
end
|
139
141
|
|
140
142
|
def self.id_regex
|
141
|
-
/[$
|
143
|
+
/[\p{L}\p{Nl}$_][\p{Word}]*/io
|
142
144
|
end
|
143
145
|
|
144
146
|
id = self.id_regex
|
data/lib/rouge/lexers/jinja.rb
CHANGED
@@ -40,6 +40,17 @@ module Rouge
|
|
40
40
|
rule %r/{#/, Comment, :comment
|
41
41
|
rule %r/##.*/, Comment
|
42
42
|
|
43
|
+
# Raw and verbatim
|
44
|
+
rule %r/({%-?)(\s*)(raw|verbatim)(\s*)(-?%})/ do |m|
|
45
|
+
groups Comment::Preproc, Text, Keyword, Text, Comment::Preproc
|
46
|
+
case m[3]
|
47
|
+
when "raw"
|
48
|
+
push :raw
|
49
|
+
when "verbatim"
|
50
|
+
push :verbatim
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
43
54
|
# Statements
|
44
55
|
rule %r/\{\%/ do
|
45
56
|
token Comment::Preproc
|
@@ -114,11 +125,6 @@ module Rouge
|
|
114
125
|
end
|
115
126
|
|
116
127
|
state :statement do
|
117
|
-
rule %r/(raw|verbatim)(\s+)(\%\})/ do
|
118
|
-
groups Keyword, Text, Comment::Preproc
|
119
|
-
goto :raw
|
120
|
-
end
|
121
|
-
|
122
128
|
rule %r/(\w+\.?)/ do |m|
|
123
129
|
if self.class.keywords.include?(m[0])
|
124
130
|
groups Keyword
|
@@ -142,12 +148,21 @@ module Rouge
|
|
142
148
|
end
|
143
149
|
|
144
150
|
state :raw do
|
145
|
-
rule %r
|
151
|
+
rule %r/({%-?)(\s*)(endraw)(\s*)(-?%})/ do
|
146
152
|
groups Comment::Preproc, Text, Keyword, Text, Comment::Preproc
|
147
153
|
pop!
|
148
154
|
end
|
155
|
+
rule %r/[^{]+/, Text
|
156
|
+
rule %r/{/, Text
|
157
|
+
end
|
149
158
|
|
150
|
-
|
159
|
+
state :verbatim do
|
160
|
+
rule %r/({%-?)(\s*)(endverbatim)(\s*)(-?%})/ do
|
161
|
+
groups Comment::Preproc, Text, Keyword, Text, Comment::Preproc
|
162
|
+
pop!
|
163
|
+
end
|
164
|
+
rule %r/[^{]+/, Text
|
165
|
+
rule %r/{/, Text
|
151
166
|
end
|
152
167
|
end
|
153
168
|
end
|
data/lib/rouge/lexers/julia.rb
CHANGED
@@ -11,6 +11,8 @@ module Rouge
|
|
11
11
|
filenames '*.jl'
|
12
12
|
mimetypes 'text/x-julia', 'application/x-julia'
|
13
13
|
|
14
|
+
# Documentation: https://docs.julialang.org/en/v1/manual/variables/#Allowed-Variable-Names-1
|
15
|
+
|
14
16
|
def self.detect?(text)
|
15
17
|
return true if text.shebang? 'julia'
|
16
18
|
end
|
@@ -252,13 +254,13 @@ module Rouge
|
|
252
254
|
|
253
255
|
|
254
256
|
state :funcname do
|
255
|
-
rule %r/[
|
257
|
+
rule %r/[\p{L}\p{Nl}\p{S}_][\p{Word}\p{S}\p{Po}!]*/, Name::Function, :pop!
|
256
258
|
rule %r/\([^\s\w{]{1,2}\)/, Operator, :pop!
|
257
259
|
rule %r/[^\s\w{]{1,2}/, Operator, :pop!
|
258
260
|
end
|
259
261
|
|
260
262
|
state :typename do
|
261
|
-
rule %r/[
|
263
|
+
rule %r/[\p{L}\p{Nl}\p{S}_][\p{Word}\p{S}\p{Po}!]*/, Name::Class, :pop!
|
262
264
|
end
|
263
265
|
|
264
266
|
state :stringescape do
|
data/lib/rouge/lexers/perl.rb
CHANGED
@@ -65,7 +65,7 @@ module Rouge
|
|
65
65
|
end
|
66
66
|
|
67
67
|
state :root do
|
68
|
-
rule %r
|
68
|
+
rule %r/#.*/, Comment::Single
|
69
69
|
rule %r/^=[a-zA-Z0-9]+\s+.*?\n=cut/m, Comment::Multiline
|
70
70
|
rule %r/(?:#{keywords.join('|')})\b/, Keyword
|
71
71
|
|
@@ -99,6 +99,9 @@ module Rouge
|
|
99
99
|
re_tok, :balanced_regex
|
100
100
|
|
101
101
|
rule %r/\s+/, Text
|
102
|
+
|
103
|
+
rule(/(?=[a-z_]\w*(\s*#.*\n)*\s*=>)/i) { push :fat_comma }
|
104
|
+
|
102
105
|
rule %r/(?:#{builtins.join('|')})\b/, Name::Builtin
|
103
106
|
rule %r/((__(DIE|WARN)__)|(DATA|STD(IN|OUT|ERR)))\b/,
|
104
107
|
Name::Builtin::Pseudo
|
@@ -142,6 +145,13 @@ module Rouge
|
|
142
145
|
rule %r/.*?\n/, Str::Interpol
|
143
146
|
end
|
144
147
|
|
148
|
+
state :fat_comma do
|
149
|
+
rule %r/#.*/, Comment::Single
|
150
|
+
rule %r/\w+/, Str
|
151
|
+
rule %r/\s+/, Text
|
152
|
+
rule %r/=>/, Operator, :pop!
|
153
|
+
end
|
154
|
+
|
145
155
|
state :name_common do
|
146
156
|
rule %r/\w+::/, Name::Namespace
|
147
157
|
rule %r/[\w:]+/, Name::Variable, :pop!
|
@@ -178,16 +188,24 @@ module Rouge
|
|
178
188
|
end
|
179
189
|
|
180
190
|
state :sq do
|
181
|
-
rule %r/\\[']/, Str::Escape
|
191
|
+
rule %r/\\[\\']/, Str::Escape
|
182
192
|
rule %r/[^\\']+/, Str::Single
|
183
193
|
rule %r/'/, Punctuation, :pop!
|
194
|
+
rule %r/\\/, Str::Single
|
184
195
|
end
|
185
196
|
|
186
197
|
state :dq do
|
187
198
|
mixin :string_intp
|
188
|
-
rule %r/\\[\\
|
199
|
+
rule %r/\\[\\tnrabefluLUE"$@]/, Str::Escape
|
200
|
+
rule %r/\\0\d{2}/, Str::Escape
|
201
|
+
rule %r/\\o\{\d+\}/, Str::Escape
|
202
|
+
rule %r/\\x\h{2}/, Str::Escape
|
203
|
+
rule %r/\\x\{\h+\}/, Str::Escape
|
204
|
+
rule %r/\\c./, Str::Escape
|
205
|
+
rule %r/\\N\{[^\}]+\}/, Str::Escape
|
189
206
|
rule %r/[^\\"]+?/, Str::Double
|
190
207
|
rule %r/"/, Punctuation, :pop!
|
208
|
+
rule %r/\\/, Str::Escape
|
191
209
|
end
|
192
210
|
|
193
211
|
state :bq do
|
@@ -165,6 +165,7 @@ module Rouge
|
|
165
165
|
end
|
166
166
|
|
167
167
|
state :parameters do
|
168
|
+
rule %r/`./m, Str::Escape
|
168
169
|
rule %r/\s*?\n/, Text::Whitespace, :pop!
|
169
170
|
rule %r/[;(){}\]]/, Punctuation, :pop!
|
170
171
|
rule %r/[|=]/, Operator, :pop!
|
@@ -217,6 +218,7 @@ module Rouge
|
|
217
218
|
push :parameters unless m[3].nil?
|
218
219
|
end
|
219
220
|
|
221
|
+
rule %r/\?/, Name::Function, :parameters
|
220
222
|
rule %r/[-+*\/%=!.&|]/, Operator
|
221
223
|
rule %r/@\{/, Punctuation, :hasht
|
222
224
|
rule %r/@\(/, Punctuation, :array
|
data/lib/rouge/lexers/rego.rb
CHANGED
@@ -9,36 +9,51 @@ module Rouge
|
|
9
9
|
tag 'rego'
|
10
10
|
filenames '*.rego'
|
11
11
|
|
12
|
+
def self.constants
|
13
|
+
@constants ||= Set.new %w(
|
14
|
+
true false null
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.operators
|
19
|
+
@operators ||= Set.new %w(
|
20
|
+
as default else import not package some with
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
12
24
|
state :basic do
|
13
25
|
rule %r/\s+/, Text
|
14
26
|
rule %r/#.*/, Comment::Single
|
15
|
-
|
27
|
+
|
16
28
|
rule %r/[\[\](){}|.,;!]/, Punctuation
|
17
|
-
|
29
|
+
|
18
30
|
rule %r/"[^"]*"/, Str::Double
|
19
|
-
|
31
|
+
|
20
32
|
rule %r/-?\d+\.\d+([eE][+-]?\d+)?/, Num::Float
|
21
33
|
rule %r/-?\d+([eE][+-]?\d+)?/, Num
|
22
34
|
|
23
35
|
rule %r/\\u[0-9a-fA-F]{4}/, Num::Hex
|
24
36
|
rule %r/\\["\/bfnrt]/, Str::Escape
|
25
37
|
end
|
26
|
-
|
27
|
-
state :atoms do
|
28
|
-
rule %r/(true|false|null)/, Keyword::Constant
|
29
|
-
rule %r/[[:word:]]*/, Str::Symbol
|
30
|
-
end
|
31
|
-
|
38
|
+
|
32
39
|
state :operators do
|
33
40
|
rule %r/(=|!=|>=|<=|>|<|\+|-|\*|%|\/|\||&|:=)/, Operator
|
34
|
-
rule %r/(default|not|package|import|as|with|else|some)/, Operator
|
35
41
|
rule %r/[\/:?@^~]+/, Operator
|
36
42
|
end
|
37
|
-
|
43
|
+
|
38
44
|
state :root do
|
39
45
|
mixin :basic
|
40
46
|
mixin :operators
|
41
|
-
|
47
|
+
|
48
|
+
rule %r/[[:word:]]+/ do |m|
|
49
|
+
if self.class.constants.include? m[0]
|
50
|
+
token Keyword::Constant
|
51
|
+
elsif self.class.operators.include? m[0]
|
52
|
+
token Operator::Word
|
53
|
+
else
|
54
|
+
token Name
|
55
|
+
end
|
56
|
+
end
|
42
57
|
end
|
43
58
|
end
|
44
59
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Rouge
|
5
|
+
module Lexers
|
6
|
+
class SSH < RegexLexer
|
7
|
+
tag 'ssh'
|
8
|
+
|
9
|
+
title "SSH Config File"
|
10
|
+
desc 'A lexer for SSH configuration files'
|
11
|
+
filenames 'ssh_config'
|
12
|
+
|
13
|
+
state :root do
|
14
|
+
rule %r/[a-z0-9]+/i, Keyword, :statement
|
15
|
+
mixin :base
|
16
|
+
end
|
17
|
+
|
18
|
+
state :statement do
|
19
|
+
rule %r/\n/, Text, :pop!
|
20
|
+
rule %r/(?:yes|no|confirm|ask|always|auto|none|force)\b/, Name::Constant
|
21
|
+
|
22
|
+
rule %r/\d+/, Num
|
23
|
+
rule %r/[^#\s;{}$\\]+/, Text
|
24
|
+
mixin :base
|
25
|
+
end
|
26
|
+
|
27
|
+
state :base do
|
28
|
+
rule %r/\s+/, Text
|
29
|
+
rule %r/#.*/, Comment::Single
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/rouge/lexers/twig.rb
CHANGED
@@ -17,10 +17,10 @@ module Rouge
|
|
17
17
|
|
18
18
|
def self.keywords
|
19
19
|
@@keywords ||= %w(as do extends flush from import include use else starts
|
20
|
-
ends with without autoescape endautoescape block
|
21
|
-
embed endembed filter endfilter for endfor
|
22
|
-
macro endmacro sandbox endsandbox set endset
|
23
|
-
spaceless endspaceless
|
20
|
+
ends with without autoescape endautoescape block
|
21
|
+
endblock embed endembed filter endfilter for endfor
|
22
|
+
if endif macro endmacro sandbox endsandbox set endset
|
23
|
+
spaceless endspaceless)
|
24
24
|
end
|
25
25
|
|
26
26
|
def self.tests
|
data/lib/rouge/lexers/xml.rb
CHANGED
@@ -12,6 +12,8 @@ module Rouge
|
|
12
12
|
mimetypes 'text/xml', 'application/xml', 'image/svg+xml',
|
13
13
|
'application/rss+xml', 'application/atom+xml'
|
14
14
|
|
15
|
+
# Documentation: https://www.w3.org/TR/xml11/#charsets and https://www.w3.org/TR/xml11/#sec-suggested-names
|
16
|
+
|
15
17
|
def self.detect?(text)
|
16
18
|
return false if text.doctype?(/html/)
|
17
19
|
return true if text =~ /\A<\?xml\b/
|
@@ -27,10 +29,10 @@ module Rouge
|
|
27
29
|
rule %r/<![^>]*>/, Comment::Preproc
|
28
30
|
|
29
31
|
# open tags
|
30
|
-
rule %r(<\s*[\
|
32
|
+
rule %r(<\s*[\p{L}:_][\p{Word}\p{Cf}:.·-]*)m, Name::Tag, :tag
|
31
33
|
|
32
34
|
# self-closing tags
|
33
|
-
rule %r(<\s*/\s*[\
|
35
|
+
rule %r(<\s*/\s*[\p{L}:_][\p{Word}\p{Cf}:.·-]*\s*>)m, Name::Tag
|
34
36
|
end
|
35
37
|
|
36
38
|
state :comment do
|
@@ -41,7 +43,7 @@ module Rouge
|
|
41
43
|
|
42
44
|
state :tag do
|
43
45
|
rule %r/\s+/m, Text
|
44
|
-
rule %r/[\
|
46
|
+
rule %r/[\p{L}:_][\p{Word}\p{Cf}:.·-]*\s*=/m, Name::Attribute, :attr
|
45
47
|
rule %r(/?\s*>), Name::Tag, :pop!
|
46
48
|
end
|
47
49
|
|
data/lib/rouge/lexers/yaml.rb
CHANGED
@@ -11,6 +11,8 @@ module Rouge
|
|
11
11
|
aliases 'yml'
|
12
12
|
filenames '*.yaml', '*.yml'
|
13
13
|
|
14
|
+
# Documentation: https://yaml.org/spec/1.2/spec.html
|
15
|
+
|
14
16
|
def self.detect?(text)
|
15
17
|
# look for the %YAML directive
|
16
18
|
return true if text =~ /\A\s*%YAML/m
|
@@ -165,15 +167,15 @@ module Rouge
|
|
165
167
|
)x, Keyword::Type
|
166
168
|
|
167
169
|
# an anchor
|
168
|
-
rule %r/&[\
|
170
|
+
rule %r/&[\p{L}\p{Nl}\p{Nd}_-]+/, Name::Label
|
169
171
|
|
170
172
|
# an alias
|
171
|
-
rule %r/\*[\
|
173
|
+
rule %r/\*[\p{L}\p{Nl}\p{Nd}_-]+/, Name::Variable
|
172
174
|
end
|
173
175
|
|
174
176
|
state :block_nodes do
|
175
177
|
# implicit key
|
176
|
-
rule %r/((
|
178
|
+
rule %r/((?:[\p{L}\p{Nl}\p{Nd}_][\p{L}\p{Nl}\p{Nd}\p{Blank}_-]*)?)(:)(?=\s|$)/ do |m|
|
177
179
|
groups Name::Attribute, Punctuation::Indicator
|
178
180
|
set_indent m[0], :implicit => true
|
179
181
|
end
|
data/lib/rouge/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rouge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.21.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeanine Adkisson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Rouge aims to a be a simple, easy-to-extend drop-in replacement for pygments.
|
14
14
|
email:
|
@@ -39,6 +39,7 @@ files:
|
|
39
39
|
- lib/rouge/demos/biml
|
40
40
|
- lib/rouge/demos/bpf
|
41
41
|
- lib/rouge/demos/brainfuck
|
42
|
+
- lib/rouge/demos/brightscript
|
42
43
|
- lib/rouge/demos/bsl
|
43
44
|
- lib/rouge/demos/c
|
44
45
|
- lib/rouge/demos/ceylon
|
@@ -108,6 +109,7 @@ files:
|
|
108
109
|
- lib/rouge/demos/irb
|
109
110
|
- lib/rouge/demos/irb_output
|
110
111
|
- lib/rouge/demos/isbl
|
112
|
+
- lib/rouge/demos/janet
|
111
113
|
- lib/rouge/demos/java
|
112
114
|
- lib/rouge/demos/javascript
|
113
115
|
- lib/rouge/demos/jinja
|
@@ -190,6 +192,7 @@ files:
|
|
190
192
|
- lib/rouge/demos/sparql
|
191
193
|
- lib/rouge/demos/sqf
|
192
194
|
- lib/rouge/demos/sql
|
195
|
+
- lib/rouge/demos/ssh
|
193
196
|
- lib/rouge/demos/supercollider
|
194
197
|
- lib/rouge/demos/swift
|
195
198
|
- lib/rouge/demos/tap
|
@@ -257,6 +260,7 @@ files:
|
|
257
260
|
- lib/rouge/lexers/biml.rb
|
258
261
|
- lib/rouge/lexers/bpf.rb
|
259
262
|
- lib/rouge/lexers/brainfuck.rb
|
263
|
+
- lib/rouge/lexers/brightscript.rb
|
260
264
|
- lib/rouge/lexers/bsl.rb
|
261
265
|
- lib/rouge/lexers/c.rb
|
262
266
|
- lib/rouge/lexers/ceylon.rb
|
@@ -327,6 +331,7 @@ files:
|
|
327
331
|
- lib/rouge/lexers/irb.rb
|
328
332
|
- lib/rouge/lexers/isbl.rb
|
329
333
|
- lib/rouge/lexers/isbl/builtins.rb
|
334
|
+
- lib/rouge/lexers/janet.rb
|
330
335
|
- lib/rouge/lexers/java.rb
|
331
336
|
- lib/rouge/lexers/javascript.rb
|
332
337
|
- lib/rouge/lexers/jinja.rb
|
@@ -420,6 +425,7 @@ files:
|
|
420
425
|
- lib/rouge/lexers/sqf.rb
|
421
426
|
- lib/rouge/lexers/sqf/keywords.rb
|
422
427
|
- lib/rouge/lexers/sql.rb
|
428
|
+
- lib/rouge/lexers/ssh.rb
|
423
429
|
- lib/rouge/lexers/supercollider.rb
|
424
430
|
- lib/rouge/lexers/swift.rb
|
425
431
|
- lib/rouge/lexers/tap.rb
|