diff --git a/contrib/summerschool/foods/FoodsEng.gf b/contrib/summerschool/foods/FoodsEng.gf index dae3ed54c..e7359a4ff 100644 --- a/contrib/summerschool/foods/FoodsEng.gf +++ b/contrib/summerschool/foods/FoodsEng.gf @@ -1,6 +1,7 @@ -- (c) 2009 Aarne Ranta under LGPL concrete FoodsEng of Foods = { + flags language = en_US; lincat Comment, Quality = {s : Str} ; Kind = {s : Number => Str} ; diff --git a/contrib/summerschool/foods/FoodsHin.gf b/contrib/summerschool/foods/FoodsHin.gf deleted file mode 100644 index 7b114fc81..000000000 --- a/contrib/summerschool/foods/FoodsHin.gf +++ /dev/null @@ -1,75 +0,0 @@ --- (c) 2009 Aarne Ranta under LGPL - -concrete FoodsHin of Foods = { - - flags coding=utf8 ; - - param - Gender = Masc | Fem ; - Number = Sg | Pl ; - lincat - Comment = {s : Str} ; - Item = {s : Str ; g : Gender ; n : Number} ; - Kind = {s : Number => Str ; g : Gender} ; - Quality = {s : Gender => Number => Str} ; - lin - Pred item quality = { - s = item.s ++ quality.s ! item.g ! item.n ++ copula item.n - } ; - This kind = {s = "यह" ++ kind.s ! Sg ; g = kind.g ; n = Sg} ; - That kind = {s = "वह" ++ kind.s ! Sg ; g = kind.g ; n = Sg} ; - These kind = {s = "ये" ++ kind.s ! Pl ; g = kind.g ; n = Pl} ; - Those kind = {s = "वे" ++ kind.s ! Pl ; g = kind.g ; n = Pl} ; - Mod quality kind = { - s = \\n => quality.s ! kind.g ! n ++ kind.s ! n ; - g = kind.g - } ; - Wine = regN "मदिरा" ; - Cheese = regN "पनीर" ; - Fish = regN "मछली" ; - Pizza = regN "पिजजा" ; - Very quality = {s = \\g,n => "बहुत" ++ quality.s ! g ! n} ; - Fresh = regAdj "ताज़ा" ; - Warm = regAdj "गरम" ; - Italian = regAdj "इटली" ; - Expensive = regAdj "महंगा" ; - Delicious = regAdj "रुचिकर" ; - Boring = regAdj "पैरिया" ; - - oper - mkN : Str -> Str -> Gender -> {s : Number => Str ; g : Gender} = - \s,p,g -> { - s = table { - Sg => s ; - Pl => p - } ; - g = g - } ; - - regN : Str -> {s : Number => Str ; g : Gender} = \s -> case s of { - lark + "ा" => mkN s (lark + "े") Masc ; - lark + "ी" => mkN s (lark + "ियँ") Fem ; - _ => mkN s s Masc - } ; - - mkAdj : Str -> Str -> Str -> {s : Gender => Number => Str} = \ms,mp,f -> { - s = table { - Masc => table { - Sg => ms ; - Pl => mp - } ; - Fem => \\_ => f - } - } ; - - regAdj : Str -> {s : Gender => Number => Str} = \a -> case a of { - acch + "ा" => mkAdj a (acch + "े") (acch + "ी") ; - _ => mkAdj a a a - } ; - - copula : Number -> Str = \n -> case n of { - Sg => "है" ; - Pl => "हैं" - } ; - - } diff --git a/contrib/summerschool/foods/FoodsSwe.gf b/contrib/summerschool/foods/FoodsSwe.gf index d4a87f01a..cbb35fb98 100644 --- a/contrib/summerschool/foods/FoodsSwe.gf +++ b/contrib/summerschool/foods/FoodsSwe.gf @@ -4,4 +4,4 @@ concrete FoodsSwe of Foods = FoodsI with (Syntax = SyntaxSwe), - (LexFoods = LexFoodsSwe) ; + (LexFoods = LexFoodsSwe) ** {flags language = sv_SE;} ; diff --git a/lib/src/italian/StructuralIta.gf b/lib/src/italian/StructuralIta.gf index 57f6eb71a..c91f7ce80 100644 --- a/lib/src/italian/StructuralIta.gf +++ b/lib/src/italian/StructuralIta.gf @@ -95,7 +95,7 @@ lin in { s = \\_ => quello (elision "quel" "quell'" "quello") - (elision "quelli" "quegli" "quegli") ; + (elision "quei" "quegli" "quegli") ; sp = quello "quello" "quelli" ; s2 = [] } ; diff --git a/src/server/PGFService.hs b/src/server/PGFService.hs index 6f53d3768..6f2e38a33 100644 --- a/src/server/PGFService.hs +++ b/src/server/PGFService.hs @@ -125,10 +125,10 @@ doTranslate pgf input mcat mfrom mto = doTranslateGroup :: PGF -> String -> Maybe PGF.Type -> Maybe PGF.Language -> Maybe PGF.Language -> JSValue doTranslateGroup pgf input mcat mfrom mto = showJSON - [toJSObject [("from", showJSON (PGF.showLanguage from)), - ("to", showJSON (PGF.showLanguage to)), + [toJSObject [("from", showJSON (langOnly (PGF.showLanguage from))), + ("to", showJSON (langOnly (PGF.showLanguage to))), ("linearizations",showJSON - [toJSObject [("text", unlines output)]]) + [toJSObject [("text", doBind alt)] | alt <- output]) ] | (from,trees) <- parse' pgf input mcat mfrom, @@ -140,6 +140,12 @@ doTranslateGroup pgf input mcat mfrom mto = start ls = [(l,[s]) | (l,s) <- ls] more (l,s) = Map.insertWith (\ [x] xs -> if elem x xs then xs else (x : xs)) l s + doBind = unwords . bind . words + bind ws = case ws of + w : "&+" : u : ws2 -> bind ((w ++ u) : ws2) + w : ws2 -> w : bind ws2 + _ -> ws + langOnly = reverse . take 3 . reverse doParse :: PGF -> String -> Maybe PGF.Type -> Maybe PGF.Language -> JSValue