示例#1
0
        public void OverrideItem(DefinitionCacheItem item)
        {
            var wasOverridden = false;

            // If a script is overriding/appending as  alanguage script make it a language script
            if (Type == DefinitionCacheItemType.Language || Type == DefinitionCacheItemType.LanguageScript)
            {
                if (item.Type == DefinitionCacheItemType.Script)
                {
                    item.Type = DefinitionCacheItemType.LanguageScript;
                }
            }
            for (int i = 0; i < _parameters.Count; i++)
            {
                if (_parameters[i].Name == item.Name)
                {
                    item.Original  = _parameters[i];
                    _parameters[i] = item;
                    wasOverridden  = true;
                    break;
                }
            }
            if (!wasOverridden)
            {
                Append(item);
            }
        }
示例#2
0
        private DefinitionJson get(DefinitionCacheItem parameter)
        {
            var json = getDefinition(parameter);

            addChildren(json, parameter.Parameters);
            return(json);
        }
示例#3
0
        public DefinitionCacheItem GetOldestItem(string location)
        {
            DefinitionCacheItem oldest = null;

            visitAll(
                (item) => {
                if (location != null && item.Location != location)
                {
                    return;
                }
                if (oldest == null)
                {
                    oldest = item;
                }
                else
                {
                    if (oldest.Updated > item.Updated)
                    {
                        oldest = item;
                    }
                }
            },
                _definitions);
            return(oldest);
        }
示例#4
0
 public static void PrintSingleDefinition(DefinitionCacheItem item, int level)
 {
     var name = item.Name;
     if (!item.Required)
         name = "[" + name + "]";
     Console.WriteLine("{0}{1} : {2}", "".PadLeft(level, '\t'), name, item.Description);
 }
示例#5
0
        private DefinitionJson getDefinition(DefinitionCacheItem parameter)
        {
            var json = new DefinitionJson();

            if (parameter.Override)
            {
                json.Cmd = "[[" + parameter.Name + "]]";
            }
            else
            {
                if (parameter.Required)
                {
                    json.Cmd = parameter.Name;
                }
                else
                {
                    json.Cmd = "[" + parameter.Name + "]";
                }
            }
            json.Type     = parameter.Type.ToString().ToLower();
            json.Location = parameter.Location;
            json.Updated  =
                string.Format("{0}.{1}.{2} {3}:{4}:{5}",
                              parameter.Updated.Year,
                              parameter.Updated.Month.ToString().PadLeft(2, '0'),
                              parameter.Updated.Day.ToString().PadLeft(2, '0'),
                              parameter.Updated.Hour.ToString().PadLeft(2, '0'),
                              parameter.Updated.Minute.ToString().PadLeft(2, '0'),
                              parameter.Updated.Second.ToString().PadLeft(2, '0'));
            json.Description = parameter.Description;
            return(json);
        }
示例#6
0
 private void add(DefinitionCache cache, DefinitionCacheItem item, IEnumerable <DefinitionCacheItem> parameters)
 {
     foreach (var parameter in parameters)
     {
         add(cache, item, parameter);
     }
 }
示例#7
0
 public static void PrintDefinition(DefinitionCacheItem item, ref int level)
 {
     level++;
     PrintSingleDefinition(item, level);
     foreach (var child in item.Parameters)
         PrintDefinition(child, ref level);
     level--;
 }
示例#8
0
 private void add(DefinitionCache cache, DefinitionCacheItem item, IEnumerable <BaseCommandHandlerParameter> parameters)
 {
     foreach (var parameter in parameters)
     {
         if (parameter.Override)
         {
             overrideCommand(cache, item, parameter);
         }
         else
         {
             add(cache, item, parameter);
         }
     }
 }
示例#9
0
        private void overrideItem(DefinitionCacheItem item)
        {
            if (item.Parameters.Length == 0)
            {
                return;
            }
            var existing = _definitions.FirstOrDefault(x => x.Name == item.Name);

            if (existing == null)
            {
                return;
            }
            overrideItem(existing, item);
        }
