diff options
| author | John MacFarlane <jgm@berkeley.edu> | 2023-01-21 10:14:01 -0800 |
|---|---|---|
| committer | John MacFarlane <jgm@berkeley.edu> | 2023-01-21 10:18:55 -0800 |
| commit | ee3180160b995e017cbbb89075b53855dc5baa87 (patch) | |
| tree | eca717492ca409b1c00fed3b3c5eb7d7316cf107 | |
| parent | c30ffca70f5e497262f8e81f8a563c942df6a62b (diff) | |
T.P.Writers.Shared: export setupTranslations [API change].
Use this in HTML and OpenDocument writers.
| -rw-r--r-- | src/Text/Pandoc/Writers/HTML.hs | 3 | ||||
| -rw-r--r-- | src/Text/Pandoc/Writers/OpenDocument.hs | 12 | ||||
| -rw-r--r-- | src/Text/Pandoc/Writers/Shared.hs | 14 |
3 files changed, 20 insertions, 9 deletions
diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs index 0d9346a07..9619e24ad 100644 --- a/src/Text/Pandoc/Writers/HTML.hs +++ b/src/Text/Pandoc/Writers/HTML.hs @@ -259,7 +259,7 @@ writeHtml' st opts d = Just _ -> preEscapedText <$> writeHtmlString' st opts d Nothing | writerPreferAscii opts - -> preEscapedText <$> writeHtmlString' st opts d + -> preEscapedText <$> writeHtmlString' st opts d | otherwise -> do (body, _) <- evalStateT (pandocToHtml opts d) st return body @@ -270,6 +270,7 @@ pandocToHtml :: PandocMonad m -> Pandoc -> StateT WriterState m (Html, Context Text) pandocToHtml opts (Pandoc meta blocks) = do + lift $ setupTranslations meta let slideLevel = fromMaybe (getSlideLevel blocks) $ writerSlideLevel opts modify $ \st -> st{ stSlideLevel = slideLevel } metadata <- metaToContext opts diff --git a/src/Text/Pandoc/Writers/OpenDocument.hs b/src/Text/Pandoc/Writers/OpenDocument.hs index a96c9cd1a..1c8417c47 100644 --- a/src/Text/Pandoc/Writers/OpenDocument.hs +++ b/src/Text/Pandoc/Writers/OpenDocument.hs @@ -21,14 +21,14 @@ import Data.Char (chr) import Data.Foldable (find) import Data.List (sortOn, sortBy, foldl') import qualified Data.Map as Map -import Data.Maybe (fromMaybe, isNothing) +import Data.Maybe (isNothing) import Data.Ord (comparing) import qualified Data.Set as Set import Data.Text (Text) import qualified Data.Text as T import Text.Collate.Lang (Lang (..), parseLang) -import Text.Pandoc.Class.PandocMonad (PandocMonad, report, toLang) -import Text.Pandoc.Translations (translateTerm, setTranslations) +import Text.Pandoc.Class.PandocMonad (PandocMonad, report) +import Text.Pandoc.Translations (translateTerm) import Text.Pandoc.Definition import qualified Text.Pandoc.Builder as B import Text.Pandoc.Logging @@ -237,11 +237,7 @@ handleSpaces s = case T.uncons s of -- | Convert Pandoc document to string in OpenDocument format. writeOpenDocument :: PandocMonad m => WriterOptions -> Pandoc -> m Text writeOpenDocument opts (Pandoc meta blocks) = do - let defLang = Lang "en" (Just "US") Nothing [] [] [] - lang <- case lookupMetaString "lang" meta of - "" -> pure defLang - s -> fromMaybe defLang <$> toLang (Just s) - setTranslations lang + setupTranslations meta let colwidth = if writerWrapText opts == WrapAuto then Just $ writerColumns opts else Nothing diff --git a/src/Text/Pandoc/Writers/Shared.hs b/src/Text/Pandoc/Writers/Shared.hs index 3d64f83f0..7a2fee7ec 100644 --- a/src/Text/Pandoc/Writers/Shared.hs +++ b/src/Text/Pandoc/Writers/Shared.hs @@ -43,6 +43,7 @@ module Text.Pandoc.Writers.Shared ( , toLegacyTable , splitSentences , ensureValidXmlIdentifiers + , setupTranslations ) where import Safe (lastMay) @@ -68,6 +69,10 @@ import Text.Pandoc.XML (escapeStringForXML) import Text.DocTemplates (Context(..), Val(..), TemplateTarget, ToContext(..), FromContext(..)) import Text.Pandoc.Chunks (tocToList, toTOCTree) +import Text.Collate.Lang (Lang (..)) +import Text.Pandoc.Class (PandocMonad, toLang) +import Text.Pandoc.Translations (setTranslations) +import Data.Maybe (fromMaybe) -- | Create template Context from a 'Meta' and an association list -- of variables, specified at the command line or in the writer. @@ -608,3 +613,12 @@ walkAttr f = walk goInline . walk goBlock Table (f attr) cap colspecs thead tbodies tfoot goBlock (Div attr bs) = Div (f attr) bs goBlock x = x + +-- | Set translations based on the `lang` in metadata. +setupTranslations :: PandocMonad m => Meta -> m () +setupTranslations meta = do + let defLang = Lang "en" (Just "US") Nothing [] [] [] + lang <- case lookupMetaString "lang" meta of + "" -> pure defLang + s -> fromMaybe defLang <$> toLang (Just s) + setTranslations lang |
