Литературное программирование и русифицированные программы для WEB

Файлы средств литературного («грамотного») программирования для скачивания

О системе литературного программирования WEB

Собственно, о проделанной русификации tangle и weave

Коды завершения работы tangle и weave

Отличия данной версии rutangle.exe от разработанного Д. Е. Кнутом tangle

Таблица. Транслитерация имён в rutangle

Литературное программирование и ассемблер

Установка пакета CyrTeX

Настройка оболочки для работы с web-файлами

Некоторые заметки об использовании инструментальных средств литературного программирования

Известные ошибки

Как писать программы на паскале по-русски

Что нужно сделать


Дополнение. Программа Tie (объединение нескольких файлов изменений)

Ссылки на видеолекции других авторов


Файлы средств литературного («грамотного») программирования для скачивания

Плоды моих трудов. Программы для работы в командной строке среды Windows. Все текстовые документы (web, pas, tex) в кодировке ДОС.


rutangle.exe программа для получения файлов для freepascal
ruweave.exe программа для получения файлов для TeX
rwebmac.tex    файл макросов для TeX
rwebmacpdf.tex    файл макросов для TeX для создания файлов с закладками и гиперссылками в формате pdf. (Используются команды \special программы dvipdfm)
web_exam.web    —   учебный пример web-файла. Эта программа ни чего не делает, просто показывает основные средства литературного программирования, и как их использовать
web_exam.pdf    —   это итог перевода учебного файла в читаемый документ. Его целесообразно читать совместно с web_exam.web
web_exam.pas    это итог преобразования .web → .pas. Этот файл вообще для чтения не приспособлен и приложен здесь только для того, чтобы показать, во что превращается web-файл после обработки tangle
webdescr.pdf    краткое руководство по командам языка WEB на русском языке. Со временем предполагается сделать более подробное описание.

Программы rutangle и ruweave работают под Windows и обрабатывают тексты в кодировке CP866 (ДОС-кодировка). Если вам требуется что-то иное, можете написать в гостевой.

Работы Д. Е. Кнута на английском языке можно найти в любом архиве CTAN. Исходные тексты программ weave.web, tangle.web, а также руководство webman.tex по использованию средств грамотного программирования лежат в каталоге systems/knuth/dist/web или здесь. Файл с набором макросов для обработки TeX-файлов, полученных weave, называется webmac.tex его можно скачать из каталога systems/knuth/dist/lib.

В печатном виде можно найти всё это на сайте стенфордского университета (отчёт № STAN-CS-83-980).


Исполняемые файлы dostp. Вообще говоря, в MikTeX 2.9 входят программы tangle и weave. Входят, но почему-то не работают: выдают ошибку «Read operation failed» (может, автор сборки в более поздних версиях это исправит). Так что, если вам хочется поупражняться с первозданной системой, то стоит обратиться к её воплощению в DOS, кое находится в каталоге CTAN systems/msdos/dostp22/exe, а именно в файле exeweb.zip. Как раз этими программами я и пользовался для сборки русифицированных tangle и weave (исполняемыми файлами, но не исходниками, исходными для меня были только tangle.web и weave.web Д. Кнута). К слову сказать, в dostp сделан перенос под DOS многих программ, связанных с TeX и METAFONT.



О системе литературного программирования WEB

Название «литературное программирование» является калькой с английского «literate programming» и иногда переводится как «грамотное программирование». Оно позволяет при разработке программного кода использовать как подход «снизу вверх», так и подход «сверху вниз», а также сочетать их.

Суть литературного программирования состоит в том, что программа описывается отдельными кусочками, следующими в произвольном порядке. Все кусочки программы должны размещаться в одном файле с расширением WEB, из которого при помощи программ TANGLE и WEAVE можно получить программу на языке ПАСКАЛЬ и описание самой программы на языке TeX. Web-файл состоит из разделов, каждый из которых делится на три части: словесное описание на языке TeX, определения макросов, и, собственно, кусочек программы. Любая из этих частей в разделе может отсутствовать.

Кусочки программы могут быть именованными и безымянными. Безымянные кусочки (начинаются с @p) вставляются в паскалевский файл последовательно, в том порядке, в котором они идут в web-файле. А именованные кусочки вставляются только там, где на них есть ссылки. (Имена кусочков указываются между знаками @<…@>.)

