                        ViVi version 5.0.006
                             18-Apr-2011
                    Copyright (C) 2011 by N.Tsuda
                  mailto: ntsuda@master.email.ne.jp
                       http://vivi.dyndns.org/


■ 概要

ViVi は vi コマンドをサポートするテキストエディタです。
vi コマンドは、基本的に (n)vi 互換ですが、Ctrl + V 等 Windows標準キー
バインドと矛盾するものは Windows キー割り当てを優先しています（ViVi的
キーバインド）。


■ ライセンス

ViVi は有料のソフトウェアですが、verion 5.0.xxx だけは特別に無料で使用
できるフリーウェアです。
※ ver 5.1 or 6.0 以降は有料に戻ります。

ソースコードは http://sourceforge.jp/projects/vivi-50-free/ からゲット
でき、ライセンスは基本的にMITライセンスです。
ですので、不自由なGPLと違ってソースコードを自由に再利用可能です。
ただし、作者は不自由で使い勝手の悪いGPLが大嫌いなので、ソースコード
をGPL系のプロジェクトで再利用することを禁止します。

また、プロジェクトにはイラストファイルが含まれていますが、イラストは
MIT ライセンスではありません。
再利用したい場合は以下の著作権者に問い合せてください。
http://www.pixiv.net/member.php?id=220294


■ 開発モデル

ViVi は「頑固爺開発モデル」を採用しています。
これは開発に関わるすべてのことは作者の独断と偏見で決定する、という開発
モデルです。他の人の分析・意見は注意深く拝聴しますが、作者の意向と異な
る意見に従うということは一切ありません。


■ 謝辞

素敵なイラストの利用を許諾してくださった 桃色椿 さんに感謝しています。


■ SPR (Software Problem Report)

凡例：● Open, ◎ Fix&Close, ○ notFix&Close, etc

#SPR 状 優 Open     build Close    build type  概要
---- -- -- -------- ----- -------- ----- ----  ------------------------------------------------------------------
0001 ◎ B  11/04/02 0.000 11/04/02 0.001│ToDo│プロジェクト新規作成
0002 ◎ B  11/04/02 0.000 11/04/02 0.001│ToDo│OutputBar 実装
0003 ◎ B  11/04/03 0.000 11/04/03 0.001│ToDo│TextDocument クラス組み込み
	補足：View クラス導入がまだなので、とりあえず PlainTextEdit が TextDocument オブジェクトを保持するようにしておく
0004 ● C  11/04/03 0.000               │問題│ドッキングバーの表示状態を保存・復帰するようにした方がよい
0005 ◎ B  11/04/03 0.000 11/04/03 0.001│ToDo│TextDocument の内容をとりあえず PlainTextEdit に表示するようにする
	詳細：スクロール無し、タブも考慮しない。単にブロック単位で文字列表示のみ
0006 ◎ B  11/04/03 0.000 11/04/03 0.001│ToDo│テキストカーソル表示
0007 ◎ B  11/04/03 0.000 11/04/08 0.001│ToDo│PlainTextEdit のマウスポインタをIビームに変更
0008 ◎ B  11/04/03 0.000 11/04/03 0.001│ToDo│文字挿入処理
0009 ◎ B  11/04/03 0.000 11/04/03 0.001│ToDo│BackSpace
0010 ◎ B  11/04/03 0.000 11/04/03 0.001│ToDo│Delete
0011 ◎ B  11/04/03 0.000 11/04/04 0.001│ToDo│アバウトダイアログ
0012 ◎ B  11/04/03 0.000 11/04/08 0.001│ToDo│IME 入力
	結果：とりあえず入力可能にした。様々な問題があるが、それらは別SPRとする
