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

Conversion routines to support the ISOLatin1 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 ISOLatin1 8 bit char.
static Word BURGER_API FromUTF8 (char *pOutput, WordPtr uOutputSize, const char *pInput)
 Convert a UTF8 stream into a ISOLatin1 "C" string.
static Word BURGER_API FromUTF8 (char *pOutput, WordPtr uOutputSize, const char *pInput, WordPtr uInputSize)
 Convert a UTF8 stream into a ISOLatin1 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 ISOLatin1 text encoding scheme.

ISOLatin1 is a high ASCII encoding that's used by the ISO 9660 file system for CD-ROM and DVD-ROMs. This class will allow the conversion of other character mappings to ISOLatin1 for use obtaining the proper filenames on read only media.

The character map for ISOLatin1 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::ISOLatin1::FromUTF8 ( const char *  pInput) [static]

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

Take up 3 bytes from a UTF8 stream and return the unsigned 8 bit value of the ISOLatin1 character. Codes 0 through 0x7f are considered ASCII while codes 0x80 through 0xFF are mapped to ISOLatin1. If the UTF8 character cannot be mapped to ISOLatin1 encoding, Burger::ISOLatin1::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 2 byte buffer to convert. NULL will page fault.
Returns:
The unsigned 8 bit character code (0x00-0xFF) or Burger::ISOLatin1::BAD if the UTF8 value wasn't low ASCII and couldn't be mapped to ISOLatin1.
See also:
Burger::UTF8::NextToken(const char *) or Burger::UTF8::GetTokenSize(const char *)
Word BURGER_API Burger::ISOLatin1::FromUTF8 ( char *  pOutput,
WordPtr  uOutputSize,
const char *  pInput 
) [static]

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

Take a "C" string that is using UTF8 encoding and convert it into a ISOLatin1 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 ISOLatin1 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::ISOLatin1::FromUTF8 ( char *  pOutput,
WordPtr  uOutputSize,
const char *  pInput,
WordPtr  uInputSize 
) [static]

Convert a UTF8 stream into a ISOLatin1 byte array.

Take a byte array that is using UTF8 encoding and convert it to a ISOLatin1 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 ISOLatin1 stream as is.
Parameters:
pOutputPointer to a byte buffer to receive the ISOLatin1 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,0xFE,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 ISOLatin1 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,0xDE,0xFF     
}

Table to convert all characters to upper case.

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