183 lines
4.9 KiB
JavaScript
183 lines
4.9 KiB
JavaScript
/*
|
|
* (c) Copyright Ascensio System SIA 2010-2024
|
|
*
|
|
* This program is a free software product. You can redistribute it and/or
|
|
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
|
* version 3 as published by the Free Software Foundation. In accordance with
|
|
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
|
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
|
* of any third-party rights.
|
|
*
|
|
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
|
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
|
*
|
|
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
|
|
* street, Riga, Latvia, EU, LV-1050.
|
|
*
|
|
* The interactive user interfaces in modified source and object code versions
|
|
* of the Program must display Appropriate Legal Notices, as required under
|
|
* Section 5 of the GNU AGPL version 3.
|
|
*
|
|
* Pursuant to Section 7(b) of the License you must retain the original Product
|
|
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
|
* grant you any rights under trademark law for use of our trademarks.
|
|
*
|
|
* All the Product's GUI elements, including illustrations and icon sets, as
|
|
* well as technical writing content are licensed under the terms of the
|
|
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
|
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
|
*
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
AscCommon.isLeadingSurrogateChar = function(nCharCode)
|
|
{
|
|
return (nCharCode >= 0xD800 && nCharCode <= 0xDFFF);
|
|
};
|
|
AscCommon.decodeSurrogateChar = function(nLeadingChar, nTrailingChar)
|
|
{
|
|
if (nLeadingChar < 0xDC00 && nTrailingChar >= 0xDC00 && nTrailingChar <= 0xDFFF)
|
|
return 0x10000 + ((nLeadingChar & 0x3FF) << 10) | (nTrailingChar & 0x3FF);
|
|
else
|
|
return null;
|
|
};
|
|
|
|
AscCommon.spellcheckGetLanguages = function()
|
|
{
|
|
return {
|
|
"1068" : "az_Latn_AZ",
|
|
"1026" : "bg_BG",
|
|
"1027" : "ca_ES",
|
|
"2051" : "ca_ES_valencia",
|
|
"1029" : "cs_CZ",
|
|
"1030" : "da_DK",
|
|
"3079" : "de_AT",
|
|
"2055" : "de_CH",
|
|
"1031" : "de_DE",
|
|
"1032" : "el_GR",
|
|
"3081" : "en_AU",
|
|
"4105" : "en_CA",
|
|
"2057" : "en_GB",
|
|
"1033" : "en_US",
|
|
"7177" : "en_ZA",
|
|
"3082" : "es_ES",
|
|
"1069" : "eu_ES",
|
|
"1036" : "fr_FR",
|
|
"1110" : "gl_ES",
|
|
"1050" : "hr_HR",
|
|
"1038" : "hu_HU",
|
|
"1057" : "id_ID",
|
|
"1040" : "it_IT",
|
|
"1087" : "kk_KZ",
|
|
"1042" : "ko_KR",
|
|
"1134" : "lb_LU",
|
|
"1063" : "lt_LT",
|
|
"1062" : "lv_LV",
|
|
"1104" : "mn_MN",
|
|
"1044" : "nb_NO",
|
|
"1043" : "nl_NL",
|
|
"2068" : "nn_NO",
|
|
"1154" : "oc_FR",
|
|
"1045" : "pl_PL",
|
|
"1046" : "pt_BR",
|
|
"2070" : "pt_PT",
|
|
"1048" : "ro_RO",
|
|
"1049" : "ru_RU",
|
|
"1051" : "sk_SK",
|
|
"1060" : "sl_SI",
|
|
"10266" : "sr_Cyrl_RS",
|
|
"9242" : "sr_Latn_RS",
|
|
"1053" : "sv_SE",
|
|
"1055" : "tr_TR",
|
|
"1058" : "uk_UA",
|
|
"2115" : "uz_Cyrl_UZ",
|
|
"1091" : "uz_Latn_UZ",
|
|
"1066" : "vi_VN",
|
|
"2067" : "nl_NL" // nl_BE
|
|
};
|
|
};
|
|
var g_languages = {};
|
|
|
|
AscCommon.loadScript = function(url, onSuccess, onError)
|
|
{
|
|
var script = document.createElement('script');
|
|
script.type = 'text/javascript';
|
|
script.src = url;
|
|
script.onload = onSuccess;
|
|
script.onerror = onError;
|
|
|
|
// Fire the loading
|
|
document.head.appendChild(script);
|
|
};
|
|
|
|
function doHyphenation()
|
|
{
|
|
let inputWord = document.getElementById("input").value;
|
|
|
|
for (let iter = inputWord.getUnicodeIterator(); iter.check(); iter.next())
|
|
{
|
|
AscHyphenation.addCodePoint(iter.value());
|
|
}
|
|
|
|
let positions = AscHyphenation.hyphenate(inputWord);
|
|
positions.push(100000);
|
|
AscHyphenation.clear();
|
|
|
|
let currentUnicodeIndex = 0;
|
|
let iterWord = inputWord.getUnicodeIterator();
|
|
let result = "";
|
|
for (let i = 0, count = positions.length; i < count; i++)
|
|
{
|
|
let posLast = positions[i];
|
|
while (currentUnicodeIndex < posLast && iterWord.check())
|
|
{
|
|
result += String.fromCodePoint(iterWord.value());
|
|
++currentUnicodeIndex;
|
|
iterWord.next();
|
|
}
|
|
|
|
if (i != (count - 1))
|
|
result += "=";
|
|
}
|
|
|
|
document.getElementById("output").value = result;
|
|
}
|
|
|
|
|
|
window.addEventListener("load", function() {
|
|
|
|
AscFonts.load(null, function() {}, function() {});
|
|
|
|
let langs = AscCommon.spellcheckGetLanguages();
|
|
for (let i in langs)
|
|
{
|
|
let langName = langs[i];
|
|
let langInt = parseInt(i);
|
|
if (!g_languages[langName])
|
|
g_languages[langName] = langInt;
|
|
else
|
|
g_languages[langName + "_addition"] = langInt;
|
|
}
|
|
|
|
let content = "";
|
|
for (let i in g_languages)
|
|
{
|
|
content += ("<option value=\"" + i + "\">" + i + "</option>");
|
|
}
|
|
document.getElementById("id_lang").innerHTML = content;
|
|
document.getElementById("id_lang").value = "en_US";
|
|
|
|
document.getElementById("id_go").onclick = function()
|
|
{
|
|
let langInt = g_languages[document.getElementById("id_lang").value];
|
|
let result = AscHyphenation.setLang(langInt, function(){
|
|
doHyphenation();
|
|
});
|
|
if (result)
|
|
doHyphenation();
|
|
}
|
|
|
|
});
|