public RenameExpression(CaptureName name, CaptureName newName) { if (newName.Parts.Count() != 1) { throw new NotImplementedException(); // TODO: } Name = name; NewName = newName; }
public void Open(CaptureName name) { if (Current is null) { throw new InvalidOperationException("Capture tree is fully closed."); } foreach (var part in name.Parts) { var node = new CaptureTreeNode(this, part); Current.Add(node); Current = node; } }
public override IEnumerable <ExpressionResult> RunInternal(ExpressionContext context) { foreach (var capture in context.CaptureTree[Name]) { capture.Name = NewName.Head; } yield return(new()); var localName = Name.Parts.Last(); var newFullName = new CaptureName(Name.Parts.Take(Name.Parts.Count() - 1).Concat(NewName.Parts).ToArray()); foreach (var capture in context.CaptureTree[newFullName]) { capture.Name = localName; } }
public void Unopen(CaptureName name) { if (Current is null) { throw new InvalidOperationException("Capture tree is fully closed."); } foreach (var part in name.Parts.Reverse()) { if (Current.Name != part) { throw new InvalidOperationException(); } Current = Current.Parent ?? throw new InvalidOperationException(); Current.Unadd(); } }
public void Close(CaptureName name, ExpressionResult value) { if (Current is null) { throw new InvalidOperationException("Capture tree is fully closed."); } foreach (var part in name.Parts.Reverse()) { if (Current?.Name != part) { throw new InvalidOperationException(); } Current.IsOpen = false; Current.Value = value; Current = Current.Parent; } }
public void Unclose(CaptureName name) { if (Current is null) { throw new InvalidOperationException("Capture tree is fully closed."); } foreach (var part in name.Parts) { this.Current = this.Current.Children.First(); if (this.Current.Name != part) { throw new InvalidOperationException(); } Current.Value = null; Current.IsOpen = true; } }
public BackreferenceExpression(CaptureName name) { Name = name; }
public ScopeExpression(CaptureName name, Expression expression) { Name = name; Expression = expression; }
public void Unset(CaptureName name) { Unclose(name); Unopen(name); }
public void Set(CaptureName name, ExpressionResult value) { Open(name); Close(name, value); }
public AssignmentExpression(CaptureName name, TextValueExpression value) { Name = name; Value = value; }