From: Sergey Matveev Date: Wed, 19 Oct 2016 20:28:50 +0000 (+0300) Subject: Texinfo и правка его HTML-выхлопа для русского языка X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=4e492610fc7d071f7554e37d250495c14d4c4f55;p=stargrave-blog.git Texinfo и правка его HTML-выхлопа для русского языка Texinfo мне ОЧЕНЬ нравится как формат. Я местами "задрот" в плане документации и за годы перепробовал всякое и Texinfo мне пока однозначно больше всего остального нравится. Но кроме его HTML представления. Точнее HTML результата для не-английского языка. Проблема в том что он создаёт навигационные панели на каждой странице, которые содержат названия нод. Эти же названия нод в виде кириллицы преобразуются в названия файлов. И тут вот проблема: либо мы имеем английские названия файлов (contacts, links, overview) и имеем английский язык в меню навигации, либо мы имеем русский язык в меню навигации и транслитерируемые файлы (kontakty, ssylki, obzor). Можно сделать @anchor{}-ы и у нас появятся английские файлы ссылающиеся на русскоязычные ноды. Но штатно "перемещаясь" по сайту нельзя просто так взять текущий URL и иметь в нём Links.html, только если заранее знать что там есть Links файл. Ничего лучше не придумал как просто пост-обработать весь HTML результат. Само преобразование из Texinfo в HTML производится Perl скриптом... на почти 8000 тысяч строк кода. Это перебор и я не смог в нём как-то разобраться чтобы понять что надо подправить чтобы он в навигацию вместо названия нод подставлял названия секций. Сам скрипт получился очень простым и вроде как отлично делающим то что надо. Сайты http://www.cypherpunks.ru и http://cryptoparty.ru уже пост-обрабатываются им. #!/usr/bin/env perl use strict; use warnings; my %rels; my $header = 0; my $printed = 0; while(){ ($rels{$2} = $1) if /^$/){ print "$_

"; if(defined $rels{"prev"}){ print "[<<<]"; }; if(defined $rels{"up"}){ print "[^^^]"; }; if(defined $rels{"next"}){ print "[>>>]"; }; $header++; }; if($header && /^<.div>$/){ print "

$_"; $header--; }; next if $header; print; }; ---