UNPKG

afterwriting

Version:

Post-processing tools for Fountain screenplays

55 lines (43 loc) 1.74 kB
define('utils/fountain/preprocessor', function(require) { var module = {}; var capitalize = function(text) { return text.charAt(0).toLocaleUpperCase() + text.slice(1); }; var chain_values = function(current, next) { return current ? (current + '.' + next) : next; }; var merge_keys = function(obj, result, chain) { chain = chain || ""; Object.keys(obj).forEach(function(key) { if (typeof (obj[key]) === "string") { result[chain_values(chain, key)] = obj[key]; } else { merge_keys(obj[key], result, chain_values(chain, key)); } }); }; var replaceAll = function(text, value, new_value) { return text.replace(new RegExp(value, "g"), new_value); }; module.process_snippets = function(text, variables) { var merged_variables = {}, all_variables; merge_keys(variables || {}, merged_variables); all_variables = Object.keys(merged_variables); all_variables.sort(function(a, b) { var a_value = merged_variables[a]; if (a_value.toLocaleUpperCase().indexOf(b.toLocaleUpperCase()) !== -1) { return -1; } else { return 1; } }); all_variables.forEach(function(variable) { text = replaceAll(text, '\\$' + variable, merged_variables[variable]); text = replaceAll(text, '\\$' + variable.toLocaleUpperCase(), merged_variables[variable].toLocaleUpperCase()); text = replaceAll(text, '\\$' + capitalize(variable), capitalize(merged_variables[variable])); }); return text; }; return module; });