diff --git a/jni/NativeFormats/fbreader/src/formats/css/StyleSheetParser.cpp b/jni/NativeFormats/fbreader/src/formats/css/StyleSheetParser.cpp index 8709a4837..a9e0271b9 100644 --- a/jni/NativeFormats/fbreader/src/formats/css/StyleSheetParser.cpp +++ b/jni/NativeFormats/fbreader/src/formats/css/StyleSheetParser.cpp @@ -223,7 +223,12 @@ void StyleSheetParser::processWord(const std::string &word) { { std::string stripped = word; ZLStringUtil::stripWhiteSpaces(stripped); - myMap[myAttributeName] = stripped; + std::string ¤t = myMap[myAttributeName]; + if (current.size() == 0) { + current = stripped; + } else { + current += ' ' + stripped; + } break; } } @@ -256,7 +261,7 @@ void StyleSheetMultiStyleParser::storeData(const std::string &selector, const St return; } - const std::vector ids = ZLStringUtil::split(s, ","); + const std::vector ids = ZLStringUtil::split(s, ",", true); for (std::vector::const_iterator it = ids.begin(); it != ids.end(); ++it) { std::string id = *it; ZLStringUtil::stripWhiteSpaces(id); @@ -293,7 +298,7 @@ void StyleSheetMultiStyleParser::processAtRule(const std::string &name, const St std::string path; if (it != attributes.end()) { // TODO: better split - const std::vector ids = ZLStringUtil::split(it->second, " "); + const std::vector ids = ZLStringUtil::split(it->second, " ", true); for (std::vector::const_iterator jt = ids.begin(); jt != ids.end(); ++jt) { if (ZLStringUtil::stringStartsWith(*jt, "url(") && ZLStringUtil::stringEndsWith(*jt, ")")) { diff --git a/jni/NativeFormats/fbreader/src/formats/css/StyleSheetTable.cpp b/jni/NativeFormats/fbreader/src/formats/css/StyleSheetTable.cpp index 0d940d721..087e65661 100644 --- a/jni/NativeFormats/fbreader/src/formats/css/StyleSheetTable.cpp +++ b/jni/NativeFormats/fbreader/src/formats/css/StyleSheetTable.cpp @@ -243,6 +243,37 @@ shared_ptr StyleSheetTable::createOrUpdateControl(const Attrib } } + StyleSheetTable::AttributeMap::const_iterator it = styles.find("margin"); + if (it != styles.end()) { + std::vector split = ZLStringUtil::split(it->second, " ", true); + if (split.size() > 0) { + switch (split.size()) { + case 1: + split.push_back(split[0]); + // go through + case 2: + split.push_back(split[0]); + // go through + case 3: + split.push_back(split[1]); + break; + } + } + short size; + ZLTextStyleEntry::SizeUnit unit; + if (parseLength(split[0], size, unit)) { + entry->setLength(ZLTextStyleEntry::LENGTH_SPACE_BEFORE, size, unit); + } + if (parseLength(split[1], size, unit)) { + entry->setLength(ZLTextStyleEntry::LENGTH_RIGHT_INDENT, size, unit); + } + if (parseLength(split[2], size, unit)) { + entry->setLength(ZLTextStyleEntry::LENGTH_SPACE_AFTER, size, unit); + } + if (parseLength(split[3], size, unit)) { + entry->setLength(ZLTextStyleEntry::LENGTH_LEFT_INDENT, size, unit); + } + } setLength(*entry, ZLTextStyleEntry::LENGTH_LEFT_INDENT, styles, "margin-left"); setLength(*entry, ZLTextStyleEntry::LENGTH_RIGHT_INDENT, styles, "margin-right"); setLength(*entry, ZLTextStyleEntry::LENGTH_FIRST_LINE_INDENT, styles, "text-indent");