What do “Warning: ignoring null tag in” meaning in geany output?











up vote
0
down vote

favorite












I run on Debian Stretch, only one JavaScript file appear such prompt.
For example:



$ geany
geany: Warning: ignoring null tag in /path/to/magic.js


$ aptitude show geany
Package: geany
Version: 1.29-1
State: installed
Automatically installed: no
Priority: optional
Section: devel
Maintainer: Geany Packaging Team <pkg-geany-team@lists.alioth.debian.org>
Architecture: i386
Uncompressed Size: 3,600 k
Depends: libatk1.0-0 (>= 1.12.4), libc6 (>= 2.15), libcairo2 (>= 1.8.0), libfontconfig1 (>= 2.11), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:3.0), libgdk-pixbuf2.0-0 (>= 2.22.0),
libglib2.0-0 (>= 2.41.1), libgtk2.0-0 (>= 2.22.0), libpango-1.0-0 (>= 1.18.0), libpangocairo-1.0-0 (>= 1.14.0), libpangoft2-1.0-0 (>= 1.14.0), libstdc++6 (>= 5.2),
geany-common (= 1.29-1)
Suggests: libvte9, doc-base
Breaks: geany-plugins-common (< 0.21)
Provides: geany-abi-71, geany-api-230
Description: fast and lightweight IDE
Geany is a small and lightweight integrated development environment. It was developed to provide a small and fast IDE, which has only a few dependencies from other packages. It
is using only the GTK2 toolkit and therefore you need only the GTK2 runtime libraries to run Geany.

The basic features of Geany are:
* syntax highlighting
* code completion
* auto completion of constructs like if, for and while, XML and HTML
* call tips
* folding
* many supported filetypes like C, Java, PHP, HTML, Python, Perl, Pascal
* symbol lists
* embedded terminal emulation
Homepage: http://www.geany.org
Tags: devel::editor, devel::ide, implemented-in::c, interface::graphical, interface::x11, role::program, uitoolkit::gtk, use::editing, works-with::software:source,
works-with::text, works-with::unicode, x11::application


the magic.js file:



/*
>>> Text to Speech Supported Languages <<<
Afrikaans, Albanian, Aragonese, Armenian, Bulgarian, Cantonese, Catalan, Croatian,
Czech, Danish, Dutch, English, Esperanto, Estonian, Farsi, Finnish, French, Georgian,
German, Greek, Hindi, Hungarian, Icelandic, Indonesian, Irish, Italian, Kannada,
Kurdish, Latvian, Lithuanian, Lojban, Macedonian, Malaysian, Malayalam, Mandarin,
Nepalese, Norwegian, Polish, Portuguese, Punjabi, Romanian, Russian, Serbian, Slovak,
Spanish, Swahili, Swedish, Tamil, Turkish, Vietnamese, Welsh.
*/

var TKK_TIMER = null, NOTIFICATION_UPDATE = false;

const languagesNoVoice = [
"az","eu","be","bn","bg","ceb","et","tl","gl","ka","gu","ha","iw","hmn","ig","ga","jw","kn",
"km","lo","lt","ms","mt","mi","mr","mn","ne","fa","pa","sl","so","te","uk","ur","yi","yo","zu"
];

var _links = function (i) {
var _arr = ["https://translate.google.cn/translate_a/single?client=t&sl=auto", "https://translate.google.cn/translate_tts?ie=UTF-8&q="];
return _arr[i];
};

window.setTimeout(function () {
var version = config.welcome.version;
if (version !== app.version()) {
if (app.loadReason === "install" || app.loadReason === "startup") {
if (config.welcome.open) {
app.tab.open(config.welcome.url + "?version=" + app.version() + (version ? "&p=" + version + "&type=upgrade" : "&type=install"));
}
config.welcome.version = app.version();
}
}
}, config.welcome.timeout);

