テキスト エディターの重要なデータ構造は、テキストを保持するものです。 この記事では、人々がテキスト エディター用に選択する構造の種類をまとめています。記事は古いですが、今日でも非常に関連性があります。
非常に単純なデータ構造 (文字の配列など) は、大量のデータを移動またはコピーすることになるため、すでに非常に長いドキュメントの先頭に文字を挿入するなど、特定の種類の操作には遅すぎる傾向があります。 . ほとんどのデータ構造は、ドキュメントを巧みにチャンクに分割することで、移動するデータの量を削減または制限します。リンクした記事に詳細があります。
より高度なデータ構造を使用するもう 1 つの理由は、取り消しややり直しなどの機能を簡単に実装できるようにするためです。一部のデータ構造では、削除されたテキストを簡単に保持できるため、いくつかのポインターまたはオフセットを変更することで、ドキュメントを以前の状態に簡単に戻すことができます。
追加のデータ構造はテキストの書式設定に役立ちますが、それらは通常、テキスト エディターよりもドキュメント エディター (Word など) 向けです。
JTextArea (および他のプラットフォームの同等の機能) は本質的にテキスト エディターであり、リンク先の記事のデータ構造の 1 つを使用している可能性があります。
既存のものを使用するのではなく、そのレベルでテキスト エディターを作成する場合は、いくつかの種類の機能を実装する必要があります。
- ファイルからデータ構造にテキストをロードし、再度保存します。
- テキストを変更するキー押下への応答。たとえば、ユーザーが文字キーを入力した場合、その文字をテキスト データ構造の現在の場所に挿入する必要があります。バックスペース キーを押した場合は、文字を削除する必要があります。等。
- ドキュメントを画面に表示します。ウィンドウ座標をテキスト シーケンスのあるポイントにマップする必要があり、その逆も同様です。たとえば、ユーザーがマウスをクリックした場合、クリックの (x,y) 座標をテキスト シーケンス内の位置に変換する必要があります。レイアウトがどれほど洗練されているかによって、これをその場で計算できる場合がありますが、多くの場合、テキスト シーケンスとウィンドウ座標の間のマッピングとして機能する追加のデータ構造があると役立ちます。もちろん、テキストが変更された場合やウィンドウのサイズが変更された場合は、そのデータ構造を更新する必要があります。