/* --- GF wide coverage translation interface ------------------------------- */ var gftranslate = {} gftranslate.jsonurl="/robust/App14.pgf" gftranslate.grammar="App" // the name of the grammar gftranslate.documented_classes= ["N", "N2", "N3", "A", "A2", "V", "V2", "VV", "VS", "VQ", "VA", "V3", "V2V", "V2S", "V2Q", "V2A", "Adv", "Prep"] gftranslate.call=function(querystring,cont,errcont) { http_get_json(gftranslate.jsonurl+querystring,cont,errcont) } function enc_langs(g,to) { return Array.isArray(to) ? to.map(function(l){return g+l}).join("+") : g+to } function unspace_translations(g,trans) { var langs=[g+"Chi",g+"Jpn",g+"Tha"] for(var i=0;i"+limit } // Translate a sentence gftranslate.translate=function(source,from,to,start,limit,cont) { var g=gftranslate.grammar var lexer="&lexer=text" if(from=="Chi") lexer="",source=source.split("").join(" ") var encsrc=encodeURIComponent(source) function errcont(text,code) { cont([{error:code+" "+text}]) } function extract(result) { cont(unspace_translations(g,result[0].translations)) } var too_long=check_limit(from,encsrc) if(too_long) cont([{error:too_long}]) else gftranslate.call("?command=c-translate&jsontree=true&input="+encsrc +lexer+"&unlexer=text&from="+g+from+"&to="+enc_langs(g,to) +"&start="+start+"&limit="+limit,extract,errcont) } // Translate a sentence word for word (if all else fails...) gftranslate.wordforword=function(source,from,to,cont) { var g=gftranslate.grammar var lexer="&lexer=text" if(from=="Chi") lexer="",source=source.split("").join(" ") var encsrc=encodeURIComponent(source) function errcont(text,code) { cont([{error:code+" "+text}]) } function extract(result) { cont(unspace_translations(g,result[0].translations)) } var enc_to = enc_langs(g,to) var too_long=check_limit(from,encsrc) if(too_long) cont([{error:too_long}]) else gftranslate.call("?command=c-wordforword&input="+encsrc +lexer+"&unlexer=text&from="+g+from+"&to="+enc_to ,extract,errcont) } // Get list of supported languages gftranslate.waiting=[] gftranslate.get_languages=function(cont,errcont) { 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 {quality:String, text:String} function trans_text_quality(text) { var quality="default_quality" switch(text[0]) { case '+': text=text.substr(1).trimLeft(); quality="high_quality"; break; case '*': text=text.substr(1).trimLeft(); quality="low_quality"; break; } return {quality:quality,text:text} } // find_to :: Lang -> [{to:Lang,...}] -> Int function find_to(to,lins) { for(var i=0;i