{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}
module Text.Collate.Tailorings
 ( ducetCollation
 , tailorings )
where

import Text.Collate.Lang
import Text.Collate.TH
import Text.Collate.Collation (suppressContractions, insertElements,
                               Collation, CollationElement(..))
import Data.Binary (decode)

-- | The DUCET collation defined in allkeys.txt.
ducetCollation :: Collation
ducetCollation :: Collation
ducetCollation = forall a. Binary a => ByteString -> a
decode forall a b. (a -> b) -> a -> b
$! $(genCollation "data/allkeys.txt")

applyCJKOverrides :: [Int] -> Collation -> Collation
applyCJKOverrides :: [Int] -> Collation -> Collation
applyCJKOverrides [Int]
cps Collation
coll = forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (Int, Word16) -> Collation -> Collation
addElt Collation
coll (forall a b. [a] -> [b] -> [(a, b)]
zip [Int]
cps [Word16
0x8000..])
 where
  addElt :: (Int, Word16) -> Collation -> Collation
addElt (Int
cp, Word16
weight) = [Int] -> [CollationElement] -> Collation -> Collation
insertElements [Int
cp]
                         [Bool -> Word16 -> Word16 -> Word16 -> Word16 -> CollationElement
CollationElement Bool
False Word16
weight Word16
0x0020 Word16
0x0002 Word16
0x0000]

