Версия: 1.6
Платформа QSP позволяет использовать HTML в описании локаций, дополнительном описании и т.п. (USEHTML=1), что добавляет возможностей по части форматирования текста. Это здорово, однако, html-теги изрядно утяжеляют текст, делая его исходник не только сложным для прочтения, но и неудобным для редактирования.
Данный модуль решает некоторые проблемы с помощью сокращённых форм записи тегов. Например, чтобы пометить часть текста как параграф (html-тег параграфа <p>) нужно в начале параграфа поставить "п.", для заголовка — "з1.", чтобы прижать текст к правому краю экрана — ">.". Чтобы сделать текст жирным, нужно в начале и в конце нужного участка текста поставить символы "**", а чтобы сделать наклонным — "//".
Также модуль делает ещё несколько полезных вещей: заменяет знак дефиса в нужных местах на длинное тире (—), несколько точек — на символ многоточия (…), а также расставляет по тексту "правильные" кавычки и заменяет некоторые знаки и дроби.
Функционал данного модуля является по сути компиляцией идей и наработок, почерпнутых из следующих источников:
Начиная с версии 1.5 модуль поставляется только с русскоязычными вариантами команд и тегов.
| otg_lib_typograph.qsp | Сам модуль. |
| example_typograph.qsp | Пример работы с модулем. |
| otg_lib_typograph_help.html | Документация по работе с модулем (вы как раз ее читаете) |
Первым делом необходимо подключить к своему проекту сам модуль. Для этого файл модуля нужно скопировать в тот же каталог, в котором находится основной проект, после чего в начало кода проекта добавить команду "ADDQST" (для QSP версии 5.7.0):
Подключение модуля:
ADDQST 'otg_lib_typograph.qsp' & GS 'Типограф.Инициализация'
Практически все локации модуля начинаются с префикса "Типограф." или "otg_" (см. перечень команд), а переменные — с префикса "otg_", поэтому пересечения с данными основного проекта быть не должно.
Основной функционал модуля заключается в преобразовании кратких тегов разметки текста в стандартные html-теги.
Теги заголовков
| з1. … з6. | Запись "з1. Заголовок" будет заменена на "<h1>Заголовок</h1>". |
В заголовок включается текст от тега "з(1-6)." и до конца строки.
Блочные теги
| п. | Запись "п. Текст" будет заменена на "<p align=justify>Текст</p>". |
| кс. | Запись "кс. Текст" будет заменена на "<p align=justify> Текст</p>". |
| цт. | Запись "цт. Текст цитаты" будет заменена на "<blockquote><p align=justify>Текст цитаты</p></blockquote>". |
| <. | Запись "<. Текст" будет заменена на "<div align=left>Текст</div>". |
| >. | Запись ">. Текст" будет заменена на "<div align=right>Текст</div>". |
| ><. | Запись "><. Текст" будет заменена на "<div align=center>Текст</div>". |
| о:NNN. | Формирует блок текста с заданным (в NNN) отступом. Отступ может задаваться как просто числом (пикселы), так и процентом. Блок преобразуется в таблицу, состоящую из двух колонок - ширина левой колонки соответствует указанному отступу. Таблица обрамляется в "<div>" - иначе html-движок QSP косячит с предыдущим абзацем. Например: "о:25%. Текст с отступом". |
Блочные теги обязательно желательно заканчивать двойным переводом строки, хотя если следующая строка начинается с блочного же тега, модуль будет обрабатывать эти участки отдельно. Одинарные переводы входят в блок.
Например:
п. Первый абзац. Выглядит вроде как вполне компактно. цт. Заумная цитата. >. Автор цитаты п. Второй абзац. о:33%. Текст с отступом в треть экрана.
Так тоже, в принципе, можно:
><. Текст по центру п. Первый абзац. Выглядит вроде как вполне компактно. п. Второй абзац.
ПРИМЕЧАНИЕ: У всех описанных выше тегов после точки должен идти хотя бы один пробел!
Строчные теги
| $$ | Запись "$$FA950E:Текст$$" будет заменена на "<font color=#FA950E>Текст</p>". Можно использовать трёхсимвольное обозначение цвета. |
| ** | Запись "**Текст**" будет заменена на "<b>Текст</b>". |
| // | Запись "//Текст//" будет заменена на "<i>Текст</i>". |
| __ | Запись "__Текст__" будет заменена на "<u>Текст</u>". |
| ^^ | Запись "^^Текст^^" будет заменена на "<sup>Текст</sup>". |
| ~~ | Запись "~~Текст~~" будет заменена на "<sub>Текст</sub>". |
| ++ | Запись "++Текст++" будет заменена на "<font size=+1>Текст</font>". |
| -- | Запись "--Текст--" будет заменена на "<small>Текст</small>". |
| ## | Запись "##Текст##" будет заменена на "<font face=Courier>Текст</font>". |
Прочее
| ==…== | Запись "==Текст==" будет исключена из обработки модулем и войдёт в конечный текст как "Текст". |
| /* … */ | Запись "/*Текст*/" будет просто вырезана из текста, как-будто её там и не было. |
| <html> &hellip </html> | Запись "<html>Текст</html>" будет обрабатываться как обычный html-текст. |
| <pre> &hellip </pre> | Запись "<pre>Текст</pre>" будет исключена из обработки модулем и войдёт в конечный текст как "<pre>Текст</pre>". |
| ~ | Данный символ в конце строки (даже если это единственный символ в строке) будет заменён на "<br/>". |
| ---- | Строка, состоящая из четырёх дефисов, заменяется на "<hr/>". |
Кроме того
Помимо замен символов модуль вносит в текст кое-какие правки:
| Типограф.Инициализация | Инициализирует работу модуля: устанавливает внутренние настройки по умолчанию. |
| Типограф | "Типографит" передаваемый текст. |
| Типограф.Отступ | Устанавливает, как должен выглядеть отступ, использующийся в теге "кс.". |
| ПустаяСтрока | Проверяет, можно ли считать строку пустой (т.е. в ней нет ни одного "значимого" символа). |
| html | Заменяет специальные символы в тексте, на их html-обозначения. |
| m2s | Убирает переводы строк из текста |
| m2ts | Убирает переводы строк из текста, обрезая пробелы и символы табуляции в начале и в конце каждой строки |
Инициализирует работу модуля: устанавливает внутренние настройки по умолчанию. Использовать лучше всего в связке с командой загрузки модуля.
Синтаксис:
GS 'Типограф.Инициализация'
Пример:
ADDQST 'otg_lib_typograph.qsp' & GS 'Типограф.Инициализация'
"Типографит" передаваемый текст.
Синтаксис:
func('Типограф', <Текст>, <html>)
Параметры:
| Текст | Обязательный параметр. "Сырой" текст, в котором используются краткие записи html-тегов. |
| html | Необязательный параметр. Если не указать или указать 0, то текст будет рассматриваться как обычный текст, без html-тегов, т.е. символы "<", ">", "&" будут экранированы. Для вставки в такой текст html-блока, нужно использовать запись <html> … </html>. Однако если передаваемый в функцию текст содержит html-код (без тегов <html>), например, сложное форматирование, таблицы и т.п. — то имеет смысл устанавливать этот параметр, отличным от нуля. |
Пример передачи текста именно как текста:
*NL func('Типограф', '
п. Первый абзац.
Выглядит вроде как вполне компактно.
цт. Заумная цитата о том, что 2 < 5.
<html>
Отобразим какой-нибудь особенный html-тег, например:
<hr with=30%>
</html>
>. Автор цитаты
п. Второй абзац.
')
Пример передачи текста как html-текста:
*NL func('Типограф', '
п. Первый абзац.
Выглядит вроде как вполне компактно.
<table>
<tr>
<td>Фрукт</td>
<td>Цвет</td>
</tr>
<tr>
<td>Апельсин</td>
<td>Оранжевый</td>
</tr>
<tr>
<td>Лимон</td>
<td>Жёлтый</td>
</tr>
</html>
п. Второй абзац.
',1)
Устанавливает, как должен выглядеть отступ, использующийся в теге "кс.". По умолчанию отступ выглядит как пять неразрывных пробелов.
Синтаксис:
GS 'Типограф.Отступ', <Текст>
Параметры:
| Текст | Обязательный параметр. Текст, содержимое которого будет использоваться в качестве отступа. |
Пример:
GS 'Типограф.Отступ', ' '
Проверяет, можно ли считать строку пустой (т.е. в ней нет ни одного "значимого" символа). Символы пробела, табуляции, перевода строки и возврата каретки к "значимым" символам не относятся.
Синтаксис:
func('ПустаяСтрока', <Текст>)
Параметры:
| Текст | Обязательный параметр. Проверяемый текст. |
Пример:
if func('ПустаяСтрока', $text):
*NL 'В тексте что-то есть!'
end
Заменяет специальные символы в тексте, на их html-обозначения:
< заменяется на <
> заменяется на >
& заменяется на &
Синтаксис:
func('html', <Текст>)
Параметры:
| Текст | Обязательный параметр. Текст, в котором нужно заменить специальные символы на их html-обозначения. |
Пример:
*NL func('html', '<blockquote>Цитата</blockquote>')
Убирает переводы строк из текста.
Синтаксис:
func('m2s', <Текст>)
Параметры:
| Текст | Обязательный параметр. Текст, из которого нужно убрать переводы строк. |
Пример:
*NL func('html', '
Вы стоите посреди прекрасного мира.
Вокруг вас слоняются мальчики-людоеды и растут кусты-убийцы.
')
Данная функция возвратит "склеенный" текст: "Вы стоите посреди прекрасного мира. Вокруг вас слоняются мальчики-людоеды и растут кусты-убийцы."
Убирает переводы строк из текста, обрезая пробелы и символы табуляции в начале и в конце каждой строки.
Синтаксис:
func('m2ts', <Текст>)
Параметры:
| Текст | Обязательный параметр. Текст, из которого нужно убрать переводы строк и "лишние" пробелы. |
Пример:
*NL func('html', '
Вы стоите посреди прекрасного мира.
Вокруг вас слоняются мальчики-людоеды и растут кусты-убийцы.
')
Данная функция возвратит "склеенный" текст: "Вы стоите посреди прекрасного мира.Вокруг вас слоняются мальчики-людоеды и растут кусты-убийцы."
Версия 1.6: