react-native-jet-markdown 0.2.0-beta.7
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/JetMarkdown.podspec +42 -0
- package/LICENSE +20 -0
- package/README.md +247 -0
- package/android/CMakeLists.txt +52 -0
- package/android/build.gradle +55 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/cpp/JniBindings.cpp +243 -0
- package/android/src/main/java/com/jetmarkdown/JetMarkdownNative.kt +114 -0
- package/android/src/main/java/com/jetmarkdown/JetMarkdownPackage.kt +22 -0
- package/android/src/main/java/com/jetmarkdown/JetMarkdownView.kt +235 -0
- package/android/src/main/java/com/jetmarkdown/JetMarkdownViewManager.kt +75 -0
- package/android/src/main/java/com/jetmarkdown/editor/EditorSpans.kt +217 -0
- package/android/src/main/java/com/jetmarkdown/editor/JetMarkdownEditorManager.kt +224 -0
- package/android/src/main/java/com/jetmarkdown/editor/JetMarkdownEditorView.kt +1736 -0
- package/android/src/main/java/com/jetmarkdown/measure/MarkdownMeasurer.kt +54 -0
- package/android/src/main/java/com/jetmarkdown/parser/AstDecoder.kt +59 -0
- package/android/src/main/java/com/jetmarkdown/parser/MdNode.kt +43 -0
- package/android/src/main/java/com/jetmarkdown/render/ContentCache.kt +53 -0
- package/android/src/main/java/com/jetmarkdown/render/RenderedContent.kt +318 -0
- package/android/src/main/java/com/jetmarkdown/render/SpannableRenderer.kt +658 -0
- package/android/src/main/java/com/jetmarkdown/render/spans/ChipSpan.kt +17 -0
- package/android/src/main/java/com/jetmarkdown/render/spans/InteractiveSpans.kt +11 -0
- package/android/src/main/java/com/jetmarkdown/render/spans/MarkdownLineHeightSpan.kt +59 -0
- package/android/src/main/java/com/jetmarkdown/render/spans/RunSpan.kt +40 -0
- package/android/src/main/java/com/jetmarkdown/style/Fonts.kt +34 -0
- package/android/src/main/java/com/jetmarkdown/style/LayoutStyleSpec.kt +71 -0
- package/android/src/main/java/com/jetmarkdown/style/PlatformColorResolver.kt +77 -0
- package/android/src/main/java/com/jetmarkdown/style/StyleConfig.kt +80 -0
- package/android/src/main/java/com/jetmarkdown/style/TextStyleSpec.kt +61 -0
- package/android/src/main/java/com/jetmarkdown/views/BlockStackView.kt +292 -0
- package/android/src/main/java/com/jetmarkdown/views/BlockTextView.kt +378 -0
- package/android/src/main/java/com/jetmarkdown/views/BoxDrawing.kt +50 -0
- package/android/src/main/java/com/jetmarkdown/views/MarkdownHost.kt +12 -0
- package/android/src/main/java/com/jetmarkdown/views/MarkdownImageView.kt +113 -0
- package/android/src/main/java/com/jetmarkdown/views/NestedHorizontalScrollView.kt +87 -0
- package/android/src/main/java/com/jetmarkdown/views/TableBlockView.kt +139 -0
- package/cpp/core/Ast.h +85 -0
- package/cpp/core/AstJson.cpp +129 -0
- package/cpp/core/AstJson.h +12 -0
- package/cpp/core/AstSerializer.cpp +40 -0
- package/cpp/core/AstSerializer.h +21 -0
- package/cpp/core/AstToMarkdown.cpp +549 -0
- package/cpp/core/AstToMarkdown.h +16 -0
- package/cpp/core/EditorRuns.cpp +640 -0
- package/cpp/core/EditorRuns.h +94 -0
- package/cpp/core/EditorText.cpp +15 -0
- package/cpp/core/EditorText.h +18 -0
- package/cpp/core/InlineExtensions.cpp +305 -0
- package/cpp/core/InlineExtensions.h +17 -0
- package/cpp/core/Parser.cpp +470 -0
- package/cpp/core/Parser.h +16 -0
- package/cpp/core/Preprocess.cpp +181 -0
- package/cpp/core/Preprocess.h +14 -0
- package/cpp/md4c/LICENSE +22 -0
- package/cpp/md4c/VERSION +1 -0
- package/cpp/md4c/md4c.c +6462 -0
- package/cpp/md4c/md4c.h +407 -0
- package/cpp/react/JetMarkdownEditorShadowNode.cpp +54 -0
- package/cpp/react/JetMarkdownEditorShadowNode.h +55 -0
- package/cpp/react/JetMarkdownEditorState.h +35 -0
- package/cpp/react/JetMarkdownMeasurer.cpp +32 -0
- package/cpp/react/JetMarkdownMeasurer.h +41 -0
- package/cpp/react/JetMarkdownShadowNode.cpp +100 -0
- package/cpp/react/JetMarkdownShadowNode.h +53 -0
- package/cpp/react/JetMarkdownState.h +52 -0
- package/cpp/react/override/react/renderer/components/JetMarkdownViewSpec/ComponentDescriptors.h +21 -0
- package/cpp/tests/parser_tests.cpp +662 -0
- package/cpp/tests/run_tests.sh +25 -0
- package/ios/JetMarkdownView.h +14 -0
- package/ios/JetMarkdownView.mm +468 -0
- package/ios/editor/JetMarkdownEditor.h +12 -0
- package/ios/editor/JetMarkdownEditor.mm +2002 -0
- package/ios/measure/JMDMarkdownMeasurer.h +22 -0
- package/ios/measure/JMDMarkdownMeasurer.mm +38 -0
- package/ios/render/JMDBlock.h +97 -0
- package/ios/render/JMDBlock.m +28 -0
- package/ios/render/JMDBlockRenderer.h +17 -0
- package/ios/render/JMDBlockRenderer.mm +852 -0
- package/ios/render/JMDContentCache.h +17 -0
- package/ios/render/JMDContentCache.mm +42 -0
- package/ios/render/JMDRenderedContent.h +35 -0
- package/ios/render/JMDRenderedContent.mm +274 -0
- package/ios/style/JMDFontScale.h +33 -0
- package/ios/style/JMDLayoutStyle.h +37 -0
- package/ios/style/JMDLayoutStyle.mm +68 -0
- package/ios/style/JMDStyleConfig.h +39 -0
- package/ios/style/JMDStyleConfig.mm +111 -0
- package/ios/style/JMDTextStyle.h +25 -0
- package/ios/style/JMDTextStyle.mm +68 -0
- package/ios/views/JMDBlockStackView.h +18 -0
- package/ios/views/JMDBlockStackView.m +97 -0
- package/ios/views/JMDBlockTextView.h +24 -0
- package/ios/views/JMDBlockTextView.m +340 -0
- package/ios/views/JMDBoxViews.h +33 -0
- package/ios/views/JMDBoxViews.m +292 -0
- package/ios/views/JMDImageView.h +19 -0
- package/ios/views/JMDImageView.m +68 -0
- package/ios/views/JMDMarkdownHost.h +16 -0
- package/ios/views/JMDTableView.h +16 -0
- package/ios/views/JMDTableView.m +172 -0
- package/lib/module/JetMarkdownEditor.js +85 -0
- package/lib/module/JetMarkdownEditor.js.map +1 -0
- package/lib/module/JetMarkdownEditor.native.js +244 -0
- package/lib/module/JetMarkdownEditor.native.js.map +1 -0
- package/lib/module/JetMarkdownEditorNativeComponent.ts +173 -0
- package/lib/module/JetMarkdownView.js +19 -0
- package/lib/module/JetMarkdownView.js.map +1 -0
- package/lib/module/JetMarkdownView.native.js +44 -0
- package/lib/module/JetMarkdownView.native.js.map +1 -0
- package/lib/module/JetMarkdownViewNativeComponent.ts +35 -0
- package/lib/module/defaultStyles.js +122 -0
- package/lib/module/defaultStyles.js.map +1 -0
- package/lib/module/index.js +9 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/serializeStyles.js +259 -0
- package/lib/module/serializeStyles.js.map +1 -0
- package/lib/module/types.js +4 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/useJetMarkdownEditor.js +41 -0
- package/lib/module/useJetMarkdownEditor.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/JetMarkdownEditor.d.ts +6 -0
- package/lib/typescript/src/JetMarkdownEditor.d.ts.map +1 -0
- package/lib/typescript/src/JetMarkdownEditor.native.d.ts +6 -0
- package/lib/typescript/src/JetMarkdownEditor.native.d.ts.map +1 -0
- package/lib/typescript/src/JetMarkdownEditorNativeComponent.d.ts +105 -0
- package/lib/typescript/src/JetMarkdownEditorNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/JetMarkdownView.d.ts +3 -0
- package/lib/typescript/src/JetMarkdownView.d.ts.map +1 -0
- package/lib/typescript/src/JetMarkdownView.native.d.ts +3 -0
- package/lib/typescript/src/JetMarkdownView.native.d.ts.map +1 -0
- package/lib/typescript/src/JetMarkdownViewNativeComponent.d.ts +28 -0
- package/lib/typescript/src/JetMarkdownViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/defaultStyles.d.ts +20 -0
- package/lib/typescript/src/defaultStyles.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +7 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/serializeStyles.d.ts +34 -0
- package/lib/typescript/src/serializeStyles.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +352 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/useJetMarkdownEditor.d.ts +36 -0
- package/lib/typescript/src/useJetMarkdownEditor.d.ts.map +1 -0
- package/package.json +150 -0
- package/react-native.config.js +11 -0
- package/src/JetMarkdownEditor.native.tsx +301 -0
- package/src/JetMarkdownEditor.tsx +90 -0
- package/src/JetMarkdownEditorNativeComponent.ts +173 -0
- package/src/JetMarkdownView.native.tsx +67 -0
- package/src/JetMarkdownView.tsx +16 -0
- package/src/JetMarkdownViewNativeComponent.ts +35 -0
- package/src/defaultStyles.ts +102 -0
- package/src/index.tsx +34 -0
- package/src/serializeStyles.ts +369 -0
- package/src/types.ts +438 -0
- package/src/useJetMarkdownEditor.ts +50 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
#import <UIKit/UIKit.h>
|
|
3
|
+
|
|
4
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
5
|
+
|
|
6
|
+
/// Thread-safe measurement entry point used by the Fabric shadow node.
|
|
7
|
+
/// Shares the content cache with the mounted view, so measure work is
|
|
8
|
+
/// reused at mount time.
|
|
9
|
+
@interface JMDMarkdownMeasurer : NSObject
|
|
10
|
+
|
|
11
|
+
+ (CGFloat)measureMarkdown:(NSString *)markdown
|
|
12
|
+
stylesJson:(NSString *)stylesJson
|
|
13
|
+
imagesJson:(NSString *)imagesJson
|
|
14
|
+
maxWidth:(CGFloat)maxWidth
|
|
15
|
+
fontScale:(CGFloat)fontScale;
|
|
16
|
+
|
|
17
|
+
/// {"url":[w,h],...} -> url -> @[w, h]; nil for empty input.
|
|
18
|
+
+ (nullable NSDictionary<NSString *, NSArray<NSNumber *> *> *)parseImageSizes:(NSString *)json;
|
|
19
|
+
|
|
20
|
+
@end
|
|
21
|
+
|
|
22
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#import "JMDMarkdownMeasurer.h"
|
|
2
|
+
|
|
3
|
+
#import "../render/JMDContentCache.h"
|
|
4
|
+
#import "../style/JMDStyleConfig.h"
|
|
5
|
+
|
|
6
|
+
@implementation JMDMarkdownMeasurer
|
|
7
|
+
|
|
8
|
+
+ (CGFloat)measureMarkdown:(NSString *)markdown
|
|
9
|
+
stylesJson:(NSString *)stylesJson
|
|
10
|
+
imagesJson:(NSString *)imagesJson
|
|
11
|
+
maxWidth:(CGFloat)maxWidth
|
|
12
|
+
fontScale:(CGFloat)fontScale {
|
|
13
|
+
JMDStyleConfig *styles = [JMDStyleConfig configWithJson:stylesJson];
|
|
14
|
+
const CGFloat contentWidth = maxWidth - styles.paddingLeft - styles.paddingRight;
|
|
15
|
+
if (contentWidth <= 0 || markdown.length == 0) {
|
|
16
|
+
return 0;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
JMDRenderedContent *content = [JMDContentCache contentForMarkdown:markdown
|
|
20
|
+
stylesJson:stylesJson
|
|
21
|
+
fontScale:fontScale];
|
|
22
|
+
return [content layoutForWidth:contentWidth
|
|
23
|
+
imageSizes:[self parseImageSizes:imagesJson]].totalHeight;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
+ (nullable NSDictionary<NSString *, NSArray<NSNumber *> *> *)parseImageSizes:(NSString *)json {
|
|
27
|
+
if (json.length == 0 || [json isEqualToString:@"{}"]) {
|
|
28
|
+
return nil;
|
|
29
|
+
}
|
|
30
|
+
NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding];
|
|
31
|
+
if (data == nil) {
|
|
32
|
+
return nil;
|
|
33
|
+
}
|
|
34
|
+
id parsed = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
|
|
35
|
+
return [parsed isKindOfClass:[NSDictionary class]] ? parsed : nil;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#import <UIKit/UIKit.h>
|
|
2
|
+
|
|
3
|
+
#import "../style/JMDLayoutStyle.h"
|
|
4
|
+
|
|
5
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
6
|
+
|
|
7
|
+
typedef NS_ENUM(NSInteger, JMDBlockKind) {
|
|
8
|
+
JMDBlockKindText,
|
|
9
|
+
JMDBlockKindCode,
|
|
10
|
+
JMDBlockKindQuote,
|
|
11
|
+
JMDBlockKindList,
|
|
12
|
+
JMDBlockKindDivider,
|
|
13
|
+
JMDBlockKindImage,
|
|
14
|
+
JMDBlockKindTable,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
@class JMDBlock;
|
|
18
|
+
|
|
19
|
+
/// Custom attributed-string keys carrying interaction data.
|
|
20
|
+
FOUNDATION_EXPORT NSAttributedStringKey const JMDLinkURLAttributeName;
|
|
21
|
+
FOUNDATION_EXPORT NSAttributedStringKey const JMDSpoilerIDAttributeName;
|
|
22
|
+
/// Drawn run background ("chip"): value is an JMDRunBackground. Replaces
|
|
23
|
+
/// NSBackgroundColor, whose rect misaligns under custom line heights.
|
|
24
|
+
FOUNDATION_EXPORT NSAttributedStringKey const JMDRunBackgroundAttributeName;
|
|
25
|
+
|
|
26
|
+
/// Geometry + fill for a drawn run background.
|
|
27
|
+
@interface JMDRunBackground : NSObject
|
|
28
|
+
@property (nonatomic, strong) UIColor *color;
|
|
29
|
+
@property (nonatomic, assign) CGFloat radius;
|
|
30
|
+
@property (nonatomic, assign) BOOL continuousCurve;
|
|
31
|
+
@property (nonatomic, assign) CGFloat padLeft;
|
|
32
|
+
@property (nonatomic, assign) CGFloat padRight;
|
|
33
|
+
@end
|
|
34
|
+
|
|
35
|
+
@interface JMDListRow : NSObject
|
|
36
|
+
@property (nonatomic, strong) NSAttributedString *marker;
|
|
37
|
+
@property (nonatomic, strong) NSArray<JMDBlock *> *content;
|
|
38
|
+
@end
|
|
39
|
+
|
|
40
|
+
@interface JMDTableRow : NSObject
|
|
41
|
+
@property (nonatomic, assign) BOOL isHeader;
|
|
42
|
+
@property (nonatomic, strong) NSArray<NSAttributedString *> *cells;
|
|
43
|
+
@end
|
|
44
|
+
|
|
45
|
+
/// One renderable block; blocks nest (quote children, list row content).
|
|
46
|
+
@interface JMDBlock : NSObject
|
|
47
|
+
@property (nonatomic, assign) JMDBlockKind kind;
|
|
48
|
+
@property (nonatomic, strong, nullable) NSAttributedString *attributedText;
|
|
49
|
+
// Text blocks: spoiler cover styling.
|
|
50
|
+
@property (nonatomic, strong, nullable) UIColor *spoilerColor;
|
|
51
|
+
@property (nonatomic, assign) CGFloat spoilerRadius;
|
|
52
|
+
@property (nonatomic, assign) BOOL spoilerContinuous;
|
|
53
|
+
@property (nonatomic, strong, nullable) JMDLayoutStyle *layoutStyle;
|
|
54
|
+
@property (nonatomic, strong, nullable) NSArray<JMDBlock *> *children;
|
|
55
|
+
@property (nonatomic, strong, nullable) NSArray<JMDListRow *> *rows;
|
|
56
|
+
@property (nonatomic, assign) CGFloat listMarginLeft;
|
|
57
|
+
@property (nonatomic, assign) CGFloat markerWidth;
|
|
58
|
+
@property (nonatomic, assign) CGFloat markerMarginLeft;
|
|
59
|
+
@property (nonatomic, strong, nullable) UIColor *dividerColor;
|
|
60
|
+
@property (nonatomic, assign) CGFloat dividerThickness;
|
|
61
|
+
|
|
62
|
+
// Table blocks. Header/body row styles layer tableHeaderRow/tableBodyRow
|
|
63
|
+
// over the shared tableRow base; header cells fall back to the body cell
|
|
64
|
+
// padding key-by-key.
|
|
65
|
+
@property (nonatomic, strong, nullable) NSArray<JMDTableRow *> *tableRows;
|
|
66
|
+
@property (nonatomic, strong, nullable) JMDLayoutStyle *headerRowStyle;
|
|
67
|
+
@property (nonatomic, strong, nullable) JMDLayoutStyle *bodyRowStyle;
|
|
68
|
+
@property (nonatomic, assign) UIEdgeInsets cellPadding;
|
|
69
|
+
@property (nonatomic, assign) UIEdgeInsets headerCellPadding;
|
|
70
|
+
@property (nonatomic, assign) CGFloat minColumnWidth;
|
|
71
|
+
@property (nonatomic, assign) CGFloat maxColumnWidth;
|
|
72
|
+
|
|
73
|
+
// Image blocks.
|
|
74
|
+
@property (nonatomic, copy, nullable) NSString *imageUrl;
|
|
75
|
+
@property (nonatomic, strong, nullable) UIColor *imageBackground;
|
|
76
|
+
@property (nonatomic, assign) CGFloat imageBorderRadius;
|
|
77
|
+
@property (nonatomic, assign) CGFloat imageHeight;
|
|
78
|
+
@property (nonatomic, assign) CGFloat imageMaxHeight;
|
|
79
|
+
@property (nonatomic, assign) CGFloat imagePlaceholder;
|
|
80
|
+
@end
|
|
81
|
+
|
|
82
|
+
/// Layout results for one block at one width.
|
|
83
|
+
@interface JMDMeasuredBlock : NSObject
|
|
84
|
+
@property (nonatomic, strong) JMDBlock *block;
|
|
85
|
+
@property (nonatomic, assign) CGFloat height;
|
|
86
|
+
/// Code: unwrapped content width for the scroller; Text: wrapped text height.
|
|
87
|
+
@property (nonatomic, assign) CGFloat contentWidth;
|
|
88
|
+
@property (nonatomic, assign) CGFloat textHeight;
|
|
89
|
+
@property (nonatomic, strong) NSArray<JMDMeasuredBlock *> *children;
|
|
90
|
+
@property (nonatomic, strong) NSArray<NSNumber *> *markerHeights;
|
|
91
|
+
@property (nonatomic, strong) NSArray<NSArray<JMDMeasuredBlock *> *> *rowContents;
|
|
92
|
+
/// Tables: resolved column widths and per-row heights.
|
|
93
|
+
@property (nonatomic, strong) NSArray<NSNumber *> *columnWidths;
|
|
94
|
+
@property (nonatomic, strong) NSArray<NSNumber *> *rowHeights;
|
|
95
|
+
@end
|
|
96
|
+
|
|
97
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#import "JMDBlock.h"
|
|
2
|
+
|
|
3
|
+
@implementation JMDRunBackground
|
|
4
|
+
@end
|
|
5
|
+
|
|
6
|
+
@implementation JMDListRow
|
|
7
|
+
@end
|
|
8
|
+
|
|
9
|
+
@implementation JMDTableRow
|
|
10
|
+
@end
|
|
11
|
+
|
|
12
|
+
@implementation JMDBlock
|
|
13
|
+
@end
|
|
14
|
+
|
|
15
|
+
@implementation JMDMeasuredBlock
|
|
16
|
+
|
|
17
|
+
- (instancetype)init {
|
|
18
|
+
if (self = [super init]) {
|
|
19
|
+
_children = @[];
|
|
20
|
+
_markerHeights = @[];
|
|
21
|
+
_rowContents = @[];
|
|
22
|
+
_columnWidths = @[];
|
|
23
|
+
_rowHeights = @[];
|
|
24
|
+
}
|
|
25
|
+
return self;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
|
|
3
|
+
#import "../style/JMDStyleConfig.h"
|
|
4
|
+
#import "JMDBlock.h"
|
|
5
|
+
|
|
6
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
7
|
+
|
|
8
|
+
/// AST -> renderable block tree (attribute-stack inline rendering).
|
|
9
|
+
@interface JMDBlockRenderer : NSObject
|
|
10
|
+
|
|
11
|
+
+ (NSArray<JMDBlock *> *)renderMarkdown:(NSString *)markdown
|
|
12
|
+
styles:(JMDStyleConfig *)styles
|
|
13
|
+
fontScale:(CGFloat)fontScale;
|
|
14
|
+
|
|
15
|
+
@end
|
|
16
|
+
|
|
17
|
+
NS_ASSUME_NONNULL_END
|