private void OnControllerMatchingFinished(object sender, MatchingFinishedArgs args)
        {
            Application.Invoke(sender, args, delegate(object resender, EventArgs a)
            {
                MatchingFinishedArgs _args = a as MatchingFinishedArgs;

                if (controller.StepMode != ControllerStepMode.UntilEnd)
                {
                    parsingNextButtonsAlign.Sensitive = true;
                }

                currentNode.Select();
                currentNode.SetOutput(_args.Output);

                if (String.IsNullOrEmpty(_args.Output))
                {
                    parsingTaskLabel.Markup =
                        String.Format("<b>Falló el reconocimiento con  <i>{0}</i></b>",
                                      GLib.Markup.EscapeText(currentNode.Matcher.Label));
                }
                else
                {
                    parsingTaskLabel.Markup =
                        String.Format("<b>Estableciendo la salida parcial <i>{0}</i> para <i>{1}</i></b>",
                                      GLib.Markup.EscapeText(_args.Output),
                                      GLib.Markup.EscapeText(currentNode.Matcher.Label));
                }
            });
        }
        private void OnMatcherMatchingFinished(object sender,
                                               MatchingFinishedArgs args)
        {
            if (MatchingFinished != null)
            {
                MatchingFinished(this, args);
            }
            SuspendByNode();

            StepDoneInvoker();
            SuspendByStep();
        }