rouge_ecl 0.0.1
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 +26 -0
- data/LICENSE +186 -0
- data/bin/rougify +17 -0
- data/lib/rouge.rb +82 -0
- data/lib/rouge/cli.rb +429 -0
- data/lib/rouge/demos/abap +6 -0
- data/lib/rouge/demos/actionscript +4 -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/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/ecl +1 -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/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/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/make +6 -0
- data/lib/rouge/demos/markdown +4 -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/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/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 +75 -0
- data/lib/rouge/formatters/html.rb +37 -0
- data/lib/rouge/formatters/html_inline.rb +30 -0
- data/lib/rouge/formatters/html_legacy.rb +44 -0
- data/lib/rouge/formatters/html_linewise.rb +27 -0
- data/lib/rouge/formatters/html_pygments.rb +16 -0
- data/lib/rouge/formatters/html_table.rb +61 -0
- data/lib/rouge/formatters/null.rb +19 -0
- data/lib/rouge/formatters/terminal256.rb +180 -0
- data/lib/rouge/guesser.rb +55 -0
- data/lib/rouge/guessers/disambiguation.rb +101 -0
- data/lib/rouge/guessers/filename.rb +25 -0
- data/lib/rouge/guessers/glob_mapping.rb +43 -0
- data/lib/rouge/guessers/mimetype.rb +14 -0
- data/lib/rouge/guessers/modeline.rb +44 -0
- data/lib/rouge/guessers/source.rb +29 -0
- data/lib/rouge/guessers/util.rb +32 -0
- data/lib/rouge/lexer.rb +461 -0
- data/lib/rouge/lexers/abap.rb +238 -0
- data/lib/rouge/lexers/actionscript.rb +195 -0
- data/lib/rouge/lexers/apache.rb +71 -0
- data/lib/rouge/lexers/apache/keywords.yml +764 -0
- data/lib/rouge/lexers/apiblueprint.rb +47 -0
- data/lib/rouge/lexers/apple_script.rb +367 -0
- data/lib/rouge/lexers/awk.rb +161 -0
- data/lib/rouge/lexers/biml.rb +41 -0
- data/lib/rouge/lexers/bsl.rb +81 -0
- data/lib/rouge/lexers/c.rb +212 -0
- data/lib/rouge/lexers/ceylon.rb +123 -0
- data/lib/rouge/lexers/cfscript.rb +153 -0
- data/lib/rouge/lexers/clojure.rb +112 -0
- data/lib/rouge/lexers/cmake.rb +206 -0
- data/lib/rouge/lexers/coffeescript.rb +174 -0
- data/lib/rouge/lexers/common_lisp.rb +345 -0
- data/lib/rouge/lexers/conf.rb +24 -0
- data/lib/rouge/lexers/console.rb +136 -0
- data/lib/rouge/lexers/coq.rb +187 -0
- data/lib/rouge/lexers/cpp.rb +78 -0
- data/lib/rouge/lexers/csharp.rb +114 -0
- data/lib/rouge/lexers/css.rb +273 -0
- data/lib/rouge/lexers/d.rb +176 -0
- data/lib/rouge/lexers/dart.rb +104 -0
- data/lib/rouge/lexers/diff.rb +31 -0
- data/lib/rouge/lexers/digdag.rb +68 -0
- data/lib/rouge/lexers/docker.rb +50 -0
- data/lib/rouge/lexers/dot.rb +68 -0
- data/lib/rouge/lexers/ecl.rb +138 -0
- data/lib/rouge/lexers/eiffel.rb +65 -0
- data/lib/rouge/lexers/elixir.rb +133 -0
- data/lib/rouge/lexers/elm.rb +89 -0
- data/lib/rouge/lexers/erb.rb +52 -0
- data/lib/rouge/lexers/erlang.rb +114 -0
- data/lib/rouge/lexers/factor.rb +302 -0
- data/lib/rouge/lexers/fortran.rb +176 -0
- data/lib/rouge/lexers/fsharp.rb +118 -0
- data/lib/rouge/lexers/gherkin.rb +137 -0
- data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
- data/lib/rouge/lexers/glsl.rb +135 -0
- data/lib/rouge/lexers/go.rb +174 -0
- data/lib/rouge/lexers/gradle.rb +37 -0
- data/lib/rouge/lexers/graphql.rb +243 -0
- data/lib/rouge/lexers/groovy.rb +112 -0
- data/lib/rouge/lexers/hack.rb +48 -0
- data/lib/rouge/lexers/haml.rb +229 -0
- data/lib/rouge/lexers/handlebars.rb +79 -0
- data/lib/rouge/lexers/haskell.rb +182 -0
- data/lib/rouge/lexers/html.rb +139 -0
- data/lib/rouge/lexers/http.rb +80 -0
- data/lib/rouge/lexers/hylang.rb +93 -0
- data/lib/rouge/lexers/idlang.rb +310 -0
- data/lib/rouge/lexers/igorpro.rb +408 -0
- data/lib/rouge/lexers/ini.rb +53 -0
- data/lib/rouge/lexers/io.rb +68 -0
- data/lib/rouge/lexers/irb.rb +66 -0
- data/lib/rouge/lexers/java.rb +87 -0
- data/lib/rouge/lexers/javascript.rb +281 -0
- data/lib/rouge/lexers/jinja.rb +137 -0
- data/lib/rouge/lexers/json.rb +29 -0
- data/lib/rouge/lexers/json_doc.rb +23 -0
- data/lib/rouge/lexers/jsonnet.rb +151 -0
- data/lib/rouge/lexers/jsx.rb +102 -0
- data/lib/rouge/lexers/julia.rb +172 -0
- data/lib/rouge/lexers/kotlin.rb +79 -0
- data/lib/rouge/lexers/lasso.rb +214 -0
- data/lib/rouge/lexers/lasso/keywords.yml +446 -0
- data/lib/rouge/lexers/liquid.rb +287 -0
- data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
- data/lib/rouge/lexers/literate_haskell.rb +36 -0
- data/lib/rouge/lexers/llvm.rb +80 -0
- data/lib/rouge/lexers/lua.rb +125 -0
- data/lib/rouge/lexers/lua/builtins.rb +22 -0
- data/lib/rouge/lexers/make.rb +112 -0
- data/lib/rouge/lexers/markdown.rb +154 -0
- data/lib/rouge/lexers/matlab.rb +71 -0
- data/lib/rouge/lexers/matlab/builtins.rb +11 -0
- data/lib/rouge/lexers/moonscript.rb +114 -0
- data/lib/rouge/lexers/mosel.rb +231 -0
- data/lib/rouge/lexers/mxml.rb +68 -0
- data/lib/rouge/lexers/nasm.rb +198 -0
- data/lib/rouge/lexers/nginx.rb +71 -0
- data/lib/rouge/lexers/nim.rb +152 -0
- data/lib/rouge/lexers/nix.rb +205 -0
- data/lib/rouge/lexers/objective_c.rb +194 -0
- data/lib/rouge/lexers/ocaml.rb +100 -0
- data/lib/rouge/lexers/pascal.rb +66 -0
- data/lib/rouge/lexers/perl.rb +196 -0
- data/lib/rouge/lexers/php.rb +193 -0
- data/lib/rouge/lexers/php/builtins.rb +194 -0
- data/lib/rouge/lexers/plain_text.rb +26 -0
- data/lib/rouge/lexers/plist.rb +45 -0
- data/lib/rouge/lexers/pony.rb +93 -0
- data/lib/rouge/lexers/powershell.rb +678 -0
- data/lib/rouge/lexers/praat.rb +350 -0
- data/lib/rouge/lexers/prolog.rb +59 -0
- data/lib/rouge/lexers/prometheus.rb +121 -0
- data/lib/rouge/lexers/properties.rb +51 -0
- data/lib/rouge/lexers/protobuf.rb +70 -0
- data/lib/rouge/lexers/puppet.rb +128 -0
- data/lib/rouge/lexers/python.rb +232 -0
- data/lib/rouge/lexers/q.rb +123 -0
- data/lib/rouge/lexers/qml.rb +73 -0
- data/lib/rouge/lexers/r.rb +89 -0
- data/lib/rouge/lexers/racket.rb +543 -0
- data/lib/rouge/lexers/ruby.rb +437 -0
- data/lib/rouge/lexers/rust.rb +192 -0
- data/lib/rouge/lexers/sass.rb +74 -0
- data/lib/rouge/lexers/sass/common.rb +180 -0
- data/lib/rouge/lexers/scala.rb +142 -0
- data/lib/rouge/lexers/scheme.rb +112 -0
- data/lib/rouge/lexers/scss.rb +34 -0
- data/lib/rouge/lexers/sed.rb +172 -0
- data/lib/rouge/lexers/shell.rb +189 -0
- data/lib/rouge/lexers/sieve.rb +96 -0
- data/lib/rouge/lexers/slim.rb +228 -0
- data/lib/rouge/lexers/smalltalk.rb +116 -0
- data/lib/rouge/lexers/smarty.rb +80 -0
- data/lib/rouge/lexers/sml.rb +344 -0
- data/lib/rouge/lexers/sql.rb +140 -0
- data/lib/rouge/lexers/swift.rb +181 -0
- data/lib/rouge/lexers/tap.rb +87 -0
- data/lib/rouge/lexers/tcl.rb +192 -0
- data/lib/rouge/lexers/tex.rb +69 -0
- data/lib/rouge/lexers/toml.rb +67 -0
- data/lib/rouge/lexers/tsx.rb +19 -0
- data/lib/rouge/lexers/tulip.rb +106 -0
- data/lib/rouge/lexers/turtle.rb +63 -0
- data/lib/rouge/lexers/twig.rb +39 -0
- data/lib/rouge/lexers/typescript.rb +22 -0
- data/lib/rouge/lexers/typescript/common.rb +33 -0
- data/lib/rouge/lexers/vala.rb +77 -0
- data/lib/rouge/lexers/vb.rb +164 -0
- data/lib/rouge/lexers/verilog.rb +164 -0
- data/lib/rouge/lexers/vhdl.rb +97 -0
- data/lib/rouge/lexers/viml.rb +101 -0
- data/lib/rouge/lexers/viml/keywords.rb +12 -0
- data/lib/rouge/lexers/vue.rb +122 -0
- data/lib/rouge/lexers/wollok.rb +103 -0
- data/lib/rouge/lexers/xml.rb +57 -0
- data/lib/rouge/lexers/yaml.rb +373 -0
- data/lib/rouge/plugins/redcarpet.rb +30 -0
- data/lib/rouge/regex_lexer.rb +441 -0
- data/lib/rouge/template_lexer.rb +20 -0
- data/lib/rouge/text_analyzer.rb +49 -0
- data/lib/rouge/theme.rb +213 -0
- data/lib/rouge/themes/base16.rb +130 -0
- data/lib/rouge/themes/colorful.rb +67 -0
- data/lib/rouge/themes/github.rb +71 -0
- data/lib/rouge/themes/gruvbox.rb +167 -0
- data/lib/rouge/themes/igor_pro.rb +20 -0
- data/lib/rouge/themes/molokai.rb +82 -0
- data/lib/rouge/themes/monokai.rb +92 -0
- data/lib/rouge/themes/monokai_sublime.rb +90 -0
- data/lib/rouge/themes/pastie.rb +69 -0
- data/lib/rouge/themes/thankful_eyes.rb +74 -0
- data/lib/rouge/themes/tulip.rb +69 -0
- data/lib/rouge/token.rb +182 -0
- data/lib/rouge/util.rb +101 -0
- data/lib/rouge/version.rb +7 -0
- data/rouge.gemspec +23 -0
- metadata +365 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class OCaml < RegexLexer
|
|
6
|
+
title "OCaml"
|
|
7
|
+
desc 'Objective Caml (ocaml.org)'
|
|
8
|
+
tag 'ocaml'
|
|
9
|
+
filenames '*.ml', '*.mli', '*.mll', '*.mly'
|
|
10
|
+
mimetypes 'text/x-ocaml'
|
|
11
|
+
|
|
12
|
+
def self.keywords
|
|
13
|
+
@keywords ||= Set.new %w(
|
|
14
|
+
as assert begin class constraint do done downto else end
|
|
15
|
+
exception external false for fun function functor if in include
|
|
16
|
+
inherit initializer lazy let match method module mutable new
|
|
17
|
+
nonrec object of open private raise rec sig struct then to true
|
|
18
|
+
try type val virtual when while with
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.word_operators
|
|
23
|
+
@word_operators ||= Set.new %w(and asr land lor lsl lxor mod or)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.primitives
|
|
27
|
+
@primitives ||= Set.new %w(unit int float bool string char list array)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
operator = %r([;,_!$%&*+./:<=>?@^|~#-]+)
|
|
31
|
+
id = /[a-z_][\w']*/i
|
|
32
|
+
upper_id = /[A-Z][\w']*/
|
|
33
|
+
|
|
34
|
+
state :root do
|
|
35
|
+
rule /\s+/m, Text
|
|
36
|
+
rule /false|true|[(][)]|\[\]/, Name::Builtin::Pseudo
|
|
37
|
+
rule /#{upper_id}(?=\s*[.])/, Name::Namespace, :dotted
|
|
38
|
+
rule /`#{id}/, Name::Tag
|
|
39
|
+
rule upper_id, Name::Class
|
|
40
|
+
rule /[(][*](?![)])/, Comment, :comment
|
|
41
|
+
rule id do |m|
|
|
42
|
+
match = m[0]
|
|
43
|
+
if self.class.keywords.include? match
|
|
44
|
+
token Keyword
|
|
45
|
+
elsif self.class.word_operators.include? match
|
|
46
|
+
token Operator::Word
|
|
47
|
+
elsif self.class.primitives.include? match
|
|
48
|
+
token Keyword::Type
|
|
49
|
+
else
|
|
50
|
+
token Name
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
rule /[(){}\[\];]+/, Punctuation
|
|
55
|
+
rule operator, Operator
|
|
56
|
+
|
|
57
|
+
rule /-?\d[\d_]*(.[\d_]*)?(e[+-]?\d[\d_]*)/i, Num::Float
|
|
58
|
+
rule /0x\h[\h_]*/i, Num::Hex
|
|
59
|
+
rule /0o[0-7][0-7_]*/i, Num::Oct
|
|
60
|
+
rule /0b[01][01_]*/i, Num::Bin
|
|
61
|
+
rule /\d[\d_]*/, Num::Integer
|
|
62
|
+
|
|
63
|
+
rule /'(?:(\\[\\"'ntbr ])|(\\[0-9]{3})|(\\x\h{2}))'/, Str::Char
|
|
64
|
+
rule /'[.]'/, Str::Char
|
|
65
|
+
rule /'/, Keyword
|
|
66
|
+
rule /"/, Str::Double, :string
|
|
67
|
+
rule /[~?]#{id}/, Name::Variable
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
state :comment do
|
|
71
|
+
rule /[^(*)]+/, Comment
|
|
72
|
+
rule(/[(][*]/) { token Comment; push }
|
|
73
|
+
rule /[*][)]/, Comment, :pop!
|
|
74
|
+
rule /[(*)]/, Comment
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
state :string do
|
|
78
|
+
rule /[^\\"]+/, Str::Double
|
|
79
|
+
mixin :escape_sequence
|
|
80
|
+
rule /\\\n/, Str::Double
|
|
81
|
+
rule /"/, Str::Double, :pop!
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
state :escape_sequence do
|
|
85
|
+
rule /\\[\\"'ntbr]/, Str::Escape
|
|
86
|
+
rule /\\\d{3}/, Str::Escape
|
|
87
|
+
rule /\\x\h{2}/, Str::Escape
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
state :dotted do
|
|
91
|
+
rule /\s+/m, Text
|
|
92
|
+
rule /[.]/, Punctuation
|
|
93
|
+
rule /#{upper_id}(?=\s*[.])/, Name::Namespace
|
|
94
|
+
rule upper_id, Name::Class, :pop!
|
|
95
|
+
rule id, Name, :pop!
|
|
96
|
+
rule /[({\[]/, Punctuation, :pop!
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Pascal < RegexLexer
|
|
6
|
+
tag 'pascal'
|
|
7
|
+
title "Pascal"
|
|
8
|
+
desc 'a procedural programming language commonly used as a teaching language.'
|
|
9
|
+
filenames '*.pas'
|
|
10
|
+
|
|
11
|
+
mimetypes 'text/x-pascal'
|
|
12
|
+
|
|
13
|
+
id = /@?[_a-z]\w*/i
|
|
14
|
+
|
|
15
|
+
keywords = %w(
|
|
16
|
+
absolute abstract all and and_then array as asm assembler attribute
|
|
17
|
+
begin bindable case class const constructor delay destructor div do
|
|
18
|
+
downto else end except exit export exports external far file finalization
|
|
19
|
+
finally for forward function goto if implementation import in inc index
|
|
20
|
+
inherited initialization inline interface interrupt is label library
|
|
21
|
+
message mod module near nil not object of on only operator or or_else
|
|
22
|
+
otherwise out overload override packed pascal pow private procedure program
|
|
23
|
+
property protected public published qualified raise read record register
|
|
24
|
+
repeat resident resourcestring restricted safecall segment set shl shr
|
|
25
|
+
stdcall stored string then threadvar to try type unit until uses value var
|
|
26
|
+
view virtual while with write writeln xor
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
keywords_type = %w(
|
|
30
|
+
ansichar ansistring bool boolean byte bytebool cardinal char comp currency
|
|
31
|
+
double dword extended int64 integer iunknown longbool longint longword pansichar
|
|
32
|
+
pansistring pbool pboolean pbyte pbytearray pcardinal pchar pcomp pcurrency
|
|
33
|
+
pdate pdatetime pdouble pdword pextended phandle pint64 pinteger plongint plongword
|
|
34
|
+
pointer ppointer pshortint pshortstring psingle psmallint pstring pvariant pwidechar
|
|
35
|
+
pwidestring pword pwordarray pwordbool real real48 shortint shortstring single
|
|
36
|
+
smallint string tclass tdate tdatetime textfile thandle tobject ttime variant
|
|
37
|
+
widechar widestring word wordbool
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
state :whitespace do
|
|
41
|
+
# Spaces
|
|
42
|
+
rule /\s+/m, Text
|
|
43
|
+
# // Comments
|
|
44
|
+
rule %r((//).*$\n?), Comment::Single
|
|
45
|
+
# -- Comments
|
|
46
|
+
rule %r((--).*$\n?), Comment::Single
|
|
47
|
+
# (* Comments *)
|
|
48
|
+
rule %r(\(\*.*?\*\))m, Comment::Multiline
|
|
49
|
+
# { Comments }
|
|
50
|
+
rule %r(\{.*?\})m, Comment::Multiline
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
state :root do
|
|
54
|
+
mixin :whitespace
|
|
55
|
+
|
|
56
|
+
rule %r{((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?}, Num
|
|
57
|
+
rule %r{[~!@#\$%\^&\*\(\)\+`\-={}\[\]:;<>\?,\.\/\|\\]}, Punctuation
|
|
58
|
+
rule %r{'([^']|'')*'}, Str
|
|
59
|
+
rule /(true|false|nil)\b/i, Name::Builtin
|
|
60
|
+
rule /\b(#{keywords.join('|')})\b/i, Keyword
|
|
61
|
+
rule /\b(#{keywords_type.join('|')})\b/i, Keyword::Type
|
|
62
|
+
rule id, Name
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Perl < RegexLexer
|
|
6
|
+
title "Perl"
|
|
7
|
+
desc "The Perl scripting language (perl.org)"
|
|
8
|
+
|
|
9
|
+
tag 'perl'
|
|
10
|
+
aliases 'pl'
|
|
11
|
+
|
|
12
|
+
filenames '*.pl', '*.pm'
|
|
13
|
+
mimetypes 'text/x-perl', 'application/x-perl'
|
|
14
|
+
|
|
15
|
+
def self.detect?(text)
|
|
16
|
+
return true if text.shebang? 'perl'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
keywords = %w(
|
|
20
|
+
case continue do else elsif for foreach if last my next our
|
|
21
|
+
redo reset then unless until while use print new BEGIN CHECK
|
|
22
|
+
INIT END return
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
builtins = %w(
|
|
26
|
+
abs accept alarm atan2 bind binmode bless caller chdir chmod
|
|
27
|
+
chomp chop chown chr chroot close closedir connect continue cos
|
|
28
|
+
crypt dbmclose dbmopen defined delete die dump each endgrent
|
|
29
|
+
endhostent endnetent endprotoent endpwent endservent eof eval
|
|
30
|
+
exec exists exit exp fcntl fileno flock fork format formline getc
|
|
31
|
+
getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent
|
|
32
|
+
getlogin getnetbyaddr getnetbyname getnetent getpeername
|
|
33
|
+
getpgrp getppid getpriority getprotobyname getprotobynumber
|
|
34
|
+
getprotoent getpwent getpwnam getpwuid getservbyname getservbyport
|
|
35
|
+
getservent getsockname getsockopt glob gmtime goto grep hex
|
|
36
|
+
import index int ioctl join keys kill last lc lcfirst length
|
|
37
|
+
link listen local localtime log lstat map mkdir msgctl msgget
|
|
38
|
+
msgrcv msgsnd my next no oct open opendir ord our pack package
|
|
39
|
+
pipe pop pos printf prototype push quotemeta rand read readdir
|
|
40
|
+
readline readlink readpipe recv redo ref rename require reverse
|
|
41
|
+
rewinddir rindex rmdir scalar seek seekdir select semctl semget
|
|
42
|
+
semop send setgrent sethostent setnetent setpgrp setpriority
|
|
43
|
+
setprotoent setpwent setservent setsockopt shift shmctl shmget
|
|
44
|
+
shmread shmwrite shutdown sin sleep socket socketpair sort splice
|
|
45
|
+
split sprintf sqrt srand stat study substr symlink syscall sysopen
|
|
46
|
+
sysread sysseek system syswrite tell telldir tie tied time times
|
|
47
|
+
tr truncate uc ucfirst umask undef unlink unpack unshift untie
|
|
48
|
+
utime values vec wait waitpid wantarray warn write
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
re_tok = Str::Regex
|
|
52
|
+
|
|
53
|
+
state :balanced_regex do
|
|
54
|
+
rule %r(/(\\[\\/]|[^/])*/[egimosx]*)m, re_tok, :pop!
|
|
55
|
+
rule %r(!(\\[\\!]|[^!])*![egimosx]*)m, re_tok, :pop!
|
|
56
|
+
rule %r(\\(\\\\|[^\\])*\\[egimosx]*)m, re_tok, :pop!
|
|
57
|
+
rule %r({(\\[\\}]|[^}])*}[egimosx]*), re_tok, :pop!
|
|
58
|
+
rule %r(<(\\[\\>]|[^>])*>[egimosx]*), re_tok, :pop!
|
|
59
|
+
rule %r(\[(\\[\\\]]|[^\]])*\][egimosx]*), re_tok, :pop!
|
|
60
|
+
rule %r[\((\\[\\\)]|[^\)])*\)[egimosx]*], re_tok, :pop!
|
|
61
|
+
rule %r(@(\\[\\@]|[^@])*@[egimosx]*), re_tok, :pop!
|
|
62
|
+
rule %r(%(\\[\\%]|[^%])*%[egimosx]*), re_tok, :pop!
|
|
63
|
+
rule %r(\$(\\[\\\$]|[^\$])*\$[egimosx]*), re_tok, :pop!
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
state :root do
|
|
67
|
+
rule /#.*?$/, Comment::Single
|
|
68
|
+
rule /^=[a-zA-Z0-9]+\s+.*?\n=cut/m, Comment::Multiline
|
|
69
|
+
rule /(?:#{keywords.join('|')})\b/, Keyword
|
|
70
|
+
|
|
71
|
+
rule /(format)(\s+)([a-zA-Z0-9_]+)(\s*)(=)(\s*\n)/ do
|
|
72
|
+
groups Keyword, Text, Name, Text, Punctuation, Text
|
|
73
|
+
|
|
74
|
+
push :format
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
rule /(?:eq|lt|gt|le|ge|ne|not|and|or|cmp)\b/, Operator::Word
|
|
78
|
+
|
|
79
|
+
# common delimiters
|
|
80
|
+
rule %r(s/(\\\\|\\/|[^/])*/(\\\\|\\/|[^/])*/[egimosx]*), re_tok
|
|
81
|
+
rule %r(s!(\\\\|\\!|[^!])*!(\\\\|\\!|[^!])*![egimosx]*), re_tok
|
|
82
|
+
rule %r(s\\(\\\\|[^\\])*\\(\\\\|[^\\])*\\[egimosx]*), re_tok
|
|
83
|
+
rule %r(s@(\\\\|\\@|[^@])*@(\\\\|\\@|[^@])*@[egimosx]*), re_tok
|
|
84
|
+
rule %r(s%(\\\\|\\%|[^%])*%(\\\\|\\%|[^%])*%[egimosx]*), re_tok
|
|
85
|
+
|
|
86
|
+
# balanced delimiters
|
|
87
|
+
rule %r(s{(\\\\|\\}|[^}])*}\s*), re_tok, :balanced_regex
|
|
88
|
+
rule %r(s<(\\\\|\\>|[^>])*>\s*), re_tok, :balanced_regex
|
|
89
|
+
rule %r(s\[(\\\\|\\\]|[^\]])*\]\s*), re_tok, :balanced_regex
|
|
90
|
+
rule %r[s\((\\\\|\\\)|[^\)])*\)\s*], re_tok, :balanced_regex
|
|
91
|
+
|
|
92
|
+
rule %r(m?/(\\\\|\\/|[^/\n])*/[gcimosx]*), re_tok
|
|
93
|
+
rule %r(m(?=[/!\\{<\[\(@%\$])), re_tok, :balanced_regex
|
|
94
|
+
rule %r(((?<==~)|(?<=\())\s*/(\\\\|\\/|[^/])*/[gcimosx]*),
|
|
95
|
+
re_tok, :balanced_regex
|
|
96
|
+
|
|
97
|
+
rule /\s+/, Text
|
|
98
|
+
rule /(?:#{builtins.join('|')})\b/, Name::Builtin
|
|
99
|
+
rule /((__(DATA|DIE|WARN)__)|(STD(IN|OUT|ERR)))\b/,
|
|
100
|
+
Name::Builtin::Pseudo
|
|
101
|
+
|
|
102
|
+
rule /<<([\'"]?)([a-zA-Z_][a-zA-Z0-9_]*)\1;?\n.*?\n\2\n/m, Str
|
|
103
|
+
|
|
104
|
+
rule /__END__\b/, Comment::Preproc, :end_part
|
|
105
|
+
rule /\$\^[ADEFHILMOPSTWX]/, Name::Variable::Global
|
|
106
|
+
rule /\$[\\"'\[\]&`+*.,;=%~?@$!<>(^\|\/-](?!\w)/, Name::Variable::Global
|
|
107
|
+
rule /[-+\/*%=<>&^\|!\\~]=?/, Operator
|
|
108
|
+
rule /[$@%#]+/, Name::Variable, :varname
|
|
109
|
+
|
|
110
|
+
rule /0_?[0-7]+(_[0-7]+)*/, Num::Oct
|
|
111
|
+
rule /0x[0-9A-Fa-f]+(_[0-9A-Fa-f]+)*/, Num::Hex
|
|
112
|
+
rule /0b[01]+(_[01]+)*/, Num::Bin
|
|
113
|
+
rule /(\d*(_\d*)*\.\d+(_\d*)*|\d+(_\d*)*\.\d+(_\d*)*)(e[+-]?\d+)?/i,
|
|
114
|
+
Num::Float
|
|
115
|
+
rule /\d+(_\d*)*e[+-]?\d+(_\d*)*/i, Num::Float
|
|
116
|
+
rule /\d+(_\d+)*/, Num::Integer
|
|
117
|
+
|
|
118
|
+
rule /'(\\\\|\\'|[^'])*'/, Str
|
|
119
|
+
rule /"(\\\\|\\"|[^"])*"/, Str
|
|
120
|
+
rule /`(\\\\|\\`|[^`])*`/, Str::Backtick
|
|
121
|
+
rule /<([^\s>]+)>/, re_tok
|
|
122
|
+
rule /(q|qq|qw|qr|qx)\{/, Str::Other, :cb_string
|
|
123
|
+
rule /(q|qq|qw|qr|qx)\(/, Str::Other, :rb_string
|
|
124
|
+
rule /(q|qq|qw|qr|qx)\[/, Str::Other, :sb_string
|
|
125
|
+
rule /(q|qq|qw|qr|qx)</, Str::Other, :lt_string
|
|
126
|
+
rule /(q|qq|qw|qr|qx)([^a-zA-Z0-9])(.|\n)*?\2/, Str::Other
|
|
127
|
+
|
|
128
|
+
rule /package\s+/, Keyword, :modulename
|
|
129
|
+
rule /sub\s+/, Keyword, :funcname
|
|
130
|
+
rule /\[\]|\*\*|::|<<|>>|>=|<=|<=>|={3}|!=|=~|!~|&&?|\|\||\.{1,3}/,
|
|
131
|
+
Operator
|
|
132
|
+
rule /[()\[\]:;,<>\/?{}]/, Punctuation
|
|
133
|
+
rule(/(?=\w)/) { push :name }
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
state :format do
|
|
137
|
+
rule /\.\n/, Str::Interpol, :pop!
|
|
138
|
+
rule /.*?\n/, Str::Interpol
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
state :name_common do
|
|
142
|
+
rule /\w+::/, Name::Namespace
|
|
143
|
+
rule /[\w:]+/, Name::Variable, :pop!
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
state :varname do
|
|
147
|
+
rule /\s+/, Text
|
|
148
|
+
rule /\{/, Punctuation, :pop! # hash syntax
|
|
149
|
+
rule /\)|,/, Punctuation, :pop! # arg specifier
|
|
150
|
+
mixin :name_common
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
state :name do
|
|
154
|
+
mixin :name_common
|
|
155
|
+
rule /[A-Z_]+(?=[^a-zA-Z0-9_])/, Name::Constant, :pop!
|
|
156
|
+
rule(/(?=\W)/) { pop! }
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
state :modulename do
|
|
160
|
+
rule /[a-z_]\w*/i, Name::Namespace, :pop!
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
state :funcname do
|
|
164
|
+
rule /[a-zA-Z_]\w*[!?]?/, Name::Function
|
|
165
|
+
rule /\s+/, Text
|
|
166
|
+
|
|
167
|
+
# argument declaration
|
|
168
|
+
rule /(\([$@%]*\))(\s*)/ do
|
|
169
|
+
groups Punctuation, Text
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
rule /.*?{/, Punctuation, :pop!
|
|
173
|
+
rule /;/, Punctuation, :pop!
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
[[:cb, '\{', '\}'],
|
|
177
|
+
[:rb, '\(', '\)'],
|
|
178
|
+
[:sb, '\[', '\]'],
|
|
179
|
+
[:lt, '<', '>']].each do |name, open, close|
|
|
180
|
+
tok = Str::Other
|
|
181
|
+
state :"#{name}_string" do
|
|
182
|
+
rule /\\[#{open}#{close}\\]/, tok
|
|
183
|
+
rule /\\/, tok
|
|
184
|
+
rule(/#{open}/) { token tok; push }
|
|
185
|
+
rule /#{close}/, tok, :pop!
|
|
186
|
+
rule /[^#{open}#{close}\\]+/, tok
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
state :end_part do
|
|
191
|
+
# eat the rest of the stream
|
|
192
|
+
rule /.+/m, Comment::Preproc, :pop!
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class PHP < TemplateLexer
|
|
6
|
+
title "PHP"
|
|
7
|
+
desc "The PHP scripting language (php.net)"
|
|
8
|
+
tag 'php'
|
|
9
|
+
aliases 'php', 'php3', 'php4', 'php5'
|
|
10
|
+
filenames '*.php', '*.php[345t]','*.phtml',
|
|
11
|
+
# Support Drupal file extensions, see:
|
|
12
|
+
# https://github.com/gitlabhq/gitlabhq/issues/8900
|
|
13
|
+
'*.module', '*.inc', '*.profile', '*.install', '*.test'
|
|
14
|
+
mimetypes 'text/x-php'
|
|
15
|
+
|
|
16
|
+
option :start_inline, 'Whether to start with inline php or require <?php ... ?>. (default: best guess)'
|
|
17
|
+
option :funcnamehighlighting, 'Whether to highlight builtin functions (default: true)'
|
|
18
|
+
option :disabledmodules, 'Disable certain modules from being highlighted as builtins (default: empty)'
|
|
19
|
+
|
|
20
|
+
def initialize(*)
|
|
21
|
+
super
|
|
22
|
+
|
|
23
|
+
# if truthy, the lexer starts highlighting with php code
|
|
24
|
+
# (no <?php required)
|
|
25
|
+
@start_inline = bool_option(:start_inline) { :guess }
|
|
26
|
+
@funcnamehighlighting = bool_option(:funcnamehighlighting) { true }
|
|
27
|
+
@disabledmodules = list_option(:disabledmodules)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.builtins
|
|
31
|
+
load Pathname.new(__FILE__).dirname.join('php/builtins.rb')
|
|
32
|
+
self.builtins
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def builtins
|
|
36
|
+
return [] unless @funcnamehighlighting
|
|
37
|
+
|
|
38
|
+
@builtins ||= Set.new.tap do |builtins|
|
|
39
|
+
self.class.builtins.each do |mod, fns|
|
|
40
|
+
next if @disabledmodules.include? mod
|
|
41
|
+
builtins.merge(fns)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# source: http://php.net/manual/en/language.variables.basics.php
|
|
47
|
+
# the given regex is invalid utf8, so... we're using the unicode
|
|
48
|
+
# "Letter" property instead.
|
|
49
|
+
id = /[\p{L}_][\p{L}\p{N}_]*/
|
|
50
|
+
nsid = /#{id}(?:\\#{id})*/
|
|
51
|
+
|
|
52
|
+
start do
|
|
53
|
+
case @start_inline
|
|
54
|
+
when true
|
|
55
|
+
push :template
|
|
56
|
+
push :php
|
|
57
|
+
when false
|
|
58
|
+
push :template
|
|
59
|
+
when :guess
|
|
60
|
+
# pass
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def self.keywords
|
|
65
|
+
@keywords ||= Set.new %w(
|
|
66
|
+
and E_PARSE old_function E_ERROR or as E_WARNING parent eval
|
|
67
|
+
PHP_OS break exit case extends PHP_VERSION cfunction FALSE
|
|
68
|
+
print for require continue foreach require_once declare return
|
|
69
|
+
default static do switch die stdClass echo else TRUE elseif
|
|
70
|
+
var empty if xor enddeclare include virtual endfor include_once
|
|
71
|
+
while endforeach global __FILE__ endif list __LINE__ endswitch
|
|
72
|
+
new __sleep endwhile not array __wakeup E_ALL NULL final
|
|
73
|
+
php_user_filter interface implements public private protected
|
|
74
|
+
abstract clone try catch throw this use namespace yield
|
|
75
|
+
)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def self.detect?(text)
|
|
79
|
+
return true if text.shebang?('php')
|
|
80
|
+
return false if /^<\?hh/ =~ text
|
|
81
|
+
return true if /^<\?php/ =~ text
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
state :root do
|
|
85
|
+
# some extremely rough heuristics to decide whether to start inline or not
|
|
86
|
+
rule(/\s*(?=<)/m) { delegate parent; push :template }
|
|
87
|
+
rule(/[^$]+(?=<\?(php|=))/) { delegate parent; push :template }
|
|
88
|
+
|
|
89
|
+
rule(//) { push :template; push :php }
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
state :template do
|
|
93
|
+
rule /<\?(php|=)?/, Comment::Preproc, :php
|
|
94
|
+
rule(/.*?(?=<\?)|.*/m) { delegate parent }
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
state :php do
|
|
98
|
+
rule /\?>/, Comment::Preproc, :pop!
|
|
99
|
+
# heredocs
|
|
100
|
+
rule /<<<('?)(#{id})\1\n.*?\n\2;?\n/im, Str::Heredoc
|
|
101
|
+
rule /\s+/, Text
|
|
102
|
+
rule /#.*?$/, Comment::Single
|
|
103
|
+
rule %r(//.*?$), Comment::Single
|
|
104
|
+
# empty comment, otherwise seen as the start of a docstring
|
|
105
|
+
rule %r(/\*\*/), Comment::Multiline
|
|
106
|
+
rule %r(/\*\*.*?\*/)m, Str::Doc
|
|
107
|
+
rule %r(/\*.*?\*/)m, Comment::Multiline
|
|
108
|
+
rule /(->|::)(\s*)(#{id})/ do
|
|
109
|
+
groups Operator, Text, Name::Attribute
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
rule /[~!%^&*+=\|:.<>\/?@-]+/, Operator
|
|
113
|
+
rule /[\[\]{}();,]/, Punctuation
|
|
114
|
+
rule /class\b/, Keyword, :classname
|
|
115
|
+
# anonymous functions
|
|
116
|
+
rule /(function)(\s*)(?=\()/ do
|
|
117
|
+
groups Keyword, Text
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# named functions
|
|
121
|
+
rule /(function)(\s+)(&?)(\s*)/ do
|
|
122
|
+
groups Keyword, Text, Operator, Text
|
|
123
|
+
push :funcname
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
rule /(const)(\s+)(#{id})/i do
|
|
127
|
+
groups Keyword, Text, Name::Constant
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
rule /(true|false|null)\b/, Keyword::Constant
|
|
131
|
+
rule /\$\{\$+#{id}\}/i, Name::Variable
|
|
132
|
+
rule /\$+#{id}/i, Name::Variable
|
|
133
|
+
|
|
134
|
+
# may be intercepted for builtin highlighting
|
|
135
|
+
rule /\\?#{nsid}/i do |m|
|
|
136
|
+
name = m[0]
|
|
137
|
+
|
|
138
|
+
if self.class.keywords.include? name
|
|
139
|
+
token Keyword
|
|
140
|
+
elsif self.builtins.include? name
|
|
141
|
+
token Name::Builtin
|
|
142
|
+
else
|
|
143
|
+
token Name::Other
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
rule /(\d+\.\d*|\d*\.\d+)(e[+-]?\d+)?/i, Num::Float
|
|
148
|
+
rule /\d+e[+-]?\d+/i, Num::Float
|
|
149
|
+
rule /0[0-7]+/, Num::Oct
|
|
150
|
+
rule /0x[a-f0-9]+/i, Num::Hex
|
|
151
|
+
rule /\d+/, Num::Integer
|
|
152
|
+
rule /'([^'\\]*(?:\\.[^'\\]*)*)'/, Str::Single
|
|
153
|
+
rule /`([^`\\]*(?:\\.[^`\\]*)*)`/, Str::Backtick
|
|
154
|
+
rule /"/, Str::Double, :string
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
state :classname do
|
|
158
|
+
rule /\s+/, Text
|
|
159
|
+
rule /#{nsid}/, Name::Class, :pop!
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
state :funcname do
|
|
163
|
+
rule /#{id}/, Name::Function, :pop!
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
state :string do
|
|
167
|
+
rule /"/, Str::Double, :pop!
|
|
168
|
+
rule /[^\\{$"]+/, Str::Double
|
|
169
|
+
rule /\\([nrt\"$\\]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})/,
|
|
170
|
+
Str::Escape
|
|
171
|
+
rule /\$#{id}(\[\S+\]|->#{id})?/, Name::Variable
|
|
172
|
+
|
|
173
|
+
rule /\{\$\{/, Str::Interpol, :interp_double
|
|
174
|
+
rule /\{(?=\$)/, Str::Interpol, :interp_single
|
|
175
|
+
rule /(\{)(\S+)(\})/ do
|
|
176
|
+
groups Str::Interpol, Name::Variable, Str::Interpol
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
rule /[${\\]+/, Str::Double
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
state :interp_double do
|
|
183
|
+
rule /\}\}/, Str::Interpol, :pop!
|
|
184
|
+
mixin :php
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
state :interp_single do
|
|
188
|
+
rule /\}/, Str::Interpol, :pop!
|
|
189
|
+
mixin :php
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|