expo-juce 0.3.1 → 0.3.2

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 (1611) hide show
  1. package/README.md +34 -0
  2. package/build/index.d.ts +21 -24
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +44 -48
  5. package/build/index.js.map +1 -1
  6. package/ios/BeeperAudioEngine.h +45 -0
  7. package/ios/BeeperAudioEngine.mm +352 -0
  8. package/ios/ExpoJuce.podspec +31 -8
  9. package/ios/ExpoJuceBridge.h +12 -12
  10. package/ios/ExpoJuceBridge.m +35 -100
  11. package/ios/ExpoJuceModule.swift +33 -55
  12. package/ios/JuceConfig.h +49 -14
  13. package/ios/JuceModule_audio_basics.mm +2 -0
  14. package/ios/JuceModule_audio_devices.mm +2 -0
  15. package/ios/JuceModule_audio_formats.mm +2 -0
  16. package/ios/JuceModule_audio_processors.mm +2 -0
  17. package/ios/JuceModule_core.mm +5 -0
  18. package/ios/JuceModule_data_structures.mm +2 -0
  19. package/ios/JuceModule_dsp.mm +2 -0
  20. package/ios/JuceModule_events.mm +2 -0
  21. package/ios/JuceModule_graphics.mm +2 -0
  22. package/ios/JuceModule_gui_basics.mm +2 -0
  23. package/ios/JuceModule_gui_extra.mm +2 -0
  24. package/ios/JuceModule_harfbuzz.mm +4 -0
  25. package/ios/PolySynthProcessor.h +83 -0
  26. package/ios/PolySynthProcessor.mm +164 -0
  27. package/ios/TransportEngine.h +35 -0
  28. package/ios/TransportEngine.mm +50 -0
  29. package/ios/Voice.h +59 -0
  30. package/ios/Voice.mm +157 -0
  31. package/ios/VoiceAllocator.h +22 -0
  32. package/ios/VoiceAllocator.mm +88 -0
  33. package/ios/juce_modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp +1957 -0
  34. package/ios/juce_modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h +586 -0
  35. package/ios/juce_modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp +65 -0
  36. package/ios/juce_modules/juce_audio_devices/audio_io/juce_AudioIODevice.h +368 -0
  37. package/ios/juce_modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp +152 -0
  38. package/ios/juce_modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h +200 -0
  39. package/ios/juce_modules/juce_audio_devices/audio_io/juce_SampleRateHelpers.cpp +57 -0
  40. package/ios/juce_modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h +71 -0
  41. package/ios/juce_modules/juce_audio_devices/juce_audio_devices.cpp +277 -0
  42. package/ios/juce_modules/juce_audio_devices/juce_audio_devices.h +201 -0
  43. package/ios/juce_modules/juce_audio_devices/juce_audio_devices.mm +35 -0
  44. package/ios/juce_modules/juce_audio_devices/midi_io/juce_MidiDevices.cpp +246 -0
  45. package/ios/juce_modules/juce_audio_devices/midi_io/juce_MidiDevices.h +482 -0
  46. package/ios/juce_modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp +170 -0
  47. package/ios/juce_modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h +125 -0
  48. package/ios/juce_modules/juce_audio_devices/midi_io/ump/juce_UMPBytestreamInputHandler.h +153 -0
  49. package/ios/juce_modules/juce_audio_devices/midi_io/ump/juce_UMPU32InputHandler.h +165 -0
  50. package/ios/juce_modules/juce_audio_devices/native/java/app/com/rmsl/juce/JuceMidiSupport.java +1121 -0
  51. package/ios/juce_modules/juce_audio_devices/native/juce_ALSA_linux.cpp +1313 -0
  52. package/ios/juce_modules/juce_audio_devices/native/juce_ASIO_windows.cpp +1654 -0
  53. package/ios/juce_modules/juce_audio_devices/native/juce_Audio_android.cpp +482 -0
  54. package/ios/juce_modules/juce_audio_devices/native/juce_Audio_ios.cpp +1508 -0
  55. package/ios/juce_modules/juce_audio_devices/native/juce_Audio_ios.h +106 -0
  56. package/ios/juce_modules/juce_audio_devices/native/juce_Bela_linux.cpp +612 -0
  57. package/ios/juce_modules/juce_audio_devices/native/juce_CoreAudio_mac.cpp +2315 -0
  58. package/ios/juce_modules/juce_audio_devices/native/juce_CoreMidi_mac.mm +1280 -0
  59. package/ios/juce_modules/juce_audio_devices/native/juce_DirectSound_windows.cpp +1304 -0
  60. package/ios/juce_modules/juce_audio_devices/native/juce_HighPerformanceAudioHelpers_android.h +137 -0
  61. package/ios/juce_modules/juce_audio_devices/native/juce_JackAudio_linux.cpp +681 -0
  62. package/ios/juce_modules/juce_audio_devices/native/juce_Midi_android.cpp +1183 -0
  63. package/ios/juce_modules/juce_audio_devices/native/juce_Midi_linux.cpp +788 -0
  64. package/ios/juce_modules/juce_audio_devices/native/juce_Midi_windows.cpp +2038 -0
  65. package/ios/juce_modules/juce_audio_devices/native/juce_Oboe_android.cpp +1440 -0
  66. package/ios/juce_modules/juce_audio_devices/native/juce_OpenSL_android.cpp +1306 -0
  67. package/ios/juce_modules/juce_audio_devices/native/juce_WASAPI_windows.cpp +2032 -0
  68. package/ios/juce_modules/juce_audio_devices/native/oboe/.clang-tidy +3 -0
  69. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/AudioStream.h +706 -0
  70. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/AudioStreamBase.h +343 -0
  71. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/AudioStreamBuilder.h +670 -0
  72. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/AudioStreamCallback.h +193 -0
  73. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/Definitions.h +897 -0
  74. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/FifoBuffer.h +164 -0
  75. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/FifoControllerBase.h +112 -0
  76. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/FullDuplexStream.h +324 -0
  77. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/LatencyTuner.h +150 -0
  78. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/Oboe.h +40 -0
  79. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/OboeExtensions.h +64 -0
  80. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/ResultWithValue.h +155 -0
  81. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/StabilizedCallback.h +75 -0
  82. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/Utilities.h +99 -0
  83. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/Version.h +92 -0
  84. package/ios/juce_modules/juce_audio_devices/native/oboe/src/aaudio/AAudioExtensions.h +180 -0
  85. package/ios/juce_modules/juce_audio_devices/native/oboe/src/aaudio/AAudioLoader.cpp +506 -0
  86. package/ios/juce_modules/juce_audio_devices/native/oboe/src/aaudio/AAudioLoader.h +299 -0
  87. package/ios/juce_modules/juce_audio_devices/native/oboe/src/aaudio/AudioStreamAAudio.cpp +868 -0
  88. package/ios/juce_modules/juce_audio_devices/native/oboe/src/aaudio/AudioStreamAAudio.h +152 -0
  89. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/AdpfWrapper.cpp +124 -0
  90. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/AdpfWrapper.h +85 -0
  91. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/AudioClock.h +75 -0
  92. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/AudioSourceCaller.cpp +38 -0
  93. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/AudioSourceCaller.h +83 -0
  94. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/AudioStream.cpp +222 -0
  95. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/AudioStreamBuilder.cpp +224 -0
  96. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/DataConversionFlowGraph.cpp +266 -0
  97. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/DataConversionFlowGraph.h +86 -0
  98. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FilterAudioStream.cpp +106 -0
  99. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FilterAudioStream.h +227 -0
  100. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FixedBlockAdapter.cpp +38 -0
  101. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FixedBlockAdapter.h +67 -0
  102. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FixedBlockReader.cpp +73 -0
  103. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FixedBlockReader.h +60 -0
  104. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FixedBlockWriter.cpp +73 -0
  105. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FixedBlockWriter.h +54 -0
  106. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/LatencyTuner.cpp +108 -0
  107. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/MonotonicCounter.h +112 -0
  108. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/OboeDebug.h +41 -0
  109. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/OboeExtensions.cpp +36 -0
  110. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/QuirksManager.cpp +311 -0
  111. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/QuirksManager.h +134 -0
  112. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceFloatCaller.cpp +30 -0
  113. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceFloatCaller.h +44 -0
  114. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceI16Caller.cpp +47 -0
  115. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceI16Caller.h +49 -0
  116. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceI24Caller.cpp +56 -0
  117. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceI24Caller.h +53 -0
  118. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceI32Caller.cpp +47 -0
  119. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceI32Caller.h +53 -0
  120. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/StabilizedCallback.cpp +112 -0
  121. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/Trace.cpp +75 -0
  122. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/Trace.h +31 -0
  123. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/Utilities.cpp +333 -0
  124. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/Version.cpp +28 -0
  125. package/ios/juce_modules/juce_audio_devices/native/oboe/src/fifo/FifoBuffer.cpp +178 -0
  126. package/ios/juce_modules/juce_audio_devices/native/oboe/src/fifo/FifoController.cpp +30 -0
  127. package/ios/juce_modules/juce_audio_devices/native/oboe/src/fifo/FifoController.h +62 -0
  128. package/ios/juce_modules/juce_audio_devices/native/oboe/src/fifo/FifoControllerBase.cpp +68 -0
  129. package/ios/juce_modules/juce_audio_devices/native/oboe/src/fifo/FifoControllerIndirect.cpp +32 -0
  130. package/ios/juce_modules/juce_audio_devices/native/oboe/src/fifo/FifoControllerIndirect.h +66 -0
  131. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/ChannelCountConverter.cpp +52 -0
  132. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/ChannelCountConverter.h +52 -0
  133. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/ClipToRange.cpp +38 -0
  134. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/ClipToRange.h +68 -0
  135. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/FlowGraphNode.cpp +114 -0
  136. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/FlowGraphNode.h +450 -0
  137. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/FlowgraphUtilities.h +55 -0
  138. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/Limiter.cpp +67 -0
  139. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/Limiter.h +64 -0
  140. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/ManyToMultiConverter.cpp +47 -0
  141. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/ManyToMultiConverter.h +53 -0
  142. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MonoBlend.cpp +46 -0
  143. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MonoBlend.h +48 -0
  144. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MonoToMultiConverter.cpp +41 -0
  145. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MonoToMultiConverter.h +49 -0
  146. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MultiToManyConverter.cpp +47 -0
  147. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MultiToManyConverter.h +49 -0
  148. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MultiToMonoConverter.cpp +41 -0
  149. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MultiToMonoConverter.h +49 -0
  150. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/RampLinear.cpp +81 -0
  151. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/RampLinear.h +96 -0
  152. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SampleRateConverter.cpp +71 -0
  153. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SampleRateConverter.h +63 -0
  154. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkFloat.cpp +46 -0
  155. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkFloat.h +45 -0
  156. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkI16.cpp +57 -0
  157. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkI16.h +43 -0
  158. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkI24.cpp +66 -0
  159. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkI24.h +44 -0
  160. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkI32.cpp +55 -0
  161. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkI32.h +40 -0
  162. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceFloat.cpp +42 -0
  163. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceFloat.h +44 -0
  164. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceI16.cpp +54 -0
  165. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceI16.h +42 -0
  166. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceI24.cpp +65 -0
  167. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceI24.h +43 -0
  168. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceI32.cpp +54 -0
  169. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceI32.h +42 -0
  170. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/HyperbolicCosineWindow.h +71 -0
  171. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/IntegerRatio.cpp +50 -0
  172. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/IntegerRatio.h +54 -0
  173. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/KaiserWindow.h +90 -0
  174. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/LinearResampler.cpp +42 -0
  175. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/LinearResampler.h +47 -0
  176. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/MultiChannelResampler.cpp +171 -0
  177. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/MultiChannelResampler.h +281 -0
  178. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/PolyphaseResampler.cpp +61 -0
  179. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/PolyphaseResampler.h +53 -0
  180. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/PolyphaseResamplerMono.cpp +63 -0
  181. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/PolyphaseResamplerMono.h +41 -0
  182. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/PolyphaseResamplerStereo.cpp +79 -0
  183. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/PolyphaseResamplerStereo.h +41 -0
  184. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/ResamplerDefinitions.h +27 -0
  185. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/SincResampler.cpp +72 -0
  186. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/SincResampler.h +50 -0
  187. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/SincResamplerStereo.cpp +81 -0
  188. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/SincResamplerStereo.h +42 -0
  189. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioInputStreamOpenSLES.cpp +360 -0
  190. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioInputStreamOpenSLES.h +66 -0
  191. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioOutputStreamOpenSLES.cpp +462 -0
  192. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioOutputStreamOpenSLES.h +80 -0
  193. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioStreamBuffered.cpp +285 -0
  194. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioStreamBuffered.h +96 -0
  195. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioStreamOpenSLES.cpp +499 -0
  196. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioStreamOpenSLES.h +148 -0
  197. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/EngineOpenSLES.cpp +141 -0
  198. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/EngineOpenSLES.h +65 -0
  199. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/OpenSLESUtilities.cpp +96 -0
  200. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/OpenSLESUtilities.h +44 -0
  201. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/OutputMixerOpenSLES.cpp +74 -0
  202. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/OutputMixerOpenSLES.h +58 -0
  203. package/ios/juce_modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp +193 -0
  204. package/ios/juce_modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h +127 -0
  205. package/ios/juce_modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp +295 -0
  206. package/ios/juce_modules/juce_audio_devices/sources/juce_AudioTransportSource.h +192 -0
  207. package/ios/juce_modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp +107 -0
  208. package/ios/juce_modules/juce_audio_processors/format/juce_AudioPluginFormat.h +183 -0
  209. package/ios/juce_modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp +212 -0
  210. package/ios/juce_modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h +151 -0
  211. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/generate_lv2_bundle_sources.py +175 -0
  212. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/juce_lv2_config.h +87 -0
  213. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/COPYING +13 -0
  214. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/lilv/lilv.h +2117 -0
  215. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/lilv/lilvmm.hpp +440 -0
  216. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/collections.c +240 -0
  217. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/filesystem.c +564 -0
  218. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/filesystem.h +182 -0
  219. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/instance.c +115 -0
  220. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/lib.c +127 -0
  221. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/lilv_internal.h +477 -0
  222. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/node.c +413 -0
  223. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/plugin.c +1140 -0
  224. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/pluginclass.c +91 -0
  225. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/port.c +272 -0
  226. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/query.c +144 -0
  227. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/scalepoint.c +53 -0
  228. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/state.c +1541 -0
  229. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/ui.c +115 -0
  230. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/util.c +291 -0
  231. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/world.c +1249 -0
  232. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/zix/common.h +138 -0
  233. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/zix/tree.c +727 -0
  234. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/zix/tree.h +164 -0
  235. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv_config.h +42 -0
  236. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/COPYING +16 -0
  237. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/atom-test-utils.c +73 -0
  238. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/atom-test.c +367 -0
  239. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/atom.h +260 -0
  240. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/atom.meta.ttl +542 -0
  241. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/atom.ttl +247 -0
  242. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/forge-overflow-test.c +235 -0
  243. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/forge.h +683 -0
  244. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/manifest.ttl +9 -0
  245. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/util.h +523 -0
  246. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/buf-size/buf-size.h +51 -0
  247. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/buf-size/buf-size.meta.ttl +157 -0
  248. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/buf-size/buf-size.ttl +67 -0
  249. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/buf-size/manifest.ttl +9 -0
  250. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/attributes.h +59 -0
  251. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/lv2.h +484 -0
  252. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/lv2_util.h +103 -0
  253. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/lv2core.meta.ttl +905 -0
  254. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/lv2core.ttl +674 -0
  255. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/manifest.ttl +15 -0
  256. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/meta.ttl +199 -0
  257. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/people.ttl +51 -0
  258. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/data-access/data-access.h +73 -0
  259. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/data-access/data-access.meta.ttl +77 -0
  260. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/data-access/data-access.ttl +11 -0
  261. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/data-access/manifest.ttl +9 -0
  262. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/dynmanifest/dynmanifest.h +160 -0
  263. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/dynmanifest/dynmanifest.meta.ttl +131 -0
  264. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/dynmanifest/dynmanifest.ttl +25 -0
  265. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/dynmanifest/manifest.ttl +9 -0
  266. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/event/event-helpers.h +255 -0
  267. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/event/event.h +306 -0
  268. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/event/event.meta.ttl +246 -0
  269. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/event/event.ttl +86 -0
  270. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/event/manifest.ttl +9 -0
  271. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/instance-access/instance-access.h +41 -0
  272. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/instance-access/instance-access.meta.ttl +75 -0
  273. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/instance-access/instance-access.ttl +11 -0
  274. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/instance-access/manifest.ttl +9 -0
  275. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/log/log.h +113 -0
  276. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/log/log.meta.ttl +126 -0
  277. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/log/log.ttl +48 -0
  278. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/log/logger.h +157 -0
  279. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/log/manifest.ttl +9 -0
  280. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/midi/manifest.ttl +9 -0
  281. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/midi/midi.h +248 -0
  282. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/midi/midi.meta.ttl +153 -0
  283. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/midi/midi.ttl +366 -0
  284. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/morph/manifest.ttl +9 -0
  285. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/morph/morph.h +48 -0
  286. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/morph/morph.meta.ttl +90 -0
  287. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/morph/morph.ttl +46 -0
  288. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/options/manifest.ttl +9 -0
  289. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/options/options.h +149 -0
  290. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/options/options.meta.ttl +129 -0
  291. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/options/options.ttl +44 -0
  292. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/parameters/manifest.ttl +9 -0
  293. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/parameters/parameters.h +68 -0
  294. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/parameters/parameters.meta.ttl +75 -0
  295. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/parameters/parameters.ttl +202 -0
  296. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/patch/manifest.ttl +9 -0
  297. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/patch/patch.h +73 -0
  298. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/patch/patch.meta.ttl +374 -0
  299. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/patch/patch.ttl +251 -0
  300. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-groups/manifest.ttl +9 -0
  301. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-groups/port-groups.h +77 -0
  302. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-groups/port-groups.meta.ttl +144 -0
  303. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-groups/port-groups.ttl +807 -0
  304. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-props/manifest.ttl +9 -0
  305. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-props/port-props.h +53 -0
  306. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-props/port-props.meta.ttl +202 -0
  307. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-props/port-props.ttl +79 -0
  308. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/presets/manifest.ttl +9 -0
  309. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/presets/presets.h +48 -0
  310. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/presets/presets.meta.ttl +132 -0
  311. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/presets/presets.ttl +60 -0
  312. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/resize-port/manifest.ttl +9 -0
  313. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/resize-port/resize-port.h +89 -0
  314. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/resize-port/resize-port.meta.ttl +74 -0
  315. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/resize-port/resize-port.ttl +36 -0
  316. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/state/manifest.ttl +9 -0
  317. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/state/state.h +392 -0
  318. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/state/state.meta.ttl +467 -0
  319. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/state/state.ttl +60 -0
  320. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/time/manifest.ttl +9 -0
  321. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/time/time.h +59 -0
  322. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/time/time.meta.ttl +112 -0
  323. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/time/time.ttl +122 -0
  324. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/ui/manifest.ttl +9 -0
  325. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/ui/ui.h +543 -0
  326. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/ui/ui.meta.ttl +627 -0
  327. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/ui/ui.ttl +248 -0
  328. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/units/manifest.ttl +9 -0
  329. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/units/units.h +75 -0
  330. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/units/units.meta.ttl +154 -0
  331. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/units/units.ttl +379 -0
  332. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/uri-map/manifest.ttl +9 -0
  333. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/uri-map/uri-map.h +121 -0
  334. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/uri-map/uri-map.meta.ttl +72 -0
  335. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/uri-map/uri-map.ttl +14 -0
  336. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/urid/manifest.ttl +9 -0
  337. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/urid/urid.h +140 -0
  338. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/urid/urid.meta.ttl +84 -0
  339. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/urid/urid.ttl +22 -0
  340. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/worker/manifest.ttl +9 -0
  341. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/worker/worker.h +183 -0
  342. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/worker/worker.meta.ttl +82 -0
  343. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/worker/worker.ttl +25 -0
  344. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/COPYING +13 -0
  345. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/serd/serd.h +1059 -0
  346. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/.clang-tidy +18 -0
  347. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/attributes.h +26 -0
  348. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/base64.c +132 -0
  349. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/base64.h +48 -0
  350. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/byte_sink.h +98 -0
  351. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/byte_source.c +112 -0
  352. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/byte_source.h +120 -0
  353. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/env.c +256 -0
  354. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/n3.c +1720 -0
  355. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/node.c +393 -0
  356. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/node.h +48 -0
  357. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/reader.c +425 -0
  358. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/reader.h +196 -0
  359. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/serd_config.h +98 -0
  360. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/serd_internal.h +46 -0
  361. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/serdi.c +377 -0
  362. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/stack.h +119 -0
  363. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/string.c +179 -0
  364. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/string_utils.h +173 -0
  365. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/system.c +82 -0
  366. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/system.h +40 -0
  367. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/uri.c +506 -0
  368. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/uri_utils.h +110 -0
  369. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/writer.c +1114 -0
  370. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd_config.h +42 -0
  371. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/COPYING +13 -0
  372. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/sord/sord.h +642 -0
  373. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/sord/sordmm.hpp +720 -0
  374. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/sord.c +1368 -0
  375. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/sord_config.h +61 -0
  376. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/sord_internal.h +53 -0
  377. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/sord_test.c +767 -0
  378. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/sord_validate.c +804 -0
  379. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/sordi.c +216 -0
  380. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/sordmm_test.cpp +25 -0
  381. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/syntax.c +203 -0
  382. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/zix/btree.c +936 -0
  383. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/zix/btree.h +187 -0
  384. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/zix/common.h +138 -0
  385. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/zix/digest.c +141 -0
  386. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/zix/digest.h +67 -0
  387. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/zix/hash.c +230 -0
  388. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/zix/hash.h +138 -0
  389. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord_config.h +42 -0
  390. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sratom/COPYING +13 -0
  391. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sratom/sratom/sratom.h +220 -0
  392. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sratom/src/sratom.c +919 -0
  393. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/VST3_License_Agreement.pdf +0 -0
  394. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/VST3_Usage_Guidelines.pdf +0 -0
  395. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp +52 -0
  396. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/classfactoryhelpers.h +87 -0
  397. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp +641 -0
  398. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.h +306 -0
  399. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fcommandline.h +392 -0
  400. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.cpp +340 -0
  401. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.h +246 -0
  402. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp +271 -0
  403. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.h +577 -0
  404. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp +756 -0
  405. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.h +242 -0
  406. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp +3962 -0
  407. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h +767 -0
  408. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp +737 -0
  409. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.h +150 -0
  410. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/thread/include/flock.h +184 -0
  411. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/thread/source/flock.cpp +146 -0
  412. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/helper.manifest +10 -0
  413. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.cpp +106 -0
  414. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.h +44 -0
  415. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp +40 -0
  416. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpop.h +25 -0
  417. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpush.h +40 -0
  418. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h +333 -0
  419. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h +291 -0
  420. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h +176 -0
  421. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp +502 -0
  422. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h +564 -0
  423. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h +107 -0
  424. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h +297 -0
  425. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h +87 -0
  426. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/icloneable.h +41 -0
  427. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipersistent.h +160 -0
  428. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipluginbase.h +520 -0
  429. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iplugincompatibility.h +122 -0
  430. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h +80 -0
  431. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iupdatehandler.h +98 -0
  432. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/smartpointer.h +386 -0
  433. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/typesizecheck.h +55 -0
  434. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.cpp +275 -0
  435. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.h +116 -0
  436. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugview.h +287 -0
  437. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugviewcontentscalesupport.h +75 -0
  438. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstattributes.h +150 -0
  439. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstaudioprocessor.h +434 -0
  440. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstautomationstate.h +67 -0
  441. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstchannelcontextinfo.h +238 -0
  442. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h +205 -0
  443. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcontextmenu.h +219 -0
  444. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstdataexchange.h +221 -0
  445. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h +657 -0
  446. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstevents.h +221 -0
  447. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsthostapplication.h +163 -0
  448. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstinterappaudio.h +142 -0
  449. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmessage.h +97 -0
  450. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidicontrollers.h +118 -0
  451. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidilearn.h +106 -0
  452. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstnoteexpression.h +255 -0
  453. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstparameterchanges.h +145 -0
  454. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstparameterfunctionname.h +151 -0
  455. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstphysicalui.h +169 -0
  456. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstpluginterfacesupport.h +67 -0
  457. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstplugview.h +62 -0
  458. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprefetchablesupport.h +99 -0
  459. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprocesscontext.h +153 -0
  460. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstremapparamid.h +75 -0
  461. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstrepresentation.h +364 -0
  462. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsttestplugprovider.h +109 -0
  463. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstunits.h +271 -0
  464. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstpshpack4.h +30 -0
  465. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h +1318 -0
  466. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h +157 -0
  467. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp +441 -0
  468. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp +319 -0
  469. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h +79 -0
  470. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp +100 -0
  471. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.h +116 -0
  472. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/readfile.cpp +81 -0
  473. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/readfile.h +54 -0
  474. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp +342 -0
  475. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.h +120 -0
  476. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module.cpp +340 -0
  477. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module.h +214 -0
  478. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_linux.cpp +369 -0
  479. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_mac.mm +395 -0
  480. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_win32.cpp +647 -0
  481. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/pluginterfacesupport.cpp +134 -0
  482. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/pluginterfacesupport.h +70 -0
  483. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/moduleinfo/json.h +3403 -0
  484. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/moduleinfo/jsoncxx.h +427 -0
  485. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/moduleinfo/moduleinfo.h +100 -0
  486. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/moduleinfo/moduleinfocreator.cpp +309 -0
  487. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/moduleinfo/moduleinfocreator.h +67 -0
  488. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/moduleinfo/moduleinfoparser.cpp +537 -0
  489. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/moduleinfo/moduleinfoparser.h +68 -0
  490. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/optional.h +135 -0
  491. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/stringconvert.cpp +148 -0
  492. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/stringconvert.h +147 -0
  493. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/uid.h +286 -0
  494. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.cpp +99 -0
  495. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.h +172 -0
  496. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.cpp +216 -0
  497. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.h +118 -0
  498. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp +180 -0
  499. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.h +110 -0
  500. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp +701 -0
  501. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.h +374 -0
  502. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstinitiids.cpp +154 -0
  503. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.cpp +454 -0
  504. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.h +240 -0
  505. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.cpp +927 -0
  506. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.h +306 -0
  507. package/ios/juce_modules/juce_audio_processors/format_types/juce_ARACommon.cpp +99 -0
  508. package/ios/juce_modules/juce_audio_processors/format_types/juce_ARACommon.h +98 -0
  509. package/ios/juce_modules/juce_audio_processors/format_types/juce_ARAHosting.cpp +490 -0
  510. package/ios/juce_modules/juce_audio_processors/format_types/juce_ARAHosting.h +786 -0
  511. package/ios/juce_modules/juce_audio_processors/format_types/juce_AU_Shared.h +588 -0
  512. package/ios/juce_modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h +79 -0
  513. package/ios/juce_modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm +2947 -0
  514. package/ios/juce_modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp +728 -0
  515. package/ios/juce_modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h +79 -0
  516. package/ios/juce_modules/juce_audio_processors/format_types/juce_LV2Common.h +676 -0
  517. package/ios/juce_modules/juce_audio_processors/format_types/juce_LV2PluginFormat.cpp +5654 -0
  518. package/ios/juce_modules/juce_audio_processors/format_types/juce_LV2PluginFormat.h +87 -0
  519. package/ios/juce_modules/juce_audio_processors/format_types/juce_LV2PluginFormat_test.cpp +281 -0
  520. package/ios/juce_modules/juce_audio_processors/format_types/juce_LV2Resources.h +10241 -0
  521. package/ios/juce_modules/juce_audio_processors/format_types/juce_LV2SupportLibs.cpp +117 -0
  522. package/ios/juce_modules/juce_audio_processors/format_types/juce_LegacyAudioParameter.cpp +225 -0
  523. package/ios/juce_modules/juce_audio_processors/format_types/juce_VST3Common.h +1851 -0
  524. package/ios/juce_modules/juce_audio_processors/format_types/juce_VST3Headers.h +280 -0
  525. package/ios/juce_modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp +4086 -0
  526. package/ios/juce_modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h +95 -0
  527. package/ios/juce_modules/juce_audio_processors/format_types/juce_VST3PluginFormat_test.cpp +740 -0
  528. package/ios/juce_modules/juce_audio_processors/format_types/juce_VSTCommon.h +315 -0
  529. package/ios/juce_modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h +229 -0
  530. package/ios/juce_modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp +3764 -0
  531. package/ios/juce_modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h +141 -0
  532. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/ipslcontextinfo.h +190 -0
  533. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/ipsleditcontroller.h +108 -0
  534. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/ipslgainreduction.h +53 -0
  535. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/ipslhostcommands.h +121 -0
  536. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/ipslviewembedding.h +53 -0
  537. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/ipslviewscaling.h +67 -0
  538. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/pslauextensions.h +57 -0
  539. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/pslvst2extensions.h +111 -0
  540. package/ios/juce_modules/juce_audio_processors/juce_audio_processors.cpp +246 -0
  541. package/ios/juce_modules/juce_audio_processors/juce_audio_processors.h +195 -0
  542. package/ios/juce_modules/juce_audio_processors/juce_audio_processors.mm +35 -0
  543. package/ios/juce_modules/juce_audio_processors/juce_audio_processors_ara.cpp +51 -0
  544. package/ios/juce_modules/juce_audio_processors/juce_audio_processors_lv2_libs.cpp +44 -0
  545. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioPluginInstance.cpp +294 -0
  546. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioPluginInstance.h +191 -0
  547. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessor.cpp +1655 -0
  548. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessor.h +1587 -0
  549. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp +230 -0
  550. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h +272 -0
  551. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorEditorHostContext.h +98 -0
  552. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp +2375 -0
  553. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h +453 -0
  554. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorListener.h +198 -0
  555. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h +370 -0
  556. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp +330 -0
  557. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h +263 -0
  558. package/ios/juce_modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp +633 -0
  559. package/ios/juce_modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h +74 -0
  560. package/ios/juce_modules/juce_audio_processors/processors/juce_HostedAudioProcessorParameter.h +61 -0
  561. package/ios/juce_modules/juce_audio_processors/processors/juce_PluginDescription.cpp +126 -0
  562. package/ios/juce_modules/juce_audio_processors/processors/juce_PluginDescription.h +189 -0
  563. package/ios/juce_modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp +651 -0
  564. package/ios/juce_modules/juce_audio_processors/scanning/juce_KnownPluginList.h +249 -0
  565. package/ios/juce_modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp +148 -0
  566. package/ios/juce_modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h +147 -0
  567. package/ios/juce_modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp +690 -0
  568. package/ios/juce_modules/juce_audio_processors/scanning/juce_PluginListComponent.h +156 -0
  569. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARADebug.h +76 -0
  570. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARADocumentController.cpp +985 -0
  571. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARADocumentController.h +538 -0
  572. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARADocumentControllerCommon.cpp +80 -0
  573. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARAModelObjects.cpp +302 -0
  574. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARAModelObjects.h +983 -0
  575. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARAPlugInInstanceRoles.cpp +123 -0
  576. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARAPlugInInstanceRoles.h +263 -0
  577. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARA_utils.cpp +65 -0
  578. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARA_utils.h +95 -0
  579. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.cpp +163 -0
  580. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.h +213 -0
  581. package/ios/juce_modules/juce_audio_processors/utilities/juce_AAXClientExtensions.cpp +308 -0
  582. package/ios/juce_modules/juce_audio_processors/utilities/juce_AAXClientExtensions.h +92 -0
  583. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterBool.cpp +104 -0
  584. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterBool.h +149 -0
  585. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterChoice.cpp +145 -0
  586. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterChoice.h +162 -0
  587. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterFloat.cpp +113 -0
  588. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterFloat.h +169 -0
  589. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterInt.cpp +146 -0
  590. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterInt.h +163 -0
  591. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.cpp +56 -0
  592. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h +200 -0
  593. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp +997 -0
  594. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h +669 -0
  595. package/ios/juce_modules/juce_audio_processors/utilities/juce_ExtensionsVisitor.h +155 -0
  596. package/ios/juce_modules/juce_audio_processors/utilities/juce_FlagCache.h +191 -0
  597. package/ios/juce_modules/juce_audio_processors/utilities/juce_ParameterAttachments.cpp +442 -0
  598. package/ios/juce_modules/juce_audio_processors/utilities/juce_ParameterAttachments.h +400 -0
  599. package/ios/juce_modules/juce_audio_processors/utilities/juce_PluginHostType.cpp +328 -0
  600. package/ios/juce_modules/juce_audio_processors/utilities/juce_PluginHostType.h +265 -0
  601. package/ios/juce_modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp +60 -0
  602. package/ios/juce_modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h +129 -0
  603. package/ios/juce_modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.cpp +48 -0
  604. package/ios/juce_modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.h +83 -0
  605. package/ios/juce_modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h +119 -0
  606. package/ios/juce_modules/juce_core/native/juce_BasicNativeHeaders.h +6 -1
  607. package/ios/juce_modules/juce_graphics/colour/juce_Colour.cpp +726 -0
  608. package/ios/juce_modules/juce_graphics/colour/juce_Colour.h +429 -0
  609. package/ios/juce_modules/juce_graphics/colour/juce_ColourGradient.cpp +294 -0
  610. package/ios/juce_modules/juce_graphics/colour/juce_ColourGradient.h +255 -0
  611. package/ios/juce_modules/juce_graphics/colour/juce_Colours.cpp +205 -0
  612. package/ios/juce_modules/juce_graphics/colour/juce_Colours.h +200 -0
  613. package/ios/juce_modules/juce_graphics/colour/juce_FillType.cpp +166 -0
  614. package/ios/juce_modules/juce_graphics/colour/juce_FillType.h +165 -0
  615. package/ios/juce_modules/juce_graphics/colour/juce_PixelFormats.h +749 -0
  616. package/ios/juce_modules/juce_graphics/contexts/juce_GraphicsContext.cpp +857 -0
  617. package/ios/juce_modules/juce_graphics/contexts/juce_GraphicsContext.h +758 -0
  618. package/ios/juce_modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h +186 -0
  619. package/ios/juce_modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp +59 -0
  620. package/ios/juce_modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h +66 -0
  621. package/ios/juce_modules/juce_graphics/detail/juce_Ranges.cpp +793 -0
  622. package/ios/juce_modules/juce_graphics/detail/juce_Ranges.h +1014 -0
  623. package/ios/juce_modules/juce_graphics/effects/juce_DropShadowEffect.cpp +152 -0
  624. package/ios/juce_modules/juce_graphics/effects/juce_DropShadowEffect.h +122 -0
  625. package/ios/juce_modules/juce_graphics/effects/juce_GlowEffect.cpp +59 -0
  626. package/ios/juce_modules/juce_graphics/effects/juce_GlowEffect.h +86 -0
  627. package/ios/juce_modules/juce_graphics/effects/juce_ImageEffectFilter.h +80 -0
  628. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Color/CBDT/CBDT.hh +1031 -0
  629. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Color/COLR/COLR.hh +2745 -0
  630. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Color/COLR/colrv1-closure.hh +137 -0
  631. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Color/CPAL/CPAL.hh +358 -0
  632. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Color/sbix/sbix.hh +448 -0
  633. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Color/svg/svg.hh +152 -0
  634. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/Common/Coverage.hh +352 -0
  635. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/Common/CoverageFormat1.hh +133 -0
  636. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/Common/CoverageFormat2.hh +239 -0
  637. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/Common/RangeRecord.hh +97 -0
  638. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GDEF/GDEF.hh +1044 -0
  639. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/Anchor.hh +84 -0
  640. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/AnchorFormat1.hh +46 -0
  641. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/AnchorFormat2.hh +58 -0
  642. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/AnchorFormat3.hh +120 -0
  643. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/AnchorMatrix.hh +87 -0
  644. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/ChainContextPos.hh +14 -0
  645. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/Common.hh +33 -0
  646. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/ContextPos.hh +14 -0
  647. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/CursivePos.hh +35 -0
  648. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/CursivePosFormat1.hh +311 -0
  649. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/ExtensionPos.hh +17 -0
  650. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/GPOS.hh +171 -0
  651. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/LigatureArray.hh +57 -0
  652. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkArray.hh +128 -0
  653. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkBasePos.hh +41 -0
  654. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkBasePosFormat1.hh +243 -0
  655. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkLigPos.hh +41 -0
  656. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkLigPosFormat1.hh +224 -0
  657. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkMarkPos.hh +42 -0
  658. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkMarkPosFormat1.hh +231 -0
  659. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkRecord.hh +51 -0
  660. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/PairPos.hh +46 -0
  661. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/PairPosFormat1.hh +233 -0
  662. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/PairPosFormat2.hh +365 -0
  663. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/PairSet.hh +210 -0
  664. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/PairValueRecord.hh +99 -0
  665. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/PosLookup.hh +79 -0
  666. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/PosLookupSubTable.hh +79 -0
  667. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/SinglePos.hh +98 -0
  668. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/SinglePosFormat1.hh +190 -0
  669. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/SinglePosFormat2.hh +213 -0
  670. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/ValueFormat.hh +441 -0
  671. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/AlternateSet.hh +126 -0
  672. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/AlternateSubst.hh +62 -0
  673. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/AlternateSubstFormat1.hh +128 -0
  674. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/ChainContextSubst.hh +18 -0
  675. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/Common.hh +19 -0
  676. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/ContextSubst.hh +18 -0
  677. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/ExtensionSubst.hh +22 -0
  678. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/GSUB.hh +61 -0
  679. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/Ligature.hh +203 -0
  680. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/LigatureSet.hh +188 -0
  681. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/LigatureSubst.hh +71 -0
  682. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/LigatureSubstFormat1.hh +166 -0
  683. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/MultipleSubst.hh +62 -0
  684. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/MultipleSubstFormat1.hh +130 -0
  685. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/ReverseChainSingleSubst.hh +36 -0
  686. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/ReverseChainSingleSubstFormat1.hh +245 -0
  687. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/Sequence.hh +165 -0
  688. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/SingleSubst.hh +103 -0
  689. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/SingleSubstFormat1.hh +204 -0
  690. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/SingleSubstFormat2.hh +176 -0
  691. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/SubstLookup.hh +220 -0
  692. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/SubstLookupSubTable.hh +77 -0
  693. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/types.hh +66 -0
  694. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Var/VARC/VARC.cc +346 -0
  695. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Var/VARC/VARC.hh +193 -0
  696. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Var/VARC/coord-setter.hh +37 -0
  697. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/CompositeGlyph.hh +435 -0
  698. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/Glyph.hh +556 -0
  699. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/GlyphHeader.hh +52 -0
  700. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/SimpleGlyph.hh +348 -0
  701. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/SubsetGlyph.hh +141 -0
  702. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/composite-iter.hh +68 -0
  703. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/glyf-helpers.hh +127 -0
  704. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/glyf.hh +513 -0
  705. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/loca.hh +43 -0
  706. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/path-builder.hh +190 -0
  707. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/name/name.hh +589 -0
  708. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/failing-alloc.c +65 -0
  709. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/harfbuzz-subset.cc +64 -0
  710. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/harfbuzz.cc +63 -0
  711. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-ankr-table.hh +99 -0
  712. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-bsln-table.hh +159 -0
  713. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-common.hh +1076 -0
  714. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-feat-table.hh +224 -0
  715. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-just-table.hh +420 -0
  716. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-kerx-table.hh +1191 -0
  717. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-morx-table.hh +1443 -0
  718. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-opbd-table.hh +174 -0
  719. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-trak-table.hh +232 -0
  720. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout.cc +449 -0
  721. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout.h +795 -0
  722. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout.hh +77 -0
  723. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-ltag-table.hh +95 -0
  724. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-map.cc +172 -0
  725. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-map.hh +123 -0
  726. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat.h +38 -0
  727. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-algs.hh +1558 -0
  728. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-array.hh +504 -0
  729. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-atomic.hh +228 -0
  730. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-bimap.hh +205 -0
  731. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-bit-page.hh +352 -0
  732. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-bit-set-invertible.hh +379 -0
  733. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-bit-set.hh +982 -0
  734. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-blob.cc +794 -0
  735. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-blob.h +160 -0
  736. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-blob.hh +98 -0
  737. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer-deserialize-json.hh +795 -0
  738. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer-deserialize-text-glyphs.hh +692 -0
  739. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer-deserialize-text-unicode.hh +332 -0
  740. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer-serialize.cc +872 -0
  741. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer-verify.cc +423 -0
  742. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer.cc +2266 -0
  743. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer.h +805 -0
  744. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer.hh +682 -0
  745. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-cache.hh +99 -0
  746. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-cff-interp-common.hh +642 -0
  747. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-cff-interp-cs-common.hh +905 -0
  748. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-cff-interp-dict-common.hh +201 -0
  749. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-cff1-interp-cs.hh +160 -0
  750. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-cff2-interp-cs.hh +278 -0
  751. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-common.cc +1220 -0
  752. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-common.h +935 -0
  753. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-config.hh +212 -0
  754. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-coretext.cc +1197 -0
  755. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-coretext.h +96 -0
  756. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-cplusplus.hh +220 -0
  757. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-debug.hh +491 -0
  758. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-deprecated.h +318 -0
  759. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-directwrite.cc +884 -0
  760. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-directwrite.h +40 -0
  761. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-dispatch.hh +60 -0
  762. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-draw.cc +458 -0
  763. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-draw.h +340 -0
  764. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-draw.hh +243 -0
  765. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-face-builder.cc +246 -0
  766. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-face.cc +664 -0
  767. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-face.h +187 -0
  768. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-face.hh +111 -0
  769. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-fallback-shape.cc +115 -0
  770. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-font.cc +3069 -0
  771. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-font.h +1153 -0
  772. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-font.hh +720 -0
  773. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ft-colr.hh +601 -0
  774. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ft.cc +1500 -0
  775. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ft.h +145 -0
  776. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-gdi.cc +85 -0
  777. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-gdi.h +39 -0
  778. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-geometry.hh +284 -0
  779. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-glib.cc +232 -0
  780. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-glib.h +56 -0
  781. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-gobject-structs.cc +116 -0
  782. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-gobject-structs.h +136 -0
  783. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-gobject.h +40 -0
  784. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-graphite2.cc +455 -0
  785. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-graphite2.h +61 -0
  786. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-icu.cc +291 -0
  787. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-icu.h +52 -0
  788. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-iter.hh +1037 -0
  789. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-kern.hh +145 -0
  790. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-limits.hh +112 -0
  791. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-machinery.hh +332 -0
  792. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-map.cc +419 -0
  793. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-map.h +143 -0
  794. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-map.hh +568 -0
  795. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-meta.hh +238 -0
  796. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ms-feature-ranges.hh +232 -0
  797. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-multimap.hh +96 -0
  798. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-mutex.hh +122 -0
  799. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-null.hh +226 -0
  800. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-number-parser.hh +237 -0
  801. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-number.cc +79 -0
  802. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-number.hh +41 -0
  803. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-object.hh +357 -0
  804. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-open-file.hh +543 -0
  805. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-open-type.hh +1886 -0
  806. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-cff-common.hh +374 -0
  807. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-cff1-std-str.hh +425 -0
  808. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-cff1-table.cc +620 -0
  809. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-cff1-table.hh +1539 -0
  810. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-cff2-table.cc +227 -0
  811. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-cff2-table.hh +564 -0
  812. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-cmap-table.hh +2154 -0
  813. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-color.cc +363 -0
  814. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-color.h +155 -0
  815. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-deprecated.h +147 -0
  816. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-face-table-list.hh +155 -0
  817. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-face.cc +60 -0
  818. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-face.hh +77 -0
  819. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-font.cc +662 -0
  820. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-font.h +45 -0
  821. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-gasp-table.hh +84 -0
  822. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-glyf-table.hh +35 -0
  823. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-hdmx-table.hh +177 -0
  824. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-head-table.hh +204 -0
  825. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-hhea-table.hh +106 -0
  826. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-hmtx-table.hh +502 -0
  827. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-kern-table.hh +425 -0
  828. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout-base-table.hh +849 -0
  829. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout-common.hh +4953 -0
  830. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout-gdef-table.hh +34 -0
  831. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout-gpos-table.hh +81 -0
  832. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout-gsub-table.hh +94 -0
  833. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout-gsubgpos.hh +4887 -0
  834. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout-jstf-table.hh +236 -0
  835. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout.cc +2705 -0
  836. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout.h +549 -0
  837. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout.hh +611 -0
  838. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-map.cc +394 -0
  839. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-map.hh +298 -0
  840. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-math-table.hh +1132 -0
  841. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-math.cc +338 -0
  842. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-math.h +333 -0
  843. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-maxp-table.hh +156 -0
  844. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-meta-table.hh +131 -0
  845. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-meta.cc +79 -0
  846. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-meta.h +72 -0
  847. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-metrics.cc +436 -0
  848. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-metrics.h +129 -0
  849. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-metrics.hh +35 -0
  850. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-name-language-static.hh +456 -0
  851. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-name-language.hh +40 -0
  852. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-name-table.hh +32 -0
  853. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-name.cc +184 -0
  854. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-name.h +164 -0
  855. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-os2-table.hh +405 -0
  856. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-os2-unicode-ranges.hh +231 -0
  857. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-post-macroman.hh +294 -0
  858. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-post-table-v2subset.hh +142 -0
  859. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-post-table.hh +352 -0
  860. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shape-fallback.cc +615 -0
  861. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shape-fallback.hh +54 -0
  862. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shape-normalize.cc +470 -0
  863. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shape-normalize.hh +104 -0
  864. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shape.cc +1319 -0
  865. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shape.h +53 -0
  866. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shape.hh +171 -0
  867. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-arabic-fallback.hh +383 -0
  868. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-arabic-joining-list.hh +47 -0
  869. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-arabic-pua.hh +118 -0
  870. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-arabic-table.hh +556 -0
  871. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-arabic-win1256.hh +349 -0
  872. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-arabic.cc +774 -0
  873. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-arabic.hh +50 -0
  874. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-default.cc +75 -0
  875. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-hangul.cc +436 -0
  876. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-hebrew.cc +211 -0
  877. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-indic-machine.hh +627 -0
  878. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-indic-table.cc +561 -0
  879. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-indic.cc +1578 -0
  880. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-indic.hh +66 -0
  881. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-khmer-machine.hh +428 -0
  882. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-khmer.cc +387 -0
  883. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-myanmar-machine.hh +553 -0
  884. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-myanmar.cc +390 -0
  885. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-syllabic.cc +112 -0
  886. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-syllabic.hh +47 -0
  887. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-thai.cc +393 -0
  888. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-use-machine.hh +1079 -0
  889. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-use-table.hh +690 -0
  890. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-use.cc +514 -0
  891. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-vowel-constraints.cc +477 -0
  892. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-vowel-constraints.hh +39 -0
  893. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper.hh +404 -0
  894. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-stat-table.hh +619 -0
  895. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-tag-table.hh +3009 -0
  896. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-tag.cc +658 -0
  897. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-avar-table.hh +411 -0
  898. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-common.hh +1985 -0
  899. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-cvar-table.hh +220 -0
  900. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-fvar-table.hh +505 -0
  901. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-gvar-table.hh +890 -0
  902. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-hvar-table.hh +478 -0
  903. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-mvar-table.hh +184 -0
  904. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-varc-table.hh +32 -0
  905. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var.cc +328 -0
  906. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var.h +191 -0
  907. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-vorg-table.hh +137 -0
  908. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot.h +49 -0
  909. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-outline.cc +321 -0
  910. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-outline.hh +83 -0
  911. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-paint-extents.cc +330 -0
  912. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-paint-extents.hh +132 -0
  913. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-paint.cc +728 -0
  914. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-paint.h +1029 -0
  915. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-paint.hh +236 -0
  916. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-pool.hh +107 -0
  917. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-priority-queue.hh +174 -0
  918. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-repacker.hh +476 -0
  919. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-sanitize.hh +530 -0
  920. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-serialize.hh +832 -0
  921. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-set-digest.hh +227 -0
  922. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-set.cc +673 -0
  923. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-set.h +203 -0
  924. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-set.hh +186 -0
  925. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shape-plan.cc +581 -0
  926. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shape-plan.h +122 -0
  927. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shape-plan.hh +77 -0
  928. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shape.cc +445 -0
  929. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shape.h +74 -0
  930. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shaper-impl.hh +38 -0
  931. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shaper-list.hh +65 -0
  932. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shaper.cc +102 -0
  933. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shaper.hh +134 -0
  934. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-static.cc +138 -0
  935. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-string-array.hh +85 -0
  936. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-style.cc +134 -0
  937. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-style.h +81 -0
  938. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-accelerator.hh +141 -0
  939. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-cff-common.cc +231 -0
  940. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-cff-common.hh +1228 -0
  941. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-cff1.cc +1001 -0
  942. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-cff2.cc +679 -0
  943. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-input.cc +748 -0
  944. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-input.hh +155 -0
  945. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-instancer-iup.cc +532 -0
  946. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-instancer-iup.hh +37 -0
  947. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-instancer-solver.cc +434 -0
  948. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-instancer-solver.hh +114 -0
  949. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-plan-member-list.hh +164 -0
  950. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-plan.cc +1570 -0
  951. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-plan.hh +302 -0
  952. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-repacker.cc +58 -0
  953. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-repacker.h +81 -0
  954. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset.cc +704 -0
  955. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset.h +260 -0
  956. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset.hh +74 -0
  957. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ucd-table.hh +5637 -0
  958. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ucd.cc +258 -0
  959. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-unicode-emoji-table.hh +79 -0
  960. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-unicode.cc +625 -0
  961. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-unicode.h +643 -0
  962. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-unicode.hh +403 -0
  963. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-uniscribe.cc +889 -0
  964. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-uniscribe.h +46 -0
  965. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-utf.hh +481 -0
  966. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-vector.hh +539 -0
  967. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-version.h +95 -0
  968. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api-blob.hh +50 -0
  969. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api-buffer.hh +217 -0
  970. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api-common.hh +44 -0
  971. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api-face.hh +109 -0
  972. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api-font.hh +263 -0
  973. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api-list.hh +109 -0
  974. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api-shape.hh +70 -0
  975. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api.cc +46 -0
  976. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api.h +322 -0
  977. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api.hh +117 -0
  978. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-shape.cc +470 -0
  979. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb.h +51 -0
  980. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb.hh +555 -0
  981. package/ios/juce_modules/juce_graphics/fonts/juce_AttributedString.cpp +288 -0
  982. package/ios/juce_modules/juce_graphics/fonts/juce_AttributedString.h +219 -0
  983. package/ios/juce_modules/juce_graphics/fonts/juce_Font.cpp +1036 -0
  984. package/ios/juce_modules/juce_graphics/fonts/juce_Font.h +571 -0
  985. package/ios/juce_modules/juce_graphics/fonts/juce_FontOptions.cpp +111 -0
  986. package/ios/juce_modules/juce_graphics/fonts/juce_FontOptions.h +218 -0
  987. package/ios/juce_modules/juce_graphics/fonts/juce_FunctionPointerDestructor.h +53 -0
  988. package/ios/juce_modules/juce_graphics/fonts/juce_GlyphArrangement.cpp +657 -0
  989. package/ios/juce_modules/juce_graphics/fonts/juce_GlyphArrangement.h +324 -0
  990. package/ios/juce_modules/juce_graphics/fonts/juce_JustifiedText.cpp +580 -0
  991. package/ios/juce_modules/juce_graphics/fonts/juce_LruCache.h +88 -0
  992. package/ios/juce_modules/juce_graphics/fonts/juce_ShapedText.cpp +210 -0
  993. package/ios/juce_modules/juce_graphics/fonts/juce_SimpleShapedText.cpp +1279 -0
  994. package/ios/juce_modules/juce_graphics/fonts/juce_TextLayout.cpp +512 -0
  995. package/ios/juce_modules/juce_graphics/fonts/juce_TextLayout.h +278 -0
  996. package/ios/juce_modules/juce_graphics/fonts/juce_Typeface.cpp +983 -0
  997. package/ios/juce_modules/juce_graphics/fonts/juce_Typeface.h +396 -0
  998. package/ios/juce_modules/juce_graphics/fonts/juce_TypefaceFileCache.h +74 -0
  999. package/ios/juce_modules/juce_graphics/fonts/juce_TypefaceTestData.cpp +6051 -0
  1000. package/ios/juce_modules/juce_graphics/geometry/juce_AffineTransform.cpp +307 -0
  1001. package/ios/juce_modules/juce_graphics/geometry/juce_AffineTransform.h +314 -0
  1002. package/ios/juce_modules/juce_graphics/geometry/juce_BorderSize.h +176 -0
  1003. package/ios/juce_modules/juce_graphics/geometry/juce_EdgeTable.cpp +848 -0
  1004. package/ios/juce_modules/juce_graphics/geometry/juce_EdgeTable.h +225 -0
  1005. package/ios/juce_modules/juce_graphics/geometry/juce_Line.h +454 -0
  1006. package/ios/juce_modules/juce_graphics/geometry/juce_Parallelogram.h +194 -0
  1007. package/ios/juce_modules/juce_graphics/geometry/juce_Parallelogram_test.cpp +75 -0
  1008. package/ios/juce_modules/juce_graphics/geometry/juce_Path.cpp +1531 -0
  1009. package/ios/juce_modules/juce_graphics/geometry/juce_Path.h +846 -0
  1010. package/ios/juce_modules/juce_graphics/geometry/juce_PathIterator.cpp +304 -0
  1011. package/ios/juce_modules/juce_graphics/geometry/juce_PathIterator.h +120 -0
  1012. package/ios/juce_modules/juce_graphics/geometry/juce_PathStrokeType.cpp +756 -0
  1013. package/ios/juce_modules/juce_graphics/geometry/juce_PathStrokeType.h +215 -0
  1014. package/ios/juce_modules/juce_graphics/geometry/juce_Point.h +269 -0
  1015. package/ios/juce_modules/juce_graphics/geometry/juce_Rectangle.h +1032 -0
  1016. package/ios/juce_modules/juce_graphics/geometry/juce_RectangleList.h +694 -0
  1017. package/ios/juce_modules/juce_graphics/geometry/juce_Rectangle_test.cpp +60 -0
  1018. package/ios/juce_modules/juce_graphics/image_formats/jpglib/README +385 -0
  1019. package/ios/juce_modules/juce_graphics/image_formats/jpglib/cderror.h +132 -0
  1020. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcapimin.c +280 -0
  1021. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcapistd.c +161 -0
  1022. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jccoefct.c +449 -0
  1023. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jccolor.c +459 -0
  1024. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcdctmgr.c +387 -0
  1025. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jchuff.c +909 -0
  1026. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jchuff.h +52 -0
  1027. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcinit.c +72 -0
  1028. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcmainct.c +293 -0
  1029. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcmarker.c +597 -0
  1030. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcmaster.c +590 -0
  1031. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcomapi.c +106 -0
  1032. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jconfig.h +59 -0
  1033. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcparam.c +610 -0
  1034. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcphuff.c +833 -0
  1035. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcprepct.c +354 -0
  1036. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcsample.c +519 -0
  1037. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jctrans.c +388 -0
  1038. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdapimin.c +395 -0
  1039. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdapistd.c +275 -0
  1040. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdatasrc.c +212 -0
  1041. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdcoefct.c +736 -0
  1042. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdcolor.c +396 -0
  1043. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdct.h +182 -0
  1044. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jddctmgr.c +269 -0
  1045. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdhuff.c +625 -0
  1046. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdhuff.h +206 -0
  1047. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdinput.c +381 -0
  1048. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdmainct.c +512 -0
  1049. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdmarker.c +1292 -0
  1050. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdmaster.c +557 -0
  1051. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdmerge.c +400 -0
  1052. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdphuff.c +642 -0
  1053. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdpostct.c +290 -0
  1054. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdsample.c +478 -0
  1055. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdtrans.c +143 -0
  1056. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jerror.c +252 -0
  1057. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jerror.h +291 -0
  1058. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jfdctflt.c +168 -0
  1059. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jfdctfst.c +224 -0
  1060. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jfdctint.c +283 -0
  1061. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jidctflt.c +242 -0
  1062. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jidctfst.c +368 -0
  1063. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jidctint.c +389 -0
  1064. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jidctred.c +398 -0
  1065. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jinclude.h +197 -0
  1066. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jmemmgr.c +1118 -0
  1067. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jmemnobs.c +109 -0
  1068. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jmemsys.h +203 -0
  1069. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jmorecfg.h +363 -0
  1070. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jpegint.h +392 -0
  1071. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jpeglib.h +1096 -0
  1072. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jquant1.c +856 -0
  1073. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jquant2.c +1310 -0
  1074. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jutils.c +179 -0
  1075. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jversion.h +14 -0
  1076. package/ios/juce_modules/juce_graphics/image_formats/jpglib/transupp.c +928 -0
  1077. package/ios/juce_modules/juce_graphics/image_formats/jpglib/transupp.h +135 -0
  1078. package/ios/juce_modules/juce_graphics/image_formats/juce_GIFLoader.cpp +464 -0
  1079. package/ios/juce_modules/juce_graphics/image_formats/juce_JPEGLoader.cpp +456 -0
  1080. package/ios/juce_modules/juce_graphics/image_formats/juce_PNGLoader.cpp +635 -0
  1081. package/ios/juce_modules/juce_graphics/image_formats/pnglib/png.c +4607 -0
  1082. package/ios/juce_modules/juce_graphics/image_formats/pnglib/png.h +3251 -0
  1083. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngconf.h +623 -0
  1084. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngdebug.h +153 -0
  1085. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngerror.c +963 -0
  1086. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngget.c +1249 -0
  1087. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pnginfo.h +267 -0
  1088. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngmem.c +284 -0
  1089. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngpread.c +1096 -0
  1090. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngpriv.h +2156 -0
  1091. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngread.c +4225 -0
  1092. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngrio.c +120 -0
  1093. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngrtran.c +5102 -0
  1094. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngrutil.c +4681 -0
  1095. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngset.c +1802 -0
  1096. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngstruct.h +491 -0
  1097. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngtrans.c +864 -0
  1098. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngwio.c +168 -0
  1099. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngwrite.c +2395 -0
  1100. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngwtran.c +587 -0
  1101. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngwutil.c +2781 -0
  1102. package/ios/juce_modules/juce_graphics/images/juce_Image.cpp +851 -0
  1103. package/ios/juce_modules/juce_graphics/images/juce_Image.h +630 -0
  1104. package/ios/juce_modules/juce_graphics/images/juce_ImageCache.cpp +183 -0
  1105. package/ios/juce_modules/juce_graphics/images/juce_ImageCache.h +136 -0
  1106. package/ios/juce_modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp +209 -0
  1107. package/ios/juce_modules/juce_graphics/images/juce_ImageConvolutionKernel.h +121 -0
  1108. package/ios/juce_modules/juce_graphics/images/juce_ImageFileFormat.cpp +120 -0
  1109. package/ios/juce_modules/juce_graphics/images/juce_ImageFileFormat.h +232 -0
  1110. package/ios/juce_modules/juce_graphics/images/juce_ScaledImage.h +93 -0
  1111. package/ios/juce_modules/juce_graphics/juce_graphics.cpp +230 -0
  1112. package/ios/juce_modules/juce_graphics/juce_graphics.h +162 -0
  1113. package/ios/juce_modules/juce_graphics/juce_graphics.mm +35 -0
  1114. package/ios/juce_modules/juce_graphics/juce_graphics_Harfbuzz.cpp +100 -0
  1115. package/ios/juce_modules/juce_graphics/native/juce_CoreGraphicsContext_mac.h +153 -0
  1116. package/ios/juce_modules/juce_graphics/native/juce_CoreGraphicsContext_mac.mm +969 -0
  1117. package/ios/juce_modules/juce_graphics/native/juce_CoreGraphicsHelpers_mac.h +117 -0
  1118. package/ios/juce_modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp +1807 -0
  1119. package/ios/juce_modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.h +174 -0
  1120. package/ios/juce_modules/juce_graphics/native/juce_Direct2DHelpers_windows.cpp +456 -0
  1121. package/ios/juce_modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp +784 -0
  1122. package/ios/juce_modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h +73 -0
  1123. package/ios/juce_modules/juce_graphics/native/juce_Direct2DImageContext_windows.cpp +124 -0
  1124. package/ios/juce_modules/juce_graphics/native/juce_Direct2DImageContext_windows.h +55 -0
  1125. package/ios/juce_modules/juce_graphics/native/juce_Direct2DImage_windows.cpp +732 -0
  1126. package/ios/juce_modules/juce_graphics/native/juce_Direct2DImage_windows.h +94 -0
  1127. package/ios/juce_modules/juce_graphics/native/juce_Direct2DMetrics_windows.cpp +132 -0
  1128. package/ios/juce_modules/juce_graphics/native/juce_Direct2DMetrics_windows.h +320 -0
  1129. package/ios/juce_modules/juce_graphics/native/juce_Direct2DResources_windows.cpp +661 -0
  1130. package/ios/juce_modules/juce_graphics/native/juce_DirectWriteTypeface_windows.cpp +920 -0
  1131. package/ios/juce_modules/juce_graphics/native/juce_DirectX_windows.h +330 -0
  1132. package/ios/juce_modules/juce_graphics/native/juce_EventTracing.h +310 -0
  1133. package/ios/juce_modules/juce_graphics/native/juce_Fonts_android.cpp +636 -0
  1134. package/ios/juce_modules/juce_graphics/native/juce_Fonts_freetype.cpp +589 -0
  1135. package/ios/juce_modules/juce_graphics/native/juce_Fonts_linux.cpp +208 -0
  1136. package/ios/juce_modules/juce_graphics/native/juce_Fonts_mac.mm +416 -0
  1137. package/ios/juce_modules/juce_graphics/native/juce_GraphicsContext_android.cpp +43 -0
  1138. package/ios/juce_modules/juce_graphics/native/juce_IconHelpers_android.cpp +39 -0
  1139. package/ios/juce_modules/juce_graphics/native/juce_IconHelpers_linux.cpp +39 -0
  1140. package/ios/juce_modules/juce_graphics/native/juce_IconHelpers_mac.cpp +150 -0
  1141. package/ios/juce_modules/juce_graphics/native/juce_IconHelpers_windows.cpp +39 -0
  1142. package/ios/juce_modules/juce_graphics/native/juce_RenderingHelpers.h +2696 -0
  1143. package/ios/juce_modules/juce_graphics/placement/juce_Justification.h +196 -0
  1144. package/ios/juce_modules/juce_graphics/placement/juce_RectanglePlacement.cpp +131 -0
  1145. package/ios/juce_modules/juce_graphics/placement/juce_RectanglePlacement.h +183 -0
  1146. package/ios/juce_modules/juce_graphics/unicode/juce_Unicode.cpp +331 -0
  1147. package/ios/juce_modules/juce_graphics/unicode/juce_UnicodeBidi.cpp +1139 -0
  1148. package/ios/juce_modules/juce_graphics/unicode/juce_UnicodeBrackets.cpp +142 -0
  1149. package/ios/juce_modules/juce_graphics/unicode/juce_UnicodeGenerated.cpp +1380 -0
  1150. package/ios/juce_modules/juce_graphics/unicode/juce_UnicodeLine.cpp +273 -0
  1151. package/ios/juce_modules/juce_graphics/unicode/juce_UnicodeScript.cpp +235 -0
  1152. package/ios/juce_modules/juce_graphics/unicode/juce_UnicodeUtils.cpp +104 -0
  1153. package/ios/juce_modules/juce_gui_basics/accessibility/enums/juce_AccessibilityActions.h +128 -0
  1154. package/ios/juce_modules/juce_gui_basics/accessibility/enums/juce_AccessibilityEvent.h +90 -0
  1155. package/ios/juce_modules/juce_gui_basics/accessibility/enums/juce_AccessibilityRole.h +80 -0
  1156. package/ios/juce_modules/juce_gui_basics/accessibility/interfaces/juce_AccessibilityCellInterface.h +61 -0
  1157. package/ios/juce_modules/juce_gui_basics/accessibility/interfaces/juce_AccessibilityTableInterface.h +106 -0
  1158. package/ios/juce_modules/juce_gui_basics/accessibility/interfaces/juce_AccessibilityTextInterface.h +93 -0
  1159. package/ios/juce_modules/juce_gui_basics/accessibility/interfaces/juce_AccessibilityValueInterface.h +231 -0
  1160. package/ios/juce_modules/juce_gui_basics/accessibility/juce_AccessibilityHandler.cpp +412 -0
  1161. package/ios/juce_modules/juce_gui_basics/accessibility/juce_AccessibilityHandler.h +354 -0
  1162. package/ios/juce_modules/juce_gui_basics/accessibility/juce_AccessibilityState.h +236 -0
  1163. package/ios/juce_modules/juce_gui_basics/application/juce_Application.cpp +109 -0
  1164. package/ios/juce_modules/juce_gui_basics/application/juce_Application.h +202 -0
  1165. package/ios/juce_modules/juce_gui_basics/buttons/juce_ArrowButton.cpp +60 -0
  1166. package/ios/juce_modules/juce_gui_basics/buttons/juce_ArrowButton.h +74 -0
  1167. package/ios/juce_modules/juce_gui_basics/buttons/juce_Button.cpp +730 -0
  1168. package/ios/juce_modules/juce_gui_basics/buttons/juce_Button.h +559 -0
  1169. package/ios/juce_modules/juce_gui_basics/buttons/juce_DrawableButton.cpp +250 -0
  1170. package/ios/juce_modules/juce_gui_basics/buttons/juce_DrawableButton.h +206 -0
  1171. package/ios/juce_modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp +138 -0
  1172. package/ios/juce_modules/juce_gui_basics/buttons/juce_HyperlinkButton.h +139 -0
  1173. package/ios/juce_modules/juce_gui_basics/buttons/juce_ImageButton.cpp +207 -0
  1174. package/ios/juce_modules/juce_gui_basics/buttons/juce_ImageButton.h +170 -0
  1175. package/ios/juce_modules/juce_gui_basics/buttons/juce_ShapeButton.cpp +146 -0
  1176. package/ios/juce_modules/juce_gui_basics/buttons/juce_ShapeButton.h +135 -0
  1177. package/ios/juce_modules/juce_gui_basics/buttons/juce_TextButton.cpp +86 -0
  1178. package/ios/juce_modules/juce_gui_basics/buttons/juce_TextButton.h +118 -0
  1179. package/ios/juce_modules/juce_gui_basics/buttons/juce_ToggleButton.cpp +74 -0
  1180. package/ios/juce_modules/juce_gui_basics/buttons/juce_ToggleButton.h +102 -0
  1181. package/ios/juce_modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp +122 -0
  1182. package/ios/juce_modules/juce_gui_basics/buttons/juce_ToolbarButton.h +107 -0
  1183. package/ios/juce_modules/juce_gui_basics/commands/juce_ApplicationCommandID.h +99 -0
  1184. package/ios/juce_modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp +75 -0
  1185. package/ios/juce_modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h +199 -0
  1186. package/ios/juce_modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp +331 -0
  1187. package/ios/juce_modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h +358 -0
  1188. package/ios/juce_modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp +195 -0
  1189. package/ios/juce_modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h +253 -0
  1190. package/ios/juce_modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp +427 -0
  1191. package/ios/juce_modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h +253 -0
  1192. package/ios/juce_modules/juce_gui_basics/components/juce_CachedComponentImage.h +81 -0
  1193. package/ios/juce_modules/juce_gui_basics/components/juce_Component.cpp +3013 -0
  1194. package/ios/juce_modules/juce_gui_basics/components/juce_Component.h +2716 -0
  1195. package/ios/juce_modules/juce_gui_basics/components/juce_ComponentListener.cpp +47 -0
  1196. package/ios/juce_modules/juce_gui_basics/components/juce_ComponentListener.h +131 -0
  1197. package/ios/juce_modules/juce_gui_basics/components/juce_ComponentTraverser.h +81 -0
  1198. package/ios/juce_modules/juce_gui_basics/components/juce_FocusTraverser.cpp +283 -0
  1199. package/ios/juce_modules/juce_gui_basics/components/juce_FocusTraverser.h +102 -0
  1200. package/ios/juce_modules/juce_gui_basics/components/juce_ModalComponentManager.cpp +295 -0
  1201. package/ios/juce_modules/juce_gui_basics/components/juce_ModalComponentManager.h +340 -0
  1202. package/ios/juce_modules/juce_gui_basics/desktop/juce_Desktop.cpp +386 -0
  1203. package/ios/juce_modules/juce_gui_basics/desktop/juce_Desktop.h +502 -0
  1204. package/ios/juce_modules/juce_gui_basics/desktop/juce_Displays.cpp +447 -0
  1205. package/ios/juce_modules/juce_gui_basics/desktop/juce_Displays.h +218 -0
  1206. package/ios/juce_modules/juce_gui_basics/detail/juce_AccessibilityHelpers.cpp +42 -0
  1207. package/ios/juce_modules/juce_gui_basics/detail/juce_AccessibilityHelpers.h +79 -0
  1208. package/ios/juce_modules/juce_gui_basics/detail/juce_AlertWindowHelpers.h +124 -0
  1209. package/ios/juce_modules/juce_gui_basics/detail/juce_ButtonAccessibilityHandler.h +134 -0
  1210. package/ios/juce_modules/juce_gui_basics/detail/juce_ComponentHelpers.h +291 -0
  1211. package/ios/juce_modules/juce_gui_basics/detail/juce_CustomMouseCursorInfo.h +44 -0
  1212. package/ios/juce_modules/juce_gui_basics/detail/juce_FocusHelpers.h +126 -0
  1213. package/ios/juce_modules/juce_gui_basics/detail/juce_FocusRestorer.h +55 -0
  1214. package/ios/juce_modules/juce_gui_basics/detail/juce_LookAndFeelHelpers.h +71 -0
  1215. package/ios/juce_modules/juce_gui_basics/detail/juce_MouseInputSourceImpl.h +597 -0
  1216. package/ios/juce_modules/juce_gui_basics/detail/juce_MouseInputSourceList.h +163 -0
  1217. package/ios/juce_modules/juce_gui_basics/detail/juce_PointerState.h +113 -0
  1218. package/ios/juce_modules/juce_gui_basics/detail/juce_ScalingHelpers.h +132 -0
  1219. package/ios/juce_modules/juce_gui_basics/detail/juce_ScopedContentSharerImpl.h +107 -0
  1220. package/ios/juce_modules/juce_gui_basics/detail/juce_ScopedContentSharerInterface.h +224 -0
  1221. package/ios/juce_modules/juce_gui_basics/detail/juce_ScopedMessageBoxImpl.h +141 -0
  1222. package/ios/juce_modules/juce_gui_basics/detail/juce_ScopedMessageBoxInterface.h +69 -0
  1223. package/ios/juce_modules/juce_gui_basics/detail/juce_StandardCachedComponentImage.h +102 -0
  1224. package/ios/juce_modules/juce_gui_basics/detail/juce_ToolbarItemDragAndDropOverlayComponent.h +127 -0
  1225. package/ios/juce_modules/juce_gui_basics/detail/juce_TopLevelWindowManager.h +145 -0
  1226. package/ios/juce_modules/juce_gui_basics/detail/juce_ViewportHelpers.h +58 -0
  1227. package/ios/juce_modules/juce_gui_basics/detail/juce_WindowingHelpers.h +70 -0
  1228. package/ios/juce_modules/juce_gui_basics/drawables/juce_Drawable.cpp +228 -0
  1229. package/ios/juce_modules/juce_gui_basics/drawables/juce_Drawable.h +271 -0
  1230. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp +173 -0
  1231. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableComposite.h +126 -0
  1232. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableImage.cpp +165 -0
  1233. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableImage.h +126 -0
  1234. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawablePath.cpp +66 -0
  1235. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawablePath.h +86 -0
  1236. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp +96 -0
  1237. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableRectangle.h +85 -0
  1238. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableShape.cpp +190 -0
  1239. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableShape.h +135 -0
  1240. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableText.cpp +241 -0
  1241. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableText.h +130 -0
  1242. package/ios/juce_modules/juce_gui_basics/drawables/juce_SVGParser.cpp +1903 -0
  1243. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_ContentSharer.cpp +83 -0
  1244. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_ContentSharer.h +154 -0
  1245. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp +79 -0
  1246. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h +125 -0
  1247. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp +279 -0
  1248. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h +235 -0
  1249. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp +633 -0
  1250. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h +306 -0
  1251. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h +67 -0
  1252. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp +292 -0
  1253. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileChooser.h +358 -0
  1254. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp +272 -0
  1255. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h +177 -0
  1256. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp +295 -0
  1257. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileListComponent.h +104 -0
  1258. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h +75 -0
  1259. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp +280 -0
  1260. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h +126 -0
  1261. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp +690 -0
  1262. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h +117 -0
  1263. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp +277 -0
  1264. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h +245 -0
  1265. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp +135 -0
  1266. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h +77 -0
  1267. package/ios/juce_modules/juce_gui_basics/juce_gui_basics.cpp +370 -0
  1268. package/ios/juce_modules/juce_gui_basics/juce_gui_basics.h +403 -0
  1269. package/ios/juce_modules/juce_gui_basics/juce_gui_basics.mm +35 -0
  1270. package/ios/juce_modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp +73 -0
  1271. package/ios/juce_modules/juce_gui_basics/keyboard/juce_CaretComponent.h +90 -0
  1272. package/ios/juce_modules/juce_gui_basics/keyboard/juce_KeyListener.cpp +43 -0
  1273. package/ios/juce_modules/juce_gui_basics/keyboard/juce_KeyListener.h +86 -0
  1274. package/ios/juce_modules/juce_gui_basics/keyboard/juce_KeyPress.cpp +298 -0
  1275. package/ios/juce_modules/juce_gui_basics/keyboard/juce_KeyPress.h +286 -0
  1276. package/ios/juce_modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp +283 -0
  1277. package/ios/juce_modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h +96 -0
  1278. package/ios/juce_modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp +58 -0
  1279. package/ios/juce_modules/juce_gui_basics/keyboard/juce_ModifierKeys.h +220 -0
  1280. package/ios/juce_modules/juce_gui_basics/keyboard/juce_SystemClipboard.h +58 -0
  1281. package/ios/juce_modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h +132 -0
  1282. package/ios/juce_modules/juce_gui_basics/keyboard/juce_TextInputTarget.h +129 -0
  1283. package/ios/juce_modules/juce_gui_basics/layout/juce_AnimatedPosition.h +216 -0
  1284. package/ios/juce_modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h +162 -0
  1285. package/ios/juce_modules/juce_gui_basics/layout/juce_BorderedComponentBoundsConstrainer.cpp +86 -0
  1286. package/ios/juce_modules/juce_gui_basics/layout/juce_BorderedComponentBoundsConstrainer.h +78 -0
  1287. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp +363 -0
  1288. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentAnimator.h +174 -0
  1289. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp +314 -0
  1290. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h +206 -0
  1291. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp +295 -0
  1292. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentBuilder.h +256 -0
  1293. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp +151 -0
  1294. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h +105 -0
  1295. package/ios/juce_modules/juce_gui_basics/layout/juce_ConcertinaPanel.cpp +512 -0
  1296. package/ios/juce_modules/juce_gui_basics/layout/juce_ConcertinaPanel.h +153 -0
  1297. package/ios/juce_modules/juce_gui_basics/layout/juce_FlexBox.cpp +1158 -0
  1298. package/ios/juce_modules/juce_gui_basics/layout/juce_FlexBox.h +152 -0
  1299. package/ios/juce_modules/juce_gui_basics/layout/juce_FlexItem.h +186 -0
  1300. package/ios/juce_modules/juce_gui_basics/layout/juce_Grid.cpp +1651 -0
  1301. package/ios/juce_modules/juce_gui_basics/layout/juce_Grid.h +232 -0
  1302. package/ios/juce_modules/juce_gui_basics/layout/juce_GridItem.cpp +188 -0
  1303. package/ios/juce_modules/juce_gui_basics/layout/juce_GridItem.h +249 -0
  1304. package/ios/juce_modules/juce_gui_basics/layout/juce_GroupComponent.cpp +87 -0
  1305. package/ios/juce_modules/juce_gui_basics/layout/juce_GroupComponent.h +120 -0
  1306. package/ios/juce_modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp +641 -0
  1307. package/ios/juce_modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h +390 -0
  1308. package/ios/juce_modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp +208 -0
  1309. package/ios/juce_modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h +205 -0
  1310. package/ios/juce_modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp +112 -0
  1311. package/ios/juce_modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h +101 -0
  1312. package/ios/juce_modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp +139 -0
  1313. package/ios/juce_modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h +109 -0
  1314. package/ios/juce_modules/juce_gui_basics/layout/juce_ScrollBar.cpp +486 -0
  1315. package/ios/juce_modules/juce_gui_basics/layout/juce_ScrollBar.h +450 -0
  1316. package/ios/juce_modules/juce_gui_basics/layout/juce_SidePanel.cpp +309 -0
  1317. package/ios/juce_modules/juce_gui_basics/layout/juce_SidePanel.h +248 -0
  1318. package/ios/juce_modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp +351 -0
  1319. package/ios/juce_modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h +270 -0
  1320. package/ios/juce_modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp +88 -0
  1321. package/ios/juce_modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h +114 -0
  1322. package/ios/juce_modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp +131 -0
  1323. package/ios/juce_modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h +111 -0
  1324. package/ios/juce_modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp +592 -0
  1325. package/ios/juce_modules/juce_gui_basics/layout/juce_TabbedButtonBar.h +382 -0
  1326. package/ios/juce_modules/juce_gui_basics/layout/juce_TabbedComponent.cpp +328 -0
  1327. package/ios/juce_modules/juce_gui_basics/layout/juce_TabbedComponent.h +236 -0
  1328. package/ios/juce_modules/juce_gui_basics/layout/juce_Viewport.cpp +649 -0
  1329. package/ios/juce_modules/juce_gui_basics/layout/juce_Viewport.h +383 -0
  1330. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp +201 -0
  1331. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h +301 -0
  1332. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.cpp +599 -0
  1333. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.h +114 -0
  1334. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp +3200 -0
  1335. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h +443 -0
  1336. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp +655 -0
  1337. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h +107 -0
  1338. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.cpp +1516 -0
  1339. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.h +269 -0
  1340. package/ios/juce_modules/juce_gui_basics/menus/juce_BurgerMenuComponent.cpp +311 -0
  1341. package/ios/juce_modules/juce_gui_basics/menus/juce_BurgerMenuComponent.h +120 -0
  1342. package/ios/juce_modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp +472 -0
  1343. package/ios/juce_modules/juce_gui_basics/menus/juce_MenuBarComponent.h +138 -0
  1344. package/ios/juce_modules/juce_gui_basics/menus/juce_MenuBarModel.cpp +108 -0
  1345. package/ios/juce_modules/juce_gui_basics/menus/juce_MenuBarModel.h +201 -0
  1346. package/ios/juce_modules/juce_gui_basics/menus/juce_PopupMenu.cpp +2401 -0
  1347. package/ios/juce_modules/juce_gui_basics/menus/juce_PopupMenu.h +1070 -0
  1348. package/ios/juce_modules/juce_gui_basics/misc/juce_BubbleComponent.cpp +162 -0
  1349. package/ios/juce_modules/juce_gui_basics/misc/juce_BubbleComponent.h +213 -0
  1350. package/ios/juce_modules/juce_gui_basics/misc/juce_DropShadower.cpp +408 -0
  1351. package/ios/juce_modules/juce_gui_basics/misc/juce_DropShadower.h +96 -0
  1352. package/ios/juce_modules/juce_gui_basics/misc/juce_FocusOutline.cpp +194 -0
  1353. package/ios/juce_modules/juce_gui_basics/misc/juce_FocusOutline.h +109 -0
  1354. package/ios/juce_modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp +76 -0
  1355. package/ios/juce_modules/juce_gui_basics/mouse/juce_ComponentDragger.h +110 -0
  1356. package/ios/juce_modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp +646 -0
  1357. package/ios/juce_modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h +275 -0
  1358. package/ios/juce_modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h +149 -0
  1359. package/ios/juce_modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h +115 -0
  1360. package/ios/juce_modules/juce_gui_basics/mouse/juce_LassoComponent.h +233 -0
  1361. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseCursor.cpp +162 -0
  1362. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseCursor.h +199 -0
  1363. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseEvent.cpp +147 -0
  1364. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseEvent.h +463 -0
  1365. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.cpp +86 -0
  1366. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.h +121 -0
  1367. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp +114 -0
  1368. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseInputSource.h +315 -0
  1369. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseListener.cpp +48 -0
  1370. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseListener.h +180 -0
  1371. package/ios/juce_modules/juce_gui_basics/mouse/juce_SelectedItemSet.h +336 -0
  1372. package/ios/juce_modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h +115 -0
  1373. package/ios/juce_modules/juce_gui_basics/mouse/juce_TooltipClient.h +98 -0
  1374. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_Accessibility.cpp +46 -0
  1375. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_AccessibilityElement_windows.cpp +660 -0
  1376. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_AccessibilityElement_windows.h +89 -0
  1377. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_AccessibilitySharedCode_mac.mm +283 -0
  1378. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_AccessibilityTextHelpers.h +311 -0
  1379. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_AccessibilityTextHelpers_test.cpp +164 -0
  1380. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_Accessibility_android.cpp +1058 -0
  1381. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_Accessibility_ios.mm +669 -0
  1382. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_Accessibility_mac.mm +942 -0
  1383. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_Accessibility_windows.cpp +336 -0
  1384. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAExpandCollapseProvider_windows.h +92 -0
  1385. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAGridItemProvider_windows.h +162 -0
  1386. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAGridProvider_windows.h +160 -0
  1387. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAHelpers_windows.h +128 -0
  1388. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAInvokeProvider_windows.h +68 -0
  1389. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAProviderBase_windows.h +67 -0
  1390. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAProviders_windows.h +52 -0
  1391. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIARangeValueProvider_windows.h +146 -0
  1392. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIASelectionProvider_windows.h +254 -0
  1393. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIATextProvider_windows.h +626 -0
  1394. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAToggleProvider_windows.h +87 -0
  1395. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIATransformProvider_windows.h +131 -0
  1396. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAValueProvider_windows.h +92 -0
  1397. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAWindowProvider_windows.h +203 -0
  1398. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_WindowsUIAWrapper_windows.h +169 -0
  1399. package/ios/juce_modules/juce_gui_basics/native/java/app/com/rmsl/juce/ComponentPeerView.java +987 -0
  1400. package/ios/juce_modules/juce_gui_basics/native/java/app/com/rmsl/juce/JuceContentProviderCursor.java +62 -0
  1401. package/ios/juce_modules/juce_gui_basics/native/java/app/com/rmsl/juce/JuceContentProviderFileObserver.java +57 -0
  1402. package/ios/juce_modules/juce_gui_basics/native/javaopt/app/com/rmsl/juce/JuceActivity.java +63 -0
  1403. package/ios/juce_modules/juce_gui_basics/native/javaopt/app/com/rmsl/juce/JuceSharingContentProvider.java +128 -0
  1404. package/ios/juce_modules/juce_gui_basics/native/javaopt/app/com/rmsl/juce/Receiver.java +51 -0
  1405. package/ios/juce_modules/juce_gui_basics/native/juce_CGMetalLayerRenderer_mac.h +384 -0
  1406. package/ios/juce_modules/juce_gui_basics/native/juce_ContentSharer_android.cpp +963 -0
  1407. package/ios/juce_modules/juce_gui_basics/native/juce_ContentSharer_ios.cpp +134 -0
  1408. package/ios/juce_modules/juce_gui_basics/native/juce_DragAndDrop_linux.cpp +618 -0
  1409. package/ios/juce_modules/juce_gui_basics/native/juce_DragAndDrop_windows.cpp +377 -0
  1410. package/ios/juce_modules/juce_gui_basics/native/juce_FileChooser_android.cpp +276 -0
  1411. package/ios/juce_modules/juce_gui_basics/native/juce_FileChooser_ios.mm +379 -0
  1412. package/ios/juce_modules/juce_gui_basics/native/juce_FileChooser_linux.cpp +296 -0
  1413. package/ios/juce_modules/juce_gui_basics/native/juce_FileChooser_mac.mm +414 -0
  1414. package/ios/juce_modules/juce_gui_basics/native/juce_FileChooser_windows.cpp +908 -0
  1415. package/ios/juce_modules/juce_gui_basics/native/juce_MainMenu_mac.mm +848 -0
  1416. package/ios/juce_modules/juce_gui_basics/native/juce_MouseCursor_mac.mm +205 -0
  1417. package/ios/juce_modules/juce_gui_basics/native/juce_MultiTouchMapper.h +116 -0
  1418. package/ios/juce_modules/juce_gui_basics/native/juce_NSViewComponentPeer_mac.mm +3053 -0
  1419. package/ios/juce_modules/juce_gui_basics/native/juce_NativeMessageBox_android.cpp +124 -0
  1420. package/ios/juce_modules/juce_gui_basics/native/juce_NativeMessageBox_ios.mm +119 -0
  1421. package/ios/juce_modules/juce_gui_basics/native/juce_NativeMessageBox_linux.cpp +78 -0
  1422. package/ios/juce_modules/juce_gui_basics/native/juce_NativeMessageBox_mac.mm +140 -0
  1423. package/ios/juce_modules/juce_gui_basics/native/juce_NativeMessageBox_windows.cpp +354 -0
  1424. package/ios/juce_modules/juce_gui_basics/native/juce_NativeModalWrapperComponent_ios.h +141 -0
  1425. package/ios/juce_modules/juce_gui_basics/native/juce_PerScreenDisplayLinks_mac.h +313 -0
  1426. package/ios/juce_modules/juce_gui_basics/native/juce_ScopedDPIAwarenessDisabler.cpp +43 -0
  1427. package/ios/juce_modules/juce_gui_basics/native/juce_ScopedDPIAwarenessDisabler.h +63 -0
  1428. package/ios/juce_modules/juce_gui_basics/native/juce_ScopedThreadDPIAwarenessSetter_windows.h +52 -0
  1429. package/ios/juce_modules/juce_gui_basics/native/juce_ScopedWindowAssociation_linux.h +127 -0
  1430. package/ios/juce_modules/juce_gui_basics/native/juce_UIViewComponentPeer_ios.mm +2376 -0
  1431. package/ios/juce_modules/juce_gui_basics/native/juce_VBlank_windows.cpp +302 -0
  1432. package/ios/juce_modules/juce_gui_basics/native/juce_WindowUtils_android.cpp +43 -0
  1433. package/ios/juce_modules/juce_gui_basics/native/juce_WindowUtils_ios.mm +43 -0
  1434. package/ios/juce_modules/juce_gui_basics/native/juce_WindowUtils_linux.cpp +48 -0
  1435. package/ios/juce_modules/juce_gui_basics/native/juce_WindowUtils_mac.mm +47 -0
  1436. package/ios/juce_modules/juce_gui_basics/native/juce_WindowUtils_windows.cpp +68 -0
  1437. package/ios/juce_modules/juce_gui_basics/native/juce_Windowing_android.cpp +2903 -0
  1438. package/ios/juce_modules/juce_gui_basics/native/juce_Windowing_ios.mm +629 -0
  1439. package/ios/juce_modules/juce_gui_basics/native/juce_Windowing_linux.cpp +863 -0
  1440. package/ios/juce_modules/juce_gui_basics/native/juce_Windowing_mac.mm +588 -0
  1441. package/ios/juce_modules/juce_gui_basics/native/juce_Windowing_windows.cpp +5549 -0
  1442. package/ios/juce_modules/juce_gui_basics/native/juce_WindowsHooks_windows.cpp +118 -0
  1443. package/ios/juce_modules/juce_gui_basics/native/juce_WindowsHooks_windows.h +55 -0
  1444. package/ios/juce_modules/juce_gui_basics/native/juce_XSymbols_linux.cpp +249 -0
  1445. package/ios/juce_modules/juce_gui_basics/native/juce_XSymbols_linux.h +629 -0
  1446. package/ios/juce_modules/juce_gui_basics/native/juce_XWindowSystem_linux.cpp +4036 -0
  1447. package/ios/juce_modules/juce_gui_basics/native/juce_XWindowSystem_linux.h +364 -0
  1448. package/ios/juce_modules/juce_gui_basics/positioning/juce_MarkerList.cpp +293 -0
  1449. package/ios/juce_modules/juce_gui_basics/positioning/juce_MarkerList.h +204 -0
  1450. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp +162 -0
  1451. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h +190 -0
  1452. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp +344 -0
  1453. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h +99 -0
  1454. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp +149 -0
  1455. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h +75 -0
  1456. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativePoint.cpp +110 -0
  1457. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativePoint.h +100 -0
  1458. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp +271 -0
  1459. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativePointPath.h +202 -0
  1460. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp +286 -0
  1461. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeRectangle.h +117 -0
  1462. package/ios/juce_modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp +95 -0
  1463. package/ios/juce_modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h +118 -0
  1464. package/ios/juce_modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp +55 -0
  1465. package/ios/juce_modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h +85 -0
  1466. package/ios/juce_modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp +284 -0
  1467. package/ios/juce_modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h +162 -0
  1468. package/ios/juce_modules/juce_gui_basics/properties/juce_MultiChoicePropertyComponent.cpp +367 -0
  1469. package/ios/juce_modules/juce_gui_basics/properties/juce_MultiChoicePropertyComponent.h +150 -0
  1470. package/ios/juce_modules/juce_gui_basics/properties/juce_PropertyComponent.cpp +65 -0
  1471. package/ios/juce_modules/juce_gui_basics/properties/juce_PropertyComponent.h +154 -0
  1472. package/ios/juce_modules/juce_gui_basics/properties/juce_PropertyPanel.cpp +405 -0
  1473. package/ios/juce_modules/juce_gui_basics/properties/juce_PropertyPanel.h +186 -0
  1474. package/ios/juce_modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp +95 -0
  1475. package/ios/juce_modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h +116 -0
  1476. package/ios/juce_modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp +271 -0
  1477. package/ios/juce_modules/juce_gui_basics/properties/juce_TextPropertyComponent.h +196 -0
  1478. package/ios/juce_modules/juce_gui_basics/widgets/juce_ComboBox.cpp +721 -0
  1479. package/ios/juce_modules/juce_gui_basics/widgets/juce_ComboBox.h +473 -0
  1480. package/ios/juce_modules/juce_gui_basics/widgets/juce_ImageComponent.cpp +116 -0
  1481. package/ios/juce_modules/juce_gui_basics/widgets/juce_ImageComponent.h +90 -0
  1482. package/ios/juce_modules/juce_gui_basics/widgets/juce_Label.cpp +592 -0
  1483. package/ios/juce_modules/juce_gui_basics/widgets/juce_Label.h +377 -0
  1484. package/ios/juce_modules/juce_gui_basics/widgets/juce_ListBox.cpp +1263 -0
  1485. package/ios/juce_modules/juce_gui_basics/widgets/juce_ListBox.h +656 -0
  1486. package/ios/juce_modules/juce_gui_basics/widgets/juce_ProgressBar.cpp +189 -0
  1487. package/ios/juce_modules/juce_gui_basics/widgets/juce_ProgressBar.h +215 -0
  1488. package/ios/juce_modules/juce_gui_basics/widgets/juce_Slider.cpp +1839 -0
  1489. package/ios/juce_modules/juce_gui_basics/widgets/juce_Slider.h +1048 -0
  1490. package/ios/juce_modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp +935 -0
  1491. package/ios/juce_modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h +472 -0
  1492. package/ios/juce_modules/juce_gui_basics/widgets/juce_TableListBox.cpp +688 -0
  1493. package/ios/juce_modules/juce_gui_basics/widgets/juce_TableListBox.h +365 -0
  1494. package/ios/juce_modules/juce_gui_basics/widgets/juce_TextEditor.cpp +2786 -0
  1495. package/ios/juce_modules/juce_gui_basics/widgets/juce_TextEditor.h +888 -0
  1496. package/ios/juce_modules/juce_gui_basics/widgets/juce_Toolbar.cpp +838 -0
  1497. package/ios/juce_modules/juce_gui_basics/widgets/juce_Toolbar.h +347 -0
  1498. package/ios/juce_modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp +173 -0
  1499. package/ios/juce_modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h +217 -0
  1500. package/ios/juce_modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h +118 -0
  1501. package/ios/juce_modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp +125 -0
  1502. package/ios/juce_modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h +88 -0
  1503. package/ios/juce_modules/juce_gui_basics/widgets/juce_TreeView.cpp +2286 -0
  1504. package/ios/juce_modules/juce_gui_basics/widgets/juce_TreeView.h +969 -0
  1505. package/ios/juce_modules/juce_gui_basics/windows/juce_AlertWindow.cpp +712 -0
  1506. package/ios/juce_modules/juce_gui_basics/windows/juce_AlertWindow.h +600 -0
  1507. package/ios/juce_modules/juce_gui_basics/windows/juce_CallOutBox.cpp +279 -0
  1508. package/ios/juce_modules/juce_gui_basics/windows/juce_CallOutBox.h +197 -0
  1509. package/ios/juce_modules/juce_gui_basics/windows/juce_ComponentPeer.cpp +625 -0
  1510. package/ios/juce_modules/juce_gui_basics/windows/juce_ComponentPeer.h +623 -0
  1511. package/ios/juce_modules/juce_gui_basics/windows/juce_DialogWindow.cpp +190 -0
  1512. package/ios/juce_modules/juce_gui_basics/windows/juce_DialogWindow.h +286 -0
  1513. package/ios/juce_modules/juce_gui_basics/windows/juce_DocumentWindow.cpp +423 -0
  1514. package/ios/juce_modules/juce_gui_basics/windows/juce_DocumentWindow.h +316 -0
  1515. package/ios/juce_modules/juce_gui_basics/windows/juce_MessageBoxOptions.cpp +102 -0
  1516. package/ios/juce_modules/juce_gui_basics/windows/juce_MessageBoxOptions.h +202 -0
  1517. package/ios/juce_modules/juce_gui_basics/windows/juce_NativeMessageBox.cpp +167 -0
  1518. package/ios/juce_modules/juce_gui_basics/windows/juce_NativeMessageBox.h +311 -0
  1519. package/ios/juce_modules/juce_gui_basics/windows/juce_NativeScaleFactorNotifier.cpp +75 -0
  1520. package/ios/juce_modules/juce_gui_basics/windows/juce_NativeScaleFactorNotifier.h +78 -0
  1521. package/ios/juce_modules/juce_gui_basics/windows/juce_ResizableWindow.cpp +679 -0
  1522. package/ios/juce_modules/juce_gui_basics/windows/juce_ResizableWindow.h +427 -0
  1523. package/ios/juce_modules/juce_gui_basics/windows/juce_ScopedMessageBox.cpp +67 -0
  1524. package/ios/juce_modules/juce_gui_basics/windows/juce_ScopedMessageBox.h +78 -0
  1525. package/ios/juce_modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp +128 -0
  1526. package/ios/juce_modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h +184 -0
  1527. package/ios/juce_modules/juce_gui_basics/windows/juce_TooltipWindow.cpp +264 -0
  1528. package/ios/juce_modules/juce_gui_basics/windows/juce_TooltipWindow.h +169 -0
  1529. package/ios/juce_modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp +264 -0
  1530. package/ios/juce_modules/juce_gui_basics/windows/juce_TopLevelWindow.h +176 -0
  1531. package/ios/juce_modules/juce_gui_basics/windows/juce_VBlankAttachment.cpp +122 -0
  1532. package/ios/juce_modules/juce_gui_basics/windows/juce_VBlankAttachment.h +85 -0
  1533. package/ios/juce_modules/juce_gui_basics/windows/juce_WindowUtils.h +51 -0
  1534. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp +83 -0
  1535. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h +81 -0
  1536. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h +683 -0
  1537. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp +1306 -0
  1538. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CodeDocument.h +459 -0
  1539. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp +1857 -0
  1540. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h +486 -0
  1541. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h +68 -0
  1542. package/ios/juce_modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.cpp +248 -0
  1543. package/ios/juce_modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.h +74 -0
  1544. package/ios/juce_modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.cpp +181 -0
  1545. package/ios/juce_modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.h +72 -0
  1546. package/ios/juce_modules/juce_gui_extra/detail/juce_WebControlRelayEvents.h +255 -0
  1547. package/ios/juce_modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp +1124 -0
  1548. package/ios/juce_modules/juce_gui_extra/documents/juce_FileBasedDocument.h +440 -0
  1549. package/ios/juce_modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h +142 -0
  1550. package/ios/juce_modules/juce_gui_extra/embedding/juce_AndroidViewComponent.h +91 -0
  1551. package/ios/juce_modules/juce_gui_extra/embedding/juce_HWNDComponent.h +98 -0
  1552. package/ios/juce_modules/juce_gui_extra/embedding/juce_NSViewComponent.h +107 -0
  1553. package/ios/juce_modules/juce_gui_extra/embedding/juce_UIViewComponent.h +99 -0
  1554. package/ios/juce_modules/juce_gui_extra/embedding/juce_XEmbedComponent.h +129 -0
  1555. package/ios/juce_modules/juce_gui_extra/juce_gui_extra.cpp +210 -0
  1556. package/ios/juce_modules/juce_gui_extra/juce_gui_extra.h +161 -0
  1557. package/ios/juce_modules/juce_gui_extra/juce_gui_extra.mm +35 -0
  1558. package/ios/juce_modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp +89 -0
  1559. package/ios/juce_modules/juce_gui_extra/misc/juce_AnimatedAppComponent.h +96 -0
  1560. package/ios/juce_modules/juce_gui_extra/misc/juce_AppleRemote.h +126 -0
  1561. package/ios/juce_modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp +133 -0
  1562. package/ios/juce_modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h +134 -0
  1563. package/ios/juce_modules/juce_gui_extra/misc/juce_ColourSelector.cpp +656 -0
  1564. package/ios/juce_modules/juce_gui_extra/misc/juce_ColourSelector.h +173 -0
  1565. package/ios/juce_modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp +486 -0
  1566. package/ios/juce_modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h +142 -0
  1567. package/ios/juce_modules/juce_gui_extra/misc/juce_LiveConstantEditor.cpp +501 -0
  1568. package/ios/juce_modules/juce_gui_extra/misc/juce_LiveConstantEditor.h +310 -0
  1569. package/ios/juce_modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp +165 -0
  1570. package/ios/juce_modules/juce_gui_extra/misc/juce_PreferencesPanel.h +156 -0
  1571. package/ios/juce_modules/juce_gui_extra/misc/juce_PushNotifications.cpp +239 -0
  1572. package/ios/juce_modules/juce_gui_extra/misc/juce_PushNotifications.h +714 -0
  1573. package/ios/juce_modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp +189 -0
  1574. package/ios/juce_modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h +186 -0
  1575. package/ios/juce_modules/juce_gui_extra/misc/juce_SplashScreen.cpp +110 -0
  1576. package/ios/juce_modules/juce_gui_extra/misc/juce_SplashScreen.h +165 -0
  1577. package/ios/juce_modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp +51 -0
  1578. package/ios/juce_modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h +125 -0
  1579. package/ios/juce_modules/juce_gui_extra/misc/juce_WebBrowserComponent.cpp +722 -0
  1580. package/ios/juce_modules/juce_gui_extra/misc/juce_WebBrowserComponent.h +626 -0
  1581. package/ios/juce_modules/juce_gui_extra/misc/juce_WebControlParameterIndexReceiver.h +76 -0
  1582. package/ios/juce_modules/juce_gui_extra/misc/juce_WebControlRelays.cpp +256 -0
  1583. package/ios/juce_modules/juce_gui_extra/misc/juce_WebControlRelays.h +254 -0
  1584. package/ios/juce_modules/juce_gui_extra/native/java/app/com/rmsl/juce/JuceWebViewClasses.java +356 -0
  1585. package/ios/juce_modules/juce_gui_extra/native/javaopt/app/com/rmsl/juce/JuceFirebaseInstanceIdService.java +50 -0
  1586. package/ios/juce_modules/juce_gui_extra/native/javaopt/app/com/rmsl/juce/JuceFirebaseMessagingService.java +69 -0
  1587. package/ios/juce_modules/juce_gui_extra/native/javascript/check_native_interop.js +146 -0
  1588. package/ios/juce_modules/juce_gui_extra/native/javascript/index.js +577 -0
  1589. package/ios/juce_modules/juce_gui_extra/native/javascript/package.json +4 -0
  1590. package/ios/juce_modules/juce_gui_extra/native/juce_ActiveXComponent_windows.cpp +553 -0
  1591. package/ios/juce_modules/juce_gui_extra/native/juce_AndroidViewComponent.cpp +199 -0
  1592. package/ios/juce_modules/juce_gui_extra/native/juce_AppleRemote_mac.mm +285 -0
  1593. package/ios/juce_modules/juce_gui_extra/native/juce_HWNDComponent_windows.cpp +203 -0
  1594. package/ios/juce_modules/juce_gui_extra/native/juce_NSViewComponent_mac.mm +203 -0
  1595. package/ios/juce_modules/juce_gui_extra/native/juce_NSViewFrameWatcher_mac.h +120 -0
  1596. package/ios/juce_modules/juce_gui_extra/native/juce_PushNotifications_android.cpp +1607 -0
  1597. package/ios/juce_modules/juce_gui_extra/native/juce_PushNotifications_ios.cpp +620 -0
  1598. package/ios/juce_modules/juce_gui_extra/native/juce_PushNotifications_mac.cpp +535 -0
  1599. package/ios/juce_modules/juce_gui_extra/native/juce_SystemTrayIcon_linux.cpp +160 -0
  1600. package/ios/juce_modules/juce_gui_extra/native/juce_SystemTrayIcon_mac.cpp +451 -0
  1601. package/ios/juce_modules/juce_gui_extra/native/juce_SystemTrayIcon_windows.cpp +251 -0
  1602. package/ios/juce_modules/juce_gui_extra/native/juce_UIViewComponent_ios.mm +151 -0
  1603. package/ios/juce_modules/juce_gui_extra/native/juce_WebBrowserComponent_android.cpp +953 -0
  1604. package/ios/juce_modules/juce_gui_extra/native/juce_WebBrowserComponent_linux.cpp +1659 -0
  1605. package/ios/juce_modules/juce_gui_extra/native/juce_WebBrowserComponent_mac.mm +1113 -0
  1606. package/ios/juce_modules/juce_gui_extra/native/juce_WebBrowserComponent_windows.cpp +1298 -0
  1607. package/ios/juce_modules/juce_gui_extra/native/juce_XEmbedComponent_linux.cpp +739 -0
  1608. package/package.json +1 -1
  1609. package/ios/JuceModules.mm +0 -14
  1610. package/ios/JuceToneGenerator.h +0 -39
  1611. package/ios/JuceToneGenerator.mm +0 -613
