@papyrus-sdk/engine-native 0.1.0 → 0.1.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 (323) hide show
  1. package/android/build.gradle +40 -40
  2. package/android/src/main/AndroidManifest.xml +3 -3
  3. package/android/src/main/java/com/papyrus/engine/PapyrusEngineStore.java +71 -71
  4. package/android/src/main/java/com/papyrus/engine/PapyrusNativeEngineModule.java +529 -529
  5. package/android/src/main/java/com/papyrus/engine/PapyrusNativeEngineModule.kt +540 -0
  6. package/android/src/main/java/com/papyrus/engine/PapyrusOutline.java +20 -20
  7. package/android/src/main/java/com/papyrus/engine/PapyrusOutlineItem.java +13 -13
  8. package/android/src/main/java/com/papyrus/engine/PapyrusPackage.java +24 -24
  9. package/android/src/main/java/com/papyrus/engine/PapyrusPageView.java +86 -86
  10. package/android/src/main/java/com/papyrus/engine/PapyrusPageViewManager.java +16 -16
  11. package/android/src/main/java/com/papyrus/engine/PapyrusPageViewModule.kt +12 -0
  12. package/android/src/main/java/com/papyrus/engine/PapyrusTextHit.java +15 -15
  13. package/android/src/main/java/com/papyrus/engine/PapyrusTextSearch.java +20 -20
  14. package/android/src/main/java/com/papyrus/engine/PapyrusTextSelect.java +20 -20
  15. package/android/src/main/java/com/papyrus/engine/PapyrusTextSelection.java +11 -11
  16. package/dist/index.d.mts +95 -7
  17. package/dist/index.d.ts +95 -7
  18. package/dist/index.js +683 -12
  19. package/dist/index.js.map +1 -1
  20. package/dist/index.mjs +684 -13
  21. package/dist/index.mjs.map +1 -1
  22. package/ios/PapyrusNativeEngine.m +447 -372
  23. package/ios/PapyrusNativeEngine.podspec +15 -15
  24. package/ios/PapyrusPageView.h +19 -16
  25. package/ios/PapyrusPageView.m +63 -54
  26. package/ios/PapyrusPageViewManager.m +19 -19
  27. package/package.json +11 -7
  28. package/react-native.config.js +10 -10
  29. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  30. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  31. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  32. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/cache-v2-55a2e41fcdfef7f23046.json +0 -1323
  33. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/cmakeFiles-v1-ce719ceafe10fdc060d9.json +0 -184
  34. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/codemodel-v2-ba59984c0779dea51592.json +0 -60
  35. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +0 -14
  36. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/index-2025-12-22T13-33-34-0909.json +0 -92
  37. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/target-papyrus_text-Debug-29cd4996bc13fe24a65c.json +0 -168
  38. package/android/.cxx/Debug/6t29645j/arm64-v8a/.ninja_deps +0 -0
  39. package/android/.cxx/Debug/6t29645j/arm64-v8a/.ninja_log +0 -20
  40. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeCache.txt +0 -400
  41. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +0 -72
  42. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +0 -83
  43. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  44. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  45. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +0 -15
  46. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +0 -803
  47. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  48. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
  49. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  50. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/CMakeOutput.log +0 -264
  51. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/TargetDirectories.txt +0 -3
  52. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/cmake.check_cache +0 -1
  53. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/papyrus_text.dir/papyrus_outline.cpp.o +0 -0
  54. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/papyrus_text.dir/papyrus_text_search.cpp.o +0 -0
  55. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/rules.ninja +0 -64
  56. package/android/.cxx/Debug/6t29645j/arm64-v8a/additional_project_files.txt +0 -0
  57. package/android/.cxx/Debug/6t29645j/arm64-v8a/android_gradle_build.json +0 -38
  58. package/android/.cxx/Debug/6t29645j/arm64-v8a/android_gradle_build_mini.json +0 -27
  59. package/android/.cxx/Debug/6t29645j/arm64-v8a/build.ninja +0 -158
  60. package/android/.cxx/Debug/6t29645j/arm64-v8a/build_file_index.txt +0 -1
  61. package/android/.cxx/Debug/6t29645j/arm64-v8a/cmake_install.cmake +0 -54
  62. package/android/.cxx/Debug/6t29645j/arm64-v8a/compile_commands.json +0 -12
  63. package/android/.cxx/Debug/6t29645j/arm64-v8a/compile_commands.json.bin +0 -0
  64. package/android/.cxx/Debug/6t29645j/arm64-v8a/configure_fingerprint.bin +0 -28
  65. package/android/.cxx/Debug/6t29645j/arm64-v8a/metadata_generation_command.txt +0 -19
  66. package/android/.cxx/Debug/6t29645j/arm64-v8a/prefab_config.json +0 -4
  67. package/android/.cxx/Debug/6t29645j/arm64-v8a/symbol_folder_index.txt +0 -1
  68. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  69. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  70. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  71. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/cache-v2-7f933b968e76d6ce336c.json +0 -1323
  72. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/cmakeFiles-v1-439d2bc9e04bf2a43452.json +0 -184
  73. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/codemodel-v2-efc4cfee3dc3a5ec05be.json +0 -60
  74. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +0 -14
  75. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/index-2025-12-22T13-33-36-0881.json +0 -92
  76. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/target-papyrus_text-Debug-e3f83458cbaf3644c279.json +0 -168
  77. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.ninja_deps +0 -0
  78. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.ninja_log +0 -20
  79. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeCache.txt +0 -400
  80. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +0 -72
  81. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +0 -83
  82. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  83. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  84. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +0 -15
  85. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +0 -803
  86. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  87. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
  88. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  89. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/CMakeOutput.log +0 -268
  90. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/TargetDirectories.txt +0 -3
  91. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/cmake.check_cache +0 -1
  92. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/papyrus_text.dir/papyrus_outline.cpp.o +0 -0
  93. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/papyrus_text.dir/papyrus_text_search.cpp.o +0 -0
  94. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/rules.ninja +0 -64
  95. package/android/.cxx/Debug/6t29645j/armeabi-v7a/additional_project_files.txt +0 -0
  96. package/android/.cxx/Debug/6t29645j/armeabi-v7a/android_gradle_build.json +0 -38
  97. package/android/.cxx/Debug/6t29645j/armeabi-v7a/android_gradle_build_mini.json +0 -27
  98. package/android/.cxx/Debug/6t29645j/armeabi-v7a/build.ninja +0 -158
  99. package/android/.cxx/Debug/6t29645j/armeabi-v7a/build_file_index.txt +0 -1
  100. package/android/.cxx/Debug/6t29645j/armeabi-v7a/cmake_install.cmake +0 -54
  101. package/android/.cxx/Debug/6t29645j/armeabi-v7a/compile_commands.json +0 -12
  102. package/android/.cxx/Debug/6t29645j/armeabi-v7a/compile_commands.json.bin +0 -0
  103. package/android/.cxx/Debug/6t29645j/armeabi-v7a/configure_fingerprint.bin +0 -28
  104. package/android/.cxx/Debug/6t29645j/armeabi-v7a/metadata_generation_command.txt +0 -19
  105. package/android/.cxx/Debug/6t29645j/armeabi-v7a/prefab_config.json +0 -4
  106. package/android/.cxx/Debug/6t29645j/armeabi-v7a/symbol_folder_index.txt +0 -1
  107. package/android/.cxx/Debug/6t29645j/hash_key.txt +0 -26
  108. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  109. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  110. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  111. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/cache-v2-921e99e188641cccb611.json +0 -1323
  112. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/cmakeFiles-v1-842a746390c683135141.json +0 -184
  113. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/codemodel-v2-5a1f9507fc5ae29259c9.json +0 -60
  114. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +0 -14
  115. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/index-2025-12-22T13-33-37-0961.json +0 -92
  116. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/target-papyrus_text-Debug-3cc07532ad82ada3b95c.json +0 -168
  117. package/android/.cxx/Debug/6t29645j/x86/.ninja_deps +0 -0
  118. package/android/.cxx/Debug/6t29645j/x86/.ninja_log +0 -20
  119. package/android/.cxx/Debug/6t29645j/x86/CMakeCache.txt +0 -400
  120. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +0 -72
  121. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +0 -83
  122. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  123. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  124. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +0 -15
  125. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +0 -803
  126. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  127. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
  128. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  129. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/CMakeOutput.log +0 -258
  130. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/TargetDirectories.txt +0 -3
  131. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/cmake.check_cache +0 -1
  132. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/papyrus_text.dir/papyrus_outline.cpp.o +0 -0
  133. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/papyrus_text.dir/papyrus_text_search.cpp.o +0 -0
  134. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/rules.ninja +0 -64
  135. package/android/.cxx/Debug/6t29645j/x86/additional_project_files.txt +0 -0
  136. package/android/.cxx/Debug/6t29645j/x86/android_gradle_build.json +0 -38
  137. package/android/.cxx/Debug/6t29645j/x86/android_gradle_build_mini.json +0 -27
  138. package/android/.cxx/Debug/6t29645j/x86/build.ninja +0 -158
  139. package/android/.cxx/Debug/6t29645j/x86/build_file_index.txt +0 -1
  140. package/android/.cxx/Debug/6t29645j/x86/cmake_install.cmake +0 -54
  141. package/android/.cxx/Debug/6t29645j/x86/compile_commands.json +0 -12
  142. package/android/.cxx/Debug/6t29645j/x86/compile_commands.json.bin +0 -0
  143. package/android/.cxx/Debug/6t29645j/x86/configure_fingerprint.bin +0 -28
  144. package/android/.cxx/Debug/6t29645j/x86/metadata_generation_command.txt +0 -19
  145. package/android/.cxx/Debug/6t29645j/x86/prefab_config.json +0 -4
  146. package/android/.cxx/Debug/6t29645j/x86/symbol_folder_index.txt +0 -1
  147. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  148. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  149. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  150. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/cache-v2-de693df49d051882903b.json +0 -1323
  151. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/cmakeFiles-v1-8206847cf10ce80b1459.json +0 -184
  152. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/codemodel-v2-ad9301b1a16c83f532c2.json +0 -60
  153. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +0 -14
  154. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/index-2025-12-22T13-33-39-0005.json +0 -92
  155. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/target-papyrus_text-Debug-e1bb1d27c41dc820b379.json +0 -168
  156. package/android/.cxx/Debug/6t29645j/x86_64/.ninja_deps +0 -0
  157. package/android/.cxx/Debug/6t29645j/x86_64/.ninja_log +0 -20
  158. package/android/.cxx/Debug/6t29645j/x86_64/CMakeCache.txt +0 -400
  159. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +0 -72
  160. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +0 -83
  161. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  162. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  163. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +0 -15
  164. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +0 -803
  165. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  166. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
  167. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  168. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/CMakeOutput.log +0 -258
  169. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/TargetDirectories.txt +0 -3
  170. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/cmake.check_cache +0 -1
  171. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/papyrus_text.dir/papyrus_outline.cpp.o +0 -0
  172. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/papyrus_text.dir/papyrus_text_search.cpp.o +0 -0
  173. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/rules.ninja +0 -64
  174. package/android/.cxx/Debug/6t29645j/x86_64/additional_project_files.txt +0 -0
  175. package/android/.cxx/Debug/6t29645j/x86_64/android_gradle_build.json +0 -38
  176. package/android/.cxx/Debug/6t29645j/x86_64/android_gradle_build_mini.json +0 -27
  177. package/android/.cxx/Debug/6t29645j/x86_64/build.ninja +0 -158
  178. package/android/.cxx/Debug/6t29645j/x86_64/build_file_index.txt +0 -1
  179. package/android/.cxx/Debug/6t29645j/x86_64/cmake_install.cmake +0 -54
  180. package/android/.cxx/Debug/6t29645j/x86_64/compile_commands.json +0 -12
  181. package/android/.cxx/Debug/6t29645j/x86_64/compile_commands.json.bin +0 -0
  182. package/android/.cxx/Debug/6t29645j/x86_64/configure_fingerprint.bin +0 -28
  183. package/android/.cxx/Debug/6t29645j/x86_64/metadata_generation_command.txt +0 -19
  184. package/android/.cxx/Debug/6t29645j/x86_64/prefab_config.json +0 -4
  185. package/android/.cxx/Debug/6t29645j/x86_64/symbol_folder_index.txt +0 -1
  186. package/android/.cxx/tools/debug/arm64-v8a/compile_commands.json +0 -12
  187. package/android/.cxx/tools/debug/armeabi-v7a/compile_commands.json +0 -12
  188. package/android/.cxx/tools/debug/x86/compile_commands.json +0 -12
  189. package/android/.cxx/tools/debug/x86_64/compile_commands.json +0 -12
  190. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/results.bin +0 -1
  191. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/android/support/v4/util/ArrayMap.dex +0 -0
  192. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/BuildConfig.dex +0 -0
  193. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusEngineStore$EngineState.dex +0 -0
  194. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusEngineStore.dex +0 -0
  195. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusNativeEngineModule$1.dex +0 -0
  196. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusNativeEngineModule.dex +0 -0
  197. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusOutline.dex +0 -0
  198. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusOutlineItem.dex +0 -0
  199. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusPackage.dex +0 -0
  200. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusPageView.dex +0 -0
  201. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusPageViewManager.dex +0 -0
  202. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusTextHit.dex +0 -0
  203. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusTextSearch.dex +0 -0
  204. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusTextSelect.dex +0 -0
  205. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusTextSelection.dex +0 -0
  206. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
  207. package/android/build/.transforms/b336bac6032a9c6be0544a913e5a030c/results.bin +0 -1
  208. package/android/build/.transforms/b336bac6032a9c6be0544a913e5a030c/transformed/classes/classes_dex/classes.dex +0 -0
  209. package/android/build/generated/source/buildConfig/debug/com/papyrus/engine/BuildConfig.java +0 -10
  210. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +0 -7
  211. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +0 -18
  212. package/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +0 -6
  213. package/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +0 -1
  214. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  215. package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
  216. package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +0 -0
  217. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/build_command_papyrus_text.bat +0 -5
  218. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/build_model.json +0 -186
  219. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/build_stderr_papyrus_text.txt +0 -0
  220. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/build_stdout_papyrus_text.txt +0 -2
  221. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_157_timing.txt +0 -8
  222. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_167_timing.txt +0 -8
  223. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_168_timing.txt +0 -14
  224. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_172_timing.txt +0 -8
  225. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_2919_timing.txt +0 -6
  226. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_3311_timing.txt +0 -3
  227. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_450_timing.txt +0 -3
  228. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/metadata_generation_record.json +0 -41
  229. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/build_command_papyrus_text.bat +0 -5
  230. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/build_model.json +0 -186
  231. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/build_stderr_papyrus_text.txt +0 -0
  232. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/build_stdout_papyrus_text.txt +0 -2
  233. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_158_timing.txt +0 -6
  234. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_160_timing.txt +0 -6
  235. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_164_timing.txt +0 -6
  236. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_168_timing.txt +0 -6
  237. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_2922_timing.txt +0 -6
  238. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_3311_timing.txt +0 -3
  239. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_450_timing.txt +0 -3
  240. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/metadata_generation_record.json +0 -41
  241. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/build_command_papyrus_text.bat +0 -5
  242. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/build_model.json +0 -186
  243. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/build_stderr_papyrus_text.txt +0 -0
  244. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/build_stdout_papyrus_text.txt +0 -2
  245. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_160_timing.txt +0 -5
  246. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_164_timing.txt +0 -3
  247. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_168_timing.txt +0 -6
  248. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_170_timing.txt +0 -6
  249. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_2907_timing.txt +0 -6
  250. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_3311_timing.txt +0 -3
  251. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_450_timing.txt +0 -3
  252. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/metadata_generation_record.json +0 -41
  253. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/build_command_papyrus_text.bat +0 -5
  254. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/build_model.json +0 -186
  255. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/build_stderr_papyrus_text.txt +0 -0
  256. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/build_stdout_papyrus_text.txt +0 -2
  257. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_155_timing.txt +0 -6
  258. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_160_timing.txt +0 -6
  259. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_164_timing.txt +0 -3
  260. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_168_timing.txt +0 -6
  261. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_2916_timing.txt +0 -6
  262. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_3311_timing.txt +0 -5
  263. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_450_timing.txt +0 -6
  264. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/metadata_generation_record.json +0 -41
  265. package/android/build/intermediates/cxx/Debug/6t29645j/obj/arm64-v8a/libpapyrus_text.so +0 -0
  266. package/android/build/intermediates/cxx/Debug/6t29645j/obj/armeabi-v7a/libpapyrus_text.so +0 -0
  267. package/android/build/intermediates/cxx/Debug/6t29645j/obj/x86/libpapyrus_text.so +0 -0
  268. package/android/build/intermediates/cxx/Debug/6t29645j/obj/x86_64/libpapyrus_text.so +0 -0
  269. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +0 -1
  270. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +0 -2
  271. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +0 -2
  272. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
  273. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +0 -2
  274. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/android/support/v4/util/ArrayMap.class +0 -0
  275. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/BuildConfig.class +0 -0
  276. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusEngineStore$EngineState.class +0 -0
  277. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusEngineStore.class +0 -0
  278. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusNativeEngineModule$1.class +0 -0
  279. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusNativeEngineModule.class +0 -0
  280. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusOutline.class +0 -0
  281. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusOutlineItem.class +0 -0
  282. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusPackage.class +0 -0
  283. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusPageView.class +0 -0
  284. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusPageViewManager.class +0 -0
  285. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusTextHit.class +0 -0
  286. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusTextSearch.class +0 -0
  287. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusTextSelect.class +0 -0
  288. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusTextSelection.class +0 -0
  289. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/arm64-v8a/libpapyrus_text.so +0 -0
  290. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/armeabi-v7a/libpapyrus_text.so +0 -0
  291. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86/libpapyrus_text.so +0 -0
  292. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86_64/libpapyrus_text.so +0 -0
  293. package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +0 -2
  294. package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +0 -7
  295. package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +0 -7
  296. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/arm64-v8a/libpapyrus_text.so +0 -0
  297. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/armeabi-v7a/libpapyrus_text.so +0 -0
  298. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86/libpapyrus_text.so +0 -0
  299. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86_64/libpapyrus_text.so +0 -0
  300. package/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +0 -1
  301. package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +0 -1
  302. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/android/support/v4/util/ArrayMap.class +0 -0
  303. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/BuildConfig.class +0 -0
  304. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusEngineStore$EngineState.class +0 -0
  305. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusEngineStore.class +0 -0
  306. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusNativeEngineModule$1.class +0 -0
  307. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusNativeEngineModule.class +0 -0
  308. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusOutline.class +0 -0
  309. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusOutlineItem.class +0 -0
  310. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusPackage.class +0 -0
  311. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusPageView.class +0 -0
  312. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusPageViewManager.class +0 -0
  313. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusTextHit.class +0 -0
  314. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusTextSearch.class +0 -0
  315. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusTextSelect.class +0 -0
  316. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusTextSelection.class +0 -0
  317. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  318. package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +0 -1
  319. package/android/build/outputs/logs/manifest-merger-debug-report.txt +0 -17
  320. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/PapyrusNativeEngineModule$1.class.uniqueId2 +0 -0
  321. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/PapyrusNativeEngineModule.class.uniqueId1 +0 -0
  322. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/PapyrusPackage.class.uniqueId0 +0 -0
  323. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
@@ -0,0 +1,540 @@
1
+ package com.papyrus.engine
2
+
3
+ import android.content.ContentResolver
4
+ import android.content.Context
5
+ import android.net.Uri
6
+ import android.os.ParcelFileDescriptor
7
+ import android.view.View
8
+ import com.facebook.react.bridge.UiThreadUtil
9
+ import com.shockwave.pdfium.PdfDocument
10
+ import expo.modules.kotlin.Promise
11
+ import expo.modules.kotlin.modules.Module
12
+ import expo.modules.kotlin.modules.ModuleDefinition
13
+ import expo.modules.kotlin.typedarray.Uint8Array
14
+ import java.io.File
15
+ import java.io.FileOutputStream
16
+ import java.io.IOException
17
+ import java.io.InputStream
18
+ import java.lang.reflect.Method
19
+ import java.net.HttpURLConnection
20
+ import java.net.URL
21
+ import java.util.concurrent.ExecutorService
22
+ import java.util.concurrent.Executors
23
+
24
+ class PapyrusNativeEngineModule : Module() {
25
+ private val executor: ExecutorService = Executors.newSingleThreadExecutor()
26
+
27
+ override fun definition() = ModuleDefinition {
28
+ Name("PapyrusNativeEngine")
29
+
30
+ Function("createEngine") {
31
+ val context = appContext.reactContext ?: return@Function "default"
32
+ PapyrusEngineStore.createEngine(context)
33
+ }
34
+
35
+ Function("destroyEngine") { engineId: String ->
36
+ PapyrusEngineStore.destroyEngine(engineId)
37
+ }
38
+
39
+ AsyncFunction("load") { engineId: String, source: Map<String, Any?>, promise: Promise ->
40
+ executor.execute {
41
+ try {
42
+ val state = PapyrusEngineStore.getEngine(engineId)
43
+ if (state == null) {
44
+ promise.reject("papyrus_no_engine", "Engine not found", null)
45
+ return@execute
46
+ }
47
+
48
+ val context = appContext.reactContext ?: throw IllegalStateException("React context missing")
49
+ val file = materializeSource(source, context)
50
+ if (file == null) {
51
+ promise.reject("papyrus_invalid_source", "Unsupported PDF source", null)
52
+ return@execute
53
+ }
54
+
55
+ val fd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
56
+ val document = state.pdfium.newDocument(fd)
57
+ PapyrusEngineStore.setDocument(state, document, fd, file.absolutePath)
58
+
59
+ val pageCount = state.pdfium.getPageCount(document)
60
+ promise.resolve(mapOf("pageCount" to pageCount))
61
+ } catch (error: Throwable) {
62
+ promise.reject("papyrus_load_failed", error.message, error)
63
+ }
64
+ }
65
+ }
66
+
67
+ Function("getPageCount") { engineId: String ->
68
+ val state = PapyrusEngineStore.getEngine(engineId)
69
+ if (state == null || state.document == null) return@Function 0
70
+ state.pdfium.getPageCount(state.document)
71
+ }
72
+
73
+ AsyncFunction("renderPage") { engineId: String, pageIndex: Int, target: Int, scale: Double, zoom: Double, rotation: Int ->
74
+ val state = PapyrusEngineStore.getEngine(engineId) ?: return@AsyncFunction
75
+ UiThreadUtil.runOnUiThread {
76
+ val view = appContext.findView<View>(target)
77
+ if (view is PapyrusPageView) {
78
+ view.render(state, pageIndex, scale.toFloat(), zoom.toFloat(), rotation)
79
+ }
80
+ }
81
+ }
82
+
83
+ AsyncFunction("renderTextLayer") { engineId: String, pageIndex: Int, target: Int, scale: Double, zoom: Double, rotation: Int ->
84
+ // no-op
85
+ Unit
86
+ }
87
+
88
+ AsyncFunction("getTextContent") { engineId: String, pageIndex: Int, promise: Promise ->
89
+ executor.execute {
90
+ val state = PapyrusEngineStore.getEngine(engineId)
91
+ if (state == null || state.document == null) {
92
+ promise.resolve(emptyList<Any>())
93
+ return@execute
94
+ }
95
+ val text = synchronized(state.pdfiumLock) { extractPageText(state, pageIndex) }
96
+ val items = mutableListOf<Map<String, Any>>()
97
+ if (!text.isNullOrEmpty()) {
98
+ items.add(
99
+ mapOf(
100
+ "str" to text,
101
+ "dir" to "ltr",
102
+ "width" to 0,
103
+ "height" to 0,
104
+ "transform" to listOf(1, 0, 0, 1, 0, 0),
105
+ "fontName" to ""
106
+ )
107
+ )
108
+ }
109
+ promise.resolve(items)
110
+ }
111
+ }
112
+
113
+ AsyncFunction("getPageDimensions") { engineId: String, pageIndex: Int, promise: Promise ->
114
+ executor.execute {
115
+ val state = PapyrusEngineStore.getEngine(engineId)
116
+ if (state == null || state.document == null) {
117
+ promise.resolve(mapOf("width" to 0, "height" to 0))
118
+ return@execute
119
+ }
120
+ val (width, height) = synchronized(state.pdfiumLock) {
121
+ val w = state.pdfium.getPageWidthPoint(state.document, pageIndex)
122
+ val h = state.pdfium.getPageHeightPoint(state.document, pageIndex)
123
+ Pair(w, h)
124
+ }
125
+ promise.resolve(mapOf("width" to width, "height" to height))
126
+ }
127
+ }
128
+
129
+ AsyncFunction("getOutline") { engineId: String, promise: Promise ->
130
+ executor.execute {
131
+ val state = PapyrusEngineStore.getEngine(engineId)
132
+ if (state == null || state.document == null) {
133
+ promise.resolve(emptyList<Any>())
134
+ return@execute
135
+ }
136
+
137
+ var items: Array<PapyrusOutlineItem>? = null
138
+ try {
139
+ if (PapyrusOutline.AVAILABLE) {
140
+ if (!state.sourcePath.isNullOrEmpty()) {
141
+ synchronized(state.pdfiumLock) {
142
+ items = PapyrusOutline.nativeGetOutlineFile(state.sourcePath)
143
+ }
144
+ } else {
145
+ val docPtr = synchronized(state.pdfiumLock) { extractNativeDocPointer(state.document) }
146
+ if (docPtr != 0L) {
147
+ synchronized(state.pdfiumLock) {
148
+ items = PapyrusOutline.nativeGetOutline(docPtr)
149
+ }
150
+ }
151
+ }
152
+ }
153
+ } catch (_: Throwable) {
154
+ items = null
155
+ }
156
+
157
+ val result = mutableListOf<Map<String, Any?>>()
158
+ items?.forEach { item ->
159
+ result.add(serializeOutlineItem(item))
160
+ }
161
+ promise.resolve(result)
162
+ }
163
+ }
164
+
165
+ AsyncFunction("getPageIndex") { engineId: String, dest: Map<String, Any?>, promise: Promise ->
166
+ val kind = dest["kind"] as? String
167
+ val value = dest["value"]
168
+
169
+ if (kind == "pageIndex" && value is Number) {
170
+ promise.resolve(value.toInt())
171
+ return@AsyncFunction
172
+ }
173
+
174
+ if (kind == "pageNumber" && value is Number) {
175
+ promise.resolve(maxOf(0, value.toInt() - 1))
176
+ return@AsyncFunction
177
+ }
178
+
179
+ promise.resolve(null)
180
+ }
181
+
182
+ AsyncFunction("searchText") { engineId: String, query: String, promise: Promise ->
183
+ executor.execute {
184
+ val state = PapyrusEngineStore.getEngine(engineId)
185
+ if (state == null || state.document == null || query.length < 2) {
186
+ promise.resolve(emptyList<Any>())
187
+ return@execute
188
+ }
189
+
190
+ val pageCount = state.pdfium.getPageCount(state.document)
191
+ state.isSearching = true
192
+ try {
193
+ try {
194
+ if (PapyrusTextSearch.AVAILABLE) {
195
+ var hits: Array<PapyrusTextHit>? = null
196
+ if (!state.sourcePath.isNullOrEmpty()) {
197
+ synchronized(state.pdfiumLock) {
198
+ hits = PapyrusTextSearch.nativeSearchFile(state.sourcePath, query)
199
+ }
200
+ } else {
201
+ val docPtr = synchronized(state.pdfiumLock) { extractNativeDocPointer(state.document) }
202
+ if (docPtr != 0L) {
203
+ synchronized(state.pdfiumLock) {
204
+ hits = PapyrusTextSearch.nativeSearch(docPtr, pageCount, query)
205
+ }
206
+ }
207
+ }
208
+
209
+ if (!hits.isNullOrEmpty()) {
210
+ val results = mutableListOf<Map<String, Any?>>()
211
+ hits?.forEach { hit ->
212
+ val result = mutableMapOf<String, Any?>(
213
+ "pageIndex" to hit.pageIndex,
214
+ "text" to (hit.text ?: query),
215
+ "matchIndex" to hit.matchIndex
216
+ )
217
+ val rects = hit.rects
218
+ if (rects != null && rects.size >= 4) {
219
+ val rectList = mutableListOf<Map<String, Any>>()
220
+ var i = 0
221
+ while (i + 3 < rects.size) {
222
+ rectList.add(
223
+ mapOf(
224
+ "x" to rects[i],
225
+ "y" to rects[i + 1],
226
+ "width" to rects[i + 2],
227
+ "height" to rects[i + 3]
228
+ )
229
+ )
230
+ i += 4
231
+ }
232
+ result["rects"] = rectList
233
+ }
234
+ results.add(result)
235
+ }
236
+ promise.resolve(results)
237
+ return@execute
238
+ }
239
+ }
240
+ } catch (_: Throwable) {
241
+ }
242
+
243
+ val normalizedQuery = query.lowercase()
244
+ val results = mutableListOf<Map<String, Any?>>()
245
+
246
+ for (pageIndex in 0 until pageCount) {
247
+ val text = synchronized(state.pdfiumLock) { extractPageText(state, pageIndex) } ?: ""
248
+ if (text.isEmpty()) continue
249
+
250
+ val lower = text.lowercase()
251
+ var pos = lower.indexOf(normalizedQuery)
252
+ var matchIndex = 0
253
+ while (pos != -1) {
254
+ val start = maxOf(0, pos - 20)
255
+ val end = minOf(text.length, pos + normalizedQuery.length + 20)
256
+ val preview = text.substring(start, end)
257
+
258
+ results.add(
259
+ mapOf(
260
+ "pageIndex" to pageIndex,
261
+ "text" to preview,
262
+ "matchIndex" to matchIndex++
263
+ )
264
+ )
265
+
266
+ pos = lower.indexOf(normalizedQuery, pos + 1)
267
+ }
268
+ }
269
+
270
+ promise.resolve(results)
271
+ } finally {
272
+ state.isSearching = false
273
+ }
274
+ }
275
+ }
276
+
277
+ AsyncFunction("selectText") { engineId: String, pageIndex: Int, x: Double, y: Double, width: Double, height: Double, promise: Promise ->
278
+ executor.execute {
279
+ val state = PapyrusEngineStore.getEngine(engineId)
280
+ if (state == null || state.document == null || pageIndex < 0) {
281
+ promise.resolve(null)
282
+ return@execute
283
+ }
284
+
285
+ if (!PapyrusTextSelect.AVAILABLE) {
286
+ promise.resolve(null)
287
+ return@execute
288
+ }
289
+
290
+ var selection: PapyrusTextSelection? = null
291
+ try {
292
+ if (!state.sourcePath.isNullOrEmpty()) {
293
+ synchronized(state.pdfiumLock) {
294
+ selection = PapyrusTextSelect.nativeSelectTextFile(
295
+ state.sourcePath,
296
+ pageIndex,
297
+ x.toFloat(),
298
+ y.toFloat(),
299
+ width.toFloat(),
300
+ height.toFloat()
301
+ )
302
+ }
303
+ } else {
304
+ val docPtr = synchronized(state.pdfiumLock) { extractNativeDocPointer(state.document) }
305
+ if (docPtr != 0L) {
306
+ synchronized(state.pdfiumLock) {
307
+ selection = PapyrusTextSelect.nativeSelectText(
308
+ docPtr,
309
+ pageIndex,
310
+ x.toFloat(),
311
+ y.toFloat(),
312
+ width.toFloat(),
313
+ height.toFloat()
314
+ )
315
+ }
316
+ }
317
+ }
318
+ } catch (_: Throwable) {
319
+ selection = null
320
+ }
321
+
322
+ val rects = selection?.rects
323
+ if (selection == null || rects == null || rects.isEmpty()) {
324
+ promise.resolve(null)
325
+ return@execute
326
+ }
327
+
328
+ val rectList = mutableListOf<Map<String, Any>>()
329
+ var i = 0
330
+ while (i + 3 < rects.size) {
331
+ rectList.add(
332
+ mapOf(
333
+ "x" to rects[i],
334
+ "y" to rects[i + 1],
335
+ "width" to rects[i + 2],
336
+ "height" to rects[i + 3]
337
+ )
338
+ )
339
+ i += 4
340
+ }
341
+
342
+ promise.resolve(
343
+ mapOf(
344
+ "text" to (selection?.text ?: ""),
345
+ "rects" to rectList
346
+ )
347
+ )
348
+ }
349
+ }
350
+ }
351
+
352
+ private fun extractPageText(state: PapyrusEngineStore.EngineState, pageIndex: Int): String? {
353
+ try {
354
+ state.pdfium.openPage(state.document, pageIndex)
355
+ } catch (_: Throwable) {
356
+ }
357
+
358
+ try {
359
+ var method: Method? = null
360
+ method = try {
361
+ state.pdfium.javaClass.getDeclaredMethod("getPageText", PdfDocument::class.java, Int::class.javaPrimitiveType)
362
+ } catch (_: NoSuchMethodException) {
363
+ null
364
+ }
365
+
366
+ if (method == null) {
367
+ method = try {
368
+ state.pdfium.javaClass.getDeclaredMethod("nativeGetPageText", Long::class.javaPrimitiveType, Int::class.javaPrimitiveType)
369
+ } catch (_: NoSuchMethodException) {
370
+ null
371
+ }
372
+ }
373
+
374
+ if (method != null) {
375
+ method.isAccessible = true
376
+ val result = if (method.parameterTypes.size == 2 && method.parameterTypes[0] == PdfDocument::class.java) {
377
+ method.invoke(state.pdfium, state.document, pageIndex)
378
+ } else if (method.parameterTypes.size == 2 && method.parameterTypes[0] == Long::class.javaPrimitiveType) {
379
+ val docPtr = extractNativeDocPointer(state.document)
380
+ method.invoke(state.pdfium, docPtr, pageIndex)
381
+ } else {
382
+ null
383
+ }
384
+ return result?.toString() ?: ""
385
+ }
386
+ } catch (_: Throwable) {
387
+ }
388
+
389
+ return ""
390
+ }
391
+
392
+ private fun extractNativeDocPointer(document: PdfDocument?): Long {
393
+ if (document == null) return 0L
394
+ return try {
395
+ val field = PdfDocument::class.java.getDeclaredField("mNativeDocPtr")
396
+ field.isAccessible = true
397
+ val value = field.get(document)
398
+ if (value is Long) value else 0L
399
+ } catch (_: Throwable) {
400
+ 0L
401
+ }
402
+ }
403
+
404
+ private fun serializeOutlineItem(item: PapyrusOutlineItem): Map<String, Any?> {
405
+ val map = mutableMapOf<String, Any?>(
406
+ "title" to (item.title ?: ""),
407
+ "pageIndex" to item.pageIndex
408
+ )
409
+ val children = item.children
410
+ if (children != null && children.isNotEmpty()) {
411
+ val childMaps = mutableListOf<Map<String, Any?>>()
412
+ children.forEach { child ->
413
+ childMaps.add(serializeOutlineItem(child))
414
+ }
415
+ map["children"] = childMaps
416
+ }
417
+ return map
418
+ }
419
+
420
+ @Throws(IOException::class)
421
+ private fun materializeSource(source: Map<String, Any?>, context: Context): File? {
422
+ val uriValue = source["uri"]
423
+ if (uriValue is String) {
424
+ if (uriValue.startsWith("http://") || uriValue.startsWith("https://")) {
425
+ return downloadToCache(uriValue, context)
426
+ }
427
+
428
+ if (uriValue.startsWith("asset:/")) {
429
+ return copyFromAsset(uriValue.substring("asset:/".length), context)
430
+ }
431
+
432
+ if (uriValue.startsWith("file:///android_asset/")) {
433
+ return copyFromAsset(uriValue.substring("file:///android_asset/".length), context)
434
+ }
435
+
436
+ if (uriValue.startsWith("content://")) {
437
+ return copyFromContentUri(Uri.parse(uriValue), context)
438
+ }
439
+
440
+ if (uriValue.startsWith("file://")) {
441
+ return File(Uri.parse(uriValue).path ?: return null)
442
+ }
443
+
444
+ return File(uriValue)
445
+ }
446
+
447
+ val dataValue = source["data"]
448
+ if (dataValue != null) {
449
+ val bytes = toByteArray(dataValue)
450
+ if (bytes != null) {
451
+ return writeBytesToCache(bytes, context)
452
+ }
453
+ }
454
+
455
+ return null
456
+ }
457
+
458
+ private fun toByteArray(value: Any): ByteArray? {
459
+ return when (value) {
460
+ is ByteArray -> value
461
+ is Uint8Array -> {
462
+ val bytes = ByteArray(value.byteLength)
463
+ value.read(bytes, 0, value.byteLength)
464
+ bytes
465
+ }
466
+ is List<*> -> {
467
+ val bytes = ByteArray(value.size)
468
+ value.forEachIndexed { index, item ->
469
+ val number = item as? Number ?: return null
470
+ bytes[index] = number.toInt().toByte()
471
+ }
472
+ bytes
473
+ }
474
+ else -> null
475
+ }
476
+ }
477
+
478
+ @Throws(IOException::class)
479
+ private fun downloadToCache(uri: String, context: Context): File {
480
+ val url = URL(uri)
481
+ val connection = url.openConnection() as HttpURLConnection
482
+ connection.connect()
483
+ if (connection.responseCode >= 400) {
484
+ throw IOException("Failed to download PDF")
485
+ }
486
+ val inputStream = connection.inputStream
487
+ val out = createTempFile(context)
488
+ writeStreamToFile(inputStream, out)
489
+ connection.disconnect()
490
+ return out
491
+ }
492
+
493
+ @Throws(IOException::class)
494
+ private fun copyFromContentUri(uri: Uri, context: Context): File {
495
+ val resolver: ContentResolver = context.contentResolver
496
+ val inputStream = resolver.openInputStream(uri) ?: throw IOException("Unable to read content URI")
497
+ val out = createTempFile(context)
498
+ writeStreamToFile(inputStream, out)
499
+ return out
500
+ }
501
+
502
+ @Throws(IOException::class)
503
+ private fun copyFromAsset(assetPath: String, context: Context): File {
504
+ val inputStream = context.assets.open(assetPath)
505
+ val out = createTempFile(context)
506
+ writeStreamToFile(inputStream, out)
507
+ return out
508
+ }
509
+
510
+ @Throws(IOException::class)
511
+ private fun writeBytesToCache(bytes: ByteArray, context: Context): File {
512
+ val out = createTempFile(context)
513
+ FileOutputStream(out).use { fos ->
514
+ fos.write(bytes)
515
+ fos.flush()
516
+ }
517
+ return out
518
+ }
519
+
520
+ @Throws(IOException::class)
521
+ private fun createTempFile(context: Context): File {
522
+ val cacheDir = context.cacheDir
523
+ return File.createTempFile("papyrus", ".pdf", cacheDir)
524
+ }
525
+
526
+ @Throws(IOException::class)
527
+ private fun writeStreamToFile(inputStream: InputStream, out: File) {
528
+ FileOutputStream(out).use { fos ->
529
+ val buffer = ByteArray(8192)
530
+ var read: Int
531
+ while (true) {
532
+ read = inputStream.read(buffer)
533
+ if (read == -1) break
534
+ fos.write(buffer, 0, read)
535
+ }
536
+ fos.flush()
537
+ }
538
+ inputStream.close()
539
+ }
540
+ }
@@ -1,20 +1,20 @@
1
- package com.papyrus.engine;
2
-
3
- final class PapyrusOutline {
4
- static final boolean AVAILABLE;
5
-
6
- static {
7
- boolean available = false;
8
- try {
9
- System.loadLibrary("papyrus_text");
10
- available = true;
11
- } catch (Throwable ignored) {
12
- available = false;
13
- }
14
- AVAILABLE = available;
15
- }
16
-
17
- static native PapyrusOutlineItem[] nativeGetOutline(long docPtr);
18
-
19
- static native PapyrusOutlineItem[] nativeGetOutlineFile(String filePath);
20
- }
1
+ package com.papyrus.engine;
2
+
3
+ final class PapyrusOutline {
4
+ static final boolean AVAILABLE;
5
+
6
+ static {
7
+ boolean available = false;
8
+ try {
9
+ System.loadLibrary("papyrus_text");
10
+ available = true;
11
+ } catch (Throwable ignored) {
12
+ available = false;
13
+ }
14
+ AVAILABLE = available;
15
+ }
16
+
17
+ static native PapyrusOutlineItem[] nativeGetOutline(long docPtr);
18
+
19
+ static native PapyrusOutlineItem[] nativeGetOutlineFile(String filePath);
20
+ }
@@ -1,13 +1,13 @@
1
- package com.papyrus.engine;
2
-
3
- final class PapyrusOutlineItem {
4
- final String title;
5
- final int pageIndex;
6
- final PapyrusOutlineItem[] children;
7
-
8
- PapyrusOutlineItem(String title, int pageIndex, PapyrusOutlineItem[] children) {
9
- this.title = title != null ? title : "";
10
- this.pageIndex = pageIndex;
11
- this.children = children;
12
- }
13
- }
1
+ package com.papyrus.engine;
2
+
3
+ final class PapyrusOutlineItem {
4
+ final String title;
5
+ final int pageIndex;
6
+ final PapyrusOutlineItem[] children;
7
+
8
+ PapyrusOutlineItem(String title, int pageIndex, PapyrusOutlineItem[] children) {
9
+ this.title = title != null ? title : "";
10
+ this.pageIndex = pageIndex;
11
+ this.children = children;
12
+ }
13
+ }
@@ -1,24 +1,24 @@
1
- package com.papyrus.engine;
2
-
3
- import com.facebook.react.ReactPackage;
4
- import com.facebook.react.bridge.NativeModule;
5
- import com.facebook.react.bridge.ReactApplicationContext;
6
- import com.facebook.react.uimanager.ViewManager;
7
-
8
- import java.util.ArrayList;
9
- import java.util.Collections;
10
- import java.util.List;
11
-
12
- public class PapyrusPackage implements ReactPackage {
13
- @Override
14
- public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
15
- List<NativeModule> modules = new ArrayList<>();
16
- modules.add(new PapyrusNativeEngineModule(reactContext));
17
- return modules;
18
- }
19
-
20
- @Override
21
- public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
22
- return Collections.singletonList(new PapyrusPageViewManager());
23
- }
24
- }
1
+ package com.papyrus.engine;
2
+
3
+ import com.facebook.react.ReactPackage;
4
+ import com.facebook.react.bridge.NativeModule;
5
+ import com.facebook.react.bridge.ReactApplicationContext;
6
+ import com.facebook.react.uimanager.ViewManager;
7
+
8
+ import java.util.ArrayList;
9
+ import java.util.Collections;
10
+ import java.util.List;
11
+
12
+ public class PapyrusPackage implements ReactPackage {
13
+ @Override
14
+ public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
15
+ List<NativeModule> modules = new ArrayList<>();
16
+ modules.add(new PapyrusNativeEngineModule(reactContext));
17
+ return modules;
18
+ }
19
+
20
+ @Override
21
+ public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
22
+ return Collections.singletonList(new PapyrusPageViewManager());
23
+ }
24
+ }