rouge 3.26.1 → 3.29.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.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -1
  3. data/lib/rouge/demos/brainfuck +1 -1
  4. data/lib/rouge/demos/brightscript +1 -1
  5. data/lib/rouge/demos/bsl +1 -1
  6. data/lib/rouge/demos/cfscript +1 -1
  7. data/lib/rouge/demos/coq +1 -1
  8. data/lib/rouge/demos/csvs +1 -1
  9. data/lib/rouge/demos/dafny +16 -0
  10. data/lib/rouge/demos/datastudio +0 -1
  11. data/lib/rouge/demos/ecl +0 -1
  12. data/lib/rouge/demos/erlang +1 -1
  13. data/lib/rouge/demos/fluent +13 -0
  14. data/lib/rouge/demos/fsharp +1 -1
  15. data/lib/rouge/demos/glsl +1 -1
  16. data/lib/rouge/demos/haxe +0 -1
  17. data/lib/rouge/demos/idris +13 -0
  18. data/lib/rouge/demos/lean +8 -0
  19. data/lib/rouge/demos/nesasm +1 -1
  20. data/lib/rouge/demos/opentype_feature_file +0 -1
  21. data/lib/rouge/demos/plsql +2 -0
  22. data/lib/rouge/demos/smarty +0 -1
  23. data/lib/rouge/demos/stan +13 -0
  24. data/lib/rouge/demos/stata +14 -0
  25. data/lib/rouge/demos/syzlang +15 -0
  26. data/lib/rouge/demos/syzprog +8 -0
  27. data/lib/rouge/formatters/html_inline.rb +0 -1
  28. data/lib/rouge/lexer.rb +2 -2
  29. data/lib/rouge/lexers/apache/keywords.rb +1 -1
  30. data/lib/rouge/lexers/c.rb +12 -2
  31. data/lib/rouge/lexers/ceylon.rb +2 -2
  32. data/lib/rouge/lexers/console.rb +1 -1
  33. data/lib/rouge/lexers/cpp.rb +6 -4
  34. data/lib/rouge/lexers/cypher.rb +8 -0
  35. data/lib/rouge/lexers/dafny.rb +128 -0
  36. data/lib/rouge/lexers/dart.rb +8 -8
  37. data/lib/rouge/lexers/docker.rb +4 -0
  38. data/lib/rouge/lexers/eex.rb +2 -2
  39. data/lib/rouge/lexers/eiffel.rb +0 -1
  40. data/lib/rouge/lexers/fluent.rb +74 -0
  41. data/lib/rouge/lexers/gherkin/keywords.rb +1 -1
  42. data/lib/rouge/lexers/handlebars.rb +1 -1
  43. data/lib/rouge/lexers/hcl.rb +1 -0
  44. data/lib/rouge/lexers/hylang.rb +0 -1
  45. data/lib/rouge/lexers/idris.rb +210 -0
  46. data/lib/rouge/lexers/jsx.rb +1 -2
  47. data/lib/rouge/lexers/kotlin.rb +3 -1
  48. data/lib/rouge/lexers/lasso/keywords.rb +1 -1
  49. data/lib/rouge/lexers/lean.rb +164 -0
  50. data/lib/rouge/lexers/llvm/keywords.rb +1 -1
  51. data/lib/rouge/lexers/lua/keywords.rb +1 -1
  52. data/lib/rouge/lexers/mathematica/keywords.rb +1 -1
  53. data/lib/rouge/lexers/matlab/keywords.rb +1 -1
  54. data/lib/rouge/lexers/matlab.rb +3 -2
  55. data/lib/rouge/lexers/ocl.rb +0 -1
  56. data/lib/rouge/lexers/php/keywords.rb +1 -1
  57. data/lib/rouge/lexers/plsql.rb +578 -0
  58. data/lib/rouge/lexers/prometheus.rb +0 -1
  59. data/lib/rouge/lexers/python.rb +3 -1
  60. data/lib/rouge/lexers/q.rb +0 -1
  61. data/lib/rouge/lexers/rust.rb +82 -19
  62. data/lib/rouge/lexers/sparql.rb +5 -4
  63. data/lib/rouge/lexers/sqf/keywords.rb +1 -1
  64. data/lib/rouge/lexers/sql.rb +7 -7
  65. data/lib/rouge/lexers/stan.rb +451 -0
  66. data/lib/rouge/lexers/stata.rb +165 -0
  67. data/lib/rouge/lexers/supercollider.rb +0 -1
  68. data/lib/rouge/lexers/swift.rb +3 -3
  69. data/lib/rouge/lexers/syzlang.rb +317 -0
  70. data/lib/rouge/lexers/syzprog.rb +122 -0
  71. data/lib/rouge/lexers/tap.rb +0 -1
  72. data/lib/rouge/lexers/toml.rb +8 -6
  73. data/lib/rouge/lexers/tsx.rb +0 -1
  74. data/lib/rouge/lexers/tulip.rb +0 -1
  75. data/lib/rouge/lexers/viml/keywords.rb +1 -1
  76. data/lib/rouge/version.rb +1 -1
  77. metadata +21 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bf66ca242ee17857f0f67422e11b25a18f5638d57f54b50399d10983a899ec8b
