5

Java で HTML エディターをコーディング中です。自動インデントをサポートしたい。現在編集中のファイル内の HTML タグ オブジェクトを表す複合パターンを実装しています。たとえば、次のコード:

<table> <tr> <th>Col1</th> <th>Col2</th> </tr> <tr> <td>Data1</td> <td>Data2</td> </tr> </table>

コンポジットでは、次の構造表現が得られます。

  • テーブル -> tr(最初)、tr(2番目)
  • tr(最初) -> th(Col1)、th(Col2)
  • tr(秒) -> td(データ1)、td(データ2)

ここで、x -> y, z は、x が y と z の親であることを意味します。

ここには 2 つのオプションがあります。

  1. インデントを含む文字列を返す再帰関数を作成します。
  2. 現在の HTML コードのフォーマットされていない文字列を返すだけの再帰関数を作成し、後でインデントを追加します。

最初に行うのは簡単です。ただし、ユーザーがパターンを変更した場合、ユーザーのインデント パターンに従って自動インデントを続けるのは難しいと思います。このため、オプション 2 が望ましいと思います。正しく機能させることができれば、これもより動的になる可能性があると思います。問題は、文字列の操作方法がよくわからないことです。

私の考えでは、どういうわけかスタックを使用できるということです。開いているタグを押して、閉じたら外すことができます。スタック上のタグの数によって、新しい行の次のタグの前にインデントする必要がある回数が決まります。代わりに整数を使用することもできますが、同じ概念が適用されます。問題は、文字列を操作できるように、文字列内のタグを反復処理する方法がわからないことです。

それで、私が説明した方法で文字列操作を行う方法はありますか? それとも、再帰関数を使用する方が良いですか?

4

2 に答える 2

1

あなたの非常に明確な質問を考えると、あなたがそれに答えるのに最適な人だと思います.もっと情報が必要です.

その情報を得るには、これが役立つ場合があります。

  1. テキストのライフサイクル全体を考慮してください。キーストロークなどに反応する必要があります。その場合、パディングされた文字列を操作するよりも、モデルとプレゼンテーションを明確に分離する方がはるかに優れています。もう 1 つの利点は、モデルから比較的独立して既存のテキスト編集コンポーネントを選択できることです。

  2. 例を考えてみましょう: リッチ テキスト エディター、jEdit などのオープン ソース。

于 2012-10-20T09:12:12.233 に答える
0

XHTML の場合、XSLT および XSL スタイル シートを使用して非常に簡単に作業を行うことができます。

于 2012-10-20T09:14:57.463 に答える