var TTSToken = function (a) {
var k = "", cb = "&", Gf = "=", jd = ".", $b = "+-a^+6", t = "a", Yb = "+", Zb = "+-3^+b+-f";
sM = function (a) {return function () {return a}},
tM = function (a, b) {
for (var c = 0; c < b.length - 2; c += 3) {
var d = b.charAt(c + 2), d = d >= t ? d.charCodeAt(0) - 87 : Number(d), d = b.charAt(c + 1) == Yb ? a >>> d : a << d;
a = b.charAt(c) == Yb ? a + d & 4294967295 : a ^ d
}
return a
},
uM = null;
/* */
var b;
if (null !== uM) b = uM;
else {
b = sM(String.fromCharCode(84));
var c = sM(String.fromCharCode(75));
b = [b(), b()];
b[1] = c();
b = (uM = config.tts.TKK || k) || k;
}
/* */
var d = sM(String.fromCharCode(116)), c = sM(String.fromCharCode(107)), d = [d(), d()];
d[1] = c();
c = cb + d.join(k) + Gf;
d = b.split(jd);
b = Number(d[0]) || 0;
for (var e = , f = 0, g = 0; g < a.length; g++) {
var m = a.charCodeAt(g);
128 > m ? e[f++] = m : (2048 > m ? e[f++] = m >> 6 | 192 : (55296 == (m & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (m = 65536 + ((m & 1023) << 10) + (a.charCodeAt(++g) & 1023), e[f++] = m >> 18 | 240, e[f++] = m >> 12 & 63 | 128) : e[f++] = m >> 12 | 224, e[f++] = m >> 6 & 63 | 128), e[f++] = m & 63 | 128)
}
/* */
a = b;
for (f = 0; f < e.length; f++) a += e[f], a = tM(a, $b);
a = tM(a, Zb);
a ^= Number(d[1]) || 0;
0 > a && (a = (a & 2147483647) + 2147483648);
a %= 1E6;
return (a.toString() + jd + (a ^ b));
};

var splitString = function (str, n) {
var result = ;
if (n) {
var words = str.split(/s+/g), tmp = , count = 0;
for (var i = 0; i < words.length; i++) {
tmp.push(words[i]); count++;
if (count == n || i == words.length - 1) {
result.push(tmp.join(" "));
tmp = , count = 0; /* reset */
}
}
} else result.push(str);
/* */
return result;
};

var startHTML5Voice = function (obj) {
var text = obj.text.split(/. |; |u060c | ? | ! | : | n/g), _tmp = ;
for (var i = 0; i < text.length; i++) {
var subtext = splitString(text[i], null);
for (var j = 0; j < subtext.length; j++) {
if (subtext[j].length) {
_tmp.push(subtext[j]);
}
}
}
text = _tmp;
/* */
app.content_script.send("language-support", "true", true);
app.content_script.send("start-voice", {"url": obj.url, "text": text});
};

var textToSpeech = function (text, lang, url) {
var audioUrl = , audioText = ;
for (var i = 0; i < text.length; i++) {
var subtext = splitString(text[i], 52); /* 13 words max */
for (var j = 0; j < subtext.length; j++) {
if (subtext[j].length) {
var _tmp = subtext[j];
txt = encodeURIComponent(_tmp);
var _url = _links(1) + txt + "&tl=" + lang + "&total=1&idx=0&textlen=" + _tmp.length + "&tk=" + TTSToken(_tmp) + "&client=t";
audioUrl.push(_url);
audioText.push(subtext[j]);
}
}
}
app.content_script.send("audio-text", audioText, true);
app.content_script.send("start-voice", {"url": url, "text": audioUrl});
};

app.content_script.receive("GTTS-TKK", function (e) {
if (e) config.tts.TKK = e;
if (!NOTIFICATION_UPDATE) return;
app.notification("Text-to-Speech (TTS)", e ? "DONE!, you can now close 'translate.google.cn' tab." : "Error! Google TTS API needs to be upgraded. Please use HTML5 Speech API for now (see options page)");
NOTIFICATION_UPDATE = false;
});

var getSourceLang = function (text, callback) {
text = text.trim();
text = text.toLowerCase();
text = encodeURIComponent(text);
var url = _links(0) + '&tl=en' + '&hl=en&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&dt=at&dt=sw&ie=UTF-8&oe=UTF-8&ssel=0&tsel=0&tk=' + TTSToken(decodeURIComponent(text)) + '&q=' + text;
console.log(url)
app.HttpRequest(url, null, null, function (r) {
if (r) {
var _result = r.replace(/,{2}/g, ',null,').replace(/,{2}/g, ',null,').replace(/[,/g, "[null,");
if (_result) {
var arr = ;
try {arr = JSON.parse(_result)} catch (e) {}
if (arr && arr.length) {
if (arr[2]) callback(arr[2]);
else if (arr[8] && arr[8][0] && arr[8][0][0]) callback(arr[8][0][0]);
else callback('en');
}
}
}
else callback(null);
});
};

var startGoogleVoice = function (obj) {
var text = obj.text.split(/. |, |; |u060c |?|!|: |n/g);
getSourceLang(text[0], function (lang) {
if (lang) {
for (var k = 0; k < languagesNoVoice.length; k++) {
if (languagesNoVoice[k] === lang) {
app.content_script.send("language-support", "false", true);
return;
}
}
textToSpeech(text, lang, obj.url);
app.content_script.send("language-support", "true", true);
} else {
if (TKK_TIMER) window.clearTimeout(TKK_TIMER);
TKK_TIMER = window.setTimeout(function () {
app.notification("Text-to-Speech (TTS)", "The Addon is updating Google TTS data from 'translate.google.cn', please wait...");
app.tab.open("https://translate.google.cn/");
NOTIFICATION_UPDATE = true;
}, 1000);
}
});
};

var sendOptionsToPage = function () {
var obj = {
"isBubbleIcon": config.settings.isBubbleIcon,
"isTextSelection": config.settings.selection,
"showHighlight": config.settings.showHighlight,
"enableInputArea": config.settings.enableInputArea,
"placeholderIconShow": config.settings.placeholderIconShow,
"placeholderIconTime": config.settings.placeholderIconTime,
};
/* */
app.content_script.send("options-response", obj, true); /* true: send to all tabs */
};

app.content_script.receive("start-voice", function (obj) {
if (config.settings.method === "google") startGoogleVoice(obj);
else if (config.settings.method === "html5") {
if (obj.html5) startHTML5Voice(obj);
else {
app.notification("Text-to-Speech (TTS)", 'To enable HTML5 TTS API in Firefox please go to "about:config" page and search for "webspeech" keyword. n Once you find "media.webspeech.synth.enabled" item, right-click on it and click "Toggle" to enable it.');
}
}
});

app.content_script.receive("show-notification", function (code) {
if (code === '1') {
app.notification("Text-to-Speech (TTS)", "You have reached the limit of Google text-to-speech API for the current session, n please wait for few seconds or reload the page to continue. n Alternatively, you can enable HTML5 TTS API to continue (please see the options page for more details.)");
}
if (code === '2') {
app.notification("Text-to-Speech (TTS)", "An error has occurred due to HTML5 TTS API bug, please restart the Browser and try again. To prevent this error, please avoid pausing the audio when a sentence is close to its end.");
}
if (code === '3') {
app.notification("Text-to-Speech (TTS)", "An error has occurred due to HTML5 TTS API bug, please restart the Browser and try again. To prevent this error, please avoid canceling the audio (i.e. reloading the page) before it ends.");
}
});

app.options.receive("tts-method", function (method) {
config.settings.method = method;
app.notification("Text-to-Speech (TTS)", "Please reload Tab(s) for the API setting to take effect. Note: in order to enable HTML5 TTS API in Firefox please go to 'about:config' page and search for 'webspeech' keyword. Once you find 'media.webspeech.synth.enables' item, right-click on it and click 'Toggle' to enable it.");
});

app.options.receive("changed", function (o) {
config.set(o.pref, o.value);
app.options.send("set", {"pref": o.pref, "value": config.get(o.pref)});
sendOptionsToPage();
});

app.content_script.receive("options-request", sendOptionsToPage);
app.options.receive("get-tts-method", function () {app.options.send("set-tts-method", config.settings.method)});
app.options.receive("get", function (pref) {app.options.send("set", {"pref": pref, "value": config.get(pref)})});
app.content_script.receive("init", function () {app.content_script.send("init", {"method": config.settings.method})});









share|improve this question













migrated from superuser.com Nov 25 at 8:17


This question came from our site for computer enthusiasts and power users.



















    up vote
    0
    down vote

    favorite












    I run on Debian Stretch, only one JavaScript file appear such prompt.
    For example:



    $ geany
    geany: Warning: ignoring null tag in /path/to/magic.js


    $ aptitude show geany
    Package: geany
    Version: 1.29-1
    State: installed
    Automatically installed: no
    Priority: optional
    Section: devel
    Maintainer: Geany Packaging Team <pkg-geany-team@lists.alioth.debian.org>
    Architecture: i386
    Uncompressed Size: 3,600 k
    Depends: libatk1.0-0 (>= 1.12.4), libc6 (>= 2.15), libcairo2 (>= 1.8.0), libfontconfig1 (>= 2.11), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:3.0), libgdk-pixbuf2.0-0 (>= 2.22.0),
    libglib2.0-0 (>= 2.41.1), libgtk2.0-0 (>= 2.22.0), libpango-1.0-0 (>= 1.18.0), libpangocairo-1.0-0 (>= 1.14.0), libpangoft2-1.0-0 (>= 1.14.0), libstdc++6 (>= 5.2),
    geany-common (= 1.29-1)
    Suggests: libvte9, doc-base
    Breaks: geany-plugins-common (< 0.21)
    Provides: geany-abi-71, geany-api-230
    Description: fast and lightweight IDE
    Geany is a small and lightweight integrated development environment. It was developed to provide a small and fast IDE, which has only a few dependencies from other packages. It
    is using only the GTK2 toolkit and therefore you need only the GTK2 runtime libraries to run Geany.

    The basic features of Geany are:
    * syntax highlighting
    * code completion
    * auto completion of constructs like if, for and while, XML and HTML
    * call tips
    * folding
    * many supported filetypes like C, Java, PHP, HTML, Python, Perl, Pascal
    * symbol lists
    * embedded terminal emulation
    Homepage: http://www.geany.org
    Tags: devel::editor, devel::ide, implemented-in::c, interface::graphical, interface::x11, role::program, uitoolkit::gtk, use::editing, works-with::software:source,
    works-with::text, works-with::unicode, x11::application


    the magic.js file:



    /*
    >>> Text to Speech Supported Languages <<<
    Afrikaans, Albanian, Aragonese, Armenian, Bulgarian, Cantonese, Catalan, Croatian,
    Czech, Danish, Dutch, English, Esperanto, Estonian, Farsi, Finnish, French, Georgian,
    German, Greek, Hindi, Hungarian, Icelandic, Indonesian, Irish, Italian, Kannada,
    Kurdish, Latvian, Lithuanian, Lojban, Macedonian, Malaysian, Malayalam, Mandarin,
    Nepalese, Norwegian, Polish, Portuguese, Punjabi, Romanian, Russian, Serbian, Slovak,
    Spanish, Swahili, Swedish, Tamil, Turkish, Vietnamese, Welsh.
    */

    var TKK_TIMER = null, NOTIFICATION_UPDATE = false;

    const languagesNoVoice = [
    "az","eu","be","bn","bg","ceb","et","tl","gl","ka","gu","ha","iw","hmn","ig","ga","jw","kn",
    "km","lo","lt","ms","mt","mi","mr","mn","ne","fa","pa","sl","so","te","uk","ur","yi","yo","zu"
    ];

    var _links = function (i) {
    var _arr = ["https://translate.google.cn/translate_a/single?client=t&sl=auto", "https://translate.google.cn/translate_tts?ie=UTF-8&q="];
    return _arr[i];
    };

    window.setTimeout(function () {
    var version = config.welcome.version;
    if (version !== app.version()) {
    if (app.loadReason === "install" || app.loadReason === "startup") {
    if (config.welcome.open) {
    app.tab.open(config.welcome.url + "?version=" + app.version() + (version ? "&p=" + version + "&type=upgrade" : "&type=install"));
    }
    config.welcome.version = app.version();
    }
    }
    }, config.welcome.timeout);

    var TTSToken = function (a) {
    var k = "", cb = "&", Gf = "=", jd = ".", $b = "+-a^+6", t = "a", Yb = "+", Zb = "+-3^+b+-f";
    sM = function (a) {return function () {return a}},
    tM = function (a, b) {
    for (var c = 0; c < b.length - 2; c += 3) {
    var d = b.charAt(c + 2), d = d >= t ? d.charCodeAt(0) - 87 : Number(d), d = b.charAt(c + 1) == Yb ? a >>> d : a << d;
    a = b.charAt(c) == Yb ? a + d & 4294967295 : a ^ d
    }
    return a
    },
    uM = null;
    /* */
    var b;
    if (null !== uM) b = uM;
    else {
    b = sM(String.fromCharCode(84));
    var c = sM(String.fromCharCode(75));
    b = [b(), b()];
    b[1] = c();
    b = (uM = config.tts.TKK || k) || k;
    }
    /* */
    var d = sM(String.fromCharCode(116)), c = sM(String.fromCharCode(107)), d = [d(), d()];
    d[1] = c();
    c = cb + d.join(k) + Gf;
    d = b.split(jd);
    b = Number(d[0]) || 0;
    for (var e = , f = 0, g = 0; g < a.length; g++) {
    var m = a.charCodeAt(g);
    128 > m ? e[f++] = m : (2048 > m ? e[f++] = m >> 6 | 192 : (55296 == (m & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (m = 65536 + ((m & 1023) << 10) + (a.charCodeAt(++g) & 1023), e[f++] = m >> 18 | 240, e[f++] = m >> 12 & 63 | 128) : e[f++] = m >> 12 | 224, e[f++] = m >> 6 & 63 | 128), e[f++] = m & 63 | 128)
    }
    /* */
    a = b;
    for (f = 0; f < e.length; f++) a += e[f], a = tM(a, $b);
    a = tM(a, Zb);
    a ^= Number(d[1]) || 0;
    0 > a && (a = (a & 2147483647) + 2147483648);
    a %= 1E6;
    return (a.toString() + jd + (a ^ b));
    };

    var splitString = function (str, n) {
    var result = ;
    if (n) {
    var words = str.split(/s+/g), tmp = , count = 0;
    for (var i = 0; i < words.length; i++) {
    tmp.push(words[i]); count++;
    if (count == n || i == words.length - 1) {
    result.push(tmp.join(" "));
    tmp = , count = 0; /* reset */
    }
    }
    } else result.push(str);
    /* */
    return result;
    };

    var startHTML5Voice = function (obj) {
    var text = obj.text.split(/. |; |u060c | ? | ! | : | n/g), _tmp = ;
    for (var i = 0; i < text.length; i++) {
    var subtext = splitString(text[i], null);
    for (var j = 0; j < subtext.length; j++) {
    if (subtext[j].length) {
    _tmp.push(subtext[j]);
    }
    }
    }
    text = _tmp;
    /* */
    app.content_script.send("language-support", "true", true);
    app.content_script.send("start-voice", {"url": obj.url, "text": text});
    };

    var textToSpeech = function (text, lang, url) {
    var audioUrl = , audioText = ;
    for (var i = 0; i < text.length; i++) {
    var subtext = splitString(text[i], 52); /* 13 words max */
    for (var j = 0; j < subtext.length; j++) {
    if (subtext[j].length) {
    var _tmp = subtext[j];
    txt = encodeURIComponent(_tmp);
    var _url = _links(1) + txt + "&tl=" + lang + "&total=1&idx=0&textlen=" + _tmp.length + "&tk=" + TTSToken(_tmp) + "&client=t";
    audioUrl.push(_url);
    audioText.push(subtext[j]);
    }
    }
    }
    app.content_script.send("audio-text", audioText, true);
    app.content_script.send("start-voice", {"url": url, "text": audioUrl});
    };

    app.content_script.receive("GTTS-TKK", function (e) {
    if (e) config.tts.TKK = e;
    if (!NOTIFICATION_UPDATE) return;
    app.notification("Text-to-Speech (TTS)", e ? "DONE!, you can now close 'translate.google.cn' tab." : "Error! Google TTS API needs to be upgraded. Please use HTML5 Speech API for now (see options page)");
    NOTIFICATION_UPDATE = false;
    });

    var getSourceLang = function (text, callback) {
    text = text.trim();
    text = text.toLowerCase();
    text = encodeURIComponent(text);
    var url = _links(0) + '&tl=en' + '&hl=en&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&dt=at&dt=sw&ie=UTF-8&oe=UTF-8&ssel=0&tsel=0&tk=' + TTSToken(decodeURIComponent(text)) + '&q=' + text;
    console.log(url)
    app.HttpRequest(url, null, null, function (r) {
    if (r) {
    var _result = r.replace(/,{2}/g, ',null,').replace(/,{2}/g, ',null,').replace(/[,/g, "[null,");
    if (_result) {
    var arr = ;
    try {arr = JSON.parse(_result)} catch (e) {}
    if (arr && arr.length) {
    if (arr[2]) callback(arr[2]);
    else if (arr[8] && arr[8][0] && arr[8][0][0]) callback(arr[8][0][0]);
    else callback('en');
    }
    }
    }
    else callback(null);
    });
    };

    var startGoogleVoice = function (obj) {
    var text = obj.text.split(/. |, |; |u060c |?|!|: |n/g);
    getSourceLang(text[0], function (lang) {
    if (lang) {
    for (var k = 0; k < languagesNoVoice.length; k++) {
    if (languagesNoVoice[k] === lang) {
    app.content_script.send("language-support", "false", true);
    return;
    }
    }
    textToSpeech(text, lang, obj.url);
    app.content_script.send("language-support", "true", true);
    } else {
    if (TKK_TIMER) window.clearTimeout(TKK_TIMER);
    TKK_TIMER = window.setTimeout(function () {
    app.notification("Text-to-Speech (TTS)", "The Addon is updating Google TTS data from 'translate.google.cn', please wait...");
    app.tab.open("https://translate.google.cn/");
    NOTIFICATION_UPDATE = true;
    }, 1000);
    }
    });
    };

    var sendOptionsToPage = function () {
    var obj = {
    "isBubbleIcon": config.settings.isBubbleIcon,
    "isTextSelection": config.settings.selection,
    "showHighlight": config.settings.showHighlight,
    "enableInputArea": config.settings.enableInputArea,
    "placeholderIconShow": config.settings.placeholderIconShow,
    "placeholderIconTime": config.settings.placeholderIconTime,
    };
    /* */
    app.content_script.send("options-response", obj, true); /* true: send to all tabs */
    };

    app.content_script.receive("start-voice", function (obj) {
    if (config.settings.method === "google") startGoogleVoice(obj);
    else if (config.settings.method === "html5") {
    if (obj.html5) startHTML5Voice(obj);
    else {
    app.notification("Text-to-Speech (TTS)", 'To enable HTML5 TTS API in Firefox please go to "about:config" page and search for "webspeech" keyword. n Once you find "media.webspeech.synth.enabled" item, right-click on it and click "Toggle" to enable it.');
    }
    }
    });

    app.content_script.receive("show-notification", function (code) {
    if (code === '1') {
    app.notification("Text-to-Speech (TTS)", "You have reached the limit of Google text-to-speech API for the current session, n please wait for few seconds or reload the page to continue. n Alternatively, you can enable HTML5 TTS API to continue (please see the options page for more details.)");
    }
    if (code === '2') {
    app.notification("Text-to-Speech (TTS)", "An error has occurred due to HTML5 TTS API bug, please restart the Browser and try again. To prevent this error, please avoid pausing the audio when a sentence is close to its end.");
    }
    if (code === '3') {
    app.notification("Text-to-Speech (TTS)", "An error has occurred due to HTML5 TTS API bug, please restart the Browser and try again. To prevent this error, please avoid canceling the audio (i.e. reloading the page) before it ends.");
    }
    });

    app.options.receive("tts-method", function (method) {
    config.settings.method = method;
    app.notification("Text-to-Speech (TTS)", "Please reload Tab(s) for the API setting to take effect. Note: in order to enable HTML5 TTS API in Firefox please go to 'about:config' page and search for 'webspeech' keyword. Once you find 'media.webspeech.synth.enables' item, right-click on it and click 'Toggle' to enable it.");
    });

    app.options.receive("changed", function (o) {
    config.set(o.pref, o.value);
    app.options.send("set", {"pref": o.pref, "value": config.get(o.pref)});
    sendOptionsToPage();
    });

    app.content_script.receive("options-request", sendOptionsToPage);
    app.options.receive("get-tts-method", function () {app.options.send("set-tts-method", config.settings.method)});
    app.options.receive("get", function (pref) {app.options.send("set", {"pref": pref, "value": config.get(pref)})});
    app.content_script.receive("init", function () {app.content_script.send("init", {"method": config.settings.method})});









    share|improve this question













    migrated from superuser.com Nov 25 at 8:17


    This question came from our site for computer enthusiasts and power users.

















      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      I run on Debian Stretch, only one JavaScript file appear such prompt.
      For example:



      $ geany
      geany: Warning: ignoring null tag in /path/to/magic.js


      $ aptitude show geany
      Package: geany
      Version: 1.29-1
      State: installed
      Automatically installed: no
      Priority: optional
      Section: devel
      Maintainer: Geany Packaging Team <pkg-geany-team@lists.alioth.debian.org>
      Architecture: i386
      Uncompressed Size: 3,600 k
      Depends: libatk1.0-0 (>= 1.12.4), libc6 (>= 2.15), libcairo2 (>= 1.8.0), libfontconfig1 (>= 2.11), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:3.0), libgdk-pixbuf2.0-0 (>= 2.22.0),
      libglib2.0-0 (>= 2.41.1), libgtk2.0-0 (>= 2.22.0), libpango-1.0-0 (>= 1.18.0), libpangocairo-1.0-0 (>= 1.14.0), libpangoft2-1.0-0 (>= 1.14.0), libstdc++6 (>= 5.2),
      geany-common (= 1.29-1)
      Suggests: libvte9, doc-base
      Breaks: geany-plugins-common (< 0.21)
      Provides: geany-abi-71, geany-api-230
      Description: fast and lightweight IDE
      Geany is a small and lightweight integrated development environment. It was developed to provide a small and fast IDE, which has only a few dependencies from other packages. It
      is using only the GTK2 toolkit and therefore you need only the GTK2 runtime libraries to run Geany.

      The basic features of Geany are:
      * syntax highlighting
      * code completion
      * auto completion of constructs like if, for and while, XML and HTML
      * call tips
      * folding
      * many supported filetypes like C, Java, PHP, HTML, Python, Perl, Pascal
      * symbol lists
      * embedded terminal emulation
      Homepage: http://www.geany.org
      Tags: devel::editor, devel::ide, implemented-in::c, interface::graphical, interface::x11, role::program, uitoolkit::gtk, use::editing, works-with::software:source,
      works-with::text, works-with::unicode, x11::application


      the magic.js file:



      /*
      >>> Text to Speech Supported Languages <<<
      Afrikaans, Albanian, Aragonese, Armenian, Bulgarian, Cantonese, Catalan, Croatian,
      Czech, Danish, Dutch, English, Esperanto, Estonian, Farsi, Finnish, French, Georgian,
      German, Greek, Hindi, Hungarian, Icelandic, Indonesian, Irish, Italian, Kannada,
      Kurdish, Latvian, Lithuanian, Lojban, Macedonian, Malaysian, Malayalam, Mandarin,
      Nepalese, Norwegian, Polish, Portuguese, Punjabi, Romanian, Russian, Serbian, Slovak,
      Spanish, Swahili, Swedish, Tamil, Turkish, Vietnamese, Welsh.
      */

      var TKK_TIMER = null, NOTIFICATION_UPDATE = false;

      const languagesNoVoice = [
      "az","eu","be","bn","bg","ceb","et","tl","gl","ka","gu","ha","iw","hmn","ig","ga","jw","kn",
      "km","lo","lt","ms","mt","mi","mr","mn","ne","fa","pa","sl","so","te","uk","ur","yi","yo","zu"
      ];

      var _links = function (i) {
      var _arr = ["https://translate.google.cn/translate_a/single?client=t&sl=auto", "https://translate.google.cn/translate_tts?ie=UTF-8&q="];
      return _arr[i];
      };

      window.setTimeout(function () {
      var version = config.welcome.version;
      if (version !== app.version()) {
      if (app.loadReason === "install" || app.loadReason === "startup") {
      if (config.welcome.open) {
      app.tab.open(config.welcome.url + "?version=" + app.version() + (version ? "&p=" + version + "&type=upgrade" : "&type=install"));
      }
      config.welcome.version = app.version();
      }
      }
      }, config.welcome.timeout);

      var TTSToken = function (a) {
      var k = "", cb = "&", Gf = "=", jd = ".", $b = "+-a^+6", t = "a", Yb = "+", Zb = "+-3^+b+-f";
      sM = function (a) {return function () {return a}},
      tM = function (a, b) {
      for (var c = 0; c < b.length - 2; c += 3) {
      var d = b.charAt(c + 2), d = d >= t ? d.charCodeAt(0) - 87 : Number(d), d = b.charAt(c + 1) == Yb ? a >>> d : a << d;
      a = b.charAt(c) == Yb ? a + d & 4294967295 : a ^ d
      }
      return a
      },
      uM = null;
      /* */
      var b;
      if (null !== uM) b = uM;
      else {
      b = sM(String.fromCharCode(84));
      var c = sM(String.fromCharCode(75));
      b = [b(), b()];
      b[1] = c();
      b = (uM = config.tts.TKK || k) || k;
      }
      /* */
      var d = sM(String.fromCharCode(116)), c = sM(String.fromCharCode(107)), d = [d(), d()];
      d[1] = c();
      c = cb + d.join(k) + Gf;
      d = b.split(jd);
      b = Number(d[0]) || 0;
      for (var e = , f = 0, g = 0; g < a.length; g++) {
      var m = a.charCodeAt(g);
      128 > m ? e[f++] = m : (2048 > m ? e[f++] = m >> 6 | 192 : (55296 == (m & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (m = 65536 + ((m & 1023) << 10) + (a.charCodeAt(++g) & 1023), e[f++] = m >> 18 | 240, e[f++] = m >> 12 & 63 | 128) : e[f++] = m >> 12 | 224, e[f++] = m >> 6 & 63 | 128), e[f++] = m & 63 | 128)
      }
      /* */
      a = b;
      for (f = 0; f < e.length; f++) a += e[f], a = tM(a, $b);
      a = tM(a, Zb);
      a ^= Number(d[1]) || 0;
      0 > a && (a = (a & 2147483647) + 2147483648);
      a %= 1E6;
      return (a.toString() + jd + (a ^ b));
      };

      var splitString = function (str, n) {
      var result = ;
      if (n) {
      var words = str.split(/s+/g), tmp = , count = 0;
      for (var i = 0; i < words.length; i++) {
      tmp.push(words[i]); count++;
      if (count == n || i == words.length - 1) {
      result.push(tmp.join(" "));
      tmp = , count = 0; /* reset */
      }
      }
      } else result.push(str);
      /* */
      return result;
      };

      var startHTML5Voice = function (obj) {
      var text = obj.text.split(/. |; |u060c | ? | ! | : | n/g), _tmp = ;
      for (var i = 0; i < text.length; i++) {
      var subtext = splitString(text[i], null);
      for (var j = 0; j < subtext.length; j++) {
      if (subtext[j].length) {
      _tmp.push(subtext[j]);
      }
      }
      }
      text = _tmp;
      /* */
      app.content_script.send("language-support", "true", true);
      app.content_script.send("start-voice", {"url": obj.url, "text": text});
      };

      var textToSpeech = function (text, lang, url) {
      var audioUrl = , audioText = ;
      for (var i = 0; i < text.length; i++) {
      var subtext = splitString(text[i], 52); /* 13 words max */
      for (var j = 0; j < subtext.length; j++) {
      if (subtext[j].length) {
      var _tmp = subtext[j];
      txt = encodeURIComponent(_tmp);
      var _url = _links(1) + txt + "&tl=" + lang + "&total=1&idx=0&textlen=" + _tmp.length + "&tk=" + TTSToken(_tmp) + "&client=t";
      audioUrl.push(_url);
      audioText.push(subtext[j]);
      }
      }
      }
      app.content_script.send("audio-text", audioText, true);
      app.content_script.send("start-voice", {"url": url, "text": audioUrl});
      };

      app.content_script.receive("GTTS-TKK", function (e) {
      if (e) config.tts.TKK = e;
      if (!NOTIFICATION_UPDATE) return;
      app.notification("Text-to-Speech (TTS)", e ? "DONE!, you can now close 'translate.google.cn' tab." : "Error! Google TTS API needs to be upgraded. Please use HTML5 Speech API for now (see options page)");
      NOTIFICATION_UPDATE = false;
      });

      var getSourceLang = function (text, callback) {
      text = text.trim();
      text = text.toLowerCase();
      text = encodeURIComponent(text);
      var url = _links(0) + '&tl=en' + '&hl=en&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&dt=at&dt=sw&ie=UTF-8&oe=UTF-8&ssel=0&tsel=0&tk=' + TTSToken(decodeURIComponent(text)) + '&q=' + text;
      console.log(url)
      app.HttpRequest(url, null, null, function (r) {
      if (r) {
      var _result = r.replace(/,{2}/g, ',null,').replace(/,{2}/g, ',null,').replace(/[,/g, "[null,");
      if (_result) {
      var arr = ;
      try {arr = JSON.parse(_result)} catch (e) {}
      if (arr && arr.length) {
      if (arr[2]) callback(arr[2]);
      else if (arr[8] && arr[8][0] && arr[8][0][0]) callback(arr[8][0][0]);
      else callback('en');
      }
      }
      }
      else callback(null);
      });
      };

      var startGoogleVoice = function (obj) {
      var text = obj.text.split(/. |, |; |u060c |?|!|: |n/g);
      getSourceLang(text[0], function (lang) {
      if (lang) {
      for (var k = 0; k < languagesNoVoice.length; k++) {
      if (languagesNoVoice[k] === lang) {
      app.content_script.send("language-support", "false", true);
      return;
      }
      }
      textToSpeech(text, lang, obj.url);
      app.content_script.send("language-support", "true", true);
      } else {
      if (TKK_TIMER) window.clearTimeout(TKK_TIMER);
      TKK_TIMER = window.setTimeout(function () {
      app.notification("Text-to-Speech (TTS)", "The Addon is updating Google TTS data from 'translate.google.cn', please wait...");
      app.tab.open("https://translate.google.cn/");
      NOTIFICATION_UPDATE = true;
      }, 1000);
      }
      });
      };

      var sendOptionsToPage = function () {
      var obj = {
      "isBubbleIcon": config.settings.isBubbleIcon,
      "isTextSelection": config.settings.selection,
      "showHighlight": config.settings.showHighlight,
      "enableInputArea": config.settings.enableInputArea,
      "placeholderIconShow": config.settings.placeholderIconShow,
      "placeholderIconTime": config.settings.placeholderIconTime,
      };
      /* */
      app.content_script.send("options-response", obj, true); /* true: send to all tabs */
      };

      app.content_script.receive("start-voice", function (obj) {
      if (config.settings.method === "google") startGoogleVoice(obj);
      else if (config.settings.method === "html5") {
      if (obj.html5) startHTML5Voice(obj);
      else {
      app.notification("Text-to-Speech (TTS)", 'To enable HTML5 TTS API in Firefox please go to "about:config" page and search for "webspeech" keyword. n Once you find "media.webspeech.synth.enabled" item, right-click on it and click "Toggle" to enable it.');
      }
      }
      });

      app.content_script.receive("show-notification", function (code) {
      if (code === '1') {
      app.notification("Text-to-Speech (TTS)", "You have reached the limit of Google text-to-speech API for the current session, n please wait for few seconds or reload the page to continue. n Alternatively, you can enable HTML5 TTS API to continue (please see the options page for more details.)");
      }
      if (code === '2') {
      app.notification("Text-to-Speech (TTS)", "An error has occurred due to HTML5 TTS API bug, please restart the Browser and try again. To prevent this error, please avoid pausing the audio when a sentence is close to its end.");
      }
      if (code === '3') {
      app.notification("Text-to-Speech (TTS)", "An error has occurred due to HTML5 TTS API bug, please restart the Browser and try again. To prevent this error, please avoid canceling the audio (i.e. reloading the page) before it ends.");
      }
      });

      app.options.receive("tts-method", function (method) {
      config.settings.method = method;
      app.notification("Text-to-Speech (TTS)", "Please reload Tab(s) for the API setting to take effect. Note: in order to enable HTML5 TTS API in Firefox please go to 'about:config' page and search for 'webspeech' keyword. Once you find 'media.webspeech.synth.enables' item, right-click on it and click 'Toggle' to enable it.");
      });

      app.options.receive("changed", function (o) {
      config.set(o.pref, o.value);
      app.options.send("set", {"pref": o.pref, "value": config.get(o.pref)});
      sendOptionsToPage();
      });

      app.content_script.receive("options-request", sendOptionsToPage);
      app.options.receive("get-tts-method", function () {app.options.send("set-tts-method", config.settings.method)});
      app.options.receive("get", function (pref) {app.options.send("set", {"pref": pref, "value": config.get(pref)})});
      app.content_script.receive("init", function () {app.content_script.send("init", {"method": config.settings.method})});









      share|improve this question













      I run on Debian Stretch, only one JavaScript file appear such prompt.
      For example:



      $ geany
      geany: Warning: ignoring null tag in /path/to/magic.js


      $ aptitude show geany
      Package: geany
      Version: 1.29-1
      State: installed
      Automatically installed: no
      Priority: optional
      Section: devel
      Maintainer: Geany Packaging Team <pkg-geany-team@lists.alioth.debian.org>
      Architecture: i386
      Uncompressed Size: 3,600 k
      Depends: libatk1.0-0 (>= 1.12.4), libc6 (>= 2.15), libcairo2 (>= 1.8.0), libfontconfig1 (>= 2.11), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:3.0), libgdk-pixbuf2.0-0 (>= 2.22.0),
      libglib2.0-0 (>= 2.41.1), libgtk2.0-0 (>= 2.22.0), libpango-1.0-0 (>= 1.18.0), libpangocairo-1.0-0 (>= 1.14.0), libpangoft2-1.0-0 (>= 1.14.0), libstdc++6 (>= 5.2),
      geany-common (= 1.29-1)
      Suggests: libvte9, doc-base
      Breaks: geany-plugins-common (< 0.21)
      Provides: geany-abi-71, geany-api-230
      Description: fast and lightweight IDE
      Geany is a small and lightweight integrated development environment. It was developed to provide a small and fast IDE, which has only a few dependencies from other packages. It
      is using only the GTK2 toolkit and therefore you need only the GTK2 runtime libraries to run Geany.

      The basic features of Geany are:
      * syntax highlighting
      * code completion
      * auto completion of constructs like if, for and while, XML and HTML
      * call tips
      * folding
      * many supported filetypes like C, Java, PHP, HTML, Python, Perl, Pascal
      * symbol lists
      * embedded terminal emulation
      Homepage: http://www.geany.org
      Tags: devel::editor, devel::ide, implemented-in::c, interface::graphical, interface::x11, role::program, uitoolkit::gtk, use::editing, works-with::software:source,
      works-with::text, works-with::unicode, x11::application


      the magic.js file:



      /*
      >>> Text to Speech Supported Languages <<<
      Afrikaans, Albanian, Aragonese, Armenian, Bulgarian, Cantonese, Catalan, Croatian,
      Czech, Danish, Dutch, English, Esperanto, Estonian, Farsi, Finnish, French, Georgian,
      German, Greek, Hindi, Hungarian, Icelandic, Indonesian, Irish, Italian, Kannada,
      Kurdish, Latvian, Lithuanian, Lojban, Macedonian, Malaysian, Malayalam, Mandarin,
      Nepalese, Norwegian, Polish, Portuguese, Punjabi, Romanian, Russian, Serbian, Slovak,
      Spanish, Swahili, Swedish, Tamil, Turkish, Vietnamese, Welsh.
      */

      var TKK_TIMER = null, NOTIFICATION_UPDATE = false;

      const languagesNoVoice = [
      "az","eu","be","bn","bg","ceb","et","tl","gl","ka","gu","ha","iw","hmn","ig","ga","jw","kn",
      "km","lo","lt","ms","mt","mi","mr","mn","ne","fa","pa","sl","so","te","uk","ur","yi","yo","zu"
      ];

      var _links = function (i) {
      var _arr = ["https://translate.google.cn/translate_a/single?client=t&sl=auto", "https://translate.google.cn/translate_tts?ie=UTF-8&q="];
      return _arr[i];
      };

      window.setTimeout(function () {
      var version = config.welcome.version;
      if (version !== app.version()) {
      if (app.loadReason === "install" || app.loadReason === "startup") {
      if (config.welcome.open) {
      app.tab.open(config.welcome.url + "?version=" + app.version() + (version ? "&p=" + version + "&type=upgrade" : "&type=install"));
      }
      config.welcome.version = app.version();
      }
      }
      }, config.welcome.timeout);

      var TTSToken = function (a) {
      var k = "", cb = "&", Gf = "=", jd = ".", $b = "+-a^+6", t = "a", Yb = "+", Zb = "+-3^+b+-f";
      sM = function (a) {return function () {return a}},
      tM = function (a, b) {
      for (var c = 0; c < b.length - 2; c += 3) {
      var d = b.charAt(c + 2), d = d >= t ? d.charCodeAt(0) - 87 : Number(d), d = b.charAt(c + 1) == Yb ? a >>> d : a << d;
      a = b.charAt(c) == Yb ? a + d & 4294967295 : a ^ d
      }
      return a
      },
      uM = null;
      /* */
      var b;
      if (null !== uM) b = uM;
      else {
      b = sM(String.fromCharCode(84));
      var c = sM(String.fromCharCode(75));
      b = [b(), b()];
      b[1] = c();
      b = (uM = config.tts.TKK || k) || k;
      }
      /* */
      var d = sM(String.fromCharCode(116)), c = sM(String.fromCharCode(107)), d = [d(), d()];
      d[1] = c();
      c = cb + d.join(k) + Gf;
      d = b.split(jd);
      b = Number(d[0]) || 0;
      for (var e = , f = 0, g = 0; g < a.length; g++) {
      var m = a.charCodeAt(g);
      128 > m ? e[f++] = m : (2048 > m ? e[f++] = m >> 6 | 192 : (55296 == (m & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (m = 65536 + ((m & 1023) << 10) + (a.charCodeAt(++g) & 1023), e[f++] = m >> 18 | 240, e[f++] = m >> 12 & 63 | 128) : e[f++] = m >> 12 | 224, e[f++] = m >> 6 & 63 | 128), e[f++] = m & 63 | 128)
      }
      /* */
      a = b;
      for (f = 0; f < e.length; f++) a += e[f], a = tM(a, $b);
      a = tM(a, Zb);
      a ^= Number(d[1]) || 0;
      0 > a && (a = (a & 2147483647) + 2147483648);
      a %= 1E6;
      return (a.toString() + jd + (a ^ b));
      };

      var splitString = function (str, n) {
      var result = ;
      if (n) {
      var words = str.split(/s+/g), tmp = , count = 0;
      for (var i = 0; i < words.length; i++) {
      tmp.push(words[i]); count++;
      if (count == n || i == words.length - 1) {
      result.push(tmp.join(" "));
      tmp = , count = 0; /* reset */
      }
      }
      } else result.push(str);
      /* */
      return result;
      };

      var startHTML5Voice = function (obj) {
      var text = obj.text.split(/. |; |u060c | ? | ! | : | n/g), _tmp = ;
      for (var i = 0; i < text.length; i++) {
      var subtext = splitString(text[i], null);
      for (var j = 0; j < subtext.length; j++) {
      if (subtext[j].length) {
      _tmp.push(subtext[j]);
      }
      }
      }
      text = _tmp;
      /* */
      app.content_script.send("language-support", "true", true);
      app.content_script.send("start-voice", {"url": obj.url, "text": text});
      };

      var textToSpeech = function (text, lang, url) {
      var audioUrl = , audioText = ;
      for (var i = 0; i < text.length; i++) {
      var subtext = splitString(text[i], 52); /* 13 words max */
      for (var j = 0; j < subtext.length; j++) {
      if (subtext[j].length) {
      var _tmp = subtext[j];
      txt = encodeURIComponent(_tmp);
      var _url = _links(1) + txt + "&tl=" + lang + "&total=1&idx=0&textlen=" + _tmp.length + "&tk=" + TTSToken(_tmp) + "&client=t";
      audioUrl.push(_url);
      audioText.push(subtext[j]);
      }
      }
      }
      app.content_script.send("audio-text", audioText, true);
      app.content_script.send("start-voice", {"url": url, "text": audioUrl});
      };

      app.content_script.receive("GTTS-TKK", function (e) {
      if (e) config.tts.TKK = e;
      if (!NOTIFICATION_UPDATE) return;
      app.notification("Text-to-Speech (TTS)", e ? "DONE!, you can now close 'translate.google.cn' tab." : "Error! Google TTS API needs to be upgraded. Please use HTML5 Speech API for now (see options page)");
      NOTIFICATION_UPDATE = false;
      });

      var getSourceLang = function (text, callback) {
      text = text.trim();
      text = text.toLowerCase();
      text = encodeURIComponent(text);
      var url = _links(0) + '&tl=en' + '&hl=en&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&dt=at&dt=sw&ie=UTF-8&oe=UTF-8&ssel=0&tsel=0&tk=' + TTSToken(decodeURIComponent(text)) + '&q=' + text;
      console.log(url)
      app.HttpRequest(url, null, null, function (r) {
      if (r) {
      var _result = r.replace(/,{2}/g, ',null,').replace(/,{2}/g, ',null,').replace(/[,/g, "[null,");
      if (_result) {
      var arr = ;
      try {arr = JSON.parse(_result)} catch (e) {}
      if (arr && arr.length) {
      if (arr[2]) callback(arr[2]);
      else if (arr[8] && arr[8][0] && arr[8][0][0]) callback(arr[8][0][0]);
      else callback('en');
      }
      }
      }
      else callback(null);
      });
      };

      var startGoogleVoice = function (obj) {
      var text = obj.text.split(/. |, |; |u060c |?|!|: |n/g);
      getSourceLang(text[0], function (lang) {
      if (lang) {
      for (var k = 0; k < languagesNoVoice.length; k++) {
      if (languagesNoVoice[k] === lang) {
      app.content_script.send("language-support", "false", true);
      return;
      }
      }
      textToSpeech(text, lang, obj.url);
      app.content_script.send("language-support", "true", true);
      } else {
      if (TKK_TIMER) window.clearTimeout(TKK_TIMER);
      TKK_TIMER = window.setTimeout(function () {
      app.notification("Text-to-Speech (TTS)", "The Addon is updating Google TTS data from 'translate.google.cn', please wait...");
      app.tab.open("https://translate.google.cn/");
      NOTIFICATION_UPDATE = true;
      }, 1000);
      }
      });
      };

      var sendOptionsToPage = function () {
      var obj = {
      "isBubbleIcon": config.settings.isBubbleIcon,
      "isTextSelection": config.settings.selection,
      "showHighlight": config.settings.showHighlight,
      "enableInputArea": config.settings.enableInputArea,
      "placeholderIconShow": config.settings.placeholderIconShow,
      "placeholderIconTime": config.settings.placeholderIconTime,
      };
      /* */
      app.content_script.send("options-response", obj, true); /* true: send to all tabs */
      };

      app.content_script.receive("start-voice", function (obj) {
      if (config.settings.method === "google") startGoogleVoice(obj);
      else if (config.settings.method === "html5") {
      if (obj.html5) startHTML5Voice(obj);
      else {
      app.notification("Text-to-Speech (TTS)", 'To enable HTML5 TTS API in Firefox please go to "about:config" page and search for "webspeech" keyword. n Once you find "media.webspeech.synth.enabled" item, right-click on it and click "Toggle" to enable it.');
      }
      }
      });

      app.content_script.receive("show-notification", function (code) {
      if (code === '1') {
      app.notification("Text-to-Speech (TTS)", "You have reached the limit of Google text-to-speech API for the current session, n please wait for few seconds or reload the page to continue. n Alternatively, you can enable HTML5 TTS API to continue (please see the options page for more details.)");
      }
      if (code === '2') {
      app.notification("Text-to-Speech (TTS)", "An error has occurred due to HTML5 TTS API bug, please restart the Browser and try again. To prevent this error, please avoid pausing the audio when a sentence is close to its end.");
      }
      if (code === '3') {
      app.notification("Text-to-Speech (TTS)", "An error has occurred due to HTML5 TTS API bug, please restart the Browser and try again. To prevent this error, please avoid canceling the audio (i.e. reloading the page) before it ends.");
      }
      });

      app.options.receive("tts-method", function (method) {
      config.settings.method = method;
      app.notification("Text-to-Speech (TTS)", "Please reload Tab(s) for the API setting to take effect. Note: in order to enable HTML5 TTS API in Firefox please go to 'about:config' page and search for 'webspeech' keyword. Once you find 'media.webspeech.synth.enables' item, right-click on it and click 'Toggle' to enable it.");
      });

      app.options.receive("changed", function (o) {
      config.set(o.pref, o.value);
      app.options.send("set", {"pref": o.pref, "value": config.get(o.pref)});
      sendOptionsToPage();
      });

      app.content_script.receive("options-request", sendOptionsToPage);
      app.options.receive("get-tts-method", function () {app.options.send("set-tts-method", config.settings.method)});
      app.options.receive("get", function (pref) {app.options.send("set", {"pref": pref, "value": config.get(pref)})});
      app.content_script.receive("init", function () {app.content_script.send("init", {"method": config.settings.method})});






      linux debian debian-stretch geany






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 25 at 7:49









      illiterate

      298




      298




      migrated from superuser.com Nov 25 at 8:17


      This question came from our site for computer enthusiasts and power users.






      migrated from superuser.com Nov 25 at 8:17


      This question came from our site for computer enthusiasts and power users.































          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53465771%2fwhat-do-warning-ignoring-null-tag-in-meaning-in-geany-output%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown






























          active

          oldest

          votes













          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53465771%2fwhat-do-warning-ignoring-null-tag-in-meaning-in-geany-output%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Сан-Квентин

          8-я гвардейская общевойсковая армия

          Алькесар