4
- data.tar.gz: 05d8673d6c6c1c84e4691137574b18f3a5bd251faa1e8d861a6fa342416be01b
3
+ metadata.gz: 15e78361e4f2dde8ae802ffcd36cc0b1e8e9124c2bbe0d3182a767244047a9e0
4
+ data.tar.gz: 661838ffd5b8c6ff8ac894312293aa6c46b36abed76ccc8f0932358e6478c8b1
5
5
  SHA512:
6
- metadata.gz: 105a0d4429dc9109c4029e7bb142c4e42fb670039b24e8a5aed8f249ba35a85fa8c3aa63ce3be996cc848f4ee54fff50bba5e5061d6e099c36137c0f60948221
7
- data.tar.gz: a745067ac6959e3ea36ea20b9c73f2df54d75533125545ce4940489faab5cd2293bc123cceb4752cce451871de5702ab927e738a40cadfabc2525886db88715a
6
+ metadata.gz: 21f210c421a0a0137d57f2c7fd3b3d931a1b481a276e6fe6eb296a5e1572ccb7ffd3912a8455e98c362b863ab52773b27c7d9135e2cddaa7b75b5fa324f4036e
7
+ data.tar.gz: 9bb3d495c856a8e790cc38736afb4e187b5b34fa8d1f0c1b99ff60af63cec60a9312ee4a69a642e31938dd4586647e224f311afdde6d343bcafa35b64110f2a3
data/Gemfile CHANGED
@@ -11,7 +11,8 @@ gem 'minitest-power_assert'
11
11
  gem 'power_assert', '~> 1.2'
12
12
 
13
13
  gem 'parallel', '~> 1.13.0' if RUBY_VERSION < '2.2.0'
14
- gem 'rubocop', '~> 0.49.1'
14
+ gem 'rubocop', '~> 1.0', '<= 1.11'
15
+ gem 'rubocop-performance'
15
16
 
16
17
  # don't try to install redcarpet under jruby
17
18
  gem 'redcarpet', :platforms => :ruby
@@ -37,5 +38,8 @@ group :development do
37
38
  else
38
39
  gem 'sinatra'
39
40
  end
41
+
42
+ # Ruby 3 no longer ships with a web server
43
+ gem 'puma' if RUBY_VERSION >= '3'
40
44
  gem 'shotgun'
41
45
  end
@@ -2,4 +2,4 @@
2
2
  This is a sample
3
3
  comment.
4
4
  ]
5
- .[>+<-]>,
5
+ .[>+<-]>,
@@ -3,4 +3,4 @@ function main(args as dynamic) as void
3
3
  'Create a scene and load /components/helloworld.xml'
4
4
  scene = screen.CreateScene("HelloWorld")
5
5
  screen.show()
6
- end function
6
+ end function
data/lib/rouge/demos/bsl CHANGED
@@ -4,4 +4,4 @@
4
4
  Сообщить("Привет мир");
5
5
  КонецПроцедуры
6
6
 
7
- #КонецОбласти
7
+ #КонецОбласти
@@ -15,4 +15,4 @@ component accessors="true" {
15
15
 
16
16
  return foo;
17
17
  }
18
- }
18
+ }
data/lib/rouge/demos/coq CHANGED
@@ -10,4 +10,4 @@ Section with_T.
10
10
  end.
11
11
  End with_T.
12
12
 
