react-native-enriched-markdown 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +479 -0
  3. package/ReactNativeEnrichedMarkdown.podspec +27 -0
  4. package/android/build.gradle +101 -0
  5. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerDelegate.java +39 -0
  6. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerInterface.java +21 -0
  7. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ComponentDescriptors.cpp +22 -0
  8. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ComponentDescriptors.h +24 -0
  9. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.cpp +24 -0
  10. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.h +25 -0
  11. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.cpp +57 -0
  12. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.h +1164 -0
  13. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ShadowNodes.cpp +17 -0
  14. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ShadowNodes.h +32 -0
  15. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/States.cpp +16 -0
  16. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/States.h +20 -0
  17. package/android/gradle.properties +5 -0
  18. package/android/src/main/AndroidManifest.xml +2 -0
  19. package/android/src/main/baseline-prof.txt +65 -0
  20. package/android/src/main/cpp/jni-adapter.cpp +203 -0
  21. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownText.kt +153 -0
  22. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextLayoutManager.kt +30 -0
  23. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextManager.kt +119 -0
  24. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextPackage.kt +17 -0
  25. package/android/src/main/java/com/swmansion/enriched/markdown/MeasurementStore.kt +165 -0
  26. package/android/src/main/java/com/swmansion/enriched/markdown/events/LinkPressEvent.kt +23 -0
  27. package/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt +29 -0
  28. package/android/src/main/java/com/swmansion/enriched/markdown/parser/Parser.kt +48 -0
  29. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockStyleContext.kt +166 -0
  30. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockquoteRenderer.kt +89 -0
  31. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeBlockRenderer.kt +105 -0
  32. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeRenderer.kt +35 -0
  33. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/DocumentRenderer.kt +15 -0
  34. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/EmphasisRenderer.kt +26 -0
  35. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/HeadingRenderer.kt +54 -0
  36. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ImageRenderer.kt +52 -0
  37. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/LineBreakRenderer.kt +15 -0
  38. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/LinkRenderer.kt +28 -0
  39. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListContextManager.kt +105 -0
  40. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListItemRenderer.kt +58 -0
  41. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListRenderer.kt +69 -0
  42. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt +99 -0
  43. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ParagraphRenderer.kt +66 -0
  44. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/Renderer.kt +95 -0
  45. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SpanStyleCache.kt +85 -0
  46. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/StrongRenderer.kt +26 -0
  47. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/TextRenderer.kt +29 -0
  48. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ThematicBreakRenderer.kt +44 -0
  49. package/android/src/main/java/com/swmansion/enriched/markdown/spans/BaseListSpan.kt +136 -0
  50. package/android/src/main/java/com/swmansion/enriched/markdown/spans/BlockquoteSpan.kt +135 -0
  51. package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBackgroundSpan.kt +180 -0
  52. package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBlockSpan.kt +196 -0
  53. package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeSpan.kt +27 -0
  54. package/android/src/main/java/com/swmansion/enriched/markdown/spans/EmphasisSpan.kt +34 -0
  55. package/android/src/main/java/com/swmansion/enriched/markdown/spans/HeadingSpan.kt +38 -0
  56. package/android/src/main/java/com/swmansion/enriched/markdown/spans/ImageSpan.kt +320 -0
  57. package/android/src/main/java/com/swmansion/enriched/markdown/spans/LineHeightSpan.kt +36 -0
  58. package/android/src/main/java/com/swmansion/enriched/markdown/spans/LinkSpan.kt +37 -0
  59. package/android/src/main/java/com/swmansion/enriched/markdown/spans/MarginBottomSpan.kt +76 -0
  60. package/android/src/main/java/com/swmansion/enriched/markdown/spans/OrderedListSpan.kt +87 -0
  61. package/android/src/main/java/com/swmansion/enriched/markdown/spans/StrongSpan.kt +37 -0
  62. package/android/src/main/java/com/swmansion/enriched/markdown/spans/TextSpan.kt +26 -0
  63. package/android/src/main/java/com/swmansion/enriched/markdown/spans/ThematicBreakSpan.kt +69 -0
  64. package/android/src/main/java/com/swmansion/enriched/markdown/spans/UnorderedListSpan.kt +69 -0
  65. package/android/src/main/java/com/swmansion/enriched/markdown/styles/BaseBlockStyle.kt +10 -0
  66. package/android/src/main/java/com/swmansion/enriched/markdown/styles/BlockquoteStyle.kt +48 -0
  67. package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeBlockStyle.kt +51 -0
  68. package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeStyle.kt +21 -0
  69. package/android/src/main/java/com/swmansion/enriched/markdown/styles/EmphasisStyle.kt +17 -0
  70. package/android/src/main/java/com/swmansion/enriched/markdown/styles/HeadingStyle.kt +29 -0
  71. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ImageStyle.kt +21 -0
  72. package/android/src/main/java/com/swmansion/enriched/markdown/styles/InlineImageStyle.kt +17 -0
  73. package/android/src/main/java/com/swmansion/enriched/markdown/styles/LinkStyle.kt +19 -0
  74. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ListStyle.kt +54 -0
  75. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ParagraphStyle.kt +29 -0
  76. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StrongStyle.kt +17 -0
  77. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleConfig.kt +180 -0
  78. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleParser.kt +75 -0
  79. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ThematicBreakStyle.kt +23 -0
  80. package/android/src/main/java/com/swmansion/enriched/markdown/utils/AsyncDrawable.kt +91 -0
  81. package/android/src/main/java/com/swmansion/enriched/markdown/utils/HTMLGenerator.kt +809 -0
  82. package/android/src/main/java/com/swmansion/enriched/markdown/utils/MarkdownExtractor.kt +365 -0
  83. package/android/src/main/java/com/swmansion/enriched/markdown/utils/SelectionActionMode.kt +139 -0
  84. package/android/src/main/java/com/swmansion/enriched/markdown/utils/Utils.kt +181 -0
  85. package/android/src/main/jni/CMakeLists.txt +82 -0
  86. package/android/src/main/jni/EnrichedMarkdownTextSpec.cpp +21 -0
  87. package/android/src/main/jni/EnrichedMarkdownTextSpec.h +25 -0
  88. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextComponentDescriptor.h +29 -0
  89. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextMeasurementManager.cpp +45 -0
  90. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextMeasurementManager.h +21 -0
  91. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.cpp +33 -0
  92. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.h +49 -0
  93. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextState.cpp +9 -0
  94. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextState.h +25 -0
  95. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/conversions.h +19 -0
  96. package/cpp/md4c/md4c.c +6492 -0
  97. package/cpp/md4c/md4c.h +402 -0
  98. package/cpp/parser/MD4CParser.cpp +314 -0
  99. package/cpp/parser/MD4CParser.hpp +23 -0
  100. package/cpp/parser/MarkdownASTNode.hpp +49 -0
  101. package/ios/EnrichedMarkdownText.h +18 -0
  102. package/ios/EnrichedMarkdownText.mm +1074 -0
  103. package/ios/attachments/ImageAttachment.h +23 -0
  104. package/ios/attachments/ImageAttachment.m +185 -0
  105. package/ios/attachments/ThematicBreakAttachment.h +15 -0
  106. package/ios/attachments/ThematicBreakAttachment.m +33 -0
  107. package/ios/generated/EnrichedMarkdownTextSpec/ComponentDescriptors.cpp +22 -0
  108. package/ios/generated/EnrichedMarkdownTextSpec/ComponentDescriptors.h +24 -0
  109. package/ios/generated/EnrichedMarkdownTextSpec/EventEmitters.cpp +24 -0
  110. package/ios/generated/EnrichedMarkdownTextSpec/EventEmitters.h +25 -0
  111. package/ios/generated/EnrichedMarkdownTextSpec/Props.cpp +57 -0
  112. package/ios/generated/EnrichedMarkdownTextSpec/Props.h +1164 -0
  113. package/ios/generated/EnrichedMarkdownTextSpec/RCTComponentViewHelpers.h +20 -0
  114. package/ios/generated/EnrichedMarkdownTextSpec/ShadowNodes.cpp +17 -0
  115. package/ios/generated/EnrichedMarkdownTextSpec/ShadowNodes.h +32 -0
  116. package/ios/generated/EnrichedMarkdownTextSpec/States.cpp +16 -0
  117. package/ios/generated/EnrichedMarkdownTextSpec/States.h +20 -0
  118. package/ios/internals/EnrichedMarkdownTextComponentDescriptor.h +19 -0
  119. package/ios/internals/EnrichedMarkdownTextShadowNode.h +43 -0
  120. package/ios/internals/EnrichedMarkdownTextShadowNode.mm +85 -0
  121. package/ios/internals/EnrichedMarkdownTextState.h +24 -0
  122. package/ios/parser/MarkdownASTNode.h +33 -0
  123. package/ios/parser/MarkdownASTNode.m +32 -0
  124. package/ios/parser/MarkdownParser.h +8 -0
  125. package/ios/parser/MarkdownParser.mm +13 -0
  126. package/ios/parser/MarkdownParserBridge.mm +110 -0
  127. package/ios/renderer/AttributedRenderer.h +9 -0
  128. package/ios/renderer/AttributedRenderer.m +119 -0
  129. package/ios/renderer/BlockquoteRenderer.h +7 -0
  130. package/ios/renderer/BlockquoteRenderer.m +159 -0
  131. package/ios/renderer/CodeBlockRenderer.h +10 -0
  132. package/ios/renderer/CodeBlockRenderer.m +89 -0
  133. package/ios/renderer/CodeRenderer.h +10 -0
  134. package/ios/renderer/CodeRenderer.m +60 -0
  135. package/ios/renderer/EmphasisRenderer.h +6 -0
  136. package/ios/renderer/EmphasisRenderer.m +96 -0
  137. package/ios/renderer/HeadingRenderer.h +7 -0
  138. package/ios/renderer/HeadingRenderer.m +98 -0
  139. package/ios/renderer/ImageRenderer.h +12 -0
  140. package/ios/renderer/ImageRenderer.m +62 -0
  141. package/ios/renderer/LinkRenderer.h +7 -0
  142. package/ios/renderer/LinkRenderer.m +69 -0
  143. package/ios/renderer/ListItemRenderer.h +16 -0
  144. package/ios/renderer/ListItemRenderer.m +91 -0
  145. package/ios/renderer/ListRenderer.h +13 -0
  146. package/ios/renderer/ListRenderer.m +67 -0
  147. package/ios/renderer/NodeRenderer.h +8 -0
  148. package/ios/renderer/ParagraphRenderer.h +7 -0
  149. package/ios/renderer/ParagraphRenderer.m +69 -0
  150. package/ios/renderer/RenderContext.h +88 -0
  151. package/ios/renderer/RenderContext.m +248 -0
  152. package/ios/renderer/RendererFactory.h +12 -0
  153. package/ios/renderer/RendererFactory.m +110 -0
  154. package/ios/renderer/StrongRenderer.h +6 -0
  155. package/ios/renderer/StrongRenderer.m +83 -0
  156. package/ios/renderer/TextRenderer.h +6 -0
  157. package/ios/renderer/TextRenderer.m +16 -0
  158. package/ios/renderer/ThematicBreakRenderer.h +5 -0
  159. package/ios/renderer/ThematicBreakRenderer.m +53 -0
  160. package/ios/styles/StyleConfig.h +228 -0
  161. package/ios/styles/StyleConfig.mm +1467 -0
  162. package/ios/utils/BlockquoteBorder.h +20 -0
  163. package/ios/utils/BlockquoteBorder.m +92 -0
  164. package/ios/utils/CodeBackground.h +19 -0
  165. package/ios/utils/CodeBackground.m +191 -0
  166. package/ios/utils/CodeBlockBackground.h +17 -0
  167. package/ios/utils/CodeBlockBackground.m +87 -0
  168. package/ios/utils/EditMenuUtils.h +22 -0
  169. package/ios/utils/EditMenuUtils.m +118 -0
  170. package/ios/utils/FontUtils.h +20 -0
  171. package/ios/utils/FontUtils.m +13 -0
  172. package/ios/utils/HTMLGenerator.h +20 -0
  173. package/ios/utils/HTMLGenerator.m +779 -0
  174. package/ios/utils/LastElementUtils.h +53 -0
  175. package/ios/utils/ListMarkerDrawer.h +15 -0
  176. package/ios/utils/ListMarkerDrawer.m +127 -0
  177. package/ios/utils/MarkdownExtractor.h +17 -0
  178. package/ios/utils/MarkdownExtractor.m +295 -0
  179. package/ios/utils/ParagraphStyleUtils.h +13 -0
  180. package/ios/utils/ParagraphStyleUtils.m +56 -0
  181. package/ios/utils/PasteboardUtils.h +36 -0
  182. package/ios/utils/PasteboardUtils.m +134 -0
  183. package/ios/utils/RTFExportUtils.h +24 -0
  184. package/ios/utils/RTFExportUtils.m +297 -0
  185. package/ios/utils/RuntimeKeys.h +38 -0
  186. package/ios/utils/RuntimeKeys.m +11 -0
  187. package/ios/utils/TextViewLayoutManager.h +14 -0
  188. package/ios/utils/TextViewLayoutManager.mm +113 -0
  189. package/lib/module/EnrichedMarkdownText.js +34 -0
  190. package/lib/module/EnrichedMarkdownText.js.map +1 -0
  191. package/lib/module/EnrichedMarkdownTextNativeComponent.ts +130 -0
  192. package/lib/module/index.js +5 -0
  193. package/lib/module/index.js.map +1 -0
  194. package/lib/module/normalizeMarkdownStyle.js +340 -0
  195. package/lib/module/normalizeMarkdownStyle.js.map +1 -0
  196. package/lib/module/package.json +1 -0
  197. package/lib/typescript/package.json +1 -0
  198. package/lib/typescript/src/EnrichedMarkdownText.d.ts +101 -0
  199. package/lib/typescript/src/EnrichedMarkdownText.d.ts.map +1 -0
  200. package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts +111 -0
  201. package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts.map +1 -0
  202. package/lib/typescript/src/index.d.ts +5 -0
  203. package/lib/typescript/src/index.d.ts.map +1 -0
  204. package/lib/typescript/src/normalizeMarkdownStyle.d.ts +6 -0
  205. package/lib/typescript/src/normalizeMarkdownStyle.d.ts.map +1 -0
  206. package/package.json +186 -1
  207. package/react-native.config.js +13 -0
  208. package/src/EnrichedMarkdownText.tsx +152 -0
  209. package/src/EnrichedMarkdownTextNativeComponent.ts +130 -0
  210. package/src/index.tsx +7 -0
  211. package/src/normalizeMarkdownStyle.ts +377 -0
