using System.Xml.Linq; using XNeedle.Parser.Elements; namespace XNeedle.Transformation.Bangs { public class BeforeBang : BangOperation { public override string Name => "before"; public override Context Execute(Context ctx, IEnumerable arguments) { if (ctx.Node == null) { throw new ArgumentNullException("!before needs a reachable node"); } if (arguments.Count() < 1) { throw new ArgumentException("!before needs at least the tag name as argument."); } var tagname = arguments.ElementAt(0); var element = new XElement(tagname, ""); ctx.Node.AddBeforeSelf(element); return new Context{ Node = element, SLoc = ctx.SLoc.AsSynthetic(), XPathSelector = tagname}; } } }