coderay 1.0.0.800pre → 1.0.0.815pre

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 (38) hide show
  1. data/{README.rdoc → README_INDEX.rdoc} +2 -0
  2. data/Rakefile +3 -3
  3. data/bin/coderay +31 -9
  4. data/lib/coderay.rb +2 -1
  5. data/lib/coderay/encoder.rb +11 -1
  6. data/lib/coderay/encoders/_map.rb +0 -1
  7. data/lib/coderay/encoders/count.rb +9 -3
  8. data/lib/coderay/encoders/debug.rb +1 -1
  9. data/lib/coderay/encoders/filter.rb +12 -6
  10. data/lib/coderay/encoders/html.rb +11 -1
  11. data/lib/coderay/encoders/html/css.rb +1 -1
  12. data/lib/coderay/encoders/html/output.rb +0 -1
  13. data/lib/coderay/encoders/json.rb +20 -7
  14. data/lib/coderay/encoders/lines_of_code.rb +2 -1
  15. data/lib/coderay/encoders/statistic.rb +5 -6
  16. data/lib/coderay/encoders/text.rb +8 -5
  17. data/lib/coderay/encoders/token_kind_filter.rb +1 -0
  18. data/lib/coderay/encoders/xml.rb +5 -3
  19. data/lib/coderay/encoders/yaml.rb +13 -8
  20. data/lib/coderay/helpers/file_type.rb +4 -4
  21. data/lib/coderay/helpers/plugin.rb +7 -5
  22. data/lib/coderay/scanner.rb +30 -18
  23. data/lib/coderay/scanners/_map.rb +14 -13
  24. data/lib/coderay/scanners/clojure.rb +1 -1
  25. data/lib/coderay/scanners/css.rb +36 -27
  26. data/lib/coderay/scanners/{rhtml.rb → erb.rb} +3 -3
  27. data/lib/coderay/scanners/groovy.rb +1 -1
  28. data/lib/coderay/scanners/java_script.rb +1 -1
  29. data/lib/coderay/scanners/php.rb +2 -2
  30. data/lib/coderay/scanners/ruby.rb +11 -6
  31. data/lib/coderay/tokens.rb +1 -3
  32. data/test/functional/basic.rb +26 -19
  33. data/test/functional/examples.rb +2 -0
  34. data/test/functional/for_redcloth.rb +12 -6
  35. data/test/functional/suite.rb +2 -1
  36. metadata +26 -9
  37. data/lib/coderay/scanners/nitro_xhtml.rb +0 -136
  38. data/lib/coderay/scanners/scheme.rb +0 -136
@@ -73,9 +73,7 @@ module CodeRay
73
73
  encoder.encode_tokens self, options
74
74
  end
75
75
 
76
- # Turn into a string using Encoders::Text.
77
- #
78
- # +options+ are passed to the encoder if given.
76
+ # Turn tokens into a string by concatenating them.
79
77
  def to_s
80
78
  encode CodeRay::Encoders::Encoder.new
81
79
  end
@@ -1,21 +1,12 @@
1
1
  # encoding: utf-8
2
2
  require 'test/unit'
3
+ require File.expand_path('../../lib/assert_warning', __FILE__)
4
+
5
+ $:.unshift File.expand_path('../../../lib', __FILE__)
3
6
  require 'coderay'
4
7
 
5
8
  class BasicTest < Test::Unit::TestCase
6
9
 
7
- def assert_warning expected_warning
8
- require 'stringio'
9
- oldstderr = $stderr
10
- $stderr = StringIO.new
11
- yield
12
- $stderr.rewind
13
- given_warning = $stderr.read.chomp
14
- assert_equal expected_warning, given_warning
15
- ensure
16
- $stderr = oldstderr
17
- end
18
-
19
10
  def test_version
20
11
  assert_nothing_raised do
21
12
  assert_match(/\A\d\.\d\.\d?\z/, CodeRay::VERSION)
@@ -135,13 +126,9 @@ more code # and another comment, in-line.
135
126
  assert_equal 0, CodeRay.scan(rHTML, :html).lines_of_code
136
127
  assert_equal 0, CodeRay.scan(rHTML, :php).lines_of_code
137
128
  assert_equal 0, CodeRay.scan(rHTML, :yaml).lines_of_code
