示例#1
0
 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;
     }
 }
示例#2
0
 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());
     }
 }
示例#3
0
 public AssignmentExpression(VariableExpression target, Expression expression) 
     : base(AstNodeType.AssignmentExpression, new AstNode[]{target, expression})
 {
 }
示例#4
0
 public void LeaveLockedAssignmentMode()
 {
     _samode = false;
     var ssub = SelectedSub;
     SelectedLine = SelectedLine;
     SelectedSub = ssub;
 }
示例#5
0
 public ReturnStatement(Expression expression) 
     : base(AstNodeType.ReturnStatement, expression.AsArray()) 
 {
 }
示例#6
0
        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();
        }
示例#7
0
 private void _upOneLevelButton_Click(object sender, EventArgs e)
 {
     SelectedSub = (Expression)_selectedSub.Parent;
 }
示例#8
0
        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();
        }
示例#9
0
 private int GetLineIndex(Expression exp)
 {
     return exp.Parents.Reverse().SkipWhile(an => !(an is Block)).Skip(1).First().ChildIndex;
 }
示例#10
0
 public IfStatement(Expression test, Block then, Block @else) 
     : base(AstNodeType.IfStatement, new AstNode[]{test, then, @else})
 {
 }