diff --git a/src/server/PGFService.hs b/src/server/PGFService.hs index f4028b6d0..e6bcbdaba 100644 --- a/src/server/PGFService.hs +++ b/src/server/PGFService.hs @@ -89,21 +89,30 @@ cpgfMain command (pgf,pc) = "c-linearize" -> out =<< lin # tree % to "c-translate" -> out =<< join (trans # input % from % to % start % limit % trie) "c-flush" -> out =<< flush + "c-grammar" -> out grammar _ -> badRequest "Unknown command" command where flush = liftIO $ do modifyMVar_ pc $ const $ return Map.empty performGC return $ showJSON () + grammar = showJSON $ makeObj + ["name".=C.abstractName pgf, + "startcat".=C.startCat pgf, + "languages".=languages] + where + languages = [makeObj ["name".= l] | (l,_)<-Map.toList (C.languages pgf)] + parse input (from,concr) start mlimit trie = do trees <- parse' input (from,concr) start mlimit - return $ showJSON [makeObj ("from".=from:"trees".=trees :[])] + return $ showJSON [makeObj ("from".=from:"trees".=map tp trees :[])] -- :addTrie trie trees - where + + tp (tree,prob) = makeObj ["tree".=tree,"prob".=prob] parse' input (from,concr) start mlimit = liftIO $ do t <- getCurrentTime - (map fst . maybe id take mlimit . drop start) + (maybe id take mlimit . drop start) # modifyMVar pc (parse'' t) where key = (from,input) @@ -120,13 +129,14 @@ cpgfMain command (pgf,pc) = lin' tree tos = [makeObj ["to".=to,"text".=C.linearize c tree]|(to,c)<-tos] trans input (from,concr) tos start mlimit trie = - do trees <- parse' input (from,concr) start mlimit + do parses <- parse' input (from,concr) start mlimit return $ showJSON [ makeObj ["from".=from, "translations".= [makeObj ["tree".=tree, + "prob".=prob, "linearizations".=lin' tree tos] - | tree <- trees]]] + | (tree,prob) <- parses]]] from = maybe (missing "from") return =<< getLang "from" diff --git a/src/www/js/gftranslate.js b/src/www/js/gftranslate.js index 0043fce61..cf85a28e3 100644 --- a/src/www/js/gftranslate.js +++ b/src/www/js/gftranslate.js @@ -5,30 +5,36 @@ var gftranslate = {} gftranslate.jsonurl="/robust/Translate8.pgf" gftranslate.grammar="Translate" // the name of the grammar -gftranslate.languages="Bul Chi Eng Fin Fre Ger Hin Swe".split(" ") - // hardwired for now gftranslate.call=function(querystring,cont) { http_get_json(gftranslate.jsonurl+querystring,cont) } -// Translate a sentence to the given target language -gftranslate.translate=function(source,from,to,cont) { +// Translate a sentence +gftranslate.translate=function(source,from,to,start,limit,cont) { var encsrc=encodeURIComponent(source) var g=gftranslate.grammar - function extract(result) { - cont(result[0].translations[0].linearizations[0].text) - } + function extract(result) { cont(result[0].translations) } if(encsrc.length<200) // match limit in runtime/c/utils/pgf-server.c gftranslate.call("?command=c-translate&input="+encsrc - +"&from="+g+from+"&to="+g+to+"&limit=1",extract) - else cont("[GF robust parser: sentence too long]") + +"&from="+g+from+"&to="+g+to + +"&start="+start+"&limit="+limit,extract) + else cont([{error:"sentence too long"}]) } // Get functions to test which source and target langauges are supported gftranslate.get_support=function(cont) { - if(!gftranslate.targets) gftranslate.targets=toSet(gftranslate.languages) - function ssupport(code) { return gftranslate.targets[code] } - function tsupport(code) { return gftranslate.targets[code] } - cont(ssupport,tsupport) + function support(code) { return gftranslate.targets[code] } + function init2(grammar_info) { + var ls=grammar_info.languages + gftranslate.grammar=grammar_info.name + var langs=[], pre=gftranslate.grammar, n=pre.length + for(var i=0;i @@ -49,12 +50,14 @@ body:target h1, body:target div.modtime { display: none; }   
+
+

-Last modified: Tue Jan 28 17:38:32 CET 2014 +Last modified: Tue Feb 11 17:37:40 CET 2014
@@ -64,16 +67,21 @@ body:target h1, body:target div.modtime { display: none; }