Каждый именованный кусочек может вставляться в нескольких местах программы в том числе и в других именованных кусочках. Именованный кусочек может описываться в нескольких разделах, тогда все эти описания последовательно соединяются.

Каждый раздел начинается с символа @ за которым следует пробел или звёздочка. В последнем случае название раздела (предложение до первой точки) программа WEAVE помещает в оглавление. WEAVE также создаёт перечни идентификаторов (имён переменных и функций) с указанием разделов, где они используются, и именованных кусочков с указанием разделов, куда они включаются, и разделов, где они определяются. Кроме того, в конце каждого именованного кусочка помещаются номера разделов, где он определён, и разделов, где он используется.

Для того, чтобы можно было легко вносить изменения в программу, не перерабатывая исходный web-файл, программы TANGLE и WEAVE используют файл изменений (с расширением chg). В этом файле между командами @x и @y указываются искомые строки, а между @y и @z строки, на которые нужно их заменить. WEAVE, собирая документ, помечает номера изменённых разделов звёздочкой.

Сами программы TANGLE и WEAVE описаны на языке WEB, их можно найти там же, где и исходники TeX и METAFONT.

Версии программ TANGLE и WEAVE под ДОС на turbo pascal находятся по адресу ftp://ftp.dante.de/pub/tex/systems/msdos/dostp22/. Недостатком turbo pascal являлось ограничение на размер исходного текста программы 65 кб, что не позволяло компилировать TeX, поэтому данная версия TANGLE разбивает программу на модули (unit).

Разработанные Д. Кнутом методика и средства литературного программирования позволяют очень быстро как писать собственные программы, так и разбираться в чужих и изменять их. Последнее обусловлено тем, что можно сосредоточиться на поиске и исправлении только нужных частей кода. Механизм файлов изменений позволяет не портить исходный текст чужой программы, благодаря чему, легко отменить ошибочные изменения.

Для русскоязычных пользователей эти средства литературного программирования имеют очень существенный недостаток: они не поддерживают русский алфавит, как и вообще символы с кодами 127 и больше. Более того, эти коды интенсивно используются во внутренних структурах данных tangle и weave. Т. е. нельзя ни сделать описание на русском языке, ни именованный кусочек назвать по-русски, ни задать русское сообщение.

Любопытство толкнуло меня сделать русификацию этих программ (пока ещё довольно сырую). Данные воплощения программ разрабатывались исходно под freepascal, у которого нет таких жёстких ограничений на длину программы, и потому на unit-ы программы не разбивают. Для трансляции TeX-документа выполнен перевод стилевого файла, автоматически вставляемого первой строчкой TeX-файла. Сразу заметим, что с LaTeX weave не дружит и для трансляции надо использовать plainTeX. Для русскоязычных файлов нужно использовать cyrtex.

Предполагается расширить возможности программ, в частности, обеспечить возможность транслировать ассемблерный код. (Это уже осуществлено в rutangle, но для реализации в ruweave требуется доработка кода, осуществляющего лексический разбор программы.)

Уже сейчас можно использовать русские имена переменных и функций. Когда rutangle обрабатывает текст, он заменяет русские буквы в именах переменных латиницей. Строки и комментарии (правда, C-подобные только в rutangle), также корректно обрабатываются этими программами. Так что теперь, вполне возможно литературное программирование по-русски. В целом, русификация рассчитана на работу с freepascal.


