@hxa-rn/react-native-gcanvas 6.0.24-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1280) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +207 -0
  4. package/harmony/gcanvas/LICENSE +21 -0
  5. package/harmony/gcanvas/NOTICE +33 -0
  6. package/harmony/gcanvas/OAT.xml +38 -0
  7. package/harmony/gcanvas/build-profile.json5 +16 -0
  8. package/harmony/gcanvas/consumer-rules.txt +0 -0
  9. package/harmony/gcanvas/hvigorfile.ts +2 -0
  10. package/harmony/gcanvas/index.ets +1 -0
  11. package/harmony/gcanvas/oh-package.json5 +14 -0
  12. package/harmony/gcanvas/src/main/cpp/CMakeLists.txt +126 -0
  13. package/harmony/gcanvas/src/main/cpp/GCanvasEngine.cpp +665 -0
  14. package/harmony/gcanvas/src/main/cpp/GCanvasEngine.h +123 -0
  15. package/harmony/gcanvas/src/main/cpp/GCanvasNapi.cpp +485 -0
  16. package/harmony/gcanvas/src/main/cpp/GCanvasXComponent.cpp +166 -0
  17. package/harmony/gcanvas/src/main/cpp/GcanvasPackage.h +24 -0
  18. package/harmony/gcanvas/src/main/cpp/core/CMakeLists.txt +221 -0
  19. package/harmony/gcanvas/src/main/cpp/core/README.md +1 -0
  20. package/harmony/gcanvas/src/main/cpp/core/harmony/3d/gmanager.cpp +69 -0
  21. package/harmony/gcanvas/src/main/cpp/core/harmony/3d/gmanager.h +34 -0
  22. package/harmony/gcanvas/src/main/cpp/core/harmony/3d/jsc/weexjsc.h +14 -0
  23. package/harmony/gcanvas/src/main/cpp/core/harmony/3d/util/auto_ptr.h +110 -0
  24. package/harmony/gcanvas/src/main/cpp/core/harmony/3d/util/i_delete.h +23 -0
  25. package/harmony/gcanvas/src/main/cpp/core/harmony/3d/util/ref_count.h +34 -0
  26. package/harmony/gcanvas/src/main/cpp/core/harmony/3d/view/GcanvasWeexOhos.cpp +28 -0
  27. package/harmony/gcanvas/src/main/cpp/core/harmony/3d/view/GcanvasWeexOhos.h +27 -0
  28. package/harmony/gcanvas/src/main/cpp/core/harmony/3d/view/grenderer.cpp +677 -0
  29. package/harmony/gcanvas/src/main/cpp/core/harmony/3d/view/grenderer.h +127 -0
  30. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/LICENSE.TXT +46 -0
  31. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/README +107 -0
  32. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/config/ftconfig.h +51 -0
  33. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/config/ftheader.h +836 -0
  34. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/config/ftmodule.h +33 -0
  35. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/config/ftoption.h +1030 -0
  36. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/config/ftstdlib.h +185 -0
  37. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/config/integer-types.h +250 -0
  38. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/config/mac-support.h +49 -0
  39. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/config/public-macros.h +138 -0
  40. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/freetype.h +5289 -0
  41. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftadvanc.h +188 -0
  42. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftbbox.h +101 -0
  43. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftbdf.h +212 -0
  44. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftbitmap.h +329 -0
  45. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftbzip2.h +102 -0
  46. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftcache.h +1087 -0
  47. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftchapters.h +168 -0
  48. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftcid.h +167 -0
  49. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftcolor.h +1667 -0
  50. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftdriver.h +1320 -0
  51. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/fterrdef.h +283 -0
  52. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/fterrors.h +296 -0
  53. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftfntfmt.h +93 -0
  54. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftgasp.h +143 -0
  55. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftglyph.h +750 -0
  56. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftgxval.h +354 -0
  57. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftgzip.h +151 -0
  58. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftimage.h +1289 -0
  59. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftincrem.h +348 -0
  60. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftlcdfil.h +323 -0
  61. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftlist.h +296 -0
  62. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftlogging.h +184 -0
  63. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftlzw.h +100 -0
  64. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftmac.h +289 -0
  65. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftmm.h +834 -0
  66. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftmodapi.h +807 -0
  67. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftmoderr.h +204 -0
  68. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftotval.h +206 -0
  69. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftoutln.h +588 -0
  70. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftparams.h +218 -0
  71. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftpfr.h +179 -0
  72. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftrender.h +244 -0
  73. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftsizes.h +159 -0
  74. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftsnames.h +272 -0
  75. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftstroke.h +773 -0
  76. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftsynth.h +104 -0
  77. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftsystem.h +350 -0
  78. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/fttrigon.h +350 -0
  79. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/fttypes.h +617 -0
  80. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ftwinfnt.h +276 -0
  81. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/autohint.h +234 -0
  82. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/cffotypes.h +107 -0
  83. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/cfftypes.h +416 -0
  84. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/compiler-macros.h +343 -0
  85. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/ftcalc.h +584 -0
  86. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/ftdebug.h +442 -0
  87. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/ftdrv.h +289 -0
  88. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/ftgloadr.h +147 -0
  89. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/fthash.h +135 -0
  90. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/ftmemory.h +401 -0
  91. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/ftmmtypes.h +91 -0
  92. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/ftobjs.h +1232 -0
  93. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/ftpsprop.h +47 -0
  94. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/ftrfork.h +245 -0
  95. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/ftserv.h +495 -0
  96. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/ftstream.h +570 -0
  97. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/fttrace.h +173 -0
  98. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/ftvalid.h +160 -0
  99. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/psaux.h +1447 -0
  100. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/pshints.h +699 -0
  101. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svbdf.h +66 -0
  102. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svcfftl.h +90 -0
  103. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svcid.h +69 -0
  104. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svfntfmt.h +55 -0
  105. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svgldict.h +72 -0
  106. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svgxval.h +72 -0
  107. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svkern.h +51 -0
  108. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svmetric.h +131 -0
  109. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svmm.h +214 -0
  110. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svotval.h +55 -0
  111. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svpfr.h +65 -0
  112. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svpostnm.h +65 -0
  113. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svprop.h +66 -0
  114. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svpscmap.h +145 -0
  115. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svpsinfo.h +86 -0
  116. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svsfnt.h +88 -0
  117. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svttcmap.h +90 -0
  118. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svtteng.h +53 -0
  119. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svttglyf.h +56 -0
  120. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/services/svwinfnt.h +50 -0
  121. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/sfnt.h +1099 -0
  122. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/svginterface.h +46 -0
  123. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/t1types.h +307 -0
  124. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/tttypes.h +1747 -0
  125. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/internal/wofftypes.h +312 -0
  126. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/otsvg.h +336 -0
  127. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/t1tables.h +735 -0
  128. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/ttnameid.h +1235 -0
  129. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/tttables.h +856 -0
  130. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/freetype/tttags.h +124 -0
  131. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/include/ft2build.h +42 -0
  132. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afblue.c +779 -0
  133. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afblue.cin +39 -0
  134. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afblue.dat +1121 -0
  135. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afblue.h +429 -0
  136. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afblue.hin +146 -0
  137. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afcjk.c +2383 -0
  138. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afcjk.h +141 -0
  139. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afcover.h +105 -0
  140. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afdummy.c +77 -0
  141. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afdummy.h +40 -0
  142. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/aferrors.h +42 -0
  143. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afglobal.c +513 -0
  144. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afglobal.h +173 -0
  145. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afhints.c +1796 -0
  146. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afhints.h +467 -0
  147. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afindic.c +157 -0
  148. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afindic.h +41 -0
  149. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/aflatin.c +3643 -0
  150. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/aflatin.h +194 -0
  151. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afloader.c +706 -0
  152. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afloader.h +91 -0
  153. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afmodule.c +527 -0
  154. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afmodule.h +55 -0
  155. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afranges.c +1072 -0
  156. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afranges.h +47 -0
  157. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afscript.h +408 -0
  158. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afshaper.c +690 -0
  159. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afshaper.h +71 -0
  160. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afstyles.h +487 -0
  161. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/aftypes.h +511 -0
  162. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afws-decl.h +33 -0
  163. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/afws-iter.h +31 -0
  164. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/autofit.c +35 -0
  165. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/ft-hb.c +115 -0
  166. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/ft-hb.h +48 -0
  167. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/module.mk +23 -0
  168. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/autofit/rules.mk +88 -0
  169. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftadvanc.c +174 -0
  170. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftbase.c +41 -0
  171. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftbase.h +82 -0
  172. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftbbox.c +542 -0
  173. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftbdf.c +90 -0
  174. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftbitmap.c +1144 -0
  175. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftcalc.c +1126 -0
  176. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftcid.c +117 -0
  177. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftcolor.c +156 -0
  178. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftdbgmem.c +971 -0
  179. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftdebug.c +644 -0
  180. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/fterrors.c +45 -0
  181. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftfntfmt.c +54 -0
  182. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftfstype.c +61 -0
  183. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftgasp.c +60 -0
  184. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftgloadr.c +383 -0
  185. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftglyph.c +911 -0
  186. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftgxval.c +141 -0
  187. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/fthash.c +338 -0
  188. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftinit.c +263 -0
  189. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftlcdfil.c +437 -0
  190. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftmac.c +1099 -0
  191. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftmm.c +704 -0
  192. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftobjs.c +5917 -0
  193. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftotval.c +90 -0
  194. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftoutln.c +1120 -0
  195. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftpatent.c +50 -0
  196. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftpfr.c +152 -0
  197. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftpsprop.c +284 -0
  198. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftrfork.c +934 -0
  199. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftsnames.c +185 -0
  200. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftstream.c +872 -0
  201. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftstroke.c +2403 -0
  202. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftsynth.c +180 -0
  203. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftsystem.c +338 -0
  204. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/fttrigon.c +517 -0
  205. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/fttype1.c +126 -0
  206. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftutil.c +442 -0
  207. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftver.rc +61 -0
  208. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/ftwinfnt.c +52 -0
  209. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/md5.c +291 -0
  210. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/md5.h +45 -0
  211. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/base/rules.mk +108 -0
  212. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/bdf/README +152 -0
  213. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/bdf/bdf.c +34 -0
  214. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/bdf/bdf.h +253 -0
  215. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/bdf/bdfdrivr.c +1013 -0
  216. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/bdf/bdfdrivr.h +72 -0
  217. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/bdf/bdferror.h +45 -0
  218. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/bdf/bdflib.c +2378 -0
  219. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/bdf/module.mk +34 -0
  220. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/bdf/rules.mk +84 -0
  221. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/bzip2/ftbzip2.c +535 -0
  222. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/bzip2/rules.mk +64 -0
  223. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftcache.c +31 -0
  224. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftcbasic.c +598 -0
  225. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftccache.c +584 -0
  226. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftccache.h +359 -0
  227. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftccback.h +85 -0
  228. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftccmap.c +323 -0
  229. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftcerror.h +42 -0
  230. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftcglyph.c +204 -0
  231. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftcglyph.h +314 -0
  232. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftcimage.c +158 -0
  233. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftcimage.h +106 -0
  234. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftcmanag.c +677 -0
  235. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftcmanag.h +175 -0
  236. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftcmru.c +341 -0
  237. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftcmru.h +242 -0
  238. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftcsbits.c +413 -0
  239. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/ftcsbits.h +91 -0
  240. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cache/rules.mk +85 -0
  241. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/cff.c +28 -0
  242. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/cffcmap.c +230 -0
  243. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/cffcmap.h +67 -0
  244. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/cffdrivr.c +1263 -0
  245. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/cffdrivr.h +35 -0
  246. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/cfferrs.h +42 -0
  247. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/cffgload.c +762 -0
  248. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/cffgload.h +62 -0
  249. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/cffload.c +2570 -0
  250. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/cffload.h +124 -0
  251. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/cffobjs.c +1175 -0
  252. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/cffobjs.h +84 -0
  253. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/cffparse.c +1550 -0
  254. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/cffparse.h +144 -0
  255. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/cfftoken.h +150 -0
  256. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/module.mk +23 -0
  257. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cff/rules.mk +75 -0
  258. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cid/ciderrs.h +41 -0
  259. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cid/cidgload.c +618 -0
  260. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cid/cidgload.h +58 -0
  261. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cid/cidload.c +937 -0
  262. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cid/cidload.h +52 -0
  263. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cid/cidobjs.c +543 -0
  264. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cid/cidobjs.h +154 -0
  265. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cid/cidparse.c +311 -0
  266. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cid/cidparse.h +130 -0
  267. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cid/cidriver.c +274 -0
  268. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cid/cidriver.h +36 -0
  269. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cid/cidtoken.h +115 -0
  270. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cid/module.mk +23 -0
  271. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cid/rules.mk +73 -0
  272. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/cid/type1cid.c +28 -0
  273. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/dlg/dlgwrap.c +32 -0
  274. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/dlg/rules.mk +70 -0
  275. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/README +532 -0
  276. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvalid.c +46 -0
  277. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvalid.h +107 -0
  278. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvbsln.c +334 -0
  279. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvcommn.c +1747 -0
  280. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvcommn.h +581 -0
  281. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxverror.h +51 -0
  282. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvfeat.c +339 -0
  283. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvfeat.h +173 -0
  284. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvfgen.c +484 -0
  285. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvjust.c +721 -0
  286. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvkern.c +920 -0
  287. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvlcar.c +224 -0
  288. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmod.c +288 -0
  289. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmod.h +46 -0
  290. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmort.c +301 -0
  291. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmort.h +99 -0
  292. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmort0.c +152 -0
  293. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmort1.c +260 -0
  294. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmort2.c +312 -0
  295. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmort4.c +126 -0
  296. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmort5.c +234 -0
  297. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmorx.c +199 -0
  298. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmorx.h +73 -0
  299. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmorx0.c +112 -0
  300. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmorx1.c +278 -0
  301. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmorx2.c +331 -0
  302. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmorx4.c +56 -0
  303. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvmorx5.c +226 -0
  304. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvopbd.c +218 -0
  305. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvprop.c +330 -0
  306. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/gxvtrak.c +288 -0
  307. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/module.mk +23 -0
  308. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gxvalid/rules.mk +98 -0
  309. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/README.freetype +22 -0
  310. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/adler32.c +168 -0
  311. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/crc32.c +1061 -0
  312. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/crc32.h +9446 -0
  313. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/ftgzip.c +805 -0
  314. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/ftzconf.h +551 -0
  315. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/gzguts.h +218 -0
  316. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/inffast.c +320 -0
  317. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/inffast.h +11 -0
  318. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/inffixed.h +94 -0
  319. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/inflate.c +1534 -0
  320. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/inflate.h +131 -0
  321. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/inftrees.c +299 -0
  322. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/inftrees.h +67 -0
  323. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/patches/freetype-zlib.diff +451 -0
  324. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/rules.mk +81 -0
  325. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/zlib.h +1972 -0
  326. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/zutil.c +305 -0
  327. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/gzip/zutil.h +281 -0
  328. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/lzw/ftlzw.c +415 -0
  329. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/lzw/ftzopen.c +429 -0
  330. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/lzw/ftzopen.h +174 -0
  331. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/lzw/rules.mk +72 -0
  332. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/module.mk +23 -0
  333. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/otvalid.c +31 -0
  334. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/otvalid.h +77 -0
  335. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/otvbase.c +345 -0
  336. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/otvcommn.c +1099 -0
  337. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/otvcommn.h +468 -0
  338. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/otverror.h +42 -0
  339. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/otvgdef.c +303 -0
  340. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/otvgpos.c +1051 -0
  341. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/otvgpos.h +36 -0
  342. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/otvgsub.c +627 -0
  343. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/otvjstf.c +259 -0
  344. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/otvmath.c +453 -0
  345. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/otvmod.c +281 -0
  346. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/otvmod.h +38 -0
  347. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/otvalid/rules.mk +81 -0
  348. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pcf/README +96 -0
  349. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pcf/module.mk +34 -0
  350. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pcf/pcf.c +35 -0
  351. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pcf/pcf.h +251 -0
  352. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pcf/pcfdrivr.c +836 -0
  353. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pcf/pcfdrivr.h +44 -0
  354. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pcf/pcferror.h +41 -0
  355. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pcf/pcfread.c +1731 -0
  356. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pcf/pcfread.h +44 -0
  357. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pcf/pcfutil.c +119 -0
  358. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pcf/pcfutil.h +55 -0
  359. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pcf/rules.mk +82 -0
  360. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/module.mk +23 -0
  361. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/pfr.c +29 -0
  362. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/pfrcmap.c +188 -0
  363. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/pfrcmap.h +45 -0
  364. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/pfrdrivr.c +212 -0
  365. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/pfrdrivr.h +36 -0
  366. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/pfrerror.h +41 -0
  367. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/pfrgload.c +849 -0
  368. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/pfrgload.h +49 -0
  369. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/pfrload.c +1062 -0
  370. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/pfrload.h +123 -0
  371. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/pfrobjs.c +603 -0
  372. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/pfrobjs.h +96 -0
  373. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/pfrsbit.c +813 -0
  374. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/pfrsbit.h +37 -0
  375. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/pfrtypes.h +331 -0
  376. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pfr/rules.mk +76 -0
  377. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/afmparse.c +1094 -0
  378. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/afmparse.h +88 -0
  379. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/cffdecode.c +2411 -0
  380. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/cffdecode.h +63 -0
  381. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/module.mk +23 -0
  382. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psarrst.c +240 -0
  383. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psarrst.h +99 -0
  384. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psaux.c +40 -0
  385. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psauxerr.h +42 -0
  386. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psauxmod.c +190 -0
  387. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psauxmod.h +60 -0
  388. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psblues.c +571 -0
  389. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psblues.h +185 -0
  390. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psconv.c +610 -0
  391. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psconv.h +70 -0
  392. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/pserror.c +52 -0
  393. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/pserror.h +120 -0
  394. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psfixed.h +94 -0
  395. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psfont.c +566 -0
  396. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psfont.h +134 -0
  397. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psft.c +895 -0
  398. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psft.h +167 -0
  399. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psglue.h +144 -0
  400. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/pshints.c +1952 -0
  401. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/pshints.h +288 -0
  402. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psintrp.c +3050 -0
  403. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psintrp.h +83 -0
  404. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psobjs.c +2560 -0
  405. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psobjs.h +312 -0
  406. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psread.c +112 -0
  407. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psread.h +68 -0
  408. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psstack.c +329 -0
  409. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/psstack.h +122 -0
  410. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/pstypes.h +77 -0
  411. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/rules.mk +89 -0
  412. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/t1cmap.c +393 -0
  413. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/t1cmap.h +104 -0
  414. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/t1decode.c +2159 -0
  415. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psaux/t1decode.h +73 -0
  416. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pshinter/module.mk +23 -0
  417. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pshinter/pshalgo.c +2191 -0
  418. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pshinter/pshalgo.h +233 -0
  419. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pshinter/pshglob.c +795 -0
  420. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pshinter/pshglob.h +196 -0
  421. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pshinter/pshinter.c +27 -0
  422. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pshinter/pshmod.c +125 -0
  423. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pshinter/pshmod.h +38 -0
  424. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pshinter/pshnterr.h +41 -0
  425. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pshinter/pshrec.c +1224 -0
  426. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pshinter/pshrec.h +171 -0
  427. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/pshinter/rules.mk +75 -0
  428. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psnames/module.mk +23 -0
  429. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psnames/psmodule.c +621 -0
  430. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psnames/psmodule.h +37 -0
  431. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psnames/psnamerr.h +42 -0
  432. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psnames/psnames.c +24 -0
  433. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psnames/pstables.h +4238 -0
  434. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/psnames/rules.mk +73 -0
  435. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/raster/ftmisc.h +118 -0
  436. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/raster/ftraster.c +2738 -0
  437. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/raster/ftraster.h +47 -0
  438. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/raster/ftrend1.c +209 -0
  439. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/raster/ftrend1.h +37 -0
  440. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/raster/module.mk +23 -0
  441. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/raster/raster.c +25 -0
  442. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/raster/rasterrs.h +42 -0
  443. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/raster/rules.mk +72 -0
  444. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sdf/ftbsdf.c +1350 -0
  445. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sdf/ftsdf.c +3932 -0
  446. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sdf/ftsdf.h +97 -0
  447. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sdf/ftsdfcommon.c +104 -0
  448. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sdf/ftsdfcommon.h +140 -0
  449. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sdf/ftsdferrs.h +37 -0
  450. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sdf/ftsdfrend.c +603 -0
  451. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sdf/ftsdfrend.h +118 -0
  452. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sdf/module.mk +29 -0
  453. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sdf/rules.mk +78 -0
  454. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sdf/sdf.c +29 -0
  455. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/module.mk +23 -0
  456. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/pngshim.c +474 -0
  457. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/pngshim.h +50 -0
  458. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/rules.mk +87 -0
  459. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/sfdriver.c +1384 -0
  460. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/sfdriver.h +35 -0
  461. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/sferrors.h +41 -0
  462. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/sfnt.c +41 -0
  463. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/sfobjs.c +1552 -0
  464. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/sfobjs.h +58 -0
  465. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/sfwoff.c +426 -0
  466. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/sfwoff.h +43 -0
  467. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/sfwoff2.c +2380 -0
  468. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/sfwoff2.h +78 -0
  469. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttbdf.c +257 -0
  470. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttbdf.h +49 -0
  471. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttcmap.c +3902 -0
  472. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttcmap.h +126 -0
  473. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttcmapc.h +56 -0
  474. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttcolr.c +1923 -0
  475. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttcolr.h +83 -0
  476. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttcpal.c +310 -0
  477. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttcpal.h +48 -0
  478. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttgpos.c +598 -0
  479. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttgpos.h +53 -0
  480. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttkern.c +317 -0
  481. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttkern.h +51 -0
  482. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttload.c +1496 -0
  483. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttload.h +111 -0
  484. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttmtx.c +338 -0
  485. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttmtx.h +54 -0
  486. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttpost.c +484 -0
  487. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttpost.h +46 -0
  488. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttsbit.c +1685 -0
  489. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttsbit.h +62 -0
  490. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttsvg.c +413 -0
  491. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/ttsvg.h +43 -0
  492. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/woff2tags.c +119 -0
  493. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/sfnt/woff2tags.h +41 -0
  494. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/smooth/ftgrays.c +2149 -0
  495. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/smooth/ftgrays.h +57 -0
  496. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/smooth/ftsmerrs.h +42 -0
  497. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/smooth/ftsmooth.c +605 -0
  498. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/smooth/ftsmooth.h +37 -0
  499. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/smooth/module.mk +23 -0
  500. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/smooth/rules.mk +73 -0
  501. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/smooth/smooth.c +25 -0
  502. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/svg/ftsvg.c +355 -0
  503. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/svg/ftsvg.h +35 -0
  504. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/svg/module.mk +23 -0
  505. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/svg/rules.mk +70 -0
  506. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/svg/svg.c +24 -0
  507. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/svg/svgtypes.h +42 -0
  508. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/afblue.pl +551 -0
  509. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/apinames.c +556 -0
  510. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/chktrcmp.py +119 -0
  511. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/cordic.py +32 -0
  512. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/ftrandom/Makefile +45 -0
  513. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/ftrandom/README +69 -0
  514. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/ftrandom/ftrandom.c +720 -0
  515. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/glnames.py +5533 -0
  516. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/make_distribution_archives.py +208 -0
  517. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/no-copyright +66 -0
  518. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/test_afm.c +156 -0
  519. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/test_bbox.c +187 -0
  520. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/test_trig.c +257 -0
  521. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/update-copyright +14 -0
  522. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/update-copyright-year +157 -0
  523. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/tools/vms_shorten_symbol.c +250 -0
  524. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/module.mk +23 -0
  525. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/rules.mk +75 -0
  526. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/truetype.c +29 -0
  527. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/ttdriver.c +704 -0
  528. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/ttdriver.h +35 -0
  529. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/tterrors.h +42 -0
  530. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/ttgload.c +2740 -0
  531. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/ttgload.h +61 -0
  532. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/ttgxvar.c +4594 -0
  533. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/ttgxvar.h +453 -0
  534. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/ttinterp.c +7751 -0
  535. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/ttinterp.h +465 -0
  536. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/ttobjs.c +1543 -0
  537. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/ttobjs.h +426 -0
  538. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/ttpload.c +665 -0
  539. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/truetype/ttpload.h +74 -0
  540. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/module.mk +23 -0
  541. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/rules.mk +76 -0
  542. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/t1afm.c +413 -0
  543. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/t1afm.h +53 -0
  544. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/t1driver.c +807 -0
  545. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/t1driver.h +35 -0
  546. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/t1errors.h +41 -0
  547. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/t1gload.c +606 -0
  548. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/t1gload.h +52 -0
  549. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/t1load.c +2755 -0
  550. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/t1load.h +126 -0
  551. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/t1objs.c +655 -0
  552. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/t1objs.h +160 -0
  553. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/t1parse.c +487 -0
  554. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/t1parse.h +137 -0
  555. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/t1tokens.h +143 -0
  556. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type1/type1.c +29 -0
  557. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type42/module.mk +23 -0
  558. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type42/rules.mk +73 -0
  559. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type42/t42drivr.c +248 -0
  560. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type42/t42drivr.h +36 -0
  561. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type42/t42error.h +41 -0
  562. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type42/t42objs.c +698 -0
  563. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type42/t42objs.h +123 -0
  564. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type42/t42parse.c +1351 -0
  565. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type42/t42parse.h +91 -0
  566. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type42/t42types.h +56 -0
  567. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/type42/type42.c +26 -0
  568. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/winfonts/fnterrs.h +42 -0
  569. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/winfonts/module.mk +23 -0
  570. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/winfonts/rules.mk +68 -0
  571. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/winfonts/winfnt.c +1219 -0
  572. package/harmony/gcanvas/src/main/cpp/core/harmony/freetype/src/winfonts/winfnt.h +164 -0
  573. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/.appveyor.yml +69 -0
  574. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/.travis.yml +41 -0
  575. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/ANNOUNCE +55 -0
  576. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/AUTHORS +46 -0
  577. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/CHANGES +6111 -0
  578. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/CMakeLists.txt +1042 -0
  579. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/INSTALL +465 -0
  580. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/LICENSE +134 -0
  581. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/Makefile.am +392 -0
  582. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/Makefile.in +2420 -0
  583. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/README +183 -0
  584. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/TODO +23 -0
  585. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/TRADEMARK +8 -0
  586. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/aclocal.m4 +1196 -0
  587. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/arm/arm_init.c +136 -0
  588. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/arm/filter_neon.S +253 -0
  589. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/arm/filter_neon_intrinsics.c +402 -0
  590. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/arm/palette_neon_intrinsics.c +149 -0
  591. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/autogen.sh +225 -0
  592. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/ci/ci_autotools.sh +95 -0
  593. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/ci/ci_cmake.sh +127 -0
  594. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/ci/ci_legacy.sh +116 -0
  595. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/compile +348 -0
  596. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/config.guess +1476 -0
  597. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/config.h.in +126 -0
  598. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/config.sub +1801 -0
  599. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/configure +16116 -0
  600. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/configure.ac +532 -0
  601. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/README.txt +5 -0
  602. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/arm-neon/README +83 -0
  603. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/arm-neon/android-ndk.c +39 -0
  604. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/arm-neon/linux-auxv.c +120 -0
  605. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/arm-neon/linux.c +161 -0
  606. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/conftest/README +49 -0
  607. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/conftest/pngcp.dfa +57 -0
  608. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/conftest/read.dfa +58 -0
  609. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/conftest/s_read.dfa +35 -0
  610. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/conftest/s_write.dfa +33 -0
  611. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/conftest/simple.dfa +36 -0
  612. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/conftest/write.dfa +45 -0
  613. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/examples/README.txt +24 -0
  614. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/examples/iccfrompng.c +185 -0
  615. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/examples/pngpixel.c +371 -0
  616. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/examples/pngtopng.c +98 -0
  617. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/examples/simpleover.c +648 -0
  618. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/COPYING +340 -0
  619. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/LICENSE +50 -0
  620. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/Makefile.mingw32 +131 -0
  621. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/Makefile.sgi +105 -0
  622. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/Makefile.unx +134 -0
  623. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/Makefile.w32 +114 -0
  624. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/README +186 -0
  625. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/makevms.com +132 -0
  626. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/readpng.c +323 -0
  627. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/readpng.h +88 -0
  628. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/readpng2.c +521 -0
  629. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/readpng2.h +116 -0
  630. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/readppm.c +188 -0
  631. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/rpng-win.c +735 -0
  632. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/rpng-x.c +911 -0
  633. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/rpng2-win.c +1261 -0
  634. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/rpng2-x.c +2143 -0
  635. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/toucan.png +0 -0
  636. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/wpng.c +865 -0
  637. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/writepng.c +401 -0
  638. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/gregbook/writepng.h +133 -0
  639. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/libtests/fakepng.c +65 -0
  640. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/libtests/gentests.sh +100 -0
  641. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/libtests/makepng.c +1948 -0
  642. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/libtests/pngimage.c +1722 -0
  643. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/libtests/pngstest-errors.h +165 -0
  644. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/libtests/pngstest.c +3832 -0
  645. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/libtests/pngunknown.c +1305 -0
  646. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/libtests/pngvalid.c +12279 -0
  647. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/libtests/readpng.c +114 -0
  648. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/libtests/tarith.c +1011 -0
  649. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/libtests/timepng.c +607 -0
  650. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/mips-msa/README +83 -0
  651. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/mips-msa/linux.c +67 -0
  652. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/oss-fuzz/Dockerfile +25 -0
  653. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/oss-fuzz/README.txt +37 -0
  654. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/oss-fuzz/build.sh +51 -0
  655. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/oss-fuzz/libpng_read_fuzzer.cc +209 -0
  656. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/oss-fuzz/libpng_read_fuzzer.options +2 -0
  657. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/oss-fuzz/png.dict +39 -0
  658. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminim/README +5 -0
  659. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminim/decoder/README +10 -0
  660. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminim/decoder/pngusr.dfa +40 -0
  661. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminim/decoder/pngusr.h +23 -0
  662. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminim/encoder/README +10 -0
  663. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminim/encoder/pngusr.dfa +39 -0
  664. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminim/encoder/pngusr.h +23 -0
  665. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminim/preader/README +15 -0
  666. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminim/preader/pngusr.dfa +40 -0
  667. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminim/preader/pngusr.h +23 -0
  668. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminus/CHANGES.txt +13 -0
  669. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminus/CMakeLists.txt +34 -0
  670. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminus/LICENSE.txt +22 -0
  671. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminus/README.txt +120 -0
  672. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminus/makevms.com +92 -0
  673. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminus/png2pnm.bat +41 -0
  674. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminus/png2pnm.c +427 -0
  675. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminus/png2pnm.sh +42 -0
  676. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminus/pngminus.bat +4 -0
  677. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminus/pngminus.sh +5 -0
  678. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminus/pnm2png.bat +41 -0
  679. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminus/pnm2png.c +620 -0
  680. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngminus/pnm2png.sh +42 -0
  681. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/README +107 -0
  682. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/bad_interlace_conversions.txt +9 -0
  683. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/basn0g01.png +0 -0
  684. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/basn0g02.png +0 -0
  685. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/basn0g04.png +0 -0
  686. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/basn0g08.png +0 -0
  687. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/basn0g16.png +0 -0
  688. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/basn2c08.png +0 -0
  689. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/basn2c16.png +0 -0
  690. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/basn3p01.png +0 -0
  691. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/basn3p02.png +0 -0
  692. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/basn3p04.png +0 -0
  693. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/basn3p08.png +0 -0
  694. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/basn4a08.png +0 -0
  695. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/basn4a16.png +0 -0
  696. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/basn6a08.png +0 -0
  697. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/basn6a16.png +0 -0
  698. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ftbbn0g01.png +0 -0
  699. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ftbbn0g02.png +0 -0
  700. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ftbbn0g04.png +0 -0
  701. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ftbbn2c16.png +0 -0
  702. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ftbbn3p08.png +0 -0
  703. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ftbgn2c16.png +0 -0
  704. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ftbgn3p08.png +0 -0
  705. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ftbrn2c08.png +0 -0
  706. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ftbwn0g16.png +0 -0
  707. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ftbwn3p08.png +0 -0
  708. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ftbyn3p08.png +0 -0
  709. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ftp0n0g08.png +0 -0
  710. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ftp0n2c08.png +0 -0
  711. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ftp0n3p08.png +0 -0
  712. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ftp1n3p08.png +0 -0
  713. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ibasn0g08.png +0 -0
  714. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ibasn0g16.png +0 -0
  715. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ibasn2c08.png +0 -0
  716. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ibasn2c16.png +0 -0
  717. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ibasn3p08.png +0 -0
  718. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ibasn4a08.png +0 -0
  719. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ibasn4a16.png +0 -0
  720. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ibasn6a08.png +0 -0
  721. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/ibasn6a16.png +0 -0
  722. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/iftbbn2c16.png +0 -0
  723. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/iftbbn3p08.png +0 -0
  724. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/iftbgn2c16.png +0 -0
  725. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/iftbgn3p08.png +0 -0
  726. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/iftbrn2c08.png +0 -0
  727. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/iftbwn0g16.png +0 -0
  728. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/iftbwn3p08.png +0 -0
  729. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/iftbyn3p08.png +0 -0
  730. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/iftp0n0g08.png +0 -0
  731. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/iftp0n2c08.png +0 -0
  732. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/iftp0n3p08.png +0 -0
  733. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/iftp1n3p08.png +0 -0
  734. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/interlaced/README +2 -0
  735. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/interlaced/ibasn0g01.png +0 -0
  736. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/interlaced/ibasn0g02.png +0 -0
  737. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/interlaced/ibasn0g04.png +0 -0
  738. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/interlaced/ibasn3p01.png +0 -0
  739. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/interlaced/ibasn3p02.png +0 -0
  740. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/interlaced/ibasn3p04.png +0 -0
  741. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/interlaced/iftbbn0g01.png +0 -0
  742. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/interlaced/iftbbn0g02.png +0 -0
  743. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/pngsuite/interlaced/iftbbn0g04.png +0 -0
  744. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/powerpc-vsx/README +81 -0
  745. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/powerpc-vsx/linux.c +57 -0
  746. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/powerpc-vsx/linux_aux.c +34 -0
  747. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/bad_iCCP.png +0 -0
  748. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/badadler.png +0 -0
  749. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/badcrc.png +0 -0
  750. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/empty_ancillary_chunks.png +0 -0
  751. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_IDAT.png +0 -0
  752. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_bKGD_chunk.png +0 -0
  753. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_cHRM_chunk.png +0 -0
  754. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_eXIf_chunk.png +0 -0
  755. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_gAMA_chunk.png +0 -0
  756. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_hIST_chunk.png +0 -0
  757. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_iCCP_chunk.png +0 -0
  758. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_iTXt_chunk.png +0 -0
  759. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_juNK_unsafe_to_copy.png +0 -0
  760. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_juNk_safe_to_copy.png +0 -0
  761. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_pCAL_chunk.png +0 -0
  762. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_pHYs_chunk.png +0 -0
  763. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_sCAL_chunk.png +0 -0
  764. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_sPLT_chunk.png +0 -0
  765. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_sRGB_chunk.png +0 -0
  766. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_sTER_chunk.png +0 -0
  767. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_tEXt_chunk.png +0 -0
  768. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_tIME_chunk.png +0 -0
  769. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/crashers/huge_zTXt_chunk.png +0 -0
  770. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-1-1.8-tRNS.png +0 -0
  771. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-1-1.8.png +0 -0
  772. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-1-linear-tRNS.png +0 -0
  773. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-1-linear.png +0 -0
  774. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-1-sRGB-tRNS.png +0 -0
  775. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-1-sRGB.png +0 -0
  776. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-1-tRNS.png +0 -0
  777. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-1.png +0 -0
  778. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-16-1.8-tRNS.png +0 -0
  779. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-16-1.8.png +0 -0
  780. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-16-linear-tRNS.png +0 -0
  781. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-16-linear.png +0 -0
  782. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-16-sRGB-tRNS.png +0 -0
  783. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-16-sRGB.png +0 -0
  784. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-16-tRNS.png +0 -0
  785. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-16.png +0 -0
  786. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-2-1.8-tRNS.png +0 -0
  787. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-2-1.8.png +0 -0
  788. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-2-linear-tRNS.png +0 -0
  789. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-2-linear.png +0 -0
  790. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-2-sRGB-tRNS.png +0 -0
  791. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-2-sRGB.png +0 -0
  792. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-2-tRNS.png +0 -0
  793. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-2.png +0 -0
  794. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-4-1.8-tRNS.png +0 -0
  795. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-4-1.8.png +0 -0
  796. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-4-linear-tRNS.png +0 -0
  797. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-4-linear.png +0 -0
  798. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-4-sRGB-tRNS.png +0 -0
  799. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-4-sRGB.png +0 -0
  800. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-4-tRNS.png +0 -0
  801. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-4.png +0 -0
  802. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-8-1.8-tRNS.png +0 -0
  803. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-8-1.8.png +0 -0
  804. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-8-linear-tRNS.png +0 -0
  805. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-8-linear.png +0 -0
  806. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-8-sRGB-tRNS.png +0 -0
  807. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-8-sRGB.png +0 -0
  808. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-8-tRNS.png +0 -0
  809. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-8.png +0 -0
  810. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-alpha-16-1.8.png +0 -0
  811. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-alpha-16-linear.png +0 -0
  812. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-alpha-16-sRGB.png +0 -0
  813. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-alpha-16.png +0 -0
  814. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-alpha-8-1.8.png +0 -0
  815. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-alpha-8-linear.png +0 -0
  816. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-alpha-8-sRGB.png +0 -0
  817. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/gray-alpha-8.png +0 -0
  818. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/makepngs.sh +94 -0
  819. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-1-1.8-tRNS.png +0 -0
  820. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-1-1.8.png +0 -0
  821. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-1-linear-tRNS.png +0 -0
  822. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-1-linear.png +0 -0
  823. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-1-sRGB-tRNS.png +0 -0
  824. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-1-sRGB.png +0 -0
  825. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-1-tRNS.png +0 -0
  826. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-1.png +0 -0
  827. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-2-1.8-tRNS.png +0 -0
  828. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-2-1.8.png +0 -0
  829. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-2-linear-tRNS.png +0 -0
  830. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-2-linear.png +0 -0
  831. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-2-sRGB-tRNS.png +0 -0
  832. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-2-sRGB.png +0 -0
  833. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-2-tRNS.png +0 -0
  834. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-2.png +0 -0
  835. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-4-1.8-tRNS.png +0 -0
  836. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-4-1.8.png +0 -0
  837. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-4-linear-tRNS.png +0 -0
  838. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-4-linear.png +0 -0
  839. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-4-sRGB-tRNS.png +0 -0
  840. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-4-sRGB.png +0 -0
  841. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-4-tRNS.png +0 -0
  842. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-4.png +0 -0
  843. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-8-1.8-tRNS.png +0 -0
  844. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-8-1.8.png +0 -0
  845. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-8-linear-tRNS.png +0 -0
  846. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-8-linear.png +0 -0
  847. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-8-sRGB-tRNS.png +0 -0
  848. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-8-sRGB.png +0 -0
  849. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-8-tRNS.png +0 -0
  850. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/palette-8.png +0 -0
  851. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-16-1.8-tRNS.png +0 -0
  852. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-16-1.8.png +0 -0
  853. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-16-linear-tRNS.png +0 -0
  854. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-16-linear.png +0 -0
  855. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-16-sRGB-tRNS.png +0 -0
  856. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-16-sRGB.png +0 -0
  857. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-16-tRNS.png +0 -0
  858. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-16.png +0 -0
  859. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-8-1.8-tRNS.png +0 -0
  860. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-8-1.8.png +0 -0
  861. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-8-linear-tRNS.png +0 -0
  862. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-8-linear.png +0 -0
  863. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-8-sRGB-tRNS.png +0 -0
  864. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-8-sRGB.png +0 -0
  865. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-8-tRNS.png +0 -0
  866. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-8.png +0 -0
  867. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-alpha-16-1.8.png +0 -0
  868. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-alpha-16-linear.png +0 -0
  869. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-alpha-16-sRGB.png +0 -0
  870. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-alpha-16.png +0 -0
  871. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-alpha-8-1.8.png +0 -0
  872. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-alpha-8-linear.png +0 -0
  873. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-alpha-8-sRGB.png +0 -0
  874. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/testpngs/rgb-alpha-8.png +0 -0
  875. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/tools/README.txt +27 -0
  876. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/tools/checksum-icc.c +102 -0
  877. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/tools/chkfmt +144 -0
  878. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/tools/cvtcolor.c +188 -0
  879. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/tools/genpng.c +881 -0
  880. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/tools/intgamma.sh +110 -0
  881. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/tools/makesRGB.c +430 -0
  882. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/tools/png-fix-itxt.c +164 -0
  883. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/tools/pngcp.c +2453 -0
  884. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/tools/pngfix.c +4049 -0
  885. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/tools/reindent +25 -0
  886. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/tools/sRGB.h +48 -0
  887. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/visupng/PngFile.c +454 -0
  888. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/visupng/PngFile.h +30 -0
  889. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/visupng/README.txt +61 -0
  890. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/visupng/VisualPng.c +978 -0
  891. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/visupng/VisualPng.dsp +147 -0
  892. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/visupng/VisualPng.dsw +29 -0
  893. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/visupng/VisualPng.ico +0 -0
  894. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/visupng/VisualPng.png +0 -0
  895. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/visupng/VisualPng.rc +152 -0
  896. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/visupng/cexcept.h +248 -0
  897. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/contrib/visupng/resource.h +23 -0
  898. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/depcomp +791 -0
  899. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/example.c +1041 -0
  900. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/install-sh +518 -0
  901. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/intel/filter_sse2_intrinsics.c +391 -0
  902. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/intel/intel_init.c +52 -0
  903. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/libpng-config.in +127 -0
  904. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/libpng-manual.txt +5409 -0
  905. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/libpng.3 +6052 -0
  906. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/libpng.pc.in +12 -0
  907. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/libpngpf.3 +24 -0
  908. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/ltmain.sh +11147 -0
  909. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/mips/filter_msa_intrinsics.c +808 -0
  910. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/mips/mips_init.c +130 -0
  911. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/missing +215 -0
  912. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/png.5 +84 -0
  913. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/png.c +4607 -0
  914. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/png.h +3247 -0
  915. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngbar.jpg +0 -0
  916. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngbar.png +0 -0
  917. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngconf.h +623 -0
  918. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngdebug.h +153 -0
  919. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngerror.c +963 -0
  920. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngget.c +1249 -0
  921. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pnginfo.h +267 -0
  922. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pnglibconf.h +219 -0
  923. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngmem.c +284 -0
  924. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngnow.png +0 -0
  925. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngpread.c +1096 -0
  926. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngpriv.h +2152 -0
  927. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngread.c +4225 -0
  928. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngrio.c +120 -0
  929. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngrtran.c +5044 -0
  930. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngrutil.c +4678 -0
  931. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngset.c +1802 -0
  932. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngstruct.h +489 -0
  933. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngtest.c +2158 -0
  934. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngtest.png +0 -0
  935. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngtrans.c +864 -0
  936. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngusr.dfa +14 -0
  937. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngwio.c +168 -0
  938. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngwrite.c +2390 -0
  939. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngwtran.c +575 -0
  940. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/pngwutil.c +2781 -0
  941. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/powerpc/filter_vsx_intrinsics.c +768 -0
  942. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/powerpc/powerpc_init.c +126 -0
  943. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/owatcom/libpng.tgt +383 -0
  944. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/owatcom/libpng.wpj +112 -0
  945. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/owatcom/pngconfig.mak +160 -0
  946. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/owatcom/pngstest.tgt +219 -0
  947. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/owatcom/pngtest.tgt +179 -0
  948. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/owatcom/pngvalid.tgt +210 -0
  949. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/visualc71/PRJ0041.mak +21 -0
  950. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/visualc71/README.txt +58 -0
  951. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/visualc71/README_zlib.txt +44 -0
  952. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/visualc71/libpng.sln +60 -0
  953. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/visualc71/libpng.vcproj +419 -0
  954. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/visualc71/pngtest.vcproj +267 -0
  955. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/visualc71/zlib.vcproj +391 -0
  956. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/vstudio/README.txt +87 -0
  957. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/vstudio/libpng/libpng.vcxproj +234 -0
  958. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/vstudio/pnglibconf/pnglibconf.vcxproj +61 -0
  959. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/vstudio/vstudio.sln +109 -0
  960. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/vstudio/zlib/zlib.vcxproj +175 -0
  961. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/projects/vstudio/zlib.props +57 -0
  962. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/README.txt +83 -0
  963. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/SCOPTIONS.ppc +7 -0
  964. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/checksym.awk +173 -0
  965. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/descrip.mms +47 -0
  966. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/dfn.awk +203 -0
  967. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/genchk.cmake.in +37 -0
  968. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/genout.cmake.in +105 -0
  969. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/gensrc.cmake.in +138 -0
  970. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/intprefix.c +22 -0
  971. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/libpng-config-body.in +96 -0
  972. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/libpng-config-head.in +24 -0
  973. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/libpng.pc.in +10 -0
  974. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/libtool.m4 +8369 -0
  975. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/ltoptions.m4 +437 -0
  976. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/ltsugar.m4 +124 -0
  977. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/ltversion.m4 +23 -0
  978. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/lt~obsolete.m4 +99 -0
  979. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/macro.lst +3 -0
  980. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.32sunu +241 -0
  981. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.64sunu +241 -0
  982. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.acorn +57 -0
  983. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.aix +116 -0
  984. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.amiga +58 -0
  985. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.atari +71 -0
  986. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.bc32 +158 -0
  987. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.beos +222 -0
  988. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.cegcc +116 -0
  989. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.clang +87 -0
  990. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.darwin +222 -0
  991. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.dec +210 -0
  992. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.dj2 +72 -0
  993. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.freebsd +66 -0
  994. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.gcc +87 -0
  995. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.hp64 +228 -0
  996. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.hpgcc +225 -0
  997. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.hpux +226 -0
  998. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.ibmc +90 -0
  999. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.intel +118 -0
  1000. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.linux +240 -0
  1001. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.linux-opt +258 -0
  1002. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.mips +100 -0
  1003. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.msys +199 -0
  1004. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.netbsd +55 -0
  1005. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.openbsd +86 -0
  1006. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.sco +223 -0
  1007. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.sggcc +233 -0
  1008. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.sgi +234 -0
  1009. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.so9 +244 -0
  1010. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.solaris +240 -0
  1011. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.std +133 -0
  1012. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.sunos +112 -0
  1013. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makefile.vcwin32 +112 -0
  1014. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/makevms.com +142 -0
  1015. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/options.awk +898 -0
  1016. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/pnglibconf.dfa +920 -0
  1017. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/pnglibconf.h.prebuilt +219 -0
  1018. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/pnglibconf.mak +55 -0
  1019. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/pngwin.rc +112 -0
  1020. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/prefix.c +24 -0
  1021. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/smakefile.ppc +34 -0
  1022. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/sym.c +15 -0
  1023. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/symbols.c +58 -0
  1024. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/symbols.def +255 -0
  1025. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/test.cmake.in +31 -0
  1026. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/scripts/vers.c +19 -0
  1027. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/test-driver +148 -0
  1028. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngimage-full +2 -0
  1029. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngimage-quick +2 -0
  1030. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngstest-1.8 +2 -0
  1031. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngstest-1.8-alpha +2 -0
  1032. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngstest-linear +2 -0
  1033. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngstest-linear-alpha +2 -0
  1034. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngstest-none +2 -0
  1035. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngstest-none-alpha +2 -0
  1036. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngstest-sRGB +2 -0
  1037. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngstest-sRGB-alpha +2 -0
  1038. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngtest-all +16 -0
  1039. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngunknown-IDAT +2 -0
  1040. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngunknown-discard +2 -0
  1041. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngunknown-if-safe +2 -0
  1042. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngunknown-sAPI +2 -0
  1043. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngunknown-sTER +2 -0
  1044. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngunknown-save +2 -0
  1045. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngunknown-vpAg +2 -0
  1046. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngvalid-gamma-16-to-8 +2 -0
  1047. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngvalid-gamma-alpha-mode +2 -0
  1048. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngvalid-gamma-background +2 -0
  1049. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngvalid-gamma-expand16-alpha-mode +2 -0
  1050. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngvalid-gamma-expand16-background +2 -0
  1051. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngvalid-gamma-expand16-transform +2 -0
  1052. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngvalid-gamma-sbit +2 -0
  1053. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngvalid-gamma-threshold +2 -0
  1054. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngvalid-gamma-transform +2 -0
  1055. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngvalid-progressive-interlace-standard +2 -0
  1056. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngvalid-progressive-size +2 -0
  1057. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngvalid-progressive-standard +2 -0
  1058. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngvalid-standard +2 -0
  1059. package/harmony/gcanvas/src/main/cpp/core/harmony/libpng/tests/pngvalid-transform +2 -0
  1060. package/harmony/gcanvas/src/main/cpp/core/harmony/manager/GCanvasManagerOhos.cpp +50 -0
  1061. package/harmony/gcanvas/src/main/cpp/core/harmony/memory/AutoPtr.h +99 -0
  1062. package/harmony/gcanvas/src/main/cpp/core/harmony/memory/IDelete.h +25 -0
  1063. package/harmony/gcanvas/src/main/cpp/core/harmony/memory/RefCount.h +55 -0
  1064. package/harmony/gcanvas/src/main/cpp/core/harmony/png/IPngCoder.h +38 -0
  1065. package/harmony/gcanvas/src/main/cpp/core/harmony/png/LodePngCoder.cpp +101 -0
  1066. package/harmony/gcanvas/src/main/cpp/core/harmony/png/LodePngCoder.h +40 -0
  1067. package/harmony/gcanvas/src/main/cpp/core/harmony/png/PngLoader.cpp +114 -0
  1068. package/harmony/gcanvas/src/main/cpp/core/harmony/png/PngLoader.h +53 -0
  1069. package/harmony/gcanvas/src/main/cpp/core/harmony/png/thirdparty/lodepng.c +6292 -0
  1070. package/harmony/gcanvas/src/main/cpp/core/harmony/png/thirdparty/lodepng.h +1890 -0
  1071. package/harmony/gcanvas/src/main/cpp/core/src/GCanvas.cpp +89 -0
  1072. package/harmony/gcanvas/src/main/cpp/core/src/GCanvas.hpp +45 -0
  1073. package/harmony/gcanvas/src/main/cpp/core/src/GCanvasManager.cpp +158 -0
  1074. package/harmony/gcanvas/src/main/cpp/core/src/GCanvasManager.h +56 -0
  1075. package/harmony/gcanvas/src/main/cpp/core/src/GCanvasWeex.cpp +1925 -0
  1076. package/harmony/gcanvas/src/main/cpp/core/src/GCanvasWeex.hpp +335 -0
  1077. package/harmony/gcanvas/src/main/cpp/core/src/RNCGCanvasBridge.h +225 -0
  1078. package/harmony/gcanvas/src/main/cpp/core/src/export.h +29 -0
  1079. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GCanvas2dContext.cpp +2366 -0
  1080. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GCanvas2dContext.h +449 -0
  1081. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GCanvasState.cpp +189 -0
  1082. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GCanvasState.h +83 -0
  1083. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GContext2dType.h +68 -0
  1084. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GConvert.cpp +476 -0
  1085. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GConvert.h +25 -0
  1086. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GFillStyle.h +191 -0
  1087. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GFontManager.h +110 -0
  1088. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GFontStyle.cpp +149 -0
  1089. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GFontStyle.h +94 -0
  1090. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GFrameBufferObject.cpp +226 -0
  1091. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GFrameBufferObject.h +116 -0
  1092. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GGL.h +45 -0
  1093. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GGlyphCache.cpp +106 -0
  1094. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GGlyphCache.h +159 -0
  1095. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GPath.cpp +1213 -0
  1096. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GPath.h +115 -0
  1097. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GPoint.h +117 -0
  1098. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GShader.cpp +346 -0
  1099. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GShader.h +360 -0
  1100. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GShaderManager.cpp +140 -0
  1101. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GShaderManager.h +38 -0
  1102. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GStrSeparator.cpp +84 -0
  1103. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GStrSeparator.h +31 -0
  1104. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GTextDefine.h +34 -0
  1105. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GTexture.cpp +327 -0
  1106. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GTexture.h +133 -0
  1107. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GTransform.h +163 -0
  1108. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GTreemap.cpp +61 -0
  1109. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GTreemap.h +88 -0
  1110. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GWebglContext.cpp +3259 -0
  1111. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/GWebglContext.h +13 -0
  1112. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/shaders/default.glsl +39 -0
  1113. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/shaders/grad.glsl +101 -0
  1114. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/shaders/pattern.glsl +45 -0
  1115. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/shaders/radiation.glsl +110 -0
  1116. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/shaders/shadow.glsl +39 -0
  1117. package/harmony/gcanvas/src/main/cpp/core/src/gcanvas/shaders/texture.glsl +34 -0
  1118. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GCanvas2DContextAndroid.cpp +386 -0
  1119. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GCanvas2DContextAndroid.h +113 -0
  1120. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GCanvas2DContextImpl.cpp +67 -0
  1121. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GCanvasAndroid.cpp +41 -0
  1122. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GCanvasAndroid.h +36 -0
  1123. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GFont.cpp +806 -0
  1124. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GFont.h +164 -0
  1125. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GFontCache.cpp +467 -0
  1126. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GFontCache.h +93 -0
  1127. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GFontFamily.cpp +187 -0
  1128. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GFontFamily.h +68 -0
  1129. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GFontManager.cpp +205 -0
  1130. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GFontManagerAndroid.cpp +328 -0
  1131. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GFontManagerAndroid.h +63 -0
  1132. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GFontManagerImpl.cpp +22 -0
  1133. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GFrameBufferObjectImpl.cpp +180 -0
  1134. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GPreCompiledShaders.cpp +175 -0
  1135. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GPreCompiledShaders.h +75 -0
  1136. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GSystemFontInformation.cpp +231 -0
  1137. package/harmony/gcanvas/src/main/cpp/core/src/platform/Android/GSystemFontInformation.h +69 -0
  1138. package/harmony/gcanvas/src/main/cpp/core/src/platform/Linux/FontTool.hpp +892 -0
  1139. package/harmony/gcanvas/src/main/cpp/core/src/platform/Linux/GFont.cpp +742 -0
  1140. package/harmony/gcanvas/src/main/cpp/core/src/platform/Linux/GFontCache.cpp +296 -0
  1141. package/harmony/gcanvas/src/main/cpp/core/src/platform/Linux/GFontFamily.cpp +162 -0
  1142. package/harmony/gcanvas/src/main/cpp/core/src/platform/Linux/GFontManager.cpp +230 -0
  1143. package/harmony/gcanvas/src/main/cpp/core/src/platform/Linux/GSystemFontInformation.cpp +232 -0
  1144. package/harmony/gcanvas/src/main/cpp/core/src/platform/Linux/PortableMap.hpp +621 -0
  1145. package/harmony/gcanvas/src/main/cpp/core/src/platform/Linux/argh.h +434 -0
  1146. package/harmony/gcanvas/src/main/cpp/core/src/platform/Linux/fonttool.cpp +109 -0
  1147. package/harmony/gcanvas/src/main/cpp/core/src/platform/Linux/utils.hpp +229 -0
  1148. package/harmony/gcanvas/src/main/cpp/core/src/platform/iOS/GCVFont.h +126 -0
  1149. package/harmony/gcanvas/src/main/cpp/core/src/platform/iOS/GCVFont.mm +573 -0
  1150. package/harmony/gcanvas/src/main/cpp/core/src/platform/iOS/GFontManager.mm +185 -0
  1151. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GCanvas2DContextHarmony.cpp +391 -0
  1152. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GCanvas2DContextHarmony.h +114 -0
  1153. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GCanvas2DContextOHOS.cpp +49 -0
  1154. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GCanvasHarmony.cpp +42 -0
  1155. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GCanvasHarmony.h +37 -0
  1156. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GFont.cpp +806 -0
  1157. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GFont.h +164 -0
  1158. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GFontCache.cpp +466 -0
  1159. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GFontCache.h +94 -0
  1160. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GFontFamily.cpp +188 -0
  1161. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GFontFamily.h +69 -0
  1162. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GFontManagerHarmony.cpp +329 -0
  1163. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GFontManagerHarmony.h +64 -0
  1164. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GFontManagerImpl.cpp +23 -0
  1165. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GFrameBufferObjectImpl.cpp +221 -0
  1166. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GPreCompiledShaders.cpp +176 -0
  1167. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GPreCompiledShaders.h +76 -0
  1168. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GSystemFontInformation.cpp +232 -0
  1169. package/harmony/gcanvas/src/main/cpp/core/src/platform/ohos/GSystemFontInformation.h +70 -0
  1170. package/harmony/gcanvas/src/main/cpp/core/src/support/CharacterSet.cpp +126 -0
  1171. package/harmony/gcanvas/src/main/cpp/core/src/support/CharacterSet.h +30 -0
  1172. package/harmony/gcanvas/src/main/cpp/core/src/support/ConcurrenceQueue.h +128 -0
  1173. package/harmony/gcanvas/src/main/cpp/core/src/support/DynArray.h +157 -0
  1174. package/harmony/gcanvas/src/main/cpp/core/src/support/Encode.cpp +116 -0
  1175. package/harmony/gcanvas/src/main/cpp/core/src/support/Encode.h +20 -0
  1176. package/harmony/gcanvas/src/main/cpp/core/src/support/FileUtils.cpp +153 -0
  1177. package/harmony/gcanvas/src/main/cpp/core/src/support/FileUtils.h +56 -0
  1178. package/harmony/gcanvas/src/main/cpp/core/src/support/GLUtil.cpp +174 -0
  1179. package/harmony/gcanvas/src/main/cpp/core/src/support/GLUtil.h +25 -0
  1180. package/harmony/gcanvas/src/main/cpp/core/src/support/Lesser.h +27 -0
  1181. package/harmony/gcanvas/src/main/cpp/core/src/support/Log.cpp +158 -0
  1182. package/harmony/gcanvas/src/main/cpp/core/src/support/Log.h +100 -0
  1183. package/harmony/gcanvas/src/main/cpp/core/src/support/Util.cpp +118 -0
  1184. package/harmony/gcanvas/src/main/cpp/core/src/support/Util.h +38 -0
  1185. package/harmony/gcanvas/src/main/cpp/core/src/support/Value.cpp +180 -0
  1186. package/harmony/gcanvas/src/main/cpp/core/src/support/Value.h +76 -0
  1187. package/harmony/gcanvas/src/main/cpp/generated/RNOH/generated/BaseGcanvasPackage.h +79 -0
  1188. package/harmony/gcanvas/src/main/cpp/generated/RNOH/generated/components/GCanvasViewJSIBinder.h +37 -0
  1189. package/harmony/gcanvas/src/main/cpp/generated/RNOH/generated/turbo_modules/GCanvasModule.cpp +35 -0
  1190. package/harmony/gcanvas/src/main/cpp/generated/RNOH/generated/turbo_modules/GCanvasModule.h +16 -0
  1191. package/harmony/gcanvas/src/main/cpp/generated/react/renderer/components/gcanvas/ComponentDescriptors.h +24 -0
  1192. package/harmony/gcanvas/src/main/cpp/generated/react/renderer/components/gcanvas/EventEmitters.cpp +33 -0
  1193. package/harmony/gcanvas/src/main/cpp/generated/react/renderer/components/gcanvas/EventEmitters.h +31 -0
  1194. package/harmony/gcanvas/src/main/cpp/generated/react/renderer/components/gcanvas/Props.cpp +28 -0
  1195. package/harmony/gcanvas/src/main/cpp/generated/react/renderer/components/gcanvas/Props.h +30 -0
  1196. package/harmony/gcanvas/src/main/cpp/generated/react/renderer/components/gcanvas/ShadowNodes.cpp +17 -0
  1197. package/harmony/gcanvas/src/main/cpp/generated/react/renderer/components/gcanvas/ShadowNodes.h +32 -0
  1198. package/harmony/gcanvas/src/main/cpp/generated/react/renderer/components/gcanvas/States.cpp +16 -0
  1199. package/harmony/gcanvas/src/main/cpp/generated/react/renderer/components/gcanvas/States.h +29 -0
  1200. package/harmony/gcanvas/src/main/ets/GCanvasModuleTurboModule.ts +448 -0
  1201. package/harmony/gcanvas/src/main/ets/GCanvasNativeEngine.ts +206 -0
  1202. package/harmony/gcanvas/src/main/ets/GcanvasTurboModulesFactory.ets +42 -0
  1203. package/harmony/gcanvas/src/main/ets/components/GCanvasView.ets +109 -0
  1204. package/harmony/gcanvas/src/main/ets/generated/components/GCanvasView.ts +126 -0
  1205. package/harmony/gcanvas/src/main/ets/generated/components/ts.ts +5 -0
  1206. package/harmony/gcanvas/src/main/ets/generated/index.ets +5 -0
  1207. package/harmony/gcanvas/src/main/ets/generated/ts.ts +6 -0
  1208. package/harmony/gcanvas/src/main/ets/generated/turboModules/GCanvasModule.ts +52 -0
  1209. package/harmony/gcanvas/src/main/ets/generated/turboModules/ts.ts +5 -0
  1210. package/harmony/gcanvas/src/main/module.json5 +21 -0
  1211. package/harmony/gcanvas/src/main/resources/base/element/string.json +12 -0
  1212. package/harmony/gcanvas/src/main/resources/en_US/element/string.json +8 -0
  1213. package/harmony/gcanvas/src/main/resources/zh_CN/element/string.json +12 -0
  1214. package/harmony/gcanvas.har +0 -0
  1215. package/package.json +69 -0
  1216. package/packages/gcanvas/.babelrc +5 -0
  1217. package/packages/gcanvas/.eslintrc.js +133 -0
  1218. package/packages/gcanvas/package.json +19 -0
  1219. package/packages/gcanvas/rollup.config.js +14 -0
  1220. package/packages/gcanvas/src/bridge/react-native.js +286 -0
  1221. package/packages/gcanvas/src/bridge/weex.js +210 -0
  1222. package/packages/gcanvas/src/context/2d/FillStyleLinearGradient.js +17 -0
  1223. package/packages/gcanvas/src/context/2d/FillStylePattern.js +8 -0
  1224. package/packages/gcanvas/src/context/2d/FillStyleRadialGradient.js +17 -0
  1225. package/packages/gcanvas/src/context/2d/OffScreenRenderingContext.js +49 -0
  1226. package/packages/gcanvas/src/context/2d/RenderingContext.js +787 -0
  1227. package/packages/gcanvas/src/context/webgl/ActiveInfo.js +11 -0
  1228. package/packages/gcanvas/src/context/webgl/Buffer.js +21 -0
  1229. package/packages/gcanvas/src/context/webgl/Framebuffer.js +21 -0
  1230. package/packages/gcanvas/src/context/webgl/GLenum.js +300 -0
  1231. package/packages/gcanvas/src/context/webgl/GLmethod.js +142 -0
  1232. package/packages/gcanvas/src/context/webgl/GLtype.js +22 -0
  1233. package/packages/gcanvas/src/context/webgl/Program.js +21 -0
  1234. package/packages/gcanvas/src/context/webgl/Renderbuffer.js +21 -0
  1235. package/packages/gcanvas/src/context/webgl/RenderingContext.js +1479 -0
  1236. package/packages/gcanvas/src/context/webgl/Shader.js +22 -0
  1237. package/packages/gcanvas/src/context/webgl/ShaderPrecisionFormat.js +11 -0
  1238. package/packages/gcanvas/src/context/webgl/Texture.js +22 -0
  1239. package/packages/gcanvas/src/context/webgl/UniformLocation.js +22 -0
  1240. package/packages/gcanvas/src/context/webgl/classUtils.js +3 -0
  1241. package/packages/gcanvas/src/env/canvas.js +210 -0
  1242. package/packages/gcanvas/src/env/image.js +76 -0
  1243. package/packages/gcanvas/src/env/off-screen-canvas.js +74 -0
  1244. package/packages/gcanvas/src/index.js +65 -0
  1245. package/src/components/CanvasView.js +20 -0
  1246. package/src/components/GCanvasComponent.js +408 -0
  1247. package/src/index.js +69 -0
  1248. package/src/packages/gcanvas/.babelrc +5 -0
  1249. package/src/packages/gcanvas/.eslintrc.js +133 -0
  1250. package/src/packages/gcanvas/package.json +19 -0
  1251. package/src/packages/gcanvas/rollup.config.js +14 -0
  1252. package/src/packages/gcanvas/src/bridge/react-native.js +288 -0
  1253. package/src/packages/gcanvas/src/bridge/weex.js +210 -0
  1254. package/src/packages/gcanvas/src/context/2d/FillStyleLinearGradient.js +17 -0
  1255. package/src/packages/gcanvas/src/context/2d/FillStylePattern.js +8 -0
  1256. package/src/packages/gcanvas/src/context/2d/FillStyleRadialGradient.js +17 -0
  1257. package/src/packages/gcanvas/src/context/2d/OffScreenRenderingContext.js +49 -0
  1258. package/src/packages/gcanvas/src/context/2d/RenderingContext.js +801 -0
  1259. package/src/packages/gcanvas/src/context/webgl/ActiveInfo.js +11 -0
  1260. package/src/packages/gcanvas/src/context/webgl/Buffer.js +21 -0
  1261. package/src/packages/gcanvas/src/context/webgl/Framebuffer.js +21 -0
  1262. package/src/packages/gcanvas/src/context/webgl/GLenum.js +300 -0
  1263. package/src/packages/gcanvas/src/context/webgl/GLmethod.js +142 -0
  1264. package/src/packages/gcanvas/src/context/webgl/GLtype.js +22 -0
  1265. package/src/packages/gcanvas/src/context/webgl/Program.js +21 -0
  1266. package/src/packages/gcanvas/src/context/webgl/Renderbuffer.js +21 -0
  1267. package/src/packages/gcanvas/src/context/webgl/RenderingContext.js +1479 -0
  1268. package/src/packages/gcanvas/src/context/webgl/Shader.js +22 -0
  1269. package/src/packages/gcanvas/src/context/webgl/ShaderPrecisionFormat.js +11 -0
  1270. package/src/packages/gcanvas/src/context/webgl/Texture.js +22 -0
  1271. package/src/packages/gcanvas/src/context/webgl/UniformLocation.js +22 -0
  1272. package/src/packages/gcanvas/src/context/webgl/classUtils.js +3 -0
  1273. package/src/packages/gcanvas/src/env/canvas.js +210 -0
  1274. package/src/packages/gcanvas/src/env/image.js +76 -0
  1275. package/src/packages/gcanvas/src/env/off-screen-canvas.js +74 -0
  1276. package/src/packages/gcanvas/src/index.js +65 -0
  1277. package/src/specs/v1/.gitkeep +1 -0
  1278. package/src/specs/v1/GCanvasViewNativeComponent.ts +47 -0
  1279. package/src/specs/v1/NativeGCanvasModule.ts +140 -0
  1280. package/src/specs/v2/.gitkeep +1 -0
