Beispiel #1
0
        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);
        }
Beispiel #2
0
 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());
 }
Beispiel #3
0
    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));
        }
    }
Beispiel #4
0
    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));
    }