Pull to refresh

Comments 155

Насчет ссылок достаточно спорно, хотя согласен, что [] есть не в каждой раскладке.
И по встраиванию тех же изображений, в MD не хватает нормальной настройки атрибутов, не говоря уже о попытках обернуть картинку в figure, чтобы приделать нормальное название. Хорошо бы этот момент учесть.

Если попытаться засунуть в язык всё на свете, то он уже не будет легковесным. Подпись к картинкам вполне можно сделать и обычнымпараграфом. В легковесный язык имеет смысл вносить лишь те штуки, без которых ну совсем никак.

но ломается семантика. Если md будет конвертироваться в html то без этого никак.

Как только в HTML появится теги SARCASM, IRONY и HATE поговорим о семантике, а пока что настоящая семантика есть лишь в RDF.

настоящая она там или нет — не знаю, есть тег figure который объединяет изображение и подпись к нему. Следующий абзац как подпись к картинке как-то не кошерно.

Только идея про таблицы понравилась. Про довод что символов нет в английской раскладке большинству плевать. Читаемость важнее, например > удобнее чем " для цитирования имхо.


Отзывы огонь!

Набирать угловые скобки не удобно. Читаемость — вопрос привычки.

Удобство набирания угловых скобок — тоже вопрос привычки

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

Поддерживаю. В качестве облегчения страдания от постоянных переключений,
я забиндил на клавишу Alt переключение раскладки и на клавишу Win (while pressed) временную её смену. Стало чуть проще, хотя и к этому варианту тоже нужно привыкнуть.

угловая скобочка есть лишь в английской раскладке.

Ложное заявление

При наборе данного комментария русская раскладка не была переключена ни одного раза (]>_<[)
это как так? что за магия?) подскажите

Под виндой (любой) есть Alt+0XXX на цифровой клавиатуре.
Работает всегда, даже при наборе пароля при входе в систему.

Число нажатий получится не меньше, но ещё и номера символов надо запомнить.

Ну а круглые, там где и обычно
image
Вот когда у большинства будет продукция Apple (можно садиться писать сценарий фильма ужасов), тогда можно будет тыкать в специальные кнопочки. А пока у большинства более стандартные клавиатуры.

Ничего сложного — тут широкое тире, если что расширенная раскладка.


Всё э́то сообще́ние на́брано без сме́ны раскла́дки і каких-либо виндовых таблиц смайликов.


(]>_<[)

Ну так возьмите какую-нибудь расширенную раскладку с третьим/четвёртым слоями на альтГР. Сразу появятся и [], и {}, <>, и |, и даже "экзотика" вроде ≠, ±, «».

В любом *nix можно смонстрячить свои раскладки, вплоть до аккордных.

Вы мне сейчас предлагаете операционку поменять, чтобы маркдаун удобнее вводить?

Ни в коем случае! Пользуйтесь MT!
Ну вы ведь придумали еще один маркдаун вместо того, чтобы найти себе удобный редактор или решить вопрос с переключением раскладки. Можно было бы сделать другую раскладку, чтобы символы были. Можно и ОС поменять, если так сложно язык переключить.

В Windows я использую AutoHotKey. Вот для примера скрипт, переключающий раскладки капслоком и эмулирующий раскладку Бирмана (base64, потому что там внутри хардкорный юникод): https://pastebin.com/raw/mBdHYpLB

Спасибо, попробую, когда совсем приспичит. Хотя скриптовый язык у этой программы… своеобразный.

Набирать цифры с альтом — такое себе удовольствие.

Вопрос привычки, не более. Тем более, что вопрос ведь не в абсолютном, а относительном удобстве (имеется в виду, относительно велосипедных имплементаций маркдаунов).

Циферки люди вводят куда чаще редактирования маркдауов.

Во-первых, всё зависит от области. Я, к примеру, цифры использую редко. А даже когда использую, частенько набираю на нампаде.


Во-вторых, раскладка по ссылке далеко не единственная. Можете поискать сами (надеюсь, в гугле не забанили?) или даже соорудить самостоятельно.


Смысл всей этой дискуссии в том, что спецсимволы на нелатинских раскладках вполне себе есть, и использовать их отсутствие на наиболее популярном ЙЦУКЕНе как аргумент для своего велосипеда не стоит.

Когда есть нампад-то конечно "цифры не нужны".


Мне не очень импонирует идея менять раскладку на всех девайсах, что попадают мне в руки и плеватся в тех случаях, кода я не могу изменить дефолтную раскладку на ту, к которой я привык.

А компилятор своего велосипеда таскать между всеми девайсами импонирует?

Компилятор живёт в вебе.

Попробуйте типографскую раскладку Ильи Бирмана, там и скобки есть, и тире, и кавычки-ёлочки, и ещё много чего полезного

Если переключение закладки забинжено на одну кнопку (капс, например) переключение раскладки перестаёт быть болью и чисто технически не отличается от обычного набора текста.

Ну вот, например, давайте посчитаем число действий на ввод |


LeftShift down
LeftShift up
LeftShift down
| down
LeftShift&| up
RightShiftDown
RightShift up

вместо


LeftShift down
! down
LeftShift&! up

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

Мне кажется, подобные языки разметки лучше всего реализовывать сразу как плагины к pandoc. Тогда почти автоматом появляются конвертеры в/из почти всего, что можно придумать.

Вот я и хотел сказать — все эти MD, вики-разметки и т.д. рендерятся все равно в HTML. Но сразу на HTML, почему-то, никто писать не хочет

Потому что не удобно писать хтмл.
Ну, в $mol есть рендер маркдауна безо всяких хтмл.

> не удобно писать хтмл

Обилие всяких маркдаунов как-бы намекает, что и на них не очень.
Что такое $mol — не знаю.

Двойной пробел в середине строки — это очень большой wtf. И совсем не понятно где оно заканчивается (у нас не может быть двойного пробела или восклицательного знака в коде?).


В целом markdown'овая отбивка для code отлична. Там даже есть место для указания каким парсером подсвечивать.


Насчёт таблиц — я не видел удачных вариантов, и ваш тоже не очень, увы.

Двойные пробелы в инлайн коде — вещь более редкая, чем бэктики.

В каких языках программирования используются бэктики?

В самом популярном, например.

SQL инструкции генерятся с ними.
Генерятся — да, но без них вполне можно обойтись без неудобств
А чего автора то минусите? Неужели так часто бы в инлайн коде двойным пробелом пользовались? Бэктики и правда заслуживают большего внимания.

Я, не минусю, я комментирую.

Ну теперь популяризуйте. Что-б включили поддержку в том-же pandoc
Эта картинка, с сайта pandoc
лучше
image

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

Попробуйте почитать в маркдауне таблицы с более чем парой слов в ячейках. Это совершенно нечитаемое месиво получается.

Да, с таблицами в маркдауне не очень. Но и предлагаемый вариант, по-моему, не лучше.

Это только кажется, пока не распробуете.

Очевидно, что ни один язык разметки, включая мой любимый MediaWiki, не даст возможности удобно читать таблицы. С этим нужно просто смириться и рисовать таблицы либо глядя в инструкцию, либо в визреде. Например, я для таблиц всегда переключаюсь в визред.

