code: function createParse({ isMDX }) {
    return text => {
      const processor = unified()
        .use(
          remarkParse,
          Object.assign(
            {
              footnotes: true,
              commonmark: true
            },
            isMDX && { blocks: [mdx.BLOCKS_REGEX] }
          )
        )
        .use(frontMatter)
        .use(remarkMath)
        .use(isMDX ? mdx.esSyntax : identity)
        .use(liquid)
        .use(isMDX ? htmlToJsx : identity);
      return processor.runSync(processor.parse(text));
    };
  }
docs: based on [MDAST](https://github.com/syntax-tree/mdast) with following modifications:
  
  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
  4. split Text into Sentence
  
  interface Word { value: string }
  interface Whitespace { value: string }
  interface Sentence { children: Array<Word | Whitespace> }
  interface InlineCode { children: Array<Sentence> }