rouge 3.2.0 → 3.18.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 +5 -5
- data/Gemfile +17 -3
- data/bin/rougify +1 -0
- data/lib/rouge.rb +67 -43
- data/lib/rouge/cli.rb +84 -17
- data/lib/rouge/demos/ada +26 -0
- data/lib/rouge/demos/apex +9 -0
- data/lib/rouge/demos/armasm +12 -0
- data/lib/rouge/demos/batchfile +3 -0
- data/lib/rouge/demos/bbcbasic +6 -0
- data/lib/rouge/demos/bpf +7 -0
- data/lib/rouge/demos/brainfuck +5 -0
- data/lib/rouge/demos/clean +6 -0
- data/lib/rouge/demos/cmhg +8 -0
- data/lib/rouge/demos/csvs +8 -0
- data/lib/rouge/demos/cuda +11 -0
- data/lib/rouge/demos/cypher +5 -0
- data/lib/rouge/demos/cython +6 -0
- data/lib/rouge/demos/datastudio +21 -0
- data/lib/rouge/demos/ecl +18 -0
- data/lib/rouge/demos/eex +1 -0
- data/lib/rouge/demos/epp +4 -0
- data/lib/rouge/demos/escape +3 -0
- data/lib/rouge/demos/freefem +16 -0
- data/lib/rouge/demos/gdscript +18 -0
- data/lib/rouge/demos/ghc-cmm +23 -0
- data/lib/rouge/demos/ghc-core +26 -0
- data/lib/rouge/demos/haxe +5 -0
- data/lib/rouge/demos/hocon +8 -0
- data/lib/rouge/demos/hql +5 -0
- data/lib/rouge/demos/isbl +4 -0
- data/lib/rouge/demos/jsl +3 -0
- data/lib/rouge/demos/jsp +29 -0
- data/lib/rouge/demos/liquid +0 -1
- data/lib/rouge/demos/lustre +6 -0
- data/lib/rouge/demos/lutin +18 -0
- data/lib/rouge/demos/m68k +16 -0
- data/lib/rouge/demos/magik +6 -0
- data/lib/rouge/demos/mason +22 -0
- data/lib/rouge/demos/mathematica +8 -0
- data/lib/rouge/demos/minizinc +23 -0
- data/lib/rouge/demos/msgtrans +4 -0
- data/lib/rouge/demos/nasm +6 -6
- data/lib/rouge/demos/nesasm +11 -0
- data/lib/rouge/demos/objective_cpp +17 -0
- data/lib/rouge/demos/openedge +4 -0
- data/lib/rouge/demos/opentype_feature_file +6 -0
- data/lib/rouge/demos/plist +1 -132
- data/lib/rouge/demos/powershell +12 -48
- data/lib/rouge/demos/q +6 -0
- data/lib/rouge/demos/reasonml +12 -0
- data/lib/rouge/demos/rego +8 -0
- data/lib/rouge/demos/robot_framework +27 -0
- data/lib/rouge/demos/sas +13 -0
- data/lib/rouge/demos/slice +10 -0
- data/lib/rouge/demos/solidity +13 -0
- data/lib/rouge/demos/sparql +6 -0
- data/lib/rouge/demos/sqf +14 -0
- data/lib/rouge/demos/supercollider +11 -0
- data/lib/rouge/demos/terraform +0 -15
- data/lib/rouge/demos/ttcn3 +6 -0
- data/lib/rouge/demos/vcl +12 -0
- data/lib/rouge/demos/xojo +14 -0
- data/lib/rouge/demos/xpath +2 -0
- data/lib/rouge/demos/xquery +22 -0
- data/lib/rouge/demos/yang +17 -0
- data/lib/rouge/formatter.rb +39 -2
- data/lib/rouge/formatters/html.rb +21 -2
- data/lib/rouge/formatters/html_inline.rb +1 -0
- data/lib/rouge/formatters/html_legacy.rb +1 -0
- data/lib/rouge/formatters/html_line_table.rb +53 -0
- data/lib/rouge/formatters/html_linewise.rb +7 -11
- data/lib/rouge/formatters/html_pygments.rb +2 -0
- data/lib/rouge/formatters/html_table.rb +21 -31
- data/lib/rouge/formatters/null.rb +1 -0
- data/lib/rouge/formatters/terminal256.rb +23 -5
- data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
- data/lib/rouge/formatters/tex.rb +92 -0
- data/lib/rouge/guesser.rb +2 -0
- data/lib/rouge/guessers/disambiguation.rb +35 -0
- data/lib/rouge/guessers/filename.rb +2 -0
- data/lib/rouge/guessers/glob_mapping.rb +3 -1
- data/lib/rouge/guessers/mimetype.rb +2 -0
- data/lib/rouge/guessers/modeline.rb +3 -1
- data/lib/rouge/guessers/source.rb +3 -1
- data/lib/rouge/guessers/util.rb +2 -0
- data/lib/rouge/lexer.rb +71 -15
- data/lib/rouge/lexers/abap.rb +13 -11
- data/lib/rouge/lexers/actionscript.rb +35 -34
- data/lib/rouge/lexers/ada.rb +162 -0
- data/lib/rouge/lexers/apache.rb +13 -15
- data/lib/rouge/lexers/apache/keywords.rb +15 -0
- data/lib/rouge/lexers/apex.rb +126 -0
- data/lib/rouge/lexers/apiblueprint.rb +2 -0
- data/lib/rouge/lexers/apple_script.rb +17 -14
- data/lib/rouge/lexers/armasm.rb +145 -0
- data/lib/rouge/lexers/awk.rb +26 -25
- data/lib/rouge/lexers/batchfile.rb +164 -0
- data/lib/rouge/lexers/bbcbasic.rb +112 -0
- data/lib/rouge/lexers/biml.rb +6 -4
- data/lib/rouge/lexers/bpf.rb +118 -0
- data/lib/rouge/lexers/brainfuck.rb +53 -0
- data/lib/rouge/lexers/bsl.rb +13 -12
- data/lib/rouge/lexers/c.rb +35 -57
- data/lib/rouge/lexers/ceylon.rb +7 -34
- data/lib/rouge/lexers/cfscript.rb +27 -26
- data/lib/rouge/lexers/clean.rb +156 -0
- data/lib/rouge/lexers/clojure.rb +15 -14
- data/lib/rouge/lexers/cmake.rb +16 -14
- data/lib/rouge/lexers/cmhg.rb +34 -0
- data/lib/rouge/lexers/coffeescript.rb +90 -49
- data/lib/rouge/lexers/common_lisp.rb +39 -38
- data/lib/rouge/lexers/conf.rb +7 -6
- data/lib/rouge/lexers/console.rb +92 -38
- data/lib/rouge/lexers/coq.rb +27 -23
- data/lib/rouge/lexers/cpp.rb +24 -13
- data/lib/rouge/lexers/crystal.rb +71 -70
- data/lib/rouge/lexers/csharp.rb +29 -29
- data/lib/rouge/lexers/css.rb +24 -23
- data/lib/rouge/lexers/csvs.rb +44 -0
- data/lib/rouge/lexers/cuda.rb +35 -0
- data/lib/rouge/lexers/cypher.rb +108 -0
- data/lib/rouge/lexers/cython.rb +151 -0
- data/lib/rouge/lexers/d.rb +64 -63
- data/lib/rouge/lexers/dart.rb +34 -33
- data/lib/rouge/lexers/datastudio.rb +138 -0
- data/lib/rouge/lexers/diff.rb +10 -4
- data/lib/rouge/lexers/digdag.rb +3 -1
- data/lib/rouge/lexers/docker.rb +12 -11
- data/lib/rouge/lexers/dot.rb +19 -18
- data/lib/rouge/lexers/ecl.rb +175 -0
- data/lib/rouge/lexers/eex.rb +52 -0
- data/lib/rouge/lexers/eiffel.rb +21 -20
- data/lib/rouge/lexers/elixir.rb +52 -36
- data/lib/rouge/lexers/elm.rb +30 -29
- data/lib/rouge/lexers/epp.rb +51 -0
- data/lib/rouge/lexers/erb.rb +5 -4
- data/lib/rouge/lexers/erlang.rb +1 -0
- data/lib/rouge/lexers/escape.rb +58 -0
- data/lib/rouge/lexers/factor.rb +41 -40
- data/lib/rouge/lexers/fortran.rb +34 -32
- data/lib/rouge/lexers/freefem.rb +240 -0
- data/lib/rouge/lexers/fsharp.rb +33 -31
- data/lib/rouge/lexers/gdscript.rb +171 -0
- data/lib/rouge/lexers/ghc_cmm.rb +340 -0
- data/lib/rouge/lexers/ghc_core.rb +151 -0
- data/lib/rouge/lexers/gherkin.rb +17 -14
- data/lib/rouge/lexers/gherkin/keywords.rb +2 -0
- data/lib/rouge/lexers/glsl.rb +2 -5
- data/lib/rouge/lexers/go.rb +3 -2
- data/lib/rouge/lexers/gradle.rb +1 -0
- data/lib/rouge/lexers/graphql.rb +78 -60
- data/lib/rouge/lexers/groovy.rb +24 -25
- data/lib/rouge/lexers/hack.rb +2 -1
- data/lib/rouge/lexers/haml.rb +26 -29
- data/lib/rouge/lexers/handlebars.rb +32 -20
- data/lib/rouge/lexers/haskell.rb +67 -65
- data/lib/rouge/lexers/haxe.rb +246 -0
- data/lib/rouge/lexers/hcl.rb +26 -25
- data/lib/rouge/lexers/hocon.rb +86 -0
- data/lib/rouge/lexers/hql.rb +139 -0
- data/lib/rouge/lexers/html.rb +33 -31
- data/lib/rouge/lexers/http.rb +10 -9
- data/lib/rouge/lexers/hylang.rb +15 -14
- data/lib/rouge/lexers/idlang.rb +34 -32
- data/lib/rouge/lexers/igorpro.rb +32 -31
- data/lib/rouge/lexers/ini.rb +13 -12
- data/lib/rouge/lexers/io.rb +10 -9
- data/lib/rouge/lexers/irb.rb +6 -5
- data/lib/rouge/lexers/isbl.rb +97 -0
- data/lib/rouge/lexers/isbl/builtins.rb +17 -0
- data/lib/rouge/lexers/java.rb +29 -25
- data/lib/rouge/lexers/javascript.rb +58 -61
- data/lib/rouge/lexers/jinja.rb +39 -22
- data/lib/rouge/lexers/jsl.rb +55 -0
- data/lib/rouge/lexers/json.rb +54 -11
- data/lib/rouge/lexers/json_doc.rb +8 -5
- data/lib/rouge/lexers/jsonnet.rb +19 -18
- data/lib/rouge/lexers/jsp.rb +120 -0
- data/lib/rouge/lexers/jsx.rb +18 -16
- data/lib/rouge/lexers/julia.rb +182 -58
- data/lib/rouge/lexers/kotlin.rb +78 -26
- data/lib/rouge/lexers/lasso.rb +54 -58
- data/lib/rouge/lexers/lasso/keywords.rb +14 -0
- data/lib/rouge/lexers/liquid.rb +116 -118
- data/lib/rouge/lexers/literate_coffeescript.rb +3 -2
- data/lib/rouge/lexers/literate_haskell.rb +6 -5
- data/lib/rouge/lexers/llvm.rb +66 -49
- data/lib/rouge/lexers/lua.rb +43 -4
- data/lib/rouge/lexers/lua/builtins.rb +2 -0
- data/lib/rouge/lexers/lustre.rb +79 -0
- data/lib/rouge/lexers/lutin.rb +33 -0
- data/lib/rouge/lexers/m68k.rb +143 -0
- data/lib/rouge/lexers/magik.rb +127 -0
- data/lib/rouge/lexers/make.rb +57 -34
- data/lib/rouge/lexers/markdown.rb +67 -39
- data/lib/rouge/lexers/mason.rb +110 -0
- data/lib/rouge/lexers/mathematica.rb +96 -0
- data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
- data/lib/rouge/lexers/matlab.rb +26 -17
- data/lib/rouge/lexers/matlab/builtins.rb +4 -4
- data/lib/rouge/lexers/minizinc.rb +87 -0
- data/lib/rouge/lexers/moonscript.rb +4 -3
- data/lib/rouge/lexers/mosel.rb +64 -63
- data/lib/rouge/lexers/msgtrans.rb +26 -0
- data/lib/rouge/lexers/mxml.rb +19 -18
- data/lib/rouge/lexers/nasm.rb +43 -169
- data/lib/rouge/lexers/nesasm.rb +78 -0
- data/lib/rouge/lexers/nginx.rb +15 -14
- data/lib/rouge/lexers/nim.rb +4 -2
- data/lib/rouge/lexers/nix.rb +44 -43
- data/lib/rouge/lexers/objective_c.rb +5 -178
- data/lib/rouge/lexers/objective_c/common.rb +184 -0
- data/lib/rouge/lexers/objective_cpp.rb +31 -0
- data/lib/rouge/lexers/ocaml.rb +29 -64
- data/lib/rouge/lexers/ocaml/common.rb +53 -0
- data/lib/rouge/lexers/openedge.rb +429 -0
- data/lib/rouge/lexers/opentype_feature_file.rb +113 -0
- data/lib/rouge/lexers/pascal.rb +6 -5
- data/lib/rouge/lexers/perl.rb +102 -67
- data/lib/rouge/lexers/php.rb +91 -53
- data/lib/rouge/lexers/php/builtins.rb +183 -174
- data/lib/rouge/lexers/plain_text.rb +2 -1
- data/lib/rouge/lexers/plist.rb +16 -14
- data/lib/rouge/lexers/pony.rb +21 -20
- data/lib/rouge/lexers/powershell.rb +190 -638
- data/lib/rouge/lexers/praat.rb +76 -75
- data/lib/rouge/lexers/prolog.rb +27 -19
- data/lib/rouge/lexers/prometheus.rb +32 -30
- data/lib/rouge/lexers/properties.rb +13 -12
- data/lib/rouge/lexers/protobuf.rb +23 -22
- data/lib/rouge/lexers/puppet.rb +33 -32
- data/lib/rouge/lexers/python.rb +124 -99
- data/lib/rouge/lexers/q.rb +17 -14
- data/lib/rouge/lexers/qml.rb +13 -12
- data/lib/rouge/lexers/r.rb +13 -13
- data/lib/rouge/lexers/racket.rb +47 -22
- data/lib/rouge/lexers/reasonml.rb +65 -0
- data/lib/rouge/lexers/rego.rb +45 -0
- data/lib/rouge/lexers/robot_framework.rb +249 -0
- data/lib/rouge/lexers/ruby.rb +88 -71
- data/lib/rouge/lexers/rust.rb +45 -44
- data/lib/rouge/lexers/sas.rb +563 -0
- data/lib/rouge/lexers/sass.rb +9 -8
- data/lib/rouge/lexers/sass/common.rb +41 -40
- data/lib/rouge/lexers/scala.rb +67 -40
- data/lib/rouge/lexers/scheme.rb +19 -18
- data/lib/rouge/lexers/scss.rb +4 -3
- data/lib/rouge/lexers/sed.rb +31 -30
- data/lib/rouge/lexers/shell.rb +67 -55
- data/lib/rouge/lexers/sieve.rb +10 -9
- data/lib/rouge/lexers/slice.rb +32 -0
- data/lib/rouge/lexers/slim.rb +27 -26
- data/lib/rouge/lexers/smalltalk.rb +34 -33
- data/lib/rouge/lexers/smarty.rb +20 -19
- data/lib/rouge/lexers/sml.rb +68 -67
- data/lib/rouge/lexers/solidity.rb +185 -0
- data/lib/rouge/lexers/sparql.rb +129 -0
- data/lib/rouge/lexers/sqf.rb +109 -0
- data/lib/rouge/lexers/sqf/commands.rb +15 -0
- data/lib/rouge/lexers/sql.rb +47 -26
- data/lib/rouge/lexers/supercollider.rb +116 -0
- data/lib/rouge/lexers/swift.rb +49 -44
- data/lib/rouge/lexers/tap.rb +22 -20
- data/lib/rouge/lexers/tcl.rb +28 -27
- data/lib/rouge/lexers/terraform.rb +37 -13
- data/lib/rouge/lexers/tex.rb +20 -19
- data/lib/rouge/lexers/toml.rb +59 -20
- data/lib/rouge/lexers/tsx.rb +1 -0
- data/lib/rouge/lexers/ttcn3.rb +119 -0
- data/lib/rouge/lexers/tulip.rb +38 -36
- data/lib/rouge/lexers/turtle.rb +36 -38
- data/lib/rouge/lexers/twig.rb +1 -0
- data/lib/rouge/lexers/typescript.rb +12 -0
- data/lib/rouge/lexers/typescript/common.rb +1 -0
- data/lib/rouge/lexers/vala.rb +19 -18
- data/lib/rouge/lexers/varnish.rb +168 -0
- data/lib/rouge/lexers/vb.rb +28 -27
- data/lib/rouge/lexers/verilog.rb +27 -28
- data/lib/rouge/lexers/vhdl.rb +12 -11
- data/lib/rouge/lexers/viml.rb +15 -14
- data/lib/rouge/lexers/viml/keywords.rb +2 -0
- data/lib/rouge/lexers/vue.rb +15 -10
- data/lib/rouge/lexers/wollok.rb +27 -26
- data/lib/rouge/lexers/xml.rb +18 -21
- data/lib/rouge/lexers/xojo.rb +61 -0
- data/lib/rouge/lexers/xpath.rb +332 -0
- data/lib/rouge/lexers/xquery.rb +145 -0
- data/lib/rouge/lexers/yaml.rb +64 -61
- data/lib/rouge/lexers/yang.rb +147 -0
- data/lib/rouge/plugins/redcarpet.rb +9 -2
- data/lib/rouge/regex_lexer.rb +27 -25
- data/lib/rouge/template_lexer.rb +1 -0
- data/lib/rouge/tex_theme_renderer.rb +132 -0
- data/lib/rouge/text_analyzer.rb +1 -0
- data/lib/rouge/theme.rb +5 -0
- data/lib/rouge/themes/base16.rb +1 -0
- data/lib/rouge/themes/bw.rb +41 -0
- data/lib/rouge/themes/colorful.rb +1 -0
- data/lib/rouge/themes/github.rb +1 -0
- data/lib/rouge/themes/gruvbox.rb +1 -0
- data/lib/rouge/themes/igor_pro.rb +1 -0
- data/lib/rouge/themes/magritte.rb +78 -0
- data/lib/rouge/themes/molokai.rb +1 -0
- data/lib/rouge/themes/monokai.rb +1 -0
- data/lib/rouge/themes/monokai_sublime.rb +4 -1
- data/lib/rouge/themes/pastie.rb +2 -1
- data/lib/rouge/themes/thankful_eyes.rb +2 -1
- data/lib/rouge/themes/tulip.rb +2 -1
- data/lib/rouge/token.rb +31 -22
- data/lib/rouge/util.rb +3 -2
- data/lib/rouge/version.rb +2 -1
- data/rouge.gemspec +6 -3
- metadata +130 -8
- data/lib/rouge/lexers/apache/keywords.yml +0 -764
- data/lib/rouge/lexers/lasso/keywords.yml +0 -446
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Xojo < RegexLexer
|
|
7
|
+
title "Xojo"
|
|
8
|
+
desc "Xojo"
|
|
9
|
+
tag 'xojo'
|
|
10
|
+
aliases 'realbasic'
|
|
11
|
+
filenames '*.xojo_code', '*.xojo_window', '*.xojo_toolbar', '*.xojo_menu', '*.xojo_image', '*.rbbas', '*.rbfrm', '*.rbmnu', '*.rbres', '*.rbtbar'
|
|
12
|
+
|
|
13
|
+
keywords = %w(
|
|
14
|
+
addhandler aggregates array asc assigns attributes begin break
|
|
15
|
+
byref byval call case catch class const continue char ctype declare
|
|
16
|
+
delegate dim do downto each else elseif end enum event exception
|
|
17
|
+
exit extends false finally for function global goto if
|
|
18
|
+
implements inherits interface lib loop mod module
|
|
19
|
+
new next nil object of optional paramarray
|
|
20
|
+
private property protected public raise raiseevent rect redim
|
|
21
|
+
removehandler return select shared soft static step sub super
|
|
22
|
+
then to true try until using uend uhile
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
keywords_type = %w(
|
|
26
|
+
boolean cfstringref cgfloat cstring curency date double int8 int16
|
|
27
|
+
int32 int64 integer ostype pstring ptr short single
|
|
28
|
+
single string structure variant uinteger uint8 uint16 uint32 uint64
|
|
29
|
+
ushort windowptr wstring
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
operator_words = %w(
|
|
33
|
+
addressof weakaddressof and as in is isa mod not or xor
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
state :root do
|
|
37
|
+
rule %r/\s+/, Text::Whitespace
|
|
38
|
+
|
|
39
|
+
rule %r/rem\b.*?$/i, Comment::Single
|
|
40
|
+
rule %r([//'].*$), Comment::Single
|
|
41
|
+
rule %r/\#tag Note.*?\#tag EndNote/mi, Comment::Preproc
|
|
42
|
+
rule %r/\s*[#].*$/x, Comment::Preproc
|
|
43
|
+
|
|
44
|
+
rule %r/".*?"/, Literal::String::Double
|
|
45
|
+
rule %r/[(){}!#,:]/, Punctuation
|
|
46
|
+
|
|
47
|
+
rule %r/\b(?:#{keywords.join('|')})\b/i, Keyword
|
|
48
|
+
rule %r/\b(?:#{keywords_type.join('|')})\b/i, Keyword::Declaration
|
|
49
|
+
|
|
50
|
+
rule %r/\b(?:#{operator_words.join('|')})\b/i, Operator
|
|
51
|
+
rule %r/[+-]?(\d+\.\d*|\d*\.\d+)/i, Literal::Number::Float
|
|
52
|
+
rule %r/[+-]?\d+/, Literal::Number::Integer
|
|
53
|
+
rule %r/&[CH][0-9a-f]+/i, Literal::Number::Hex
|
|
54
|
+
rule %r/&O[0-7]+/i, Literal::Number::Oct
|
|
55
|
+
|
|
56
|
+
rule %r/\b[\w\.]+\b/i, Text
|
|
57
|
+
rule(%r(<=|>=|<>|[=><\+\-\*\/\\]), Operator)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class XPath < RegexLexer
|
|
7
|
+
title 'XPath'
|
|
8
|
+
desc 'XML Path Language (XPath) 3.1'
|
|
9
|
+
tag 'xpath'
|
|
10
|
+
filenames '*.xpath'
|
|
11
|
+
|
|
12
|
+
# Terminal literals:
|
|
13
|
+
# https://www.w3.org/TR/xpath-31/#terminal-symbols
|
|
14
|
+
def self.digits
|
|
15
|
+
@digits ||= %r/[0-9]+/
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.decimalLiteral
|
|
19
|
+
@decimalLiteral ||= %r/\.#{digits}|#{digits}\.[0-9]*/
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.doubleLiteral
|
|
23
|
+
@doubleLiteral ||= %r/(\.#{digits})|#{digits}(\.[0-9]*)?[eE][+-]?#{digits}/
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.stringLiteral
|
|
27
|
+
@stringLiteral ||= %r/("(("")|[^"])*")|('(('')|[^'])*')/
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.ncName
|
|
31
|
+
@ncName ||= %r/[a-z_][a-z_\-.0-9]*/i
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def self.qName
|
|
35
|
+
@qName ||= %r/(?:#{ncName})(?::#{ncName})?/
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def self.uriQName
|
|
39
|
+
@uriQName ||= %r/Q\{[^{}]*\}#{ncName}/
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.eqName
|
|
43
|
+
@eqName ||= %r/(?:#{uriQName}|#{qName})/
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.commentStart
|
|
47
|
+
@commentStart ||= %r/\(:/
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def self.openParen
|
|
51
|
+
@openParen ||= %r/\((?!:)/
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Terminal symbols:
|
|
55
|
+
# https://www.w3.org/TR/xpath-30/#id-terminal-delimitation
|
|
56
|
+
def self.kindTest
|
|
57
|
+
@kindTest ||= Regexp.union %w(
|
|
58
|
+
element attribute schema-element schema-attribute
|
|
59
|
+
comment text node document-node namespace-node
|
|
60
|
+
)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def self.kindTestForPI
|
|
64
|
+
@kindTestForPI ||= Regexp.union %w(processing-instruction)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def self.axes
|
|
68
|
+
@axes ||= Regexp.union %w(
|
|
69
|
+
child descendant attribute self descendant-or-self
|
|
70
|
+
following-sibling following namespace
|
|
71
|
+
parent ancestor preceding-sibling preceding ancestor-or-self
|
|
72
|
+
)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def self.operators
|
|
76
|
+
@operators ||= Regexp.union %w(, => = := : >= >> > <= << < - * != + // / || |)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def self.keywords
|
|
80
|
+
@keywords ||= Regexp.union %w(let for some every if then else return in satisfies)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def self.word_operators
|
|
84
|
+
@word_operators ||= Regexp.union %w(
|
|
85
|
+
and or eq ge gt le lt ne is
|
|
86
|
+
div mod idiv
|
|
87
|
+
intersect except union
|
|
88
|
+
to
|
|
89
|
+
)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def self.constructorTypes
|
|
93
|
+
@constructorTypes ||= Regexp.union %w(function array map empty-sequence)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Mixin states:
|
|
97
|
+
|
|
98
|
+
state :commentsAndWhitespace do
|
|
99
|
+
rule XPath.commentStart, Comment, :comment
|
|
100
|
+
rule %r/\s+/m, Text::Whitespace
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Lexical states:
|
|
104
|
+
# https://www.w3.org/TR/xquery-xpath-parsing/#XPath-lexical-states
|
|
105
|
+
# https://lists.w3.org/Archives/Public/public-qt-comments/2004Aug/0127.html
|
|
106
|
+
# https://www.w3.org/TR/xpath-30/#id-revision-log
|
|
107
|
+
# https://www.w3.org/TR/xpath-31/#id-revision-log
|
|
108
|
+
|
|
109
|
+
state :root do
|
|
110
|
+
mixin :commentsAndWhitespace
|
|
111
|
+
|
|
112
|
+
# Literals
|
|
113
|
+
rule XPath.doubleLiteral, Num::Float
|
|
114
|
+
rule XPath.decimalLiteral, Num::Float
|
|
115
|
+
rule XPath.digits, Num
|
|
116
|
+
rule XPath.stringLiteral, Literal::String
|
|
117
|
+
|
|
118
|
+
# Variables
|
|
119
|
+
rule %r/\$/, Name::Variable, :varname
|
|
120
|
+
|
|
121
|
+
# Operators
|
|
122
|
+
rule XPath.operators, Operator
|
|
123
|
+
rule %r/#{XPath.word_operators}\b/, Operator::Word
|
|
124
|
+
rule %r/#{XPath.keywords}\b/, Keyword
|
|
125
|
+
rule %r/[?,{}()\[\]]/, Punctuation
|
|
126
|
+
|
|
127
|
+
# Functions
|
|
128
|
+
rule %r/(function)(\s*)(#{XPath.openParen})/ do # function declaration
|
|
129
|
+
groups Keyword, Text::Whitespace, Punctuation
|
|
130
|
+
end
|
|
131
|
+
rule %r/(map|array|empty-sequence)/, Keyword # constructors
|
|
132
|
+
rule %r/(#{XPath.kindTest})(\s*)(#{XPath.openParen})/ do # kindtest
|
|
133
|
+
groups Keyword, Text::Whitespace, Punctuation
|
|
134
|
+
push :kindtest
|
|
135
|
+
end
|
|
136
|
+
rule %r/(#{XPath.kindTestForPI})(\s*)(#{XPath.openParen})/ do # processing instruction kindtest
|
|
137
|
+
groups Keyword, Text::Whitespace, Punctuation
|
|
138
|
+
push :kindtestforpi
|
|
139
|
+
end
|
|
140
|
+
rule %r/(#{XPath.eqName})(\s*)(#{XPath.openParen})/ do # function call
|
|
141
|
+
groups Name::Function, Text::Whitespace, Punctuation
|
|
142
|
+
end
|
|
143
|
+
rule %r/(#{XPath.eqName})(\s*)(#)(\s*)(\d+)/ do # namedFunctionRef
|
|
144
|
+
groups Name::Function, Text::Whitespace, Name::Function, Text::Whitespace, Name::Function
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Type commands
|
|
148
|
+
rule %r/(cast|castable)(\s+)(as)/ do
|
|
149
|
+
groups Keyword, Text::Whitespace, Keyword
|
|
150
|
+
push :singletype
|
|
151
|
+
end
|
|
152
|
+
rule %r/(treat)(\s+)(as)/ do
|
|
153
|
+
groups Keyword, Text::Whitespace, Keyword
|
|
154
|
+
push :itemtype
|
|
155
|
+
end
|
|
156
|
+
rule %r/(instance)(\s+)(of)/ do
|
|
157
|
+
groups Keyword, Text::Whitespace, Keyword
|
|
158
|
+
push :itemtype
|
|
159
|
+
end
|
|
160
|
+
rule %r/(as)\b/ do
|
|
161
|
+
token Keyword
|
|
162
|
+
push :itemtype
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# Paths
|
|
166
|
+
rule %r/(#{XPath.ncName})(\s*)(:)(\s*)(\*)/ do
|
|
167
|
+
groups Name::Tag, Text::Whitespace, Punctuation, Text::Whitespace, Operator
|
|
168
|
+
end
|
|
169
|
+
rule %r/(\*)(\s*)(:)(\s*)(#{XPath.ncName})/ do
|
|
170
|
+
groups Operator, Text::Whitespace, Punctuation, Text::Whitespace, Name::Tag
|
|
171
|
+
end
|
|
172
|
+
rule %r/(#{XPath.axes})(\s*)(::)/ do
|
|
173
|
+
groups Keyword, Text::Whitespace, Operator
|
|
174
|
+
end
|
|
175
|
+
rule %r/\.\.|\.|\*/, Operator
|
|
176
|
+
rule %r/@/, Name::Attribute, :attrname
|
|
177
|
+
rule XPath.eqName, Name::Tag
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
state :singletype do
|
|
181
|
+
mixin :commentsAndWhitespace
|
|
182
|
+
|
|
183
|
+
# Type name
|
|
184
|
+
rule XPath.eqName do
|
|
185
|
+
token Keyword::Type
|
|
186
|
+
pop!
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
state :itemtype do
|
|
191
|
+
mixin :commentsAndWhitespace
|
|
192
|
+
|
|
193
|
+
# Type tests
|
|
194
|
+
rule %r/(#{XPath.kindTest})(\s*)(#{XPath.openParen})/ do
|
|
195
|
+
groups Keyword::Type, Text::Whitespace, Punctuation
|
|
196
|
+
# go to kindtest then occurrenceindicator
|
|
197
|
+
goto :occurrenceindicator
|
|
198
|
+
push :kindtest
|
|
199
|
+
end
|
|
200
|
+
rule %r/(#{XPath.kindTestForPI})(\s*)(#{XPath.openParen})/ do
|
|
201
|
+
groups Keyword::Type, Text::Whitespace, Punctuation
|
|
202
|
+
# go to kindtestforpi then occurrenceindicator
|
|
203
|
+
goto :occurrenceindicator
|
|
204
|
+
push :kindtestforpi
|
|
205
|
+
end
|
|
206
|
+
rule %r/(item)(\s*)(#{XPath.openParen})(\s*)(\))/ do
|
|
207
|
+
groups Keyword::Type, Text::Whitespace, Punctuation, Text::Whitespace, Punctuation
|
|
208
|
+
goto :occurrenceindicator
|
|
209
|
+
end
|
|
210
|
+
rule %r/(#{XPath.constructorTypes})(\s*)(#{XPath.openParen})/ do
|
|
211
|
+
groups Keyword::Type, Text::Whitespace, Punctuation
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
# Type commands
|
|
215
|
+
rule %r/(cast|castable)(\s+)(as)/ do
|
|
216
|
+
groups Keyword, Text::Whitespace, Keyword
|
|
217
|
+
goto :singletype
|
|
218
|
+
end
|
|
219
|
+
rule %r/(treat)(\s+)(as)/ do
|
|
220
|
+
groups Keyword, Text::Whitespace, Keyword
|
|
221
|
+
goto :itemtype
|
|
222
|
+
end
|
|
223
|
+
rule %r/(instance)(\s+)(of)/ do
|
|
224
|
+
groups Keyword, Text::Whitespace, Keyword
|
|
225
|
+
goto :itemtype
|
|
226
|
+
end
|
|
227
|
+
rule %r/(as)\b/, Keyword
|
|
228
|
+
|
|
229
|
+
# Operators
|
|
230
|
+
rule XPath.operators do
|
|
231
|
+
token Operator
|
|
232
|
+
pop!
|
|
233
|
+
end
|
|
234
|
+
rule %r/#{XPath.word_operators}\b/ do
|
|
235
|
+
token Operator::Word
|
|
236
|
+
pop!
|
|
237
|
+
end
|
|
238
|
+
rule %r/#{XPath.keywords}\b/ do
|
|
239
|
+
token Keyword
|
|
240
|
+
pop!
|
|
241
|
+
end
|
|
242
|
+
rule %r/[\[),]/ do
|
|
243
|
+
token Punctuation
|
|
244
|
+
pop!
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
# Other types (e.g. xs:double)
|
|
248
|
+
rule XPath.eqName do
|
|
249
|
+
token Keyword::Type
|
|
250
|
+
goto :occurrenceindicator
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
# For pseudo-parameters for the KindTest productions
|
|
255
|
+
state :kindtest do
|
|
256
|
+
mixin :commentsAndWhitespace
|
|
257
|
+
|
|
258
|
+
# Pseudo-parameters:
|
|
259
|
+
rule %r/[?*]/, Operator
|
|
260
|
+
rule %r/,/, Punctuation
|
|
261
|
+
rule %r/(element|schema-element)(\s*)(#{XPath.openParen})/ do
|
|
262
|
+
groups Keyword::Type, Text::Whitespace, Punctuation
|
|
263
|
+
push :kindtest
|
|
264
|
+
end
|
|
265
|
+
rule XPath.eqName, Name::Tag
|
|
266
|
+
|
|
267
|
+
# End of pseudo-parameters
|
|
268
|
+
rule %r/\)/, Punctuation, :pop!
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
# Similar to :kindtest, but recognizes NCNames instead of EQNames
|
|
272
|
+
state :kindtestforpi do
|
|
273
|
+
mixin :commentsAndWhitespace
|
|
274
|
+
|
|
275
|
+
# Pseudo-parameters
|
|
276
|
+
rule XPath.ncName, Name
|
|
277
|
+
rule XPath.stringLiteral, Literal::String
|
|
278
|
+
|
|
279
|
+
# End of pseudo-parameters
|
|
280
|
+
rule %r/\)/, Punctuation, :pop!
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
state :occurrenceindicator do
|
|
284
|
+
mixin :commentsAndWhitespace
|
|
285
|
+
|
|
286
|
+
# Occurrence indicator
|
|
287
|
+
rule %r/[?*+]/ do
|
|
288
|
+
token Operator
|
|
289
|
+
pop!
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
# Otherwise, lex it in root state:
|
|
293
|
+
rule %r/(?![?*+])/ do
|
|
294
|
+
pop!
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
state :varname do
|
|
299
|
+
mixin :commentsAndWhitespace
|
|
300
|
+
|
|
301
|
+
# Function call
|
|
302
|
+
rule %r/(#{XPath.eqName})(\s*)(#{XPath.openParen})/ do
|
|
303
|
+
groups Name::Variable, Text::Whitespace, Punctuation
|
|
304
|
+
pop!
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
# Variable name
|
|
308
|
+
rule XPath.eqName, Name::Variable, :pop!
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
state :attrname do
|
|
312
|
+
mixin :commentsAndWhitespace
|
|
313
|
+
|
|
314
|
+
# Attribute name
|
|
315
|
+
rule XPath.eqName, Name::Attribute, :pop!
|
|
316
|
+
rule %r/\*/, Operator, :pop!
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
state :comment do
|
|
320
|
+
# Comment end
|
|
321
|
+
rule %r/:\)/, Comment, :pop!
|
|
322
|
+
|
|
323
|
+
# Nested comment
|
|
324
|
+
rule XPath.commentStart, Comment, :comment
|
|
325
|
+
|
|
326
|
+
# Comment contents
|
|
327
|
+
rule %r/[^:(]+/m, Comment
|
|
328
|
+
rule %r/[:(]/, Comment
|
|
329
|
+
end
|
|
330
|
+
end
|
|
331
|
+
end
|
|
332
|
+
end
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
load_lexer 'xpath.rb'
|
|
7
|
+
class XQuery < XPath
|
|
8
|
+
title 'XQuery'
|
|
9
|
+
desc 'XQuery 3.1: An XML Query Language'
|
|
10
|
+
tag 'xquery'
|
|
11
|
+
filenames '*.xquery', '*.xq'
|
|
12
|
+
mimetypes 'application/xquery'
|
|
13
|
+
|
|
14
|
+
def self.keywords
|
|
15
|
+
@keywords ||= Regexp.union super, Regexp.union(%w(
|
|
16
|
+
xquery encoding version declare module
|
|
17
|
+
namespace copy-namespaces boundary-space construction
|
|
18
|
+
default collation base-uri preserve strip
|
|
19
|
+
ordering ordered unordered order empty greatest least
|
|
20
|
+
preserve no-preserve inherit no-inherit
|
|
21
|
+
decimal-format decimal-separator grouping-separator
|
|
22
|
+
infinity minus-sign NaN percent per-mille
|
|
23
|
+
zero-digit digit pattern-separator exponent-separator
|
|
24
|
+
import schema at element option
|
|
25
|
+
function external context item
|
|
26
|
+
typeswitch switch case
|
|
27
|
+
try catch
|
|
28
|
+
validate lax strict type
|
|
29
|
+
document element attribute text comment processing-instruction
|
|
30
|
+
for let where order group by return
|
|
31
|
+
allowing tumbling stable sliding window
|
|
32
|
+
start end only when previous next count collation
|
|
33
|
+
ascending descending
|
|
34
|
+
))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Mixin states:
|
|
38
|
+
|
|
39
|
+
state :tags do
|
|
40
|
+
rule %r/<#{XPath.qName}/, Name::Tag, :start_tag
|
|
41
|
+
rule %r/<!--/, Comment, :xml_comment
|
|
42
|
+
rule %r/<\?.*?\?>/, Comment::Preproc
|
|
43
|
+
rule %r/<!\[CDATA\[.*?\]\]>/, Comment::Preproc
|
|
44
|
+
rule %r/&\S*?;/, Name::Entity
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Lexical states:
|
|
48
|
+
|
|
49
|
+
prepend :root do
|
|
50
|
+
mixin :tags
|
|
51
|
+
|
|
52
|
+
rule %r/\{/, Punctuation
|
|
53
|
+
rule %r/\}`?/ do
|
|
54
|
+
token Punctuation
|
|
55
|
+
if stack.length > 1
|
|
56
|
+
pop!
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
rule %r/(namespace)(\s+)(#{XPath.ncName})/ do
|
|
61
|
+
groups Keyword, Text::Whitespace, Name::Namespace
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
rule %r/(#{XQuery.keywords})\b/, Keyword
|
|
65
|
+
rule %r/;/, Punctuation
|
|
66
|
+
rule %r/%/, Keyword::Declaration, :annotation
|
|
67
|
+
|
|
68
|
+
rule %r/(\(#)(\s*)(#{XPath.eqName})/ do
|
|
69
|
+
groups Comment::Preproc, Text::Whitespace, Name::Tag
|
|
70
|
+
push :pragma
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
rule %r/``\[/, Str, :str_constructor
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
state :annotation do
|
|
77
|
+
mixin :commentsAndWhitespace
|
|
78
|
+
rule XPath.eqName, Keyword::Declaration, :pop!
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
state :pragma do
|
|
82
|
+
mixin :commentsAndWhitespace
|
|
83
|
+
rule %r/#\)/, Comment::Preproc, :pop!
|
|
84
|
+
rule %r/./, Comment::Preproc
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# https://www.w3.org/TR/xquery-31/#id-string-constructors
|
|
88
|
+
state :str_constructor do
|
|
89
|
+
rule %r/`\{/, Punctuation, :root
|
|
90
|
+
rule %r/\]``/, Str, :pop!
|
|
91
|
+
rule %r/[^`\]]+/m, Str
|
|
92
|
+
rule %r/[`\]]/, Str
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
state :xml_comment do
|
|
96
|
+
rule %r/[^-]+/m, Comment
|
|
97
|
+
rule %r/-->/, Comment, :pop!
|
|
98
|
+
rule %r/-/, Comment
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
state :start_tag do
|
|
102
|
+
rule %r/\s+/m, Text::Whitespace
|
|
103
|
+
rule %r/([\w.:-]+\s*=)(")/m do
|
|
104
|
+
groups Name::Attribute, Str
|
|
105
|
+
push :quot_attr
|
|
106
|
+
end
|
|
107
|
+
rule %r/([\w.:-]+\s*=)(')/m do
|
|
108
|
+
groups Name::Attribute, Str
|
|
109
|
+
push :apos_attr
|
|
110
|
+
end
|
|
111
|
+
rule %r/>/, Name::Tag, :tag_content
|
|
112
|
+
rule %r(/>), Name::Tag, :pop!
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
state :quot_attr do
|
|
116
|
+
rule %r/"/, Str, :pop!
|
|
117
|
+
rule %r/\{\{/, Str
|
|
118
|
+
rule %r/\{/, Punctuation, :root
|
|
119
|
+
rule %r/[^"{>]+/m, Str
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
state :apos_attr do
|
|
123
|
+
rule %r/'/, Str, :pop!
|
|
124
|
+
rule %r/\{\{/, Str
|
|
125
|
+
rule %r/\{/, Punctuation, :root
|
|
126
|
+
rule %r/[^'{>]+/m, Str
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
state :tag_content do
|
|
130
|
+
rule %r/\s+/m, Text::Whitespace
|
|
131
|
+
mixin :tags
|
|
132
|
+
|
|
133
|
+
rule %r/(\{\{|\}\})/, Text
|
|
134
|
+
rule %r/\{/, Punctuation, :root
|
|
135
|
+
|
|
136
|
+
rule %r/[^{}<&]/, Text
|
|
137
|
+
|
|
138
|
+
rule %r(</#{XPath.qName}(\s*)>) do
|
|
139
|
+
token Name::Tag
|
|
140
|
+
pop! 2 # pop self and tag_start
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|