rouge 1.10.1 → 1.11.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/cli.rb +1 -1
- data/lib/rouge/demos/actionscript +4 -0
- data/lib/rouge/demos/apiblueprint +33 -0
- data/lib/rouge/demos/biml +38 -0
- data/lib/rouge/demos/ceylon +7 -0
- data/lib/rouge/demos/cmake +7 -0
- data/lib/rouge/demos/coq +11 -0
- data/lib/rouge/demos/d +16 -0
- data/lib/rouge/demos/eiffel +30 -0
- data/lib/rouge/demos/fortran +22 -0
- data/lib/rouge/demos/gradle +10 -0
- data/lib/rouge/demos/jinja +9 -0
- data/lib/rouge/demos/jsonnet +28 -0
- data/lib/rouge/demos/julia +11 -0
- data/lib/rouge/demos/nasm +26 -0
- data/lib/rouge/demos/objective_c +4 -0
- data/lib/rouge/demos/protobuf +5 -0
- data/lib/rouge/demos/shell_session +10 -0
- data/lib/rouge/demos/smarty +12 -0
- data/lib/rouge/demos/tap +5 -0
- data/lib/rouge/demos/twig +9 -0
- data/lib/rouge/demos/typescript +1 -0
- data/lib/rouge/demos/verilog +27 -0
- data/lib/rouge/demos/viml +14 -5
- data/lib/rouge/formatters/html_wrapper.rb +11 -0
- data/lib/rouge/formatters/terminal256.rb +1 -1
- data/lib/rouge/lexer.rb +4 -2
- data/lib/rouge/lexers/actionscript.rb +195 -0
- data/lib/rouge/lexers/apache.rb +23 -20
- data/lib/rouge/lexers/apache/keywords.yml +721 -410
- data/lib/rouge/lexers/apiblueprint.rb +51 -0
- data/lib/rouge/lexers/biml.rb +41 -0
- data/lib/rouge/lexers/c.rb +7 -2
- data/lib/rouge/lexers/ceylon.rb +123 -0
- data/lib/rouge/lexers/clojure.rb +1 -1
- data/lib/rouge/lexers/cmake.rb +206 -0
- data/lib/rouge/lexers/coffeescript.rb +1 -1
- data/lib/rouge/lexers/coq.rb +187 -0
- data/lib/rouge/lexers/cpp.rb +12 -1
- data/lib/rouge/lexers/csharp.rb +12 -5
- data/lib/rouge/lexers/css.rb +2 -0
- data/lib/rouge/lexers/d.rb +176 -0
- data/lib/rouge/lexers/diff.rb +9 -9
- data/lib/rouge/lexers/eiffel.rb +65 -0
- data/lib/rouge/lexers/fortran.rb +142 -0
- data/lib/rouge/lexers/gradle.rb +37 -0
- data/lib/rouge/lexers/groovy.rb +2 -2
- data/lib/rouge/lexers/ini.rb +2 -2
- data/lib/rouge/lexers/java.rb +11 -8
- data/lib/rouge/lexers/javascript.rb +2 -1
- data/lib/rouge/lexers/jinja.rb +137 -0
- data/lib/rouge/lexers/jsonnet.rb +151 -0
- data/lib/rouge/lexers/julia.rb +172 -0
- data/lib/rouge/lexers/markdown.rb +1 -0
- data/lib/rouge/lexers/nasm.rb +203 -0
- data/lib/rouge/lexers/objective_c.rb +11 -0
- data/lib/rouge/lexers/php.rb +1 -1
- data/lib/rouge/lexers/powershell.rb +1 -1
- data/lib/rouge/lexers/protobuf.rb +70 -0
- data/lib/rouge/lexers/python.rb +23 -0
- data/lib/rouge/lexers/r.rb +53 -20
- data/lib/rouge/lexers/ruby.rb +4 -4
- data/lib/rouge/lexers/rust.rb +2 -2
- data/lib/rouge/lexers/shell_session.rb +29 -0
- data/lib/rouge/lexers/smarty.rb +91 -0
- data/lib/rouge/lexers/sql.rb +1 -1
- data/lib/rouge/lexers/swift.rb +20 -5
- data/lib/rouge/lexers/tap.rb +91 -0
- data/lib/rouge/lexers/twig.rb +37 -0
- data/lib/rouge/lexers/typescript.rb +46 -0
- data/lib/rouge/lexers/verilog.rb +164 -0
- data/lib/rouge/regex_lexer.rb +1 -1
- data/lib/rouge/version.rb +1 -1
- data/rouge.gemspec +1 -1
- metadata +47 -6
- data/lib/rouge/formatters/html_inline.rb +0 -20
- data/lib/rouge/formatters/html_linewise.rb +0 -31
@@ -0,0 +1,51 @@
|
|
1
|
+
module Rouge
|
2
|
+
module Lexers
|
3
|
+
load_lexer 'markdown.rb'
|
4
|
+
|
5
|
+
class APIBlueprint < Markdown
|
6
|
+
title 'API Blueprint'
|
7
|
+
desc 'Markdown based API description language.'
|
8
|
+
|
9
|
+
tag 'apiblueprint'
|
10
|
+
aliases 'apiblueprint', 'apib'
|
11
|
+
filenames '*.apib'
|
12
|
+
mimetypes 'text/vnd.apiblueprint'
|
13
|
+
|
14
|
+
def self.analyze_text(text)
|
15
|
+
return 1 if text.start_with?('FORMAT: 1A\n')
|
16
|
+
end
|
17
|
+
|
18
|
+
prepend :root do
|
19
|
+
# Metadata
|
20
|
+
rule(/(\S+)(:\s*)(.*)$/) do
|
21
|
+
groups Name::Variable, Punctuation, Literal::String
|
22
|
+
end
|
23
|
+
|
24
|
+
# Resource Group
|
25
|
+
rule(/^(#+)(\s*Group\s+)(.*)$/) do
|
26
|
+
groups Punctuation, Keyword, Generic::Heading
|
27
|
+
end
|
28
|
+
|
29
|
+
# Resource \ Action
|
30
|
+
rule(/^(#+)(.*)(\[.*\])$/) do
|
31
|
+
groups Punctuation, Generic::Heading, Literal::String
|
32
|
+
end
|
33
|
+
|
34
|
+
# Relation
|
35
|
+
rule(/^([\+\-\*])(\s*Relation:)(\s*.*)$/) do
|
36
|
+
groups Punctuation, Keyword, Literal::String
|
37
|
+
end
|
38
|
+
|
39
|
+
# MSON
|
40
|
+
rule(/^(\s+[\+\-\*]\s*)(Attributes|Parameters)(.*)$/) do
|
41
|
+
groups Punctuation, Keyword, Literal::String
|
42
|
+
end
|
43
|
+
|
44
|
+
# Request/Response
|
45
|
+
rule(/^([\+\-\*]\s*)(Request|Response)(\s+\d\d\d)?(.*)$/) do
|
46
|
+
groups Punctuation, Keyword, Literal::Number, Literal::String
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Rouge
|
2
|
+
module Lexers
|
3
|
+
load_lexer 'xml.rb'
|
4
|
+
|
5
|
+
class BIML < XML
|
6
|
+
title "BIML"
|
7
|
+
desc "BIML, Business Intelligence Markup Language"
|
8
|
+
tag 'biml'
|
9
|
+
filenames '*.biml'
|
10
|
+
|
11
|
+
def self.analyze_text(text)
|
12
|
+
return 1 if text =~ /<\s*Biml\b/
|
13
|
+
end
|
14
|
+
|
15
|
+
prepend :root do
|
16
|
+
rule %r(<#@\s*)m, Name::Tag, :directive_tag
|
17
|
+
|
18
|
+
rule %r(<#[=]?\s*)m, Name::Tag, :directive_as_csharp
|
19
|
+
end
|
20
|
+
|
21
|
+
prepend :attr do
|
22
|
+
#TODO: how to deal with embedded <# tags inside a attribute string
|
23
|
+
#rule %r("<#[=]?\s*)m, Name::Tag, :directive_as_csharp
|
24
|
+
end
|
25
|
+
|
26
|
+
state :directive_as_csharp do
|
27
|
+
rule /\s*#>\s*/m, Name::Tag, :pop!
|
28
|
+
rule %r(.*?(?=\s*#>\s*))m do
|
29
|
+
delegate CSharp
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
state :directive_tag do
|
34
|
+
rule /\s+/m, Text
|
35
|
+
rule /[\w.:-]+\s*=/m, Name::Attribute, :attr
|
36
|
+
rule /[\w]+\s*/m, Name::Attribute
|
37
|
+
rule %r(/?\s*#>), Name::Tag, :pop!
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/rouge/lexers/c.rb
CHANGED
@@ -19,6 +19,9 @@ module Rouge
|
|
19
19
|
auto break case const continue default do else enum extern
|
20
20
|
for goto if register restricted return sizeof static struct
|
21
21
|
switch typedef union volatile virtual while
|
22
|
+
|
23
|
+
_Alignas _Alignof _Atomic _Generic _Imaginary
|
24
|
+
_Noreturn _Static_assert _Thread_local
|
22
25
|
)
|
23
26
|
end
|
24
27
|
|
@@ -38,6 +41,8 @@ module Rouge
|
|
38
41
|
int_fast64_t uint_fast8_t uint_fast16_t uint_fast32_t
|
39
42
|
uint_fast64_t intptr_t uintptr_t intmax_t
|
40
43
|
uintmax_t
|
44
|
+
|
45
|
+
char16_t char32_t
|
41
46
|
)
|
42
47
|
end
|
43
48
|
|
@@ -96,8 +101,8 @@ module Rouge
|
|
96
101
|
|
97
102
|
state :statements do
|
98
103
|
mixin :whitespace
|
99
|
-
rule /L?"/, Str, :string
|
100
|
-
rule %r(L?'(\\.|\\[0-7]{1,3}|\\x[a-f0-9]{1,2}|[^\\'\n])')i, Str::Char
|
104
|
+
rule /(u8|u|U|L)?"/, Str, :string
|
105
|
+
rule %r((u8|u|U|L)?'(\\.|\\[0-7]{1,3}|\\x[a-f0-9]{1,2}|[^\\'\n])')i, Str::Char
|
101
106
|
rule %r((\d+[.]\d*|[.]?\d+)e[+-]?\d+[lu]*)i, Num::Float
|
102
107
|
rule %r(\d+e[+-]?\d+[lu]*)i, Num::Float
|
103
108
|
rule /0x[0-9a-f]+[lu]*/i, Num::Hex
|
@@ -0,0 +1,123 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
|
3
|
+
module Rouge
|
4
|
+
module Lexers
|
5
|
+
class Ceylon < RegexLexer
|
6
|
+
tag 'ceylon'
|
7
|
+
filenames '*.ceylon'
|
8
|
+
mimetypes 'text/x-ceylon'
|
9
|
+
|
10
|
+
title "Ceylon"
|
11
|
+
desc 'Say more, more clearly.'
|
12
|
+
|
13
|
+
keywords = %w(
|
14
|
+
break case catch continue else finally for in
|
15
|
+
if return switch this throw try while is exists dynamic
|
16
|
+
nonempty then outer assert let
|
17
|
+
)
|
18
|
+
|
19
|
+
keywords_declaration = %w(
|
20
|
+
abstracts extends satisfies super given of out assign
|
21
|
+
)
|
22
|
+
|
23
|
+
keywords_type = %w(
|
24
|
+
function value void new
|
25
|
+
)
|
26
|
+
|
27
|
+
keywords_namespace = %w(
|
28
|
+
assembly module package
|
29
|
+
)
|
30
|
+
|
31
|
+
keywords_constant = %w(
|
32
|
+
true false null
|
33
|
+
)
|
34
|
+
|
35
|
+
annotations = %w(
|
36
|
+
shared abstract formal default actual variable deprecated small
|
37
|
+
late literal doc by see throws optional license tagged final native
|
38
|
+
annotation sealed
|
39
|
+
)
|
40
|
+
|
41
|
+
state :whitespace do
|
42
|
+
rule %r([^\S\n]+), Text
|
43
|
+
rule %r(//.*?\n), Comment::Single
|
44
|
+
rule %r(/\*), Comment::Multiline
|
45
|
+
end
|
46
|
+
|
47
|
+
state :root do
|
48
|
+
mixin :whitespace
|
49
|
+
|
50
|
+
rule %r((shared|abstract|formal|default|actual|variable|deprecated|small|
|
51
|
+
late|literal|doc|by|see|throws|optional|license|tagged|final|native|
|
52
|
+
annotation|sealed)\b), Name::Decorator
|
53
|
+
|
54
|
+
rule %r((break|case|catch|continue|else|finally|for|in|
|
55
|
+
if|return|switch|this|throw|try|while|is|exists|dynamic|
|
56
|
+
nonempty|then|outer|assert|let)\b), Keyword
|
57
|
+
|
58
|
+
rule %r((abstracts|extends|satisfies|super|given|of|out|assign)\b), Keyword::Declaration
|
59
|
+
|
60
|
+
rule %r((function|value|void|new)\b), Keyword::Type
|
61
|
+
|
62
|
+
rule %r((assembly|module|package)(\s+)) do
|
63
|
+
groups Keyword::Namespace, Text
|
64
|
+
push :import
|
65
|
+
end
|
66
|
+
|
67
|
+
rule %r((true|false|null)\b), Keyword::Constant
|
68
|
+
|
69
|
+
rule %r((class|interface|object|alias)(\s+)) do
|
70
|
+
groups Keyword::Declaration, Text
|
71
|
+
push :class
|
72
|
+
end
|
73
|
+
|
74
|
+
rule %r((import)(\s+)) do
|
75
|
+
groups Keyword::Namespace, Text
|
76
|
+
push :import
|
77
|
+
end
|
78
|
+
|
79
|
+
rule %r("(\\\\|\\"|[^"])*"), Literal::String
|
80
|
+
rule %r('\\.'|'[^\\]'|'\\\{#[0-9a-fA-F]{4}\}'), Literal::String::Char
|
81
|
+
rule %r(".*``.*``.*"', String::Interpol
|
82
|
+
rule %r(\.)([a-z_]\w*)) do
|
83
|
+
groups Operator, Name::Attribute
|
84
|
+
end
|
85
|
+
rule %r([a-zA-Z_]\w*:), Name::Label
|
86
|
+
rule %r((\\I[a-z]|[A-Z])\w*), Name::Decorator
|
87
|
+
rule %r([a-zA-Z_]\w*), Name
|
88
|
+
rule %r([~^*!%&\[\](){}<>|+=:;,./?-`]), Operator
|
89
|
+
rule %r(\d{1,3}(_\d{3})+\.\d{1,3}(_\d{3})+[kMGTPmunpf]?), Literal::Number::Float
|
90
|
+
rule %r(\d{1,3}(_\d{3})+\.[0-9]+([eE][+-]?[0-9]+)?[kMGTPmunpf]?),
|
91
|
+
Literal::Number::Float
|
92
|
+
rule %r([0-9][0-9]*\.\d{1,3}(_\d{3})+[kMGTPmunpf]?), Literal::Number::Float
|
93
|
+
rule %r([0-9][0-9]*\.[0-9]+([eE][+-]?[0-9]+)?[kMGTPmunpf]?),
|
94
|
+
Literal::Number::Float
|
95
|
+
rule %r(#([0-9a-fA-F]{4})(_[0-9a-fA-F]{4})+), Literal::Number::Hex
|
96
|
+
rule %r(#[0-9a-fA-F]+), Literal::Number::Hex
|
97
|
+
rule %r(\$([01]{4})(_[01]{4})+), Literal::Number::Bin
|
98
|
+
rule %r(\$[01]+), Literal::Number::Bin
|
99
|
+
rule %r(\d{1,3}(_\d{3})+[kMGTP]?), Literal::Number::Integer
|
100
|
+
rule %r([0-9]+[kMGTP]?), Literal::Number::Integer
|
101
|
+
rule %r(\n), Text
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
state :class do
|
106
|
+
mixin :whitespace
|
107
|
+
rule %r([A-Za-z_]\w*), Name::Class, :pop!
|
108
|
+
end
|
109
|
+
|
110
|
+
state :import do
|
111
|
+
rule %r([a-z][\w.]*), Name::Namespace, :pop!
|
112
|
+
rule %r("(\\\\|\\"|[^"])*"), Literal::String, :pop!
|
113
|
+
end
|
114
|
+
|
115
|
+
state :comment do
|
116
|
+
rule %r([^*/]), Comment.Multiline
|
117
|
+
rule %r(/\*), Comment::Multiline, :push!
|
118
|
+
rule %r(\*/), Comment::Multiline, :pop!
|
119
|
+
rule %r([*/]), Comment::Multiline
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
data/lib/rouge/lexers/clojure.rb
CHANGED
@@ -0,0 +1,206 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
|
3
|
+
module Rouge
|
4
|
+
module Lexers
|
5
|
+
class CMake < RegexLexer
|
6
|
+
title 'CMake'
|
7
|
+
desc 'The cross-platform, open-source build system'
|
8
|
+
tag 'cmake'
|
9
|
+
filenames 'CMakeLists.txt', '*.cmake'
|
10
|
+
mimetypes 'text/x-cmake'
|
11
|
+
|
12
|
+
SPACE = '[ \t]'
|
13
|
+
BRACKET_OPEN = '\[=*\['
|
14
|
+
|
15
|
+
STATES_MAP = {
|
16
|
+
:root => Text,
|
17
|
+
:bracket_string => Str::Double,
|
18
|
+
:quoted_argument => Str::Double,
|
19
|
+
:bracket_comment => Comment::Multiline,
|
20
|
+
:variable_reference => Name::Variable,
|
21
|
+
}
|
22
|
+
|
23
|
+
BUILTIN_COMMANDS = Set.new %w[
|
24
|
+
add_compile_options
|
25
|
+
add_custom_command
|
26
|
+
add_custom_target
|
27
|
+
add_definitions
|
28
|
+
add_dependencies
|
29
|
+
add_executable
|
30
|
+
add_library
|
31
|
+
add_subdirectory
|
32
|
+
add_test
|
33
|
+
aux_source_directory
|
34
|
+
break
|
35
|
+
build_command
|
36
|
+
build_name
|
37
|
+
cmake_host_system_information
|
38
|
+
cmake_minimum_required
|
39
|
+
cmake_policy
|
40
|
+
configure_file
|
41
|
+
create_test_sourcelist
|
42
|
+
define_property
|
43
|
+
else
|
44
|
+
elseif
|
45
|
+
enable_language
|
46
|
+
enable_testing
|
47
|
+
endforeach
|
48
|
+
endfunction
|
49
|
+
endif
|
50
|
+
endmacro
|
51
|
+
endwhile
|
52
|
+
exec_program
|
53
|
+
execute_process
|
54
|
+
export
|
55
|
+
export_library_dependencies
|
56
|
+
file
|
57
|
+
find_file
|
58
|
+
find_library
|
59
|
+
find_package
|
60
|
+
find_path
|
61
|
+
find_program
|
62
|
+
fltk_wrap_ui
|
63
|
+
foreach
|
64
|
+
function
|
65
|
+
get_cmake_property
|
66
|
+
get_directory_property
|
67
|
+
get_filename_component
|
68
|
+
get_property
|
69
|
+
get_source_file_property
|
70
|
+
get_target_property
|
71
|
+
get_test_property
|
72
|
+
if
|
73
|
+
include
|
74
|
+
include_directories
|
75
|
+
include_external_msproject
|
76
|
+
include_regular_expression
|
77
|
+
install
|
78
|
+
install_files
|
79
|
+
install_programs
|
80
|
+
install_targets
|
81
|
+
link_directories
|
82
|
+
link_libraries
|
83
|
+
list
|
84
|
+
load_cache
|
85
|
+
load_command
|
86
|
+
macro
|
87
|
+
make_directory
|
88
|
+
mark_as_advanced
|
89
|
+
math
|
90
|
+
message
|
91
|
+
option
|
92
|
+
output_required_files
|
93
|
+
project
|
94
|
+
qt_wrap_cpp
|
95
|
+
qt_wrap_ui
|
96
|
+
remove
|
97
|
+
remove_definitions
|
98
|
+
return
|
99
|
+
separate_arguments
|
100
|
+
set
|
101
|
+
set_directory_properties
|
102
|
+
set_property
|
103
|
+
set_source_files_properties
|
104
|
+
set_target_properties
|
105
|
+
set_tests_properties
|
106
|
+
site_name
|
107
|
+
source_group
|
108
|
+
string
|
109
|
+
subdir_depends
|
110
|
+
subdirs
|
111
|
+
target_compile_definitions
|
112
|
+
target_compile_options
|
113
|
+
target_include_directories
|
114
|
+
target_link_libraries
|
115
|
+
try_compile
|
116
|
+
try_run
|
117
|
+
unset
|
118
|
+
use_mangled_mesa
|
119
|
+
utility_source
|
120
|
+
variable_requires
|
121
|
+
variable_watch
|
122
|
+
while
|
123
|
+
write_file
|
124
|
+
]
|
125
|
+
|
126
|
+
state :default do
|
127
|
+
rule /\r\n?|\n/ do
|
128
|
+
token STATES_MAP[state.name.to_sym]
|
129
|
+
end
|
130
|
+
rule /./ do
|
131
|
+
token STATES_MAP[state.name.to_sym]
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
state :variable_interpolation do
|
136
|
+
rule /\$\{/ do
|
137
|
+
token Str::Interpol
|
138
|
+
push :variable_reference
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
state :bracket_close do
|
143
|
+
rule /\]=*\]/ do |m|
|
144
|
+
token STATES_MAP[state.name.to_sym]
|
145
|
+
goto :root if m[0].length == @bracket_len
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
state :root do
|
150
|
+
mixin :variable_interpolation
|
151
|
+
|
152
|
+
rule /#{SPACE}/, Text
|
153
|
+
rule /[()]/, Punctuation
|
154
|
+
|
155
|
+
rule /##{BRACKET_OPEN}/ do |m|
|
156
|
+
token Comment::Multiline
|
157
|
+
@bracket_len = m[0].length - 1 # decount '#'
|
158
|
+
goto :bracket_comment
|
159
|
+
end
|
160
|
+
rule /#{BRACKET_OPEN}/ do |m|
|
161
|
+
token Str::Double
|
162
|
+
@bracket_len = m[0].length
|
163
|
+
goto :bracket_string
|
164
|
+
end
|
165
|
+
|
166
|
+
rule /"/, Str::Double, :quoted_argument
|
167
|
+
|
168
|
+
rule /([A-Za-z_][A-Za-z0-9_]*)(#{SPACE}*)(\()/ do |m|
|
169
|
+
groups BUILTIN_COMMANDS.include?(m[1]) ? Name::Builtin : Name::Function, Text, Punctuation
|
170
|
+
end
|
171
|
+
|
172
|
+
rule /#.*/, Comment::Single
|
173
|
+
|
174
|
+
mixin :default
|
175
|
+
end
|
176
|
+
|
177
|
+
state :bracket_string do
|
178
|
+
mixin :bracket_close
|
179
|
+
mixin :variable_interpolation
|
180
|
+
mixin :default
|
181
|
+
end
|
182
|
+
|
183
|
+
state :bracket_comment do
|
184
|
+
mixin :bracket_close
|
185
|
+
mixin :default
|
186
|
+
end
|
187
|
+
|
188
|
+
state :variable_reference do
|
189
|
+
mixin :variable_interpolation
|
190
|
+
|
191
|
+
rule /}/, Str::Interpol, :pop!
|
192
|
+
|
193
|
+
mixin :default
|
194
|
+
end
|
195
|
+
|
196
|
+
state :quoted_argument do
|
197
|
+
mixin :variable_interpolation
|
198
|
+
|
199
|
+
rule /"/, Str::Double, :root
|
200
|
+
rule /\\[()#" \\$@^trn;]/, Str::Escape
|
201
|
+
|
202
|
+
mixin :default
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|