0013 ◎ B  11/04/04 0.000 11/04/04 0.001│ToDo│ペースト機能
0014 ◎ B  11/04/04 0.000 11/04/05 0.001│ToDo│垂直スクロールバーによるスクロール機能
0015 ◎ B  11/04/04 0.000 11/04/04 0.001│ToDo│ステータスバー表示
0016 ◎ B  11/04/04 0.000 11/04/04 0.001│ToDo│undo/redo
0017 ◎ B  11/04/04 0.000 11/04/05 0.001│問題│Tab があるとカーソル位置が不正になる
0018 ◎ B  11/04/05 0.000 11/04/05 0.001│ToDo│単体テスト機能追加
0019 ◎ B  11/04/05 0.000 11/04/05 0.001│ToDo│ベンチマーク機能追加
0020 ◎ B  11/04/05 0.000 11/04/05 0.001│ToDo│テキストカーソル位置を表示するよう自動スクロール
0021 ◎ B  11/04/05 0.000 11/04/05 0.001│ToDo│テストのために、とりあえず上下カーソル移動を実装しておく
0022 ◎ B  11/04/05 0.000 11/04/05 0.001│ToDo│フォント情報を参照し、表示位置を決める
0023 ◎ B  11/04/05 0.000 11/04/05 0.001│問題│Tab 挿入ができない
	原因：フォカース移動として処理されている？
0024 ◎ B  11/04/05 0.000 11/04/05 0.001│ToDo│Ctrl + Home
0025 ◎ B  11/04/05 0.000 11/04/07 0.001│ToDo│Ctrl + End
0026 ◎ B  11/04/05 0.000 11/04/09 0.002│ToDo│編集時に TextDocument::m_blockIndex, m_blockPosition を更新
0027 ◎ B  11/04/05 0.000 11/04/05 0.001│ToDo│行番号表示
0028 ◎ B  11/04/05 0.000 11/04/05 0.001│Rfct│blockIndex, blockPosition はひとつの構造体にした方がよい
0029 ◎ B  11/04/05 0.000 11/04/05 0.001│ToDo│[EOF] 表示
0030 ◎ B  11/04/05 0.000 11/04/10 0.002│ToDo│改行記号表示
0031 ● B  11/04/05 0.000               │ToDo│全角空白記号表示
0032 ◎ B  11/04/05 0.000 11/04/10 0.002│ToDo│タブ記号表示
0033 ◎ C  11/04/05 0.000 11/04/10 0.002│問題│TextDocument::findBlockIndex() がブロックキャッシュを参照していない
0034 ◎ B  11/04/05 0.000 11/04/05 0.001│問題│垂直スクロールバーでスクロールしても行番号部分が再描画されない
0035 ◎ B  11/04/06 0.000 11/04/06 0.001│ToDo│ファイルオープン
0036 ◎ B  11/04/06 0.000 11/04/07 0.001│ToDo│MRUファイル機能
0037 ◎ B  11/04/06 0.000 11/04/06 0.001│問題│複数ファイルをオープンできない
0038 ◎ B  11/04/06 0.000 11/04/07 0.001│問題│ウィンドウをリサイズしてもスクロールバー情報が更新されない
0039 ◎ B  11/04/06 0.000 11/04/07 0.001│問題│ファイルオープン直後のスクロールバー情報が不正
0040 ◎ B  11/04/06 0.000 11/04/06 0.001│ToDo│Ctrl + マウスホイールによる拡大縮小
	結果：とりあえず実装。ただし、垂直スクロールバー情報が更新されない
0041 ◎ B  11/04/06 0.000 11/04/06 0.001│ToDo│new
0042 ● B  11/04/06 0.000               │ToDo│カレントファイルディレクトリに移動
0043 ◎ B  11/04/06 0.000 11/04/06 0.001│ToDo│Esc でカレントディレクトリをステータスバーに表示
0044 ◎ B  11/04/06 0.000 11/04/06 0.001│cln │BLOCK_HAS_OFFSET に関する部分は削除し、クリーンナップ
0045 ◎ B  11/04/07 0.000 11/04/07 0.001│Rfct│ブロック情報を渡す場合は TextBlockData を使用するように変更
0046 ◎ B  11/04/07 0.000 11/04/07 0.001│ToDo│Esc で現在カーソル情報、ブロックキャッシュ情報をステータスバーに表示
0047 ◎ B  11/04/07 0.000 11/04/07 0.001│ToDo│Shift + ←、→でテキスト選択
0048 ◎ B  11/04/07 0.000 11/04/07 0.001│ToDo│選択状態表示
	結果：とりあえずライトグレイで描画。後で色を変えよう
0049 ◎ B  11/04/07 0.000 11/04/07 0.001│問題│半角空白の次にカーソルがある場合に、カーソルが左にずれる
	結果：本件は治ったが、別件あり：SPR#0055
