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
@@ -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) {
|