@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,142 +1,142 @@
|
|
|
1
|
-
package com.renderrichtext.utils.text.span
|
|
2
|
-
|
|
3
|
-
import android.text.SpannableStringBuilder
|
|
4
|
-
import com.renderrichtext.spans.CodeBlockSpan
|
|
5
|
-
import com.renderrichtext.spans.ImageSpan
|
|
6
|
-
import com.renderrichtext.spans.LineHeightSpan
|
|
7
|
-
import com.renderrichtext.spans.LinkPillSpan
|
|
8
|
-
import com.renderrichtext.spans.MarginBottomSpan
|
|
9
|
-
import com.renderrichtext.utils.text.span.SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE
|
|
10
|
-
import android.text.style.LineHeightSpan as AndroidLineHeightSpan
|
|
11
|
-
|
|
12
|
-
fun createLineHeightSpan(lineHeight: Float): AndroidLineHeightSpan = LineHeightSpan(lineHeight)
|
|
13
|
-
|
|
14
|
-
/** The line height floor that link pills ask of their paragraph. */
|
|
15
|
-
private class LinkPillLineHeightSpan(
|
|
16
|
-
height: Float,
|
|
17
|
-
) : AndroidLineHeightSpan by LineHeightSpan(height)
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Raises the line height of every paragraph in [start]..[end] to the largest
|
|
21
|
-
* `pill.lineHeight` among its link pills. A line grows to fit a pill on its own, but only
|
|
22
|
-
* that line and only to the pill's box, so pills on consecutive lines touch. A style that
|
|
23
|
-
* sets `pill.lineHeight` gets a floor for the whole paragraph instead, which keeps its
|
|
24
|
-
* lines even and the pills apart.
|
|
25
|
-
*
|
|
26
|
-
* Nested blocks set line height over ranges that overlap, so a paragraph that already
|
|
27
|
-
* has its floor is left alone. [spanFlags] are those of the block's own line height span:
|
|
28
|
-
* line height spans apply in order, and the floor has to come before the spans that add a
|
|
29
|
-
* margin to a line, or it would swallow that margin.
|
|
30
|
-
*/
|
|
31
|
-
fun applyLinkPillLineHeight(
|
|
32
|
-
builder: SpannableStringBuilder,
|
|
33
|
-
start: Int,
|
|
34
|
-
end: Int,
|
|
35
|
-
spanFlags: Int = SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE,
|
|
36
|
-
) {
|
|
37
|
-
val heights = HashMap<Int, Float>()
|
|
38
|
-
for (pill in builder.getSpans(start, end, LinkPillSpan::class.java)) {
|
|
39
|
-
val pillStart = builder.getSpanStart(pill)
|
|
40
|
-
// getSpans also returns a pill that only touches the range.
|
|
41
|
-
if (pill.lineHeight <= 0 || pillStart < start || pillStart >= end) continue
|
|
42
|
-
val paragraphStart = builder.lastIndexOf('\n', pillStart - 1).let { if (it < start) start else it + 1 }
|
|
43
|
-
heights[paragraphStart] = maxOf(heights[paragraphStart] ?: 0f, pill.lineHeight)
|
|
44
|
-
}
|
|
45
|
-
for ((paragraphStart, height) in heights) {
|
|
46
|
-
val paragraphEnd = builder.indexOf('\n', paragraphStart).let { if (it < 0 || it >= end) end else it + 1 }
|
|
47
|
-
// getSpans also returns the floor of a neighbouring paragraph, which only touches this one.
|
|
48
|
-
val hasFloor =
|
|
49
|
-
builder
|
|
50
|
-
.getSpans(paragraphStart, paragraphEnd, LinkPillLineHeightSpan::class.java)
|
|
51
|
-
.any { builder.getSpanStart(it) <= paragraphStart && builder.getSpanEnd(it) > paragraphStart }
|
|
52
|
-
if (hasFloor) continue
|
|
53
|
-
builder.setSpan(LinkPillLineHeightSpan(height), paragraphStart, paragraphEnd, spanFlags)
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Applies [LineHeightSpan] to [start]..[end] but skips ranges occupied by
|
|
59
|
-
* block [ImageSpan]s (and their trailing '\n') and by [CodeBlockSpan]s —
|
|
60
|
-
* both of these apply their own font-metric adjustments that a fixed
|
|
61
|
-
* line height would override.
|
|
62
|
-
*/
|
|
63
|
-
fun applyLineHeightSkippingImages(
|
|
64
|
-
builder: SpannableStringBuilder,
|
|
65
|
-
start: Int,
|
|
66
|
-
end: Int,
|
|
67
|
-
lineHeight: Float,
|
|
68
|
-
spanFlags: Int = SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE,
|
|
69
|
-
) {
|
|
70
|
-
val blockImageRanges =
|
|
71
|
-
builder
|
|
72
|
-
.getSpans(start, end, ImageSpan::class.java)
|
|
73
|
-
.filter { !it.isInline }
|
|
74
|
-
.map { builder.getSpanStart(it) to builder.getSpanEnd(it) }
|
|
75
|
-
|
|
76
|
-
val codeBlockRanges =
|
|
77
|
-
builder
|
|
78
|
-
.getSpans(start, end, CodeBlockSpan::class.java)
|
|
79
|
-
.map { builder.getSpanStart(it) to builder.getSpanEnd(it) }
|
|
80
|
-
|
|
81
|
-
val excludedRanges = (blockImageRanges + codeBlockRanges).sortedBy { it.first }
|
|
82
|
-
|
|
83
|
-
var pos = start
|
|
84
|
-
for ((exStart, exEnd) in excludedRanges) {
|
|
85
|
-
if (pos < exStart) {
|
|
86
|
-
builder.setSpan(
|
|
87
|
-
createLineHeightSpan(lineHeight),
|
|
88
|
-
pos,
|
|
89
|
-
exStart,
|
|
90
|
-
spanFlags,
|
|
91
|
-
)
|
|
92
|
-
}
|
|
93
|
-
val skipEnd = if (exEnd < end && builder[exEnd] == '\n') exEnd + 1 else exEnd
|
|
94
|
-
pos = maxOf(pos, skipEnd)
|
|
95
|
-
}
|
|
96
|
-
if (pos < end) {
|
|
97
|
-
builder.setSpan(
|
|
98
|
-
createLineHeightSpan(lineHeight),
|
|
99
|
-
pos,
|
|
100
|
-
end,
|
|
101
|
-
spanFlags,
|
|
102
|
-
)
|
|
103
|
-
}
|
|
104
|
-
applyLinkPillLineHeight(builder, start, end, spanFlags)
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
fun applyMarginTop(
|
|
108
|
-
builder: SpannableStringBuilder,
|
|
109
|
-
insertionPoint: Int,
|
|
110
|
-
marginTop: Float,
|
|
111
|
-
) {
|
|
112
|
-
if (marginTop <= 0) return
|
|
113
|
-
|
|
114
|
-
// Insert a newline character to act as a vertical spacer
|
|
115
|
-
builder.insert(insertionPoint, "\n")
|
|
116
|
-
|
|
117
|
-
// Apply MarginBottomSpan to the spacer character to create the gap before the content
|
|
118
|
-
builder.setSpan(
|
|
119
|
-
MarginBottomSpan(marginTop),
|
|
120
|
-
insertionPoint,
|
|
121
|
-
insertionPoint + 1,
|
|
122
|
-
SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE,
|
|
123
|
-
)
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
fun applyMarginBottom(
|
|
127
|
-
builder: SpannableStringBuilder,
|
|
128
|
-
marginBottom: Float,
|
|
129
|
-
) {
|
|
130
|
-
val spacerStart = builder.length
|
|
131
|
-
builder.append("\n")
|
|
132
|
-
// Always create a MarginBottomSpan, even when marginBottom = 0.
|
|
133
|
-
// This ensures removeTrailingMargin can correctly identify the LAST element's
|
|
134
|
-
// margin value. Without a span on the last element, it would pick up a previous
|
|
135
|
-
// element's span (e.g. blockquote with marginBottom: 16) and use that wrong value.
|
|
136
|
-
builder.setSpan(
|
|
137
|
-
MarginBottomSpan(marginBottom),
|
|
138
|
-
spacerStart,
|
|
139
|
-
builder.length,
|
|
140
|
-
SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE,
|
|
141
|
-
)
|
|
142
|
-
}
|
|
1
|
+
package com.renderrichtext.utils.text.span
|
|
2
|
+
|
|
3
|
+
import android.text.SpannableStringBuilder
|
|
4
|
+
import com.renderrichtext.spans.CodeBlockSpan
|
|
5
|
+
import com.renderrichtext.spans.ImageSpan
|
|
6
|
+
import com.renderrichtext.spans.LineHeightSpan
|
|
7
|
+
import com.renderrichtext.spans.LinkPillSpan
|
|
8
|
+
import com.renderrichtext.spans.MarginBottomSpan
|
|
9
|
+
import com.renderrichtext.utils.text.span.SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE
|
|
10
|
+
import android.text.style.LineHeightSpan as AndroidLineHeightSpan
|
|
11
|
+
|
|
12
|
+
fun createLineHeightSpan(lineHeight: Float): AndroidLineHeightSpan = LineHeightSpan(lineHeight)
|
|
13
|
+
|
|
14
|
+
/** The line height floor that link pills ask of their paragraph. */
|
|
15
|
+
private class LinkPillLineHeightSpan(
|
|
16
|
+
height: Float,
|
|
17
|
+
) : AndroidLineHeightSpan by LineHeightSpan(height)
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Raises the line height of every paragraph in [start]..[end] to the largest
|
|
21
|
+
* `pill.lineHeight` among its link pills. A line grows to fit a pill on its own, but only
|
|
22
|
+
* that line and only to the pill's box, so pills on consecutive lines touch. A style that
|
|
23
|
+
* sets `pill.lineHeight` gets a floor for the whole paragraph instead, which keeps its
|
|
24
|
+
* lines even and the pills apart.
|
|
25
|
+
*
|
|
26
|
+
* Nested blocks set line height over ranges that overlap, so a paragraph that already
|
|
27
|
+
* has its floor is left alone. [spanFlags] are those of the block's own line height span:
|
|
28
|
+
* line height spans apply in order, and the floor has to come before the spans that add a
|
|
29
|
+
* margin to a line, or it would swallow that margin.
|
|
30
|
+
*/
|
|
31
|
+
fun applyLinkPillLineHeight(
|
|
32
|
+
builder: SpannableStringBuilder,
|
|
33
|
+
start: Int,
|
|
34
|
+
end: Int,
|
|
35
|
+
spanFlags: Int = SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE,
|
|
36
|
+
) {
|
|
37
|
+
val heights = HashMap<Int, Float>()
|
|
38
|
+
for (pill in builder.getSpans(start, end, LinkPillSpan::class.java)) {
|
|
39
|
+
val pillStart = builder.getSpanStart(pill)
|
|
40
|
+
// getSpans also returns a pill that only touches the range.
|
|
41
|
+
if (pill.lineHeight <= 0 || pillStart < start || pillStart >= end) continue
|
|
42
|
+
val paragraphStart = builder.lastIndexOf('\n', pillStart - 1).let { if (it < start) start else it + 1 }
|
|
43
|
+
heights[paragraphStart] = maxOf(heights[paragraphStart] ?: 0f, pill.lineHeight)
|
|
44
|
+
}
|
|
45
|
+
for ((paragraphStart, height) in heights) {
|
|
46
|
+
val paragraphEnd = builder.indexOf('\n', paragraphStart).let { if (it < 0 || it >= end) end else it + 1 }
|
|
47
|
+
// getSpans also returns the floor of a neighbouring paragraph, which only touches this one.
|
|
48
|
+
val hasFloor =
|
|
49
|
+
builder
|
|
50
|
+
.getSpans(paragraphStart, paragraphEnd, LinkPillLineHeightSpan::class.java)
|
|
51
|
+
.any { builder.getSpanStart(it) <= paragraphStart && builder.getSpanEnd(it) > paragraphStart }
|
|
52
|
+
if (hasFloor) continue
|
|
53
|
+
builder.setSpan(LinkPillLineHeightSpan(height), paragraphStart, paragraphEnd, spanFlags)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Applies [LineHeightSpan] to [start]..[end] but skips ranges occupied by
|
|
59
|
+
* block [ImageSpan]s (and their trailing '\n') and by [CodeBlockSpan]s —
|
|
60
|
+
* both of these apply their own font-metric adjustments that a fixed
|
|
61
|
+
* line height would override.
|
|
62
|
+
*/
|
|
63
|
+
fun applyLineHeightSkippingImages(
|
|
64
|
+
builder: SpannableStringBuilder,
|
|
65
|
+
start: Int,
|
|
66
|
+
end: Int,
|
|
67
|
+
lineHeight: Float,
|
|
68
|
+
spanFlags: Int = SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE,
|
|
69
|
+
) {
|
|
70
|
+
val blockImageRanges =
|
|
71
|
+
builder
|
|
72
|
+
.getSpans(start, end, ImageSpan::class.java)
|
|
73
|
+
.filter { !it.isInline }
|
|
74
|
+
.map { builder.getSpanStart(it) to builder.getSpanEnd(it) }
|
|
75
|
+
|
|
76
|
+
val codeBlockRanges =
|
|
77
|
+
builder
|
|
78
|
+
.getSpans(start, end, CodeBlockSpan::class.java)
|
|
79
|
+
.map { builder.getSpanStart(it) to builder.getSpanEnd(it) }
|
|
80
|
+
|
|
81
|
+
val excludedRanges = (blockImageRanges + codeBlockRanges).sortedBy { it.first }
|
|
82
|
+
|
|
83
|
+
var pos = start
|
|
84
|
+
for ((exStart, exEnd) in excludedRanges) {
|
|
85
|
+
if (pos < exStart) {
|
|
86
|
+
builder.setSpan(
|
|
87
|
+
createLineHeightSpan(lineHeight),
|
|
88
|
+
pos,
|
|
89
|
+
exStart,
|
|
90
|
+
spanFlags,
|
|
91
|
+
)
|
|
92
|
+
}
|
|
93
|
+
val skipEnd = if (exEnd < end && builder[exEnd] == '\n') exEnd + 1 else exEnd
|
|
94
|
+
pos = maxOf(pos, skipEnd)
|
|
95
|
+
}
|
|
96
|
+
if (pos < end) {
|
|
97
|
+
builder.setSpan(
|
|
98
|
+
createLineHeightSpan(lineHeight),
|
|
99
|
+
pos,
|
|
100
|
+
end,
|
|
101
|
+
spanFlags,
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
applyLinkPillLineHeight(builder, start, end, spanFlags)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
fun applyMarginTop(
|
|
108
|
+
builder: SpannableStringBuilder,
|
|
109
|
+
insertionPoint: Int,
|
|
110
|
+
marginTop: Float,
|
|
111
|
+
) {
|
|
112
|
+
if (marginTop <= 0) return
|
|
113
|
+
|
|
114
|
+
// Insert a newline character to act as a vertical spacer
|
|
115
|
+
builder.insert(insertionPoint, "\n")
|
|
116
|
+
|
|
117
|
+
// Apply MarginBottomSpan to the spacer character to create the gap before the content
|
|
118
|
+
builder.setSpan(
|
|
119
|
+
MarginBottomSpan(marginTop),
|
|
120
|
+
insertionPoint,
|
|
121
|
+
insertionPoint + 1,
|
|
122
|
+
SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE,
|
|
123
|
+
)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
fun applyMarginBottom(
|
|
127
|
+
builder: SpannableStringBuilder,
|
|
128
|
+
marginBottom: Float,
|
|
129
|
+
) {
|
|
130
|
+
val spacerStart = builder.length
|
|
131
|
+
builder.append("\n")
|
|
132
|
+
// Always create a MarginBottomSpan, even when marginBottom = 0.
|
|
133
|
+
// This ensures removeTrailingMargin can correctly identify the LAST element's
|
|
134
|
+
// margin value. Without a span on the last element, it would pick up a previous
|
|
135
|
+
// element's span (e.g. blockquote with marginBottom: 16) and use that wrong value.
|
|
136
|
+
builder.setSpan(
|
|
137
|
+
MarginBottomSpan(marginBottom),
|
|
138
|
+
spacerStart,
|
|
139
|
+
builder.length,
|
|
140
|
+
SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE,
|
|
141
|
+
)
|
|
142
|
+
}
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
package com.renderrichtext.utils.text.span
|
|
2
|
-
|
|
3
|
-
import android.text.SpannableString
|
|
4
|
-
import android.text.Spanned
|
|
5
|
-
|
|
6
|
-
const val SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE = SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* `SPAN_EXCLUSIVE_EXCLUSIVE` with the maximum span priority.
|
|
10
|
-
*
|
|
11
|
-
* Higher-priority spans are iterated — and therefore applied and drawn — first,
|
|
12
|
-
* so lower-priority spans over the same range override them. Use this for a
|
|
13
|
-
* block span set after its children that must not override the inline spans
|
|
14
|
-
* inside it (e.g. [HeadingSpan]), or for a container background that must sit
|
|
15
|
-
* under inline pill/chip backgrounds (e.g. [BlockquoteSpan]).
|
|
16
|
-
*/
|
|
17
|
-
const val SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE_PRIORITY =
|
|
18
|
-
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE or Spanned.SPAN_PRIORITY
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* `SPAN_EXCLUSIVE_EXCLUSIVE` with the maximum span priority, for a block-wide
|
|
22
|
-
* LineHeightSpan (e.g. a blockquote's uniform line height) that must be iterated
|
|
23
|
-
* BEFORE the per-block [MarginBottomSpan]s it overlaps. LineHeightSpans are
|
|
24
|
-
* applied in iteration order and higher priority iterates first, so this span
|
|
25
|
-
* sets the base line height and the lower-priority margin span then adds its gap
|
|
26
|
-
* on top instead of being normalized away. Without it a line-height pass applied
|
|
27
|
-
* after the margins (e.g. in BlockquoteTextRenderer.postProcess) would erase them
|
|
28
|
-
* and clip the first line's ascent.
|
|
29
|
-
*/
|
|
30
|
-
const val SPAN_FLAGS_LINE_HEIGHT_PRIORITY =
|
|
31
|
-
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE or Spanned.SPAN_PRIORITY
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* `SPAN_EXCLUSIVE_EXCLUSIVE` with a span priority just above the default.
|
|
35
|
-
*
|
|
36
|
-
* List item spans are set after the item's children, so at the default
|
|
37
|
-
* priority they apply after inline spans such as `CodeSpan` and replace their
|
|
38
|
-
* font and size. This priority applies them first, while staying below
|
|
39
|
-
* [SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE_PRIORITY] so a blockquote still draws its
|
|
40
|
-
* leading margin before a list's.
|
|
41
|
-
*/
|
|
42
|
-
const val SPAN_FLAGS_LIST_ITEM =
|
|
43
|
-
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE or (1 shl Spanned.SPAN_PRIORITY_SHIFT)
|
|
1
|
+
package com.renderrichtext.utils.text.span
|
|
2
|
+
|
|
3
|
+
import android.text.SpannableString
|
|
4
|
+
import android.text.Spanned
|
|
5
|
+
|
|
6
|
+
const val SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE = SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* `SPAN_EXCLUSIVE_EXCLUSIVE` with the maximum span priority.
|
|
10
|
+
*
|
|
11
|
+
* Higher-priority spans are iterated — and therefore applied and drawn — first,
|
|
12
|
+
* so lower-priority spans over the same range override them. Use this for a
|
|
13
|
+
* block span set after its children that must not override the inline spans
|
|
14
|
+
* inside it (e.g. [HeadingSpan]), or for a container background that must sit
|
|
15
|
+
* under inline pill/chip backgrounds (e.g. [BlockquoteSpan]).
|
|
16
|
+
*/
|
|
17
|
+
const val SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE_PRIORITY =
|
|
18
|
+
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE or Spanned.SPAN_PRIORITY
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* `SPAN_EXCLUSIVE_EXCLUSIVE` with the maximum span priority, for a block-wide
|
|
22
|
+
* LineHeightSpan (e.g. a blockquote's uniform line height) that must be iterated
|
|
23
|
+
* BEFORE the per-block [MarginBottomSpan]s it overlaps. LineHeightSpans are
|
|
24
|
+
* applied in iteration order and higher priority iterates first, so this span
|
|
25
|
+
* sets the base line height and the lower-priority margin span then adds its gap
|
|
26
|
+
* on top instead of being normalized away. Without it a line-height pass applied
|
|
27
|
+
* after the margins (e.g. in BlockquoteTextRenderer.postProcess) would erase them
|
|
28
|
+
* and clip the first line's ascent.
|
|
29
|
+
*/
|
|
30
|
+
const val SPAN_FLAGS_LINE_HEIGHT_PRIORITY =
|
|
31
|
+
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE or Spanned.SPAN_PRIORITY
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* `SPAN_EXCLUSIVE_EXCLUSIVE` with a span priority just above the default.
|
|
35
|
+
*
|
|
36
|
+
* List item spans are set after the item's children, so at the default
|
|
37
|
+
* priority they apply after inline spans such as `CodeSpan` and replace their
|
|
38
|
+
* font and size. This priority applies them first, while staying below
|
|
39
|
+
* [SPAN_FLAGS_EXCLUSIVE_EXCLUSIVE_PRIORITY] so a blockquote still draws its
|
|
40
|
+
* leading margin before a list's.
|
|
41
|
+
*/
|
|
42
|
+
const val SPAN_FLAGS_LIST_ITEM =
|
|
43
|
+
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE or (1 shl Spanned.SPAN_PRIORITY_SHIFT)
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
package com.renderrichtext.utils.text.span
|
|
2
|
-
|
|
3
|
-
import android.text.Spanned
|
|
4
|
-
import com.renderrichtext.spans.ImageSpan
|
|
5
|
-
import com.renderrichtext.spans.LinkPillSpan
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Primes every span whose size depends on the layout width (pills, images). Call it
|
|
9
|
-
* before building any layout over [text]. [includeImages] is off for a visible text
|
|
10
|
-
* view, whose image spans size themselves from the view they are registered with.
|
|
11
|
-
*
|
|
12
|
-
* Returns true when a pill's width limit changed, i.e. an existing layout is stale.
|
|
13
|
-
*/
|
|
14
|
-
fun prepareWidthAwareSpans(
|
|
15
|
-
text: CharSequence?,
|
|
16
|
-
widthPx: Int,
|
|
17
|
-
includeImages: Boolean = true,
|
|
18
|
-
): Boolean {
|
|
19
|
-
val spanned = text as? Spanned ?: return false
|
|
20
|
-
// widthPx == 1 is the coerceAtLeast(1) fallback for a not-yet-measured view. Priming
|
|
21
|
-
// with it would squeeze pills on screen to a sliver until the next real measure.
|
|
22
|
-
if (widthPx <= 1) return false
|
|
23
|
-
val pillsChanged = LinkPillSpan.prepareForMeasurement(spanned, widthPx)
|
|
24
|
-
if (includeImages) {
|
|
25
|
-
spanned
|
|
26
|
-
.getSpans(0, spanned.length, ImageSpan::class.java)
|
|
27
|
-
.forEach { it.prepareForMeasurement(spanned, widthPx) }
|
|
28
|
-
}
|
|
29
|
-
return pillsChanged
|
|
30
|
-
}
|
|
1
|
+
package com.renderrichtext.utils.text.span
|
|
2
|
+
|
|
3
|
+
import android.text.Spanned
|
|
4
|
+
import com.renderrichtext.spans.ImageSpan
|
|
5
|
+
import com.renderrichtext.spans.LinkPillSpan
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Primes every span whose size depends on the layout width (pills, images). Call it
|
|
9
|
+
* before building any layout over [text]. [includeImages] is off for a visible text
|
|
10
|
+
* view, whose image spans size themselves from the view they are registered with.
|
|
11
|
+
*
|
|
12
|
+
* Returns true when a pill's width limit changed, i.e. an existing layout is stale.
|
|
13
|
+
*/
|
|
14
|
+
fun prepareWidthAwareSpans(
|
|
15
|
+
text: CharSequence?,
|
|
16
|
+
widthPx: Int,
|
|
17
|
+
includeImages: Boolean = true,
|
|
18
|
+
): Boolean {
|
|
19
|
+
val spanned = text as? Spanned ?: return false
|
|
20
|
+
// widthPx == 1 is the coerceAtLeast(1) fallback for a not-yet-measured view. Priming
|
|
21
|
+
// with it would squeeze pills on screen to a sliver until the next real measure.
|
|
22
|
+
if (widthPx <= 1) return false
|
|
23
|
+
val pillsChanged = LinkPillSpan.prepareForMeasurement(spanned, widthPx)
|
|
24
|
+
if (includeImages) {
|
|
25
|
+
spanned
|
|
26
|
+
.getSpans(0, spanned.length, ImageSpan::class.java)
|
|
27
|
+
.forEach { it.prepareForMeasurement(spanned, widthPx) }
|
|
28
|
+
}
|
|
29
|
+
return pillsChanged
|
|
30
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
package com.renderrichtext.utils.text.view
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Implemented by the commonmark host view so [LinkLongPressMovementMethod] can
|
|
5
|
-
* gate and dispatch taps landing on a code block span. GFM uses a separate
|
|
6
|
-
* CodeBlockContainerView, so its host walk resolves to none.
|
|
7
|
-
*/
|
|
8
|
-
interface CodeBlockPressHost {
|
|
9
|
-
val codeBlockPressEnabled: Boolean
|
|
10
|
-
|
|
11
|
-
fun emitOnCodeBlockPress(
|
|
12
|
-
code: String,
|
|
13
|
-
language: String,
|
|
14
|
-
)
|
|
15
|
-
}
|
|
1
|
+
package com.renderrichtext.utils.text.view
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Implemented by the commonmark host view so [LinkLongPressMovementMethod] can
|
|
5
|
+
* gate and dispatch taps landing on a code block span. GFM uses a separate
|
|
6
|
+
* CodeBlockContainerView, so its host walk resolves to none.
|
|
7
|
+
*/
|
|
8
|
+
interface CodeBlockPressHost {
|
|
9
|
+
val codeBlockPressEnabled: Boolean
|
|
10
|
+
|
|
11
|
+
fun emitOnCodeBlockPress(
|
|
12
|
+
code: String,
|
|
13
|
+
language: String,
|
|
14
|
+
)
|
|
15
|
+
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
package com.renderrichtext.utils.text.view
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Implemented by the React-tagged host views (EnrichedTiptapText and the GFM
|
|
5
|
-
* EnrichedTiptap container) so [LinkLongPressMovementMethod] can gate and
|
|
6
|
-
* dispatch image taps without knowing which flavor owns the tapped TextView.
|
|
7
|
-
*
|
|
8
|
-
* In GFM the tapped TextView is an internal segment child, so the movement
|
|
9
|
-
* method walks up to the nearest host - the same routing ImageSpan uses for its
|
|
10
|
-
* box-height notifications.
|
|
11
|
-
*/
|
|
12
|
-
interface ImagePressHost {
|
|
13
|
-
val imagePressEnabled: Boolean
|
|
14
|
-
|
|
15
|
-
fun emitOnImagePress(
|
|
16
|
-
url: String,
|
|
17
|
-
altText: String,
|
|
18
|
-
)
|
|
19
|
-
}
|
|
1
|
+
package com.renderrichtext.utils.text.view
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Implemented by the React-tagged host views (EnrichedTiptapText and the GFM
|
|
5
|
+
* EnrichedTiptap container) so [LinkLongPressMovementMethod] can gate and
|
|
6
|
+
* dispatch image taps without knowing which flavor owns the tapped TextView.
|
|
7
|
+
*
|
|
8
|
+
* In GFM the tapped TextView is an internal segment child, so the movement
|
|
9
|
+
* method walks up to the nearest host - the same routing ImageSpan uses for its
|
|
10
|
+
* box-height notifications.
|
|
11
|
+
*/
|
|
12
|
+
interface ImagePressHost {
|
|
13
|
+
val imagePressEnabled: Boolean
|
|
14
|
+
|
|
15
|
+
fun emitOnImagePress(
|
|
16
|
+
url: String,
|
|
17
|
+
altText: String,
|
|
18
|
+
)
|
|
19
|
+
}
|