mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Normalize URIs in a few more places where it might matter.
This commit is contained in:
parent
88fe4020f1
commit
705bf8a811
@ -23,6 +23,7 @@ from PIL import Image
|
|||||||
from calibre.ebooks.oeb.base import XML_NS, XHTML, XHTML_NS, OEB_DOCS, \
|
from calibre.ebooks.oeb.base import XML_NS, XHTML, XHTML_NS, OEB_DOCS, \
|
||||||
OEB_RASTER_IMAGES
|
OEB_RASTER_IMAGES
|
||||||
from calibre.ebooks.oeb.base import xpath, barename, namespace, prefixname
|
from calibre.ebooks.oeb.base import xpath, barename, namespace, prefixname
|
||||||
|
from calibre.ebooks.oeb.base import urlnormalize
|
||||||
from calibre.ebooks.oeb.base import Logger, OEBBook
|
from calibre.ebooks.oeb.base import Logger, OEBBook
|
||||||
from calibre.ebooks.oeb.profile import Context
|
from calibre.ebooks.oeb.profile import Context
|
||||||
from calibre.ebooks.oeb.transforms.flatcss import CSSFlattener
|
from calibre.ebooks.oeb.transforms.flatcss import CSSFlattener
|
||||||
@ -178,7 +179,7 @@ class Serializer(object):
|
|||||||
|
|
||||||
def serialize_href(self, href, base=None):
|
def serialize_href(self, href, base=None):
|
||||||
hrefs = self.oeb.manifest.hrefs
|
hrefs = self.oeb.manifest.hrefs
|
||||||
path, frag = urldefrag(href)
|
path, frag = urldefrag(urlnormalize(href))
|
||||||
if path and base:
|
if path and base:
|
||||||
path = base.abshref(path)
|
path = base.abshref(path)
|
||||||
if path and path not in hrefs:
|
if path and path not in hrefs:
|
||||||
|
@ -23,6 +23,7 @@ from PyQt4.QtGui import QApplication
|
|||||||
from calibre.ebooks.oeb.base import XHTML_NS, XHTML, SVG_NS, SVG, XLINK
|
from calibre.ebooks.oeb.base import XHTML_NS, XHTML, SVG_NS, SVG, XLINK
|
||||||
from calibre.ebooks.oeb.base import SVG_MIME, PNG_MIME, JPEG_MIME
|
from calibre.ebooks.oeb.base import SVG_MIME, PNG_MIME, JPEG_MIME
|
||||||
from calibre.ebooks.oeb.base import xml2str, xpath, namespace, barename
|
from calibre.ebooks.oeb.base import xml2str, xpath, namespace, barename
|
||||||
|
from calibre.ebooks.oeb.base import urlnormalize
|
||||||
from calibre.ebooks.oeb.stylizer import Stylizer
|
from calibre.ebooks.oeb.stylizer import Stylizer
|
||||||
|
|
||||||
IMAGE_TAGS = set([XHTML('img'), XHTML('object')])
|
IMAGE_TAGS = set([XHTML('img'), XHTML('object')])
|
||||||
@ -78,7 +79,7 @@ class SVGRasterizer(object):
|
|||||||
svg = item.data
|
svg = item.data
|
||||||
hrefs = self.oeb.manifest.hrefs
|
hrefs = self.oeb.manifest.hrefs
|
||||||
for elem in xpath(svg, '//svg:*[@xl:href]'):
|
for elem in xpath(svg, '//svg:*[@xl:href]'):
|
||||||
href = elem.attrib[XLINK('href')]
|
href = urlnormalize(elem.attrib[XLINK('href')])
|
||||||
path, frag = urldefrag(href)
|
path, frag = urldefrag(href)
|
||||||
if not path:
|
if not path:
|
||||||
continue
|
continue
|
||||||
@ -100,15 +101,15 @@ class SVGRasterizer(object):
|
|||||||
def rasterize_item(self, item, stylizer):
|
def rasterize_item(self, item, stylizer):
|
||||||
html = item.data
|
html = item.data
|
||||||
hrefs = self.oeb.manifest.hrefs
|
hrefs = self.oeb.manifest.hrefs
|
||||||
for elem in xpath(html, '//h:img'):
|
for elem in xpath(html, '//h:img[@src]'):
|
||||||
src = elem.get('src', None)
|
src = urlnormalize(elem.attrib['src'])
|
||||||
image = hrefs.get(item.abshref(src), None) if src else None
|
image = hrefs.get(item.abshref(src), None)
|
||||||
if image and image.media_type == SVG_MIME:
|
if image and image.media_type == SVG_MIME:
|
||||||
style = stylizer.style(elem)
|
style = stylizer.style(elem)
|
||||||
self.rasterize_external(elem, style, item, image)
|
self.rasterize_external(elem, style, item, image)
|
||||||
for elem in xpath(html, '//h:object[@type="%s"]' % SVG_MIME):
|
for elem in xpath(html, '//h:object[@type="%s" and @data]' % SVG_MIME):
|
||||||
data = elem.get('data', None)
|
data = urlnormalize(elem.attrib['data'])
|
||||||
image = hrefs.get(item.abshref(data), None) if data else None
|
image = hrefs.get(item.abshref(data), None)
|
||||||
if image and image.media_type == SVG_MIME:
|
if image and image.media_type == SVG_MIME:
|
||||||
style = stylizer.style(elem)
|
style = stylizer.style(elem)
|
||||||
self.rasterize_external(elem, style, item, image)
|
self.rasterize_external(elem, style, item, image)
|
||||||
|
@ -54,7 +54,7 @@ class ManifestTrimmer(object):
|
|||||||
new.add(found)
|
new.add(found)
|
||||||
elif item.media_type == CSS_MIME:
|
elif item.media_type == CSS_MIME:
|
||||||
def replacer(uri):
|
def replacer(uri):
|
||||||
absuri = item.abshref(uri)
|
absuri = item.abshref(urlnormalize(uri))
|
||||||
if absuri in oeb.manifest.hrefs:
|
if absuri in oeb.manifest.hrefs:
|
||||||
found = oeb.manifest.hrefs[href]
|
found = oeb.manifest.hrefs[href]
|
||||||
if found not in used:
|
if found not in used:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user