diff --git a/core/smn_string.cpp b/core/smn_string.cpp index dae6b19f..0b5c2125 100644 --- a/core/smn_string.cpp +++ b/core/smn_string.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 : * ============================================================================= * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under @@ -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 b0c19cee..bfd1039b 100644 --- a/plugins/include/string.inc +++ b/plugins/include/string.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. @@ -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. *