public static Utf8Iterator GetFirst(this Utf8String src) { var it = src.GetIterator(); it.MoveNext(); return(it); }
private static TomlValue ParseLHS(Utf8String segment, int parentIndex) { var it = segment.GetIterator(); while (it.MoveNext()) { if (it.Current == '"') { throw new NotImplementedException(); } else if (it.Current == '.') { throw new NotImplementedException(); } else if (it.Current == ' ' || it.Current == '\t' || it.Current == '=') { return(new TomlValue(segment.Subbytes(0, it.BytePosition), TomlValueType.BareKey, parentIndex)); } } throw new NotImplementedException(); }
public static void Escape(Utf8String s, IStore w) { if (s.IsEmpty) { return; } var it = s.GetIterator(); while (it.MoveNext()) { var l = it.CurrentByteLength; if (l == 1) { var b = it.Current; switch (b) { case (Byte)'"': case (Byte)'\\': case (Byte)'/': // \\ prefix w.Write((Byte)'\\'); w.Write(b); break; case (Byte)'\b': w.Write((Byte)'\\'); w.Write((Byte)'b'); break; case (Byte)'\f': w.Write((Byte)'\\'); w.Write((Byte)'f'); break; case (Byte)'\n': w.Write((Byte)'\\'); w.Write((Byte)'n'); break; case (Byte)'\r': w.Write((Byte)'\\'); w.Write((Byte)'r'); break; case (Byte)'\t': w.Write((Byte)'\\'); w.Write((Byte)'t'); break; default: w.Write(b); break; } // ascii } else if (l == 2) { w.Write(it.Current); w.Write(it.Second); } else if (l == 3) { w.Write(it.Current); w.Write(it.Second); w.Write(it.Third); } else if (l == 4) { w.Write(it.Current); w.Write(it.Second); w.Write(it.Third); w.Write(it.Fourth); } else { throw new ParserException("invalid utf8"); } } }
public static int Unescape(Utf8String s, IStore w) { var writeCount = 0; Action <Byte> Write = c => { if (w != null) { w.Write(c); } ++writeCount; }; var it = s.GetIterator(); while (it.MoveNext()) { var l = it.CurrentByteLength; if (l == 1) { if (it.Current == (Byte)'\\') { var c = it.Second; switch (c) { case (Byte)'\\': case (Byte)'/': case (Byte)'"': // remove prefix Write(c); it.MoveNext(); continue; case (Byte)'b': Write((Byte)'\b'); it.MoveNext(); continue; case (Byte)'f': Write((Byte)'\f'); it.MoveNext(); continue; case (Byte)'n': Write((Byte)'\n'); it.MoveNext(); continue; case (Byte)'r': Write((Byte)'\r'); it.MoveNext(); continue; case (Byte)'t': Write((Byte)'\t'); it.MoveNext(); continue; } } Write(it.Current); } else if (l == 2) { Write(it.Current); Write(it.Second); } else if (l == 3) { Write(it.Current); Write(it.Second); Write(it.Third); } else if (l == 4) { Write(it.Current); Write(it.Second); Write(it.Third); Write(it.Fourth); } else { throw new ParserException("invalid utf8"); } } return(writeCount); }