Age | Commit message (Collapse) | Author |
|
To prevent intra-word emphasis, we used to check to see if
the delimiter was followed/preceded by an ASCII alphanumeric.
We now do something more elegant: whereas an opening `*` must
be left-flanking, an opening `_` must be left-flanking *and not
right-flanking*. And so on for the other cases.
All the original tests passed except some tests with Russian
text with internal `_`, which formerly created emphasis but no
longer do with the new rule. These tests have been adjusted.
A few new test cases have been added to illustrate the rule.
The C and JS implementations have both been updated.
|
|
Everything else gets a name starting with an underscore
and will be considered private.
This will allow us to keep the API stable while changing the
underlying data structure. And it will avoid exposing properties
that have only an instrumental value in parsing.
|
|
|
|
Use these instead of direct property access.
This is the first step in a general move towards an API
like the one libcmark has. This will allow us to have a stable
API that is independent of details of the AST.
|
|
This does a proper unicode case fold instead of just using
toUpperCase. It is also faster, partly because we can do
one pass for space and case normalization.
Modified from the NPM package fold-case; proper credit given
in source and COPYING.
|
|
|
|
This way we can change it without changing four separate places
in the code.
|
|
This is used in both blocks.js and inlines.js.
|
|
Always add '' as title property if title is not defined.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Don't check for `\n` when we know we have one.
Gobble spaces after line break.
|
|
|
|
|
|
|
|
Small performance improvement.
|
|
|
|
Use the same doubly linked node structure that cmark uses.
The primary advantages of this change are (a) simplified code,
especially in the renderers, and (b) elimination of the need for
recursion, so we can render deeply-nested structures without a
stack overflow.
A node walker has also been added, for easy AST traversal.
* Added js/lib/node.js for nodes. Includes a node walker.
* All modules updated to use node structures.
* Regularized position information into pos property.
* Performance is slightly worse than before, but only marginally,
and no doubt there are more optimizations that can be done.
|
|
Now we use 'children' uniformly, in both inlines and blocks,
for child nodes.
|
|
This matches the C impl.
Also removed an unused property.
|
|
Closes #267.
|
|
Closes #263. Note, this only affects inline comments.
With block comments we parse differently, and don't guarantee
that only valid HTML5 comments will pass. This all needs to
be made more explicit in the spec.
However, this fix addresses the cpu problem.
|
|
|
|
|
|
Partially addresses #252.
Still need to:
- update C parser.
- put an example in the spec.
|
|
Partially addresses #252.
This fixes the infinite loop, and brings the JS parser into
agreement with cmark, but both still have bad output in this
case, so more work is needed.
|
|
This improves parsing of emphasis around punctuation.
Background:
http://talk.commonmark.org/t/emphasis-inside-strong-broken-in-js-implementation-when-parenthesis-involved/903/6
The basic idea of the change is that if the delimiter is part of
a delimiter clump that has punctuation to the left and a normal
character (non-space, non-punctuation) to the right, it can only
be an opener. If it has punctuation to the right and a normal
character (non-space, non-punctuation) to the left, it can only be a closer.
This handles cases like
**Gomphocarpus (*Gomphocarpus physocarpus*, syn. *Asclepias
physocarpa*)**
and
**foo "*bar*" foo**
better than before.
The spec section on Emphasis and Strong Emphasis has been extensively
revised. The C and JS implementations have been brought up to date,
and all tests pass.
|
|
|
|
|
|
|
|
In JS, use 'Text' instead of 'Str'.
In spec, use "plain textual content" instead of "strings."
|
|
They were gobbling whitespace after shortcut reference links,
e.g.
[foo] bar
[foo]: url
Closes #214.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Previously there was a rule that nothing in a string of more than 3
`*` or `_` characters could close or start emphasis. This was artifical
and led to strange asymmetries, e.g. you could have
`*a *b**` emph within emph but not `**a **b****` strong within strong.
The new parsing strategy makes it easy to remove this limitation.
Spec, js, and c implementations have been updated. Spec might need
some further grooming.
|
|
It is no longer needed with the new stack-based emphasis parsing.
|
|
|
|
|
|
|
|
|
|
|