Пример #1
0
 /// <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));
     }
 }
Пример #2
0
        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);
        }