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

А если придумать свод правил для этих обозначений, то получается язык лёгкой разметки (по-английски — lightweight markup). Лёгкой в том смысле, что в ней легче набирать и читать исходный текст, чем в более развесистых языках вроде HTML. Следуя нехитрым правилам лёгкой разметки, мы можем преобразовывать наши документы во всевозможные форматы, не теряя достоинств простого текста: возможности написать и прочитать его где угодно.

Так как идея проста и красива, языков лёгкой разметки наплодилось довольно много. Один из самых известных и мощных — reStructuredText (сокращённо RST). Изначально он создавался для того, чтобы документировать код на языке Python, но вполне может применяться для любых других текстов. О том, как это сделать, я и расскажу в этом топике.



Языковой минимум


Маленький пример reStructuredText
=================================

Введение
--------
Списки делаются так:

- логическое выделение: *обычное* и **пожёстче**;
- ``литералы`` (для кода всякого);
- гиперссылки: `Quick reStructuredText
  <http://docutils.sourceforge.net/docs/user/rst/quickref.html>`_ (там можно
  увидеть все элементы языка с примерами).

Простой формат таблиц
---------------------
============  ============
Наименование  Цена за 1 кг
============  ============
Яблоки        20 рупий
Груши         14 рупий
Апельсины     22 рупии
============  ============

Заключение
----------
Язык reStructuredText:

1. удобен;
2. понятен;
3. велик и могуч.

Как видно, синтаксис языка достаточно очевиден, чтобы написанный на RST документ можно было употреблять в «сыром» виде — в той же электропочте, например, или где там ещё бывает предпочтителен простой текст. Но чтобы документ радовал глаза читателей, нужно преобразовать его в другой вид, для чего есть разные инструменты.

RST to Anything


Добрые люди, понимающие прелесть RST, создали веб-сайт rst2a.com, который позволяет быстро превращать RST-документы во «что угодно». Под «чем угодно» понимаются форматы HTML и PDF, которые вам, наверное, знакомы. Ещё на сайте есть небольшая коллекция стилей, которые можно применять к получаемым документам. RST определяет смысл документа, а не его внешний вид — а значит, этот самый вид можно легко менять, просто подставляя другие стили (CSS-таблицы в случае HTML). Вот, можете попробовать: вставляете туда вышеприведённый документ, нажимаете «HTML», выбираете стиль по вкусу и жмёте «Download».

К сожалению, rst2a валится при попытке вывести в PDF документы, содержащие кириллицу. У меня, по крайней мере. Кроме того, в нашем жестоком мире соединение с Интернетом есть не всегда, да и не каждый документ доверишь обрабатывать какому-то постороннему сайту. Поэтому встаёт закономерный вопрос об автономных инструментах для работы с RST.

Автономные инструменты


Их есть у нас! Но их надо устанавливать. Вам наверняка удастся это сделать, в какой бы системе вы не работали, потому что инструменты в основном написаны на языке Python, который весьма толерантен к разным средам. Не знаю, насколько легко поставить интерпретатор Python и необходимые библиотеки в Windows и Mac OS, но если вы пользуетесь системой класса GNU/Linux, то вам, скорее всего, делать почти ничего не надо: всё есть в дистрибутивах. Все инструменты распространяются свободно.

Docutils


Большинство инструментов поставляется с Python-библиотекой Docutils, от которой, собственно, и пошёл RST. (Кстати, её можно использовать в своих программах, например, для форматирования каких-нибудь материалов, выкладываемых на веб-сайт.) Это командные преобразователи, в частности rst2html, rst2odt и rst2latex.

С HTML всё просто:

rst2html ОТКУДА.txt КУДА.html

Для настройки внешнего вида получаемых HTML-страниц используется особая таблица стилей, которую можно указать через параметр командной строки --stylesheet=ФАЙЛ.css (она будет встроена в код страницы). Вполне подойдут те таблицы, что выложены на сайте rst2a. Если вас это волнует, rst2html производит валидный XHTML-код.

С ODT (OpenDocument Text) всё ничуть не сложнее:

rst2odt ОТКУДА.txt КУДА.odt

Только стили здесь задаются уже не в виде CSS, а в формате OpenDocument. Самый лёгкий способ их изменить — взять документ styles.odt, поставляемый вместе с rst2odt, внести нужные изменения в его стили с помощью OpenOffice.org Writer, и сохранить куда-нибудь. После этого надо вызывать rst2odt опять же с параметром --stylesheet, указывая путь к документу со стилями. Смысл элементов стилевой таблицы для ODT задокументирован.

Получение PDF


К сожалению, с PDF всё чуть сложнее. Можно преобразовать RST в ODT, а затем ODT в PDF с помощью OpenOffice.org Writer. Или можно преобразовать RST в LaTeX с помощью rst2latex, а затем LaTeX в PDF одним из способов. С другой стороны, можно воспользоваться отдельным инструментом rst2pdf, который переводит RST напрямую в PDF посредством библиотеки ReportLab. В rst2pdf я столкнулся с небольшой проблемой: используемые по умолчанию шрифты не поддерживают кириллицы (возможно, это моя локальная проблема). Указать желаемые шрифты, содержащие нужные символы, можно с помощью (сюрприз!) стилевой таблицы. Чтобы извлечь встроенную стилевую таблицу, надо отдать команду:

rst2pdf --print-stylesheet

В этой таблице нужно исправить в разделе fontsAlias названия шрифтов на желаемые (я пробовал «Liberation Serif» и «Liberation Mono»), сохранить таблицу и подключить её, вот так:

rst2pdf -s СТИЛИ.txt ОТКУДА.txt КУДА.pdf

Другие полезные средства


Инструмент rest2web позволяет создавать целиковые веб-сайты из RST-исходников по заданным шаблонам.

Из поставки Docutils можно отметить ещё две программы. rst2s5 строит презентации в формате S5 — на основе HTML, CSS и JavaScript. Наконец, rst2xml создаёт XML-документы «родного» для Docutils типа. Эти документы можно затем преобразовать во что угодно известными средствами.

Простор для фантазии безграничен!