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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a05162378ada50863a8c1a08984934c22af14e5288510b83fef150bae1f6be77
4
- data.tar.gz: c3785466ac705a0acac1af6d60f73c0a697fa4b7504874b8d58db6a2efcaf21d
3
+ metadata.gz: 579264110ed9ae2f82195af1d9d83d2ebf6288f8ce3cd6909c2a9d563ae0e1d5
4
+ data.tar.gz: 25a1809f05ec5aab6f04ee7b885a17cf8b1388e1247284e773bc166d13a9e296
5
5
  SHA512:
6
- metadata.gz: cffd7cde0caf543698b605bbdf64394a529c4fb11c025bd6ffa00d04d336f8a5cff8663d3d5a7e3f57a0f061d152d01914e2c3fbeaead37d6daf37ea491169bc
7
- data.tar.gz: faefcadccccee11a7e896fc408dcbfddf858c73f44697b5961777285e4f7d878fcd7ee0eefd3d42a9cd5442946dfc9ded90d6875b5d12771a6bd1eb631b57c43
6
+ metadata.gz: 832c13a7236b814d53a5a6b170fc00b4961efb2cdee91053bfc3a6386a9bc6c7b071f9fa51606321e94249b57c6f549f6e4bb420e7647ab68ca6a3c6e49d8c63
7
+ data.tar.gz: 5889f29c2788788120fd698ec004b847c5bafb7df0b22af36c9f1d2a78218c81e7fd136b359b586ed8f586e0a65eceb156721efcb95d95e3af7df34d0b174038
@@ -6,6 +6,10 @@ require 'pathname'
6
6
 
7
7
  # The containing module for Rouge
8
8
  module Rouge
9
+ # cache value in a constant since `__dir__` allocates a new string
10
+ # on every call.
11
+ LIB_DIR = __dir__.freeze
12
+
9
13
  class << self
10
14
  def reload!
11
15
  Object.send :remove_const, :Rouge
@@ -31,62 +35,73 @@ module Rouge
31
35
 
32
36
  formatter.format(lexer.lex(text), &b)
33
37
  end
34
- end
35
- end
36
38
 
37
- # mimic Kernel#require_relative API
38
- def load_relative(path)
39
- load File.join(__dir__, "#{path}.rb")
40
- end
39
+ # Load a file relative to the `lib/rouge` path.
40
+ #
41
+ # @api private
42
+ def load_file(path)
43
+ load File.join(LIB_DIR, "rouge/#{path}.rb")
44
+ end
41
45
 
42
- def lexer_dir(path = '')
43
- File.join(__dir__, 'rouge', 'lexers', path)
46
+ # Load the lexers in the `lib/rouge/lexers` directory.
47
+ #
48
+ # @api private
49
+ def load_lexers
50
+ # The trailing slash is necessary to avoid lexers being loaded multiple
51
+ # times by `Lexers.load_lexer`
52
+ lexer_dir = File.join(LIB_DIR, "rouge/lexers/")
53
+ Dir.glob(File.join(lexer_dir, '*.rb')).each do |f|
54
+ Lexers.load_lexer(f.sub(lexer_dir, ''))
55
+ end
56
+ end
57
+ end
44
58
  end
45
59
 
46
- load_relative 'rouge/version'
47
- load_relative 'rouge/util'
48
- load_relative 'rouge/text_analyzer'
49
- load_relative 'rouge/token'
60
+ Rouge.load_file 'version'
61
+ Rouge.load_file 'util'
62
+ Rouge.load_file 'text_analyzer'
63
+ Rouge.load_file 'token'
50
64
 
51
- load_relative 'rouge/lexer'
52
- load_relative 'rouge/regex_lexer'
53
- load_relative 'rouge/template_lexer'
65
+ Rouge.load_file 'lexer'
66
+ Rouge.load_file 'regex_lexer'
67
+ Rouge.load_file 'template_lexer'
54
68
 
55
- Dir.glob(lexer_dir('*rb')).each { |f| Rouge::Lexers.load_lexer(f.sub(lexer_dir, '')) }
69
+ Rouge.load_lexers
56
70
 
