當前位置: 首頁>>代碼示例>>C#>>正文


C# Lexer.UngetToken方法代碼示例

本文整理匯總了C#中TidyNet.Lexer.UngetToken方法的典型用法代碼示例。如果您正苦於以下問題:C# Lexer.UngetToken方法的具體用法?C# Lexer.UngetToken怎麽用?C# Lexer.UngetToken使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在TidyNet.Lexer的用法示例。


在下文中一共展示了Lexer.UngetToken方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。

示例1: Parse

			public virtual void Parse(Lexer lexer, Node head, short mode)
			{
				Node node;
				int HasTitle = 0;
				int HasBase = 0;
				TagTable tt = lexer.Options.tt;
				
				while (true)
				{
					node = lexer.GetToken(Lexer.IgnoreWhitespace);
					if (node == null)
					{
						break;
					}
					if (node.Tag == head.Tag && node.Type == Node.EndTag)
					{
						head.Closed = true;
						break;
					}
					
					if (node.Type == Node.TextNode)
					{
						lexer.UngetToken();
						break;
					}
					
					/* deal with comments etc. */
					if (Node.InsertMisc(head, node))
					{
						continue;
					}
					
					if (node.Type == Node.DocTypeTag)
					{
						Node.InsertDocType(lexer, head, node);
						continue;
					}
					
					/* discard unknown tags */
					if (node.Tag == null)
					{
						Report.Warning(lexer, head, node, Report.DISCARDING_UNEXPECTED);
						continue;
					}
					
					if (!((node.Tag.Model & ContentModel.Head) != 0))
					{
						lexer.UngetToken();
						break;
					}
					
					if (node.Type == Node.StartTag || node.Type == Node.StartEndTag)
					{
						if (node.Tag == tt.TagTitle)
						{
							++HasTitle;
							
							if (HasTitle > 1)
							{
								Report.Warning(lexer, head, node, Report.TOO_MANY_ELEMENTS);
							}
						}
						else if (node.Tag == tt.TagBase)
						{
							++HasBase;
							
							if (HasBase > 1)
							{
								Report.Warning(lexer, head, node, Report.TOO_MANY_ELEMENTS);
							}
						}
						else if (node.Tag == tt.TagNoscript)
						{
							Report.Warning(lexer, head, node, Report.TAG_NOT_ALLOWED_IN);
						}
						
						Node.InsertNodeAtEnd(head, node);
						TidyNet.ParserImpl.parseTag(lexer, node, Lexer.IgnoreWhitespace);
						continue;
					}
					
					/* discard unexpected text nodes and end tags */
					Report.Warning(lexer, head, node, Report.DISCARDING_UNEXPECTED);
				}
				
				if (HasTitle == 0)
				{
					Report.Warning(lexer, head, null, Report.MISSING_TITLE_ELEMENT);
					Node.InsertNodeAtEnd(head, lexer.InferredTag("title"));
				}
			}
開發者ID:erikzaadi,項目名稱:atomsitethemes.erikzaadi.com,代碼行數:91,代碼來源:ParserImpl.cs

示例2: parseDocument

		/*
		HTML is the top level element
		*/
		public static Node parseDocument(Lexer lexer)
		{
			Node node, document, html;
			Node doctype = null;
			TagTable tt = lexer.Options.tt;

			document = lexer.NewNode();
			document.Type = Node.RootNode;
			
			while (true)
			{
				node = lexer.GetToken(Lexer.IgnoreWhitespace);
				if (node == null)
				{
					break;
				}
				
				/* deal with comments etc. */
				if (Node.InsertMisc(document, node))
				{
					continue;
				}
				
				if (node.Type == Node.DocTypeTag)
				{
					if (doctype == null)
					{
						Node.InsertNodeAtEnd(document, node);
						doctype = node;
					}
					else
					{
						Report.Warning(lexer, document, node, Report.DISCARDING_UNEXPECTED);
					}
					continue;
				}
				
				if (node.Type == Node.EndTag)
				{
					Report.Warning(lexer, document, node, Report.DISCARDING_UNEXPECTED); //TODO?
					continue;
				}
				
				if (node.Type != Node.StartTag || node.Tag != tt.TagHtml)
				{
					lexer.UngetToken();
					html = lexer.InferredTag("html");
				}
				else
				{
					html = node;
				}
				
				Node.InsertNodeAtEnd(document, html);
				ParseHTML.Parse(lexer, html, (short) 0); // TODO?
				break;
			}
			
			return document;
		}
開發者ID:erikzaadi,項目名稱:atomsitethemes.erikzaadi.com,代碼行數:63,代碼來源:ParserImpl.cs


注:本文中的TidyNet.Lexer.UngetToken方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。