@expensify/react-native-live-markdown 0.1.335 → 0.1.337
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 +11 -1
- package/apple/MarkdownParser.h +21 -1
- package/apple/MarkdownParser.mm +236 -56
- package/apple/MarkdownTextInputDecoratorShadowNode.h +11 -4
- package/apple/MarkdownTextInputDecoratorShadowNode.mm +47 -7
- package/apple/RCTMarkdownUtils.h +14 -4
- package/apple/RCTMarkdownUtils.mm +44 -7
- package/lib/commonjs/parseExpensiMark.js +10 -2
- package/lib/commonjs/parseExpensiMark.js.map +1 -1
- package/lib/module/parseExpensiMark.js +10 -2
- package/lib/module/parseExpensiMark.js.map +1 -1
- package/lib/typescript/src/parseExpensiMark.d.ts +8 -1
- package/lib/typescript/src/parseExpensiMark.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/parseExpensiMark.ts +9 -2
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ npm install @expensify/react-native-live-markdown react-native-worklets expensif
|
|
|
20
20
|
npx expo install @expensify/react-native-live-markdown react-native-worklets expensify-common html-entities@2.5.3
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
React Native Live Markdown requires [react-native-worklets](https://github.com/software-mansion/react-native-reanimated/tree/main/packages/react-native-worklets) 0.7.0 or newer as well as [expensify-common](https://github.com/Expensify/expensify-common) 2.0.
|
|
23
|
+
React Native Live Markdown requires [react-native-worklets](https://github.com/software-mansion/react-native-reanimated/tree/main/packages/react-native-worklets) 0.7.0 or newer as well as [expensify-common](https://github.com/Expensify/expensify-common) 2.0.201 or newer and [html-entities](https://github.com/mdevils/html-entities) 2.5.3 exactly if using the default built-in ExpensiMark parser.
|
|
24
24
|
|
|
25
25
|
> [!IMPORTANT]
|
|
26
26
|
> Please follow the `react-native-worklets` [Getting Started](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/getting-started/#react-native-community-cli) guide to avoid issues.
|
|
@@ -55,6 +55,16 @@ export default function App() {
|
|
|
55
55
|
}
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
+
The built-in `parseExpensiMark` parser accepts an optional maximum input length. It defaults to 4,000 characters and returns no formatting ranges when the input is longer than the configured limit. To use a different limit, wrap the parser in a worklet function:
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
function parser(input: string) {
|
|
62
|
+
'worklet';
|
|
63
|
+
|
|
64
|
+
return parseExpensiMark(input, 5000);
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
58
68
|
## Styling
|
|
59
69
|
|
|
60
70
|
`MarkdownTextInput` can be styled using `style` prop just like regular `TextInput` component.
|
package/apple/MarkdownParser.h
CHANGED
|
@@ -8,6 +8,26 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
8
8
|
- (NSArray<MarkdownRange *> *)parse:(nonnull NSString *)text
|
|
9
9
|
withParserId:(nonnull NSNumber *)parserId;
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
// Returns the ranges for (text, parserId) if they are already in the cache, or
|
|
12
|
+
// nil if they aren't. This never runs the parser, so it is safe to call from
|
|
13
|
+
// the main thread while Yoga is measuring.
|
|
14
|
+
- (nullable NSArray<MarkdownRange *> *)cachedRangesForText:(nonnull NSString *)text
|
|
15
|
+
withParserId:(nonnull NSNumber *)parserId;
|
|
16
|
+
|
|
17
|
+
// Parses in the background and puts the result in the cache, so the caller
|
|
18
|
+
// doesn't have to wait for the parser. Used by the main thread, which must
|
|
19
|
+
// never wait for it (see Sentry APP-EF1).
|
|
20
|
+
//
|
|
21
|
+
// Only the newest request matters: a new call replaces one that is still
|
|
22
|
+
// waiting. A parse that already started can't be stopped, but the newest text
|
|
23
|
+
// is parsed as soon as it finishes.
|
|
24
|
+
//
|
|
25
|
+
// `completion` runs on the background queue once the text is cached. It is
|
|
26
|
+
// skipped if a newer call replaced this one, since that call reports instead.
|
|
27
|
+
- (void)warmCacheAsyncForText:(nonnull NSString *)text
|
|
28
|
+
withParserId:(nonnull NSNumber *)parserId
|
|
29
|
+
completion:(nullable void (^)(void))completion;
|
|
12
30
|
|
|
13
31
|
@end
|
|
32
|
+
|
|
33
|
+
NS_ASSUME_NONNULL_END
|
package/apple/MarkdownParser.mm
CHANGED
|
@@ -2,77 +2,257 @@
|
|
|
2
2
|
#import <RNLiveMarkdown/MarkdownGlobal.h>
|
|
3
3
|
#import <React/RCTLog.h>
|
|
4
4
|
|
|
5
|
+
// The main thread can only use ranges that are already cached (see
|
|
6
|
+
// RCTMarkdownUtils), and one entry was not enough: two texts taking turns kept
|
|
7
|
+
// overwriting each other, so the main thread never found what it needed. A few
|
|
8
|
+
// entries cover that case (typing then undoing, or an input echoing back older
|
|
9
|
+
// text), and the list is still small enough to scan one by one.
|
|
10
|
+
static const NSUInteger kMarkdownParserCacheCapacity = 4;
|
|
11
|
+
|
|
12
|
+
@interface MarkdownParserCacheEntry : NSObject
|
|
13
|
+
|
|
14
|
+
@property (nonatomic, readonly, nonnull) NSString *text;
|
|
15
|
+
@property (nonatomic, readonly, nonnull) NSNumber *parserId;
|
|
16
|
+
@property (nonatomic, readonly, nonnull) NSArray<MarkdownRange *> *markdownRanges;
|
|
17
|
+
|
|
18
|
+
- (instancetype)initWithText:(nonnull NSString *)text
|
|
19
|
+
parserId:(nonnull NSNumber *)parserId
|
|
20
|
+
markdownRanges:(nonnull NSArray<MarkdownRange *> *)markdownRanges;
|
|
21
|
+
|
|
22
|
+
- (BOOL)matchesText:(nonnull NSString *)text parserId:(nonnull NSNumber *)parserId;
|
|
23
|
+
|
|
24
|
+
@end
|
|
25
|
+
|
|
26
|
+
@implementation MarkdownParserCacheEntry
|
|
27
|
+
|
|
28
|
+
- (instancetype)initWithText:(nonnull NSString *)text
|
|
29
|
+
parserId:(nonnull NSNumber *)parserId
|
|
30
|
+
markdownRanges:(nonnull NSArray<MarkdownRange *> *)markdownRanges
|
|
31
|
+
{
|
|
32
|
+
if (self = [super init]) {
|
|
33
|
+
_text = [text copy];
|
|
34
|
+
_parserId = parserId;
|
|
35
|
+
_markdownRanges = markdownRanges;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return self;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
- (BOOL)matchesText:(nonnull NSString *)text parserId:(nonnull NSNumber *)parserId
|
|
42
|
+
{
|
|
43
|
+
// Check the parser id first - comparing numbers is cheaper than strings.
|
|
44
|
+
return [_parserId isEqualToNumber:parserId] && [_text isEqualToString:text];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@end
|
|
48
|
+
|
|
49
|
+
// Everything below is only read and written inside `@synchronized (self)`.
|
|
5
50
|
@implementation MarkdownParser {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
51
|
+
// Newest entry first, at index 0.
|
|
52
|
+
NSMutableArray<MarkdownParserCacheEntry *> *_cache;
|
|
53
|
+
|
|
54
|
+
// The next text to parse in the background, if there is one.
|
|
55
|
+
NSString *_pendingText;
|
|
56
|
+
NSNumber *_pendingParserId;
|
|
57
|
+
void (^_pendingCompletion)(void);
|
|
58
|
+
BOOL _warmupScheduled;
|
|
9
59
|
}
|
|
10
60
|
|
|
11
|
-
- (
|
|
12
|
-
|
|
61
|
+
- (instancetype)init
|
|
62
|
+
{
|
|
63
|
+
if (self = [super init]) {
|
|
64
|
+
_cache = [[NSMutableArray alloc] initWithCapacity:kMarkdownParserCacheCapacity];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return self;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// One background queue for parsing off the main thread. A serial queue is
|
|
71
|
+
// enough: the worklet runtime only runs one parse at a time anyway, and this
|
|
72
|
+
// keeps us from doing the same work twice.
|
|
73
|
+
+ (dispatch_queue_t)cacheWarmupQueue
|
|
74
|
+
{
|
|
75
|
+
static dispatch_queue_t queue;
|
|
76
|
+
static dispatch_once_t onceToken;
|
|
77
|
+
dispatch_once(&onceToken, ^{
|
|
78
|
+
dispatch_queue_attr_t attr = dispatch_queue_attr_make_with_qos_class(
|
|
79
|
+
DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INITIATED, 0);
|
|
80
|
+
queue = dispatch_queue_create("com.expensify.livemarkdown.parser-cache-warmup", attr);
|
|
81
|
+
});
|
|
82
|
+
return queue;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
- (nullable NSArray<MarkdownRange *> *)cachedRangesForText:(nonnull NSString *)text
|
|
86
|
+
withParserId:(nonnull NSNumber *)parserId
|
|
13
87
|
{
|
|
14
88
|
@synchronized (self) {
|
|
15
|
-
|
|
16
|
-
|
|
89
|
+
for (NSUInteger i = 0, n = _cache.count; i < n; i++) {
|
|
90
|
+
MarkdownParserCacheEntry *entry = _cache[i];
|
|
91
|
+
if (![entry matchesText:text parserId:parserId]) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (i != 0) {
|
|
95
|
+
// Move it to the front, so the text we keep asking for is not the one
|
|
96
|
+
// we throw away next.
|
|
97
|
+
[_cache removeObjectAtIndex:i];
|
|
98
|
+
[_cache insertObject:entry atIndex:0];
|
|
99
|
+
}
|
|
100
|
+
return entry.markdownRanges;
|
|
17
101
|
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return nil;
|
|
105
|
+
}
|
|
18
106
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
107
|
+
- (void)cacheMarkdownRanges:(nonnull NSArray<MarkdownRange *> *)markdownRanges
|
|
108
|
+
forText:(nonnull NSString *)text
|
|
109
|
+
withParserId:(nonnull NSNumber *)parserId
|
|
110
|
+
{
|
|
111
|
+
MarkdownParserCacheEntry *entry = [[MarkdownParserCacheEntry alloc] initWithText:text
|
|
112
|
+
parserId:parserId
|
|
113
|
+
markdownRanges:markdownRanges];
|
|
114
|
+
|
|
115
|
+
@synchronized (self) {
|
|
116
|
+
for (NSUInteger i = 0, n = _cache.count; i < n; i++) {
|
|
117
|
+
if ([_cache[i] matchesText:text parserId:parserId]) {
|
|
118
|
+
[_cache removeObjectAtIndex:i];
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
30
121
|
}
|
|
122
|
+
[_cache insertObject:entry atIndex:0];
|
|
123
|
+
while (_cache.count > kMarkdownParserCacheCapacity) {
|
|
124
|
+
[_cache removeLastObject];
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
- (void)warmCacheAsyncForText:(nonnull NSString *)text
|
|
130
|
+
withParserId:(nonnull NSNumber *)parserId
|
|
131
|
+
completion:(nullable void (^)(void))completion
|
|
132
|
+
{
|
|
133
|
+
@synchronized (self) {
|
|
134
|
+
// Keep only the newest request: replace anything that is waiting but
|
|
135
|
+
// hasn't started, so old text can never win over newer text. The replaced
|
|
136
|
+
// completion goes with it, since the new request will report instead.
|
|
137
|
+
_pendingText = [text copy];
|
|
138
|
+
_pendingParserId = parserId;
|
|
139
|
+
_pendingCompletion = completion;
|
|
31
140
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
try {
|
|
36
|
-
output = markdownRuntime->runGuarded(markdownWorklet, input);
|
|
37
|
-
} catch (const jsi::JSError &error) {
|
|
38
|
-
// Skip formatting, runGuarded will show the error in LogBox
|
|
39
|
-
_prevText = [NSString stringWithString:text];
|
|
40
|
-
_prevParserId = parserId;
|
|
41
|
-
_prevMarkdownRanges = @[];
|
|
42
|
-
return _prevMarkdownRanges;
|
|
141
|
+
if (_warmupScheduled) {
|
|
142
|
+
// A background loop is already running and will pick this up.
|
|
143
|
+
return;
|
|
43
144
|
}
|
|
145
|
+
_warmupScheduled = YES;
|
|
146
|
+
}
|
|
44
147
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
148
|
+
__weak MarkdownParser *weakSelf = self;
|
|
149
|
+
dispatch_async([MarkdownParser cacheWarmupQueue], ^{
|
|
150
|
+
[weakSelf drainPendingWarmups];
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
- (void)drainPendingWarmups
|
|
155
|
+
{
|
|
156
|
+
while (true) {
|
|
157
|
+
NSString *text;
|
|
158
|
+
NSNumber *parserId;
|
|
159
|
+
void (^completion)(void);
|
|
160
|
+
|
|
161
|
+
@synchronized (self) {
|
|
162
|
+
if (_pendingText == nil) {
|
|
163
|
+
_warmupScheduled = NO;
|
|
164
|
+
return;
|
|
62
165
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
166
|
+
text = _pendingText;
|
|
167
|
+
parserId = _pendingParserId;
|
|
168
|
+
completion = _pendingCompletion;
|
|
169
|
+
_pendingText = nil;
|
|
170
|
+
_pendingParserId = nil;
|
|
171
|
+
_pendingCompletion = nil;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
[self parse:text withParserId:parserId];
|
|
175
|
+
|
|
176
|
+
BOOL superseded;
|
|
177
|
+
@synchronized (self) {
|
|
178
|
+
superseded = _pendingText != nil;
|
|
179
|
+
}
|
|
180
|
+
if (completion != nil && !superseded) {
|
|
181
|
+
completion();
|
|
69
182
|
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
- (NSArray<MarkdownRange *> *)parse:(nonnull NSString *)text
|
|
187
|
+
withParserId:(nonnull NSNumber *)parserId
|
|
188
|
+
{
|
|
189
|
+
NSArray<MarkdownRange *> *cached = [self cachedRangesForText:text withParserId:parserId];
|
|
190
|
+
if (cached != nil) {
|
|
191
|
+
return cached;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Parse WITHOUT holding an Objective-C lock. Running the parser waits for the
|
|
195
|
+
// worklet runtime, and holding a lock while waiting is what froze the app
|
|
196
|
+
// (Sentry APP-EF1): a background thread held this lock and waited on the
|
|
197
|
+
// runtime, so the main thread was stuck waiting for the lock while measuring,
|
|
198
|
+
// until iOS killed the app.
|
|
199
|
+
//
|
|
200
|
+
// Two threads may end up parsing the same text at the same time. That is
|
|
201
|
+
// fine: they run one after the other and produce the same result.
|
|
202
|
+
NSArray<MarkdownRange *> *markdownRanges = [self parseUncached:text withParserId:parserId];
|
|
203
|
+
|
|
204
|
+
[self cacheMarkdownRanges:markdownRanges forText:text withParserId:parserId];
|
|
70
205
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
206
|
+
return markdownRanges;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
- (NSArray<MarkdownRange *> *)parseUncached:(nonnull NSString *)text
|
|
210
|
+
withParserId:(nonnull NSNumber *)parserId
|
|
211
|
+
{
|
|
212
|
+
const auto &markdownRuntime = expensify::livemarkdown::getMarkdownRuntime();
|
|
213
|
+
jsi::Runtime &rt = markdownRuntime->getJSIRuntime();
|
|
214
|
+
|
|
215
|
+
std::shared_ptr<SerializableWorklet> markdownWorklet;
|
|
216
|
+
try {
|
|
217
|
+
markdownWorklet = expensify::livemarkdown::getMarkdownWorklet([parserId intValue]);
|
|
218
|
+
} catch (const std::out_of_range &error) {
|
|
219
|
+
return @[];
|
|
75
220
|
}
|
|
221
|
+
|
|
222
|
+
const auto &input = jsi::String::createFromUtf8(rt, [text UTF8String]);
|
|
223
|
+
|
|
224
|
+
jsi::Value output;
|
|
225
|
+
try {
|
|
226
|
+
output = markdownRuntime->runGuarded(markdownWorklet, input);
|
|
227
|
+
} catch (const jsi::JSError &error) {
|
|
228
|
+
// Skip formatting, runGuarded will show the error in LogBox
|
|
229
|
+
return @[];
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
NSMutableArray<MarkdownRange *> *markdownRanges = [[NSMutableArray alloc] init];
|
|
233
|
+
try {
|
|
234
|
+
const auto &ranges = output.asObject(rt).asArray(rt);
|
|
235
|
+
for (size_t i = 0, n = ranges.size(rt); i < n; ++i) {
|
|
236
|
+
const auto &item = ranges.getValueAtIndex(rt, i).asObject(rt);
|
|
237
|
+
const auto &type = item.getProperty(rt, "type").asString(rt).utf8(rt);
|
|
238
|
+
const auto &start = static_cast<int>(item.getProperty(rt, "start").asNumber());
|
|
239
|
+
const auto &length = static_cast<int>(item.getProperty(rt, "length").asNumber());
|
|
240
|
+
const auto &depth = item.hasProperty(rt, "depth") ? static_cast<int>(item.getProperty(rt, "depth").asNumber()) : 1;
|
|
241
|
+
|
|
242
|
+
if (length == 0 || start + length > text.length) {
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
NSRange range = NSMakeRange(start, length);
|
|
247
|
+
MarkdownRange *markdownRange = [[MarkdownRange alloc] initWithType:@(type.c_str()) range:range depth:depth];
|
|
248
|
+
[markdownRanges addObject:markdownRange];
|
|
249
|
+
}
|
|
250
|
+
} catch (const jsi::JSError &error) {
|
|
251
|
+
RCTLogWarn(@"[react-native-live-markdown] Incorrect schema of worklet parser output: %s", error.getMessage().c_str());
|
|
252
|
+
return @[];
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return markdownRanges;
|
|
76
256
|
}
|
|
77
257
|
|
|
78
258
|
@end
|
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
#include <react/renderer/components/view/ConcreteViewShadowNode.h>
|
|
9
9
|
#include <react/renderer/core/LayoutContext.h>
|
|
10
10
|
|
|
11
|
+
#include <atomic>
|
|
12
|
+
#include <memory>
|
|
13
|
+
|
|
11
14
|
namespace facebook {
|
|
12
15
|
namespace react {
|
|
13
16
|
|
|
@@ -49,11 +52,15 @@ private:
|
|
|
49
52
|
static YogaLayoutableShadowNode &
|
|
50
53
|
shadowNodeFromContext(YGNodeConstRef yogaNode);
|
|
51
54
|
|
|
52
|
-
//
|
|
53
|
-
// that
|
|
54
|
-
//
|
|
55
|
-
// every call to applyMarkdownFormattingToTextInputState.
|
|
55
|
+
// Shared between shadow node clones, so the parser cache survives all the
|
|
56
|
+
// cloning that happens during layout instead of being thrown away on every
|
|
57
|
+
// call to applyMarkdownFormattingToTextInputState.
|
|
56
58
|
mutable std::shared_ptr<void> markdownUtils_;
|
|
59
|
+
|
|
60
|
+
// Set from any thread when a background parse finishes.
|
|
61
|
+
// overwriteMeasureCallbackConnector then marks the child's Yoga node dirty so
|
|
62
|
+
// it gets measured again with markdown. Passed along with markdownUtils_.
|
|
63
|
+
mutable std::shared_ptr<std::atomic_bool> needsRemeasure_;
|
|
57
64
|
};
|
|
58
65
|
|
|
59
66
|
} // namespace react
|
|
@@ -3,9 +3,13 @@
|
|
|
3
3
|
#include <React/RCTUtils.h>
|
|
4
4
|
#include <react/renderer/components/view/conversions.h>
|
|
5
5
|
#include <react/renderer/core/ComponentDescriptor.h>
|
|
6
|
+
#include <react/renderer/core/ConcreteState.h>
|
|
6
7
|
#include <react/renderer/textlayoutmanager/RCTAttributedTextUtils.h>
|
|
7
8
|
#include <yoga/Yoga.h>
|
|
8
9
|
|
|
10
|
+
#include <atomic>
|
|
11
|
+
#include <memory>
|
|
12
|
+
|
|
9
13
|
#include "RCTMarkdownStyle.h"
|
|
10
14
|
#include "RCTMarkdownUtils.h"
|
|
11
15
|
|
|
@@ -32,12 +36,13 @@ MarkdownTextInputDecoratorShadowNode::MarkdownTextInputDecoratorShadowNode(
|
|
|
32
36
|
ShadowNode const &sourceShadowNode,
|
|
33
37
|
ShadowNodeFragment const &fragment)
|
|
34
38
|
: ConcreteViewShadowNode(sourceShadowNode, fragment) {
|
|
35
|
-
//
|
|
36
|
-
//
|
|
37
|
-
//
|
|
39
|
+
// Copy the utils (and its parser cache) and the re-measure flag from the node
|
|
40
|
+
// we are cloning. Both have to be set before makeChildNodeMutable() below,
|
|
41
|
+
// which is what reads the flag.
|
|
38
42
|
const auto &source =
|
|
39
43
|
static_cast<const MarkdownTextInputDecoratorShadowNode &>(sourceShadowNode);
|
|
40
44
|
markdownUtils_ = source.markdownUtils_;
|
|
45
|
+
needsRemeasure_ = source.needsRemeasure_;
|
|
41
46
|
|
|
42
47
|
initialize();
|
|
43
48
|
makeChildNodeMutable();
|
|
@@ -97,6 +102,20 @@ void MarkdownTextInputDecoratorShadowNode::overwriteMeasureCallbackConnector() {
|
|
|
97
102
|
// on the decorator
|
|
98
103
|
const auto &yogaNode = &nodeWithAccessibleYogaNode->yogaNode_;
|
|
99
104
|
YGNodeSetMeasureFunc(yogaNode, yogaNodeMeasureCallbackConnector);
|
|
105
|
+
|
|
106
|
+
// If a background parse finished since the last layout, the size Yoga saved
|
|
107
|
+
// for the child was measured from plain text, and nothing marks this part of
|
|
108
|
+
// the tree dirty on its own (Yoga does not measure the decorator), so the
|
|
109
|
+
// wrong height would stay until something else changed the layout.
|
|
110
|
+
//
|
|
111
|
+
// Mark both nodes dirty by hand instead of using YGNodeMarkDirty(): the child
|
|
112
|
+
// is usually dirty already from completeClone(), which stops the flag from
|
|
113
|
+
// travelling up and would leave the decorator clean. Parents pick it up on
|
|
114
|
+
// their own when updateYogaChildren() runs.
|
|
115
|
+
if (needsRemeasure_ != nullptr && needsRemeasure_->exchange(false)) {
|
|
116
|
+
yogaNode->setDirty(true);
|
|
117
|
+
yogaNode_.setDirty(true);
|
|
118
|
+
}
|
|
100
119
|
}
|
|
101
120
|
|
|
102
121
|
void MarkdownTextInputDecoratorShadowNode::appendChild(
|
|
@@ -189,14 +208,35 @@ void MarkdownTextInputDecoratorShadowNode::applyMarkdownFormattingToTextInputSta
|
|
|
189
208
|
const auto defaultNSTextAttributes =
|
|
190
209
|
RCTNSTextAttributesFromTextAttributes(defaultTextAttributes);
|
|
191
210
|
|
|
192
|
-
//
|
|
193
|
-
//
|
|
194
|
-
//
|
|
195
|
-
// discarding the cache and forcing a full JSI re-parse each time.
|
|
211
|
+
// Create the utils once and keep it, so the parser cache survives repeated
|
|
212
|
+
// measure calls. It used to be created fresh every time, which threw the
|
|
213
|
+
// cache away and forced a full re-parse.
|
|
196
214
|
if (!markdownUtils_) {
|
|
197
215
|
RCTMarkdownUtils *freshUtils = [[RCTMarkdownUtils alloc] init];
|
|
198
216
|
markdownUtils_ = std::shared_ptr<void>(
|
|
199
217
|
(__bridge_retained void *)freshUtils, [](void *p) { CFRelease(p); });
|
|
218
|
+
needsRemeasure_ = std::make_shared<std::atomic_bool>(false);
|
|
219
|
+
|
|
220
|
+
// When the main thread does not find the ranges in the cache, it measures
|
|
221
|
+
// plain text and parses in the background instead (see RCTMarkdownUtils).
|
|
222
|
+
// That size is wrong for any style that changes how big the text is, so
|
|
223
|
+
// once the ranges arrive we force another measure rather than hope
|
|
224
|
+
// something else does. Both steps are needed: the state update schedules a
|
|
225
|
+
// new commit, and the flag makes Yoga measure again instead of reusing the
|
|
226
|
+
// old size. updateState() can be called from any thread - it only queues
|
|
227
|
+
// work on the family.
|
|
228
|
+
const auto state =
|
|
229
|
+
std::static_pointer_cast<const ::facebook::react::ConcreteState<
|
|
230
|
+
MarkdownTextInputDecoratorState>>(getState());
|
|
231
|
+
if (state != nullptr) {
|
|
232
|
+
const auto needsRemeasure = needsRemeasure_;
|
|
233
|
+
freshUtils.onAsyncFormattingReady = ^{
|
|
234
|
+
needsRemeasure->store(true);
|
|
235
|
+
// This update changes nothing; it is here only to schedule a new
|
|
236
|
+
// commit. If the family is already gone, updateState() handles that.
|
|
237
|
+
state->updateState(MarkdownTextInputDecoratorState{});
|
|
238
|
+
};
|
|
239
|
+
}
|
|
200
240
|
}
|
|
201
241
|
RCTMarkdownUtils *utils = (__bridge RCTMarkdownUtils *)markdownUtils_.get();
|
|
202
242
|
|
package/apple/RCTMarkdownUtils.h
CHANGED
|
@@ -8,13 +8,23 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
8
8
|
@property (nonatomic) RCTMarkdownStyle *markdownStyle;
|
|
9
9
|
@property (nonatomic) NSNumber *parserId;
|
|
10
10
|
|
|
11
|
+
// Called on a background queue once a background parse has finished and the
|
|
12
|
+
// ranges are cached. The owner should mark the layout as out of date so the
|
|
13
|
+
// text is measured again, this time with markdown. Otherwise the size measured
|
|
14
|
+
// from plain text stays until something else triggers a new layout.
|
|
15
|
+
@property (atomic, copy, nullable) void (^onAsyncFormattingReady)(void);
|
|
16
|
+
|
|
11
17
|
- (void)applyMarkdownFormatting:(nonnull NSMutableAttributedString *)attributedString
|
|
12
18
|
withDefaultTextAttributes:(nonnull NSDictionary<NSAttributedStringKey, id> *)defaultTextAttributes;
|
|
13
19
|
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
20
|
+
// Sets the style/parser and formats using the values passed in. Use this from
|
|
21
|
+
// the shadow node measure path, where one instance is shared between clones and
|
|
22
|
+
// several Fabric threads can call it at the same time.
|
|
23
|
+
//
|
|
24
|
+
// On the main thread this only uses ranges that are already cached and never
|
|
25
|
+
// runs the parser. If they are not there, the text is left unformatted for this
|
|
26
|
+
// pass and parsed in the background, then `onAsyncFormattingReady` is called so
|
|
27
|
+
// the node can be measured again (see Sentry APP-EF1).
|
|
18
28
|
- (void)applyMarkdownFormatting:(nonnull NSMutableAttributedString *)attributedString
|
|
19
29
|
withDefaultTextAttributes:(nonnull NSDictionary<NSAttributedStringKey, id> *)defaultTextAttributes
|
|
20
30
|
markdownStyle:(nonnull RCTMarkdownStyle *)markdownStyle
|
|
@@ -39,17 +39,54 @@
|
|
|
39
39
|
markdownStyle:(nonnull RCTMarkdownStyle *)markdownStyle
|
|
40
40
|
parserId:(nonnull NSNumber *)parserId
|
|
41
41
|
{
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
//
|
|
42
|
+
// The lock only covers the two shared fields. Holding it while parsing and
|
|
43
|
+
// formatting froze the app (Sentry APP-EF1): parsing waits for the worklet
|
|
44
|
+
// runtime, so a background thread could hold this lock while waiting, leaving
|
|
45
|
+
// the main thread stuck on the lock while measuring. The formatting below
|
|
46
|
+
// uses the arguments instead of the fields, so every call still gets a
|
|
47
|
+
// matching style and parserId.
|
|
48
48
|
@synchronized (self) {
|
|
49
49
|
_markdownStyle = markdownStyle;
|
|
50
50
|
_parserId = parserId;
|
|
51
|
-
[self applyMarkdownFormatting:attributedString withDefaultTextAttributes:defaultTextAttributes];
|
|
52
51
|
}
|
|
52
|
+
|
|
53
|
+
NSString *text = attributedString.string;
|
|
54
|
+
NSArray<MarkdownRange *> *markdownRanges = [_markdownParser cachedRangesForText:text withParserId:parserId];
|
|
55
|
+
|
|
56
|
+
if (markdownRanges == nil) {
|
|
57
|
+
if ([NSThread isMainThread]) {
|
|
58
|
+
// Never run the parser from the main thread while measuring. If the
|
|
59
|
+
// worklet runtime is busy, the wait can pass the ~2s limit and iOS kills
|
|
60
|
+
// the app (Sentry APP-EF1). Parse in the background instead and measure
|
|
61
|
+
// plain text for now; `onAsyncFormattingReady` asks for a new measure
|
|
62
|
+
// once the ranges are ready, so the wrong sizes (h1 font, code font,
|
|
63
|
+
// blockquote indent, emoji) do not stay. This rarely happens - text
|
|
64
|
+
// changes are usually parsed on a background thread first, so the main
|
|
65
|
+
// thread finds the ranges in the cache.
|
|
66
|
+
__weak RCTMarkdownUtils *weakSelf = self;
|
|
67
|
+
[_markdownParser warmCacheAsyncForText:text
|
|
68
|
+
withParserId:parserId
|
|
69
|
+
completion:^{
|
|
70
|
+
// This only runs for the newest text, so it can't loop forever: the new
|
|
71
|
+
// measure finds the ranges in the cache (or the text changed again, and
|
|
72
|
+
// then a new measure was needed anyway).
|
|
73
|
+
void (^handler)(void) = weakSelf.onAsyncFormattingReady;
|
|
74
|
+
if (handler != nil) {
|
|
75
|
+
handler();
|
|
76
|
+
}
|
|
77
|
+
}];
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// Background threads can parse right here: the ~2s limit only applies to
|
|
81
|
+
// the main thread, and parsing no longer holds a lock the main thread
|
|
82
|
+
// waits on.
|
|
83
|
+
markdownRanges = [_markdownParser parse:text withParserId:parserId];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
[_markdownFormatter formatAttributedString:attributedString
|
|
87
|
+
withDefaultTextAttributes:defaultTextAttributes
|
|
88
|
+
withMarkdownRanges:markdownRanges
|
|
89
|
+
withMarkdownStyle:markdownStyle];
|
|
53
90
|
}
|
|
54
91
|
|
|
55
92
|
@end
|
|
@@ -233,8 +233,16 @@ function parseTreeToTextAndRanges(tree) {
|
|
|
233
233
|
dfs(tree);
|
|
234
234
|
return [text, ranges];
|
|
235
235
|
}
|
|
236
|
-
|
|
237
|
-
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Parses Markdown text into formatting ranges using ExpensiMark.
|
|
239
|
+
*
|
|
240
|
+
* @param markdown - The raw Markdown string to parse.
|
|
241
|
+
* @param maxLength - Maximum input length to parse; longer input returns `[]` without parsing. Defaults to 4000.
|
|
242
|
+
* @returns The list of formatting ranges, or `[]` if input exceeds `maxLength` or fails to parse.
|
|
243
|
+
*/
|
|
244
|
+
function parseExpensiMark(markdown, maxLength = MAX_PARSABLE_LENGTH) {
|
|
245
|
+
if (markdown.length > maxLength) {
|
|
238
246
|
return [];
|
|
239
247
|
}
|
|
240
248
|
const html = parseMarkdownToHTML(markdown);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Object","defineProperty","exports","value","default","_reactNative","require","_expensifyCommon","_utils","_htmlEntities","_rangeUtils","isWeb","Platform","OS","isJest","global","process","env","JEST_WORKER_ID","__DEV__","decode","__workletHash","undefined","Error","MAX_PARSABLE_LENGTH","parseMarkdownToHTML","markdown","parser","ExpensiMark","html","replace","shouldKeepRawInput","parseHTMLToTokens","tokens","left","open","indexOf","length","push","substring","close","parseTokensToTree","stack","tag","children","forEach","type","payload","text","unescapeText","top","startsWith","child","pop","endsWith","unclosedTags","slice","map","item","join","parseTreeToTextAndRanges","tree","processChildren","node","dfs","appendSyntax","syntax","addChildrenWithStyle","start","end","ranges","curr","_","lb","content","match","rawHref","href","isLabeledLink","dataRawHref","matchString","src","alt","hasAlt","rawLink","linkString","parseExpensiMark","console","error","JSON","stringify","markdownRanges","sortRanges","rangesToExclude","getRangesToExcludeFormatting","excludeRangeTypesFromFormatting","groupedRanges","groupRanges","_default"],"sourceRoot":"../../src","sources":["parseExpensiMark.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Object","defineProperty","exports","value","default","_reactNative","require","_expensifyCommon","_utils","_htmlEntities","_rangeUtils","isWeb","Platform","OS","isJest","global","process","env","JEST_WORKER_ID","__DEV__","decode","__workletHash","undefined","Error","MAX_PARSABLE_LENGTH","parseMarkdownToHTML","markdown","parser","ExpensiMark","html","replace","shouldKeepRawInput","parseHTMLToTokens","tokens","left","open","indexOf","length","push","substring","close","parseTokensToTree","stack","tag","children","forEach","type","payload","text","unescapeText","top","startsWith","child","pop","endsWith","unclosedTags","slice","map","item","join","parseTreeToTextAndRanges","tree","processChildren","node","dfs","appendSyntax","syntax","addChildrenWithStyle","start","end","ranges","curr","_","lb","content","match","rawHref","href","isLabeledLink","dataRawHref","matchString","src","alt","hasAlt","rawLink","linkString","parseExpensiMark","maxLength","console","error","JSON","stringify","markdownRanges","sortRanges","rangesToExclude","getRangesToExcludeFormatting","excludeRangeTypesFromFormatting","groupedRanges","groupRanges","_default"],"sourceRoot":"../../src","sources":["parseExpensiMark.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -229,8 +229,16 @@ function parseTreeToTextAndRanges(tree) {
|
|
|
229
229
|
dfs(tree);
|
|
230
230
|
return [text, ranges];
|
|
231
231
|
}
|
|
232
|
-
|
|
233
|
-
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Parses Markdown text into formatting ranges using ExpensiMark.
|
|
235
|
+
*
|
|
236
|
+
* @param markdown - The raw Markdown string to parse.
|
|
237
|
+
* @param maxLength - Maximum input length to parse; longer input returns `[]` without parsing. Defaults to 4000.
|
|
238
|
+
* @returns The list of formatting ranges, or `[]` if input exceeds `maxLength` or fails to parse.
|
|
239
|
+
*/
|
|
240
|
+
function parseExpensiMark(markdown, maxLength = MAX_PARSABLE_LENGTH) {
|
|
241
|
+
if (markdown.length > maxLength) {
|
|
234
242
|
return [];
|
|
235
243
|
}
|
|
236
244
|
const html = parseMarkdownToHTML(markdown);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","ExpensiMark","unescapeText","decode","groupRanges","sortRanges","excludeRangeTypesFromFormatting","getRangesToExcludeFormatting","isWeb","OS","isJest","global","process","env","JEST_WORKER_ID","__DEV__","__workletHash","undefined","Error","MAX_PARSABLE_LENGTH","parseMarkdownToHTML","markdown","parser","html","replace","shouldKeepRawInput","parseHTMLToTokens","tokens","left","open","indexOf","length","push","substring","close","parseTokensToTree","stack","tag","children","forEach","type","payload","text","top","startsWith","child","pop","endsWith","unclosedTags","slice","map","item","join","parseTreeToTextAndRanges","tree","processChildren","node","dfs","appendSyntax","syntax","addChildrenWithStyle","start","end","ranges","curr","_","lb","content","match","rawHref","href","isLabeledLink","dataRawHref","matchString","src","alt","hasAlt","rawLink","linkString","parseExpensiMark","console","error","JSON","stringify","markdownRanges","rangesToExclude","groupedRanges"],"sourceRoot":"../../src","sources":["parseExpensiMark.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Platform","ExpensiMark","unescapeText","decode","groupRanges","sortRanges","excludeRangeTypesFromFormatting","getRangesToExcludeFormatting","isWeb","OS","isJest","global","process","env","JEST_WORKER_ID","__DEV__","__workletHash","undefined","Error","MAX_PARSABLE_LENGTH","parseMarkdownToHTML","markdown","parser","html","replace","shouldKeepRawInput","parseHTMLToTokens","tokens","left","open","indexOf","length","push","substring","close","parseTokensToTree","stack","tag","children","forEach","type","payload","text","top","startsWith","child","pop","endsWith","unclosedTags","slice","map","item","join","parseTreeToTextAndRanges","tree","processChildren","node","dfs","appendSyntax","syntax","addChildrenWithStyle","start","end","ranges","curr","_","lb","content","match","rawHref","href","isLabeledLink","dataRawHref","matchString","src","alt","hasAlt","rawLink","linkString","parseExpensiMark","maxLength","console","error","JSON","stringify","markdownRanges","rangesToExclude","groupedRanges"],"sourceRoot":"../../src","sources":["parseExpensiMark.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { MarkdownRange } from './commonTypes';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Parses Markdown text into formatting ranges using ExpensiMark.
|
|
4
|
+
*
|
|
5
|
+
* @param markdown - The raw Markdown string to parse.
|
|
6
|
+
* @param maxLength - Maximum input length to parse; longer input returns `[]` without parsing. Defaults to 4000.
|
|
7
|
+
* @returns The list of formatting ranges, or `[]` if input exceeds `maxLength` or fails to parse.
|
|
8
|
+
*/
|
|
9
|
+
declare function parseExpensiMark(markdown: string, maxLength?: number): MarkdownRange[];
|
|
3
10
|
export default parseExpensiMark;
|
|
4
11
|
//# sourceMappingURL=parseExpensiMark.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseExpensiMark.d.ts","sourceRoot":"","sources":["../../../src/parseExpensiMark.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,aAAa,EAAe,MAAM,eAAe,CAAC;AAwO/D,iBAAS,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"parseExpensiMark.d.ts","sourceRoot":"","sources":["../../../src/parseExpensiMark.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,aAAa,EAAe,MAAM,eAAe,CAAC;AAwO/D;;;;;;GAMG;AACH,iBAAS,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,SAAsB,GAAG,aAAa,EAAE,CA0B5F;AAED,eAAe,gBAAgB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expensify/react-native-live-markdown",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.337",
|
|
4
4
|
"description": "Drop-in replacement for React Native's TextInput component with Markdown formatting.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"eslint-plugin-promise": "^6.1.1",
|
|
93
93
|
"eslint-plugin-react-native": "^5.0.0",
|
|
94
94
|
"eslint-plugin-tsdoc": "^0.2.17",
|
|
95
|
-
"expensify-common": "2.0.
|
|
95
|
+
"expensify-common": "2.0.201",
|
|
96
96
|
"jest": "^29.6.3",
|
|
97
97
|
"jest-environment-jsdom": "^29.7.0",
|
|
98
98
|
"nodemon": "^3.1.3",
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"typescript": "^5.8.3"
|
|
110
110
|
},
|
|
111
111
|
"peerDependencies": {
|
|
112
|
-
"expensify-common": ">=2.0.
|
|
112
|
+
"expensify-common": ">=2.0.201",
|
|
113
113
|
"react": "*",
|
|
114
114
|
"react-native": "*",
|
|
115
115
|
"react-native-worklets": ">=0.7.0"
|
package/src/parseExpensiMark.ts
CHANGED
|
@@ -238,8 +238,15 @@ function parseTreeToTextAndRanges(tree: StackItem): [string, MarkdownRange[]] {
|
|
|
238
238
|
return [text, ranges];
|
|
239
239
|
}
|
|
240
240
|
|
|
241
|
-
|
|
242
|
-
|
|
241
|
+
/**
|
|
242
|
+
* Parses Markdown text into formatting ranges using ExpensiMark.
|
|
243
|
+
*
|
|
244
|
+
* @param markdown - The raw Markdown string to parse.
|
|
245
|
+
* @param maxLength - Maximum input length to parse; longer input returns `[]` without parsing. Defaults to 4000.
|
|
246
|
+
* @returns The list of formatting ranges, or `[]` if input exceeds `maxLength` or fails to parse.
|
|
247
|
+
*/
|
|
248
|
+
function parseExpensiMark(markdown: string, maxLength = MAX_PARSABLE_LENGTH): MarkdownRange[] {
|
|
249
|
+
if (markdown.length > maxLength) {
|
|
243
250
|
return [];
|
|
244
251
|
}
|
|
245
252
|
const html = parseMarkdownToHTML(markdown);
|