rouge 3.13.0 → 3.18.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rouge.rb +65 -50
  3. data/lib/rouge/cli.rb +18 -1
  4. data/lib/rouge/demos/cypher +5 -0
  5. data/lib/rouge/demos/datastudio +21 -0
  6. data/lib/rouge/demos/ecl +18 -0
  7. data/lib/rouge/demos/freefem +16 -0
  8. data/lib/rouge/demos/ghc-cmm +23 -0
  9. data/lib/rouge/demos/ghc-core +26 -0
  10. data/lib/rouge/demos/isbl +4 -0
  11. data/lib/rouge/demos/nasm +6 -6
  12. data/lib/rouge/demos/nesasm +11 -0
  13. data/lib/rouge/demos/objective_cpp +17 -0
  14. data/lib/rouge/demos/rego +8 -0
  15. data/lib/rouge/demos/slice +10 -0
  16. data/lib/rouge/demos/solidity +13 -0
  17. data/lib/rouge/demos/vcl +12 -0
  18. data/lib/rouge/demos/yang +17 -0
  19. data/lib/rouge/formatters/terminal256.rb +22 -6
  20. data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
  21. data/lib/rouge/lexer.rb +5 -3
  22. data/lib/rouge/lexers/apache.rb +4 -8
  23. data/lib/rouge/lexers/apache/keywords.rb +15 -0
  24. data/lib/rouge/lexers/cmake.rb +1 -0
  25. data/lib/rouge/lexers/coffeescript.rb +47 -15
  26. data/lib/rouge/lexers/console.rb +88 -35
  27. data/lib/rouge/lexers/cpp.rb +12 -5
  28. data/lib/rouge/lexers/cypher.rb +108 -0
  29. data/lib/rouge/lexers/d.rb +4 -4
  30. data/lib/rouge/lexers/datastudio.rb +138 -0
  31. data/lib/rouge/lexers/dot.rb +2 -2
  32. data/lib/rouge/lexers/ecl.rb +175 -0
  33. data/lib/rouge/lexers/freefem.rb +240 -0
  34. data/lib/rouge/lexers/fsharp.rb +1 -0
  35. data/lib/rouge/lexers/ghc_cmm.rb +340 -0
  36. data/lib/rouge/lexers/ghc_core.rb +151 -0
  37. data/lib/rouge/lexers/gherkin.rb +1 -1
  38. data/lib/rouge/lexers/io.rb +2 -2
  39. data/lib/rouge/lexers/isbl.rb +97 -0
  40. data/lib/rouge/lexers/isbl/builtins.rb +17 -0
  41. data/lib/rouge/lexers/java.rb +4 -5
  42. data/lib/rouge/lexers/jinja.rb +5 -3
  43. data/lib/rouge/lexers/json.rb +3 -0
  44. data/lib/rouge/lexers/json_doc.rb +5 -3
  45. data/lib/rouge/lexers/kotlin.rb +4 -0
  46. data/lib/rouge/lexers/lasso.rb +4 -9
  47. data/lib/rouge/lexers/lasso/keywords.rb +14 -0
  48. data/lib/rouge/lexers/liquid.rb +1 -1
  49. data/lib/rouge/lexers/llvm.rb +55 -46
  50. data/lib/rouge/lexers/lua.rb +40 -2
  51. data/lib/rouge/lexers/m68k.rb +2 -2
  52. data/lib/rouge/lexers/magik.rb +1 -1
  53. data/lib/rouge/lexers/markdown.rb +9 -5
  54. data/lib/rouge/lexers/mathematica.rb +1 -1
  55. data/lib/rouge/lexers/matlab.rb +3 -4
  56. data/lib/rouge/lexers/matlab/builtins.rb +11 -0
  57. data/lib/rouge/lexers/nasm.rb +42 -168
  58. data/lib/rouge/lexers/nesasm.rb +78 -0
  59. data/lib/rouge/lexers/nginx.rb +1 -1
  60. data/lib/rouge/lexers/objective_c.rb +3 -172
  61. data/lib/rouge/lexers/objective_c/common.rb +184 -0
  62. data/lib/rouge/lexers/objective_cpp.rb +31 -0
  63. data/lib/rouge/lexers/pascal.rb +1 -1
  64. data/lib/rouge/lexers/php.rb +47 -32
  65. data/lib/rouge/lexers/pony.rb +1 -1
  66. data/lib/rouge/lexers/powershell.rb +5 -0
  67. data/lib/rouge/lexers/protobuf.rb +1 -1
  68. data/lib/rouge/lexers/python.rb +68 -58
  69. data/lib/rouge/lexers/racket.rb +24 -1
  70. data/lib/rouge/lexers/rego.rb +45 -0
  71. data/lib/rouge/lexers/ruby.rb +16 -3
  72. data/lib/rouge/lexers/rust.rb +3 -11
  73. data/lib/rouge/lexers/scala.rb +4 -4
  74. data/lib/rouge/lexers/shell.rb +1 -1
  75. data/lib/rouge/lexers/sieve.rb +1 -1
  76. data/lib/rouge/lexers/slice.rb +32 -0
  77. data/lib/rouge/lexers/solidity.rb +185 -0
  78. data/lib/rouge/lexers/sqf.rb +2 -2
  79. data/lib/rouge/lexers/swift.rb +2 -1
  80. data/lib/rouge/lexers/terraform.rb +15 -0
  81. data/lib/rouge/lexers/toml.rb +39 -1
  82. data/lib/rouge/lexers/typescript.rb +11 -0
  83. data/lib/rouge/lexers/varnish.rb +168 -0
  84. data/lib/rouge/lexers/verilog.rb +1 -1
  85. data/lib/rouge/lexers/viml.rb +1 -1
  86. data/lib/rouge/lexers/vue.rb +4 -1
  87. data/lib/rouge/lexers/yang.rb +147 -0
  88. data/lib/rouge/version.rb +1 -1
  89. metadata +37 -6
  90. data/lib/rouge/lexers/apache/keywords.yml +0 -764
  91. data/lib/rouge/lexers/lasso/keywords.yml +0 -446
  92. data/lib/rouge/lexers/matlab/builtins.yml +0 -3515
@@ -35,9 +35,9 @@ module Rouge
35
35
  )
36
36
 
37
37
  keywords_pseudo = %w(
38
- __FILE__ __MODULE__ __LINE__ __FUNCTION__ __PRETTY_FUNCTION__
39
- __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__
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(//(.*?)\n), Comment::Single
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
@@ -17,8 +17,8 @@ module Rouge
17
17
 
18
18
  state :comments_and_whitespace do
19
19
  rule %r/\s+/, Text
20
- rule %r(#.*?\n), Comment::Single
21
- rule %r(//.*?\n), Comment::Single
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