Следует отметить, что программы для грамотного программирования существуют не только для ПАСКАЛя, но и для многих других языков (ftp://ftp.dante.de/pub/tex/web/). Например, для языка Си есть система cweb с программами ctangle и cweave, скачать которые можно из архивов ctan. В сети можно найти руководство по cweb на русском языке. (Дональд Э. Кнут и Сильвио Леви. Система структурного документирования).

Собственно, о проделанной русификации tangle и weave

Исходные программы называются tangle (для получения pas-файла из web) и weave (для получения tex-файла из web). Для обработки tex-файла требуется файл макросов webmac.tex.

Русифицированные версии имеют имена, соответственно, rutangle, ruweave и rwebmac.tex. (Хотелось использовать rtangle и rweave, но эти имена оказались уже заняты.) Данные версии программ предназначены для работы в консольном режиме Windows. Входные (WEB) и выходные (PAS и TeX) файлы должны иметь кодировку DOS. В обоих этих программах:

  1. Переведены все сообщения на русский язык
  2. Имена входных и выходных файлов могут быть русскими. Неожиданностью стало то, что русские имена файлов, вводимые с клавиатуры, становились абракадаброй. При вводе русских имён в командной строке они обрабатывались правильно. Для того, чтобы это обойти, сделана процедура перекодировки символов из ДОС в WIN-кодировку.
  3. Введена новая команда @s. Если первые символы строки @s или @S, то данная строка отбрасывается как ruweave, так rutangle. Эту команду можно использовать, для комментариев или для исключения части кода из обработки. Перед @s и @S пробелов быть не должно.
  4. Добавлены коды завершения программы, возвращаемые операционной системе.
  5. Обеспечена возможность прохода знаков через rutangle и ruweave с почти любыми кодами. (Сложность состояла в том, что коды выше 126 и меньше 32 активно используются этими программами для представления и сжатия данных, а также для передачи управляющих кодов.)

Стилевой файл rwebmac.tex адаптирован для работы с русскими шрифтами, и в нём переведены названия элементов указателей. Знаки ≤ ≥ заменены на принятые в России.

Если Вы хотите делать pdf-файлы, то вместо файла rwebmac.tex можно использовать rwebmacpdf.tex, в котором добавлена поддержка гиперссылок для всех номеров разделов, а также сделаны закладки (bookmarks) для разделов со звёздочкой (начинающихся командой @*), содержания и указателя имён модулей.


Коды завершения. После завершения работы программы возвращают операционной системе значение errorlevel, которое можно использовать для пакетной обработки в командных файлах. (Эти значения возвращают русифицированные версии программ tangle и weave)

errorlevel = 0 — программа отработала успешно;

errorlevel = 1 — найдены мелкие синтаксические неточности;

errorlevel = 2 — обнаружены серьёзные ошибки, или задан несуществующий chg-файл;

errorlevel = 3 — произошла фатальная ошибка;

errorlevel = 10 — web-файл не был задан;

errorlevel = 11 — задан не существующий web-файл.


Символы передаются с почти любыми кодами, кроме служебных (перехода на следующую строку, перехода к началу строки, табуляции), которые обрабатываются обычным образом, и знака с десятичным кодом 26, который воспринимается, как конец файла (даже если он встречается в строке с командой @s). (Причина такой трактовки знака с кодом 26 лежит, видимо, в особенностях реализации функции read(f,…) в freepascal. Потом исправлю, хотя это и не мешает.)

При работе rutangle в отличие от ruweave передача русских букв зависит от контекста. В строках (заключённых в "…" и '…'), при дословной передаче части текста программы (текст между символами @=…@>), знаки с кодами выше 128 передаются как есть. В ДОС-кодировке непосредственно в тексте программы они транслитерируются. Транслитерации сравниваются с латинскими именами, и если совпадают, то выдаётся предупреждение.

В rutangle введена поддержка программ на ассемблере. В ruweave её пока нет (а может, и не будет).

Отличия данной версии rutangle.exe от разработанного Д. Е. Кнутом tangle

  1. В tangle введена транслитерация имён команд, заданных русскими буквами в кодировке DOS, чтобы можно было писать программы по-русски.
  2. Предельная длина строки увеличена со 100 символов до 150.
  3. Максимальная длина идентификатора увеличена с 12 до 24 символов, проверяется уникальность имён до 15 первых символов против исходных семи.
  4. Символ "_" в именах не отбрасывается. (Иначе невозможно будет использовать некоторые библиотеки FreePascal).
  5. Введена поддержка ассемблера (командные скобки «asm…end»), состоящая в том, что внутри «asm…end» разрывы строк переносятся из web-файла в pas-файл.
  6. Строчные буквы не преобразуются в прописные в именах идентификаторов. (В отличие от исходной версии tangle из DOSTP тоже строчные в прописные не преобразует.)
  7. Распознаются и отбрасываются однострочные C-подобные комментарии, которые начинаются с пары символов // (двух косых черт) и заканчиваются концом строки.
  8. Строки не разрываются на знаке #. (В исходной версии этот знак считался удобным местом для разрыва строки в программе, что затрудняло запись строк кодами их символов.)
  9. Добавлена возможность записывать числа на манер ассемблера (в виде 200h). Freepascal в отличие от чистого ПАСКАЛЯ допускает запись чисел в таком виде. Исходный tangle, встречая знаки 200h, обязательно вставлял пробел между 200 и h, из-за чего Freepascal не мог верно обрабатывать эти числа. Программа rutangle вставляет пробел между десятичным числом и буквой, только если он стоит и в исходном web-файле.

Транслитерация имён производится в соответствии с таблицей


Таблица. Транслитерация имён в rutangle

БукваТранслитерацияКоды верхнего и
нижнего регистров
БукваТранслитерацияКоды верхнего и
нижнего регистров
БукваТранслитерацияКоды верхнего и
нижнего регистров
А A 128 160 Б B 129 161 В V 130 162
Г G 131 163 Д D 132 164 Е JE 133 165
Ё JO 240 241 Ж Q* 134 166 З Z 135 167
И I 136 168 Й J 137 169 К K 138 170
Л L 139 171 М M 140 172 Н N 141 173
О O 142 174 П P 143 175 Р R 144 224
С S 145 225 Т T 146 226 У U 147 227
Ф F 148 228 Х H 149 229 Ц C 150 230
Ч CH*** 151 231 Ш W* 152 232 Щ X* 153 233
Ъ _** 154 234 Ы Y 155 235 Ь _** 156 236
Э E 157 237 Ю JU 158 238 Я JA 159 239

* для уплотнения букв.

** знаки Ь и Ъ не различаются в переменных.

*** буквосочетание «ЦХ» вряд ли часто встречается в русских текстах (в Большой Советской Энциклопедии всего пять слов, и те грузинского происхождения).


Литературное программирование и ассемблер. Поскольку автор этих строк неровно дышит к ассемблеру, то в русификации он позаботился о некоей его поддержке, в состав которой входят:

  1. Распознание командных скобок asm…end и особая обработка заключённых в них строк.
  2. Особый вид модуля, имя которого пишется в скобках @(…@>, (аналог @<…@>).
  3. Особый вид безымянного модуля, который начинается с @a, (аналог @p).
  4. Новый вид макроопределений, объявляемый командой @e, (аналог @d).

В строках между asm…end, подавляются неявные переносы строк, например, после точки с запятой. В конце каждой строки автоматически вставляется команда разрыва @\. Между числом и Может, не в FreePascal, но в TASM, MASM и т. п. уж точно допустимо использовать идентификаторы, начинающиеся с точки. Поэтому введена возможность

Когда tangle встречает команду @p, он знает, что нужно добавить новый кусочек в конец собираемой программы. При этом он записывает комментарии вида {1:} {:1}, чтобы обозначить Для сборки программ на языке ассемблера в rutangle введена команда @a. Когда ruweave её встречает, он вставляет в и @(…@>. Определения макросов для ассемблера можно давать командой @e. Она аналогична @d за тем исключением, что в конце строки файла вставляется знак конца строки.

Внутри командных скобок asm…end следует использовать ссылки @(…@>, а не @<…@>. Сами командные скобки должны целиком размещаться внутри кусочка @<…@>=.

Учтите, что на данный момент поддержка ассемблера осуществляется только rutangle. Программа ruweave эти ассемблерные вставки сейчас не поддерживает.

Не следует в определении макроса (команда @d) оставлять начало ассемблерного блока без парного ему end;

В режиме ассемблера перенос строк происходит по обычным правилам tangle. Не используйте слишком длинные строки в этом режиме.

Установка и настройка пакета CyrTeX

Для того, чтобы получить dvi-файл, следует воспользоваться пакетом CyrTeX.

Пакет находится в каталоге %texmf%\tex\plain\cyrplain. Первое, что нужно сделать — войти в этот каталог, открыть файл cyrtex.cfg и установить в нём желаемую кодировку. Данная версия русификации web предполагает кодировку ДОС (cp866). Поэтому ищем в конце файла cyrtex.cfg строку \def\definpenc{…} и ставим в фигурных скобках соответствующую кодировку \def\definpenc{cp866}.

Мне нравится использовать русские буквы в командах TeX. Если Вы тоже хотите их использовать, нужно поставить знак % перед строкой \let\ifinpenc\iftrue (закомментировать её) и убрать его (если есть) перед строкой \let\ifinpenc\iffalse. (Если любите пользоваться несколькими кодировками сразу, то можете этого и не делать, на работе стилевого файла это ни как не отразится, но трансляция TeX будет идти немного медленнее.)

В MikTeX по умолчанию CyrTeX не входит в число генерируемых пакетов. Поэтому нужно зайти в меню "Пуск/программы/MikTeX" (или куда вы его поместили), выбрать подпункт "Maintenance (Admin)/Settings (Admin)". И выполнить следующие действия.

В каталоге "%texmf%\miktex\bin" будет создан файл cyrtex.exe, который далее можно будет использовать для трансляции всех русскоязычных файлов на основе plain.tex (в том числе, и создаваемых программой ruweave.exe).

По умолчанию TeX в сообщениях выводит символы из второй половины таблицы ASCII последовательностями вида ^^a0, ^^c4 и т. п., читать которые даже посвящённым непросто. Чтобы текст был читаем, в MikTeX следует использовать опцию «-enable-8bit-chars», т. е.

cyrtex -enable-8bit-chars имя_TeX_файла

Примечание. Опция «-enable-8bit-chars» не принадлежит чистому TeX, разработанному Д. Е. Кнутом. Она будет работать на тех версиях TeX, в которых реализовано расширение encTeX.


Как-то у меня была такая проблема: выдавалось сообщение, что не может быть найден компилятор miktex/bin/tex.EXE. Решил я её просто: переименовал файл miktex/bin/tex.exe в miktex/bin/tex.EXE.


Настройка оболочки для работы с web-файлами

В оболочке DN/2 в файле запуска по расширению можно использовать фрагмент

web,chg[
   >1 ~r~tangle
       if exist !.chg С:\tool\rutangle.exe #.web  #.chg
       if not exist !.chg С:\tool\rutangle.exe #.web
   >1 rt~a~ngle + freePascal
       if exist !.chg С:\tool\rutangle.exe #.web  #.chg
       if not exist !.chg С:\tool\rutangle.exe #.web
       if errorlevel 1 goto ex
         С:\tool\FPC\bin\i386-win32\fp.exe
       :ex
   >1 rwea~v~e
       if exist !.chg С:\tool\ruweave.exe #.web  #.chg
       if not exist !.chg С:\tool\ruweave.exe #.web nul
       if errorlevel 3 goto :ex
       if errorlevel 1 pause
       echo ___________________________________________________
       cyrtex -enable-8bit-chars  #.tex
       pause
       #.dvi
      :ex
   >1 r~w~eave + pdf
       if exist !.chg С:\tool\ruweave.exe #.web  #.chg
       if not exist !.chg С:\tool\ruweave.exe #.web nul
       if errorlevel 3 goto :ex
       if errorlevel 1 pause
       echo ___________________________________________________
       cyrtex -enable-8bit-chars  #.tex
       pause
       dvipdfm #.dvi
       #.pdf
      :ex

Здесь предполагается, что rutangle и ruweave находятся в каталоге С:\tool, а freepascal установлен в каталог С:\tool\FPC.

Чтобы сделать работу с tangle и weave приятнее в DN или NDN, можете включить кусочек в файл раскраски редактора (Найти его можно в меню: настройки/файл раскраски редактора, В NDN это будет настройки/Configuration files…/файл раскраски редактора).

FILES  *.chg;*.web;
  CommentString //
  CommentString @s
  Comment       (* *),{ }
  GeneralFLAGS   32
  StringFLAGS    76
  Keywords1     and,asm,array,begin,case,const,constructor
  Keywords1     destructor,div,do,downto,else,end,file,for
  Keywords1     function,if,implementation,in,interface,mod,nil
  Keywords1     not,object,of,or,procedure,program,record,repeat
  Keywords1     set,shl,shr,string,then,to,type,unit,until,uses
  Keywords1     var,while,with,xor,inherited,goto,label,inline
  Keywords1     packed,exports,library
  Keywords1     @@,@d,@f,@=,@!,@<,@>,@>=,@ ,@*,@;,@p,@^,@t,@#
END

Некоторые заметки об использовании инструментальных средств литературного программирования

Ниже описаны некоторые «подводные камни», часть из которых заставила меня в своё время поломать голову.

Программы tangle и weave работают в два прохода: на первом производится чтение web-файла и упаковка его во внутренних структурах, а на втором — запись итогового pas- или tex-файла. (Вернее, weave делает три прохода, во время первого он читает файл и сохраняет статистику, об используемых идентификаторах, а на последнем записывает указатели, но здесь это не существенно.) При этом, если возникает ошибка во время первого прохода, то в сообщениях об ошибках указывается номер строки входного файла. Если возникают ошибки во время второго прохода после сообщения о начале записи файла, в строке указывается ошибка в выходном файле.

В исходной версии weave, если weave встречает два упоминания одного и того же раздела в другом разделе, то в tex-файле появится два упоминания одного и того же раздела. В ruweave это пока не исправлено.

Обычно, weave при составлении указателя не учитывает однобуквенные идентификаторы, но если они оказываются после ключевых слов function, var и др., то TeX их в указатель вставляет, что при использовании var может быть неуместно.

Если идентификатор начинается со знака подчёркивания (одного или нескольких знаков), то weave, помещая его в указатель, эти знаки удалит. Связано это с тем, что исходная версия tangle вообще удаляла знаки подчёркивания из своего вывода. К сожалению, не все современные библиотеки можно использовать без знаков подчёркивания. В ruweave это пока не исправлено (rutangle все знаки подчёркивания сохраняет).

Пробелы между числами в pas-файл не выводятся ни в режиме паскаля (так устроен tangle), ни в режиме ассемблера. Для программ на чистом Паскале это несущественно, на ассемблере при использовании макросов может иметь значение.

Если будет задано пустое имя модуля (@<@>), то tangle это как ошибку не воспримет. Зато выдаст массу сообщений о несовместимости имён модулей. Ошибка о несовместимости модулей выводится, когда имя одного модуля полностью совпадает с начальной частью имени другого. Например @<xx@> является префиксом для @<xxy@>, что в tangle не допустимо. Соответственно, @<@> будет префиксом для любого другого названия раздела.

Программы системы WEB позволяют обрабатывать некоторые константные выражения, в том числе с восьмеричными и шестнадцатеричными числами. Однако, поддерживаемые TurboPascal и FreePascal способы записи чисел WEB не воспринимает, например, упрощать записи вида $200+1 или 200h+1 rutangle (а тем более tangle) не будет.

Когда в web-файле используется команда @*, начинающая новый раздел, она воспринимает следующее за ней предложение как название раздела, которое идёт в оглавление. Это предложение обязательно должно заканчиваться точкой, иначе будут выдаваться сообщения об ошибках.

Имена макросов web, объявляемые командой @d, должны состоять из двух и более букв. Однобуквенные имена недопустимы. (К сожалению, определение «@d И==and» rutangle не примет.)

В файле изменений (CHG-файле) команды @x, @y и @z должны быть именно первыми знаками в строке. Если перед ними стоит хотя бы один пробел, tangle и weave их воспринимать не будут. Это можно использовать для временного исключения каких-то изменений.

Ещё один подводный камень, который относится к вёрстке, — это знак &. Он используется в командах TeX \halign и \valign для вёрстки таблиц. Когда требуется знак амперсенда сам по себе, в Plain-TeX его можно набрать так \&. (Также он набирается и в LaTeX). Однако, в стилевом файле webmac.tex эта последовательность переопределена для отображения ключевых слов жирным шрифтом, и для ввода знака & вместо последовательности \& нужно использовать команду \AM.

Известные ошибки и недоработки

Все недоработки относятся только к попыткам расширить функциональные возможности средств литературного программирования. Сами программы ruweave.exe и rutangle.exe, а также файл макросов rwebmac.tex правильно обрабатывают web-файлы Д. Е. Кнута, и выдают верный итог.

  1. Если определение @e первое, то rutangle выдаёт ошибку об определении, начинающемся с asm, но без end. Если пользуетесь определениями ассемблерных кодов, пока вставляйте перед ними команду @d. Со временем, я это исправлю.
  2. Если входной файл открыт, (например, в текстовом редакторе), то при запуске rutangle и ruweave будут завершаться с ошибкой. Когда-нибудь я это исправлю, а пока перед началом обработки закрывайте редактор с текстовым файлом.
  3. Правильность использования @(…@> и @<…@> не проверяется, т. е. rutangle без разницы, определялось имя модуля в круглой или в угловой скобке.
  4. Пробелы между числами, разделёнными в web-файле пробелами, в выходных файлах не вставляются;
  5. При создании pdf-файла с закладками (bookmarks) заглавные буквы Ш и Щ в закладках идут в сочитании с символом, изображаемым как квадрат. Дело в том, что программа dvipdfm, преобразующая dvi-файл в pdf, бдительно следит за равновесием открывающих и закрывающих скобок. Буквы Ш и Щ в unicode представляются двухбайтовыми последовательностями, второй байт которых содержит открывающую и закрывающую круглые скобки. Чтобы dvipdfm не вылетал с ошибкой, приходится после буквы Ш вставлять закрывающую, а перед буквой Щ – открывающую круглые скобки. Чтобы они не отображались скобками в закладках, приняты не определённые в unicode символы с кодами 0ff28h и 0ff29h, которые и отображаются квадратами. На вид печатного документа закладки ни как не влияют, а читаемость закладок сильно не ухудшается. Вероятно, если непосредственно производить pdf-файл с помощью pdftex, то можно обойтись и без этих дополнительных вставок, однако причин, побуждающих написать макросы ещё и для pdftex, у меня нет.
  6. Если Вы любите пакеты вроде inputenc, делающие русские буквы активными, то rwebmacpdf.tex Вам придётся отказаться, т. к. на время создания закладок он тоже делает русские буквы активными, чтобы заменять их соответствующим представлением в unicode.
  7. Добавить преобразование знака & в \AM в текстах программ. (Этот символ нужен при работе с переменными типа VARIANT. В программах, обращающихся к серверам автоматизации, например, MSWord, требуется иметь доступ к полям, имена которых совпадают с зарезервированными словами, такими как end.)

Как писать программы на паскале по-русски

Лично мне всегда казалось, что писать программы на русском языке было бы гораздо приятнее, а главное — понятнее, чем на английском. Ведь, ключевые слова почти любого языка программирования взяты из английского, и для нас они чужие, мысль всегда о них спотыкается. И лучше заменить их на родную речь, привычную нам с детства. Если Вы разделяете мои взгляды, то этот раздел может показаться Вам любопытным.

Чтобы писать программы по-русски, можно переопределить стандартные ключевые слова, вставив в один из первых разделов программы на WEB следующие строки (здесь они набраны в две колонки).


    @d программа==@+program
    @d использует==@+uses
    @d функция==@+function
    @d процедура==@+procedure
    @d переменные==@+var
    @d переменная==@+var
    @d константа==@+const
    @d константы==@+const
    @d начало==@+begin
    @d конец==@+end
    @d если==@+if
    @d то==@+then
    @d иначе==@+else
    @d массив==@+array
    @d из==@+of
    @d при==@+case
    @d равном==@+of
    @d равной==@+of
    @d пока==@+while
    @d повторяй==@+repeat
    @d пока_не==@+until
    @d для==@+for
    @d от==@+for
    @d до==@+to
    @d уменьшать_до==@+downto
    @d вниз_до==downto
    @d делай==@+do
    @d метка==@+label
    @d метки==@+label
    @d ув==inc
    @d ум==dec
    @d иди==goto
    @d для_записи==@+with
    @d нет==@+false
    @d да==@+true
    @d строка==string
    @d строки==string
    @d байт==byte
    @d слово==word

                @f программа==program
                @f использует==uses
                @f переменные==var
                @f переменная==var
                @f константа==const
                @f константы==const
                @f начало==begin
                @f конец==end
                @f если==if
                @f то==then
                @f иначе==else
                @f массив==array
                @f из==of
                @f при==case
                @f равном==of
                @f равной==of
                @f пока==while
                @f повторяй==repeat
                @f пока_не==until
                @f для==for
                @f функция==function
                @f процедура==procedure
                @f до==to
                @f уменьшать_до==downto
                @f делай==do
                @f нет==false
                @f да==true
                @f строка==string
                @f строки==string
                @f слово==word
                @f вниз_до==downto
                @f от==for
                @f байт==byte
                @f ув==inc
                @f ум==dec
                @f метка==label
                @f метки==label
                @f иди==goto
                @f для_записи==with

Для подсветки синтаксиса в редакторе в DOS Navigator'е можно вставить в файл раскраски следующие строки

                Keywords2     программа,использует,переменные,переменная
                Keywords2     начало,конец,функция,процедура
                Keywords2     если,то,иначе,пока,делай,повторяй,пока_не,для,от,до
                Keywords2     вниз_до,уменьшать_до
                Keywords2     массив,из,запись,при,равном,константа,константы,равной
                Keywords2     метка,метки,да,нет,иди,для_записи
                Keywords2     строка,строки,слово,байт

Что нужно сделать

  1. Добавить поддержку конструкций +=, −= и т. п. в ruweave.
  2. Добавить поддержку однострочных комментариев // в ruweave.
  3. Добавить поддержку ассемблера в ruweave.
  4. Обеспечить правильное форматирование команд unit…interface…implementation и аналогичных.
  5. Написать нормальное руководство по средствам литературного программирования на русском языке, с учётом особенностей данных программ.

Дополнение. Программа Tie (объединение нескольких файлов изменений)

Бывают случаи, когда нужно применить несколько файлов изменений к одному web-файлу. Например, вы делаете файлы изменений для нескольких языков, и файлы изменений для воплощения вашей программы на различных операционных системах. Тогда понадобится применять сразу два файла изменений к одной программе (один для данного языка и один для данной операционной системы). Другой пример – применять файлы изменений, сделанные разными программистами к разным частям программы. Для этого используется программа tie, которую разработал Klaus Guntermann. Исходники tie можно взять в CTAN архиве.

Исполняемый файл программы входит в состав MikTeX. Она используется так

tie -m вывод основной_файл файл_изм_1 файл_изм_2 файл_изм_3

где -m – указывает, что нужен изменённый файл;

вывод – файл, в который будет записан вывод программы;

основной_файл – файл, к которому надо применить изменения;

файл_изм_1, файл_изм_2, … – файлы изменений.


Синтаксис файлов изменений тот же, что и программ tangle и weave. Они применяются последовательно к основному_файлу. Сначала первый, затем второй, и т. д. Области между командами @x и @y могут в разных файлах изменений перекрываться, как в приведённом ниже примере.


Исходный файл       Файл изменений 1       Файл изменений 2        Итоговый файл
Строка 1
Строка 2
Строка 3
Строка 4
Строка 5
@x
Строка 2
Строка 3
@y
Строка 2А
Строка 3А
@z
@x
Строка 3А
Строка 4
@y
Строка 3Б
Строка 4Б
@z
Строка 1
Строка 2А
Строка 3Б
Строка 4Б
Строка 5

Второй вариант использования программы объединяет несколько файлов изменений в один

tie -c вывод основной_файл файл_изм_1 файл_изм_2 файл_изм_3

где – указывает, что нужно объединить файлы изменений;

вывод – итоговый файл изменений.


К счастью, tie не занимается перекодировкой и не нуждается в изменениях для работы с русскими файлами.


Статьи

Методология литературного программирования. Опыт русификации инструментальных средств

Исходно данная статья готовилась к Завалишенским чтениям 2015 года, которые проводятся ежегодно в ГУАП (Государственном университете авиаприборостроения), но по каким-то причинам она там так и не вышла, несмотря на то, что доклад на Завалишинских чтениях зачитывался. Здесь слайды презентации к докладу.




Ссылки на видеолекции других авторов

Видео по литературному программированию Михаила Глухова.

Видео по грамотному программированию Алексея Пирогова.




©   Жуков И. Б.

e-mail:

При использовании материалов, пожалуйста,

ставьте индексируемую ссылку на сайт https://ibzh.eko3.ru/





Число посетителей


Яндекс.Метрика

Число посетителей