13
- Definition a_string := "hello \" world".
13
+ Definition a_string := "hello \" world".
data/lib/rouge/demos/csvs CHANGED
@@ -5,4 +5,4 @@ Transaction_Date: xDate
5
5
  Transaction_ID: notEmpty
6
6
  Originator_Name: notEmpty
7
7
  Originator_Address: any("yes","no")
8
- Originator_Country: notEmpty
8
+ Originator_Country: notEmpty
@@ -0,0 +1,16 @@
1
+ module A {
2
+ const i: int := 56_78
3
+ }
4
+
5
+ method m(b: bool, s: string) {
6
+ var x: string;
7
+ var i: int;
8
+ if b then i := 1; else i := 2;
9
+ i := if b 1 else 2;
10
+ assert b;
11
+ assume b;
12
+ print s;
13
+ expect b;
14
+ }
15
+
16
+ function f(i: int): int { i + 1 }
@@ -18,4 +18,3 @@ select * from TABLE1 where COL1 like %VAR1%; //utiliser la variable VAR1 dans un
18
18
 
19
19
  select * from TEST_TABLE; //exécution d'une requête Select pour ramener des valeurs
20
20
  Affect_LastColumns("TEST1"); //création du paramètre TEST1
21
-
data/lib/rouge/demos/ecl CHANGED
@@ -15,4 +15,3 @@ somePeople := allPeople(LastName = 'Smith');
15
15
 
16
16
  // Outputs ---
17
17
  somePeople;
18
-
@@ -4,4 +4,4 @@
4
4
 
5
5
  %% Compute rectangle and circle area.
6
6
  area({rectangle, Width, Ht}) -> Width * Ht;
7
- area({circle, R}) -> 3.14159 * R * R.
7
+ area({circle, R}) -> 3.14159 * R * R.
@@ -0,0 +1,13 @@
1
+ # Simple things are simple.
2
+ hello-user = Hello, {$userName}!
3
+
4
+ # Complex things are possible.
5
+ shared-photos =
6
+ {$userName} {$photoCount ->
7
+ [one] added a new photo
8
+ *[other] added {$photoCount} new photos
9
+ } to {$userGender ->
10
+ [male] his stream
11
+ [female] her stream
12
+ *[other] their stream
13
+ }.
@@ -9,4 +9,4 @@ let rec existsLeaf test tree =
9
9
  || existsLeaf test right
10
10
 
11
11
  let hasEvenLeaf tree =
12
- existsLeaf (fun n -> n % 2 = 0) tree
12
+ existsLeaf (fun n -> n % 2 = 0) tree
data/lib/rouge/demos/glsl CHANGED
@@ -11,4 +11,4 @@ void main()
11
11
  {
12
12
  vertexColor = color;
13
13
  gl_Position = vec4(position, 0.0, 1.0);
14
- }
14
+ }
data/lib/rouge/demos/haxe CHANGED
@@ -2,4 +2,3 @@
2
2
  public static function hello(arg : String) {
3
3
  return 'Hello $arg';
4
4
  }
5
-
@@ -0,0 +1,13 @@
1
+ import Data.Vect
2
+
3
+ insert : Ord elem =>
4
+ (x : elem) -> (xsSorted : Vect len elem) -> Vect (S len) elem
5
+ insert x [] = [x]
6
+ insert x (y :: xs) = case x < y of
7
+ True => x :: y :: xs
8
+ False => y :: insert x xs
9
+
10
+ insSort : Ord elem => Vect n elem -> Vect n elem
11
+ insSort [] = []
12
+ insSort (x :: xs) = let xsSorted = insSort xs in
13
+ insert x xsSorted
@@ -0,0 +1,8 @@
1
+ open nat
2
+
3
+ def add : nat → nat → nat
4
+ | m zero := m
5
+ | m (succ n) := succ (add m n)
6
+
7
+ -- encode definition as an axiom
8
+ axiom add_zero (n : nat) : n + 0 = n
@@ -8,4 +8,4 @@ Reset:
8
8
  lda #$3f ; $3F -> A register
9
9
  ldy #$00 ; $00 -> Y register
10
10
  sta PPU_ADDR ; write #HIGH byte first
