fastcsv 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.travis.yml +5 -3
- data/.yardopts +3 -0
- data/Gemfile +1 -1
- data/README.md +3 -4
- data/Rakefile +5 -5
- data/ext/fastcsv/fastcsv.c +664 -1229
- data/ext/fastcsv/fastcsv.rl +16 -6
- data/fastcsv.gemspec +3 -3
- data/lib/fastcsv.rb +1 -1
- data/spec/fastcsv_spec.rb +16 -1
- metadata +14 -29
- data/USAGE +0 -1
data/ext/fastcsv/fastcsv.c
CHANGED
@@ -38,19 +38,19 @@ typedef struct {
|
|
38
38
|
} Data;
|
39
39
|
|
40
40
|
|
41
|
-
#line
|
41
|
+
#line 172 "ext/fastcsv/fastcsv.rl"
|
42
42
|
|
43
43
|
|
44
44
|
|
45
45
|
#line 46 "ext/fastcsv/fastcsv.c"
|
46
|
-
static const int raw_parse_start =
|
47
|
-
static const int raw_parse_first_final =
|
46
|
+
static const int raw_parse_start = 4;
|
47
|
+
static const int raw_parse_first_final = 4;
|
48
48
|
static const int raw_parse_error = 0;
|
49
49
|
|
50
|
-
static const int raw_parse_en_main =
|
50
|
+
static const int raw_parse_en_main = 4;
|
51
51
|
|
52
52
|
|
53
|
-
#line
|
53
|
+
#line 175 "ext/fastcsv/fastcsv.rl"
|
54
54
|
|
55
55
|
// 16 kB
|
56
56
|
#define BUFSIZE 16384
|
@@ -132,7 +132,7 @@ static VALUE raw_parse(int argc, VALUE *argv, VALUE self) {
|
|
132
132
|
rb_raise(rb_eArgError, ":col_sep has to be a single character String");
|
133
133
|
}
|
134
134
|
|
135
|
-
// @see rb_io_extract_modeenc
|
135
|
+
// @see rb_io_extract_modeenc parse_mode_enc
|
136
136
|
/* Set to defaults */
|
137
137
|
rb_io_ext_int_to_encs(NULL, NULL, &enc, &enc2, 0);
|
138
138
|
|
@@ -270,7 +270,7 @@ static VALUE raw_parse(int argc, VALUE *argv, VALUE self) {
|
|
270
270
|
act = 0;
|
271
271
|
}
|
272
272
|
|
273
|
-
#line
|
273
|
+
#line 386 "ext/fastcsv/fastcsv.rl"
|
274
274
|
|
275
275
|
while (!done) {
|
276
276
|
VALUE str;
|
@@ -350,7 +350,7 @@ tr0:
|
|
350
350
|
break;
|
351
351
|
}
|
352
352
|
}
|
353
|
-
goto
|
353
|
+
goto st4;
|
354
354
|
tr5:
|
355
355
|
#line 49 "ext/fastcsv/fastcsv.rl"
|
356
356
|
{
|
@@ -363,7 +363,7 @@ tr5:
|
|
363
363
|
ENCODE;
|
364
364
|
}
|
365
365
|
}
|
366
|
-
#line
|
366
|
+
#line 138 "ext/fastcsv/fastcsv.rl"
|
367
367
|
{
|
368
368
|
if (d->start == 0 || p == d->start) { // same as new_row
|
369
369
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -380,9 +380,9 @@ tr5:
|
|
380
380
|
rb_yield(row);
|
381
381
|
}
|
382
382
|
}
|
383
|
-
#line
|
383
|
+
#line 170 "ext/fastcsv/fastcsv.rl"
|
384
384
|
{te = p+1;}
|
385
|
-
goto
|
385
|
+
goto st4;
|
386
386
|
tr6:
|
387
387
|
#line 49 "ext/fastcsv/fastcsv.rl"
|
388
388
|
{
|
@@ -400,9 +400,9 @@ tr6:
|
|
400
400
|
rb_ary_push(row, field);
|
401
401
|
field = Qnil;
|
402
402
|
}
|
403
|
-
#line
|
403
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
404
404
|
{te = p+1;}
|
405
|
-
goto
|
405
|
+
goto st4;
|
406
406
|
tr7:
|
407
407
|
#line 49 "ext/fastcsv/fastcsv.rl"
|
408
408
|
{
|
@@ -420,9 +420,9 @@ tr7:
|
|
420
420
|
rb_ary_push(row, field);
|
421
421
|
field = Qnil;
|
422
422
|
}
|
423
|
-
#line
|
423
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
424
424
|
{te = p+1;}
|
425
|
-
#line
|
425
|
+
#line 138 "ext/fastcsv/fastcsv.rl"
|
426
426
|
{
|
427
427
|
if (d->start == 0 || p == d->start) { // same as new_row
|
428
428
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -439,9 +439,9 @@ tr7:
|
|
439
439
|
rb_yield(row);
|
440
440
|
}
|
441
441
|
}
|
442
|
-
goto
|
443
|
-
|
444
|
-
#line
|
442
|
+
goto st4;
|
443
|
+
tr12:
|
444
|
+
#line 138 "ext/fastcsv/fastcsv.rl"
|
445
445
|
{
|
446
446
|
if (d->start == 0 || p == d->start) { // same as new_row
|
447
447
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -458,27 +458,27 @@ tr13:
|
|
458
458
|
rb_yield(row);
|
459
459
|
}
|
460
460
|
}
|
461
|
-
#line
|
461
|
+
#line 170 "ext/fastcsv/fastcsv.rl"
|
462
462
|
{te = p+1;}
|
463
|
-
goto
|
464
|
-
|
463
|
+
goto st4;
|
464
|
+
tr18:
|
465
465
|
#line 95 "ext/fastcsv/fastcsv.rl"
|
466
466
|
{
|
467
467
|
rb_ary_push(row, field);
|
468
468
|
field = Qnil;
|
469
469
|
}
|
470
|
-
#line
|
470
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
471
471
|
{te = p+1;}
|
472
|
-
goto
|
473
|
-
|
472
|
+
goto st4;
|
473
|
+
tr19:
|
474
474
|
#line 95 "ext/fastcsv/fastcsv.rl"
|
475
475
|
{
|
476
476
|
rb_ary_push(row, field);
|
477
477
|
field = Qnil;
|
478
478
|
}
|
479
|
-
#line
|
479
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
480
480
|
{te = p+1;}
|
481
|
-
#line
|
481
|
+
#line 138 "ext/fastcsv/fastcsv.rl"
|
482
482
|
{
|
483
483
|
if (d->start == 0 || p == d->start) { // same as new_row
|
484
484
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -495,12 +495,12 @@ tr20:
|
|
495
495
|
rb_yield(row);
|
496
496
|
}
|
497
497
|
}
|
498
|
-
goto
|
499
|
-
|
500
|
-
#line
|
498
|
+
goto st4;
|
499
|
+
tr36:
|
500
|
+
#line 170 "ext/fastcsv/fastcsv.rl"
|
501
501
|
{te = p;p--;}
|
502
|
-
goto
|
503
|
-
|
502
|
+
goto st4;
|
503
|
+
tr37:
|
504
504
|
#line 100 "ext/fastcsv/fastcsv.rl"
|
505
505
|
{
|
506
506
|
d->start = p;
|
@@ -509,7 +509,7 @@ tr43:
|
|
509
509
|
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
510
510
|
FREE;
|
511
511
|
|
512
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline
|
512
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
513
513
|
}
|
514
514
|
}
|
515
515
|
else {
|
@@ -517,6 +517,8 @@ tr43:
|
|
517
517
|
row_sep = ALLOC_N(char, len_row_sep);
|
518
518
|
memcpy(row_sep, mark_row_sep, len_row_sep);
|
519
519
|
}
|
520
|
+
|
521
|
+
curline++;
|
520
522
|
}
|
521
523
|
#line 1 "NONE"
|
522
524
|
{ switch( act ) {
|
@@ -528,8 +530,35 @@ tr43:
|
|
528
530
|
break;
|
529
531
|
}
|
530
532
|
}
|
531
|
-
goto
|
532
|
-
|
533
|
+
goto st4;
|
534
|
+
tr43:
|
535
|
+
#line 100 "ext/fastcsv/fastcsv.rl"
|
536
|
+
{
|
537
|
+
d->start = p;
|
538
|
+
|
539
|
+
if (len_row_sep) {
|
540
|
+
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
541
|
+
FREE;
|
542
|
+
|
543
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
544
|
+
}
|
545
|
+
}
|
546
|
+
else {
|
547
|
+
len_row_sep = p - mark_row_sep;
|
548
|
+
row_sep = ALLOC_N(char, len_row_sep);
|
549
|
+
memcpy(row_sep, mark_row_sep, len_row_sep);
|
550
|
+
}
|
551
|
+
|
552
|
+
curline++;
|
553
|
+
}
|
554
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
555
|
+
{te = p;p--;}
|
556
|
+
goto st4;
|
557
|
+
tr44:
|
558
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
559
|
+
{te = p;p--;}
|
560
|
+
goto st4;
|
561
|
+
tr45:
|
533
562
|
#line 100 "ext/fastcsv/fastcsv.rl"
|
534
563
|
{
|
535
564
|
d->start = p;
|
@@ -538,7 +567,7 @@ tr50:
|
|
538
567
|
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
539
568
|
FREE;
|
540
569
|
|
541
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline
|
570
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
542
571
|
}
|
543
572
|
}
|
544
573
|
else {
|
@@ -546,8 +575,10 @@ tr50:
|
|
546
575
|
row_sep = ALLOC_N(char, len_row_sep);
|
547
576
|
memcpy(row_sep, mark_row_sep, len_row_sep);
|
548
577
|
}
|
578
|
+
|
579
|
+
curline++;
|
549
580
|
}
|
550
|
-
#line
|
581
|
+
#line 138 "ext/fastcsv/fastcsv.rl"
|
551
582
|
{
|
552
583
|
if (d->start == 0 || p == d->start) { // same as new_row
|
553
584
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -564,16 +595,44 @@ tr50:
|
|
564
595
|
rb_yield(row);
|
565
596
|
}
|
566
597
|
}
|
567
|
-
#line
|
598
|
+
#line 170 "ext/fastcsv/fastcsv.rl"
|
568
599
|
{te = p+1;}
|
569
|
-
goto
|
570
|
-
|
600
|
+
goto st4;
|
601
|
+
tr51:
|
602
|
+
#line 95 "ext/fastcsv/fastcsv.rl"
|
603
|
+
{
|
604
|
+
rb_ary_push(row, field);
|
605
|
+
field = Qnil;
|
606
|
+
}
|
607
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
608
|
+
{te = p+1;}
|
609
|
+
#line 100 "ext/fastcsv/fastcsv.rl"
|
610
|
+
{
|
611
|
+
d->start = p;
|
612
|
+
|
613
|
+
if (len_row_sep) {
|
614
|
+
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
615
|
+
FREE;
|
616
|
+
|
617
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
618
|
+
}
|
619
|
+
}
|
620
|
+
else {
|
621
|
+
len_row_sep = p - mark_row_sep;
|
622
|
+
row_sep = ALLOC_N(char, len_row_sep);
|
623
|
+
memcpy(row_sep, mark_row_sep, len_row_sep);
|
624
|
+
}
|
625
|
+
|
626
|
+
curline++;
|
627
|
+
}
|
628
|
+
goto st4;
|
629
|
+
tr52:
|
571
630
|
#line 95 "ext/fastcsv/fastcsv.rl"
|
572
631
|
{
|
573
632
|
rb_ary_push(row, field);
|
574
633
|
field = Qnil;
|
575
634
|
}
|
576
|
-
#line
|
635
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
577
636
|
{te = p+1;}
|
578
637
|
#line 100 "ext/fastcsv/fastcsv.rl"
|
579
638
|
{
|
@@ -583,7 +642,7 @@ tr56:
|
|
583
642
|
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
584
643
|
FREE;
|
585
644
|
|
586
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline
|
645
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
587
646
|
}
|
588
647
|
}
|
589
648
|
else {
|
@@ -591,8 +650,10 @@ tr56:
|
|
591
650
|
row_sep = ALLOC_N(char, len_row_sep);
|
592
651
|
memcpy(row_sep, mark_row_sep, len_row_sep);
|
593
652
|
}
|
653
|
+
|
654
|
+
curline++;
|
594
655
|
}
|
595
|
-
#line
|
656
|
+
#line 138 "ext/fastcsv/fastcsv.rl"
|
596
657
|
{
|
597
658
|
if (d->start == 0 || p == d->start) { // same as new_row
|
598
659
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -609,39 +670,39 @@ tr56:
|
|
609
670
|
rb_yield(row);
|
610
671
|
}
|
611
672
|
}
|
612
|
-
goto
|
613
|
-
|
673
|
+
goto st4;
|
674
|
+
st4:
|
614
675
|
#line 1 "NONE"
|
615
676
|
{ts = 0;}
|
616
677
|
#line 1 "NONE"
|
617
678
|
{act = 0;}
|
618
679
|
if ( ++p == pe )
|
619
|
-
goto
|
620
|
-
case
|
680
|
+
goto _test_eof4;
|
681
|
+
case 4:
|
621
682
|
#line 1 "NONE"
|
622
683
|
{ts = p;}
|
623
|
-
#line
|
684
|
+
#line 685 "ext/fastcsv/fastcsv.c"
|
624
685
|
_widec = (*p);
|
625
686
|
_widec = (short)(1152 + ((*p) - -128));
|
626
687
|
if (
|
627
|
-
#line
|
688
|
+
#line 156 "ext/fastcsv/fastcsv.rl"
|
628
689
|
(*p) == quote_char ) _widec += 256;
|
629
690
|
if (
|
630
|
-
#line
|
691
|
+
#line 157 "ext/fastcsv/fastcsv.rl"
|
631
692
|
(*p) == col_sep ) _widec += 512;
|
632
693
|
switch( _widec ) {
|
633
|
-
case 1280: goto
|
694
|
+
case 1280: goto tr27;
|
634
695
|
case 1290: goto tr3;
|
635
696
|
case 1293: goto tr4;
|
636
|
-
case 1536: goto
|
637
|
-
case 1546: goto
|
638
|
-
case 1549: goto
|
697
|
+
case 1536: goto tr29;
|
698
|
+
case 1546: goto tr30;
|
699
|
+
case 1549: goto tr31;
|
639
700
|
case 1792: goto tr7;
|
640
701
|
case 1802: goto tr8;
|
641
702
|
case 1805: goto tr9;
|
642
|
-
case 2048: goto
|
643
|
-
case 2058: goto
|
644
|
-
case 2061: goto
|
703
|
+
case 2048: goto tr33;
|
704
|
+
case 2058: goto tr34;
|
705
|
+
case 2061: goto tr35;
|
645
706
|
}
|
646
707
|
if ( _widec < 1408 ) {
|
647
708
|
if ( 1152 <= _widec && _widec <= 1407 )
|
@@ -649,11 +710,11 @@ case 5:
|
|
649
710
|
} else if ( _widec > 1663 ) {
|
650
711
|
if ( _widec > 1919 ) {
|
651
712
|
if ( 1920 <= _widec && _widec <= 2175 )
|
652
|
-
goto
|
713
|
+
goto tr32;
|
653
714
|
} else if ( _widec >= 1664 )
|
654
715
|
goto tr6;
|
655
716
|
} else
|
656
|
-
goto
|
717
|
+
goto tr28;
|
657
718
|
goto st0;
|
658
719
|
st0:
|
659
720
|
cs = 0;
|
@@ -665,10 +726,10 @@ case 1:
|
|
665
726
|
_widec = (*p);
|
666
727
|
_widec = (short)(1152 + ((*p) - -128));
|
667
728
|
if (
|
668
|
-
#line
|
729
|
+
#line 156 "ext/fastcsv/fastcsv.rl"
|
669
730
|
(*p) == quote_char ) _widec += 256;
|
670
731
|
if (
|
671
|
-
#line
|
732
|
+
#line 157 "ext/fastcsv/fastcsv.rl"
|
672
733
|
(*p) == col_sep ) _widec += 512;
|
673
734
|
switch( _widec ) {
|
674
735
|
case 1280: goto tr2;
|
@@ -704,7 +765,7 @@ tr2:
|
|
704
765
|
ENCODE;
|
705
766
|
}
|
706
767
|
}
|
707
|
-
#line
|
768
|
+
#line 138 "ext/fastcsv/fastcsv.rl"
|
708
769
|
{
|
709
770
|
if (d->start == 0 || p == d->start) { // same as new_row
|
710
771
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -721,21 +782,21 @@ tr2:
|
|
721
782
|
rb_yield(row);
|
722
783
|
}
|
723
784
|
}
|
724
|
-
#line
|
785
|
+
#line 170 "ext/fastcsv/fastcsv.rl"
|
725
786
|
{act = 3;}
|
726
|
-
goto
|
727
|
-
|
787
|
+
goto st5;
|
788
|
+
st5:
|
728
789
|
if ( ++p == pe )
|
729
|
-
goto
|
730
|
-
case
|
731
|
-
#line
|
790
|
+
goto _test_eof5;
|
791
|
+
case 5:
|
792
|
+
#line 793 "ext/fastcsv/fastcsv.c"
|
732
793
|
_widec = (*p);
|
733
794
|
_widec = (short)(1152 + ((*p) - -128));
|
734
795
|
if (
|
735
|
-
#line
|
796
|
+
#line 156 "ext/fastcsv/fastcsv.rl"
|
736
797
|
(*p) == quote_char ) _widec += 256;
|
737
798
|
if (
|
738
|
-
#line
|
799
|
+
#line 157 "ext/fastcsv/fastcsv.rl"
|
739
800
|
(*p) == col_sep ) _widec += 512;
|
740
801
|
switch( _widec ) {
|
741
802
|
case 1280: goto tr2;
|
@@ -756,7 +817,7 @@ case 6:
|
|
756
817
|
goto tr6;
|
757
818
|
} else if ( _widec >= 1152 )
|
758
819
|
goto st1;
|
759
|
-
goto
|
820
|
+
goto tr36;
|
760
821
|
tr3:
|
761
822
|
#line 1 "NONE"
|
762
823
|
{te = p+1;}
|
@@ -771,10 +832,9 @@ tr3:
|
|
771
832
|
ENCODE;
|
772
833
|
}
|
773
834
|
}
|
774
|
-
#line
|
835
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
775
836
|
{
|
776
837
|
mark_row_sep = p;
|
777
|
-
curline++;
|
778
838
|
|
779
839
|
if (d->start == 0 || p == d->start) {
|
780
840
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -791,9 +851,9 @@ tr3:
|
|
791
851
|
rb_yield(row);
|
792
852
|
row = rb_ary_new();
|
793
853
|
}
|
794
|
-
#line
|
854
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
795
855
|
{act = 2;}
|
796
|
-
goto
|
856
|
+
goto st6;
|
797
857
|
tr8:
|
798
858
|
#line 1 "NONE"
|
799
859
|
{te = p+1;}
|
@@ -813,12 +873,11 @@ tr8:
|
|
813
873
|
rb_ary_push(row, field);
|
814
874
|
field = Qnil;
|
815
875
|
}
|
816
|
-
#line
|
876
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
817
877
|
{act = 1;}
|
818
|
-
#line
|
878
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
819
879
|
{
|
820
880
|
mark_row_sep = p;
|
821
|
-
curline++;
|
822
881
|
|
823
882
|
if (d->start == 0 || p == d->start) {
|
824
883
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -835,14 +894,13 @@ tr8:
|
|
835
894
|
rb_yield(row);
|
836
895
|
row = rb_ary_new();
|
837
896
|
}
|
838
|
-
goto
|
839
|
-
|
897
|
+
goto st6;
|
898
|
+
tr13:
|
840
899
|
#line 1 "NONE"
|
841
900
|
{te = p+1;}
|
842
|
-
#line
|
901
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
843
902
|
{
|
844
903
|
mark_row_sep = p;
|
845
|
-
curline++;
|
846
904
|
|
847
905
|
if (d->start == 0 || p == d->start) {
|
848
906
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -859,10 +917,10 @@ tr14:
|
|
859
917
|
rb_yield(row);
|
860
918
|
row = rb_ary_new();
|
861
919
|
}
|
862
|
-
#line
|
920
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
863
921
|
{act = 2;}
|
864
|
-
goto
|
865
|
-
|
922
|
+
goto st6;
|
923
|
+
tr20:
|
866
924
|
#line 1 "NONE"
|
867
925
|
{te = p+1;}
|
868
926
|
#line 95 "ext/fastcsv/fastcsv.rl"
|
@@ -870,12 +928,11 @@ tr21:
|
|
870
928
|
rb_ary_push(row, field);
|
871
929
|
field = Qnil;
|
872
930
|
}
|
873
|
-
#line
|
931
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
874
932
|
{act = 1;}
|
875
|
-
#line
|
933
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
876
934
|
{
|
877
935
|
mark_row_sep = p;
|
878
|
-
curline++;
|
879
936
|
|
880
937
|
if (d->start == 0 || p == d->start) {
|
881
938
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -892,19 +949,112 @@ tr21:
|
|
892
949
|
rb_yield(row);
|
893
950
|
row = rb_ary_new();
|
894
951
|
}
|
895
|
-
goto
|
896
|
-
|
952
|
+
goto st6;
|
953
|
+
tr38:
|
897
954
|
#line 1 "NONE"
|
898
955
|
{te = p+1;}
|
899
|
-
#line
|
956
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
900
957
|
{act = 2;}
|
901
|
-
goto
|
902
|
-
|
958
|
+
goto st6;
|
959
|
+
tr46:
|
960
|
+
#line 1 "NONE"
|
961
|
+
{te = p+1;}
|
962
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
963
|
+
{
|
964
|
+
mark_row_sep = p;
|
965
|
+
|
966
|
+
if (d->start == 0 || p == d->start) {
|
967
|
+
rb_ivar_set(self, s_row, rb_str_new2(""));
|
968
|
+
}
|
969
|
+
else if (p > d->start) {
|
970
|
+
rb_ivar_set(self, s_row, rb_str_new(d->start, p - d->start));
|
971
|
+
}
|
972
|
+
|
973
|
+
if (!NIL_P(field) || RARRAY_LEN(row)) { // same as new_field
|
974
|
+
rb_ary_push(row, field);
|
975
|
+
field = Qnil;
|
976
|
+
}
|
977
|
+
|
978
|
+
rb_yield(row);
|
979
|
+
row = rb_ary_new();
|
980
|
+
}
|
981
|
+
#line 100 "ext/fastcsv/fastcsv.rl"
|
982
|
+
{
|
983
|
+
d->start = p;
|
984
|
+
|
985
|
+
if (len_row_sep) {
|
986
|
+
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
987
|
+
FREE;
|
988
|
+
|
989
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
990
|
+
}
|
991
|
+
}
|
992
|
+
else {
|
993
|
+
len_row_sep = p - mark_row_sep;
|
994
|
+
row_sep = ALLOC_N(char, len_row_sep);
|
995
|
+
memcpy(row_sep, mark_row_sep, len_row_sep);
|
996
|
+
}
|
997
|
+
|
998
|
+
curline++;
|
999
|
+
}
|
1000
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
1001
|
+
{act = 2;}
|
1002
|
+
goto st6;
|
1003
|
+
tr53:
|
1004
|
+
#line 1 "NONE"
|
1005
|
+
{te = p+1;}
|
1006
|
+
#line 95 "ext/fastcsv/fastcsv.rl"
|
1007
|
+
{
|
1008
|
+
rb_ary_push(row, field);
|
1009
|
+
field = Qnil;
|
1010
|
+
}
|
1011
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
1012
|
+
{act = 1;}
|
1013
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
1014
|
+
{
|
1015
|
+
mark_row_sep = p;
|
1016
|
+
|
1017
|
+
if (d->start == 0 || p == d->start) {
|
1018
|
+
rb_ivar_set(self, s_row, rb_str_new2(""));
|
1019
|
+
}
|
1020
|
+
else if (p > d->start) {
|
1021
|
+
rb_ivar_set(self, s_row, rb_str_new(d->start, p - d->start));
|
1022
|
+
}
|
1023
|
+
|
1024
|
+
if (!NIL_P(field) || RARRAY_LEN(row)) { // same as new_field
|
1025
|
+
rb_ary_push(row, field);
|
1026
|
+
field = Qnil;
|
1027
|
+
}
|
1028
|
+
|
1029
|
+
rb_yield(row);
|
1030
|
+
row = rb_ary_new();
|
1031
|
+
}
|
1032
|
+
#line 100 "ext/fastcsv/fastcsv.rl"
|
1033
|
+
{
|
1034
|
+
d->start = p;
|
1035
|
+
|
1036
|
+
if (len_row_sep) {
|
1037
|
+
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
1038
|
+
FREE;
|
1039
|
+
|
1040
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
1041
|
+
}
|
1042
|
+
}
|
1043
|
+
else {
|
1044
|
+
len_row_sep = p - mark_row_sep;
|
1045
|
+
row_sep = ALLOC_N(char, len_row_sep);
|
1046
|
+
memcpy(row_sep, mark_row_sep, len_row_sep);
|
1047
|
+
}
|
1048
|
+
|
1049
|
+
curline++;
|
1050
|
+
}
|
1051
|
+
goto st6;
|
1052
|
+
st6:
|
903
1053
|
if ( ++p == pe )
|
904
|
-
goto
|
905
|
-
case
|
906
|
-
#line
|
907
|
-
goto
|
1054
|
+
goto _test_eof6;
|
1055
|
+
case 6:
|
1056
|
+
#line 1057 "ext/fastcsv/fastcsv.c"
|
1057
|
+
goto tr37;
|
908
1058
|
tr4:
|
909
1059
|
#line 1 "NONE"
|
910
1060
|
{te = p+1;}
|
@@ -919,10 +1069,9 @@ tr4:
|
|
919
1069
|
ENCODE;
|
920
1070
|
}
|
921
1071
|
}
|
922
|
-
#line
|
1072
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
923
1073
|
{
|
924
1074
|
mark_row_sep = p;
|
925
|
-
curline++;
|
926
1075
|
|
927
1076
|
if (d->start == 0 || p == d->start) {
|
928
1077
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -939,9 +1088,9 @@ tr4:
|
|
939
1088
|
rb_yield(row);
|
940
1089
|
row = rb_ary_new();
|
941
1090
|
}
|
942
|
-
#line
|
1091
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
943
1092
|
{act = 2;}
|
944
|
-
goto
|
1093
|
+
goto st7;
|
945
1094
|
tr9:
|
946
1095
|
#line 1 "NONE"
|
947
1096
|
{te = p+1;}
|
@@ -961,12 +1110,11 @@ tr9:
|
|
961
1110
|
rb_ary_push(row, field);
|
962
1111
|
field = Qnil;
|
963
1112
|
}
|
964
|
-
#line
|
1113
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
965
1114
|
{act = 1;}
|
966
|
-
#line
|
1115
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
967
1116
|
{
|
968
1117
|
mark_row_sep = p;
|
969
|
-
curline++;
|
970
1118
|
|
971
1119
|
if (d->start == 0 || p == d->start) {
|
972
1120
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -983,14 +1131,13 @@ tr9:
|
|
983
1131
|
rb_yield(row);
|
984
1132
|
row = rb_ary_new();
|
985
1133
|
}
|
986
|
-
goto
|
987
|
-
|
1134
|
+
goto st7;
|
1135
|
+
tr14:
|
988
1136
|
#line 1 "NONE"
|
989
1137
|
{te = p+1;}
|
990
|
-
#line
|
1138
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
991
1139
|
{
|
992
1140
|
mark_row_sep = p;
|
993
|
-
curline++;
|
994
1141
|
|
995
1142
|
if (d->start == 0 || p == d->start) {
|
996
1143
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -1007,10 +1154,10 @@ tr15:
|
|
1007
1154
|
rb_yield(row);
|
1008
1155
|
row = rb_ary_new();
|
1009
1156
|
}
|
1010
|
-
#line
|
1157
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
1011
1158
|
{act = 2;}
|
1012
|
-
goto
|
1013
|
-
|
1159
|
+
goto st7;
|
1160
|
+
tr21:
|
1014
1161
|
#line 1 "NONE"
|
1015
1162
|
{te = p+1;}
|
1016
1163
|
#line 95 "ext/fastcsv/fastcsv.rl"
|
@@ -1018,12 +1165,11 @@ tr22:
|
|
1018
1165
|
rb_ary_push(row, field);
|
1019
1166
|
field = Qnil;
|
1020
1167
|
}
|
1021
|
-
#line
|
1168
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
1022
1169
|
{act = 1;}
|
1023
|
-
#line
|
1170
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
1024
1171
|
{
|
1025
1172
|
mark_row_sep = p;
|
1026
|
-
curline++;
|
1027
1173
|
|
1028
1174
|
if (d->start == 0 || p == d->start) {
|
1029
1175
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -1040,16 +1186,109 @@ tr22:
|
|
1040
1186
|
rb_yield(row);
|
1041
1187
|
row = rb_ary_new();
|
1042
1188
|
}
|
1043
|
-
goto
|
1044
|
-
|
1045
|
-
|
1046
|
-
|
1047
|
-
|
1048
|
-
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1052
|
-
|
1189
|
+
goto st7;
|
1190
|
+
tr47:
|
1191
|
+
#line 1 "NONE"
|
1192
|
+
{te = p+1;}
|
1193
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
1194
|
+
{
|
1195
|
+
mark_row_sep = p;
|
1196
|
+
|
1197
|
+
if (d->start == 0 || p == d->start) {
|
1198
|
+
rb_ivar_set(self, s_row, rb_str_new2(""));
|
1199
|
+
}
|
1200
|
+
else if (p > d->start) {
|
1201
|
+
rb_ivar_set(self, s_row, rb_str_new(d->start, p - d->start));
|
1202
|
+
}
|
1203
|
+
|
1204
|
+
if (!NIL_P(field) || RARRAY_LEN(row)) { // same as new_field
|
1205
|
+
rb_ary_push(row, field);
|
1206
|
+
field = Qnil;
|
1207
|
+
}
|
1208
|
+
|
1209
|
+
rb_yield(row);
|
1210
|
+
row = rb_ary_new();
|
1211
|
+
}
|
1212
|
+
#line 100 "ext/fastcsv/fastcsv.rl"
|
1213
|
+
{
|
1214
|
+
d->start = p;
|
1215
|
+
|
1216
|
+
if (len_row_sep) {
|
1217
|
+
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
1218
|
+
FREE;
|
1219
|
+
|
1220
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
1221
|
+
}
|
1222
|
+
}
|
1223
|
+
else {
|
1224
|
+
len_row_sep = p - mark_row_sep;
|
1225
|
+
row_sep = ALLOC_N(char, len_row_sep);
|
1226
|
+
memcpy(row_sep, mark_row_sep, len_row_sep);
|
1227
|
+
}
|
1228
|
+
|
1229
|
+
curline++;
|
1230
|
+
}
|
1231
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
1232
|
+
{act = 2;}
|
1233
|
+
goto st7;
|
1234
|
+
tr54:
|
1235
|
+
#line 1 "NONE"
|
1236
|
+
{te = p+1;}
|
1237
|
+
#line 95 "ext/fastcsv/fastcsv.rl"
|
1238
|
+
{
|
1239
|
+
rb_ary_push(row, field);
|
1240
|
+
field = Qnil;
|
1241
|
+
}
|
1242
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
1243
|
+
{act = 1;}
|
1244
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
1245
|
+
{
|
1246
|
+
mark_row_sep = p;
|
1247
|
+
|
1248
|
+
if (d->start == 0 || p == d->start) {
|
1249
|
+
rb_ivar_set(self, s_row, rb_str_new2(""));
|
1250
|
+
}
|
1251
|
+
else if (p > d->start) {
|
1252
|
+
rb_ivar_set(self, s_row, rb_str_new(d->start, p - d->start));
|
1253
|
+
}
|
1254
|
+
|
1255
|
+
if (!NIL_P(field) || RARRAY_LEN(row)) { // same as new_field
|
1256
|
+
rb_ary_push(row, field);
|
1257
|
+
field = Qnil;
|
1258
|
+
}
|
1259
|
+
|
1260
|
+
rb_yield(row);
|
1261
|
+
row = rb_ary_new();
|
1262
|
+
}
|
1263
|
+
#line 100 "ext/fastcsv/fastcsv.rl"
|
1264
|
+
{
|
1265
|
+
d->start = p;
|
1266
|
+
|
1267
|
+
if (len_row_sep) {
|
1268
|
+
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
1269
|
+
FREE;
|
1270
|
+
|
1271
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
1272
|
+
}
|
1273
|
+
}
|
1274
|
+
else {
|
1275
|
+
len_row_sep = p - mark_row_sep;
|
1276
|
+
row_sep = ALLOC_N(char, len_row_sep);
|
1277
|
+
memcpy(row_sep, mark_row_sep, len_row_sep);
|
1278
|
+
}
|
1279
|
+
|
1280
|
+
curline++;
|
1281
|
+
}
|
1282
|
+
goto st7;
|
1283
|
+
st7:
|
1284
|
+
if ( ++p == pe )
|
1285
|
+
goto _test_eof7;
|
1286
|
+
case 7:
|
1287
|
+
#line 1288 "ext/fastcsv/fastcsv.c"
|
1288
|
+
if ( (*p) == 10 )
|
1289
|
+
goto tr38;
|
1290
|
+
goto tr37;
|
1291
|
+
tr27:
|
1053
1292
|
#line 1 "NONE"
|
1054
1293
|
{te = p+1;}
|
1055
1294
|
#line 49 "ext/fastcsv/fastcsv.rl"
|
@@ -1063,7 +1302,7 @@ tr33:
|
|
1063
1302
|
ENCODE;
|
1064
1303
|
}
|
1065
1304
|
}
|
1066
|
-
#line
|
1305
|
+
#line 138 "ext/fastcsv/fastcsv.rl"
|
1067
1306
|
{
|
1068
1307
|
if (d->start == 0 || p == d->start) { // same as new_row
|
1069
1308
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -1080,21 +1319,21 @@ tr33:
|
|
1080
1319
|
rb_yield(row);
|
1081
1320
|
}
|
1082
1321
|
}
|
1083
|
-
#line
|
1322
|
+
#line 170 "ext/fastcsv/fastcsv.rl"
|
1084
1323
|
{act = 3;}
|
1085
|
-
goto
|
1086
|
-
|
1324
|
+
goto st8;
|
1325
|
+
st8:
|
1087
1326
|
if ( ++p == pe )
|
1088
|
-
goto
|
1089
|
-
case
|
1090
|
-
#line
|
1327
|
+
goto _test_eof8;
|
1328
|
+
case 8:
|
1329
|
+
#line 1330 "ext/fastcsv/fastcsv.c"
|
1091
1330
|
_widec = (*p);
|
1092
1331
|
_widec = (short)(1152 + ((*p) - -128));
|
1093
1332
|
if (
|
1094
|
-
#line
|
1333
|
+
#line 156 "ext/fastcsv/fastcsv.rl"
|
1095
1334
|
(*p) == quote_char ) _widec += 256;
|
1096
1335
|
if (
|
1097
|
-
#line
|
1336
|
+
#line 157 "ext/fastcsv/fastcsv.rl"
|
1098
1337
|
(*p) == col_sep ) _widec += 512;
|
1099
1338
|
if ( _widec < 1291 ) {
|
1100
1339
|
if ( 1152 <= _widec && _widec <= 1289 )
|
@@ -1104,14 +1343,14 @@ case 9:
|
|
1104
1343
|
goto st1;
|
1105
1344
|
} else
|
1106
1345
|
goto st1;
|
1107
|
-
goto
|
1108
|
-
|
1346
|
+
goto tr36;
|
1347
|
+
tr28:
|
1109
1348
|
#line 41 "ext/fastcsv/fastcsv.rl"
|
1110
1349
|
{
|
1111
1350
|
unclosed_line = curline;
|
1112
1351
|
}
|
1113
1352
|
goto st2;
|
1114
|
-
|
1353
|
+
tr39:
|
1115
1354
|
#line 100 "ext/fastcsv/fastcsv.rl"
|
1116
1355
|
{
|
1117
1356
|
d->start = p;
|
@@ -1120,7 +1359,7 @@ tr45:
|
|
1120
1359
|
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
1121
1360
|
FREE;
|
1122
1361
|
|
1123
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline
|
1362
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
1124
1363
|
}
|
1125
1364
|
}
|
1126
1365
|
else {
|
@@ -1128,22 +1367,20 @@ tr45:
|
|
1128
1367
|
row_sep = ALLOC_N(char, len_row_sep);
|
1129
1368
|
memcpy(row_sep, mark_row_sep, len_row_sep);
|
1130
1369
|
}
|
1370
|
+
|
1371
|
+
curline++;
|
1131
1372
|
}
|
1132
1373
|
goto st2;
|
1133
1374
|
st2:
|
1134
1375
|
if ( ++p == pe )
|
1135
1376
|
goto _test_eof2;
|
1136
1377
|
case 2:
|
1137
|
-
#line
|
1378
|
+
#line 1379 "ext/fastcsv/fastcsv.c"
|
1138
1379
|
_widec = (*p);
|
1139
1380
|
_widec = (short)(128 + ((*p) - -128));
|
1140
1381
|
if (
|
1141
|
-
#line
|
1382
|
+
#line 156 "ext/fastcsv/fastcsv.rl"
|
1142
1383
|
(*p) == quote_char ) _widec += 256;
|
1143
|
-
switch( _widec ) {
|
1144
|
-
case 522: goto tr12;
|
1145
|
-
case 525: goto tr12;
|
1146
|
-
}
|
1147
1384
|
if ( _widec < 257 ) {
|
1148
1385
|
if ( 128 <= _widec && _widec <= 255 )
|
1149
1386
|
goto st2;
|
@@ -1194,7 +1431,7 @@ tr11:
|
|
1194
1431
|
unclosed_line = 0;
|
1195
1432
|
}
|
1196
1433
|
goto st3;
|
1197
|
-
|
1434
|
+
tr40:
|
1198
1435
|
#line 60 "ext/fastcsv/fastcsv.rl"
|
1199
1436
|
{
|
1200
1437
|
if (p == ts) {
|
@@ -1242,7 +1479,7 @@ tr46:
|
|
1242
1479
|
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
1243
1480
|
FREE;
|
1244
1481
|
|
1245
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline
|
1482
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
1246
1483
|
}
|
1247
1484
|
}
|
1248
1485
|
else {
|
@@ -1250,48 +1487,50 @@ tr46:
|
|
1250
1487
|
row_sep = ALLOC_N(char, len_row_sep);
|
1251
1488
|
memcpy(row_sep, mark_row_sep, len_row_sep);
|
1252
1489
|
}
|
1490
|
+
|
1491
|
+
curline++;
|
1253
1492
|
}
|
1254
1493
|
goto st3;
|
1255
1494
|
st3:
|
1256
1495
|
if ( ++p == pe )
|
1257
1496
|
goto _test_eof3;
|
1258
1497
|
case 3:
|
1259
|
-
#line
|
1498
|
+
#line 1499 "ext/fastcsv/fastcsv.c"
|
1260
1499
|
_widec = (*p);
|
1261
1500
|
_widec = (short)(1152 + ((*p) - -128));
|
1262
1501
|
if (
|
1263
|
-
#line
|
1502
|
+
#line 156 "ext/fastcsv/fastcsv.rl"
|
1264
1503
|
(*p) == quote_char ) _widec += 256;
|
1265
1504
|
if (
|
1266
|
-
#line
|
1505
|
+
#line 157 "ext/fastcsv/fastcsv.rl"
|
1267
1506
|
(*p) == col_sep ) _widec += 512;
|
1268
1507
|
switch( _widec ) {
|
1269
|
-
case 1280: goto
|
1270
|
-
case 1290: goto
|
1271
|
-
case 1293: goto
|
1272
|
-
case 1536: goto
|
1273
|
-
case 1546: goto
|
1274
|
-
case 1549: goto
|
1275
|
-
case 1792: goto
|
1276
|
-
case 1802: goto
|
1277
|
-
case 1805: goto
|
1278
|
-
case 2048: goto
|
1279
|
-
case 2058: goto
|
1280
|
-
case 2061: goto
|
1508
|
+
case 1280: goto tr12;
|
1509
|
+
case 1290: goto tr13;
|
1510
|
+
case 1293: goto tr14;
|
1511
|
+
case 1536: goto tr15;
|
1512
|
+
case 1546: goto tr16;
|
1513
|
+
case 1549: goto tr17;
|
1514
|
+
case 1792: goto tr19;
|
1515
|
+
case 1802: goto tr20;
|
1516
|
+
case 1805: goto tr21;
|
1517
|
+
case 2048: goto tr23;
|
1518
|
+
case 2058: goto tr24;
|
1519
|
+
case 2061: goto tr25;
|
1281
1520
|
}
|
1282
1521
|
if ( _widec < 1664 ) {
|
1283
1522
|
if ( 1408 <= _widec && _widec <= 1663 )
|
1284
1523
|
goto st2;
|
1285
1524
|
} else if ( _widec > 1919 ) {
|
1286
1525
|
if ( 1920 <= _widec && _widec <= 2175 )
|
1287
|
-
goto
|
1526
|
+
goto tr22;
|
1288
1527
|
} else
|
1289
|
-
goto
|
1528
|
+
goto tr18;
|
1290
1529
|
goto tr0;
|
1291
|
-
|
1530
|
+
tr15:
|
1292
1531
|
#line 1 "NONE"
|
1293
1532
|
{te = p+1;}
|
1294
|
-
#line
|
1533
|
+
#line 138 "ext/fastcsv/fastcsv.rl"
|
1295
1534
|
{
|
1296
1535
|
if (d->start == 0 || p == d->start) { // same as new_row
|
1297
1536
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -1308,10 +1547,10 @@ tr16:
|
|
1308
1547
|
rb_yield(row);
|
1309
1548
|
}
|
1310
1549
|
}
|
1311
|
-
#line
|
1550
|
+
#line 170 "ext/fastcsv/fastcsv.rl"
|
1312
1551
|
{act = 3;}
|
1313
|
-
goto
|
1314
|
-
|
1552
|
+
goto st9;
|
1553
|
+
tr22:
|
1315
1554
|
#line 1 "NONE"
|
1316
1555
|
{te = p+1;}
|
1317
1556
|
#line 95 "ext/fastcsv/fastcsv.rl"
|
@@ -1319,10 +1558,10 @@ tr23:
|
|
1319
1558
|
rb_ary_push(row, field);
|
1320
1559
|
field = Qnil;
|
1321
1560
|
}
|
1322
|
-
#line
|
1561
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
1323
1562
|
{act = 1;}
|
1324
|
-
goto
|
1325
|
-
|
1563
|
+
goto st9;
|
1564
|
+
tr23:
|
1326
1565
|
#line 1 "NONE"
|
1327
1566
|
{te = p+1;}
|
1328
1567
|
#line 95 "ext/fastcsv/fastcsv.rl"
|
@@ -1330,9 +1569,9 @@ tr24:
|
|
1330
1569
|
rb_ary_push(row, field);
|
1331
1570
|
field = Qnil;
|
1332
1571
|
}
|
1333
|
-
#line
|
1572
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
1334
1573
|
{act = 1;}
|
1335
|
-
#line
|
1574
|
+
#line 138 "ext/fastcsv/fastcsv.rl"
|
1336
1575
|
{
|
1337
1576
|
if (d->start == 0 || p == d->start) { // same as new_row
|
1338
1577
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -1349,8 +1588,8 @@ tr24:
|
|
1349
1588
|
rb_yield(row);
|
1350
1589
|
}
|
1351
1590
|
}
|
1352
|
-
goto
|
1353
|
-
|
1591
|
+
goto st9;
|
1592
|
+
tr29:
|
1354
1593
|
#line 1 "NONE"
|
1355
1594
|
{te = p+1;}
|
1356
1595
|
#line 41 "ext/fastcsv/fastcsv.rl"
|
@@ -1368,7 +1607,7 @@ tr35:
|
|
1368
1607
|
ENCODE;
|
1369
1608
|
}
|
1370
1609
|
}
|
1371
|
-
#line
|
1610
|
+
#line 138 "ext/fastcsv/fastcsv.rl"
|
1372
1611
|
{
|
1373
1612
|
if (d->start == 0 || p == d->start) { // same as new_row
|
1374
1613
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -1385,10 +1624,10 @@ tr35:
|
|
1385
1624
|
rb_yield(row);
|
1386
1625
|
}
|
1387
1626
|
}
|
1388
|
-
#line
|
1627
|
+
#line 170 "ext/fastcsv/fastcsv.rl"
|
1389
1628
|
{act = 3;}
|
1390
|
-
goto
|
1391
|
-
|
1629
|
+
goto st9;
|
1630
|
+
tr32:
|
1392
1631
|
#line 1 "NONE"
|
1393
1632
|
{te = p+1;}
|
1394
1633
|
#line 49 "ext/fastcsv/fastcsv.rl"
|
@@ -1411,10 +1650,10 @@ tr38:
|
|
1411
1650
|
rb_ary_push(row, field);
|
1412
1651
|
field = Qnil;
|
1413
1652
|
}
|
1414
|
-
#line
|
1653
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
1415
1654
|
{act = 1;}
|
1416
|
-
goto
|
1417
|
-
|
1655
|
+
goto st9;
|
1656
|
+
tr33:
|
1418
1657
|
#line 1 "NONE"
|
1419
1658
|
{te = p+1;}
|
1420
1659
|
#line 49 "ext/fastcsv/fastcsv.rl"
|
@@ -1437,9 +1676,9 @@ tr39:
|
|
1437
1676
|
rb_ary_push(row, field);
|
1438
1677
|
field = Qnil;
|
1439
1678
|
}
|
1440
|
-
#line
|
1679
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
1441
1680
|
{act = 1;}
|
1442
|
-
#line
|
1681
|
+
#line 138 "ext/fastcsv/fastcsv.rl"
|
1443
1682
|
{
|
1444
1683
|
if (d->start == 0 || p == d->start) { // same as new_row
|
1445
1684
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -1456,7 +1695,49 @@ tr39:
|
|
1456
1695
|
rb_yield(row);
|
1457
1696
|
}
|
1458
1697
|
}
|
1459
|
-
goto
|
1698
|
+
goto st9;
|
1699
|
+
tr48:
|
1700
|
+
#line 1 "NONE"
|
1701
|
+
{te = p+1;}
|
1702
|
+
#line 100 "ext/fastcsv/fastcsv.rl"
|
1703
|
+
{
|
1704
|
+
d->start = p;
|
1705
|
+
|
1706
|
+
if (len_row_sep) {
|
1707
|
+
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
1708
|
+
FREE;
|
1709
|
+
|
1710
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
1711
|
+
}
|
1712
|
+
}
|
1713
|
+
else {
|
1714
|
+
len_row_sep = p - mark_row_sep;
|
1715
|
+
row_sep = ALLOC_N(char, len_row_sep);
|
1716
|
+
memcpy(row_sep, mark_row_sep, len_row_sep);
|
1717
|
+
}
|
1718
|
+
|
1719
|
+
curline++;
|
1720
|
+
}
|
1721
|
+
#line 138 "ext/fastcsv/fastcsv.rl"
|
1722
|
+
{
|
1723
|
+
if (d->start == 0 || p == d->start) { // same as new_row
|
1724
|
+
rb_ivar_set(self, s_row, rb_str_new2(""));
|
1725
|
+
}
|
1726
|
+
else if (p > d->start) {
|
1727
|
+
rb_ivar_set(self, s_row, rb_str_new(d->start, p - d->start));
|
1728
|
+
}
|
1729
|
+
|
1730
|
+
if (!NIL_P(field) || RARRAY_LEN(row)) {
|
1731
|
+
rb_ary_push(row, field);
|
1732
|
+
}
|
1733
|
+
|
1734
|
+
if (RARRAY_LEN(row)) {
|
1735
|
+
rb_yield(row);
|
1736
|
+
}
|
1737
|
+
}
|
1738
|
+
#line 170 "ext/fastcsv/fastcsv.rl"
|
1739
|
+
{act = 3;}
|
1740
|
+
goto st9;
|
1460
1741
|
tr55:
|
1461
1742
|
#line 1 "NONE"
|
1462
1743
|
{te = p+1;}
|
@@ -1465,7 +1746,7 @@ tr55:
|
|
1465
1746
|
rb_ary_push(row, field);
|
1466
1747
|
field = Qnil;
|
1467
1748
|
}
|
1468
|
-
#line
|
1749
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
1469
1750
|
{act = 1;}
|
1470
1751
|
#line 100 "ext/fastcsv/fastcsv.rl"
|
1471
1752
|
{
|
@@ -1475,7 +1756,7 @@ tr55:
|
|
1475
1756
|
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
1476
1757
|
FREE;
|
1477
1758
|
|
1478
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline
|
1759
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
1479
1760
|
}
|
1480
1761
|
}
|
1481
1762
|
else {
|
@@ -1483,22 +1764,67 @@ tr55:
|
|
1483
1764
|
row_sep = ALLOC_N(char, len_row_sep);
|
1484
1765
|
memcpy(row_sep, mark_row_sep, len_row_sep);
|
1485
1766
|
}
|
1767
|
+
|
1768
|
+
curline++;
|
1486
1769
|
}
|
1487
|
-
goto
|
1488
|
-
|
1770
|
+
goto st9;
|
1771
|
+
tr56:
|
1772
|
+
#line 1 "NONE"
|
1773
|
+
{te = p+1;}
|
1774
|
+
#line 95 "ext/fastcsv/fastcsv.rl"
|
1775
|
+
{
|
1776
|
+
rb_ary_push(row, field);
|
1777
|
+
field = Qnil;
|
1778
|
+
}
|
1779
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
1780
|
+
{act = 1;}
|
1781
|
+
#line 100 "ext/fastcsv/fastcsv.rl"
|
1782
|
+
{
|
1783
|
+
d->start = p;
|
1784
|
+
|
1785
|
+
if (len_row_sep) {
|
1786
|
+
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
1787
|
+
FREE;
|
1788
|
+
|
1789
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
1790
|
+
}
|
1791
|
+
}
|
1792
|
+
else {
|
1793
|
+
len_row_sep = p - mark_row_sep;
|
1794
|
+
row_sep = ALLOC_N(char, len_row_sep);
|
1795
|
+
memcpy(row_sep, mark_row_sep, len_row_sep);
|
1796
|
+
}
|
1797
|
+
|
1798
|
+
curline++;
|
1799
|
+
}
|
1800
|
+
#line 138 "ext/fastcsv/fastcsv.rl"
|
1801
|
+
{
|
1802
|
+
if (d->start == 0 || p == d->start) { // same as new_row
|
1803
|
+
rb_ivar_set(self, s_row, rb_str_new2(""));
|
1804
|
+
}
|
1805
|
+
else if (p > d->start) {
|
1806
|
+
rb_ivar_set(self, s_row, rb_str_new(d->start, p - d->start));
|
1807
|
+
}
|
1808
|
+
|
1809
|
+
if (!NIL_P(field) || RARRAY_LEN(row)) {
|
1810
|
+
rb_ary_push(row, field);
|
1811
|
+
}
|
1812
|
+
|
1813
|
+
if (RARRAY_LEN(row)) {
|
1814
|
+
rb_yield(row);
|
1815
|
+
}
|
1816
|
+
}
|
1817
|
+
goto st9;
|
1818
|
+
st9:
|
1489
1819
|
if ( ++p == pe )
|
1490
|
-
goto
|
1491
|
-
case
|
1492
|
-
#line
|
1820
|
+
goto _test_eof9;
|
1821
|
+
case 9:
|
1822
|
+
#line 1823 "ext/fastcsv/fastcsv.c"
|
1493
1823
|
_widec = (*p);
|
1494
1824
|
_widec = (short)(128 + ((*p) - -128));
|
1495
1825
|
if (
|
1496
|
-
#line
|
1826
|
+
#line 156 "ext/fastcsv/fastcsv.rl"
|
1497
1827
|
(*p) == quote_char ) _widec += 256;
|
1498
|
-
switch( _widec ) {
|
1499
|
-
case 522: goto tr12;
|
1500
|
-
case 525: goto tr12;
|
1501
|
-
}
|
1502
1828
|
if ( _widec < 257 ) {
|
1503
1829
|
if ( 128 <= _widec && _widec <= 255 )
|
1504
1830
|
goto st2;
|
@@ -1508,151 +1834,12 @@ case 10:
|
|
1508
1834
|
} else
|
1509
1835
|
goto st2;
|
1510
1836
|
goto tr0;
|
1511
|
-
|
1512
|
-
#line
|
1837
|
+
tr16:
|
1838
|
+
#line 1 "NONE"
|
1839
|
+
{te = p+1;}
|
1840
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
1513
1841
|
{
|
1514
|
-
|
1515
|
-
field = rb_enc_str_new("", 0, encoding);
|
1516
|
-
ENCODE;
|
1517
|
-
}
|
1518
|
-
// @note If we add an action on '""', we can skip some steps if no '""' is found.
|
1519
|
-
else if (p > ts) {
|
1520
|
-
// Operating on ts in-place produces odd behavior, FYI.
|
1521
|
-
char *copy = ALLOC_N(char, p - ts);
|
1522
|
-
memcpy(copy, ts, p - ts);
|
1523
|
-
|
1524
|
-
char *reader = ts, *writer = copy;
|
1525
|
-
int escaped = 0;
|
1526
|
-
|
1527
|
-
while (p > reader) {
|
1528
|
-
if (*reader == quote_char && !escaped) {
|
1529
|
-
// Skip the escaping character.
|
1530
|
-
escaped = 1;
|
1531
|
-
}
|
1532
|
-
else {
|
1533
|
-
escaped = 0;
|
1534
|
-
*writer++ = *reader;
|
1535
|
-
}
|
1536
|
-
reader++;
|
1537
|
-
}
|
1538
|
-
|
1539
|
-
field = rb_enc_str_new(copy, writer - copy, encoding);
|
1540
|
-
ENCODE;
|
1541
|
-
|
1542
|
-
if (copy != NULL) {
|
1543
|
-
free(copy);
|
1544
|
-
}
|
1545
|
-
}
|
1546
|
-
}
|
1547
|
-
#line 45 "ext/fastcsv/fastcsv.rl"
|
1548
|
-
{
|
1549
|
-
unclosed_line = 0;
|
1550
|
-
}
|
1551
|
-
goto st4;
|
1552
|
-
tr47:
|
1553
|
-
#line 60 "ext/fastcsv/fastcsv.rl"
|
1554
|
-
{
|
1555
|
-
if (p == ts) {
|
1556
|
-
field = rb_enc_str_new("", 0, encoding);
|
1557
|
-
ENCODE;
|
1558
|
-
}
|
1559
|
-
// @note If we add an action on '""', we can skip some steps if no '""' is found.
|
1560
|
-
else if (p > ts) {
|
1561
|
-
// Operating on ts in-place produces odd behavior, FYI.
|
1562
|
-
char *copy = ALLOC_N(char, p - ts);
|
1563
|
-
memcpy(copy, ts, p - ts);
|
1564
|
-
|
1565
|
-
char *reader = ts, *writer = copy;
|
1566
|
-
int escaped = 0;
|
1567
|
-
|
1568
|
-
while (p > reader) {
|
1569
|
-
if (*reader == quote_char && !escaped) {
|
1570
|
-
// Skip the escaping character.
|
1571
|
-
escaped = 1;
|
1572
|
-
}
|
1573
|
-
else {
|
1574
|
-
escaped = 0;
|
1575
|
-
*writer++ = *reader;
|
1576
|
-
}
|
1577
|
-
reader++;
|
1578
|
-
}
|
1579
|
-
|
1580
|
-
field = rb_enc_str_new(copy, writer - copy, encoding);
|
1581
|
-
ENCODE;
|
1582
|
-
|
1583
|
-
if (copy != NULL) {
|
1584
|
-
free(copy);
|
1585
|
-
}
|
1586
|
-
}
|
1587
|
-
}
|
1588
|
-
#line 45 "ext/fastcsv/fastcsv.rl"
|
1589
|
-
{
|
1590
|
-
unclosed_line = 0;
|
1591
|
-
}
|
1592
|
-
#line 100 "ext/fastcsv/fastcsv.rl"
|
1593
|
-
{
|
1594
|
-
d->start = p;
|
1595
|
-
|
1596
|
-
if (len_row_sep) {
|
1597
|
-
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
1598
|
-
FREE;
|
1599
|
-
|
1600
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline - 1);
|
1601
|
-
}
|
1602
|
-
}
|
1603
|
-
else {
|
1604
|
-
len_row_sep = p - mark_row_sep;
|
1605
|
-
row_sep = ALLOC_N(char, len_row_sep);
|
1606
|
-
memcpy(row_sep, mark_row_sep, len_row_sep);
|
1607
|
-
}
|
1608
|
-
}
|
1609
|
-
goto st4;
|
1610
|
-
st4:
|
1611
|
-
if ( ++p == pe )
|
1612
|
-
goto _test_eof4;
|
1613
|
-
case 4:
|
1614
|
-
#line 1615 "ext/fastcsv/fastcsv.c"
|
1615
|
-
_widec = (*p);
|
1616
|
-
_widec = (short)(1152 + ((*p) - -128));
|
1617
|
-
if (
|
1618
|
-
#line 155 "ext/fastcsv/fastcsv.rl"
|
1619
|
-
(*p) == quote_char ) _widec += 256;
|
1620
|
-
if (
|
1621
|
-
#line 156 "ext/fastcsv/fastcsv.rl"
|
1622
|
-
(*p) == col_sep ) _widec += 512;
|
1623
|
-
switch( _widec ) {
|
1624
|
-
case 1280: goto tr13;
|
1625
|
-
case 1290: goto tr17;
|
1626
|
-
case 1293: goto tr18;
|
1627
|
-
case 1536: goto tr27;
|
1628
|
-
case 1546: goto tr28;
|
1629
|
-
case 1549: goto tr28;
|
1630
|
-
case 1792: goto tr20;
|
1631
|
-
case 1802: goto tr25;
|
1632
|
-
case 1805: goto tr26;
|
1633
|
-
case 2048: goto tr30;
|
1634
|
-
case 2058: goto tr31;
|
1635
|
-
case 2061: goto tr31;
|
1636
|
-
}
|
1637
|
-
if ( _widec < 1408 ) {
|
1638
|
-
if ( 1152 <= _widec && _widec <= 1407 )
|
1639
|
-
goto st2;
|
1640
|
-
} else if ( _widec > 1663 ) {
|
1641
|
-
if ( _widec > 1919 ) {
|
1642
|
-
if ( 1920 <= _widec && _widec <= 2175 )
|
1643
|
-
goto tr29;
|
1644
|
-
} else if ( _widec >= 1664 )
|
1645
|
-
goto tr23;
|
1646
|
-
} else
|
1647
|
-
goto tr12;
|
1648
|
-
goto tr0;
|
1649
|
-
tr17:
|
1650
|
-
#line 1 "NONE"
|
1651
|
-
{te = p+1;}
|
1652
|
-
#line 117 "ext/fastcsv/fastcsv.rl"
|
1653
|
-
{
|
1654
|
-
mark_row_sep = p;
|
1655
|
-
curline++;
|
1842
|
+
mark_row_sep = p;
|
1656
1843
|
|
1657
1844
|
if (d->start == 0 || p == d->start) {
|
1658
1845
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -1669,10 +1856,10 @@ tr17:
|
|
1669
1856
|
rb_yield(row);
|
1670
1857
|
row = rb_ary_new();
|
1671
1858
|
}
|
1672
|
-
#line
|
1859
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
1673
1860
|
{act = 2;}
|
1674
|
-
goto
|
1675
|
-
|
1861
|
+
goto st10;
|
1862
|
+
tr24:
|
1676
1863
|
#line 1 "NONE"
|
1677
1864
|
{te = p+1;}
|
1678
1865
|
#line 95 "ext/fastcsv/fastcsv.rl"
|
@@ -1680,12 +1867,11 @@ tr25:
|
|
1680
1867
|
rb_ary_push(row, field);
|
1681
1868
|
field = Qnil;
|
1682
1869
|
}
|
1683
|
-
#line
|
1870
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
1684
1871
|
{act = 1;}
|
1685
|
-
#line
|
1872
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
1686
1873
|
{
|
1687
1874
|
mark_row_sep = p;
|
1688
|
-
curline++;
|
1689
1875
|
|
1690
1876
|
if (d->start == 0 || p == d->start) {
|
1691
1877
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -1702,8 +1888,8 @@ tr25:
|
|
1702
1888
|
rb_yield(row);
|
1703
1889
|
row = rb_ary_new();
|
1704
1890
|
}
|
1705
|
-
goto
|
1706
|
-
|
1891
|
+
goto st10;
|
1892
|
+
tr30:
|
1707
1893
|
#line 1 "NONE"
|
1708
1894
|
{te = p+1;}
|
1709
1895
|
#line 41 "ext/fastcsv/fastcsv.rl"
|
@@ -1721,10 +1907,9 @@ tr36:
|
|
1721
1907
|
ENCODE;
|
1722
1908
|
}
|
1723
1909
|
}
|
1724
|
-
#line
|
1910
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
1725
1911
|
{
|
1726
1912
|
mark_row_sep = p;
|
1727
|
-
curline++;
|
1728
1913
|
|
1729
1914
|
if (d->start == 0 || p == d->start) {
|
1730
1915
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -1741,10 +1926,10 @@ tr36:
|
|
1741
1926
|
rb_yield(row);
|
1742
1927
|
row = rb_ary_new();
|
1743
1928
|
}
|
1744
|
-
#line
|
1929
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
1745
1930
|
{act = 2;}
|
1746
|
-
goto
|
1747
|
-
|
1931
|
+
goto st10;
|
1932
|
+
tr34:
|
1748
1933
|
#line 1 "NONE"
|
1749
1934
|
{te = p+1;}
|
1750
1935
|
#line 49 "ext/fastcsv/fastcsv.rl"
|
@@ -1767,12 +1952,11 @@ tr40:
|
|
1767
1952
|
rb_ary_push(row, field);
|
1768
1953
|
field = Qnil;
|
1769
1954
|
}
|
1770
|
-
#line
|
1955
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
1771
1956
|
{act = 1;}
|
1772
|
-
#line
|
1957
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
1773
1958
|
{
|
1774
1959
|
mark_row_sep = p;
|
1775
|
-
curline++;
|
1776
1960
|
|
1777
1961
|
if (d->start == 0 || p == d->start) {
|
1778
1962
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -1789,8 +1973,8 @@ tr40:
|
|
1789
1973
|
rb_yield(row);
|
1790
1974
|
row = rb_ary_new();
|
1791
1975
|
}
|
1792
|
-
goto
|
1793
|
-
|
1976
|
+
goto st10;
|
1977
|
+
tr41:
|
1794
1978
|
#line 1 "NONE"
|
1795
1979
|
{te = p+1;}
|
1796
1980
|
#line 100 "ext/fastcsv/fastcsv.rl"
|
@@ -1801,7 +1985,7 @@ tr48:
|
|
1801
1985
|
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
1802
1986
|
FREE;
|
1803
1987
|
|
1804
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline
|
1988
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
1805
1989
|
}
|
1806
1990
|
}
|
1807
1991
|
else {
|
@@ -1809,17 +1993,18 @@ tr48:
|
|
1809
1993
|
row_sep = ALLOC_N(char, len_row_sep);
|
1810
1994
|
memcpy(row_sep, mark_row_sep, len_row_sep);
|
1811
1995
|
}
|
1996
|
+
|
1997
|
+
curline++;
|
1812
1998
|
}
|
1813
|
-
#line
|
1999
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
1814
2000
|
{act = 2;}
|
1815
|
-
goto
|
1816
|
-
|
2001
|
+
goto st10;
|
2002
|
+
tr49:
|
1817
2003
|
#line 1 "NONE"
|
1818
2004
|
{te = p+1;}
|
1819
|
-
#line
|
2005
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
1820
2006
|
{
|
1821
2007
|
mark_row_sep = p;
|
1822
|
-
curline++;
|
1823
2008
|
|
1824
2009
|
if (d->start == 0 || p == d->start) {
|
1825
2010
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -1844,7 +2029,7 @@ tr51:
|
|
1844
2029
|
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
1845
2030
|
FREE;
|
1846
2031
|
|
1847
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline
|
2032
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
1848
2033
|
}
|
1849
2034
|
}
|
1850
2035
|
else {
|
@@ -1852,10 +2037,12 @@ tr51:
|
|
1852
2037
|
row_sep = ALLOC_N(char, len_row_sep);
|
1853
2038
|
memcpy(row_sep, mark_row_sep, len_row_sep);
|
1854
2039
|
}
|
2040
|
+
|
2041
|
+
curline++;
|
1855
2042
|
}
|
1856
|
-
#line
|
2043
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
1857
2044
|
{act = 2;}
|
1858
|
-
goto
|
2045
|
+
goto st10;
|
1859
2046
|
tr57:
|
1860
2047
|
#line 1 "NONE"
|
1861
2048
|
{te = p+1;}
|
@@ -1864,12 +2051,11 @@ tr57:
|
|
1864
2051
|
rb_ary_push(row, field);
|
1865
2052
|
field = Qnil;
|
1866
2053
|
}
|
1867
|
-
#line
|
2054
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
1868
2055
|
{act = 1;}
|
1869
|
-
#line
|
2056
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
1870
2057
|
{
|
1871
2058
|
mark_row_sep = p;
|
1872
|
-
curline++;
|
1873
2059
|
|
1874
2060
|
if (d->start == 0 || p == d->start) {
|
1875
2061
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -1894,7 +2080,7 @@ tr57:
|
|
1894
2080
|
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
1895
2081
|
FREE;
|
1896
2082
|
|
1897
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline
|
2083
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
1898
2084
|
}
|
1899
2085
|
}
|
1900
2086
|
else {
|
@@ -1902,36 +2088,34 @@ tr57:
|
|
1902
2088
|
row_sep = ALLOC_N(char, len_row_sep);
|
1903
2089
|
memcpy(row_sep, mark_row_sep, len_row_sep);
|
1904
2090
|
}
|
2091
|
+
|
2092
|
+
curline++;
|
1905
2093
|
}
|
1906
|
-
goto
|
1907
|
-
|
2094
|
+
goto st10;
|
2095
|
+
st10:
|
1908
2096
|
if ( ++p == pe )
|
1909
|
-
goto
|
1910
|
-
case
|
1911
|
-
#line
|
2097
|
+
goto _test_eof10;
|
2098
|
+
case 10:
|
2099
|
+
#line 2100 "ext/fastcsv/fastcsv.c"
|
1912
2100
|
_widec = (*p);
|
1913
2101
|
_widec = (short)(128 + ((*p) - -128));
|
1914
2102
|
if (
|
1915
|
-
#line
|
2103
|
+
#line 156 "ext/fastcsv/fastcsv.rl"
|
1916
2104
|
(*p) == quote_char ) _widec += 256;
|
1917
|
-
|
1918
|
-
|
1919
|
-
case 522: goto tr47;
|
1920
|
-
case 525: goto tr47;
|
1921
|
-
}
|
2105
|
+
if ( _widec == 256 )
|
2106
|
+
goto tr37;
|
1922
2107
|
if ( _widec > 383 ) {
|
1923
2108
|
if ( 384 <= _widec && _widec <= 639 )
|
1924
|
-
goto
|
2109
|
+
goto tr40;
|
1925
2110
|
} else if ( _widec >= 128 )
|
1926
|
-
goto
|
2111
|
+
goto tr39;
|
1927
2112
|
goto tr0;
|
1928
|
-
|
2113
|
+
tr17:
|
1929
2114
|
#line 1 "NONE"
|
1930
2115
|
{te = p+1;}
|
1931
|
-
#line
|
2116
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
1932
2117
|
{
|
1933
2118
|
mark_row_sep = p;
|
1934
|
-
curline++;
|
1935
2119
|
|
1936
2120
|
if (d->start == 0 || p == d->start) {
|
1937
2121
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -1948,10 +2132,10 @@ tr18:
|
|
1948
2132
|
rb_yield(row);
|
1949
2133
|
row = rb_ary_new();
|
1950
2134
|
}
|
1951
|
-
#line
|
2135
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
1952
2136
|
{act = 2;}
|
1953
|
-
goto
|
1954
|
-
|
2137
|
+
goto st11;
|
2138
|
+
tr25:
|
1955
2139
|
#line 1 "NONE"
|
1956
2140
|
{te = p+1;}
|
1957
2141
|
#line 95 "ext/fastcsv/fastcsv.rl"
|
@@ -1959,12 +2143,11 @@ tr26:
|
|
1959
2143
|
rb_ary_push(row, field);
|
1960
2144
|
field = Qnil;
|
1961
2145
|
}
|
1962
|
-
#line
|
2146
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
1963
2147
|
{act = 1;}
|
1964
|
-
#line
|
2148
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
1965
2149
|
{
|
1966
2150
|
mark_row_sep = p;
|
1967
|
-
curline++;
|
1968
2151
|
|
1969
2152
|
if (d->start == 0 || p == d->start) {
|
1970
2153
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -1981,8 +2164,8 @@ tr26:
|
|
1981
2164
|
rb_yield(row);
|
1982
2165
|
row = rb_ary_new();
|
1983
2166
|
}
|
1984
|
-
goto
|
1985
|
-
|
2167
|
+
goto st11;
|
2168
|
+
tr31:
|
1986
2169
|
#line 1 "NONE"
|
1987
2170
|
{te = p+1;}
|
1988
2171
|
#line 41 "ext/fastcsv/fastcsv.rl"
|
@@ -2000,10 +2183,9 @@ tr37:
|
|
2000
2183
|
ENCODE;
|
2001
2184
|
}
|
2002
2185
|
}
|
2003
|
-
#line
|
2186
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
2004
2187
|
{
|
2005
2188
|
mark_row_sep = p;
|
2006
|
-
curline++;
|
2007
2189
|
|
2008
2190
|
if (d->start == 0 || p == d->start) {
|
2009
2191
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -2020,10 +2202,10 @@ tr37:
|
|
2020
2202
|
rb_yield(row);
|
2021
2203
|
row = rb_ary_new();
|
2022
2204
|
}
|
2023
|
-
#line
|
2205
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
2024
2206
|
{act = 2;}
|
2025
|
-
goto
|
2026
|
-
|
2207
|
+
goto st11;
|
2208
|
+
tr35:
|
2027
2209
|
#line 1 "NONE"
|
2028
2210
|
{te = p+1;}
|
2029
2211
|
#line 49 "ext/fastcsv/fastcsv.rl"
|
@@ -2046,12 +2228,11 @@ tr41:
|
|
2046
2228
|
rb_ary_push(row, field);
|
2047
2229
|
field = Qnil;
|
2048
2230
|
}
|
2049
|
-
#line
|
2231
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
2050
2232
|
{act = 1;}
|
2051
|
-
#line
|
2233
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
2052
2234
|
{
|
2053
2235
|
mark_row_sep = p;
|
2054
|
-
curline++;
|
2055
2236
|
|
2056
2237
|
if (d->start == 0 || p == d->start) {
|
2057
2238
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -2068,14 +2249,13 @@ tr41:
|
|
2068
2249
|
rb_yield(row);
|
2069
2250
|
row = rb_ary_new();
|
2070
2251
|
}
|
2071
|
-
goto
|
2072
|
-
|
2252
|
+
goto st11;
|
2253
|
+
tr50:
|
2073
2254
|
#line 1 "NONE"
|
2074
2255
|
{te = p+1;}
|
2075
|
-
#line
|
2256
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
2076
2257
|
{
|
2077
2258
|
mark_row_sep = p;
|
2078
|
-
curline++;
|
2079
2259
|
|
2080
2260
|
if (d->start == 0 || p == d->start) {
|
2081
2261
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -2100,7 +2280,7 @@ tr52:
|
|
2100
2280
|
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
2101
2281
|
FREE;
|
2102
2282
|
|
2103
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline
|
2283
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
2104
2284
|
}
|
2105
2285
|
}
|
2106
2286
|
else {
|
@@ -2108,10 +2288,12 @@ tr52:
|
|
2108
2288
|
row_sep = ALLOC_N(char, len_row_sep);
|
2109
2289
|
memcpy(row_sep, mark_row_sep, len_row_sep);
|
2110
2290
|
}
|
2291
|
+
|
2292
|
+
curline++;
|
2111
2293
|
}
|
2112
|
-
#line
|
2294
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
2113
2295
|
{act = 2;}
|
2114
|
-
goto
|
2296
|
+
goto st11;
|
2115
2297
|
tr58:
|
2116
2298
|
#line 1 "NONE"
|
2117
2299
|
{te = p+1;}
|
@@ -2120,12 +2302,11 @@ tr58:
|
|
2120
2302
|
rb_ary_push(row, field);
|
2121
2303
|
field = Qnil;
|
2122
2304
|
}
|
2123
|
-
#line
|
2305
|
+
#line 168 "ext/fastcsv/fastcsv.rl"
|
2124
2306
|
{act = 1;}
|
2125
|
-
#line
|
2307
|
+
#line 119 "ext/fastcsv/fastcsv.rl"
|
2126
2308
|
{
|
2127
2309
|
mark_row_sep = p;
|
2128
|
-
curline++;
|
2129
2310
|
|
2130
2311
|
if (d->start == 0 || p == d->start) {
|
2131
2312
|
rb_ivar_set(self, s_row, rb_str_new2(""));
|
@@ -2150,7 +2331,7 @@ tr58:
|
|
2150
2331
|
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
2151
2332
|
FREE;
|
2152
2333
|
|
2153
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline
|
2334
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
2154
2335
|
}
|
2155
2336
|
}
|
2156
2337
|
else {
|
@@ -2158,31 +2339,32 @@ tr58:
|
|
2158
2339
|
row_sep = ALLOC_N(char, len_row_sep);
|
2159
2340
|
memcpy(row_sep, mark_row_sep, len_row_sep);
|
2160
2341
|
}
|
2342
|
+
|
2343
|
+
curline++;
|
2161
2344
|
}
|
2162
|
-
goto
|
2163
|
-
|
2345
|
+
goto st11;
|
2346
|
+
st11:
|
2164
2347
|
if ( ++p == pe )
|
2165
|
-
goto
|
2166
|
-
case
|
2167
|
-
#line
|
2348
|
+
goto _test_eof11;
|
2349
|
+
case 11:
|
2350
|
+
#line 2351 "ext/fastcsv/fastcsv.c"
|
2168
2351
|
_widec = (*p);
|
2169
2352
|
_widec = (short)(128 + ((*p) - -128));
|
2170
2353
|
if (
|
2171
|
-
#line
|
2354
|
+
#line 156 "ext/fastcsv/fastcsv.rl"
|
2172
2355
|
(*p) == quote_char ) _widec += 256;
|
2173
2356
|
switch( _widec ) {
|
2174
|
-
case 256: goto
|
2175
|
-
case 266: goto
|
2176
|
-
case 522: goto
|
2177
|
-
case 525: goto tr47;
|
2357
|
+
case 256: goto tr37;
|
2358
|
+
case 266: goto tr41;
|
2359
|
+
case 522: goto tr42;
|
2178
2360
|
}
|
2179
2361
|
if ( _widec > 383 ) {
|
2180
2362
|
if ( 384 <= _widec && _widec <= 639 )
|
2181
|
-
goto
|
2363
|
+
goto tr40;
|
2182
2364
|
} else if ( _widec >= 128 )
|
2183
|
-
goto
|
2365
|
+
goto tr39;
|
2184
2366
|
goto tr0;
|
2185
|
-
|
2367
|
+
tr42:
|
2186
2368
|
#line 1 "NONE"
|
2187
2369
|
{te = p+1;}
|
2188
2370
|
#line 60 "ext/fastcsv/fastcsv.rl"
|
@@ -2224,857 +2406,103 @@ tr28:
|
|
2224
2406
|
{
|
2225
2407
|
unclosed_line = 0;
|
2226
2408
|
}
|
2227
|
-
#line
|
2409
|
+
#line 100 "ext/fastcsv/fastcsv.rl"
|
2228
2410
|
{
|
2229
|
-
|
2230
|
-
curline++;
|
2411
|
+
d->start = p;
|
2231
2412
|
|
2232
|
-
if (
|
2233
|
-
|
2234
|
-
|
2235
|
-
else if (p > d->start) {
|
2236
|
-
rb_ivar_set(self, s_row, rb_str_new(d->start, p - d->start));
|
2237
|
-
}
|
2413
|
+
if (len_row_sep) {
|
2414
|
+
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
2415
|
+
FREE;
|
2238
2416
|
|
2239
|
-
|
2240
|
-
|
2241
|
-
|
2417
|
+
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline);
|
2418
|
+
}
|
2419
|
+
}
|
2420
|
+
else {
|
2421
|
+
len_row_sep = p - mark_row_sep;
|
2422
|
+
row_sep = ALLOC_N(char, len_row_sep);
|
2423
|
+
memcpy(row_sep, mark_row_sep, len_row_sep);
|
2242
2424
|
}
|
2243
2425
|
|
2244
|
-
|
2245
|
-
row = rb_ary_new();
|
2426
|
+
curline++;
|
2246
2427
|
}
|
2247
|
-
#line
|
2428
|
+
#line 169 "ext/fastcsv/fastcsv.rl"
|
2248
2429
|
{act = 2;}
|
2249
|
-
goto
|
2250
|
-
|
2251
|
-
#line 1 "NONE"
|
2252
|
-
{te = p+1;}
|
2253
|
-
#line 60 "ext/fastcsv/fastcsv.rl"
|
2254
|
-
{
|
2255
|
-
if (p == ts) {
|
2256
|
-
field = rb_enc_str_new("", 0, encoding);
|
2257
|
-
ENCODE;
|
2258
|
-
}
|
2259
|
-
// @note If we add an action on '""', we can skip some steps if no '""' is found.
|
2260
|
-
else if (p > ts) {
|
2261
|
-
// Operating on ts in-place produces odd behavior, FYI.
|
2262
|
-
char *copy = ALLOC_N(char, p - ts);
|
2263
|
-
memcpy(copy, ts, p - ts);
|
2264
|
-
|
2265
|
-
char *reader = ts, *writer = copy;
|
2266
|
-
int escaped = 0;
|
2267
|
-
|
2268
|
-
while (p > reader) {
|
2269
|
-
if (*reader == quote_char && !escaped) {
|
2270
|
-
// Skip the escaping character.
|
2271
|
-
escaped = 1;
|
2272
|
-
}
|
2273
|
-
else {
|
2274
|
-
escaped = 0;
|
2275
|
-
*writer++ = *reader;
|
2276
|
-
}
|
2277
|
-
reader++;
|
2278
|
-
}
|
2279
|
-
|
2280
|
-
field = rb_enc_str_new(copy, writer - copy, encoding);
|
2281
|
-
ENCODE;
|
2282
|
-
|
2283
|
-
if (copy != NULL) {
|
2284
|
-
free(copy);
|
2285
|
-
}
|
2286
|
-
}
|
2287
|
-
}
|
2288
|
-
#line 45 "ext/fastcsv/fastcsv.rl"
|
2289
|
-
{
|
2290
|
-
unclosed_line = 0;
|
2291
|
-
}
|
2292
|
-
#line 95 "ext/fastcsv/fastcsv.rl"
|
2293
|
-
{
|
2294
|
-
rb_ary_push(row, field);
|
2295
|
-
field = Qnil;
|
2296
|
-
}
|
2297
|
-
#line 165 "ext/fastcsv/fastcsv.rl"
|
2298
|
-
{act = 1;}
|
2299
|
-
#line 117 "ext/fastcsv/fastcsv.rl"
|
2300
|
-
{
|
2301
|
-
mark_row_sep = p;
|
2302
|
-
curline++;
|
2303
|
-
|
2304
|
-
if (d->start == 0 || p == d->start) {
|
2305
|
-
rb_ivar_set(self, s_row, rb_str_new2(""));
|
2306
|
-
}
|
2307
|
-
else if (p > d->start) {
|
2308
|
-
rb_ivar_set(self, s_row, rb_str_new(d->start, p - d->start));
|
2309
|
-
}
|
2310
|
-
|
2311
|
-
if (!NIL_P(field) || RARRAY_LEN(row)) { // same as new_field
|
2312
|
-
rb_ary_push(row, field);
|
2313
|
-
field = Qnil;
|
2314
|
-
}
|
2315
|
-
|
2316
|
-
rb_yield(row);
|
2317
|
-
row = rb_ary_new();
|
2318
|
-
}
|
2319
|
-
goto st13;
|
2320
|
-
tr49:
|
2321
|
-
#line 1 "NONE"
|
2322
|
-
{te = p+1;}
|
2323
|
-
#line 60 "ext/fastcsv/fastcsv.rl"
|
2324
|
-
{
|
2325
|
-
if (p == ts) {
|
2326
|
-
field = rb_enc_str_new("", 0, encoding);
|
2327
|
-
ENCODE;
|
2328
|
-
}
|
2329
|
-
// @note If we add an action on '""', we can skip some steps if no '""' is found.
|
2330
|
-
else if (p > ts) {
|
2331
|
-
// Operating on ts in-place produces odd behavior, FYI.
|
2332
|
-
char *copy = ALLOC_N(char, p - ts);
|
2333
|
-
memcpy(copy, ts, p - ts);
|
2334
|
-
|
2335
|
-
char *reader = ts, *writer = copy;
|
2336
|
-
int escaped = 0;
|
2337
|
-
|
2338
|
-
while (p > reader) {
|
2339
|
-
if (*reader == quote_char && !escaped) {
|
2340
|
-
// Skip the escaping character.
|
2341
|
-
escaped = 1;
|
2342
|
-
}
|
2343
|
-
else {
|
2344
|
-
escaped = 0;
|
2345
|
-
*writer++ = *reader;
|
2346
|
-
}
|
2347
|
-
reader++;
|
2348
|
-
}
|
2349
|
-
|
2350
|
-
field = rb_enc_str_new(copy, writer - copy, encoding);
|
2351
|
-
ENCODE;
|
2352
|
-
|
2353
|
-
if (copy != NULL) {
|
2354
|
-
free(copy);
|
2355
|
-
}
|
2356
|
-
}
|
2357
|
-
}
|
2358
|
-
#line 45 "ext/fastcsv/fastcsv.rl"
|
2359
|
-
{
|
2360
|
-
unclosed_line = 0;
|
2361
|
-
}
|
2362
|
-
#line 100 "ext/fastcsv/fastcsv.rl"
|
2363
|
-
{
|
2364
|
-
d->start = p;
|
2365
|
-
|
2366
|
-
if (len_row_sep) {
|
2367
|
-
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
2368
|
-
FREE;
|
2369
|
-
|
2370
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline - 1);
|
2371
|
-
}
|
2372
|
-
}
|
2373
|
-
else {
|
2374
|
-
len_row_sep = p - mark_row_sep;
|
2375
|
-
row_sep = ALLOC_N(char, len_row_sep);
|
2376
|
-
memcpy(row_sep, mark_row_sep, len_row_sep);
|
2377
|
-
}
|
2378
|
-
}
|
2379
|
-
#line 166 "ext/fastcsv/fastcsv.rl"
|
2380
|
-
{act = 2;}
|
2381
|
-
goto st13;
|
2382
|
-
tr54:
|
2383
|
-
#line 1 "NONE"
|
2384
|
-
{te = p+1;}
|
2385
|
-
#line 60 "ext/fastcsv/fastcsv.rl"
|
2386
|
-
{
|
2387
|
-
if (p == ts) {
|
2388
|
-
field = rb_enc_str_new("", 0, encoding);
|
2389
|
-
ENCODE;
|
2390
|
-
}
|
2391
|
-
// @note If we add an action on '""', we can skip some steps if no '""' is found.
|
2392
|
-
else if (p > ts) {
|
2393
|
-
// Operating on ts in-place produces odd behavior, FYI.
|
2394
|
-
char *copy = ALLOC_N(char, p - ts);
|
2395
|
-
memcpy(copy, ts, p - ts);
|
2396
|
-
|
2397
|
-
char *reader = ts, *writer = copy;
|
2398
|
-
int escaped = 0;
|
2399
|
-
|
2400
|
-
while (p > reader) {
|
2401
|
-
if (*reader == quote_char && !escaped) {
|
2402
|
-
// Skip the escaping character.
|
2403
|
-
escaped = 1;
|
2404
|
-
}
|
2405
|
-
else {
|
2406
|
-
escaped = 0;
|
2407
|
-
*writer++ = *reader;
|
2408
|
-
}
|
2409
|
-
reader++;
|
2410
|
-
}
|
2411
|
-
|
2412
|
-
field = rb_enc_str_new(copy, writer - copy, encoding);
|
2413
|
-
ENCODE;
|
2414
|
-
|
2415
|
-
if (copy != NULL) {
|
2416
|
-
free(copy);
|
2417
|
-
}
|
2418
|
-
}
|
2419
|
-
}
|
2420
|
-
#line 45 "ext/fastcsv/fastcsv.rl"
|
2421
|
-
{
|
2422
|
-
unclosed_line = 0;
|
2423
|
-
}
|
2424
|
-
#line 117 "ext/fastcsv/fastcsv.rl"
|
2425
|
-
{
|
2426
|
-
mark_row_sep = p;
|
2427
|
-
curline++;
|
2428
|
-
|
2429
|
-
if (d->start == 0 || p == d->start) {
|
2430
|
-
rb_ivar_set(self, s_row, rb_str_new2(""));
|
2431
|
-
}
|
2432
|
-
else if (p > d->start) {
|
2433
|
-
rb_ivar_set(self, s_row, rb_str_new(d->start, p - d->start));
|
2434
|
-
}
|
2435
|
-
|
2436
|
-
if (!NIL_P(field) || RARRAY_LEN(row)) { // same as new_field
|
2437
|
-
rb_ary_push(row, field);
|
2438
|
-
field = Qnil;
|
2439
|
-
}
|
2440
|
-
|
2441
|
-
rb_yield(row);
|
2442
|
-
row = rb_ary_new();
|
2443
|
-
}
|
2444
|
-
#line 100 "ext/fastcsv/fastcsv.rl"
|
2445
|
-
{
|
2446
|
-
d->start = p;
|
2447
|
-
|
2448
|
-
if (len_row_sep) {
|
2449
|
-
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
2450
|
-
FREE;
|
2451
|
-
|
2452
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline - 1);
|
2453
|
-
}
|
2454
|
-
}
|
2455
|
-
else {
|
2456
|
-
len_row_sep = p - mark_row_sep;
|
2457
|
-
row_sep = ALLOC_N(char, len_row_sep);
|
2458
|
-
memcpy(row_sep, mark_row_sep, len_row_sep);
|
2459
|
-
}
|
2460
|
-
}
|
2461
|
-
#line 166 "ext/fastcsv/fastcsv.rl"
|
2462
|
-
{act = 2;}
|
2463
|
-
goto st13;
|
2464
|
-
tr61:
|
2465
|
-
#line 1 "NONE"
|
2466
|
-
{te = p+1;}
|
2467
|
-
#line 60 "ext/fastcsv/fastcsv.rl"
|
2468
|
-
{
|
2469
|
-
if (p == ts) {
|
2470
|
-
field = rb_enc_str_new("", 0, encoding);
|
2471
|
-
ENCODE;
|
2472
|
-
}
|
2473
|
-
// @note If we add an action on '""', we can skip some steps if no '""' is found.
|
2474
|
-
else if (p > ts) {
|
2475
|
-
// Operating on ts in-place produces odd behavior, FYI.
|
2476
|
-
char *copy = ALLOC_N(char, p - ts);
|
2477
|
-
memcpy(copy, ts, p - ts);
|
2478
|
-
|
2479
|
-
char *reader = ts, *writer = copy;
|
2480
|
-
int escaped = 0;
|
2481
|
-
|
2482
|
-
while (p > reader) {
|
2483
|
-
if (*reader == quote_char && !escaped) {
|
2484
|
-
// Skip the escaping character.
|
2485
|
-
escaped = 1;
|
2486
|
-
}
|
2487
|
-
else {
|
2488
|
-
escaped = 0;
|
2489
|
-
*writer++ = *reader;
|
2490
|
-
}
|
2491
|
-
reader++;
|
2492
|
-
}
|
2493
|
-
|
2494
|
-
field = rb_enc_str_new(copy, writer - copy, encoding);
|
2495
|
-
ENCODE;
|
2496
|
-
|
2497
|
-
if (copy != NULL) {
|
2498
|
-
free(copy);
|
2499
|
-
}
|
2500
|
-
}
|
2501
|
-
}
|
2502
|
-
#line 45 "ext/fastcsv/fastcsv.rl"
|
2503
|
-
{
|
2504
|
-
unclosed_line = 0;
|
2505
|
-
}
|
2506
|
-
#line 95 "ext/fastcsv/fastcsv.rl"
|
2507
|
-
{
|
2508
|
-
rb_ary_push(row, field);
|
2509
|
-
field = Qnil;
|
2510
|
-
}
|
2511
|
-
#line 165 "ext/fastcsv/fastcsv.rl"
|
2512
|
-
{act = 1;}
|
2513
|
-
#line 117 "ext/fastcsv/fastcsv.rl"
|
2514
|
-
{
|
2515
|
-
mark_row_sep = p;
|
2516
|
-
curline++;
|
2517
|
-
|
2518
|
-
if (d->start == 0 || p == d->start) {
|
2519
|
-
rb_ivar_set(self, s_row, rb_str_new2(""));
|
2520
|
-
}
|
2521
|
-
else if (p > d->start) {
|
2522
|
-
rb_ivar_set(self, s_row, rb_str_new(d->start, p - d->start));
|
2523
|
-
}
|
2524
|
-
|
2525
|
-
if (!NIL_P(field) || RARRAY_LEN(row)) { // same as new_field
|
2526
|
-
rb_ary_push(row, field);
|
2527
|
-
field = Qnil;
|
2528
|
-
}
|
2529
|
-
|
2530
|
-
rb_yield(row);
|
2531
|
-
row = rb_ary_new();
|
2532
|
-
}
|
2533
|
-
#line 100 "ext/fastcsv/fastcsv.rl"
|
2534
|
-
{
|
2535
|
-
d->start = p;
|
2536
|
-
|
2537
|
-
if (len_row_sep) {
|
2538
|
-
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
2539
|
-
FREE;
|
2540
|
-
|
2541
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline - 1);
|
2542
|
-
}
|
2543
|
-
}
|
2544
|
-
else {
|
2545
|
-
len_row_sep = p - mark_row_sep;
|
2546
|
-
row_sep = ALLOC_N(char, len_row_sep);
|
2547
|
-
memcpy(row_sep, mark_row_sep, len_row_sep);
|
2548
|
-
}
|
2549
|
-
}
|
2550
|
-
goto st13;
|
2551
|
-
st13:
|
2552
|
-
if ( ++p == pe )
|
2553
|
-
goto _test_eof13;
|
2554
|
-
case 13:
|
2555
|
-
#line 2556 "ext/fastcsv/fastcsv.c"
|
2556
|
-
_widec = (*p);
|
2557
|
-
_widec = (short)(1152 + ((*p) - -128));
|
2558
|
-
if (
|
2559
|
-
#line 155 "ext/fastcsv/fastcsv.rl"
|
2560
|
-
(*p) == quote_char ) _widec += 256;
|
2561
|
-
if (
|
2562
|
-
#line 156 "ext/fastcsv/fastcsv.rl"
|
2563
|
-
(*p) == col_sep ) _widec += 512;
|
2564
|
-
switch( _widec ) {
|
2565
|
-
case 1280: goto tr50;
|
2566
|
-
case 1290: goto tr51;
|
2567
|
-
case 1293: goto tr52;
|
2568
|
-
case 1536: goto tr53;
|
2569
|
-
case 1546: goto tr54;
|
2570
|
-
case 1549: goto tr54;
|
2571
|
-
case 1792: goto tr56;
|
2572
|
-
case 1802: goto tr57;
|
2573
|
-
case 1805: goto tr58;
|
2574
|
-
case 2048: goto tr60;
|
2575
|
-
case 2058: goto tr61;
|
2576
|
-
case 2061: goto tr61;
|
2577
|
-
}
|
2578
|
-
if ( _widec < 1408 ) {
|
2579
|
-
if ( 1152 <= _widec && _widec <= 1407 )
|
2580
|
-
goto tr45;
|
2581
|
-
} else if ( _widec > 1663 ) {
|
2582
|
-
if ( _widec > 1919 ) {
|
2583
|
-
if ( 1920 <= _widec && _widec <= 2175 )
|
2584
|
-
goto tr59;
|
2585
|
-
} else if ( _widec >= 1664 )
|
2586
|
-
goto tr55;
|
2587
|
-
} else
|
2588
|
-
goto tr47;
|
2589
|
-
goto tr0;
|
2590
|
-
tr27:
|
2591
|
-
#line 1 "NONE"
|
2592
|
-
{te = p+1;}
|
2593
|
-
#line 60 "ext/fastcsv/fastcsv.rl"
|
2594
|
-
{
|
2595
|
-
if (p == ts) {
|
2596
|
-
field = rb_enc_str_new("", 0, encoding);
|
2597
|
-
ENCODE;
|
2598
|
-
}
|
2599
|
-
// @note If we add an action on '""', we can skip some steps if no '""' is found.
|
2600
|
-
else if (p > ts) {
|
2601
|
-
// Operating on ts in-place produces odd behavior, FYI.
|
2602
|
-
char *copy = ALLOC_N(char, p - ts);
|
2603
|
-
memcpy(copy, ts, p - ts);
|
2604
|
-
|
2605
|
-
char *reader = ts, *writer = copy;
|
2606
|
-
int escaped = 0;
|
2607
|
-
|
2608
|
-
while (p > reader) {
|
2609
|
-
if (*reader == quote_char && !escaped) {
|
2610
|
-
// Skip the escaping character.
|
2611
|
-
escaped = 1;
|
2612
|
-
}
|
2613
|
-
else {
|
2614
|
-
escaped = 0;
|
2615
|
-
*writer++ = *reader;
|
2616
|
-
}
|
2617
|
-
reader++;
|
2618
|
-
}
|
2619
|
-
|
2620
|
-
field = rb_enc_str_new(copy, writer - copy, encoding);
|
2621
|
-
ENCODE;
|
2622
|
-
|
2623
|
-
if (copy != NULL) {
|
2624
|
-
free(copy);
|
2625
|
-
}
|
2626
|
-
}
|
2627
|
-
}
|
2628
|
-
#line 45 "ext/fastcsv/fastcsv.rl"
|
2629
|
-
{
|
2630
|
-
unclosed_line = 0;
|
2631
|
-
}
|
2632
|
-
#line 137 "ext/fastcsv/fastcsv.rl"
|
2633
|
-
{
|
2634
|
-
if (d->start == 0 || p == d->start) { // same as new_row
|
2635
|
-
rb_ivar_set(self, s_row, rb_str_new2(""));
|
2636
|
-
}
|
2637
|
-
else if (p > d->start) {
|
2638
|
-
rb_ivar_set(self, s_row, rb_str_new(d->start, p - d->start));
|
2639
|
-
}
|
2640
|
-
|
2641
|
-
if (!NIL_P(field) || RARRAY_LEN(row)) {
|
2642
|
-
rb_ary_push(row, field);
|
2643
|
-
}
|
2644
|
-
|
2645
|
-
if (RARRAY_LEN(row)) {
|
2646
|
-
rb_yield(row);
|
2647
|
-
}
|
2648
|
-
}
|
2649
|
-
#line 167 "ext/fastcsv/fastcsv.rl"
|
2650
|
-
{act = 3;}
|
2651
|
-
goto st14;
|
2652
|
-
tr29:
|
2653
|
-
#line 1 "NONE"
|
2654
|
-
{te = p+1;}
|
2655
|
-
#line 60 "ext/fastcsv/fastcsv.rl"
|
2656
|
-
{
|
2657
|
-
if (p == ts) {
|
2658
|
-
field = rb_enc_str_new("", 0, encoding);
|
2659
|
-
ENCODE;
|
2660
|
-
}
|
2661
|
-
// @note If we add an action on '""', we can skip some steps if no '""' is found.
|
2662
|
-
else if (p > ts) {
|
2663
|
-
// Operating on ts in-place produces odd behavior, FYI.
|
2664
|
-
char *copy = ALLOC_N(char, p - ts);
|
2665
|
-
memcpy(copy, ts, p - ts);
|
2666
|
-
|
2667
|
-
char *reader = ts, *writer = copy;
|
2668
|
-
int escaped = 0;
|
2669
|
-
|
2670
|
-
while (p > reader) {
|
2671
|
-
if (*reader == quote_char && !escaped) {
|
2672
|
-
// Skip the escaping character.
|
2673
|
-
escaped = 1;
|
2674
|
-
}
|
2675
|
-
else {
|
2676
|
-
escaped = 0;
|
2677
|
-
*writer++ = *reader;
|
2678
|
-
}
|
2679
|
-
reader++;
|
2680
|
-
}
|
2681
|
-
|
2682
|
-
field = rb_enc_str_new(copy, writer - copy, encoding);
|
2683
|
-
ENCODE;
|
2684
|
-
|
2685
|
-
if (copy != NULL) {
|
2686
|
-
free(copy);
|
2687
|
-
}
|
2688
|
-
}
|
2689
|
-
}
|
2690
|
-
#line 45 "ext/fastcsv/fastcsv.rl"
|
2691
|
-
{
|
2692
|
-
unclosed_line = 0;
|
2693
|
-
}
|
2694
|
-
#line 95 "ext/fastcsv/fastcsv.rl"
|
2695
|
-
{
|
2696
|
-
rb_ary_push(row, field);
|
2697
|
-
field = Qnil;
|
2698
|
-
}
|
2699
|
-
#line 165 "ext/fastcsv/fastcsv.rl"
|
2700
|
-
{act = 1;}
|
2701
|
-
goto st14;
|
2702
|
-
tr30:
|
2703
|
-
#line 1 "NONE"
|
2704
|
-
{te = p+1;}
|
2705
|
-
#line 60 "ext/fastcsv/fastcsv.rl"
|
2706
|
-
{
|
2707
|
-
if (p == ts) {
|
2708
|
-
field = rb_enc_str_new("", 0, encoding);
|
2709
|
-
ENCODE;
|
2710
|
-
}
|
2711
|
-
// @note If we add an action on '""', we can skip some steps if no '""' is found.
|
2712
|
-
else if (p > ts) {
|
2713
|
-
// Operating on ts in-place produces odd behavior, FYI.
|
2714
|
-
char *copy = ALLOC_N(char, p - ts);
|
2715
|
-
memcpy(copy, ts, p - ts);
|
2716
|
-
|
2717
|
-
char *reader = ts, *writer = copy;
|
2718
|
-
int escaped = 0;
|
2719
|
-
|
2720
|
-
while (p > reader) {
|
2721
|
-
if (*reader == quote_char && !escaped) {
|
2722
|
-
// Skip the escaping character.
|
2723
|
-
escaped = 1;
|
2724
|
-
}
|
2725
|
-
else {
|
2726
|
-
escaped = 0;
|
2727
|
-
*writer++ = *reader;
|
2728
|
-
}
|
2729
|
-
reader++;
|
2730
|
-
}
|
2731
|
-
|
2732
|
-
field = rb_enc_str_new(copy, writer - copy, encoding);
|
2733
|
-
ENCODE;
|
2734
|
-
|
2735
|
-
if (copy != NULL) {
|
2736
|
-
free(copy);
|
2737
|
-
}
|
2738
|
-
}
|
2739
|
-
}
|
2740
|
-
#line 45 "ext/fastcsv/fastcsv.rl"
|
2741
|
-
{
|
2742
|
-
unclosed_line = 0;
|
2743
|
-
}
|
2744
|
-
#line 95 "ext/fastcsv/fastcsv.rl"
|
2745
|
-
{
|
2746
|
-
rb_ary_push(row, field);
|
2747
|
-
field = Qnil;
|
2748
|
-
}
|
2749
|
-
#line 165 "ext/fastcsv/fastcsv.rl"
|
2750
|
-
{act = 1;}
|
2751
|
-
#line 137 "ext/fastcsv/fastcsv.rl"
|
2752
|
-
{
|
2753
|
-
if (d->start == 0 || p == d->start) { // same as new_row
|
2754
|
-
rb_ivar_set(self, s_row, rb_str_new2(""));
|
2755
|
-
}
|
2756
|
-
else if (p > d->start) {
|
2757
|
-
rb_ivar_set(self, s_row, rb_str_new(d->start, p - d->start));
|
2758
|
-
}
|
2759
|
-
|
2760
|
-
if (!NIL_P(field) || RARRAY_LEN(row)) {
|
2761
|
-
rb_ary_push(row, field);
|
2762
|
-
}
|
2763
|
-
|
2764
|
-
if (RARRAY_LEN(row)) {
|
2765
|
-
rb_yield(row);
|
2766
|
-
}
|
2767
|
-
}
|
2768
|
-
goto st14;
|
2769
|
-
tr53:
|
2770
|
-
#line 1 "NONE"
|
2771
|
-
{te = p+1;}
|
2772
|
-
#line 60 "ext/fastcsv/fastcsv.rl"
|
2773
|
-
{
|
2774
|
-
if (p == ts) {
|
2775
|
-
field = rb_enc_str_new("", 0, encoding);
|
2776
|
-
ENCODE;
|
2777
|
-
}
|
2778
|
-
// @note If we add an action on '""', we can skip some steps if no '""' is found.
|
2779
|
-
else if (p > ts) {
|
2780
|
-
// Operating on ts in-place produces odd behavior, FYI.
|
2781
|
-
char *copy = ALLOC_N(char, p - ts);
|
2782
|
-
memcpy(copy, ts, p - ts);
|
2783
|
-
|
2784
|
-
char *reader = ts, *writer = copy;
|
2785
|
-
int escaped = 0;
|
2786
|
-
|
2787
|
-
while (p > reader) {
|
2788
|
-
if (*reader == quote_char && !escaped) {
|
2789
|
-
// Skip the escaping character.
|
2790
|
-
escaped = 1;
|
2791
|
-
}
|
2792
|
-
else {
|
2793
|
-
escaped = 0;
|
2794
|
-
*writer++ = *reader;
|
2795
|
-
}
|
2796
|
-
reader++;
|
2797
|
-
}
|
2798
|
-
|
2799
|
-
field = rb_enc_str_new(copy, writer - copy, encoding);
|
2800
|
-
ENCODE;
|
2801
|
-
|
2802
|
-
if (copy != NULL) {
|
2803
|
-
free(copy);
|
2804
|
-
}
|
2805
|
-
}
|
2806
|
-
}
|
2807
|
-
#line 45 "ext/fastcsv/fastcsv.rl"
|
2808
|
-
{
|
2809
|
-
unclosed_line = 0;
|
2810
|
-
}
|
2811
|
-
#line 100 "ext/fastcsv/fastcsv.rl"
|
2812
|
-
{
|
2813
|
-
d->start = p;
|
2814
|
-
|
2815
|
-
if (len_row_sep) {
|
2816
|
-
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
2817
|
-
FREE;
|
2818
|
-
|
2819
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline - 1);
|
2820
|
-
}
|
2821
|
-
}
|
2822
|
-
else {
|
2823
|
-
len_row_sep = p - mark_row_sep;
|
2824
|
-
row_sep = ALLOC_N(char, len_row_sep);
|
2825
|
-
memcpy(row_sep, mark_row_sep, len_row_sep);
|
2826
|
-
}
|
2827
|
-
}
|
2828
|
-
#line 137 "ext/fastcsv/fastcsv.rl"
|
2829
|
-
{
|
2830
|
-
if (d->start == 0 || p == d->start) { // same as new_row
|
2831
|
-
rb_ivar_set(self, s_row, rb_str_new2(""));
|
2832
|
-
}
|
2833
|
-
else if (p > d->start) {
|
2834
|
-
rb_ivar_set(self, s_row, rb_str_new(d->start, p - d->start));
|
2835
|
-
}
|
2836
|
-
|
2837
|
-
if (!NIL_P(field) || RARRAY_LEN(row)) {
|
2838
|
-
rb_ary_push(row, field);
|
2839
|
-
}
|
2840
|
-
|
2841
|
-
if (RARRAY_LEN(row)) {
|
2842
|
-
rb_yield(row);
|
2843
|
-
}
|
2844
|
-
}
|
2845
|
-
#line 167 "ext/fastcsv/fastcsv.rl"
|
2846
|
-
{act = 3;}
|
2847
|
-
goto st14;
|
2848
|
-
tr59:
|
2849
|
-
#line 1 "NONE"
|
2850
|
-
{te = p+1;}
|
2851
|
-
#line 60 "ext/fastcsv/fastcsv.rl"
|
2852
|
-
{
|
2853
|
-
if (p == ts) {
|
2854
|
-
field = rb_enc_str_new("", 0, encoding);
|
2855
|
-
ENCODE;
|
2856
|
-
}
|
2857
|
-
// @note If we add an action on '""', we can skip some steps if no '""' is found.
|
2858
|
-
else if (p > ts) {
|
2859
|
-
// Operating on ts in-place produces odd behavior, FYI.
|
2860
|
-
char *copy = ALLOC_N(char, p - ts);
|
2861
|
-
memcpy(copy, ts, p - ts);
|
2862
|
-
|
2863
|
-
char *reader = ts, *writer = copy;
|
2864
|
-
int escaped = 0;
|
2865
|
-
|
2866
|
-
while (p > reader) {
|
2867
|
-
if (*reader == quote_char && !escaped) {
|
2868
|
-
// Skip the escaping character.
|
2869
|
-
escaped = 1;
|
2870
|
-
}
|
2871
|
-
else {
|
2872
|
-
escaped = 0;
|
2873
|
-
*writer++ = *reader;
|
2874
|
-
}
|
2875
|
-
reader++;
|
2876
|
-
}
|
2877
|
-
|
2878
|
-
field = rb_enc_str_new(copy, writer - copy, encoding);
|
2879
|
-
ENCODE;
|
2880
|
-
|
2881
|
-
if (copy != NULL) {
|
2882
|
-
free(copy);
|
2883
|
-
}
|
2884
|
-
}
|
2885
|
-
}
|
2886
|
-
#line 45 "ext/fastcsv/fastcsv.rl"
|
2887
|
-
{
|
2888
|
-
unclosed_line = 0;
|
2889
|
-
}
|
2890
|
-
#line 95 "ext/fastcsv/fastcsv.rl"
|
2891
|
-
{
|
2892
|
-
rb_ary_push(row, field);
|
2893
|
-
field = Qnil;
|
2894
|
-
}
|
2895
|
-
#line 165 "ext/fastcsv/fastcsv.rl"
|
2896
|
-
{act = 1;}
|
2897
|
-
#line 100 "ext/fastcsv/fastcsv.rl"
|
2898
|
-
{
|
2899
|
-
d->start = p;
|
2900
|
-
|
2901
|
-
if (len_row_sep) {
|
2902
|
-
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
2903
|
-
FREE;
|
2904
|
-
|
2905
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline - 1);
|
2906
|
-
}
|
2907
|
-
}
|
2908
|
-
else {
|
2909
|
-
len_row_sep = p - mark_row_sep;
|
2910
|
-
row_sep = ALLOC_N(char, len_row_sep);
|
2911
|
-
memcpy(row_sep, mark_row_sep, len_row_sep);
|
2912
|
-
}
|
2913
|
-
}
|
2914
|
-
goto st14;
|
2915
|
-
tr60:
|
2916
|
-
#line 1 "NONE"
|
2917
|
-
{te = p+1;}
|
2918
|
-
#line 60 "ext/fastcsv/fastcsv.rl"
|
2919
|
-
{
|
2920
|
-
if (p == ts) {
|
2921
|
-
field = rb_enc_str_new("", 0, encoding);
|
2922
|
-
ENCODE;
|
2923
|
-
}
|
2924
|
-
// @note If we add an action on '""', we can skip some steps if no '""' is found.
|
2925
|
-
else if (p > ts) {
|
2926
|
-
// Operating on ts in-place produces odd behavior, FYI.
|
2927
|
-
char *copy = ALLOC_N(char, p - ts);
|
2928
|
-
memcpy(copy, ts, p - ts);
|
2929
|
-
|
2930
|
-
char *reader = ts, *writer = copy;
|
2931
|
-
int escaped = 0;
|
2932
|
-
|
2933
|
-
while (p > reader) {
|
2934
|
-
if (*reader == quote_char && !escaped) {
|
2935
|
-
// Skip the escaping character.
|
2936
|
-
escaped = 1;
|
2937
|
-
}
|
2938
|
-
else {
|
2939
|
-
escaped = 0;
|
2940
|
-
*writer++ = *reader;
|
2941
|
-
}
|
2942
|
-
reader++;
|
2943
|
-
}
|
2944
|
-
|
2945
|
-
field = rb_enc_str_new(copy, writer - copy, encoding);
|
2946
|
-
ENCODE;
|
2947
|
-
|
2948
|
-
if (copy != NULL) {
|
2949
|
-
free(copy);
|
2950
|
-
}
|
2951
|
-
}
|
2952
|
-
}
|
2953
|
-
#line 45 "ext/fastcsv/fastcsv.rl"
|
2954
|
-
{
|
2955
|
-
unclosed_line = 0;
|
2956
|
-
}
|
2957
|
-
#line 95 "ext/fastcsv/fastcsv.rl"
|
2958
|
-
{
|
2959
|
-
rb_ary_push(row, field);
|
2960
|
-
field = Qnil;
|
2961
|
-
}
|
2962
|
-
#line 165 "ext/fastcsv/fastcsv.rl"
|
2963
|
-
{act = 1;}
|
2964
|
-
#line 100 "ext/fastcsv/fastcsv.rl"
|
2965
|
-
{
|
2966
|
-
d->start = p;
|
2967
|
-
|
2968
|
-
if (len_row_sep) {
|
2969
|
-
if (p - mark_row_sep != len_row_sep || row_sep[0] != *mark_row_sep || (len_row_sep == 2 && row_sep[1] != *(mark_row_sep + 1))) {
|
2970
|
-
FREE;
|
2971
|
-
|
2972
|
-
rb_raise(eError, "Unquoted fields do not allow \\r or \\n (line %d).", curline - 1);
|
2973
|
-
}
|
2974
|
-
}
|
2975
|
-
else {
|
2976
|
-
len_row_sep = p - mark_row_sep;
|
2977
|
-
row_sep = ALLOC_N(char, len_row_sep);
|
2978
|
-
memcpy(row_sep, mark_row_sep, len_row_sep);
|
2979
|
-
}
|
2980
|
-
}
|
2981
|
-
#line 137 "ext/fastcsv/fastcsv.rl"
|
2982
|
-
{
|
2983
|
-
if (d->start == 0 || p == d->start) { // same as new_row
|
2984
|
-
rb_ivar_set(self, s_row, rb_str_new2(""));
|
2985
|
-
}
|
2986
|
-
else if (p > d->start) {
|
2987
|
-
rb_ivar_set(self, s_row, rb_str_new(d->start, p - d->start));
|
2988
|
-
}
|
2989
|
-
|
2990
|
-
if (!NIL_P(field) || RARRAY_LEN(row)) {
|
2991
|
-
rb_ary_push(row, field);
|
2992
|
-
}
|
2993
|
-
|
2994
|
-
if (RARRAY_LEN(row)) {
|
2995
|
-
rb_yield(row);
|
2996
|
-
}
|
2997
|
-
}
|
2998
|
-
goto st14;
|
2999
|
-
st14:
|
2430
|
+
goto st12;
|
2431
|
+
st12:
|
3000
2432
|
if ( ++p == pe )
|
3001
|
-
goto
|
3002
|
-
case
|
3003
|
-
#line
|
2433
|
+
goto _test_eof12;
|
2434
|
+
case 12:
|
2435
|
+
#line 2436 "ext/fastcsv/fastcsv.c"
|
3004
2436
|
_widec = (*p);
|
3005
2437
|
_widec = (short)(1152 + ((*p) - -128));
|
3006
2438
|
if (
|
3007
|
-
#line
|
2439
|
+
#line 156 "ext/fastcsv/fastcsv.rl"
|
3008
2440
|
(*p) == quote_char ) _widec += 256;
|
3009
2441
|
if (
|
3010
|
-
#line
|
2442
|
+
#line 157 "ext/fastcsv/fastcsv.rl"
|
3011
2443
|
(*p) == col_sep ) _widec += 512;
|
3012
2444
|
switch( _widec ) {
|
3013
|
-
case 1280: goto
|
3014
|
-
case 1290: goto
|
3015
|
-
case 1293: goto
|
3016
|
-
case 1536: goto
|
3017
|
-
case 1546: goto
|
3018
|
-
case 1549: goto
|
3019
|
-
case 1792: goto
|
3020
|
-
case 1802: goto
|
3021
|
-
case 1805: goto
|
3022
|
-
case 2048: goto
|
3023
|
-
case 2058: goto
|
3024
|
-
case 2061: goto
|
2445
|
+
case 1280: goto tr45;
|
2446
|
+
case 1290: goto tr46;
|
2447
|
+
case 1293: goto tr47;
|
2448
|
+
case 1536: goto tr48;
|
2449
|
+
case 1546: goto tr49;
|
2450
|
+
case 1549: goto tr50;
|
2451
|
+
case 1792: goto tr52;
|
2452
|
+
case 1802: goto tr53;
|
2453
|
+
case 1805: goto tr54;
|
2454
|
+
case 2048: goto tr56;
|
2455
|
+
case 2058: goto tr57;
|
2456
|
+
case 2061: goto tr58;
|
3025
2457
|
}
|
3026
2458
|
if ( _widec < 1408 ) {
|
3027
2459
|
if ( 1152 <= _widec && _widec <= 1407 )
|
3028
|
-
goto
|
2460
|
+
goto tr43;
|
3029
2461
|
} else if ( _widec > 1663 ) {
|
3030
2462
|
if ( _widec > 1919 ) {
|
3031
2463
|
if ( 1920 <= _widec && _widec <= 2175 )
|
3032
|
-
goto
|
2464
|
+
goto tr55;
|
3033
2465
|
} else if ( _widec >= 1664 )
|
3034
|
-
goto
|
2466
|
+
goto tr51;
|
3035
2467
|
} else
|
3036
|
-
goto
|
3037
|
-
goto
|
2468
|
+
goto tr39;
|
2469
|
+
goto tr44;
|
3038
2470
|
}
|
3039
|
-
|
2471
|
+
_test_eof4: cs = 4; goto _test_eof;
|
3040
2472
|
_test_eof1: cs = 1; goto _test_eof;
|
2473
|
+
_test_eof5: cs = 5; goto _test_eof;
|
3041
2474
|
_test_eof6: cs = 6; goto _test_eof;
|
3042
2475
|
_test_eof7: cs = 7; goto _test_eof;
|
3043
2476
|
_test_eof8: cs = 8; goto _test_eof;
|
3044
|
-
_test_eof9: cs = 9; goto _test_eof;
|
3045
2477
|
_test_eof2: cs = 2; goto _test_eof;
|
3046
2478
|
_test_eof3: cs = 3; goto _test_eof;
|
2479
|
+
_test_eof9: cs = 9; goto _test_eof;
|
3047
2480
|
_test_eof10: cs = 10; goto _test_eof;
|
3048
|
-
_test_eof4: cs = 4; goto _test_eof;
|
3049
2481
|
_test_eof11: cs = 11; goto _test_eof;
|
3050
2482
|
_test_eof12: cs = 12; goto _test_eof;
|
3051
|
-
_test_eof13: cs = 13; goto _test_eof;
|
3052
|
-
_test_eof14: cs = 14; goto _test_eof;
|
3053
2483
|
|
3054
2484
|
_test_eof: {}
|
3055
2485
|
if ( p == eof )
|
3056
2486
|
{
|
3057
2487
|
switch ( cs ) {
|
3058
2488
|
case 1: goto tr0;
|
3059
|
-
case
|
3060
|
-
case
|
3061
|
-
case
|
3062
|
-
case
|
2489
|
+
case 5: goto tr36;
|
2490
|
+
case 6: goto tr37;
|
2491
|
+
case 7: goto tr37;
|
2492
|
+
case 8: goto tr36;
|
3063
2493
|
case 2: goto tr0;
|
3064
2494
|
case 3: goto tr0;
|
3065
|
-
case
|
3066
|
-
case
|
3067
|
-
case 11: goto
|
2495
|
+
case 9: goto tr0;
|
2496
|
+
case 10: goto tr37;
|
2497
|
+
case 11: goto tr37;
|
3068
2498
|
case 12: goto tr43;
|
3069
|
-
case 13: goto tr43;
|
3070
|
-
case 14: goto tr0;
|
3071
2499
|
}
|
3072
2500
|
}
|
3073
2501
|
|
3074
2502
|
_out: {}
|
3075
2503
|
}
|
3076
2504
|
|
3077
|
-
#line
|
2505
|
+
#line 447 "ext/fastcsv/fastcsv.rl"
|
3078
2506
|
|
3079
2507
|
if (done && cs < raw_parse_first_final) {
|
3080
2508
|
if (d->start == 0 || p == d->start) { // same as new_row
|
@@ -3100,6 +2528,13 @@ case 14:
|
|
3100
2528
|
else if (io) {
|
3101
2529
|
have = pe - ts;
|
3102
2530
|
memmove(buf, ts, have);
|
2531
|
+
// @see https://github.com/hpricot/hpricot/blob/master/ext/hpricot_scan/hpricot_scan.rl#L92
|
2532
|
+
if (d->start > ts) {
|
2533
|
+
d->start = buf + (d->start - ts);
|
2534
|
+
}
|
2535
|
+
if (mark_row_sep >= ts) {
|
2536
|
+
mark_row_sep = buf + (mark_row_sep - ts);
|
2537
|
+
}
|
3103
2538
|
te = buf + (te - ts);
|
3104
2539
|
ts = buf;
|
3105
2540
|
}
|