diff options
Diffstat (limited to 'packages/markdown-it-14.1.0/lib/rules_block/hr.mjs')
| -rw-r--r-- | packages/markdown-it-14.1.0/lib/rules_block/hr.mjs | 40 | 
1 files changed, 40 insertions, 0 deletions
| diff --git a/packages/markdown-it-14.1.0/lib/rules_block/hr.mjs b/packages/markdown-it-14.1.0/lib/rules_block/hr.mjs new file mode 100644 index 0000000..d467b21 --- /dev/null +++ b/packages/markdown-it-14.1.0/lib/rules_block/hr.mjs @@ -0,0 +1,40 @@ +// Horizontal rule + +import { isSpace } from '../common/utils.mjs' + +export default function hr (state, startLine, endLine, silent) { +  const max = state.eMarks[startLine] +  // if it's indented more than 3 spaces, it should be a code block +  if (state.sCount[startLine] - state.blkIndent >= 4) { return false } + +  let pos = state.bMarks[startLine] + state.tShift[startLine] +  const marker = state.src.charCodeAt(pos++) + +  // Check hr marker +  if (marker !== 0x2A/* * */ && +      marker !== 0x2D/* - */ && +      marker !== 0x5F/* _ */) { +    return false +  } + +  // markers can be mixed with spaces, but there should be at least 3 of them + +  let cnt = 1 +  while (pos < max) { +    const ch = state.src.charCodeAt(pos++) +    if (ch !== marker && !isSpace(ch)) { return false } +    if (ch === marker) { cnt++ } +  } + +  if (cnt < 3) { return false } + +  if (silent) { return true } + +  state.line = startLine + 1 + +  const token  = state.push('hr', 'hr', 0) +  token.map    = [startLine, state.line] +  token.markup = Array(cnt + 1).join(String.fromCharCode(marker)) + +  return true +} | 