Всё понравилось, кроме последних двух пунктов про \ в ссылках и два пробела.
* Со слешами в ссылках возникает визуально неприятный забор типа \\/\//\\ (субьективно).
* Два пробела очень сложно увидеть, особенно если шрифт в редакторе не моноширинный.
Тут вполне реально придумать более лучшие варианты, если ещё поднапрячься.


Например, если развивать идею с удвоенными символами, почему бы не использовать ;; ,,?


Еще можно использовать %%. Такое сочетание символов иногда используется в текстах в смысле "проценты", но этим можно пренебречь. Символ % действительно используется в гиперссылках, но удвоенный вроде не встречается.


Ещё осталось неиспользованным ::, но оно будет конфликтовать с кодом на C++, Rust, и т.п.


Если конкретно, то я бы предложил использовать для инлайна либо \\ (можно провести некоторую смутную аналогию с эскейпингом в строковых литералах), либо ,, (должно выглядеть красивее и визуально похоже на кавычки, но путаницы при этом вызывать не должно).


Для ссылок можно попробовать использовать %%. В качестве разделителя при этом сойдёт хотя бы и ;;
%%Ссылка;;https://ru.wikipedia.org/wiki%2F%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%%
Признаю, что выглядит не фиг лучше, чем \\, но как вариант.

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

Если шрифт не моноширинный, то поедут ещё и все отступы в преформатированных блоках. По факту шрифт в редакторах для редактирования легковесных форматов обязан быть моноширинным.


Например, если развивать идею с удвоенными символами, почему бы не использовать ;; ,,?

Потому, что порой надо выводить именно эти (в том числе и удвоенные) символы: ;;, ,,. Особенно при описании спецсимволов такого вот легковесного формата.


я бы предложил использовать для инлайна либо \

Какая-нибудь регулярка в таком случае будет выглядеть так: \\/\t\\\\/\\ вместо /\t\\\\/


%%Ссылка;;https://ru.wikipedia.org/wiki%2F%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%%

В этом случае у пользователя будет рябить в глазах от процентов, от чего он будет чаще ошибаться, и ему сложнее будет искать границы ссылки, особенно, когда идёт несколько ссылок подряд.

Мне тоже не нравится идея с пробелами, если честно. Мне этого «добра» и в YAML-ах хватает.

А что там в ямлах с пробелами?

Очень плохо будет, если ошибёшься с их количеством, или поставишь вместо пробелов tab. Вон, редхат аж целую статью выкатил.
10 советов для хейтеров YAML.

Пробелы выглядят спорным решением, но в целом неплохо, хотя я все эти упрощённые языки не жалую — у всех свои потребности и многим чего-то будет не хватать. Я бы хотел подобный читаемый синтаксис, который один к одному конвертируется а docbook, но понятно что это только мечта.

Так что мешает взять и сделать?

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

Так-то MarkedText у меня тоже регулярками парсится. Вот, например, регулярка, что разбивает текст на блоки:


