Спецификация разметки


Общие правила и определения


Пробельный символ это символ:
  1. Unicode символ CharacterTabulation
  2. Unicode символ LineTabulation
  3. Unicode символ FormFeed
  4. Unicode символ ZeroWidthNoBreakSpace
  5. Символ с unicode классом Zs

Разметка делится на две уровня. Разметка уровня документа и разметка содержимого.

К разметке уровня документа относятся:
  1. Заголовки.
  2. Списки.
  3. Цитаты сообщений.
  4. Блоковые цитаты (Blockquote).
  5. Таблицы.
  6. Горизонтальный разделитель (вертикальная черта, hr).
  7. Сообщение модератора или системы.
  8. Теглайны.
  9. Параграфы.

К разметке содержимого относится:
  1. Стили: жирный, курсив, подчеркнутый, зачеркнутый, верхний и нижний индексы.
  2. Ссылки.
  3. Картинки.
  4. Смайлики.
  5. Код.





Разметка уровня документа


Заголовки

= Уровень 1
== Уровень 2
=== Уровень 3
==== Уровень 4
===== Уровень 5
====== Уровень 6

Выходной HTML
<h1>Уровень 1</h1>
<h2>Уровень 2</h2>
<h3>Уровень 3</h3>
<h4>Уровень 4</h4>
<h5>Уровень 5</h5>
<h6>Уровень 6</h6>



Параграфы

Начало строки — начало параграфа. Конец строки — соответственно конец. Пустые строки между параграфами игнорируются. Если параграф начинается с пробелов или табуляций — они убираются, а вместо этого в параграфе фиксируется количество отступов. За один отступ считается одна табуляция или два пробела. Нечетное количество пробелов округляется до четного в меньшую сторону.
One Two

  Three
    Four

Выходной HTML
<p class='plain-text'>One Two</p>
<p class='plain-text indent1'>Three</p>
<p class='plain-text indent2'>Four</p>


Цитаты сообщений

Строка цитаты имеет следующий формат:
* Префикс из символов, цифр и знака подчеркивания, без пробелов, длиной от 0 до 6 символов.
* Произвольное количество символов >. Количество символов определяет уровень вложенности.
* Произвольный текст до конца строки.
A>> O La La
Bb> One Two

Выходной HTML
<span class='quota level2'><span class='quota-prefix'>A&gt;&gt;</span>O La La</span>
<span class='quota level1'><span class='quota-prefix'>Bb&gt;&gt;</span>O La La</span>



Списки


Ненумерованный список

Элемент списка — строка, начинающаяся с одного или нескольких символов * (в зависимости от уровня вложенности) и следующего за ним пробела.
* Item 1
** Item 1.1
* Item 2
* Item 3

Выходной HTML
<ul>
  <li>Item 1</li>
  <ul>
    <li>Item 1.1</li>
  </ul>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>


Нумерованный список

Элемент списка — строка, начинающаяся с символа # или № и следующего за ним пробела
№ Item 1
## Item 1.1
№ Item 2
№ Item 3

Выходной HTML
<ol>
  <li>Item 1</li>
  <ol>
    <li>Item 1.1</li>
  </ol>
  <li>Item 2</li>
  <li>Item 3</li>
</ol>


Нумерованные и ненумерованные списки могут быть смешаны между собой на разных уровнях. Нумерованные и ненумерованные списки на одном уровне трактуются как два разных списка.

Свернутый блок

Начинается с символов +++ в начале строки и следующего за этими символами названия блока. Завершается строкой из символов +++.
+++ Много текста
Текст текст текст текст.
+++

Выходной HTML
<div class='collapsible'>
  <div class='title'>Много текста</div>
  <div class='content'>
    Текст текст текст текст.
  </div>
</div>


Блочная цитата

Начинается с тройного символа " и им же заканчивается.
"""
Один классик сказал …
"""

Перед открывающими кавычками можно указать символ +. Это будет означать, что цитата будет по умолчанию свернута в строку "Цитата".


Таблицы

|* Header 1 | Header 2 | Header 3|
|  Cell 1.1 | Cell 1.2 | Cell 1.3|
|  Cell 2.1 | Cell 2.2 | Cell 2.3|
|Left aligned | Centered | Right aligned|
|>| Colspan |<|
|\|||
|Rowspan|||

Выходной HTML:
<table>
  <thead>
    <tr>
      <th class='center'>Header 1</th>
      <th class='center'>Header 2</th>
      <th class='center'>Header 3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td class='center'>Cell 1.1</td>
      <td class='center'>Cell 1.2</td>
      <td class='right'>Cell 1.3</td>
    </tr>
    <tr>
      <td class='center'>Cell 2.1</td>
      <td class='center'>Cell 2.2</td>
      <td class='right'>Cell 2.3</td>
    </tr>
    <tr>
      <td>Left aligned</td>
      <td class='center'>Centered</td>
      <td class='right'>Right aligned</td>
    </tr>
    <tr>
      <td colspan='3' class='center'>Cell 1.2</td>
    </tr>
    <tr>
      <td rowspan='2'>Rowspan</td>
      <td></td>
      <td></td>
    </tr>
    <tr>
      <td></td>
      <td></td>
    </tr>
  </tbody>
</table>


Горизонтальный разделитель

Строка, состоящая только из трех символов ---
Выходной HTML:
<hr/>



Сообщение модератора или системы

Заключается в скобки из тройных символов !!!


Теглайн

