踊る犬.netブログ (旧)

Markdown-Itで独自レンダリングする方法

軽量でPluggableなJS製Markdownパーサ&レンダラのMarkdown-It
例えばaタグは全てtarget="_blank"にしたいなどの要求を実現するにはレンダラの処理を一部変更する必要がある。
その変更方法について説明する。

md.renderer.rulesを書き換える

以下のようにlink_openという名前のルールを書き換えることで、target="_blank"をデフォルトに出来る。

const md = new MarkdownIt()

// Remember old renderer, if overriden, or proxy to default renderer
var defaultRender = md.renderer.rules.link_open || function(tokens, idx, options, env, self) {
  return self.renderToken(tokens, idx, options)
}

md.renderer.rules.link_open = function (tokens, idx, options, env, self) {
  // If you are sure other plugins can't add `target` - drop check below
  var aIndex = tokens[idx].attrIndex('target')

  if (aIndex < 0) {
    tokens[idx].attrPush(['target', '_blank']) // add new attribute
  } else {
    tokens[idx].attrs[aIndex][1] = '_blank'    // replace value of existing attr
  }

  // pass token to default renderer.
  return defaultRender(tokens, idx, options, env, self)
}

参考