HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2023
1031
ゆっくりXPハングル(韓国語)の処理4解決


ゆっくりXP

リンク

2023/10/31(Tue) 22:21:43|NO.100395

韓国語対応のプログラムを作っているのですが、ハングルのパッチムがある場合、「은」、パッチムがない場合は「는」と表示させたいのですが可能でしょうか?
ハングルのパッチム取得できない場合はどのようにすれば良いのでしょうか。

#include "hsp3utf.as" font "Gulim",16 hangul = "유얀" mes hangul+"는"



この記事に返信する


沢渡

リンク

2023/11/1(Wed) 16:57:33|NO.100402

ハングルのことは全く知らないのでネットで調べましたが、
(以下のリンクの一番上の記事にある『終声子音』というのが
 パッチムのことでしょうか?)
このような形で上手くいくでしょうか?
ちょっと自信ありませんが、上手くいけばよいのですが。

<メモ>
○合成文字パーツの終声子音(パッチム?)に相当するもの
11A8〜11FFおよびD7CB〜D7FB
3133、3135、3136、313B〜313F、
3167〜316D、316F、3170、3182、3183

○ハングルの音節文字:AC00〜D7AFの範囲内。
AC00を引き、28で割った余りが0ならパッチムなし。それ以外ならパッチムあり。

<参考>
https://www.weblio.jp/wkpja/content/%E3%83%8F%E3%83%B3%E3%82%B0%E3%83%AB_%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89#:~:text=%E3%83%8F%E3%83%B3%E3%82%B0%E3%83%AB%E3%81%AE%E3%83%A6%E3%83%8B%E3%82%B3%E3%83%BC%E3%83%89%E7%95%AA%E5%8F%B7%E3%81%AF,%E3%81%A7%E6%B1%82%E3%82%81%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%82
https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%82%B0%E3%83%AB%E3%83%BBUnicode%E5%AF%BE%E5%BF%9C%E8%A1%A8
http://www.shurey.com/js/works/unicode.html
https://www.asahi-net.or.jp/~ax2s-KMTN/ref/unicode/u3130.html


#include "hsp3utf.as" //last_is_patchim(文字列) //文字列の最後の文字がハングルで、パッチムがある文字なら1を、そうでないなら0を返す。 #ifdef __hsp3utf__ #module #defcfunc last_is_patchim str _s len=strlen(_s) if len<3 : return 0 //判定する文字はすべて3バイトなので、文字列が3バイト未満の場合は中断 s=_s : a=peek(s,len-3) if (a&0xF0)!=0xE0 : return 0 //後ろから3バイト目が「3バイト文字の1バイト目」かどうかをチェック x=((a&0x0F)<<12) | ((peek(s,len-2)&0x3F)<<6) | (peek(s,len-1)&0x3F) //UTF-16に変換 if x>=0x11A8 & x<=0x11FF : return 1 //ハングル字母のうちパッチムに相当するもの if x>=0xD7CB & x<=0xD7FB : return 1 //ハングル字母拡張Bのうちパッチムに相当するもの if x=0x3133 | x=0x3135 | x=0x3136 : return 1 //ハングル互換字母のうちパッチムに相当するもの if x>=0x313B & x<=0x313F : return 1 //同上 if x>=0x3167 & x<=0x316D : return 1 //同上 if x=0x316F | x=0x3170 | x=0x3182 | x=0x3183 : return 1 //同上 if x>=0xAC00 & x<=0xD7AF { //ハングル音節文字 return (x-0xAC00)\28!=0 //0xAC00を引き、28で割った結果が0以外ならパッチムあり } return 0 #global #else #define global ctype last_is_patchim(%1) 0 #endif //以下、使用例ですが、 //申し訳ありません、当方ではUnicode文字を含むソースコードを扱える環境がないので、 //文字列変数にlpokeで書き込みます。 font "Gulim",16 sdim word,64,2 temp="" lpoke temp,0,0x00948AEB : word(0)=temp //「Lふたつの間に横棒を挟んだ」ような文字 lpoke temp,0,0x00809DEC : word(1)=temp //「OとLの間に横棒を挟んだ」ような文字 hangul="" input hangul button gosub "判定",*go stop *go dialog hangul+word(last_is_patchim(hangul)) return



ゆっくりXP

リンク

2023/11/9(Thu) 21:24:38|NO.100483

返信が非常に遅れました。
自分はユニコード対応のエディタを使用しているので、こんな感じで良いのですかね…?

