◆AsciiText.c を見る. ここに限りませんが,I18N 関係の部分は全部 international == True or False で場合分けされているので,読むのは結構楽ですね(^_^).
今までは名前が Ascii のくせに,何で I18N されているんだと思ってたんですが,Initialize() でいきなり分岐が. I18N の時は multiSrc, multiSink を,そうでないなら asciiSrc, asciiSink widget を作ってます. っていうか,AsciiText.c はそれだけしかやってないんですね(^_^;;;
後は multiSink の場合に,XIM まわりの設定. ここの insert position は今のところ正体不明.
それから,Destroy() では I18N の時に XIM の後始末.
◆Command.c (command button widget).
これは Label の子クラスなので,ほとんど何もなし. I18N の時に XGetGC じゃなくて XtAllocate を呼ぶようにするところが1ヶ所あるだけ.
◆List.c(List widget). I18N の時に XGetGC じゃなくて XtAllocate を呼ぶところが3ヶ所. 文字列の幅(XTextWidth or XmbTextEscapement)が1ヶ所. フォントの高さを調べる()ところが3ヶ所. 文字列の描画(XDrawString or XmbDrawString)が1ヶ所.
◆Simple.c(simple widget). Grip, Label, List, Text widget の親になる widget ですね.
international リソースの初期化や設定関係の記述がちょっと.
◆Sme.c(generic menu).
international リソースを持たせるところの指定だけ.
◆SmeBSB.c(menu entry).
I18N については List.c とほぼ同じ.
◆Text.c.
◆MultiSink.c
`grep XmbDraw *.c' すると Label.c, List.c, SmeBSB.c しか引っかからないので,他の widget では Xwc 関係の描画関数を使っているのか? ということで,`XwcDraw *.c' すると MultiSink.c に1ヶ所(PaintText)あるだけ. あやしい.
で,ちょっと見てみると,確かに Text, AsciiText の文字列描画はここでやってますね. で,この PaintText は同じ MultiSink.c 内の DisplayText からしか呼ばれない模様.
つまり,最初から mb のままで処理する widget と(Label, List, menu 回り),最初に wc に変換してそのまま wc で通す widget (text 系)が混じっているというところでしょうか.
…というところで,花火の誘いが. 続きはまた明日(^_^;;
◆花火. ちょっと北上して,河のほとりで. 月を見ながら,酒を軽く飲みながら,ちょっと早い(早くもないか ^_^;)夏の雰囲気を楽しむ.
◆TextSrc.c.
基本的には,これは (AsciiSrc.c, MultiSrc.c のラッパー) + utility 関数が含まれているというところでしょうか.
mb -> wc の変換(_XawTextMBToWC)は,XmbTextListToTextProperty と XwcTextPropertyToTextList の組合せでやってるんですね. いきなり wcstombs を使うと何か問題があるのでしょうか?
wc -> mb の変換(_XawTextWCToMB)は,XwcTextListToTextProperty だけ. うーむ.
◆午前中は「後宮小説」(酒見賢一)を読む. これは,前から(って高校生の頃だと思うけど…)読もう読もうと思いつつ,なぜか読んでなかった本です.
…むっちゃ面白い. でも,昔の自分じゃ絶対わからない気もするので待って正解という気も. 何だか,損したような得したような気分(^_^;;
◆午後は中古車を買う契約をした友達に拉致されて,ディーラーへ. 色がちょっと変わっていて不安になったので,見て欲しいとか.
契約後にそういうこと相談されても困るぞ. とりあえず,無難に誉めときました(^_^;;
まあ,中古車は自分で好きなように注文できませんからね〜.
◆寮の近く(というか,会社の真正面あたり)で事故があった模様. 警察が事故処理してます.
事故ってたのは他のメーカの車なんで,うちの社員じゃないと思いますけど. それにしても,片方の車が「ガードレールに上から落ちている」ってのはすごいぶつかりかたのような….
◆夕食は今週末に出来たばかりの焼肉屋へ. フランチャイズものの店なんで,味は別段悪くないけれど,感動的においしいこともないというところ.
◆部署での集合研修は先週いっぱいで一応終わり. ということで,今週からは OJT です.
とりあえず,現状に追い付くための資料読み. 明日のデモのための荷物運び. などなど.
◆残業は1時間. 部署によっては残業手当がつかないところもあったりするようですが,うちはそういうことは無いようです. 労働基準法の範囲内で(^_^;,働いていいそうです.
◆会社の自分の PC のディスクがパンク(T_T). 500M じゃ悲しすぎる〜. 早く仮マシンじゃなくて,正式のマシンが欲しいぞ,と.
◆取り組む仕事は CAD のオープン化あたりになりそう. キーワードは,やっぱり Java とか VRML なんかになるのでせうか.
◆最近,近くのレンタル CD/ビデオショップで100円セールをやってるので,いろいろ借りてます. 借りまくって,その処理が大変になるというのも本末転倒ですけど(^_^;
◆また,冷房に当たってしまったらしい. いわゆるクーラー病というやつです.
死にそうなので,クスリ飲んでダウン. 休み取ろうか….
◆薬局の人に聞いたら,クーラー病は軽いうちならビタミンEがいいそうです. でも,すごいドリンク剤とかは買えないぞ….
というわけで,素直に風邪薬を買う.
◆まだ咽が痛いけれど,少し復活気味. とりあえず,今日はなんとかいけそう.
◆今日は雨なので,(本社に戻って以来)初めて車で出勤. 徒歩だと door to door で25分. 車だと20分. 時間が変わらないのは,渋滞も起こるし,駐車場からやっぱり歩くため.
本当は自転車が一番早い距離なんだけど,自転車は買ってない(^_^;
ところで,愛知県の人って自転車のことを「けった」って言うんだけど,これって何が語源なんでしょう? 僕は「チャリ」が万国共通語だと思ってたんですが….
◆今日のお仕事は資料(というか CAD の使い方の説明書)書き. しかし Word95 だめだめ. (何故か有名みたいですが,うちの会社は Office97 禁止例が出てます.) Claris Works で作った絵を wmf に変換して張り込もうと思ったら,落ちる落ちる.
あと,bounding box もきっちり取れないパターンが存在する模様. 画像の一番奥に大きな矩形を置いてやってとりあえず回避.
本当にこんなのでいいのだろうか….
Claris Draw もいまいち. 円弧に矢印属性が付けられないとは….
◆後宮小説は,(本に挟んであった選評によると^_^;)第一回日本ファンタジーノベル大賞(たぶん1989年)受賞作品のようです. 10年近く読めずに置いていた本だったので,(まさかの)反応があってかなり嬉しいっす(^_^)
◆dp/NOTE のαテスタに参加してるんですけど,やっとブツが出てきたみたいです. 週末はこれで遊べますね(^_^;
ダウンロードしようとすると,結構でかい(11M)ですねぇ.
◆Xaw のお勉強も間が開いてしまったので(「解析」なんて畏れおおいっす ^_^;),そろそろ目先を変えてみましょう.
というわけで,実際に文字の入力が行われそうなところをピックアップ. (つまり,'grep -i lookupstring *.c' ですね.)
これで引っかかるのは TextAction.c, XawIm.c です. さすがに入力は見るところが少ないようで,どっちのソースでも一ヶ所ずつしか見るところが無いです.
◆今日は仕事が忙しい. って,IBMに某CAD系アプリのデモを見に行ったから.
でも会社から徒歩5分のところに IBM の営業所が. もらった名刺の住所は箱崎とか大和とかなんですけどね〜(^_^;).
◆セリオがうちにやってきた!
ていうか,OCTANE がうちにきたので,Serio と命名(^_^; 前にも書きましたけど,訳ありでしばらく借りることになったやつです.
スペックはこんな感じ.
このスペックだと,私の年収(新入社員だけど)より間違い無く高いはず(^_^;. 倍でも買えない気がする(^_^;;;.
とりあえずおうちLANに接続して,TeX 関係を一式インストール.
◆セリオに後ろ髪を引かれつつ,dp/NOTE の方も試してみる.
まずは起動. GTK で作ってあるそうで,見ためはいかにもという感じ.
日本語入力のほうは,黙って起動すると Wnn6 を使うようになっている模様. (起動オプションか設定ファイルで XIM も使える.) Wnn6 なら dp/NOTE の中からも辞書操作ができる…らしいです.
XIM では over-the-spot と root しかできないの? この手のアプリだと off-the-spot ができてもいいと思うけれど….
「ウィンドウ」メニューで画面分割をしたら確実に落ちるのはα版ならでは(^_^;; この辺りは未実装なんでしょうねぇ.
出力はdp/NOTE専用フォーマット, RTF, HTML が可能らしい. でも,/usr/local/bin/DP(標準インストールの場合) にパスを通していないと「フィルタが見つかりません」と言われてしまう…. パス検索はひと工夫欲しいところ.
わーぷろを使うおじさん系ユーザにパスの設定をしろというのもアレでしょう.
あと,ヘルプの閲覧が netscape 決め打ちというのもちょっと.
それからマウスで文章の操作(カーソル移動や,セレクション)ができないのは気のせいじゃないと思うんだけど….
◆友達と夕食に出てそのままドライブ. 人の車で山道を攻めるのはやめて…(T_T).
◆一応続いてはいるようです(^_^;. 第2回以降の受賞者を調べられないかと思って探したんですが,そっちは見つけられませんでした(T_T).
言われてみるとアニメ化されたような記憶もありますが,本編を読むまではとわざと見なかったのでした(^.^;; でも,小説を読んでて惹きつけられた文体や構成や文章上の仕掛けなんかは,メディアを変えると載らないものばかり….
#ということで大丈夫かなあ? > To Heart(笑)
◆昼起き.
◆今日はなんか無気力. サラリーマンの日曜日というやつだろうか. おやじくさいけど….
車で町をぶらぶらしたり,CompMart で CD-R を補充したり. ついでに,そろそろ PC を買い替えたいと思っているので,CompMart の中を探索.
SCSI 機器を 3台内蔵(disk, PD, CD-R)させるとなると,出来合いの品じゃベイ不足. 結局自分で組み立てるしかないのかなあ….
◆今日のセリオは日本語 ghostscript と ssh のインストール. おうち LAN のメインマシンでは rlogin は塞いでいるし,ftp, telnet は OTP なので,ssh 入れないと話にならないっす(^_^;;
◆世間は休みらしいが,うちの会社は仕事の日. 月曜だから.
文字通りの完全週休二日制(国民の休日でも月〜金は仕事)というのも,ちょっとイヤな感じ.
しかも,3時間も残業してるし….
◆Athena widget のお勉強(時間が取れなかったので,ちょっとだけ).
今日は,TextTr.c に書かれている translation を軸にしてみましょう(これに対応する action については TextAction.c の _XawTextActionsTable を参照).
ということで,今日は backward-character(translation) -> MoveBackwardChar(action) をば. (MoveBackwardChar は TextAction.c で定義.)
日本語の場合の処理は,MoveBackwardChar からたらい回しの末,最終的に MultiSrc.c 内の Scan という関数に回されます.
で,その Scan ですが,Xaw の I18N では1文字分のサイズが wchar_t 固定になっているので,処理自体は何も変なことはいらないようです.
実際,AsciiText との具体的な違いを調べてみても,違いは
if (c == _Xaw_atowc(XawLF)) 〜
のように WC 変換して比較するか,
if (c == '\n') 〜
だけで,プログラムのロジックは全く同じです.
うーむ,これは文字列処理については深く考える必要はなさげですね(^_^;
◆というわけで,Input Method の方に視点を変えてみましょう…(節操ないですねぇ). とりあえず,IM を開くところは誰が書いても同じ気がするので,マウスのフォーカスが変わるところに注目してみましょう. そこで XSetICFocus, XUnsetICFocus を grep で探す.
すると引っかかるのは XawIm.c だけ(しかも一ヵ所ずつ)で,SetICFocus, UnsetFocusなる関数でラッパかけてるだけの模様.
こいつはどこから呼ばれてるんだろうと調べて…眠いのでまた明日(^_^;