FM-SBLEX-3.0: src/dalin/OtherRulesSw.hs
----------------------------------------------------------------------
-- |
-- Module : OtherRulesSw
-- Maintainer : Markus Forsberg
-- Stability : (stability)
-- Portability : (portability)
--
--
-------------------------------------------------------------------------
module OtherRulesSw where
import GenRulesSw
import General
import TypesSw
import AdjRulesSw(av1blek)
import NounRulesSw(mk_case,mk_case_v)
-- adverbs
no_comp :: Adverb -> Adverb
no_comp f = missing f [AdComp, AdSMS]
mk_adverb :: [String] -> [String] -> [String] -> Adverb
mk_adverb bra battre bast af = strings $
case af of
(AdverbForm Posit) -> bra
(AdverbForm Compar) -> battre
(AdverbForm Superl) -> bast
AdComp -> concat [[x,x +? "-"] | x <- bra]
AdSMS -> [x +? "-" | x <- bra]
abfrämst :: String -> Adverb
abfrämst främst = no_comp $ mk_adverb [] [] [främst]
abfint :: String -> Adverb
abfint = adjective_to_adverb . av1blek . tk 1
abfort fort = mk_adverb [fort] [fort +? "are"] [fort +? "ast"]
adjective_to_adverb :: Adjective -> Adverb
adjective_to_adverb adj =
giveValues [adj (AF p Nom) | p <- [Pos (Strong (ASgNeutr)),
Comp, Super SupStrong]]
ab_i_no_comp :: String -> AdverbInv
ab_i_no_comp s AdverbInvForm = mkStr s
ab_i_no_comp s _ = nonExist
abm :: String -> AdverbMInv
abm till_exempel _ = mkStr $ till_exempel
-- pronouns
mk_pron_jag :: (Suffixes,Suffixes,Suffixes,Suffixes,Suffixes) -> String -> PronPN
mk_pron_jag (jag,mig,min,mitt,mina) s c = strings $ case c of
PNom -> suff jag
PAcc -> suff mig
PGen (ASgUtr) -> suff min
PGen (ASgNeutr) -> suff mitt
PGen APl -> suff mina
-- map (++ "a") min
where suff = apply_suffixes s
-- pron_refl = mk_pron_jag [] "sig" "sin" "sitt" `missing` [PNom]
mk_pron_han :: (Suffixes, Suffixes, Suffixes) -> String -> PronPN
mk_pron_han (han, honom, hans) s c = strings $ case c of
PNom -> suff han
PAcc -> suff honom
PGen _ -> suff hans
where suff = apply_suffixes s
mk_pron_nagon :: (Suffixes,Suffixes,Suffixes) -> String -> PronAdj
mk_pron_nagon (nagon,nagot,nagra) s (AP gn c) = strings $ map (mk_case c) $
case gn of
ASgUtr -> suff nagon
ASgNeutr -> suff nagot
APl -> suff nagra
where suff = apply_suffixes s
mk_pn_o_den :: String -> PronAdj
mk_pn_o_den den (AP gn c) = strings $
case (gn,c) of
(ASgUtr,Nom) -> [den]
(ASgUtr,Gen) -> [den++"s", de++"ss"]
(ASgNeutr,Nom) -> [de++"t"]
(ASgNeutr,Gen) -> [de++"ss"]
_ -> []
where de = tk 1 den
mk_pron_dylik :: String -> PronAdj
mk_pron_dylik = mk_pron_nagon ([e ""], [e "t"], [e "a"])
-- proper names
mk_pm :: String -> (PNForm -> Str)
mk_pm s (PNForm c) = strings $ mk_case_v c [s]
mk_pm_alice :: String -> (PNForm -> Str)
mk_pm_alice s (PNForm Nom) = strings $ [s]
mk_pm_alice s (PNForm Gen) = strings $ [s,s +? "s"]
mk_pma :: String -> (PNAForm -> Str)
mk_pma s (PNAForm c) = strings $ mk_ccase c s
mk_ccase c s = case c of
Nom -> [s]
Gen | elem (last s) "sxzSXZ" -> [s]
_ -> [s ++ "-s",s ++ ":s",s++"s"]
mk_pmm0 :: [String] -> (PNMForm -> Str)
mk_pmm0 xs (PNMForm c) = strings [unwords ((init xs) ++ [r]) | r <- mk_case_v c [last xs]]
mk_pmam0 :: [String] -> (PNMForm -> Str)
mk_pmam0 xs (PNMForm c) = strings [unwords ((init xs) ++ [g]) | g <- (mk_ccase c (last xs))]
mk_number :: (Suffixes,Suffixes,Suffixes,Suffixes,Suffixes) -> String -> Number
mk_number (en,ett,första,förste,en_c) s (NumC) =
let xs = apply_suffixes s en_c in
strings $ xs ++ [x ++ "-" | x <- xs]
mk_number (en,ett,första,förste,en_c) s (NumF c o) =
strings $ map (mk_case c) $ case o of
Numeral -> apply_suffixes s en
NumeralN -> apply_suffixes s ett
Ordinal NoMasc -> apply_suffixes s första
Ordinal Sex_Masc -> apply_suffixes s förste
nln1 :: String -> Number
nln1 x1 (NumC) = mkStr []
nln1 x1 (NumF c o) =
mkStr $ case (o,c) of
(Ordinal NoMasc,Nom) -> x1 ++ ":a"
(Ordinal NoMasc,Gen) -> x1 ++ ":as"
(Ordinal Sex_Masc,Nom) -> x1 ++ ":es"
(Ordinal Sex_Masc,Gen) -> x1 ++ ":es"
(_,Nom) -> x1
(_,Gen) -> x1 ++ ":s"
mk_number_ng :: (Suffixes,Suffixes,Suffixes,Suffixes,Suffixes) -> String -> Number
mk_number_ng suffs s = missing (mk_number suffs s) [NumF Gen o | o <- values]
{-
mk_number :: String -> String -> Number
mk_number tre tredje (NumF c o) =
mkStr $ mk_case c $ case o of
Ordinal -> tredje
Numeral -> tre
mk_numeral :: String -> Number
mk_numeral tre = mk_number tre []
inv_numeral :: String -> Number
inv_numeral s = missing (mk_numeral s) [NumF Gen Numeral]
inv_ordinal :: String -> Number
inv_ordinal s = missing (mk_ordinal s) [NumF Gen Ordinal]
mk_ordinal :: String -> Number
mk_ordinal tredje = mk_number [] tredje
nrtretton :: String -> Number
nrtretton tretton = mk_number tretton (tretton++"de")
nrtrettio :: String -> Number
nrtrettio trettio = mk_number trettio (trettio++"nde")
nrandra :: String -> Number
nrandra andra = variant (mk_number [] andra)
[(NumF Nom Ordinal, andre),
(NumF Gen Ordinal, andre++"s")]
where andre = tk 1 andra ++ "e"
nrfemte :: String -> Number
nrfemte femte = mk_number [] femte
nriii :: String -> Number
nriii iii (NumF Nom Numeral) = mkStr iii
nriii _ _ = nonExist
-}
-- auxiliary verbs
aux_verb_gen :: Str -> Str -> Str -> Str -> AuxVerb
aux_verb_gen vilja vill ville velat =
giveValues [vilja, vill, ville, velat]
aux_verb :: String -> String -> String -> String -> AuxVerb
aux_verb vilja vill ville velat =
giveValues $ map mkStr [vilja, vill, ville, velat]