gherkin 2.11.2 → 2.11.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -0
- data/History.md +9 -0
- data/README.md +2 -1
- data/ext/gherkin_lexer_ar/gherkin_lexer_ar.c +8 -8
- data/ext/gherkin_lexer_bg/gherkin_lexer_bg.c +8 -8
- data/ext/gherkin_lexer_bm/gherkin_lexer_bm.c +8 -8
- data/ext/gherkin_lexer_ca/gherkin_lexer_ca.c +8 -8
- data/ext/gherkin_lexer_cs/gherkin_lexer_cs.c +8 -8
- data/ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c +8 -8
- data/ext/gherkin_lexer_da/gherkin_lexer_da.c +8 -8
- data/ext/gherkin_lexer_de/gherkin_lexer_de.c +8 -8
- data/ext/gherkin_lexer_en/gherkin_lexer_en.c +8 -8
- data/ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c +915 -373
- data/ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c +8 -8
- data/ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c +8 -8
- data/ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c +8 -8
- data/ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c +8 -8
- data/ext/gherkin_lexer_eo/gherkin_lexer_eo.c +8 -8
- data/ext/gherkin_lexer_es/gherkin_lexer_es.c +8 -8
- data/ext/gherkin_lexer_et/gherkin_lexer_et.c +8 -8
- data/ext/gherkin_lexer_fi/gherkin_lexer_fi.c +8 -8
- data/ext/gherkin_lexer_fr/gherkin_lexer_fr.c +8 -8
- data/ext/gherkin_lexer_he/gherkin_lexer_he.c +8 -8
- data/ext/gherkin_lexer_hr/gherkin_lexer_hr.c +8 -8
- data/ext/gherkin_lexer_hu/gherkin_lexer_hu.c +8 -8
- data/ext/gherkin_lexer_id/gherkin_lexer_id.c +8 -8
- data/ext/gherkin_lexer_is/gherkin_lexer_is.c +8 -8
- data/ext/gherkin_lexer_it/gherkin_lexer_it.c +8 -8
- data/ext/gherkin_lexer_ja/gherkin_lexer_ja.c +8 -8
- data/ext/gherkin_lexer_ko/gherkin_lexer_ko.c +8 -8
- data/ext/gherkin_lexer_lt/gherkin_lexer_lt.c +8 -8
- data/ext/gherkin_lexer_lu/gherkin_lexer_lu.c +8 -8
- data/ext/gherkin_lexer_lv/gherkin_lexer_lv.c +8 -8
- data/ext/gherkin_lexer_nl/gherkin_lexer_nl.c +8 -8
- data/ext/gherkin_lexer_no/gherkin_lexer_no.c +8 -8
- data/ext/gherkin_lexer_pl/gherkin_lexer_pl.c +8 -8
- data/ext/gherkin_lexer_pt/gherkin_lexer_pt.c +8 -8
- data/ext/gherkin_lexer_ro/gherkin_lexer_ro.c +8 -8
- data/ext/gherkin_lexer_ru/gherkin_lexer_ru.c +8 -8
- data/ext/gherkin_lexer_sk/gherkin_lexer_sk.c +8 -8
- data/ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c +8 -8
- data/ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c +8 -8
- data/ext/gherkin_lexer_sv/gherkin_lexer_sv.c +8 -8
- data/ext/gherkin_lexer_tr/gherkin_lexer_tr.c +8 -8
- data/ext/gherkin_lexer_uk/gherkin_lexer_uk.c +8 -8
- data/ext/gherkin_lexer_uz/gherkin_lexer_uz.c +8 -8
- data/ext/gherkin_lexer_vi/gherkin_lexer_vi.c +8 -8
- data/ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c +8 -8
- data/ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c +8 -8
- data/gherkin.gemspec +4 -4
- data/lib/gherkin/i18n.json +10 -10
- data/lib/gherkin/i18n.rb +1 -1
- data/ragel/lexer.c.rl.erb +5 -5
- data/tasks/apidoc.rake +32 -0
- data/tasks/ikvm.rake +1 -1
- data/tasks/ragel_task.rb +1 -0
- data/tasks/release.rake +1 -19
- metadata +10 -10
- data/tasks/yard.rake +0 -7
@@ -1005,7 +1005,7 @@ static VALUE
|
|
1005
1005
|
unindent(VALUE con, int start_col)
|
1006
1006
|
{
|
1007
1007
|
VALUE re;
|
1008
|
-
|
1008
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
1009
1009
|
char pat[32];
|
1010
1010
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
1011
1011
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1436,14 +1436,14 @@ _match:
|
|
1436
1436
|
buff = data;
|
1437
1437
|
}
|
1438
1438
|
|
1439
|
-
|
1439
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1440
1440
|
newstr_val = rb_str_new(buff, len);
|
1441
1441
|
newstr = RSTRING_PTR(newstr_val);
|
1442
1442
|
|
1443
1443
|
|
1444
1444
|
for (count = 0; count < len; count++) {
|
1445
1445
|
if(buff[count] == 10) {
|
1446
|
-
newstr[newstr_count] = '\0';
|
1446
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1447
1447
|
break;
|
1448
1448
|
} else {
|
1449
1449
|
if (buff[count] == '%') {
|
@@ -1457,7 +1457,7 @@ _match:
|
|
1457
1457
|
}
|
1458
1458
|
|
1459
1459
|
line = lexer->line_number;
|
1460
|
-
lexer_init(lexer);
|
1460
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1461
1461
|
raise_lexer_error(newstr, line);
|
1462
1462
|
} else {
|
1463
1463
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1499,14 +1499,14 @@ _again:
|
|
1499
1499
|
buff = data;
|
1500
1500
|
}
|
1501
1501
|
|
1502
|
-
|
1502
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1503
1503
|
newstr_val = rb_str_new(buff, len);
|
1504
1504
|
newstr = RSTRING_PTR(newstr_val);
|
1505
1505
|
|
1506
1506
|
|
1507
1507
|
for (count = 0; count < len; count++) {
|
1508
1508
|
if(buff[count] == 10) {
|
1509
|
-
newstr[newstr_count] = '\0';
|
1509
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1510
1510
|
break;
|
1511
1511
|
} else {
|
1512
1512
|
if (buff[count] == '%') {
|
@@ -1520,7 +1520,7 @@ _again:
|
|
1520
1520
|
}
|
1521
1521
|
|
1522
1522
|
line = lexer->line_number;
|
1523
|
-
lexer_init(lexer);
|
1523
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1524
1524
|
raise_lexer_error(newstr, line);
|
1525
1525
|
} else {
|
1526
1526
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1541,7 +1541,7 @@ _again:
|
|
1541
1541
|
assert(lexer->content_start <= len && "content starts after data end");
|
1542
1542
|
assert(lexer->mark < len && "mark is after data end");
|
1543
1543
|
|
1544
|
-
|
1544
|
+
/* Reset lexer by re-initializing the whole thing */
|
1545
1545
|
lexer_init(lexer);
|
1546
1546
|
|
1547
1547
|
if (cs == lexer_error) {
|
@@ -762,7 +762,7 @@ static VALUE
|
|
762
762
|
unindent(VALUE con, int start_col)
|
763
763
|
{
|
764
764
|
VALUE re;
|
765
|
-
|
765
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
766
766
|
char pat[32];
|
767
767
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
768
768
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1193,14 +1193,14 @@ _match:
|
|
1193
1193
|
buff = data;
|
1194
1194
|
}
|
1195
1195
|
|
1196
|
-
|
1196
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1197
1197
|
newstr_val = rb_str_new(buff, len);
|
1198
1198
|
newstr = RSTRING_PTR(newstr_val);
|
1199
1199
|
|
1200
1200
|
|
1201
1201
|
for (count = 0; count < len; count++) {
|
1202
1202
|
if(buff[count] == 10) {
|
1203
|
-
newstr[newstr_count] = '\0';
|
1203
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1204
1204
|
break;
|
1205
1205
|
} else {
|
1206
1206
|
if (buff[count] == '%') {
|
@@ -1214,7 +1214,7 @@ _match:
|
|
1214
1214
|
}
|
1215
1215
|
|
1216
1216
|
line = lexer->line_number;
|
1217
|
-
lexer_init(lexer);
|
1217
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1218
1218
|
raise_lexer_error(newstr, line);
|
1219
1219
|
} else {
|
1220
1220
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1256,14 +1256,14 @@ _again:
|
|
1256
1256
|
buff = data;
|
1257
1257
|
}
|
1258
1258
|
|
1259
|
-
|
1259
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1260
1260
|
newstr_val = rb_str_new(buff, len);
|
1261
1261
|
newstr = RSTRING_PTR(newstr_val);
|
1262
1262
|
|
1263
1263
|
|
1264
1264
|
for (count = 0; count < len; count++) {
|
1265
1265
|
if(buff[count] == 10) {
|
1266
|
-
newstr[newstr_count] = '\0';
|
1266
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1267
1267
|
break;
|
1268
1268
|
} else {
|
1269
1269
|
if (buff[count] == '%') {
|
@@ -1277,7 +1277,7 @@ _again:
|
|
1277
1277
|
}
|
1278
1278
|
|
1279
1279
|
line = lexer->line_number;
|
1280
|
-
lexer_init(lexer);
|
1280
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1281
1281
|
raise_lexer_error(newstr, line);
|
1282
1282
|
} else {
|
1283
1283
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1298,7 +1298,7 @@ _again:
|
|
1298
1298
|
assert(lexer->content_start <= len && "content starts after data end");
|
1299
1299
|
assert(lexer->mark < len && "mark is after data end");
|
1300
1300
|
|
1301
|
-
|
1301
|
+
/* Reset lexer by re-initializing the whole thing */
|
1302
1302
|
lexer_init(lexer);
|
1303
1303
|
|
1304
1304
|
if (cs == lexer_error) {
|
@@ -785,7 +785,7 @@ static VALUE
|
|
785
785
|
unindent(VALUE con, int start_col)
|
786
786
|
{
|
787
787
|
VALUE re;
|
788
|
-
|
788
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
789
789
|
char pat[32];
|
790
790
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
791
791
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1216,14 +1216,14 @@ _match:
|
|
1216
1216
|
buff = data;
|
1217
1217
|
}
|
1218
1218
|
|
1219
|
-
|
1219
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1220
1220
|
newstr_val = rb_str_new(buff, len);
|
1221
1221
|
newstr = RSTRING_PTR(newstr_val);
|
1222
1222
|
|
1223
1223
|
|
1224
1224
|
for (count = 0; count < len; count++) {
|
1225
1225
|
if(buff[count] == 10) {
|
1226
|
-
newstr[newstr_count] = '\0';
|
1226
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1227
1227
|
break;
|
1228
1228
|
} else {
|
1229
1229
|
if (buff[count] == '%') {
|
@@ -1237,7 +1237,7 @@ _match:
|
|
1237
1237
|
}
|
1238
1238
|
|
1239
1239
|
line = lexer->line_number;
|
1240
|
-
lexer_init(lexer);
|
1240
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1241
1241
|
raise_lexer_error(newstr, line);
|
1242
1242
|
} else {
|
1243
1243
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1279,14 +1279,14 @@ _again:
|
|
1279
1279
|
buff = data;
|
1280
1280
|
}
|
1281
1281
|
|
1282
|
-
|
1282
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1283
1283
|
newstr_val = rb_str_new(buff, len);
|
1284
1284
|
newstr = RSTRING_PTR(newstr_val);
|
1285
1285
|
|
1286
1286
|
|
1287
1287
|
for (count = 0; count < len; count++) {
|
1288
1288
|
if(buff[count] == 10) {
|
1289
|
-
newstr[newstr_count] = '\0';
|
1289
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1290
1290
|
break;
|
1291
1291
|
} else {
|
1292
1292
|
if (buff[count] == '%') {
|
@@ -1300,7 +1300,7 @@ _again:
|
|
1300
1300
|
}
|
1301
1301
|
|
1302
1302
|
line = lexer->line_number;
|
1303
|
-
lexer_init(lexer);
|
1303
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1304
1304
|
raise_lexer_error(newstr, line);
|
1305
1305
|
} else {
|
1306
1306
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1321,7 +1321,7 @@ _again:
|
|
1321
1321
|
assert(lexer->content_start <= len && "content starts after data end");
|
1322
1322
|
assert(lexer->mark < len && "mark is after data end");
|
1323
1323
|
|
1324
|
-
|
1324
|
+
/* Reset lexer by re-initializing the whole thing */
|
1325
1325
|
lexer_init(lexer);
|
1326
1326
|
|
1327
1327
|
if (cs == lexer_error) {
|
@@ -1379,7 +1379,7 @@ static VALUE
|
|
1379
1379
|
unindent(VALUE con, int start_col)
|
1380
1380
|
{
|
1381
1381
|
VALUE re;
|
1382
|
-
|
1382
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
1383
1383
|
char pat[32];
|
1384
1384
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
1385
1385
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1810,14 +1810,14 @@ _match:
|
|
1810
1810
|
buff = data;
|
1811
1811
|
}
|
1812
1812
|
|
1813
|
-
|
1813
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1814
1814
|
newstr_val = rb_str_new(buff, len);
|
1815
1815
|
newstr = RSTRING_PTR(newstr_val);
|
1816
1816
|
|
1817
1817
|
|
1818
1818
|
for (count = 0; count < len; count++) {
|
1819
1819
|
if(buff[count] == 10) {
|
1820
|
-
newstr[newstr_count] = '\0';
|
1820
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1821
1821
|
break;
|
1822
1822
|
} else {
|
1823
1823
|
if (buff[count] == '%') {
|
@@ -1831,7 +1831,7 @@ _match:
|
|
1831
1831
|
}
|
1832
1832
|
|
1833
1833
|
line = lexer->line_number;
|
1834
|
-
lexer_init(lexer);
|
1834
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1835
1835
|
raise_lexer_error(newstr, line);
|
1836
1836
|
} else {
|
1837
1837
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1873,14 +1873,14 @@ _again:
|
|
1873
1873
|
buff = data;
|
1874
1874
|
}
|
1875
1875
|
|
1876
|
-
|
1876
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1877
1877
|
newstr_val = rb_str_new(buff, len);
|
1878
1878
|
newstr = RSTRING_PTR(newstr_val);
|
1879
1879
|
|
1880
1880
|
|
1881
1881
|
for (count = 0; count < len; count++) {
|
1882
1882
|
if(buff[count] == 10) {
|
1883
|
-
newstr[newstr_count] = '\0';
|
1883
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1884
1884
|
break;
|
1885
1885
|
} else {
|
1886
1886
|
if (buff[count] == '%') {
|
@@ -1894,7 +1894,7 @@ _again:
|
|
1894
1894
|
}
|
1895
1895
|
|
1896
1896
|
line = lexer->line_number;
|
1897
|
-
lexer_init(lexer);
|
1897
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1898
1898
|
raise_lexer_error(newstr, line);
|
1899
1899
|
} else {
|
1900
1900
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1915,7 +1915,7 @@ _again:
|
|
1915
1915
|
assert(lexer->content_start <= len && "content starts after data end");
|
1916
1916
|
assert(lexer->mark < len && "mark is after data end");
|
1917
1917
|
|
1918
|
-
|
1918
|
+
/* Reset lexer by re-initializing the whole thing */
|
1919
1919
|
lexer_init(lexer);
|
1920
1920
|
|
1921
1921
|
if (cs == lexer_error) {
|
@@ -1089,7 +1089,7 @@ static VALUE
|
|
1089
1089
|
unindent(VALUE con, int start_col)
|
1090
1090
|
{
|
1091
1091
|
VALUE re;
|
1092
|
-
|
1092
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
1093
1093
|
char pat[32];
|
1094
1094
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
1095
1095
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1520,14 +1520,14 @@ _match:
|
|
1520
1520
|
buff = data;
|
1521
1521
|
}
|
1522
1522
|
|
1523
|
-
|
1523
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1524
1524
|
newstr_val = rb_str_new(buff, len);
|
1525
1525
|
newstr = RSTRING_PTR(newstr_val);
|
1526
1526
|
|
1527
1527
|
|
1528
1528
|
for (count = 0; count < len; count++) {
|
1529
1529
|
if(buff[count] == 10) {
|
1530
|
-
newstr[newstr_count] = '\0';
|
1530
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1531
1531
|
break;
|
1532
1532
|
} else {
|
1533
1533
|
if (buff[count] == '%') {
|
@@ -1541,7 +1541,7 @@ _match:
|
|
1541
1541
|
}
|
1542
1542
|
|
1543
1543
|
line = lexer->line_number;
|
1544
|
-
lexer_init(lexer);
|
1544
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1545
1545
|
raise_lexer_error(newstr, line);
|
1546
1546
|
} else {
|
1547
1547
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1583,14 +1583,14 @@ _again:
|
|
1583
1583
|
buff = data;
|
1584
1584
|
}
|
1585
1585
|
|
1586
|
-
|
1586
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1587
1587
|
newstr_val = rb_str_new(buff, len);
|
1588
1588
|
newstr = RSTRING_PTR(newstr_val);
|
1589
1589
|
|
1590
1590
|
|
1591
1591
|
for (count = 0; count < len; count++) {
|
1592
1592
|
if(buff[count] == 10) {
|
1593
|
-
newstr[newstr_count] = '\0';
|
1593
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1594
1594
|
break;
|
1595
1595
|
} else {
|
1596
1596
|
if (buff[count] == '%') {
|
@@ -1604,7 +1604,7 @@ _again:
|
|
1604
1604
|
}
|
1605
1605
|
|
1606
1606
|
line = lexer->line_number;
|
1607
|
-
lexer_init(lexer);
|
1607
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1608
1608
|
raise_lexer_error(newstr, line);
|
1609
1609
|
} else {
|
1610
1610
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1625,7 +1625,7 @@ _again:
|
|
1625
1625
|
assert(lexer->content_start <= len && "content starts after data end");
|
1626
1626
|
assert(lexer->mark < len && "mark is after data end");
|
1627
1627
|
|
1628
|
-
|
1628
|
+
/* Reset lexer by re-initializing the whole thing */
|
1629
1629
|
lexer_init(lexer);
|
1630
1630
|
|
1631
1631
|
if (cs == lexer_error) {
|
@@ -896,7 +896,7 @@ static VALUE
|
|
896
896
|
unindent(VALUE con, int start_col)
|
897
897
|
{
|
898
898
|
VALUE re;
|
899
|
-
|
899
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
900
900
|
char pat[32];
|
901
901
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
902
902
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1327,14 +1327,14 @@ _match:
|
|
1327
1327
|
buff = data;
|
1328
1328
|
}
|
1329
1329
|
|
1330
|
-
|
1330
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1331
1331
|
newstr_val = rb_str_new(buff, len);
|
1332
1332
|
newstr = RSTRING_PTR(newstr_val);
|
1333
1333
|
|
1334
1334
|
|
1335
1335
|
for (count = 0; count < len; count++) {
|
1336
1336
|
if(buff[count] == 10) {
|
1337
|
-
newstr[newstr_count] = '\0';
|
1337
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1338
1338
|
break;
|
1339
1339
|
} else {
|
1340
1340
|
if (buff[count] == '%') {
|
@@ -1348,7 +1348,7 @@ _match:
|
|
1348
1348
|
}
|
1349
1349
|
|
1350
1350
|
line = lexer->line_number;
|
1351
|
-
lexer_init(lexer);
|
1351
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1352
1352
|
raise_lexer_error(newstr, line);
|
1353
1353
|
} else {
|
1354
1354
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1390,14 +1390,14 @@ _again:
|
|
1390
1390
|
buff = data;
|
1391
1391
|
}
|
1392
1392
|
|
1393
|
-
|
1393
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1394
1394
|
newstr_val = rb_str_new(buff, len);
|
1395
1395
|
newstr = RSTRING_PTR(newstr_val);
|
1396
1396
|
|
1397
1397
|
|
1398
1398
|
for (count = 0; count < len; count++) {
|
1399
1399
|
if(buff[count] == 10) {
|
1400
|
-
newstr[newstr_count] = '\0';
|
1400
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1401
1401
|
break;
|
1402
1402
|
} else {
|
1403
1403
|
if (buff[count] == '%') {
|
@@ -1411,7 +1411,7 @@ _again:
|
|
1411
1411
|
}
|
1412
1412
|
|
1413
1413
|
line = lexer->line_number;
|
1414
|
-
lexer_init(lexer);
|
1414
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1415
1415
|
raise_lexer_error(newstr, line);
|
1416
1416
|
} else {
|
1417
1417
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1432,7 +1432,7 @@ _again:
|
|
1432
1432
|
assert(lexer->content_start <= len && "content starts after data end");
|
1433
1433
|
assert(lexer->mark < len && "mark is after data end");
|
1434
1434
|
|
1435
|
-
|
1435
|
+
/* Reset lexer by re-initializing the whole thing */
|
1436
1436
|
lexer_init(lexer);
|
1437
1437
|
|
1438
1438
|
if (cs == lexer_error) {
|
@@ -752,7 +752,7 @@ static VALUE
|
|
752
752
|
unindent(VALUE con, int start_col)
|
753
753
|
{
|
754
754
|
VALUE re;
|
755
|
-
|
755
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
756
756
|
char pat[32];
|
757
757
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
758
758
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1183,14 +1183,14 @@ _match:
|
|
1183
1183
|
buff = data;
|
1184
1184
|
}
|
1185
1185
|
|
1186
|
-
|
1186
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1187
1187
|
newstr_val = rb_str_new(buff, len);
|
1188
1188
|
newstr = RSTRING_PTR(newstr_val);
|
1189
1189
|
|
1190
1190
|
|
1191
1191
|
for (count = 0; count < len; count++) {
|
1192
1192
|
if(buff[count] == 10) {
|
1193
|
-
newstr[newstr_count] = '\0';
|
1193
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1194
1194
|
break;
|
1195
1195
|
} else {
|
1196
1196
|
if (buff[count] == '%') {
|
@@ -1204,7 +1204,7 @@ _match:
|
|
1204
1204
|
}
|
1205
1205
|
|
1206
1206
|
line = lexer->line_number;
|
1207
|
-
lexer_init(lexer);
|
1207
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1208
1208
|
raise_lexer_error(newstr, line);
|
1209
1209
|
} else {
|
1210
1210
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1246,14 +1246,14 @@ _again:
|
|
1246
1246
|
buff = data;
|
1247
1247
|
}
|
1248
1248
|
|
1249
|
-
|
1249
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1250
1250
|
newstr_val = rb_str_new(buff, len);
|
1251
1251
|
newstr = RSTRING_PTR(newstr_val);
|
1252
1252
|
|
1253
1253
|
|
1254
1254
|
for (count = 0; count < len; count++) {
|
1255
1255
|
if(buff[count] == 10) {
|
1256
|
-
newstr[newstr_count] = '\0';
|
1256
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1257
1257
|
break;
|
1258
1258
|
} else {
|
1259
1259
|
if (buff[count] == '%') {
|
@@ -1267,7 +1267,7 @@ _again:
|
|
1267
1267
|
}
|
1268
1268
|
|
1269
1269
|
line = lexer->line_number;
|
1270
|
-
lexer_init(lexer);
|
1270
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1271
1271
|
raise_lexer_error(newstr, line);
|
1272
1272
|
} else {
|
1273
1273
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1288,7 +1288,7 @@ _again:
|
|
1288
1288
|
assert(lexer->content_start <= len && "content starts after data end");
|
1289
1289
|
assert(lexer->mark < len && "mark is after data end");
|
1290
1290
|
|
1291
|
-
|
1291
|
+
/* Reset lexer by re-initializing the whole thing */
|
1292
1292
|
lexer_init(lexer);
|
1293
1293
|
|
1294
1294
|
if (cs == lexer_error) {
|