Пётр Кушнир писал(а):
Роман, ваша задача подразумевает замену интерфейса Stores.Reader/Stores.Writer с потокового на структурный, а на эту структурность уже натягиваются и xml (и остальные подобные форматы) и дифф и слияние. Правильно я понимаю?
UPD: насколько я понял, проблема состоит в том, что в xml минимальная единица это ветка (Node), то есть, для записи даже самой минимальной информации необходима целая ветка определённого типа. В бинарном формате, таком как .odc минимальная единица это байт. Поэтому не получится превратить xml в хранилище бинарного формата данных, как не получится интерфейс Stores ограничить структурными единицами.
В целом, конечно, ничего не мешает совершить поступательное развитие, и сначала обернуть бинарные данные odc с помощью xml-контейнера, затем на этот xml-контейнер надстроить базовый XmlStore с базовыми записывателями, и уже на основе этого продолжить развитие цепочки наследования XmlStore -> XmlView -> ContainerXmlView -> TextXmlView, к этому времени обеспечить механизмы работы всех звеньев цепочки, а старый бинарный Store и его наследников объявить устаревшими и в конце концов отправить на пенсию. Других сценариев я не вижу. Получится наш ответ ODF, хы-хы, все желающие могут ознакомиться с бегунками по структурам в подсистеме Odf, ничего сложного в общем-то.
Лично я и вовсе не вижу в этом необходимости. Но против ничего не имею, сам иногда задумываюсь о том, что неплохо бы иметь базовый тип персистентных данных который не является бинарным.
Если исходить из того, что мы не имеем встроенных в ББ средств сравнения составных документов, то примитивным решением является сериализация единиц View в закодированную последовательность (допустим, в StdCoder). Таким образом, для этого в ББ потребуется обеспечить два механизма: сериализацию и десериализацию. Так станет возможным временно вставить закодированный кусок в ББ для его последующей раскодировки и отображения (допустим, формы диалога) и затем вернуться во внешний (примитивный, на тексте) инструмент сравнения, чтобы произвести слияние выбранных частей.
Код:
<body>
Text Text<para/>Text
<view type="OleClient.View">
<data>
DLKHFLNLKCHcdscsad875875...
</data>
<view type="HostPictures.StdView">
<data>
BVKJSDhF99797...
</data>
</view>
</view>
Text Text Text
<view type="TextViews.View">
<data>
KCJGSKJGsdfsdsdd6s...
</data>
</view>
</body>
Как-то так...