react-native-enriched-markdown-scaffold 0.6.0-scaffold.8 → 0.7.4-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/ReactNativeEnrichedMarkdown.podspec +62 -11
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerDelegate.java +3 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerInterface.java +1 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextInputManagerDelegate.java +9 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextInputManagerInterface.java +3 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerDelegate.java +3 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerInterface.java +1 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.cpp +20 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.h +744 -0
- package/android/src/main/baseline-prof.txt +75 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdown.kt +62 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownInternalText.kt +10 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownManager.kt +10 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownText.kt +9 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextManager.kt +10 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/accessibility/AccessibilityLabels.kt +15 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/accessibility/MarkdownAccessibilityHelper.kt +44 -7
- package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputManager.kt +52 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputView.kt +89 -11
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/FormattingStore.kt +19 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputParser.kt +22 -3
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputRemend.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputMeasurementStore.kt +7 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/input/toolbar/InputContextMenu.kt +54 -13
- package/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SpanStyleCache.kt +4 -4
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownViewManagerUtils.kt +30 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/LinkEvents.kt +22 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/SelectionActionMode.kt +36 -7
- package/android/src/main/java/com/swmansion/enriched/markdown/views/TableContainerView.kt +73 -3
- package/android/src/main/jni/CMakeLists.txt +15 -1
- package/android/src/math/java/com/swmansion/enriched/markdown/views/MathContainerView.kt +24 -2
- package/app.plugin.js +2 -1
- package/cpp/parser/MD4CParser.cpp +1 -1
- package/cpp/wasm/build.sh +9 -9
- package/docs/ACCESSIBILITY.md +172 -0
- package/docs/API_REFERENCE.md +948 -0
- package/docs/COPY_OPTIONS.md +127 -0
- package/docs/ELEMENTS_STRUCTURE.md +112 -0
- package/docs/IMAGE_CACHING.md +25 -0
- package/docs/INPUT.md +233 -0
- package/docs/LATEX_MATH.md +136 -0
- package/docs/MACOS.md +19 -0
- package/docs/MARKDOWN_STREAMING.md +36 -0
- package/docs/MENTIONS.md +97 -0
- package/docs/RTL.md +82 -0
- package/docs/STYLES.md +519 -0
- package/docs/TEXT.md +110 -0
- package/docs/WEB.md +49 -0
- package/ios/EnrichedMarkdown.mm +82 -25
- package/ios/EnrichedMarkdownText.mm +37 -5
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.cpp +20 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.h +744 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/RCTComponentViewHelpers.h +15 -0
- package/ios/input/ENRMFormattingStore.h +5 -0
- package/ios/input/ENRMFormattingStore.mm +34 -0
- package/ios/input/ENRMInputTextView.h +2 -0
- package/ios/input/ENRMInputTextView.mm +8 -17
- package/ios/input/ENRMMarkdownSerializer.mm +1 -1
- package/ios/input/EnrichedMarkdownTextInput+ContextMenu.mm +71 -53
- package/ios/input/EnrichedMarkdownTextInput+Internal.h +26 -0
- package/ios/input/EnrichedMarkdownTextInput.h +1 -0
- package/ios/input/EnrichedMarkdownTextInput.mm +230 -29
- package/ios/input/styles/ENRMBoldStyleHandler.mm +3 -2
- package/ios/input/styles/ENRMItalicStyleHandler.mm +3 -2
- package/ios/renderer/AttributedRenderer.m +51 -6
- package/ios/renderer/ENRMMathInlineRenderer.m +5 -1
- package/ios/styles/ENRMFontSlot.h +1 -1
- package/ios/utils/ENRMAccessibilityLabels.h +36 -0
- package/ios/utils/ENRMAccessibilityLabels.m +5 -0
- package/ios/utils/EditMenuUtils+macOS.m +4 -5
- package/ios/utils/EditMenuUtils.h +70 -0
- package/ios/utils/EditMenuUtils.m +14 -11
- package/ios/utils/LastElementUtils.h +39 -2
- package/ios/utils/MarkdownAccessibilityElementBuilder.h +18 -16
- package/ios/utils/MarkdownAccessibilityElementBuilder.m +64 -32
- package/ios/utils/ParagraphStyleUtils.m +21 -2
- package/ios/views/ENRMMathContainerView.h +8 -0
- package/ios/views/ENRMMathContainerView.m +7 -5
- package/ios/views/ENRMTableIOSGridView.h +40 -0
- package/ios/views/ENRMTableIOSGridView.m +216 -0
- package/ios/views/EnrichedMarkdownInternalText.h +2 -0
- package/ios/views/EnrichedMarkdownInternalText.m +2 -0
- package/ios/views/TableContainerView.h +8 -0
- package/ios/views/TableContainerView.m +72 -128
- package/lib/module/EnrichedMarkdownNativeComponent.ts +37 -0
- package/lib/module/EnrichedMarkdownTextInput.js +48 -1
- package/lib/module/EnrichedMarkdownTextInput.js.map +1 -1
- package/lib/module/EnrichedMarkdownTextInputNativeComponent.ts +35 -0
- package/lib/module/EnrichedMarkdownTextNativeComponent.ts +37 -0
- package/lib/module/accessibilityLabelDefaults.js +64 -0
- package/lib/module/accessibilityLabelDefaults.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/native/EnrichedMarkdownText.js +72 -4
- package/lib/module/native/EnrichedMarkdownText.js.map +1 -1
- package/lib/module/normalizeMenuItem.js +38 -0
- package/lib/module/normalizeMenuItem.js.map +1 -0
- package/lib/module/types/AccessibilityLabels.js +2 -0
- package/lib/module/types/AccessibilityLabels.js.map +1 -0
- package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts +34 -0
- package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts +55 -1
- package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts +30 -0
- package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts +34 -0
- package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/accessibilityLabelDefaults.d.ts +16 -0
- package/lib/typescript/src/accessibilityLabelDefaults.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +4 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- 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/normalizeMenuItem.d.ts +7 -0
- package/lib/typescript/src/normalizeMenuItem.d.ts.map +1 -0
- package/lib/typescript/src/types/AccessibilityLabels.d.ts +114 -0
- package/lib/typescript/src/types/AccessibilityLabels.d.ts.map +1 -0
- package/lib/typescript/src/types/MarkdownTextProps.d.ts +78 -9
- package/lib/typescript/src/types/MarkdownTextProps.d.ts.map +1 -1
- package/package.json +4 -2
- package/plugin/build/withAndroidMath.js +19 -0
- package/plugin/build/withIosMath.js +28 -0
- package/plugin/build/withReactNativeEnrichedMarkdown.js +11 -0
- package/plugin/tsconfig.build.json +16 -0
- package/src/EnrichedMarkdownNativeComponent.ts +37 -0
- package/src/EnrichedMarkdownTextInput.tsx +117 -1
- package/src/EnrichedMarkdownTextInputNativeComponent.ts +35 -0
- package/src/EnrichedMarkdownTextNativeComponent.ts +37 -0
- package/src/accessibilityLabelDefaults.ts +83 -0
- package/src/index.tsx +11 -0
- package/src/native/EnrichedMarkdownText.tsx +120 -6
- package/src/normalizeMenuItem.ts +52 -0
- package/src/types/AccessibilityLabels.ts +118 -0
- package/src/types/MarkdownTextProps.ts +74 -9
- package/lib/module/plugin/withAndroidMath.js +0 -20
- package/lib/module/plugin/withAndroidMath.js.map +0 -1
- package/lib/module/plugin/withIosMath.js +0 -23
- package/lib/module/plugin/withIosMath.js.map +0 -1
- package/lib/module/plugin/withReactNativeEnrichedMarkdown.js +0 -16
- package/lib/module/plugin/withReactNativeEnrichedMarkdown.js.map +0 -1
- package/lib/typescript/src/plugin/withAndroidMath.d.ts +0 -5
- package/lib/typescript/src/plugin/withAndroidMath.d.ts.map +0 -1
- package/lib/typescript/src/plugin/withIosMath.d.ts +0 -5
- package/lib/typescript/src/plugin/withIosMath.d.ts.map +0 -1
- package/lib/typescript/src/plugin/withReactNativeEnrichedMarkdown.d.ts +0 -6
- package/lib/typescript/src/plugin/withReactNativeEnrichedMarkdown.d.ts.map +0 -1
- /package/{src/plugin → plugin/src}/withAndroidMath.ts +0 -0
- /package/{src/plugin → plugin/src}/withIosMath.ts +0 -0
- /package/{src/plugin → plugin/src}/withReactNativeEnrichedMarkdown.ts +0 -0
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# Core View and Rendering
|
|
6
6
|
Lcom/swmansion/enriched/markdown/EnrichedMarkdown;
|
|
7
|
+
Lcom/swmansion/enriched/markdown/EnrichedMarkdown$DirtyFlag;
|
|
7
8
|
Lcom/swmansion/enriched/markdown/EnrichedMarkdownInternalText;
|
|
8
9
|
Lcom/swmansion/enriched/markdown/EnrichedMarkdownManager;
|
|
9
10
|
Lcom/swmansion/enriched/markdown/EnrichedMarkdownText;
|
|
@@ -11,10 +12,18 @@ Lcom/swmansion/enriched/markdown/EnrichedMarkdownTextLayoutManager;
|
|
|
11
12
|
Lcom/swmansion/enriched/markdown/EnrichedMarkdownTextManager;
|
|
12
13
|
Lcom/swmansion/enriched/markdown/EnrichedMarkdownTextPackage;
|
|
13
14
|
Lcom/swmansion/enriched/markdown/MeasurementStore;
|
|
15
|
+
Lcom/swmansion/enriched/markdown/MeasurementStore$FontScalingSettings;
|
|
16
|
+
Lcom/swmansion/enriched/markdown/MeasurementStore$MeasurementParams;
|
|
17
|
+
Lcom/swmansion/enriched/markdown/MeasurementStore$PaintParams;
|
|
14
18
|
|
|
15
19
|
# Accessibility
|
|
20
|
+
Lcom/swmansion/enriched/markdown/accessibility/AccessibilityLabels;
|
|
16
21
|
Lcom/swmansion/enriched/markdown/accessibility/AccessibleMarkdownTextView;
|
|
17
22
|
Lcom/swmansion/enriched/markdown/accessibility/MarkdownAccessibilityHelper;
|
|
23
|
+
Lcom/swmansion/enriched/markdown/accessibility/MarkdownAccessibilityHelper$AccessibilityItem;
|
|
24
|
+
Lcom/swmansion/enriched/markdown/accessibility/MarkdownAccessibilityHelper$ListItemInfo;
|
|
25
|
+
Lcom/swmansion/enriched/markdown/accessibility/MarkdownAccessibilityHelper$SpanRange;
|
|
26
|
+
Lcom/swmansion/enriched/markdown/accessibility/MarkdownAccessibilityHelperKt;
|
|
18
27
|
|
|
19
28
|
# Events
|
|
20
29
|
Lcom/swmansion/enriched/markdown/events/ContextMenuItemPressEvent;
|
|
@@ -25,12 +34,15 @@ Lcom/swmansion/enriched/markdown/events/TaskListItemPressEvent;
|
|
|
25
34
|
# Input - Core
|
|
26
35
|
Lcom/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputManager;
|
|
27
36
|
Lcom/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputView;
|
|
37
|
+
Lcom/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputView$MentionCandidate;
|
|
38
|
+
Lcom/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputViewKt;
|
|
28
39
|
|
|
29
40
|
# Input - Autolink
|
|
30
41
|
Lcom/swmansion/enriched/markdown/input/autolink/AutoDetectedLinkColorSpan;
|
|
31
42
|
Lcom/swmansion/enriched/markdown/input/autolink/AutoDetectedLinkMarkerSpan;
|
|
32
43
|
Lcom/swmansion/enriched/markdown/input/autolink/AutoDetectedLinkUnderlineSpan;
|
|
33
44
|
Lcom/swmansion/enriched/markdown/input/autolink/AutoLinkDetector;
|
|
45
|
+
Lcom/swmansion/enriched/markdown/input/autolink/AutoLinkDetectorKt;
|
|
34
46
|
Lcom/swmansion/enriched/markdown/input/autolink/LinkRegexConfig;
|
|
35
47
|
|
|
36
48
|
# Input - Detection
|
|
@@ -62,28 +74,48 @@ Lcom/swmansion/enriched/markdown/input/events/OnStartMentionEvent;
|
|
|
62
74
|
|
|
63
75
|
# Input - Formatting
|
|
64
76
|
Lcom/swmansion/enriched/markdown/input/formatting/FormattingStore;
|
|
77
|
+
Lcom/swmansion/enriched/markdown/input/formatting/FormattingStore$EditOverlap;
|
|
65
78
|
Lcom/swmansion/enriched/markdown/input/formatting/InputFormatter;
|
|
66
79
|
Lcom/swmansion/enriched/markdown/input/formatting/InputParser;
|
|
67
80
|
Lcom/swmansion/enriched/markdown/input/formatting/InputRemend;
|
|
81
|
+
Lcom/swmansion/enriched/markdown/input/formatting/InputRemend$DelimiterPair;
|
|
68
82
|
Lcom/swmansion/enriched/markdown/input/formatting/MarkdownSerializer;
|
|
83
|
+
Lcom/swmansion/enriched/markdown/input/formatting/MarkdownSerializer$BoundaryEvent;
|
|
69
84
|
Lcom/swmansion/enriched/markdown/input/formatting/MarkdownSpan;
|
|
85
|
+
Lcom/swmansion/enriched/markdown/input/formatting/MarkdownSpan$SpanDescriptor;
|
|
70
86
|
Lcom/swmansion/enriched/markdown/input/formatting/ParseResult;
|
|
87
|
+
Lcom/swmansion/enriched/markdown/input/formatting/ParseResult$ActiveStyle;
|
|
71
88
|
|
|
72
89
|
# Input - Layout
|
|
73
90
|
Lcom/swmansion/enriched/markdown/input/layout/InputEventEmitter;
|
|
74
91
|
Lcom/swmansion/enriched/markdown/input/layout/InputLayoutManager;
|
|
75
92
|
Lcom/swmansion/enriched/markdown/input/layout/InputMeasurementStore;
|
|
93
|
+
Lcom/swmansion/enriched/markdown/input/layout/InputMeasurementStore$MeasurementParams;
|
|
94
|
+
Lcom/swmansion/enriched/markdown/input/layout/InputMeasurementStore$PaintParams;
|
|
76
95
|
|
|
77
96
|
# Input - Model
|
|
78
97
|
Lcom/swmansion/enriched/markdown/input/model/CaretRect;
|
|
79
98
|
Lcom/swmansion/enriched/markdown/input/model/FormattingRange;
|
|
80
99
|
Lcom/swmansion/enriched/markdown/input/model/InputFormatterStyle;
|
|
100
|
+
Lcom/swmansion/enriched/markdown/input/model/InputLinkVariantStyle;
|
|
81
101
|
Lcom/swmansion/enriched/markdown/input/model/StyleType;
|
|
82
102
|
|
|
83
103
|
# Input - Styles
|
|
84
104
|
Lcom/swmansion/enriched/markdown/input/styles/BoldStyleHandler;
|
|
85
105
|
Lcom/swmansion/enriched/markdown/input/styles/ItalicStyleHandler;
|
|
86
106
|
Lcom/swmansion/enriched/markdown/input/styles/LinkStyleHandler;
|
|
107
|
+
Lcom/swmansion/enriched/markdown/input/styles/MarkdownBoldColorSpan;
|
|
108
|
+
Lcom/swmansion/enriched/markdown/input/styles/MarkdownBoldSpan;
|
|
109
|
+
Lcom/swmansion/enriched/markdown/input/styles/MarkdownItalicColorSpan;
|
|
110
|
+
Lcom/swmansion/enriched/markdown/input/styles/MarkdownItalicSpan;
|
|
111
|
+
Lcom/swmansion/enriched/markdown/input/styles/MarkdownLinkBackgroundColorSpan;
|
|
112
|
+
Lcom/swmansion/enriched/markdown/input/styles/MarkdownLinkColorSpan;
|
|
113
|
+
Lcom/swmansion/enriched/markdown/input/styles/MarkdownLinkColorSpan$ResolvedLinkStyle;
|
|
114
|
+
Lcom/swmansion/enriched/markdown/input/styles/MarkdownLinkUnderlineSpan;
|
|
115
|
+
Lcom/swmansion/enriched/markdown/input/styles/MarkdownSpoilerBackgroundSpan;
|
|
116
|
+
Lcom/swmansion/enriched/markdown/input/styles/MarkdownSpoilerColorSpan;
|
|
117
|
+
Lcom/swmansion/enriched/markdown/input/styles/MarkdownStrikethroughSpan;
|
|
118
|
+
Lcom/swmansion/enriched/markdown/input/styles/MarkdownUnderlineSpan;
|
|
87
119
|
Lcom/swmansion/enriched/markdown/input/styles/SpoilerStyleHandler;
|
|
88
120
|
Lcom/swmansion/enriched/markdown/input/styles/StrikethroughStyleHandler;
|
|
89
121
|
Lcom/swmansion/enriched/markdown/input/styles/StyleHandler;
|
|
@@ -91,33 +123,42 @@ Lcom/swmansion/enriched/markdown/input/styles/StyleMergingConfig;
|
|
|
91
123
|
Lcom/swmansion/enriched/markdown/input/styles/UnderlineStyleHandler;
|
|
92
124
|
|
|
93
125
|
# Input - Toolbar
|
|
126
|
+
Lcom/swmansion/enriched/markdown/input/toolbar/FormatMenuConfig;
|
|
94
127
|
Lcom/swmansion/enriched/markdown/input/toolbar/InputContextMenu;
|
|
128
|
+
Lcom/swmansion/enriched/markdown/input/toolbar/InputSelectionMenuConfig;
|
|
95
129
|
|
|
96
130
|
# Parser
|
|
97
131
|
Lcom/swmansion/enriched/markdown/parser/Md4cFlags;
|
|
98
132
|
Lcom/swmansion/enriched/markdown/parser/MarkdownASTNode;
|
|
99
133
|
Lcom/swmansion/enriched/markdown/parser/MarkdownASTNode$NodeType;
|
|
134
|
+
Lcom/swmansion/enriched/markdown/parser/MarkdownASTNodeKt;
|
|
100
135
|
Lcom/swmansion/enriched/markdown/parser/Parser;
|
|
101
136
|
|
|
102
137
|
# Renderer Classes
|
|
103
138
|
Lcom/swmansion/enriched/markdown/renderer/BaselineShiftRenderer;
|
|
104
139
|
Lcom/swmansion/enriched/markdown/renderer/BlockStyle;
|
|
105
140
|
Lcom/swmansion/enriched/markdown/renderer/BlockStyleContext;
|
|
141
|
+
Lcom/swmansion/enriched/markdown/renderer/BlockStyleEntry;
|
|
106
142
|
Lcom/swmansion/enriched/markdown/renderer/BlockType;
|
|
143
|
+
Lcom/swmansion/enriched/markdown/renderer/BlockType$ListType;
|
|
107
144
|
Lcom/swmansion/enriched/markdown/renderer/BlockquoteRenderer;
|
|
108
145
|
Lcom/swmansion/enriched/markdown/renderer/CodeBlockRenderer;
|
|
146
|
+
Lcom/swmansion/enriched/markdown/renderer/CodeBlockRenderer$CodeBlockBoundaryPaddingSpan;
|
|
109
147
|
Lcom/swmansion/enriched/markdown/renderer/CodeRenderer;
|
|
110
148
|
Lcom/swmansion/enriched/markdown/renderer/DocumentRenderer;
|
|
111
149
|
Lcom/swmansion/enriched/markdown/renderer/EmphasisRenderer;
|
|
112
150
|
Lcom/swmansion/enriched/markdown/renderer/HeadingRenderer;
|
|
151
|
+
Lcom/swmansion/enriched/markdown/renderer/HighlightRenderer;
|
|
113
152
|
Lcom/swmansion/enriched/markdown/renderer/ImageRenderer;
|
|
114
153
|
Lcom/swmansion/enriched/markdown/renderer/LineBreakRenderer;
|
|
115
154
|
Lcom/swmansion/enriched/markdown/renderer/LinkRenderer;
|
|
116
155
|
Lcom/swmansion/enriched/markdown/renderer/ListContextManager;
|
|
156
|
+
Lcom/swmansion/enriched/markdown/renderer/ListContextManager$ListEntryState;
|
|
117
157
|
Lcom/swmansion/enriched/markdown/renderer/ListItemRenderer;
|
|
118
158
|
Lcom/swmansion/enriched/markdown/renderer/ListRenderer;
|
|
119
159
|
Lcom/swmansion/enriched/markdown/renderer/MathInlineRenderer;
|
|
120
160
|
Lcom/swmansion/enriched/markdown/renderer/NodeRenderer;
|
|
161
|
+
Lcom/swmansion/enriched/markdown/renderer/NodeRenderer$DeferredSpan;
|
|
121
162
|
Lcom/swmansion/enriched/markdown/renderer/ParagraphRenderer;
|
|
122
163
|
Lcom/swmansion/enriched/markdown/renderer/Renderer;
|
|
123
164
|
Lcom/swmansion/enriched/markdown/renderer/RendererConfig;
|
|
@@ -126,12 +167,15 @@ Lcom/swmansion/enriched/markdown/renderer/SpanStyleCache;
|
|
|
126
167
|
Lcom/swmansion/enriched/markdown/renderer/SpoilerRenderer;
|
|
127
168
|
Lcom/swmansion/enriched/markdown/renderer/StrikethroughRenderer;
|
|
128
169
|
Lcom/swmansion/enriched/markdown/renderer/StrongRenderer;
|
|
170
|
+
Lcom/swmansion/enriched/markdown/renderer/SubscriptRenderer;
|
|
171
|
+
Lcom/swmansion/enriched/markdown/renderer/SuperscriptRenderer;
|
|
129
172
|
Lcom/swmansion/enriched/markdown/renderer/TextRenderer;
|
|
130
173
|
Lcom/swmansion/enriched/markdown/renderer/ThematicBreakRenderer;
|
|
131
174
|
Lcom/swmansion/enriched/markdown/renderer/UnderlineRenderer;
|
|
132
175
|
|
|
133
176
|
# Spans
|
|
134
177
|
Lcom/swmansion/enriched/markdown/spans/BaselineShiftSpan;
|
|
178
|
+
Lcom/swmansion/enriched/markdown/spans/BaselineShiftSpan$SpanType;
|
|
135
179
|
Lcom/swmansion/enriched/markdown/spans/BaseListSpan;
|
|
136
180
|
Lcom/swmansion/enriched/markdown/spans/BlockquoteSpan;
|
|
137
181
|
Lcom/swmansion/enriched/markdown/spans/CodeBackgroundSpan;
|
|
@@ -140,7 +184,10 @@ Lcom/swmansion/enriched/markdown/spans/CodeSpan;
|
|
|
140
184
|
Lcom/swmansion/enriched/markdown/spans/EmphasisSpan;
|
|
141
185
|
Lcom/swmansion/enriched/markdown/spans/FadeInSpan;
|
|
142
186
|
Lcom/swmansion/enriched/markdown/spans/HeadingSpan;
|
|
187
|
+
Lcom/swmansion/enriched/markdown/spans/HighlightSpan;
|
|
143
188
|
Lcom/swmansion/enriched/markdown/spans/ImageSpan;
|
|
189
|
+
Lcom/swmansion/enriched/markdown/spans/ImageSpan$CacheKey;
|
|
190
|
+
Lcom/swmansion/enriched/markdown/spans/ImageSpan$ScaledImageDrawable;
|
|
144
191
|
Lcom/swmansion/enriched/markdown/spans/LineHeightSpan;
|
|
145
192
|
Lcom/swmansion/enriched/markdown/spans/LinkSpan;
|
|
146
193
|
Lcom/swmansion/enriched/markdown/spans/MarginBottomSpan;
|
|
@@ -163,6 +210,7 @@ Lcom/swmansion/enriched/markdown/spoiler/ParticleStrategy;
|
|
|
163
210
|
Lcom/swmansion/enriched/markdown/spoiler/SegmentKey;
|
|
164
211
|
Lcom/swmansion/enriched/markdown/spoiler/SegmentRect;
|
|
165
212
|
Lcom/swmansion/enriched/markdown/spoiler/SolidStrategy;
|
|
213
|
+
Lcom/swmansion/enriched/markdown/spoiler/SolidStrategy$SegmentState;
|
|
166
214
|
Lcom/swmansion/enriched/markdown/spoiler/SpoilerAnimator;
|
|
167
215
|
Lcom/swmansion/enriched/markdown/spoiler/SpoilerCapable;
|
|
168
216
|
Lcom/swmansion/enriched/markdown/spoiler/SpoilerConstantsKt;
|
|
@@ -171,6 +219,8 @@ Lcom/swmansion/enriched/markdown/spoiler/SpoilerDrawUtilsKt;
|
|
|
171
219
|
Lcom/swmansion/enriched/markdown/spoiler/SpoilerOverlay;
|
|
172
220
|
Lcom/swmansion/enriched/markdown/spoiler/SpoilerOverlayDrawer;
|
|
173
221
|
Lcom/swmansion/enriched/markdown/spoiler/SpoilerParticleDrawable;
|
|
222
|
+
Lcom/swmansion/enriched/markdown/spoiler/SpoilerParticleDrawable$DotType;
|
|
223
|
+
Lcom/swmansion/enriched/markdown/spoiler/SpoilerStrategy;
|
|
174
224
|
Lcom/swmansion/enriched/markdown/spoiler/SpoilerStrategyKt;
|
|
175
225
|
|
|
176
226
|
# Style Configuration
|
|
@@ -180,6 +230,7 @@ Lcom/swmansion/enriched/markdown/styles/CodeBlockStyle;
|
|
|
180
230
|
Lcom/swmansion/enriched/markdown/styles/CodeStyle;
|
|
181
231
|
Lcom/swmansion/enriched/markdown/styles/EmphasisStyle;
|
|
182
232
|
Lcom/swmansion/enriched/markdown/styles/HeadingStyle;
|
|
233
|
+
Lcom/swmansion/enriched/markdown/styles/HighlightStyle;
|
|
183
234
|
Lcom/swmansion/enriched/markdown/styles/ImageStyle;
|
|
184
235
|
Lcom/swmansion/enriched/markdown/styles/InlineImageStyle;
|
|
185
236
|
Lcom/swmansion/enriched/markdown/styles/InlineMathStyle;
|
|
@@ -202,19 +253,26 @@ Lcom/swmansion/enriched/markdown/styles/ThematicBreakStyle;
|
|
|
202
253
|
Lcom/swmansion/enriched/markdown/styles/UnderlineStyle;
|
|
203
254
|
|
|
204
255
|
# Utilities - Common
|
|
256
|
+
Lcom/swmansion/enriched/markdown/utils/common/BreakStrategyUtils;
|
|
205
257
|
Lcom/swmansion/enriched/markdown/utils/common/FeatureFlags;
|
|
206
258
|
Lcom/swmansion/enriched/markdown/utils/common/MarkdownSegment;
|
|
207
259
|
Lcom/swmansion/enriched/markdown/utils/common/MarkdownSegment$Math;
|
|
208
260
|
Lcom/swmansion/enriched/markdown/utils/common/MarkdownSegment$Table;
|
|
209
261
|
Lcom/swmansion/enriched/markdown/utils/common/MarkdownSegment$Text;
|
|
210
262
|
Lcom/swmansion/enriched/markdown/utils/common/MarkdownSegmentKt;
|
|
263
|
+
Lcom/swmansion/enriched/markdown/utils/common/MarkdownSegmentRenderer;
|
|
211
264
|
Lcom/swmansion/enriched/markdown/utils/common/MarkdownViewManagerUtilsKt;
|
|
265
|
+
Lcom/swmansion/enriched/markdown/utils/common/MotionPreferencesKt;
|
|
212
266
|
Lcom/swmansion/enriched/markdown/utils/common/ReadableMapExtensionsKt;
|
|
267
|
+
Lcom/swmansion/enriched/markdown/utils/common/ReconciliationResult;
|
|
213
268
|
Lcom/swmansion/enriched/markdown/utils/common/RenderedSegment;
|
|
214
269
|
Lcom/swmansion/enriched/markdown/utils/common/RenderedSegment$Math;
|
|
215
270
|
Lcom/swmansion/enriched/markdown/utils/common/RenderedSegment$Table;
|
|
216
271
|
Lcom/swmansion/enriched/markdown/utils/common/RenderedSegment$Text;
|
|
217
|
-
Lcom/swmansion/enriched/markdown/utils/common/
|
|
272
|
+
Lcom/swmansion/enriched/markdown/utils/common/SegmentReconciler;
|
|
273
|
+
Lcom/swmansion/enriched/markdown/utils/common/SegmentSignature;
|
|
274
|
+
Lcom/swmansion/enriched/markdown/utils/common/StreamingMarkdownFilter;
|
|
275
|
+
Lcom/swmansion/enriched/markdown/utils/common/TableStreamingMode;
|
|
218
276
|
Lcom/swmansion/enriched/markdown/utils/common/layout/RTLUtilsKt;
|
|
219
277
|
Lcom/swmansion/enriched/markdown/utils/common/serialization/MarkdownASTSerializer;
|
|
220
278
|
|
|
@@ -228,27 +286,42 @@ Lcom/swmansion/enriched/markdown/utils/text/ImageCache;
|
|
|
228
286
|
Lcom/swmansion/enriched/markdown/utils/text/ImageDownloader;
|
|
229
287
|
Lcom/swmansion/enriched/markdown/utils/text/TailFadeInAnimator;
|
|
230
288
|
Lcom/swmansion/enriched/markdown/utils/text/conversion/HTMLGenerator;
|
|
289
|
+
Lcom/swmansion/enriched/markdown/utils/text/conversion/HTMLGenerator$CachedStyles;
|
|
290
|
+
Lcom/swmansion/enriched/markdown/utils/text/conversion/HTMLGenerator$GeneratorState;
|
|
291
|
+
Lcom/swmansion/enriched/markdown/utils/text/conversion/HTMLGenerator$ParagraphInfo;
|
|
231
292
|
Lcom/swmansion/enriched/markdown/utils/text/conversion/MarkdownExtractor;
|
|
293
|
+
Lcom/swmansion/enriched/markdown/utils/text/conversion/MarkdownExtractor$ExtractionState;
|
|
294
|
+
Lcom/swmansion/enriched/markdown/utils/text/conversion/MarkdownExtractor$HeadingAccumulator;
|
|
232
295
|
Lcom/swmansion/enriched/markdown/utils/text/extensions/ParagraphUtilsKt;
|
|
233
296
|
Lcom/swmansion/enriched/markdown/utils/text/extensions/SpannableExtensionsKt;
|
|
234
297
|
Lcom/swmansion/enriched/markdown/utils/text/extensions/TextPaintExtensionsKt;
|
|
235
298
|
Lcom/swmansion/enriched/markdown/utils/text/interaction/CheckboxTouchHelper;
|
|
236
299
|
Lcom/swmansion/enriched/markdown/utils/text/interaction/TaskListHitTestResult;
|
|
237
300
|
Lcom/swmansion/enriched/markdown/utils/text/interaction/TaskListTapUtils;
|
|
238
|
-
Lcom/swmansion/enriched/markdown/utils/text/interaction/TaskListTapUtilsKt;
|
|
239
301
|
Lcom/swmansion/enriched/markdown/utils/text/interaction/TaskListToggleUtils;
|
|
240
302
|
Lcom/swmansion/enriched/markdown/utils/text/span/BlockSpacingKt;
|
|
241
303
|
Lcom/swmansion/enriched/markdown/utils/text/span/SpanFlagsKt;
|
|
242
304
|
Lcom/swmansion/enriched/markdown/utils/text/view/LinkEventsKt;
|
|
243
305
|
Lcom/swmansion/enriched/markdown/utils/text/view/LinkLongPressMovementMethod;
|
|
244
306
|
Lcom/swmansion/enriched/markdown/utils/text/view/SelectionActionModeKt;
|
|
307
|
+
Lcom/swmansion/enriched/markdown/utils/text/view/SelectionMenuConfig;
|
|
308
|
+
Lcom/swmansion/enriched/markdown/utils/text/view/TextSelectionColorsKt;
|
|
245
309
|
Lcom/swmansion/enriched/markdown/utils/text/view/TextViewSetupKt;
|
|
246
310
|
|
|
247
311
|
# Views
|
|
248
312
|
Lcom/swmansion/enriched/markdown/views/BlockSegmentView;
|
|
249
313
|
Lcom/swmansion/enriched/markdown/views/ContextMenuPopup;
|
|
314
|
+
Lcom/swmansion/enriched/markdown/views/ContextMenuPopup$Builder;
|
|
315
|
+
Lcom/swmansion/enriched/markdown/views/ContextMenuPopup$Icon;
|
|
316
|
+
Lcom/swmansion/enriched/markdown/views/ContextMenuPopup$MenuItem;
|
|
250
317
|
Lcom/swmansion/enriched/markdown/views/MathContainerView;
|
|
251
318
|
Lcom/swmansion/enriched/markdown/views/TableContainerView;
|
|
319
|
+
Lcom/swmansion/enriched/markdown/views/TableContainerView$CellBackgroundView;
|
|
320
|
+
Lcom/swmansion/enriched/markdown/views/TableContainerView$CellTextView;
|
|
321
|
+
Lcom/swmansion/enriched/markdown/views/TableContainerView$GridContainerView;
|
|
322
|
+
Lcom/swmansion/enriched/markdown/views/TableContainerView$HeaderTypefaceSpan;
|
|
323
|
+
Lcom/swmansion/enriched/markdown/views/TableContainerView$TableCellData;
|
|
252
324
|
|
|
253
325
|
# Math (optional, from src/math source set)
|
|
254
326
|
Lcom/swmansion/enriched/markdown/spans/MathMeasureHelper;
|
|
327
|
+
Lcom/swmansion/enriched/markdown/views/MathContainerView$RaTeXCanvasView;
|
|
@@ -10,6 +10,7 @@ import android.util.Log
|
|
|
10
10
|
import android.view.View
|
|
11
11
|
import android.widget.FrameLayout
|
|
12
12
|
import com.facebook.react.bridge.ReadableMap
|
|
13
|
+
import com.swmansion.enriched.markdown.accessibility.AccessibilityLabels
|
|
13
14
|
import com.swmansion.enriched.markdown.parser.Md4cFlags
|
|
14
15
|
import com.swmansion.enriched.markdown.parser.Parser
|
|
15
16
|
import com.swmansion.enriched.markdown.spoiler.SpoilerOverlay
|
|
@@ -82,6 +83,7 @@ class EnrichedMarkdown
|
|
|
82
83
|
private var selectionColor: Int? = null
|
|
83
84
|
private var selectionHandleColor: Int? = null
|
|
84
85
|
private var selectionMenuConfig = SelectionMenuConfig()
|
|
86
|
+
private var accessibilityLabels = AccessibilityLabels()
|
|
85
87
|
private var textBreakStrategy: String = BreakStrategyUtils.DEFAULT_STRATEGY
|
|
86
88
|
|
|
87
89
|
private var onLinkPressCallback: ((String) -> Unit)? = null
|
|
@@ -232,6 +234,51 @@ class EnrichedMarkdown
|
|
|
232
234
|
segmentViews.filterIsInstance<EnrichedMarkdownInternalText>().forEach {
|
|
233
235
|
it.selectionMenuConfig = config
|
|
234
236
|
}
|
|
237
|
+
// Table and math views cache the copy labels, so re-push them on update
|
|
238
|
+
// (e.g. a language change without a remount) to avoid stale labels.
|
|
239
|
+
pushCopyLabelsToBlockSegments()
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
private fun pushCopyLabelsToBlockSegments() {
|
|
243
|
+
val copyLabel = selectionMenuConfig.copyLabel
|
|
244
|
+
val copyAsMarkdownLabel = selectionMenuConfig.copyAsMarkdownLabel
|
|
245
|
+
segmentViews.forEach { view ->
|
|
246
|
+
when {
|
|
247
|
+
view is TableContainerView -> {
|
|
248
|
+
view.copyLabel = copyLabel
|
|
249
|
+
view.copyAsMarkdownLabel = copyAsMarkdownLabel
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
isMathContainerView(view) -> {
|
|
253
|
+
runCatching {
|
|
254
|
+
view.javaClass.getMethod("setCopyLabel", String::class.java).invoke(view, copyLabel)
|
|
255
|
+
view.javaClass
|
|
256
|
+
.getMethod("setCopyAsMarkdownLabel", String::class.java)
|
|
257
|
+
.invoke(view, copyAsMarkdownLabel)
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
fun setAccessibilityLabels(labels: AccessibilityLabels) {
|
|
265
|
+
if (accessibilityLabels == labels) return
|
|
266
|
+
accessibilityLabels = labels
|
|
267
|
+
segmentViews.filterIsInstance<EnrichedMarkdownInternalText>().forEach {
|
|
268
|
+
it.accessibilityLabels = labels
|
|
269
|
+
}
|
|
270
|
+
segmentViews.filterIsInstance<TableContainerView>().forEach {
|
|
271
|
+
it.accessibilityLabels = labels
|
|
272
|
+
}
|
|
273
|
+
mathContainerClass?.let { mathClass ->
|
|
274
|
+
segmentViews.filter { mathClass.isInstance(it) }.forEach { view ->
|
|
275
|
+
runCatching {
|
|
276
|
+
mathClass
|
|
277
|
+
.getMethod("setAccessibilityLabels", AccessibilityLabels::class.java)
|
|
278
|
+
.invoke(view, labels)
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
235
282
|
}
|
|
236
283
|
|
|
237
284
|
private fun forwardContextMenuItemPress(
|
|
@@ -433,6 +480,7 @@ class EnrichedMarkdown
|
|
|
433
480
|
EnrichedMarkdownInternalText(context).apply {
|
|
434
481
|
spoilerOverlay = this@EnrichedMarkdown.spoilerOverlay
|
|
435
482
|
selectionMenuConfig = this@EnrichedMarkdown.selectionMenuConfig
|
|
483
|
+
accessibilityLabels = this@EnrichedMarkdown.accessibilityLabels
|
|
436
484
|
setIsSelectable(selectable)
|
|
437
485
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
438
486
|
breakStrategy = BreakStrategyUtils.resolveBreakStrategy(textBreakStrategy)
|
|
@@ -461,8 +509,11 @@ class EnrichedMarkdown
|
|
|
461
509
|
) = TableContainerView(context, style).apply {
|
|
462
510
|
allowFontScaling = this@EnrichedMarkdown.allowFontScaling
|
|
463
511
|
maxFontSizeMultiplier = this@EnrichedMarkdown.maxFontSizeMultiplier
|
|
512
|
+
accessibilityLabels = this@EnrichedMarkdown.accessibilityLabels
|
|
464
513
|
onLinkPress = onLinkPressCallback
|
|
465
514
|
onLinkLongPress = onLinkLongPressCallback
|
|
515
|
+
copyLabel = this@EnrichedMarkdown.selectionMenuConfig.copyLabel
|
|
516
|
+
copyAsMarkdownLabel = this@EnrichedMarkdown.selectionMenuConfig.copyAsMarkdownLabel
|
|
466
517
|
applyTableNode(segment.node)
|
|
467
518
|
}
|
|
468
519
|
|
|
@@ -477,6 +528,17 @@ class EnrichedMarkdown
|
|
|
477
528
|
resolvedClass
|
|
478
529
|
.getConstructor(Context::class.java, StyleConfig::class.java)
|
|
479
530
|
.newInstance(context, style) as View
|
|
531
|
+
runCatching {
|
|
532
|
+
resolvedClass
|
|
533
|
+
.getMethod("setAccessibilityLabels", AccessibilityLabels::class.java)
|
|
534
|
+
.invoke(view, accessibilityLabels)
|
|
535
|
+
}
|
|
536
|
+
resolvedClass
|
|
537
|
+
.getMethod("setCopyLabel", String::class.java)
|
|
538
|
+
.invoke(view, selectionMenuConfig.copyLabel)
|
|
539
|
+
resolvedClass
|
|
540
|
+
.getMethod("setCopyAsMarkdownLabel", String::class.java)
|
|
541
|
+
.invoke(view, selectionMenuConfig.copyAsMarkdownLabel)
|
|
480
542
|
resolvedClass.getMethod("applyLatex", String::class.java).invoke(view, segment.latex)
|
|
481
543
|
view
|
|
482
544
|
} catch (e: Exception) {
|
package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownInternalText.kt
CHANGED
|
@@ -6,6 +6,7 @@ import android.os.Build
|
|
|
6
6
|
import android.text.Layout
|
|
7
7
|
import android.util.AttributeSet
|
|
8
8
|
import android.view.MotionEvent
|
|
9
|
+
import com.swmansion.enriched.markdown.accessibility.AccessibilityLabels
|
|
9
10
|
import com.swmansion.enriched.markdown.accessibility.AccessibleMarkdownTextView
|
|
10
11
|
import com.swmansion.enriched.markdown.spoiler.SpoilerCapable
|
|
11
12
|
import com.swmansion.enriched.markdown.spoiler.SpoilerOverlay
|
|
@@ -17,6 +18,7 @@ import com.swmansion.enriched.markdown.utils.text.view.applySelectableState
|
|
|
17
18
|
import com.swmansion.enriched.markdown.utils.text.view.cancelJSTouchForCheckboxTap
|
|
18
19
|
import com.swmansion.enriched.markdown.utils.text.view.cancelJSTouchForLinkTap
|
|
19
20
|
import com.swmansion.enriched.markdown.utils.text.view.createSelectionActionModeCallback
|
|
21
|
+
import com.swmansion.enriched.markdown.utils.text.view.reallowParentInterceptIfLinkReleased
|
|
20
22
|
import com.swmansion.enriched.markdown.utils.text.view.setupAsMarkdownTextView
|
|
21
23
|
import com.swmansion.enriched.markdown.views.BlockSegmentView
|
|
22
24
|
|
|
@@ -47,6 +49,11 @@ class EnrichedMarkdownInternalText
|
|
|
47
49
|
private var contextMenuItemTexts: List<String> = emptyList()
|
|
48
50
|
private var onContextMenuItemPress: ((itemText: String, selectedText: String, selectionStart: Int, selectionEnd: Int) -> Unit)? = null
|
|
49
51
|
var selectionMenuConfig: SelectionMenuConfig = SelectionMenuConfig()
|
|
52
|
+
var accessibilityLabels: AccessibilityLabels = AccessibilityLabels()
|
|
53
|
+
set(value) {
|
|
54
|
+
field = value
|
|
55
|
+
accessibilityHelper.labels = value
|
|
56
|
+
}
|
|
50
57
|
|
|
51
58
|
init {
|
|
52
59
|
setupAsMarkdownTextView()
|
|
@@ -103,8 +110,9 @@ class EnrichedMarkdownInternalText
|
|
|
103
110
|
return true
|
|
104
111
|
}
|
|
105
112
|
val result = super.onTouchEvent(event)
|
|
106
|
-
|
|
107
|
-
cancelJSTouchForLinkTap(event)
|
|
113
|
+
when (event.action) {
|
|
114
|
+
MotionEvent.ACTION_DOWN -> cancelJSTouchForLinkTap(event)
|
|
115
|
+
else -> reallowParentInterceptIfLinkReleased()
|
|
108
116
|
}
|
|
109
117
|
return result
|
|
110
118
|
}
|
|
@@ -18,6 +18,7 @@ import com.swmansion.enriched.markdown.utils.common.emitLinkLongPress
|
|
|
18
18
|
import com.swmansion.enriched.markdown.utils.common.emitLinkPress
|
|
19
19
|
import com.swmansion.enriched.markdown.utils.common.emitTaskListItemPress
|
|
20
20
|
import com.swmansion.enriched.markdown.utils.common.markdownEventTypeConstants
|
|
21
|
+
import com.swmansion.enriched.markdown.utils.common.parseAccessibilityLabels
|
|
21
22
|
import com.swmansion.enriched.markdown.utils.common.parseContextMenuItems
|
|
22
23
|
import com.swmansion.enriched.markdown.utils.common.parseMd4cFlags
|
|
23
24
|
import com.swmansion.enriched.markdown.utils.common.parseSelectionMenuConfig
|
|
@@ -223,6 +224,15 @@ class EnrichedMarkdownManager :
|
|
|
223
224
|
view.setSelectionMenuConfig(parseSelectionMenuConfig(value))
|
|
224
225
|
}
|
|
225
226
|
|
|
227
|
+
@ReactProp(name = "accessibilityLabels")
|
|
228
|
+
override fun setAccessibilityLabels(
|
|
229
|
+
view: EnrichedMarkdown?,
|
|
230
|
+
value: ReadableMap?,
|
|
231
|
+
) {
|
|
232
|
+
if (view == null) return
|
|
233
|
+
view.setAccessibilityLabels(parseAccessibilityLabels(value))
|
|
234
|
+
}
|
|
235
|
+
|
|
226
236
|
override fun setPadding(
|
|
227
237
|
view: EnrichedMarkdown,
|
|
228
238
|
left: Int,
|
|
@@ -11,6 +11,7 @@ import android.util.AttributeSet
|
|
|
11
11
|
import android.util.Log
|
|
12
12
|
import android.view.MotionEvent
|
|
13
13
|
import com.facebook.react.bridge.ReadableMap
|
|
14
|
+
import com.swmansion.enriched.markdown.accessibility.AccessibilityLabels
|
|
14
15
|
import com.swmansion.enriched.markdown.accessibility.AccessibleMarkdownTextView
|
|
15
16
|
import com.swmansion.enriched.markdown.parser.Md4cFlags
|
|
16
17
|
import com.swmansion.enriched.markdown.parser.Parser
|
|
@@ -31,6 +32,7 @@ import com.swmansion.enriched.markdown.utils.text.view.cancelJSTouchForLinkTap
|
|
|
31
32
|
import com.swmansion.enriched.markdown.utils.text.view.createSelectionActionModeCallback
|
|
32
33
|
import com.swmansion.enriched.markdown.utils.text.view.emitLinkLongPressEvent
|
|
33
34
|
import com.swmansion.enriched.markdown.utils.text.view.emitLinkPressEvent
|
|
35
|
+
import com.swmansion.enriched.markdown.utils.text.view.reallowParentInterceptIfLinkReleased
|
|
34
36
|
import com.swmansion.enriched.markdown.utils.text.view.setupAsMarkdownTextView
|
|
35
37
|
import java.util.concurrent.Executors
|
|
36
38
|
|
|
@@ -275,6 +277,10 @@ class EnrichedMarkdownText
|
|
|
275
277
|
selectionMenuConfig = config
|
|
276
278
|
}
|
|
277
279
|
|
|
280
|
+
fun setAccessibilityLabels(labels: AccessibilityLabels) {
|
|
281
|
+
accessibilityHelper.labels = labels
|
|
282
|
+
}
|
|
283
|
+
|
|
278
284
|
fun setIsSelectable(selectable: Boolean) {
|
|
279
285
|
applySelectableState(selectable)
|
|
280
286
|
}
|
|
@@ -351,8 +357,9 @@ class EnrichedMarkdownText
|
|
|
351
357
|
return true
|
|
352
358
|
}
|
|
353
359
|
val result = super.onTouchEvent(event)
|
|
354
|
-
|
|
355
|
-
cancelJSTouchForLinkTap(event)
|
|
360
|
+
when (event.action) {
|
|
361
|
+
MotionEvent.ACTION_DOWN -> cancelJSTouchForLinkTap(event)
|
|
362
|
+
else -> reallowParentInterceptIfLinkReleased()
|
|
356
363
|
}
|
|
357
364
|
return result
|
|
358
365
|
}
|
package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextManager.kt
CHANGED
|
@@ -17,6 +17,7 @@ import com.swmansion.enriched.markdown.utils.common.emitLinkLongPress
|
|
|
17
17
|
import com.swmansion.enriched.markdown.utils.common.emitLinkPress
|
|
18
18
|
import com.swmansion.enriched.markdown.utils.common.emitTaskListItemPress
|
|
19
19
|
import com.swmansion.enriched.markdown.utils.common.markdownEventTypeConstants
|
|
20
|
+
import com.swmansion.enriched.markdown.utils.common.parseAccessibilityLabels
|
|
20
21
|
import com.swmansion.enriched.markdown.utils.common.parseContextMenuItems
|
|
21
22
|
import com.swmansion.enriched.markdown.utils.common.parseMd4cFlags
|
|
22
23
|
import com.swmansion.enriched.markdown.utils.common.parseSelectionMenuConfig
|
|
@@ -221,6 +222,15 @@ class EnrichedMarkdownTextManager :
|
|
|
221
222
|
view.setSelectionMenuConfig(parseSelectionMenuConfig(value))
|
|
222
223
|
}
|
|
223
224
|
|
|
225
|
+
@ReactProp(name = "accessibilityLabels")
|
|
226
|
+
override fun setAccessibilityLabels(
|
|
227
|
+
view: EnrichedMarkdownText?,
|
|
228
|
+
value: ReadableMap?,
|
|
229
|
+
) {
|
|
230
|
+
if (view == null) return
|
|
231
|
+
view.setAccessibilityLabels(parseAccessibilityLabels(value))
|
|
232
|
+
}
|
|
233
|
+
|
|
224
234
|
override fun setPadding(
|
|
225
235
|
view: EnrichedMarkdownText,
|
|
226
236
|
left: Int,
|
package/android/src/main/java/com/swmansion/enriched/markdown/accessibility/AccessibilityLabels.kt
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
package com.swmansion.enriched.markdown.accessibility
|
|
2
|
+
|
|
3
|
+
data class AccessibilityLabels(
|
|
4
|
+
val bulletPoint: String = "",
|
|
5
|
+
val nestedBulletPoint: String = "",
|
|
6
|
+
val orderedItem: String = "",
|
|
7
|
+
val nestedOrderedItem: String = "",
|
|
8
|
+
val blockquote: String = "",
|
|
9
|
+
val nestedBlockquote: String = "",
|
|
10
|
+
val tableRow: String = "",
|
|
11
|
+
val mathEquation: String = "",
|
|
12
|
+
val rotorHeadings: String = "",
|
|
13
|
+
val rotorLinks: String = "",
|
|
14
|
+
val rotorImages: String = "",
|
|
15
|
+
)
|
|
@@ -10,6 +10,7 @@ import androidx.core.view.ViewCompat
|
|
|
10
10
|
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat
|
|
11
11
|
import androidx.customview.widget.ExploreByTouchHelper
|
|
12
12
|
import com.swmansion.enriched.markdown.spans.BaseListSpan
|
|
13
|
+
import com.swmansion.enriched.markdown.spans.BlockquoteSpan
|
|
13
14
|
import com.swmansion.enriched.markdown.spans.HeadingSpan
|
|
14
15
|
import com.swmansion.enriched.markdown.spans.ImageSpan
|
|
15
16
|
import com.swmansion.enriched.markdown.spans.LinkSpan
|
|
@@ -23,6 +24,13 @@ class MarkdownAccessibilityHelper(
|
|
|
23
24
|
private var lastLayoutHashCode = 0
|
|
24
25
|
private var pendingLayoutListener: ViewTreeObserver.OnGlobalLayoutListener? = null
|
|
25
26
|
|
|
27
|
+
var labels: AccessibilityLabels = AccessibilityLabels()
|
|
28
|
+
set(value) {
|
|
29
|
+
if (field == value) return
|
|
30
|
+
field = value
|
|
31
|
+
invalidateAccessibilityItems()
|
|
32
|
+
}
|
|
33
|
+
|
|
26
34
|
data class AccessibilityItem(
|
|
27
35
|
val id: Int,
|
|
28
36
|
val text: String,
|
|
@@ -184,7 +192,7 @@ class MarkdownAccessibilityHelper(
|
|
|
184
192
|
}
|
|
185
193
|
|
|
186
194
|
// The semantic span itself
|
|
187
|
-
val content = span.imageAltText
|
|
195
|
+
val content = span.imageAltText ?: spanned.substring(span.start, span.end).trim()
|
|
188
196
|
if (content.isNotEmpty()) {
|
|
189
197
|
items.add(createSpanItem(nextId++, content, span, spanned))
|
|
190
198
|
}
|
|
@@ -322,32 +330,61 @@ class MarkdownAccessibilityHelper(
|
|
|
322
330
|
)
|
|
323
331
|
}
|
|
324
332
|
|
|
333
|
+
val blockquoteAnnouncement = blockquoteAnnouncementFor(item)
|
|
325
334
|
when {
|
|
326
335
|
item.isHeading -> {
|
|
327
336
|
isHeading = true
|
|
328
|
-
|
|
337
|
+
if (blockquoteAnnouncement != null) {
|
|
338
|
+
roleDescription = blockquoteAnnouncement
|
|
339
|
+
}
|
|
329
340
|
}
|
|
330
341
|
|
|
331
342
|
item.isImage -> {
|
|
332
|
-
roleDescription = "image"
|
|
343
|
+
roleDescription = appendBlockquote("image", blockquoteAnnouncement)
|
|
333
344
|
}
|
|
334
345
|
|
|
335
346
|
item.isLink -> {
|
|
336
347
|
isClickable = true
|
|
337
348
|
addAction(AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK)
|
|
338
|
-
|
|
349
|
+
val base = item.listInfo?.let { "link, ${it.listAnnouncement}" } ?: "link"
|
|
350
|
+
roleDescription = appendBlockquote(base, blockquoteAnnouncement)
|
|
339
351
|
}
|
|
340
352
|
|
|
341
353
|
item.isListItem -> {
|
|
342
|
-
roleDescription = item.listInfo!!.listAnnouncement
|
|
354
|
+
roleDescription = appendBlockquote(item.listInfo!!.listAnnouncement, blockquoteAnnouncement)
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
blockquoteAnnouncement != null -> {
|
|
358
|
+
roleDescription = blockquoteAnnouncement
|
|
343
359
|
}
|
|
344
360
|
}
|
|
345
361
|
}
|
|
346
362
|
|
|
363
|
+
private fun appendBlockquote(
|
|
364
|
+
base: String,
|
|
365
|
+
blockquoteAnnouncement: String?,
|
|
366
|
+
): String = if (blockquoteAnnouncement != null) "$base, $blockquoteAnnouncement" else base
|
|
367
|
+
|
|
368
|
+
private fun blockquoteAnnouncementFor(item: AccessibilityItem): String? {
|
|
369
|
+
val spanned = textView.text as? Spanned ?: return null
|
|
370
|
+
if (spanned.isEmpty()) return null
|
|
371
|
+
val pos = item.start.coerceIn(0, spanned.length - 1).coerceAtLeast(0)
|
|
372
|
+
if (pos >= spanned.length) return null
|
|
373
|
+
val spans = spanned.getSpans(pos, pos + 1, BlockquoteSpan::class.java)
|
|
374
|
+
if (spans.isEmpty()) return null
|
|
375
|
+
val maxDepth = spans.maxOf { it.depth }
|
|
376
|
+
return if (maxDepth >= 1) labels.nestedBlockquote else labels.blockquote
|
|
377
|
+
}
|
|
378
|
+
|
|
347
379
|
private val ListItemInfo.listAnnouncement: String
|
|
348
380
|
get() {
|
|
349
|
-
val
|
|
350
|
-
return if (isOrdered)
|
|
381
|
+
val nested = depth > 0
|
|
382
|
+
return if (isOrdered) {
|
|
383
|
+
val template = if (nested) labels.nestedOrderedItem else labels.orderedItem
|
|
384
|
+
template.replace("{n}", itemNumber.toString())
|
|
385
|
+
} else {
|
|
386
|
+
if (nested) labels.nestedBulletPoint else labels.bulletPoint
|
|
387
|
+
}
|
|
351
388
|
}
|
|
352
389
|
|
|
353
390
|
private fun boundsForItem(item: AccessibilityItem): Rect {
|