From 2535d2d4805b120c05a088b98ae7d1f665334139 Mon Sep 17 00:00:00 2001 From: Tatsunori Uchino Date: Sat, 14 Dec 2024 00:27:06 +0900 Subject: [PATCH] Don't use regex that can be slow --- lib/inlines.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/inlines.js b/lib/inlines.js index 1f0cbb7c..cb404aca 100644 --- a/lib/inlines.js +++ b/lib/inlines.js @@ -984,13 +984,34 @@ var parseInlines = function(block) { // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim#return_value // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#white_space // Removes only ASCII tab and space. - this.subject = block._string_content.replace(/^[\t \r\n]+|[\t \r\n]+$/g, "") + this.subject = trim(block._string_content) this.pos = 0; this.delimiters = null; this.brackets = null; while (this.parseInline(block)) {} block._string_content = null; // allow raw string to be garbage collected this.processEmphasis(null); + + function trim(str) { + let start = 0; + for(; start < str.length; start++) { + if (!isSpace(str.charCodeAt(start))) { + break; + } + } + let end = str.length - 1; + for(; end >= start; end--) { + if (!isSpace(str.charCodeAt(end))) { + break; + } + } + return str.slice(start, end + 1); + + function isSpace(c) { + // U+0020 = space, U+0009 = tab, U+000A = LF, U+000D = CR + return c === 0x20 || c === 9 || c === 0xa || c === 0xd; + } + } }; // The InlineParser object.