喫茶XRAYトップページ

[スレッド全体
]

[12485] 結合文字であるかの判定返信 削除
2018/11/30 (金) 23:27:36 Mr.XRAY
文字列関係の記事を書いたので,結合文字判定のテストをしてみました.
かなり前のやりかけなのですが,3 つ目の文字である結合文字の判定ができません.
当然 (?) MECSUtils を使用してます (自分で処理を書くなんてとんでも,です)
検査対象の文字の後ろの文字も検査する必要があるようですね.
結合文字に使用可能なコードポイントっていうのをこれから調べるところです.

ちょっとした報告でございます.
でも,もし,情報があったら教えてくださいね.

以下のリンクは結合文字を判定する時の先頭のコードポイントのリストです.
この u ($0075 - 単なるアルファベツトの u) は当然以下のリストにはないわけです.

http://www.fileformat.info/info/unicode/category/Mn/list.htm
http://www.fileformat.info/info/unicode/category/Mc/list.htm
http://www.fileformat.info/info/unicode/category/Me/list.htm

結合文字の判定用の関数
https://ht-deko.com/tech021.html#MecsCombiningType


//=============================================================================
//  フォーム生成時の処理
//  テスト用の文字列をセット
//=============================================================================
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;



[12487] Re:結合文字であるかの判定返信 削除
2018/12/1 (土) 07:36:24 Mr.XRAY
> かなり前のやりかけなのですが,3 つ目の文字である結合文字の判定ができません.

図を見直したらちゃんと判定していますね.
ハハハッ.最後の ctBase 3 つは ABC という文字でした.
かなり疲れていますな (汗)


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82