2016-05-26 3 views
0

Я ожидаю, что следующий текст (примечание перевода строки на отметке 80 символов):CommonMark вставляет список в середине пункта

This worked for a few months. Unfortunately, occasionally a test would time 
out and fail after 18 seconds - maybe 1 in 100 test runs would fail with a 
timeout. Normally when the tests fail you get back some kind of error message 
- a Postgres constraint failure will print a useful message, or a Javascript 
exception will bubble up, or Javascript will complain about an unhandled 
rejection. 

при запуске через редактор уценки, чтобы генерировать следующий HTML:

<p> 
This worked for a few months. Unfortunately, occasionally a test would time 
out and fail after 18 seconds - maybe 1 in 100 test runs would fail with a 
timeout. Normally when the tests fail you get back some kind of error message 
- a Postgres constraint failure will print a useful message, or a Javascript 
exception will bubble up, or Javascript will complain about an unhandled 
rejection. 
</p> 

Когда я запускаю его через cmark, я получаю следующее:

<p>This worked for a few months. Unfortunately, occasionally a test would time 
out and fail after 18 seconds - maybe 1 in 100 test runs would fail with a 
timeout. Normally when the tests fail you get back some kind of error message</p> 
<ul> 
<li>a Postgres constraint failure will print a useful message, or a Javascript 
exception will bubble up, or Javascript will complain about an unhandled 
rejection.</li> 
</ul> 
<p>With this error we didn't get any of those. We also observed it could happen 
anywhere - it didn't seem to correlate with any individual test or test file.</p> 

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

+0

Интересно. Это расхождение с Markdown. См. [Babelmark] (http://johnmacfarlane.net/babelmark2/?normalize=1&text=This+worked+for+a+few+months.+Unappro%2C+occasionally+a+test+would+time%0Aout+and + обязательно + после + 18 + секунд + -. + возможно + 1 + в + 100 + тест + работает + будет + провал + с + в% 0Atimeout + Обычно + когда + в + тесты + провал + вы + получить + назад + некоторые + вид + в + + ошибки сообщения% 0a- + а + Postgres + ограничение + отказ + будет + печать + а + полезно + сообщение% 2C + или + а + JavaScript% 0Aexception + будет + пузырь + 2C% до + или + Javascript + будет + жаловаться + о + + необработанном% 0Arejection.) – Waylan

ответ

0

Есть ли что-то, что я могу сделать по-другому, чтобы не вызвать это поведение?

Следующая следует избегать списка:

This worked for a few months. Unfortunately, occasionally a test would time 
out and fail after 18 seconds - maybe 1 in 100 test runs would fail with a 
timeout. Normally when the tests fail you get back some kind of error 
message - a Postgres constraint failure will print a useful message, or a 
Javascript exception will bubble up, or Javascript will complain about an 
unhandled rejection. 
+0

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

+0

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

+1

@mdickin проблема в том, что в будущем редактировании абзац можно переупаковать, и проблема повторится. Это не решение, а лишь временное обходное решение. В своем ответе я предоставляю решение, в котором будущие изменения не будут повторно вводить проблему. – Waylan

2

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

Спецификация states:

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

Foo 
- bar 
- baz 


<p>Foo</p> 
<ul> 
<li>bar</li> 
<li>baz</li> 
</ul> 

Он позже объяснил, что это происходит потому, что CommonMark придерживается principle of uniformity. В частности, строка, начинающаяся с маркера списка, всегда является элементом списка, независимо от каких-либо окружающих линий. Спецификация даже признает, что Markdown ведет себя по-другому здесь специально, чтобы избежать проблемы, с которой вы столкнулись, но CommonMark способствует единообразию в разумности/простоте использования (по-видимому).

Таким образом, решение состоит в том, чтобы никогда не начинать линию с маркером списка, когда эта строка не является элементом списка. В то время как вы могли бы тщательно обернуть свои строки, будущие изменения могут снова ввести проблему. К счастью, дефис (Unicode char \u2010, который является символом на вашей клавиатуре и символом, используемым в качестве маркера списка) редко используется в правильной грамматике английского языка таким образом, что маркер списка. В частности, для дефиса никогда не следует пробелов, которые требуются для маркера списка. Если вы хотите следовать символу по пробелу, вам, вероятно, понадобится endash (символ Unicode \u2013), emdash (символ Unicode \u2014) или знак минус (символ Unicode \u2212) (см. this question для объяснения). Поэтому используйте соответствующий символ, и проблема будет предотвращена.

Давайте дадим, что попробовать:

This worked for a few months. Unfortunately, occasionally a test would time 
out and fail after 18 seconds &mdash; maybe 1 in 100 test runs would fail with a 
timeout. Normally when the tests fail you get back some kind of error message 
— a Postgres constraint failure will print a useful message, or a Javascript 
exception will bubble up, or Javascript will complain about an unhandled 
rejection. 

выход CommonMark является то:

<p>This worked for a few months. Unfortunately, occasionally a test would time 
out and fail after 18 seconds — maybe 1 in 100 test runs would fail with a 
timeout. Normally when the tests fail you get back some kind of error message 
— a Postgres constraint failure will print a useful message, or a Javascript 
exception will bubble up, or Javascript will complain about an unhandled 
rejection.</p> 

Обратите внимание, что для первого появления я использовал HTML сущность (&mdash;), тогда как для второго появления я использовал символ emdash () напрямую. CommonMark преобразовал объект HTML в символ emdash и передал буквальный символ без изменений.Для удобства чтения фактический персонаж, безусловно, лучше, хотя его трудно напечатать, поскольку он не отображается на большинстве клавиатур.

Если вы используете SmartyPants, вы можете использовать двойной (--) или тройной (---) дефис, который SmartyPants преобразует в endashes и emdashes соответственно. И двойные и тройные дефисы не вызывают списки, если между дефисами нет пробелов.

 Смежные вопросы

  • Нет связанных вопросов^_^