@@ -0,0 +1,3902 @@
1
+ /****************************************************************************
2
+ *
3
+ * ttcmap.c
4
+ *
5
+ * TrueType character mapping table (cmap) support (body).
6
+ *
7
+ * Copyright (C) 2002-2024 by
8
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
9
+ *
10
+ * This file is part of the FreeType project, and may only be used,
11
+ * modified, and distributed under the terms of the FreeType project
12
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
13
+ * this file you indicate that you have read the license and
14
+ * understand and accept it fully.
15
+ *
16
+ */
17
+
18
+
19
+ #include <freetype/internal/ftdebug.h>
20
+
21
+ #include "sferrors.h" /* must come before `ftvalid.h' */
22
+
23
+ #include <freetype/internal/ftvalid.h>
24
+ #include <freetype/internal/ftstream.h>
25
+ #include <freetype/internal/services/svpscmap.h>
26
+ #include "ttload.h"
27
+ #include "ttcmap.h"
28
+ #include "ttpost.h"
29
+
30
+
31
+ /**************************************************************************
32
+ *
33
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
34
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
35
+ * messages during execution.
36
+ */
37
+ #undef FT_COMPONENT
38
+ #define FT_COMPONENT ttcmap
39
+
40
+
41
+ #define TT_PEEK_SHORT FT_PEEK_SHORT
42
+ #define TT_PEEK_USHORT FT_PEEK_USHORT
43
+ #define TT_PEEK_UINT24 FT_PEEK_UOFF3
44
+ #define TT_PEEK_LONG FT_PEEK_LONG
45
+ #define TT_PEEK_ULONG FT_PEEK_ULONG
46
+
47
+ #define TT_NEXT_SHORT FT_NEXT_SHORT
48
+ #define TT_NEXT_USHORT FT_NEXT_USHORT
49
+ #define TT_NEXT_UINT24 FT_NEXT_UOFF3
50
+ #define TT_NEXT_LONG FT_NEXT_LONG
51
+ #define TT_NEXT_ULONG FT_NEXT_ULONG
52
+
53
+
54
+ /* Too large glyph index return values are caught in `FT_Get_Char_Index' */
55
+ /* and `FT_Get_Next_Char' (the latter calls the internal `next' function */
56
+ /* again in this case). To mark character code return values as invalid */
57
+ /* it is sufficient to set the corresponding glyph index return value to */
58
+ /* zero. */
59
+
60
+
61
+ FT_CALLBACK_DEF( FT_Error )
62
+ tt_cmap_init( FT_CMap cmap, /* TT_CMap */
63
+ void* table_ )
64
+ {
65
+ TT_CMap ttcmap = (TT_CMap)cmap;
66
+ FT_Byte* table = (FT_Byte*)table_;
67
+
68
+
69
+ ttcmap->data = table;
70
+ return FT_Err_Ok;
71
+ }
72
+
73
+
74
+ /*************************************************************************/
75
+ /*************************************************************************/
76
+ /***** *****/
77
+ /***** FORMAT 0 *****/
78
+ /***** *****/
79
+ /*************************************************************************/
80
+ /*************************************************************************/
81
+
82
+ /**************************************************************************
83
+ *
84
+ * TABLE OVERVIEW
85
+ * --------------
86
+ *
87
+ * NAME OFFSET TYPE DESCRIPTION
88
+ *
89
+ * format 0 USHORT must be 0
90
+ * length 2 USHORT table length in bytes
91
+ * language 4 USHORT Mac language code
92
+ * glyph_ids 6 BYTE[256] array of glyph indices
93
+ * 262
94
+ */
95
+
96
+ #ifdef TT_CONFIG_CMAP_FORMAT_0
97
+
98
+ FT_CALLBACK_DEF( FT_Error )
99
+ tt_cmap0_validate( FT_Byte* table,
100
+ FT_Validator valid )
101
+ {
102
+ FT_Byte* p;
103
+ FT_UInt length;
104
+
105
+
106
+ if ( table + 2 + 2 > valid->limit )
107
+ FT_INVALID_TOO_SHORT;
108
+
109
+ p = table + 2; /* skip format */
110
+ length = TT_NEXT_USHORT( p );
111
+
112
+ if ( table + length > valid->limit || length < 262 )
113
+ FT_INVALID_TOO_SHORT;
114
+
115
+ /* check glyph indices whenever necessary */
116
+ if ( valid->level >= FT_VALIDATE_TIGHT )
117
+ {
118
+ FT_UInt n, idx;
119
+
120
+
121
+ p = table + 6;
122
+ for ( n = 0; n < 256; n++ )
123
+ {
124
+ idx = *p++;
125
+ if ( idx >= TT_VALID_GLYPH_COUNT( valid ) )
126
+ FT_INVALID_GLYPH_ID;
127
+ }
128
+ }
129
+
130
+ return FT_Err_Ok;
131
+ }
132
+
133
+
134
+ FT_CALLBACK_DEF( FT_UInt )
135
+ tt_cmap0_char_index( FT_CMap cmap, /* TT_CMap */
136
+ FT_UInt32 char_code )
137
+ {
138
+ TT_CMap ttcmap = (TT_CMap)cmap;
139
+ FT_Byte* table = ttcmap->data;
140
+
141
+
142
+ return char_code < 256 ? table[6 + char_code] : 0;
143
+ }
144
+
145
+
146
+ FT_CALLBACK_DEF( FT_UInt )
147
+ tt_cmap0_char_next( FT_CMap cmap, /* TT_CMap */
148
+ FT_UInt32 *pchar_code )
149
+ {
150
+ TT_CMap ttcmap = (TT_CMap)cmap;
151
+ FT_Byte* table = ttcmap->data;
152
+ FT_UInt32 charcode = *pchar_code;
153
+ FT_UInt32 result = 0;
154
+ FT_UInt gindex = 0;
155
+
156
+
157
+ table += 6; /* go to glyph IDs */
158
+ while ( ++charcode < 256 )
159
+ {
160
+ gindex = table[charcode];
161
+ if ( gindex != 0 )
162
+ {
163
+ result = charcode;
164
+ break;
165
+ }
166
+ }
167
+
168
+ *pchar_code = result;
169
+ return gindex;
170
+ }
171
+
172
+
173
+ FT_CALLBACK_DEF( FT_Error )
174
+ tt_cmap0_get_info( FT_CharMap cmap, /* TT_CMap */
175
+ TT_CMapInfo *cmap_info )
176
+ {
177
+ TT_CMap ttcmap = (TT_CMap)cmap;
178
+ FT_Byte* p = ttcmap->data + 4;
179
+
180
+
181
+ cmap_info->format = 0;
182
+ cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p );
183
+
184
+ return FT_Err_Ok;
185
+ }
186
+
187
+
188
+ FT_DEFINE_TT_CMAP(
189
+ tt_cmap0_class_rec,
190
+
191
+ sizeof ( TT_CMapRec ),
192
+
193
+ (FT_CMap_InitFunc) tt_cmap_init, /* init */
194
+ (FT_CMap_DoneFunc) NULL, /* done */
195
+ (FT_CMap_CharIndexFunc)tt_cmap0_char_index, /* char_index */
196
+ (FT_CMap_CharNextFunc) tt_cmap0_char_next, /* char_next */
197
+
198
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
199
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
200
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
201
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
202
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
203
+
204
+ 0,
205
+ (TT_CMap_ValidateFunc)tt_cmap0_validate, /* validate */
206
+ (TT_CMap_Info_GetFunc)tt_cmap0_get_info /* get_cmap_info */
207
+ )
208
+
209
+ #endif /* TT_CONFIG_CMAP_FORMAT_0 */
210
+
211
+
212
+ /*************************************************************************/
213
+ /*************************************************************************/
214
+ /***** *****/
215
+ /***** FORMAT 2 *****/
216
+ /***** *****/
217
+ /***** This is used for certain CJK encodings that encode text in a *****/
218
+ /***** mixed 8/16 bits encoding along the following lines. *****/
219
+ /***** *****/
220
+ /***** * Certain byte values correspond to an 8-bit character code *****/
221
+ /***** (typically in the range 0..127 for ASCII compatibility). *****/
222
+ /***** *****/
223
+ /***** * Certain byte values signal the first byte of a 2-byte *****/
224
+ /***** character code (but these values are also valid as the *****/
225
+ /***** second byte of a 2-byte character). *****/
226
+ /***** *****/
227
+ /***** The following charmap lookup and iteration functions all *****/
228
+ /***** assume that the value `charcode' fulfills the following. *****/
229
+ /***** *****/
230
+ /***** - For one-byte characters, `charcode' is simply the *****/
231
+ /***** character code. *****/
232
+ /***** *****/
233
+ /***** - For two-byte characters, `charcode' is the 2-byte *****/
234
+ /***** character code in big endian format. More precisely: *****/
235
+ /***** *****/
236
+ /***** (charcode >> 8) is the first byte value *****/
237
+ /***** (charcode & 0xFF) is the second byte value *****/
238
+ /***** *****/
239
+ /***** Note that not all values of `charcode' are valid according *****/
240
+ /***** to these rules, and the function moderately checks the *****/
241
+ /***** arguments. *****/
242
+ /***** *****/
243
+ /*************************************************************************/
244
+ /*************************************************************************/
245
+
246
+ /**************************************************************************
247
+ *
248
+ * TABLE OVERVIEW
249
+ * --------------
250
+ *
251
+ * NAME OFFSET TYPE DESCRIPTION
252
+ *
253
+ * format 0 USHORT must be 2
254
+ * length 2 USHORT table length in bytes
255
+ * language 4 USHORT Mac language code
256
+ * keys 6 USHORT[256] sub-header keys
257
+ * subs 518 SUBHEAD[NSUBS] sub-headers array
258
+ * glyph_ids 518+NSUB*8 USHORT[] glyph ID array
259
+ *
260
+ * The `keys' table is used to map charcode high bytes to sub-headers.
261
+ * The value of `NSUBS' is the number of sub-headers defined in the
262
+ * table and is computed by finding the maximum of the `keys' table.
263
+ *
264
+ * Note that for any `n', `keys[n]' is a byte offset within the `subs'
265
+ * table, i.e., it is the corresponding sub-header index multiplied
266
+ * by 8.
267
+ *
268
+ * Each sub-header has the following format.
269
+ *
270
+ * NAME OFFSET TYPE DESCRIPTION
271
+ *
272
+ * first 0 USHORT first valid low-byte
273
+ * count 2 USHORT number of valid low-bytes
274
+ * delta 4 SHORT see below
275
+ * offset 6 USHORT see below
276
+ *
277
+ * A sub-header defines, for each high byte, the range of valid
278
+ * low bytes within the charmap. Note that the range defined by `first'
279
+ * and `count' must be completely included in the interval [0..255]
280
+ * according to the specification.
281
+ *
282
+ * If a character code is contained within a given sub-header, then
283
+ * mapping it to a glyph index is done as follows.
284
+ *
285
+ * - The value of `offset' is read. This is a _byte_ distance from the
286
+ * location of the `offset' field itself into a slice of the
287
+ * `glyph_ids' table. Let's call it `slice' (it is a USHORT[], too).
288
+ *
289
+ * - The value `slice[char.lo - first]' is read. If it is 0, there is
290
+ * no glyph for the charcode. Otherwise, the value of `delta' is
291
+ * added to it (modulo 65536) to form a new glyph index.
292
+ *
293
+ * It is up to the validation routine to check that all offsets fall
294
+ * within the glyph IDs table (and not within the `subs' table itself or
295
+ * outside of the CMap).
296
+ */
297
+
298
+ #ifdef TT_CONFIG_CMAP_FORMAT_2
299
+
300
+ FT_CALLBACK_DEF( FT_Error )
301
+ tt_cmap2_validate( FT_Byte* table,
302
+ FT_Validator valid )
303
+ {
304
+ FT_Byte* p;
305
+ FT_UInt length;
306
+
307
+ FT_UInt n, max_subs;
308
+ FT_Byte* keys; /* keys table */
309
+ FT_Byte* subs; /* sub-headers */
310
+ FT_Byte* glyph_ids; /* glyph ID array */
311
+
312
+
313
+ if ( table + 2 + 2 > valid->limit )
314
+ FT_INVALID_TOO_SHORT;
315
+
316
+ p = table + 2; /* skip format */
317
+ length = TT_NEXT_USHORT( p );
318
+
319
+ if ( table + length > valid->limit || length < 6 + 512 )
320
+ FT_INVALID_TOO_SHORT;
321
+
322
+ keys = table + 6;
323
+
324
+ /* parse keys to compute sub-headers count */
325
+ p = keys;
326
+ max_subs = 0;
327
+ for ( n = 0; n < 256; n++ )
328
+ {
329
+ FT_UInt idx = TT_NEXT_USHORT( p );
330
+
331
+
332
+ /* value must be multiple of 8 */
333
+ if ( valid->level >= FT_VALIDATE_PARANOID && ( idx & 7 ) != 0 )
334
+ FT_INVALID_DATA;
335
+
336
+ idx >>= 3;
337
+
338
+ if ( idx > max_subs )
339
+ max_subs = idx;
340
+ }
341
+
342
+ FT_ASSERT( p == table + 518 );
343
+
344
+ subs = p;
345
+ glyph_ids = subs + ( max_subs + 1 ) * 8;
346
+ if ( glyph_ids > valid->limit )
347
+ FT_INVALID_TOO_SHORT;
348
+
349
+ /* parse sub-headers */
350
+ for ( n = 0; n <= max_subs; n++ )
351
+ {
352
+ FT_UInt first_code, code_count, offset;
353
+ FT_Int delta;
354
+
355
+
356
+ first_code = TT_NEXT_USHORT( p );
357
+ code_count = TT_NEXT_USHORT( p );
358
+ delta = TT_NEXT_SHORT( p );
359
+ offset = TT_NEXT_USHORT( p );
360
+
361
+ /* many Dynalab fonts have empty sub-headers */
362
+ if ( code_count == 0 )
363
+ continue;
364
+
365
+ /* check range within 0..255 */
366
+ if ( valid->level >= FT_VALIDATE_PARANOID )
367
+ {
368
+ if ( first_code >= 256 || code_count > 256 - first_code )
369
+ FT_INVALID_DATA;
370
+ }
371
+
372
+ /* check offset */
373
+ if ( offset != 0 )
374
+ {
375
+ FT_Byte* ids;
376
+
377
+
378
+ ids = p - 2 + offset;
379
+ if ( ids < glyph_ids || ids + code_count * 2 > table + length )
380
+ FT_INVALID_OFFSET;
381
+
382
+ /* check glyph IDs */
383
+ if ( valid->level >= FT_VALIDATE_TIGHT )
384
+ {
385
+ FT_Byte* limit = p + code_count * 2;
386
+ FT_UInt idx;
387
+
388
+
389
+ for ( ; p < limit; )
390
+ {
391
+ idx = TT_NEXT_USHORT( p );
392
+ if ( idx != 0 )
393
+ {
394
+ idx = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU;
395
+ if ( idx >= TT_VALID_GLYPH_COUNT( valid ) )
396
+ FT_INVALID_GLYPH_ID;
397
+ }
398
+ }
399
+ }
400
+ }
401
+ }
402
+
403
+ return FT_Err_Ok;
404
+ }
405
+
406
+
407
+ /* return sub header corresponding to a given character code */
408
+ /* NULL on invalid charcode */
409
+ static FT_Byte*
410
+ tt_cmap2_get_subheader( FT_Byte* table,
411
+ FT_UInt32 char_code )
412
+ {
413
+ FT_Byte* result = NULL;
414
+
415
+
416
+ if ( char_code < 0x10000UL )
417
+ {
418
+ FT_UInt char_lo = (FT_UInt)( char_code & 0xFF );
419
+ FT_UInt char_hi = (FT_UInt)( char_code >> 8 );
420
+ FT_Byte* p = table + 6; /* keys table */
421
+ FT_Byte* subs = table + 518; /* subheaders table */
422
+ FT_Byte* sub;
423
+
424
+
425
+ if ( char_hi == 0 )
426
+ {
427
+ /* an 8-bit character code -- we use subHeader 0 in this case */
428
+ /* to test whether the character code is in the charmap */
429
+ /* */
430
+ sub = subs; /* jump to first sub-header */
431
+
432
+ /* check that the sub-header for this byte is 0, which */
433
+ /* indicates that it is really a valid one-byte value; */
434
+ /* otherwise, return 0 */
435
+ /* */
436
+ p += char_lo * 2;
437
+ if ( TT_PEEK_USHORT( p ) != 0 )
438
+ goto Exit;
439
+ }
440
+ else
441
+ {
442
+ /* a 16-bit character code */
443
+
444
+ /* jump to key entry */
445
+ p += char_hi * 2;
446
+ /* jump to sub-header */
447
+ sub = subs + ( FT_PAD_FLOOR( TT_PEEK_USHORT( p ), 8 ) );
448
+
449
+ /* check that the high byte isn't a valid one-byte value */
450
+ if ( sub == subs )
451
+ goto Exit;
452
+ }
453
+
454
+ result = sub;
455
+ }
456
+
457
+ Exit:
458
+ return result;
459
+ }
460
+
461
+
462
+ FT_CALLBACK_DEF( FT_UInt )
463
+ tt_cmap2_char_index( FT_CMap cmap, /* TT_CMap */
464
+ FT_UInt32 char_code )
465
+ {
466
+ TT_CMap ttcmap = (TT_CMap)cmap;
467
+ FT_Byte* table = ttcmap->data;
468
+ FT_UInt result = 0;
469
+ FT_Byte* subheader;
470
+
471
+
472
+ subheader = tt_cmap2_get_subheader( table, char_code );
473
+ if ( subheader )
474
+ {
475
+ FT_Byte* p = subheader;
476
+ FT_UInt idx = (FT_UInt)( char_code & 0xFF );
477
+ FT_UInt start, count;
478
+ FT_Int delta;
479
+ FT_UInt offset;
480
+
481
+
482
+ start = TT_NEXT_USHORT( p );
483
+ count = TT_NEXT_USHORT( p );
484
+ delta = TT_NEXT_SHORT ( p );
485
+ offset = TT_PEEK_USHORT( p );
486
+
487
+ idx -= start;
488
+ if ( idx < count && offset != 0 )
489
+ {
490
+ p += offset + 2 * idx;
491
+ idx = TT_PEEK_USHORT( p );
492
+
493
+ if ( idx != 0 )
494
+ result = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU;
495
+ }
496
+ }
497
+
498
+ return result;
499
+ }
500
+
501
+
502
+ FT_CALLBACK_DEF( FT_UInt )
503
+ tt_cmap2_char_next( FT_CMap cmap, /* TT_CMap */
504
+ FT_UInt32 *pcharcode )
505
+ {
506
+ TT_CMap ttcmap = (TT_CMap)cmap;
507
+ FT_Byte* table = ttcmap->data;
508
+ FT_UInt gindex = 0;
509
+ FT_UInt32 result = 0;
510
+ FT_UInt32 charcode = *pcharcode + 1;
511
+ FT_Byte* subheader;
512
+
513
+
514
+ while ( charcode < 0x10000UL )
515
+ {
516
+ subheader = tt_cmap2_get_subheader( table, charcode );
517
+ if ( subheader )
518
+ {
519
+ FT_Byte* p = subheader;
520
+ FT_UInt start = TT_NEXT_USHORT( p );
521
+ FT_UInt count = TT_NEXT_USHORT( p );
522
+ FT_Int delta = TT_NEXT_SHORT ( p );
523
+ FT_UInt offset = TT_PEEK_USHORT( p );
524
+ FT_UInt char_lo = (FT_UInt)( charcode & 0xFF );
525
+ FT_UInt pos, idx;
526
+
527
+
528
+ if ( char_lo >= start + count && charcode <= 0xFF )
529
+ {
530
+ /* this happens only for a malformed cmap */
531
+ charcode = 0x100;
532
+ continue;
533
+ }
534
+
535
+ if ( offset == 0 )
536
+ {
537
+ if ( charcode == 0x100 )
538
+ goto Exit; /* this happens only for a malformed cmap */
539
+ goto Next_SubHeader;
540
+ }
541
+
542
+ if ( char_lo < start )
543
+ {
544
+ char_lo = start;
545
+ pos = 0;
546
+ }
547
+ else
548
+ pos = (FT_UInt)( char_lo - start );
549
+
550
+ p += offset + pos * 2;
551
+ charcode = FT_PAD_FLOOR( charcode, 256 ) + char_lo;
552
+
553
+ for ( ; pos < count; pos++, charcode++ )
554
+ {
555
+ idx = TT_NEXT_USHORT( p );
556
+
557
+ if ( idx != 0 )
558
+ {
559
+ gindex = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU;
560
+ if ( gindex != 0 )
561
+ {
562
+ result = charcode;
563
+ goto Exit;
564
+ }
565
+ }
566
+ }
567
+
568
+ /* if unsuccessful, avoid `charcode' leaving */
569
+ /* the current 256-character block */
570
+ if ( count )
571
+ charcode--;
572
+ }
573
+
574
+ /* If `charcode' is <= 0xFF, retry with `charcode + 1'. */
575
+ /* Otherwise jump to the next 256-character block and retry. */
576
+ Next_SubHeader:
577
+ if ( charcode <= 0xFF )
578
+ charcode++;
579
+ else
580
+ charcode = FT_PAD_FLOOR( charcode, 0x100 ) + 0x100;
581
+ }
582
+
583
+ Exit:
584
+ *pcharcode = result;
585
+
586
+ return gindex;
587
+ }
588
+
589
+
590
+ FT_CALLBACK_DEF( FT_Error )
591
+ tt_cmap2_get_info( FT_CharMap cmap, /* TT_CMap */
592
+ TT_CMapInfo *cmap_info )
593
+ {
594
+ TT_CMap ttcmap = (TT_CMap)cmap;
595
+ FT_Byte* p = ttcmap->data + 4;
596
+
597
+
598
+ cmap_info->format = 2;
599
+ cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p );
600
+
601
+ return FT_Err_Ok;
602
+ }
603
+
604
+
605
+ FT_DEFINE_TT_CMAP(
606
+ tt_cmap2_class_rec,
607
+
608
+ sizeof ( TT_CMapRec ),
609
+
610
+ (FT_CMap_InitFunc) tt_cmap_init, /* init */
611
+ (FT_CMap_DoneFunc) NULL, /* done */
612
+ (FT_CMap_CharIndexFunc)tt_cmap2_char_index, /* char_index */
613
+ (FT_CMap_CharNextFunc) tt_cmap2_char_next, /* char_next */
614
+
615
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
616
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
617
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
618
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
619
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
620
+
621
+ 2,
622
+ (TT_CMap_ValidateFunc)tt_cmap2_validate, /* validate */
623
+ (TT_CMap_Info_GetFunc)tt_cmap2_get_info /* get_cmap_info */
624
+ )
625
+
626
+ #endif /* TT_CONFIG_CMAP_FORMAT_2 */
627
+
628
+
629
+ /*************************************************************************/
630
+ /*************************************************************************/
631
+ /***** *****/
632
+ /***** FORMAT 4 *****/
633
+ /***** *****/
634
+ /*************************************************************************/
635
+ /*************************************************************************/
636
+
637
+ /**************************************************************************
638
+ *
639
+ * TABLE OVERVIEW
640
+ * --------------
641
+ *
642
+ * NAME OFFSET TYPE DESCRIPTION
643
+ *
644
+ * format 0 USHORT must be 4
645
+ * length 2 USHORT table length
646
+ * in bytes
647
+ * language 4 USHORT Mac language code
648
+ *
649
+ * segCountX2 6 USHORT 2*NUM_SEGS
650
+ * searchRange 8 USHORT 2*(1 << LOG_SEGS)
651
+ * entrySelector 10 USHORT LOG_SEGS
652
+ * rangeShift 12 USHORT segCountX2 -
653
+ * searchRange
654
+ *
655
+ * endCount 14 USHORT[NUM_SEGS] end charcode for
656
+ * each segment; last
657
+ * is 0xFFFF
658
+ *
659
+ * pad 14+NUM_SEGS*2 USHORT padding
660
+ *
661
+ * startCount 16+NUM_SEGS*2 USHORT[NUM_SEGS] first charcode for
662
+ * each segment
663
+ *
664
+ * idDelta 16+NUM_SEGS*4 SHORT[NUM_SEGS] delta for each
665
+ * segment
666
+ * idOffset 16+NUM_SEGS*6 SHORT[NUM_SEGS] range offset for
667
+ * each segment; can be
668
+ * zero
669
+ *
670
+ * glyphIds 16+NUM_SEGS*8 USHORT[] array of glyph ID
671
+ * ranges
672
+ *
673
+ * Character codes are modelled by a series of ordered (increasing)
674
+ * intervals called segments. Each segment has start and end codes,
675
+ * provided by the `startCount' and `endCount' arrays. Segments must
676
+ * not overlap, and the last segment should always contain the value
677
+ * 0xFFFF for `endCount'.
678
+ *
679
+ * The fields `searchRange', `entrySelector' and `rangeShift' are better
680
+ * ignored (they are traces of over-engineering in the TrueType
681
+ * specification).
682
+ *
683
+ * Each segment also has a signed `delta', as well as an optional offset
684
+ * within the `glyphIds' table.
685
+ *
686
+ * If a segment's idOffset is 0, the glyph index corresponding to any
687
+ * charcode within the segment is obtained by adding the value of
688
+ * `idDelta' directly to the charcode, modulo 65536.
689
+ *
690
+ * Otherwise, a glyph index is taken from the glyph IDs sub-array for
691
+ * the segment, and the value of `idDelta' is added to it.
692
+ *
693
+ *
694
+ * Finally, note that a lot of fonts contain an invalid last segment,
695
+ * where `start' and `end' are correctly set to 0xFFFF but both `delta'
696
+ * and `offset' are incorrect (e.g., `opens___.ttf' which comes with
697
+ * OpenOffice.org). We need special code to deal with them correctly.
698
+ */
699
+
700
+ #ifdef TT_CONFIG_CMAP_FORMAT_4
701
+
702
+ typedef struct TT_CMap4Rec_
703
+ {
704
+ TT_CMapRec cmap;
705
+ FT_UInt32 cur_charcode; /* current charcode */
706
+ FT_UInt cur_gindex; /* current glyph index */
707
+
708
+ FT_UInt num_ranges;
709
+ FT_UInt cur_range;
710
+ FT_UInt cur_start;
711
+ FT_UInt cur_end;
712
+ FT_Int cur_delta;
713
+ FT_Byte* cur_values;
714
+
715
+ } TT_CMap4Rec, *TT_CMap4;
716
+
717
+
718
+ FT_CALLBACK_DEF( FT_Error )
719
+ tt_cmap4_init( FT_CMap cmap, /* TT_CMap4 */
720
+ void* table_ )
721
+ {
722
+ TT_CMap4 ttcmap = (TT_CMap4)cmap;
723
+ FT_Byte* table = (FT_Byte*)table_;
724
+ FT_Byte* p;
725
+
726
+
727
+ ttcmap->cmap.data = table;
728
+
729
+ p = table + 6;
730
+ ttcmap->num_ranges = FT_PEEK_USHORT( p ) >> 1;
731
+ ttcmap->cur_charcode = (FT_UInt32)0xFFFFFFFFUL;
732
+ ttcmap->cur_gindex = 0;
733
+
734
+ return FT_Err_Ok;
735
+ }
736
+
737
+
738
+ static FT_Int
739
+ tt_cmap4_set_range( TT_CMap4 cmap,
740
+ FT_UInt range_index )
741
+ {
742
+ FT_Byte* table = cmap->cmap.data;
743
+ FT_Byte* p;
744
+ FT_UInt num_ranges = cmap->num_ranges;
745
+
746
+
747
+ while ( range_index < num_ranges )
748
+ {
749
+ FT_UInt offset;
750
+
751
+
752
+ p = table + 14 + range_index * 2;
753
+ cmap->cur_end = FT_PEEK_USHORT( p );
754
+
755
+ p += 2 + num_ranges * 2;
756
+ cmap->cur_start = FT_PEEK_USHORT( p );
757
+
758
+ p += num_ranges * 2;
759
+ cmap->cur_delta = FT_PEEK_SHORT( p );
760
+
761
+ p += num_ranges * 2;
762
+ offset = FT_PEEK_USHORT( p );
763
+
764
+ /* some fonts have an incorrect last segment; */
765
+ /* we have to catch it */
766
+ if ( range_index >= num_ranges - 1 &&
767
+ cmap->cur_start == 0xFFFFU &&
768
+ cmap->cur_end == 0xFFFFU )
769
+ {
770
+ TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
771
+ FT_Byte* limit = face->cmap_table + face->cmap_size;
772
+
773
+
774
+ if ( offset && p + offset + 2 > limit )
775
+ {
776
+ cmap->cur_delta = 1;
777
+ offset = 0;
778
+ }
779
+ }
780
+
781
+ if ( offset != 0xFFFFU )
782
+ {
783
+ cmap->cur_values = offset ? p + offset : NULL;
784
+ cmap->cur_range = range_index;
785
+ return 0;
786
+ }
787
+
788
+ /* we skip empty segments */
789
+ range_index++;
790
+ }
791
+
792
+ return -1;
793
+ }
794
+
795
+
796
+ /* search the index of the charcode next to cmap->cur_charcode; */
797
+ /* caller should call tt_cmap4_set_range with proper range */
798
+ /* before calling this function */
799
+ /* */
800
+ static void
801
+ tt_cmap4_next( TT_CMap4 cmap )
802
+ {
803
+ TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
804
+ FT_Byte* limit = face->cmap_table + face->cmap_size;
805
+
806
+ FT_UInt charcode;
807
+
808
+
809
+ charcode = (FT_UInt)cmap->cur_charcode + 1;
810
+
811
+ if ( charcode < cmap->cur_start )
812
+ charcode = cmap->cur_start;
813
+
814
+ for (;;)
815
+ {
816
+ FT_Byte* values = cmap->cur_values;
817
+ FT_UInt end = cmap->cur_end;
818
+ FT_Int delta = cmap->cur_delta;
819
+
820
+
821
+ if ( charcode <= end )
822
+ {
823
+ if ( values )
824
+ {
825
+ FT_Byte* p = values + 2 * ( charcode - cmap->cur_start );
826
+
827
+
828
+ /* if p > limit, the whole segment is invalid */
829
+ if ( p > limit )
830
+ goto Next_Segment;
831
+
832
+ do
833
+ {
834
+ FT_UInt gindex = FT_NEXT_USHORT( p );
835
+
836
+
837
+ if ( gindex )
838
+ {
839
+ gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU;
840
+ if ( gindex )
841
+ {
842
+ cmap->cur_charcode = charcode;
843
+ cmap->cur_gindex = gindex;
844
+ return;
845
+ }
846
+ }
847
+ } while ( ++charcode <= end );
848
+ }
849
+ else
850
+ {
851
+ do
852
+ {
853
+ FT_UInt gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU;
854
+
855
+
856
+ if ( gindex >= (FT_UInt)face->root.num_glyphs )
857
+ {
858
+ /* we have an invalid glyph index; if there is an overflow, */
859
+ /* we can adjust `charcode', otherwise the whole segment is */
860
+ /* invalid */
861
+ gindex = 0;
862
+
863
+ if ( (FT_Int)charcode + delta < 0 &&
864
+ (FT_Int)end + delta >= 0 )
865
+ charcode = (FT_UInt)( -delta );
866
+
867
+ else if ( (FT_Int)charcode + delta < 0x10000L &&
868
+ (FT_Int)end + delta >= 0x10000L )
869
+ charcode = (FT_UInt)( 0x10000L - delta );
870
+
871
+ else
872
+ goto Next_Segment;
873
+ }
874
+
875
+ if ( gindex )
876
+ {
877
+ cmap->cur_charcode = charcode;
878
+ cmap->cur_gindex = gindex;
879
+ return;
880
+ }
881
+ } while ( ++charcode <= end );
882
+ }
883
+ }
884
+
885
+ Next_Segment:
886
+ /* we need to find another range */
887
+ if ( tt_cmap4_set_range( cmap, cmap->cur_range + 1 ) < 0 )
888
+ break;
889
+
890
+ if ( charcode < cmap->cur_start )
891
+ charcode = cmap->cur_start;
892
+ }
893
+
894
+ cmap->cur_charcode = (FT_UInt32)0xFFFFFFFFUL;
895
+ cmap->cur_gindex = 0;
896
+ }
897
+
898
+
899
+ FT_CALLBACK_DEF( FT_Error )
900
+ tt_cmap4_validate( FT_Byte* table,
901
+ FT_Validator valid )
902
+ {
903
+ FT_Byte* p;
904
+ FT_UInt length;
905
+
906
+ FT_Byte *ends, *starts, *offsets, *deltas, *glyph_ids;
907
+ FT_UInt num_segs;
908
+ FT_Error error = FT_Err_Ok;
909
+
910
+
911
+ if ( table + 2 + 2 > valid->limit )
912
+ FT_INVALID_TOO_SHORT;
913
+
914
+ p = table + 2; /* skip format */
915
+ length = TT_NEXT_USHORT( p );
916
+
917
+ /* in certain fonts, the `length' field is invalid and goes */
918
+ /* out of bound. We try to correct this here... */
919
+ if ( table + length > valid->limit )
920
+ {
921
+ if ( valid->level >= FT_VALIDATE_TIGHT )
922
+ FT_INVALID_TOO_SHORT;
923
+
924
+ length = (FT_UInt)( valid->limit - table );
925
+ }
926
+
927
+ /* it also happens that the `length' field is too small; */
928
+ /* this is easy to correct */
929
+ if ( length < (FT_UInt)( valid->limit - table ) )
930
+ {
931
+ if ( valid->level >= FT_VALIDATE_PARANOID )
932
+ FT_INVALID_DATA;
933
+
934
+ length = (FT_UInt)( valid->limit - table );
935
+ }
936
+
937
+ if ( length < 16 )
938
+ FT_INVALID_TOO_SHORT;
939
+
940
+ p = table + 6;
941
+ num_segs = TT_NEXT_USHORT( p ); /* read segCountX2 */
942
+
943
+ if ( valid->level >= FT_VALIDATE_PARANOID )
944
+ {
945
+ /* check that we have an even value here */
946
+ if ( num_segs & 1 )
947
+ FT_INVALID_DATA;
948
+ }
949
+
950
+ num_segs /= 2;
951
+
952
+ if ( length < 16 + num_segs * 2 * 4 )
953
+ FT_INVALID_TOO_SHORT;
954
+
955
+ /* check the search parameters - even though we never use them */
956
+ /* */
957
+ if ( valid->level >= FT_VALIDATE_PARANOID )
958
+ {
959
+ /* check the values of `searchRange', `entrySelector', `rangeShift' */
960
+ FT_UInt search_range = TT_NEXT_USHORT( p );
961
+ FT_UInt entry_selector = TT_NEXT_USHORT( p );
962
+ FT_UInt range_shift = TT_NEXT_USHORT( p );
963
+
964
+
965
+ if ( ( search_range | range_shift ) & 1 ) /* must be even values */
966
+ FT_INVALID_DATA;
967
+
968
+ search_range /= 2;
969
+ range_shift /= 2;
970
+
971
+ /* `search range' is the greatest power of 2 that is <= num_segs */
972
+
973
+ if ( search_range > num_segs ||
974
+ search_range * 2 < num_segs ||
975
+ search_range + range_shift != num_segs ||
976
+ search_range != ( 1U << entry_selector ) )
977
+ FT_INVALID_DATA;
978
+ }
979
+
980
+ ends = table + 14;
981
+ starts = table + 16 + num_segs * 2;
982
+ deltas = starts + num_segs * 2;
983
+ offsets = deltas + num_segs * 2;
984
+ glyph_ids = offsets + num_segs * 2;
985
+
986
+ /* check last segment; its end count value must be 0xFFFF */
987
+ if ( valid->level >= FT_VALIDATE_PARANOID )
988
+ {
989
+ p = ends + ( num_segs - 1 ) * 2;
990
+ if ( TT_PEEK_USHORT( p ) != 0xFFFFU )
991
+ FT_INVALID_DATA;
992
+ }
993
+
994
+ {
995
+ FT_UInt start, end, offset, n;
996
+ FT_UInt last_start = 0, last_end = 0;
997
+ FT_Int delta;
998
+ FT_Byte* p_start = starts;
999
+ FT_Byte* p_end = ends;
1000
+ FT_Byte* p_delta = deltas;
1001
+ FT_Byte* p_offset = offsets;
1002
+
1003
+
1004
+ for ( n = 0; n < num_segs; n++ )
1005
+ {
1006
+ p = p_offset;
1007
+ start = TT_NEXT_USHORT( p_start );
1008
+ end = TT_NEXT_USHORT( p_end );
1009
+ delta = TT_NEXT_SHORT( p_delta );
1010
+ offset = TT_NEXT_USHORT( p_offset );
1011
+
1012
+ if ( start > end )
1013
+ FT_INVALID_DATA;
1014
+
1015
+ /* this test should be performed at default validation level; */
1016
+ /* unfortunately, some popular Asian fonts have overlapping */
1017
+ /* ranges in their charmaps */
1018
+ /* */
1019
+ if ( start <= last_end && n > 0 )
1020
+ {
1021
+ if ( valid->level >= FT_VALIDATE_TIGHT )
1022
+ FT_INVALID_DATA;
1023
+ else
1024
+ {
1025
+ /* allow overlapping segments, provided their start points */
1026
+ /* and end points, respectively, are in ascending order */
1027
+ /* */
1028
+ if ( last_start > start || last_end > end )
1029
+ error |= TT_CMAP_FLAG_UNSORTED;
1030
+ else
1031
+ error |= TT_CMAP_FLAG_OVERLAPPING;
1032
+ }
1033
+ }
1034
+
1035
+ if ( offset && offset != 0xFFFFU )
1036
+ {
1037
+ p += offset; /* start of glyph ID array */
1038
+
1039
+ /* check that we point within the glyph IDs table only */
1040
+ if ( valid->level >= FT_VALIDATE_TIGHT )
1041
+ {
1042
+ if ( p < glyph_ids ||
1043
+ p + ( end - start + 1 ) * 2 > table + length )
1044
+ FT_INVALID_DATA;
1045
+ }
1046
+ /* Some fonts handle the last segment incorrectly. In */
1047
+ /* theory, 0xFFFF might point to an ordinary glyph -- */
1048
+ /* a cmap 4 is versatile and could be used for any */
1049
+ /* encoding, not only Unicode. However, reality shows */
1050
+ /* that far too many fonts are sloppy and incorrectly */
1051
+ /* set all fields but `start' and `end' for the last */
1052
+ /* segment if it contains only a single character. */
1053
+ /* */
1054
+ /* We thus omit the test here, delaying it to the */
1055
+ /* routines that actually access the cmap. */
1056
+ else if ( n != num_segs - 1 ||
1057
+ !( start == 0xFFFFU && end == 0xFFFFU ) )
1058
+ {
1059
+ if ( p < glyph_ids ||
1060
+ p + ( end - start + 1 ) * 2 > valid->limit )
1061
+ FT_INVALID_DATA;
1062
+ }
1063
+
1064
+ /* check glyph indices within the segment range */
1065
+ if ( valid->level >= FT_VALIDATE_TIGHT )
1066
+ {
1067
+ FT_UInt i, idx;
1068
+
1069
+
1070
+ for ( i = start; i < end; i++ )
1071
+ {
1072
+ idx = FT_NEXT_USHORT( p );
1073
+ if ( idx != 0 )
1074
+ {
1075
+ idx = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU;
1076
+
1077
+ if ( idx >= TT_VALID_GLYPH_COUNT( valid ) )
1078
+ FT_INVALID_GLYPH_ID;
1079
+ }
1080
+ }
1081
+ }
1082
+ }
1083
+ else if ( offset == 0xFFFFU )
1084
+ {
1085
+ /* some fonts (erroneously?) use a range offset of 0xFFFF */
1086
+ /* to mean missing glyph in cmap table */
1087
+ /* */
1088
+ if ( valid->level >= FT_VALIDATE_PARANOID ||
1089
+ n != num_segs - 1 ||
1090
+ !( start == 0xFFFFU && end == 0xFFFFU ) )
1091
+ FT_INVALID_DATA;
1092
+ }
1093
+
1094
+ last_start = start;
1095
+ last_end = end;
1096
+ }
1097
+ }
1098
+
1099
+ return error;
1100
+ }
1101
+
1102
+
1103
+ static FT_UInt
1104
+ tt_cmap4_char_map_linear( TT_CMap cmap,
1105
+ FT_UInt32* pcharcode,
1106
+ FT_Bool next )
1107
+ {
1108
+ TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
1109
+ FT_Byte* limit = face->cmap_table + face->cmap_size;
1110
+
1111
+
1112
+ FT_UInt num_segs2, start, end, offset;
1113
+ FT_Int delta;
1114
+ FT_UInt i, num_segs;
1115
+ FT_UInt32 charcode = *pcharcode + next;
1116
+ FT_UInt gindex = 0;
1117
+ FT_Byte* p;
1118
+ FT_Byte* q;
1119
+
1120
+
1121
+ p = cmap->data + 6;
1122
+ num_segs = TT_PEEK_USHORT( p ) >> 1;
1123
+
1124
+ if ( !num_segs )
1125
+ return 0;
1126
+
1127
+ num_segs2 = num_segs << 1;
1128
+
1129
+ /* linear search */
1130
+ p = cmap->data + 14; /* ends table */
1131
+ q = cmap->data + 16 + num_segs2; /* starts table */
1132
+
1133
+ for ( i = 0; i < num_segs; i++ )
1134
+ {
1135
+ end = TT_NEXT_USHORT( p );
1136
+ start = TT_NEXT_USHORT( q );
1137
+
1138
+ if ( charcode < start )
1139
+ {
1140
+ if ( next )
1141
+ charcode = start;
1142
+ else
1143
+ break;
1144
+ }
1145
+
1146
+ Again:
1147
+ if ( charcode <= end )
1148
+ {
1149
+ FT_Byte* r;
1150
+
1151
+
1152
+ r = q - 2 + num_segs2;
1153
+ delta = TT_PEEK_SHORT( r );
1154
+ r += num_segs2;
1155
+ offset = TT_PEEK_USHORT( r );
1156
+
1157
+ /* some fonts have an incorrect last segment; */
1158
+ /* we have to catch it */
1159
+ if ( i >= num_segs - 1 &&
1160
+ start == 0xFFFFU && end == 0xFFFFU )
1161
+ {
1162
+ if ( offset && r + offset + 2 > limit )
1163
+ {
1164
+ delta = 1;
1165
+ offset = 0;
1166
+ }
1167
+ }
1168
+
1169
+ if ( offset == 0xFFFFU )
1170
+ continue;
1171
+
1172
+ if ( offset )
1173
+ {
1174
+ r += offset + ( charcode - start ) * 2;
1175
+
1176
+ /* if r > limit, the whole segment is invalid */
1177
+ if ( next && r > limit )
1178
+ continue;
1179
+
1180
+ gindex = TT_PEEK_USHORT( r );
1181
+ if ( gindex )
1182
+ {
1183
+ gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU;
1184
+ if ( gindex >= (FT_UInt)face->root.num_glyphs )
1185
+ gindex = 0;
1186
+ }
1187
+ }
1188
+ else
1189
+ {
1190
+ gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU;
1191
+
1192
+ if ( next && gindex >= (FT_UInt)face->root.num_glyphs )
1193
+ {
1194
+ /* we have an invalid glyph index; if there is an overflow, */
1195
+ /* we can adjust `charcode', otherwise the whole segment is */
1196
+ /* invalid */
1197
+ gindex = 0;
1198
+
1199
+ if ( (FT_Int)charcode + delta < 0 &&
1200
+ (FT_Int)end + delta >= 0 )
1201
+ charcode = (FT_UInt)( -delta );
1202
+
1203
+ else if ( (FT_Int)charcode + delta < 0x10000L &&
1204
+ (FT_Int)end + delta >= 0x10000L )
1205
+ charcode = (FT_UInt)( 0x10000L - delta );
1206
+
1207
+ else
1208
+ continue;
1209
+ }
1210
+ }
1211
+
1212
+ if ( next && !gindex )
1213
+ {
1214
+ if ( charcode >= 0xFFFFU )
1215
+ break;
1216
+
1217
+ charcode++;
1218
+ goto Again;
1219
+ }
1220
+
1221
+ break;
1222
+ }
1223
+ }
1224
+
1225
+ if ( next )
1226
+ *pcharcode = charcode;
1227
+
1228
+ return gindex;
1229
+ }
1230
+
1231
+
1232
+ static FT_UInt
1233
+ tt_cmap4_char_map_binary( TT_CMap cmap,
1234
+ FT_UInt32* pcharcode,
1235
+ FT_Bool next )
1236
+ {
1237
+ TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
1238
+ FT_Byte* limit = face->cmap_table + face->cmap_size;
1239
+
1240
+ FT_UInt num_segs2, start, end, offset;
1241
+ FT_Int delta;
1242
+ FT_UInt max, min, mid, num_segs;
1243
+ FT_UInt charcode = (FT_UInt)*pcharcode + next;
1244
+ FT_UInt gindex = 0;
1245
+ FT_Byte* p;
1246
+
1247
+
1248
+ p = cmap->data + 6;
1249
+ num_segs = TT_PEEK_USHORT( p ) >> 1;
1250
+
1251
+ if ( !num_segs )
1252
+ return 0;
1253
+
1254
+ num_segs2 = num_segs << 1;
1255
+
1256
+ min = 0;
1257
+ max = num_segs;
1258
+
1259
+ /* binary search */
1260
+ do
1261
+ {
1262
+ mid = ( min + max ) >> 1;
1263
+ p = cmap->data + 14 + mid * 2;
1264
+ end = TT_PEEK_USHORT( p );
1265
+ p += 2 + num_segs2;
1266
+ start = TT_PEEK_USHORT( p );
1267
+
1268
+ if ( charcode < start )
1269
+ max = mid;
1270
+ else if ( charcode > end )
1271
+ min = mid + 1;
1272
+ else
1273
+ {
1274
+ p += num_segs2;
1275
+ delta = TT_PEEK_SHORT( p );
1276
+ p += num_segs2;
1277
+ offset = TT_PEEK_USHORT( p );
1278
+
1279
+ /* some fonts have an incorrect last segment; */
1280
+ /* we have to catch it */
1281
+ if ( mid >= num_segs - 1 &&
1282
+ start == 0xFFFFU && end == 0xFFFFU )
1283
+ {
1284
+ if ( offset && p + offset + 2 > limit )
1285
+ {
1286
+ delta = 1;
1287
+ offset = 0;
1288
+ }
1289
+ }
1290
+
1291
+ /* search the first segment containing `charcode' */
1292
+ if ( cmap->flags & TT_CMAP_FLAG_OVERLAPPING )
1293
+ {
1294
+ FT_UInt i;
1295
+
1296
+
1297
+ /* call the current segment `max' */
1298
+ max = mid;
1299
+
1300
+ if ( offset == 0xFFFFU )
1301
+ mid = max + 1;
1302
+
1303
+ /* search in segments before the current segment */
1304
+ for ( i = max; i > 0; i-- )
1305
+ {
1306
+ FT_UInt prev_end;
1307
+ FT_Byte* old_p;
1308
+
1309
+
1310
+ old_p = p;
1311
+ p = cmap->data + 14 + ( i - 1 ) * 2;
1312
+ prev_end = TT_PEEK_USHORT( p );
1313
+
1314
+ if ( charcode > prev_end )
1315
+ {
1316
+ p = old_p;
1317
+ break;
1318
+ }
1319
+
1320
+ end = prev_end;
1321
+ p += 2 + num_segs2;
1322
+ start = TT_PEEK_USHORT( p );
1323
+ p += num_segs2;
1324
+ delta = TT_PEEK_SHORT( p );
1325
+ p += num_segs2;
1326
+ offset = TT_PEEK_USHORT( p );
1327
+
1328
+ if ( offset != 0xFFFFU )
1329
+ mid = i - 1;
1330
+ }
1331
+
1332
+ /* no luck */
1333
+ if ( mid == max + 1 )
1334
+ {
1335
+ if ( i != max )
1336
+ {
1337
+ p = cmap->data + 14 + max * 2;
1338
+ end = TT_PEEK_USHORT( p );
1339
+ p += 2 + num_segs2;
1340
+ start = TT_PEEK_USHORT( p );
1341
+ p += num_segs2;
1342
+ delta = TT_PEEK_SHORT( p );
1343
+ p += num_segs2;
1344
+ offset = TT_PEEK_USHORT( p );
1345
+ }
1346
+
1347
+ mid = max;
1348
+
1349
+ /* search in segments after the current segment */
1350
+ for ( i = max + 1; i < num_segs; i++ )
1351
+ {
1352
+ FT_UInt next_end, next_start;
1353
+
1354
+
1355
+ p = cmap->data + 14 + i * 2;
1356
+ next_end = TT_PEEK_USHORT( p );
1357
+ p += 2 + num_segs2;
1358
+ next_start = TT_PEEK_USHORT( p );
1359
+
1360
+ if ( charcode < next_start )
1361
+ break;
1362
+
1363
+ end = next_end;
1364
+ start = next_start;
1365
+ p += num_segs2;
1366
+ delta = TT_PEEK_SHORT( p );
1367
+ p += num_segs2;
1368
+ offset = TT_PEEK_USHORT( p );
1369
+
1370
+ if ( offset != 0xFFFFU )
1371
+ mid = i;
1372
+ }
1373
+ i--;
1374
+
1375
+ /* still no luck */
1376
+ if ( mid == max )
1377
+ {
1378
+ mid = i;
1379
+
1380
+ break;
1381
+ }
1382
+ }
1383
+
1384
+ /* end, start, delta, and offset are for the i'th segment */
1385
+ if ( mid != i )
1386
+ {
1387
+ p = cmap->data + 14 + mid * 2;
1388
+ end = TT_PEEK_USHORT( p );
1389
+ p += 2 + num_segs2;
1390
+ start = TT_PEEK_USHORT( p );
1391
+ p += num_segs2;
1392
+ delta = TT_PEEK_SHORT( p );
1393
+ p += num_segs2;
1394
+ offset = TT_PEEK_USHORT( p );
1395
+ }
1396
+ }
1397
+ else
1398
+ {
1399
+ if ( offset == 0xFFFFU )
1400
+ break;
1401
+ }
1402
+
1403
+ if ( offset )
1404
+ {
1405
+ p += offset + ( charcode - start ) * 2;
1406
+
1407
+ /* if p > limit, the whole segment is invalid */
1408
+ if ( next && p > limit )
1409
+ break;
1410
+
1411
+ gindex = TT_PEEK_USHORT( p );
1412
+ if ( gindex )
1413
+ {
1414
+ gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU;
1415
+ if ( gindex >= (FT_UInt)face->root.num_glyphs )
1416
+ gindex = 0;
1417
+ }
1418
+ }
1419
+ else
1420
+ {
1421
+ gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU;
1422
+
1423
+ if ( next && gindex >= (FT_UInt)face->root.num_glyphs )
1424
+ {
1425
+ /* we have an invalid glyph index; if there is an overflow, */
1426
+ /* we can adjust `charcode', otherwise the whole segment is */
1427
+ /* invalid */
1428
+ gindex = 0;
1429
+
1430
+ if ( (FT_Int)charcode + delta < 0 &&
1431
+ (FT_Int)end + delta >= 0 )
1432
+ charcode = (FT_UInt)( -delta );
1433
+
1434
+ else if ( (FT_Int)charcode + delta < 0x10000L &&
1435
+ (FT_Int)end + delta >= 0x10000L )
1436
+ charcode = (FT_UInt)( 0x10000L - delta );
1437
+ }
1438
+ }
1439
+
1440
+ break;
1441
+ }
1442
+ }
1443
+ while ( min < max );
1444
+
1445
+ if ( next )
1446
+ {
1447
+ TT_CMap4 cmap4 = (TT_CMap4)cmap;
1448
+
1449
+
1450
+ /* if `charcode' is not in any segment, then `mid' is */
1451
+ /* the segment nearest to `charcode' */
1452
+
1453
+ if ( charcode > end && ++mid == num_segs )
1454
+ return 0;
1455
+
1456
+ if ( tt_cmap4_set_range( cmap4, mid ) )
1457
+ {
1458
+ if ( gindex )
1459
+ *pcharcode = charcode;
1460
+ }
1461
+ else
1462
+ {
1463
+ cmap4->cur_charcode = charcode;
1464
+
1465
+ if ( gindex )
1466
+ cmap4->cur_gindex = gindex;
1467
+ else
1468
+ {
1469
+ tt_cmap4_next( cmap4 );
1470
+ gindex = cmap4->cur_gindex;
1471
+ }
1472
+
1473
+ if ( gindex )
1474
+ *pcharcode = cmap4->cur_charcode;
1475
+ }
1476
+ }
1477
+
1478
+ return gindex;
1479
+ }
1480
+
1481
+
1482
+ FT_CALLBACK_DEF( FT_UInt )
1483
+ tt_cmap4_char_index( FT_CMap cmap, /* TT_CMap */
1484
+ FT_UInt32 char_code )
1485
+ {
1486
+ TT_CMap ttcmap = (TT_CMap)cmap;
1487
+
1488
+
1489
+ if ( char_code >= 0x10000UL )
1490
+ return 0;
1491
+
1492
+ if ( ttcmap->flags & TT_CMAP_FLAG_UNSORTED )
1493
+ return tt_cmap4_char_map_linear( ttcmap, &char_code, 0 );
1494
+ else
1495
+ return tt_cmap4_char_map_binary( ttcmap, &char_code, 0 );
1496
+ }
1497
+
1498
+
1499
+ FT_CALLBACK_DEF( FT_UInt )
1500
+ tt_cmap4_char_next( FT_CMap cmap, /* TT_CMap */
1501
+ FT_UInt32 *pchar_code )
1502
+ {
1503
+ TT_CMap ttcmap = (TT_CMap)cmap;
1504
+ FT_UInt gindex;
1505
+
1506
+
1507
+ if ( *pchar_code >= 0xFFFFU )
1508
+ return 0;
1509
+
1510
+ if ( ttcmap->flags & TT_CMAP_FLAG_UNSORTED )
1511
+ gindex = tt_cmap4_char_map_linear( ttcmap, pchar_code, 1 );
1512
+ else
1513
+ {
1514
+ TT_CMap4 cmap4 = (TT_CMap4)cmap;
1515
+
1516
+
1517
+ /* no need to search */
1518
+ if ( *pchar_code == cmap4->cur_charcode )
1519
+ {
1520
+ tt_cmap4_next( cmap4 );
1521
+ gindex = cmap4->cur_gindex;
1522
+ if ( gindex )
1523
+ *pchar_code = cmap4->cur_charcode;
1524
+ }
1525
+ else
1526
+ gindex = tt_cmap4_char_map_binary( ttcmap, pchar_code, 1 );
1527
+ }
1528
+
1529
+ return gindex;
1530
+ }
1531
+
1532
+
1533
+ FT_CALLBACK_DEF( FT_Error )
1534
+ tt_cmap4_get_info( FT_CharMap cmap, /* TT_CMap */
1535
+ TT_CMapInfo *cmap_info )
1536
+ {
1537
+ TT_CMap ttcmap = (TT_CMap)cmap;
1538
+ FT_Byte* p = ttcmap->data + 4;
1539
+
1540
+
1541
+ cmap_info->format = 4;
1542
+ cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p );
1543
+
1544
+ return FT_Err_Ok;
1545
+ }
1546
+
1547
+
1548
+ FT_DEFINE_TT_CMAP(
1549
+ tt_cmap4_class_rec,
1550
+
1551
+ sizeof ( TT_CMap4Rec ),
1552
+
1553
+ (FT_CMap_InitFunc) tt_cmap4_init, /* init */
1554
+ (FT_CMap_DoneFunc) NULL, /* done */
1555
+ (FT_CMap_CharIndexFunc)tt_cmap4_char_index, /* char_index */
1556
+ (FT_CMap_CharNextFunc) tt_cmap4_char_next, /* char_next */
1557
+
1558
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
1559
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
1560
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
1561
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
1562
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
1563
+
1564
+ 4,
1565
+ (TT_CMap_ValidateFunc)tt_cmap4_validate, /* validate */
1566
+ (TT_CMap_Info_GetFunc)tt_cmap4_get_info /* get_cmap_info */
1567
+ )
1568
+
1569
+ #endif /* TT_CONFIG_CMAP_FORMAT_4 */
1570
+
1571
+
1572
+ /*************************************************************************/
1573
+ /*************************************************************************/
1574
+ /***** *****/
1575
+ /***** FORMAT 6 *****/
1576
+ /***** *****/
1577
+ /*************************************************************************/
1578
+ /*************************************************************************/
1579
+
1580
+ /**************************************************************************
1581
+ *
1582
+ * TABLE OVERVIEW
1583
+ * --------------
1584
+ *
1585
+ * NAME OFFSET TYPE DESCRIPTION
1586
+ *
1587
+ * format 0 USHORT must be 6
1588
+ * length 2 USHORT table length in bytes
1589
+ * language 4 USHORT Mac language code
1590
+ *
1591
+ * first 6 USHORT first segment code
1592
+ * count 8 USHORT segment size in chars
1593
+ * glyphIds 10 USHORT[count] glyph IDs
1594
+ *
1595
+ * A very simplified segment mapping.
1596
+ */
1597
+
1598
+ #ifdef TT_CONFIG_CMAP_FORMAT_6
1599
+
1600
+ FT_CALLBACK_DEF( FT_Error )
1601
+ tt_cmap6_validate( FT_Byte* table,
1602
+ FT_Validator valid )
1603
+ {
1604
+ FT_Byte* p;
1605
+ FT_UInt length, count;
1606
+
1607
+
1608
+ if ( table + 10 > valid->limit )
1609
+ FT_INVALID_TOO_SHORT;
1610
+
1611
+ p = table + 2;
1612
+ length = TT_NEXT_USHORT( p );
1613
+
1614
+ p = table + 8; /* skip language and start index */
1615
+ count = TT_NEXT_USHORT( p );
1616
+
1617
+ if ( table + length > valid->limit || length < 10 + count * 2 )
1618
+ FT_INVALID_TOO_SHORT;
1619
+
1620
+ /* check glyph indices */
1621
+ if ( valid->level >= FT_VALIDATE_TIGHT )
1622
+ {
1623
+ FT_UInt gindex;
1624
+
1625
+
1626
+ for ( ; count > 0; count-- )
1627
+ {
1628
+ gindex = TT_NEXT_USHORT( p );
1629
+ if ( gindex >= TT_VALID_GLYPH_COUNT( valid ) )
1630
+ FT_INVALID_GLYPH_ID;
1631
+ }
1632
+ }
1633
+
1634
+ return FT_Err_Ok;
1635
+ }
1636
+
1637
+
1638
+ FT_CALLBACK_DEF( FT_UInt )
1639
+ tt_cmap6_char_index( FT_CMap cmap, /* TT_CMap */
1640
+ FT_UInt32 char_code )
1641
+ {
1642
+ TT_CMap ttcmap = (TT_CMap)cmap;
1643
+ FT_Byte* table = ttcmap->data;
1644
+ FT_UInt result = 0;
1645
+ FT_Byte* p = table + 6;
1646
+ FT_UInt start = TT_NEXT_USHORT( p );
1647
+ FT_UInt count = TT_NEXT_USHORT( p );
1648
+ FT_UInt idx = (FT_UInt)( char_code - start );
1649
+
1650
+
1651
+ if ( idx < count )
1652
+ {
1653
+ p += 2 * idx;
1654
+ result = TT_PEEK_USHORT( p );
1655
+ }
1656
+
1657
+ return result;
1658
+ }
1659
+
1660
+
1661
+ FT_CALLBACK_DEF( FT_UInt )
1662
+ tt_cmap6_char_next( FT_CMap cmap, /* TT_CMap */
1663
+ FT_UInt32 *pchar_code )
1664
+ {
1665
+ TT_CMap ttcmap = (TT_CMap)cmap;
1666
+ FT_Byte* table = ttcmap->data;
1667
+ FT_UInt32 result = 0;
1668
+ FT_UInt32 char_code = *pchar_code + 1;
1669
+ FT_UInt gindex = 0;
1670
+
1671
+ FT_Byte* p = table + 6;
1672
+ FT_UInt start = TT_NEXT_USHORT( p );
1673
+ FT_UInt count = TT_NEXT_USHORT( p );
1674
+ FT_UInt idx;
1675
+
1676
+
1677
+ if ( char_code >= 0x10000UL )
1678
+ return 0;
1679
+
1680
+ if ( char_code < start )
1681
+ char_code = start;
1682
+
1683
+ idx = (FT_UInt)( char_code - start );
1684
+ p += 2 * idx;
1685
+
1686
+ for ( ; idx < count; idx++ )
1687
+ {
1688
+ gindex = TT_NEXT_USHORT( p );
1689
+ if ( gindex != 0 )
1690
+ {
1691
+ result = char_code;
1692
+ break;
1693
+ }
1694
+
1695
+ if ( char_code >= 0xFFFFU )
1696
+ return 0;
1697
+
1698
+ char_code++;
1699
+ }
1700
+
1701
+ *pchar_code = result;
1702
+ return gindex;
1703
+ }
1704
+
1705
+
1706
+ FT_CALLBACK_DEF( FT_Error )
1707
+ tt_cmap6_get_info( FT_CharMap cmap, /* TT_CMap */
1708
+ TT_CMapInfo *cmap_info )
1709
+ {
1710
+ TT_CMap ttcmap = (TT_CMap)cmap;
1711
+ FT_Byte* p = ttcmap->data + 4;
1712
+
1713
+
1714
+ cmap_info->format = 6;
1715
+ cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p );
1716
+
1717
+ return FT_Err_Ok;
1718
+ }
1719
+
1720
+
1721
+ FT_DEFINE_TT_CMAP(
1722
+ tt_cmap6_class_rec,
1723
+
1724
+ sizeof ( TT_CMapRec ),
1725
+
1726
+ (FT_CMap_InitFunc) tt_cmap_init, /* init */
1727
+ (FT_CMap_DoneFunc) NULL, /* done */
1728
+ (FT_CMap_CharIndexFunc)tt_cmap6_char_index, /* char_index */
1729
+ (FT_CMap_CharNextFunc) tt_cmap6_char_next, /* char_next */
1730
+
1731
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
1732
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
1733
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
1734
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
1735
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
1736
+
1737
+ 6,
1738
+ (TT_CMap_ValidateFunc)tt_cmap6_validate, /* validate */
1739
+ (TT_CMap_Info_GetFunc)tt_cmap6_get_info /* get_cmap_info */
1740
+ )
1741
+
1742
+ #endif /* TT_CONFIG_CMAP_FORMAT_6 */
1743
+
1744
+
1745
+ /*************************************************************************/
1746
+ /*************************************************************************/
1747
+ /***** *****/
1748
+ /***** FORMAT 8 *****/
1749
+ /***** *****/
1750
+ /***** It is hard to completely understand what the OpenType spec *****/
1751
+ /***** says about this format, but here is my conclusion. *****/
1752
+ /***** *****/
1753
+ /***** The purpose of this format is to easily map UTF-16 text to *****/
1754
+ /***** glyph indices. Basically, the `char_code' must be in one of *****/
1755
+ /***** the following formats. *****/
1756
+ /***** *****/
1757
+ /***** - A 16-bit value that isn't part of the Unicode Surrogates *****/
1758
+ /***** Area (i.e. U+D800-U+DFFF). *****/
1759
+ /***** *****/
1760
+ /***** - A 32-bit value, made of two surrogate values, i.e.. if *****/
1761
+ /***** `char_code = (char_hi << 16) | char_lo', then both *****/
1762
+ /***** `char_hi' and `char_lo' must be in the Surrogates Area. *****/
1763
+ /***** Area. *****/
1764
+ /***** *****/
1765
+ /***** The `is32' table embedded in the charmap indicates whether a *****/
1766
+ /***** given 16-bit value is in the surrogates area or not. *****/
1767
+ /***** *****/
1768
+ /***** So, for any given `char_code', we can assert the following. *****/
1769
+ /***** *****/
1770
+ /***** If `char_hi == 0' then we must have `is32[char_lo] == 0'. *****/
1771
+ /***** *****/
1772
+ /***** If `char_hi != 0' then we must have both *****/
1773
+ /***** `is32[char_hi] != 0' and `is32[char_lo] != 0'. *****/
1774
+ /***** *****/
1775
+ /*************************************************************************/
1776
+ /*************************************************************************/
1777
+
1778
+ /**************************************************************************
1779
+ *
1780
+ * TABLE OVERVIEW
1781
+ * --------------
1782
+ *
1783
+ * NAME OFFSET TYPE DESCRIPTION
1784
+ *
1785
+ * format 0 USHORT must be 8
1786
+ * reserved 2 USHORT reserved
1787
+ * length 4 ULONG length in bytes
1788
+ * language 8 ULONG Mac language code
1789
+ * is32 12 BYTE[8192] 32-bitness bitmap
1790
+ * count 8204 ULONG number of groups
1791
+ *
1792
+ * This header is followed by `count' groups of the following format:
1793
+ *
1794
+ * start 0 ULONG first charcode
1795
+ * end 4 ULONG last charcode
1796
+ * startId 8 ULONG start glyph ID for the group
1797
+ */
1798
+
1799
+ #ifdef TT_CONFIG_CMAP_FORMAT_8
1800
+
1801
+ FT_CALLBACK_DEF( FT_Error )
1802
+ tt_cmap8_validate( FT_Byte* table,
1803
+ FT_Validator valid )
1804
+ {
1805
+ FT_Byte* p = table + 4;
1806
+ FT_Byte* is32;
1807
+ FT_UInt32 length;
1808
+ FT_UInt32 num_groups;
1809
+
1810
+
1811
+ if ( table + 16 + 8192 > valid->limit )
1812
+ FT_INVALID_TOO_SHORT;
1813
+
1814
+ length = TT_NEXT_ULONG( p );
1815
+ if ( length > (FT_UInt32)( valid->limit - table ) || length < 8192 + 16 )
1816
+ FT_INVALID_TOO_SHORT;
1817
+
1818
+ is32 = table + 12;
1819
+ p = is32 + 8192; /* skip `is32' array */
1820
+ num_groups = TT_NEXT_ULONG( p );
1821
+
1822
+ /* p + num_groups * 12 > valid->limit ? */
1823
+ if ( num_groups > (FT_UInt32)( valid->limit - p ) / 12 )
1824
+ FT_INVALID_TOO_SHORT;
1825
+
1826
+ /* check groups, they must be in increasing order */
1827
+ {
1828
+ FT_UInt32 n, start, end, start_id, count, last = 0;
1829
+
1830
+
1831
+ for ( n = 0; n < num_groups; n++ )
1832
+ {
1833
+ FT_UInt hi, lo;
1834
+
1835
+
1836
+ start = TT_NEXT_ULONG( p );
1837
+ end = TT_NEXT_ULONG( p );
1838
+ start_id = TT_NEXT_ULONG( p );
1839
+
1840
+ if ( start > end )
1841
+ FT_INVALID_DATA;
1842
+
1843
+ if ( n > 0 && start <= last )
1844
+ FT_INVALID_DATA;
1845
+
1846
+ if ( valid->level >= FT_VALIDATE_TIGHT )
1847
+ {
1848
+ FT_UInt32 d = end - start;
1849
+
1850
+
1851
+ /* start_id + end - start >= TT_VALID_GLYPH_COUNT( valid ) ? */
1852
+ if ( d > TT_VALID_GLYPH_COUNT( valid ) ||
1853
+ start_id >= TT_VALID_GLYPH_COUNT( valid ) - d )
1854
+ FT_INVALID_GLYPH_ID;
1855
+
1856
+ count = (FT_UInt32)( end - start + 1 );
1857
+
1858
+ if ( start & ~0xFFFFU )
1859
+ {
1860
+ /* start_hi != 0; check that is32[i] is 1 for each i in */
1861
+ /* the `hi' and `lo' of the range [start..end] */
1862
+ for ( ; count > 0; count--, start++ )
1863
+ {
1864
+ hi = (FT_UInt)( start >> 16 );
1865
+ lo = (FT_UInt)( start & 0xFFFFU );
1866
+
1867
+ if ( (is32[hi >> 3] & ( 0x80 >> ( hi & 7 ) ) ) == 0 )
1868
+ FT_INVALID_DATA;
1869
+
1870
+ if ( (is32[lo >> 3] & ( 0x80 >> ( lo & 7 ) ) ) == 0 )
1871
+ FT_INVALID_DATA;
1872
+ }
1873
+ }
1874
+ else
1875
+ {
1876
+ /* start_hi == 0; check that is32[i] is 0 for each i in */
1877
+ /* the range [start..end] */
1878
+
1879
+ /* end_hi cannot be != 0! */
1880
+ if ( end & ~0xFFFFU )
1881
+ FT_INVALID_DATA;
1882
+
1883
+ for ( ; count > 0; count--, start++ )
1884
+ {
1885
+ lo = (FT_UInt)( start & 0xFFFFU );
1886
+
1887
+ if ( (is32[lo >> 3] & ( 0x80 >> ( lo & 7 ) ) ) != 0 )
1888
+ FT_INVALID_DATA;
1889
+ }
1890
+ }
1891
+ }
1892
+
1893
+ last = end;
1894
+ }
1895
+ }
1896
+
1897
+ return FT_Err_Ok;
1898
+ }
1899
+
1900
+
1901
+ FT_CALLBACK_DEF( FT_UInt )
1902
+ tt_cmap8_char_index( FT_CMap cmap, /* TT_CMap */
1903
+ FT_UInt32 char_code )
1904
+ {
1905
+ TT_CMap ttcmap = (TT_CMap)cmap;
1906
+ FT_Byte* table = ttcmap->data;
1907
+ FT_UInt result = 0;
1908
+ FT_Byte* p = table + 8204;
1909
+ FT_UInt32 num_groups = TT_NEXT_ULONG( p );
1910
+ FT_UInt32 start, end, start_id;
1911
+
1912
+
1913
+ for ( ; num_groups > 0; num_groups-- )
1914
+ {
1915
+ start = TT_NEXT_ULONG( p );
1916
+ end = TT_NEXT_ULONG( p );
1917
+ start_id = TT_NEXT_ULONG( p );
1918
+
1919
+ if ( char_code < start )
1920
+ break;
1921
+
1922
+ if ( char_code <= end )
1923
+ {
1924
+ if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) )
1925
+ return 0;
1926
+
1927
+ result = (FT_UInt)( start_id + ( char_code - start ) );
1928
+ break;
1929
+ }
1930
+ }
1931
+ return result;
1932
+ }
1933
+
1934
+
1935
+ FT_CALLBACK_DEF( FT_UInt )
1936
+ tt_cmap8_char_next( FT_CMap cmap, /* TT_CMap */
1937
+ FT_UInt32 *pchar_code )
1938
+ {
1939
+ TT_CMap ttcmap = (TT_CMap)cmap;
1940
+ FT_Face face = FT_CMAP_FACE( cmap );
1941
+ FT_UInt32 result = 0;
1942
+ FT_UInt32 char_code;
1943
+ FT_UInt gindex = 0;
1944
+ FT_Byte* table = ttcmap->data;
1945
+ FT_Byte* p = table + 8204;
1946
+ FT_UInt32 num_groups = TT_NEXT_ULONG( p );
1947
+ FT_UInt32 start, end, start_id;
1948
+
1949
+
1950
+ if ( *pchar_code >= 0xFFFFFFFFUL )
1951
+ return 0;
1952
+
1953
+ char_code = *pchar_code + 1;
1954
+
1955
+ p = table + 8208;
1956
+
1957
+ for ( ; num_groups > 0; num_groups-- )
1958
+ {
1959
+ start = TT_NEXT_ULONG( p );
1960
+ end = TT_NEXT_ULONG( p );
1961
+ start_id = TT_NEXT_ULONG( p );
1962
+
1963
+ if ( char_code < start )
1964
+ char_code = start;
1965
+
1966
+ Again:
1967
+ if ( char_code <= end )
1968
+ {
1969
+ /* ignore invalid group */
1970
+ if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) )
1971
+ continue;
1972
+
1973
+ gindex = (FT_UInt)( start_id + ( char_code - start ) );
1974
+
1975
+ /* does first element of group point to `.notdef' glyph? */
1976
+ if ( gindex == 0 )
1977
+ {
1978
+ if ( char_code >= 0xFFFFFFFFUL )
1979
+ break;
1980
+
1981
+ char_code++;
1982
+ goto Again;
1983
+ }
1984
+
1985
+ /* if `gindex' is invalid, the remaining values */
1986
+ /* in this group are invalid, too */
1987
+ if ( gindex >= (FT_UInt)face->num_glyphs )
1988
+ {
1989
+ gindex = 0;
1990
+ continue;
1991
+ }
1992
+
1993
+ result = char_code;
1994
+ break;
1995
+ }
1996
+ }
1997
+
1998
+ *pchar_code = result;
1999
+ return gindex;
2000
+ }
2001
+
2002
+
2003
+ FT_CALLBACK_DEF( FT_Error )
2004
+ tt_cmap8_get_info( FT_CharMap cmap, /* TT_CMap */
2005
+ TT_CMapInfo *cmap_info )
2006
+ {
2007
+ TT_CMap ttcmap = (TT_CMap)cmap;
2008
+ FT_Byte* p = ttcmap->data + 8;
2009
+
2010
+
2011
+ cmap_info->format = 8;
2012
+ cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p );
2013
+
2014
+ return FT_Err_Ok;
2015
+ }
2016
+
2017
+
2018
+ FT_DEFINE_TT_CMAP(
2019
+ tt_cmap8_class_rec,
2020
+
2021
+ sizeof ( TT_CMapRec ),
2022
+
2023
+ (FT_CMap_InitFunc) tt_cmap_init, /* init */
2024
+ (FT_CMap_DoneFunc) NULL, /* done */
2025
+ (FT_CMap_CharIndexFunc)tt_cmap8_char_index, /* char_index */
2026
+ (FT_CMap_CharNextFunc) tt_cmap8_char_next, /* char_next */
2027
+
2028
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
2029
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
2030
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
2031
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
2032
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
2033
+
2034
+ 8,
2035
+ (TT_CMap_ValidateFunc)tt_cmap8_validate, /* validate */
2036
+ (TT_CMap_Info_GetFunc)tt_cmap8_get_info /* get_cmap_info */
2037
+ )
2038
+
2039
+ #endif /* TT_CONFIG_CMAP_FORMAT_8 */
2040
+
2041
+
2042
+ /*************************************************************************/
2043
+ /*************************************************************************/
2044
+ /***** *****/
2045
+ /***** FORMAT 10 *****/
2046
+ /***** *****/
2047
+ /*************************************************************************/
2048
+ /*************************************************************************/
2049
+
2050
+ /**************************************************************************
2051
+ *
2052
+ * TABLE OVERVIEW
2053
+ * --------------
2054
+ *
2055
+ * NAME OFFSET TYPE DESCRIPTION
2056
+ *
2057
+ * format 0 USHORT must be 10
2058
+ * reserved 2 USHORT reserved
2059
+ * length 4 ULONG length in bytes
2060
+ * language 8 ULONG Mac language code
2061
+ *
2062
+ * start 12 ULONG first char in range
2063
+ * count 16 ULONG number of chars in range
2064
+ * glyphIds 20 USHORT[count] glyph indices covered
2065
+ */
2066
+
2067
+ #ifdef TT_CONFIG_CMAP_FORMAT_10
2068
+
2069
+ FT_CALLBACK_DEF( FT_Error )
2070
+ tt_cmap10_validate( FT_Byte* table,
2071
+ FT_Validator valid )
2072
+ {
2073
+ FT_Byte* p = table + 4;
2074
+ FT_ULong length, count;
2075
+
2076
+
2077
+ if ( table + 20 > valid->limit )
2078
+ FT_INVALID_TOO_SHORT;
2079
+
2080
+ length = TT_NEXT_ULONG( p );
2081
+ p = table + 16;
2082
+ count = TT_NEXT_ULONG( p );
2083
+
2084
+ if ( length > (FT_ULong)( valid->limit - table ) ||
2085
+ /* length < 20 + count * 2 ? */
2086
+ length < 20 ||
2087
+ ( length - 20 ) / 2 < count )
2088
+ FT_INVALID_TOO_SHORT;
2089
+
2090
+ /* check glyph indices */
2091
+ if ( valid->level >= FT_VALIDATE_TIGHT )
2092
+ {
2093
+ FT_UInt gindex;
2094
+
2095
+
2096
+ for ( ; count > 0; count-- )
2097
+ {
2098
+ gindex = TT_NEXT_USHORT( p );
2099
+ if ( gindex >= TT_VALID_GLYPH_COUNT( valid ) )
2100
+ FT_INVALID_GLYPH_ID;
2101
+ }
2102
+ }
2103
+
2104
+ return FT_Err_Ok;
2105
+ }
2106
+
2107
+
2108
+ FT_CALLBACK_DEF( FT_UInt )
2109
+ tt_cmap10_char_index( FT_CMap cmap, /* TT_CMap */
2110
+ FT_UInt32 char_code )
2111
+ {
2112
+ TT_CMap ttcmap = (TT_CMap)cmap;
2113
+ FT_Byte* table = ttcmap->data;
2114
+ FT_UInt result = 0;
2115
+ FT_Byte* p = table + 12;
2116
+ FT_UInt32 start = TT_NEXT_ULONG( p );
2117
+ FT_UInt32 count = TT_NEXT_ULONG( p );
2118
+ FT_UInt32 idx;
2119
+
2120
+
2121
+ if ( char_code < start )
2122
+ return 0;
2123
+
2124
+ idx = char_code - start;
2125
+
2126
+ if ( idx < count )
2127
+ {
2128
+ p += 2 * idx;
2129
+ result = TT_PEEK_USHORT( p );
2130
+ }
2131
+
2132
+ return result;
2133
+ }
2134
+
2135
+
2136
+ FT_CALLBACK_DEF( FT_UInt )
2137
+ tt_cmap10_char_next( FT_CMap cmap, /* TT_CMap */
2138
+ FT_UInt32 *pchar_code )
2139
+ {
2140
+ TT_CMap ttcmap = (TT_CMap)cmap;
2141
+ FT_Byte* table = ttcmap->data;
2142
+ FT_UInt32 char_code;
2143
+ FT_UInt gindex = 0;
2144
+ FT_Byte* p = table + 12;
2145
+ FT_UInt32 start = TT_NEXT_ULONG( p );
2146
+ FT_UInt32 count = TT_NEXT_ULONG( p );
2147
+ FT_UInt32 idx;
2148
+
2149
+
2150
+ if ( *pchar_code >= 0xFFFFFFFFUL )
2151
+ return 0;
2152
+
2153
+ char_code = *pchar_code + 1;
2154
+
2155
+ if ( char_code < start )
2156
+ char_code = start;
2157
+
2158
+ idx = char_code - start;
2159
+ p += 2 * idx;
2160
+
2161
+ for ( ; idx < count; idx++ )
2162
+ {
2163
+ gindex = TT_NEXT_USHORT( p );
2164
+ if ( gindex != 0 )
2165
+ break;
2166
+
2167
+ if ( char_code >= 0xFFFFFFFFUL )
2168
+ return 0;
2169
+
2170
+ char_code++;
2171
+ }
2172
+
2173
+ *pchar_code = char_code;
2174
+ return gindex;
2175
+ }
2176
+
2177
+
2178
+ FT_CALLBACK_DEF( FT_Error )
2179
+ tt_cmap10_get_info( FT_CharMap cmap, /* TT_CMap */
2180
+ TT_CMapInfo *cmap_info )
2181
+ {
2182
+ TT_CMap ttcmap = (TT_CMap)cmap;
2183
+ FT_Byte* p = ttcmap->data + 8;
2184
+
2185
+
2186
+ cmap_info->format = 10;
2187
+ cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p );
2188
+
2189
+ return FT_Err_Ok;
2190
+ }
2191
+
2192
+
2193
+ FT_DEFINE_TT_CMAP(
2194
+ tt_cmap10_class_rec,
2195
+
2196
+ sizeof ( TT_CMapRec ),
2197
+
2198
+ (FT_CMap_InitFunc) tt_cmap_init, /* init */
2199
+ (FT_CMap_DoneFunc) NULL, /* done */
2200
+ (FT_CMap_CharIndexFunc)tt_cmap10_char_index, /* char_index */
2201
+ (FT_CMap_CharNextFunc) tt_cmap10_char_next, /* char_next */
2202
+
2203
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
2204
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
2205
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
2206
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
2207
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
2208
+
2209
+ 10,
2210
+ (TT_CMap_ValidateFunc)tt_cmap10_validate, /* validate */
2211
+ (TT_CMap_Info_GetFunc)tt_cmap10_get_info /* get_cmap_info */
2212
+ )
2213
+
2214
+ #endif /* TT_CONFIG_CMAP_FORMAT_10 */
2215
+
2216
+
2217
+ /*************************************************************************/
2218
+ /*************************************************************************/
2219
+ /***** *****/
2220
+ /***** FORMAT 12 *****/
2221
+ /***** *****/
2222
+ /*************************************************************************/
2223
+ /*************************************************************************/
2224
+
2225
+ /**************************************************************************
2226
+ *
2227
+ * TABLE OVERVIEW
2228
+ * --------------
2229
+ *
2230
+ * NAME OFFSET TYPE DESCRIPTION
2231
+ *
2232
+ * format 0 USHORT must be 12
2233
+ * reserved 2 USHORT reserved
2234
+ * length 4 ULONG length in bytes
2235
+ * language 8 ULONG Mac language code
2236
+ * count 12 ULONG number of groups
2237
+ * 16
2238
+ *
2239
+ * This header is followed by `count' groups of the following format:
2240
+ *
2241
+ * start 0 ULONG first charcode
2242
+ * end 4 ULONG last charcode
2243
+ * startId 8 ULONG start glyph ID for the group
2244
+ */
2245
+
2246
+ #ifdef TT_CONFIG_CMAP_FORMAT_12
2247
+
2248
+ typedef struct TT_CMap12Rec_
2249
+ {
2250
+ TT_CMapRec cmap;
2251
+ FT_Bool valid;
2252
+ FT_ULong cur_charcode;
2253
+ FT_UInt cur_gindex;
2254
+ FT_ULong cur_group;
2255
+ FT_ULong num_groups;
2256
+
2257
+ } TT_CMap12Rec, *TT_CMap12;
2258
+
2259
+
2260
+ FT_CALLBACK_DEF( FT_Error )
2261
+ tt_cmap12_init( FT_CMap cmap, /* TT_CMap12 */
2262
+ void* table_ )
2263
+ {
2264
+ TT_CMap12 ttcmap = (TT_CMap12)cmap;
2265
+ FT_Byte* table = (FT_Byte*)table_;
2266
+
2267
+
2268
+ ttcmap->cmap.data = table;
2269
+
2270
+ table += 12;
2271
+ ttcmap->num_groups = FT_PEEK_ULONG( table );
2272
+
2273
+ ttcmap->valid = 0;
2274
+
2275
+ return FT_Err_Ok;
2276
+ }
2277
+
2278
+
2279
+ FT_CALLBACK_DEF( FT_Error )
2280
+ tt_cmap12_validate( FT_Byte* table,
2281
+ FT_Validator valid )
2282
+ {
2283
+ FT_Byte* p;
2284
+ FT_ULong length;
2285
+ FT_ULong num_groups;
2286
+
2287
+
2288
+ if ( table + 16 > valid->limit )
2289
+ FT_INVALID_TOO_SHORT;
2290
+
2291
+ p = table + 4;
2292
+ length = TT_NEXT_ULONG( p );
2293
+
2294
+ p = table + 12;
2295
+ num_groups = TT_NEXT_ULONG( p );
2296
+
2297
+ if ( length > (FT_ULong)( valid->limit - table ) ||
2298
+ /* length < 16 + 12 * num_groups ? */
2299
+ length < 16 ||
2300
+ ( length - 16 ) / 12 < num_groups )
2301
+ FT_INVALID_TOO_SHORT;
2302
+
2303
+ /* check groups, they must be in increasing order */
2304
+ {
2305
+ FT_ULong n, start, end, start_id, last = 0;
2306
+
2307
+
2308
+ for ( n = 0; n < num_groups; n++ )
2309
+ {
2310
+ start = TT_NEXT_ULONG( p );
2311
+ end = TT_NEXT_ULONG( p );
2312
+ start_id = TT_NEXT_ULONG( p );
2313
+
2314
+ if ( start > end )
2315
+ FT_INVALID_DATA;
2316
+
2317
+ if ( n > 0 && start <= last )
2318
+ FT_INVALID_DATA;
2319
+
2320
+ if ( valid->level >= FT_VALIDATE_TIGHT )
2321
+ {
2322
+ FT_UInt32 d = end - start;
2323
+
2324
+
2325
+ /* start_id + end - start >= TT_VALID_GLYPH_COUNT( valid ) ? */
2326
+ if ( d > TT_VALID_GLYPH_COUNT( valid ) ||
2327
+ start_id >= TT_VALID_GLYPH_COUNT( valid ) - d )
2328
+ FT_INVALID_GLYPH_ID;
2329
+ }
2330
+
2331
+ last = end;
2332
+ }
2333
+ }
2334
+
2335
+ return FT_Err_Ok;
2336
+ }
2337
+
2338
+
2339
+ /* search the index of the charcode next to cmap->cur_charcode */
2340
+ /* cmap->cur_group should be set up properly by caller */
2341
+ /* */
2342
+ static void
2343
+ tt_cmap12_next( FT_CMap cmap ) /* TT_CMap12 */
2344
+ {
2345
+ TT_CMap12 ttcmap = (TT_CMap12)cmap;
2346
+ FT_Face face = FT_CMAP_FACE( cmap );
2347
+ FT_Byte* p;
2348
+ FT_ULong start, end, start_id, char_code;
2349
+ FT_ULong n;
2350
+ FT_UInt gindex;
2351
+
2352
+
2353
+ char_code = ttcmap->cur_charcode + 1;
2354
+
2355
+ for ( n = ttcmap->cur_group; n < ttcmap->num_groups; n++ )
2356
+ {
2357
+ p = ttcmap->cmap.data + 16 + 12 * n;
2358
+ start = TT_NEXT_ULONG( p );
2359
+ end = TT_NEXT_ULONG( p );
2360
+ start_id = TT_PEEK_ULONG( p );
2361
+
2362
+ if ( char_code < start )
2363
+ char_code = start;
2364
+
2365
+ Again:
2366
+ if ( char_code <= end )
2367
+ {
2368
+ /* ignore invalid group */
2369
+ if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) )
2370
+ continue;
2371
+
2372
+ gindex = (FT_UInt)( start_id + ( char_code - start ) );
2373
+
2374
+ /* does first element of group point to `.notdef' glyph? */
2375
+ if ( gindex == 0 )
2376
+ {
2377
+ if ( char_code >= 0xFFFFFFFFUL )
2378
+ goto Fail;
2379
+
2380
+ char_code++;
2381
+ goto Again;
2382
+ }
2383
+
2384
+ /* if `gindex' is invalid, the remaining values */
2385
+ /* in this group are invalid, too */
2386
+ if ( gindex >= (FT_UInt)face->num_glyphs )
2387
+ continue;
2388
+
2389
+ ttcmap->cur_charcode = char_code;
2390
+ ttcmap->cur_gindex = gindex;
2391
+ ttcmap->cur_group = n;
2392
+
2393
+ return;
2394
+ }
2395
+ }
2396
+
2397
+ Fail:
2398
+ ttcmap->valid = 0;
2399
+ }
2400
+
2401
+
2402
+ static FT_UInt
2403
+ tt_cmap12_char_map_binary( TT_CMap cmap,
2404
+ FT_UInt32* pchar_code,
2405
+ FT_Bool next )
2406
+ {
2407
+ FT_UInt gindex = 0;
2408
+ FT_Byte* p = cmap->data + 12;
2409
+ FT_UInt32 num_groups = TT_PEEK_ULONG( p );
2410
+ FT_UInt32 char_code = *pchar_code + next;
2411
+ FT_UInt32 start, end, start_id;
2412
+ FT_UInt32 max, min, mid;
2413
+
2414
+
2415
+ if ( !num_groups )
2416
+ return 0;
2417
+
2418
+ min = 0;
2419
+ max = num_groups;
2420
+
2421
+ /* binary search */
2422
+ do
2423
+ {
2424
+ mid = ( min + max ) >> 1;
2425
+ p = cmap->data + 16 + 12 * mid;
2426
+
2427
+ start = TT_NEXT_ULONG( p );
2428
+ end = TT_NEXT_ULONG( p );
2429
+
2430
+ if ( char_code < start )
2431
+ max = mid;
2432
+ else if ( char_code > end )
2433
+ min = mid + 1;
2434
+ else
2435
+ {
2436
+ start_id = TT_PEEK_ULONG( p );
2437
+
2438
+ /* reject invalid glyph index */
2439
+ if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) )
2440
+ gindex = 0;
2441
+ else
2442
+ gindex = (FT_UInt)( start_id + ( char_code - start ) );
2443
+ break;
2444
+ }
2445
+ }
2446
+ while ( min < max );
2447
+
2448
+ if ( next )
2449
+ {
2450
+ FT_Face face = FT_CMAP_FACE( cmap );
2451
+ TT_CMap12 cmap12 = (TT_CMap12)cmap;
2452
+
2453
+
2454
+ /* if `char_code' is not in any group, then `mid' is */
2455
+ /* the group nearest to `char_code' */
2456
+
2457
+ if ( char_code > end && ++mid == num_groups )
2458
+ return 0;
2459
+
2460
+ cmap12->valid = 1;
2461
+ cmap12->cur_charcode = char_code;
2462
+ cmap12->cur_group = mid;
2463
+
2464
+ if ( gindex >= (FT_UInt)face->num_glyphs )
2465
+ gindex = 0;
2466
+
2467
+ if ( !gindex )
2468
+ {
2469
+ tt_cmap12_next( FT_CMAP( cmap12 ) );
2470
+
2471
+ if ( cmap12->valid )
2472
+ gindex = cmap12->cur_gindex;
2473
+ }
2474
+ else
2475
+ cmap12->cur_gindex = gindex;
2476
+
2477
+ *pchar_code = cmap12->cur_charcode;
2478
+ }
2479
+
2480
+ return gindex;
2481
+ }
2482
+
2483
+
2484
+ FT_CALLBACK_DEF( FT_UInt )
2485
+ tt_cmap12_char_index( FT_CMap cmap, /* TT_CMap */
2486
+ FT_UInt32 char_code )
2487
+ {
2488
+ return tt_cmap12_char_map_binary( (TT_CMap)cmap, &char_code, 0 );
2489
+ }
2490
+
2491
+
2492
+ FT_CALLBACK_DEF( FT_UInt )
2493
+ tt_cmap12_char_next( FT_CMap cmap, /* TT_CMap12 */
2494
+ FT_UInt32 *pchar_code )
2495
+ {
2496
+ TT_CMap12 cmap12 = (TT_CMap12)cmap;
2497
+ FT_UInt gindex;
2498
+
2499
+
2500
+ if ( *pchar_code >= 0xFFFFFFFFUL )
2501
+ return 0;
2502
+
2503
+ /* no need to search */
2504
+ if ( cmap12->valid && cmap12->cur_charcode == *pchar_code )
2505
+ {
2506
+ tt_cmap12_next( FT_CMAP( cmap12 ) );
2507
+ if ( cmap12->valid )
2508
+ {
2509
+ gindex = cmap12->cur_gindex;
2510
+ *pchar_code = (FT_UInt32)cmap12->cur_charcode;
2511
+ }
2512
+ else
2513
+ gindex = 0;
2514
+ }
2515
+ else
2516
+ gindex = tt_cmap12_char_map_binary( (TT_CMap)cmap, pchar_code, 1 );
2517
+
2518
+ return gindex;
2519
+ }
2520
+
2521
+
2522
+ FT_CALLBACK_DEF( FT_Error )
2523
+ tt_cmap12_get_info( FT_CharMap cmap, /* TT_CMap */
2524
+ TT_CMapInfo *cmap_info )
2525
+ {
2526
+ TT_CMap ttcmap = (TT_CMap)cmap;
2527
+ FT_Byte* p = ttcmap->data + 8;
2528
+
2529
+
2530
+ cmap_info->format = 12;
2531
+ cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p );
2532
+
2533
+ return FT_Err_Ok;
2534
+ }
2535
+
2536
+
2537
+ FT_DEFINE_TT_CMAP(
2538
+ tt_cmap12_class_rec,
2539
+
2540
+ sizeof ( TT_CMap12Rec ),
2541
+
2542
+ (FT_CMap_InitFunc) tt_cmap12_init, /* init */
2543
+ (FT_CMap_DoneFunc) NULL, /* done */
2544
+ (FT_CMap_CharIndexFunc)tt_cmap12_char_index, /* char_index */
2545
+ (FT_CMap_CharNextFunc) tt_cmap12_char_next, /* char_next */
2546
+
2547
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
2548
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
2549
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
2550
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
2551
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
2552
+
2553
+ 12,
2554
+ (TT_CMap_ValidateFunc)tt_cmap12_validate, /* validate */
2555
+ (TT_CMap_Info_GetFunc)tt_cmap12_get_info /* get_cmap_info */
2556
+ )
2557
+
2558
+ #endif /* TT_CONFIG_CMAP_FORMAT_12 */
2559
+
2560
+
2561
+ /*************************************************************************/
2562
+ /*************************************************************************/
2563
+ /***** *****/
2564
+ /***** FORMAT 13 *****/
2565
+ /***** *****/
2566
+ /*************************************************************************/
2567
+ /*************************************************************************/
2568
+
2569
+ /**************************************************************************
2570
+ *
2571
+ * TABLE OVERVIEW
2572
+ * --------------
2573
+ *
2574
+ * NAME OFFSET TYPE DESCRIPTION
2575
+ *
2576
+ * format 0 USHORT must be 13
2577
+ * reserved 2 USHORT reserved
2578
+ * length 4 ULONG length in bytes
2579
+ * language 8 ULONG Mac language code
2580
+ * count 12 ULONG number of groups
2581
+ * 16
2582
+ *
2583
+ * This header is followed by `count' groups of the following format:
2584
+ *
2585
+ * start 0 ULONG first charcode
2586
+ * end 4 ULONG last charcode
2587
+ * glyphId 8 ULONG glyph ID for the whole group
2588
+ */
2589
+
2590
+ #ifdef TT_CONFIG_CMAP_FORMAT_13
2591
+
2592
+ typedef struct TT_CMap13Rec_
2593
+ {
2594
+ TT_CMapRec cmap;
2595
+ FT_Bool valid;
2596
+ FT_ULong cur_charcode;
2597
+ FT_UInt cur_gindex;
2598
+ FT_ULong cur_group;
2599
+ FT_ULong num_groups;
2600
+
2601
+ } TT_CMap13Rec, *TT_CMap13;
2602
+
2603
+
2604
+ FT_CALLBACK_DEF( FT_Error )
2605
+ tt_cmap13_init( FT_CMap cmap, /* TT_CMap13 */
2606
+ void* table_ )
2607
+ {
2608
+ TT_CMap13 ttcmap = (TT_CMap13)cmap;
2609
+ FT_Byte* table = (FT_Byte*)table_;
2610
+
2611
+
2612
+ ttcmap->cmap.data = table;
2613
+
2614
+ table += 12;
2615
+ ttcmap->num_groups = FT_PEEK_ULONG( table );
2616
+
2617
+ ttcmap->valid = 0;
2618
+
2619
+ return FT_Err_Ok;
2620
+ }
2621
+
2622
+
2623
+ FT_CALLBACK_DEF( FT_Error )
2624
+ tt_cmap13_validate( FT_Byte* table,
2625
+ FT_Validator valid )
2626
+ {
2627
+ FT_Byte* p;
2628
+ FT_ULong length;
2629
+ FT_ULong num_groups;
2630
+
2631
+
2632
+ if ( table + 16 > valid->limit )
2633
+ FT_INVALID_TOO_SHORT;
2634
+
2635
+ p = table + 4;
2636
+ length = TT_NEXT_ULONG( p );
2637
+
2638
+ p = table + 12;
2639
+ num_groups = TT_NEXT_ULONG( p );
2640
+
2641
+ if ( length > (FT_ULong)( valid->limit - table ) ||
2642
+ /* length < 16 + 12 * num_groups ? */
2643
+ length < 16 ||
2644
+ ( length - 16 ) / 12 < num_groups )
2645
+ FT_INVALID_TOO_SHORT;
2646
+
2647
+ /* check groups, they must be in increasing order */
2648
+ {
2649
+ FT_ULong n, start, end, glyph_id, last = 0;
2650
+
2651
+
2652
+ for ( n = 0; n < num_groups; n++ )
2653
+ {
2654
+ start = TT_NEXT_ULONG( p );
2655
+ end = TT_NEXT_ULONG( p );
2656
+ glyph_id = TT_NEXT_ULONG( p );
2657
+
2658
+ if ( start > end )
2659
+ FT_INVALID_DATA;
2660
+
2661
+ if ( n > 0 && start <= last )
2662
+ FT_INVALID_DATA;
2663
+
2664
+ if ( valid->level >= FT_VALIDATE_TIGHT )
2665
+ {
2666
+ if ( glyph_id >= TT_VALID_GLYPH_COUNT( valid ) )
2667
+ FT_INVALID_GLYPH_ID;
2668
+ }
2669
+
2670
+ last = end;
2671
+ }
2672
+ }
2673
+
2674
+ return FT_Err_Ok;
2675
+ }
2676
+
2677
+
2678
+ /* search the index of the charcode next to cmap->cur_charcode */
2679
+ /* cmap->cur_group should be set up properly by caller */
2680
+ /* */
2681
+ static void
2682
+ tt_cmap13_next( FT_CMap cmap ) /* TT_CMap13 */
2683
+ {
2684
+ TT_CMap13 ttcmap = (TT_CMap13)cmap;
2685
+ FT_Face face = FT_CMAP_FACE( cmap );
2686
+ FT_Byte* p;
2687
+ FT_ULong start, end, glyph_id, char_code;
2688
+ FT_ULong n;
2689
+ FT_UInt gindex;
2690
+
2691
+
2692
+ char_code = ttcmap->cur_charcode + 1;
2693
+
2694
+ for ( n = ttcmap->cur_group; n < ttcmap->num_groups; n++ )
2695
+ {
2696
+ p = ttcmap->cmap.data + 16 + 12 * n;
2697
+ start = TT_NEXT_ULONG( p );
2698
+ end = TT_NEXT_ULONG( p );
2699
+ glyph_id = TT_PEEK_ULONG( p );
2700
+
2701
+ if ( char_code < start )
2702
+ char_code = start;
2703
+
2704
+ if ( char_code <= end )
2705
+ {
2706
+ gindex = (FT_UInt)glyph_id;
2707
+
2708
+ if ( gindex && gindex < (FT_UInt)face->num_glyphs )
2709
+ {
2710
+ ttcmap->cur_charcode = char_code;
2711
+ ttcmap->cur_gindex = gindex;
2712
+ ttcmap->cur_group = n;
2713
+
2714
+ return;
2715
+ }
2716
+ }
2717
+ }
2718
+
2719
+ ttcmap->valid = 0;
2720
+ }
2721
+
2722
+
2723
+ static FT_UInt
2724
+ tt_cmap13_char_map_binary( TT_CMap cmap,
2725
+ FT_UInt32* pchar_code,
2726
+ FT_Bool next )
2727
+ {
2728
+ FT_UInt gindex = 0;
2729
+ FT_Byte* p = cmap->data + 12;
2730
+ FT_UInt32 num_groups = TT_PEEK_ULONG( p );
2731
+ FT_UInt32 char_code = *pchar_code + next;
2732
+ FT_UInt32 start, end;
2733
+ FT_UInt32 max, min, mid;
2734
+
2735
+
2736
+ if ( !num_groups )
2737
+ return 0;
2738
+
2739
+ min = 0;
2740
+ max = num_groups;
2741
+
2742
+ /* binary search */
2743
+ do
2744
+ {
2745
+ mid = ( min + max ) >> 1;
2746
+ p = cmap->data + 16 + 12 * mid;
2747
+
2748
+ start = TT_NEXT_ULONG( p );
2749
+ end = TT_NEXT_ULONG( p );
2750
+
2751
+ if ( char_code < start )
2752
+ max = mid;
2753
+ else if ( char_code > end )
2754
+ min = mid + 1;
2755
+ else
2756
+ {
2757
+ gindex = (FT_UInt)TT_PEEK_ULONG( p );
2758
+
2759
+ break;
2760
+ }
2761
+ }
2762
+ while ( min < max );
2763
+
2764
+ if ( next )
2765
+ {
2766
+ FT_Face face = cmap->cmap.charmap.face;
2767
+ TT_CMap13 cmap13 = (TT_CMap13)cmap;
2768
+
2769
+
2770
+ /* if `char_code' is not in any group, then `mid' is */
2771
+ /* the group nearest to `char_code' */
2772
+
2773
+ if ( char_code > end && ++mid == num_groups )
2774
+ return 0;
2775
+
2776
+ cmap13->valid = 1;
2777
+ cmap13->cur_charcode = char_code;
2778
+ cmap13->cur_group = mid;
2779
+
2780
+ if ( gindex >= (FT_UInt)face->num_glyphs )
2781
+ gindex = 0;
2782
+
2783
+ if ( !gindex )
2784
+ {
2785
+ tt_cmap13_next( FT_CMAP( cmap13 ) );
2786
+
2787
+ if ( cmap13->valid )
2788
+ gindex = cmap13->cur_gindex;
2789
+ }
2790
+ else
2791
+ cmap13->cur_gindex = gindex;
2792
+
2793
+ *pchar_code = cmap13->cur_charcode;
2794
+ }
2795
+
2796
+ return gindex;
2797
+ }
2798
+
2799
+
2800
+ FT_CALLBACK_DEF( FT_UInt )
2801
+ tt_cmap13_char_index( FT_CMap cmap, /* TT_CMap */
2802
+ FT_UInt32 char_code )
2803
+ {
2804
+ return tt_cmap13_char_map_binary( (TT_CMap)cmap, &char_code, 0 );
2805
+ }
2806
+
2807
+
2808
+ FT_CALLBACK_DEF( FT_UInt )
2809
+ tt_cmap13_char_next( FT_CMap cmap, /* TT_CMap13 */
2810
+ FT_UInt32 *pchar_code )
2811
+ {
2812
+ TT_CMap13 cmap13 = (TT_CMap13)cmap;
2813
+ FT_UInt gindex;
2814
+
2815
+
2816
+ if ( *pchar_code >= 0xFFFFFFFFUL )
2817
+ return 0;
2818
+
2819
+ /* no need to search */
2820
+ if ( cmap13->valid && cmap13->cur_charcode == *pchar_code )
2821
+ {
2822
+ tt_cmap13_next( FT_CMAP( cmap13 ) );
2823
+ if ( cmap13->valid )
2824
+ {
2825
+ gindex = cmap13->cur_gindex;
2826
+ *pchar_code = cmap13->cur_charcode;
2827
+ }
2828
+ else
2829
+ gindex = 0;
2830
+ }
2831
+ else
2832
+ gindex = tt_cmap13_char_map_binary( (TT_CMap)cmap, pchar_code, 1 );
2833
+
2834
+ return gindex;
2835
+ }
2836
+
2837
+
2838
+ FT_CALLBACK_DEF( FT_Error )
2839
+ tt_cmap13_get_info( FT_CharMap cmap, /* TT_CMap */
2840
+ TT_CMapInfo *cmap_info )
2841
+ {
2842
+ TT_CMap ttcmap = (TT_CMap)cmap;
2843
+ FT_Byte* p = ttcmap->data + 8;
2844
+
2845
+
2846
+ cmap_info->format = 13;
2847
+ cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p );
2848
+
2849
+ return FT_Err_Ok;
2850
+ }
2851
+
2852
+
2853
+ FT_DEFINE_TT_CMAP(
2854
+ tt_cmap13_class_rec,
2855
+
2856
+ sizeof ( TT_CMap13Rec ),
2857
+
2858
+ (FT_CMap_InitFunc) tt_cmap13_init, /* init */
2859
+ (FT_CMap_DoneFunc) NULL, /* done */
2860
+ (FT_CMap_CharIndexFunc)tt_cmap13_char_index, /* char_index */
2861
+ (FT_CMap_CharNextFunc) tt_cmap13_char_next, /* char_next */
2862
+
2863
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
2864
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
2865
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
2866
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
2867
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
2868
+
2869
+ 13,
2870
+ (TT_CMap_ValidateFunc)tt_cmap13_validate, /* validate */
2871
+ (TT_CMap_Info_GetFunc)tt_cmap13_get_info /* get_cmap_info */
2872
+ )
2873
+
2874
+ #endif /* TT_CONFIG_CMAP_FORMAT_13 */
2875
+
2876
+
2877
+ /*************************************************************************/
2878
+ /*************************************************************************/
2879
+ /***** *****/
2880
+ /***** FORMAT 14 *****/
2881
+ /***** *****/
2882
+ /*************************************************************************/
2883
+ /*************************************************************************/
2884
+
2885
+ /**************************************************************************
2886
+ *
2887
+ * TABLE OVERVIEW
2888
+ * --------------
2889
+ *
2890
+ * NAME OFFSET TYPE DESCRIPTION
2891
+ *
2892
+ * format 0 USHORT must be 14
2893
+ * length 2 ULONG table length in bytes
2894
+ * numSelector 6 ULONG number of variation sel. records
2895
+ *
2896
+ * Followed by numSelector records, each of which looks like
2897
+ *
2898
+ * varSelector 0 UINT24 Unicode codepoint of sel.
2899
+ * defaultOff 3 ULONG offset to a default UVS table
2900
+ * describing any variants to be found in
2901
+ * the normal Unicode subtable.
2902
+ * nonDefOff 7 ULONG offset to a non-default UVS table
2903
+ * describing any variants not in the
2904
+ * standard cmap, with GIDs here
2905
+ * (either offset may be 0 NULL)
2906
+ *
2907
+ * Selectors are sorted by code point.
2908
+ *
2909
+ * A default Unicode Variation Selector (UVS) subtable is just a list of
2910
+ * ranges of code points which are to be found in the standard cmap. No
2911
+ * glyph IDs (GIDs) here.
2912
+ *
2913
+ * numRanges 0 ULONG number of ranges following
2914
+ *
2915
+ * A range looks like
2916
+ *
2917
+ * uniStart 0 UINT24 code point of the first character in
2918
+ * this range
2919
+ * additionalCnt 3 UBYTE count of additional characters in this
2920
+ * range (zero means a range of a single
2921
+ * character)
2922
+ *
2923
+ * Ranges are sorted by `uniStart'.
2924
+ *
2925
+ * A non-default Unicode Variation Selector (UVS) subtable is a list of
2926
+ * mappings from codepoint to GID.
2927
+ *
2928
+ * numMappings 0 ULONG number of mappings
2929
+ *
2930
+ * A range looks like
2931
+ *
2932
+ * uniStart 0 UINT24 code point of the first character in
2933
+ * this range
2934
+ * GID 3 USHORT and its GID
2935
+ *
2936
+ * Ranges are sorted by `uniStart'.
2937
+ */
2938
+
2939
+ #ifdef TT_CONFIG_CMAP_FORMAT_14
2940
+
2941
+ typedef struct TT_CMap14Rec_
2942
+ {
2943
+ TT_CMapRec cmap;
2944
+ FT_ULong num_selectors;
2945
+
2946
+ /* This array is used to store the results of various
2947
+ * cmap 14 query functions. The data is overwritten
2948
+ * on each call to these functions.
2949
+ */
2950
+ FT_UInt32 max_results;
2951
+ FT_UInt32* results;
2952
+ FT_Memory memory;
2953
+
2954
+ } TT_CMap14Rec, *TT_CMap14;
2955
+
2956
+
2957
+ FT_CALLBACK_DEF( void )
2958
+ tt_cmap14_done( FT_CMap cmap ) /* TT_CMap14 */
2959
+ {
2960
+ TT_CMap14 ttcmap = (TT_CMap14)cmap;
2961
+ FT_Memory memory = ttcmap->memory;
2962
+
2963
+
2964
+ ttcmap->max_results = 0;
2965
+ if ( memory && ttcmap->results )
2966
+ FT_FREE( ttcmap->results );
2967
+ }
2968
+
2969
+
2970
+ static FT_Error
2971
+ tt_cmap14_ensure( TT_CMap14 cmap,
2972
+ FT_UInt32 num_results,
2973
+ FT_Memory memory )
2974
+ {
2975
+ FT_UInt32 old_max = cmap->max_results;
2976
+ FT_Error error = FT_Err_Ok;
2977
+
2978
+
2979
+ if ( num_results > cmap->max_results )
2980
+ {
2981
+ cmap->memory = memory;
2982
+
2983
+ if ( FT_QRENEW_ARRAY( cmap->results, old_max, num_results ) )
2984
+ return error;
2985
+
2986
+ cmap->max_results = num_results;
2987
+ }
2988
+
2989
+ return error;
2990
+ }
2991
+
2992
+
2993
+ FT_CALLBACK_DEF( FT_Error )
2994
+ tt_cmap14_init( FT_CMap cmap, /* TT_CMap14 */
2995
+ void* table_ )
2996
+ {
2997
+ TT_CMap14 ttcmap = (TT_CMap14)cmap;
2998
+ FT_Byte* table = (FT_Byte*)table_;
2999
+
3000
+
3001
+ ttcmap->cmap.data = table;
3002
+
3003
+ table += 6;
3004
+ ttcmap->num_selectors = FT_PEEK_ULONG( table );
3005
+ ttcmap->max_results = 0;
3006
+ ttcmap->results = NULL;
3007
+
3008
+ return FT_Err_Ok;
3009
+ }
3010
+
3011
+
3012
+ FT_CALLBACK_DEF( FT_Error )
3013
+ tt_cmap14_validate( FT_Byte* table,
3014
+ FT_Validator valid )
3015
+ {
3016
+ FT_Byte* p;
3017
+ FT_ULong length;
3018
+ FT_ULong num_selectors;
3019
+
3020
+
3021
+ if ( table + 2 + 4 + 4 > valid->limit )
3022
+ FT_INVALID_TOO_SHORT;
3023
+
3024
+ p = table + 2;
3025
+ length = TT_NEXT_ULONG( p );
3026
+ num_selectors = TT_NEXT_ULONG( p );
3027
+
3028
+ if ( length > (FT_ULong)( valid->limit - table ) ||
3029
+ /* length < 10 + 11 * num_selectors ? */
3030
+ length < 10 ||
3031
+ ( length - 10 ) / 11 < num_selectors )
3032
+ FT_INVALID_TOO_SHORT;
3033
+
3034
+ /* check selectors, they must be in increasing order */
3035
+ {
3036
+ /* we start lastVarSel at 1 because a variant selector value of 0
3037
+ * isn't valid.
3038
+ */
3039
+ FT_ULong n, lastVarSel = 1;
3040
+
3041
+
3042
+ for ( n = 0; n < num_selectors; n++ )
3043
+ {
3044
+ FT_ULong varSel = TT_NEXT_UINT24( p );
3045
+ FT_ULong defOff = TT_NEXT_ULONG( p );
3046
+ FT_ULong nondefOff = TT_NEXT_ULONG( p );
3047
+
3048
+
3049
+ if ( defOff >= length || nondefOff >= length )
3050
+ FT_INVALID_TOO_SHORT;
3051
+
3052
+ if ( varSel < lastVarSel )
3053
+ FT_INVALID_DATA;
3054
+
3055
+ lastVarSel = varSel + 1;
3056
+
3057
+ /* check the default table (these glyphs should be reached */
3058
+ /* through the normal Unicode cmap, no GIDs, just check order) */
3059
+ if ( defOff != 0 )
3060
+ {
3061
+ FT_Byte* defp = table + defOff;
3062
+ FT_ULong numRanges;
3063
+ FT_ULong i;
3064
+ FT_ULong lastBase = 0;
3065
+
3066
+
3067
+ if ( defp + 4 > valid->limit )
3068
+ FT_INVALID_TOO_SHORT;
3069
+
3070
+ numRanges = TT_NEXT_ULONG( defp );
3071
+
3072
+ /* defp + numRanges * 4 > valid->limit ? */
3073
+ if ( numRanges > (FT_ULong)( valid->limit - defp ) / 4 )
3074
+ FT_INVALID_TOO_SHORT;
3075
+
3076
+ for ( i = 0; i < numRanges; i++ )
3077
+ {
3078
+ FT_ULong base = TT_NEXT_UINT24( defp );
3079
+ FT_ULong cnt = FT_NEXT_BYTE( defp );
3080
+
3081
+
3082
+ if ( base + cnt >= 0x110000UL ) /* end of Unicode */
3083
+ FT_INVALID_DATA;
3084
+
3085
+ if ( base < lastBase )
3086
+ FT_INVALID_DATA;
3087
+
3088
+ lastBase = base + cnt + 1U;
3089
+ }
3090
+ }
3091
+
3092
+ /* and the non-default table (these glyphs are specified here) */
3093
+ if ( nondefOff != 0 )
3094
+ {
3095
+ FT_Byte* ndp = table + nondefOff;
3096
+ FT_ULong numMappings;
3097
+ FT_ULong i, lastUni = 0;
3098
+
3099
+
3100
+ if ( ndp + 4 > valid->limit )
3101
+ FT_INVALID_TOO_SHORT;
3102
+
3103
+ numMappings = TT_NEXT_ULONG( ndp );
3104
+
3105
+ /* numMappings * 5 > (FT_ULong)( valid->limit - ndp ) ? */
3106
+ if ( numMappings > ( (FT_ULong)( valid->limit - ndp ) ) / 5 )
3107
+ FT_INVALID_TOO_SHORT;
3108
+
3109
+ for ( i = 0; i < numMappings; i++ )
3110
+ {
3111
+ FT_ULong uni = TT_NEXT_UINT24( ndp );
3112
+ FT_ULong gid = TT_NEXT_USHORT( ndp );
3113
+
3114
+
3115
+ if ( uni >= 0x110000UL ) /* end of Unicode */
3116
+ FT_INVALID_DATA;
3117
+
3118
+ if ( uni < lastUni )
3119
+ FT_INVALID_DATA;
3120
+
3121
+ lastUni = uni + 1U;
3122
+
3123
+ if ( valid->level >= FT_VALIDATE_TIGHT &&
3124
+ gid >= TT_VALID_GLYPH_COUNT( valid ) )
3125
+ FT_INVALID_GLYPH_ID;
3126
+ }
3127
+ }
3128
+ }
3129
+ }
3130
+
3131
+ return FT_Err_Ok;
3132
+ }
3133
+
3134
+
3135
+ FT_CALLBACK_DEF( FT_UInt )
3136
+ tt_cmap14_char_index( FT_CMap cmap,
3137
+ FT_UInt32 char_code )
3138
+ {
3139
+ FT_UNUSED( cmap );
3140
+ FT_UNUSED( char_code );
3141
+
3142
+ /* This can't happen */
3143
+ return 0;
3144
+ }
3145
+
3146
+
3147
+ FT_CALLBACK_DEF( FT_UInt )
3148
+ tt_cmap14_char_next( FT_CMap cmap,
3149
+ FT_UInt32 *pchar_code )
3150
+ {
3151
+ FT_UNUSED( cmap );
3152
+
3153
+ /* This can't happen */
3154
+ *pchar_code = 0;
3155
+ return 0;
3156
+ }
3157
+
3158
+
3159
+ FT_CALLBACK_DEF( FT_Error )
3160
+ tt_cmap14_get_info( FT_CharMap cmap,
3161
+ TT_CMapInfo *cmap_info )
3162
+ {
3163
+ FT_UNUSED( cmap );
3164
+
3165
+ cmap_info->format = 14;
3166
+ /* subtable 14 does not define a language field */
3167
+ cmap_info->language = 0xFFFFFFFFUL;
3168
+
3169
+ return FT_Err_Ok;
3170
+ }
3171
+
3172
+
3173
+ static FT_UInt
3174
+ tt_cmap14_char_map_def_binary( FT_Byte *base,
3175
+ FT_UInt32 char_code )
3176
+ {
3177
+ FT_UInt32 numRanges = TT_PEEK_ULONG( base );
3178
+ FT_UInt32 max, min;
3179
+
3180
+
3181
+ min = 0;
3182
+ max = numRanges;
3183
+
3184
+ base += 4;
3185
+
3186
+ /* binary search */
3187
+ while ( min < max )
3188
+ {
3189
+ FT_UInt32 mid = ( min + max ) >> 1;
3190
+ FT_Byte* p = base + 4 * mid;
3191
+ FT_ULong start = TT_NEXT_UINT24( p );
3192
+ FT_UInt cnt = FT_NEXT_BYTE( p );
3193
+
3194
+
3195
+ if ( char_code < start )
3196
+ max = mid;
3197
+ else if ( char_code > start + cnt )
3198
+ min = mid + 1;
3199
+ else
3200
+ return TRUE;
3201
+ }
3202
+
3203
+ return FALSE;
3204
+ }
3205
+
3206
+
3207
+ static FT_UInt
3208
+ tt_cmap14_char_map_nondef_binary( FT_Byte *base,
3209
+ FT_UInt32 char_code )
3210
+ {
3211
+ FT_UInt32 numMappings = TT_PEEK_ULONG( base );
3212
+ FT_UInt32 max, min;
3213
+
3214
+
3215
+ min = 0;
3216
+ max = numMappings;
3217
+
3218
+ base += 4;
3219
+
3220
+ /* binary search */
3221
+ while ( min < max )
3222
+ {
3223
+ FT_UInt32 mid = ( min + max ) >> 1;
3224
+ FT_Byte* p = base + 5 * mid;
3225
+ FT_UInt32 uni = (FT_UInt32)TT_NEXT_UINT24( p );
3226
+
3227
+
3228
+ if ( char_code < uni )
3229
+ max = mid;
3230
+ else if ( char_code > uni )
3231
+ min = mid + 1;
3232
+ else
3233
+ return TT_PEEK_USHORT( p );
3234
+ }
3235
+
3236
+ return 0;
3237
+ }
3238
+
3239
+
3240
+ static FT_Byte*
3241
+ tt_cmap14_find_variant( FT_Byte *base,
3242
+ FT_UInt32 variantCode )
3243
+ {
3244
+ FT_UInt32 numVar = TT_PEEK_ULONG( base );
3245
+ FT_UInt32 max, min;
3246
+
3247
+
3248
+ min = 0;
3249
+ max = numVar;
3250
+
3251
+ base += 4;
3252
+
3253
+ /* binary search */
3254
+ while ( min < max )
3255
+ {
3256
+ FT_UInt32 mid = ( min + max ) >> 1;
3257
+ FT_Byte* p = base + 11 * mid;
3258
+ FT_ULong varSel = TT_NEXT_UINT24( p );
3259
+
3260
+
3261
+ if ( variantCode < varSel )
3262
+ max = mid;
3263
+ else if ( variantCode > varSel )
3264
+ min = mid + 1;
3265
+ else
3266
+ return p;
3267
+ }
3268
+
3269
+ return NULL;
3270
+ }
3271
+
3272
+
3273
+ FT_CALLBACK_DEF( FT_UInt )
3274
+ tt_cmap14_char_var_index( FT_CMap cmap, /* TT_CMap */
3275
+ FT_CMap ucmap, /* TT_CMap */
3276
+ FT_UInt32 charcode,
3277
+ FT_UInt32 variantSelector )
3278
+ {
3279
+ TT_CMap ttcmap = (TT_CMap)cmap;
3280
+ TT_CMap ttucmap = (TT_CMap)ucmap;
3281
+
3282
+ FT_Byte* p = tt_cmap14_find_variant( ttcmap->data + 6,
3283
+ variantSelector );
3284
+ FT_ULong defOff;
3285
+ FT_ULong nondefOff;
3286
+
3287
+
3288
+ if ( !p )
3289
+ return 0;
3290
+
3291
+ defOff = TT_NEXT_ULONG( p );
3292
+ nondefOff = TT_PEEK_ULONG( p );
3293
+
3294
+ if ( defOff != 0 &&
3295
+ tt_cmap14_char_map_def_binary( ttcmap->data + defOff, charcode ) )
3296
+ {
3297
+ /* This is the default variant of this charcode. GID not stored */
3298
+ /* here; stored in the normal Unicode charmap instead. */
3299
+ return ttucmap->cmap.clazz->char_index( &ttucmap->cmap, charcode );
3300
+ }
3301
+
3302
+ if ( nondefOff != 0 )
3303
+ return tt_cmap14_char_map_nondef_binary( ttcmap->data + nondefOff,
3304
+ charcode );
3305
+
3306
+ return 0;
3307
+ }
3308
+
3309
+
3310
+ FT_CALLBACK_DEF( FT_Int )
3311
+ tt_cmap14_char_var_isdefault( FT_CMap cmap, /* TT_CMap */
3312
+ FT_UInt32 charcode,
3313
+ FT_UInt32 variantSelector )
3314
+ {
3315
+ TT_CMap ttcmap = (TT_CMap)cmap;
3316
+ FT_Byte* p = tt_cmap14_find_variant( ttcmap->data + 6,
3317
+ variantSelector );
3318
+ FT_ULong defOff;
3319
+ FT_ULong nondefOff;
3320
+
3321
+
3322
+ if ( !p )
3323
+ return -1;
3324
+
3325
+ defOff = TT_NEXT_ULONG( p );
3326
+ nondefOff = TT_NEXT_ULONG( p );
3327
+
3328
+ if ( defOff != 0 &&
3329
+ tt_cmap14_char_map_def_binary( ttcmap->data + defOff, charcode ) )
3330
+ return 1;
3331
+
3332
+ if ( nondefOff != 0 &&
3333
+ tt_cmap14_char_map_nondef_binary( ttcmap->data + nondefOff,
3334
+ charcode ) != 0 )
3335
+ return 0;
3336
+
3337
+ return -1;
3338
+ }
3339
+
3340
+
3341
+ FT_CALLBACK_DEF( FT_UInt32* )
3342
+ tt_cmap14_variants( FT_CMap cmap, /* TT_CMap14 */
3343
+ FT_Memory memory )
3344
+ {
3345
+ TT_CMap ttcmap = (TT_CMap)cmap;
3346
+ TT_CMap14 cmap14 = (TT_CMap14)cmap;
3347
+ FT_UInt32 count = cmap14->num_selectors;
3348
+ FT_Byte* p = ttcmap->data + 10;
3349
+ FT_UInt32* result;
3350
+ FT_UInt32 i;
3351
+
3352
+
3353
+ if ( tt_cmap14_ensure( cmap14, ( count + 1 ), memory ) )
3354
+ return NULL;
3355
+
3356
+ result = cmap14->results;
3357
+ for ( i = 0; i < count; i++ )
3358
+ {
3359
+ result[i] = (FT_UInt32)TT_NEXT_UINT24( p );
3360
+ p += 8;
3361
+ }
3362
+ result[i] = 0;
3363
+
3364
+ return result;
3365
+ }
3366
+
3367
+
3368
+ FT_CALLBACK_DEF( FT_UInt32 * )
3369
+ tt_cmap14_char_variants( FT_CMap cmap, /* TT_CMap14 */
3370
+ FT_Memory memory,
3371
+ FT_UInt32 charCode )
3372
+ {
3373
+ TT_CMap ttcmap = (TT_CMap)cmap;
3374
+ TT_CMap14 cmap14 = (TT_CMap14)cmap;
3375
+ FT_UInt32 count = cmap14->num_selectors;
3376
+ FT_Byte* p = ttcmap->data + 10;
3377
+ FT_UInt32* q;
3378
+
3379
+
3380
+ if ( tt_cmap14_ensure( cmap14, ( count + 1 ), memory ) )
3381
+ return NULL;
3382
+
3383
+ for ( q = cmap14->results; count > 0; count-- )
3384
+ {
3385
+ FT_UInt32 varSel = TT_NEXT_UINT24( p );
3386
+ FT_ULong defOff = TT_NEXT_ULONG( p );
3387
+ FT_ULong nondefOff = TT_NEXT_ULONG( p );
3388
+
3389
+
3390
+ if ( ( defOff != 0 &&
3391
+ tt_cmap14_char_map_def_binary( ttcmap->data + defOff,
3392
+ charCode ) ) ||
3393
+ ( nondefOff != 0 &&
3394
+ tt_cmap14_char_map_nondef_binary( ttcmap->data + nondefOff,
3395
+ charCode ) != 0 ) )
3396
+ {
3397
+ q[0] = varSel;
3398
+ q++;
3399
+ }
3400
+ }
3401
+ q[0] = 0;
3402
+
3403
+ return cmap14->results;
3404
+ }
3405
+
3406
+
3407
+ static FT_UInt
3408
+ tt_cmap14_def_char_count( FT_Byte *p )
3409
+ {
3410
+ FT_UInt32 numRanges = (FT_UInt32)TT_NEXT_ULONG( p );
3411
+ FT_UInt tot = 0;
3412
+
3413
+
3414
+ p += 3; /* point to the first `cnt' field */
3415
+ for ( ; numRanges > 0; numRanges-- )
3416
+ {
3417
+ tot += 1 + p[0];
3418
+ p += 4;
3419
+ }
3420
+
3421
+ return tot;
3422
+ }
3423
+
3424
+
3425
+ static FT_UInt32*
3426
+ tt_cmap14_get_def_chars( TT_CMap cmap,
3427
+ FT_Byte* p,
3428
+ FT_Memory memory )
3429
+ {
3430
+ TT_CMap14 cmap14 = (TT_CMap14) cmap;
3431
+ FT_UInt32 numRanges;
3432
+ FT_UInt cnt;
3433
+ FT_UInt32* q;
3434
+
3435
+
3436
+ cnt = tt_cmap14_def_char_count( p );
3437
+ numRanges = (FT_UInt32)TT_NEXT_ULONG( p );
3438
+
3439
+ if ( tt_cmap14_ensure( cmap14, ( cnt + 1 ), memory ) )
3440
+ return NULL;
3441
+
3442
+ for ( q = cmap14->results; numRanges > 0; numRanges-- )
3443
+ {
3444
+ FT_UInt32 uni = (FT_UInt32)TT_NEXT_UINT24( p );
3445
+
3446
+
3447
+ cnt = FT_NEXT_BYTE( p ) + 1;
3448
+ do
3449
+ {
3450
+ q[0] = uni;
3451
+ uni += 1;
3452
+ q += 1;
3453
+
3454
+ } while ( --cnt != 0 );
3455
+ }
3456
+ q[0] = 0;
3457
+
3458
+ return cmap14->results;
3459
+ }
3460
+
3461
+
3462
+ static FT_UInt32*
3463
+ tt_cmap14_get_nondef_chars( TT_CMap cmap,
3464
+ FT_Byte *p,
3465
+ FT_Memory memory )
3466
+ {
3467
+ TT_CMap14 cmap14 = (TT_CMap14) cmap;
3468
+ FT_UInt32 numMappings;
3469
+ FT_UInt i;
3470
+ FT_UInt32 *ret;
3471
+
3472
+
3473
+ numMappings = (FT_UInt32)TT_NEXT_ULONG( p );
3474
+
3475
+ if ( tt_cmap14_ensure( cmap14, ( numMappings + 1 ), memory ) )
3476
+ return NULL;
3477
+
3478
+ ret = cmap14->results;
3479
+ for ( i = 0; i < numMappings; i++ )
3480
+ {
3481
+ ret[i] = (FT_UInt32)TT_NEXT_UINT24( p );
3482
+ p += 2;
3483
+ }
3484
+ ret[i] = 0;
3485
+
3486
+ return ret;
3487
+ }
3488
+
3489
+
3490
+ FT_CALLBACK_DEF( FT_UInt32 * )
3491
+ tt_cmap14_variant_chars( FT_CMap cmap, /* TT_CMap */
3492
+ FT_Memory memory,
3493
+ FT_UInt32 variantSelector )
3494
+ {
3495
+ TT_CMap ttcmap = (TT_CMap)cmap;
3496
+ FT_Byte *p = tt_cmap14_find_variant( ttcmap->data + 6,
3497
+ variantSelector );
3498
+ FT_Int i;
3499
+ FT_ULong defOff;
3500
+ FT_ULong nondefOff;
3501
+
3502
+
3503
+ if ( !p )
3504
+ return NULL;
3505
+
3506
+ defOff = TT_NEXT_ULONG( p );
3507
+ nondefOff = TT_NEXT_ULONG( p );
3508
+
3509
+ if ( defOff == 0 && nondefOff == 0 )
3510
+ return NULL;
3511
+
3512
+ if ( defOff == 0 )
3513
+ return tt_cmap14_get_nondef_chars( ttcmap, ttcmap->data + nondefOff,
3514
+ memory );
3515
+ else if ( nondefOff == 0 )
3516
+ return tt_cmap14_get_def_chars( ttcmap, ttcmap->data + defOff,
3517
+ memory );
3518
+ else
3519
+ {
3520
+ /* Both a default and a non-default glyph set? That's probably not */
3521
+ /* good font design, but the spec allows for it... */
3522
+ TT_CMap14 cmap14 = (TT_CMap14)cmap;
3523
+ FT_UInt32 numRanges;
3524
+ FT_UInt32 numMappings;
3525
+ FT_UInt32 duni;
3526
+ FT_UInt32 dcnt;
3527
+ FT_UInt32 nuni;
3528
+ FT_Byte* dp;
3529
+ FT_UInt di, ni, k;
3530
+
3531
+ FT_UInt32 *ret;
3532
+
3533
+
3534
+ p = ttcmap->data + nondefOff;
3535
+ dp = ttcmap->data + defOff;
3536
+
3537
+ numMappings = (FT_UInt32)TT_NEXT_ULONG( p );
3538
+ dcnt = tt_cmap14_def_char_count( dp );
3539
+ numRanges = (FT_UInt32)TT_NEXT_ULONG( dp );
3540
+
3541
+ if ( numMappings == 0 )
3542
+ return tt_cmap14_get_def_chars( ttcmap, ttcmap->data + defOff,
3543
+ memory );
3544
+ if ( dcnt == 0 )
3545
+ return tt_cmap14_get_nondef_chars( ttcmap, ttcmap->data + nondefOff,
3546
+ memory );
3547
+
3548
+ if ( tt_cmap14_ensure( cmap14, ( dcnt + numMappings + 1 ), memory ) )
3549
+ return NULL;
3550
+
3551
+ ret = cmap14->results;
3552
+ duni = (FT_UInt32)TT_NEXT_UINT24( dp );
3553
+ dcnt = FT_NEXT_BYTE( dp );
3554
+ di = 1;
3555
+ nuni = (FT_UInt32)TT_NEXT_UINT24( p );
3556
+ p += 2;
3557
+ ni = 1;
3558
+ i = 0;
3559
+
3560
+ for (;;)
3561
+ {
3562
+ if ( nuni > duni + dcnt )
3563
+ {
3564
+ for ( k = 0; k <= dcnt; k++ )
3565
+ ret[i++] = duni + k;
3566
+
3567
+ di++;
3568
+
3569
+ if ( di > numRanges )
3570
+ break;
3571
+
3572
+ duni = (FT_UInt32)TT_NEXT_UINT24( dp );
3573
+ dcnt = FT_NEXT_BYTE( dp );
3574
+ }
3575
+ else
3576
+ {
3577
+ if ( nuni < duni )
3578
+ ret[i++] = nuni;
3579
+ /* If it is within the default range then ignore it -- */
3580
+ /* that should not have happened */
3581
+ ni++;
3582
+ if ( ni > numMappings )
3583
+ break;
3584
+
3585
+ nuni = (FT_UInt32)TT_NEXT_UINT24( p );
3586
+ p += 2;
3587
+ }
3588
+ }
3589
+
3590
+ if ( ni <= numMappings )
3591
+ {
3592
+ /* If we get here then we have run out of all default ranges. */
3593
+ /* We have read one non-default mapping which we haven't stored */
3594
+ /* and there may be others that need to be read. */
3595
+ ret[i++] = nuni;
3596
+ while ( ni < numMappings )
3597
+ {
3598
+ ret[i++] = (FT_UInt32)TT_NEXT_UINT24( p );
3599
+ p += 2;
3600
+ ni++;
3601
+ }
3602
+ }
3603
+ else if ( di <= numRanges )
3604
+ {
3605
+ /* If we get here then we have run out of all non-default */
3606
+ /* mappings. We have read one default range which we haven't */
3607
+ /* stored and there may be others that need to be read. */
3608
+ for ( k = 0; k <= dcnt; k++ )
3609
+ ret[i++] = duni + k;
3610
+
3611
+ while ( di < numRanges )
3612
+ {
3613
+ duni = (FT_UInt32)TT_NEXT_UINT24( dp );
3614
+ dcnt = FT_NEXT_BYTE( dp );
3615
+
3616
+ for ( k = 0; k <= dcnt; k++ )
3617
+ ret[i++] = duni + k;
3618
+ di++;
3619
+ }
3620
+ }
3621
+
3622
+ ret[i] = 0;
3623
+
3624
+ return ret;
3625
+ }
3626
+ }
3627
+
3628
+
3629
+ FT_DEFINE_TT_CMAP(
3630
+ tt_cmap14_class_rec,
3631
+
3632
+ sizeof ( TT_CMap14Rec ),
3633
+
3634
+ (FT_CMap_InitFunc) tt_cmap14_init, /* init */
3635
+ (FT_CMap_DoneFunc) tt_cmap14_done, /* done */
3636
+ (FT_CMap_CharIndexFunc)tt_cmap14_char_index, /* char_index */
3637
+ (FT_CMap_CharNextFunc) tt_cmap14_char_next, /* char_next */
3638
+
3639
+ /* Format 14 extension functions */
3640
+ (FT_CMap_CharVarIndexFunc) tt_cmap14_char_var_index,
3641
+ (FT_CMap_CharVarIsDefaultFunc)tt_cmap14_char_var_isdefault,
3642
+ (FT_CMap_VariantListFunc) tt_cmap14_variants,
3643
+ (FT_CMap_CharVariantListFunc) tt_cmap14_char_variants,
3644
+ (FT_CMap_VariantCharListFunc) tt_cmap14_variant_chars,
3645
+
3646
+ 14,
3647
+ (TT_CMap_ValidateFunc)tt_cmap14_validate, /* validate */
3648
+ (TT_CMap_Info_GetFunc)tt_cmap14_get_info /* get_cmap_info */
3649
+ )
3650
+
3651
+ #endif /* TT_CONFIG_CMAP_FORMAT_14 */
3652
+
3653
+
3654
+ /*************************************************************************/
3655
+ /*************************************************************************/
3656
+ /***** *****/
3657
+ /***** SYNTHETIC UNICODE *****/
3658
+ /***** *****/
3659
+ /*************************************************************************/
3660
+ /*************************************************************************/
3661
+
3662
+ /* This charmap is generated using postscript glyph names. */
3663
+
3664
+ #ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
3665
+
3666
+ FT_CALLBACK_DEF( const char * )
3667
+ tt_get_glyph_name( void* face_, /* TT_Face */
3668
+ FT_UInt idx )
3669
+ {
3670
+ TT_Face face = (TT_Face)face_;
3671
+ FT_String* PSname = NULL;
3672
+
3673
+
3674
+ tt_face_get_ps_name( face, idx, &PSname );
3675
+
3676
+ return PSname;
3677
+ }
3678
+
3679
+
3680
+ FT_CALLBACK_DEF( FT_Error )
3681
+ tt_cmap_unicode_init( FT_CMap cmap, /* PS_Unicodes */
3682
+ FT_Pointer pointer )
3683
+ {
3684
+ PS_Unicodes unicodes = (PS_Unicodes)cmap;
3685
+ TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
3686
+ FT_Memory memory = FT_FACE_MEMORY( face );
3687
+ FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames;
3688
+
3689
+ FT_UNUSED( pointer );
3690
+
3691
+
3692
+ if ( !psnames->unicodes_init )
3693
+ return FT_THROW( Unimplemented_Feature );
3694
+
3695
+ return psnames->unicodes_init( memory,
3696
+ unicodes,
3697
+ face->root.num_glyphs,
3698
+ &tt_get_glyph_name,
3699
+ (PS_FreeGlyphNameFunc)NULL,
3700
+ (FT_Pointer)face );
3701
+ }
3702
+
3703
+
3704
+ FT_CALLBACK_DEF( void )
3705
+ tt_cmap_unicode_done( FT_CMap cmap ) /* PS_Unicodes */
3706
+ {
3707
+ PS_Unicodes unicodes = (PS_Unicodes)cmap;
3708
+ FT_Face face = FT_CMAP_FACE( cmap );
3709
+ FT_Memory memory = FT_FACE_MEMORY( face );
3710
+
3711
+
3712
+ FT_FREE( unicodes->maps );
3713
+ unicodes->num_maps = 0;
3714
+ }
3715
+
3716
+
3717
+ FT_CALLBACK_DEF( FT_UInt )
3718
+ tt_cmap_unicode_char_index( FT_CMap cmap, /* PS_Unicodes */
3719
+ FT_UInt32 char_code )
3720
+ {
3721
+ PS_Unicodes unicodes = (PS_Unicodes)cmap;
3722
+ TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
3723
+ FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames;
3724
+
3725
+
3726
+ return psnames->unicodes_char_index( unicodes, char_code );
3727
+ }
3728
+
3729
+
3730
+ FT_CALLBACK_DEF( FT_UInt )
3731
+ tt_cmap_unicode_char_next( FT_CMap cmap, /* PS_Unicodes */
3732
+ FT_UInt32 *pchar_code )
3733
+ {
3734
+ PS_Unicodes unicodes = (PS_Unicodes)cmap;
3735
+ TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
3736
+ FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames;
3737
+
3738
+
3739
+ return psnames->unicodes_char_next( unicodes, pchar_code );
3740
+ }
3741
+
3742
+
3743
+ FT_DEFINE_TT_CMAP(
3744
+ tt_cmap_unicode_class_rec,
3745
+
3746
+ sizeof ( PS_UnicodesRec ),
3747
+
3748
+ (FT_CMap_InitFunc) tt_cmap_unicode_init, /* init */
3749
+ (FT_CMap_DoneFunc) tt_cmap_unicode_done, /* done */
3750
+ (FT_CMap_CharIndexFunc)tt_cmap_unicode_char_index, /* char_index */
3751
+ (FT_CMap_CharNextFunc) tt_cmap_unicode_char_next, /* char_next */
3752
+
3753
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
3754
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
3755
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
3756
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
3757
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
3758
+
3759
+ ~0U,
3760
+ (TT_CMap_ValidateFunc)NULL, /* validate */
3761
+ (TT_CMap_Info_GetFunc)NULL /* get_cmap_info */
3762
+ )
3763
+
3764
+ #endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
3765
+
3766
+
3767
+ static const TT_CMap_Class tt_cmap_classes[] =
3768
+ {
3769
+ #undef TTCMAPCITEM
3770
+ #define TTCMAPCITEM( a ) &a,
3771
+ #include "ttcmapc.h"
3772
+ NULL,
3773
+ };
3774
+
3775
+
3776
+ /* parse the `cmap' table and build the corresponding TT_CMap objects */
3777
+ /* in the current face */
3778
+ /* */
3779
+ FT_LOCAL_DEF( FT_Error )
3780
+ tt_face_build_cmaps( TT_Face face )
3781
+ {
3782
+ FT_Byte* const table = face->cmap_table;
3783
+ FT_Byte* limit;
3784
+ FT_UInt volatile num_cmaps;
3785
+ FT_Byte* volatile p = table;
3786
+ FT_Library library = FT_FACE_LIBRARY( face );
3787
+
3788
+ FT_UNUSED( library );
3789
+
3790
+
3791
+ if ( !p || face->cmap_size < 4 )
3792
+ return FT_THROW( Invalid_Table );
3793
+
3794
+ /* Version 1.8.3 of the OpenType specification contains the following */
3795
+ /* (https://docs.microsoft.com/en-us/typography/opentype/spec/cmap): */
3796
+ /* */
3797
+ /* The 'cmap' table version number remains at 0x0000 for fonts that */
3798
+ /* make use of the newer subtable formats. */
3799
+ /* */
3800
+ /* This essentially means that a version format test is useless. */
3801
+
3802
+ /* ignore format */
3803
+ p += 2;
3804
+
3805
+ num_cmaps = TT_NEXT_USHORT( p );
3806
+ FT_TRACE4(( "tt_face_build_cmaps: %d cmaps\n", num_cmaps ));
3807
+
3808
+ limit = table + face->cmap_size;
3809
+ for ( ; num_cmaps > 0 && p + 8 <= limit; num_cmaps-- )
3810
+ {
3811
+ FT_CharMapRec charmap;
3812
+ FT_UInt32 offset;
3813
+
3814
+
3815
+ charmap.platform_id = TT_NEXT_USHORT( p );
3816
+ charmap.encoding_id = TT_NEXT_USHORT( p );
3817
+ charmap.face = FT_FACE( face );
3818
+ charmap.encoding = FT_ENCODING_NONE; /* will be filled later */
3819
+ offset = TT_NEXT_ULONG( p );
3820
+
3821
+ if ( offset && offset <= face->cmap_size - 2 )
3822
+ {
3823
+ FT_Byte* volatile cmap = table + offset;
3824
+ volatile FT_UInt format = TT_PEEK_USHORT( cmap );
3825
+ const TT_CMap_Class* volatile pclazz = tt_cmap_classes;
3826
+ TT_CMap_Class volatile clazz;
3827
+
3828
+
3829
+ for ( ; *pclazz; pclazz++ )
3830
+ {
3831
+ clazz = *pclazz;
3832
+ if ( clazz->format == format )
3833
+ {
3834
+ volatile TT_ValidatorRec valid;
3835
+ volatile FT_Error error = FT_Err_Ok;
3836
+
3837
+
3838
+ ft_validator_init( FT_VALIDATOR( &valid ), cmap, limit,
3839
+ FT_VALIDATE_DEFAULT );
3840
+
3841
+ valid.num_glyphs = (FT_UInt)face->max_profile.numGlyphs;
3842
+
3843
+ if ( ft_setjmp( FT_VALIDATOR( &valid )->jump_buffer) == 0 )
3844
+ {
3845
+ /* validate this cmap sub-table */
3846
+ error = clazz->validate( cmap, FT_VALIDATOR( &valid ) );
3847
+ }
3848
+
3849
+ if ( !valid.validator.error )
3850
+ {
3851
+ FT_CMap ttcmap;
3852
+
3853
+
3854
+ /* It might make sense to store the single variation */
3855
+ /* selector cmap somewhere special. But it would have to be */
3856
+ /* in the public FT_FaceRec, and we can't change that. */
3857
+
3858
+ if ( !FT_CMap_New( (FT_CMap_Class)clazz,
3859
+ cmap, &charmap, &ttcmap ) )
3860
+ {
3861
+ /* it is simpler to directly set `flags' than adding */
3862
+ /* a parameter to FT_CMap_New */
3863
+ ((TT_CMap)ttcmap)->flags = (FT_Int)error;
3864
+ }
3865
+ }
3866
+ else
3867
+ {
3868
+ FT_TRACE0(( "tt_face_build_cmaps:"
3869
+ " broken cmap sub-table ignored\n" ));
3870
+ }
3871
+ break;
3872
+ }
3873
+ }
3874
+
3875
+ if ( !*pclazz )
3876
+ {
3877
+ FT_TRACE0(( "tt_face_build_cmaps:"
3878
+ " unsupported cmap sub-table ignored\n" ));
3879
+ }
3880
+ }
3881
+ }
3882
+
3883
+ return FT_Err_Ok;
3884
+ }
3885
+
3886
+
3887
+ FT_LOCAL_DEF( FT_Error )
3888
+ tt_get_cmap_info( FT_CharMap charmap,
3889
+ TT_CMapInfo *cmap_info )
3890
+ {
3891
+ FT_CMap cmap = FT_CMAP( charmap );
3892
+ TT_CMap_Class clazz = (TT_CMap_Class)cmap->clazz;
3893
+
3894
+
3895
+ if ( clazz->get_cmap_info )
3896
+ return clazz->get_cmap_info( charmap, cmap_info );
3897
+ else
3898
+ return FT_THROW( Invalid_CharMap_Format );
3899
+ }
3900
+
3901
+
3902
+ /* END */