forked from GitHub/gf-rgl
(Hun) Handle multiword splitting already in Paradigms.
This commit is contained in:
@@ -629,4 +629,19 @@ oper
|
|||||||
_ => endCase c
|
_ => endCase c
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
Multiword : Type = {p1,p2 : Str} ;
|
||||||
|
splitMultiword : Str -> Multiword = \multi_word -> case multi_word of {
|
||||||
|
x + "-" + y
|
||||||
|
=> <x+"-", y> ;
|
||||||
|
v + " " + w + " " + x + " " + y + " " + z
|
||||||
|
=> <v ++ w ++ x ++ y+" ", z> ;
|
||||||
|
w + " " + x + " " + y + " " + z
|
||||||
|
=> <w ++ x ++ y+" ", z> ;
|
||||||
|
x + " " + y + " " + z
|
||||||
|
=> <x ++ y+" ", z> ;
|
||||||
|
y + " " + z
|
||||||
|
=> <y + " ", z> ;
|
||||||
|
_ => <"", multi_word>
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,34 +122,56 @@ oper
|
|||||||
harmO = ResHun.H_o ;
|
harmO = ResHun.H_o ;
|
||||||
|
|
||||||
mkN = overload {
|
mkN = overload {
|
||||||
mkN : Str -> N =
|
mkN : Str -> N = \s ->
|
||||||
\s -> lin N (regNoun s) ;
|
let mw : Multiword = splitMultiword s ;
|
||||||
|
in case mw of {
|
||||||
|
<pr,n> => multiwordN pr (regNoun n)
|
||||||
|
} ;
|
||||||
|
|
||||||
mkN : Str -> Str -> N =
|
mkN : Str -> Str -> N = \n,a ->
|
||||||
\n,a-> lin N (regNounNomAcc n a) ;
|
let mwn : Multiword = splitMultiword n ;
|
||||||
|
mwa : Multiword = splitMultiword a ;
|
||||||
|
in multiwordN mwn.p1 (regNounNomAcc mwn.p2 mwa.p2) ;
|
||||||
|
|
||||||
mkN : Str -> Str -> Str -> N =
|
mkN : Str -> Str -> Str -> N = \n,a,pln ->
|
||||||
\n,a,pln-> lin N (regNounNomAccPl n a pln) ;
|
let mwn : Multiword = splitMultiword n ;
|
||||||
|
mwa : Multiword = splitMultiword a ;
|
||||||
|
mwpln : Multiword = splitMultiword pln ;
|
||||||
|
in multiwordN mwn.p1 (regNounNomAccPl mwn.p2 mwa.p2 mwpln.p2) ;
|
||||||
|
|
||||||
mkN : (x1,_,_,x4 : Str) -> N =
|
mkN : (x1,_,_,x4 : Str) -> N = \n,a,pln,possd ->
|
||||||
\n,a,pln,possd -> lin N (regNoun4 n a pln possd) ;
|
let mwn : Multiword = splitMultiword n ;
|
||||||
|
mwa : Multiword = splitMultiword a ;
|
||||||
|
mwpln : Multiword = splitMultiword pln ;
|
||||||
|
mwpossd : Multiword = splitMultiword possd ;
|
||||||
|
in multiwordN mwn.p1 (regNoun4 mwn.p2 mwa.p2 mwpln.p2 mwpossd.p2) ;
|
||||||
|
|
||||||
mkN : (unoka : Str) -> (testvér : N) -> N = -- Compound noun: e.g. `mkN "unoka" (mkN "testvér")`.
|
mkN : (unoka : Str) -> (testvér : N) -> N = compoundN ;
|
||||||
\prefix,n -> n ** {s = \\x => prefix + n.s ! x} ;
|
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
-- Not in the visible API. TODO remove, improve or document better --
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
-- Worst case with 9 strings.
|
||||||
mkN : (x1,_,_,_,_,_,_,_,x9 : Str) -> N =
|
mkN : (x1,_,_,_,_,_,_,_,x9 : Str) -> N =
|
||||||
\nomsg,accsg,supsg,allsg,nompl,f,g,h,i ->
|
\nomsg,accsg,supsg,allsg,nompl,f,g,h,i ->
|
||||||
lin N (worstCaseNoun nomsg accsg supsg allsg nompl
|
lin N (worstCaseNoun nomsg accsg supsg allsg nompl
|
||||||
f g h i (harmFromSgAll allsg)) ;
|
f g h i (harmFromSgAll allsg)) ;
|
||||||
|
|
||||||
-- mkN : (férfi : Str) -> (harm : Harmony) -> (ak : Str) -> N ; -- Noun with unpredictable vowel harmony and plural allomorph
|
-- Noun with unpredictable vowel harmony and plural allomorph
|
||||||
mkN : Str -> Harmony -> N =
|
|
||||||
\s,h -> lin N (mkNounHarm h (pluralAllomorph s) s) ;
|
|
||||||
|
|
||||||
mkN : Str -> (plural : Str) -> Harmony -> N =
|
mkN : Str -> (plural : Str) -> Harmony -> N =
|
||||||
\s,pl,h -> lin N (mkNounHarm h pl s) ;
|
\s,pl,h -> lin N (mkNounHarm h pl s)
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
multiwordN : Str -> Noun -> N =
|
||||||
|
\prefix,n -> case prefix of {
|
||||||
|
_ + "-" => compoundN prefix n ;
|
||||||
|
_ => lin N (n ** {s = \\x => prefix ++ n.s ! x})
|
||||||
|
} ;
|
||||||
|
|
||||||
|
compoundN : (unoka : Str) -> (testvér : Noun) -> N = -- Compound noun: e.g. `mkN "unoka" (mkN "testvér")`.
|
||||||
|
\prefix,n -> lin N (n ** {s = \\x => prefix + n.s ! x}) ;
|
||||||
|
|
||||||
mkN2 = overload {
|
mkN2 = overload {
|
||||||
mkN2 : Str -> N2 = \s -> lin N2 (regNoun s) ;
|
mkN2 : Str -> N2 = \s -> lin N2 (regNoun s) ;
|
||||||
|
|||||||
Reference in New Issue
Block a user