public RenameExpression(CaptureName name, CaptureName newName)
 {
     if (newName.Parts.Count() != 1)
     {
         throw new NotImplementedException(); // TODO:
     }
     Name    = name;
     NewName = newName;
 }
Example #2
0
    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;
        }
    }
Example #4
0
    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();
        }
    }
Example #5
0
    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;
        }
    }
Example #6
0
    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;
 }
Example #8
0
 public ScopeExpression(CaptureName name, Expression expression)
 {
     Name       = name;
     Expression = expression;
 }
Example #9
0
 public void Unset(CaptureName name)
 {
     Unclose(name);
     Unopen(name);
 }
Example #10
0
 public void Set(CaptureName name, ExpressionResult value)
 {
     Open(name);
     Close(name, value);
 }
 public AssignmentExpression(CaptureName name, TextValueExpression value)
 {
     Name  = name;
     Value = value;
 }