Строка, начинающаяся с трех символов @@@, следующиего за ними одного или нескольких пробелов и произвольным текстом далее до конца строки.
@@@Janus v1.2.1

Выходной HTML:
<div class='tagline'>Janus v1.2.1</div>



Объекты

Предназначены для вставки внешних по отношению к форматтеру объектов. Должно присутствовать уникальное имя объекта, а в теле тега значение параметров в JSON формате.
((object_id(
  param1: 25,
  param2: {
    p2p1: 12,
    p2p2: '14'
}
)))

Выходной HTML определяется хостом.







Разметка содержимого


Общее правило для стилей текста:
  1. Открывающая конструкция должна заканчиваться не пробельным символом;
  2. Перед закрывающей конструкцией должен стоять не пробельный символ;

Жирный

Выделяется символами ** с обеих сторон.
**слово**
**несколько слов**
ст**о**ит

Выходной HTML
<strong>слово</strong>
<strong>несколько слов</strong>
ст<strong>о</strong>ит


Курсив

Выделяется символами // с обеих сторон. Правила по обрамлению пробелами соответствуют выделению жирным.
//слово//
//несколько слов//

Выходной HTML
<em>слово</em>
<em>несколько слов</em>


Подчеркнутый

__слово__
__несколько слов__

Выходной HTML
<u>слово</u>
<u>несколько слов</u>


Перечеркнутый

--слово--
--несколько слов--

Выходной HTML
<del>слово</del>
<del>несколько слов</del>


Верхний индекс

^^слово^^
^^несколько слов^^

Выходной HTML
<sup>слово</sup>
<sup>несколько слов</sup>


Нижний индекс

vvсловоvv
vvнесколько словvv

Выходной HTML
<sub>слово</sub>
<sub>несколько слов</sub>


Ссылки

[[текст ссылки|url]]
[[url]]

Текст ссылки может быть пустым. В этом случае в качестве текста используется сам url, но с заменой url escaping на исходный текст.
Выходной HTML
<a href='url'>текст ссылки</a>
<a href='url'>url</a>


Ссылки на сообщения по имени

[[текст ссылки|#name]]
[[#name]]

Текст ссылки может быть пустым. В этом случае текст должен предоставить хост. url ссылки формируется по имени хостом.
Выходной HTML
<a class='name-link' href='host-provided-url'>текст ссылки</a>
<a class='name-link' href='host-provided-url'>host-provided-text</a>



Изображения

![[имя изображения|url]]
![[url]]
+![[имя изображения|url]]

имя изображения может быть пустым. В этом случае в качестве текста используется последний сегмент пути url (имя файла). Если впереди стоит знак + — изображение по умолчанию свернуто.
Выходной HTML
<div class='img'>
  <div class='title'>имя изображения</div>
  <img src='url' alt='имя изображения'/>
</div>
<div class='img'>
  <div class='title'>filename.jpg</div>
  <img src='url' alt='filename.jpg'/>
</div>
<div class='img collapsible'>
  <div class='title'>имя изображения</div>
  <img src='url' alt='имя изображения'/>
</div>



Смайлы


Стандартные смайлы

:)
:))
:)))
:(
;)
:-\\
:???:

Выходной HTML
<i class='emoticon smile'></i>
<i class='emoticon biggrin'></i>
<i class='emoticon lol'></i>
<i class='emoticon frown'></i>
<i class='emoticon wink'></i>
<i class='emoticon smirk'></i>
<i class='emoticon confused'></i>


Смайлы из расширений

Имеют формат :smileid:, где smileid — строка от 1 до 5 символов английского или русского алфавита без пробелов и знаков препинания. Для каждого smileid должны быть два синонима — в русской и английской раскладке.

Код

Внутри кода игнорируется вся разметка, за исключением выделения. Внутри кода так же допускается использование {{{ и }}}. Признак конца кода определяется парсером по парности фигурных скобок.

Кусок текста, окруженный тройными скобками {{{ и }}} распознается как код. Опционально между второй и третьей открывающей скобкой можно указать название языка.
Текст {{ruby{if (x == 0) return;}}} текст

Выходной HTML:
Текст <span class='code'>if (x == 0) return;</span> текст


Если перед и или за блоком кода не идет ничего кроме пробельных символов или конца строки, такой блок форматируется как блочный.
{{cs{
  if (x == 0)
    return;
}}} текст

Выходной HTML:
<div class='code'>
  <span class='code-keyword'>if</span> (x == <span class='code-num-literal'>0</span>)
    <span class='code-keyword'>return</span>;
</div>

Перед открывающими скобками можно указать символ +. Это будет означать, что блок кода будет по умолчанию свернут в строку.

Выделение в коде

Выделить можно либо строку целиком, либо конкретный участок кода. Выделенная строка начинается с символов >>> и следующего на ними пробельного символа. Выделенный участок кода должен быть расположен на одной строке и обрамляется символами >>> и <<< слева и справа. Расположение этих символов относительно слов соответствует правилам для выделения жирным.
if (x == 0)
>>>  Foo();
else
  x = >>>GetX()<<<;



Экранирование

Для экранирования служебного символа можно применять символ экранирования \. Действует только для следующих символов — "\_*+-/!|><@{(:#№[". Все остальные комбинации трактуются как просто текст.


Автозамены

Некоторые комбинации символов заменяются:
* ... (три точки) на … (троеточие)
* --, окруженный пробелами на ­— (длинное тире)
Автор: AndrewVK    Оценить