0050 ◎ B  11/04/07 0.000 11/04/07 0.001│ToDo│copy, cut
0051 ◎ B  11/04/07 0.000 11/04/07 0.001│ToDo│Home
	結果：とりあえず実装。先頭非空白文字へは移動しない。要別SPR登録
0052 ◎ B  11/04/07 0.000 11/04/07 0.001│ToDo│End
0053 ◎ B  11/04/07 0.000 11/04/10 0.002│ToDo│PageUp, PageDown
0054 ◎ B  11/04/07 0.000 11/04/07 0.001│Rfct│PlainTextEdit::keyPressEvent()カーソル移動処理部分：movePosition() コールを一箇所にする
0055 ◎ B  11/04/07 0.000 11/04/08 0.001│問題│途中に半角空白があるとカーソル位置がずれる
0056 ◎ B  11/04/07 0.000 11/04/07 0.001│問題│UTF-8データオフセットと文字数が混同されている
0057 ◎ B  11/04/07 0.000 11/04/07 0.001│問題│行数が10万を超えた場合は行番号エリアを広くした方がよい
0058 ◎ B  11/04/07 0.000 11/04/10 0.002│問題│改行挿入を行って、カーソルが画面下に移動しても、自動スクロールしない
0059 ◎ B  11/04/07 0.000 11/04/07 0.001│ToDo│Ctrl + A で全選択
0060 ◎ B  11/04/07 0.000 11/04/07 0.001│問題│垂直スクロールバー：ノブのサイズが大きい
0061 ◎ B  11/04/07 0.000 11/04/07 0.001│問題│undo/redo を行ったときに、カーソル位置が表示されるように自動スクロールしない
0062 ◎ B  11/04/07 0.000 11/04/10 0.002│ToDo│テキストカーソルブリンク
0063 ◎ B  11/04/08 0.000 11/04/08 0.001│ToDo│save
0064 ◎ B  11/04/08 0.000 11/04/08 0.001│問題│編集＆未保存文書をクローズしても、保存確認ダイアログが出ない
0065 ◎ B  11/04/08 0.000 11/04/08 0.001│ToDo│編集時に contentsChanged() シグナルをエミット
0066 ◎ B  11/04/08 0.000 11/04/08 0.001│ToDo│SaveAs
0067 ◎ B  11/04/08 0.000 11/04/08 0.001│ToDo│IME変換候補文字表示
0068 ◎ B  11/04/08 0.000 11/04/10 0.002│問題│IME変換候補一覧表示位置不正
0069 ◎ B  11/04/08 0.000 11/04/08 0.001│ToDo│マウスクリックでカーソル設定
0070 ◎ B  11/04/08 0.000 11/04/08 0.001│問題│「、」の直後のカーソルが左にずれる
0071 ◎ B  11/04/08 0.000 11/04/08 0.001│ToDo│マウスクリック＆ドラッグによる文字列選択
	結果：とりあえず実装。自動スクロールは未実装
0072 ◎ B  11/04/08 0.000 11/04/08 0.001│ToDo│Ctrl + ← → で単語単位移動
0073 ◎ B  11/04/08 0.000 11/04/08 0.001│問題│編集後にundoしてもモディファイ状態が元に戻らない
0074 ● B  11/04/08 0.000               │問題│↑↓でカラム位置が保存されない
	メモ：QFontMetrics が無いとx座標を計算できないので、TextCursor が QWidget へのポインタを保持する？
