@@ -16,6 +16,7 @@ import Text.Pandoc.Citeproc.BibTeX (readBibtexString, Variant(..))
16import Text.Pandoc.Citeproc.MetaValue (metaValueToReference, metaValueToText)
16import Text.Pandoc.Citeproc.MetaValue (metaValueToReference, metaValueToText)
17import Text.Pandoc.Readers.Markdown (yamlToRefs)
17import Text.Pandoc.Readers.Markdown (yamlToRefs)
18import Text.Pandoc.Class (setResourcePath, getResourcePath, getUserDataDir)
18import Text.Pandoc.Class (setResourcePath, getResourcePath, getUserDataDir)
19+import qualified Text.Pandoc.BCP47 as BCP47
19import Data.ByteString (ByteString)
20import Data.ByteString (ByteString)
20import qualified Data.ByteString.Lazy as L
21import qualified Data.ByteString.Lazy as L
21import Text.Pandoc.Definition as Pandoc
22import Text.Pandoc.Definition as Pandoc
@@ -91,8 +92,9 @@ processCitations (Pandoc meta bs) = do
91 case styleRes of
92 case styleRes of
92 Left err -> throwError $ PandocAppError $ prettyCiteprocError err
93 Left err -> throwError $ PandocAppError $ prettyCiteprocError err
93 Right style -> return style{ styleAbbreviations = mbAbbrevs }
94 Right style -> return style{ styleAbbreviations = mbAbbrevs }
94− let mblang = parseLang <$>
95+ mblang <- maybe (return Nothing) bcp47LangToIETF
95− ((lookupMeta "lang" meta <|> lookupMeta "locale" meta) >>= metaValueToText)
96+ ((lookupMeta "lang" meta <|> lookupMeta "locale" meta) >>=
96 let locale = Citeproc.mergeLocales mblang style
98 let locale = Citeproc.mergeLocales mblang style
97 let getCiteId (Cite cs _) = Set.fromList $ map B.citationId cs
99 let getCiteId (Cite cs _) = Set.fromList $ map B.citationId cs
98 getCiteId _ = mempty
100 getCiteId _ = mempty
@@ -579,3 +581,16 @@ removeFinalPeriod ils =
579 isRightQuote "\8217" = True
581 isRightQuote "\8217" = True
580 isRightQuote "\187" = True
582 isRightQuote "\187" = True
581 isRightQuote _ = False
583 isRightQuote _ = False
585+bcp47LangToIETF :: PandocMonad m => Text -> m (Maybe Lang)
586+bcp47LangToIETF bcplang =
587+ case BCP47.parseBCP47 bcplang of
589+ report $ InvalidLang bcplang
593+ $ Lang (BCP47.langLanguage lang)
594+ (if T.null (BCP47.langRegion lang)
596+ else Just (BCP47.langRegion lang))