| 'use strict'; |
| |
| var chars = {}, unesc, temp; |
| |
| function reverse(object, prepender) { |
| return Object.keys(object).reduce(function(reversed, key) { |
| var newKey = prepender ? prepender + key : key; // Optionally prepend a string to key. |
| reversed[object[key]] = newKey; // Swap key and value. |
| return reversed; // Return the result. |
| }, {}); |
| } |
| |
| /** |
| * Regex for common characters |
| */ |
| |
| chars.escapeRegex = { |
| '?': /\?/g, |
| '@': /\@/g, |
| '!': /\!/g, |
| '+': /\+/g, |
| '*': /\*/g, |
| '(': /\(/g, |
| ')': /\)/g, |
| '[': /\[/g, |
| ']': /\]/g |
| }; |
| |
| /** |
| * Escape characters |
| */ |
| |
| chars.ESC = { |
| '?': '__UNESC_QMRK__', |
| '@': '__UNESC_AMPE__', |
| '!': '__UNESC_EXCL__', |
| '+': '__UNESC_PLUS__', |
| '*': '__UNESC_STAR__', |
| ',': '__UNESC_COMMA__', |
| '(': '__UNESC_LTPAREN__', |
| ')': '__UNESC_RTPAREN__', |
| '[': '__UNESC_LTBRACK__', |
| ']': '__UNESC_RTBRACK__' |
| }; |
| |
| /** |
| * Unescape characters |
| */ |
| |
| chars.UNESC = unesc || (unesc = reverse(chars.ESC, '\\')); |
| |
| chars.ESC_TEMP = { |
| '?': '__TEMP_QMRK__', |
| '@': '__TEMP_AMPE__', |
| '!': '__TEMP_EXCL__', |
| '*': '__TEMP_STAR__', |
| '+': '__TEMP_PLUS__', |
| ',': '__TEMP_COMMA__', |
| '(': '__TEMP_LTPAREN__', |
| ')': '__TEMP_RTPAREN__', |
| '[': '__TEMP_LTBRACK__', |
| ']': '__TEMP_RTBRACK__' |
| }; |
| |
| chars.TEMP = temp || (temp = reverse(chars.ESC_TEMP)); |
| |
| module.exports = chars; |