@mathers101/react-native-render-rich-text 0.1.9 → 0.1.14

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 (327) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +140 -140
  3. package/ReactNativeRenderRichText.podspec +23 -23
  4. package/android/build.gradle +86 -86
  5. package/android/consumer-rules.pro +3 -3
  6. package/android/src/main/AndroidManifest.xml +2 -2
  7. package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextLayoutManager.kt +24 -24
  8. package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextPackage.kt +13 -13
  9. package/android/src/main/java/com/renderrichtext/MeasurementStore.kt +644 -644
  10. package/android/src/main/java/com/renderrichtext/accessibility/AccessibilityLabels.kt +17 -17
  11. package/android/src/main/java/com/renderrichtext/accessibility/AccessibleTiptapTextView.kt +112 -112
  12. package/android/src/main/java/com/renderrichtext/accessibility/TiptapAccessibilityHelper.kt +576 -576
  13. package/android/src/main/java/com/renderrichtext/events/CodeBlockPressEvent.kt +24 -24
  14. package/android/src/main/java/com/renderrichtext/events/ContextMenuItemPressEvent.kt +28 -28
  15. package/android/src/main/java/com/renderrichtext/events/CopyPressEvent.kt +24 -24
  16. package/android/src/main/java/com/renderrichtext/events/ImagePressEvent.kt +25 -25
  17. package/android/src/main/java/com/renderrichtext/events/LatexErrorEvent.kt +29 -29
  18. package/android/src/main/java/com/renderrichtext/events/LinkLongPressEvent.kt +23 -23
  19. package/android/src/main/java/com/renderrichtext/events/LinkPressEvent.kt +23 -23
  20. package/android/src/main/java/com/renderrichtext/events/MentionLongPressEvent.kt +25 -25
  21. package/android/src/main/java/com/renderrichtext/events/MentionPressEvent.kt +25 -25
  22. package/android/src/main/java/com/renderrichtext/events/TaskListItemPressEvent.kt +26 -26
  23. package/android/src/main/java/com/renderrichtext/math/LatexErrorReporter.kt +9 -9
  24. package/android/src/main/java/com/renderrichtext/parser/Parser.kt +59 -59
  25. package/android/src/main/java/com/renderrichtext/parser/TextLinkMatching.kt +35 -35
  26. package/android/src/main/java/com/renderrichtext/renderer/BaselineShiftRenderer.kt +45 -45
  27. package/android/src/main/java/com/renderrichtext/renderer/BlankLineRenderer.kt +39 -39
  28. package/android/src/main/java/com/renderrichtext/renderer/BlockquoteRenderer.kt +243 -243
  29. package/android/src/main/java/com/renderrichtext/renderer/BlockquoteTextRenderer.kt +56 -56
  30. package/android/src/main/java/com/renderrichtext/renderer/CodeBlockRenderer.kt +135 -135
  31. package/android/src/main/java/com/renderrichtext/renderer/CodeRenderer.kt +37 -37
  32. package/android/src/main/java/com/renderrichtext/renderer/EmphasisRenderer.kt +28 -28
  33. package/android/src/main/java/com/renderrichtext/renderer/HeadingRenderer.kt +81 -81
  34. package/android/src/main/java/com/renderrichtext/renderer/HighlightRenderer.kt +26 -26
  35. package/android/src/main/java/com/renderrichtext/renderer/LineBreakRenderer.kt +17 -17
  36. package/android/src/main/java/com/renderrichtext/renderer/LinkRenderer.kt +90 -90
  37. package/android/src/main/java/com/renderrichtext/renderer/ListContextManager.kt +109 -109
  38. package/android/src/main/java/com/renderrichtext/renderer/ListItemRenderer.kt +211 -211
  39. package/android/src/main/java/com/renderrichtext/renderer/ListRenderer.kt +133 -133
  40. package/android/src/main/java/com/renderrichtext/renderer/MentionRenderer.kt +85 -85
  41. package/android/src/main/java/com/renderrichtext/renderer/ParagraphRenderer.kt +91 -91
  42. package/android/src/main/java/com/renderrichtext/renderer/Renderer.kt +148 -148
  43. package/android/src/main/java/com/renderrichtext/renderer/SoftBreakRenderer.kt +17 -17
  44. package/android/src/main/java/com/renderrichtext/renderer/SpanStyleCache.kt +143 -143
  45. package/android/src/main/java/com/renderrichtext/renderer/StrikethroughRenderer.kt +28 -28
  46. package/android/src/main/java/com/renderrichtext/renderer/StrongRenderer.kt +28 -28
  47. package/android/src/main/java/com/renderrichtext/renderer/TextRenderer.kt +31 -31
  48. package/android/src/main/java/com/renderrichtext/renderer/ThematicBreakRenderer.kt +46 -46
  49. package/android/src/main/java/com/renderrichtext/renderer/UnderlineRenderer.kt +28 -28
  50. package/android/src/main/java/com/renderrichtext/spans/BaseListSpan.kt +164 -164
  51. package/android/src/main/java/com/renderrichtext/spans/BaselineShiftSpan.kt +27 -27
  52. package/android/src/main/java/com/renderrichtext/spans/BlockquoteSpan.kt +302 -302
  53. package/android/src/main/java/com/renderrichtext/spans/CodeBackgroundSpan.kt +205 -205
  54. package/android/src/main/java/com/renderrichtext/spans/CodeBlockSpan.kt +216 -216
  55. package/android/src/main/java/com/renderrichtext/spans/CodeSpan.kt +32 -32
  56. package/android/src/main/java/com/renderrichtext/spans/EmphasisSpan.kt +42 -42
  57. package/android/src/main/java/com/renderrichtext/spans/FadeInSpan.kt +29 -29
  58. package/android/src/main/java/com/renderrichtext/spans/HeadingSpan.kt +38 -38
  59. package/android/src/main/java/com/renderrichtext/spans/HighlightSpan.kt +80 -80
  60. package/android/src/main/java/com/renderrichtext/spans/ImageSpan.kt +481 -481
  61. package/android/src/main/java/com/renderrichtext/spans/InlineBackgroundGeometry.kt +42 -42
  62. package/android/src/main/java/com/renderrichtext/spans/LineHeightSpan.kt +39 -39
  63. package/android/src/main/java/com/renderrichtext/spans/LinkPillIconCache.kt +154 -154
  64. package/android/src/main/java/com/renderrichtext/spans/LinkPillSpan.kt +381 -381
  65. package/android/src/main/java/com/renderrichtext/spans/LinkSpan.kt +68 -68
  66. package/android/src/main/java/com/renderrichtext/spans/ListItemSpacingSpan.kt +33 -33
  67. package/android/src/main/java/com/renderrichtext/spans/ListMarkerAnchorSpan.kt +38 -38
  68. package/android/src/main/java/com/renderrichtext/spans/MarginBottomSpan.kt +76 -76
  69. package/android/src/main/java/com/renderrichtext/spans/MentionChipSpan.kt +132 -132
  70. package/android/src/main/java/com/renderrichtext/spans/MentionSpan.kt +46 -46
  71. package/android/src/main/java/com/renderrichtext/spans/OrderedListSpan.kt +127 -127
  72. package/android/src/main/java/com/renderrichtext/spans/SpoilerSpan.kt +33 -33
  73. package/android/src/main/java/com/renderrichtext/spans/StrikethroughSpan.kt +12 -12
  74. package/android/src/main/java/com/renderrichtext/spans/StrongSpan.kt +39 -39
  75. package/android/src/main/java/com/renderrichtext/spans/TaskListSpan.kt +143 -143
  76. package/android/src/main/java/com/renderrichtext/spans/TextSpan.kt +26 -26
  77. package/android/src/main/java/com/renderrichtext/spans/ThematicBreakSpan.kt +69 -69
  78. package/android/src/main/java/com/renderrichtext/spans/UnorderedListSpan.kt +96 -96
  79. package/android/src/main/java/com/renderrichtext/spoiler/SpoilerStubs.kt +46 -46
  80. package/android/src/main/java/com/renderrichtext/styles/BaseBlockStyle.kt +11 -11
  81. package/android/src/main/java/com/renderrichtext/styles/BlockquoteStyle.kt +83 -83
  82. package/android/src/main/java/com/renderrichtext/styles/CodeBlockStyle.kt +80 -80
  83. package/android/src/main/java/com/renderrichtext/styles/CodeStyle.kt +26 -26
  84. package/android/src/main/java/com/renderrichtext/styles/EmphasisStyle.kt +21 -21
  85. package/android/src/main/java/com/renderrichtext/styles/FactoidStyle.kt +21 -21
  86. package/android/src/main/java/com/renderrichtext/styles/HeadingStyle.kt +33 -33
  87. package/android/src/main/java/com/renderrichtext/styles/HighlightStyle.kt +19 -19
  88. package/android/src/main/java/com/renderrichtext/styles/ImageStyle.kt +29 -29
  89. package/android/src/main/java/com/renderrichtext/styles/InlineImageStyle.kt +17 -17
  90. package/android/src/main/java/com/renderrichtext/styles/InlineMathStyle.kt +17 -17
  91. package/android/src/main/java/com/renderrichtext/styles/LinkPillContent.kt +36 -36
  92. package/android/src/main/java/com/renderrichtext/styles/LinkPillStyle.kt +44 -44
  93. package/android/src/main/java/com/renderrichtext/styles/LinkStyle.kt +23 -23
  94. package/android/src/main/java/com/renderrichtext/styles/LinkVariantEntry.kt +34 -34
  95. package/android/src/main/java/com/renderrichtext/styles/ListStyle.kt +65 -65
  96. package/android/src/main/java/com/renderrichtext/styles/MathStyle.kt +29 -29
  97. package/android/src/main/java/com/renderrichtext/styles/MentionStyle.kt +19 -19
  98. package/android/src/main/java/com/renderrichtext/styles/ParagraphStyle.kt +33 -33
  99. package/android/src/main/java/com/renderrichtext/styles/SpoilerStyle.kt +27 -27
  100. package/android/src/main/java/com/renderrichtext/styles/StrikethroughStyle.kt +17 -17
  101. package/android/src/main/java/com/renderrichtext/styles/StrongStyle.kt +21 -21
  102. package/android/src/main/java/com/renderrichtext/styles/StyleConfig.kt +411 -411
  103. package/android/src/main/java/com/renderrichtext/styles/StyleParser.kt +92 -92
  104. package/android/src/main/java/com/renderrichtext/styles/SubscriptStyle.kt +16 -16
  105. package/android/src/main/java/com/renderrichtext/styles/SuperscriptStyle.kt +16 -16
  106. package/android/src/main/java/com/renderrichtext/styles/TableStyle.kt +75 -75
  107. package/android/src/main/java/com/renderrichtext/styles/TaskListStyle.kt +29 -29
  108. package/android/src/main/java/com/renderrichtext/styles/TextAlignment.kt +32 -32
  109. package/android/src/main/java/com/renderrichtext/styles/ThematicBreakStyle.kt +23 -23
  110. package/android/src/main/java/com/renderrichtext/styles/UnderlineStyle.kt +17 -17
  111. package/android/src/main/java/com/renderrichtext/styles/VideoStyle.kt +31 -31
  112. package/android/src/main/java/com/renderrichtext/utils/common/BorderStyleUtils.kt +86 -86
  113. package/android/src/main/java/com/renderrichtext/utils/common/BreakStrategyUtils.kt +32 -32
  114. package/android/src/main/java/com/renderrichtext/utils/common/CodeBlockHighlighter.kt +36 -36
  115. package/android/src/main/java/com/renderrichtext/utils/common/CodeBlockNode.kt +42 -42
  116. package/android/src/main/java/com/renderrichtext/utils/common/EllipsizeUtils.kt +27 -27
  117. package/android/src/main/java/com/renderrichtext/utils/common/EnrichedTiptapAncestorUtils.kt +10 -10
  118. package/android/src/main/java/com/renderrichtext/utils/common/FeatureFlags.kt +9 -9
  119. package/android/src/main/java/com/renderrichtext/utils/common/LinkRecognitionProps.kt +31 -31
  120. package/android/src/main/java/com/renderrichtext/utils/common/LinkRegexConfig.kt +56 -56
  121. package/android/src/main/java/com/renderrichtext/utils/common/MotionPreferences.kt +18 -18
  122. package/android/src/main/java/com/renderrichtext/utils/common/ReadableMapExtensions.kt +28 -28
  123. package/android/src/main/java/com/renderrichtext/utils/common/layout/RTLUtils.kt +6 -6
  124. package/android/src/main/java/com/renderrichtext/utils/common/serialization/TiptapASTSerializer.kt +368 -368
  125. package/android/src/main/java/com/renderrichtext/utils/text/ImageCache.kt +88 -88
  126. package/android/src/main/java/com/renderrichtext/utils/text/ImageDownloader.kt +203 -203
  127. package/android/src/main/java/com/renderrichtext/utils/text/LocalImageLoader.kt +167 -167
  128. package/android/src/main/java/com/renderrichtext/utils/text/TailFadeInAnimator.kt +84 -84
  129. package/android/src/main/java/com/renderrichtext/utils/text/conversion/HTMLGenerator.kt +1105 -1105
  130. package/android/src/main/java/com/renderrichtext/utils/text/conversion/TiptapExtractor.kt +423 -423
  131. package/android/src/main/java/com/renderrichtext/utils/text/extensions/ParagraphUtils.kt +9 -9
  132. package/android/src/main/java/com/renderrichtext/utils/text/extensions/SpannableExtensions.kt +9 -9
  133. package/android/src/main/java/com/renderrichtext/utils/text/extensions/TextPaintExtensions.kt +76 -76
  134. package/android/src/main/java/com/renderrichtext/utils/text/interaction/CheckboxTouchHelper.kt +61 -61
  135. package/android/src/main/java/com/renderrichtext/utils/text/interaction/TaskListTapUtils.kt +286 -286
  136. package/android/src/main/java/com/renderrichtext/utils/text/span/ApplyLineHeight.kt +39 -39
  137. package/android/src/main/java/com/renderrichtext/utils/text/span/BlockSpacing.kt +142 -142
  138. package/android/src/main/java/com/renderrichtext/utils/text/span/SpanFlags.kt +43 -43
  139. package/android/src/main/java/com/renderrichtext/utils/text/span/WidthAwareSpans.kt +30 -30
  140. package/android/src/main/java/com/renderrichtext/utils/text/view/CodeBlockPressHost.kt +15 -15
  141. package/android/src/main/java/com/renderrichtext/utils/text/view/ImagePressHost.kt +19 -19
  142. package/android/src/main/java/com/renderrichtext/utils/text/view/SelectionActionMode.kt +235 -235
  143. package/android/src/main/java/com/renderrichtext/utils/text/view/TextSelectionColors.kt +48 -48
  144. package/android/src/main/java/com/renderrichtext/utils/text/view/TextViewSetup.kt +119 -119
  145. package/android/src/main/java/com/renderrichtext/views/ContextMenuPopup.kt +217 -217
  146. package/android/src/main/java/com/renderrichtext/views/CopyGlyph.kt +101 -101
  147. package/android/src/main/java/com/renderrichtext/views/WrapGlyph.kt +40 -40
  148. package/android/src/main/jni/CMakeLists.txt +52 -52
  149. package/android/src/main/jni/react/renderer/components/RichTextSpec/ComponentDescriptors.h +30 -30
  150. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextComponentDescriptor.h +29 -29
  151. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextMeasurementManager.cpp +45 -45
  152. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextMeasurementManager.h +21 -21
  153. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextShadowNode.cpp +38 -38
  154. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextShadowNode.h +53 -53
  155. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextState.cpp +9 -9
  156. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextState.h +24 -24
  157. package/android/src/main/jni/react/renderer/components/RichTextSpec/conversions.h +40 -40
  158. package/cpp/parser/TiptapParser.hpp +13 -13
  159. package/cpp/vendor/nlohmann/json.hpp +24765 -24765
  160. package/ios/EnrichedTiptapText.h +27 -27
  161. package/ios/attachments/ENRMImageAttachment.h +51 -51
  162. package/ios/attachments/ENRMImageAttachment.m +398 -398
  163. package/ios/attachments/ENRMLinkPillAttachment.h +47 -47
  164. package/ios/attachments/ENRMLinkPillAttachment.m +324 -324
  165. package/ios/attachments/ENRMLinkPillIconCache.h +28 -28
  166. package/ios/attachments/ENRMLinkPillIconCache.m +181 -181
  167. package/ios/attachments/ENRMLinkPillText.h +27 -27
  168. package/ios/attachments/ENRMLinkPillText.m +118 -118
  169. package/ios/attachments/ENRMMathInlineAttachment.h +7 -7
  170. package/ios/attachments/ENRMMathInlineAttachment.m +4 -4
  171. package/ios/attachments/ThematicBreakAttachment.h +15 -15
  172. package/ios/attachments/ThematicBreakAttachment.m +33 -33
  173. package/ios/internals/ENRMViewFreeMeasurement.h +208 -208
  174. package/ios/internals/EnrichedTiptapTextComponentDescriptor.h +19 -19
  175. package/ios/internals/EnrichedTiptapTextShadowNode.h +43 -43
  176. package/ios/internals/EnrichedTiptapTextShadowNode.mm +69 -69
  177. package/ios/internals/EnrichedTiptapTextState.h +24 -24
  178. package/ios/internals/MeasurementCache.h +308 -308
  179. package/ios/internals/ShadowMeasurementUtils.h +145 -145
  180. package/ios/parser/ENRMTextLinkAttributes.h +7 -7
  181. package/ios/parser/ENRMTiptapParser.h +33 -33
  182. package/ios/parser/ENRMTiptapParser.mm +73 -73
  183. package/ios/parser/TiptapASTNode.m +52 -52
  184. package/ios/renderer/AttributedRenderer.h +23 -23
  185. package/ios/renderer/AttributedRenderer.m +229 -229
  186. package/ios/renderer/BaseRenderer.h +33 -33
  187. package/ios/renderer/BaseRenderer.m +46 -46
  188. package/ios/renderer/BaselineShiftTextAttributes.h +10 -10
  189. package/ios/renderer/BaselineShiftTextAttributes.m +26 -26
  190. package/ios/renderer/BlankLineRenderer.h +4 -4
  191. package/ios/renderer/BlankLineRenderer.m +51 -51
  192. package/ios/renderer/BlockquoteRenderer.h +6 -6
  193. package/ios/renderer/BlockquoteRenderer.m +258 -258
  194. package/ios/renderer/CodeBlockRenderer.h +9 -9
  195. package/ios/renderer/CodeBlockRenderer.m +99 -99
  196. package/ios/renderer/CodeRenderer.h +9 -9
  197. package/ios/renderer/CodeRenderer.m +69 -69
  198. package/ios/renderer/ENRMBlockquoteTextRenderer.h +25 -25
  199. package/ios/renderer/ENRMBlockquoteTextRenderer.m +48 -48
  200. package/ios/renderer/EmphasisRenderer.h +5 -5
  201. package/ios/renderer/EmphasisRenderer.m +99 -99
  202. package/ios/renderer/HeadingRenderer.h +6 -6
  203. package/ios/renderer/HeadingRenderer.m +102 -102
  204. package/ios/renderer/HighlightRenderer.h +7 -7
  205. package/ios/renderer/HighlightRenderer.m +33 -33
  206. package/ios/renderer/LinkRenderer.h +6 -6
  207. package/ios/renderer/LinkRenderer.m +157 -157
  208. package/ios/renderer/ListItemRenderer.h +24 -24
  209. package/ios/renderer/ListItemRenderer.m +283 -283
  210. package/ios/renderer/ListRenderer.h +13 -13
  211. package/ios/renderer/ListRenderer.m +126 -126
  212. package/ios/renderer/MentionRenderer.h +9 -9
  213. package/ios/renderer/MentionRenderer.m +96 -96
  214. package/ios/renderer/NodeRenderer.h +8 -8
  215. package/ios/renderer/ParagraphRenderer.h +6 -6
  216. package/ios/renderer/ParagraphRenderer.m +85 -85
  217. package/ios/renderer/RenderContext.h +145 -145
  218. package/ios/renderer/RenderContext.m +402 -402
  219. package/ios/renderer/RendererFactory.h +12 -12
  220. package/ios/renderer/StrikethroughRenderer.h +5 -5
  221. package/ios/renderer/StrikethroughRenderer.m +30 -30
  222. package/ios/renderer/StrongRenderer.h +5 -5
  223. package/ios/renderer/StrongRenderer.m +87 -87
  224. package/ios/renderer/TextRenderer.h +6 -6
  225. package/ios/renderer/TextRenderer.m +18 -18
  226. package/ios/renderer/ThematicBreakRenderer.h +4 -4
  227. package/ios/renderer/ThematicBreakRenderer.m +41 -41
  228. package/ios/renderer/UnderlineRenderer.h +4 -4
  229. package/ios/renderer/UnderlineRenderer.m +41 -41
  230. package/ios/styles/ENRMFontSlot.h +12 -12
  231. package/ios/styles/ENRMFontSlot.m +24 -24
  232. package/ios/styles/StyleConfig.h +488 -488
  233. package/ios/styles/StyleConfig.mm +2820 -2820
  234. package/ios/utils/AccessibilityInfo.h +35 -35
  235. package/ios/utils/AccessibilityInfo.m +24 -24
  236. package/ios/utils/BlockquoteBorder.h +26 -26
  237. package/ios/utils/BlockquoteBorder.m +294 -294
  238. package/ios/utils/CodeBackground.h +19 -19
  239. package/ios/utils/CodeBackground.m +196 -196
  240. package/ios/utils/CodeBlockBackground.h +17 -17
  241. package/ios/utils/CodeBlockBackground.m +102 -102
  242. package/ios/utils/ContextMenuUtils.h +76 -76
  243. package/ios/utils/ContextMenuUtils.mm +75 -75
  244. package/ios/utils/ENRMAccessibilityLabels.h +40 -40
  245. package/ios/utils/ENRMAccessibilityLabels.m +5 -5
  246. package/ios/utils/ENRMAsyncRenderCoordinator.h +24 -24
  247. package/ios/utils/ENRMAsyncRenderCoordinator.m +37 -37
  248. package/ios/utils/ENRMAtomicSize.h +65 -65
  249. package/ios/utils/ENRMCodeBlockContent.h +37 -37
  250. package/ios/utils/ENRMCodeBlockContent.mm +89 -89
  251. package/ios/utils/ENRMFeatureFlags.h +25 -25
  252. package/ios/utils/ENRMImageDownloader.h +30 -30
  253. package/ios/utils/ENRMImageDownloader.m +168 -168
  254. package/ios/utils/ENRMLatexErrorCoordinator.h +27 -27
  255. package/ios/utils/ENRMLatexErrorCoordinator.mm +75 -75
  256. package/ios/utils/ENRMLatexErrorReporting.h +13 -13
  257. package/ios/utils/ENRMLinkContextMenus.h +93 -93
  258. package/ios/utils/ENRMLinkContextMenus.m +178 -178
  259. package/ios/utils/ENRMLinkRegexConfig.h +30 -30
  260. package/ios/utils/ENRMLinkRegexConfig.mm +104 -104
  261. package/ios/utils/ENRMLinkRegexProps.h +23 -23
  262. package/ios/utils/ENRMLocalImageLoader.h +35 -35
  263. package/ios/utils/ENRMLocalImageLoader.m +111 -111
  264. package/ios/utils/ENRMMenuAction.h +27 -27
  265. package/ios/utils/ENRMMenuAction.m +33 -33
  266. package/ios/utils/ENRMSpoilerOverlayManager.h +15 -15
  267. package/ios/utils/ENRMSpoilerOverlayManager.m +19 -19
  268. package/ios/utils/ENRMSpoilerTapUtils.h +6 -6
  269. package/ios/utils/ENRMSpoilerTapUtils.m +11 -11
  270. package/ios/utils/ENRMTailFadeInAnimator.h +16 -16
  271. package/ios/utils/ENRMTailFadeInAnimator.m +161 -161
  272. package/ios/utils/ENRMTextHitTest.h +23 -23
  273. package/ios/utils/ENRMTextHitTest.m +20 -20
  274. package/ios/utils/ENRMTextInteractionUtils.h +20 -20
  275. package/ios/utils/ENRMTextInteractionUtils.m +15 -15
  276. package/ios/utils/ENRMTextRenderer.h +38 -38
  277. package/ios/utils/ENRMTextRenderer.m +54 -54
  278. package/ios/utils/ENRMTextViewSetup.h +132 -132
  279. package/ios/utils/ENRMUIKit.h +429 -429
  280. package/ios/utils/EditMenuUtils.h +105 -105
  281. package/ios/utils/EditMenuUtils.m +143 -143
  282. package/ios/utils/FontScaleObserver.h +10 -10
  283. package/ios/utils/FontScaleObserver.m +55 -55
  284. package/ios/utils/FontUtils.h +31 -31
  285. package/ios/utils/FontUtils.m +63 -63
  286. package/ios/utils/HTMLGenerator.h +25 -25
  287. package/ios/utils/HTMLGenerator.m +1041 -1041
  288. package/ios/utils/HeightUpdateUtils.h +25 -25
  289. package/ios/utils/ImageRequestHeaderUtils.h +35 -35
  290. package/ios/utils/LastElementUtils.h +97 -97
  291. package/ios/utils/LinkContextMenuUtils.h +55 -55
  292. package/ios/utils/LinkPillContentUtils.h +46 -46
  293. package/ios/utils/ListMarkerDrawer.h +15 -15
  294. package/ios/utils/ListMarkerDrawer.m +239 -239
  295. package/ios/utils/MentionBackground.h +26 -26
  296. package/ios/utils/MentionBackground.m +86 -86
  297. package/ios/utils/ParagraphStyleUtils.h +87 -87
  298. package/ios/utils/ParagraphStyleUtils.m +484 -484
  299. package/ios/utils/PasteboardUtils.h +48 -48
  300. package/ios/utils/PasteboardUtils.m +166 -166
  301. package/ios/utils/RTFExportUtils.h +24 -24
  302. package/ios/utils/RTFExportUtils.m +299 -299
  303. package/ios/utils/SelectionColorUtils.h +14 -14
  304. package/ios/utils/StylePropsUtils.h +1340 -1340
  305. package/ios/utils/TaskListTapUtils.h +6 -6
  306. package/ios/utils/TaskListTapUtils.m +14 -14
  307. package/ios/utils/TextViewLayoutManager.h +14 -14
  308. package/ios/utils/TiptapAccessibilityElementBuilder.h +43 -43
  309. package/ios/utils/TiptapAccessibilityElementBuilder.m +432 -432
  310. package/ios/utils/TiptapExtractor.h +17 -17
  311. package/ios/utils/TiptapExtractor.m +367 -367
  312. package/ios/views/ENRMTiptapTextView.h +25 -25
  313. package/ios/views/ENRMTiptapTextView.m +247 -247
  314. package/package.json +65 -70
  315. package/react-native.config.js +10 -10
  316. package/src/admonitionDefaults.ts +58 -58
  317. package/src/darkModeTextStyle.ts +99 -99
  318. package/src/headingDefaults.ts +21 -21
  319. package/src/index.tsx +4 -4
  320. package/src/linkVariantUtils.ts +120 -120
  321. package/src/normalizeTiptapStyle.ts +397 -397
  322. package/src/rn-globals.d.ts +1 -1
  323. package/src/styleUtils.ts +107 -107
  324. package/src/types/TiptapStyle.ts +532 -532
  325. package/src/types/TiptapStyleInternal.ts +299 -299
  326. package/src/types/linkPill.ts +9 -9
  327. package/src/utils/isDev.ts +4 -4
