Здравствуйте, A-Myth, Вы писали:
AM>Для markdown есть несколько расширений. Плюс никто не мешает написать свой.
Ну а если писать свой, то тогда в чем вопрос?
AM>Они много где используются и поддерживаются.
Там в топике есть ссылки, и markdown далеко не на первом месте по популярности.
AM>Десятилетие обкатки.
Десятилетие это сильно сказано. Я точно помню что в 2009 это был еще довольно малоизвестный формат. Опять же, bbcode в разы старше, если уж на обкатку ориентироваться.
AM>А единый устраивающий всех язык разметки всё равно не создать.
Но можно создать такой, который устраивает максимальное количество. Да и не в устраиваемости дело, а в удобстве. Большая часть разметок создана хаотично, люди явно не везде тщательно задумывались об удобстве. А у нас еще и специфика двуязычной клавиатуры накладывается.
... << RSDN@Home 1.2.0 alpha 5 rev. 100 on Windows 8 6.2.9200.0>>
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Пробельный символ это символ:
Unicode символ CharacterTabulation
Unicode символ LineTabulation
Unicode символ FormFeed
Unicode символ ZeroWidthNoBreakSpace
Символ с unicode классом Zs
Разметка делится на две уровня. Разметка уровня документа и разметка содержимого.
К разметке уровня документа относятся:
Заголовки.
Списки.
Цитаты сообщений.
Блоковые цитаты (Blockquote).
Таблицы.
Горизонтальный разделитель (вертикальная черта, hr).
Сообщение модератора или системы.
Теглайны.
Параграфы.
К разметке содержимого относится:
Стили: жирный, курсив, подчеркнутый, зачеркнутый, верхний и нижний индексы.
Ссылки.
Картинки.
Смайлики.
Код.
= Уровень 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>></span>O La La</span>
<span class='quota level1'><span class='quota-prefix'>Bb>></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 определяется хостом.
Общее правило для стилей текста:
Открывающая конструкция должна заканчиваться не пробельным символом;
Перед закрывающей конструкцией должен стоять не пробельный символ;
Выделяется символами ** с обеих сторон.
**слово**
**несколько слов**
ст**о**ит
Выходной 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()<<<;
Для экранирования служебного символа можно применять символ экранирования \. Действует только для следующих символов — "\_*+-/!|><@{(:#№[". Все остальные комбинации трактуются как просто текст.
Некоторые комбинации символов заменяются:
* ... (три точки) на … (троеточие)
* --, окруженный пробелами на — (длинное тире)