private bool NextValue(CharEnumerator cursor, out string value) { Characters.Escaper escape = Characters.NoEscape; builder.Clear(); while (true) { if (!cursor.MoveNext()) { value = builder.ToString(); return(false); } if (Characters.IsEscape(cursor.Current)) { escape = Characters.Unescape; continue; } if (Characters.IsTerminator(cursor.Current)) { value = builder.ToString(); return(true); } builder.Append(escape(cursor.Current)); escape = Characters.NoEscape; } }
public static StringBuilder AppendEscaped(this StringBuilder builder, string value) { Characters.Escaper escape = Characters.NoEscape; foreach (var character in value) { if (Characters.IsSpecial(character)) { builder.Append('\\'); escape = Characters.Escape; } builder.Append(escape(character)); escape = Characters.NoEscape; } return(builder); }