青空文庫リーダー 春山征吾 / HARUYAMA Seigo haruyama@unixuser.org MIDP2.0用の青空文庫リーダーです。ルビを表示します。 まだまだいろいろ適当です。 ライセンス: 本プログラムはフリーソフトウェアです。 GNU GENERAL PUBLIC LICENSE Version 2 に従って本プログラムを 再配布できます。 動作環境: 動作は J2ME Wireless Toolkit 2.2 (Linux版)と WX310SAでのみ確認しています。 一部、ハードコーディングしているところがあるので、 WX310SA以外の環境では変な表示や動作があるかもしれません。 Vodafone702NKでも動いているようです。 説明: 起動すると 「file:///SD:/PC_INOUT/」 の内容を見にいきます。 (0.0.3 より.0.0.2までは SD:/PC_INOUT/aozora) そのディレクトリがない場合には 「file:///」を見にいきます。 そしてファイル選択画面を表示します。 ファイル選択画面で表示されるのは ディレクトリと「*.txt」ファイルのみです。 ファイル選択画面で 文書を選択すると内容をルビつきで表示します。 縦書時は左右、横書時は上下キーで表示位置を操作できます。 キーを押しつづけるとスクロールしていきます。 32768byte(0.0.21から, 0.0.20までは65536byte) を超えるファイルは分割して読み込みます。 #もっと小さくしたほうが操作性はあがるがどうしたものか その際は 「7」キーでファイルの前のほうに 「9」キーでファイルの後のほうに(データがある場合)移動します。 閲覧画面のでのソフトキー ・「横/縦」: 横/縦書きを切り変えます ・「設定」: 設定画面を表示します。 ・「しおりの追加」: しおりを追加します。 ・「しおりのリスト」:しおりのリストを表示します ・「Back」: ファイル選択画面に戻ります。 縦書時の文字の入れ換えには たてがき君 by 縦の会 http://hp.vector.co.jp/authors/VA022533/tate/note.html の表を利用させていただきました。 バグ・問題点: ・ルビが重なることがあります。 現在のところ回避する仕掛けはいれていません。 ・ルビがうまいぐあいについてないことがあります。 特に長いルビは画面からはみ出させない処理のために ずれてつくことが多いです。 ・縦/横切り変え時と 設定でフォントが変更したときに に激しく場所が動いてしまうことがあります。 いまのところファイルの行単位で処理しているためです。 ・しおりの実装はテストが足りていません ○しおりの選択時にOutOfMemoryErrorとなることがあります 再起動してください ○しおりの操作を行うと画面がすこし変になることがありますが、 上下左右に操作すれば直ります。 ・ファイルの行単位で処理しておりかつ 一度に読み込むのが32768byteのため, 一行が15000文字以上ある文書を読み込もうとすると 問題が発生します。(おそらく普通の文書では起こらないと思いますが) ・Shift_JISの「2バイト目に0x5Cを持つ文字(いわゆる「ダメ文字」)」 の処理が不十分なJavaVMを利用していると 「ダメ文字」を含むフォルダや ファイルを読み込みに失敗します. 「2バイト目に0x5Cを持つ文字(いわゆる「ダメ文字」)一覧」 http://ja.wikipedia.org/wiki/%EF%BF%A5%E8%A8%98%E5%8F%B7#2.E3.83.90.E3.82.A4.E3.83.88.E7.9B.AE.E3.81.AB0x5C.E3.82.92.E6.8C.81.E3.81.A4.E6.96.87.E5.AD.97.EF.BC.88.E3.81.84.E3.82.8F.E3.82.86.E3.82.8B.E3.80.8C.E3.83.80.E3.83.A1.E6.96.87.E5.AD.97.E3.80.8D.EF.BC.89.E4.B8.80.E8.A6.A7 TODO: ・縦書の改善(微調整) ・操作の改善(ショートカットキー、速度の改善など) ・設定 ○レジュームするか否か(必要か?) ・リファクタリング ○FileInfo, FileUtilの場当たり的な仕様をどうにかする ○実質的に定数なもののソース上での定数化 (Ticker, Alertなど) ○その他 ・検索(必要か?) ・オートスクロール(必要か?) ・英文ワードラップ(?) 謝辞: willcom Javaアプリスレッド vol.1 http://hobby7.2ch.net/test/read.cgi/appli/1127825047/ willcom Javaアプリスレッド vol.2 http://hobby7.2ch.net/test/read.cgi/chakumelo/1134067898/ にて有益なご助言を頂きました。ありがとうございます。 変更履歴: 0.0.21 文書表示からファイル選択に移るコマンド名が「back」だったのを (resumeしていなかった時代の名残)「ファイル選択」に変更 FileInfo.MAX_CONTENT_LENGTH 65536 -> 32786 として OutOfMemoryErrorを出にくくした。ただし、その結果として これ以前のBookmarkやresume情報が無効となった。 0.0.20 ブックマークが増殖するのを防ぐようにした 設定画面で横/縦書を変更したら現在閲覧中の文書にも 反映するようにした。 設定と異なる横/縦書時に、(7,9キーでの)ファイルの前後への移動 を行うと設定と同じ横/縦書になってしまうのを修正 0.0.19 設定画面で"読込時に横書/縦書"が既存の設定を反映していなかった のを修正 0.0.18 縦書用の変数をクリアしていなかったため、 文書を変えても縦書時には元の文書を表示していたのを 修正 表示される範囲外で文字の描画がなるべく起こらないようにした。 ルビの開始文字を無視するコードがうまく働かない場合が あったのを修正 いくつかのASCII文字も縦書時に変換するようにした 0.0.17 DirectoryList, AozoraCanvas, BookmarksList, SettingsFormのシングルトン化 しおり登録時に名前を聞くようにした 0.0.16 しおりを消してもRecordStoreに反映していなかったバグを修正 0.0.15 横書時にも縦書の準備をしておくようにして切替えを早くした ルビと本文の間の幅(上右、下左)、ルビなしの場合の幅の設定を 可能にした 複数のしおりを保存できるようにした。 0.0.14 ルビの開始を示す文字を取り除くコードにバグがあったのを修正 0.0.12でAozoraCanvas.setStates()中でのThreadの使用を やめていたのを復活 0.0.13 フォルダに移動できなくなっていたバグを修正 0.0.12 縦書時の文字の入れ換えを実装 (http://hp.vector.co.jp/authors/VA022533/tate/note.htmlの表を用いた) ルビを表示しないようにできるようになった。 複数ブックマークのための準備(まだ実装はしてない) 0.0.11 バグ: 「フォントが変更されたときにもともと表示していた場所 に正しく戻りません。」をある程度対処したはず。 拡張子のチェック時にtoLowerCase() してから比較するように (829さんありがとうございます) 0.0.10 設定が十分に反映されない場合があったのを修正。 バグ: 「フォントが変更されたときにもともと表示していた場所 に正しく戻りません。」を発見しまだ放置 0.0.9 起動時に最後に見た位置の情報がRecordStoreにあったら そこから表示するように フォント、色(テキスト、背景)、横/縦書きを設定できるように 0.0.8 ライセンスに関する記述を追加 65536byteを超えるファイルは分割して読み込むように 縦/横 切り変え時にある程度場所を保存するように 0.0.7 ディレクトリ間を移動できるようにした おかしなディレクトリを指定されたらrootに戻るようにした OutOfMemoryError時にAlertが出るようにした 0.0.6 スクロールバー追加、バグ修正、初回に全部パースするように 0.0.5 キーの長押しに対応 0.0.4 縦書対応 0.0.3 ファイルの置場を「SD:/PC_INOUT/aozora」から「SD:/PC_INOUT/」 に ファイルの読み込みが遅かったのを修正 0.0.2 0.0.1 ・その他のソフトウェア 「携帯書房」 http://i.lifemedia.co.jp/pc/ これには青空文庫の50%くらいが入っているそうです。