@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.
- package/LICENSE +20 -20
- package/README.md +140 -140
- package/ReactNativeRenderRichText.podspec +23 -23
- package/android/build.gradle +86 -86
- package/android/consumer-rules.pro +3 -3
- package/android/src/main/AndroidManifest.xml +2 -2
- package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextLayoutManager.kt +24 -24
- package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextPackage.kt +13 -13
- package/android/src/main/java/com/renderrichtext/MeasurementStore.kt +644 -644
- package/android/src/main/java/com/renderrichtext/accessibility/AccessibilityLabels.kt +17 -17
- package/android/src/main/java/com/renderrichtext/accessibility/AccessibleTiptapTextView.kt +112 -112
- package/android/src/main/java/com/renderrichtext/accessibility/TiptapAccessibilityHelper.kt +576 -576
- package/android/src/main/java/com/renderrichtext/events/CodeBlockPressEvent.kt +24 -24
- package/android/src/main/java/com/renderrichtext/events/ContextMenuItemPressEvent.kt +28 -28
- package/android/src/main/java/com/renderrichtext/events/CopyPressEvent.kt +24 -24
- package/android/src/main/java/com/renderrichtext/events/ImagePressEvent.kt +25 -25
- package/android/src/main/java/com/renderrichtext/events/LatexErrorEvent.kt +29 -29
- package/android/src/main/java/com/renderrichtext/events/LinkLongPressEvent.kt +23 -23
- package/android/src/main/java/com/renderrichtext/events/LinkPressEvent.kt +23 -23
- package/android/src/main/java/com/renderrichtext/events/MentionLongPressEvent.kt +25 -25
- package/android/src/main/java/com/renderrichtext/events/MentionPressEvent.kt +25 -25
- package/android/src/main/java/com/renderrichtext/events/TaskListItemPressEvent.kt +26 -26
- package/android/src/main/java/com/renderrichtext/math/LatexErrorReporter.kt +9 -9
- package/android/src/main/java/com/renderrichtext/parser/Parser.kt +59 -59
- package/android/src/main/java/com/renderrichtext/parser/TextLinkMatching.kt +35 -35
- package/android/src/main/java/com/renderrichtext/renderer/BaselineShiftRenderer.kt +45 -45
- package/android/src/main/java/com/renderrichtext/renderer/BlankLineRenderer.kt +39 -39
- package/android/src/main/java/com/renderrichtext/renderer/BlockquoteRenderer.kt +243 -243
- package/android/src/main/java/com/renderrichtext/renderer/BlockquoteTextRenderer.kt +56 -56
- package/android/src/main/java/com/renderrichtext/renderer/CodeBlockRenderer.kt +135 -135
- package/android/src/main/java/com/renderrichtext/renderer/CodeRenderer.kt +37 -37
- package/android/src/main/java/com/renderrichtext/renderer/EmphasisRenderer.kt +28 -28
- package/android/src/main/java/com/renderrichtext/renderer/HeadingRenderer.kt +81 -81
- package/android/src/main/java/com/renderrichtext/renderer/HighlightRenderer.kt +26 -26
- package/android/src/main/java/com/renderrichtext/renderer/LineBreakRenderer.kt +17 -17
- package/android/src/main/java/com/renderrichtext/renderer/LinkRenderer.kt +90 -90
- package/android/src/main/java/com/renderrichtext/renderer/ListContextManager.kt +109 -109
- package/android/src/main/java/com/renderrichtext/renderer/ListItemRenderer.kt +211 -211
- package/android/src/main/java/com/renderrichtext/renderer/ListRenderer.kt +133 -133
- package/android/src/main/java/com/renderrichtext/renderer/MentionRenderer.kt +85 -85
- package/android/src/main/java/com/renderrichtext/renderer/ParagraphRenderer.kt +91 -91
- package/android/src/main/java/com/renderrichtext/renderer/Renderer.kt +148 -148
- package/android/src/main/java/com/renderrichtext/renderer/SoftBreakRenderer.kt +17 -17
- package/android/src/main/java/com/renderrichtext/renderer/SpanStyleCache.kt +143 -143
- package/android/src/main/java/com/renderrichtext/renderer/StrikethroughRenderer.kt +28 -28
- package/android/src/main/java/com/renderrichtext/renderer/StrongRenderer.kt +28 -28
- package/android/src/main/java/com/renderrichtext/renderer/TextRenderer.kt +31 -31
- package/android/src/main/java/com/renderrichtext/renderer/ThematicBreakRenderer.kt +46 -46
- package/android/src/main/java/com/renderrichtext/renderer/UnderlineRenderer.kt +28 -28
- package/android/src/main/java/com/renderrichtext/spans/BaseListSpan.kt +164 -164
- package/android/src/main/java/com/renderrichtext/spans/BaselineShiftSpan.kt +27 -27
- package/android/src/main/java/com/renderrichtext/spans/BlockquoteSpan.kt +302 -302
- package/android/src/main/java/com/renderrichtext/spans/CodeBackgroundSpan.kt +205 -205
- package/android/src/main/java/com/renderrichtext/spans/CodeBlockSpan.kt +216 -216
- package/android/src/main/java/com/renderrichtext/spans/CodeSpan.kt +32 -32
- package/android/src/main/java/com/renderrichtext/spans/EmphasisSpan.kt +42 -42
- package/android/src/main/java/com/renderrichtext/spans/FadeInSpan.kt +29 -29
- package/android/src/main/java/com/renderrichtext/spans/HeadingSpan.kt +38 -38
- package/android/src/main/java/com/renderrichtext/spans/HighlightSpan.kt +80 -80
- package/android/src/main/java/com/renderrichtext/spans/ImageSpan.kt +481 -481
- package/android/src/main/java/com/renderrichtext/spans/InlineBackgroundGeometry.kt +42 -42
- package/android/src/main/java/com/renderrichtext/spans/LineHeightSpan.kt +39 -39
- package/android/src/main/java/com/renderrichtext/spans/LinkPillIconCache.kt +154 -154
- package/android/src/main/java/com/renderrichtext/spans/LinkPillSpan.kt +381 -381
- package/android/src/main/java/com/renderrichtext/spans/LinkSpan.kt +68 -68
- package/android/src/main/java/com/renderrichtext/spans/ListItemSpacingSpan.kt +33 -33
- package/android/src/main/java/com/renderrichtext/spans/ListMarkerAnchorSpan.kt +38 -38
- package/android/src/main/java/com/renderrichtext/spans/MarginBottomSpan.kt +76 -76
- package/android/src/main/java/com/renderrichtext/spans/MentionChipSpan.kt +132 -132
- package/android/src/main/java/com/renderrichtext/spans/MentionSpan.kt +46 -46
- package/android/src/main/java/com/renderrichtext/spans/OrderedListSpan.kt +127 -127
- package/android/src/main/java/com/renderrichtext/spans/SpoilerSpan.kt +33 -33
- package/android/src/main/java/com/renderrichtext/spans/StrikethroughSpan.kt +12 -12
- package/android/src/main/java/com/renderrichtext/spans/StrongSpan.kt +39 -39
- package/android/src/main/java/com/renderrichtext/spans/TaskListSpan.kt +143 -143
- package/android/src/main/java/com/renderrichtext/spans/TextSpan.kt +26 -26
- package/android/src/main/java/com/renderrichtext/spans/ThematicBreakSpan.kt +69 -69
- package/android/src/main/java/com/renderrichtext/spans/UnorderedListSpan.kt +96 -96
- package/android/src/main/java/com/renderrichtext/spoiler/SpoilerStubs.kt +46 -46
- package/android/src/main/java/com/renderrichtext/styles/BaseBlockStyle.kt +11 -11
- package/android/src/main/java/com/renderrichtext/styles/BlockquoteStyle.kt +83 -83
- package/android/src/main/java/com/renderrichtext/styles/CodeBlockStyle.kt +80 -80
- package/android/src/main/java/com/renderrichtext/styles/CodeStyle.kt +26 -26
- package/android/src/main/java/com/renderrichtext/styles/EmphasisStyle.kt +21 -21
- package/android/src/main/java/com/renderrichtext/styles/FactoidStyle.kt +21 -21
- package/android/src/main/java/com/renderrichtext/styles/HeadingStyle.kt +33 -33
- package/android/src/main/java/com/renderrichtext/styles/HighlightStyle.kt +19 -19
- package/android/src/main/java/com/renderrichtext/styles/ImageStyle.kt +29 -29
- package/android/src/main/java/com/renderrichtext/styles/InlineImageStyle.kt +17 -17
- package/android/src/main/java/com/renderrichtext/styles/InlineMathStyle.kt +17 -17
- package/android/src/main/java/com/renderrichtext/styles/LinkPillContent.kt +36 -36
- package/android/src/main/java/com/renderrichtext/styles/LinkPillStyle.kt +44 -44
- package/android/src/main/java/com/renderrichtext/styles/LinkStyle.kt +23 -23
- package/android/src/main/java/com/renderrichtext/styles/LinkVariantEntry.kt +34 -34
- package/android/src/main/java/com/renderrichtext/styles/ListStyle.kt +65 -65
- package/android/src/main/java/com/renderrichtext/styles/MathStyle.kt +29 -29
- package/android/src/main/java/com/renderrichtext/styles/MentionStyle.kt +19 -19
- package/android/src/main/java/com/renderrichtext/styles/ParagraphStyle.kt +33 -33
- package/android/src/main/java/com/renderrichtext/styles/SpoilerStyle.kt +27 -27
- package/android/src/main/java/com/renderrichtext/styles/StrikethroughStyle.kt +17 -17
- package/android/src/main/java/com/renderrichtext/styles/StrongStyle.kt +21 -21
- package/android/src/main/java/com/renderrichtext/styles/StyleConfig.kt +411 -411
- package/android/src/main/java/com/renderrichtext/styles/StyleParser.kt +92 -92
- package/android/src/main/java/com/renderrichtext/styles/SubscriptStyle.kt +16 -16
- package/android/src/main/java/com/renderrichtext/styles/SuperscriptStyle.kt +16 -16
- package/android/src/main/java/com/renderrichtext/styles/TableStyle.kt +75 -75
- package/android/src/main/java/com/renderrichtext/styles/TaskListStyle.kt +29 -29
- package/android/src/main/java/com/renderrichtext/styles/TextAlignment.kt +32 -32
- package/android/src/main/java/com/renderrichtext/styles/ThematicBreakStyle.kt +23 -23
- package/android/src/main/java/com/renderrichtext/styles/UnderlineStyle.kt +17 -17
- package/android/src/main/java/com/renderrichtext/styles/VideoStyle.kt +31 -31
- package/android/src/main/java/com/renderrichtext/utils/common/BorderStyleUtils.kt +86 -86
- package/android/src/main/java/com/renderrichtext/utils/common/BreakStrategyUtils.kt +32 -32
- package/android/src/main/java/com/renderrichtext/utils/common/CodeBlockHighlighter.kt +36 -36
- package/android/src/main/java/com/renderrichtext/utils/common/CodeBlockNode.kt +42 -42
- package/android/src/main/java/com/renderrichtext/utils/common/EllipsizeUtils.kt +27 -27
- package/android/src/main/java/com/renderrichtext/utils/common/EnrichedTiptapAncestorUtils.kt +10 -10
- package/android/src/main/java/com/renderrichtext/utils/common/FeatureFlags.kt +9 -9
- package/android/src/main/java/com/renderrichtext/utils/common/LinkRecognitionProps.kt +31 -31
- package/android/src/main/java/com/renderrichtext/utils/common/LinkRegexConfig.kt +56 -56
- package/android/src/main/java/com/renderrichtext/utils/common/MotionPreferences.kt +18 -18
- package/android/src/main/java/com/renderrichtext/utils/common/ReadableMapExtensions.kt +28 -28
- package/android/src/main/java/com/renderrichtext/utils/common/layout/RTLUtils.kt +6 -6
- package/android/src/main/java/com/renderrichtext/utils/common/serialization/TiptapASTSerializer.kt +368 -368
- package/android/src/main/java/com/renderrichtext/utils/text/ImageCache.kt +88 -88
- package/android/src/main/java/com/renderrichtext/utils/text/ImageDownloader.kt +203 -203
- package/android/src/main/java/com/renderrichtext/utils/text/LocalImageLoader.kt +167 -167
- package/android/src/main/java/com/renderrichtext/utils/text/TailFadeInAnimator.kt +84 -84
- package/android/src/main/java/com/renderrichtext/utils/text/conversion/HTMLGenerator.kt +1105 -1105
- package/android/src/main/java/com/renderrichtext/utils/text/conversion/TiptapExtractor.kt +423 -423
- package/android/src/main/java/com/renderrichtext/utils/text/extensions/ParagraphUtils.kt +9 -9
- package/android/src/main/java/com/renderrichtext/utils/text/extensions/SpannableExtensions.kt +9 -9
- package/android/src/main/java/com/renderrichtext/utils/text/extensions/TextPaintExtensions.kt +76 -76
- package/android/src/main/java/com/renderrichtext/utils/text/interaction/CheckboxTouchHelper.kt +61 -61
- package/android/src/main/java/com/renderrichtext/utils/text/interaction/TaskListTapUtils.kt +286 -286
- package/android/src/main/java/com/renderrichtext/utils/text/span/ApplyLineHeight.kt +39 -39
- package/android/src/main/java/com/renderrichtext/utils/text/span/BlockSpacing.kt +142 -142
- package/android/src/main/java/com/renderrichtext/utils/text/span/SpanFlags.kt +43 -43
- package/android/src/main/java/com/renderrichtext/utils/text/span/WidthAwareSpans.kt +30 -30
- package/android/src/main/java/com/renderrichtext/utils/text/view/CodeBlockPressHost.kt +15 -15
- package/android/src/main/java/com/renderrichtext/utils/text/view/ImagePressHost.kt +19 -19
- package/android/src/main/java/com/renderrichtext/utils/text/view/SelectionActionMode.kt +235 -235
- package/android/src/main/java/com/renderrichtext/utils/text/view/TextSelectionColors.kt +48 -48
- package/android/src/main/java/com/renderrichtext/utils/text/view/TextViewSetup.kt +119 -119
- package/android/src/main/java/com/renderrichtext/views/ContextMenuPopup.kt +217 -217
- package/android/src/main/java/com/renderrichtext/views/CopyGlyph.kt +101 -101
- package/android/src/main/java/com/renderrichtext/views/WrapGlyph.kt +40 -40
- package/android/src/main/jni/CMakeLists.txt +52 -52
- package/android/src/main/jni/react/renderer/components/RichTextSpec/ComponentDescriptors.h +30 -30
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextComponentDescriptor.h +29 -29
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextMeasurementManager.cpp +45 -45
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextMeasurementManager.h +21 -21
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextShadowNode.cpp +38 -38
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextShadowNode.h +53 -53
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextState.cpp +9 -9
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextState.h +24 -24
- package/android/src/main/jni/react/renderer/components/RichTextSpec/conversions.h +40 -40
- package/cpp/parser/TiptapParser.hpp +13 -13
- package/cpp/vendor/nlohmann/json.hpp +24765 -24765
- package/ios/EnrichedTiptapText.h +27 -27
- package/ios/attachments/ENRMImageAttachment.h +51 -51
- package/ios/attachments/ENRMImageAttachment.m +398 -398
- package/ios/attachments/ENRMLinkPillAttachment.h +47 -47
- package/ios/attachments/ENRMLinkPillAttachment.m +324 -324
- package/ios/attachments/ENRMLinkPillIconCache.h +28 -28
- package/ios/attachments/ENRMLinkPillIconCache.m +181 -181
- package/ios/attachments/ENRMLinkPillText.h +27 -27
- package/ios/attachments/ENRMLinkPillText.m +118 -118
- package/ios/attachments/ENRMMathInlineAttachment.h +7 -7
- package/ios/attachments/ENRMMathInlineAttachment.m +4 -4
- package/ios/attachments/ThematicBreakAttachment.h +15 -15
- package/ios/attachments/ThematicBreakAttachment.m +33 -33
- package/ios/internals/ENRMViewFreeMeasurement.h +208 -208
- package/ios/internals/EnrichedTiptapTextComponentDescriptor.h +19 -19
- package/ios/internals/EnrichedTiptapTextShadowNode.h +43 -43
- package/ios/internals/EnrichedTiptapTextShadowNode.mm +69 -69
- package/ios/internals/EnrichedTiptapTextState.h +24 -24
- package/ios/internals/MeasurementCache.h +308 -308
- package/ios/internals/ShadowMeasurementUtils.h +145 -145
- package/ios/parser/ENRMTextLinkAttributes.h +7 -7
- package/ios/parser/ENRMTiptapParser.h +33 -33
- package/ios/parser/ENRMTiptapParser.mm +73 -73
- package/ios/parser/TiptapASTNode.m +52 -52
- package/ios/renderer/AttributedRenderer.h +23 -23
- package/ios/renderer/AttributedRenderer.m +229 -229
- package/ios/renderer/BaseRenderer.h +33 -33
- package/ios/renderer/BaseRenderer.m +46 -46
- package/ios/renderer/BaselineShiftTextAttributes.h +10 -10
- package/ios/renderer/BaselineShiftTextAttributes.m +26 -26
- package/ios/renderer/BlankLineRenderer.h +4 -4
- package/ios/renderer/BlankLineRenderer.m +51 -51
- package/ios/renderer/BlockquoteRenderer.h +6 -6
- package/ios/renderer/BlockquoteRenderer.m +258 -258
- package/ios/renderer/CodeBlockRenderer.h +9 -9
- package/ios/renderer/CodeBlockRenderer.m +99 -99
- package/ios/renderer/CodeRenderer.h +9 -9
- package/ios/renderer/CodeRenderer.m +69 -69
- package/ios/renderer/ENRMBlockquoteTextRenderer.h +25 -25
- package/ios/renderer/ENRMBlockquoteTextRenderer.m +48 -48
- package/ios/renderer/EmphasisRenderer.h +5 -5
- package/ios/renderer/EmphasisRenderer.m +99 -99
- package/ios/renderer/HeadingRenderer.h +6 -6
- package/ios/renderer/HeadingRenderer.m +102 -102
- package/ios/renderer/HighlightRenderer.h +7 -7
- package/ios/renderer/HighlightRenderer.m +33 -33
- package/ios/renderer/LinkRenderer.h +6 -6
- package/ios/renderer/LinkRenderer.m +157 -157
- package/ios/renderer/ListItemRenderer.h +24 -24
- package/ios/renderer/ListItemRenderer.m +283 -283
- package/ios/renderer/ListRenderer.h +13 -13
- package/ios/renderer/ListRenderer.m +126 -126
- package/ios/renderer/MentionRenderer.h +9 -9
- package/ios/renderer/MentionRenderer.m +96 -96
- package/ios/renderer/NodeRenderer.h +8 -8
- package/ios/renderer/ParagraphRenderer.h +6 -6
- package/ios/renderer/ParagraphRenderer.m +85 -85
- package/ios/renderer/RenderContext.h +145 -145
- package/ios/renderer/RenderContext.m +402 -402
- package/ios/renderer/RendererFactory.h +12 -12
- package/ios/renderer/StrikethroughRenderer.h +5 -5
- package/ios/renderer/StrikethroughRenderer.m +30 -30
- package/ios/renderer/StrongRenderer.h +5 -5
- package/ios/renderer/StrongRenderer.m +87 -87
- package/ios/renderer/TextRenderer.h +6 -6
- package/ios/renderer/TextRenderer.m +18 -18
- package/ios/renderer/ThematicBreakRenderer.h +4 -4
- package/ios/renderer/ThematicBreakRenderer.m +41 -41
- package/ios/renderer/UnderlineRenderer.h +4 -4
- package/ios/renderer/UnderlineRenderer.m +41 -41
- package/ios/styles/ENRMFontSlot.h +12 -12
- package/ios/styles/ENRMFontSlot.m +24 -24
- package/ios/styles/StyleConfig.h +488 -488
- package/ios/styles/StyleConfig.mm +2820 -2820
- package/ios/utils/AccessibilityInfo.h +35 -35
- package/ios/utils/AccessibilityInfo.m +24 -24
- package/ios/utils/BlockquoteBorder.h +26 -26
- package/ios/utils/BlockquoteBorder.m +294 -294
- package/ios/utils/CodeBackground.h +19 -19
- package/ios/utils/CodeBackground.m +196 -196
- package/ios/utils/CodeBlockBackground.h +17 -17
- package/ios/utils/CodeBlockBackground.m +102 -102
- package/ios/utils/ContextMenuUtils.h +76 -76
- package/ios/utils/ContextMenuUtils.mm +75 -75
- package/ios/utils/ENRMAccessibilityLabels.h +40 -40
- package/ios/utils/ENRMAccessibilityLabels.m +5 -5
- package/ios/utils/ENRMAsyncRenderCoordinator.h +24 -24
- package/ios/utils/ENRMAsyncRenderCoordinator.m +37 -37
- package/ios/utils/ENRMAtomicSize.h +65 -65
- package/ios/utils/ENRMCodeBlockContent.h +37 -37
- package/ios/utils/ENRMCodeBlockContent.mm +89 -89
- package/ios/utils/ENRMFeatureFlags.h +25 -25
- package/ios/utils/ENRMImageDownloader.h +30 -30
- package/ios/utils/ENRMImageDownloader.m +168 -168
- package/ios/utils/ENRMLatexErrorCoordinator.h +27 -27
- package/ios/utils/ENRMLatexErrorCoordinator.mm +75 -75
- package/ios/utils/ENRMLatexErrorReporting.h +13 -13
- package/ios/utils/ENRMLinkContextMenus.h +93 -93
- package/ios/utils/ENRMLinkContextMenus.m +178 -178
- package/ios/utils/ENRMLinkRegexConfig.h +30 -30
- package/ios/utils/ENRMLinkRegexConfig.mm +104 -104
- package/ios/utils/ENRMLinkRegexProps.h +23 -23
- package/ios/utils/ENRMLocalImageLoader.h +35 -35
- package/ios/utils/ENRMLocalImageLoader.m +111 -111
- package/ios/utils/ENRMMenuAction.h +27 -27
- package/ios/utils/ENRMMenuAction.m +33 -33
- package/ios/utils/ENRMSpoilerOverlayManager.h +15 -15
- package/ios/utils/ENRMSpoilerOverlayManager.m +19 -19
- package/ios/utils/ENRMSpoilerTapUtils.h +6 -6
- package/ios/utils/ENRMSpoilerTapUtils.m +11 -11
- package/ios/utils/ENRMTailFadeInAnimator.h +16 -16
- package/ios/utils/ENRMTailFadeInAnimator.m +161 -161
- package/ios/utils/ENRMTextHitTest.h +23 -23
- package/ios/utils/ENRMTextHitTest.m +20 -20
- package/ios/utils/ENRMTextInteractionUtils.h +20 -20
- package/ios/utils/ENRMTextInteractionUtils.m +15 -15
- package/ios/utils/ENRMTextRenderer.h +38 -38
- package/ios/utils/ENRMTextRenderer.m +54 -54
- package/ios/utils/ENRMTextViewSetup.h +132 -132
- package/ios/utils/ENRMUIKit.h +429 -429
- package/ios/utils/EditMenuUtils.h +105 -105
- package/ios/utils/EditMenuUtils.m +143 -143
- package/ios/utils/FontScaleObserver.h +10 -10
- package/ios/utils/FontScaleObserver.m +55 -55
- package/ios/utils/FontUtils.h +31 -31
- package/ios/utils/FontUtils.m +63 -63
- package/ios/utils/HTMLGenerator.h +25 -25
- package/ios/utils/HTMLGenerator.m +1041 -1041
- package/ios/utils/HeightUpdateUtils.h +25 -25
- package/ios/utils/ImageRequestHeaderUtils.h +35 -35
- package/ios/utils/LastElementUtils.h +97 -97
- package/ios/utils/LinkContextMenuUtils.h +55 -55
- package/ios/utils/LinkPillContentUtils.h +46 -46
- package/ios/utils/ListMarkerDrawer.h +15 -15
- package/ios/utils/ListMarkerDrawer.m +239 -239
- package/ios/utils/MentionBackground.h +26 -26
- package/ios/utils/MentionBackground.m +86 -86
- package/ios/utils/ParagraphStyleUtils.h +87 -87
- package/ios/utils/ParagraphStyleUtils.m +484 -484
- package/ios/utils/PasteboardUtils.h +48 -48
- package/ios/utils/PasteboardUtils.m +166 -166
- package/ios/utils/RTFExportUtils.h +24 -24
- package/ios/utils/RTFExportUtils.m +299 -299
- package/ios/utils/SelectionColorUtils.h +14 -14
- package/ios/utils/StylePropsUtils.h +1340 -1340
- package/ios/utils/TaskListTapUtils.h +6 -6
- package/ios/utils/TaskListTapUtils.m +14 -14
- package/ios/utils/TextViewLayoutManager.h +14 -14
- package/ios/utils/TiptapAccessibilityElementBuilder.h +43 -43
- package/ios/utils/TiptapAccessibilityElementBuilder.m +432 -432
- package/ios/utils/TiptapExtractor.h +17 -17
- package/ios/utils/TiptapExtractor.m +367 -367
- package/ios/views/ENRMTiptapTextView.h +25 -25
- package/ios/views/ENRMTiptapTextView.m +247 -247
- package/package.json +65 -70
- package/react-native.config.js +10 -10
- package/src/admonitionDefaults.ts +58 -58
- package/src/darkModeTextStyle.ts +99 -99
- package/src/headingDefaults.ts +21 -21
- package/src/index.tsx +4 -4
- package/src/linkVariantUtils.ts +120 -120
- package/src/normalizeTiptapStyle.ts +397 -397
- package/src/rn-globals.d.ts +1 -1
- package/src/styleUtils.ts +107 -107
- package/src/types/TiptapStyle.ts +532 -532
- package/src/types/TiptapStyleInternal.ts +299 -299
- package/src/types/linkPill.ts +9 -9
- package/src/utils/isDev.ts +4 -4
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
#import "ParagraphRenderer.h"
|
|
2
|
-
#import "FontUtils.h"
|
|
3
|
-
#import "TiptapASTNode.h"
|
|
4
|
-
#import "ParagraphStyleUtils.h"
|
|
5
|
-
#import "RendererFactory.h"
|
|
6
|
-
#import "StyleConfig.h"
|
|
7
|
-
|
|
8
|
-
@implementation ParagraphRenderer
|
|
9
|
-
|
|
10
|
-
- (id)takeContextSnapshot:(RenderContext *)context
|
|
11
|
-
{
|
|
12
|
-
return [context snapshotScope];
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
16
|
-
into:(NSMutableAttributedString *)output
|
|
17
|
-
context:(RenderContext *)context
|
|
18
|
-
{
|
|
19
|
-
// Synthetic wrapper around tight list item inlines (see wrapListItemInlineRuns
|
|
20
|
-
// in MD4CParser) — render transparently, the list owns spacing and layout.
|
|
21
|
-
if ([node.attributes[@"tight"] boolValue]) {
|
|
22
|
-
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// Only set block style if a parent element (e.g. List, Blockquote) hasn't already established one
|
|
27
|
-
BOOL isTopLevel = (context.currentBlockType == BlockTypeNone);
|
|
28
|
-
|
|
29
|
-
if (isTopLevel) {
|
|
30
|
-
[context setBlockStyle:BlockTypeParagraph font:_config.paragraphFont color:_config.paragraphColor headingLevel:0];
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
NSUInteger start = output.length;
|
|
34
|
-
// Paragraphs directly inside a blockquote keep their block margins so spacing
|
|
35
|
-
// between blocks matches the top-level document (a heading defaults to
|
|
36
|
-
// marginTop 0, so the gap before it comes from the preceding paragraph's
|
|
37
|
-
// marginBottom). List content stays tight - lists own their item spacing.
|
|
38
|
-
BOOL shouldApplyMargin =
|
|
39
|
-
(context.currentBlockType == BlockTypeNone || context.currentBlockType == BlockTypeParagraph ||
|
|
40
|
-
context.currentBlockType == BlockTypeBlockquote);
|
|
41
|
-
|
|
42
|
-
// Detect if the paragraph is a wrapper for a standalone image to use image-specific spacing
|
|
43
|
-
BOOL isBlockImage = (node.children.count == 1 && ((TiptapASTNode *)node.children[0]).type == TiptapNodeTypeImage);
|
|
44
|
-
CGFloat marginTop = isBlockImage ? _config.imageMarginTop : _config.paragraphMarginTop;
|
|
45
|
-
|
|
46
|
-
NSUInteger contentStart = start;
|
|
47
|
-
|
|
48
|
-
// Handle leading margin for the first element in the document (Index 0 check)
|
|
49
|
-
if (shouldApplyMargin && start == 0) {
|
|
50
|
-
NSUInteger offset = applyBlockSpacingBefore(output, 0, marginTop);
|
|
51
|
-
contentStart += offset;
|
|
52
|
-
start += offset;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
56
|
-
|
|
57
|
-
if (output.length <= start)
|
|
58
|
-
return;
|
|
59
|
-
NSRange range = NSMakeRange(start, output.length - start);
|
|
60
|
-
|
|
61
|
-
// Avoid standard line height on block images to prevent vertical alignment issues
|
|
62
|
-
if (!isBlockImage) {
|
|
63
|
-
applyLineHeight(output, range, _config.paragraphLineHeight);
|
|
64
|
-
if (!ENRMBlockTypeReappliesBaselineOffset(context.currentBlockType)) {
|
|
65
|
-
applyBaselineOffset(output, range);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
applyTextAlignment(output, range, _config.paragraphTextAlign);
|
|
70
|
-
|
|
71
|
-
// Skip marginTop for the first block — already handled by applyBlockSpacingBefore above
|
|
72
|
-
if (shouldApplyMargin && contentStart != 1) {
|
|
73
|
-
NSUInteger inserted = applyParagraphSpacingBefore(output, range, marginTop);
|
|
74
|
-
start += inserted;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
CGFloat marginBottom = 0;
|
|
78
|
-
if (shouldApplyMargin) {
|
|
79
|
-
marginBottom = isBlockImage ? _config.imageMarginBottom : _config.paragraphMarginBottom;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
applyParagraphSpacingAfter(output, start, marginBottom);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
@end
|
|
1
|
+
#import "ParagraphRenderer.h"
|
|
2
|
+
#import "FontUtils.h"
|
|
3
|
+
#import "TiptapASTNode.h"
|
|
4
|
+
#import "ParagraphStyleUtils.h"
|
|
5
|
+
#import "RendererFactory.h"
|
|
6
|
+
#import "StyleConfig.h"
|
|
7
|
+
|
|
8
|
+
@implementation ParagraphRenderer
|
|
9
|
+
|
|
10
|
+
- (id)takeContextSnapshot:(RenderContext *)context
|
|
11
|
+
{
|
|
12
|
+
return [context snapshotScope];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
16
|
+
into:(NSMutableAttributedString *)output
|
|
17
|
+
context:(RenderContext *)context
|
|
18
|
+
{
|
|
19
|
+
// Synthetic wrapper around tight list item inlines (see wrapListItemInlineRuns
|
|
20
|
+
// in MD4CParser) — render transparently, the list owns spacing and layout.
|
|
21
|
+
if ([node.attributes[@"tight"] boolValue]) {
|
|
22
|
+
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Only set block style if a parent element (e.g. List, Blockquote) hasn't already established one
|
|
27
|
+
BOOL isTopLevel = (context.currentBlockType == BlockTypeNone);
|
|
28
|
+
|
|
29
|
+
if (isTopLevel) {
|
|
30
|
+
[context setBlockStyle:BlockTypeParagraph font:_config.paragraphFont color:_config.paragraphColor headingLevel:0];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
NSUInteger start = output.length;
|
|
34
|
+
// Paragraphs directly inside a blockquote keep their block margins so spacing
|
|
35
|
+
// between blocks matches the top-level document (a heading defaults to
|
|
36
|
+
// marginTop 0, so the gap before it comes from the preceding paragraph's
|
|
37
|
+
// marginBottom). List content stays tight - lists own their item spacing.
|
|
38
|
+
BOOL shouldApplyMargin =
|
|
39
|
+
(context.currentBlockType == BlockTypeNone || context.currentBlockType == BlockTypeParagraph ||
|
|
40
|
+
context.currentBlockType == BlockTypeBlockquote);
|
|
41
|
+
|
|
42
|
+
// Detect if the paragraph is a wrapper for a standalone image to use image-specific spacing
|
|
43
|
+
BOOL isBlockImage = (node.children.count == 1 && ((TiptapASTNode *)node.children[0]).type == TiptapNodeTypeImage);
|
|
44
|
+
CGFloat marginTop = isBlockImage ? _config.imageMarginTop : _config.paragraphMarginTop;
|
|
45
|
+
|
|
46
|
+
NSUInteger contentStart = start;
|
|
47
|
+
|
|
48
|
+
// Handle leading margin for the first element in the document (Index 0 check)
|
|
49
|
+
if (shouldApplyMargin && start == 0) {
|
|
50
|
+
NSUInteger offset = applyBlockSpacingBefore(output, 0, marginTop);
|
|
51
|
+
contentStart += offset;
|
|
52
|
+
start += offset;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
56
|
+
|
|
57
|
+
if (output.length <= start)
|
|
58
|
+
return;
|
|
59
|
+
NSRange range = NSMakeRange(start, output.length - start);
|
|
60
|
+
|
|
61
|
+
// Avoid standard line height on block images to prevent vertical alignment issues
|
|
62
|
+
if (!isBlockImage) {
|
|
63
|
+
applyLineHeight(output, range, _config.paragraphLineHeight);
|
|
64
|
+
if (!ENRMBlockTypeReappliesBaselineOffset(context.currentBlockType)) {
|
|
65
|
+
applyBaselineOffset(output, range);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
applyTextAlignment(output, range, _config.paragraphTextAlign);
|
|
70
|
+
|
|
71
|
+
// Skip marginTop for the first block — already handled by applyBlockSpacingBefore above
|
|
72
|
+
if (shouldApplyMargin && contentStart != 1) {
|
|
73
|
+
NSUInteger inserted = applyParagraphSpacingBefore(output, range, marginTop);
|
|
74
|
+
start += inserted;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
CGFloat marginBottom = 0;
|
|
78
|
+
if (shouldApplyMargin) {
|
|
79
|
+
marginBottom = isBlockImage ? _config.imageMarginBottom : _config.paragraphMarginBottom;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
applyParagraphSpacingAfter(output, start, marginBottom);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@end
|
|
@@ -1,145 +1,145 @@
|
|
|
1
|
-
#import "ENRMLatexErrorReporting.h"
|
|
2
|
-
#import "ENRMUIKit.h"
|
|
3
|
-
#import <Foundation/Foundation.h>
|
|
4
|
-
|
|
5
|
-
typedef NS_ENUM(NSInteger, BlockType) {
|
|
6
|
-
BlockTypeNone,
|
|
7
|
-
BlockTypeParagraph,
|
|
8
|
-
BlockTypeHeading,
|
|
9
|
-
BlockTypeBlockquote,
|
|
10
|
-
BlockTypeUnorderedList,
|
|
11
|
-
BlockTypeOrderedList,
|
|
12
|
-
BlockTypeCodeBlock
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
/// YES when the enclosing block re-stamps its own line height over paragraph content and applies the
|
|
16
|
-
/// matching baseline offset itself, so a paragraph nested inside it must not apply its own (the outer
|
|
17
|
-
/// block's line height wins, and applyBaselineOffset skips ranges that already carry an offset).
|
|
18
|
-
/// TODO: loose list items have the same shape (ParagraphRenderer runs, then the list re-stamps its
|
|
19
|
-
/// line height); add BlockTypeUnorderedList/BlockTypeOrderedList here once lists own their offset too.
|
|
20
|
-
static inline BOOL ENRMBlockTypeReappliesBaselineOffset(BlockType type)
|
|
21
|
-
{
|
|
22
|
-
return type == BlockTypeBlockquote;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
typedef NS_ENUM(NSInteger, ListType) { ListTypeUnordered, ListTypeOrdered };
|
|
26
|
-
|
|
27
|
-
@interface BlockStyle : NSObject
|
|
28
|
-
@property (nonatomic, assign) CGFloat fontSize;
|
|
29
|
-
@property (nonatomic, strong) NSString *fontFamily;
|
|
30
|
-
@property (nonatomic, strong) NSString *fontWeight;
|
|
31
|
-
@property (nonatomic, strong) RCTUIColor *color;
|
|
32
|
-
@property (nonatomic, strong) UIFont *cachedFont;
|
|
33
|
-
@property (nonatomic, strong) NSDictionary *cachedTextAttributes;
|
|
34
|
-
@end
|
|
35
|
-
|
|
36
|
-
@interface RenderContext : NSObject
|
|
37
|
-
@property (nonatomic, strong) NSMutableArray<NSValue *> *linkRanges;
|
|
38
|
-
@property (nonatomic, strong) NSMutableArray<NSString *> *linkURLs;
|
|
39
|
-
@property (nonatomic, strong) NSMutableArray<NSValue *> *headingRanges;
|
|
40
|
-
@property (nonatomic, strong) NSMutableArray<NSNumber *> *headingLevels;
|
|
41
|
-
@property (nonatomic, strong) NSMutableArray<NSValue *> *imageRanges;
|
|
42
|
-
@property (nonatomic, strong) NSMutableArray<NSString *> *imageAltTexts;
|
|
43
|
-
@property (nonatomic, strong) NSMutableArray<NSString *> *imageURLs;
|
|
44
|
-
@property (nonatomic, strong) NSMutableArray<NSValue *> *listItemRanges;
|
|
45
|
-
@property (nonatomic, strong) NSMutableArray<NSNumber *> *listItemPositions; // Position in parent list (1, 2, 3...)
|
|
46
|
-
@property (nonatomic, strong) NSMutableArray<NSNumber *> *listItemDepths; // Nesting depth (1 = top level, 2+ = nested)
|
|
47
|
-
@property (nonatomic, strong) NSMutableArray<NSNumber *> *listItemOrdered; // YES = ordered, NO = unordered (bullet)
|
|
48
|
-
@property (nonatomic, assign) BlockType currentBlockType;
|
|
49
|
-
@property (nonatomic, strong) BlockStyle *currentBlockStyle;
|
|
50
|
-
@property (nonatomic, assign) NSInteger currentHeadingLevel;
|
|
51
|
-
@property (nonatomic, assign) NSInteger blockquoteDepth;
|
|
52
|
-
@property (nonatomic, assign) NSInteger listDepth;
|
|
53
|
-
@property (nonatomic, assign) ListType listType;
|
|
54
|
-
@property (nonatomic, assign) NSInteger listItemNumber;
|
|
55
|
-
@property (nonatomic, assign) CGFloat listMarkerWidth;
|
|
56
|
-
@property (nonatomic, assign) CGFloat listMarkerExtra;
|
|
57
|
-
@property (nonatomic, assign) CGFloat ancestorMarkerOffset;
|
|
58
|
-
@property (nonatomic, assign) CGFloat listItemMarkerExtra;
|
|
59
|
-
@property (nonatomic, assign) CGFloat accumulatedIndent;
|
|
60
|
-
@property (nonatomic, assign) BOOL allowFontScaling;
|
|
61
|
-
@property (nonatomic, assign) CGFloat maxFontSizeMultiplier;
|
|
62
|
-
@property (nonatomic, assign) NSInteger taskItemCount;
|
|
63
|
-
@property (nonatomic, strong) NSMutableArray<id<ENRMLatexErrorReporting>> *mathReporters;
|
|
64
|
-
|
|
65
|
-
- (instancetype)init;
|
|
66
|
-
- (void)reset;
|
|
67
|
-
|
|
68
|
-
- (UIFont *)cachedFontForSize:(CGFloat)fontSize family:(NSString *)fontFamily weight:(NSString *)fontWeight;
|
|
69
|
-
- (NSMutableParagraphStyle *)spacerStyleWithHeight:(CGFloat)height spacing:(CGFloat)spacing;
|
|
70
|
-
- (NSMutableParagraphStyle *)blockSpacerStyleWithMargin:(CGFloat)margin;
|
|
71
|
-
- (void)registerLinkRange:(NSRange)range url:(NSString *)url;
|
|
72
|
-
|
|
73
|
-
- (void)applyLinkAttributesToString:(NSMutableAttributedString *)attributedString;
|
|
74
|
-
- (void)applyImageAttributesToString:(NSMutableAttributedString *)attributedString;
|
|
75
|
-
- (void)registerHeadingRange:(NSRange)range level:(NSInteger)level text:(NSString *)text;
|
|
76
|
-
- (void)registerImageRange:(NSRange)range altText:(NSString *)altText url:(NSString *)url;
|
|
77
|
-
- (void)registerListItemRange:(NSRange)range
|
|
78
|
-
position:(NSInteger)position
|
|
79
|
-
depth:(NSInteger)depth
|
|
80
|
-
isOrdered:(BOOL)isOrdered;
|
|
81
|
-
- (void)setBlockStyle:(BlockType)type
|
|
82
|
-
fontSize:(CGFloat)fontSize
|
|
83
|
-
fontFamily:(NSString *)fontFamily
|
|
84
|
-
fontWeight:(NSString *)fontWeight
|
|
85
|
-
color:(RCTUIColor *)color;
|
|
86
|
-
- (void)setBlockStyle:(BlockType)type
|
|
87
|
-
fontSize:(CGFloat)fontSize
|
|
88
|
-
fontFamily:(NSString *)fontFamily
|
|
89
|
-
fontWeight:(NSString *)fontWeight
|
|
90
|
-
color:(RCTUIColor *)color
|
|
91
|
-
headingLevel:(NSInteger)headingLevel;
|
|
92
|
-
- (void)setBlockStyle:(BlockType)type
|
|
93
|
-
font:(UIFont *)font
|
|
94
|
-
color:(RCTUIColor *)color
|
|
95
|
-
headingLevel:(NSInteger)headingLevel;
|
|
96
|
-
- (BlockStyle *)getBlockStyle;
|
|
97
|
-
- (NSDictionary *)getTextAttributes;
|
|
98
|
-
- (void)clearBlockStyle;
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Captures/restores the scoped context state: block style, block type, heading level,
|
|
102
|
-
* blockquote/list depths, list type, list item counter and accumulated indent.
|
|
103
|
-
* Accumulators (range registries, taskItemCount) are excluded on purpose — they
|
|
104
|
-
* must survive restores.
|
|
105
|
-
*/
|
|
106
|
-
- (id)snapshotScope;
|
|
107
|
-
- (void)restoreScope:(id)snapshot;
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Checks if colors should be preserved based on existing attributes.
|
|
111
|
-
* Returns YES if the text is inside a link or inline code, which means
|
|
112
|
-
* we should preserve their colors instead of applying new colors.
|
|
113
|
-
*/
|
|
114
|
-
+ (BOOL)shouldPreserveColors:(NSDictionary *)existingAttributes;
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Calculates the color that strong would use based on the configured strong color and block style.
|
|
118
|
-
* Uses strongColor if explicitly set (different from block color), otherwise uses block color.
|
|
119
|
-
*/
|
|
120
|
-
+ (RCTUIColor *)calculateStrongColor:(RCTUIColor *)configStrongColor blockColor:(RCTUIColor *)blockColor;
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Resolves highlight foreground color: uses block color when config matches paragraph default.
|
|
124
|
-
*/
|
|
125
|
-
+ (RCTUIColor *)calculateHighlightColor:(RCTUIColor *)configHighlightColor
|
|
126
|
-
paragraphColor:(RCTUIColor *)paragraphColor
|
|
127
|
-
blockColor:(RCTUIColor *)blockColor;
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Calculates the range for content rendered between start and current output length.
|
|
131
|
-
* Returns a range with length 0 if no content was rendered.
|
|
132
|
-
*/
|
|
133
|
-
+ (NSRange)rangeForRenderedContent:(NSMutableAttributedString *)output start:(NSUInteger)start;
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Applies font and color attributes conditionally, only updating if they've changed.
|
|
137
|
-
* Returns YES if any attributes were updated, NO otherwise.
|
|
138
|
-
*/
|
|
139
|
-
+ (BOOL)applyFontAndColorAttributes:(NSMutableAttributedString *)output
|
|
140
|
-
range:(NSRange)range
|
|
141
|
-
font:(UIFont *)font
|
|
142
|
-
color:(RCTUIColor *)color
|
|
143
|
-
existingAttributes:(NSDictionary *)existingAttributes
|
|
144
|
-
shouldPreserveColors:(BOOL)shouldPreserveColors;
|
|
145
|
-
@end
|
|
1
|
+
#import "ENRMLatexErrorReporting.h"
|
|
2
|
+
#import "ENRMUIKit.h"
|
|
3
|
+
#import <Foundation/Foundation.h>
|
|
4
|
+
|
|
5
|
+
typedef NS_ENUM(NSInteger, BlockType) {
|
|
6
|
+
BlockTypeNone,
|
|
7
|
+
BlockTypeParagraph,
|
|
8
|
+
BlockTypeHeading,
|
|
9
|
+
BlockTypeBlockquote,
|
|
10
|
+
BlockTypeUnorderedList,
|
|
11
|
+
BlockTypeOrderedList,
|
|
12
|
+
BlockTypeCodeBlock
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/// YES when the enclosing block re-stamps its own line height over paragraph content and applies the
|
|
16
|
+
/// matching baseline offset itself, so a paragraph nested inside it must not apply its own (the outer
|
|
17
|
+
/// block's line height wins, and applyBaselineOffset skips ranges that already carry an offset).
|
|
18
|
+
/// TODO: loose list items have the same shape (ParagraphRenderer runs, then the list re-stamps its
|
|
19
|
+
/// line height); add BlockTypeUnorderedList/BlockTypeOrderedList here once lists own their offset too.
|
|
20
|
+
static inline BOOL ENRMBlockTypeReappliesBaselineOffset(BlockType type)
|
|
21
|
+
{
|
|
22
|
+
return type == BlockTypeBlockquote;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
typedef NS_ENUM(NSInteger, ListType) { ListTypeUnordered, ListTypeOrdered };
|
|
26
|
+
|
|
27
|
+
@interface BlockStyle : NSObject
|
|
28
|
+
@property (nonatomic, assign) CGFloat fontSize;
|
|
29
|
+
@property (nonatomic, strong) NSString *fontFamily;
|
|
30
|
+
@property (nonatomic, strong) NSString *fontWeight;
|
|
31
|
+
@property (nonatomic, strong) RCTUIColor *color;
|
|
32
|
+
@property (nonatomic, strong) UIFont *cachedFont;
|
|
33
|
+
@property (nonatomic, strong) NSDictionary *cachedTextAttributes;
|
|
34
|
+
@end
|
|
35
|
+
|
|
36
|
+
@interface RenderContext : NSObject
|
|
37
|
+
@property (nonatomic, strong) NSMutableArray<NSValue *> *linkRanges;
|
|
38
|
+
@property (nonatomic, strong) NSMutableArray<NSString *> *linkURLs;
|
|
39
|
+
@property (nonatomic, strong) NSMutableArray<NSValue *> *headingRanges;
|
|
40
|
+
@property (nonatomic, strong) NSMutableArray<NSNumber *> *headingLevels;
|
|
41
|
+
@property (nonatomic, strong) NSMutableArray<NSValue *> *imageRanges;
|
|
42
|
+
@property (nonatomic, strong) NSMutableArray<NSString *> *imageAltTexts;
|
|
43
|
+
@property (nonatomic, strong) NSMutableArray<NSString *> *imageURLs;
|
|
44
|
+
@property (nonatomic, strong) NSMutableArray<NSValue *> *listItemRanges;
|
|
45
|
+
@property (nonatomic, strong) NSMutableArray<NSNumber *> *listItemPositions; // Position in parent list (1, 2, 3...)
|
|
46
|
+
@property (nonatomic, strong) NSMutableArray<NSNumber *> *listItemDepths; // Nesting depth (1 = top level, 2+ = nested)
|
|
47
|
+
@property (nonatomic, strong) NSMutableArray<NSNumber *> *listItemOrdered; // YES = ordered, NO = unordered (bullet)
|
|
48
|
+
@property (nonatomic, assign) BlockType currentBlockType;
|
|
49
|
+
@property (nonatomic, strong) BlockStyle *currentBlockStyle;
|
|
50
|
+
@property (nonatomic, assign) NSInteger currentHeadingLevel;
|
|
51
|
+
@property (nonatomic, assign) NSInteger blockquoteDepth;
|
|
52
|
+
@property (nonatomic, assign) NSInteger listDepth;
|
|
53
|
+
@property (nonatomic, assign) ListType listType;
|
|
54
|
+
@property (nonatomic, assign) NSInteger listItemNumber;
|
|
55
|
+
@property (nonatomic, assign) CGFloat listMarkerWidth;
|
|
56
|
+
@property (nonatomic, assign) CGFloat listMarkerExtra;
|
|
57
|
+
@property (nonatomic, assign) CGFloat ancestorMarkerOffset;
|
|
58
|
+
@property (nonatomic, assign) CGFloat listItemMarkerExtra;
|
|
59
|
+
@property (nonatomic, assign) CGFloat accumulatedIndent;
|
|
60
|
+
@property (nonatomic, assign) BOOL allowFontScaling;
|
|
61
|
+
@property (nonatomic, assign) CGFloat maxFontSizeMultiplier;
|
|
62
|
+
@property (nonatomic, assign) NSInteger taskItemCount;
|
|
63
|
+
@property (nonatomic, strong) NSMutableArray<id<ENRMLatexErrorReporting>> *mathReporters;
|
|
64
|
+
|
|
65
|
+
- (instancetype)init;
|
|
66
|
+
- (void)reset;
|
|
67
|
+
|
|
68
|
+
- (UIFont *)cachedFontForSize:(CGFloat)fontSize family:(NSString *)fontFamily weight:(NSString *)fontWeight;
|
|
69
|
+
- (NSMutableParagraphStyle *)spacerStyleWithHeight:(CGFloat)height spacing:(CGFloat)spacing;
|
|
70
|
+
- (NSMutableParagraphStyle *)blockSpacerStyleWithMargin:(CGFloat)margin;
|
|
71
|
+
- (void)registerLinkRange:(NSRange)range url:(NSString *)url;
|
|
72
|
+
|
|
73
|
+
- (void)applyLinkAttributesToString:(NSMutableAttributedString *)attributedString;
|
|
74
|
+
- (void)applyImageAttributesToString:(NSMutableAttributedString *)attributedString;
|
|
75
|
+
- (void)registerHeadingRange:(NSRange)range level:(NSInteger)level text:(NSString *)text;
|
|
76
|
+
- (void)registerImageRange:(NSRange)range altText:(NSString *)altText url:(NSString *)url;
|
|
77
|
+
- (void)registerListItemRange:(NSRange)range
|
|
78
|
+
position:(NSInteger)position
|
|
79
|
+
depth:(NSInteger)depth
|
|
80
|
+
isOrdered:(BOOL)isOrdered;
|
|
81
|
+
- (void)setBlockStyle:(BlockType)type
|
|
82
|
+
fontSize:(CGFloat)fontSize
|
|
83
|
+
fontFamily:(NSString *)fontFamily
|
|
84
|
+
fontWeight:(NSString *)fontWeight
|
|
85
|
+
color:(RCTUIColor *)color;
|
|
86
|
+
- (void)setBlockStyle:(BlockType)type
|
|
87
|
+
fontSize:(CGFloat)fontSize
|
|
88
|
+
fontFamily:(NSString *)fontFamily
|
|
89
|
+
fontWeight:(NSString *)fontWeight
|
|
90
|
+
color:(RCTUIColor *)color
|
|
91
|
+
headingLevel:(NSInteger)headingLevel;
|
|
92
|
+
- (void)setBlockStyle:(BlockType)type
|
|
93
|
+
font:(UIFont *)font
|
|
94
|
+
color:(RCTUIColor *)color
|
|
95
|
+
headingLevel:(NSInteger)headingLevel;
|
|
96
|
+
- (BlockStyle *)getBlockStyle;
|
|
97
|
+
- (NSDictionary *)getTextAttributes;
|
|
98
|
+
- (void)clearBlockStyle;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Captures/restores the scoped context state: block style, block type, heading level,
|
|
102
|
+
* blockquote/list depths, list type, list item counter and accumulated indent.
|
|
103
|
+
* Accumulators (range registries, taskItemCount) are excluded on purpose — they
|
|
104
|
+
* must survive restores.
|
|
105
|
+
*/
|
|
106
|
+
- (id)snapshotScope;
|
|
107
|
+
- (void)restoreScope:(id)snapshot;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Checks if colors should be preserved based on existing attributes.
|
|
111
|
+
* Returns YES if the text is inside a link or inline code, which means
|
|
112
|
+
* we should preserve their colors instead of applying new colors.
|
|
113
|
+
*/
|
|
114
|
+
+ (BOOL)shouldPreserveColors:(NSDictionary *)existingAttributes;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Calculates the color that strong would use based on the configured strong color and block style.
|
|
118
|
+
* Uses strongColor if explicitly set (different from block color), otherwise uses block color.
|
|
119
|
+
*/
|
|
120
|
+
+ (RCTUIColor *)calculateStrongColor:(RCTUIColor *)configStrongColor blockColor:(RCTUIColor *)blockColor;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Resolves highlight foreground color: uses block color when config matches paragraph default.
|
|
124
|
+
*/
|
|
125
|
+
+ (RCTUIColor *)calculateHighlightColor:(RCTUIColor *)configHighlightColor
|
|
126
|
+
paragraphColor:(RCTUIColor *)paragraphColor
|
|
127
|
+
blockColor:(RCTUIColor *)blockColor;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Calculates the range for content rendered between start and current output length.
|
|
131
|
+
* Returns a range with length 0 if no content was rendered.
|
|
132
|
+
*/
|
|
133
|
+
+ (NSRange)rangeForRenderedContent:(NSMutableAttributedString *)output start:(NSUInteger)start;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Applies font and color attributes conditionally, only updating if they've changed.
|
|
137
|
+
* Returns YES if any attributes were updated, NO otherwise.
|
|
138
|
+
*/
|
|
139
|
+
+ (BOOL)applyFontAndColorAttributes:(NSMutableAttributedString *)output
|
|
140
|
+
range:(NSRange)range
|
|
141
|
+
font:(UIFont *)font
|
|
142
|
+
color:(RCTUIColor *)color
|
|
143
|
+
existingAttributes:(NSDictionary *)existingAttributes
|
|
144
|
+
shouldPreserveColors:(BOOL)shouldPreserveColors;
|
|
145
|
+
@end
|