public void AddValue(SourceEntity node) { if (node != null) { Value.AddRange(node.Value); } }
public void AddItem(SourceEntity item) { if (item != null) { Items.Add(item); } }
public void AddSubItems(SourceEntity item) { if (item != null) { if (item is SourceEntityUniformSet) { this.UniformSet = item.UniformSet; this.UniformSet.Location = item.Location; UniformSet.RangeStart = Items.Count; UniformSet.RangeEnd = UniformSet.RangeStart + item.Items.Count; } Items.AddRange(item.Items); } }
/// <summary> /// Преобразование дерева из парсера в рабочее дерево /// </summary> /// <param name="s">Корень аспектного дерева</param> /// <param name="FileName">относительный путь к файлу, содержащему данный подаспект</param> private PointOfInterest ConvertSourceEntityToPointOfInterest(SourceEntity s, string FileName) { if (s == null) { return(null); } PointOfInterest res = new PointOfInterest(s.Location); res.Context.Add(new OuterContextNode(s.Value, s.GetType().Name)); if (s.Value != null && s.Value.Count != 0) { res.Title = string.Join(" ", s.Value); } res.FileName = FileName; res.ID = s.Name; foreach (SourceEntity se in s.Items) { res.Items.Add(ConvertSourceEntityToPointOfInterest(se, FileName)); } return(res); }
/// <summary> /// Парсинг текста. /// Этой функцией можно вызывать парсинг открытого существующего файла, если он изменен и еще не сохранен, получив его обновленное содержимое из среды разработки. /// </summary> /// <param name="Text">Текст</param> /// <param name="FileName">Имя файла. Должно содержать как минимум расширение для корректного выбора парсера. /// Имя файла будет сохранено в узлах аспектного дерева</param> /// <returns>Корень дерева</returns> public PointOfInterest ParseText(string Text, string FileName) { string LangID = FilenameToLangID(FileName); ILightWeightScanner Scanner; LightweightParserBase Parser; if (scanners.ContainsKey(LangID) && parsers.ContainsKey(LangID)) { Scanner = scanners[LangID]; Parser = parsers[LangID]; } else if (DefaultParser != null && DefaultScanner != null) { Scanner = DefaultScanner; Parser = DefaultParser; } else { GlobalData.traceAction("Нет парсера для файлов " + LangID); return(null); } Scanner.SetSource(Text); Parser.Parse(); SourceEntity result = Parser.Root; if (result == null) { return(null); } PointOfInterest rootPt = ConvertSourceEntityToPointOfInterest(result, FileName); SetContext(rootPt); _LastTimeErrors.Clear(); foreach (SourceEntity se in Parser.Errors) { _LastTimeErrors.Add(ConvertSourceEntityToPointOfInterest(se, FileName)); } return(rootPt); }