したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。

bbs2chreader/chaika 避難所 ★3

1名無しさん:2015/06/26(金) 21:37:03 ID:4p.7y8xU0
◆前スレ
bbs2chreader/chaika 避難所
http://jbbs.shitaraba.net/bbs/read.cgi/computer/44179/1426703154/

660名無しさん:2015/11/23(月) 22:30:26 ID:SmljxsUQ0
>>611>>617についてはまあ自分でどうにかできる人がやってくれ
とりあえずバグがあったので修正
まずは>>611

convSPtoCP: function(aStrings) {
// Apple Color Emoji等の EVS(絵文字バリエーション・シーケンス)は削除
aStrings = aStrings.replace(/&#(?:6503[89]|xfe0[ef]);/ig, '');
// サロゲートペアでない数値参照は文字に変換
aStrings = aStrings.replace(/&#(x[0-9a-f]+|[0-9]+);/ig, function(aStr, aAlfaNum) {
let aValue = parseInt(Number('0' + aAlfaNum).toString(16), 16);
return (aValue > 0x31 && aValue < 0x2F) ? String.fromCharCode(aValue) : !(aValue > 0xD7FF && aValue < 0xE000) ? '&#x' + Number('0' + aAlfaNum).toString(16) + ';' : '&#' + aValue + ';';
});
// サロゲートペアをコードポイントに変換
aStrings = aStrings.replace(/&#([0-9]+);&#([0-9]+);/ig, function(aStr, ahighSP, alowSP) {
let highSP = parseInt(ahighSP, 10);
let lowSP = parseInt(alowSP, 10);
if((highSP > 0xD7FF && highSP < 0xDC00) && (lowSP > 0xDBFF && lowSP < 0xE000)) {
return '&#' + parseInt((((highSP & 0x3FF) << 10) | (lowSP & 0x3FF)) + 0x10000, 10) + ';';
} else {
return aStr;
}
});
return aStrings;
},

661名無しさん:2015/11/23(月) 22:32:58 ID:SmljxsUQ0
>>617

convReftoChar: function(aStrings) {
// Apple Color Emoji等の EVS(絵文字バリエーション・シーケンス)は削除
aStrings = aStrings.replace(/&#(?:6503[89]|xfe0[ef]);/ig, '');
// サロゲートペアではない数値参照を先に文字化
aStrings = aStrings.replace(/&#(x[0-9a-f]+|[0-9]+);/ig, function(aStr, aAlfaNum) {
let aValue = parseInt(Number('0' + aAlfaNum).toString(16), 16);
// サロゲートペア判定
if (aValue > 0xD7FF && aValue < 0xE000)
return '&#' + aValue + ';';
// BMP(0x0000-0xFFFF)以外の文字はサロゲートペアに分解したうえで文字化する
let SMP = parseInt(Number('0' + aAlfaNum).toString(16), 16) - 0x10000;
if (SMP > -1) {
let highSP = (SMP >> 10) + 0xD800;
let lowSP = (SMP % 0x400) + 0xDC00;
return String.fromCharCode(highSP, lowSP);
}
return String.fromCharCode('0' + aAlfaNum);
});
// サロゲートペアの数値参照を文字化
aStrings = aStrings.replace(/&#([0-9]+);&#([0-9]+);/ig, function(aStr, ahighSP, alowSP) {
let highSP = parseInt(ahighSP, 10);
let lowSP = parseInt(alowSP, 10);
return String.fromCharCode(highSP, lowSP);
});
return aStrings;
}

662名無しさん:2015/11/23(月) 22:55:40 ID:SmljxsUQ0
解説めいたもの

>>660>>611の例ではChaikaCore.ioで呼び出してるが影響するのはほぼスレ表示上のみなのでthread.jsに記述して内部呼び出しでもいい

>>661はスレ表示以外全般に影響する
スレ一覧、ログマネージャー、chaikaの履歴、書き込みウィザード、いくつかのポップアップ……
これらではUNICODE追加面の文字は一度サロゲートペアにしたうえで文字化する方が文字化けしないようだ
なのでそれぞれのスレタイを処理する場面でChaikaCore.ioを呼ぶ形がいいと思う




掲示板管理者へ連絡 無料レンタル掲示板