module Text.PCLT.CatalogMaths where
import qualified Data.ByteString.Lazy.UTF8.Unified as Lazy (ByteString)
import qualified Data.ByteString.Lazy.UTF8.Unified as B hiding (ByteString)
import Data.Char
import Data.List
import qualified Data.Map as M
import Data.Map (Map, (!))
import Data.Maybe
import Data.MyHelpers
import Data.Word
import Data.Typeable
import Text.ConstraintedLBS
import Text.PCLT.Catalog
import Text.PCLT.Config
import Text.PCLT.CommonTypes
import Text.PCLT.MakeCatalog
import Text.PCLT.SDL
import Text.PCLT.Template
data AddLngTpl_toPCLT_Error =
TplUniquenessViol_APSTPTE TplUniquenessViol_PCLTE
| DefaultLngTplComponentsParamsSetsDiffersFromOnesOfNondefault_APSTPTE DefaultLngTplComponentsParamsSetsDiffersFromOnesOfNondefault_PCLTE
deriving (Show, Typeable)
addLngTpl_toPCLT :: PCLT_ID -> (LanguageName, LocalizedTemplate) -> LocalizableTemplate -> PCLT_InnerConfig -> (LocalizableTemplate, [AddLngTpl_toPCLT_Error])
addLngTpl_toPCLT tpl_id (lng, ldt) pclt cfg =
let dflt_lng = pcsDefaultLanguage cfg
so = pcsStrictOrient_ofParamsAndCmpsts_onDfltLngTplsSets cfg
aswas_ldt_lng_map = pcltLocalizationsMap pclt
dltcpsdfoon_err _tpl_id _lng = DefaultLngTplComponentsParamsSetsDiffersFromOnesOfNondefault_APSTPTE $ DefaultLngTplComponentsParamsSetsDiffersFromOnesOfNondefault_PCLTE _tpl_id _lng
in case M.member lng aswas_ldt_lng_map of
True -> (pclt, [TplUniquenessViol_APSTPTE $ TplUniquenessViol_PCLTE tpl_id [lng]])
False ->
let (mb_dflt_ldt, ldt_lng_map_tocheck, ldt_lng_map_tostay) =
case lng == dflt_lng of
True -> (Just ldt, aswas_ldt_lng_map, M.empty)
False ->
let (mb_dfltlng_ldt, left_to_stay) = takeFromMap dflt_lng aswas_ldt_lng_map
in ( mb_dfltlng_ldt
, M.singleton lng ldt
, left_to_stay
)
in case mb_dflt_ldt of
Nothing -> (pclt { pcltLocalizationsMap = M.union ldt_lng_map_tocheck ldt_lng_map_tostay } , [])
Just dflt_ldt ->
foldr
(\ (lng, ldt) (pclt_accum, errs_accum) ->
case compareStrictOrientationOnDefault tpl_id so ldt dflt_ldt of
True -> (pclt_accum { pcltLocalizationsMap = M.insert lng ldt (pcltLocalizationsMap pclt_accum) }, errs_accum )
False -> (pclt_accum , dltcpsdfoon_err tpl_id lng : errs_accum )
)
(pclt { pcltLocalizationsMap = M.insert dflt_lng dflt_ldt ldt_lng_map_tostay }, [])
(M.toList ldt_lng_map_tocheck)
data AddPCLT_toPCLT_Error =
AddLngTpl_toPCLT_Error_APTTPTE AddLngTpl_toPCLT_Error
| DifferentSDLs_APTTPTE DifferentSDLs_PCLTE
deriving (Show, Typeable)
addPCLT_toPCLT :: PCLT_ID -> LocalizableTemplate -> LocalizableTemplate -> PCLT_InnerConfig -> (LocalizableTemplate, [AddPCLT_toPCLT_Error])
addPCLT_toPCLT tpl_id add_pclt main_pclt cfg =
foldr (\ (lng, added_ldt) (main_pclt_accum, errs_accum) ->
let (new_pclt_accum, new_errs) = addLngTpl_toPCLT tpl_id (lng, added_ldt) main_pclt_accum cfg
in (new_pclt_accum, map AddLngTpl_toPCLT_Error_APTTPTE new_errs ++ errs_accum)
)
( main_pclt
, let sdls@(main_sdl, add_sdl) = (pcltRequiredSDL main_pclt, pcltRequiredSDL add_pclt)
in case add_sdl == main_sdl of
True -> []
False -> [DifferentSDLs_APTTPTE $ DifferentSDLs_PCLTE tpl_id sdls]
)
(M.toList $ pcltLocalizationsMap add_pclt)