Требования к программному обеспечению
Следующие программные пакеты доступны как для систем Windows, так и для Linux и необходимы для полного рабочего решения:
- gvim - используется для экспорта выделенного синтаксиса исходного кода в HTML.
- moria - Цветовая схема для подсветки синтаксиса.
- wkhtmltoimage - используется для преобразования документов HTML в файлы PNG.
- gawk and sed - Инструменты для обработки текста.
- ImageMagick - Используется для обрезки PNG и добавления рамки.
Общие шаги
Вот как работает решение:
- Загрузите исходный код в редактор, который может добавить всплески цвета.
- Экспортируйте исходный код в виде HTML-документа (со встроенными тегами
FONT
).
- Уберите атрибут фона из документа HTML (чтобы обеспечить прозрачность).
- Преобразуйте документ HTML в файл PNG.
- Обрезать границы PNG.
- Добавьте небольшую 25-пиксельную рамку вокруг изображения.
- Удалить временные файлы.
Сценарий генерирует изображения одинаковой ширины для исходных файлов, содержащих строки длиной до 80 символов. Исходные файлы со строками длиной более 80 символов приводят к изображениям шириной, необходимой для сохранения всей строки.
Монтаж
Установите компоненты в следующих местах:
- gvim -
C:\Program Files\Vim
- moria -
C:\Program Files\Vim\vim73\colors
- wkhtmltoimage -
C:\Program Files\wkhtml
- ImageMagick -
C:\Program Files\ImageMagick
- Гоук и Сед -
C:\Program Files\GnuWin32
Примечание: в ImageMagick есть программа convert.exe
, которая не может заменить команду convert
Windows. По этой причине полный путь к convert.exe
должен быть жестко задан в командном файле (в отличие от добавления ImageMagick в PATH
).
Переменные среды
Установите переменную среды PATH в:
"C:\Program Files\Vim\vim73";"C:\Program Files\wkhtml";"C:\Program Files\GnuWin32\bin"
Пакетный файл
Запустите его используя:
src2png.bat src2png.bat
Создайте пакетный файл с именем src2png.bat
, скопировав следующее содержимое:
@ECHO OFF
SET NUMBERS=-c "set number"
IF "%2" == "" SET NUMBERS=
ECHO Converting %1 to %1.html...
gvim -e %1 -c "set nobackup" %NUMBERS% -c ":colorscheme moria" ^
-c :TOhtml -c wq -c :q
REM Remove all background-color occurrences (without being self-referential)
sed -i "s/background-color: #......; \(.*\)}$/\1 }/g" %1.html
ECHO Converting %1.html to %1.png...
wkhtmltoimage --format png --transparent --minimum-font-size 80 ^
--quality 100 --width 3600 ^
%1.html %1.png
move %1.png %1.orig.png
REM If the text file has lines that exceed 80 characters, don't crop the
REM resulting image. (The book automatically shrinks large images to fit.)
REM The 3950 is the 80 point font at 80 characters with padding for line
REM numbers.
SET LENGTH=0
FOR /F %%l IN ('gawk ^
"BEGIN {x=0} {if( length($0)>x ) x=length()} END {print x;}" %1') ^
DO (
SET LENGTH=%%l
)
SET EXTENT=-extent 3950x
IF %LENGTH% GTR 80 SET EXTENT=
REM Trim the image height, then extend the width for 80 columns, if needed.
REM The result is that all images will be resized the same amount, thus
REM making the font size the same maximum for all source listings. Source
REM files beyond the 80 character limit will be scaled as necessary.
ECHO Trimming %1.png...
"C:\programs\ImageMagick\convert.exe" -format png %1.orig.png ^
-density 150x150 ^
-background none -antialias -trim +repage ^
%EXTENT% ^
-bordercolor none -border 25 ^
%1.png
ECHO Removing old files...
IF EXIST %1.orig.png DEL /q %1.orig.png
IF EXIST %1.html DEL /q %1.html
IF EXIST sed*. DEL /q sed*.
Улучшения и оптимизации приветствуются.
Примечание. Последняя версия wkhtmltoimage правильно обрабатывает переопределение цвета фона. Таким образом, в теории линия для удаления CSS для фоновых цветов больше не нужна.