PCLT-0.1: Text/PCLT/Config.hs
{-
Copyright (C) 2009 Andrejs Sisojevs <andrejs.sisojevs@nextmail.ru>
All rights reserved.
For license and copyright information, see the file COPYRIGHT
-}
--------------------------------------------------------------------------
--------------------------------------------------------------------------
module Text.PCLT.Config where
import qualified Data.ByteString.Lazy.UTF8.Unified as Lazy (ByteString)
import qualified Data.ByteString.Lazy.UTF8.Unified as B hiding (ByteString)
import Data.Int
import Text.PCLT.CommonTypes
import Data.Typeable
----------------------------------------------
data StrictOrient_ofParamsAndCmpsts_onDfltLngTplsSets =
StrictOrient_ofParamsAndCmpsts_onDfltLngTplsSets {
-- | Abbreviation = \"SO\". The exclusions has opposite
-- roles for different values of this parameter.
--
-- * if SO is True , be strict with templates
-- (when adding them and to a catalog) in such manner,
-- that set of composite and set of parameters MUST be
-- the same for ALL language localizations under
-- one template ID; if for a template any set (of
-- parameters or of composites) is different from one
-- determined for template in default language, then this
-- template will be discarded (not included in catalog)
--
-- * if SO is False, don't be strict with templates -
-- different language versions of one same template are
-- allowed to have different sets of composites and
-- parameters
soStrict_IsIt :: Bool
-- |
--
-- * if SO is True , don't be strict with contents of
-- these templates;
--
-- * if SO is False, be strict with contents of
-- ONLY these templates
, soExcludingInComposites :: [PCLT_ID]
-- |
--
-- * if SO is True , don't be strict with occurences of
-- these templates as composites;
--
-- * if SO is False, be strict with occurences of
-- ONLY these templates as composites
, soExcludingComposites :: [PCLT_ID]
-- |
--
-- * if SO is True , don't be strict with
-- these parameters;
--
-- * if SO is False, be strict with
-- ONLY these parameters
, soExcludingParameters :: [PCLT_ParamKey]
-- |
--
-- * if SO is True , don't be strict with these
-- referenced parameters in referenced templates;
--
-- * if SO is False, be strict with ONLY these
-- referenced parameters in referenced templates
, soExcludingCompComposites :: [(PCLT_ID, PCLT_ID)]
-- |
--
-- * if SO is True , don't be strict with these
-- referenced composites in referenced templates;
--
-- * if SO is False, be strict with ONLY these
-- referenced composites in referenced templates
, soExcludingCompParameters :: [(PCLT_ID, PCLT_ParamKey)]
}
deriving (Read, Show, Typeable)
----------------------------------------------
type PCLT_InnerConfigID = Int
-- | NOT USED, RESERVED FOR FUTURE VERSIONS OF PCLT!
type ReparsingDepth = Int
data PCLT_InnerConfig = PCLT_InnerConfig {
pcsInnerConfigID :: PCLT_InnerConfigID
-- | Symbols sequence denoting wrapping parentheses (identical
-- for both - openning ang closing), that are to be put
-- around *composite* name in a template text.
, pcsCompositePlaceholderWrapper :: Lazy.ByteString
-- | Symbols sequence denoting wrapping parentheses (identical
-- for both - openning ang closing), that are to be put
-- around *parameter* name in a template text.
, pcsParameterPlaceholderWrapper :: Lazy.ByteString
-- | For case, when representation reciever uses detalization
-- level, that isn't enough to meet requirement specified by
-- the template (from which representation was to be made):
-- symbols sequence, that PCLT engine must place
-- instead of content from template/composite.
, pcsInsuficientDetLevelPlaceholder :: Lazy.ByteString
-- | Symbols sequence denoting wrapping parentheses (identical
-- for both - openning ang closing), that are to be put
-- (by PCLT engine) in representation, where it failed to
-- make a proper representation from a template piece
-- (composite or parameter).
, pcsMarkingErrorPlaceholderWrapper :: Lazy.ByteString
-- | Catalog default (primary) language.
, pcsDefaultLanguage :: LanguageName
-- | Object:
--
-- 1. Should all localizations of template be strictly oriented
-- on localization in default (primary) language? (in case of
-- such orientation, NO template localized in a nondefault
-- language is allowed to have sets of composites and
-- parameters different from ones specified for template
-- localization in the default language)
--
-- 2. Exclusions - when not to be strict with templates
-- structures, - if strictness is on;
-- or when to be strict, - if strictness is off.
, pcsStrictOrient_ofParamsAndCmpsts_onDfltLngTplsSets :: StrictOrient_ofParamsAndCmpsts_onDfltLngTplsSets
-- | Is it allowed to demand representations from catalog, when
-- referenced template/composite ID isn't known in given
-- catalog?
-- In case, if allowed, on place of unknown composite
-- the engine (when making representation) will simply put
-- it's (unknown) ID (given that recievers detailization level
-- statisfies a requirement: it must be maximal (infinitely
-- big)), followed by (if enabled by other config parameter)
-- all the parameters used by current instaniation.
, pcsAllowUntemplatedMessages :: Bool
-- | Is it allowed to demand representations from catalog, when
-- referenced template/composite ID is persistent in catalog,
-- but not in representation language?
-- In case, if allowed, on place of unknown composite
-- the engine (when making representation) will simply put
-- it's (unknown) ID (given that recievers detailization level
-- statisfies a requirement: it must be maximal (infinitely
-- big)), followed by (if enabled by other config parameter)
-- all the parameters used by current instaniation.
, pcsAllowUntemplatedLocalizationsOfMessages :: Bool
-- | If it's allowed to require representation of
-- a template/composite (or it's localisation), that is absent
-- in catalog then (given that reciever's detailization level
-- statisfies a requirement: it must be maximal (infinitely
-- big)) together with it's (unknown composite) ID:
-- should there also be put all the parameters (array of
-- name:value pairs), used by current instaniation?
, pcsShowAdhocParamsInResultOfUntemplated :: Bool
-- | DEFAULT maximal allowed size of representation resulting from
-- instaniation of a single PCSI. If user gives on the input
-- his ConstraintedLBS with different constraint on size, then his
-- constraint is used instead.
, pcsInstaniationResultMaxSize :: Int64
-- | Is it allowed to give an empty value to the field
-- \"representation detailization level\" ("Text.PCLT.SDL")?
-- If allowed, then it's value will be chosen automatically
-- by the margin
-- depending on modus: maximal (\"+inf\") in case, when it's a
-- requirement by a template, or minimal (\"zero\"), when it's
-- an assigment to a reciever of representation
, pcsAllowEmptySDL_parseItByModusMargin :: Bool
-- | Is it allowed to give an unreadable value to the field
-- \"representation detailization level\" ("Text.PCLT.SDL")?
-- If allowed,
-- then it's value will be chosen automatically by the margin
-- depending on modus: maximal (\"+inf\") in case, when it's a
-- requirement by a template, or minimal (\"zero\"), when it's
-- an assigment to a reciever of representation
, pcsAllowUnreadableSDL_parseIdByModusMargin :: Bool
-- | If @pcsi2text@ ("Text.PCLT.MakeMessage") function fails to
-- determine an SDL requiered by used template (due to
-- referential cycle, missing referenced template,
-- @PCLT_SDL_Errornous@ or other reason) - should this failure
-- lead to absolute denial to represent problem template, or
-- should the @pcsi2text@ treat it like \"+inf\"
-- (@PCLT_SDL InfinitelyBig_SDL@)? The error will be returned
-- anyway, but question is purely about output representation.
, pcsAllowFailureToDetermineSDL_parseIdByModusMargin :: Bool
-- | Sequence of symbols used, when representing a specialcase
-- of parameter value - @Newline_PV@ ("Text.PCLT.PCSI").
-- (Different OSes use different newline strings: in Linux it's
-- \#10, in M\$ - \#13\#10, MacOS - \#13)
, pcsNewlineLBS :: Lazy.ByteString
-- | NOT USED, RESERVED FOR FUTURE VERSIONS OF PCLT!
-- Maximal allowed depth of reparsing.
, pcsReparsingDepthMax :: ReparsingDepth -- reserved for new parameter value type, won't influence catalog functioning in this version
-- | NOT USED, RESERVED FOR FUTURE VERSIONS OF PCLT!
-- Maximal allowed size of representation resuling from
-- instaniating a reparsing result.
, pcsReparseParameterContentMaxSize :: Int64 -- reserved for new parameter value type, won't influence catalog functioning in this version
} deriving (Show, Typeable)
{- |
> PCLT_InnerConfig {
> pcsInnerConfigID = 0
> , pcsCompositePlaceholderWrapper = B.pack "##|"
> , pcsParameterPlaceholderWrapper = B.pack "@@|"
> , pcsInsuficientDetLevelPlaceholder = B.pack "#x#"
> , pcsMarkingErrorPlaceholderWrapper = B.pack "/!E!\"
> , pcsDefaultLanguage = "eng"
> , pcsStrictOrient_ofParamsAndCmpsts_onDfltLngTplsSets =
> StrictOrient_ofParamsAndCmpsts_onDfltLngTplsSets {
> soStrict_IsIt = True
> , soExcludingInComposites = []
> , soExcludingComposites = []
> , soExcludingParameters = []
> , soExcludingCompComposites = []
> , soExcludingCompParameters = []
> }
> , pcsAllowUntemplatedMessages = True
> , pcsAllowUntemplatedLocalizationsOfMessages = True
> , pcsShowAdhocParamsInResultOfUntemplated = True
> , pcsInstaniationResultMaxSize = 10000000
> , pcsAllowEmptySDL_parseItByModusMargin = False
> , pcsAllowUnreadableSDL_parseIdByModusMargin = False
> , pcsAllowFailureToDetermineSDL_parseIdByModusMargin = False
> , pcsNewlineLBS = B.pack "\n"
> }
-}
defaultPCLTInnerConfig :: PCLT_InnerConfig
defaultPCLTInnerConfig = PCLT_InnerConfig {
pcsInnerConfigID = 0
, pcsCompositePlaceholderWrapper = B.pack "##|" -- f.e., "Hello, @@|Name@@|! ##|InvitationComposite##|"
, pcsParameterPlaceholderWrapper = B.pack "@@|"
, pcsInsuficientDetLevelPlaceholder = B.pack "#x#"
, pcsMarkingErrorPlaceholderWrapper = B.pack "/!E!\\"
, pcsDefaultLanguage = "eng"
, pcsStrictOrient_ofParamsAndCmpsts_onDfltLngTplsSets =
StrictOrient_ofParamsAndCmpsts_onDfltLngTplsSets {
soStrict_IsIt = True
, soExcludingInComposites = []
, soExcludingComposites = []
, soExcludingParameters = []
, soExcludingCompComposites = []
, soExcludingCompParameters = []
}
, pcsAllowUntemplatedMessages = True
, pcsAllowUntemplatedLocalizationsOfMessages = True
, pcsShowAdhocParamsInResultOfUntemplated = True
, pcsInstaniationResultMaxSize = 10000000
, pcsAllowEmptySDL_parseItByModusMargin = False
, pcsAllowUnreadableSDL_parseIdByModusMargin = False
, pcsAllowFailureToDetermineSDL_parseIdByModusMargin = False
, pcsNewlineLBS = B.pack "\n"
, pcsReparsingDepthMax = 100
, pcsReparseParameterContentMaxSize = 50000 -- in the next version wanna make reparsing tail-recursive to get rid of this workaroundish cfg param
}