0075 ◎ C  11/04/08 0.000 11/04/13 0.004│問題│垂直スクロールバーのノブをドラッグして末尾移動しても、EOFが表示される様にスクロールしない
0076 ● C  11/04/08 0.000               │問題│IME変換中文字列はアンダーラインを表示した方がよい
0077 ◎ C  11/04/08 0.000 11/04/10 0.001│問題│初期状態から編集、undo 後に、redo を行ってもモディファイ状態にならない
0078 ◎ C  11/04/09 0.000 11/04/09 0.001│問題│Shift + Ctr + ←、→ が動作不良
0079 ◎ C  11/04/09 0.000 11/04/09 0.001│ToDo│マウスダブルクリックで単語単位選択
0080 ◎ C  11/04/09 0.001 11/04/09 0.002│問題│カーソルが CRLF 位置にいるときに、→ を押しても次の行にカーソル移動しない
0081 ◎ C  11/04/09 0.001 11/04/09 0.002│ToDo│Enter を押した場合は \n を挿入するようにしておく
0082 ◎ C  11/04/09 0.001 11/04/09 0.002│ToDo│CRLF/CR/LF の区別がつく改行記号をとりあえず表示
0083 ◎ C  11/04/09 0.001 11/04/09 0.002│ToDo│デバッグ用に TextDocument::m_blocks の値を表示するメニュー追加
0084 ◎ C  11/04/09 0.001 11/04/09 0.002│問題│改行挿入後のテキストカーソルの TextBlockData の値が不正
0085 ◎ C  11/04/10 0.001 11/04/10 0.002│Rfct│UndoMgr::m_items の型を std::vector<GVUndoItem> に変え、boost_pool の使用を止める
0086 ◎ C  11/04/10 0.001 11/04/10 0.002│ToDo│QtCreator minGW でビルド可能にする
0087 ◎ B  11/04/10 0.001 11/04/13 0.005│ToDo│Ctrl + Delete でカーソル位置単語末尾まで削除
0088 ◎ C  11/04/10 0.001 11/04/14 0.005│ToDo│Shift + Delete でカーソル位置から行末までを削除
0089 ◎ C  11/04/10 0.001 11/04/13 0.005│ToDo│Ctrl + BackSpace でカーソル位置から単語先頭まで削除
0090 ◎ C  11/04/10 0.001 11/04/14 0.005│ToDo│Shift + BackSpace でカーソル位置から行頭まで削除
0091 ○ C  11/04/10 0.001               │問題│2行目で文字挿入しても、ブロックキャッシュが2行目にならない
	結果：挿入行に設定されたあと、表示開始行に設定されていた
0092 ◎ C  11/04/10 0.001 11/04/10 0.002│問題│PageDown 押下に Ctrl + End を押しても、EOF が表示されるようにカーソル移動しない
0093 ◎ C  11/04/10 0.001 11/04/10 0.002│問題│カーソル移動直後にカーソルが表示されない。ブリンクタイマーをリスタートすべき
0094 ◎ C  11/04/10 0.001 11/04/14 0.005│ToDo│検索ダイアログをとりあえず作成
0095 ● C  11/04/10 0.001               │ToDo│置換ダイアログをとりあえず作成
0096 ◎ C  11/04/11 0.001 11/04/11 0.002│ToDo│View 用の ViewTextCursor をとりあえず導入（折り返し処理は後で実装）
0097 ◎ C  11/04/12 0.001 11/04/12 0.002│Rfct│ViewTextCursor は TextCursor の派生クラスとする
0098 ◎ C  11/04/12 0.001 11/04/12 0.002│Rfct│ビュークラス名を PlainTextEdit から TextView に変更
0099 ◎ C  11/04/12 0.001 11/04/12 0.002│ToDo│TextCursor の上下移動はオフセット値を保存するようにしておく
0100 ◎ C  11/04/12 0.001 11/04/12 0.003│ToDo│単体テストに失敗した結果からタグジャンプ可能にする
0101 ◎ C  11/04/12 0.002 11/04/12 0.003│問題│ファイルオープン状態で、MRUファイルからファイルオープンしても別ウィンドウが開かない
0102 ◎ C  11/04/12 0.002 11/04/12 0.003│ToDo│起動直後のウィンドウタイトルを ViVi 5.0.xxx にする
0103 ◎ A  11/04/12 0.002 11/04/12 0.003│問題│環境によっては SJIS ファイルをオープン、保存するとクラッシュする
0104 ◎ C  11/04/12 0.003 11/04/12 0.004│ToDo│デフォルトエンコーディングは QTextCodec::codecForLocale() とする
0105 ◎ C  11/04/13 0.003 11/04/13 0.004│ToDo│フォント選択ダイアログ（全ビュー共通）をとりあえず実装しておく
0106 ◎ C  11/04/13 0.003 11/04/13 0.004│問題│マウスホイールでフォントサイズを変更した場合は、ステータスバーにサイズ表示した方がよい
0107 ◎ C  11/04/13 0.003 11/04/13 0.004│ToDo│ベンチマークテスト中はカーソルを変更した方がよい
0108 ◎ C  11/04/13 0.003 11/04/13 0.004│ToDo│"XYZ"→"Abcde"、"Abcde"→"XYZ"全置換ベンチマーク
0109 ◎ C  11/04/13 0.003 11/04/13 0.004│問題│文書の最後の方で、行単位選択して Copy 後, Paste を繰り返すと結果が不正になった
	原因：改行が CRLF の場合、2文字なのに、カーソル移動では1文字とみなしているため
