summaryrefslogtreecommitdiff
path: root/packages/markdown-it-14.1.0/lib/rules_inline/backticks.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'packages/markdown-it-14.1.0/lib/rules_inline/backticks.mjs')
-rw-r--r--packages/markdown-it-14.1.0/lib/rules_inline/backticks.mjs60
1 files changed, 60 insertions, 0 deletions
diff --git a/packages/markdown-it-14.1.0/lib/rules_inline/backticks.mjs b/packages/markdown-it-14.1.0/lib/rules_inline/backticks.mjs
new file mode 100644
index 0000000..5b926d0
--- /dev/null
+++ b/packages/markdown-it-14.1.0/lib/rules_inline/backticks.mjs
@@ -0,0 +1,60 @@
+// Parse backticks
+
+export default function backtick (state, silent) {
+ let pos = state.pos
+ const ch = state.src.charCodeAt(pos)
+
+ if (ch !== 0x60/* ` */) { return false }
+
+ const start = pos
+ pos++
+ const max = state.posMax
+
+ // scan marker length
+ while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++ }
+
+ const marker = state.src.slice(start, pos)
+ const openerLength = marker.length
+
+ if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {
+ if (!silent) state.pending += marker
+ state.pos += openerLength
+ return true
+ }
+
+ let matchEnd = pos
+ let matchStart
+
+ // Nothing found in the cache, scan until the end of the line (or until marker is found)
+ while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {
+ matchEnd = matchStart + 1
+
+ // scan marker length
+ while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++ }
+
+ const closerLength = matchEnd - matchStart
+
+ if (closerLength === openerLength) {
+ // Found matching closer length.
+ if (!silent) {
+ const token = state.push('code_inline', 'code', 0)
+ token.markup = marker
+ token.content = state.src.slice(pos, matchStart)
+ .replace(/\n/g, ' ')
+ .replace(/^ (.+) $/, '$1')
+ }
+ state.pos = matchEnd
+ return true
+ }
+
+ // Some different length found, put it in cache as upper limit of where closer can be found
+ state.backticks[closerLength] = matchStart
+ }
+
+ // Scanned through the end, didn't find anything
+ state.backticksScanned = true
+
+ if (!silent) state.pending += marker
+ state.pos += openerLength
+ return true
+}