マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

自作エディタ

昔やっていたこと

http://f.hatena.ne.jp/d-kami/%E8%87%AA%E4%BD%9C%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF/を見て、Javaで自作エディタを作っていた時期があったことを思い出した。ソースが残っていればまた始めるかもしれない

日本語入力時の環境の差

InputMethodRequestsのgetTextLocationがWindowsだと漢字変換する度に呼び出されて、返り値によって変換候補の表示位置が変わるけど、LinuxだとgetTextLocationが全く呼び出されない。KDE + SCIMだから駄目なのか?inputMethodTextChangedが呼び出される回数…

描画にかかる時間はどの程度か

前回、自作エディタのテキストの描画のしかたで、再描画の度に1行目から全て描画させるという方法に切り替えた。それで、でかいファイルを開いたらどの位時間がかかるのか気になったので、試しにcatでソースファイルを全て結合した。 それで、全てのソース…

ブロックコメントの位置の保存は後回し

ブロックコメントの位置を求めるのってめんどくさい気がしてきた。なので再描画の度に1行目から描画することにする。それでも、でかいファイルを読み込まない限りは大丈夫だと思うし

JEditorPaneを使った方が無難だろうか?

JEditorPaneを使えばテキストの保持や編集、キー入力、日本語入力、描画は勝手にやってくれるので、StyledEditorKitをなんとかすれば簡単にできそう。でもJEditorPaneのsetEditorKitの引数で渡すのはEditorKitでStyledEditorKitの親の親じゃないか。EditorKi…

行ルーラをどうやって表示させるか?

とりあえず、前回はJScrollPaneのRowHeaderを使う方法を試したが、個人的に表示のされかたが気に入らなかったので、エディタコンポーネントのpaintComponentで描画させようかと思う。 それで実際に行ルーラを表示させるとなると、テキストの表示させる位置を…

行ルーラーをどうやって追加するか

まだ、俺が作っているJEditor(同じ名前のがいくつもあるだろうから…)に編集機能をつけてないときに行ルーラーを表示させていたときがあったが、それはJEditorクラスのpaintComponent内で行ルーラーとテキストの描画をまとめて行っていた。なので今回は行ルー…

ブロックコメントの色分けを実装中

再描画の度にブロックコメントを探すのは効率が悪いので、BlockCommentManagerというクラスを作り、ブロックコメントの位置を管理することにした。とりあえず今の段階では編集をしなければ色分けしてくれます。

そういえば俺はテキストエディタを作ろうとしていたんだ

何ヶ月か前まではテキストエディタを作ろうとしていたことを思い出した。とりあえずやろうとしていたことを思い出してみる ブロックコメントの色分け(行コメントはできている) 選択した後の動作を作る 文字コード自動認識 UndoやRedoを作る ブロックコメント…

C MAGAZINE 2003年2月号

どうやらC MAGAZINE 2003年2月号にJavaの日本語入力方法が載っていたらしい。読んでみたいけど、『まるまるC MAGAZINE 2002年度版』が5040円。うーん、読んでみたいところが一部分だけだから結構辛いな。勿論買えば別の部分も読むんだろうけどな〜

自分で使っていくことで不便に感じ、修正する気になる

やっぱり自分で使っていると不便に感じる部分が多いので修正しようという気になる。プログラムを組んでいきある程度進と、欠点がわかっていても修正するのがめんどくさくなってくる。そのプログラムを自分で使いつづけることで、不便だな〜と思い、修正した…

自作エディタで編集

自作エディタでJavaのソースを書いてみた。やっぱりファイルにしっかり保存されてるかとか、正しく編集されてるかが気になり、他のエディタで開いたりする。やっぱり、機能はまだ少ないから、不満に感じるところも多々ある。でも気分はいいかも

今までの困難を振り返り更なる困難に立ち向かう

まだ貧弱とはいえ編集機能もあるしキーワード色分けもできるようになった。もうテキストエディタと呼んでもいいとは思う。ただ、まだこれからの方が長くて大変な作業が続くに違いない。というか明らかに足りない機能が多すぎるのでなんとかせねば…

キーワード色分け実装

前回作ったキーワード色分けしたテキストコンポーネントは編集機能無しだったので、表示にだけ力を入れることができ、キーワード色分けの部分はほとんど1つのクラスだけで行っていた。 しかし、今度はいい加減な作りだと表示の部分をちょっと変えるだけで。…

ファイルを読み込んで編集

ファイルを読み込んで、編集するとテキストエディタっぽく見えてきた。問題は表示の方に力を入れてないからJTextAreaなんかと見た目があまり変わらないところか

