private static Expression Expand(Expression ex, IVault vault, IVault repository, List<Expression> stack, Dictionary<String, IBranch> nodes) { if (ex is VariableExpression) { return Expand((VariableExpression)ex, vault, repository, stack, nodes); } else { ex.Flatten(n => n.Children.Cast<Expression>()).OfType<VariableExpression>() .ForEach(v => v.ReplaceMeWith(() => Expand(v, vault, repository, stack, nodes))); return ex; } }
public static IElfExpressionRenderer CreateRenderer(this IRendererContext ctx, Expression target) { if (target is LiteralExpression) { return new LiteralExpressionRenderer((LiteralExpression)target, ctx); } else if (target is VariableExpression) { return new VariableExpressionRenderer((VariableExpression)target, ctx); } else if (target is InvocationExpression) { return new InvocationExpressionRenderer((InvocationExpression)target, ctx); } else if (target is AssignmentExpression) { return new AssignmentExpressionRenderer((AssignmentExpression)target, ctx); } else { throw new NotSupportedException(target.GetType().ToString()); } }
public AssignmentExpression(VariableExpression target, Expression expression) : base(AstNodeType.AssignmentExpression, new AstNode[]{target, expression}) { }
public void LeaveLockedAssignmentMode() { _samode = false; var ssub = SelectedSub; SelectedLine = SelectedLine; SelectedSub = ssub; }
public ReturnStatement(Expression expression) : base(AstNodeType.ReturnStatement, expression.AsArray()) { }
private void ReplaceSubThenSelectItAndRedraw(AstNode old, Func<AstNode> newf) { var subIsLine = _selectedSub == _selectedLine; var @new = (Expression)old.ReplaceMeWith(newf); SelectedSub = @new; if (subIsLine) SelectedLine = @new; SelectedTextBox.Text = SelectedLine.RenderPublicText(_rctx); RebuildTopPanelContent(); }
private void _upOneLevelButton_Click(object sender, EventArgs e) { SelectedSub = (Expression)_selectedSub.Parent; }
private void RebuildBottomFxPanelContent() { _fxArgumentsPanel.Controls.Clear(); _noParamsLabel.Visible = _selectedSub.Children.Count() == 0; if (_selectedSub.Children.Count() == 0) { _fxArgumentsPanel.Controls.Add(_noParamsLabel); } else { _bottomPanels = new List<Panel>(); var labels = new List<Label>(); _selectedSub.Children.Cast<Expression>().ForEach((e, i) => { var index = String.Format(Resources.ParameterFormat, i + 1); var text = e.RenderPublicText(_rctx); var p = new Panel(); p.Padding = new Padding(3, 3, 3, 3); var l = new Label(); l.Name = "lbot " + i; l.Width = 57; l.Text = index; l.Dock = DockStyle.Left; // l.Padding = new Padding(3, 3, 0, 0); l.AutoSize = false; l.DoubleClick += (o, args) => SelectedSub = e; l.KeyDown += (o, args) => { if (args.KeyCode == Keys.Enter) { SelectedSub = e; } }; labels.Add(l); var t = new RichTextBox(); t.ReadOnly = true; t.Name = "tbot " + i; t.Dock = DockStyle.Fill; t.Height = 25; t.WordWrap = true; t.AutoSize = true; t.Text = text; t.BorderStyle = BorderStyle.None; t.DoubleClick += (o, args) => SelectedSub = e; t.Select(0, 0); t.Width = this.Width - 25; // scrollbar var pt = t.GetPositionFromCharIndex(text.Length - 1); p.Controls.Add(t); p.Controls.Add(l); p.Dock = DockStyle.Top; p.Height = pt.Y + 30 + 5; _bottomPanels.Add(p); }); ((IEnumerable<Panel>)_bottomPanels).Reverse().ForEach(p => _fxArgumentsPanel.Controls.Add(p)); var width = labels.Count == 0 ? 0 : labels.Max(l => l.PreferredWidth); labels.ForEach(l => { l.AutoSize = false; l.Width = width; }); } RecalculateTotalHeight(); }
private int GetLineIndex(Expression exp) { return exp.Parents.Reverse().SkipWhile(an => !(an is Block)).Skip(1).First().ChildIndex; }
public IfStatement(Expression test, Block then, Block @else) : base(AstNodeType.IfStatement, new AstNode[]{test, then, @else}) { }