Polish books: Fix @page rules being removed

Book polishing: Fix page margins being removed if an unused font was
found during subsetting of embedded fonts.
This commit is contained in:
Kovid Goyal 2013-07-26 11:52:17 +05:30
parent 76b3c38e03
commit ed1d8a30c3

View File

@ -21,7 +21,7 @@ from calibre.customize.ui import (plugin_for_input_format,
from calibre.ebooks.chardet import xml_to_unicode from calibre.ebooks.chardet import xml_to_unicode
from calibre.ebooks.conversion.plugins.epub_input import ( from calibre.ebooks.conversion.plugins.epub_input import (
ADOBE_OBFUSCATION, IDPF_OBFUSCATION, decrypt_font) ADOBE_OBFUSCATION, IDPF_OBFUSCATION, decrypt_font)
from calibre.ebooks.conversion.preprocess import HTMLPreProcessor, CSSPreProcessor from calibre.ebooks.conversion.preprocess import HTMLPreProcessor, CSSPreProcessor as cssp
from calibre.ebooks.mobi import MobiError from calibre.ebooks.mobi import MobiError
from calibre.ebooks.mobi.reader.headers import MetadataHeader from calibre.ebooks.mobi.reader.headers import MetadataHeader
from calibre.ebooks.mobi.tweak import set_cover from calibre.ebooks.mobi.tweak import set_cover
@ -42,6 +42,11 @@ def guess_type(x):
OEB_FONTS = {guess_type('a.ttf'), guess_type('b.ttf')} OEB_FONTS = {guess_type('a.ttf'), guess_type('b.ttf')}
OPF_NAMESPACES = {'opf':OPF2_NS, 'dc':DC11_NS} OPF_NAMESPACES = {'opf':OPF2_NS, 'dc':DC11_NS}
class CSSPreProcessor(cssp):
def __call__(self, data):
return self.MS_PAT.sub(self.ms_sub, data)
class Container(object): class Container(object):
''' '''
@ -202,14 +207,11 @@ class Container(object):
return data return data
def parse_css(self, data, fname): def parse_css(self, data, fname):
''' WARNING: This modifies the CSS tripping out @page rules, comments
etc. If you wish to write back the css, you should override the
css_preprocessor with a dummy one. '''
from cssutils import CSSParser, log from cssutils import CSSParser, log
log.setLevel(logging.WARN) log.setLevel(logging.WARN)
log.raiseExceptions = False log.raiseExceptions = False
data = self.decode(data) data = self.decode(data)
data = self.css_preprocessor(data, add_namespace=False) data = self.css_preprocessor(data)
parser = CSSParser(loglevel=logging.WARNING, parser = CSSParser(loglevel=logging.WARNING,
# We dont care about @import rules # We dont care about @import rules
fetcher=lambda x: (None, None), log=_css_logger) fetcher=lambda x: (None, None), log=_css_logger)