{-# LANGUAGE OverloadedStrings #-}
module Text.LaTeX.Packages.Babel (
babel
, Language (..)
, uselanguage
, LangConf (..)
, uselanguageconf
, selectlanguage
, otherlanguage
, foreignlanguage
) where
import Text.LaTeX.Base
import Text.LaTeX.Base.Syntax
import Text.LaTeX.Base.Class
import Data.Text (toLower)
babel :: PackageName
babel :: PackageName
babel = PackageName
"babel"
data Language =
Bulgarian
| Brazilian
| Canadien
| Czech
| Dutch
| English
| Finnish
| Francais
| French
| FrenchB
| German
| NGerman
| Icelandic
| Italian
| Magyar
| Portuguese
| Russian
| Spanish
| Ukranian
deriving Int -> Language -> ShowS
[Language] -> ShowS
Language -> PackageName
(Int -> Language -> ShowS)
-> (Language -> PackageName)
-> ([Language] -> ShowS)
-> Show Language
forall a.
(Int -> a -> ShowS)
-> (a -> PackageName) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Language -> ShowS
showsPrec :: Int -> Language -> ShowS
$cshow :: Language -> PackageName
show :: Language -> PackageName
$cshowList :: [Language] -> ShowS
showList :: [Language] -> ShowS
Show
instance Render Language where
render :: Language -> Text
render = Text -> Text
toLower (Text -> Text) -> (Language -> Text) -> Language -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PackageName -> Text
forall a. IsString a => PackageName -> a
fromString (PackageName -> Text)
-> (Language -> PackageName) -> Language -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Language -> PackageName
forall a. Show a => a -> PackageName
show
instance Texy Language where
texy :: forall l. LaTeXC l => Language -> l
texy = Text -> l
forall l. LaTeXC l => Text -> l
forall t l. (Texy t, LaTeXC l) => t -> l
texy (Text -> l) -> (Language -> Text) -> Language -> l
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Language -> Text
forall a. Render a => a -> Text
render
uselanguage :: LaTeXC l => Language -> l
uselanguage :: forall l. LaTeXC l => Language -> l
uselanguage Language
lang = [l] -> PackageName -> l
forall l. LaTeXC l => [l] -> PackageName -> l
usepackage [Language -> l
forall l. LaTeXC l => Language -> l
forall t l. (Texy t, LaTeXC l) => t -> l
texy Language
lang] PackageName
babel
data LangConf = LangConf { LangConf -> Language
mainLang :: Language , LangConf -> [Language]
otherLangs :: [Language] }
deriving Int -> LangConf -> ShowS
[LangConf] -> ShowS
LangConf -> PackageName
(Int -> LangConf -> ShowS)
-> (LangConf -> PackageName)
-> ([LangConf] -> ShowS)
-> Show LangConf
forall a.
(Int -> a -> ShowS)
-> (a -> PackageName) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> LangConf -> ShowS
showsPrec :: Int -> LangConf -> ShowS
$cshow :: LangConf -> PackageName
show :: LangConf -> PackageName
$cshowList :: [LangConf] -> ShowS
showList :: [LangConf] -> ShowS
Show
uselanguageconf :: LaTeXC l => LangConf -> l
uselanguageconf :: forall l. LaTeXC l => LangConf -> l
uselanguageconf LangConf
lc = [l] -> PackageName -> l
forall l. LaTeXC l => [l] -> PackageName -> l
usepackage [l]
xs PackageName
babel
where
x :: l
x = l
"main=" l -> l -> l
forall a. Semigroup a => a -> a -> a
<> Language -> l
forall l. LaTeXC l => Language -> l
forall t l. (Texy t, LaTeXC l) => t -> l
texy (LangConf -> Language
mainLang LangConf
lc)
xs :: [l]
xs = l
x l -> [l] -> [l]
forall a. a -> [a] -> [a]
: (Language -> l) -> [Language] -> [l]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Language -> l
forall l. LaTeXC l => Language -> l
forall t l. (Texy t, LaTeXC l) => t -> l
texy (LangConf -> [Language]
otherLangs LangConf
lc)
selectlanguage :: LaTeXC l => Language -> l
selectlanguage :: forall l. LaTeXC l => Language -> l
selectlanguage Language
lang = LaTeX -> l
forall l. LaTeXC l => LaTeX -> l
fromLaTeX (LaTeX -> l) -> LaTeX -> l
forall a b. (a -> b) -> a -> b
$ PackageName -> [TeXArg] -> LaTeX
TeXComm PackageName
"selectlanguage" [LaTeX -> TeXArg
FixArg (LaTeX -> TeXArg) -> LaTeX -> TeXArg
forall a b. (a -> b) -> a -> b
$ Language -> LaTeX
forall l. LaTeXC l => Language -> l
forall t l. (Texy t, LaTeXC l) => t -> l
texy Language
lang]
otherlanguage :: LaTeXC l => Language -> l -> l
otherlanguage :: forall l. LaTeXC l => Language -> l -> l
otherlanguage Language
lang = (LaTeX -> LaTeX) -> l -> l
forall l. LaTeXC l => (LaTeX -> LaTeX) -> l -> l
liftL ((LaTeX -> LaTeX) -> l -> l) -> (LaTeX -> LaTeX) -> l -> l
forall a b. (a -> b) -> a -> b
$ PackageName -> [TeXArg] -> LaTeX -> LaTeX
TeXEnv PackageName
"otherlanguage" [LaTeX -> TeXArg
FixArg (LaTeX -> TeXArg) -> LaTeX -> TeXArg
forall a b. (a -> b) -> a -> b
$ Language -> LaTeX
forall l. LaTeXC l => Language -> l
forall t l. (Texy t, LaTeXC l) => t -> l
texy Language
lang]
foreignlanguage :: LaTeXC l => Language -> l -> l
foreignlanguage :: forall l. LaTeXC l => Language -> l -> l
foreignlanguage Language
lang = (LaTeX -> LaTeX) -> l -> l
forall l. LaTeXC l => (LaTeX -> LaTeX) -> l -> l
liftL
((LaTeX -> LaTeX) -> l -> l) -> (LaTeX -> LaTeX) -> l -> l
forall a b. (a -> b) -> a -> b
$ \LaTeX
l -> PackageName -> [TeXArg] -> LaTeX
TeXComm PackageName
"foreignlanguage" [LaTeX -> TeXArg
OptArg (LaTeX -> TeXArg) -> LaTeX -> TeXArg
forall a b. (a -> b) -> a -> b
$ Language -> LaTeX
forall l. LaTeXC l => Language -> l
forall t l. (Texy t, LaTeXC l) => t -> l
texy Language
lang, LaTeX -> TeXArg
FixArg LaTeX
l]