@@ -0,0 +1,4953 @@
1
+ /*
2
+ * Copyright © 2007,2008,2009 Red Hat, Inc.
3
+ * Copyright © 2010,2012 Google, Inc.
4
+ *
5
+ * This is part of HarfBuzz, a text shaping library.
6
+ *
7
+ * Permission is hereby granted, without written agreement and without
8
+ * license or royalty fees, to use, copy, modify, and distribute this
9
+ * software and its documentation for any purpose, provided that the
10
+ * above copyright notice and the following two paragraphs appear in
11
+ * all copies of this software.
12
+ *
13
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
14
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
15
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
16
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
17
+ * DAMAGE.
18
+ *
19
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
20
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
21
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
22
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
23
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
24
+ *
25
+ * Red Hat Author(s): Behdad Esfahbod
26
+ * Google Author(s): Behdad Esfahbod
27
+ */
28
+
29
+ #ifndef HB_OT_LAYOUT_COMMON_HH
30
+ #define HB_OT_LAYOUT_COMMON_HH
31
+
32
+ #include "hb.hh"
33
+ #include "hb-ot-layout.hh"
34
+ #include "hb-open-type.hh"
35
+ #include "hb-set.hh"
36
+ #include "hb-bimap.hh"
37
+
38
+ #include "OT/Layout/Common/Coverage.hh"
39
+ #include "OT/Layout/types.hh"
40
+
41
+ // TODO(garretrieger): cleanup these after migration.
42
+ using OT::Layout::Common::Coverage;
43
+ using OT::Layout::Common::RangeRecord;
44
+ using OT::Layout::SmallTypes;
45
+ using OT::Layout::MediumTypes;
46
+
47
+
48
+ namespace OT {
49
+
50
+ template<typename Iterator>
51
+ static inline bool ClassDef_serialize (hb_serialize_context_t *c,
52
+ Iterator it);
53
+
54
+ static bool ClassDef_remap_and_serialize (
55
+ hb_serialize_context_t *c,
56
+ const hb_set_t &klasses,
57
+ bool use_class_zero,
58
+ hb_sorted_vector_t<hb_codepoint_pair_t> &glyph_and_klass, /* IN/OUT */
59
+ hb_map_t *klass_map /*IN/OUT*/);
60
+
61
+ struct hb_collect_feature_substitutes_with_var_context_t
62
+ {
63
+ const hb_map_t *axes_index_tag_map;
64
+ const hb_hashmap_t<hb_tag_t, Triple> *axes_location;
65
+ hb_hashmap_t<unsigned, hb::shared_ptr<hb_set_t>> *record_cond_idx_map;
66
+ hb_hashmap_t<unsigned, const Feature*> *feature_substitutes_map;
67
+ hb_set_t& catch_all_record_feature_idxes;
68
+
69
+ // not stored in subset_plan
70
+ hb_set_t *feature_indices;
71
+ bool apply;
72
+ bool variation_applied;
73
+ bool universal;
74
+ unsigned cur_record_idx;
75
+ hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned> *conditionset_map;
76
+ };
77
+
78
+ struct hb_prune_langsys_context_t
79
+ {
80
+ hb_prune_langsys_context_t (const void *table_,
81
+ hb_hashmap_t<unsigned, hb::unique_ptr<hb_set_t>> *script_langsys_map_,
82
+ const hb_map_t *duplicate_feature_map_,
83
+ hb_set_t *new_collected_feature_indexes_)
84
+ :table (table_),
85
+ script_langsys_map (script_langsys_map_),
86
+ duplicate_feature_map (duplicate_feature_map_),
87
+ new_feature_indexes (new_collected_feature_indexes_),
88
+ script_count (0),langsys_feature_count (0) {}
89
+
90
+ bool visitScript ()
91
+ { return script_count++ < HB_MAX_SCRIPTS; }
92
+
93
+ bool visitLangsys (unsigned feature_count)
94
+ {
95
+ langsys_feature_count += feature_count;
96
+ return langsys_feature_count < HB_MAX_LANGSYS_FEATURE_COUNT;
97
+ }
98
+
99
+ public:
100
+ const void *table;
101
+ hb_hashmap_t<unsigned, hb::unique_ptr<hb_set_t>> *script_langsys_map;
102
+ const hb_map_t *duplicate_feature_map;
103
+ hb_set_t *new_feature_indexes;
104
+
105
+ private:
106
+ unsigned script_count;
107
+ unsigned langsys_feature_count;
108
+ };
109
+
110
+ struct hb_subset_layout_context_t :
111
+ hb_dispatch_context_t<hb_subset_layout_context_t, hb_empty_t, HB_DEBUG_SUBSET>
112
+ {
113
+ const char *get_name () { return "SUBSET_LAYOUT"; }
114
+ static return_t default_return_value () { return hb_empty_t (); }
115
+
116
+ bool visitScript ()
117
+ {
118
+ return script_count++ < HB_MAX_SCRIPTS;
119
+ }
120
+
121
+ bool visitLangSys ()
122
+ {
123
+ return langsys_count++ < HB_MAX_LANGSYS;
124
+ }
125
+
126
+ bool visitFeatureIndex (int count)
127
+ {
128
+ feature_index_count += count;
129
+ return feature_index_count < HB_MAX_FEATURE_INDICES;
130
+ }
131
+
132
+ bool visitLookupIndex()
133
+ {
134
+ lookup_index_count++;
135
+ return lookup_index_count < HB_MAX_LOOKUP_VISIT_COUNT;
136
+ }
137
+
138
+ hb_subset_context_t *subset_context;
139
+ const hb_tag_t table_tag;
140
+ const hb_map_t *lookup_index_map;
141
+ const hb_hashmap_t<unsigned, hb::unique_ptr<hb_set_t>> *script_langsys_map;
142
+ const hb_map_t *feature_index_map;
143
+ const hb_hashmap_t<unsigned, const Feature*> *feature_substitutes_map;
144
+ hb_hashmap_t<unsigned, hb::shared_ptr<hb_set_t>> *feature_record_cond_idx_map;
145
+ const hb_set_t *catch_all_record_feature_idxes;
146
+ const hb_hashmap_t<unsigned, hb_pair_t<const void*, const void*>> *feature_idx_tag_map;
147
+
148
+ unsigned cur_script_index;
149
+ unsigned cur_feature_var_record_idx;
150
+
151
+ hb_subset_layout_context_t (hb_subset_context_t *c_,
152
+ hb_tag_t tag_) :
153
+ subset_context (c_),
154
+ table_tag (tag_),
155
+ cur_script_index (0xFFFFu),
156
+ cur_feature_var_record_idx (0u),
157
+ script_count (0),
158
+ langsys_count (0),
159
+ feature_index_count (0),
160
+ lookup_index_count (0)
161
+ {
162
+ if (tag_ == HB_OT_TAG_GSUB)
163
+ {
164
+ lookup_index_map = &c_->plan->gsub_lookups;
165
+ script_langsys_map = &c_->plan->gsub_langsys;
166
+ feature_index_map = &c_->plan->gsub_features;
167
+ feature_substitutes_map = &c_->plan->gsub_feature_substitutes_map;
168
+ feature_record_cond_idx_map = c_->plan->user_axes_location.is_empty () ? nullptr : &c_->plan->gsub_feature_record_cond_idx_map;
169
+ catch_all_record_feature_idxes = &c_->plan->gsub_old_features;
170
+ feature_idx_tag_map = &c_->plan->gsub_old_feature_idx_tag_map;
171
+ }
172
+ else
173
+ {
174
+ lookup_index_map = &c_->plan->gpos_lookups;
175
+ script_langsys_map = &c_->plan->gpos_langsys;
176
+ feature_index_map = &c_->plan->gpos_features;
177
+ feature_substitutes_map = &c_->plan->gpos_feature_substitutes_map;
178
+ feature_record_cond_idx_map = c_->plan->user_axes_location.is_empty () ? nullptr : &c_->plan->gpos_feature_record_cond_idx_map;
179
+ catch_all_record_feature_idxes = &c_->plan->gpos_old_features;
180
+ feature_idx_tag_map = &c_->plan->gpos_old_feature_idx_tag_map;
181
+ }
182
+ }
183
+
184
+ private:
185
+ unsigned script_count;
186
+ unsigned langsys_count;
187
+ unsigned feature_index_count;
188
+ unsigned lookup_index_count;
189
+ };
190
+
191
+ struct ItemVariationStore;
192
+ struct hb_collect_variation_indices_context_t :
193
+ hb_dispatch_context_t<hb_collect_variation_indices_context_t>
194
+ {
195
+ template <typename T>
196
+ return_t dispatch (const T &obj) { obj.collect_variation_indices (this); return hb_empty_t (); }
197
+ static return_t default_return_value () { return hb_empty_t (); }
198
+
199
+ hb_set_t *layout_variation_indices;
200
+ const hb_set_t *glyph_set;
201
+ const hb_map_t *gpos_lookups;
202
+
203
+ hb_collect_variation_indices_context_t (hb_set_t *layout_variation_indices_,
204
+ const hb_set_t *glyph_set_,
205
+ const hb_map_t *gpos_lookups_) :
206
+ layout_variation_indices (layout_variation_indices_),
207
+ glyph_set (glyph_set_),
208
+ gpos_lookups (gpos_lookups_) {}
209
+ };
210
+
211
+ template<typename OutputArray>
212
+ struct subset_offset_array_t
213
+ {
214
+ subset_offset_array_t (hb_subset_context_t *subset_context_,
215
+ OutputArray& out_,
216
+ const void *base_) : subset_context (subset_context_),
217
+ out (out_), base (base_) {}
218
+
219
+ template <typename T>
220
+ bool operator () (T&& offset)
221
+ {
222
+ auto snap = subset_context->serializer->snapshot ();
223
+ auto *o = out.serialize_append (subset_context->serializer);
224
+ if (unlikely (!o)) return false;
225
+ bool ret = o->serialize_subset (subset_context, offset, base);
226
+ if (!ret)
227
+ {
228
+ out.pop ();
229
+ subset_context->serializer->revert (snap);
230
+ }
231
+ return ret;
232
+ }
233
+
234
+ private:
235
+ hb_subset_context_t *subset_context;
236
+ OutputArray &out;
237
+ const void *base;
238
+ };
239
+
240
+
241
+ template<typename OutputArray, typename Arg>
242
+ struct subset_offset_array_arg_t
243
+ {
244
+ subset_offset_array_arg_t (hb_subset_context_t *subset_context_,
245
+ OutputArray& out_,
246
+ const void *base_,
247
+ Arg &&arg_) : subset_context (subset_context_), out (out_),
248
+ base (base_), arg (arg_) {}
249
+
250
+ template <typename T>
251
+ bool operator () (T&& offset)
252
+ {
253
+ auto snap = subset_context->serializer->snapshot ();
254
+ auto *o = out.serialize_append (subset_context->serializer);
255
+ if (unlikely (!o)) return false;
256
+ bool ret = o->serialize_subset (subset_context, offset, base, arg);
257
+ if (!ret)
258
+ {
259
+ out.pop ();
260
+ subset_context->serializer->revert (snap);
261
+ }
262
+ return ret;
263
+ }
264
+
265
+ private:
266
+ hb_subset_context_t *subset_context;
267
+ OutputArray &out;
268
+ const void *base;
269
+ Arg &&arg;
270
+ };
271
+
272
+ /*
273
+ * Helper to subset an array of offsets. Subsets the thing pointed to by each offset
274
+ * and discards the offset in the array if the subset operation results in an empty
275
+ * thing.
276
+ */
277
+ struct
278
+ {
279
+ template<typename OutputArray>
280
+ subset_offset_array_t<OutputArray>
281
+ operator () (hb_subset_context_t *subset_context, OutputArray& out,
282
+ const void *base) const
283
+ { return subset_offset_array_t<OutputArray> (subset_context, out, base); }
284
+
285
+ /* Variant with one extra argument passed to serialize_subset */
286
+ template<typename OutputArray, typename Arg>
287
+ subset_offset_array_arg_t<OutputArray, Arg>
288
+ operator () (hb_subset_context_t *subset_context, OutputArray& out,
289
+ const void *base, Arg &&arg) const
290
+ { return subset_offset_array_arg_t<OutputArray, Arg> (subset_context, out, base, arg); }
291
+ }
292
+ HB_FUNCOBJ (subset_offset_array);
293
+
294
+ template<typename OutputArray>
295
+ struct subset_record_array_t
296
+ {
297
+ subset_record_array_t (hb_subset_layout_context_t *c_, OutputArray* out_,
298
+ const void *base_) : subset_layout_context (c_),
299
+ out (out_), base (base_) {}
300
+
301
+ template <typename T>
302
+ void
303
+ operator () (T&& record)
304
+ {
305
+ auto snap = subset_layout_context->subset_context->serializer->snapshot ();
306
+ bool ret = record.subset (subset_layout_context, base);
307
+ if (!ret) subset_layout_context->subset_context->serializer->revert (snap);
308
+ else out->len++;
309
+ }
310
+
311
+ private:
312
+ hb_subset_layout_context_t *subset_layout_context;
313
+ OutputArray *out;
314
+ const void *base;
315
+ };
316
+
317
+ template<typename OutputArray, typename Arg>
318
+ struct subset_record_array_arg_t
319
+ {
320
+ subset_record_array_arg_t (hb_subset_layout_context_t *c_, OutputArray* out_,
321
+ const void *base_,
322
+ Arg &&arg_) : subset_layout_context (c_),
323
+ out (out_), base (base_), arg (arg_) {}
324
+
325
+ template <typename T>
326
+ void
327
+ operator () (T&& record)
328
+ {
329
+ auto snap = subset_layout_context->subset_context->serializer->snapshot ();
330
+ bool ret = record.subset (subset_layout_context, base, arg);
331
+ if (!ret) subset_layout_context->subset_context->serializer->revert (snap);
332
+ else out->len++;
333
+ }
334
+
335
+ private:
336
+ hb_subset_layout_context_t *subset_layout_context;
337
+ OutputArray *out;
338
+ const void *base;
339
+ Arg &&arg;
340
+ };
341
+
342
+ /*
343
+ * Helper to subset a RecordList/record array. Subsets each Record in the array and
344
+ * discards the record if the subset operation returns false.
345
+ */
346
+ struct
347
+ {
348
+ template<typename OutputArray>
349
+ subset_record_array_t<OutputArray>
350
+ operator () (hb_subset_layout_context_t *c, OutputArray* out,
351
+ const void *base) const
352
+ { return subset_record_array_t<OutputArray> (c, out, base); }
353
+
354
+ /* Variant with one extra argument passed to subset */
355
+ template<typename OutputArray, typename Arg>
356
+ subset_record_array_arg_t<OutputArray, Arg>
357
+ operator () (hb_subset_layout_context_t *c, OutputArray* out,
358
+ const void *base, Arg &&arg) const
359
+ { return subset_record_array_arg_t<OutputArray, Arg> (c, out, base, arg); }
360
+ }
361
+ HB_FUNCOBJ (subset_record_array);
362
+
363
+
364
+ template<typename OutputArray>
365
+ struct serialize_math_record_array_t
366
+ {
367
+ serialize_math_record_array_t (hb_serialize_context_t *serialize_context_,
368
+ OutputArray& out_,
369
+ const void *base_) : serialize_context (serialize_context_),
370
+ out (out_), base (base_) {}
371
+
372
+ template <typename T>
373
+ bool operator () (T&& record)
374
+ {
375
+ if (!serialize_context->copy (record, base)) return false;
376
+ out.len++;
377
+ return true;
378
+ }
379
+
380
+ private:
381
+ hb_serialize_context_t *serialize_context;
382
+ OutputArray &out;
383
+ const void *base;
384
+ };
385
+
386
+ /*
387
+ * Helper to serialize an array of MATH records.
388
+ */
389
+ struct
390
+ {
391
+ template<typename OutputArray>
392
+ serialize_math_record_array_t<OutputArray>
393
+ operator () (hb_serialize_context_t *serialize_context, OutputArray& out,
394
+ const void *base) const
395
+ { return serialize_math_record_array_t<OutputArray> (serialize_context, out, base); }
396
+
397
+ }
398
+ HB_FUNCOBJ (serialize_math_record_array);
399
+
400
+ /*
401
+ *
402
+ * OpenType Layout Common Table Formats
403
+ *
404
+ */
405
+
406
+
407
+ /*
408
+ * Script, ScriptList, LangSys, Feature, FeatureList, Lookup, LookupList
409
+ */
410
+
411
+ struct IndexArray : Array16Of<Index>
412
+ {
413
+ bool intersects (const hb_map_t *indexes) const
414
+ { return hb_any (*this, indexes); }
415
+
416
+ template <typename Iterator,
417
+ hb_requires (hb_is_iterator (Iterator))>
418
+ void serialize (hb_serialize_context_t *c,
419
+ hb_subset_layout_context_t *l,
420
+ Iterator it)
421
+ {
422
+ if (!it) return;
423
+ if (unlikely (!c->extend_min ((*this)))) return;
424
+
425
+ for (const auto _ : it)
426
+ {
427
+ if (!l->visitLookupIndex()) break;
428
+
429
+ Index i;
430
+ i = _;
431
+ c->copy (i);
432
+ this->len++;
433
+ }
434
+ }
435
+
436
+ unsigned int get_indexes (unsigned int start_offset,
437
+ unsigned int *_count /* IN/OUT */,
438
+ unsigned int *_indexes /* OUT */) const
439
+ {
440
+ if (_count)
441
+ {
442
+ + this->as_array ().sub_array (start_offset, _count)
443
+ | hb_sink (hb_array (_indexes, *_count))
444
+ ;
445
+ }
446
+ return this->len;
447
+ }
448
+
449
+ void add_indexes_to (hb_set_t* output /* OUT */) const
450
+ {
451
+ output->add_array (as_array ());
452
+ }
453
+ };
454
+
455
+
456
+ /* https://docs.microsoft.com/en-us/typography/opentype/spec/features_pt#size */
457
+ struct FeatureParamsSize
458
+ {
459
+ bool sanitize (hb_sanitize_context_t *c) const
460
+ {
461
+ TRACE_SANITIZE (this);
462
+ if (unlikely (!c->check_struct (this))) return_trace (false);
463
+ hb_barrier ();
464
+
465
+ /* This subtable has some "history", if you will. Some earlier versions of
466
+ * Adobe tools calculated the offset of the FeatureParams subtable from the
467
+ * beginning of the FeatureList table! Now, that is dealt with in the
468
+ * Feature implementation. But we still need to be able to tell junk from
469
+ * real data. Note: We don't check that the nameID actually exists.
470
+ *
471
+ * Read Roberts wrote on 9/15/06 on opentype-list@indx.co.uk :
472
+ *
473
+ * Yes, it is correct that a new version of the AFDKO (version 2.0) will be
474
+ * coming out soon, and that the makeotf program will build a font with a
475
+ * 'size' feature that is correct by the specification.
476
+ *
477
+ * The specification for this feature tag is in the "OpenType Layout Tag
478
+ * Registry". You can see a copy of this at:
479
+ * https://docs.microsoft.com/en-us/typography/opentype/spec/features_pt#tag-size
480
+ *
481
+ * Here is one set of rules to determine if the 'size' feature is built
482
+ * correctly, or as by the older versions of MakeOTF. You may be able to do
483
+ * better.
484
+ *
485
+ * Assume that the offset to the size feature is according to specification,
486
+ * and make the following value checks. If it fails, assume the size
487
+ * feature is calculated as versions of MakeOTF before the AFDKO 2.0 built it.
488
+ * If this fails, reject the 'size' feature. The older makeOTF's calculated the
489
+ * offset from the beginning of the FeatureList table, rather than from the
490
+ * beginning of the 'size' Feature table.
491
+ *
492
+ * If "design size" == 0:
493
+ * fails check
494
+ *
495
+ * Else if ("subfamily identifier" == 0 and
496
+ * "range start" == 0 and
497
+ * "range end" == 0 and
498
+ * "range start" == 0 and
499
+ * "menu name ID" == 0)
500
+ * passes check: this is the format used when there is a design size
501
+ * specified, but there is no recommended size range.
502
+ *
503
+ * Else if ("design size" < "range start" or
504
+ * "design size" > "range end" or
505
+ * "range end" <= "range start" or
506
+ * "menu name ID" < 256 or
507
+ * "menu name ID" > 32767 or
508
+ * menu name ID is not a name ID which is actually in the name table)
509
+ * fails test
510
+ * Else
511
+ * passes test.
512
+ */
513
+
514
+ if (!designSize)
515
+ return_trace (false);
516
+ else if (subfamilyID == 0 &&
517
+ subfamilyNameID == 0 &&
518
+ rangeStart == 0 &&
519
+ rangeEnd == 0)
520
+ return_trace (true);
521
+ else if (designSize < rangeStart ||
522
+ designSize > rangeEnd ||
523
+ subfamilyNameID < 256 ||
524
+ subfamilyNameID > 32767)
525
+ return_trace (false);
526
+ else
527
+ return_trace (true);
528
+ }
529
+
530
+ void collect_name_ids (hb_set_t *nameids_to_retain /* OUT */) const
531
+ { nameids_to_retain->add (subfamilyNameID); }
532
+
533
+ bool subset (hb_subset_context_t *c) const
534
+ {
535
+ TRACE_SUBSET (this);
536
+ return_trace ((bool) c->serializer->embed (*this));
537
+ }
538
+
539
+ HBUINT16 designSize; /* Represents the design size in 720/inch
540
+ * units (decipoints). The design size entry
541
+ * must be non-zero. When there is a design
542
+ * size but no recommended size range, the
543
+ * rest of the array will consist of zeros. */
544
+ HBUINT16 subfamilyID; /* Has no independent meaning, but serves
545
+ * as an identifier that associates fonts
546
+ * in a subfamily. All fonts which share a
547
+ * Preferred or Font Family name and which
548
+ * differ only by size range shall have the
549
+ * same subfamily value, and no fonts which
550
+ * differ in weight or style shall have the
551
+ * same subfamily value. If this value is
552
+ * zero, the remaining fields in the array
553
+ * will be ignored. */
554
+ NameID subfamilyNameID;/* If the preceding value is non-zero, this
555
+ * value must be set in the range 256 - 32767
556
+ * (inclusive). It records the value of a
557
+ * field in the name table, which must
558
+ * contain English-language strings encoded
559
+ * in Windows Unicode and Macintosh Roman,
560
+ * and may contain additional strings
561
+ * localized to other scripts and languages.
562
+ * Each of these strings is the name an
563
+ * application should use, in combination
564
+ * with the family name, to represent the
565
+ * subfamily in a menu. Applications will
566
+ * choose the appropriate version based on
567
+ * their selection criteria. */
568
+ HBUINT16 rangeStart; /* Large end of the recommended usage range
569
+ * (inclusive), stored in 720/inch units
570
+ * (decipoints). */
571
+ HBUINT16 rangeEnd; /* Small end of the recommended usage range
572
+ (exclusive), stored in 720/inch units
573
+ * (decipoints). */
574
+ public:
575
+ DEFINE_SIZE_STATIC (10);
576
+ };
577
+
578
+ /* https://docs.microsoft.com/en-us/typography/opentype/spec/features_pt#ssxx */
579
+ struct FeatureParamsStylisticSet
580
+ {
581
+ bool sanitize (hb_sanitize_context_t *c) const
582
+ {
583
+ TRACE_SANITIZE (this);
584
+ /* Right now minorVersion is at zero. Which means, any table supports
585
+ * the uiNameID field. */
586
+ return_trace (c->check_struct (this));
587
+ }
588
+
589
+ void collect_name_ids (hb_set_t *nameids_to_retain /* OUT */) const
590
+ { nameids_to_retain->add (uiNameID); }
591
+
592
+ bool subset (hb_subset_context_t *c) const
593
+ {
594
+ TRACE_SUBSET (this);
595
+ return_trace ((bool) c->serializer->embed (*this));
596
+ }
597
+
598
+ HBUINT16 version; /* (set to 0): This corresponds to a “minor”
599
+ * version number. Additional data may be
600
+ * added to the end of this Feature Parameters
601
+ * table in the future. */
602
+
603
+ NameID uiNameID; /* The 'name' table name ID that specifies a
604
+ * string (or strings, for multiple languages)
605
+ * for a user-interface label for this
606
+ * feature. The values of uiLabelNameId and
607
+ * sampleTextNameId are expected to be in the
608
+ * font-specific name ID range (256-32767),
609
+ * though that is not a requirement in this
610
+ * Feature Parameters specification. The
611
+ * user-interface label for the feature can
612
+ * be provided in multiple languages. An
613
+ * English string should be included as a
614
+ * fallback. The string should be kept to a
615
+ * minimal length to fit comfortably with
616
+ * different application interfaces. */
617
+ public:
618
+ DEFINE_SIZE_STATIC (4);
619
+ };
620
+
621
+ /* https://docs.microsoft.com/en-us/typography/opentype/spec/features_ae#cv01-cv99 */
622
+ struct FeatureParamsCharacterVariants
623
+ {
624
+ unsigned
625
+ get_characters (unsigned start_offset, unsigned *char_count, hb_codepoint_t *chars) const
626
+ {
627
+ if (char_count)
628
+ {
629
+ + characters.as_array ().sub_array (start_offset, char_count)
630
+ | hb_sink (hb_array (chars, *char_count))
631
+ ;
632
+ }
633
+ return characters.len;
634
+ }
635
+
636
+ unsigned get_size () const
637
+ { return min_size + characters.len * HBUINT24::static_size; }
638
+
639
+ void collect_name_ids (hb_set_t *nameids_to_retain /* OUT */) const
640
+ {
641
+ if (featUILableNameID) nameids_to_retain->add (featUILableNameID);
642
+ if (featUITooltipTextNameID) nameids_to_retain->add (featUITooltipTextNameID);
643
+ if (sampleTextNameID) nameids_to_retain->add (sampleTextNameID);
644
+
645
+ if (!firstParamUILabelNameID || !numNamedParameters || numNamedParameters >= 0x7FFF)
646
+ return;
647
+
648
+ unsigned last_name_id = (unsigned) firstParamUILabelNameID + (unsigned) numNamedParameters - 1;
649
+ if (last_name_id >= 256 && last_name_id <= 32767)
650
+ nameids_to_retain->add_range (firstParamUILabelNameID, last_name_id);
651
+ }
652
+
653
+ bool subset (hb_subset_context_t *c) const
654
+ {
655
+ TRACE_SUBSET (this);
656
+ return_trace ((bool) c->serializer->embed (*this));
657
+ }
658
+
659
+ bool sanitize (hb_sanitize_context_t *c) const
660
+ {
661
+ TRACE_SANITIZE (this);
662
+ return_trace (c->check_struct (this) &&
663
+ characters.sanitize (c));
664
+ }
665
+
666
+ HBUINT16 format; /* Format number is set to 0. */
667
+ NameID featUILableNameID; /* The ‘name’ table name ID that
668
+ * specifies a string (or strings,
669
+ * for multiple languages) for a
670
+ * user-interface label for this
671
+ * feature. (May be NULL.) */
672
+ NameID featUITooltipTextNameID;/* The ‘name’ table name ID that
673
+ * specifies a string (or strings,
674
+ * for multiple languages) that an
675
+ * application can use for tooltip
676
+ * text for this feature. (May be
677
+ * nullptr.) */
678
+ NameID sampleTextNameID; /* The ‘name’ table name ID that
679
+ * specifies sample text that
680
+ * illustrates the effect of this
681
+ * feature. (May be NULL.) */
682
+ HBUINT16 numNamedParameters; /* Number of named parameters. (May
683
+ * be zero.) */
684
+ NameID firstParamUILabelNameID;/* The first ‘name’ table name ID
685
+ * used to specify strings for
686
+ * user-interface labels for the
687
+ * feature parameters. (Must be zero
688
+ * if numParameters is zero.) */
689
+ Array16Of<HBUINT24>
690
+ characters; /* Array of the Unicode Scalar Value
691
+ * of the characters for which this
692
+ * feature provides glyph variants.
693
+ * (May be zero.) */
694
+ public:
695
+ DEFINE_SIZE_ARRAY (14, characters);
696
+ };
697
+
698
+ struct FeatureParams
699
+ {
700
+ bool sanitize (hb_sanitize_context_t *c, hb_tag_t tag) const
701
+ {
702
+ #ifdef HB_NO_LAYOUT_FEATURE_PARAMS
703
+ return true;
704
+ #endif
705
+ TRACE_SANITIZE (this);
706
+ if (tag == HB_TAG ('s','i','z','e'))
707
+ return_trace (u.size.sanitize (c));
708
+ if ((tag & 0xFFFF0000u) == HB_TAG ('s','s','\0','\0')) /* ssXX */
709
+ return_trace (u.stylisticSet.sanitize (c));
710
+ if ((tag & 0xFFFF0000u) == HB_TAG ('c','v','\0','\0')) /* cvXX */
711
+ return_trace (u.characterVariants.sanitize (c));
712
+ return_trace (true);
713
+ }
714
+
715
+ void collect_name_ids (hb_tag_t tag, hb_set_t *nameids_to_retain /* OUT */) const
716
+ {
717
+ #ifdef HB_NO_LAYOUT_FEATURE_PARAMS
718
+ return;
719
+ #endif
720
+ if (tag == HB_TAG ('s','i','z','e'))
721
+ return (u.size.collect_name_ids (nameids_to_retain));
722
+ if ((tag & 0xFFFF0000u) == HB_TAG ('s','s','\0','\0')) /* ssXX */
723
+ return (u.stylisticSet.collect_name_ids (nameids_to_retain));
724
+ if ((tag & 0xFFFF0000u) == HB_TAG ('c','v','\0','\0')) /* cvXX */
725
+ return (u.characterVariants.collect_name_ids (nameids_to_retain));
726
+ }
727
+
728
+ bool subset (hb_subset_context_t *c, const Tag* tag) const
729
+ {
730
+ TRACE_SUBSET (this);
731
+ if (!tag) return_trace (false);
732
+ if (*tag == HB_TAG ('s','i','z','e'))
733
+ return_trace (u.size.subset (c));
734
+ if ((*tag & 0xFFFF0000u) == HB_TAG ('s','s','\0','\0')) /* ssXX */
735
+ return_trace (u.stylisticSet.subset (c));
736
+ if ((*tag & 0xFFFF0000u) == HB_TAG ('c','v','\0','\0')) /* cvXX */
737
+ return_trace (u.characterVariants.subset (c));
738
+ return_trace (false);
739
+ }
740
+
741
+ #ifndef HB_NO_LAYOUT_FEATURE_PARAMS
742
+ const FeatureParamsSize& get_size_params (hb_tag_t tag) const
743
+ {
744
+ if (tag == HB_TAG ('s','i','z','e'))
745
+ return u.size;
746
+ return Null (FeatureParamsSize);
747
+ }
748
+ const FeatureParamsStylisticSet& get_stylistic_set_params (hb_tag_t tag) const
749
+ {
750
+ if ((tag & 0xFFFF0000u) == HB_TAG ('s','s','\0','\0')) /* ssXX */
751
+ return u.stylisticSet;
752
+ return Null (FeatureParamsStylisticSet);
753
+ }
754
+ const FeatureParamsCharacterVariants& get_character_variants_params (hb_tag_t tag) const
755
+ {
756
+ if ((tag & 0xFFFF0000u) == HB_TAG ('c','v','\0','\0')) /* cvXX */
757
+ return u.characterVariants;
758
+ return Null (FeatureParamsCharacterVariants);
759
+ }
760
+ #endif
761
+
762
+ private:
763
+ union {
764
+ FeatureParamsSize size;
765
+ FeatureParamsStylisticSet stylisticSet;
766
+ FeatureParamsCharacterVariants characterVariants;
767
+ } u;
768
+ public:
769
+ DEFINE_SIZE_MIN (0);
770
+ };
771
+
772
+ struct Record_sanitize_closure_t {
773
+ hb_tag_t tag;
774
+ const void *list_base;
775
+ };
776
+
777
+ struct Feature
778
+ {
779
+ unsigned int get_lookup_count () const
780
+ { return lookupIndex.len; }
781
+ hb_tag_t get_lookup_index (unsigned int i) const
782
+ { return lookupIndex[i]; }
783
+ unsigned int get_lookup_indexes (unsigned int start_index,
784
+ unsigned int *lookup_count /* IN/OUT */,
785
+ unsigned int *lookup_tags /* OUT */) const
786
+ { return lookupIndex.get_indexes (start_index, lookup_count, lookup_tags); }
787
+ void add_lookup_indexes_to (hb_set_t *lookup_indexes) const
788
+ { lookupIndex.add_indexes_to (lookup_indexes); }
789
+
790
+ const FeatureParams &get_feature_params () const
791
+ { return this+featureParams; }
792
+
793
+ bool intersects_lookup_indexes (const hb_map_t *lookup_indexes) const
794
+ { return lookupIndex.intersects (lookup_indexes); }
795
+
796
+ void collect_name_ids (hb_tag_t tag, hb_set_t *nameids_to_retain /* OUT */) const
797
+ {
798
+ if (featureParams)
799
+ get_feature_params ().collect_name_ids (tag, nameids_to_retain);
800
+ }
801
+
802
+ bool subset (hb_subset_context_t *c,
803
+ hb_subset_layout_context_t *l,
804
+ const Tag *tag = nullptr) const
805
+ {
806
+ TRACE_SUBSET (this);
807
+ auto *out = c->serializer->start_embed (*this);
808
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
809
+
810
+ out->featureParams.serialize_subset (c, featureParams, this, tag);
811
+
812
+ auto it =
813
+ + hb_iter (lookupIndex)
814
+ | hb_filter (l->lookup_index_map)
815
+ | hb_map (l->lookup_index_map)
816
+ ;
817
+
818
+ out->lookupIndex.serialize (c->serializer, l, it);
819
+ // The decision to keep or drop this feature is already made before we get here
820
+ // so always retain it.
821
+ return_trace (true);
822
+ }
823
+
824
+ bool sanitize (hb_sanitize_context_t *c,
825
+ const Record_sanitize_closure_t *closure = nullptr) const
826
+ {
827
+ TRACE_SANITIZE (this);
828
+ if (unlikely (!(c->check_struct (this) && lookupIndex.sanitize (c))))
829
+ return_trace (false);
830
+ hb_barrier ();
831
+
832
+ /* Some earlier versions of Adobe tools calculated the offset of the
833
+ * FeatureParams subtable from the beginning of the FeatureList table!
834
+ *
835
+ * If sanitizing "failed" for the FeatureParams subtable, try it with the
836
+ * alternative location. We would know sanitize "failed" if old value
837
+ * of the offset was non-zero, but it's zeroed now.
838
+ *
839
+ * Only do this for the 'size' feature, since at the time of the faulty
840
+ * Adobe tools, only the 'size' feature had FeatureParams defined.
841
+ */
842
+
843
+ if (likely (featureParams.is_null ()))
844
+ return_trace (true);
845
+
846
+ unsigned int orig_offset = featureParams;
847
+ if (unlikely (!featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE)))
848
+ return_trace (false);
849
+ hb_barrier ();
850
+
851
+ if (featureParams == 0 && closure &&
852
+ closure->tag == HB_TAG ('s','i','z','e') &&
853
+ closure->list_base && closure->list_base < this)
854
+ {
855
+ unsigned int new_offset_int = orig_offset -
856
+ (((char *) this) - ((char *) closure->list_base));
857
+
858
+ Offset16To<FeatureParams> new_offset;
859
+ /* Check that it would not overflow. */
860
+ new_offset = new_offset_int;
861
+ if (new_offset == new_offset_int &&
862
+ c->try_set (&featureParams, new_offset_int) &&
863
+ !featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE))
864
+ return_trace (false);
865
+ }
866
+
867
+ return_trace (true);
868
+ }
869
+
870
+ Offset16To<FeatureParams>
871
+ featureParams; /* Offset to Feature Parameters table (if one
872
+ * has been defined for the feature), relative
873
+ * to the beginning of the Feature Table; = Null
874
+ * if not required */
875
+ IndexArray lookupIndex; /* Array of LookupList indices */
876
+ public:
877
+ DEFINE_SIZE_ARRAY_SIZED (4, lookupIndex);
878
+ };
879
+
880
+ template <typename Type>
881
+ struct Record
882
+ {
883
+ int cmp (hb_tag_t a) const { return tag.cmp (a); }
884
+
885
+ bool subset (hb_subset_layout_context_t *c, const void *base, const void *f_sub = nullptr) const
886
+ {
887
+ TRACE_SUBSET (this);
888
+ auto *out = c->subset_context->serializer->embed (this);
889
+ if (unlikely (!out)) return_trace (false);
890
+
891
+ if (!f_sub)
892
+ return_trace (out->offset.serialize_subset (c->subset_context, offset, base, c, &tag));
893
+
894
+ const Feature& f = *reinterpret_cast<const Feature *> (f_sub);
895
+ auto *s = c->subset_context->serializer;
896
+ s->push ();
897
+
898
+ out->offset = 0;
899
+ bool ret = f.subset (c->subset_context, c, &tag);
900
+ if (ret)
901
+ s->add_link (out->offset, s->pop_pack ());
902
+ else
903
+ s->pop_discard ();
904
+
905
+ return_trace (ret);
906
+ }
907
+
908
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
909
+ {
910
+ TRACE_SANITIZE (this);
911
+ const Record_sanitize_closure_t closure = {tag, base};
912
+ return_trace (c->check_struct (this) &&
913
+ offset.sanitize (c, base, &closure));
914
+ }
915
+
916
+ Tag tag; /* 4-byte Tag identifier */
917
+ Offset16To<Type>
918
+ offset; /* Offset from beginning of object holding
919
+ * the Record */
920
+ public:
921
+ DEFINE_SIZE_STATIC (6);
922
+ };
923
+
924
+ template <typename Type>
925
+ struct RecordArrayOf : SortedArray16Of<Record<Type>>
926
+ {
927
+ const Offset16To<Type>& get_offset (unsigned int i) const
928
+ { return (*this)[i].offset; }
929
+ Offset16To<Type>& get_offset (unsigned int i)
930
+ { return (*this)[i].offset; }
931
+ const Tag& get_tag (unsigned int i) const
932
+ { return (*this)[i].tag; }
933
+ unsigned int get_tags (unsigned int start_offset,
934
+ unsigned int *record_count /* IN/OUT */,
935
+ hb_tag_t *record_tags /* OUT */) const
936
+ {
937
+ if (record_count)
938
+ {
939
+ + this->as_array ().sub_array (start_offset, record_count)
940
+ | hb_map (&Record<Type>::tag)
941
+ | hb_sink (hb_array (record_tags, *record_count))
942
+ ;
943
+ }
944
+ return this->len;
945
+ }
946
+ bool find_index (hb_tag_t tag, unsigned int *index) const
947
+ {
948
+ return this->bfind (tag, index, HB_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX);
949
+ }
950
+ };
951
+
952
+ template <typename Type>
953
+ struct RecordListOf : RecordArrayOf<Type>
954
+ {
955
+ const Type& operator [] (unsigned int i) const
956
+ { return this+this->get_offset (i); }
957
+
958
+ bool subset (hb_subset_context_t *c,
959
+ hb_subset_layout_context_t *l) const
960
+ {
961
+ TRACE_SUBSET (this);
962
+ auto *out = c->serializer->start_embed (*this);
963
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
964
+
965
+ + this->iter ()
966
+ | hb_apply (subset_record_array (l, out, this))
967
+ ;
968
+ return_trace (true);
969
+ }
970
+
971
+ bool sanitize (hb_sanitize_context_t *c) const
972
+ {
973
+ TRACE_SANITIZE (this);
974
+ return_trace (RecordArrayOf<Type>::sanitize (c, this));
975
+ }
976
+ };
977
+
978
+ struct RecordListOfFeature : RecordListOf<Feature>
979
+ {
980
+ bool subset (hb_subset_context_t *c,
981
+ hb_subset_layout_context_t *l) const
982
+ {
983
+ TRACE_SUBSET (this);
984
+ auto *out = c->serializer->start_embed (*this);
985
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
986
+
987
+ + hb_enumerate (*this)
988
+ | hb_filter (l->feature_index_map, hb_first)
989
+ | hb_apply ([l, out, this] (const hb_pair_t<unsigned, const Record<Feature>&>& _)
990
+ {
991
+ const Feature *f_sub = nullptr;
992
+ const Feature **f = nullptr;
993
+ if (l->feature_substitutes_map->has (_.first, &f))
994
+ f_sub = *f;
995
+
996
+ subset_record_array (l, out, this, f_sub) (_.second);
997
+ })
998
+ ;
999
+
1000
+ return_trace (true);
1001
+ }
1002
+ };
1003
+
1004
+ typedef RecordListOf<Feature> FeatureList;
1005
+
1006
+
1007
+ struct LangSys
1008
+ {
1009
+ unsigned int get_feature_count () const
1010
+ { return featureIndex.len; }
1011
+ hb_tag_t get_feature_index (unsigned int i) const
1012
+ { return featureIndex[i]; }
1013
+ unsigned int get_feature_indexes (unsigned int start_offset,
1014
+ unsigned int *feature_count /* IN/OUT */,
1015
+ unsigned int *feature_indexes /* OUT */) const
1016
+ { return featureIndex.get_indexes (start_offset, feature_count, feature_indexes); }
1017
+ void add_feature_indexes_to (hb_set_t *feature_indexes) const
1018
+ { featureIndex.add_indexes_to (feature_indexes); }
1019
+
1020
+ bool has_required_feature () const { return reqFeatureIndex != 0xFFFFu; }
1021
+ unsigned int get_required_feature_index () const
1022
+ {
1023
+ if (reqFeatureIndex == 0xFFFFu)
1024
+ return Index::NOT_FOUND_INDEX;
1025
+ return reqFeatureIndex;
1026
+ }
1027
+
1028
+ LangSys* copy (hb_serialize_context_t *c) const
1029
+ {
1030
+ TRACE_SERIALIZE (this);
1031
+ return_trace (c->embed (*this));
1032
+ }
1033
+
1034
+ bool compare (const LangSys& o, const hb_map_t *feature_index_map) const
1035
+ {
1036
+ if (reqFeatureIndex != o.reqFeatureIndex)
1037
+ return false;
1038
+
1039
+ auto iter =
1040
+ + hb_iter (featureIndex)
1041
+ | hb_filter (feature_index_map)
1042
+ | hb_map (feature_index_map)
1043
+ ;
1044
+
1045
+ auto o_iter =
1046
+ + hb_iter (o.featureIndex)
1047
+ | hb_filter (feature_index_map)
1048
+ | hb_map (feature_index_map)
1049
+ ;
1050
+
1051
+ for (; iter && o_iter; iter++, o_iter++)
1052
+ {
1053
+ unsigned a = *iter;
1054
+ unsigned b = *o_iter;
1055
+ if (a != b) return false;
1056
+ }
1057
+
1058
+ if (iter || o_iter) return false;
1059
+
1060
+ return true;
1061
+ }
1062
+
1063
+ void collect_features (hb_prune_langsys_context_t *c) const
1064
+ {
1065
+ if (!has_required_feature () && !get_feature_count ()) return;
1066
+ if (has_required_feature () &&
1067
+ c->duplicate_feature_map->has (reqFeatureIndex))
1068
+ c->new_feature_indexes->add (get_required_feature_index ());
1069
+
1070
+ + hb_iter (featureIndex)
1071
+ | hb_filter (c->duplicate_feature_map)
1072
+ | hb_sink (c->new_feature_indexes)
1073
+ ;
1074
+ }
1075
+
1076
+ bool subset (hb_subset_context_t *c,
1077
+ hb_subset_layout_context_t *l,
1078
+ const Tag *tag = nullptr) const
1079
+ {
1080
+ TRACE_SUBSET (this);
1081
+ auto *out = c->serializer->start_embed (*this);
1082
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
1083
+
1084
+ const uint32_t *v;
1085
+ out->reqFeatureIndex = l->feature_index_map->has (reqFeatureIndex, &v) ? *v : 0xFFFFu;
1086
+
1087
+ if (!l->visitFeatureIndex (featureIndex.len))
1088
+ return_trace (false);
1089
+
1090
+ auto it =
1091
+ + hb_iter (featureIndex)
1092
+ | hb_filter (l->feature_index_map)
1093
+ | hb_map (l->feature_index_map)
1094
+ ;
1095
+
1096
+ bool ret = bool (it);
1097
+ out->featureIndex.serialize (c->serializer, l, it);
1098
+ return_trace (ret);
1099
+ }
1100
+
1101
+ bool sanitize (hb_sanitize_context_t *c,
1102
+ const Record_sanitize_closure_t * = nullptr) const
1103
+ {
1104
+ TRACE_SANITIZE (this);
1105
+ return_trace (c->check_struct (this) && featureIndex.sanitize (c));
1106
+ }
1107
+
1108
+ Offset16 lookupOrderZ; /* = Null (reserved for an offset to a
1109
+ * reordering table) */
1110
+ HBUINT16 reqFeatureIndex;/* Index of a feature required for this
1111
+ * language system--if no required features
1112
+ * = 0xFFFFu */
1113
+ IndexArray featureIndex; /* Array of indices into the FeatureList */
1114
+ public:
1115
+ DEFINE_SIZE_ARRAY_SIZED (6, featureIndex);
1116
+ };
1117
+ DECLARE_NULL_NAMESPACE_BYTES (OT, LangSys);
1118
+
1119
+ struct Script
1120
+ {
1121
+ unsigned int get_lang_sys_count () const
1122
+ { return langSys.len; }
1123
+ const Tag& get_lang_sys_tag (unsigned int i) const
1124
+ { return langSys.get_tag (i); }
1125
+ unsigned int get_lang_sys_tags (unsigned int start_offset,
1126
+ unsigned int *lang_sys_count /* IN/OUT */,
1127
+ hb_tag_t *lang_sys_tags /* OUT */) const
1128
+ { return langSys.get_tags (start_offset, lang_sys_count, lang_sys_tags); }
1129
+ const LangSys& get_lang_sys (unsigned int i) const
1130
+ {
1131
+ if (i == Index::NOT_FOUND_INDEX) return get_default_lang_sys ();
1132
+ return this+langSys[i].offset;
1133
+ }
1134
+ bool find_lang_sys_index (hb_tag_t tag, unsigned int *index) const
1135
+ { return langSys.find_index (tag, index); }
1136
+
1137
+ bool has_default_lang_sys () const { return defaultLangSys != 0; }
1138
+ const LangSys& get_default_lang_sys () const { return this+defaultLangSys; }
1139
+
1140
+ void prune_langsys (hb_prune_langsys_context_t *c,
1141
+ unsigned script_index) const
1142
+ {
1143
+ if (!has_default_lang_sys () && !get_lang_sys_count ()) return;
1144
+ if (!c->visitScript ()) return;
1145
+
1146
+ if (!c->script_langsys_map->has (script_index))
1147
+ {
1148
+ if (unlikely (!c->script_langsys_map->set (script_index, hb::unique_ptr<hb_set_t> {hb_set_create ()})))
1149
+ return;
1150
+ }
1151
+
1152
+ if (has_default_lang_sys ())
1153
+ {
1154
+ //only collect features from non-redundant langsys
1155
+ const LangSys& d = get_default_lang_sys ();
1156
+ if (c->visitLangsys (d.get_feature_count ())) {
1157
+ d.collect_features (c);
1158
+ }
1159
+
1160
+ for (auto _ : + hb_enumerate (langSys))
1161
+ {
1162
+ const LangSys& l = this+_.second.offset;
1163
+ if (!c->visitLangsys (l.get_feature_count ())) continue;
1164
+ if (l.compare (d, c->duplicate_feature_map)) continue;
1165
+
1166
+ l.collect_features (c);
1167
+ c->script_langsys_map->get (script_index)->add (_.first);
1168
+ }
1169
+ }
1170
+ else
1171
+ {
1172
+ for (auto _ : + hb_enumerate (langSys))
1173
+ {
1174
+ const LangSys& l = this+_.second.offset;
1175
+ if (!c->visitLangsys (l.get_feature_count ())) continue;
1176
+ l.collect_features (c);
1177
+ c->script_langsys_map->get (script_index)->add (_.first);
1178
+ }
1179
+ }
1180
+ }
1181
+
1182
+ bool subset (hb_subset_context_t *c,
1183
+ hb_subset_layout_context_t *l,
1184
+ const Tag *tag) const
1185
+ {
1186
+ TRACE_SUBSET (this);
1187
+ if (!l->visitScript ()) return_trace (false);
1188
+ if (tag && !c->plan->layout_scripts.has (*tag))
1189
+ return false;
1190
+
1191
+ auto *out = c->serializer->start_embed (*this);
1192
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
1193
+
1194
+ bool defaultLang = false;
1195
+ if (has_default_lang_sys ())
1196
+ {
1197
+ c->serializer->push ();
1198
+ const LangSys& ls = this+defaultLangSys;
1199
+ bool ret = ls.subset (c, l);
1200
+ if (!ret && tag && *tag != HB_TAG ('D', 'F', 'L', 'T'))
1201
+ {
1202
+ c->serializer->pop_discard ();
1203
+ out->defaultLangSys = 0;
1204
+ }
1205
+ else
1206
+ {
1207
+ c->serializer->add_link (out->defaultLangSys, c->serializer->pop_pack ());
1208
+ defaultLang = true;
1209
+ }
1210
+ }
1211
+
1212
+ const hb_set_t *active_langsys = l->script_langsys_map->get (l->cur_script_index);
1213
+ if (active_langsys)
1214
+ {
1215
+ + hb_enumerate (langSys)
1216
+ | hb_filter (active_langsys, hb_first)
1217
+ | hb_map (hb_second)
1218
+ | hb_filter ([=] (const Record<LangSys>& record) {return l->visitLangSys (); })
1219
+ | hb_apply (subset_record_array (l, &(out->langSys), this))
1220
+ ;
1221
+ }
1222
+
1223
+ return_trace (bool (out->langSys.len) || defaultLang || l->table_tag == HB_OT_TAG_GSUB);
1224
+ }
1225
+
1226
+ bool sanitize (hb_sanitize_context_t *c,
1227
+ const Record_sanitize_closure_t * = nullptr) const
1228
+ {
1229
+ TRACE_SANITIZE (this);
1230
+ return_trace (defaultLangSys.sanitize (c, this) && langSys.sanitize (c, this));
1231
+ }
1232
+
1233
+ protected:
1234
+ Offset16To<LangSys>
1235
+ defaultLangSys; /* Offset to DefaultLangSys table--from
1236
+ * beginning of Script table--may be Null */
1237
+ RecordArrayOf<LangSys>
1238
+ langSys; /* Array of LangSysRecords--listed
1239
+ * alphabetically by LangSysTag */
1240
+ public:
1241
+ DEFINE_SIZE_ARRAY_SIZED (4, langSys);
1242
+ };
1243
+
1244
+ struct RecordListOfScript : RecordListOf<Script>
1245
+ {
1246
+ bool subset (hb_subset_context_t *c,
1247
+ hb_subset_layout_context_t *l) const
1248
+ {
1249
+ TRACE_SUBSET (this);
1250
+ auto *out = c->serializer->start_embed (*this);
1251
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
1252
+
1253
+ for (auto _ : + hb_enumerate (*this))
1254
+ {
1255
+ auto snap = c->serializer->snapshot ();
1256
+ l->cur_script_index = _.first;
1257
+ bool ret = _.second.subset (l, this);
1258
+ if (!ret) c->serializer->revert (snap);
1259
+ else out->len++;
1260
+ }
1261
+
1262
+ return_trace (true);
1263
+ }
1264
+ };
1265
+
1266
+ typedef RecordListOfScript ScriptList;
1267
+
1268
+
1269
+
1270
+ struct LookupFlag : HBUINT16
1271
+ {
1272
+ enum Flags {
1273
+ RightToLeft = 0x0001u,
1274
+ IgnoreBaseGlyphs = 0x0002u,
1275
+ IgnoreLigatures = 0x0004u,
1276
+ IgnoreMarks = 0x0008u,
1277
+ IgnoreFlags = 0x000Eu,
1278
+ UseMarkFilteringSet = 0x0010u,
1279
+ Reserved = 0x00E0u,
1280
+ MarkAttachmentType = 0xFF00u
1281
+ };
1282
+ public:
1283
+ DEFINE_SIZE_STATIC (2);
1284
+ };
1285
+
1286
+ } /* namespace OT */
1287
+ /* This has to be outside the namespace. */
1288
+ HB_MARK_AS_FLAG_T (OT::LookupFlag::Flags);
1289
+ namespace OT {
1290
+
1291
+ struct Lookup
1292
+ {
1293
+ unsigned int get_subtable_count () const { return subTable.len; }
1294
+
1295
+ template <typename TSubTable>
1296
+ const Array16OfOffset16To<TSubTable>& get_subtables () const
1297
+ { return reinterpret_cast<const Array16OfOffset16To<TSubTable> &> (subTable); }
1298
+ template <typename TSubTable>
1299
+ Array16OfOffset16To<TSubTable>& get_subtables ()
1300
+ { return reinterpret_cast<Array16OfOffset16To<TSubTable> &> (subTable); }
1301
+
1302
+ template <typename TSubTable>
1303
+ const TSubTable& get_subtable (unsigned int i) const
1304
+ { return this+get_subtables<TSubTable> ()[i]; }
1305
+ template <typename TSubTable>
1306
+ TSubTable& get_subtable (unsigned int i)
1307
+ { return this+get_subtables<TSubTable> ()[i]; }
1308
+
1309
+ unsigned int get_size () const
1310
+ {
1311
+ const HBUINT16 &markFilteringSet = StructAfter<const HBUINT16> (subTable);
1312
+ if (lookupFlag & LookupFlag::UseMarkFilteringSet)
1313
+ return (const char *) &StructAfter<const char> (markFilteringSet) - (const char *) this;
1314
+ return (const char *) &markFilteringSet - (const char *) this;
1315
+ }
1316
+
1317
+ unsigned int get_type () const { return lookupType; }
1318
+
1319
+ /* lookup_props is a 32-bit integer where the lower 16-bit is LookupFlag and
1320
+ * higher 16-bit is mark-filtering-set if the lookup uses one.
1321
+ * Not to be confused with glyph_props which is very similar. */
1322
+ uint32_t get_props () const
1323
+ {
1324
+ unsigned int flag = lookupFlag;
1325
+ if (unlikely (flag & LookupFlag::UseMarkFilteringSet))
1326
+ {
1327
+ const HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
1328
+ flag += (markFilteringSet << 16);
1329
+ }
1330
+ return flag;
1331
+ }
1332
+
1333
+ template <typename TSubTable, typename context_t, typename ...Ts>
1334
+ typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
1335
+ {
1336
+ unsigned int lookup_type = get_type ();
1337
+ TRACE_DISPATCH (this, lookup_type);
1338
+ unsigned int count = get_subtable_count ();
1339
+ for (unsigned int i = 0; i < count; i++) {
1340
+ typename context_t::return_t r = get_subtable<TSubTable> (i).dispatch (c, lookup_type, std::forward<Ts> (ds)...);
1341
+ if (c->stop_sublookup_iteration (r))
1342
+ return_trace (r);
1343
+ }
1344
+ return_trace (c->default_return_value ());
1345
+ }
1346
+
1347
+ bool serialize (hb_serialize_context_t *c,
1348
+ unsigned int lookup_type,
1349
+ uint32_t lookup_props,
1350
+ unsigned int num_subtables)
1351
+ {
1352
+ TRACE_SERIALIZE (this);
1353
+ if (unlikely (!c->extend_min (this))) return_trace (false);
1354
+ lookupType = lookup_type;
1355
+ lookupFlag = lookup_props & 0xFFFFu;
1356
+ if (unlikely (!subTable.serialize (c, num_subtables))) return_trace (false);
1357
+ if (lookupFlag & LookupFlag::UseMarkFilteringSet)
1358
+ {
1359
+ if (unlikely (!c->extend (this))) return_trace (false);
1360
+ HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
1361
+ markFilteringSet = lookup_props >> 16;
1362
+ }
1363
+ return_trace (true);
1364
+ }
1365
+
1366
+ template <typename TSubTable>
1367
+ bool subset (hb_subset_context_t *c) const
1368
+ {
1369
+ TRACE_SUBSET (this);
1370
+ auto *out = c->serializer->start_embed (*this);
1371
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
1372
+ out->lookupType = lookupType;
1373
+ out->lookupFlag = lookupFlag;
1374
+
1375
+ const hb_set_t *glyphset = c->plan->glyphset_gsub ();
1376
+ unsigned int lookup_type = get_type ();
1377
+ + hb_iter (get_subtables <TSubTable> ())
1378
+ | hb_filter ([this, glyphset, lookup_type] (const Offset16To<TSubTable> &_) { return (this+_).intersects (glyphset, lookup_type); })
1379
+ | hb_apply (subset_offset_array (c, out->get_subtables<TSubTable> (), this, lookup_type))
1380
+ ;
1381
+
1382
+ if (lookupFlag & LookupFlag::UseMarkFilteringSet)
1383
+ {
1384
+ const HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
1385
+ hb_codepoint_t *idx;
1386
+ if (!c->plan->used_mark_sets_map.has (markFilteringSet, &idx))
1387
+ {
1388
+ unsigned new_flag = lookupFlag;
1389
+ new_flag &= ~LookupFlag::UseMarkFilteringSet;
1390
+ out->lookupFlag = new_flag;
1391
+ }
1392
+ else
1393
+ {
1394
+ if (unlikely (!c->serializer->extend (out))) return_trace (false);
1395
+ HBUINT16 &outMarkFilteringSet = StructAfter<HBUINT16> (out->subTable);
1396
+ outMarkFilteringSet = *idx;
1397
+ }
1398
+ }
1399
+
1400
+ // Always keep the lookup even if it's empty. The rest of layout subsetting depends on lookup
1401
+ // indices being consistent with those computed during planning. So if an empty lookup is
1402
+ // discarded during the subset phase it will invalidate all subsequent lookup indices.
1403
+ // Generally we shouldn't end up with an empty lookup as we pre-prune them during the planning
1404
+ // phase, but it can happen in rare cases such as when during closure subtable is considered
1405
+ // degenerate (see: https://github.com/harfbuzz/harfbuzz/issues/3853)
1406
+ return_trace (true);
1407
+ }
1408
+
1409
+ template <typename TSubTable>
1410
+ bool sanitize (hb_sanitize_context_t *c) const
1411
+ {
1412
+ TRACE_SANITIZE (this);
1413
+ if (!(c->check_struct (this) && subTable.sanitize (c))) return_trace (false);
1414
+ hb_barrier ();
1415
+
1416
+ unsigned subtables = get_subtable_count ();
1417
+ if (unlikely (!c->visit_subtables (subtables))) return_trace (false);
1418
+
1419
+ if (lookupFlag & LookupFlag::UseMarkFilteringSet)
1420
+ {
1421
+ const HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
1422
+ if (!markFilteringSet.sanitize (c)) return_trace (false);
1423
+ }
1424
+
1425
+ if (unlikely (!get_subtables<TSubTable> ().sanitize (c, this, get_type ())))
1426
+ return_trace (false);
1427
+
1428
+ if (unlikely (get_type () == TSubTable::Extension && !c->get_edit_count ()))
1429
+ {
1430
+ hb_barrier ();
1431
+
1432
+ /* The spec says all subtables of an Extension lookup should
1433
+ * have the same type, which shall not be the Extension type
1434
+ * itself (but we already checked for that).
1435
+ * This is specially important if one has a reverse type!
1436
+ *
1437
+ * We only do this if sanitizer edit_count is zero. Otherwise,
1438
+ * some of the subtables might have become insane after they
1439
+ * were sanity-checked by the edits of subsequent subtables.
1440
+ * https://bugs.chromium.org/p/chromium/issues/detail?id=960331
1441
+ */
1442
+ unsigned int type = get_subtable<TSubTable> (0).u.extension.get_type ();
1443
+ for (unsigned int i = 1; i < subtables; i++)
1444
+ if (get_subtable<TSubTable> (i).u.extension.get_type () != type)
1445
+ return_trace (false);
1446
+ }
1447
+ return_trace (true);
1448
+ }
1449
+
1450
+ protected:
1451
+ HBUINT16 lookupType; /* Different enumerations for GSUB and GPOS */
1452
+ HBUINT16 lookupFlag; /* Lookup qualifiers */
1453
+ Array16Of<Offset16>
1454
+ subTable; /* Array of SubTables */
1455
+ /*HBUINT16 markFilteringSetX[HB_VAR_ARRAY];*//* Index (base 0) into GDEF mark glyph sets
1456
+ * structure. This field is only present if bit
1457
+ * UseMarkFilteringSet of lookup flags is set. */
1458
+ public:
1459
+ DEFINE_SIZE_ARRAY (6, subTable);
1460
+ };
1461
+
1462
+ template <typename Types>
1463
+ using LookupList = List16OfOffsetTo<Lookup, typename Types::HBUINT>;
1464
+
1465
+ template <typename TLookup, typename OffsetType>
1466
+ struct LookupOffsetList : List16OfOffsetTo<TLookup, OffsetType>
1467
+ {
1468
+ bool subset (hb_subset_context_t *c,
1469
+ hb_subset_layout_context_t *l) const
1470
+ {
1471
+ TRACE_SUBSET (this);
1472
+ auto *out = c->serializer->start_embed (this);
1473
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
1474
+
1475
+ + hb_enumerate (*this)
1476
+ | hb_filter (l->lookup_index_map, hb_first)
1477
+ | hb_map (hb_second)
1478
+ | hb_apply (subset_offset_array (c, *out, this))
1479
+ ;
1480
+ return_trace (true);
1481
+ }
1482
+
1483
+ bool sanitize (hb_sanitize_context_t *c) const
1484
+ {
1485
+ TRACE_SANITIZE (this);
1486
+ return_trace (List16OfOffset16To<TLookup>::sanitize (c, this));
1487
+ }
1488
+ };
1489
+
1490
+
1491
+ /*
1492
+ * Coverage Table
1493
+ */
1494
+
1495
+
1496
+ static bool ClassDef_remap_and_serialize (hb_serialize_context_t *c,
1497
+ const hb_set_t &klasses,
1498
+ bool use_class_zero,
1499
+ hb_sorted_vector_t<hb_codepoint_pair_t> &glyph_and_klass, /* IN/OUT */
1500
+ hb_map_t *klass_map /*IN/OUT*/)
1501
+ {
1502
+ if (!klass_map)
1503
+ return ClassDef_serialize (c, glyph_and_klass.iter ());
1504
+
1505
+ /* any glyph not assigned a class value falls into Class zero (0),
1506
+ * if any glyph assigned to class 0, remapping must start with 0->0*/
1507
+ if (!use_class_zero)
1508
+ klass_map->set (0, 0);
1509
+
1510
+ unsigned idx = klass_map->has (0) ? 1 : 0;
1511
+ for (const unsigned k: klasses)
1512
+ {
1513
+ if (klass_map->has (k)) continue;
1514
+ klass_map->set (k, idx);
1515
+ idx++;
1516
+ }
1517
+
1518
+
1519
+ for (unsigned i = 0; i < glyph_and_klass.length; i++)
1520
+ {
1521
+ hb_codepoint_t klass = glyph_and_klass[i].second;
1522
+ glyph_and_klass[i].second = klass_map->get (klass);
1523
+ }
1524
+
1525
+ c->propagate_error (glyph_and_klass, klasses);
1526
+ return ClassDef_serialize (c, glyph_and_klass.iter ());
1527
+ }
1528
+
1529
+ /*
1530
+ * Class Definition Table
1531
+ */
1532
+
1533
+ template <typename Types>
1534
+ struct ClassDefFormat1_3
1535
+ {
1536
+ friend struct ClassDef;
1537
+
1538
+ private:
1539
+ unsigned int get_class (hb_codepoint_t glyph_id) const
1540
+ {
1541
+ return classValue[(unsigned int) (glyph_id - startGlyph)];
1542
+ }
1543
+
1544
+ unsigned get_population () const
1545
+ {
1546
+ return classValue.len;
1547
+ }
1548
+
1549
+ template<typename Iterator,
1550
+ hb_requires (hb_is_sorted_source_of (Iterator, hb_codepoint_t))>
1551
+ bool serialize (hb_serialize_context_t *c,
1552
+ Iterator it)
1553
+ {
1554
+ TRACE_SERIALIZE (this);
1555
+ if (unlikely (!c->extend_min (this))) return_trace (false);
1556
+
1557
+ if (unlikely (!it))
1558
+ {
1559
+ classFormat = 1;
1560
+ startGlyph = 0;
1561
+ classValue.len = 0;
1562
+ return_trace (true);
1563
+ }
1564
+
1565
+ hb_codepoint_t glyph_min = (*it).first;
1566
+ hb_codepoint_t glyph_max = + it
1567
+ | hb_map (hb_first)
1568
+ | hb_reduce (hb_max, 0u);
1569
+ unsigned glyph_count = glyph_max - glyph_min + 1;
1570
+
1571
+ startGlyph = glyph_min;
1572
+ if (unlikely (!classValue.serialize (c, glyph_count))) return_trace (false);
1573
+ for (const hb_pair_t<hb_codepoint_t, uint32_t> gid_klass_pair : + it)
1574
+ {
1575
+ unsigned idx = gid_klass_pair.first - glyph_min;
1576
+ classValue[idx] = gid_klass_pair.second;
1577
+ }
1578
+ return_trace (true);
1579
+ }
1580
+
1581
+ bool subset (hb_subset_context_t *c,
1582
+ hb_map_t *klass_map = nullptr /*OUT*/,
1583
+ bool keep_empty_table = true,
1584
+ bool use_class_zero = true,
1585
+ const Coverage* glyph_filter = nullptr) const
1586
+ {
1587
+ TRACE_SUBSET (this);
1588
+ const hb_map_t &glyph_map = c->plan->glyph_map_gsub;
1589
+
1590
+ hb_sorted_vector_t<hb_codepoint_pair_t> glyph_and_klass;
1591
+ hb_set_t orig_klasses;
1592
+
1593
+ hb_codepoint_t start = startGlyph;
1594
+ hb_codepoint_t end = start + classValue.len;
1595
+
1596
+ for (const hb_codepoint_t gid : + hb_range (start, end))
1597
+ {
1598
+ hb_codepoint_t new_gid = glyph_map[gid];
1599
+ if (new_gid == HB_MAP_VALUE_INVALID) continue;
1600
+ if (glyph_filter && !glyph_filter->has(gid)) continue;
1601
+
1602
+ unsigned klass = classValue[gid - start];
1603
+ if (!klass) continue;
1604
+
1605
+ glyph_and_klass.push (hb_pair (new_gid, klass));
1606
+ orig_klasses.add (klass);
1607
+ }
1608
+
1609
+ if (use_class_zero)
1610
+ {
1611
+ unsigned glyph_count = glyph_filter
1612
+ ? hb_len (hb_iter (glyph_map.keys()) | hb_filter (glyph_filter))
1613
+ : glyph_map.get_population ();
1614
+ use_class_zero = glyph_count <= glyph_and_klass.length;
1615
+ }
1616
+ if (!ClassDef_remap_and_serialize (c->serializer,
1617
+ orig_klasses,
1618
+ use_class_zero,
1619
+ glyph_and_klass,
1620
+ klass_map))
1621
+ return_trace (false);
1622
+ return_trace (keep_empty_table || (bool) glyph_and_klass);
1623
+ }
1624
+
1625
+ bool sanitize (hb_sanitize_context_t *c) const
1626
+ {
1627
+ TRACE_SANITIZE (this);
1628
+ return_trace (c->check_struct (this) && classValue.sanitize (c));
1629
+ }
1630
+
1631
+ unsigned cost () const { return 1; }
1632
+
1633
+ template <typename set_t>
1634
+ bool collect_coverage (set_t *glyphs) const
1635
+ {
1636
+ unsigned int start = 0;
1637
+ unsigned int count = classValue.len;
1638
+ for (unsigned int i = 0; i < count; i++)
1639
+ {
1640
+ if (classValue[i])
1641
+ continue;
1642
+
1643
+ if (start != i)
1644
+ if (unlikely (!glyphs->add_range (startGlyph + start, startGlyph + i)))
1645
+ return false;
1646
+
1647
+ start = i + 1;
1648
+ }
1649
+ if (start != count)
1650
+ if (unlikely (!glyphs->add_range (startGlyph + start, startGlyph + count)))
1651
+ return false;
1652
+
1653
+ return true;
1654
+ }
1655
+
1656
+ template <typename set_t>
1657
+ bool collect_class (set_t *glyphs, unsigned klass) const
1658
+ {
1659
+ unsigned int count = classValue.len;
1660
+ for (unsigned int i = 0; i < count; i++)
1661
+ if (classValue[i] == klass) glyphs->add (startGlyph + i);
1662
+ return true;
1663
+ }
1664
+
1665
+ bool intersects (const hb_set_t *glyphs) const
1666
+ {
1667
+ hb_codepoint_t start = startGlyph;
1668
+ hb_codepoint_t end = startGlyph + classValue.len;
1669
+ for (hb_codepoint_t iter = startGlyph - 1;
1670
+ glyphs->next (&iter) && iter < end;)
1671
+ if (classValue[iter - start]) return true;
1672
+ return false;
1673
+ }
1674
+ bool intersects_class (const hb_set_t *glyphs, uint16_t klass) const
1675
+ {
1676
+ unsigned int count = classValue.len;
1677
+ if (klass == 0)
1678
+ {
1679
+ /* Match if there's any glyph that is not listed! */
1680
+ hb_codepoint_t g = HB_SET_VALUE_INVALID;
1681
+ if (!glyphs->next (&g)) return false;
1682
+ if (g < startGlyph) return true;
1683
+ g = startGlyph + count - 1;
1684
+ if (glyphs->next (&g)) return true;
1685
+ /* Fall through. */
1686
+ }
1687
+ /* TODO Speed up, using set overlap first? */
1688
+ /* TODO(iter) Rewrite as dagger. */
1689
+ const HBUINT16 *arr = classValue.arrayZ;
1690
+ for (unsigned int i = 0; i < count; i++)
1691
+ if (arr[i] == klass && glyphs->has (startGlyph + i))
1692
+ return true;
1693
+ return false;
1694
+ }
1695
+
1696
+ void intersected_class_glyphs (const hb_set_t *glyphs, unsigned klass, hb_set_t *intersect_glyphs) const
1697
+ {
1698
+ unsigned count = classValue.len;
1699
+ if (klass == 0)
1700
+ {
1701
+ unsigned start_glyph = startGlyph;
1702
+ for (uint32_t g = HB_SET_VALUE_INVALID;
1703
+ glyphs->next (&g) && g < start_glyph;)
1704
+ intersect_glyphs->add (g);
1705
+
1706
+ for (uint32_t g = startGlyph + count - 1;
1707
+ glyphs-> next (&g);)
1708
+ intersect_glyphs->add (g);
1709
+
1710
+ return;
1711
+ }
1712
+
1713
+ for (unsigned i = 0; i < count; i++)
1714
+ if (classValue[i] == klass && glyphs->has (startGlyph + i))
1715
+ intersect_glyphs->add (startGlyph + i);
1716
+
1717
+ #if 0
1718
+ /* The following implementation is faster asymptotically, but slower
1719
+ * in practice. */
1720
+ unsigned start_glyph = startGlyph;
1721
+ unsigned end_glyph = start_glyph + count;
1722
+ for (unsigned g = startGlyph - 1;
1723
+ glyphs->next (&g) && g < end_glyph;)
1724
+ if (classValue.arrayZ[g - start_glyph] == klass)
1725
+ intersect_glyphs->add (g);
1726
+ #endif
1727
+ }
1728
+
1729
+ void intersected_classes (const hb_set_t *glyphs, hb_set_t *intersect_classes) const
1730
+ {
1731
+ if (glyphs->is_empty ()) return;
1732
+ hb_codepoint_t end_glyph = startGlyph + classValue.len - 1;
1733
+ if (glyphs->get_min () < startGlyph ||
1734
+ glyphs->get_max () > end_glyph)
1735
+ intersect_classes->add (0);
1736
+
1737
+ for (const auto& _ : + hb_enumerate (classValue))
1738
+ {
1739
+ hb_codepoint_t g = startGlyph + _.first;
1740
+ if (glyphs->has (g))
1741
+ intersect_classes->add (_.second);
1742
+ }
1743
+ }
1744
+
1745
+ protected:
1746
+ HBUINT16 classFormat; /* Format identifier--format = 1 */
1747
+ typename Types::HBGlyphID
1748
+ startGlyph; /* First GlyphID of the classValueArray */
1749
+ typename Types::template ArrayOf<HBUINT16>
1750
+ classValue; /* Array of Class Values--one per GlyphID */
1751
+ public:
1752
+ DEFINE_SIZE_ARRAY (2 + 2 * Types::size, classValue);
1753
+ };
1754
+
1755
+ template <typename Types>
1756
+ struct ClassDefFormat2_4
1757
+ {
1758
+ friend struct ClassDef;
1759
+
1760
+ private:
1761
+ unsigned int get_class (hb_codepoint_t glyph_id) const
1762
+ {
1763
+ return rangeRecord.bsearch (glyph_id).value;
1764
+ }
1765
+
1766
+ unsigned get_population () const
1767
+ {
1768
+ typename Types::large_int ret = 0;
1769
+ for (const auto &r : rangeRecord)
1770
+ ret += r.get_population ();
1771
+ return ret > UINT_MAX ? UINT_MAX : (unsigned) ret;
1772
+ }
1773
+
1774
+ template<typename Iterator,
1775
+ hb_requires (hb_is_sorted_source_of (Iterator, hb_codepoint_t))>
1776
+ bool serialize (hb_serialize_context_t *c,
1777
+ Iterator it)
1778
+ {
1779
+ TRACE_SERIALIZE (this);
1780
+ if (unlikely (!c->extend_min (this))) return_trace (false);
1781
+
1782
+ if (unlikely (!it))
1783
+ {
1784
+ classFormat = 2;
1785
+ rangeRecord.len = 0;
1786
+ return_trace (true);
1787
+ }
1788
+
1789
+ unsigned unsorted = false;
1790
+ unsigned num_ranges = 1;
1791
+ hb_codepoint_t prev_gid = (*it).first;
1792
+ unsigned prev_klass = (*it).second;
1793
+
1794
+ RangeRecord<Types> range_rec;
1795
+ range_rec.first = prev_gid;
1796
+ range_rec.last = prev_gid;
1797
+ range_rec.value = prev_klass;
1798
+
1799
+ auto *record = c->copy (range_rec);
1800
+ if (unlikely (!record)) return_trace (false);
1801
+
1802
+ for (const auto gid_klass_pair : + (++it))
1803
+ {
1804
+ hb_codepoint_t cur_gid = gid_klass_pair.first;
1805
+ unsigned cur_klass = gid_klass_pair.second;
1806
+
1807
+ if (cur_gid != prev_gid + 1 ||
1808
+ cur_klass != prev_klass)
1809
+ {
1810
+
1811
+ if (unlikely (cur_gid < prev_gid))
1812
+ unsorted = true;
1813
+
1814
+ if (unlikely (!record)) break;
1815
+ record->last = prev_gid;
1816
+ num_ranges++;
1817
+
1818
+ range_rec.first = cur_gid;
1819
+ range_rec.last = cur_gid;
1820
+ range_rec.value = cur_klass;
1821
+
1822
+ record = c->copy (range_rec);
1823
+ }
1824
+
1825
+ prev_klass = cur_klass;
1826
+ prev_gid = cur_gid;
1827
+ }
1828
+
1829
+ if (unlikely (c->in_error ())) return_trace (false);
1830
+
1831
+ if (likely (record)) record->last = prev_gid;
1832
+ rangeRecord.len = num_ranges;
1833
+
1834
+ if (unlikely (unsorted))
1835
+ rangeRecord.as_array ().qsort (RangeRecord<Types>::cmp_range);
1836
+
1837
+ return_trace (true);
1838
+ }
1839
+
1840
+ bool subset (hb_subset_context_t *c,
1841
+ hb_map_t *klass_map = nullptr /*OUT*/,
1842
+ bool keep_empty_table = true,
1843
+ bool use_class_zero = true,
1844
+ const Coverage* glyph_filter = nullptr) const
1845
+ {
1846
+ TRACE_SUBSET (this);
1847
+ const hb_map_t &glyph_map = c->plan->glyph_map_gsub;
1848
+ const hb_set_t &glyph_set = *c->plan->glyphset_gsub ();
1849
+
1850
+ hb_sorted_vector_t<hb_codepoint_pair_t> glyph_and_klass;
1851
+ hb_set_t orig_klasses;
1852
+
1853
+ if (glyph_set.get_population () * hb_bit_storage ((unsigned) rangeRecord.len) / 2
1854
+ < get_population ())
1855
+ {
1856
+ for (hb_codepoint_t g : glyph_set)
1857
+ {
1858
+ unsigned klass = get_class (g);
1859
+ if (!klass) continue;
1860
+ hb_codepoint_t new_gid = glyph_map[g];
1861
+ if (new_gid == HB_MAP_VALUE_INVALID) continue;
1862
+ if (glyph_filter && !glyph_filter->has (g)) continue;
1863
+ glyph_and_klass.push (hb_pair (new_gid, klass));
1864
+ orig_klasses.add (klass);
1865
+ }
1866
+ }
1867
+ else
1868
+ {
1869
+ unsigned num_source_glyphs = c->plan->source->get_num_glyphs ();
1870
+ for (auto &range : rangeRecord)
1871
+ {
1872
+ unsigned klass = range.value;
1873
+ if (!klass) continue;
1874
+ hb_codepoint_t start = range.first;
1875
+ hb_codepoint_t end = hb_min (range.last + 1, num_source_glyphs);
1876
+ for (hb_codepoint_t g = start; g < end; g++)
1877
+ {
1878
+ hb_codepoint_t new_gid = glyph_map[g];
1879
+ if (new_gid == HB_MAP_VALUE_INVALID) continue;
1880
+ if (glyph_filter && !glyph_filter->has (g)) continue;
1881
+
1882
+ glyph_and_klass.push (hb_pair (new_gid, klass));
1883
+ orig_klasses.add (klass);
1884
+ }
1885
+ }
1886
+ }
1887
+
1888
+ const hb_set_t& glyphset = *c->plan->glyphset_gsub ();
1889
+ unsigned glyph_count = glyph_filter
1890
+ ? hb_len (hb_iter (glyphset) | hb_filter (glyph_filter))
1891
+ : glyph_map.get_population ();
1892
+ use_class_zero = use_class_zero && glyph_count <= glyph_and_klass.length;
1893
+ if (!ClassDef_remap_and_serialize (c->serializer,
1894
+ orig_klasses,
1895
+ use_class_zero,
1896
+ glyph_and_klass,
1897
+ klass_map))
1898
+ return_trace (false);
1899
+ return_trace (keep_empty_table || (bool) glyph_and_klass);
1900
+ }
1901
+
1902
+ bool sanitize (hb_sanitize_context_t *c) const
1903
+ {
1904
+ TRACE_SANITIZE (this);
1905
+ return_trace (rangeRecord.sanitize (c));
1906
+ }
1907
+
1908
+ unsigned cost () const { return hb_bit_storage ((unsigned) rangeRecord.len); /* bsearch cost */ }
1909
+
1910
+ template <typename set_t>
1911
+ bool collect_coverage (set_t *glyphs) const
1912
+ {
1913
+ for (auto &range : rangeRecord)
1914
+ if (range.value)
1915
+ if (unlikely (!range.collect_coverage (glyphs)))
1916
+ return false;
1917
+ return true;
1918
+ }
1919
+
1920
+ template <typename set_t>
1921
+ bool collect_class (set_t *glyphs, unsigned int klass) const
1922
+ {
1923
+ for (auto &range : rangeRecord)
1924
+ {
1925
+ if (range.value == klass)
1926
+ if (unlikely (!range.collect_coverage (glyphs)))
1927
+ return false;
1928
+ }
1929
+ return true;
1930
+ }
1931
+
1932
+ bool intersects (const hb_set_t *glyphs) const
1933
+ {
1934
+ if (rangeRecord.len > glyphs->get_population () * hb_bit_storage ((unsigned) rangeRecord.len) / 2)
1935
+ {
1936
+ for (auto g : *glyphs)
1937
+ if (get_class (g))
1938
+ return true;
1939
+ return false;
1940
+ }
1941
+
1942
+ return hb_any (+ hb_iter (rangeRecord)
1943
+ | hb_map ([glyphs] (const RangeRecord<Types> &range) { return range.intersects (*glyphs) && range.value; }));
1944
+ }
1945
+ bool intersects_class (const hb_set_t *glyphs, uint16_t klass) const
1946
+ {
1947
+ if (klass == 0)
1948
+ {
1949
+ /* Match if there's any glyph that is not listed! */
1950
+ hb_codepoint_t g = HB_SET_VALUE_INVALID;
1951
+ hb_codepoint_t last = HB_SET_VALUE_INVALID;
1952
+ auto it = hb_iter (rangeRecord);
1953
+ for (auto &range : it)
1954
+ {
1955
+ if (it->first == last + 1)
1956
+ {
1957
+ it++;
1958
+ continue;
1959
+ }
1960
+
1961
+ if (!glyphs->next (&g))
1962
+ break;
1963
+ if (g < range.first)
1964
+ return true;
1965
+ g = range.last;
1966
+ last = g;
1967
+ }
1968
+ if (g != HB_SET_VALUE_INVALID && glyphs->next (&g))
1969
+ return true;
1970
+ /* Fall through. */
1971
+ }
1972
+ for (const auto &range : rangeRecord)
1973
+ if (range.value == klass && range.intersects (*glyphs))
1974
+ return true;
1975
+ return false;
1976
+ }
1977
+
1978
+ void intersected_class_glyphs (const hb_set_t *glyphs, unsigned klass, hb_set_t *intersect_glyphs) const
1979
+ {
1980
+ if (klass == 0)
1981
+ {
1982
+ hb_codepoint_t g = HB_SET_VALUE_INVALID;
1983
+ for (auto &range : rangeRecord)
1984
+ {
1985
+ if (!glyphs->next (&g))
1986
+ goto done;
1987
+ while (g < range.first)
1988
+ {
1989
+ intersect_glyphs->add (g);
1990
+ if (!glyphs->next (&g))
1991
+ goto done;
1992
+ }
1993
+ g = range.last;
1994
+ }
1995
+ while (glyphs->next (&g))
1996
+ intersect_glyphs->add (g);
1997
+ done:
1998
+
1999
+ return;
2000
+ }
2001
+
2002
+ unsigned count = rangeRecord.len;
2003
+ if (count > glyphs->get_population () * hb_bit_storage (count) * 8)
2004
+ {
2005
+ for (auto g : *glyphs)
2006
+ {
2007
+ unsigned i;
2008
+ if (rangeRecord.as_array ().bfind (g, &i) &&
2009
+ rangeRecord.arrayZ[i].value == klass)
2010
+ intersect_glyphs->add (g);
2011
+ }
2012
+ return;
2013
+ }
2014
+
2015
+ for (auto &range : rangeRecord)
2016
+ {
2017
+ if (range.value != klass) continue;
2018
+
2019
+ unsigned end = range.last + 1;
2020
+ for (hb_codepoint_t g = range.first - 1;
2021
+ glyphs->next (&g) && g < end;)
2022
+ intersect_glyphs->add (g);
2023
+ }
2024
+ }
2025
+
2026
+ void intersected_classes (const hb_set_t *glyphs, hb_set_t *intersect_classes) const
2027
+ {
2028
+ if (glyphs->is_empty ()) return;
2029
+
2030
+ hb_codepoint_t g = HB_SET_VALUE_INVALID;
2031
+ for (auto &range : rangeRecord)
2032
+ {
2033
+ if (!glyphs->next (&g))
2034
+ break;
2035
+ if (g < range.first)
2036
+ {
2037
+ intersect_classes->add (0);
2038
+ break;
2039
+ }
2040
+ g = range.last;
2041
+ }
2042
+ if (g != HB_SET_VALUE_INVALID && glyphs->next (&g))
2043
+ intersect_classes->add (0);
2044
+
2045
+ for (const auto& range : rangeRecord)
2046
+ if (range.intersects (*glyphs))
2047
+ intersect_classes->add (range.value);
2048
+ }
2049
+
2050
+ protected:
2051
+ HBUINT16 classFormat; /* Format identifier--format = 2 */
2052
+ typename Types::template SortedArrayOf<RangeRecord<Types>>
2053
+ rangeRecord; /* Array of glyph ranges--ordered by
2054
+ * Start GlyphID */
2055
+ public:
2056
+ DEFINE_SIZE_ARRAY (2 + Types::size, rangeRecord);
2057
+ };
2058
+
2059
+ struct ClassDef
2060
+ {
2061
+ /* Has interface. */
2062
+ unsigned operator [] (hb_codepoint_t k) const { return get (k); }
2063
+ bool has (hb_codepoint_t k) const { return (*this)[k]; }
2064
+ /* Projection. */
2065
+ hb_codepoint_t operator () (hb_codepoint_t k) const { return get (k); }
2066
+
2067
+ unsigned int get (hb_codepoint_t k) const { return get_class (k); }
2068
+ unsigned int get_class (hb_codepoint_t glyph_id) const
2069
+ {
2070
+ switch (u.format) {
2071
+ case 1: return u.format1.get_class (glyph_id);
2072
+ case 2: return u.format2.get_class (glyph_id);
2073
+ #ifndef HB_NO_BEYOND_64K
2074
+ case 3: return u.format3.get_class (glyph_id);
2075
+ case 4: return u.format4.get_class (glyph_id);
2076
+ #endif
2077
+ default:return 0;
2078
+ }
2079
+ }
2080
+
2081
+ unsigned get_population () const
2082
+ {
2083
+ switch (u.format) {
2084
+ case 1: return u.format1.get_population ();
2085
+ case 2: return u.format2.get_population ();
2086
+ #ifndef HB_NO_BEYOND_64K
2087
+ case 3: return u.format3.get_population ();
2088
+ case 4: return u.format4.get_population ();
2089
+ #endif
2090
+ default:return NOT_COVERED;
2091
+ }
2092
+ }
2093
+
2094
+ template<typename Iterator,
2095
+ hb_requires (hb_is_sorted_source_of (Iterator, hb_codepoint_t))>
2096
+ bool serialize (hb_serialize_context_t *c, Iterator it_with_class_zero)
2097
+ {
2098
+ TRACE_SERIALIZE (this);
2099
+ if (unlikely (!c->extend_min (this))) return_trace (false);
2100
+
2101
+ auto it = + it_with_class_zero | hb_filter (hb_second);
2102
+
2103
+ unsigned format = 2;
2104
+ hb_codepoint_t glyph_max = 0;
2105
+ if (likely (it))
2106
+ {
2107
+ hb_codepoint_t glyph_min = (*it).first;
2108
+ glyph_max = glyph_min;
2109
+
2110
+ unsigned num_glyphs = 0;
2111
+ unsigned num_ranges = 1;
2112
+ hb_codepoint_t prev_gid = glyph_min;
2113
+ unsigned prev_klass = (*it).second;
2114
+
2115
+ for (const auto gid_klass_pair : it)
2116
+ {
2117
+ hb_codepoint_t cur_gid = gid_klass_pair.first;
2118
+ unsigned cur_klass = gid_klass_pair.second;
2119
+ num_glyphs++;
2120
+ if (cur_gid == glyph_min) continue;
2121
+ if (cur_gid > glyph_max) glyph_max = cur_gid;
2122
+ if (cur_gid != prev_gid + 1 ||
2123
+ cur_klass != prev_klass)
2124
+ num_ranges++;
2125
+
2126
+ prev_gid = cur_gid;
2127
+ prev_klass = cur_klass;
2128
+ }
2129
+
2130
+ if (num_glyphs && 1 + (glyph_max - glyph_min + 1) <= num_ranges * 3)
2131
+ format = 1;
2132
+ }
2133
+
2134
+ #ifndef HB_NO_BEYOND_64K
2135
+ if (glyph_max > 0xFFFFu)
2136
+ u.format += 2;
2137
+ if (unlikely (glyph_max > 0xFFFFFFu))
2138
+ #else
2139
+ if (unlikely (glyph_max > 0xFFFFu))
2140
+ #endif
2141
+ {
2142
+ c->check_success (false, HB_SERIALIZE_ERROR_INT_OVERFLOW);
2143
+ return_trace (false);
2144
+ }
2145
+
2146
+ u.format = format;
2147
+
2148
+ switch (u.format)
2149
+ {
2150
+ case 1: return_trace (u.format1.serialize (c, it));
2151
+ case 2: return_trace (u.format2.serialize (c, it));
2152
+ #ifndef HB_NO_BEYOND_64K
2153
+ case 3: return_trace (u.format3.serialize (c, it));
2154
+ case 4: return_trace (u.format4.serialize (c, it));
2155
+ #endif
2156
+ default:return_trace (false);
2157
+ }
2158
+ }
2159
+
2160
+ bool subset (hb_subset_context_t *c,
2161
+ hb_map_t *klass_map = nullptr /*OUT*/,
2162
+ bool keep_empty_table = true,
2163
+ bool use_class_zero = true,
2164
+ const Coverage* glyph_filter = nullptr) const
2165
+ {
2166
+ TRACE_SUBSET (this);
2167
+ switch (u.format) {
2168
+ case 1: return_trace (u.format1.subset (c, klass_map, keep_empty_table, use_class_zero, glyph_filter));
2169
+ case 2: return_trace (u.format2.subset (c, klass_map, keep_empty_table, use_class_zero, glyph_filter));
2170
+ #ifndef HB_NO_BEYOND_64K
2171
+ case 3: return_trace (u.format3.subset (c, klass_map, keep_empty_table, use_class_zero, glyph_filter));
2172
+ case 4: return_trace (u.format4.subset (c, klass_map, keep_empty_table, use_class_zero, glyph_filter));
2173
+ #endif
2174
+ default:return_trace (false);
2175
+ }
2176
+ }
2177
+
2178
+ bool sanitize (hb_sanitize_context_t *c) const
2179
+ {
2180
+ TRACE_SANITIZE (this);
2181
+ if (!u.format.sanitize (c)) return_trace (false);
2182
+ hb_barrier ();
2183
+ switch (u.format) {
2184
+ case 1: return_trace (u.format1.sanitize (c));
2185
+ case 2: return_trace (u.format2.sanitize (c));
2186
+ #ifndef HB_NO_BEYOND_64K
2187
+ case 3: return_trace (u.format3.sanitize (c));
2188
+ case 4: return_trace (u.format4.sanitize (c));
2189
+ #endif
2190
+ default:return_trace (true);
2191
+ }
2192
+ }
2193
+
2194
+ unsigned cost () const
2195
+ {
2196
+ switch (u.format) {
2197
+ case 1: return u.format1.cost ();
2198
+ case 2: return u.format2.cost ();
2199
+ #ifndef HB_NO_BEYOND_64K
2200
+ case 3: return u.format3.cost ();
2201
+ case 4: return u.format4.cost ();
2202
+ #endif
2203
+ default:return 0u;
2204
+ }
2205
+ }
2206
+
2207
+ /* Might return false if array looks unsorted.
2208
+ * Used for faster rejection of corrupt data. */
2209
+ template <typename set_t>
2210
+ bool collect_coverage (set_t *glyphs) const
2211
+ {
2212
+ switch (u.format) {
2213
+ case 1: return u.format1.collect_coverage (glyphs);
2214
+ case 2: return u.format2.collect_coverage (glyphs);
2215
+ #ifndef HB_NO_BEYOND_64K
2216
+ case 3: return u.format3.collect_coverage (glyphs);
2217
+ case 4: return u.format4.collect_coverage (glyphs);
2218
+ #endif
2219
+ default:return false;
2220
+ }
2221
+ }
2222
+
2223
+ /* Might return false if array looks unsorted.
2224
+ * Used for faster rejection of corrupt data. */
2225
+ template <typename set_t>
2226
+ bool collect_class (set_t *glyphs, unsigned int klass) const
2227
+ {
2228
+ switch (u.format) {
2229
+ case 1: return u.format1.collect_class (glyphs, klass);
2230
+ case 2: return u.format2.collect_class (glyphs, klass);
2231
+ #ifndef HB_NO_BEYOND_64K
2232
+ case 3: return u.format3.collect_class (glyphs, klass);
2233
+ case 4: return u.format4.collect_class (glyphs, klass);
2234
+ #endif
2235
+ default:return false;
2236
+ }
2237
+ }
2238
+
2239
+ bool intersects (const hb_set_t *glyphs) const
2240
+ {
2241
+ switch (u.format) {
2242
+ case 1: return u.format1.intersects (glyphs);
2243
+ case 2: return u.format2.intersects (glyphs);
2244
+ #ifndef HB_NO_BEYOND_64K
2245
+ case 3: return u.format3.intersects (glyphs);
2246
+ case 4: return u.format4.intersects (glyphs);
2247
+ #endif
2248
+ default:return false;
2249
+ }
2250
+ }
2251
+ bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const
2252
+ {
2253
+ switch (u.format) {
2254
+ case 1: return u.format1.intersects_class (glyphs, klass);
2255
+ case 2: return u.format2.intersects_class (glyphs, klass);
2256
+ #ifndef HB_NO_BEYOND_64K
2257
+ case 3: return u.format3.intersects_class (glyphs, klass);
2258
+ case 4: return u.format4.intersects_class (glyphs, klass);
2259
+ #endif
2260
+ default:return false;
2261
+ }
2262
+ }
2263
+
2264
+ void intersected_class_glyphs (const hb_set_t *glyphs, unsigned klass, hb_set_t *intersect_glyphs) const
2265
+ {
2266
+ switch (u.format) {
2267
+ case 1: return u.format1.intersected_class_glyphs (glyphs, klass, intersect_glyphs);
2268
+ case 2: return u.format2.intersected_class_glyphs (glyphs, klass, intersect_glyphs);
2269
+ #ifndef HB_NO_BEYOND_64K
2270
+ case 3: return u.format3.intersected_class_glyphs (glyphs, klass, intersect_glyphs);
2271
+ case 4: return u.format4.intersected_class_glyphs (glyphs, klass, intersect_glyphs);
2272
+ #endif
2273
+ default:return;
2274
+ }
2275
+ }
2276
+
2277
+ void intersected_classes (const hb_set_t *glyphs, hb_set_t *intersect_classes) const
2278
+ {
2279
+ switch (u.format) {
2280
+ case 1: return u.format1.intersected_classes (glyphs, intersect_classes);
2281
+ case 2: return u.format2.intersected_classes (glyphs, intersect_classes);
2282
+ #ifndef HB_NO_BEYOND_64K
2283
+ case 3: return u.format3.intersected_classes (glyphs, intersect_classes);
2284
+ case 4: return u.format4.intersected_classes (glyphs, intersect_classes);
2285
+ #endif
2286
+ default:return;
2287
+ }
2288
+ }
2289
+
2290
+
2291
+ protected:
2292
+ union {
2293
+ HBUINT16 format; /* Format identifier */
2294
+ ClassDefFormat1_3<SmallTypes> format1;
2295
+ ClassDefFormat2_4<SmallTypes> format2;
2296
+ #ifndef HB_NO_BEYOND_64K
2297
+ ClassDefFormat1_3<MediumTypes>format3;
2298
+ ClassDefFormat2_4<MediumTypes>format4;
2299
+ #endif
2300
+ } u;
2301
+ public:
2302
+ DEFINE_SIZE_UNION (2, format);
2303
+ };
2304
+
2305
+ template<typename Iterator>
2306
+ static inline bool ClassDef_serialize (hb_serialize_context_t *c,
2307
+ Iterator it)
2308
+ { return (c->start_embed<ClassDef> ()->serialize (c, it)); }
2309
+
2310
+
2311
+ /*
2312
+ * Item Variation Store
2313
+ */
2314
+
2315
+ /* ported from fonttools (class _Encoding) */
2316
+ struct delta_row_encoding_t
2317
+ {
2318
+ /* each byte represents a region, value is one of 0/1/2/4, which means bytes
2319
+ * needed for this region */
2320
+ hb_vector_t<uint8_t> chars;
2321
+ unsigned width = 0;
2322
+ hb_vector_t<uint8_t> columns;
2323
+ unsigned overhead = 0;
2324
+ hb_vector_t<const hb_vector_t<int>*> items;
2325
+
2326
+ delta_row_encoding_t () = default;
2327
+ delta_row_encoding_t (hb_vector_t<uint8_t>&& chars_,
2328
+ const hb_vector_t<int>* row = nullptr) :
2329
+ delta_row_encoding_t ()
2330
+
2331
+ {
2332
+ chars = std::move (chars_);
2333
+ width = get_width ();
2334
+ columns = get_columns ();
2335
+ overhead = get_chars_overhead (columns);
2336
+ if (row) items.push (row);
2337
+ }
2338
+
2339
+ bool is_empty () const
2340
+ { return !items; }
2341
+
2342
+ static hb_vector_t<uint8_t> get_row_chars (const hb_vector_t<int>& row)
2343
+ {
2344
+ hb_vector_t<uint8_t> ret;
2345
+ if (!ret.alloc (row.length)) return ret;
2346
+
2347
+ bool long_words = false;
2348
+
2349
+ /* 0/1/2 byte encoding */
2350
+ for (int i = row.length - 1; i >= 0; i--)
2351
+ {
2352
+ int v = row.arrayZ[i];
2353
+ if (v == 0)
2354
+ ret.push (0);
2355
+ else if (v > 32767 || v < -32768)
2356
+ {
2357
+ long_words = true;
2358
+ break;
2359
+ }
2360
+ else if (v > 127 || v < -128)
2361
+ ret.push (2);
2362
+ else
2363
+ ret.push (1);
2364
+ }
2365
+
2366
+ if (!long_words)
2367
+ return ret;
2368
+
2369
+ /* redo, 0/2/4 bytes encoding */
2370
+ ret.reset ();
2371
+ for (int i = row.length - 1; i >= 0; i--)
2372
+ {
2373
+ int v = row.arrayZ[i];
2374
+ if (v == 0)
2375
+ ret.push (0);
2376
+ else if (v > 32767 || v < -32768)
2377
+ ret.push (4);
2378
+ else
2379
+ ret.push (2);
2380
+ }
2381
+ return ret;
2382
+ }
2383
+
2384
+ inline unsigned get_width ()
2385
+ {
2386
+ unsigned ret = + hb_iter (chars)
2387
+ | hb_reduce (hb_add, 0u)
2388
+ ;
2389
+ return ret;
2390
+ }
2391
+
2392
+ hb_vector_t<uint8_t> get_columns ()
2393
+ {
2394
+ hb_vector_t<uint8_t> cols;
2395
+ cols.alloc (chars.length);
2396
+ for (auto v : chars)
2397
+ {
2398
+ uint8_t flag = v ? 1 : 0;
2399
+ cols.push (flag);
2400
+ }
2401
+ return cols;
2402
+ }
2403
+
2404
+ static inline unsigned get_chars_overhead (const hb_vector_t<uint8_t>& cols)
2405
+ {
2406
+ unsigned c = 4 + 6; // 4 bytes for LOffset, 6 bytes for VarData header
2407
+ unsigned cols_bit_count = 0;
2408
+ for (auto v : cols)
2409
+ if (v) cols_bit_count++;
2410
+ return c + cols_bit_count * 2;
2411
+ }
2412
+
2413
+ unsigned get_gain () const
2414
+ {
2415
+ int count = items.length;
2416
+ return hb_max (0, (int) overhead - count);
2417
+ }
2418
+
2419
+ int gain_from_merging (const delta_row_encoding_t& other_encoding) const
2420
+ {
2421
+ int combined_width = 0;
2422
+ for (unsigned i = 0; i < chars.length; i++)
2423
+ combined_width += hb_max (chars.arrayZ[i], other_encoding.chars.arrayZ[i]);
2424
+
2425
+ hb_vector_t<uint8_t> combined_columns;
2426
+ combined_columns.alloc (columns.length);
2427
+ for (unsigned i = 0; i < columns.length; i++)
2428
+ combined_columns.push (columns.arrayZ[i] | other_encoding.columns.arrayZ[i]);
2429
+
2430
+ int combined_overhead = get_chars_overhead (combined_columns);
2431
+ int combined_gain = (int) overhead + (int) other_encoding.overhead - combined_overhead
2432
+ - (combined_width - (int) width) * items.length
2433
+ - (combined_width - (int) other_encoding.width) * other_encoding.items.length;
2434
+
2435
+ return combined_gain;
2436
+ }
2437
+
2438
+ static int cmp (const void *pa, const void *pb)
2439
+ {
2440
+ const delta_row_encoding_t *a = (const delta_row_encoding_t *)pa;
2441
+ const delta_row_encoding_t *b = (const delta_row_encoding_t *)pb;
2442
+
2443
+ int gain_a = a->get_gain ();
2444
+ int gain_b = b->get_gain ();
2445
+
2446
+ if (gain_a != gain_b)
2447
+ return gain_a - gain_b;
2448
+
2449
+ return (b->chars).as_array ().cmp ((a->chars).as_array ());
2450
+ }
2451
+
2452
+ static int cmp_width (const void *pa, const void *pb)
2453
+ {
2454
+ const delta_row_encoding_t *a = (const delta_row_encoding_t *)pa;
2455
+ const delta_row_encoding_t *b = (const delta_row_encoding_t *)pb;
2456
+
2457
+ if (a->width != b->width)
2458
+ return (int) a->width - (int) b->width;
2459
+
2460
+ return (b->chars).as_array ().cmp ((a->chars).as_array ());
2461
+ }
2462
+
2463
+ bool add_row (const hb_vector_t<int>* row)
2464
+ { return items.push (row); }
2465
+ };
2466
+
2467
+ struct VarRegionAxis
2468
+ {
2469
+ float evaluate (int coord) const
2470
+ {
2471
+ int peak = peakCoord.to_int ();
2472
+ if (peak == 0 || coord == peak)
2473
+ return 1.f;
2474
+ else if (coord == 0) // Faster
2475
+ return 0.f;
2476
+
2477
+ int start = startCoord.to_int (), end = endCoord.to_int ();
2478
+
2479
+ /* TODO Move these to sanitize(). */
2480
+ if (unlikely (start > peak || peak > end))
2481
+ return 1.f;
2482
+ if (unlikely (start < 0 && end > 0 && peak != 0))
2483
+ return 1.f;
2484
+
2485
+ if (coord <= start || end <= coord)
2486
+ return 0.f;
2487
+
2488
+ /* Interpolate */
2489
+ if (coord < peak)
2490
+ return float (coord - start) / (peak - start);
2491
+ else
2492
+ return float (end - coord) / (end - peak);
2493
+ }
2494
+
2495
+ bool sanitize (hb_sanitize_context_t *c) const
2496
+ {
2497
+ TRACE_SANITIZE (this);
2498
+ return_trace (c->check_struct (this));
2499
+ }
2500
+
2501
+ bool serialize (hb_serialize_context_t *c) const
2502
+ {
2503
+ TRACE_SERIALIZE (this);
2504
+ return_trace (c->embed (this));
2505
+ }
2506
+
2507
+ public:
2508
+ F2DOT14 startCoord;
2509
+ F2DOT14 peakCoord;
2510
+ F2DOT14 endCoord;
2511
+ public:
2512
+ DEFINE_SIZE_STATIC (6);
2513
+ };
2514
+ struct SparseVarRegionAxis
2515
+ {
2516
+ float evaluate (const int *coords, unsigned int coord_len) const
2517
+ {
2518
+ unsigned i = axisIndex;
2519
+ int coord = i < coord_len ? coords[i] : 0;
2520
+ return axis.evaluate (coord);
2521
+ }
2522
+
2523
+ bool sanitize (hb_sanitize_context_t *c) const
2524
+ {
2525
+ TRACE_SANITIZE (this);
2526
+ return_trace (c->check_struct (this));
2527
+ }
2528
+
2529
+ bool serialize (hb_serialize_context_t *c) const
2530
+ {
2531
+ TRACE_SERIALIZE (this);
2532
+ return_trace (c->embed (this));
2533
+ }
2534
+
2535
+ public:
2536
+ HBUINT16 axisIndex;
2537
+ VarRegionAxis axis;
2538
+ public:
2539
+ DEFINE_SIZE_STATIC (8);
2540
+ };
2541
+
2542
+ #define REGION_CACHE_ITEM_CACHE_INVALID 2.f
2543
+
2544
+ struct VarRegionList
2545
+ {
2546
+ using cache_t = float;
2547
+
2548
+ float evaluate (unsigned int region_index,
2549
+ const int *coords, unsigned int coord_len,
2550
+ cache_t *cache = nullptr) const
2551
+ {
2552
+ if (unlikely (region_index >= regionCount))
2553
+ return 0.;
2554
+
2555
+ float *cached_value = nullptr;
2556
+ if (cache)
2557
+ {
2558
+ cached_value = &(cache[region_index]);
2559
+ if (likely (*cached_value != REGION_CACHE_ITEM_CACHE_INVALID))
2560
+ return *cached_value;
2561
+ }
2562
+
2563
+ const VarRegionAxis *axes = axesZ.arrayZ + (region_index * axisCount);
2564
+
2565
+ float v = 1.;
2566
+ unsigned int count = axisCount;
2567
+ for (unsigned int i = 0; i < count; i++)
2568
+ {
2569
+ int coord = i < coord_len ? coords[i] : 0;
2570
+ float factor = axes[i].evaluate (coord);
2571
+ if (factor == 0.f)
2572
+ {
2573
+ if (cache)
2574
+ *cached_value = 0.;
2575
+ return 0.;
2576
+ }
2577
+ v *= factor;
2578
+ }
2579
+
2580
+ if (cache)
2581
+ *cached_value = v;
2582
+ return v;
2583
+ }
2584
+
2585
+ bool sanitize (hb_sanitize_context_t *c) const
2586
+ {
2587
+ TRACE_SANITIZE (this);
2588
+ return_trace (c->check_struct (this) &&
2589
+ hb_barrier () &&
2590
+ axesZ.sanitize (c, axisCount * regionCount));
2591
+ }
2592
+
2593
+ bool serialize (hb_serialize_context_t *c,
2594
+ const hb_vector_t<hb_tag_t>& axis_tags,
2595
+ const hb_vector_t<const hb_hashmap_t<hb_tag_t, Triple>*>& regions)
2596
+ {
2597
+ TRACE_SERIALIZE (this);
2598
+ unsigned axis_count = axis_tags.length;
2599
+ unsigned region_count = regions.length;
2600
+ if (!axis_count || !region_count) return_trace (false);
2601
+ if (unlikely (hb_unsigned_mul_overflows (axis_count * region_count,
2602
+ VarRegionAxis::static_size))) return_trace (false);
2603
+ if (unlikely (!c->extend_min (this))) return_trace (false);
2604
+ axisCount = axis_count;
2605
+ regionCount = region_count;
2606
+
2607
+ for (unsigned r = 0; r < region_count; r++)
2608
+ {
2609
+ const auto& region = regions[r];
2610
+ for (unsigned i = 0; i < axis_count; i++)
2611
+ {
2612
+ hb_tag_t tag = axis_tags.arrayZ[i];
2613
+ VarRegionAxis var_region_rec;
2614
+ Triple *coords;
2615
+ if (region->has (tag, &coords))
2616
+ {
2617
+ var_region_rec.startCoord.set_float (coords->minimum);
2618
+ var_region_rec.peakCoord.set_float (coords->middle);
2619
+ var_region_rec.endCoord.set_float (coords->maximum);
2620
+ }
2621
+ else
2622
+ {
2623
+ var_region_rec.startCoord.set_int (0);
2624
+ var_region_rec.peakCoord.set_int (0);
2625
+ var_region_rec.endCoord.set_int (0);
2626
+ }
2627
+ if (!var_region_rec.serialize (c))
2628
+ return_trace (false);
2629
+ }
2630
+ }
2631
+ return_trace (true);
2632
+ }
2633
+
2634
+ bool serialize (hb_serialize_context_t *c, const VarRegionList *src, const hb_inc_bimap_t &region_map)
2635
+ {
2636
+ TRACE_SERIALIZE (this);
2637
+ if (unlikely (!c->extend_min (this))) return_trace (false);
2638
+ axisCount = src->axisCount;
2639
+ regionCount = region_map.get_population ();
2640
+ if (unlikely (hb_unsigned_mul_overflows (axisCount * regionCount,
2641
+ VarRegionAxis::static_size))) return_trace (false);
2642
+ if (unlikely (!c->extend (this))) return_trace (false);
2643
+ unsigned int region_count = src->regionCount;
2644
+ for (unsigned int r = 0; r < regionCount; r++)
2645
+ {
2646
+ unsigned int backward = region_map.backward (r);
2647
+ if (backward >= region_count) return_trace (false);
2648
+ hb_memcpy (&axesZ[axisCount * r], &src->axesZ[axisCount * backward], VarRegionAxis::static_size * axisCount);
2649
+ }
2650
+
2651
+ return_trace (true);
2652
+ }
2653
+
2654
+ bool get_var_region (unsigned region_index,
2655
+ const hb_map_t& axes_old_index_tag_map,
2656
+ hb_hashmap_t<hb_tag_t, Triple>& axis_tuples /* OUT */) const
2657
+ {
2658
+ if (region_index >= regionCount) return false;
2659
+ const VarRegionAxis* axis_region = axesZ.arrayZ + (region_index * axisCount);
2660
+ for (unsigned i = 0; i < axisCount; i++)
2661
+ {
2662
+ hb_tag_t *axis_tag;
2663
+ if (!axes_old_index_tag_map.has (i, &axis_tag))
2664
+ return false;
2665
+
2666
+ float min_val = axis_region->startCoord.to_float ();
2667
+ float def_val = axis_region->peakCoord.to_float ();
2668
+ float max_val = axis_region->endCoord.to_float ();
2669
+
2670
+ if (def_val != 0.f)
2671
+ axis_tuples.set (*axis_tag, Triple ((double) min_val, (double) def_val, (double) max_val));
2672
+ axis_region++;
2673
+ }
2674
+ return !axis_tuples.in_error ();
2675
+ }
2676
+
2677
+ bool get_var_regions (const hb_map_t& axes_old_index_tag_map,
2678
+ hb_vector_t<hb_hashmap_t<hb_tag_t, Triple>>& regions /* OUT */) const
2679
+ {
2680
+ if (!regions.alloc (regionCount))
2681
+ return false;
2682
+
2683
+ for (unsigned i = 0; i < regionCount; i++)
2684
+ {
2685
+ hb_hashmap_t<hb_tag_t, Triple> axis_tuples;
2686
+ if (!get_var_region (i, axes_old_index_tag_map, axis_tuples))
2687
+ return false;
2688
+ regions.push (std::move (axis_tuples));
2689
+ }
2690
+ return !regions.in_error ();
2691
+ }
2692
+
2693
+ unsigned int get_size () const { return min_size + VarRegionAxis::static_size * axisCount * regionCount; }
2694
+
2695
+ public:
2696
+ HBUINT16 axisCount;
2697
+ HBUINT15 regionCount;
2698
+ protected:
2699
+ UnsizedArrayOf<VarRegionAxis>
2700
+ axesZ;
2701
+ public:
2702
+ DEFINE_SIZE_ARRAY (4, axesZ);
2703
+ };
2704
+
2705
+ struct SparseVariationRegion : Array16Of<SparseVarRegionAxis>
2706
+ {
2707
+ float evaluate (const int *coords, unsigned int coord_len) const
2708
+ {
2709
+ float v = 1.f;
2710
+ unsigned int count = len;
2711
+ for (unsigned int i = 0; i < count; i++)
2712
+ {
2713
+ float factor = arrayZ[i].evaluate (coords, coord_len);
2714
+ if (factor == 0.f)
2715
+ return 0.;
2716
+ v *= factor;
2717
+ }
2718
+ return v;
2719
+ }
2720
+ };
2721
+
2722
+ struct SparseVarRegionList
2723
+ {
2724
+ using cache_t = float;
2725
+
2726
+ float evaluate (unsigned int region_index,
2727
+ const int *coords, unsigned int coord_len,
2728
+ cache_t *cache = nullptr) const
2729
+ {
2730
+ if (unlikely (region_index >= regions.len))
2731
+ return 0.;
2732
+
2733
+ float *cached_value = nullptr;
2734
+ if (cache)
2735
+ {
2736
+ cached_value = &(cache[region_index]);
2737
+ if (likely (*cached_value != REGION_CACHE_ITEM_CACHE_INVALID))
2738
+ return *cached_value;
2739
+ }
2740
+
2741
+ const SparseVariationRegion &region = this+regions[region_index];
2742
+
2743
+ float v = region.evaluate (coords, coord_len);
2744
+
2745
+ if (cache)
2746
+ *cached_value = v;
2747
+ return v;
2748
+ }
2749
+
2750
+ bool sanitize (hb_sanitize_context_t *c) const
2751
+ {
2752
+ TRACE_SANITIZE (this);
2753
+ return_trace (regions.sanitize (c, this));
2754
+ }
2755
+
2756
+ public:
2757
+ Array16Of<Offset32To<SparseVariationRegion>>
2758
+ regions;
2759
+ public:
2760
+ DEFINE_SIZE_ARRAY (2, regions);
2761
+ };
2762
+
2763
+
2764
+ struct VarData
2765
+ {
2766
+ unsigned int get_item_count () const
2767
+ { return itemCount; }
2768
+
2769
+ unsigned int get_region_index_count () const
2770
+ { return regionIndices.len; }
2771
+
2772
+ unsigned get_region_index (unsigned i) const
2773
+ { return i >= regionIndices.len ? -1 : regionIndices[i]; }
2774
+
2775
+ unsigned int get_row_size () const
2776
+ { return (wordCount () + regionIndices.len) * (longWords () ? 2 : 1); }
2777
+
2778
+ unsigned int get_size () const
2779
+ { return min_size
2780
+ - regionIndices.min_size + regionIndices.get_size ()
2781
+ + itemCount * get_row_size ();
2782
+ }
2783
+
2784
+ float get_delta (unsigned int inner,
2785
+ const int *coords, unsigned int coord_count,
2786
+ const VarRegionList &regions,
2787
+ VarRegionList::cache_t *cache = nullptr) const
2788
+ {
2789
+ if (unlikely (inner >= itemCount))
2790
+ return 0.;
2791
+
2792
+ unsigned int count = regionIndices.len;
2793
+ bool is_long = longWords ();
2794
+ unsigned word_count = wordCount ();
2795
+ unsigned int scount = is_long ? count : word_count;
2796
+ unsigned int lcount = is_long ? word_count : 0;
2797
+
2798
+ const HBUINT8 *bytes = get_delta_bytes ();
2799
+ const HBUINT8 *row = bytes + inner * get_row_size ();
2800
+
2801
+ float delta = 0.;
2802
+ unsigned int i = 0;
2803
+
2804
+ const HBINT32 *lcursor = reinterpret_cast<const HBINT32 *> (row);
2805
+ for (; i < lcount; i++)
2806
+ {
2807
+ float scalar = regions.evaluate (regionIndices.arrayZ[i], coords, coord_count, cache);
2808
+ delta += scalar * *lcursor++;
2809
+ }
2810
+ const HBINT16 *scursor = reinterpret_cast<const HBINT16 *> (lcursor);
2811
+ for (; i < scount; i++)
2812
+ {
2813
+ float scalar = regions.evaluate (regionIndices.arrayZ[i], coords, coord_count, cache);
2814
+ delta += scalar * *scursor++;
2815
+ }
2816
+ const HBINT8 *bcursor = reinterpret_cast<const HBINT8 *> (scursor);
2817
+ for (; i < count; i++)
2818
+ {
2819
+ float scalar = regions.evaluate (regionIndices.arrayZ[i], coords, coord_count, cache);
2820
+ delta += scalar * *bcursor++;
2821
+ }
2822
+
2823
+ return delta;
2824
+ }
2825
+
2826
+ void get_region_scalars (const int *coords, unsigned int coord_count,
2827
+ const VarRegionList &regions,
2828
+ float *scalars /*OUT */,
2829
+ unsigned int num_scalars) const
2830
+ {
2831
+ unsigned count = hb_min (num_scalars, regionIndices.len);
2832
+ for (unsigned int i = 0; i < count; i++)
2833
+ scalars[i] = regions.evaluate (regionIndices.arrayZ[i], coords, coord_count);
2834
+ for (unsigned int i = count; i < num_scalars; i++)
2835
+ scalars[i] = 0.f;
2836
+ }
2837
+
2838
+ bool sanitize (hb_sanitize_context_t *c) const
2839
+ {
2840
+ TRACE_SANITIZE (this);
2841
+ return_trace (c->check_struct (this) &&
2842
+ regionIndices.sanitize (c) &&
2843
+ hb_barrier () &&
2844
+ wordCount () <= regionIndices.len &&
2845
+ c->check_range (get_delta_bytes (),
2846
+ itemCount,
2847
+ get_row_size ()));
2848
+ }
2849
+
2850
+ bool serialize (hb_serialize_context_t *c,
2851
+ bool has_long,
2852
+ const hb_vector_t<const hb_vector_t<int>*>& rows)
2853
+ {
2854
+ TRACE_SERIALIZE (this);
2855
+ if (unlikely (!c->extend_min (this))) return_trace (false);
2856
+ unsigned row_count = rows.length;
2857
+ itemCount = row_count;
2858
+
2859
+ int min_threshold = has_long ? -65536 : -128;
2860
+ int max_threshold = has_long ? +65535 : +127;
2861
+ enum delta_size_t { kZero=0, kNonWord, kWord };
2862
+ hb_vector_t<delta_size_t> delta_sz;
2863
+ unsigned num_regions = rows[0]->length;
2864
+ if (!delta_sz.resize (num_regions))
2865
+ return_trace (false);
2866
+
2867
+ unsigned word_count = 0;
2868
+ for (unsigned r = 0; r < num_regions; r++)
2869
+ {
2870
+ for (unsigned i = 0; i < row_count; i++)
2871
+ {
2872
+ int delta = rows[i]->arrayZ[r];
2873
+ if (delta < min_threshold || delta > max_threshold)
2874
+ {
2875
+ delta_sz[r] = kWord;
2876
+ word_count++;
2877
+ break;
2878
+ }
2879
+ else if (delta != 0)
2880
+ {
2881
+ delta_sz[r] = kNonWord;
2882
+ }
2883
+ }
2884
+ }
2885
+
2886
+ /* reorder regions: words and then non-words*/
2887
+ unsigned word_index = 0;
2888
+ unsigned non_word_index = word_count;
2889
+ hb_map_t ri_map;
2890
+ for (unsigned r = 0; r < num_regions; r++)
2891
+ {
2892
+ if (!delta_sz[r]) continue;
2893
+ unsigned new_r = (delta_sz[r] == kWord)? word_index++ : non_word_index++;
2894
+ if (!ri_map.set (new_r, r))
2895
+ return_trace (false);
2896
+ }
2897
+
2898
+ wordSizeCount = word_count | (has_long ? 0x8000u /* LONG_WORDS */ : 0);
2899
+
2900
+ unsigned ri_count = ri_map.get_population ();
2901
+ regionIndices.len = ri_count;
2902
+ if (unlikely (!c->extend (this))) return_trace (false);
2903
+
2904
+ for (unsigned r = 0; r < ri_count; r++)
2905
+ {
2906
+ hb_codepoint_t *idx;
2907
+ if (!ri_map.has (r, &idx))
2908
+ return_trace (false);
2909
+ regionIndices[r] = *idx;
2910
+ }
2911
+
2912
+ HBUINT8 *delta_bytes = get_delta_bytes ();
2913
+ unsigned row_size = get_row_size ();
2914
+ for (unsigned int i = 0; i < row_count; i++)
2915
+ {
2916
+ for (unsigned int r = 0; r < ri_count; r++)
2917
+ {
2918
+ int delta = rows[i]->arrayZ[ri_map[r]];
2919
+ set_item_delta_fast (i, r, delta, delta_bytes, row_size);
2920
+ }
2921
+ }
2922
+ return_trace (true);
2923
+ }
2924
+
2925
+ bool serialize (hb_serialize_context_t *c,
2926
+ const VarData *src,
2927
+ const hb_inc_bimap_t &inner_map,
2928
+ const hb_inc_bimap_t &region_map)
2929
+ {
2930
+ TRACE_SERIALIZE (this);
2931
+ if (unlikely (!c->extend_min (this))) return_trace (false);
2932
+ itemCount = inner_map.get_next_value ();
2933
+
2934
+ /* Optimize word count */
2935
+ unsigned ri_count = src->regionIndices.len;
2936
+ enum delta_size_t { kZero=0, kNonWord, kWord };
2937
+ hb_vector_t<delta_size_t> delta_sz;
2938
+ hb_vector_t<unsigned int> ri_map; /* maps new index to old index */
2939
+ delta_sz.resize (ri_count);
2940
+ ri_map.resize (ri_count);
2941
+ unsigned int new_word_count = 0;
2942
+ unsigned int r;
2943
+
2944
+ const HBUINT8 *src_delta_bytes = src->get_delta_bytes ();
2945
+ unsigned src_row_size = src->get_row_size ();
2946
+ unsigned src_word_count = src->wordCount ();
2947
+ bool src_long_words = src->longWords ();
2948
+
2949
+ bool has_long = false;
2950
+ if (src_long_words)
2951
+ {
2952
+ for (r = 0; r < src_word_count; r++)
2953
+ {
2954
+ for (unsigned old_gid : inner_map.keys())
2955
+ {
2956
+ int32_t delta = src->get_item_delta_fast (old_gid, r, src_delta_bytes, src_row_size);
2957
+ if (delta < -65536 || 65535 < delta)
2958
+ {
2959
+ has_long = true;
2960
+ break;
2961
+ }
2962
+ }
2963
+ }
2964
+ }
2965
+
2966
+ signed min_threshold = has_long ? -65536 : -128;
2967
+ signed max_threshold = has_long ? +65535 : +127;
2968
+ for (r = 0; r < ri_count; r++)
2969
+ {
2970
+ bool short_circuit = src_long_words == has_long && src_word_count <= r;
2971
+
2972
+ delta_sz[r] = kZero;
2973
+ for (unsigned old_gid : inner_map.keys())
2974
+ {
2975
+ int32_t delta = src->get_item_delta_fast (old_gid, r, src_delta_bytes, src_row_size);
2976
+ if (delta < min_threshold || max_threshold < delta)
2977
+ {
2978
+ delta_sz[r] = kWord;
2979
+ new_word_count++;
2980
+ break;
2981
+ }
2982
+ else if (delta != 0)
2983
+ {
2984
+ delta_sz[r] = kNonWord;
2985
+ if (short_circuit)
2986
+ break;
2987
+ }
2988
+ }
2989
+ }
2990
+
2991
+ unsigned int word_index = 0;
2992
+ unsigned int non_word_index = new_word_count;
2993
+ unsigned int new_ri_count = 0;
2994
+ for (r = 0; r < ri_count; r++)
2995
+ if (delta_sz[r])
2996
+ {
2997
+ unsigned new_r = (delta_sz[r] == kWord)? word_index++ : non_word_index++;
2998
+ ri_map[new_r] = r;
2999
+ new_ri_count++;
3000
+ }
3001
+
3002
+ wordSizeCount = new_word_count | (has_long ? 0x8000u /* LONG_WORDS */ : 0);
3003
+
3004
+ regionIndices.len = new_ri_count;
3005
+
3006
+ if (unlikely (!c->extend (this))) return_trace (false);
3007
+
3008
+ for (r = 0; r < new_ri_count; r++)
3009
+ regionIndices[r] = region_map[src->regionIndices[ri_map[r]]];
3010
+
3011
+ HBUINT8 *delta_bytes = get_delta_bytes ();
3012
+ unsigned row_size = get_row_size ();
3013
+ unsigned count = itemCount;
3014
+ for (unsigned int i = 0; i < count; i++)
3015
+ {
3016
+ unsigned int old = inner_map.backward (i);
3017
+ for (unsigned int r = 0; r < new_ri_count; r++)
3018
+ set_item_delta_fast (i, r,
3019
+ src->get_item_delta_fast (old, ri_map[r],
3020
+ src_delta_bytes, src_row_size),
3021
+ delta_bytes, row_size);
3022
+ }
3023
+
3024
+ return_trace (true);
3025
+ }
3026
+
3027
+ void collect_region_refs (hb_set_t &region_indices, const hb_inc_bimap_t &inner_map) const
3028
+ {
3029
+ const HBUINT8 *delta_bytes = get_delta_bytes ();
3030
+ unsigned row_size = get_row_size ();
3031
+
3032
+ for (unsigned int r = 0; r < regionIndices.len; r++)
3033
+ {
3034
+ unsigned int region = regionIndices.arrayZ[r];
3035
+ if (region_indices.has (region)) continue;
3036
+ for (hb_codepoint_t old_gid : inner_map.keys())
3037
+ if (get_item_delta_fast (old_gid, r, delta_bytes, row_size) != 0)
3038
+ {
3039
+ region_indices.add (region);
3040
+ break;
3041
+ }
3042
+ }
3043
+ }
3044
+
3045
+ public:
3046
+ const HBUINT8 *get_delta_bytes () const
3047
+ { return &StructAfter<HBUINT8> (regionIndices); }
3048
+
3049
+ protected:
3050
+ HBUINT8 *get_delta_bytes ()
3051
+ { return &StructAfter<HBUINT8> (regionIndices); }
3052
+
3053
+ public:
3054
+ int32_t get_item_delta_fast (unsigned int item, unsigned int region,
3055
+ const HBUINT8 *delta_bytes, unsigned row_size) const
3056
+ {
3057
+ if (unlikely (item >= itemCount || region >= regionIndices.len)) return 0;
3058
+
3059
+ const HBINT8 *p = (const HBINT8 *) delta_bytes + item * row_size;
3060
+ unsigned word_count = wordCount ();
3061
+ bool is_long = longWords ();
3062
+ if (is_long)
3063
+ {
3064
+ if (region < word_count)
3065
+ return ((const HBINT32 *) p)[region];
3066
+ else
3067
+ return ((const HBINT16 *)(p + HBINT32::static_size * word_count))[region - word_count];
3068
+ }
3069
+ else
3070
+ {
3071
+ if (region < word_count)
3072
+ return ((const HBINT16 *) p)[region];
3073
+ else
3074
+ return (p + HBINT16::static_size * word_count)[region - word_count];
3075
+ }
3076
+ }
3077
+ int32_t get_item_delta (unsigned int item, unsigned int region) const
3078
+ {
3079
+ return get_item_delta_fast (item, region,
3080
+ get_delta_bytes (),
3081
+ get_row_size ());
3082
+ }
3083
+
3084
+ protected:
3085
+ void set_item_delta_fast (unsigned int item, unsigned int region, int32_t delta,
3086
+ HBUINT8 *delta_bytes, unsigned row_size)
3087
+ {
3088
+ HBINT8 *p = (HBINT8 *) delta_bytes + item * row_size;
3089
+ unsigned word_count = wordCount ();
3090
+ bool is_long = longWords ();
3091
+ if (is_long)
3092
+ {
3093
+ if (region < word_count)
3094
+ ((HBINT32 *) p)[region] = delta;
3095
+ else
3096
+ ((HBINT16 *)(p + HBINT32::static_size * word_count))[region - word_count] = delta;
3097
+ }
3098
+ else
3099
+ {
3100
+ if (region < word_count)
3101
+ ((HBINT16 *) p)[region] = delta;
3102
+ else
3103
+ (p + HBINT16::static_size * word_count)[region - word_count] = delta;
3104
+ }
3105
+ }
3106
+ void set_item_delta (unsigned int item, unsigned int region, int32_t delta)
3107
+ {
3108
+ set_item_delta_fast (item, region, delta,
3109
+ get_delta_bytes (),
3110
+ get_row_size ());
3111
+ }
3112
+
3113
+ bool longWords () const { return wordSizeCount & 0x8000u /* LONG_WORDS */; }
3114
+ unsigned wordCount () const { return wordSizeCount & 0x7FFFu /* WORD_DELTA_COUNT_MASK */; }
3115
+
3116
+ protected:
3117
+ HBUINT16 itemCount;
3118
+ HBUINT16 wordSizeCount;
3119
+ Array16Of<HBUINT16> regionIndices;
3120
+ /*UnsizedArrayOf<HBUINT8>bytesX;*/
3121
+ public:
3122
+ DEFINE_SIZE_ARRAY (6, regionIndices);
3123
+ };
3124
+
3125
+ struct MultiVarData
3126
+ {
3127
+ unsigned int get_size () const
3128
+ { return min_size
3129
+ - regionIndices.min_size + regionIndices.get_size ()
3130
+ + StructAfter<CFF2Index> (regionIndices).get_size ();
3131
+ }
3132
+
3133
+ void get_delta (unsigned int inner,
3134
+ const int *coords, unsigned int coord_count,
3135
+ const SparseVarRegionList &regions,
3136
+ hb_array_t<float> out,
3137
+ SparseVarRegionList::cache_t *cache = nullptr) const
3138
+ {
3139
+ auto &deltaSets = StructAfter<decltype (deltaSetsX)> (regionIndices);
3140
+
3141
+ auto values_iter = deltaSets[inner];
3142
+
3143
+ unsigned regionCount = regionIndices.len;
3144
+ unsigned count = out.length;
3145
+ for (unsigned regionIndex = 0; regionIndex < regionCount; regionIndex++)
3146
+ {
3147
+ float scalar = regions.evaluate (regionIndices.arrayZ[regionIndex],
3148
+ coords, coord_count,
3149
+ cache);
3150
+ if (scalar == 1.f)
3151
+ for (unsigned i = 0; i < count; i++)
3152
+ out.arrayZ[i] += *values_iter++;
3153
+ else if (scalar)
3154
+ for (unsigned i = 0; i < count; i++)
3155
+ out.arrayZ[i] += *values_iter++ * scalar;
3156
+ else
3157
+ values_iter += count;
3158
+ }
3159
+ }
3160
+
3161
+ bool sanitize (hb_sanitize_context_t *c) const
3162
+ {
3163
+ TRACE_SANITIZE (this);
3164
+ return_trace (format.sanitize (c) &&
3165
+ hb_barrier () &&
3166
+ format == 1 &&
3167
+ regionIndices.sanitize (c) &&
3168
+ hb_barrier () &&
3169
+ StructAfter<decltype (deltaSetsX)> (regionIndices).sanitize (c));
3170
+ }
3171
+
3172
+ protected:
3173
+ HBUINT8 format; // 1
3174
+ Array16Of<HBUINT16> regionIndices;
3175
+ TupleList deltaSetsX;
3176
+ public:
3177
+ DEFINE_SIZE_MIN (8);
3178
+ };
3179
+
3180
+ struct ItemVariationStore
3181
+ {
3182
+ friend struct item_variations_t;
3183
+ using cache_t = VarRegionList::cache_t;
3184
+
3185
+ cache_t *create_cache () const
3186
+ {
3187
+ #ifdef HB_NO_VAR
3188
+ return nullptr;
3189
+ #endif
3190
+ auto &r = this+regions;
3191
+ unsigned count = r.regionCount;
3192
+
3193
+ float *cache = (float *) hb_malloc (sizeof (float) * count);
3194
+ if (unlikely (!cache)) return nullptr;
3195
+
3196
+ for (unsigned i = 0; i < count; i++)
3197
+ cache[i] = REGION_CACHE_ITEM_CACHE_INVALID;
3198
+
3199
+ return cache;
3200
+ }
3201
+
3202
+ static void destroy_cache (cache_t *cache) { hb_free (cache); }
3203
+
3204
+ private:
3205
+ float get_delta (unsigned int outer, unsigned int inner,
3206
+ const int *coords, unsigned int coord_count,
3207
+ VarRegionList::cache_t *cache = nullptr) const
3208
+ {
3209
+ #ifdef HB_NO_VAR
3210
+ return 0.f;
3211
+ #endif
3212
+
3213
+ if (unlikely (outer >= dataSets.len))
3214
+ return 0.f;
3215
+
3216
+ return (this+dataSets[outer]).get_delta (inner,
3217
+ coords, coord_count,
3218
+ this+regions,
3219
+ cache);
3220
+ }
3221
+
3222
+ public:
3223
+ float get_delta (unsigned int index,
3224
+ const int *coords, unsigned int coord_count,
3225
+ VarRegionList::cache_t *cache = nullptr) const
3226
+ {
3227
+ unsigned int outer = index >> 16;
3228
+ unsigned int inner = index & 0xFFFF;
3229
+ return get_delta (outer, inner, coords, coord_count, cache);
3230
+ }
3231
+ float get_delta (unsigned int index,
3232
+ hb_array_t<const int> coords,
3233
+ VarRegionList::cache_t *cache = nullptr) const
3234
+ {
3235
+ return get_delta (index,
3236
+ coords.arrayZ, coords.length,
3237
+ cache);
3238
+ }
3239
+
3240
+ bool sanitize (hb_sanitize_context_t *c) const
3241
+ {
3242
+ #ifdef HB_NO_VAR
3243
+ return true;
3244
+ #endif
3245
+
3246
+ TRACE_SANITIZE (this);
3247
+ return_trace (c->check_struct (this) &&
3248
+ hb_barrier () &&
3249
+ format == 1 &&
3250
+ regions.sanitize (c, this) &&
3251
+ dataSets.sanitize (c, this));
3252
+ }
3253
+
3254
+ bool serialize (hb_serialize_context_t *c,
3255
+ bool has_long,
3256
+ const hb_vector_t<hb_tag_t>& axis_tags,
3257
+ const hb_vector_t<const hb_hashmap_t<hb_tag_t, Triple>*>& region_list,
3258
+ const hb_vector_t<delta_row_encoding_t>& vardata_encodings)
3259
+ {
3260
+ TRACE_SERIALIZE (this);
3261
+ #ifdef HB_NO_VAR
3262
+ return_trace (false);
3263
+ #endif
3264
+ if (unlikely (!c->extend_min (this))) return_trace (false);
3265
+
3266
+ format = 1;
3267
+ if (!regions.serialize_serialize (c, axis_tags, region_list))
3268
+ return_trace (false);
3269
+
3270
+ unsigned num_var_data = vardata_encodings.length;
3271
+ if (!num_var_data) return_trace (false);
3272
+ if (unlikely (!c->check_assign (dataSets.len, num_var_data,
3273
+ HB_SERIALIZE_ERROR_INT_OVERFLOW)))
3274
+ return_trace (false);
3275
+
3276
+ if (unlikely (!c->extend (dataSets))) return_trace (false);
3277
+ for (unsigned i = 0; i < num_var_data; i++)
3278
+ if (!dataSets[i].serialize_serialize (c, has_long, vardata_encodings[i].items))
3279
+ return_trace (false);
3280
+
3281
+ return_trace (true);
3282
+ }
3283
+
3284
+ bool serialize (hb_serialize_context_t *c,
3285
+ const ItemVariationStore *src,
3286
+ const hb_array_t <const hb_inc_bimap_t> &inner_maps)
3287
+ {
3288
+ TRACE_SERIALIZE (this);
3289
+ #ifdef HB_NO_VAR
3290
+ return_trace (false);
3291
+ #endif
3292
+
3293
+ if (unlikely (!c->extend_min (this))) return_trace (false);
3294
+
3295
+ unsigned int set_count = 0;
3296
+ for (unsigned int i = 0; i < inner_maps.length; i++)
3297
+ if (inner_maps[i].get_population ())
3298
+ set_count++;
3299
+
3300
+ format = 1;
3301
+
3302
+ const auto &src_regions = src+src->regions;
3303
+
3304
+ hb_set_t region_indices;
3305
+ for (unsigned int i = 0; i < inner_maps.length; i++)
3306
+ (src+src->dataSets[i]).collect_region_refs (region_indices, inner_maps[i]);
3307
+
3308
+ if (region_indices.in_error ())
3309
+ return_trace (false);
3310
+
3311
+ region_indices.del_range ((src_regions).regionCount, hb_set_t::INVALID);
3312
+
3313
+ /* TODO use constructor when our data-structures support that. */
3314
+ hb_inc_bimap_t region_map;
3315
+ + hb_iter (region_indices)
3316
+ | hb_apply ([&region_map] (unsigned _) { region_map.add(_); })
3317
+ ;
3318
+ if (region_map.in_error())
3319
+ return_trace (false);
3320
+
3321
+ if (unlikely (!regions.serialize_serialize (c, &src_regions, region_map)))
3322
+ return_trace (false);
3323
+
3324
+ dataSets.len = set_count;
3325
+ if (unlikely (!c->extend (dataSets))) return_trace (false);
3326
+
3327
+ /* TODO: The following code could be simplified when
3328
+ * List16OfOffset16To::subset () can take a custom param to be passed to VarData::serialize () */
3329
+ unsigned int set_index = 0;
3330
+ for (unsigned int i = 0; i < inner_maps.length; i++)
3331
+ {
3332
+ if (!inner_maps[i].get_population ()) continue;
3333
+ if (unlikely (!dataSets[set_index++]
3334
+ .serialize_serialize (c, &(src+src->dataSets[i]), inner_maps[i], region_map)))
3335
+ return_trace (false);
3336
+ }
3337
+
3338
+ return_trace (true);
3339
+ }
3340
+
3341
+ ItemVariationStore *copy (hb_serialize_context_t *c) const
3342
+ {
3343
+ TRACE_SERIALIZE (this);
3344
+ auto *out = c->start_embed (this);
3345
+ if (unlikely (!out)) return_trace (nullptr);
3346
+
3347
+ hb_vector_t <hb_inc_bimap_t> inner_maps;
3348
+ unsigned count = dataSets.len;
3349
+ for (unsigned i = 0; i < count; i++)
3350
+ {
3351
+ hb_inc_bimap_t *map = inner_maps.push ();
3352
+ if (!c->propagate_error(inner_maps))
3353
+ return_trace(nullptr);
3354
+ auto &data = this+dataSets[i];
3355
+
3356
+ unsigned itemCount = data.get_item_count ();
3357
+ for (unsigned j = 0; j < itemCount; j++)
3358
+ map->add (j);
3359
+ }
3360
+
3361
+ if (unlikely (!out->serialize (c, this, inner_maps))) return_trace (nullptr);
3362
+
3363
+ return_trace (out);
3364
+ }
3365
+
3366
+ bool subset (hb_subset_context_t *c, const hb_array_t<const hb_inc_bimap_t> &inner_maps) const
3367
+ {
3368
+ TRACE_SUBSET (this);
3369
+ #ifdef HB_NO_VAR
3370
+ return_trace (false);
3371
+ #endif
3372
+
3373
+ ItemVariationStore *varstore_prime = c->serializer->start_embed<ItemVariationStore> ();
3374
+ if (unlikely (!varstore_prime)) return_trace (false);
3375
+
3376
+ varstore_prime->serialize (c->serializer, this, inner_maps);
3377
+
3378
+ return_trace (
3379
+ !c->serializer->in_error()
3380
+ && varstore_prime->dataSets);
3381
+ }
3382
+
3383
+ unsigned int get_region_index_count (unsigned int major) const
3384
+ {
3385
+ #ifdef HB_NO_VAR
3386
+ return 0;
3387
+ #endif
3388
+ return (this+dataSets[major]).get_region_index_count ();
3389
+ }
3390
+
3391
+ void get_region_scalars (unsigned int major,
3392
+ const int *coords, unsigned int coord_count,
3393
+ float *scalars /*OUT*/,
3394
+ unsigned int num_scalars) const
3395
+ {
3396
+ #ifdef HB_NO_VAR
3397
+ for (unsigned i = 0; i < num_scalars; i++)
3398
+ scalars[i] = 0.f;
3399
+ return;
3400
+ #endif
3401
+
3402
+ (this+dataSets[major]).get_region_scalars (coords, coord_count,
3403
+ this+regions,
3404
+ &scalars[0], num_scalars);
3405
+ }
3406
+
3407
+ unsigned int get_sub_table_count () const
3408
+ {
3409
+ #ifdef HB_NO_VAR
3410
+ return 0;
3411
+ #endif
3412
+ return dataSets.len;
3413
+ }
3414
+
3415
+ const VarData& get_sub_table (unsigned i) const
3416
+ {
3417
+ #ifdef HB_NO_VAR
3418
+ return Null (VarData);
3419
+ #endif
3420
+ return this+dataSets[i];
3421
+ }
3422
+
3423
+ const VarRegionList& get_region_list () const
3424
+ {
3425
+ #ifdef HB_NO_VAR
3426
+ return Null (VarRegionList);
3427
+ #endif
3428
+ return this+regions;
3429
+ }
3430
+
3431
+ protected:
3432
+ HBUINT16 format;
3433
+ Offset32To<VarRegionList> regions;
3434
+ Array16OfOffset32To<VarData> dataSets;
3435
+ public:
3436
+ DEFINE_SIZE_ARRAY_SIZED (8, dataSets);
3437
+ };
3438
+
3439
+ struct MultiItemVariationStore
3440
+ {
3441
+ using cache_t = SparseVarRegionList::cache_t;
3442
+
3443
+ cache_t *create_cache () const
3444
+ {
3445
+ #ifdef HB_NO_VAR
3446
+ return nullptr;
3447
+ #endif
3448
+ auto &r = this+regions;
3449
+ unsigned count = r.regions.len;
3450
+
3451
+ float *cache = (float *) hb_malloc (sizeof (float) * count);
3452
+ if (unlikely (!cache)) return nullptr;
3453
+
3454
+ for (unsigned i = 0; i < count; i++)
3455
+ cache[i] = REGION_CACHE_ITEM_CACHE_INVALID;
3456
+
3457
+ return cache;
3458
+ }
3459
+
3460
+ static void destroy_cache (cache_t *cache) { hb_free (cache); }
3461
+
3462
+ private:
3463
+ void get_delta (unsigned int outer, unsigned int inner,
3464
+ const int *coords, unsigned int coord_count,
3465
+ hb_array_t<float> out,
3466
+ VarRegionList::cache_t *cache = nullptr) const
3467
+ {
3468
+ #ifdef HB_NO_VAR
3469
+ return;
3470
+ #endif
3471
+
3472
+ if (unlikely (outer >= dataSets.len))
3473
+ return;
3474
+
3475
+ return (this+dataSets[outer]).get_delta (inner,
3476
+ coords, coord_count,
3477
+ this+regions,
3478
+ out,
3479
+ cache);
3480
+ }
3481
+
3482
+ public:
3483
+ void get_delta (unsigned int index,
3484
+ const int *coords, unsigned int coord_count,
3485
+ hb_array_t<float> out,
3486
+ VarRegionList::cache_t *cache = nullptr) const
3487
+ {
3488
+ unsigned int outer = index >> 16;
3489
+ unsigned int inner = index & 0xFFFF;
3490
+ get_delta (outer, inner, coords, coord_count, out, cache);
3491
+ }
3492
+ void get_delta (unsigned int index,
3493
+ hb_array_t<const int> coords,
3494
+ hb_array_t<float> out,
3495
+ VarRegionList::cache_t *cache = nullptr) const
3496
+ {
3497
+ return get_delta (index,
3498
+ coords.arrayZ, coords.length,
3499
+ out,
3500
+ cache);
3501
+ }
3502
+
3503
+ bool sanitize (hb_sanitize_context_t *c) const
3504
+ {
3505
+ #ifdef HB_NO_VAR
3506
+ return true;
3507
+ #endif
3508
+
3509
+ TRACE_SANITIZE (this);
3510
+ return_trace (c->check_struct (this) &&
3511
+ hb_barrier () &&
3512
+ format == 1 &&
3513
+ regions.sanitize (c, this) &&
3514
+ dataSets.sanitize (c, this));
3515
+ }
3516
+
3517
+ protected:
3518
+ HBUINT16 format; // 1
3519
+ Offset32To<SparseVarRegionList> regions;
3520
+ Array16OfOffset32To<MultiVarData> dataSets;
3521
+ public:
3522
+ DEFINE_SIZE_ARRAY_SIZED (8, dataSets);
3523
+ };
3524
+
3525
+ #undef REGION_CACHE_ITEM_CACHE_INVALID
3526
+
3527
+ template <typename MapCountT>
3528
+ struct DeltaSetIndexMapFormat01
3529
+ {
3530
+ friend struct DeltaSetIndexMap;
3531
+
3532
+ unsigned get_size () const
3533
+ { return min_size + mapCount * get_width (); }
3534
+
3535
+ private:
3536
+ DeltaSetIndexMapFormat01* copy (hb_serialize_context_t *c) const
3537
+ {
3538
+ TRACE_SERIALIZE (this);
3539
+ return_trace (c->embed (this));
3540
+ }
3541
+
3542
+ template <typename T>
3543
+ bool serialize (hb_serialize_context_t *c, const T &plan)
3544
+ {
3545
+ unsigned int width = plan.get_width ();
3546
+ unsigned int inner_bit_count = plan.get_inner_bit_count ();
3547
+ const hb_array_t<const uint32_t> output_map = plan.get_output_map ();
3548
+
3549
+ TRACE_SERIALIZE (this);
3550
+ if (unlikely (output_map.length && ((((inner_bit_count-1)&~0xF)!=0) || (((width-1)&~0x3)!=0))))
3551
+ return_trace (false);
3552
+ if (unlikely (!c->extend_min (this))) return_trace (false);
3553
+
3554
+ entryFormat = ((width-1)<<4)|(inner_bit_count-1);
3555
+ mapCount = output_map.length;
3556
+ HBUINT8 *p = c->allocate_size<HBUINT8> (width * output_map.length);
3557
+ if (unlikely (!p)) return_trace (false);
3558
+ for (unsigned int i = 0; i < output_map.length; i++)
3559
+ {
3560
+ unsigned int v = output_map.arrayZ[i];
3561
+ if (v)
3562
+ {
3563
+ unsigned int outer = v >> 16;
3564
+ unsigned int inner = v & 0xFFFF;
3565
+ unsigned int u = (outer << inner_bit_count) | inner;
3566
+ for (unsigned int w = width; w > 0;)
3567
+ {
3568
+ p[--w] = u;
3569
+ u >>= 8;
3570
+ }
3571
+ }
3572
+ p += width;
3573
+ }
3574
+ return_trace (true);
3575
+ }
3576
+
3577
+ uint32_t map (unsigned int v) const /* Returns 16.16 outer.inner. */
3578
+ {
3579
+ /* If count is zero, pass value unchanged. This takes
3580
+ * care of direct mapping for advance map. */
3581
+ if (!mapCount)
3582
+ return v;
3583
+
3584
+ if (v >= mapCount)
3585
+ v = mapCount - 1;
3586
+
3587
+ unsigned int u = 0;
3588
+ { /* Fetch it. */
3589
+ unsigned int w = get_width ();
3590
+ const HBUINT8 *p = mapDataZ.arrayZ + w * v;
3591
+ for (; w; w--)
3592
+ u = (u << 8) + *p++;
3593
+ }
3594
+
3595
+ { /* Repack it. */
3596
+ unsigned int n = get_inner_bit_count ();
3597
+ unsigned int outer = u >> n;
3598
+ unsigned int inner = u & ((1 << n) - 1);
3599
+ u = (outer<<16) | inner;
3600
+ }
3601
+
3602
+ return u;
3603
+ }
3604
+
3605
+ unsigned get_map_count () const { return mapCount; }
3606
+ unsigned get_width () const { return ((entryFormat >> 4) & 3) + 1; }
3607
+ unsigned get_inner_bit_count () const { return (entryFormat & 0xF) + 1; }
3608
+
3609
+
3610
+ bool sanitize (hb_sanitize_context_t *c) const
3611
+ {
3612
+ TRACE_SANITIZE (this);
3613
+ return_trace (c->check_struct (this) &&
3614
+ hb_barrier () &&
3615
+ c->check_range (mapDataZ.arrayZ,
3616
+ mapCount,
3617
+ get_width ()));
3618
+ }
3619
+
3620
+ protected:
3621
+ HBUINT8 format; /* Format identifier--format = 0 */
3622
+ HBUINT8 entryFormat; /* A packed field that describes the compressed
3623
+ * representation of delta-set indices. */
3624
+ MapCountT mapCount; /* The number of mapping entries. */
3625
+ UnsizedArrayOf<HBUINT8>
3626
+ mapDataZ; /* The delta-set index mapping data. */
3627
+
3628
+ public:
3629
+ DEFINE_SIZE_ARRAY (2+MapCountT::static_size, mapDataZ);
3630
+ };
3631
+
3632
+ struct DeltaSetIndexMap
3633
+ {
3634
+ template <typename T>
3635
+ bool serialize (hb_serialize_context_t *c, const T &plan)
3636
+ {
3637
+ TRACE_SERIALIZE (this);
3638
+ unsigned length = plan.get_output_map ().length;
3639
+ u.format = length <= 0xFFFF ? 0 : 1;
3640
+ switch (u.format) {
3641
+ case 0: return_trace (u.format0.serialize (c, plan));
3642
+ case 1: return_trace (u.format1.serialize (c, plan));
3643
+ default:return_trace (false);
3644
+ }
3645
+ }
3646
+
3647
+ uint32_t map (unsigned v) const
3648
+ {
3649
+ switch (u.format) {
3650
+ case 0: return (u.format0.map (v));
3651
+ case 1: return (u.format1.map (v));
3652
+ default:return v;
3653
+ }
3654
+ }
3655
+
3656
+ unsigned get_map_count () const
3657
+ {
3658
+ switch (u.format) {
3659
+ case 0: return u.format0.get_map_count ();
3660
+ case 1: return u.format1.get_map_count ();
3661
+ default:return 0;
3662
+ }
3663
+ }
3664
+
3665
+ unsigned get_width () const
3666
+ {
3667
+ switch (u.format) {
3668
+ case 0: return u.format0.get_width ();
3669
+ case 1: return u.format1.get_width ();
3670
+ default:return 0;
3671
+ }
3672
+ }
3673
+
3674
+ unsigned get_inner_bit_count () const
3675
+ {
3676
+ switch (u.format) {
3677
+ case 0: return u.format0.get_inner_bit_count ();
3678
+ case 1: return u.format1.get_inner_bit_count ();
3679
+ default:return 0;
3680
+ }
3681
+ }
3682
+
3683
+ bool sanitize (hb_sanitize_context_t *c) const
3684
+ {
3685
+ TRACE_SANITIZE (this);
3686
+ if (!u.format.sanitize (c)) return_trace (false);
3687
+ hb_barrier ();
3688
+ switch (u.format) {
3689
+ case 0: return_trace (u.format0.sanitize (c));
3690
+ case 1: return_trace (u.format1.sanitize (c));
3691
+ default:return_trace (true);
3692
+ }
3693
+ }
3694
+
3695
+ DeltaSetIndexMap* copy (hb_serialize_context_t *c) const
3696
+ {
3697
+ TRACE_SERIALIZE (this);
3698
+ switch (u.format) {
3699
+ case 0: return_trace (reinterpret_cast<DeltaSetIndexMap *> (u.format0.copy (c)));
3700
+ case 1: return_trace (reinterpret_cast<DeltaSetIndexMap *> (u.format1.copy (c)));
3701
+ default:return_trace (nullptr);
3702
+ }
3703
+ }
3704
+
3705
+ protected:
3706
+ union {
3707
+ HBUINT8 format; /* Format identifier */
3708
+ DeltaSetIndexMapFormat01<HBUINT16> format0;
3709
+ DeltaSetIndexMapFormat01<HBUINT32> format1;
3710
+ } u;
3711
+ public:
3712
+ DEFINE_SIZE_UNION (1, format);
3713
+ };
3714
+
3715
+
3716
+ struct ItemVarStoreInstancer
3717
+ {
3718
+ ItemVarStoreInstancer (const ItemVariationStore *varStore,
3719
+ const DeltaSetIndexMap *varIdxMap,
3720
+ hb_array_t<const int> coords,
3721
+ VarRegionList::cache_t *cache = nullptr) :
3722
+ varStore (varStore), varIdxMap (varIdxMap), coords (coords), cache (cache)
3723
+ {
3724
+ if (!varStore)
3725
+ varStore = &Null(ItemVariationStore);
3726
+ }
3727
+
3728
+ operator bool () const { return varStore && bool (coords); }
3729
+
3730
+ float operator[] (uint32_t varIdx) const
3731
+ { return (*this) (varIdx); }
3732
+
3733
+ float operator() (uint32_t varIdx, unsigned short offset = 0) const
3734
+ {
3735
+ if (varIdxMap)
3736
+ varIdx = varIdxMap->map (VarIdx::add (varIdx, offset));
3737
+ else
3738
+ varIdx += offset;
3739
+ return coords ? varStore->get_delta (varIdx, coords, cache) : 0.f;
3740
+ }
3741
+
3742
+ const ItemVariationStore *varStore;
3743
+ const DeltaSetIndexMap *varIdxMap;
3744
+ hb_array_t<const int> coords;
3745
+ VarRegionList::cache_t *cache;
3746
+ };
3747
+
3748
+ struct MultiItemVarStoreInstancer
3749
+ {
3750
+ MultiItemVarStoreInstancer (const MultiItemVariationStore *varStore,
3751
+ const DeltaSetIndexMap *varIdxMap,
3752
+ hb_array_t<const int> coords,
3753
+ SparseVarRegionList::cache_t *cache = nullptr) :
3754
+ varStore (varStore), varIdxMap (varIdxMap), coords (coords), cache (cache)
3755
+ {
3756
+ if (!varStore)
3757
+ varStore = &Null(MultiItemVariationStore);
3758
+ }
3759
+
3760
+ operator bool () const { return varStore && bool (coords); }
3761
+
3762
+ float operator[] (uint32_t varIdx) const
3763
+ {
3764
+ float v = 0;
3765
+ (*this) (hb_array (&v, 1), varIdx);
3766
+ return v;
3767
+ }
3768
+
3769
+ void operator() (hb_array_t<float> out, uint32_t varIdx, unsigned short offset = 0) const
3770
+ {
3771
+ if (coords)
3772
+ {
3773
+ if (varIdxMap)
3774
+ varIdx = varIdxMap->map (VarIdx::add (varIdx, offset));
3775
+ else
3776
+ varIdx += offset;
3777
+ varStore->get_delta (varIdx, coords, out, cache);
3778
+ }
3779
+ else
3780
+ for (unsigned i = 0; i < out.length; i++)
3781
+ out.arrayZ[i] = 0.f;
3782
+ }
3783
+
3784
+ const MultiItemVariationStore *varStore;
3785
+ const DeltaSetIndexMap *varIdxMap;
3786
+ hb_array_t<const int> coords;
3787
+ SparseVarRegionList::cache_t *cache;
3788
+ };
3789
+
3790
+
3791
+ /*
3792
+ * Feature Variations
3793
+ */
3794
+ enum Cond_with_Var_flag_t
3795
+ {
3796
+ KEEP_COND_WITH_VAR = 0,
3797
+ KEEP_RECORD_WITH_VAR = 1,
3798
+ DROP_COND_WITH_VAR = 2,
3799
+ DROP_RECORD_WITH_VAR = 3,
3800
+ };
3801
+
3802
+
3803
+ template <typename Instancer>
3804
+ static bool
3805
+ _hb_recurse_condition_evaluate (const struct Condition &condition,
3806
+ const int *coords,
3807
+ unsigned int coord_len,
3808
+ Instancer *instancer);
3809
+
3810
+ struct ConditionAxisRange
3811
+ {
3812
+ friend struct Condition;
3813
+
3814
+ bool subset (hb_subset_context_t *c) const
3815
+ {
3816
+ TRACE_SUBSET (this);
3817
+ auto *out = c->serializer->embed (this);
3818
+ if (unlikely (!out)) return_trace (false);
3819
+
3820
+ const hb_map_t *index_map = &c->plan->axes_index_map;
3821
+ if (index_map->is_empty ()) return_trace (true);
3822
+
3823
+ const hb_map_t& axes_old_index_tag_map = c->plan->axes_old_index_tag_map;
3824
+ hb_codepoint_t *axis_tag;
3825
+ if (!axes_old_index_tag_map.has (axisIndex, &axis_tag) ||
3826
+ !index_map->has (axisIndex))
3827
+ return_trace (false);
3828
+
3829
+ const hb_hashmap_t<hb_tag_t, Triple>& normalized_axes_location = c->plan->axes_location;
3830
+ Triple axis_limit{-1.0, 0.0, 1.0};
3831
+ Triple *normalized_limit;
3832
+ if (normalized_axes_location.has (*axis_tag, &normalized_limit))
3833
+ axis_limit = *normalized_limit;
3834
+
3835
+ const hb_hashmap_t<hb_tag_t, TripleDistances>& axes_triple_distances = c->plan->axes_triple_distances;
3836
+ TripleDistances axis_triple_distances{1.0, 1.0};
3837
+ TripleDistances *triple_dists;
3838
+ if (axes_triple_distances.has (*axis_tag, &triple_dists))
3839
+ axis_triple_distances = *triple_dists;
3840
+
3841
+ float normalized_min = renormalizeValue ((double) filterRangeMinValue.to_float (), axis_limit, axis_triple_distances, false);
3842
+ float normalized_max = renormalizeValue ((double) filterRangeMaxValue.to_float (), axis_limit, axis_triple_distances, false);
3843
+ out->filterRangeMinValue.set_float (normalized_min);
3844
+ out->filterRangeMaxValue.set_float (normalized_max);
3845
+
3846
+ return_trace (c->serializer->check_assign (out->axisIndex, index_map->get (axisIndex),
3847
+ HB_SERIALIZE_ERROR_INT_OVERFLOW));
3848
+ }
3849
+
3850
+ private:
3851
+ Cond_with_Var_flag_t keep_with_variations (hb_collect_feature_substitutes_with_var_context_t *c,
3852
+ hb_map_t *condition_map /* OUT */) const
3853
+ {
3854
+ //invalid axis index, drop the entire record
3855
+ if (!c->axes_index_tag_map->has (axisIndex))
3856
+ return DROP_RECORD_WITH_VAR;
3857
+
3858
+ hb_tag_t axis_tag = c->axes_index_tag_map->get (axisIndex);
3859
+
3860
+ Triple axis_range (-1.0, 0.0, 1.0);
3861
+ Triple *axis_limit;
3862
+ bool axis_set_by_user = false;
3863
+ if (c->axes_location->has (axis_tag, &axis_limit))
3864
+ {
3865
+ axis_range = *axis_limit;
3866
+ axis_set_by_user = true;
3867
+ }
3868
+
3869
+ float axis_min_val = axis_range.minimum;
3870
+ float axis_default_val = axis_range.middle;
3871
+ float axis_max_val = axis_range.maximum;
3872
+
3873
+ float filter_min_val = filterRangeMinValue.to_float ();
3874
+ float filter_max_val = filterRangeMaxValue.to_float ();
3875
+
3876
+ if (axis_default_val < filter_min_val ||
3877
+ axis_default_val > filter_max_val)
3878
+ c->apply = false;
3879
+
3880
+ //condition not met, drop the entire record
3881
+ if (axis_min_val > filter_max_val || axis_max_val < filter_min_val ||
3882
+ filter_min_val > filter_max_val)
3883
+ return DROP_RECORD_WITH_VAR;
3884
+
3885
+ //condition met and axis pinned, drop the condition
3886
+ if (axis_set_by_user && axis_range.is_point ())
3887
+ return DROP_COND_WITH_VAR;
3888
+
3889
+ if (filter_max_val != axis_max_val || filter_min_val != axis_min_val)
3890
+ {
3891
+ // add axisIndex->value into the hashmap so we can check if the record is
3892
+ // unique with variations
3893
+ int16_t int_filter_max_val = filterRangeMaxValue.to_int ();
3894
+ int16_t int_filter_min_val = filterRangeMinValue.to_int ();
3895
+ hb_codepoint_t val = (int_filter_max_val << 16) + int_filter_min_val;
3896
+
3897
+ condition_map->set (axisIndex, val);
3898
+ return KEEP_COND_WITH_VAR;
3899
+ }
3900
+ return KEEP_RECORD_WITH_VAR;
3901
+ }
3902
+
3903
+ template <typename Instancer>
3904
+ bool evaluate (const int *coords, unsigned int coord_len,
3905
+ Instancer *instancer HB_UNUSED) const
3906
+ {
3907
+ int coord = axisIndex < coord_len ? coords[axisIndex] : 0;
3908
+ return filterRangeMinValue.to_int () <= coord && coord <= filterRangeMaxValue.to_int ();
3909
+ }
3910
+
3911
+ bool sanitize (hb_sanitize_context_t *c) const
3912
+ {
3913
+ TRACE_SANITIZE (this);
3914
+ return_trace (c->check_struct (this));
3915
+ }
3916
+
3917
+ protected:
3918
+ HBUINT16 format; /* Format identifier--format = 1 */
3919
+ HBUINT16 axisIndex;
3920
+ F2DOT14 filterRangeMinValue;
3921
+ F2DOT14 filterRangeMaxValue;
3922
+ public:
3923
+ DEFINE_SIZE_STATIC (8);
3924
+ };
3925
+
3926
+ struct ConditionValue
3927
+ {
3928
+ friend struct Condition;
3929
+
3930
+ bool subset (hb_subset_context_t *c) const
3931
+ {
3932
+ TRACE_SUBSET (this);
3933
+ // TODO(subset)
3934
+ return_trace (false);
3935
+ }
3936
+
3937
+ private:
3938
+ template <typename Instancer>
3939
+ bool evaluate (const int *coords, unsigned int coord_len,
3940
+ Instancer *instancer) const
3941
+ {
3942
+ signed value = defaultValue;
3943
+ value += (*instancer)[varIdx];
3944
+ return value > 0;
3945
+ }
3946
+
3947
+ bool subset (hb_subset_context_t *c,
3948
+ hb_subset_layout_context_t *l,
3949
+ bool insert_catch_all) const
3950
+ {
3951
+ TRACE_SUBSET (this);
3952
+ // TODO(subset)
3953
+ return_trace (false);
3954
+ }
3955
+
3956
+ bool sanitize (hb_sanitize_context_t *c) const
3957
+ {
3958
+ TRACE_SANITIZE (this);
3959
+ return_trace (c->check_struct (this));
3960
+ }
3961
+
3962
+ protected:
3963
+ HBUINT16 format; /* Format identifier--format = 2 */
3964
+ HBINT16 defaultValue; /* Value at default instance. */
3965
+ VarIdx varIdx; /* Variation index */
3966
+ public:
3967
+ DEFINE_SIZE_STATIC (8);
3968
+ };
3969
+
3970
+ struct ConditionAnd
3971
+ {
3972
+ friend struct Condition;
3973
+
3974
+ bool subset (hb_subset_context_t *c) const
3975
+ {
3976
+ TRACE_SUBSET (this);
3977
+ // TODO(subset)
3978
+ return_trace (false);
3979
+ }
3980
+
3981
+ private:
3982
+ template <typename Instancer>
3983
+ bool evaluate (const int *coords, unsigned int coord_len,
3984
+ Instancer *instancer) const
3985
+ {
3986
+ unsigned int count = conditions.len;
3987
+ for (unsigned int i = 0; i < count; i++)
3988
+ if (!_hb_recurse_condition_evaluate (this+conditions.arrayZ[i],
3989
+ coords, coord_len,
3990
+ instancer))
3991
+ return false;
3992
+ return true;
3993
+ }
3994
+
3995
+ bool subset (hb_subset_context_t *c,
3996
+ hb_subset_layout_context_t *l,
3997
+ bool insert_catch_all) const
3998
+ {
3999
+ TRACE_SUBSET (this);
4000
+ // TODO(subset)
4001
+ return_trace (false);
4002
+ }
4003
+
4004
+ bool sanitize (hb_sanitize_context_t *c) const
4005
+ {
4006
+ TRACE_SANITIZE (this);
4007
+ return_trace (conditions.sanitize (c, this));
4008
+ }
4009
+
4010
+ protected:
4011
+ HBUINT16 format; /* Format identifier--format = 3 */
4012
+ Array8OfOffset24To<struct Condition> conditions;
4013
+ public:
4014
+ DEFINE_SIZE_ARRAY (3, conditions);
4015
+ };
4016
+
4017
+ struct ConditionOr
4018
+ {
4019
+ friend struct Condition;
4020
+
4021
+ bool subset (hb_subset_context_t *c) const
4022
+ {
4023
+ TRACE_SUBSET (this);
4024
+ // TODO(subset)
4025
+ return_trace (false);
4026
+ }
4027
+
4028
+ private:
4029
+ template <typename Instancer>
4030
+ bool evaluate (const int *coords, unsigned int coord_len,
4031
+ Instancer *instancer) const
4032
+ {
4033
+ unsigned int count = conditions.len;
4034
+ for (unsigned int i = 0; i < count; i++)
4035
+ if (_hb_recurse_condition_evaluate (this+conditions.arrayZ[i],
4036
+ coords, coord_len,
4037
+ instancer))
4038
+ return true;
4039
+ return false;
4040
+ }
4041
+
4042
+ bool subset (hb_subset_context_t *c,
4043
+ hb_subset_layout_context_t *l,
4044
+ bool insert_catch_all) const
4045
+ {
4046
+ TRACE_SUBSET (this);
4047
+ // TODO(subset)
4048
+ return_trace (false);
4049
+ }
4050
+
4051
+ bool sanitize (hb_sanitize_context_t *c) const
4052
+ {
4053
+ TRACE_SANITIZE (this);
4054
+ return_trace (conditions.sanitize (c, this));
4055
+ }
4056
+
4057
+ protected:
4058
+ HBUINT16 format; /* Format identifier--format = 4 */
4059
+ Array8OfOffset24To<struct Condition> conditions;
4060
+ public:
4061
+ DEFINE_SIZE_ARRAY (3, conditions);
4062
+ };
4063
+
4064
+ struct ConditionNegate
4065
+ {
4066
+ friend struct Condition;
4067
+
4068
+ bool subset (hb_subset_context_t *c) const
4069
+ {
4070
+ TRACE_SUBSET (this);
4071
+ // TODO(subset)
4072
+ return_trace (false);
4073
+ }
4074
+
4075
+ private:
4076
+ template <typename Instancer>
4077
+ bool evaluate (const int *coords, unsigned int coord_len,
4078
+ Instancer *instancer) const
4079
+ {
4080
+ return !_hb_recurse_condition_evaluate (this+condition,
4081
+ coords, coord_len,
4082
+ instancer);
4083
+ }
4084
+
4085
+ bool subset (hb_subset_context_t *c,
4086
+ hb_subset_layout_context_t *l,
4087
+ bool insert_catch_all) const
4088
+ {
4089
+ TRACE_SUBSET (this);
4090
+ // TODO(subset)
4091
+ return_trace (false);
4092
+ }
4093
+
4094
+ bool sanitize (hb_sanitize_context_t *c) const
4095
+ {
4096
+ TRACE_SANITIZE (this);
4097
+ return_trace (condition.sanitize (c, this));
4098
+ }
4099
+
4100
+ protected:
4101
+ HBUINT16 format; /* Format identifier--format = 5 */
4102
+ Offset24To<struct Condition> condition;
4103
+ public:
4104
+ DEFINE_SIZE_STATIC (5);
4105
+ };
4106
+
4107
+ struct Condition
4108
+ {
4109
+ template <typename Instancer>
4110
+ bool evaluate (const int *coords, unsigned int coord_len,
4111
+ Instancer *instancer) const
4112
+ {
4113
+ switch (u.format) {
4114
+ case 1: return u.format1.evaluate (coords, coord_len, instancer);
4115
+ case 2: return u.format2.evaluate (coords, coord_len, instancer);
4116
+ case 3: return u.format3.evaluate (coords, coord_len, instancer);
4117
+ case 4: return u.format4.evaluate (coords, coord_len, instancer);
4118
+ case 5: return u.format5.evaluate (coords, coord_len, instancer);
4119
+ default:return false;
4120
+ }
4121
+ }
4122
+
4123
+ Cond_with_Var_flag_t keep_with_variations (hb_collect_feature_substitutes_with_var_context_t *c,
4124
+ hb_map_t *condition_map /* OUT */) const
4125
+ {
4126
+ switch (u.format) {
4127
+ case 1: return u.format1.keep_with_variations (c, condition_map);
4128
+ // TODO(subset)
4129
+ default: c->apply = false; return KEEP_COND_WITH_VAR;
4130
+ }
4131
+ }
4132
+
4133
+ template <typename context_t, typename ...Ts>
4134
+ typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
4135
+ {
4136
+ if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
4137
+ TRACE_DISPATCH (this, u.format);
4138
+ switch (u.format) {
4139
+ case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
4140
+ case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
4141
+ case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
4142
+ case 4: return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
4143
+ case 5: return_trace (c->dispatch (u.format5, std::forward<Ts> (ds)...));
4144
+ default:return_trace (c->default_return_value ());
4145
+ }
4146
+ }
4147
+
4148
+ bool sanitize (hb_sanitize_context_t *c) const
4149
+ {
4150
+ TRACE_SANITIZE (this);
4151
+ if (!u.format.sanitize (c)) return_trace (false);
4152
+ hb_barrier ();
4153
+ switch (u.format) {
4154
+ case 1: return_trace (u.format1.sanitize (c));
4155
+ case 2: return_trace (u.format2.sanitize (c));
4156
+ case 3: return_trace (u.format3.sanitize (c));
4157
+ case 4: return_trace (u.format4.sanitize (c));
4158
+ case 5: return_trace (u.format5.sanitize (c));
4159
+ default:return_trace (true);
4160
+ }
4161
+ }
4162
+
4163
+ protected:
4164
+ union {
4165
+ HBUINT16 format; /* Format identifier */
4166
+ ConditionAxisRange format1;
4167
+ ConditionValue format2;
4168
+ ConditionAnd format3;
4169
+ ConditionOr format4;
4170
+ ConditionNegate format5;
4171
+ } u;
4172
+ public:
4173
+ DEFINE_SIZE_UNION (2, format);
4174
+ };
4175
+
4176
+ template <typename Instancer>
4177
+ bool
4178
+ _hb_recurse_condition_evaluate (const struct Condition &condition,
4179
+ const int *coords,
4180
+ unsigned int coord_len,
4181
+ Instancer *instancer)
4182
+ {
4183
+ return condition.evaluate (coords, coord_len, instancer);
4184
+ }
4185
+
4186
+ struct ConditionList
4187
+ {
4188
+ const Condition& operator[] (unsigned i) const
4189
+ { return this+conditions[i]; }
4190
+
4191
+ bool sanitize (hb_sanitize_context_t *c) const
4192
+ {
4193
+ TRACE_SANITIZE (this);
4194
+ return_trace (conditions.sanitize (c, this));
4195
+ }
4196
+
4197
+ protected:
4198
+ Array32OfOffset32To<Condition> conditions;
4199
+ public:
4200
+ DEFINE_SIZE_ARRAY (4, conditions);
4201
+ };
4202
+
4203
+ struct ConditionSet
4204
+ {
4205
+ bool evaluate (const int *coords, unsigned int coord_len,
4206
+ ItemVarStoreInstancer *instancer) const
4207
+ {
4208
+ unsigned int count = conditions.len;
4209
+ for (unsigned int i = 0; i < count; i++)
4210
+ if (!(this+conditions.arrayZ[i]).evaluate (coords, coord_len, instancer))
4211
+ return false;
4212
+ return true;
4213
+ }
4214
+
4215
+ void keep_with_variations (hb_collect_feature_substitutes_with_var_context_t *c) const
4216
+ {
4217
+ hb_map_t *condition_map = hb_map_create ();
4218
+ if (unlikely (!condition_map)) return;
4219
+ hb::shared_ptr<hb_map_t> p {condition_map};
4220
+
4221
+ hb_set_t *cond_set = hb_set_create ();
4222
+ if (unlikely (!cond_set)) return;
4223
+ hb::shared_ptr<hb_set_t> s {cond_set};
4224
+
4225
+ c->apply = true;
4226
+ bool should_keep = false;
4227
+ unsigned num_kept_cond = 0, cond_idx = 0;
4228
+ for (const auto& offset : conditions)
4229
+ {
4230
+ Cond_with_Var_flag_t ret = (this+offset).keep_with_variations (c, condition_map);
4231
+ // condition is not met or condition out of range, drop the entire record
4232
+ if (ret == DROP_RECORD_WITH_VAR)
4233
+ return;
4234
+
4235
+ if (ret == KEEP_COND_WITH_VAR)
4236
+ {
4237
+ should_keep = true;
4238
+ cond_set->add (cond_idx);
4239
+ num_kept_cond++;
4240
+ }
4241
+
4242
+ if (ret == KEEP_RECORD_WITH_VAR)
4243
+ should_keep = true;
4244
+
4245
+ cond_idx++;
4246
+ }
4247
+
4248
+ if (!should_keep) return;
4249
+
4250
+ //check if condition_set is unique with variations
4251
+ if (c->conditionset_map->has (p))
4252
+ //duplicate found, drop the entire record
4253
+ return;
4254
+
4255
+ c->conditionset_map->set (p, 1);
4256
+ c->record_cond_idx_map->set (c->cur_record_idx, s);
4257
+ if (should_keep && num_kept_cond == 0)
4258
+ c->universal = true;
4259
+ }
4260
+
4261
+ bool subset (hb_subset_context_t *c,
4262
+ hb_subset_layout_context_t *l,
4263
+ bool insert_catch_all) const
4264
+ {
4265
+ TRACE_SUBSET (this);
4266
+ auto *out = c->serializer->start_embed (this);
4267
+ if (unlikely (!out || !c->serializer->extend_min (out))) return_trace (false);
4268
+
4269
+ if (insert_catch_all) return_trace (true);
4270
+
4271
+ hb_set_t *retained_cond_set = nullptr;
4272
+ if (l->feature_record_cond_idx_map != nullptr)
4273
+ retained_cond_set = l->feature_record_cond_idx_map->get (l->cur_feature_var_record_idx);
4274
+
4275
+ unsigned int count = conditions.len;
4276
+ for (unsigned int i = 0; i < count; i++)
4277
+ {
4278
+ if (retained_cond_set != nullptr && !retained_cond_set->has (i))
4279
+ continue;
4280
+ subset_offset_array (c, out->conditions, this) (conditions[i]);
4281
+ }
4282
+
4283
+ return_trace (bool (out->conditions));
4284
+ }
4285
+
4286
+ bool sanitize (hb_sanitize_context_t *c) const
4287
+ {
4288
+ TRACE_SANITIZE (this);
4289
+ return_trace (conditions.sanitize (c, this));
4290
+ }
4291
+
4292
+ protected:
4293
+ Array16OfOffset32To<Condition> conditions;
4294
+ public:
4295
+ DEFINE_SIZE_ARRAY (2, conditions);
4296
+ };
4297
+
4298
+ struct FeatureTableSubstitutionRecord
4299
+ {
4300
+ friend struct FeatureTableSubstitution;
4301
+
4302
+ void collect_lookups (const void *base, hb_set_t *lookup_indexes /* OUT */) const
4303
+ {
4304
+ return (base+feature).add_lookup_indexes_to (lookup_indexes);
4305
+ }
4306
+
4307
+ void closure_features (const void *base,
4308
+ const hb_map_t *lookup_indexes,
4309
+ hb_set_t *feature_indexes /* OUT */) const
4310
+ {
4311
+ if ((base+feature).intersects_lookup_indexes (lookup_indexes))
4312
+ feature_indexes->add (featureIndex);
4313
+ }
4314
+
4315
+ void collect_feature_substitutes_with_variations (hb_hashmap_t<unsigned, const Feature*> *feature_substitutes_map,
4316
+ hb_set_t& catch_all_record_feature_idxes,
4317
+ const hb_set_t *feature_indices,
4318
+ const void *base) const
4319
+ {
4320
+ if (feature_indices->has (featureIndex))
4321
+ {
4322
+ feature_substitutes_map->set (featureIndex, &(base+feature));
4323
+ catch_all_record_feature_idxes.add (featureIndex);
4324
+ }
4325
+ }
4326
+
4327
+ bool serialize (hb_subset_layout_context_t *c,
4328
+ unsigned feature_index,
4329
+ const Feature *f, const Tag *tag)
4330
+ {
4331
+ TRACE_SERIALIZE (this);
4332
+ hb_serialize_context_t *s = c->subset_context->serializer;
4333
+ if (unlikely (!s->extend_min (this))) return_trace (false);
4334
+
4335
+ uint32_t *new_feature_idx;
4336
+ if (!c->feature_index_map->has (feature_index, &new_feature_idx))
4337
+ return_trace (false);
4338
+
4339
+ if (!s->check_assign (featureIndex, *new_feature_idx, HB_SERIALIZE_ERROR_INT_OVERFLOW))
4340
+ return_trace (false);
4341
+
4342
+ s->push ();
4343
+ bool ret = f->subset (c->subset_context, c, tag);
4344
+ if (ret) s->add_link (feature, s->pop_pack ());
4345
+ else s->pop_discard ();
4346
+
4347
+ return_trace (ret);
4348
+ }
4349
+
4350
+ bool subset (hb_subset_layout_context_t *c, const void *base) const
4351
+ {
4352
+ TRACE_SUBSET (this);
4353
+ uint32_t *new_feature_index;
4354
+ if (!c->feature_index_map->has (featureIndex, &new_feature_index))
4355
+ return_trace (false);
4356
+
4357
+ auto *out = c->subset_context->serializer->embed (this);
4358
+ if (unlikely (!out)) return_trace (false);
4359
+
4360
+ out->featureIndex = *new_feature_index;
4361
+ return_trace (out->feature.serialize_subset (c->subset_context, feature, base, c));
4362
+ }
4363
+
4364
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
4365
+ {
4366
+ TRACE_SANITIZE (this);
4367
+ return_trace (c->check_struct (this) && feature.sanitize (c, base));
4368
+ }
4369
+
4370
+ protected:
4371
+ HBUINT16 featureIndex;
4372
+ Offset32To<Feature> feature;
4373
+ public:
4374
+ DEFINE_SIZE_STATIC (6);
4375
+ };
4376
+
4377
+ struct FeatureTableSubstitution
4378
+ {
4379
+ const Feature *find_substitute (unsigned int feature_index) const
4380
+ {
4381
+ unsigned int count = substitutions.len;
4382
+ for (unsigned int i = 0; i < count; i++)
4383
+ {
4384
+ const FeatureTableSubstitutionRecord &record = substitutions.arrayZ[i];
4385
+ if (record.featureIndex == feature_index)
4386
+ return &(this+record.feature);
4387
+ }
4388
+ return nullptr;
4389
+ }
4390
+
4391
+ void collect_lookups (const hb_set_t *feature_indexes,
4392
+ hb_set_t *lookup_indexes /* OUT */) const
4393
+ {
4394
+ + hb_iter (substitutions)
4395
+ | hb_filter (feature_indexes, &FeatureTableSubstitutionRecord::featureIndex)
4396
+ | hb_apply ([this, lookup_indexes] (const FeatureTableSubstitutionRecord& r)
4397
+ { r.collect_lookups (this, lookup_indexes); })
4398
+ ;
4399
+ }
4400
+
4401
+ void closure_features (const hb_map_t *lookup_indexes,
4402
+ hb_set_t *feature_indexes /* OUT */) const
4403
+ {
4404
+ for (const FeatureTableSubstitutionRecord& record : substitutions)
4405
+ record.closure_features (this, lookup_indexes, feature_indexes);
4406
+ }
4407
+
4408
+ bool intersects_features (const hb_map_t *feature_index_map) const
4409
+ {
4410
+ for (const FeatureTableSubstitutionRecord& record : substitutions)
4411
+ {
4412
+ if (feature_index_map->has (record.featureIndex)) return true;
4413
+ }
4414
+ return false;
4415
+ }
4416
+
4417
+ void collect_feature_substitutes_with_variations (hb_collect_feature_substitutes_with_var_context_t *c) const
4418
+ {
4419
+ for (const FeatureTableSubstitutionRecord& record : substitutions)
4420
+ record.collect_feature_substitutes_with_variations (c->feature_substitutes_map,
4421
+ c->catch_all_record_feature_idxes,
4422
+ c->feature_indices, this);
4423
+ }
4424
+
4425
+ bool subset (hb_subset_context_t *c,
4426
+ hb_subset_layout_context_t *l,
4427
+ bool insert_catch_all) const
4428
+ {
4429
+ TRACE_SUBSET (this);
4430
+ auto *out = c->serializer->start_embed (*this);
4431
+ if (unlikely (!out || !c->serializer->extend_min (out))) return_trace (false);
4432
+
4433
+ out->version.major = version.major;
4434
+ out->version.minor = version.minor;
4435
+
4436
+ if (insert_catch_all)
4437
+ {
4438
+ for (unsigned feature_index : *(l->catch_all_record_feature_idxes))
4439
+ {
4440
+ hb_pair_t<const void*, const void*> *p;
4441
+ if (!l->feature_idx_tag_map->has (feature_index, &p))
4442
+ return_trace (false);
4443
+ auto *o = out->substitutions.serialize_append (c->serializer);
4444
+ if (!o->serialize (l, feature_index,
4445
+ reinterpret_cast<const Feature*> (p->first),
4446
+ reinterpret_cast<const Tag*> (p->second)))
4447
+ return_trace (false);
4448
+ }
4449
+ return_trace (true);
4450
+ }
4451
+
4452
+ + substitutions.iter ()
4453
+ | hb_apply (subset_record_array (l, &(out->substitutions), this))
4454
+ ;
4455
+
4456
+ return_trace (bool (out->substitutions));
4457
+ }
4458
+
4459
+ bool sanitize (hb_sanitize_context_t *c) const
4460
+ {
4461
+ TRACE_SANITIZE (this);
4462
+ return_trace (version.sanitize (c) &&
4463
+ hb_barrier () &&
4464
+ likely (version.major == 1) &&
4465
+ substitutions.sanitize (c, this));
4466
+ }
4467
+
4468
+ protected:
4469
+ FixedVersion<> version; /* Version--0x00010000u */
4470
+ Array16Of<FeatureTableSubstitutionRecord>
4471
+ substitutions;
4472
+ public:
4473
+ DEFINE_SIZE_ARRAY (6, substitutions);
4474
+ };
4475
+
4476
+ struct FeatureVariationRecord
4477
+ {
4478
+ friend struct FeatureVariations;
4479
+
4480
+ void collect_lookups (const void *base,
4481
+ const hb_set_t *feature_indexes,
4482
+ hb_set_t *lookup_indexes /* OUT */) const
4483
+ {
4484
+ return (base+substitutions).collect_lookups (feature_indexes, lookup_indexes);
4485
+ }
4486
+
4487
+ void closure_features (const void *base,
4488
+ const hb_map_t *lookup_indexes,
4489
+ hb_set_t *feature_indexes /* OUT */) const
4490
+ {
4491
+ (base+substitutions).closure_features (lookup_indexes, feature_indexes);
4492
+ }
4493
+
4494
+ bool intersects_features (const void *base, const hb_map_t *feature_index_map) const
4495
+ {
4496
+ return (base+substitutions).intersects_features (feature_index_map);
4497
+ }
4498
+
4499
+ void collect_feature_substitutes_with_variations (hb_collect_feature_substitutes_with_var_context_t *c,
4500
+ const void *base) const
4501
+ {
4502
+ (base+conditions).keep_with_variations (c);
4503
+ if (c->apply && !c->variation_applied)
4504
+ {
4505
+ (base+substitutions).collect_feature_substitutes_with_variations (c);
4506
+ c->variation_applied = true; // set variations only once
4507
+ }
4508
+ }
4509
+
4510
+ bool subset (hb_subset_layout_context_t *c, const void *base,
4511
+ bool insert_catch_all = false) const
4512
+ {
4513
+ TRACE_SUBSET (this);
4514
+ auto *out = c->subset_context->serializer->embed (this);
4515
+ if (unlikely (!out)) return_trace (false);
4516
+
4517
+ out->conditions.serialize_subset (c->subset_context, conditions, base, c, insert_catch_all);
4518
+ out->substitutions.serialize_subset (c->subset_context, substitutions, base, c, insert_catch_all);
4519
+
4520
+ return_trace (true);
4521
+ }
4522
+
4523
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
4524
+ {
4525
+ TRACE_SANITIZE (this);
4526
+ return_trace (conditions.sanitize (c, base) &&
4527
+ substitutions.sanitize (c, base));
4528
+ }
4529
+
4530
+ protected:
4531
+ Offset32To<ConditionSet>
4532
+ conditions;
4533
+ Offset32To<FeatureTableSubstitution>
4534
+ substitutions;
4535
+ public:
4536
+ DEFINE_SIZE_STATIC (8);
4537
+ };
4538
+
4539
+ struct FeatureVariations
4540
+ {
4541
+ static constexpr unsigned NOT_FOUND_INDEX = 0xFFFFFFFFu;
4542
+
4543
+ bool find_index (const int *coords, unsigned int coord_len,
4544
+ unsigned int *index,
4545
+ ItemVarStoreInstancer *instancer) const
4546
+ {
4547
+ unsigned int count = varRecords.len;
4548
+ for (unsigned int i = 0; i < count; i++)
4549
+ {
4550
+ const FeatureVariationRecord &record = varRecords.arrayZ[i];
4551
+ if ((this+record.conditions).evaluate (coords, coord_len, instancer))
4552
+ {
4553
+ *index = i;
4554
+ return true;
4555
+ }
4556
+ }
4557
+ *index = NOT_FOUND_INDEX;
4558
+ return false;
4559
+ }
4560
+
4561
+ const Feature *find_substitute (unsigned int variations_index,
4562
+ unsigned int feature_index) const
4563
+ {
4564
+ const FeatureVariationRecord &record = varRecords[variations_index];
4565
+ return (this+record.substitutions).find_substitute (feature_index);
4566
+ }
4567
+
4568
+ void collect_feature_substitutes_with_variations (hb_collect_feature_substitutes_with_var_context_t *c) const
4569
+ {
4570
+ unsigned int count = varRecords.len;
4571
+ for (unsigned int i = 0; i < count; i++)
4572
+ {
4573
+ c->cur_record_idx = i;
4574
+ varRecords[i].collect_feature_substitutes_with_variations (c, this);
4575
+ if (c->universal)
4576
+ break;
4577
+ }
4578
+ if (c->universal || c->record_cond_idx_map->is_empty ())
4579
+ c->catch_all_record_feature_idxes.reset ();
4580
+ }
4581
+
4582
+ FeatureVariations* copy (hb_serialize_context_t *c) const
4583
+ {
4584
+ TRACE_SERIALIZE (this);
4585
+ return_trace (c->embed (*this));
4586
+ }
4587
+
4588
+ void collect_lookups (const hb_set_t *feature_indexes,
4589
+ const hb_hashmap_t<unsigned, hb::shared_ptr<hb_set_t>> *feature_record_cond_idx_map,
4590
+ hb_set_t *lookup_indexes /* OUT */) const
4591
+ {
4592
+ unsigned count = varRecords.len;
4593
+ for (unsigned int i = 0; i < count; i++)
4594
+ {
4595
+ if (feature_record_cond_idx_map &&
4596
+ !feature_record_cond_idx_map->has (i))
4597
+ continue;
4598
+ varRecords[i].collect_lookups (this, feature_indexes, lookup_indexes);
4599
+ }
4600
+ }
4601
+
4602
+ void closure_features (const hb_map_t *lookup_indexes,
4603
+ const hb_hashmap_t<unsigned, hb::shared_ptr<hb_set_t>> *feature_record_cond_idx_map,
4604
+ hb_set_t *feature_indexes /* OUT */) const
4605
+ {
4606
+ unsigned int count = varRecords.len;
4607
+ for (unsigned int i = 0; i < count; i++)
4608
+ {
4609
+ if (feature_record_cond_idx_map != nullptr &&
4610
+ !feature_record_cond_idx_map->has (i))
4611
+ continue;
4612
+ varRecords[i].closure_features (this, lookup_indexes, feature_indexes);
4613
+ }
4614
+ }
4615
+
4616
+ bool subset (hb_subset_context_t *c,
4617
+ hb_subset_layout_context_t *l) const
4618
+ {
4619
+ TRACE_SUBSET (this);
4620
+ auto *out = c->serializer->start_embed (*this);
4621
+ if (unlikely (!out || !c->serializer->extend_min (out))) return_trace (false);
4622
+
4623
+ out->version.major = version.major;
4624
+ out->version.minor = version.minor;
4625
+
4626
+ int keep_up_to = -1;
4627
+ for (int i = varRecords.len - 1; i >= 0; i--) {
4628
+ if (varRecords[i].intersects_features (this, l->feature_index_map)) {
4629
+ keep_up_to = i;
4630
+ break;
4631
+ }
4632
+ }
4633
+
4634
+ unsigned count = (unsigned) (keep_up_to + 1);
4635
+ for (unsigned i = 0; i < count; i++)
4636
+ {
4637
+ if (l->feature_record_cond_idx_map != nullptr &&
4638
+ !l->feature_record_cond_idx_map->has (i))
4639
+ continue;
4640
+
4641
+ l->cur_feature_var_record_idx = i;
4642
+ subset_record_array (l, &(out->varRecords), this) (varRecords[i]);
4643
+ }
4644
+
4645
+ if (out->varRecords.len && !l->catch_all_record_feature_idxes->is_empty ())
4646
+ {
4647
+ bool insert_catch_all_record = true;
4648
+ subset_record_array (l, &(out->varRecords), this, insert_catch_all_record) (varRecords[0]);
4649
+ }
4650
+
4651
+ return_trace (bool (out->varRecords));
4652
+ }
4653
+
4654
+ bool sanitize (hb_sanitize_context_t *c) const
4655
+ {
4656
+ TRACE_SANITIZE (this);
4657
+ return_trace (version.sanitize (c) &&
4658
+ hb_barrier () &&
4659
+ likely (version.major == 1) &&
4660
+ varRecords.sanitize (c, this));
4661
+ }
4662
+
4663
+ protected:
4664
+ FixedVersion<> version; /* Version--0x00010000u */
4665
+ Array32Of<FeatureVariationRecord>
4666
+ varRecords;
4667
+ public:
4668
+ DEFINE_SIZE_ARRAY_SIZED (8, varRecords);
4669
+ };
4670
+
4671
+
4672
+ /*
4673
+ * Device Tables
4674
+ */
4675
+
4676
+ struct HintingDevice
4677
+ {
4678
+ friend struct Device;
4679
+
4680
+ private:
4681
+
4682
+ hb_position_t get_x_delta (hb_font_t *font) const
4683
+ { return get_delta (font->x_ppem, font->x_scale); }
4684
+
4685
+ hb_position_t get_y_delta (hb_font_t *font) const
4686
+ { return get_delta (font->y_ppem, font->y_scale); }
4687
+
4688
+ public:
4689
+
4690
+ unsigned int get_size () const
4691
+ {
4692
+ unsigned int f = deltaFormat;
4693
+ if (unlikely (f < 1 || f > 3 || startSize > endSize)) return 3 * HBUINT16::static_size;
4694
+ return HBUINT16::static_size * (4 + ((endSize - startSize) >> (4 - f)));
4695
+ }
4696
+
4697
+ bool sanitize (hb_sanitize_context_t *c) const
4698
+ {
4699
+ TRACE_SANITIZE (this);
4700
+ return_trace (c->check_struct (this) && c->check_range (this, this->get_size ()));
4701
+ }
4702
+
4703
+ HintingDevice* copy (hb_serialize_context_t *c) const
4704
+ {
4705
+ TRACE_SERIALIZE (this);
4706
+ return_trace (c->embed<HintingDevice> (this));
4707
+ }
4708
+
4709
+ private:
4710
+
4711
+ int get_delta (unsigned int ppem, int scale) const
4712
+ {
4713
+ if (!ppem) return 0;
4714
+
4715
+ int pixels = get_delta_pixels (ppem);
4716
+
4717
+ if (!pixels) return 0;
4718
+
4719
+ return (int) (pixels * (int64_t) scale / ppem);
4720
+ }
4721
+ int get_delta_pixels (unsigned int ppem_size) const
4722
+ {
4723
+ unsigned int f = deltaFormat;
4724
+ if (unlikely (f < 1 || f > 3))
4725
+ return 0;
4726
+
4727
+ if (ppem_size < startSize || ppem_size > endSize)
4728
+ return 0;
4729
+
4730
+ unsigned int s = ppem_size - startSize;
4731
+
4732
+ unsigned int byte = deltaValueZ[s >> (4 - f)];
4733
+ unsigned int bits = (byte >> (16 - (((s & ((1 << (4 - f)) - 1)) + 1) << f)));
4734
+ unsigned int mask = (0xFFFFu >> (16 - (1 << f)));
4735
+
4736
+ int delta = bits & mask;
4737
+
4738
+ if ((unsigned int) delta >= ((mask + 1) >> 1))
4739
+ delta -= mask + 1;
4740
+
4741
+ return delta;
4742
+ }
4743
+
4744
+ protected:
4745
+ HBUINT16 startSize; /* Smallest size to correct--in ppem */
4746
+ HBUINT16 endSize; /* Largest size to correct--in ppem */
4747
+ HBUINT16 deltaFormat; /* Format of DeltaValue array data: 1, 2, or 3
4748
+ * 1 Signed 2-bit value, 8 values per uint16
4749
+ * 2 Signed 4-bit value, 4 values per uint16
4750
+ * 3 Signed 8-bit value, 2 values per uint16
4751
+ */
4752
+ UnsizedArrayOf<HBUINT16>
4753
+ deltaValueZ; /* Array of compressed data */
4754
+ public:
4755
+ DEFINE_SIZE_ARRAY (6, deltaValueZ);
4756
+ };
4757
+
4758
+ struct VariationDevice
4759
+ {
4760
+ friend struct Device;
4761
+
4762
+ private:
4763
+
4764
+ hb_position_t get_x_delta (hb_font_t *font,
4765
+ const ItemVariationStore &store,
4766
+ ItemVariationStore::cache_t *store_cache = nullptr) const
4767
+ { return font->em_scalef_x (get_delta (font, store, store_cache)); }
4768
+
4769
+ hb_position_t get_y_delta (hb_font_t *font,
4770
+ const ItemVariationStore &store,
4771
+ ItemVariationStore::cache_t *store_cache = nullptr) const
4772
+ { return font->em_scalef_y (get_delta (font, store, store_cache)); }
4773
+
4774
+ VariationDevice* copy (hb_serialize_context_t *c,
4775
+ const hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *layout_variation_idx_delta_map) const
4776
+ {
4777
+ TRACE_SERIALIZE (this);
4778
+ if (!layout_variation_idx_delta_map) return_trace (nullptr);
4779
+
4780
+ hb_pair_t<unsigned, int> *v;
4781
+ if (!layout_variation_idx_delta_map->has (varIdx, &v))
4782
+ return_trace (nullptr);
4783
+
4784
+ c->start_zerocopy (this->static_size);
4785
+ auto *out = c->embed (this);
4786
+ if (unlikely (!out)) return_trace (nullptr);
4787
+
4788
+ if (!c->check_assign (out->varIdx, hb_first (*v), HB_SERIALIZE_ERROR_INT_OVERFLOW))
4789
+ return_trace (nullptr);
4790
+ return_trace (out);
4791
+ }
4792
+
4793
+ void collect_variation_index (hb_collect_variation_indices_context_t *c) const
4794
+ { c->layout_variation_indices->add (varIdx); }
4795
+
4796
+ bool sanitize (hb_sanitize_context_t *c) const
4797
+ {
4798
+ TRACE_SANITIZE (this);
4799
+ return_trace (c->check_struct (this));
4800
+ }
4801
+
4802
+ private:
4803
+
4804
+ float get_delta (hb_font_t *font,
4805
+ const ItemVariationStore &store,
4806
+ ItemVariationStore::cache_t *store_cache = nullptr) const
4807
+ {
4808
+ return store.get_delta (varIdx, font->coords, font->num_coords, (ItemVariationStore::cache_t *) store_cache);
4809
+ }
4810
+
4811
+ protected:
4812
+ VarIdx varIdx; /* Variation index */
4813
+ HBUINT16 deltaFormat; /* Format identifier for this table: 0x0x8000 */
4814
+ public:
4815
+ DEFINE_SIZE_STATIC (6);
4816
+ };
4817
+
4818
+ struct DeviceHeader
4819
+ {
4820
+ protected:
4821
+ HBUINT16 reserved1;
4822
+ HBUINT16 reserved2;
4823
+ public:
4824
+ HBUINT16 format; /* Format identifier */
4825
+ public:
4826
+ DEFINE_SIZE_STATIC (6);
4827
+ };
4828
+
4829
+ struct Device
4830
+ {
4831
+ hb_position_t get_x_delta (hb_font_t *font,
4832
+ const ItemVariationStore &store=Null (ItemVariationStore),
4833
+ ItemVariationStore::cache_t *store_cache = nullptr) const
4834
+ {
4835
+ switch (u.b.format)
4836
+ {
4837
+ #ifndef HB_NO_HINTING
4838
+ case 1: case 2: case 3:
4839
+ return u.hinting.get_x_delta (font);
4840
+ #endif
4841
+ #ifndef HB_NO_VAR
4842
+ case 0x8000:
4843
+ return u.variation.get_x_delta (font, store, store_cache);
4844
+ #endif
4845
+ default:
4846
+ return 0;
4847
+ }
4848
+ }
4849
+ hb_position_t get_y_delta (hb_font_t *font,
4850
+ const ItemVariationStore &store=Null (ItemVariationStore),
4851
+ ItemVariationStore::cache_t *store_cache = nullptr) const
4852
+ {
4853
+ switch (u.b.format)
4854
+ {
4855
+ case 1: case 2: case 3:
4856
+ #ifndef HB_NO_HINTING
4857
+ return u.hinting.get_y_delta (font);
4858
+ #endif
4859
+ #ifndef HB_NO_VAR
4860
+ case 0x8000:
4861
+ return u.variation.get_y_delta (font, store, store_cache);
4862
+ #endif
4863
+ default:
4864
+ return 0;
4865
+ }
4866
+ }
4867
+
4868
+ bool sanitize (hb_sanitize_context_t *c) const
4869
+ {
4870
+ TRACE_SANITIZE (this);
4871
+ if (!u.b.format.sanitize (c)) return_trace (false);
4872
+ switch (u.b.format) {
4873
+ #ifndef HB_NO_HINTING
4874
+ case 1: case 2: case 3:
4875
+ return_trace (u.hinting.sanitize (c));
4876
+ #endif
4877
+ #ifndef HB_NO_VAR
4878
+ case 0x8000:
4879
+ return_trace (u.variation.sanitize (c));
4880
+ #endif
4881
+ default:
4882
+ return_trace (true);
4883
+ }
4884
+ }
4885
+
4886
+ Device* copy (hb_serialize_context_t *c,
4887
+ const hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *layout_variation_idx_delta_map=nullptr) const
4888
+ {
4889
+ TRACE_SERIALIZE (this);
4890
+ switch (u.b.format) {
4891
+ #ifndef HB_NO_HINTING
4892
+ case 1:
4893
+ case 2:
4894
+ case 3:
4895
+ return_trace (reinterpret_cast<Device *> (u.hinting.copy (c)));
4896
+ #endif
4897
+ #ifndef HB_NO_VAR
4898
+ case 0x8000:
4899
+ return_trace (reinterpret_cast<Device *> (u.variation.copy (c, layout_variation_idx_delta_map)));
4900
+ #endif
4901
+ default:
4902
+ return_trace (nullptr);
4903
+ }
4904
+ }
4905
+
4906
+ void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
4907
+ {
4908
+ switch (u.b.format) {
4909
+ #ifndef HB_NO_HINTING
4910
+ case 1:
4911
+ case 2:
4912
+ case 3:
4913
+ return;
4914
+ #endif
4915
+ #ifndef HB_NO_VAR
4916
+ case 0x8000:
4917
+ u.variation.collect_variation_index (c);
4918
+ return;
4919
+ #endif
4920
+ default:
4921
+ return;
4922
+ }
4923
+ }
4924
+
4925
+ unsigned get_variation_index () const
4926
+ {
4927
+ switch (u.b.format) {
4928
+ #ifndef HB_NO_VAR
4929
+ case 0x8000:
4930
+ return u.variation.varIdx;
4931
+ #endif
4932
+ default:
4933
+ return HB_OT_LAYOUT_NO_VARIATIONS_INDEX;
4934
+ }
4935
+ }
4936
+
4937
+ protected:
4938
+ union {
4939
+ DeviceHeader b;
4940
+ HintingDevice hinting;
4941
+ #ifndef HB_NO_VAR
4942
+ VariationDevice variation;
4943
+ #endif
4944
+ } u;
4945
+ public:
4946
+ DEFINE_SIZE_UNION (6, b);
4947
+ };
4948
+
4949
+
4950
+ } /* namespace OT */
4951
+
4952
+
4953
+ #endif /* HB_OT_LAYOUT_COMMON_HH */