rouge 4.6.0 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7a7fb3b7ebd844675016c5515295713f72c36ded464d0a9bdb64e5929ab40f18
4
- data.tar.gz: 19d434e8b8fa8ad3c12483ad03fe74b09ca46b76f7d2ba0b8867d7e0303bfc85
3
+ metadata.gz: e05371bcf7512316daaccf75a2f7c24da653b802892662c9956cbf7bcfe42f51
4
+ data.tar.gz: 6280b9bb9841c1bab6d563649a981c71ac996e248fe3d895bf0e38dbb4562ea0
5
5
  SHA512:
6
- metadata.gz: fc2d202d4258acaffdaf0bee314049bf55876ee89384ef5e8d5625df1994f4789c893b2119721c1e3f71afed4040e3988774fa9e71ae8f7996fd90cff158ae22
7
- data.tar.gz: f93bbd478d426253369e29b3b2a7b806bc68a6397e78dcf73061ca0c5295ee800691aee291cef9ff7caeca610b98292c1b18bc67f54b214660b36edbb187b565
6
+ metadata.gz: df0cb13e8befea6fa4d387753e245cc3ed9ace57471979cbf6869ddde69d6e2703ddc9dbfdff09da1b0e6c1b871abd9ec47325f2a5c034df5ad8cd0820dec39e
7
+ data.tar.gz: 32224ae94596fd50173264ab44a97d9928cc3b3f1fc2e3bb4fb1f40004e18637d8afd44cf3e482f028ac95157598f9b932238c3f593d4d3ac65ec4d4df486da7
data/lib/rouge/cli.rb CHANGED
@@ -5,6 +5,7 @@
5
5
  # to use this module, require 'rouge/cli'.
6
6
 
7
7
  require 'rbconfig'
8
+ require 'uri'
8
9
 
9
10
  module Rouge
10
11
  class FileReader
@@ -348,7 +349,7 @@ module Rouge
348
349
  end
349
350
 
350
351
  private_class_method def self.parse_cgi(str)
351
- pairs = CGI.parse(str).map { |k, v| [k.to_sym, v.first] }
352
+ pairs = URI.decode_www_form(str).map { |k, v| [k.to_sym, v] }
352
353
  Hash[pairs]
353
354
  end
354
355
  end
