--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/wmlengine/src/utils/include/nwx_string.h Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,395 @@
+/*
+* Copyright (c) 1999 - 2001 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+/***************************************************************************
+** File: nwx_string_h
+** Subsystem Name:String
+** Purpose: Provides string manipulation routines in a platform independent
+** manner.
+**************************************************************************/
+
+#ifndef NWX_STRING_H
+#define NWX_STRING_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Includes
+*/
+
+#include <stdarg.h>
+#include "nwx_defs.h"
+#include "nwx_memseg.h"
+#include "BrsrStatusCodes.h"
+
+#define NW_DEFAULT_FLOAT_PREC 6
+
+/* These constants can used to implement the NW_Str_Iswhatever()
+** functions if there is a conflict between the WAE character set
+** definitions and the C runtime IsWhatever() functions
+*/
+
+#define WAE_ASCII_NULL 0x00
+
+#define WAE_ASCII_UPPER_A 0x41
+#define WAE_ASCII_UPPER_F 0x46
+#define WAE_ASCII_UPPER_Z 0x5A
+
+#define WAE_ASCII_LOWER_A 0x61
+#define WAE_ASCII_LOWER_F 0x66
+#define WAE_ASCII_LOWER_Z 0x7A
+
+#define WAE_ASCII_0 0x30
+#define WAE_ASCII_9 0x39
+
+#define WAE_ASCII_SPACE 0x20
+#define WAE_ASCII_HT 0x09
+#define WAE_ASCII_LF 0x0a
+#define WAE_ASCII_VT 0x0b
+#define WAE_ASCII_FF 0x0c
+#define WAE_ASCII_CR 0x0d
+#define WAE_ASCII_ZSPACE 0x200b
+
+#define WAE_ASCII_HYPHEN 0x2d
+#define WAE_ASCII_SOFT_HYPHEN 0xad
+
+#define WAE_ASCII_ANY_CHAR_BEGIN 0x0
+#define WAE_ASCII_ANY_CHAR_END 0x7F
+
+#define WAE_ASCII_DOLLAR 0x24
+#define WAE_ASCII_PLUS 0x2B
+#define WAE_ASCII_MINUS 0x2D
+#define WAE_ASCII_POINT 0x2E
+#define WAE_ASCII_UNDERSCORE 0x5F
+#define WAE_ASCII_LEFT_BRACE 0x28
+#define WAE_ASCII_RIGHT_BRACE 0x29
+#define WAE_ASCII_COLON 0x3a
+
+/*
+#define WAE_ASCII_PUNC_RANGE_1_BEGIN 0x20
+#define WAE_ASCII_PUNC_RANGE_1_END 0x2F
+#define WAE_ASCII_PUNC_RANGE_2_BEGIN 0x3A
+#define WAE_ASCII_PUNC_RANGE_2_END 0x40
+#define WAE_ASCII_PUNC_RANGE_3_BEGIN 0x5B
+#define WAE_ASCII_PUNC_RANGE_3_END 0x60
+#define WAE_ASCII_PUNC_RANGE_4_BEGIN 0x7B
+#define WAE_ASCII_PUNC_RANGE_4_END 0x7F
+
+#define WAE_ASCII_COMMA 0x2C
+*/
+
+/*
+**----------------------------------------------------------------
+** Type Declarations
+**----------------------------------------------------------------
+*/
+
+typedef enum NW_Str_Location_e{
+ NW_Str_Start,
+ NW_Str_End,
+ NW_Str_Both
+}NW_Str_Location_t;
+/* Deprecated NW_Str_Begining because it misspelled beginning: */
+#define NW_Str_Begining NW_Str_Start
+
+/*
+** Global Function Declarations
+*/
+
+/* Test if character is alphanumeric */
+NW_Int32 NW_Str_Isalnum(const NW_Ucs2 ch);
+
+/* Test if character is alphabetic */
+NW_Int32 NW_Str_Isalpha(const NW_Ucs2 ch);
+
+/* Test if character is decimal digit */
+NW_Int32 NW_Str_Isdigit(const NW_Ucs2 ch);
+
+/* Test if character is hexadecimal digit */
+NW_Int32 NW_Str_Isxdigit(const NW_Ucs2 ch);
+
+/* Test if character is white space */
+NW_Int32 NW_Str_Isspace(const NW_Ucs2 ch);
+
+/* Test if character is a newline */
+NW_Int32 NW_Str_Isnewline(const NW_Ucs2 ch);
+
+/* Test if line can break at character */
+NW_Int32 NW_Str_Isbreak(const NW_Ucs2 ch);
+
+/* Test if character is punctuation */
+NW_Int32 NW_Str_Ispunct(const NW_Ucs2 ch);
+
+/* Test if character is ascii (0x00 to 0x7F) */
+NW_Int32 NW_Str_Isascii(const NW_Ucs2 ch);
+
+/* Test if character is control char (0x00 to 0x1F) */
+NW_Int32 NW_Str_Iscntrl(const NW_Ucs2 ch);
+
+/* Test if character is uppercase */
+NW_Int32 NW_Str_Isupper(const NW_Ucs2 ch);
+
+/* Test if character is lowercase */
+NW_Int32 NW_Str_Islower(const NW_Ucs2 ch);
+
+/* Test if the phone number */
+NW_Bool NW_Str_StrIsNumber(NW_Ucs2 *string, NW_Uint32 count);
+
+/* Test, if a valid length */
+NW_Bool NW_Str_StrIsValidLength(NW_Ucs2 *string);
+
+/* Create a new string */
+NW_Ucs2 *NW_Str_New(const NW_Uint32 len);
+
+/* Create a new copy of a string */
+NW_Ucs2 *NW_Str_Newcpy(const NW_Ucs2 *string);
+
+/* Create a new copy of two concatinated strings */
+NW_Ucs2 *NW_Str_Newcat(const NW_Ucs2 *string1,
+ const NW_Ucs2 *string2);
+
+/* Create a new string */
+NW_Ucs2 *NW_Str_SegNew(const NW_Uint32 len,
+ const NW_Mem_Segment_Id_t sid);
+
+/* Create a new copy of a string */
+NW_Ucs2 *NW_Str_SegNewcpy(const NW_Ucs2 *string,
+ const NW_Mem_Segment_Id_t sid);
+
+/* Create a new copy of two concatinated strings */
+NW_Ucs2 *NW_Str_SegNewcat(const NW_Ucs2 *string1,
+ const NW_Ucs2 *string2,
+ const NW_Mem_Segment_Id_t sid);
+
+/* Delete a string */
+void NW_Str_Delete(NW_Ucs2 *string);
+
+/* Return number of characters in string (excluding null termination) */
+NW_Uint32 NW_Str_Strlen(const NW_Ucs2 *string);
+
+/* Return number of bytes in string including terminator */
+NW_Uint32 NW_Str_Strsize(const NW_Ucs2 *string);
+
+/* Copy null-terminated string */
+NW_Ucs2 *NW_Str_Strcpy(NW_Ucs2 *destination,
+ const NW_Ucs2 *source);
+
+/* Concatinate null-terminated strings */
+NW_Ucs2 *NW_Str_Strcat(NW_Ucs2 *destination,
+ const NW_Ucs2 *source);
+
+/* Copy first "count" characters of null-terminated string */
+NW_Ucs2 *NW_Str_Strncpy(NW_Ucs2 *destination,
+ const NW_Ucs2 *source,
+ const NW_Uint32 count);
+
+/* Find first occurrence of character in string */
+NW_Ucs2 *NW_Str_Strchr(const NW_Ucs2 *string,
+ const NW_Ucs2 wc);
+
+/* Find last occurrence of character in string */
+NW_Ucs2 *NW_Str_Strrchr(const NW_Ucs2 *string,
+ const NW_Ucs2 wc);
+
+/* Find first occurrence of a character set in string */
+NW_Uint32 NW_Str_Strcspn(const NW_Ucs2 *string,
+ const NW_Ucs2 *search);
+
+/* Find substring within a string */
+NW_Ucs2 *NW_Str_Strstr(const NW_Ucs2 *string,
+ const NW_Ucs2 *search);
+
+/* Find a substring within a string ended by terminator */
+NW_Ucs2* NW_Str_Strstrtil(const NW_Ucs2 *string,
+ char sub_terminator);
+/* Compare two strings */
+NW_Int32 NW_Str_Strcmp(const NW_Ucs2 *string1,
+ const NW_Ucs2 *string2);
+
+/* Compare two strings, case-insenstive */
+NW_Int32 NW_Str_Stricmp(const NW_Ucs2 *string1,
+ const NW_Ucs2 *string2);
+
+/* Compare first "count" characters from two strings */
+NW_Int32 NW_Str_Strncmp(const NW_Ucs2 *string1,
+ const NW_Ucs2 *string2,
+ const NW_Uint32 count );
+
+/* Compare first "count" characters from two strings, case-insenstive */
+NW_Int32 NW_Str_Strnicmp(const NW_Ucs2 *string1,
+ const NW_Ucs2 *string2,
+ const NW_Uint32 count );
+
+/* Calculate a 32-bit hash code for a string */
+NW_Uint32 NW_Str_Hash(const NW_Ucs2 *string);
+
+/* Convert a string to an integer */
+NW_Int32 NW_Str_Atoi(const NW_Ucs2 *string);
+
+/* Convert to string using specified base */
+NW_Ucs2 *NW_Str_ItoBase(const NW_Int32 i, NW_Ucs2* string, const NW_Int32 base);
+
+/* Convert an integer to a string */
+NW_Ucs2 *NW_Str_Itoa(const NW_Int32 i, NW_Ucs2* string);
+
+/* Convert to string using specified base */
+NW_Ucs2 *NW_Str_UltoBase(const NW_Int32 i, NW_Ucs2* string, const NW_Int32 base);
+
+/* Convert an NW_Uint32 integer to a string */
+NW_Ucs2 *NW_Str_Ultoa(const NW_Uint32 i, NW_Ucs2* string);
+
+/* Convert a string to an integer */
+NW_Int32 NW_Str_Strtol(const NW_Ucs2 *ptr, NW_Ucs2 **endPtr, NW_Int32 base);
+
+/* Convert a string to an unsigned integer */
+NW_Int32 NW_Str_Strtoul(const NW_Ucs2 *ptr, NW_Ucs2 **endPtr, NW_Int32 base);
+
+/* Convert a string to an integer and check for overflow */
+TBrowserStatusCode NW_Str_CvtToInt32(const NW_Ucs2 *string, NW_Ucs2 **endptr,
+ NW_Int32 base, NW_Int32 *ret_long);
+
+/* Convert a string to a float point value and check for overflow */
+TBrowserStatusCode NW_Str_CvtToFloat32(const NW_Ucs2 *string, NW_Ucs2 **endptr,
+ NW_Float32 *ret_double);
+
+/* Increment string pointer by "count" characters */
+NW_Ucs2 *NW_Str_Inc(const NW_Ucs2 *string, const NW_Int32 count);
+
+/* Convert ucs2 string to new ascii string */
+char *NW_Str_CvtToAscii(const NW_Ucs2 *string);
+
+/* Convert null-terminated ascii string to new ucs2 string */
+NW_Ucs2 *NW_Str_CvtFromAscii(const char *string);
+
+/* Copy a ucs2 string to an already allocated ascii string. */
+void NW_Str_CpyToAscii(char* dest, const NW_Ucs2* src);
+/* Copy a ascii string to an already allocated ucs2 string. */
+void NW_Str_CpyFromAscii(NW_Ucs2* dest, const char *src);
+
+/* Convert character to lower case */
+NW_Ucs2 NW_Str_ToLower(const NW_Ucs2 ch);
+
+/* Convert character to upper case */
+NW_Ucs2 NW_Str_ToUpper(const NW_Ucs2 ch);
+
+/* Convert string to lower case for ASCII value only */
+void NW_Str_Strlwr(NW_Ucs2 *string);
+
+/* Convert string to upper case for ASCII value only */
+void NW_Str_Strupr(NW_Ucs2 *string);
+
+/* Convert Ucs2 string to Upper case */
+TBrowserStatusCode NW_Str_Ucs2StrUpr(NW_Ucs2 **ppStr);
+
+/* Convert Ucs2 string to Lower case */
+TBrowserStatusCode NW_Str_Ucs2StrLwr(NW_Ucs2 **ppStr);
+
+/* Capitilize the first character in each word */
+TBrowserStatusCode NW_Str_Ucs2StrTitle(NW_Ucs2 **ppStr);
+
+/* Return new substring of original string */
+NW_Ucs2 *NW_Str_Substr(const NW_Ucs2 *string,
+ const NW_Uint32 start, const NW_Uint32 len);
+
+/* Return new substring of original string */
+NW_Ucs2 *NW_Str_SegSubstr(const NW_Ucs2 *string,
+ const NW_Uint32 start, const NW_Uint32 len,
+ const NW_Mem_Segment_Id_t sid);
+
+/* Format to a string */
+NW_Int32 NW_Str_Sprintf(NW_Ucs2 *buf, const NW_Ucs2 *format, ...);
+NW_Int32 NW_Str_Vsnprintf(NW_Ucs2 *buf, const NW_Int32 count, const NW_Ucs2 *format, va_list *argptr );
+
+/* Create a new copy of a string from an Ascii string constant */
+NW_Ucs2 *NW_Str_NewcpyConst(const char* const string);
+
+/* Copy null-terminated Ascii string constant */
+NW_Ucs2 *NW_Str_StrcpyConst(NW_Ucs2 *destination,
+ const char* const source);
+
+/* Concatinate null-terminated Ascii string constant */
+NW_Ucs2 *NW_Str_StrcatConst(NW_Ucs2 *destination,
+ const char* const source);
+
+/* Compare a string to an Strii string constant */
+NW_Int32 NW_Str_StrcmpConst(const NW_Ucs2 *string1,
+ const char* const string2);
+
+/* Compare a string to an Strii string constant, case-insenstive */
+NW_Int32 NW_Str_StricmpConst(const NW_Ucs2 *string1,
+ const char* const string2);
+
+/* Compare first "count" characters of a string to an Strii string constant */
+NW_Int32 NW_Str_StrncmpConst(const NW_Ucs2 *string1,
+ const char* const string2,
+ const NW_Uint32 count);
+
+/* Compare first "count" characters of a string to an Strii string constant , case-insenstive */
+NW_Int32 NW_Str_StrnicmpConst(const NW_Ucs2 *string1,
+ const char* const string2,
+ const NW_Uint32 count);
+
+/* Compress whitespace, per WML Ver 1.2, section 11.8.1 */
+void NW_Str_CompressWhitespace(NW_Ucs2 *s);
+
+/* Replace all the occurance of char1 with char2 */
+NW_Int32 NW_Str_Strcharreplace(NW_Ucs2* const string, const NW_Ucs2 char1, const NW_Ucs2 char2);
+
+/* Creates (allocates memory) a new string with all the whitespaces removed from the specified location */
+NW_Ucs2* NW_Str_Trim(const NW_Ucs2* string, NW_Str_Location_t where);
+
+/* Skips over leading whitespaces and/or truncates trailing whitespaces depending on specified location */
+NW_Ucs2* NW_Str_TrimInPlace(NW_Ucs2* string, NW_Str_Location_t where);
+
+/* Create a Ascii string */
+char *NW_Asc_New(const NW_Uint32 len);
+
+/* Create a Ascii string */
+void NW_Asc_Delete(char *s1);
+
+NW_Uint32 NW_Asc_strlen(const char *s);
+
+char *NW_Asc_strcpy(char *s1, const char *s2);
+
+char *NW_Asc_strcat(char *s1, const char *s2);
+
+NW_Int32 NW_Asc_Strchr(const char* str, char ch);
+
+NW_Int32 NW_Asc_strcmp(const char *string1, const char *string2);
+
+NW_Int32 NW_Asc_stricmp(const char *string1, const char *string2);
+
+NW_Int32 NW_Asc_strnicmp(const char *string1, const char *string2,
+ const NW_Uint32 count);
+
+char *NW_Asc_Itoa(const NW_Int32 i, char* string);
+
+NW_Ucs2* NW_Asc_toUcs2(char *string);
+
+// compare string as byte *, case insensitive, "count" indicate the first number of bytes to compare.
+NW_Int32 NW_Byte_Strnicmp(const NW_Byte *string1,
+ const NW_Byte *string2,
+ const NW_Uint32 count );
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* NWX_STRING_H */