git.iko.soy/typeable/pandoc
on master help sign in
fetchItem: Handle image URLs beginning with '//'.
aada7b4John MacFarlane
src/Text/Pandoc/Shared.hs+9−4
@@ -91,7 +91,8 @@ import Data.Char ( toLower, isLower, isUpper, isAlpha,
91 isLetter, isDigit, isSpace )
91 isLetter, isDigit, isSpace )
92import Data.List ( find, isPrefixOf, intercalate )
92import Data.List ( find, isPrefixOf, intercalate )
93import qualified Data.Map as M
93import qualified Data.Map as M
94−import Network.URI ( escapeURIString, isURI, unEscapeString )
94+import Network.URI ( escapeURIString, isURI, nonStrictRelativeTo,
95+ unEscapeString, parseURIReference )
95import System.Directory
96import System.Directory
96import Text.Pandoc.MIME (getMimeType)
97import Text.Pandoc.MIME (getMimeType)
97import System.FilePath ( (</>), takeExtension, dropExtension )
98import System.FilePath ( (</>), takeExtension, dropExtension )
@@ -623,9 +624,13 @@ fetchItem :: Maybe String -> String
623 -> IO (Either E.SomeException (BS.ByteString, Maybe String))
624 -> IO (Either E.SomeException (BS.ByteString, Maybe String))
624fetchItem sourceURL s
625fetchItem sourceURL s
625 | isURI s = openURL s
626 | isURI s = openURL s
626− | otherwise = case sourceURL of
627+ | otherwise =
628+ case sourceURL >>= parseURIReference of
629+ Just u -> case parseURIReference s of
630+ Just s' -> openURL $ show $
631+ s' `nonStrictRelativeTo` u
627− Just u -> openURL (u ++ "/" ++ s)
632+ Nothing -> openURL $ show u ++ "/" ++ s
628− Nothing -> E.try readLocalFile
633+ Nothing -> E.try readLocalFile
629 where readLocalFile = do
634 where readLocalFile = do
630 let mime = case takeExtension s of
635 let mime = case takeExtension s of
631 ".gz" -> getMimeType $ dropExtension s
636 ".gz" -> getMimeType $ dropExtension s