brace icon indicating copy to clipboard operation
brace copied to clipboard

Interword emphasis syntax highlighting broken for many markdown implementations

Open gausie opened this issue 7 years ago • 1 comments

According to the commonmark spec:

Many implementations have also restricted intraword emphasis to the * forms, to avoid unwanted emphasis in words containing internal underscores. (It is best practice to put these in code spans, but users often do not.)

internal emphasis: foo*bar*baz no emphasis: foo_bar_baz

However, the markdown highlighting mode does treat the second example as emphasised. In fact, in Github I have to escape the first example precisely due to this very common implementation detail.

gausie avatar Aug 15 '18 10:08 gausie

I quickly made the regex ([*])(.*?\S[*]*)([*])|((?<!\S)[_])(.*?\S[_]*)([_](?!\S)) which passes:

_neat_ *start but not*end end but not*start* abso*bloody*lutely i cant *believe* that

but not

snake_case_sucks _start but not_end end but not_start_

so that seems right, but I may be missing a case, and it may be inefficient. Note that the current implementation already doesn't detect escaped asterisks and underscores.

gausie avatar Aug 15 '18 11:08 gausie