rouge 4.6.1 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +11 -4
- data/bin/rougify +3 -4
- data/lib/rouge/cli.rb +7 -10
- data/lib/rouge/demos/abap +30 -4
- data/lib/rouge/demos/dylan +8 -0
- data/lib/rouge/demos/gjs +23 -0
- data/lib/rouge/demos/gts +36 -0
- data/lib/rouge/demos/kick_assembler +14 -0
- data/lib/rouge/demos/pdf +29 -0
- data/lib/rouge/demos/thrift +15 -0
- data/lib/rouge/demos/veryl +24 -0
- data/lib/rouge/eager.rb +3 -0
- data/lib/rouge/formatters/html.rb +8 -1
- data/lib/rouge/formatters/html_debug.rb +16 -0
- data/lib/rouge/formatters/html_legacy.rb +15 -1
- data/lib/rouge/formatters/html_legacy_table.rb +57 -0
- data/lib/rouge/formatters/html_line_highlighter.rb +11 -4
- data/lib/rouge/formatters/html_line_table.rb +8 -3
- data/lib/rouge/formatters/html_linewise.rb +11 -2
- data/lib/rouge/formatters/html_pygments.rb +6 -1
- data/lib/rouge/formatters/html_table.rb +47 -21
- data/lib/rouge/formatters/terminal256.rb +3 -3
- data/lib/rouge/formatters/tex.rb +1 -1
- data/lib/rouge/guesser.rb +1 -1
- data/lib/rouge/guessers/disambiguation.rb +2 -2
- data/lib/rouge/guessers/glob_mapping.rb +2 -2
- data/lib/rouge/guessers/modeline.rb +2 -2
- data/lib/rouge/lexer.rb +40 -21
- data/lib/rouge/lexers/abap/builtins.rb +187 -0
- data/lib/rouge/lexers/abap.rb +70 -178
- data/lib/rouge/lexers/ada.rb +1 -1
- data/lib/rouge/lexers/apache/keywords.rb +3 -11
- data/lib/rouge/lexers/apache.rb +25 -24
- data/lib/rouge/lexers/apex.rb +2 -2
- data/lib/rouge/lexers/apiblueprint.rb +2 -2
- data/lib/rouge/lexers/bicep.rb +2 -2
- data/lib/rouge/lexers/biml.rb +36 -9
- data/lib/rouge/lexers/brightscript.rb +3 -4
- data/lib/rouge/lexers/c.rb +9 -5
- data/lib/rouge/lexers/cobol.rb +1 -1
- data/lib/rouge/lexers/console.rb +11 -5
- data/lib/rouge/lexers/cpp.rb +10 -12
- data/lib/rouge/lexers/crystal.rb +1 -1
- data/lib/rouge/lexers/css.rb +21 -2
- data/lib/rouge/lexers/cuda.rb +4 -4
- data/lib/rouge/lexers/cython.rb +26 -50
- data/lib/rouge/lexers/dafny.rb +1 -1
- data/lib/rouge/lexers/dart.rb +2 -0
- data/lib/rouge/lexers/datastudio.rb +1 -1
- data/lib/rouge/lexers/digdag.rb +2 -3
- data/lib/rouge/lexers/dylan.rb +109 -0
- data/lib/rouge/lexers/ecl.rb +3 -3
- data/lib/rouge/lexers/elixir.rb +14 -9
- data/lib/rouge/lexers/escape.rb +1 -1
- data/lib/rouge/lexers/factor.rb +1 -1
- data/lib/rouge/lexers/freefem.rb +2 -2
- data/lib/rouge/lexers/ghc_cmm.rb +1 -1
- data/lib/rouge/lexers/ghc_core.rb +1 -1
- data/lib/rouge/lexers/gherkin/keywords.rb +10 -6
- data/lib/rouge/lexers/gherkin.rb +28 -26
- data/lib/rouge/lexers/gjs.rb +39 -0
- data/lib/rouge/lexers/glsl/builtins.rb +17 -0
- data/lib/rouge/lexers/glsl.rb +50 -113
- data/lib/rouge/lexers/go.rb +8 -6
- data/lib/rouge/lexers/gradle.rb +2 -2
- data/lib/rouge/lexers/groovy.rb +6 -0
- data/lib/rouge/lexers/gts.rb +39 -0
- data/lib/rouge/lexers/hack.rb +4 -6
- data/lib/rouge/lexers/haxe.rb +2 -2
- data/lib/rouge/lexers/hlsl.rb +6 -6
- data/lib/rouge/lexers/hocon.rb +2 -2
- data/lib/rouge/lexers/hql.rb +15 -19
- data/lib/rouge/lexers/idris.rb +1 -1
- data/lib/rouge/lexers/igorpro/builtins.rb +1530 -0
- data/lib/rouge/lexers/igorpro.rb +49 -520
- data/lib/rouge/lexers/irb.rb +3 -3
- data/lib/rouge/lexers/isbl.rb +7 -43
- data/lib/rouge/lexers/j.rb +1 -1
- data/lib/rouge/lexers/json5.rb +2 -2
- data/lib/rouge/lexers/json_doc.rb +2 -2
- data/lib/rouge/lexers/jsp.rb +119 -119
- data/lib/rouge/lexers/jsx.rb +2 -2
- data/lib/rouge/lexers/kick_assembler.rb +100 -0
- data/lib/rouge/lexers/kotlin.rb +5 -0
- data/lib/rouge/lexers/lasso/keywords.rb +6 -6
- data/lib/rouge/lexers/lasso.rb +9 -11
- data/lib/rouge/lexers/liquid.rb +5 -6
- data/lib/rouge/lexers/llvm/keywords.rb +3 -12
- data/lib/rouge/lexers/llvm.rb +5 -16
- data/lib/rouge/lexers/lua/keywords.rb +11 -13
- data/lib/rouge/lexers/lua.rb +8 -7
- data/lib/rouge/lexers/lutin.rb +5 -4
- data/lib/rouge/lexers/m68k.rb +3 -3
- data/lib/rouge/lexers/mason.rb +110 -110
- data/lib/rouge/lexers/mathematica/keywords.rb +1 -3
- data/lib/rouge/lexers/mathematica.rb +6 -7
- data/lib/rouge/lexers/matlab/keywords.rb +2 -2
- data/lib/rouge/lexers/matlab.rb +5 -5
- data/lib/rouge/lexers/meson.rb +1 -1
- data/lib/rouge/lexers/mojo.rb +6 -2
- data/lib/rouge/lexers/moonscript.rb +19 -17
- data/lib/rouge/lexers/nesasm.rb +6 -6
- data/lib/rouge/lexers/nial.rb +7 -8
- data/lib/rouge/lexers/nim.rb +3 -3
- data/lib/rouge/lexers/nix.rb +10 -8
- data/lib/rouge/lexers/objective_c.rb +3 -3
- data/lib/rouge/lexers/objective_cpp.rb +3 -2
- data/lib/rouge/lexers/ocaml.rb +2 -2
- data/lib/rouge/lexers/openedge.rb +9 -9
- data/lib/rouge/lexers/pdf.rb +109 -0
- data/lib/rouge/lexers/php/keywords.rb +136 -188
- data/lib/rouge/lexers/php.rb +100 -11
- data/lib/rouge/lexers/plsql.rb +8 -9
- data/lib/rouge/lexers/postscript.rb +1 -1
- data/lib/rouge/lexers/powershell.rb +1 -1
- data/lib/rouge/lexers/python.rb +111 -66
- data/lib/rouge/lexers/qml.rb +2 -2
- data/lib/rouge/lexers/reasonml.rb +2 -2
- data/lib/rouge/lexers/rego.rb +53 -53
- data/lib/rouge/lexers/rescript.rb +2 -2
- data/lib/rouge/lexers/robot_framework.rb +12 -12
- data/lib/rouge/lexers/{coq.rb → rocq.rb} +15 -6
- data/lib/rouge/lexers/ruby.rb +33 -7
- data/lib/rouge/lexers/rust.rb +1 -0
- data/lib/rouge/lexers/sas.rb +164 -165
- data/lib/rouge/lexers/sass/common.rb +1 -1
- data/lib/rouge/lexers/sass.rb +2 -2
- data/lib/rouge/lexers/scss.rb +2 -2
- data/lib/rouge/lexers/sed.rb +1 -1
- data/lib/rouge/lexers/shell.rb +5 -5
- data/lib/rouge/lexers/slice.rb +2 -2
- data/lib/rouge/lexers/sparql.rb +1 -1
- data/lib/rouge/lexers/sqf/keywords.rb +5 -3
- data/lib/rouge/lexers/sqf.rb +3 -4
- data/lib/rouge/lexers/stan.rb +9 -15
- data/lib/rouge/lexers/svelte.rb +2 -2
- data/lib/rouge/lexers/swift.rb +2 -2
- data/lib/rouge/lexers/tcl.rb +1 -1
- data/lib/rouge/lexers/terraform.rb +3 -3
- data/lib/rouge/lexers/thrift.rb +120 -0
- data/lib/rouge/lexers/tsx.rb +3 -3
- data/lib/rouge/lexers/ttcn3.rb +1 -1
- data/lib/rouge/lexers/twig.rb +2 -2
- data/lib/rouge/lexers/typescript.rb +3 -3
- data/lib/rouge/lexers/varnish.rb +8 -8
- data/lib/rouge/lexers/veryl.rb +109 -0
- data/lib/rouge/lexers/viml/keywords.rb +5 -7
- data/lib/rouge/lexers/viml.rb +8 -10
- data/lib/rouge/lexers/vue.rb +2 -2
- data/lib/rouge/lexers/xquery.rb +2 -1
- data/lib/rouge/lexers/yaml.rb +13 -1
- data/lib/rouge/lexers/yang.rb +42 -74
- data/lib/rouge/lexers/zig.rb +10 -10
- data/lib/rouge/plugins/redcarpet.rb +3 -2
- data/lib/rouge/regex_lexer.rb +25 -14
- data/lib/rouge/themes/gruvbox.rb +3 -0
- data/lib/rouge/token.rb +1 -1
- data/lib/rouge/util.rb +1 -1
- data/lib/rouge/version.rb +1 -1
- data/lib/rouge.rb +70 -59
- data/lib/rubocop/cop/rouge/no_building_alternation_pattern_in_regexp.rb +71 -0
- data/lib/rubocop/cop/rouge/no_huge_collections.rb +37 -0
- data/rouge.gemspec +8 -5
- metadata +44 -9
- data/lib/rouge/lexers/isbl/builtins.rb +0 -17
- data/lib/rouge/lexers/matlab/builtins.rb +0 -11
- /data/lib/rouge/demos/{coq → rocq} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*- #
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
|
+
require_relative 'lua'
|
|
5
|
+
|
|
4
6
|
module Rouge
|
|
5
7
|
module Lexers
|
|
6
|
-
load_lexer 'lua.rb'
|
|
7
|
-
|
|
8
8
|
class Moonscript < RegexLexer
|
|
9
9
|
title "MoonScript"
|
|
10
10
|
desc "Moonscript (http://www.moonscript.org)"
|
|
@@ -16,6 +16,9 @@ module Rouge
|
|
|
16
16
|
option :function_highlighting, 'Whether to highlight builtin functions (default: true)'
|
|
17
17
|
option :disabled_modules, 'builtin modules to disable'
|
|
18
18
|
|
|
19
|
+
# depends on lua builtins
|
|
20
|
+
lazy { Lua.eager_load! }
|
|
21
|
+
|
|
19
22
|
def initialize(*)
|
|
20
23
|
super
|
|
21
24
|
|
|
@@ -31,7 +34,7 @@ module Rouge
|
|
|
31
34
|
return [] unless @function_highlighting
|
|
32
35
|
|
|
33
36
|
@builtins ||= Set.new.tap do |builtins|
|
|
34
|
-
|
|
37
|
+
Lua::BUILTINS.each do |mod, fns|
|
|
35
38
|
next if @disabled_modules.include? mod
|
|
36
39
|
builtins.merge(fns)
|
|
37
40
|
end
|
|
@@ -44,36 +47,35 @@ module Rouge
|
|
|
44
47
|
end
|
|
45
48
|
|
|
46
49
|
state :base do
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
rule %r(
|
|
50
|
-
rule %r((?i)\d+e[+-]?\d+), Num::Float
|
|
51
|
-
rule %r((?i)0x[0-9a-f]*), Num::Hex
|
|
50
|
+
rule %r((\d*\.\d+|\d+\.\d*)(e[+-]?\d+)?')i, Num::Float
|
|
51
|
+
rule %r(\d+e[+-]?\d+)i, Num::Float
|
|
52
|
+
rule %r(0x\h*), Num::Hex
|
|
52
53
|
rule %r(\d+), Num::Integer
|
|
53
|
-
rule %r(
|
|
54
|
+
rule %r(@\w+), Name::Variable::Instance
|
|
54
55
|
rule %r([A-Z]\w*), Name::Class
|
|
55
56
|
rule %r("?[^"]+":), Literal::String::Symbol
|
|
56
|
-
rule %r(
|
|
57
|
-
rule %r(
|
|
57
|
+
rule %r(\w+:), Literal::String::Symbol
|
|
58
|
+
rule %r(:\w+), Literal::String::Symbol
|
|
58
59
|
|
|
59
60
|
rule %r(\s+), Text::Whitespace
|
|
60
61
|
rule %r((==|~=|!=|<=|>=|\.\.\.|\.\.|->|=>|[=+\-*/%^<>#!\\])), Operator
|
|
61
62
|
rule %r([\[\]\{\}\(\)\.,:;]), Punctuation
|
|
62
63
|
rule %r((and|or|not)\b), Operator::Word
|
|
63
64
|
|
|
64
|
-
keywords = %w{
|
|
65
|
-
break class continue do else elseif end extends for if import in
|
|
65
|
+
keywords = Set.new %w{
|
|
66
|
+
break class continue do else elseif end extends for if import in from
|
|
66
67
|
repeat return switch super then unless until using when with while
|
|
67
68
|
}
|
|
68
|
-
rule %r((#{keywords.join('|')})\b), Keyword
|
|
69
69
|
rule %r((local|export)\b), Keyword::Declaration
|
|
70
70
|
rule %r((true|false|nil)\b), Keyword::Constant
|
|
71
71
|
|
|
72
|
-
rule %r([
|
|
72
|
+
rule %r([a-z_]\w*(\.[a-z_]\w*)?)i do |m|
|
|
73
73
|
name = m[0]
|
|
74
|
-
if
|
|
74
|
+
if keywords.include?(name)
|
|
75
|
+
token Keyword
|
|
76
|
+
elsif self.builtins.include?(name)
|
|
75
77
|
token Name::Builtin
|
|
76
|
-
elsif name
|
|
78
|
+
elsif name.include?('.')
|
|
77
79
|
a, b = name.split('.', 2)
|
|
78
80
|
token Name, a
|
|
79
81
|
token Punctuation, '.'
|
data/lib/rouge/lexers/nesasm.rb
CHANGED
|
@@ -21,7 +21,7 @@ module Rouge
|
|
|
21
21
|
|
|
22
22
|
def self.keywords_type
|
|
23
23
|
@keywords_type ||= %w(
|
|
24
|
-
DB DW BYTE WORD
|
|
24
|
+
DB DW BYTE WORD
|
|
25
25
|
)
|
|
26
26
|
end
|
|
27
27
|
|
|
@@ -32,12 +32,12 @@ module Rouge
|
|
|
32
32
|
ENDIF FAIL INESPRG INESCHR INESMAP INESMIR FUNC
|
|
33
33
|
)
|
|
34
34
|
end
|
|
35
|
-
|
|
35
|
+
|
|
36
36
|
state :root do
|
|
37
37
|
rule %r/\s+/m, Text
|
|
38
38
|
rule %r(;.*), Comment::Single
|
|
39
39
|
|
|
40
|
-
rule %r/[\(\)\,\.\[\]]/, Punctuation
|
|
40
|
+
rule %r/[\(\)\,\.\[\]]/, Punctuation
|
|
41
41
|
rule %r/\#?\%[0-1]+/, Num::Bin # #%00110011 %00110011
|
|
42
42
|
rule %r/\#?\$\h+/, Num::Hex # $1f #$1f
|
|
43
43
|
rule %r/\#?\d+/, Num # 10 #10
|
|
@@ -45,7 +45,7 @@ module Rouge
|
|
|
45
45
|
|
|
46
46
|
rule %r/\#?\w+:?/i do |m|
|
|
47
47
|
name = m[0].upcase
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
if self.class.keywords.include? name
|
|
50
50
|
token Keyword
|
|
51
51
|
elsif self.class.keywords_type.include? name
|
|
@@ -58,13 +58,13 @@ module Rouge
|
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
rule %r/\#?(?:LOW|HIGH)\(.*\)/i, Keyword::Reserved # LOW() #HIGH()
|
|
61
|
-
|
|
61
|
+
|
|
62
62
|
rule %r/\#\(/, Punctuation # #()
|
|
63
63
|
|
|
64
64
|
rule %r/"/, Str, :string
|
|
65
65
|
|
|
66
66
|
rule %r/'\w'/, Str::Char # 'A' for example
|
|
67
|
-
|
|
67
|
+
|
|
68
68
|
rule %r/\\\??[\d@#]/, Name::Builtin # builtin parameters for use inside macros and functions: \1-\9 , \?1-\?9 , \# , \@
|
|
69
69
|
end
|
|
70
70
|
|
data/lib/rouge/lexers/nial.rb
CHANGED
|
@@ -8,7 +8,7 @@ module Rouge
|
|
|
8
8
|
desc 'The Nial programming language (nial-array-language.org)'
|
|
9
9
|
tag 'nial'
|
|
10
10
|
filenames '*.ndf', '*.nlg'
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
def self.keywords
|
|
13
13
|
@keywords ||= Set.new ["is", "gets", "op", "tr", ";",
|
|
14
14
|
"if", "then", "elseif", "else",
|
|
@@ -40,7 +40,7 @@ module Rouge
|
|
|
40
40
|
"reduce", "reducecols", "reducerows",
|
|
41
41
|
"sort", "team", "timeit", "twig"]
|
|
42
42
|
end
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
def self.funcs
|
|
45
45
|
@funcs ||= Set.new ["operation", "expression", "and", "abs",
|
|
46
46
|
"allbools", "allints", "allchars", "allin",
|
|
@@ -56,9 +56,9 @@ module Rouge
|
|
|
56
56
|
"cutall", "cut", "display", "deparse",
|
|
57
57
|
"deepupdate", "descan", "depth", "diagram",
|
|
58
58
|
"div", "divide", "drop", "dropright", "edit",
|
|
59
|
-
"empty", "
|
|
59
|
+
"empty", "exit", "except", "erase",
|
|
60
60
|
"equal", "eval", "eraserecord", "execute", "exp",
|
|
61
|
-
"external", "exprs", "findall", "find",
|
|
61
|
+
"external", "exprs", "findall", "find",
|
|
62
62
|
"fault", "falsehood", "filestatus", "filelength",
|
|
63
63
|
"filepath", "filetally", "floor", "first",
|
|
64
64
|
"flip", "fuse", "fromraw", "front",
|
|
@@ -72,8 +72,7 @@ module Rouge
|
|
|
72
72
|
"loaddefs", "nonlocal", "max", "match", "log",
|
|
73
73
|
"lt", "lower", "lte", "mate", "min", "maxlength",
|
|
74
74
|
"mod", "mix", "minus", "nialroot", "mold", "not",
|
|
75
|
-
"numeric", "no_op", "no_expr", "notin",
|
|
76
|
-
"operation", "open", "or", "opposite", "opp",
|
|
75
|
+
"numeric", "no_op", "no_expr", "notin", "open", "or", "opposite", "opp",
|
|
77
76
|
"operators", "plus", "pick", "pack", "pass", "pair", "parse",
|
|
78
77
|
"paste", "phrase", "place", "picture", "placeall",
|
|
79
78
|
"power", "positions", "post", "quotient", "putfile",
|
|
@@ -137,7 +136,7 @@ module Rouge
|
|
|
137
136
|
token Text
|
|
138
137
|
end
|
|
139
138
|
end
|
|
140
|
-
|
|
139
|
+
|
|
141
140
|
rule %r/\b[_A-Za-z]\w*\b/ do |m|
|
|
142
141
|
lower = m[0].downcase
|
|
143
142
|
if self.class.keywords.include?(lower)
|
|
@@ -155,7 +154,7 @@ module Rouge
|
|
|
155
154
|
|
|
156
155
|
rule %r/\s+/, Text
|
|
157
156
|
end
|
|
158
|
-
|
|
157
|
+
|
|
159
158
|
state :str do
|
|
160
159
|
rule %r/''/, Str::Escape
|
|
161
160
|
rule %r/[^']+/, Str::Single
|
data/lib/rouge/lexers/nim.rb
CHANGED
|
@@ -134,9 +134,9 @@ module Rouge
|
|
|
134
134
|
# Note: Have to do this with a block to push multiple states first,
|
|
135
135
|
# since we can't pass array of states like w/ Pygments.
|
|
136
136
|
rule(/[0-9][0-9_]*(?=([eE.]|'?[fF](32|64)))/) do
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
137
|
+
push :floatsuffix
|
|
138
|
+
push :floatnumber
|
|
139
|
+
token Num::Float
|
|
140
140
|
end
|
|
141
141
|
|
|
142
142
|
rule(/0[xX][a-fA-F0-9][a-fA-F0-9_]*/, Num::Hex, :intsuffix)
|
data/lib/rouge/lexers/nix.rb
CHANGED
|
@@ -10,6 +10,8 @@ module Rouge
|
|
|
10
10
|
aliases 'nixos'
|
|
11
11
|
filenames '*.nix'
|
|
12
12
|
|
|
13
|
+
id_boundary = /(?![a-zA-Z0-9_'-])/
|
|
14
|
+
|
|
13
15
|
state :whitespaces do
|
|
14
16
|
rule %r/^\s*\n\s*$/m, Text
|
|
15
17
|
rule %r/\s+/, Text
|
|
@@ -30,15 +32,15 @@ module Rouge
|
|
|
30
32
|
end
|
|
31
33
|
|
|
32
34
|
state :null do
|
|
33
|
-
rule %r/
|
|
35
|
+
rule %r/null#{id_boundary}/, Keyword::Constant
|
|
34
36
|
end
|
|
35
37
|
|
|
36
38
|
state :boolean do
|
|
37
|
-
rule %r/(true|false)/, Keyword::Constant
|
|
39
|
+
rule %r/(?:true|false)#{id_boundary}/, Keyword::Constant
|
|
38
40
|
end
|
|
39
41
|
|
|
40
42
|
state :binding do
|
|
41
|
-
rule %r/[a-zA-Z_][a-zA-Z0-
|
|
43
|
+
rule %r/[a-zA-Z_][a-zA-Z0-9_'-]*/, Name::Variable
|
|
42
44
|
end
|
|
43
45
|
|
|
44
46
|
state :path do
|
|
@@ -161,22 +163,22 @@ module Rouge
|
|
|
161
163
|
|
|
162
164
|
state :keywords_namespace do
|
|
163
165
|
keywords = %w(with in inherit)
|
|
164
|
-
rule %r/(?:#{keywords.join('|')})
|
|
166
|
+
rule %r/(?:#{keywords.join('|')})#{id_boundary}/, Keyword::Namespace
|
|
165
167
|
end
|
|
166
168
|
|
|
167
169
|
state :keywords_declaration do
|
|
168
170
|
keywords = %w(let)
|
|
169
|
-
rule %r/(?:#{keywords.join('|')})
|
|
171
|
+
rule %r/(?:#{keywords.join('|')})#{id_boundary}/, Keyword::Declaration
|
|
170
172
|
end
|
|
171
173
|
|
|
172
174
|
state :keywords_conditional do
|
|
173
175
|
keywords = %w(if then else)
|
|
174
|
-
rule %r/(?:#{keywords.join('|')})
|
|
176
|
+
rule %r/(?:#{keywords.join('|')})#{id_boundary}/, Keyword
|
|
175
177
|
end
|
|
176
178
|
|
|
177
179
|
state :keywords_reserved do
|
|
178
180
|
keywords = %w(rec assert map)
|
|
179
|
-
rule %r/(?:#{keywords.join('|')})
|
|
181
|
+
rule %r/(?:#{keywords.join('|')})#{id_boundary}/, Keyword::Reserved
|
|
180
182
|
end
|
|
181
183
|
|
|
182
184
|
state :keywords_builtin do
|
|
@@ -192,7 +194,7 @@ module Rouge
|
|
|
192
194
|
throw
|
|
193
195
|
toString
|
|
194
196
|
)
|
|
195
|
-
rule %r/(?:#{keywords.join('|')})
|
|
197
|
+
rule %r/(?:#{keywords.join('|')})#{id_boundary}/, Keyword::Reserved
|
|
196
198
|
end
|
|
197
199
|
|
|
198
200
|
state :ignore do
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*- #
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
|
+
require_relative 'c'
|
|
5
|
+
require_relative 'objective_c/common'
|
|
6
|
+
|
|
4
7
|
module Rouge
|
|
5
8
|
module Lexers
|
|
6
|
-
load_lexer 'c.rb'
|
|
7
|
-
load_lexer 'objective_c/common.rb'
|
|
8
|
-
|
|
9
9
|
class ObjectiveC < C
|
|
10
10
|
extend ObjectiveCCommon
|
|
11
11
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*- #
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
|
+
require_relative 'cpp'
|
|
5
|
+
require_relative 'objective_c/common'
|
|
6
|
+
|
|
4
7
|
module Rouge
|
|
5
8
|
module Lexers
|
|
6
|
-
load_lexer 'cpp.rb'
|
|
7
|
-
load_lexer 'objective_c/common.rb'
|
|
8
9
|
|
|
9
10
|
class ObjectiveCpp < Cpp
|
|
10
11
|
extend ObjectiveCCommon
|
data/lib/rouge/lexers/ocaml.rb
CHANGED
|
@@ -21,7 +21,7 @@ module Rouge
|
|
|
21
21
|
ADD-BUFFER ADD-CALC-COL ADD-CALC-COLU ADD-CALC-COLUM ADD-CALC-COLUMN ADD-COLUMNS-FROM
|
|
22
22
|
ADD-EVENTS-PROC ADD-EVENTS-PROCE ADD-EVENTS-PROCED ADD-EVENTS-PROCEDU ADD-EVENTS-PROCEDUR
|
|
23
23
|
ADD-EVENTS-PROCEDURE ADD-FIELDS-FROM ADD-FIRST ADD-HEADER-ENTRY ADD-INDEX-FIELD ADD-INTERVAL
|
|
24
|
-
ADD-LAST ADD-LIKE-COLUMN ADD-LIKE-FIELD ADD-LIKE-INDEX ADD-NEW-FIELD ADD-NEW-INDEX
|
|
24
|
+
ADD-LAST ADD-LIKE-COLUMN ADD-LIKE-FIELD ADD-LIKE-INDEX ADD-NEW-FIELD ADD-NEW-INDEX
|
|
25
25
|
ADD-SCHEMA-LOCATION ADD-SOURCE-BUFFER ADD-SUPER-PROC ADD-SUPER-PROCE ADD-SUPER-PROCED
|
|
26
26
|
ADD-SUPER-PROCEDU ADD-SUPER-PROCEDUR ADD-SUPER-PROCEDURE ADM-DATA ADVISE AFTER-BUFFER AFTER-ROWID
|
|
27
27
|
AFTER-TABLE ALERT-BOX ALIAS ALL ALLOW-COLUMN-SEARCHING ALLOW-PREV-DESERIALIZATION ALLOW-REPLICATION
|
|
@@ -486,7 +486,7 @@ module Rouge
|
|
|
486
486
|
WRITE-JSON WRITE-MESSAGE WRITE-PROCESSING-INSTRUCTION WRITE-STATUS WRITE-XML WRITE-XMLSCHEMA X XCODE
|
|
487
487
|
XCODE-SESSION-KEY X-DOCUMENT XML-DATA-TYPE XML-ENTITY-EXPANSION-LIMIT XML-NODE-NAME XML-NODE-TYPE
|
|
488
488
|
XML-SCHEMA-PAT XML-SCHEMA-PATH XML-STRICT-ENTITY-RESOLUTION XML-SUPPRESS-NAMESPACE-PROCESSING
|
|
489
|
-
X-NODEREF X-OF XOR XREF XREF-XML Y YEAR YEAR-OFFSET YES YES-NO YES-NO-CANCEL Y-OF
|
|
489
|
+
X-NODEREF X-OF XOR XREF XREF-XML Y YEAR YEAR-OFFSET YES YES-NO YES-NO-CANCEL Y-OF
|
|
490
490
|
)
|
|
491
491
|
end
|
|
492
492
|
|
|
@@ -521,7 +521,7 @@ module Rouge
|
|
|
521
521
|
end
|
|
522
522
|
|
|
523
523
|
state :whitespace do
|
|
524
|
-
rule %r/\s+/m, Text
|
|
524
|
+
rule %r/\s+/m, Text
|
|
525
525
|
end
|
|
526
526
|
|
|
527
527
|
state :singlelinecomment do
|
|
@@ -560,7 +560,7 @@ module Rouge
|
|
|
560
560
|
rule %r([~!%^*+=\|?:<>/-]), Operator
|
|
561
561
|
rule %r/[()\[\],.]/, Punctuation
|
|
562
562
|
end
|
|
563
|
-
|
|
563
|
+
|
|
564
564
|
state :doublequotedstring do
|
|
565
565
|
rule %r/\~[~nrt"]?/, Str::Escape
|
|
566
566
|
rule %r/[^\\"]+/, Str::Double
|
|
@@ -572,7 +572,7 @@ module Rouge
|
|
|
572
572
|
rule %r/[^\\']+/, Str::Single
|
|
573
573
|
rule %r/'/, Str::Delimiter, :pop!
|
|
574
574
|
end
|
|
575
|
-
|
|
575
|
+
|
|
576
576
|
state :preproc do
|
|
577
577
|
rule %r/(\&analyze-suspend|\&analyze-resume)/i, Comment::Preproc, :analyze_suspend_resume_content
|
|
578
578
|
rule %r/(\&scoped-define|\&global-define)\s*([\.\w\\\/-]*)/i , Comment::Preproc, :analyze_suspend_resume_content
|
|
@@ -584,18 +584,18 @@ module Rouge
|
|
|
584
584
|
rule %r/.*\n/, Comment::Preproc, :pop!
|
|
585
585
|
rule %r/.*/, Comment::Preproc, :pop!
|
|
586
586
|
end
|
|
587
|
-
|
|
587
|
+
|
|
588
588
|
state :preproc_content do
|
|
589
589
|
rule %r/\n/, Text, :pop!
|
|
590
590
|
rule %r/\s+/, Text
|
|
591
|
-
|
|
591
|
+
|
|
592
592
|
rule %r/({?&)(\S+)/ do
|
|
593
593
|
groups Comment::Preproc, Name::Other
|
|
594
594
|
end
|
|
595
|
-
|
|
595
|
+
|
|
596
596
|
rule %r/"/, Str, :string
|
|
597
597
|
mixin :numeric
|
|
598
|
-
|
|
598
|
+
|
|
599
599
|
rule %r/\S+/, Name
|
|
600
600
|
end
|
|
601
601
|
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
# vim: set ts=2 sw=2 et:
|
|
4
|
+
|
|
5
|
+
# PDF = Portable Document Format page description language
|
|
6
|
+
# As defined by ISO 32000-2:2020 including resolved errata from https://pdf-issues.pdfa.org/
|
|
7
|
+
#
|
|
8
|
+
# The PDF syntax is also known as "COS" and can be used with FDF (Forms Data Field) files as
|
|
9
|
+
# per ISO 32000-2:2020 clause 12.7.8.
|
|
10
|
+
#
|
|
11
|
+
# This is a token-based parser ONLY! It is intended to syntax highlight full or partial fragments
|
|
12
|
+
# of nicely written hand-written PDF syntax in documentation such as ISO specifications. It is NOT
|
|
13
|
+
# intended to cope with real-world PDFs that will contain arbitrary binary data (that form invalid
|
|
14
|
+
# UTF-8 sequences and generate "ArgumentError: invalid byte sequence in UTF-8" Ruby errors) and
|
|
15
|
+
# other types of malformations or syntax errors.
|
|
16
|
+
#
|
|
17
|
+
# Author: Peter Wyatt, CTO, PDF Association. 2024
|
|
18
|
+
#
|
|
19
|
+
module Rouge
|
|
20
|
+
module Lexers
|
|
21
|
+
class Pdf < RegexLexer
|
|
22
|
+
title "PDF"
|
|
23
|
+
desc "PDF - Portable Document Format (ISO 32000)"
|
|
24
|
+
tag 'pdf'
|
|
25
|
+
aliases "fdf", 'cos'
|
|
26
|
+
filenames '*.pdf', '*.fdf'
|
|
27
|
+
mimetypes 'application/pdf', 'application/fdf' # IANA registered media types
|
|
28
|
+
|
|
29
|
+
# PDF and FDF files must start with "%PDF-x.y" or "%FDF-x.y"
|
|
30
|
+
# where x is the single digit major version and y is the single digit minor version.
|
|
31
|
+
# For simplicity as a syntax highlighter, assumes occurs at start of a line.
|
|
32
|
+
def self.detect?(text)
|
|
33
|
+
return true if /\A%(P|F)DF-\d\.\d/.match?(text)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# PDF Delimiters (ISO 32000-2:2020, Table 1 and Table 2).
|
|
37
|
+
# Ruby whitespace "\s" is /[ \t\r\n\f\v]/ which does not include NUL (ISO 32000-2:2020, Table 1).
|
|
38
|
+
# PDF also support 2 character EOL sequences.
|
|
39
|
+
|
|
40
|
+
state :root do
|
|
41
|
+
# Start-of-file header comment is special (comment is up to EOL)
|
|
42
|
+
rule %r/^%(P|F)DF-\d\.\d.*$/, Comment::Preproc
|
|
43
|
+
|
|
44
|
+
# End-of-file marker comment is special (comment is up to EOL)
|
|
45
|
+
rule %r/^%%EOF.*$/, Comment::Preproc
|
|
46
|
+
|
|
47
|
+
# PDF only has single-line comments: from "%" to EOL
|
|
48
|
+
rule %r/%.*$/, Comment::Single
|
|
49
|
+
|
|
50
|
+
# PDF Boolean and null object keywords
|
|
51
|
+
rule %r/(false|true|null)/, Keyword::Constant
|
|
52
|
+
|
|
53
|
+
# PDF Dictionary and array object start and end tokens
|
|
54
|
+
rule %r/(<<|>>|\[|\])/, Punctuation
|
|
55
|
+
|
|
56
|
+
# PDF Hex string - can contain whitespace and span multiple lines.
|
|
57
|
+
# This rule must be after "<<"/">>"
|
|
58
|
+
rule %r/<[0-9A-Fa-f\s]*>/m, Str::Other
|
|
59
|
+
|
|
60
|
+
# PDF literal strings are complex (multi-line, escapes, etc.). Use separate state machine.
|
|
61
|
+
rule %r/\(/, Str, :stringliteral
|
|
62
|
+
|
|
63
|
+
# PDF Name objects - can be empty (i.e., nothing after "/").
|
|
64
|
+
# No special processing required for 2-digit hex codes that start with "#".
|
|
65
|
+
rule %r/\/[^\(\)<>\[\]\/%\s]*/, Name::Other
|
|
66
|
+
|
|
67
|
+
# PDF objects and stream (no checking of object ID)
|
|
68
|
+
# Note that object number and generation numbers do not have sign.
|
|
69
|
+
rule %r/\d+\s\d+\sobj/, Keyword::Declaration
|
|
70
|
+
rule %r/endstream|endobj|stream/, Keyword::Declaration
|
|
71
|
+
|
|
72
|
+
# PDF conventional file layout keywords
|
|
73
|
+
rule %r/startxref|trailer|xref/, Keyword::Declaration
|
|
74
|
+
|
|
75
|
+
# PDF cross reference section entries (20 bytes including EOL).
|
|
76
|
+
# Explicit single SPACE separators.
|
|
77
|
+
rule %r/^\d{10} \d{5} (n|f)\s*$/, Keyword::Namespace
|
|
78
|
+
|
|
79
|
+
# PDF Indirect reference (lax, allows zero as the object number).
|
|
80
|
+
# Requires terminating delimiter lookahead to disambiguate from "RG" operator
|
|
81
|
+
rule %r/\d+\s\d+\sR(?=[\(\)<>\[\]\/%\s])/, Name::Decorator
|
|
82
|
+
|
|
83
|
+
# PDF Real object
|
|
84
|
+
rule %r/(\-|\+)?([0-9]+\.?|[0-9]*\.[0-9]+|[0-9]+\.[0-9]*)/, Num::Float
|
|
85
|
+
|
|
86
|
+
# PDF Integer object
|
|
87
|
+
rule %r/(\-|\+)?[0-9]+/, Num::Integer
|
|
88
|
+
|
|
89
|
+
# A run of non-delimiters is most likely a PDF content stream
|
|
90
|
+
# operator (ISO 32000-2:2020, Annex A).
|
|
91
|
+
rule %r/[^\(\)<>\[\]\/%\s]+/, Operator::Word
|
|
92
|
+
|
|
93
|
+
# Whitespace (except inside strings and comments) is ignored = /[ \t\r\n\f\v]/.
|
|
94
|
+
# Ruby doesn't include NUL as whitespace (vs ISO 32000-2:2020 Table 1)
|
|
95
|
+
rule %r/\s+/, Text::Whitespace
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# PDF literal string. See ISO 32000-2:2020 clause 7.3.4.2 and Table 3
|
|
99
|
+
state :stringliteral do
|
|
100
|
+
rule %r/\(/, Str, :stringliteral # recursive for internal bracketed strings
|
|
101
|
+
rule %r/\\\(/, Str::Escape, :stringliteral # recursive for internal escaped bracketed strings
|
|
102
|
+
rule %r/\)/, Str, :pop!
|
|
103
|
+
rule %r/\\\)/, Str::Escape, :pop!
|
|
104
|
+
rule %r/\\([0-7]{3}|n|r|t|b|f|\\)/, Str::Escape
|
|
105
|
+
rule %r/[^\(\)\\]+/, Str
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|