diff --git a/src/russian/CatRus.gf b/src/russian/CatRus.gf index 8f5f89b84..e3bf36868 100644 --- a/src/russian/CatRus.gf +++ b/src/russian/CatRus.gf @@ -81,7 +81,7 @@ lincat Numeral = NumeralForms ; Num = NumDet ; Card = NumDet ; - Digits = {s : Str ; size: NumSize} ; + Digits = {s : Str ; size: NumSize; tail: DTail} ; Decimal = {s : Str ; size: NumSize; hasDot : Bool} ; QS = {s : QForm => Str} ; diff --git a/src/russian/NumeralRus.gf b/src/russian/NumeralRus.gf index 7de8c5665..93f2bd6f4 100644 --- a/src/russian/NumeralRus.gf +++ b/src/russian/NumeralRus.gf @@ -412,13 +412,14 @@ lin pot4as5 n = n ; lincat Dig = TDigit ; -lin - IDig d = {s = d.s ; n = d.n ; size = d.size} ; + lin + IDig d = d ** {tail = T1} ; - IIDig d i = { - s = d.s ++ BIND ++ i.s ; + IIDig d i = { + s = d.s ++ spaceIf i.tail ++ i.s ; n = Pl ; - size = i.size + size = i.size ; + tail = inc i.tail } ; D_0 = mk2Dig "0" Num5 ; @@ -448,7 +449,20 @@ lin hasDot=True } ; -oper + oper + spaceIf : DTail -> Str = \t -> case t of { + T3 => SOFT_SPACE ; + _ => BIND + } ; + + inc : DTail -> DTail = \t -> case t of { + T1 => T2 ; + T2 => T3 ; + T3 => T1 + } ; + + oper + mk3Dig : Str -> Str -> NumSize -> TDigit = \c,o,size -> mk4Dig c o Pl size ; mk2Dig : Str -> NumSize -> TDigit = \c,size -> mk3Dig c (c + "o") size ; mk4Dig : Str -> Str -> Number -> NumSize -> TDigit = \c,o,n,size -> { diff --git a/src/russian/ParadigmsRus.gf b/src/russian/ParadigmsRus.gf index 7aa841a67..20e5b7d52 100644 --- a/src/russian/ParadigmsRus.gf +++ b/src/russian/ParadigmsRus.gf @@ -103,13 +103,13 @@ oper mkN : overload { mkN : Str -> N ; -- can guess declension and gender of some nouns given nominative - mkN : Str -> Str -> NRelType -> N ; + mkN : Str -> NRelType -> A -> N ; mkN : Str -> Gender -> Animacy -> N ; - mkN : Str -> Gender -> Animacy -> Str -> NRelType -> N ; -- can guess declension of more nouns + mkN : Str -> Gender -> Animacy -> NRelType -> A -> N ; -- can guess declension of more nouns mkN : Str -> Gender -> Animacy -> (idx : Str) -> N ; -- Fourth parameter is a declension type index (based on Zaliznyak's dictionary), for example, "1*a(1)" - mkN : Str -> Gender -> Animacy -> Str -> NRelType -> (idx : Str) -> N ; + mkN : Str -> Gender -> Animacy -> NRelType -> A -> (idx : Str) -> N ; mkN : Str -> Gender -> Animacy -> (idx : Str) -> MaybeNumber -> N ; - mkN : Str -> Gender -> Animacy -> Str -> NRelType -> (idx : Str) -> MaybeNumber -> N ; -- Same, but number restrictions can be added + mkN : Str -> Gender -> Animacy -> NRelType -> A -> (idx : Str) -> MaybeNumber -> N ; -- Same, but number restrictions can be added mkN : A -> Gender -> Animacy -> N ; -- for nouns, which decline as adjective mkN : A -> Gender -> Animacy -> MaybeNumber -> N ; -- same, with possibility to limit number (usually to only_singular) mkN : N -> (link : Str) -> N -> N ; -- compound noun. Link can end on "-", in which case parts are glued together. First one characterizes the whole. @@ -249,26 +249,26 @@ oper mkN = overload { mkN : Str -> N = \nom -> lin N (guessNounForms nom (guessAdjectiveForms nonExist) GenType); -- the default type of compound - mkN : Str -> Str-> NRelType -> N - = \nom, rel, rt -> lin N (guessNounForms nom (guessAdjectiveForms rel) rt) ; - mkN : Str -> Animacy -> Str -> NRelType -> N - = \nom,anim,rel,rt -> lin N (guessNounForms nom (guessAdjectiveForms rel) rt) ** {anim=anim} ; + mkN : Str -> NRelType -> A -> N + = \nom, rt, rel -> lin N (guessNounForms nom rel rt) ; + mkN : Str -> Animacy -> NRelType -> A -> N + = \nom,anim,rt,rel -> lin N (guessNounForms nom rel rt) ** {anim=anim} ; mkN : Str -> Gender -> Animacy -> N = \nom, g, anim -> lin N (guessLessNounForms nom g anim (guessAdjectiveForms nonExist) GenType) ; - mkN : Str -> Gender -> Animacy -> Str -> NRelType -> N - = \nom, g, anim, rel, rt -> lin N (guessLessNounForms nom g anim (guessAdjectiveForms rel) rt) ; + mkN : Str -> Gender -> Animacy -> NRelType -> A -> N + = \nom, g, anim, rt, rel -> lin N (guessLessNounForms nom g anim rel rt) ; mkN : Str -> Gender -> Animacy -> Z.ZNIndex -> N = \word, g, anim, z -> lin N (noMinorCases (Z.makeNoun word g anim (guessAdjectiveForms nonExist) GenType z)) ; - mkN : Str -> Gender -> Animacy -> Str -> NRelType -> Z.ZNIndex -> N - = \word, g, anim, rel, rt, z -> lin N (noMinorCases (Z.makeNoun word g anim (guessAdjectiveForms rel) rt z)) ; + mkN : Str -> Gender -> Animacy -> NRelType -> A -> Z.ZNIndex -> N + = \word, g, anim, rt, rel, z -> lin N (noMinorCases (Z.makeNoun word g anim rel rt z)) ; mkN : Str -> Gender -> Animacy -> Str -> N = \word, g, anim, zi -> lin N (noMinorCases (Z.makeNoun word g anim (guessAdjectiveForms nonExist) GenType (Z.parseIndex zi))) ; - mkN : Str -> Gender -> Animacy -> Str -> NRelType -> Str -> N - = \word, g, anim, rel, rt, zi -> lin N (noMinorCases (Z.makeNoun word g anim (guessAdjectiveForms rel) rt (Z.parseIndex zi))) ; + mkN : Str -> Gender -> Animacy -> NRelType -> A -> Str -> N + = \word, g, anim, rt, rel, zi -> lin N (noMinorCases (Z.makeNoun word g anim rel rt (Z.parseIndex zi))) ; mkN : Str -> Gender -> Animacy -> Str -> MaybeNumber -> N = \word, g, anim, zi, mbn -> lin N (applyMaybeNumber ((noMinorCases (Z.makeNoun word g anim (guessAdjectiveForms nonExist) GenType (Z.parseIndex zi))) ** {mayben=mbn})) ; - mkN : Str -> Gender -> Animacy -> Str -> NRelType -> Str -> MaybeNumber -> N - = \word, g, anim, rel, rt, zi, mbn -> lin N (applyMaybeNumber ((noMinorCases (Z.makeNoun word g anim (guessAdjectiveForms rel) rt (Z.parseIndex zi))) ** {mayben=mbn})) ; + mkN : Str -> Gender -> Animacy -> NRelType -> A -> Str -> MaybeNumber -> N + = \word, g, anim, rt, rel, zi, mbn -> lin N (applyMaybeNumber ((noMinorCases (Z.makeNoun word g anim rel rt (Z.parseIndex zi))) ** {mayben=mbn})) ; mkN : A -> Gender -> Animacy -> N = \a, g, anim -> lin N (makeNFFromAF a g anim) ; mkN : A -> Gender -> Animacy -> MaybeNumber -> N