@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,12 +1,12 @@
|
|
|
1
|
-
package com.renderrichtext.spans
|
|
2
|
-
|
|
3
|
-
import android.text.TextPaint
|
|
4
|
-
import android.text.style.CharacterStyle
|
|
5
|
-
|
|
6
|
-
class StrikethroughSpan(
|
|
7
|
-
private val strikethroughColor: Int,
|
|
8
|
-
) : CharacterStyle() {
|
|
9
|
-
override fun updateDrawState(tp: TextPaint) {
|
|
10
|
-
tp.isStrikeThruText = true
|
|
11
|
-
}
|
|
12
|
-
}
|
|
1
|
+
package com.renderrichtext.spans
|
|
2
|
+
|
|
3
|
+
import android.text.TextPaint
|
|
4
|
+
import android.text.style.CharacterStyle
|
|
5
|
+
|
|
6
|
+
class StrikethroughSpan(
|
|
7
|
+
private val strikethroughColor: Int,
|
|
8
|
+
) : CharacterStyle() {
|
|
9
|
+
override fun updateDrawState(tp: TextPaint) {
|
|
10
|
+
tp.isStrikeThruText = true
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
package com.renderrichtext.spans
|
|
2
|
-
|
|
3
|
-
import android.graphics.Typeface
|
|
4
|
-
import android.text.TextPaint
|
|
5
|
-
import android.text.style.MetricAffectingSpan
|
|
6
|
-
import com.renderrichtext.renderer.BlockStyle
|
|
7
|
-
import com.renderrichtext.renderer.SpanStyleCache
|
|
8
|
-
import com.renderrichtext.utils.text.extensions.applyColorPreserving
|
|
9
|
-
|
|
10
|
-
class StrongSpan(
|
|
11
|
-
private val styleCache: SpanStyleCache,
|
|
12
|
-
private val blockStyle: BlockStyle,
|
|
13
|
-
) : MetricAffectingSpan() {
|
|
14
|
-
private val strongColor = styleCache.getStrongColorFor(blockStyle.color)
|
|
15
|
-
|
|
16
|
-
override fun updateDrawState(tp: TextPaint) {
|
|
17
|
-
applyStrongStyle(tp)
|
|
18
|
-
tp.applyColorPreserving(strongColor, *styleCache.colorsToPreserve)
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
override fun updateMeasureState(tp: TextPaint) {
|
|
22
|
-
applyStrongStyle(tp)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
private fun applyStrongStyle(tp: TextPaint) {
|
|
26
|
-
tp.textSize = blockStyle.fontSize
|
|
27
|
-
|
|
28
|
-
val currentTypeface = tp.typeface ?: Typeface.DEFAULT
|
|
29
|
-
val isItalic = (currentTypeface.style) and Typeface.ITALIC != 0
|
|
30
|
-
val style = if (isItalic) Typeface.BOLD_ITALIC else Typeface.BOLD
|
|
31
|
-
tp.typeface =
|
|
32
|
-
if (styleCache.strongFontFamily.isNotEmpty()) {
|
|
33
|
-
val resolvedStyle = if (styleCache.strongFontWeight == "normal") Typeface.NORMAL else style
|
|
34
|
-
styleCache.getTypeface(styleCache.strongFontFamily, resolvedStyle)
|
|
35
|
-
} else {
|
|
36
|
-
Typeface.create(currentTypeface, style)
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
1
|
+
package com.renderrichtext.spans
|
|
2
|
+
|
|
3
|
+
import android.graphics.Typeface
|
|
4
|
+
import android.text.TextPaint
|
|
5
|
+
import android.text.style.MetricAffectingSpan
|
|
6
|
+
import com.renderrichtext.renderer.BlockStyle
|
|
7
|
+
import com.renderrichtext.renderer.SpanStyleCache
|
|
8
|
+
import com.renderrichtext.utils.text.extensions.applyColorPreserving
|
|
9
|
+
|
|
10
|
+
class StrongSpan(
|
|
11
|
+
private val styleCache: SpanStyleCache,
|
|
12
|
+
private val blockStyle: BlockStyle,
|
|
13
|
+
) : MetricAffectingSpan() {
|
|
14
|
+
private val strongColor = styleCache.getStrongColorFor(blockStyle.color)
|
|
15
|
+
|
|
16
|
+
override fun updateDrawState(tp: TextPaint) {
|
|
17
|
+
applyStrongStyle(tp)
|
|
18
|
+
tp.applyColorPreserving(strongColor, *styleCache.colorsToPreserve)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
override fun updateMeasureState(tp: TextPaint) {
|
|
22
|
+
applyStrongStyle(tp)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
private fun applyStrongStyle(tp: TextPaint) {
|
|
26
|
+
tp.textSize = blockStyle.fontSize
|
|
27
|
+
|
|
28
|
+
val currentTypeface = tp.typeface ?: Typeface.DEFAULT
|
|
29
|
+
val isItalic = (currentTypeface.style) and Typeface.ITALIC != 0
|
|
30
|
+
val style = if (isItalic) Typeface.BOLD_ITALIC else Typeface.BOLD
|
|
31
|
+
tp.typeface =
|
|
32
|
+
if (styleCache.strongFontFamily.isNotEmpty()) {
|
|
33
|
+
val resolvedStyle = if (styleCache.strongFontWeight == "normal") Typeface.NORMAL else style
|
|
34
|
+
styleCache.getTypeface(styleCache.strongFontFamily, resolvedStyle)
|
|
35
|
+
} else {
|
|
36
|
+
Typeface.create(currentTypeface, style)
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -1,143 +1,143 @@
|
|
|
1
|
-
package com.renderrichtext.spans
|
|
2
|
-
|
|
3
|
-
import android.content.Context
|
|
4
|
-
import android.graphics.Canvas
|
|
5
|
-
import android.graphics.Paint
|
|
6
|
-
import android.graphics.Path
|
|
7
|
-
import android.graphics.RectF
|
|
8
|
-
import android.text.Layout
|
|
9
|
-
import com.renderrichtext.renderer.BlockStyle
|
|
10
|
-
import com.renderrichtext.renderer.SpanStyleCache
|
|
11
|
-
import com.renderrichtext.styles.ListStyle
|
|
12
|
-
import com.renderrichtext.styles.TaskListStyle
|
|
13
|
-
|
|
14
|
-
class TaskListSpan(
|
|
15
|
-
private val taskStyle: TaskListStyle,
|
|
16
|
-
private val listStyle: ListStyle,
|
|
17
|
-
depth: Int,
|
|
18
|
-
context: Context,
|
|
19
|
-
styleCache: SpanStyleCache,
|
|
20
|
-
val taskIndex: Int,
|
|
21
|
-
val isChecked: Boolean,
|
|
22
|
-
drawsMarker: Boolean = true,
|
|
23
|
-
ancestorMarkerOffset: Float = 0f,
|
|
24
|
-
override val markerExtraWidth: Float = 0f,
|
|
25
|
-
parentMarkerWidth: Float? = null,
|
|
26
|
-
) : BaseListSpan(
|
|
27
|
-
depth = depth,
|
|
28
|
-
context = context,
|
|
29
|
-
styleCache = styleCache,
|
|
30
|
-
blockStyle =
|
|
31
|
-
BlockStyle(
|
|
32
|
-
fontSize = listStyle.fontSize,
|
|
33
|
-
fontFamily = listStyle.fontFamily,
|
|
34
|
-
fontWeight = listStyle.fontWeight,
|
|
35
|
-
color = listStyle.color,
|
|
36
|
-
),
|
|
37
|
-
marginLeft = listStyle.marginLeft,
|
|
38
|
-
gapWidth = listStyle.gapWidth,
|
|
39
|
-
drawsMarker = drawsMarker,
|
|
40
|
-
ancestorMarkerOffset = ancestorMarkerOffset,
|
|
41
|
-
parentMarkerWidth = parentMarkerWidth,
|
|
42
|
-
) {
|
|
43
|
-
private val checkboxSize = taskStyle.checkboxSize
|
|
44
|
-
private val checkboxColumnWidth = listStyle.effectiveMarkerWidth(checkboxSize)
|
|
45
|
-
private val markerColumnWidth = checkboxColumnWidth + markerExtraWidth
|
|
46
|
-
private val cornerRadius = taskStyle.checkboxBorderRadius
|
|
47
|
-
private val rect = RectF()
|
|
48
|
-
private val checkPath = Path()
|
|
49
|
-
|
|
50
|
-
companion object {
|
|
51
|
-
private const val CAP_HEIGHT_RATIO = 0.72f
|
|
52
|
-
private const val HALF_DIVISOR = 2f
|
|
53
|
-
private const val CHECKMARK_MIN_STROKE_WIDTH = 1.5f
|
|
54
|
-
private const val CHECKMARK_STROKE_RATIO = 0.12f
|
|
55
|
-
private const val CHECKMARK_INSET_RATIO = 0.22f
|
|
56
|
-
private const val CHECKMARK_MID_OFFSET_RATIO = 0.05f
|
|
57
|
-
private const val BORDER_MIN_STROKE_WIDTH = 1f
|
|
58
|
-
private const val BORDER_STROKE_RATIO = 0.09f
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
private val boxPaint =
|
|
62
|
-
Paint(Paint.ANTI_ALIAS_FLAG).apply {
|
|
63
|
-
strokeCap = Paint.Cap.ROUND
|
|
64
|
-
strokeJoin = Paint.Join.ROUND
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
override fun getMarkerWidth(): Float = markerColumnWidth
|
|
68
|
-
|
|
69
|
-
override val baselineMarkerWidth: Float get() = checkboxColumnWidth
|
|
70
|
-
|
|
71
|
-
override fun drawMarker(
|
|
72
|
-
canvas: Canvas,
|
|
73
|
-
paint: Paint,
|
|
74
|
-
x: Int,
|
|
75
|
-
dir: Int,
|
|
76
|
-
top: Int,
|
|
77
|
-
baseline: Int,
|
|
78
|
-
bottom: Int,
|
|
79
|
-
layout: Layout?,
|
|
80
|
-
start: Int,
|
|
81
|
-
) {
|
|
82
|
-
val capHeight = -markerFontMetrics.ascent * CAP_HEIGHT_RATIO
|
|
83
|
-
val centerY = baseline - capHeight / HALF_DIVISOR
|
|
84
|
-
// Right-align the checkbox inside the reserved marker column so it hugs
|
|
85
|
-
// the gap before the text. At the default (markerColumnWidth ==
|
|
86
|
-
// checkboxSize) this is identical to the previous flush-left layout.
|
|
87
|
-
val centerX = x + (depth * marginLeft + ancestorMarkerOffset + markerColumnWidth - checkboxSize / HALF_DIVISOR) * dir
|
|
88
|
-
val half = checkboxSize / HALF_DIVISOR
|
|
89
|
-
rect.set(centerX - half, centerY - half, centerX + half, centerY + half)
|
|
90
|
-
|
|
91
|
-
if (isChecked) {
|
|
92
|
-
drawChecked(canvas, centerY)
|
|
93
|
-
} else {
|
|
94
|
-
drawUnchecked(canvas)
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
private fun drawChecked(
|
|
99
|
-
canvas: Canvas,
|
|
100
|
-
centerY: Float,
|
|
101
|
-
) {
|
|
102
|
-
boxPaint.apply {
|
|
103
|
-
style = Paint.Style.FILL
|
|
104
|
-
color = taskStyle.checkedColor
|
|
105
|
-
}
|
|
106
|
-
canvas.drawRoundRect(rect, cornerRadius, cornerRadius, boxPaint)
|
|
107
|
-
|
|
108
|
-
boxPaint.apply {
|
|
109
|
-
style = Paint.Style.STROKE
|
|
110
|
-
color = taskStyle.checkmarkColor
|
|
111
|
-
strokeWidth = maxOf(CHECKMARK_MIN_STROKE_WIDTH, checkboxSize * CHECKMARK_STROKE_RATIO)
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
val inset = checkboxSize * CHECKMARK_INSET_RATIO
|
|
115
|
-
val midOffset = checkboxSize * CHECKMARK_MID_OFFSET_RATIO
|
|
116
|
-
|
|
117
|
-
checkPath.run {
|
|
118
|
-
reset()
|
|
119
|
-
moveTo(rect.left + inset, centerY)
|
|
120
|
-
lineTo(rect.centerX() - midOffset, rect.bottom - inset)
|
|
121
|
-
lineTo(rect.right - inset, rect.top + inset)
|
|
122
|
-
}
|
|
123
|
-
canvas.drawPath(checkPath, boxPaint)
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
private fun drawUnchecked(canvas: Canvas) {
|
|
127
|
-
boxPaint.apply {
|
|
128
|
-
style = Paint.Style.STROKE
|
|
129
|
-
color = taskStyle.borderColor
|
|
130
|
-
strokeWidth = maxOf(BORDER_MIN_STROKE_WIDTH, checkboxSize * BORDER_STROKE_RATIO)
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
val halfStroke = boxPaint.strokeWidth / 2f
|
|
134
|
-
val insetRect =
|
|
135
|
-
RectF(
|
|
136
|
-
rect.left + halfStroke,
|
|
137
|
-
rect.top + halfStroke,
|
|
138
|
-
rect.right - halfStroke,
|
|
139
|
-
rect.bottom - halfStroke,
|
|
140
|
-
)
|
|
141
|
-
canvas.drawRoundRect(insetRect, cornerRadius, cornerRadius, boxPaint)
|
|
142
|
-
}
|
|
143
|
-
}
|
|
1
|
+
package com.renderrichtext.spans
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.graphics.Canvas
|
|
5
|
+
import android.graphics.Paint
|
|
6
|
+
import android.graphics.Path
|
|
7
|
+
import android.graphics.RectF
|
|
8
|
+
import android.text.Layout
|
|
9
|
+
import com.renderrichtext.renderer.BlockStyle
|
|
10
|
+
import com.renderrichtext.renderer.SpanStyleCache
|
|
11
|
+
import com.renderrichtext.styles.ListStyle
|
|
12
|
+
import com.renderrichtext.styles.TaskListStyle
|
|
13
|
+
|
|
14
|
+
class TaskListSpan(
|
|
15
|
+
private val taskStyle: TaskListStyle,
|
|
16
|
+
private val listStyle: ListStyle,
|
|
17
|
+
depth: Int,
|
|
18
|
+
context: Context,
|
|
19
|
+
styleCache: SpanStyleCache,
|
|
20
|
+
val taskIndex: Int,
|
|
21
|
+
val isChecked: Boolean,
|
|
22
|
+
drawsMarker: Boolean = true,
|
|
23
|
+
ancestorMarkerOffset: Float = 0f,
|
|
24
|
+
override val markerExtraWidth: Float = 0f,
|
|
25
|
+
parentMarkerWidth: Float? = null,
|
|
26
|
+
) : BaseListSpan(
|
|
27
|
+
depth = depth,
|
|
28
|
+
context = context,
|
|
29
|
+
styleCache = styleCache,
|
|
30
|
+
blockStyle =
|
|
31
|
+
BlockStyle(
|
|
32
|
+
fontSize = listStyle.fontSize,
|
|
33
|
+
fontFamily = listStyle.fontFamily,
|
|
34
|
+
fontWeight = listStyle.fontWeight,
|
|
35
|
+
color = listStyle.color,
|
|
36
|
+
),
|
|
37
|
+
marginLeft = listStyle.marginLeft,
|
|
38
|
+
gapWidth = listStyle.gapWidth,
|
|
39
|
+
drawsMarker = drawsMarker,
|
|
40
|
+
ancestorMarkerOffset = ancestorMarkerOffset,
|
|
41
|
+
parentMarkerWidth = parentMarkerWidth,
|
|
42
|
+
) {
|
|
43
|
+
private val checkboxSize = taskStyle.checkboxSize
|
|
44
|
+
private val checkboxColumnWidth = listStyle.effectiveMarkerWidth(checkboxSize)
|
|
45
|
+
private val markerColumnWidth = checkboxColumnWidth + markerExtraWidth
|
|
46
|
+
private val cornerRadius = taskStyle.checkboxBorderRadius
|
|
47
|
+
private val rect = RectF()
|
|
48
|
+
private val checkPath = Path()
|
|
49
|
+
|
|
50
|
+
companion object {
|
|
51
|
+
private const val CAP_HEIGHT_RATIO = 0.72f
|
|
52
|
+
private const val HALF_DIVISOR = 2f
|
|
53
|
+
private const val CHECKMARK_MIN_STROKE_WIDTH = 1.5f
|
|
54
|
+
private const val CHECKMARK_STROKE_RATIO = 0.12f
|
|
55
|
+
private const val CHECKMARK_INSET_RATIO = 0.22f
|
|
56
|
+
private const val CHECKMARK_MID_OFFSET_RATIO = 0.05f
|
|
57
|
+
private const val BORDER_MIN_STROKE_WIDTH = 1f
|
|
58
|
+
private const val BORDER_STROKE_RATIO = 0.09f
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
private val boxPaint =
|
|
62
|
+
Paint(Paint.ANTI_ALIAS_FLAG).apply {
|
|
63
|
+
strokeCap = Paint.Cap.ROUND
|
|
64
|
+
strokeJoin = Paint.Join.ROUND
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
override fun getMarkerWidth(): Float = markerColumnWidth
|
|
68
|
+
|
|
69
|
+
override val baselineMarkerWidth: Float get() = checkboxColumnWidth
|
|
70
|
+
|
|
71
|
+
override fun drawMarker(
|
|
72
|
+
canvas: Canvas,
|
|
73
|
+
paint: Paint,
|
|
74
|
+
x: Int,
|
|
75
|
+
dir: Int,
|
|
76
|
+
top: Int,
|
|
77
|
+
baseline: Int,
|
|
78
|
+
bottom: Int,
|
|
79
|
+
layout: Layout?,
|
|
80
|
+
start: Int,
|
|
81
|
+
) {
|
|
82
|
+
val capHeight = -markerFontMetrics.ascent * CAP_HEIGHT_RATIO
|
|
83
|
+
val centerY = baseline - capHeight / HALF_DIVISOR
|
|
84
|
+
// Right-align the checkbox inside the reserved marker column so it hugs
|
|
85
|
+
// the gap before the text. At the default (markerColumnWidth ==
|
|
86
|
+
// checkboxSize) this is identical to the previous flush-left layout.
|
|
87
|
+
val centerX = x + (depth * marginLeft + ancestorMarkerOffset + markerColumnWidth - checkboxSize / HALF_DIVISOR) * dir
|
|
88
|
+
val half = checkboxSize / HALF_DIVISOR
|
|
89
|
+
rect.set(centerX - half, centerY - half, centerX + half, centerY + half)
|
|
90
|
+
|
|
91
|
+
if (isChecked) {
|
|
92
|
+
drawChecked(canvas, centerY)
|
|
93
|
+
} else {
|
|
94
|
+
drawUnchecked(canvas)
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private fun drawChecked(
|
|
99
|
+
canvas: Canvas,
|
|
100
|
+
centerY: Float,
|
|
101
|
+
) {
|
|
102
|
+
boxPaint.apply {
|
|
103
|
+
style = Paint.Style.FILL
|
|
104
|
+
color = taskStyle.checkedColor
|
|
105
|
+
}
|
|
106
|
+
canvas.drawRoundRect(rect, cornerRadius, cornerRadius, boxPaint)
|
|
107
|
+
|
|
108
|
+
boxPaint.apply {
|
|
109
|
+
style = Paint.Style.STROKE
|
|
110
|
+
color = taskStyle.checkmarkColor
|
|
111
|
+
strokeWidth = maxOf(CHECKMARK_MIN_STROKE_WIDTH, checkboxSize * CHECKMARK_STROKE_RATIO)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
val inset = checkboxSize * CHECKMARK_INSET_RATIO
|
|
115
|
+
val midOffset = checkboxSize * CHECKMARK_MID_OFFSET_RATIO
|
|
116
|
+
|
|
117
|
+
checkPath.run {
|
|
118
|
+
reset()
|
|
119
|
+
moveTo(rect.left + inset, centerY)
|
|
120
|
+
lineTo(rect.centerX() - midOffset, rect.bottom - inset)
|
|
121
|
+
lineTo(rect.right - inset, rect.top + inset)
|
|
122
|
+
}
|
|
123
|
+
canvas.drawPath(checkPath, boxPaint)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
private fun drawUnchecked(canvas: Canvas) {
|
|
127
|
+
boxPaint.apply {
|
|
128
|
+
style = Paint.Style.STROKE
|
|
129
|
+
color = taskStyle.borderColor
|
|
130
|
+
strokeWidth = maxOf(BORDER_MIN_STROKE_WIDTH, checkboxSize * BORDER_STROKE_RATIO)
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
val halfStroke = boxPaint.strokeWidth / 2f
|
|
134
|
+
val insetRect =
|
|
135
|
+
RectF(
|
|
136
|
+
rect.left + halfStroke,
|
|
137
|
+
rect.top + halfStroke,
|
|
138
|
+
rect.right - halfStroke,
|
|
139
|
+
rect.bottom - halfStroke,
|
|
140
|
+
)
|
|
141
|
+
canvas.drawRoundRect(insetRect, cornerRadius, cornerRadius, boxPaint)
|
|
142
|
+
}
|
|
143
|
+
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
package com.renderrichtext.spans
|
|
2
|
-
|
|
3
|
-
import android.content.Context
|
|
4
|
-
import android.text.TextPaint
|
|
5
|
-
import android.text.style.MetricAffectingSpan
|
|
6
|
-
import com.renderrichtext.renderer.BlockStyle
|
|
7
|
-
import com.renderrichtext.utils.text.extensions.applyBlockStyleFont
|
|
8
|
-
|
|
9
|
-
class TextSpan(
|
|
10
|
-
private val blockStyle: BlockStyle,
|
|
11
|
-
private val context: Context,
|
|
12
|
-
) : MetricAffectingSpan() {
|
|
13
|
-
override fun updateDrawState(tp: TextPaint) {
|
|
14
|
-
applyBlockStyle(tp)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
override fun updateMeasureState(tp: TextPaint) {
|
|
18
|
-
applyBlockStyle(tp)
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
private fun applyBlockStyle(tp: TextPaint) {
|
|
22
|
-
tp.textSize = blockStyle.fontSize
|
|
23
|
-
tp.color = blockStyle.color
|
|
24
|
-
tp.applyBlockStyleFont(blockStyle, context)
|
|
25
|
-
}
|
|
26
|
-
}
|
|
1
|
+
package com.renderrichtext.spans
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.text.TextPaint
|
|
5
|
+
import android.text.style.MetricAffectingSpan
|
|
6
|
+
import com.renderrichtext.renderer.BlockStyle
|
|
7
|
+
import com.renderrichtext.utils.text.extensions.applyBlockStyleFont
|
|
8
|
+
|
|
9
|
+
class TextSpan(
|
|
10
|
+
private val blockStyle: BlockStyle,
|
|
11
|
+
private val context: Context,
|
|
12
|
+
) : MetricAffectingSpan() {
|
|
13
|
+
override fun updateDrawState(tp: TextPaint) {
|
|
14
|
+
applyBlockStyle(tp)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
override fun updateMeasureState(tp: TextPaint) {
|
|
18
|
+
applyBlockStyle(tp)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
private fun applyBlockStyle(tp: TextPaint) {
|
|
22
|
+
tp.textSize = blockStyle.fontSize
|
|
23
|
+
tp.color = blockStyle.color
|
|
24
|
+
tp.applyBlockStyleFont(blockStyle, context)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
package com.renderrichtext.spans
|
|
2
|
-
|
|
3
|
-
import android.graphics.Canvas
|
|
4
|
-
import android.graphics.Paint
|
|
5
|
-
import android.text.style.ReplacementSpan
|
|
6
|
-
|
|
7
|
-
class ThematicBreakSpan(
|
|
8
|
-
private val lineColor: Int,
|
|
9
|
-
private val lineHeight: Float,
|
|
10
|
-
private val marginTop: Float,
|
|
11
|
-
private val marginBottom: Float,
|
|
12
|
-
) : ReplacementSpan() {
|
|
13
|
-
override fun getSize(
|
|
14
|
-
paint: Paint,
|
|
15
|
-
text: CharSequence?,
|
|
16
|
-
start: Int,
|
|
17
|
-
end: Int,
|
|
18
|
-
fm: Paint.FontMetricsInt?,
|
|
19
|
-
): Int {
|
|
20
|
-
val totalHeight = (marginTop + lineHeight + marginBottom).toInt()
|
|
21
|
-
|
|
22
|
-
fm?.apply {
|
|
23
|
-
ascent = -totalHeight
|
|
24
|
-
top = -totalHeight
|
|
25
|
-
descent = 0
|
|
26
|
-
bottom = 0
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return 0
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
override fun draw(
|
|
33
|
-
canvas: Canvas,
|
|
34
|
-
text: CharSequence?,
|
|
35
|
-
start: Int,
|
|
36
|
-
end: Int,
|
|
37
|
-
x: Float,
|
|
38
|
-
top: Int,
|
|
39
|
-
y: Int,
|
|
40
|
-
bottom: Int,
|
|
41
|
-
paint: Paint,
|
|
42
|
-
) {
|
|
43
|
-
paint.withStyle(lineColor, lineHeight) {
|
|
44
|
-
val lineY = top + marginTop + (lineHeight / 2f)
|
|
45
|
-
|
|
46
|
-
canvas.drawLine(0f, lineY, canvas.width.toFloat(), lineY, paint)
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
private inline fun Paint.withStyle(
|
|
51
|
-
color: Int,
|
|
52
|
-
width: Float,
|
|
53
|
-
action: () -> Unit,
|
|
54
|
-
) {
|
|
55
|
-
val oldColor = this.color
|
|
56
|
-
val oldWidth = this.strokeWidth
|
|
57
|
-
val oldStyle = this.style
|
|
58
|
-
|
|
59
|
-
this.color = color
|
|
60
|
-
this.strokeWidth = width
|
|
61
|
-
this.style = Paint.Style.STROKE
|
|
62
|
-
|
|
63
|
-
action()
|
|
64
|
-
|
|
65
|
-
this.color = oldColor
|
|
66
|
-
this.strokeWidth = oldWidth
|
|
67
|
-
this.style = oldStyle
|
|
68
|
-
}
|
|
69
|
-
}
|
|
1
|
+
package com.renderrichtext.spans
|
|
2
|
+
|
|
3
|
+
import android.graphics.Canvas
|
|
4
|
+
import android.graphics.Paint
|
|
5
|
+
import android.text.style.ReplacementSpan
|
|
6
|
+
|
|
7
|
+
class ThematicBreakSpan(
|
|
8
|
+
private val lineColor: Int,
|
|
9
|
+
private val lineHeight: Float,
|
|
10
|
+
private val marginTop: Float,
|
|
11
|
+
private val marginBottom: Float,
|
|
12
|
+
) : ReplacementSpan() {
|
|
13
|
+
override fun getSize(
|
|
14
|
+
paint: Paint,
|
|
15
|
+
text: CharSequence?,
|
|
16
|
+
start: Int,
|
|
17
|
+
end: Int,
|
|
18
|
+
fm: Paint.FontMetricsInt?,
|
|
19
|
+
): Int {
|
|
20
|
+
val totalHeight = (marginTop + lineHeight + marginBottom).toInt()
|
|
21
|
+
|
|
22
|
+
fm?.apply {
|
|
23
|
+
ascent = -totalHeight
|
|
24
|
+
top = -totalHeight
|
|
25
|
+
descent = 0
|
|
26
|
+
bottom = 0
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return 0
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
override fun draw(
|
|
33
|
+
canvas: Canvas,
|
|
34
|
+
text: CharSequence?,
|
|
35
|
+
start: Int,
|
|
36
|
+
end: Int,
|
|
37
|
+
x: Float,
|
|
38
|
+
top: Int,
|
|
39
|
+
y: Int,
|
|
40
|
+
bottom: Int,
|
|
41
|
+
paint: Paint,
|
|
42
|
+
) {
|
|
43
|
+
paint.withStyle(lineColor, lineHeight) {
|
|
44
|
+
val lineY = top + marginTop + (lineHeight / 2f)
|
|
45
|
+
|
|
46
|
+
canvas.drawLine(0f, lineY, canvas.width.toFloat(), lineY, paint)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
private inline fun Paint.withStyle(
|
|
51
|
+
color: Int,
|
|
52
|
+
width: Float,
|
|
53
|
+
action: () -> Unit,
|
|
54
|
+
) {
|
|
55
|
+
val oldColor = this.color
|
|
56
|
+
val oldWidth = this.strokeWidth
|
|
57
|
+
val oldStyle = this.style
|
|
58
|
+
|
|
59
|
+
this.color = color
|
|
60
|
+
this.strokeWidth = width
|
|
61
|
+
this.style = Paint.Style.STROKE
|
|
62
|
+
|
|
63
|
+
action()
|
|
64
|
+
|
|
65
|
+
this.color = oldColor
|
|
66
|
+
this.strokeWidth = oldWidth
|
|
67
|
+
this.style = oldStyle
|
|
68
|
+
}
|
|
69
|
+
}
|