Я не могу объяснить, откуда пришла идея такого языка разметки, но то, что получилось в итоге — весьма… занятно.

Не слишком-то рассчитываю на широкое практическое применение этой штуки, но некоторые идеи, использованные в этом языке разметки, вполне могут дать пищу для размышлений и как-то поспособствовать развитию других существующих или новых языков.

Итак, перейду к описанию самого языка. [Если кто-то вдруг не понял, о чём вообще идёт речь, то к облегчённым языкам разметки относятся Markdown, BBCode, вики-разметка и т.п.]

Данная разметка основана на одиночных парных кавычках — символах и (вопрос выбора именно этих символов разъясняется ниже в P.S.), поэтому пока что я остановился на таком варианте названия: пк-разметка или pqmarkup (paired quotes markup).


Как же эти кавычки набирать на клавиатуре?


В ОС семейства Windows можно с помощью программы AutoHotkey назначить глобальные горячие клавиши для ввода любых спец-символов. Чтобы назначить например Alt+9 и Alt+0 для ввода одиночных парных кавычек достаточно добавить такие две строчки в файл-скрипт настроек:
Alt & 9:: SendInput {‘}
Alt & 0:: SendInput {’}

Также в Windows можно использовать без дополнительных настроек сочетание клавиш Alt+0145 (на цифровой клавиатуре) для открывающей кавычки и Alt+0146 для закрывающей (правда, работает это не во всех программах, а также требует определённого состояния NumLock).

Визуально на цифровой клавиатуре эти цифры расположены очень удачно:
----T---¬
¦ 4 ¦ 5 ¦
+---+----
¦ 1 ¦
+---+---¬
¦ 0     ¦
L--------

