/// <summary> /// Erstellt einen Table aus einer Tablefile Datei /// </summary> /// <param name="path">Pfad zur Datei, benötigt Leserecht</param> /// <param name="provider">Custom IEscapeSequenceProvider</param> public Table(string path, IEscapeSequenceProvider provider = null) { if (provider == null) provider = new SingleEscapes(); _chars = new List<TableEntry>(); var fs = new FileStream(path, FileMode.Open); var sr = new StreamReader(fs, Encoding.UTF8); string table = sr.ReadToEnd(); fs.Close(); sr.Dispose(); foreach (string line in table.Split(new[] { "\r\n", "\n" }, StringSplitOptions.None)) { _chars.Add(TableEntry.FromString(line, provider)); } }
public static TableEntry FromString(string input, IEscapeSequenceProvider sequenceProvider) { IEscapeSequence[] sequences = sequenceProvider.Sequences; string[] split = input.Split('='); string hex = split[0]; string disp = split[1]; var sr = new StringReader(hex); var c = (char)sr.Peek(); if (c != '\\') { return new TableEntry(new[] { Convert.ToByte(sr.ReadToEnd(), 16)}, disp); } sr.Read(); var s = (char)sr.Read(); if (sequences.All(sequence => sequence.Sequence != s)) throw new Exception(string.Format("Escape Sequenz {0} wurde nicht gefunden", s)); IEscapeSequence foundSequence = sequences.First(sequence => sequence.Sequence == s); return new TableEntry(foundSequence.Resolve(sr), disp); }