#include "hsp3utf.as" //last_is_patchim(文字列) //文字列の最後の文字がハングルで、パッチムがある文字なら1を、そうでないなら0を返す。 #ifdef __hsp3utf__ #module #defcfunc last_is_patchim str _s len=strlen(_s) if len<3 : return 3 //判定する文字はすべて3バイトなので、文字列が3バイト未満の場合は中断 s=_s : a=peek(s,len-3) if (a&0xF0)!=0xE0 : return 2 //後ろから3バイト目が「3バイト文字の1バイト目」かどうかをチェック x=((a&0x0F)<<12) | ((peek(s,len-2)&0x3F)<<6) | (peek(s,len-1)&0x3F) //UTF-16に変換 if x>=0x11A8 & x<=0x11FF : return 1 //ハングル字母のうちパッチムに相当するもの if x>=0xD7CB & x<=0xD7FB : return 1 //ハングル字母拡張Bのうちパッチムに相当するもの if x=0x3133 | x=0x3135 | x=0x3136 : return 1 //ハングル互換字母のうちパッチムに相当するもの if x>=0x313B & x<=0x313F : return 1 //同上 if x>=0x3167 & x<=0x316D : return 1 //同上 if x=0x316F | x=0x3170 | x=0x3182 | x=0x3183 : return 1 //同上 if x>=0xAC00 & x<=0xD7AF { //ハングル音節文字 return (x-0xAC00)\28!=0 //0xAC00を引き、28で割った結果が0以外ならパッチムあり } return 2 #global #else #define global ctype last_is_patchim(%1) 2 #endif font "Malgun Gothic",16 sdim word,64,2 word="는","은","은(는)" hangul="" objmode 2 objsize 200,32 input hangul button gosub "판정",*go stop *go dialog hangul+word(last_is_patchim(hangul)) return



沢渡

リンク

2023/11/10(Fri) 11:22:01|NO.100495

「文末がハングルでないのなら2を返す」という風に拡張されたのでしょうか?
それを踏まえて、「文末が『パッチムではない合成文字用パーツ』」だった時のケースにも
対応させてみました。
あと、半角ハングルについても「語尾が子音ならパッチムあり、母音ならパッチムなし」という
判断のもと実装してみました。

#ifdef __hsp3utf__ #module #defcfunc last_is_patchim str _s len=strlen(_s) if len<3 : return 3 //判定する文字はすべて3バイトなので、文字列が3バイト未満の場合は中断 s=_s : a=peek(s,len-3) if (a&0xF0)!=0xE0 : return 2 //後ろから3バイト目が「3バイト文字の1バイト目」かどうかをチェック x=((a&0x0F)<<12) | ((peek(s,len-2)&0x3F)<<6) | (peek(s,len-1)&0x3F) //UTF-16に変換 if x>=0x11A8 & x<=0x11FF : return 1 //ハングル字母のうちパッチムに相当するもの if x>=0xD7CB & x<=0xD7FB : return 1 //ハングル字母拡張Bのうちパッチムに相当するもの if x=0x3133 | x=0x3135 | x=0x3136 : return 1 //ハングル互換字母のうちパッチムに相当するもの if x>=0x313B & x<=0x313F : return 1 //同上 if x>=0x3167 & x<=0x316D : return 1 //同上 if x=0x316F | x=0x3170 | x=0x3182 | x=0x3183 : return 1 //同上 if x>=0xAC00 & x<=0xD7AF { //ハングル音節文字 return (x-0xAC00)\28!=0 //0xAC00を引き、28で割った結果が0以外ならパッチムあり } //以下、文末が「ハングル字母のうち母音」の場合 if x>=0x1160 & x<=0x11A7 : return 0 //ハングル字母のうち母音 if x>=0x314F & x<=0x3164 : return 0 //ハングル互換字母 if x>=0x3187 & x<=0x318E : return 0 //同上 if x>=0xD7B0 & x<=0xD7C6 : return 0 //ハングル字母拡張B //以下、半角ハングルへの対応 //「語尾が子音ならパッチムあり、母音ならパッチムなし」と判断。 if x>=0xFFA1 & x<=0xFFBE : return 1 //半角ハングルのうち子音 if x>=0xFFC2 & x<=0xFFC7 : return 0 //半角ハングルのうち母音 if x>=0xFFCA & x<=0xFFCF : return 0 //同上 if x>=0xFFD2 & x<=0xFFD7 : return 0 //同上 if x>=0xFFDA & x<=0xFFDC : return 0 //同上 return 2 #global #else #define global ctype last_is_patchim(%1) 2 #endif



ゆっくりXP

リンク

2024/1/14(Sun) 13:53:13|NO.101020

解決済みで申し訳ないのですが、韓国語で助詞をつける際にパッチムがㄹの場合、別の処理をしなくてはならないのでその処理も書いていただけると幸いです。
https://ikurachan-korea.com/zyoshinohede/



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.100395への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2023(c) All rights reserved.