@@ -38,8 +38,9 @@ import Text.Pandoc.BCP47 (renderLang)
38import Text.Pandoc.Builder as B
38import Text.Pandoc.Builder as B
39import Text.Pandoc.Class.PandocPure (PandocPure)
39import Text.Pandoc.Class.PandocPure (PandocPure)
40import Text.Pandoc.Class.PandocMonad (PandocMonad (..), getResourcePath,
40import Text.Pandoc.Class.PandocMonad (PandocMonad (..), getResourcePath,
41+ readFileFromDirs, report,
41− report, setResourcePath)
42+ setResourcePath)
42−import Text.Pandoc.Error (PandocError (PandocParsecError))
43+import Text.Pandoc.Error (PandocError (PandocParseError, PandocParsecError))
43import Text.Pandoc.Highlighting (languagesByExtension)
44import Text.Pandoc.Highlighting (languagesByExtension)
44import Text.Pandoc.ImageSize (numUnit, showFl)
45import Text.Pandoc.ImageSize (numUnit, showFl)
45import Text.Pandoc.Logging
46import Text.Pandoc.Logging
@@ -60,8 +61,6 @@ import Text.Pandoc.Readers.LaTeX.Lang (inlineLanguageCommands,
60 enquoteCommands,
61 enquoteCommands,
61 babelLangToBCP47, setDefaultLanguage)
62 babelLangToBCP47, setDefaultLanguage)
62import Text.Pandoc.Readers.LaTeX.SIunitx (siunitxCommands)
63import Text.Pandoc.Readers.LaTeX.SIunitx (siunitxCommands)
63−import Text.Pandoc.Readers.LaTeX.Include (insertIncluded,
64− readFileFromTexinputs)
65import Text.Pandoc.Readers.LaTeX.Inline (acronymCommands, refCommands,
64import Text.Pandoc.Readers.LaTeX.Inline (acronymCommands, refCommands,
66 nameCommands, charCommands,
65 nameCommands, charCommands,
67 accentCommands,
66 accentCommands,
@@ -236,10 +235,19 @@ mkImage options (T.unpack -> src) = do
236 _ -> return src
235 _ -> return src
237 return $ imageWith attr (T.pack src') "" alt
236 return $ imageWith attr (T.pack src') "" alt
238+doxspace :: PandocMonad m => LP m Inlines
240+ (space <$ lookAhead (satisfyTok startsWithLetter)) <|> return mempty
241+ where startsWithLetter (Tok _ Word t) =
243+ Just (c, _) | isLetter c -> True
245+ startsWithLetter _ = False
240removeDoubleQuotes :: Text -> Text
248removeDoubleQuotes :: Text -> Text
241removeDoubleQuotes t =
249removeDoubleQuotes t =
242− fromMaybe t $ T.stripPrefix "\"" t >>= T.stripSuffix "\""
250+ Data.Maybe.fromMaybe t $ T.stripPrefix "\"" t >>= T.stripSuffix "\""
244doubleQuote :: PandocMonad m => LP m Inlines
252doubleQuote :: PandocMonad m => LP m Inlines
245doubleQuote =
253doubleQuote =
@@ -398,8 +406,8 @@ inlineCommands = M.unions
398 link (unescapeURL $ untokenize url) "" <$> tok)
406 link (unescapeURL $ untokenize url) "" <$> tok)
399 , ("includegraphics", do options <- option [] keyvals
407 , ("includegraphics", do options <- option [] keyvals
400 src <- braced
408 src <- braced
401− mkImage options . unescapeURL .
409+ mkImage options . unescapeURL . removeDoubleQuotes $
402− removeDoubleQuotes $ untokenize src)
410+ untokenize src)
403 , ("hyperlink", hyperlink)
411 , ("hyperlink", hyperlink)
404 , ("hypertarget", hypertargetInline)
412 , ("hypertarget", hypertargetInline)
405 -- hyphenat
413 -- hyphenat
@@ -409,6 +417,8 @@ inlineCommands = M.unions
409 -- LaTeX colors
417 -- LaTeX colors
410 , ("textcolor", coloredInline "color")
418 , ("textcolor", coloredInline "color")
411 , ("colorbox", coloredInline "background-color")
419 , ("colorbox", coloredInline "background-color")
421+ , ("xspace", doxspace)
412 -- etoolbox
422 -- etoolbox
413 , ("ifstrequal", ifstrequal)
423 , ("ifstrequal", ifstrequal)
414 , ("newtoggle", braced >>= newToggle)
424 , ("newtoggle", braced >>= newToggle)
@@ -688,6 +698,39 @@ include name = do
688 mapM_ (insertIncluded defaultExt) fs
698 mapM_ (insertIncluded defaultExt) fs
689 return mempty
699 return mempty
701+readFileFromTexinputs :: PandocMonad m => FilePath -> LP m (Maybe Text)
702+readFileFromTexinputs fp = do
703+ fileContentsMap <- sFileContents <$> getState
704+ case M.lookup (T.pack fp) fileContentsMap of
705+ Just t -> return (Just t)
707+ dirs <- map T.unpack . splitTextBy (==':') . fromMaybe "."
708+ <$> lookupEnv "TEXINPUTS"
709+ readFileFromDirs dirs fp
711+insertIncluded :: PandocMonad m
715+insertIncluded defaultExtension f' = do
716+ let f = case takeExtension f' of
719+ _ -> addExtension f' defaultExtension
721+ containers <- getIncludeFiles <$> getState
722+ when (T.pack f `elem` containers) $
723+ throwError $ PandocParseError $ T.pack $ "Include file loop at " ++ show pos
724+ updateState $ addIncludeFile $ T.pack f
725+ mbcontents <- readFileFromTexinputs f
726+ contents <- case mbcontents of
729+ report $ CouldNotLoadIncludeFile (T.pack f) pos
731+ getInput >>= setInput . (tokenize f contents ++)
732+ updateState dropLatestIncludeFile
691authors :: PandocMonad m => LP m ()
734authors :: PandocMonad m => LP m ()
692authors = try $ do
735authors = try $ do