Example #1
0
 public override bool Process(Token t, TreeBuilder tb)
 {
     if (t.IsDoctype())
     {
         tb.Error(this);
         return false;
     }
     else if (t.IsComment())
     {
         tb.Insert(t.AsComment());
     }
     else if (IsWhitespace(t))
     {
         return true; // ignore whitespace
     }
     else if (t.IsStartTag() && t.AsStartTag().Name().Equals("html"))
     {
         tb.Insert(t.AsStartTag());
         tb.Transition(BeforeHead);
     }
     else if (t.IsEndTag() && (StringUtil.In(t.AsEndTag().Name(), "head", "body", "html", "br")))
     {
         return AnythingElse(t, tb);
     }
     else if (t.IsEndTag())
     {
         tb.Error(this);
         return false;
     }
     else
     {
         return AnythingElse(t, tb);
     }
     return true;
 }
Example #2
0
 public override bool Process(Token t, TreeBuilder tb)
 {
     if (IsWhitespace(t))
     {
         return true;
     }
     else if (t.IsComment())
     {
         tb.Insert(t.AsComment());
     }
     else if (t.IsDoctype())
     {
         tb.Error(this);
         return false;
     }
     else if (t.IsStartTag() && t.AsStartTag().Name().Equals("html"))
     {
         return InBody.Process(t, tb); // does not transition
     }
     else if (t.IsStartTag() && t.AsStartTag().Name().Equals("head"))
     {
         Element head = tb.Insert(t.AsStartTag());
         tb.HeadElement = head;
         tb.Transition(InHead);
     }
     else if (t.IsEndTag() && (StringUtil.In(t.AsEndTag().Name(), "head", "body", "html", "br")))
     {
         tb.Process(new Token.StartTag("head"));
         return tb.Process(t);
     }
     else if (t.IsEndTag())
     {
         tb.Error(this);
         return false;
     }
     else
     {
         tb.Process(new Token.StartTag("head"));
         return tb.Process(t);
     }
     return true;
 }
Example #3
0
 public override bool Process(Token t, TreeBuilder tb)
 {
     if (t.IsDoctype())
     {
         tb.Error(this);
     }
     else if (t.IsStartTag() && t.AsStartTag().Name().Equals("html"))
     {
         return tb.Process(t, InBody);
     }
     else if (t.IsEndTag() && t.AsEndTag().Name().Equals("noscript"))
     {
         tb.Pop();
         tb.Transition(InHead);
     }
     else if (IsWhitespace(t) || t.IsComment() || (t.IsStartTag() && StringUtil.In(t.AsStartTag().Name(),
           "basefont", "bgsound", "link", "meta", "noframes", "style")))
     {
         return tb.Process(t, InHead);
     }
     else if (t.IsEndTag() && t.AsEndTag().Name().Equals("br"))
     {
         return AnythingElse(t, tb);
     }
     else if ((t.IsStartTag() && StringUtil.In(t.AsStartTag().Name(), "head", "noscript")) || t.IsEndTag())
     {
         tb.Error(this);
         return false;
     }
     else
     {
         return AnythingElse(t, tb);
     }
     return true;
 }
Example #4
0
 public override bool Process(Token t, TreeBuilder tb)
 {
     if (IsWhitespace(t))
     {
         tb.Insert(t.AsCharacter());
     }
     else if (t.IsComment())
     {
         tb.Insert(t.AsComment());
     }
     else if (t.IsDoctype())
     {
         tb.Error(this);
     }
     else if (t.IsStartTag())
     {
         Token.StartTag startTag = t.AsStartTag();
         string name = startTag.Name();
         if (name.Equals("html"))
         {
             return tb.Process(t, InBody);
         }
         else if (name.Equals("body"))
         {
             tb.Insert(startTag);
             tb.FramesetOk(false);
             tb.Transition(InBody);
         }
         else if (name.Equals("frameset"))
         {
             tb.Insert(startTag);
             tb.Transition(InFrameset);
         }
         else if (StringUtil.In(name, "base", "basefont", "bgsound", "link", "meta", "noframes", "script", "style", "title"))
         {
             tb.Error(this);
             Element head = tb.HeadElement;
             tb.Push(head);
             tb.Process(t, InHead);
             tb.RemoveFromStack(head);
         }
         else if (name.Equals("head"))
         {
             tb.Error(this);
             return false;
         }
         else
         {
             AnythingElse(t, tb);
         }
     }
     else if (t.IsEndTag())
     {
         if (StringUtil.In(t.AsEndTag().Name(), "body", "html"))
         {
             AnythingElse(t, tb);
         }
         else
         {
             tb.Error(this);
             return false;
         }
     }
     else
     {
         AnythingElse(t, tb);
     }
     return true;
 }
