Ejemplo n.º 1
0
        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));
                }
            }
        }
Ejemplo n.º 2
0
        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()));
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
 public override void VisitStructure(StructureTag structureTag)
 {
 }