/** * @fileoverview * Some common utilities for scripts. */ module.exports = { /** * Get the slug/filename for an icon. * @param {Object} icon The icon data as it appears in _data/simple-icons.json */ getIconSlug: (icon) => icon.slug || module.exports.titleToSlug(icon.title), /** * Extract the path from an icon SVG content. * @param {Object} svg The icon SVG content **/ svgToPath: (svg) => svg.match(/ title .toLowerCase() .replace(/\+/g, 'plus') .replace(/\./g, 'dot') .replace(/&/g, 'and') .replace(/đ/g, 'd') .replace(/ħ/g, 'h') .replace(/ı/g, 'i') .replace(/ĸ/g, 'k') .replace(/ŀ/g, 'l') .replace(/ł/g, 'l') .replace(/ß/g, 'ss') .replace(/ŧ/g, 't') .normalize('NFD') .replace(/[^a-z0-9]/g, ''), /** * Converts a brand title in HTML/SVG friendly format into a brand title (as * it is seen in simple-icons.json) * @param {String} htmlFriendlyTitle The title to convert */ htmlFriendlyToTitle: (htmlFriendlyTitle) => htmlFriendlyTitle .replace(/&#([0-9]+);/g, (_, num) => String.fromCharCode(parseInt(num))) .replace( /&(quot|amp|lt|gt);/g, (_, ref) => ({ quot: '"', amp: '&', lt: '<', gt: '>' }[ref]), ), /** * Converts a slug into a variable name that can be exported. * @param {String} slug The slug to convert */ slugToVariableName: (slug) => { const slugFirstLetter = slug[0].toUpperCase(); const slugRest = slug.slice(1); return `si${slugFirstLetter}${slugRest}`; }, /** * Converts a brand title (as it is seen in simple-icons.json) into a brand * title in HTML/SVG friendly format. * @param {String} brandTitle The title to convert */ titleToHtmlFriendly: (brandTitle) => brandTitle .replace(/&/g, '&') .replace(/"/g, '"') .replace(//g, '>') .replace(/./g, (char) => { const charCode = char.charCodeAt(0); return charCode > 127 ? `&#${charCode};` : char; }), };