Example #5
0
 public override bool Process(Token t, TreeBuilder tb)
 {
     if (IsWhitespace(t))
     {
         tb.Insert(t.AsCharacter());
     }
     else if (t.IsComment())
     {
         tb.Insert(t.AsComment());
     }
     else if (t.IsDoctype())
     {
         tb.Error(this);
         return false;
     }
     else if (t.IsStartTag())
     {
         Token.StartTag start = t.AsStartTag();
         string name = start.Name();
         if (name.Equals("html"))
         {
             return tb.Process(start, InBody);
         }
         else if (name.Equals("frameset"))
         {
             tb.Insert(start);
         }
         else if (name.Equals("frame"))
         {
             tb.InsertEmpty(start);
         }
         else if (name.Equals("noframes"))
         {
             return tb.Process(start, InHead);
         }
         else
         {
             tb.Error(this);
             return false;
         }
     }
     else if (t.IsEndTag() && t.AsEndTag().Name().Equals("frameset"))
     {
         if (tb.CurrentElement.NodeName.Equals("html"))
         { // frag
             tb.Error(this);
             return false;
         }
         else
         {
             tb.Pop();
             if (!tb.IsFragmentParsing() && !tb.CurrentElement.NodeName.Equals("frameset"))
             {
                 tb.Transition(AfterFrameset);
             }
         }
     }
     else if (t.IsEOF())
     {
         if (!tb.CurrentElement.NodeName.Equals("html"))
         {
             tb.Error(this);
             return true;
         }
     }
     else
     {
         tb.Error(this);
         return false;
     }
     return true;
 }
Example #6
0
 public override bool Process(Token t, TreeBuilder tb)
 {
     if (IsWhitespace(t))
     {
         tb.Insert(t.AsCharacter());
     }
     else if (t.IsComment())
     {
         tb.Insert(t.AsComment());
     }
     else if (t.IsDoctype())
     {
         tb.Error(this);
         return false;
     }
     else if (t.IsStartTag() && t.AsStartTag().Name().Equals("html"))
     {
         return tb.Process(t, InBody);
     }
     else if (t.IsEndTag() && t.AsEndTag().Name().Equals("html"))
     {
         tb.Transition(AfterAfterFrameset);
     }
     else if (t.IsStartTag() && t.AsStartTag().Name().Equals("noframes"))
     {
         return tb.Process(t, InHead);
     }
     else if (t.IsEOF())
     {
         // cool your heels, we're complete
     }
     else
     {
         tb.Error(this);
         return false;
     }
     return true;
 }
Example #7
0
 public override bool Process(Token t, TreeBuilder tb)
 {
     if (t.IsStartTag() && StringUtil.In(t.AsStartTag().Name(), "caption", "table", "tbody", "tfoot", "thead", "tr", "td", "th"))
     {
         tb.Error(this);
         tb.Process(new Token.EndTag("select"));
         return tb.Process(t);
     }
     else if (t.IsEndTag() && StringUtil.In(t.AsEndTag().Name(), "caption", "table", "tbody", "tfoot", "thead", "tr", "td", "th"))
     {
         tb.Error(this);
         if (tb.InTableScope(t.AsEndTag().Name()))
         {
             tb.Process(new Token.EndTag("select"));
             return (tb.Process(t));
         }
         else
         {
             return false;
         }
     }
     else
     {
         return tb.Process(t, InSelect);
     }
 }
Example #8
0
 public override bool Process(Token t, TreeBuilder tb)
 {
     if (IsWhitespace(t))
     {
         return tb.Process(t, InBody);
     }
     else if (t.IsComment())
     {
         tb.Insert(t.AsComment()); // into html node
     }
     else if (t.IsDoctype())
     {
         tb.Error(this);
         return false;
     }
     else if (t.IsStartTag() && t.AsStartTag().Name().Equals("html"))
     {
         return tb.Process(t, InBody);
     }
     else if (t.IsEndTag() && t.AsEndTag().Name().Equals("html"))
     {
         if (tb.IsFragmentParsing())
         {
             tb.Error(this);
             return false;
         }
         else
         {
             tb.Transition(AfterAfterBody);
         }
     }
     else if (t.IsEOF())
     {
         // chillax! we're done
     }
     else
     {
         tb.Error(this);
         tb.Transition(InBody);
         return tb.Process(t);
     }
     return true;
 }
