Search
Write a publication
Pull to refresh

reStructuredText для пользователя

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

А если придумать свод правил для этих обозначений, то получается язык лёгкой разметки (по-английски — 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 типа. Эти документы можно затем преобразовать во что угодно известными средствами.

Простор для фантазии безграничен!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.