124 const unsigned char *end=p+len-it.
i;
143 const unsigned char *end=p+len-it.
i;
145 for (
int u=0; u<arrayLength;u++)
194 for (
int i=0;i<
length;i++)
205 for (
int i=0;i<
length;i++)
209 if (length <= d->getDescriptorNumber())
216 for (
int i=0;i<
length;i++)
224 if (len < 0 || len > 4095)
225 return strdup(
"text error");
226 char *
data=
new char(len+1);
235 if (len < 0 || len >= size) {
236 strncpy(buffer,
"text error", size);
244 char *
String::getText(
char *buffer,
char *shortVersion,
int sizeBuffer,
int sizeShortVersion) {
246 if (len < 0 || len >= sizeBuffer) {
247 strncpy(buffer,
"text error", sizeBuffer);
248 buffer[sizeBuffer-1] = 0;
252 decodeText(buffer, shortVersion, sizeBuffer, sizeShortVersion);
291 #define SingleByteLimit 0x0B
312 #define NumEntries(Table) (sizeof(Table) / sizeof(char *))
331 if (CharacterTable) {
355 const char *cs =
"ISO6937";
362 *isSingleByte =
false;
365 unsigned int tag = buffer[0];
370 tag = (buffer[1] << 8) | buffer[2];
375 *isSingleByte =
true;
393 if (cd != (iconv_t)-1) {
394 char *fromPtr = (
char *)from;
395 while (fromLength > 0 && toLength > 1) {
396 if (iconv(cd, &fromPtr, &fromLength, &to, &toLength) == size_t(-1)) {
397 if (errno == EILSEQ) {
421 #define MT(s, m, v) ((*(s) & (m)) == (v)) // Mask Test
422 if (
MT(s, 0xE0, 0xC0) &&
MT(s + 1, 0xC0, 0x80))
424 if (
MT(s, 0xF0, 0xE0) &&
MT(s + 1, 0xC0, 0x80) &&
MT(s + 2, 0xC0, 0x80))
426 if (
MT(s, 0xF8, 0xF0) &&
MT(s + 1, 0xC0, 0x80) &&
MT(s + 2, 0xC0, 0x80) &&
MT(s + 3, 0xC0, 0x80))
445 strncpy(to, (
const char *)from, len);
454 unsigned char *p = (
unsigned char *)to;
455 if (l == 2 && *p == 0xC2)
459 case 0x8A: *to =
'\n';
break;
460 case 0xA0: *to =
' ';
break;
461 default: Move =
false;
463 if (l == 2 && Move) {
464 memmove(p, p + 1, len - 1);
477 *shortVersion =
'\0';
486 unsigned char *p = (
unsigned char *)to;
487 if (l == 2 && *p == 0xC2)
489 if (*p == 0x86 || *p == 0x87) {
490 IsShortName += (*p == 0x86) ? 1 : -1;
491 memmove(to, to + l, len - l + 1);
495 if (l && IsShortName) {
496 if (l < sizeShortVersion) {
497 for (
int i = 0; i < l; i++)
498 *shortVersion++ = to[i];
499 sizeShortVersion -= l;
505 *shortVersion =
'\0';
692 if (!returnUnimplemetedDescriptor)
731 if (!returnUnimplemetedDescriptor)
752 if (!returnUnimplemetedDescriptor)
bool convertCharacterTable(const char *from, size_t fromLength, char *to, size_t toLength, const char *fromCode)
static Descriptor * getDescriptor(CharArray d, DescriptorTagDomain domain, bool returnUnimplemetedDescriptor)
bool systemCharacterTableIsSingleByte(void)
bool getCurrentNextIndicator() const
Descriptor * createDescriptor(int &i, bool returnUnimplemetedDescriptor)
const char * getCharacterTable(const unsigned char *&buffer, int &length, bool *isSingleByte)
int getNumberOfDescriptors()
#define NumEntries(Table)
DescriptorTag getDescriptorTag() const
TableId getTableId() const
virtual int getLastDescriptorNumber()=0
int getSectionNumber() const
static const char * CharacterTables1[]
bool checkSize(int offset)
static char * OverrideCharacterTable
int getTableIdExtension() const
bool Add(GroupDescriptor *d)
void setData(const unsigned char *data, int size, bool doCopy=true)
void assign(const unsigned char *data, int size, bool doCopy=true)
DescriptorTagDomain domain
static int Utf8CharLen(const char *s)
bool deleteOnDesctruction
virtual int getDescriptorNumber()=0
bool SetSystemCharacterTable(const char *CharacterTable)
void decodeText(char *buffer, int size)
int getVersionNumber() const
int getLastSectionNumber() const
static const char * SystemCharacterTable
bool checkSize(int offset)
bool SystemCharacterTableIsSingleByte
const unsigned char * getData() const
void SetOverrideCharacterTable(const char *CharacterTable)
Descriptor * getNext(Iterator &it)
DescriptorGroup(bool deleteOnDesctruction=true)
static const char * CharacterTables2[]