react-native-enriched-markdown-scaffold 0.7.4-scaffold.9 → 1.0.2-scaffold.2
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/README.md +54 -8
- package/ReactNativeEnrichedMarkdown.podspec +82 -73
- package/android/build.gradle +186 -1
- package/android/consumer-rules.pro +1 -1
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerDelegate.java +9 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerInterface.java +3 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextInputManagerDelegate.java +24 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextInputManagerInterface.java +8 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerDelegate.java +9 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerInterface.java +3 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.cpp +75 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.h +63 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.cpp +35 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.h +886 -23
- package/android/src/main/baseline-prof.txt +1 -1
- package/android/src/main/cpp/jni-adapter.cpp +74 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdown.kt +189 -13
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownInternalText.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownManager.kt +50 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownText.kt +48 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextLayoutManager.kt +10 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextManager.kt +42 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/MeasurementStore.kt +82 -4
- package/android/src/main/java/com/swmansion/enriched/markdown/events/CopyPressEvent.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputManager.kt +54 -4
- package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputView.kt +901 -462
- package/android/src/main/java/com/swmansion/enriched/markdown/input/MarkdownClipboard.kt +42 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/BlockEditCoordinator.kt +196 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/ClipboardCoordinator.kt +73 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/EditContext.kt +19 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/EditPipeline.kt +248 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/EditSession.kt +52 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/InputConnectionWrapper.kt +101 -7
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/LinkCoordinator.kt +69 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/MarkdownTextWatcher.kt +3 -3
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/MentionCoordinator.kt +118 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeStateEvent.kt +26 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnContextMenuItemPressEvent.kt +26 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnInputKeyPressEvent.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnPasteEvent.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/BlockStore.kt +254 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/FormattingStore.kt +80 -87
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputFormatter.kt +109 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputParser.kt +116 -22
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/MarkdownSerializer.kt +167 -38
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/RangeEditAdjustment.kt +149 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputEventEmitter.kt +66 -5
- package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputMeasurementStore.kt +4 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/BlockRange.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/BlockType.kt +48 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/FormattingRange.kt +9 -4
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/InputFormatterStyle.kt +39 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MathAtom.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MathChipStyle.kt +1 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MutableRangeBounds.kt +11 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputBulletSpan.kt +82 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputHeadingSpan.kt +58 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputListItemSpacingSpan.kt +37 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputOrderedListMarkerSpan.kt +63 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/BlockHandler.kt +54 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/HeadingBlockHandler.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/OrderedListBlockHandler.kt +38 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/UnorderedListBlockHandler.kt +37 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/toolbar/InputContextMenu.kt +8 -26
- package/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/parser/Parser.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockStyleContext.kt +9 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockquoteRenderer.kt +100 -12
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeBlockRenderer.kt +16 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/HeadingRenderer.kt +4 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListContextManager.kt +2 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListItemRenderer.kt +74 -18
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListRenderer.kt +43 -4
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt +9 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SoftBreakRenderer.kt +16 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SpanStyleCache.kt +30 -27
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/BaseListSpan.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/BlockquoteSpan.kt +174 -24
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBackgroundSpan.kt +27 -3
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBlockSpan.kt +13 -16
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeSpan.kt +1 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/EmphasisSpan.kt +1 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/ImageSpan.kt +182 -46
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/ListItemSpacingSpan.kt +33 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/ListMarkerAnchorSpan.kt +38 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/OrderedListSpan.kt +2 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/StrongSpan.kt +1 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/TaskListSpan.kt +3 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/UnorderedListSpan.kt +3 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/BlockquoteStyle.kt +6 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeBlockStyle.kt +26 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/ImageStyle.kt +7 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/ListStyle.kt +4 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleConfig.kt +13 -4
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/TableStyle.kt +6 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/CodeBlockHighlighter.kt +90 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/CodeBlockNode.kt +57 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/FeatureFlags.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownSegment.kt +9 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownViewManagerUtils.kt +37 -7
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/ReadableMapExtensions.kt +3 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/RenderedSegment.kt +10 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/SegmentSignature.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/StreamingMarkdownFilter.kt +83 -5
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/serialization/MarkdownASTSerializer.kt +4 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/MarkdownStyleParser.kt +74 -44
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/PasteTextUtils.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/ImageCache.kt +26 -3
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/ImageDownloader.kt +22 -9
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/LocalImageLoader.kt +161 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/extensions/TextPaintExtensions.kt +23 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/interaction/CheckboxTouchHelper.kt +7 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/interaction/TaskListTapUtils.kt +41 -21
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/span/BlockSpacing.kt +15 -8
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/LinkLongPressMovementMethod.kt +58 -27
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/SelectionActionMode.kt +49 -15
- package/android/src/main/java/com/swmansion/enriched/markdown/views/BlockMenuOptions.kt +45 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/views/CodeBlockContainerView.kt +396 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/views/ContextMenuPopup.kt +9 -6
- package/android/src/main/java/com/swmansion/enriched/markdown/views/CopyGlyph.kt +101 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/views/TableContainerView.kt +36 -9
- package/android/src/main/jni/CMakeLists.txt +53 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerShadowNode.cpp +10 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerShadowNode.h +11 -2
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.cpp +10 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.h +12 -2
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextState.cpp +9 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextState.h +24 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/conversions.h +16 -0
- package/android/src/math/java/com/swmansion/enriched/markdown/input/math/MathChipControllerImpl.kt +21 -4
- package/android/src/math/java/com/swmansion/enriched/markdown/renderer/MathInlineRenderer.kt +7 -2
- package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathChipSpan.kt +1 -1
- package/android/src/math/java/com/swmansion/enriched/markdown/views/MathContainerView.kt +6 -4
- package/cpp/highlight/CodeBlockHighlighter.cpp +284 -0
- package/cpp/highlight/CodeBlockHighlighter.hpp +66 -0
- package/cpp/highlight/CodeBlockLanguages.cpp +138 -0
- package/cpp/highlight/CodeBlockLanguages.hpp +25 -0
- package/cpp/highlight/HighlightGrammars.hpp +28 -0
- package/cpp/highlight/code_highlight_podspec.rb +211 -0
- package/cpp/highlight/gen-registry.mjs +155 -0
- package/cpp/highlight/grammar-versions.json +159 -0
- package/cpp/highlight/vendor/generated/generated_queries.h +1665 -0
- package/cpp/highlight/vendor/generated/generated_registry.cpp +59 -0
- package/cpp/parser/MD4CParser.cpp +173 -61
- package/cpp/parser/MD4CParser.hpp +1 -0
- package/cpp/parser/MarkdownASTNode.hpp +2 -1
- package/cpp/wasm/ASTSerializer.cpp +2 -0
- package/cpp/wasm/build.sh +1 -0
- package/cpp/wasm/md4c_wasm.cpp +3 -1
- package/docs/ACCESSIBILITY.md +14 -2
- package/docs/API_REFERENCE.md +234 -12
- package/docs/BREAKING_CHANGES.md +129 -0
- package/docs/CODE_HIGHLIGHT.md +133 -0
- package/docs/COPY_OPTIONS.md +47 -3
- package/docs/ELEMENTS_STRUCTURE.md +52 -4
- package/docs/IMAGE_CACHING.md +30 -0
- package/docs/INPUT.md +108 -11
- package/docs/LATEX_MATH.md +87 -45
- package/docs/MACOS.md +1 -1
- package/docs/MARKDOWN_STREAMING.md +27 -1
- package/docs/NATIVE_ASSETS.md +127 -0
- package/docs/RTL.md +1 -1
- package/docs/STYLES.md +46 -6
- package/docs/TESTING.md +112 -0
- package/docs/TEXT.md +16 -6
- package/docs/WEB.md +3 -1
- package/ios/EnrichedMarkdown.h +7 -0
- package/ios/EnrichedMarkdown.mm +284 -75
- package/ios/EnrichedMarkdownText.h +7 -0
- package/ios/EnrichedMarkdownText.mm +101 -73
- package/ios/attachments/ENRMImageAttachment.h +9 -0
- package/ios/attachments/ENRMImageAttachment.m +143 -40
- package/ios/attachments/ENRMMathInlineAttachment.h +2 -0
- package/ios/attachments/ENRMMathInlineAttachment.m +48 -81
- package/ios/attachments/ENRMMathInlineAttachmentShared.h +2 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/EventEmitters.cpp +75 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/EventEmitters.h +63 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.cpp +35 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.h +886 -23
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/RCTComponentViewHelpers.h +131 -0
- package/ios/input/ENRMAutoLinkDetector.h +2 -1
- package/ios/input/ENRMAutoLinkDetector.mm +79 -41
- package/ios/input/ENRMBlockEditCoordinator.h +71 -0
- package/ios/input/ENRMBlockEditCoordinator.mm +195 -0
- package/ios/input/ENRMBlockRange.h +28 -0
- package/ios/input/ENRMBlockRange.mm +30 -0
- package/ios/input/ENRMBlockStore.h +56 -0
- package/ios/input/ENRMBlockStore.mm +275 -0
- package/ios/input/ENRMClipboardCoordinator.h +45 -0
- package/ios/input/ENRMClipboardCoordinator.mm +120 -0
- package/ios/input/ENRMDetectorPipeline.h +2 -1
- package/ios/input/ENRMEditPipeline.h +76 -0
- package/ios/input/ENRMEditPipeline.mm +228 -0
- package/ios/input/ENRMEditSession.h +36 -0
- package/ios/input/ENRMEditSession.mm +63 -0
- package/ios/input/ENRMFormattingStore.h +17 -0
- package/ios/input/ENRMFormattingStore.mm +95 -105
- package/ios/input/ENRMInputBlockType.h +91 -0
- package/ios/input/ENRMInputBlockType.mm +5 -0
- package/ios/input/ENRMInputDecorationDrawer.h +18 -0
- package/ios/input/ENRMInputEventEmitter.h +56 -0
- package/ios/input/ENRMInputEventEmitter.mm +308 -0
- package/ios/input/ENRMInputFormatter.h +29 -69
- package/ios/input/ENRMInputFormatter.mm +216 -124
- package/ios/input/ENRMInputFormatterStyle.h +99 -0
- package/ios/input/ENRMInputFormatterStyle.mm +188 -0
- package/ios/input/ENRMInputLayoutManager.h +9 -0
- package/ios/input/ENRMInputLayoutManager.mm +30 -0
- package/ios/input/ENRMInputListMarkerDrawer.h +32 -0
- package/ios/input/ENRMInputListMarkerDrawer.mm +426 -0
- package/ios/input/ENRMInputParser.h +5 -6
- package/ios/input/ENRMInputParser.mm +461 -178
- package/ios/input/ENRMInputRemend.mm +2 -2
- package/ios/input/ENRMInputStyleStateBuilder.h +40 -0
- package/ios/input/ENRMInputStyleStateBuilder.mm +60 -0
- package/ios/input/ENRMInputTextView.mm +103 -8
- package/ios/input/ENRMInputTypingAttributesController.h +42 -0
- package/ios/input/ENRMInputTypingAttributesController.mm +203 -0
- package/ios/input/ENRMLinkCoordinator.h +41 -0
- package/ios/input/ENRMLinkCoordinator.mm +89 -0
- package/ios/input/ENRMMarkdownSerializer.h +29 -5
- package/ios/input/ENRMMarkdownSerializer.mm +170 -48
- package/ios/input/ENRMMathAtom.h +26 -0
- package/ios/input/ENRMMathAtom.mm +12 -0
- package/ios/input/ENRMMentionCoordinator.h +45 -0
- package/ios/input/ENRMMentionCoordinator.mm +167 -0
- package/ios/input/ENRMRangeEditAdjustment.h +38 -0
- package/ios/input/ENRMRangeEditAdjustment.mm +91 -0
- package/ios/input/ENRMRangeStoreUtils.h +39 -0
- package/ios/input/EnrichedMarkdownTextInput+ContextMenu.mm +6 -6
- package/ios/input/EnrichedMarkdownTextInput+Internal.h +11 -3
- package/ios/input/EnrichedMarkdownTextInput.h +7 -1
- package/ios/input/EnrichedMarkdownTextInput.mm +1089 -1023
- package/ios/input/InputStylePropsUtils.h +109 -68
- package/ios/input/internals/EnrichedMarkdownTextInputShadowNode.mm +2 -1
- package/ios/input/styles/ENRMBlockHandler.h +46 -0
- package/ios/input/styles/ENRMHeadingBlockHandler.h +15 -0
- package/ios/input/styles/ENRMHeadingBlockHandler.mm +38 -0
- package/ios/input/styles/ENRMOrderedListBlockHandler.h +14 -0
- package/ios/input/styles/ENRMOrderedListBlockHandler.mm +48 -0
- package/ios/input/styles/ENRMUnorderedListBlockHandler.h +15 -0
- package/ios/input/styles/ENRMUnorderedListBlockHandler.mm +51 -0
- package/ios/internals/ENRMViewFreeMeasurement.h +331 -0
- package/ios/internals/EnrichedMarkdownShadowNode.h +1 -3
- package/ios/internals/EnrichedMarkdownShadowNode.mm +16 -20
- package/ios/internals/EnrichedMarkdownTextShadowNode.h +1 -3
- package/ios/internals/EnrichedMarkdownTextShadowNode.mm +15 -20
- package/ios/internals/MeasurementCache.h +33 -7
- package/ios/internals/ShadowMeasurementUtils.h +63 -58
- package/ios/math/ENRMMathChipController.h +74 -0
- package/ios/math/ENRMMathChipController.mm +476 -0
- package/ios/math/ENRMRaTeXBridge.swift +4 -1
- package/ios/parser/ENRMMarkdownParser.h +1 -8
- package/ios/parser/ENRMMarkdownParser.mm +2 -11
- package/ios/parser/MarkdownASTNode.h +2 -1
- package/ios/parser/MarkdownParserBridge.mm +4 -0
- package/ios/renderer/AttributedRenderer.m +20 -2
- package/ios/renderer/BaseRenderer.h +17 -2
- package/ios/renderer/BaseRenderer.m +30 -0
- package/ios/renderer/BlockquoteRenderer.h +1 -1
- package/ios/renderer/BlockquoteRenderer.m +144 -35
- package/ios/renderer/CodeBlockRenderer.h +1 -1
- package/ios/renderer/CodeBlockRenderer.m +27 -23
- package/ios/renderer/CodeRenderer.h +1 -1
- package/ios/renderer/CodeRenderer.m +3 -1
- package/ios/renderer/ENRMImageRenderer.h +1 -1
- package/ios/renderer/ENRMImageRenderer.m +5 -1
- package/ios/renderer/ENRMMathInlineRenderer.h +1 -1
- package/ios/renderer/ENRMMathInlineRenderer.m +5 -1
- package/ios/renderer/ENRMSpoilerRenderer.h +1 -1
- package/ios/renderer/ENRMSpoilerRenderer.m +3 -1
- package/ios/renderer/EmphasisRenderer.h +1 -1
- package/ios/renderer/EmphasisRenderer.m +3 -1
- package/ios/renderer/HeadingRenderer.h +1 -1
- package/ios/renderer/HeadingRenderer.m +13 -6
- package/ios/renderer/HighlightRenderer.h +1 -1
- package/ios/renderer/HighlightRenderer.m +3 -1
- package/ios/renderer/LinkRenderer.h +1 -1
- package/ios/renderer/LinkRenderer.m +3 -1
- package/ios/renderer/ListItemRenderer.h +13 -1
- package/ios/renderer/ListItemRenderer.m +102 -44
- package/ios/renderer/ListRenderer.h +2 -2
- package/ios/renderer/ListRenderer.m +63 -25
- package/ios/renderer/ParagraphRenderer.h +1 -1
- package/ios/renderer/ParagraphRenderer.m +16 -8
- package/ios/renderer/RenderContext.h +10 -0
- package/ios/renderer/RenderContext.m +44 -0
- package/ios/renderer/RendererFactory.m +14 -0
- package/ios/renderer/StrikethroughRenderer.h +1 -1
- package/ios/renderer/StrikethroughRenderer.m +3 -1
- package/ios/renderer/StrongRenderer.h +1 -1
- package/ios/renderer/StrongRenderer.m +3 -1
- package/ios/renderer/SubscriptRenderer.h +1 -1
- package/ios/renderer/SubscriptRenderer.m +3 -1
- package/ios/renderer/SuperscriptRenderer.h +1 -1
- package/ios/renderer/SuperscriptRenderer.m +3 -1
- package/ios/renderer/TextRenderer.h +2 -2
- package/ios/renderer/TextRenderer.m +3 -1
- package/ios/renderer/ThematicBreakRenderer.h +1 -1
- package/ios/renderer/ThematicBreakRenderer.m +3 -1
- package/ios/renderer/UnderlineRenderer.h +1 -1
- package/ios/renderer/UnderlineRenderer.m +3 -1
- package/ios/styles/StyleConfig.h +22 -0
- package/ios/styles/StyleConfig.mm +132 -0
- package/ios/utils/BlockquoteBorder.h +6 -0
- package/ios/utils/BlockquoteBorder.m +249 -52
- package/ios/utils/CodeBlockBackground.m +16 -2
- package/ios/utils/ENRMAtomicSize.h +65 -0
- package/ios/utils/ENRMBlockMenu.h +57 -0
- package/ios/utils/ENRMCodeBlockContent.h +37 -0
- package/ios/utils/ENRMCodeBlockContent.mm +79 -0
- package/ios/utils/ENRMCodeBlockHighlighter.h +37 -0
- package/ios/utils/ENRMCodeBlockHighlighter.mm +51 -0
- package/ios/utils/ENRMFeatureFlags.h +7 -0
- package/ios/utils/ENRMImageDownloader.h +11 -1
- package/ios/utils/ENRMImageDownloader.m +60 -16
- package/ios/utils/ENRMLocalImageLoader.h +31 -0
- package/ios/utils/ENRMLocalImageLoader.m +68 -0
- package/ios/utils/ENRMMathFallback.h +26 -0
- package/ios/utils/ENRMMathFallback.m +18 -0
- package/ios/utils/ENRMTextViewSetup.h +35 -17
- package/ios/utils/EditMenuUtils.h +22 -5
- package/ios/utils/EditMenuUtils.m +53 -9
- package/ios/utils/ImageRequestHeaderUtils.h +35 -0
- package/ios/utils/LastElementUtils.h +1 -0
- package/ios/utils/ListMarkerDrawer.m +29 -42
- package/ios/utils/MarkdownASTSerializer.m +4 -0
- package/ios/utils/ParagraphStyleUtils.h +5 -0
- package/ios/utils/ParagraphStyleUtils.m +77 -17
- package/ios/utils/RenderedMarkdownSegment.h +13 -1
- package/ios/utils/RenderedMarkdownSegment.m +20 -0
- package/ios/utils/SegmentRenderer.m +17 -4
- package/ios/utils/StreamingMarkdownFilter.h +11 -1
- package/ios/utils/StreamingMarkdownFilter.m +98 -2
- package/ios/utils/StylePropsUtils.h +63 -0
- package/ios/utils/TaskListTapUtils.m +24 -0
- package/ios/views/ENRMCodeBlockContainerView.h +53 -0
- package/ios/views/ENRMCodeBlockContainerView.m +559 -0
- package/ios/views/ENRMMathContainerView.h +16 -0
- package/ios/views/ENRMMathContainerView.m +74 -19
- package/ios/views/TableContainerView.h +22 -0
- package/ios/views/TableContainerView.m +261 -175
- package/jest.d.ts +1 -0
- package/jest.js +5 -0
- package/lib/module/EnrichedMarkdownNativeComponent.ts +73 -0
- package/lib/module/EnrichedMarkdownTextInput.js +84 -5
- package/lib/module/EnrichedMarkdownTextInput.js.map +1 -1
- package/lib/module/EnrichedMarkdownTextInputNativeComponent.ts +78 -5
- package/lib/module/EnrichedMarkdownTextNativeComponent.ts +74 -0
- package/lib/module/headingDefaults.js +34 -0
- package/lib/module/headingDefaults.js.map +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/jest/index.js +191 -0
- package/lib/module/jest/index.js.map +1 -0
- package/lib/module/native/EnrichedMarkdownText.js +37 -5
- package/lib/module/native/EnrichedMarkdownText.js.map +1 -1
- package/lib/module/normalizeMarkdownStyle.js +81 -19
- package/lib/module/normalizeMarkdownStyle.js.map +1 -1
- package/lib/module/normalizeMarkdownStyle.web.js +56 -18
- package/lib/module/normalizeMarkdownStyle.web.js.map +1 -1
- package/lib/module/normalizeMarkdownTextInputStyle.js +62 -15
- package/lib/module/normalizeMarkdownTextInputStyle.js.map +1 -1
- package/lib/module/normalizeMenuItem.js +1 -1
- package/lib/module/utils/textInputState.js +26 -0
- package/lib/module/utils/textInputState.js.map +1 -0
- package/lib/module/web/EnrichedMarkdownText.js +9 -5
- package/lib/module/web/EnrichedMarkdownText.js.map +1 -1
- package/lib/module/web/parseMarkdown.js +4 -3
- package/lib/module/web/parseMarkdown.js.map +1 -1
- package/lib/module/web/renderers/InlineRenderers.js +6 -0
- package/lib/module/web/renderers/InlineRenderers.js.map +1 -1
- package/lib/module/web/renderers/ListRenderers.js +7 -2
- package/lib/module/web/renderers/ListRenderers.js.map +1 -1
- package/lib/module/web/renderers/index.js +7 -4
- package/lib/module/web/renderers/index.js.map +1 -1
- package/lib/module/web/styles.js +83 -6
- package/lib/module/web/styles.js.map +1 -1
- package/lib/module/web/utils.js +1 -0
- package/lib/module/web/utils.js.map +1 -1
- package/lib/module/web/wasm/md4c.js +0 -0
- package/lib/module/web/wasm/md4c.js.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts +66 -0
- package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts +94 -9
- package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts +69 -5
- package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts +66 -0
- package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/headingDefaults.d.ts +9 -0
- package/lib/typescript/src/headingDefaults.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +2 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/index.web.d.ts +1 -1
- package/lib/typescript/src/index.web.d.ts.map +1 -1
- package/lib/typescript/src/jest/index.d.ts +6 -0
- package/lib/typescript/src/jest/index.d.ts.map +1 -0
- package/lib/typescript/src/native/EnrichedMarkdownText.d.ts +3 -3
- package/lib/typescript/src/native/EnrichedMarkdownText.d.ts.map +1 -1
- package/lib/typescript/src/normalizeMarkdownStyle.d.ts.map +1 -1
- package/lib/typescript/src/normalizeMarkdownStyle.web.d.ts.map +1 -1
- package/lib/typescript/src/normalizeMarkdownTextInputStyle.d.ts +19 -5
- package/lib/typescript/src/normalizeMarkdownTextInputStyle.d.ts.map +1 -1
- package/lib/typescript/src/types/MarkdownStyle.d.ts +72 -0
- package/lib/typescript/src/types/MarkdownStyle.d.ts.map +1 -1
- package/lib/typescript/src/types/MarkdownStyleInternal.d.ts +27 -0
- package/lib/typescript/src/types/MarkdownStyleInternal.d.ts.map +1 -1
- package/lib/typescript/src/types/MarkdownTextProps.d.ts +104 -9
- package/lib/typescript/src/types/MarkdownTextProps.d.ts.map +1 -1
- package/lib/typescript/src/types/MarkdownTextProps.web.d.ts +19 -0
- package/lib/typescript/src/types/MarkdownTextProps.web.d.ts.map +1 -1
- package/lib/typescript/src/types/events.d.ts +19 -0
- package/lib/typescript/src/types/events.d.ts.map +1 -1
- package/lib/typescript/src/utils/textInputState.d.ts +24 -0
- package/lib/typescript/src/utils/textInputState.d.ts.map +1 -0
- package/lib/typescript/src/web/EnrichedMarkdownText.d.ts +1 -1
- package/lib/typescript/src/web/EnrichedMarkdownText.d.ts.map +1 -1
- package/lib/typescript/src/web/parseMarkdown.d.ts +1 -1
- package/lib/typescript/src/web/parseMarkdown.d.ts.map +1 -1
- package/lib/typescript/src/web/renderers/InlineRenderers.d.ts.map +1 -1
- package/lib/typescript/src/web/renderers/ListRenderers.d.ts.map +1 -1
- package/lib/typescript/src/web/renderers/index.d.ts +2 -1
- package/lib/typescript/src/web/renderers/index.d.ts.map +1 -1
- package/lib/typescript/src/web/styles.d.ts +2 -1
- package/lib/typescript/src/web/styles.d.ts.map +1 -1
- package/lib/typescript/src/web/types.d.ts +6 -2
- package/lib/typescript/src/web/types.d.ts.map +1 -1
- package/lib/typescript/src/web/utils.d.ts.map +1 -1
- package/package.json +36 -9
- package/postinstall.mjs +131 -0
- package/ratex-version.json +21 -0
- package/src/EnrichedMarkdownNativeComponent.ts +73 -0
- package/src/EnrichedMarkdownTextInput.tsx +159 -8
- package/src/EnrichedMarkdownTextInputNativeComponent.ts +78 -5
- package/src/EnrichedMarkdownTextNativeComponent.ts +74 -0
- package/src/headingDefaults.ts +21 -0
- package/src/index.tsx +9 -0
- package/src/index.web.tsx +1 -0
- package/src/jest/index.tsx +215 -0
- package/src/native/EnrichedMarkdownText.tsx +53 -2
- package/src/normalizeMarkdownStyle.ts +102 -16
- package/src/normalizeMarkdownStyle.web.ts +63 -15
- package/src/normalizeMarkdownTextInputStyle.ts +110 -35
- package/src/normalizeMenuItem.ts +1 -1
- package/src/types/MarkdownStyle.ts +74 -0
- package/src/types/MarkdownStyleInternal.ts +39 -0
- package/src/types/MarkdownTextProps.ts +101 -9
- package/src/types/MarkdownTextProps.web.ts +19 -0
- package/src/types/events.ts +21 -0
- package/src/utils/textInputState.ts +35 -0
- package/src/web/EnrichedMarkdownText.tsx +16 -2
- package/src/web/parseMarkdown.ts +6 -2
- package/src/web/renderers/InlineRenderers.tsx +5 -0
- package/src/web/renderers/ListRenderers.tsx +14 -2
- package/src/web/renderers/index.tsx +6 -2
- package/src/web/styles.ts +89 -5
- package/src/web/types.ts +6 -1
- package/src/web/utils.ts +1 -0
- package/src/web/wasm/md4c.js +0 -0
- package/vendor-grammars.mjs +511 -0
- package/vendor-ratex.mjs +173 -0
- package/app.plugin.js +0 -2
- package/plugin/build/withAndroidMath.js +0 -19
- package/plugin/build/withIosMath.js +0 -28
- package/plugin/build/withReactNativeEnrichedMarkdown.js +0 -11
- package/plugin/src/withAndroidMath.ts +0 -24
- package/plugin/src/withIosMath.ts +0 -35
- package/plugin/src/withReactNativeEnrichedMarkdown.ts +0 -17
- package/plugin/tsconfig.build.json +0 -16
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#import <Foundation/Foundation.h>
|
|
4
|
+
|
|
5
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
6
|
+
|
|
7
|
+
/// Block-level (paragraph-scoped) element types. A block covers whole lines,
|
|
8
|
+
/// unlike inline styles (ENRMInputStyleType) which cover character ranges.
|
|
9
|
+
///
|
|
10
|
+
/// Paragraph is the default: every line is a paragraph until a block handler
|
|
11
|
+
/// claims it. Concrete block types (headings, list items, etc.) are appended
|
|
12
|
+
/// here as their handlers are added — each new case must have a matching
|
|
13
|
+
/// id<ENRMBlockHandler> registered in ENRMInputFormatter.
|
|
14
|
+
typedef NS_ENUM(NSInteger, ENRMInputBlockType) {
|
|
15
|
+
ENRMInputBlockTypeParagraph = 0,
|
|
16
|
+
ENRMInputBlockTypeHeading1 = 1,
|
|
17
|
+
ENRMInputBlockTypeHeading2 = 2,
|
|
18
|
+
ENRMInputBlockTypeHeading3 = 3,
|
|
19
|
+
ENRMInputBlockTypeHeading4 = 4,
|
|
20
|
+
ENRMInputBlockTypeHeading5 = 5,
|
|
21
|
+
ENRMInputBlockTypeHeading6 = 6,
|
|
22
|
+
ENRMInputBlockTypeUnorderedListItem = 7,
|
|
23
|
+
ENRMInputBlockTypeOrderedListItem = 8,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/// Whether the type is a list item (nesting depth rides in the range's level).
|
|
27
|
+
static inline BOOL ENRMBlockTypeIsListItem(ENRMInputBlockType type)
|
|
28
|
+
{
|
|
29
|
+
return type == ENRMInputBlockTypeUnorderedListItem || type == ENRMInputBlockTypeOrderedListItem;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/// Maximum bullet-list nesting depth (0-based). Depth is carried as the block's
|
|
33
|
+
/// level payload (ENRMBlockRange.level), clamped into [0, kENRMMaxListDepth].
|
|
34
|
+
static const NSInteger kENRMMaxListDepth = 5;
|
|
35
|
+
|
|
36
|
+
/// Bullet-list layout metrics (points). Shared by the list block handler (which
|
|
37
|
+
/// reserves the head-indent column via the paragraph style) and the layout
|
|
38
|
+
/// manager (which draws the marker glyph into that column). Text for a list item
|
|
39
|
+
/// at depth d starts at (d + 1) * kENRMListIndentPerDepth from the leading edge;
|
|
40
|
+
/// the marker is centered kENRMListBulletGap before the text.
|
|
41
|
+
static const CGFloat kENRMListIndentPerDepth = 18.0;
|
|
42
|
+
static const CGFloat kENRMListBulletGap = 9.0;
|
|
43
|
+
|
|
44
|
+
/// Maps a heading level (1-6) to its ENRMInputBlockType. Levels outside 1-6 are
|
|
45
|
+
/// clamped into range. The contiguous Heading1..Heading6 enum values make this a
|
|
46
|
+
/// simple offset from the Heading1 base.
|
|
47
|
+
static inline ENRMInputBlockType ENRMBlockTypeForHeadingLevel(NSInteger level)
|
|
48
|
+
{
|
|
49
|
+
if (level < 1) {
|
|
50
|
+
level = 1;
|
|
51
|
+
} else if (level > 6) {
|
|
52
|
+
level = 6;
|
|
53
|
+
}
|
|
54
|
+
return (ENRMInputBlockType)(ENRMInputBlockTypeHeading1 + (level - 1));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/// The heading level (1-6) for a heading block type, or 0 if the type is not a
|
|
58
|
+
/// heading. Inverse of ENRMBlockTypeForHeadingLevel.
|
|
59
|
+
static inline NSInteger ENRMHeadingLevelForBlockType(ENRMInputBlockType type)
|
|
60
|
+
{
|
|
61
|
+
if (type >= ENRMInputBlockTypeHeading1 && type <= ENRMInputBlockTypeHeading6) {
|
|
62
|
+
return (NSInteger)(type - ENRMInputBlockTypeHeading1) + 1;
|
|
63
|
+
}
|
|
64
|
+
return 0;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/// Whether an emptied line of this type keeps a zero-length anchor (an emptied
|
|
68
|
+
/// heading stays a heading, an emptied bullet keeps its marker) instead of
|
|
69
|
+
/// reverting to a plain paragraph.
|
|
70
|
+
static inline BOOL ENRMBlockTypePersistsWhenEmpty(ENRMInputBlockType type)
|
|
71
|
+
{
|
|
72
|
+
return (type >= ENRMInputBlockTypeHeading1 && type <= ENRMInputBlockTypeHeading6) || ENRMBlockTypeIsListItem(type);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/// NSAttributedString attribute carrying the ENRMInputBlockType (boxed NSNumber)
|
|
76
|
+
/// of the paragraph a character belongs to. Set by ENRMInputFormatter on the
|
|
77
|
+
/// paragraphs a block claims; the next block pass uses it to find and strip the
|
|
78
|
+
/// previous pass's styling before re-applying.
|
|
79
|
+
extern NSAttributedStringKey const ENRMBlockTypeAttributeName;
|
|
80
|
+
|
|
81
|
+
/// NSAttributedString attribute carrying the block's integer payload (boxed
|
|
82
|
+
/// NSNumber) — e.g. heading level or list depth. See ENRMBlockRange.level.
|
|
83
|
+
/// Applied and stripped alongside ENRMBlockTypeAttributeName.
|
|
84
|
+
extern NSAttributedStringKey const ENRMBlockLevelAttributeName;
|
|
85
|
+
|
|
86
|
+
/// NSAttributedString attribute carrying an ordered item's 1-based ordinal
|
|
87
|
+
/// (boxed NSNumber) so the layout manager can draw its number. Applied and
|
|
88
|
+
/// stripped alongside ENRMBlockTypeAttributeName.
|
|
89
|
+
extern NSAttributedStringKey const ENRMBlockOrdinalAttributeName;
|
|
90
|
+
|
|
91
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#import "ENRMUIKit.h"
|
|
4
|
+
|
|
5
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
6
|
+
|
|
7
|
+
/// Draws decorations (markers, borders, backgrounds) for the input layout manager.
|
|
8
|
+
@protocol ENRMInputDecorationDrawer <NSObject>
|
|
9
|
+
|
|
10
|
+
- (void)drawDecorationsForGlyphRange:(NSRange)glyphRange
|
|
11
|
+
layoutManager:(NSLayoutManager *)layoutManager
|
|
12
|
+
atPoint:(CGPoint)origin;
|
|
13
|
+
|
|
14
|
+
- (void)drawEmptyEditorDecorationsWithInset:(UIEdgeInsets)inset layoutManager:(NSLayoutManager *)layoutManager;
|
|
15
|
+
|
|
16
|
+
@end
|
|
17
|
+
|
|
18
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#import "ENRMInputStyleStateBuilder.h"
|
|
4
|
+
#import "ENRMUIKit.h"
|
|
5
|
+
#import <Foundation/Foundation.h>
|
|
6
|
+
|
|
7
|
+
#ifdef __cplusplus
|
|
8
|
+
#import <ReactNativeEnrichedMarkdown/EventEmitters.h>
|
|
9
|
+
#import <memory>
|
|
10
|
+
#endif
|
|
11
|
+
|
|
12
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
13
|
+
|
|
14
|
+
@protocol ENRMInputEventEmitterDataSource <ENRMInputStyleStateDataSource>
|
|
15
|
+
|
|
16
|
+
#ifdef __cplusplus
|
|
17
|
+
- (std::shared_ptr<facebook::react::EnrichedMarkdownTextInputEventEmitter const>)fabricEventEmitter;
|
|
18
|
+
#endif
|
|
19
|
+
|
|
20
|
+
- (NSString *)plainText;
|
|
21
|
+
- (NSString *)currentMarkdown;
|
|
22
|
+
- (CGRect)computeCaretRect;
|
|
23
|
+
|
|
24
|
+
@end
|
|
25
|
+
|
|
26
|
+
@interface ENRMInputEventEmitter : NSObject
|
|
27
|
+
|
|
28
|
+
@property (nonatomic, assign) BOOL emitMarkdown;
|
|
29
|
+
|
|
30
|
+
- (instancetype)initWithDataSource:(id<ENRMInputEventEmitterDataSource>)dataSource;
|
|
31
|
+
|
|
32
|
+
- (void)emitOnChangeText;
|
|
33
|
+
- (void)emitOnKeyPress:(NSString *)text;
|
|
34
|
+
- (void)emitOnChangeMarkdown;
|
|
35
|
+
- (void)emitOnChangeSelection;
|
|
36
|
+
- (void)emitOnChangeState;
|
|
37
|
+
- (void)emitFormattingChanged;
|
|
38
|
+
- (void)emitCaretRectChangeIfNeeded;
|
|
39
|
+
- (void)invalidateCachedState;
|
|
40
|
+
- (void)emitContextMenuItemPress:(NSString *)itemText;
|
|
41
|
+
- (void)emitOnFocus;
|
|
42
|
+
- (void)emitOnBlur;
|
|
43
|
+
- (void)emitOnLinkDetectedWithText:(NSString *)text url:(NSString *)url range:(NSRange)range;
|
|
44
|
+
- (void)emitOnStartMention:(NSString *)indicator;
|
|
45
|
+
- (void)emitOnChangeMentionWithIndicator:(NSString *)indicator text:(NSString *)text;
|
|
46
|
+
- (void)emitOnEndMention:(NSString *)indicator;
|
|
47
|
+
/// `rect` is the chip's glyph rect in the host view's coordinates, in points —
|
|
48
|
+
/// JS positions its formula editor against it.
|
|
49
|
+
- (void)emitOnMathPressWithLatex:(NSString *)latex range:(NSRange)range displayMode:(BOOL)displayMode rect:(CGRect)rect;
|
|
50
|
+
- (void)emitOnPasteWithText:(NSString *)text markdown:(NSString *)markdown;
|
|
51
|
+
- (void)requestMarkdown:(NSInteger)requestId;
|
|
52
|
+
- (void)requestCaretRect:(NSInteger)requestId;
|
|
53
|
+
|
|
54
|
+
@end
|
|
55
|
+
|
|
56
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
#import "ENRMInputEventEmitter.h"
|
|
2
|
+
|
|
3
|
+
using namespace facebook::react;
|
|
4
|
+
|
|
5
|
+
static EnrichedMarkdownTextInputEventEmitter::OnChangeState ENRMFabricChangeState(ENRMInputStyleSnapshot s)
|
|
6
|
+
{
|
|
7
|
+
return {
|
|
8
|
+
.bold = {.isActive = s.bold},
|
|
9
|
+
.italic = {.isActive = s.italic},
|
|
10
|
+
.underline = {.isActive = s.underline},
|
|
11
|
+
.strikethrough = {.isActive = s.strikethrough},
|
|
12
|
+
.spoiler = {.isActive = s.spoiler},
|
|
13
|
+
.link = {.isActive = s.link},
|
|
14
|
+
.heading = {.isActive = s.headingLevel > 0, .level = static_cast<int>(s.headingLevel)},
|
|
15
|
+
.unorderedList = {.isActive = s.unorderedList, .depth = static_cast<int>(s.unorderedList ? s.listDepth : 0)},
|
|
16
|
+
.orderedList = {.isActive = s.orderedList, .depth = static_cast<int>(s.orderedList ? s.listDepth : 0)},
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
static EnrichedMarkdownTextInputEventEmitter::OnContextMenuItemPressStyleState
|
|
21
|
+
ENRMFabricContextMenuStyleState(ENRMInputStyleSnapshot s)
|
|
22
|
+
{
|
|
23
|
+
return {
|
|
24
|
+
.bold = {.isActive = s.bold},
|
|
25
|
+
.italic = {.isActive = s.italic},
|
|
26
|
+
.underline = {.isActive = s.underline},
|
|
27
|
+
.strikethrough = {.isActive = s.strikethrough},
|
|
28
|
+
.spoiler = {.isActive = s.spoiler},
|
|
29
|
+
.link = {.isActive = s.link},
|
|
30
|
+
.heading = {.isActive = s.headingLevel > 0, .level = static_cast<int>(s.headingLevel)},
|
|
31
|
+
.unorderedList = {.isActive = s.unorderedList, .depth = static_cast<int>(s.unorderedList ? s.listDepth : 0)},
|
|
32
|
+
.orderedList = {.isActive = s.orderedList, .depth = static_cast<int>(s.orderedList ? s.listDepth : 0)},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
#define ENRM_GUARD_EMITTER(name) \
|
|
37
|
+
auto name = [self emitter]; \
|
|
38
|
+
if (name == nullptr) { \
|
|
39
|
+
return; \
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@implementation ENRMInputEventEmitter {
|
|
43
|
+
__weak id<ENRMInputEventEmitterDataSource> _dataSource;
|
|
44
|
+
|
|
45
|
+
struct {
|
|
46
|
+
BOOL bold, italic, underline, strikethrough, spoiler, link, initialized;
|
|
47
|
+
NSInteger headingLevel;
|
|
48
|
+
BOOL unorderedList;
|
|
49
|
+
NSInteger unorderedListDepth;
|
|
50
|
+
BOOL orderedList;
|
|
51
|
+
NSInteger orderedListDepth;
|
|
52
|
+
} _prevState;
|
|
53
|
+
|
|
54
|
+
std::optional<CGRect> _prevCaretRect;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
- (instancetype)initWithDataSource:(id<ENRMInputEventEmitterDataSource>)dataSource
|
|
58
|
+
{
|
|
59
|
+
self = [super init];
|
|
60
|
+
if (self) {
|
|
61
|
+
_dataSource = dataSource;
|
|
62
|
+
}
|
|
63
|
+
return self;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
#pragma mark - Private
|
|
67
|
+
|
|
68
|
+
- (std::shared_ptr<EnrichedMarkdownTextInputEventEmitter const>)emitter
|
|
69
|
+
{
|
|
70
|
+
return [_dataSource fabricEventEmitter];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
#pragma mark - Simple emitters
|
|
74
|
+
|
|
75
|
+
- (void)emitOnChangeText
|
|
76
|
+
{
|
|
77
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
78
|
+
NSString *plainText = [_dataSource plainText];
|
|
79
|
+
emitter->onChangeText({.value = std::string([plainText UTF8String] ?: "")});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/// Maps the replacement text of a pending edit to RN TextInput's
|
|
83
|
+
/// `onKeyPress` key names: empty text means deletion ("Backspace"), and
|
|
84
|
+
/// leading \n, \t and ESC map to "Enter", "Tab" and "Escape".
|
|
85
|
+
- (void)emitOnKeyPress:(NSString *)text
|
|
86
|
+
{
|
|
87
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
88
|
+
NSString *key;
|
|
89
|
+
if (text.length == 0) {
|
|
90
|
+
key = @"Backspace";
|
|
91
|
+
} else {
|
|
92
|
+
switch ([text characterAtIndex:0]) {
|
|
93
|
+
case '\n':
|
|
94
|
+
key = @"Enter";
|
|
95
|
+
break;
|
|
96
|
+
case '\t':
|
|
97
|
+
key = @"Tab";
|
|
98
|
+
break;
|
|
99
|
+
case 0x1B:
|
|
100
|
+
key = @"Escape";
|
|
101
|
+
break;
|
|
102
|
+
default:
|
|
103
|
+
key = text;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
emitter->onInputKeyPress({.key = std::string([key UTF8String] ?: "")});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
- (void)emitOnChangeMarkdown
|
|
111
|
+
{
|
|
112
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
113
|
+
NSString *markdown = [_dataSource currentMarkdown];
|
|
114
|
+
emitter->onChangeMarkdown({.value = std::string([markdown UTF8String] ?: "")});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
- (void)emitOnChangeSelection
|
|
118
|
+
{
|
|
119
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
120
|
+
NSRange selection = [_dataSource selectedRange];
|
|
121
|
+
emitter->onChangeSelection({
|
|
122
|
+
.start = static_cast<int>(selection.location),
|
|
123
|
+
.end = static_cast<int>(NSMaxRange(selection)),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
- (void)emitOnFocus
|
|
128
|
+
{
|
|
129
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
130
|
+
emitter->onInputFocus({});
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
- (void)emitOnBlur
|
|
134
|
+
{
|
|
135
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
136
|
+
emitter->onInputBlur({});
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
- (void)emitOnLinkDetectedWithText:(NSString *)text url:(NSString *)url range:(NSRange)range
|
|
140
|
+
{
|
|
141
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
142
|
+
emitter->onLinkDetected({
|
|
143
|
+
.text = std::string([text UTF8String] ?: ""),
|
|
144
|
+
.url = std::string([url UTF8String] ?: ""),
|
|
145
|
+
.start = static_cast<int>(range.location),
|
|
146
|
+
.end = static_cast<int>(range.location + range.length),
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
- (void)emitOnMathPressWithLatex:(NSString *)latex range:(NSRange)range displayMode:(BOOL)displayMode rect:(CGRect)rect
|
|
151
|
+
{
|
|
152
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
153
|
+
emitter->onMathPress({
|
|
154
|
+
.latex = std::string([latex UTF8String] ?: ""),
|
|
155
|
+
.start = static_cast<int>(range.location),
|
|
156
|
+
.end = static_cast<int>(NSMaxRange(range)),
|
|
157
|
+
.displayMode = displayMode ? true : false,
|
|
158
|
+
.x = rect.origin.x,
|
|
159
|
+
.y = rect.origin.y,
|
|
160
|
+
.width = rect.size.width,
|
|
161
|
+
.height = rect.size.height,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
- (void)emitOnPasteWithText:(NSString *)text markdown:(NSString *)markdown
|
|
166
|
+
{
|
|
167
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
168
|
+
emitter->onPaste({
|
|
169
|
+
.text = std::string([text UTF8String] ?: ""),
|
|
170
|
+
.markdown = std::string([markdown UTF8String] ?: ""),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
- (void)emitOnStartMention:(NSString *)indicator
|
|
175
|
+
{
|
|
176
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
177
|
+
emitter->onStartMention({.indicator = std::string([indicator UTF8String] ?: "")});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
- (void)emitOnChangeMentionWithIndicator:(NSString *)indicator text:(NSString *)text
|
|
181
|
+
{
|
|
182
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
183
|
+
emitter->onChangeMention({
|
|
184
|
+
.indicator = std::string([indicator UTF8String] ?: ""),
|
|
185
|
+
.text = std::string([text UTF8String] ?: ""),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
- (void)emitOnEndMention:(NSString *)indicator
|
|
190
|
+
{
|
|
191
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
192
|
+
emitter->onEndMention({.indicator = std::string([indicator UTF8String] ?: "")});
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
#pragma mark - Stateful emitters
|
|
196
|
+
|
|
197
|
+
- (void)emitOnChangeState
|
|
198
|
+
{
|
|
199
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
200
|
+
|
|
201
|
+
ENRMInputStyleSnapshot snapshot = [ENRMInputStyleStateBuilder snapshotAtCurrentCursor:_dataSource];
|
|
202
|
+
|
|
203
|
+
if (_prevState.initialized && _prevState.bold == snapshot.bold && _prevState.italic == snapshot.italic &&
|
|
204
|
+
_prevState.underline == snapshot.underline && _prevState.strikethrough == snapshot.strikethrough &&
|
|
205
|
+
_prevState.spoiler == snapshot.spoiler && _prevState.link == snapshot.link &&
|
|
206
|
+
_prevState.headingLevel == snapshot.headingLevel && _prevState.unorderedList == snapshot.unorderedList &&
|
|
207
|
+
_prevState.unorderedListDepth == snapshot.listDepth && _prevState.orderedList == snapshot.orderedList &&
|
|
208
|
+
_prevState.orderedListDepth == snapshot.listDepth) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
_prevState.bold = snapshot.bold;
|
|
213
|
+
_prevState.italic = snapshot.italic;
|
|
214
|
+
_prevState.underline = snapshot.underline;
|
|
215
|
+
_prevState.strikethrough = snapshot.strikethrough;
|
|
216
|
+
_prevState.spoiler = snapshot.spoiler;
|
|
217
|
+
_prevState.link = snapshot.link;
|
|
218
|
+
_prevState.headingLevel = snapshot.headingLevel;
|
|
219
|
+
_prevState.unorderedList = snapshot.unorderedList;
|
|
220
|
+
_prevState.unorderedListDepth = snapshot.listDepth;
|
|
221
|
+
_prevState.orderedList = snapshot.orderedList;
|
|
222
|
+
_prevState.orderedListDepth = snapshot.listDepth;
|
|
223
|
+
_prevState.initialized = YES;
|
|
224
|
+
|
|
225
|
+
emitter->onChangeState(ENRMFabricChangeState(snapshot));
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
- (void)emitCaretRectChangeIfNeeded
|
|
229
|
+
{
|
|
230
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
231
|
+
|
|
232
|
+
CGRect caretRect = [_dataSource computeCaretRect];
|
|
233
|
+
|
|
234
|
+
if (_prevCaretRect.has_value() && CGRectEqualToRect(_prevCaretRect.value(), caretRect)) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
_prevCaretRect = caretRect;
|
|
239
|
+
|
|
240
|
+
emitter->onCaretRectChange({
|
|
241
|
+
.x = caretRect.origin.x,
|
|
242
|
+
.y = caretRect.origin.y,
|
|
243
|
+
.width = caretRect.size.width,
|
|
244
|
+
.height = caretRect.size.height,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
- (void)invalidateCachedState
|
|
249
|
+
{
|
|
250
|
+
_prevState.initialized = NO;
|
|
251
|
+
_prevCaretRect.reset();
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
- (void)emitContextMenuItemPress:(NSString *)itemText
|
|
255
|
+
{
|
|
256
|
+
ENRM_GUARD_EMITTER(eventEmitter);
|
|
257
|
+
|
|
258
|
+
NSRange selectedRange = [_dataSource selectedRange];
|
|
259
|
+
NSString *selectedText = selectedRange.length > 0 ? [[_dataSource plainText] substringWithRange:selectedRange] : @"";
|
|
260
|
+
|
|
261
|
+
ENRMInputStyleSnapshot snapshot = [ENRMInputStyleStateBuilder snapshotForRange:selectedRange dataSource:_dataSource];
|
|
262
|
+
|
|
263
|
+
eventEmitter->onContextMenuItemPress({
|
|
264
|
+
.itemText = std::string(itemText.UTF8String),
|
|
265
|
+
.selectedText = std::string(selectedText.UTF8String),
|
|
266
|
+
.selectionStart = static_cast<int>(selectedRange.location),
|
|
267
|
+
.selectionEnd = static_cast<int>(NSMaxRange(selectedRange)),
|
|
268
|
+
.styleState = ENRMFabricContextMenuStyleState(snapshot),
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
#pragma mark - Compound helpers
|
|
273
|
+
|
|
274
|
+
- (void)emitFormattingChanged
|
|
275
|
+
{
|
|
276
|
+
[self emitOnChangeState];
|
|
277
|
+
if (_emitMarkdown) {
|
|
278
|
+
[self emitOnChangeMarkdown];
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
#pragma mark - Request-response
|
|
283
|
+
|
|
284
|
+
- (void)requestMarkdown:(NSInteger)requestId
|
|
285
|
+
{
|
|
286
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
287
|
+
NSString *markdown = [_dataSource currentMarkdown];
|
|
288
|
+
emitter->onRequestMarkdownResult({
|
|
289
|
+
.requestId = static_cast<int>(requestId),
|
|
290
|
+
.markdown = std::string([markdown UTF8String] ?: ""),
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
- (void)requestCaretRect:(NSInteger)requestId
|
|
295
|
+
{
|
|
296
|
+
ENRM_GUARD_EMITTER(emitter);
|
|
297
|
+
|
|
298
|
+
CGRect caretRect = [_dataSource computeCaretRect];
|
|
299
|
+
emitter->onRequestCaretRectResult({
|
|
300
|
+
.requestId = static_cast<int>(requestId),
|
|
301
|
+
.x = caretRect.origin.x,
|
|
302
|
+
.y = caretRect.origin.y,
|
|
303
|
+
.width = caretRect.size.width,
|
|
304
|
+
.height = caretRect.size.height,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
@end
|
|
@@ -1,88 +1,48 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#import "ENRMBlockRange.h"
|
|
3
4
|
#import "ENRMFormattingRange.h"
|
|
4
|
-
#import "
|
|
5
|
+
#import "ENRMInputFormatterStyle.h"
|
|
5
6
|
|
|
6
7
|
NS_ASSUME_NONNULL_BEGIN
|
|
7
8
|
|
|
8
9
|
@protocol ENRMStyleHandler;
|
|
9
|
-
|
|
10
|
-
@interface ENRMInputLinkVariantStyle : NSObject
|
|
11
|
-
|
|
12
|
-
@property (nonatomic, copy) NSString *pattern;
|
|
13
|
-
@property (nonatomic, strong) RCTUIColor *color;
|
|
14
|
-
@property (nonatomic, assign) BOOL underline;
|
|
15
|
-
@property (nonatomic, strong, nullable) RCTUIColor *backgroundColor;
|
|
16
|
-
@property (nonatomic, strong, nullable) NSRegularExpression *regex;
|
|
17
|
-
|
|
18
|
-
@end
|
|
19
|
-
|
|
20
|
-
@interface ENRMInputFormatterStyle : NSObject <NSCopying>
|
|
21
|
-
|
|
22
|
-
/// Base text properties
|
|
23
|
-
@property (nonatomic, strong) UIFont *baseFont;
|
|
24
|
-
@property (nonatomic, strong) RCTUIColor *baseTextColor;
|
|
25
|
-
|
|
26
|
-
/// Bold — color override (nil = inherit baseTextColor)
|
|
27
|
-
@property (nonatomic, strong, nullable) RCTUIColor *boldColor;
|
|
28
|
-
|
|
29
|
-
/// Italic — color override (nil = inherit baseTextColor)
|
|
30
|
-
@property (nonatomic, strong, nullable) RCTUIColor *italicColor;
|
|
31
|
-
|
|
32
|
-
/// Link
|
|
33
|
-
@property (nonatomic, strong, nullable) RCTUIColor *linkColor;
|
|
34
|
-
@property (nonatomic, assign) BOOL linkUnderline;
|
|
35
|
-
@property (nonatomic, strong, nullable) RCTUIColor *linkBackgroundColor;
|
|
36
|
-
@property (nonatomic, copy) NSArray<ENRMInputLinkVariantStyle *> *linkVariants;
|
|
37
|
-
|
|
38
|
-
/// Spoiler
|
|
39
|
-
@property (nonatomic, strong, nullable) RCTUIColor *spoilerColor;
|
|
40
|
-
@property (nonatomic, strong, nullable) RCTUIColor *spoilerBackgroundColor;
|
|
41
|
-
|
|
42
|
-
/// Math (inline `$...$`)
|
|
43
|
-
@property (nonatomic, strong, nullable) RCTUIColor *mathColor;
|
|
44
|
-
@property (nonatomic, assign) CGFloat mathFontSize;
|
|
45
|
-
@property (nonatomic, strong, nullable) RCTUIColor *mathBackgroundColor;
|
|
46
|
-
@property (nonatomic, strong, nullable) RCTUIColor *mathBorderColor;
|
|
47
|
-
@property (nonatomic, assign) CGFloat mathBorderWidth;
|
|
48
|
-
@property (nonatomic, assign) CGFloat mathBorderRadius;
|
|
49
|
-
@property (nonatomic, assign) CGFloat mathPaddingHorizontal;
|
|
50
|
-
@property (nonatomic, assign) CGFloat mathPaddingVertical;
|
|
51
|
-
@property (nonatomic, strong, nullable) RCTUIColor *mathSelectedBackgroundColor;
|
|
52
|
-
@property (nonatomic, strong, nullable) RCTUIColor *mathSelectedBorderColor;
|
|
53
|
-
/// Raw `fontWeight` string; narrowed at the draw site (see ENRMMathFontWeight.h).
|
|
54
|
-
@property (nonatomic, copy, nullable) NSString *mathFontWeight;
|
|
55
|
-
|
|
56
|
-
/// Math block (`$$...$$`)
|
|
57
|
-
@property (nonatomic, strong, nullable) RCTUIColor *mathBlockColor;
|
|
58
|
-
@property (nonatomic, assign) CGFloat mathBlockFontSize;
|
|
59
|
-
@property (nonatomic, strong, nullable) RCTUIColor *mathBlockBackgroundColor;
|
|
60
|
-
@property (nonatomic, strong, nullable) RCTUIColor *mathBlockBorderColor;
|
|
61
|
-
@property (nonatomic, assign) CGFloat mathBlockBorderWidth;
|
|
62
|
-
@property (nonatomic, assign) CGFloat mathBlockBorderRadius;
|
|
63
|
-
@property (nonatomic, assign) CGFloat mathBlockPaddingHorizontal;
|
|
64
|
-
@property (nonatomic, assign) CGFloat mathBlockPaddingVertical;
|
|
65
|
-
@property (nonatomic, strong, nullable) RCTUIColor *mathBlockSelectedBackgroundColor;
|
|
66
|
-
@property (nonatomic, strong, nullable) RCTUIColor *mathBlockSelectedBorderColor;
|
|
67
|
-
@property (nonatomic, assign) CGFloat mathBlockMarginTop;
|
|
68
|
-
@property (nonatomic, assign) CGFloat mathBlockMarginBottom;
|
|
69
|
-
@property (nonatomic, assign) NSTextAlignment mathBlockAlignment;
|
|
70
|
-
/// Raw `fontWeight` string; narrowed at the draw site (see ENRMMathFontWeight.h).
|
|
71
|
-
@property (nonatomic, copy, nullable) NSString *mathBlockFontWeight;
|
|
72
|
-
|
|
73
|
-
- (UIFont *)fontForTraits:(UIFontDescriptorSymbolicTraits)traits;
|
|
74
|
-
- (void)invalidateFontCache;
|
|
75
|
-
|
|
76
|
-
@end
|
|
10
|
+
@protocol ENRMBlockHandler;
|
|
77
11
|
|
|
78
12
|
@interface ENRMInputFormatter : NSObject
|
|
79
13
|
|
|
80
14
|
- (nullable id<ENRMStyleHandler>)handlerForStyleType:(ENRMInputStyleType)type;
|
|
15
|
+
- (nullable id<ENRMBlockHandler>)handlerForBlockType:(ENRMInputBlockType)type;
|
|
81
16
|
|
|
82
17
|
- (void)applyFormattingRanges:(NSArray<ENRMFormattingRange *> *)ranges
|
|
83
18
|
toTextView:(ENRMPlatformTextView *)textView
|
|
84
19
|
style:(ENRMInputFormatterStyle *)style;
|
|
85
20
|
|
|
21
|
+
/// Same as above, but resets and re-applies attributes only within `scope`
|
|
22
|
+
/// (ranges straddling the boundary are clipped — attributes outside the scope
|
|
23
|
+
/// are already consistent because they move with the text on edits). Pass the
|
|
24
|
+
/// full text range for a wholesale re-apply (import / style change).
|
|
25
|
+
- (void)applyFormattingRanges:(NSArray<ENRMFormattingRange *> *)ranges
|
|
26
|
+
toTextView:(ENRMPlatformTextView *)textView
|
|
27
|
+
style:(ENRMInputFormatterStyle *)style
|
|
28
|
+
scopedToRange:(NSRange)scope;
|
|
29
|
+
|
|
30
|
+
/// Applies paragraph-level attributes for each block range via its handler,
|
|
31
|
+
/// after first stripping the attributes applied on the previous pass (so
|
|
32
|
+
/// removed blocks don't leave stale paragraph styling behind). With no
|
|
33
|
+
/// handlers registered (PR1) this is a no-op.
|
|
34
|
+
- (void)applyBlockRanges:(NSArray<ENRMBlockRange *> *)blockRanges
|
|
35
|
+
toTextView:(ENRMPlatformTextView *)textView
|
|
36
|
+
style:(ENRMInputFormatterStyle *)style;
|
|
37
|
+
|
|
38
|
+
/// Same as above, scoped: strips markers only within `scope` and re-applies
|
|
39
|
+
/// only the block ranges intersecting it. `scope` must cover whole lines
|
|
40
|
+
/// (blocks are line-scoped) — pass a line-expanded edit window.
|
|
41
|
+
- (void)applyBlockRanges:(NSArray<ENRMBlockRange *> *)blockRanges
|
|
42
|
+
toTextView:(ENRMPlatformTextView *)textView
|
|
43
|
+
style:(ENRMInputFormatterStyle *)style
|
|
44
|
+
scopedToRange:(NSRange)scope;
|
|
45
|
+
|
|
86
46
|
@end
|
|
87
47
|
|
|
88
48
|
NS_ASSUME_NONNULL_END
|