@@ -0,0 +1,23 @@
1
+ import { LinkTo } from '@ember/routing';
2
+ import { local } from 'embroider-css-modules';
3
+
4
+ import styles from './navigation-menu.css';
5
+
6
+ const NavigationMenu = <template>
7
+ <nav aria-label={{@name}} data-test-nav={{@name}}>
8
+ <ul class={{styles.list}}>
9
+ {{#each @menuItems as |menuItem|}}
10
+ <li>
11
+ <LinkTo
12
+ class={{local styles "link"}}
13
+ data-test-link={{menuItem.label}}
14
+ >
15
+ {{menuItem.label}}
16
+ </LinkTo>
17
+ </li>
18
+ {{/each}}
19
+ </ul>
20
+ </nav>
21
+ </template>;
22
+
23
+ export default NavigationMenu;
@@ -0,0 +1,36 @@
1
+ import type { TOC } from '@ember/component/template-only';
2
+ import { LinkTo } from '@ember/routing';
3
+ import { local } from 'embroider-css-modules';
4
+
5
+ import styles from './navigation-menu.css';
6
+
7
+ type MenuItem = {
8
+ label: string;
9
+ route: string;
10
+ };
11
+
12
+ interface NavigationMenuSignature {
13
+ Args: {
14
+ menuItems: MenuItem[];
15
+ name?: string;
16
+ };
17
+ }
18
+
19
+ const NavigationMenu = <template>
20
+ <nav aria-label={{@name}} data-test-nav={{@name}}>
21
+ <ul class={{styles.list}}>
22
+ {{#each @menuItems as |menuItem|}}
23
+ <li>
24
+ <LinkTo
25
+ class={{local styles "link"}}
26
+ data-test-link={{menuItem.label}}
27
+ >
28
+ {{menuItem.label}}
29
+ </LinkTo>
30
+ </li>
31
+ {{/each}}
32
+ </ul>
33
+ </nav>
34
+ </template> satisfies TOC<NavigationMenuSignature>;
35
+
36
+ export default NavigationMenu;
@@ -1,9 +1,6 @@
1
1
  # -*- coding: utf-8 -*- #
2
2
  # frozen_string_literal: true
3
3
 
4
- # stdlib
5
- require 'cgi'
6
-
7
4
  module Rouge
8
5
  module Formatters
9
6
  # Transforms a token stream into HTML output.
data/lib/rouge/lexer.rb CHANGED
@@ -3,8 +3,8 @@
3
3
 
4
4
  # stdlib
5
5
  require 'strscan'
6
- require 'cgi'
7
6
  require 'set'
7
+ require 'uri'
8
8
 
9
9
  module Rouge
10
10
  # @abstract
@@ -52,17 +52,19 @@ module Rouge
52
52
  name, opts = str ? str.split('?', 2) : [nil, '']
53
53
 
54
54
  # parse the options hash from a cgi-style string
55
- opts = CGI.parse(opts || '').map do |k, vals|
56
- val = case vals.size
55
+ cgi_opts = Hash.new { |hash, key| hash[key] = [] }
56
+ URI.decode_www_form(opts || '').each do |k, val|
57
+ cgi_opts[k] << val
58
+ end
59
+ cgi_opts.transform_values! do |vals|
60
+ case vals.size
57
61
  when 0 then true
58
62
  when 1 then vals[0]
59
63
  else vals
60
64
  end
61
-
62
- [ k.to_s, val ]
63
65
  end
64
66
 
65
- opts = default_options.merge(Hash[opts])
67
+ opts = default_options.merge(cgi_opts)
66
68
 
67
69
  lexer_class = case name
68
70
  when 'guess', nil
@@ -7,7 +7,7 @@ module Rouge
7
7
  title 'COBOL'
8
8
  desc 'COBOL (Common Business-Oriented Language) programming language'
9
9
  tag 'cobol'
10
- filenames '*.cob', '*.cbl'
10
+ filenames '*.cob', '*.cbl', '*.cpy', '*.cpb'
11
11
  mimetypes 'text/x-cobol'
12
12
 
13
13
  identifier = /\p{Alpha}[\p{Alnum}-]*/
@@ -154,7 +154,7 @@ module Rouge
154
154
  s-resize sans-serif saturation scale-down screen scroll
155
155
  se-resize semi-condensed semi-expanded separate serif show
156
156
  sides silent size slow slower small-caps small-caption smaller
157
- smooth soft soft-light solid space-aroun space-between
157
+ smooth soft soft-light solid space-around space-between
158
158
  space-evenly span spell-out square start static status-bar sticky
159
159
  stretch sub subtract super sw-resize swap symbolic table
160
160
  table-caption table-cell table-column table-column-group
@@ -259,6 +259,7 @@ module Rouge
259
259
  end
260
260
 
261
261
  state :at_rule do
262
+ rule %r/(?:<=|>=|~=|\|=|\^=|\$=|\*=|<|>|=)/, Operator
262
263
  rule %r/{(?=\s*#{identifier}\s*:)/m, Punctuation, :at_stanza
263
264
  rule %r/{/, Punctuation, :at_body
264
265
  rule %r/;/, Punctuation, :pop!
@@ -0,0 +1,39 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ load_lexer 'javascript.rb'
7
+
8
+ class Gjs < Javascript
9
+ title "Template Tag (gjs)"
10
+ desc "Ember.js, JavaScript with <template> tags"
11
+ tag "gjs"
12
+ filenames "*.gjs"
13
+ mimetypes "text/x-gjs", "application/x-gjs"
14
+
15
+ def initialize(*)
16
+ super
17
+ @handlebars = Handlebars.new(options)
18
+ end
19
+
20
+ prepend :root do
21
+ rule %r/(<)(template)(>)/ do
22
+ groups Name::Tag, Keyword, Name::Tag
23
+ push :template
24
+ end
25
+ end
26
+
27
+ state :template do
28
+ rule %r((</)(template)(>)) do
29
+ groups Name::Tag, Keyword, Name::Tag
30
+ pop!
31
+ end
32
+
33
+ rule %r/.+?(?=<\/template>)/m do
34
+ delegate @handlebars
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -25,6 +25,7 @@ module Rouge
25
25
 
26
26
  LETTER = /#{UNICODE_LETTER}|_/
27
27
  DECIMAL_DIGIT = /[0-9]/
28
+ BINARY_DIGIT = /[01]/
28
29
  OCTAL_DIGIT = /[0-7]/
29
30
  HEX_DIGIT = /[0-9A-Fa-f]/
30
31
 
@@ -71,14 +72,15 @@ module Rouge
71
72
 
72
73
  # Integer literals
73
74
 
74
- DECIMAL_LIT = /[0-9]#{DECIMAL_DIGIT}*/
75
- OCTAL_LIT = /0#{OCTAL_DIGIT}*/
76
- HEX_LIT = /0[xX]#{HEX_DIGIT}+/
77
- INT_LIT = /#{HEX_LIT}|#{DECIMAL_LIT}|#{OCTAL_LIT}/
75
+ DECIMAL_LIT = /#{DECIMAL_DIGIT}(?:_?#{DECIMAL_DIGIT})*/
76
+ BINARY_LIT = /0[bB]_*#{BINARY_DIGIT}(?:_?#{BINARY_DIGIT})*/
77
+ OCTAL_LIT = /0[oO]?_*#{OCTAL_DIGIT}(?:_?#{OCTAL_DIGIT})*/
78
+ HEX_LIT = /0[xX]_*#{HEX_DIGIT}(?:_?#{HEX_DIGIT})*/
79
+ INT_LIT = /#{BINARY_LIT}|#{HEX_LIT}|#{OCTAL_LIT}|#{DECIMAL_LIT}/
78
80
 
79
81
  # Floating-point literals
80
82
 
81
- DECIMALS = /#{DECIMAL_DIGIT}+/
83
+ DECIMALS = /#{DECIMAL_DIGIT}(?:_?#{DECIMAL_DIGIT})*/
82
84
  EXPONENT = /[eE][+\-]?#{DECIMALS}/
83
85
  FLOAT_LIT = / #{DECIMALS} \. #{DECIMALS}? #{EXPONENT}?
84
86
  | #{DECIMALS} #{EXPONENT}
@@ -0,0 +1,39 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ load_lexer 'typescript.rb'
7
+
8
+ class Gts < Typescript
9
+ title "Template Tag (gts)"
10
+ desc "Ember.js, TypeScript with <template> tags"
11
+ tag "gts"
12
+ filenames "*.gts"
13
+ mimetypes "text/x-gts", "application/x-gts"
14
+
15
+ def initialize(*)
16
+ super
17
+ @handlebars = Handlebars.new(options)
18
+ end
19
+
20
+ prepend :root do
21
+ rule %r/(<)(template)(>)/ do
22
+ groups Name::Tag, Keyword, Name::Tag
23
+ push :template
24
+ end
25
+ end
26
+
27
+ state :template do
28
+ rule %r((</)(template)(>)) do
29
+ groups Name::Tag, Keyword, Name::Tag
30
+ pop!
31
+ end
32
+
33
+ rule %r/.+?(?=<\/template>)/m do
34
+ delegate @handlebars
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -14,8 +14,8 @@ module Rouge
14
14
  identifier = /[\w\-.]+/
15
15
 
16
16
  state :basic do
17
+ rule %r/\s+/, Text::Whitespace
17
18
  rule %r/[;#].*?\n/, Comment
18
- rule %r/\s+/, Text
19
19
  rule %r/\\\n/, Str::Escape
20
20
  end
21
21
 
@@ -23,11 +23,14 @@ module Rouge
23
23
  mixin :basic
24
24
 
25
25
  rule %r/(#{identifier})(\s*)(=)/ do
26
- groups Name::Property, Text, Punctuation
26
+ groups Name::Property, Text::Whitespace, Punctuation
27
27
  push :value
28
28
  end
29
29
 
30
30
  rule %r/\[.*?\]/, Name::Namespace
31
+
32
+ # standalone option, supported by some INI parsers
33
+ rule %r/(.+?)/, Name::Attribute
31
34
  end
32
35
 
33
36
  state :value do
@@ -105,7 +105,26 @@ module Rouge
105
105
  rule %r/\)/, Punctuation, :pop!
106
106
  rule %r/[(,]/, Punctuation
107
107
  rule %r/\s+/, Text
108
- rule %r/"/, Str::Regex, :regex
108
+ rule %r/'/, Str::Regex, :regex_sq
109
+ rule %r/"/, Str::Regex, :regex_dq
110
+ end
111
+
112
+ state :regex_sq do
113
+ rule %r(') do
114
+ token Str::Regex
115
+ goto :regex_end
116
+ end
117
+
118
+ mixin :regex
119
+ end
120
+
121
+ state :regex_dq do
122
+ rule %r(") do
123
+ token Str::Regex
124
+ goto :regex_end
125
+ end
126
+
127
+ mixin :regex
109
128
  end
110
129
 
111
130
  state :regex do
@@ -151,13 +170,15 @@ module Rouge
151
170
  end
152
171
 
153
172
  state :sqs do
173
+ rule %r(\\'), Str::Escape
154
174
  rule %r('), Str::Single, :pop!
155
- rule %r([^']+), Str::Single
175
+ rule %r([^'\\]+), Str::Single
156
176
  end
157
177
 
158
178
  state :dqs do
179
+ rule %r(\\"), Str::Escape
159
180
  rule %r("), Str::Double, :pop!
160
- rule %r([^"]+), Str::Double
181
+ rule %r([^"\\]+), Str::Double
161
182
  end
162
183
  end
163
184
  end