mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-04 18:29:23 +02:00
fixed svg namespace processing
This commit is contained in:
parent
8b57df7dc9
commit
9711842566
9 changed files with 140 additions and 99 deletions
|
@ -38,6 +38,7 @@
|
|||
#include "../../bookmodel/BookModel.h"
|
||||
|
||||
std::map<std::string,XHTMLTagAction*> XHTMLReader::ourTagActions;
|
||||
std::map<shared_ptr<XHTMLReader::FullNamePredicate>,XHTMLTagAction*> XHTMLReader::ourNsTagActions;
|
||||
|
||||
XHTMLTagAction::~XHTMLTagAction() {
|
||||
}
|
||||
|
@ -96,20 +97,20 @@ public:
|
|||
class XHTMLTagImageAction : public XHTMLTagAction {
|
||||
|
||||
public:
|
||||
XHTMLTagImageAction(shared_ptr<ZLXMLReader::AttributeNamePredicate> predicate);
|
||||
XHTMLTagImageAction(shared_ptr<ZLXMLReader::NamePredicate> predicate);
|
||||
XHTMLTagImageAction(const std::string &attributeName);
|
||||
|
||||
void doAtStart(XHTMLReader &reader, const char **xmlattributes);
|
||||
void doAtEnd(XHTMLReader &reader);
|
||||
|
||||
private:
|
||||
shared_ptr<ZLXMLReader::AttributeNamePredicate> myPredicate;
|
||||
shared_ptr<ZLXMLReader::NamePredicate> myPredicate;
|
||||
};
|
||||
|
||||
class XHTMLSvgImageAttributeNamePredicate : public ZLXMLReader::NamespaceAttributeNamePredicate {
|
||||
class XHTMLSvgImageNamePredicate : public ZLXMLReader::FullNamePredicate {
|
||||
|
||||
public:
|
||||
XHTMLSvgImageAttributeNamePredicate();
|
||||
XHTMLSvgImageNamePredicate();
|
||||
bool accepts(const ZLXMLReader &reader, const char *name) const;
|
||||
|
||||
private:
|
||||
|
@ -121,12 +122,12 @@ friend class XHTMLTagSvgAction;
|
|||
class XHTMLTagSvgAction : public XHTMLTagAction {
|
||||
|
||||
public:
|
||||
XHTMLTagSvgAction(XHTMLSvgImageAttributeNamePredicate &predicate);
|
||||
XHTMLTagSvgAction(XHTMLSvgImageNamePredicate &predicate);
|
||||
void doAtStart(XHTMLReader &reader, const char **xmlattributes);
|
||||
void doAtEnd(XHTMLReader &reader);
|
||||
|
||||
private:
|
||||
XHTMLSvgImageAttributeNamePredicate &myPredicate;
|
||||
XHTMLSvgImageNamePredicate &myPredicate;
|
||||
};
|
||||
|
||||
class XHTMLTagItemAction : public XHTMLTagAction {
|
||||
|
@ -275,12 +276,12 @@ void XHTMLTagItemAction::doAtEnd(XHTMLReader &reader) {
|
|||
endParagraph(reader);
|
||||
}
|
||||
|
||||
XHTMLTagImageAction::XHTMLTagImageAction(shared_ptr<ZLXMLReader::AttributeNamePredicate> predicate) {
|
||||
XHTMLTagImageAction::XHTMLTagImageAction(shared_ptr<ZLXMLReader::NamePredicate> predicate) {
|
||||
myPredicate = predicate;
|
||||
}
|
||||
|
||||
XHTMLTagImageAction::XHTMLTagImageAction(const std::string &attributeName) {
|
||||
myPredicate = new ZLXMLReader::FixedAttributeNamePredicate(attributeName);
|
||||
myPredicate = new ZLXMLReader::SimpleNamePredicate(attributeName);
|
||||
}
|
||||
|
||||
void XHTMLTagImageAction::doAtStart(XHTMLReader &reader, const char **xmlattributes) {
|
||||
|
@ -307,7 +308,7 @@ void XHTMLTagImageAction::doAtStart(XHTMLReader &reader, const char **xmlattribu
|
|||
}
|
||||
}
|
||||
|
||||
XHTMLTagSvgAction::XHTMLTagSvgAction(XHTMLSvgImageAttributeNamePredicate &predicate) : myPredicate(predicate) {
|
||||
XHTMLTagSvgAction::XHTMLTagSvgAction(XHTMLSvgImageNamePredicate &predicate) : myPredicate(predicate) {
|
||||
}
|
||||
|
||||
void XHTMLTagSvgAction::doAtStart(XHTMLReader&, const char**) {
|
||||
|
@ -318,11 +319,11 @@ void XHTMLTagSvgAction::doAtEnd(XHTMLReader&) {
|
|||
myPredicate.myIsEnabled = false;
|
||||
}
|
||||
|
||||
XHTMLSvgImageAttributeNamePredicate::XHTMLSvgImageAttributeNamePredicate() : ZLXMLReader::NamespaceAttributeNamePredicate(ZLXMLNamespace::XLink, "href"), myIsEnabled(false) {
|
||||
XHTMLSvgImageNamePredicate::XHTMLSvgImageNamePredicate() : ZLXMLReader::FullNamePredicate(ZLXMLNamespace::XLink, "href"), myIsEnabled(false) {
|
||||
}
|
||||
|
||||
bool XHTMLSvgImageAttributeNamePredicate::accepts(const ZLXMLReader &reader, const char *name) const {
|
||||
return myIsEnabled && NamespaceAttributeNamePredicate::accepts(reader, name);
|
||||
bool XHTMLSvgImageNamePredicate::accepts(const ZLXMLReader &reader, const char *name) const {
|
||||
return myIsEnabled && FullNamePredicate::accepts(reader, name);
|
||||
}
|
||||
|
||||
void XHTMLTagImageAction::doAtEnd(XHTMLReader&) {
|
||||
|
@ -407,81 +408,104 @@ XHTMLTagAction *XHTMLReader::addAction(const std::string &tag, XHTMLTagAction *a
|
|||
return old;
|
||||
}
|
||||
|
||||
XHTMLTagAction *XHTMLReader::addAction(const std::string &ns, const std::string &name, XHTMLTagAction *action) {
|
||||
shared_ptr<FullNamePredicate> predicate = new FullNamePredicate(ns, name);
|
||||
XHTMLTagAction *old = ourNsTagActions[predicate];
|
||||
ourNsTagActions[predicate] = action;
|
||||
return old;
|
||||
}
|
||||
|
||||
XHTMLTagAction *XHTMLReader::getAction(const std::string &tag) {
|
||||
const std::string lTag = ZLUnicodeUtil::toLower(tag);
|
||||
XHTMLTagAction *action = ourTagActions[lTag];
|
||||
if (action != 0) {
|
||||
return action;
|
||||
}
|
||||
for (std::map<shared_ptr<FullNamePredicate>,XHTMLTagAction*>::const_iterator it = ourNsTagActions.begin(); it != ourNsTagActions.end(); ++it) {
|
||||
if (it->first->accepts(*this, lTag)) {
|
||||
return it->second;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void XHTMLReader::fillTagTable() {
|
||||
if (ourTagActions.empty()) {
|
||||
//addAction("html", new XHTMLTagAction());
|
||||
addAction("body", new XHTMLTagBodyAction());
|
||||
//addAction("title", new XHTMLTagAction());
|
||||
//addAction("meta", new XHTMLTagAction());
|
||||
//addAction("script", new XHTMLTagAction());
|
||||
//addAction("html", new XHTMLTagAction());
|
||||
addAction("body", new XHTMLTagBodyAction());
|
||||
//addAction("title", new XHTMLTagAction());
|
||||
//addAction("meta", new XHTMLTagAction());
|
||||
//addAction("script", new XHTMLTagAction());
|
||||
|
||||
//addAction("font", new XHTMLTagAction());
|
||||
addAction("style", new XHTMLTagStyleAction());
|
||||
//addAction("font", new XHTMLTagAction());
|
||||
addAction("style", new XHTMLTagStyleAction());
|
||||
|
||||
addAction("p", new XHTMLTagParagraphAction());
|
||||
addAction("h1", new XHTMLTagParagraphWithControlAction(H1));
|
||||
addAction("h2", new XHTMLTagParagraphWithControlAction(H2));
|
||||
addAction("h3", new XHTMLTagParagraphWithControlAction(H3));
|
||||
addAction("h4", new XHTMLTagParagraphWithControlAction(H4));
|
||||
addAction("h5", new XHTMLTagParagraphWithControlAction(H5));
|
||||
addAction("h6", new XHTMLTagParagraphWithControlAction(H6));
|
||||
addAction("p", new XHTMLTagParagraphAction());
|
||||
addAction("h1", new XHTMLTagParagraphWithControlAction(H1));
|
||||
addAction("h2", new XHTMLTagParagraphWithControlAction(H2));
|
||||
addAction("h3", new XHTMLTagParagraphWithControlAction(H3));
|
||||
addAction("h4", new XHTMLTagParagraphWithControlAction(H4));
|
||||
addAction("h5", new XHTMLTagParagraphWithControlAction(H5));
|
||||
addAction("h6", new XHTMLTagParagraphWithControlAction(H6));
|
||||
|
||||
//addAction("ol", new XHTMLTagAction());
|
||||
//addAction("ul", new XHTMLTagAction());
|
||||
//addAction("dl", new XHTMLTagAction());
|
||||
addAction("li", new XHTMLTagItemAction());
|
||||
//addAction("ol", new XHTMLTagAction());
|
||||
//addAction("ul", new XHTMLTagAction());
|
||||
//addAction("dl", new XHTMLTagAction());
|
||||
addAction("li", new XHTMLTagItemAction());
|
||||
|
||||
addAction("strong", new XHTMLTagControlAction(STRONG));
|
||||
addAction("b", new XHTMLTagControlAction(BOLD));
|
||||
addAction("em", new XHTMLTagControlAction(EMPHASIS));
|
||||
addAction("i", new XHTMLTagControlAction(ITALIC));
|
||||
addAction("code", new XHTMLTagControlAction(CODE));
|
||||
addAction("tt", new XHTMLTagControlAction(CODE));
|
||||
addAction("kbd", new XHTMLTagControlAction(CODE));
|
||||
addAction("var", new XHTMLTagControlAction(CODE));
|
||||
addAction("samp", new XHTMLTagControlAction(CODE));
|
||||
addAction("cite", new XHTMLTagControlAction(CITE));
|
||||
addAction("sub", new XHTMLTagControlAction(SUB));
|
||||
addAction("sup", new XHTMLTagControlAction(SUP));
|
||||
addAction("dd", new XHTMLTagControlAction(DEFINITION_DESCRIPTION));
|
||||
addAction("dfn", new XHTMLTagControlAction(DEFINITION));
|
||||
addAction("strike", new XHTMLTagControlAction(STRIKETHROUGH));
|
||||
addAction("strong", new XHTMLTagControlAction(STRONG));
|
||||
addAction("b", new XHTMLTagControlAction(BOLD));
|
||||
addAction("em", new XHTMLTagControlAction(EMPHASIS));
|
||||
addAction("i", new XHTMLTagControlAction(ITALIC));
|
||||
addAction("code", new XHTMLTagControlAction(CODE));
|
||||
addAction("tt", new XHTMLTagControlAction(CODE));
|
||||
addAction("kbd", new XHTMLTagControlAction(CODE));
|
||||
addAction("var", new XHTMLTagControlAction(CODE));
|
||||
addAction("samp", new XHTMLTagControlAction(CODE));
|
||||
addAction("cite", new XHTMLTagControlAction(CITE));
|
||||
addAction("sub", new XHTMLTagControlAction(SUB));
|
||||
addAction("sup", new XHTMLTagControlAction(SUP));
|
||||
addAction("dd", new XHTMLTagControlAction(DEFINITION_DESCRIPTION));
|
||||
addAction("dfn", new XHTMLTagControlAction(DEFINITION));
|
||||
addAction("strike", new XHTMLTagControlAction(STRIKETHROUGH));
|
||||
|
||||
addAction("a", new XHTMLTagHyperlinkAction());
|
||||
addAction("a", new XHTMLTagHyperlinkAction());
|
||||
|
||||
addAction("img", new XHTMLTagImageAction("src"));
|
||||
addAction("object", new XHTMLTagImageAction("data"));
|
||||
XHTMLSvgImageAttributeNamePredicate *predicate = new XHTMLSvgImageAttributeNamePredicate();
|
||||
addAction("image", new XHTMLTagImageAction(predicate));
|
||||
addAction("svg", new XHTMLTagSvgAction(*predicate));
|
||||
addAction("img", new XHTMLTagImageAction("src"));
|
||||
addAction("object", new XHTMLTagImageAction("data"));
|
||||
XHTMLSvgImageNamePredicate *predicate = new XHTMLSvgImageNamePredicate();
|
||||
addAction("svg", new XHTMLTagSvgAction(*predicate));
|
||||
addAction("image", new XHTMLTagImageAction(predicate));
|
||||
addAction(ZLXMLNamespace::Svg, "svg", new XHTMLTagSvgAction(*predicate));
|
||||
addAction(ZLXMLNamespace::Svg, "image", new XHTMLTagImageAction(predicate));
|
||||
|
||||
//addAction("area", new XHTMLTagAction());
|
||||
//addAction("map", new XHTMLTagAction());
|
||||
//addAction("area", new XHTMLTagAction());
|
||||
//addAction("map", new XHTMLTagAction());
|
||||
|
||||
//addAction("base", new XHTMLTagAction());
|
||||
//addAction("blockquote", new XHTMLTagAction());
|
||||
addAction("br", new XHTMLTagRestartParagraphAction());
|
||||
//addAction("center", new XHTMLTagAction());
|
||||
//addAction("base", new XHTMLTagAction());
|
||||
//addAction("blockquote", new XHTMLTagAction());
|
||||
addAction("br", new XHTMLTagRestartParagraphAction());
|
||||
//addAction("center", new XHTMLTagAction());
|
||||
addAction("div", new XHTMLTagParagraphAction());
|
||||
addAction("dt", new XHTMLTagParagraphAction());
|
||||
//addAction("head", new XHTMLTagAction());
|
||||
//addAction("hr", new XHTMLTagAction());
|
||||
addAction("link", new XHTMLTagLinkAction());
|
||||
//addAction("param", new XHTMLTagAction());
|
||||
//addAction("q", new XHTMLTagAction());
|
||||
//addAction("s", new XHTMLTagAction());
|
||||
//addAction("head", new XHTMLTagAction());
|
||||
//addAction("hr", new XHTMLTagAction());
|
||||
addAction("link", new XHTMLTagLinkAction());
|
||||
//addAction("param", new XHTMLTagAction());
|
||||
//addAction("q", new XHTMLTagAction());
|
||||
//addAction("s", new XHTMLTagAction());
|
||||
|
||||
addAction("pre", new XHTMLTagPreAction());
|
||||
//addAction("big", new XHTMLTagAction());
|
||||
//addAction("small", new XHTMLTagAction());
|
||||
//addAction("u", new XHTMLTagAction());
|
||||
addAction("pre", new XHTMLTagPreAction());
|
||||
//addAction("big", new XHTMLTagAction());
|
||||
//addAction("small", new XHTMLTagAction());
|
||||
//addAction("u", new XHTMLTagAction());
|
||||
|
||||
//addAction("table", new XHTMLTagAction());
|
||||
addAction("td", new XHTMLTagParagraphAction());
|
||||
addAction("th", new XHTMLTagParagraphAction());
|
||||
//addAction("tr", new XHTMLTagAction());
|
||||
//addAction("caption", new XHTMLTagAction());
|
||||
//addAction("span", new XHTMLTagAction());
|
||||
//addAction("table", new XHTMLTagAction());
|
||||
addAction("td", new XHTMLTagParagraphAction());
|
||||
addAction("th", new XHTMLTagParagraphAction());
|
||||
//addAction("tr", new XHTMLTagAction());
|
||||
//addAction("caption", new XHTMLTagAction());
|
||||
//addAction("span", new XHTMLTagAction());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -542,7 +566,7 @@ void XHTMLReader::startElementHandler(const char *tag, const char **attributes)
|
|||
}
|
||||
myDoPageBreakAfterStack.push_back(myStyleSheetTable.doBreakAfter(sTag, sClass));
|
||||
|
||||
XHTMLTagAction *action = ourTagActions[sTag];
|
||||
XHTMLTagAction *action = getAction(sTag);
|
||||
if (action != 0) {
|
||||
action->doAtStart(*this, attributes);
|
||||
}
|
||||
|
@ -569,7 +593,7 @@ void XHTMLReader::endElementHandler(const char *tag) {
|
|||
myStylesToRemove = myCSSStack.back();
|
||||
myCSSStack.pop_back();
|
||||
|
||||
XHTMLTagAction *action = ourTagActions[ZLUnicodeUtil::toLower(tag)];
|
||||
XHTMLTagAction *action = getAction(tag);
|
||||
if (action != 0) {
|
||||
action->doAtEnd(*this);
|
||||
myNewParagraphInProgress = false;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue