summaryrefslogtreecommitdiff
path: root/src/www/js/gftranslate.js
blob: 838030c058984ec6bd748813993bd098e1cd31e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

/* --- GF wide coverage translation interface ------------------------------- */

var gftranslate = {}

gftranslate.jsonurl="/robust/Translate10.pgf"
gftranslate.grammar="Translate" // the name of the grammar

gftranslate.call=function(querystring,cont) {
    function errcont(text,code) {
	cont([{translations:[{error:code+" "+text}]}])
    }
    http_get_json(gftranslate.jsonurl+querystring,cont,errcont)
}

// 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) }
    if(encsrc.length<500)
	gftranslate.call("?command=c-translate&input="+encsrc
		      +"&lexer=text&from="+g+from+"&to="+g+to
		      +"&start="+start+"&limit="+limit,extract)
    else cont([{error:"sentence too long"}])
}

// Get list of supported languages
gftranslate.get_languages=function(cont) {
    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<ls.length;i++)
	    if(ls[i].name.substr(0,n)==pre) langs.push(ls[i].name.substr(n))
	gftranslate.targetlist=langs
	cont(langs)
    }
    if(gftranslate.targetlist) cont(gftranslate.targetlist)
    else gftranslate.call("?command=c-grammar",init2)
}

// Get functions to test which source and target langauges are supported
gftranslate.get_support=function(cont) {
    function support(code) { return gftranslate.targets[code] }
    function init2(langs) {
	gftranslate.targets=toSet(langs)
	cont(support,support)
    }
    if(gftranslate.targets) cont(support,support)
    else gftranslate.get_languages(init2)
}