email_address_validator 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +1,19 @@
1
1
  class EmailAddressValidator::RFC822Parser
2
- # STANDALONE START
2
+ # :stopdoc:
3
+
4
+ # This is distinct from setup_parser so that a standalone parser
5
+ # can redefine #initialize and still have access to the proper
6
+ # parser setup code.
7
+ def initialize(str, debug=false)
8
+ setup_parser(str, debug)
9
+ end
10
+
11
+
12
+
13
+ # Prepares for parsing +str+. If you define a custom initialize you must
14
+ # call this method before #parse
3
15
  def setup_parser(str, debug=false)
4
- @string = str
5
- @pos = 0
16
+ set_string str, 0
6
17
  @memoizations = Hash.new { |h,k| h[k] = {} }
7
18
  @result = nil
8
19
  @failed_rule = nil
@@ -11,22 +22,10 @@ class EmailAddressValidator::RFC822Parser
11
22
  setup_foreign_grammar
12
23
  end
13
24
 
14
- def setup_foreign_grammar
15
- end
16
-
17
- # This is distinct from setup_parser so that a standalone parser
18
- # can redefine #initialize and still have access to the proper
19
- # parser setup code.
20
- #
21
- def initialize(str, debug=false)
22
- setup_parser(str, debug)
23
- end
24
-
25
25
  attr_reader :string
26
- attr_reader :result, :failing_rule_offset
27
- attr_accessor :pos
26
+ attr_reader :failing_rule_offset
27
+ attr_accessor :result, :pos
28
28
 
29
- # STANDALONE START
30
29
  def current_column(target=pos)
31
30
  if c = string.rindex("\n", target-1)
32
31
  return target - c - 1
@@ -54,12 +53,19 @@ class EmailAddressValidator::RFC822Parser
54
53
  lines
55
54
  end
56
55
 
57
- #
56
+
58
57
 
59
58
  def get_text(start)
60
59
  @string[start..@pos-1]
61
60
  end
62
61
 
62
+ # Sets the string and current parsing position for the parser.
63
+ def set_string string, pos
64
+ @string = string
65
+ @string_size = string ? string.size : 0
66
+ @pos = pos
67
+ end
68
+
63
69
  def show_pos
64
70
  width = 10
65
71
  if @pos < width
@@ -166,19 +172,19 @@ class EmailAddressValidator::RFC822Parser
166
172
  return nil
167
173
  end
168
174
 
169
- if "".respond_to? :getbyte
175
+ if "".respond_to? :ord
170
176
  def get_byte
171
- if @pos >= @string.size
177
+ if @pos >= @string_size
172
178
  return nil
173
179
  end
174
180
 
175
- s = @string.getbyte @pos
181
+ s = @string[@pos].ord
176
182
  @pos += 1
177
183
  s
178
184
  end
179
185
  else
180
186
  def get_byte
181
- if @pos >= @string.size
187
+ if @pos >= @string_size
182
188
  return nil
183
189
  end
184
190
 
@@ -189,41 +195,37 @@ class EmailAddressValidator::RFC822Parser
189
195
  end
190
196
 
191
197
  def parse(rule=nil)
198
+ # We invoke the rules indirectly via apply
199
+ # instead of by just calling them as methods because
200
+ # if the rules use left recursion, apply needs to
201
+ # manage that.
202
+
192
203
  if !rule
193
- _root ? true : false
204
+ apply(:_root)
194
205
  else
195
- # This is not shared with code_generator.rb so this can be standalone
196
206
  method = rule.gsub("-","_hyphen_")
197
- __send__("_#{method}") ? true : false
198
- end
199
- end
200
-
201
- class LeftRecursive
202
- def initialize(detected=false)
203
- @detected = detected
207
+ apply :"_#{method}"
204
208
  end
205
-
206
- attr_accessor :detected
207
209
  end
208
210
 
209
211
  class MemoEntry
210
212
  def initialize(ans, pos)
211
213
  @ans = ans
212
214
  @pos = pos
213
- @uses = 1
214
215
  @result = nil
216
+ @set = false
217
+ @left_rec = false
215
218
  end
216
219
 
217
- attr_reader :ans, :pos, :uses, :result
218
-
219
- def inc!
220
- @uses += 1
221
- end
220
+ attr_reader :ans, :pos, :result, :set
221
+ attr_accessor :left_rec
222
222
 
223
223
  def move!(ans, pos, result)
224
224
  @ans = ans
225
225
  @pos = pos
226
226
  @result = result
227
+ @set = true
228
+ @left_rec = false
227
229
  end
228
230
  end
229
231
 
@@ -231,30 +233,61 @@ class EmailAddressValidator::RFC822Parser
231
233
  old_pos = @pos
232
234
  old_string = @string
233
235
 
234
- @pos = other.pos
235
- @string = other.string
236
+ set_string other.string, other.pos
236
237
 
237
238
  begin
238
239
  if val = __send__(rule, *args)
239
240
  other.pos = @pos
241
+ other.result = @result
240
242
  else
241
243
  other.set_failed_rule "#{self.class}##{rule}"
242
244
  end
243
245
  val
244
246
  ensure
245
- @pos = old_pos
246
- @string = old_string
247
+ set_string old_string, old_pos
248
+ end
249
+ end
250
+
251
+ def apply_with_args(rule, *args)
252
+ memo_key = [rule, args]
253
+ if m = @memoizations[memo_key][@pos]
254
+ @pos = m.pos
255
+ if !m.set
256
+ m.left_rec = true
257
+ return nil
258
+ end
259
+
260
+ @result = m.result
261
+
262
+ return m.ans
263
+ else
264
+ m = MemoEntry.new(nil, @pos)
265
+ @memoizations[memo_key][@pos] = m
266
+ start_pos = @pos
267
+
268
+ ans = __send__ rule, *args
269
+
270
+ lr = m.left_rec
271
+
272
+ m.move! ans, @pos, @result
273
+
274
+ # Don't bother trying to grow the left recursion
275
+ # if it's failing straight away (thus there is no seed)
276
+ if ans and lr
277
+ return grow_lr(rule, args, start_pos, m)
278
+ else
279
+ return ans
280
+ end
281
+
282
+ return ans
247
283
  end
248
284
  end
249
285
 
250
286
  def apply(rule)
251
287
  if m = @memoizations[rule][@pos]
252
- m.inc!
253
-
254
- prev = @pos
255
288
  @pos = m.pos
256
- if m.ans.kind_of? LeftRecursive
257
- m.ans.detected = true
289
+ if !m.set
290
+ m.left_rec = true
258
291
  return nil
