git.iko.soy/typeable/pandoc
on master help sign in
Merge pull request #2441 from mb21/polyglossia-lang

Change variable to polyglossia-lang.name and .options

commit3e4713c2de27c37f9d10825b15f29f704776e6fa authorJohn MacFarlane <jgm@berkeley.edu> dateSat 10 Oct 2015, 13:52 (11 years ago) parent5e57bea80b851a
2 files changed+37−22
README+1−2 src/Text/Pandoc/Writers/LaTeX.hs+36−20
README+1−2
@@ -1044,8 +1044,7 @@ Language variables
10441044 using a code according to [BCP 47] (e.g. `en` or `en-GB`).
10451045 For some output formats, pandoc will convert it to an appropriate
10461046 format stored in the additional variables `babel-lang`,
1047− `polyglossia-lang`, `polyglossia-variant` (LaTeX)
1048− and `context-lang` (ConTeXt).
1047+ `polyglossia-lang` (LaTeX) and `context-lang` (ConTeXt).
10491048
10501049`otherlangs`
10511050: 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
3838import Text.Pandoc.Templates
3939import Text.Printf ( printf )
4040import Network.URI ( isURI, unEscapeString )
41+import Data.Aeson (object, (.=))
4142import Data.List ( (\\), isInfixOf, stripPrefix, intercalate, intersperse )
4243import Data.Char ( toLower, isPunctuation, isAscii, isLetter, isDigit, ord )
4344import Data.Maybe ( fromMaybe )
45+import qualified Data.Text as T
4446import Control.Applicative ((<|>))
4547import Control.Monad.State
4648import qualified Text.Parsec as P
@@ -178,14 +180,16 @@ pandocToLaTeX options (Pandoc meta blocks) = do
178180 defField "biblatex" True
179181 _ -> id) $
180182 metadata
183+ let toPolyObj lang = object [ "name" .= T.pack name
184+ , "options" .= T.pack opts ]
185+ where
186+ (name, opts) = toPolyglossia lang
181187 let lang = maybe [] (splitBy (=='-')) $ getField "lang" context
182− (polyLang, polyVar) = toPolyglossia lang
183188 let context' =
184189 defField "babel-lang" (toBabel lang)
185− $ defField "polyglossia-lang" polyLang
186− $ defField "polyglossia-variant" polyVar
190+ $ defField "polyglossia-lang" (toPolyObj lang)
187191 $ defField "polyglossia-otherlangs"
188− (maybe [] (map $ fst . toPolyglossia . splitBy (=='-')) $
192+ (maybe [] (map $ toPolyObj . splitBy (=='-')) $
189193 getField "otherlangs" context)
190194 $ defField "latex-dir-rtl" (case (getField "dir" context)::Maybe String of
191195 Just "rtl" -> True
@@ -996,24 +1000,36 @@ getListingsLanguage [] = Nothing
9961000getListingsLanguage (x:xs) = toListingsLanguage x <|> getListingsLanguage xs
9971001
9981002-- 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
10001004-- http://mirrors.concertpass.com/tex-archive/macros/latex/contrib/polyglossia/polyglossia.pdf
10011005toPolyglossia :: [String] -> (String, String)
1002−toPolyglossia ("de":"AT":_) = ("german", "austrian")
1003−toPolyglossia ("de":"CH":_) = ("german", "swiss")
1004−toPolyglossia ("de":_) = ("german", "")
1005−toPolyglossia ("dsb":_) = ("lsorbian", "")
1006−toPolyglossia ("el":"poly":_) = ("greek", "poly")
1007−toPolyglossia ("en":"AU":_) = ("english", "australian")
1008−toPolyglossia ("en":"CA":_) = ("english", "canadian")
1009−toPolyglossia ("en":"GB":_) = ("english", "british")
1010−toPolyglossia ("en":"NZ":_) = ("english", "newzealand")
1011−toPolyglossia ("en":"UK":_) = ("english", "british")
1012−toPolyglossia ("en":"US":_) = ("english", "american")
1013−toPolyglossia ("grc":_) = ("greek", "ancient")
1014−toPolyglossia ("hsb":_) = ("usorbian", "")
1015−toPolyglossia ("sl":_) = ("slovenian", "")
1016−toPolyglossia x = (commonFromBcp47 x, "")
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")
1019+toPolyglossia ("de":"CH":_) = ("german", "variant=swiss")
1020+toPolyglossia ("de":_) = ("german", "")
1021+toPolyglossia ("dsb":_) = ("lsorbian", "")
1022+toPolyglossia ("el":"poly":_) = ("greek", "variant=poly")
1023+toPolyglossia ("en":"AU":_) = ("english", "variant=australian")
1024+toPolyglossia ("en":"CA":_) = ("english", "variant=canadian")
1025+toPolyglossia ("en":"GB":_) = ("english", "variant=british")
1026+toPolyglossia ("en":"NZ":_) = ("english", "variant=newzealand")
1027+toPolyglossia ("en":"UK":_) = ("english", "variant=british")
1028+toPolyglossia ("en":"US":_) = ("english", "variant=american")
1029+toPolyglossia ("grc":_) = ("greek", "variant=ancient")
1030+toPolyglossia ("hsb":_) = ("usorbian", "")
1031+toPolyglossia ("sl":_) = ("slovenian", "")
1032+toPolyglossia x = (commonFromBcp47 x, "")
10171033
10181034-- Takes a list of the constituents of a BCP 47 language code and
10191035-- converts it to a Babel language string.