skipComments function

bool skipComments(
  1. String s,
  2. TIntRef p,
  3. bool escapeSlash,
  4. bool escapeRepeat,
)

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;
}