259
292
  end
260
293
 
@@ -262,19 +295,20 @@ class EmailAddressValidator::RFC822Parser
262
295
 
263
296
  return m.ans
264
297
  else
265
- lr = LeftRecursive.new(false)
266
- m = MemoEntry.new(lr, @pos)
298
+ m = MemoEntry.new(nil, @pos)
267
299
  @memoizations[rule][@pos] = m
268
300
  start_pos = @pos
269
301
 
270
302
  ans = __send__ rule
271
303
 
304
+ lr = m.left_rec
305
+
272
306
  m.move! ans, @pos, @result
273
307
 
274
308
  # Don't bother trying to grow the left recursion
275
309
  # if it's failing straight away (thus there is no seed)
276
- if ans and lr.detected
277
- return grow_lr(rule, start_pos, m)
310
+ if ans and lr
311
+ return grow_lr(rule, nil, start_pos, m)
278
312
  else
279
313
  return ans
280
314
  end
@@ -283,12 +317,16 @@ class EmailAddressValidator::RFC822Parser
283
317
  end
284
318
  end
285
319
 
286
- def grow_lr(rule, start_pos, m)
320
+ def grow_lr(rule, args, start_pos, m)
287
321
  while true
288
322
  @pos = start_pos
289
323
  @result = m.result
290
324
 
291
- ans = __send__ rule
325
+ if args
326
+ ans = __send__ rule, *args
327
+ else
328
+ ans = __send__ rule
329
+ end
292
330
  return nil unless ans
293
331
 
294
332
  break if @pos <= m.pos
@@ -314,10 +352,12 @@ class EmailAddressValidator::RFC822Parser
314
352
  RuleInfo.new(name, rendered)
315
353
  end
316
354
 
317
- #
355
+
356
+ # :startdoc:
318
357
 
319
358
  attr_accessor :validate_domain
320
359
 
360
+ # :stopdoc:
321
361
  def setup_foreign_grammar; end
322
362
 
323
363
  # HTAB = /\x09/
@@ -351,8 +391,8 @@ class EmailAddressValidator::RFC822Parser
351
391
  # - = SPACE*
352
392
  def __hyphen_
353
393
  while true
354
- _tmp = apply(:_SPACE)
355
- break unless _tmp
394
+ _tmp = apply(:_SPACE)
395
+ break unless _tmp
356
396
  end
357
397
  _tmp = true
358
398
  set_failed_rule :__hyphen_ unless _tmp
@@ -371,13 +411,13 @@ class EmailAddressValidator::RFC822Parser
371
411
 
372
412
  _save = self.pos
373
413
  while true # choice
374
- _tmp = apply(:_SPACE)
375
- break if _tmp
376
- self.pos = _save
377
- _tmp = apply(:_HTAB)
378
- break if _tmp
379
- self.pos = _save
380
- break
414
+ _tmp = apply(:_SPACE)
415
+ break if _tmp
416
+ self.pos = _save
417
+ _tmp = apply(:_HTAB)
418
+ break if _tmp
419
+ self.pos = _save
420
+ break
381
421
  end # end choice
382
422
 
383
423
  set_failed_rule :_LWSP_char unless _tmp
@@ -410,16 +450,16 @@ class EmailAddressValidator::RFC822Parser
410
450
 
411
451
  _save = self.pos
412
452
  while true # sequence
413
- _tmp = apply(:_CR)
414
- unless _tmp
415
- self.pos = _save
453
+ _tmp = apply(:_CR)
454
+ unless _tmp
455
+ self.pos = _save
456
+ break
457
+ end
458
+ _tmp = apply(:_LF)
459
+ unless _tmp
460
+ self.pos = _save
461
+ end
416
462
  break
417
- end
418
- _tmp = apply(:_LF)
419
- unless _tmp
420
- self.pos = _save
421
- end
422
- break
423
463
  end # end sequence
424
464
 
425
465
  set_failed_rule :_CRLF unless _tmp
@@ -432,44 +472,44 @@ class EmailAddressValidator::RFC822Parser
432
472
 
433
473
  _save1 = self.pos
434
474
  while true # sequence
435
- _save2 = self.pos
436
- _tmp = apply(:_CRLF)
437
- unless _tmp
438
- _tmp = true
439
- self.pos = _save2
440
- end
441
- unless _tmp
442
- self.pos = _save1
475
+ _save2 = self.pos
476
+ _tmp = apply(:_CRLF)
477
+ unless _tmp
478
+ _tmp = true
479
+ self.pos = _save2
480
+ end
481
+ unless _tmp
482
+ self.pos = _save1
483
+ break
484
+ end
485
+ _tmp = apply(:_LWSP_char)
486
+ unless _tmp
487
+ self.pos = _save1
488
+ end
443
489
  break
444
- end
445
- _tmp = apply(:_LWSP_char)
446
- unless _tmp
447
- self.pos = _save1
448
- end
449
- break
450
490
  end # end sequence
451
491
 
452
492
  if _tmp
453
493
  while true
454
-
455
- _save3 = self.pos
456
- while true # sequence
457
- _save4 = self.pos
458
- _tmp = apply(:_CRLF)
459
- unless _tmp
460
- _tmp = true
461
- self.pos = _save4
462
- end
463
- unless _tmp
464
- self.pos = _save3
465
- break
466
- end
467
- _tmp = apply(:_LWSP_char)
468
- unless _tmp
469
- self.pos = _save3
470
- end
471
- break
472
- end # end sequence
494
+
495
+ _save3 = self.pos
496
+ while true # sequence
497
+ _save4 = self.pos
498
+ _tmp = apply(:_CRLF)
499
+ unless _tmp
500
+ _tmp = true
501
+ self.pos = _save4
502
+ end
503
+ unless _tmp
504
+ self.pos = _save3
505
+ break
506
+ end
507
+ _tmp = apply(:_LWSP_char)
508
+ unless _tmp
509
+ self.pos = _save3
510
+ end
511
+ break
512
+ end # end sequence
473
513
 
474
514
  break unless _tmp
475
515
  end
@@ -481,62 +521,61 @@ class EmailAddressValidator::RFC822Parser
481
521
  return _tmp
482
522
  end
483
523
 
484
- # atom = /[^\]\x00-\x20 \x7F\x80-\xFF()<>@,;:\\".\[]+/
524
+ # atom = /[^\]\x00-\x20 \x7F\x80-\xFF()<>@,;:\\".\[]+/n
485
525
  def _atom