Похоже на открывающую квадратную скобочку [.
Очень легко запомнить.


Синтаксис пк-разметки


Оформление текста

*‘жирный’ жирный
_‘подчёркнутый’ подчёркнутый
-‘зачёркнутый’ зачёркнутый
~‘курсив’ курсив
Примечание:
Вот так не работает: ~*‘жирный курсив’ (будет просто ~жирный), пишите так: ~‘*‘жирный курсив’’ или так: *‘~‘жирный курсив’’ (так и задумано).

Ссылки и всплывающие подсказки


Ссылка[http://адрес]
Ссылка[http://адрес ‘текст всплывающей подсказки’]
Текст[‘текст всплывающей подсказки’]
Подробнее (больше примеров)
Пк-разметка HTML Как выглядит
[http://address] <a href="http://address">http://address</a> http://address
ссылка[http://address] <a href="http://address">ссылка</a> ссылка
ссылка[https://address] <a href="https://address">ссылка</a> ссылка
‘многословная ссылка’[http://address] <a href="http://address">многословная ссылка</a> многословная ссылка
ссылка[https://address ‘текст всплывающей подсказки’] <a href="https://address" title="текст всплывающей подсказки">ссылка</a> ссылка
текст[‘текст всплывающей подсказки’] <abbr title="текст всплывающей подсказки">текст</abbr> текст


Заголовки, картинки, цвет и таблицы

Н (русская) H (английская) Название заголовка\Header
Р (русская) P (английская) Рисунок\Picture [почему не I(image)]
С (русская) C (английская) цвет(Свет)\Color
Т (русская) T (английская) Таблица\Table
Примеры:
Заголовок — Н‘Название заголовка’
Картинка — Р‘http://адрес_картинки’
Текст красным цветом — С(#фф0000)‘текст’
Подробнее (больше примеров)
Пк-разметка HTML Как выглядит
Заголовки\Headers
H‘заголовок’ <h3>заголовок</h3>

заголовок

H(0)‘заголовок’
H(1)‘заголовок’ <h2>заголовок</h2>

заголовок

H(+1)‘заголовок’
H(-1)‘заголовок’ <h4>заголовок</h4>

заголовок

Изображения/картинки\Pictures
P‘https://.../blue_circle.png’ <img src="https://.../blue_circle.png" />
P‘https://.../blue_circle.png’[http://address] <a href="http://address"><img src="https://.../blue_circle.png" /></a>
P‘https://.../blue_circle.png’[‘текст всплывающей подсказки’] <img src="https://.../blue_circle.png" title="текст всплывающей подсказки" />
P‘https://.../blue_circle.png’[http://address ‘текст всплывающей подсказки’] <a href="http://address" title="текст всплывающей подсказки"><img src="https://.../blue_circle.png" /></a>
Цвет текста
Цвет задаётся в формате #ККЗЗСС (Красный, Зелёный, Синий) посредством шестнадцатеричных цифр (можно использовать кириллицу: абсдеф/АБСДЕФ является аналогом abcdef/ABCDEF) или в формате КЗС посредством цифр от 0 до 8.
С(#ff0000)‘красный текст’ <span style="color: #ff0000">красный текст</span> красный текст
<font color="#ff0000">красный текст</font>
С(800)‘тоже красный текст’ <span style="color: #FF0000">тоже красный текст</span> тоже красный текст
<font color="#FF0000">тоже красный текст</font>
С(000)‘чёрный текст’ <span style="color: #000000">чёрный текст</span> чёрный текст
<font color="#000000">чёрный текст</font>
С(4)‘серый текст’ <span style="color: #808080">серый текст</span> серый текст
<font color="#808080">серый текст</font>
С(-880)‘текст на жёлтом фоне’ <span style="background-color: #FFFF00">текст на жёлтом фоне</span>
Таблицы
Т‘
Н‘‘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>
    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>
    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>
1 2
3
4
5 6 7



Комментарии


[[[комментарий/контейнер для воды (:]]]


Полное описание синтаксиса форматирования.



(Если кому интересно, вот немного истории выбора тегов [для таблиц])
Изначально я планировал альтернативный вариант задания тегов. Вот такой:
[[H]Header/Заголовок[-H]]
или
[[H]Header/Заголовок[-]]
или
[[H]Header/Заголовок]

Соответственно, таблицы задавались тегом [[T]...]
Разделитель столбцов был таким — []
Разделитель строк был таким — [[]]

Пример таблицы:
[[Т]
A[]B[]C
[[]]
1[]2[]3
[-Т]]
или так:
[[Т]
[[]]A[]B[]C
[[]]1[]2[]3
[-Т]]
(Закрывающий тег [-Т] можно опустить.)

Но потом я вспомнил, что несколько вариантов выбора для одного и того же форматирования — это то, что мне не нравится в Markdown (например: __так__ или **так**), и я решил, что оставлять два варианта форматирования в пк-разметке (~‘...’ и [[~]...]) будет неправильно. А значит, имеет смысл оставить только одну форму записи — с кавычками ‘’, так как она менее конфликтующая и является первой/основной идеей, положившей начало этой разметки текста {а то, что набирать символы кавычек и непривычно — я считаю, это не так страшно, так как [с моей точки зрения] важнее читаемость разметки и её когнитивные характеристики (легко понять/запомнить правила разметки, легко читать/воспринимать размеченный текст), а также снижение вероятности возникновения конфликтов (когда простой текст или формула [ошибочно/]ненамеренно трактуется как разметка) и избежание необходимости что-то экранировать (а то ведь часто можно и пропустить/не заметить такие ошибки — когда размеченный текст преобразовался немного не в то, что задумывалось)}.

Определившись с выбором в пользу кавычек, сначала я хотел сделать такой разделитель строк — ‘’ (по аналогии с []), но быстро одумался (ведь тогда возникает проблема с пустыми ячейками в самой таблице) и пришёл к нынешней форме записи:
Т‘
‘‘A’ ‘B’ ‘C’’
‘‘1’ ‘2’ ‘3’’

или так:
Т‘‘
‘A’ ‘B’ ‘C’
’‘
‘1’ ‘2’ ‘3’
’’

(Разумеется, эта форма записи не самая приятная для набора и я немало думал над тем, возможно ли её как-то упростить (или хотя бы дать возможность альтернативной более простой формы записи для таблиц, как в GitHub Flavored Markdown или в Habrahabr Flavored Markdown [к слову сказать, в большинстве реализаций Markdown не поддерживаются таблицы без заголовков]), но решил остановиться на нынешней форме записи, так как она итак достаточно лёгкая (по сравнению с HTML <table>) и при этом имеет неоспоримое преимущество [перед более простой формой записи] — возможность включать в ячейку таблицы всё что угодно (включая любые другие элементы разметки и даже вложенные таблицы), а также нынешняя форма записи даёт возможность использовать пробелы в начале и в конце строки любой ячейки таблицы (возможность спорная, но может пригодиться для экспорта таблиц баз данных).)

(Если кому интересно, вот история/‘как я пришёл к’ нынешней форме записи для объединения ячеек таблицы)
… не, решил спрятать в комментарий и не включать в статью, а если кому это и правда интересно, тогда смотрите исходник статьи.

Исходник данной статьи написан на пк-разметке. Преобразован к формату habrahabr HTML посредством реализации на Python (c флагом командной строки --habrahabr-html).

P.S.
Причины (впрочем, достаточно субъективные), почему я выбрал именно символы ‘’ (а не `? или, скажем, «» или “”):

  1. Они достаточно приятно выглядят (в соответствующем шрифте [например, Courier New]). На мой взгляд, лучше, чем «» или ‹›.
  2. Они идут подряд друг за другом в любой кодировке (в отличие от `? или «» или ‹›) [также как и “”].
  3. Почему не “” — в русских текстах парным символу является (Экранная типографика. Кавычки).
  4. А ещё мне коды[/годы] этих символов нравятся...
    201? и 201?

Один существенный минус символов кавычек и в том, что символ закрывающей одиночной кавычки согласно текущему стандарту Юникод является предпочтительным символом в качестве знака апострофа, и во многих документах и веб-страницах на английском языке символ действительно используется в качестве апострофа (например так: Don’t), в том числе — в сгенерированной документации к Python, впрочем в HTML-коде там используетсяещё недавно использовался HTML entity &#8217;, а в исходных rst-файлах документации используется обычный апостроф ' — так что и html (при использовании &#8217;) и rst-файлы можно заключать в такие кавычки без проблем [и, к слову, наиболее известные [мне] типографы (за редким исключением) вставляют HTML-entity &rsquo; [или &#146; или &#39; или &#8217;], а не непосредственно сам символ закрывающей кавычки , а если посмотреть на крупнейшие англоязычные новостные ресурсы, то можно заметить, что на многих из них в качестве апострофа используется просто символ апострофа ' (вопреки рекомендации Unicode Consortium)], но если есть такая необходимость, то пк-разметка позволяет вставить непарную открывающую и закрывающую кавычку: так `‘` или так '‘’ (смотри Дополнительные возможности форматирования. "Сырой"\Raw HTML).

Ещё один минус [символов кавычек и ]неоднозначность отображения символов и во многих популярных шрифтах. В частности, в Consolas, используемом в GitHub и Bitbucket. И вообще, символы парных кавычек в разных шрифтах выглядят по-разному (в том числе и в моноширных шрифтах для программирования):

[На мой взгляд, это просто показывает, что в целом отсутствует чёткое/однозначное представление о том, как должны выглядеть эти символы.]

(Кстати, на Хабре символы одиночных парных кавычек отображались вполне приемлимо (по крайней мере, в Windows) за счёт использования Verdana для основного текста и Courier New для кода, но несколько месяцев назад шрифт для основного текста статей поменяли на Arial, из-за чего пришлось немного подправлять статью — заменять ‘ и ’ на и (в pq: `‘` и `’`).)

Комментарии (64)


  1. Lure_of_Chaos
    03.02.2018 19:23
    +2

    Думал, апрель наступил. Сверился с календарем — нет, не апрель — февраль!


  1. SDKiller
    03.02.2018 20:59
    +2

    Зачем?


    1. pda0
      03.02.2018 22:20

      14_конкурирующих_стандартов_xkcd.jpg


    1. Maccimo
      03.02.2018 23:34
      +1

      В каждой области человеческой деятельности должен быть свой Brainfuck.
      Даже в разметке.


      1. san-smith
        04.02.2018 17:36

        Если такой язык не самоцель, а средство для разминки ума или проверки идей, то почему бы и нет?
        Вот, например, ещё один «Brainfuck» от разметки.


        1. alix_ginger
          04.02.2018 18:09

          Ну для эзотерики что эта статья, что с русифицированным HTML — недостаточно витиевато


          1. san-smith
            04.02.2018 18:16

            Там цель была немного в другом — проверить, насколько хорошо разобрался с питоном. А язык делался just for fun, на реальное использование (и даже эзотерику) не претендуя.


  1. Skykharkov
    03.02.2018 21:27
    +3

    Вот, кстати, тоже подумал — "Зачем?" А потом мгновенно пришел ответ — "Потому что!". И это правильно, на самом деле. Почему бы и нет. Просто так.


    1. Lure_of_Chaos
      03.02.2018 22:51
      -1

      Шоб було?


      1. san-smith
        04.02.2018 17:39
        -1

        Просто потому что может.
        image


    1. KvanTTT
      04.02.2018 21:09

      Почему бы и нет.

      Почему бы и да.


  1. ncuxomozg
    03.02.2018 22:36

    qw'Напоминает один старенький язык программирования'


    1. Lure_of_Chaos
      03.02.2018 22:54

      Но там хотя бы кавычки клавиатурные. А постоянно набирать неклавиатурные символы — мазохизм.
      А так, кроме этого, вполне себе ничего.


      1. ZyXI
        03.02.2018 22:59

        Мазохизм только если вы не знаете, как настроить окружение. Или не можете себе этого позволить (к примеру, потому что компьютер не ваш).


        1. VolCh
          04.02.2018 01:09

          Или не хотите настраивать кучу всего каждый раз под новым аккаунтом. Как-то с возрастом всё реже хочется тратить время на настройки под себя, особенно в ОС, где сложно эти настройки сложить в пару текстовых патчей.


          1. ZyXI
            04.02.2018 01:17

            Это относится к варианту «не знаете, как настроить». Нужные действия вполне можно автоматизировать, если вы действительно часто меняете аккаунты.


            1. Zenitchik
              04.02.2018 01:24
              +1

              Нет, это относится к варианту «не настолько критично, чтобы вникать». В молодости я тоже не знал, как настроить, но был энтузиазм и я узнавал. А теперь — влом.


              1. ZyXI
                04.02.2018 01:36

                То, что вы только что сказали — «вы не знаете, потому что это для вас не критично». То, что у вас недостаточно мотивации, чтобы узнать как автоматизировать настройку, не изменит того, что задача решаема, но вы не знаете как. Это никак не отдельный вариант.


                1. nekt
                  04.02.2018 03:54

                  автоматизировав настройку под ХП мне почему-то пришлось делать все ручками под 10ку…


                1. Zenitchik
                  04.02.2018 16:41
                  +1

                  В принципе, согласен. Я имел в виду, что незнание само по себе причиной не является. Нужна ещё лень.


            1. tyomitch
              04.02.2018 10:41

              Настроить горячие кнопки для настройки горячих кнопок?
              xzibit.jpeg


        1. Lure_of_Chaos
          04.02.2018 18:15

          *побежал менять кавычки* alt+ комбинации все равно неудобно набирать одной рукой.
          и вообще, как бы ни говорили про эпоху Юникод, но я из эпохи ASCII и подозрителен к любым символам, у которых код больше 128


          1. sasha1024
            04.02.2018 18:19

            Так речь же шла о том, чтобы настроить окружение, а не набирать одной рукой.
            У Вас даже в стандартной кириллической раскладе — уже? бо?льшая часть символов не ASCII (код ? 128).


    1. vsespb
      04.02.2018 11:40

      Молодной, развивающиийся и перспективный язык программирования


      1. alextretyak Автор
        04.02.2018 12:03

        А о каком языке идёт речь?


        1. ncuxomozg
          05.02.2018 14:31
          +1

          perl


      1. KvanTTT
        04.02.2018 21:11

        Еще амбициозный.


  1. alextretyak Автор
    03.02.2018 23:58

    Замечание: на Хабре присутствует такой баг — кнопка Предпросмотр на страницах habrahabr.ru/sandbox/add и habrahabr.ru/topic/add работает по-разному! Точнее, галочка «Отключить автоматические переносы строк и создание ссылок» просто не работает при добавлении статьи в Песочницу.

    (О таком, безусловно, нужно писать прежде всего в баг-трекер, но решил оставить комментарий тут как оправдание несколько неказистого оформления статьи — получилось нечто среднее между тем, как поправил оформление статьи модератор и тем как я приглядывался к Предпросмотру [а он оказывается неправильный...] и старался получить такой вид статьи, который хотелось).


    1. tyomitch
      04.02.2018 10:43

      Вы в любой момент можете отредактировать пост, исправив переводы строк на своё усмотрение. Даже после вмешательства модераторов.


  1. Pongo
    04.02.2018 00:54

    Сперва подумал под парными кавычками понимается форматирование как в WackoWiki.

    **полужирный**
    //курсив//
    __подчеркнутый__
    --зачеркнутый--
    ##моноширинный##
    >>центрированный<<


    1. janvarev
      04.02.2018 11:14

      Немного оффтопа: именно WackoWiki разметка из всех упрощенных разметок для меня оказалась самой удобной — за счет правила двойных символов. До сих пор использую.


      1. babylon
        04.02.2018 11:57

        Расширение функционала рано или поздно приведет к html или json like разметке.


        1. Lure_of_Chaos
          04.02.2018 18:17

          хватит нам уже этого выводка sgml. скорее, вернемся к md :)


  1. Stalker_RED
    04.02.2018 01:13

    с помощью программы AutoHotkey назначить глобальные горячие клавиши для ввода любых спец-символовa
    Я вам по секрету скажу, можно просто раскладку клавиатуры сменить. В том числе на самодельную.
    Только тс-с-с..!


    1. alextretyak Автор
      05.02.2018 00:42

      Благодарю за ссылку, но на практике использовать для популяризации пк-разметки такую штуку скорее всего никак не получится. Слишком сложно. Должен быть очень простой способ добавить поддержку ввода нестандартных символов, чтобы его могли массово использовать. Желательно умещающийся в один твит.


      Например:


      Установите AutoHotkey.
      Добавьте эти две строчки в файл-скрипт настроек:
      Alt & 9:: SendInput {‘}
      Alt & 0:: SendInput {’}


      или


      Установите Sublime Text 3.
      Установите плагин pqmarkup.


      или


      Установите новый редактор со встроенной поддержкой пк-разметки.
      Для ввода символов парных кавычек ничего настраивать в нём не нужно.


      1. Chamie
        05.02.2018 01:11

        ‘’ — раскладка Бирмана, Alt+Shift+k, Alt+Shift+l.


  1. kloppspb
    04.02.2018 01:32

    Почему-то вспомнилось. Взлетало, взлетало, ни так и не взлетело. Но это было круче лексикона и чирайтера :)


    1. alextretyak Автор
      04.02.2018 04:09

      Посмотрел. Занятно. Но почему не взлетело — вполне очевидно:


      1. Редактирование в "текстовом" режиме только моноширного текста теперь стало совсем неактуально.
      2. Формат сохранения текстовых файлов — своеобразный и скорее не текстовый, а двоичный.
      3. Антивирус [стандартный Windows Defender] на этот редактор ругается (и не только).

      А вот то, что взлетит, мне тоже понятно {за счёт чего — нужно просто много/долго {как минимум, дольше, чем на "неправильные"} смотреть на "правильные" вещи} — нужен микс из:


      1. Sublime Text. (ИМХО, пока что лучший инструмент для кодера/программиста, особенно, любящего вносить свои правки в поведение редактора. Дополнительным открытием для меня стало то, что панель инструментов с красивыми кнопками в редакторе для кода практически и не нужна и что вполне можно обойтись без продвинутого окна настроек посредством грамотной документации и продуманных файлов настроек в удобочитаемом формате (JSON или даже что-то попроще).)
      2. PyCharm. (Прежде всего за отладчик Python.)
      3. Microsoft Visual Studio. (Отладчик C++/C# в студии лучше, чем в PyCharm — советую JetBrains добавить хотя бы отображение многострочных строк.)
      4. Notepad++, Atom и Visual Studio Code. (В плане открытости [исходного кода].)

      Хотя Atom и Visual Studio Code очень хочется исключить из этого списка за то, что их разработчики выбрали "неправильную" (тормозную) платформу.


      1. kloppspb
        04.02.2018 04:55

        Это сейчас, с нынешних высот, понятно. А тогда конкуренция была нехилая. Windows не все НИИ могли оплатить (3.11 для рабочих групп, ага), чирайтер был почти стандартом для набора формул (как и wordperfect). Лексикон ещё пытался взлететь.


        1. Lure_of_Chaos
          04.02.2018 18:50

          и Лексикон почти взлетел


          1. tyomitch
            05.02.2018 11:34
            -1

            Ага, почти. Директор по продажам «Лексикона» возглавила представительство Microsoft в России и СНГ, и стала руководить русификацией MS Word.


      1. jMas
        04.02.2018 10:02

        Хотя Atom и Visual Studio Code очень хочется исключить из этого списка за то, что их разработчики выбрали "неправильную" (тормозную) платформу.

        По этому поводу хочется спорить, потому что перешел на VC исключительно потому что PhpStorm от JetBrains (насколько бы он не был универсальным) постоянно подлагивает. Все относительно.


        1. alextretyak Автор
          04.02.2018 10:11

          А что вы имеете в виду под VC?
          Visual Studio Code или MS Visual C++?

          В плане тормознутости PyCharm (аналогично PhpStorm, т.к. обе эти IDE на одной платформе) — согласен, но лучшего отладчика для Python я не нашёл.

          А как обстоят дела с отладкой PHP в этой «вашей» VC?


        1. Shannon
          04.02.2018 14:45
          +1

          По той же причине тоже перешел на vscode, на моем железе vscode плавнее и отзывчивее работает, плюс последний апдейт на производительность порадовал


      1. slump64
        04.02.2018 13:15

        Хотя Atom и Visual Studio Code очень хочется исключить из этого списка за то, что их разработчики выбрали «неправильную» (тормозную) платформу.


        VS Code во сравнению с Atom тормозит сильно меньше, но тут кое-чего скорее не хватает…


      1. Sirikid
        04.02.2018 16:33
        -1

        лучший инструмент для кодера/программиста (и не только)

        GNU Emacs


  1. Cheater
    04.02.2018 03:49

    Вот так не работает: ~*‘жирный курсив’ (будет просто ~жирный), пишите так: ~‘*‘жирный курсив’’ или так: *‘~‘жирный курсив’’

    ЧТОА? Можно увидеть EBNF вашей замечательной грамматики?


    1. Cheater
      04.02.2018 12:02
      +1

      А, понял, у вас допускаются вложенные pq выражения.

      Это существенная черта языка, странно что вы упоминаете её очень вскользь.

      Не такой уж язык и «облегчённый». Кроме того EBNF всё равно хотелось бы увидеть, иначе непонятны многие вещи, например как вы экранируете спецсимволы.


      1. alextretyak Автор
        04.02.2018 13:06

        допускаются вложенные pq выражения.
        В Markdown также допускается вложенное форматирование (правда, в более ограниченных случаях):
        guides.github.com/features/mastering-markdown:
        _You **can** combine them_

        А почему EBNF, а не ABNF?
        Но в данном случае я руководствуюсь принципом:
        https://www.youtube.com/...:
        "Code is Law"
        То есть, код базовой реализации определяет/задаёт точную спецификацию оригинальной разметки.

        И для Markdown (и даже CommonMark), насколько мне известно, также нет официальной BNF/EBNF/ABNF (хотя есть неофициальные, например github.com/Domysee/MarkdownEbnf).

        непонятны многие вещи, например как вы экранируете спецсимволы.
        Посредством Дополнительные возможности форматирования. «Сырой»\Raw HTML возможно вставить произвольный HTML, в том числе спецсимволы (как в формате HTML entities, так и просто в виде символов).
        Но, в отличие от других разметок, в пк-разметке экранировать требуется гораздо меньше спецсимволов, и спецсимволы можно вставлять прямо в код как есть.


  1. kyxap
    04.02.2018 04:14

    Синтаксический диабетик


  1. extempl
    04.02.2018 08:58

    Причины (впрочем, достаточно субъективные), почему я выбрал именно символы ‘’ (а не `? или, скажем, «» или “”):

    А вот я бы как раз выбрал очевидно зеркальные (в подавляющем большинстве шрифтов), независимо от того, идут они подряд или задом наоборот. Как заметили выше, сделать кастомную раскладку — не проблема. При частом использовании коды двух символом запоминаются с полпинка (для ненастроенного окружения) и, кроме того, именно за счёт того, что они идут не подряд — сложнее допустить ошибку. А так — они и выглядят почти одинаково (при нормальном размере шрифта а не увеличенном) и за счёт смежных позиций можно легко перепутать.



  1. sasha1024
    04.02.2018 16:48

    1. По стандарту у картинок обязательно должен быть атрибут alt.
      Markdown это вполне решает: ![моя фотография](http://example.com/myphoto.jpg)   >   <img alt="моя фотография" src="http://example.com/myphoto.jpg">. А вот у Вас с этим явная проблема (во-первых, title — не то же самое, что alt, во-вторых, Вы разрешаете не указать title (точнее, не просто разрешаете не указать, Markdown тоже разрешает не указать, а синтаксически оформляете его как что-то «дополнительное»)).
    2. Немозможность вставить в (англ., укр.) текст нормальную кавычку без дополнительных ухищрений — это, ИМХО, ппц. То есть Вы как бы плясали от того, что взяли два символа, которые меньше всего используются в русском тексте. Но:
      1. Вы попали на символы, которые дохрена используются в англ. тексте.
      2. Вы попали на символы, которые не просто дохрена используются в англ. тексте, а очень часто подпадают под автозамену в различных текстовых редакторах. В отличие от, например, Markdown'овских скобочек и пр., текстовые редакторы не относятся к одинарным кавычкам как к чему-то незыблемому и часто неявно меняют их с одних на другие, например LibreOffice и quora.com заменяют U+0027 (He said me 'I don't know!') на U+2018 и U+2019 (He said me ‘I don’t know!’). Т.о. копи-пейст pq-кода через «умный» редактор может его испортить (навставляв несимметричных U+2018 и U+2019).
      3. Я б тогда на Вашем месте вообще уже какие-то неиспользуемые в нормальном тексте специальные Unicode-символы взял (а-ля и ). Но, по-моему, такая идея в любом случае гиблая, потому что, во-первых, надо иметь возможность представить pq-код внутри pq-кода, во-вторых, это фактически возврат в прошлое (см. control characters). Хотя, кто знает, может, история и пойдёт по спирали.

    3. Кстати, как у Вас с возможностью представить неотформатированный текст (исходный код, например)?


    1. sasha1024
      04.02.2018 16:56

      (а-ля и )
      (а-ля ? и ?)


    1. alextretyak Автор
      04.02.2018 21:32

      Кстати, как у Вас с возможностью представить неотформатированный текст (исходный код, например)?

      Дополнительные возможности форматирования. Вставка исходного кода
      Дополнительные возможности форматирования. Отключение пк-форматирования
      Дополнительные возможности форматирования. «Сырой»\Raw HTML


      [P.S. И я не просто выбрал эти символы, я дождался года/кода этих символов, чтобы опубликовать статью именно в этот год (почему не опубликовал статью 1 января 2018? Можно сказать, так получилось, что не было интернета в тот момент времени.).]


  1. alextretyak Автор
    05.02.2018 12:06

    Есть одна достаточно несложная, но актуальная [и, надеюсь, вполне себе интересная] задача — написать преобразователь пк-разметки в Markdown {сразу оговорюсь, что нужно только в одну сторону, а для чего задача — хочу презентации на пк-разметке писать, а готовые тулзы работают либо с Markdown, либо с HTML [и у меня есть такое предположение, что с Markdown работают лучше, чем с HTML]}. Если кто хочет попробовать, просьба ответить на этот комментарий. (Также прошу написать про опыт работы с тулзами вроде remarkjs.com, если у кого был.)

    [P.S. Оригинальную реализацию (преобразователь/конвертер в HTML) pqmarkup.py трогать не хочется, да и незачем, я считаю, нагружать её ещё и Markdown-ом.]


  1. C4H9I
    05.02.2018 14:45

    С помощью такого кода можно усложнить парсинг страниц или мне только это кажется?


    1. alextretyak Автор
      05.02.2018 14:50

      Не хотите попробовать свои силы в реализации задачи, описанной в моём комментарии выше (конвертер в Markdown)?
      Парсить пк-разметку достаточно просто (оригинальная реализация насчитывает всего ~800 строк кода на Python).


  1. olvin_hh
    06.02.2018 05:32

    А чем это лучше того же markdown? И почему бы не использовать уже присутствующие на клавиатуре парные символы — такие, как фигурные скобки? И правда ли нужны именно парные символы?


    1. alextretyak Автор
      06.02.2018 06:13

      А чем это лучше того же markdown?

      • Простые, логичные, легко запоминающиеся правила разметки.
      • Больше возможностей (подчёркивание, цвет текста, выравнивание, таблицы без заголовков, объединение ячеек в таблицах).
      • Лучше поддержка вложенности элементов разметки.
      • Проще реализация (всего ~800 строк кода на Python).

      И почему бы не использовать уже присутствующие на клавиатуре парные символы — такие, как фигурные скобки?

      Фигурные скобки уже используются в пк-разметке для древовидного выражения мыслей (: древопись :).
      Почему не круглые/квадратные/угловые скобки? Не знаю, внешне (в шрифтах Tahoma, Verdana, Courier New) парные кавычки имхо подходят лучше, чем скобки.


      И правда ли нужны именно парные символы?

      Ну, они дают возможность неограниченной вложенности.

      https://en.wikipedia.org/wiki/M4_(computer_language):
      Unlike most languages, strings in m4 are quoted using the backtick (`) as the starting delimiter, and apostrophe (') as the ending delimiter. The use of separate starting and ending delimiters allows for the arbitrary nesting of quotation marks in strings…

      В отличие от большинства других языков, строки в m4 берутся в кавычки используя символ обратной кавычки (`) в качестве открывающей кавычки, и символ апострофа (') в качестве закрывающей. Использование отдельных символов для открывающей и закрывающей кавычек предоставляет возможность неограниченной вложенности кавычек внутри строк...
      Речь здесь идёт про недостаток строк в непарных кавычках (например "таких") в том, что внутрь строки нельзя вкладывать другие строки, например:
      system("mkdir "имя папки с пробелами"").

      Так не работает (и не может работать).


      А так может работать, если язык программирования и ОС поддерживают парные кавычки:


      system(‘mkdir ‘имя папки с пробелами’’).


      1. Chamie
        06.02.2018 13:44

        А как в вашей разметке сделать так?

        <b>Очень<i>длинное</b>слово</i>.


        1. roman_kashitsyn
          06.02.2018 13:57

          У вас невалидный HTML, тэги должны правильно вкладываться. Преобразуем в валидную форму, дальше очевидно.


          <b>Очень</b><i><b>длинное</b>слово</i>


          1. Chamie
            07.02.2018 12:38
            +1

            Очевидно, как преобразовать HTML в эту разметку, но я на HTML написал только чтобы было понятно. Логически же если мне нужно выделить кусок абзаца, то, выходит, я не могу просто поставить в тексте начало и конец выделения.
            P.S. В HTML, кстати, такая разметка хоть и считается невалидной, но работает.


      1. alextretyak Автор
        06.02.2018 16:07

        К пункту "Лучше поддержка вложенности элементов разметки." хочу привести такой пример.

        Хотя в Markdown допускается вложенное форматирование, например так:

        guides.github.com/features/mastering-markdown:
        _You **can** combine them_
        _Какой-либо **жирный текст** внутри курсива_

        Оно более ограниченно и не сработает в случае когда захочется например все элементы списка выделить курсивом.

        Так код:
        *
        1. Первый элемент списка
        2. Второй элемент списка
        *

        В Markdown отображается как:
        •  

        1. Первый элемент списка
        2. Второй элемент списка

        •  


        В то время как код на пк-разметке:
        ~‘
        1. Первый элемент списка
        2. Второй элемент списка

        Выводится корректно:

        1. Первый элемент списка
        2. Второй элемент списка