webengine/wmlengine/src/utils/include/nwx_string.h
changeset 0 dd21522fd290
--- /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 */