rolled into src/kits/support
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4093 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1,433 +0,0 @@
|
||||
#include "CharacterSet.h"
|
||||
#include "Font.h"
|
||||
#include <strings.h>
|
||||
|
||||
CharacterSet::CharacterSet()
|
||||
{
|
||||
id = 0;
|
||||
MIBenum = 0;
|
||||
strcpy(print_name,"");
|
||||
strcpy(iana_name,"");
|
||||
mime_name = NULL;
|
||||
aliases = NULL;
|
||||
aliases_count = 0;
|
||||
}
|
||||
|
||||
CharacterSetRoster * theRoster = NULL;
|
||||
|
||||
CharacterSetRoster *
|
||||
CharacterSetRoster::Roster(status_t * outError)
|
||||
{
|
||||
// TODO: add synchronization protection
|
||||
if (theRoster == NULL) {
|
||||
theRoster = new CharacterSetRoster();
|
||||
}
|
||||
if (outError != NULL) {
|
||||
*outError = (theRoster == NULL ? B_NO_MEMORY : B_OK);
|
||||
}
|
||||
return theRoster;
|
||||
}
|
||||
|
||||
CharacterSetRoster *
|
||||
CharacterSetRoster::CurrentRoster()
|
||||
{
|
||||
return theRoster;
|
||||
}
|
||||
|
||||
const CharacterSet *
|
||||
CharacterSetRoster::FindCharacterSetByFontID(uint32 id)
|
||||
{
|
||||
return character_sets[id];
|
||||
}
|
||||
|
||||
const CharacterSet *
|
||||
CharacterSetRoster::FindCharacterSetByConversionID(uint32 id)
|
||||
{
|
||||
return character_sets[id+1];
|
||||
}
|
||||
|
||||
const CharacterSet *
|
||||
CharacterSetRoster::FindCharacterSetByMIBenum(uint32 MIBenum)
|
||||
{
|
||||
for (int id = 0 ; (id < character_sets_count) ; id++) {
|
||||
if (character_sets[id]->MIBenum == MIBenum) {
|
||||
return character_sets[id];
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const CharacterSet *
|
||||
CharacterSetRoster::FindCharacterSetByPrintName(char * name)
|
||||
{
|
||||
for (int id = 0 ; (id < character_sets_count) ; id++) {
|
||||
if (strcmp(character_sets[id]->print_name,name) == 0) {
|
||||
return character_sets[id];
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const CharacterSet *
|
||||
CharacterSetRoster::FindCharacterSetByName(char * name)
|
||||
{
|
||||
for (int id = 0 ; (id < character_sets_count) ; id++) {
|
||||
if (strcmp(character_sets[id]->iana_name,name) == 0) {
|
||||
return character_sets[id];
|
||||
}
|
||||
for (int alias = 0 ; (alias < character_sets[id]->aliases_count) ; alias++) {
|
||||
if (strcmp(character_sets[id]->aliases[alias],name) == 0) {
|
||||
return character_sets[id];
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
CharacterSetRoster::CharacterSetRoster()
|
||||
{
|
||||
// this information should be loaded from a file
|
||||
character_sets_count = 25;
|
||||
character_sets = new (CharacterSet*)[character_sets_count];
|
||||
CharacterSet * cs;
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = B_UNICODE_UTF8; // a.k.a. 0
|
||||
cs->MIBenum = 106;
|
||||
strcpy(cs->print_name,"Unicode");
|
||||
strcpy(cs->iana_name,"UTF-8");
|
||||
cs->mime_name = cs->iana_name;
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = B_ISO_8859_1;
|
||||
cs->MIBenum = 4;
|
||||
strcpy(cs->print_name,"ISO Latin 1");
|
||||
strcpy(cs->iana_name,"ISO_8859-1:1987");
|
||||
cs->aliases_count = 8;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "iso-ir-100";
|
||||
cs->aliases[1] = "ISO_8859-1";
|
||||
cs->aliases[2] = cs->mime_name = "ISO-8859-1";
|
||||
cs->aliases[3] = "latin1";
|
||||
cs->aliases[4] = "11";
|
||||
cs->aliases[5] = "IBM819";
|
||||
cs->aliases[6] = "CP819";
|
||||
cs->aliases[7] = "csISOLatin1";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = B_ISO_8859_2;
|
||||
cs->MIBenum = 5;
|
||||
strcpy(cs->print_name,"ISO Latin 2");
|
||||
strcpy(cs->iana_name,"ISO_8859-2:1987");
|
||||
cs->aliases_count = 6;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "iso-ir-101";
|
||||
cs->aliases[1] = "ISO_8859-2";
|
||||
cs->aliases[2] = cs->mime_name = "ISO-8859-2";
|
||||
cs->aliases[3] = "latin2";
|
||||
cs->aliases[4] = "12";
|
||||
cs->aliases[5] = "csISOLatin2";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = B_ISO_8859_3;
|
||||
cs->MIBenum = 6;
|
||||
strcpy(cs->print_name,"ISO Latin 3");
|
||||
strcpy(cs->iana_name,"ISO_8859-3:1988");
|
||||
cs->mime_name = cs->print_name;
|
||||
cs->aliases_count = 6;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "iso-ir-109";
|
||||
cs->aliases[1] = "ISO_8859-3";
|
||||
cs->aliases[2] = cs->mime_name = "ISO-8859-3";
|
||||
cs->aliases[3] = "latin3";
|
||||
cs->aliases[4] = "13";
|
||||
cs->aliases[5] = "csISOLatin3";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = B_ISO_8859_4;
|
||||
cs->MIBenum = 7;
|
||||
strcpy(cs->print_name,"ISO Latin 4");
|
||||
strcpy(cs->iana_name,"ISO_8859-4:1988");
|
||||
cs->aliases_count = 6;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "iso-ir-110";
|
||||
cs->aliases[1] = "ISO_8859-4";
|
||||
cs->aliases[2] = cs->mime_name = "ISO-8859-4";
|
||||
cs->aliases[3] = "latin4";
|
||||
cs->aliases[4] = "14";
|
||||
cs->aliases[5] = "csISOLatin4";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = B_ISO_8859_5;
|
||||
cs->MIBenum = 8;
|
||||
strcpy(cs->print_name,"ISO Cyrillic");
|
||||
strcpy(cs->iana_name,"ISO_8859-5:1988");
|
||||
cs->aliases_count = 5;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "iso-ir-144";
|
||||
cs->aliases[1] = "ISO_8859-5";
|
||||
cs->aliases[2] = cs->mime_name = "ISO-8859-5";
|
||||
cs->aliases[3] = "cyrillic";
|
||||
cs->aliases[4] = "csISOLatinCyrillic";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = B_ISO_8859_6;
|
||||
cs->MIBenum = 9;
|
||||
strcpy(cs->print_name,"ISO Arabic");
|
||||
strcpy(cs->iana_name,"ISO_8859-6:1987");
|
||||
cs->aliases_count = 7;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "iso-ir-127";
|
||||
cs->aliases[1] = "ISO_8859-6";
|
||||
cs->aliases[2] = cs->mime_name = "ISO-8859-6";
|
||||
cs->aliases[3] = "ECMA-114";
|
||||
cs->aliases[4] = "ASMO-708";
|
||||
cs->aliases[5] = "arabic";
|
||||
cs->aliases[6] = "csISOLatinArabic";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = B_ISO_8859_7;
|
||||
cs->MIBenum = 10;
|
||||
strcpy(cs->print_name,"ISO Greek");
|
||||
strcpy(cs->iana_name,"ISO_8859-7:1987");
|
||||
cs->aliases_count = 8;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "iso-ir-126";
|
||||
cs->aliases[1] = "ISO_8859-7";
|
||||
cs->aliases[2] = cs->mime_name = "ISO-8859-7";
|
||||
cs->aliases[3] = "ELOT_928";
|
||||
cs->aliases[4] = "ECMA-118";
|
||||
cs->aliases[5] = "greek";
|
||||
cs->aliases[6] = "greek8";
|
||||
cs->aliases[7] = "csISOLatinGreek";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = B_ISO_8859_8;
|
||||
cs->MIBenum = 11;
|
||||
strcpy(cs->print_name,"ISO Hebrew");
|
||||
strcpy(cs->iana_name,"ISO_8859-8:1988");
|
||||
cs->aliases_count = 5;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "iso-ir-138";
|
||||
cs->aliases[1] = "ISO_8859-8";
|
||||
cs->aliases[2] = cs->mime_name = "ISO-8859-8";
|
||||
cs->aliases[3] = "hebrew";
|
||||
cs->aliases[4] = "csISOLatinHebrew";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = B_ISO_8859_9;
|
||||
cs->MIBenum = 12;
|
||||
strcpy(cs->print_name,"ISO Latin 5");
|
||||
strcpy(cs->iana_name,"ISO_8859-9:1989");
|
||||
cs->aliases_count = 6;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "iso-ir-148";
|
||||
cs->aliases[1] = "ISO_8859-9";
|
||||
cs->aliases[2] = cs->mime_name = "ISO-8859-9";
|
||||
cs->aliases[3] = "latin5";
|
||||
cs->aliases[4] = "15";
|
||||
cs->aliases[5] = "csISOLatin5";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = B_ISO_8859_10;
|
||||
cs->MIBenum = 12;
|
||||
strcpy(cs->print_name,"ISO Latin 6");
|
||||
strcpy(cs->iana_name,"ISO_8859-10");
|
||||
cs->mime_name = cs->iana_name;
|
||||
cs->aliases_count = 5;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "iso-ir-157";
|
||||
cs->aliases[1] = "16";
|
||||
cs->aliases[2] = "ISO-8859-10:1992";
|
||||
cs->aliases[3] = "csISOLatin6";
|
||||
cs->aliases[4] = "latin6";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{ // this is a guess
|
||||
cs = new CharacterSet();
|
||||
cs->id = B_MACINTOSH_ROMAN;
|
||||
cs->MIBenum = 2027;
|
||||
strcpy(cs->print_name,"Macintosh Roman");
|
||||
strcpy(cs->iana_name,"macintosh");
|
||||
cs->aliases_count = 2;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "mac";
|
||||
cs->aliases[1] = "csMacintosh";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = 12;
|
||||
cs->MIBenum = 17;
|
||||
strcpy(cs->print_name,"Shift JIS");
|
||||
strcpy(cs->iana_name,"Shift_JIS");
|
||||
cs->mime_name = cs->iana_name;
|
||||
cs->aliases_count = 2;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "MS_Kanji";
|
||||
cs->aliases[1] = "csShiftJIS";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = 13;
|
||||
cs->MIBenum = 17;
|
||||
strcpy(cs->print_name,"EUC Packed Format Japanese");
|
||||
strcpy(cs->iana_name,"Extended_UNIX_Code_Packed_Format_for_Japanese");
|
||||
cs->aliases_count = 2;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = cs->mime_name = "EUC-JP";
|
||||
cs->aliases[1] = "csEUCPkdFmtJapanese";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{ // this is just a guess...
|
||||
cs = new CharacterSet();
|
||||
cs->id = 14;
|
||||
cs->MIBenum = 19;
|
||||
strcpy(cs->print_name,"EUC Fixed Width Japanese");
|
||||
strcpy(cs->iana_name,"Extended_UNIX_Code_Fixed_Width_for_Japanese");
|
||||
cs->aliases_count = 1;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "csEUCFixWidJapanese";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = 15;
|
||||
cs->MIBenum = 2252;
|
||||
strcpy(cs->print_name,"MS-Windows Codepage 1252");
|
||||
strcpy(cs->iana_name,"windows-1252");
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = 16;
|
||||
cs->MIBenum = 1000;
|
||||
strcpy(cs->print_name,"Unicode 2.0");
|
||||
strcpy(cs->iana_name,"ISO-10646-UCS-2");
|
||||
cs->aliases_count = 1;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "csUnicode";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = 17;
|
||||
cs->MIBenum = 2084;
|
||||
strcpy(cs->print_name,"KOI8-R Cyrillic");
|
||||
strcpy(cs->iana_name,"KOI8-R");
|
||||
cs->mime_name = cs->iana_name;
|
||||
cs->aliases_count = 1;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "csKOI8R";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = 18;
|
||||
cs->MIBenum = 2251;
|
||||
strcpy(cs->print_name,"MS-Windows Codepage 1251");
|
||||
strcpy(cs->iana_name,"windows-1251");
|
||||
cs->mime_name = cs->iana_name;
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = 19;
|
||||
cs->MIBenum = 2086;
|
||||
strcpy(cs->print_name,"IBM Codepage 866");
|
||||
strcpy(cs->iana_name,"IBM866");
|
||||
cs->mime_name = cs->iana_name;
|
||||
cs->aliases_count = 3;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "cp866";
|
||||
cs->aliases[1] = "866";
|
||||
cs->aliases[2] = "csIBM866";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = 20;
|
||||
cs->MIBenum = 2011;
|
||||
strcpy(cs->print_name,"IBM Codepage 437");
|
||||
strcpy(cs->iana_name,"IBM437");
|
||||
cs->mime_name = cs->iana_name;
|
||||
cs->aliases_count = 3;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "cp437";
|
||||
cs->aliases[1] = "437";
|
||||
cs->aliases[2] = "csPC8CodePage437";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = 21;
|
||||
cs->MIBenum = 38;
|
||||
strcpy(cs->print_name,"EUC Korean");
|
||||
strcpy(cs->iana_name,"EUC-KR");
|
||||
cs->mime_name = cs->iana_name;
|
||||
cs->aliases_count = 1;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "csEUCKR";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = 22;
|
||||
cs->MIBenum = 109;
|
||||
strcpy(cs->print_name,"ISO 8859-13");
|
||||
strcpy(cs->iana_name,"ISO-8859-13");
|
||||
cs->mime_name = cs->iana_name;
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = 23;
|
||||
cs->MIBenum = 110;
|
||||
strcpy(cs->print_name,"ISO 8859-14");
|
||||
strcpy(cs->iana_name,"ISO-8859-14");
|
||||
cs->mime_name = cs->iana_name;
|
||||
cs->aliases_count = 6;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "iso-ir-199";
|
||||
cs->aliases[1] = "ISO_8859-14:1998";
|
||||
cs->aliases[2] = "ISO_8859-14";
|
||||
cs->aliases[3] = "latin8";
|
||||
cs->aliases[4] = "iso-celtic";
|
||||
cs->aliases[5] = "l8";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
{
|
||||
cs = new CharacterSet();
|
||||
cs->id = 24;
|
||||
cs->MIBenum = 111;
|
||||
strcpy(cs->print_name,"ISO 8859-15");
|
||||
strcpy(cs->iana_name,"ISO-8859-15");
|
||||
cs->mime_name = cs->iana_name;
|
||||
cs->aliases_count = 2;
|
||||
cs->aliases = new (char*)[cs->aliases_count];
|
||||
cs->aliases[0] = "ISO_8859-15";
|
||||
cs->aliases[1] = "Latin-9";
|
||||
character_sets[cs->id] = cs;
|
||||
}
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
#ifndef CHARACTER_SET_H
|
||||
#define CHARACTER_SET_H
|
||||
|
||||
#include <SupportDefs.h>
|
||||
|
||||
/*! CharacterSet holds a variety of useful information about
|
||||
each character set. This information has been derived from the
|
||||
IANA standards organization. Since IANA provides several names
|
||||
for some encodings, this object also provides for aliases.
|
||||
|
||||
@see http://www.iana.org/assignments/character-sets
|
||||
*/
|
||||
|
||||
class CharacterSetRoster;
|
||||
|
||||
class CharacterSet {
|
||||
public:
|
||||
//! returns an id suitable for use in BFont::SetEncoding
|
||||
uint32 GetFontID() const { return id; }
|
||||
|
||||
//! returns an id suitable for use in convert_to_utf8/convert_from_utf8
|
||||
uint32 GetConversionID() const { return id - 1; }
|
||||
|
||||
//! returns an id for use in MIBs to identify coded character sets
|
||||
uint32 GetMIBenum() const { return MIBenum; }
|
||||
|
||||
//! returns the standard IANA name for this character set
|
||||
const char * GetName() const { return iana_name; }
|
||||
|
||||
//! returns a user interface friendly name for this character set
|
||||
const char * GetPrintName() const { return print_name; }
|
||||
|
||||
//! returns the preferred MIME name for this character set
|
||||
//! or null if none exists
|
||||
const char * GetMIMEName() const { return mime_name; }
|
||||
|
||||
//! returns an array of aliases for this character set
|
||||
//! or null if none exist
|
||||
const char * const * GetAliases(int32 & out_size) const {
|
||||
out_size = aliases_count;
|
||||
return aliases;
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 id; //! id from convert_to_utf8/convert_from_utf8
|
||||
uint32 MIBenum; //! for use in MIBs to identify coded character sets
|
||||
char print_name[64]; //! user interface friendly name
|
||||
char iana_name[64]; //! standard IANA name
|
||||
char *mime_name; //! the preferred mime name
|
||||
char **aliases; //! aliases for this character set
|
||||
uint32 aliases_count; //! how many aliases are available
|
||||
uint32 padding[16];
|
||||
private:
|
||||
CharacterSet();
|
||||
friend class CharacterSetRoster;
|
||||
};
|
||||
|
||||
/*! the CharacterSetRoster is used to obtain a CharacterSet object
|
||||
for a given encoding.
|
||||
*/
|
||||
|
||||
class CharacterSetRoster {
|
||||
private:
|
||||
CharacterSetRoster();
|
||||
public:
|
||||
static CharacterSetRoster * Roster(status_t * outError = NULL);
|
||||
static CharacterSetRoster * CurrentRoster(void);
|
||||
const CharacterSet * FindCharacterSetByFontID(uint32 id);
|
||||
const CharacterSet * FindCharacterSetByConversionID(uint32 id);
|
||||
const CharacterSet * FindCharacterSetByMIBenum(uint32 MIBenum);
|
||||
const CharacterSet * FindCharacterSetByPrintName(char * name);
|
||||
const CharacterSet * FindCharacterSetByName(char * name);
|
||||
const CharacterSet * GetCharacterSet(uint32 index) { return character_sets[index]; }
|
||||
uint32 GetCharacterSetCount() const { return character_sets_count; }
|
||||
private:
|
||||
CharacterSet ** character_sets;
|
||||
uint32 character_sets_count;
|
||||
};
|
||||
|
||||
#endif CHARACTER_SET_H
|
||||
Reference in New Issue
Block a user