From c2da4129ed0a0ff33cb74d19c286dbf35ecc6bea Mon Sep 17 00:00:00 2001 From: bjorn Date: Mon, 15 Sep 2008 13:33:40 +0000 Subject: [PATCH] Added partial word completion to fastcgi server and update GWT UI accordingly. --- src/server/MainFastCGI.hs | 12 +++++++++--- .../cs/gf/gwt_translate/client/CompletionOracle.java | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/server/MainFastCGI.hs b/src/server/MainFastCGI.hs index d3c223c92..f4b6a920f 100644 --- a/src/server/MainFastCGI.hs +++ b/src/server/MainFastCGI.hs @@ -10,6 +10,7 @@ import Text.JSON import qualified Codec.Binary.UTF8.String as UTF8 (encodeString) import Control.Monad +import Data.Char import qualified Data.Map as Map import Data.Maybe @@ -128,12 +129,17 @@ complete' pgf input mcat mfrom = complete :: PGF -> PGF.Language -> PGF.Category -> String -> [String] complete pgf from cat input = - let ws = words input - prefix = "" -- FIXME + let (ws,prefix) = tokensAndPrefix input state0 = PGF.initState pgf from cat state = foldl PGF.nextState state0 ws compls = PGF.getCompletions state prefix - in Map.keys compls + in [unwords (ws++[c]) ++ " " | c <- Map.keys compls] + +tokensAndPrefix :: String -> ([String],String) +tokensAndPrefix s | not (null s) && isSpace (last s) = (words s, "") + | null ws = ([],"") + | otherwise = (init ws, last ws) + where ws = words s linearize' :: PGF -> Maybe PGF.Language -> PGF.Tree -> [(PGF.Language,String)] linearize' pgf mto tree = diff --git a/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/CompletionOracle.java b/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/CompletionOracle.java index 6f1b4d342..53059aea4 100644 --- a/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/CompletionOracle.java +++ b/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/CompletionOracle.java @@ -34,7 +34,7 @@ public class CompletionOracle extends SuggestOracle { } public String getReplacementString() { - return string + " "; + return string; } } @@ -44,7 +44,7 @@ public class CompletionOracle extends SuggestOracle { public void onCompleteDone(GF.Completions completions) { Collection suggestions = new ArrayList(); for (int i = 0; i < completions.length(); i++) { - String text = request.getQuery() + " " + completions.get(i).getText(); + String text = completions.get(i).getText(); suggestions.add(new CompletionSuggestion(text)); } callback.onSuggestionsReady(request, new SuggestOracle.Response(suggestions));