diff --git a/src/calibre/ebooks/html/input.py b/src/calibre/ebooks/html/input.py index d931eb0e98..35c0acc097 100644 --- a/src/calibre/ebooks/html/input.py +++ b/src/calibre/ebooks/html/input.py @@ -11,7 +11,7 @@ __docformat__ = 'restructuredtext en' Input plugin for HTML or OPF ebooks. ''' -import os, re, sys, uuid +import os, re, sys, uuid, tempfile from urlparse import urlparse, urlunparse from urllib import unquote from functools import partial @@ -272,6 +272,7 @@ class HTMLInput(InputFormatPlugin): def convert(self, stream, opts, file_ext, log, accelerators): + self._is_case_sensitive = None basedir = os.getcwd() self.opts = opts @@ -290,6 +291,15 @@ class HTMLInput(InputFormatPlugin): return create_oebbook(log, stream.name, opts, self, encoding=opts.input_encoding) + def is_case_sensitive(self, path): + if self._is_case_sensitive is not None: + return self._is_case_sensitive + if not path or not os.path.exists(path): + return islinux or isfreebsd + self._is_case_sensitive = os.path.exists(path.lower()) \ + and os.path.exists(path.upper()) + return self._is_case_sensitive + def create_oebbook(self, htmlpath, basedir, opts, log, mi): from calibre.ebooks.conversion.plumber import create_oebbook from calibre.ebooks.oeb.base import DirContainer, \ @@ -343,14 +353,16 @@ class HTMLInput(InputFormatPlugin): self.added_resources = {} self.log = log + self.log('Normalizing filename cases') for path, href in htmlfile_map.items(): - if not (islinux or isfreebsd): + if not self.is_case_sensitive(path): path = path.lower() self.added_resources[path] = href self.urlnormalize, self.DirContainer = urlnormalize, DirContainer self.urldefrag = urldefrag self.guess_type, self.BINARY_MIME = guess_type, BINARY_MIME + self.log('Rewriting HTML links') for f in filelist: path = f.path dpath = os.path.dirname(path) @@ -415,7 +427,7 @@ class HTMLInput(InputFormatPlugin): if os.path.isdir(link): self.log.warn(link_, 'is a link to a directory. Ignoring.') return link_ - if not (islinux or isfreebsd): + if not self.is_case_sensitive(tempfile.gettempdir()): link = link.lower() if link not in self.added_resources: bhref = os.path.basename(link)