Пример #1
0
        public bool HasFile(RefFilename file)
        {
            var f = new RefFilename(file.ToRelativeFilename(), this == Core.Instance.BaseCK3Library);

            if (FileMap.ContainsKey(f))
            {
                return(true);
            }

            return(false);
        }
Пример #2
0
        public ScriptContext GetContextFromDirectory(RefFilename dir)
        {
            var res = BaseCK3Library.ContextData
                      .Where(a => a.Value.Directory != null && dir.ToRelativeFilename().StartsWith(a.Value.Directory))
                      .ToList();

            if (res.Any())
            {
                return(res[0].Key);
            }

            return(ScriptContext.Event);
        }
Пример #3
0
        public ScriptFile GetFile(RefFilename file)
        {
            var f = new RefFilename(file.ToRelativeFilename(), this == Core.Instance.BaseCK3Library);

            if (FileMap.ContainsKey(f))
            {
                return(FileMap[f]);
            }

            if (Parent != null)
            {
                return(Parent.GetFile(file));
            }

            return(null);
        }
Пример #4
0
        public bool AddFile(RefFilename file)
        {
            var f = new ScriptFile();

            f.Filename = new RefFilename(file.ToRelativeFilename(), this == Core.Instance.BaseCK3Library);
            var l = Core.Instance.BaseCK3Library.ContextData.Where(a =>
                                                                   a.Value.Directory != null && f.Filename.ToRelativeDirectoryOfFile().Contains(a.Value.Directory));

            if (l.Count() == 0)
            {
                return(false);
            }
            f.Context     = l.First().Key;
            FileMap[file] = f;
            return(true);
        }
Пример #5
0
        public List <ScriptObject> LoadText(string text, RefFilename filename, ScriptContext context, bool save = false)
        {
            ScriptNamespace = "";
            var results = new List <ScriptObject>();


            file = Core.Instance.LoadingCK3Library.EnsureFile(filename, context);

            var lines       = text.Split('\n');
            var lineNumbers = new List <int>();
            var tokens      = new List <string>();
            var index       = 0;

            for (var i = 0; i < lines.Length; i++)
            {
                var line = lines[i];
                line = line.Trim();
                index++;

                if (line.Contains("debug_log"))
                {
                    continue;
                }
                if (line.Trim().StartsWith("#"))
                {
                    continue;
                }
                var line2 = line;
                if (line.Length == 0)
                {
                    continue;
                }
                if (line2 == "name = \"Abdallah\" #ibn Muhammad\"")
                {
                }

                if (line2.Contains("\"") && (line2.IndexOf("\"") < line2.IndexOf("#") || line2.IndexOf("#") == -1))
                {
                    var ll    = line2;
                    var after = "";
                    while (ll.Contains("\""))
                    {
                        if (ll.Contains("\"") &&
                            (ll.IndexOf("\"") < ll.IndexOf("#") || ll.IndexOf("#") == -1))
                        {
                            var s      = ll.IndexOf("\"");
                            var e      = ll.IndexOf("\"", s + 1);
                            var l      = e - s;
                            var before = ll.Substring(0, s);
                            var str    = ll.Substring(s + 1, l - 1);
                            after = ll.Substring(e + 1);

                            TokenizeLine(before.Trim(), tokens);
                            tokens.Add("\"" + str + "\"");
                            lineNumbers.Add(index);
                            ll = after;
                        }
                        else
                        {
                            ll = ll.Substring(0, ll.IndexOf("#")).Trim();
                        }
                    }

                    TokenizeLine(after.Trim(), tokens);


                    while (lineNumbers.Count < tokens.Count)
                    {
                        lineNumbers.Add(index);
                    }
                }
                else
                {
                    TokenizeLine(line2, tokens);
                    while (lineNumbers.Count < tokens.Count)
                    {
                        lineNumbers.Add(index);
                    }
                }
            }

            if (tokens.Count == 0)
            {
                return(results);
            }

            var parsableResults = ParseTokens(tokens, lineNumbers, filename);

            if (save)
            {
                SaveBinary(parsableResults, context, filename.ToRelativeFilename());
            }

            ParseResults(null, parsableResults, context, results);

            return(results);
        }