public static bool IsMatch(DoctypeToken t) { if(!IsHtml(t)) return false; if(t.PublicIdentifier != null) return false; if(t.SystemIdentifier != null && !t.SystemIdentifier.Equals(LegacyCompatSystemIdentifier, StringComparison.InvariantCulture)) return false; return true; }
public void AppendDoctype(DoctypeToken token) { this.DoctypeInfo = DoctypeInfo.CreateDoctypeInfo(token); XmlNode result = this.CreateDocumentType(token.Name, token.PublicIdentifier, token.SystemIdentifier, null); this.AppendChild(result); if(this.DocumentMode == DocumentMode.UnKnown){ this.DocumentMode = this.DoctypeInfo.DocumentMode; } }
public static bool IsMatch(DoctypeToken t) { if(!IsHtml(t)) return false; if(t.PublicIdentifier.StartsWith(XHTML10TransitionalPublicIdentifierPrefix, StringComparison.InvariantCultureIgnoreCase)) return true; if(t.PublicIdentifier.StartsWith(XHTML10FramesetPublicIdentifierPrefix, StringComparison.InvariantCultureIgnoreCase)) return true; if(t.SystemIdentifier != null && t.PublicIdentifier.StartsWith(HTML401TransitionalPublicIdentifierPrefix, StringComparison.InvariantCultureIgnoreCase)) return true; if(t.SystemIdentifier != null && t.PublicIdentifier.StartsWith(HTML401FramesetPublicIdentifierPrefix, StringComparison.InvariantCultureIgnoreCase)) return true; return false; }
public static DoctypeInfo CreateDoctypeInfo(DoctypeToken t) { if(HTML5Doctype.IsMatch(t)) return new HTML5Doctype(); if(HTML40StrictDoctype.IsMatch(t)) return new HTML40StrictDoctype(); if(HTML401StrictDoctype.IsMatch(t)) return new HTML401StrictDoctype(); if(XHTML10StrictDoctype.IsMatch(t)) return new XHTML10StrictDoctype(); if(XHTML11Doctype.IsMatch(t)) return new XHTML11Doctype(); if(QuirksDoctype.IsMatch(t)) return new QuirksDoctype(); if(LimitedQuirksDoctype.IsMatch(t)) return new LimitedQuirksDoctype(); return new UnKnownDoctype(); }
public override void AppendDoctypeToken(TreeConstruction tree, DoctypeToken token) { if(string.IsNullOrEmpty(token.Name)){ OnMessageRaised(new NamelessDoctypeFailure()); } else { tree.Document.AppendDoctype((DoctypeToken)token); // NoQuirks以外の文書型はパースエラー // UnKnownDoctypeの場合はNoQuirksでパースエラーになることに注意 if(tree.Document.DoctypeInfo is UnKnownDoctype){ OnMessageRaised(new UnknownDoctypeError()); } else if(tree.Document.DoctypeInfo is QuirksDoctype){ OnMessageRaised(new QuirksDoctypeError()); } else if(tree.Document.DoctypeInfo is LimitedQuirksDoctype){ OnMessageRaised(new LimitedQuirksDoctypeError()); } } tree.ChangeInsertionMode<BeforeHtmlInsertionMode>(); return; }
public override void Read(Tokenizer t) { char? c = t.ConsumeChar(); switch(c){ case Chars.CHARACTER_TABULATION: case Chars.LINE_FEED: case Chars.FORM_FEED: case Chars.SPACE: return; case Chars.NULL: OnMessageRaised(new NullInDoctypeError()); t.ChangeTokenState<DoctypeNameState>(); t.CurrentToken = new DoctypeToken(){Name = Chars.REPLACEMENT_CHARACTER.ToString()}; return; case Chars.GREATER_THAN_SIGN: OnMessageRaised(new EmptyDoctypeError()); t.ChangeTokenState<DataState>(); t.EmitToken(new DoctypeToken(){ForceQuirks = true}); return; case null:{ OnMessageRaised(new SuddenlyEndAtDoctypeError()); t.UnConsume(1); t.ChangeTokenState<DataState>(); t.EmitToken(new DoctypeToken(){ForceQuirks = true}); return; } default:{ DoctypeToken result = new DoctypeToken(); if(c.IsLatinCapitalLetter()){ result.Name = c.ToLower().ToString(); } else { result.Name = c.ToString(); } t.CurrentToken = result; t.ChangeTokenState<DoctypeNameState>(); return; } } }
public override void AppendDoctypeToken(TreeConstruction tree, DoctypeToken token) { OnMessageRaised(new UnexpectedDoctypeError()); return; }
public virtual void AppendDoctypeToken(TreeConstruction tree, DoctypeToken token) { AppendAnythingElse(tree, token); }
public static bool IsHtml(DoctypeToken t) { if(t == null) return false; if(t.Name == null) return false; return t.Name.Equals("html", StringComparison.InvariantCulture); }
public override void AppendDoctypeToken(TreeConstruction tree, DoctypeToken token) { tree.AppendToken<InBodyInsertionMode>(token); }
public static bool IsMatch(DoctypeToken t) { if(t.ForceQuirks) return true; if(!IsHtml(t)) return true; if(t.PublicIdentifier != null){ foreach(string s in QuirksPublicIdentifiersPrefix){ if(t.PublicIdentifier.StartsWith(s, StringComparison.InvariantCultureIgnoreCase)) return true; } foreach(string s in QuirksPublicIdentifiers){ if(t.PublicIdentifier.Equals(s, StringComparison.InvariantCultureIgnoreCase)) return true; } } if(t.SystemIdentifier != null){ foreach(string s in QuirksSystemIdentifiers){ if(t.SystemIdentifier.StartsWith(s, StringComparison.InvariantCultureIgnoreCase)) return true; } } if(t.SystemIdentifier == null && t.PublicIdentifier.StartsWith(HTML401TransitionalPublicIdentifierPrefix, StringComparison.InvariantCultureIgnoreCase)) return true; if(t.SystemIdentifier == null && t.PublicIdentifier.StartsWith(HTML401FramesetPublicIdentifierPrefix, StringComparison.InvariantCultureIgnoreCase)) return true; return false; }