rouge 3.13.0 → 3.18.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rouge.rb +65 -50
- data/lib/rouge/cli.rb +18 -1
- data/lib/rouge/demos/cypher +5 -0
- data/lib/rouge/demos/datastudio +21 -0
- data/lib/rouge/demos/ecl +18 -0
- data/lib/rouge/demos/freefem +16 -0
- data/lib/rouge/demos/ghc-cmm +23 -0
- data/lib/rouge/demos/ghc-core +26 -0
- data/lib/rouge/demos/isbl +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/rego +8 -0
- data/lib/rouge/demos/slice +10 -0
- data/lib/rouge/demos/solidity +13 -0
- data/lib/rouge/demos/vcl +12 -0
- data/lib/rouge/demos/yang +17 -0
- data/lib/rouge/formatters/terminal256.rb +22 -6
- data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
- data/lib/rouge/lexer.rb +5 -3
- data/lib/rouge/lexers/apache.rb +4 -8
- data/lib/rouge/lexers/apache/keywords.rb +15 -0
- data/lib/rouge/lexers/cmake.rb +1 -0
- data/lib/rouge/lexers/coffeescript.rb +47 -15
- data/lib/rouge/lexers/console.rb +88 -35
- data/lib/rouge/lexers/cpp.rb +12 -5
- data/lib/rouge/lexers/cypher.rb +108 -0
- data/lib/rouge/lexers/d.rb +4 -4
- data/lib/rouge/lexers/datastudio.rb +138 -0
- data/lib/rouge/lexers/dot.rb +2 -2
- data/lib/rouge/lexers/ecl.rb +175 -0
- data/lib/rouge/lexers/freefem.rb +240 -0
- data/lib/rouge/lexers/fsharp.rb +1 -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 +1 -1
- data/lib/rouge/lexers/io.rb +2 -2
- data/lib/rouge/lexers/isbl.rb +97 -0
- data/lib/rouge/lexers/isbl/builtins.rb +17 -0
- data/lib/rouge/lexers/java.rb +4 -5
- data/lib/rouge/lexers/jinja.rb +5 -3
- data/lib/rouge/lexers/json.rb +3 -0
- data/lib/rouge/lexers/json_doc.rb +5 -3
- data/lib/rouge/lexers/kotlin.rb +4 -0
- data/lib/rouge/lexers/lasso.rb +4 -9
- data/lib/rouge/lexers/lasso/keywords.rb +14 -0
- data/lib/rouge/lexers/liquid.rb +1 -1
- data/lib/rouge/lexers/llvm.rb +55 -46
- data/lib/rouge/lexers/lua.rb +40 -2
- data/lib/rouge/lexers/m68k.rb +2 -2
- data/lib/rouge/lexers/magik.rb +1 -1
- data/lib/rouge/lexers/markdown.rb +9 -5
- data/lib/rouge/lexers/mathematica.rb +1 -1
- data/lib/rouge/lexers/matlab.rb +3 -4
- data/lib/rouge/lexers/matlab/builtins.rb +11 -0
- data/lib/rouge/lexers/nasm.rb +42 -168
- data/lib/rouge/lexers/nesasm.rb +78 -0
- data/lib/rouge/lexers/nginx.rb +1 -1
- data/lib/rouge/lexers/objective_c.rb +3 -172
- data/lib/rouge/lexers/objective_c/common.rb +184 -0
- data/lib/rouge/lexers/objective_cpp.rb +31 -0
- data/lib/rouge/lexers/pascal.rb +1 -1
- data/lib/rouge/lexers/php.rb +47 -32
- data/lib/rouge/lexers/pony.rb +1 -1
- data/lib/rouge/lexers/powershell.rb +5 -0
- data/lib/rouge/lexers/protobuf.rb +1 -1
- data/lib/rouge/lexers/python.rb +68 -58
- data/lib/rouge/lexers/racket.rb +24 -1
- data/lib/rouge/lexers/rego.rb +45 -0
- data/lib/rouge/lexers/ruby.rb +16 -3
- data/lib/rouge/lexers/rust.rb +3 -11
- data/lib/rouge/lexers/scala.rb +4 -4
- data/lib/rouge/lexers/shell.rb +1 -1
- data/lib/rouge/lexers/sieve.rb +1 -1
- data/lib/rouge/lexers/slice.rb +32 -0
- data/lib/rouge/lexers/solidity.rb +185 -0
- data/lib/rouge/lexers/sqf.rb +2 -2
- data/lib/rouge/lexers/swift.rb +2 -1
- data/lib/rouge/lexers/terraform.rb +15 -0
- data/lib/rouge/lexers/toml.rb +39 -1
- data/lib/rouge/lexers/typescript.rb +11 -0
- data/lib/rouge/lexers/varnish.rb +168 -0
- data/lib/rouge/lexers/verilog.rb +1 -1
- data/lib/rouge/lexers/viml.rb +1 -1
- data/lib/rouge/lexers/vue.rb +4 -1
- data/lib/rouge/lexers/yang.rb +147 -0
- data/lib/rouge/version.rb +1 -1
- metadata +37 -6
- data/lib/rouge/lexers/apache/keywords.yml +0 -764
- data/lib/rouge/lexers/lasso/keywords.yml +0 -446
- data/lib/rouge/lexers/matlab/builtins.yml +0 -3515
data/lib/rouge/lexers/d.rb
CHANGED
@@ -35,9 +35,9 @@ module Rouge
|
|
35
35
|
)
|
36
36
|
|
37
37
|
keywords_pseudo = %w(
|
38
|
-
__FILE__ __MODULE__ __LINE__ __FUNCTION__
|
39
|
-
|
40
|
-
__VERSION__
|
38
|
+
__FILE__ __FILE_FULL_PATH__ __MODULE__ __LINE__ __FUNCTION__
|
39
|
+
__PRETTY_FUNCTION__ __DATE__ __EOF__ __TIME__ __TIMESTAMP__
|
40
|
+
__VENDOR__ __VERSION__
|
41
41
|
)
|
42
42
|
|
43
43
|
state :whitespace do
|
@@ -48,7 +48,7 @@ module Rouge
|
|
48
48
|
state :root do
|
49
49
|
mixin :whitespace
|
50
50
|
# Comments
|
51
|
-
rule %r(
|
51
|
+
rule %r(//.*), Comment::Single
|
52
52
|
rule %r(/(\\\n)?[*](.|\n)*?[*](\\\n)?/), Comment::Multiline
|
53
53
|
rule %r(/\+), Comment::Multiline, :nested_comment
|
54
54
|
# Keywords
|
@@ -0,0 +1,138 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Rouge
|
5
|
+
module Lexers
|
6
|
+
class Datastudio < RegexLexer
|
7
|
+
tag 'datastudio'
|
8
|
+
filenames '*.job'
|
9
|
+
mimetypes 'text/x-datastudio'
|
10
|
+
|
11
|
+
title "Datastudio"
|
12
|
+
desc 'Datastudio scripting language'
|
13
|
+
|
14
|
+
id = /@?[_a-z]\w*/i
|
15
|
+
|
16
|
+
def self.sql_keywords
|
17
|
+
@sql_keywords ||= %w(
|
18
|
+
ABORT ABS ABSOLUTE ACCESS ADA ADD ADMIN AFTER AGGREGATE ALIAS
|
19
|
+
ALL ALLOCATE ALTER ANALYSE ANALYZE AND ANY ARE AS ASC ASENSITIVE
|
20
|
+
ASSERTION ASSIGNMENT ASYMMETRIC AT ATOMIC AUTHORIZATION
|
21
|
+
AVG BACKWARD BEFORE BEGIN BETWEEN BITVAR BIT_LENGTH BOTH
|
22
|
+
BREADTH BY C CACHE CALL CALLED CARDINALITY CASCADE CASCADED
|
23
|
+
CASE CAST CATALOG CATALOG_NAME CHAIN CHARACTERISTICS
|
24
|
+
CHARACTER_LENGTH CHARACTER_SET_CATALOG CHARACTER_SET_NAME
|
25
|
+
CHARACTER_SET_SCHEMA CHAR_LENGTH CHECK CHECKED CHECKPOINT
|
26
|
+
CLASS CLASS_ORIGIN CLOB CLOSE CLUSTER COALSECE COBOL COLLATE
|
27
|
+
COLLATION COLLATION_CATALOG COLLATION_NAME COLLATION_SCHEMA
|
28
|
+
COLUMN COLUMN_NAME COMMAND_FUNCTION COMMAND_FUNCTION_CODE
|
29
|
+
COMMENT COMMIT COMMITTED COMPLETION CONDITION_NUMBER
|
30
|
+
CONNECT CONNECTION CONNECTION_NAME CONSTRAINT CONSTRAINTS
|
31
|
+
CONSTRAINT_CATALOG CONSTRAINT_NAME CONSTRAINT_SCHEMA
|
32
|
+
CONSTRUCTOR CONTAINS CONTINUE CONVERSION CONVERT COPY
|
33
|
+
CORRESPONTING COUNT CREATE CREATEDB CREATEUSER CROSS CUBE
|
34
|
+
CURRENT CURRENT_DATE CURRENT_PATH CURRENT_ROLE CURRENT_TIME
|
35
|
+
CURRENT_TIMESTAMP CURRENT_USER CURSOR CURSOR_NAME CYCLE DATA
|
36
|
+
DATABASE DATETIME_INTERVAL_CODE DATETIME_INTERVAL_PRECISION
|
37
|
+
DAY DEALLOCATE DECLARE DEFAULT DEFAULTS DEFERRABLE DEFERRED
|
38
|
+
DEFINED DEFINER DELETE DELIMITER DELIMITERS DEREF DESC DESCRIBE
|
39
|
+
DESCRIPTOR DESTROY DESTRUCTOR DETERMINISTIC DIAGNOSTICS
|
40
|
+
DICTIONARY DISCONNECT DISPATCH DISTINCT DO DOMAIN DROP
|
41
|
+
DYNAMIC DYNAMIC_FUNCTION DYNAMIC_FUNCTION_CODE EACH ELSE
|
42
|
+
ENCODING ENCRYPTED END END-EXEC EQUALS ESCAPE EVERY EXCEPT
|
43
|
+
ESCEPTION EXCLUDING EXCLUSIVE EXEC EXECUTE EXISTING EXISTS
|
44
|
+
EXPLAIN EXTERNAL EXTRACT FALSE FETCH FINAL FIRST FOR FORCE
|
45
|
+
FOREIGN FORTRAN FORWARD FOUND FREE FREEZE FROM FULL FUNCTION
|
46
|
+
G GENERAL GENERATED GET GLOBAL GO GOTO GRANT GRANTED GROUP
|
47
|
+
GROUPING HANDLER HAVING HIERARCHY HOLD HOST IDENTITY IGNORE
|
48
|
+
ILIKE IMMEDIATE IMMUTABLE IMPLEMENTATION IMPLICIT IN INCLUDING
|
49
|
+
INCREMENT INDEX INDITCATOR INFIX INHERITS INITIALIZE INITIALLY
|
50
|
+
INNER INOUT INPUT INSENSITIVE INSERT INSTANTIABLE INSTEAD
|
51
|
+
INTERSECT INTO INVOKER IS ISNULL ISOLATION ITERATE JOIN KEY
|
52
|
+
KEY_MEMBER KEY_TYPE LANCOMPILER LANGUAGE LARGE LAST LATERAL
|
53
|
+
LEADING LEFT LENGTH LESS LEVEL LIKE LIMIT LISTEN LOAD LOCAL
|
54
|
+
LOCALTIME LOCALTIMESTAMP LOCATION LOCATOR LOCK LOWER MAP MATCH
|
55
|
+
MAX MAXVALUE MESSAGE_LENGTH MESSAGE_OCTET_LENGTH MESSAGE_TEXT
|
56
|
+
METHOD MIN MINUTE MINVALUE MOD MODE MODIFIES MODIFY MONTH
|
57
|
+
MORE MOVE MUMPS NAMES NATURAL NCLOB NEW NEXT
|
58
|
+
NO NOCREATEDB NOCREATEUSER NONE NOT NOTHING NOTIFY NOTNULL
|
59
|
+
NULL NULLABLE NULLIF OBJECT OCTET_LENGTH OF OFF OFFSET OIDS
|
60
|
+
OLD ON ONLY OPEN OPERATION OPERATOR OPTION OPTIONS OR ORDER
|
61
|
+
ORDINALITY OUT OUTER OUTPUT OVERLAPS OVERLAY OVERRIDING
|
62
|
+
OWNER PAD PARAMETER PARAMETERS PARAMETER_MODE PARAMATER_NAME
|
63
|
+
PARAMATER_ORDINAL_POSITION PARAMETER_SPECIFIC_CATALOG
|
64
|
+
PARAMETER_SPECIFIC_NAME PARAMATER_SPECIFIC_SCHEMA PARTIAL PASCAL
|
65
|
+
PENDANT PLACING PLI POSITION POSTFIX PREFIX PREORDER
|
66
|
+
PREPARE PRESERVE PRIMARY PRIOR PRIVILEGES PROCEDURAL PROCEDURE
|
67
|
+
PUBLIC READ READS RECHECK RECURSIVE REF REFERENCES REFERENCING
|
68
|
+
REINDEX RELATIVE RENAME REPEATABLE REPLACE RESET RESTART
|
69
|
+
RESTRICT RESULT RETURN RETURNED_LENGTH RETURNED_OCTET_LENGTH
|
70
|
+
RETURNED_SQLSTATE RETURNS REVOKE RIGHT ROLE ROLLBACK ROLLUP
|
71
|
+
ROUTINE ROUTINE_CATALOG ROUTINE_NAME ROUTINE_SCHEMA ROW ROWS
|
72
|
+
ROW_COUNT RULE SAVE_POINT SCALE SCHEMA SCHEMA_NAME SCOPE SCROLL
|
73
|
+
SEARCH SECOND SECURITY SELECT SELF SENSITIVE SERIALIZABLE
|
74
|
+
SERVER_NAME SESSION SESSION_USER SET SETOF SETS SHARE SHOW
|
75
|
+
SIMILAR SIMPLE SIZE SOME SOURCE SPACE SPECIFIC SPECIFICTYPE
|
76
|
+
SPECIFIC_NAME SQL SQLCODE SQLERROR SQLEXCEPTION SQLSTATE
|
77
|
+
SQLWARNINIG STABLE START STATE STATEMENT STATIC STATISTICS
|
78
|
+
STDIN STDOUT STORAGE STRICT STRUCTURE STYPE SUBCLASS_ORIGIN
|
79
|
+
SUBLIST SUBSTRING SUM SYMMETRIC SYSID SYSTEM SYSTEM_USER
|
80
|
+
TABLE TABLE_NAME TEMP TEMPLATE TEMPORARY TERMINATE THAN THEN
|
81
|
+
TIMEZONE_HOUR TIMEZONE_MINUTE TO TOAST TRAILING
|
82
|
+
TRANSATION TRANSACTIONS_COMMITTED TRANSACTIONS_ROLLED_BACK
|
83
|
+
TRANSATION_ACTIVE TRANSFORM TRANSFORMS TRANSLATE TRANSLATION
|
84
|
+
TREAT TRIGGER TRIGGER_CATALOG TRIGGER_NAME TRIGGER_SCHEMA TRIM
|
85
|
+
TRUE TRUNCATE TRUSTED TYPE UNCOMMITTED UNDER UNENCRYPTED UNION
|
86
|
+
UNIQUE UNKNOWN UNLISTEN UNNAMED UNNEST UNTIL UPDATE UPPER
|
87
|
+
USAGE USER USER_DEFINED_TYPE_CATALOG USER_DEFINED_TYPE_NAME
|
88
|
+
USER_DEFINED_TYPE_SCHEMA USING VACUUM VALID VALIDATOR VALUES
|
89
|
+
VARIABLE VERBOSE VERSION VIEW VOLATILE WHEN WHENEVER WHERE
|
90
|
+
WITH WITHOUT WORK WRITE ZONE
|
91
|
+
)
|
92
|
+
end
|
93
|
+
|
94
|
+
state :whitespace do
|
95
|
+
rule %r/\s+/m, Text
|
96
|
+
rule %r(//.*?$), Comment::Single
|
97
|
+
rule %r(/[*].*?[*]/)m, Comment::Multiline
|
98
|
+
end
|
99
|
+
|
100
|
+
state :string do
|
101
|
+
rule %r/%(\\.|.)+?%/, Str::Escape
|
102
|
+
rule %r/\\"/, Str::Double
|
103
|
+
rule %r/"/, Str::Double, :pop!
|
104
|
+
rule %r/./m, Str::Double
|
105
|
+
end
|
106
|
+
|
107
|
+
state :string_s do
|
108
|
+
rule %r/%(\\.|.)+?%/, Str::Escape
|
109
|
+
rule %r/\\'/, Str::Single
|
110
|
+
rule %r/'/, Str::Single, :pop!
|
111
|
+
rule %r/./m, Str::Single
|
112
|
+
end
|
113
|
+
|
114
|
+
state :root do
|
115
|
+
mixin :whitespace
|
116
|
+
|
117
|
+
rule %r/^:#{id}/, Name::Label
|
118
|
+
rule %r/@#{id}(\.#{id})?/m, Name::Entity
|
119
|
+
rule %r/%(\\.|.)+?%/, Name::Variable
|
120
|
+
rule %r/[~!%^&*()+=|\[\]{}:;,.<>\/?-]/, Punctuation
|
121
|
+
rule %r/"/, Str::Double, :string
|
122
|
+
rule %r/'/, Str::Single, :string_s
|
123
|
+
rule %r/\d(\.\d*)?/i, Num
|
124
|
+
rule %r/#{id}(?=\s*[(])/, Name::Function
|
125
|
+
rule id do |m|
|
126
|
+
name = m[0].upcase
|
127
|
+
|
128
|
+
if self.class.sql_keywords.include? name
|
129
|
+
token Keyword
|
130
|
+
else
|
131
|
+
token Name
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
data/lib/rouge/lexers/dot.rb
CHANGED
@@ -17,8 +17,8 @@ module Rouge
|
|
17
17
|
|
18
18
|
state :comments_and_whitespace do
|
19
19
|
rule %r/\s+/, Text
|
20
|
-
rule %r(
|
21
|
-
rule %r(
|
20
|
+
rule %r(#.*), Comment::Single
|
21
|
+
rule %r(//.*?$), Comment::Single
|
22
22
|
rule %r(/(\\\n)?[*].*?[*](\\\n)?/)m, Comment::Multiline
|
23
23
|
end
|
24
24
|
|
@@ -0,0 +1,175 @@
|
|
1
|
+
# -*- codding: utf-8 -*- #
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Rouge
|
5
|
+
module Lexers
|
6
|
+
class ECL < RegexLexer
|
7
|
+
tag 'ecl'
|
8
|
+
filenames '*.ecl'
|
9
|
+
mimetypes 'application/x-ecl'
|
10
|
+
|
11
|
+
title "ECL"
|
12
|
+
desc "Enterprise Control Language (hpccsystems.com)"
|
13
|
+
|
14
|
+
id = /(#?)\b([a-z_][\w]*?)(\d*)\b/i
|
15
|
+
|
16
|
+
def self.class_first
|
17
|
+
@class_first ||= Set.new %w(
|
18
|
+
file date str math metaphone metaphone3 uni audit blas system
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.class_second
|
23
|
+
@class_second ||= Set.new %w(
|
24
|
+
debug email job log thorlib util workunit
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.functions
|
29
|
+
@functions ||= Set.new %w(
|
30
|
+
abs acos aggregate allnodes apply ascii asin asstring atan _token ave
|
31
|
+
case catch choose choosen choosesets clustersize combine correlation
|
32
|
+
cos cosh count covariance cron dataset dedup define denormalize
|
33
|
+
dictionary distribute distributed distribution ebcdic enth error
|
34
|
+
evaluate event eventextra eventname exists exp failcode failmessage
|
35
|
+
fetch fromunicode fromxml getenv getisvalid global graph group hash
|
36
|
+
hashcrc having httpcall httpheader if iff index intformat isvalid
|
37
|
+
iterate join keyunicode length library limit ln local log loop map
|
38
|
+
matched matchlength matchposition matchtext matchunicode max merge
|
39
|
+
mergejoin min nofold nolocal nonempty normalize parse pipe power
|
40
|
+
preload process project pull random range rank ranked realformat
|
41
|
+
recordof regexfind regexreplace regroup rejected rollup round roundup
|
42
|
+
row rowdiff sample set sin sinh sizeof soapcall sort sorted sqrt
|
43
|
+
stepped stored sum table tan tanh thisnode topn tounicode toxml
|
44
|
+
transfer transform trim truncate typeof ungroup unicodeorder variance
|
45
|
+
which workunit xmldecode xmlencode xmltext xmlunicode apply assert
|
46
|
+
build buildindex evaluate fail keydiff keypatch loadxml nothor notify
|
47
|
+
output parallel sequential soapcall wait
|
48
|
+
)
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.keywords
|
52
|
+
@keywords ||= Set.new %w(
|
53
|
+
and or in not all any as from atmost before best between case const
|
54
|
+
counter csv descend encrypt end endmacro enum except exclusive expire
|
55
|
+
export extend fail few first flat full function functionmacro group
|
56
|
+
heading hole ifblock import joined keep keyed last left limit load
|
57
|
+
local locale lookup many maxcount maxlength _token module interface
|
58
|
+
named nocase noroot noscan nosort of only opt outer overwrite packed
|
59
|
+
partition penalty physicallength pipe quote record repeat return
|
60
|
+
right rows scan self separator service shared skew skip sql store
|
61
|
+
terminator thor threshold token transform trim type unicodeorder
|
62
|
+
unsorted validate virtual whole wild within xml xpath after cluster
|
63
|
+
compressed compression default encoding escape fileposition forward
|
64
|
+
grouped inner internal linkcounted literal lzw mofn multiple
|
65
|
+
namespace wnotrim noxpath onfail prefetch retry rowset scope smart
|
66
|
+
soapaction stable timelimit timeout unordered unstable update use
|
67
|
+
width
|
68
|
+
)
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.template
|
72
|
+
@template ||= Set.new %w(
|
73
|
+
append apply break constant debug declare demangle else elseif end
|
74
|
+
endregion error expand export exportxml for forall getdatatype if
|
75
|
+
ifdefined inmodule isdefined isvalid line link loop mangle onwarning
|
76
|
+
option region set stored text trace uniquename warning webservice
|
77
|
+
workunit loadxml
|
78
|
+
)
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.type
|
82
|
+
@type ||= Set.new %w(
|
83
|
+
ascii big_endian boolean data decimal ebcdic grouped integer
|
84
|
+
linkcounted pattern qstring real record rule set of streamed string
|
85
|
+
token udecimal unicode utf8 unsigned varstring varunicode
|
86
|
+
)
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.typed
|
90
|
+
@typed ||= Set.new %w(
|
91
|
+
data string qstring varstring varunicode unicode utf8
|
92
|
+
)
|
93
|
+
end
|
94
|
+
|
95
|
+
state :single_quote do
|
96
|
+
rule %r([xDQUV]?'([^'\\]*(?:\\.[^'\\]*)*)'), Str::Single
|
97
|
+
rule %r/\\(x\\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)/, Text
|
98
|
+
end
|
99
|
+
|
100
|
+
state :inline_whitespace do
|
101
|
+
rule %r/[ \t\r]+/, Text
|
102
|
+
rule %r/\\\n/, Text # line continuation
|
103
|
+
rule %r(/[*].*?[*]/)m, Comment::Multiline
|
104
|
+
end
|
105
|
+
|
106
|
+
state :whitespace do
|
107
|
+
rule %r/\n+/m, Text
|
108
|
+
rule %r(//.*), Comment::Single
|
109
|
+
mixin :inline_whitespace
|
110
|
+
end
|
111
|
+
|
112
|
+
state :root do
|
113
|
+
mixin :whitespace
|
114
|
+
mixin :single_quote
|
115
|
+
|
116
|
+
rule %r(\b(?i:(and|not|or|in))\b), Operator::Word
|
117
|
+
rule %r([:=|>|<|<>|/|\\|\+|-|=]), Operator
|
118
|
+
rule %r([\[\]{}();,\&,\.,\%]), Punctuation
|
119
|
+
|
120
|
+
rule %r(\b(?i:(beginc\+\+.*?endc\+\+)))m, Str::Single
|
121
|
+
rule %r(\b(?i:(embed.*?endembed)))m, Str::Single
|
122
|
+
|
123
|
+
rule %r(\b(\w+)\.(\w+)\.(\w+)) do |m|
|
124
|
+
if m[1] == "std" &&
|
125
|
+
self.class.class_first.include?(m[2]) &&
|
126
|
+
self.class.class_second.include?(m[3])
|
127
|
+
token Name::Class
|
128
|
+
else
|
129
|
+
token Name::Variable
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
rule %r(\b(?i:(u)?decimal)(\d+(_\d+)?)\b), Keyword::Type
|
134
|
+
|
135
|
+
rule %r/\d+\.\d+(e[\+\-]?\d+)?/i, Num::Float
|
136
|
+
rule %r/x[0-9a-f]+/i, Num::Hex
|
137
|
+
|
138
|
+
rule %r/0x[0-9a-f]+/i, Num::Hex
|
139
|
+
rule %r/0[0-9a-f]+x/i, Num::Hex
|
140
|
+
rule %r(0[bB][01]+), Num::Bin
|
141
|
+
rule %r([01]+[bB]), Num::Bin
|
142
|
+
rule %r(\d+), Num::Integer
|
143
|
+
|
144
|
+
rule id do |m|
|
145
|
+
name_only = m[2].downcase
|
146
|
+
name = name_only + m[3]
|
147
|
+
number = (m[3] == "") ? nil : m[3].to_i
|
148
|
+
if m[1] == "#"
|
149
|
+
if self.class.template.include? name
|
150
|
+
token Keyword::Type
|
151
|
+
else
|
152
|
+
token Error
|
153
|
+
end
|
154
|
+
elsif self.class.typed.include?(name_only) && number != nil
|
155
|
+
token Keyword::Type
|
156
|
+
elsif self.class.type.include? name
|
157
|
+
token Keyword::Type
|
158
|
+
elsif self.class.keywords.include? name
|
159
|
+
token Keyword
|
160
|
+
elsif self.class.functions.include? name
|
161
|
+
token Name::Function
|
162
|
+
elsif ["integer", "unsigned"].include?(name_only) && (1..8).cover?(number)
|
163
|
+
token Keyword::Type
|
164
|
+
elsif name_only == "real" && [4, 8].include?(number)
|
165
|
+
token Keyword::Type
|
166
|
+
elsif ["true", "false"].include? name
|
167
|
+
token Keyword::Constant
|
168
|
+
else
|
169
|
+
token Name::Other
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
@@ -0,0 +1,240 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Rouge
|
5
|
+
module Lexers
|
6
|
+
load_lexer 'cpp.rb'
|
7
|
+
|
8
|
+
class FreeFEM < Cpp
|
9
|
+
title "FreeFEM"
|
10
|
+
desc "The FreeFEM programming language (freefem.org)"
|
11
|
+
|
12
|
+
tag 'freefem'
|
13
|
+
aliases 'ff'
|
14
|
+
filenames '*.edp', '*.idp'
|
15
|
+
mimetypes 'text/x-ffhdr', 'text/x-ffsrc'
|
16
|
+
|
17
|
+
# Override C/C++ ones (for example, `do` does not exists)
|
18
|
+
def self.keywords
|
19
|
+
@keywords ||= Set.new(%w(
|
20
|
+
break catch continue else for if return try while
|
21
|
+
))
|
22
|
+
end
|
23
|
+
|
24
|
+
# Override C/C++ ones (for example, `double` does not exists)
|
25
|
+
def self.keywords_type
|
26
|
+
@keywords_type ||= Set.new(%w(
|
27
|
+
bool border complex dmatrix fespace func gslspline ifstream int macro
|
28
|
+
matrix mesh mesh3 mpiComm mpiGroup mpiRequest NewMacro EndMacro
|
29
|
+
ofstream Pmmap problem Psemaphore real solve string varf
|
30
|
+
))
|
31
|
+
end
|
32
|
+
|
33
|
+
# Override C/C++ ones (totally different)
|
34
|
+
def self.reserved
|
35
|
+
@reserved ||= Set.new(%w(
|
36
|
+
BDM1 BDM1Ortho Edge03d Edge13d Edge23d FEQF HCT P0 P03d P0Edge P1
|
37
|
+
P13d P1b P1b3d P1bl P1bl3d P1dc P1Edge P1nc P2 P23d P2b P2BR P2dc
|
38
|
+
P2Edge P2h P2Morley P2pnc P3 P3dc P3Edge P4 P4dc P4Edge P5Edge RT0
|
39
|
+
RT03d RT0Ortho RT1 RT1Ortho RT2 RT2Ortho
|
40
|
+
|
41
|
+
qf1pE qf1pElump qf1pT qf1pTlump qfV1 qfV1lump qf2pE qf2pT qf2pT4P1
|
42
|
+
qfV2 qf3pE qf4pE qf5pE qf5pT qfV5 qf7pT qf9pT qfnbpE
|
43
|
+
|
44
|
+
ARGV append area be binary BoundaryEdge bordermeasure CG Cholesky cin
|
45
|
+
cout Crout default diag edgeOrientation endl FILE fixed GMRES good
|
46
|
+
hTriangle im imax imin InternalEdge l1 l2 label lenEdge length LINE
|
47
|
+
linfty LU m max measure min mpiAnySource mpiBAND mpiBXOR mpiCommWorld
|
48
|
+
mpiLAND mpiLOR mpiLXOR mpiMAX mpiMIN mpiPROD mpirank mpisize mpiSUM
|
49
|
+
mpiUndefined n N nbe ndof ndofK noshowbase noshowpos notaregion nt
|
50
|
+
nTonEdge nuEdge nuTriangle nv P pi precision quantile re region
|
51
|
+
scientific searchMethod setw showbase showpos sparsesolver sum tellp
|
52
|
+
true UMFPACK unused whoinElement verbosity version volume x y z
|
53
|
+
))
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.builtins
|
57
|
+
@builtins ||= Set.new(%w(
|
58
|
+
abs acos acosh adaptmesh adj AffineCG AffineGMRES arg asin asinh
|
59
|
+
assert atan atan2 atanh atof atoi BFGS broadcast buildlayers
|
60
|
+
buildmesh ceil chi complexEigenValue copysign change checkmovemesh
|
61
|
+
clock cmaes conj convect cos cosh cube d dd dfft diffnp diffpos
|
62
|
+
dimKrylov dist dumptable dx dxx dxy dxz dy dyx dyy dyz dz dzx dzy dzz
|
63
|
+
EigenValue emptymesh erf erfc exec exit exp fdim ffind find floor
|
64
|
+
flush fmax fmin fmod freeyams getARGV getline gmshload gmshload3
|
65
|
+
gslcdfugaussianP gslcdfugaussianQ gslcdfugaussianPinv
|
66
|
+
gslcdfugaussianQinv gslcdfgaussianP gslcdfgaussianQ
|
67
|
+
gslcdfgaussianPinv gslcdfgaussianQinv gslcdfgammaP gslcdfgammaQ
|
68
|
+
gslcdfgammaPinv gslcdfgammaQinv gslcdfcauchyP gslcdfcauchyQ
|
69
|
+
gslcdfcauchyPinv gslcdfcauchyQinv gslcdflaplaceP gslcdflaplaceQ
|
70
|
+
gslcdflaplacePinv gslcdflaplaceQinv gslcdfrayleighP gslcdfrayleighQ
|
71
|
+
gslcdfrayleighPinv gslcdfrayleighQinv gslcdfchisqP gslcdfchisqQ
|
72
|
+
gslcdfchisqPinv gslcdfchisqQinv gslcdfexponentialP gslcdfexponentialQ
|
73
|
+
gslcdfexponentialPinv gslcdfexponentialQinv gslcdfexppowP
|
74
|
+
gslcdfexppowQ gslcdftdistP gslcdftdistQ gslcdftdistPinv
|
75
|
+
gslcdftdistQinv gslcdffdistP gslcdffdistQ gslcdffdistPinv
|
76
|
+
gslcdffdistQinv gslcdfbetaP gslcdfbetaQ gslcdfbetaPinv gslcdfbetaQinv
|
77
|
+
gslcdfflatP gslcdfflatQ gslcdfflatPinv gslcdfflatQinv
|
78
|
+
gslcdflognormalP gslcdflognormalQ gslcdflognormalPinv
|
79
|
+
gslcdflognormalQinv gslcdfgumbel1P gslcdfgumbel1Q gslcdfgumbel1Pinv
|
80
|
+
gslcdfgumbel1Qinv gslcdfgumbel2P gslcdfgumbel2Q gslcdfgumbel2Pinv
|
81
|
+
gslcdfgumbel2Qinv gslcdfweibullP gslcdfweibullQ gslcdfweibullPinv
|
82
|
+
gslcdfweibullQinv gslcdfparetoP gslcdfparetoQ gslcdfparetoPinv
|
83
|
+
gslcdfparetoQinv gslcdflogisticP gslcdflogisticQ gslcdflogisticPinv
|
84
|
+
gslcdflogisticQinv gslcdfbinomialP gslcdfbinomialQ gslcdfpoissonP
|
85
|
+
gslcdfpoissonQ gslcdfgeometricP gslcdfgeometricQ
|
86
|
+
gslcdfnegativebinomialP gslcdfnegativebinomialQ gslcdfpascalP
|
87
|
+
gslcdfpascalQ gslinterpakima gslinterpakimaperiodic
|
88
|
+
gslinterpcsplineperiodic gslinterpcspline gslinterpsteffen
|
89
|
+
gslinterplinear gslinterppolynomial gslranbernoullipdf gslranbeta
|
90
|
+
gslranbetapdf gslranbinomialpdf gslranexponential
|
91
|
+
gslranexponentialpdf gslranexppow gslranexppowpdf gslrancauchy
|
92
|
+
gslrancauchypdf gslranchisq gslranchisqpdf gslranerlang
|
93
|
+
gslranerlangpdf gslranfdist gslranfdistpdf gslranflat gslranflatpdf
|
94
|
+
gslrangamma gslrangammaint gslrangammapdf gslrangammamt
|
95
|
+
gslrangammaknuth gslrangaussian gslrangaussianratiomethod
|
96
|
+
gslrangaussianziggurat gslrangaussianpdf gslranugaussian
|
97
|
+
gslranugaussianratiomethod gslranugaussianpdf gslrangaussiantail
|
98
|
+
gslrangaussiantailpdf gslranugaussiantail gslranugaussiantailpdf
|
99
|
+
gslranlandau gslranlandaupdf gslrangeometricpdf gslrangumbel1
|
100
|
+
gslrangumbel1pdf gslrangumbel2 gslrangumbel2pdf gslranlogistic
|
101
|
+
gslranlogisticpdf gslranlognormal gslranlognormalpdf
|
102
|
+
gslranlogarithmicpdf gslrannegativebinomialpdf gslranpascalpdf
|
103
|
+
gslranpareto gslranparetopdf gslranpoissonpdf gslranrayleigh
|
104
|
+
gslranrayleighpdf gslranrayleightail gslranrayleightailpdf
|
105
|
+
gslrantdist gslrantdistpdf gslranlaplace gslranlaplacepdf gslranlevy
|
106
|
+
gslranweibull gslranweibullpdf gslsfairyAi gslsfairyBi
|
107
|
+
gslsfairyAiscaled gslsfairyBiscaled gslsfairyAideriv gslsfairyBideriv
|
108
|
+
gslsfairyAiderivscaled gslsfairyBiderivscaled gslsfairyzeroAi
|
109
|
+
gslsfairyzeroBi gslsfairyzeroAideriv gslsfairyzeroBideriv
|
110
|
+
gslsfbesselJ0 gslsfbesselJ1 gslsfbesselJn gslsfbesselY0 gslsfbesselY1
|
111
|
+
gslsfbesselYn gslsfbesselI0 gslsfbesselI1 gslsfbesselIn
|
112
|
+
gslsfbesselI0scaled gslsfbesselI1scaled gslsfbesselInscaled
|
113
|
+
gslsfbesselK0 gslsfbesselK1 gslsfbesselKn gslsfbesselK0scaled
|
114
|
+
gslsfbesselK1scaled gslsfbesselKnscaled gslsfbesselj0 gslsfbesselj1
|
115
|
+
gslsfbesselj2 gslsfbesseljl gslsfbessely0 gslsfbessely1 gslsfbessely2
|
116
|
+
gslsfbesselyl gslsfbesseli0scaled gslsfbesseli1scaled
|
117
|
+
gslsfbesseli2scaled gslsfbesselilscaled gslsfbesselk0scaled
|
118
|
+
gslsfbesselk1scaled gslsfbesselk2scaled gslsfbesselklscaled
|
119
|
+
gslsfbesselJnu gslsfbesselYnu gslsfbesselInuscaled gslsfbesselInu
|
120
|
+
gslsfbesselKnuscaled gslsfbesselKnu gslsfbessellnKnu
|
121
|
+
gslsfbesselzeroJ0 gslsfbesselzeroJ1 gslsfbesselzeroJnu gslsfclausen
|
122
|
+
gslsfhydrogenicR1 gslsfdawson gslsfdebye1 gslsfdebye2 gslsfdebye3
|
123
|
+
gslsfdebye4 gslsfdebye5 gslsfdebye6 gslsfdilog gslsfmultiply
|
124
|
+
gslsfellintKcomp gslsfellintEcomp gslsfellintPcomp gslsfellintDcomp
|
125
|
+
gslsfellintF gslsfellintE gslsfellintRC gslsferfc gslsflogerfc
|
126
|
+
gslsferf gslsferfZ gslsferfQ gslsfhazard gslsfexp gslsfexpmult
|
127
|
+
gslsfexpm1 gslsfexprel gslsfexprel2 gslsfexpreln gslsfexpintE1
|
128
|
+
gslsfexpintE2 gslsfexpintEn gslsfexpintE1scaled gslsfexpintE2scaled
|
129
|
+
gslsfexpintEnscaled gslsfexpintEi gslsfexpintEiscaled gslsfShi
|
130
|
+
gslsfChi gslsfexpint3 gslsfSi gslsfCi gslsfatanint gslsffermidiracm1
|
131
|
+
gslsffermidirac0 gslsffermidirac1 gslsffermidirac2 gslsffermidiracint
|
132
|
+
gslsffermidiracmhalf gslsffermidirachalf gslsffermidirac3half
|
133
|
+
gslsffermidiracinc0 gslsflngamma gslsfgamma gslsfgammastar
|
134
|
+
gslsfgammainv gslsftaylorcoeff gslsffact gslsfdoublefact gslsflnfact
|
135
|
+
gslsflndoublefact gslsflnchoose gslsfchoose gslsflnpoch gslsfpoch
|
136
|
+
gslsfpochrel gslsfgammaincQ gslsfgammaincP gslsfgammainc gslsflnbeta
|
137
|
+
gslsfbeta gslsfbetainc gslsfgegenpoly1 gslsfgegenpoly2
|
138
|
+
gslsfgegenpoly3 gslsfgegenpolyn gslsfhyperg0F1 gslsfhyperg1F1int
|
139
|
+
gslsfhyperg1F1 gslsfhypergUint gslsfhypergU gslsfhyperg2F0
|
140
|
+
gslsflaguerre1 gslsflaguerre2 gslsflaguerre3 gslsflaguerren
|
141
|
+
gslsflambertW0 gslsflambertWm1 gslsflegendrePl gslsflegendreP1
|
142
|
+
gslsflegendreP2 gslsflegendreP3 gslsflegendreQ0 gslsflegendreQ1
|
143
|
+
gslsflegendreQl gslsflegendrePlm gslsflegendresphPlm
|
144
|
+
gslsflegendrearraysize gslsfconicalPhalf gslsfconicalPmhalf
|
145
|
+
gslsfconicalP0 gslsfconicalP1 gslsfconicalPsphreg gslsfconicalPcylreg
|
146
|
+
gslsflegendreH3d0 gslsflegendreH3d1 gslsflegendreH3d gslsflog
|
147
|
+
gslsflogabs gslsflog1plusx gslsflog1plusxmx gslsfpowint gslsfpsiint
|
148
|
+
gslsfpsi gslsfpsi1piy gslsfpsi1int gslsfpsi1 gslsfpsin
|
149
|
+
gslsfsynchrotron1 gslsfsynchrotron2 gslsftransport2 gslsftransport3
|
150
|
+
gslsftransport4 gslsftransport5 gslsfsin gslsfcos gslsfhypot
|
151
|
+
gslsfsinc gslsflnsinh gslsflncosh gslsfanglerestrictsymm
|
152
|
+
gslsfanglerestrictpos gslsfzetaint gslsfzeta gslsfzetam1
|
153
|
+
gslsfzetam1int gslsfhzeta gslsfetaint gslsfeta imag int1d int2d int3d
|
154
|
+
intalledges intallfaces interpolate invdiff invdiffnp invdiffpos
|
155
|
+
Isend isInf isNaN isoline Irecv j0 j1 jn jump lgamma LinearCG
|
156
|
+
LinearGMRES log log10 lrint lround max mean medit min mmg3d movemesh
|
157
|
+
movemesh23 mpiAlltoall mpiAlltoallv mpiAllgather mpiAllgatherv
|
158
|
+
mpiAllReduce mpiBarrier mpiGather mpiGatherv mpiRank mpiReduce
|
159
|
+
mpiScatter mpiScatterv mpiSize mpiWait mpiWaitAny mpiWtick mpiWtime
|
160
|
+
mshmet NLCG on plot polar Post pow processor processorblock
|
161
|
+
projection randinit randint31 randint32 random randreal1 randreal2
|
162
|
+
randreal3 randres53 Read readmesh readmesh3 Recv rfind rint round
|
163
|
+
savemesh savesol savevtk seekg Sent set sign signbit sin sinh sort
|
164
|
+
splitComm splitmesh sqrt square srandom srandomdev Stringification
|
165
|
+
swap system tan tanh tellg tetg tetgconvexhull tetgreconstruction
|
166
|
+
tetgtransfo tgamma triangulate trunc Wait Write y0 y1 yn
|
167
|
+
))
|
168
|
+
end
|
169
|
+
|
170
|
+
def self.attributes
|
171
|
+
@builtinsParameters ||= Set.new(%w(
|
172
|
+
A A1 abserror absolute aniso aspectratio B B1 bb beginend bin
|
173
|
+
boundary bw close cmm coef composante cutoff datafilename dataname
|
174
|
+
dim distmax displacement doptions dparams eps err errg facemerge
|
175
|
+
facetcl factorize file fill fixedborder flabel flags floatmesh
|
176
|
+
floatsol fregion gradation grey hmax hmin holelist hsv init inquire
|
177
|
+
inside IsMetric iso ivalue keepbackvertices label labeldown labelmid
|
178
|
+
labelup levelset loptions lparams maxit maxsubdiv meditff mem memory
|
179
|
+
metric mode nbarrow nbiso nbiter nbjacoby nboffacetcl nbofholes
|
180
|
+
nbofregions nbregul nbsmooth nbvx ncv nev nomeshgeneration
|
181
|
+
normalization omega op optimize option options order orientation
|
182
|
+
periodic power precon prev ps ptmerge qfe qforder qft qfV ratio
|
183
|
+
rawvector reffacelow reffacemid reffaceup refnum reftet reftri region
|
184
|
+
regionlist renumv rescaling ridgeangle save sigma sizeofvolume
|
185
|
+
smoothing solver sparams split splitin2 splitpbedge stop strategy
|
186
|
+
swap switch sym t tgv thetamax tol tolpivot tolpivotsym transfo U2Vc
|
187
|
+
value varrow vector veps viso wait width withsurfacemesh WindowIndex
|
188
|
+
which zbound
|
189
|
+
))
|
190
|
+
end
|
191
|
+
|
192
|
+
id = /[a-z_]\w*/i
|
193
|
+
|
194
|
+
state :expr_bol do
|
195
|
+
mixin :inline_whitespace
|
196
|
+
|
197
|
+
rule %r/include/, Comment::Preproc, :macro
|
198
|
+
rule %r/load/, Comment::Preproc, :macro
|
199
|
+
rule %r/ENDIFMACRO/, Comment::Preproc, :macro
|
200
|
+
rule %r/IFMACRO/, Comment::Preproc, :macro
|
201
|
+
|
202
|
+
rule(//) { pop! }
|
203
|
+
end
|
204
|
+
|
205
|
+
state :statements do
|
206
|
+
mixin :whitespace
|
207
|
+
rule %r/(u8|u|U|L)?"/, Str, :string
|
208
|
+
rule %r((u8|u|U|L)?'(\\.|\\[0-7]{1,3}|\\x[a-f0-9]{1,2}|[^\\'\n])')i, Str::Char
|
209
|
+
rule %r((\d+[.]\d*|[.]?\d+)e[+-]?\d+[lu]*)i, Num::Float
|
210
|
+
rule %r(\d+e[+-]?\d+[lu]*)i, Num::Float
|
211
|
+
rule %r/0x[0-9a-f]+[lu]*/i, Num::Hex
|
212
|
+
rule %r/0[0-7]+[lu]*/i, Num::Oct
|
213
|
+
rule %r/\d+[lu]*/i, Num::Integer
|
214
|
+
rule %r(\*/), Error
|
215
|
+
rule %r([~!%^&*+=\|?:<>/-]), Operator
|
216
|
+
rule %r/'/, Operator
|
217
|
+
rule %r/[()\[\],.;]/, Punctuation
|
218
|
+
rule %r/\bcase\b/, Keyword, :case
|
219
|
+
rule %r/(?:true|false|NaN)\b/, Name::Builtin
|
220
|
+
rule id do |m|
|
221
|
+
name = m[0]
|
222
|
+
|
223
|
+
if self.class.keywords.include? name
|
224
|
+
token Keyword
|
225
|
+
elsif self.class.keywords_type.include? name
|
226
|
+
token Keyword::Type
|
227
|
+
elsif self.class.reserved.include? name
|
228
|
+
token Keyword::Reserved
|
229
|
+
elsif self.class.builtins.include? name
|
230
|
+
token Name::Builtin
|
231
|
+
elsif self.class.attributes.include? name
|
232
|
+
token Name::Attribute
|
233
|
+
else
|
234
|
+
token Name
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|
240
|
+
end
|