michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "mozilla/Likely.h" michael@0: michael@0: void michael@0: nsHtml5Tokenizer::StartPlainText() michael@0: { michael@0: stateSave = NS_HTML5TOKENIZER_PLAINTEXT; michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::EnableViewSource(nsHtml5Highlighter* aHighlighter) michael@0: { michael@0: mViewSource = aHighlighter; michael@0: } michael@0: michael@0: bool michael@0: nsHtml5Tokenizer::FlushViewSource() michael@0: { michael@0: return mViewSource->FlushOps(); michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::StartViewSource(const nsAutoString& aTitle) michael@0: { michael@0: mViewSource->Start(aTitle); michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::EndViewSource() michael@0: { michael@0: mViewSource->End(); michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errWarnLtSlashInRcdata() michael@0: { michael@0: } michael@0: michael@0: // The null checks below annotated MOZ_LIKELY are not actually necessary. michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errUnquotedAttributeValOrNull(char16_t c) michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: switch (c) { michael@0: case '<': michael@0: mViewSource->AddErrorToCurrentNode("errUnquotedAttributeLt"); michael@0: return; michael@0: case '`': michael@0: mViewSource->AddErrorToCurrentNode("errUnquotedAttributeGrave"); michael@0: return; michael@0: case '\'': michael@0: case '"': michael@0: mViewSource->AddErrorToCurrentNode("errUnquotedAttributeQuote"); michael@0: return; michael@0: case '=': michael@0: mViewSource->AddErrorToCurrentNode("errUnquotedAttributeEquals"); michael@0: return; michael@0: } michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errLtOrEqualsOrGraveInUnquotedAttributeOrNull(char16_t c) michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: switch (c) { michael@0: case '=': michael@0: mViewSource->AddErrorToCurrentNode("errUnquotedAttributeStartEquals"); michael@0: return; michael@0: case '<': michael@0: mViewSource->AddErrorToCurrentNode("errUnquotedAttributeStartLt"); michael@0: return; michael@0: case '`': michael@0: mViewSource->AddErrorToCurrentNode("errUnquotedAttributeStartGrave"); michael@0: return; michael@0: } michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errBadCharBeforeAttributeNameOrNull(char16_t c) michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: if (c == '<') { michael@0: mViewSource->AddErrorToCurrentNode("errBadCharBeforeAttributeNameLt"); michael@0: } else if (c == '=') { michael@0: errEqualsSignBeforeAttributeName(); michael@0: } else if (c != 0xFFFD) { michael@0: errQuoteBeforeAttributeName(c); michael@0: } michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errBadCharAfterLt(char16_t c) michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errBadCharAfterLt"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errQuoteOrLtInAttributeNameOrNull(char16_t c) michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: if (c == '<') { michael@0: mViewSource->AddErrorToCurrentNode("errLtInAttributeName"); michael@0: } else if (c != 0xFFFD) { michael@0: mViewSource->AddErrorToCurrentNode("errQuoteInAttributeName"); michael@0: } michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::maybeErrAttributesOnEndTag(nsHtml5HtmlAttributes* attrs) michael@0: { michael@0: if (mViewSource && attrs->getLength() != 0) { michael@0: /* michael@0: * When an end tag token is emitted with attributes, that is a parse michael@0: * error. michael@0: */ michael@0: mViewSource->AddErrorToCurrentRun("maybeErrAttributesOnEndTag"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::maybeErrSlashInEndTag(bool selfClosing) michael@0: { michael@0: if (mViewSource && selfClosing && endTag) { michael@0: mViewSource->AddErrorToCurrentSlash("maybeErrSlashInEndTag"); michael@0: } michael@0: } michael@0: michael@0: char16_t michael@0: nsHtml5Tokenizer::errNcrNonCharacter(char16_t ch) michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNcrNonCharacter"); michael@0: } michael@0: return ch; michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errAstralNonCharacter(int32_t ch) michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNcrNonCharacter"); michael@0: } michael@0: } michael@0: michael@0: char16_t michael@0: nsHtml5Tokenizer::errNcrControlChar(char16_t ch) michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNcrControlChar"); michael@0: } michael@0: return ch; michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errGarbageAfterLtSlash() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errGarbageAfterLtSlash"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errLtSlashGt() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errLtSlashGt"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errCharRefLacksSemicolon() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errCharRefLacksSemicolon"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errNoDigitsInNCR() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNoDigitsInNCR"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errGtInSystemId() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errGtInSystemId"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errGtInPublicId() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errGtInPublicId"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errNamelessDoctype() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNamelessDoctype"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errConsecutiveHyphens() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errConsecutiveHyphens"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errPrematureEndOfComment() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errPrematureEndOfComment"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errBogusComment() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errBogusComment"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errSlashNotFollowedByGt() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentSlash("errSlashNotFollowedByGt"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errNoSpaceBetweenAttributes() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNoSpaceBetweenAttributes"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errAttributeValueMissing() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errAttributeValueMissing"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errEqualsSignBeforeAttributeName() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errEqualsSignBeforeAttributeName"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errLtGt() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errLtGt"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errProcessingInstruction() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errProcessingInstruction"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errUnescapedAmpersandInterpretedAsCharacterReference() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentAmpersand("errUnescapedAmpersandInterpretedAsCharacterReference"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errNotSemicolonTerminated() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNotSemicolonTerminated"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errNoNamedCharacterMatch() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentAmpersand("errNoNamedCharacterMatch"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errQuoteBeforeAttributeName(char16_t c) michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errQuoteBeforeAttributeName"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errExpectedPublicId() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errExpectedPublicId"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errBogusDoctype() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errBogusDoctype"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errNcrSurrogate() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNcrSurrogate"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errNcrCr() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNcrCr"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errNcrInC1Range() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNcrInC1Range"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errEofInPublicId() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentRun("errEofInPublicId"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errEofInComment() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentRun("errEofInComment"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errEofInDoctype() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentRun("errEofInDoctype"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errEofInAttributeValue() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentRun("errEofInAttributeValue"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errEofInAttributeName() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentRun("errEofInAttributeName"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errEofWithoutGt() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentRun("errEofWithoutGt"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errEofInTagName() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentRun("errEofInTagName"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errEofInEndTag() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentRun("errEofInEndTag"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errEofAfterLt() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentRun("errEofAfterLt"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errNcrOutOfRange() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNcrOutOfRange"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errNcrUnassigned() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNcrUnassigned"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errDuplicateAttribute() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errDuplicateAttribute"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errEofInSystemId() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentRun("errEofInSystemId"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errExpectedSystemId() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errExpectedSystemId"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errMissingSpaceBeforeDoctypeName() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errMissingSpaceBeforeDoctypeName"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errHyphenHyphenBang() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errHyphenHyphenBang"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errNcrControlChar() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNcrControlChar"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errNcrZero() michael@0: { michael@0: if (MOZ_UNLIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNcrZero"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errNoSpaceBetweenDoctypeSystemKeywordAndQuote() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNoSpaceBetweenDoctypeSystemKeywordAndQuote"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errNoSpaceBetweenPublicAndSystemIds() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNoSpaceBetweenPublicAndSystemIds"); michael@0: } michael@0: } michael@0: michael@0: void michael@0: nsHtml5Tokenizer::errNoSpaceBetweenDoctypePublicKeywordAndQuote() michael@0: { michael@0: if (MOZ_LIKELY(mViewSource)) { michael@0: mViewSource->AddErrorToCurrentNode("errNoSpaceBetweenDoctypePublicKeywordAndQuote"); michael@0: } michael@0: }