57
- load_relative 'rouge/guesser'
58
- load_relative 'rouge/guessers/util'
59
- load_relative 'rouge/guessers/glob_mapping'
60
- load_relative 'rouge/guessers/modeline'
61
- load_relative 'rouge/guessers/filename'
62
- load_relative 'rouge/guessers/mimetype'
63
- load_relative 'rouge/guessers/source'
64
- load_relative 'rouge/guessers/disambiguation'
71
+ Rouge.load_file 'guesser'
72
+ Rouge.load_file 'guessers/util'
73
+ Rouge.load_file 'guessers/glob_mapping'
74
+ Rouge.load_file 'guessers/modeline'
75
+ Rouge.load_file 'guessers/filename'
76
+ Rouge.load_file 'guessers/mimetype'
77
+ Rouge.load_file 'guessers/source'
78
+ Rouge.load_file 'guessers/disambiguation'
65
79
 
66
- load_relative 'rouge/formatter'
67
- load_relative 'rouge/formatters/html'
68
- load_relative 'rouge/formatters/html_table'
69
- load_relative 'rouge/formatters/html_pygments'
70
- load_relative 'rouge/formatters/html_legacy'
71
- load_relative 'rouge/formatters/html_linewise'
72
- load_relative 'rouge/formatters/html_line_table'
73
- load_relative 'rouge/formatters/html_inline'
74
- load_relative 'rouge/formatters/terminal256'
75
- load_relative 'rouge/formatters/tex'
76
- load_relative 'rouge/formatters/null'
80
+ Rouge.load_file 'formatter'
81
+ Rouge.load_file 'formatters/html'
82
+ Rouge.load_file 'formatters/html_table'
83
+ Rouge.load_file 'formatters/html_pygments'
84
+ Rouge.load_file 'formatters/html_legacy'
85
+ Rouge.load_file 'formatters/html_linewise'
86
+ Rouge.load_file 'formatters/html_line_table'
87
+ Rouge.load_file 'formatters/html_inline'
88
+ Rouge.load_file 'formatters/terminal256'
89
+ Rouge.load_file 'formatters/terminal_truecolor'
90
+ Rouge.load_file 'formatters/tex'
91
+ Rouge.load_file 'formatters/null'
77
92
 
78
- load_relative 'rouge/theme'
79
- load_relative 'rouge/tex_theme_renderer'
80
- load_relative 'rouge/themes/thankful_eyes'
81
- load_relative 'rouge/themes/colorful'
82
- load_relative 'rouge/themes/base16'
83
- load_relative 'rouge/themes/github'
84
- load_relative 'rouge/themes/igor_pro'
85
- load_relative 'rouge/themes/monokai'
86
- load_relative 'rouge/themes/molokai'
87
- load_relative 'rouge/themes/monokai_sublime'
88
- load_relative 'rouge/themes/gruvbox'
89
- load_relative 'rouge/themes/tulip'
90
- load_relative 'rouge/themes/pastie'
91
- load_relative 'rouge/themes/bw'
92
- load_relative 'rouge/themes/magritte'
93
+ Rouge.load_file 'theme'
94
+ Rouge.load_file 'tex_theme_renderer'
95
+ Rouge.load_file 'themes/thankful_eyes'
96
+ Rouge.load_file 'themes/colorful'
97
+ Rouge.load_file 'themes/base16'
98
+ Rouge.load_file 'themes/github'
99
+ Rouge.load_file 'themes/igor_pro'
100
+ Rouge.load_file 'themes/monokai'
101
+ Rouge.load_file 'themes/molokai'
102
+ Rouge.load_file 'themes/monokai_sublime'
103
+ Rouge.load_file 'themes/gruvbox'
104
+ Rouge.load_file 'themes/tulip'
105
+ Rouge.load_file 'themes/pastie'
106
+ Rouge.load_file 'themes/bw'
107
+ Rouge.load_file 'themes/magritte'
@@ -4,6 +4,8 @@
4
4
  # not required by the main lib.
5
5
  # to use this module, require 'rouge/cli'.
6
6
 
7
+ require 'rbconfig'
8
+
7
9
  module Rouge
8
10
  class FileReader
9
11
  attr_reader :input
@@ -200,9 +202,22 @@ module Rouge
200
202
  yield %[ delimiters. implies --escape]
201
203
  end
202
204
 