$hyoo_marked_flow == /^(?:(--\r?\n)|((?:((?:=){1,6})) (?:((?:[\s\S]){1,}?))\r?\n)|((?:(?:((?:  ){0,}?))(?:(-|\+)) (?:((?:[\s\S]){1,}?))\r?\n){1,})|((?:(?:(")) (?:((?:[\s\S]){1,}?))\r?\n){1,})|((?:(?:((?:  ){0,}?))(?:(!)) (?:((?:[\s\S]){1,}?))\r?\n){1,})|((?:  (?:(  |\+\+|--|\*\*))(?:((?:[\s\S]){1,}?))\r?\n){1,})|((?:((?:[\s\S]){0,}?))\r?\n))/gmu

А эта ищет инлайн форматирование:


$hyoo_marked_line === /(?:((?:(\*\*))(?:((?:[\s\S]){1,}?))\*\*)|((?:(\/\/))(?:((?:[\s\S]){1,}?))\/\/)|((?:(\+\+))(?:((?:[\s\S]){1,}?))\+\+)|((?:(--))(?:((?:[\s\S]){1,}?))--)|((?:(  ))(?:((?:[\s\S]){1,}?))  )|((?:(\\\\))(?:(?:((?:[\s\S]){1,}?))\\){0,1}(?:((?:[^\\]){0,}?))\\\\)|((?:(""))(?:(?:((?:[\s\S]){1,}?))\\){0,1}(?:((?:[^\\]){0,}?))""))/gu

Все это неподдерживаемо даже для простых случаем, надо грамматику описать, bnf какой.

Когда элементы могут вкладываться друг в друга неограниченно и в разных комбинациях с регексами будет невозможно

Да всё там нормально со вложениями, если синтаксисы ортогональны. Единственное ограничение — инлайн форматирование не может быть внутри такого же. Но кейсы, где бы это было необходимо, мне на ум не приходят.

BNF для маркдауна — это сложно, но можно парсер написать. Регулярки, конечно, не дело.

Почему? Есть всякие расширенные версии и умные парсерогенераторы, я не спец, но помню что автор одного из таких утверждал что его решение может распарсить всё что напишете.

В Markdown очень много заморочек с пробелами, переносами строк и другими контекстыми вещами — для правильного парсера нужно прописывать много сторонней логики, а она плохо вписывается в КС грамматику. Есть еще статья Why isn't there a formal grammar for Markdown?, но я с ней не совсем согласен.


Хотя в настоящее время я пробую сделать грамматику Markdown для ANTLR, посмотрим что получится.

Посмотрел — это просто еще один генератор парсеров на основе EBNF грамматик. С парсингом Markdown у него будут такие же проблемы, как и у ANTLR.

Лайфхак для тех, у кого macOS.
В русской раскладке:

| = alt + shift + 1
< = alt + shift +,
> = alt + shift +.
{ = alt + 9
} = alt + 0
Про таблицы — идея кошерная, сам так годами делаю.

А в каком языке так делаете?

В своих записках так таблицы оформляю.
Привычка записывать все в иерархические списки (аутлайнеры). Это позволяет быстро восстановить контекст при возвращении к задаче.

Заявленная расширяемость не достигнута. Например, pandoc markdown позволяет много где указать {значения=атрибутов}, чтобы не изобретать синтаксис для редкоиспользуемых вещей, вроде размера изображений или вставок/удалений. Атрибуты потом доступны парсеру, например, чтобы реализовать ваш великолепный синтаксис таблиц как плагин.


Для ссылок не хватает синтаксиса, когда в тексте название ([там][there]), а URL отдельно ([there]: https://...) — удобно для длинных адресов или если надо повторить ссылки, например, в конце статьи. В стиле MarkedText было бы что-то вроде ""там\(there)"".

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


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

Удобство субъективно, но сокращатель ссылок — точно лишняя сущность и точка отказа (сервис лег, ссылка протухла). Оригинальную ссылку даже записать некуда, так как в MarkedText нет комментариев, которые не показываются при рендеринге.

После решётки можно оригинальную ссылку вставить:
https://tinyurl.com/y2bf5r7y#https://marked.hyoo.ru/#marked=%3D%20MarkedText%0A%0A%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0%20%D1%81%20**%D0%BB%D0%B5%D0%B3%D0%BA%D0%BE%D0%B2%D0%B5%D1%81%D0%BD%D1%8B%D0%BC%20%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC**.%0A%0A--%0A%0A%3D%3D%20%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B%0A%0A%2B%20%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%81%3A%0A%20%20-%20%D0%9E%D0%B4%D0%BD%D0%BE%D0%B7%D0%BD%D0%B0%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C%0A%20%20-%20%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D1%82%D0%B0%0A%20%20-%20%D0%95%D0%B4%D0%B8%D0%BD%D0%BE%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D1%8C%0A%2B%20%D0%92%D0%BD%D0%B5%D1%88%D0%BD%D0%B8%D0%B9%20%D0%B2%D0%B8%D0%B4%3A%0A%20%20-%20%D0%9C%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5%20%D0%B2%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D0%B5%20%D0%BD%D0%B0%20%D0%B5%D1%81%D1%82%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9%20%D0%B2%D0%B8%D0%B4%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0%0A%20%20-%20%D0%9D%D0%B0%D0%B3%D0%BB%D1%8F%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C%20%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%0A%2B%20%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%3A%0A%20%20-%20%D0%9D%D0%B5%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D1%8C%20%D0%BE%D1%82%20%D1%80%D0%B0%D1%81%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B8%0A%20%20-%20%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F%20%D0%B8%20%D0%BD%D0%B0%D0%B4%D1%91%D0%B6%D0%BD%D0%B0%D1%8F%20%D0%B7%D0%B0%D0%BF%D0%BE%D0%BC%D0%B8%D0%BD%D0%B0%D0%B5%D0%BC%D0%BE%D1%81%D1%82%D1%8C%0A%0A%3D%3D%20C%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%81%20%D0%B0%D0%BB%D1%8C%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%82%D0%B8%D0%B2%D0%B0%D0%BC%D0%B8%0A%0A!%20**%D0%AF%D0%B7%D1%8B%D0%BA**%0A%20%20!%20**%D0%9F%D0%BB%D1%8E%D1%81%D1%8B**%0A%20%20%20%20!%20**%D0%9C%D0%B8%D0%BD%D1%83%D1%81%D1%8B**%0A!%20MarkedText%0A%20%20!%20-%20%D0%A3%D0%B4%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5%20%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86.%0A%20%20!%20-%20%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0%20%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B8%20%D1%8F%D1%87%D0%B5%D0%B5%D0%BA.%0A%20%20!%20-%20%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D1%82%D0%B0%20%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8.%0A%20%20!%20-%20%D0%9B%D0%B5%D0%B3%D0%BA%D0%BE%20%D0%B7%D0%B0%D0%BF%D0%BE%D0%BC%D0%B8%D0%BD%D0%B0%D1%8E%D1%89%D0%B8%D0%B9%D1%81%D1%8F%20%D0%BA%D0%BE%D0%BD%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9%20%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%81.%0A%20%20!%20-%20%D0%A3%D0%B4%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%BE%20%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%B2%20%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%BE%D0%B9%20%D1%80%D0%B0%D1%81%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B5.%0A%20%20!%20-%20%D0%9A%D0%BE%D0%BB%D0%BE%D0%BD%D0%BA%D0%B8%20%D0%BD%D0%B5%20%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%BB%D0%B7%D0%B0%D1%8E%D1%82%D1%81%D1%8F%20%D0%B4%D0%B0%D0%BB%D0%B5%D0%BA%D0%BE%20%D0%B2%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%20%D0%B7%D0%B0%20%D0%B3%D0%BE%D1%80%D0%B8%D0%B7%D0%BE%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9%20%D1%81%D0%BA%D1%80%D0%BE%D0%BB%D0%BB%D0%B8%D0%BD%D0%B3%20%D0%B8%20%D0%BD%D0%B5%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81%D1%8F%D1%82%D1%81%D1%8F%20%D0%BD%D0%B0%20%D0%BD%D0%BE%D0%B2%D1%83%D1%8E%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83.%0A%20%20%20%20!%20-%20%D0%9D%D0%B5%20%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%B2%D0%B0%D0%B5%D1%82%D1%81%D1%8F%20%D0%BF%D0%BE%D0%BA%D0%B0%20%D1%87%D1%82%D0%BE%20%D0%BD%D0%B8%D0%BA%D0%B0%D0%BA%D0%B8%D0%BC%D0%B8%20%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%BC%D0%B8%20%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8.%0A!%20MarkDown%0A%20%20!%20-%20%D0%A8%D0%B8%D1%80%D0%BE%D0%BA%D0%B0%D1%8F%20%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0%20%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D0%BC%D0%B8%20%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8.%0A%20%20!%20-%20%D0%9D%D0%B0%D0%B3%D0%BB%D1%8F%D0%B4%D0%BD%D0%BE%D0%B5%20%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86.%0A%20%20%20%20!%20-%20%D0%A1%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8%20%D1%81%20%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC%20%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86.%0A%20%20%20%20!%20-%20%D0%A1%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%20%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5%20%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%BC%D0%BE%D0%B5%20%D1%8F%D1%87%D0%B5%D0%B5%D0%BA.%0A%0A%3D%3D%20%D0%9F%D0%B0%D1%80%D1%81%D0%B8%D0%BD%D0%B3%0A%0A%20%20%20%20const%20res%20%3D%20%5B%20...%20%24hyoo_marked_line.parse%28%20'**text**'%20%29%20%5D%0A%20%20--%24mol_assert_equal%28%20res%5B0%5D.strong%2C%20'**text**'%20%29%0A%20%20%2B%2B%24mol_assert_equal%28%20res%5B0%5D.marker%2C%20'**'%20%29%0A%20%20**%24mol_assert_equal%28%20res%5B0%5D.content%2C%20'text'%20%29%0A%0A%3D%3D%20%D0%9E%D1%82%D0%B7%D1%8B%D0%B2%D1%8B%0A%0A%22%20%22%20%22%20%D0%A2%D0%B8%D0%BF%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%3A%20%D0%9D%D0%B8%D0%B3%D0%B4%D0%B5%20%D0%BD%D0%B5%20%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%B2%D0%B0%D0%B5%D1%82%D1%81%D1%8F%2C%20%D0%B8%D0%B4%D0%B8%D1%82%D0%B5%20%D0%B2%20--%D0%B6%D0%BE%D0%BF%D1%83--%20%2B%2B%D0%96%D0%BE%D0%B4%D0%B8%D0%BD%D0%BE%2B%2B%20%D1%81%20%D1%82%D0%B0%D0%BA%D0%B8%D0%BC%20%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%81%D0%BE%D0%BC!%0A%22%20%22%20%0A%22%20%22%20%D0%9D%D0%BE%20%D0%BC%D1%8B%20%D0%B6%D0%B5%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D1%8B%2C%20%D0%BC%D1%8B%20%D0%BC%D0%BE%D0%B6%D0%B5%D0%BC%20%D1%8D%D1%82%D0%BE%20%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C..%20%D0%94%D0%BB%D1%8F%20%D1%8D%D1%82%D0%BE%D0%B3%D0%BE%20%D0%B4%D0%B0%D0%B6%D0%B5%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B4%D0%BE%20%D0%B1%D1%8B%D1%82%D1%8C%20%D1%8D%D0%BA%D1%81%D0%BF%D0%B5%D1%80%D1%82%D0%BE%D0%BC%20%D0%BD%D0%B8%20%D0%BF%D0%BE%20%20C%2B%2B%20%20%2C%20%D0%BD%D0%B8%20%D0%BF%D0%BE%20%20D%2B%2B%20%20..%0A%22%20%0A%22%20%D0%9D%D0%B8%D0%BA%D0%BE%D0%BC%D1%83%20%D1%8D%D1%82%D0%BE%20%D0%BD%D0%B5%20%D0%BD%D1%83%D0%B6%D0%BD%D0%BE%20%28%D1%81%29%20%D0%94%D0%B8%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9%20%D0%AD%D0%BA%D1%81%D0%BF%D0%B5%D1%80%D1%82%0A%0A%D0%A2%D0%B5%D0%BC%20%D0%BD%D0%B5%20%D0%BC%D0%B5%D0%BD%D0%B5%D0%B5%2C%20%D1%8D%D1%82%D0%BE%20%D0%BF%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D0%BE%D0%B5%20%D1%83%D0%BF%D1%80%D0%B0%D0%B6%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B2%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8.%0A%0A%3D%3D%20%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8%0A%0A-%20%D0%9F%D0%B5%D1%81%D0%BE%D1%87%D0%BD%D0%B8%D1%86%D0%B0%3A%20%5C%5Chttps%3A%2F%2Fmarked.hyoo.ru%2F%5C%5C%0A-%20%5C%5C%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D1%8F%20%D0%BE%20MarkedText%5Chttps%3A%2F%2Fgithub.com%2Fnin-jin%2FHabHub%2Fissues%2F39%5C%5C%0A-%20%5C%5C%D0%9F%D0%B0%D1%80%D1%81%D0%B5%D1%80%20%D0%BD%D0%B0%20TS%5Chttps%3A%2F%2Fgithub.com%2Fhyoo-ru%2Fmarked.hyoo.ru%2F%5C%5C%0A-%20%5C%5C%D0%9A%D0%BE%D0%BD%D0%B2%D0%B5%D1%80%D1%82%D0%B5%D1%80%20%D0%B2%20HTML%20%D0%BD%D0%B0%20TS%5Chttps%3A%2F%2Fgithub.com%2Fhyoo-ru%2Fmarked.hyoo.ru%2Ftree%2Fmaster%2Fto%2Fhtml%5C%5C%0A-%20%22%22%D0%A0%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%20%D0%B1%D0%B8%D0%BB%D0%B4%D0%B0%20%24mol_regexp%5Chttps%3A%2F%2Fgithub.com%2Fhyoo-ru%2Fmam_mol%2Fworkflows%2Fmol_regexp%2Fbadge.svg%22%22%0A


Но зачем эти портянки в тексте, даже если в самом конце..

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


Кроме того, это никак не решает другую проблему: если текст в формате markdown пишется для того, чтобы читали собственно текст в формате markdown, а не получаемый из него HTML¹, то при ограничении ширины одной строки в N символов (от N тут зависит только то, насколько часто возникает проблема, поэтому я не привёл конкретное число), без такого синтаксиса будет часто встречаться ситуация, когда одна строка слишком короткая (и, возможно, содержит только часть текста ссылки), а на следующей URL и последнее слово текста ссылки. Иметь слишком короткую строку мне не нравится, как и разрывать текст ссылки в случае, если он состоит из нескольких слов. Загромождать текст URL, когда URL ведёт на какой‐то справочный материал, нужный только тем, кто не знает термин из текста ссылки, тоже не очень.


И что не так с поддержкой таких ссылок? Там же не требуется оставлять ссылки в порядке их упоминания в тексте или даже присваивать им номера.


Кстати, двойной пробел не годится по таким же соображениям: если текст пишется, чтобы читаться «как есть», а не в виде HTML, то двойной пробел в тексте может возникнуть как минимум по следующим причинам:


  1. Отступ. И да, иногда начинать даже абзац с кода, встроенного в строку, нужно. А тут вопрос, можно ли начать строку с кода, что совсем не то же самое.
  2. Конец предложения. В английском языке, вообще‐то, (было) принято делать двойной пробел после конца предложения, просто это сейчас мало кто соблюдает. В качестве примера можете посмотреть в документацию Vim. В русском языке, насколько мне известно, такого принято не было, но вы ведь не только для русского предлагаете?
  3. Выравнивание. Иногда текст выглядит лучше, если какой‐то элемент расположен строго под другим.
  4. Просто ошибка.

Замечу, что только конец предложения и выравнивание не могут появится у того, кто беспокоится только о результирующем HTML. Отступ возникнет при использовании списков. Ошибка может быть допущена всегда. А ещё конец предложения абсолютно корректен во всех других известных мне форматах разметки, и может даже быть привычкой: посмотрите, к примеру, на сообщения Bram Moolenaar в vim-dev.


¹: Ситуация у меня возникает, как правило, в трёх случаях:


  • если нет штатной возможности использовать форматирование;
  • если я хочу отправить письмо в виде простого текста;
  • если я пишу README — обычно то, для чего я пишу README не выкладывается на github/…, и смотрят результат все (включая меня) текстовым редактором.
Сокращалка ссылок означает, что я не могу посмотреть на ссылку и решить, нужно ли мне по ней переходить вообще.

Это должно быть понятно из текста ссылки, а не из урла.


на следующей URL и последнее слово текста ссылки

Ставьте пробел после последнего слова и оно не будет переноситься.


И что не так с поддержкой таких ссылок?

Да всё так, но если совать в формат всё подряд, то он резко потеряет в простоте и уже для него потребуется "облегчённая версия". У сносок есть один существенный недостаток — нелокальность. Чтобы они правильно работали нужно распарсить весь текст. При этом конкатенация и сплит текста резко становятся нетривиальными операциями. Однако сноски не кажутся столь уж необходимыми — можно легко обойтись и без них.


Отступ. И да, иногда начинать даже абзац с кода, встроенного в строку, нужно. А тут вопрос, можно ли начать строку с кода, что совсем не то же самое.

Проверьте сами: https://marked.hyoo.ru/#marked=%20%20%D0%BA%D0%BE%D0%B4%20%20%D0%BD%D0%B5%20%D0%BA%D0%BE%D0%B4/html


В английском языке, вообще‐то, (было) принято делать двойной пробел после конца предложения, просто это сейчас мало кто соблюдает.

Атавизмы не вижу особого смысла поддерживать.


Выравнивание. Иногда текст выглядит лучше, если какой‐то элемент расположен строго под другим.

Для этого есть преформатированные блоки.


Ошибка может быть допущена всегда.

И везде, пробелы тут не уникальны.

Это должно быть понятно из текста ссылки, а не из урла.

Кому должно? Язык это как‐то гарантирует?


Ставьте пробел после последнего слова и оно не будет переноситься.

Чтобы пробел оказался в ссылке? Кроме того, я говорил про слишком короткую строку из‐за URL. Пробел с этим не поможет ровным счётом никак.


Проверьте сами: …

Markdown хорош в том числе потому, что на нём можно писать письма в plain text и их будут понимать в таком виде. Судя по тому, что я увидел на сайте, у вас новая строка — это всегда новый абзац, а элемент списка не может содержать несколько абзацев. Первое неприемлемо для писем в plain text. Второе — просто недостаток по сравнению с markdown.


Для этого есть преформатированные блоки.

Это не в тему. Если я хочу что‐то выровнять в исходном коде, это не значит, что я хочу что‐то выровнять в результирующем HTML. (Или что оно там не выравнивается другими средствами, впрочем к вашему языку это не относится.) Или, скорее, это не значит, что я считаю, что оформление текста как кода будет выглядеть лучше, чем отсутствие выравнивания в результате.


И везде, пробелы тут не уникальны.

Нажать пробел два раза не проблема — вам даже не нужно промахиваться клавишей. Или скопировать что‐то, ошибившись с границей на символ. Заметить это сложно, всего лишь два пробела не производят визуального мусора. Кроме того, все имевшие дело с программированием привыкли, что за некоторыми исключениями количество пробелов не имеет значения, что делает результат ошибки неожиданным.

Кому должно? Язык это как‐то гарантирует?

У автора есть выбор: вставить сноску или переформулировать текст, чтобы было понятно куда ведёт ссылка. Второе предпочтительнее независимо от поддержки сносок.


Чтобы пробел оказался в ссылке?

Да, ничего страшного не произойдёт.


Кроме того, я говорил про слишком короткую строку из‐за URL. Пробел с этим не поможет ровным счётом никак.

Это вообще не проблема.


Первое неприемлемо для писем в plain text.

Вполне приемлемо. И если уж говорить про plain text, то в нём вы получите ровно то, что ввели, сколько бы переводов строк ни использовали.


Второе — просто недостаток по сравнению с markdown.

Согласен, добавил поддержку любого содержимого в элементах списков.


Если я хочу что‐то выровнять в исходном коде, это не значит, что я хочу что‐то выровнять в результирующем HTML.

Вы хотите писать как попало, но получать что хотите? Довольно бессмысленная хотелка.


все имевшие дело с программированием привыкли, что за некоторыми исключениями количество пробелов не имеет значения

Отвыкайте уже говорить за всех. Да и от незначимости пробелов тоже отвыкайте. Python, YAML, TOML, Tree — полно языков со значимыми пробелами. А в остальных языках по рукам всё равно бьют линтеры, приучая внимательно относиться ко всем символам.

Ради справедливости замечу, что TOML — язык без значимых пробелов. Вот комментарий из его родного примера:
# Indentation (tabs and/or spaces) is allowed but not required

Взято отсюда: github.com/toml-lang/toml#example
Python, YAML, TOML, Tree — полно языков со значимыми пробелами.

В каком из этих языков значимы пробелы в середине выражения, а не в начале, где они все ещё достаточно хорошо заметны?

Например в YAML, следующие пары выражений, отличающиеся только количеством пробелов, не эквивалентны?


[apple, orange, fig]
[apple,  orange,  fig]

name: John
name:   John

Меня интересовал кейс, когда значимо различие "1 пробел" vs "2 пробела", а не полное отсутствие пробела.

В Питоне такого вроде бы нет, в Tree есть.

Вы хотите писать как попало, но получать что хотите? Довольно бессмысленная хотелка.

Самая что ни есть осмысленная: писать так, как удобно человеку, а не компьютеру. Markdown как раз об этом. Для сравнения, reStructuredText более формальный, процветает в своей нише документации.


Python, YAML, TOML, Tree — полно языков со значимыми пробелами.

Это языки программирования и конфигурации. А сколько языков разметки текста с таким подходом?

Человеку удобно вообще не заниматься форматированием, однако, приходится объяснять компьютеру что ты от него хочешь. Чем проще и однозначней синтаксис, тем проще это сделать. А попытки угадать что имел ввиду пользователь вырождаются в YAML с многотомными спецификациями, которые всё-равно никто полностью не знает.


Что дозволено языку конфигурации не дозволено языку разметки текста?

Объяснять компьютеру желательно только там, где без этого никак. Если пользователь представляет себе список, который должен получиться, как 1), 2), 3) и так и пишет, чем ему поможет любой другой синтаксис?


Программы и конфигурации пишутся для компьютера специалистом, который специально свое решение в формальном виде представлял и синтаксис учил, потому что понимает — будет выполнено так, как написано. Тексты пишут люди без специальных знаний и попыток говорить на языке машины. Факт, что им удобно, когда компьютер правильно догадывается — Google OneBox, колдунщики Яндекса.

У автора есть выбор: вставить сноску или переформулировать текст, чтобы было понятно куда ведёт ссылка. Второе предпочтительнее независимо от поддержки сносок.

Это не значит, что все так делают.


Да, ничего страшного не произойдёт.

Просто будет некрасиво.


Вы хотите писать как попало, но получать что хотите? Довольно бессмысленная хотелка.

Почему «как попало»? Я хочу, чтобы в исходниках было красиво, а в HTML хотя бы читаемо.


Отвыкайте уже говорить за всех. Да и от незначимости пробелов тоже отвыкайте. Python, YAML, TOML, Tree — полно языков со значимыми пробелами. А в остальных языках по рукам всё равно бьют линтеры, приучая внимательно относиться ко всем символам.

А сколько языков со значимыми пробелами в середине строки? В Python, YAML и TOML если вы можете написать в каком‐то месте один пробел, то превращение его в два может изменить семантику ровно в двух случаях:


  1. Вы находитесь внутри строкового литерала или чего‐то подобного, где пробел имеет значение «байт 0x20».
  2. Вы находитесь в начале строки, где пробел означает отступ.

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


(Возможно, за исключением tree. Я его не использовал и не знаю спецификации.)

А еще можно зайти с другой стороны и просто сделать русскую раскладку где все такие символы просто есть xD

Ака ilyabirman.ru/projects/typography-layout только для маркдауна.

Потому что пытаться изобрести новый стандарт взамен настолько популярному довольно неблагодарная задача. А вот упростить работу с текущей можно. Особенно когда вся статья начинается с посыла «у меня нету таких символов на клавиатуре»

Проблемы можно решать только для себя, а можно сразу для всех. Я не на столько эгоцентричен, чтобы заставлять каждого пользователя постоянно решать одни и те же проблемы.

Что мешает сделать легко устанавливаемую раскладку для всех? :)

Отдельный формат тоже заставляет каждого его пользователя прилагать усилия на его изучение, на поиск/установку плагинов для IDE, на убеждение всех в комманде что именно этот формат лучше чем тот что поддерживается везде по дефолту и т.п

Одну для всех не получится. Ибо есть те кто пользуется машинописной раскладкой, а есть странные люди, которые пользуются дефолтной.

Да повесьте вы переключалку на CapsLock (под левый мизинец) и забудьте эту проблему.
— Linux — искаропки
— macOS — искаропки
— Windows — recaps
Как ни крути, а в кириллической раскладке со спецсимволами всю дорогу ерунда.
И это не исправить пока 33 > 26.
Есть вариант смонстрячить императивные включалки языков, привязанные к клавишам или их сочетаниям. Удобнее гораздо жахнуть по кнопке и печатать на нужном языке, нежели удерживать в памяти текущий язык и заморачиваться мыслью «надо ли вот сейчас переключать?».
Держать не надо.
— Справа внизу (Linux) или справа вверху (MacOS) — флажочек.
— Cправа вверху (PC keyboard) или слева посредине (MacBook) горит CapsLock.
Всё это ловится боковым зрением.
Конечно же держать в голове смысла нет, потому что щелкаешь мизинцем туда-сюда и не факт что переключил куда надо. Ну и память как у гуппи отвлекаешься, забываешь.
PS. Эх, помнится под DOS'ом была переключала, на русском расцвечивала border CGI-экрана в красный цвет. Вот там точно невозможно было промахнуться раскладкой.
Отключил индикатор, за ненадобностью. Ибо, как раз, императивный метод переключения раскладок. menu / rshift-menu

У меня на ноуте индикатора и нет вообще.
Ну а превентивное переключение по "menu / rshift-menu", к сожалению, плохо работает, ибо всё равно забываешь нажать клавишу нужного языка и печатаешь не на том.

Я не забываю. Я об этом вообще не думаю. Условный рефлекс полезная штука.

У меня разные раскладки на разных шифтах. Это всё равно напрягает при частом переключении.

Нет, ну если реально смотреть, то в Вашем случае (когда обычный пользователь пользуется необычным (для обычных пользователей) инструментом) — то таки да, проблема имеет место быть.
Погроммисты привыкли всё время сидеть в en, поэтому иногда с удивлением обнаруживают, что 95% нормальных людей имеют дефолтной раскладкой ru (внезапно!). И крайне редко переключаются в en.
Т.к. на хабре в основном тусят ИТшники, то Ваши проблемы здесь видятся необычными. Уж простите уж, нам/им из-за облаков плохо видно проблемы этих ваших человеков.

Спасибо за саму попытку провести мысленный эксперимент, редкость ныне.
Меж тем, идеи для заголовков и таблиц — окупили все затраты.


Два замечания:


  1. Где-то символ-идентификатор должен быть отбит пробелом, где-то (в инлайновых) — нет. Может просто принять, что маркер — это два "редких" символа подряд?
  2. Преформатированный текст в инлайне, если будет определяться двумя пробелами, также будет очень ·сложно заметить· среди тысячи разрывов. В том числе и два ошибочных пробела. Может поискать дополнительные сочетания, например: ::?

В инлайн форматировании удвоение — вынужденная мера, в префиксах блоков же в этом нет необходимости и можно сделать более наглядно для восприятия. А удвоение можно задействовать в иных целях:


  • показывать уровень заголовка
  • объединять ячейки таблицы

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

Много чего, с табличками, например, беда.

А вот что не так с tex-ом? Может чуть более чем всё.

К markdown есть такие вопросы:
  • Как сделать ссылку не на внешний документ, а на загловок в этом же документе.
  • <!-- комментарии делать как в html -->
  • Как делать сноски
  • Почему heading абсолютный, и нет относительного
  • Как вложить таблицу в таблицу
  • URL-ы допускают кодирование данных в самом урл например картинок. Можно гигабайтные видео вставлять, архивы, музыку, исполняемые файлы… или просто печатную версию документа в pdf. Или есть какие-то ограничения?

BBCode не является легковесным — это практически HTML с квадратными скобками вместо угловых
Так и в markdown допускается голый html если markdown-а не хватило => скрипты, стили, чудеса unicode-а, webgl… короче еще и санитайзеры надо.

А вот что не так с tex-ом? Может чуть более чем всё.

Он не является легковесным языком.


Как сделать ссылку не на внешний документ, а на загловок в этом же документе.

[ссылка на заголовок](#some-header)

Почему heading абсолютный, и нет относительного

Потому что относительный плохо читается человеком.


Как вложить таблицу в таблицу

Оригинальный маркдаун вообще таблицы не поддерживает и предлагает использовать html.


Или есть какие-то ограничения?

Ограничения есть всегда, но не задача формата разметки их регламентировать.


Так и в markdown допускается голый html

Это скорее не "в", а "между". HTML частью синтаксиса маркдауна не является.

Я бы предложил альтернативный синтаксис:


!== Сравнительная таблица
! **Язык** 
!(+) **Плюсы** 
!(-) **Минусы**
!--
! MarkedText (modified)
!(+)
 - Те же, что и в MarkedText
 - Строки таблицы чётко разделены с помощью `!--` (фактически это просто вариант `--`);
 - Новый столбец всегда начинается с `!` в начале строки, поэтому дополнительные уровни не нужны (хотя и не возбраняются!); при малом количестве столбцов (2-4) их нетрудно считать, при большом - см. ниже.
 - Как следствие, ещё более удобное редактирование таблиц, потому что не нужно следить за отступами, особенно при большом количестве колонок. Текст каждой ячейки -- обычный текст.

И в ячейку можно безбозяненно вставлять обычные параграфы. Пустые строки не разорвут ячейку таблицы -- нужен либо маркер новой колонки/строки, либо конца таблицы. 

 - У таблицы есть маркеры начала `!==` (фактически вариант оглавления, с опциональным текстом для заголовка таблицы) и конца `==!` (тоже с опциональным текстом для удобства поиска конца длинной таблицы; парсер должен игнорировать его).

!==
! И поэтому можно вставлять вложенные таблицы!
==!

 - Опциональные маркеры колонок `!(...)` позволяют помнить где какая колонка в длинных таблицах с большим количеством колонок и информации, как если бы заголовок был "прибит" при скроллинге. Текст маркера -- произвольный, парсер его должен игнорировать. Можно вставить номера колонок, можно -- символические имена, на свой вкус. Здесь я пометил колонки "(+)" и "(-)", и вот, наконец, мы дошли до колонки "(-)". Мы ещё помним её?

!(-)
 - Тоже нет инструментов

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

==! Сравнительная таблица

Кроме этого, я бы добавил ещё одно опциональное расширение для строк таблиц:


![r:c] — где r — rowspan, c — colspan. Если значение равно 1, его можно опустить. Значение "*" — span до конца таблицы. Примеры:


![2:3] - ячейка займёт 2 строки и 3 столбца
![2:] - 2 строки, 1 столбец
![*:] - столбец до конца таблицы
![:*] - строка до конца таблицы

Двойной пробел для monospaced — на любителя; должна быть альтернатива (те же backticks) для тех, кто хочет выделять inline-блоки явно и не бояться, что какой-нибудь автоформаттер в редакторе выкинет все "лишние" пробелы.

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


Насчёт спанов, я ещё не продумал, но идея такая:


  1. Пропуская некоторые уровни отступов получаются горизонтальные спаны.
  2. Дублируя маркер получаются вертикальные спаны.

То есть как-то так:


! 2x1
    !! 1x2
! 1x1
  ! 1x1

должна быть альтернатива

Либерализм в синтаксисе ни к чему хорошему не приводит. Лучше простой и однозначный синтаксис, без вольностей.

У вас потерялась двумерность структуры

Она фактически потерялась и с отступами, потому что в сложных таблицах следить за отступами — морока. При этом с отступами усложнилось редактирование. А представьте таблицу с 10 колонками, и в каждой ячейке по абзацу текста, и всё это на пару-другую экранов. Замучаетесь отступы считать и сопоставлять колонки с заголовком. А если там вложенная таблица...


Кроме того, я написал, что отступы не возбраняются: хотите своё 1.5D — делайте на здоровье, парсер проигнорирует начальные пробелы.

Она фактически потерялась и с отступами, потому что в сложных таблицах следить за отступами — морока.

Не потерялась. А следить за отступами всё равно придётся. Или вложенные списки и цитаты вы тоже будете в плоском виде выводить?


Замучаетесь отступы считать и сопоставлять колонки с заголовком.

Навёл указатель мыши и проскроллил.

А следить за отступами всё равно придётся.

Я не против, пока не нужно отслеживать их дальше, чем 5-7 строк максимум (пусть даже через схлопывание уровней). Иначе я предпочитаю символические имена.


Или вложенные списки и цитаты вы тоже будете в плоском виде выводить?

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


Редактирование списков в нынешних "умных" редакторах меня постоянно выбешивает, ничего сложнее одного параграфа туда практически не вставить, а если список многоуровневый, то это вообще аллес капут.


Навёл указатель мыши и проскроллил.

… сказал человек, который борется за каждый keystroke.

В принципе да, логически список — это таблица из одной колонки. Но обозначать элемент списка вертикальной чертой или ячейку таблицы дефисом — несколько противоестественно.


В том редакторе, что разрабатывал я, в список можно было засунуть что угодно. Но он, к сожалению, не дожил до прода.


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

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

Моё понимание таково: вертикальная черта или дефис или плюсик — это не столько обозначения элементов, сколько индикаторы стиля форматирования:
- item: "вывести как элемент ненумерованного списка",
+ item: "вывести как элемент нумерованного списка",
! item: "вывести как ячейку таблицы".


Структура данных одна и та же, отличается лишь визуальное представление.


Так как таблица — это список списков, то, тупо заменив "-" на "!" в обычном списке глубины 2, мы должны получить что-то типа


!
  ! item 1,1
  ! item 1,2
  ! item 1,3
!
  ! item 2,1
  ! item 2,2
  ! item 2,3

— и это само по себе уже должно быть выдано в табличной форме, без дополнительных телодвижений. Всё остальное — сахар и устранение неоднозначностей: !-- вместо голого ! в строках позволяет не заботиться об отступах колонок и открывает возможность вставлять в элементы любой контент (кроме таблиц); а !== и ==! позволяют также вкладывать и таблицы.


Должно работать и в обратную сторону: если в получившемся "плоском" синтаксисе таблиц заменить все ! обратно на - или +, то получится "плоский" синтаксис для обычных списков, способных принять сложную структуру текста в качестве содержимого элементов:


+==
+ Example 1

This item contains:

- An inner unnumbered list
- Of two items

+== 
+ An inner numbered list
+ Of two items
==+

  + This should work too
  + Because of the indentation.

! A inner table
! With two rows
! And a single column 

Note that these inner lists and a table and this paragraph do not cause ambiguity here. If we didn't bracket the first inner numbered list into `+== ... ==+`, then it would cause a confusion due to lack of indentation.

+ Example 2

Note that we can still continue counting 1-level items despite all the line breaks, because we didn't reach the end-of-list market yet, so any `+` in a first position means a new list item.

If we use complex item structure, then we must use `+== ... ==+` brackets to mark the end of the list.

+--
Example 3

+ This inner numbered list without indentation
+ Does not cause ambiguity
+ Because we started to use `+--` as an item delimiter
+ (like in a table row case)
+ So now we expect either a next `+--`, or the end of the list.
+ If we use `+--`, the we must also use `+== ... ==+` brackets to stop

==+

Вкладывать таблицы в таблицы так-то можно и сейчас.

Либерализм в синтаксисе ни к чему хорошему не приводит. Лучше простой и однозначный синтаксис, без вольностей.

С таблицами не всё так однозначно. Ваш вариант лучше markdown, когда в ячейках много текста, но его не удобно читать и с большим количеством колонок он не очень удобен. Вариант markdown лучше читается, если в таблице немного нешироких колонок, но редактировать его неудобно. Лучше всего с таблицами в reStructuredText, где их четыре варианта (но из четырёх вариантов grid table, правда, весьма неудобен для написания и не слишком нужен): simple table для таблиц без большого количества текста в столбцах, csv для отображения чего‐то генерируемого, list на случай, когда текст не влезает нормально в simple. Эти три нормально редактируются и два из трёх (кроме csv) нормально читаются (насколько вообще нормально могут читаться таблицы в plaintext).


Зачем вообще нужно, чтобы таблицы можно было записать единственным способом?

Я немножко в танке, поэтому наивно спрошу людей знающих: а в чём проблема написать WYSIWYG-редактор под маркдаун с кнопочками как в Word/LibreOffice Writer для работы с текстом?

Всего-то надо:
— интерпретаторы кнопок в маркдаун-разметку;
— панель с кнопками над окном (полем) с текстом;
— окно/панель/колонка WYSIWYG-превью и возможность сделать его основным (а окно/панель/колонку с маркдауном скрыть).

Если такое уже реализовано, вопрос снят, просто сообщите имя программы. :)

Панель ввода комментария и есть такой редактор :)


WYSIWYG-редакторы языков разметки неудобны:


  • дольше тянуться мышью, чем вбить разметку;
  • diff после такого редактора неряшлив (длинные строки, приведение существующей разметки к "стандартному" для редактора виду);
  • не поддерживает или, хуже, портит расширенную разметку.
Я бы для себя что-нибудь найти, сейчас тьма заметочников на маркдауне, но без WYSIWYG и, что драматичнее, кнопочек…

Визивигу вообще никакие маркдауны не нужны.

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

Таблицы особенно понравились!


А вот ссылки совершенно нечитаемы, может лучше для них использовать двойные скобки с последним пробелом разделителем? Если ссылка нужна в скобках, то будут тройные скобки.


((Ссылка на подвал https://habr.com/#footer))
((habr.com))
Habr (((habr.com)))
((""http://img.habr.com/1.png"" http://habr.com))
E-mail: ((mailto::info@habr.com))
""Рисунок 1 http://habr.com/pic1.png""

Последняя строка это картинка с alt и title атрибутом, без ссылки.


К сожалению, в таком случае невозможно отличить скобку, как часть урла, от скобки вокруг ссылки. Битые ссылки — типичное следствие этого в маркдаунах.

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


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

Скобки ни в ссылке ни уж тем более в обычном тексте не обязаны быть согласованными.

Довольно очевидный пример несогласованных скобок в тексте — это смайлики :))
Пример ((поиска https://yandex.ru/search/touch/?text=(test%20(abc))&oprnd=2395118338&mda=0&lr=213)).

Здесь после первой пары )) до второй пары )) нет пробелов, очень легко определить ссылку.

Вместо отступов у таблиц можно сделать двойной восклицательный знак у ячеек, у новых строк один:


! 1.1
!! 1.2
!! 1.3
! 2.1
!!/2 2.2-3

Из Textile можно взять align, colspan, rowspan, как пример, последняя строка это colspan=2.

Посмотрел пример, если использовать отступы, то тогда rowspan можно расставлять автоматически, а colspan можно сделать через несколько !


! 1.1 (rowspan=2)
  ! 1.2
    ! 1.3
  ! 2.2
! 3.1
  !! 3.2-3 (colspan=2)
    ! 3.4

В этом случае теряется двумерность, что осложняет понимание что к чему относится.

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


``code``
;;code;;

Код не только в английской набирают, особенно, когда его копипастят.

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

Знакомая проблема. В Notepad++ я решил её через плагин jN следующим кодом:


Заголовок спойлера
// trdm 2020-02-17 10:21:08  
// script: trdmUtil.js
function typeSymbol( psSymb ) { Editor.currentView.selection = psSymb; }
function addHotSym(psFu, psKey) {
    var rv = {
        ctrl: false,
        shift: false,
        alt: true,
        key: psKey, // "I"
        cmd: psFu
    };
    addHotKey(rv);  // Различные клавиши <>
}

// Ввоод символов в русской раскладке схема Alt+' >> ' ; Alt+$ >> $. Можно не переключать раскладку.
function typeSymbol_1() {   typeSymbol( '<' );} addHotSym(typeSymbol_1,0xBC);
function typeSymbol_3() {   typeSymbol( '\'' );} addHotSym(typeSymbol_3,0xDE);
function typeSymbol_2() {   typeSymbol( '>' );} addHotSym(typeSymbol_2,0xBE);
function typeSymbol_4() {   typeSymbol( '~' );} addHotSym(typeSymbol_4,0xC0);
function typeSymbol_5() {   typeSymbol( '$' );} addHotSym(typeSymbol_5,0x34);//$
function typeSymbol_6() {   typeSymbol( '#' );} addHotSym(typeSymbol_6,0x33); //#########
function typeSymbol_7() {   typeSymbol( '|' );} addHotSym(typeSymbol_7,0xDC); //
function typeSymbol_8() {   typeSymbol( '[' );} addHotSym(typeSymbol_8,0xDB); //
function typeSymbol_9() {   typeSymbol( ']' );} addHotSym(typeSymbol_9,0xDD); //
function typeSymbol_10() {  typeSymbol( '\'' );} addHotSym(typeSymbol_10,0xDE); //

Этот код вешает хоткеи позволяющие без переключения на английский по клавише Alt+… вводить соответствующие спец символы.

Я решил проблему, написав дополнение для Vim, транслитерирующее ввод: такой подход позволяет использовать только одну (английскую) раскладку для ввода (для которой я ещё и освоил слепую печать), хотя и не всегда удобен. Думал как‐нибудь написать на замену что‐то более системное — разобраться, как вводятся иероглифы и сделать по аналогии, но до этого как‐то не дошло.

Как-то сильно заморочено :)

