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