Example #9
0
            public override bool Process(Token t, TreeBuilder tb)
            {
                if (t.IsEndTag())
                {
                    Token.EndTag endTag = t.AsEndTag();
                    String name = endTag.Name();

                    if (StringUtil.In(name, "td", "th"))
                    {
                        if (!tb.InTableScope(name))
                        {
                            tb.Error(this);
                            tb.Transition(InRow); // might not be in scope if empty: <td /> and processing fake end tag
                            return false;
                        }
                        tb.GenerateImpliedEndTags();
                        if (!tb.CurrentElement.NodeName.Equals(name))
                        {
                            tb.Error(this);
                        }
                        tb.PopStackToClose(name);
                        tb.ClearFormattingElementsToLastMarker();
                        tb.Transition(InRow);
                    }
                    else if (StringUtil.In(name, "body", "caption", "col", "colgroup", "html"))
                    {
                        tb.Error(this);
                        return false;
                    }
                    else if (StringUtil.In(name, "table", "tbody", "tfoot", "thead", "tr"))
                    {
                        if (!tb.InTableScope(name))
                        {
                            tb.Error(this);
                            return false;
                        }
                        CloseCell(tb);
                        return tb.Process(t);
                    }
                    else
                    {
                        return AnythingElse(t, tb);
                    }
                }
                else if (t.IsStartTag() &&
                        StringUtil.In(t.AsStartTag().Name(),
                                "caption", "col", "colgroup", "tbody", "td", "tfoot", "th", "thead", "tr"))
                {
                    if (!(tb.InTableScope("td") || tb.InTableScope("th")))
                    {
                        tb.Error(this);
                        return false;
                    }
                    CloseCell(tb);
                    return tb.Process(t);
                }
                else
                {
                    return AnythingElse(t, tb);
                }
                return true;
            }
Example #10
0
            public override bool Process(Token t, TreeBuilder tb)
            {
                if (t.IsStartTag())
                {
                    Token.StartTag startTag = t.AsStartTag();
                    String name = startTag.Name();

                    if (StringUtil.In(name, "th", "td"))
                    {
                        tb.ClearStackToTableRowContext();
                        tb.Insert(startTag);
                        tb.Transition(InCell);
                        tb.InsertMarkerToFormattingElements();
                    }
                    else if (StringUtil.In(name, "caption", "col", "colgroup", "tbody", "tfoot", "thead", "tr"))
                    {
                        return HandleMissingTr(t, tb);
                    }
                    else
                    {
                        return AnythingElse(t, tb);
                    }
                }
                else if (t.IsEndTag())
                {
                    Token.EndTag endTag = t.AsEndTag();
                    string name = endTag.Name();

                    if (name.Equals("tr"))
                    {
                        if (!tb.InTableScope(name))
                        {
                            tb.Error(this); // frag
                            return false;
                        }
                        tb.ClearStackToTableRowContext();
                        tb.Pop(); // tr
                        tb.Transition(InTableBody);
                    }
                    else if (name.Equals("table"))
                    {
                        return HandleMissingTr(t, tb);
                    }
                    else if (StringUtil.In(name, "tbody", "tfoot", "thead"))
                    {
                        if (!tb.InTableScope(name))
                        {
                            tb.Error(this);
                            return false;
                        }
                        tb.Process(new Token.EndTag("tr"));
                        return tb.Process(t);
                    }
                    else if (StringUtil.In(name, "body", "caption", "col", "colgroup", "html", "td", "th"))
                    {
                        tb.Error(this);
                        return false;
                    }
                    else
                    {
                        return AnythingElse(t, tb);
                    }
                }
                else
                {
                    return AnythingElse(t, tb);
                }
                return true;
            }
Example #11
0
            public override bool Process(Token t, TreeBuilder tb)
            {
                if (t.IsEndTag() && t.AsEndTag().Name().Equals("caption"))
                {
                    Token.EndTag endTag = t.AsEndTag();
                    string name = endTag.Name();

                    if (!tb.InTableScope(name))
                    {
                        tb.Error(this);
                        return false;
                    }
                    else
                    {
                        tb.GenerateImpliedEndTags();
                        if (!tb.CurrentElement.NodeName.Equals("caption"))
                        {
                            tb.Error(this);
                        }
                        tb.PopStackToClose("caption");
                        tb.ClearFormattingElementsToLastMarker();
                        tb.Transition(InTable);
                    }
                }
                else if ((t.IsStartTag() &&
                    StringUtil.In(t.AsStartTag().Name(), "caption", "col", "colgroup", "tbody", "td", "tfoot", "th", "thead", "tr") ||
                    t.IsEndTag() &&
                    t.AsEndTag().Name().Equals("table")))
                {
                    tb.Error(this);
                    bool processed = tb.Process(new Token.EndTag("caption"));

                    if (processed)
                    {
                        return tb.Process(t);
                    }
                }
                else if (t.IsEndTag() && StringUtil.In(t.AsEndTag().Name(),
                      "body", "col", "colgroup", "html", "tbody", "td", "tfoot", "th", "thead", "tr"))
                {
                    tb.Error(this);
                    return false;
                }
                else
                {
                    return tb.Process(t, InBody);
                }
                return true;
            }