Добавил немножко символов.


// trdm 2020-02-17 10:21:08  
// script: trdmUtil.js
//[[[[[[[[[[[[[[[[[[[[[[[[[
// Ввоод символов в русской раскладке схема Alt+Символ: Alt+> =>> > ; Alt+$ =>> $. Можно не переключать раскладку.
function typeSymbol( psSymb ) { 
    if(psSymb.length > 0) {  
        Editor.currentView.selection = psSymb; 
    }
}
function addHotSym(psFu, psKey) {
    var rv = {ctrl: false,  shift: false,   alt: true,  key: psKey, cmd: psFu};
    addHotKey(rv);  
}
function addHotSymC(psFu, psKey) {
    var rv = {ctrl: true,   shift: false,   alt: false, key: psKey, cmd: psFu};
    addHotKey(rv);  
}
function typeSymbol_1()  {  typeSymbol( '<' );} addHotSym(typeSymbol_1,0xBC); //<>>
function typeSymbol_2()  {  typeSymbol( '>' );} addHotSym(typeSymbol_2,0xBE);
function typeSymbol_3()  {  typeSymbol( '\'' );} addHotSym(typeSymbol_3,0xDE);
function typeSymbol_4()  {  typeSymbol( '~' );} addHotSym(typeSymbol_4,0xC0); //~
function typeSymbol_5()  {  typeSymbol( '$' );} addHotSym(typeSymbol_5,0x34);//$$$
function typeSymbol_6()  {  typeSymbol( '#' );} addHotSym(typeSymbol_6,0x33); //###
function typeSymbol_7()  {  typeSymbol( '|' );} addHotSym(typeSymbol_7,0xDC); //|||
function typeSymbol_8()  {  typeSymbol( '[' );} addHotSym(typeSymbol_8,0xDB); //[[[
function typeSymbol_9()  {  typeSymbol( ']' );} addHotSym(typeSymbol_9,0xDD); //]]]
function typeSymbol_10() {  typeSymbol( '\'' );} addHotSym(typeSymbol_10,0xDE); //'''
function typeSymbol_11() {  typeSymbol( '%' );} addHotSym(typeSymbol_11,0x35); //%%
function typeSymbol_12() {  typeSymbol( '^' );} addHotSym(typeSymbol_12,0x36); //^^
function typeSymbol_13() {  typeSymbol( '&' );} addHotSym(typeSymbol_13,0x37); //&&
function typeSymbol_14(){   typeSymbol( '`' );} addHotSymC(typeSymbol_14,0xC0);// `
function typeSymbol_15(){   typeSymbol( '@' );} addHotSym(typeSymbol_15,0x32);// @
function typeSymbol_16(){   typeSymbol( '' );} addHotSym(typeSymbol_16,0x31);// Заглушка для свертывания блоков. не пользуюсь
//]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

