Parsing human-made Excel (.xls/.xlsx) sheets into machine-readable form.
Main application of the configurable project is to deal with VSTU's timetable files (in Russian).
Some successful experiments. / Tcnm успешные эксперименты, в отладке 2D-парсер.
Жирный прямоугольник — это родительский 2D-паттерн, остальное — это его компоненты, которые ссылаются на другие паттерны с целью включить их в состав родительского паттерна.

- Сетка - двумерное целочисленное координатное пространство.
- Ячейка - минимальная единица сетки, обладающая координатами и ненулевым размером (для случая объединённых ячеек размер более 1х1).
- Строковый шаблон - паттерн, включающий в себя регулярное выражение, который определяет тип контента ячейки по ее текстовому содержимому.
- Паттерн - 2D-шаблон некоторой структуры на сетке; может быть трёх видов: ячейка, структура, массив.
- Паттерн-ячейка (cell) - одна “физическая” ячейка с контентом определённого типа.
- Паттерн-структура (area) - одна или более ячеек, потенциально различных типов, объединенных паттерном; каждый компонент встречается в структуре только один раз.
- Паттерн-массив (array) - одна или более ячеек одного типа (паттерна), расположенных близко друг к другу.
- Компонент - это часть паттерна, которая позволяет включить другой паттерн в состав родительского; может обладать ограничениями на позицию внутри родительской структуры (для внутренних компонентов), или вовне (для внешних компонентов).
- Область совпадения (match) - прямоугольник с известными координатами на сетке (координаты угла и длина+ширина), в котором обнаружен некоторый паттерн.
- Ограничения на положение (location) - набор отступов типа padding или margin в любом из четырёх направлений (left, top, right, bottom), каждый из которых может быть задан целым числом или диапазоном. Ограничения накладываются на расположение компонента относительно родительского паттерна.
- Диапазон (open_range) - интервал (два числа), обозначающий левую и правую границу (обе включительно), причём любая из них может быть бесконечной, то есть диапазон может быть открытым интервалом.
- Промежуток (gap) - диапазон допустимого расстояния между элементами массива.
- Направление расположения элементов массива (direction) - взаимное расположение элементов массива: row - ряд по горизонтали, column - ряд по вертикали, fill - область произвольной формы, где элементы расположены друг от друга на расстоянии не более заданного промежутка (gap).
location -- это набор отступов по 4 сторонам (если какая-то сторона не указана, то она считается по умолчанию: см. таблицу).

Паттерн - это:
- имя (ключ словаря: идентификатор по типу имени переменной)
- описание (description) - многострочный комментарий для человека
- вид (kind): ячейка, структура, массив
- Свойства:
- ограничения на размер (size, опционально)
- ограничения на количество объектов в документе (count_in_document, опционально)
Паттерн типа “ячейка”:
- content_type - тип контента
Паттерн типа “массив”:
- direction - направление заполнения(роста)
- item-pattern - повторяющийся паттерн
- gap - допустимый отступ между элементами (диапазон)
- item_count - ограничение на количество элементов в массиве (диапазон)
Паттерн типа “структура”:
- inner - перечисление внутренних компонентов (ключ - имя компонента)
- outer - перечисление внешних компонентов (ключ - имя компонента)
Компонент - это часть паттерна, который позволяет включить другой паттерн в состав родительского:
- вид (внутренний или внешний), задается ключом inner/outer в паттерне
- ссылка на дочерний паттерн (pattern) или inline-определение паттерна (pattern_definition)
- ограничения на размер — двойной диапазон (size, опционально)
- ограничения на расположение относительно родительского паттерна (location, опционально)
- openpyxl и/или xlrd для извлечения информации о содержимом и форматировании ячеек, а также о стиле границ между ними
- xls2xlsx для конвертации старого формата (Excel 2003) в новый (Excel 2007+) (НЕ COM (pywin32) + MS Excel, т.к. данные заменяются формулами)
- re (регулярные выражения) для классификации и разбора содержимого ячеек
