40 lines
1.4 KiB
Plaintext
40 lines
1.4 KiB
Plaintext
// https://github.com/promeG/TinyPinyin
|
|
import Pinyin from "com.github.promeg.pinyinhelper.Pinyin";
|
|
import PinyinHelper from "net.sourceforge.pinyin4j.PinyinHelper";
|
|
import HanyuPinyinOutputFormat from 'net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat';
|
|
import HanyuPinyinToneType from 'net.sourceforge.pinyin4j.format.HanyuPinyinToneType';
|
|
import HanyuPinyinVCharType from 'net.sourceforge.pinyin4j.format.HanyuPinyinVCharType';
|
|
import { XuiChineseToPinYinOpts, XuiChineseToPinYinResult } from "../interface.uts"
|
|
import { XuiChineseToPinYinFailImpl } from "../unierror.uts"
|
|
|
|
/** 中文转拼音 */
|
|
export function toPinYin(opts : XuiChineseToPinYinOpts){
|
|
try {
|
|
let c = opts.char;
|
|
if (c == '') {
|
|
let errorIml = new XuiChineseToPinYinFailImpl(1002)
|
|
opts.fail?.(errorIml)
|
|
opts.complete?.(null)
|
|
console.error('TMUI Error:','参数不能为空')
|
|
return;
|
|
}
|
|
let result = Pinyin.toPinyin(c," ",null) as string;
|
|
const fmt = new HanyuPinyinOutputFormat()
|
|
fmt.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
|
|
fmt.setToneType(HanyuPinyinToneType.WITH_TONE_MARK)
|
|
const ok : XuiChineseToPinYinResult = {
|
|
detail: result.toLowerCase(),
|
|
zhuyin: PinyinHelper.toHanyuPinyinString(c,fmt,' ')
|
|
}
|
|
opts.success?.(ok)
|
|
opts.complete?.(ok)
|
|
|
|
} catch (error:Error) {
|
|
opts.fail?.(new XuiChineseToPinYinFailImpl(1001))
|
|
opts.complete?.(null)
|
|
console.error('TMUI Error:',error.message)
|
|
}
|
|
|
|
|
|
}
|