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
|
@@ -33,7 +33,13 @@ static NSArray *ENRMSplitASTIntoSegments(MarkdownASTNode *root)
|
|
|
33
33
|
#endif
|
|
34
34
|
}
|
|
35
35
|
#endif
|
|
36
|
-
else {
|
|
36
|
+
else if (child.type == MarkdownNodeTypeCodeBlock) {
|
|
37
|
+
if (currentTextNodes.count > 0) {
|
|
38
|
+
[segments addObject:[ENRMTextSegment segmentWithNodes:[currentTextNodes copy]]];
|
|
39
|
+
[currentTextNodes removeAllObjects];
|
|
40
|
+
}
|
|
41
|
+
[segments addObject:[ENRMCodeBlockSegment segmentWithCodeBlockNode:child]];
|
|
42
|
+
} else {
|
|
37
43
|
[currentTextNodes addObject:child];
|
|
38
44
|
}
|
|
39
45
|
}
|
|
@@ -53,9 +59,10 @@ NSArray<ENRMRenderedSegment *> *ENRMRenderSegmentsFromAST(MarkdownASTNode *ast,
|
|
|
53
59
|
NSArray *segments = ENRMSplitASTIntoSegments(ast);
|
|
54
60
|
NSMutableArray<ENRMRenderedSegment *> *renderedSegments = [NSMutableArray array];
|
|
55
61
|
|
|
56
|
-
static const uint64_t kTextKindSalt = 0x7465787400000000ULL;
|
|
57
|
-
static const uint64_t kTableKindSalt = 0x7461626C00000000ULL;
|
|
58
|
-
static const uint64_t kMathKindSalt = 0x6D61746800000000ULL;
|
|
62
|
+
static const uint64_t kTextKindSalt = 0x7465787400000000ULL; // "text"
|
|
63
|
+
static const uint64_t kTableKindSalt = 0x7461626C00000000ULL; // "tabl"
|
|
64
|
+
static const uint64_t kMathKindSalt = 0x6D61746800000000ULL; // "math"
|
|
65
|
+
static const uint64_t kCodeBlockKindSalt = 0x63626C6B00000000ULL; // "cblk"
|
|
59
66
|
|
|
60
67
|
for (id segment in segments) {
|
|
61
68
|
if ([segment isKindOfClass:[ENRMTextSegment class]]) {
|
|
@@ -82,6 +89,12 @@ NSArray<ENRMRenderedSegment *> *ENRMRenderSegmentsFromAST(MarkdownASTNode *ast,
|
|
|
82
89
|
[renderedSegments addObject:[ENRMRenderedSegment mathSegmentWithSegment:mathSegment signature:signature]];
|
|
83
90
|
}
|
|
84
91
|
#endif
|
|
92
|
+
else if ([segment isKindOfClass:[ENRMCodeBlockSegment class]]) {
|
|
93
|
+
ENRMCodeBlockSegment *codeBlockSegment = (ENRMCodeBlockSegment *)segment;
|
|
94
|
+
uint64_t signature = ENRMSignatureForNode(codeBlockSegment.codeBlockNode) ^ kCodeBlockKindSalt;
|
|
95
|
+
[renderedSegments addObject:[ENRMRenderedSegment codeBlockSegmentWithSegment:codeBlockSegment
|
|
96
|
+
signature:signature]];
|
|
97
|
+
}
|
|
85
98
|
}
|
|
86
99
|
|
|
87
100
|
return renderedSegments;
|
|
@@ -9,11 +9,21 @@ typedef NS_ENUM(NSInteger, ENRMTableStreamingMode) {
|
|
|
9
9
|
ENRMTableStreamingModeProgressive,
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
+
typedef NS_ENUM(NSInteger, ENRMCodeBlockStreamingMode) {
|
|
13
|
+
ENRMCodeBlockStreamingModeHidden = 0,
|
|
14
|
+
ENRMCodeBlockStreamingModeProgressive,
|
|
15
|
+
};
|
|
16
|
+
|
|
12
17
|
#ifdef __cplusplus
|
|
13
18
|
extern "C" {
|
|
14
19
|
#endif
|
|
15
20
|
|
|
16
|
-
|
|
21
|
+
// Filtered markdown for the current streaming tick. When non-NULL,
|
|
22
|
+
// outEndsInsideOpenCodeFence reports whether the result ends inside a still-open
|
|
23
|
+
// fenced code block (the trailing block whose chrome the renderer defers).
|
|
24
|
+
NSString *ENRMRenderableMarkdownForStreaming(NSString *markdown, ENRMTableStreamingMode tableMode,
|
|
25
|
+
ENRMCodeBlockStreamingMode codeBlockMode,
|
|
26
|
+
BOOL *_Nullable outEndsInsideOpenCodeFence);
|
|
17
27
|
|
|
18
28
|
#ifdef __cplusplus
|
|
19
29
|
}
|
|
@@ -155,11 +155,107 @@ static NSString *ENRMRemovePendingStreamingTableBlock(NSString *markdown, NSArra
|
|
|
155
155
|
return result;
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
NSString *
|
|
158
|
+
static NSString *ENRMRemovePendingTablesAndMath(NSString *markdown, ENRMTableStreamingMode tableMode,
|
|
159
|
+
NSArray<NSString *> *lines)
|
|
159
160
|
{
|
|
160
|
-
|
|
161
|
+
if (!lines) {
|
|
162
|
+
lines = [markdown componentsSeparatedByString:@"\n"];
|
|
163
|
+
}
|
|
161
164
|
NSString *afterMath = ENRMRemovePendingStreamingMathBlock(markdown, lines);
|
|
162
165
|
NSArray<NSString *> *linesForTable =
|
|
163
166
|
(afterMath.length == markdown.length) ? lines : [afterMath componentsSeparatedByString:@"\n"];
|
|
164
167
|
return ENRMRemovePendingStreamingTableBlock(afterMath, linesForTable, tableMode);
|
|
165
168
|
}
|
|
169
|
+
|
|
170
|
+
// Parses a fence marker into char/length/info; NO if the line isn't one.
|
|
171
|
+
static BOOL ENRMParseFenceMarker(NSString *line, unichar *outChar, NSUInteger *outLength, NSString **outInfo)
|
|
172
|
+
{
|
|
173
|
+
NSUInteger i = 0;
|
|
174
|
+
while (i < line.length && [line characterAtIndex:i] == ' ' && i < 3) {
|
|
175
|
+
i++;
|
|
176
|
+
}
|
|
177
|
+
if (i >= line.length) {
|
|
178
|
+
return NO;
|
|
179
|
+
}
|
|
180
|
+
unichar ch = [line characterAtIndex:i];
|
|
181
|
+
if (ch != '`' && ch != '~') {
|
|
182
|
+
return NO;
|
|
183
|
+
}
|
|
184
|
+
NSUInteger runLength = 0;
|
|
185
|
+
while (i < line.length && [line characterAtIndex:i] == ch) {
|
|
186
|
+
i++;
|
|
187
|
+
runLength++;
|
|
188
|
+
}
|
|
189
|
+
if (runLength < 3) {
|
|
190
|
+
return NO;
|
|
191
|
+
}
|
|
192
|
+
NSString *info = [line substringFromIndex:i];
|
|
193
|
+
if (ch == '`' && [info rangeOfString:@"`"].location != NSNotFound) {
|
|
194
|
+
return NO;
|
|
195
|
+
}
|
|
196
|
+
if (outChar) {
|
|
197
|
+
*outChar = ch;
|
|
198
|
+
}
|
|
199
|
+
if (outLength) {
|
|
200
|
+
*outLength = runLength;
|
|
201
|
+
}
|
|
202
|
+
if (outInfo) {
|
|
203
|
+
*outInfo = info;
|
|
204
|
+
}
|
|
205
|
+
return YES;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
static NSInteger ENRMFindOpenCodeFenceLineIndex(NSArray<NSString *> *lines)
|
|
209
|
+
{
|
|
210
|
+
NSInteger openIndex = -1;
|
|
211
|
+
unichar openChar = 0;
|
|
212
|
+
NSUInteger openLength = 0;
|
|
213
|
+
for (NSUInteger i = 0; i < lines.count; i++) {
|
|
214
|
+
unichar ch = 0;
|
|
215
|
+
NSUInteger length = 0;
|
|
216
|
+
NSString *info = nil;
|
|
217
|
+
BOOL isMarker = ENRMParseFenceMarker(lines[i], &ch, &length, &info);
|
|
218
|
+
if (openIndex == -1) {
|
|
219
|
+
if (isMarker) {
|
|
220
|
+
openIndex = (NSInteger)i;
|
|
221
|
+
openChar = ch;
|
|
222
|
+
openLength = length;
|
|
223
|
+
}
|
|
224
|
+
} else if (isMarker && ch == openChar && length >= openLength &&
|
|
225
|
+
[info stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]].length == 0) {
|
|
226
|
+
openIndex = -1;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return openIndex;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
NSString *ENRMRenderableMarkdownForStreaming(NSString *markdown, ENRMTableStreamingMode tableMode,
|
|
233
|
+
ENRMCodeBlockStreamingMode codeBlockMode, BOOL *outEndsInsideOpenCodeFence)
|
|
234
|
+
{
|
|
235
|
+
NSArray<NSString *> *lines = [markdown componentsSeparatedByString:@"\n"];
|
|
236
|
+
NSInteger openFenceIndex = ENRMFindOpenCodeFenceLineIndex(lines);
|
|
237
|
+
|
|
238
|
+
if (openFenceIndex == -1) {
|
|
239
|
+
if (outEndsInsideOpenCodeFence) {
|
|
240
|
+
*outEndsInsideOpenCodeFence = NO;
|
|
241
|
+
}
|
|
242
|
+
return ENRMRemovePendingTablesAndMath(markdown, tableMode, lines);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
NSUInteger *offsets = ENRMBuildLineOffsets(lines, lines.count);
|
|
246
|
+
NSUInteger fenceOffset = offsets[(NSUInteger)openFenceIndex];
|
|
247
|
+
free(offsets);
|
|
248
|
+
|
|
249
|
+
NSString *head = [markdown substringToIndex:fenceOffset];
|
|
250
|
+
if (codeBlockMode == ENRMCodeBlockStreamingModeHidden) {
|
|
251
|
+
if (outEndsInsideOpenCodeFence) {
|
|
252
|
+
*outEndsInsideOpenCodeFence = NO;
|
|
253
|
+
}
|
|
254
|
+
return ENRMRemovePendingTablesAndMath(head, tableMode, nil);
|
|
255
|
+
}
|
|
256
|
+
if (outEndsInsideOpenCodeFence) {
|
|
257
|
+
*outEndsInsideOpenCodeFence = YES;
|
|
258
|
+
}
|
|
259
|
+
NSString *tail = [markdown substringFromIndex:fenceOffset];
|
|
260
|
+
return [ENRMRemovePendingTablesAndMath(head, tableMode, nil) stringByAppendingString:tail];
|
|
261
|
+
}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* mapping once and instantiate it for each type.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
+
#import "CodeBlockHighlighter.hpp"
|
|
13
14
|
#import "ParagraphStyleUtils.h"
|
|
14
15
|
#import "StyleConfig.h"
|
|
15
16
|
#import <React/RCTConversions.h>
|
|
@@ -480,6 +481,16 @@ BOOL applyMarkdownStyleToConfig(StyleConfig *config, const MarkdownStyle &newSty
|
|
|
480
481
|
changed = YES;
|
|
481
482
|
}
|
|
482
483
|
|
|
484
|
+
if (newStyle.blockquote.borderRadius != oldStyle.blockquote.borderRadius) {
|
|
485
|
+
[config setBlockquoteBorderRadius:newStyle.blockquote.borderRadius];
|
|
486
|
+
changed = YES;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
if (newStyle.blockquote.padding != oldStyle.blockquote.padding) {
|
|
490
|
+
[config setBlockquotePadding:newStyle.blockquote.padding];
|
|
491
|
+
changed = YES;
|
|
492
|
+
}
|
|
493
|
+
|
|
483
494
|
// ── Link ───────────────────────────────────────────────────────────────────
|
|
484
495
|
|
|
485
496
|
if (newStyle.link.fontFamily != oldStyle.link.fontFamily) {
|
|
@@ -689,6 +700,21 @@ BOOL applyMarkdownStyleToConfig(StyleConfig *config, const MarkdownStyle &newSty
|
|
|
689
700
|
changed = YES;
|
|
690
701
|
}
|
|
691
702
|
|
|
703
|
+
if (newStyle.image.maxHeight != oldStyle.image.maxHeight) {
|
|
704
|
+
[config setImageMaxHeight:newStyle.image.maxHeight];
|
|
705
|
+
changed = YES;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
if (newStyle.image.aspectRatio != oldStyle.image.aspectRatio) {
|
|
709
|
+
[config setImageAspectRatio:newStyle.image.aspectRatio];
|
|
710
|
+
changed = YES;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
if (newStyle.image.resizeMode != oldStyle.image.resizeMode) {
|
|
714
|
+
[config setImageResizeMode:@(newStyle.image.resizeMode.c_str())];
|
|
715
|
+
changed = YES;
|
|
716
|
+
}
|
|
717
|
+
|
|
692
718
|
if (newStyle.image.borderRadius != oldStyle.image.borderRadius) {
|
|
693
719
|
[config setImageBorderRadius:newStyle.image.borderRadius];
|
|
694
720
|
changed = YES;
|
|
@@ -789,6 +815,11 @@ BOOL applyMarkdownStyleToConfig(StyleConfig *config, const MarkdownStyle &newSty
|
|
|
789
815
|
changed = YES;
|
|
790
816
|
}
|
|
791
817
|
|
|
818
|
+
if (newStyle.list.itemSpacing != oldStyle.list.itemSpacing) {
|
|
819
|
+
[config setListStyleItemSpacing:newStyle.list.itemSpacing];
|
|
820
|
+
changed = YES;
|
|
821
|
+
}
|
|
822
|
+
|
|
792
823
|
// ── Code Block ─────────────────────────────────────────────────────────────
|
|
793
824
|
|
|
794
825
|
if (newStyle.codeBlock.fontSize != oldStyle.codeBlock.fontSize) {
|
|
@@ -856,6 +887,28 @@ BOOL applyMarkdownStyleToConfig(StyleConfig *config, const MarkdownStyle &newSty
|
|
|
856
887
|
changed = YES;
|
|
857
888
|
}
|
|
858
889
|
|
|
890
|
+
#define ENRM_SET_SYNTAX_COLOR(field, token) \
|
|
891
|
+
if (newStyle.codeBlock.syntaxColors.field != oldStyle.codeBlock.syntaxColors.field) { \
|
|
892
|
+
[config setCodeBlockSyntaxColor:RCTUIColorFromSharedColor(newStyle.codeBlock.syntaxColors.field) \
|
|
893
|
+
forToken:(NSInteger)Markdown::HighlightTokenType::token]; \
|
|
894
|
+
changed = YES; \
|
|
895
|
+
}
|
|
896
|
+
ENRM_SET_SYNTAX_COLOR(keyword, Keyword)
|
|
897
|
+
ENRM_SET_SYNTAX_COLOR(operatorColor, Operator)
|
|
898
|
+
ENRM_SET_SYNTAX_COLOR(punctuation, Punctuation)
|
|
899
|
+
ENRM_SET_SYNTAX_COLOR(string, String)
|
|
900
|
+
ENRM_SET_SYNTAX_COLOR(number, Number)
|
|
901
|
+
ENRM_SET_SYNTAX_COLOR(constant, Constant)
|
|
902
|
+
ENRM_SET_SYNTAX_COLOR(comment, Comment)
|
|
903
|
+
ENRM_SET_SYNTAX_COLOR(function, Function)
|
|
904
|
+
ENRM_SET_SYNTAX_COLOR(type, Type)
|
|
905
|
+
ENRM_SET_SYNTAX_COLOR(variable, Variable)
|
|
906
|
+
ENRM_SET_SYNTAX_COLOR(property, Property)
|
|
907
|
+
ENRM_SET_SYNTAX_COLOR(tag, Tag)
|
|
908
|
+
ENRM_SET_SYNTAX_COLOR(attribute, Attribute)
|
|
909
|
+
ENRM_SET_SYNTAX_COLOR(embedded, Embedded)
|
|
910
|
+
#undef ENRM_SET_SYNTAX_COLOR
|
|
911
|
+
|
|
859
912
|
// ── Thematic Break ─────────────────────────────────────────────────────────
|
|
860
913
|
|
|
861
914
|
if (newStyle.thematicBreak.color != oldStyle.thematicBreak.color) {
|
|
@@ -991,6 +1044,16 @@ BOOL applyMarkdownStyleToConfig(StyleConfig *config, const MarkdownStyle &newSty
|
|
|
991
1044
|
changed = YES;
|
|
992
1045
|
}
|
|
993
1046
|
|
|
1047
|
+
if (newStyle.table.horizontalOverflow != oldStyle.table.horizontalOverflow) {
|
|
1048
|
+
[config setTableHorizontalOverflow:newStyle.table.horizontalOverflow];
|
|
1049
|
+
changed = YES;
|
|
1050
|
+
}
|
|
1051
|
+
|
|
1052
|
+
if (newStyle.table.align != oldStyle.table.align) {
|
|
1053
|
+
[config setTableAlign:@(newStyle.table.align.c_str())];
|
|
1054
|
+
changed = YES;
|
|
1055
|
+
}
|
|
1056
|
+
|
|
994
1057
|
// ── Task List ───────────────────────────────────────────────────────────────
|
|
995
1058
|
|
|
996
1059
|
if (newStyle.taskList.checkedColor != oldStyle.taskList.checkedColor) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#import "TaskListTapUtils.h"
|
|
2
2
|
#import "ENRMUIKit.h"
|
|
3
|
+
#import "LastElementUtils.h"
|
|
3
4
|
#import "ListItemRenderer.h"
|
|
4
5
|
#import "ParagraphStyleUtils.h"
|
|
5
6
|
#import "StyleConfig.h"
|
|
@@ -171,6 +172,13 @@ BOOL updateTaskListItemCheckedState(ENRMPlatformTextView *textView, NSInteger ta
|
|
|
171
172
|
if (depth && [depth integerValue] > nestingLevel)
|
|
172
173
|
return;
|
|
173
174
|
|
|
175
|
+
// Skip code block ranges — preserve CodeBlockRenderer styles.
|
|
176
|
+
NSNumber *isCodeBlock = [mutableText attribute:CodeBlockAttributeName
|
|
177
|
+
atIndex:segmentRange.location
|
|
178
|
+
effectiveRange:nil];
|
|
179
|
+
if ([isCodeBlock boolValue])
|
|
180
|
+
return;
|
|
181
|
+
|
|
174
182
|
[mutableText addAttribute:TaskCheckedAttribute value:@(newChecked) range:segmentRange];
|
|
175
183
|
|
|
176
184
|
if (newChecked) {
|
|
@@ -195,6 +203,22 @@ BOOL updateTaskListItemCheckedState(ENRMPlatformTextView *textView, NSInteger ta
|
|
|
195
203
|
}
|
|
196
204
|
}];
|
|
197
205
|
|
|
206
|
+
// The checkbox glyph is drawn from the marker descriptor, not from
|
|
207
|
+
// TaskCheckedAttribute — keep it in sync. Enumerated over the full text:
|
|
208
|
+
// for code-block-first items the anchor sits outside the metadata ranges.
|
|
209
|
+
[mutableText enumerateAttribute:ListItemMarkerStartAttribute
|
|
210
|
+
inRange:NSMakeRange(0, mutableText.length)
|
|
211
|
+
options:0
|
|
212
|
+
usingBlock:^(NSArray *markers, NSRange range, BOOL *stop) {
|
|
213
|
+
if (![markers isKindOfClass:[NSArray class]])
|
|
214
|
+
return;
|
|
215
|
+
for (ENRMListMarkerDescriptor *marker in markers) {
|
|
216
|
+
if (marker.isTask && marker.taskIndex == targetIndex) {
|
|
217
|
+
marker.isChecked = newChecked;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}];
|
|
221
|
+
|
|
198
222
|
ENRMSetAttributedText(textView, mutableText);
|
|
199
223
|
NSLayoutManager *layoutManager = textView.layoutManager;
|
|
200
224
|
if (layoutManager) {
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
#import "ENRMBlockMenu.h"
|
|
3
|
+
#import "ENRMUIKit.h"
|
|
4
|
+
#import "StyleConfig.h"
|
|
5
|
+
|
|
6
|
+
@class MarkdownASTNode;
|
|
7
|
+
|
|
8
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
9
|
+
|
|
10
|
+
typedef void (^ENRMCodeBlockCopyBlock)(NSString *code, NSString *language);
|
|
11
|
+
|
|
12
|
+
@interface ENRMCodeBlockContainerView : RCTUIView
|
|
13
|
+
|
|
14
|
+
- (instancetype)initWithConfig:(StyleConfig *)config;
|
|
15
|
+
|
|
16
|
+
- (void)applyCodeBlockNode:(MarkdownASTNode *)node;
|
|
17
|
+
|
|
18
|
+
- (CGFloat)measureHeight:(CGFloat)maxWidth;
|
|
19
|
+
|
|
20
|
+
// View-free height for the shadow-node measurement pass: the same height an
|
|
21
|
+
// instance's measureHeight: reports for the node, without building a view.
|
|
22
|
+
+ (CGFloat)measureHeightForCodeBlockNode:(MarkdownASTNode *)node config:(StyleConfig *)config;
|
|
23
|
+
|
|
24
|
+
@property (nonatomic, strong) StyleConfig *config;
|
|
25
|
+
|
|
26
|
+
// True until the closing fence arrives: highlighting is deferred and copying is
|
|
27
|
+
// disabled, while the header stays visible.
|
|
28
|
+
@property (nonatomic, assign) BOOL pending;
|
|
29
|
+
|
|
30
|
+
// Renamed getters avoid the Cocoa `copy` method family (which signals +1
|
|
31
|
+
// retained returns). Property names are unchanged so call sites stay the same.
|
|
32
|
+
@property (nonatomic, copy, nullable, getter=menuCopyLabel) NSString *copyLabel;
|
|
33
|
+
@property (nonatomic, copy, nullable, getter=menuCopyAsMarkdownLabel) NSString *copyAsMarkdownLabel;
|
|
34
|
+
|
|
35
|
+
/// Suppresses the long-press copy menu on this block. Mirrors the
|
|
36
|
+
/// `contextMenuHidden` prop; the header copy button is a visible control, not a
|
|
37
|
+
/// context menu, and stays (hide it with `menuOptions.copyButtonHidden`).
|
|
38
|
+
@property (nonatomic, assign) BOOL contextMenuHidden;
|
|
39
|
+
|
|
40
|
+
/// Copy / Copy as Markdown visibility, Copy format and the header copy button
|
|
41
|
+
/// from `selectionMenuConfig`. `copyHidden` also drops the VoiceOver copy action;
|
|
42
|
+
/// the header button and VoiceOver action always copy the raw code.
|
|
43
|
+
@property (nonatomic, assign) ENRMBlockMenuOptions menuOptions;
|
|
44
|
+
|
|
45
|
+
// Fired when the code is copied (header button, context-menu Copy, or the
|
|
46
|
+
// VoiceOver copy action); set by the host to bridge up to the JS onCopyPress
|
|
47
|
+
// event. Not fired for "Copy as Markdown", nor for the context-menu Copy when
|
|
48
|
+
// `menuOptions.copyWritesMarkdown` is set.
|
|
49
|
+
@property (nonatomic, copy, nullable) ENRMCodeBlockCopyBlock onCopyPress;
|
|
50
|
+
|
|
51
|
+
@end
|
|
52
|
+
|
|
53
|
+
NS_ASSUME_NONNULL_END
|