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,129 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Puppet < RegexLexer
|
|
7
|
+
title "Puppet"
|
|
8
|
+
desc 'The Puppet configuration management language (puppetlabs.org)'
|
|
9
|
+
tag 'puppet'
|
|
10
|
+
aliases 'pp'
|
|
11
|
+
filenames '*.pp'
|
|
12
|
+
|
|
13
|
+
def self.detect?(text)
|
|
14
|
+
return true if text.shebang? 'puppet-apply'
|
|
15
|
+
return true if text.shebang? 'puppet'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.keywords
|
|
19
|
+
@keywords ||= Set.new %w(
|
|
20
|
+
and case class default define else elsif if in import inherits
|
|
21
|
+
node unless
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.constants
|
|
26
|
+
@constants ||= Set.new %w(
|
|
27
|
+
false true undef
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.metaparameters
|
|
32
|
+
@metaparameters ||= Set.new %w(
|
|
33
|
+
before require notify subscribe
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
id = /[a-z]\w*/
|
|
38
|
+
cap_id = /[A-Z]\w*/
|
|
39
|
+
qualname = /(::)?(#{id}::)*\w+/
|
|
40
|
+
|
|
41
|
+
state :whitespace do
|
|
42
|
+
rule /\s+/m, Text
|
|
43
|
+
rule /#.*?\n/, Comment
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
state :root do
|
|
47
|
+
mixin :whitespace
|
|
48
|
+
|
|
49
|
+
rule /[$]#{qualname}/, Name::Variable
|
|
50
|
+
rule /(#{id})(?=\s*[=+]>)/m do |m|
|
|
51
|
+
if self.class.metaparameters.include? m[0]
|
|
52
|
+
token Keyword::Pseudo
|
|
53
|
+
else
|
|
54
|
+
token Name::Property
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
rule /(#{qualname})(?=\s*[(])/m, Name::Function
|
|
59
|
+
rule cap_id, Name::Class
|
|
60
|
+
|
|
61
|
+
rule /[+=|~-]>|<[|~-]/, Punctuation
|
|
62
|
+
rule /[:}();\[\]]/, Punctuation
|
|
63
|
+
|
|
64
|
+
# HACK for case statements and selectors
|
|
65
|
+
rule /{/, Punctuation, :regex_allowed
|
|
66
|
+
rule /,/, Punctuation, :regex_allowed
|
|
67
|
+
|
|
68
|
+
rule /(in|and|or)\b/, Operator::Word
|
|
69
|
+
rule /[=!<>]=/, Operator
|
|
70
|
+
rule /[=!]~/, Operator, :regex_allowed
|
|
71
|
+
rule %r([=<>!+*/-]), Operator
|
|
72
|
+
|
|
73
|
+
rule /(class|include)(\s*)(#{qualname})/ do
|
|
74
|
+
groups Keyword, Text, Name::Class
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
rule /node\b/, Keyword, :regex_allowed
|
|
78
|
+
|
|
79
|
+
rule /'(\\[\\']|[^'])*'/m, Str::Single
|
|
80
|
+
rule /"/, Str::Double, :dquotes
|
|
81
|
+
|
|
82
|
+
rule /\d+([.]\d+)?(e[+-]\d+)?/, Num
|
|
83
|
+
|
|
84
|
+
# a valid regex. TODO: regexes are only allowed
|
|
85
|
+
# in certain places in puppet.
|
|
86
|
+
rule qualname do |m|
|
|
87
|
+
if self.class.keywords.include? m[0]
|
|
88
|
+
token Keyword
|
|
89
|
+
elsif self.class.constants.include? m[0]
|
|
90
|
+
token Keyword::Constant
|
|
91
|
+
else
|
|
92
|
+
token Name
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
state :regex_allowed do
|
|
98
|
+
mixin :whitespace
|
|
99
|
+
rule %r(/), Str::Regex, :regex
|
|
100
|
+
|
|
101
|
+
rule(//) { pop! }
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
state :regex do
|
|
105
|
+
rule %r(/), Str::Regex, :pop!
|
|
106
|
+
rule /\\./, Str::Escape
|
|
107
|
+
rule /[(){}]/, Str::Interpol
|
|
108
|
+
rule /\[/, Str::Interpol, :regex_class
|
|
109
|
+
rule /./, Str::Regex
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
state :regex_class do
|
|
113
|
+
rule /\]/, Str::Interpol, :pop!
|
|
114
|
+
rule /(?<!\[)-(?=\])/, Str::Regex
|
|
115
|
+
rule /-/, Str::Interpol
|
|
116
|
+
rule /\\./, Str::Escape
|
|
117
|
+
rule /[^\\\]-]+/, Str::Regex
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
state :dquotes do
|
|
121
|
+
rule /"/, Str::Double, :pop!
|
|
122
|
+
rule /[^$\\"]+/m, Str::Double
|
|
123
|
+
rule /\\./m, Str::Escape
|
|
124
|
+
rule /[$]#{qualname}/, Name::Variable
|
|
125
|
+
rule /[$][{]#{qualname}[}]/, Name::Variable
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Python < RegexLexer
|
|
7
|
+
title "Python"
|
|
8
|
+
desc "The Python programming language (python.org)"
|
|
9
|
+
tag 'python'
|
|
10
|
+
aliases 'py'
|
|
11
|
+
filenames '*.py', '*.pyw', '*.sc', 'SConstruct', 'SConscript', '*.tac'
|
|
12
|
+
mimetypes 'text/x-python', 'application/x-python'
|
|
13
|
+
|
|
14
|
+
def self.detect?(text)
|
|
15
|
+
return true if text.shebang?(/pythonw?(3|2(\.\d)?)?/)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.keywords
|
|
19
|
+
@keywords ||= %w(
|
|
20
|
+
assert break continue del elif else except exec
|
|
21
|
+
finally for global if lambda pass print raise
|
|
22
|
+
return try while yield as with from import yield
|
|
23
|
+
async await nonlocal
|
|
24
|
+
)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.builtins
|
|
28
|
+
@builtins ||= %w(
|
|
29
|
+
__import__ abs all any apply ascii basestring bin bool buffer
|
|
30
|
+
bytearray bytes callable chr classmethod cmp coerce compile
|
|
31
|
+
complex delattr dict dir divmod enumerate eval execfile exit
|
|
32
|
+
file filter float format frozenset getattr globals hasattr hash hex id
|
|
33
|
+
input int intern isinstance issubclass iter len list locals
|
|
34
|
+
long map max memoryview min next object oct open ord pow property range
|
|
35
|
+
raw_input reduce reload repr reversed round set setattr slice
|
|
36
|
+
sorted staticmethod str sum super tuple type unichr unicode
|
|
37
|
+
vars xrange zip
|
|
38
|
+
)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.builtins_pseudo
|
|
42
|
+
@builtins_pseudo ||= %w(self None Ellipsis NotImplemented False True)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def self.exceptions
|
|
46
|
+
@exceptions ||= %w(
|
|
47
|
+
ArithmeticError AssertionError AttributeError
|
|
48
|
+
BaseException BlockingIOError BrokenPipeError BufferError
|
|
49
|
+
BytesWarning ChildProcessError ConnectionAbortedError
|
|
50
|
+
ConnectionError ConnectionRefusedError ConnectionResetError
|
|
51
|
+
DeprecationWarning EOFError EnvironmentError
|
|
52
|
+
Exception FileExistsError FileNotFoundError
|
|
53
|
+
FloatingPointError FutureWarning GeneratorExit IOError
|
|
54
|
+
ImportError ImportWarning IndentationError IndexError
|
|
55
|
+
InterruptedError IsADirectoryError KeyError KeyboardInterrupt
|
|
56
|
+
LookupError MemoryError ModuleNotFoundError NameError
|
|
57
|
+
NotADirectoryError NotImplemented NotImplementedError OSError
|
|
58
|
+
OverflowError OverflowWarning PendingDeprecationWarning
|
|
59
|
+
ProcessLookupError RecursionError ReferenceError ResourceWarning
|
|
60
|
+
RuntimeError RuntimeWarning StandardError StopAsyncIteration
|
|
61
|
+
StopIteration SyntaxError SyntaxWarning SystemError SystemExit
|
|
62
|
+
TabError TimeoutError TypeError UnboundLocalError UnicodeDecodeError
|
|
63
|
+
UnicodeEncodeError UnicodeError UnicodeTranslateError
|
|
64
|
+
UnicodeWarning UserWarning ValueError VMSError Warning
|
|
65
|
+
WindowsError ZeroDivisionError
|
|
66
|
+
)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
identifier = /[a-z_][a-z0-9_]*/i
|
|
70
|
+
dotted_identifier = /[a-z_.][a-z0-9_.]*/i
|
|
71
|
+
state :root do
|
|
72
|
+
rule /\n+/m, Text
|
|
73
|
+
rule /^(:)(\s*)([ru]{,2}""".*?""")/mi do
|
|
74
|
+
groups Punctuation, Text, Str::Doc
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
rule /[^\S\n]+/, Text
|
|
78
|
+
rule %r(#(.*)?\n?), Comment::Single
|
|
79
|
+
rule /[\[\]{}:(),;]/, Punctuation
|
|
80
|
+
rule /\\\n/, Text
|
|
81
|
+
rule /\\/, Text
|
|
82
|
+
|
|
83
|
+
rule /(in|is|and|or|not)\b/, Operator::Word
|
|
84
|
+
rule /(<<|>>|\/\/|\*\*)=?/, Operator
|
|
85
|
+
rule /[-~+\/*%=<>&^|@]=?|!=/, Operator
|
|
86
|
+
rule /\.(?![0-9])/, Operator # so it doesn't match float literals
|
|
87
|
+
|
|
88
|
+
rule /(from)((?:\\\s|\s)+)(#{dotted_identifier})((?:\\\s|\s)+)(import)/ do
|
|
89
|
+
groups Keyword::Namespace,
|
|
90
|
+
Text,
|
|
91
|
+
Name::Namespace,
|
|
92
|
+
Text,
|
|
93
|
+
Keyword::Namespace
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
rule /(import)(\s+)(#{dotted_identifier})/ do
|
|
97
|
+
groups Keyword::Namespace, Text, Name::Namespace
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
rule /(def)((?:\s|\\\s)+)/ do
|
|
101
|
+
groups Keyword, Text
|
|
102
|
+
push :funcname
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
rule /(class)((?:\s|\\\s)+)/ do
|
|
106
|
+
groups Keyword, Text
|
|
107
|
+
push :classname
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# TODO: not in python 3
|
|
111
|
+
rule /`.*?`/, Str::Backtick
|
|
112
|
+
rule /(?:r|ur|ru)"""/i, Str, :raw_tdqs
|
|
113
|
+
rule /(?:r|ur|ru)'''/i, Str, :raw_tsqs
|
|
114
|
+
rule /(?:r|ur|ru)"/i, Str, :raw_dqs
|
|
115
|
+
rule /(?:r|ur|ru)'/i, Str, :raw_sqs
|
|
116
|
+
rule /u?"""/i, Str, :tdqs
|
|
117
|
+
rule /u?'''/i, Str, :tsqs
|
|
118
|
+
rule /u?"/i, Str, :dqs
|
|
119
|
+
rule /u?'/i, Str, :sqs
|
|
120
|
+
|
|
121
|
+
rule /@#{dotted_identifier}/i, Name::Decorator
|
|
122
|
+
|
|
123
|
+
# using negative lookbehind so we don't match property names
|
|
124
|
+
rule /(?<!\.)#{identifier}/ do |m|
|
|
125
|
+
if self.class.keywords.include? m[0]
|
|
126
|
+
token Keyword
|
|
127
|
+
elsif self.class.exceptions.include? m[0]
|
|
128
|
+
token Name::Builtin
|
|
129
|
+
elsif self.class.builtins.include? m[0]
|
|
130
|
+
token Name::Builtin
|
|
131
|
+
elsif self.class.builtins_pseudo.include? m[0]
|
|
132
|
+
token Name::Builtin::Pseudo
|
|
133
|
+
else
|
|
134
|
+
token Name
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
rule identifier, Name
|
|
139
|
+
|
|
140
|
+
digits = /[0-9](_?[0-9])*/
|
|
141
|
+
decimal = /((#{digits})?\.#{digits}|#{digits}\.)/
|
|
142
|
+
exponent = /e[+-]?#{digits}/i
|
|
143
|
+
rule /#{decimal}(#{exponent})?j?/i, Num::Float
|
|
144
|
+
rule /#{digits}#{exponent}j?/i, Num::Float
|
|
145
|
+
rule /#{digits}j/i, Num::Float
|
|
146
|
+
|
|
147
|
+
rule /0b(_?[0-1])+/i, Num::Bin
|
|
148
|
+
rule /0o(_?[0-7])+/i, Num::Oct
|
|
149
|
+
rule /0x(_?[a-f0-9])+/i, Num::Hex
|
|
150
|
+
rule /\d+L/, Num::Integer::Long
|
|
151
|
+
rule /([1-9](_?[0-9])*|0(_?0)*)/, Num::Integer
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
state :funcname do
|
|
155
|
+
rule identifier, Name::Function, :pop!
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
state :classname do
|
|
159
|
+
rule identifier, Name::Class, :pop!
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
state :raise do
|
|
163
|
+
rule /from\b/, Keyword
|
|
164
|
+
rule /raise\b/, Keyword
|
|
165
|
+
rule /yield\b/, Keyword
|
|
166
|
+
rule /\n/, Text, :pop!
|
|
167
|
+
rule /;/, Punctuation, :pop!
|
|
168
|
+
mixin :root
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
state :yield do
|
|
172
|
+
mixin :raise
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
state :strings do
|
|
176
|
+
rule /%(\([a-z0-9_]+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?/i, Str::Interpol
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
state :strings_double do
|
|
180
|
+
rule /[^\\"%\n]+/, Str
|
|
181
|
+
mixin :strings
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
state :strings_single do
|
|
185
|
+
rule /[^\\'%\n]+/, Str
|
|
186
|
+
mixin :strings
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
state :nl do
|
|
190
|
+
rule /\n/, Str
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
state :escape do
|
|
194
|
+
rule %r(\\
|
|
195
|
+
( [\\abfnrtv"']
|
|
196
|
+
| \n
|
|
197
|
+
| N{[a-zA-z][a-zA-Z ]+[a-zA-Z]}
|
|
198
|
+
| u[a-fA-F0-9]{4}
|
|
199
|
+
| U[a-fA-F0-9]{8}
|
|
200
|
+
| x[a-fA-F0-9]{2}
|
|
201
|
+
| [0-7]{1,3}
|
|
202
|
+
)
|
|
203
|
+
)x, Str::Escape
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
state :raw_escape do
|
|
207
|
+
rule /\\./, Str
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
state :dqs do
|
|
211
|
+
rule /"/, Str, :pop!
|
|
212
|
+
mixin :escape
|
|
213
|
+
mixin :strings_double
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
state :sqs do
|
|
217
|
+
rule /'/, Str, :pop!
|
|
218
|
+
mixin :escape
|
|
219
|
+
mixin :strings_single
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
state :tdqs do
|
|
223
|
+
rule /"""/, Str, :pop!
|
|
224
|
+
rule /"/, Str
|
|
225
|
+
mixin :escape
|
|
226
|
+
mixin :strings_double
|
|
227
|
+
mixin :nl
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
state :tsqs do
|
|
231
|
+
rule /'''/, Str, :pop!
|
|
232
|
+
rule /'/, Str
|
|
233
|
+
mixin :escape
|
|
234
|
+
mixin :strings_single
|
|
235
|
+
mixin :nl
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
%w(tdqs tsqs dqs sqs).each do |qtype|
|
|
239
|
+
state :"raw_#{qtype}" do
|
|
240
|
+
mixin :raw_escape
|
|
241
|
+
mixin :"#{qtype}"
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
end
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Q < RegexLexer
|
|
6
|
+
title 'Q'
|
|
7
|
+
desc 'The Q programming language (kx.com)'
|
|
8
|
+
tag 'q'
|
|
9
|
+
aliases 'kdb+'
|
|
10
|
+
filenames '*.q'
|
|
11
|
+
mimetypes 'text/x-q', 'application/x-q'
|
|
12
|
+
|
|
13
|
+
identifier = /\.?[a-z][a-z0-9_.]*/i
|
|
14
|
+
|
|
15
|
+
def self.keywords
|
|
16
|
+
@keywords ||= %w[do if while select update delete exec from by]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.word_operators
|
|
20
|
+
@word_operators ||= %w[
|
|
21
|
+
and or except inter like each cross vs sv within where in asof bin binr cor cov cut ej fby
|
|
22
|
+
div ij insert lj ljf mavg mcount mdev mmax mmin mmu mod msum over prior peach pj scan scov setenv ss
|
|
23
|
+
sublist uj union upsert wavg wsum xasc xbar xcol xcols xdesc xexp xgroup xkey xlog xprev xrank
|
|
24
|
+
]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.builtins
|
|
28
|
+
@builtins ||= %w[
|
|
29
|
+
first enlist value type get set count string key max min sum prd last flip distinct raze neg
|
|
30
|
+
desc differ dsave dev eval exit exp fills fkeys floor getenv group gtime hclose hcount hdel hopen hsym
|
|
31
|
+
iasc idesc inv keys load log lsq ltime ltrim maxs md5 med meta mins next parse plist prds prev rand rank ratios
|
|
32
|
+
read0 read1 reciprocal reverse rload rotate rsave rtrim save sdev show signum sin sqrt ssr sums svar system
|
|
33
|
+
tables tan til trim txf ungroup var view views wj wj1 ww
|
|
34
|
+
]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
state :root do
|
|
38
|
+
# q allows a file to start with a shebang
|
|
39
|
+
rule /#!(.*?)$/, Comment::Preproc, :top
|
|
40
|
+
rule //, Text, :top
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
state :top do
|
|
44
|
+
# indented lines at the top of the file are ignored by q
|
|
45
|
+
rule /^[ \t\r]+.*$/, Comment::Special
|
|
46
|
+
rule /\n+/, Text
|
|
47
|
+
rule //, Text, :base
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
state :base do
|
|
51
|
+
rule /\n+/m, Text
|
|
52
|
+
rule(/^.\)/, Keyword::Declaration)
|
|
53
|
+
|
|
54
|
+
# Identifiers, word operators, etc.
|
|
55
|
+
rule /#{identifier}/ do |m|
|
|
56
|
+
if self.class.keywords.include? m[0]
|
|
57
|
+
token Keyword
|
|
58
|
+
elsif self.class.word_operators.include? m[0]
|
|
59
|
+
token Operator::Word
|
|
60
|
+
elsif self.class.builtins.include? m[0]
|
|
61
|
+
token Name::Builtin
|
|
62
|
+
elsif /^\.[zQqho]\./ =~ m[0]
|
|
63
|
+
token Name::Constant
|
|
64
|
+
else
|
|
65
|
+
token Name
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# White space and comments
|
|
70
|
+
rule(%r{[ \t\r]\/.*$}, Comment::Single)
|
|
71
|
+
rule(/[ \t\r]+/, Text::Whitespace)
|
|
72
|
+
rule(%r{^/$.*?^\\$}m, Comment::Multiline)
|
|
73
|
+
rule(%r{^\/[^\n]*$(\n[^\S\n]+.*$)*}, Comment::Multiline)
|
|
74
|
+
# til EOF comment
|
|
75
|
+
rule(/^\\$/, Comment, :bottom)
|
|
76
|
+
rule(/^\\\\\s+/, Keyword, :bottom)
|
|
77
|
+
|
|
78
|
+
# Literals
|
|
79
|
+
## strings
|
|
80
|
+
rule(/"/, Str, :string)
|
|
81
|
+
## timespan/stamp constants
|
|
82
|
+
rule(/(?:\d+D|\d{4}\.[01]\d\.[0123]\d[DT])(?:[012]\d:[0-5]\d(?::[0-5]\d(?:\.\d+)?)?|([012]\d)?)[zpn]?\b/,
|
|
83
|
+
Literal::Date)
|
|
84
|
+
## time/minute/second constants
|
|
85
|
+
rule(/[012]\d:[0-5]\d(?::[0-5]\d(\.\d+)?)?[uvtpn]?\b/, Literal::Date)
|
|
86
|
+
## date constants
|
|
87
|
+
rule(/\d{4}\.[01]\d\.[0-3]\d[dpnzm]?\b/, Literal::Date)
|
|
88
|
+
## special values
|
|
89
|
+
rule(/0[nNwW][hijefcpmdznuvt]?/, Keyword::Constant)
|
|
90
|
+
|
|
91
|
+
# operators to match before numbers
|
|
92
|
+
rule(%r{'|\/:|\\:|':|\\|\/|0:|1:|2:}, Operator)
|
|
93
|
+
|
|
94
|
+
## numbers
|
|
95
|
+
rule(/(\d+[.]\d*|[.]\d+)(e[+-]?\d+)?[ef]?/, Num::Float)
|
|
96
|
+
rule(/\d+e[+-]?\d+[ef]?/, Num::Float)
|
|
97
|
+
rule(/\d+[ef]/, Num::Float)
|
|
98
|
+
rule(/0x[0-9a-f]+/i, Num::Hex)
|
|
99
|
+
rule(/[01]+b/, Num::Bin)
|
|
100
|
+
rule(/[0-9]+[hij]?/, Num::Integer)
|
|
101
|
+
## symbols and paths
|
|
102
|
+
rule(%r{(`:[:a-z0-9._\/]*|`(?:[a-z0-9.][:a-z0-9._]*)?)}i, Str::Symbol)
|
|
103
|
+
rule(/(?:<=|>=|<>|::)|[?:$%&|@._#*^\-+~,!><=]:?/, Operator)
|
|
104
|
+
|
|
105
|
+
rule /[{}\[\]();]/, Punctuation
|
|
106
|
+
|
|
107
|
+
# commands
|
|
108
|
+
rule(/\\.*\n/, Text)
|
|
109
|
+
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
state :string do
|
|
113
|
+
rule(/"/, Str, :pop!)
|
|
114
|
+
rule /\\([\\nr]|[01][0-7]{2})/, Str::Escape
|
|
115
|
+
rule /[^\\"\n]+/, Str
|
|
116
|
+
rule /\\/, Str # stray backslash
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
state :bottom do
|
|
120
|
+
rule /.*\z/m, Comment::Multiline
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
load_lexer 'javascript.rb'
|
|
7
|
+
|
|
8
|
+
class Qml < Javascript
|
|
9
|
+
title "QML"
|
|
10
|
+
desc 'QML, a UI markup language'
|
|
11
|
+
tag 'qml'
|
|
12
|
+
aliases 'qml'
|
|
13
|
+
filenames '*.qml'
|
|
14
|
+
|
|
15
|
+
mimetypes 'application/x-qml', 'text/x-qml'
|
|
16
|
+
|
|
17
|
+
id_with_dots = /[$a-zA-Z_][a-zA-Z0-9_.]*/
|
|
18
|
+
|
|
19
|
+
prepend :root do
|
|
20
|
+
rule /(#{id_with_dots})(\s*)({)/ do
|
|
21
|
+
groups Keyword::Type, Text, Punctuation
|
|
22
|
+
push :type_block
|
|
23
|
+
end
|
|
24
|
+
rule /(#{id_with_dots})(\s+)(on)(\s+)(#{id_with_dots})(\s*)({)/ do
|
|
25
|
+
groups Keyword::Type, Text, Keyword, Text, Name::Label, Text, Punctuation
|
|
26
|
+
push :type_block
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
rule /[{]/, Punctuation, :push
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
state :type_block do
|
|
33
|
+
rule /(id)(\s*)(:)(\s*)(#{id_with_dots})/ do
|
|
34
|
+
groups Name::Label, Text, Punctuation, Text, Keyword::Declaration
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
rule /(#{id_with_dots})(\s*)(:)/ do
|
|
38
|
+
groups Name::Label, Text, Punctuation
|
|
39
|
+
push :expr_start
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
rule /(signal)(\s+)(#{id_with_dots})/ do
|
|
43
|
+
groups Keyword::Declaration, Text, Name::Label
|
|
44
|
+
push :signal
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
rule /(property)(\s+)(#{id_with_dots})(\s+)(#{id_with_dots})(\s*)(:?)/ do
|
|
48
|
+
groups Keyword::Declaration, Text, Keyword::Type, Text, Name::Label, Text, Punctuation
|
|
49
|
+
push :expr_start
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
rule /[}]/, Punctuation, :pop!
|
|
53
|
+
mixin :root
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
state :signal do
|
|
57
|
+
mixin :comments_and_whitespace
|
|
58
|
+
rule /\(/ do
|
|
59
|
+
token Punctuation
|
|
60
|
+
goto :signal_args
|
|
61
|
+
end
|
|
62
|
+
rule //, Text, :pop!
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
state :signal_args do
|
|
66
|
+
mixin :comments_and_whitespace
|
|
67
|
+
rule /(#{id_with_dots})(\s+)(#{id_with_dots})(\s*)(,?)/ do
|
|
68
|
+
groups Keyword::Type, Text, Name, Text, Punctuation
|
|
69
|
+
end
|
|
70
|
+
rule /\)/ , Punctuation, :pop!
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class R < RegexLexer
|
|
7
|
+
title "R"
|
|
8
|
+
desc 'The R statistics language (r-project.org)'
|
|
9
|
+
tag 'r'
|
|
10
|
+
aliases 'r', 'R', 's', 'S'
|
|
11
|
+
filenames '*.R', '*.r', '.Rhistory', '.Rprofile'
|
|
12
|
+
mimetypes 'text/x-r-source', 'text/x-r', 'text/x-R'
|
|
13
|
+
|
|
14
|
+
mimetypes 'text/x-r', 'application/x-r'
|
|
15
|
+
|
|
16
|
+
KEYWORDS = %w(if else for while repeat in next break function)
|
|
17
|
+
|
|
18
|
+
KEYWORD_CONSTANTS = %w(
|
|
19
|
+
NULL Inf TRUE FALSE NaN NA
|
|
20
|
+
NA_integer_ NA_real_ NA_complex_ NA_character_
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
BUILTIN_CONSTANTS = %w(LETTERS letters month.abb month.name pi T F)
|
|
24
|
+
|
|
25
|
+
# These are all the functions in `base` that are implemented as a
|
|
26
|
+
# `.Primitive`, minus those functions that are also keywords.
|
|
27
|
+
PRIMITIVE_FUNCTIONS = %w(
|
|
28
|
+
abs acos acosh all any anyNA Arg as.call as.character
|
|
29
|
+
as.complex as.double as.environment as.integer as.logical
|
|
30
|
+
as.null.default as.numeric as.raw asin asinh atan atanh attr
|
|
31
|
+
attributes baseenv browser c call ceiling class Conj cos cosh
|
|
32
|
+
cospi cummax cummin cumprod cumsum digamma dim dimnames
|
|
33
|
+
emptyenv exp expression floor forceAndCall gamma gc.time
|
|
34
|
+
globalenv Im interactive invisible is.array is.atomic is.call
|
|
35
|
+
is.character is.complex is.double is.environment is.expression
|
|
36
|
+
is.finite is.function is.infinite is.integer is.language
|
|
37
|
+
is.list is.logical is.matrix is.na is.name is.nan is.null
|
|
38
|
+
is.numeric is.object is.pairlist is.raw is.recursive is.single
|
|
39
|
+
is.symbol lazyLoadDBfetch length lgamma list log max min
|
|
40
|
+
missing Mod names nargs nzchar oldClass on.exit pos.to.env
|
|
41
|
+
proc.time prod quote range Re rep retracemem return round
|
|
42
|
+
seq_along seq_len seq.int sign signif sin sinh sinpi sqrt
|
|
43
|
+
standardGeneric substitute sum switch tan tanh tanpi tracemem
|
|
44
|
+
trigamma trunc unclass untracemem UseMethod xtfrm
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
def self.detect?(text)
|
|
48
|
+
return true if text.shebang? 'Rscript'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
state :root do
|
|
52
|
+
rule /#'.*?$/, Comment::Doc
|
|
53
|
+
rule /#.*?$/, Comment::Single
|
|
54
|
+
rule /\s+/m, Text::Whitespace
|
|
55
|
+
|
|
56
|
+
rule /`[^`]+?`/, Name
|
|
57
|
+
rule /'(\\.|.)*?'/m, Str::Single
|
|
58
|
+
rule /"(\\.|.)*?"/m, Str::Double
|
|
59
|
+
|
|
60
|
+
rule /%[^%]*?%/, Operator
|
|
61
|
+
|
|
62
|
+
rule /0[xX][a-fA-F0-9]+([pP][0-9]+)?[Li]?/, Num::Hex
|
|
63
|
+
rule /[+-]?(\d+([.]\d+)?|[.]\d+)([eE][+-]?\d+)?[Li]?/,
|
|
64
|
+
Num
|
|
65
|
+
|
|
66
|
+
# Only recognize built-in functions when they are actually used as a
|
|
67
|
+
# function call, i.e. followed by an opening parenthesis.
|
|
68
|
+
# `Name::Builtin` would be more logical, but is usually not
|
|
69
|
+
# highlighted specifically; thus use `Name::Function`.
|
|
70
|
+
rule /\b(?<!.)(#{PRIMITIVE_FUNCTIONS.join('|')})(?=\()/, Name::Function
|
|
71
|
+
|
|
72
|
+
rule /[a-zA-Z.]([a-zA-Z_][\w.]*)?/ do |m|
|
|
73
|
+
if KEYWORDS.include? m[0]
|
|
74
|
+
token Keyword
|
|
75
|
+
elsif KEYWORD_CONSTANTS.include? m[0]
|
|
76
|
+
token Keyword::Constant
|
|
77
|
+
elsif BUILTIN_CONSTANTS.include? m[0]
|
|
78
|
+
token Name::Builtin
|
|
79
|
+
else
|
|
80
|
+
token Name
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
rule /[\[\]{}();,]/, Punctuation
|
|
85
|
+
|
|
86
|
+
rule %r([-<>?*+^/!=~$@:%&|]), Operator
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|