email_address_validator 1.0.0 → 2.0.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.
@@ -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