Advertisement
Guest User

Untitled

a guest
Aug 28th, 2014
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. @="итерация алгоритма"
  2.     * слева есть фрагмент
  3.         * справа этот фрагмент смещён ниже
  4.             // можно не искать до конца документа, достаточно упереться в следующий "старый" фрагмент
  5.             // оказаться выше он не может, т.к. порядок изначальных фрагментов менять нельзя
  6.             = значит между оригинальной и новой позицией появились новые фрагменты. тут по сути была "вставка"
  7.                 фрагментов, без замены оригинальных. рисуем фрагменты справа как новые, слева показываем вместо них дыру
  8.         * справа этот фрагмент отсутствует вовсе
  9.             * при поиске мы упёрлись в конец документа?
  10.                 * мы СРАЗУ упёрлись?
  11.                     // т.е. документ справа закончился, в то время как документ слева ещё нет
  12.                     = рисуем "изъятие", справа дыра
  13.                 * мы не сразу упёрлись
  14.                     // значит была замена
  15.                     = рисуем "замену" оригинального, на новые фрагменты (т.е. все до конца новой версии документа)
  16.             * при поиске мы упрёлись в "старый" фрагмент
  17.                 * при поиске мы СРАЗУ же упёрлись в старый фрагмент?
  18.                     = значит оригинальный фрагмент был просто выкинут. рисуем "удаление", т.е. слева перечёркнутый фрагмент,
  19.                         а справа дыра
  20.                 * упёрлись не сразу
  21.                     = рисуем "замену" оригинального, на новые фрагменты (т.е. все до старого)
  22.     * слева нет фрагмента
  23.         // значит документ слева закончился, а справа ещё нет
  24.         = рисуем "вставку", без замены
  25.  
  26. @="алгоритм"
  27.     * пробегаем по правой версии
  28.         * помечая все несуществующие фрагменты слева как "новые", оставшиеся "старые", для удобства
  29.     * пробегаем обе версии
  30.         * помечаем "next", "nextIdx", "prev", "prevIdx"
  31.     * пробегаем от первого до последнего фрагмента слева, а потом до последнего фрагмента справа
  32.         * сравнение фрагментов происходит только по docIndex-ам
  33.         * имеем два курсора (1 слева и 1 справа)
  34.         * первым пробегом (который будет включать многочисленные поиск-пробеги справа) мы формируем список изменений, исходя из блока выше
  35.         * вторым пробегом (уже по изменениям) пытаемся сгруппировать изменения слева, для подряд идущих (слева) фрагментов
  36.             // алгоритма группировки и соответсвующей визуализации пока придумал =(
  37.         * сформировав группы для показа, формируем "окружение" этих групп фрагментами: 1 выше, 1 ниже, для показа контекста
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement