Files
gf-core/examples/letter/LetterHeb.gf
2009-06-13 13:36:41 +00:00

217 lines
7.5 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
concrete LetterHeb of Letter = {
-- (c) Alex Kutsela 2005
flags lexer=textlit ; unlexer=textlit ; coding=utf8 ;
param Gen = masc | fem ;
param Num = sg | pl ;
param Kas = nom | dat | acc ;
param DepNum = depnum | cnum Num ;
param DepGen = depgen | cgen Gen ;
oper SS = {s : Str} ;
oper SSDep = {s : Num => Gen => Str} ; -- needs Num and Gen
oper SSSrc = {s : Str ; n : Num ; g : Gen} ; -- gives Num and Gen
oper SSSrc2 = {s : Num => Gen => Str ; n : DepNum ; g : DepGen} ; -- gives&needs
oper SSDep2 = {s : DepNum => DepGen => Num => Gen => Str} ; -- needs Auth's&Rec's
oper SSSrcGen = {s : Str ; n : Num ; g : Gen} ; -- gives Num and Gen
oper
ss : Str -> SS = \s -> {s = s} ;
regAdj : Str -> Num => Gen => Tok =\s -> table {
sg => table {masc => s; fem => s+"ה"};
pl => table {masc => s+"ים"; fem => s+"ות"}
};
hello : Str -> Num => Str = \s -> table {sg => s ; pl => s} ;
regVerPerf : Str -> Num => Gen => Str = \s ->
table {sg => table {masc => s; fem => s+"ה"};
pl => table {masc => s+"ו"; fem => s+"ו"}
};
ego : Num => Str = table {sg => "אןי" ; pl => "אןחןו" } ;
tu : Num => Gen => Kas => Str =
table {sg => table {fem => table {nom => "את"; dat => "לך"; acc => "אותך"} ;
masc => table {nom => "אתה"; dat => "לך"; acc => "אותך"}
} ;
pl => table {fem => table {nom => "אתן"; dat => "לכן"; acc => "אתכן"} ;
masc => table {nom => "אתם"; dat => "לכם"; acc => "אתכם"}
}
};
hereIam : Num => Str =
table {sg => "הןןי" ; pl => "הןןו" } ;
haveBeen : Str -> Num => Gen => Str = \s ->
table {sg => table {masc => s+"ת"; fem => s+"ת"};
pl => table {masc => s+"תם"; fem => s+"תן"}
};
thatConj = ["ש"] ;
regVer : Str -> Num => Gen => Str = \s ->
table {sg => table {masc => s; fem => s+"ת"};
pl => table {masc => s+"ים"; fem => s+"ות"}
};
constNG : Str -> Num -> Gen -> SSSrc2 = \str,num,gen ->
{s = table {_ => table {_ => str}} ; n = cnum num ; g = cgen gen} ;
dep2num : DepNum -> Num -> Num = \dn,n -> case dn of {
depnum => n ;
cnum cn => cn
} ;
dep2gen : DepGen -> Gen -> Gen = \dg,g -> case dg of {
depgen => case g of {
masc => fem ;
fem => masc
}; -- negative dependence: the author is of opposite sex
cgen cg => cg
} ;
RET = "" ; -- &-
lincat
Letter = SS ;
Recipient = SSSrc ;
Author = SSSrc2 ;
Message = SSDep2 ;
Heading = SSSrc ;
Ending = SSSrc2 ;
Mode = SSDep2 ;
Sentence = SSDep2 ;
NounPhrase = SSSrcGen ;
Position = SSDep ;
lin
MkLetter head mess end =
ss ("," ++ head.s ++ RET ++
mess.s ! end.n ! end.g ! head.n ! head.g ++ RET ++
end.s ! head.n ! head.g) ;
DearRec rec = {s = rec.s ++ regAdj "יקר" ! rec.n ! rec.g;
n = rec.n;
g = rec.g};
PlainRec rec = rec ;
HelloRec rec = {s = hello "שלום" ! rec.n ++ rec.s ; n = rec.n ; g = rec.g} ;
JustHello rec = {s = hello "שלום" ! rec.n ; n = rec.n ; g = rec.g} ;
ModeSent mode sent =
{s =
table {na => table {xa => table {nr => table {xr =>
mode.s ! na ! xa ! nr ! xr ++ sent.s ! na ! xa ! nr ! xr}}}}
} ;
PlainSent sent = sent ;
FormalEnding auth =
{s =
table {n => table {g =>
[", בכבוד רב"] ++ RET ++
auth.s ! n ! g
}} ;
n = auth.n ; g = auth.g} ;
InformalEnding auth =
{s = table {n => table {g => [", בברכה"] ++ RET ++ auth.s ! n ! g}} ;
n = auth.n ; g = auth.g} ;
ColleagueHe = {s = "עמית" ; n = sg ; g = masc} ;
ColleagueShe = {s = "עמיתה" ; n = sg ; g = fem} ;
ColleaguesHe = {s = "עמיתים" ; n = pl ; g = masc} ;
ColleaguesShe = {s = "עמיתות" ; n = pl ; g = fem} ;
DarlingHe = {s = "אהובי" ; n = sg ; g = masc} ;
DarlingShe = {s = "אהובתי" ; n = sg ; g = fem} ;
NameHe s = {s = s.s ; n = sg ; g = masc} ;
NameShe s = {s = s.s ; n = sg ; g = fem} ;
Honour = {s = table {
na => table {
xa => table {
nr => table {
xr => hereIam ! dep2num na nr ++
regVer "מתכבד" ! dep2num na nr ! dep2gen xa xr ++
["להודיע"] ++ tu ! nr ! xr ! dat ++ thatConj
}
}
}
}
} ;
Regret = {s = table {
na => table {
ga => table {
nr => table {
gr => let {dga = dep2gen ga gr ; dna = dep2num na nr} in
ego ! dna ++ regVer "מצטער" ! dna ! dga ++
["להודיע"] ++ tu ! nr ! gr ! dat ++ thatConj
}
}
}
}
} ;
Dean = constNG ["דיקן"] sg masc ;
President = constNG ["ןשיא"] sg masc ;
Mother = constNG ["אמא"] sg fem ;
Name s = constNG s.s sg masc ; ---
Spouse = {s = table {
sg => table {fem => ["בעלך"] ; masc => ["אישתך"]} ;
pl => table {fem => ["בעליכן"] ; masc => ["ןשותיכם"]}
} ; n = depnum ; g = depgen} ;
BePromoted pos = {s = table {
na => table {
xa => table {
nr => table {
xr => haveBeen "קודמ" ! nr !xr ++ "לתפקיד" ++ "של" ++ pos.s ! nr ! xr
}
}
}
}
} ;
GoBankrupt np =
{s = table
{na => table
{xa => table
{nr => table
{xr => np.s ++ regVerPerf "פשט" ! np.n ! np.g ++ "רגל"}
}
}
}
} ;
ILoveYou = {s = table
{na => table
{ga => table
{nr => table
{gr => let {dga = dep2gen ga gr ; dna = dep2num na nr} in
ego ! dna ++ regVer "אוהב" ! dna ! dga ++
tu ! nr ! gr ! acc}
}
}
}
} ;
Company = {s = ["חברתןו"] ; n = sg ; g = fem} ;
Competitor = {s = ["המתחרה הגרוע ביותר שלןו"] ; n = sg ; g = masc} ;
OurCustomers = {s = ["לקוחותיןו"] ; n = pl ; g = masc} ;
Senior = {s = table
{sg => table {g => ["חבר בכיר"]} ;
pl => table {g => ["חברים בכירים"]}
}
} ;
ProjectManager = {s = table {
sg => table {fem => ["מןהלת פרוייקט"]; masc => ["מןהל פרוייקט"]} ;
pl => table {fem => ["מןהלות פרוייקט"]; mask =>["מןהלי פרוייקט"]}
}
} ;
}