UNPKG

course-renderer

Version:

Manages CA School Courses file system storage and HTML conversion

70 lines (69 loc) 2.63 kB
"use strict"; // Based from markdown-it fence rule Object.defineProperty(exports, "__esModule", { value: true }); const TICK_MARKER = 0x60; /* ` */ const TILDE_MARKER = 0x7E; /* ~ */ function fence(reader, tokens, silent, options) { const currentLine = reader.currentLine; let pos, initialPos; pos = initialPos = reader.getCurrentLineStartPos(); const marker = reader.getCharCode(pos); if (marker !== TICK_MARKER && marker !== TILDE_MARKER) return false; let mem = pos; pos = reader.skipChars(pos, marker); const len = pos - mem; if (len < 3) return false; // Get the current line string const fenceLine = reader.getLine(reader.currentLine); const markup = fenceLine.slice(0, len); const params = fenceLine.slice(len); if (params.indexOf(String.fromCharCode(marker)) >= 0) return false; // Since start is found, we can report success here for silent mode if (silent) return true; let hasEndMarker = false; for (;;) { reader.currentLine++; reader.skipEmptyLines(); if (reader.currentLine >= reader.maxLine) break; pos = mem = reader.skipEmptyChars(); let max = reader.getCurrentLineEndPos(); if (reader.getCharCode(pos) !== marker) continue; pos = reader.skipChars(pos, marker); if (pos - mem < len) continue; pos = reader.skipEmptyChars(pos); if (pos < max) continue; hasEndMarker = true; break; } let token; if (options.sectionMode && options.replMode) { const sectionTokChildren = tokens[tokens.length - 1].children; const replTok = sectionTokChildren[sectionTokChildren.length - 1]; token = replTok.children[replTok.children.length - 1]; } else if (options.sectionMode || options.replMode) { const lastToken = tokens[tokens.length - 1]; token = lastToken.children[lastToken.children.length - 1]; } else { token = tokens[tokens.length - 1]; } token.addCode(reader.getLines(currentLine + 1, reader.currentLine - (hasEndMarker ? 1 : 0))); token.addParam(params.trim()); if (token.getCodes().length > 1) { // Let's check if the number of code we have is less or equal to the the number of files. if (token.getCodes().length > token.getFiles().length) { throw new Error(`Found more fence block than the number files mentioned on the annotation near ${currentLine} ${JSON.stringify(token, null, 4)}`); } } return true; } exports.fence = fence;