@zephyr3d/scene 0.9.4 → 0.9.6

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 (517) hide show
  1. package/dist/animation/animationmask.js +224 -0
  2. package/dist/animation/animationmask.js.map +1 -0
  3. package/dist/animation/animationset.js +268 -67
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js.map +1 -1
  6. package/dist/animation/eulerrotationtrack.js +3 -0
  7. package/dist/animation/eulerrotationtrack.js.map +1 -1
  8. package/dist/animation/fixed_geometry_cache_track.js +7 -0
  9. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  10. package/dist/animation/ik_modifier.js.map +1 -1
  11. package/dist/animation/joint_dynamics/collision.js +6 -4
  12. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  13. package/dist/animation/joint_dynamics/controller.js +390 -43
  14. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  15. package/dist/animation/joint_dynamics/joint_dynamics_system.js +62 -3
  16. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  17. package/dist/animation/joint_dynamics/solver.js +4 -3
  18. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  19. package/dist/animation/joint_dynamics/types.js.map +1 -1
  20. package/dist/animation/joint_dynamics_modifier.js +2 -0
  21. package/dist/animation/joint_dynamics_modifier.js.map +1 -1
  22. package/dist/animation/morphtarget.js +3 -72
  23. package/dist/animation/morphtarget.js.map +1 -1
  24. package/dist/animation/morphtrack.js +3 -0
  25. package/dist/animation/morphtrack.js.map +1 -1
  26. package/dist/animation/pca_geometry_cache_track.js +3 -0
  27. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  28. package/dist/animation/proptrack.js +3 -0
  29. package/dist/animation/proptrack.js.map +1 -1
  30. package/dist/animation/rotationtrack.js +3 -0
  31. package/dist/animation/rotationtrack.js.map +1 -1
  32. package/dist/animation/scaletrack.js +3 -0
  33. package/dist/animation/scaletrack.js.map +1 -1
  34. package/dist/animation/skeleton.js +254 -79
  35. package/dist/animation/skeleton.js.map +1 -1
  36. package/dist/animation/skeleton_modifier.js.map +1 -1
  37. package/dist/animation/spring_modifier.js.map +1 -1
  38. package/dist/animation/translationtrack.js +3 -0
  39. package/dist/animation/translationtrack.js.map +1 -1
  40. package/dist/app/engine.js +171 -107
  41. package/dist/app/engine.js.map +1 -1
  42. package/dist/app/scriptregistry.js +251 -80
  43. package/dist/app/scriptregistry.js.map +1 -1
  44. package/dist/asset/assetmanager.js +344 -365
  45. package/dist/asset/assetmanager.js.map +1 -1
  46. package/dist/asset/loaders/loader.js +1 -6
  47. package/dist/asset/loaders/loader.js.map +1 -1
  48. package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -1
  49. package/dist/asset/model.js +1000 -131
  50. package/dist/asset/model.js.map +1 -1
  51. package/dist/avatar/wardrobe.js +474 -0
  52. package/dist/avatar/wardrobe.js.map +1 -0
  53. package/dist/index.d.ts +1126 -199
  54. package/dist/index.js +3 -2
  55. package/dist/index.js.map +1 -1
  56. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +6 -3
  57. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  58. package/dist/material/mixins/pbr/common.js +72 -15
  59. package/dist/material/mixins/pbr/common.js.map +1 -1
  60. package/dist/material/msdf_text.js +3 -3
  61. package/dist/material/msdf_text.js.map +1 -1
  62. package/dist/material/msdf_text_sprite.js +4 -4
  63. package/dist/material/msdf_text_sprite.js.map +1 -1
  64. package/dist/material/pbrblueprint.js +102 -102
  65. package/dist/material/pbrblueprint.js.map +1 -1
  66. package/dist/render/envlight.js +54 -1
  67. package/dist/render/envlight.js.map +1 -1
  68. package/dist/render/sky.js +9 -0
  69. package/dist/render/sky.js.map +1 -1
  70. package/dist/scene/batchgroup.js +11 -13
  71. package/dist/scene/batchgroup.js.map +1 -1
  72. package/dist/scene/environment.js +15 -2
  73. package/dist/scene/environment.js.map +1 -1
  74. package/dist/scene/mesh.js +79 -16
  75. package/dist/scene/mesh.js.map +1 -1
  76. package/dist/scene/scene.js +1 -0
  77. package/dist/scene/scene.js.map +1 -1
  78. package/dist/scene/scene_node.js +203 -2
  79. package/dist/scene/scene_node.js.map +1 -1
  80. package/dist/text/font/cff_font.js +890 -0
  81. package/dist/text/font/cff_font.js.map +1 -0
  82. package/dist/text/font/font_asset.js +17 -3
  83. package/dist/text/font/font_asset.js.map +1 -1
  84. package/dist/text/msdf/generator.js.map +1 -1
  85. package/dist/text/msdf/shape.js +4 -1
  86. package/dist/text/msdf/shape.js.map +1 -1
  87. package/dist/text/runtime/msdf_text_atlas_manager.js +4 -1
  88. package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -1
  89. package/dist/utility/blueprint/material/inputs.js +1157 -1154
  90. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  91. package/dist/utility/bounding_volume.js.map +1 -1
  92. package/dist/utility/pmrem.js +34 -8
  93. package/dist/utility/pmrem.js.map +1 -1
  94. package/dist/utility/serialization/manager.js +22 -9
  95. package/dist/utility/serialization/manager.js.map +1 -1
  96. package/dist/utility/serialization/scene/animation.js +700 -7
  97. package/dist/utility/serialization/scene/animation.js.map +1 -1
  98. package/dist/utility/serialization/scene/mesh.js +64 -4
  99. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  100. package/dist/utility/serialization/scene/node.js +187 -8
  101. package/dist/utility/serialization/scene/node.js.map +1 -1
  102. package/dist/utility/serialization/types.js.map +1 -1
  103. package/dist/utility/textures/sheenlut.js +138 -0
  104. package/dist/utility/textures/sheenlut.js.map +1 -0
  105. package/package.json +2 -2
  106. package/dist/animation/ik/ik_chain_builder.js +0 -68
  107. package/dist/animation/ik/ik_chain_builder.js.map +0 -1
  108. package/dist/animation/ik/ik_pole_constraint.js +0 -123
  109. package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
  110. package/dist/animation/ik/ik_track.js +0 -96
  111. package/dist/animation/ik/ik_track.js.map +0 -1
  112. package/dist/animation/ik_postprocessor.js +0 -71
  113. package/dist/animation/ik_postprocessor.js.map +0 -1
  114. package/dist/animation/joint_dynamics/math.js +0 -16
  115. package/dist/animation/joint_dynamics/math.js.map +0 -1
  116. package/dist/animation/manual_transform_processor.js +0 -156
  117. package/dist/animation/manual_transform_processor.js.map +0 -1
  118. package/dist/animation/skeleton_postprocessor.js +0 -50
  119. package/dist/animation/skeleton_postprocessor.js.map +0 -1
  120. package/dist/animation/spring2/collision.js +0 -469
  121. package/dist/animation/spring2/collision.js.map +0 -1
  122. package/dist/animation/spring2/constraints.js +0 -329
  123. package/dist/animation/spring2/constraints.js.map +0 -1
  124. package/dist/animation/spring2/controller.js +0 -434
  125. package/dist/animation/spring2/controller.js.map +0 -1
  126. package/dist/animation/spring2/math.js +0 -16
  127. package/dist/animation/spring2/math.js.map +0 -1
  128. package/dist/animation/spring2/solver.js +0 -624
  129. package/dist/animation/spring2/solver.js.map +0 -1
  130. package/dist/animation/spring2/spring_system.js +0 -118
  131. package/dist/animation/spring2/spring_system.js.map +0 -1
  132. package/dist/animation/spring2/types.js +0 -19
  133. package/dist/animation/spring2/types.js.map +0 -1
  134. package/dist/animation/spring_postprocessor.js +0 -54
  135. package/dist/animation/spring_postprocessor.js.map +0 -1
  136. package/dist/asset/loaders/gltf/gltf_loader.js +0 -1273
  137. package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
  138. package/dist/asset/loaders/gltf/helpers.js +0 -331
  139. package/dist/asset/loaders/gltf/helpers.js.map +0 -1
  140. package/dist/material/sprite3d.js +0 -301
  141. package/dist/material/sprite3d.js.map +0 -1
  142. package/dist/material/sprite3d_std.js +0 -116
  143. package/dist/material/sprite3d_std.js.map +0 -1
  144. package/dist/material/sprite3dblueprint.js +0 -235
  145. package/dist/material/sprite3dblueprint.js.map +0 -1
  146. package/dist/material/sprite_sdf.js +0 -106
  147. package/dist/material/sprite_sdf.js.map +0 -1
  148. package/dist/material/terrainmaterial.js +0 -368
  149. package/dist/material/terrainmaterial.js.map +0 -1
  150. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  151. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  152. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  153. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  154. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  155. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  156. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  157. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  158. package/dist/render/deferredlightpass.js +0 -510
  159. package/dist/render/deferredlightpass.js.map +0 -1
  160. package/dist/render/deferredshadowlightpass.js +0 -428
  161. package/dist/render/deferredshadowlightpass.js.map +0 -1
  162. package/dist/render/gbufferpass.js +0 -50
  163. package/dist/render/gbufferpass.js.map +0 -1
  164. package/dist/scene/sdftextsprite.js +0 -322
  165. package/dist/scene/sdftextsprite.js.map +0 -1
  166. package/dist/scene/sprite3d.js +0 -18
  167. package/dist/scene/sprite3d.js.map +0 -1
  168. package/dist/scene/terrain/grass.js +0 -280
  169. package/dist/scene/terrain/grass.js.map +0 -1
  170. package/dist/scene/terrain/heightfield.js +0 -475
  171. package/dist/scene/terrain/heightfield.js.map +0 -1
  172. package/dist/scene/terrain/patch.js +0 -532
  173. package/dist/scene/terrain/patch.js.map +0 -1
  174. package/dist/scene/terrain/quadtree.js +0 -461
  175. package/dist/scene/terrain/quadtree.js.map +0 -1
  176. package/dist/scene/terrain/terrain.js +0 -231
  177. package/dist/scene/terrain/terrain.js.map +0 -1
  178. package/dist/src/animation/animation.js +0 -127
  179. package/dist/src/animation/animation.js.map +0 -1
  180. package/dist/src/animation/animationset.js +0 -255
  181. package/dist/src/animation/animationset.js.map +0 -1
  182. package/dist/src/animation/animationtrack.js +0 -34
  183. package/dist/src/animation/animationtrack.js.map +0 -1
  184. package/dist/src/animation/eulerrotationtrack.js +0 -52
  185. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  186. package/dist/src/animation/morphtarget.js +0 -93
  187. package/dist/src/animation/morphtarget.js.map +0 -1
  188. package/dist/src/animation/morphtrack.js +0 -70
  189. package/dist/src/animation/morphtrack.js.map +0 -1
  190. package/dist/src/animation/proptrack.js +0 -161
  191. package/dist/src/animation/proptrack.js.map +0 -1
  192. package/dist/src/animation/rotationtrack.js +0 -51
  193. package/dist/src/animation/rotationtrack.js.map +0 -1
  194. package/dist/src/animation/scaletrack.js +0 -50
  195. package/dist/src/animation/scaletrack.js.map +0 -1
  196. package/dist/src/animation/skeleton.js +0 -204
  197. package/dist/src/animation/skeleton.js.map +0 -1
  198. package/dist/src/animation/translationtrack.js +0 -50
  199. package/dist/src/animation/translationtrack.js.map +0 -1
  200. package/dist/src/app/app.js +0 -129
  201. package/dist/src/app/app.js.map +0 -1
  202. package/dist/src/app/inputmgr.js +0 -267
  203. package/dist/src/app/inputmgr.js.map +0 -1
  204. package/dist/src/asset/assetmanager.js +0 -404
  205. package/dist/src/asset/assetmanager.js.map +0 -1
  206. package/dist/src/asset/builtin.js +0 -337
  207. package/dist/src/asset/builtin.js.map +0 -1
  208. package/dist/src/asset/loaders/dds/dds.js +0 -470
  209. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  210. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  211. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  212. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  213. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  214. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  215. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  216. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  217. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  218. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  219. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  220. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  221. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  222. package/dist/src/asset/loaders/loader.js +0 -45
  223. package/dist/src/asset/loaders/loader.js.map +0 -1
  224. package/dist/src/asset/model.js +0 -414
  225. package/dist/src/asset/model.js.map +0 -1
  226. package/dist/src/blitter/bilateralblur.js +0 -221
  227. package/dist/src/blitter/bilateralblur.js.map +0 -1
  228. package/dist/src/blitter/blitter.js +0 -390
  229. package/dist/src/blitter/blitter.js.map +0 -1
  230. package/dist/src/blitter/box.js +0 -118
  231. package/dist/src/blitter/box.js.map +0 -1
  232. package/dist/src/blitter/copy.js +0 -22
  233. package/dist/src/blitter/copy.js.map +0 -1
  234. package/dist/src/blitter/gaussianblur.js +0 -228
  235. package/dist/src/blitter/gaussianblur.js.map +0 -1
  236. package/dist/src/camera/base.js +0 -92
  237. package/dist/src/camera/base.js.map +0 -1
  238. package/dist/src/camera/camera.js +0 -1005
  239. package/dist/src/camera/camera.js.map +0 -1
  240. package/dist/src/camera/fps.js +0 -238
  241. package/dist/src/camera/fps.js.map +0 -1
  242. package/dist/src/camera/orbit.js +0 -245
  243. package/dist/src/camera/orbit.js.map +0 -1
  244. package/dist/src/camera/orthocamera.js +0 -167
  245. package/dist/src/camera/orthocamera.js.map +0 -1
  246. package/dist/src/camera/perspectivecamera.js +0 -141
  247. package/dist/src/camera/perspectivecamera.js.map +0 -1
  248. package/dist/src/index.js +0 -120
  249. package/dist/src/index.js.map +0 -1
  250. package/dist/src/material/blinn.js +0 -81
  251. package/dist/src/material/blinn.js.map +0 -1
  252. package/dist/src/material/grassmaterial.js +0 -113
  253. package/dist/src/material/grassmaterial.js.map +0 -1
  254. package/dist/src/material/lambert.js +0 -92
  255. package/dist/src/material/lambert.js.map +0 -1
  256. package/dist/src/material/material.js +0 -301
  257. package/dist/src/material/material.js.map +0 -1
  258. package/dist/src/material/meshmaterial.js +0 -704
  259. package/dist/src/material/meshmaterial.js.map +0 -1
  260. package/dist/src/material/mixins/albedocolor.js +0 -76
  261. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  262. package/dist/src/material/mixins/foliage.js +0 -47
  263. package/dist/src/material/mixins/foliage.js.map +0 -1
  264. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  265. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  266. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  267. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  268. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  269. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  270. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  271. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  272. package/dist/src/material/mixins/lit.js +0 -476
  273. package/dist/src/material/mixins/lit.js.map +0 -1
  274. package/dist/src/material/mixins/pbr/common.js +0 -918
  275. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  276. package/dist/src/material/mixins/texture.js +0 -172
  277. package/dist/src/material/mixins/texture.js.map +0 -1
  278. package/dist/src/material/mixins/vertexcolor.js +0 -56
  279. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  280. package/dist/src/material/particle.js +0 -178
  281. package/dist/src/material/particle.js.map +0 -1
  282. package/dist/src/material/pbrmr.js +0 -97
  283. package/dist/src/material/pbrmr.js.map +0 -1
  284. package/dist/src/material/pbrsg.js +0 -97
  285. package/dist/src/material/pbrsg.js.map +0 -1
  286. package/dist/src/material/shader/helper.js +0 -1209
  287. package/dist/src/material/shader/helper.js.map +0 -1
  288. package/dist/src/material/terrain-cm.js +0 -606
  289. package/dist/src/material/terrain-cm.js.map +0 -1
  290. package/dist/src/material/terrainmaterial.js +0 -375
  291. package/dist/src/material/terrainmaterial.js.map +0 -1
  292. package/dist/src/material/unlit.js +0 -41
  293. package/dist/src/material/unlit.js.map +0 -1
  294. package/dist/src/material/water.js +0 -417
  295. package/dist/src/material/water.js.map +0 -1
  296. package/dist/src/posteffect/bloom.js +0 -361
  297. package/dist/src/posteffect/bloom.js.map +0 -1
  298. package/dist/src/posteffect/compositor.js +0 -226
  299. package/dist/src/posteffect/compositor.js.map +0 -1
  300. package/dist/src/posteffect/fxaa.js +0 -273
  301. package/dist/src/posteffect/fxaa.js.map +0 -1
  302. package/dist/src/posteffect/grayscale.js +0 -69
  303. package/dist/src/posteffect/grayscale.js.map +0 -1
  304. package/dist/src/posteffect/motionblur.js +0 -96
  305. package/dist/src/posteffect/motionblur.js.map +0 -1
  306. package/dist/src/posteffect/posteffect.js +0 -126
  307. package/dist/src/posteffect/posteffect.js.map +0 -1
  308. package/dist/src/posteffect/sao.js +0 -324
  309. package/dist/src/posteffect/sao.js.map +0 -1
  310. package/dist/src/posteffect/ssr.js +0 -489
  311. package/dist/src/posteffect/ssr.js.map +0 -1
  312. package/dist/src/posteffect/taa.js +0 -172
  313. package/dist/src/posteffect/taa.js.map +0 -1
  314. package/dist/src/posteffect/tonemap.js +0 -94
  315. package/dist/src/posteffect/tonemap.js.map +0 -1
  316. package/dist/src/render/abuffer_oit.js +0 -361
  317. package/dist/src/render/abuffer_oit.js.map +0 -1
  318. package/dist/src/render/clipmap.js +0 -851
  319. package/dist/src/render/clipmap.js.map +0 -1
  320. package/dist/src/render/cluster_light.js +0 -333
  321. package/dist/src/render/cluster_light.js.map +0 -1
  322. package/dist/src/render/cull_visitor.js +0 -187
  323. package/dist/src/render/cull_visitor.js.map +0 -1
  324. package/dist/src/render/depthpass.js +0 -68
  325. package/dist/src/render/depthpass.js.map +0 -1
  326. package/dist/src/render/drawable_mixin.js +0 -227
  327. package/dist/src/render/drawable_mixin.js.map +0 -1
  328. package/dist/src/render/envlight.js +0 -463
  329. package/dist/src/render/envlight.js.map +0 -1
  330. package/dist/src/render/fbm_wavegenerator.js +0 -251
  331. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  332. package/dist/src/render/fft_wavegenerator.js +0 -1006
  333. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  334. package/dist/src/render/fullscreenquad.js +0 -38
  335. package/dist/src/render/fullscreenquad.js.map +0 -1
  336. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  337. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  338. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  339. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  340. package/dist/src/render/hzb.js +0 -273
  341. package/dist/src/render/hzb.js.map +0 -1
  342. package/dist/src/render/lightpass.js +0 -172
  343. package/dist/src/render/lightpass.js.map +0 -1
  344. package/dist/src/render/objectcolorpass.js +0 -51
  345. package/dist/src/render/objectcolorpass.js.map +0 -1
  346. package/dist/src/render/primitive.js +0 -364
  347. package/dist/src/render/primitive.js.map +0 -1
  348. package/dist/src/render/render_queue.js +0 -467
  349. package/dist/src/render/render_queue.js.map +0 -1
  350. package/dist/src/render/renderbundle_wrapper.js +0 -152
  351. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  352. package/dist/src/render/renderer.js +0 -455
  353. package/dist/src/render/renderer.js.map +0 -1
  354. package/dist/src/render/renderpass.js +0 -200
  355. package/dist/src/render/renderpass.js.map +0 -1
  356. package/dist/src/render/shadowmap_pass.js +0 -56
  357. package/dist/src/render/shadowmap_pass.js.map +0 -1
  358. package/dist/src/render/sky.js +0 -1103
  359. package/dist/src/render/sky.js.map +0 -1
  360. package/dist/src/render/weightedblended_oit.js +0 -168
  361. package/dist/src/render/weightedblended_oit.js.map +0 -1
  362. package/dist/src/scene/batchgroup.js +0 -162
  363. package/dist/src/scene/batchgroup.js.map +0 -1
  364. package/dist/src/scene/environment.js +0 -209
  365. package/dist/src/scene/environment.js.map +0 -1
  366. package/dist/src/scene/graph_node.js +0 -72
  367. package/dist/src/scene/graph_node.js.map +0 -1
  368. package/dist/src/scene/light.js +0 -416
  369. package/dist/src/scene/light.js.map +0 -1
  370. package/dist/src/scene/mesh.js +0 -341
  371. package/dist/src/scene/mesh.js.map +0 -1
  372. package/dist/src/scene/octree.js +0 -649
  373. package/dist/src/scene/octree.js.map +0 -1
  374. package/dist/src/scene/particlesys.js +0 -738
  375. package/dist/src/scene/particlesys.js.map +0 -1
  376. package/dist/src/scene/raycast_visitor.js +0 -103
  377. package/dist/src/scene/raycast_visitor.js.map +0 -1
  378. package/dist/src/scene/scene.js +0 -284
  379. package/dist/src/scene/scene.js.map +0 -1
  380. package/dist/src/scene/scene_node.js +0 -732
  381. package/dist/src/scene/scene_node.js.map +0 -1
  382. package/dist/src/scene/terrain/grass.js +0 -278
  383. package/dist/src/scene/terrain/grass.js.map +0 -1
  384. package/dist/src/scene/terrain/heightfield.js +0 -475
  385. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  386. package/dist/src/scene/terrain/patch.js +0 -530
  387. package/dist/src/scene/terrain/patch.js.map +0 -1
  388. package/dist/src/scene/terrain/quadtree.js +0 -461
  389. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  390. package/dist/src/scene/terrain/terrain.js +0 -246
  391. package/dist/src/scene/terrain/terrain.js.map +0 -1
  392. package/dist/src/scene/terrain-cm/grass.js +0 -594
  393. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  394. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  395. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  396. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  397. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  398. package/dist/src/scene/water.js +0 -374
  399. package/dist/src/scene/water.js.map +0 -1
  400. package/dist/src/shaders/atmosphere.js +0 -957
  401. package/dist/src/shaders/atmosphere.js.map +0 -1
  402. package/dist/src/shaders/fog.js +0 -112
  403. package/dist/src/shaders/fog.js.map +0 -1
  404. package/dist/src/shaders/misc.js +0 -266
  405. package/dist/src/shaders/misc.js.map +0 -1
  406. package/dist/src/shaders/noise.js +0 -222
  407. package/dist/src/shaders/noise.js.map +0 -1
  408. package/dist/src/shaders/pbr.js +0 -51
  409. package/dist/src/shaders/pbr.js.map +0 -1
  410. package/dist/src/shaders/shadow.js +0 -636
  411. package/dist/src/shaders/shadow.js.map +0 -1
  412. package/dist/src/shaders/ssr.js +0 -490
  413. package/dist/src/shaders/ssr.js.map +0 -1
  414. package/dist/src/shaders/temporal.js +0 -215
  415. package/dist/src/shaders/temporal.js.map +0 -1
  416. package/dist/src/shaders/water.js +0 -756
  417. package/dist/src/shaders/water.js.map +0 -1
  418. package/dist/src/shadow/esm.js +0 -237
  419. package/dist/src/shadow/esm.js.map +0 -1
  420. package/dist/src/shadow/pcf_opt.js +0 -181
  421. package/dist/src/shadow/pcf_opt.js.map +0 -1
  422. package/dist/src/shadow/pcf_pd.js +0 -189
  423. package/dist/src/shadow/pcf_pd.js.map +0 -1
  424. package/dist/src/shadow/shader.js +0 -37
  425. package/dist/src/shadow/shader.js.map +0 -1
  426. package/dist/src/shadow/shadow_impl.js +0 -15
  427. package/dist/src/shadow/shadow_impl.js.map +0 -1
  428. package/dist/src/shadow/shadowmapper.js +0 -790
  429. package/dist/src/shadow/shadowmapper.js.map +0 -1
  430. package/dist/src/shadow/ssm.js +0 -159
  431. package/dist/src/shadow/ssm.js.map +0 -1
  432. package/dist/src/shadow/vsm.js +0 -297
  433. package/dist/src/shadow/vsm.js.map +0 -1
  434. package/dist/src/shapes/box.js +0 -386
  435. package/dist/src/shapes/box.js.map +0 -1
  436. package/dist/src/shapes/cylinder.js +0 -125
  437. package/dist/src/shapes/cylinder.js.map +0 -1
  438. package/dist/src/shapes/plane.js +0 -88
  439. package/dist/src/shapes/plane.js.map +0 -1
  440. package/dist/src/shapes/shape.js +0 -87
  441. package/dist/src/shapes/shape.js.map +0 -1
  442. package/dist/src/shapes/sphere.js +0 -114
  443. package/dist/src/shapes/sphere.js.map +0 -1
  444. package/dist/src/shapes/tetrahedron.js +0 -188
  445. package/dist/src/shapes/tetrahedron.js.map +0 -1
  446. package/dist/src/shapes/torus.js +0 -111
  447. package/dist/src/shapes/torus.js.map +0 -1
  448. package/dist/src/utility/aabbtree.js +0 -400
  449. package/dist/src/utility/aabbtree.js.map +0 -1
  450. package/dist/src/utility/bounding_volume.js +0 -29
  451. package/dist/src/utility/bounding_volume.js.map +0 -1
  452. package/dist/src/utility/debug.js +0 -28
  453. package/dist/src/utility/debug.js.map +0 -1
  454. package/dist/src/utility/draco/decoder.js +0 -116
  455. package/dist/src/utility/draco/decoder.js.map +0 -1
  456. package/dist/src/utility/misc.js +0 -105
  457. package/dist/src/utility/misc.js.map +0 -1
  458. package/dist/src/utility/panorama.js +0 -163
  459. package/dist/src/utility/panorama.js.map +0 -1
  460. package/dist/src/utility/pmrem.js +0 -354
  461. package/dist/src/utility/pmrem.js.map +0 -1
  462. package/dist/src/utility/rendermipmap.js +0 -115
  463. package/dist/src/utility/rendermipmap.js.map +0 -1
  464. package/dist/src/utility/serialization/json.js +0 -402
  465. package/dist/src/utility/serialization/json.js.map +0 -1
  466. package/dist/src/utility/serialization/manager.js +0 -623
  467. package/dist/src/utility/serialization/manager.js.map +0 -1
  468. package/dist/src/utility/serialization/scene/animation.js +0 -248
  469. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  470. package/dist/src/utility/serialization/scene/batch.js +0 -59
  471. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  472. package/dist/src/utility/serialization/scene/camera.js +0 -790
  473. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  474. package/dist/src/utility/serialization/scene/common.js +0 -222
  475. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  476. package/dist/src/utility/serialization/scene/light.js +0 -575
  477. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  478. package/dist/src/utility/serialization/scene/material.js +0 -1111
  479. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  480. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  481. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  482. package/dist/src/utility/serialization/scene/misc.js +0 -39
  483. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  484. package/dist/src/utility/serialization/scene/node.js +0 -451
  485. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  486. package/dist/src/utility/serialization/scene/particle.js +0 -425
  487. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  488. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  489. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  490. package/dist/src/utility/serialization/scene/scene.js +0 -704
  491. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  492. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  493. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  494. package/dist/src/utility/serialization/scene/water.js +0 -465
  495. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  496. package/dist/src/utility/shprojector.js +0 -297
  497. package/dist/src/utility/shprojector.js.map +0 -1
  498. package/dist/src/utility/textures/ggxlut.js +0 -213
  499. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  500. package/dist/src/utility/textures/gradientnoise.js +0 -62
  501. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  502. package/dist/src/utility/textures/randomnoise.js +0 -41
  503. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  504. package/dist/src/values.js +0 -162
  505. package/dist/src/values.js.map +0 -1
  506. package/dist/utility/blueprint/material/common.js +0 -7
  507. package/dist/utility/blueprint/material/common.js.map +0 -1
  508. package/dist/utility/serialization/blueprint/constants.js +0 -255
  509. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  510. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  511. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  512. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  513. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
  514. package/dist/utility/serialization/scene/cloth_script.js +0 -834
  515. package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
  516. package/dist/utility/serialization/scene/spring_script.js +0 -596
  517. package/dist/utility/serialization/scene/spring_script.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cff_font.js","sources":["../../../src/text/font/cff_font.ts"],"sourcesContent":["import type { GlyphContour, GlyphData } from './types';\r\nimport type { SFNTReader } from './sfnt_reader';\r\n\r\ntype CFFIndex = {\r\n objects: Uint8Array<ArrayBuffer>[];\r\n endOffset: number;\r\n};\r\n\r\ntype CFFDict = Map<string, number[]>;\r\n\r\ntype CFFPrivateInfo = {\r\n subrs: Uint8Array<ArrayBuffer>[];\r\n subrBias: number;\r\n};\r\n\r\ntype CFFFontDict = {\r\n privateInfo: CFFPrivateInfo;\r\n};\r\n\r\ntype FDSelect =\r\n | {\r\n format: 0;\r\n fds: Uint8Array<ArrayBuffer>;\r\n }\r\n | {\r\n format: 3;\r\n ranges: { first: number; fd: number }[];\r\n sentinel: number;\r\n };\r\n\r\n/**\r\n * CFF Type 2 glyph provider for OpenType/CFF fonts.\r\n *\r\n * @internal\r\n */\r\nexport class CFFGlyphProvider {\r\n private readonly _charStrings: Uint8Array<ArrayBuffer>[];\r\n private readonly _globalSubrs: Uint8Array<ArrayBuffer>[];\r\n private readonly _globalSubrBias: number;\r\n private readonly _privateInfo: CFFPrivateInfo;\r\n private readonly _fdArray: CFFFontDict[];\r\n private readonly _fdSelect: FDSelect | null;\r\n constructor(\r\n charStrings: Uint8Array<ArrayBuffer>[],\r\n globalSubrs: Uint8Array<ArrayBuffer>[],\r\n privateInfo: CFFPrivateInfo,\r\n fdArray: CFFFontDict[],\r\n fdSelect: FDSelect | null\r\n ) {\r\n this._charStrings = charStrings;\r\n this._globalSubrs = globalSubrs;\r\n this._globalSubrBias = getSubrBias(globalSubrs.length);\r\n this._privateInfo = privateInfo;\r\n this._fdArray = fdArray;\r\n this._fdSelect = fdSelect;\r\n }\r\n getGlyph(\r\n glyphIndex: number,\r\n advanceWidths: Uint16Array<ArrayBuffer>,\r\n leftSideBearings: Int16Array<ArrayBuffer>\r\n ): GlyphData | null {\r\n const charString = this._charStrings[glyphIndex];\r\n if (!charString) {\r\n return null;\r\n }\r\n const privateInfo = this.getPrivateInfo(glyphIndex);\r\n const interpreter = new Type2CharStringInterpreter(\r\n this._globalSubrs,\r\n this._globalSubrBias,\r\n privateInfo.subrs,\r\n privateInfo.subrBias\r\n );\r\n const contours = interpreter.parse(charString);\r\n const bounds = computeBounds(contours);\r\n return {\r\n glyphIndex,\r\n advanceWidth: advanceWidths[glyphIndex] ?? 0,\r\n leftSideBearing: leftSideBearings[glyphIndex] ?? 0,\r\n xMin: bounds.xMin,\r\n yMin: bounds.yMin,\r\n xMax: bounds.xMax,\r\n yMax: bounds.yMax,\r\n contours\r\n };\r\n }\r\n private getPrivateInfo(glyphIndex: number) {\r\n const fdIndex = this.getFDIndex(glyphIndex);\r\n return fdIndex >= 0 ? (this._fdArray[fdIndex]?.privateInfo ?? this._privateInfo) : this._privateInfo;\r\n }\r\n private getFDIndex(glyphIndex: number) {\r\n if (!this._fdSelect) {\r\n return -1;\r\n }\r\n if (this._fdSelect.format === 0) {\r\n return this._fdSelect.fds[glyphIndex] ?? -1;\r\n }\r\n const ranges = this._fdSelect.ranges;\r\n for (let i = 0; i < ranges.length; i++) {\r\n const start = ranges[i].first;\r\n const end = i + 1 < ranges.length ? ranges[i + 1].first : this._fdSelect.sentinel;\r\n if (glyphIndex >= start && glyphIndex < end) {\r\n return ranges[i].fd;\r\n }\r\n }\r\n return -1;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function parseCFFGlyphProvider(reader: SFNTReader, tableOffset: number, glyphCount: number) {\r\n const major = reader.uint8(tableOffset);\r\n if (major !== 1) {\r\n throw new Error(`Unsupported CFF table version: ${major}`);\r\n }\r\n const headerSize = reader.uint8(tableOffset + 2);\r\n let offset = tableOffset + headerSize;\r\n const nameIndex = readIndex(reader, offset);\r\n offset = nameIndex.endOffset;\r\n const topDictIndex = readIndex(reader, offset);\r\n offset = topDictIndex.endOffset;\r\n const stringIndex = readIndex(reader, offset);\r\n offset = stringIndex.endOffset;\r\n const globalSubrIndex = readIndex(reader, offset);\r\n const topDictBytes = topDictIndex.objects[0];\r\n if (!topDictBytes) {\r\n throw new Error('CFF Top DICT not found');\r\n }\r\n const topDict = parseDict(topDictBytes, 'dict');\r\n const charStringsOffset = getDictNumber(topDict, '17');\r\n if (charStringsOffset === null) {\r\n throw new Error('CFF CharStrings offset not found');\r\n }\r\n const charStrings = readIndex(reader, tableOffset + charStringsOffset);\r\n const privateInfo = readTopPrivateInfo(reader, tableOffset, topDict);\r\n const fdArrayOffset = getDictNumber(topDict, '12 36');\r\n const fdSelectOffset = getDictNumber(topDict, '12 37');\r\n const fdArray = fdArrayOffset !== null ? readFDArray(reader, tableOffset, fdArrayOffset) : [];\r\n const fdSelect =\r\n fdSelectOffset !== null ? readFDSelect(reader, tableOffset + fdSelectOffset, glyphCount) : null;\r\n return new CFFGlyphProvider(charStrings.objects, globalSubrIndex.objects, privateInfo, fdArray, fdSelect);\r\n}\r\n\r\nfunction readTopPrivateInfo(reader: SFNTReader, tableOffset: number, topDict: CFFDict): CFFPrivateInfo {\r\n const privateEntry = topDict.get('18');\r\n if (!privateEntry || privateEntry.length < 2) {\r\n return { subrs: [], subrBias: getSubrBias(0) };\r\n }\r\n return readPrivateInfo(reader, tableOffset, privateEntry[1], privateEntry[0]);\r\n}\r\n\r\nfunction readFDArray(reader: SFNTReader, tableOffset: number, fdArrayOffset: number): CFFFontDict[] {\r\n const fdIndex = readIndex(reader, tableOffset + fdArrayOffset);\r\n return fdIndex.objects.map((fontDictBytes) => {\r\n const fontDict = parseDict(fontDictBytes, 'dict');\r\n const privateEntry = fontDict.get('18');\r\n return {\r\n privateInfo:\r\n privateEntry && privateEntry.length >= 2\r\n ? readPrivateInfo(reader, tableOffset, privateEntry[1], privateEntry[0])\r\n : { subrs: [], subrBias: getSubrBias(0) }\r\n };\r\n });\r\n}\r\n\r\nfunction readPrivateInfo(\r\n reader: SFNTReader,\r\n tableOffset: number,\r\n privateOffset: number,\r\n privateSize: number\r\n): CFFPrivateInfo {\r\n const bytes = readBytes(reader, tableOffset + privateOffset, privateSize);\r\n const dict = parseDict(bytes, 'dict');\r\n const subrsOffset = getDictNumber(dict, '19');\r\n const subrs =\r\n subrsOffset !== null ? readIndex(reader, tableOffset + privateOffset + subrsOffset).objects : [];\r\n return { subrs, subrBias: getSubrBias(subrs.length) };\r\n}\r\n\r\nfunction readFDSelect(reader: SFNTReader, offset: number, glyphCount: number): FDSelect {\r\n const format = reader.uint8(offset);\r\n if (format === 0) {\r\n return {\r\n format,\r\n fds: readBytes(reader, offset + 1, glyphCount)\r\n };\r\n }\r\n if (format === 3) {\r\n const ranges: { first: number; fd: number }[] = [];\r\n const nRanges = reader.uint16(offset + 1);\r\n let cursor = offset + 3;\r\n for (let i = 0; i < nRanges; i++) {\r\n ranges.push({\r\n first: reader.uint16(cursor),\r\n fd: reader.uint8(cursor + 2)\r\n });\r\n cursor += 3;\r\n }\r\n return {\r\n format,\r\n ranges,\r\n sentinel: reader.uint16(cursor)\r\n };\r\n }\r\n throw new Error(`Unsupported CFF FDSelect format: ${format}`);\r\n}\r\n\r\nfunction readIndex(reader: SFNTReader, offset: number): CFFIndex {\r\n const count = reader.uint16(offset);\r\n if (count === 0) {\r\n return { objects: [], endOffset: offset + 2 };\r\n }\r\n const offSize = reader.uint8(offset + 2);\r\n const offsetsStart = offset + 3;\r\n const dataStart = offsetsStart + (count + 1) * offSize;\r\n const offsets: number[] = [];\r\n for (let i = 0; i <= count; i++) {\r\n offsets.push(readOffset(reader, offsetsStart + i * offSize, offSize));\r\n }\r\n const objects: Uint8Array<ArrayBuffer>[] = [];\r\n for (let i = 0; i < count; i++) {\r\n const start = dataStart + offsets[i] - 1;\r\n const end = dataStart + offsets[i + 1] - 1;\r\n objects.push(readBytes(reader, start, Math.max(end - start, 0)));\r\n }\r\n return {\r\n objects,\r\n endOffset: dataStart + offsets[count] - 1\r\n };\r\n}\r\n\r\nfunction readOffset(reader: SFNTReader, offset: number, size: number) {\r\n let value = 0;\r\n for (let i = 0; i < size; i++) {\r\n value = value * 256 + reader.uint8(offset + i);\r\n }\r\n return value;\r\n}\r\n\r\nfunction readBytes(reader: SFNTReader, offset: number, length: number): Uint8Array<ArrayBuffer> {\r\n return new Uint8Array(reader.buffer.slice(offset, offset + length));\r\n}\r\n\r\nfunction parseDict(bytes: Uint8Array<ArrayBuffer>, kind: 'dict' | 'charstring') {\r\n const dict: CFFDict = new Map();\r\n const stack: number[] = [];\r\n let i = 0;\r\n while (i < bytes.length) {\r\n const b = bytes[i++];\r\n if (isDictOperatorByte(b)) {\r\n let op = String(b);\r\n if (b === 12) {\r\n op = `12 ${bytes[i++]}`;\r\n }\r\n dict.set(op, stack.splice(0));\r\n } else {\r\n const parsed = readNumber(bytes, i - 1, kind);\r\n stack.push(parsed.value);\r\n i = parsed.next;\r\n }\r\n }\r\n return dict;\r\n}\r\n\r\nfunction isDictOperatorByte(b: number) {\r\n return b <= 21 && b !== 28 && b !== 29 && b !== 30;\r\n}\r\n\r\nfunction getDictNumber(dict: CFFDict, key: string, index = 0) {\r\n const values = dict.get(key);\r\n return values && index < values.length ? values[index] : null;\r\n}\r\n\r\nfunction getSubrBias(count: number) {\r\n return count < 1240 ? 107 : count < 33900 ? 1131 : 32768;\r\n}\r\n\r\ntype ParseStatus = 'continue' | 'return' | 'end';\r\n\r\nclass Type2CharStringInterpreter {\r\n private readonly _globalSubrs: Uint8Array<ArrayBuffer>[];\r\n private readonly _globalSubrBias: number;\r\n private readonly _localSubrs: Uint8Array<ArrayBuffer>[];\r\n private readonly _localSubrBias: number;\r\n private readonly _stack: number[];\r\n private readonly _transient: number[];\r\n private readonly _contours: GlyphContour[];\r\n private _currentContour: GlyphContour | null;\r\n private _x: number;\r\n private _y: number;\r\n private _hintCount: number;\r\n private _widthConsumed: boolean;\r\n constructor(\r\n globalSubrs: Uint8Array<ArrayBuffer>[],\r\n globalSubrBias: number,\r\n localSubrs: Uint8Array<ArrayBuffer>[],\r\n localSubrBias: number\r\n ) {\r\n this._globalSubrs = globalSubrs;\r\n this._globalSubrBias = globalSubrBias;\r\n this._localSubrs = localSubrs;\r\n this._localSubrBias = localSubrBias;\r\n this._stack = [];\r\n this._transient = new Array(32).fill(0);\r\n this._contours = [];\r\n this._currentContour = null;\r\n this._x = 0;\r\n this._y = 0;\r\n this._hintCount = 0;\r\n this._widthConsumed = false;\r\n }\r\n parse(bytes: Uint8Array<ArrayBuffer>) {\r\n this.execute(bytes, 0);\r\n this.closeContour();\r\n return this._contours;\r\n }\r\n private execute(bytes: Uint8Array<ArrayBuffer>, depth: number): ParseStatus {\r\n if (depth > 32) {\r\n throw new Error('CFF Type2 charstring subroutine nesting too deep');\r\n }\r\n let i = 0;\r\n while (i < bytes.length) {\r\n const b = bytes[i++];\r\n if (isType2NumberByte(b)) {\r\n const parsed = readNumber(bytes, i - 1, 'charstring');\r\n this._stack.push(parsed.value);\r\n i = parsed.next;\r\n continue;\r\n }\r\n if (b === 12) {\r\n const status = this.handleEscapedOperator(bytes[i++]);\r\n if (status !== 'continue') {\r\n return status;\r\n }\r\n continue;\r\n }\r\n if (b === 19 || b === 20) {\r\n this.consumeStemHints();\r\n i += Math.ceil(this._hintCount / 8);\r\n this._stack.length = 0;\r\n continue;\r\n }\r\n const status = this.handleOperator(b, depth);\r\n if (status !== 'continue') {\r\n return status;\r\n }\r\n }\r\n return 'continue';\r\n }\r\n private handleOperator(op: number, depth: number): ParseStatus {\r\n switch (op) {\r\n case 1:\r\n case 3:\r\n case 18:\r\n case 23:\r\n this.consumeStemHints();\r\n this._stack.length = 0;\r\n break;\r\n case 4: {\r\n const [dy] = this.consumeMoveArgs(1);\r\n this.moveTo(0, dy);\r\n break;\r\n }\r\n case 5:\r\n this.applyRLineTo(this.consumeArgs());\r\n break;\r\n case 6:\r\n this.applyHVLineTo(this.consumeArgs(), true);\r\n break;\r\n case 7:\r\n this.applyHVLineTo(this.consumeArgs(), false);\r\n break;\r\n case 8:\r\n this.applyRRCurveTo(this.consumeArgs());\r\n break;\r\n case 10:\r\n return this.callSubr(false, depth);\r\n case 11:\r\n return 'return';\r\n case 14:\r\n this._stack.length = 0;\r\n this.closeContour();\r\n return 'end';\r\n case 21: {\r\n const [dx, dy] = this.consumeMoveArgs(2);\r\n this.moveTo(dx, dy);\r\n break;\r\n }\r\n case 22: {\r\n const [dx] = this.consumeMoveArgs(1);\r\n this.moveTo(dx, 0);\r\n break;\r\n }\r\n case 24:\r\n this.applyRCurveLine(this.consumeArgs());\r\n break;\r\n case 25:\r\n this.applyRLineCurve(this.consumeArgs());\r\n break;\r\n case 26:\r\n this.applyVVCurveTo(this.consumeArgs());\r\n break;\r\n case 27:\r\n this.applyHHCurveTo(this.consumeArgs());\r\n break;\r\n case 29:\r\n return this.callSubr(true, depth);\r\n case 30:\r\n this.applyVHCurveTo(this.consumeArgs());\r\n break;\r\n case 31:\r\n this.applyHVCurveTo(this.consumeArgs());\r\n break;\r\n default:\r\n this._stack.length = 0;\r\n break;\r\n }\r\n return 'continue';\r\n }\r\n private handleEscapedOperator(op: number): ParseStatus {\r\n switch (op) {\r\n case 3:\r\n this.binaryStackOp((a, b) => (a && b ? 1 : 0));\r\n break;\r\n case 4:\r\n this.binaryStackOp((a, b) => (a || b ? 1 : 0));\r\n break;\r\n case 5: {\r\n const a = this._stack.pop() ?? 0;\r\n this._stack.push(a ? 0 : 1);\r\n break;\r\n }\r\n case 9: {\r\n const a = this._stack.pop() ?? 0;\r\n this._stack.push(Math.abs(a));\r\n break;\r\n }\r\n case 10:\r\n this.binaryStackOp((a, b) => a + b);\r\n break;\r\n case 11:\r\n this.binaryStackOp((a, b) => a - b);\r\n break;\r\n case 12:\r\n this.binaryStackOp((a, b) => a / b);\r\n break;\r\n case 14: {\r\n const a = this._stack.pop() ?? 0;\r\n this._stack.push(-a);\r\n break;\r\n }\r\n case 15:\r\n this.binaryStackOp((a, b) => (a === b ? 1 : 0));\r\n break;\r\n case 18:\r\n this._stack.pop();\r\n break;\r\n case 20: {\r\n const value = this._stack.pop() ?? 0;\r\n const index = this._stack.pop() ?? 0;\r\n this._transient[index | 0] = value;\r\n break;\r\n }\r\n case 21: {\r\n const index = this._stack.pop() ?? 0;\r\n this._stack.push(this._transient[index | 0] ?? 0);\r\n break;\r\n }\r\n case 22:\r\n this.applyIfElse();\r\n break;\r\n case 23:\r\n this._stack.push(Math.random());\r\n break;\r\n case 24:\r\n this.binaryStackOp((a, b) => a * b);\r\n break;\r\n case 26: {\r\n const a = this._stack.pop() ?? 0;\r\n this._stack.push(Math.sqrt(Math.max(a, 0)));\r\n break;\r\n }\r\n case 27: {\r\n const a = this._stack[this._stack.length - 1] ?? 0;\r\n this._stack.push(a);\r\n break;\r\n }\r\n case 28:\r\n this.exchangeStackTop();\r\n break;\r\n case 29:\r\n this.indexStack();\r\n break;\r\n case 30:\r\n this.rollStack();\r\n break;\r\n case 34:\r\n this.applyHFlex(this.consumeArgs());\r\n break;\r\n case 35:\r\n this.applyFlex(this.consumeArgs());\r\n break;\r\n case 36:\r\n this.applyHFlex1(this.consumeArgs());\r\n break;\r\n case 37:\r\n this.applyFlex1(this.consumeArgs());\r\n break;\r\n default:\r\n this._stack.length = 0;\r\n break;\r\n }\r\n return 'continue';\r\n }\r\n private consumeStemHints() {\r\n if (!this._widthConsumed && this._stack.length % 2 === 1) {\r\n this._stack.shift();\r\n this._widthConsumed = true;\r\n }\r\n this._hintCount += Math.floor(this._stack.length / 2);\r\n }\r\n private consumeMoveArgs(count: number) {\r\n if (!this._widthConsumed && this._stack.length > count) {\r\n this._stack.shift();\r\n this._widthConsumed = true;\r\n }\r\n const args = this._stack.splice(Math.max(0, this._stack.length - count), count);\r\n this._stack.length = 0;\r\n while (args.length < count) {\r\n args.unshift(0);\r\n }\r\n return args;\r\n }\r\n private consumeArgs() {\r\n return this._stack.splice(0);\r\n }\r\n private callSubr(global: boolean, depth: number): ParseStatus {\r\n const operand = this._stack.pop();\r\n if (operand === undefined) {\r\n return 'continue';\r\n }\r\n const subrs = global ? this._globalSubrs : this._localSubrs;\r\n const bias = global ? this._globalSubrBias : this._localSubrBias;\r\n const subr = subrs[(operand + bias) | 0];\r\n if (subr) {\r\n const status = this.execute(subr, depth + 1);\r\n return status === 'return' ? 'continue' : status;\r\n }\r\n return 'continue';\r\n }\r\n private moveTo(dx: number, dy: number) {\r\n this.closeContour();\r\n this._x += dx;\r\n this._y += dy;\r\n this._currentContour = [{ x: this._x, y: this._y, onCurve: true }];\r\n }\r\n private lineTo(dx: number, dy: number) {\r\n this.ensureContour();\r\n this._x += dx;\r\n this._y += dy;\r\n this._currentContour!.push({ x: this._x, y: this._y, onCurve: true });\r\n }\r\n private curveTo(dx1: number, dy1: number, dx2: number, dy2: number, dx3: number, dy3: number) {\r\n this.ensureContour();\r\n const p0 = { x: this._x, y: this._y };\r\n const p1 = { x: p0.x + dx1, y: p0.y + dy1 };\r\n const p2 = { x: p1.x + dx2, y: p1.y + dy2 };\r\n const p3 = { x: p2.x + dx3, y: p2.y + dy3 };\r\n appendCubicAsQuadratics(this._currentContour!, p0, p1, p2, p3);\r\n this._x = p3.x;\r\n this._y = p3.y;\r\n }\r\n private ensureContour() {\r\n if (!this._currentContour) {\r\n this._currentContour = [{ x: this._x, y: this._y, onCurve: true }];\r\n }\r\n }\r\n private closeContour() {\r\n const contour = this._currentContour;\r\n if (contour && contour.length > 0) {\r\n const first = contour[0];\r\n const last = contour[contour.length - 1];\r\n if (first.onCurve && last.onCurve && samePoint(first, last)) {\r\n contour.pop();\r\n }\r\n if (contour.length > 0) {\r\n this._contours.push(contour);\r\n }\r\n }\r\n this._currentContour = null;\r\n }\r\n private applyRLineTo(args: number[]) {\r\n for (let i = 0; i + 1 < args.length; i += 2) {\r\n this.lineTo(args[i], args[i + 1]);\r\n }\r\n }\r\n private applyHVLineTo(args: number[], horizontalFirst: boolean) {\r\n let horizontal = horizontalFirst;\r\n for (const arg of args) {\r\n if (horizontal) {\r\n this.lineTo(arg, 0);\r\n } else {\r\n this.lineTo(0, arg);\r\n }\r\n horizontal = !horizontal;\r\n }\r\n }\r\n private applyRRCurveTo(args: number[]) {\r\n for (let i = 0; i + 5 < args.length; i += 6) {\r\n this.curveTo(args[i], args[i + 1], args[i + 2], args[i + 3], args[i + 4], args[i + 5]);\r\n }\r\n }\r\n private applyRCurveLine(args: number[]) {\r\n let i = 0;\r\n for (; i + 7 < args.length; i += 6) {\r\n this.curveTo(args[i], args[i + 1], args[i + 2], args[i + 3], args[i + 4], args[i + 5]);\r\n }\r\n if (i + 1 < args.length) {\r\n this.lineTo(args[i], args[i + 1]);\r\n }\r\n }\r\n private applyRLineCurve(args: number[]) {\r\n let i = 0;\r\n for (; i + 7 < args.length; i += 2) {\r\n this.lineTo(args[i], args[i + 1]);\r\n }\r\n if (i + 5 < args.length) {\r\n this.curveTo(args[i], args[i + 1], args[i + 2], args[i + 3], args[i + 4], args[i + 5]);\r\n }\r\n }\r\n private applyVVCurveTo(args: number[]) {\r\n let i = 0;\r\n let dx1 = 0;\r\n if (args.length % 4 === 1) {\r\n dx1 = args[i++];\r\n }\r\n while (i + 3 < args.length) {\r\n this.curveTo(dx1, args[i], args[i + 1], args[i + 2], 0, args[i + 3]);\r\n dx1 = 0;\r\n i += 4;\r\n }\r\n }\r\n private applyHHCurveTo(args: number[]) {\r\n let i = 0;\r\n let dy1 = 0;\r\n if (args.length % 4 === 1) {\r\n dy1 = args[i++];\r\n }\r\n while (i + 3 < args.length) {\r\n this.curveTo(args[i], dy1, args[i + 1], args[i + 2], args[i + 3], 0);\r\n dy1 = 0;\r\n i += 4;\r\n }\r\n }\r\n private applyVHCurveTo(args: number[]) {\r\n let i = 0;\r\n let vertical = true;\r\n while (i + 3 < args.length) {\r\n if (vertical) {\r\n const dy1 = args[i++];\r\n const dx2 = args[i++];\r\n const dy2 = args[i++];\r\n const dx3 = args[i++];\r\n const dy3 = i === args.length - 1 ? args[i++] : 0;\r\n this.curveTo(0, dy1, dx2, dy2, dx3, dy3);\r\n } else {\r\n const dx1 = args[i++];\r\n const dx2 = args[i++];\r\n const dy2 = args[i++];\r\n const dy3 = args[i++];\r\n const dx3 = i === args.length - 1 ? args[i++] : 0;\r\n this.curveTo(dx1, 0, dx2, dy2, dx3, dy3);\r\n }\r\n vertical = !vertical;\r\n }\r\n }\r\n private applyHVCurveTo(args: number[]) {\r\n let i = 0;\r\n let horizontal = true;\r\n while (i + 3 < args.length) {\r\n if (horizontal) {\r\n const dx1 = args[i++];\r\n const dx2 = args[i++];\r\n const dy2 = args[i++];\r\n const dy3 = args[i++];\r\n const dx3 = i === args.length - 1 ? args[i++] : 0;\r\n this.curveTo(dx1, 0, dx2, dy2, dx3, dy3);\r\n } else {\r\n const dy1 = args[i++];\r\n const dx2 = args[i++];\r\n const dy2 = args[i++];\r\n const dx3 = args[i++];\r\n const dy3 = i === args.length - 1 ? args[i++] : 0;\r\n this.curveTo(0, dy1, dx2, dy2, dx3, dy3);\r\n }\r\n horizontal = !horizontal;\r\n }\r\n }\r\n private applyHFlex(args: number[]) {\r\n if (args.length < 7) {\r\n return;\r\n }\r\n this.curveTo(args[0], 0, args[1], args[2], args[3], 0);\r\n this.curveTo(args[4], 0, args[5], -args[2], args[6], 0);\r\n }\r\n private applyFlex(args: number[]) {\r\n if (args.length < 12) {\r\n return;\r\n }\r\n this.curveTo(args[0], args[1], args[2], args[3], args[4], args[5]);\r\n this.curveTo(args[6], args[7], args[8], args[9], args[10], args[11]);\r\n }\r\n private applyHFlex1(args: number[]) {\r\n if (args.length < 9) {\r\n return;\r\n }\r\n this.curveTo(args[0], args[1], args[2], args[3], args[4], 0);\r\n this.curveTo(args[5], 0, args[6], args[7], args[8], -(args[1] + args[3] + args[7]));\r\n }\r\n private applyFlex1(args: number[]) {\r\n if (args.length < 11) {\r\n return;\r\n }\r\n const dx = args[0] + args[2] + args[4] + args[6] + args[8];\r\n const dy = args[1] + args[3] + args[5] + args[7] + args[9];\r\n const dx6 = Math.abs(dx) > Math.abs(dy) ? args[10] : -dx;\r\n const dy6 = Math.abs(dx) > Math.abs(dy) ? -dy : args[10];\r\n this.curveTo(args[0], args[1], args[2], args[3], args[4], args[5]);\r\n this.curveTo(args[6], args[7], args[8], args[9], dx6, dy6);\r\n }\r\n private binaryStackOp(op: (a: number, b: number) => number) {\r\n const b = this._stack.pop() ?? 0;\r\n const a = this._stack.pop() ?? 0;\r\n this._stack.push(op(a, b));\r\n }\r\n private applyIfElse() {\r\n const s2 = this._stack.pop() ?? 0;\r\n const s1 = this._stack.pop() ?? 0;\r\n const v2 = this._stack.pop() ?? 0;\r\n const v1 = this._stack.pop() ?? 0;\r\n this._stack.push(v1 <= v2 ? s1 : s2);\r\n }\r\n private exchangeStackTop() {\r\n const a = this._stack.pop();\r\n const b = this._stack.pop();\r\n if (a !== undefined && b !== undefined) {\r\n this._stack.push(a, b);\r\n }\r\n }\r\n private indexStack() {\r\n const index = this._stack.pop() ?? 0;\r\n const i = Math.max(0, this._stack.length - 1 - (index | 0));\r\n this._stack.push(this._stack[i] ?? 0);\r\n }\r\n private rollStack() {\r\n const j = this._stack.pop() ?? 0;\r\n const n = this._stack.pop() ?? 0;\r\n const count = n | 0;\r\n if (count <= 0 || count > this._stack.length) {\r\n return;\r\n }\r\n const segment = this._stack.splice(this._stack.length - count, count);\r\n const shift = (((j | 0) % count) + count) % count;\r\n this._stack.push(...segment.slice(count - shift), ...segment.slice(0, count - shift));\r\n }\r\n}\r\n\r\nfunction isType2NumberByte(b: number) {\r\n return b === 28 || b === 255 || b >= 32;\r\n}\r\n\r\nfunction readNumber(bytes: Uint8Array<ArrayBuffer>, offset: number, kind: 'dict' | 'charstring') {\r\n const b0 = bytes[offset];\r\n if (b0 >= 32 && b0 <= 246) {\r\n return { value: b0 - 139, next: offset + 1 };\r\n }\r\n if (b0 >= 247 && b0 <= 250) {\r\n return { value: (b0 - 247) * 256 + bytes[offset + 1] + 108, next: offset + 2 };\r\n }\r\n if (b0 >= 251 && b0 <= 254) {\r\n return { value: -(b0 - 251) * 256 - bytes[offset + 1] - 108, next: offset + 2 };\r\n }\r\n if (b0 === 28) {\r\n const value = toInt16((bytes[offset + 1] << 8) | bytes[offset + 2]);\r\n return { value, next: offset + 3 };\r\n }\r\n if (b0 === 29 && kind === 'dict') {\r\n const value =\r\n (bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | bytes[offset + 4];\r\n return { value, next: offset + 5 };\r\n }\r\n if (b0 === 30 && kind === 'dict') {\r\n return readRealNumber(bytes, offset + 1);\r\n }\r\n if (b0 === 255) {\r\n const value =\r\n ((bytes[offset + 1] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 8) | bytes[offset + 4]) /\r\n 65536;\r\n return { value, next: offset + 5 };\r\n }\r\n throw new Error(`Invalid CFF number byte: ${b0}`);\r\n}\r\n\r\nfunction readRealNumber(bytes: Uint8Array<ArrayBuffer>, offset: number) {\r\n let text = '';\r\n let i = offset;\r\n let done = false;\r\n while (!done && i < bytes.length) {\r\n const b = bytes[i++];\r\n for (const nibble of [b >> 4, b & 15]) {\r\n if (nibble <= 9) {\r\n text += String(nibble);\r\n } else if (nibble === 10) {\r\n text += '.';\r\n } else if (nibble === 11) {\r\n text += 'E';\r\n } else if (nibble === 12) {\r\n text += 'E-';\r\n } else if (nibble === 14) {\r\n text += '-';\r\n } else if (nibble === 15) {\r\n done = true;\r\n break;\r\n }\r\n }\r\n }\r\n return { value: Number(text), next: i };\r\n}\r\n\r\nfunction toInt16(value: number) {\r\n return value & 0x8000 ? value - 0x10000 : value;\r\n}\r\n\r\nfunction appendCubicAsQuadratics(\r\n contour: GlyphContour,\r\n p0: { x: number; y: number },\r\n p1: { x: number; y: number },\r\n p2: { x: number; y: number },\r\n p3: { x: number; y: number }\r\n) {\r\n const segments = 6;\r\n for (let i = 1; i <= segments; i++) {\r\n const t0 = (i - 1) / segments;\r\n const t1 = i / segments;\r\n const tm = (t0 + t1) * 0.5;\r\n const q0 = cubicPoint(p0, p1, p2, p3, t0);\r\n const q2 = cubicPoint(p0, p1, p2, p3, t1);\r\n const qm = cubicPoint(p0, p1, p2, p3, tm);\r\n const q1 = {\r\n x: 2 * qm.x - 0.5 * q0.x - 0.5 * q2.x,\r\n y: 2 * qm.y - 0.5 * q0.y - 0.5 * q2.y\r\n };\r\n contour.push({ x: q1.x, y: q1.y, onCurve: false }, { x: q2.x, y: q2.y, onCurve: true });\r\n }\r\n}\r\n\r\nfunction cubicPoint(\r\n p0: { x: number; y: number },\r\n p1: { x: number; y: number },\r\n p2: { x: number; y: number },\r\n p3: { x: number; y: number },\r\n t: number\r\n) {\r\n const mt = 1 - t;\r\n const a = mt * mt * mt;\r\n const b = 3 * mt * mt * t;\r\n const c = 3 * mt * t * t;\r\n const d = t * t * t;\r\n return {\r\n x: a * p0.x + b * p1.x + c * p2.x + d * p3.x,\r\n y: a * p0.y + b * p1.y + c * p2.y + d * p3.y\r\n };\r\n}\r\n\r\nfunction samePoint(a: { x: number; y: number }, b: { x: number; y: number }) {\r\n return Math.abs(a.x - b.x) < 1e-6 && Math.abs(a.y - b.y) < 1e-6;\r\n}\r\n\r\nfunction computeBounds(contours: GlyphContour[]) {\r\n if (contours.length === 0) {\r\n return { xMin: 0, yMin: 0, xMax: 0, yMax: 0 };\r\n }\r\n let xMin = Number.POSITIVE_INFINITY;\r\n let yMin = Number.POSITIVE_INFINITY;\r\n let xMax = Number.NEGATIVE_INFINITY;\r\n let yMax = Number.NEGATIVE_INFINITY;\r\n for (const contour of contours) {\r\n for (const point of contour) {\r\n xMin = Math.min(xMin, point.x);\r\n yMin = Math.min(yMin, point.y);\r\n xMax = Math.max(xMax, point.x);\r\n yMax = Math.max(yMax, point.y);\r\n }\r\n }\r\n return { xMin, yMin, xMax, yMax };\r\n}\r\n"],"names":["CFFGlyphProvider","_charStrings","_globalSubrs","_globalSubrBias","_privateInfo","_fdArray","_fdSelect","charStrings","globalSubrs","privateInfo","fdArray","fdSelect","getSubrBias","length","getGlyph","glyphIndex","advanceWidths","leftSideBearings","charString","getPrivateInfo","interpreter","Type2CharStringInterpreter","subrs","subrBias","contours","parse","bounds","computeBounds","advanceWidth","leftSideBearing","xMin","yMin","xMax","yMax","fdIndex","getFDIndex","format","fds","ranges","i","start","first","end","sentinel","fd","parseCFFGlyphProvider","reader","tableOffset","glyphCount","major","uint8","Error","headerSize","offset","nameIndex","readIndex","endOffset","topDictIndex","stringIndex","globalSubrIndex","topDictBytes","objects","topDict","parseDict","charStringsOffset","getDictNumber","readTopPrivateInfo","fdArrayOffset","fdSelectOffset","readFDArray","readFDSelect","privateEntry","get","readPrivateInfo","map","fontDictBytes","fontDict","privateOffset","privateSize","bytes","readBytes","dict","subrsOffset","nRanges","uint16","cursor","push","count","offSize","offsetsStart","dataStart","offsets","readOffset","Math","max","size","value","Uint8Array","buffer","slice","kind","Map","stack","b","isDictOperatorByte","op","String","set","splice","parsed","readNumber","next","key","index","values","_localSubrs","_localSubrBias","_stack","_transient","_contours","_currentContour","_x","_y","_hintCount","_widthConsumed","globalSubrBias","localSubrs","localSubrBias","Array","fill","execute","closeContour","depth","isType2NumberByte","status","handleEscapedOperator","consumeStemHints","ceil","handleOperator","dy","consumeMoveArgs","moveTo","applyRLineTo","consumeArgs","applyHVLineTo","applyRRCurveTo","callSubr","dx","applyRCurveLine","applyRLineCurve","applyVVCurveTo","applyHHCurveTo","applyVHCurveTo","applyHVCurveTo","binaryStackOp","a","pop","abs","applyIfElse","random","sqrt","exchangeStackTop","indexStack","rollStack","applyHFlex","applyFlex","applyHFlex1","applyFlex1","shift","floor","args","unshift","global","operand","undefined","bias","subr","x","y","onCurve","lineTo","ensureContour","curveTo","dx1","dy1","dx2","dy2","dx3","dy3","p0","p1","p2","p3","appendCubicAsQuadratics","contour","last","samePoint","horizontalFirst","horizontal","arg","vertical","dx6","dy6","s2","s1","v2","v1","j","n","segment","b0","toInt16","readRealNumber","text","done","nibble","Number","segments","t0","t1","tm","q0","cubicPoint","q2","qm","q1","t","mt","c","d","POSITIVE_INFINITY","NEGATIVE_INFINITY","point","min"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { SFNTReader } from './sfnt_reader.js';
2
+ import { parseCFFGlyphProvider } from './cff_font.js';
2
3
 
3
4
  const ARG_1_AND_2_ARE_WORDS = 1 << 0;
4
5
  const ARGS_ARE_XY_VALUES = 1 << 1;
@@ -16,6 +17,7 @@ const DEFAULT_MSDF_GLYPH_SIZE = 32;
16
17
  _reader;
17
18
  _tables;
18
19
  _glyphOffsets;
20
+ _cffGlyphProvider;
19
21
  _advanceWidths;
20
22
  _leftSideBearings;
21
23
  _glyphCache;
@@ -33,8 +35,9 @@ const DEFAULT_MSDF_GLYPH_SIZE = 32;
33
35
  const maxp = this.requireTable('maxp');
34
36
  const hhea = this.requireTable('hhea');
35
37
  const hmtx = this.requireTable('hmtx');
36
- const loca = this.requireTable('loca');
37
- this.requireTable('glyf');
38
+ const loca = this.getTable('loca');
39
+ const glyf = this.getTable('glyf');
40
+ const cff = this.getTable('CFF ');
38
41
  this.requireTable('cmap');
39
42
  this._numberOfHMetrics = this._reader.uint16(hhea.offset + 34);
40
43
  this._metrics = {
@@ -44,7 +47,15 @@ const DEFAULT_MSDF_GLYPH_SIZE = 32;
44
47
  lineGap: this._reader.int16(hhea.offset + 8),
45
48
  glyphCount: this._reader.uint16(maxp.offset + 4)
46
49
  };
47
- this._glyphOffsets = parseGlyphOffsets(this._reader, loca.offset, this._metrics.glyphCount, this._reader.int16(head.offset + 50));
50
+ if (loca && glyf) {
51
+ this._glyphOffsets = parseGlyphOffsets(this._reader, loca.offset, this._metrics.glyphCount, this._reader.int16(head.offset + 50));
52
+ this._cffGlyphProvider = null;
53
+ } else if (cff) {
54
+ this._glyphOffsets = null;
55
+ this._cffGlyphProvider = parseCFFGlyphProvider(this._reader, cff.offset, this._metrics.glyphCount);
56
+ } else {
57
+ throw new Error('Unsupported font outline: neither TrueType glyf/loca nor OpenType CFF table found');
58
+ }
48
59
  const metrics = parseHorizontalMetrics(this._reader, hmtx.offset, this._metrics.glyphCount, this._numberOfHMetrics);
49
60
  this._advanceWidths = metrics.advanceWidths;
50
61
  this._leftSideBearings = metrics.leftSideBearings;
@@ -121,6 +132,9 @@ const DEFAULT_MSDF_GLYPH_SIZE = 32;
121
132
  if (depth > 16) {
122
133
  throw new Error(`Composite glyph nesting too deep: ${glyphIndex}`);
123
134
  }
135
+ if (this._cffGlyphProvider) {
136
+ return this._cffGlyphProvider.getGlyph(glyphIndex, this._advanceWidths, this._leftSideBearings);
137
+ }
124
138
  const glyf = this.requireTable('glyf');
125
139
  const offset = this._glyphOffsets[glyphIndex];
126
140
  const nextOffset = this._glyphOffsets[glyphIndex + 1];
@@ -1 +1 @@
1
- {"version":3,"file":"font_asset.js","sources":["../../../src/text/font/font_asset.ts"],"sourcesContent":["import { SFNTReader } from './sfnt_reader';\r\nimport type { FontMetrics, GlyphContour, GlyphData, GlyphPoint } from './types';\r\n\r\nexport type FontAssetFetchOptions = {\r\n pageSize?: number;\r\n glyphSize?: number;\r\n};\r\n\r\nexport type FontAssetMSDFAtlasSettings = Readonly<{\r\n pageSize: number;\r\n glyphSize: number;\r\n}>;\r\n\r\ntype TableRecord = {\r\n offset: number;\r\n length: number;\r\n};\r\n\r\ntype GlyphHeader = {\r\n numberOfContours: number;\r\n xMin: number;\r\n yMin: number;\r\n xMax: number;\r\n yMax: number;\r\n};\r\n\r\ntype CompositeComponent = {\r\n glyphIndex: number;\r\n dx: number;\r\n dy: number;\r\n xx: number;\r\n xy: number;\r\n yx: number;\r\n yy: number;\r\n};\r\n\r\ntype CoverageTable =\r\n | { format: 1; glyphs: Uint16Array<ArrayBuffer> }\r\n | { format: 2; ranges: { start: number; end: number; startIndex: number }[] };\r\n\r\ntype ClassDefTable =\r\n | { format: 1; startGlyphId: number; classes: Uint16Array<ArrayBuffer> }\r\n | { format: 2; ranges: { start: number; end: number; classId: number }[] };\r\n\r\ntype GPOSPairSubtable =\r\n | {\r\n kind: 'format1';\r\n coverage: CoverageTable;\r\n pairs: Map<number, Map<number, PairAdjustment>>;\r\n }\r\n | {\r\n kind: 'format2';\r\n coverage: CoverageTable;\r\n classDef1: ClassDefTable;\r\n classDef2: ClassDefTable;\r\n class1Count: number;\r\n class2Count: number;\r\n values: PairAdjustment[];\r\n };\r\n\r\n/**\r\n * Minimal horizontal pair adjustment extracted from GPOS.\r\n *\r\n * @public\r\n */\r\nexport type PairAdjustment = {\r\n firstXPlacement: number;\r\n firstXAdvance: number;\r\n secondXPlacement: number;\r\n secondXAdvance: number;\r\n};\r\n\r\nconst ARG_1_AND_2_ARE_WORDS = 1 << 0;\r\nconst ARGS_ARE_XY_VALUES = 1 << 1;\r\nconst WE_HAVE_A_SCALE = 1 << 3;\r\nconst MORE_COMPONENTS = 1 << 5;\r\nconst WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;\r\nconst WE_HAVE_A_TWO_BY_TWO = 1 << 7;\r\nconst DEFAULT_MSDF_ATLAS_PAGE_SIZE = 1024;\r\nconst DEFAULT_MSDF_GLYPH_SIZE = 32;\r\n\r\n/**\r\n * Minimal runtime font asset for TrueType outlines.\r\n *\r\n * @public\r\n */\r\nexport class FontAsset {\r\n private readonly _reader: SFNTReader;\r\n private readonly _tables: Map<string, TableRecord>;\r\n private readonly _glyphOffsets: Uint32Array<ArrayBuffer>;\r\n private readonly _advanceWidths: Uint16Array<ArrayBuffer>;\r\n private readonly _leftSideBearings: Int16Array<ArrayBuffer>;\r\n private readonly _glyphCache: Map<number, GlyphData | null>;\r\n private readonly _cmapFormat4: { offset: number; platformId: number; encodingId: number } | null;\r\n private readonly _cmapFormat12: { offset: number; platformId: number; encodingId: number } | null;\r\n private readonly _kernPairs: Map<number, number>;\r\n private readonly _gposPairs: GPOSPairSubtable[];\r\n private readonly _metrics: FontMetrics;\r\n private readonly _numberOfHMetrics: number;\r\n private readonly _msdfAtlasSettings: FontAssetMSDFAtlasSettings;\r\n private constructor(buffer: ArrayBuffer, options?: FontAssetFetchOptions) {\r\n this._reader = new SFNTReader(buffer);\r\n this._tables = parseTableDirectory(this._reader);\r\n const head = this.requireTable('head');\r\n const maxp = this.requireTable('maxp');\r\n const hhea = this.requireTable('hhea');\r\n const hmtx = this.requireTable('hmtx');\r\n const loca = this.requireTable('loca');\r\n this.requireTable('glyf');\r\n this.requireTable('cmap');\r\n this._numberOfHMetrics = this._reader.uint16(hhea.offset + 34);\r\n this._metrics = {\r\n unitsPerEm: this._reader.uint16(head.offset + 18),\r\n ascent: this._reader.int16(hhea.offset + 4),\r\n descent: this._reader.int16(hhea.offset + 6),\r\n lineGap: this._reader.int16(hhea.offset + 8),\r\n glyphCount: this._reader.uint16(maxp.offset + 4)\r\n };\r\n this._glyphOffsets = parseGlyphOffsets(\r\n this._reader,\r\n loca.offset,\r\n this._metrics.glyphCount,\r\n this._reader.int16(head.offset + 50)\r\n );\r\n const metrics = parseHorizontalMetrics(\r\n this._reader,\r\n hmtx.offset,\r\n this._metrics.glyphCount,\r\n this._numberOfHMetrics\r\n );\r\n this._advanceWidths = metrics.advanceWidths;\r\n this._leftSideBearings = metrics.leftSideBearings;\r\n const cmap = parseBestCMap(this._reader, this.requireTable('cmap').offset);\r\n this._cmapFormat4 = cmap.format4;\r\n this._cmapFormat12 = cmap.format12;\r\n this._kernPairs = parseKernPairs(this._reader, this.getTable('kern'));\r\n this._gposPairs = parseGPOSPairs(this._reader, this.getTable('GPOS'));\r\n this._glyphCache = new Map();\r\n this._msdfAtlasSettings = Object.freeze({\r\n pageSize: normalizeMSDFAtlasPageSize(options?.pageSize),\r\n glyphSize: normalizeMSDFGlyphSize(options?.glyphSize)\r\n });\r\n }\r\n static fromBuffer(buffer: ArrayBuffer, options?: FontAssetFetchOptions) {\r\n return new FontAsset(buffer, options);\r\n }\r\n get metrics(): FontMetrics {\r\n return this._metrics;\r\n }\r\n get msdfAtlasSettings(): FontAssetMSDFAtlasSettings {\r\n return this._msdfAtlasSettings;\r\n }\r\n get msdfAtlasPageSize() {\r\n return this._msdfAtlasSettings.pageSize;\r\n }\r\n get msdfGlyphSize() {\r\n return this._msdfAtlasSettings.glyphSize;\r\n }\r\n getGlyphIndex(codePoint: number) {\r\n if (this._cmapFormat12) {\r\n const glyphIndex = lookupCMapFormat12(this._reader, this._cmapFormat12.offset, codePoint);\r\n if (glyphIndex !== 0) {\r\n return glyphIndex;\r\n }\r\n }\r\n if (this._cmapFormat4 && codePoint <= 0xffff) {\r\n return lookupCMapFormat4(this._reader, this._cmapFormat4.offset, codePoint);\r\n }\r\n return 0;\r\n }\r\n getKerning(leftGlyphIndex: number, rightGlyphIndex: number) {\r\n const gpos = this.getPairAdjustment(leftGlyphIndex, rightGlyphIndex);\r\n if (gpos) {\r\n return gpos.firstXAdvance + gpos.secondXAdvance;\r\n }\r\n return this._kernPairs.get((leftGlyphIndex << 16) | rightGlyphIndex) ?? 0;\r\n }\r\n getPairAdjustment(leftGlyphIndex: number, rightGlyphIndex: number): PairAdjustment | null {\r\n return lookupGPOSPair(this._gposPairs, leftGlyphIndex, rightGlyphIndex);\r\n }\r\n getGlyph(glyphIndex: number): GlyphData | null {\r\n if (glyphIndex < 0 || glyphIndex >= this._metrics.glyphCount) {\r\n return null;\r\n }\r\n if (this._glyphCache.has(glyphIndex)) {\r\n return this._glyphCache.get(glyphIndex)!;\r\n }\r\n const glyph = this.loadGlyph(glyphIndex, 0);\r\n this._glyphCache.set(glyphIndex, glyph);\r\n return glyph;\r\n }\r\n private getTable(tag: string) {\r\n return this._tables.get(tag) ?? null;\r\n }\r\n private requireTable(tag: string) {\r\n const table = this.getTable(tag);\r\n if (!table) {\r\n throw new Error(`Font table not found: ${tag}`);\r\n }\r\n return table;\r\n }\r\n private loadGlyph(glyphIndex: number, depth: number): GlyphData | null {\r\n if (depth > 16) {\r\n throw new Error(`Composite glyph nesting too deep: ${glyphIndex}`);\r\n }\r\n const glyf = this.requireTable('glyf');\r\n const offset = this._glyphOffsets[glyphIndex];\r\n const nextOffset = this._glyphOffsets[glyphIndex + 1];\r\n if (offset === nextOffset) {\r\n return buildGlyphData(glyphIndex, this._advanceWidths, this._leftSideBearings, [], 0, 0, 0, 0);\r\n }\r\n const glyphOffset = glyf.offset + offset;\r\n const header = parseGlyphHeader(this._reader, glyphOffset);\r\n if (header.numberOfContours >= 0) {\r\n const contours = parseSimpleGlyph(this._reader, glyphOffset, header.numberOfContours);\r\n return buildGlyphData(\r\n glyphIndex,\r\n this._advanceWidths,\r\n this._leftSideBearings,\r\n contours,\r\n header.xMin,\r\n header.yMin,\r\n header.xMax,\r\n header.yMax\r\n );\r\n }\r\n const contours = parseCompositeGlyph(this._reader, glyphOffset, (childIndex) =>\r\n this.loadGlyph(childIndex, depth + 1)\r\n );\r\n const bounds = computeBounds(contours);\r\n return buildGlyphData(\r\n glyphIndex,\r\n this._advanceWidths,\r\n this._leftSideBearings,\r\n contours,\r\n bounds.xMin,\r\n bounds.yMin,\r\n bounds.xMax,\r\n bounds.yMax\r\n );\r\n }\r\n}\r\n\r\nfunction parseTableDirectory(reader: SFNTReader) {\r\n const numTables = reader.uint16(4);\r\n const tables = new Map<string, TableRecord>();\r\n let offset = 12;\r\n for (let i = 0; i < numTables; i++) {\r\n const tag = reader.tag(offset);\r\n tables.set(tag, {\r\n offset: reader.uint32(offset + 8),\r\n length: reader.uint32(offset + 12)\r\n });\r\n offset += 16;\r\n }\r\n return tables;\r\n}\r\n\r\nfunction parseGlyphOffsets(reader: SFNTReader, offset: number, glyphCount: number, indexToLocFormat: number) {\r\n const result = new Uint32Array(glyphCount + 1);\r\n if (indexToLocFormat === 0) {\r\n for (let i = 0; i <= glyphCount; i++) {\r\n result[i] = reader.uint16(offset + i * 2) * 2;\r\n }\r\n } else {\r\n for (let i = 0; i <= glyphCount; i++) {\r\n result[i] = reader.uint32(offset + i * 4);\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction parseHorizontalMetrics(\r\n reader: SFNTReader,\r\n offset: number,\r\n glyphCount: number,\r\n numberOfHMetrics: number\r\n) {\r\n const advanceWidths = new Uint16Array(glyphCount);\r\n const leftSideBearings = new Int16Array(glyphCount);\r\n let cursor = offset;\r\n let lastAdvanceWidth = 0;\r\n for (let i = 0; i < glyphCount; i++) {\r\n if (i < numberOfHMetrics) {\r\n lastAdvanceWidth = reader.uint16(cursor);\r\n advanceWidths[i] = lastAdvanceWidth;\r\n leftSideBearings[i] = reader.int16(cursor + 2);\r\n cursor += 4;\r\n } else {\r\n advanceWidths[i] = lastAdvanceWidth;\r\n leftSideBearings[i] = reader.int16(cursor);\r\n cursor += 2;\r\n }\r\n }\r\n return { advanceWidths, leftSideBearings };\r\n}\r\n\r\nfunction parseBestCMap(reader: SFNTReader, offset: number) {\r\n const numTables = reader.uint16(offset + 2);\r\n let format4: { offset: number; platformId: number; encodingId: number } | null = null;\r\n let format12: { offset: number; platformId: number; encodingId: number } | null = null;\r\n for (let i = 0; i < numTables; i++) {\r\n const recordOffset = offset + 4 + i * 8;\r\n const platformId = reader.uint16(recordOffset);\r\n const encodingId = reader.uint16(recordOffset + 2);\r\n const subtableOffset = offset + reader.uint32(recordOffset + 4);\r\n const format = reader.uint16(subtableOffset);\r\n if (format === 12) {\r\n if (!format12 || isPreferredCMap(platformId, encodingId, format12.platformId, format12.encodingId)) {\r\n format12 = { offset: subtableOffset, platformId, encodingId };\r\n }\r\n } else if (format === 4) {\r\n if (!format4 || isPreferredCMap(platformId, encodingId, format4.platformId, format4.encodingId)) {\r\n format4 = { offset: subtableOffset, platformId, encodingId };\r\n }\r\n }\r\n }\r\n return { format4, format12 };\r\n}\r\n\r\nfunction isPreferredCMap(\r\n platformId: number,\r\n encodingId: number,\r\n currentPlatformId: number,\r\n currentEncodingId: number\r\n) {\r\n const nextScore = getCMapScore(platformId, encodingId);\r\n const currentScore = getCMapScore(currentPlatformId, currentEncodingId);\r\n return nextScore > currentScore;\r\n}\r\n\r\nfunction getCMapScore(platformId: number, encodingId: number) {\r\n if (platformId === 3 && encodingId === 10) {\r\n return 5;\r\n }\r\n if (platformId === 0 && encodingId <= 6) {\r\n return 4;\r\n }\r\n if (platformId === 3 && encodingId === 1) {\r\n return 3;\r\n }\r\n if (platformId === 0) {\r\n return 2;\r\n }\r\n return 1;\r\n}\r\n\r\nfunction lookupCMapFormat12(reader: SFNTReader, offset: number, codePoint: number) {\r\n const nGroups = reader.uint32(offset + 12);\r\n let low = 0;\r\n let high = nGroups - 1;\r\n while (low <= high) {\r\n const mid = (low + high) >> 1;\r\n const groupOffset = offset + 16 + mid * 12;\r\n const startCharCode = reader.uint32(groupOffset);\r\n const endCharCode = reader.uint32(groupOffset + 4);\r\n if (codePoint < startCharCode) {\r\n high = mid - 1;\r\n } else if (codePoint > endCharCode) {\r\n low = mid + 1;\r\n } else {\r\n return reader.uint32(groupOffset + 8) + (codePoint - startCharCode);\r\n }\r\n }\r\n return 0;\r\n}\r\n\r\nfunction lookupCMapFormat4(reader: SFNTReader, offset: number, codePoint: number) {\r\n const segCount = reader.uint16(offset + 6) >> 1;\r\n const endCodeOffset = offset + 14;\r\n const startCodeOffset = endCodeOffset + segCount * 2 + 2;\r\n const idDeltaOffset = startCodeOffset + segCount * 2;\r\n const idRangeOffsetOffset = idDeltaOffset + segCount * 2;\r\n for (let i = 0; i < segCount; i++) {\r\n const endCode = reader.uint16(endCodeOffset + i * 2);\r\n if (codePoint > endCode) {\r\n continue;\r\n }\r\n const startCode = reader.uint16(startCodeOffset + i * 2);\r\n if (codePoint < startCode) {\r\n return 0;\r\n }\r\n const idDelta = reader.int16(idDeltaOffset + i * 2);\r\n const idRangeOffset = reader.uint16(idRangeOffsetOffset + i * 2);\r\n if (idRangeOffset === 0) {\r\n return (codePoint + idDelta) & 0xffff;\r\n }\r\n const glyphIndexAddress = idRangeOffsetOffset + i * 2 + idRangeOffset + (codePoint - startCode) * 2;\r\n const glyphIndex = reader.uint16(glyphIndexAddress);\r\n return glyphIndex === 0 ? 0 : (glyphIndex + idDelta) & 0xffff;\r\n }\r\n return 0;\r\n}\r\n\r\nfunction parseKernPairs(reader: SFNTReader, table: TableRecord | null) {\r\n const result = new Map<number, number>();\r\n if (!table || table.length < 4) {\r\n return result;\r\n }\r\n const version = reader.uint16(table.offset);\r\n if (version !== 0) {\r\n return result;\r\n }\r\n const nTables = reader.uint16(table.offset + 2);\r\n let cursor = table.offset + 4;\r\n for (let i = 0; i < nTables; i++) {\r\n const length = reader.uint16(cursor + 2);\r\n const coverage = reader.uint16(cursor + 4);\r\n const format = coverage >> 8;\r\n if (format === 0) {\r\n const nPairs = reader.uint16(cursor + 6);\r\n let pairOffset = cursor + 14;\r\n for (let j = 0; j < nPairs; j++) {\r\n const left = reader.uint16(pairOffset);\r\n const right = reader.uint16(pairOffset + 2);\r\n const value = reader.int16(pairOffset + 4);\r\n result.set((left << 16) | right, value);\r\n pairOffset += 6;\r\n }\r\n }\r\n cursor += length;\r\n }\r\n return result;\r\n}\r\n\r\nfunction parseGPOSPairs(reader: SFNTReader, table: TableRecord | null) {\r\n if (!table || table.length < 10) {\r\n return [];\r\n }\r\n const majorVersion = reader.uint16(table.offset);\r\n if (majorVersion !== 1) {\r\n return [];\r\n }\r\n const featureListOffset = reader.uint16(table.offset + 6);\r\n const lookupListOffset = reader.uint16(table.offset + 8);\r\n if (!featureListOffset || !lookupListOffset) {\r\n return [];\r\n }\r\n const featureLookupIndices = collectGPOSFeatureLookupIndices(reader, table.offset + featureListOffset);\r\n if (featureLookupIndices.length === 0) {\r\n return [];\r\n }\r\n return parseGPOSLookupSubtables(\r\n reader,\r\n table.offset + lookupListOffset,\r\n table.offset,\r\n featureLookupIndices\r\n );\r\n}\r\n\r\nfunction collectGPOSFeatureLookupIndices(reader: SFNTReader, featureListOffset: number) {\r\n const featureCount = reader.uint16(featureListOffset);\r\n const featureTags = new Set(['kern']);\r\n const lookupIndices = new Set<number>();\r\n for (let i = 0; i < featureCount; i++) {\r\n const recordOffset = featureListOffset + 2 + i * 6;\r\n const tag = reader.tag(recordOffset);\r\n if (!featureTags.has(tag)) {\r\n continue;\r\n }\r\n const featureOffset = featureListOffset + reader.uint16(recordOffset + 4);\r\n const lookupIndexCount = reader.uint16(featureOffset + 2);\r\n for (let j = 0; j < lookupIndexCount; j++) {\r\n lookupIndices.add(reader.uint16(featureOffset + 4 + j * 2));\r\n }\r\n }\r\n return [...lookupIndices].sort((a, b) => a - b);\r\n}\r\n\r\nfunction parseGPOSLookupSubtables(\r\n reader: SFNTReader,\r\n lookupListOffset: number,\r\n gposOffset: number,\r\n lookupIndices: number[]\r\n) {\r\n const lookupCount = reader.uint16(lookupListOffset);\r\n const result: GPOSPairSubtable[] = [];\r\n for (const lookupIndex of lookupIndices) {\r\n if (lookupIndex >= lookupCount) {\r\n continue;\r\n }\r\n const lookupOffset = lookupListOffset + reader.uint16(lookupListOffset + 2 + lookupIndex * 2);\r\n const lookupType = reader.uint16(lookupOffset);\r\n const subtableCount = reader.uint16(lookupOffset + 4);\r\n for (let i = 0; i < subtableCount; i++) {\r\n const subtableOffset = lookupOffset + reader.uint16(lookupOffset + 6 + i * 2);\r\n if (lookupType === 2) {\r\n const parsed = parsePairPosSubtable(reader, subtableOffset);\r\n if (parsed) {\r\n result.push(parsed);\r\n }\r\n } else if (lookupType === 9) {\r\n const extensionLookupType = reader.uint16(subtableOffset + 2);\r\n const extensionOffset = reader.uint32(subtableOffset + 4);\r\n if (extensionLookupType === 2) {\r\n const parsed = parsePairPosSubtable(reader, subtableOffset + extensionOffset);\r\n if (parsed) {\r\n result.push(parsed);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction parsePairPosSubtable(reader: SFNTReader, offset: number): GPOSPairSubtable | null {\r\n const format = reader.uint16(offset);\r\n if (format === 1) {\r\n return parsePairPosFormat1(reader, offset);\r\n }\r\n if (format === 2) {\r\n return parsePairPosFormat2(reader, offset);\r\n }\r\n return null;\r\n}\r\n\r\nfunction parsePairPosFormat1(reader: SFNTReader, offset: number): GPOSPairSubtable {\r\n const coverage = parseCoverageTable(reader, offset + reader.uint16(offset + 2));\r\n const valueFormat1 = reader.uint16(offset + 4);\r\n const valueFormat2 = reader.uint16(offset + 6);\r\n const pairSetCount = reader.uint16(offset + 8);\r\n const pairs = new Map<number, Map<number, PairAdjustment>>();\r\n for (let i = 0; i < pairSetCount; i++) {\r\n const firstGlyph = getCoverageGlyph(coverage, i);\r\n if (firstGlyph < 0) {\r\n continue;\r\n }\r\n const pairSetOffset = offset + reader.uint16(offset + 10 + i * 2);\r\n const pairValueCount = reader.uint16(pairSetOffset);\r\n let cursor = pairSetOffset + 2;\r\n const secondMap = new Map<number, PairAdjustment>();\r\n for (let j = 0; j < pairValueCount; j++) {\r\n const secondGlyph = reader.uint16(cursor);\r\n cursor += 2;\r\n const value1 = readValueRecordX(reader, cursor, valueFormat1);\r\n cursor += getValueRecordSize(valueFormat1);\r\n const value2 = readValueRecordX(reader, cursor, valueFormat2);\r\n cursor += getValueRecordSize(valueFormat2);\r\n const adjustment = {\r\n firstXPlacement: value1.xPlacement,\r\n firstXAdvance: value1.xAdvance,\r\n secondXPlacement: value2.xPlacement,\r\n secondXAdvance: value2.xAdvance\r\n } satisfies PairAdjustment;\r\n if (\r\n adjustment.firstXPlacement !== 0 ||\r\n adjustment.firstXAdvance !== 0 ||\r\n adjustment.secondXPlacement !== 0 ||\r\n adjustment.secondXAdvance !== 0\r\n ) {\r\n secondMap.set(secondGlyph, adjustment);\r\n }\r\n }\r\n pairs.set(firstGlyph, secondMap);\r\n }\r\n return { kind: 'format1', coverage, pairs };\r\n}\r\n\r\nfunction parsePairPosFormat2(reader: SFNTReader, offset: number): GPOSPairSubtable {\r\n const coverage = parseCoverageTable(reader, offset + reader.uint16(offset + 2));\r\n const valueFormat1 = reader.uint16(offset + 4);\r\n const valueFormat2 = reader.uint16(offset + 6);\r\n const classDef1 = parseClassDefTable(reader, offset + reader.uint16(offset + 8));\r\n const classDef2 = parseClassDefTable(reader, offset + reader.uint16(offset + 10));\r\n const class1Count = reader.uint16(offset + 12);\r\n const class2Count = reader.uint16(offset + 14);\r\n const values: PairAdjustment[] = new Array(class1Count * class2Count);\r\n let cursor = offset + 16;\r\n for (let c1 = 0; c1 < class1Count; c1++) {\r\n for (let c2 = 0; c2 < class2Count; c2++) {\r\n const value1 = readValueRecordX(reader, cursor, valueFormat1);\r\n cursor += getValueRecordSize(valueFormat1);\r\n const value2 = readValueRecordX(reader, cursor, valueFormat2);\r\n cursor += getValueRecordSize(valueFormat2);\r\n values[c1 * class2Count + c2] = {\r\n firstXPlacement: value1.xPlacement,\r\n firstXAdvance: value1.xAdvance,\r\n secondXPlacement: value2.xPlacement,\r\n secondXAdvance: value2.xAdvance\r\n };\r\n }\r\n }\r\n return { kind: 'format2', coverage, classDef1, classDef2, class1Count, class2Count, values };\r\n}\r\n\r\nfunction parseCoverageTable(reader: SFNTReader, offset: number): CoverageTable {\r\n const format = reader.uint16(offset);\r\n if (format === 1) {\r\n const glyphCount = reader.uint16(offset + 2);\r\n const glyphs = new Uint16Array(glyphCount);\r\n for (let i = 0; i < glyphCount; i++) {\r\n glyphs[i] = reader.uint16(offset + 4 + i * 2);\r\n }\r\n return { format: 1, glyphs };\r\n }\r\n const rangeCount = reader.uint16(offset + 2);\r\n const ranges: { start: number; end: number; startIndex: number }[] = [];\r\n for (let i = 0; i < rangeCount; i++) {\r\n const rangeOffset = offset + 4 + i * 6;\r\n ranges.push({\r\n start: reader.uint16(rangeOffset),\r\n end: reader.uint16(rangeOffset + 2),\r\n startIndex: reader.uint16(rangeOffset + 4)\r\n });\r\n }\r\n return { format: 2, ranges };\r\n}\r\n\r\nfunction getCoverageGlyph(coverage: CoverageTable, index: number) {\r\n if (coverage.format === 1) {\r\n return coverage.glyphs[index] ?? -1;\r\n }\r\n for (const range of coverage.ranges) {\r\n const rangeLength = range.end - range.start + 1;\r\n if (index >= range.startIndex && index < range.startIndex + rangeLength) {\r\n return range.start + (index - range.startIndex);\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\nfunction coverageContains(coverage: CoverageTable, glyphIndex: number) {\r\n if (coverage.format === 1) {\r\n return binarySearchU16(coverage.glyphs, glyphIndex) >= 0;\r\n }\r\n for (const range of coverage.ranges) {\r\n if (glyphIndex >= range.start && glyphIndex <= range.end) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction parseClassDefTable(reader: SFNTReader, offset: number): ClassDefTable {\r\n const format = reader.uint16(offset);\r\n if (format === 1) {\r\n const startGlyphId = reader.uint16(offset + 2);\r\n const glyphCount = reader.uint16(offset + 4);\r\n const classes = new Uint16Array(glyphCount);\r\n for (let i = 0; i < glyphCount; i++) {\r\n classes[i] = reader.uint16(offset + 6 + i * 2);\r\n }\r\n return { format: 1, startGlyphId, classes };\r\n }\r\n const classRangeCount = reader.uint16(offset + 2);\r\n const ranges: { start: number; end: number; classId: number }[] = [];\r\n for (let i = 0; i < classRangeCount; i++) {\r\n const rangeOffset = offset + 4 + i * 6;\r\n ranges.push({\r\n start: reader.uint16(rangeOffset),\r\n end: reader.uint16(rangeOffset + 2),\r\n classId: reader.uint16(rangeOffset + 4)\r\n });\r\n }\r\n return { format: 2, ranges };\r\n}\r\n\r\nfunction getGlyphClass(classDef: ClassDefTable, glyphIndex: number) {\r\n if (classDef.format === 1) {\r\n const index = glyphIndex - classDef.startGlyphId;\r\n return index >= 0 && index < classDef.classes.length ? classDef.classes[index] : 0;\r\n }\r\n for (const range of classDef.ranges) {\r\n if (glyphIndex >= range.start && glyphIndex <= range.end) {\r\n return range.classId;\r\n }\r\n }\r\n return 0;\r\n}\r\n\r\nfunction readValueRecordX(reader: SFNTReader, offset: number, valueFormat: number) {\r\n let cursor = offset;\r\n let xPlacement = 0;\r\n let xAdvance = 0;\r\n if (valueFormat & 0x0001) {\r\n xPlacement = reader.int16(cursor);\r\n cursor += 2;\r\n }\r\n if (valueFormat & 0x0002) {\r\n cursor += 2;\r\n }\r\n if (valueFormat & 0x0004) {\r\n xAdvance = reader.int16(cursor);\r\n cursor += 2;\r\n }\r\n if (valueFormat & 0x0008) {\r\n cursor += 2;\r\n }\r\n if (valueFormat & 0x0010) {\r\n cursor += 2;\r\n }\r\n if (valueFormat & 0x0020) {\r\n cursor += 2;\r\n }\r\n if (valueFormat & 0x0040) {\r\n cursor += 2;\r\n }\r\n if (valueFormat & 0x0080) {\r\n cursor += 2;\r\n }\r\n return { xPlacement, xAdvance };\r\n}\r\n\r\nfunction getValueRecordSize(valueFormat: number) {\r\n let size = 0;\r\n for (let bit = 0; bit < 8; bit++) {\r\n if (valueFormat & (1 << bit)) {\r\n size += 2;\r\n }\r\n }\r\n return size;\r\n}\r\n\r\nfunction lookupGPOSPair(subtables: GPOSPairSubtable[], leftGlyphIndex: number, rightGlyphIndex: number) {\r\n let merged: PairAdjustment | null = null;\r\n for (const subtable of subtables) {\r\n if (!coverageContains(subtable.coverage, leftGlyphIndex)) {\r\n continue;\r\n }\r\n if (subtable.kind === 'format1') {\r\n const secondMap = subtable.pairs.get(leftGlyphIndex);\r\n if (secondMap) {\r\n const adjustment = secondMap.get(rightGlyphIndex);\r\n if (adjustment) {\r\n merged = mergePairAdjustment(merged, adjustment);\r\n }\r\n }\r\n } else {\r\n const class1 = getGlyphClass(subtable.classDef1, leftGlyphIndex);\r\n const class2 = getGlyphClass(subtable.classDef2, rightGlyphIndex);\r\n if (class1 < subtable.class1Count && class2 < subtable.class2Count) {\r\n const adjustment = subtable.values[class1 * subtable.class2Count + class2];\r\n if (adjustment) {\r\n merged = mergePairAdjustment(merged, adjustment);\r\n }\r\n }\r\n }\r\n }\r\n return merged;\r\n}\r\n\r\nfunction binarySearchU16(values: Uint16Array<ArrayBuffer>, target: number) {\r\n let low = 0;\r\n let high = values.length - 1;\r\n while (low <= high) {\r\n const mid = (low + high) >> 1;\r\n const value = values[mid];\r\n if (value < target) {\r\n low = mid + 1;\r\n } else if (value > target) {\r\n high = mid - 1;\r\n } else {\r\n return mid;\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\nfunction mergePairAdjustment(base: PairAdjustment | null, next: PairAdjustment): PairAdjustment {\r\n if (!base) {\r\n return { ...next };\r\n }\r\n return {\r\n firstXPlacement: base.firstXPlacement + next.firstXPlacement,\r\n firstXAdvance: base.firstXAdvance + next.firstXAdvance,\r\n secondXPlacement: base.secondXPlacement + next.secondXPlacement,\r\n secondXAdvance: base.secondXAdvance + next.secondXAdvance\r\n };\r\n}\r\n\r\nfunction parseGlyphHeader(reader: SFNTReader, offset: number): GlyphHeader {\r\n return {\r\n numberOfContours: reader.int16(offset),\r\n xMin: reader.int16(offset + 2),\r\n yMin: reader.int16(offset + 4),\r\n xMax: reader.int16(offset + 6),\r\n yMax: reader.int16(offset + 8)\r\n };\r\n}\r\n\r\nfunction parseSimpleGlyph(reader: SFNTReader, offset: number, numberOfContours: number): GlyphContour[] {\r\n const endPts: number[] = [];\r\n let cursor = offset + 10;\r\n for (let i = 0; i < numberOfContours; i++) {\r\n endPts.push(reader.uint16(cursor));\r\n cursor += 2;\r\n }\r\n const pointCount = endPts[numberOfContours - 1] + 1;\r\n const instructionLength = reader.uint16(cursor);\r\n cursor += 2 + instructionLength;\r\n const flags = new Uint8Array(pointCount);\r\n for (let i = 0; i < pointCount; ) {\r\n const flag = reader.uint8(cursor++);\r\n flags[i++] = flag;\r\n if (flag & 0x08) {\r\n const repeatCount = reader.uint8(cursor++);\r\n for (let j = 0; j < repeatCount; j++) {\r\n flags[i++] = flag;\r\n }\r\n }\r\n }\r\n const xs = new Int16Array(pointCount);\r\n const ys = new Int16Array(pointCount);\r\n let currentX = 0;\r\n for (let i = 0; i < pointCount; i++) {\r\n const flag = flags[i];\r\n if (flag & 0x02) {\r\n const dx = reader.uint8(cursor++);\r\n currentX += flag & 0x10 ? dx : -dx;\r\n } else if (!(flag & 0x10)) {\r\n currentX += reader.int16(cursor);\r\n cursor += 2;\r\n }\r\n xs[i] = currentX;\r\n }\r\n let currentY = 0;\r\n for (let i = 0; i < pointCount; i++) {\r\n const flag = flags[i];\r\n if (flag & 0x04) {\r\n const dy = reader.uint8(cursor++);\r\n currentY += flag & 0x20 ? dy : -dy;\r\n } else if (!(flag & 0x20)) {\r\n currentY += reader.int16(cursor);\r\n cursor += 2;\r\n }\r\n ys[i] = currentY;\r\n }\r\n const points: GlyphPoint[] = [];\r\n for (let i = 0; i < pointCount; i++) {\r\n points.push({\r\n x: xs[i],\r\n y: ys[i],\r\n onCurve: !!(flags[i] & 0x01)\r\n });\r\n }\r\n const contours: GlyphContour[] = [];\r\n let start = 0;\r\n for (const end of endPts) {\r\n contours.push(expandImplicitPoints(points.slice(start, end + 1)));\r\n start = end + 1;\r\n }\r\n return contours;\r\n}\r\n\r\nfunction parseCompositeGlyph(\r\n reader: SFNTReader,\r\n offset: number,\r\n loadGlyph: (glyphIndex: number) => GlyphData | null\r\n): GlyphContour[] {\r\n let cursor = offset + 10;\r\n const contours: GlyphContour[] = [];\r\n let flags = 0;\r\n do {\r\n flags = reader.uint16(cursor);\r\n const glyphIndex = reader.uint16(cursor + 2);\r\n cursor += 4;\r\n const component = parseCompositeComponent(reader, cursor, flags, glyphIndex);\r\n cursor = component.cursor;\r\n const child = loadGlyph(component.data.glyphIndex);\r\n if (child) {\r\n for (const contour of child.contours) {\r\n contours.push(\r\n contour.map((point) => ({\r\n x: point.x * component.data.xx + point.y * component.data.xy + component.data.dx,\r\n y: point.x * component.data.yx + point.y * component.data.yy + component.data.dy,\r\n onCurve: point.onCurve\r\n }))\r\n );\r\n }\r\n }\r\n } while (flags & MORE_COMPONENTS);\r\n return contours;\r\n}\r\n\r\nfunction parseCompositeComponent(reader: SFNTReader, offset: number, flags: number, glyphIndex: number) {\r\n let cursor = offset;\r\n let arg1 = 0;\r\n let arg2 = 0;\r\n if (flags & ARG_1_AND_2_ARE_WORDS) {\r\n arg1 = reader.int16(cursor);\r\n arg2 = reader.int16(cursor + 2);\r\n cursor += 4;\r\n } else {\r\n arg1 = reader.int8(cursor);\r\n arg2 = reader.int8(cursor + 1);\r\n cursor += 2;\r\n }\r\n let dx = 0;\r\n let dy = 0;\r\n if (flags & ARGS_ARE_XY_VALUES) {\r\n dx = arg1;\r\n dy = arg2;\r\n }\r\n let xx = 1;\r\n let xy = 0;\r\n let yx = 0;\r\n let yy = 1;\r\n if (flags & WE_HAVE_A_SCALE) {\r\n const scale = readF2Dot14(reader, cursor);\r\n cursor += 2;\r\n xx = scale;\r\n yy = scale;\r\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\r\n xx = readF2Dot14(reader, cursor);\r\n yy = readF2Dot14(reader, cursor + 2);\r\n cursor += 4;\r\n } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\r\n xx = readF2Dot14(reader, cursor);\r\n xy = readF2Dot14(reader, cursor + 2);\r\n yx = readF2Dot14(reader, cursor + 4);\r\n yy = readF2Dot14(reader, cursor + 6);\r\n cursor += 8;\r\n }\r\n return {\r\n data: { glyphIndex, dx, dy, xx, xy, yx, yy } satisfies CompositeComponent,\r\n cursor\r\n };\r\n}\r\n\r\nfunction readF2Dot14(reader: SFNTReader, offset: number) {\r\n return reader.int16(offset) / 16384;\r\n}\r\n\r\nfunction expandImplicitPoints(points: GlyphPoint[]) {\r\n if (points.length === 0) {\r\n return points;\r\n }\r\n const result: GlyphPoint[] = [];\r\n for (let i = 0; i < points.length; i++) {\r\n const current = points[i];\r\n const next = points[(i + 1) % points.length];\r\n result.push(current);\r\n if (!current.onCurve && !next.onCurve) {\r\n result.push({\r\n x: (current.x + next.x) * 0.5,\r\n y: (current.y + next.y) * 0.5,\r\n onCurve: true\r\n });\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction computeBounds(contours: GlyphContour[]) {\r\n if (contours.length === 0) {\r\n return { xMin: 0, yMin: 0, xMax: 0, yMax: 0 };\r\n }\r\n let xMin = Number.POSITIVE_INFINITY;\r\n let yMin = Number.POSITIVE_INFINITY;\r\n let xMax = Number.NEGATIVE_INFINITY;\r\n let yMax = Number.NEGATIVE_INFINITY;\r\n for (const contour of contours) {\r\n for (const point of contour) {\r\n xMin = Math.min(xMin, point.x);\r\n yMin = Math.min(yMin, point.y);\r\n xMax = Math.max(xMax, point.x);\r\n yMax = Math.max(yMax, point.y);\r\n }\r\n }\r\n return { xMin, yMin, xMax, yMax };\r\n}\r\n\r\nfunction buildGlyphData(\r\n glyphIndex: number,\r\n advanceWidths: Uint16Array<ArrayBuffer>,\r\n leftSideBearings: Int16Array<ArrayBuffer>,\r\n contours: GlyphContour[],\r\n xMin: number,\r\n yMin: number,\r\n xMax: number,\r\n yMax: number\r\n): GlyphData {\r\n return {\r\n glyphIndex,\r\n advanceWidth: advanceWidths[glyphIndex] ?? 0,\r\n leftSideBearing: leftSideBearings[glyphIndex] ?? 0,\r\n xMin,\r\n yMin,\r\n xMax,\r\n yMax,\r\n contours\r\n };\r\n}\r\n\r\nfunction normalizeMSDFAtlasPageSize(value: number | undefined) {\r\n return Math.max(32, Math.round(Number.isFinite(value) ? value! : DEFAULT_MSDF_ATLAS_PAGE_SIZE));\r\n}\r\n\r\nfunction normalizeMSDFGlyphSize(value: number | undefined) {\r\n return Math.max(8, Math.round(Number.isFinite(value) ? value! : DEFAULT_MSDF_GLYPH_SIZE));\r\n}\r\n"],"names":["ARG_1_AND_2_ARE_WORDS","ARGS_ARE_XY_VALUES","WE_HAVE_A_SCALE","MORE_COMPONENTS","WE_HAVE_AN_X_AND_Y_SCALE","WE_HAVE_A_TWO_BY_TWO","DEFAULT_MSDF_ATLAS_PAGE_SIZE","DEFAULT_MSDF_GLYPH_SIZE","FontAsset","_reader","_tables","_glyphOffsets","_advanceWidths","_leftSideBearings","_glyphCache","_cmapFormat4","_cmapFormat12","_kernPairs","_gposPairs","_metrics","_numberOfHMetrics","_msdfAtlasSettings","buffer","options","SFNTReader","parseTableDirectory","head","requireTable","maxp","hhea","hmtx","loca","uint16","offset","unitsPerEm","ascent","int16","descent","lineGap","glyphCount","parseGlyphOffsets","metrics","parseHorizontalMetrics","advanceWidths","leftSideBearings","cmap","parseBestCMap","format4","format12","parseKernPairs","getTable","parseGPOSPairs","Map","Object","freeze","pageSize","normalizeMSDFAtlasPageSize","glyphSize","normalizeMSDFGlyphSize","fromBuffer","msdfAtlasSettings","msdfAtlasPageSize","msdfGlyphSize","getGlyphIndex","codePoint","glyphIndex","lookupCMapFormat12","lookupCMapFormat4","getKerning","leftGlyphIndex","rightGlyphIndex","gpos","getPairAdjustment","firstXAdvance","secondXAdvance","get","lookupGPOSPair","getGlyph","has","glyph","loadGlyph","set","tag","table","Error","depth","glyf","nextOffset","buildGlyphData","glyphOffset","header","parseGlyphHeader","numberOfContours","contours","parseSimpleGlyph","xMin","yMin","xMax","yMax","parseCompositeGlyph","childIndex","bounds","computeBounds","reader","numTables","tables","i","uint32","length","indexToLocFormat","result","Uint32Array","numberOfHMetrics","Uint16Array","Int16Array","cursor","lastAdvanceWidth","recordOffset","platformId","encodingId","subtableOffset","format","isPreferredCMap","currentPlatformId","currentEncodingId","nextScore","getCMapScore","currentScore","nGroups","low","high","mid","groupOffset","startCharCode","endCharCode","segCount","endCodeOffset","startCodeOffset","idDeltaOffset","idRangeOffsetOffset","endCode","startCode","idDelta","idRangeOffset","glyphIndexAddress","version","nTables","coverage","nPairs","pairOffset","j","left","right","value","majorVersion","featureListOffset","lookupListOffset","featureLookupIndices","collectGPOSFeatureLookupIndices","parseGPOSLookupSubtables","featureCount","featureTags","Set","lookupIndices","featureOffset","lookupIndexCount","add","sort","a","b","gposOffset","lookupCount","lookupIndex","lookupOffset","lookupType","subtableCount","parsed","parsePairPosSubtable","push","extensionLookupType","extensionOffset","parsePairPosFormat1","parsePairPosFormat2","parseCoverageTable","valueFormat1","valueFormat2","pairSetCount","pairs","firstGlyph","getCoverageGlyph","pairSetOffset","pairValueCount","secondMap","secondGlyph","value1","readValueRecordX","getValueRecordSize","value2","adjustment","firstXPlacement","xPlacement","xAdvance","secondXPlacement","kind","classDef1","parseClassDefTable","classDef2","class1Count","class2Count","values","Array","c1","c2","glyphs","rangeCount","ranges","rangeOffset","start","end","startIndex","index","range","rangeLength","coverageContains","binarySearchU16","startGlyphId","classes","classRangeCount","classId","getGlyphClass","classDef","valueFormat","size","bit","subtables","merged","subtable","mergePairAdjustment","class1","class2","target","base","next","endPts","pointCount","instructionLength","flags","Uint8Array","flag","uint8","repeatCount","xs","ys","currentX","dx","currentY","dy","points","x","y","onCurve","expandImplicitPoints","slice","component","parseCompositeComponent","child","data","contour","map","point","xx","xy","yx","yy","arg1","arg2","int8","scale","readF2Dot14","current","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","Math","min","max","advanceWidth","leftSideBearing","round","isFinite"],"mappings":"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"}
1
+ {"version":3,"file":"font_asset.js","sources":["../../../src/text/font/font_asset.ts"],"sourcesContent":["import type { FontAssetFetchOptions } from '../../asset/assetmanager';\r\nimport { SFNTReader } from './sfnt_reader';\r\nimport type { FontMetrics, GlyphContour, GlyphData, GlyphPoint } from './types';\r\nimport type { CFFGlyphProvider } from './cff_font';\r\nimport { parseCFFGlyphProvider } from './cff_font';\r\n\r\n/**\r\n * MSDF atlas settings associated with a font asset.\r\n * @public\r\n */\r\nexport type FontAssetMSDFAtlasSettings = Readonly<{\r\n pageSize: number;\r\n glyphSize: number;\r\n}>;\r\n\r\ntype TableRecord = {\r\n offset: number;\r\n length: number;\r\n};\r\n\r\ntype GlyphHeader = {\r\n numberOfContours: number;\r\n xMin: number;\r\n yMin: number;\r\n xMax: number;\r\n yMax: number;\r\n};\r\n\r\ntype CompositeComponent = {\r\n glyphIndex: number;\r\n dx: number;\r\n dy: number;\r\n xx: number;\r\n xy: number;\r\n yx: number;\r\n yy: number;\r\n};\r\n\r\ntype CoverageTable =\r\n | { format: 1; glyphs: Uint16Array<ArrayBuffer> }\r\n | { format: 2; ranges: { start: number; end: number; startIndex: number }[] };\r\n\r\ntype ClassDefTable =\r\n | { format: 1; startGlyphId: number; classes: Uint16Array<ArrayBuffer> }\r\n | { format: 2; ranges: { start: number; end: number; classId: number }[] };\r\n\r\ntype GPOSPairSubtable =\r\n | {\r\n kind: 'format1';\r\n coverage: CoverageTable;\r\n pairs: Map<number, Map<number, PairAdjustment>>;\r\n }\r\n | {\r\n kind: 'format2';\r\n coverage: CoverageTable;\r\n classDef1: ClassDefTable;\r\n classDef2: ClassDefTable;\r\n class1Count: number;\r\n class2Count: number;\r\n values: PairAdjustment[];\r\n };\r\n\r\n/**\r\n * Minimal horizontal pair adjustment extracted from GPOS.\r\n *\r\n * @public\r\n */\r\nexport type PairAdjustment = {\r\n firstXPlacement: number;\r\n firstXAdvance: number;\r\n secondXPlacement: number;\r\n secondXAdvance: number;\r\n};\r\n\r\nconst ARG_1_AND_2_ARE_WORDS = 1 << 0;\r\nconst ARGS_ARE_XY_VALUES = 1 << 1;\r\nconst WE_HAVE_A_SCALE = 1 << 3;\r\nconst MORE_COMPONENTS = 1 << 5;\r\nconst WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;\r\nconst WE_HAVE_A_TWO_BY_TWO = 1 << 7;\r\nconst DEFAULT_MSDF_ATLAS_PAGE_SIZE = 1024;\r\nconst DEFAULT_MSDF_GLYPH_SIZE = 32;\r\n\r\n/**\r\n * Minimal runtime font asset for TrueType outlines.\r\n *\r\n * @public\r\n */\r\nexport class FontAsset {\r\n private readonly _reader: SFNTReader;\r\n private readonly _tables: Map<string, TableRecord>;\r\n private readonly _glyphOffsets: Uint32Array<ArrayBuffer> | null;\r\n private readonly _cffGlyphProvider: CFFGlyphProvider | null;\r\n private readonly _advanceWidths: Uint16Array<ArrayBuffer>;\r\n private readonly _leftSideBearings: Int16Array<ArrayBuffer>;\r\n private readonly _glyphCache: Map<number, GlyphData | null>;\r\n private readonly _cmapFormat4: { offset: number; platformId: number; encodingId: number } | null;\r\n private readonly _cmapFormat12: { offset: number; platformId: number; encodingId: number } | null;\r\n private readonly _kernPairs: Map<number, number>;\r\n private readonly _gposPairs: GPOSPairSubtable[];\r\n private readonly _metrics: FontMetrics;\r\n private readonly _numberOfHMetrics: number;\r\n private readonly _msdfAtlasSettings: FontAssetMSDFAtlasSettings;\r\n private constructor(buffer: ArrayBuffer, options?: FontAssetFetchOptions) {\r\n this._reader = new SFNTReader(buffer);\r\n this._tables = parseTableDirectory(this._reader);\r\n const head = this.requireTable('head');\r\n const maxp = this.requireTable('maxp');\r\n const hhea = this.requireTable('hhea');\r\n const hmtx = this.requireTable('hmtx');\r\n const loca = this.getTable('loca');\r\n const glyf = this.getTable('glyf');\r\n const cff = this.getTable('CFF ');\r\n this.requireTable('cmap');\r\n this._numberOfHMetrics = this._reader.uint16(hhea.offset + 34);\r\n this._metrics = {\r\n unitsPerEm: this._reader.uint16(head.offset + 18),\r\n ascent: this._reader.int16(hhea.offset + 4),\r\n descent: this._reader.int16(hhea.offset + 6),\r\n lineGap: this._reader.int16(hhea.offset + 8),\r\n glyphCount: this._reader.uint16(maxp.offset + 4)\r\n };\r\n if (loca && glyf) {\r\n this._glyphOffsets = parseGlyphOffsets(\r\n this._reader,\r\n loca.offset,\r\n this._metrics.glyphCount,\r\n this._reader.int16(head.offset + 50)\r\n );\r\n this._cffGlyphProvider = null;\r\n } else if (cff) {\r\n this._glyphOffsets = null;\r\n this._cffGlyphProvider = parseCFFGlyphProvider(this._reader, cff.offset, this._metrics.glyphCount);\r\n } else {\r\n throw new Error('Unsupported font outline: neither TrueType glyf/loca nor OpenType CFF table found');\r\n }\r\n const metrics = parseHorizontalMetrics(\r\n this._reader,\r\n hmtx.offset,\r\n this._metrics.glyphCount,\r\n this._numberOfHMetrics\r\n );\r\n this._advanceWidths = metrics.advanceWidths;\r\n this._leftSideBearings = metrics.leftSideBearings;\r\n const cmap = parseBestCMap(this._reader, this.requireTable('cmap').offset);\r\n this._cmapFormat4 = cmap.format4;\r\n this._cmapFormat12 = cmap.format12;\r\n this._kernPairs = parseKernPairs(this._reader, this.getTable('kern'));\r\n this._gposPairs = parseGPOSPairs(this._reader, this.getTable('GPOS'));\r\n this._glyphCache = new Map();\r\n this._msdfAtlasSettings = Object.freeze({\r\n pageSize: normalizeMSDFAtlasPageSize(options?.pageSize),\r\n glyphSize: normalizeMSDFGlyphSize(options?.glyphSize)\r\n });\r\n }\r\n static fromBuffer(buffer: ArrayBuffer, options?: FontAssetFetchOptions) {\r\n return new FontAsset(buffer, options);\r\n }\r\n get metrics(): FontMetrics {\r\n return this._metrics;\r\n }\r\n get msdfAtlasSettings(): FontAssetMSDFAtlasSettings {\r\n return this._msdfAtlasSettings;\r\n }\r\n get msdfAtlasPageSize() {\r\n return this._msdfAtlasSettings.pageSize;\r\n }\r\n get msdfGlyphSize() {\r\n return this._msdfAtlasSettings.glyphSize;\r\n }\r\n getGlyphIndex(codePoint: number) {\r\n if (this._cmapFormat12) {\r\n const glyphIndex = lookupCMapFormat12(this._reader, this._cmapFormat12.offset, codePoint);\r\n if (glyphIndex !== 0) {\r\n return glyphIndex;\r\n }\r\n }\r\n if (this._cmapFormat4 && codePoint <= 0xffff) {\r\n return lookupCMapFormat4(this._reader, this._cmapFormat4.offset, codePoint);\r\n }\r\n return 0;\r\n }\r\n getKerning(leftGlyphIndex: number, rightGlyphIndex: number) {\r\n const gpos = this.getPairAdjustment(leftGlyphIndex, rightGlyphIndex);\r\n if (gpos) {\r\n return gpos.firstXAdvance + gpos.secondXAdvance;\r\n }\r\n return this._kernPairs.get((leftGlyphIndex << 16) | rightGlyphIndex) ?? 0;\r\n }\r\n getPairAdjustment(leftGlyphIndex: number, rightGlyphIndex: number): PairAdjustment | null {\r\n return lookupGPOSPair(this._gposPairs, leftGlyphIndex, rightGlyphIndex);\r\n }\r\n getGlyph(glyphIndex: number): GlyphData | null {\r\n if (glyphIndex < 0 || glyphIndex >= this._metrics.glyphCount) {\r\n return null;\r\n }\r\n if (this._glyphCache.has(glyphIndex)) {\r\n return this._glyphCache.get(glyphIndex)!;\r\n }\r\n const glyph = this.loadGlyph(glyphIndex, 0);\r\n this._glyphCache.set(glyphIndex, glyph);\r\n return glyph;\r\n }\r\n private getTable(tag: string) {\r\n return this._tables.get(tag) ?? null;\r\n }\r\n private requireTable(tag: string) {\r\n const table = this.getTable(tag);\r\n if (!table) {\r\n throw new Error(`Font table not found: ${tag}`);\r\n }\r\n return table;\r\n }\r\n private loadGlyph(glyphIndex: number, depth: number): GlyphData | null {\r\n if (depth > 16) {\r\n throw new Error(`Composite glyph nesting too deep: ${glyphIndex}`);\r\n }\r\n if (this._cffGlyphProvider) {\r\n return this._cffGlyphProvider.getGlyph(glyphIndex, this._advanceWidths, this._leftSideBearings);\r\n }\r\n const glyf = this.requireTable('glyf');\r\n const offset = this._glyphOffsets![glyphIndex];\r\n const nextOffset = this._glyphOffsets![glyphIndex + 1];\r\n if (offset === nextOffset) {\r\n return buildGlyphData(glyphIndex, this._advanceWidths, this._leftSideBearings, [], 0, 0, 0, 0);\r\n }\r\n const glyphOffset = glyf.offset + offset;\r\n const header = parseGlyphHeader(this._reader, glyphOffset);\r\n if (header.numberOfContours >= 0) {\r\n const contours = parseSimpleGlyph(this._reader, glyphOffset, header.numberOfContours);\r\n return buildGlyphData(\r\n glyphIndex,\r\n this._advanceWidths,\r\n this._leftSideBearings,\r\n contours,\r\n header.xMin,\r\n header.yMin,\r\n header.xMax,\r\n header.yMax\r\n );\r\n }\r\n const contours = parseCompositeGlyph(this._reader, glyphOffset, (childIndex) =>\r\n this.loadGlyph(childIndex, depth + 1)\r\n );\r\n const bounds = computeBounds(contours);\r\n return buildGlyphData(\r\n glyphIndex,\r\n this._advanceWidths,\r\n this._leftSideBearings,\r\n contours,\r\n bounds.xMin,\r\n bounds.yMin,\r\n bounds.xMax,\r\n bounds.yMax\r\n );\r\n }\r\n}\r\n\r\nfunction parseTableDirectory(reader: SFNTReader) {\r\n const numTables = reader.uint16(4);\r\n const tables = new Map<string, TableRecord>();\r\n let offset = 12;\r\n for (let i = 0; i < numTables; i++) {\r\n const tag = reader.tag(offset);\r\n tables.set(tag, {\r\n offset: reader.uint32(offset + 8),\r\n length: reader.uint32(offset + 12)\r\n });\r\n offset += 16;\r\n }\r\n return tables;\r\n}\r\n\r\nfunction parseGlyphOffsets(reader: SFNTReader, offset: number, glyphCount: number, indexToLocFormat: number) {\r\n const result = new Uint32Array(glyphCount + 1);\r\n if (indexToLocFormat === 0) {\r\n for (let i = 0; i <= glyphCount; i++) {\r\n result[i] = reader.uint16(offset + i * 2) * 2;\r\n }\r\n } else {\r\n for (let i = 0; i <= glyphCount; i++) {\r\n result[i] = reader.uint32(offset + i * 4);\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction parseHorizontalMetrics(\r\n reader: SFNTReader,\r\n offset: number,\r\n glyphCount: number,\r\n numberOfHMetrics: number\r\n) {\r\n const advanceWidths = new Uint16Array(glyphCount);\r\n const leftSideBearings = new Int16Array(glyphCount);\r\n let cursor = offset;\r\n let lastAdvanceWidth = 0;\r\n for (let i = 0; i < glyphCount; i++) {\r\n if (i < numberOfHMetrics) {\r\n lastAdvanceWidth = reader.uint16(cursor);\r\n advanceWidths[i] = lastAdvanceWidth;\r\n leftSideBearings[i] = reader.int16(cursor + 2);\r\n cursor += 4;\r\n } else {\r\n advanceWidths[i] = lastAdvanceWidth;\r\n leftSideBearings[i] = reader.int16(cursor);\r\n cursor += 2;\r\n }\r\n }\r\n return { advanceWidths, leftSideBearings };\r\n}\r\n\r\nfunction parseBestCMap(reader: SFNTReader, offset: number) {\r\n const numTables = reader.uint16(offset + 2);\r\n let format4: { offset: number; platformId: number; encodingId: number } | null = null;\r\n let format12: { offset: number; platformId: number; encodingId: number } | null = null;\r\n for (let i = 0; i < numTables; i++) {\r\n const recordOffset = offset + 4 + i * 8;\r\n const platformId = reader.uint16(recordOffset);\r\n const encodingId = reader.uint16(recordOffset + 2);\r\n const subtableOffset = offset + reader.uint32(recordOffset + 4);\r\n const format = reader.uint16(subtableOffset);\r\n if (format === 12) {\r\n if (!format12 || isPreferredCMap(platformId, encodingId, format12.platformId, format12.encodingId)) {\r\n format12 = { offset: subtableOffset, platformId, encodingId };\r\n }\r\n } else if (format === 4) {\r\n if (!format4 || isPreferredCMap(platformId, encodingId, format4.platformId, format4.encodingId)) {\r\n format4 = { offset: subtableOffset, platformId, encodingId };\r\n }\r\n }\r\n }\r\n return { format4, format12 };\r\n}\r\n\r\nfunction isPreferredCMap(\r\n platformId: number,\r\n encodingId: number,\r\n currentPlatformId: number,\r\n currentEncodingId: number\r\n) {\r\n const nextScore = getCMapScore(platformId, encodingId);\r\n const currentScore = getCMapScore(currentPlatformId, currentEncodingId);\r\n return nextScore > currentScore;\r\n}\r\n\r\nfunction getCMapScore(platformId: number, encodingId: number) {\r\n if (platformId === 3 && encodingId === 10) {\r\n return 5;\r\n }\r\n if (platformId === 0 && encodingId <= 6) {\r\n return 4;\r\n }\r\n if (platformId === 3 && encodingId === 1) {\r\n return 3;\r\n }\r\n if (platformId === 0) {\r\n return 2;\r\n }\r\n return 1;\r\n}\r\n\r\nfunction lookupCMapFormat12(reader: SFNTReader, offset: number, codePoint: number) {\r\n const nGroups = reader.uint32(offset + 12);\r\n let low = 0;\r\n let high = nGroups - 1;\r\n while (low <= high) {\r\n const mid = (low + high) >> 1;\r\n const groupOffset = offset + 16 + mid * 12;\r\n const startCharCode = reader.uint32(groupOffset);\r\n const endCharCode = reader.uint32(groupOffset + 4);\r\n if (codePoint < startCharCode) {\r\n high = mid - 1;\r\n } else if (codePoint > endCharCode) {\r\n low = mid + 1;\r\n } else {\r\n return reader.uint32(groupOffset + 8) + (codePoint - startCharCode);\r\n }\r\n }\r\n return 0;\r\n}\r\n\r\nfunction lookupCMapFormat4(reader: SFNTReader, offset: number, codePoint: number) {\r\n const segCount = reader.uint16(offset + 6) >> 1;\r\n const endCodeOffset = offset + 14;\r\n const startCodeOffset = endCodeOffset + segCount * 2 + 2;\r\n const idDeltaOffset = startCodeOffset + segCount * 2;\r\n const idRangeOffsetOffset = idDeltaOffset + segCount * 2;\r\n for (let i = 0; i < segCount; i++) {\r\n const endCode = reader.uint16(endCodeOffset + i * 2);\r\n if (codePoint > endCode) {\r\n continue;\r\n }\r\n const startCode = reader.uint16(startCodeOffset + i * 2);\r\n if (codePoint < startCode) {\r\n return 0;\r\n }\r\n const idDelta = reader.int16(idDeltaOffset + i * 2);\r\n const idRangeOffset = reader.uint16(idRangeOffsetOffset + i * 2);\r\n if (idRangeOffset === 0) {\r\n return (codePoint + idDelta) & 0xffff;\r\n }\r\n const glyphIndexAddress = idRangeOffsetOffset + i * 2 + idRangeOffset + (codePoint - startCode) * 2;\r\n const glyphIndex = reader.uint16(glyphIndexAddress);\r\n return glyphIndex === 0 ? 0 : (glyphIndex + idDelta) & 0xffff;\r\n }\r\n return 0;\r\n}\r\n\r\nfunction parseKernPairs(reader: SFNTReader, table: TableRecord | null) {\r\n const result = new Map<number, number>();\r\n if (!table || table.length < 4) {\r\n return result;\r\n }\r\n const version = reader.uint16(table.offset);\r\n if (version !== 0) {\r\n return result;\r\n }\r\n const nTables = reader.uint16(table.offset + 2);\r\n let cursor = table.offset + 4;\r\n for (let i = 0; i < nTables; i++) {\r\n const length = reader.uint16(cursor + 2);\r\n const coverage = reader.uint16(cursor + 4);\r\n const format = coverage >> 8;\r\n if (format === 0) {\r\n const nPairs = reader.uint16(cursor + 6);\r\n let pairOffset = cursor + 14;\r\n for (let j = 0; j < nPairs; j++) {\r\n const left = reader.uint16(pairOffset);\r\n const right = reader.uint16(pairOffset + 2);\r\n const value = reader.int16(pairOffset + 4);\r\n result.set((left << 16) | right, value);\r\n pairOffset += 6;\r\n }\r\n }\r\n cursor += length;\r\n }\r\n return result;\r\n}\r\n\r\nfunction parseGPOSPairs(reader: SFNTReader, table: TableRecord | null) {\r\n if (!table || table.length < 10) {\r\n return [];\r\n }\r\n const majorVersion = reader.uint16(table.offset);\r\n if (majorVersion !== 1) {\r\n return [];\r\n }\r\n const featureListOffset = reader.uint16(table.offset + 6);\r\n const lookupListOffset = reader.uint16(table.offset + 8);\r\n if (!featureListOffset || !lookupListOffset) {\r\n return [];\r\n }\r\n const featureLookupIndices = collectGPOSFeatureLookupIndices(reader, table.offset + featureListOffset);\r\n if (featureLookupIndices.length === 0) {\r\n return [];\r\n }\r\n return parseGPOSLookupSubtables(\r\n reader,\r\n table.offset + lookupListOffset,\r\n table.offset,\r\n featureLookupIndices\r\n );\r\n}\r\n\r\nfunction collectGPOSFeatureLookupIndices(reader: SFNTReader, featureListOffset: number) {\r\n const featureCount = reader.uint16(featureListOffset);\r\n const featureTags = new Set(['kern']);\r\n const lookupIndices = new Set<number>();\r\n for (let i = 0; i < featureCount; i++) {\r\n const recordOffset = featureListOffset + 2 + i * 6;\r\n const tag = reader.tag(recordOffset);\r\n if (!featureTags.has(tag)) {\r\n continue;\r\n }\r\n const featureOffset = featureListOffset + reader.uint16(recordOffset + 4);\r\n const lookupIndexCount = reader.uint16(featureOffset + 2);\r\n for (let j = 0; j < lookupIndexCount; j++) {\r\n lookupIndices.add(reader.uint16(featureOffset + 4 + j * 2));\r\n }\r\n }\r\n return [...lookupIndices].sort((a, b) => a - b);\r\n}\r\n\r\nfunction parseGPOSLookupSubtables(\r\n reader: SFNTReader,\r\n lookupListOffset: number,\r\n gposOffset: number,\r\n lookupIndices: number[]\r\n) {\r\n const lookupCount = reader.uint16(lookupListOffset);\r\n const result: GPOSPairSubtable[] = [];\r\n for (const lookupIndex of lookupIndices) {\r\n if (lookupIndex >= lookupCount) {\r\n continue;\r\n }\r\n const lookupOffset = lookupListOffset + reader.uint16(lookupListOffset + 2 + lookupIndex * 2);\r\n const lookupType = reader.uint16(lookupOffset);\r\n const subtableCount = reader.uint16(lookupOffset + 4);\r\n for (let i = 0; i < subtableCount; i++) {\r\n const subtableOffset = lookupOffset + reader.uint16(lookupOffset + 6 + i * 2);\r\n if (lookupType === 2) {\r\n const parsed = parsePairPosSubtable(reader, subtableOffset);\r\n if (parsed) {\r\n result.push(parsed);\r\n }\r\n } else if (lookupType === 9) {\r\n const extensionLookupType = reader.uint16(subtableOffset + 2);\r\n const extensionOffset = reader.uint32(subtableOffset + 4);\r\n if (extensionLookupType === 2) {\r\n const parsed = parsePairPosSubtable(reader, subtableOffset + extensionOffset);\r\n if (parsed) {\r\n result.push(parsed);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction parsePairPosSubtable(reader: SFNTReader, offset: number): GPOSPairSubtable | null {\r\n const format = reader.uint16(offset);\r\n if (format === 1) {\r\n return parsePairPosFormat1(reader, offset);\r\n }\r\n if (format === 2) {\r\n return parsePairPosFormat2(reader, offset);\r\n }\r\n return null;\r\n}\r\n\r\nfunction parsePairPosFormat1(reader: SFNTReader, offset: number): GPOSPairSubtable {\r\n const coverage = parseCoverageTable(reader, offset + reader.uint16(offset + 2));\r\n const valueFormat1 = reader.uint16(offset + 4);\r\n const valueFormat2 = reader.uint16(offset + 6);\r\n const pairSetCount = reader.uint16(offset + 8);\r\n const pairs = new Map<number, Map<number, PairAdjustment>>();\r\n for (let i = 0; i < pairSetCount; i++) {\r\n const firstGlyph = getCoverageGlyph(coverage, i);\r\n if (firstGlyph < 0) {\r\n continue;\r\n }\r\n const pairSetOffset = offset + reader.uint16(offset + 10 + i * 2);\r\n const pairValueCount = reader.uint16(pairSetOffset);\r\n let cursor = pairSetOffset + 2;\r\n const secondMap = new Map<number, PairAdjustment>();\r\n for (let j = 0; j < pairValueCount; j++) {\r\n const secondGlyph = reader.uint16(cursor);\r\n cursor += 2;\r\n const value1 = readValueRecordX(reader, cursor, valueFormat1);\r\n cursor += getValueRecordSize(valueFormat1);\r\n const value2 = readValueRecordX(reader, cursor, valueFormat2);\r\n cursor += getValueRecordSize(valueFormat2);\r\n const adjustment = {\r\n firstXPlacement: value1.xPlacement,\r\n firstXAdvance: value1.xAdvance,\r\n secondXPlacement: value2.xPlacement,\r\n secondXAdvance: value2.xAdvance\r\n } satisfies PairAdjustment;\r\n if (\r\n adjustment.firstXPlacement !== 0 ||\r\n adjustment.firstXAdvance !== 0 ||\r\n adjustment.secondXPlacement !== 0 ||\r\n adjustment.secondXAdvance !== 0\r\n ) {\r\n secondMap.set(secondGlyph, adjustment);\r\n }\r\n }\r\n pairs.set(firstGlyph, secondMap);\r\n }\r\n return { kind: 'format1', coverage, pairs };\r\n}\r\n\r\nfunction parsePairPosFormat2(reader: SFNTReader, offset: number): GPOSPairSubtable {\r\n const coverage = parseCoverageTable(reader, offset + reader.uint16(offset + 2));\r\n const valueFormat1 = reader.uint16(offset + 4);\r\n const valueFormat2 = reader.uint16(offset + 6);\r\n const classDef1 = parseClassDefTable(reader, offset + reader.uint16(offset + 8));\r\n const classDef2 = parseClassDefTable(reader, offset + reader.uint16(offset + 10));\r\n const class1Count = reader.uint16(offset + 12);\r\n const class2Count = reader.uint16(offset + 14);\r\n const values: PairAdjustment[] = new Array(class1Count * class2Count);\r\n let cursor = offset + 16;\r\n for (let c1 = 0; c1 < class1Count; c1++) {\r\n for (let c2 = 0; c2 < class2Count; c2++) {\r\n const value1 = readValueRecordX(reader, cursor, valueFormat1);\r\n cursor += getValueRecordSize(valueFormat1);\r\n const value2 = readValueRecordX(reader, cursor, valueFormat2);\r\n cursor += getValueRecordSize(valueFormat2);\r\n values[c1 * class2Count + c2] = {\r\n firstXPlacement: value1.xPlacement,\r\n firstXAdvance: value1.xAdvance,\r\n secondXPlacement: value2.xPlacement,\r\n secondXAdvance: value2.xAdvance\r\n };\r\n }\r\n }\r\n return { kind: 'format2', coverage, classDef1, classDef2, class1Count, class2Count, values };\r\n}\r\n\r\nfunction parseCoverageTable(reader: SFNTReader, offset: number): CoverageTable {\r\n const format = reader.uint16(offset);\r\n if (format === 1) {\r\n const glyphCount = reader.uint16(offset + 2);\r\n const glyphs = new Uint16Array(glyphCount);\r\n for (let i = 0; i < glyphCount; i++) {\r\n glyphs[i] = reader.uint16(offset + 4 + i * 2);\r\n }\r\n return { format: 1, glyphs };\r\n }\r\n const rangeCount = reader.uint16(offset + 2);\r\n const ranges: { start: number; end: number; startIndex: number }[] = [];\r\n for (let i = 0; i < rangeCount; i++) {\r\n const rangeOffset = offset + 4 + i * 6;\r\n ranges.push({\r\n start: reader.uint16(rangeOffset),\r\n end: reader.uint16(rangeOffset + 2),\r\n startIndex: reader.uint16(rangeOffset + 4)\r\n });\r\n }\r\n return { format: 2, ranges };\r\n}\r\n\r\nfunction getCoverageGlyph(coverage: CoverageTable, index: number) {\r\n if (coverage.format === 1) {\r\n return coverage.glyphs[index] ?? -1;\r\n }\r\n for (const range of coverage.ranges) {\r\n const rangeLength = range.end - range.start + 1;\r\n if (index >= range.startIndex && index < range.startIndex + rangeLength) {\r\n return range.start + (index - range.startIndex);\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\nfunction coverageContains(coverage: CoverageTable, glyphIndex: number) {\r\n if (coverage.format === 1) {\r\n return binarySearchU16(coverage.glyphs, glyphIndex) >= 0;\r\n }\r\n for (const range of coverage.ranges) {\r\n if (glyphIndex >= range.start && glyphIndex <= range.end) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction parseClassDefTable(reader: SFNTReader, offset: number): ClassDefTable {\r\n const format = reader.uint16(offset);\r\n if (format === 1) {\r\n const startGlyphId = reader.uint16(offset + 2);\r\n const glyphCount = reader.uint16(offset + 4);\r\n const classes = new Uint16Array(glyphCount);\r\n for (let i = 0; i < glyphCount; i++) {\r\n classes[i] = reader.uint16(offset + 6 + i * 2);\r\n }\r\n return { format: 1, startGlyphId, classes };\r\n }\r\n const classRangeCount = reader.uint16(offset + 2);\r\n const ranges: { start: number; end: number; classId: number }[] = [];\r\n for (let i = 0; i < classRangeCount; i++) {\r\n const rangeOffset = offset + 4 + i * 6;\r\n ranges.push({\r\n start: reader.uint16(rangeOffset),\r\n end: reader.uint16(rangeOffset + 2),\r\n classId: reader.uint16(rangeOffset + 4)\r\n });\r\n }\r\n return { format: 2, ranges };\r\n}\r\n\r\nfunction getGlyphClass(classDef: ClassDefTable, glyphIndex: number) {\r\n if (classDef.format === 1) {\r\n const index = glyphIndex - classDef.startGlyphId;\r\n return index >= 0 && index < classDef.classes.length ? classDef.classes[index] : 0;\r\n }\r\n for (const range of classDef.ranges) {\r\n if (glyphIndex >= range.start && glyphIndex <= range.end) {\r\n return range.classId;\r\n }\r\n }\r\n return 0;\r\n}\r\n\r\nfunction readValueRecordX(reader: SFNTReader, offset: number, valueFormat: number) {\r\n let cursor = offset;\r\n let xPlacement = 0;\r\n let xAdvance = 0;\r\n if (valueFormat & 0x0001) {\r\n xPlacement = reader.int16(cursor);\r\n cursor += 2;\r\n }\r\n if (valueFormat & 0x0002) {\r\n cursor += 2;\r\n }\r\n if (valueFormat & 0x0004) {\r\n xAdvance = reader.int16(cursor);\r\n cursor += 2;\r\n }\r\n if (valueFormat & 0x0008) {\r\n cursor += 2;\r\n }\r\n if (valueFormat & 0x0010) {\r\n cursor += 2;\r\n }\r\n if (valueFormat & 0x0020) {\r\n cursor += 2;\r\n }\r\n if (valueFormat & 0x0040) {\r\n cursor += 2;\r\n }\r\n if (valueFormat & 0x0080) {\r\n cursor += 2;\r\n }\r\n return { xPlacement, xAdvance };\r\n}\r\n\r\nfunction getValueRecordSize(valueFormat: number) {\r\n let size = 0;\r\n for (let bit = 0; bit < 8; bit++) {\r\n if (valueFormat & (1 << bit)) {\r\n size += 2;\r\n }\r\n }\r\n return size;\r\n}\r\n\r\nfunction lookupGPOSPair(subtables: GPOSPairSubtable[], leftGlyphIndex: number, rightGlyphIndex: number) {\r\n let merged: PairAdjustment | null = null;\r\n for (const subtable of subtables) {\r\n if (!coverageContains(subtable.coverage, leftGlyphIndex)) {\r\n continue;\r\n }\r\n if (subtable.kind === 'format1') {\r\n const secondMap = subtable.pairs.get(leftGlyphIndex);\r\n if (secondMap) {\r\n const adjustment = secondMap.get(rightGlyphIndex);\r\n if (adjustment) {\r\n merged = mergePairAdjustment(merged, adjustment);\r\n }\r\n }\r\n } else {\r\n const class1 = getGlyphClass(subtable.classDef1, leftGlyphIndex);\r\n const class2 = getGlyphClass(subtable.classDef2, rightGlyphIndex);\r\n if (class1 < subtable.class1Count && class2 < subtable.class2Count) {\r\n const adjustment = subtable.values[class1 * subtable.class2Count + class2];\r\n if (adjustment) {\r\n merged = mergePairAdjustment(merged, adjustment);\r\n }\r\n }\r\n }\r\n }\r\n return merged;\r\n}\r\n\r\nfunction binarySearchU16(values: Uint16Array<ArrayBuffer>, target: number) {\r\n let low = 0;\r\n let high = values.length - 1;\r\n while (low <= high) {\r\n const mid = (low + high) >> 1;\r\n const value = values[mid];\r\n if (value < target) {\r\n low = mid + 1;\r\n } else if (value > target) {\r\n high = mid - 1;\r\n } else {\r\n return mid;\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\nfunction mergePairAdjustment(base: PairAdjustment | null, next: PairAdjustment): PairAdjustment {\r\n if (!base) {\r\n return { ...next };\r\n }\r\n return {\r\n firstXPlacement: base.firstXPlacement + next.firstXPlacement,\r\n firstXAdvance: base.firstXAdvance + next.firstXAdvance,\r\n secondXPlacement: base.secondXPlacement + next.secondXPlacement,\r\n secondXAdvance: base.secondXAdvance + next.secondXAdvance\r\n };\r\n}\r\n\r\nfunction parseGlyphHeader(reader: SFNTReader, offset: number): GlyphHeader {\r\n return {\r\n numberOfContours: reader.int16(offset),\r\n xMin: reader.int16(offset + 2),\r\n yMin: reader.int16(offset + 4),\r\n xMax: reader.int16(offset + 6),\r\n yMax: reader.int16(offset + 8)\r\n };\r\n}\r\n\r\nfunction parseSimpleGlyph(reader: SFNTReader, offset: number, numberOfContours: number): GlyphContour[] {\r\n const endPts: number[] = [];\r\n let cursor = offset + 10;\r\n for (let i = 0; i < numberOfContours; i++) {\r\n endPts.push(reader.uint16(cursor));\r\n cursor += 2;\r\n }\r\n const pointCount = endPts[numberOfContours - 1] + 1;\r\n const instructionLength = reader.uint16(cursor);\r\n cursor += 2 + instructionLength;\r\n const flags = new Uint8Array(pointCount);\r\n for (let i = 0; i < pointCount; ) {\r\n const flag = reader.uint8(cursor++);\r\n flags[i++] = flag;\r\n if (flag & 0x08) {\r\n const repeatCount = reader.uint8(cursor++);\r\n for (let j = 0; j < repeatCount; j++) {\r\n flags[i++] = flag;\r\n }\r\n }\r\n }\r\n const xs = new Int16Array(pointCount);\r\n const ys = new Int16Array(pointCount);\r\n let currentX = 0;\r\n for (let i = 0; i < pointCount; i++) {\r\n const flag = flags[i];\r\n if (flag & 0x02) {\r\n const dx = reader.uint8(cursor++);\r\n currentX += flag & 0x10 ? dx : -dx;\r\n } else if (!(flag & 0x10)) {\r\n currentX += reader.int16(cursor);\r\n cursor += 2;\r\n }\r\n xs[i] = currentX;\r\n }\r\n let currentY = 0;\r\n for (let i = 0; i < pointCount; i++) {\r\n const flag = flags[i];\r\n if (flag & 0x04) {\r\n const dy = reader.uint8(cursor++);\r\n currentY += flag & 0x20 ? dy : -dy;\r\n } else if (!(flag & 0x20)) {\r\n currentY += reader.int16(cursor);\r\n cursor += 2;\r\n }\r\n ys[i] = currentY;\r\n }\r\n const points: GlyphPoint[] = [];\r\n for (let i = 0; i < pointCount; i++) {\r\n points.push({\r\n x: xs[i],\r\n y: ys[i],\r\n onCurve: !!(flags[i] & 0x01)\r\n });\r\n }\r\n const contours: GlyphContour[] = [];\r\n let start = 0;\r\n for (const end of endPts) {\r\n contours.push(expandImplicitPoints(points.slice(start, end + 1)));\r\n start = end + 1;\r\n }\r\n return contours;\r\n}\r\n\r\nfunction parseCompositeGlyph(\r\n reader: SFNTReader,\r\n offset: number,\r\n loadGlyph: (glyphIndex: number) => GlyphData | null\r\n): GlyphContour[] {\r\n let cursor = offset + 10;\r\n const contours: GlyphContour[] = [];\r\n let flags = 0;\r\n do {\r\n flags = reader.uint16(cursor);\r\n const glyphIndex = reader.uint16(cursor + 2);\r\n cursor += 4;\r\n const component = parseCompositeComponent(reader, cursor, flags, glyphIndex);\r\n cursor = component.cursor;\r\n const child = loadGlyph(component.data.glyphIndex);\r\n if (child) {\r\n for (const contour of child.contours) {\r\n contours.push(\r\n contour.map((point) => ({\r\n x: point.x * component.data.xx + point.y * component.data.xy + component.data.dx,\r\n y: point.x * component.data.yx + point.y * component.data.yy + component.data.dy,\r\n onCurve: point.onCurve\r\n }))\r\n );\r\n }\r\n }\r\n } while (flags & MORE_COMPONENTS);\r\n return contours;\r\n}\r\n\r\nfunction parseCompositeComponent(reader: SFNTReader, offset: number, flags: number, glyphIndex: number) {\r\n let cursor = offset;\r\n let arg1 = 0;\r\n let arg2 = 0;\r\n if (flags & ARG_1_AND_2_ARE_WORDS) {\r\n arg1 = reader.int16(cursor);\r\n arg2 = reader.int16(cursor + 2);\r\n cursor += 4;\r\n } else {\r\n arg1 = reader.int8(cursor);\r\n arg2 = reader.int8(cursor + 1);\r\n cursor += 2;\r\n }\r\n let dx = 0;\r\n let dy = 0;\r\n if (flags & ARGS_ARE_XY_VALUES) {\r\n dx = arg1;\r\n dy = arg2;\r\n }\r\n let xx = 1;\r\n let xy = 0;\r\n let yx = 0;\r\n let yy = 1;\r\n if (flags & WE_HAVE_A_SCALE) {\r\n const scale = readF2Dot14(reader, cursor);\r\n cursor += 2;\r\n xx = scale;\r\n yy = scale;\r\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\r\n xx = readF2Dot14(reader, cursor);\r\n yy = readF2Dot14(reader, cursor + 2);\r\n cursor += 4;\r\n } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\r\n xx = readF2Dot14(reader, cursor);\r\n xy = readF2Dot14(reader, cursor + 2);\r\n yx = readF2Dot14(reader, cursor + 4);\r\n yy = readF2Dot14(reader, cursor + 6);\r\n cursor += 8;\r\n }\r\n return {\r\n data: { glyphIndex, dx, dy, xx, xy, yx, yy } satisfies CompositeComponent,\r\n cursor\r\n };\r\n}\r\n\r\nfunction readF2Dot14(reader: SFNTReader, offset: number) {\r\n return reader.int16(offset) / 16384;\r\n}\r\n\r\nfunction expandImplicitPoints(points: GlyphPoint[]) {\r\n if (points.length === 0) {\r\n return points;\r\n }\r\n const result: GlyphPoint[] = [];\r\n for (let i = 0; i < points.length; i++) {\r\n const current = points[i];\r\n const next = points[(i + 1) % points.length];\r\n result.push(current);\r\n if (!current.onCurve && !next.onCurve) {\r\n result.push({\r\n x: (current.x + next.x) * 0.5,\r\n y: (current.y + next.y) * 0.5,\r\n onCurve: true\r\n });\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction computeBounds(contours: GlyphContour[]) {\r\n if (contours.length === 0) {\r\n return { xMin: 0, yMin: 0, xMax: 0, yMax: 0 };\r\n }\r\n let xMin = Number.POSITIVE_INFINITY;\r\n let yMin = Number.POSITIVE_INFINITY;\r\n let xMax = Number.NEGATIVE_INFINITY;\r\n let yMax = Number.NEGATIVE_INFINITY;\r\n for (const contour of contours) {\r\n for (const point of contour) {\r\n xMin = Math.min(xMin, point.x);\r\n yMin = Math.min(yMin, point.y);\r\n xMax = Math.max(xMax, point.x);\r\n yMax = Math.max(yMax, point.y);\r\n }\r\n }\r\n return { xMin, yMin, xMax, yMax };\r\n}\r\n\r\nfunction buildGlyphData(\r\n glyphIndex: number,\r\n advanceWidths: Uint16Array<ArrayBuffer>,\r\n leftSideBearings: Int16Array<ArrayBuffer>,\r\n contours: GlyphContour[],\r\n xMin: number,\r\n yMin: number,\r\n xMax: number,\r\n yMax: number\r\n): GlyphData {\r\n return {\r\n glyphIndex,\r\n advanceWidth: advanceWidths[glyphIndex] ?? 0,\r\n leftSideBearing: leftSideBearings[glyphIndex] ?? 0,\r\n xMin,\r\n yMin,\r\n xMax,\r\n yMax,\r\n contours\r\n };\r\n}\r\n\r\nfunction normalizeMSDFAtlasPageSize(value: number | undefined) {\r\n return Math.max(32, Math.round(Number.isFinite(value) ? value! : DEFAULT_MSDF_ATLAS_PAGE_SIZE));\r\n}\r\n\r\nfunction normalizeMSDFGlyphSize(value: number | undefined) {\r\n return Math.max(8, Math.round(Number.isFinite(value) ? value! : DEFAULT_MSDF_GLYPH_SIZE));\r\n}\r\n"],"names":["ARG_1_AND_2_ARE_WORDS","ARGS_ARE_XY_VALUES","WE_HAVE_A_SCALE","MORE_COMPONENTS","WE_HAVE_AN_X_AND_Y_SCALE","WE_HAVE_A_TWO_BY_TWO","DEFAULT_MSDF_ATLAS_PAGE_SIZE","DEFAULT_MSDF_GLYPH_SIZE","FontAsset","_reader","_tables","_glyphOffsets","_cffGlyphProvider","_advanceWidths","_leftSideBearings","_glyphCache","_cmapFormat4","_cmapFormat12","_kernPairs","_gposPairs","_metrics","_numberOfHMetrics","_msdfAtlasSettings","buffer","options","SFNTReader","parseTableDirectory","head","requireTable","maxp","hhea","hmtx","loca","getTable","glyf","cff","uint16","offset","unitsPerEm","ascent","int16","descent","lineGap","glyphCount","parseGlyphOffsets","parseCFFGlyphProvider","Error","metrics","parseHorizontalMetrics","advanceWidths","leftSideBearings","cmap","parseBestCMap","format4","format12","parseKernPairs","parseGPOSPairs","Map","Object","freeze","pageSize","normalizeMSDFAtlasPageSize","glyphSize","normalizeMSDFGlyphSize","fromBuffer","msdfAtlasSettings","msdfAtlasPageSize","msdfGlyphSize","getGlyphIndex","codePoint","glyphIndex","lookupCMapFormat12","lookupCMapFormat4","getKerning","leftGlyphIndex","rightGlyphIndex","gpos","getPairAdjustment","firstXAdvance","secondXAdvance","get","lookupGPOSPair","getGlyph","has","glyph","loadGlyph","set","tag","table","depth","nextOffset","buildGlyphData","glyphOffset","header","parseGlyphHeader","numberOfContours","contours","parseSimpleGlyph","xMin","yMin","xMax","yMax","parseCompositeGlyph","childIndex","bounds","computeBounds","reader","numTables","tables","i","uint32","length","indexToLocFormat","result","Uint32Array","numberOfHMetrics","Uint16Array","Int16Array","cursor","lastAdvanceWidth","recordOffset","platformId","encodingId","subtableOffset","format","isPreferredCMap","currentPlatformId","currentEncodingId","nextScore","getCMapScore","currentScore","nGroups","low","high","mid","groupOffset","startCharCode","endCharCode","segCount","endCodeOffset","startCodeOffset","idDeltaOffset","idRangeOffsetOffset","endCode","startCode","idDelta","idRangeOffset","glyphIndexAddress","version","nTables","coverage","nPairs","pairOffset","j","left","right","value","majorVersion","featureListOffset","lookupListOffset","featureLookupIndices","collectGPOSFeatureLookupIndices","parseGPOSLookupSubtables","featureCount","featureTags","Set","lookupIndices","featureOffset","lookupIndexCount","add","sort","a","b","gposOffset","lookupCount","lookupIndex","lookupOffset","lookupType","subtableCount","parsed","parsePairPosSubtable","push","extensionLookupType","extensionOffset","parsePairPosFormat1","parsePairPosFormat2","parseCoverageTable","valueFormat1","valueFormat2","pairSetCount","pairs","firstGlyph","getCoverageGlyph","pairSetOffset","pairValueCount","secondMap","secondGlyph","value1","readValueRecordX","getValueRecordSize","value2","adjustment","firstXPlacement","xPlacement","xAdvance","secondXPlacement","kind","classDef1","parseClassDefTable","classDef2","class1Count","class2Count","values","Array","c1","c2","glyphs","rangeCount","ranges","rangeOffset","start","end","startIndex","index","range","rangeLength","coverageContains","binarySearchU16","startGlyphId","classes","classRangeCount","classId","getGlyphClass","classDef","valueFormat","size","bit","subtables","merged","subtable","mergePairAdjustment","class1","class2","target","base","next","endPts","pointCount","instructionLength","flags","Uint8Array","flag","uint8","repeatCount","xs","ys","currentX","dx","currentY","dy","points","x","y","onCurve","expandImplicitPoints","slice","component","parseCompositeComponent","child","data","contour","map","point","xx","xy","yx","yy","arg1","arg2","int8","scale","readF2Dot14","current","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","Math","min","max","advanceWidth","leftSideBearing","round","isFinite"],"mappings":"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"}