rouge-alda 3.3.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 +7 -0
- data/Gemfile +28 -0
- data/LICENSE +186 -0
- data/bin/rougify +18 -0
- data/lib/rouge/cli.rb +432 -0
- data/lib/rouge/demos/abap +6 -0
- data/lib/rouge/demos/actionscript +4 -0
- data/lib/rouge/demos/alda +10 -0
- data/lib/rouge/demos/apache +21 -0
- data/lib/rouge/demos/apiblueprint +33 -0
- data/lib/rouge/demos/applescript +2 -0
- data/lib/rouge/demos/awk +4 -0
- data/lib/rouge/demos/biml +38 -0
- data/lib/rouge/demos/bsl +7 -0
- data/lib/rouge/demos/c +8 -0
- data/lib/rouge/demos/ceylon +7 -0
- data/lib/rouge/demos/cfscript +18 -0
- data/lib/rouge/demos/clojure +5 -0
- data/lib/rouge/demos/cmake +7 -0
- data/lib/rouge/demos/coffeescript +5 -0
- data/lib/rouge/demos/common_lisp +1 -0
- data/lib/rouge/demos/conf +4 -0
- data/lib/rouge/demos/console +6 -0
- data/lib/rouge/demos/coq +13 -0
- data/lib/rouge/demos/cpp +8 -0
- data/lib/rouge/demos/crystal +45 -0
- data/lib/rouge/demos/csharp +5 -0
- data/lib/rouge/demos/css +4 -0
- data/lib/rouge/demos/d +16 -0
- data/lib/rouge/demos/dart +6 -0
- data/lib/rouge/demos/diff +7 -0
- data/lib/rouge/demos/digdag +19 -0
- data/lib/rouge/demos/docker +9 -0
- data/lib/rouge/demos/dot +5 -0
- data/lib/rouge/demos/eiffel +30 -0
- data/lib/rouge/demos/elixir +1 -0
- data/lib/rouge/demos/elm +4 -0
- data/lib/rouge/demos/erb +1 -0
- data/lib/rouge/demos/erlang +7 -0
- data/lib/rouge/demos/factor +5 -0
- data/lib/rouge/demos/fortran +22 -0
- data/lib/rouge/demos/fsharp +12 -0
- data/lib/rouge/demos/gherkin +17 -0
- data/lib/rouge/demos/glsl +14 -0
- data/lib/rouge/demos/go +7 -0
- data/lib/rouge/demos/gradle +10 -0
- data/lib/rouge/demos/graphql +17 -0
- data/lib/rouge/demos/groovy +9 -0
- data/lib/rouge/demos/hack +5 -0
- data/lib/rouge/demos/haml +5 -0
- data/lib/rouge/demos/handlebars +7 -0
- data/lib/rouge/demos/haskell +6 -0
- data/lib/rouge/demos/hcl +7 -0
- data/lib/rouge/demos/html +8 -0
- data/lib/rouge/demos/http +14 -0
- data/lib/rouge/demos/hylang +10 -0
- data/lib/rouge/demos/idlang +8 -0
- data/lib/rouge/demos/igorpro +9 -0
- data/lib/rouge/demos/ini +4 -0
- data/lib/rouge/demos/io +11 -0
- data/lib/rouge/demos/irb +4 -0
- data/lib/rouge/demos/irb_output +2 -0
- data/lib/rouge/demos/java +5 -0
- data/lib/rouge/demos/javascript +1 -0
- data/lib/rouge/demos/jinja +9 -0
- data/lib/rouge/demos/json +1 -0
- data/lib/rouge/demos/json-doc +1 -0
- data/lib/rouge/demos/jsonnet +28 -0
- data/lib/rouge/demos/jsp +29 -0
- data/lib/rouge/demos/jsx +17 -0
- data/lib/rouge/demos/julia +11 -0
- data/lib/rouge/demos/kotlin +3 -0
- data/lib/rouge/demos/lasso +12 -0
- data/lib/rouge/demos/liquid +11 -0
- data/lib/rouge/demos/literate_coffeescript +3 -0
- data/lib/rouge/demos/literate_haskell +7 -0
- data/lib/rouge/demos/llvm +20 -0
- data/lib/rouge/demos/lua +12 -0
- data/lib/rouge/demos/m68k +16 -0
- data/lib/rouge/demos/make +6 -0
- data/lib/rouge/demos/markdown +4 -0
- data/lib/rouge/demos/mathematica +8 -0
- data/lib/rouge/demos/matlab +6 -0
- data/lib/rouge/demos/moonscript +16 -0
- data/lib/rouge/demos/mosel +10 -0
- data/lib/rouge/demos/mxml +22 -0
- data/lib/rouge/demos/nasm +26 -0
- data/lib/rouge/demos/nginx +5 -0
- data/lib/rouge/demos/nim +27 -0
- data/lib/rouge/demos/nix +19 -0
- data/lib/rouge/demos/objective_c +18 -0
- data/lib/rouge/demos/ocaml +12 -0
- data/lib/rouge/demos/pascal +14 -0
- data/lib/rouge/demos/perl +5 -0
- data/lib/rouge/demos/php +3 -0
- data/lib/rouge/demos/plaintext +1 -0
- data/lib/rouge/demos/plist +142 -0
- data/lib/rouge/demos/pony +17 -0
- data/lib/rouge/demos/powershell +49 -0
- data/lib/rouge/demos/praat +26 -0
- data/lib/rouge/demos/prolog +9 -0
- data/lib/rouge/demos/prometheus +9 -0
- data/lib/rouge/demos/properties +7 -0
- data/lib/rouge/demos/protobuf +5 -0
- data/lib/rouge/demos/puppet +6 -0
- data/lib/rouge/demos/python +6 -0
- data/lib/rouge/demos/q +2 -0
- data/lib/rouge/demos/qml +9 -0
- data/lib/rouge/demos/r +8 -0
- data/lib/rouge/demos/racket +24 -0
- data/lib/rouge/demos/ruby +9 -0
- data/lib/rouge/demos/rust +12 -0
- data/lib/rouge/demos/sass +3 -0
- data/lib/rouge/demos/scala +3 -0
- data/lib/rouge/demos/scheme +4 -0
- data/lib/rouge/demos/scss +5 -0
- data/lib/rouge/demos/sed +4 -0
- data/lib/rouge/demos/shell +2 -0
- data/lib/rouge/demos/sieve +10 -0
- data/lib/rouge/demos/slim +17 -0
- data/lib/rouge/demos/smalltalk +6 -0
- data/lib/rouge/demos/smarty +12 -0
- data/lib/rouge/demos/sml +4 -0
- data/lib/rouge/demos/sqf +14 -0
- data/lib/rouge/demos/sql +1 -0
- data/lib/rouge/demos/swift +5 -0
- data/lib/rouge/demos/tap +5 -0
- data/lib/rouge/demos/tcl +1 -0
- data/lib/rouge/demos/terraform +31 -0
- data/lib/rouge/demos/tex +1 -0
- data/lib/rouge/demos/toml +9 -0
- data/lib/rouge/demos/tsx +17 -0
- data/lib/rouge/demos/tulip +13 -0
- data/lib/rouge/demos/turtle +26 -0
- data/lib/rouge/demos/twig +9 -0
- data/lib/rouge/demos/typescript +1 -0
- data/lib/rouge/demos/vala +8 -0
- data/lib/rouge/demos/vb +4 -0
- data/lib/rouge/demos/verilog +27 -0
- data/lib/rouge/demos/vhdl +23 -0
- data/lib/rouge/demos/viml +14 -0
- data/lib/rouge/demos/vue +11 -0
- data/lib/rouge/demos/wollok +11 -0
- data/lib/rouge/demos/xml +2 -0
- data/lib/rouge/demos/yaml +4 -0
- data/lib/rouge/formatter.rb +76 -0
- data/lib/rouge/formatters/html.rb +38 -0
- data/lib/rouge/formatters/html_inline.rb +31 -0
- data/lib/rouge/formatters/html_legacy.rb +45 -0
- data/lib/rouge/formatters/html_linewise.rb +28 -0
- data/lib/rouge/formatters/html_pygments.rb +18 -0
- data/lib/rouge/formatters/html_table.rb +62 -0
- data/lib/rouge/formatters/null.rb +20 -0
- data/lib/rouge/formatters/terminal256.rb +181 -0
- data/lib/rouge/guesser.rb +57 -0
- data/lib/rouge/guessers/disambiguation.rb +106 -0
- data/lib/rouge/guessers/filename.rb +27 -0
- data/lib/rouge/guessers/glob_mapping.rb +45 -0
- data/lib/rouge/guessers/mimetype.rb +16 -0
- data/lib/rouge/guessers/modeline.rb +46 -0
- data/lib/rouge/guessers/source.rb +31 -0
- data/lib/rouge/guessers/util.rb +34 -0
- data/lib/rouge/lexer.rb +462 -0
- data/lib/rouge/lexers/abap.rb +240 -0
- data/lib/rouge/lexers/actionscript.rb +196 -0
- data/lib/rouge/lexers/alda.rb +43 -0
- data/lib/rouge/lexers/apache/keywords.yml +764 -0
- data/lib/rouge/lexers/apache.rb +73 -0
- data/lib/rouge/lexers/apiblueprint.rb +49 -0
- data/lib/rouge/lexers/apple_script.rb +369 -0
- data/lib/rouge/lexers/awk.rb +162 -0
- data/lib/rouge/lexers/biml.rb +43 -0
- data/lib/rouge/lexers/bsl.rb +82 -0
- data/lib/rouge/lexers/c.rb +213 -0
- data/lib/rouge/lexers/ceylon.rb +124 -0
- data/lib/rouge/lexers/cfscript.rb +154 -0
- data/lib/rouge/lexers/clojure.rb +113 -0
- data/lib/rouge/lexers/cmake.rb +207 -0
- data/lib/rouge/lexers/coffeescript.rb +175 -0
- data/lib/rouge/lexers/common_lisp.rb +346 -0
- data/lib/rouge/lexers/conf.rb +25 -0
- data/lib/rouge/lexers/console.rb +137 -0
- data/lib/rouge/lexers/coq.rb +188 -0
- data/lib/rouge/lexers/cpp.rb +79 -0
- data/lib/rouge/lexers/crystal.rb +430 -0
- data/lib/rouge/lexers/csharp.rb +115 -0
- data/lib/rouge/lexers/css.rb +274 -0
- data/lib/rouge/lexers/d.rb +177 -0
- data/lib/rouge/lexers/dart.rb +105 -0
- data/lib/rouge/lexers/diff.rb +33 -0
- data/lib/rouge/lexers/digdag.rb +70 -0
- data/lib/rouge/lexers/docker.rb +51 -0
- data/lib/rouge/lexers/dot.rb +69 -0
- data/lib/rouge/lexers/eiffel.rb +66 -0
- data/lib/rouge/lexers/elixir.rb +134 -0
- data/lib/rouge/lexers/elm.rb +90 -0
- data/lib/rouge/lexers/erb.rb +53 -0
- data/lib/rouge/lexers/erlang.rb +115 -0
- data/lib/rouge/lexers/factor.rb +303 -0
- data/lib/rouge/lexers/fortran.rb +178 -0
- data/lib/rouge/lexers/fsharp.rb +119 -0
- data/lib/rouge/lexers/gherkin/keywords.rb +16 -0
- data/lib/rouge/lexers/gherkin.rb +138 -0
- data/lib/rouge/lexers/glsl.rb +136 -0
- data/lib/rouge/lexers/go.rb +175 -0
- data/lib/rouge/lexers/gradle.rb +38 -0
- data/lib/rouge/lexers/graphql.rb +254 -0
- data/lib/rouge/lexers/groovy.rb +113 -0
- data/lib/rouge/lexers/hack.rb +49 -0
- data/lib/rouge/lexers/haml.rb +230 -0
- data/lib/rouge/lexers/handlebars.rb +80 -0
- data/lib/rouge/lexers/haskell.rb +198 -0
- data/lib/rouge/lexers/hcl.rb +163 -0
- data/lib/rouge/lexers/html.rb +140 -0
- data/lib/rouge/lexers/http.rb +81 -0
- data/lib/rouge/lexers/hylang.rb +94 -0
- data/lib/rouge/lexers/idlang.rb +312 -0
- data/lib/rouge/lexers/igorpro.rb +664 -0
- data/lib/rouge/lexers/ini.rb +54 -0
- data/lib/rouge/lexers/io.rb +69 -0
- data/lib/rouge/lexers/irb.rb +67 -0
- data/lib/rouge/lexers/java.rb +88 -0
- data/lib/rouge/lexers/javascript.rb +283 -0
- data/lib/rouge/lexers/jinja.rb +138 -0
- data/lib/rouge/lexers/json.rb +30 -0
- data/lib/rouge/lexers/json_doc.rb +24 -0
- data/lib/rouge/lexers/jsonnet.rb +152 -0
- data/lib/rouge/lexers/jsp.rb +120 -0
- data/lib/rouge/lexers/jsx.rb +104 -0
- data/lib/rouge/lexers/julia.rb +167 -0
- data/lib/rouge/lexers/kotlin.rb +127 -0
- data/lib/rouge/lexers/lasso/keywords.yml +446 -0
- data/lib/rouge/lexers/lasso.rb +215 -0
- data/lib/rouge/lexers/liquid.rb +288 -0
- data/lib/rouge/lexers/literate_coffeescript.rb +34 -0
- data/lib/rouge/lexers/literate_haskell.rb +37 -0
- data/lib/rouge/lexers/llvm.rb +81 -0
- data/lib/rouge/lexers/lua/builtins.rb +24 -0
- data/lib/rouge/lexers/lua.rb +126 -0
- data/lib/rouge/lexers/m68k.rb +144 -0
- data/lib/rouge/lexers/make.rb +113 -0
- data/lib/rouge/lexers/markdown.rb +155 -0
- data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
- data/lib/rouge/lexers/mathematica.rb +96 -0
- data/lib/rouge/lexers/matlab/builtins.rb +13 -0
- data/lib/rouge/lexers/matlab.rb +72 -0
- data/lib/rouge/lexers/moonscript.rb +115 -0
- data/lib/rouge/lexers/mosel.rb +232 -0
- data/lib/rouge/lexers/mxml.rb +69 -0
- data/lib/rouge/lexers/nasm.rb +199 -0
- data/lib/rouge/lexers/nginx.rb +72 -0
- data/lib/rouge/lexers/nim.rb +153 -0
- data/lib/rouge/lexers/nix.rb +211 -0
- data/lib/rouge/lexers/objective_c.rb +195 -0
- data/lib/rouge/lexers/ocaml.rb +101 -0
- data/lib/rouge/lexers/pascal.rb +67 -0
- data/lib/rouge/lexers/perl.rb +201 -0
- data/lib/rouge/lexers/php/builtins.rb +196 -0
- data/lib/rouge/lexers/php.rb +194 -0
- data/lib/rouge/lexers/plain_text.rb +27 -0
- data/lib/rouge/lexers/plist.rb +47 -0
- data/lib/rouge/lexers/pony.rb +94 -0
- data/lib/rouge/lexers/powershell.rb +679 -0
- data/lib/rouge/lexers/praat.rb +351 -0
- data/lib/rouge/lexers/prolog.rb +61 -0
- data/lib/rouge/lexers/prometheus.rb +123 -0
- data/lib/rouge/lexers/properties.rb +52 -0
- data/lib/rouge/lexers/protobuf.rb +71 -0
- data/lib/rouge/lexers/puppet.rb +129 -0
- data/lib/rouge/lexers/python.rb +247 -0
- data/lib/rouge/lexers/q.rb +125 -0
- data/lib/rouge/lexers/qml.rb +74 -0
- data/lib/rouge/lexers/r.rb +90 -0
- data/lib/rouge/lexers/racket.rb +545 -0
- data/lib/rouge/lexers/ruby.rb +439 -0
- data/lib/rouge/lexers/rust.rb +198 -0
- data/lib/rouge/lexers/sass/common.rb +181 -0
- data/lib/rouge/lexers/sass.rb +75 -0
- data/lib/rouge/lexers/scala.rb +143 -0
- data/lib/rouge/lexers/scheme.rb +113 -0
- data/lib/rouge/lexers/scss.rb +35 -0
- data/lib/rouge/lexers/sed.rb +173 -0
- data/lib/rouge/lexers/shell.rb +190 -0
- data/lib/rouge/lexers/sieve.rb +97 -0
- data/lib/rouge/lexers/slim.rb +229 -0
- data/lib/rouge/lexers/smalltalk.rb +117 -0
- data/lib/rouge/lexers/smarty.rb +81 -0
- data/lib/rouge/lexers/sml.rb +345 -0
- data/lib/rouge/lexers/sqf/commands.rb +15 -0
- data/lib/rouge/lexers/sqf.rb +109 -0
- data/lib/rouge/lexers/sql.rb +141 -0
- data/lib/rouge/lexers/swift.rb +182 -0
- data/lib/rouge/lexers/tap.rb +89 -0
- data/lib/rouge/lexers/tcl.rb +193 -0
- data/lib/rouge/lexers/terraform.rb +105 -0
- data/lib/rouge/lexers/tex.rb +70 -0
- data/lib/rouge/lexers/toml.rb +68 -0
- data/lib/rouge/lexers/tsx.rb +20 -0
- data/lib/rouge/lexers/tulip.rb +108 -0
- data/lib/rouge/lexers/turtle.rb +64 -0
- data/lib/rouge/lexers/twig.rb +40 -0
- data/lib/rouge/lexers/typescript/common.rb +34 -0
- data/lib/rouge/lexers/typescript.rb +23 -0
- data/lib/rouge/lexers/vala.rb +78 -0
- data/lib/rouge/lexers/vb.rb +165 -0
- data/lib/rouge/lexers/verilog.rb +165 -0
- data/lib/rouge/lexers/vhdl.rb +98 -0
- data/lib/rouge/lexers/viml/keywords.rb +14 -0
- data/lib/rouge/lexers/viml.rb +102 -0
- data/lib/rouge/lexers/vue.rb +124 -0
- data/lib/rouge/lexers/wollok.rb +104 -0
- data/lib/rouge/lexers/xml.rb +58 -0
- data/lib/rouge/lexers/yaml.rb +374 -0
- data/lib/rouge/plugins/redcarpet.rb +31 -0
- data/lib/rouge/regex_lexer.rb +442 -0
- data/lib/rouge/template_lexer.rb +21 -0
- data/lib/rouge/text_analyzer.rb +50 -0
- data/lib/rouge/theme.rb +214 -0
- data/lib/rouge/themes/base16.rb +131 -0
- data/lib/rouge/themes/colorful.rb +68 -0
- data/lib/rouge/themes/github.rb +72 -0
- data/lib/rouge/themes/gruvbox.rb +168 -0
- data/lib/rouge/themes/igor_pro.rb +21 -0
- data/lib/rouge/themes/molokai.rb +83 -0
- data/lib/rouge/themes/monokai.rb +93 -0
- data/lib/rouge/themes/monokai_sublime.rb +92 -0
- data/lib/rouge/themes/pastie.rb +70 -0
- data/lib/rouge/themes/thankful_eyes.rb +75 -0
- data/lib/rouge/themes/tulip.rb +70 -0
- data/lib/rouge/token.rb +183 -0
- data/lib/rouge/util.rb +102 -0
- data/lib/rouge/version.rb +8 -0
- data/lib/rouge.rb +84 -0
- data/rouge.gemspec +25 -0
- metadata +384 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
load_lexer 'c.rb'
|
|
7
|
+
|
|
8
|
+
class Cpp < C
|
|
9
|
+
title "C++"
|
|
10
|
+
desc "The C++ programming language"
|
|
11
|
+
|
|
12
|
+
tag 'cpp'
|
|
13
|
+
aliases 'c++'
|
|
14
|
+
# the many varied filenames of c++ source files...
|
|
15
|
+
filenames '*.cpp', '*.hpp',
|
|
16
|
+
'*.c++', '*.h++',
|
|
17
|
+
'*.cc', '*.hh',
|
|
18
|
+
'*.cxx', '*.hxx',
|
|
19
|
+
'*.pde', '*.ino',
|
|
20
|
+
'*.tpp'
|
|
21
|
+
mimetypes 'text/x-c++hdr', 'text/x-c++src'
|
|
22
|
+
|
|
23
|
+
def self.keywords
|
|
24
|
+
@keywords ||= super + Set.new(%w(
|
|
25
|
+
asm auto catch const_cast delete dynamic_cast explicit export
|
|
26
|
+
friend mutable namespace new operator private protected public
|
|
27
|
+
reinterpret_cast restrict size_of static_cast template this throw
|
|
28
|
+
throws typeid typename using virtual final override
|
|
29
|
+
|
|
30
|
+
alignas alignof constexpr decltype noexcept static_assert
|
|
31
|
+
thread_local try
|
|
32
|
+
))
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.keywords_type
|
|
36
|
+
@keywords_type ||= super + Set.new(%w(
|
|
37
|
+
bool
|
|
38
|
+
))
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.reserved
|
|
42
|
+
@reserved ||= super + Set.new(%w(
|
|
43
|
+
__virtual_inheritance __uuidof __super __single_inheritance
|
|
44
|
+
__multiple_inheritance __interface __event
|
|
45
|
+
))
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
id = /[a-zA-Z_][a-zA-Z0-9_]*/
|
|
49
|
+
|
|
50
|
+
prepend :root do
|
|
51
|
+
# Offload C++ extensions, http://offload.codeplay.com/
|
|
52
|
+
rule /(?:__offload|__blockingoffload|__outer)\b/, Keyword::Pseudo
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# digits with optional inner quotes
|
|
56
|
+
# see www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf
|
|
57
|
+
dq = /\d('?\d)*/
|
|
58
|
+
|
|
59
|
+
prepend :statements do
|
|
60
|
+
rule /class\b/, Keyword, :classname
|
|
61
|
+
rule %r((#{dq}[.]#{dq}?|[.]#{dq})(e[+-]?#{dq}[lu]*)?)i, Num::Float
|
|
62
|
+
rule %r(#{dq}e[+-]?#{dq}[lu]*)i, Num::Float
|
|
63
|
+
rule /0x\h('?\h)*[lu]*/i, Num::Hex
|
|
64
|
+
rule /0[0-7]('?[0-7])*[lu]*/i, Num::Oct
|
|
65
|
+
rule /#{dq}[lu]*/i, Num::Integer
|
|
66
|
+
rule /\bnullptr\b/, Name::Builtin
|
|
67
|
+
rule /(?:u8|u|U|L)?R"([a-zA-Z0-9_{}\[\]#<>%:;.?*\+\-\/\^&|~!=,"']{,16})\(.*?\)\1"/m, Str
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
state :classname do
|
|
71
|
+
rule id, Name::Class, :pop!
|
|
72
|
+
|
|
73
|
+
# template specification
|
|
74
|
+
rule /\s*(?=>)/m, Text, :pop!
|
|
75
|
+
mixin :whitespace
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Crystal < RegexLexer
|
|
7
|
+
title "Crystal"
|
|
8
|
+
desc "Crystal The Programming Language (crystal-lang.org)"
|
|
9
|
+
tag 'crystal'
|
|
10
|
+
aliases 'cr'
|
|
11
|
+
filenames '*.cr'
|
|
12
|
+
|
|
13
|
+
mimetypes 'text/x-crystal', 'application/x-crystal'
|
|
14
|
+
|
|
15
|
+
def self.detect?(text)
|
|
16
|
+
return true if text.shebang? 'crystal'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
state :symbols do
|
|
20
|
+
# symbols
|
|
21
|
+
rule %r(
|
|
22
|
+
: # initial :
|
|
23
|
+
@{0,2} # optional ivar, for :@foo and :@@foo
|
|
24
|
+
[a-z_]\w*[!?]? # the symbol
|
|
25
|
+
)xi, Str::Symbol
|
|
26
|
+
|
|
27
|
+
# special symbols
|
|
28
|
+
rule %r(:(?:\*\*|[-+]@|[/\%&\|^`~]|\[\]=?|<<|>>|<=?>|<=?|===?)),
|
|
29
|
+
Str::Symbol
|
|
30
|
+
|
|
31
|
+
rule /:'(\\\\|\\'|[^'])*'/, Str::Symbol
|
|
32
|
+
rule /:"/, Str::Symbol, :simple_sym
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
state :sigil_strings do
|
|
36
|
+
# %-sigiled strings
|
|
37
|
+
# %(abc), %[abc], %<abc>, %.abc., %r.abc., etc
|
|
38
|
+
delimiter_map = { '{' => '}', '[' => ']', '(' => ')', '<' => '>' }
|
|
39
|
+
rule /%([rqswQWxiI])?([^\w\s])/ do |m|
|
|
40
|
+
open = Regexp.escape(m[2])
|
|
41
|
+
close = Regexp.escape(delimiter_map[m[2]] || m[2])
|
|
42
|
+
interp = /[rQWxI]/ === m[1]
|
|
43
|
+
toktype = Str::Other
|
|
44
|
+
|
|
45
|
+
puts " open: #{open.inspect}" if @debug
|
|
46
|
+
puts " close: #{close.inspect}" if @debug
|
|
47
|
+
|
|
48
|
+
# regexes
|
|
49
|
+
if m[1] == 'r'
|
|
50
|
+
toktype = Str::Regex
|
|
51
|
+
push :regex_flags
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
token toktype
|
|
55
|
+
|
|
56
|
+
push do
|
|
57
|
+
rule /\\[##{open}#{close}\\]/, Str::Escape
|
|
58
|
+
# nesting rules only with asymmetric delimiters
|
|
59
|
+
if open != close
|
|
60
|
+
rule /#{open}/ do
|
|
61
|
+
token toktype
|
|
62
|
+
push
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
rule /#{close}/, toktype, :pop!
|
|
66
|
+
|
|
67
|
+
if interp
|
|
68
|
+
mixin :string_intp_escaped
|
|
69
|
+
rule /#/, toktype
|
|
70
|
+
else
|
|
71
|
+
rule /[\\#]/, toktype
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
rule /[^##{open}#{close}\\]+/m, toktype
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
state :strings do
|
|
80
|
+
mixin :symbols
|
|
81
|
+
rule /\b[a-z_]\w*?[?!]?:\s+/, Str::Symbol, :expr_start
|
|
82
|
+
rule /'(\\\\|\\'|[^'])*'/, Str::Single
|
|
83
|
+
rule /"/, Str::Double, :simple_string
|
|
84
|
+
rule /(?<!\.)`/, Str::Backtick, :simple_backtick
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
state :regex_flags do
|
|
88
|
+
rule /[mixounse]*/, Str::Regex, :pop!
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# double-quoted string and symbol
|
|
92
|
+
[[:string, Str::Double, '"'],
|
|
93
|
+
[:sym, Str::Symbol, '"'],
|
|
94
|
+
[:backtick, Str::Backtick, '`']].each do |name, tok, fin|
|
|
95
|
+
state :"simple_#{name}" do
|
|
96
|
+
mixin :string_intp_escaped
|
|
97
|
+
rule /[^\\#{fin}#]+/m, tok
|
|
98
|
+
rule /[\\#]/, tok
|
|
99
|
+
rule /#{fin}/, tok, :pop!
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
keywords = %w(
|
|
104
|
+
BEGIN END alias begin break case defined\? do else elsif end
|
|
105
|
+
ensure for if ifdef in next redo rescue raise retry return super then
|
|
106
|
+
undef unless until when while yield lib fun type of as
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
keywords_pseudo = %w(
|
|
110
|
+
initialize new loop include extend raise attr_reader attr_writer
|
|
111
|
+
attr_accessor alias_method attr catch throw private module_function
|
|
112
|
+
public protected true false nil __FILE__ __LINE__
|
|
113
|
+
getter getter? getter! property property? property! struct record
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
builtins_g = %w(
|
|
117
|
+
abort ancestors at_exit
|
|
118
|
+
caller catch chomp chop clone constants
|
|
119
|
+
display dup eval exec exit extend fail fork format freeze
|
|
120
|
+
getc gets global_variables gsub hash id included_modules
|
|
121
|
+
inspect instance_eval instance_method instance_methods
|
|
122
|
+
lambda loop method method_missing
|
|
123
|
+
methods module_eval name object_id open p print printf
|
|
124
|
+
proc putc puts raise rand
|
|
125
|
+
readline readlines require scan select self send
|
|
126
|
+
sleep split sprintf srand sub syscall system
|
|
127
|
+
test throw to_a to_s trap warn
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
builtins_q = %w(
|
|
131
|
+
eql equal include is_a iterator kind_of nil
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
builtins_b = %w(chomp chop exit gsub sub)
|
|
135
|
+
|
|
136
|
+
start do
|
|
137
|
+
push :expr_start
|
|
138
|
+
@heredoc_queue = []
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
state :whitespace do
|
|
142
|
+
mixin :inline_whitespace
|
|
143
|
+
rule /\n\s*/m, Text, :expr_start
|
|
144
|
+
rule /#.*$/, Comment::Single
|
|
145
|
+
|
|
146
|
+
rule %r(=begin\b.*?\n=end\b)m, Comment::Multiline
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
state :inline_whitespace do
|
|
150
|
+
rule /[ \t\r]+/, Text
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
state :root do
|
|
154
|
+
mixin :whitespace
|
|
155
|
+
rule /__END__/, Comment::Preproc, :end_part
|
|
156
|
+
|
|
157
|
+
rule /0_?[0-7]+(?:_[0-7]+)*/, Num::Oct
|
|
158
|
+
rule /0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*/, Num::Hex
|
|
159
|
+
rule /0b[01]+(?:_[01]+)*/, Num::Bin
|
|
160
|
+
rule /\d+\.\d+(e[\+\-]?\d+)?/, Num::Float
|
|
161
|
+
rule /[\d]+(?:_\d+)*/, Num::Integer
|
|
162
|
+
|
|
163
|
+
rule /@\[([^\]]+)\]/, Name::Decorator
|
|
164
|
+
|
|
165
|
+
# names
|
|
166
|
+
rule /@@[a-z_]\w*/i, Name::Variable::Class
|
|
167
|
+
rule /@[a-z_]\w*/i, Name::Variable::Instance
|
|
168
|
+
rule /\$\w+/, Name::Variable::Global
|
|
169
|
+
rule %r(\$[!@&`'+~=/\\,;.<>_*\$?:"]), Name::Variable::Global
|
|
170
|
+
rule /\$-[0adFiIlpvw]/, Name::Variable::Global
|
|
171
|
+
rule /::/, Operator
|
|
172
|
+
|
|
173
|
+
mixin :strings
|
|
174
|
+
|
|
175
|
+
rule /(?:#{keywords.join('|')})\b/, Keyword, :expr_start
|
|
176
|
+
rule /(?:#{keywords_pseudo.join('|')})\b/, Keyword::Pseudo, :expr_start
|
|
177
|
+
|
|
178
|
+
rule %r(
|
|
179
|
+
(module)
|
|
180
|
+
(\s+)
|
|
181
|
+
([a-zA-Z_][a-zA-Z0-9_]*(::[a-zA-Z_][a-zA-Z0-9_]*)*)
|
|
182
|
+
)x do
|
|
183
|
+
groups Keyword, Text, Name::Namespace
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
rule /(def\b)(\s*)/ do
|
|
187
|
+
groups Keyword, Text
|
|
188
|
+
push :funcname
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
rule /(class\b)(\s*)/ do
|
|
192
|
+
groups Keyword, Text
|
|
193
|
+
push :classname
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
rule /(?:#{builtins_q.join('|')})[?]/, Name::Builtin, :expr_start
|
|
197
|
+
rule /(?:#{builtins_b.join('|')})!/, Name::Builtin, :expr_start
|
|
198
|
+
rule /(?<!\.)(?:#{builtins_g.join('|')})\b/,
|
|
199
|
+
Name::Builtin, :method_call
|
|
200
|
+
|
|
201
|
+
mixin :has_heredocs
|
|
202
|
+
|
|
203
|
+
# `..` and `...` for ranges must have higher priority than `.`
|
|
204
|
+
# Otherwise, they will be parsed as :method_call
|
|
205
|
+
rule /\.{2,3}/, Operator, :expr_start
|
|
206
|
+
|
|
207
|
+
rule /[A-Z][a-zA-Z0-9_]*/, Name::Constant, :method_call
|
|
208
|
+
rule /(\.|::)(\s*)([a-z_]\w*[!?]?|[*%&^`~+-\/\[<>=])/ do
|
|
209
|
+
groups Punctuation, Text, Name::Function
|
|
210
|
+
push :method_call
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
rule /[a-zA-Z_]\w*[?!]/, Name, :expr_start
|
|
214
|
+
rule /[a-zA-Z_]\w*/, Name, :method_call
|
|
215
|
+
rule /\*\*|<<?|>>?|>=|<=|<=>|=~|={3}|!~|&&?|\|\||\./,
|
|
216
|
+
Operator, :expr_start
|
|
217
|
+
rule /[-+\/*%=<>&!^|~]=?/, Operator, :expr_start
|
|
218
|
+
rule(/[?]/) { token Punctuation; push :ternary; push :expr_start }
|
|
219
|
+
rule %r<[\[({,:\\;/]>, Punctuation, :expr_start
|
|
220
|
+
rule %r<[\])}]>, Punctuation
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
state :has_heredocs do
|
|
224
|
+
rule /(?<!\w)(<<[-~]?)(["`']?)([a-zA-Z_]\w*)(\2)/ do |m|
|
|
225
|
+
token Operator, m[1]
|
|
226
|
+
token Name::Constant, "#{m[2]}#{m[3]}#{m[4]}"
|
|
227
|
+
@heredoc_queue << [['<<-', '<<~'].include?(m[1]), m[3]]
|
|
228
|
+
push :heredoc_queue unless state? :heredoc_queue
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
rule /(<<[-~]?)(["'])(\2)/ do |m|
|
|
232
|
+
token Operator, m[1]
|
|
233
|
+
token Name::Constant, "#{m[2]}#{m[3]}#{m[4]}"
|
|
234
|
+
@heredoc_queue << [['<<-', '<<~'].include?(m[1]), '']
|
|
235
|
+
push :heredoc_queue unless state? :heredoc_queue
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
state :heredoc_queue do
|
|
240
|
+
rule /(?=\n)/ do
|
|
241
|
+
goto :resolve_heredocs
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
mixin :root
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
state :resolve_heredocs do
|
|
248
|
+
mixin :string_intp_escaped
|
|
249
|
+
|
|
250
|
+
rule /\n/, Str::Heredoc, :test_heredoc
|
|
251
|
+
rule /[#\\\n]/, Str::Heredoc
|
|
252
|
+
rule /[^#\\\n]+/, Str::Heredoc
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
state :test_heredoc do
|
|
256
|
+
rule /[^#\\\n]*$/ do |m|
|
|
257
|
+
tolerant, heredoc_name = @heredoc_queue.first
|
|
258
|
+
check = tolerant ? m[0].strip : m[0].rstrip
|
|
259
|
+
|
|
260
|
+
# check if we found the end of the heredoc
|
|
261
|
+
puts " end heredoc check #{check.inspect} = #{heredoc_name.inspect}" if @debug
|
|
262
|
+
if check == heredoc_name
|
|
263
|
+
@heredoc_queue.shift
|
|
264
|
+
# if there's no more, we're done looking.
|
|
265
|
+
pop! if @heredoc_queue.empty?
|
|
266
|
+
token Name::Constant
|
|
267
|
+
else
|
|
268
|
+
token Str::Heredoc
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
pop!
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
rule(//) { pop! }
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
state :funcname do
|
|
278
|
+
rule /\s+/, Text
|
|
279
|
+
rule /\(/, Punctuation, :defexpr
|
|
280
|
+
rule %r(
|
|
281
|
+
(?:([a-zA-Z_][\w_]*)(\.))?
|
|
282
|
+
(
|
|
283
|
+
[a-zA-Z_][\w_]*[!?]? |
|
|
284
|
+
\*\*? | [-+]@? | [/%&\|^`~] | \[\]=? |
|
|
285
|
+
<<? | >>? | <=>? | >= | ===?
|
|
286
|
+
)
|
|
287
|
+
)x do |m|
|
|
288
|
+
puts "matches: #{[m[0], m[1], m[2], m[3]].inspect}" if @debug
|
|
289
|
+
groups Name::Class, Operator, Name::Function
|
|
290
|
+
pop!
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
rule(//) { pop! }
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
state :classname do
|
|
297
|
+
rule /\s+/, Text
|
|
298
|
+
rule /\(/ do
|
|
299
|
+
token Punctuation
|
|
300
|
+
push :defexpr
|
|
301
|
+
push :expr_start
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
# class << expr
|
|
305
|
+
rule /<</ do
|
|
306
|
+
token Operator
|
|
307
|
+
goto :expr_start
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
rule /[A-Z_]\w*/, Name::Class, :pop!
|
|
311
|
+
|
|
312
|
+
rule(//) { pop! }
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
state :ternary do
|
|
316
|
+
rule(/:(?!:)/) { token Punctuation; goto :expr_start }
|
|
317
|
+
|
|
318
|
+
mixin :root
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
state :defexpr do
|
|
322
|
+
rule /(\))(\.|::)?/ do
|
|
323
|
+
groups Punctuation, Operator
|
|
324
|
+
pop!
|
|
325
|
+
end
|
|
326
|
+
rule /\(/ do
|
|
327
|
+
token Punctuation
|
|
328
|
+
push :defexpr
|
|
329
|
+
push :expr_start
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
mixin :root
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
state :in_interp do
|
|
336
|
+
rule /}/, Str::Interpol, :pop!
|
|
337
|
+
mixin :root
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
state :string_intp do
|
|
341
|
+
rule /[#][{]/, Str::Interpol, :in_interp
|
|
342
|
+
rule /#(@@?|\$)[a-z_]\w*/i, Str::Interpol
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
state :string_intp_escaped do
|
|
346
|
+
mixin :string_intp
|
|
347
|
+
rule /\\([\\abefnrstv#"']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})/,
|
|
348
|
+
Str::Escape
|
|
349
|
+
rule /\\./, Str::Escape
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
state :method_call do
|
|
353
|
+
rule %r(/) do
|
|
354
|
+
token Operator
|
|
355
|
+
goto :expr_start
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
rule(/(?=\n)/) { pop! }
|
|
359
|
+
|
|
360
|
+
rule(//) { goto :method_call_spaced }
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
state :method_call_spaced do
|
|
364
|
+
mixin :whitespace
|
|
365
|
+
|
|
366
|
+
rule %r([%/]=) do
|
|
367
|
+
token Operator
|
|
368
|
+
goto :expr_start
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
rule %r((/)(?=\S|\s*/)) do
|
|
372
|
+
token Str::Regex
|
|
373
|
+
goto :slash_regex
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
mixin :sigil_strings
|
|
377
|
+
|
|
378
|
+
rule(%r((?=\s*/))) { pop! }
|
|
379
|
+
|
|
380
|
+
rule(/\s+/) { token Text; goto :expr_start }
|
|
381
|
+
rule(//) { pop! }
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
state :expr_start do
|
|
385
|
+
mixin :inline_whitespace
|
|
386
|
+
|
|
387
|
+
rule %r(/) do
|
|
388
|
+
token Str::Regex
|
|
389
|
+
goto :slash_regex
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
# char operator. ?x evaulates to "x", unless there's a digit
|
|
393
|
+
# beforehand like x>=0?n[x]:""
|
|
394
|
+
rule %r(
|
|
395
|
+
[?](\\[MC]-)* # modifiers
|
|
396
|
+
(\\([\\abefnrstv\#"']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)
|
|
397
|
+
(?!\w)
|
|
398
|
+
)x, Str::Char, :pop!
|
|
399
|
+
|
|
400
|
+
# special case for using a single space. Ruby demands that
|
|
401
|
+
# these be in a single line, otherwise it would make no sense.
|
|
402
|
+
rule /(\s*)(%[rqswQWxiI]? \S* )/ do
|
|
403
|
+
groups Text, Str::Other
|
|
404
|
+
pop!
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
mixin :sigil_strings
|
|
408
|
+
|
|
409
|
+
rule(//) { pop! }
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
state :slash_regex do
|
|
413
|
+
mixin :string_intp
|
|
414
|
+
rule %r(\\\\), Str::Regex
|
|
415
|
+
rule %r(\\/), Str::Regex
|
|
416
|
+
rule %r([\\#]), Str::Regex
|
|
417
|
+
rule %r([^\\/#]+)m, Str::Regex
|
|
418
|
+
rule %r(/) do
|
|
419
|
+
token Str::Regex
|
|
420
|
+
goto :regex_flags
|
|
421
|
+
end
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
state :end_part do
|
|
425
|
+
# eat up the rest of the stream as Comment::Preproc
|
|
426
|
+
rule /.+/m, Comment::Preproc, :pop!
|
|
427
|
+
end
|
|
428
|
+
end
|
|
429
|
+
end
|
|
430
|
+
end
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class CSharp < RegexLexer
|
|
7
|
+
tag 'csharp'
|
|
8
|
+
aliases 'c#', 'cs'
|
|
9
|
+
filenames '*.cs'
|
|
10
|
+
mimetypes 'text/x-csharp'
|
|
11
|
+
|
|
12
|
+
title "C#"
|
|
13
|
+
desc 'a multi-paradigm language targeting .NET'
|
|
14
|
+
|
|
15
|
+
# TODO: support more of unicode
|
|
16
|
+
id = /@?[_a-z]\w*/i
|
|
17
|
+
|
|
18
|
+
#Reserved Identifiers
|
|
19
|
+
#Contextual Keywords
|
|
20
|
+
#LINQ Query Expressions
|
|
21
|
+
keywords = %w(
|
|
22
|
+
abstract as base break case catch checked const continue
|
|
23
|
+
default delegate do else enum event explicit extern false
|
|
24
|
+
finally fixed for foreach goto if implicit in interface
|
|
25
|
+
internal is lock new null operator out override params private
|
|
26
|
+
protected public readonly ref return sealed sizeof stackalloc
|
|
27
|
+
static switch this throw true try typeof unchecked unsafe
|
|
28
|
+
virtual void volatile while
|
|
29
|
+
add alias async await get global partial remove set value where
|
|
30
|
+
yield nameof
|
|
31
|
+
ascending by descending equals from group in into join let on
|
|
32
|
+
orderby select
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
keywords_type = %w(
|
|
36
|
+
bool byte char decimal double dynamic float int long object
|
|
37
|
+
sbyte short string uint ulong ushort var
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
cpp_keywords = %w(
|
|
41
|
+
if endif else elif define undef line error warning region
|
|
42
|
+
endregion pragma
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
state :whitespace do
|
|
46
|
+
rule /\s+/m, Text
|
|
47
|
+
rule %r(//.*?$), Comment::Single
|
|
48
|
+
rule %r(/[*].*?[*]/)m, Comment::Multiline
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
state :nest do
|
|
52
|
+
rule /{/, Punctuation, :nest
|
|
53
|
+
rule /}/, Punctuation, :pop!
|
|
54
|
+
mixin :root
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
state :splice_string do
|
|
58
|
+
rule /\\./, Str
|
|
59
|
+
rule /{/, Punctuation, :nest
|
|
60
|
+
rule /"|\n/, Str, :pop!
|
|
61
|
+
rule /./, Str
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
state :splice_literal do
|
|
65
|
+
rule /""/, Str
|
|
66
|
+
rule /{/, Punctuation, :nest
|
|
67
|
+
rule /"/, Str, :pop!
|
|
68
|
+
rule /./, Str
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
state :root do
|
|
72
|
+
mixin :whitespace
|
|
73
|
+
|
|
74
|
+
rule /^\s*\[.*?\]/, Name::Attribute
|
|
75
|
+
rule /[$]\s*"/, Str, :splice_string
|
|
76
|
+
rule /[$]@\s*"/, Str, :splice_literal
|
|
77
|
+
|
|
78
|
+
rule /(<\[)\s*(#{id}:)?/, Keyword
|
|
79
|
+
rule /\]>/, Keyword
|
|
80
|
+
|
|
81
|
+
rule /[~!%^&*()+=|\[\]{}:;,.<>\/?-]/, Punctuation
|
|
82
|
+
rule /@"(""|[^"])*"/m, Str
|
|
83
|
+
rule /"(\\.|.)*?["\n]/, Str
|
|
84
|
+
rule /'(\\.|.)'/, Str::Char
|
|
85
|
+
rule /0x[0-9a-f]+[lu]?/i, Num
|
|
86
|
+
rule %r(
|
|
87
|
+
[0-9]
|
|
88
|
+
([.][0-9]*)? # decimal
|
|
89
|
+
(e[+-][0-9]+)? # exponent
|
|
90
|
+
[fldu]? # type
|
|
91
|
+
)ix, Num
|
|
92
|
+
rule /\b(?:class|struct|interface)\b/, Keyword, :class
|
|
93
|
+
rule /\b(?:namespace|using)\b/, Keyword, :namespace
|
|
94
|
+
rule /^#[ \t]*(#{cpp_keywords.join('|')})\b.*?\n/,
|
|
95
|
+
Comment::Preproc
|
|
96
|
+
rule /\b(#{keywords.join('|')})\b/, Keyword
|
|
97
|
+
rule /\b(#{keywords_type.join('|')})\b/, Keyword::Type
|
|
98
|
+
rule /#{id}(?=\s*[(])/, Name::Function
|
|
99
|
+
rule id, Name
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
state :class do
|
|
103
|
+
mixin :whitespace
|
|
104
|
+
rule id, Name::Class, :pop!
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
state :namespace do
|
|
108
|
+
mixin :whitespace
|
|
109
|
+
rule /(?=[(])/, Text, :pop!
|
|
110
|
+
rule /(#{id}|[.])+/, Name::Namespace, :pop!
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|