forked from OSchip/llvm-project
Comment parsing: repaint the bikesched: rename 'HTML open tags' to 'HTML start tags' and 'HTML close tags' to 'HTML end tags' according to HTML spec.
llvm-svn: 160153
This commit is contained in:
parent
1af8c8060c
commit
e00ffc7bb8
|
@ -50,8 +50,8 @@ protected:
|
|||
};
|
||||
enum { NumInlineContentCommentBitfields = 9 };
|
||||
|
||||
class HTMLOpenTagCommentBitfields {
|
||||
friend class HTMLOpenTagComment;
|
||||
class HTMLStartTagCommentBitfields {
|
||||
friend class HTMLStartTagComment;
|
||||
|
||||
unsigned : NumInlineContentCommentBitfields;
|
||||
|
||||
|
@ -76,7 +76,7 @@ protected:
|
|||
union {
|
||||
CommentBitfields CommentBits;
|
||||
InlineContentCommentBitfields InlineContentCommentBits;
|
||||
HTMLOpenTagCommentBitfields HTMLOpenTagCommentBits;
|
||||
HTMLStartTagCommentBitfields HTMLStartTagCommentBits;
|
||||
ParamCommandCommentBitfields ParamCommandCommentBits;
|
||||
};
|
||||
|
||||
|
@ -293,7 +293,7 @@ public:
|
|||
};
|
||||
|
||||
/// An opening HTML tag with attributes.
|
||||
class HTMLOpenTagComment : public HTMLTagComment {
|
||||
class HTMLStartTagComment : public HTMLTagComment {
|
||||
public:
|
||||
class Attribute {
|
||||
public:
|
||||
|
@ -334,21 +334,21 @@ private:
|
|||
ArrayRef<Attribute> Attributes;
|
||||
|
||||
public:
|
||||
HTMLOpenTagComment(SourceLocation LocBegin,
|
||||
StringRef TagName) :
|
||||
HTMLTagComment(HTMLOpenTagCommentKind,
|
||||
HTMLStartTagComment(SourceLocation LocBegin,
|
||||
StringRef TagName) :
|
||||
HTMLTagComment(HTMLStartTagCommentKind,
|
||||
LocBegin, LocBegin.getLocWithOffset(1 + TagName.size()),
|
||||
TagName,
|
||||
LocBegin.getLocWithOffset(1),
|
||||
LocBegin.getLocWithOffset(1 + TagName.size())) {
|
||||
HTMLOpenTagCommentBits.IsSelfClosing = false;
|
||||
HTMLStartTagCommentBits.IsSelfClosing = false;
|
||||
}
|
||||
|
||||
static bool classof(const Comment *C) {
|
||||
return C->getCommentKind() == HTMLOpenTagCommentKind;
|
||||
return C->getCommentKind() == HTMLStartTagCommentKind;
|
||||
}
|
||||
|
||||
static bool classof(const HTMLOpenTagComment *) { return true; }
|
||||
static bool classof(const HTMLStartTagComment *) { return true; }
|
||||
|
||||
child_iterator child_begin() const { return NULL; }
|
||||
|
||||
|
@ -380,21 +380,21 @@ public:
|
|||
}
|
||||
|
||||
bool isSelfClosing() const {
|
||||
return HTMLOpenTagCommentBits.IsSelfClosing;
|
||||
return HTMLStartTagCommentBits.IsSelfClosing;
|
||||
}
|
||||
|
||||
void setSelfClosing() {
|
||||
HTMLOpenTagCommentBits.IsSelfClosing = true;
|
||||
HTMLStartTagCommentBits.IsSelfClosing = true;
|
||||
}
|
||||
};
|
||||
|
||||
/// A closing HTML tag.
|
||||
class HTMLCloseTagComment : public HTMLTagComment {
|
||||
class HTMLEndTagComment : public HTMLTagComment {
|
||||
public:
|
||||
HTMLCloseTagComment(SourceLocation LocBegin,
|
||||
SourceLocation LocEnd,
|
||||
StringRef TagName) :
|
||||
HTMLTagComment(HTMLCloseTagCommentKind,
|
||||
HTMLEndTagComment(SourceLocation LocBegin,
|
||||
SourceLocation LocEnd,
|
||||
StringRef TagName) :
|
||||
HTMLTagComment(HTMLEndTagCommentKind,
|
||||
LocBegin, LocEnd,
|
||||
TagName,
|
||||
LocBegin.getLocWithOffset(2),
|
||||
|
@ -402,10 +402,10 @@ public:
|
|||
{ }
|
||||
|
||||
static bool classof(const Comment *C) {
|
||||
return C->getCommentKind() == HTMLCloseTagCommentKind;
|
||||
return C->getCommentKind() == HTMLEndTagCommentKind;
|
||||
}
|
||||
|
||||
static bool classof(const HTMLCloseTagComment *) { return true; }
|
||||
static bool classof(const HTMLEndTagComment *) { return true; }
|
||||
|
||||
child_iterator child_begin() const { return NULL; }
|
||||
|
||||
|
|
|
@ -38,13 +38,13 @@ enum TokenKind {
|
|||
verbatim_block_end,
|
||||
verbatim_line_name,
|
||||
verbatim_line_text,
|
||||
html_tag_open, // <tag
|
||||
html_start_tag, // <tag
|
||||
html_ident, // attr
|
||||
html_equals, // =
|
||||
html_quoted_string, // "blah\"blah" or 'blah\'blah'
|
||||
html_greater, // >
|
||||
html_slash_greater, // />
|
||||
html_tag_close // </tag
|
||||
html_end_tag // </tag
|
||||
};
|
||||
} // end namespace tok
|
||||
|
||||
|
@ -158,13 +158,13 @@ public:
|
|||
TextLen1 = Text.size();
|
||||
}
|
||||
|
||||
StringRef getHTMLTagOpenName() const LLVM_READONLY {
|
||||
assert(is(tok::html_tag_open));
|
||||
StringRef getHTMLTagStartName() const LLVM_READONLY {
|
||||
assert(is(tok::html_start_tag));
|
||||
return StringRef(TextPtr1, TextLen1);
|
||||
}
|
||||
|
||||
void setHTMLTagOpenName(StringRef Name) {
|
||||
assert(is(tok::html_tag_open));
|
||||
void setHTMLTagStartName(StringRef Name) {
|
||||
assert(is(tok::html_start_tag));
|
||||
TextPtr1 = Name.data();
|
||||
TextLen1 = Name.size();
|
||||
}
|
||||
|
@ -191,13 +191,13 @@ public:
|
|||
TextLen1 = Str.size();
|
||||
}
|
||||
|
||||
StringRef getHTMLTagCloseName() const LLVM_READONLY {
|
||||
assert(is(tok::html_tag_close));
|
||||
StringRef getHTMLTagEndName() const LLVM_READONLY {
|
||||
assert(is(tok::html_end_tag));
|
||||
return StringRef(TextPtr1, TextLen1);
|
||||
}
|
||||
|
||||
void setHTMLTagCloseName(StringRef Name) {
|
||||
assert(is(tok::html_tag_close));
|
||||
void setHTMLTagEndName(StringRef Name) {
|
||||
assert(is(tok::html_end_tag));
|
||||
TextPtr1 = Name.data();
|
||||
TextLen1 = Name.size();
|
||||
}
|
||||
|
@ -249,10 +249,10 @@ private:
|
|||
LS_VerbatimLineText,
|
||||
|
||||
/// Finished lexing \verbatim <TAG \endverbatim part, lexing tag attributes.
|
||||
LS_HTMLOpenTag,
|
||||
LS_HTMLStartTag,
|
||||
|
||||
/// Finished lexing \verbatim </TAG \endverbatim part, lexing '>'.
|
||||
LS_HTMLCloseTag
|
||||
LS_HTMLEndTag
|
||||
};
|
||||
|
||||
/// Current lexing mode.
|
||||
|
@ -328,13 +328,13 @@ private:
|
|||
|
||||
void lexVerbatimLineText(Token &T);
|
||||
|
||||
void setupAndLexHTMLOpenTag(Token &T);
|
||||
void setupAndLexHTMLStartTag(Token &T);
|
||||
|
||||
void lexHTMLOpenTag(Token &T);
|
||||
void lexHTMLStartTag(Token &T);
|
||||
|
||||
void setupAndLexHTMLCloseTag(Token &T);
|
||||
void setupAndLexHTMLEndTag(Token &T);
|
||||
|
||||
void lexHTMLCloseTag(Token &T);
|
||||
void lexHTMLEndTag(Token &T);
|
||||
|
||||
public:
|
||||
Lexer(SourceLocation FileLoc, const CommentOptions &CommOpts,
|
||||
|
|
|
@ -108,8 +108,8 @@ public:
|
|||
BlockCommandComment *parseBlockCommand();
|
||||
InlineCommandComment *parseInlineCommand();
|
||||
|
||||
HTMLOpenTagComment *parseHTMLOpenTag();
|
||||
HTMLCloseTagComment *parseHTMLCloseTag();
|
||||
HTMLStartTagComment *parseHTMLStartTag();
|
||||
HTMLEndTagComment *parseHTMLEndTag();
|
||||
|
||||
BlockContentComment *parseParagraphOrBlockCommand();
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ class Sema {
|
|||
|
||||
/// A stack of HTML tags that are currently open (not matched with closing
|
||||
/// tags).
|
||||
SmallVector<HTMLOpenTagComment *, 8> HTMLOpenTags;
|
||||
SmallVector<HTMLStartTagComment *, 8> HTMLOpenTags;
|
||||
|
||||
public:
|
||||
Sema(llvm::BumpPtrAllocator &Allocator, const SourceManager &SourceMgr,
|
||||
|
@ -123,18 +123,18 @@ public:
|
|||
SourceLocation TextBegin,
|
||||
StringRef Text);
|
||||
|
||||
HTMLOpenTagComment *actOnHTMLOpenTagStart(SourceLocation LocBegin,
|
||||
StringRef TagName);
|
||||
HTMLStartTagComment *actOnHTMLStartTagStart(SourceLocation LocBegin,
|
||||
StringRef TagName);
|
||||
|
||||
HTMLOpenTagComment *actOnHTMLOpenTagFinish(
|
||||
HTMLOpenTagComment *Tag,
|
||||
ArrayRef<HTMLOpenTagComment::Attribute> Attrs,
|
||||
HTMLStartTagComment *actOnHTMLStartTagFinish(
|
||||
HTMLStartTagComment *Tag,
|
||||
ArrayRef<HTMLStartTagComment::Attribute> Attrs,
|
||||
SourceLocation GreaterLoc,
|
||||
bool IsSelfClosing);
|
||||
|
||||
HTMLCloseTagComment *actOnHTMLCloseTag(SourceLocation LocBegin,
|
||||
SourceLocation LocEnd,
|
||||
StringRef TagName);
|
||||
HTMLEndTagComment *actOnHTMLEndTag(SourceLocation LocBegin,
|
||||
SourceLocation LocEnd,
|
||||
StringRef TagName);
|
||||
|
||||
FullComment *actOnFullComment(ArrayRef<BlockContentComment *> Blocks);
|
||||
|
||||
|
@ -157,8 +157,8 @@ public:
|
|||
|
||||
bool isInlineCommand(StringRef Name);
|
||||
|
||||
bool isHTMLCloseTagOptional(StringRef Name);
|
||||
bool isHTMLCloseTagForbidden(StringRef Name);
|
||||
bool isHTMLEndTagOptional(StringRef Name);
|
||||
bool isHTMLEndTagForbidden(StringRef Name);
|
||||
};
|
||||
|
||||
} // end namespace comments
|
||||
|
|
|
@ -10,8 +10,8 @@ def InlineContentComment : Comment<1>;
|
|||
def TextComment : DComment<InlineContentComment>;
|
||||
def InlineCommandComment : DComment<InlineContentComment>;
|
||||
def HTMLTagComment : DComment<InlineContentComment, 1>;
|
||||
def HTMLOpenTagComment : DComment<HTMLTagComment>;
|
||||
def HTMLCloseTagComment : DComment<HTMLTagComment>;
|
||||
def HTMLStartTagComment : DComment<HTMLTagComment>;
|
||||
def HTMLEndTagComment : DComment<HTMLTagComment>;
|
||||
|
||||
def BlockContentComment : Comment<1>;
|
||||
def ParagraphComment : DComment<BlockContentComment>;
|
||||
|
|
|
@ -13,12 +13,12 @@ let CategoryName = "Documentation Issue" in {
|
|||
// HTML parsing errors. These are under -Wdocumentation to make sure the user
|
||||
// knows that we didn't parse something as he might expect.
|
||||
|
||||
def warn_doc_html_open_tag_expected_quoted_string : Warning<
|
||||
def warn_doc_html_start_tag_expected_quoted_string : Warning<
|
||||
"expected quoted string after equals sign">,
|
||||
InGroup<Documentation>, DefaultIgnore;
|
||||
|
||||
def warn_doc_html_open_tag_expected_ident_or_greater : Warning<
|
||||
"HTML opening tag prematurely ended, expected attribute name or '>'">,
|
||||
def warn_doc_html_start_tag_expected_ident_or_greater : Warning<
|
||||
"HTML start tag prematurely ended, expected attribute name or '>'">,
|
||||
InGroup<Documentation>, DefaultIgnore;
|
||||
|
||||
def note_doc_html_tag_started_here : Note<
|
||||
|
@ -26,20 +26,20 @@ def note_doc_html_tag_started_here : Note<
|
|||
|
||||
// HTML semantic errors
|
||||
|
||||
def warn_doc_html_close_forbidden : Warning<
|
||||
"HTML closing tag '%0' is forbidden">,
|
||||
def warn_doc_html_end_forbidden : Warning<
|
||||
"HTML end tag '%0' is forbidden">,
|
||||
InGroup<DocumentationHTML>, DefaultIgnore;
|
||||
|
||||
def warn_doc_html_close_unbalanced : Warning<
|
||||
"HTML closing tag does not match any opening tag">,
|
||||
def warn_doc_html_end_unbalanced : Warning<
|
||||
"HTML end tag does not match any start tag">,
|
||||
InGroup<DocumentationHTML>, DefaultIgnore;
|
||||
|
||||
def warn_doc_html_open_close_mismatch : Warning<
|
||||
"HTML opening tag '%0' closed by '%1'">,
|
||||
def warn_doc_html_start_end_mismatch : Warning<
|
||||
"HTML start tag '%0' closed by '%1'">,
|
||||
InGroup<DocumentationHTML>, DefaultIgnore;
|
||||
|
||||
def note_doc_html_closing_tag : Note<
|
||||
"closing tag">;
|
||||
def note_doc_html_end_tag : Note<
|
||||
"end tag">;
|
||||
|
||||
// Commands
|
||||
|
||||
|
|
|
@ -43,8 +43,8 @@ public:
|
|||
// Inline content.
|
||||
void visitTextComment(const TextComment *C);
|
||||
void visitInlineCommandComment(const InlineCommandComment *C);
|
||||
void visitHTMLOpenTagComment(const HTMLOpenTagComment *C);
|
||||
void visitHTMLCloseTagComment(const HTMLCloseTagComment *C);
|
||||
void visitHTMLStartTagComment(const HTMLStartTagComment *C);
|
||||
void visitHTMLEndTagComment(const HTMLEndTagComment *C);
|
||||
|
||||
// Block content.
|
||||
void visitParagraphComment(const ParagraphComment *C);
|
||||
|
@ -110,14 +110,14 @@ void CommentDumper::visitInlineCommandComment(const InlineCommandComment *C) {
|
|||
OS << " Arg[" << i << "]=\"" << C->getArgText(i) << "\"";
|
||||
}
|
||||
|
||||
void CommentDumper::visitHTMLOpenTagComment(const HTMLOpenTagComment *C) {
|
||||
void CommentDumper::visitHTMLStartTagComment(const HTMLStartTagComment *C) {
|
||||
dumpComment(C);
|
||||
|
||||
OS << " Name=\"" << C->getTagName() << "\"";
|
||||
if (C->getAttrCount() != 0) {
|
||||
OS << " Attrs: ";
|
||||
for (unsigned i = 0, e = C->getAttrCount(); i != e; ++i) {
|
||||
const HTMLOpenTagComment::Attribute &Attr = C->getAttr(i);
|
||||
const HTMLStartTagComment::Attribute &Attr = C->getAttr(i);
|
||||
OS << " \"" << Attr.Name << "=\"" << Attr.Value << "\"";
|
||||
}
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ void CommentDumper::visitHTMLOpenTagComment(const HTMLOpenTagComment *C) {
|
|||
OS << " SelfClosing";
|
||||
}
|
||||
|
||||
void CommentDumper::visitHTMLCloseTagComment(const HTMLCloseTagComment *C) {
|
||||
void CommentDumper::visitHTMLEndTagComment(const HTMLEndTagComment *C) {
|
||||
dumpComment(C);
|
||||
|
||||
OS << " Name=\"" << C->getTagName() << "\"";
|
||||
|
|
|
@ -273,11 +273,11 @@ void Lexer::lexCommentText(Token &T) {
|
|||
case LS_VerbatimLineText:
|
||||
lexVerbatimLineText(T);
|
||||
return;
|
||||
case LS_HTMLOpenTag:
|
||||
lexHTMLOpenTag(T);
|
||||
case LS_HTMLStartTag:
|
||||
lexHTMLStartTag(T);
|
||||
return;
|
||||
case LS_HTMLCloseTag:
|
||||
lexHTMLCloseTag(T);
|
||||
case LS_HTMLEndTag:
|
||||
lexHTMLEndTag(T);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -363,9 +363,9 @@ void Lexer::lexCommentText(Token &T) {
|
|||
}
|
||||
const char C = *TokenPtr;
|
||||
if (isHTMLIdentifierStartingCharacter(C))
|
||||
setupAndLexHTMLOpenTag(T);
|
||||
setupAndLexHTMLStartTag(T);
|
||||
else if (C == '/')
|
||||
setupAndLexHTMLCloseTag(T);
|
||||
setupAndLexHTMLEndTag(T);
|
||||
else {
|
||||
StringRef Text(BufferPtr, TokenPtr - BufferPtr);
|
||||
formTokenWithChars(T, TokenPtr, tok::text);
|
||||
|
@ -496,25 +496,25 @@ void Lexer::lexVerbatimLineText(Token &T) {
|
|||
State = LS_Normal;
|
||||
}
|
||||
|
||||
void Lexer::setupAndLexHTMLOpenTag(Token &T) {
|
||||
void Lexer::setupAndLexHTMLStartTag(Token &T) {
|
||||
assert(BufferPtr[0] == '<' &&
|
||||
isHTMLIdentifierStartingCharacter(BufferPtr[1]));
|
||||
const char *TagNameEnd = skipHTMLIdentifier(BufferPtr + 2, CommentEnd);
|
||||
|
||||
StringRef Name(BufferPtr + 1, TagNameEnd - (BufferPtr + 1));
|
||||
formTokenWithChars(T, TagNameEnd, tok::html_tag_open);
|
||||
T.setHTMLTagOpenName(Name);
|
||||
formTokenWithChars(T, TagNameEnd, tok::html_start_tag);
|
||||
T.setHTMLTagStartName(Name);
|
||||
|
||||
BufferPtr = skipWhitespace(BufferPtr, CommentEnd);
|
||||
|
||||
const char C = *BufferPtr;
|
||||
if (BufferPtr != CommentEnd &&
|
||||
(C == '>' || C == '/' || isHTMLIdentifierStartingCharacter(C)))
|
||||
State = LS_HTMLOpenTag;
|
||||
State = LS_HTMLStartTag;
|
||||
}
|
||||
|
||||
void Lexer::lexHTMLOpenTag(Token &T) {
|
||||
assert(State == LS_HTMLOpenTag);
|
||||
void Lexer::lexHTMLStartTag(Token &T) {
|
||||
assert(State == LS_HTMLStartTag);
|
||||
|
||||
const char *TokenPtr = BufferPtr;
|
||||
char C = *TokenPtr;
|
||||
|
@ -577,7 +577,7 @@ void Lexer::lexHTMLOpenTag(Token &T) {
|
|||
}
|
||||
}
|
||||
|
||||
void Lexer::setupAndLexHTMLCloseTag(Token &T) {
|
||||
void Lexer::setupAndLexHTMLEndTag(Token &T) {
|
||||
assert(BufferPtr[0] == '<' && BufferPtr[1] == '/');
|
||||
|
||||
const char *TagNameBegin = skipWhitespace(BufferPtr + 2, CommentEnd);
|
||||
|
@ -585,14 +585,14 @@ void Lexer::setupAndLexHTMLCloseTag(Token &T) {
|
|||
|
||||
const char *End = skipWhitespace(TagNameEnd, CommentEnd);
|
||||
|
||||
formTokenWithChars(T, End, tok::html_tag_close);
|
||||
T.setHTMLTagCloseName(StringRef(TagNameBegin, TagNameEnd - TagNameBegin));
|
||||
formTokenWithChars(T, End, tok::html_end_tag);
|
||||
T.setHTMLTagEndName(StringRef(TagNameBegin, TagNameEnd - TagNameBegin));
|
||||
|
||||
if (BufferPtr != CommentEnd && *BufferPtr == '>')
|
||||
State = LS_HTMLCloseTag;
|
||||
State = LS_HTMLEndTag;
|
||||
}
|
||||
|
||||
void Lexer::lexHTMLCloseTag(Token &T) {
|
||||
void Lexer::lexHTMLEndTag(Token &T) {
|
||||
assert(BufferPtr != CommentEnd && *BufferPtr == '>');
|
||||
|
||||
formTokenWithChars(T, BufferPtr + 1, tok::html_greater);
|
||||
|
|
|
@ -155,38 +155,38 @@ InlineCommandComment *Parser::parseInlineCommand() {
|
|||
return IC;
|
||||
}
|
||||
|
||||
HTMLOpenTagComment *Parser::parseHTMLOpenTag() {
|
||||
assert(Tok.is(tok::html_tag_open));
|
||||
HTMLOpenTagComment *HOT =
|
||||
S.actOnHTMLOpenTagStart(Tok.getLocation(),
|
||||
Tok.getHTMLTagOpenName());
|
||||
HTMLStartTagComment *Parser::parseHTMLStartTag() {
|
||||
assert(Tok.is(tok::html_start_tag));
|
||||
HTMLStartTagComment *HST =
|
||||
S.actOnHTMLStartTagStart(Tok.getLocation(),
|
||||
Tok.getHTMLTagStartName());
|
||||
consumeToken();
|
||||
|
||||
SmallVector<HTMLOpenTagComment::Attribute, 2> Attrs;
|
||||
SmallVector<HTMLStartTagComment::Attribute, 2> Attrs;
|
||||
while (true) {
|
||||
switch (Tok.getKind()) {
|
||||
case tok::html_ident: {
|
||||
Token Ident = Tok;
|
||||
consumeToken();
|
||||
if (Tok.isNot(tok::html_equals)) {
|
||||
Attrs.push_back(HTMLOpenTagComment::Attribute(Ident.getLocation(),
|
||||
Ident.getHTMLIdent()));
|
||||
Attrs.push_back(HTMLStartTagComment::Attribute(Ident.getLocation(),
|
||||
Ident.getHTMLIdent()));
|
||||
continue;
|
||||
}
|
||||
Token Equals = Tok;
|
||||
consumeToken();
|
||||
if (Tok.isNot(tok::html_quoted_string)) {
|
||||
Diag(Tok.getLocation(),
|
||||
diag::warn_doc_html_open_tag_expected_quoted_string)
|
||||
diag::warn_doc_html_start_tag_expected_quoted_string)
|
||||
<< SourceRange(Equals.getLocation());
|
||||
Attrs.push_back(HTMLOpenTagComment::Attribute(Ident.getLocation(),
|
||||
Ident.getHTMLIdent()));
|
||||
Attrs.push_back(HTMLStartTagComment::Attribute(Ident.getLocation(),
|
||||
Ident.getHTMLIdent()));
|
||||
while (Tok.is(tok::html_equals) ||
|
||||
Tok.is(tok::html_quoted_string))
|
||||
consumeToken();
|
||||
continue;
|
||||
}
|
||||
Attrs.push_back(HTMLOpenTagComment::Attribute(
|
||||
Attrs.push_back(HTMLStartTagComment::Attribute(
|
||||
Ident.getLocation(),
|
||||
Ident.getHTMLIdent(),
|
||||
Equals.getLocation(),
|
||||
|
@ -198,25 +198,25 @@ HTMLOpenTagComment *Parser::parseHTMLOpenTag() {
|
|||
}
|
||||
|
||||
case tok::html_greater:
|
||||
HOT = S.actOnHTMLOpenTagFinish(HOT,
|
||||
copyArray(llvm::makeArrayRef(Attrs)),
|
||||
Tok.getLocation(),
|
||||
/* IsSelfClosing = */ false);
|
||||
HST = S.actOnHTMLStartTagFinish(HST,
|
||||
copyArray(llvm::makeArrayRef(Attrs)),
|
||||
Tok.getLocation(),
|
||||
/* IsSelfClosing = */ false);
|
||||
consumeToken();
|
||||
return HOT;
|
||||
return HST;
|
||||
|
||||
case tok::html_slash_greater:
|
||||
HOT = S.actOnHTMLOpenTagFinish(HOT,
|
||||
copyArray(llvm::makeArrayRef(Attrs)),
|
||||
Tok.getLocation(),
|
||||
/* IsSelfClosing = */ true);
|
||||
HST = S.actOnHTMLStartTagFinish(HST,
|
||||
copyArray(llvm::makeArrayRef(Attrs)),
|
||||
Tok.getLocation(),
|
||||
/* IsSelfClosing = */ true);
|
||||
consumeToken();
|
||||
return HOT;
|
||||
return HST;
|
||||
|
||||
case tok::html_equals:
|
||||
case tok::html_quoted_string:
|
||||
Diag(Tok.getLocation(),
|
||||
diag::warn_doc_html_open_tag_expected_ident_or_greater);
|
||||
diag::warn_doc_html_start_tag_expected_ident_or_greater);
|
||||
while (Tok.is(tok::html_equals) ||
|
||||
Tok.is(tok::html_quoted_string))
|
||||
consumeToken();
|
||||
|
@ -225,20 +225,20 @@ HTMLOpenTagComment *Parser::parseHTMLOpenTag() {
|
|||
Tok.is(tok::html_slash_greater))
|
||||
continue;
|
||||
|
||||
return S.actOnHTMLOpenTagFinish(HOT,
|
||||
return S.actOnHTMLStartTagFinish(HST,
|
||||
copyArray(llvm::makeArrayRef(Attrs)),
|
||||
SourceLocation(),
|
||||
/* IsSelfClosing = */ false);
|
||||
|
||||
default:
|
||||
// Not a token from an HTML start tag. Thus HTML tag prematurely ended.
|
||||
HST = S.actOnHTMLStartTagFinish(HST,
|
||||
copyArray(llvm::makeArrayRef(Attrs)),
|
||||
SourceLocation(),
|
||||
/* IsSelfClosing = */ false);
|
||||
|
||||
default:
|
||||
// Not a token from an HTML open tag. Thus HTML tag prematurely ended.
|
||||
HOT = S.actOnHTMLOpenTagFinish(HOT,
|
||||
copyArray(llvm::makeArrayRef(Attrs)),
|
||||
SourceLocation(),
|
||||
/* IsSelfClosing = */ false);
|
||||
bool StartLineInvalid;
|
||||
const unsigned StartLine = SourceMgr.getPresumedLineNumber(
|
||||
HOT->getLocation(),
|
||||
HST->getLocation(),
|
||||
&StartLineInvalid);
|
||||
bool EndLineInvalid;
|
||||
const unsigned EndLine = SourceMgr.getPresumedLineNumber(
|
||||
|
@ -246,22 +246,22 @@ HTMLOpenTagComment *Parser::parseHTMLOpenTag() {
|
|||
&EndLineInvalid);
|
||||
if (StartLineInvalid || EndLineInvalid || StartLine == EndLine)
|
||||
Diag(Tok.getLocation(),
|
||||
diag::warn_doc_html_open_tag_expected_ident_or_greater)
|
||||
<< HOT->getSourceRange();
|
||||
diag::warn_doc_html_start_tag_expected_ident_or_greater)
|
||||
<< HST->getSourceRange();
|
||||
else {
|
||||
Diag(Tok.getLocation(),
|
||||
diag::warn_doc_html_open_tag_expected_ident_or_greater);
|
||||
Diag(HOT->getLocation(), diag::note_doc_html_tag_started_here)
|
||||
<< HOT->getSourceRange();
|
||||
diag::warn_doc_html_start_tag_expected_ident_or_greater);
|
||||
Diag(HST->getLocation(), diag::note_doc_html_tag_started_here)
|
||||
<< HST->getSourceRange();
|
||||
}
|
||||
return HOT;
|
||||
return HST;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HTMLCloseTagComment *Parser::parseHTMLCloseTag() {
|
||||
assert(Tok.is(tok::html_tag_close));
|
||||
Token TokTagOpen = Tok;
|
||||
HTMLEndTagComment *Parser::parseHTMLEndTag() {
|
||||
assert(Tok.is(tok::html_end_tag));
|
||||
Token TokEndTag = Tok;
|
||||
consumeToken();
|
||||
SourceLocation Loc;
|
||||
if (Tok.is(tok::html_greater)) {
|
||||
|
@ -269,9 +269,9 @@ HTMLCloseTagComment *Parser::parseHTMLCloseTag() {
|
|||
consumeToken();
|
||||
}
|
||||
|
||||
return S.actOnHTMLCloseTag(TokTagOpen.getLocation(),
|
||||
Loc,
|
||||
TokTagOpen.getHTMLTagCloseName());
|
||||
return S.actOnHTMLEndTag(TokEndTag.getLocation(),
|
||||
Loc,
|
||||
TokEndTag.getHTMLTagEndName());
|
||||
}
|
||||
|
||||
BlockContentComment *Parser::parseParagraphOrBlockCommand() {
|
||||
|
@ -315,12 +315,12 @@ BlockContentComment *Parser::parseParagraphOrBlockCommand() {
|
|||
}
|
||||
|
||||
// Don't deal with HTML tag soup now.
|
||||
case tok::html_tag_open:
|
||||
Content.push_back(parseHTMLOpenTag());
|
||||
case tok::html_start_tag:
|
||||
Content.push_back(parseHTMLStartTag());
|
||||
continue;
|
||||
|
||||
case tok::html_tag_close:
|
||||
Content.push_back(parseHTMLCloseTag());
|
||||
case tok::html_end_tag:
|
||||
Content.push_back(parseHTMLEndTag());
|
||||
continue;
|
||||
|
||||
case tok::text:
|
||||
|
@ -418,8 +418,8 @@ BlockContentComment *Parser::parseBlockContent() {
|
|||
switch (Tok.getKind()) {
|
||||
case tok::text:
|
||||
case tok::command:
|
||||
case tok::html_tag_open:
|
||||
case tok::html_tag_close:
|
||||
case tok::html_start_tag:
|
||||
case tok::html_end_tag:
|
||||
return parseParagraphOrBlockCommand();
|
||||
|
||||
case tok::verbatim_block_begin:
|
||||
|
|
|
@ -273,40 +273,38 @@ VerbatimLineComment *Sema::actOnVerbatimLine(SourceLocation LocBegin,
|
|||
Text);
|
||||
}
|
||||
|
||||
HTMLOpenTagComment *Sema::actOnHTMLOpenTagStart(SourceLocation LocBegin,
|
||||
StringRef TagName) {
|
||||
HTMLOpenTagComment *HOT =
|
||||
new (Allocator) HTMLOpenTagComment(LocBegin, TagName);
|
||||
return HOT;
|
||||
HTMLStartTagComment *Sema::actOnHTMLStartTagStart(SourceLocation LocBegin,
|
||||
StringRef TagName) {
|
||||
return new (Allocator) HTMLStartTagComment(LocBegin, TagName);
|
||||
}
|
||||
|
||||
HTMLOpenTagComment *Sema::actOnHTMLOpenTagFinish(
|
||||
HTMLOpenTagComment *Tag,
|
||||
ArrayRef<HTMLOpenTagComment::Attribute> Attrs,
|
||||
HTMLStartTagComment *Sema::actOnHTMLStartTagFinish(
|
||||
HTMLStartTagComment *Tag,
|
||||
ArrayRef<HTMLStartTagComment::Attribute> Attrs,
|
||||
SourceLocation GreaterLoc,
|
||||
bool IsSelfClosing) {
|
||||
Tag->setAttrs(Attrs);
|
||||
Tag->setGreaterLoc(GreaterLoc);
|
||||
if (IsSelfClosing)
|
||||
Tag->setSelfClosing();
|
||||
else if (!isHTMLCloseTagForbidden(Tag->getTagName()))
|
||||
else if (!isHTMLEndTagForbidden(Tag->getTagName()))
|
||||
HTMLOpenTags.push_back(Tag);
|
||||
return Tag;
|
||||
}
|
||||
|
||||
HTMLCloseTagComment *Sema::actOnHTMLCloseTag(SourceLocation LocBegin,
|
||||
SourceLocation LocEnd,
|
||||
StringRef TagName) {
|
||||
HTMLCloseTagComment *HCT =
|
||||
new (Allocator) HTMLCloseTagComment(LocBegin, LocEnd, TagName);
|
||||
if (isHTMLCloseTagForbidden(TagName)) {
|
||||
Diag(HCT->getLocation(), diag::warn_doc_html_close_forbidden)
|
||||
<< TagName << HCT->getSourceRange();
|
||||
return HCT;
|
||||
HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin,
|
||||
SourceLocation LocEnd,
|
||||
StringRef TagName) {
|
||||
HTMLEndTagComment *HET =
|
||||
new (Allocator) HTMLEndTagComment(LocBegin, LocEnd, TagName);
|
||||
if (isHTMLEndTagForbidden(TagName)) {
|
||||
Diag(HET->getLocation(), diag::warn_doc_html_end_forbidden)
|
||||
<< TagName << HET->getSourceRange();
|
||||
return HET;
|
||||
}
|
||||
|
||||
bool FoundOpen = false;
|
||||
for (SmallVectorImpl<HTMLOpenTagComment *>::const_reverse_iterator
|
||||
for (SmallVectorImpl<HTMLStartTagComment *>::const_reverse_iterator
|
||||
I = HTMLOpenTags.rbegin(), E = HTMLOpenTags.rend();
|
||||
I != E; ++I) {
|
||||
if ((*I)->getTagName() == TagName) {
|
||||
|
@ -315,44 +313,44 @@ HTMLCloseTagComment *Sema::actOnHTMLCloseTag(SourceLocation LocBegin,
|
|||
}
|
||||
}
|
||||
if (!FoundOpen) {
|
||||
Diag(HCT->getLocation(), diag::warn_doc_html_close_unbalanced)
|
||||
<< HCT->getSourceRange();
|
||||
return HCT;
|
||||
Diag(HET->getLocation(), diag::warn_doc_html_end_unbalanced)
|
||||
<< HET->getSourceRange();
|
||||
return HET;
|
||||
}
|
||||
|
||||
while (!HTMLOpenTags.empty()) {
|
||||
const HTMLOpenTagComment *HOT = HTMLOpenTags.back();
|
||||
const HTMLStartTagComment *HST = HTMLOpenTags.back();
|
||||
HTMLOpenTags.pop_back();
|
||||
StringRef LastNotClosedTagName = HOT->getTagName();
|
||||
StringRef LastNotClosedTagName = HST->getTagName();
|
||||
if (LastNotClosedTagName == TagName)
|
||||
break;
|
||||
|
||||
if (isHTMLCloseTagOptional(LastNotClosedTagName))
|
||||
if (isHTMLEndTagOptional(LastNotClosedTagName))
|
||||
continue;
|
||||
|
||||
bool OpenLineInvalid;
|
||||
const unsigned OpenLine = SourceMgr.getPresumedLineNumber(
|
||||
HOT->getLocation(),
|
||||
HST->getLocation(),
|
||||
&OpenLineInvalid);
|
||||
bool CloseLineInvalid;
|
||||
const unsigned CloseLine = SourceMgr.getPresumedLineNumber(
|
||||
HCT->getLocation(),
|
||||
HET->getLocation(),
|
||||
&CloseLineInvalid);
|
||||
|
||||
if (OpenLineInvalid || CloseLineInvalid || OpenLine == CloseLine)
|
||||
Diag(HOT->getLocation(), diag::warn_doc_html_open_close_mismatch)
|
||||
<< HOT->getTagName() << HCT->getTagName()
|
||||
<< HOT->getSourceRange() << HCT->getSourceRange();
|
||||
Diag(HST->getLocation(), diag::warn_doc_html_start_end_mismatch)
|
||||
<< HST->getTagName() << HET->getTagName()
|
||||
<< HST->getSourceRange() << HET->getSourceRange();
|
||||
else {
|
||||
Diag(HOT->getLocation(), diag::warn_doc_html_open_close_mismatch)
|
||||
<< HOT->getTagName() << HCT->getTagName()
|
||||
<< HOT->getSourceRange();
|
||||
Diag(HCT->getLocation(), diag::note_doc_html_closing_tag)
|
||||
<< HCT->getSourceRange();
|
||||
Diag(HST->getLocation(), diag::warn_doc_html_start_end_mismatch)
|
||||
<< HST->getTagName() << HET->getTagName()
|
||||
<< HST->getSourceRange();
|
||||
Diag(HET->getLocation(), diag::note_doc_html_end_tag)
|
||||
<< HET->getSourceRange();
|
||||
}
|
||||
}
|
||||
|
||||
return HCT;
|
||||
return HET;
|
||||
}
|
||||
|
||||
FullComment *Sema::actOnFullComment(
|
||||
|
@ -454,7 +452,7 @@ bool Sema::isInlineCommand(StringRef Name) {
|
|||
.Default(false);
|
||||
}
|
||||
|
||||
bool Sema::isHTMLCloseTagOptional(StringRef Name) {
|
||||
bool Sema::isHTMLEndTagOptional(StringRef Name) {
|
||||
return llvm::StringSwitch<bool>(Name)
|
||||
.Case("p", true)
|
||||
.Case("li", true)
|
||||
|
@ -470,7 +468,7 @@ bool Sema::isHTMLCloseTagOptional(StringRef Name) {
|
|||
.Default(false);
|
||||
}
|
||||
|
||||
bool Sema::isHTMLCloseTagForbidden(StringRef Name) {
|
||||
bool Sema::isHTMLEndTagForbidden(StringRef Name) {
|
||||
return llvm::StringSwitch<bool>(Name)
|
||||
.Case("br", true)
|
||||
.Case("hr", true)
|
||||
|
|
|
@ -9,43 +9,43 @@ int test_html1(int);
|
|||
int test_html2(int);
|
||||
|
||||
// expected-warning@+2 {{expected quoted string after equals sign}}
|
||||
// expected-warning@+1 {{HTML opening tag prematurely ended, expected attribute name or '>'}}
|
||||
// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}}
|
||||
/// <a href= blah
|
||||
int test_html3(int);
|
||||
|
||||
// expected-warning@+1 {{HTML opening tag prematurely ended, expected attribute name or '>'}}
|
||||
// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}}
|
||||
/// <a =>
|
||||
int test_html4(int);
|
||||
|
||||
// expected-warning@+1 {{HTML opening tag prematurely ended, expected attribute name or '>'}}
|
||||
// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}}
|
||||
/// <a "aaa">
|
||||
int test_html5(int);
|
||||
|
||||
// expected-warning@+1 {{HTML opening tag prematurely ended, expected attribute name or '>'}}
|
||||
// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}}
|
||||
/// <a a="b" =>
|
||||
int test_html6(int);
|
||||
|
||||
// expected-warning@+1 {{HTML opening tag prematurely ended, expected attribute name or '>'}}
|
||||
// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}}
|
||||
/// <a a="b" "aaa">
|
||||
int test_html7(int);
|
||||
|
||||
// expected-warning@+1 {{HTML opening tag prematurely ended, expected attribute name or '>'}}
|
||||
// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}}
|
||||
/// <a a="b" =
|
||||
int test_html8(int);
|
||||
|
||||
// expected-warning@+2 {{HTML opening tag prematurely ended, expected attribute name or '>'}} expected-note@+1 {{HTML tag started here}}
|
||||
// expected-warning@+2 {{HTML start tag prematurely ended, expected attribute name or '>'}} expected-note@+1 {{HTML tag started here}}
|
||||
/** Aaa bbb<ccc ddd eee
|
||||
* fff ggg.
|
||||
*/
|
||||
int test_html9(int);
|
||||
|
||||
// expected-warning@+1 {{HTML opening tag prematurely ended, expected attribute name or '>'}}
|
||||
// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}}
|
||||
/** Aaa bbb<ccc ddd eee 42%
|
||||
* fff ggg.
|
||||
*/
|
||||
int test_html10(int);
|
||||
|
||||
// expected-warning@+1 {{HTML closing tag 'br' is forbidden}}
|
||||
// expected-warning@+1 {{HTML end tag 'br' is forbidden}}
|
||||
/// <br></br>
|
||||
int test_html11(int);
|
||||
|
||||
|
@ -63,17 +63,17 @@ int test_html_nesting3(int);
|
|||
/// Bbb</p>
|
||||
int test_html_nesting4(int);
|
||||
|
||||
// expected-warning@+1 {{HTML closing tag does not match any opening tag}}
|
||||
// expected-warning@+1 {{HTML end tag does not match any start tag}}
|
||||
/// <b><i>Meow</a>
|
||||
int test_html_nesting5(int);
|
||||
|
||||
// expected-warning@+2 {{HTML opening tag 'i' closed by 'b'}}
|
||||
// expected-warning@+1 {{HTML closing tag does not match any opening tag}}
|
||||
// expected-warning@+2 {{HTML start tag 'i' closed by 'b'}}
|
||||
// expected-warning@+1 {{HTML end tag does not match any start tag}}
|
||||
/// <b><i>Meow</b></b>
|
||||
int test_html_nesting6(int);
|
||||
|
||||
// expected-warning@+2 {{HTML opening tag 'i' closed by 'b'}}
|
||||
// expected-warning@+1 {{HTML closing tag does not match any opening tag}}
|
||||
// expected-warning@+2 {{HTML start tag 'i' closed by 'b'}}
|
||||
// expected-warning@+1 {{HTML end tag does not match any start tag}}
|
||||
/// <b><i>Meow</b></i>
|
||||
int test_html_nesting7(int);
|
||||
|
||||
|
|
|
@ -858,13 +858,13 @@ TEST_F(CommentLexerTest, HTML4) {
|
|||
|
||||
ASSERT_EQ(3U, Toks.size());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_open, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagOpenName());
|
||||
ASSERT_EQ(tok::html_start_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagStartName());
|
||||
|
||||
ASSERT_EQ(tok::newline, Toks[2].getKind());
|
||||
ASSERT_EQ(tok::newline, Toks[2].getKind());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -878,16 +878,16 @@ TEST_F(CommentLexerTest, HTML5) {
|
|||
|
||||
ASSERT_EQ(4U, Toks.size());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_open, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagOpenName());
|
||||
ASSERT_EQ(tok::html_start_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagStartName());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("42"), Toks[2].getText());
|
||||
ASSERT_EQ(tok::text, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("42"), Toks[2].getText());
|
||||
|
||||
ASSERT_EQ(tok::newline, Toks[3].getKind());
|
||||
ASSERT_EQ(tok::newline, Toks[3].getKind());
|
||||
}
|
||||
|
||||
TEST_F(CommentLexerTest, HTML6) {
|
||||
|
@ -899,18 +899,18 @@ TEST_F(CommentLexerTest, HTML6) {
|
|||
|
||||
ASSERT_EQ(5U, Toks.size());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_open, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagOpenName());
|
||||
ASSERT_EQ(tok::html_start_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagStartName());
|
||||
|
||||
ASSERT_EQ(tok::html_greater, Toks[2].getKind());
|
||||
ASSERT_EQ(tok::html_greater, Toks[2].getKind());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[3].getKind());
|
||||
ASSERT_EQ(StringRef(" Meow"), Toks[3].getText());
|
||||
ASSERT_EQ(tok::text, Toks[3].getKind());
|
||||
ASSERT_EQ(StringRef(" Meow"), Toks[3].getText());
|
||||
|
||||
ASSERT_EQ(tok::newline, Toks[4].getKind());
|
||||
ASSERT_EQ(tok::newline, Toks[4].getKind());
|
||||
}
|
||||
|
||||
TEST_F(CommentLexerTest, HTML7) {
|
||||
|
@ -922,16 +922,16 @@ TEST_F(CommentLexerTest, HTML7) {
|
|||
|
||||
ASSERT_EQ(4U, Toks.size());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_open, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagOpenName());
|
||||
ASSERT_EQ(tok::html_start_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagStartName());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("="), Toks[2].getText());
|
||||
ASSERT_EQ(tok::text, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("="), Toks[2].getText());
|
||||
|
||||
ASSERT_EQ(tok::newline, Toks[3].getKind());
|
||||
ASSERT_EQ(tok::newline, Toks[3].getKind());
|
||||
}
|
||||
|
||||
TEST_F(CommentLexerTest, HTML8) {
|
||||
|
@ -943,23 +943,23 @@ TEST_F(CommentLexerTest, HTML8) {
|
|||
|
||||
ASSERT_EQ(7U, Toks.size());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_open, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagOpenName());
|
||||
ASSERT_EQ(tok::html_start_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagStartName());
|
||||
|
||||
ASSERT_EQ(tok::html_ident, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("attr"), Toks[2].getHTMLIdent());
|
||||
ASSERT_EQ(tok::html_ident, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("attr"), Toks[2].getHTMLIdent());
|
||||
|
||||
ASSERT_EQ(tok::html_equals, Toks[3].getKind());
|
||||
ASSERT_EQ(tok::html_equals, Toks[3].getKind());
|
||||
|
||||
ASSERT_EQ(tok::html_greater, Toks[4].getKind());
|
||||
ASSERT_EQ(tok::html_greater, Toks[4].getKind());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[5].getKind());
|
||||
ASSERT_EQ(StringRef(" Meow"), Toks[5].getText());
|
||||
ASSERT_EQ(tok::text, Toks[5].getKind());
|
||||
ASSERT_EQ(StringRef(" Meow"), Toks[5].getText());
|
||||
|
||||
ASSERT_EQ(tok::newline, Toks[6].getKind());
|
||||
ASSERT_EQ(tok::newline, Toks[6].getKind());
|
||||
}
|
||||
|
||||
TEST_F(CommentLexerTest, HTML9) {
|
||||
|
@ -975,16 +975,16 @@ TEST_F(CommentLexerTest, HTML9) {
|
|||
|
||||
ASSERT_EQ(4U, Toks.size());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_open, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagOpenName());
|
||||
ASSERT_EQ(tok::html_start_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagStartName());
|
||||
|
||||
ASSERT_EQ(tok::html_ident, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("attr"), Toks[2].getHTMLIdent());
|
||||
ASSERT_EQ(tok::html_ident, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("attr"), Toks[2].getHTMLIdent());
|
||||
|
||||
ASSERT_EQ(tok::newline, Toks[3].getKind());
|
||||
ASSERT_EQ(tok::newline, Toks[3].getKind());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1001,18 +1001,18 @@ TEST_F(CommentLexerTest, HTML10) {
|
|||
|
||||
ASSERT_EQ(5U, Toks.size());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_open, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagOpenName());
|
||||
ASSERT_EQ(tok::html_start_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagStartName());
|
||||
|
||||
ASSERT_EQ(tok::html_ident, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("attr"), Toks[2].getHTMLIdent());
|
||||
ASSERT_EQ(tok::html_ident, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("attr"), Toks[2].getHTMLIdent());
|
||||
|
||||
ASSERT_EQ(tok::html_equals, Toks[3].getKind());
|
||||
ASSERT_EQ(tok::html_equals, Toks[3].getKind());
|
||||
|
||||
ASSERT_EQ(tok::newline, Toks[4].getKind());
|
||||
ASSERT_EQ(tok::newline, Toks[4].getKind());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1034,8 +1034,8 @@ TEST_F(CommentLexerTest, HTML11) {
|
|||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_open, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagOpenName());
|
||||
ASSERT_EQ(tok::html_start_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagStartName());
|
||||
|
||||
ASSERT_EQ(tok::html_ident, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("attr"), Toks[2].getHTMLIdent());
|
||||
|
@ -1058,21 +1058,21 @@ TEST_F(CommentLexerTest, HTML12) {
|
|||
|
||||
ASSERT_EQ(6U, Toks.size());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_open, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagOpenName());
|
||||
ASSERT_EQ(tok::html_start_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagStartName());
|
||||
|
||||
ASSERT_EQ(tok::html_ident, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("attr"), Toks[2].getHTMLIdent());
|
||||
ASSERT_EQ(tok::html_ident, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("attr"), Toks[2].getHTMLIdent());
|
||||
|
||||
ASSERT_EQ(tok::html_equals, Toks[3].getKind());
|
||||
ASSERT_EQ(tok::html_equals, Toks[3].getKind());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[4].getKind());
|
||||
ASSERT_EQ(StringRef("@"), Toks[4].getText());
|
||||
ASSERT_EQ(tok::text, Toks[4].getKind());
|
||||
ASSERT_EQ(StringRef("@"), Toks[4].getText());
|
||||
|
||||
ASSERT_EQ(tok::newline, Toks[5].getKind());
|
||||
ASSERT_EQ(tok::newline, Toks[5].getKind());
|
||||
}
|
||||
|
||||
TEST_F(CommentLexerTest, HTML13) {
|
||||
|
@ -1093,8 +1093,8 @@ TEST_F(CommentLexerTest, HTML13) {
|
|||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_open, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagOpenName());
|
||||
ASSERT_EQ(tok::html_start_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagStartName());
|
||||
|
||||
ASSERT_EQ(tok::html_ident, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("attr"), Toks[2].getHTMLIdent());
|
||||
|
@ -1124,8 +1124,8 @@ TEST_F(CommentLexerTest, HTML14) {
|
|||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_open, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagOpenName());
|
||||
ASSERT_EQ(tok::html_start_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagStartName());
|
||||
|
||||
ASSERT_EQ(tok::html_ident, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("attr"), Toks[2].getHTMLIdent());
|
||||
|
@ -1157,8 +1157,8 @@ TEST_F(CommentLexerTest, HTML15) {
|
|||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_open, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagOpenName());
|
||||
ASSERT_EQ(tok::html_start_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagStartName());
|
||||
|
||||
ASSERT_EQ(tok::html_slash_greater, Toks[2].getKind());
|
||||
|
||||
|
@ -1182,8 +1182,8 @@ TEST_F(CommentLexerTest, HTML16) {
|
|||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_open, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagOpenName());
|
||||
ASSERT_EQ(tok::html_start_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagStartName());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("/"), Toks[2].getText());
|
||||
|
@ -1204,13 +1204,13 @@ TEST_F(CommentLexerTest, HTML17) {
|
|||
|
||||
ASSERT_EQ(3U, Toks.size());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_close, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef(""), Toks[1].getHTMLTagCloseName());
|
||||
ASSERT_EQ(tok::html_end_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef(""), Toks[1].getHTMLTagEndName());
|
||||
|
||||
ASSERT_EQ(tok::newline, Toks[2].getKind());
|
||||
ASSERT_EQ(tok::newline, Toks[2].getKind());
|
||||
}
|
||||
|
||||
TEST_F(CommentLexerTest, HTML18) {
|
||||
|
@ -1222,16 +1222,16 @@ TEST_F(CommentLexerTest, HTML18) {
|
|||
|
||||
ASSERT_EQ(4U, Toks.size());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_close, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef(""), Toks[1].getHTMLTagCloseName());
|
||||
ASSERT_EQ(tok::html_end_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef(""), Toks[1].getHTMLTagEndName());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("@"), Toks[2].getText());
|
||||
ASSERT_EQ(tok::text, Toks[2].getKind());
|
||||
ASSERT_EQ(StringRef("@"), Toks[2].getText());
|
||||
|
||||
ASSERT_EQ(tok::newline, Toks[3].getKind());
|
||||
ASSERT_EQ(tok::newline, Toks[3].getKind());
|
||||
}
|
||||
|
||||
TEST_F(CommentLexerTest, HTML19) {
|
||||
|
@ -1243,13 +1243,13 @@ TEST_F(CommentLexerTest, HTML19) {
|
|||
|
||||
ASSERT_EQ(3U, Toks.size());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_close, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagCloseName());
|
||||
ASSERT_EQ(tok::html_end_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagEndName());
|
||||
|
||||
ASSERT_EQ(tok::newline, Toks[2].getKind());
|
||||
ASSERT_EQ(tok::newline, Toks[2].getKind());
|
||||
}
|
||||
|
||||
TEST_F(CommentLexerTest, HTML20) {
|
||||
|
@ -1266,15 +1266,15 @@ TEST_F(CommentLexerTest, HTML20) {
|
|||
|
||||
ASSERT_EQ(4U, Toks.size());
|
||||
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
ASSERT_EQ(tok::text, Toks[0].getKind());
|
||||
ASSERT_EQ(StringRef(" "), Toks[0].getText());
|
||||
|
||||
ASSERT_EQ(tok::html_tag_close, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagCloseName());
|
||||
ASSERT_EQ(tok::html_end_tag, Toks[1].getKind());
|
||||
ASSERT_EQ(StringRef("tag"), Toks[1].getHTMLTagEndName());
|
||||
|
||||
ASSERT_EQ(tok::html_greater, Toks[2].getKind());
|
||||
ASSERT_EQ(tok::html_greater, Toks[2].getKind());
|
||||
|
||||
ASSERT_EQ(tok::newline, Toks[3].getKind());
|
||||
ASSERT_EQ(tok::newline, Toks[3].getKind());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -275,18 +275,18 @@ struct NoArgs {};
|
|||
return ::testing::AssertionSuccess();
|
||||
}
|
||||
|
||||
::testing::AssertionResult HasHTMLOpenTagAt(const Comment *C,
|
||||
size_t Idx,
|
||||
HTMLOpenTagComment *&HOT,
|
||||
StringRef TagName) {
|
||||
::testing::AssertionResult AR = GetChildAt(C, Idx, HOT);
|
||||
::testing::AssertionResult HasHTMLStartTagAt(const Comment *C,
|
||||
size_t Idx,
|
||||
HTMLStartTagComment *&HST,
|
||||
StringRef TagName) {
|
||||
::testing::AssertionResult AR = GetChildAt(C, Idx, HST);
|
||||
if (!AR)
|
||||
return AR;
|
||||
|
||||
StringRef ActualTagName = HOT->getTagName();
|
||||
StringRef ActualTagName = HST->getTagName();
|
||||
if (ActualTagName != TagName)
|
||||
return ::testing::AssertionFailure()
|
||||
<< "HTMLOpenTagComment has name \"" << ActualTagName.str() << "\", "
|
||||
<< "HTMLStartTagComment has name \"" << ActualTagName.str() << "\", "
|
||||
"expected \"" << TagName.str() << "\"";
|
||||
|
||||
return ::testing::AssertionSuccess();
|
||||
|
@ -294,18 +294,18 @@ struct NoArgs {};
|
|||
|
||||
struct SelfClosing {};
|
||||
|
||||
::testing::AssertionResult HasHTMLOpenTagAt(const Comment *C,
|
||||
size_t Idx,
|
||||
HTMLOpenTagComment *&HOT,
|
||||
StringRef TagName,
|
||||
SelfClosing) {
|
||||
::testing::AssertionResult AR = HasHTMLOpenTagAt(C, Idx, HOT, TagName);
|
||||
::testing::AssertionResult HasHTMLStartTagAt(const Comment *C,
|
||||
size_t Idx,
|
||||
HTMLStartTagComment *&HST,
|
||||
StringRef TagName,
|
||||
SelfClosing) {
|
||||
::testing::AssertionResult AR = HasHTMLStartTagAt(C, Idx, HST, TagName);
|
||||
if (!AR)
|
||||
return AR;
|
||||
|
||||
if (!HOT->isSelfClosing())
|
||||
if (!HST->isSelfClosing())
|
||||
return ::testing::AssertionFailure()
|
||||
<< "HTMLOpenTagComment is not self-closing";
|
||||
<< "HTMLStartTagComment is not self-closing";
|
||||
|
||||
return ::testing::AssertionSuccess();
|
||||
}
|
||||
|
@ -313,73 +313,73 @@ struct SelfClosing {};
|
|||
|
||||
struct NoAttrs {};
|
||||
|
||||
::testing::AssertionResult HasHTMLOpenTagAt(const Comment *C,
|
||||
size_t Idx,
|
||||
HTMLOpenTagComment *&HOT,
|
||||
StringRef TagName,
|
||||
NoAttrs) {
|
||||
::testing::AssertionResult AR = HasHTMLOpenTagAt(C, Idx, HOT, TagName);
|
||||
::testing::AssertionResult HasHTMLStartTagAt(const Comment *C,
|
||||
size_t Idx,
|
||||
HTMLStartTagComment *&HST,
|
||||
StringRef TagName,
|
||||
NoAttrs) {
|
||||
::testing::AssertionResult AR = HasHTMLStartTagAt(C, Idx, HST, TagName);
|
||||
if (!AR)
|
||||
return AR;
|
||||
|
||||
if (HOT->isSelfClosing())
|
||||
if (HST->isSelfClosing())
|
||||
return ::testing::AssertionFailure()
|
||||
<< "HTMLOpenTagComment is self-closing";
|
||||
<< "HTMLStartTagComment is self-closing";
|
||||
|
||||
if (HOT->getAttrCount() != 0)
|
||||
if (HST->getAttrCount() != 0)
|
||||
return ::testing::AssertionFailure()
|
||||
<< "HTMLOpenTagComment has " << HOT->getAttrCount() << " attr(s), "
|
||||
<< "HTMLStartTagComment has " << HST->getAttrCount() << " attr(s), "
|
||||
"expected 0";
|
||||
|
||||
return ::testing::AssertionSuccess();
|
||||
}
|
||||
|
||||
::testing::AssertionResult HasHTMLOpenTagAt(const Comment *C,
|
||||
size_t Idx,
|
||||
HTMLOpenTagComment *&HOT,
|
||||
StringRef TagName,
|
||||
StringRef AttrName,
|
||||
StringRef AttrValue) {
|
||||
::testing::AssertionResult AR = HasHTMLOpenTagAt(C, Idx, HOT, TagName);
|
||||
::testing::AssertionResult HasHTMLStartTagAt(const Comment *C,
|
||||
size_t Idx,
|
||||
HTMLStartTagComment *&HST,
|
||||
StringRef TagName,
|
||||
StringRef AttrName,
|
||||
StringRef AttrValue) {
|
||||
::testing::AssertionResult AR = HasHTMLStartTagAt(C, Idx, HST, TagName);
|
||||
if (!AR)
|
||||
return AR;
|
||||
|
||||
if (HOT->isSelfClosing())
|
||||
if (HST->isSelfClosing())
|
||||
return ::testing::AssertionFailure()
|
||||
<< "HTMLOpenTagComment is self-closing";
|
||||
<< "HTMLStartTagComment is self-closing";
|
||||
|
||||
if (HOT->getAttrCount() != 1)
|
||||
if (HST->getAttrCount() != 1)
|
||||
return ::testing::AssertionFailure()
|
||||
<< "HTMLOpenTagComment has " << HOT->getAttrCount() << " attr(s), "
|
||||
<< "HTMLStartTagComment has " << HST->getAttrCount() << " attr(s), "
|
||||
"expected 1";
|
||||
|
||||
StringRef ActualName = HOT->getAttr(0).Name;
|
||||
StringRef ActualName = HST->getAttr(0).Name;
|
||||
if (ActualName != AttrName)
|
||||
return ::testing::AssertionFailure()
|
||||
<< "HTMLOpenTagComment has attr \"" << ActualName.str() << "\", "
|
||||
<< "HTMLStartTagComment has attr \"" << ActualName.str() << "\", "
|
||||
"expected \"" << AttrName.str() << "\"";
|
||||
|
||||
StringRef ActualValue = HOT->getAttr(0).Value;
|
||||
StringRef ActualValue = HST->getAttr(0).Value;
|
||||
if (ActualValue != AttrValue)
|
||||
return ::testing::AssertionFailure()
|
||||
<< "HTMLOpenTagComment has attr value \"" << ActualValue.str() << "\", "
|
||||
<< "HTMLStartTagComment has attr value \"" << ActualValue.str() << "\", "
|
||||
"expected \"" << AttrValue.str() << "\"";
|
||||
|
||||
return ::testing::AssertionSuccess();
|
||||
}
|
||||
|
||||
::testing::AssertionResult HasHTMLCloseTagAt(const Comment *C,
|
||||
size_t Idx,
|
||||
HTMLCloseTagComment *&HCT,
|
||||
StringRef TagName) {
|
||||
::testing::AssertionResult AR = GetChildAt(C, Idx, HCT);
|
||||
::testing::AssertionResult HasHTMLEndTagAt(const Comment *C,
|
||||
size_t Idx,
|
||||
HTMLEndTagComment *&HET,
|
||||
StringRef TagName) {
|
||||
::testing::AssertionResult AR = GetChildAt(C, Idx, HET);
|
||||
if (!AR)
|
||||
return AR;
|
||||
|
||||
StringRef ActualTagName = HCT->getTagName();
|
||||
StringRef ActualTagName = HET->getTagName();
|
||||
if (ActualTagName != TagName)
|
||||
return ::testing::AssertionFailure()
|
||||
<< "HTMLCloseTagComment has name \"" << ActualTagName.str() << "\", "
|
||||
<< "HTMLEndTagComment has name \"" << ActualTagName.str() << "\", "
|
||||
"expected \"" << TagName.str() << "\"";
|
||||
|
||||
return ::testing::AssertionSuccess();
|
||||
|
@ -852,12 +852,12 @@ TEST_F(CommentParserTest, HTML1) {
|
|||
|
||||
{
|
||||
ParagraphComment *PC;
|
||||
HTMLOpenTagComment *HOT;
|
||||
HTMLStartTagComment *HST;
|
||||
ASSERT_TRUE(GetChildAt(FC, 0, PC));
|
||||
|
||||
ASSERT_TRUE(HasChildCount(PC, 2));
|
||||
ASSERT_TRUE(HasTextAt(PC, 0, " "));
|
||||
ASSERT_TRUE(HasHTMLOpenTagAt(PC, 1, HOT, "a", NoAttrs()));
|
||||
ASSERT_TRUE(HasHTMLStartTagAt(PC, 1, HST, "a", NoAttrs()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -874,12 +874,12 @@ TEST_F(CommentParserTest, HTML2) {
|
|||
|
||||
{
|
||||
ParagraphComment *PC;
|
||||
HTMLOpenTagComment *HOT;
|
||||
HTMLStartTagComment *HST;
|
||||
ASSERT_TRUE(GetChildAt(FC, 0, PC));
|
||||
|
||||
ASSERT_TRUE(HasChildCount(PC, 2));
|
||||
ASSERT_TRUE(HasTextAt(PC, 0, " "));
|
||||
ASSERT_TRUE(HasHTMLOpenTagAt(PC, 1, HOT, "br", SelfClosing()));
|
||||
ASSERT_TRUE(HasHTMLStartTagAt(PC, 1, HST, "br", SelfClosing()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -898,12 +898,12 @@ TEST_F(CommentParserTest, HTML3) {
|
|||
|
||||
{
|
||||
ParagraphComment *PC;
|
||||
HTMLOpenTagComment *HOT;
|
||||
HTMLStartTagComment *HST;
|
||||
ASSERT_TRUE(GetChildAt(FC, 0, PC));
|
||||
|
||||
ASSERT_TRUE(HasChildCount(PC, 2));
|
||||
ASSERT_TRUE(HasTextAt(PC, 0, " "));
|
||||
ASSERT_TRUE(HasHTMLOpenTagAt(PC, 1, HOT, "a", "href", ""));
|
||||
ASSERT_TRUE(HasHTMLStartTagAt(PC, 1, HST, "a", "href", ""));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -920,12 +920,12 @@ TEST_F(CommentParserTest, HTML4) {
|
|||
|
||||
{
|
||||
ParagraphComment *PC;
|
||||
HTMLOpenTagComment *HOT;
|
||||
HTMLStartTagComment *HST;
|
||||
ASSERT_TRUE(GetChildAt(FC, 0, PC));
|
||||
|
||||
ASSERT_TRUE(HasChildCount(PC, 2));
|
||||
ASSERT_TRUE(HasTextAt(PC, 0, " "));
|
||||
ASSERT_TRUE(HasHTMLOpenTagAt(PC, 1, HOT, "a", "href", "bbb"));
|
||||
ASSERT_TRUE(HasHTMLStartTagAt(PC, 1, HST, "a", "href", "bbb"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -943,12 +943,12 @@ TEST_F(CommentParserTest, HTML5) {
|
|||
|
||||
{
|
||||
ParagraphComment *PC;
|
||||
HTMLCloseTagComment *HCT;
|
||||
HTMLEndTagComment *HET;
|
||||
ASSERT_TRUE(GetChildAt(FC, 0, PC));
|
||||
|
||||
ASSERT_TRUE(HasChildCount(PC, 2));
|
||||
ASSERT_TRUE(HasTextAt(PC, 0, " "));
|
||||
ASSERT_TRUE(HasHTMLCloseTagAt(PC, 1, HCT, "a"));
|
||||
ASSERT_TRUE(HasHTMLEndTagAt(PC, 1, HET, "a"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -965,17 +965,17 @@ TEST_F(CommentParserTest, HTML6) {
|
|||
|
||||
{
|
||||
ParagraphComment *PC;
|
||||
HTMLOpenTagComment *HOT;
|
||||
HTMLCloseTagComment *HCT;
|
||||
HTMLStartTagComment *HST;
|
||||
HTMLEndTagComment *HET;
|
||||
ASSERT_TRUE(GetChildAt(FC, 0, PC));
|
||||
|
||||
ASSERT_TRUE(HasChildCount(PC, 6));
|
||||
ASSERT_TRUE(HasTextAt(PC, 0, " "));
|
||||
ASSERT_TRUE(HasHTMLOpenTagAt(PC, 1, HOT, "pre", NoAttrs()));
|
||||
ASSERT_TRUE(HasHTMLStartTagAt(PC, 1, HST, "pre", NoAttrs()));
|
||||
ASSERT_TRUE(HasTextWithNewlineAt(PC, 2, " Aaa"));
|
||||
ASSERT_TRUE(HasTextWithNewlineAt(PC, 3, " Bbb"));
|
||||
ASSERT_TRUE(HasTextAt(PC, 4, " "));
|
||||
ASSERT_TRUE(HasHTMLCloseTagAt(PC, 5, HCT, "pre"));
|
||||
ASSERT_TRUE(HasHTMLEndTagAt(PC, 5, HET, "pre"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue