1 #include <string.h> 2 #include <strings.h> 3 #include <CharacterSet.h> 4 #include <CharacterSetRoster.h> 5 #include "character_sets.h" 6 7 namespace BPrivate { 8 9 BCharacterSetRoster::BCharacterSetRoster() 10 { 11 index = 0; 12 } 13 14 BCharacterSetRoster::~BCharacterSetRoster() 15 { 16 // nothing to do 17 } 18 19 status_t 20 BCharacterSetRoster::GetNextCharacterSet(BCharacterSet * charset) 21 { 22 if (charset == 0) { 23 return B_BAD_VALUE; 24 } 25 if (index >= character_sets_by_id_count) { 26 return B_BAD_VALUE; 27 } 28 *charset = *character_sets_by_id[index++]; 29 return B_NO_ERROR; 30 } 31 32 status_t 33 BCharacterSetRoster::RewindCharacterSets() 34 { 35 index = 0; 36 if (index >= character_sets_by_id_count) { 37 return B_BAD_VALUE; 38 } 39 return B_NO_ERROR; 40 } 41 42 status_t 43 BCharacterSetRoster::StartWatching(BMessenger target) 44 { 45 // TODO: implement it 46 return B_ERROR; 47 } 48 49 status_t 50 BCharacterSetRoster::StopWatching(BMessenger target) 51 { 52 // TODO: implement it 53 return B_ERROR; 54 } 55 56 const BCharacterSet * 57 BCharacterSetRoster::GetCharacterSetByFontID(uint32 id) 58 { 59 if (id >= character_sets_by_id_count) { 60 return NULL; 61 } 62 return character_sets_by_id[id]; 63 } 64 65 const BCharacterSet * 66 BCharacterSetRoster::GetCharacterSetByConversionID(uint32 id) 67 { 68 if (id + 1 >= character_sets_by_id_count) { 69 return NULL; 70 } 71 return character_sets_by_id[id+1]; 72 } 73 74 const BCharacterSet * 75 BCharacterSetRoster::GetCharacterSetByMIBenum(uint32 MIBenum) 76 { 77 if (MIBenum > maximum_valid_MIBenum) { 78 return NULL; 79 } 80 return character_sets_by_MIBenum[MIBenum]; 81 } 82 83 const BCharacterSet * 84 BCharacterSetRoster::FindCharacterSetByPrintName(const char * name) 85 { 86 for (uint id = 0 ; (id < character_sets_by_id_count) ; id++) { 87 if (strcmp(character_sets_by_id[id]->GetPrintName(),name) == 0) { 88 return character_sets_by_id[id]; 89 } 90 } 91 return 0; 92 } 93 94 const BCharacterSet * 95 BCharacterSetRoster::FindCharacterSetByName(const char * name) 96 { 97 // first search standard names and mime names 98 for (uint id = 0 ; (id < character_sets_by_id_count) ; id++) { 99 if (strcasecmp(character_sets_by_id[id]->GetName(),name) == 0) { 100 return character_sets_by_id[id]; 101 } 102 const char * mime = character_sets_by_id[id]->GetMIMEName(); 103 if ((mime != NULL) && (strcasecmp(mime,name) == 0)) { 104 return character_sets_by_id[id]; 105 } 106 } 107 // only after searching all the above names do we look at aliases 108 for (uint id = 0 ; (id < character_sets_by_id_count) ; id++) { 109 for (int alias = 0 ; (alias < character_sets_by_id[id]->CountAliases()) ; alias++) { 110 if (strcasecmp(character_sets_by_id[id]->AliasAt(alias),name) == 0) { 111 return character_sets_by_id[id]; 112 } 113 } 114 } 115 return 0; 116 } 117 118 } 119