emoji.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /**
  2. * this is a small sample script to use libmbfl.
  3. * Rui Hirokawa <hirokawa@php.net>
  4. *
  5. * this file is encoded in EUC-JP.
  6. */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include "mbfl/mbfilter.h"
  11. static void hexdump(const mbfl_string *ptr)
  12. {
  13. unsigned int i;
  14. for (i = 0; i < ptr->len; i++) {
  15. printf("%%%02x", ptr->val[i]);
  16. }
  17. printf(" (%u)\n", ptr->len);
  18. }
  19. //#define TEST_DOCOMO
  20. //#define TEST_KDDI
  21. #define TEST_SOFTBANK
  22. int main(int argc, char **argv)
  23. {
  24. enum mbfl_no_encoding from_encoding, to_encoding;
  25. enum mbfl_no_language no_language;
  26. mbfl_buffer_converter *convd = NULL, *convd2 = NULL;
  27. mbfl_memory_device dev, dev2;
  28. mbfl_string string, result, *ret;
  29. #ifdef TEST_DOCOMO
  30. //char str[] = {0xF9,0xD7,0x00}; // U+2122
  31. //char str[] = {0xF9,0x82,0x00}; // U+1F195
  32. char str[] = {0xF9,0xD6,0x00}; // U+00A9
  33. #endif
  34. #ifdef TEST_KDDI
  35. //char str[] = {0xF7,0x6A,0x00};// U+2122
  36. //char str[] = {0xF7,0xE5,0x00}; // U+1F195
  37. //char str[] = {0xF3,0xD2,0x00}; // U+1F1E8 U+1F1F3
  38. char str[] = {0xF7,0x74,0x00}; // U+00A9
  39. #endif
  40. #ifdef TEST_SOFTBANK
  41. //char str[] = {0xFB,0xD7,0x00};// U+2122
  42. //char str[] = {0xF7,0xB2,0x00}; // U+1F195
  43. //char str[] = {0xFB,0xB3,0x00}; // U+1F1E8 U+1F1F3
  44. char str[] = {0xF7,0xEE,0x00}; // U+00A9
  45. #endif
  46. int final = 0;
  47. int state = 0;
  48. int i;
  49. no_language = mbfl_name2no_language("Japanese");
  50. #ifdef TEST_DOCOMO
  51. from_encoding = mbfl_name2no_encoding("SJIS-win#DOCOMO");
  52. #endif
  53. #ifdef TEST_KDDI
  54. from_encoding = mbfl_name2no_encoding("SJIS-win#KDDI");
  55. #endif
  56. #ifdef TEST_SOFTBANK
  57. from_encoding = mbfl_name2no_encoding("SJIS-win#SOFTBANK");
  58. #endif
  59. to_encoding = mbfl_name2no_encoding("UTF-8");
  60. convd = mbfl_buffer_converter_new(from_encoding, to_encoding, 0);
  61. mbfl_memory_device_init(&dev, 0, 4096);
  62. mbfl_string_init_set(&string, no_language, from_encoding);
  63. mbfl_memory_device_realloc(&dev, dev.length + dev.allocsz, dev.allocsz);
  64. strcpy(dev.buffer, str);
  65. dev.pos += strlen(str);
  66. mbfl_memory_device_result(&dev, &string);
  67. mbfl_string_init_set(&result, no_language, to_encoding);
  68. ret = mbfl_buffer_converter_feed_result(convd, &string, &result);
  69. #if 0
  70. for (i = 0; i < result.len; i+= 2) {
  71. if (result.val[i] >= 0xD8 && result.val[i] < 0xE0) { // Surrogate pair
  72. int h = (result.val[i] & 0x07)<<8 | result.val[i+1];
  73. int l = (result.val[i+2] & 0x03)<<8 | result.val[i+3];
  74. int c = (h<<(2+8)) | l;
  75. printf("U+%x\n",c+0x10000);
  76. i+=2;
  77. } else {
  78. printf("U+%x\n",(result.val[i] << 8) | result.val[i+1]);
  79. }
  80. }
  81. hexdump(&result);
  82. #endif
  83. #if 1
  84. convd2 = mbfl_buffer_converter_new(to_encoding, from_encoding, 0);
  85. mbfl_memory_device_init(&dev2, 0, 4096);
  86. mbfl_string_init_set(&string, no_language, to_encoding);
  87. mbfl_memory_device_realloc(&dev2, dev2.length + dev2.allocsz, dev2.allocsz);
  88. memcpy(dev2.buffer, result.val, result.len+1);
  89. dev2.pos += strlen(dev2.buffer);
  90. mbfl_memory_device_result(&dev2, &string);
  91. mbfl_string_init_set(&result, no_language, from_encoding);
  92. ret = mbfl_buffer_converter_feed_result(convd2, &string, &result);
  93. hexdump(&result);
  94. mbfl_buffer_converter_delete(convd2);
  95. #endif
  96. mbfl_string_clear(&result);
  97. mbfl_string_clear(&string);
  98. mbfl_buffer_converter_delete(convd);
  99. return EXIT_SUCCESS;
  100. }