Last active
January 30, 2021 22:09
-
-
Save alextretyak/4d0cbab44fd2605febcbbd870f997b2f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[[[ | |
[[[Поток: Разработка]]] | |
[[[Хабы: 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’], а также требует определённого состояния]]] во многих программах чтобы это работало требуется включённый Num Lock). | |
‘Визуально на цифровой клавиатуре эти цифры расположены очень удачно:’{ | |
``` | |
┌───┬───┐ | |
│ 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://sourceforge.net/p/pqmarkup/code/ci/default/tree/docs/images/blue_circle.png?format=raw’’’ | |
‘‘0‘P‘https://.../blue_circle.png’[http://address]’’ ‘<a href="http://address"><img src="https://.../blue_circle.png" /></a>’ ‘P‘https://sourceforge.net/p/pqmarkup/code/ci/default/tree/docs/images/blue_circle.png?format=raw’[http://address]’’ | |
‘‘0‘P‘https://.../blue_circle.png’[‘текст всплывающей подсказки’]’’ ‘<img src="https://.../blue_circle.png" title="текст всплывающей подсказки" />’ ‘P‘https://sourceforge.net/p/pqmarkup/code/ci/default/tree/docs/images/blue_circle.png?format=raw’[‘текст всплывающей подсказки’]’’ | |
‘‘0‘P‘https://.../blue_circle.png’[http://address ‘текст всплывающей подсказки’]’’ ‘<a href="http://address" title="текст всплывающей подсказки"><img src="https://.../blue_circle.png" /></a>’ ‘P‘https://sourceforge.net/p/pqmarkup/code/ci/default/tree/docs/images/blue_circle.png?format=raw’[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 `’`, а в исходных ‘rst-файлах документации’[https://github.com/python/devguide/blob/master/documenting.rst] используется обычный апостроф ' — так что и html (при использовании `’`) и 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 `’` [или `’` или `'` или `’`], а не непосредственно сам символ закрывающей кавычки `’`, а если посмотреть на крупнейшие англоязычные новостные ресурсы[[[[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