-- | An association list matching 'Lang's with tailored 'Collation's.
tailorings :: [(Lang, Collation)]
tailorings :: [(Lang, Collation)]
tailorings =
  [(Lang
"af", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/af.txt"))
  ,(Lang
"ar", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/ar.txt"))
  ,(Lang
"as", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/as.txt"))
  ,(Lang
"az", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/az.txt"))
  ,(Lang
"be", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/be.txt"))
  ,(Lang
"bn", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/bn.txt"))
  ,(Lang
"ca", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/ca.txt"))
  ,(Lang
"cs", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/cs.txt"))
  ,(Lang
"cu", [Int] -> Collation -> Collation
suppressContractions [Int
0x0418, Int
0x0438] forall a b. (a -> b) -> a -> b
$
            forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/cu.txt"))
  ,(Lang
"cy", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/cy.txt"))
  ,(Lang
"da", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/da.txt"))
  ,(Lang
"de_AT_u_co_phonebk", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/de_at_ph.txt"))
  ,(Lang
"de_u_co_phonebk", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/de_phone.txt"))
  ,(Lang
"dsb", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/dsb.txt"))
  ,(Lang
"ee", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/ee.txt"))
  ,(Lang
"eo", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/eo.txt"))
  ,(Lang
"es", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/es.txt"))
  ,(Lang
"es_u_co_trad", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/es_trad.txt"))
  ,(Lang
"et", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/et.txt"))
  ,(Lang
"fa", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/fa.txt"))
  ,(Lang
"fi", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/fi.txt"))
  ,(Lang
"fi_u_co_phonebk", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/fi_phone.txt"))
  ,(Lang
"fil", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/fil.txt"))
  ,(Lang
"fo", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/fo.txt"))
  ,(Lang
"fr_CA", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/fr_ca.txt"))
  ,(Lang
"gu", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/gu.txt"))
  ,(Lang
"ha", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/ha.txt"))
  ,(Lang
"haw", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/haw.txt"))
  ,(Lang
"he", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/he.txt"))
  ,(Lang
"hi", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/hi.txt"))
  ,(Lang
"hr", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/hr.txt"))
  ,(Lang
"hu", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/hu.txt"))
  ,(Lang
"hy", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/hy.txt"))
  ,(Lang
"ig", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/ig.txt"))
  ,(Lang
"is", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/is.txt"))
  ,(Lang
"ja", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/ja.txt"))
  ,(Lang
"kk", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/kk.txt"))
  ,(Lang
"kl", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/kl.txt"))
  ,(Lang
"kn", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/kn.txt"))
  ,(Lang
"ko", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/ko.txt"))
  ,(Lang
"kok", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/kok.txt"))
  ,(Lang
"lkt", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/lkt.txt"))
  ,(Lang
"ln", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/ln.txt"))
  ,(Lang
"lt", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/lt.txt"))
  ,(Lang
"lv", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/lv.txt"))
  ,(Lang
"mk", [Int] -> Collation -> Collation
suppressContractions [Int
0x0418, Int
0x0438] forall a b. (a -> b) -> a -> b
$
           forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/mk.txt"))
  ,(Lang
"ml", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/ml.txt"))
  ,(Lang
"mr", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/mr.txt"))
  ,(Lang
"mt", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/mt.txt"))
  ,(Lang
"nb", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/nb.txt"))
  ,(Lang
"nn", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/nn.txt"))
  ,(Lang
"nso", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/nso.txt"))
  ,(Lang
"om", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/om.txt"))
  ,(Lang
"or", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/or.txt"))
  ,(Lang
"pa", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/pa.txt"))
  ,(Lang
"pl", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/pl.txt"))
  ,(Lang
"ro", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/ro.txt"))
  ,(Lang
"sa", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/sa.txt"))
  ,(Lang
"se", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/se.txt"))
  ,(Lang
"si", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/si.txt"))
  ,(Lang
"si_u_co_dict", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/si_dict.txt"))
  ,(Lang
"sk", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/sk.txt"))
  ,(Lang
"sl", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/sl.txt"))
  ,(Lang
"sq", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/sq.txt"))
  ,(Lang
"sr", [Int] -> Collation -> Collation
suppressContractions [Int
0x0418, Int
0x0438] forall a b. (a -> b) -> a -> b
$
            forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/sr.txt"))
  ,(Lang
"sv", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/sv.txt"))
  ,(Lang
"sv_u_co_reformed", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/sv_refo.txt"))
  ,(Lang
"ta", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/ta.txt"))
  ,(Lang
"te", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/te.txt"))
  ,(Lang
"th", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/th.txt"))
  ,(Lang
"tn", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/tn.txt"))
  ,(Lang
"to", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/to.txt"))
  ,(Lang
"tr", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/tr.txt"))
  ,(Lang
"ug_Cyrl", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/ug_cyrl.txt"))
  ,(Lang
"uk", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/uk.txt"))
  ,(Lang
"ur", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/ur.txt"))
  ,(Lang
"vi", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/vi.txt"))
  ,(Lang
"vo", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/vo.txt"))
  ,(Lang
"wae", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/wae.txt"))
  ,(Lang
"wo", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/wo.txt"))
  ,(Lang
"yo", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/yo.txt"))
  ,(Lang
"zh", forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/zh.txt"))
  ,(Lang
"zh_u_co_big5han", [Int] -> Collation -> Collation
applyCJKOverrides
                    (forall a. Binary a => ByteString -> a
decode $(genCJKOverrides "data/cjk/Big5.txt")) forall a b. (a -> b) -> a -> b
$
                    forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/zh_big5.txt"))
  ,(Lang
"zh_u_co_gb2312", [Int] -> Collation -> Collation
applyCJKOverrides
                      (forall a. Binary a => ByteString -> a
decode $(genCJKOverrides "data/cjk/GB2312.txt")) forall a b. (a -> b) -> a -> b
$
                      forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/zh_gb.txt"))
  ,(Lang
"zh_u_co_pinyin", [Int] -> Collation -> Collation
applyCJKOverrides
                      (forall a. Binary a => ByteString -> a
decode $(genCJKOverrides "data/cjk/Pinyin.txt")) forall a b. (a -> b) -> a -> b
$
                       forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/zh_pin.txt"))
  ,(Lang
"zh_u_co_stroke", [Int] -> Collation -> Collation
applyCJKOverrides
                        (forall a. Binary a => ByteString -> a
decode $(genCJKOverrides "data/cjk/Stroke.txt")) forall a b. (a -> b) -> a -> b
$
                        forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/zh_strk.txt"))
  ,(Lang
"zh_u_co_zhuyin", [Int] -> Collation -> Collation
applyCJKOverrides
                       (forall a. Binary a => ByteString -> a
decode $(genCJKOverrides "data/cjk/Zhuyin.txt")) forall a b. (a -> b) -> a -> b
$
                      forall a. Binary a => ByteString -> a
decode $(genCollation "data/tailorings/zh_zhu.txt"))
  ]