unicodedata.c 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054
  1. #include "pocketpy/common/str.h"
  2. #include "pocketpy/objects/base.h"
  3. #include "pocketpy/pocketpy.h"
  4. // clang-format off
  5. const static c11_u32_range kEastAsianWidthRanges[] = {
  6. { 32, 126, "Na\0" },
  7. { 161, 161, "A\0" },
  8. { 162, 163, "Na\0" },
  9. { 164, 164, "A\0" },
  10. { 165, 166, "Na\0" },
  11. { 167, 168, "A\0" },
  12. { 170, 170, "A\0" },
  13. { 172, 172, "Na\0" },
  14. { 173, 174, "A\0" },
  15. { 175, 175, "Na\0" },
  16. { 176, 180, "A\0" },
  17. { 182, 186, "A\0" },
  18. { 188, 191, "A\0" },
  19. { 198, 198, "A\0" },
  20. { 208, 208, "A\0" },
  21. { 215, 216, "A\0" },
  22. { 222, 225, "A\0" },
  23. { 230, 230, "A\0" },
  24. { 232, 234, "A\0" },
  25. { 236, 237, "A\0" },
  26. { 240, 240, "A\0" },
  27. { 242, 243, "A\0" },
  28. { 247, 250, "A\0" },
  29. { 252, 252, "A\0" },
  30. { 254, 254, "A\0" },
  31. { 257, 257, "A\0" },
  32. { 273, 273, "A\0" },
  33. { 275, 275, "A\0" },
  34. { 283, 283, "A\0" },
  35. { 294, 295, "A\0" },
  36. { 299, 299, "A\0" },
  37. { 305, 307, "A\0" },
  38. { 312, 312, "A\0" },
  39. { 319, 322, "A\0" },
  40. { 324, 324, "A\0" },
  41. { 328, 331, "A\0" },
  42. { 333, 333, "A\0" },
  43. { 338, 339, "A\0" },
  44. { 358, 359, "A\0" },
  45. { 363, 363, "A\0" },
  46. { 462, 462, "A\0" },
  47. { 464, 464, "A\0" },
  48. { 466, 466, "A\0" },
  49. { 468, 468, "A\0" },
  50. { 470, 470, "A\0" },
  51. { 472, 472, "A\0" },
  52. { 474, 474, "A\0" },
  53. { 476, 476, "A\0" },
  54. { 593, 593, "A\0" },
  55. { 609, 609, "A\0" },
  56. { 708, 708, "A\0" },
  57. { 711, 711, "A\0" },
  58. { 713, 715, "A\0" },
  59. { 717, 717, "A\0" },
  60. { 720, 720, "A\0" },
  61. { 728, 731, "A\0" },
  62. { 733, 733, "A\0" },
  63. { 735, 735, "A\0" },
  64. { 768, 879, "A\0" },
  65. { 888, 889, "F\0" },
  66. { 896, 899, "F\0" },
  67. { 907, 907, "F\0" },
  68. { 909, 909, "F\0" },
  69. { 913, 929, "A\0" },
  70. { 930, 930, "F\0" },
  71. { 931, 937, "A\0" },
  72. { 945, 961, "A\0" },
  73. { 963, 969, "A\0" },
  74. { 1025, 1025, "A\0" },
  75. { 1040, 1103, "A\0" },
  76. { 1105, 1105, "A\0" },
  77. { 1328, 1328, "F\0" },
  78. { 1367, 1368, "F\0" },
  79. { 1419, 1420, "F\0" },
  80. { 1424, 1424, "F\0" },
  81. { 1480, 1487, "F\0" },
  82. { 1515, 1518, "F\0" },
  83. { 1525, 1535, "F\0" },
  84. { 1806, 1806, "F\0" },
  85. { 1867, 1868, "F\0" },
  86. { 1970, 1983, "F\0" },
  87. { 2043, 2044, "F\0" },
  88. { 2094, 2095, "F\0" },
  89. { 2111, 2111, "F\0" },
  90. { 2140, 2141, "F\0" },
  91. { 2143, 2143, "F\0" },
  92. { 2155, 2159, "F\0" },
  93. { 2191, 2191, "F\0" },
  94. { 2194, 2199, "F\0" },
  95. { 2436, 2436, "F\0" },
  96. { 2445, 2446, "F\0" },
  97. { 2449, 2450, "F\0" },
  98. { 2473, 2473, "F\0" },
  99. { 2481, 2481, "F\0" },
  100. { 2483, 2485, "F\0" },
  101. { 2490, 2491, "F\0" },
  102. { 2501, 2502, "F\0" },
  103. { 2505, 2506, "F\0" },
  104. { 2511, 2518, "F\0" },
  105. { 2520, 2523, "F\0" },
  106. { 2526, 2526, "F\0" },
  107. { 2532, 2533, "F\0" },
  108. { 2559, 2560, "F\0" },
  109. { 2564, 2564, "F\0" },
  110. { 2571, 2574, "F\0" },
  111. { 2577, 2578, "F\0" },
  112. { 2601, 2601, "F\0" },
  113. { 2609, 2609, "F\0" },
  114. { 2612, 2612, "F\0" },
  115. { 2615, 2615, "F\0" },
  116. { 2618, 2619, "F\0" },
  117. { 2621, 2621, "F\0" },
  118. { 2627, 2630, "F\0" },
  119. { 2633, 2634, "F\0" },
  120. { 2638, 2640, "F\0" },
  121. { 2642, 2648, "F\0" },
  122. { 2653, 2653, "F\0" },
  123. { 2655, 2661, "F\0" },
  124. { 2679, 2688, "F\0" },
  125. { 2692, 2692, "F\0" },
  126. { 2702, 2702, "F\0" },
  127. { 2706, 2706, "F\0" },
  128. { 2729, 2729, "F\0" },
  129. { 2737, 2737, "F\0" },
  130. { 2740, 2740, "F\0" },
  131. { 2746, 2747, "F\0" },
  132. { 2758, 2758, "F\0" },
  133. { 2762, 2762, "F\0" },
  134. { 2766, 2767, "F\0" },
  135. { 2769, 2783, "F\0" },
  136. { 2788, 2789, "F\0" },
  137. { 2802, 2808, "F\0" },
  138. { 2816, 2816, "F\0" },
  139. { 2820, 2820, "F\0" },
  140. { 2829, 2830, "F\0" },
  141. { 2833, 2834, "F\0" },
  142. { 2857, 2857, "F\0" },
  143. { 2865, 2865, "F\0" },
  144. { 2868, 2868, "F\0" },
  145. { 2874, 2875, "F\0" },
  146. { 2885, 2886, "F\0" },
  147. { 2889, 2890, "F\0" },
  148. { 2894, 2900, "F\0" },
  149. { 2904, 2907, "F\0" },
  150. { 2910, 2910, "F\0" },
  151. { 2916, 2917, "F\0" },
  152. { 2936, 2945, "F\0" },
  153. { 2948, 2948, "F\0" },
  154. { 2955, 2957, "F\0" },
  155. { 2961, 2961, "F\0" },
  156. { 2966, 2968, "F\0" },
  157. { 2971, 2971, "F\0" },
  158. { 2973, 2973, "F\0" },
  159. { 2976, 2978, "F\0" },
  160. { 2981, 2983, "F\0" },
  161. { 2987, 2989, "F\0" },
  162. { 3002, 3005, "F\0" },
  163. { 3011, 3013, "F\0" },
  164. { 3017, 3017, "F\0" },
  165. { 3022, 3023, "F\0" },
  166. { 3025, 3030, "F\0" },
  167. { 3032, 3045, "F\0" },
  168. { 3067, 3071, "F\0" },
  169. { 3085, 3085, "F\0" },
  170. { 3089, 3089, "F\0" },
  171. { 3113, 3113, "F\0" },
  172. { 3130, 3131, "F\0" },
  173. { 3141, 3141, "F\0" },
  174. { 3145, 3145, "F\0" },
  175. { 3150, 3156, "F\0" },
  176. { 3159, 3159, "F\0" },
  177. { 3163, 3164, "F\0" },
  178. { 3166, 3167, "F\0" },
  179. { 3172, 3173, "F\0" },
  180. { 3184, 3190, "F\0" },
  181. { 3213, 3213, "F\0" },
  182. { 3217, 3217, "F\0" },
  183. { 3241, 3241, "F\0" },
  184. { 3252, 3252, "F\0" },
  185. { 3258, 3259, "F\0" },
  186. { 3269, 3269, "F\0" },
  187. { 3273, 3273, "F\0" },
  188. { 3278, 3284, "F\0" },
  189. { 3287, 3292, "F\0" },
  190. { 3295, 3295, "F\0" },
  191. { 3300, 3301, "F\0" },
  192. { 3312, 3312, "F\0" },
  193. { 3315, 3327, "F\0" },
  194. { 3341, 3341, "F\0" },
  195. { 3345, 3345, "F\0" },
  196. { 3397, 3397, "F\0" },
  197. { 3401, 3401, "F\0" },
  198. { 3408, 3411, "F\0" },
  199. { 3428, 3429, "F\0" },
  200. { 3456, 3456, "F\0" },
  201. { 3460, 3460, "F\0" },
  202. { 3479, 3481, "F\0" },
  203. { 3506, 3506, "F\0" },
  204. { 3516, 3516, "F\0" },
  205. { 3518, 3519, "F\0" },
  206. { 3527, 3529, "F\0" },
  207. { 3531, 3534, "F\0" },
  208. { 3541, 3541, "F\0" },
  209. { 3543, 3543, "F\0" },
  210. { 3552, 3557, "F\0" },
  211. { 3568, 3569, "F\0" },
  212. { 3573, 3584, "F\0" },
  213. { 3643, 3646, "F\0" },
  214. { 3676, 3712, "F\0" },
  215. { 3715, 3715, "F\0" },
  216. { 3717, 3717, "F\0" },
  217. { 3723, 3723, "F\0" },
  218. { 3748, 3748, "F\0" },
  219. { 3750, 3750, "F\0" },
  220. { 3774, 3775, "F\0" },
  221. { 3781, 3781, "F\0" },
  222. { 3783, 3783, "F\0" },
  223. { 3790, 3791, "F\0" },
  224. { 3802, 3803, "F\0" },
  225. { 3808, 3839, "F\0" },
  226. { 3912, 3912, "F\0" },
  227. { 3949, 3952, "F\0" },
  228. { 3992, 3992, "F\0" },
  229. { 4029, 4029, "F\0" },
  230. { 4045, 4045, "F\0" },
  231. { 4059, 4095, "F\0" },
  232. { 4294, 4294, "F\0" },
  233. { 4296, 4300, "F\0" },
  234. { 4302, 4303, "F\0" },
  235. { 4352, 4447, "W\0" },
  236. { 4681, 4681, "F\0" },
  237. { 4686, 4687, "F\0" },
  238. { 4695, 4695, "F\0" },
  239. { 4697, 4697, "F\0" },
  240. { 4702, 4703, "F\0" },
  241. { 4745, 4745, "F\0" },
  242. { 4750, 4751, "F\0" },
  243. { 4785, 4785, "F\0" },
  244. { 4790, 4791, "F\0" },
  245. { 4799, 4799, "F\0" },
  246. { 4801, 4801, "F\0" },
  247. { 4806, 4807, "F\0" },
  248. { 4823, 4823, "F\0" },
  249. { 4881, 4881, "F\0" },
  250. { 4886, 4887, "F\0" },
  251. { 4955, 4956, "F\0" },
  252. { 4989, 4991, "F\0" },
  253. { 5018, 5023, "F\0" },
  254. { 5110, 5111, "F\0" },
  255. { 5118, 5119, "F\0" },
  256. { 5789, 5791, "F\0" },
  257. { 5881, 5887, "F\0" },
  258. { 5910, 5918, "F\0" },
  259. { 5943, 5951, "F\0" },
  260. { 5972, 5983, "F\0" },
  261. { 5997, 5997, "F\0" },
  262. { 6001, 6001, "F\0" },
  263. { 6004, 6015, "F\0" },
  264. { 6110, 6111, "F\0" },
  265. { 6122, 6127, "F\0" },
  266. { 6138, 6143, "F\0" },
  267. { 6170, 6175, "F\0" },
  268. { 6265, 6271, "F\0" },
  269. { 6315, 6319, "F\0" },
  270. { 6390, 6399, "F\0" },
  271. { 6431, 6431, "F\0" },
  272. { 6444, 6447, "F\0" },
  273. { 6460, 6463, "F\0" },
  274. { 6465, 6467, "F\0" },
  275. { 6510, 6511, "F\0" },
  276. { 6517, 6527, "F\0" },
  277. { 6572, 6575, "F\0" },
  278. { 6602, 6607, "F\0" },
  279. { 6619, 6621, "F\0" },
  280. { 6684, 6685, "F\0" },
  281. { 6751, 6751, "F\0" },
  282. { 6781, 6782, "F\0" },
  283. { 6794, 6799, "F\0" },
  284. { 6810, 6815, "F\0" },
  285. { 6830, 6831, "F\0" },
  286. { 6863, 6911, "F\0" },
  287. { 6989, 6991, "F\0" },
  288. { 7039, 7039, "F\0" },
  289. { 7156, 7163, "F\0" },
  290. { 7224, 7226, "F\0" },
  291. { 7242, 7244, "F\0" },
  292. { 7305, 7311, "F\0" },
  293. { 7355, 7356, "F\0" },
  294. { 7368, 7375, "F\0" },
  295. { 7419, 7423, "F\0" },
  296. { 7958, 7959, "F\0" },
  297. { 7966, 7967, "F\0" },
  298. { 8006, 8007, "F\0" },
  299. { 8014, 8015, "F\0" },
  300. { 8024, 8024, "F\0" },
  301. { 8026, 8026, "F\0" },
  302. { 8028, 8028, "F\0" },
  303. { 8030, 8030, "F\0" },
  304. { 8062, 8063, "F\0" },
  305. { 8117, 8117, "F\0" },
  306. { 8133, 8133, "F\0" },
  307. { 8148, 8149, "F\0" },
  308. { 8156, 8156, "F\0" },
  309. { 8176, 8177, "F\0" },
  310. { 8181, 8181, "F\0" },
  311. { 8191, 8191, "F\0" },
  312. { 8208, 8208, "A\0" },
  313. { 8211, 8214, "A\0" },
  314. { 8216, 8217, "A\0" },
  315. { 8220, 8221, "A\0" },
  316. { 8224, 8226, "A\0" },
  317. { 8228, 8231, "A\0" },
  318. { 8240, 8240, "A\0" },
  319. { 8242, 8243, "A\0" },
  320. { 8245, 8245, "A\0" },
  321. { 8251, 8251, "A\0" },
  322. { 8254, 8254, "A\0" },
  323. { 8293, 8293, "F\0" },
  324. { 8306, 8307, "F\0" },
  325. { 8308, 8308, "A\0" },
  326. { 8319, 8319, "A\0" },
  327. { 8321, 8324, "A\0" },
  328. { 8335, 8335, "F\0" },
  329. { 8349, 8351, "F\0" },
  330. { 8361, 8361, "H\0" },
  331. { 8364, 8364, "A\0" },
  332. { 8385, 8399, "F\0" },
  333. { 8433, 8447, "F\0" },
  334. { 8451, 8451, "A\0" },
  335. { 8453, 8453, "A\0" },
  336. { 8457, 8457, "A\0" },
  337. { 8467, 8467, "A\0" },
  338. { 8470, 8470, "A\0" },
  339. { 8481, 8482, "A\0" },
  340. { 8486, 8486, "A\0" },
  341. { 8491, 8491, "A\0" },
  342. { 8531, 8532, "A\0" },
  343. { 8539, 8542, "A\0" },
  344. { 8544, 8555, "A\0" },
  345. { 8560, 8569, "A\0" },
  346. { 8585, 8585, "A\0" },
  347. { 8588, 8591, "F\0" },
  348. { 8592, 8601, "A\0" },
  349. { 8632, 8633, "A\0" },
  350. { 8658, 8658, "A\0" },
  351. { 8660, 8660, "A\0" },
  352. { 8679, 8679, "A\0" },
  353. { 8704, 8704, "A\0" },
  354. { 8706, 8707, "A\0" },
  355. { 8711, 8712, "A\0" },
  356. { 8715, 8715, "A\0" },
  357. { 8719, 8719, "A\0" },
  358. { 8721, 8721, "A\0" },
  359. { 8725, 8725, "A\0" },
  360. { 8730, 8730, "A\0" },
  361. { 8733, 8736, "A\0" },
  362. { 8739, 8739, "A\0" },
  363. { 8741, 8741, "A\0" },
  364. { 8743, 8748, "A\0" },
  365. { 8750, 8750, "A\0" },
  366. { 8756, 8759, "A\0" },
  367. { 8764, 8765, "A\0" },
  368. { 8776, 8776, "A\0" },
  369. { 8780, 8780, "A\0" },
  370. { 8786, 8786, "A\0" },
  371. { 8800, 8801, "A\0" },
  372. { 8804, 8807, "A\0" },
  373. { 8810, 8811, "A\0" },
  374. { 8814, 8815, "A\0" },
  375. { 8834, 8835, "A\0" },
  376. { 8838, 8839, "A\0" },
  377. { 8853, 8853, "A\0" },
  378. { 8857, 8857, "A\0" },
  379. { 8869, 8869, "A\0" },
  380. { 8895, 8895, "A\0" },
  381. { 8978, 8978, "A\0" },
  382. { 8986, 8987, "W\0" },
  383. { 9001, 9002, "W\0" },
  384. { 9193, 9196, "W\0" },
  385. { 9200, 9200, "W\0" },
  386. { 9203, 9203, "W\0" },
  387. { 9255, 9279, "F\0" },
  388. { 9291, 9311, "F\0" },
  389. { 9312, 9449, "A\0" },
  390. { 9451, 9547, "A\0" },
  391. { 9552, 9587, "A\0" },
  392. { 9600, 9615, "A\0" },
  393. { 9618, 9621, "A\0" },
  394. { 9632, 9633, "A\0" },
  395. { 9635, 9641, "A\0" },
  396. { 9650, 9651, "A\0" },
  397. { 9654, 9655, "A\0" },
  398. { 9660, 9661, "A\0" },
  399. { 9664, 9665, "A\0" },
  400. { 9670, 9672, "A\0" },
  401. { 9675, 9675, "A\0" },
  402. { 9678, 9681, "A\0" },
  403. { 9698, 9701, "A\0" },
  404. { 9711, 9711, "A\0" },
  405. { 9725, 9726, "W\0" },
  406. { 9733, 9734, "A\0" },
  407. { 9737, 9737, "A\0" },
  408. { 9742, 9743, "A\0" },
  409. { 9748, 9749, "W\0" },
  410. { 9756, 9756, "A\0" },
  411. { 9758, 9758, "A\0" },
  412. { 9792, 9792, "A\0" },
  413. { 9794, 9794, "A\0" },
  414. { 9800, 9811, "W\0" },
  415. { 9824, 9825, "A\0" },
  416. { 9827, 9829, "A\0" },
  417. { 9831, 9834, "A\0" },
  418. { 9836, 9837, "A\0" },
  419. { 9839, 9839, "A\0" },
  420. { 9855, 9855, "W\0" },
  421. { 9875, 9875, "W\0" },
  422. { 9886, 9887, "A\0" },
  423. { 9889, 9889, "W\0" },
  424. { 9898, 9899, "W\0" },
  425. { 9917, 9918, "W\0" },
  426. { 9919, 9919, "A\0" },
  427. { 9924, 9925, "W\0" },
  428. { 9926, 9933, "A\0" },
  429. { 9934, 9934, "W\0" },
  430. { 9935, 9939, "A\0" },
  431. { 9940, 9940, "W\0" },
  432. { 9941, 9953, "A\0" },
  433. { 9955, 9955, "A\0" },
  434. { 9960, 9961, "A\0" },
  435. { 9962, 9962, "W\0" },
  436. { 9963, 9969, "A\0" },
  437. { 9970, 9971, "W\0" },
  438. { 9972, 9972, "A\0" },
  439. { 9973, 9973, "W\0" },
  440. { 9974, 9977, "A\0" },
  441. { 9978, 9978, "W\0" },
  442. { 9979, 9980, "A\0" },
  443. { 9981, 9981, "W\0" },
  444. { 9982, 9983, "A\0" },
  445. { 9989, 9989, "W\0" },
  446. { 9994, 9995, "W\0" },
  447. { 10024, 10024, "W\0" },
  448. { 10045, 10045, "A\0" },
  449. { 10060, 10060, "W\0" },
  450. { 10062, 10062, "W\0" },
  451. { 10067, 10069, "W\0" },
  452. { 10071, 10071, "W\0" },
  453. { 10102, 10111, "A\0" },
  454. { 10133, 10135, "W\0" },
  455. { 10160, 10160, "W\0" },
  456. { 10175, 10175, "W\0" },
  457. { 10214, 10221, "Na\0" },
  458. { 10629, 10630, "Na\0" },
  459. { 11035, 11036, "W\0" },
  460. { 11088, 11088, "W\0" },
  461. { 11093, 11093, "W\0" },
  462. { 11094, 11097, "A\0" },
  463. { 11124, 11125, "F\0" },
  464. { 11158, 11158, "F\0" },
  465. { 11508, 11512, "F\0" },
  466. { 11558, 11558, "F\0" },
  467. { 11560, 11564, "F\0" },
  468. { 11566, 11567, "F\0" },
  469. { 11624, 11630, "F\0" },
  470. { 11633, 11646, "F\0" },
  471. { 11671, 11679, "F\0" },
  472. { 11687, 11687, "F\0" },
  473. { 11695, 11695, "F\0" },
  474. { 11703, 11703, "F\0" },
  475. { 11711, 11711, "F\0" },
  476. { 11719, 11719, "F\0" },
  477. { 11727, 11727, "F\0" },
  478. { 11735, 11735, "F\0" },
  479. { 11743, 11743, "F\0" },
  480. { 11870, 11903, "F\0" },
  481. { 11904, 11929, "W\0" },
  482. { 11930, 11930, "F\0" },
  483. { 11931, 12019, "W\0" },
  484. { 12020, 12031, "F\0" },
  485. { 12032, 12245, "W\0" },
  486. { 12246, 12271, "F\0" },
  487. { 12272, 12283, "W\0" },
  488. { 12284, 12288, "F\0" },
  489. { 12289, 12350, "W\0" },
  490. { 12352, 12352, "F\0" },
  491. { 12353, 12438, "W\0" },
  492. { 12439, 12440, "F\0" },
  493. { 12441, 12543, "W\0" },
  494. { 12544, 12548, "F\0" },
  495. { 12549, 12591, "W\0" },
  496. { 12592, 12592, "F\0" },
  497. { 12593, 12686, "W\0" },
  498. { 12687, 12687, "F\0" },
  499. { 12688, 12771, "W\0" },
  500. { 12772, 12783, "F\0" },
  501. { 12784, 12830, "W\0" },
  502. { 12831, 12831, "F\0" },
  503. { 12832, 12871, "W\0" },
  504. { 12872, 12879, "A\0" },
  505. { 12880, 19903, "W\0" },
  506. { 19968, 42124, "W\0" },
  507. { 42125, 42127, "F\0" },
  508. { 42128, 42182, "W\0" },
  509. { 42183, 42191, "F\0" },
  510. { 42540, 42559, "F\0" },
  511. { 42744, 42751, "F\0" },
  512. { 42955, 42959, "F\0" },
  513. { 42962, 42962, "F\0" },
  514. { 42964, 42964, "F\0" },
  515. { 42970, 42993, "F\0" },
  516. { 43053, 43055, "F\0" },
  517. { 43066, 43071, "F\0" },
  518. { 43128, 43135, "F\0" },
  519. { 43206, 43213, "F\0" },
  520. { 43226, 43231, "F\0" },
  521. { 43348, 43358, "F\0" },
  522. { 43360, 43388, "W\0" },
  523. { 43389, 43391, "F\0" },
  524. { 43470, 43470, "F\0" },
  525. { 43482, 43485, "F\0" },
  526. { 43519, 43519, "F\0" },
  527. { 43575, 43583, "F\0" },
  528. { 43598, 43599, "F\0" },
  529. { 43610, 43611, "F\0" },
  530. { 43715, 43738, "F\0" },
  531. { 43767, 43776, "F\0" },
  532. { 43783, 43784, "F\0" },
  533. { 43791, 43792, "F\0" },
  534. { 43799, 43807, "F\0" },
  535. { 43815, 43815, "F\0" },
  536. { 43823, 43823, "F\0" },
  537. { 43884, 43887, "F\0" },
  538. { 44014, 44015, "F\0" },
  539. { 44026, 44031, "F\0" },
  540. { 44032, 55203, "W\0" },
  541. { 55204, 55215, "F\0" },
  542. { 55239, 55242, "F\0" },
  543. { 55292, 55295, "F\0" },
  544. { 57344, 63743, "A\0" },
  545. { 63744, 64109, "W\0" },
  546. { 64110, 64111, "F\0" },
  547. { 64112, 64217, "W\0" },
  548. { 64218, 64255, "F\0" },
  549. { 64263, 64274, "F\0" },
  550. { 64280, 64284, "F\0" },
  551. { 64311, 64311, "F\0" },
  552. { 64317, 64317, "F\0" },
  553. { 64319, 64319, "F\0" },
  554. { 64322, 64322, "F\0" },
  555. { 64325, 64325, "F\0" },
  556. { 64451, 64466, "F\0" },
  557. { 64912, 64913, "F\0" },
  558. { 64968, 64974, "F\0" },
  559. { 64976, 65007, "F\0" },
  560. { 65024, 65039, "A\0" },
  561. { 65040, 65049, "W\0" },
  562. { 65050, 65055, "F\0" },
  563. { 65072, 65106, "W\0" },
  564. { 65107, 65107, "F\0" },
  565. { 65108, 65126, "W\0" },
  566. { 65127, 65127, "F\0" },
  567. { 65128, 65131, "W\0" },
  568. { 65132, 65135, "F\0" },
  569. { 65141, 65141, "F\0" },
  570. { 65277, 65278, "F\0" },
  571. { 65280, 65376, "F\0" },
  572. { 65377, 65470, "H\0" },
  573. { 65471, 65473, "F\0" },
  574. { 65474, 65479, "H\0" },
  575. { 65480, 65481, "F\0" },
  576. { 65482, 65487, "H\0" },
  577. { 65488, 65489, "F\0" },
  578. { 65490, 65495, "H\0" },
  579. { 65496, 65497, "F\0" },
  580. { 65498, 65500, "H\0" },
  581. { 65501, 65511, "F\0" },
  582. { 65512, 65518, "H\0" },
  583. { 65519, 65528, "F\0" },
  584. { 65533, 65533, "A\0" },
  585. { 65534, 65535, "F\0" },
  586. { 65548, 65548, "F\0" },
  587. { 65575, 65575, "F\0" },
  588. { 65595, 65595, "F\0" },
  589. { 65598, 65598, "F\0" },
  590. { 65614, 65615, "F\0" },
  591. { 65630, 65663, "F\0" },
  592. { 65787, 65791, "F\0" },
  593. { 65795, 65798, "F\0" },
  594. { 65844, 65846, "F\0" },
  595. { 65935, 65935, "F\0" },
  596. { 65949, 65951, "F\0" },
  597. { 65953, 65999, "F\0" },
  598. { 66046, 66175, "F\0" },
  599. { 66205, 66207, "F\0" },
  600. { 66257, 66271, "F\0" },
  601. { 66300, 66303, "F\0" },
  602. { 66340, 66348, "F\0" },
  603. { 66379, 66383, "F\0" },
  604. { 66427, 66431, "F\0" },
  605. { 66462, 66462, "F\0" },
  606. { 66500, 66503, "F\0" },
  607. { 66518, 66559, "F\0" },
  608. { 66718, 66719, "F\0" },
  609. { 66730, 66735, "F\0" },
  610. { 66772, 66775, "F\0" },
  611. { 66812, 66815, "F\0" },
  612. { 66856, 66863, "F\0" },
  613. { 66916, 66926, "F\0" },
  614. { 66939, 66939, "F\0" },
  615. { 66955, 66955, "F\0" },
  616. { 66963, 66963, "F\0" },
  617. { 66966, 66966, "F\0" },
  618. { 66978, 66978, "F\0" },
  619. { 66994, 66994, "F\0" },
  620. { 67002, 67002, "F\0" },
  621. { 67005, 67071, "F\0" },
  622. { 67383, 67391, "F\0" },
  623. { 67414, 67423, "F\0" },
  624. { 67432, 67455, "F\0" },
  625. { 67462, 67462, "F\0" },
  626. { 67505, 67505, "F\0" },
  627. { 67515, 67583, "F\0" },
  628. { 67590, 67591, "F\0" },
  629. { 67593, 67593, "F\0" },
  630. { 67638, 67638, "F\0" },
  631. { 67641, 67643, "F\0" },
  632. { 67645, 67646, "F\0" },
  633. { 67670, 67670, "F\0" },
  634. { 67743, 67750, "F\0" },
  635. { 67760, 67807, "F\0" },
  636. { 67827, 67827, "F\0" },
  637. { 67830, 67834, "F\0" },
  638. { 67868, 67870, "F\0" },
  639. { 67898, 67902, "F\0" },
  640. { 67904, 67967, "F\0" },
  641. { 68024, 68027, "F\0" },
  642. { 68048, 68049, "F\0" },
  643. { 68100, 68100, "F\0" },
  644. { 68103, 68107, "F\0" },
  645. { 68116, 68116, "F\0" },
  646. { 68120, 68120, "F\0" },
  647. { 68150, 68151, "F\0" },
  648. { 68155, 68158, "F\0" },
  649. { 68169, 68175, "F\0" },
  650. { 68185, 68191, "F\0" },
  651. { 68256, 68287, "F\0" },
  652. { 68327, 68330, "F\0" },
  653. { 68343, 68351, "F\0" },
  654. { 68406, 68408, "F\0" },
  655. { 68438, 68439, "F\0" },
  656. { 68467, 68471, "F\0" },
  657. { 68498, 68504, "F\0" },
  658. { 68509, 68520, "F\0" },
  659. { 68528, 68607, "F\0" },
  660. { 68681, 68735, "F\0" },
  661. { 68787, 68799, "F\0" },
  662. { 68851, 68857, "F\0" },
  663. { 68904, 68911, "F\0" },
  664. { 68922, 69215, "F\0" },
  665. { 69247, 69247, "F\0" },
  666. { 69290, 69290, "F\0" },
  667. { 69294, 69295, "F\0" },
  668. { 69298, 69375, "F\0" },
  669. { 69416, 69423, "F\0" },
  670. { 69466, 69487, "F\0" },
  671. { 69514, 69551, "F\0" },
  672. { 69580, 69599, "F\0" },
  673. { 69623, 69631, "F\0" },
  674. { 69710, 69713, "F\0" },
  675. { 69750, 69758, "F\0" },
  676. { 69827, 69836, "F\0" },
  677. { 69838, 69839, "F\0" },
  678. { 69865, 69871, "F\0" },
  679. { 69882, 69887, "F\0" },
  680. { 69941, 69941, "F\0" },
  681. { 69960, 69967, "F\0" },
  682. { 70007, 70015, "F\0" },
  683. { 70112, 70112, "F\0" },
  684. { 70133, 70143, "F\0" },
  685. { 70162, 70162, "F\0" },
  686. { 70207, 70271, "F\0" },
  687. { 70279, 70279, "F\0" },
  688. { 70281, 70281, "F\0" },
  689. { 70286, 70286, "F\0" },
  690. { 70302, 70302, "F\0" },
  691. { 70314, 70319, "F\0" },
  692. { 70379, 70383, "F\0" },
  693. { 70394, 70399, "F\0" },
  694. { 70404, 70404, "F\0" },
  695. { 70413, 70414, "F\0" },
  696. { 70417, 70418, "F\0" },
  697. { 70441, 70441, "F\0" },
  698. { 70449, 70449, "F\0" },
  699. { 70452, 70452, "F\0" },
  700. { 70458, 70458, "F\0" },
  701. { 70469, 70470, "F\0" },
  702. { 70473, 70474, "F\0" },
  703. { 70478, 70479, "F\0" },
  704. { 70481, 70486, "F\0" },
  705. { 70488, 70492, "F\0" },
  706. { 70500, 70501, "F\0" },
  707. { 70509, 70511, "F\0" },
  708. { 70517, 70655, "F\0" },
  709. { 70748, 70748, "F\0" },
  710. { 70754, 70783, "F\0" },
  711. { 70856, 70863, "F\0" },
  712. { 70874, 71039, "F\0" },
  713. { 71094, 71095, "F\0" },
  714. { 71134, 71167, "F\0" },
  715. { 71237, 71247, "F\0" },
  716. { 71258, 71263, "F\0" },
  717. { 71277, 71295, "F\0" },
  718. { 71354, 71359, "F\0" },
  719. { 71370, 71423, "F\0" },
  720. { 71451, 71452, "F\0" },
  721. { 71468, 71471, "F\0" },
  722. { 71495, 71679, "F\0" },
  723. { 71740, 71839, "F\0" },
  724. { 71923, 71934, "F\0" },
  725. { 71943, 71944, "F\0" },
  726. { 71946, 71947, "F\0" },
  727. { 71956, 71956, "F\0" },
  728. { 71959, 71959, "F\0" },
  729. { 71990, 71990, "F\0" },
  730. { 71993, 71994, "F\0" },
  731. { 72007, 72015, "F\0" },
  732. { 72026, 72095, "F\0" },
  733. { 72104, 72105, "F\0" },
  734. { 72152, 72153, "F\0" },
  735. { 72165, 72191, "F\0" },
  736. { 72264, 72271, "F\0" },
  737. { 72355, 72367, "F\0" },
  738. { 72441, 72703, "F\0" },
  739. { 72713, 72713, "F\0" },
  740. { 72759, 72759, "F\0" },
  741. { 72774, 72783, "F\0" },
  742. { 72813, 72815, "F\0" },
  743. { 72848, 72849, "F\0" },
  744. { 72872, 72872, "F\0" },
  745. { 72887, 72959, "F\0" },
  746. { 72967, 72967, "F\0" },
  747. { 72970, 72970, "F\0" },
  748. { 73015, 73017, "F\0" },
  749. { 73019, 73019, "F\0" },
  750. { 73022, 73022, "F\0" },
  751. { 73032, 73039, "F\0" },
  752. { 73050, 73055, "F\0" },
  753. { 73062, 73062, "F\0" },
  754. { 73065, 73065, "F\0" },
  755. { 73103, 73103, "F\0" },
  756. { 73106, 73106, "F\0" },
  757. { 73113, 73119, "F\0" },
  758. { 73130, 73439, "F\0" },
  759. { 73465, 73647, "F\0" },
  760. { 73649, 73663, "F\0" },
  761. { 73714, 73726, "F\0" },
  762. { 74650, 74751, "F\0" },
  763. { 74863, 74863, "F\0" },
  764. { 74869, 74879, "F\0" },
  765. { 75076, 77711, "F\0" },
  766. { 77811, 77823, "F\0" },
  767. { 78895, 78895, "F\0" },
  768. { 78905, 82943, "F\0" },
  769. { 83527, 92159, "F\0" },
  770. { 92729, 92735, "F\0" },
  771. { 92767, 92767, "F\0" },
  772. { 92778, 92781, "F\0" },
  773. { 92863, 92863, "F\0" },
  774. { 92874, 92879, "F\0" },
  775. { 92910, 92911, "F\0" },
  776. { 92918, 92927, "F\0" },
  777. { 92998, 93007, "F\0" },
  778. { 93018, 93018, "F\0" },
  779. { 93026, 93026, "F\0" },
  780. { 93048, 93052, "F\0" },
  781. { 93072, 93759, "F\0" },
  782. { 93851, 93951, "F\0" },
  783. { 94027, 94030, "F\0" },
  784. { 94088, 94094, "F\0" },
  785. { 94112, 94175, "F\0" },
  786. { 94176, 94180, "W\0" },
  787. { 94181, 94191, "F\0" },
  788. { 94192, 94193, "W\0" },
  789. { 94194, 94207, "F\0" },
  790. { 94208, 100343, "W\0" },
  791. { 100344, 100351, "F\0" },
  792. { 100352, 101589, "W\0" },
  793. { 101590, 101631, "F\0" },
  794. { 101632, 101640, "W\0" },
  795. { 101641, 110575, "F\0" },
  796. { 110576, 110579, "W\0" },
  797. { 110580, 110580, "F\0" },
  798. { 110581, 110587, "W\0" },
  799. { 110588, 110588, "F\0" },
  800. { 110589, 110590, "W\0" },
  801. { 110591, 110591, "F\0" },
  802. { 110592, 110882, "W\0" },
  803. { 110883, 110927, "F\0" },
  804. { 110928, 110930, "W\0" },
  805. { 110931, 110947, "F\0" },
  806. { 110948, 110951, "W\0" },
  807. { 110952, 110959, "F\0" },
  808. { 110960, 111355, "W\0" },
  809. { 111356, 113663, "F\0" },
  810. { 113771, 113775, "F\0" },
  811. { 113789, 113791, "F\0" },
  812. { 113801, 113807, "F\0" },
  813. { 113818, 113819, "F\0" },
  814. { 113828, 118527, "F\0" },
  815. { 118574, 118575, "F\0" },
  816. { 118599, 118607, "F\0" },
  817. { 118724, 118783, "F\0" },
  818. { 119030, 119039, "F\0" },
  819. { 119079, 119080, "F\0" },
  820. { 119275, 119295, "F\0" },
  821. { 119366, 119519, "F\0" },
  822. { 119540, 119551, "F\0" },
  823. { 119639, 119647, "F\0" },
  824. { 119673, 119807, "F\0" },
  825. { 119893, 119893, "F\0" },
  826. { 119965, 119965, "F\0" },
  827. { 119968, 119969, "F\0" },
  828. { 119971, 119972, "F\0" },
  829. { 119975, 119976, "F\0" },
  830. { 119981, 119981, "F\0" },
  831. { 119994, 119994, "F\0" },
  832. { 119996, 119996, "F\0" },
  833. { 120004, 120004, "F\0" },
  834. { 120070, 120070, "F\0" },
  835. { 120075, 120076, "F\0" },
  836. { 120085, 120085, "F\0" },
  837. { 120093, 120093, "F\0" },
  838. { 120122, 120122, "F\0" },
  839. { 120127, 120127, "F\0" },
  840. { 120133, 120133, "F\0" },
  841. { 120135, 120137, "F\0" },
  842. { 120145, 120145, "F\0" },
  843. { 120486, 120487, "F\0" },
  844. { 120780, 120781, "F\0" },
  845. { 121484, 121498, "F\0" },
  846. { 121504, 121504, "F\0" },
  847. { 121520, 122623, "F\0" },
  848. { 122655, 122879, "F\0" },
  849. { 122887, 122887, "F\0" },
  850. { 122905, 122906, "F\0" },
  851. { 122914, 122914, "F\0" },
  852. { 122917, 122917, "F\0" },
  853. { 122923, 123135, "F\0" },
  854. { 123181, 123183, "F\0" },
  855. { 123198, 123199, "F\0" },
  856. { 123210, 123213, "F\0" },
  857. { 123216, 123535, "F\0" },
  858. { 123567, 123583, "F\0" },
  859. { 123642, 123646, "F\0" },
  860. { 123648, 124895, "F\0" },
  861. { 124903, 124903, "F\0" },
  862. { 124908, 124908, "F\0" },
  863. { 124911, 124911, "F\0" },
  864. { 124927, 124927, "F\0" },
  865. { 125125, 125126, "F\0" },
  866. { 125143, 125183, "F\0" },
  867. { 125260, 125263, "F\0" },
  868. { 125274, 125277, "F\0" },
  869. { 125280, 126064, "F\0" },
  870. { 126133, 126208, "F\0" },
  871. { 126270, 126463, "F\0" },
  872. { 126468, 126468, "F\0" },
  873. { 126496, 126496, "F\0" },
  874. { 126499, 126499, "F\0" },
  875. { 126501, 126502, "F\0" },
  876. { 126504, 126504, "F\0" },
  877. { 126515, 126515, "F\0" },
  878. { 126520, 126520, "F\0" },
  879. { 126522, 126522, "F\0" },
  880. { 126524, 126529, "F\0" },
  881. { 126531, 126534, "F\0" },
  882. { 126536, 126536, "F\0" },
  883. { 126538, 126538, "F\0" },
  884. { 126540, 126540, "F\0" },
  885. { 126544, 126544, "F\0" },
  886. { 126547, 126547, "F\0" },
  887. { 126549, 126550, "F\0" },
  888. { 126552, 126552, "F\0" },
  889. { 126554, 126554, "F\0" },
  890. { 126556, 126556, "F\0" },
  891. { 126558, 126558, "F\0" },
  892. { 126560, 126560, "F\0" },
  893. { 126563, 126563, "F\0" },
  894. { 126565, 126566, "F\0" },
  895. { 126571, 126571, "F\0" },
  896. { 126579, 126579, "F\0" },
  897. { 126584, 126584, "F\0" },
  898. { 126589, 126589, "F\0" },
  899. { 126591, 126591, "F\0" },
  900. { 126602, 126602, "F\0" },
  901. { 126620, 126624, "F\0" },
  902. { 126628, 126628, "F\0" },
  903. { 126634, 126634, "F\0" },
  904. { 126652, 126703, "F\0" },
  905. { 126706, 126975, "F\0" },
  906. { 126980, 126980, "W\0" },
  907. { 127020, 127023, "F\0" },
  908. { 127124, 127135, "F\0" },
  909. { 127151, 127152, "F\0" },
  910. { 127168, 127168, "F\0" },
  911. { 127183, 127183, "W\0" },
  912. { 127184, 127184, "F\0" },
  913. { 127222, 127231, "F\0" },
  914. { 127232, 127242, "A\0" },
  915. { 127248, 127277, "A\0" },
  916. { 127280, 127337, "A\0" },
  917. { 127344, 127373, "A\0" },
  918. { 127374, 127374, "W\0" },
  919. { 127375, 127376, "A\0" },
  920. { 127377, 127386, "W\0" },
  921. { 127387, 127404, "A\0" },
  922. { 127406, 127461, "F\0" },
  923. { 127488, 127490, "W\0" },
  924. { 127491, 127503, "F\0" },
  925. { 127504, 127547, "W\0" },
  926. { 127548, 127551, "F\0" },
  927. { 127552, 127560, "W\0" },
  928. { 127561, 127567, "F\0" },
  929. { 127568, 127569, "W\0" },
  930. { 127570, 127583, "F\0" },
  931. { 127584, 127589, "W\0" },
  932. { 127590, 127743, "F\0" },
  933. { 127744, 127776, "W\0" },
  934. { 127789, 127797, "W\0" },
  935. { 127799, 127868, "W\0" },
  936. { 127870, 127891, "W\0" },
  937. { 127904, 127946, "W\0" },
  938. { 127951, 127955, "W\0" },
  939. { 127968, 127984, "W\0" },
  940. { 127988, 127988, "W\0" },
  941. { 127992, 128062, "W\0" },
  942. { 128064, 128064, "W\0" },
  943. { 128066, 128252, "W\0" },
  944. { 128255, 128317, "W\0" },
  945. { 128331, 128334, "W\0" },
  946. { 128336, 128359, "W\0" },
  947. { 128378, 128378, "W\0" },
  948. { 128405, 128406, "W\0" },
  949. { 128420, 128420, "W\0" },
  950. { 128507, 128591, "W\0" },
  951. { 128640, 128709, "W\0" },
  952. { 128716, 128716, "W\0" },
  953. { 128720, 128722, "W\0" },
  954. { 128725, 128727, "W\0" },
  955. { 128728, 128732, "F\0" },
  956. { 128733, 128735, "W\0" },
  957. { 128747, 128748, "W\0" },
  958. { 128749, 128751, "F\0" },
  959. { 128756, 128764, "W\0" },
  960. { 128765, 128767, "F\0" },
  961. { 128884, 128895, "F\0" },
  962. { 128985, 128991, "F\0" },
  963. { 128992, 129003, "W\0" },
  964. { 129004, 129007, "F\0" },
  965. { 129008, 129008, "W\0" },
  966. { 129009, 129023, "F\0" },
  967. { 129036, 129039, "F\0" },
  968. { 129096, 129103, "F\0" },
  969. { 129114, 129119, "F\0" },
  970. { 129160, 129167, "F\0" },
  971. { 129198, 129199, "F\0" },
  972. { 129202, 129279, "F\0" },
  973. { 129292, 129338, "W\0" },
  974. { 129340, 129349, "W\0" },
  975. { 129351, 129535, "W\0" },
  976. { 129620, 129631, "F\0" },
  977. { 129646, 129647, "F\0" },
  978. { 129648, 129652, "W\0" },
  979. { 129653, 129655, "F\0" },
  980. { 129656, 129660, "W\0" },
  981. { 129661, 129663, "F\0" },
  982. { 129664, 129670, "W\0" },
  983. { 129671, 129679, "F\0" },
  984. { 129680, 129708, "W\0" },
  985. { 129709, 129711, "F\0" },
  986. { 129712, 129722, "W\0" },
  987. { 129723, 129727, "F\0" },
  988. { 129728, 129733, "W\0" },
  989. { 129734, 129743, "F\0" },
  990. { 129744, 129753, "W\0" },
  991. { 129754, 129759, "F\0" },
  992. { 129760, 129767, "W\0" },
  993. { 129768, 129775, "F\0" },
  994. { 129776, 129782, "W\0" },
  995. { 129783, 129791, "F\0" },
  996. { 129939, 129939, "F\0" },
  997. { 129995, 130031, "F\0" },
  998. { 130042, 131071, "F\0" },
  999. { 131072, 173791, "W\0" },
  1000. { 173792, 173823, "F\0" },
  1001. { 173824, 177976, "W\0" },
  1002. { 177977, 177983, "F\0" },
  1003. { 177984, 178205, "W\0" },
  1004. { 178206, 178207, "F\0" },
  1005. { 178208, 183969, "W\0" },
  1006. { 183970, 183983, "F\0" },
  1007. { 183984, 191456, "W\0" },
  1008. { 191457, 194559, "F\0" },
  1009. { 194560, 195101, "W\0" },
  1010. { 195102, 196607, "F\0" },
  1011. { 196608, 201546, "W\0" },
  1012. { 201547, 917504, "F\0" },
  1013. { 917506, 917535, "F\0" },
  1014. { 917632, 917759, "F\0" },
  1015. { 917760, 917999, "A\0" },
  1016. { 918000, 983039, "F\0" },
  1017. { 983040, 1048573, "A\0" },
  1018. { 1048574, 1048575, "F\0" },
  1019. { 1048576, 1114109, "A\0" },
  1020. { 1114110, 1114111, "F\0" },
  1021. };
  1022. // clang-format on
  1023. const char* c11__u32_east_asian_width(int c) {
  1024. const char* data =
  1025. c11__search_u32_ranges(c,
  1026. kEastAsianWidthRanges,
  1027. sizeof(kEastAsianWidthRanges) / sizeof(c11_u32_range));
  1028. if(data == NULL) return "N";
  1029. return data;
  1030. }
  1031. static bool unicodedata_east_asian_width(int argc, py_Ref argv) {
  1032. PY_CHECK_ARGC(1);
  1033. PY_CHECK_ARG_TYPE(0, tp_str);
  1034. c11_sv sv = py_tosv(py_arg(0));
  1035. if(c11_sv__u8_length(sv) != 1) {
  1036. return TypeError("east_asian_width() expected a character, but string of length %d found",
  1037. c11_sv__u8_length(sv));
  1038. }
  1039. int u8bytes = c11__u8_header(sv.data[0], true);
  1040. if(u8bytes == 0) return ValueError("invalid utf-8 char: %c", sv.data[0]);
  1041. int value = c11__u8_value(u8bytes, sv.data);
  1042. const char* width = c11__u32_east_asian_width(value);
  1043. py_newstr(py_retval(), width);
  1044. return true;
  1045. }
  1046. void pk__add_module_unicodedata() {
  1047. py_Ref mod = py_newmodule("unicodedata");
  1048. py_bindfunc(mod, "east_asian_width", unicodedata_east_asian_width);
  1049. }