Думаю для поклонников Notepad++ будет некое полезное подспорье…
Как использовать:


  • установить плагин jN
  • в кателоге %Notepad++\plugins\jN\jN\includes\ добавить файл trdmUtil.js (UTF-8)
  • Закинуть в файл этот текст
  • Перезагрузить N++
  • Пользоваться.
Дмитрий, Вы очень активный и конструктивный человек! Спасибо Вам за статью!

Разрабатывать удобный текстовый формат оптимально, но придавать излишний вес фактору «это не удобно набирать на русской раскладке клавиатуры» мне кажется малооптимально в этом вопросе.

Хочу поинтересоваться — а Вы бы хотели, чтобы все люди на планете общались одним единым языком?
Предложение классное, лучше чем текущая реализация md, в части списков и заголовков, но таблицы видимо, да, что не придумывай норм не получиться.
Мне кажется их можно только самые простые делать в простом формате, хотите красоты — пользуйтесь не простыми форматами, используйте для этого навороченные редакторы.
С ручным выравниванием колонок я тоже намучался.
С другой стороны если будет возможность вставить картинку, то проще таблицу нарисовать в продвинутом редакторе и в документ вставить ссылку на картинку.
По части «Преформатированный текст», не соглашусь, писать ```php или ```sql не напрягает, 4 пробела подряд — очень спорное решение. Я понимаю что спец символов доступных из русской раскладки, не так много, но. Почему бы не сделать тройной символ;
С другой стороны что бы написать php всё равно надо раскладку переключить поэтому и символ ` тоже норм. Можно конечно вместо php писать «пхп», «скл», «иксмл», что бы не переключать раскладу, но мне кажется это будет слишком для консервативных умов.

Оххх как меня сейчас флешбекнуло…
Буквально пару месяцев назад делал себе блог. И решил сделать его с 0, для фана на собственном движке. Выбрал сначала markdown. Но в итоге, забил на него и реализовал свой собственный markdown, с возможностью создавать grid, указывать классы, мультилайн итд.
Грид то типа.
Не скажу что вышло прям удобно, но зато функционально. :D


||:3:(.bold_header) заголовок 1 ||:1:(.bold_header) заголовок 2 ||:2:(.bold_header) заголовок 3  ||
||---||---||---||
||:(center) текст по центру ||:(.class) Мульти
Лайн || без класса однострочный ||
||---||---||---||
Only those users with full accounts are able to leave comments. Log in, please.