const smartquotes = require('smartquotes'); smartquotes.replacements.push([/---/g, '\u2014']); // em dash smartquotes.replacements.push([/--/g, '\u2013']); // en dash smartquotes.replacements.push([/\.\.\./g, '\u2026']); // ellipsis smartquotes.replacements.push([/\(c\)/gi, '\u00A9']); // copyright smartquotes.replacements.push([/\(r\)/gi, '\u00AE']); // registered trademark smartquotes.replacements.push([/\?!/g, '\u2048']); // ?! smartquotes.replacements.push([/!!/g, '\u203C']); // !! smartquotes.replacements.push([/\?\?/g, '\u2047']); // ?? smartquotes.replacements.push([/([0-9]\s?)-(\s?[0-9])/g, '$1\u2013$2']); // number ranges use en dash /** * Improves typography by adding smart quotes and similar corrections within the specified element(s). * * The provided doc should be a document object provided by JSDOM. The same document will be returned with the * appropriate DOM manipulations. */ module.exports = function (doc, selector = 'body') { const elements = [...doc.querySelectorAll(selector)]; elements.forEach(el => smartquotes.element(el)); return doc; };