1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-05 02:39:23 +02:00

fixed multiple CSS enries for same selector

This commit is contained in:
Nikolay Pultsin 2014-09-18 05:33:29 +01:00
parent 7f6266fad1
commit e8f554c4ca
3 changed files with 7 additions and 5 deletions

View file

@ -235,7 +235,7 @@ StyleSheetSingleStyleParser::StyleSheetSingleStyleParser(const std::string &path
shared_ptr<ZLTextStyleEntry> StyleSheetSingleStyleParser::parseSingleEntry(const char *text) { shared_ptr<ZLTextStyleEntry> StyleSheetSingleStyleParser::parseSingleEntry(const char *text) {
myReadState = WAITING_FOR_ATTRIBUTE; myReadState = WAITING_FOR_ATTRIBUTE;
parse(text, std::strlen(text), true); parse(text, std::strlen(text), true);
shared_ptr<ZLTextStyleEntry> control = StyleSheetTable::createControl(myMap); shared_ptr<ZLTextStyleEntry> control = StyleSheetTable::createOrUpdateControl(myMap);
reset(); reset();
return control; return control;
} }

View file

@ -31,7 +31,7 @@ bool StyleSheetTable::isEmpty() const {
void StyleSheetTable::addMap(const std::string &tag, const std::string &aClass, const AttributeMap &map) { void StyleSheetTable::addMap(const std::string &tag, const std::string &aClass, const AttributeMap &map) {
if ((!tag.empty() || !aClass.empty()) && !map.empty()) { if ((!tag.empty() || !aClass.empty()) && !map.empty()) {
const Key key(tag, aClass); const Key key(tag, aClass);
myControlMap[key] = createControl(map); myControlMap[key] = createOrUpdateControl(map, myControlMap[key]);
const std::string &pbb = value(map, "page-break-before"); const std::string &pbb = value(map, "page-break-before");
if (pbb == "always" || pbb == "left" || pbb == "right") { if (pbb == "always" || pbb == "left" || pbb == "right") {
@ -143,8 +143,10 @@ const std::string &StyleSheetTable::value(const AttributeMap &map, const std::st
return emptyString; return emptyString;
} }
shared_ptr<ZLTextStyleEntry> StyleSheetTable::createControl(const AttributeMap &styles) { shared_ptr<ZLTextStyleEntry> StyleSheetTable::createOrUpdateControl(const AttributeMap &styles, shared_ptr<ZLTextStyleEntry> entry) {
shared_ptr<ZLTextStyleEntry> entry = new ZLTextStyleEntry(ZLTextStyleEntry::STYLE_CSS_ENTRY); if (entry.isNull()) {
entry = new ZLTextStyleEntry(ZLTextStyleEntry::STYLE_CSS_ENTRY);
}
const std::string &alignment = value(styles, "text-align"); const std::string &alignment = value(styles, "text-align");
if (alignment == "justify") { if (alignment == "justify") {

View file

@ -33,7 +33,7 @@ class StyleSheetTable {
public: public:
typedef std::map<std::string,std::string> AttributeMap; typedef std::map<std::string,std::string> AttributeMap;
static shared_ptr<ZLTextStyleEntry> createControl(const AttributeMap &map); static shared_ptr<ZLTextStyleEntry> createOrUpdateControl(const AttributeMap &map, shared_ptr<ZLTextStyleEntry> entry = 0);
private: private:
void addMap(const std::string &tag, const std::string &aClass, const AttributeMap &map); void addMap(const std::string &tag, const std::string &aClass, const AttributeMap &map);