Ticket #7142: stxttranslator-latin9.patch
File stxttranslator-latin9.patch, 3.2 KB (added by , 13 years ago) |
---|
-
src/add-ons/translators/stxt/STXTTranslator.cpp
188 188 static int looks_utf8(const unsigned char *, size_t, my_unichar *, size_t *); 189 189 static int looks_unicode(const unsigned char *, size_t, my_unichar *, size_t *); 190 190 static int looks_latin1(const unsigned char *, size_t, my_unichar *, size_t *); 191 static int looks_latin9(const unsigned char *, size_t, my_unichar *, size_t *); 191 192 static int looks_extended(const unsigned char *, size_t, my_unichar *, size_t *); 192 193 static void from_ebcdic(const unsigned char *, size_t, unsigned char *); 193 194 static int ascmatch(const unsigned char *, const my_unichar *, size_t); … … 265 266 code = "ISO-8859"; 266 267 type = "text"; 267 268 encoding = "iso-8859-1"; 269 } else if (looks_latin9(buf, nbytes, ubuf, &ulen)) { 270 code = "ISO-8859"; 271 type = "text"; 272 encoding = "iso-8859-15"; 268 273 } else if (looks_extended(buf, nbytes, ubuf, &ulen)) { 269 274 code = "Non-ISO extended-ASCII"; 270 275 type = "text"; … … 280 285 code = "International EBCDIC"; 281 286 type = "character data"; 282 287 encoding = "ebcdic"; 288 } else if (looks_latin9(nbuf, nbytes, ubuf, &ulen)) { 289 code = "International EBCDIC"; 290 type = "character data"; 291 encoding = "ebcdic"; 283 292 } else { 284 293 rv = 0; 285 294 goto done; /* doesn't look like text at all */ … … 520 529 I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I /* 0xfX */ 521 530 }; 522 531 532 static char tekst_chars[256] = { 533 /* BEL BS HT LF FF CR */ 534 F, I, F, F, F, F, F, T, T, T, T, F, T, T, F, F, /* 0x0X */ 535 /* ESC */ 536 F, F, F, F, F, F, F, F, F, F, F, T, F, F, F, F, /* 0x1X */ 537 I, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x2X */ 538 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x3X */ 539 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x4X */ 540 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x5X */ 541 I, I, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x6X */ 542 T, T, T, T, T, T, T, T, T, T, T, T, T, I, I, F, /* 0x7X */ 543 /* NEL */ 544 X, X, X, X, X, T, X, X, X, X, X, X, X, X, X, X, /* 0x8X */ 545 X, X, I, X, X, X, X, X, X, X, X, X, X, X, X, X, /* 0x9X */ 546 I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xaX */ 547 I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xbX */ 548 I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xcX */ 549 I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xdX */ 550 I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xeX */ 551 I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I /* 0xfX */ 552 }; 553 523 554 static int 524 555 looks_ascii(const unsigned char *buf, size_t nbytes, my_unichar *ubuf, 525 556 size_t *ulen) … … 560 591 } 561 592 562 593 static int 594 looks_latin9(const unsigned char *buf, size_t nbytes, my_unichar *ubuf, size_t *ulen) 595 { 596 int i; 597 598 *ulen = 0; 599 600 for (i = 0; i < (int)nbytes; i++) { 601 int t = tekst_chars[buf[i]]; 602 603 if (t != T && t != I) 604 return 0; 605 606 ubuf[(*ulen)++] = buf[i]; 607 } 608 609 return 1; 610 } 611 612 static int 563 613 looks_extended(const unsigned char *buf, size_t nbytes, my_unichar *ubuf, 564 614 size_t *ulen) 565 615 {