private void OnMatcherMatching(object sender, MatchingArgs args)
        {
            if (this.Matching != null)
            {
                Matching(this, args);
            }

            Thread.Sleep(50);
            SuspendByStep();
        }
        private void OnControllerMatching(object sender,
                                          MatchingArgs _args)
        {
            Application.Invoke(sender,
                               _args,
                               delegate(object resender, EventArgs a)
            {
                MatchingArgs args            = a as MatchingArgs;
                SyntacticalCoverNode newNode =
                    new SyntacticalCoverNode(args.Matcher,
                                             syntacticalCoverTree);

                if (currentNode == null)
                {
                    syntacticalCoverModel.AddNode(newNode);
                }
                else
                {
                    currentNode.Select();
                    currentNode.AddChild(newNode);
                    syntacticalCoverTree.ExpandRow(syntacticalCoverTree.Selection.GetSelectedRows()[0],
                                                   false);
                }

                currentNode = newNode;


                currentNode.Select();


                parsingTaskLabel.Markup =
                    String.Format("<b>Intentando encajar los elementos restantes con <i>{0}</i></b>",
                                  GLib.Markup.EscapeText(currentNode.Matcher.Label));

                parsingNextButtonsAlign.Sensitive =
                    controller.StepMode == ControllerStepMode.StepByStep;
            });
        }