public void Values() { SValue value; value = SValue.NewString("text"); Assert.AreEqual("text", value.String); Assert.AreEqual(true, value.IsString); Assert.AreEqual(false, value.IsNone); Assert.AreEqual(false, value.IsInt); Assert.AreEqual(0, value.Int); Assert.AreEqual(0, value.Double); Assert.AreEqual(false, value.Bool); Assert.AreEqual(false, value.IsFloat); Assert.AreEqual(false, value.IsLong); value = SValue.NewInt(10); Assert.AreEqual(10, value.Int); Assert.AreEqual(true, value.IsInt); Assert.AreEqual(false, value.IsString); Assert.AreEqual(false, value.IsNone); value = SValue.NewDouble(10.2); Assert.AreEqual(10.2, value.Double); Assert.AreEqual(0, value.Int); Assert.AreEqual(true, value.IsDouble); Assert.AreEqual(false, value.IsInt); Assert.AreEqual(false, value.IsString); Assert.AreEqual(false, value.IsNone); value = SValue.NewBool(true); Assert.AreEqual(true, value.Bool); Assert.AreEqual(0, value.Int); Assert.AreEqual(true, value.IsBool); Assert.AreEqual(false, value.IsInt); Assert.AreEqual(false, value.IsString); Assert.AreEqual(false, value.IsNone); value = SValue.NewBool(false); Assert.AreEqual(false, value.Bool); Assert.AreEqual(true, value.IsBool); value = SValue.NewFloat(10.5f); Assert.AreEqual(10.5f, value.Float); Assert.AreEqual(true, value.IsFloat); value = SValue.NewLong(10000L); Assert.AreEqual(10000L, value.Long); Assert.AreEqual(true, value.IsLong); }
public void SerializeAndDeserialize_Simple() { Assert.AreEqual("'some text'", SValue.Unserialize(SValue.Serialize(SValue.NewString("some text"))).ToString()); Assert.AreEqual("''", SValue.Unserialize(SValue.Serialize(SValue.NewString(""))).ToString()); Assert.AreEqual("''", SValue.Unserialize(SValue.Serialize(SValue.NewString(null))).ToString()); Assert.AreEqual("10", SValue.Unserialize(SValue.Serialize(SValue.NewInt(10))).ToString()); Assert.AreEqual("-150", SValue.Unserialize(SValue.Serialize(SValue.NewInt(-150))).ToString()); Assert.AreEqual("10.1d", SValue.Unserialize(SValue.Serialize(SValue.NewDouble(10.1))).ToString()); Assert.AreEqual("-0.1d", SValue.Unserialize(SValue.Serialize(SValue.NewDouble(-0.1))).ToString()); Assert.AreEqual("True", SValue.Unserialize(SValue.Serialize(SValue.NewBool(true))).ToString()); Assert.AreEqual("False", SValue.Unserialize(SValue.Serialize(SValue.NewBool(false))).ToString()); Assert.AreEqual("1.5f", SValue.Unserialize(SValue.Serialize(SValue.NewFloat(1.5f))).ToString()); Assert.AreEqual("2000L", SValue.Unserialize(SValue.Serialize(SValue.NewLong(2000L))).ToString()); Assert.AreEqual("None", SValue.Unserialize(SValue.Serialize(SValue.None)).ToString()); }
public void Rescan() { string tempFile = Path.Combine(Path.GetTempPath(), "typewriter-syntax.bin"); SValue temp = File.Exists(tempFile) ? SValue.Unserialize(File.ReadAllBytes(tempFile)) : SValue.None; Dictionary <string, bool> scanned = new Dictionary <string, bool>(); List <string> files = new List <string>(); foreach (string dir in dirs) { if (!Directory.Exists(dir)) { continue; } foreach (string fileI in Directory.GetFiles(dir, "*.xml")) { string fileName = Path.GetFileName(fileI); if (!scanned.ContainsKey(fileName)) { scanned[fileName] = true; files.Add(fileI); } } } scanned.Clear(); SValue newTemp = SValue.NewHash(); infos.Clear(); syntaxFileByName.Clear(); bool changed = false; foreach (string fileI in files) { SValue tempI = temp[fileI]; long newTicks = File.GetLastWriteTime(fileI).Ticks; long ticks = tempI["ticks"].Long; if (newTicks == ticks) { LanguageInfo info = new LanguageInfo(); info.syntax = tempI["syntax"].String; info.patterns = ParsePatterns(tempI["patterns"].String); info.priority = tempI["priority"].Int; syntaxFileByName[info.syntax] = fileI; infos.Add(info); newTemp[fileI] = tempI; } else { changed = true; XmlReaderSettings settings = new XmlReaderSettings(); settings.ProhibitDtd = false; settings.XmlResolver = null; using (XmlReader reader = XmlReader.Create(fileI, settings)) { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && reader.Name == "language") { string syntax = ""; string patterns = ""; int priority = 0; for (int i = 0; i < reader.AttributeCount; i++) { reader.MoveToAttribute(i); if (reader.Name == "name") { syntax = reader.Value.ToLowerInvariant(); } else if (reader.Name == "extensions") { patterns = reader.Value; } else if (reader.Name == "priority") { int.TryParse(reader.Value, out priority); } } if (!string.IsNullOrEmpty(syntax)) { LanguageInfo info = new LanguageInfo(); info.syntax = syntax; info.patterns = ParsePatterns(patterns); info.priority = priority; syntaxFileByName[info.syntax] = fileI; infos.Add(info); SValue newTempI = SValue.NewHash(); newTempI["syntax"] = SValue.NewString(info.syntax); newTempI["patterns"] = SValue.NewString(patterns); newTempI["priority"] = SValue.NewInt(priority); newTempI["ticks"] = SValue.NewLong(newTicks); newTemp[fileI] = newTempI; } break; } } } } } if (changed) { File.WriteAllBytes(tempFile, SValue.Serialize(newTemp)); } }
private void Rescan() { infos.Clear(); snippetFiles.Clear(); string tempFile = Path.Combine(Path.GetTempPath(), "typewriter-snippet.bin"); SValue temp = File.Exists(tempFile) ? SValue.Unserialize(File.ReadAllBytes(tempFile)) : SValue.None; Dictionary <string, bool> scanned = new Dictionary <string, bool>(); List <string> files = new List <string>(); foreach (string dir in dirs) { if (!Directory.Exists(dir)) { continue; } foreach (string fileI in Directory.GetFiles(dir, "*.snippets")) { string fileName = Path.GetFileName(fileI); if (!scanned.ContainsKey(fileName)) { scanned[fileName] = true; files.Add(Path.Combine(dir, fileI)); } } } files.Sort(); scanned.Clear(); SValue newTemp = SValue.NewHash(); infos.Clear(); foreach (string pathI in files) { string fileName = Path.GetFileName(pathI); SValue tempI = temp[fileName]; long newTicks = File.GetLastWriteTime(pathI).Ticks; long ticks = tempI["ticks"].Long; if (newTicks == ticks) { SnippetInfo info = new SnippetInfo(); info.path = pathI; info.patterns = ParseExtenstions(tempI["patterns"].String); infos.Add(info); newTemp[fileName] = tempI; } else { string line = null; using (StreamReader reader = new StreamReader(pathI)) { line = reader.ReadLine(); } string patterns; if (line != null && line.StartsWith("extensions:")) { patterns = line.Substring("extensions:".Length).Trim(); } else { patterns = ""; } SValue newTempI = SValue.NewHash(); newTempI["patterns"] = SValue.NewString(patterns); newTempI["ticks"] = SValue.NewLong(newTicks); newTemp[fileName] = newTempI; SnippetInfo info = new SnippetInfo(); info.path = pathI; info.patterns = ParseExtenstions(patterns); infos.Add(info); } } File.WriteAllBytes(tempFile, SValue.Serialize(newTemp)); }