List <FindResult> GetNumbersInDrawing(List <string> searchStringList, NumberDefinition numDef) { List <FindResult> results = new List <FindResult>(); var firstLinehits = new List <Tuple <int, int> >(); for (int i = 0; i < searchStringList.Count; i++) { //search matches inline, add to init-check-position (firstLineHits) foreach (int charPos in searchStringList[i].AllIndexesOf((string)numDef.lines[0]).ToList()) { firstLinehits.Add(new Tuple <int, int>(i, charPos)); } } foreach (var firstLine in firstLinehits) { //try to get followups int lineNumber = firstLine.Item1; int charNumber = firstLine.Item2; bool found = false; if (searchStringList.Count >= lineNumber + numDef.lines.Count) { found = true; for (int i = 1; i < numDef.lines.Count; i++) { //followup lines are too short -> skip if (searchStringList[lineNumber + i].Length >= charNumber + numDef.lines[i].Length) { if (searchStringList[lineNumber + i].Substring(charNumber, numDef.lines[i].Length) != numDef.lines[i]) { found = false; } } else { found = false; } } } if (found) { results.Add(new FindResult() { Number = numDef.Number, Line = lineNumber, CharPos = charNumber }); } } return(results); }
//----------------------------------------------------------------------- private static DataDefinition CreateDefinitionFromElement(XElement el, DataDefinition existing) { if (!el.HasElements) { // we are a primitive // are we a number? float fval; bool isFloat = float.TryParse(el.Value, out fval); int ival; bool isInt = int.TryParse(el.Value, out ival); bool bval; bool isBool = bool.TryParse(el.Value, out bval); if (existing != null) { if (isFloat || isInt) { if (existing is NumberDefinition) { var def = existing as NumberDefinition; if (!isInt) { def.UseIntegers = false; } if (fval < def.MinValue) { def.MinValue = fval; } if (fval > def.MaxValue) { def.MaxValue = fval; } return(def); } else { // we are actually a string var def = new StringDefinition(); def.Name = el.Value.ToString(); return(def); } } else if (isBool) { if (existing is BooleanDefinition) { return(existing); } else { // we are actually a string var def = new StringDefinition(); def.Name = el.Value.ToString(); return(def); } } else { if (existing is EnumDefinition) { if (el.Value.Contains("/") || el.Value.Contains(@"\\")) { var def = new FileDefinition(); def.Name = el.Name.ToString(); return(def); } else if (el.Value.Contains(" ")) { var def = new StringDefinition(); def.Name = el.Name.ToString(); return(def); } else { var def = existing as EnumDefinition; if (!def.EnumValues.Contains(el.Value)) { def.EnumValues.Add(el.Value); } return(def); } } else { return(existing); } } } else { if (isFloat || isInt) { var def = new NumberDefinition(); def.Name = el.Name.ToString(); def.UseIntegers = isInt; def.MinValue = fval; def.MaxValue = fval; return(def); } else if (isBool) { var def = new BooleanDefinition(); def.Name = el.Name.ToString(); return(def); } else { if (el.Value.Contains("/") || el.Value.Contains(@"\\")) { var def = new FileDefinition(); def.Name = el.Name.ToString(); return(def); } else if (el.Value.Contains(" ")) { var def = new StringDefinition(); def.Name = el.Name.ToString(); return(def); } else { var def = new EnumDefinition(); def.Name = el.Name.ToString(); def.EnumValues = new List <string>(); def.EnumValues.Add(el.Value); return(def); } } } } else if (el.Elements().Any(e => e.Name.ToString() != el.Elements().First().Name.ToString())) { // we are a struct if (existing != null) { var def = existing as StructDefinition; if (def != null) { foreach (var cel in el.Elements()) { if (el.Elements(cel.Name).Count() > 1) { // this is actually a collection var existingChild = def.Children.FirstOrDefault(e => e.Name == cel.Name.ToString()); CollectionDefinition coldef = null; if (existingChild == null) { coldef = new CollectionDefinition(); coldef.Name = cel.Name.ToString(); coldef.ChildDefinitions.Add(new CollectionChildDefinition()); coldef.ChildDefinitions[0].Name = cel.Name.ToString(); def.Children.Add(coldef); } else if (existingChild is CollectionDefinition) { coldef = existingChild as CollectionDefinition; } else { coldef = new CollectionDefinition(); coldef.Name = cel.Name.ToString(); coldef.ChildDefinitions.Add(new CollectionChildDefinition()); coldef.ChildDefinitions[0].Name = cel.Name.ToString(); coldef.ChildDefinitions[0].WrappedDefinition = existingChild; var index = def.Children.IndexOf(existingChild); def.Children[index] = coldef; } coldef.ChildDefinitions[0].WrappedDefinition = CreateDefinitionFromElement(cel, coldef.ChildDefinitions[0].WrappedDefinition); } else { // find existing child var ec = def.Children.FirstOrDefault(e => e.Name == cel.Name.ToString()); if (ec != null) { if (ec is CollectionDefinition) { var actualDef = CreateDefinitionFromElement(cel, null); if (actualDef is CollectionDefinition) { var cdef = CreateDefinitionFromElement(cel, ec); def.Children[def.Children.IndexOf(ec)] = cdef; } else { var coldef = ec as CollectionDefinition; coldef.ChildDefinitions[0].WrappedDefinition = CreateDefinitionFromElement(cel, coldef.ChildDefinitions[0].WrappedDefinition); } } else { var cdef = CreateDefinitionFromElement(cel, ec); def.Children[def.Children.IndexOf(ec)] = cdef; } } else { var cdef = CreateDefinitionFromElement(cel, null); def.Children.Add(cdef); } } } } return(existing); } else { var def = new StructDefinition(); def.Name = el.Name.ToString(); foreach (var cel in el.Elements()) { if (el.Elements(cel.Name).Count() > 1) { // this is actually a collection CollectionDefinition coldef = def.Children.FirstOrDefault(e => e.Name == cel.Name.ToString()) as CollectionDefinition; if (coldef == null) { coldef = new CollectionDefinition(); coldef.Name = cel.Name.ToString(); coldef.ChildDefinitions.Add(new CollectionChildDefinition()); coldef.ChildDefinitions[0].Name = cel.Name.ToString(); def.Children.Add(coldef); } coldef.ChildDefinitions[0].WrappedDefinition = CreateDefinitionFromElement(cel, coldef.ChildDefinitions[0].WrappedDefinition); } else { var cdef = CreateDefinitionFromElement(cel, null); def.Children.Add(cdef); } } return(def); } } else { // we are a collection if (existing != null) { if (existing is CollectionDefinition) { var def = existing as CollectionDefinition; foreach (var cel in el.Elements()) { def.ChildDefinitions[0].WrappedDefinition = CreateDefinitionFromElement(cel, def.ChildDefinitions[0].WrappedDefinition); } return(def); } else { var def = new CollectionDefinition(); def.Name = el.Name.ToString(); def.ChildDefinitions.Add(new CollectionChildDefinition()); def.ChildDefinitions[0].Name = el.Elements().First().Name.ToString(); def.ChildDefinitions[0].WrappedDefinition = existing; foreach (var cel in el.Elements()) { def.ChildDefinitions[0].WrappedDefinition = CreateDefinitionFromElement(cel, def.ChildDefinitions[0].WrappedDefinition); } return(def); } } else { var def = new CollectionDefinition(); def.Name = el.Name.ToString(); def.ChildDefinitions.Add(new CollectionChildDefinition()); def.ChildDefinitions[0].Name = el.Elements().First().Name.ToString(); foreach (var cel in el.Elements()) { def.ChildDefinitions[0].WrappedDefinition = CreateDefinitionFromElement(cel, def.ChildDefinitions[0].WrappedDefinition); } return(def); } } throw new Exception("Failed to parse element: " + el.Name); }
public void ExternalNumberDidChange(string json) { NumberDefinition definition = NumberDefinition.OfJson(json); ObservableNumberOfKey(definition.FullKey).SetValue(definition.Value); }
public NumberParameter(Int16 id, IParameterManager manager, NumberDefinition <T> typeDefinition) : base(id, manager, typeDefinition) { }
public static List <NumberDefinition> CreateNumberDefinitions() { List <NumberDefinition> result = new List <NumberDefinition>(); NumberDefinition nd = new NumberDefinition(); nd.Number = 0; nd.lines.Add("-----"); nd.lines.Add("| |"); nd.lines.Add("| |"); nd.lines.Add("|___|"); result.Add(nd); nd = new NumberDefinition(); nd.Number = 1; nd.lines.Add(" | "); nd.lines.Add(" | "); nd.lines.Add(" | "); nd.lines.Add(" | "); result.Add(nd); nd = new NumberDefinition(); nd.Number = 2; nd.lines.Add("---"); nd.lines.Add(" _|"); nd.lines.Add("| "); nd.lines.Add("---"); result.Add(nd); nd = new NumberDefinition(); nd.Number = 3; nd.lines.Add("---"); nd.lines.Add(" / "); nd.lines.Add(@" \ "); nd.lines.Add("---"); result.Add(nd); nd = new NumberDefinition(); nd.Number = 4; nd.lines.Add("| |"); nd.lines.Add("|___|"); nd.lines.Add(" |"); nd.lines.Add(" |"); result.Add(nd); nd = new NumberDefinition(); nd.Number = 5; nd.lines.Add("-----"); nd.lines.Add("|___ "); nd.lines.Add(" |"); nd.lines.Add("____|"); result.Add(nd); nd = new NumberDefinition(); nd.Number = 6; nd.lines.Add("-----"); nd.lines.Add("|___"); nd.lines.Add("| |"); nd.lines.Add("|___|"); result.Add(nd); nd = new NumberDefinition(); nd.Number = 7; nd.lines.Add("-----"); nd.lines.Add(" / "); nd.lines.Add(" / "); nd.lines.Add(" / "); result.Add(nd); nd = new NumberDefinition(); nd.Number = 8; nd.lines.Add("-----"); nd.lines.Add("|___|"); nd.lines.Add("| |"); nd.lines.Add("|___|"); result.Add(nd); nd = new NumberDefinition(); nd.Number = 9; nd.lines.Add("-----"); nd.lines.Add("|___| "); nd.lines.Add(" |"); nd.lines.Add("____|"); result.Add(nd); return(result); }
public static NumberDefinition GetNumberDefinitionByNumber(int num, List <NumberDefinition> numDefList) { NumberDefinition nd = new NumberDefinition(); return(numDefList.FirstOrDefault(n => n.Number == num)); }