BurgerLib
Public Types | Static Public Member Functions | Static Public Attributes
Burger::Win1252 Class Reference

Conversion routines to support the Win1252 text encoding scheme. More...

#include <ststring.h>

List of all members.

Public Types

enum  { BAD = -1 }

Static Public Member Functions

static Word BURGER_API FromUTF8 (const char *pInput)
 Convert a single UTF8 stream character into a Win1252 8 bit char.
static Word BURGER_API FromUTF8 (char *pOutput, WordPtr uOutputSize, const char *pInput)
 Convert a UTF8 stream into a Win1252 "C" string.
static Word BURGER_API FromUTF8 (char *pOutput, WordPtr uOutputSize, const char *pInput, WordPtr uInputSize)
 Convert a UTF8 stream into a Win1252 byte array.

Static Public Attributes

static const Word8 UpperCaseTable [256]
 Table to convert all characters to upper case.
static const Word8 LowerCaseTable [256]
 Table to convert all characters to lower case.

Detailed Description

Conversion routines to support the Win1252 text encoding scheme.

Win1252 is a high ASCII encoding that's used by the Win32 file system for Windows XP, NT, etc. This class will allow the conversion of other character mappings to Win1252 for use in calling Win32 API functions.

The character map for Win1252 looks like this. Click here.


Member Enumeration Documentation

anonymous enum
Enumerator:
BAD 

Value returned if a routine failed.

This is the value returned in the event of a function error condition. Test for this value to see if a function failed.


Member Function Documentation

Word BURGER_API Burger::Win1252::FromUTF8 ( const char *  pInput) [static]

Convert a single UTF8 stream character into a Win1252 8 bit char.

Take up 3 bytes from a UTF8 stream and return the unsigned 8 bit value of the Win1252 character. Codes 0 through 0x7f are considered ASCII while codes 0x80 through 0xFF are mapped to Win1252. If the UTF8 character cannot be mapped to Win1252 encoding, Burger::Win1252::BAD will be returned instead.

Note:
: This function will not return the number of bytes decoded. Use Burger::UTF8::NextToken(const char *) to get the pointer to the next UTF8 entry.
Parameters:
pInputPointer to UTF8 buffer that contains the 1 to 3 byte buffer to convert. NULL will page fault.
Returns:
The unsigned 8 bit character code (0x00-0xFF) or Burger::Win1252::BAD if the UTF8 value wasn't low ASCII and couldn't be mapped to Win1252.
See also:
Burger::UTF8::NextToken(const char *) or Burger::UTF8::GetTokenSize(const char *)
Word BURGER_API Burger::Win1252::FromUTF8 ( char *  pOutput,
WordPtr  uOutputSize,
const char *  pInput 
) [static]

Convert a UTF8 stream into a Win1252 "C" string.

Take a "C" string that is using UTF8 encoding and convert it into a Win1252 encoded "C" string. The function will return the size of the string after encoding. This size is valid, even if it exceeded the output buffer size. The output pointer and size can be null to have this routine calculate the size of the possible output so the application can allocate a buffer large enough to hold it.

Note:
This function will ensure that the string is always zero terminated, even if truncation is necessary to get it to fit in the output buffer. Under no circumstances will the output buffer be overrun.
Parameters:
pOutputPointer to byte buffer to receive the Win1252 encoded string. NULL is okay if uOutputSize is zero, otherwise it will page fault.
uOutputSizeSize of the output buffer in bytes.
pInputA UTF8 encoded "C" string. NULL will page fault.
Returns:
strlen() of the potential output. It is valid, even if the output buffer wasn't large enough to contain everything.
Word BURGER_API Burger::Win1252::FromUTF8 ( char *  pOutput,
WordPtr  uOutputSize,
const char *  pInput,
WordPtr  uInputSize 
) [static]

Convert a UTF8 stream into a Win1252 byte array.

Take a byte array that is using UTF8 encoding and convert it to a Win1252 encoded "C" string. The function will return the size of the string after encoding. This size is valid, even if it exceeded the output buffer size. The output pointer and size can be null to have this routine calculate the size of the possible output so the application can allocate a buffer large enough to hold it.

Note:
This function will ensure that the string is always zero terminated, even if truncation is necessary to get it to fit in the output buffer. Under no circumstances will the output buffer be overrun.
Zeros can be encoded into the stream. This function will not early out if a zero was parsed. Zeros will be placed in the Win1252 stream as is.
Parameters:
pOutputPointer to a byte buffer to receive the Win1252 string. NULL is okay if uOutputSize is zero, outwise a page fault will occur.
uOutputSizeSize of the output buffer in bytes.
pInputUTF8 encoded byte array. NULL is okay if uInputSize is zero.
uInputSizeSize of the input byte array.
Returns:
strlen() of the potential output. It is valid, even if the output buffer wasn't large enough to contain everything.

Member Data Documentation

Initial value:
 {
    0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,    
    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,    
    0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,    
    0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,    
    0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,    
    0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F,    
    0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,    
    0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,    
    0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,    
    0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,    
    0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,    
    0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,    
    0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,    
    0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xDE,0xDF,    
    0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,    
    0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF     
}

Table to convert all characters to lower case.

Using Win1252 mapping, this table will convert all 256 codes into their lower case equivalents.

Initial value:
 {
    0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,    
    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,    
    0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,    
    0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,    
    0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,    
    0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,    
    0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,    
    0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F,    
    0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,    
    0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,    
    0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,    
    0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,    
    0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,    
    0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,    
    0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,    
    0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xFE,0xFF     
}

Table to convert all characters to upper case.

Using Win1252 mapping, this table will convert all 256 codes into their upper case equivalents.