If no known mark is found we will test against strings and comments
below before giving up and assuming an unknown mark.
+
+If an unknown mark contains a quote character or a comment marker, and
+that token is not being ignored, then we terminate the unknown mark
+before that quote or comment. This ensure that an unknown mark
+immediately before a string is handled correctly.
+
If `TK_mark` is ignored, then unknown marks as returned as an error.
###### token types
tk.num = TK_error;
while (is_mark(ch, state->conf)) {
int n;
+ wchar_t prev;
close_token(state, &tk);
n = find_known(state->conf, tk.txt);
if (n >= 0)
close_token(state, &tk);
return tk;
}
+ prev = ch;
+ if (prev == '/')
+ save_unget_state(state);
ch = get_char(state);
+ if (!(ignored && (1<<TK_string)) && is_quote(ch))
+ break;
+ if (!(ignored && (1<<TK_line_comment)) &&
+ prev == '/' && ch == '/') {
+ restore_unget_state(state);
+ break;
+ }
+ if (!(ignored && (1<<TK_block_comment)) &&
+ prev == '/' && ch == '*') {
+ restore_unget_state(state);
+ break;
+ }
}
unget_char(state);
if (tk.num != TK_error)