@@ -0,0 +1,82 @@
1
+ cmake_minimum_required(VERSION 3.13)
2
+ set(CMAKE_VERBOSE_MAKEFILE ON)
3
+
4
+ set(LIB_LITERAL EnrichedMarkdownTextSpec)
5
+ set(LIB_TARGET_NAME react_codegen_${LIB_LITERAL})
6
+
7
+ set(LIB_ANDROID_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
8
+ set(LIB_ANDROID_GENERATED_JNI_DIR ${LIB_ANDROID_DIR}/generated/jni)
9
+ set(LIB_ANDROID_GENERATED_COMPONENTS_DIR ${LIB_ANDROID_GENERATED_JNI_DIR}/react/renderer/components/${LIB_LITERAL})
10
+
11
+ set(CPP_ROOT "${LIB_ANDROID_DIR}/../cpp")
12
+ set(ANDROID_CPP_DIR "${LIB_ANDROID_DIR}/src/main/cpp")
13
+
14
+ file(GLOB MD4C_SOURCES "${CPP_ROOT}/md4c/*.c")
15
+ file(GLOB PARSER_SOURCES "${CPP_ROOT}/parser/*.cpp")
16
+
17
+ # md4c is C code, build as separate static library with C flags
18
+ add_library(md4c_lib STATIC ${MD4C_SOURCES})
19
+ target_include_directories(md4c_lib PUBLIC ${CPP_ROOT}/md4c)
20
+ target_compile_definitions(md4c_lib PRIVATE MD4C_USE_UTF8=1)
21
+ set_target_properties(md4c_lib PROPERTIES
22
+ C_STANDARD 11
23
+ C_STANDARD_REQUIRED ON
24
+ )
25
+
26
+ file(GLOB LIB_CODEGEN_SRCS CONFIGURE_DEPENDS ${LIB_ANDROID_GENERATED_JNI_DIR}/*.cpp ${LIB_ANDROID_GENERATED_COMPONENTS_DIR}/*.cpp)
27
+ file(GLOB LIB_CUSTOM_JNI_SRCS CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/react/renderer/components/${LIB_LITERAL}/*.cpp)
28
+
29
+ add_library(
30
+ ${LIB_TARGET_NAME}
31
+ SHARED
32
+ ${LIB_CODEGEN_SRCS}
33
+ ${LIB_CUSTOM_JNI_SRCS}
34
+ ${PARSER_SOURCES}
35
+ ${ANDROID_CPP_DIR}/jni-adapter.cpp
36
+ )
37
+
38
+ target_include_directories(
39
+ ${LIB_TARGET_NAME}
40
+ PUBLIC
41
+ ${CMAKE_CURRENT_SOURCE_DIR}
42
+ ${CMAKE_CURRENT_SOURCE_DIR}/react/renderer/components/${LIB_LITERAL}
43
+ ${LIB_ANDROID_GENERATED_JNI_DIR}
44
+ ${LIB_ANDROID_GENERATED_COMPONENTS_DIR}
45
+ ${CPP_ROOT}/md4c
46
+ ${CPP_ROOT}/parser
47
+ )
48
+
49
+ target_compile_definitions(${LIB_TARGET_NAME} PRIVATE MD4C_USE_UTF8=1)
50
+
51
+ find_package(fbjni REQUIRED CONFIG)
52
+ find_package(ReactAndroid REQUIRED CONFIG)
53
+ find_library(LOG_LIB log)
54
+
55
+ target_link_libraries(
56
+ ${LIB_TARGET_NAME}
57
+ ${LOG_LIB}
58
+ md4c_lib
59
+ fbjni::fbjni
60
+ ReactAndroid::jsi
61
+ ReactAndroid::reactnative
62
+ )
63
+
64
+ target_include_directories(
65
+ ${CMAKE_PROJECT_NAME}
66
+ PUBLIC
67
+ ${CMAKE_CURRENT_SOURCE_DIR}
68
+ )
69
+
70
+ if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 80)
71
+ target_compile_reactnative_options(${LIB_TARGET_NAME} PRIVATE)
72
+ else()
73
+ target_compile_options(
74
+ ${LIB_TARGET_NAME}
75
+ PRIVATE
76
+ -DLOG_TAG=\"ReactNative\"
77
+ -fexceptions
78
+ -frtti
79
+ -std=c++20
80
+ -Wall
81
+ )
82
+ endif()
@@ -0,0 +1,21 @@
1
+ /**
2
+ * This code was generated by
3
+ * [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be
6
+ * lost once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateModuleJniCpp.js
9
+ */
10
+
11
+ #include "EnrichedMarkdownTextSpec.h"
12
+
13
+ namespace facebook::react {
14
+
15
+ std::shared_ptr<TurboModule> EnrichedMarkdownTextSpec_ModuleProvider(const std::string &moduleName,
16
+ const JavaTurboModule::InitParams &params) {
17
+
18
+ return nullptr;
19
+ }
20
+
21
+ } // namespace facebook::react
@@ -0,0 +1,25 @@
1
+ /**
2
+ * This code was generated by
3
+ * [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be
6
+ * lost once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateModuleJniH.js
9
+ */
10
+
11
+ #pragma once
12
+
13
+ #include <ReactCommon/JavaTurboModule.h>
14
+ #include <ReactCommon/TurboModule.h>
15
+ #include <jsi/jsi.h>
16
+
17
+ #include <react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextComponentDescriptor.h>
18
+
19
+ namespace facebook::react {
20
+
21
+ JSI_EXPORT
22
+ std::shared_ptr<TurboModule> EnrichedMarkdownTextSpec_ModuleProvider(const std::string &moduleName,
23
+ const JavaTurboModule::InitParams &params);
24
+
25
+ } // namespace facebook::react
@@ -0,0 +1,29 @@
1
+ #pragma once
2
+
3
+ #include "MarkdownTextMeasurementManager.h"
4
+ #include "MarkdownTextShadowNode.h"
5
+
6
+ #include <react/renderer/core/ConcreteComponentDescriptor.h>
7
+
8
+ namespace facebook::react {
9
+
10
+ class MarkdownTextComponentDescriptor final : public ConcreteComponentDescriptor<MarkdownTextShadowNode> {
11
+ public:
12
+ MarkdownTextComponentDescriptor(const ComponentDescriptorParameters &parameters)
13
+ : ConcreteComponentDescriptor(parameters),
14
+ measurementsManager_(std::make_shared<MarkdownTextMeasurementManager>(contextContainer_)) {}
15
+
16
+ void adopt(ShadowNode &shadowNode) const override {
17
+ ConcreteComponentDescriptor::adopt(shadowNode);
18
+ auto &markdownTextShadowNode = static_cast<MarkdownTextShadowNode &>(shadowNode);
19
+
20
+ // MarkdownTextShadowNode uses MarkdownTextMeasurementManager
21
+ // to provide measurements to Yoga.
22
+ markdownTextShadowNode.setMeasurementsManager(measurementsManager_);
23
+ }
24
+
25
+ private:
26
+ const std::shared_ptr<MarkdownTextMeasurementManager> measurementsManager_;
27
+ };
28
+
29
+ } // namespace facebook::react
@@ -0,0 +1,45 @@
1
+ #include "MarkdownTextMeasurementManager.h"
2
+ #include "conversions.h"
3
+
4
+ #include <fbjni/fbjni.h>
5
+ #include <react/jni/ReadableNativeMap.h>
6
+ #include <react/renderer/core/conversions.h>
7
+
8
+ using namespace facebook::jni;
9
+
10
+ namespace facebook::react {
11
+
12
+ Size MarkdownTextMeasurementManager::measure(SurfaceId surfaceId, int viewTag, const EnrichedMarkdownTextProps &props,
13
+ LayoutConstraints layoutConstraints) const {
14
+ const jni::global_ref<jobject> &fabricUIManager = contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");
15
+
16
+ static const auto measure =
17
+ facebook::jni::findClassStatic("com/facebook/react/fabric/FabricUIManager")
18
+ ->getMethod<jlong(jint, jstring, ReadableMap::javaobject, ReadableMap::javaobject, ReadableMap::javaobject,
19
+ jfloat, jfloat, jfloat, jfloat)>("measure");
20
+
21
+ auto minimumSize = layoutConstraints.minimumSize;
22
+ auto maximumSize = layoutConstraints.maximumSize;
23
+
24
+ local_ref<JString> componentName = make_jstring("EnrichedMarkdownText");
25
+
26
+ // Prepare extraData map with viewTag
27
+ folly::dynamic extraData = folly::dynamic::object();
28
+ extraData["viewTag"] = viewTag;
29
+ local_ref<ReadableNativeMap::javaobject> extraDataRNM = ReadableNativeMap::newObjectCxxArgs(extraData);
30
+ local_ref<ReadableMap::javaobject> extraDataRM =
31
+ make_local(reinterpret_cast<ReadableMap::javaobject>(extraDataRNM.get()));
32
+
33
+ // Prepare layout metrics affecting props
34
+ auto serializedProps = toDynamic(props);
35
+ local_ref<ReadableNativeMap::javaobject> propsRNM = ReadableNativeMap::newObjectCxxArgs(serializedProps);
36
+ local_ref<ReadableMap::javaobject> propsRM = make_local(reinterpret_cast<ReadableMap::javaobject>(propsRNM.get()));
37
+
38
+ auto measurement = yogaMeassureToSize(measure(fabricUIManager, surfaceId, componentName.get(), extraDataRM.get(),
39
+ propsRM.get(), nullptr, minimumSize.width, maximumSize.width,
40
+ minimumSize.height, maximumSize.height));
41
+
42
+ return measurement;
43
+ }
44
+
45
+ } // namespace facebook::react
@@ -0,0 +1,21 @@
1
+ #pragma once
2
+
3
+ #include <react/renderer/components/EnrichedMarkdownTextSpec/Props.h>
4
+ #include <react/renderer/core/LayoutConstraints.h>
5
+ #include <react/utils/ContextContainer.h>
6
+
7
+ namespace facebook::react {
8
+
9
+ class MarkdownTextMeasurementManager {
10
+ public:
11
+ MarkdownTextMeasurementManager(const std::shared_ptr<const ContextContainer> &contextContainer)
12
+ : contextContainer_(contextContainer) {}
13
+
14
+ Size measure(SurfaceId surfaceId, int viewTag, const EnrichedMarkdownTextProps &props,
15
+ LayoutConstraints layoutConstraints) const;
16
+
17
+ private:
18
+ const std::shared_ptr<const ContextContainer> contextContainer_;
19
+ };
20
+
21
+ } // namespace facebook::react
@@ -0,0 +1,33 @@
1
+ #include "MarkdownTextShadowNode.h"
2
+
3
+ #include <react/renderer/core/LayoutContext.h>
4
+
5
+ namespace facebook::react {
6
+
7
+ extern const char MarkdownTextComponentName[] = "EnrichedMarkdownText";
8
+
9
+ void MarkdownTextShadowNode::setMeasurementsManager(
10
+ const std::shared_ptr<MarkdownTextMeasurementManager> &measurementsManager) {
11
+ ensureUnsealed();
12
+ measurementsManager_ = measurementsManager;
13
+ }
14
+
15
+ // Mark layout as dirty after state has been updated.
16
+ // Once layout is marked as dirty, `measureContent` will be called in order to
17
+ // recalculate layout.
18
+ void MarkdownTextShadowNode::dirtyLayoutIfNeeded() {
19
+ const auto state = this->getStateData();
20
+ const auto counter = state.getForceHeightRecalculationCounter();
21
+
22
+ if (forceHeightRecalculationCounter_ != counter) {
23
+ forceHeightRecalculationCounter_ = counter;
24
+ dirtyLayout();
25
+ }
26
+ }
27
+
28
+ Size MarkdownTextShadowNode::measureContent(const LayoutContext &layoutContext,
29
+ const LayoutConstraints &layoutConstraints) const {
30
+ return measurementsManager_->measure(getSurfaceId(), getTag(), getConcreteProps(), layoutConstraints);
31
+ }
32
+
33
+ } // namespace facebook::react
@@ -0,0 +1,49 @@
1
+ #pragma once
2
+
3
+ #include "MarkdownTextMeasurementManager.h"
4
+ #include "MarkdownTextState.h"
5
+
6
+ #include <react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.h>
7
+ #include <react/renderer/components/EnrichedMarkdownTextSpec/Props.h>
8
+ #include <react/renderer/components/view/ConcreteViewShadowNode.h>
9
+
10
+ namespace facebook::react {
11
+
12
+ JSI_EXPORT extern const char MarkdownTextComponentName[];
13
+
14
+ /*
15
+ * `ShadowNode` for <EnrichedMarkdownText> component.
16
+ */
17
+ class MarkdownTextShadowNode final
18
+ : public ConcreteViewShadowNode<MarkdownTextComponentName, EnrichedMarkdownTextProps,
19
+ EnrichedMarkdownTextEventEmitter, MarkdownTextState> {
20
+ public:
21
+ using ConcreteViewShadowNode::ConcreteViewShadowNode;
22
+
23
+ // This constructor is called when we "update" shadow node, e.g. after
24
+ // updating shadow node's state
25
+ MarkdownTextShadowNode(ShadowNode const &sourceShadowNode, ShadowNodeFragment const &fragment)
26
+ : ConcreteViewShadowNode(sourceShadowNode, fragment) {
27
+ dirtyLayoutIfNeeded();
28
+ }
29
+
30
+ static ShadowNodeTraits BaseTraits() {
31
+ auto traits = ConcreteViewShadowNode::BaseTraits();
32
+ traits.set(ShadowNodeTraits::Trait::LeafYogaNode);
33
+ traits.set(ShadowNodeTraits::Trait::MeasurableYogaNode);
34
+ return traits;
35
+ }
36
+
37
+ // Associates a shared `MarkdownTextMeasurementManager` with the node.
38
+ void setMeasurementsManager(const std::shared_ptr<MarkdownTextMeasurementManager> &measurementsManager);
39
+
40
+ void dirtyLayoutIfNeeded();
41
+
42
+ Size measureContent(const LayoutContext &layoutContext, const LayoutConstraints &layoutConstraints) const override;
43
+
44
+ private:
45
+ int forceHeightRecalculationCounter_;
46
+ std::shared_ptr<MarkdownTextMeasurementManager> measurementsManager_;
47
+ };
48
+
49
+ } // namespace facebook::react
@@ -0,0 +1,9 @@
1
+ #include "MarkdownTextState.h"
2
+
3
+ namespace facebook::react {
4
+
5
+ int MarkdownTextState::getForceHeightRecalculationCounter() const {
6
+ return forceHeightRecalculationCounter_;
7
+ }
8
+
9
+ } // namespace facebook::react
@@ -0,0 +1,25 @@
1
+ #pragma once
2
+
3
+ #include <folly/dynamic.h>
4
+
5
+ namespace facebook::react {
6
+
7
+ class MarkdownTextState {
8
+ public:
9
+ MarkdownTextState() : forceHeightRecalculationCounter_(0) {}
10
+
11
+ // Used by Kotlin to set current state value
12
+ MarkdownTextState(MarkdownTextState const &previousState, folly::dynamic data)
13
+ : forceHeightRecalculationCounter_((int)data["forceHeightRecalculationCounter"].getInt()){};
14
+
15
+ folly::dynamic getDynamic() const {
16
+ return {};
17
+ };
18
+
19
+ int getForceHeightRecalculationCounter() const;
20
+
21
+ private:
22
+ const int forceHeightRecalculationCounter_{};
23
+ };
24
+
25
+ } // namespace facebook::react
@@ -0,0 +1,19 @@
1
+ #pragma once
2
+
3
+ #include <folly/dynamic.h>
4
+ #include <react/renderer/components/EnrichedMarkdownTextSpec/Props.h>
5
+ #include <react/renderer/core/propsConversions.h>
6
+
7
+ namespace facebook::react {
8
+
9
+ #ifdef RN_SERIALIZABLE_STATE
10
+ inline folly::dynamic toDynamic(const EnrichedMarkdownTextProps &props) {
11
+ // Serialize measurement-affecting props
12
+ folly::dynamic serializedProps = folly::dynamic::object();
13
+ serializedProps["markdown"] = props.markdown;
14
+ serializedProps["markdownStyle"] = toDynamic(props.markdownStyle);
15
+ return serializedProps;
16
+ }
17
+ #endif
18
+
19
+ } // namespace facebook::react