OberonCore https://forum.oberoncore.ru/ |
|
Diff & Patch https://forum.oberoncore.ru/viewtopic.php?f=47&t=2339 |
Страница 1 из 1 |
Автор: | Роман М. [ Четверг, 11 Февраль, 2010 14:57 ] |
Заголовок сообщения: | Diff & Patch |
Продолжение развития темы "Контроль изменений в составных документах" http://forum.oberoncore.ru/viewtopic.php?f=1&t=2323&start=0. В этой теме будем обсуждать технические стороны подсистемы и реализацию. Выкладываю последнее техописание (spec) средств управления изменениями версий составных документов BlackBox (аналог diff и patch). Вложение: Код: (* Поля служебного заголовка *)
Header* = RECORD header-:ARRAY 12 OF CHAR; (* Название формата файла *) version-: INTEGER; (* Версия формата *) datetime-: RECORD (* Дата-время заплатки *) d-: Dates.Date; t-: Dates.Time END; chksum-: INTEGER (* *) END; (* Поля заплатки *) Label* = RECORD tag-: INTEGER; (* Уникальная метка *) type-: BOOLEAN; (* Начало/Конец заплатки *) desc-: ARRAY 32 OF CHAR; (* Описание *) path-: ARRAY 64 OF CHAR (* Путь к файлу для применения заплатки *) END; (* Поля блока *) Block* = RECORD optype-: INTEGER; (* Тип операции: добавление/удаление/изменение блока *) size-: INTEGER (* Размер блока в байтах *) END; |
Автор: | Иван Горячев [ Четверг, 11 Февраль, 2010 15:29 ] |
Заголовок сообщения: | Re: Diff & Patch |
Роман М. писал(а): Код: (* Поля заплатки *) Label* = RECORD tag-: INTEGER; (* Уникальная метка *) type-: BOOLEAN; (* Начало/Конец заплатки *) desc-: ARRAY 32 OF CHAR; (* Описание *) path-: ARRAY 64 OF CHAR (* Путь к файлу для применения заплатки *) END; 1. Какой смысл имеет поле type? 2. desc и path слишком маленькие. Лучше так: Код: descLen- : INTEGER; desc- : ARRAY [descLen] OF CHAR; (*это же раскладка в файле, псевдокод тобишь*) 3. Какая информация хранится в блоке? 4. И как таки обращаемся с вложенными вьюшками? Просто без этого затея вообще бессмысленна - проще перевести документ в текст и пользовать толпу имеющихся тулзовин. А информация о цвете-шрифтах всё-таки гораздо менее ценна чем вложенный текст, например. |
Автор: | Роман М. [ Четверг, 11 Февраль, 2010 16:10 ] |
Заголовок сообщения: | Re: Diff & Patch |
|
Автор: | Иван Горячев [ Четверг, 11 Февраль, 2010 16:41 ] | ||
Заголовок сообщения: | Re: Diff & Patch | ||
Роман М. писал(а):
Да, именно это и имелось. Цитата: Меня такие вопросы наводят на мысль, что я мыслю по-прежнему, по-борландовски. Поправь, если я не прав. Похоже на то. У нас вообще-то есть готовый инструмент для хранения разнородных блоков патча - составной документ ББ. Как это должно выглядеть - в примере. Естественно там без обработки ошибок и ещё кучи мелочей... Так что вопрос о формате патч-файла вообще не стоит - ODC ![]() А вот что я реально не понимаю - алгоритм работы diffа. Патчер - тупой конечный автомат, перебирающий блоки. А вот diff?
|
Автор: | Роман М. [ Четверг, 11 Февраль, 2010 17:11 ] |
Заголовок сообщения: | Re: Diff & Patch |
Для diff алгоритм таков: Википедия: Наибольшая общая подпоследовательность. Нужно подумать как быть в нашем случае. |
Автор: | Роман М. [ Суббота, 13 Февраль, 2010 13:58 ] |
Заголовок сообщения: | Re: Diff & Patch |
Стал рассматривать различные реализации diff: все они повязаны на построчной (тобишь line break) обработке. Причём, некоторые из них используют дополнительные трюки, основанные на использовании хэш-таблиц этих строк. В нашем же случае (документ ODC) мы имеем одну длинную строку. В связи с чем пока затрудняюсь в подгонке алгоритма под такой случай. У кого есть какие мысли насчёт этого? |
Автор: | Иван Горячев [ Суббота, 13 Февраль, 2010 14:56 ] |
Заголовок сообщения: | Re: Diff & Patch |
Роман М. писал(а): Стал рассматривать различные реализации diff: все они повязаны на построчной (тобишь line break) обработке. Причём, некоторые из них используют дополнительные трюки, основанные на использовании хэш-таблиц этих строк. В нашем же случае (документ ODC) мы имеем одну длинную строку. В связи с чем пока затрудняюсь в подгонке алгоритма под такой случай. У кого есть какие мысли насчёт этого? 1. "Документ ODC" - понятие растяжимое и не всегда текстовое. Формы - они тоже ODC 2. В тексте есть строки - TextMappers.Scanner возвращает TextMappers.line в конце каждой строки. Другое дело что никакого быстрого чтения строк в ББ нет. К тому же строки (клавишу Ввод) люди обычно пользуют только в исходниках. В документации же "строка" часто соответствует абзацу. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |