-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add string escape/unescape operations
These operations are useful for taking the contents of a string, and making it suitable for use as a stand alone string. For example, in an IDE you might see a string which is represented as: "Say \"Hello\"". The escaped double quotes are shown to make it clear that they do not end the string, despite the fact that they are not truly part of the string. In order to get the raw string, you would need to copy this, then manually remove the backslashes. The new String_.run_unescape operation does this automatically. The String_.run_escape is the inverse. It allows you to take a string like the one above, and paste it between two quotes without having to manually escape it.
- Loading branch information
Showing
3 changed files
with
84 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
/** | ||
* String operations. | ||
* Namespace is appended with an underscore to prevent overwriting the global String object. | ||
* | ||
* @author Vel0x | ||
* @namespace | ||
*/ | ||
var String_ = { | ||
|
||
/** | ||
* @constant | ||
* @default | ||
*/ | ||
REPLACEMENTS: [ | ||
{"escaped": "\\\\", "unescaped":"\\"}, // Must be first | ||
{"escaped": "\\'", "unescaped":"'"}, | ||
{"escaped": "\\\"", "unescaped":"\""}, | ||
{"escaped": "\\n", "unescaped":"\n"}, | ||
{"escaped": "\\r", "unescaped":"\r"}, | ||
], | ||
|
||
/** | ||
* Escapes a string for embedding in another string. | ||
* | ||
* Example: "Don't do that" -> "Don\'t do that" | ||
* | ||
* @param {string} input | ||
* @param {Object[]} args | ||
* @returns {string} | ||
*/ | ||
run_escape: function(input, args) { | ||
return String_._replace_by_keys(input, "unescaped", "escaped") | ||
}, | ||
|
||
/** | ||
* Unescapes a string that was part of another string | ||
* | ||
* Example: "Don\'t do that" -> "Don't do that" | ||
* | ||
* @param {string} input | ||
* @param {Object[]} args | ||
* @returns {string} | ||
*/ | ||
run_unescape: function(input, args) { | ||
return String_._replace_by_keys(input, "escaped", "unescaped") | ||
}, | ||
|
||
/** | ||
* Replaces all matching tokens in REPLACEMENTS with the correction. The | ||
* ordering is determined by the pattern_key and the replacement_key. | ||
* | ||
* @param {string} input | ||
* @param {string} pattern_key | ||
* @param {string} replacement_key | ||
* @returns {string} | ||
*/ | ||
_replace_by_keys: function(input, pattern_key, replacement_key) { | ||
var output = input; | ||
var replacementsLength = String_.REPLACEMENTS.length; | ||
for (var i = 0; i < replacementsLength; i++) { | ||
var replacement = String_.REPLACEMENTS[i]; | ||
output = output.split(replacement[pattern_key]).join(replacement[replacement_key]); | ||
} | ||
return output | ||
}, | ||
|
||
}; |