pyLCDstring — утилита для подготовки русских строк к выдаче на символьные ЖКИ
История развития программы
- Добавлен префикс выравнивания M для полуцентрирования. Отличие от центрирования (при использовании префикса C) заключается в том, что исходная строка сначала центрируется в поле указанной ширины, а затем в ней отбрасываются все пробелы в конце строки. Полуцентрирование полезно для обработки строк, в конце которых присутствует символ \n (перевод строки). Пример:
- Исходный файл:
d = c16"abc"
e = m16"abc"
- После обработки:
char d[] = " abc "; /* c16"abc" */
char e[] = " abc"; /* m16"abc" */
- В шапку генерируемых c- и h- файлов больше не выводится дата и время обработки файла. Это сделано для того, чтобы выходные файлы при неизменном входном оставались также неизменными. Продиктовано жизненной необходимостью при использовании CVS. Опция вывода информации о дате-времени будет восстановлена в последующих версиях после того, как будет произведено отделение разбора и анализа входного файла от генерации выходного файла (одного или нескольких).
Исправлена ошибка с обработкой строк со строковыми литералами — если в начале строки перед именем переменной имелись пробелы, то такая строка не обрабатывалась;
Добавлен словарь перекодировки koi2win для перекодировки текстов из кодировки КОИ-8 в cp1251 (Windows);
Переработан движок утилиты. Скорость работы утилиты увеличилась на 40% (тестировалось на очень длинных файлах в Python 2.3); При использовании Python 2.4 скорость дополнительно возрастает еще на 15%;
Добавлен минимальный генератор массивов указателей на строки;
В пакет с утилитой добавлен скрипт recoding.py для перекодировки текстовых файлов с использованием имеющихся словарей перекодировки.
В директиве Align больше не допускается указывать выравнивание по умолчанию в форме:
//// Align =
необходимо явно указать ключевое слово none или None.
- Протестирована работа утилиты в среде Windows/Linux с Python версий 2.3/2.2. Для обеспечения полной переносимости между разными системами и версиями Python в текст скрипта внесены непринципиальные изменения. Для пользователей скомпилированного консольного приложения под Windows эти изменения практически незаметны. Поэтому решено новую версию консольного exe-файла и дистрибутива не выкладывать. На сайте выложена только новая версия скриптов.
- Изменена рабочая структура каталогов. Словари перекодировки вынесены в отдельный каталог [dict], который преобразован в python-пакет.
- добавлена поддержка символов форматирования (%%, %d, ...)
- если в непосредственном префиксе выравнивания указано поле длиной 0, то выравнивание и любые проверки длины исходной строки не производятся
- добавлен вывод в шапку си-файла текущей даты/времени
- причесан код утилиты (без принципиальных изменений)
- несколько изменен дистрибутив утилиты
- добавлен полноценный инсталлятор (для Windows)
- Протестирована работы утилиты в среде Linux. Сделаны мелкие непринципиальные улучшения для большей универсальности и переносимости программы в виде python-скрипта.
здесь
- NN — заданное поле выравнивания, `
- MM — реальная длина строки
- Доработан обработчик директивы Map. Теперь при перекодировке символы двойной кавычки (") или обратной косой черты (\) экранируются при помощи обратной косой (\), как того требуют правила языка Си.
- Добавлены два новых словаря перекодировок:
- win2dos — для перекодировки букв кириллицы из кодировки Windows (cp1251) в кодировку DOS (cp866)
- dos2win — для перекодировки букв кириллицы из кодировки DOS (cp866) в кодировку Windows (cp1251)
В обоих словарях реализована поддержка русских, украинских и белорусских букв.
Исправлена недоработка при выравнивании строк, содержащих эскейп-последовательности
Префиксы выравнивания lNN, rNN, cNN теперь можно указывать и с заглавной буквы: LNN, RNN, CNN
Добавлен новый аргумент директивы Align для указания утилите, что выравнивание производить не требуется:
//// Align = none
Введен механизм проверки корректности префиксов выравнивания строк и правильности аргумента директивы Align. В случае указания неверного префикса выдается соответствующее предупреждение
Добавлена опция командной строки --nowarnings, по смыслу противоположная опции --warnings. А опция --warnings теперь включена по умолчанию.
Значительно переработана и улучшена утилита. Кроме мелких улучшений алгоритма работы, переделан вывод предупреждений на консоль (соответствует стандарту де-факто для трансляторов),
добавлен ключ командной строки --warnings, который влияет на выдачу возвращаемого кода при обнаружении предупреждений. Добавлены словари перекодировок: none, keil (замена букв э и я на соответствующие восьмеричные константы).
Расширены возможности утилиты по автоматическому определению и выделению строк, длина которых больше чем заданное поле в префиксе выравнивания. Добавлен новый префикс #NN, который позволяет производить только проверку длины строки, без выравнивания. Его можно использовать по тем же правилам, что и другие префиксы (lNN, rNN, cNN).
В архивы с утилитой включен файл ToDo.htm, который отражает мои размышления о будущем развитии утилиты. Если у вас тоже имеются идеи по внесению каких-то полезных свойств — напишите мне.
Добавлена возможность автоматического определения и выделения строк, длина которых больше, чем заданное поле выравнивания (в префиксе lNN, rNN, cNN). Для таких строк выводится предупреждение на экран (если не задан молчаливый режим) и в Си-файл (перед длинной строкой вставляется строка-комментарий с сообщением:
String too long for field size=NN
Кроме того, улучшен алгоритм обработки имени входного файла, если оно задано полным путем. Для вывода в файлы и определения константы для условного включения заголовочных h-файлов используется короткое имя файла (без полного пути, если таковой задан). Это позволяет избежать некоторых неприятных моментов.
В архивы с утилитой включен файл test.lcd, который я использую для тестирования работы утилиты. Он содержит различные варианты строк, в том числе и "длинную" строку, которая не умещается в поле 16 символов.
Первая рабочая версия, опубликованная в интернете. Реализована вся базовая функциональность.