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
@@ -653,7 +653,7 @@ static VALUE
|
|
653
653
|
unindent(VALUE con, int start_col)
|
654
654
|
{
|
655
655
|
VALUE re;
|
656
|
-
|
656
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
657
657
|
char pat[32];
|
658
658
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
659
659
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1084,14 +1084,14 @@ _match:
|
|
1084
1084
|
buff = data;
|
1085
1085
|
}
|
1086
1086
|
|
1087
|
-
|
1087
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1088
1088
|
newstr_val = rb_str_new(buff, len);
|
1089
1089
|
newstr = RSTRING_PTR(newstr_val);
|
1090
1090
|
|
1091
1091
|
|
1092
1092
|
for (count = 0; count < len; count++) {
|
1093
1093
|
if(buff[count] == 10) {
|
1094
|
-
newstr[newstr_count] = '\0';
|
1094
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1095
1095
|
break;
|
1096
1096
|
} else {
|
1097
1097
|
if (buff[count] == '%') {
|
@@ -1105,7 +1105,7 @@ _match:
|
|
1105
1105
|
}
|
1106
1106
|
|
1107
1107
|
line = lexer->line_number;
|
1108
|
-
lexer_init(lexer);
|
1108
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1109
1109
|
raise_lexer_error(newstr, line);
|
1110
1110
|
} else {
|
1111
1111
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1147,14 +1147,14 @@ _again:
|
|
1147
1147
|
buff = data;
|
1148
1148
|
}
|
1149
1149
|
|
1150
|
-
|
1150
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1151
1151
|
newstr_val = rb_str_new(buff, len);
|
1152
1152
|
newstr = RSTRING_PTR(newstr_val);
|
1153
1153
|
|
1154
1154
|
|
1155
1155
|
for (count = 0; count < len; count++) {
|
1156
1156
|
if(buff[count] == 10) {
|
1157
|
-
newstr[newstr_count] = '\0';
|
1157
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1158
1158
|
break;
|
1159
1159
|
} else {
|
1160
1160
|
if (buff[count] == '%') {
|
@@ -1168,7 +1168,7 @@ _again:
|
|
1168
1168
|
}
|
1169
1169
|
|
1170
1170
|
line = lexer->line_number;
|
1171
|
-
lexer_init(lexer);
|
1171
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1172
1172
|
raise_lexer_error(newstr, line);
|
1173
1173
|
} else {
|
1174
1174
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1189,7 +1189,7 @@ _again:
|
|
1189
1189
|
assert(lexer->content_start <= len && "content starts after data end");
|
1190
1190
|
assert(lexer->mark < len && "mark is after data end");
|
1191
1191
|
|
1192
|
-
|
1192
|
+
/* Reset lexer by re-initializing the whole thing */
|
1193
1193
|
lexer_init(lexer);
|
1194
1194
|
|
1195
1195
|
if (cs == lexer_error) {
|
@@ -931,7 +931,7 @@ static VALUE
|
|
931
931
|
unindent(VALUE con, int start_col)
|
932
932
|
{
|
933
933
|
VALUE re;
|
934
|
-
|
934
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
935
935
|
char pat[32];
|
936
936
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
937
937
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1362,14 +1362,14 @@ _match:
|
|
1362
1362
|
buff = data;
|
1363
1363
|
}
|
1364
1364
|
|
1365
|
-
|
1365
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1366
1366
|
newstr_val = rb_str_new(buff, len);
|
1367
1367
|
newstr = RSTRING_PTR(newstr_val);
|
1368
1368
|
|
1369
1369
|
|
1370
1370
|
for (count = 0; count < len; count++) {
|
1371
1371
|
if(buff[count] == 10) {
|
1372
|
-
newstr[newstr_count] = '\0';
|
1372
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1373
1373
|
break;
|
1374
1374
|
} else {
|
1375
1375
|
if (buff[count] == '%') {
|
@@ -1383,7 +1383,7 @@ _match:
|
|
1383
1383
|
}
|
1384
1384
|
|
1385
1385
|
line = lexer->line_number;
|
1386
|
-
lexer_init(lexer);
|
1386
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1387
1387
|
raise_lexer_error(newstr, line);
|
1388
1388
|
} else {
|
1389
1389
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1425,14 +1425,14 @@ _again:
|
|
1425
1425
|
buff = data;
|
1426
1426
|
}
|
1427
1427
|
|
1428
|
-
|
1428
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1429
1429
|
newstr_val = rb_str_new(buff, len);
|
1430
1430
|
newstr = RSTRING_PTR(newstr_val);
|
1431
1431
|
|
1432
1432
|
|
1433
1433
|
for (count = 0; count < len; count++) {
|
1434
1434
|
if(buff[count] == 10) {
|
1435
|
-
newstr[newstr_count] = '\0';
|
1435
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1436
1436
|
break;
|
1437
1437
|
} else {
|
1438
1438
|
if (buff[count] == '%') {
|
@@ -1446,7 +1446,7 @@ _again:
|
|
1446
1446
|
}
|
1447
1447
|
|
1448
1448
|
line = lexer->line_number;
|
1449
|
-
lexer_init(lexer);
|
1449
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1450
1450
|
raise_lexer_error(newstr, line);
|
1451
1451
|
} else {
|
1452
1452
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1467,7 +1467,7 @@ _again:
|
|
1467
1467
|
assert(lexer->content_start <= len && "content starts after data end");
|
1468
1468
|
assert(lexer->mark < len && "mark is after data end");
|
1469
1469
|
|
1470
|
-
|
1470
|
+
/* Reset lexer by re-initializing the whole thing */
|
1471
1471
|
lexer_init(lexer);
|
1472
1472
|
|
1473
1473
|
if (cs == lexer_error) {
|
@@ -812,7 +812,7 @@ static VALUE
|
|
812
812
|
unindent(VALUE con, int start_col)
|
813
813
|
{
|
814
814
|
VALUE re;
|
815
|
-
|
815
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
816
816
|
char pat[32];
|
817
817
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
818
818
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1243,14 +1243,14 @@ _match:
|
|
1243
1243
|
buff = data;
|
1244
1244
|
}
|
1245
1245
|
|
1246
|
-
|
1246
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1247
1247
|
newstr_val = rb_str_new(buff, len);
|
1248
1248
|
newstr = RSTRING_PTR(newstr_val);
|
1249
1249
|
|
1250
1250
|
|
1251
1251
|
for (count = 0; count < len; count++) {
|
1252
1252
|
if(buff[count] == 10) {
|
1253
|
-
newstr[newstr_count] = '\0';
|
1253
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1254
1254
|
break;
|
1255
1255
|
} else {
|
1256
1256
|
if (buff[count] == '%') {
|
@@ -1264,7 +1264,7 @@ _match:
|
|
1264
1264
|
}
|
1265
1265
|
|
1266
1266
|
line = lexer->line_number;
|
1267
|
-
lexer_init(lexer);
|
1267
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1268
1268
|
raise_lexer_error(newstr, line);
|
1269
1269
|
} else {
|
1270
1270
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1306,14 +1306,14 @@ _again:
|
|
1306
1306
|
buff = data;
|
1307
1307
|
}
|
1308
1308
|
|
1309
|
-
|
1309
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1310
1310
|
newstr_val = rb_str_new(buff, len);
|
1311
1311
|
newstr = RSTRING_PTR(newstr_val);
|
1312
1312
|
|
1313
1313
|
|
1314
1314
|
for (count = 0; count < len; count++) {
|
1315
1315
|
if(buff[count] == 10) {
|
1316
|
-
newstr[newstr_count] = '\0';
|
1316
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1317
1317
|
break;
|
1318
1318
|
} else {
|
1319
1319
|
if (buff[count] == '%') {
|
@@ -1327,7 +1327,7 @@ _again:
|
|
1327
1327
|
}
|
1328
1328
|
|
1329
1329
|
line = lexer->line_number;
|
1330
|
-
lexer_init(lexer);
|
1330
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1331
1331
|
raise_lexer_error(newstr, line);
|
1332
1332
|
} else {
|
1333
1333
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1348,7 +1348,7 @@ _again:
|
|
1348
1348
|
assert(lexer->content_start <= len && "content starts after data end");
|
1349
1349
|
assert(lexer->mark < len && "mark is after data end");
|
1350
1350
|
|
1351
|
-
|
1351
|
+
/* Reset lexer by re-initializing the whole thing */
|
1352
1352
|
lexer_init(lexer);
|
1353
1353
|
|
1354
1354
|
if (cs == lexer_error) {
|
@@ -761,7 +761,7 @@ static VALUE
|
|
761
761
|
unindent(VALUE con, int start_col)
|
762
762
|
{
|
763
763
|
VALUE re;
|
764
|
-
|
764
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
765
765
|
char pat[32];
|
766
766
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
767
767
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1192,14 +1192,14 @@ _match:
|
|
1192
1192
|
buff = data;
|
1193
1193
|
}
|
1194
1194
|
|
1195
|
-
|
1195
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1196
1196
|
newstr_val = rb_str_new(buff, len);
|
1197
1197
|
newstr = RSTRING_PTR(newstr_val);
|
1198
1198
|
|
1199
1199
|
|
1200
1200
|
for (count = 0; count < len; count++) {
|
1201
1201
|
if(buff[count] == 10) {
|
1202
|
-
newstr[newstr_count] = '\0';
|
1202
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1203
1203
|
break;
|
1204
1204
|
} else {
|
1205
1205
|
if (buff[count] == '%') {
|
@@ -1213,7 +1213,7 @@ _match:
|
|
1213
1213
|
}
|
1214
1214
|
|
1215
1215
|
line = lexer->line_number;
|
1216
|
-
lexer_init(lexer);
|
1216
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1217
1217
|
raise_lexer_error(newstr, line);
|
1218
1218
|
} else {
|
1219
1219
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1255,14 +1255,14 @@ _again:
|
|
1255
1255
|
buff = data;
|
1256
1256
|
}
|
1257
1257
|
|
1258
|
-
|
1258
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1259
1259
|
newstr_val = rb_str_new(buff, len);
|
1260
1260
|
newstr = RSTRING_PTR(newstr_val);
|
1261
1261
|
|
1262
1262
|
|
1263
1263
|
for (count = 0; count < len; count++) {
|
1264
1264
|
if(buff[count] == 10) {
|
1265
|
-
newstr[newstr_count] = '\0';
|
1265
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1266
1266
|
break;
|
1267
1267
|
} else {
|
1268
1268
|
if (buff[count] == '%') {
|
@@ -1276,7 +1276,7 @@ _again:
|
|
1276
1276
|
}
|
1277
1277
|
|
1278
1278
|
line = lexer->line_number;
|
1279
|
-
lexer_init(lexer);
|
1279
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1280
1280
|
raise_lexer_error(newstr, line);
|
1281
1281
|
} else {
|
1282
1282
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1297,7 +1297,7 @@ _again:
|
|
1297
1297
|
assert(lexer->content_start <= len && "content starts after data end");
|
1298
1298
|
assert(lexer->mark < len && "mark is after data end");
|
1299
1299
|
|
1300
|
-
|
1300
|
+
/* Reset lexer by re-initializing the whole thing */
|
1301
1301
|
lexer_init(lexer);
|
1302
1302
|
|
1303
1303
|
if (cs == lexer_error) {
|
@@ -814,7 +814,7 @@ static VALUE
|
|
814
814
|
unindent(VALUE con, int start_col)
|
815
815
|
{
|
816
816
|
VALUE re;
|
817
|
-
|
817
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
818
818
|
char pat[32];
|
819
819
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
820
820
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1245,14 +1245,14 @@ _match:
|
|
1245
1245
|
buff = data;
|
1246
1246
|
}
|
1247
1247
|
|
1248
|
-
|
1248
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1249
1249
|
newstr_val = rb_str_new(buff, len);
|
1250
1250
|
newstr = RSTRING_PTR(newstr_val);
|
1251
1251
|
|
1252
1252
|
|
1253
1253
|
for (count = 0; count < len; count++) {
|
1254
1254
|
if(buff[count] == 10) {
|
1255
|
-
newstr[newstr_count] = '\0';
|
1255
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1256
1256
|
break;
|
1257
1257
|
} else {
|
1258
1258
|
if (buff[count] == '%') {
|
@@ -1266,7 +1266,7 @@ _match:
|
|
1266
1266
|
}
|
1267
1267
|
|
1268
1268
|
line = lexer->line_number;
|
1269
|
-
lexer_init(lexer);
|
1269
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1270
1270
|
raise_lexer_error(newstr, line);
|
1271
1271
|
} else {
|
1272
1272
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1308,14 +1308,14 @@ _again:
|
|
1308
1308
|
buff = data;
|
1309
1309
|
}
|
1310
1310
|
|
1311
|
-
|
1311
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1312
1312
|
newstr_val = rb_str_new(buff, len);
|
1313
1313
|
newstr = RSTRING_PTR(newstr_val);
|
1314
1314
|
|
1315
1315
|
|
1316
1316
|
for (count = 0; count < len; count++) {
|
1317
1317
|
if(buff[count] == 10) {
|
1318
|
-
newstr[newstr_count] = '\0';
|
1318
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1319
1319
|
break;
|
1320
1320
|
} else {
|
1321
1321
|
if (buff[count] == '%') {
|
@@ -1329,7 +1329,7 @@ _again:
|
|
1329
1329
|
}
|
1330
1330
|
|
1331
1331
|
line = lexer->line_number;
|
1332
|
-
lexer_init(lexer);
|
1332
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1333
1333
|
raise_lexer_error(newstr, line);
|
1334
1334
|
} else {
|
1335
1335
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1350,7 +1350,7 @@ _again:
|
|
1350
1350
|
assert(lexer->content_start <= len && "content starts after data end");
|
1351
1351
|
assert(lexer->mark < len && "mark is after data end");
|
1352
1352
|
|
1353
|
-
|
1353
|
+
/* Reset lexer by re-initializing the whole thing */
|
1354
1354
|
lexer_init(lexer);
|
1355
1355
|
|
1356
1356
|
if (cs == lexer_error) {
|
@@ -646,7 +646,7 @@ static VALUE
|
|
646
646
|
unindent(VALUE con, int start_col)
|
647
647
|
{
|
648
648
|
VALUE re;
|
649
|
-
|
649
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
650
650
|
char pat[32];
|
651
651
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
652
652
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1077,14 +1077,14 @@ _match:
|
|
1077
1077
|
buff = data;
|
1078
1078
|
}
|
1079
1079
|
|
1080
|
-
|
1080
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1081
1081
|
newstr_val = rb_str_new(buff, len);
|
1082
1082
|
newstr = RSTRING_PTR(newstr_val);
|
1083
1083
|
|
1084
1084
|
|
1085
1085
|
for (count = 0; count < len; count++) {
|
1086
1086
|
if(buff[count] == 10) {
|
1087
|
-
newstr[newstr_count] = '\0';
|
1087
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1088
1088
|
break;
|
1089
1089
|
} else {
|
1090
1090
|
if (buff[count] == '%') {
|
@@ -1098,7 +1098,7 @@ _match:
|
|
1098
1098
|
}
|
1099
1099
|
|
1100
1100
|
line = lexer->line_number;
|
1101
|
-
lexer_init(lexer);
|
1101
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1102
1102
|
raise_lexer_error(newstr, line);
|
1103
1103
|
} else {
|
1104
1104
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1140,14 +1140,14 @@ _again:
|
|
1140
1140
|
buff = data;
|
1141
1141
|
}
|
1142
1142
|
|
1143
|
-
|
1143
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1144
1144
|
newstr_val = rb_str_new(buff, len);
|
1145
1145
|
newstr = RSTRING_PTR(newstr_val);
|
1146
1146
|
|
1147
1147
|
|
1148
1148
|
for (count = 0; count < len; count++) {
|
1149
1149
|
if(buff[count] == 10) {
|
1150
|
-
newstr[newstr_count] = '\0';
|
1150
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1151
1151
|
break;
|
1152
1152
|
} else {
|
1153
1153
|
if (buff[count] == '%') {
|
@@ -1161,7 +1161,7 @@ _again:
|
|
1161
1161
|
}
|
1162
1162
|
|
1163
1163
|
line = lexer->line_number;
|
1164
|
-
lexer_init(lexer);
|
1164
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1165
1165
|
raise_lexer_error(newstr, line);
|
1166
1166
|
} else {
|
1167
1167
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1182,7 +1182,7 @@ _again:
|
|
1182
1182
|
assert(lexer->content_start <= len && "content starts after data end");
|
1183
1183
|
assert(lexer->mark < len && "mark is after data end");
|
1184
1184
|
|
1185
|
-
|
1185
|
+
/* Reset lexer by re-initializing the whole thing */
|
1186
1186
|
lexer_init(lexer);
|
1187
1187
|
|
1188
1188
|
if (cs == lexer_error) {
|
@@ -814,7 +814,7 @@ static VALUE
|
|
814
814
|
unindent(VALUE con, int start_col)
|
815
815
|
{
|
816
816
|
VALUE re;
|
817
|
-
|
817
|
+
/* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
|
818
818
|
char pat[32];
|
819
819
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
820
820
|
re = rb_reg_regcomp(rb_str_new2(pat));
|
@@ -1245,14 +1245,14 @@ _match:
|
|
1245
1245
|
buff = data;
|
1246
1246
|
}
|
1247
1247
|
|
1248
|
-
|
1248
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1249
1249
|
newstr_val = rb_str_new(buff, len);
|
1250
1250
|
newstr = RSTRING_PTR(newstr_val);
|
1251
1251
|
|
1252
1252
|
|
1253
1253
|
for (count = 0; count < len; count++) {
|
1254
1254
|
if(buff[count] == 10) {
|
1255
|
-
newstr[newstr_count] = '\0';
|
1255
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1256
1256
|
break;
|
1257
1257
|
} else {
|
1258
1258
|
if (buff[count] == '%') {
|
@@ -1266,7 +1266,7 @@ _match:
|
|
1266
1266
|
}
|
1267
1267
|
|
1268
1268
|
line = lexer->line_number;
|
1269
|
-
lexer_init(lexer);
|
1269
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1270
1270
|
raise_lexer_error(newstr, line);
|
1271
1271
|
} else {
|
1272
1272
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1308,14 +1308,14 @@ _again:
|
|
1308
1308
|
buff = data;
|
1309
1309
|
}
|
1310
1310
|
|
1311
|
-
|
1311
|
+
/* Allocate as a ruby string so that it gets cleaned up by GC */
|
1312
1312
|
newstr_val = rb_str_new(buff, len);
|
1313
1313
|
newstr = RSTRING_PTR(newstr_val);
|
1314
1314
|
|
1315
1315
|
|
1316
1316
|
for (count = 0; count < len; count++) {
|
1317
1317
|
if(buff[count] == 10) {
|
1318
|
-
newstr[newstr_count] = '\0';
|
1318
|
+
newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
|
1319
1319
|
break;
|
1320
1320
|
} else {
|
1321
1321
|
if (buff[count] == '%') {
|
@@ -1329,7 +1329,7 @@ _again:
|
|
1329
1329
|
}
|
1330
1330
|
|
1331
1331
|
line = lexer->line_number;
|
1332
|
-
lexer_init(lexer);
|
1332
|
+
lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
|
1333
1333
|
raise_lexer_error(newstr, line);
|
1334
1334
|
} else {
|
1335
1335
|
rb_funcall(listener, rb_intern("eof"), 0);
|
@@ -1350,7 +1350,7 @@ _again:
|
|
1350
1350
|
assert(lexer->content_start <= len && "content starts after data end");
|
1351
1351
|
assert(lexer->mark < len && "mark is after data end");
|
1352
1352
|
|
1353
|
-
|
1353
|
+
/* Reset lexer by re-initializing the whole thing */
|
1354
1354
|
lexer_init(lexer);
|
1355
1355
|
|
1356
1356
|
if (cs == lexer_error) {
|