@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,48 +1,48 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
#import "ENRMUIKit.h"
|
|
3
|
-
#import <Foundation/Foundation.h>
|
|
4
|
-
|
|
5
|
-
@class StyleConfig;
|
|
6
|
-
|
|
7
|
-
static NSString *const kUTIPlainText = @"public.utf8-plain-text";
|
|
8
|
-
static NSString *const kUTIHTML = @"public.html";
|
|
9
|
-
static NSString *const kUTITiptap = @"net.daringfireball.tiptap";
|
|
10
|
-
|
|
11
|
-
NS_ASSUME_NONNULL_BEGIN
|
|
12
|
-
|
|
13
|
-
#ifdef __cplusplus
|
|
14
|
-
extern "C" {
|
|
15
|
-
#endif
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Copies a plain string to the platform pasteboard.
|
|
19
|
-
*/
|
|
20
|
-
void copyStringToPasteboard(NSString *string);
|
|
21
|
-
|
|
22
|
-
/// Copies a { UTI → NSString | NSData } dictionary to the platform pasteboard.
|
|
23
|
-
void copyItemsToPasteboard(NSDictionary<NSString *, id> *items);
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Copies attributed string to pasteboard with multiple representations
|
|
27
|
-
* (plain text, Tiptap, HTML, RTFD, RTF). Receiving apps pick the richest format they support.
|
|
28
|
-
*/
|
|
29
|
-
void copyAttributedStringToPasteboard(NSAttributedString *attributedString, NSString *_Nullable tiptap,
|
|
30
|
-
StyleConfig *_Nullable styleConfig);
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Extracts tiptap for the given range.
|
|
34
|
-
* Full selection returns cached tiptap; partial selection reverse-engineers from attributes.
|
|
35
|
-
*/
|
|
36
|
-
NSString *_Nullable tiptapForRange(NSAttributedString *attributedText, NSRange range,
|
|
37
|
-
NSString *_Nullable cachedTiptap);
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Returns remote image URLs (http/https only) from ENRMImageAttachments in the given range.
|
|
41
|
-
*/
|
|
42
|
-
NSArray<NSString *> *imageURLsInRange(NSAttributedString *attributedText, NSRange range);
|
|
43
|
-
|
|
44
|
-
#ifdef __cplusplus
|
|
45
|
-
}
|
|
46
|
-
#endif
|
|
47
|
-
|
|
48
|
-
NS_ASSUME_NONNULL_END
|
|
1
|
+
#pragma once
|
|
2
|
+
#import "ENRMUIKit.h"
|
|
3
|
+
#import <Foundation/Foundation.h>
|
|
4
|
+
|
|
5
|
+
@class StyleConfig;
|
|
6
|
+
|
|
7
|
+
static NSString *const kUTIPlainText = @"public.utf8-plain-text";
|
|
8
|
+
static NSString *const kUTIHTML = @"public.html";
|
|
9
|
+
static NSString *const kUTITiptap = @"net.daringfireball.tiptap";
|
|
10
|
+
|
|
11
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
12
|
+
|
|
13
|
+
#ifdef __cplusplus
|
|
14
|
+
extern "C" {
|
|
15
|
+
#endif
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Copies a plain string to the platform pasteboard.
|
|
19
|
+
*/
|
|
20
|
+
void copyStringToPasteboard(NSString *string);
|
|
21
|
+
|
|
22
|
+
/// Copies a { UTI → NSString | NSData } dictionary to the platform pasteboard.
|
|
23
|
+
void copyItemsToPasteboard(NSDictionary<NSString *, id> *items);
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Copies attributed string to pasteboard with multiple representations
|
|
27
|
+
* (plain text, Tiptap, HTML, RTFD, RTF). Receiving apps pick the richest format they support.
|
|
28
|
+
*/
|
|
29
|
+
void copyAttributedStringToPasteboard(NSAttributedString *attributedString, NSString *_Nullable tiptap,
|
|
30
|
+
StyleConfig *_Nullable styleConfig);
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Extracts tiptap for the given range.
|
|
34
|
+
* Full selection returns cached tiptap; partial selection reverse-engineers from attributes.
|
|
35
|
+
*/
|
|
36
|
+
NSString *_Nullable tiptapForRange(NSAttributedString *attributedText, NSRange range,
|
|
37
|
+
NSString *_Nullable cachedTiptap);
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Returns remote image URLs (http/https only) from ENRMImageAttachments in the given range.
|
|
41
|
+
*/
|
|
42
|
+
NSArray<NSString *> *imageURLsInRange(NSAttributedString *attributedText, NSRange range);
|
|
43
|
+
|
|
44
|
+
#ifdef __cplusplus
|
|
45
|
+
}
|
|
46
|
+
#endif
|
|
47
|
+
|
|
48
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -1,166 +1,166 @@
|
|
|
1
|
-
#import "PasteboardUtils.h"
|
|
2
|
-
#import "ENRMImageAttachment.h"
|
|
3
|
-
#import "ENRMLinkPillText.h"
|
|
4
|
-
#import "HTMLGenerator.h"
|
|
5
|
-
#import "TiptapExtractor.h"
|
|
6
|
-
#import "RTFExportUtils.h"
|
|
7
|
-
#import "StyleConfig.h"
|
|
8
|
-
#include <TargetConditionals.h>
|
|
9
|
-
#if !TARGET_OS_OSX
|
|
10
|
-
#import <UIKit/UIPasteboard.h>
|
|
11
|
-
#endif
|
|
12
|
-
|
|
13
|
-
static NSString *const kUTIRTFD = @"com.apple.rtfd";
|
|
14
|
-
static NSString *const kUTIFlatRTFD = @"com.apple.flat-rtfd";
|
|
15
|
-
static NSString *const kUTIRTF = @"public.rtf";
|
|
16
|
-
|
|
17
|
-
#pragma mark - Private Helpers
|
|
18
|
-
|
|
19
|
-
static void addRTFData(NSMutableDictionary *items, NSAttributedString *attributedString, NSRange range,
|
|
20
|
-
NSString *documentType, NSString *uti)
|
|
21
|
-
{
|
|
22
|
-
NSError *error = nil;
|
|
23
|
-
NSData *data = [attributedString dataFromRange:range
|
|
24
|
-
documentAttributes:@{NSDocumentTypeDocumentAttribute : documentType}
|
|
25
|
-
error:&error];
|
|
26
|
-
if (data && !error) {
|
|
27
|
-
items[uti] = data;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
static void addRTFDData(NSMutableDictionary *items, NSAttributedString *attributedString, NSRange range)
|
|
32
|
-
{
|
|
33
|
-
NSError *error = nil;
|
|
34
|
-
NSFileWrapper *wrapper =
|
|
35
|
-
[attributedString fileWrapperFromRange:range
|
|
36
|
-
documentAttributes:@{NSDocumentTypeDocumentAttribute : NSRTFDTextDocumentType}
|
|
37
|
-
error:&error];
|
|
38
|
-
if (wrapper && !error) {
|
|
39
|
-
NSData *data = [wrapper serializedRepresentation];
|
|
40
|
-
if (data) {
|
|
41
|
-
items[kUTIFlatRTFD] = data;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
static void addHTMLData(NSMutableDictionary *items, NSAttributedString *attributedString, StyleConfig *styleConfig)
|
|
47
|
-
{
|
|
48
|
-
NSString *html = generateHTML(attributedString, styleConfig);
|
|
49
|
-
if (html) {
|
|
50
|
-
NSData *data = [html dataUsingEncoding:NSUTF8StringEncoding];
|
|
51
|
-
if (data) {
|
|
52
|
-
items[kUTIHTML] = data;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
#pragma mark - Public API
|
|
58
|
-
|
|
59
|
-
void copyStringToPasteboard(NSString *string)
|
|
60
|
-
{
|
|
61
|
-
#if !TARGET_OS_OSX
|
|
62
|
-
[[UIPasteboard generalPasteboard] setString:string];
|
|
63
|
-
#else
|
|
64
|
-
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
|
|
65
|
-
[pasteboard clearContents];
|
|
66
|
-
[pasteboard setString:string forType:kUTIPlainText];
|
|
67
|
-
#endif
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
void copyItemsToPasteboard(NSDictionary<NSString *, id> *items)
|
|
71
|
-
{
|
|
72
|
-
#if !TARGET_OS_OSX
|
|
73
|
-
[[UIPasteboard generalPasteboard] setItems:@[ items ]];
|
|
74
|
-
#else
|
|
75
|
-
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
|
|
76
|
-
[pasteboard clearContents];
|
|
77
|
-
for (NSString *type in items) {
|
|
78
|
-
id value = items[type];
|
|
79
|
-
if ([value isKindOfClass:[NSString class]]) {
|
|
80
|
-
[pasteboard setString:value forType:type];
|
|
81
|
-
} else if ([value isKindOfClass:[NSData class]]) {
|
|
82
|
-
[pasteboard setData:value forType:type];
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
#endif
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
void copyAttributedStringToPasteboard(NSAttributedString *attributedString, NSString *_Nullable tiptap,
|
|
89
|
-
StyleConfig *_Nullable styleConfig)
|
|
90
|
-
{
|
|
91
|
-
if (!attributedString || attributedString.length == 0)
|
|
92
|
-
return;
|
|
93
|
-
|
|
94
|
-
// Expanded once here for the plain-text flavor; the exporters below then have nothing left to expand.
|
|
95
|
-
attributedString = ENRMAttributedStringByExpandingLinkPills(attributedString, NULL);
|
|
96
|
-
|
|
97
|
-
NSMutableDictionary *items = [NSMutableDictionary dictionary];
|
|
98
|
-
|
|
99
|
-
items[kUTIPlainText] = attributedString.string;
|
|
100
|
-
|
|
101
|
-
if (tiptap.length > 0) {
|
|
102
|
-
items[kUTITiptap] = tiptap;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
if (styleConfig) {
|
|
106
|
-
addHTMLData(items, attributedString, styleConfig);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// RTF export requires preprocessing (backgrounds, markers, normalized spacing)
|
|
110
|
-
NSAttributedString *rtfPrepared = prepareAttributedStringForRTFExport(attributedString, styleConfig);
|
|
111
|
-
NSRange rtfRange = NSMakeRange(0, rtfPrepared.length);
|
|
112
|
-
|
|
113
|
-
addRTFDData(items, rtfPrepared, rtfRange);
|
|
114
|
-
addRTFData(items, rtfPrepared, rtfRange, NSRTFTextDocumentType, kUTIRTF);
|
|
115
|
-
|
|
116
|
-
copyItemsToPasteboard(items);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
#pragma mark - Content Extraction
|
|
120
|
-
|
|
121
|
-
NSString *_Nullable tiptapForRange(NSAttributedString *attributedText, NSRange range,
|
|
122
|
-
NSString *_Nullable cachedTiptap)
|
|
123
|
-
{
|
|
124
|
-
if (!cachedTiptap || range.length == 0)
|
|
125
|
-
return nil;
|
|
126
|
-
|
|
127
|
-
if (!attributedText || range.location >= attributedText.length)
|
|
128
|
-
return nil;
|
|
129
|
-
|
|
130
|
-
range.length = MIN(range.length, attributedText.length - range.location);
|
|
131
|
-
|
|
132
|
-
// Full selection: use cached tiptap directly
|
|
133
|
-
BOOL isFullSelection = (range.location == 0 && range.length >= attributedText.length - 1);
|
|
134
|
-
if (isFullSelection) {
|
|
135
|
-
return cachedTiptap;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// Partial selection: reverse-engineer from attributes
|
|
139
|
-
return extractTiptapFromAttributedString(attributedText, range);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
NSArray<NSString *> *imageURLsInRange(NSAttributedString *attributedText, NSRange range)
|
|
143
|
-
{
|
|
144
|
-
if (!attributedText || range.location == NSNotFound || range.length == 0 || range.location >= attributedText.length) {
|
|
145
|
-
return @[];
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
range.length = MIN(range.length, attributedText.length - range.location);
|
|
149
|
-
|
|
150
|
-
NSMutableArray<NSString *> *urls = [NSMutableArray array];
|
|
151
|
-
|
|
152
|
-
[attributedText enumerateAttribute:NSAttachmentAttributeName
|
|
153
|
-
inRange:range
|
|
154
|
-
options:0
|
|
155
|
-
usingBlock:^(id value, NSRange r, BOOL *stop) {
|
|
156
|
-
if (![value isKindOfClass:[ENRMImageAttachment class]])
|
|
157
|
-
return;
|
|
158
|
-
|
|
159
|
-
NSString *url = ((ENRMImageAttachment *)value).imageURL;
|
|
160
|
-
if ([url hasPrefix:@"http://"] || [url hasPrefix:@"https://"]) {
|
|
161
|
-
[urls addObject:url];
|
|
162
|
-
}
|
|
163
|
-
}];
|
|
164
|
-
|
|
165
|
-
return urls;
|
|
166
|
-
}
|
|
1
|
+
#import "PasteboardUtils.h"
|
|
2
|
+
#import "ENRMImageAttachment.h"
|
|
3
|
+
#import "ENRMLinkPillText.h"
|
|
4
|
+
#import "HTMLGenerator.h"
|
|
5
|
+
#import "TiptapExtractor.h"
|
|
6
|
+
#import "RTFExportUtils.h"
|
|
7
|
+
#import "StyleConfig.h"
|
|
8
|
+
#include <TargetConditionals.h>
|
|
9
|
+
#if !TARGET_OS_OSX
|
|
10
|
+
#import <UIKit/UIPasteboard.h>
|
|
11
|
+
#endif
|
|
12
|
+
|
|
13
|
+
static NSString *const kUTIRTFD = @"com.apple.rtfd";
|
|
14
|
+
static NSString *const kUTIFlatRTFD = @"com.apple.flat-rtfd";
|
|
15
|
+
static NSString *const kUTIRTF = @"public.rtf";
|
|
16
|
+
|
|
17
|
+
#pragma mark - Private Helpers
|
|
18
|
+
|
|
19
|
+
static void addRTFData(NSMutableDictionary *items, NSAttributedString *attributedString, NSRange range,
|
|
20
|
+
NSString *documentType, NSString *uti)
|
|
21
|
+
{
|
|
22
|
+
NSError *error = nil;
|
|
23
|
+
NSData *data = [attributedString dataFromRange:range
|
|
24
|
+
documentAttributes:@{NSDocumentTypeDocumentAttribute : documentType}
|
|
25
|
+
error:&error];
|
|
26
|
+
if (data && !error) {
|
|
27
|
+
items[uti] = data;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
static void addRTFDData(NSMutableDictionary *items, NSAttributedString *attributedString, NSRange range)
|
|
32
|
+
{
|
|
33
|
+
NSError *error = nil;
|
|
34
|
+
NSFileWrapper *wrapper =
|
|
35
|
+
[attributedString fileWrapperFromRange:range
|
|
36
|
+
documentAttributes:@{NSDocumentTypeDocumentAttribute : NSRTFDTextDocumentType}
|
|
37
|
+
error:&error];
|
|
38
|
+
if (wrapper && !error) {
|
|
39
|
+
NSData *data = [wrapper serializedRepresentation];
|
|
40
|
+
if (data) {
|
|
41
|
+
items[kUTIFlatRTFD] = data;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
static void addHTMLData(NSMutableDictionary *items, NSAttributedString *attributedString, StyleConfig *styleConfig)
|
|
47
|
+
{
|
|
48
|
+
NSString *html = generateHTML(attributedString, styleConfig);
|
|
49
|
+
if (html) {
|
|
50
|
+
NSData *data = [html dataUsingEncoding:NSUTF8StringEncoding];
|
|
51
|
+
if (data) {
|
|
52
|
+
items[kUTIHTML] = data;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
#pragma mark - Public API
|
|
58
|
+
|
|
59
|
+
void copyStringToPasteboard(NSString *string)
|
|
60
|
+
{
|
|
61
|
+
#if !TARGET_OS_OSX
|
|
62
|
+
[[UIPasteboard generalPasteboard] setString:string];
|
|
63
|
+
#else
|
|
64
|
+
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
|
|
65
|
+
[pasteboard clearContents];
|
|
66
|
+
[pasteboard setString:string forType:kUTIPlainText];
|
|
67
|
+
#endif
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
void copyItemsToPasteboard(NSDictionary<NSString *, id> *items)
|
|
71
|
+
{
|
|
72
|
+
#if !TARGET_OS_OSX
|
|
73
|
+
[[UIPasteboard generalPasteboard] setItems:@[ items ]];
|
|
74
|
+
#else
|
|
75
|
+
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
|
|
76
|
+
[pasteboard clearContents];
|
|
77
|
+
for (NSString *type in items) {
|
|
78
|
+
id value = items[type];
|
|
79
|
+
if ([value isKindOfClass:[NSString class]]) {
|
|
80
|
+
[pasteboard setString:value forType:type];
|
|
81
|
+
} else if ([value isKindOfClass:[NSData class]]) {
|
|
82
|
+
[pasteboard setData:value forType:type];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
#endif
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
void copyAttributedStringToPasteboard(NSAttributedString *attributedString, NSString *_Nullable tiptap,
|
|
89
|
+
StyleConfig *_Nullable styleConfig)
|
|
90
|
+
{
|
|
91
|
+
if (!attributedString || attributedString.length == 0)
|
|
92
|
+
return;
|
|
93
|
+
|
|
94
|
+
// Expanded once here for the plain-text flavor; the exporters below then have nothing left to expand.
|
|
95
|
+
attributedString = ENRMAttributedStringByExpandingLinkPills(attributedString, NULL);
|
|
96
|
+
|
|
97
|
+
NSMutableDictionary *items = [NSMutableDictionary dictionary];
|
|
98
|
+
|
|
99
|
+
items[kUTIPlainText] = attributedString.string;
|
|
100
|
+
|
|
101
|
+
if (tiptap.length > 0) {
|
|
102
|
+
items[kUTITiptap] = tiptap;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (styleConfig) {
|
|
106
|
+
addHTMLData(items, attributedString, styleConfig);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// RTF export requires preprocessing (backgrounds, markers, normalized spacing)
|
|
110
|
+
NSAttributedString *rtfPrepared = prepareAttributedStringForRTFExport(attributedString, styleConfig);
|
|
111
|
+
NSRange rtfRange = NSMakeRange(0, rtfPrepared.length);
|
|
112
|
+
|
|
113
|
+
addRTFDData(items, rtfPrepared, rtfRange);
|
|
114
|
+
addRTFData(items, rtfPrepared, rtfRange, NSRTFTextDocumentType, kUTIRTF);
|
|
115
|
+
|
|
116
|
+
copyItemsToPasteboard(items);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
#pragma mark - Content Extraction
|
|
120
|
+
|
|
121
|
+
NSString *_Nullable tiptapForRange(NSAttributedString *attributedText, NSRange range,
|
|
122
|
+
NSString *_Nullable cachedTiptap)
|
|
123
|
+
{
|
|
124
|
+
if (!cachedTiptap || range.length == 0)
|
|
125
|
+
return nil;
|
|
126
|
+
|
|
127
|
+
if (!attributedText || range.location >= attributedText.length)
|
|
128
|
+
return nil;
|
|
129
|
+
|
|
130
|
+
range.length = MIN(range.length, attributedText.length - range.location);
|
|
131
|
+
|
|
132
|
+
// Full selection: use cached tiptap directly
|
|
133
|
+
BOOL isFullSelection = (range.location == 0 && range.length >= attributedText.length - 1);
|
|
134
|
+
if (isFullSelection) {
|
|
135
|
+
return cachedTiptap;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Partial selection: reverse-engineer from attributes
|
|
139
|
+
return extractTiptapFromAttributedString(attributedText, range);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
NSArray<NSString *> *imageURLsInRange(NSAttributedString *attributedText, NSRange range)
|
|
143
|
+
{
|
|
144
|
+
if (!attributedText || range.location == NSNotFound || range.length == 0 || range.location >= attributedText.length) {
|
|
145
|
+
return @[];
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
range.length = MIN(range.length, attributedText.length - range.location);
|
|
149
|
+
|
|
150
|
+
NSMutableArray<NSString *> *urls = [NSMutableArray array];
|
|
151
|
+
|
|
152
|
+
[attributedText enumerateAttribute:NSAttachmentAttributeName
|
|
153
|
+
inRange:range
|
|
154
|
+
options:0
|
|
155
|
+
usingBlock:^(id value, NSRange r, BOOL *stop) {
|
|
156
|
+
if (![value isKindOfClass:[ENRMImageAttachment class]])
|
|
157
|
+
return;
|
|
158
|
+
|
|
159
|
+
NSString *url = ((ENRMImageAttachment *)value).imageURL;
|
|
160
|
+
if ([url hasPrefix:@"http://"] || [url hasPrefix:@"https://"]) {
|
|
161
|
+
[urls addObject:url];
|
|
162
|
+
}
|
|
163
|
+
}];
|
|
164
|
+
|
|
165
|
+
return urls;
|
|
166
|
+
}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
#import "ENRMUIKit.h"
|
|
3
|
-
#import <Foundation/Foundation.h>
|
|
4
|
-
|
|
5
|
-
@class StyleConfig;
|
|
6
|
-
|
|
7
|
-
NS_ASSUME_NONNULL_BEGIN
|
|
8
|
-
|
|
9
|
-
#ifdef __cplusplus
|
|
10
|
-
extern "C" {
|
|
11
|
-
#endif
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Prepares NSAttributedString for RTF/RTFD export by adding backgrounds,
|
|
15
|
-
* inserting text markers (>, •, 1.), and normalizing paragraph styles.
|
|
16
|
-
*/
|
|
17
|
-
NSAttributedString *prepareAttributedStringForRTFExport(NSAttributedString *attributedString,
|
|
18
|
-
StyleConfig *_Nullable styleConfig);
|
|
19
|
-
|
|
20
|
-
#ifdef __cplusplus
|
|
21
|
-
}
|
|
22
|
-
#endif
|
|
23
|
-
|
|
24
|
-
NS_ASSUME_NONNULL_END
|
|
1
|
+
#pragma once
|
|
2
|
+
#import "ENRMUIKit.h"
|
|
3
|
+
#import <Foundation/Foundation.h>
|
|
4
|
+
|
|
5
|
+
@class StyleConfig;
|
|
6
|
+
|
|
7
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
8
|
+
|
|
9
|
+
#ifdef __cplusplus
|
|
10
|
+
extern "C" {
|
|
11
|
+
#endif
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Prepares NSAttributedString for RTF/RTFD export by adding backgrounds,
|
|
15
|
+
* inserting text markers (>, •, 1.), and normalizing paragraph styles.
|
|
16
|
+
*/
|
|
17
|
+
NSAttributedString *prepareAttributedStringForRTFExport(NSAttributedString *attributedString,
|
|
18
|
+
StyleConfig *_Nullable styleConfig);
|
|
19
|
+
|
|
20
|
+
#ifdef __cplusplus
|
|
21
|
+
}
|
|
22
|
+
#endif
|
|
23
|
+
|
|
24
|
+
NS_ASSUME_NONNULL_END
|