HoS_PRC8/_mod/_module/nss/x3_inc_string.nss
Jaysyn904 04165202c0 Initial upload
Initial upload
2024-11-25 19:36:07 -05:00

196 lines
7.2 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//::///////////////////////////////////////////////
//:: Functions useful for string manipulation
//:: x3_inc_string
//:: Copyright (c) 2008 Bioware Corp.
//:://////////////////////////////////////////////
/*
This is a collection of string functions useful
for coloring text, parsing text, etc.
Very useful for the new OnPlayerChat event.
*/
//:://////////////////////////////////////////////
//:: Created By: Deva B. Winblood
//:: Created On: Feb 3rd, 2008
//:: Modified by: The Krit
//:: Modified on: Apr 15, 2008
//:://////////////////////////////////////////////
//////////////////////////////////////
// CONSTANTS
//////////////////////////////////////
const string STRING_COLOR_BLACK = "000";
const string STRING_COLOR_BLUE = "007";
const string STRING_COLOR_GREEN = "070";
const string STRING_COLOR_PINK = "755";
const string STRING_COLOR_RED = "700";
const string STRING_COLOR_ROSE = "744";
const string STRING_COLOR_WHITE = "777";
//////////////////////////////////////
// PROTOTYPES
//////////////////////////////////////
// FILE: x3_inc_string FUNCTION: StringToRGBString()
//
// This function will make sString be the specified color
// as specified in sRGB. RGB is the Red, Green, and Blue
// components of the color. Each color can have a value from
// 0 to 7.
// Ex: red == "700"
// green == "070"
// blue == "007"
// white == "777"
// black == "000"
// The STRING_COLOR_* constants may be used for sRGB.
string StringToRGBString(string sString, string sRGB);
// FILE: x3_inc_string FUNCTION: StringParse()
//
// This function will parse sSource from left to right until it encounters
// sDelimiter and will return all the characters it encountered before
// the delimiter occurred.
// If bRightToLeft is set to TRUE then it will parse from right to left instead.
string StringParse(string sSource, string sDelimiter = " ", int bRightToLeft = FALSE);
// FILE: x3_inc_string FUNCTION: StringRemoveParsed()
//
// This function will take sParsed and remove it from the left side of sSource.
// It will also remove any excess sDelimiter occurrences after sParsed.
// If bRightToLeft is set to TRUE then it will perform this from the right side
// rather than the left.
//
// No check is made that sParsed actually matches sSource; all that matters
// about sParsed is its length.
string StringRemoveParsed(string sSource, string sParsed, string sDelimiter = " ", int bRightToLeft = FALSE);
// FILE: x3_inc_string FUNCTION: StringReplace()
//
// This function will replace any occurrence of sFind in sSource with sReplace.
string StringReplace(string sSource, string sFind, string sReplace);
///////////////////////////////////////
// FUNCTIONS
///////////////////////////////////////
//------------------------------------------------------------------------------
// This function will make sString be the specified color
// as specified in sRGB. RGB is the Red, Green, and Blue
// components of the color. Each color can have a value from
// 0 to 7.
//
string StringToRGBString(string sString, string sRGB)
{
// The magic characters (padded -- the last three characters are the same).
string sColorCodes = " fw<66><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
// For the older version going 0 to 6, use:
//string sColorCodes = " fw<66><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
return "<c" + // Begin the color token.
GetSubString(sColorCodes, StringToInt(GetSubString(sRGB, 0, 1)), 1) + // red
GetSubString(sColorCodes, StringToInt(GetSubString(sRGB, 1, 1)), 1) + // green
GetSubString(sColorCodes, StringToInt(GetSubString(sRGB, 2, 1)), 1) + // blue
">" + // End the color token
sString + "</c>";
}//StringToRGBString()
//------------------------------------------------------------------------------
// This function will parse sSource from left to right until it encounters
// sDelimiter and will return all the characters it encountered before
// the delimiter occurred.
// If bRightToLeft is set to TRUE then it will parse from right to left instead.
//
string StringParse(string sSource, string sDelimiter = " ", int bRightToLeft = FALSE)
{
// Find the first delimiter.
int nDelimIndex = FindSubString(sSource, sDelimiter);
if ( nDelimIndex < 0 )
// Delimiter not found; return the whole source string.
return sSource;
// For left-to-right, we're basically done.
if ( !bRightToLeft )
return GetStringLeft(sSource, nDelimIndex);
// For right-to-left, we need to find the last delimiter.
int nLastDelim = 0;
while ( nDelimIndex >= 0 )
{
nLastDelim = nDelimIndex;
nDelimIndex = FindSubString(sSource, sDelimiter, nLastDelim+1);
}
// Return everything after the last delimiter.
int nRetLength = GetStringLength(sSource) - nLastDelim - GetStringLength(sDelimiter);
return GetStringRight(sSource, nRetLength);
}//StringParse()
//------------------------------------------------------------------------------
// This function will take sParsed and remove it from the left side of sSource.
// It will also remove any excess sDelimiter occurrences after sParsed.
// If bRightToLeft is set to TRUE then it will perform this from the right side
// rather than the left.
//
// No check is made that sParsed actually matches sSource; all that matters
// about sParsed is its length.
//
string StringRemoveParsed(string sSource, string sParsed, string sDelimiter = " ", int bRightToLeft = FALSE)
{
int nDelimLength = GetStringLength(sDelimiter);
if ( !bRightToLeft )
{
// Start after a string the length of sParsed.
int nStart = GetStringLength(sParsed);
if ( nDelimLength > 0 )
// Locate excess delimiters.
while ( GetSubString(sSource, nStart, nDelimLength) == sDelimiter )
nStart += nDelimLength;
// Remove the delimiters and the string the length of sParsed.
return GetStringRight(sSource, GetStringLength(sSource) - nStart);
}
else
{
// Stop before a string the length of sParsed.
int nEnd = GetStringLength(sSource) - GetStringLength(sParsed);
if ( nDelimLength > 0 )
// Locate excess delimiters.
while ( GetSubString(sSource, nEnd - nDelimLength, nDelimLength) == sDelimiter )
nEnd -= nDelimLength;
// Remove the delimiters and the string the length of sParsed.
return GetStringLeft(sSource, nEnd);
}
}//StringRemoveParsed()
//------------------------------------------------------------------------------
// This function will replace any occurrence of sFind in sSource with sReplace.
//
string StringReplace(string sSource, string sFind, string sReplace)
{
int nFindLength = GetStringLength(sFind);
int nPosition = 0;
string sRetVal = "";
// Locate all occurences of sFind.
int nFound = FindSubString(sSource, sFind);
while ( nFound >= 0 )
{
// Build the return string, replacing this occurence of sFind with sReplace.
sRetVal += GetSubString(sSource, nPosition, nFound - nPosition) + sReplace;
nPosition = nFound + nFindLength;
nFound = FindSubString(sSource, sFind, nPosition);
}
// Tack on the end of sSource and return.
return sRetVal + GetStringRight(sSource, GetStringLength(sSource) - nPosition);
}//StringReplace()