public IEnumerable <ITagSpan <IStructureTag> > GetTags(NormalizedSnapshotSpanCollection spans) { foreach (SnapshotSpan span in spans) { IEnumerable <Span> outlines = _spans.Where(s => s.IntersectsWith(span)); foreach (Span outline in outlines) { var snapshotSpan = new SnapshotSpan(_buffer.CurrentSnapshot, outline); StructureTag tag = CreateTag(outline); yield return(new TagSpan <IStructureTag>(snapshotSpan, tag)); } } }
public override TemplateObject Handle(TagData data) { string modif = data.GetModifier(0); if (modif.StartsWith("e:")) { modif = modif.Substring("e:".Length); } StructureTag stag = StructureTag.For(Utilities.StringToInt(modif)); if (stag == null) { return(new TextTag("&{NULL}").Handle(data.Shrink())); } return(stag.Handle(data.Shrink())); }
public static bool StructureDamaged(Structure structure, ref ushort amount) { // TODO: causes? StructureTag structureTag = new StructureTag(structure); if (amount >= structure.health) { StructureDestroyedEventArgs deathevt = new StructureDestroyedEventArgs(); deathevt.Structure = structureTag; deathevt.Amount = new NumberTag(amount); UnturnedFreneticEvents.OnStructureDestroyed.Fire(deathevt); amount = (ushort)deathevt.Amount.Internal; return(deathevt.Cancelled || EntityDestroyed(structureTag, ref amount)); } StructureDamagedEventArgs evt = new StructureDamagedEventArgs(); evt.Structure = structureTag; evt.Amount = new NumberTag(amount); UnturnedFreneticEvents.OnStructureDamaged.Fire(evt); amount = (ushort)evt.Amount.Internal; return(evt.Cancelled || EntityDamaged(structureTag, ref amount)); }
private IEnumerable <ITagSpan <IStructureTag> > GetTags(XmlParseResult xmlParseResult, NormalizedSnapshotSpanCollection spans, ITextSnapshot snapshot) { var root = xmlParseResult.XDocument; var resultList = new List <ITagSpan <IStructureTag> > (); int previousLineStart = -1; int previousLineEnd = -1; foreach (var snapshotSpan in spans) { var nodes = GetNodesIntersectingRange(root, new TextSpan(snapshotSpan.Span.Start, snapshotSpan.Span.Length)); foreach (var node in nodes) { // exclude the document itself since the root element will take care of it if (node is XDocument) { continue; } // no need to collapse text as usually collapsing the parent is good enough if (node is XText) { continue; } var nodeSpan = node.OuterSpan; if (nodeSpan.Start < 0 || nodeSpan.End > snapshot.Length) { continue; } var outliningSpan = new Span(nodeSpan.Start, nodeSpan.Length); var startLine = snapshot.GetLineFromPosition(outliningSpan.Start); var endLine = snapshot.GetLineFromPosition(outliningSpan.End); if (startLine.LineNumber == endLine.LineNumber) { // ignore single-line nodes continue; } if (startLine.LineNumber == previousLineStart || endLine.LineNumber == previousLineEnd) { // ignore multiple nodes starting and ending on the same line continue; } previousLineStart = startLine.LineNumber; previousLineEnd = endLine.LineNumber; var headerSpan = new Span(outliningSpan.Start, Math.Min(startLine.End.Position - outliningSpan.Start, 100)); string firstLine = snapshot.GetText(headerSpan); string collapseForm = firstLine; var tagSnapshotSpan = new SnapshotSpan(snapshot, outliningSpan); var structureTag = new StructureTag( snapshot, outliningSpan: outliningSpan, headerSpan: headerSpan, guideLineSpan: outliningSpan, guideLineHorizontalAnchor: outliningSpan.Start, type: PredefinedStructureTagTypes.Structural, isCollapsible: true, collapsedForm: collapseForm, collapsedHintForm: snapshot.GetText(headerSpan)); var tagSpan = new TagSpan <IStructureTag> (tagSnapshotSpan, structureTag); resultList.Add(tagSpan); } } return(resultList); }
public override void VisitStructure(StructureTag structureTag) { }