/// <summary> Print an error message.</summary>
		/// <param name="message">The message to print.
		/// </param>
		/// <param name="exception">The exception for stack tracing.
		/// </param>
		public virtual void Error(System.String message, ParserException exception)
		{
			if (QUIET != mMode)
			{
				System.Console.Out.WriteLine("ERROR: " + message);
				if (DEBUG == mMode && (null != exception))
					exception.PrintStackTrace();
			}
		}
 /// <summary> Print an error message.</summary>
 /// <param name="message">The message to print.
 /// </param>
 /// <param name="exception">The exception for stack tracing.
 /// </param>
 public virtual void Error(System.String message, ParserException exception)
 {
     if (QUIET != mMode)
     {
         System.Console.Out.WriteLine("ERROR: " + message);
         if (DEBUG == mMode && (null != exception))
         {
             exception.PrintStackTrace();
         }
     }
 }
        /// <summary> Get the next node.</summary>
        /// <returns> The next node in the HTML stream, or null if there are no more nodes.
        /// </returns>
        /// <exception cref="ParserException">If an unrecoverable error occurs.
        /// </exception>
        public virtual INode NextNode()
        {
            ITag     tag;
            IScanner scanner;
            NodeList stack;
            INode    ret;

            try
            {
                ret = mLexer.NextNode();
                if (null != ret)
                {
                    // kick off recursion for the top level node
                    if (ret is ITag)
                    {
                        tag = (ITag)ret;
                        if (!tag.IsEndTag())
                        {
                            // now recurse if there is a scanner for this type of tag
                            scanner = tag.ThisScanner;
                            if (null != scanner)
                            {
                                stack = new NodeList();
                                ret   = scanner.Scan(tag, mLexer, stack);
                            }
                        }
                    }
                }
            }
            catch (ParserException pe)
            {
                throw pe;                 // no need to wrap an existing ParserException
            }
            catch (System.Exception e)
            {
                System.Text.StringBuilder msgBuffer = new System.Text.StringBuilder();
                msgBuffer.Append("Unexpected Exception occurred while reading ");
                msgBuffer.Append(mLexer.Page.Url);
                msgBuffer.Append(", in nextNode");
                // TODO: appendLineDetails (msgBuffer);
                ParserException ex = new ParserException(msgBuffer.ToString(), e);
                mFeedback.Error(msgBuffer.ToString(), ex);
                throw ex;
            }

            return(ret);
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="message"></param>
 /// <param name="e"></param>
 public static void Error(System.String message, ParserException e)
 {
     g_Callback.Error(message, e);
 }
		/// <summary>
		/// 
		/// </summary>
		/// <param name="message"></param>
		/// <param name="e"></param>
		public static void Error(System.String message, ParserException e)
		{
			g_Callback.Error(message, e);
		}
		/// <summary> Get the next node.</summary>
		/// <returns> The next node in the HTML stream, or null if there are no more nodes.
		/// </returns>
		/// <exception cref="ParserException">If an unrecoverable error occurs.
		/// </exception>
		public virtual INode NextNode()
		{
			ITag tag;
			IScanner scanner;
			NodeList stack;
			INode ret;
			
			try
			{
				ret = mLexer.NextNode();
				if (null != ret)
				{
					// kick off recursion for the top level node
					if (ret is ITag)
					{
						tag = (ITag) ret;
						if (!tag.IsEndTag())
						{
							// now recurse if there is a scanner for this type of tag
							scanner = tag.ThisScanner;
							if (null != scanner)
							{
								stack = new NodeList();
								ret = scanner.Scan(tag, mLexer, stack);
							}
						}
					}
				}
			}
			catch (ParserException pe)
			{
				throw pe; // no need to wrap an existing ParserException
			}
			catch (System.Exception e)
			{
				System.Text.StringBuilder msgBuffer = new System.Text.StringBuilder();
				msgBuffer.Append("Unexpected Exception occurred while reading ");
				msgBuffer.Append(mLexer.Page.Url);
				msgBuffer.Append(", in nextNode");
				// TODO: appendLineDetails (msgBuffer);
				ParserException ex = new ParserException(msgBuffer.ToString(), e);
				mFeedback.Error(msgBuffer.ToString(), ex);
				throw ex;
			}
			
			return (ret);
		}