private void OnMatcherMatchingFinished(object sender,
		                                       MatchingFinishedArgs args)
		{
			if(MatchingFinished !=null)
			{
				MatchingFinished(this, args);
			}
			SuspendByNode();	
			
			StepDoneInvoker();
			SuspendByStep();
		}
		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));
				}
				
				
			});
		}