@mathers101/react-native-render-rich-text 0.1.10 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -20
- package/README.md +140 -140
- package/ReactNativeRenderRichText.podspec +23 -23
- package/android/build.gradle +86 -86
- package/android/consumer-rules.pro +3 -3
- package/android/src/main/AndroidManifest.xml +2 -2
- package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextLayoutManager.kt +24 -24
- package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextPackage.kt +13 -13
- package/android/src/main/java/com/renderrichtext/MeasurementStore.kt +644 -644
- package/android/src/main/java/com/renderrichtext/accessibility/AccessibilityLabels.kt +17 -17
- package/android/src/main/java/com/renderrichtext/accessibility/AccessibleTiptapTextView.kt +112 -112
- package/android/src/main/java/com/renderrichtext/accessibility/TiptapAccessibilityHelper.kt +576 -576
- package/android/src/main/java/com/renderrichtext/events/CodeBlockPressEvent.kt +24 -24
- package/android/src/main/java/com/renderrichtext/events/ContextMenuItemPressEvent.kt +28 -28
- package/android/src/main/java/com/renderrichtext/events/CopyPressEvent.kt +24 -24
- package/android/src/main/java/com/renderrichtext/events/ImagePressEvent.kt +25 -25
- package/android/src/main/java/com/renderrichtext/events/LatexErrorEvent.kt +29 -29
- package/android/src/main/java/com/renderrichtext/events/LinkLongPressEvent.kt +23 -23
- package/android/src/main/java/com/renderrichtext/events/LinkPressEvent.kt +23 -23
- package/android/src/main/java/com/renderrichtext/events/MentionLongPressEvent.kt +25 -25
- package/android/src/main/java/com/renderrichtext/events/MentionPressEvent.kt +25 -25
- package/android/src/main/java/com/renderrichtext/events/TaskListItemPressEvent.kt +26 -26
- package/android/src/main/java/com/renderrichtext/math/LatexErrorReporter.kt +9 -9
- package/android/src/main/java/com/renderrichtext/parser/Parser.kt +59 -59
- package/android/src/main/java/com/renderrichtext/parser/TextLinkMatching.kt +35 -35
- package/android/src/main/java/com/renderrichtext/renderer/BaselineShiftRenderer.kt +45 -45
- package/android/src/main/java/com/renderrichtext/renderer/BlankLineRenderer.kt +39 -39
- package/android/src/main/java/com/renderrichtext/renderer/BlockquoteRenderer.kt +243 -243
- package/android/src/main/java/com/renderrichtext/renderer/BlockquoteTextRenderer.kt +56 -56
- package/android/src/main/java/com/renderrichtext/renderer/CodeBlockRenderer.kt +135 -135
- package/android/src/main/java/com/renderrichtext/renderer/CodeRenderer.kt +37 -37
- package/android/src/main/java/com/renderrichtext/renderer/EmphasisRenderer.kt +28 -28
- package/android/src/main/java/com/renderrichtext/renderer/HeadingRenderer.kt +81 -81
- package/android/src/main/java/com/renderrichtext/renderer/HighlightRenderer.kt +26 -26
- package/android/src/main/java/com/renderrichtext/renderer/LineBreakRenderer.kt +17 -17
- package/android/src/main/java/com/renderrichtext/renderer/LinkRenderer.kt +90 -90
- package/android/src/main/java/com/renderrichtext/renderer/ListContextManager.kt +109 -109
- package/android/src/main/java/com/renderrichtext/renderer/ListItemRenderer.kt +211 -211
- package/android/src/main/java/com/renderrichtext/renderer/ListRenderer.kt +133 -133
- package/android/src/main/java/com/renderrichtext/renderer/MentionRenderer.kt +85 -85
- package/android/src/main/java/com/renderrichtext/renderer/ParagraphRenderer.kt +91 -91
- package/android/src/main/java/com/renderrichtext/renderer/Renderer.kt +148 -148
- package/android/src/main/java/com/renderrichtext/renderer/SoftBreakRenderer.kt +17 -17
- package/android/src/main/java/com/renderrichtext/renderer/SpanStyleCache.kt +143 -143
- package/android/src/main/java/com/renderrichtext/renderer/StrikethroughRenderer.kt +28 -28
- package/android/src/main/java/com/renderrichtext/renderer/StrongRenderer.kt +28 -28
- package/android/src/main/java/com/renderrichtext/renderer/TextRenderer.kt +31 -31
- package/android/src/main/java/com/renderrichtext/renderer/ThematicBreakRenderer.kt +46 -46
- package/android/src/main/java/com/renderrichtext/renderer/UnderlineRenderer.kt +28 -28
- package/android/src/main/java/com/renderrichtext/spans/BaseListSpan.kt +164 -164
- package/android/src/main/java/com/renderrichtext/spans/BaselineShiftSpan.kt +27 -27
- package/android/src/main/java/com/renderrichtext/spans/BlockquoteSpan.kt +302 -302
- package/android/src/main/java/com/renderrichtext/spans/CodeBackgroundSpan.kt +205 -205
- package/android/src/main/java/com/renderrichtext/spans/CodeBlockSpan.kt +216 -216
- package/android/src/main/java/com/renderrichtext/spans/CodeSpan.kt +32 -32
- package/android/src/main/java/com/renderrichtext/spans/EmphasisSpan.kt +42 -42
- package/android/src/main/java/com/renderrichtext/spans/FadeInSpan.kt +29 -29
- package/android/src/main/java/com/renderrichtext/spans/HeadingSpan.kt +38 -38
- package/android/src/main/java/com/renderrichtext/spans/HighlightSpan.kt +80 -80
- package/android/src/main/java/com/renderrichtext/spans/ImageSpan.kt +481 -481
- package/android/src/main/java/com/renderrichtext/spans/InlineBackgroundGeometry.kt +42 -42
- package/android/src/main/java/com/renderrichtext/spans/LineHeightSpan.kt +39 -39
- package/android/src/main/java/com/renderrichtext/spans/LinkPillIconCache.kt +154 -154
- package/android/src/main/java/com/renderrichtext/spans/LinkPillSpan.kt +381 -381
- package/android/src/main/java/com/renderrichtext/spans/LinkSpan.kt +68 -68
- package/android/src/main/java/com/renderrichtext/spans/ListItemSpacingSpan.kt +33 -33
- package/android/src/main/java/com/renderrichtext/spans/ListMarkerAnchorSpan.kt +38 -38
- package/android/src/main/java/com/renderrichtext/spans/MarginBottomSpan.kt +76 -76
- package/android/src/main/java/com/renderrichtext/spans/MentionChipSpan.kt +132 -132
- package/android/src/main/java/com/renderrichtext/spans/MentionSpan.kt +46 -46
- package/android/src/main/java/com/renderrichtext/spans/OrderedListSpan.kt +127 -127
- package/android/src/main/java/com/renderrichtext/spans/SpoilerSpan.kt +33 -33
- package/android/src/main/java/com/renderrichtext/spans/StrikethroughSpan.kt +12 -12
- package/android/src/main/java/com/renderrichtext/spans/StrongSpan.kt +39 -39
- package/android/src/main/java/com/renderrichtext/spans/TaskListSpan.kt +143 -143
- package/android/src/main/java/com/renderrichtext/spans/TextSpan.kt +26 -26
- package/android/src/main/java/com/renderrichtext/spans/ThematicBreakSpan.kt +69 -69
- package/android/src/main/java/com/renderrichtext/spans/UnorderedListSpan.kt +96 -96
- package/android/src/main/java/com/renderrichtext/spoiler/SpoilerStubs.kt +46 -46
- package/android/src/main/java/com/renderrichtext/styles/BaseBlockStyle.kt +11 -11
- package/android/src/main/java/com/renderrichtext/styles/BlockquoteStyle.kt +83 -83
- package/android/src/main/java/com/renderrichtext/styles/CodeBlockStyle.kt +80 -80
- package/android/src/main/java/com/renderrichtext/styles/CodeStyle.kt +26 -26
- package/android/src/main/java/com/renderrichtext/styles/EmphasisStyle.kt +21 -21
- package/android/src/main/java/com/renderrichtext/styles/FactoidStyle.kt +21 -21
- package/android/src/main/java/com/renderrichtext/styles/HeadingStyle.kt +33 -33
- package/android/src/main/java/com/renderrichtext/styles/HighlightStyle.kt +19 -19
- package/android/src/main/java/com/renderrichtext/styles/ImageStyle.kt +29 -29
- package/android/src/main/java/com/renderrichtext/styles/InlineImageStyle.kt +17 -17
- package/android/src/main/java/com/renderrichtext/styles/InlineMathStyle.kt +17 -17
- package/android/src/main/java/com/renderrichtext/styles/LinkPillContent.kt +36 -36
- package/android/src/main/java/com/renderrichtext/styles/LinkPillStyle.kt +44 -44
- package/android/src/main/java/com/renderrichtext/styles/LinkStyle.kt +23 -23
- package/android/src/main/java/com/renderrichtext/styles/LinkVariantEntry.kt +34 -34
- package/android/src/main/java/com/renderrichtext/styles/ListStyle.kt +65 -65
- package/android/src/main/java/com/renderrichtext/styles/MathStyle.kt +29 -29
- package/android/src/main/java/com/renderrichtext/styles/MentionStyle.kt +19 -19
- package/android/src/main/java/com/renderrichtext/styles/ParagraphStyle.kt +33 -33
- package/android/src/main/java/com/renderrichtext/styles/SpoilerStyle.kt +27 -27
- package/android/src/main/java/com/renderrichtext/styles/StrikethroughStyle.kt +17 -17
- package/android/src/main/java/com/renderrichtext/styles/StrongStyle.kt +21 -21
- package/android/src/main/java/com/renderrichtext/styles/StyleConfig.kt +411 -411
- package/android/src/main/java/com/renderrichtext/styles/StyleParser.kt +92 -92
- package/android/src/main/java/com/renderrichtext/styles/SubscriptStyle.kt +16 -16
- package/android/src/main/java/com/renderrichtext/styles/SuperscriptStyle.kt +16 -16
- package/android/src/main/java/com/renderrichtext/styles/TableStyle.kt +75 -75
- package/android/src/main/java/com/renderrichtext/styles/TaskListStyle.kt +29 -29
- package/android/src/main/java/com/renderrichtext/styles/TextAlignment.kt +32 -32
- package/android/src/main/java/com/renderrichtext/styles/ThematicBreakStyle.kt +23 -23
- package/android/src/main/java/com/renderrichtext/styles/UnderlineStyle.kt +17 -17
- package/android/src/main/java/com/renderrichtext/styles/VideoStyle.kt +31 -31
- package/android/src/main/java/com/renderrichtext/utils/common/BorderStyleUtils.kt +86 -86
- package/android/src/main/java/com/renderrichtext/utils/common/BreakStrategyUtils.kt +32 -32
- package/android/src/main/java/com/renderrichtext/utils/common/CodeBlockHighlighter.kt +36 -36
- package/android/src/main/java/com/renderrichtext/utils/common/CodeBlockNode.kt +42 -42
- package/android/src/main/java/com/renderrichtext/utils/common/EllipsizeUtils.kt +27 -27
- package/android/src/main/java/com/renderrichtext/utils/common/EnrichedTiptapAncestorUtils.kt +10 -10
- package/android/src/main/java/com/renderrichtext/utils/common/FeatureFlags.kt +9 -9
- package/android/src/main/java/com/renderrichtext/utils/common/LinkRecognitionProps.kt +31 -31
- package/android/src/main/java/com/renderrichtext/utils/common/LinkRegexConfig.kt +56 -56
- package/android/src/main/java/com/renderrichtext/utils/common/MotionPreferences.kt +18 -18
- package/android/src/main/java/com/renderrichtext/utils/common/ReadableMapExtensions.kt +28 -28
- package/android/src/main/java/com/renderrichtext/utils/common/layout/RTLUtils.kt +6 -6
- package/android/src/main/java/com/renderrichtext/utils/common/serialization/TiptapASTSerializer.kt +368 -368
- package/android/src/main/java/com/renderrichtext/utils/text/ImageCache.kt +88 -88
- package/android/src/main/java/com/renderrichtext/utils/text/ImageDownloader.kt +203 -203
- package/android/src/main/java/com/renderrichtext/utils/text/LocalImageLoader.kt +167 -167
- package/android/src/main/java/com/renderrichtext/utils/text/TailFadeInAnimator.kt +84 -84
- package/android/src/main/java/com/renderrichtext/utils/text/conversion/HTMLGenerator.kt +1105 -1105
- package/android/src/main/java/com/renderrichtext/utils/text/conversion/TiptapExtractor.kt +423 -423
- package/android/src/main/java/com/renderrichtext/utils/text/extensions/ParagraphUtils.kt +9 -9
- package/android/src/main/java/com/renderrichtext/utils/text/extensions/SpannableExtensions.kt +9 -9
- package/android/src/main/java/com/renderrichtext/utils/text/extensions/TextPaintExtensions.kt +76 -76
- package/android/src/main/java/com/renderrichtext/utils/text/interaction/CheckboxTouchHelper.kt +61 -61
- package/android/src/main/java/com/renderrichtext/utils/text/interaction/TaskListTapUtils.kt +286 -286
- package/android/src/main/java/com/renderrichtext/utils/text/span/ApplyLineHeight.kt +39 -39
- package/android/src/main/java/com/renderrichtext/utils/text/span/BlockSpacing.kt +142 -142
- package/android/src/main/java/com/renderrichtext/utils/text/span/SpanFlags.kt +43 -43
- package/android/src/main/java/com/renderrichtext/utils/text/span/WidthAwareSpans.kt +30 -30
- package/android/src/main/java/com/renderrichtext/utils/text/view/CodeBlockPressHost.kt +15 -15
- package/android/src/main/java/com/renderrichtext/utils/text/view/ImagePressHost.kt +19 -19
- package/android/src/main/java/com/renderrichtext/utils/text/view/SelectionActionMode.kt +235 -235
- package/android/src/main/java/com/renderrichtext/utils/text/view/TextSelectionColors.kt +48 -48
- package/android/src/main/java/com/renderrichtext/utils/text/view/TextViewSetup.kt +119 -119
- package/android/src/main/java/com/renderrichtext/views/ContextMenuPopup.kt +217 -217
- package/android/src/main/java/com/renderrichtext/views/CopyGlyph.kt +101 -101
- package/android/src/main/java/com/renderrichtext/views/WrapGlyph.kt +40 -40
- package/android/src/main/jni/CMakeLists.txt +52 -52
- package/android/src/main/jni/react/renderer/components/RichTextSpec/ComponentDescriptors.h +30 -30
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextComponentDescriptor.h +29 -29
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextMeasurementManager.cpp +45 -45
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextMeasurementManager.h +21 -21
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextShadowNode.cpp +38 -38
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextShadowNode.h +53 -53
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextState.cpp +9 -9
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextState.h +24 -24
- package/android/src/main/jni/react/renderer/components/RichTextSpec/conversions.h +40 -40
- package/cpp/parser/TiptapParser.hpp +13 -13
- package/cpp/vendor/nlohmann/json.hpp +24765 -24765
- package/ios/EnrichedTiptapText.h +27 -27
- package/ios/attachments/ENRMImageAttachment.h +51 -51
- package/ios/attachments/ENRMImageAttachment.m +398 -398
- package/ios/attachments/ENRMLinkPillAttachment.h +47 -47
- package/ios/attachments/ENRMLinkPillAttachment.m +324 -324
- package/ios/attachments/ENRMLinkPillIconCache.h +28 -28
- package/ios/attachments/ENRMLinkPillIconCache.m +181 -181
- package/ios/attachments/ENRMLinkPillText.h +27 -27
- package/ios/attachments/ENRMLinkPillText.m +118 -118
- package/ios/attachments/ENRMMathInlineAttachment.h +7 -7
- package/ios/attachments/ENRMMathInlineAttachment.m +4 -4
- package/ios/attachments/ThematicBreakAttachment.h +15 -15
- package/ios/attachments/ThematicBreakAttachment.m +33 -33
- package/ios/internals/ENRMViewFreeMeasurement.h +208 -208
- package/ios/internals/EnrichedTiptapTextComponentDescriptor.h +19 -19
- package/ios/internals/EnrichedTiptapTextShadowNode.h +43 -43
- package/ios/internals/EnrichedTiptapTextShadowNode.mm +69 -69
- package/ios/internals/EnrichedTiptapTextState.h +24 -24
- package/ios/internals/MeasurementCache.h +308 -308
- package/ios/internals/ShadowMeasurementUtils.h +145 -145
- package/ios/parser/ENRMTextLinkAttributes.h +7 -7
- package/ios/parser/ENRMTiptapParser.h +33 -33
- package/ios/parser/ENRMTiptapParser.mm +73 -73
- package/ios/parser/TiptapASTNode.m +52 -52
- package/ios/renderer/AttributedRenderer.h +23 -23
- package/ios/renderer/AttributedRenderer.m +229 -229
- package/ios/renderer/BaseRenderer.h +33 -33
- package/ios/renderer/BaseRenderer.m +46 -46
- package/ios/renderer/BaselineShiftTextAttributes.h +10 -10
- package/ios/renderer/BaselineShiftTextAttributes.m +26 -26
- package/ios/renderer/BlankLineRenderer.h +4 -4
- package/ios/renderer/BlankLineRenderer.m +51 -51
- package/ios/renderer/BlockquoteRenderer.h +6 -6
- package/ios/renderer/BlockquoteRenderer.m +258 -258
- package/ios/renderer/CodeBlockRenderer.h +9 -9
- package/ios/renderer/CodeBlockRenderer.m +99 -99
- package/ios/renderer/CodeRenderer.h +9 -9
- package/ios/renderer/CodeRenderer.m +69 -69
- package/ios/renderer/ENRMBlockquoteTextRenderer.h +25 -25
- package/ios/renderer/ENRMBlockquoteTextRenderer.m +48 -48
- package/ios/renderer/EmphasisRenderer.h +5 -5
- package/ios/renderer/EmphasisRenderer.m +99 -99
- package/ios/renderer/HeadingRenderer.h +6 -6
- package/ios/renderer/HeadingRenderer.m +102 -102
- package/ios/renderer/HighlightRenderer.h +7 -7
- package/ios/renderer/HighlightRenderer.m +33 -33
- package/ios/renderer/LinkRenderer.h +6 -6
- package/ios/renderer/LinkRenderer.m +157 -157
- package/ios/renderer/ListItemRenderer.h +24 -24
- package/ios/renderer/ListItemRenderer.m +283 -283
- package/ios/renderer/ListRenderer.h +13 -13
- package/ios/renderer/ListRenderer.m +126 -126
- package/ios/renderer/MentionRenderer.h +9 -9
- package/ios/renderer/MentionRenderer.m +96 -96
- package/ios/renderer/NodeRenderer.h +8 -8
- package/ios/renderer/ParagraphRenderer.h +6 -6
- package/ios/renderer/ParagraphRenderer.m +85 -85
- package/ios/renderer/RenderContext.h +145 -145
- package/ios/renderer/RenderContext.m +402 -402
- package/ios/renderer/RendererFactory.h +12 -12
- package/ios/renderer/StrikethroughRenderer.h +5 -5
- package/ios/renderer/StrikethroughRenderer.m +30 -30
- package/ios/renderer/StrongRenderer.h +5 -5
- package/ios/renderer/StrongRenderer.m +87 -87
- package/ios/renderer/TextRenderer.h +6 -6
- package/ios/renderer/TextRenderer.m +18 -18
- package/ios/renderer/ThematicBreakRenderer.h +4 -4
- package/ios/renderer/ThematicBreakRenderer.m +41 -41
- package/ios/renderer/UnderlineRenderer.h +4 -4
- package/ios/renderer/UnderlineRenderer.m +41 -41
- package/ios/styles/ENRMFontSlot.h +12 -12
- package/ios/styles/ENRMFontSlot.m +24 -24
- package/ios/styles/StyleConfig.h +488 -488
- package/ios/styles/StyleConfig.mm +2820 -2820
- package/ios/utils/AccessibilityInfo.h +35 -35
- package/ios/utils/AccessibilityInfo.m +24 -24
- package/ios/utils/BlockquoteBorder.h +26 -26
- package/ios/utils/BlockquoteBorder.m +294 -294
- package/ios/utils/CodeBackground.h +19 -19
- package/ios/utils/CodeBackground.m +196 -196
- package/ios/utils/CodeBlockBackground.h +17 -17
- package/ios/utils/CodeBlockBackground.m +102 -102
- package/ios/utils/ContextMenuUtils.h +76 -76
- package/ios/utils/ContextMenuUtils.mm +75 -75
- package/ios/utils/ENRMAccessibilityLabels.h +40 -40
- package/ios/utils/ENRMAccessibilityLabels.m +5 -5
- package/ios/utils/ENRMAsyncRenderCoordinator.h +24 -24
- package/ios/utils/ENRMAsyncRenderCoordinator.m +37 -37
- package/ios/utils/ENRMAtomicSize.h +65 -65
- package/ios/utils/ENRMCodeBlockContent.h +37 -37
- package/ios/utils/ENRMCodeBlockContent.mm +89 -89
- package/ios/utils/ENRMFeatureFlags.h +25 -25
- package/ios/utils/ENRMImageDownloader.h +30 -30
- package/ios/utils/ENRMImageDownloader.m +168 -168
- package/ios/utils/ENRMLatexErrorCoordinator.h +27 -27
- package/ios/utils/ENRMLatexErrorCoordinator.mm +75 -75
- package/ios/utils/ENRMLatexErrorReporting.h +13 -13
- package/ios/utils/ENRMLinkContextMenus.h +93 -93
- package/ios/utils/ENRMLinkContextMenus.m +178 -178
- package/ios/utils/ENRMLinkRegexConfig.h +30 -30
- package/ios/utils/ENRMLinkRegexConfig.mm +104 -104
- package/ios/utils/ENRMLinkRegexProps.h +23 -23
- package/ios/utils/ENRMLocalImageLoader.h +35 -35
- package/ios/utils/ENRMLocalImageLoader.m +111 -111
- package/ios/utils/ENRMMenuAction.h +27 -27
- package/ios/utils/ENRMMenuAction.m +33 -33
- package/ios/utils/ENRMSpoilerOverlayManager.h +15 -15
- package/ios/utils/ENRMSpoilerOverlayManager.m +19 -19
- package/ios/utils/ENRMSpoilerTapUtils.h +6 -6
- package/ios/utils/ENRMSpoilerTapUtils.m +11 -11
- package/ios/utils/ENRMTailFadeInAnimator.h +16 -16
- package/ios/utils/ENRMTailFadeInAnimator.m +161 -161
- package/ios/utils/ENRMTextHitTest.h +23 -23
- package/ios/utils/ENRMTextHitTest.m +20 -20
- package/ios/utils/ENRMTextInteractionUtils.h +20 -20
- package/ios/utils/ENRMTextInteractionUtils.m +15 -15
- package/ios/utils/ENRMTextRenderer.h +38 -38
- package/ios/utils/ENRMTextRenderer.m +54 -54
- package/ios/utils/ENRMTextViewSetup.h +132 -132
- package/ios/utils/ENRMUIKit.h +429 -429
- package/ios/utils/EditMenuUtils.h +105 -105
- package/ios/utils/EditMenuUtils.m +143 -143
- package/ios/utils/FontScaleObserver.h +10 -10
- package/ios/utils/FontScaleObserver.m +55 -55
- package/ios/utils/FontUtils.h +31 -31
- package/ios/utils/FontUtils.m +63 -63
- package/ios/utils/HTMLGenerator.h +25 -25
- package/ios/utils/HTMLGenerator.m +1041 -1041
- package/ios/utils/HeightUpdateUtils.h +25 -25
- package/ios/utils/ImageRequestHeaderUtils.h +35 -35
- package/ios/utils/LastElementUtils.h +97 -97
- package/ios/utils/LinkContextMenuUtils.h +55 -55
- package/ios/utils/LinkPillContentUtils.h +46 -46
- package/ios/utils/ListMarkerDrawer.h +15 -15
- package/ios/utils/ListMarkerDrawer.m +239 -239
- package/ios/utils/MentionBackground.h +26 -26
- package/ios/utils/MentionBackground.m +86 -86
- package/ios/utils/ParagraphStyleUtils.h +87 -87
- package/ios/utils/ParagraphStyleUtils.m +484 -484
- package/ios/utils/PasteboardUtils.h +48 -48
- package/ios/utils/PasteboardUtils.m +166 -166
- package/ios/utils/RTFExportUtils.h +24 -24
- package/ios/utils/RTFExportUtils.m +299 -299
- package/ios/utils/SelectionColorUtils.h +14 -14
- package/ios/utils/StylePropsUtils.h +1340 -1340
- package/ios/utils/TaskListTapUtils.h +6 -6
- package/ios/utils/TaskListTapUtils.m +14 -14
- package/ios/utils/TextViewLayoutManager.h +14 -14
- package/ios/utils/TiptapAccessibilityElementBuilder.h +43 -43
- package/ios/utils/TiptapAccessibilityElementBuilder.m +432 -432
- package/ios/utils/TiptapExtractor.h +17 -17
- package/ios/utils/TiptapExtractor.m +367 -367
- package/ios/views/ENRMTiptapTextView.h +25 -25
- package/ios/views/ENRMTiptapTextView.m +247 -247
- package/package.json +65 -70
- package/react-native.config.js +10 -10
- package/src/admonitionDefaults.ts +58 -58
- package/src/darkModeTextStyle.ts +99 -99
- package/src/headingDefaults.ts +21 -21
- package/src/index.tsx +4 -4
- package/src/linkVariantUtils.ts +120 -120
- package/src/normalizeTiptapStyle.ts +397 -397
- package/src/rn-globals.d.ts +1 -1
- package/src/styleUtils.ts +107 -107
- package/src/types/TiptapStyle.ts +532 -532
- package/src/types/TiptapStyleInternal.ts +299 -299
- package/src/types/linkPill.ts +9 -9
- package/src/utils/isDev.ts +4 -4
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
#import "MentionBackground.h"
|
|
2
|
-
|
|
3
|
-
NSString *const MentionAttributeName = @"Mention";
|
|
4
|
-
NSString *const MentionIdAttributeName = @"mentionId";
|
|
5
|
-
NSString *const MentionLabelAttributeName = @"mentionLabel";
|
|
6
|
-
NSString *const MentionBackgroundColorAttributeName = @"MentionBackgroundColor";
|
|
7
|
-
|
|
8
|
-
const CGFloat ENRMMentionPaddingX = 3.0;
|
|
9
|
-
const CGFloat ENRMMentionPaddingY = 1.0;
|
|
10
|
-
static const CGFloat kMentionCornerRadius = 10.0;
|
|
11
|
-
|
|
12
|
-
@implementation MentionBackground
|
|
13
|
-
|
|
14
|
-
- (void)drawBackgroundsForGlyphRange:(NSRange)glyphsToShow
|
|
15
|
-
layoutManager:(NSLayoutManager *)layoutManager
|
|
16
|
-
textContainer:(NSTextContainer *)textContainer
|
|
17
|
-
atPoint:(CGPoint)origin
|
|
18
|
-
{
|
|
19
|
-
NSTextStorage *textStorage = layoutManager.textStorage;
|
|
20
|
-
if (!textStorage || textStorage.length == 0)
|
|
21
|
-
return;
|
|
22
|
-
|
|
23
|
-
NSRange charRange = [layoutManager characterRangeForGlyphRange:glyphsToShow actualGlyphRange:NULL];
|
|
24
|
-
if (charRange.location == NSNotFound || charRange.length == 0)
|
|
25
|
-
return;
|
|
26
|
-
|
|
27
|
-
[textStorage enumerateAttribute:MentionAttributeName
|
|
28
|
-
inRange:NSMakeRange(0, textStorage.length)
|
|
29
|
-
options:0
|
|
30
|
-
usingBlock:^(id value, NSRange range, BOOL *stop) {
|
|
31
|
-
(void)stop;
|
|
32
|
-
if (!value || range.length == 0)
|
|
33
|
-
return;
|
|
34
|
-
if (NSIntersectionRange(range, charRange).length == 0)
|
|
35
|
-
return;
|
|
36
|
-
|
|
37
|
-
RCTUIColor *backgroundColor = [textStorage attribute:MentionBackgroundColorAttributeName
|
|
38
|
-
atIndex:range.location
|
|
39
|
-
effectiveRange:NULL];
|
|
40
|
-
if (!backgroundColor)
|
|
41
|
-
return;
|
|
42
|
-
|
|
43
|
-
[self drawMentionForRange:range
|
|
44
|
-
layoutManager:layoutManager
|
|
45
|
-
textContainer:textContainer
|
|
46
|
-
atPoint:origin
|
|
47
|
-
backgroundColor:backgroundColor];
|
|
48
|
-
}];
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/// One rounded rect per line fragment. A wrapped mention paints `box-decoration-break: clone`,
|
|
52
|
-
/// so each line keeps its own 10pt corners instead of stretching into a bar.
|
|
53
|
-
- (void)drawMentionForRange:(NSRange)range
|
|
54
|
-
layoutManager:(NSLayoutManager *)layoutManager
|
|
55
|
-
textContainer:(NSTextContainer *)textContainer
|
|
56
|
-
atPoint:(CGPoint)origin
|
|
57
|
-
backgroundColor:(RCTUIColor *)backgroundColor
|
|
58
|
-
{
|
|
59
|
-
NSRange glyphRange = [layoutManager glyphRangeForCharacterRange:range actualCharacterRange:NULL];
|
|
60
|
-
if (glyphRange.location == NSNotFound || glyphRange.length == 0)
|
|
61
|
-
return;
|
|
62
|
-
|
|
63
|
-
[layoutManager
|
|
64
|
-
enumerateLineFragmentsForGlyphRange:glyphRange
|
|
65
|
-
usingBlock:^(CGRect rect, CGRect usedRect, NSTextContainer *tc, NSRange lineRange,
|
|
66
|
-
BOOL *stop) {
|
|
67
|
-
(void)rect;
|
|
68
|
-
(void)usedRect;
|
|
69
|
-
(void)tc;
|
|
70
|
-
(void)stop;
|
|
71
|
-
NSRange intersect = NSIntersectionRange(lineRange, glyphRange);
|
|
72
|
-
if (intersect.length == 0)
|
|
73
|
-
return;
|
|
74
|
-
|
|
75
|
-
CGRect textRect =
|
|
76
|
-
[layoutManager boundingRectForGlyphRange:intersect inTextContainer:textContainer];
|
|
77
|
-
CGRect finalRect = CGRectInset(textRect, -ENRMMentionPaddingX, -ENRMMentionPaddingY);
|
|
78
|
-
finalRect.origin.x += origin.x;
|
|
79
|
-
finalRect.origin.y += origin.y;
|
|
80
|
-
UIBezierPath *path = UIBezierPathWithRoundedRect(finalRect, kMentionCornerRadius);
|
|
81
|
-
[backgroundColor setFill];
|
|
82
|
-
[path fill];
|
|
83
|
-
}];
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
@end
|
|
1
|
+
#import "MentionBackground.h"
|
|
2
|
+
|
|
3
|
+
NSString *const MentionAttributeName = @"Mention";
|
|
4
|
+
NSString *const MentionIdAttributeName = @"mentionId";
|
|
5
|
+
NSString *const MentionLabelAttributeName = @"mentionLabel";
|
|
6
|
+
NSString *const MentionBackgroundColorAttributeName = @"MentionBackgroundColor";
|
|
7
|
+
|
|
8
|
+
const CGFloat ENRMMentionPaddingX = 3.0;
|
|
9
|
+
const CGFloat ENRMMentionPaddingY = 1.0;
|
|
10
|
+
static const CGFloat kMentionCornerRadius = 10.0;
|
|
11
|
+
|
|
12
|
+
@implementation MentionBackground
|
|
13
|
+
|
|
14
|
+
- (void)drawBackgroundsForGlyphRange:(NSRange)glyphsToShow
|
|
15
|
+
layoutManager:(NSLayoutManager *)layoutManager
|
|
16
|
+
textContainer:(NSTextContainer *)textContainer
|
|
17
|
+
atPoint:(CGPoint)origin
|
|
18
|
+
{
|
|
19
|
+
NSTextStorage *textStorage = layoutManager.textStorage;
|
|
20
|
+
if (!textStorage || textStorage.length == 0)
|
|
21
|
+
return;
|
|
22
|
+
|
|
23
|
+
NSRange charRange = [layoutManager characterRangeForGlyphRange:glyphsToShow actualGlyphRange:NULL];
|
|
24
|
+
if (charRange.location == NSNotFound || charRange.length == 0)
|
|
25
|
+
return;
|
|
26
|
+
|
|
27
|
+
[textStorage enumerateAttribute:MentionAttributeName
|
|
28
|
+
inRange:NSMakeRange(0, textStorage.length)
|
|
29
|
+
options:0
|
|
30
|
+
usingBlock:^(id value, NSRange range, BOOL *stop) {
|
|
31
|
+
(void)stop;
|
|
32
|
+
if (!value || range.length == 0)
|
|
33
|
+
return;
|
|
34
|
+
if (NSIntersectionRange(range, charRange).length == 0)
|
|
35
|
+
return;
|
|
36
|
+
|
|
37
|
+
RCTUIColor *backgroundColor = [textStorage attribute:MentionBackgroundColorAttributeName
|
|
38
|
+
atIndex:range.location
|
|
39
|
+
effectiveRange:NULL];
|
|
40
|
+
if (!backgroundColor)
|
|
41
|
+
return;
|
|
42
|
+
|
|
43
|
+
[self drawMentionForRange:range
|
|
44
|
+
layoutManager:layoutManager
|
|
45
|
+
textContainer:textContainer
|
|
46
|
+
atPoint:origin
|
|
47
|
+
backgroundColor:backgroundColor];
|
|
48
|
+
}];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/// One rounded rect per line fragment. A wrapped mention paints `box-decoration-break: clone`,
|
|
52
|
+
/// so each line keeps its own 10pt corners instead of stretching into a bar.
|
|
53
|
+
- (void)drawMentionForRange:(NSRange)range
|
|
54
|
+
layoutManager:(NSLayoutManager *)layoutManager
|
|
55
|
+
textContainer:(NSTextContainer *)textContainer
|
|
56
|
+
atPoint:(CGPoint)origin
|
|
57
|
+
backgroundColor:(RCTUIColor *)backgroundColor
|
|
58
|
+
{
|
|
59
|
+
NSRange glyphRange = [layoutManager glyphRangeForCharacterRange:range actualCharacterRange:NULL];
|
|
60
|
+
if (glyphRange.location == NSNotFound || glyphRange.length == 0)
|
|
61
|
+
return;
|
|
62
|
+
|
|
63
|
+
[layoutManager
|
|
64
|
+
enumerateLineFragmentsForGlyphRange:glyphRange
|
|
65
|
+
usingBlock:^(CGRect rect, CGRect usedRect, NSTextContainer *tc, NSRange lineRange,
|
|
66
|
+
BOOL *stop) {
|
|
67
|
+
(void)rect;
|
|
68
|
+
(void)usedRect;
|
|
69
|
+
(void)tc;
|
|
70
|
+
(void)stop;
|
|
71
|
+
NSRange intersect = NSIntersectionRange(lineRange, glyphRange);
|
|
72
|
+
if (intersect.length == 0)
|
|
73
|
+
return;
|
|
74
|
+
|
|
75
|
+
CGRect textRect =
|
|
76
|
+
[layoutManager boundingRectForGlyphRange:intersect inTextContainer:textContainer];
|
|
77
|
+
CGRect finalRect = CGRectInset(textRect, -ENRMMentionPaddingX, -ENRMMentionPaddingY);
|
|
78
|
+
finalRect.origin.x += origin.x;
|
|
79
|
+
finalRect.origin.y += origin.y;
|
|
80
|
+
UIBezierPath *path = UIBezierPathWithRoundedRect(finalRect, kMentionCornerRadius);
|
|
81
|
+
[backgroundColor setFill];
|
|
82
|
+
[path fill];
|
|
83
|
+
}];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@end
|
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
#import "ENRMUIKit.h"
|
|
2
|
-
#import <Foundation/Foundation.h>
|
|
3
|
-
|
|
4
|
-
NS_ASSUME_NONNULL_BEGIN
|
|
5
|
-
|
|
6
|
-
__BEGIN_DECLS
|
|
7
|
-
|
|
8
|
-
extern NSAttributedString *kNewlineAttributedString;
|
|
9
|
-
|
|
10
|
-
NSLineBreakStrategy ENRMResolveLineBreakStrategy(NSString *_Nullable strategy);
|
|
11
|
-
void ENRMApplyLineBreakStrategyToParagraphStyles(NSMutableAttributedString *output,
|
|
12
|
-
NSLineBreakStrategy lineBreakStrategy);
|
|
13
|
-
|
|
14
|
-
/// Resolves an ellipsizeMode prop value to the NSLineBreakMode used for
|
|
15
|
-
/// truncation on the text container (with maximumNumberOfLines). 'clip' maps to
|
|
16
|
-
/// NSLineBreakByClipping (truncate with no ellipsis). Defaults to tail. Mirrors
|
|
17
|
-
/// React Native Text's ellipsizeMode.
|
|
18
|
-
NSLineBreakMode ENRMResolveEllipsizeLineBreakMode(NSString *_Nullable mode);
|
|
19
|
-
|
|
20
|
-
/// Auto/LTR/RTL match React Native's writingDirection prop.
|
|
21
|
-
/// FirstStrong is the library extension: resolve each paragraph from its first strong
|
|
22
|
-
/// directional character (matches Android's TEXT_DIRECTION_FIRST_STRONG).
|
|
23
|
-
typedef NS_ENUM(NSInteger, ENRMWritingDirectionMode) {
|
|
24
|
-
ENRMWritingDirectionModeAuto,
|
|
25
|
-
ENRMWritingDirectionModeLTR,
|
|
26
|
-
ENRMWritingDirectionModeRTL,
|
|
27
|
-
ENRMWritingDirectionModeFirstStrong,
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
ENRMWritingDirectionMode ENRMResolveWritingDirectionMode(NSString *_Nullable value);
|
|
31
|
-
|
|
32
|
-
void ENRMApplyWritingDirectionToParagraphStyles(NSMutableAttributedString *output, NSWritingDirection writingDirection);
|
|
33
|
-
|
|
34
|
-
NSWritingDirection ENRMFirstStrongDirection(NSString *text);
|
|
35
|
-
|
|
36
|
-
/// Paragraphs without a strong character fall back to `fallback`. Code blocks are skipped.
|
|
37
|
-
void ENRMApplyFirstStrongParagraphDirections(NSMutableAttributedString *output, NSWritingDirection fallback);
|
|
38
|
-
|
|
39
|
-
/// Falls back to the app's UI layout direction when the style is missing or Natural.
|
|
40
|
-
BOOL ENRMParagraphIsRTL(NSParagraphStyle *_Nullable style);
|
|
41
|
-
|
|
42
|
-
/// Dispatch entry point used after every render pass. `layoutDirection` is the
|
|
43
|
-
/// fallback for FirstStrong neutral paragraphs and is unused for the other modes.
|
|
44
|
-
void ENRMApplyWritingDirectionMode(NSMutableAttributedString *output, ENRMWritingDirectionMode mode,
|
|
45
|
-
NSWritingDirection layoutDirection);
|
|
46
|
-
|
|
47
|
-
/// Sets lineHeight as a floor (minimumLineHeight) so a line can still grow to fit a taller run.
|
|
48
|
-
/// No-op when lineHeight <= 0.
|
|
49
|
-
void ENRMApplyLineHeightToParagraphStyle(NSMutableParagraphStyle *style, CGFloat lineHeight);
|
|
50
|
-
|
|
51
|
-
NSMutableParagraphStyle *getOrCreateParagraphStyle(NSMutableAttributedString *output, NSUInteger index);
|
|
52
|
-
void applyParagraphSpacingAfter(NSMutableAttributedString *output, NSUInteger start, CGFloat marginBottom);
|
|
53
|
-
NSUInteger applyParagraphSpacingBefore(NSMutableAttributedString *output, NSRange range, CGFloat marginTop);
|
|
54
|
-
NSUInteger applyBlockSpacingBefore(NSMutableAttributedString *output, NSUInteger insertionPoint, CGFloat marginTop);
|
|
55
|
-
void applyBlockSpacingAfter(NSMutableAttributedString *output, CGFloat marginBottom);
|
|
56
|
-
/// `lineHeight`, raised to the largest `pill.lineHeight` among the link pills in `range`.
|
|
57
|
-
/// A line grows to fit a pill on its own, but only that line and only to the pill's box, so
|
|
58
|
-
/// pills on consecutive lines touch. A style that sets `pill.lineHeight` gets a floor for
|
|
59
|
-
/// the whole block instead, which keeps its lines even and the pills apart.
|
|
60
|
-
CGFloat ENRMLineHeightWithLinkPills(NSAttributedString *text, NSRange range, CGFloat lineHeight);
|
|
61
|
-
void applyLineHeight(NSMutableAttributedString *output, NSRange range, CGFloat lineHeight);
|
|
62
|
-
|
|
63
|
-
/// Stamps every styled run in `range` with `NSOriginalFont` set to its own
|
|
64
|
-
/// `NSFont`, so a line is sized from the font the renderer chose rather than
|
|
65
|
-
/// from whichever font ends up drawing the glyphs.
|
|
66
|
-
///
|
|
67
|
-
/// UIKit writes this attribute itself, but only into a UITextView's storage, so
|
|
68
|
-
/// the view-free measurement stack never saw it and sized a line from the
|
|
69
|
-
/// fallback font instead. Stamping it here keeps measuring and rendering agreed.
|
|
70
|
-
///
|
|
71
|
-
/// IMPORTANT:
|
|
72
|
-
/// Call this last, after every font in the range is final, on any attributed
|
|
73
|
-
/// string handed to a layout engine. A run whose `NSFont` changes after the
|
|
74
|
-
/// stamp is then sized from the stale font, in the measurement stack and in
|
|
75
|
-
/// `UITextView` alike, so the line comes out wrong in both.
|
|
76
|
-
/// `ENRMRenderASTNodes` and `ENRMRenderBlockquoteContentNodes` cover everything
|
|
77
|
-
/// built through the node renderers; the two paths that assemble their own
|
|
78
|
-
/// string (table cells, code block content) call it themselves.
|
|
79
|
-
void ENRMPinLineMetricsToStyledFonts(NSMutableAttributedString *output, NSRange range);
|
|
80
|
-
CGFloat calculateBaselineOffset(NSAttributedString *output, NSRange range);
|
|
81
|
-
void applyBaselineOffset(NSMutableAttributedString *output, NSRange range);
|
|
82
|
-
void applyTextAlignment(NSMutableAttributedString *output, NSRange range, NSTextAlignment textAlign);
|
|
83
|
-
NSTextAlignment textAlignmentFromString(NSString *textAlign);
|
|
84
|
-
|
|
85
|
-
__END_DECLS
|
|
86
|
-
|
|
87
|
-
NS_ASSUME_NONNULL_END
|
|
1
|
+
#import "ENRMUIKit.h"
|
|
2
|
+
#import <Foundation/Foundation.h>
|
|
3
|
+
|
|
4
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
5
|
+
|
|
6
|
+
__BEGIN_DECLS
|
|
7
|
+
|
|
8
|
+
extern NSAttributedString *kNewlineAttributedString;
|
|
9
|
+
|
|
10
|
+
NSLineBreakStrategy ENRMResolveLineBreakStrategy(NSString *_Nullable strategy);
|
|
11
|
+
void ENRMApplyLineBreakStrategyToParagraphStyles(NSMutableAttributedString *output,
|
|
12
|
+
NSLineBreakStrategy lineBreakStrategy);
|
|
13
|
+
|
|
14
|
+
/// Resolves an ellipsizeMode prop value to the NSLineBreakMode used for
|
|
15
|
+
/// truncation on the text container (with maximumNumberOfLines). 'clip' maps to
|
|
16
|
+
/// NSLineBreakByClipping (truncate with no ellipsis). Defaults to tail. Mirrors
|
|
17
|
+
/// React Native Text's ellipsizeMode.
|
|
18
|
+
NSLineBreakMode ENRMResolveEllipsizeLineBreakMode(NSString *_Nullable mode);
|
|
19
|
+
|
|
20
|
+
/// Auto/LTR/RTL match React Native's writingDirection prop.
|
|
21
|
+
/// FirstStrong is the library extension: resolve each paragraph from its first strong
|
|
22
|
+
/// directional character (matches Android's TEXT_DIRECTION_FIRST_STRONG).
|
|
23
|
+
typedef NS_ENUM(NSInteger, ENRMWritingDirectionMode) {
|
|
24
|
+
ENRMWritingDirectionModeAuto,
|
|
25
|
+
ENRMWritingDirectionModeLTR,
|
|
26
|
+
ENRMWritingDirectionModeRTL,
|
|
27
|
+
ENRMWritingDirectionModeFirstStrong,
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
ENRMWritingDirectionMode ENRMResolveWritingDirectionMode(NSString *_Nullable value);
|
|
31
|
+
|
|
32
|
+
void ENRMApplyWritingDirectionToParagraphStyles(NSMutableAttributedString *output, NSWritingDirection writingDirection);
|
|
33
|
+
|
|
34
|
+
NSWritingDirection ENRMFirstStrongDirection(NSString *text);
|
|
35
|
+
|
|
36
|
+
/// Paragraphs without a strong character fall back to `fallback`. Code blocks are skipped.
|
|
37
|
+
void ENRMApplyFirstStrongParagraphDirections(NSMutableAttributedString *output, NSWritingDirection fallback);
|
|
38
|
+
|
|
39
|
+
/// Falls back to the app's UI layout direction when the style is missing or Natural.
|
|
40
|
+
BOOL ENRMParagraphIsRTL(NSParagraphStyle *_Nullable style);
|
|
41
|
+
|
|
42
|
+
/// Dispatch entry point used after every render pass. `layoutDirection` is the
|
|
43
|
+
/// fallback for FirstStrong neutral paragraphs and is unused for the other modes.
|
|
44
|
+
void ENRMApplyWritingDirectionMode(NSMutableAttributedString *output, ENRMWritingDirectionMode mode,
|
|
45
|
+
NSWritingDirection layoutDirection);
|
|
46
|
+
|
|
47
|
+
/// Sets lineHeight as a floor (minimumLineHeight) so a line can still grow to fit a taller run.
|
|
48
|
+
/// No-op when lineHeight <= 0.
|
|
49
|
+
void ENRMApplyLineHeightToParagraphStyle(NSMutableParagraphStyle *style, CGFloat lineHeight);
|
|
50
|
+
|
|
51
|
+
NSMutableParagraphStyle *getOrCreateParagraphStyle(NSMutableAttributedString *output, NSUInteger index);
|
|
52
|
+
void applyParagraphSpacingAfter(NSMutableAttributedString *output, NSUInteger start, CGFloat marginBottom);
|
|
53
|
+
NSUInteger applyParagraphSpacingBefore(NSMutableAttributedString *output, NSRange range, CGFloat marginTop);
|
|
54
|
+
NSUInteger applyBlockSpacingBefore(NSMutableAttributedString *output, NSUInteger insertionPoint, CGFloat marginTop);
|
|
55
|
+
void applyBlockSpacingAfter(NSMutableAttributedString *output, CGFloat marginBottom);
|
|
56
|
+
/// `lineHeight`, raised to the largest `pill.lineHeight` among the link pills in `range`.
|
|
57
|
+
/// A line grows to fit a pill on its own, but only that line and only to the pill's box, so
|
|
58
|
+
/// pills on consecutive lines touch. A style that sets `pill.lineHeight` gets a floor for
|
|
59
|
+
/// the whole block instead, which keeps its lines even and the pills apart.
|
|
60
|
+
CGFloat ENRMLineHeightWithLinkPills(NSAttributedString *text, NSRange range, CGFloat lineHeight);
|
|
61
|
+
void applyLineHeight(NSMutableAttributedString *output, NSRange range, CGFloat lineHeight);
|
|
62
|
+
|
|
63
|
+
/// Stamps every styled run in `range` with `NSOriginalFont` set to its own
|
|
64
|
+
/// `NSFont`, so a line is sized from the font the renderer chose rather than
|
|
65
|
+
/// from whichever font ends up drawing the glyphs.
|
|
66
|
+
///
|
|
67
|
+
/// UIKit writes this attribute itself, but only into a UITextView's storage, so
|
|
68
|
+
/// the view-free measurement stack never saw it and sized a line from the
|
|
69
|
+
/// fallback font instead. Stamping it here keeps measuring and rendering agreed.
|
|
70
|
+
///
|
|
71
|
+
/// IMPORTANT:
|
|
72
|
+
/// Call this last, after every font in the range is final, on any attributed
|
|
73
|
+
/// string handed to a layout engine. A run whose `NSFont` changes after the
|
|
74
|
+
/// stamp is then sized from the stale font, in the measurement stack and in
|
|
75
|
+
/// `UITextView` alike, so the line comes out wrong in both.
|
|
76
|
+
/// `ENRMRenderASTNodes` and `ENRMRenderBlockquoteContentNodes` cover everything
|
|
77
|
+
/// built through the node renderers; the two paths that assemble their own
|
|
78
|
+
/// string (table cells, code block content) call it themselves.
|
|
79
|
+
void ENRMPinLineMetricsToStyledFonts(NSMutableAttributedString *output, NSRange range);
|
|
80
|
+
CGFloat calculateBaselineOffset(NSAttributedString *output, NSRange range);
|
|
81
|
+
void applyBaselineOffset(NSMutableAttributedString *output, NSRange range);
|
|
82
|
+
void applyTextAlignment(NSMutableAttributedString *output, NSRange range, NSTextAlignment textAlign);
|
|
83
|
+
NSTextAlignment textAlignmentFromString(NSString *textAlign);
|
|
84
|
+
|
|
85
|
+
__END_DECLS
|
|
86
|
+
|
|
87
|
+
NS_ASSUME_NONNULL_END
|