Example #12
0
            public override bool Process(Token t, TreeBuilder tb)
            {
                if (t.IsCharacter())
                {
                    tb.NewPendingTableCharacters();
                    tb.MarkInsertionMode();
                    tb.Transition(InTableText);
                    return tb.Process(t);
                }
                else if (t.IsComment())
                {
                    tb.Insert(t.AsComment());
                }
                else if (t.IsDoctype())
                {
                    tb.Error(this);
                    return false;
                }
                else if (t.IsStartTag())
                {
                    Token.StartTag startTag = t.AsStartTag();
                    string name = startTag.Name();
                    if (name.Equals("caption"))
                    {
                        tb.ClearStackToTableContext();
                        tb.InsertMarkerToFormattingElements();
                        tb.Insert(startTag);
                        tb.Transition(InCaption);
                    }
                    else if (name.Equals("colgroup"))
                    {
                        tb.ClearStackToTableContext();
                        tb.Insert(startTag);
                        tb.Transition(InColumnGroup);
                    }
                    else if (name.Equals("col"))
                    {
                        tb.Process(new Token.StartTag("colgroup"));
                        return tb.Process(t);
                    }
                    else if (StringUtil.In(name, "tbody", "tfoot", "thead"))
                    {
                        tb.ClearStackToTableContext();
                        tb.Insert(startTag);
                        tb.Transition(InTableBody);
                    }
                    else if (StringUtil.In(name, "td", "th", "tr"))
                    {
                        tb.Process(new Token.StartTag("tbody"));
                        return tb.Process(t);
                    }
                    else if (name.Equals("table"))
                    {
                        tb.Error(this);
                        bool processed = tb.Process(new Token.EndTag("table"));
                        if (processed) // only ignored if in fragment
                        {
                            return tb.Process(t);
                        }
                    }
                    else if (StringUtil.In(name, "style", "script"))
                    {
                        return tb.Process(t, InHead);
                    }
                    else if (name.Equals("input"))
                    {
                        if (!startTag.Attributes["type"].Equals("hidden", StringComparison.InvariantCultureIgnoreCase))
                        {
                            return AnythingElse(t, tb);
                        }
                        else
                        {
                            tb.InsertEmpty(startTag);
                        }
                    }
                    else if (name.Equals("form"))
                    {
                        tb.Error(this);
                        if (tb.FormElement != null)
                            return false;
                        else
                        {
                            Element form = tb.InsertEmpty(startTag);
                            tb.FormElement = form;
                        }
                    }
                    else
                    {
                        return AnythingElse(t, tb);
                    }
                }
                else if (t.IsEndTag())
                {
                    Token.EndTag endTag = t.AsEndTag();
                    string name = endTag.Name();

                    if (name.Equals("table"))
                    {
                        if (!tb.InTableScope(name))
                        {
                            tb.Error(this);
                            return false;
                        }
                        else
                        {
                            tb.PopStackToClose("table");
                        }
                        tb.ResetInsertionMode();
                    }
                    else if (StringUtil.In(name,
                            "body", "caption", "col", "colgroup", "html", "tbody", "td", "tfoot", "th", "thead", "tr"))
                    {
                        tb.Error(this);
                        return false;
                    }
                    else
                    {
                        return AnythingElse(t, tb);
                    }
                }
                else if (t.IsEOF())
                {
                    if (tb.CurrentElement.NodeName.Equals("html"))
                        tb.Error(this);
                    return true; // stops parsing
                }
                return AnythingElse(t, tb);
            }
Example #13
0
 // in script, style etc. normally treated as data tags
 public override bool Process(Token t, TreeBuilder tb)
 {
     if (t.IsCharacter())
     {
         tb.Insert(t.AsCharacter());
     }
     else if (t.IsEOF())
     {
         tb.Error(this);
         // if current node is script: already started
         tb.Pop();
         tb.Transition(tb.OriginalState);
         return tb.Process(t);
     }
     else if (t.IsEndTag())
     {
         // if: An end tag whose tag name is "script" -- scripting nesting level, if evaluating scripts
         tb.Pop();
         tb.Transition(tb.OriginalState);
     }
     return true;
 }