Во процессе написания заметок про
установку и
настройку виджета Blogger Archive Calendar передо мной в полный рост встала проблема публикации в своих сообщениях исходного кода html. Задача вроде бы несложная, но встроенный редактор упорно норовит обработать все теги, встречающиеся в сообщении, и никакое обертывание в <pre>...</pre> или <code>...</code> не помогает - похоже, что для редактора blogger попросту не существует понятия "преформатированный текст". Досадно, что такая уважаемая кнтора, как Google, не озаботилась внести в базовый функционал своего сервиса столь необходимую вещь, как запрет на форматирование определенных частей сообщения.
Подробности решения ниже:
В процессе поисков решения я нашел и перечитал кучу сообщений про подсветку синтаксиса в сообщениях blogger, попробовал некоторые из них - такие, как javascript-программа
higlight.js или решение от самой Google -
Google Code Prettifier (к слову, ни одно из них с ходу не заработало, в частности переводы строки оба убивают напрочь), попробовал подсветку путем описания тегов <pre> и <code> внутри шаблона блога (здесь некоторые результаты удалось получить - выставить другой шрифт и цвет для кода). Но ни одно из найденных решений для подсветке не устраняло проблему "всеядности" редактора сообщений blogger. Код по-прежнему "пережевывался" им, что приводило либо к искажениям в заметке, либо к ошибкам публикации (когда редактору попадались незакрытые теги типа <head> или <title>). Самое паршивое заключалось в том, что проблему никак не удавалось формализовать. Наконец, в ходе обмена мнениями в комментарих к
этой заметке удалось найти решение. Оно банальное, но не совсем очевидное (поскольку обычно редакторы все же понимают теги, указывающие на запрет обработки текста, заключенного в них). Решение это заключается в переводе спец-символов чистого html в эскейп-последовательности, что позволяет обойти ограничения редактора. Для выполнени конвертации я сначала пользовался
веб-формой, но недавно наткнулся на экспериментальный плагин к Firefox под труднопроизносимым названием
highlightbloggercode.
Плагин этот добавляет к интерфейсу редактора blogger кнопочку "Code", при нажатии на которую раскрывается окно для ввода исходного кода (в нем же выбирается язык), после ввода спецсимволы автоматически конвертируются и код вставляется в сообщение обернутым в теги <code>...</code> - очень удобно и минимум телодвижений! Выглядит это примерно так:

Так что рекомендую указанный плагин всем тем, кто пользуется штатным редактором blogger, браузером firefox и испытывает трудности с публикацией исходных кодов в своих заметках!
Кстати, для подсветки кода я тоже использую
веб-форму, поскольку разбираться с проблемами скриптов для динамической подсветки банально лень - на дворе лето и копаться в малознакомом мне javascript желания нет совсем. Пока обойдусь статической подсветкой, результат которой выглядит например так:
#!/usr/bin/perl -w
#FORMAT:
#dd/mm/yyyy;transaction_type (3-cash);info;recipient;description;price;cathegory
use strict;
do {print "Usage: check.pl <input_file> <shopping_date (dd/mm/yyyy)>\n"; exit} if !$ARGV[0] or !$ARGV[1];
open (INPUT_FILE, "< ./$ARGV[0]");
open (OUTPUT_FILE, "> ./check_output.csv");
my $float = qr/\d+\.\d+/;
my $amount;
my $line;
while ($_ = <INPUT_FILE>){
chomp;
if ($_ =~ /(.+);(${float});.+(${float}).+;(${float})/){
### $1 - info, $2 - descr (cena za ed.)., $3 - massa, $4 - price
print OUTPUT_FILE "$ARGV[1];3;$1 $3 кг;Окей;$2;", "-$4" ,";\n";
}
elsif ($_ =~ /(.+);(${float});.+(\d+).+;(${float})/){
### $1 - info, $2 - descr (cena za ed.))., $3 - kol-vo, $4 - price
$amount = $3;
for (1..$amount){
print OUTPUT_FILE "$ARGV[1];3;$1;Окей;;", "-$2" ,";\n";
}
}
else {warn "\tString $. in $ARGV[0] not parse!\n"}
}
close (INPUT_FILE);
close (OUTPUT_FILE);
exit;
0 коммент.:
Отправить комментарий
Спасибо за комментарий!