summaryrefslogtreecommitdiff
path: root/packages/markdown-it-14.1.0/lib/rules_block/heading.mjs
diff options
context:
space:
mode:
authoraltaf-creator <dev@altafcreator.com>2024-05-12 12:14:02 +0700
committeraltaf-creator <dev@altafcreator.com>2024-05-12 12:14:02 +0700
commitd607ac12097afb5cb6f398a4e7b5cf4316efedc6 (patch)
tree6f4bc5b98a6ff3a1c3189f7ef9b570c0481e100d /packages/markdown-it-14.1.0/lib/rules_block/heading.mjs
parent7441f212967256ac4c9a93ba0b1f026308a8bfb6 (diff)
self host
Diffstat (limited to 'packages/markdown-it-14.1.0/lib/rules_block/heading.mjs')
-rw-r--r--packages/markdown-it-14.1.0/lib/rules_block/heading.mjs51
1 files changed, 51 insertions, 0 deletions
diff --git a/packages/markdown-it-14.1.0/lib/rules_block/heading.mjs b/packages/markdown-it-14.1.0/lib/rules_block/heading.mjs
new file mode 100644
index 0000000..d2f7b79
--- /dev/null
+++ b/packages/markdown-it-14.1.0/lib/rules_block/heading.mjs
@@ -0,0 +1,51 @@
+// heading (#, ##, ...)
+
+import { isSpace } from '../common/utils.mjs'
+
+export default function heading (state, startLine, endLine, silent) {
+ let pos = state.bMarks[startLine] + state.tShift[startLine]
+ let 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 ch = state.src.charCodeAt(pos)
+
+ if (ch !== 0x23/* # */ || pos >= max) { return false }
+
+ // count heading level
+ let level = 1
+ ch = state.src.charCodeAt(++pos)
+ while (ch === 0x23/* # */ && pos < max && level <= 6) {
+ level++
+ ch = state.src.charCodeAt(++pos)
+ }
+
+ if (level > 6 || (pos < max && !isSpace(ch))) { return false }
+
+ if (silent) { return true }
+
+ // Let's cut tails like ' ### ' from the end of string
+
+ max = state.skipSpacesBack(max, pos)
+ const tmp = state.skipCharsBack(max, 0x23, pos) // #
+ if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {
+ max = tmp
+ }
+
+ state.line = startLine + 1
+
+ const token_o = state.push('heading_open', 'h' + String(level), 1)
+ token_o.markup = '########'.slice(0, level)
+ token_o.map = [startLine, state.line]
+
+ const token_i = state.push('inline', '', 0)
+ token_i.content = state.src.slice(pos, max).trim()
+ token_i.map = [startLine, state.line]
+ token_i.children = []
+
+ const token_c = state.push('heading_close', 'h' + String(level), -1)
+ token_c.markup = '########'.slice(0, level)
+
+ return true
+}