diff --git a/src/korean/NounKor.gf b/src/korean/NounKor.gf index c9e71d78..9e81e44f 100644 --- a/src/korean/NounKor.gf +++ b/src/korean/NounKor.gf @@ -8,10 +8,19 @@ concrete NounKor of Noun = CatKor ** open ResKor, Prelude in { -- : Det -> CN -> NP DetCN det cn = cn ** {s = - \\c => case det.n of { - -- Pl => det.s ++ cn.s ! Bare ++ BIND ++ plural ! c ; - _ => det.s ++ cn.s ! c } ; - } ; + \\c => + let cns : Str = case det.n of { + -- Pl => n.s ! Bare ++ BIND ++ plural ! c ; + _Sg => cn.s ! c } ; + dets : Str = det.s ! cn.c.origin ; + detnum : Str = case det.numtype of { + IsNum => dets ++ cn.c.s ; + IsDig => glue dets cn.c.s ; + NoNum => dets } ; + in case isNum det of { + True => cns ++ detnum ; + False => detnum ++ cns } + } ; -- : PN -> NP ; -- UsePN pn = pn ** { @@ -50,7 +59,8 @@ concrete NounKor of Noun = CatKor ** open ResKor, Prelude in { -- : Det -> NP ; DetNP det = det ** { - s = det.sp + s = det.sp ; + c = baseCounter } ; -- MassNP : CN -> NP ; @@ -64,9 +74,8 @@ concrete NounKor of Noun = CatKor ** open ResKor, Prelude in { -- quantifier and an optional numeral can be discerned. -- : Quant -> Num -> Det ; - DetQuant quant num = quant ** { - s = quant.s ++ num.s ! Indep ; - n = num.n + DetQuant quant num = quant ** num ** { + s = \\origin => quant.s ++ num.s ! origin ! Attrib } ; -- : Quant -> Num -> Ord -> Det ; -- these five best @@ -117,10 +126,8 @@ concrete NounKor of Noun = CatKor ** open ResKor, Prelude in { -- OrdNumeralSuperl num a = num ** { } ; -- : Quant - DefArt = baseQuant ** {sp = \\_ => []} ; - - -- : Quant - IndefArt = baseQuant ** {sp = \\_ => []} ; + DefArt, + IndefArt = mkQuant [] [] ; -- : Pron -> Quant -- PossPron pron = diff --git a/src/korean/ParamKor.gf b/src/korean/ParamKor.gf index 8921172f..b7097c86 100644 Binary files a/src/korean/ParamKor.gf and b/src/korean/ParamKor.gf differ diff --git a/src/korean/ResKor.gf b/src/korean/ResKor.gf index 9e07ee37..84fcc2eb 100644 --- a/src/korean/ResKor.gf +++ b/src/korean/ResKor.gf @@ -3,10 +3,20 @@ resource ResKor = ParamKor ** open Prelude, Predef, ParamKor in { -------------------------------------------------------------------------------- -- Nouns oper + Counter : Type = { + s : Str ; + origin : NumOrigin + } ; + + baseCounter : Counter = { + s = "개" ; + origin = NK + } ; Noun : Type = { s : NForm => Str ; - p : Phono + p : Phono ; + c : Counter ; } ; Noun2 : Type = Noun ; -- TODO eventually more parameters? Noun3 : Type = Noun ; @@ -19,6 +29,7 @@ oper mkNoun : Str -> Noun = \str -> { s = \\cas => str + allomorph cas str ; p = if_then_else Phono (vowFinal str) Vowel Consonant ; + c = baseCounter } ; useN : Noun -> CNoun = \n -> n ; @@ -58,28 +69,32 @@ oper -- Det, Quant, Card, Ord BaseQuant : Type = { - s : Str ; isPoss : Bool ; p : Phono } ; Determiner : Type = BaseQuant ** { + s : NumOrigin => Str ; -- Chosen by the counter of CN sp : NForm => Str ; n : Number ; --- numtype : NumType ; -- number as in "5" or "Sg/Pl", often makes a difference in lots of things + numtype : NumType ; -- Whether its Num component is digit, numeral or Sg/Pl } ; Quant : Type = BaseQuant ** { + s : Str ; sp : NForm => Str ; } ; Num : Type = { - s : DForm => Str ; -- independent or attribute - n : Number + s : NumOrigin -- Sino-Korean or native Korean + => DForm -- Independent or attribute + => Str ; + n : Number ; + numtype : NumType ; -- Digit, numeral or Sg/Pl } ; baseNum : Num = { - s = \\_ => [] ; + s = \\_,_ => [] ; n = Sg ; numtype = NoNum } ; @@ -89,7 +104,6 @@ oper } ; baseQuant : BaseQuant = { - s = [] ; isPoss = False ; p = Vowel ; } ;