prettier/src/language-markdown/parser-markdown.js

131 lines
3.5 KiB
JavaScript
Raw Normal View History

feat: support markdown (#2943) * feat(markdown): inital implementation * feat(markdown): support strong * fix: add missing default value * feat(markdown): support inlineCode * feat: support delete * feat: support link * feat: support image * feat: support blockquote * feat: support heading * feat: support code * feat: support yaml * feat: support html * feat: support list * feat: support thematicBreak * feat: support table * feat: support linkReference * feat: support imageReference * feat: support definition * feat: support footnote * feat: support footnoteReference * feat: support footnoteDefinition * test(cli): update snapshots * refactor: extract SINGLE_LINE_NODE_TYPES * refactor: printChildren * fix: correct newlines * test: add trailing newline * fix: blockquote formatting * fix: node types * fix: break line correctly * fix: remove unnecessary properties to make AST_COMPARE happy * fix: escape `|` in tableCell content * fix: unexpected line break * fix: ast difference from loose list * fix: html break lines * refactor: fix linting * fix: normalize ast * fix: escape specific chars * test: add more tests * fix: build markdown parser * chore: remove unnecessary *.log * fix: escape html entity * feat: support prettier-ignore * fix: line break for non-loose listItem * feat: support formatting `code` based on `lang` * fix: add `jsx` and `tsx` * fix: use multiparser * refactor: fix linting * test: update test case 😉 * feat: switch to `_` style emphasis * fix: sequence list should use different prefix * test: add tests * fix: do not print additional new line after `prettier-ignore` * fix(list): enforce `1.` to avoid unnecessary git diff * feat: enable `commonmark` option * feat: support `break` * fix: escape backslash * refactor: escape html entity using backslash * fix: respect autolink-style link * feat: support md`...` and markdown`...` * docs: replace ands with commas * fix: respect indented code block * fix: respect html entity * docs: add docs for modified MDAST * fix: inlineCode is breakline-able * feat: support backtick in inlineCode * feat: support a-lot-of-backtick in fenced code block * feat: use `~~~`-style code block in js template * fix: respect escaped chars * fix: use `*`-style emphasis for invalid `_`-style output * test: add test cases * fix: use `- - -`-style thematicBreak to avoid conflict with yaml * fix: remain the same content for linkReference identifier * fix: `inlineCode` gap can be a line break * fix: `html` should not print trailing spaces if it's in root * refactor: fix typo * fix: wrap `definition`'s url if there's whitespace * fix: remove unnecessary whitespace at the end of paragraph * fix: fix: remove unnecessary whitespace at the start of paragraph * fix: setence children length is possible 0 * fix: support continuous ordered list * fix: do not print addtional hardline after loose list * fix: use double-backtick style for single-backtick value in inlineCode * fix: support nested emphasis * fix: support space-url in link/image * fix: escape `)` in link/image url * fix: support single-quote in link/image/definition title * fix: respect alt in image/imageReference * fix: use `*`-style thematicBreak in list * fix: loose/tight list linebreaks * fix: print third linebreak before indented code block with a tight list in the previous * test: move bug cases * fix: remove unnecessary linebreaks * refactor: fix typo
2017-10-12 01:46:44 +03:00
"use strict";
const remarkFrontmatter = require("remark-frontmatter");
const remarkParse = require("remark-parse");
const unified = require("unified");
const util = require("../common/util");
feat: support markdown (#2943) * feat(markdown): inital implementation * feat(markdown): support strong * fix: add missing default value * feat(markdown): support inlineCode * feat: support delete * feat: support link * feat: support image * feat: support blockquote * feat: support heading * feat: support code * feat: support yaml * feat: support html * feat: support list * feat: support thematicBreak * feat: support table * feat: support linkReference * feat: support imageReference * feat: support definition * feat: support footnote * feat: support footnoteReference * feat: support footnoteDefinition * test(cli): update snapshots * refactor: extract SINGLE_LINE_NODE_TYPES * refactor: printChildren * fix: correct newlines * test: add trailing newline * fix: blockquote formatting * fix: node types * fix: break line correctly * fix: remove unnecessary properties to make AST_COMPARE happy * fix: escape `|` in tableCell content * fix: unexpected line break * fix: ast difference from loose list * fix: html break lines * refactor: fix linting * fix: normalize ast * fix: escape specific chars * test: add more tests * fix: build markdown parser * chore: remove unnecessary *.log * fix: escape html entity * feat: support prettier-ignore * fix: line break for non-loose listItem * feat: support formatting `code` based on `lang` * fix: add `jsx` and `tsx` * fix: use multiparser * refactor: fix linting * test: update test case 😉 * feat: switch to `_` style emphasis * fix: sequence list should use different prefix * test: add tests * fix: do not print additional new line after `prettier-ignore` * fix(list): enforce `1.` to avoid unnecessary git diff * feat: enable `commonmark` option * feat: support `break` * fix: escape backslash * refactor: escape html entity using backslash * fix: respect autolink-style link * feat: support md`...` and markdown`...` * docs: replace ands with commas * fix: respect indented code block * fix: respect html entity * docs: add docs for modified MDAST * fix: inlineCode is breakline-able * feat: support backtick in inlineCode * feat: support a-lot-of-backtick in fenced code block * feat: use `~~~`-style code block in js template * fix: respect escaped chars * fix: use `*`-style emphasis for invalid `_`-style output * test: add test cases * fix: use `- - -`-style thematicBreak to avoid conflict with yaml * fix: remain the same content for linkReference identifier * fix: `inlineCode` gap can be a line break * fix: `html` should not print trailing spaces if it's in root * refactor: fix typo * fix: wrap `definition`'s url if there's whitespace * fix: remove unnecessary whitespace at the end of paragraph * fix: fix: remove unnecessary whitespace at the start of paragraph * fix: setence children length is possible 0 * fix: support continuous ordered list * fix: do not print addtional hardline after loose list * fix: use double-backtick style for single-backtick value in inlineCode * fix: support nested emphasis * fix: support space-url in link/image * fix: escape `)` in link/image url * fix: support single-quote in link/image/definition title * fix: respect alt in image/imageReference * fix: use `*`-style thematicBreak in list * fix: loose/tight list linebreaks * fix: print third linebreak before indented code block with a tight list in the previous * test: move bug cases * fix: remove unnecessary linebreaks * refactor: fix typo
2017-10-12 01:46:44 +03:00
/**
* based on [MDAST](https://github.com/syntax-tree/mdast) with following modifications:
*
feat: support markdown (#2943) * feat(markdown): inital implementation * feat(markdown): support strong * fix: add missing default value * feat(markdown): support inlineCode * feat: support delete * feat: support link * feat: support image * feat: support blockquote * feat: support heading * feat: support code * feat: support yaml * feat: support html * feat: support list * feat: support thematicBreak * feat: support table * feat: support linkReference * feat: support imageReference * feat: support definition * feat: support footnote * feat: support footnoteReference * feat: support footnoteDefinition * test(cli): update snapshots * refactor: extract SINGLE_LINE_NODE_TYPES * refactor: printChildren * fix: correct newlines * test: add trailing newline * fix: blockquote formatting * fix: node types * fix: break line correctly * fix: remove unnecessary properties to make AST_COMPARE happy * fix: escape `|` in tableCell content * fix: unexpected line break * fix: ast difference from loose list * fix: html break lines * refactor: fix linting * fix: normalize ast * fix: escape specific chars * test: add more tests * fix: build markdown parser * chore: remove unnecessary *.log * fix: escape html entity * feat: support prettier-ignore * fix: line break for non-loose listItem * feat: support formatting `code` based on `lang` * fix: add `jsx` and `tsx` * fix: use multiparser * refactor: fix linting * test: update test case 😉 * feat: switch to `_` style emphasis * fix: sequence list should use different prefix * test: add tests * fix: do not print additional new line after `prettier-ignore` * fix(list): enforce `1.` to avoid unnecessary git diff * feat: enable `commonmark` option * feat: support `break` * fix: escape backslash * refactor: escape html entity using backslash * fix: respect autolink-style link * feat: support md`...` and markdown`...` * docs: replace ands with commas * fix: respect indented code block * fix: respect html entity * docs: add docs for modified MDAST * fix: inlineCode is breakline-able * feat: support backtick in inlineCode * feat: support a-lot-of-backtick in fenced code block * feat: use `~~~`-style code block in js template * fix: respect escaped chars * fix: use `*`-style emphasis for invalid `_`-style output * test: add test cases * fix: use `- - -`-style thematicBreak to avoid conflict with yaml * fix: remain the same content for linkReference identifier * fix: `inlineCode` gap can be a line break * fix: `html` should not print trailing spaces if it's in root * refactor: fix typo * fix: wrap `definition`'s url if there's whitespace * fix: remove unnecessary whitespace at the end of paragraph * fix: fix: remove unnecessary whitespace at the start of paragraph * fix: setence children length is possible 0 * fix: support continuous ordered list * fix: do not print addtional hardline after loose list * fix: use double-backtick style for single-backtick value in inlineCode * fix: support nested emphasis * fix: support space-url in link/image * fix: escape `)` in link/image url * fix: support single-quote in link/image/definition title * fix: respect alt in image/imageReference * fix: use `*`-style thematicBreak in list * fix: loose/tight list linebreaks * fix: print third linebreak before indented code block with a tight list in the previous * test: move bug cases * fix: remove unnecessary linebreaks * refactor: fix typo
2017-10-12 01:46:44 +03:00
* 1. restore unescaped character (Text)
* 2. merge continuous Texts
* 3. replace whitespaces in InlineCode#value with one whitespace
* reference: http://spec.commonmark.org/0.25/#example-605
feat: support markdown (#2943) * feat(markdown): inital implementation * feat(markdown): support strong * fix: add missing default value * feat(markdown): support inlineCode * feat: support delete * feat: support link * feat: support image * feat: support blockquote * feat: support heading * feat: support code * feat: support yaml * feat: support html * feat: support list * feat: support thematicBreak * feat: support table * feat: support linkReference * feat: support imageReference * feat: support definition * feat: support footnote * feat: support footnoteReference * feat: support footnoteDefinition * test(cli): update snapshots * refactor: extract SINGLE_LINE_NODE_TYPES * refactor: printChildren * fix: correct newlines * test: add trailing newline * fix: blockquote formatting * fix: node types * fix: break line correctly * fix: remove unnecessary properties to make AST_COMPARE happy * fix: escape `|` in tableCell content * fix: unexpected line break * fix: ast difference from loose list * fix: html break lines * refactor: fix linting * fix: normalize ast * fix: escape specific chars * test: add more tests * fix: build markdown parser * chore: remove unnecessary *.log * fix: escape html entity * feat: support prettier-ignore * fix: line break for non-loose listItem * feat: support formatting `code` based on `lang` * fix: add `jsx` and `tsx` * fix: use multiparser * refactor: fix linting * test: update test case 😉 * feat: switch to `_` style emphasis * fix: sequence list should use different prefix * test: add tests * fix: do not print additional new line after `prettier-ignore` * fix(list): enforce `1.` to avoid unnecessary git diff * feat: enable `commonmark` option * feat: support `break` * fix: escape backslash * refactor: escape html entity using backslash * fix: respect autolink-style link * feat: support md`...` and markdown`...` * docs: replace ands with commas * fix: respect indented code block * fix: respect html entity * docs: add docs for modified MDAST * fix: inlineCode is breakline-able * feat: support backtick in inlineCode * feat: support a-lot-of-backtick in fenced code block * feat: use `~~~`-style code block in js template * fix: respect escaped chars * fix: use `*`-style emphasis for invalid `_`-style output * test: add test cases * fix: use `- - -`-style thematicBreak to avoid conflict with yaml * fix: remain the same content for linkReference identifier * fix: `inlineCode` gap can be a line break * fix: `html` should not print trailing spaces if it's in root * refactor: fix typo * fix: wrap `definition`'s url if there's whitespace * fix: remove unnecessary whitespace at the end of paragraph * fix: fix: remove unnecessary whitespace at the start of paragraph * fix: setence children length is possible 0 * fix: support continuous ordered list * fix: do not print addtional hardline after loose list * fix: use double-backtick style for single-backtick value in inlineCode * fix: support nested emphasis * fix: support space-url in link/image * fix: escape `)` in link/image url * fix: support single-quote in link/image/definition title * fix: respect alt in image/imageReference * fix: use `*`-style thematicBreak in list * fix: loose/tight list linebreaks * fix: print third linebreak before indented code block with a tight list in the previous * test: move bug cases * fix: remove unnecessary linebreaks * refactor: fix typo
2017-10-12 01:46:44 +03:00
* 4. split Text into Sentence
*
feat: support markdown (#2943) * feat(markdown): inital implementation * feat(markdown): support strong * fix: add missing default value * feat(markdown): support inlineCode * feat: support delete * feat: support link * feat: support image * feat: support blockquote * feat: support heading * feat: support code * feat: support yaml * feat: support html * feat: support list * feat: support thematicBreak * feat: support table * feat: support linkReference * feat: support imageReference * feat: support definition * feat: support footnote * feat: support footnoteReference * feat: support footnoteDefinition * test(cli): update snapshots * refactor: extract SINGLE_LINE_NODE_TYPES * refactor: printChildren * fix: correct newlines * test: add trailing newline * fix: blockquote formatting * fix: node types * fix: break line correctly * fix: remove unnecessary properties to make AST_COMPARE happy * fix: escape `|` in tableCell content * fix: unexpected line break * fix: ast difference from loose list * fix: html break lines * refactor: fix linting * fix: normalize ast * fix: escape specific chars * test: add more tests * fix: build markdown parser * chore: remove unnecessary *.log * fix: escape html entity * feat: support prettier-ignore * fix: line break for non-loose listItem * feat: support formatting `code` based on `lang` * fix: add `jsx` and `tsx` * fix: use multiparser * refactor: fix linting * test: update test case 😉 * feat: switch to `_` style emphasis * fix: sequence list should use different prefix * test: add tests * fix: do not print additional new line after `prettier-ignore` * fix(list): enforce `1.` to avoid unnecessary git diff * feat: enable `commonmark` option * feat: support `break` * fix: escape backslash * refactor: escape html entity using backslash * fix: respect autolink-style link * feat: support md`...` and markdown`...` * docs: replace ands with commas * fix: respect indented code block * fix: respect html entity * docs: add docs for modified MDAST * fix: inlineCode is breakline-able * feat: support backtick in inlineCode * feat: support a-lot-of-backtick in fenced code block * feat: use `~~~`-style code block in js template * fix: respect escaped chars * fix: use `*`-style emphasis for invalid `_`-style output * test: add test cases * fix: use `- - -`-style thematicBreak to avoid conflict with yaml * fix: remain the same content for linkReference identifier * fix: `inlineCode` gap can be a line break * fix: `html` should not print trailing spaces if it's in root * refactor: fix typo * fix: wrap `definition`'s url if there's whitespace * fix: remove unnecessary whitespace at the end of paragraph * fix: fix: remove unnecessary whitespace at the start of paragraph * fix: setence children length is possible 0 * fix: support continuous ordered list * fix: do not print addtional hardline after loose list * fix: use double-backtick style for single-backtick value in inlineCode * fix: support nested emphasis * fix: support space-url in link/image * fix: escape `)` in link/image url * fix: support single-quote in link/image/definition title * fix: respect alt in image/imageReference * fix: use `*`-style thematicBreak in list * fix: loose/tight list linebreaks * fix: print third linebreak before indented code block with a tight list in the previous * test: move bug cases * fix: remove unnecessary linebreaks * refactor: fix typo
2017-10-12 01:46:44 +03:00
* interface Word { value: string }
* interface Whitespace { value: string }
* interface Sentence { children: Array<Word | Whitespace> }
* interface InlineCode { children: Array<Sentence> }
*/
function parse(text /*, parsers, opts*/) {
const processor = unified()
.use(remarkParse, { footnotes: true, commonmark: true })
2017-11-19 09:38:25 +03:00
.use(remarkFrontmatter, ["yaml", "toml"])
feat: support markdown (#2943) * feat(markdown): inital implementation * feat(markdown): support strong * fix: add missing default value * feat(markdown): support inlineCode * feat: support delete * feat: support link * feat: support image * feat: support blockquote * feat: support heading * feat: support code * feat: support yaml * feat: support html * feat: support list * feat: support thematicBreak * feat: support table * feat: support linkReference * feat: support imageReference * feat: support definition * feat: support footnote * feat: support footnoteReference * feat: support footnoteDefinition * test(cli): update snapshots * refactor: extract SINGLE_LINE_NODE_TYPES * refactor: printChildren * fix: correct newlines * test: add trailing newline * fix: blockquote formatting * fix: node types * fix: break line correctly * fix: remove unnecessary properties to make AST_COMPARE happy * fix: escape `|` in tableCell content * fix: unexpected line break * fix: ast difference from loose list * fix: html break lines * refactor: fix linting * fix: normalize ast * fix: escape specific chars * test: add more tests * fix: build markdown parser * chore: remove unnecessary *.log * fix: escape html entity * feat: support prettier-ignore * fix: line break for non-loose listItem * feat: support formatting `code` based on `lang` * fix: add `jsx` and `tsx` * fix: use multiparser * refactor: fix linting * test: update test case 😉 * feat: switch to `_` style emphasis * fix: sequence list should use different prefix * test: add tests * fix: do not print additional new line after `prettier-ignore` * fix(list): enforce `1.` to avoid unnecessary git diff * feat: enable `commonmark` option * feat: support `break` * fix: escape backslash * refactor: escape html entity using backslash * fix: respect autolink-style link * feat: support md`...` and markdown`...` * docs: replace ands with commas * fix: respect indented code block * fix: respect html entity * docs: add docs for modified MDAST * fix: inlineCode is breakline-able * feat: support backtick in inlineCode * feat: support a-lot-of-backtick in fenced code block * feat: use `~~~`-style code block in js template * fix: respect escaped chars * fix: use `*`-style emphasis for invalid `_`-style output * test: add test cases * fix: use `- - -`-style thematicBreak to avoid conflict with yaml * fix: remain the same content for linkReference identifier * fix: `inlineCode` gap can be a line break * fix: `html` should not print trailing spaces if it's in root * refactor: fix typo * fix: wrap `definition`'s url if there's whitespace * fix: remove unnecessary whitespace at the end of paragraph * fix: fix: remove unnecessary whitespace at the start of paragraph * fix: setence children length is possible 0 * fix: support continuous ordered list * fix: do not print addtional hardline after loose list * fix: use double-backtick style for single-backtick value in inlineCode * fix: support nested emphasis * fix: support space-url in link/image * fix: escape `)` in link/image url * fix: support single-quote in link/image/definition title * fix: respect alt in image/imageReference * fix: use `*`-style thematicBreak in list * fix: loose/tight list linebreaks * fix: print third linebreak before indented code block with a tight list in the previous * test: move bug cases * fix: remove unnecessary linebreaks * refactor: fix typo
2017-10-12 01:46:44 +03:00
.use(restoreUnescapedCharacter(text))
.use(mergeContinuousTexts)
.use(transformInlineCode)
feat: support markdown (#2943) * feat(markdown): inital implementation * feat(markdown): support strong * fix: add missing default value * feat(markdown): support inlineCode * feat: support delete * feat: support link * feat: support image * feat: support blockquote * feat: support heading * feat: support code * feat: support yaml * feat: support html * feat: support list * feat: support thematicBreak * feat: support table * feat: support linkReference * feat: support imageReference * feat: support definition * feat: support footnote * feat: support footnoteReference * feat: support footnoteDefinition * test(cli): update snapshots * refactor: extract SINGLE_LINE_NODE_TYPES * refactor: printChildren * fix: correct newlines * test: add trailing newline * fix: blockquote formatting * fix: node types * fix: break line correctly * fix: remove unnecessary properties to make AST_COMPARE happy * fix: escape `|` in tableCell content * fix: unexpected line break * fix: ast difference from loose list * fix: html break lines * refactor: fix linting * fix: normalize ast * fix: escape specific chars * test: add more tests * fix: build markdown parser * chore: remove unnecessary *.log * fix: escape html entity * feat: support prettier-ignore * fix: line break for non-loose listItem * feat: support formatting `code` based on `lang` * fix: add `jsx` and `tsx` * fix: use multiparser * refactor: fix linting * test: update test case 😉 * feat: switch to `_` style emphasis * fix: sequence list should use different prefix * test: add tests * fix: do not print additional new line after `prettier-ignore` * fix(list): enforce `1.` to avoid unnecessary git diff * feat: enable `commonmark` option * feat: support `break` * fix: escape backslash * refactor: escape html entity using backslash * fix: respect autolink-style link * feat: support md`...` and markdown`...` * docs: replace ands with commas * fix: respect indented code block * fix: respect html entity * docs: add docs for modified MDAST * fix: inlineCode is breakline-able * feat: support backtick in inlineCode * feat: support a-lot-of-backtick in fenced code block * feat: use `~~~`-style code block in js template * fix: respect escaped chars * fix: use `*`-style emphasis for invalid `_`-style output * test: add test cases * fix: use `- - -`-style thematicBreak to avoid conflict with yaml * fix: remain the same content for linkReference identifier * fix: `inlineCode` gap can be a line break * fix: `html` should not print trailing spaces if it's in root * refactor: fix typo * fix: wrap `definition`'s url if there's whitespace * fix: remove unnecessary whitespace at the end of paragraph * fix: fix: remove unnecessary whitespace at the start of paragraph * fix: setence children length is possible 0 * fix: support continuous ordered list * fix: do not print addtional hardline after loose list * fix: use double-backtick style for single-backtick value in inlineCode * fix: support nested emphasis * fix: support space-url in link/image * fix: escape `)` in link/image url * fix: support single-quote in link/image/definition title * fix: respect alt in image/imageReference * fix: use `*`-style thematicBreak in list * fix: loose/tight list linebreaks * fix: print third linebreak before indented code block with a tight list in the previous * test: move bug cases * fix: remove unnecessary linebreaks * refactor: fix typo
2017-10-12 01:46:44 +03:00
.use(splitText);
return processor.runSync(processor.parse(text));
}
function map(ast, handler) {
return (function preorder(node, index, parentNode) {
const newNode = Object.assign({}, handler(node, index, parentNode));
if (newNode.children) {
newNode.children = newNode.children.map((child, index) => {
return preorder(child, index, newNode);
});
}
return newNode;
})(ast, null, null);
}
function transformInlineCode() {
return ast =>
feat: support markdown (#2943) * feat(markdown): inital implementation * feat(markdown): support strong * fix: add missing default value * feat(markdown): support inlineCode * feat: support delete * feat: support link * feat: support image * feat: support blockquote * feat: support heading * feat: support code * feat: support yaml * feat: support html * feat: support list * feat: support thematicBreak * feat: support table * feat: support linkReference * feat: support imageReference * feat: support definition * feat: support footnote * feat: support footnoteReference * feat: support footnoteDefinition * test(cli): update snapshots * refactor: extract SINGLE_LINE_NODE_TYPES * refactor: printChildren * fix: correct newlines * test: add trailing newline * fix: blockquote formatting * fix: node types * fix: break line correctly * fix: remove unnecessary properties to make AST_COMPARE happy * fix: escape `|` in tableCell content * fix: unexpected line break * fix: ast difference from loose list * fix: html break lines * refactor: fix linting * fix: normalize ast * fix: escape specific chars * test: add more tests * fix: build markdown parser * chore: remove unnecessary *.log * fix: escape html entity * feat: support prettier-ignore * fix: line break for non-loose listItem * feat: support formatting `code` based on `lang` * fix: add `jsx` and `tsx` * fix: use multiparser * refactor: fix linting * test: update test case 😉 * feat: switch to `_` style emphasis * fix: sequence list should use different prefix * test: add tests * fix: do not print additional new line after `prettier-ignore` * fix(list): enforce `1.` to avoid unnecessary git diff * feat: enable `commonmark` option * feat: support `break` * fix: escape backslash * refactor: escape html entity using backslash * fix: respect autolink-style link * feat: support md`...` and markdown`...` * docs: replace ands with commas * fix: respect indented code block * fix: respect html entity * docs: add docs for modified MDAST * fix: inlineCode is breakline-able * feat: support backtick in inlineCode * feat: support a-lot-of-backtick in fenced code block * feat: use `~~~`-style code block in js template * fix: respect escaped chars * fix: use `*`-style emphasis for invalid `_`-style output * test: add test cases * fix: use `- - -`-style thematicBreak to avoid conflict with yaml * fix: remain the same content for linkReference identifier * fix: `inlineCode` gap can be a line break * fix: `html` should not print trailing spaces if it's in root * refactor: fix typo * fix: wrap `definition`'s url if there's whitespace * fix: remove unnecessary whitespace at the end of paragraph * fix: fix: remove unnecessary whitespace at the start of paragraph * fix: setence children length is possible 0 * fix: support continuous ordered list * fix: do not print addtional hardline after loose list * fix: use double-backtick style for single-backtick value in inlineCode * fix: support nested emphasis * fix: support space-url in link/image * fix: escape `)` in link/image url * fix: support single-quote in link/image/definition title * fix: respect alt in image/imageReference * fix: use `*`-style thematicBreak in list * fix: loose/tight list linebreaks * fix: print third linebreak before indented code block with a tight list in the previous * test: move bug cases * fix: remove unnecessary linebreaks * refactor: fix typo
2017-10-12 01:46:44 +03:00
map(ast, node => {
if (node.type !== "inlineCode") {
return node;
}
return Object.assign({}, node, {
value: node.value.replace(/\s+/g, " ")
feat: support markdown (#2943) * feat(markdown): inital implementation * feat(markdown): support strong * fix: add missing default value * feat(markdown): support inlineCode * feat: support delete * feat: support link * feat: support image * feat: support blockquote * feat: support heading * feat: support code * feat: support yaml * feat: support html * feat: support list * feat: support thematicBreak * feat: support table * feat: support linkReference * feat: support imageReference * feat: support definition * feat: support footnote * feat: support footnoteReference * feat: support footnoteDefinition * test(cli): update snapshots * refactor: extract SINGLE_LINE_NODE_TYPES * refactor: printChildren * fix: correct newlines * test: add trailing newline * fix: blockquote formatting * fix: node types * fix: break line correctly * fix: remove unnecessary properties to make AST_COMPARE happy * fix: escape `|` in tableCell content * fix: unexpected line break * fix: ast difference from loose list * fix: html break lines * refactor: fix linting * fix: normalize ast * fix: escape specific chars * test: add more tests * fix: build markdown parser * chore: remove unnecessary *.log * fix: escape html entity * feat: support prettier-ignore * fix: line break for non-loose listItem * feat: support formatting `code` based on `lang` * fix: add `jsx` and `tsx` * fix: use multiparser * refactor: fix linting * test: update test case 😉 * feat: switch to `_` style emphasis * fix: sequence list should use different prefix * test: add tests * fix: do not print additional new line after `prettier-ignore` * fix(list): enforce `1.` to avoid unnecessary git diff * feat: enable `commonmark` option * feat: support `break` * fix: escape backslash * refactor: escape html entity using backslash * fix: respect autolink-style link * feat: support md`...` and markdown`...` * docs: replace ands with commas * fix: respect indented code block * fix: respect html entity * docs: add docs for modified MDAST * fix: inlineCode is breakline-able * feat: support backtick in inlineCode * feat: support a-lot-of-backtick in fenced code block * feat: use `~~~`-style code block in js template * fix: respect escaped chars * fix: use `*`-style emphasis for invalid `_`-style output * test: add test cases * fix: use `- - -`-style thematicBreak to avoid conflict with yaml * fix: remain the same content for linkReference identifier * fix: `inlineCode` gap can be a line break * fix: `html` should not print trailing spaces if it's in root * refactor: fix typo * fix: wrap `definition`'s url if there's whitespace * fix: remove unnecessary whitespace at the end of paragraph * fix: fix: remove unnecessary whitespace at the start of paragraph * fix: setence children length is possible 0 * fix: support continuous ordered list * fix: do not print addtional hardline after loose list * fix: use double-backtick style for single-backtick value in inlineCode * fix: support nested emphasis * fix: support space-url in link/image * fix: escape `)` in link/image url * fix: support single-quote in link/image/definition title * fix: respect alt in image/imageReference * fix: use `*`-style thematicBreak in list * fix: loose/tight list linebreaks * fix: print third linebreak before indented code block with a tight list in the previous * test: move bug cases * fix: remove unnecessary linebreaks * refactor: fix typo
2017-10-12 01:46:44 +03:00
});
});
}
function restoreUnescapedCharacter(originalText) {
return () => ast =>
map(ast, node => {
return node.type !== "text"
? node
: Object.assign({}, node, {
value:
node.value !== "*" &&
node.value !== "_" && // handle these two cases in printer
node.value.length === 1 &&
node.position.end.offset - node.position.start.offset > 1
? originalText.slice(
node.position.start.offset,
node.position.end.offset
)
: node.value
});
});
}
function mergeContinuousTexts() {
return ast =>
map(ast, node => {
if (!node.children) {
return node;
}
const children = node.children.reduce((current, child) => {
const lastChild = current[current.length - 1];
if (lastChild && lastChild.type === "text" && child.type === "text") {
current.splice(-1, 1, {
type: "text",
value: lastChild.value + child.value,
position: {
start: lastChild.position.start,
end: child.position.end
}
});
} else {
current.push(child);
}
return current;
}, []);
return Object.assign({}, node, { children });
});
}
function splitText() {
return ast =>
map(ast, (node, index, parentNode) => {
if (node.type !== "text") {
return node;
}
let value = node.value;
if (parentNode.type === "paragraph") {
if (index === 0) {
value = value.trimLeft();
}
if (index === parentNode.children.length - 1) {
value = value.trimRight();
}
}
return {
type: "sentence",
position: node.position,
children: util.splitText(value)
feat: support markdown (#2943) * feat(markdown): inital implementation * feat(markdown): support strong * fix: add missing default value * feat(markdown): support inlineCode * feat: support delete * feat: support link * feat: support image * feat: support blockquote * feat: support heading * feat: support code * feat: support yaml * feat: support html * feat: support list * feat: support thematicBreak * feat: support table * feat: support linkReference * feat: support imageReference * feat: support definition * feat: support footnote * feat: support footnoteReference * feat: support footnoteDefinition * test(cli): update snapshots * refactor: extract SINGLE_LINE_NODE_TYPES * refactor: printChildren * fix: correct newlines * test: add trailing newline * fix: blockquote formatting * fix: node types * fix: break line correctly * fix: remove unnecessary properties to make AST_COMPARE happy * fix: escape `|` in tableCell content * fix: unexpected line break * fix: ast difference from loose list * fix: html break lines * refactor: fix linting * fix: normalize ast * fix: escape specific chars * test: add more tests * fix: build markdown parser * chore: remove unnecessary *.log * fix: escape html entity * feat: support prettier-ignore * fix: line break for non-loose listItem * feat: support formatting `code` based on `lang` * fix: add `jsx` and `tsx` * fix: use multiparser * refactor: fix linting * test: update test case 😉 * feat: switch to `_` style emphasis * fix: sequence list should use different prefix * test: add tests * fix: do not print additional new line after `prettier-ignore` * fix(list): enforce `1.` to avoid unnecessary git diff * feat: enable `commonmark` option * feat: support `break` * fix: escape backslash * refactor: escape html entity using backslash * fix: respect autolink-style link * feat: support md`...` and markdown`...` * docs: replace ands with commas * fix: respect indented code block * fix: respect html entity * docs: add docs for modified MDAST * fix: inlineCode is breakline-able * feat: support backtick in inlineCode * feat: support a-lot-of-backtick in fenced code block * feat: use `~~~`-style code block in js template * fix: respect escaped chars * fix: use `*`-style emphasis for invalid `_`-style output * test: add test cases * fix: use `- - -`-style thematicBreak to avoid conflict with yaml * fix: remain the same content for linkReference identifier * fix: `inlineCode` gap can be a line break * fix: `html` should not print trailing spaces if it's in root * refactor: fix typo * fix: wrap `definition`'s url if there's whitespace * fix: remove unnecessary whitespace at the end of paragraph * fix: fix: remove unnecessary whitespace at the start of paragraph * fix: setence children length is possible 0 * fix: support continuous ordered list * fix: do not print addtional hardline after loose list * fix: use double-backtick style for single-backtick value in inlineCode * fix: support nested emphasis * fix: support space-url in link/image * fix: escape `)` in link/image url * fix: support single-quote in link/image/definition title * fix: respect alt in image/imageReference * fix: use `*`-style thematicBreak in list * fix: loose/tight list linebreaks * fix: print third linebreak before indented code block with a tight list in the previous * test: move bug cases * fix: remove unnecessary linebreaks * refactor: fix typo
2017-10-12 01:46:44 +03:00
};
});
}
module.exports = parse;