@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,99 +1,99 @@
|
|
|
1
|
-
#import "CodeBlockRenderer.h"
|
|
2
|
-
#import "CodeBlockBackground.h"
|
|
3
|
-
#import "ENRMCodeBlockContent.h"
|
|
4
|
-
#import "LastElementUtils.h"
|
|
5
|
-
#import "TiptapASTNode.h"
|
|
6
|
-
#import "ParagraphStyleUtils.h"
|
|
7
|
-
#import "RenderContext.h"
|
|
8
|
-
#import "RendererFactory.h"
|
|
9
|
-
#import "StyleConfig.h"
|
|
10
|
-
|
|
11
|
-
@implementation CodeBlockRenderer
|
|
12
|
-
|
|
13
|
-
- (id)takeContextSnapshot:(RenderContext *)context
|
|
14
|
-
{
|
|
15
|
-
return [context snapshotScope];
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
19
|
-
into:(NSMutableAttributedString *)output
|
|
20
|
-
context:(RenderContext *)context
|
|
21
|
-
{
|
|
22
|
-
// In tight lists md4c emits raw Text siblings without paragraph wrappers,
|
|
23
|
-
// so the preceding content may not terminate with a newline.
|
|
24
|
-
if (output.length > 0 && ![output.string hasSuffix:@"\n"]) {
|
|
25
|
-
[output appendAttributedString:kNewlineAttributedString];
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
[context setBlockStyle:BlockTypeCodeBlock font:[_config codeBlockFont] color:[_config codeBlockColor] headingLevel:0];
|
|
29
|
-
|
|
30
|
-
CGFloat listIndent = context.accumulatedIndent;
|
|
31
|
-
CGFloat padding = [_config codeBlockPadding];
|
|
32
|
-
CGFloat marginTop = [_config codeBlockMarginTop];
|
|
33
|
-
CGFloat marginBottom = [_config codeBlockMarginBottom];
|
|
34
|
-
|
|
35
|
-
NSUInteger blockStart = output.length;
|
|
36
|
-
blockStart += applyBlockSpacingBefore(output, blockStart, marginTop);
|
|
37
|
-
|
|
38
|
-
// Top Padding: Inserted as a spacer character inside the background area
|
|
39
|
-
// apply only when positive
|
|
40
|
-
if (padding > 0) {
|
|
41
|
-
[output appendAttributedString:kNewlineAttributedString];
|
|
42
|
-
NSMutableParagraphStyle *topSpacerStyle = [context spacerStyleWithHeight:padding spacing:0];
|
|
43
|
-
topSpacerStyle.baseWritingDirection = NSWritingDirectionLeftToRight;
|
|
44
|
-
[output addAttribute:NSParagraphStyleAttributeName value:topSpacerStyle range:NSMakeRange(blockStart, 1)];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
NSUInteger contentStart = output.length;
|
|
48
|
-
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
49
|
-
|
|
50
|
-
NSUInteger contentEnd = output.length;
|
|
51
|
-
if (contentEnd <= contentStart)
|
|
52
|
-
return;
|
|
53
|
-
|
|
54
|
-
NSRange contentRange = NSMakeRange(contentStart, contentEnd - contentStart);
|
|
55
|
-
|
|
56
|
-
ENRMApplyCodeBlockTextAttributes(output, contentRange, _config);
|
|
57
|
-
|
|
58
|
-
// Horizontal padding is paragraph indentation in this flavor; the shared
|
|
59
|
-
// helper already forced the LTR left-aligned base style.
|
|
60
|
-
NSMutableParagraphStyle *baseStyle = [getOrCreateParagraphStyle(output, contentStart) mutableCopy];
|
|
61
|
-
baseStyle.firstLineHeadIndent = padding + listIndent;
|
|
62
|
-
baseStyle.headIndent = padding + listIndent;
|
|
63
|
-
baseStyle.tailIndent = -padding;
|
|
64
|
-
[output addAttribute:NSParagraphStyleAttributeName value:baseStyle range:contentRange];
|
|
65
|
-
|
|
66
|
-
// Bottom Padding: Inserted as a spacer character inside the background area
|
|
67
|
-
// apply it only when positive
|
|
68
|
-
if (padding > 0) {
|
|
69
|
-
NSUInteger bottomPaddingStart = output.length;
|
|
70
|
-
[output appendAttributedString:kNewlineAttributedString];
|
|
71
|
-
NSMutableParagraphStyle *bottomPaddingStyle = [context spacerStyleWithHeight:padding spacing:0];
|
|
72
|
-
bottomPaddingStyle.baseWritingDirection = NSWritingDirectionLeftToRight;
|
|
73
|
-
[output addAttribute:NSParagraphStyleAttributeName
|
|
74
|
-
value:bottomPaddingStyle
|
|
75
|
-
range:NSMakeRange(bottomPaddingStart, 1)];
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// Define the range for background rendering (includes padding, excludes margins)
|
|
79
|
-
NSRange backgroundRange = NSMakeRange(blockStart, output.length - blockStart);
|
|
80
|
-
[output addAttribute:CodeBlockAttributeName value:@YES range:backgroundRange];
|
|
81
|
-
if (listIndent > 0) {
|
|
82
|
-
[output addAttribute:CodeBlockIndentAttributeName value:@(listIndent) range:backgroundRange];
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// Recovered by a tap for onCodeBlockPress (the AST node is gone after render).
|
|
86
|
-
NSString *codeBlockText = ENRMCodeBlockExtractCode(node) ?: @"";
|
|
87
|
-
[output addAttribute:@"codeBlockText" value:codeBlockText range:backgroundRange];
|
|
88
|
-
NSString *codeBlockLanguage = ENRMCodeBlockLanguage(node);
|
|
89
|
-
if (codeBlockLanguage) {
|
|
90
|
-
[output addAttribute:@"codeBlockLanguage" value:codeBlockLanguage range:backgroundRange];
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// External Margin: Applied outside the background range
|
|
94
|
-
if (marginBottom > 0) {
|
|
95
|
-
applyBlockSpacingAfter(output, marginBottom);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
@end
|
|
1
|
+
#import "CodeBlockRenderer.h"
|
|
2
|
+
#import "CodeBlockBackground.h"
|
|
3
|
+
#import "ENRMCodeBlockContent.h"
|
|
4
|
+
#import "LastElementUtils.h"
|
|
5
|
+
#import "TiptapASTNode.h"
|
|
6
|
+
#import "ParagraphStyleUtils.h"
|
|
7
|
+
#import "RenderContext.h"
|
|
8
|
+
#import "RendererFactory.h"
|
|
9
|
+
#import "StyleConfig.h"
|
|
10
|
+
|
|
11
|
+
@implementation CodeBlockRenderer
|
|
12
|
+
|
|
13
|
+
- (id)takeContextSnapshot:(RenderContext *)context
|
|
14
|
+
{
|
|
15
|
+
return [context snapshotScope];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
19
|
+
into:(NSMutableAttributedString *)output
|
|
20
|
+
context:(RenderContext *)context
|
|
21
|
+
{
|
|
22
|
+
// In tight lists md4c emits raw Text siblings without paragraph wrappers,
|
|
23
|
+
// so the preceding content may not terminate with a newline.
|
|
24
|
+
if (output.length > 0 && ![output.string hasSuffix:@"\n"]) {
|
|
25
|
+
[output appendAttributedString:kNewlineAttributedString];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
[context setBlockStyle:BlockTypeCodeBlock font:[_config codeBlockFont] color:[_config codeBlockColor] headingLevel:0];
|
|
29
|
+
|
|
30
|
+
CGFloat listIndent = context.accumulatedIndent;
|
|
31
|
+
CGFloat padding = [_config codeBlockPadding];
|
|
32
|
+
CGFloat marginTop = [_config codeBlockMarginTop];
|
|
33
|
+
CGFloat marginBottom = [_config codeBlockMarginBottom];
|
|
34
|
+
|
|
35
|
+
NSUInteger blockStart = output.length;
|
|
36
|
+
blockStart += applyBlockSpacingBefore(output, blockStart, marginTop);
|
|
37
|
+
|
|
38
|
+
// Top Padding: Inserted as a spacer character inside the background area
|
|
39
|
+
// apply only when positive
|
|
40
|
+
if (padding > 0) {
|
|
41
|
+
[output appendAttributedString:kNewlineAttributedString];
|
|
42
|
+
NSMutableParagraphStyle *topSpacerStyle = [context spacerStyleWithHeight:padding spacing:0];
|
|
43
|
+
topSpacerStyle.baseWritingDirection = NSWritingDirectionLeftToRight;
|
|
44
|
+
[output addAttribute:NSParagraphStyleAttributeName value:topSpacerStyle range:NSMakeRange(blockStart, 1)];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
NSUInteger contentStart = output.length;
|
|
48
|
+
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
49
|
+
|
|
50
|
+
NSUInteger contentEnd = output.length;
|
|
51
|
+
if (contentEnd <= contentStart)
|
|
52
|
+
return;
|
|
53
|
+
|
|
54
|
+
NSRange contentRange = NSMakeRange(contentStart, contentEnd - contentStart);
|
|
55
|
+
|
|
56
|
+
ENRMApplyCodeBlockTextAttributes(output, contentRange, _config);
|
|
57
|
+
|
|
58
|
+
// Horizontal padding is paragraph indentation in this flavor; the shared
|
|
59
|
+
// helper already forced the LTR left-aligned base style.
|
|
60
|
+
NSMutableParagraphStyle *baseStyle = [getOrCreateParagraphStyle(output, contentStart) mutableCopy];
|
|
61
|
+
baseStyle.firstLineHeadIndent = padding + listIndent;
|
|
62
|
+
baseStyle.headIndent = padding + listIndent;
|
|
63
|
+
baseStyle.tailIndent = -padding;
|
|
64
|
+
[output addAttribute:NSParagraphStyleAttributeName value:baseStyle range:contentRange];
|
|
65
|
+
|
|
66
|
+
// Bottom Padding: Inserted as a spacer character inside the background area
|
|
67
|
+
// apply it only when positive
|
|
68
|
+
if (padding > 0) {
|
|
69
|
+
NSUInteger bottomPaddingStart = output.length;
|
|
70
|
+
[output appendAttributedString:kNewlineAttributedString];
|
|
71
|
+
NSMutableParagraphStyle *bottomPaddingStyle = [context spacerStyleWithHeight:padding spacing:0];
|
|
72
|
+
bottomPaddingStyle.baseWritingDirection = NSWritingDirectionLeftToRight;
|
|
73
|
+
[output addAttribute:NSParagraphStyleAttributeName
|
|
74
|
+
value:bottomPaddingStyle
|
|
75
|
+
range:NSMakeRange(bottomPaddingStart, 1)];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Define the range for background rendering (includes padding, excludes margins)
|
|
79
|
+
NSRange backgroundRange = NSMakeRange(blockStart, output.length - blockStart);
|
|
80
|
+
[output addAttribute:CodeBlockAttributeName value:@YES range:backgroundRange];
|
|
81
|
+
if (listIndent > 0) {
|
|
82
|
+
[output addAttribute:CodeBlockIndentAttributeName value:@(listIndent) range:backgroundRange];
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Recovered by a tap for onCodeBlockPress (the AST node is gone after render).
|
|
86
|
+
NSString *codeBlockText = ENRMCodeBlockExtractCode(node) ?: @"";
|
|
87
|
+
[output addAttribute:@"codeBlockText" value:codeBlockText range:backgroundRange];
|
|
88
|
+
NSString *codeBlockLanguage = ENRMCodeBlockLanguage(node);
|
|
89
|
+
if (codeBlockLanguage) {
|
|
90
|
+
[output addAttribute:@"codeBlockLanguage" value:codeBlockLanguage range:backgroundRange];
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// External Margin: Applied outside the background range
|
|
94
|
+
if (marginBottom > 0) {
|
|
95
|
+
applyBlockSpacingAfter(output, marginBottom);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
#import "BaseRenderer.h"
|
|
3
|
-
|
|
4
|
-
NS_ASSUME_NONNULL_BEGIN
|
|
5
|
-
|
|
6
|
-
@interface CodeRenderer : BaseRenderer
|
|
7
|
-
@end
|
|
8
|
-
|
|
9
|
-
NS_ASSUME_NONNULL_END
|
|
1
|
+
#pragma once
|
|
2
|
+
#import "BaseRenderer.h"
|
|
3
|
+
|
|
4
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
5
|
+
|
|
6
|
+
@interface CodeRenderer : BaseRenderer
|
|
7
|
+
@end
|
|
8
|
+
|
|
9
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
#import "CodeRenderer.h"
|
|
2
|
-
#import "CodeBackground.h"
|
|
3
|
-
#import "ENRMUIKit.h"
|
|
4
|
-
#import "FontUtils.h"
|
|
5
|
-
#import "TiptapASTNode.h"
|
|
6
|
-
#import "RenderContext.h"
|
|
7
|
-
#import "RendererFactory.h"
|
|
8
|
-
#import "StyleConfig.h"
|
|
9
|
-
#import <React/RCTFont.h>
|
|
10
|
-
|
|
11
|
-
@implementation CodeRenderer
|
|
12
|
-
|
|
13
|
-
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
14
|
-
into:(NSMutableAttributedString *)output
|
|
15
|
-
context:(RenderContext *)context
|
|
16
|
-
{
|
|
17
|
-
|
|
18
|
-
BlockStyle *blockStyle = [context getBlockStyle];
|
|
19
|
-
|
|
20
|
-
RCTUIColor *codeColor = _config.codeColor;
|
|
21
|
-
|
|
22
|
-
UIFont *blockFont = cachedFontFromBlockStyle(blockStyle, context);
|
|
23
|
-
|
|
24
|
-
UIFontDescriptorSymbolicTraits traits = blockFont.fontDescriptor.symbolicTraits;
|
|
25
|
-
UIFontWeight weight = (traits & UIFontDescriptorTraitBold) ? UIFontWeightBold : UIFontWeightRegular;
|
|
26
|
-
|
|
27
|
-
CGFloat codeFontSize = _config.codeFontSize > 0 ? _config.codeFontSize : blockStyle.fontSize;
|
|
28
|
-
|
|
29
|
-
// Both sizes above are unscaled; apply the same multiplier as the surrounding block font.
|
|
30
|
-
CGFloat fontScale = context.allowFontScaling ? RCTFontSizeMultiplierWithMax(context.maxFontSizeMultiplier) : 1.0;
|
|
31
|
-
|
|
32
|
-
NSString *codeFontFamily = _config.codeFontFamily;
|
|
33
|
-
UIFont *codeFont;
|
|
34
|
-
if (codeFontFamily.length > 0) {
|
|
35
|
-
NSString *weightStr = (weight == UIFontWeightBold) ? @"bold" : nil;
|
|
36
|
-
codeFont = [RCTFont updateFont:nil
|
|
37
|
-
withFamily:codeFontFamily
|
|
38
|
-
size:@(codeFontSize)
|
|
39
|
-
weight:weightStr
|
|
40
|
-
style:nil
|
|
41
|
-
variant:nil
|
|
42
|
-
scaleMultiplier:fontScale];
|
|
43
|
-
} else {
|
|
44
|
-
codeFont = [UIFont monospacedSystemFontOfSize:codeFontSize * fontScale weight:weight];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
NSUInteger start = output.length;
|
|
48
|
-
|
|
49
|
-
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
50
|
-
|
|
51
|
-
NSRange range = [RenderContext rangeForRenderedContent:output start:start];
|
|
52
|
-
if (range.length > 0) {
|
|
53
|
-
NSDictionary *existingAttributes = [output attributesAtIndex:start effectiveRange:NULL];
|
|
54
|
-
NSMutableDictionary *codeAttributes = [existingAttributes ?: @{} mutableCopy];
|
|
55
|
-
|
|
56
|
-
codeAttributes[NSFontAttributeName] = codeFont;
|
|
57
|
-
if (codeColor) {
|
|
58
|
-
codeAttributes[NSForegroundColorAttributeName] = codeColor;
|
|
59
|
-
}
|
|
60
|
-
codeAttributes[CodeAttributeName] = @YES;
|
|
61
|
-
|
|
62
|
-
// Store block line height directly for CodeBackground to use
|
|
63
|
-
codeAttributes[@"BlockLineHeight"] = @(UIFontLineHeight(blockFont));
|
|
64
|
-
|
|
65
|
-
[output setAttributes:codeAttributes range:range];
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
@end
|
|
1
|
+
#import "CodeRenderer.h"
|
|
2
|
+
#import "CodeBackground.h"
|
|
3
|
+
#import "ENRMUIKit.h"
|
|
4
|
+
#import "FontUtils.h"
|
|
5
|
+
#import "TiptapASTNode.h"
|
|
6
|
+
#import "RenderContext.h"
|
|
7
|
+
#import "RendererFactory.h"
|
|
8
|
+
#import "StyleConfig.h"
|
|
9
|
+
#import <React/RCTFont.h>
|
|
10
|
+
|
|
11
|
+
@implementation CodeRenderer
|
|
12
|
+
|
|
13
|
+
- (void)renderNodeContent:(TiptapASTNode *)node
|
|
14
|
+
into:(NSMutableAttributedString *)output
|
|
15
|
+
context:(RenderContext *)context
|
|
16
|
+
{
|
|
17
|
+
|
|
18
|
+
BlockStyle *blockStyle = [context getBlockStyle];
|
|
19
|
+
|
|
20
|
+
RCTUIColor *codeColor = _config.codeColor;
|
|
21
|
+
|
|
22
|
+
UIFont *blockFont = cachedFontFromBlockStyle(blockStyle, context);
|
|
23
|
+
|
|
24
|
+
UIFontDescriptorSymbolicTraits traits = blockFont.fontDescriptor.symbolicTraits;
|
|
25
|
+
UIFontWeight weight = (traits & UIFontDescriptorTraitBold) ? UIFontWeightBold : UIFontWeightRegular;
|
|
26
|
+
|
|
27
|
+
CGFloat codeFontSize = _config.codeFontSize > 0 ? _config.codeFontSize : blockStyle.fontSize;
|
|
28
|
+
|
|
29
|
+
// Both sizes above are unscaled; apply the same multiplier as the surrounding block font.
|
|
30
|
+
CGFloat fontScale = context.allowFontScaling ? RCTFontSizeMultiplierWithMax(context.maxFontSizeMultiplier) : 1.0;
|
|
31
|
+
|
|
32
|
+
NSString *codeFontFamily = _config.codeFontFamily;
|
|
33
|
+
UIFont *codeFont;
|
|
34
|
+
if (codeFontFamily.length > 0) {
|
|
35
|
+
NSString *weightStr = (weight == UIFontWeightBold) ? @"bold" : nil;
|
|
36
|
+
codeFont = [RCTFont updateFont:nil
|
|
37
|
+
withFamily:codeFontFamily
|
|
38
|
+
size:@(codeFontSize)
|
|
39
|
+
weight:weightStr
|
|
40
|
+
style:nil
|
|
41
|
+
variant:nil
|
|
42
|
+
scaleMultiplier:fontScale];
|
|
43
|
+
} else {
|
|
44
|
+
codeFont = [UIFont monospacedSystemFontOfSize:codeFontSize * fontScale weight:weight];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
NSUInteger start = output.length;
|
|
48
|
+
|
|
49
|
+
[_rendererFactory renderChildrenOfNode:node into:output context:context];
|
|
50
|
+
|
|
51
|
+
NSRange range = [RenderContext rangeForRenderedContent:output start:start];
|
|
52
|
+
if (range.length > 0) {
|
|
53
|
+
NSDictionary *existingAttributes = [output attributesAtIndex:start effectiveRange:NULL];
|
|
54
|
+
NSMutableDictionary *codeAttributes = [existingAttributes ?: @{} mutableCopy];
|
|
55
|
+
|
|
56
|
+
codeAttributes[NSFontAttributeName] = codeFont;
|
|
57
|
+
if (codeColor) {
|
|
58
|
+
codeAttributes[NSForegroundColorAttributeName] = codeColor;
|
|
59
|
+
}
|
|
60
|
+
codeAttributes[CodeAttributeName] = @YES;
|
|
61
|
+
|
|
62
|
+
// Store block line height directly for CodeBackground to use
|
|
63
|
+
codeAttributes[@"BlockLineHeight"] = @(UIFontLineHeight(blockFont));
|
|
64
|
+
|
|
65
|
+
[output setAttributes:codeAttributes range:range];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@end
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
#import <Foundation/Foundation.h>
|
|
3
|
-
|
|
4
|
-
@class RenderContext;
|
|
5
|
-
@class StyleConfig;
|
|
6
|
-
|
|
7
|
-
NS_ASSUME_NONNULL_BEGIN
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Renders a GFM blockquote's own prose content - the nodes left after nested quotes, code blocks and
|
|
11
|
-
* other block segments have been split out - as blockquote text.
|
|
12
|
-
*
|
|
13
|
-
* It decorates a generic AttributedRenderer pass rather than owning the render envelope itself:
|
|
14
|
-
* -pushOnContext: enters the blockquote baseline block style (+depth) so text picks up the quote's
|
|
15
|
-
* font/color and paragraphs render tight (currentBlockType == Blockquote), matching the commonmark
|
|
16
|
-
* path; -postProcess: applies the quote's line height once the string is complete. It draws no
|
|
17
|
-
* border/background/padding - the ENRMBlockquoteContainerView draws the box.
|
|
18
|
-
*/
|
|
19
|
-
@interface ENRMBlockquoteTextRenderer : NSObject
|
|
20
|
-
- (instancetype)initWithConfig:(StyleConfig *)config;
|
|
21
|
-
- (void)pushOnContext:(RenderContext *)context;
|
|
22
|
-
- (void)postProcess:(NSMutableAttributedString *)text;
|
|
23
|
-
@end
|
|
24
|
-
|
|
25
|
-
NS_ASSUME_NONNULL_END
|
|
1
|
+
#pragma once
|
|
2
|
+
#import <Foundation/Foundation.h>
|
|
3
|
+
|
|
4
|
+
@class RenderContext;
|
|
5
|
+
@class StyleConfig;
|
|
6
|
+
|
|
7
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Renders a GFM blockquote's own prose content - the nodes left after nested quotes, code blocks and
|
|
11
|
+
* other block segments have been split out - as blockquote text.
|
|
12
|
+
*
|
|
13
|
+
* It decorates a generic AttributedRenderer pass rather than owning the render envelope itself:
|
|
14
|
+
* -pushOnContext: enters the blockquote baseline block style (+depth) so text picks up the quote's
|
|
15
|
+
* font/color and paragraphs render tight (currentBlockType == Blockquote), matching the commonmark
|
|
16
|
+
* path; -postProcess: applies the quote's line height once the string is complete. It draws no
|
|
17
|
+
* border/background/padding - the ENRMBlockquoteContainerView draws the box.
|
|
18
|
+
*/
|
|
19
|
+
@interface ENRMBlockquoteTextRenderer : NSObject
|
|
20
|
+
- (instancetype)initWithConfig:(StyleConfig *)config;
|
|
21
|
+
- (void)pushOnContext:(RenderContext *)context;
|
|
22
|
+
- (void)postProcess:(NSMutableAttributedString *)text;
|
|
23
|
+
@end
|
|
24
|
+
|
|
25
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
#import "ENRMBlockquoteTextRenderer.h"
|
|
2
|
-
#import "ParagraphStyleUtils.h"
|
|
3
|
-
#import "RenderContext.h"
|
|
4
|
-
#import "StyleConfig.h"
|
|
5
|
-
|
|
6
|
-
@implementation ENRMBlockquoteTextRenderer {
|
|
7
|
-
StyleConfig *_config;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
- (instancetype)initWithConfig:(StyleConfig *)config
|
|
11
|
-
{
|
|
12
|
-
self = [super init];
|
|
13
|
-
if (self) {
|
|
14
|
-
_config = config;
|
|
15
|
-
}
|
|
16
|
-
return self;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
- (void)pushOnContext:(RenderContext *)context
|
|
20
|
-
{
|
|
21
|
-
// Only set the blockquote baseline block style (tight paragraphs + the quote's font/color).
|
|
22
|
-
// Unlike the commonmark inline path we do NOT bump blockquoteDepth: the ENRMBlockquoteContainerView
|
|
23
|
-
// already insets its content by the quote's border/gap/padding, so bumping it here would make
|
|
24
|
-
// ListItemRenderer add a second blockquoteIndentForDepth on top and over-indent nested lists.
|
|
25
|
-
[context setBlockStyle:BlockTypeBlockquote font:_config.blockquoteFont color:_config.blockquoteColor headingLevel:0];
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
- (void)postProcess:(NSMutableAttributedString *)text
|
|
29
|
-
{
|
|
30
|
-
// Stamp the quote's line height per paragraph. applyLineHeight copies the paragraph style at the
|
|
31
|
-
// range start over the whole range, so applying it across the entire run would overwrite every
|
|
32
|
-
// paragraph with the first one's style - wiping each list item's firstLineHeadIndent/headIndent
|
|
33
|
-
// (the marker draws from a separate attribute, so it would then land on top of un-indented text).
|
|
34
|
-
CGFloat lineHeight = [_config blockquoteLineHeight];
|
|
35
|
-
if (text.length == 0 || lineHeight <= 0) {
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
NSString *string = text.string;
|
|
39
|
-
NSUInteger location = 0;
|
|
40
|
-
while (location < text.length) {
|
|
41
|
-
NSRange paragraph = [string paragraphRangeForRange:NSMakeRange(location, 0)];
|
|
42
|
-
applyLineHeight(text, paragraph, lineHeight);
|
|
43
|
-
applyBaselineOffset(text, paragraph);
|
|
44
|
-
location = NSMaxRange(paragraph);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
@end
|
|
1
|
+
#import "ENRMBlockquoteTextRenderer.h"
|
|
2
|
+
#import "ParagraphStyleUtils.h"
|
|
3
|
+
#import "RenderContext.h"
|
|
4
|
+
#import "StyleConfig.h"
|
|
5
|
+
|
|
6
|
+
@implementation ENRMBlockquoteTextRenderer {
|
|
7
|
+
StyleConfig *_config;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
- (instancetype)initWithConfig:(StyleConfig *)config
|
|
11
|
+
{
|
|
12
|
+
self = [super init];
|
|
13
|
+
if (self) {
|
|
14
|
+
_config = config;
|
|
15
|
+
}
|
|
16
|
+
return self;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
- (void)pushOnContext:(RenderContext *)context
|
|
20
|
+
{
|
|
21
|
+
// Only set the blockquote baseline block style (tight paragraphs + the quote's font/color).
|
|
22
|
+
// Unlike the commonmark inline path we do NOT bump blockquoteDepth: the ENRMBlockquoteContainerView
|
|
23
|
+
// already insets its content by the quote's border/gap/padding, so bumping it here would make
|
|
24
|
+
// ListItemRenderer add a second blockquoteIndentForDepth on top and over-indent nested lists.
|
|
25
|
+
[context setBlockStyle:BlockTypeBlockquote font:_config.blockquoteFont color:_config.blockquoteColor headingLevel:0];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
- (void)postProcess:(NSMutableAttributedString *)text
|
|
29
|
+
{
|
|
30
|
+
// Stamp the quote's line height per paragraph. applyLineHeight copies the paragraph style at the
|
|
31
|
+
// range start over the whole range, so applying it across the entire run would overwrite every
|
|
32
|
+
// paragraph with the first one's style - wiping each list item's firstLineHeadIndent/headIndent
|
|
33
|
+
// (the marker draws from a separate attribute, so it would then land on top of un-indented text).
|
|
34
|
+
CGFloat lineHeight = [_config blockquoteLineHeight];
|
|
35
|
+
if (text.length == 0 || lineHeight <= 0) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
NSString *string = text.string;
|
|
39
|
+
NSUInteger location = 0;
|
|
40
|
+
while (location < text.length) {
|
|
41
|
+
NSRange paragraph = [string paragraphRangeForRange:NSMakeRange(location, 0)];
|
|
42
|
+
applyLineHeight(text, paragraph, lineHeight);
|
|
43
|
+
applyBaselineOffset(text, paragraph);
|
|
44
|
+
location = NSMaxRange(paragraph);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
#import "BaseRenderer.h"
|
|
3
|
-
|
|
4
|
-
@interface EmphasisRenderer : BaseRenderer
|
|
5
|
-
@end
|
|
1
|
+
#pragma once
|
|
2
|
+
#import "BaseRenderer.h"
|
|
3
|
+
|
|
4
|
+
@interface EmphasisRenderer : BaseRenderer
|
|
5
|
+
@end
|