-
Notifications
You must be signed in to change notification settings - Fork 1
/
Algorithm.txt
13 lines (10 loc) · 1.44 KB
/
Algorithm.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
Если вдруг кому-то зачем-то любопытно, опишу, как же сейчас в RESearch устроена работа с файлами - заодно у себя в голове причешу.
1. Начинается все с создания Decoder - объекта, который умеет из чего-то декодировать в нативную кодировку (OEM в Far 1.7, Unicode в Far 2/3), и умеет сопоставлять смещения в исходном и преобразованном буферах.
2. Далее создается FileBackend - объект, которому на вход подается имя файла и Decoder, а он соответственно позволяет последовательно читать этот файл, выдавая наружу уже данные в нужной кодировке
3. Потом по необходимости создается Processor - объект, который нарезает вывод Backend-а в нужные куски - например, построчно, или кусками по несколько строк (последний к тому же заменяет \r\n на \n).
4. И уже собственно поиск берет куски из Processor-а, и ищет в них. Таким образом, алгоритму поиска пофиг и на кодировку, и на Single-line / Several-line / Multi-line и т.д.
5. А еще бывают вложенные декодеры, например...
Структура на самом деле та же.
Но вступает в дело то, что каждый из этих объектов, кроме чтения, поддерживает еще и запись - в виде вызовов типа "записать в вывод все, что было во входе до этой позиции" и "записать вот это, пропустив столько-то".
И вот в последнем-то - надо как-то не запутываться, где я съел \r например при преобразовании в Several-line, или как входной utf-8 мапится на выходной Unicode...
Короче весело. Зато, если все правильно написано, должно более-менее быстро работать.