skipComments function
Implementation
bool skipComments(String s, TIntRef p, bool escapeSlash, bool escapeRepeat) {
var result = false;
if (p.value >= s.length) return false;
final c = s[p.value];
switch (c) {
case "'":
case '"':
case '`':
result = true;
// single quote, double quote or backtick delimited string (original comment)
skipQuotesString(s, p, c, escapeSlash, escapeRepeat);
break;
case '-': // possible start of -- comment
p.value++;
if (p.value < s.length && s[p.value] == '-') {
// -- comment
result = true;
do {
p.value++; // skip until at end of line
} while (p.value < s.length &&
s[p.value] != '\n' &&
s[p.value] != '\r');
while (p.value < s.length &&
(s[p.value] == '\n' || s[p.value] == '\r')) {
p.value++; // newline is part of comment (original comment kept as-is)
}
}
break;
case '/': // possible start of /* */ comment
p.value++;
if (p.value < s.length && s[p.value] == '*') {
// /* */ comment
result = true;
p.value++;
while (p.value < s.length) {
if (s[p.value] == '*') {
// possible end of comment
p.value++;
if (p.value < s.length && s[p.value] == '/') break;
} else {
p.value++;
}
}
if (p.value < s.length && s[p.value] == '/') {
p.value++; // skip final /
}
}
break;
}
return result;
}