私はFlex/AS3で(簡単にするために)XMLエディターで作業しています。元に戻す/やり直し機能を提供する必要があります。
もちろん、1つの解決策は、編集のたびにソーステキスト全体を保存することです。ただし、メモリを節約するために、代わりにdiffを保存したいと思います(これらのdiffは、自動保存のために更新をサーバーに送信するためにも使用されます)。
私の質問は、これらのXMLの変更を追跡するためにプレーンテキストのdiffアルゴリズムを使用できますか?
インターネットでの私の調査は、私がそうすることができないことを示しています。しかし、私は明らかに何かが欠けています。平文diffは、次のような機能を提供します。
diff(text, text') -> diffs
patch(text, diffs) -> text'
XMLは単なるテキストですが、なぜdiff()とpatch()を使用してテキストを確実に変換できないのでしょうか。
例:私が詩人だとしましょう。詩を書くときは、ファンキーな句読点をたくさん使います... <、/、>のように。(これでどこに行くのかわかるかもしれません...)diffを使用して元に戻す/やり直し機能を提供するアプリケーションで詩を書いている場合、編集を元に戻す/やり直すと詩が文字化けしますか?ただのテキストです!なぜそれがアルゴリズムに違いをもたらすのですか?
私は明らかにここで何かを得ていません...説明してくれてありがとう!:)
アップデート:
平文アルゴリズムを使用したXMLの差分に関して私が遭遇したいくつかの議論:
- http://code.google.com/p/google-diff-match-patch/wiki/Plaintext
- プレーンテキストのgoogle-diff-match-patchのように、htmlstringに対するJS diffライブラリはありますか?
また、コマンドパターンがUndo/Redoを実装するためのより良い方法である可能性が高いことを理解しています。簡単にするためにユースケースを簡略化しましたが、それでもXML差分が最善のアプローチだと思います。