11
- sty PPU_ADDR ; $3F00 -> PPU address
11
+ sty PPU_ADDR ; $3F00 -> PPU address
@@ -3,4 +3,3 @@ languagesystem DFLT dflt;
3
3
  feature liga {
4
4
  sub f i by f_i;
5
5
  } liga;
6
-
@@ -0,0 +1,2 @@
1
+ SELECT q'{a quoted string}' AS s, TO_CHAR(SYSDATE,'MM/DD/YYYY') AS "Current Date" FROM DUAL
2
+ WHERE 1=1;
@@ -9,4 +9,3 @@
9
9
  </ul>
10
10
 
11
11
  <div class="{if $foo}class1{else}class2{/if}">{$foo.bar.baz}</div>
12
-
@@ -0,0 +1,13 @@
1
+ data {
2
+ int<lower=0> N;
3
+ vector[N] x;
4
+ vector[N] y;
5
+ }
6
+ parameters {
7
+ real alpha;
8
+ real beta;
9
+ real<lower=0> sigma;
10
+ }
11
+ model {
12
+ y ~ normal(alpha + beta * x, sigma);
13
+ }
@@ -0,0 +1,14 @@
1
+ * Run a series of linear regressions
2
+ sysuse auto, clear
3
+ foreach v of varlist mpg weight-turn {
4
+ regress price `v', robust
5
+ }
6
+
7
+ regress price i.foreign
8
+ local num_obs = e(N)
9
+ global myglobal = 4
10
+
11
+ * Generate and manipulate variables
12
+ generate newvar1 = "string"
13
+ generate newvar2 = 34 - `num_obs'
14
+ replace newvar2 = $myglobal
@@ -0,0 +1,15 @@
1
+ include <linux/test.h>
2
+
3
+ resource fd_test[fd]
4
+
5
+ openat$test(fd const[AT_FDCWD], file ptr[in, string["/dev/test"]], flags flags[open_flags], mode const[0]) fd_test
6
+
7
+ ioctl$TEST(fd fd_test, cmd const[TEST], arg ptr[in, test])
8
+
9
+ test {
10
+ number int32
11
+ size len[data, int32]
12
+ data array[int8]
13
+ }
14
+
15
+ _ = TEST
@@ -0,0 +1,8 @@
1
+ # Source: https://github.com/google/syzkaller/blob/master/sys/linux/test/vusb_hid
2
+
3
+ r0 = syz_usb_connect$hid(0x0, 0x36, &(0x7f0000000040)=ANY=[@ANYBLOB="12010000000018105e04da07000000000001090224000100000000090400000903000000092100000001222200090581030800000000"], 0x0)
4
+ syz_usb_control_io$hid(r0, 0x0, 0x0)
5
+ syz_usb_control_io$hid(r0, &(0x7f00000001c0)={0x24, 0x0, 0x0, &(0x7f0000000000)={0x0, 0x22, 0x22, {[@global=@item_012={0x2, 0x1, 0x9, "2313"}, @global=@item_012={0x2, 0x1, 0x0, "e53f"}, @global=@item_4={0x3, 0x1, 0x0, '\f\x00'}, @local=@item_012={0x2, 0x2, 0x2, "9000"}, @global=@item_4={0x3, 0x1, 0x0, "0900be00"}, @main=@item_4={0x3, 0x0, 0x8, '\x00'}, @local=@item_4={0x3, 0x2, 0x0, "09007a15"}, @local=@item_4={0x3, 0x2, 0x0, "5d8c3dda"}]}}, 0x0}, 0x0)
6
+ syz_usb_ep_write(r0, 0x81, 0x7, &(0x7f0000000000)='BBBBBBB')
7
+ syz_usb_ep_write(r0, 0x81, 0x7, &(0x7f0000000000)='BBBBBBB')
8
+ syz_usb_ep_write(r0, 0x81, 0x7, &(0x7f0000000000)='BBBBBBB')
@@ -28,4 +28,3 @@ module Rouge
28
28
  end
29
29
  end
30
30
  end
31
-
data/lib/rouge/lexer.rb CHANGED
@@ -293,8 +293,8 @@ module Rouge
293
293
 
294
294
  # @private
295
295
  def assert_utf8!(str)
296
- encoding = str.encoding.name
297
- return if encoding == 'US-ASCII' || encoding == 'UTF-8' || encoding == 'ASCII-8BIT'
296
+ encoding = str.encoding
297
+ return if encoding == Encoding::US_ASCII || encoding == Encoding::UTF_8 || encoding == Encoding::BINARY
298
298
 
299
299
  raise EncodingError.new(
300
300
  "Bad encoding: #{str.encoding.names.join(',')}. " +
@@ -21,4 +21,4 @@ module Rouge
21
21
  end
22
22
  end
23
23
  end
24
- end
24
+ end
@@ -170,12 +170,22 @@ module Rouge
170
170
  end
171
171
 
172
172
  state :macro do
173
- # NB: pop! goes back to :bol
174
- rule %r/\n/, Comment::Preproc, :pop!
173
+ mixin :include
175
174
  rule %r([^/\n\\]+), Comment::Preproc
176
175
  rule %r/\\./m, Comment::Preproc
177
176
  mixin :inline_whitespace
178
177
  rule %r(/), Comment::Preproc
178
+ # NB: pop! goes back to :bol
179
+ rule %r/\n/, Comment::Preproc, :pop!
180
+ end
181
+
182
+ state :include do
183
+ rule %r/(include)(\s*)(<[^>]+>)([^\n]*)/ do
184
+ groups Comment::Preproc, Text, Comment::PreprocFile, Comment::Single
185
+ end
186
+ rule %r/(include)(\s*)("[^"]+")([^\n]*)/ do
187
+ groups Comment::Preproc, Text, Comment::PreprocFile, Comment::Single
188
+ end
179
189
  end
180
190
 
181
191
  state :if_0 do
@@ -51,8 +51,8 @@ module Rouge
51
51
 
52
52
  rule %r("(\\\\|\\"|[^"])*"), Literal::String
53
53
  rule %r('\\.'|'[^\\]'|'\\\{#[0-9a-fA-F]{4}\}'), Literal::String::Char
54
- rule %r(".*``.*``.*"', String::Interpol
55
- rule %r(\.)([a-z_]\w*)) do
54
+ rule %r("[^`]*``[^`]*``[^`]*"), Literal::String::Interpol
55
+ rule %r((\.)([a-z_]\w*)) do
56
56
  groups Operator, Name::Attribute
57
57
  end
58
58
  rule %r([a-zA-Z_]\w*:), Name::Label
@@ -103,7 +103,7 @@ module Rouge
103
103
  end
104
104
 
105
105
  def line_regex
106
- /(\\.|[^\\])*?(\n|$)/m
106
+ /(.*?)(\n|$)/
107
107
  end
108
108
 
109
109
  def output_lexer
@@ -22,12 +22,14 @@ module Rouge
22
22
 
23
23
  def self.keywords
24
24
  @keywords ||= super + Set.new(%w(
25
- asm auto catch const_cast delete dynamic_cast explicit export friend
25
+ asm auto catch char8_t concept
26
+ consteval constexpr constinit const_cast co_await co_return co_yield
27
+ delete dynamic_cast explicit export friend
26
28
  mutable namespace new operator private protected public
27
- reinterpret_cast restrict size_of static_cast this throw throws
29
+ reinterpret_cast requires restrict size_of static_cast this throw throws
28
30
  typeid typename using virtual final override
29
31
 
30
- alignas alignof constexpr decltype noexcept static_assert
32
+ alignas alignof decltype noexcept static_assert
31
33
  thread_local try
32
34
  ))
33
35
  end
@@ -68,7 +70,7 @@ module Rouge
68
70
  rule %r/#{dq}[lu]*/i, Num::Integer
69
71
  rule %r/\bnullptr\b/, Name::Builtin
70
72
  rule %r/(?:u8|u|U|L)?R"([a-zA-Z0-9_{}\[\]#<>%:;.?*\+\-\/\^&|~!=,"']{,16})\(.*?\)\1"/m, Str
71
- rule %r/::/, Operator
73
+ rule %r/(::|<=>)/, Operator
72
74
  end
73
75
 
74
76
  state :classname do
@@ -45,6 +45,7 @@ module Rouge
45
45
  state :root do
46
46
  rule %r/[\s]+/, Text
47
47
  rule %r(//.*?$), Comment::Single
48
+ rule %r(/\*), Comment::Multiline, :multiline_comments
48
49
 
49
50
  rule %r([*+\-<>=&|~%^]), Operator
50
51
  rule %r/[{}),;\[\]]/, Str::Symbol
@@ -103,6 +104,13 @@ module Rouge
103
104
  rule %r/'(\\\\|\\'|[^'])*'/, Str::Single
104
105
  rule %r/`(\\\\|\\`|[^`])*`/, Str::Backtick
105
106
  end
107
+
108
+ state :multiline_comments do
109
+ rule %r(/[*]), Comment::Multiline, :multiline_comments
110
+ rule %r([*]/), Comment::Multiline, :pop!
111
+ rule %r([^/*]+), Comment::Multiline
112
+ rule %r([/*]), Comment::Multiline
113
+ end
106
114
  end
107
115
  end
108
116
  end
@@ -0,0 +1,128 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Dafny < RegexLexer
7
+ title "Dafny"
8
+ desc "The Dafny programming language (github.com/dafny-lang/dafny)"
9
+ tag "dafny"
10
+ filenames "*.dfy"
11
+ mimetypes "text/x-dafny"
12
+
13
+ keywords = %w(
14
+ abstract allocated assert assume
15
+ break by
16
+ calc case class codatatype const constructor
17
+ datatype decreases downto
18
+ else ensures exists expect export extends
19
+ false for forall fresh function
20
+ ghost greatest
21
+ if import include invariant iterator
22
+ label least lemma
23
+ match method modifies modify module
24
+ nameonly new newtype null
25
+ old opened
26
+ predicate print provides
27
+ reads refines requires return returns reveal reveals
28
+ static
29
+ then this to trait true twostate type
30
+ unchanged
31
+ var
32
+ while witness
33
+ yield yields
34
+ )
35
+
36
+ literals = %w{ true false null }
37
+
38
+ textOperators = %w{ as is in }
39
+
40
+ types = %w(bool char int real string nat
41
+ array array? object object? ORDINAL
42
+ seq set iset map imap multiset )
43
+
44
+ idstart = /[0-9a-zA-Z?]/
45
+ idchar = /[0-9a-zA-Z_'?]/
46
+ id = /#{idstart}#{idchar}*/
47
+
48
+ arrayType = /array(?:1[0-9]+|[2-9][0-9]*)\??(?!#{idchar})/
49
+ bvType = /bv(?:0|[1-9][0-9]*)(?!#{idchar})/
50
+
51
+ digit = /\d/
52
+ digits = /#{digit}+(?:_#{digit}+)*/
53
+ bin_digits = /[01]+(?:_[01]+)*/
54
+ hex_digit = /(?:[0-9a-fA-F])/
55
+ hex_digits = /#{hex_digit}+(?:_#{hex_digit}+)*/
56
+
57
+ cchar = /(?:[^\\'\n\r]|\\["'ntr\\0])/
58
+ schar = /(?:[^\\"\n\r]|\\["'ntr\\0])/
59
+ uchar = /(?:\\u#{hex_digit}{4})/
60
+
61
+ ## IMPORTANT: Rules are ordered, which allows later rules to be
62
+ ## simpler than they would otherwise be
63
+ state :root do
64
+ rule %r(/\*), Comment::Multiline, :comment
65
+ rule %r(//.*?$), Comment::Single
66
+ rule %r(\*/), Error # should not have closing comment in :root
67
+ # is an improperly nested comment
68
+
69
+ rule %r/'#{cchar}'/, Str::Char # standard or escape char
70
+ rule %r/'#{uchar}'/, Str::Char # unicode char
71
+ rule %r/'[^'\n\r]*'/, Error # bad any other enclosed char
72
+ rule %r/'[^'\n\r]*$/, Error # bad unclosed char
73
+
74
+ rule %r/"(?:#{schar}|#{uchar})*"/, Str::Double # valid string
75
+ rule %r/".*"/, Error # anything else that is closed
76
+ rule %r/".*$/, Error # bad unclosed string
77
+
78
+ rule %r/@"([^"]|"")*"/, Str::Other # valid verbatim string
79
+ rule %r/@".*/m, Error # anything else , multiline unclosed
80
+
81
+
82
+ rule %r/#{digits}\.#{digits}(?!#{idchar})/, Num::Float
83
+ rule %r/0b#{bin_digits}(?!#{idchar})/, Num::Bin
84
+ rule %r/0b#{idchar}*/, Error
85
+ rule %r/0x#{hex_digits}(?!#{idchar})/, Num::Hex
86
+ rule %r/0x#{idchar}*/, Error
87
+ rule %r/#{digits}(?!#{idchar})/, Num::Integer
88
+ rule %r/_(?!#{idchar})/, Name
89
+ rule %r/_[0-9_]+[_]?(?!#{idchar})/, Error
90
+ rule %r/[0-9_]+_(?!#{idchar})/, Error
91
+ rule %r/[0-9]#{idchar}+/, Error
92
+
93
+ rule %r/#{arrayType}/, Keyword::Type
94
+ rule %r/#{bvType}/, Keyword::Type
95
+
96
+ rule id do |m|
97
+ if types.include?(m[0])
98
+ token Keyword::Type
99
+ elsif literals.include?(m[0])
100
+ token Keyword::Constant
101
+ elsif textOperators.include?(m[0])
102
+ token Operator::Word
103
+ elsif keywords.include?(m[0])
104
+ token Keyword::Reserved
105
+ else
106
+ token Name
107
+ end
108
+ end
109
+
110
+ rule %r/\.\./, Operator
111
+ rule %r/[*!%&<>\|^+=:.\/-]/, Operator
112
+ rule %r/[\[\](){},;`]/, Punctuation
113
+
114
+ rule %r/[^\S\n]+/, Text
115
+ rule %r/\n/, Text
116
+ rule %r/./, Error # Catchall
117
+ end
118
+
119
+ state :comment do
120
+ rule %r(\*/), Comment::Multiline, :pop!
121
+ rule %r(/\*), Comment::Multiline, :comment
122
+ rule %r([^*/]+), Comment::Multiline
123
+ rule %r(.), Comment::Multiline
124
+ end
125
+
126
+ end
127
+ end
128
+ end
@@ -5,25 +5,25 @@ module Rouge
5
5
  module Lexers
6
6
  class Dart < RegexLexer
7
7
  title "Dart"
8
- desc "The Dart programming language (dartlang.com)"
8
+ desc "The Dart programming language (dart.dev)"
9
9
 
10
10
  tag 'dart'
11
11
  filenames '*.dart'
12
12
  mimetypes 'text/x-dart'
13
13
 
14
14
  keywords = %w(
15
- as assert break case catch continue default do else finally for
16
- if in is new rethrow return super switch this throw try while with
15
+ as assert await break case catch continue default do else finally for
16
+ if in is new rethrow return super switch this throw try while with yield
17
17
  )
18
18
 
19
19
  declarations = %w(
20
- abstract dynamic const external extends factory final get implements
21
- native operator set static typedef var
20
+ abstract async dynamic const covariant external extends factory final get
21
+ implements late native on operator required set static sync typedef var
22
22
  )
23
23
 
24
- types = %w(bool double Dynamic enum int num Object Set String void)
24
+ types = %w(bool Comparable double Dynamic enum Function int List Map Never Null num Object Pattern Set String Symbol Type Uri void)
25
25
 
26
- imports = %w(import export library part\s*of part source)
26
+ imports = %w(import deferred export library part\s*of part source)
27
27
 
28
28
  id = /[a-zA-Z_]\w*/
29
29
 
@@ -53,7 +53,7 @@ module Rouge
53
53
  rule %r/(?:#{declarations.join('|')})\b/, Keyword::Declaration
54
54
  rule %r/(?:#{types.join('|')})\b/, Keyword::Type
55
55
  rule %r/(?:true|false|null)\b/, Keyword::Constant
56
- rule %r/(?:class|interface)\b/, Keyword::Declaration, :class
56
+ rule %r/(?:class|interface|mixin)\b/, Keyword::Declaration, :class
57
57
  rule %r/(?:#{imports.join('|')})\b/, Keyword::Namespace, :import
58
58
  rule %r/(\.)(#{id})/ do
59
59
  groups Operator, Name::Attribute
@@ -20,6 +20,10 @@ module Rouge
20
20
  state :root do
21
21
  rule %r/\s+/, Text
22
22
 
23
+ rule %r/^(FROM)(\s+)(.*)(\s+)(AS)(\s+)(.*)/io do
24
+ groups Keyword, Text::Whitespace, Str, Text::Whitespace, Keyword, Text::Whitespace, Str
25
+ end
26
+
23
27
  rule %r/^(ONBUILD)(\s+)(#{KEYWORDS})(.*)/io do
24
28
  groups Keyword, Text::Whitespace, Keyword, Str
25
29
  end
@@ -7,9 +7,9 @@ module Rouge
7
7
  desc "Embedded Elixir"
8
8
 
9
9
  tag 'eex'
10
- aliases 'leex'
10
+ aliases 'leex', 'heex'
11
11
 
12
- filenames '*.eex', '*.leex'
12
+ filenames '*.eex', '*.leex', '*.heex'
13
13
 
14
14
  def initialize(opts={})
15
15
  @elixir_lexer = Elixir.new(opts)
@@ -63,4 +63,3 @@ module Rouge
63
63
  end
64
64
  end
65
65
  end
66
-
@@ -0,0 +1,74 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Fluent < RegexLexer
7
+ title 'Fluent'
8
+ desc 'Fluent localization files'
9
+ tag 'fluent'
10
+ aliases 'ftl'
11
+ filenames '*.ftl'
12
+
13
+ state :root do
14
+ rule %r{( *)(\=)( *)} do
15
+ groups Text::Whitespace, Punctuation, Text::Whitespace
16
+ push :template
17
+ end
18
+
19
+ rule %r{(?:\s*\n)+}m, Text::Whitespace
20
+ rule %r{\#{1,3}(?: .*)?$}, Comment::Single
21
+ rule %r{[a-zA-Z][a-zA-Z0-9_-]*}, Name::Constant
22
+ rule %r{\-[a-zA-Z][a-zA-Z0-9_-]*}, Name::Entity
23
+ rule %r{\s*\.[a-zA-Z][a-zA-Z0-9_-]*}, Name::Attribute
24
+ rule %r{\s+(?=[^\s\.])}, Text::Whitespace, :template
25
+ end
26
+
27
+ state :template do
28
+ rule %r{\n}m, Text::Whitespace, :pop!
29
+ rule %r{[^\{\n\}\*]+}, Text
30
+ rule %r{\{}, Punctuation, :placeable
31
+ rule %r{(?=\})}, Punctuation, :pop!
32
+ end
33
+
34
+ state :placeable do
35
+ rule %r{\s+}m, Text::Whitespace
36
+ rule %r{\{}, Punctuation, :placeable
37
+ rule %r{\}}, Punctuation, :pop!
38
+ rule %r{\$[a-zA-Z][a-zA-Z0-9_-]*}, Name::Variable
39
+ rule %r{\-[a-zA-Z][a-zA-Z0-9_-]*}, Name::Entity
40
+ rule %r{\.[a-zA-Z][a-zA-Z0-9_-]*}, Name::Attribute
41
+ rule %r{[A-Z]+}, Name::Builtin
42
+ rule %r{[a-zA-Z][a-zA-Z0-9_-]*}, Name::Constant
43
+ rule %r{[\(\),\:]}, Punctuation
44
+ rule %r{->}, Punctuation
45
+ rule %r{\*}, Punctuation::Indicator
46
+ rule %r{\-?\d+\.\d+?}, Literal::Number::Float
47
+ rule %r{\-?\d+}, Literal::Number::Integer
48
+ rule %r{"}, Str::Double, :string
49
+
50
+ rule %r{(\[)(\-?\d+\.\d+)(\])} do
51
+ groups Punctuation, Literal::Number::Float, Punctuation
52
+ push :template
53
+ end
54
+
55
+ rule %r{(\[)(\-?\d+)(\])} do
56
+ groups Punctuation, Literal::Number::Integer, Punctuation
57
+ push :template
58
+ end
59
+
60
+ rule %r{(\[)([a-zA-Z][a-zA-Z0-9_-]+)(\])} do
61
+ groups Punctuation, Str::Symbol, Punctuation
62
+ push :template
63
+ end
64
+ end
65
+
66
+ state :string do
67
+ rule %r{\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{6}}, Str::Escape
68
+ rule %r{\\.}, Str::Escape
69
+ rule %r{[^\"\\]}, Str::Double
70
+ rule %r{"}, Str::Double, :pop!
71
+ end
72
+ end
73
+ end
74
+ end
@@ -16,4 +16,4 @@ module Rouge
16
16
  end
17
17
  end
18
18
  end
19
- end
19
+ end