0110 ◎ C  11/04/13 0.003 11/04/13 0.004│問題│文書の最後の方で、行単位選択して Copy, Paste 後、undo すると文書先頭にスクロールしてしまった。
0111 ◎ C  11/04/13 0.003 11/04/13 0.004│ToDo│undo/redo 出来ない場合に undo/redo すると、カーソルが文書先頭に移動してしまう
0112 ◎ C  11/04/13 0.003 11/04/14 0.005│問題│検索ダイアログ：タイトルを tr("Find Dialog") に変更
0113 ◎ C  11/04/14 0.004 11/04/14 0.005│問題│Delete で1文字削除し、Undo したときに、カーソルが消した文字の直後に設定される。文字位置に設定されるべき
0114 ◎ C  11/04/14 0.004 11/04/14 0.005│ToDo│検索ダイアログ：大文字小文字同一視オプション追加
0115 ◎ C  11/04/14 0.004 11/04/14 0.005│問題│選択状態で削除を行った後 Undo した場合は、選択状態に復帰した方がよい
0116 ◎ C  11/04/14 0.004 11/04/14 0.005│ToDo│検索ダイアログ：検索方向オプション追加
0117 ◎ C  11/04/14 0.004 11/04/14 0.005│ToDo│検索ダイアログ：【検索＆クローズ】ボタン
0118 ◎ C  11/04/14 0.004 11/04/14 0.005│ToDo│検索ダイアログ：【キャンセル】ボタン
0119 ◎ C  11/04/14 0.004 11/04/17 0.006│ToDo│次検索メニュー・ツールバー・ショートカットキー（F3）
0120 ◎ C  11/04/14 0.004 11/04/17 0.006│ToDo│前検索メニュー・ツールバー・ショートカットキー（Shift + F3）
	結果：とりあえず実装。検索オプションの取り扱いについては別SPRとする
0121 ◎ C  11/04/14 0.004 11/04/17 0.006│ToDo│検索文字列履歴
0122 ◎ C  11/04/14 0.004 11/04/14 0.005│問題│マウスクリックした瞬間にテキストカーソルが表示されない。
0123 ◎ C  11/04/14 0.004 11/04/17 0.006│ToDo│Ctrl + F3 でカーソル位置単語検索
0124 ◎ C  11/04/15 0.005 11/04/15 0.006│ToDo│TextView::m_blocks を構築する buildBlocks をとりあえず実装してみる
0125 ● C  11/04/16 0.005               │ToDo│IME文字入力がマルチカーソルに対応していない
0126 ◎ C  11/04/17 0.005 11/04/17 0.006│ToDo│検索文字列を QSettings に保存
0127 ◎ C  11/04/17 0.005 11/04/17 0.006│ToDo│検索ダイアログ：ドロップダウンで検索履歴参照可能に
0128 ◎ C  11/04/18 0.005 11/04/18 0.006│問題│検索・置換ダイアログ：検索・置換文字列入力エリアは横方向を優先的に拡大
0129 ● C  11/04/18 0.005               │問題│単体テスト・ベンチマーク等を実行した場合は、アウトプットを強制表示
0130 ◎ C  11/04/18 0.005 11/04/18 0.006│ToDo│副カーソルとメインカーソルが重なっている場合は、副カーソルを削除
0131 ◎ C  11/04/18 0.005 11/04/18 0.006│問題│副カーソルが同一行に複数あっても、最初のひとつだけしか表示されない
0132 ◎ C  11/04/18 0.005 11/04/18 0.006│問題│マルチカーソル状態で文字入力された文字が一度に undo されない
0133 ● C  11/04/18 0.005               │ToDo│
