/*---辅助功能--------------------------------------------------*/函数langpart(conc,abs){//langpartreturn hasPrefix(conc,abs)?conc.substr(abs.长度):conc;}//查找语言代码(来自源语法中的“flags language=…”)函数langCode(语法,conc){if(!grammar.langCode){var ls=语法语言var langCode={}对于(var i=0;i=img_urls.length)当前=0;i.src=img_urls[当前]}var i=按钮-img(img_urls[0],循环);返回i}函数toggle_img(i){var tmp=i.src;i.src=i.other;i.其他=tmp;}函数setField(形式、名称、值){form[name].value=值;var el=元件(名称);if(el)el.innerHTML=值;}函数open_popup(url,target){var w=window.open(url,target,'toolbar=no,location=no,status=no,menubar=no');w.焦点();}函数opener_element(id){with(window.opener)return元素(id);}函数支持SVG(){return document.implication.hasFeature(“http://www.w3.org/TR/SVG11/feature#基本结构", "1.1")}函数speech_buttons(to3,to2,txt){var voices=window.speechSynthension&&window.sspeechSyntension.getVoices()||[]var-dvs=voices.filter(函数(v){return v.default})函数pick2dash(v){return hasPrefix(v.lang,to2dash)}如果(to2)var pick=函数(v){return v.lang==to2}else if(to3.length==3){var to2dash=平均码(to3)+“-”var选择=选择2破折号}其他{//也许具体语法的名称就是语言的名称//类似于Numerals.pgfvar lang=to3.substr(0,1).toUpperCase()+to3.subs(1).toLowerCase(var代码=语言代码[lang]var to2dash=(代码?codes.code2:to3)+“-”var选择=选择2破折号}函数btn(v){//删除更流利的泰语空格:var txt2=v.lang==“th-th”?txt.split(“”).join(“””):txtvar u=新SpeechSynthesisUtterance(txt2)u.lang=v.lang//如何使用v.voiceURI或v.name?函数speak(){speechSynthesis取消()speechSynthetic.speak(u)}返回按钮(v.lang,speak)}//console.log(voices.length,“voices”)var vs=dvs.filter(pick)if(vs.length==0)vs=voices.filter(pick)//console.log(vs.length,“voices for”+to3+“”+to2)var btns=vs.map(btn)//console.log(btns.length,“语音按钮”)回绕(“span”,btns)}