Я работаю в Flex / AS3 над (для простоты) редактором XML. Мне нужно предоставить функцию отмены / повтора.
Конечно, одно из решений - сохранять весь исходный текст при каждом редактировании. Однако для экономии памяти я хотел бы вместо этого сохранить различия (эти различия также будут использоваться для передачи обновлений на сервер для автоматического сохранения).
У меня вопрос: могу ли я использовать алгоритм сравнения текстов для отслеживания этих изменений XML?
Мои исследования в Интернете показывают, что я не могу этого сделать. Однако мне явно чего-то не хватает. Открытый текст diff обеспечивает следующие функциональные возможности:
diff(text, text') -> diffs
patch(text, diffs) -> text'
XML - это просто текст, так почему я не могу просто использовать diff () и patch () для надежного преобразования текста?
Например: допустим, я поэт. Когда я пишу стихи, я использую много необычных знаков препинания ... Вы знаете, например, ‹, / и>. (Вы можете увидеть, к чему я клоню ...) Если я пишу свои стихи в приложении, которое использует различия для обеспечения функциональности отмены / повтора, искажаются ли мои стихи, когда я отменяю / повторяю свои правки? Это просто текст! Почему это имеет значение для алгоритма?
Я здесь явно чего-то не понимаю ... Спасибо за объяснение! :)
ОБНОВЛЕНИЕ:
Некоторое обсуждение, с которым я столкнулся относительно различий XML с алгоритмом открытого текста:
- http://code.google.com/p/google-diff-match-patch/wiki/Plaintext
- Есть ли библиотека JS diff для htmlstring точно так же, как google-diff-match-patch для обычного текста?
Кроме того, я понимаю, что шаблон Command, вероятно, лучший способ реализовать Undo / Redo. Я упростил свой вариант использования для простоты и по-прежнему считаю, что сравнение XML - лучший подход.