From d014010a9959e297aee1d7a1b5d584f82ae327c0 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Wed, 16 Apr 2008 05:27:09 +0000 Subject: [PATCH] added amb1610 - StripQuotes() --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%402063 --- core/smn_string.cpp | 22 ++++++++++++++++++++++ plugins/include/string.inc | 14 ++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/core/smn_string.cpp b/core/smn_string.cpp index 65295536..0b5c2125 100644 --- a/core/smn_string.cpp +++ b/core/smn_string.cpp @@ -560,6 +560,27 @@ static cell_t SplitString(IPluginContext *pContext, const cell_t *params) return -1; } +static cell_t StripQuotes(IPluginContext *pContext, const cell_t *params) +{ + char *text; + size_t length; + + pContext->LocalToString(params[1], &text); + length = strlen(text); + + if (text[0] == '"' && text[length-1] == '"') + { + /* Null-terminate */ + text[--length] = '\0'; + /* Move the remaining bytes (including null terminator) down by one */ + memmove(&text[0], &text[1], length); + + return 1; + } + + return 0; +} + REGISTER_NATIVES(basicStrings) { {"BreakString", BreakString}, @@ -586,6 +607,7 @@ REGISTER_NATIVES(basicStrings) {"StringToIntEx", StringToIntEx}, {"StringToFloat", sm_strtofloat}, {"StringToFloatEx", StringToFloatEx}, + {"StripQuotes", StripQuotes}, {"TrimString", TrimString}, {"VFormat", sm_vformat}, {NULL, NULL}, diff --git a/plugins/include/string.inc b/plugins/include/string.inc index 85c9a468..bfd1039b 100644 --- a/plugins/include/string.inc +++ b/plugins/include/string.inc @@ -375,6 +375,20 @@ native bool:IsCharUpper(chr); */ native bool:IsCharLower(chr); +/** + * Strips a quote pair off a string if it exists. That is, the following + * replace rule is applied once: $"(.*)"^ -> $\1^ + * + * Note that the leading and trailing quotes will only be removed if both + * exist. Otherwise, the string is left unmodified. This function should + * be considered O(k) (all characters get shifted down). + * + * @param text String to modify (in place). + * @return True if string was modified, false if there was no + * set of quotes. + */ +native bool:StripQuotes(String:text[]); + /** * Returns an uppercase character to a lowercase character. *