Japanese Input Realization Project (JIRP)

Moderator: roytam

User avatar
katayama_hirofumi_mz
Posts: 54
Joined: Mon Apr 05, 2010 5:43 am
Location: Japan
Contact:

Japanese Input Realization Project (JIRP)

Post by katayama_hirofumi_mz »

ReactOSで日本語を入力できるようになるまでがんばってみよう。
日本語入力実現計画、略してJIRP。

というわけで、IMEなどに詳しい人、お願いします。
User avatar
katayama_hirofumi_mz
Posts: 54
Joined: Mon Apr 05, 2010 5:43 am
Location: Japan
Contact:

Re: Japanese Input Realization Project (JIRP)

Post by katayama_hirofumi_mz »

ReactOSでIMMを実装しているのは、dll/win32/imm32。
dll/win32/imm32は、Wineと同期しているコード。
ReactOSのImmInstallIMEは、IMEの情報を正しく格納していない。

Text Service Framework (TSF) は、実装がむずかしい。
Windows用のTSFは、次のリンクからダウンロードできる。
http://www.microsoft.com/downloads/deta ... laylang=en
このTSFがReactOSで動作するかどうか。

ReactOSで使えそうなフリーのIMEはGoogle日本語入力とSocial IME。
他に使えそうなIMEがありますか(Ajax IME以外)?
User avatar
katayama_hirofumi_mz
Posts: 54
Joined: Mon Apr 05, 2010 5:43 am
Location: Japan
Contact:

Re: Japanese Input Realization Project (JIRP)

Post by katayama_hirofumi_mz »

Social IMEは、ソースを見ると明らかにTSFを使っている。
Google日本語入力は、TSFを使っていないように見えるけど、本当のところはどうですか?
User avatar
katayama_hirofumi_mz
Posts: 54
Joined: Mon Apr 05, 2010 5:43 am
Location: Japan
Contact:

Re: Japanese Input Realization Project (JIRP)

Post by katayama_hirofumi_mz »

IMEについて詳しく知りたい人はこれを見てください:
http://www1.axfc.net/uploader/Sc/so/116978.zip
sabiki
Posts: 16
Joined: Mon Dec 04, 2006 6:31 am
Location: Japan

Re: Japanese Input Realization Project (JIRP)

Post by sabiki »

katayama_hirofumi_mzさん、はじめまして。
私はコードを書いたりできませんが、このプロジェクトには興味があります。私なりにいろいろ調べてみました。

TSFはIMMの後継ということで、Office XPのころからでしたよね。

IMMを使ってそうなフリーのIMEといえばskkimeしか思いつきませんが、これもReactOSでは現状は動かないようです。

Google 日本語入力はTSFでIMMには対応していないようです。
http://www.google.com/support/ime/japan ... _issues.cs
こちらの『Windows XP で「詳細なテキストサービスをオフにする」を有効にすると、Google 日本語入力が使用できなくなる。』に言及してあります。

