ff_i_token

Custom token functions.

Refer to pages Custom Tokens, ff_i_color, and ff_i_token for additional details.

Printing a custom token might not look complete since non-printable characters might not be displayed in your console.

Source code

// @code


// -----------------------------------------------------------------------------

//! @brief Set the value for a custom token.
//! @param nToken Token value. Must be positive and 0-9 are reserved.
//! @param sValue Value to set.
void SetCustomTokenEx(int nToken, string sValue);
void SetCustomTokenEx(int nToken, string sValue)
{
  object oModule = GetModule();

  if (nToken <= 9)
    return;

  SetCustomToken(nToken, sValue);

  // Table: nToken, sValue
  string sSQL = "CREATE TABLE tokens(id INT NON NULL, token STRING NON NULL);";
  sqlquery sqlQuery = SqlPrepareQueryObject(oModule, sSQL);
  SqlStep(sqlQuery);

  sSQL = "INSERT INTO tokens VALUES(@nToken, @sToken);";
  sqlQuery = SqlPrepareQueryObject(oModule, sSQL);
  SqlBindInt(sqlQuery, "@nToken", nToken);
  SqlBindString(sqlQuery, "@sToken", sValue);
  SqlStep(sqlQuery);
}


// -----------------------------------------------------------------------------

//! @brief Get the value for a custom token, that was set with SetCustomTokenEx
//! @param nToken Token value. Must be positive and 0-9 are reserved.
string GetCustomTokenEx(int nToken);
string GetCustomTokenEx(int nToken)
{
  object oModule = GetModule();

  if (nToken <= 9)
    return "";

  string sSQL = "SELECT FROM tokens WHERE id = @nToken;";
  sqlquery sqlQuery = SqlPrepareQueryObject(oModule, sSQL);
  SqlBindInt(sqlQuery, "@nToken", nToken);
  if (SqlStep(sqlQuery))
    return SqlGetString(sqlQuery, 0);
  return "";
}


// -----------------------------------------------------------------------------

//! @brief Returns token usable for ordering strings.
//! @param nOrder Order (0 - 255)
//! @return An order token (eg: \<c001>)
string GetOrderToken(int nOrder);
string GetOrderToken(int nOrder)
{
  return "<c" + GetStringLeftPad(IntToString(nOrder), 3, "0") + ">";
}


// -----------------------------------------------------------------------------

//! @brief Returns token usable for coloring strings.
//! @param nColor A RGB color value (0 - 0xFFFFFF)
//! @param bPrintable Limit the token to printable characters
//! @return An color token
string GetColorToken(int nColor, int bPrintable = FALSE);
string GetColorToken(int nColor, int bPrintable = FALSE)
{
  // Don't use GetRGB from fi_color to avoid circular includes
  int nRed = clamp((nColor >> 16) & 0xFF, 1, 255);
  int nGreen = clamp((nColor >> 8) & 0xFF, 1, 255);
  int nBlue = clamp(nColor & 0xFF, 1, 255);

  string sFrom;
  if (bPrintable)
    sFrom = ASCII_TOKEN_CHARS;
  else
    sFrom = ASCII_CHARS;

  return "<c" + GetSubString(sFrom, nRed, 1) + GetSubString(sFrom, nGreen, 1) + GetSubString(sFrom, nBlue, 1) + ">";
}


// -----------------------------------------------------------------------------

//! @brief Returns token usable for closing other tokens.
//! @return A \</c> token.
string GetCloseColorToken();
string GetCloseColorToken()
{
  return "</c>";
}


// -----------------------------------------------------------------------------

//! @brief Returns a tokenized string.
//! @param sString Input string
//! @param sToken Token (eg: "\<cxxx>")
//! @return String wrapped in token start and close
string GetCustomColoredString(string sString, string sToken);
string GetCustomColoredString(string sString, string sToken)
{
  return sToken + sString + GetCloseColorToken();
}


// -----------------------------------------------------------------------------

//! @brief Replace <XXX> color aliases with CUSTOMxxx tokens.
//! @param sString Input string
//! @return "<XXX>" alias replaced by CUSTOMxxx token
string ReplaceColorCustomTokens(string sString);
string ReplaceColorCustomTokens(string sString)
{
  if (FindSubString(sString, "<") == -1)
    return sString;

  string sSQL = "SELECT tokenaliases.alias, tokenaliases.id FROM tokenaliases;";
  sqlquery sqlQuery = SqlPrepareQueryObject(GetModule(), sSQL);

  while (SqlStep(sqlQuery))
  {
    string sSource = "<" + SqlGetString(sqlQuery, 0) + ">";
    string sDest = "<CUSTOM" + SqlGetString(sqlQuery, 1) + ">";
    sString = GetStringReplace(sString, sSource, sDest);
  }
  return sString;
}