@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,168 +1,168 @@
|
|
|
1
|
-
#import "ENRMImageDownloader.h"
|
|
2
|
-
#import "ENRMImageAttachment.h"
|
|
3
|
-
#import "ENRMLocalImageLoader.h"
|
|
4
|
-
#import <CommonCrypto/CommonDigest.h>
|
|
5
|
-
#include <TargetConditionals.h>
|
|
6
|
-
|
|
7
|
-
static const NSUInteger kDiskCacheMemoryCapacity = 10 * 1024 * 1024;
|
|
8
|
-
static const NSUInteger kDiskCacheDiskCapacity = 100 * 1024 * 1024;
|
|
9
|
-
|
|
10
|
-
NSUInteger ENRMImageByteCost(RCTUIImage *image)
|
|
11
|
-
{
|
|
12
|
-
CGImageRef cgImage = image.CGImage;
|
|
13
|
-
if (!cgImage)
|
|
14
|
-
return 0;
|
|
15
|
-
return CGImageGetBytesPerRow(cgImage) * CGImageGetHeight(cgImage);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
static NSDictionary<NSString *, NSString *> *ENRMNormalizedImageHeaders(NSDictionary<NSString *, NSString *> *headers)
|
|
19
|
-
{
|
|
20
|
-
NSMutableDictionary<NSString *, NSString *> *normalized = [NSMutableDictionary dictionary];
|
|
21
|
-
for (NSString *name in [headers.allKeys sortedArrayUsingSelector:@selector(compare:)])
|
|
22
|
-
normalized[name.lowercaseString] = headers[name];
|
|
23
|
-
return normalized;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
NSString *ENRMImageCacheKey(NSString *url, NSDictionary<NSString *, NSString *> *headers)
|
|
27
|
-
{
|
|
28
|
-
if (headers.count == 0) {
|
|
29
|
-
return url;
|
|
30
|
-
}
|
|
31
|
-
NSDictionary<NSString *, NSString *> *normalized = ENRMNormalizedImageHeaders(headers);
|
|
32
|
-
NSArray<NSString *> *names = [normalized.allKeys sortedArrayUsingSelector:@selector(compare:)];
|
|
33
|
-
NSMutableArray<NSString *> *pairs = [NSMutableArray arrayWithCapacity:names.count];
|
|
34
|
-
for (NSString *name in names) {
|
|
35
|
-
[pairs addObject:[NSString stringWithFormat:@"%@:%@", name, normalized[name]]];
|
|
36
|
-
}
|
|
37
|
-
NSString *joined = [pairs componentsJoinedByString:@"\n"];
|
|
38
|
-
NSData *data = [joined dataUsingEncoding:NSUTF8StringEncoding];
|
|
39
|
-
unsigned char digest[CC_SHA256_DIGEST_LENGTH];
|
|
40
|
-
CC_SHA256(data.bytes, (CC_LONG)data.length, digest);
|
|
41
|
-
NSMutableString *hash = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
|
|
42
|
-
for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
|
|
43
|
-
[hash appendFormat:@"%02x", digest[i]];
|
|
44
|
-
}
|
|
45
|
-
return [NSString stringWithFormat:@"%@|%@", url, hash];
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
@implementation ENRMImageDownloader {
|
|
49
|
-
NSURLSession *_session;
|
|
50
|
-
NSURLSession *_headerSession;
|
|
51
|
-
NSMutableDictionary<NSString *, NSMutableArray<ENRMImageDownloadCompletion> *> *_inFlightRequests;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
+ (instancetype)shared
|
|
55
|
-
{
|
|
56
|
-
static ENRMImageDownloader *instance;
|
|
57
|
-
static dispatch_once_t onceToken;
|
|
58
|
-
dispatch_once(&onceToken, ^{ instance = [[ENRMImageDownloader alloc] init]; });
|
|
59
|
-
return instance;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
- (instancetype)init
|
|
63
|
-
{
|
|
64
|
-
self = [super init];
|
|
65
|
-
if (self) {
|
|
66
|
-
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
|
|
67
|
-
config.URLCache = [[NSURLCache alloc] initWithMemoryCapacity:kDiskCacheMemoryCapacity
|
|
68
|
-
diskCapacity:kDiskCacheDiskCapacity
|
|
69
|
-
directoryURL:nil];
|
|
70
|
-
config.requestCachePolicy = NSURLRequestReturnCacheDataElseLoad;
|
|
71
|
-
config.timeoutIntervalForRequest = 15;
|
|
72
|
-
config.timeoutIntervalForResource = 30;
|
|
73
|
-
_session = [NSURLSession sessionWithConfiguration:config];
|
|
74
|
-
// No URL cache: it keys by URL alone and would mix header sets.
|
|
75
|
-
NSURLSessionConfiguration *headerConfig = [config copy];
|
|
76
|
-
headerConfig.URLCache = nil;
|
|
77
|
-
_headerSession = [NSURLSession sessionWithConfiguration:headerConfig];
|
|
78
|
-
_inFlightRequests = [NSMutableDictionary dictionary];
|
|
79
|
-
}
|
|
80
|
-
return self;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
- (void)downloadURL:(NSString *)url
|
|
84
|
-
headers:(NSDictionary<NSString *, NSString *> *)headers
|
|
85
|
-
completion:(ENRMImageDownloadCompletion)completion
|
|
86
|
-
{
|
|
87
|
-
if (url.length == 0) {
|
|
88
|
-
completion(nil);
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
headers = ENRMNormalizedImageHeaders(headers);
|
|
93
|
-
BOOL isLocal = ENRMIsLocalImageURL(url);
|
|
94
|
-
NSString *cacheKey = isLocal ? url : ENRMImageCacheKey(url, headers);
|
|
95
|
-
|
|
96
|
-
RCTUIImage *cached = [[ENRMImageAttachment originalImageCache] objectForKey:cacheKey];
|
|
97
|
-
if (cached) {
|
|
98
|
-
completion(cached);
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
if (isLocal) {
|
|
103
|
-
RCTUIImage *local = ENRMLoadLocalImage(url);
|
|
104
|
-
if (local) {
|
|
105
|
-
[[ENRMImageAttachment originalImageCache] setObject:local forKey:cacheKey cost:ENRMImageByteCost(local)];
|
|
106
|
-
}
|
|
107
|
-
completion(local);
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
@synchronized(_inFlightRequests) {
|
|
112
|
-
NSMutableArray *existing = _inFlightRequests[cacheKey];
|
|
113
|
-
if (existing) {
|
|
114
|
-
[existing addObject:completion];
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
_inFlightRequests[cacheKey] = [NSMutableArray arrayWithObject:completion];
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
NSURL *nsURL = [NSURL URLWithString:url];
|
|
121
|
-
if (!nsURL) {
|
|
122
|
-
[self dispatchCallbacksForKey:cacheKey image:nil];
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:nsURL];
|
|
127
|
-
[headers enumerateKeysAndObjectsUsingBlock:^(NSString *name, NSString *value, BOOL *stop) {
|
|
128
|
-
[request setValue:value forHTTPHeaderField:name];
|
|
129
|
-
}];
|
|
130
|
-
|
|
131
|
-
NSURLSession *session = headers.count > 0 ? _headerSession : _session;
|
|
132
|
-
[[session dataTaskWithRequest:request
|
|
133
|
-
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
|
|
134
|
-
#if !TARGET_OS_OSX
|
|
135
|
-
RCTUIImage *image = (data && !error) ? [RCTUIImage imageWithData:data] : nil;
|
|
136
|
-
#else
|
|
137
|
-
RCTUIImage *image = (data && !error) ? [[RCTUIImage alloc] initWithData:data] : nil;
|
|
138
|
-
#endif
|
|
139
|
-
|
|
140
|
-
if (image) {
|
|
141
|
-
[[ENRMImageAttachment originalImageCache] setObject:image
|
|
142
|
-
forKey:cacheKey
|
|
143
|
-
cost:ENRMImageByteCost(image)];
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
[self dispatchCallbacksForKey:cacheKey image:image];
|
|
147
|
-
}] resume];
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
- (void)dispatchCallbacksForKey:(NSString *)cacheKey image:(RCTUIImage *_Nullable)image
|
|
151
|
-
{
|
|
152
|
-
NSArray<ENRMImageDownloadCompletion> *callbacks;
|
|
153
|
-
@synchronized(_inFlightRequests) {
|
|
154
|
-
callbacks = [_inFlightRequests[cacheKey] copy];
|
|
155
|
-
[_inFlightRequests removeObjectForKey:cacheKey];
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
if (!callbacks)
|
|
159
|
-
return;
|
|
160
|
-
|
|
161
|
-
dispatch_async(dispatch_get_main_queue(), ^{
|
|
162
|
-
for (ENRMImageDownloadCompletion cb in callbacks) {
|
|
163
|
-
cb(image);
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
@end
|
|
1
|
+
#import "ENRMImageDownloader.h"
|
|
2
|
+
#import "ENRMImageAttachment.h"
|
|
3
|
+
#import "ENRMLocalImageLoader.h"
|
|
4
|
+
#import <CommonCrypto/CommonDigest.h>
|
|
5
|
+
#include <TargetConditionals.h>
|
|
6
|
+
|
|
7
|
+
static const NSUInteger kDiskCacheMemoryCapacity = 10 * 1024 * 1024;
|
|
8
|
+
static const NSUInteger kDiskCacheDiskCapacity = 100 * 1024 * 1024;
|
|
9
|
+
|
|
10
|
+
NSUInteger ENRMImageByteCost(RCTUIImage *image)
|
|
11
|
+
{
|
|
12
|
+
CGImageRef cgImage = image.CGImage;
|
|
13
|
+
if (!cgImage)
|
|
14
|
+
return 0;
|
|
15
|
+
return CGImageGetBytesPerRow(cgImage) * CGImageGetHeight(cgImage);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
static NSDictionary<NSString *, NSString *> *ENRMNormalizedImageHeaders(NSDictionary<NSString *, NSString *> *headers)
|
|
19
|
+
{
|
|
20
|
+
NSMutableDictionary<NSString *, NSString *> *normalized = [NSMutableDictionary dictionary];
|
|
21
|
+
for (NSString *name in [headers.allKeys sortedArrayUsingSelector:@selector(compare:)])
|
|
22
|
+
normalized[name.lowercaseString] = headers[name];
|
|
23
|
+
return normalized;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
NSString *ENRMImageCacheKey(NSString *url, NSDictionary<NSString *, NSString *> *headers)
|
|
27
|
+
{
|
|
28
|
+
if (headers.count == 0) {
|
|
29
|
+
return url;
|
|
30
|
+
}
|
|
31
|
+
NSDictionary<NSString *, NSString *> *normalized = ENRMNormalizedImageHeaders(headers);
|
|
32
|
+
NSArray<NSString *> *names = [normalized.allKeys sortedArrayUsingSelector:@selector(compare:)];
|
|
33
|
+
NSMutableArray<NSString *> *pairs = [NSMutableArray arrayWithCapacity:names.count];
|
|
34
|
+
for (NSString *name in names) {
|
|
35
|
+
[pairs addObject:[NSString stringWithFormat:@"%@:%@", name, normalized[name]]];
|
|
36
|
+
}
|
|
37
|
+
NSString *joined = [pairs componentsJoinedByString:@"\n"];
|
|
38
|
+
NSData *data = [joined dataUsingEncoding:NSUTF8StringEncoding];
|
|
39
|
+
unsigned char digest[CC_SHA256_DIGEST_LENGTH];
|
|
40
|
+
CC_SHA256(data.bytes, (CC_LONG)data.length, digest);
|
|
41
|
+
NSMutableString *hash = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
|
|
42
|
+
for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
|
|
43
|
+
[hash appendFormat:@"%02x", digest[i]];
|
|
44
|
+
}
|
|
45
|
+
return [NSString stringWithFormat:@"%@|%@", url, hash];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@implementation ENRMImageDownloader {
|
|
49
|
+
NSURLSession *_session;
|
|
50
|
+
NSURLSession *_headerSession;
|
|
51
|
+
NSMutableDictionary<NSString *, NSMutableArray<ENRMImageDownloadCompletion> *> *_inFlightRequests;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
+ (instancetype)shared
|
|
55
|
+
{
|
|
56
|
+
static ENRMImageDownloader *instance;
|
|
57
|
+
static dispatch_once_t onceToken;
|
|
58
|
+
dispatch_once(&onceToken, ^{ instance = [[ENRMImageDownloader alloc] init]; });
|
|
59
|
+
return instance;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
- (instancetype)init
|
|
63
|
+
{
|
|
64
|
+
self = [super init];
|
|
65
|
+
if (self) {
|
|
66
|
+
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
|
|
67
|
+
config.URLCache = [[NSURLCache alloc] initWithMemoryCapacity:kDiskCacheMemoryCapacity
|
|
68
|
+
diskCapacity:kDiskCacheDiskCapacity
|
|
69
|
+
directoryURL:nil];
|
|
70
|
+
config.requestCachePolicy = NSURLRequestReturnCacheDataElseLoad;
|
|
71
|
+
config.timeoutIntervalForRequest = 15;
|
|
72
|
+
config.timeoutIntervalForResource = 30;
|
|
73
|
+
_session = [NSURLSession sessionWithConfiguration:config];
|
|
74
|
+
// No URL cache: it keys by URL alone and would mix header sets.
|
|
75
|
+
NSURLSessionConfiguration *headerConfig = [config copy];
|
|
76
|
+
headerConfig.URLCache = nil;
|
|
77
|
+
_headerSession = [NSURLSession sessionWithConfiguration:headerConfig];
|
|
78
|
+
_inFlightRequests = [NSMutableDictionary dictionary];
|
|
79
|
+
}
|
|
80
|
+
return self;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
- (void)downloadURL:(NSString *)url
|
|
84
|
+
headers:(NSDictionary<NSString *, NSString *> *)headers
|
|
85
|
+
completion:(ENRMImageDownloadCompletion)completion
|
|
86
|
+
{
|
|
87
|
+
if (url.length == 0) {
|
|
88
|
+
completion(nil);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
headers = ENRMNormalizedImageHeaders(headers);
|
|
93
|
+
BOOL isLocal = ENRMIsLocalImageURL(url);
|
|
94
|
+
NSString *cacheKey = isLocal ? url : ENRMImageCacheKey(url, headers);
|
|
95
|
+
|
|
96
|
+
RCTUIImage *cached = [[ENRMImageAttachment originalImageCache] objectForKey:cacheKey];
|
|
97
|
+
if (cached) {
|
|
98
|
+
completion(cached);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (isLocal) {
|
|
103
|
+
RCTUIImage *local = ENRMLoadLocalImage(url);
|
|
104
|
+
if (local) {
|
|
105
|
+
[[ENRMImageAttachment originalImageCache] setObject:local forKey:cacheKey cost:ENRMImageByteCost(local)];
|
|
106
|
+
}
|
|
107
|
+
completion(local);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
@synchronized(_inFlightRequests) {
|
|
112
|
+
NSMutableArray *existing = _inFlightRequests[cacheKey];
|
|
113
|
+
if (existing) {
|
|
114
|
+
[existing addObject:completion];
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
_inFlightRequests[cacheKey] = [NSMutableArray arrayWithObject:completion];
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
NSURL *nsURL = [NSURL URLWithString:url];
|
|
121
|
+
if (!nsURL) {
|
|
122
|
+
[self dispatchCallbacksForKey:cacheKey image:nil];
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:nsURL];
|
|
127
|
+
[headers enumerateKeysAndObjectsUsingBlock:^(NSString *name, NSString *value, BOOL *stop) {
|
|
128
|
+
[request setValue:value forHTTPHeaderField:name];
|
|
129
|
+
}];
|
|
130
|
+
|
|
131
|
+
NSURLSession *session = headers.count > 0 ? _headerSession : _session;
|
|
132
|
+
[[session dataTaskWithRequest:request
|
|
133
|
+
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
|
|
134
|
+
#if !TARGET_OS_OSX
|
|
135
|
+
RCTUIImage *image = (data && !error) ? [RCTUIImage imageWithData:data] : nil;
|
|
136
|
+
#else
|
|
137
|
+
RCTUIImage *image = (data && !error) ? [[RCTUIImage alloc] initWithData:data] : nil;
|
|
138
|
+
#endif
|
|
139
|
+
|
|
140
|
+
if (image) {
|
|
141
|
+
[[ENRMImageAttachment originalImageCache] setObject:image
|
|
142
|
+
forKey:cacheKey
|
|
143
|
+
cost:ENRMImageByteCost(image)];
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
[self dispatchCallbacksForKey:cacheKey image:image];
|
|
147
|
+
}] resume];
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
- (void)dispatchCallbacksForKey:(NSString *)cacheKey image:(RCTUIImage *_Nullable)image
|
|
151
|
+
{
|
|
152
|
+
NSArray<ENRMImageDownloadCompletion> *callbacks;
|
|
153
|
+
@synchronized(_inFlightRequests) {
|
|
154
|
+
callbacks = [_inFlightRequests[cacheKey] copy];
|
|
155
|
+
[_inFlightRequests removeObjectForKey:cacheKey];
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (!callbacks)
|
|
159
|
+
return;
|
|
160
|
+
|
|
161
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
162
|
+
for (ENRMImageDownloadCompletion cb in callbacks) {
|
|
163
|
+
cb(image);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
@end
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
#import <Foundation/Foundation.h>
|
|
3
|
-
|
|
4
|
-
#import "ENRMLatexErrorReporting.h"
|
|
5
|
-
|
|
6
|
-
NS_ASSUME_NONNULL_BEGIN
|
|
7
|
-
|
|
8
|
-
/// Returns YES when the error was delivered to a live event emitter, NO when it
|
|
9
|
-
/// must be queued and flushed once an emitter is attached.
|
|
10
|
-
typedef BOOL (^ENRMLatexErrorEmit)(NSString *source, NSString *message, BOOL displayMode);
|
|
11
|
-
|
|
12
|
-
/// Shared LaTeX-error plumbing for both host views. Owns the dedup set and the
|
|
13
|
-
/// pending queue and wires reporters; the only per-view difference - casting
|
|
14
|
-
/// `_eventEmitter` to the concrete type - stays in the `emit` block each view
|
|
15
|
-
/// supplies.
|
|
16
|
-
@interface ENRMLatexErrorCoordinator : NSObject
|
|
17
|
-
|
|
18
|
-
- (instancetype)initWithEmit:(ENRMLatexErrorEmit)emit NS_DESIGNATED_INITIALIZER;
|
|
19
|
-
- (instancetype)init NS_UNAVAILABLE;
|
|
20
|
-
|
|
21
|
-
- (void)wireReporters:(NSArray<id<ENRMLatexErrorReporting>> *)reporters;
|
|
22
|
-
- (void)reportSource:(NSString *)source message:(NSString *)message displayMode:(BOOL)displayMode;
|
|
23
|
-
- (void)flushPending;
|
|
24
|
-
|
|
25
|
-
@end
|
|
26
|
-
|
|
27
|
-
NS_ASSUME_NONNULL_END
|
|
1
|
+
#pragma once
|
|
2
|
+
#import <Foundation/Foundation.h>
|
|
3
|
+
|
|
4
|
+
#import "ENRMLatexErrorReporting.h"
|
|
5
|
+
|
|
6
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
7
|
+
|
|
8
|
+
/// Returns YES when the error was delivered to a live event emitter, NO when it
|
|
9
|
+
/// must be queued and flushed once an emitter is attached.
|
|
10
|
+
typedef BOOL (^ENRMLatexErrorEmit)(NSString *source, NSString *message, BOOL displayMode);
|
|
11
|
+
|
|
12
|
+
/// Shared LaTeX-error plumbing for both host views. Owns the dedup set and the
|
|
13
|
+
/// pending queue and wires reporters; the only per-view difference - casting
|
|
14
|
+
/// `_eventEmitter` to the concrete type - stays in the `emit` block each view
|
|
15
|
+
/// supplies.
|
|
16
|
+
@interface ENRMLatexErrorCoordinator : NSObject
|
|
17
|
+
|
|
18
|
+
- (instancetype)initWithEmit:(ENRMLatexErrorEmit)emit NS_DESIGNATED_INITIALIZER;
|
|
19
|
+
- (instancetype)init NS_UNAVAILABLE;
|
|
20
|
+
|
|
21
|
+
- (void)wireReporters:(NSArray<id<ENRMLatexErrorReporting>> *)reporters;
|
|
22
|
+
- (void)reportSource:(NSString *)source message:(NSString *)message displayMode:(BOOL)displayMode;
|
|
23
|
+
- (void)flushPending;
|
|
24
|
+
|
|
25
|
+
@end
|
|
26
|
+
|
|
27
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
#import "ENRMLatexErrorCoordinator.h"
|
|
2
|
-
|
|
3
|
-
@interface ENRMPendingLatexError : NSObject
|
|
4
|
-
@property (nonatomic, copy, readonly) NSString *source;
|
|
5
|
-
@property (nonatomic, copy, readonly) NSString *message;
|
|
6
|
-
@property (nonatomic, readonly) BOOL displayMode;
|
|
7
|
-
@end
|
|
8
|
-
|
|
9
|
-
@implementation ENRMPendingLatexError
|
|
10
|
-
- (instancetype)initWithSource:(NSString *)source message:(NSString *)message displayMode:(BOOL)displayMode
|
|
11
|
-
{
|
|
12
|
-
if (self = [super init]) {
|
|
13
|
-
_source = [source copy];
|
|
14
|
-
_message = [message copy];
|
|
15
|
-
_displayMode = displayMode;
|
|
16
|
-
}
|
|
17
|
-
return self;
|
|
18
|
-
}
|
|
19
|
-
@end
|
|
20
|
-
|
|
21
|
-
@implementation ENRMLatexErrorCoordinator {
|
|
22
|
-
ENRMLatexErrorEmit _emit;
|
|
23
|
-
NSMutableSet<NSString *> *_reportedErrors;
|
|
24
|
-
NSMutableArray<ENRMPendingLatexError *> *_pendingErrors;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
- (instancetype)initWithEmit:(ENRMLatexErrorEmit)emit
|
|
28
|
-
{
|
|
29
|
-
if (self = [super init]) {
|
|
30
|
-
_emit = [emit copy];
|
|
31
|
-
_reportedErrors = [NSMutableSet set];
|
|
32
|
-
_pendingErrors = [NSMutableArray array];
|
|
33
|
-
}
|
|
34
|
-
return self;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
- (void)wireReporters:(NSArray<id<ENRMLatexErrorReporting>> *)reporters
|
|
38
|
-
{
|
|
39
|
-
if (reporters.count == 0)
|
|
40
|
-
return;
|
|
41
|
-
__weak __typeof(self) weakSelf = self;
|
|
42
|
-
ENRMLatexErrorHandler handler = ^(NSString *source, NSString *message, BOOL displayMode) {
|
|
43
|
-
[weakSelf reportSource:source message:message displayMode:displayMode];
|
|
44
|
-
};
|
|
45
|
-
for (id<ENRMLatexErrorReporting> reporter in reporters) {
|
|
46
|
-
reporter.onLatexError = handler;
|
|
47
|
-
[reporter reportLatexErrorIfNeeded];
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
- (void)reportSource:(NSString *)source message:(NSString *)message displayMode:(BOOL)displayMode
|
|
52
|
-
{
|
|
53
|
-
NSString *key = [NSString stringWithFormat:@"%@ %@", displayMode ? @"B" : @"I", source];
|
|
54
|
-
if ([_reportedErrors containsObject:key])
|
|
55
|
-
return;
|
|
56
|
-
[_reportedErrors addObject:key];
|
|
57
|
-
if (!_emit(source, message, displayMode)) {
|
|
58
|
-
[_pendingErrors addObject:[[ENRMPendingLatexError alloc] initWithSource:source
|
|
59
|
-
message:message
|
|
60
|
-
displayMode:displayMode]];
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
- (void)flushPending
|
|
65
|
-
{
|
|
66
|
-
if (_pendingErrors.count == 0)
|
|
67
|
-
return;
|
|
68
|
-
NSArray<ENRMPendingLatexError *> *pending = [_pendingErrors copy];
|
|
69
|
-
[_pendingErrors removeAllObjects];
|
|
70
|
-
for (ENRMPendingLatexError *e in pending) {
|
|
71
|
-
_emit(e.source, e.message, e.displayMode);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
@end
|
|
1
|
+
#import "ENRMLatexErrorCoordinator.h"
|
|
2
|
+
|
|
3
|
+
@interface ENRMPendingLatexError : NSObject
|
|
4
|
+
@property (nonatomic, copy, readonly) NSString *source;
|
|
5
|
+
@property (nonatomic, copy, readonly) NSString *message;
|
|
6
|
+
@property (nonatomic, readonly) BOOL displayMode;
|
|
7
|
+
@end
|
|
8
|
+
|
|
9
|
+
@implementation ENRMPendingLatexError
|
|
10
|
+
- (instancetype)initWithSource:(NSString *)source message:(NSString *)message displayMode:(BOOL)displayMode
|
|
11
|
+
{
|
|
12
|
+
if (self = [super init]) {
|
|
13
|
+
_source = [source copy];
|
|
14
|
+
_message = [message copy];
|
|
15
|
+
_displayMode = displayMode;
|
|
16
|
+
}
|
|
17
|
+
return self;
|
|
18
|
+
}
|
|
19
|
+
@end
|
|
20
|
+
|
|
21
|
+
@implementation ENRMLatexErrorCoordinator {
|
|
22
|
+
ENRMLatexErrorEmit _emit;
|
|
23
|
+
NSMutableSet<NSString *> *_reportedErrors;
|
|
24
|
+
NSMutableArray<ENRMPendingLatexError *> *_pendingErrors;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
- (instancetype)initWithEmit:(ENRMLatexErrorEmit)emit
|
|
28
|
+
{
|
|
29
|
+
if (self = [super init]) {
|
|
30
|
+
_emit = [emit copy];
|
|
31
|
+
_reportedErrors = [NSMutableSet set];
|
|
32
|
+
_pendingErrors = [NSMutableArray array];
|
|
33
|
+
}
|
|
34
|
+
return self;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
- (void)wireReporters:(NSArray<id<ENRMLatexErrorReporting>> *)reporters
|
|
38
|
+
{
|
|
39
|
+
if (reporters.count == 0)
|
|
40
|
+
return;
|
|
41
|
+
__weak __typeof(self) weakSelf = self;
|
|
42
|
+
ENRMLatexErrorHandler handler = ^(NSString *source, NSString *message, BOOL displayMode) {
|
|
43
|
+
[weakSelf reportSource:source message:message displayMode:displayMode];
|
|
44
|
+
};
|
|
45
|
+
for (id<ENRMLatexErrorReporting> reporter in reporters) {
|
|
46
|
+
reporter.onLatexError = handler;
|
|
47
|
+
[reporter reportLatexErrorIfNeeded];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
- (void)reportSource:(NSString *)source message:(NSString *)message displayMode:(BOOL)displayMode
|
|
52
|
+
{
|
|
53
|
+
NSString *key = [NSString stringWithFormat:@"%@ %@", displayMode ? @"B" : @"I", source];
|
|
54
|
+
if ([_reportedErrors containsObject:key])
|
|
55
|
+
return;
|
|
56
|
+
[_reportedErrors addObject:key];
|
|
57
|
+
if (!_emit(source, message, displayMode)) {
|
|
58
|
+
[_pendingErrors addObject:[[ENRMPendingLatexError alloc] initWithSource:source
|
|
59
|
+
message:message
|
|
60
|
+
displayMode:displayMode]];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
- (void)flushPending
|
|
65
|
+
{
|
|
66
|
+
if (_pendingErrors.count == 0)
|
|
67
|
+
return;
|
|
68
|
+
NSArray<ENRMPendingLatexError *> *pending = [_pendingErrors copy];
|
|
69
|
+
[_pendingErrors removeAllObjects];
|
|
70
|
+
for (ENRMPendingLatexError *e in pending) {
|
|
71
|
+
_emit(e.source, e.message, e.displayMode);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@end
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
#import <Foundation/Foundation.h>
|
|
3
|
-
|
|
4
|
-
NS_ASSUME_NONNULL_BEGIN
|
|
5
|
-
|
|
6
|
-
typedef void (^ENRMLatexErrorHandler)(NSString *source, NSString *message, BOOL displayMode);
|
|
7
|
-
|
|
8
|
-
@protocol ENRMLatexErrorReporting <NSObject>
|
|
9
|
-
@property (nonatomic, copy, nullable) ENRMLatexErrorHandler onLatexError;
|
|
10
|
-
- (void)reportLatexErrorIfNeeded;
|
|
11
|
-
@end
|
|
12
|
-
|
|
13
|
-
NS_ASSUME_NONNULL_END
|
|
1
|
+
#pragma once
|
|
2
|
+
#import <Foundation/Foundation.h>
|
|
3
|
+
|
|
4
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
5
|
+
|
|
6
|
+
typedef void (^ENRMLatexErrorHandler)(NSString *source, NSString *message, BOOL displayMode);
|
|
7
|
+
|
|
8
|
+
@protocol ENRMLatexErrorReporting <NSObject>
|
|
9
|
+
@property (nonatomic, copy, nullable) ENRMLatexErrorHandler onLatexError;
|
|
10
|
+
- (void)reportLatexErrorIfNeeded;
|
|
11
|
+
@end
|
|
12
|
+
|
|
13
|
+
NS_ASSUME_NONNULL_END
|