pdf_cmap_table.c 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. #include "fitz-internal.h"
  2. #include "mupdf-internal.h"
  3. #ifndef NOCJK
  4. #include "../generated/cmap_cns.h"
  5. #include "../generated/cmap_gb.h"
  6. #include "../generated/cmap_japan.h"
  7. #include "../generated/cmap_korea.h"
  8. #endif
  9. static const struct { char *name; pdf_cmap *cmap; } cmap_table[] =
  10. {
  11. #ifndef NOCJK
  12. {"78-EUC-H",&cmap_78_EUC_H},
  13. {"78-EUC-V",&cmap_78_EUC_V},
  14. {"78-H",&cmap_78_H},
  15. {"78-RKSJ-H",&cmap_78_RKSJ_H},
  16. {"78-RKSJ-V",&cmap_78_RKSJ_V},
  17. {"78-V",&cmap_78_V},
  18. {"78ms-RKSJ-H",&cmap_78ms_RKSJ_H},
  19. {"78ms-RKSJ-V",&cmap_78ms_RKSJ_V},
  20. {"83pv-RKSJ-H",&cmap_83pv_RKSJ_H},
  21. {"90ms-RKSJ-H",&cmap_90ms_RKSJ_H},
  22. {"90ms-RKSJ-V",&cmap_90ms_RKSJ_V},
  23. {"90msp-RKSJ-H",&cmap_90msp_RKSJ_H},
  24. {"90msp-RKSJ-V",&cmap_90msp_RKSJ_V},
  25. {"90pv-RKSJ-H",&cmap_90pv_RKSJ_H},
  26. {"90pv-RKSJ-V",&cmap_90pv_RKSJ_V},
  27. {"Add-H",&cmap_Add_H},
  28. {"Add-RKSJ-H",&cmap_Add_RKSJ_H},
  29. {"Add-RKSJ-V",&cmap_Add_RKSJ_V},
  30. {"Add-V",&cmap_Add_V},
  31. {"Adobe-CNS1-0",&cmap_Adobe_CNS1_0},
  32. {"Adobe-CNS1-1",&cmap_Adobe_CNS1_1},
  33. {"Adobe-CNS1-2",&cmap_Adobe_CNS1_2},
  34. {"Adobe-CNS1-3",&cmap_Adobe_CNS1_3},
  35. {"Adobe-CNS1-4",&cmap_Adobe_CNS1_4},
  36. {"Adobe-CNS1-5",&cmap_Adobe_CNS1_5},
  37. {"Adobe-CNS1-6",&cmap_Adobe_CNS1_6},
  38. {"Adobe-CNS1-UCS2",&cmap_Adobe_CNS1_UCS2},
  39. {"Adobe-GB1-0",&cmap_Adobe_GB1_0},
  40. {"Adobe-GB1-1",&cmap_Adobe_GB1_1},
  41. {"Adobe-GB1-2",&cmap_Adobe_GB1_2},
  42. {"Adobe-GB1-3",&cmap_Adobe_GB1_3},
  43. {"Adobe-GB1-4",&cmap_Adobe_GB1_4},
  44. {"Adobe-GB1-5",&cmap_Adobe_GB1_5},
  45. {"Adobe-GB1-UCS2",&cmap_Adobe_GB1_UCS2},
  46. {"Adobe-Japan1-0",&cmap_Adobe_Japan1_0},
  47. {"Adobe-Japan1-1",&cmap_Adobe_Japan1_1},
  48. {"Adobe-Japan1-2",&cmap_Adobe_Japan1_2},
  49. {"Adobe-Japan1-3",&cmap_Adobe_Japan1_3},
  50. {"Adobe-Japan1-4",&cmap_Adobe_Japan1_4},
  51. {"Adobe-Japan1-5",&cmap_Adobe_Japan1_5},
  52. {"Adobe-Japan1-6",&cmap_Adobe_Japan1_6},
  53. {"Adobe-Japan1-UCS2",&cmap_Adobe_Japan1_UCS2},
  54. {"Adobe-Japan2-0",&cmap_Adobe_Japan2_0},
  55. {"Adobe-Korea1-0",&cmap_Adobe_Korea1_0},
  56. {"Adobe-Korea1-1",&cmap_Adobe_Korea1_1},
  57. {"Adobe-Korea1-2",&cmap_Adobe_Korea1_2},
  58. {"Adobe-Korea1-UCS2",&cmap_Adobe_Korea1_UCS2},
  59. {"B5-H",&cmap_B5_H},
  60. {"B5-V",&cmap_B5_V},
  61. {"B5pc-H",&cmap_B5pc_H},
  62. {"B5pc-V",&cmap_B5pc_V},
  63. {"CNS-EUC-H",&cmap_CNS_EUC_H},
  64. {"CNS-EUC-V",&cmap_CNS_EUC_V},
  65. {"CNS1-H",&cmap_CNS1_H},
  66. {"CNS1-V",&cmap_CNS1_V},
  67. {"CNS2-H",&cmap_CNS2_H},
  68. {"CNS2-V",&cmap_CNS2_V},
  69. {"ETHK-B5-H",&cmap_ETHK_B5_H},
  70. {"ETHK-B5-V",&cmap_ETHK_B5_V},
  71. {"ETen-B5-H",&cmap_ETen_B5_H},
  72. {"ETen-B5-V",&cmap_ETen_B5_V},
  73. {"ETenms-B5-H",&cmap_ETenms_B5_H},
  74. {"ETenms-B5-V",&cmap_ETenms_B5_V},
  75. {"EUC-H",&cmap_EUC_H},
  76. {"EUC-V",&cmap_EUC_V},
  77. {"Ext-H",&cmap_Ext_H},
  78. {"Ext-RKSJ-H",&cmap_Ext_RKSJ_H},
  79. {"Ext-RKSJ-V",&cmap_Ext_RKSJ_V},
  80. {"Ext-V",&cmap_Ext_V},
  81. {"GB-EUC-H",&cmap_GB_EUC_H},
  82. {"GB-EUC-V",&cmap_GB_EUC_V},
  83. {"GB-H",&cmap_GB_H},
  84. {"GB-V",&cmap_GB_V},
  85. {"GBK-EUC-H",&cmap_GBK_EUC_H},
  86. {"GBK-EUC-V",&cmap_GBK_EUC_V},
  87. {"GBK2K-H",&cmap_GBK2K_H},
  88. {"GBK2K-V",&cmap_GBK2K_V},
  89. {"GBKp-EUC-H",&cmap_GBKp_EUC_H},
  90. {"GBKp-EUC-V",&cmap_GBKp_EUC_V},
  91. {"GBT-EUC-H",&cmap_GBT_EUC_H},
  92. {"GBT-EUC-V",&cmap_GBT_EUC_V},
  93. {"GBT-H",&cmap_GBT_H},
  94. {"GBT-V",&cmap_GBT_V},
  95. {"GBTpc-EUC-H",&cmap_GBTpc_EUC_H},
  96. {"GBTpc-EUC-V",&cmap_GBTpc_EUC_V},
  97. {"GBpc-EUC-H",&cmap_GBpc_EUC_H},
  98. {"GBpc-EUC-V",&cmap_GBpc_EUC_V},
  99. {"H",&cmap_H},
  100. {"HKdla-B5-H",&cmap_HKdla_B5_H},
  101. {"HKdla-B5-V",&cmap_HKdla_B5_V},
  102. {"HKdlb-B5-H",&cmap_HKdlb_B5_H},
  103. {"HKdlb-B5-V",&cmap_HKdlb_B5_V},
  104. {"HKgccs-B5-H",&cmap_HKgccs_B5_H},
  105. {"HKgccs-B5-V",&cmap_HKgccs_B5_V},
  106. {"HKm314-B5-H",&cmap_HKm314_B5_H},
  107. {"HKm314-B5-V",&cmap_HKm314_B5_V},
  108. {"HKm471-B5-H",&cmap_HKm471_B5_H},
  109. {"HKm471-B5-V",&cmap_HKm471_B5_V},
  110. {"HKscs-B5-H",&cmap_HKscs_B5_H},
  111. {"HKscs-B5-V",&cmap_HKscs_B5_V},
  112. {"Hankaku",&cmap_Hankaku},
  113. {"Hiragana",&cmap_Hiragana},
  114. {"Hojo-EUC-H",&cmap_Hojo_EUC_H},
  115. {"Hojo-EUC-V",&cmap_Hojo_EUC_V},
  116. {"Hojo-H",&cmap_Hojo_H},
  117. {"Hojo-V",&cmap_Hojo_V},
  118. {"KSC-EUC-H",&cmap_KSC_EUC_H},
  119. {"KSC-EUC-V",&cmap_KSC_EUC_V},
  120. {"KSC-H",&cmap_KSC_H},
  121. {"KSC-Johab-H",&cmap_KSC_Johab_H},
  122. {"KSC-Johab-V",&cmap_KSC_Johab_V},
  123. {"KSC-V",&cmap_KSC_V},
  124. {"KSCms-UHC-H",&cmap_KSCms_UHC_H},
  125. {"KSCms-UHC-HW-H",&cmap_KSCms_UHC_HW_H},
  126. {"KSCms-UHC-HW-V",&cmap_KSCms_UHC_HW_V},
  127. {"KSCms-UHC-V",&cmap_KSCms_UHC_V},
  128. {"KSCpc-EUC-H",&cmap_KSCpc_EUC_H},
  129. {"KSCpc-EUC-V",&cmap_KSCpc_EUC_V},
  130. {"Katakana",&cmap_Katakana},
  131. {"NWP-H",&cmap_NWP_H},
  132. {"NWP-V",&cmap_NWP_V},
  133. {"RKSJ-H",&cmap_RKSJ_H},
  134. {"RKSJ-V",&cmap_RKSJ_V},
  135. {"Roman",&cmap_Roman},
  136. {"UniCNS-UCS2-H",&cmap_UniCNS_UCS2_H},
  137. {"UniCNS-UCS2-V",&cmap_UniCNS_UCS2_V},
  138. {"UniCNS-UTF16-H",&cmap_UniCNS_UTF16_H},
  139. {"UniCNS-UTF16-V",&cmap_UniCNS_UTF16_V},
  140. {"UniGB-UCS2-H",&cmap_UniGB_UCS2_H},
  141. {"UniGB-UCS2-V",&cmap_UniGB_UCS2_V},
  142. {"UniGB-UTF16-H",&cmap_UniGB_UTF16_H},
  143. {"UniGB-UTF16-V",&cmap_UniGB_UTF16_V},
  144. {"UniHojo-UCS2-H",&cmap_UniHojo_UCS2_H},
  145. {"UniHojo-UCS2-V",&cmap_UniHojo_UCS2_V},
  146. {"UniHojo-UTF16-H",&cmap_UniHojo_UTF16_H},
  147. {"UniHojo-UTF16-V",&cmap_UniHojo_UTF16_V},
  148. {"UniJIS-UCS2-H",&cmap_UniJIS_UCS2_H},
  149. {"UniJIS-UCS2-HW-H",&cmap_UniJIS_UCS2_HW_H},
  150. {"UniJIS-UCS2-HW-V",&cmap_UniJIS_UCS2_HW_V},
  151. {"UniJIS-UCS2-V",&cmap_UniJIS_UCS2_V},
  152. {"UniJIS-UTF16-H",&cmap_UniJIS_UTF16_H},
  153. {"UniJIS-UTF16-V",&cmap_UniJIS_UTF16_V},
  154. {"UniJISPro-UCS2-HW-V",&cmap_UniJISPro_UCS2_HW_V},
  155. {"UniJISPro-UCS2-V",&cmap_UniJISPro_UCS2_V},
  156. {"UniKS-UCS2-H",&cmap_UniKS_UCS2_H},
  157. {"UniKS-UCS2-V",&cmap_UniKS_UCS2_V},
  158. {"UniKS-UTF16-H",&cmap_UniKS_UTF16_H},
  159. {"UniKS-UTF16-V",&cmap_UniKS_UTF16_V},
  160. {"V",&cmap_V},
  161. {"WP-Symbol",&cmap_WP_Symbol},
  162. #endif
  163. };
  164. pdf_cmap *
  165. pdf_load_builtin_cmap(fz_context *ctx, char *cmap_name)
  166. {
  167. int l = 0;
  168. int r = nelem(cmap_table) - 1;
  169. while (l <= r)
  170. {
  171. int m = (l + r) >> 1;
  172. int c = strcmp(cmap_name, cmap_table[m].name);
  173. if (c < 0)
  174. r = m - 1;
  175. else if (c > 0)
  176. l = m + 1;
  177. else
  178. return cmap_table[m].cmap;
  179. }
  180. return NULL;
  181. }