@@ -1,145 +1,145 @@
1
- #pragma once
2
-
3
- #include "MeasurementCache.h"
4
- #import <Foundation/Foundation.h>
5
- #import <React/RCTUtils.h>
6
- #include <algorithm>
7
- #include <cmath>
8
- #include <react/renderer/core/LayoutConstraints.h>
9
- #include <react/renderer/core/LayoutContext.h>
10
- #include <react/utils/ManagedObjectWrapper.h>
11
-
12
- namespace facebook::react {
13
-
14
- // Threading contract (issue #550): measureContent may run on any thread while
15
- // RN holds commit locks that main-thread committers (e.g. Reanimated) also
16
- // acquire — with `preventShadowTreeCommitExhaustion`, the JS thread re-runs
17
- // layout under `revisionMutexRecursive_` after 3 failed optimistic commits.
18
- // Any dispatch_sync to main from this path can therefore deadlock: JS waits
19
- // for main, main waits for the mutex JS holds (watchdog kill 0x8BADF00D).
20
- // Nothing in the measurement path may wait on the main thread.
21
- // EnrichedTiptapText and EnrichedTiptap both measure view-free
22
- // (ENRMViewFreeMeasurement.h) and comply fully. The one known remaining
23
- // violation is the text input's own measureContent
24
- // (EnrichedTiptapTextInputShadowNode.mm), which measures live editable
25
- // UITextView state and needs its own strategy.
26
-
27
- /**
28
- * Font scale (Dynamic Type multiplier) for measurement, without touching the
29
- * main thread.
30
- *
31
- * Reads `LayoutContext::fontSizeMultiplier` instead of calling
32
- * `RCTFontSizeMultiplier()` (a UIKit read that previously forced a
33
- * dispatch_sync to main on every measure — a deadlock window under the locked
34
- * commit fallback, see the contract above). RN maintains the multiplier for
35
- * us: `RCTFabricSurface::_updateLayoutContext` sets it on main from
36
- * `RCTFontSizeMultiplier()` and re-runs `constraintLayout` whenever
37
- * `UIContentSizeCategoryDidChangeNotification` fires, so every Dynamic Type
38
- * change re-measures with the fresh value. This is the same source
39
- * `ParagraphShadowNode` uses for core text. A measure racing a Dynamic Type
40
- * change at worst caches under the outgoing scale, which is never read again
41
- * once the re-layout lands.
42
- */
43
- static inline CGFloat ENRMFontScaleForMeasurement(bool allowFontScaling, const LayoutContext &layoutContext)
44
- {
45
- return allowFontScaling ? layoutContext.fontSizeMultiplier : 1.0;
46
- }
47
-
48
- static inline Size ENRMClampMeasuredSize(CGSize size, const LayoutConstraints &layoutConstraints)
49
- {
50
- Float clampedWidth = std::max((Float)size.width, layoutConstraints.minimumSize.width);
51
- clampedWidth = std::min(clampedWidth, layoutConstraints.maximumSize.width);
52
- Float clampedHeight = std::max((Float)size.height, layoutConstraints.minimumSize.height);
53
- if (std::isfinite(layoutConstraints.maximumSize.height)) {
54
- clampedHeight = std::min(clampedHeight, layoutConstraints.maximumSize.height);
55
- }
56
- return {clampedWidth, clampedHeight};
57
- }
58
-
59
- template <typename PropsT>
60
- static inline bool ENRMPropsNeedExactStreamingMeasurement(const PropsT &oldProps, const PropsT &newProps)
61
- {
62
- return oldProps.streamingAnimation != newProps.streamingAnimation ||
63
- oldProps.allowFontScaling != newProps.allowFontScaling ||
64
- oldProps.maxFontSizeMultiplier != newProps.maxFontSizeMultiplier ||
65
- oldProps.allowTrailingMargin != newProps.allowTrailingMargin ||
66
- oldProps.md4cFlags.underline != newProps.md4cFlags.underline ||
67
- oldProps.md4cFlags.superscript != newProps.md4cFlags.superscript ||
68
- oldProps.md4cFlags.subscript != newProps.md4cFlags.subscript ||
69
- oldProps.md4cFlags.latexMath != newProps.md4cFlags.latexMath ||
70
- oldProps.md4cFlags.highlight != newProps.md4cFlags.highlight ||
71
- oldProps.md4cFlags.hardSoftBreaks != newProps.md4cFlags.hardSoftBreaks ||
72
- oldProps.md4cFlags.preserveBlankLines != newProps.md4cFlags.preserveBlankLines ||
73
- oldProps.isGFM != newProps.isGFM || oldProps.md4cFlags.admonitions != newProps.md4cFlags.admonitions ||
74
- computeStyleFingerprint(oldProps.tiptapStyle) != computeStyleFingerprint(newProps.tiptapStyle);
75
- }
76
-
77
- /**
78
- * Shared measureContent implementation for the tiptap component views.
79
- *
80
- * Owns the thread-safe layers — the streaming fast path (lock-free
81
- * `ENRMAtomicSize` mailbox published by `updateLayoutMetrics:`), the
82
- * LRU measurement cache, and the `layoutContext`-sourced font scale — then
83
- * delegates cache misses to `measureUncached`, through which both components
84
- * plug their view-free pipeline (`ENRMMeasureTiptapViewFree` /
85
- * `ENRMMeasureSegmentedTiptapViewFree`); the resolved view is still handed
86
- * to the block for strategies that can use it. `fontScale` handed to the
87
- * block is the real multiplier even when streaming skips the cache —
88
- * rendering must always use it. `wrappedCodeBlocksFingerprint` folds view
89
- * state outside the props that changes the size (code blocks the user wrapped)
90
- * into the cache key.
91
- */
92
- template <typename PropsT, typename ViewT>
93
- static inline Size
94
- ENRMMeasureTiptapContent(const PropsT &typedProps, const std::shared_ptr<void> &componentViewRef, int receivedCounter,
95
- int &lastExactMeasurementCounter, CGSize &lastExactMeasurementSize, TiptapFlavor flavor,
96
- const LayoutContext &layoutContext, const LayoutConstraints &layoutConstraints,
97
- CGSize (^measureUncached)(ViewT *view, CGFloat maxWidth, CGFloat fontScale),
98
- size_t wrappedCodeBlocksFingerprint = 0)
99
- {
100
- CGFloat maxWidth = layoutConstraints.maximumSize.width;
101
-
102
- RCTInternalGenericWeakWrapper *weakWrapper = (RCTInternalGenericWeakWrapper *)unwrapManagedObject(componentViewRef);
103
- ViewT *view = weakWrapper ? (ViewT *)weakWrapper.object : nil;
104
-
105
- // Streaming fast path. Yoga re-measures several times per pass; the first call
106
- // bumps lastExactMeasurementCounter, the rest land here. Return the freshly
107
- // measured size, not the view's mailbox — mid-pass the frame isn't committed,
108
- // so the mailbox is a generation stale and would freeze the height.
109
- if (typedProps.streamingAnimation && view && receivedCounter <= lastExactMeasurementCounter) {
110
- if (lastExactMeasurementSize.width > 0 && lastExactMeasurementSize.height > 0) {
111
- return ENRMClampMeasuredSize(lastExactMeasurementSize, layoutConstraints);
112
- }
113
- CGSize currentSize = [view lastCommittedLayoutSize];
114
- if (currentSize.width > 0 && currentSize.height > 0) {
115
- return ENRMClampMeasuredSize(currentSize, layoutConstraints);
116
- }
117
- }
118
-
119
- const bool shouldUseMeasurementCache = !typedProps.streamingAnimation;
120
- CGFloat fontScale = ENRMFontScaleForMeasurement(typedProps.allowFontScaling, layoutContext);
121
-
122
- if (shouldUseMeasurementCache && !typedProps.document.empty()) {
123
- auto cacheKey = buildMeasurementCacheKey(typedProps, maxWidth, fontScale, flavor, wrappedCodeBlocksFingerprint);
124
- CachedSize cached;
125
- if (MeasurementCache::shared().get(cacheKey, cached)) {
126
- return ENRMClampMeasuredSize(CGSizeMake(cached.width, cached.height), layoutConstraints);
127
- }
128
- }
129
-
130
- CGSize size = measureUncached(view, maxWidth, fontScale);
131
-
132
- if (shouldUseMeasurementCache && !typedProps.document.empty()) {
133
- auto cacheKey = buildMeasurementCacheKey(typedProps, maxWidth, fontScale, flavor, wrappedCodeBlocksFingerprint);
134
- MeasurementCache::shared().set(cacheKey, {size.width, size.height});
135
- }
136
-
137
- if (typedProps.streamingAnimation) {
138
- lastExactMeasurementCounter = receivedCounter;
139
- lastExactMeasurementSize = size;
140
- }
141
-
142
- return ENRMClampMeasuredSize(size, layoutConstraints);
143
- }
144
-
145
- } // namespace facebook::react
1
+ #pragma once
2
+
3
+ #include "MeasurementCache.h"
4
+ #import <Foundation/Foundation.h>
5
+ #import <React/RCTUtils.h>
6
+ #include <algorithm>
7
+ #include <cmath>
8
+ #include <react/renderer/core/LayoutConstraints.h>
9
+ #include <react/renderer/core/LayoutContext.h>
10
+ #include <react/utils/ManagedObjectWrapper.h>
11
+
12
+ namespace facebook::react {
13
+
14
+ // Threading contract (issue #550): measureContent may run on any thread while
15
+ // RN holds commit locks that main-thread committers (e.g. Reanimated) also
16
+ // acquire — with `preventShadowTreeCommitExhaustion`, the JS thread re-runs
17
+ // layout under `revisionMutexRecursive_` after 3 failed optimistic commits.
18
+ // Any dispatch_sync to main from this path can therefore deadlock: JS waits
19
+ // for main, main waits for the mutex JS holds (watchdog kill 0x8BADF00D).
20
+ // Nothing in the measurement path may wait on the main thread.
21
+ // EnrichedTiptapText and EnrichedTiptap both measure view-free
22
+ // (ENRMViewFreeMeasurement.h) and comply fully. The one known remaining
23
+ // violation is the text input's own measureContent
24
+ // (EnrichedTiptapTextInputShadowNode.mm), which measures live editable
25
+ // UITextView state and needs its own strategy.
26
+
27
+ /**
28
+ * Font scale (Dynamic Type multiplier) for measurement, without touching the
29
+ * main thread.
30
+ *
31
+ * Reads `LayoutContext::fontSizeMultiplier` instead of calling
32
+ * `RCTFontSizeMultiplier()` (a UIKit read that previously forced a
33
+ * dispatch_sync to main on every measure — a deadlock window under the locked
34
+ * commit fallback, see the contract above). RN maintains the multiplier for
35
+ * us: `RCTFabricSurface::_updateLayoutContext` sets it on main from
36
+ * `RCTFontSizeMultiplier()` and re-runs `constraintLayout` whenever
37
+ * `UIContentSizeCategoryDidChangeNotification` fires, so every Dynamic Type
38
+ * change re-measures with the fresh value. This is the same source
39
+ * `ParagraphShadowNode` uses for core text. A measure racing a Dynamic Type
40
+ * change at worst caches under the outgoing scale, which is never read again
41
+ * once the re-layout lands.
42
+ */
43
+ static inline CGFloat ENRMFontScaleForMeasurement(bool allowFontScaling, const LayoutContext &layoutContext)
44
+ {
45
+ return allowFontScaling ? layoutContext.fontSizeMultiplier : 1.0;
46
+ }
47
+
48
+ static inline Size ENRMClampMeasuredSize(CGSize size, const LayoutConstraints &layoutConstraints)
49
+ {
50
+ Float clampedWidth = std::max((Float)size.width, layoutConstraints.minimumSize.width);
51
+ clampedWidth = std::min(clampedWidth, layoutConstraints.maximumSize.width);
52
+ Float clampedHeight = std::max((Float)size.height, layoutConstraints.minimumSize.height);
53
+ if (std::isfinite(layoutConstraints.maximumSize.height)) {
54
+ clampedHeight = std::min(clampedHeight, layoutConstraints.maximumSize.height);
55
+ }
56
+ return {clampedWidth, clampedHeight};
57
+ }
58
+
59
+ template <typename PropsT>
60
+ static inline bool ENRMPropsNeedExactStreamingMeasurement(const PropsT &oldProps, const PropsT &newProps)
61
+ {
62
+ return oldProps.streamingAnimation != newProps.streamingAnimation ||
63
+ oldProps.allowFontScaling != newProps.allowFontScaling ||
64
+ oldProps.maxFontSizeMultiplier != newProps.maxFontSizeMultiplier ||
65
+ oldProps.allowTrailingMargin != newProps.allowTrailingMargin ||
66
+ oldProps.md4cFlags.underline != newProps.md4cFlags.underline ||
67
+ oldProps.md4cFlags.superscript != newProps.md4cFlags.superscript ||
68
+ oldProps.md4cFlags.subscript != newProps.md4cFlags.subscript ||
69
+ oldProps.md4cFlags.latexMath != newProps.md4cFlags.latexMath ||
70
+ oldProps.md4cFlags.highlight != newProps.md4cFlags.highlight ||
71
+ oldProps.md4cFlags.hardSoftBreaks != newProps.md4cFlags.hardSoftBreaks ||
72
+ oldProps.md4cFlags.preserveBlankLines != newProps.md4cFlags.preserveBlankLines ||
73
+ oldProps.isGFM != newProps.isGFM || oldProps.md4cFlags.admonitions != newProps.md4cFlags.admonitions ||
74
+ computeStyleFingerprint(oldProps.tiptapStyle) != computeStyleFingerprint(newProps.tiptapStyle);
75
+ }
76
+
77
+ /**
78
+ * Shared measureContent implementation for the tiptap component views.
79
+ *
80
+ * Owns the thread-safe layers — the streaming fast path (lock-free
81
+ * `ENRMAtomicSize` mailbox published by `updateLayoutMetrics:`), the
82
+ * LRU measurement cache, and the `layoutContext`-sourced font scale — then
83
+ * delegates cache misses to `measureUncached`, through which both components
84
+ * plug their view-free pipeline (`ENRMMeasureTiptapViewFree` /
85
+ * `ENRMMeasureSegmentedTiptapViewFree`); the resolved view is still handed
86
+ * to the block for strategies that can use it. `fontScale` handed to the
87
+ * block is the real multiplier even when streaming skips the cache —
88
+ * rendering must always use it. `wrappedCodeBlocksFingerprint` folds view
89
+ * state outside the props that changes the size (code blocks the user wrapped)
90
+ * into the cache key.
91
+ */
92
+ template <typename PropsT, typename ViewT>
93
+ static inline Size
94
+ ENRMMeasureTiptapContent(const PropsT &typedProps, const std::shared_ptr<void> &componentViewRef, int receivedCounter,
95
+ int &lastExactMeasurementCounter, CGSize &lastExactMeasurementSize, TiptapFlavor flavor,
96
+ const LayoutContext &layoutContext, const LayoutConstraints &layoutConstraints,
97
+ CGSize (^measureUncached)(ViewT *view, CGFloat maxWidth, CGFloat fontScale),
98
+ size_t wrappedCodeBlocksFingerprint = 0)
99
+ {
100
+ CGFloat maxWidth = layoutConstraints.maximumSize.width;
101
+
102
+ RCTInternalGenericWeakWrapper *weakWrapper = (RCTInternalGenericWeakWrapper *)unwrapManagedObject(componentViewRef);
103
+ ViewT *view = weakWrapper ? (ViewT *)weakWrapper.object : nil;
104
+
105
+ // Streaming fast path. Yoga re-measures several times per pass; the first call
106
+ // bumps lastExactMeasurementCounter, the rest land here. Return the freshly
107
+ // measured size, not the view's mailbox — mid-pass the frame isn't committed,
108
+ // so the mailbox is a generation stale and would freeze the height.
109
+ if (typedProps.streamingAnimation && view && receivedCounter <= lastExactMeasurementCounter) {
110
+ if (lastExactMeasurementSize.width > 0 && lastExactMeasurementSize.height > 0) {
111
+ return ENRMClampMeasuredSize(lastExactMeasurementSize, layoutConstraints);
112
+ }
113
+ CGSize currentSize = [view lastCommittedLayoutSize];
114
+ if (currentSize.width > 0 && currentSize.height > 0) {
115
+ return ENRMClampMeasuredSize(currentSize, layoutConstraints);
116
+ }
117
+ }
118
+
119
+ const bool shouldUseMeasurementCache = !typedProps.streamingAnimation;
120
+ CGFloat fontScale = ENRMFontScaleForMeasurement(typedProps.allowFontScaling, layoutContext);
121
+
122
+ if (shouldUseMeasurementCache && !typedProps.document.empty()) {
123
+ auto cacheKey = buildMeasurementCacheKey(typedProps, maxWidth, fontScale, flavor, wrappedCodeBlocksFingerprint);
124
+ CachedSize cached;
125
+ if (MeasurementCache::shared().get(cacheKey, cached)) {
126
+ return ENRMClampMeasuredSize(CGSizeMake(cached.width, cached.height), layoutConstraints);
127
+ }
128
+ }
129
+
130
+ CGSize size = measureUncached(view, maxWidth, fontScale);
131
+
132
+ if (shouldUseMeasurementCache && !typedProps.document.empty()) {
133
+ auto cacheKey = buildMeasurementCacheKey(typedProps, maxWidth, fontScale, flavor, wrappedCodeBlocksFingerprint);
134
+ MeasurementCache::shared().set(cacheKey, {size.width, size.height});
135
+ }
136
+
137
+ if (typedProps.streamingAnimation) {
138
+ lastExactMeasurementCounter = receivedCounter;
139
+ lastExactMeasurementSize = size;
140
+ }
141
+
142
+ return ENRMClampMeasuredSize(size, layoutConstraints);
143
+ }
144
+
145
+ } // namespace facebook::react
@@ -1,7 +1,7 @@
1
- #pragma once
2
-
3
- #import <Foundation/Foundation.h>
4
-
5
- // Rendering metadata only. Copy reconstruction retains the source semantics.
6
- static NSString *const ENRMRecognizedLinkAttributeName = @"ENRMRecognizedLink";
7
- static NSString *const ENRMRecognizedLinkOriginalUnderlineAttributeName = @"ENRMRecognizedLinkOriginalUnderline";
1
+ #pragma once
2
+
3
+ #import <Foundation/Foundation.h>
4
+
5
+ // Rendering metadata only. Copy reconstruction retains the source semantics.
6
+ static NSString *const ENRMRecognizedLinkAttributeName = @"ENRMRecognizedLink";
7
+ static NSString *const ENRMRecognizedLinkOriginalUnderlineAttributeName = @"ENRMRecognizedLinkOriginalUnderline";
@@ -1,33 +1,33 @@
1
- #import "TiptapASTNode.h"
2
- #import <Foundation/Foundation.h>
3
-
4
- @interface ENRMMd4cFlags : NSObject <NSCopying>
5
-
6
- @property (nonatomic, assign) BOOL underline;
7
- @property (nonatomic, assign) BOOL latexMath;
8
- @property (nonatomic, assign) BOOL superscript;
9
- @property (nonatomic, assign) BOOL subscript;
10
- @property (nonatomic, assign) BOOL highlight;
11
- @property (nonatomic, assign) BOOL hardSoftBreaks;
12
- @property (nonatomic, assign) BOOL preserveBlankLines;
13
- @property (nonatomic, assign) BOOL admonitions;
14
-
15
- + (instancetype)defaultFlags;
16
-
17
- @end
18
-
19
- @class ENRMLinkRegexConfig;
20
-
21
- @interface ENRMTiptapParser : NSObject
22
-
23
- - (TiptapASTNode *)parseTiptap:(NSString *)tiptap;
24
- - (TiptapASTNode *)parseTiptap:(NSString *)tiptap flags:(ENRMMd4cFlags *)flags;
25
- - (TiptapASTNode *)parseTiptap:(NSString *)tiptap flags:(ENRMMd4cFlags *)flags isGFM:(BOOL)isGFM;
26
- // Recognition runs before returning the AST to renderers and measurement.
27
- - (TiptapASTNode *)parseTiptap:(NSString *)tiptap
28
- flags:(ENRMMd4cFlags *)flags
29
- isGFM:(BOOL)isGFM
30
- linkRegex:(ENRMLinkRegexConfig *)linkRegex
31
- inlineCodeLinkRegex:(ENRMLinkRegexConfig *)inlineCodeLinkRegex;
32
-
33
- @end
1
+ #import "TiptapASTNode.h"
2
+ #import <Foundation/Foundation.h>
3
+
4
+ @interface ENRMMd4cFlags : NSObject <NSCopying>
5
+
6
+ @property (nonatomic, assign) BOOL underline;
7
+ @property (nonatomic, assign) BOOL latexMath;
8
+ @property (nonatomic, assign) BOOL superscript;
9
+ @property (nonatomic, assign) BOOL subscript;
10
+ @property (nonatomic, assign) BOOL highlight;
11
+ @property (nonatomic, assign) BOOL hardSoftBreaks;
12
+ @property (nonatomic, assign) BOOL preserveBlankLines;
13
+ @property (nonatomic, assign) BOOL admonitions;
14
+
15
+ + (instancetype)defaultFlags;
16
+
17
+ @end
18
+
19
+ @class ENRMLinkRegexConfig;
20
+
21
+ @interface ENRMTiptapParser : NSObject
22
+
23
+ - (TiptapASTNode *)parseTiptap:(NSString *)tiptap;
24
+ - (TiptapASTNode *)parseTiptap:(NSString *)tiptap flags:(ENRMMd4cFlags *)flags;
25
+ - (TiptapASTNode *)parseTiptap:(NSString *)tiptap flags:(ENRMMd4cFlags *)flags isGFM:(BOOL)isGFM;
26
+ // Recognition runs before returning the AST to renderers and measurement.
27
+ - (TiptapASTNode *)parseTiptap:(NSString *)tiptap
28
+ flags:(ENRMMd4cFlags *)flags
29
+ isGFM:(BOOL)isGFM
30
+ linkRegex:(ENRMLinkRegexConfig *)linkRegex
31
+ inlineCodeLinkRegex:(ENRMLinkRegexConfig *)inlineCodeLinkRegex;
32
+
33
+ @end
@@ -1,73 +1,73 @@
1
- #import "ENRMTiptapParser.h"
2
- #import "ENRMLinkRegexConfig.h"
3
- #import "TiptapASTNode.h"
4
-
5
- extern TiptapASTNode *parseTiptapWithCppParser(NSString *tiptap, ENRMMd4cFlags *flags, BOOL isGFM);
6
- extern TiptapASTNode *parseTiptapWithCppParser(NSString *tiptap, ENRMMd4cFlags *flags, BOOL isGFM,
7
- ENRMLinkRegexConfig *textRegex, ENRMLinkRegexConfig *codeRegex);
8
-
9
- @implementation ENRMMd4cFlags
10
-
11
- - (instancetype)init
12
- {
13
- if (self = [super init]) {
14
- _underline = NO;
15
- _latexMath = YES;
16
- _superscript = NO;
17
- _subscript = NO;
18
- _highlight = NO;
19
- _hardSoftBreaks = NO;
20
- _preserveBlankLines = NO;
21
- _admonitions = YES;
22
- }
23
- return self;
24
- }
25
-
26
- + (instancetype)defaultFlags
27
- {
28
- return [[ENRMMd4cFlags alloc] init];
29
- }
30
-
31
- - (id)copyWithZone:(NSZone *)zone
32
- {
33
- ENRMMd4cFlags *copy = [[ENRMMd4cFlags allocWithZone:zone] init];
34
- copy.underline = self.underline;
35
- copy.latexMath = self.latexMath;
36
- copy.superscript = self.superscript;
37
- copy.subscript = self.subscript;
38
- copy.highlight = self.highlight;
39
- copy.hardSoftBreaks = self.hardSoftBreaks;
40
- copy.preserveBlankLines = self.preserveBlankLines;
41
- copy.admonitions = self.admonitions;
42
- return copy;
43
- }
44
-
45
- @end
46
-
47
- @implementation ENRMTiptapParser
48
-
49
- - (TiptapASTNode *)parseTiptap:(NSString *)tiptap
50
- {
51
- return [self parseTiptap:tiptap flags:[ENRMMd4cFlags defaultFlags]];
52
- }
53
-
54
- - (TiptapASTNode *)parseTiptap:(NSString *)tiptap flags:(ENRMMd4cFlags *)flags
55
- {
56
- return [self parseTiptap:tiptap flags:flags isGFM:YES];
57
- }
58
-
59
- - (TiptapASTNode *)parseTiptap:(NSString *)tiptap flags:(ENRMMd4cFlags *)flags isGFM:(BOOL)isGFM
60
- {
61
- return parseTiptapWithCppParser(tiptap, flags, isGFM);
62
- }
63
-
64
- - (TiptapASTNode *)parseTiptap:(NSString *)tiptap
65
- flags:(ENRMMd4cFlags *)flags
66
- isGFM:(BOOL)isGFM
67
- linkRegex:(ENRMLinkRegexConfig *)linkRegex
68
- inlineCodeLinkRegex:(ENRMLinkRegexConfig *)inlineCodeLinkRegex
69
- {
70
- return parseTiptapWithCppParser(tiptap, flags, isGFM, linkRegex, inlineCodeLinkRegex);
71
- }
72
-
73
- @end
1
+ #import "ENRMTiptapParser.h"
2
+ #import "ENRMLinkRegexConfig.h"
3
+ #import "TiptapASTNode.h"
4
+
5
+ extern TiptapASTNode *parseTiptapWithCppParser(NSString *tiptap, ENRMMd4cFlags *flags, BOOL isGFM);
6
+ extern TiptapASTNode *parseTiptapWithCppParser(NSString *tiptap, ENRMMd4cFlags *flags, BOOL isGFM,
7
+ ENRMLinkRegexConfig *textRegex, ENRMLinkRegexConfig *codeRegex);
8
+
9
+ @implementation ENRMMd4cFlags
10
+
11
+ - (instancetype)init
12
+ {
13
+ if (self = [super init]) {
14
+ _underline = NO;
15
+ _latexMath = YES;
16
+ _superscript = NO;
17
+ _subscript = NO;
18
+ _highlight = NO;
19
+ _hardSoftBreaks = NO;
20
+ _preserveBlankLines = NO;
21
+ _admonitions = YES;
22
+ }
23
+ return self;
24
+ }
25
+
26
+ + (instancetype)defaultFlags
27
+ {
28
+ return [[ENRMMd4cFlags alloc] init];
29
+ }
30
+
31
+ - (id)copyWithZone:(NSZone *)zone
32
+ {
33
+ ENRMMd4cFlags *copy = [[ENRMMd4cFlags allocWithZone:zone] init];
34
+ copy.underline = self.underline;
35
+ copy.latexMath = self.latexMath;
36
+ copy.superscript = self.superscript;
37
+ copy.subscript = self.subscript;
38
+ copy.highlight = self.highlight;
39
+ copy.hardSoftBreaks = self.hardSoftBreaks;
40
+ copy.preserveBlankLines = self.preserveBlankLines;
41
+ copy.admonitions = self.admonitions;
42
+ return copy;
43
+ }
44
+
45
+ @end
46
+
47
+ @implementation ENRMTiptapParser
48
+
49
+ - (TiptapASTNode *)parseTiptap:(NSString *)tiptap
50
+ {
51
+ return [self parseTiptap:tiptap flags:[ENRMMd4cFlags defaultFlags]];
52
+ }
53
+
54
+ - (TiptapASTNode *)parseTiptap:(NSString *)tiptap flags:(ENRMMd4cFlags *)flags
55
+ {
56
+ return [self parseTiptap:tiptap flags:flags isGFM:YES];
57
+ }
58
+
59
+ - (TiptapASTNode *)parseTiptap:(NSString *)tiptap flags:(ENRMMd4cFlags *)flags isGFM:(BOOL)isGFM
60
+ {
61
+ return parseTiptapWithCppParser(tiptap, flags, isGFM);
62
+ }
63
+
64
+ - (TiptapASTNode *)parseTiptap:(NSString *)tiptap
65
+ flags:(ENRMMd4cFlags *)flags
66
+ isGFM:(BOOL)isGFM
67
+ linkRegex:(ENRMLinkRegexConfig *)linkRegex
68
+ inlineCodeLinkRegex:(ENRMLinkRegexConfig *)inlineCodeLinkRegex
69
+ {
70
+ return parseTiptapWithCppParser(tiptap, flags, isGFM, linkRegex, inlineCodeLinkRegex);
71
+ }
72
+
73
+ @end
@@ -1,52 +1,52 @@
1
- #import "TiptapASTNode.h"
2
-
3
- @implementation TiptapASTNode
4
-
5
- - (instancetype)initWithType:(TiptapNodeType)type
6
- {
7
- if (self = [super init]) {
8
- _type = type;
9
- _content = nil;
10
- _attributes = [[NSMutableDictionary alloc] init];
11
- _children = [[NSMutableArray alloc] init];
12
- }
13
- return self;
14
- }
15
-
16
- - (void)addChild:(TiptapASTNode *)child
17
- {
18
- [_children addObject:child];
19
- }
20
-
21
- - (void)setAttribute:(NSString *)key value:(NSString *)value
22
- {
23
- _attributes[key] = value;
24
- }
25
-
26
- - (NSString *)description
27
- {
28
- return [NSString stringWithFormat:@"TiptapASTNode(type=%ld, content=%@, children=%lu)", (long)_type, _content,
29
- (unsigned long)_children.count];
30
- }
31
-
32
- @end
33
-
34
- BOOL ENRMIsTopLevelBlockType(TiptapNodeType type)
35
- {
36
- switch (type) {
37
- case TiptapNodeTypeParagraph:
38
- case TiptapNodeTypeHeading:
39
- case TiptapNodeTypeCodeBlock:
40
- case TiptapNodeTypeBlockquote:
41
- case TiptapNodeTypeAdmonition:
42
- case TiptapNodeTypeTable:
43
- case TiptapNodeTypeUnorderedList:
44
- case TiptapNodeTypeOrderedList:
45
- case TiptapNodeTypeThematicBreak:
46
- case TiptapNodeTypeBlankLine:
47
- case TiptapNodeTypeLatexMathDisplay:
48
- return YES;
49
- default:
50
- return NO;
51
- }
52
- }
1
+ #import "TiptapASTNode.h"
2
+
3
+ @implementation TiptapASTNode
4
+
5
+ - (instancetype)initWithType:(TiptapNodeType)type
6
+ {
7
+ if (self = [super init]) {
8
+ _type = type;
9
+ _content = nil;
10
+ _attributes = [[NSMutableDictionary alloc] init];
11
+ _children = [[NSMutableArray alloc] init];
12
+ }
13
+ return self;
14
+ }
15
+
16
+ - (void)addChild:(TiptapASTNode *)child
17
+ {
18
+ [_children addObject:child];
19
+ }
20
+
21
+ - (void)setAttribute:(NSString *)key value:(NSString *)value
22
+ {
23
+ _attributes[key] = value;
24
+ }
25
+
26
+ - (NSString *)description
27
+ {
28
+ return [NSString stringWithFormat:@"TiptapASTNode(type=%ld, content=%@, children=%lu)", (long)_type, _content,
29
+ (unsigned long)_children.count];
30
+ }
31
+
32
+ @end
33
+
34
+ BOOL ENRMIsTopLevelBlockType(TiptapNodeType type)
35
+ {
36
+ switch (type) {
37
+ case TiptapNodeTypeParagraph:
38
+ case TiptapNodeTypeHeading:
39
+ case TiptapNodeTypeCodeBlock:
40
+ case TiptapNodeTypeBlockquote:
41
+ case TiptapNodeTypeAdmonition:
42
+ case TiptapNodeTypeTable:
43
+ case TiptapNodeTypeUnorderedList:
44
+ case TiptapNodeTypeOrderedList:
45
+ case TiptapNodeTypeThematicBreak:
46
+ case TiptapNodeTypeBlankLine:
47
+ case TiptapNodeTypeLatexMathDisplay:
48
+ return YES;
49
+ default:
50
+ return NO;
51
+ }
52
+ }