miau's blog?

萌ディタの文字コード自動認識

【萌える】 萌ディタ スレッド part2【エディタ】 を眺めてると、こんなレスが。

170 :名無しさん@お腹いっぱい。:2006/09/14(木) 14:42:22 ID:BqLw+oOq0
認識能力が貧弱なんじゃなくて
実は英語の生asciiコードみたいに、sjisかeucかく別が付かないとき不便
わかんないならとりあえずsjisなんだろうと思って開いて、間違っていたとき
にeucで開きなおせるとかの法がいいかな

utf32対応とか縦書きとかの贅沢機能以外は、ほぼ完成しているように見える
からデバッグとUIの改良かな必要なのは

家では萌ディタをメインのエディタとして使ってるけど、確かにその通り。
でも「どちらともみなせる場合自動的に Shift_JIS にする」くらいなら簡単に改造できるんじゃない?と思ったのでやってみた。




そんなわけで、完成品。

moe_patch.EXE

nightly build (2005/10/02) の moe.exe と同階層に突っ込んで実行してください。
複数の文字コードと見なされる場合、先頭のやつを勝手に選びます。

ちなみに ASCII ファイルを開いた場合、

どのエンコーディングを使用しますか?

UTF-8N
Shift_JIS
EUC-JP
JIS (ISO-2022-JP)
JIS (ISO-2022-JP, Kana Extended)

みたいな選択肢になるので、UTF-8N が勝手に選ばれてしまいます。
Shift_JIS が選ばれて欲しい場合は、charset\charset.ini を

[dlllist]
entry0=unicode.dll
entry1=japanese.dll
entry2=syscodepages.dll



[dlllist]
entry0=japanese.dll
entry1=unicode.dll
entry2=syscodepages.dll

こんな感じに変更すれば OK。


ちなみに、変更内容。(変更前→青、変更後→赤)

0055ECE9 . 83E8 01 SUB EAX,1 ; Switch (cases 0..1)
0055ECEC . 72 04 JB SHORT moe.0055ECF2
0055ECEE . 74 14 JE SHORT moe.0055ED04
0055ECF0 EB 2F JMP SHORT moe.0055ED21
0055ECF0 EB 12 JMP SHORT moe.0055ED04
0055ECF2 > 55 PUSH EBP ; Case 0 of switch 0055ECE9
0055ECF3 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0055ECF6 . 8B40 08 MOV EAX,DWORD PTR DS:[EAX+8]
0055ECF9 . E8 8AFDFFFF CALL moe.0055EA88
0055ECFE . 59 POP ECX
0055ECFF . 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
0055ED02 . EB 2A JMP SHORT moe.0055ED2E
0055ED04 > 8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C] ; Case 1 of switch 0055ECE9
0055ED07 . 33D2 XOR EDX,EDX ; moe.0041C6C0
0055ED09 . 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
0055ED0C . 8B18 MOV EBX,DWORD PTR DS:[EAX]
0055ED0E . FF53 0C CALL DWORD PTR DS:[EBX+C]
0055ED11 . 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C]
0055ED14 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0055ED17 . E8 5C000000 CALL moe.0055ED78
0055ED1C . 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
0055ED1F . EB 0D JMP SHORT moe.0055ED2E
0055ED21 > 55 PUSH EBP ; Default case of switch 0055ECE9
0055ED22 . 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
0055ED25 . E8 5EFDFFFF CALL moe.0055EA88
0055ED2A . 59 POP ECX
0055ED2B . 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX

該当する文字コードが 2 個以上あった場合も、1 個の場合の case に放り込んでるだけ。
自分でも驚くほどあっさり終了。


ついでに作者の人が復活したときのためのバグ報告メモ。文字コードの自動判別時に「エンコーディングの選択」ウィンドウを Alt+F4 で閉じると orz になっちゃう。
posted at 11:56:02 on 2006-09-23 by miau - Category: TextEditor No Trackbacks - Permalink

TrackBack

このエントリにトラックバックはありません
現在トラックバックは受け付けていません。

Comments

No comments yet

Add Comments

現在コメントは受け付けていません。
お手数ですが、 こちら のコメント欄にでも記載していただければと思います。