Информация об изменениях

Сообщение Спецификация языка разметки от 05.09.2014 13:52

Изменено 06.09.2014 18:19 AndrewVK

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

Стили текста

Жирный

Выделяется символами ** с обеих сторон. При этом слева от открывающей ** должен быть пробел или начало строки, а справа не пробел и не конец строки. Для закрывающей, соответственно, не пробел и не начало строки слева, и пробел или конец строки справа.
**слово**
**несколько слов**

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


Курсив

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

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


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

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

Выходной HTML
<span class='underline'>слово</span>
<span class='underline'>несколько слов</span>


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

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

Выходной HTML
<span class='strikeout'>слово</span>
<span class='strikeout'>несколько слов</span>


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

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

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


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

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

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



Заголовки

= Уровень 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


Five

Выходной HTML
<p class='plain-text'>One Two Three</p>
<p class='plain-text'>Four</p>
<p class='plain-text'>Five</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>


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

Ссылки

((текст ссылки|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 должны быть два синонима — в русской и английской раскладке.

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

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

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



Код

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

Строчный код

Кусок текста, окруженный тройными скобками {{{ и }}} на одной строке. Опционально между второй и третьей открывающей скобкой можно указать название языка.
Текст {{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()<<<;


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

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

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


Таблицы

|* 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:
<hr/>



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

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


Теглайн

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

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



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

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

Автозамены

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

Объекты

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

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

Стили текста

Жирный

Выделяется символами ** с обеих сторон. При этом слева от открывающей ** должен быть пробел или начало строки, а справа не пробел и не конец строки. Для закрывающей, соответственно, не пробел и не начало строки слева, и пробел или конец строки справа. Эти же правила действуют и для остальных стилей текста.
**слово**
**несколько слов**

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


Курсив

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

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


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

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

Выходной HTML
<span class='underline'>слово</span>
<span class='underline'>несколько слов</span>


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

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

Выходной HTML
<span class='strikeout'>слово</span>
<span class='strikeout'>несколько слов</span>


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

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

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


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

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

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



Заголовки

= Уровень 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


Five

Выходной HTML
<p class='plain-text'>One Two Three</p>
<p class='plain-text'>Four</p>
<p class='plain-text'>Five</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>


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

Ссылки

((текст ссылки|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 должны быть два синонима — в русской и английской раскладке.

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

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

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



Код

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

Строчный код

Кусок текста, окруженный тройными скобками {{{ и }}} на одной строке. Опционально между второй и третьей открывающей скобкой можно указать название языка.
Текст {{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()<<<;


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

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

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


Таблицы

|* 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:
<hr/>



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

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


Теглайн

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

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



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

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

Автозамены

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

Объекты

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