段々テキストエディタっぽくなってきた

日本語入力にまだ不安(環境によってどうなるか…)があるけどキャレットの移動に改行やタブの挿入もできるようになってテキストエディタらしさがでてきた。もう少し編集機能を強化したら表示の方にも力を入れてみようと思う。とはいっても、表示機能は以前作…

キーボードからの入力

前回、キーボードから入力にCharacter.isLetterOrDigitを使って文字かどうかを判定してたけど,./など一部の文字のときにfalseを返してくるので、うまく判定できなかった。 でも解決する方法が見つかった。FontクラスのcanDisplayメソッドなら表示出来る文字…

Character.isLetterOrDigit…

KeyEventが発生したらCharacter.isLetterOrDigitで文字や数字だったらキャレットの位置に挿入しているが。isLetterOrDigit(isLetter)は,./などの文字のときにfalseを返してくることがわかった。isLetterOrDigitは自分で作るしかないのか…

AttributedString

これは属性付きの文字列を扱うときに重要になってくる。属性とはフォントや色、装飾(イタリックやボールド)などがある。setFontやsetColor使えば問題なさそうだが、AttributedStringは文字単位で属性が指定できる。例えば、ある文字列の0番目から4番目の…

進み具合

編集機能を持ったテキストコンポーネントができつつある。表示に関しては今はシンプルに黒と白だけ。そのうち色分けも実装しようかと思う。テキスト編集機能だけを実装 以前作ったキーワード色分けを行ったテキストコンポーネント

日本語入力時のTextLayout

Javaで未変換文字列を描画するならinputMethodTextChanged時にAttributedCharacterIteratorをTextLayoutに渡して、TextLayoutのdrawを呼び出すのが手っ取り早いが自分で描画するという手もある。ただ、漢字変換のときにどこを変換してるかを取得して下線や背…

タブ文字の入力

子コンポーネントでタブを入力すると次のコンポーネントにフォーカスが移ってしまうからその子コンポーネントではイベントが受け取れないらしい。JavaのチュートリアルにあるHow to Write a Key Listenerのところを見ると component.setFocusTraversalKeysEn…

編集機能を付け無ければ

エディタと名乗るからには編集出来ないとまずいわけで、表示機能しかなければビューワだ。それでキーボードから入力された文字を受け取り既存のテキストに追加していく。勿論改行やバックスペースにも対応したいので、KeyEventのgetKeyCodeとKeyEventにある…

いろいろ考えてみる

今まで、どんな処理をすればいいのかわからずに、わかった時点でどんどん機能を追加する、というやり方だった。なのでpaintComponentメソッドの中でキーワードの色分けの処理を書いてたが、だいたいどんなものかわかったので整理しようと思う。まず、大雑把…

勘違い

文字列の確定時に2回inputMethodTextChangedが呼び出されるというのは嘘だった。確定時は1度呼び出されるだけだ。確定前の最後の変換と確定時にgetTextで同じ文字列を返してるだけだった。あと漢字変換の最初の変換のときだけ2回呼び出されてるみたいだ。 …

SCIMでも入力方法が違うのか…

日本語入力コンポーネントでSCIMに変えても未確定文字列の確定方法は変わらないと思ってたけど、うまく確定できてなかった。Cannaのときは未確定文字列の変換の度にinputMethodTextChangedが2回呼び出され、確定時は3回呼び出されていた。 SCIMとWindowsの…

日本語入力コンポーネント

WindowsからFedora Coreに移したときに、日本語変換の確定の仕方に違いがあった。なのでCannaからSCIMにしたことで、また確定の仕方が変わってしまうのか?と思ったけど普通に確定できてそうかも

文字列の選択

文字列の選択をできるようにした。今は1行だけしか選択できないのと、選択された文字列の色を設定できない。頑張って複数行の選択や選択された文字列の色の設定などを加えたい。あと短形選択もできたらいいなぁ

タブの選択

テキストエディタで文字をクリックしたとき、クリックした位置により、キャレットがその文字より前なのか後ろなのかが決まる。もちろん、タブをクリックしたときも同じ様に動作する。今のところJEditorでは、タブをクリックするとどこでクリックしてもタブの…

久々にいじる

キーボードによるキャレットの移動と、キャレットが画面外にでたときの処理を追加。次は文字列の選択に挑戦する予定、短形選択なんかもできるようにしたい。 そういえば、今自作エディタを作ってる人はどれくらいいるのだろう?Googleなんかで検索しても関係…