aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <[email protected]>2022-08-28 20:59:09 -0700
committerJohn MacFarlane <[email protected]>2022-08-28 20:59:09 -0700
commit37612b22abb72231908f34f617b3ec850643c8e4 (patch)
tree0d107d143b7343b7743347818ecaa95c04f0597f
parent603944ac474489e50b00616b5a6cf1f35ef59a94 (diff)
PandocServer: set translations in the writer based on lang metadata.
-rw-r--r--src/Text/Pandoc/Server.hs14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Server.hs b/src/Text/Pandoc/Server.hs
index 3d6829d94..5b4cc7712 100644
--- a/src/Text/Pandoc/Server.hs
+++ b/src/Text/Pandoc/Server.hs
@@ -16,6 +16,7 @@ import Network.Wai
import Servant
import Text.DocTemplates as DocTemplates
import Text.Pandoc
+import Text.Pandoc.Writers.Shared (lookupMetaString)
import Text.Pandoc.Citeproc (processCitations)
import Text.Pandoc.Highlighting (lookupHighlightingStyle)
import qualified Text.Pandoc.UTF8 as UTF8
@@ -33,6 +34,7 @@ import Control.Monad (when, foldM)
import qualified Data.Set as Set
import Skylighting (defaultSyntaxMap)
import qualified Data.Map as M
+import Text.Collate.Lang (Lang (..), parseLang)
import System.Console.GetOpt
import System.Environment (getArgs, getProgName)
import qualified Control.Exception as E
@@ -283,6 +285,7 @@ server = convert
, readerTrackChanges = optTrackChanges opts
, readerStripComments = optStripComments opts
}
+
let writeropts =
def{ writerExtensions = writerExts
, writerTabStop = optTabStop opts
@@ -317,6 +320,7 @@ server = convert
, writerReferenceLocation = optReferenceLocation opts
, writerPreferAscii = optAscii opts
}
+
let reader = case readerSpec of
TextReader r -> r readeropts
ByteStringReader r -> \t -> do
@@ -324,7 +328,15 @@ server = convert
case eitherbs of
Left errt -> throwError $ PandocSomeError errt
Right bs -> r readeropts $ BL.fromStrict bs
- let writer d = case writerSpec of
+
+ let writer d@(Pandoc meta _) = do
+ case lookupMetaString "lang" meta of
+ "" -> setTranslations $
+ Lang "en" Nothing (Just "US") [] [] []
+ l -> case parseLang l of
+ Left _ -> report $ InvalidLang l
+ Right l' -> setTranslations l'
+ case writerSpec of
TextWriter w ->
w writeropts d >>=
(if optEmbedResources opts && htmlFormat (optTo opts)