138
- assert_equal 4, CodeRay.scan(rHTML, :rhtml).lines_of_code
129
+ assert_equal 4, CodeRay.scan(rHTML, :erb).lines_of_code
139
130
  end
140
131
 
141
- def test_rubygems_not_loaded
142
- assert_equal nil, defined? Gem
143
- end if ENV['check_rubygems'] && RUBY_VERSION < '1.9'
144
-
145
132
  def test_list_of_encoders
146
133
  assert_kind_of(Array, CodeRay::Encoders.list)
147
134
  assert CodeRay::Encoders.list.include?(:count)
@@ -243,8 +230,28 @@ more code # and another comment, in-line.
243
230
  scanner = CodeRay::Scanners::Plain.new "foo\nbär+quux"
244
231
  assert_equal 0, scanner.pos
245
232
  assert_equal 1, scanner.line
246
- assert_equal 0, scanner.column
247
- scanner.scan(/foo\nbär/)
233
+ assert_equal 1, scanner.column
234
+ scanner.scan(/foo/)
235
+ assert_equal 3, scanner.pos
236
+ assert_equal 1, scanner.line
237
+ assert_equal 4, scanner.column
238
+ scanner.scan(/\n/)
239
+ assert_equal 4, scanner.pos
240
+ assert_equal 2, scanner.line
241
+ assert_equal 1, scanner.column
242
+ scanner.scan(/b/)
243
+ assert_equal 5, scanner.pos
244
+ assert_equal 2, scanner.line
245
+ assert_equal 2, scanner.column
246
+ scanner.scan(/a/)
247
+ assert_equal 5, scanner.pos
248
+ assert_equal 2, scanner.line
249
+ assert_equal 2, scanner.column
250
+ scanner.scan(/ä/)
251
+ assert_equal 7, scanner.pos
252
+ assert_equal 2, scanner.line
253
+ assert_equal 4, scanner.column
254
+ scanner.scan(/r/)
248
255
  assert_equal 8, scanner.pos
249
256
  assert_equal 2, scanner.line
250
257
  assert_equal 5, scanner.column
@@ -1,4 +1,6 @@
1
1
  require 'test/unit'
2
+
3
+ $:.unshift File.expand_path('../../../lib', __FILE__)
2
4
  require 'coderay'
3
5
 
4
6
  class ExamplesTest < Test::Unit::TestCase
@@ -1,5 +1,7 @@
1
1
  require 'test/unit'
2
- $:.unshift 'lib'
2
+ require File.expand_path('../../lib/assert_warning', __FILE__)
3
+
4
+ $:.unshift File.expand_path('../../../lib', __FILE__)
3
5
  require 'coderay'
4
6
 
5
7
  begin
@@ -64,15 +66,19 @@ class BasicTest < Test::Unit::TestCase
64
66
  # See http://jgarber.lighthouseapp.com/projects/13054/tickets/124-code-markup-does-not-allow-brackets.
65
67
  def test_for_redcloth_false_positive
66
68
  require 'coderay/for_redcloth'
67
- assert_equal '<p><code>[project]_dff.skjd</code></p>',
68
- RedCloth.new('@[project]_dff.skjd@').to_html
69
+ assert_warning 'CodeRay::Scanners could not load plugin :project; falling back to :text' do
70
+ assert_equal '<p><code>[project]_dff.skjd</code></p>',
71
+ RedCloth.new('@[project]_dff.skjd@').to_html
72
+ end
69
73
  # false positive, but expected behavior / known issue
70
74
  assert_equal "<p><span lang=\"ruby\" class=\"CodeRay\">_dff.skjd</span></p>",
71
75
  RedCloth.new('@[ruby]_dff.skjd@').to_html
72
- assert_equal <<-BLOCKCODE.chomp,
76
+ assert_warning 'CodeRay::Scanners could not load plugin :project; falling back to :text' do
77
+ assert_equal <<-BLOCKCODE.chomp,
73
78
  <pre><code>[project]_dff.skjd</code></pre>
74
- BLOCKCODE
75
- RedCloth.new('bc. [project]_dff.skjd').to_html
79
+ BLOCKCODE
80
+ RedCloth.new('bc. [project]_dff.skjd').to_html
81
+ end
76
82
  end
77
83
 
78
84
  end if defined? RedCloth
