isSafeUnquoted function

bool isSafeUnquoted(
  1. String value,
  2. String delimiter
)

Determines if a string value can be safely encoded without quotes.

A string needs quoting if it:

  • Is empty
  • Has leading or trailing whitespace
  • Could be confused with a literal (boolean, null, number)
  • Contains structural characters (colons, brackets, braces)
  • Contains quotes or backslashes (need escaping)
  • Contains control characters (newlines, tabs, etc.)
  • Contains the active delimiter
  • Starts with a list marker (hyphen)

Implementation

bool isSafeUnquoted(String value, String delimiter) {
  if (value.isEmpty) {
    return false;
  }

  if (value.trim() != value) {
    return false;
  }

  // Check if it looks like any literal value (boolean, null, or numeric)
  if (isBooleanOrNullLiteral(value) || _isNumericLike(value)) {
    return false;
  }

  // Check for colon (always structural)
  if (value.contains(colon)) {
    return false;
  }

  // Check for quotes and backslash (always need escaping)
  if (value.contains(doubleQuote) || value.contains(backslash)) {
    return false;
  }

  // Check for brackets and braces (always structural)
  if (RegExp(r'[[\]{}]').hasMatch(value)) {
    return false;
  }

  // Check for control characters (newline, carriage return, tab - always need quoting/escaping)
  if (RegExp(r'[\n\r\t]').hasMatch(value)) {
    return false;
  }

  // Check for the active delimiter
  if (value.contains(delimiter)) {
    return false;
  }

  // Check for hyphen at start (list marker)
  if (value.startsWith(listItemMarker)) {
    return false;
  }

  return true;
}