示例#1
0
 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;
 }
示例#2
0
文件: Document.cs 项目: bakera/Test
 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;
     }
 }
示例#3
0
 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;
 }
示例#4
0
 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();
 }
示例#5
0
 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;
 }
示例#6
0
        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;
                }
            }
        }
示例#7
0
 public override void AppendDoctypeToken(TreeConstruction tree, DoctypeToken token)
 {
     OnMessageRaised(new UnexpectedDoctypeError());
     return;
 }
示例#8
0
 public virtual void AppendDoctypeToken(TreeConstruction tree, DoctypeToken token)
 {
     AppendAnythingElse(tree, token);
 }
示例#9
0
 public static bool IsHtml(DoctypeToken t)
 {
     if(t == null) return false;
     if(t.Name == null) return false;
     return t.Name.Equals("html", StringComparison.InvariantCulture);
 }
示例#10
0
 public override void AppendDoctypeToken(TreeConstruction tree, DoctypeToken token)
 {
     tree.AppendToken<InBodyInsertionMode>(token);
 }
示例#11
0
 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;
 }