@mathers101/react-native-render-rich-text 0.0.0-stage → 0.1.10
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 -0
- package/README.md +140 -3
- package/ReactNativeRenderRichText.podspec +23 -0
- package/android/build.gradle +86 -0
- package/android/consumer-rules.pro +3 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/cpp/jni-adapter.cpp +191 -0
- package/android/src/main/java/com/renderrichtext/EnrichedTiptapText.kt +673 -0
- package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextLayoutManager.kt +24 -0
- package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextManager.kt +405 -0
- package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextPackage.kt +13 -0
- package/android/src/main/java/com/renderrichtext/MeasurementStore.kt +644 -0
- package/android/src/main/java/com/renderrichtext/accessibility/AccessibilityLabels.kt +17 -0
- package/android/src/main/java/com/renderrichtext/accessibility/AccessibleTiptapTextView.kt +112 -0
- package/android/src/main/java/com/renderrichtext/accessibility/TiptapAccessibilityHelper.kt +576 -0
- package/android/src/main/java/com/renderrichtext/events/CodeBlockPressEvent.kt +24 -0
- package/android/src/main/java/com/renderrichtext/events/ContextMenuItemPressEvent.kt +28 -0
- package/android/src/main/java/com/renderrichtext/events/CopyPressEvent.kt +24 -0
- package/android/src/main/java/com/renderrichtext/events/FactoidPressEvent.kt +23 -0
- package/android/src/main/java/com/renderrichtext/events/ImagePressEvent.kt +25 -0
- package/android/src/main/java/com/renderrichtext/events/LatexErrorEvent.kt +29 -0
- package/android/src/main/java/com/renderrichtext/events/LinkLongPressEvent.kt +23 -0
- package/android/src/main/java/com/renderrichtext/events/LinkPressEvent.kt +23 -0
- package/android/src/main/java/com/renderrichtext/events/MentionLongPressEvent.kt +25 -0
- package/android/src/main/java/com/renderrichtext/events/MentionPressEvent.kt +25 -0
- package/android/src/main/java/com/renderrichtext/events/TaskListItemPressEvent.kt +26 -0
- package/android/src/main/java/com/renderrichtext/math/LatexErrorReporter.kt +9 -0
- package/android/src/main/java/com/renderrichtext/parser/Parser.kt +59 -0
- package/android/src/main/java/com/renderrichtext/parser/TextLinkMatching.kt +35 -0
- package/android/src/main/java/com/renderrichtext/parser/TiptapASTNode.kt +69 -0
- package/android/src/main/java/com/renderrichtext/renderer/BaselineShiftRenderer.kt +45 -0
- package/android/src/main/java/com/renderrichtext/renderer/BlankLineRenderer.kt +39 -0
- package/android/src/main/java/com/renderrichtext/renderer/BlockStyleContext.kt +181 -0
- package/android/src/main/java/com/renderrichtext/renderer/BlockquoteRenderer.kt +243 -0
- package/android/src/main/java/com/renderrichtext/renderer/BlockquoteTextRenderer.kt +56 -0
- package/android/src/main/java/com/renderrichtext/renderer/CodeBlockRenderer.kt +135 -0
- package/android/src/main/java/com/renderrichtext/renderer/CodeRenderer.kt +37 -0
- package/android/src/main/java/com/renderrichtext/renderer/EmphasisRenderer.kt +28 -0
- package/android/src/main/java/com/renderrichtext/renderer/FactoidRenderer.kt +97 -0
- package/android/src/main/java/com/renderrichtext/renderer/HeadingRenderer.kt +81 -0
- package/android/src/main/java/com/renderrichtext/renderer/HighlightRenderer.kt +26 -0
- package/android/src/main/java/com/renderrichtext/renderer/LineBreakRenderer.kt +17 -0
- package/android/src/main/java/com/renderrichtext/renderer/LinkRenderer.kt +90 -0
- package/android/src/main/java/com/renderrichtext/renderer/ListContextManager.kt +109 -0
- package/android/src/main/java/com/renderrichtext/renderer/ListItemRenderer.kt +211 -0
- package/android/src/main/java/com/renderrichtext/renderer/ListRenderer.kt +133 -0
- package/android/src/main/java/com/renderrichtext/renderer/MentionRenderer.kt +85 -0
- package/android/src/main/java/com/renderrichtext/renderer/NodeRenderer.kt +207 -0
- package/android/src/main/java/com/renderrichtext/renderer/ParagraphRenderer.kt +91 -0
- package/android/src/main/java/com/renderrichtext/renderer/Renderer.kt +148 -0
- package/android/src/main/java/com/renderrichtext/renderer/SoftBreakRenderer.kt +17 -0
- package/android/src/main/java/com/renderrichtext/renderer/SpanStyleCache.kt +143 -0
- package/android/src/main/java/com/renderrichtext/renderer/StrikethroughRenderer.kt +28 -0
- package/android/src/main/java/com/renderrichtext/renderer/StrongRenderer.kt +28 -0
- package/android/src/main/java/com/renderrichtext/renderer/TextRenderer.kt +31 -0
- package/android/src/main/java/com/renderrichtext/renderer/ThematicBreakRenderer.kt +46 -0
- package/android/src/main/java/com/renderrichtext/renderer/UnderlineRenderer.kt +28 -0
- package/android/src/main/java/com/renderrichtext/spans/BaseListSpan.kt +164 -0
- package/android/src/main/java/com/renderrichtext/spans/BaselineShiftSpan.kt +27 -0
- package/android/src/main/java/com/renderrichtext/spans/BlockquoteSpan.kt +302 -0
- package/android/src/main/java/com/renderrichtext/spans/CodeBackgroundSpan.kt +205 -0
- package/android/src/main/java/com/renderrichtext/spans/CodeBlockSpan.kt +216 -0
- package/android/src/main/java/com/renderrichtext/spans/CodeSpan.kt +32 -0
- package/android/src/main/java/com/renderrichtext/spans/EmphasisSpan.kt +42 -0
- package/android/src/main/java/com/renderrichtext/spans/FactoidBackgroundSpan.kt +265 -0
- package/android/src/main/java/com/renderrichtext/spans/FactoidPaddingSpan.kt +258 -0
- package/android/src/main/java/com/renderrichtext/spans/FactoidSpan.kt +32 -0
- package/android/src/main/java/com/renderrichtext/spans/FadeInSpan.kt +29 -0
- package/android/src/main/java/com/renderrichtext/spans/HeadingSpan.kt +38 -0
- package/android/src/main/java/com/renderrichtext/spans/HighlightSpan.kt +80 -0
- package/android/src/main/java/com/renderrichtext/spans/ImageSpan.kt +481 -0
- package/android/src/main/java/com/renderrichtext/spans/InlineBackgroundGeometry.kt +42 -0
- package/android/src/main/java/com/renderrichtext/spans/LineHeightSpan.kt +39 -0
- package/android/src/main/java/com/renderrichtext/spans/LinkPillIconCache.kt +154 -0
- package/android/src/main/java/com/renderrichtext/spans/LinkPillSpan.kt +381 -0
- package/android/src/main/java/com/renderrichtext/spans/LinkSpan.kt +68 -0
- package/android/src/main/java/com/renderrichtext/spans/ListItemSpacingSpan.kt +33 -0
- package/android/src/main/java/com/renderrichtext/spans/ListMarkerAnchorSpan.kt +38 -0
- package/android/src/main/java/com/renderrichtext/spans/MarginBottomSpan.kt +76 -0
- package/android/src/main/java/com/renderrichtext/spans/MentionChipSpan.kt +132 -0
- package/android/src/main/java/com/renderrichtext/spans/MentionSpan.kt +46 -0
- package/android/src/main/java/com/renderrichtext/spans/OrderedListSpan.kt +127 -0
- package/android/src/main/java/com/renderrichtext/spans/SpoilerSpan.kt +33 -0
- package/android/src/main/java/com/renderrichtext/spans/StrikethroughSpan.kt +12 -0
- package/android/src/main/java/com/renderrichtext/spans/StrongSpan.kt +39 -0
- package/android/src/main/java/com/renderrichtext/spans/TaskListSpan.kt +143 -0
- package/android/src/main/java/com/renderrichtext/spans/TextSpan.kt +26 -0
- package/android/src/main/java/com/renderrichtext/spans/ThematicBreakSpan.kt +69 -0
- package/android/src/main/java/com/renderrichtext/spans/UnorderedListSpan.kt +96 -0
- package/android/src/main/java/com/renderrichtext/spoiler/SpoilerStubs.kt +46 -0
- package/android/src/main/java/com/renderrichtext/styles/BaseBlockStyle.kt +11 -0
- package/android/src/main/java/com/renderrichtext/styles/BlockquoteStyle.kt +83 -0
- package/android/src/main/java/com/renderrichtext/styles/CodeBlockStyle.kt +80 -0
- package/android/src/main/java/com/renderrichtext/styles/CodeStyle.kt +26 -0
- package/android/src/main/java/com/renderrichtext/styles/EmphasisStyle.kt +21 -0
- package/android/src/main/java/com/renderrichtext/styles/FactoidStyle.kt +21 -0
- package/android/src/main/java/com/renderrichtext/styles/HeadingStyle.kt +33 -0
- package/android/src/main/java/com/renderrichtext/styles/HighlightStyle.kt +19 -0
- package/android/src/main/java/com/renderrichtext/styles/ImageStyle.kt +29 -0
- package/android/src/main/java/com/renderrichtext/styles/InlineImageStyle.kt +17 -0
- package/android/src/main/java/com/renderrichtext/styles/InlineMathStyle.kt +17 -0
- package/android/src/main/java/com/renderrichtext/styles/LinkPillContent.kt +36 -0
- package/android/src/main/java/com/renderrichtext/styles/LinkPillStyle.kt +44 -0
- package/android/src/main/java/com/renderrichtext/styles/LinkStyle.kt +23 -0
- package/android/src/main/java/com/renderrichtext/styles/LinkVariantEntry.kt +34 -0
- package/android/src/main/java/com/renderrichtext/styles/ListStyle.kt +65 -0
- package/android/src/main/java/com/renderrichtext/styles/MathStyle.kt +29 -0
- package/android/src/main/java/com/renderrichtext/styles/MentionStyle.kt +19 -0
- package/android/src/main/java/com/renderrichtext/styles/ParagraphStyle.kt +33 -0
- package/android/src/main/java/com/renderrichtext/styles/SpoilerStyle.kt +27 -0
- package/android/src/main/java/com/renderrichtext/styles/StrikethroughStyle.kt +17 -0
- package/android/src/main/java/com/renderrichtext/styles/StrongStyle.kt +21 -0
- package/android/src/main/java/com/renderrichtext/styles/StyleConfig.kt +411 -0
- package/android/src/main/java/com/renderrichtext/styles/StyleParser.kt +92 -0
- package/android/src/main/java/com/renderrichtext/styles/SubscriptStyle.kt +16 -0
- package/android/src/main/java/com/renderrichtext/styles/SuperscriptStyle.kt +16 -0
- package/android/src/main/java/com/renderrichtext/styles/TableStyle.kt +75 -0
- package/android/src/main/java/com/renderrichtext/styles/TaskListStyle.kt +29 -0
- package/android/src/main/java/com/renderrichtext/styles/TextAlignment.kt +32 -0
- package/android/src/main/java/com/renderrichtext/styles/ThematicBreakStyle.kt +23 -0
- package/android/src/main/java/com/renderrichtext/styles/UnderlineStyle.kt +17 -0
- package/android/src/main/java/com/renderrichtext/styles/VideoStyle.kt +31 -0
- package/android/src/main/java/com/renderrichtext/utils/common/BorderStyleUtils.kt +86 -0
- package/android/src/main/java/com/renderrichtext/utils/common/BreakStrategyUtils.kt +32 -0
- package/android/src/main/java/com/renderrichtext/utils/common/CodeBlockHighlighter.kt +36 -0
- package/android/src/main/java/com/renderrichtext/utils/common/CodeBlockNode.kt +42 -0
- package/android/src/main/java/com/renderrichtext/utils/common/EllipsizeUtils.kt +27 -0
- package/android/src/main/java/com/renderrichtext/utils/common/EnrichedTiptapAncestorUtils.kt +10 -0
- package/android/src/main/java/com/renderrichtext/utils/common/FeatureFlags.kt +9 -0
- package/android/src/main/java/com/renderrichtext/utils/common/LinkRecognitionProps.kt +31 -0
- package/android/src/main/java/com/renderrichtext/utils/common/LinkRegexConfig.kt +56 -0
- package/android/src/main/java/com/renderrichtext/utils/common/MotionPreferences.kt +18 -0
- package/android/src/main/java/com/renderrichtext/utils/common/ReadableMapExtensions.kt +28 -0
- package/android/src/main/java/com/renderrichtext/utils/common/TiptapViewManagerUtils.kt +242 -0
- package/android/src/main/java/com/renderrichtext/utils/common/layout/RTLUtils.kt +6 -0
- package/android/src/main/java/com/renderrichtext/utils/common/serialization/TiptapASTSerializer.kt +368 -0
- package/android/src/main/java/com/renderrichtext/utils/text/ImageCache.kt +88 -0
- package/android/src/main/java/com/renderrichtext/utils/text/ImageDownloader.kt +203 -0
- package/android/src/main/java/com/renderrichtext/utils/text/LocalImageLoader.kt +167 -0
- package/android/src/main/java/com/renderrichtext/utils/text/TailFadeInAnimator.kt +84 -0
- package/android/src/main/java/com/renderrichtext/utils/text/conversion/HTMLGenerator.kt +1105 -0
- package/android/src/main/java/com/renderrichtext/utils/text/conversion/TiptapExtractor.kt +423 -0
- package/android/src/main/java/com/renderrichtext/utils/text/extensions/ParagraphUtils.kt +9 -0
- package/android/src/main/java/com/renderrichtext/utils/text/extensions/SpannableExtensions.kt +9 -0
- package/android/src/main/java/com/renderrichtext/utils/text/extensions/TextPaintExtensions.kt +76 -0
- package/android/src/main/java/com/renderrichtext/utils/text/interaction/CheckboxTouchHelper.kt +61 -0
- package/android/src/main/java/com/renderrichtext/utils/text/interaction/TaskListTapUtils.kt +286 -0
- package/android/src/main/java/com/renderrichtext/utils/text/span/ApplyLineHeight.kt +39 -0
- package/android/src/main/java/com/renderrichtext/utils/text/span/BlockSpacing.kt +142 -0
- package/android/src/main/java/com/renderrichtext/utils/text/span/SpanFlags.kt +43 -0
- package/android/src/main/java/com/renderrichtext/utils/text/span/WidthAwareSpans.kt +30 -0
- package/android/src/main/java/com/renderrichtext/utils/text/view/CodeBlockPressHost.kt +15 -0
- package/android/src/main/java/com/renderrichtext/utils/text/view/ImagePressHost.kt +19 -0
- package/android/src/main/java/com/renderrichtext/utils/text/view/LinkEvents.kt +88 -0
- package/android/src/main/java/com/renderrichtext/utils/text/view/LinkLongPressMovementMethod.kt +449 -0
- package/android/src/main/java/com/renderrichtext/utils/text/view/SelectionActionMode.kt +235 -0
- package/android/src/main/java/com/renderrichtext/utils/text/view/TextSelectionColors.kt +48 -0
- package/android/src/main/java/com/renderrichtext/utils/text/view/TextViewSetup.kt +119 -0
- package/android/src/main/java/com/renderrichtext/views/ContextMenuPopup.kt +217 -0
- package/android/src/main/java/com/renderrichtext/views/CopyGlyph.kt +101 -0
- package/android/src/main/java/com/renderrichtext/views/WrapGlyph.kt +40 -0
- package/android/src/main/jni/CMakeLists.txt +52 -0
- package/android/src/main/jni/react/renderer/components/RichTextSpec/ComponentDescriptors.h +30 -0
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextComponentDescriptor.h +29 -0
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextMeasurementManager.cpp +45 -0
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextMeasurementManager.h +21 -0
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextShadowNode.cpp +38 -0
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextShadowNode.h +53 -0
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextState.cpp +9 -0
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextState.h +24 -0
- package/android/src/main/jni/react/renderer/components/RichTextSpec/conversions.h +40 -0
- package/cpp/parser/TiptapASTNode.hpp +68 -0
- package/cpp/parser/TiptapParser.cpp +233 -0
- package/cpp/parser/TiptapParser.hpp +13 -0
- package/cpp/vendor/nlohmann/json.hpp +24765 -0
- package/ios/EnrichedTiptapText.h +27 -0
- package/ios/EnrichedTiptapText.mm +1222 -0
- package/ios/attachments/ENRMImageAttachment.h +51 -0
- package/ios/attachments/ENRMImageAttachment.m +398 -0
- package/ios/attachments/ENRMLinkPillAttachment.h +47 -0
- package/ios/attachments/ENRMLinkPillAttachment.m +324 -0
- package/ios/attachments/ENRMLinkPillIconCache.h +28 -0
- package/ios/attachments/ENRMLinkPillIconCache.m +181 -0
- package/ios/attachments/ENRMLinkPillText.h +27 -0
- package/ios/attachments/ENRMLinkPillText.m +118 -0
- package/ios/attachments/ENRMMathInlineAttachment.h +7 -0
- package/ios/attachments/ENRMMathInlineAttachment.m +4 -0
- package/ios/attachments/ThematicBreakAttachment.h +15 -0
- package/ios/attachments/ThematicBreakAttachment.m +33 -0
- package/ios/internals/ENRMViewFreeMeasurement.h +208 -0
- package/ios/internals/EnrichedTiptapTextComponentDescriptor.h +19 -0
- package/ios/internals/EnrichedTiptapTextShadowNode.h +43 -0
- package/ios/internals/EnrichedTiptapTextShadowNode.mm +69 -0
- package/ios/internals/EnrichedTiptapTextState.h +24 -0
- package/ios/internals/MeasurementCache.h +308 -0
- package/ios/internals/ShadowMeasurementUtils.h +145 -0
- package/ios/parser/ENRMTextLinkAttributes.h +7 -0
- package/ios/parser/ENRMTiptapParser.h +33 -0
- package/ios/parser/ENRMTiptapParser.mm +73 -0
- package/ios/parser/TiptapASTNode.h +57 -0
- package/ios/parser/TiptapASTNode.m +52 -0
- package/ios/parser/TiptapParserBridge.mm +179 -0
- package/ios/renderer/AttributedRenderer.h +23 -0
- package/ios/renderer/AttributedRenderer.m +229 -0
- package/ios/renderer/BaseRenderer.h +33 -0
- package/ios/renderer/BaseRenderer.m +46 -0
- package/ios/renderer/BaselineShiftTextAttributes.h +10 -0
- package/ios/renderer/BaselineShiftTextAttributes.m +26 -0
- package/ios/renderer/BlankLineRenderer.h +4 -0
- package/ios/renderer/BlankLineRenderer.m +51 -0
- package/ios/renderer/BlockquoteRenderer.h +6 -0
- package/ios/renderer/BlockquoteRenderer.m +258 -0
- package/ios/renderer/CodeBlockRenderer.h +9 -0
- package/ios/renderer/CodeBlockRenderer.m +99 -0
- package/ios/renderer/CodeRenderer.h +9 -0
- package/ios/renderer/CodeRenderer.m +69 -0
- package/ios/renderer/ENRMBlockquoteTextRenderer.h +25 -0
- package/ios/renderer/ENRMBlockquoteTextRenderer.m +48 -0
- package/ios/renderer/EmphasisRenderer.h +5 -0
- package/ios/renderer/EmphasisRenderer.m +100 -0
- package/ios/renderer/FactoidRenderer.h +9 -0
- package/ios/renderer/FactoidRenderer.m +130 -0
- package/ios/renderer/HeadingRenderer.h +6 -0
- package/ios/renderer/HeadingRenderer.m +103 -0
- package/ios/renderer/HighlightRenderer.h +7 -0
- package/ios/renderer/HighlightRenderer.m +33 -0
- package/ios/renderer/LinkRenderer.h +6 -0
- package/ios/renderer/LinkRenderer.m +158 -0
- package/ios/renderer/ListItemRenderer.h +24 -0
- package/ios/renderer/ListItemRenderer.m +283 -0
- package/ios/renderer/ListRenderer.h +13 -0
- package/ios/renderer/ListRenderer.m +126 -0
- package/ios/renderer/MentionRenderer.h +9 -0
- package/ios/renderer/MentionRenderer.m +96 -0
- package/ios/renderer/NodeRenderer.h +8 -0
- package/ios/renderer/ParagraphRenderer.h +6 -0
- package/ios/renderer/ParagraphRenderer.m +85 -0
- package/ios/renderer/RenderContext.h +145 -0
- package/ios/renderer/RenderContext.m +403 -0
- package/ios/renderer/RendererFactory.h +12 -0
- package/ios/renderer/RendererFactory.m +158 -0
- package/ios/renderer/StrikethroughRenderer.h +5 -0
- package/ios/renderer/StrikethroughRenderer.m +30 -0
- package/ios/renderer/StrongRenderer.h +5 -0
- package/ios/renderer/StrongRenderer.m +88 -0
- package/ios/renderer/TextRenderer.h +6 -0
- package/ios/renderer/TextRenderer.m +18 -0
- package/ios/renderer/ThematicBreakRenderer.h +4 -0
- package/ios/renderer/ThematicBreakRenderer.m +42 -0
- package/ios/renderer/UnderlineRenderer.h +4 -0
- package/ios/renderer/UnderlineRenderer.m +41 -0
- package/ios/styles/ENRMFontSlot.h +12 -0
- package/ios/styles/ENRMFontSlot.m +24 -0
- package/ios/styles/StyleConfig.h +488 -0
- package/ios/styles/StyleConfig.mm +2820 -0
- package/ios/utils/AccessibilityInfo.h +35 -0
- package/ios/utils/AccessibilityInfo.m +24 -0
- package/ios/utils/BlockquoteBorder.h +26 -0
- package/ios/utils/BlockquoteBorder.m +294 -0
- package/ios/utils/CodeBackground.h +19 -0
- package/ios/utils/CodeBackground.m +197 -0
- package/ios/utils/CodeBlockBackground.h +17 -0
- package/ios/utils/CodeBlockBackground.m +103 -0
- package/ios/utils/ContextMenuUtils.h +76 -0
- package/ios/utils/ContextMenuUtils.mm +75 -0
- package/ios/utils/ENRMAccessibilityLabels.h +40 -0
- package/ios/utils/ENRMAccessibilityLabels.m +5 -0
- package/ios/utils/ENRMAsyncRenderCoordinator.h +24 -0
- package/ios/utils/ENRMAsyncRenderCoordinator.m +37 -0
- package/ios/utils/ENRMAtomicSize.h +65 -0
- package/ios/utils/ENRMCodeBlockContent.h +37 -0
- package/ios/utils/ENRMCodeBlockContent.mm +89 -0
- package/ios/utils/ENRMFeatureFlags.h +25 -0
- package/ios/utils/ENRMImageDownloader.h +30 -0
- package/ios/utils/ENRMImageDownloader.m +168 -0
- package/ios/utils/ENRMLatexErrorCoordinator.h +27 -0
- package/ios/utils/ENRMLatexErrorCoordinator.mm +75 -0
- package/ios/utils/ENRMLatexErrorReporting.h +13 -0
- package/ios/utils/ENRMLinkContextMenus.h +93 -0
- package/ios/utils/ENRMLinkContextMenus.m +178 -0
- package/ios/utils/ENRMLinkRegexConfig.h +30 -0
- package/ios/utils/ENRMLinkRegexConfig.mm +104 -0
- package/ios/utils/ENRMLinkRegexProps.h +23 -0
- package/ios/utils/ENRMLocalImageLoader.h +35 -0
- package/ios/utils/ENRMLocalImageLoader.m +111 -0
- package/ios/utils/ENRMMenuAction.h +27 -0
- package/ios/utils/ENRMMenuAction.m +33 -0
- package/ios/utils/ENRMSpoilerOverlayManager.h +15 -0
- package/ios/utils/ENRMSpoilerOverlayManager.m +19 -0
- package/ios/utils/ENRMSpoilerTapUtils.h +6 -0
- package/ios/utils/ENRMSpoilerTapUtils.m +11 -0
- package/ios/utils/ENRMTailFadeInAnimator.h +16 -0
- package/ios/utils/ENRMTailFadeInAnimator.m +161 -0
- package/ios/utils/ENRMTextHitTest.h +23 -0
- package/ios/utils/ENRMTextHitTest.m +20 -0
- package/ios/utils/ENRMTextInteractionUtils.h +20 -0
- package/ios/utils/ENRMTextInteractionUtils.m +15 -0
- package/ios/utils/ENRMTextRenderer.h +38 -0
- package/ios/utils/ENRMTextRenderer.m +54 -0
- package/ios/utils/ENRMTextViewSetup.h +132 -0
- package/ios/utils/ENRMUIKit.h +429 -0
- package/ios/utils/EditMenuUtils.h +105 -0
- package/ios/utils/EditMenuUtils.m +143 -0
- package/ios/utils/FactoidBackground.h +20 -0
- package/ios/utils/FactoidBackground.m +161 -0
- package/ios/utils/FontScaleObserver.h +10 -0
- package/ios/utils/FontScaleObserver.m +55 -0
- package/ios/utils/FontUtils.h +31 -0
- package/ios/utils/FontUtils.m +63 -0
- package/ios/utils/HTMLGenerator.h +25 -0
- package/ios/utils/HTMLGenerator.m +1041 -0
- package/ios/utils/HeightUpdateUtils.h +25 -0
- package/ios/utils/ImageRequestHeaderUtils.h +35 -0
- package/ios/utils/LastElementUtils.h +97 -0
- package/ios/utils/LinkContextMenuUtils.h +55 -0
- package/ios/utils/LinkPillContentUtils.h +46 -0
- package/ios/utils/LinkTapUtils.h +56 -0
- package/ios/utils/LinkTapUtils.m +139 -0
- package/ios/utils/ListMarkerDrawer.h +15 -0
- package/ios/utils/ListMarkerDrawer.m +239 -0
- package/ios/utils/MentionBackground.h +26 -0
- package/ios/utils/MentionBackground.m +86 -0
- package/ios/utils/ParagraphStyleUtils.h +87 -0
- package/ios/utils/ParagraphStyleUtils.m +484 -0
- package/ios/utils/PasteboardUtils.h +48 -0
- package/ios/utils/PasteboardUtils.m +166 -0
- package/ios/utils/RTFExportUtils.h +24 -0
- package/ios/utils/RTFExportUtils.m +299 -0
- package/ios/utils/RuntimeKeys.h +44 -0
- package/ios/utils/RuntimeKeys.m +13 -0
- package/ios/utils/SelectionColorUtils.h +14 -0
- package/ios/utils/StylePropsUtils.h +1340 -0
- package/ios/utils/TaskListTapUtils.h +6 -0
- package/ios/utils/TaskListTapUtils.m +14 -0
- package/ios/utils/TextViewLayoutManager.h +14 -0
- package/ios/utils/TextViewLayoutManager.mm +198 -0
- package/ios/utils/TiptapAccessibilityElementBuilder.h +43 -0
- package/ios/utils/TiptapAccessibilityElementBuilder.m +432 -0
- package/ios/utils/TiptapExtractor.h +17 -0
- package/ios/utils/TiptapExtractor.m +367 -0
- package/ios/views/ENRMTiptapTextView.h +25 -0
- package/ios/views/ENRMTiptapTextView.m +247 -0
- package/package.json +70 -6
- package/react-native.config.js +10 -0
- package/src/EnrichedTiptapTextNativeComponent.ts +739 -0
- package/src/RichText.tsx +164 -0
- package/src/admonitionDefaults.ts +58 -0
- package/src/darkModeTextStyle.ts +99 -0
- package/src/headingDefaults.ts +21 -0
- package/src/index.tsx +4 -0
- package/src/linkVariantUtils.ts +120 -0
- package/src/normalizeTiptapStyle.ts +397 -0
- package/src/rn-globals.d.ts +1 -0
- package/src/styleUtils.ts +107 -0
- package/src/types/TiptapStyle.ts +532 -0
- package/src/types/TiptapStyleInternal.ts +299 -0
- package/src/types/linkPill.ts +9 -0
- package/src/utils/isDev.ts +4 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
#import "RendererFactory.h"
|
|
2
|
+
#import "BlankLineRenderer.h"
|
|
3
|
+
#import "BlockquoteRenderer.h"
|
|
4
|
+
#import "CodeBlockRenderer.h"
|
|
5
|
+
#import "CodeRenderer.h"
|
|
6
|
+
#import "EmphasisRenderer.h"
|
|
7
|
+
#import "FactoidRenderer.h"
|
|
8
|
+
#import "MentionRenderer.h"
|
|
9
|
+
|
|
10
|
+
#import "ENRMFeatureFlags.h"
|
|
11
|
+
|
|
12
|
+
#import "HeadingRenderer.h"
|
|
13
|
+
#import "HighlightRenderer.h"
|
|
14
|
+
#import "LinkRenderer.h"
|
|
15
|
+
#import "ListItemRenderer.h"
|
|
16
|
+
#import "ListRenderer.h"
|
|
17
|
+
#import "TiptapASTNode.h"
|
|
18
|
+
#import "ParagraphRenderer.h"
|
|
19
|
+
#import "RenderContext.h"
|
|
20
|
+
#import "StrikethroughRenderer.h"
|
|
21
|
+
#import "StrongRenderer.h"
|
|
22
|
+
#import "StyleConfig.h"
|
|
23
|
+
#import "TextRenderer.h"
|
|
24
|
+
#import "ThematicBreakRenderer.h"
|
|
25
|
+
#import "UnderlineRenderer.h"
|
|
26
|
+
|
|
27
|
+
@implementation RendererFactory {
|
|
28
|
+
StyleConfig *_config;
|
|
29
|
+
NSMutableDictionary<NSNumber *, id<NodeRenderer>> *_cache;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Initializes the factory with a shared style configuration.
|
|
34
|
+
* Uses a mutable dictionary to cache renderer instances as they are needed.
|
|
35
|
+
*/
|
|
36
|
+
- (instancetype)initWithConfig:(StyleConfig *)config
|
|
37
|
+
{
|
|
38
|
+
self = [super init];
|
|
39
|
+
if (self) {
|
|
40
|
+
_config = config;
|
|
41
|
+
_cache = [NSMutableDictionary new];
|
|
42
|
+
}
|
|
43
|
+
return self;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Returns a shared renderer instance for a specific node type.
|
|
48
|
+
* Implements lazy initialization to avoid allocating unused renderers.
|
|
49
|
+
*/
|
|
50
|
+
- (id<NodeRenderer>)rendererForNodeType:(TiptapNodeType)type
|
|
51
|
+
{
|
|
52
|
+
id<NodeRenderer> cached = _cache[@(type)];
|
|
53
|
+
if (cached) {
|
|
54
|
+
return cached;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
id<NodeRenderer> renderer = [self createRendererForType:type];
|
|
58
|
+
if (renderer) {
|
|
59
|
+
_cache[@(type)] = renderer;
|
|
60
|
+
}
|
|
61
|
+
return renderer;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Internal factory method to instantiate specialized renderers.
|
|
66
|
+
*/
|
|
67
|
+
- (id<NodeRenderer>)createRendererForType:(TiptapNodeType)type
|
|
68
|
+
{
|
|
69
|
+
switch (type) {
|
|
70
|
+
case TiptapNodeTypeText:
|
|
71
|
+
return [TextRenderer new];
|
|
72
|
+
case TiptapNodeTypeStrong:
|
|
73
|
+
return [[StrongRenderer alloc] initWithRendererFactory:self config:_config];
|
|
74
|
+
case TiptapNodeTypeEmphasis:
|
|
75
|
+
return [[EmphasisRenderer alloc] initWithRendererFactory:self config:_config];
|
|
76
|
+
case TiptapNodeTypeStrikethrough:
|
|
77
|
+
return [[StrikethroughRenderer alloc] initWithRendererFactory:self config:_config];
|
|
78
|
+
case TiptapNodeTypeUnderline:
|
|
79
|
+
return [[UnderlineRenderer alloc] initWithRendererFactory:self config:_config];
|
|
80
|
+
case TiptapNodeTypeHighlight:
|
|
81
|
+
return [[HighlightRenderer alloc] initWithRendererFactory:self config:_config];
|
|
82
|
+
case TiptapNodeTypeParagraph:
|
|
83
|
+
return [[ParagraphRenderer alloc] initWithRendererFactory:self config:_config];
|
|
84
|
+
case TiptapNodeTypeLink:
|
|
85
|
+
return [[LinkRenderer alloc] initWithRendererFactory:self config:_config];
|
|
86
|
+
case TiptapNodeTypeHeading:
|
|
87
|
+
return [[HeadingRenderer alloc] initWithRendererFactory:self config:_config];
|
|
88
|
+
case TiptapNodeTypeCode:
|
|
89
|
+
return [[CodeRenderer alloc] initWithRendererFactory:self config:_config];
|
|
90
|
+
case TiptapNodeTypeImage:
|
|
91
|
+
case TiptapNodeTypeSuperscript:
|
|
92
|
+
case TiptapNodeTypeSubscript:
|
|
93
|
+
case TiptapNodeTypeSpoiler:
|
|
94
|
+
case TiptapNodeTypeLatexMathInline:
|
|
95
|
+
case TiptapNodeTypeLatexMathDisplay:
|
|
96
|
+
case TiptapNodeTypeTable:
|
|
97
|
+
case TiptapNodeTypeTableHead:
|
|
98
|
+
case TiptapNodeTypeTableBody:
|
|
99
|
+
case TiptapNodeTypeTableRow:
|
|
100
|
+
case TiptapNodeTypeTableHeaderCell:
|
|
101
|
+
case TiptapNodeTypeTableCell:
|
|
102
|
+
case TiptapNodeTypeVideo:
|
|
103
|
+
return nil;
|
|
104
|
+
case TiptapNodeTypeBlockquote:
|
|
105
|
+
// A list-nested admonition falls back to the inline blockquote renderer
|
|
106
|
+
// (no themed header); top-level admonitions use the segment container path.
|
|
107
|
+
case TiptapNodeTypeAdmonition:
|
|
108
|
+
return [[BlockquoteRenderer alloc] initWithRendererFactory:self config:_config];
|
|
109
|
+
case TiptapNodeTypeListItem:
|
|
110
|
+
return [[ListItemRenderer alloc] initWithRendererFactory:self config:_config];
|
|
111
|
+
case TiptapNodeTypeUnorderedList:
|
|
112
|
+
return [[ListRenderer alloc] initWithRendererFactory:self config:_config isOrdered:NO];
|
|
113
|
+
case TiptapNodeTypeOrderedList:
|
|
114
|
+
return [[ListRenderer alloc] initWithRendererFactory:self config:_config isOrdered:YES];
|
|
115
|
+
case TiptapNodeTypeCodeBlock:
|
|
116
|
+
return [[CodeBlockRenderer alloc] initWithRendererFactory:self config:_config];
|
|
117
|
+
case TiptapNodeTypeThematicBreak:
|
|
118
|
+
return [[ThematicBreakRenderer alloc] initWithRendererFactory:self config:_config];
|
|
119
|
+
case TiptapNodeTypeBlankLine:
|
|
120
|
+
return [[BlankLineRenderer alloc] initWithRendererFactory:self config:_config];
|
|
121
|
+
case TiptapNodeTypeMention:
|
|
122
|
+
return [[MentionRenderer alloc] initWithRendererFactory:self config:_config];
|
|
123
|
+
default:
|
|
124
|
+
return nil;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Helper method for container renderers to process their children.
|
|
130
|
+
* Leverages the factory to find the appropriate renderer for each child node.
|
|
131
|
+
*/
|
|
132
|
+
- (void)renderChildrenOfNode:(TiptapASTNode *)node
|
|
133
|
+
into:(NSMutableAttributedString *)output
|
|
134
|
+
context:(RenderContext *)context
|
|
135
|
+
{
|
|
136
|
+
for (TiptapASTNode *child in node.children) {
|
|
137
|
+
if (child.type == TiptapNodeTypeLineBreak) {
|
|
138
|
+
NSAttributedString *lineBreak = [[NSAttributedString alloc] initWithString:@"\u2028"
|
|
139
|
+
attributes:[context getTextAttributes]];
|
|
140
|
+
[output appendAttributedString:lineBreak];
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (child.type == TiptapNodeTypeSoftBreak) {
|
|
144
|
+
NSAttributedString *softBreak = [[NSAttributedString alloc] initWithString:@" "
|
|
145
|
+
attributes:[context getTextAttributes]];
|
|
146
|
+
[output appendAttributedString:softBreak];
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
id<NodeRenderer> renderer = [self rendererForNodeType:child.type];
|
|
150
|
+
if (renderer) {
|
|
151
|
+
[renderer renderNode:child into:output context:context];
|
|
152
|
+
} else if (child.children.count > 0) {
|
|
153
|
+
[self renderChildrenOfNode:child into:output context:context];
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
@end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#import "StrikethroughRenderer.h"
|
|
2
|
+
#import "TiptapASTNode.h"
|
|
3
|
+
#import "RenderContext.h"
|
|
4
|
+
#import "RendererFactory.h"
|
|
5
|
+
#import "StyleConfig.h"
|
|
6
|
+
|
|
7
|
+
@implementation StrikethroughRenderer
|
|
8
|
+
|
|
9
|
+
#pragma mark - Rendering
|
|
10
|
+
|
|
11
|
+
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
12
|
+
into:(NSMutableAttributedString *)output
|
|
13
|
+
context:(RenderContext *)context
|
|
14
|
+
{
|
|
15
|
+
NSUInteger start = output.length;
|
|
16
|
+
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
17
|
+
|
|
18
|
+
NSRange range = NSMakeRange(start, output.length - start);
|
|
19
|
+
if (range.length == 0)
|
|
20
|
+
return;
|
|
21
|
+
|
|
22
|
+
// Apply strikethrough style
|
|
23
|
+
[output addAttribute:NSStrikethroughStyleAttributeName value:@(NSUnderlineStyleSingle) range:range];
|
|
24
|
+
|
|
25
|
+
// Apply strikethrough line color (not text color)
|
|
26
|
+
RCTUIColor *strikethroughColor = [_config strikethroughColor];
|
|
27
|
+
[output addAttribute:NSStrikethroughColorAttributeName value:strikethroughColor range:range];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
#import "StrongRenderer.h"
|
|
2
|
+
#import "FontUtils.h"
|
|
3
|
+
#import "TiptapASTNode.h"
|
|
4
|
+
#import "RenderContext.h"
|
|
5
|
+
#import "RendererFactory.h"
|
|
6
|
+
#import "StyleConfig.h"
|
|
7
|
+
#import <React/RCTFont.h>
|
|
8
|
+
|
|
9
|
+
@implementation StrongRenderer
|
|
10
|
+
|
|
11
|
+
#pragma mark - Rendering
|
|
12
|
+
|
|
13
|
+
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
14
|
+
into:(NSMutableAttributedString *)output
|
|
15
|
+
context:(RenderContext *)context
|
|
16
|
+
{
|
|
17
|
+
NSUInteger start = output.length;
|
|
18
|
+
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
19
|
+
|
|
20
|
+
NSRange range = NSMakeRange(start, output.length - start);
|
|
21
|
+
if (range.length == 0)
|
|
22
|
+
return;
|
|
23
|
+
|
|
24
|
+
BlockStyle *blockStyle = [context getBlockStyle];
|
|
25
|
+
RCTUIColor *configStrongColor = [_config strongColor];
|
|
26
|
+
RCTUIColor *calculatedColor =
|
|
27
|
+
configStrongColor ? [RenderContext calculateStrongColor:configStrongColor blockColor:blockStyle.color] : nil;
|
|
28
|
+
NSString *strongFontFamily = [_config strongFontFamily];
|
|
29
|
+
NSString *strongFontWeight = [_config strongFontWeight];
|
|
30
|
+
BOOL useNormalWeight = [strongFontWeight isEqualToString:@"normal"];
|
|
31
|
+
|
|
32
|
+
[output enumerateAttributesInRange:range
|
|
33
|
+
options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired
|
|
34
|
+
usingBlock:^(NSDictionary<NSAttributedStringKey, id> *attrs, NSRange subrange, BOOL *stop) {
|
|
35
|
+
// 1. Resolve Font
|
|
36
|
+
UIFont *currentFont =
|
|
37
|
+
attrs[NSFontAttributeName] ?: cachedFontFromBlockStyle(blockStyle, context);
|
|
38
|
+
|
|
39
|
+
UIFont *resolvedFont = currentFont;
|
|
40
|
+
|
|
41
|
+
if (strongFontFamily.length > 0) {
|
|
42
|
+
NSString *weight = useNormalWeight ? nil : @"bold";
|
|
43
|
+
resolvedFont = [RCTFont updateFont:currentFont
|
|
44
|
+
withFamily:strongFontFamily
|
|
45
|
+
size:nil
|
|
46
|
+
weight:weight
|
|
47
|
+
style:nil
|
|
48
|
+
variant:nil
|
|
49
|
+
scaleMultiplier:1.0];
|
|
50
|
+
} else if (!([currentFont.fontDescriptor symbolicTraits] & UIFontDescriptorTraitBold)) {
|
|
51
|
+
resolvedFont = [self ensureFontIsBold:currentFont];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (resolvedFont && ![resolvedFont isEqual:currentFont]) {
|
|
55
|
+
[output addAttribute:NSFontAttributeName value:resolvedFont range:subrange];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// 2. Resolve Color
|
|
59
|
+
// Only apply if we have a color and the current segment doesn't explicitly forbid overrides
|
|
60
|
+
if (calculatedColor && ![RenderContext shouldPreserveColors:attrs]) {
|
|
61
|
+
// Optimization: Check if this color is already set to avoid redundant attribute changes
|
|
62
|
+
if (![attrs[NSForegroundColorAttributeName] isEqual:calculatedColor]) {
|
|
63
|
+
[output addAttribute:NSForegroundColorAttributeName
|
|
64
|
+
value:calculatedColor
|
|
65
|
+
range:subrange];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
#pragma mark - Helper Methods
|
|
72
|
+
|
|
73
|
+
- (UIFont *)ensureFontIsBold:(UIFont *)font
|
|
74
|
+
{
|
|
75
|
+
if (!font)
|
|
76
|
+
return nil;
|
|
77
|
+
|
|
78
|
+
UIFontDescriptor *descriptor = font.fontDescriptor;
|
|
79
|
+
UIFontDescriptorSymbolicTraits traits = descriptor.symbolicTraits;
|
|
80
|
+
|
|
81
|
+
// Create new descriptor combining current traits with Bold
|
|
82
|
+
UIFontDescriptor *boldDescriptor = [descriptor fontDescriptorWithSymbolicTraits:(traits | UIFontDescriptorTraitBold)];
|
|
83
|
+
|
|
84
|
+
// Fallback to original font if bold version is unavailable
|
|
85
|
+
return boldDescriptor ? [UIFont fontWithDescriptor:boldDescriptor size:0] : font;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#import "TextRenderer.h"
|
|
2
|
+
#import "RenderContext.h"
|
|
3
|
+
|
|
4
|
+
@implementation TextRenderer
|
|
5
|
+
|
|
6
|
+
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
7
|
+
into:(NSMutableAttributedString *)output
|
|
8
|
+
context:(RenderContext *)context
|
|
9
|
+
{
|
|
10
|
+
if (!node.content)
|
|
11
|
+
return;
|
|
12
|
+
|
|
13
|
+
NSAttributedString *text = [[NSAttributedString alloc] initWithString:node.content
|
|
14
|
+
attributes:[context getTextAttributes]];
|
|
15
|
+
[output appendAttributedString:text];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#import "ThematicBreakRenderer.h"
|
|
2
|
+
#import "TiptapASTNode.h"
|
|
3
|
+
#import "StyleConfig.h"
|
|
4
|
+
#import "ThematicBreakAttachment.h"
|
|
5
|
+
|
|
6
|
+
#pragma mark - Renderer Implementation
|
|
7
|
+
|
|
8
|
+
@implementation ThematicBreakRenderer
|
|
9
|
+
|
|
10
|
+
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
11
|
+
into:(NSMutableAttributedString *)output
|
|
12
|
+
context:(RenderContext *)context
|
|
13
|
+
{
|
|
14
|
+
[self ensureStartingNewline:output];
|
|
15
|
+
|
|
16
|
+
ThematicBreakAttachment *attachment = [[ThematicBreakAttachment alloc] init];
|
|
17
|
+
attachment.lineColor = _config.thematicBreakColor ?: [RCTUIColor separatorColor];
|
|
18
|
+
attachment.lineHeight = _config.thematicBreakHeight > 0 ? _config.thematicBreakHeight : 1.0;
|
|
19
|
+
attachment.marginTop = _config.thematicBreakMarginTop;
|
|
20
|
+
attachment.marginBottom = _config.thematicBreakMarginBottom;
|
|
21
|
+
|
|
22
|
+
NSDictionary *attributes = @{
|
|
23
|
+
NSAttachmentAttributeName : attachment,
|
|
24
|
+
NSParagraphStyleAttributeName : [NSParagraphStyle defaultParagraphStyle]
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
NSAttributedString *breakString = [[NSAttributedString alloc] initWithString:@"\uFFFC" attributes:attributes];
|
|
28
|
+
|
|
29
|
+
[output appendAttributedString:breakString];
|
|
30
|
+
[output appendAttributedString:[[NSAttributedString alloc] initWithString:@"\n"]];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
#pragma mark - Private Utilities
|
|
34
|
+
|
|
35
|
+
- (void)ensureStartingNewline:(NSMutableAttributedString *)output
|
|
36
|
+
{
|
|
37
|
+
if (output.length > 0 && ![output.string hasSuffix:@"\n"]) {
|
|
38
|
+
[output appendAttributedString:[[NSAttributedString alloc] initWithString:@"\n"]];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#import "UnderlineRenderer.h"
|
|
2
|
+
#import "ENRMTextLinkAttributes.h"
|
|
3
|
+
#import "TiptapASTNode.h"
|
|
4
|
+
#import "RenderContext.h"
|
|
5
|
+
#import "RendererFactory.h"
|
|
6
|
+
#import "StyleConfig.h"
|
|
7
|
+
|
|
8
|
+
@implementation UnderlineRenderer
|
|
9
|
+
|
|
10
|
+
#pragma mark - Rendering
|
|
11
|
+
|
|
12
|
+
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
13
|
+
into:(NSMutableAttributedString *)output
|
|
14
|
+
context:(RenderContext *)context
|
|
15
|
+
{
|
|
16
|
+
NSUInteger start = output.length;
|
|
17
|
+
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
18
|
+
|
|
19
|
+
NSRange range = NSMakeRange(start, output.length - start);
|
|
20
|
+
if (range.length == 0)
|
|
21
|
+
return;
|
|
22
|
+
|
|
23
|
+
[output addAttribute:NSUnderlineStyleAttributeName value:@(NSUnderlineStyleSingle) range:range];
|
|
24
|
+
// Recognized links inside this span were styled before it closed; record the underline for them too.
|
|
25
|
+
[output enumerateAttribute:ENRMRecognizedLinkAttributeName
|
|
26
|
+
inRange:range
|
|
27
|
+
options:0
|
|
28
|
+
usingBlock:^(id value, NSRange linkRange, BOOL *stop) {
|
|
29
|
+
if ([value boolValue]) {
|
|
30
|
+
[output addAttribute:ENRMRecognizedLinkOriginalUnderlineAttributeName
|
|
31
|
+
value:@(NSUnderlineStyleSingle)
|
|
32
|
+
range:linkRange];
|
|
33
|
+
}
|
|
34
|
+
}];
|
|
35
|
+
|
|
36
|
+
RCTUIColor *underlineColor = [_config underlineColor];
|
|
37
|
+
|
|
38
|
+
[output addAttribute:NSUnderlineColorAttributeName value:underlineColor range:range];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
#import "ENRMUIKit.h"
|
|
3
|
+
|
|
4
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
5
|
+
|
|
6
|
+
@interface ENRMFontSlot : NSObject <NSCopying>
|
|
7
|
+
@property (nonatomic) BOOL needsRecreation;
|
|
8
|
+
@property (nonatomic, strong, nullable) UIFont *cachedFont;
|
|
9
|
+
- (void)invalidate;
|
|
10
|
+
@end
|
|
11
|
+
|
|
12
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#import "ENRMFontSlot.h"
|
|
2
|
+
|
|
3
|
+
@implementation ENRMFontSlot
|
|
4
|
+
|
|
5
|
+
- (instancetype)init
|
|
6
|
+
{
|
|
7
|
+
if (self = [super init]) {
|
|
8
|
+
_needsRecreation = YES;
|
|
9
|
+
}
|
|
10
|
+
return self;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
- (void)invalidate
|
|
14
|
+
{
|
|
15
|
+
_needsRecreation = YES;
|
|
16
|
+
_cachedFont = nil;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
- (id)copyWithZone:(NSZone *)zone
|
|
20
|
+
{
|
|
21
|
+
return [[[self class] allocWithZone:zone] init];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@end
|