@@ -1,5 +1,6 @@
1
1
  require 'test/unit'
2
- $:.unshift 'lib'
2
+
3
+ $:.unshift File.expand_path('../../../lib', __FILE__)
3
4
  require 'coderay'
4
5
 
5
6
  mydir = File.dirname(__FILE__)
metadata CHANGED
@@ -1,8 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coderay
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 961912872
4
5
  prerelease: 9
5
- version: 1.0.0.800pre
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 0
10
+ - 815
11
+ - pre
12
+ version: 1.0.0.815pre
6
13
  platform: ruby
7
14
  authors:
8
15
  - Kornelius Kalnbach
@@ -10,7 +17,8 @@ autorequire:
10
17
  bindir: bin
11
18
  cert_chain: []
12
19
 
13
- date: 2011-07-09 00:00:00 Z
20
+ date: 2011-08-19 00:00:00 +02:00
21
+ default_executable:
14
22
  dependencies: []
15
23
 
16
24
  description: Fast and easy syntax highlighting for selected languages, written in Ruby. Comes with RedCloth integration and LOC counter.
@@ -21,7 +29,7 @@ executables:
21
29
  extensions: []
22
30
 
23
31
  extra_rdoc_files:
24
- - README.rdoc
32
+ - README_INDEX.rdoc
25
33
  files:
26
34
  - lib/coderay/duo.rb
27
35
  - lib/coderay/encoder.rb
@@ -60,21 +68,19 @@ files:
60
68
  - lib/coderay/scanners/debug.rb
61
69
  - lib/coderay/scanners/delphi.rb
62
70
  - lib/coderay/scanners/diff.rb
71
+ - lib/coderay/scanners/erb.rb
63
72
  - lib/coderay/scanners/groovy.rb
64
73
  - lib/coderay/scanners/html.rb
65
74
  - lib/coderay/scanners/java/builtin_types.rb
66
75
  - lib/coderay/scanners/java.rb
67
76
  - lib/coderay/scanners/java_script.rb
68
77
  - lib/coderay/scanners/json.rb
69
- - lib/coderay/scanners/nitro_xhtml.rb
70
78
  - lib/coderay/scanners/php.rb
71
79
  - lib/coderay/scanners/python.rb
72
80
  - lib/coderay/scanners/raydebug.rb
73
- - lib/coderay/scanners/rhtml.rb
74
81
  - lib/coderay/scanners/ruby/patterns.rb
75
82
  - lib/coderay/scanners/ruby/string_state.rb
76
83
  - lib/coderay/scanners/ruby.rb
77
- - lib/coderay/scanners/scheme.rb
78
84
  - lib/coderay/scanners/sql.rb
79
85
  - lib/coderay/scanners/text.rb
80
86
  - lib/coderay/scanners/xml.rb
@@ -89,20 +95,21 @@ files:
89
95
  - lib/coderay/version.rb
90
96
  - lib/coderay.rb
91
97
  - Rakefile
92
- - README.rdoc
98
+ - README_INDEX.rdoc
93
99
  - LICENSE
94
100
  - test/functional/basic.rb
95
101
  - test/functional/examples.rb
96
102
  - test/functional/for_redcloth.rb
97
103
  - test/functional/suite.rb
98
104
  - bin/coderay
105
+ has_rdoc: true
99
106
  homepage: http://coderay.rubychan.de
100
107
  licenses: []
101
108
 
102
109
  post_install_message:
103
110
  rdoc_options:
104
111
  - -SNw2
105
- - -mREADME.rdoc
112
+ - -mREADME_INDEX.rdoc
106
113
  - -t CodeRay Documentation
107
114
  require_paths:
108
115
  - lib
@@ -111,17 +118,27 @@ required_ruby_version: !ruby/object:Gem::Requirement
111
118
  requirements:
112
119
  - - ">="
113
120
  - !ruby/object:Gem::Version
121
+ hash: 57
122
+ segments:
123
+ - 1
124
+ - 8
125
+ - 7
114
126
  version: 1.8.7
115
127
  required_rubygems_version: !ruby/object:Gem::Requirement
116
128
  none: false
117
129
  requirements:
118
130
  - - ">"
119
131
  - !ruby/object:Gem::Version
