UNPKG

cowsay

Version:

cowsay is a configurable talking cow

48 lines (43 loc) 1.14 kB
module.exports = function (cow, variables) { var eyes = escapeRe(variables.eyes); var eyeL = eyes.charAt(0); var eyeR = eyes.charAt(1); var tongue = escapeRe(variables.tongue); if (cow.indexOf("$the_cow") !== -1) { cow = extractTheCow(cow); } return cow .replace(/\$thoughts/g, variables.thoughts) .replace(/\$eyes/g, eyes) .replace(/\$tongue/g, tongue) .replace(/\$\{eyes\}/g, eyes) .replace(/\$eye/, eyeL) .replace(/\$eye/, eyeR) .replace(/\$\{tongue\}/g, tongue) ; }; /* * "$" dollar signs must be doubled before being used in a regex replace * This can occur in eyes or tongue. * For example: * * cowsay -g Moo! * * cowsay -e "\$\$" Moo! */ function escapeRe (s) { if (s && s.replace) { return s.replace(/\$/g, "$$$$"); } return s; } function extractTheCow (cow) { cow = cow.replace(/\r\n?|[\n\u2028\u2029]/g, "\n").replace(/^\uFEFF/, ''); var match = /\$the_cow\s*=\s*<<"*EOC"*;*\n([\s\S]+)\nEOC\n/.exec(cow); if (!match) { console.error("Cannot parse cow file\n", cow); return cow; } else { return match[1].replace(/\\{2}/g, "\\").replace(/\\@/g, "@").replace(/\\\$/g, "$"); } }