Instantly share code, notes, and snippets.

@alextretyak alextretyak/pq.pq
Last active Feb 9, 2019

Embed
What would you like to do?
[[[
[[[Поток: Разработка]]]
[[[Хабы: Python, HTML]]]
[[[Заголовок: Новый облегчённый язык разметки текста на основе [[[одиночных ]]]парных кавычек (pq)]]]
[[[Метки: разметка текста, русская qазметка]]]
]]][[[Встречайте[[[/Принимайте]]] такой, несколько необычный[[[ и неожиданный]]][[[[запоздалый]]]], новогодний подарочек.
]]]Я не могу объяснить, [[[как мне вообще взбрела в голову]]]откуда пришла идея такого языка разметки, но то, что получилось в итоге — весьма... [[[эм, ]]]занятно.
Не [[[[[[очень/]]]сильно/]]]слишком-то рассчитываю на широкое практическое [[[использование/]]]применение [[[кем-либо ]]]этой штуки[‘(: шутки :)’], но некоторые идеи, использованные в этом языке разметки, вполне могут дать пищу для размышлений и как-то поспособствовать развитию других существующих или новых языков.
Итак, перейду к описанию самого языка. [Если кто-то вдруг не понял, о чём вообще идёт речь, то к ‘облегчённым языкам разметки’[https://ru.wikipedia.org/wiki/Язык_разметки#.D0.9E.D0.B1.D0.BB.D0.B5.D0.B3.D1.87.D1.91.D0.BD.D0.BD.D1.8B.D0.B5_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B8_.D1.80.D0.B0.D0.B7.D0.BC.D0.B5.D1.82.D0.BA.D0.B8] относятся Markdown, BBCode, вики-разметка и т.п.]
Р‘https://habrastorage.org/webt/mr/yi/wy/mryiwyz_inpkwgw32ujpdsfnmzs.png’[‘[[[archived:{[http://web.archive.org/web/20171118110653/https://hsto.org/webt/mr/yi/wy/mryiwyz_inpkwgw32ujpdsfnmzs.png][http://archive.li/YAzNw][http://www.webcitation.org/6v43fNoY4][https://megalodon.jp/2017-1118-2007-16/https://habrastorage.org:443/webt/mr/yi/wy/mryiwyz_inpkwgw32ujpdsfnmzs.png]} <- https://avatars2.githubusercontent.com/u/22426167?v=4&s=200]]]’]'‘<cut />’'
Данная разметка основана на одиночных парных кавычках — символах `‘` и `’` (вопрос выбора именно этих символов разъясняется ниже в P.S.), поэтому пока что я остановился на таком варианте названия: ~‘пк-разметка’ или ~‘pqmarkup’ (paired quotes markup).
H‘Как же эти кавычки набирать на клавиатуре?
В ОС семейства Windows можно с помощью программы AutoHotkey[https://autohotkey.com/download/] назначить глобальные горячие клавиши для ввода любых спец-символов. Чтобы назначить например [[[Right]]]Alt+9 и [[[Right]]]Alt+0 для ввода одиночных парных кавычек достаточно добавить такие две строчки в файл-скрипт настроек:
`
Alt & 9:: SendInput {‘}
Alt & 0:: SendInput {’}
`[[[
ПРИМЕЧАНИЕ:
!9:: SendInput {‘}
!0:: SendInput {’}
не работает правый Alt + 9/0 [[[‘в режиме’/‘при активированной’]]/]в русской раскладке клавиатуры.
]]][[[
‘Инструкция по установке AutoHotkey и редактированию его настроек для непрограммистов’{
[-написать инструкцию-]
}](для статьи на Хабре не нужна — предполагается, что аудитория читателей Хабра может догадаться как делать такое самостоятельно)]]
Также в Windows можно использовать без [[[подготовительных/]]]дополнительных настроек сочетание клавиш Alt[‘в русской раскладке работает только через левый Alt’]+0145 (на цифровой клавиатуре) для открывающей кавычки `‘` и Alt+0146 для закрывающей `’` (правда, работает это ‘не во всех программах’[‘например, не работает в Microsoft Word’], а также требует определённого состояния NumLock).
‘Визуально на цифровой клавиатуре эти цифры расположены очень удачно:’{
```
┌───┬───┐
│ 4 │ 5 │
├───┼───┘
│ 1 │
├───┴───┐
│ 0 │
└───────┘
```
Похоже на открывающую квадратную скобочку `[`.'‘<!--]-->’'
Очень легко запомнить.
}
Н(+1)‘Синтаксис пк-разметки’
Н‘[[[Стилизация/]]]Оформление текста’
T‘
‘‘#‘*‘жирный’’’ ‘*‘жирный’[[[‘.’[‘символ * похож на букву ж’]]]]’’
‘‘#‘_‘подчёркнутый’’’ ‘_‘подчёркнутый’’’
‘‘#‘-‘зачёркнутый’’’ ‘-‘зачёркнутый’’’
‘‘#‘~‘курсив’’’ ‘~‘курсив’[[[‘.’[‘почему не /‘курсив’ — во-первых, курсив даёт не только наклон, но и изменяет шрифт (особенно буквы т, д, г), и, во-вторых, курсив может использоваться для придания особого смысла выделенному курсивом тексту, например так: ~‘правильный’ (‘близкий к правильному’/‘приблизительно правильный’), а в математике знак ~ означает ‘приблизительно’’]]]]’’
!‘~‘Примечание:’
Вот так не работает: `~*‘жирный курсив’` (будет просто ~*‘жирный’), пишите так: `~‘*‘`~‘*‘жирный курсив’’`’’` или так: `*‘~‘`*‘~‘жирный курсив’’`’’` (‘так и задумано’[‘чтобы не злоупотреблять форматированием и чтобы лучше было видно в исходной пк-разметке такие места’]).
Обратите внимание, что использование отдельных символов для открывающей и закрывающей кавычек предоставляет возможность неограниченной вложенности элементов форматирования.’
Н‘Ссылки и всплывающие подсказки’
0‘Ссылка[http://адрес]’
0‘Ссылка[http://адрес ‘текст всплывающей подсказки’]’
0‘Текст[‘текст всплывающей подсказки’]’
‘Подробнее (больше примеров)’{
T‘
Н‘‘Пк-разметка’ ‘HTML’ ‘Как выглядит’’
‘‘0‘[http://address]’’ ‘<a href="http://address">http://address</a>’ ‘[http://address]’’
‘‘0‘ссылка[http://address]’’ ‘<a href="http://address">ссылка</a>’ ‘ссылка[http://address]’’
‘‘0‘ссылка[https://address]’’ ‘<a href="https://address">ссылка</a>’ ‘ссылка[https://address]’’
‘‘0‘‘многословная ссылка’[http://address]’’ ‘<a href="http://address">многословная ссылка</a>’ ‘‘многословная ссылка’[http://address]’’
‘‘0‘ссылка[https://address ‘текст всплывающей подсказки’]’’ ‘<a href="https://address" title="текст всплывающей подсказки">ссылка</a>’ ‘ссылка[https://address ‘текст всплывающей подсказки’]’’
‘‘0‘текст[‘текст всплывающей подсказки’]’’ ‘<abbr title="текст всплывающей подсказки">текст</abbr>’ ‘текст[‘текст всплывающей подсказки’]’’
[[[
[[[[
‘‘0‘ссылка[http://address][1] ‘та же ссылка’[1]’’ ‘<a href="http://address">ссылка</a> <a href="http://address">та же ссылка</a>’ ‘ссылка[http://address][1] ‘та же ссылка’[1]’’
]]]]
‘‘0‘ссылка1[http://address1][-1]
ссылка2[http://address2][-2]
‘ссылка на address1’[-1]
‘ссылка на address2’[-2]’’ ‘<a href="http://address1">ссылка1</a><br />
<a href="http://address2">ссылка2</a><br />
<a href="http://address1">ссылка на address1</a><br />
<a href="http://address2">ссылка на address2</a>
’ ‘ссылка1[http://address1][-1]
ссылка2[http://address2][-2]
‘ссылка на address1’[-1]
‘ссылка на address2’[-2]’’
‘‘‘Почему [-1]?’{
Раньше я хотел использовать запись `[-N]` для указания на одну из предыдущих ссылок (`[-1]` указывает на предыдущую ссылку, `[-2]` на предпредыдущую и так далее), например:
```
Посмотрите сюда[http://address1] и сюда[http://address2].
Теперь ‘эта ссылка’[-1] указывает на address2, а эта[-2] — на address1.
```
Но быстро пришёл к пониманию, что такие ссылки слишком легко ломаются — в данном примере достаточно просто вставить новую ссылку между любыми ссылками.
Поэтому, чтобы исключить соблазн задействовать в будущем запись `[-N]` для таких очень-легко-ломающихся ссылок, я решил [[[занять/]]]задействовать ‘именно эту запись’[‘[-N], а не [=N] или что-то другое’] для не-настолько-легко-ломающихся ссылок [[[(:]]]:).
А запись `[N]` я решил [[[вообще ]]]не использовать, так как она достаточно часто встречается в документах и на различных веб-страницах, например:
>[https://ru.wikipedia.org/wiki/Смещение_перигелия_Меркурия]:‘
*‘Аномальное смещение перигелия Меркурия’ — обнаруженная в 1859 году особенность движения планеты Меркурий, сыгравшая исключительную роль в истории физики[1].’
}’ - -’
](Закомментировал, так как для обычных ссылок такой синтаксис вообще под вопросом, и пояснение формы записи [-1], таким образом, нужно только для ссылок-источников для цитат, но цитаты относятся к дополнительным возможностям форматирования и не упоминаются в этой статье на Хабре.)]]
}
Н‘Заголовки, картинки, цвет и таблицы’
T‘
‘‘Н (русская)’ ‘H (английская)’ ‘Название заголовка\Header’’
‘‘Р (русская)’ ‘P (английская)’ ‘[[[изобРажение/каРтинка/]]]Рисунок\Picture ‘[почему не I(image)]’[‘предполагается расширить возможности P до аналога тега <picture> из HTML 5.1[[[Ладно, признаюсь, что это шутка (: но если кто-нибудь сможет убедительно объяснить, зачем нужен этот <picture> в HTML 5.1, то я подумаю :).]]][[[Почему мне не нравится пара И\I (Изображение\Image) — в пару русской букве И я считаю лучше подходит английская И, то есть E: Elon\Илон, Else\Иначе.]]]’]’’
‘‘С (русская)’ ‘C (английская)’ ‘ц[‘латинская[[[/немецкая]]] буква `С` произносится как `цэ`’]вет(Свет)\Color’’
‘‘Т (русская)’ ‘T (английская)’ ‘Таблица\Table’’
~‘Примеры:’
0‘Заголовок — Н‘Название заголовка’’
0‘Картинка — Р‘http://адрес_картинки’’
0‘Текст красным цветом — С(#фф0000)‘текст’’
‘Подробнее (больше примеров)’{
Т‘
Н‘‘Пк-разметка’ ‘HTML’ ‘Как выглядит’’
Н‘‘Заголовки\Headers’ - -’
‘‘0‘H‘Заголовок’’’ ‘<h3>Заголовок</h3>’ ‘H‘Заголовок’’ ’
‘‘0‘H(0)‘Заголовок’’’ | | ’
‘‘0‘H(1)‘Заголовок’’’ ‘<h2>Заголовок</h2>’ ‘H(1)‘Заголовок’’ ’
‘‘0‘H(+1)‘Заголовок’’’ | | ’
‘‘0‘H(-1)‘Заголовок’’’ ‘<h4>Заголовок</h4>’ ‘H(-1)‘Заголовок’’’
[[[
Я постоянно путаюсь в обозначениях заголовков в других облегчённых языках разметки, например, что отобразится более крупным шрифтом: `##Заголовок2` или `###Заголовок3`?
В разных языках разметки по разному!
В большинстве языков разметки (включая Markdown) `Заголовок2` будет крупнее, но в некоторых (например Texy![https://en.wikipedia.org/wiki/Texy!]) — наоборот!
А в случае с `H(0)‘...’` и `H(1)‘...’` ответ что больше (0 или 1) — очевиден.
Также как и с `H(+1)‘...’` и `H(-1)‘...’`.
Кажется, что всему виной HTML из-за принятого неверного выбора/решения, что <h1>-заголовки крупнее чем <h2>, но причина в том, что в HTML нет отрицательных уровней заголовков, из-за чего там работает другая ассоциация: <h1> — заголовок, <h2> — подзаголовок, <h3> — подподзаголовок и т.д. В пк-разметке же поддерживаются обе ассоциации сразу:
1. `H‘Заголовок’`, `H(-1)‘Подзаголовок’`, `H(-2)‘Подподзаголовок’` и т.д.
2. `H(+2)‘Заголовок’` крупнее/‘больше по размеру’, чем `H(+1)‘Заголовок’`, так как число 2 больше, чем 1.
]]]
Н‘‘Изображения/картинки\Pictures’ - -’
‘‘0‘P‘https://.../blue_circle.png’’’ ‘<img src="https://.../blue_circle.png" />’ ‘P‘https://bitbucket.org/pqmarkup/pqmarkup/raw/default/docs/images/blue_circle.png’’’
‘‘0‘P‘https://.../blue_circle.png’[http://address]’’ ‘<a href="http://address"><img src="https://.../blue_circle.png" /></a>’ ‘P‘https://bitbucket.org/pqmarkup/pqmarkup/raw/default/docs/images/blue_circle.png’[http://address]’’
‘‘0‘P‘https://.../blue_circle.png’[‘текст всплывающей подсказки’]’’ ‘<img src="https://.../blue_circle.png" title="текст всплывающей подсказки" />’ ‘P‘https://bitbucket.org/pqmarkup/pqmarkup/raw/default/docs/images/blue_circle.png’[‘текст всплывающей подсказки’]’’
‘‘0‘P‘https://.../blue_circle.png’[http://address ‘текст всплывающей подсказки’]’’ ‘<a href="http://address" title="текст всплывающей подсказки"><img src="https://.../blue_circle.png" /></a>’ ‘P‘https://bitbucket.org/pqmarkup/pqmarkup/raw/default/docs/images/blue_circle.png’[http://address ‘текст всплывающей подсказки’]’’
Н‘‘Цвет текста’ - -’
‘‘\/‘Цвет задаётся в формате #ККЗЗСС (Красный, Зелёный, Синий) посредством шестнадцатеричных цифр (можно использовать кириллицу: абсдеф/АБСДЕФ является аналогом abcdef/ABCDEF) или в формате КЗС посредством цифр ‘от 0 до 8’[‘Считаю, что для оформления большинства статей 9 уровней/градаций для компонент цвета вполне достаточно [[[и так думать/‘выбирать цвет’ проще]]], а максимум 8 (а не 9) выбран для того, чтобы можно было задавать серый цвет: С(444) или С(4).’].’’ - -’
‘‘0‘С(#ff0000)‘красный текст’’’ ‘<span style="color: #ff0000">красный текст</span>’ ‘С(#ff0000)‘красный текст’’’
‘ | ‘<font color="#ff0000">красный текст</font>’ |’
‘‘0‘С(800)‘тоже красный текст’’’ ‘<span style="color: #FF0000">тоже красный текст</span>’ ‘С(800)‘тоже красный текст’’’
‘ | ‘<font color="#FF0000">тоже красный текст</font>’ |’
‘‘0‘С(000)‘чёрный текст’’’ ‘<span style="color: #000000">чёрный текст</span>’ ‘С(000)‘чёрный текст’’’
‘ | ‘<font color="#000000">чёрный текст</font>’ |’
‘‘0‘С(4)‘серый текст’’’ ‘<span style="color: #808080">серый текст</span>’ ‘С(4)‘серый текст’’’
‘ | ‘<font color="#808080">серый текст</font>’ |’
‘‘0‘С(-880)‘текст на жёлтом фоне’’’ ‘<span style="background-color: #FFFF00">текст на жёлтом фоне</span>’ ‘Р‘https://habrastorage.org/webt/ib/iz/uf/ibizuffmnob22vy-w53qtkm2cxu.png’[‘[[[archived:{[http://web.archive.org/web/20180203215847/https://hsto.org/webt/ib/iz/uf/ibizuffmnob22vy-w53qtkm2cxu.png][http://archive.li/kSs18][http://www.webcitation.org/6wxsJWpP4][https://megalodon.jp/2018-0204-0701-54/https://habrastorage.org:443/webt/ib/iz/uf/ibizuffmnob22vy-w53qtkm2cxu.png]}]]]’]’’
Н‘‘Таблицы’ - -’
‘‘#‘Т‘
Н‘‘A’ ‘B’ ‘C’’
 ‘‘1’ ‘2’ ‘3’’
’’’
‘<table>
<tr><th>A</th><th>B</th><th>C</th></tr>
<tr><td>1</td><td>2</td><td>3</td></tr>
</table>’
‘Т‘
Н‘‘A’ ‘B’ ‘C’’
 ‘‘1’ ‘2’ ‘3’’
’’’
Н‘‘\/‘Объединение ячеек таблицы’’ - -’
‘‘\/‘Чтобы объединить ячейки таблицы, нужно каждую отсутствующую ячейку заменить на символ `-` или символ `|` таким образом, чтобы следуя по символу `-` влево и по символу `|` вверх можно было выйти на соответствующую значимую ячейку.’’ - -’
‘‘#‘Т‘‘
‘A’ ‘B’
’‘
‘C’  -
’’
’’
‘<table>
<tr><td>A</td><td>B</td></tr>
<tr><td colspan="2">C</td></tr>
</table>’
‘Т‘‘
‘A’ ‘B’
’‘
‘C’  -
’’
’’
‘‘#‘T‘‘
‘ ’ ‘ ’ ‘1’ ’‘
‘ ’ ‘ ’  |  ’‘
‘2’  -   |  ’’
’’
‘<table>
<tr><td> </td> <td></td><td rowspan="3">1</td></tr>
<tr><td> </td> <td></td></tr>
<tr><td colspan="2">2</td></tr>
</table>’
‘T‘‘
‘ ’ ‘ ’ ‘1’ ’‘
‘ ’ ‘ ’  |  ’‘
‘2’  -   |  ’’
’’
‘‘#‘T‘‘
‘ ’ ‘ ’ ‘1’ ’‘
‘ ’ ‘ ’  |  ’‘
‘2’  -   -  ’’
’’
‘<table>
<tr><td> </td><td> </td><td rowspan="2">1</td></tr>
<tr><td> </td><td> </td></tr>
<tr><td colspan="3">2</td></tr>
</table>’
‘T‘‘
‘ ’ ‘ ’ ‘1’ ’‘
‘ ’ ‘ ’  |  ’‘
‘2’  -   -  ’’
’’
‘‘\/‘Для больших объединений ячеек (2х2 и более): вправо от значимой ячейки идут символы `-`, вниз идут символы `|`, а остальные отсутствующие ячейки можно заполнять либо символом `-` либо `|`, но рекомендуется всегда использовать `-`.’’ - -’
‘‘#‘T‘‘
‘1’  -   -  ‘2’ ’‘
 |   -   -  ‘3’ ’‘
 |   -   -  ‘4’ ’‘
‘5’ ‘6’ ‘7’     ’’
’’
‘<table>
<tr><td colspan="3" rowspan="3">1</td><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td><td>6</td><td>7</td></tr>
</table>’
‘T‘‘
‘1’  -   -  ‘2’ ’‘
 |   -   -  ‘3’ ’‘
 |   -   -  ‘4’ ’‘
‘5’ ‘6’ ‘7’     ’’
’’
}
Н‘Комментарии’
0‘[[[’комментарий/‘контейнер для воды (:’[‘А что? :) Очень удобно таким способом прятать в исходном тексте[[[ статьи]]] лишние слова/мысли, которые жалко удалять.’]0‘]]]’
Н‘‘Полное описание синтаксиса форматирования.’[https://pqmarkup.github.io/ru/syntax]’
‘(Если кому интересно, вот немного истории выбора тегов [для таблиц])’{
Изначально я планировал альтернативный вариант задания тегов. Вот такой:
`[[H]Header/Заголовок[-H]]`
или
`[[H]Header/Заголовок[-]]`
или
`[[H]Header/Заголовок]`
Соответственно, таблицы задавались тегом `[[T]...]`
Разделитель столбцов был таким — `[]`
Разделитель строк был таким — `[[]]`
Пример таблицы:
`[[Т]
A[]B[]C
[[]]
1[]2[]3
[-Т]]`
или так:
`[[Т]
[[]]A[]B[]C
[[]]1[]2[]3
[-Т]]`
(Закрывающий тег `[-Т]` можно опустить.)
Но потом я вспомнил, что [[[много/]]]несколько вариантов выбора для одного и того же форматирования — это то, что мне [[[‘]]]не нравится в Markdown[[[’[‘ещё мне не нравится отсутствие поддержки <abbr title='...'>[[[всплывающие подсказки вообще использовать нежелательно из-за проблем на устройствах с сенсорным экраном (планшеты, смартфоны)]]][[[, а также невозможность вставить [[[блок кода в цитату](можно)]]цитату в элемент списка[[[можно: >[https://daringfireball.net/projects/markdown/syntax <- [https://github.github.com/gfm]:‘How much indentation is needed for a sublist? The spec says that continuation paragraphs need to be indented four spaces, but is not fully explicit about sublists.’]:‘List items may consist of multiple paragraphs. Each subsequent paragraph in a list item must be indented by either 4 spaces or one tab:...To put a blockquote within a list item, the blockquote's > delimiters need to be indented:...’]]] (прецедент[https://github.com/JuliaLang/julia/issues/2097#issuecomment-339924750 [[[archived:{[http://web.archive.org/web/20171030040911/https://github.com/JuliaLang/julia/issues/2097][http://archive.li/AOsCT]} <- google:‘julia multi line expressions’ <- fail <- google:‘julia line joining’]]]])]]]’]]]] (например: `__так__` или `**так**`), и я решил, что оставлять два варианта форматирования в пк-разметке (`~‘...’` и `[[~]...]`) будет неправильно. А значит, имеет смысл оставить только одну форму записи — с кавычками #‘‘’’, так как она менее конфликтующая и является первой/основной идеей, положившей начало этой разметки текста {а то, что набирать символы кавычек `‘` и `’` непривычно — я считаю, это не так страшно, так как [с моей точки зрения] важнее читаемость разметки и её когнитивные[‘относящиеся к восприятию [информации]’] характеристики (легко понять/запомнить правила разметки, легко[[[/приятно]]] читать/воспринимать размеченный текст), а также [[[минимизация/]]]снижение вероятности возникновения конфликтов (когда простой текст или формула [ошибочно/]ненамеренно трактуется как разметка) и избежание необходимости что-то экранировать (а то ведь часто можно и пропустить/не заметить такие ошибки — когда размеченный текст преобразовался немного не в то, что задумывалось)}.
Определившись с выбором в пользу кавычек, сначала я хотел сделать такой разделитель строк — `‘’` (по аналогии с `[]`), но быстро одумался (ведь тогда возникает проблема с пустыми ячейками в самой таблице) и пришёл к нынешней форме записи:
#‘Т‘
‘‘A’ ‘B’ ‘C’’
‘‘1’ ‘2’ ‘3’’
’’
или так:
#‘Т‘‘
‘A’ ‘B’ ‘C’
’‘
‘1’ ‘2’ ‘3’
’’
\/‘(Разумеется, эта форма записи не самая приятная для набора и я немало думал над тем, возможно ли её как-то упростить (или хотя бы дать возможность альтернативной более простой формы записи для таблиц, как в ‘GitHub Flavored Markdown’[https://github.github.com/gfm/#tables-extension-] или в ‘Habrahabr Flavored Markdown’[https://habrahabr.ru/info/help/markdown/] [к слову сказать, в большинстве реализаций Markdown не поддерживаются таблицы без заголовков]), но решил остановиться на нынешней форме записи, так как она итак достаточно лёгкая (по сравнению с HTML <table>) и при этом имеет неоспоримое преимущество [перед более простой формой записи] — возможность включать[[[/вставлять]]] в ячейку таблицы всё что угодно (включая любые другие [[[блоки/]]]элементы разметки и даже вложенные таблицы), а также нынешняя форма записи даёт возможность использовать пробелы в начале и в конце строки любой ячейки таблицы (возможность спорная, но может пригодиться для [[[преобразования/представления/]]]экспорта таблиц баз данных[[[для конвертирования документов Microsoft Word и подобных в пк-разметку]]]).)’
‘(Если кому интересно, вот история/‘как я пришёл к’ нынешней форме записи для объединения ячеек таблицы)’{
\/‘\/‘...не, решил спрятать в комментарий и не включать в статью[[[ {в непричёсанном виде выглядит некрасиво {из-за отсутствия чёткого разделения где текст, а где моноширинный код[[[, а также из-за межстрочного интервала в браузерах (речь про блоки с кодом), при котором в таблицах в псевдографике вертикальные линии получаются пунктирными (вроде `line-height: normal` полностью исправляет эту проблему {эх... если бы всё было так просто:
Такой HTML-код:
```
<sub><sub><sub>
<pre style="display: inline">
┌───┐
│ │
└───┘
</pre>
</sub></sub></sub>
```
отображается в Google Chrome с разрывами в вертикальных линиях.
Зато с двумя `<sub>` [а также с одним `<sub>` и вообще без `<sub>`] уже всё нормально:
```
<sub><sub>
<pre style="display: inline">
┌───┐
│ │
└───┘
</pre>
</sub></sub>
```
Помогает отказ от `style="display: inline"` [но для многострочного кода этот стиль и не нужен]:
```
<sub><sub><sub>
<pre>
┌───┐
│ │
└───┘
</pre>
</sub></sub></sub>
```
Этот HTML-код даёт линии без разрывов.
})]]]}, а такой бред причёсывать смысла нет, он имеет только/исключительно историческую ценность}]]], а если кому это и правда интересно, тогда смотрите исходник статьи.’’[[[
[./м.txt]:‘
23:33 02.09.2016
Рассмотрим простенькую табличку:
T‘‘
=‘1’ -‘’ ‘2’ ’‘
-‘’ -‘’ ‘3’ ’‘
‘4’ ‘5’ ‘6’ ’’
[[[
┌───────┬───┐
│ │ 2 │
│ 1 ├───┤
│ │ 3 │
├───┬───┼───┤
│ 4 │ 5 │ 6 │
└───┴───┴───┘
(Почему здесь и далее дублирую таблицы псевдографикой — [чтобы можно было понять как отрисуется таблица по/]‘для наглядности в’ исходной пк-разметке.)
]]]
Изначально я хотел использовать обозначение `-‘’` для ячеек, которые необходимо склеить с соседними {`-` означает отсутствующую ячейку, и, в принципе, можно было обойтись одним `-` без `‘’`, но для большей симметричности[?] — чтобы в каждой строке было одинаковое количество кавычек}.
Вот так:
`()‘T‘‘
‘1’ -‘’ ‘2’ ’‘
-‘’ -‘’ ‘3’ ’‘
‘4’ ‘5’ ‘6’ ’’
Но у такого решения есть проблемы.
Рассмотрим такой пример:
`()‘T‘
‘‘1’ ‘2’’
‘‘3’ -‘’’
’’
Такая пк-разметка может быть истолкована неоднозначно.
Ей соответствуют две таблицы. Такая:
T‘‘
‘1’ =‘2’ ’‘
‘3’ -‘’ ’’
┌───┬───┐
│ 1 │ │
├───┤ 2 │
│ 3 │ │
└───┴───┘
И такая:
T‘‘
‘1’ ‘2’ ’‘
=‘3’ -‘’ ’’
┌───┬───┐
│ 1 │ 2 │
├───┴───┤
│ 3 │
└───────┘
>Почему нельзя было обойтись одним символом (я хотел вообще использовать `.`).
Тогда не будет работать с пустыми ячейками в таблице ‘’.
Отдельный символ нужен, чтобы обозначить значимую ячейку.
[Хм, тогда можно значимую ячейку обозначать так: `.‘’`, а склеенную просто `.`]
>Почему символ `=`, а не `+`?
Запись `+``‘добавлено’` зарезервирована для обозначения внутристрочных диффов/изменений (для систем управления версиями).
А почему именно `=` — ну этот символ как два минуса.
‘Объединение ячеек таблицы:’{
Чтобы объединить ячейки таблицы, нужно их просто пометить символом `.` (отсутствующие ячейки помечаются просто точкой `.`, а верхняя левая ячейка — `.‘...’`)
T‘‘
.‘1’ . ‘2’ ’‘
. . .‘3’ ’‘
.‘4’ . . ’’
>Почему символ `.`?
<‘Ну, в PHP, Perl[‘<Perl6’], Lua[‘..’], AutoHotkey `.` используется для конкатенации строк.
[Я ещё думал использовать символ `#`, но он слишком бросается в глаза. Ещё можно `&`.]’
>Почему `.` идёт в начале (перед строкой с ячейкой таблицы): так — `.‘’`, а не так — `‘’.`?
<‘Такая запись:
T‘‘
.‘1’ . ‘2’ ’‘
. . ‘3’ ’’
по мне так, нагляднее, чем такая:
T‘‘
‘1’. . ‘2’ ’‘
. . ‘3’ ’’
8:07 03.09.2016/
Не, через `.` не получится. Возникает проблема в такой ситуации:
`()‘T‘‘
‘’ ‘’ .‘1’ ’‘
‘’ ‘’ . ’‘
.‘2’ . . ’’
Такая пк-разметка может быть истолкована неоднозначно.
Ей соответствуют две таблицы. Такая:
T‘‘
‘’ ‘’ ‘1’ ’‘
‘’ ‘’ | ’‘
‘2’ - | ’’
┌───┬───┬───┐
│ │ │ │
├───┼───┤ │
│ │ │ 1 │
├───┴───┤ │
│ 2 │ │
└───────┴───┘
И такая:
T‘‘
‘’ ‘’ ‘1’ ’‘
‘’ ‘’ | ’‘
‘2’ - - ’’
┌───┬───┬───┐
│ │ │ │
├───┼───┤ 1 │
│ │ │ │
├───┴───┴───┤
│ 2 │
└───────────┘
}
[+разобраться, почему выдаётся ошибка Unknown formatting character inside table row at line 3 column 1 — должно указываться положение относительно начала файла, а не начала таблицы+{ясно теперь: положение отсчитывалось от начала записи 23:33 02.09.2016} fixed at 08b07436aeff9a7265973199974671949f5759ed теперь всё работает как надо (выдаётся ошибка Unknown formatting character inside table row at line 260 column 1)]
]]]
}
}
~‘‘Исходник данной статьи’[https://gist.github.com/alextretyak/4d0cbab44fd2605febcbbd870f997b2f][[[, как можно догадаться,]]] написан на пк-разметке. Преобразован к формату Habr HTML посредством ‘реализации на Python’[https://pypi.python.org/pypi/pqmarkup] (c флагом командной строки `--habr-html`).’
‘P.S.’{
Причины (впрочем, достаточно субъективные), почему я выбрал именно символы `‘’` (а не 0‘`´’ или, скажем, «» или `“”`):
1. Они достаточно приятно выглядят (в соответствующем шрифте [например, Courier New]). На мой взгляд, лучше, чем «» или ‹›.
2. [[[Это ~‘абсолютно’ парные символы —]]]Они идут подряд друг за другом в любой кодировке (в отличие от 0‘`´’ или «» или ‹›) [также как и `“”`].
3. Почему не `“”` [[[кстати, Alt+0147 на цифровой клавиатуре эти цифры расположены ещё более удачно — 4 в ряд]]] — в русских текстах парным символу `“` является `„` (‘Экранная типографика. Кавычки’[http://www.artlebedev.ru/kovodstvo/sections/62/ ‘(смотри также [http://www.artlebedev.ru/kovodstvo/sections/104/])’]).
4. ‘А ещё мне коды[/годы] этих символов нравятся...’{‘201? и 201¿[[[ (https://en.wikipedia.org/wiki/Quotation_mark#Unicode_code_point_table)]]]’[‘[http://unicode.org/Public/UNIDATA/NamesList.txt]’]}
[[[‘‘‘‘]]]Один существенный минус символов кавычек `‘` и `’` в том, что [[[Microsoft Word любит автоматически вставлять их при вводе символа апострофа '[[[ {и в существующих документах частенько нарушена парность кавычек #‘‘’’, а впрочем парность таких “” (и даже таких «») также нарушается в некоторых книжках в doc-формате}]]], а также в том, что]]] символ закрывающей одиночной кавычки `’` согласно[https://en.wikipedia.org/wiki/Apostrophe#Unicode ‘RIGHT SINGLE QUOTATION MARK is the preferred character to use for apostrophe’] текущему стандарту Юникод является предпочтительным символом в качестве знака апострофа, и во [[[некоторых]]]многих документах и веб-страницах на английском языке символ `’` действительно используется в качестве апострофа (например так: `Don’t`), в том числе — в ‘сгенерированной документации к Python’[https://docs.python.org/devguide/documenting.html], впрочем в HTML-коде там -‘используется’[[[точнее, [[[совсем ]]]]]]‘ещё недавно использовался’[http://web.archive.org/web/20170711160221/https://docs.python.org/devguide/documenting.html] HTML entity `&#8217;`, а в исходных ‘rst-файлах документации’[https://github.com/python/devguide/blob/master/documenting.rst] используется обычный апостроф ' — так что и html (при использовании `&#8217;`) и rst-файлы [[[в этом случае ]]]можно заключать в `‘`такие`’` кавычки без проблем [и, к [[[счастью/]]]слову, наиболее известные [мне][[[/популярные[[[http://www.typograf.ru/flog/]]]]]] типографы[‘http://www.typograf.ru/, http://rmcreative.ru/typograph/, http://www.artlebedev.ru/tools/typograf/’] (за редким[‘http://www.artlebedev.ru/tools/reformator/’] исключением) вставляют HTML-entity `&rsquo;` [или `&#146;` или `&#39;` или `&#8217;`], а не непосредственно сам символ закрывающей кавычки `’`, а если посмотреть на крупнейшие англоязычные новостные ресурсы[[[[http://www.ebizmba.com/articles/news-websites <- google:‘larges news sites’]]]], то можно заметить, что [[[-‘практически везде’]]]на ‘многих из них’[‘news.google.com, cnn.com, abcnews.go.com, bbc.com’] в качестве апострофа используется просто символ апострофа `'` (вопреки[[[ неразумной[‘как минимум потому, что все задачи (включая правильное отображение апострофа) должны решаться на том уровне, на котором это наиболее целесообразно; и заставлять ВСЕ сайты в Интернете преобразовывать символ апострофа в одиночную закрывающую кавычку — абсурд; если уж так хочется, то можно сделать это один раз на уровне браузеров (например, посредством CSS-свойства {по умолчанию для текста во всех тегах, кроме pre и code, символ апострофа отображается как закрывающая одиночная кавычка}, определяющего как отображать символ апострофа `'`)’] [на мой взгляд]]]] рекомендации Unicode Consortium)[[[и Unicode Consortium'у следует[?], ‘как я считаю’[‘не то, чтобы я продвигаю пк-разметку, я просто за здравый смысл — посмотрите как много ввели в Unicode символов похожих внешне, но различных по смыслу, а тут вдруг решили [просто из-за внешнего сходства?] сэкономить и задействовать символ парной кавычки в качестве апострофа[[[{и привело это к тому, что в Chrome и Firefox при поиске символа ' находятся также ‘ и ’ ...даже не знаю, плохо это или хорошо ☺☻}]]]’], перестать рекомендовать закрывающую кавычку в качестве [предпочтительного символа для] апострофа, а символу апострофа следует вернуть его изначальное/оригинальное[https://en.wikipedia.org/wiki/Apostrophe ‘Many earlier (pre-1985) computer displays and printers rendered the ASCII apostrophe as a typographic apostrophe’] отображение до 1985 года (кроме шрифтов для программирования :)(: то, как выглядят кавычки ‘’ и апостроф ' в шрифте Courier New[http://terkel.jp/archives/2009/11/courier-courier-new-and-consolas/] я считаю наиболее правильным/приемлимым вариантом/способом отображения этих символов в программных исходных текстах)]]]], но если есть такая необходимость[[[[‘откровенно говоря, я такой необходимости не вижу, так как никто не набирает на клавиатуре непарную одиночную закрывающую кавычку, а набирают символ апострофа, который и имеет смысл использовать в качестве апострофа (небольшое [[[проблема/]]]затруднение возникает только при вставке текста со стороннего ресурса в пк-текст)’]]]], то пк-разметка позволяет вставить непарную открывающую `‘` и закрывающую `’` кавычку: так`` `‘` ``[[[’]]]или так #‘'‘’’ (смотри ‘Дополнительные возможности форматирования. "Сырой"\Raw HTML’[https://pqmarkup.github.io/ru/syntax])[[[или так: ‘спо[[[‘]]]’йлер’{...}, т[‘те[[[‘]]]’кст’]]]].
Ещё один минус [символов кавычек `‘` и `’`] — ‘[[[некрасивость/]]]неоднозначность’[‘трудно определить/различить с первого взгляда открывающую и закрывающую кавычку’] отображения символов `‘` и `’` во [[[некоторых/]]]многих популярных шрифтах. В частности, в Consolas, используемом в GitHub и Bitbucket. И вообще, символы парных кавычек в разных шрифтах [[[рисуются/]]]выглядят по-разному (в том числе и в моноширинных шрифтах для программирования):
Р‘https://habrastorage.org/webt/59/ca/ec/59caec0c17a1e634312422.png’[[[archived:{[http://web.archive.org/web/20171118111418/https://hsto.org/webt/59/ca/ec/59caec0c17a1e634312422.png][http://archive.li/WJ8t7][http://www.webcitation.org/6v4470kfo][https://megalodon.jp/2017-1122-1222-07/https://habrastorage.org:443/webt/59/ca/ec/59caec0c17a1e634312422.png]}]]][[[
90%
20pt 12pt
‘ ’ — Tahoma
‘ ’ — Verdana
‘ ’ — Courier New
‘ ’ — Consolas
‘ ’ — Times New Roman
‘ ’ — Arial
‘ ’ — Calibri
]]]
[На мой взгляд, это просто показывает, что в целом отсутствует чёткое/однозначное представление о том, как должны выглядеть эти символы[[[у создателей этих шрифтов не было чёткого представления о том, как должны выглядеть символы одиночных парных кавычек[[[ в шрифте для программирования]]]]]].]
(Кстати, на Хабре[[[, по счастливой случайности,]]] символы одиночных парных кавычек отображались ‘вполне приемлимо’[‘под этим я подразумеваю возможность легко однозначно определить/отличить символ открывающей кавычки от закрывающей’] (по крайней мере, в Windows) за счёт использования Verdana для основного текста и ‘Courier New’[‘так как Menlo и Monaco не установлены на большинстве компьютеров’] для кода, но ‘несколько месяцев назад’[‘я обнаружил это 15 сентября 2017 [точнее определить можно через web.archive.org]’] шрифт для основного текста статей поменяли на Arial, из-за чего пришлось немного подправлять статью — заменять ‘ и ’ на `‘` и `’` (в pq:`` `‘` ``[[[’]]]и ''‘‘<code>`’`</code>’').)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment