public int get_token()
        {
            if (hasPutBack)
            {
                PutBackItem pbi;
                if (verbatim)
                {
                    pbi = putBackBuffer.Pop() as PutBackItem;
                    string value = pbi.Value;
                    switch (value.Length)
                    {
                    case 0:
                        // do nothing, CurrentToken will be used
                        break;

                    case 1:
                        pbi = new PutBackItem(String.Empty, pbi.Position, (int)value [0], false);
                        break;

                    default:
                        pbi = new PutBackItem(value, pbi.Position, (int)value [0], false);
                        break;
                    }
                }
                else
                {
                    pbi = putBackBuffer.Pop() as PutBackItem;
                }

                hasPutBack    = putBackBuffer.Count > 0;
                position      = pbi.Position;
                have_value    = false;
                val           = null;
                sb            = new StringBuilder(pbi.Value);
                current_token = pbi.CurrentToken;
                inTag         = pbi.InTag;
                return(current_token);
            }

            begline       = line;
            begcol        = col;
            have_value    = false;
            current_token = NextToken();
            return(current_token);
        }
		public int get_token ()
		{
			if (hasPutBack) {
				PutBackItem pbi;
				if (verbatim) {
					pbi = putBackBuffer.Pop () as PutBackItem;
					string value = pbi.Value;
					switch (value.Length) {
						case 0:
							// do nothing, CurrentToken will be used
							break;

						case 1:
							pbi = new PutBackItem (String.Empty, pbi.Position, (int)value [0], false);
							break;

						default:
							pbi = new PutBackItem (value, pbi.Position, (int)value [0], false);
							break;
					}		
				} else
					pbi = putBackBuffer.Pop () as PutBackItem;
				
				hasPutBack = putBackBuffer.Count > 0;
				position = pbi.Position;
				have_value = false;
				val = null;
				sb = new StringBuilder (pbi.Value);
				current_token = pbi.CurrentToken;
				inTag = pbi.InTag;
				return current_token;
			}

			begline = line;
			begcol = col;
			have_value = false;
			current_token = NextToken ();
			return current_token;
		}