それから、Ajax IME以外にブラウザで日本語が入力できるアプリケーションにはJapanese IME(http://colspan.net/japaneseime/)というものがあるようです。
katayama_hirofumi_mz wrote:IMEについて詳しく知りたい人はこれを見てください:
http://www1.axfc.net/uploader/Sc/so/116978.zip
http://www.osronline.com/ddkx/appendix/imeimes_0h2s.htm
このドキュメントはこちらの方が新しいようです。
User avatar
katayama_hirofumi_mz
Posts: 54
Joined: Mon Apr 05, 2010 5:43 am
Location: Japan
Contact:

Re: Japanese Input Realization Project (JIRP)

Post by katayama_hirofumi_mz »

間違いがあったら修正してください。

IME Windowは、IME Classのインスタンスである。
UI WindowはUI Classのインスタンスである。
IME Classは、システムが提供するものとアプリケーションが提供するものがある。
前者を System IME Classという。
UI Classは、IMEのDllEntryPointのDLL_PROCESS_ATTACHで登録される。

IME/IMMは WM_IME_xxxメッセージを生成する。
ウィンドウのDefWindowProcA/Wは、WM_IME_xxxを処理する。

dll/win32/user32/windows/defwnd.c
にDefWindowProcA/Wの定義がある。

dll/win32/user32/controls/edit.c
にEDITコントロールの実装がある。

デフォルトでは、各スレッドに対し、システムはDefault Input Contextを
作成する。

include/ddk/imm.h
にINPUTCONTEXT構造体の定義がある。

dll/win32/imm32/imm.c
にIMMの実装がある。

IMEの情報は、Wine/ReactOSの場合、レジストリの
System\CurrentControlSet\Control\Keyboard Layouts\%08lx
に格納される。
User avatar
katayama_hirofumi_mz
Posts: 54
Joined: Mon Apr 05, 2010 5:43 am
Location: Japan
Contact:

Re: Japanese Input Realization Project (JIRP)

Post by katayama_hirofumi_mz »

どうやらこれが問題らしいが。

subsystems/win32/win32k/ntuser/kbdlayout.c (196):

Code: Select all

static PKBL UserLoadDllAndCreateKbl(DWORD LocaleId)
{
   ...

   /* Microsoft Office expects this value to be something specific
    * for Japanese and Korean Windows with an IME the value is 0xe001
    * We should probably check to see if an IME exists and if so then
    * set this word properly.
    */
   langid = PRIMARYLANGID(LANGIDFROMLCID(LocaleId));
   hKl = LocaleId;

   if (langid == LANG_CHINESE || langid == LANG_JAPANESE || langid == LANG_KOREAN)
      hKl |= 0xe001 << 16; /* FIXME */
   else hKl |= hKl << 16;

   ...
User avatar
katayama_hirofumi_mz
Posts: 54
Joined: Mon Apr 05, 2010 5:43 am
Location: Japan
Contact:

Re: Japanese Input Realization Project (JIRP)

Post by katayama_hirofumi_mz »

プログラミング以前の問題でつまづいている人が多いようなので
最新のReactOSのインストール方法について解説する(Windows向け)。

0.コマンドプロンプトの使い方を勉強する(start, cd, mkdirなどの
  コマンドを勉強し、バッチファイルの作り方を勉強する)。英語も?
1.6GB以上の空きがあるWindows PCを用意する(Windows 2000 SP2/XP以降)。
2.最新のReactOS Build Environmentをインストールする。
http://www.reactos.org/wiki/ReactOS_Build_Environment

3.ReactOS Build Environmentを起動する。
4.Build Environmentで「ssvn create」と入力する。
5.するとダウンロードが始まる。ダウンロードが終わるまで数十分ほど待つ。
6.「make bootcd」と入力。
  (マルチコアCPUの場合は、「makex bootcd」の方が早い)
7.するとビルドが始まる。コンパイルが終わるまで、2・3時間ほど待つ。
8.ビルドが終わったら、「start .」と入力する。
9.すると現在のディレクトリ(フォルダ)がエクスプローラで開かれる。
  そこにファイル ReactOS.iso があればビルド完了。

実機にインストールする場合:
10.ReactOS.isoをImgBurnなどのCD-Rライティングのソフトで、
  CD-Rに焼く。
http://www.imgburn.com/

11.できたCDをインストールしたいPCにセットしてPCを起動する。
12.あとはインストーラの指示に従ってインストールを続ける。

仮想環境にインストールする場合:
10.QEMU on Windows(以下QEMUとする)をインストールする。
http://homepage3.nifty.com/takeda-toshiya/qemu/

11.QEMUと同じフォルダで「qemu-img.exe create harddisk.img 1000MB」
  と入力して、1000MBのハードディスクイメージファイルharddisk.imgを作成する。
12.「qemu -L . -boot d -k ja -localtime -hda harddisk.img -cdrom "(ReactOS.isoがあるパス)\ReactOS.iso"」
  と入力する(もしくはバッチファイルを実行する)。
13.あとはインストーラの指示に従ってインストールを続ける。

日本語化したい場合は、5.が終わった後で
(ReactOSのフォルダ)\modules\に"optional"フォルダを作成し、
(ReactOSのフォルダ)\modules\optional\にDroidSansFallback.ttfをコピーするとよい。

DroidSansFallback.ttf
http://android.git.kernel.org/?p=platfo ... tf;hb=HEAD
User avatar
katayama_hirofumi_mz
Posts: 54
Joined: Mon Apr 05, 2010 5:43 am
Location: Japan
Contact:

Re: Japanese Input Realization Project (JIRP)

Post by katayama_hirofumi_mz »

ローマ字入力ができるようになったよ。
漢字変換はまだだけど。。。
http://www.geocities.jp/katayama_hirofumi_mz/roumaji/
User avatar
katayama_hirofumi_mz
Posts: 54
Joined: Mon Apr 05, 2010 5:43 am
Location: Japan
Contact:

Re: Japanese Input Realization Project (JIRP)

Post by katayama_hirofumi_mz »

FontSub
フォント代替を編集できるReactOSアプリケーション
http://www.geocities.jp/katayama_hirofumi_mz/fontsub/
User avatar
katayama_hirofumi_mz
Posts: 54
Joined: Mon Apr 05, 2010 5:43 am
Location: Japan
Contact:

Re: Japanese Input Realization Project (JIRP)

Post by katayama_hirofumi_mz »

日本語版のWindows XPのテキストボックスで、IME入力をすると、
次のようなウィンドウが作成される。

クラス名: imejpstcnv81
ウィンドウ名: MSIMEConv

このウィンドウは、変換中の文字列を表示するときに
使われるようだ。

このウィンドウのスタイルは、0x8C000000だった。
(WS_POPUP | WS_DISABLED | WS_CLIPSIBLINGS)

---

If the user inputed by IME on Text box in Japanese Windows XP,
the following window will be created.

class name: imejpstcnv81
window name: MSIMEConv

This window seems to be used to display conversion string.
This window's style is 0x8C000000.
(WS_POPUP | WS_DISABLED | WS_CLIPSIBLINGS)
User avatar
katayama_hirofumi_mz
Posts: 54
Joined: Mon Apr 05, 2010 5:43 am
Location: Japan
Contact:

Re: Japanese Input Realization Project (JIRP)

Post by katayama_hirofumi_mz »

> qemu-img.exe create harddisk.img 1000MB

1000MBは、大きすぎたね。400MBで十分。
User avatar
katayama_hirofumi_mz
Posts: 54
Joined: Mon Apr 05, 2010 5:43 am
Location: Japan
Contact:

Re: Japanese Input Realization Project (JIRP)

Post by katayama_hirofumi_mz »

> qemu-img.exe create harddisk.img 1000MB

しかもMBのBはいらないようだ。正しくは

qemu-img.exe create harddisk.img 400M
User avatar
katayama_hirofumi_mz
Posts: 54
Joined: Mon Apr 05, 2010 5:43 am
Location: Japan
Contact:

Re: Japanese Input Realization Project (JIRP)

Post by katayama_hirofumi_mz »

最近忙しくて、JIRPに貢献する時間がない。
だれかSKKIMEを使いやすく改良してくれないか? おーーい。
User avatar
katayama_hirofumi_mz
Posts: 54
Joined: Mon Apr 05, 2010 5:43 am
Location: Japan
Contact:

Re: Japanese Input Realization Project (JIRP)

Post by katayama_hirofumi_mz »

<imm.h>に足りない宣言や定義がある。

Code: Select all

UINT WINAPI ImmGetVirtualKey(HWND);

#if (WINVER >= 0x040A)
BOOL WINAPI ImmAssociateContextEx(HWND, HIMC, DWORD);
#endif /* (WINVER >= 0x040A) */

#define IME_HOTKEY_PRIVATE_FIRST 0x200
#define IME_ITHOTKEY_RECONVERTSTRING 0x203
#define IME_HOTKEY_PRIVATE_LAST 0x21F

#define IMEVER_0310 0x0003000A
#define IMEVER_0400 0x00040000

#define SCS_CAP_SETRECONVERTSTRING 0x00000004
#define SCS_SETRECONVERTSTRING 0x00010000
#define SCS_QUERYRECONVERTSTRING 0x00020000

#define IME_SMODE_CONVERSATION 0x0010

#define IME_CAND_UNKNOWN 0x0000
#define IME_CAND_READ 0x0001
#define IME_CAND_CODE 0x0002
#define IME_CAND_MEANING 0x0003
#define IME_CAND_RADICAL 0x0004
#define IME_CAND_STROKE 0x0005

#if (WINVER >= 0x040A)
#define IMR_COMPOSITIONWINDOW 0x0001
#define IMR_CANDIDATEWINDOW 0x0002
#define IMR_COMPOSITIONFONT 0x0003
#define IMR_CONFIRMRECONVERTSTRING 0x0005
#define IMR_DOCUMENTFEED 0x0007
#endif

#define IME_ESC_PRIVATE_HOTKEY 0x100a
#define IME_ESC_GETHELPFILENAME 0x100b

#define SOFTKEYBOARD_TYPE_T1 0x0001
#define SOFTKEYBOARD_TYPE_C1 0x0002
Post Reply

Who is online

Users browsing this forum: No registered users and 3 guests