@@ -969,6 +969,10 @@ int tokenize_delim_customterm(parser_t *self, size_t line_limit)
969
969
END_LINE ();
970
970
break ;
971
971
}
972
+ else if (c == self -> commentchar ) {
973
+ self -> state = EAT_LINE_COMMENT ;
974
+ break ;
975
+ }
972
976
/* normal character - handle as START_FIELD */
973
977
self -> state = START_FIELD ;
974
978
/* fallthru */
@@ -1103,6 +1107,13 @@ int tokenize_delim_customterm(parser_t *self, size_t line_limit)
1103
1107
}
1104
1108
break ;
1105
1109
1110
+ case EAT_LINE_COMMENT :
1111
+ if (c == self -> lineterminator ) {
1112
+ self -> file_lines ++ ;
1113
+ self -> state = START_RECORD ;
1114
+ }
1115
+ break ;
1116
+
1106
1117
case EAT_COMMENT :
1107
1118
if (c == self -> lineterminator ) {
1108
1119
END_LINE ();
@@ -1186,6 +1197,9 @@ int tokenize_whitespace(parser_t *self, size_t line_limit)
1186
1197
} else if (IS_WHITESPACE (c )) {
1187
1198
self -> state = EAT_WHITESPACE ;
1188
1199
break ;
1200
+ } else if (c == self -> commentchar ) {
1201
+ self -> state = EAT_LINE_COMMENT ;
1202
+ break ;
1189
1203
} else {
1190
1204
/* normal character - handle as START_FIELD */
1191
1205
self -> state = START_FIELD ;
@@ -1231,6 +1245,16 @@ int tokenize_whitespace(parser_t *self, size_t line_limit)
1231
1245
}
1232
1246
break ;
1233
1247
1248
+ case EAT_LINE_COMMENT :
1249
+ if (c == '\n' ) {
1250
+ self -> file_lines ++ ;
1251
+ self -> state = START_RECORD ;
1252
+ } else if (c == '\r' ) {
1253
+ self -> file_lines ++ ;
1254
+ self -> state = EAT_CRNL_NOP ;
1255
+ }
1256
+ break ;
1257
+
1234
1258
case ESCAPED_CHAR :
1235
1259
/* if (c == '\0') */
1236
1260
/* c = '\n'; */
@@ -1351,6 +1375,15 @@ int tokenize_whitespace(parser_t *self, size_t line_limit)
1351
1375
}
1352
1376
break ;
1353
1377
1378
+ case EAT_CRNL_NOP : // inside an ignored comment line
1379
+ self -> state = START_RECORD ;
1380
+ /* \r line terminator -- parse this character again */
1381
+ if (c != '\n' && c != self -> delimiter ) {
1382
+ -- i ;
1383
+ -- buf ;
1384
+ }
1385
+ break ;
1386
+
1354
1387
case EAT_COMMENT :
1355
1388
if (c == '\n' ) {
1356
1389
END_LINE ();
0 commit comments