132
+ hash: 25
133
+ segments:
134
+ - 1
135
+ - 3
136
+ - 1
120
137
  version: 1.3.1
121
138
  requirements: []
122
139
 
123
140
  rubyforge_project: coderay
124
- rubygems_version: 1.8.5
141
+ rubygems_version: 1.6.2
125
142
  signing_key:
126
143
  specification_version: 3
127
144
  summary: Fast syntax highlighting for selected languages.
@@ -1,136 +0,0 @@
1
- module CodeRay
2
- module Scanners
3
-
4
- load :html
5
- load :ruby
6
-
7
- # Nitro XHTML Scanner
8
- #
9
- # Alias: +nitro+
10
- class NitroXHTML < Scanner
11
-
12
- register_for :nitro_xhtml
13
- file_extension :xhtml
14
- title 'Nitro XHTML'
15
-
16
- KINDS_NOT_LOC = HTML::KINDS_NOT_LOC
17
-
18
- NITRO_RUBY_BLOCK = /
19
- <\?r
20
- (?>
21
- [^\?]*
22
- (?> \?(?!>) [^\?]* )*
23
- )
24
- (?: \?> )?
25
- |
26
- <ruby>
27
- (?>
28
- [^<]*
29
- (?> <(?!\/ruby>) [^<]* )*
30
- )
31
- (?: <\/ruby> )?
32
- |
33
- <%
34
- (?>
35
- [^%]*
36
- (?> %(?!>) [^%]* )*
37
- )
38
- (?: %> )?
39
- /mx # :nodoc:
40
-
41
- NITRO_VALUE_BLOCK = /
42
- \#
43
- (?:
44
- \{
45
- [^{}]*
46
- (?>
47
- \{ [^}]* \}
48
- (?> [^{}]* )
49
- )*
50
- \}?
51
- | \| [^|]* \|?
52
- | \( [^)]* \)?
53
- | \[ [^\]]* \]?
54
- | \\ [^\\]* \\?
55
- )
56
- /x # :nodoc:
57
-
58
- NITRO_ENTITY = /
59
- % (?: \#\d+ | \w+ ) ;
60
- / # :nodoc:
61
-
62
- START_OF_RUBY = /
63
- (?=[<\#%])
64
- < (?: \?r | % | ruby> )
65
- | \# [{(|]
66
- | % (?: \#\d+ | \w+ ) ;
67
- /x # :nodoc:
68
-
69
- CLOSING_PAREN = Hash.new { |h, p| h[p] = p } # :nodoc:
70
- CLOSING_PAREN.update( {
71
- '(' => ')',
72
- '[' => ']',
73
- '{' => '}',
74
- } )
75
-
76
- protected
77
-
78
- def setup
79
- @ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true
80
- @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true
81
- end
82
-
83
- def reset_instance
84
- super
85
- @html_scanner.reset
86
- end
87
-
88
- def scan_tokens encoder, options
89
-
90
- until eos?
91
-
92
- if (match = scan_until(/(?=#{START_OF_RUBY})/o) || scan_rest) and not match.empty?
93
- @html_scanner.tokenize match
94
-
95
- elsif match = scan(/#{NITRO_VALUE_BLOCK}/o)
96
- start_tag = match[0,2]
97
- delimiter = CLOSING_PAREN[start_tag[1,1]]
98
- end_tag = match[-1,1] == delimiter ? delimiter : ''
99
- encoder.begin_group :inline
100
- encoder.text_token start_tag, :inline_delimiter
101
- code = match[start_tag.size .. -1 - end_tag.size]
102
- @ruby_scanner.tokenize code, :tokens => encoder
103
- encoder.text_token end_tag, :inline_delimiter unless end_tag.empty?
104
- encoder.end_group :inline
105
-
106
- elsif match = scan(/#{NITRO_RUBY_BLOCK}/o)
107
- start_tag = '<?r'
108
- end_tag = match[-2,2] == '?>' ? '?>' : ''
109
- encoder.begin_group :inline
110
- encoder.text_token start_tag, :inline_delimiter
111
- code = match[start_tag.size .. -(end_tag.size)-1]
112
- @ruby_scanner.tokenize code, :tokens => encoder
113
- encoder.text_token end_tag, :inline_delimiter unless end_tag.empty?
114
- encoder.end_group :inline
115
-
116
- elsif entity = scan(/#{NITRO_ENTITY}/o)
117
- encoder.text_token entity, :entity
118
-
119
- elsif scan(/%/)
120
- encoder.text_token matched, :error
121
-
122
- else
123
- raise_inspect 'else-case reached!', encoder
124
-
125
- end
126
-
127
- end
128
-
129
- encoder
130
-
131
- end
132
-
133
- end
134
-
135
- end
136
- end
@@ -1,136 +0,0 @@
1
- module CodeRay
2
- module Scanners
3
-
4
- # Scheme scanner for CodeRay (by closure).
5
- #
6
- # Thanks to murphy for putting CodeRay into public.
7
- class Scheme < Scanner
8
-
9
- # TODO: function defs
10
- # TODO: built-in functions
11
-
12
- register_for :scheme
13
- file_extension 'scm'
14
-
15
- CORE_FORMS = %w[
16
- lambda let let* letrec syntax-case define-syntax let-syntax
17
- letrec-syntax begin define quote if or and cond case do delay
18
- quasiquote set! cons force call-with-current-continuation call/cc
19
- ] # :nodoc:
20
-
21
- IDENT_KIND = CaseIgnoringWordList.new(:ident).
22
- add(CORE_FORMS, :keyword) # :nodoc:
23
-
24
- #IDENTIFIER_INITIAL = /[a-z!@\$%&\*\/\:<=>\?~_\^]/i
25
- #IDENTIFIER_SUBSEQUENT = /#{IDENTIFIER_INITIAL}|\d|\.|\+|-/
26
- #IDENTIFIER = /#{IDENTIFIER_INITIAL}#{IDENTIFIER_SUBSEQUENT}*|\+|-|\.{3}/
27
- IDENTIFIER = /[a-zA-Z!@$%&*\/:<=>?~_^][\w!@$%&*\/:<=>?~^.+\-]*|[+-]|\.\.\./ # :nodoc:
28
- DIGIT = /\d/ # :nodoc:
29
- DIGIT10 = /\d/ # :nodoc:
30
- DIGIT16 = /[0-9a-f]/i # :nodoc:
31
- DIGIT8 = /[0-7]/ # :nodoc:
32
- DIGIT2 = /[01]/ # :nodoc:
33
- RADIX16 = /\#x/i # :nodoc:
34
- RADIX8 = /\#o/i # :nodoc:
35
- RADIX2 = /\#b/i # :nodoc:
36
- RADIX10 = /\#d/i # :nodoc:
37
- EXACTNESS = /#i|#e/i # :nodoc:
38
- SIGN = /[\+-]?/ # :nodoc:
39
- EXP_MARK = /[esfdl]/i # :nodoc:
40
- EXP = /#{EXP_MARK}#{SIGN}#{DIGIT}+/ # :nodoc:
41
- SUFFIX = /#{EXP}?/ # :nodoc:
42
- PREFIX10 = /#{RADIX10}?#{EXACTNESS}?|#{EXACTNESS}?#{RADIX10}?/ # :nodoc:
43
- PREFIX16 = /#{RADIX16}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX16}/ # :nodoc:
44
- PREFIX8 = /#{RADIX8}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX8}/ # :nodoc:
45
- PREFIX2 = /#{RADIX2}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX2}/ # :nodoc:
46
- UINT10 = /#{DIGIT10}+#*/ # :nodoc:
47
- UINT16 = /#{DIGIT16}+#*/ # :nodoc:
48
- UINT8 = /#{DIGIT8}+#*/ # :nodoc:
49
- UINT2 = /#{DIGIT2}+#*/ # :nodoc:
50
- DECIMAL = /#{DIGIT10}+#+\.#*#{SUFFIX}|#{DIGIT10}+\.#{DIGIT10}*#*#{SUFFIX}|\.#{DIGIT10}+#*#{SUFFIX}|#{UINT10}#{EXP}/ # :nodoc:
51
- UREAL10 = /#{UINT10}\/#{UINT10}|#{DECIMAL}|#{UINT10}/ # :nodoc:
52
- UREAL16 = /#{UINT16}\/#{UINT16}|#{UINT16}/ # :nodoc:
53
- UREAL8 = /#{UINT8}\/#{UINT8}|#{UINT8}/ # :nodoc:
54
- UREAL2 = /#{UINT2}\/#{UINT2}|#{UINT2}/ # :nodoc:
55
- REAL10 = /#{SIGN}#{UREAL10}/ # :nodoc:
56
- REAL16 = /#{SIGN}#{UREAL16}/ # :nodoc:
57
- REAL8 = /#{SIGN}#{UREAL8}/ # :nodoc:
58
- REAL2 = /#{SIGN}#{UREAL2}/ # :nodoc:
59
- IMAG10 = /i|#{UREAL10}i/ # :nodoc:
60
- IMAG16 = /i|#{UREAL16}i/ # :nodoc:
61
- IMAG8 = /i|#{UREAL8}i/ # :nodoc:
62
- IMAG2 = /i|#{UREAL2}i/ # :nodoc:
63
- COMPLEX10 = /#{REAL10}@#{REAL10}|#{REAL10}\+#{IMAG10}|#{REAL10}-#{IMAG10}|\+#{IMAG10}|-#{IMAG10}|#{REAL10}/ # :nodoc:
64
- COMPLEX16 = /#{REAL16}@#{REAL16}|#{REAL16}\+#{IMAG16}|#{REAL16}-#{IMAG16}|\+#{IMAG16}|-#{IMAG16}|#{REAL16}/ # :nodoc:
65
- COMPLEX8 = /#{REAL8}@#{REAL8}|#{REAL8}\+#{IMAG8}|#{REAL8}-#{IMAG8}|\+#{IMAG8}|-#{IMAG8}|#{REAL8}/ # :nodoc:
66
- COMPLEX2 = /#{REAL2}@#{REAL2}|#{REAL2}\+#{IMAG2}|#{REAL2}-#{IMAG2}|\+#{IMAG2}|-#{IMAG2}|#{REAL2}/ # :nodoc:
67
- NUM10 = /#{PREFIX10}?#{COMPLEX10}/ # :nodoc:
68
- NUM16 = /#{PREFIX16}#{COMPLEX16}/ # :nodoc:
69
- NUM8 = /#{PREFIX8}#{COMPLEX8}/ # :nodoc:
70
- NUM2 = /#{PREFIX2}#{COMPLEX2}/ # :nodoc:
71
- NUM = /#{NUM10}|#{NUM16}|#{NUM8}|#{NUM2}/ # :nodoc:
72
-
73
- protected
74
-
75
- def scan_tokens encoder, options
76
-
77
- state = :initial
78
- ident_kind = IDENT_KIND
79
-
80
- until eos?
81
-
82
- case state
83
- when :initial
84
- if match = scan(/ \s+ | \\\n /x)
85
- encoder.text_token match, :space
86
- elsif match = scan(/['\(\[\)\]]|#\(/)
87
- encoder.text_token match, :operator
88
- elsif match = scan(/;.*/)
89
- encoder.text_token match, :comment
90
- elsif match = scan(/#\\(?:newline|space|.?)/)
91
- encoder.text_token match, :char
92
- elsif match = scan(/#[ft]/)
93
- encoder.text_token match, :predefined_constant
94
- elsif match = scan(/#{IDENTIFIER}/o)
95
- encoder.text_token match, ident_kind[matched]
96
- elsif match = scan(/\./)
97
- encoder.text_token match, :operator
98
- elsif match = scan(/"/)
99
- encoder.begin_group :string
100
- encoder.text_token match, :delimiter
101
- state = :string
102
- elsif match = scan(/#{NUM}/o) and not matched.empty?
103
- encoder.text_token match, :integer
104
- else
105
- encoder.text_token getch, :error
106
- end
107
-
108
- when :string
109
- if match = scan(/[^"\\]+|\\.?/)
110
- encoder.text_token match, :content
111
- elsif match = scan(/"/)
112
- encoder.text_token match, :delimiter
113
- encoder.end_group :string
114
- state = :initial
115
- else
116
- raise_inspect "else case \" reached; %p not handled." % peek(1),
117
- encoder, state
118
- end
119
-
120
- else
121
- raise 'else case reached'
122
-
123
- end
124
-
125
- end
126
-
127
- if state == :string
128
- encoder.end_group state
129
- end
130
-
131
- encoder
132
-
133
- end
134
- end
135
- end
136
- end