Optimize UnescapeText method using StringBuilder#2389
Open
y114git wants to merge 1 commit into
Open
Conversation
Refactor UnescapeText method to use StringBuilder for optimization.
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refactor UnescapeText method to use StringBuilder for optimization.
Description
This refactors
UndertaleString.UnescapeTextto parse escape sequences in a single pass withStringBuilderinstead of applying multiple chainedstring.Replacecalls.The previous implementation could re-process characters produced by an earlier replacement. For example, an escaped literal backslash followed by
n("\\n"in assembler text) could be transformed into a real newline becauseReplace("\\n", "\n")ran beforeReplace("\\\\", "\\").The new implementation handles only the escape sequences emitted by
UndertaleString.ToString(true):\r-> carriage return\n-> newline\"-> double quote\\-> literal backslashUnknown escape-like sequences are preserved as-is instead of dropping the backslash. This keeps strings such as Windows paths (
C:\Users\Name) or unsupported escape-like text (\t,\x,\0,\U) from being silently changed.Caveats
This intentionally does not add support for additional GML/C-style escape sequences such as
\t,\xNN, octal escapes, or Unicode escapes. The method is used by the VM assembler text path and is kept as the inverse ofUndertaleString.ToString(true), rather than a full GML string literal parser.Notes
Needs tests ig