Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | 5x 5x 71x 71x 71x 71x 71x 71x 71x 953x 28x 28x 925x 925x 28x 897x 9x 888x 71x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x | import { CommentParser } from '../comment'; import { Options } from '../options'; export class FragmentProcessor { private parser: CommentParser; private fragmentCounter = 1; private orderedListRegex = /^\d\) /g; private codeBlockRegex = /```[^\n]*(?:\n[^`]*\n)```/g; constructor() { this.parser = new CommentParser(); } process(markdown: string, options: Options) { const separatorRegexp = new RegExp(`${options.separator}|${options.verticalSeparator}`, 'gmi'); // Detect line ranges containing Markdown code blocks so we can ignore them const codeBlockLines = Array.from(markdown.matchAll(this.codeBlockRegex)).map(({ 0: match, index }) => ({ from: markdown.substring(0, index).split('\n').length - 1, to: markdown.substring(0, index + match.length).split('\n').length - 1, })); const output = markdown .split('\n') .map((line, lineNumber) => { if (`\n${line}\n`.match(separatorRegexp)) { // Reset counter when encountered slide separator this.fragmentCounter = 1; return line; } const isCodeblockLine = codeBlockLines.some(({ from, to }) => lineNumber >= from && lineNumber <= to); if (isCodeblockLine) { return line; } if (line.trim().startsWith('+ ') || this.orderedListRegex.test(line.trim())) { return this.transformLine(line); } return line; }) .join('\n'); return output; } transformLine(line: string) { const comment = this.parser.parseLine(line) ?? this.parser.buildComment('element'); Iif (line.includes('<!--')) { line = line.substring(0, line.indexOf('<!--')); } if (!comment.hasAttribute('data-fragment-index')) { comment.addAttribute('data-fragment-index', this.fragmentCounter.toString()); if (!comment.hasClass('fragment')) { comment.addClass('fragment'); } this.fragmentCounter++; } // See here: https://github.com/hakimel/reveal.js/issues/1848. This makes sure that reveals work when dealing with formatting in the list (e.g. bold / italic / code, etc.) const extra_replacement = "­" + this.parser.commentToString(comment); line = line.replace("+ ", "- " + extra_replacement); line = line.replaceAll(this.orderedListRegex, "1. " + extra_replacement); const output = line; return output; } } |