如何在 Google Apps 脚本中以编程方式添加拼音变音符号?
How to add Pinyin diacritics programmatically in Google Apps Script?
我想写一个函数dia
,为提供的字符添加拼音变音符号,例如
dia('a', 1) == 'ā'
dia('a', 2) == 'á'
dia('a', 3) == 'ǎ'
dia('a', 4) == 'à'
而且我不想对所有变体进行硬编码。如何做到这一点?
这个 JavaScript 代码片段适用于网络浏览器;它实现了您描述的功能dia
:
function dia (char, toneNumber)
{
const combiningDiacritics =
[
"\u0304", // COMBINING MACRON
"\u0301", // COMBINING ACUTE ACCENT
"\u030C", // COMBINING CARON
"\u0300" // COMBINING GRAVE ACCENT
];
if (/^[AEIOUÜaeiouü]$/.test (char) && ((toneNumber > 0) && (toneNumber <= combiningDiacritics.length)))
{
char += combiningDiacritics[toneNumber - 1];
char = char.normalize ('NFC');
}
return char;
}
//
console.log (dia ('a', 1)); // -> 'ā'
console.log (dia ('a', 2)); // -> 'á'
console.log (dia ('a', 3)); // -> 'ǎ'
console.log (dia ('a', 4)); // -> 'à'
工作原理:
检查字符和音号的有效性。
将适当的组合变音符号连接到字符。
将结果规范化为组合形式并returns它。
您提到您不想对所有变体进行硬编码,但毕竟只有 48 个变体 (6 x 2 x 4)... 因为 Google Apps 脚本似乎可以使用旧版本JavaScript,你可能别无选择。
这是另一个 JavaScript 片段,它应该以更通用的方式工作:
function dia (char, toneNumber)
{
var conversionTable =
{
"A": [ "Ā", "Á", "Ǎ", "À" ],
"E": [ "Ē", "É", "Ě", "È" ],
"I": [ "Ī", "Í", "Ǐ", "Ì" ],
"O": [ "Ō", "Ó", "Ǒ", "Ò" ],
"U": [ "Ū", "Ú", "Ǔ", "Ù" ],
"Ü": [ "Ǖ", "Ǘ", "Ǚ", "Ǜ" ],
"a": [ "ā", "á", "ǎ", "à" ],
"e": [ "ē", "é", "ě", "è" ],
"i": [ "ī", "í", "ǐ", "ì" ],
"o": [ "ō", "ó", "ǒ", "ò" ],
"u": [ "ū", "ú", "ǔ", "ù" ],
"ü": [ "ǖ", "ǘ", "ǚ", "ǜ" ]
};
if ((char in conversionTable) && ((toneNumber > 0) && (toneNumber <= conversionTable[char].length)))
{
char = conversionTable[char][toneNumber - 1];
}
return char;
}
//
console.log (dia ('a', 1)); // -> 'ā'
console.log (dia ('a', 2)); // -> 'á'
console.log (dia ('a', 3)); // -> 'ǎ'
console.log (dia ('a', 4)); // -> 'à'
我想写一个函数dia
,为提供的字符添加拼音变音符号,例如
dia('a', 1) == 'ā'
dia('a', 2) == 'á'
dia('a', 3) == 'ǎ'
dia('a', 4) == 'à'
而且我不想对所有变体进行硬编码。如何做到这一点?
这个 JavaScript 代码片段适用于网络浏览器;它实现了您描述的功能dia
:
function dia (char, toneNumber)
{
const combiningDiacritics =
[
"\u0304", // COMBINING MACRON
"\u0301", // COMBINING ACUTE ACCENT
"\u030C", // COMBINING CARON
"\u0300" // COMBINING GRAVE ACCENT
];
if (/^[AEIOUÜaeiouü]$/.test (char) && ((toneNumber > 0) && (toneNumber <= combiningDiacritics.length)))
{
char += combiningDiacritics[toneNumber - 1];
char = char.normalize ('NFC');
}
return char;
}
//
console.log (dia ('a', 1)); // -> 'ā'
console.log (dia ('a', 2)); // -> 'á'
console.log (dia ('a', 3)); // -> 'ǎ'
console.log (dia ('a', 4)); // -> 'à'
工作原理:
检查字符和音号的有效性。
将适当的组合变音符号连接到字符。
将结果规范化为组合形式并returns它。
您提到您不想对所有变体进行硬编码,但毕竟只有 48 个变体 (6 x 2 x 4)... 因为 Google Apps 脚本似乎可以使用旧版本JavaScript,你可能别无选择。
这是另一个 JavaScript 片段,它应该以更通用的方式工作:
function dia (char, toneNumber)
{
var conversionTable =
{
"A": [ "Ā", "Á", "Ǎ", "À" ],
"E": [ "Ē", "É", "Ě", "È" ],
"I": [ "Ī", "Í", "Ǐ", "Ì" ],
"O": [ "Ō", "Ó", "Ǒ", "Ò" ],
"U": [ "Ū", "Ú", "Ǔ", "Ù" ],
"Ü": [ "Ǖ", "Ǘ", "Ǚ", "Ǜ" ],
"a": [ "ā", "á", "ǎ", "à" ],
"e": [ "ē", "é", "ě", "è" ],
"i": [ "ī", "í", "ǐ", "ì" ],
"o": [ "ō", "ó", "ǒ", "ò" ],
"u": [ "ū", "ú", "ǔ", "ù" ],
"ü": [ "ǖ", "ǘ", "ǚ", "ǜ" ]
};
if ((char in conversionTable) && ((toneNumber > 0) && (toneNumber <= conversionTable[char].length)))
{
char = conversionTable[char][toneNumber - 1];
}
return char;
}
//
console.log (dia ('a', 1)); // -> 'ā'
console.log (dia ('a', 2)); // -> 'á'
console.log (dia ('a', 3)); // -> 'ǎ'
console.log (dia ('a', 4)); // -> 'à'