git.iko.soy/typeable/pandoc
on master help sign in
Change variable to polyglossia-lang.name and .options
80b851amb21
README+1−2
@@ -944,8 +944,7 @@ Language variables
944 using a code according to [BCP 47] (e.g. `en` or `en-GB`).
944 using a code according to [BCP 47] (e.g. `en` or `en-GB`).
945 For some output formats, pandoc will convert it to an appropriate
945 For some output formats, pandoc will convert it to an appropriate
946 format stored in the additional variables `babel-lang`,
946 format stored in the additional variables `babel-lang`,
947− `polyglossia-lang`, `polyglossia-variant` (LaTeX)
948− and `context-lang` (ConTeXt).
947+ `polyglossia-lang` (LaTeX) and `context-lang` (ConTeXt).
949
948
950`otherlangs`
949`otherlangs`
951: a list of other languages used in the document
950: a list of other languages used in the document
src/Text/Pandoc/Writers/LaTeX.hs+36−20
@@ -38,9 +38,11 @@ import Text.Pandoc.Options
38import Text.Pandoc.Templates
38import Text.Pandoc.Templates
39import Text.Printf ( printf )
39import Text.Printf ( printf )
40import Network.URI ( isURI, unEscapeString )
40import Network.URI ( isURI, unEscapeString )
41+import Data.Aeson (object, (.=))
41import Data.List ( (\\), isInfixOf, stripPrefix, intercalate, intersperse )
42import Data.List ( (\\), isInfixOf, stripPrefix, intercalate, intersperse )
42import Data.Char ( toLower, isPunctuation, isAscii, isLetter, isDigit, ord )
43import Data.Char ( toLower, isPunctuation, isAscii, isLetter, isDigit, ord )
43import Data.Maybe ( fromMaybe )
44import Data.Maybe ( fromMaybe )
45+import qualified Data.Text as T
44import Control.Applicative ((<|>))
46import Control.Applicative ((<|>))
45import Control.Monad.State
47import Control.Monad.State
46import qualified Text.Parsec as P
48import qualified Text.Parsec as P
@@ -178,14 +180,16 @@ pandocToLaTeX options (Pandoc meta blocks) = do
178 defField "biblatex" True
180 defField "biblatex" True
179 _ -> id) $
181 _ -> id) $
180 metadata
182 metadata
183+ let toPolyObj lang = object [ "name" .= T.pack name
184+ , "options" .= T.pack opts ]
185+ where
186+ (name, opts) = toPolyglossia lang
181 let lang = maybe [] (splitBy (=='-')) $ getField "lang" context
187 let lang = maybe [] (splitBy (=='-')) $ getField "lang" context
182− (polyLang, polyVar) = toPolyglossia lang
183 let context' =
188 let context' =
184 defField "babel-lang" (toBabel lang)
189 defField "babel-lang" (toBabel lang)
185− $ defField "polyglossia-lang" polyLang
190+ $ defField "polyglossia-lang" (toPolyObj lang)
186− $ defField "polyglossia-variant" polyVar
187 $ defField "polyglossia-otherlangs"
191 $ defField "polyglossia-otherlangs"
188− (maybe [] (map $ fst . toPolyglossia . splitBy (=='-')) $
192+ (maybe [] (map $ toPolyObj . splitBy (=='-')) $
189 getField "otherlangs" context)
193 getField "otherlangs" context)
190 $ defField "latex-dir-rtl" (case (getField "dir" context)::Maybe String of
194 $ defField "latex-dir-rtl" (case (getField "dir" context)::Maybe String of
191 Just "rtl" -> True
195 Just "rtl" -> True
@@ -996,24 +1000,36 @@ getListingsLanguage [] = Nothing
996getListingsLanguage (x:xs) = toListingsLanguage x <|> getListingsLanguage xs
1000getListingsLanguage (x:xs) = toListingsLanguage x <|> getListingsLanguage xs
997
1001
998-- Takes a list of the constituents of a BCP 47 language code and
1002-- Takes a list of the constituents of a BCP 47 language code and
999−-- converts it to a Polyglossia (language, variant) tuple
1003+-- converts it to a Polyglossia (language, options) tuple
1000-- http://mirrors.concertpass.com/tex-archive/macros/latex/contrib/polyglossia/polyglossia.pdf
1004-- http://mirrors.concertpass.com/tex-archive/macros/latex/contrib/polyglossia/polyglossia.pdf
1001toPolyglossia :: [String] -> (String, String)
1005toPolyglossia :: [String] -> (String, String)
1002−toPolyglossia ("de":"AT":_) = ("german", "austrian")
1006+toPolyglossia ("ar":"DZ":_) = ("arabic", "locale=algeria")
1007+toPolyglossia ("ar":"IQ":_) = ("arabic", "locale=mashriq")
1008+toPolyglossia ("ar":"JO":_) = ("arabic", "locale=mashriq")
1009+toPolyglossia ("ar":"LB":_) = ("arabic", "locale=mashriq")
1010+toPolyglossia ("ar":"LY":_) = ("arabic", "locale=libya")
1011+toPolyglossia ("ar":"MA":_) = ("arabic", "locale=morocco")
1012+toPolyglossia ("ar":"MR":_) = ("arabic", "locale=mauritania")
1013+toPolyglossia ("ar":"PS":_) = ("arabic", "locale=mashriq")
1014+toPolyglossia ("ar":"SY":_) = ("arabic", "locale=mashriq")
1015+toPolyglossia ("ar":"TN":_) = ("arabic", "locale=tunisia")
1016+toPolyglossia ("de":"1901":_) = ("german", "spelling=old")
1017+toPolyglossia ("de":"AT":"1901":_) = ("german", "variant=austrian, spelling=old")
1018+toPolyglossia ("de":"AT":_) = ("german", "variant=austrian")
1003−toPolyglossia ("de":"CH":_) = ("german", "swiss")
1019+toPolyglossia ("de":"CH":_) = ("german", "variant=swiss")
1004−toPolyglossia ("de":_) = ("german", "")
1020+toPolyglossia ("de":_) = ("german", "")
1005−toPolyglossia ("dsb":_) = ("lsorbian", "")
1021+toPolyglossia ("dsb":_) = ("lsorbian", "")
1006−toPolyglossia ("el":"poly":_) = ("greek", "poly")
1022+toPolyglossia ("el":"poly":_) = ("greek", "variant=poly")
1007−toPolyglossia ("en":"AU":_) = ("english", "australian")
1023+toPolyglossia ("en":"AU":_) = ("english", "variant=australian")
1008−toPolyglossia ("en":"CA":_) = ("english", "canadian")
1024+toPolyglossia ("en":"CA":_) = ("english", "variant=canadian")
1009−toPolyglossia ("en":"GB":_) = ("english", "british")
1025+toPolyglossia ("en":"GB":_) = ("english", "variant=british")
1010−toPolyglossia ("en":"NZ":_) = ("english", "newzealand")
1026+toPolyglossia ("en":"NZ":_) = ("english", "variant=newzealand")
1011−toPolyglossia ("en":"UK":_) = ("english", "british")
1027+toPolyglossia ("en":"UK":_) = ("english", "variant=british")
1012−toPolyglossia ("en":"US":_) = ("english", "american")
1028+toPolyglossia ("en":"US":_) = ("english", "variant=american")
1013−toPolyglossia ("grc":_) = ("greek", "ancient")
1029+toPolyglossia ("grc":_) = ("greek", "variant=ancient")
1014−toPolyglossia ("hsb":_) = ("usorbian", "")
1030+toPolyglossia ("hsb":_) = ("usorbian", "")
1015−toPolyglossia ("sl":_) = ("slovenian", "")
1031+toPolyglossia ("sl":_) = ("slovenian", "")
1016−toPolyglossia x = (commonFromBcp47 x, "")
1032+toPolyglossia x = (commonFromBcp47 x, "")
1017
1033
1018-- Takes a list of the constituents of a BCP 47 language code and
1034-- Takes a list of the constituents of a BCP 47 language code and
1019-- converts it to a Babel language string.
1035-- converts it to a Babel language string.