全て対象コード(ASCIIコード+対象)の場合はそのまま、
対象コード以外も含む場合は、隣り合う左の値の対象コードを
改行可能な0文字のスペース+対象コードに置き換える。
https://github.com/flutter/flutter/issues/61081#issuecomment-1103330522
String convertCharWrapString(String str) {
// if (str.contains('')) {
// var _ = 0;
// }
var otherReg = '[^ -~\'’‘]+';
var targetReg = '[ -~\'’‘]+';
String charWrapStr;
if (RegExp(otherReg).hasMatch(str)) {
charWrapStr = '';
for (int i = 0; i < str.length; i++) {
var char = str[i];
if (RegExp(targetReg).hasMatch(char)) {
// 改行可能な0文字のスペース
charWrapStr += '\u200b$char';
} else {
charWrapStr += char;
}
}
} else {
charWrapStr = str;
}
// 改行しないスペースに変換
charWrapStr = charWrapStr.replaceAll(' ', '\u00a0')
// -の前後に改行禁止文字を追加
.replaceAll('-', '\ufeff-\ufeff');
return charWrapStr;
}