486
- pattern = /\A(?-mix:[^\]\x00-\x20 \x7F\x80-\xFF()<>@,;:\\".\[]+)/n
487
- _tmp = scan(pattern)
526
+ _tmp = scan(/\A(?-mix:[^\]\x00-\x20 \x7F\x80-\xFF()<>@,;:\\".\[]+)/n)
488
527
  set_failed_rule :_atom unless _tmp
489
528
  return _tmp
490
529
  end
491
530
 
492
- # ctext = (/[^)\\\x0D\x80-\xFF(]+/ | linear_white_space)
531
+ # ctext = (/[^)\\\x0D\x80-\xFF(]+/n | linear_white_space)
493
532
  def _ctext
494
533
 
495
534
  _save = self.pos
496
535
  while true # choice
497
- _tmp = scan(/\A(?-mix:[^)\\\x0D\x80-\xFF(]+)/n)
498
- break if _tmp
499
- self.pos = _save
500
- _tmp = apply(:_linear_white_space)
501
- break if _tmp
502
- self.pos = _save
503
- break
536
+ _tmp = scan(/\A(?-mix:[^)\\\x0D\x80-\xFF(]+)/n)
537
+ break if _tmp
538
+ self.pos = _save
539
+ _tmp = apply(:_linear_white_space)
540
+ break if _tmp
541
+ self.pos = _save
542
+ break
504
543
  end # end choice
505
544
 
506
545
  set_failed_rule :_ctext unless _tmp
507
546
  return _tmp
508
547
  end
509
548
 
510
- # dtext = (/[^\]\\\x0D\x80-\xFF\[]+/ | linear_white_space)
549
+ # dtext = (/[^\]\\\x0D\x80-\xFF\[]+/n | linear_white_space)
511
550
  def _dtext
512
551
 
513
552
  _save = self.pos
514
553
  while true # choice
515
- _tmp = scan(/\A(?-mix:[^\]\\\x0D\x80-\xFF\[]+)/n)
516
- break if _tmp
517
- self.pos = _save
518
- _tmp = apply(:_linear_white_space)
519
- break if _tmp
520
- self.pos = _save
521
- break
554
+ _tmp = scan(/\A(?-mix:[^\]\\\x0D\x80-\xFF\[]+)/n)
555
+ break if _tmp
556
+ self.pos = _save
557
+ _tmp = apply(:_linear_white_space)
558
+ break if _tmp
559
+ self.pos = _save
560
+ break
522
561
  end # end choice
523
562
 
524
563
  set_failed_rule :_dtext unless _tmp
525
564
  return _tmp
526
565
  end
527
566
 
528
- # qtext = (/[^"\\\x0D\x80-\xFF]+/ | linear_white_space)
567
+ # qtext = (/[^"\\\x0D\x80-\xFF]+/n | linear_white_space)
529
568
  def _qtext
530
569
 
531
570
  _save = self.pos
532
571
  while true # choice
533
- _tmp = scan(/\A(?-mix:[^"\\\x0D\x80-\xFF]+)/n)
534
- break if _tmp
535
- self.pos = _save
536
- _tmp = apply(:_linear_white_space)
537
- break if _tmp
538
- self.pos = _save
539
- break
572
+ _tmp = scan(/\A(?-mix:[^"\\\x0D\x80-\xFF]+)/n)
573
+ break if _tmp
574
+ self.pos = _save
575
+ _tmp = apply(:_linear_white_space)
576
+ break if _tmp
577
+ self.pos = _save
578
+ break
540
579
  end # end choice
541
580
 
542
581
  set_failed_rule :_qtext unless _tmp
@@ -548,16 +587,16 @@ class EmailAddressValidator::RFC822Parser
548
587
 
549
588
  _save = self.pos
550
589
  while true # sequence
551
- _tmp = match_string("\\")
552
- unless _tmp
553
- self.pos = _save
590
+ _tmp = match_string("\\")
591
+ unless _tmp
592
+ self.pos = _save
593
+ break
594
+ end
595
+ _tmp = apply(:_CHAR)
596
+ unless _tmp
597
+ self.pos = _save
598
+ end
554
599
  break
555
- end
556
- _tmp = apply(:_CHAR)
557
- unless _tmp
558
- self.pos = _save
559
- end
560
- break
561
600
  end # end sequence
562
601
 
563
602
  set_failed_rule :_quoted_pair unless _tmp
@@ -569,36 +608,36 @@ class EmailAddressValidator::RFC822Parser
569
608
 
570
609
  _save = self.pos
571
610
  while true # sequence
572
- _tmp = match_string("\"")
573
- unless _tmp
574
- self.pos = _save
575
- break
576
- end
577
- while true
611
+ _tmp = match_string("\"")
612
+ unless _tmp
613
+ self.pos = _save
614
+ break
615
+ end
616
+ while true
578
617
 
579
- _save2 = self.pos
580
- while true # choice
581
- _tmp = apply(:_qtext)
582
- break if _tmp
583
- self.pos = _save2
584
- _tmp = apply(:_quoted_pair)
585
- break if _tmp
586
- self.pos = _save2
587
- break
588
- end # end choice
618
+ _save2 = self.pos
619
+ while true # choice
620
+ _tmp = apply(:_qtext)
621
+ break if _tmp
622
+ self.pos = _save2
623
+ _tmp = apply(:_quoted_pair)
624
+ break if _tmp
625
+ self.pos = _save2
626
+ break
627
+ end # end choice
589
628
 
590
- break unless _tmp
591
- end
592
- _tmp = true
593
- unless _tmp
594
- self.pos = _save
629
+ break unless _tmp
630
+ end
631
+ _tmp = true
632
+ unless _tmp
633
+ self.pos = _save
634
+ break
635
+ end
636
+ _tmp = match_string("\"")
637
+ unless _tmp
638
+ self.pos = _save
639
+ end
595
640
  break
596
- end
597
- _tmp = match_string("\"")
598
- unless _tmp
599
- self.pos = _save
600
- end
601
- break
602
641
  end # end sequence
603
642
 
604
643
  set_failed_rule :_quoted_string unless _tmp
@@ -610,36 +649,36 @@ class EmailAddressValidator::RFC822Parser
610
649
 
611
650
  _save = self.pos
612
651
  while true # sequence
613
- _tmp = match_string("[")
614
- unless _tmp
615
- self.pos = _save
616
- break
617
- end
618
- while true
652
+ _tmp = match_string("[")
653
+ unless _tmp
654
+ self.pos = _save
655
+ break
656
+ end
657
+ while true
619
658
 
620
- _save2 = self.pos
621
- while true # choice
622
- _tmp = apply(:_dtext)
623
- break if _tmp
624
- self.pos = _save2
625
- _tmp = apply(:_quoted_pair)
626
- break if _tmp
627
- self.pos = _save2
628
- break
629
- end # end choice
659
+ _save2 = self.pos
660
+ while true # choice
661
+ _tmp = apply(:_dtext)
662
+ break if _tmp
663
+ self.pos = _save2
664
+ _tmp = apply(:_quoted_pair)
665
+ break if _tmp
666
+ self.pos = _save2
667
+ break
668
+ end # end choice
630
669
 
631
- break unless _tmp
632
- end
633
- _tmp = true
634
- unless _tmp
635
- self.pos = _save
670
+ break unless _tmp
671
+ end
672
+ _tmp = true
673
+ unless _tmp
674
+ self.pos = _save
675
+ break
676
+ end
677
+ _tmp = match_string("]")
678
+ unless _tmp
679
+ self.pos = _save
680
+ end
636
681
  break
637
- end
638
- _tmp = match_string("]")
639
- unless _tmp
640
- self.pos = _save
641
- end
642
- break
643
682
  end # end sequence
644
683
 
645
684
  set_failed_rule :_domain_literal unless _tmp
@@ -651,39 +690,39 @@ class EmailAddressValidator::RFC822Parser
651
690
 
652
691
  _save = self.pos
653
692
  while true # sequence
654
- _tmp = match_string("(")
655
- unless _tmp
656
- self.pos = _save
657
- break
658
- end
659
- while true
693
+ _tmp = match_string("(")
694
+ unless _tmp
695
+ self.pos = _save
696
+ break
697
+ end
698
+ while true
660
699
 
661
- _save2 = self.pos
662
- while true # choice
663
- _tmp = apply(:_ctext)
664
- break if _tmp
665
- self.pos = _save2
666
- _tmp = apply(:_quoted_pair)
667
- break if _tmp
668
- self.pos = _save2
669
- _tmp = apply(:_comment)
670
- break if _tmp
671
- self.pos = _save2
672
- break
673
- end # end choice
700
+ _save2 = self.pos
701
+ while true # choice
702
+ _tmp = apply(:_ctext)
703
+ break if _tmp
704
+ self.pos = _save2
705
+ _tmp = apply(:_quoted_pair)
706
+ break if _tmp
707
+ self.pos = _save2
708
+ _tmp = apply(:_comment)
709
+ break if _tmp
710
+ self.pos = _save2
711
+ break
712
+ end # end choice
674
713
 
675
- break unless _tmp
676
- end
677
- _tmp = true
678
- unless _tmp
679
- self.pos = _save
714
+ break unless _tmp
715
+ end
716
+ _tmp = true
717
+ unless _tmp
718
+ self.pos = _save
719
+ break
720
+ end
721
+ _tmp = match_string(")")
722
+ unless _tmp
723
+ self.pos = _save
724
+ end
680
725
  break
681
- end
682
- _tmp = match_string(")")
683
- unless _tmp
684
- self.pos = _save
685
- end
686
- break
687
726
  end # end sequence
688
727
 
689
728
  set_failed_rule :_comment unless _tmp
@@ -693,8 +732,8 @@ class EmailAddressValidator::RFC822Parser
693
732
  # ocms = comment*
694
733
  def _ocms
695
734
  while true
696
- _tmp = apply(:_comment)
697
- break unless _tmp
735
+ _tmp = apply(:_comment)
736
+ break unless _tmp
698
737
  end
699
738
  _tmp = true
700
739
  set_failed_rule :_ocms unless _tmp
@@ -706,13 +745,13 @@ class EmailAddressValidator::RFC822Parser
706
745
 
707
746
  _save = self.pos
708
747
  while true # choice
709
- _tmp = apply(:_atom)
710
- break if _tmp
711
- self.pos = _save
712
- _tmp = apply(:_quoted_string)
713
- break if _tmp
714
- self.pos = _save
715
- break
748
+ _tmp = apply(:_atom)
749
+ break if _tmp
750
+ self.pos = _save
751
+ _tmp = apply(:_quoted_string)
752
+ break if _tmp
753
+ self.pos = _save
754
+ break
716
755
  end # end choice
717
756
 
718
757
  set_failed_rule :_word unless _tmp
@@ -725,34 +764,34 @@ class EmailAddressValidator::RFC822Parser
725
764
 
726
765
  _save1 = self.pos
727
766
  while true # sequence
728
- _tmp = apply(:_word)
729
- unless _tmp
730
- self.pos = _save1
767
+ _tmp = apply(:_word)
768
+ unless _tmp
769
+ self.pos = _save1
770
+ break
771
+ end
772
+ _tmp = apply(:__hyphen_)
773
+ unless _tmp
774
+ self.pos = _save1
775
+ end
731
776
  break
732
- end
733
- _tmp = apply(:__hyphen_)
734
- unless _tmp
735
- self.pos = _save1
736
- end
737
- break
738
777
  end # end sequence
739
778
 
740
779
  if _tmp
741
780
  while true
742
-
743
- _save2 = self.pos
744
- while true # sequence
745
- _tmp = apply(:_word)
746
- unless _tmp
747
- self.pos = _save2
748
- break
749
- end
750
- _tmp = apply(:__hyphen_)
751
- unless _tmp
752
- self.pos = _save2
753
- end
754
- break
755
- end # end sequence
781
+
782
+ _save2 = self.pos
783
+ while true # sequence
784
+ _tmp = apply(:_word)
785
+ unless _tmp
786
+ self.pos = _save2
787
+ break
788
+ end
789
+ _tmp = apply(:__hyphen_)
790
+ unless _tmp
791
+ self.pos = _save2
792
+ end
793
+ break
794
+ end # end sequence
756
795
 
757
796
  break unless _tmp
758
797
  end
@@ -769,21 +808,21 @@ class EmailAddressValidator::RFC822Parser
769
808
 
770
809
  _save = self.pos
771
810
  while true # sequence
772
- _tmp = apply(:_ocms)
773
- unless _tmp
774
- self.pos = _save
775
- break
776
- end
777
- _tmp = apply(:_address)
778
- unless _tmp
779
- self.pos = _save
811
+ _tmp = apply(:_ocms)
812
+ unless _tmp
813
+ self.pos = _save
814
+ break
815
+ end
816
+ _tmp = apply(:_address)
817
+ unless _tmp
818
+ self.pos = _save
819
+ break
820
+ end
821
+ _tmp = apply(:_ocms)
822
+ unless _tmp
823
+ self.pos = _save
824
+ end
780
825
  break
781
- end
782
- _tmp = apply(:_ocms)
783
- unless _tmp
784
- self.pos = _save
785
- end
786
- break
787
826
  end # end sequence
788
827
 
789
828
  set_failed_rule :_valid unless _tmp
@@ -795,13 +834,13 @@ class EmailAddressValidator::RFC822Parser
795
834
 
796
835
  _save = self.pos
797
836
  while true # choice
798
- _tmp = apply(:_mailbox)
799
- break if _tmp
800
- self.pos = _save
801
- _tmp = apply(:_group)
802
- break if _tmp
803
- self.pos = _save
804
- break
837
+ _tmp = apply(:_mailbox)
838
+ break if _tmp
839
+ self.pos = _save
840
+ _tmp = apply(:_group)
841
+ break if _tmp
842
+ self.pos = _save
843
+ break
805
844
  end # end choice
806
845
 
807
846
  set_failed_rule :_address unless _tmp
@@ -813,74 +852,74 @@ class EmailAddressValidator::RFC822Parser
813
852
 
814
853
  _save = self.pos
815
854
  while true # sequence
816
- _tmp = apply(:_phrase)
817
- unless _tmp
818
- self.pos = _save
819
- break
820
- end
821
- _tmp = apply(:_ocms)
822
- unless _tmp
823
- self.pos = _save
824
- break
825
- end
826
- _tmp = match_string(":")
827
- unless _tmp
828
- self.pos = _save
829
- break
830
- end
831
- _tmp = apply(:_ocms)
832
- unless _tmp
833
- self.pos = _save
834
- break
835
- end
836
- _tmp = apply(:_mailbox)
837
- unless _tmp
838
- self.pos = _save
839
- break
840
- end
841
- while true
855
+ _tmp = apply(:_phrase)
856
+ unless _tmp
857
+ self.pos = _save
858
+ break
859
+ end
860
+ _tmp = apply(:_ocms)
861
+ unless _tmp
862
+ self.pos = _save
863
+ break
864
+ end
865
+ _tmp = match_string(":")
866
+ unless _tmp
867
+ self.pos = _save
868
+ break
869
+ end
870
+ _tmp = apply(:_ocms)
871
+ unless _tmp
872
+ self.pos = _save
873
+ break
874
+ end
875
+ _tmp = apply(:_mailbox)
876
+ unless _tmp
877
+ self.pos = _save
878
+ break
879
+ end
880
+ while true
842
881
 
843
- _save2 = self.pos
844
- while true # sequence
845
- _tmp = apply(:_ocms)
846
- unless _tmp
847
- self.pos = _save2
848
- break
849
- end
850
- _tmp = match_string(",")
851
- unless _tmp
852
- self.pos = _save2
853
- break
854
- end
855
- _tmp = apply(:_ocms)
856
- unless _tmp
857
- self.pos = _save2
858
- break
859
- end
860
- _tmp = apply(:_mailbox)
861
- unless _tmp
862
- self.pos = _save2
863
- end
864
- break
865
- end # end sequence
882
+ _save2 = self.pos
883
+ while true # sequence
884
+ _tmp = apply(:_ocms)
885
+ unless _tmp
886
+ self.pos = _save2
887
+ break
888
+ end
889
+ _tmp = match_string(",")
890
+ unless _tmp
891
+ self.pos = _save2
892
+ break
893
+ end
894
+ _tmp = apply(:_ocms)
895
+ unless _tmp
896
+ self.pos = _save2
897
+ break
898
+ end
899
+ _tmp = apply(:_mailbox)
900
+ unless _tmp
901
+ self.pos = _save2
902
+ end
903
+ break
904
+ end # end sequence
866
905
 
867
- break unless _tmp
868
- end
869
- _tmp = true
870
- unless _tmp
871
- self.pos = _save
872
- break
873
- end
874
- _tmp = apply(:_ocms)
875
- unless _tmp
876
- self.pos = _save
906
+ break unless _tmp
907
+ end
908
+ _tmp = true
909
+ unless _tmp
910
+ self.pos = _save
911
+ break
912
+ end
913
+ _tmp = apply(:_ocms)
914
+ unless _tmp
915
+ self.pos = _save
916
+ break
917
+ end
918
+ _tmp = match_string(";")
919
+ unless _tmp
920
+ self.pos = _save
921
+ end
877
922
  break
878
- end
879
- _tmp = match_string(";")
880
- unless _tmp
881
- self.pos = _save
882
- end
883
- break
884
923
  end # end sequence
885
924
 
886
925
  set_failed_rule :_group unless _tmp
@@ -892,42 +931,42 @@ class EmailAddressValidator::RFC822Parser
892
931
 
893
932
  _save = self.pos
894
933
  while true # choice
895
- _tmp = apply(:_addr_spec)
896
- break if _tmp
897
- self.pos = _save
934
+ _tmp = apply(:_addr_spec)
935
+ break if _tmp
936
+ self.pos = _save
898
937
 
899
- _save1 = self.pos
900
- while true # sequence
901
- _tmp = apply(:_phrase)
902
- unless _tmp
903
- self.pos = _save1
904
- break
905
- end
906
- _tmp = apply(:__hyphen_)
907
- unless _tmp
908
- self.pos = _save1
909
- break
910
- end
911
- _tmp = apply(:_ocms)
912
- unless _tmp
913
- self.pos = _save1
914
- break
915
- end
916
- _tmp = apply(:__hyphen_)
917
- unless _tmp
918
- self.pos = _save1
919
- break
920
- end
921
- _tmp = apply(:_angle_addr)
922
- unless _tmp
923
- self.pos = _save1
924
- end
925
- break
926
- end # end sequence
938
+ _save1 = self.pos
939
+ while true # sequence
940
+ _tmp = apply(:_phrase)
941
+ unless _tmp
942
+ self.pos = _save1
943
+ break
944
+ end
945
+ _tmp = apply(:__hyphen_)
946
+ unless _tmp
947
+ self.pos = _save1
948
+ break
949
+ end
950
+ _tmp = apply(:_ocms)
951
+ unless _tmp
952
+ self.pos = _save1
953
+ break
954
+ end
955
+ _tmp = apply(:__hyphen_)
956
+ unless _tmp
957
+ self.pos = _save1
958
+ break
959
+ end
960
+ _tmp = apply(:_angle_addr)
961
+ unless _tmp
962
+ self.pos = _save1
963
+ end
964
+ break
965
+ end # end sequence
927
966
 
928
- break if _tmp
929
- self.pos = _save
930
- break
967
+ break if _tmp
968
+ self.pos = _save
969
+ break
931
970
  end # end choice
932
971
 
933
972
  set_failed_rule :_mailbox unless _tmp
@@ -939,41 +978,41 @@ class EmailAddressValidator::RFC822Parser
939
978
 
940
979
  _save = self.pos
941
980
  while true # sequence
942
- _tmp = match_string("<")
943
- unless _tmp
944
- self.pos = _save
945
- break
946
- end
947
- _tmp = apply(:_ocms)
948
- unless _tmp
949
- self.pos = _save
950
- break
951
- end
952
- _save1 = self.pos
953
- _tmp = apply(:_route)
954
- unless _tmp
955
- _tmp = true
956
- self.pos = _save1
957
- end
958
- unless _tmp
959
- self.pos = _save
960
- break
961
- end
962
- _tmp = apply(:_ocms)
963
- unless _tmp
964
- self.pos = _save
965
- break
966
- end
967
- _tmp = apply(:_addr_spec)
968
- unless _tmp
969
- self.pos = _save
981
+ _tmp = match_string("<")
982
+ unless _tmp
983
+ self.pos = _save
984
+ break
985
+ end
986
+ _tmp = apply(:_ocms)
987
+ unless _tmp
988
+ self.pos = _save
989
+ break
990
+ end
991
+ _save1 = self.pos
992
+ _tmp = apply(:_route)
993
+ unless _tmp
994
+ _tmp = true
995
+ self.pos = _save1
996
+ end
997
+ unless _tmp
998
+ self.pos = _save
999
+ break
1000
+ end
1001
+ _tmp = apply(:_ocms)
1002
+ unless _tmp
1003
+ self.pos = _save
1004
+ break
1005
+ end
1006
+ _tmp = apply(:_addr_spec)
1007
+ unless _tmp
1008
+ self.pos = _save
1009
+ break
1010
+ end
1011
+ _tmp = match_string(">")
1012
+ unless _tmp
1013
+ self.pos = _save
1014
+ end
970
1015
  break
971
- end
972
- _tmp = match_string(">")
973
- unless _tmp
974
- self.pos = _save
975
- end
976
- break
977
1016
  end # end sequence
978
1017
 
979
1018
  set_failed_rule :_angle_addr unless _tmp
@@ -985,64 +1024,64 @@ class EmailAddressValidator::RFC822Parser
985
1024
 
986
1025
  _save = self.pos
987
1026
  while true # sequence
988
- _save1 = self.pos
989
-
990
- _save2 = self.pos
991
- while true # sequence
992
- _tmp = apply(:_AT)
993
- unless _tmp
994
- self.pos = _save2
995
- break
996
- end
997
- _tmp = apply(:_ocms)
998
- unless _tmp
999
- self.pos = _save2
1000
- break
1001
- end
1002
- _tmp = apply(:_domain)
1003
- unless _tmp
1004
- self.pos = _save2
1005
- end
1006
- break
1007
- end # end sequence
1008
-
1009
- if _tmp
1010
- while true
1011
-
1012
- _save3 = self.pos
1013
- while true # sequence
1014
- _tmp = apply(:_AT)
1015
- unless _tmp
1016
- self.pos = _save3
1017
- break
1018
- end
1019
- _tmp = apply(:_ocms)
1020
- unless _tmp
1021
- self.pos = _save3
1022
- break
1023
- end
1024
- _tmp = apply(:_domain)
1025
- unless _tmp
1026
- self.pos = _save3
1027
- end
1028
- break
1029
- end # end sequence
1030
-
1031
- break unless _tmp
1027
+ _save1 = self.pos
1028
+
1029
+ _save2 = self.pos
1030
+ while true # sequence
1031
+ _tmp = apply(:_AT)
1032
+ unless _tmp
1033
+ self.pos = _save2
1034
+ break
1035
+ end
1036
+ _tmp = apply(:_ocms)
1037
+ unless _tmp
1038
+ self.pos = _save2
1039
+ break
1040
+ end
1041
+ _tmp = apply(:_domain)
1042
+ unless _tmp
1043
+ self.pos = _save2
1044
+ end
1045
+ break
1046
+ end # end sequence
1047
+
1048
+ if _tmp
1049
+ while true
1050
+
1051
+ _save3 = self.pos
1052
+ while true # sequence
1053
+ _tmp = apply(:_AT)
1054
+ unless _tmp
1055
+ self.pos = _save3
1056
+ break
1057
+ end
1058
+ _tmp = apply(:_ocms)
1059
+ unless _tmp
1060
+ self.pos = _save3
1061
+ break
1062
+ end
1063
+ _tmp = apply(:_domain)
1064
+ unless _tmp
1065
+ self.pos = _save3
1066
+ end
1067
+ break
1068
+ end # end sequence
1069
+
1070
+ break unless _tmp
1071
+ end
1072
+ _tmp = true
1073
+ else
1074
+ self.pos = _save1
1075
+ end
1076
+ unless _tmp
1077
+ self.pos = _save
1078
+ break
1079
+ end
1080
+ _tmp = match_string(":")
1081
+ unless _tmp
1082
+ self.pos = _save
1032
1083
  end
1033
- _tmp = true
1034
- else
1035
- self.pos = _save1
1036
- end
1037
- unless _tmp
1038
- self.pos = _save
1039
1084
  break
1040
- end
1041
- _tmp = match_string(":")
1042
- unless _tmp
1043
- self.pos = _save
1044
- end
1045
- break
1046
1085
  end # end sequence
1047
1086
 
1048
1087
  set_failed_rule :_route unless _tmp
@@ -1054,31 +1093,31 @@ class EmailAddressValidator::RFC822Parser
1054
1093
 
1055
1094
  _save = self.pos
1056
1095
  while true # sequence
1057
- _tmp = apply(:_local_part)
1058
- unless _tmp
1059
- self.pos = _save
1060
- break
1061
- end
1062
- _tmp = apply(:_ocms)
1063
- unless _tmp
1064
- self.pos = _save
1065
- break
1066
- end
1067
- _tmp = match_string("@")
1068
- unless _tmp
1069
- self.pos = _save
1070
- break
1071
- end
1072
- _tmp = apply(:_ocms)
1073
- unless _tmp
1074
- self.pos = _save
1096
+ _tmp = apply(:_local_part)
1097
+ unless _tmp
1098
+ self.pos = _save
1099
+ break
1100
+ end
1101
+ _tmp = apply(:_ocms)
1102
+ unless _tmp
1103
+ self.pos = _save
1104
+ break
1105
+ end
1106
+ _tmp = match_string("@")
1107
+ unless _tmp
1108
+ self.pos = _save
1109
+ break
1110
+ end
1111
+ _tmp = apply(:_ocms)
1112
+ unless _tmp
1113
+ self.pos = _save
1114
+ break
1115
+ end
1116
+ _tmp = apply(:_domain)
1117
+ unless _tmp
1118
+ self.pos = _save
1119
+ end
1075
1120
  break
1076
- end
1077
- _tmp = apply(:_domain)
1078
- unless _tmp
1079
- self.pos = _save
1080
- end
1081
- break
1082
1121
  end # end sequence
1083
1122
 
1084
1123
  set_failed_rule :_addr_spec unless _tmp
@@ -1090,44 +1129,44 @@ class EmailAddressValidator::RFC822Parser
1090
1129
 
1091
1130
  _save = self.pos
1092
1131
  while true # sequence
1093
- _tmp = apply(:_word)
1094
- unless _tmp
1095
- self.pos = _save
1096
- break
1097
- end
1098
- _tmp = apply(:_ocms)
1099
- unless _tmp
1100
- self.pos = _save
1101
- break
1102
- end
1103
- while true
1132
+ _tmp = apply(:_word)
1133
+ unless _tmp
1134
+ self.pos = _save
1135
+ break
1136
+ end
1137
+ _tmp = apply(:_ocms)
1138
+ unless _tmp
1139
+ self.pos = _save
1140
+ break
1141
+ end
1142
+ while true
1104
1143
 
1105
- _save2 = self.pos
1106
- while true # sequence
1107
- _tmp = match_string(".")
1108
- unless _tmp
1109
- self.pos = _save2
1110
- break
1111
- end
1112
- _tmp = apply(:_ocms)
1113
- unless _tmp
1114
- self.pos = _save2
1115
- break
1116
- end
1117
- _tmp = apply(:_word)
1118
- unless _tmp
1119
- self.pos = _save2
1120
- end
1121
- break
1122
- end # end sequence
1144
+ _save2 = self.pos
1145
+ while true # sequence
1146
+ _tmp = match_string(".")
1147
+ unless _tmp
1148
+ self.pos = _save2
1149
+ break
1150
+ end
1151
+ _tmp = apply(:_ocms)
1152
+ unless _tmp
1153
+ self.pos = _save2
1154
+ break
1155
+ end
1156
+ _tmp = apply(:_word)
1157
+ unless _tmp
1158
+ self.pos = _save2
1159
+ end
1160
+ break
1161
+ end # end sequence
1123
1162
 
1124
- break unless _tmp
1125
- end
1126
- _tmp = true
1127
- unless _tmp
1128
- self.pos = _save
1129
- end
1130
- break
1163
+ break unless _tmp
1164
+ end
1165
+ _tmp = true
1166
+ unless _tmp
1167
+ self.pos = _save
1168
+ end
1169
+ break
1131
1170
  end # end sequence
1132
1171
 
1133
1172
  set_failed_rule :_local_part unless _tmp
@@ -1139,75 +1178,75 @@ class EmailAddressValidator::RFC822Parser
1139
1178
 
1140
1179
  _save = self.pos
1141
1180
  while true # choice
1142
- _tmp = apply(:_domain_literal)
1143
- break if _tmp
1144
- self.pos = _save
1145
-
1146
- _save1 = self.pos
1147
- while true # sequence
1148
- _text_start = self.pos
1149
-
1150
- _save2 = self.pos
1151
- while true # sequence
1152
- _tmp = apply(:_sub_domain)
1153
- unless _tmp
1154
- self.pos = _save2
1155
- break
1156
- end
1157
- _tmp = apply(:_ocms)
1158
- unless _tmp
1159
- self.pos = _save2
1160
- break
1161
- end
1162
- while true
1163
-
1164
- _save4 = self.pos
1165
- while true # sequence
1166
- _tmp = match_string(".")
1167
- unless _tmp
1168
- self.pos = _save4
1169
- break
1170
- end
1171
- _tmp = apply(:_ocms)
1172
- unless _tmp
1173
- self.pos = _save4
1174
- break
1175
- end
1176
- _tmp = apply(:_sub_domain)
1177
- unless _tmp
1178
- self.pos = _save4
1179
- end
1180
- break
1181
- end # end sequence
1181
+ _tmp = apply(:_domain_literal)
1182
+ break if _tmp
1183
+ self.pos = _save
1182
1184
 
1183
- break unless _tmp
1184
- end
1185
- _tmp = true
1186
- unless _tmp
1187
- self.pos = _save2
1188
- end
1189
- break
1190
- end # end sequence
1185
+ _save1 = self.pos
1186
+ while true # sequence
1187
+ _text_start = self.pos
1188
+
1189
+ _save2 = self.pos
1190
+ while true # sequence
1191
+ _tmp = apply(:_sub_domain)
1192
+ unless _tmp
1193
+ self.pos = _save2
1194
+ break
1195
+ end
1196
+ _tmp = apply(:_ocms)
1197
+ unless _tmp
1198
+ self.pos = _save2
1199
+ break
1200
+ end
1201
+ while true
1202
+
1203
+ _save4 = self.pos
1204
+ while true # sequence
1205
+ _tmp = match_string(".")
1206
+ unless _tmp
1207
+ self.pos = _save4
1208
+ break
1209
+ end
1210
+ _tmp = apply(:_ocms)
1211
+ unless _tmp
1212
+ self.pos = _save4
1213
+ break
1214
+ end
1215
+ _tmp = apply(:_sub_domain)
1216
+ unless _tmp
1217
+ self.pos = _save4
1218
+ end
1219
+ break
1220
+ end # end sequence
1221
+
1222
+ break unless _tmp
1223
+ end
1224
+ _tmp = true
1225
+ unless _tmp
1226
+ self.pos = _save2
1227
+ end
1228
+ break
1229
+ end # end sequence
1230
+
1231
+ if _tmp
1232
+ text = get_text(_text_start)
1233
+ end
1234
+ unless _tmp
1235
+ self.pos = _save1
1236
+ break
1237
+ end
1238
+ _save5 = self.pos
1239
+ _tmp = begin; @validate_domain ? EmailAddressValidator::DomainParser.new(text).parse : true ; end
1240
+ self.pos = _save5
1241
+ unless _tmp
1242
+ self.pos = _save1
1243
+ end
1244
+ break
1245
+ end # end sequence
1191
1246
 
1192
- if _tmp
1193
- text = get_text(_text_start)
1194
- end
1195
- unless _tmp
1196
- self.pos = _save1
1247
+ break if _tmp
1248
+ self.pos = _save
1197
1249
  break
1198
- end
1199
- _save5 = self.pos
1200
- _tmp = begin; @validate_domain ? EmailAddressValidator::DomainParser.new(text).parse : true ; end
1201
- self.pos = _save5
1202
- unless _tmp
1203
- self.pos = _save1
1204
- end
1205
- break
1206
- end # end sequence
1207
-
1208
- break if _tmp
1209
- self.pos = _save
1210
- break
1211
1250
  end # end choice
1212
1251
 
1213
1252
  set_failed_rule :_domain unless _tmp
@@ -1219,13 +1258,13 @@ class EmailAddressValidator::RFC822Parser
1219
1258
 
1220
1259
  _save = self.pos
1221
1260
  while true # choice
1222
- _tmp = apply(:_domain_ref)
1223
- break if _tmp
1224
- self.pos = _save
1225
- _tmp = apply(:_domain_literal)
1226
- break if _tmp
1227
- self.pos = _save
1228
- break
1261
+ _tmp = apply(:_domain_ref)
1262
+ break if _tmp
1263
+ self.pos = _save
1264
+ _tmp = apply(:_domain_literal)
1265
+ break if _tmp
1266
+ self.pos = _save
1267
+ break
1229
1268
  end # end choice
1230
1269
 
1231
1270
  set_failed_rule :_sub_domain unless _tmp
@@ -1244,19 +1283,19 @@ class EmailAddressValidator::RFC822Parser
1244
1283
 
1245
1284
  _save = self.pos
1246
1285
  while true # sequence
1247
- _tmp = apply(:_valid)
1248
- unless _tmp
1249
- self.pos = _save
1286
+ _tmp = apply(:_valid)
1287
+ unless _tmp
1288
+ self.pos = _save
1289
+ break
1290
+ end
1291
+ _save1 = self.pos
1292
+ _tmp = get_byte
1293
+ _tmp = _tmp ? nil : true
1294
+ self.pos = _save1
1295
+ unless _tmp
1296
+ self.pos = _save
1297
+ end
1250
1298
  break
1251
- end
1252
- _save1 = self.pos
1253
- _tmp = get_byte
1254
- _tmp = _tmp ? nil : true
1255
- self.pos = _save1
1256
- unless _tmp
1257
- self.pos = _save
1258
- end
1259
- break
1260
1299
  end # end sequence
1261
1300
 
1262
1301
  set_failed_rule :_root unless _tmp
@@ -1268,19 +1307,19 @@ class EmailAddressValidator::RFC822Parser
1268
1307
 
1269
1308
  _save = self.pos
1270
1309
  while true # sequence
1271
- _tmp = apply(:_addr_spec)
1272
- unless _tmp
1273
- self.pos = _save
1310
+ _tmp = apply(:_addr_spec)
1311
+ unless _tmp
1312
+ self.pos = _save
1313
+ break
1314
+ end
1315
+ _save1 = self.pos
1316
+ _tmp = get_byte
1317
+ _tmp = _tmp ? nil : true
1318
+ self.pos = _save1
1319
+ unless _tmp
1320
+ self.pos = _save
1321
+ end
1274
1322
  break
1275
- end
1276
- _save1 = self.pos
1277
- _tmp = get_byte
1278
- _tmp = _tmp ? nil : true
1279
- self.pos = _save1
1280
- unless _tmp
1281
- self.pos = _save
1282
- end
1283
- break
1284
1323
  end # end sequence
1285
1324
 
1286
1325
  set_failed_rule :_only_addr_spec unless _tmp
@@ -1300,10 +1339,10 @@ class EmailAddressValidator::RFC822Parser
1300
1339
  Rules[:_special] = rule_info("special", "/[\\]()<>@,;:\\\\\".\\[]/")
1301
1340
  Rules[:_CRLF] = rule_info("CRLF", "CR LF")
1302
1341
  Rules[:_linear_white_space] = rule_info("linear_white_space", "(CRLF? LWSP_char)+")
1303
- Rules[:_atom] = rule_info("atom", "/[^\\]\\x00-\\x20 \\x7F\\x80-\\xFF()<>@,;:\\\\\".\\[]+/")
1304
- Rules[:_ctext] = rule_info("ctext", "(/[^)\\\\\\x0D\\x80-\\xFF(]+/ | linear_white_space)")
1305
- Rules[:_dtext] = rule_info("dtext", "(/[^\\]\\\\\\x0D\\x80-\\xFF\\[]+/ | linear_white_space)")
1306
- Rules[:_qtext] = rule_info("qtext", "(/[^\"\\\\\\x0D\\x80-\\xFF]+/ | linear_white_space)")
1342
+ Rules[:_atom] = rule_info("atom", "/[^\\]\\x00-\\x20 \\x7F\\x80-\\xFF()<>@,;:\\\\\".\\[]+/n")
1343
+ Rules[:_ctext] = rule_info("ctext", "(/[^)\\\\\\x0D\\x80-\\xFF(]+/n | linear_white_space)")
1344
+ Rules[:_dtext] = rule_info("dtext", "(/[^\\]\\\\\\x0D\\x80-\\xFF\\[]+/n | linear_white_space)")
1345
+ Rules[:_qtext] = rule_info("qtext", "(/[^\"\\\\\\x0D\\x80-\\xFF]+/n | linear_white_space)")
1307
1346
  Rules[:_quoted_pair] = rule_info("quoted_pair", "\"\\\\\" CHAR")
1308
1347
  Rules[:_quoted_string] = rule_info("quoted_string", "\"\\\"\" (qtext | quoted_pair)* \"\\\"\"")
1309
1348
  Rules[:_domain_literal] = rule_info("domain_literal", "\"[\" (dtext | quoted_pair)* \"]\"")
@@ -1324,4 +1363,5 @@ class EmailAddressValidator::RFC822Parser
1324
1363
  Rules[:_domain_ref] = rule_info("domain_ref", "atom")
1325
1364
  Rules[:_root] = rule_info("root", "valid !.")
1326
1365
  Rules[:_only_addr_spec] = rule_info("only_addr_spec", "addr_spec !.")
1366
+ # :startdoc:
1327
1367
  end