示例#10
0
 public bool Run(DefinitionCacheItem cmd, IEnumerable<string> args)
 {
     var arguments = args.ToList();
     Logger.Write("Removing the command name from parameters: " + arguments[0]);
     arguments.RemoveAt(0);
     if (cmd.Type == DefinitionCacheItemType.Script || cmd.Type == DefinitionCacheItemType.LanguageScript) {
         Logger.Write("Running command as script");
         var script = new Script(Bootstrapper.Settings.RootPath, Environment.CurrentDirectory, cmd.Location);
         var sb = new StringBuilder();
         // On language commands remove the second argument too if
         // it matches the command name (oi langcommand vs oi C# langcommand)
         if (cmd.Type == DefinitionCacheItemType.LanguageScript &&
             arguments.Count > 0 &&
             Bootstrapper.Settings.EnabledLanguages.Contains(args.ElementAt(0)))
         {
             Logger.Write("Removing second parameter from language command as it's a language script prefixed by language: " + arguments[0]);
             arguments.RemoveAt(0);
         }
         for (int i = 0; i < arguments.Count; i++) {
             sb.Append(" \"" + arguments[i] + "\"");
         }
         script.Run(
             sb.ToString(),
             (command) => {
                 Bootstrapper.DispatchAndCompleteMessage(
                     command,
                     () => {
                         Logger.Write("Writing end of command");
                         script.Write("end-of-command");
                     });
             });
     } else if (cmd.Type == DefinitionCacheItemType.Language) {
         Logger.Write("Running command as language command");
         var language = new LanguagePlugin(cmd.Location, Bootstrapper.DispatchMessage);
         // If default language command add original parameter
         if (args.ElementAt(0) != language.GetLanguage())
             arguments.Insert(0, args.ElementAt(0));
         language.Run(arguments.ToArray());
     } else {
         Logger.Write("Running command as built in command");
         var command = Bootstrapper.GetDefaultHandlers()
             .FirstOrDefault(x => x.Command == args.ElementAt(0));
         if (command == null)
             return false;
         command.Execute(arguments.ToArray());
         _eventDispatcher(string.Format("builtin command ran \"{0}\" {1}", command.Command, new CommandStringParser().GetArgumentString(arguments)));
     }
     return true;
 }
 private void addItem(DefinitionCacheItem parent, JToken json)
 {
     var item =
         parent
             .Append(
                 getType(json["type"].ToString()),
                 json["location"].ToString(),
                 getTime(json["updated"].ToString()),
                 json["cmd"].ToString().StartsWith("[["),
                 !json["cmd"].ToString().StartsWith("["),
                 json["cmd"].ToString().Replace("[", "").Replace("]", ""),
                 json["description"].ToString());
     foreach (var child in json["arguments"].Children())
         addItem(item, child);
 }
示例#12
0
 private DefinitionCacheItem add(DefinitionCacheItem item)
 {
     addRaw(item);
     if (_definitions.Any(x => x.Name == item.Name))
     {
         if (item.Location == "placehoder-for-language-in-different-location")
         {
             var original = _definitions.FirstOrDefault(x => x.Name == item.Name && x.Type == DefinitionCacheItemType.Language);
             overrideItem(item);
             return(original);
         }
         _definitions.RemoveAll(x => x.Name == item.Name);
     }
     _definitions.Add(item);
     return(item);
 }
示例#13
0
        private void overrideCommand(DefinitionCache cache, DefinitionCacheItem item, BaseCommandHandlerParameter parameter)
        {
            var command = cache.Add(
                item.Type,
                item.Location,
                item.Updated,
                parameter.Override,
                parameter.Required,
                parameter.Name,
                parameter.Description);

            foreach (var cmd in parameter.Parameters)
            {
                add(cache, command, cmd);
            }
        }
示例#14
0
        private void addItem(DefinitionCacheItem parent, JToken json)
        {
            var item =
                parent
                .Append(
                    getType(json["type"].ToString()),
                    json["location"].ToString(),
                    getTime(json["updated"].ToString()),
                    json["cmd"].ToString().StartsWith("[["),
                    !json["cmd"].ToString().StartsWith("["),
                    json["cmd"].ToString().Replace("[", "").Replace("]", ""),
                    json["description"].ToString());

            foreach (var child in json["arguments"].Children())
            {
                addItem(item, child);
            }
        }
