public virtual string CreateString(int minIndex = -1) { Initialize(); string result = Label; var tags = SubTags .OrderBy(l => l.m_Index) .SkipWhile(l => l.m_Index <= minIndex) .ToList(); if (tags.Any()) { var first = tags.First(); result = first .CreateString(minIndex) .AppendStatus(Label); minIndex = first.m_Index; foreach (var tag in tags.Skip(1)) { result = result.AppendSubStatus(tag.CreateString(minIndex)); minIndex = tag.m_Index; } } return(result); }
public void AddTag(Tag tag) { if (GetTag(tag.Name) != null && tag.Name != "") // Tags with "" are actually list items { var index = 0; for (var i = 0; i < SubTags.Count; i++) { if (SubTags[i].Name == tag.Name) { index = i; break; } } Logger.Log($"Adding Tag of a similar name {tag.Name}"); if (tag.SubTags.Count == 0) { Logger.Log("Replacing Tag, as it is a value tag"); SubTags.RemoveAt(index); } else { Logger.Log("Because there are subtags, merging tags"); foreach (var t in tag.SubTags) { SubTags[index].AddTag(t); } return; } } SubTags.Add(tag); }
public IEnumerable <CmdTag> LocateCmdPath(EnterCommandAttribute cmd) { var stack = new Stack <CmdTag>(); return(SubTags.Any(subTag => FindCmdPath(subTag, cmd, stack)) ? stack.ToList() : default);
public IEnumerator <Asn1Tag> GetEnumerator() { return(SubTags.GetEnumerator()); }
protected internal void AddSubTag(Asn1Tag subTag) { SubTags.Add(subTag); subTag.ParentTag = this; }