喫茶XRAYトップページ
[12485]
結合文字であるかの判定
返信
削除
2018/11/30 (金) 23:27:36
Mr.XRAY
文字列関係の記事を書いたので,結合文字判定のテストをしてみました.
かなり前のやりかけなのですが,3 つ目の文字である結合文字の判定ができません.
当然 (?) MECSUtils を使用してます (自分で処理を書くなんてとんでも,です)
検査対象の文字の後ろの文字も検査する必要があるようですね.
結合文字に使用可能なコードポイントっていうのをこれから調べるところです.
ちょっとした報告でございます.
でも,もし,情報があったら教えてくださいね.
以下のリンクは結合文字を判定する時の先頭のコードポイントのリストです.
この u ($0075 - 単なるアルファベツトの u) は当然以下のリストにはないわけです.
http://
www.
fileform
at.
info/
info/
unicode/
category
/
Mn/
list.
htm
http://
www.
fileform
at.
info/
info/
unicode/
category
/
Mc/
list.
htm
http://
www.
fileform
at.
info/
info/
unicode/
category
/
Me/
list.
htm
結合文字の判定用の関数
https://
ht-
deko.
com/
tech021.
html#
MecsComb
iningTyp
e
//=============================================================================
// フォーム生成時の処理
// テスト用の文字列をセット
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
// $0075 は単なるアルファベットの u
Edit1.Text := #$01D6#$00FC#$0304#$0075#$0308#$0304 + 'ABC';
end;
//=============================================================================
// 結合文字の判定テスト
// このコードの実行には uses に MECSUtils が必要
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
LString : UnicodeString;
LUCS4Char : UCS4Char;
LInteger : Integer;
begin
LString := Edit1.Text;
Memo1.Lines.Clear;
for LInteger := 1 to Length(LString) do begin
LUCS4Char := Ord(LString[LInteger]);
if MECSUtils.MecsCombiningType(LUCS4Char) = ctBase then begin
// ここに追加の処理が必要
Memo1.Lines.Add('ctBase');
end else begin
Memo1.Lines.Add('ctCombining');
end;
end;
end;
[12486]
Re:結合文字であるかの判定
返信
削除
2018/11/30 (金) 23:44:00
Mr.XRAY
> かなり前のやりかけなのですが,3 つ目の文字である結合文字の判定ができません.
> 当然 (?) MECSUtils を使用してます (自分で処理を書くなんてとんでも,です)
> 検査対象の文字の後ろの文字も検査する必要があるようですね.
> 結合文字に使用可能なコードポイントっていうのをこれから調べるところです.
あっ,書いてから気が付きました.
正規化していませんです.ハハハッ
NFKD で正規化して検出できましたです.ハイ.
失礼しました.
[12487]
Re:結合文字であるかの判定
返信
削除
2018/12/1 (土) 07:36:24
Mr.XRAY
> かなり前のやりかけなのですが,3 つ目の文字である結合文字の判定ができません.
図を見直したらちゃんと判定していますね.
ハハハッ.最後の ctBase 3 つは ABC という文字でした.
かなり疲れていますな (汗)
INCM/CMT
Cyclamen v3.82