示例#15
0
        private void add(DefinitionCache cache, DefinitionCacheItem item, BaseCommandHandlerParameter parameter)
        {
            var name  = parameter.Name;
            var child =
                item.Append(
                    item.Type,
                    item.Location,
                    item.Updated,
                    parameter.Override,
                    parameter.Required,
                    name,
                    parameter.Description);

            foreach (var cmd in parameter.Parameters)
            {
                add(cache, child, cmd);
            }
        }
示例#16
0
 private void addRaw(DefinitionCacheItem item)
 {
     if (item.Type == DefinitionCacheItemType.BuiltIn)
     {
         _builtIn.Add(item);
     }
     else if (item.Type == DefinitionCacheItemType.Language)
     {
         _languages.Add(item);
     }
     else if (item.Type == DefinitionCacheItemType.LanguageScript)
     {
         _languageScripts.Add(item);
     }
     else if (item.Type == DefinitionCacheItemType.Script)
     {
         _scripts.Add(item);
     }
 }
示例#17
0
        private DefinitionCacheItem add(DefinitionCacheItemType type, string location, DateTime updated, bool ovrride, bool required, string name, string description)
        {
            var item =
                new DefinitionCacheItem(parameterAppender)
            {
                Type        = type,
                Location    = location,
                Updated     = updated,
                Override    = ovrride,
                Required    = required,
                Name        = name,
                Description = description
            };

            if (item.Override)
            {
                _definitions.Add(item);
                return(item);
            }
            return(add(item));
        }
示例#18
0
        private void overrideItem(DefinitionCacheItem existing, DefinitionCacheItem item)
        {
            if (item.Parameters.Length == 0)
            {
                return;
            }
            var childItem = item.Parameters[0];

            if (!childItem.Override)
            {
                Logger.Write("Found and overrides command with " + item.Name);
                existing.OverrideItem(childItem);
                return;
            }
            var child = existing.Parameters.FirstOrDefault(x => x.Name == childItem.Name);

            if (child == null)
            {
                return;
            }
            overrideItem(child, childItem);
        }
 private DefinitionJson getDefinition(DefinitionCacheItem parameter)
 {
     var json = new DefinitionJson();
     if (parameter.Override) {
         json.Cmd = "[[" + parameter.Name + "]]";
     } else {
         if (parameter.Required)
             json.Cmd = parameter.Name;
         else
             json.Cmd = "[" + parameter.Name + "]";
     }
     json.Type = parameter.Type.ToString().ToLower();
     json.Location = parameter.Location;
     json.Updated =
         string.Format("{0}.{1}.{2} {3}:{4}:{5}",
             parameter.Updated.Year,
             parameter.Updated.Month.ToString().PadLeft(2, '0'),
             parameter.Updated.Day.ToString().PadLeft(2, '0'),
             parameter.Updated.Hour.ToString().PadLeft(2, '0'),
             parameter.Updated.Minute.ToString().PadLeft(2, '0'),
             parameter.Updated.Second.ToString().PadLeft(2, '0'));
     json.Description = parameter.Description;
     return json;
 }
示例#20
0
        private DefinitionCacheItem get(string[] args, int index, IEnumerable <DefinitionCacheItem> items, DefinitionCacheItem parent)
        {
            if (index > args.Length - 1)
            {
                return(parent);
            }
            if (items.Count() == 0)
            {
                return(parent);
            }
            var item = items.FirstOrDefault(x => x.Name == args[index]);

            if (item == null)
            {
                if (isOptionalArgument(args[index], items))
                {
                    return(parent);
                }
                if (items.Any(x => x.Name == x.Name.ToUpper()))
                {
                    return(parent);
                }
                return(null);
            }
            if (args.Length == index + 1)
            {
                return(item);
            }
            return(get(args, index + 1, item.Parameters, item));
        }
