pinyin-pro icon indicating copy to clipboard operation
pinyin-pro copied to clipboard

支持叠字符号「々」的注音

Open yisibl opened this issue 11 months ago • 2 comments

功能描述

这是一个特殊功能,建议增加一个选项,默认关闭。

々的读音就是读被反复的字的读音,例如,天々(tiān)向上,这里读前面一个字的音。

  • https://baike.baidu.com/item/%E3%80%85/9045440
  • https://zh.wikipedia.org/wiki/%E5%8F%A0%E5%AD%97%E7%AC%A6%E5%8F%B7

yisibl avatar Mar 21 '24 05:03 yisibl

“自己动手,丰衣足食。”

var resolveIterationMark = function(string) {
  var current = string.charAt(0);
  var result = current;
  for (var i = 1; i < string.length; ++i) {
    if (string.charAt(i) !== '々') {
      current = string.charAt(i);
    }
    result += current;
  }
  return result;
};

warm-ice0x00 avatar Apr 11 '24 18:04 warm-ice0x00

“自己动手,丰衣足食。”

var resolveIterationMark = function(string) {
  var current = string.charAt(0);
  var result = current;
  for (var i = 1; i < string.length; ++i) {
    if (string.charAt(i) !== '々') {
      current = string.charAt(i);
    }
    result += current;
  }
  return result;
};
const resolveIterationMark = (str) => typeof str  === 'string'  
  ? str.split('々').reduce((s,c, i, a)=> a.length===1?s:`${s}${s.slice(-1)}${c}`) 
  : str;

在线测试

import { html } from 'pinyin-pro';
const resolveIterationMark = (str:string) => typeof str  === 'string' && !/^々{1,}$/ig.test(str) 
  ? str.split('々').reduce((s,c, _, a)=> a.length===1?s:`${s}${s.slice(-1)}${c}`) 
  : str;
const htmlString = [
    html(resolveIterationMark('天々向上')),
    html(resolveIterationMark('天々向上,好々学习')),
    html(resolveIterationMark('々')),
    html(resolveIterationMark('々々')),
    html(resolveIterationMark('')),
    html(resolveIterationMark('々天々')),//开头的“々”会被抛弃
    html(resolveIterationMark('施氏食狮史')),
    html(resolveIterationMark('牛逼々々')),
].map(html => html?`<div>${html}</div>`:'<div>&lt;空行&gt;</div>').join('');

document.body.innerHTML = htmlString;

koaqiu avatar Apr 16 '24 17:04 koaqiu