diff options
author | Matt A. Tobin <email@mattatobin.com> | 2020-04-17 06:24:43 -0400 |
---|---|---|
committer | Matt A. Tobin <email@mattatobin.com> | 2020-04-17 06:24:43 -0400 |
commit | 61e46a6d58a58e249f1982d903780bf5bccb8f6b (patch) | |
tree | fd3de5eca4f0bdce70df9f0a9a51549dae4942d9 /parser | |
parent | 8114d58fee29120ab4a7af7bd9b5c77252ab1d86 (diff) | |
download | UXP-61e46a6d58a58e249f1982d903780bf5bccb8f6b.tar UXP-61e46a6d58a58e249f1982d903780bf5bccb8f6b.tar.gz UXP-61e46a6d58a58e249f1982d903780bf5bccb8f6b.tar.lz UXP-61e46a6d58a58e249f1982d903780bf5bccb8f6b.tar.xz UXP-61e46a6d58a58e249f1982d903780bf5bccb8f6b.zip |
Issue #1375 - Stop largely using the parser service
This is based on Bug 1395828
* Add nsHTMLElement::IsBlock()
* Rename nsHTMLTags methods
* Remove AssertParserServiceIsCorrect()
* Remove most uses of nsIParserService/nsParserService
Diffstat (limited to 'parser')
-rw-r--r-- | parser/htmlparser/moz.build | 1 | ||||
-rw-r--r-- | parser/htmlparser/nsElementTable.cpp | 17 | ||||
-rw-r--r-- | parser/htmlparser/nsElementTable.h | 1 | ||||
-rw-r--r-- | parser/htmlparser/nsHTMLTags.cpp | 20 | ||||
-rw-r--r-- | parser/htmlparser/nsHTMLTags.h | 11 | ||||
-rw-r--r-- | parser/htmlparser/nsParserService.cpp | 17 |
6 files changed, 37 insertions, 30 deletions
diff --git a/parser/htmlparser/moz.build b/parser/htmlparser/moz.build index 7e5da29a5..3a91ae142 100644 --- a/parser/htmlparser/moz.build +++ b/parser/htmlparser/moz.build @@ -15,6 +15,7 @@ XPIDL_SOURCES += [ XPIDL_MODULE = 'htmlparser' EXPORTS += [ + 'nsElementTable.h', 'nsHTMLTagList.h', 'nsHTMLTags.h', 'nsIContentSink.h', diff --git a/parser/htmlparser/nsElementTable.cpp b/parser/htmlparser/nsElementTable.cpp index 86fbdad86..52507a976 100644 --- a/parser/htmlparser/nsElementTable.cpp +++ b/parser/htmlparser/nsElementTable.cpp @@ -174,14 +174,23 @@ const nsHTMLElement gHTMLElements[] = { /*********************************************************************************************/ -bool nsHTMLElement::IsContainer(eHTMLTags aChild) +bool nsHTMLElement::IsMemberOf(int32_t aSet) const { - return !gHTMLElements[aChild].mLeaf; + return TestBits(aSet, mParentBits); } -bool nsHTMLElement::IsMemberOf(int32_t aSet) const +bool nsHTMLElement::IsContainer(eHTMLTags aId) +{ + return !gHTMLElements[aId].mLeaf; +} + +bool nsHTMLElement::IsBlock(eHTMLTags aId) { - return TestBits(aSet,mParentBits); + return gHTMLElements[aId].IsMemberOf(kBlock) || + gHTMLElements[aId].IsMemberOf(kBlockEntity) || + gHTMLElements[aId].IsMemberOf(kHeading) || + gHTMLElements[aId].IsMemberOf(kPreformatted)|| + gHTMLElements[aId].IsMemberOf(kList); } #ifdef DEBUG diff --git a/parser/htmlparser/nsElementTable.h b/parser/htmlparser/nsElementTable.h index 28d2fa532..e3479db8d 100644 --- a/parser/htmlparser/nsElementTable.h +++ b/parser/htmlparser/nsElementTable.h @@ -87,6 +87,7 @@ struct nsHTMLElement { bool mLeaf; static bool IsContainer(eHTMLTags aTag); + static bool IsBlock(eHTMLTags aTag); }; extern const nsHTMLElement gHTMLElements[]; diff --git a/parser/htmlparser/nsHTMLTags.cpp b/parser/htmlparser/nsHTMLTags.cpp index e98d2c4cd..681c37489 100644 --- a/parser/htmlparser/nsHTMLTags.cpp +++ b/parser/htmlparser/nsHTMLTags.cpp @@ -161,7 +161,7 @@ nsHTMLTags::ReleaseTable(void) // static nsHTMLTag -nsHTMLTags::LookupTag(const nsAString& aTagName) +nsHTMLTags::StringTagToId(const nsAString& aTagName) { uint32_t length = aTagName.Length(); @@ -195,7 +195,7 @@ nsHTMLTags::LookupTag(const nsAString& aTagName) buf[i] = 0; - return CaseSensitiveLookupTag(buf); + return CaseSensitiveStringTagToId(buf); } #ifdef DEBUG @@ -210,33 +210,33 @@ nsHTMLTags::TestTagTable() // Make sure we can find everything we are supposed to for (int i = 0; i < NS_HTML_TAG_MAX; ++i) { tag = sTagUnicodeTable[i]; - id = LookupTag(nsDependentString(tag)); + id = StringTagToId(nsDependentString(tag)); NS_ASSERTION(id != eHTMLTag_userdefined, "can't find tag id"); const char16_t* check = GetStringValue(id); NS_ASSERTION(0 == nsCRT::strcmp(check, tag), "can't map id back to tag"); nsAutoString uname(tag); ToUpperCase(uname); - NS_ASSERTION(id == LookupTag(uname), "wrong id"); + NS_ASSERTION(id == StringTagToId(uname), "wrong id"); - NS_ASSERTION(id == CaseSensitiveLookupTag(tag), "wrong id"); + NS_ASSERTION(id == CaseSensitiveStringTagToId(tag), "wrong id"); atom = NS_Atomize(tag); - NS_ASSERTION(id == CaseSensitiveLookupTag(atom), "wrong id"); + NS_ASSERTION(id == CaseSensitiveAtomTagToId(atom), "wrong id"); NS_ASSERTION(atom == GetAtom(id), "can't map id back to atom"); } // Make sure we don't find things that aren't there - id = LookupTag(NS_LITERAL_STRING("@")); + id = StringTagToId(NS_LITERAL_STRING("@")); NS_ASSERTION(id == eHTMLTag_userdefined, "found @"); - id = LookupTag(NS_LITERAL_STRING("zzzzz")); + id = StringTagToId(NS_LITERAL_STRING("zzzzz")); NS_ASSERTION(id == eHTMLTag_userdefined, "found zzzzz"); atom = NS_Atomize("@"); - id = CaseSensitiveLookupTag(atom); + id = CaseSensitiveAtomTagToId(atom); NS_ASSERTION(id == eHTMLTag_userdefined, "found @"); atom = NS_Atomize("zzzzz"); - id = CaseSensitiveLookupTag(atom); + id = CaseSensitiveAtomTagToId(atom); NS_ASSERTION(id == eHTMLTag_userdefined, "found zzzzz"); tag = GetStringValue((nsHTMLTag) 0); diff --git a/parser/htmlparser/nsHTMLTags.h b/parser/htmlparser/nsHTMLTags.h index 27a23b89f..07d542f08 100644 --- a/parser/htmlparser/nsHTMLTags.h +++ b/parser/htmlparser/nsHTMLTags.h @@ -46,8 +46,13 @@ public: static void ReleaseTable(void); // Functions for converting string or atom to id - static nsHTMLTag LookupTag(const nsAString& aTagName); - static nsHTMLTag CaseSensitiveLookupTag(const char16_t* aTagName) + static nsHTMLTag StringTagToId(const nsAString& aTagName); + static nsHTMLTag AtomTagToId(nsIAtom* aTagName) + { + return StringTagToId(nsDependentAtomString(aTagName)); + } + + static nsHTMLTag CaseSensitiveStringTagToId(const char16_t* aTagName) { NS_ASSERTION(gTagTable, "no lookup table, needs addref"); NS_ASSERTION(aTagName, "null tagname!"); @@ -56,7 +61,7 @@ public: return tag ? (nsHTMLTag)NS_PTR_TO_INT32(tag) : eHTMLTag_userdefined; } - static nsHTMLTag CaseSensitiveLookupTag(nsIAtom* aTagName) + static nsHTMLTag CaseSensitiveAtomTagToId(nsIAtom* aTagName) { NS_ASSERTION(gTagAtomTable, "no lookup table, needs addref"); NS_ASSERTION(aTagName, "null tagname!"); diff --git a/parser/htmlparser/nsParserService.cpp b/parser/htmlparser/nsParserService.cpp index d89badd01..ab5c20c70 100644 --- a/parser/htmlparser/nsParserService.cpp +++ b/parser/htmlparser/nsParserService.cpp @@ -25,19 +25,19 @@ NS_IMPL_ISUPPORTS(nsParserService, nsIParserService) int32_t nsParserService::HTMLAtomTagToId(nsIAtom* aAtom) const { - return nsHTMLTags::LookupTag(nsDependentAtomString(aAtom)); + return nsHTMLTags::StringTagToId(nsDependentAtomString(aAtom)); } int32_t nsParserService::HTMLCaseSensitiveAtomTagToId(nsIAtom* aAtom) const { - return nsHTMLTags::CaseSensitiveLookupTag(aAtom); + return nsHTMLTags::CaseSensitiveAtomTagToId(aAtom); } int32_t nsParserService::HTMLStringTagToId(const nsAString& aTag) const { - return nsHTMLTags::LookupTag(aTag); + return nsHTMLTags::StringTagToId(aTag); } const char16_t* @@ -84,16 +84,7 @@ nsParserService::IsContainer(int32_t aId, bool& aIsContainer) const NS_IMETHODIMP nsParserService::IsBlock(int32_t aId, bool& aIsBlock) const { - if((aId>eHTMLTag_unknown) && (aId<eHTMLTag_userdefined)) { - aIsBlock=((gHTMLElements[aId].IsMemberOf(kBlock)) || - (gHTMLElements[aId].IsMemberOf(kBlockEntity)) || - (gHTMLElements[aId].IsMemberOf(kHeading)) || - (gHTMLElements[aId].IsMemberOf(kPreformatted))|| - (gHTMLElements[aId].IsMemberOf(kList))); - } - else { - aIsBlock = false; - } + aIsBlock = nsHTMLElement::IsBlock((eHTMLTags)aId); return NS_OK; } |