示例#21
0
 public void OverrideItem(DefinitionCacheItem item)
 {
     var wasOverridden = false;
     // If a script is overriding/appending as  alanguage script make it a language script
     if (Type == DefinitionCacheItemType.Language || Type == DefinitionCacheItemType.LanguageScript) {
         if (item.Type == DefinitionCacheItemType.Script)
             item.Type = DefinitionCacheItemType.LanguageScript;
     }
     for (int i = 0; i < _parameters.Count; i++) {
         if (_parameters[i].Name == item.Name) {
             item.Original = _parameters[i];
             _parameters[i] = item;
             wasOverridden = true;
             break;
         }
     }
     if (!wasOverridden)
         Append(item);
 }
示例#22
0
 public DefinitionCacheItem Append(DefinitionCacheItem parameter)
 {
     return _parameterAppender(_parameters, parameter);
 }
示例#23
0
        private bool overrideItem(DefinitionCacheItem existing, DefinitionCacheItem item)
        {
            if (!item.Override)
                return true;

            if (item.Parameters.Length == 0)
                return false;
            var childItem = item.Parameters[0];
            var child = existing.Parameters.FirstOrDefault(x => x.Name == childItem.Name);
            if (child == null)
                return false;
            if (overrideItem(child, childItem))
                existing.OverrideItem(childItem);
            return false;
        }
示例#24
0
 private DefinitionCacheItem get(string[] args, int index, IEnumerable<DefinitionCacheItem> items, DefinitionCacheItem parent)
 {
     if (index > args.Length - 1)
         return parent;
     if (items.Count() == 0)
         return parent;
     var item = items.FirstOrDefault(x => x.Name == args[index]);
     if (item == null) {
         if (isOptionalArgument(args[index], items)) {
             return parent;
         }
         if (items.Any(x => x.Name == x.Name.ToUpper()))
             return parent;
         return null;
     }
     if (args.Length == index + 1)
         return item;
     return get(args, index + 1, item.Parameters, item);
 }
示例#25
0
 private DefinitionCacheItem add(DefinitionCacheItem item)
 {
     addRaw(item);
     if (_definitions.Any(x => x.Name == item.Name))
         _definitions.RemoveAll(x => x.Name == item.Name);
     _definitions.Add(item);
     return item;
 }
示例#26
0
 private IEnumerable<string> getPaths(DefinitionCacheItem x, string path)
 {
     if (x.Parameters.Count() == 0)
         return new string[] { path };
     var paths = new List<string>();
     x.Parameters.ToList()
         .ForEach(y => paths.AddRange(getPaths(y, path + "/" + y.Name)));
     return paths;
 }
 private DefinitionJson get(DefinitionCacheItem parameter)
 {
     var json = getDefinition(parameter);
     addChildren(json, parameter.Parameters);
     return json;
 }
示例#28
0
 private void add(DefinitionCache cache, DefinitionCacheItem item, IEnumerable<BaseCommandHandlerParameter> parameters)
 {
     foreach (var parameter in parameters) {
         if (parameter.Override)
             overrideCommand(cache, item, parameter);
         else
             add(cache, item, parameter);
     }
 }
示例#29
0
 private void add(DefinitionCache cache, DefinitionCacheItem item, BaseCommandHandlerParameter parameter)
 {
     var name = parameter.Name;
     var child =
         item.Append(
                 item.Type,
                 item.Location,
                 item.Updated,
                 parameter.Override,
                 parameter.Required,
                 name,
                 parameter.Description);
     foreach (var cmd in parameter.Parameters)
         add(cache, child, cmd);
 }
示例#30
0
 private void overrideCommand(DefinitionCache cache, DefinitionCacheItem item, BaseCommandHandlerParameter parameter)
 {
     var command = cache.Add(
         item.Type,
         item.Location,
         item.Updated,
         parameter.Override,
         parameter.Required,
         parameter.Name,
         parameter.Description);
     foreach (var cmd in parameter.Parameters)
         add(cache, command, cmd);
 }
示例#31
0
 private DefinitionCacheItem add(DefinitionCacheItem item)
 {
     addRaw(item);
     if (_definitions.Any(x => x.Name == item.Name)) {
         if (item.Location == "placehoder-for-language-in-different-location") {
             var original = _definitions.FirstOrDefault(x => x.Name == item.Name && x.Type == DefinitionCacheItemType.Language);
             overrideItem(item);
             return original;
         }
         _definitions.RemoveAll(x => x.Name == item.Name);
     }
     _definitions.Add(item);
     return item;
 }
