From 942fdb8095aed9eed5b7913fa1dbd8fba1361caa Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Fri, 2 Jun 2023 17:02:45 -0400 Subject: [PATCH] Replace SmartyPants plugin with custom --- package-lock.json | 21 ---------------- package.json | 1 - shared/naturalcrit/markdown.js | 46 +++++++++++++++++++++++++++++++--- 3 files changed, 42 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index da077d870..59dc36d25 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,6 @@ "marked": "5.0.4", "marked-extended-tables": "^1.0.6", "marked-gfm-heading-id": "^3.0.3", - "marked-smartypants": "^1.0.2", "markedLegacy": "npm:marked@^0.3.19", "moment": "^2.29.4", "mongoose": "^7.2.2", @@ -9684,17 +9683,6 @@ "marked": "^4 || ^5" } }, - "node_modules/marked-smartypants": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/marked-smartypants/-/marked-smartypants-1.0.2.tgz", - "integrity": "sha512-hpbM9waiBSIHpqdoU5AAeuYozeObBwUet3xkCFrFBA+1329byRVxLDwYmelMCS3ss+sEVJhDgrunIy+ubiqFwQ==", - "dependencies": { - "smartypants": "^0.1.6" - }, - "peerDependencies": { - "marked": "^4 || ^5" - } - }, "node_modules/markedLegacy": { "name": "marked", "version": "0.3.19", @@ -15333,15 +15321,6 @@ "npm": ">= 3.0.0" } }, - "node_modules/smartypants": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/smartypants/-/smartypants-0.1.6.tgz", - "integrity": "sha512-zGXh+Q6Y3OPTLM5x2HxAIkEAj4ZcePftmIOdIYozv2T+m03Sp5R4YppczKuo6IdnSMc99U+Wgvy8Mil0eeep7g==", - "bin": { - "smartypants": "bin/smartypants.js", - "smartypantsu": "bin/smartypantsu.js" - } - }, "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", diff --git a/package.json b/package.json index e11cb2e53..b6cbb6729 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,6 @@ "marked": "5.0.4", "marked-extended-tables": "^1.0.6", "marked-gfm-heading-id": "^3.0.3", - "marked-smartypants": "^1.0.2", "markedLegacy": "npm:marked@^0.3.19", "moment": "^2.29.4", "mongoose": "^7.2.2", diff --git a/shared/naturalcrit/markdown.js b/shared/naturalcrit/markdown.js index a7d2ffc6a..8848beb6b 100644 --- a/shared/naturalcrit/markdown.js +++ b/shared/naturalcrit/markdown.js @@ -2,8 +2,7 @@ const _ = require('lodash'); const Marked = require('marked'); const MarkedExtendedTables = require('marked-extended-tables'); -const {gfmHeadingId: MarkedGFMHeadingId} = require('marked-gfm-heading-id'); -const {markedSmartypants: MarkedSmartyPants} = require('marked-smartypants'); +const { gfmHeadingId: MarkedGFMHeadingId } = require('marked-gfm-heading-id'); const renderer = new Marked.Renderer(); //Processes the markdown within an HTML block if it's just a class-wrapper @@ -238,10 +237,49 @@ const definitionLists = { } }; +const MarkedSmartyPantsLite = ()=>{ + return { + tokenizer : { + inlineText(src) { + // don't escape inlineText + const cap = this.rules.inline.text.exec(src); + + /* istanbul ignore next */ + if(!cap) { + // should never happen + return; + } + + const text = cap[0] + // em-dashes + .replace(/---/g, '\u2014') + // en-dashes + .replace(/--/g, '\u2013') + // opening singles + .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018') + // closing singles & apostrophes + .replace(/'/g, '\u2019') + // opening doubles + .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c') + // closing doubles + .replace(/"/g, '\u201d') + // ellipses + .replace(/\.{3}/g, '\u2026'); + + return { + type : 'text', + raw : cap[0], + text : text + }; + } + } + }; +}; + Marked.use({ extensions: [mustacheSpans, mustacheDivs, mustacheInjectInline, definitionLists] }); Marked.use(mustacheInjectBlock); -Marked.use({ renderer: renderer, smartypants: true, mangle: false, smartypants: false }); -Marked.use(MarkedExtendedTables(), MarkedGFMHeadingId(), MarkedSmartyPants()); +Marked.use({ renderer: renderer, mangle: false }); +Marked.use(MarkedExtendedTables(), MarkedGFMHeadingId(), MarkedSmartyPantsLite()); //Fix local links in the Preview iFrame to link inside the frame renderer.link = function (href, title, text) {