205
+ # There is no consistent way to do this, but this is used elsewhere,
206
+ # and we provide explicit opt-in and opt-out with $COLORTERM
207
+ def self.supports_truecolor?
208
+ return true if %w(24bit truecolor).include?(ENV['COLORTERM'])
209
+ return false if ENV['COLORTERM'] && ENV['COLORTERM'] =~ /256/
210
+
211
+ if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
212
+ ENV['ConEmuANSI'] == 'ON' && !ENV['ANSICON']
213
+ else
214
+ ENV['TERM'] !~ /(^rxvt)|(-color$)/
215
+ end
216
+ end
217
+
203
218
  def self.parse(argv)
204
219
  opts = {
205
- :formatter => 'terminal256',
220
+ :formatter => supports_truecolor? ? 'terminal-truecolor' : 'terminal256',
206
221
  :theme => 'thankful_eyes',
207
222
  :css_class => 'codehilite',
208
223
  :input_file => '-',
@@ -299,8 +314,10 @@ module Rouge
299
314
 
300
315
  theme = Theme.find(opts[:theme]).new or error! "unknown theme #{opts[:theme]}"
301
316
 
317
+ # TODO: document this in --help
302
318
  @formatter = case opts[:formatter]
303
319
  when 'terminal256' then Formatters::Terminal256.new(theme)
320
+ when 'terminal-truecolor' then Formatters::TerminalTruecolor.new(theme)
304
321
  when 'html' then Formatters::HTML.new
305
322
  when 'html-pygments' then Formatters::HTMLPygments.new(Formatters::HTML.new, opts[:css_class])
306
323
  when 'html-inline' then Formatters::HTMLInline.new(theme)
@@ -0,0 +1,5 @@
1
+ // Cypher Mode for Rouge
2
+ CREATE (john:Person {name: 'John'})
3
+ MATCH (user)-[:friend]->(follower)
4
+ WHERE user.name IN ['Joe', 'John', 'Sara', 'Maria', 'Steve'] AND follower.name =~ 'S.*'
5
+ RETURN user.name, follower.name
@@ -0,0 +1,21 @@
1
+
2
+ Get_Variable("EUSER","ENV","USERNAME");
3
+
4
+ Message("Le Login Windows est : %EUSER%");
5
+
6
+ Get_Variable("st","JOB","FOLDER1.date_err.SYSTEM.STATUS");
7
+
8
+
9
+ AFFECT("filter1", '%%/"t"');
10
+ AFFECT("filter2", '%%/"pi"');
11
+ JSONTOSQL("%{jsonpath}%/file.json", "",
12
+ " JSONPATH like '%filter1%' ", "a = JSONVALUE",
13
+ " JSONPATH like '%filter2%' ", "b = JSONVALUE; output(json_data, a, b)");
14
+
15
+
16
+ Affect(VAR1,'%TEST%'); //Créer et affecter la variable VAR1 avec une chaîne
17
+ select * from TABLE1 where COL1 like %VAR1%; //utiliser la variable VAR1 dans une requête
18
+
19
+ select * from TEST_TABLE; //exécution d'une requête Select pour ramener des valeurs
20
+ Affect_LastColumns("TEST1"); //création du paramètre TEST1
21
+
@@ -0,0 +1,18 @@
1
+ /*
2
+ Example code - use without restriction.
3
+ */
4
+ Layout_Person := RECORD
5
+ UNSIGNED1 PersonID;
6
+ STRING15 FirstName;
7
+ STRING25 LastName;
8
+ END;
9
+
10
+ allPeople := DATASET([ {1,'Fred','Smith'},
11
+ {2,'Joe','Blow'},
12
+ {3,'Jane','Smith'}],Layout_Person);
13
+
14
+ somePeople := allPeople(LastName = 'Smith');
15
+
16
+ // Outputs ---
17
+ somePeople;
18
+
@@ -0,0 +1,16 @@
1
+ include "MUMPS"
2
+
3
+ // Parameters
4
+ func f = 1.;
5
+
6
+ // Mesh
7
+ int nn = 25; //Mesh quality
8
+ mesh Th = square(nn, nn);
9
+
10
+ // Fespace
11
+ func Pk = P2;
12
+ fespace Uh(Th, Pk);
13
+ Uh u;
14
+
15
+ // Plot
16
+ plot(u, nbiso=30, fill=true, value=true, cmm="A");
@@ -0,0 +1,23 @@
1
+ [lvl_s4t3_entry() // [R1]
2
+ { info_tbls: [(c4uB,
3
+ label: lvl_s4t3_info
4
+ rep: HeapRep 1 ptrs { Thunk }
5
+ srt: Nothing)]
6
+ stack_info: arg_space: 8 updfr_space: Just 8
7
+ }
8
+ {offset
9
+ c4uB: // global
10
+ if ((Sp + -32) < SpLim) (likely: False) goto c4uC; else goto c4uD;
11
+ c4uC: // global
12
+ R1 = R1;
13
+ call (stg_gc_enter_1)(R1) args: 8, res: 0, upd: 8;
14
+ c4uD: // global
15
+ I64[Sp - 16] = stg_upd_frame_info;
16
+ P64[Sp - 8] = R1;
17
+ R2 = P64[R1 + 16];
18
+ I64[Sp - 32] = stg_ap_p_info;
19
+ P64[Sp - 24] = Main.fib3_closure+1;
20
+ Sp = Sp - 32;
21
+ call GHC.Num.fromInteger_info(R2) args: 40, res: 0, upd: 24;
22
+ }
23
+ }
@@ -0,0 +1,26 @@
1
+ Rec {
2
+ -- RHS size: {terms: 24, types: 3, coercions: 0, joins: 0/0}
3
+ Main.fib_fib [Occ=LoopBreaker] :: Integer -> Integer
4
+ [GblId, Arity=1, Str=<S,U>, Unf=OtherCon []]
5
+ Main.fib_fib
6
+ = \ (ds_d2OU :: Integer) ->
7
+ case integer-gmp-1.0.2.0:GHC.Integer.Type.eqInteger#
8
+ ds_d2OU Main.fib1
9
+ of {
10
+ __DEFAULT ->
11
+ case integer-gmp-1.0.2.0:GHC.Integer.Type.eqInteger#
12
+ ds_d2OU Main.fib3
13
+ of {
14
+ __DEFAULT ->
15
+ integer-gmp-1.0.2.0:GHC.Integer.Type.plusInteger
16
+ (Main.fib_fib
17
+ (integer-gmp-1.0.2.0:GHC.Integer.Type.minusInteger
18
+ ds_d2OU Main.fib3))
19
+ (Main.fib_fib
20
+ (integer-gmp-1.0.2.0:GHC.Integer.Type.minusInteger
21
+ ds_d2OU Main.fib2));
22
+ 1# -> Main.fib3
23
+ };
24
+ 1# -> Main.fib1
25
+ }
26
+ end Rec }
@@ -0,0 +1,4 @@
1
+ NameReq = Object.Requisites(SYSREQ_NAME)
2
+ if Assigned(NameReq.AsString)
3
+ ShowMessage("Привет мир")
4
+ endif
@@ -10,12 +10,12 @@
10
10
  extern irq_handler
11
11
 
12
12
  irq_common_stub:
13
- pusha ; Pushes edi,esi,ebp,esp,ebx,edx,ecx,eax
14
- mov ax, ds ; Lower 16-bits of eax = ds.
15
- push eax ; save the data segment descriptor
16
- mov ax, 0x10 ; load the kernel data segment descriptor
17
- mov edx, eax
18
- call irq_handler
13
+ pusha ; push all general-purpose registers
14
+ mov ax, ds ; lower 16-bits of eax = ds
15
+ push eax ; save the data segment descriptor
16
+ mov ax, 0x10 ; load the kernel data segment descriptor
17
+ mov edx, eax
18
+ call irq_handler
19
19
 
20
20
  %assign i 0
21
21
  %rep 8
@@ -0,0 +1,11 @@
1
+ .bank 0
2
+ .org $C000
3
+ Reset:
4
+ jsr WaitSync ; wait for VSYNC
5
+ jsr ClearRAM ; clear RAM
6
+ jsr WaitSync ; wait for VSYNC (and PPU warmup)
7
+
8
+ lda #$3f ; $3F -> A register
9
+ ldy #$00 ; $00 -> Y register
10
+ sta PPU_ADDR ; write #HIGH byte first
11
+ sty PPU_ADDR ; $3F00 -> PPU address
@@ -0,0 +1,17 @@
1
+ @import Foundation;
2
+ #import <array>
3
+ #include <vector>
4
+
5
+ @interface IntegerArray : NSObject {
6
+ std::vector<NSUInteger> _numbers;
7
+ }
8
+ @property(readonly) NSUInteger count;
9
+
10
+ - (instancetype)initWithNumbers:(NSUInteger *)numbers count:(NSUInteger)count;
11
+ - (NSUInteger)numberAtIndex:(NSUInteger)index;
12
+ @end
13
+
14
+ int main(int argc, char **argv) {
15
+ auto numbers = std::array<NSUInteger, 3>{1, 2, 3};
16
+ NSLog(@"%@", [[IntegerArray alloc] initWithNumbers:numbers.data() count:numbers.size()]);
17
+ }
@@ -0,0 +1,8 @@
1
+ package httpapi.authz
2
+
3
+ subordinates = {"alice": [], "charlie": [], "bob": ["alice"], "betty": ["charlie"]}
4
+
5
+ # HTTP API request
6
+ import input
7
+
8
+ default allow = false
@@ -0,0 +1,10 @@
1
+ // Printer.ice
2
+ module Demo
3
+ {
4
+ interface Printer
5
+ {
6
+ // A client can invoke this operation on a server.
7
+ // In this example we print the string s
8
+ void printString(string s);
9
+ }
10
+ }
@@ -0,0 +1,13 @@
1
+ pragma solidity ~0.4.15;
2
+
3
+ interface IMirror {
4
+ function reflect() external payable returns(bool /* ain't I pretty?.. */);
5
+ }
6
+
7
+ contract Mirror is IMirror {
8
+ event logMessage(address indexed sender, uint256 value, uint256 gas, bytes data);
9
+
10
+ function () { // no funny stuff
11
+ revert();
12
+ }
13
+ }
@@ -0,0 +1,12 @@
1
+ vcl 4.0;
2
+
3
+ backend server1 {
4
+ .host = "server1.example.com";
5
+ .probe = {
6
+ .url = "/";
7
+ .timeout = 1s;
8
+ .interval = 5s;
9
+ .window = 5;
10
+ .threshold = 3;
11
+ }
12
+ }
@@ -0,0 +1,17 @@
1
+ module petstore {
2
+ namespace "http://autlan.dt/gribok/yang/example";
3
+ prefix ex;
4
+
5
+ revision 2020-04-01 {
6
+ description "Example yang";
7
+ }
8
+
9
+ container pets {
10
+ list dogs {
11
+ key name;
12
+ leaf name {
13
+ type string;
14
+ }
15
+ }
16
+ }
17
+ }
@@ -24,10 +24,7 @@ module Rouge
24
24
 
25
25
  def stream(tokens, &b)
26
26
  tokens.each do |tok, val|
27
- escape = escape_sequence(tok)
28
- yield escape.style_string
29
- yield val.gsub("\n", "#{escape.reset_string}\n#{escape.style_string}")
30
- yield escape.reset_string
27
+ escape_sequence(tok).stream_value(val, &b)
31
28
  end
32
29
  end
33
30
 
@@ -85,6 +82,14 @@ module Rouge
85
82
  @bg = style.bg && self.class.color_index(style.bg)
86
83
  end
87
84
 
85
+
86
+ def stream_value(val, &b)
87
+ yield style_string
88
+ yield val.gsub("\e", "\\e")
89
+ .gsub("\n", "#{reset_string}\n#{style_string}")
90
+ yield reset_string
91
+ end
92
+
88
93
  def style_string
89
94
  @style_string ||= begin
90
95
  attrs = []
@@ -157,12 +162,23 @@ module Rouge
157
162
  end
158
163
  end
159
164
 
165
+ class Unescape < EscapeSequence
166
+ def initialize(*) end
167
+ def style_string(*) '' end
168
+ def reset_string(*) '' end
169
+ def stream_value(val) yield val end
170
+ end
171
+
160
172
  # private
161
173
  def escape_sequence(token)
162
- return '' if escape?(token)
174
+ return Unescape.new if escape?(token)
163
175
  @escape_sequences ||= {}
164
176
  @escape_sequences[token.qualname] ||=
165
- EscapeSequence.new(get_style(token))
177
+ make_escape_sequence(get_style(token))
178
+ end
179
+
180
+ def make_escape_sequence(style)
181
+ EscapeSequence.new(style)
166
182
  end
167
183
 
168
184
  def get_style(token)