@mathers101/react-native-render-rich-text 0.1.10 → 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,100 +1,100 @@
|
|
|
1
|
-
#import "EmphasisRenderer.h"
|
|
2
|
-
#import "FontUtils.h"
|
|
3
|
-
#import "TiptapASTNode.h"
|
|
4
|
-
#import "RenderContext.h"
|
|
5
|
-
#import "RendererFactory.h"
|
|
6
|
-
#import "StyleConfig.h"
|
|
7
|
-
#import <React/RCTFont.h>
|
|
8
|
-
|
|
9
|
-
@implementation EmphasisRenderer
|
|
10
|
-
|
|
11
|
-
#pragma mark - Rendering
|
|
12
|
-
|
|
13
|
-
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
14
|
-
into:(NSMutableAttributedString *)output
|
|
15
|
-
context:(RenderContext *)context
|
|
16
|
-
{
|
|
17
|
-
NSUInteger start = output.length;
|
|
18
|
-
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
19
|
-
|
|
20
|
-
NSRange range = NSMakeRange(start, output.length - start);
|
|
21
|
-
if (range.length == 0)
|
|
22
|
-
return;
|
|
23
|
-
|
|
24
|
-
BlockStyle *blockStyle = [context getBlockStyle];
|
|
25
|
-
RCTUIColor *configEmphasisColor = [_config emphasisColor];
|
|
26
|
-
NSString *emphasisFontFamily = [_config emphasisFontFamily];
|
|
27
|
-
NSString *emphasisFontStyle = [_config emphasisFontStyle];
|
|
28
|
-
BOOL useNormalStyle = [emphasisFontStyle isEqualToString:@"normal"];
|
|
29
|
-
|
|
30
|
-
// Cache the Strong color calculation to efficiently detect nested Strong nodes
|
|
31
|
-
RCTUIColor *strongColorToPreserve = [_config strongColor] ? [RenderContext calculateStrongColor:[_config strongColor]
|
|
32
|
-
blockColor:blockStyle.color]
|
|
33
|
-
: nil;
|
|
34
|
-
|
|
35
|
-
[output enumerateAttributesInRange:range
|
|
36
|
-
options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired
|
|
37
|
-
usingBlock:^(NSDictionary<NSAttributedStringKey, id> *attrs, NSRange subrange, BOOL *stop) {
|
|
38
|
-
UIFont *currentFont =
|
|
39
|
-
attrs[NSFontAttributeName] ?: cachedFontFromBlockStyle(blockStyle, context);
|
|
40
|
-
UIFont *resolvedFont = nil;
|
|
41
|
-
|
|
42
|
-
if (emphasisFontFamily.length > 0) {
|
|
43
|
-
resolvedFont = [RCTFont updateFont:currentFont
|
|
44
|
-
withFamily:emphasisFontFamily
|
|
45
|
-
size:nil
|
|
46
|
-
weight:nil
|
|
47
|
-
style:useNormalStyle ? nil : @"italic"
|
|
48
|
-
variant:nil
|
|
49
|
-
scaleMultiplier:1.0];
|
|
50
|
-
} else if (currentFont &&
|
|
51
|
-
!(currentFont.fontDescriptor.symbolicTraits & UIFontDescriptorTraitItalic)) {
|
|
52
|
-
resolvedFont = [self ensureFontIsItalic:currentFont];
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (resolvedFont && ![resolvedFont isEqual:currentFont]) {
|
|
56
|
-
[output addAttribute:NSFontAttributeName value:resolvedFont range:subrange];
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// 2. Color Optimization: Handle nesting and avoid redundant updates
|
|
60
|
-
if (configEmphasisColor) {
|
|
61
|
-
RCTUIColor *currentColor = attrs[NSForegroundColorAttributeName];
|
|
62
|
-
BOOL isLink = attrs[NSLinkAttributeName] != nil;
|
|
63
|
-
|
|
64
|
-
// Verify if the current color belongs to a Strong parent
|
|
65
|
-
BOOL isStrongColor =
|
|
66
|
-
strongColorToPreserve && [currentColor isEqual:strongColorToPreserve];
|
|
67
|
-
|
|
68
|
-
// Preserving colors for higher-priority elements (links, strong nodes, etc.)
|
|
69
|
-
if (!isLink && !isStrongColor && ![RenderContext shouldPreserveColors:attrs]) {
|
|
70
|
-
// Only modify the string if the color is actually different
|
|
71
|
-
if (![currentColor isEqual:configEmphasisColor]) {
|
|
72
|
-
[output addAttribute:NSForegroundColorAttributeName
|
|
73
|
-
value:configEmphasisColor
|
|
74
|
-
range:subrange];
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}];
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
#pragma mark - Helper Methods
|
|
82
|
-
|
|
83
|
-
- (UIFont *)ensureFontIsItalic:(UIFont *)font
|
|
84
|
-
{
|
|
85
|
-
if (!font)
|
|
86
|
-
return nil;
|
|
87
|
-
|
|
88
|
-
UIFontDescriptorSymbolicTraits traits = font.fontDescriptor.symbolicTraits;
|
|
89
|
-
if (traits & UIFontDescriptorTraitItalic)
|
|
90
|
-
return font;
|
|
91
|
-
|
|
92
|
-
// Combine italic with existing traits (e.g., preserving Bold if present)
|
|
93
|
-
UIFontDescriptorSymbolicTraits combinedTraits = traits | UIFontDescriptorTraitItalic;
|
|
94
|
-
UIFontDescriptor *italicDescriptor = [font.fontDescriptor fontDescriptorWithSymbolicTraits:combinedTraits];
|
|
95
|
-
|
|
96
|
-
// Size 0 in fontWithDescriptor:size: maintains the current point size
|
|
97
|
-
return [UIFont fontWithDescriptor:italicDescriptor size:0] ?: font;
|
|
98
|
-
}
|
|
99
|
-
|
|
1
|
+
#import "EmphasisRenderer.h"
|
|
2
|
+
#import "FontUtils.h"
|
|
3
|
+
#import "TiptapASTNode.h"
|
|
4
|
+
#import "RenderContext.h"
|
|
5
|
+
#import "RendererFactory.h"
|
|
6
|
+
#import "StyleConfig.h"
|
|
7
|
+
#import <React/RCTFont.h>
|
|
8
|
+
|
|
9
|
+
@implementation EmphasisRenderer
|
|
10
|
+
|
|
11
|
+
#pragma mark - Rendering
|
|
12
|
+
|
|
13
|
+
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
14
|
+
into:(NSMutableAttributedString *)output
|
|
15
|
+
context:(RenderContext *)context
|
|
16
|
+
{
|
|
17
|
+
NSUInteger start = output.length;
|
|
18
|
+
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
19
|
+
|
|
20
|
+
NSRange range = NSMakeRange(start, output.length - start);
|
|
21
|
+
if (range.length == 0)
|
|
22
|
+
return;
|
|
23
|
+
|
|
24
|
+
BlockStyle *blockStyle = [context getBlockStyle];
|
|
25
|
+
RCTUIColor *configEmphasisColor = [_config emphasisColor];
|
|
26
|
+
NSString *emphasisFontFamily = [_config emphasisFontFamily];
|
|
27
|
+
NSString *emphasisFontStyle = [_config emphasisFontStyle];
|
|
28
|
+
BOOL useNormalStyle = [emphasisFontStyle isEqualToString:@"normal"];
|
|
29
|
+
|
|
30
|
+
// Cache the Strong color calculation to efficiently detect nested Strong nodes
|
|
31
|
+
RCTUIColor *strongColorToPreserve = [_config strongColor] ? [RenderContext calculateStrongColor:[_config strongColor]
|
|
32
|
+
blockColor:blockStyle.color]
|
|
33
|
+
: nil;
|
|
34
|
+
|
|
35
|
+
[output enumerateAttributesInRange:range
|
|
36
|
+
options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired
|
|
37
|
+
usingBlock:^(NSDictionary<NSAttributedStringKey, id> *attrs, NSRange subrange, BOOL *stop) {
|
|
38
|
+
UIFont *currentFont =
|
|
39
|
+
attrs[NSFontAttributeName] ?: cachedFontFromBlockStyle(blockStyle, context);
|
|
40
|
+
UIFont *resolvedFont = nil;
|
|
41
|
+
|
|
42
|
+
if (emphasisFontFamily.length > 0) {
|
|
43
|
+
resolvedFont = [RCTFont updateFont:currentFont
|
|
44
|
+
withFamily:emphasisFontFamily
|
|
45
|
+
size:nil
|
|
46
|
+
weight:nil
|
|
47
|
+
style:useNormalStyle ? nil : @"italic"
|
|
48
|
+
variant:nil
|
|
49
|
+
scaleMultiplier:1.0];
|
|
50
|
+
} else if (currentFont &&
|
|
51
|
+
!(currentFont.fontDescriptor.symbolicTraits & UIFontDescriptorTraitItalic)) {
|
|
52
|
+
resolvedFont = [self ensureFontIsItalic:currentFont];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (resolvedFont && ![resolvedFont isEqual:currentFont]) {
|
|
56
|
+
[output addAttribute:NSFontAttributeName value:resolvedFont range:subrange];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// 2. Color Optimization: Handle nesting and avoid redundant updates
|
|
60
|
+
if (configEmphasisColor) {
|
|
61
|
+
RCTUIColor *currentColor = attrs[NSForegroundColorAttributeName];
|
|
62
|
+
BOOL isLink = attrs[NSLinkAttributeName] != nil;
|
|
63
|
+
|
|
64
|
+
// Verify if the current color belongs to a Strong parent
|
|
65
|
+
BOOL isStrongColor =
|
|
66
|
+
strongColorToPreserve && [currentColor isEqual:strongColorToPreserve];
|
|
67
|
+
|
|
68
|
+
// Preserving colors for higher-priority elements (links, strong nodes, etc.)
|
|
69
|
+
if (!isLink && !isStrongColor && ![RenderContext shouldPreserveColors:attrs]) {
|
|
70
|
+
// Only modify the string if the color is actually different
|
|
71
|
+
if (![currentColor isEqual:configEmphasisColor]) {
|
|
72
|
+
[output addAttribute:NSForegroundColorAttributeName
|
|
73
|
+
value:configEmphasisColor
|
|
74
|
+
range:subrange];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
#pragma mark - Helper Methods
|
|
82
|
+
|
|
83
|
+
- (UIFont *)ensureFontIsItalic:(UIFont *)font
|
|
84
|
+
{
|
|
85
|
+
if (!font)
|
|
86
|
+
return nil;
|
|
87
|
+
|
|
88
|
+
UIFontDescriptorSymbolicTraits traits = font.fontDescriptor.symbolicTraits;
|
|
89
|
+
if (traits & UIFontDescriptorTraitItalic)
|
|
90
|
+
return font;
|
|
91
|
+
|
|
92
|
+
// Combine italic with existing traits (e.g., preserving Bold if present)
|
|
93
|
+
UIFontDescriptorSymbolicTraits combinedTraits = traits | UIFontDescriptorTraitItalic;
|
|
94
|
+
UIFontDescriptor *italicDescriptor = [font.fontDescriptor fontDescriptorWithSymbolicTraits:combinedTraits];
|
|
95
|
+
|
|
96
|
+
// Size 0 in fontWithDescriptor:size: maintains the current point size
|
|
97
|
+
return [UIFont fontWithDescriptor:italicDescriptor size:0] ?: font;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
100
|
@end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#import "BaseRenderer.h"
|
|
2
|
-
#import "TiptapASTNode.h"
|
|
3
|
-
#import "RenderContext.h"
|
|
4
|
-
|
|
5
|
-
@interface HeadingRenderer : BaseRenderer
|
|
6
|
-
@end
|
|
1
|
+
#import "BaseRenderer.h"
|
|
2
|
+
#import "TiptapASTNode.h"
|
|
3
|
+
#import "RenderContext.h"
|
|
4
|
+
|
|
5
|
+
@interface HeadingRenderer : BaseRenderer
|
|
6
|
+
@end
|
|
@@ -1,103 +1,103 @@
|
|
|
1
|
-
#import "HeadingRenderer.h"
|
|
2
|
-
#import "ENRMLinkPillText.h"
|
|
3
|
-
#import "FontUtils.h"
|
|
4
|
-
#import "ParagraphStyleUtils.h"
|
|
5
|
-
#import "RenderContext.h"
|
|
6
|
-
#import "RendererFactory.h"
|
|
7
|
-
#import "RuntimeKeys.h"
|
|
8
|
-
#import "StyleConfig.h"
|
|
9
|
-
|
|
10
|
-
// Lightweight struct to hold style data without object overhead
|
|
11
|
-
typedef struct {
|
|
12
|
-
__unsafe_unretained UIFont *font;
|
|
13
|
-
__unsafe_unretained RCTUIColor *color;
|
|
14
|
-
CGFloat marginTop;
|
|
15
|
-
CGFloat marginBottom;
|
|
16
|
-
CGFloat lineHeight;
|
|
17
|
-
NSTextAlignment textAlign;
|
|
18
|
-
} HeadingStyle;
|
|
19
|
-
|
|
20
|
-
static NSString *const kHeadingTypes[] = {nil, @"heading-1", @"heading-2", @"heading-3",
|
|
21
|
-
@"heading-4", @"heading-5", @"heading-6"};
|
|
22
|
-
|
|
23
|
-
@implementation HeadingRenderer
|
|
24
|
-
|
|
25
|
-
- (id)takeContextSnapshot:(RenderContext *)context
|
|
26
|
-
{
|
|
27
|
-
return [context snapshotScope];
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
31
|
-
into:(NSMutableAttributedString *)output
|
|
32
|
-
context:(RenderContext *)context
|
|
33
|
-
{
|
|
34
|
-
if (output.length > 0 && ![output.string hasSuffix:@"\n"]) {
|
|
35
|
-
[output appendAttributedString:kNewlineAttributedString];
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
NSInteger level = [node.attributes[@"level"] integerValue];
|
|
39
|
-
if (level < 1 || level > 6)
|
|
40
|
-
level = 1;
|
|
41
|
-
|
|
42
|
-
HeadingStyle style = [self styleForLevel:level];
|
|
43
|
-
[context setBlockStyle:BlockTypeHeading font:style.font color:style.color headingLevel:level];
|
|
44
|
-
|
|
45
|
-
NSUInteger start = output.length;
|
|
46
|
-
NSUInteger contentStart = start;
|
|
47
|
-
|
|
48
|
-
// Spacing at the very start of the document requires a spacer character (index 0 check)
|
|
49
|
-
if (start == 0) {
|
|
50
|
-
NSUInteger offset = applyBlockSpacingBefore(output, 0, style.marginTop);
|
|
51
|
-
contentStart += offset;
|
|
52
|
-
start += offset;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
56
|
-
|
|
57
|
-
NSRange range = NSMakeRange(start, output.length - start);
|
|
58
|
-
if (range.length == 0)
|
|
59
|
-
return;
|
|
60
|
-
|
|
61
|
-
// Register heading for accessibility
|
|
62
|
-
NSString *headingText = ENRMStringByExpandingLinkPills([output attributedSubstringFromRange:range]);
|
|
63
|
-
[context registerHeadingRange:range level:level text:headingText];
|
|
64
|
-
|
|
65
|
-
// Metadata attribute used for post-processing (e.g., Export to Tiptap/HTML)
|
|
66
|
-
[output addAttribute:TiptapTypeAttributeName value:kHeadingTypes[level] range:range];
|
|
67
|
-
|
|
68
|
-
applyLineHeight(output, range, style.lineHeight);
|
|
69
|
-
applyBaselineOffset(output, range);
|
|
70
|
-
applyTextAlignment(output, range, style.textAlign);
|
|
71
|
-
|
|
72
|
-
// Skip marginTop for the first block — already handled by applyBlockSpacingBefore above
|
|
73
|
-
if (contentStart != 1) {
|
|
74
|
-
NSUInteger inserted = applyParagraphSpacingBefore(output, range, style.marginTop);
|
|
75
|
-
start += inserted;
|
|
76
|
-
}
|
|
77
|
-
applyParagraphSpacingAfter(output, start, style.marginBottom);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
#pragma mark - Style Mapping
|
|
81
|
-
|
|
82
|
-
- (HeadingStyle)styleForLevel:(NSInteger)level
|
|
83
|
-
{
|
|
84
|
-
StyleConfig *c = _config;
|
|
85
|
-
switch (level) {
|
|
86
|
-
case 1:
|
|
87
|
-
return (HeadingStyle){c.h1Font, c.h1Color, c.h1MarginTop, c.h1MarginBottom, c.h1LineHeight, c.h1TextAlign};
|
|
88
|
-
case 2:
|
|
89
|
-
return (HeadingStyle){c.h2Font, c.h2Color, c.h2MarginTop, c.h2MarginBottom, c.h2LineHeight, c.h2TextAlign};
|
|
90
|
-
case 3:
|
|
91
|
-
return (HeadingStyle){c.h3Font, c.h3Color, c.h3MarginTop, c.h3MarginBottom, c.h3LineHeight, c.h3TextAlign};
|
|
92
|
-
case 4:
|
|
93
|
-
return (HeadingStyle){c.h4Font, c.h4Color, c.h4MarginTop, c.h4MarginBottom, c.h4LineHeight, c.h4TextAlign};
|
|
94
|
-
case 5:
|
|
95
|
-
return (HeadingStyle){c.h5Font, c.h5Color, c.h5MarginTop, c.h5MarginBottom, c.h5LineHeight, c.h5TextAlign};
|
|
96
|
-
case 6:
|
|
97
|
-
return (HeadingStyle){c.h6Font, c.h6Color, c.h6MarginTop, c.h6MarginBottom, c.h6LineHeight, c.h6TextAlign};
|
|
98
|
-
default:
|
|
99
|
-
return [self styleForLevel:1];
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
1
|
+
#import "HeadingRenderer.h"
|
|
2
|
+
#import "ENRMLinkPillText.h"
|
|
3
|
+
#import "FontUtils.h"
|
|
4
|
+
#import "ParagraphStyleUtils.h"
|
|
5
|
+
#import "RenderContext.h"
|
|
6
|
+
#import "RendererFactory.h"
|
|
7
|
+
#import "RuntimeKeys.h"
|
|
8
|
+
#import "StyleConfig.h"
|
|
9
|
+
|
|
10
|
+
// Lightweight struct to hold style data without object overhead
|
|
11
|
+
typedef struct {
|
|
12
|
+
__unsafe_unretained UIFont *font;
|
|
13
|
+
__unsafe_unretained RCTUIColor *color;
|
|
14
|
+
CGFloat marginTop;
|
|
15
|
+
CGFloat marginBottom;
|
|
16
|
+
CGFloat lineHeight;
|
|
17
|
+
NSTextAlignment textAlign;
|
|
18
|
+
} HeadingStyle;
|
|
19
|
+
|
|
20
|
+
static NSString *const kHeadingTypes[] = {nil, @"heading-1", @"heading-2", @"heading-3",
|
|
21
|
+
@"heading-4", @"heading-5", @"heading-6"};
|
|
22
|
+
|
|
23
|
+
@implementation HeadingRenderer
|
|
24
|
+
|
|
25
|
+
- (id)takeContextSnapshot:(RenderContext *)context
|
|
26
|
+
{
|
|
27
|
+
return [context snapshotScope];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
31
|
+
into:(NSMutableAttributedString *)output
|
|
32
|
+
context:(RenderContext *)context
|
|
33
|
+
{
|
|
34
|
+
if (output.length > 0 && ![output.string hasSuffix:@"\n"]) {
|
|
35
|
+
[output appendAttributedString:kNewlineAttributedString];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
NSInteger level = [node.attributes[@"level"] integerValue];
|
|
39
|
+
if (level < 1 || level > 6)
|
|
40
|
+
level = 1;
|
|
41
|
+
|
|
42
|
+
HeadingStyle style = [self styleForLevel:level];
|
|
43
|
+
[context setBlockStyle:BlockTypeHeading font:style.font color:style.color headingLevel:level];
|
|
44
|
+
|
|
45
|
+
NSUInteger start = output.length;
|
|
46
|
+
NSUInteger contentStart = start;
|
|
47
|
+
|
|
48
|
+
// Spacing at the very start of the document requires a spacer character (index 0 check)
|
|
49
|
+
if (start == 0) {
|
|
50
|
+
NSUInteger offset = applyBlockSpacingBefore(output, 0, style.marginTop);
|
|
51
|
+
contentStart += offset;
|
|
52
|
+
start += offset;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
56
|
+
|
|
57
|
+
NSRange range = NSMakeRange(start, output.length - start);
|
|
58
|
+
if (range.length == 0)
|
|
59
|
+
return;
|
|
60
|
+
|
|
61
|
+
// Register heading for accessibility
|
|
62
|
+
NSString *headingText = ENRMStringByExpandingLinkPills([output attributedSubstringFromRange:range]);
|
|
63
|
+
[context registerHeadingRange:range level:level text:headingText];
|
|
64
|
+
|
|
65
|
+
// Metadata attribute used for post-processing (e.g., Export to Tiptap/HTML)
|
|
66
|
+
[output addAttribute:TiptapTypeAttributeName value:kHeadingTypes[level] range:range];
|
|
67
|
+
|
|
68
|
+
applyLineHeight(output, range, style.lineHeight);
|
|
69
|
+
applyBaselineOffset(output, range);
|
|
70
|
+
applyTextAlignment(output, range, style.textAlign);
|
|
71
|
+
|
|
72
|
+
// Skip marginTop for the first block — already handled by applyBlockSpacingBefore above
|
|
73
|
+
if (contentStart != 1) {
|
|
74
|
+
NSUInteger inserted = applyParagraphSpacingBefore(output, range, style.marginTop);
|
|
75
|
+
start += inserted;
|
|
76
|
+
}
|
|
77
|
+
applyParagraphSpacingAfter(output, start, style.marginBottom);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
#pragma mark - Style Mapping
|
|
81
|
+
|
|
82
|
+
- (HeadingStyle)styleForLevel:(NSInteger)level
|
|
83
|
+
{
|
|
84
|
+
StyleConfig *c = _config;
|
|
85
|
+
switch (level) {
|
|
86
|
+
case 1:
|
|
87
|
+
return (HeadingStyle){c.h1Font, c.h1Color, c.h1MarginTop, c.h1MarginBottom, c.h1LineHeight, c.h1TextAlign};
|
|
88
|
+
case 2:
|
|
89
|
+
return (HeadingStyle){c.h2Font, c.h2Color, c.h2MarginTop, c.h2MarginBottom, c.h2LineHeight, c.h2TextAlign};
|
|
90
|
+
case 3:
|
|
91
|
+
return (HeadingStyle){c.h3Font, c.h3Color, c.h3MarginTop, c.h3MarginBottom, c.h3LineHeight, c.h3TextAlign};
|
|
92
|
+
case 4:
|
|
93
|
+
return (HeadingStyle){c.h4Font, c.h4Color, c.h4MarginTop, c.h4MarginBottom, c.h4LineHeight, c.h4TextAlign};
|
|
94
|
+
case 5:
|
|
95
|
+
return (HeadingStyle){c.h5Font, c.h5Color, c.h5MarginTop, c.h5MarginBottom, c.h5LineHeight, c.h5TextAlign};
|
|
96
|
+
case 6:
|
|
97
|
+
return (HeadingStyle){c.h6Font, c.h6Color, c.h6MarginTop, c.h6MarginBottom, c.h6LineHeight, c.h6TextAlign};
|
|
98
|
+
default:
|
|
99
|
+
return [self styleForLevel:1];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
103
|
@end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
#import "BaseRenderer.h"
|
|
3
|
-
|
|
4
|
-
extern NSString *const HighlightAttributeName;
|
|
5
|
-
|
|
6
|
-
@interface HighlightRenderer : BaseRenderer
|
|
7
|
-
@end
|
|
1
|
+
#pragma once
|
|
2
|
+
#import "BaseRenderer.h"
|
|
3
|
+
|
|
4
|
+
extern NSString *const HighlightAttributeName;
|
|
5
|
+
|
|
6
|
+
@interface HighlightRenderer : BaseRenderer
|
|
7
|
+
@end
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
#import "HighlightRenderer.h"
|
|
2
|
-
#import "TiptapASTNode.h"
|
|
3
|
-
#import "RenderContext.h"
|
|
4
|
-
#import "RendererFactory.h"
|
|
5
|
-
#import "StyleConfig.h"
|
|
6
|
-
|
|
7
|
-
NSString *const HighlightAttributeName = @"EnrichedTiptapHighlight";
|
|
8
|
-
|
|
9
|
-
@implementation HighlightRenderer
|
|
10
|
-
|
|
11
|
-
#pragma mark - Rendering
|
|
12
|
-
|
|
13
|
-
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
14
|
-
into:(NSMutableAttributedString *)output
|
|
15
|
-
context:(RenderContext *)context
|
|
16
|
-
{
|
|
17
|
-
NSUInteger start = output.length;
|
|
18
|
-
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
19
|
-
|
|
20
|
-
NSRange range = NSMakeRange(start, output.length - start);
|
|
21
|
-
if (range.length == 0)
|
|
22
|
-
return;
|
|
23
|
-
|
|
24
|
-
BlockStyle *blockStyle = [context getBlockStyle];
|
|
25
|
-
RCTUIColor *foregroundColor = [RenderContext calculateHighlightColor:[_config highlightColor]
|
|
26
|
-
paragraphColor:[_config paragraphColor]
|
|
27
|
-
blockColor:blockStyle.color];
|
|
28
|
-
[output addAttribute:NSForegroundColorAttributeName value:foregroundColor range:range];
|
|
29
|
-
[output addAttribute:NSBackgroundColorAttributeName value:[_config highlightBackgroundColor] range:range];
|
|
30
|
-
[output addAttribute:HighlightAttributeName value:@YES range:range];
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
@end
|
|
1
|
+
#import "HighlightRenderer.h"
|
|
2
|
+
#import "TiptapASTNode.h"
|
|
3
|
+
#import "RenderContext.h"
|
|
4
|
+
#import "RendererFactory.h"
|
|
5
|
+
#import "StyleConfig.h"
|
|
6
|
+
|
|
7
|
+
NSString *const HighlightAttributeName = @"EnrichedTiptapHighlight";
|
|
8
|
+
|
|
9
|
+
@implementation HighlightRenderer
|
|
10
|
+
|
|
11
|
+
#pragma mark - Rendering
|
|
12
|
+
|
|
13
|
+
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
14
|
+
into:(NSMutableAttributedString *)output
|
|
15
|
+
context:(RenderContext *)context
|
|
16
|
+
{
|
|
17
|
+
NSUInteger start = output.length;
|
|
18
|
+
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
19
|
+
|
|
20
|
+
NSRange range = NSMakeRange(start, output.length - start);
|
|
21
|
+
if (range.length == 0)
|
|
22
|
+
return;
|
|
23
|
+
|
|
24
|
+
BlockStyle *blockStyle = [context getBlockStyle];
|
|
25
|
+
RCTUIColor *foregroundColor = [RenderContext calculateHighlightColor:[_config highlightColor]
|
|
26
|
+
paragraphColor:[_config paragraphColor]
|
|
27
|
+
blockColor:blockStyle.color];
|
|
28
|
+
[output addAttribute:NSForegroundColorAttributeName value:foregroundColor range:range];
|
|
29
|
+
[output addAttribute:NSBackgroundColorAttributeName value:[_config highlightBackgroundColor] range:range];
|
|
30
|
+
[output addAttribute:HighlightAttributeName value:@YES range:range];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#import "BaseRenderer.h"
|
|
2
|
-
#import "TiptapASTNode.h"
|
|
3
|
-
#import "RenderContext.h"
|
|
4
|
-
|
|
5
|
-
@interface LinkRenderer : BaseRenderer
|
|
6
|
-
@end
|
|
1
|
+
#import "BaseRenderer.h"
|
|
2
|
+
#import "TiptapASTNode.h"
|
|
3
|
+
#import "RenderContext.h"
|
|
4
|
+
|
|
5
|
+
@interface LinkRenderer : BaseRenderer
|
|
6
|
+
@end
|