示例#32
0
 public void Add(DefinitionCacheItem item)
 {
     _definitions.Add(item);
 }
示例#33
0
 private DefinitionCacheItem parameterAppender(List <DefinitionCacheItem> parameters, DefinitionCacheItem parameterToAdd)
 {
     parameters.Add(parameterToAdd);
     return(parameterToAdd);
 }
示例#34
0
 private void add(DefinitionCache cache, DefinitionCacheItem item, IEnumerable<DefinitionCacheItem> parameters)
 {
     foreach (var parameter in parameters)
         add(cache, item, parameter);
 }
示例#35
0
 public DefinitionCacheItem Append(DefinitionCacheItem parameter)
 {
     return(_parameterAppender(_parameters, parameter));
 }
示例#36
0
 private DefinitionCacheItem add(DefinitionCacheItemType type, string location, DateTime updated, bool ovrride, bool required, string name, string description)
 {
     var item =
         new DefinitionCacheItem(parameterAppender) {
                 Type = type,
                 Location = location,
                 Updated = updated,
                 Override = ovrride,
                 Required = required,
                 Name = name,
                 Description = description
             };
     if (item.Override) {
         _definitions.Add(item);
         return item;
     }
     return add(item);
 }
示例#37
0
 public void OverrideItem(DefinitionCacheItem item)
 {
     var wasOverridden = false;
     for (int i = 0; i < _parameters.Count; i++) {
         if (_parameters[i].Name == item.Name) {
             item.Original = _parameters[i];
             _parameters[i] = item;
             wasOverridden = true;
             break;
         }
     }
     if (!wasOverridden)
         Append(item);
 }
示例#38
0
 private void addRaw(DefinitionCacheItem item)
 {
     if (item.Type == DefinitionCacheItemType.BuiltIn)
         _builtIn.Add(item);
     else if (item.Type == DefinitionCacheItemType.Language)
         _languages.Add(item);
     else if (item.Type == DefinitionCacheItemType.LanguageScript)
         _languageScripts.Add(item);
     else if (item.Type == DefinitionCacheItemType.Script)
         _scripts.Add(item);
 }
示例#39
0
 public static void PrintDefinition(DefinitionCacheItem item)
 {
     int level = 0;
     PrintDefinition(item, ref level);
 }
示例#40
0
 private void overrideItem(DefinitionCacheItem item)
 {
     if (item.Parameters.Length == 0)
         return;
     var existing = _definitions.FirstOrDefault(x => x.Name == item.Name);
     if (existing == null)
         return;
     if (overrideItem(existing.Parameters[0], item.Parameters[0]))
         existing.OverrideItem(item.Parameters[0]);
 }
示例#41
0
 public void Add(DefinitionCacheItem item)
 {
     _definitions.Add(item);
 }
示例#42
0
 private DefinitionCacheItem parameterAppender(List<DefinitionCacheItem> parameters, DefinitionCacheItem parameterToAdd)
 {
     parameters.Add(parameterToAdd);
     return parameterToAdd;
 }
示例#43
0
 public static void PrintSingleDefinition(DefinitionCacheItem item)
 {
     PrintSingleDefinition(item, 0);
 }
示例#44
0
 public void OverrideItem(DefinitionCacheItem item)
 {
     for (int i = 0; i < _parameters.Count; i++) {
         if (_parameters[i].Name == item.Name) {
             item.Original = _parameters[i];
             _parameters[i] = item;
             return;
         }
     }
 }
示例#45
0
 private void overrideItem(DefinitionCacheItem existing, DefinitionCacheItem item)
 {
     if (item.Parameters.Length == 0)
         return;
     var childItem = item.Parameters[0];
     if (!childItem.Override) {
         Logger.Write("Found and overrides command with "+item.Name);
         existing.OverrideItem(childItem);
         return;
     }
     var child = existing.Parameters.FirstOrDefault(x => x.Name == childItem.Name);
     if (child == null)
         return;
     overrideItem(child, childItem);
 }