gherkin 2.11.2 → 2.11.3
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.
- 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
@@ -778,7 +778,7 @@ static VALUE
|
|
778
778
|
unindent(VALUE con, int start_col)
|
779
779
|
{
|
780
780
|
VALUE re;
|
781
|
-
|
781
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
782
782
|
char pat[32];
|
783
783
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
784
784
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1209,14 +1209,14 @@ _match:
|
|
1209
1209
|
buff = data;
|
1210
1210
|
}
|
1211
1211
|
|
1212
|
-
|
1212
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1213
1213
|
newstr_val = rb_str_new(buff, len);
|
1214
1214
|
newstr = RSTRING_PTR(newstr_val);
|
1215
1215
|
|
1216
1216
|
|
1217
1217
|
for (count = 0; count < len; count++) {
|
1218
1218
|
if(buff[count] == 10) {
|
1219
|
-
newstr[newstr_count] = '\0';
|
1219
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1220
1220
|
break;
|
1221
1221
|
} else {
|
1222
1222
|
if (buff[count] == '%') {
|
@@ -1230,7 +1230,7 @@ _match:
|
|
1230
1230
|
}
|
1231
1231
|
|
1232
1232
|
line = lexer->line_number;
|
1233
|
-
lexer_init(lexer);
|
1233
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1234
1234
|
raise_lexer_error(newstr, line);
|
1235
1235
|
} else {
|
1236
1236
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1272,14 +1272,14 @@ _again:
|
|
1272
1272
|
buff = data;
|
1273
1273
|
}
|
1274
1274
|
|
1275
|
-
|
1275
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1276
1276
|
newstr_val = rb_str_new(buff, len);
|
1277
1277
|
newstr = RSTRING_PTR(newstr_val);
|
1278
1278
|
|
1279
1279
|
|
1280
1280
|
for (count = 0; count < len; count++) {
|
1281
1281
|
if(buff[count] == 10) {
|
1282
|
-
newstr[newstr_count] = '\0';
|
1282
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1283
1283
|
break;
|
1284
1284
|
} else {
|
1285
1285
|
if (buff[count] == '%') {
|
@@ -1293,7 +1293,7 @@ _again:
|
|
1293
1293
|
}
|
1294
1294
|
|
1295
1295
|
line = lexer->line_number;
|
1296
|
-
lexer_init(lexer);
|
1296
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1297
1297
|
raise_lexer_error(newstr, line);
|
1298
1298
|
} else {
|
1299
1299
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1314,7 +1314,7 @@ _again:
|
|
1314
1314
|
assert(lexer->content_start <= len && "content starts after data end");
|
1315
1315
|
assert(lexer->mark < len && "mark is after data end");
|
1316
1316
|
|
1317
|
-
|
1317
|
+
/* Reset lexer by re-initializing the whole thing */
|
1318
1318
|
lexer_init(lexer);
|
1319
1319
|
|
1320
1320
|
if (cs == lexer_error) {
|
@@ -1137,7 +1137,7 @@ static VALUE
|
|
1137
1137
|
unindent(VALUE con, int start_col)
|
1138
1138
|
{
|
1139
1139
|
VALUE re;
|
1140
|
-
|
1140
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
1141
1141
|
char pat[32];
|
1142
1142
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
1143
1143
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1568,14 +1568,14 @@ _match:
|
|
1568
1568
|
buff = data;
|
1569
1569
|
}
|
1570
1570
|
|
1571
|
-
|
1571
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1572
1572
|
newstr_val = rb_str_new(buff, len);
|
1573
1573
|
newstr = RSTRING_PTR(newstr_val);
|
1574
1574
|
|
1575
1575
|
|
1576
1576
|
for (count = 0; count < len; count++) {
|
1577
1577
|
if(buff[count] == 10) {
|
1578
|
-
newstr[newstr_count] = '\0';
|
1578
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1579
1579
|
break;
|
1580
1580
|
} else {
|
1581
1581
|
if (buff[count] == '%') {
|
@@ -1589,7 +1589,7 @@ _match:
|
|
1589
1589
|
}
|
1590
1590
|
|
1591
1591
|
line = lexer->line_number;
|
1592
|
-
lexer_init(lexer);
|
1592
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1593
1593
|
raise_lexer_error(newstr, line);
|
1594
1594
|
} else {
|
1595
1595
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1631,14 +1631,14 @@ _again:
|
|
1631
1631
|
buff = data;
|
1632
1632
|
}
|
1633
1633
|
|
1634
|
-
|
1634
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1635
1635
|
newstr_val = rb_str_new(buff, len);
|
1636
1636
|
newstr = RSTRING_PTR(newstr_val);
|
1637
1637
|
|
1638
1638
|
|
1639
1639
|
for (count = 0; count < len; count++) {
|
1640
1640
|
if(buff[count] == 10) {
|
1641
|
-
newstr[newstr_count] = '\0';
|
1641
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1642
1642
|
break;
|
1643
1643
|
} else {
|
1644
1644
|
if (buff[count] == '%') {
|
@@ -1652,7 +1652,7 @@ _again:
|
|
1652
1652
|
}
|
1653
1653
|
|
1654
1654
|
line = lexer->line_number;
|
1655
|
-
lexer_init(lexer);
|
1655
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1656
1656
|
raise_lexer_error(newstr, line);
|
1657
1657
|
} else {
|
1658
1658
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1673,7 +1673,7 @@ _again:
|
|
1673
1673
|
assert(lexer->content_start <= len && "content starts after data end");
|
1674
1674
|
assert(lexer->mark < len && "mark is after data end");
|
1675
1675
|
|
1676
|
-
|
1676
|
+
/* Reset lexer by re-initializing the whole thing */
|
1677
1677
|
lexer_init(lexer);
|
1678
1678
|
|
1679
1679
|
if (cs == lexer_error) {
|
@@ -798,7 +798,7 @@ static VALUE
|
|
798
798
|
unindent(VALUE con, int start_col)
|
799
799
|
{
|
800
800
|
VALUE re;
|
801
|
-
|
801
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
802
802
|
char pat[32];
|
803
803
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
804
804
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1229,14 +1229,14 @@ _match:
|
|
1229
1229
|
buff = data;
|
1230
1230
|
}
|
1231
1231
|
|
1232
|
-
|
1232
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1233
1233
|
newstr_val = rb_str_new(buff, len);
|
1234
1234
|
newstr = RSTRING_PTR(newstr_val);
|
1235
1235
|
|
1236
1236
|
|
1237
1237
|
for (count = 0; count < len; count++) {
|
1238
1238
|
if(buff[count] == 10) {
|
1239
|
-
newstr[newstr_count] = '\0';
|
1239
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1240
1240
|
break;
|
1241
1241
|
} else {
|
1242
1242
|
if (buff[count] == '%') {
|
@@ -1250,7 +1250,7 @@ _match:
|
|
1250
1250
|
}
|
1251
1251
|
|
1252
1252
|
line = lexer->line_number;
|
1253
|
-
lexer_init(lexer);
|
1253
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1254
1254
|
raise_lexer_error(newstr, line);
|
1255
1255
|
} else {
|
1256
1256
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1292,14 +1292,14 @@ _again:
|
|
1292
1292
|
buff = data;
|
1293
1293
|
}
|
1294
1294
|
|
1295
|
-
|
1295
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1296
1296
|
newstr_val = rb_str_new(buff, len);
|
1297
1297
|
newstr = RSTRING_PTR(newstr_val);
|
1298
1298
|
|
1299
1299
|
|
1300
1300
|
for (count = 0; count < len; count++) {
|
1301
1301
|
if(buff[count] == 10) {
|
1302
|
-
newstr[newstr_count] = '\0';
|
1302
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1303
1303
|
break;
|
1304
1304
|
} else {
|
1305
1305
|
if (buff[count] == '%') {
|
@@ -1313,7 +1313,7 @@ _again:
|
|
1313
1313
|
}
|
1314
1314
|
|
1315
1315
|
line = lexer->line_number;
|
1316
|
-
lexer_init(lexer);
|
1316
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1317
1317
|
raise_lexer_error(newstr, line);
|
1318
1318
|
} else {
|
1319
1319
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1334,7 +1334,7 @@ _again:
|
|
1334
1334
|
assert(lexer->content_start <= len && "content starts after data end");
|
1335
1335
|
assert(lexer->mark < len && "mark is after data end");
|
1336
1336
|
|
1337
|
-
|
1337
|
+
/* Reset lexer by re-initializing the whole thing */
|
1338
1338
|
lexer_init(lexer);
|
1339
1339
|
|
1340
1340
|
if (cs == lexer_error) {
|
@@ -734,7 +734,7 @@ static VALUE
|
|
734
734
|
unindent(VALUE con, int start_col)
|
735
735
|
{
|
736
736
|
VALUE re;
|
737
|
-
|
737
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
738
738
|
char pat[32];
|
739
739
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
740
740
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1165,14 +1165,14 @@ _match:
|
|
1165
1165
|
buff = data;
|
1166
1166
|
}
|
1167
1167
|
|
1168
|
-
|
1168
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1169
1169
|
newstr_val = rb_str_new(buff, len);
|
1170
1170
|
newstr = RSTRING_PTR(newstr_val);
|
1171
1171
|
|
1172
1172
|
|
1173
1173
|
for (count = 0; count < len; count++) {
|
1174
1174
|
if(buff[count] == 10) {
|
1175
|
-
newstr[newstr_count] = '\0';
|
1175
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1176
1176
|
break;
|
1177
1177
|
} else {
|
1178
1178
|
if (buff[count] == '%') {
|
@@ -1186,7 +1186,7 @@ _match:
|
|
1186
1186
|
}
|
1187
1187
|
|
1188
1188
|
line = lexer->line_number;
|
1189
|
-
lexer_init(lexer);
|
1189
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1190
1190
|
raise_lexer_error(newstr, line);
|
1191
1191
|
} else {
|
1192
1192
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1228,14 +1228,14 @@ _again:
|
|
1228
1228
|
buff = data;
|
1229
1229
|
}
|
1230
1230
|
|
1231
|
-
|
1231
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1232
1232
|
newstr_val = rb_str_new(buff, len);
|
1233
1233
|
newstr = RSTRING_PTR(newstr_val);
|
1234
1234
|
|
1235
1235
|
|
1236
1236
|
for (count = 0; count < len; count++) {
|
1237
1237
|
if(buff[count] == 10) {
|
1238
|
-
newstr[newstr_count] = '\0';
|
1238
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1239
1239
|
break;
|
1240
1240
|
} else {
|
1241
1241
|
if (buff[count] == '%') {
|
@@ -1249,7 +1249,7 @@ _again:
|
|
1249
1249
|
}
|
1250
1250
|
|
1251
1251
|
line = lexer->line_number;
|
1252
|
-
lexer_init(lexer);
|
1252
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1253
1253
|
raise_lexer_error(newstr, line);
|
1254
1254
|
} else {
|
1255
1255
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1270,7 +1270,7 @@ _again:
|
|
1270
1270
|
assert(lexer->content_start <= len && "content starts after data end");
|
1271
1271
|
assert(lexer->mark < len && "mark is after data end");
|
1272
1272
|
|
1273
|
-
|
1273
|
+
/* Reset lexer by re-initializing the whole thing */
|
1274
1274
|
lexer_init(lexer);
|
1275
1275
|
|
1276
1276
|
if (cs == lexer_error) {
|
@@ -827,7 +827,7 @@ static VALUE
|
|
827
827
|
unindent(VALUE con, int start_col)
|
828
828
|
{
|
829
829
|
VALUE re;
|
830
|
-
|
830
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
831
831
|
char pat[32];
|
832
832
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
833
833
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1258,14 +1258,14 @@ _match:
|
|
1258
1258
|
buff = data;
|
1259
1259
|
}
|
1260
1260
|
|
1261
|
-
|
1261
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1262
1262
|
newstr_val = rb_str_new(buff, len);
|
1263
1263
|
newstr = RSTRING_PTR(newstr_val);
|
1264
1264
|
|
1265
1265
|
|
1266
1266
|
for (count = 0; count < len; count++) {
|
1267
1267
|
if(buff[count] == 10) {
|
1268
|
-
newstr[newstr_count] = '\0';
|
1268
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1269
1269
|
break;
|
1270
1270
|
} else {
|
1271
1271
|
if (buff[count] == '%') {
|
@@ -1279,7 +1279,7 @@ _match:
|
|
1279
1279
|
}
|
1280
1280
|
|
1281
1281
|
line = lexer->line_number;
|
1282
|
-
lexer_init(lexer);
|
1282
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1283
1283
|
raise_lexer_error(newstr, line);
|
1284
1284
|
} else {
|
1285
1285
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1321,14 +1321,14 @@ _again:
|
|
1321
1321
|
buff = data;
|
1322
1322
|
}
|
1323
1323
|
|
1324
|
-
|
1324
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1325
1325
|
newstr_val = rb_str_new(buff, len);
|
1326
1326
|
newstr = RSTRING_PTR(newstr_val);
|
1327
1327
|
|
1328
1328
|
|
1329
1329
|
for (count = 0; count < len; count++) {
|
1330
1330
|
if(buff[count] == 10) {
|
1331
|
-
newstr[newstr_count] = '\0';
|
1331
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1332
1332
|
break;
|
1333
1333
|
} else {
|
1334
1334
|
if (buff[count] == '%') {
|
@@ -1342,7 +1342,7 @@ _again:
|
|
1342
1342
|
}
|
1343
1343
|
|
1344
1344
|
line = lexer->line_number;
|
1345
|
-
lexer_init(lexer);
|
1345
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1346
1346
|
raise_lexer_error(newstr, line);
|
1347
1347
|
} else {
|
1348
1348
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1363,7 +1363,7 @@ _again:
|
|
1363
1363
|
assert(lexer->content_start <= len && "content starts after data end");
|
1364
1364
|
assert(lexer->mark < len && "mark is after data end");
|
1365
1365
|
|
1366
|
-
|
1366
|
+
/* Reset lexer by re-initializing the whole thing */
|
1367
1367
|
lexer_init(lexer);
|
1368
1368
|
|
1369
1369
|
if (cs == lexer_error) {
|
@@ -863,7 +863,7 @@ static VALUE
|
|
863
863
|
unindent(VALUE con, int start_col)
|
864
864
|
{
|
865
865
|
VALUE re;
|
866
|
-
|
866
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
867
867
|
char pat[32];
|
868
868
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
869
869
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1294,14 +1294,14 @@ _match:
|
|
1294
1294
|
buff = data;
|
1295
1295
|
}
|
1296
1296
|
|
1297
|
-
|
1297
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1298
1298
|
newstr_val = rb_str_new(buff, len);
|
1299
1299
|
newstr = RSTRING_PTR(newstr_val);
|
1300
1300
|
|
1301
1301
|
|
1302
1302
|
for (count = 0; count < len; count++) {
|
1303
1303
|
if(buff[count] == 10) {
|
1304
|
-
newstr[newstr_count] = '\0';
|
1304
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1305
1305
|
break;
|
1306
1306
|
} else {
|
1307
1307
|
if (buff[count] == '%') {
|
@@ -1315,7 +1315,7 @@ _match:
|
|
1315
1315
|
}
|
1316
1316
|
|
1317
1317
|
line = lexer->line_number;
|
1318
|
-
lexer_init(lexer);
|
1318
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1319
1319
|
raise_lexer_error(newstr, line);
|
1320
1320
|
} else {
|
1321
1321
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1357,14 +1357,14 @@ _again:
|
|
1357
1357
|
buff = data;
|
1358
1358
|
}
|
1359
1359
|
|
1360
|
-
|
1360
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1361
1361
|
newstr_val = rb_str_new(buff, len);
|
1362
1362
|
newstr = RSTRING_PTR(newstr_val);
|
1363
1363
|
|
1364
1364
|
|
1365
1365
|
for (count = 0; count < len; count++) {
|
1366
1366
|
if(buff[count] == 10) {
|
1367
|
-
newstr[newstr_count] = '\0';
|
1367
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1368
1368
|
break;
|
1369
1369
|
} else {
|
1370
1370
|
if (buff[count] == '%') {
|
@@ -1378,7 +1378,7 @@ _again:
|
|
1378
1378
|
}
|
1379
1379
|
|
1380
1380
|
line = lexer->line_number;
|
1381
|
-
lexer_init(lexer);
|
1381
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1382
1382
|
raise_lexer_error(newstr, line);
|
1383
1383
|
} else {
|
1384
1384
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1399,7 +1399,7 @@ _again:
|
|
1399
1399
|
assert(lexer->content_start <= len && "content starts after data end");
|
1400
1400
|
assert(lexer->mark < len && "mark is after data end");
|
1401
1401
|
|
1402
|
-
|
1402
|
+
/* Reset lexer by re-initializing the whole thing */
|
1403
1403
|
lexer_init(lexer);
|
1404
1404
|
|
1405
1405
|
if (cs == lexer_error) {
|
@@ -806,7 +806,7 @@ static VALUE
|
|
806
806
|
unindent(VALUE con, int start_col)
|
807
807
|
{
|
808
808
|
VALUE re;
|
809
|
-
|
809
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
810
810
|
char pat[32];
|
811
811
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
812
812
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1237,14 +1237,14 @@ _match:
|
|
1237
1237
|
buff = data;
|
1238
1238
|
}
|
1239
1239
|
|
1240
|
-
|
1240
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1241
1241
|
newstr_val = rb_str_new(buff, len);
|
1242
1242
|
newstr = RSTRING_PTR(newstr_val);
|
1243
1243
|
|
1244
1244
|
|
1245
1245
|
for (count = 0; count < len; count++) {
|
1246
1246
|
if(buff[count] == 10) {
|
1247
|
-
newstr[newstr_count] = '\0';
|
1247
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1248
1248
|
break;
|
1249
1249
|
} else {
|
1250
1250
|
if (buff[count] == '%') {
|
@@ -1258,7 +1258,7 @@ _match:
|
|
1258
1258
|
}
|
1259
1259
|
|
1260
1260
|
line = lexer->line_number;
|
1261
|
-
lexer_init(lexer);
|
1261
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1262
1262
|
raise_lexer_error(newstr, line);
|
1263
1263
|
} else {
|
1264
1264
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1300,14 +1300,14 @@ _again:
|
|
1300
1300
|
buff = data;
|
1301
1301
|
}
|
1302
1302
|
|
1303
|
-
|
1303
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1304
1304
|
newstr_val = rb_str_new(buff, len);
|
1305
1305
|
newstr = RSTRING_PTR(newstr_val);
|
1306
1306
|
|
1307
1307
|
|
1308
1308
|
for (count = 0; count < len; count++) {
|
1309
1309
|
if(buff[count] == 10) {
|
1310
|
-
newstr[newstr_count] = '\0';
|
1310
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1311
1311
|
break;
|
1312
1312
|
} else {
|
1313
1313
|
if (buff[count] == '%') {
|
@@ -1321,7 +1321,7 @@ _again:
|
|
1321
1321
|
}
|
1322
1322
|
|
1323
1323
|
line = lexer->line_number;
|
1324
|
-
lexer_init(lexer);
|
1324
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1325
1325
|
raise_lexer_error(newstr, line);
|
1326
1326
|
} else {
|
1327
1327
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1342,7 +1342,7 @@ _again:
|
|
1342
1342
|
assert(lexer->content_start <= len && "content starts after data end");
|
1343
1343
|
assert(lexer->mark < len && "mark is after data end");
|
1344
1344
|
|
1345
|
-
|
1345
|
+
/* Reset lexer by re-initializing the whole thing */
|
1346
1346
|
lexer_init(lexer);
|
1347
1347
|
|
1348
1348
|
if (cs == lexer_error) {
|