Open doiftrue opened 9 years ago
Found decision of the problem. Maybe will be helpful
protected $StrongRegex = array(
'*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s',
'_' => '/^__((?:\\\\_|[^_]|_[^_]*_)+?)__(?!_)/us',
);
add \n
'*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s',
'_' => '/^__((?:\\\\_|[^_\n]|_[^_]*_)+?)__(?!_)/us',
And one more question. Why we need s
modifier? <strong>
<em>
- it's inline elements, not?
One more little research based on spec.commonmark.org parser. _
and *
parsess differently.
Ex:
post__in foo
bar post__in
becomes
<p>post__in foo
bar post__in</p>
but if we try **
instead, we get this:
post**in foo
bar post**in
becomes
<p>post<strong>in foo
bar post</strong>in</p>
Сonclusion is that _
can be part of word and so if it appear near any word it shell not be parsed. But *
can't be part of any word, so it parses as it is now in parsedown.
So, for now I make such regex:
$this->StrongRegex['_'] = '/^__((?:\\\\_|[^_\n]|_[^_]*_)+?)__(?!_)\b/us';
$this->EmRegex['_'] = '/^_((?:\\\\_|[^_\n]|__[^_]*__)+?)_(?!_)\b/us';
And I need to add \b
at the begining but there is ^
. Seems I need use the Context in parse function but how do this correctly I don't know.
Thanks, I appreciate it.
I've noticed a similar problem with underscores, so I figured it is probably related and thus decided to post it here instead of opening up another issue. It seems that single underscores break the detection of bold marker pairs:
The following Markdown is from a Readme on Github:
* __callback_params__
__Expects:__ Array / Void
__Default Value:__ null
__Description:__
...
Github works as expected and renders:
<li>
<p><strong>callback_params</strong><br>
<strong>Expects:</strong> Array / Void<br>
<strong>Default Value:</strong> null<br>
<strong>Description:</strong><br>
...
Running it through Parsedown, however, yields quite different results:
<li>
<p>__callback_params<strong><br />
</strong>Expects:<strong> Array / Void<br />
</strong>Default Value:<strong> null<br />
</strong>Description:__<br />
...
This is a severe issue, considering Markdown is quite popular for documenting code and variable names are often written with underscores (not everyone camelCases everything).
This seems to be related to #198 and #703
One: If we parse this line:
we get
__
replace with strong - it's error...Two: For ex. on github even
post__in__
not parsing. In parsedown we have:post<strong>in</strong>
Don't know about this, for now I have no trouble with second example.