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.
Files changed (157) hide show
  1. package/JetMarkdown.podspec +42 -0
  2. package/LICENSE +20 -0
  3. package/README.md +247 -0
  4. package/android/CMakeLists.txt +52 -0
  5. package/android/build.gradle +55 -0
  6. package/android/src/main/AndroidManifest.xml +2 -0
  7. package/android/src/main/cpp/JniBindings.cpp +243 -0
  8. package/android/src/main/java/com/jetmarkdown/JetMarkdownNative.kt +114 -0
  9. package/android/src/main/java/com/jetmarkdown/JetMarkdownPackage.kt +22 -0
  10. package/android/src/main/java/com/jetmarkdown/JetMarkdownView.kt +235 -0
  11. package/android/src/main/java/com/jetmarkdown/JetMarkdownViewManager.kt +75 -0
  12. package/android/src/main/java/com/jetmarkdown/editor/EditorSpans.kt +217 -0
  13. package/android/src/main/java/com/jetmarkdown/editor/JetMarkdownEditorManager.kt +224 -0
  14. package/android/src/main/java/com/jetmarkdown/editor/JetMarkdownEditorView.kt +1736 -0
  15. package/android/src/main/java/com/jetmarkdown/measure/MarkdownMeasurer.kt +54 -0
  16. package/android/src/main/java/com/jetmarkdown/parser/AstDecoder.kt +59 -0
  17. package/android/src/main/java/com/jetmarkdown/parser/MdNode.kt +43 -0
  18. package/android/src/main/java/com/jetmarkdown/render/ContentCache.kt +53 -0
  19. package/android/src/main/java/com/jetmarkdown/render/RenderedContent.kt +318 -0
  20. package/android/src/main/java/com/jetmarkdown/render/SpannableRenderer.kt +658 -0
  21. package/android/src/main/java/com/jetmarkdown/render/spans/ChipSpan.kt +17 -0
  22. package/android/src/main/java/com/jetmarkdown/render/spans/InteractiveSpans.kt +11 -0
  23. package/android/src/main/java/com/jetmarkdown/render/spans/MarkdownLineHeightSpan.kt +59 -0
  24. package/android/src/main/java/com/jetmarkdown/render/spans/RunSpan.kt +40 -0
  25. package/android/src/main/java/com/jetmarkdown/style/Fonts.kt +34 -0
  26. package/android/src/main/java/com/jetmarkdown/style/LayoutStyleSpec.kt +71 -0
  27. package/android/src/main/java/com/jetmarkdown/style/PlatformColorResolver.kt +77 -0
  28. package/android/src/main/java/com/jetmarkdown/style/StyleConfig.kt +80 -0
  29. package/android/src/main/java/com/jetmarkdown/style/TextStyleSpec.kt +61 -0
  30. package/android/src/main/java/com/jetmarkdown/views/BlockStackView.kt +292 -0
  31. package/android/src/main/java/com/jetmarkdown/views/BlockTextView.kt +378 -0
  32. package/android/src/main/java/com/jetmarkdown/views/BoxDrawing.kt +50 -0
  33. package/android/src/main/java/com/jetmarkdown/views/MarkdownHost.kt +12 -0
  34. package/android/src/main/java/com/jetmarkdown/views/MarkdownImageView.kt +113 -0
  35. package/android/src/main/java/com/jetmarkdown/views/NestedHorizontalScrollView.kt +87 -0
  36. package/android/src/main/java/com/jetmarkdown/views/TableBlockView.kt +139 -0
  37. package/cpp/core/Ast.h +85 -0
  38. package/cpp/core/AstJson.cpp +129 -0
  39. package/cpp/core/AstJson.h +12 -0
  40. package/cpp/core/AstSerializer.cpp +40 -0
  41. package/cpp/core/AstSerializer.h +21 -0
  42. package/cpp/core/AstToMarkdown.cpp +549 -0
  43. package/cpp/core/AstToMarkdown.h +16 -0
  44. package/cpp/core/EditorRuns.cpp +640 -0
  45. package/cpp/core/EditorRuns.h +94 -0
  46. package/cpp/core/EditorText.cpp +15 -0
  47. package/cpp/core/EditorText.h +18 -0
  48. package/cpp/core/InlineExtensions.cpp +305 -0
  49. package/cpp/core/InlineExtensions.h +17 -0
  50. package/cpp/core/Parser.cpp +470 -0
  51. package/cpp/core/Parser.h +16 -0
  52. package/cpp/core/Preprocess.cpp +181 -0
  53. package/cpp/core/Preprocess.h +14 -0
  54. package/cpp/md4c/LICENSE +22 -0
  55. package/cpp/md4c/VERSION +1 -0
  56. package/cpp/md4c/md4c.c +6462 -0
  57. package/cpp/md4c/md4c.h +407 -0
  58. package/cpp/react/JetMarkdownEditorShadowNode.cpp +54 -0
  59. package/cpp/react/JetMarkdownEditorShadowNode.h +55 -0
  60. package/cpp/react/JetMarkdownEditorState.h +35 -0
  61. package/cpp/react/JetMarkdownMeasurer.cpp +32 -0
  62. package/cpp/react/JetMarkdownMeasurer.h +41 -0
  63. package/cpp/react/JetMarkdownShadowNode.cpp +100 -0
  64. package/cpp/react/JetMarkdownShadowNode.h +53 -0
  65. package/cpp/react/JetMarkdownState.h +52 -0
  66. package/cpp/react/override/react/renderer/components/JetMarkdownViewSpec/ComponentDescriptors.h +21 -0
  67. package/cpp/tests/parser_tests.cpp +662 -0
  68. package/cpp/tests/run_tests.sh +25 -0
  69. package/ios/JetMarkdownView.h +14 -0
  70. package/ios/JetMarkdownView.mm +468 -0
  71. package/ios/editor/JetMarkdownEditor.h +12 -0
  72. package/ios/editor/JetMarkdownEditor.mm +2002 -0
  73. package/ios/measure/JMDMarkdownMeasurer.h +22 -0
  74. package/ios/measure/JMDMarkdownMeasurer.mm +38 -0
  75. package/ios/render/JMDBlock.h +97 -0
  76. package/ios/render/JMDBlock.m +28 -0
  77. package/ios/render/JMDBlockRenderer.h +17 -0
  78. package/ios/render/JMDBlockRenderer.mm +852 -0
  79. package/ios/render/JMDContentCache.h +17 -0
  80. package/ios/render/JMDContentCache.mm +42 -0
  81. package/ios/render/JMDRenderedContent.h +35 -0
  82. package/ios/render/JMDRenderedContent.mm +274 -0
  83. package/ios/style/JMDFontScale.h +33 -0
  84. package/ios/style/JMDLayoutStyle.h +37 -0
  85. package/ios/style/JMDLayoutStyle.mm +68 -0
  86. package/ios/style/JMDStyleConfig.h +39 -0
  87. package/ios/style/JMDStyleConfig.mm +111 -0
  88. package/ios/style/JMDTextStyle.h +25 -0
  89. package/ios/style/JMDTextStyle.mm +68 -0
  90. package/ios/views/JMDBlockStackView.h +18 -0
  91. package/ios/views/JMDBlockStackView.m +97 -0
  92. package/ios/views/JMDBlockTextView.h +24 -0
  93. package/ios/views/JMDBlockTextView.m +340 -0
  94. package/ios/views/JMDBoxViews.h +33 -0
  95. package/ios/views/JMDBoxViews.m +292 -0
  96. package/ios/views/JMDImageView.h +19 -0
  97. package/ios/views/JMDImageView.m +68 -0
  98. package/ios/views/JMDMarkdownHost.h +16 -0
  99. package/ios/views/JMDTableView.h +16 -0
  100. package/ios/views/JMDTableView.m +172 -0
  101. package/lib/module/JetMarkdownEditor.js +85 -0
  102. package/lib/module/JetMarkdownEditor.js.map +1 -0
  103. package/lib/module/JetMarkdownEditor.native.js +244 -0
  104. package/lib/module/JetMarkdownEditor.native.js.map +1 -0
  105. package/lib/module/JetMarkdownEditorNativeComponent.ts +173 -0
  106. package/lib/module/JetMarkdownView.js +19 -0
  107. package/lib/module/JetMarkdownView.js.map +1 -0
  108. package/lib/module/JetMarkdownView.native.js +44 -0
  109. package/lib/module/JetMarkdownView.native.js.map +1 -0
  110. package/lib/module/JetMarkdownViewNativeComponent.ts +35 -0
  111. package/lib/module/defaultStyles.js +122 -0
  112. package/lib/module/defaultStyles.js.map +1 -0
  113. package/lib/module/index.js +9 -0
  114. package/lib/module/index.js.map +1 -0
  115. package/lib/module/package.json +1 -0
  116. package/lib/module/serializeStyles.js +259 -0
  117. package/lib/module/serializeStyles.js.map +1 -0
  118. package/lib/module/types.js +4 -0
  119. package/lib/module/types.js.map +1 -0
  120. package/lib/module/useJetMarkdownEditor.js +41 -0
  121. package/lib/module/useJetMarkdownEditor.js.map +1 -0
  122. package/lib/typescript/package.json +1 -0
  123. package/lib/typescript/src/JetMarkdownEditor.d.ts +6 -0
  124. package/lib/typescript/src/JetMarkdownEditor.d.ts.map +1 -0
  125. package/lib/typescript/src/JetMarkdownEditor.native.d.ts +6 -0
  126. package/lib/typescript/src/JetMarkdownEditor.native.d.ts.map +1 -0
  127. package/lib/typescript/src/JetMarkdownEditorNativeComponent.d.ts +105 -0
  128. package/lib/typescript/src/JetMarkdownEditorNativeComponent.d.ts.map +1 -0
  129. package/lib/typescript/src/JetMarkdownView.d.ts +3 -0
  130. package/lib/typescript/src/JetMarkdownView.d.ts.map +1 -0
  131. package/lib/typescript/src/JetMarkdownView.native.d.ts +3 -0
  132. package/lib/typescript/src/JetMarkdownView.native.d.ts.map +1 -0
  133. package/lib/typescript/src/JetMarkdownViewNativeComponent.d.ts +28 -0
  134. package/lib/typescript/src/JetMarkdownViewNativeComponent.d.ts.map +1 -0
  135. package/lib/typescript/src/defaultStyles.d.ts +20 -0
  136. package/lib/typescript/src/defaultStyles.d.ts.map +1 -0
  137. package/lib/typescript/src/index.d.ts +7 -0
  138. package/lib/typescript/src/index.d.ts.map +1 -0
  139. package/lib/typescript/src/serializeStyles.d.ts +34 -0
  140. package/lib/typescript/src/serializeStyles.d.ts.map +1 -0
  141. package/lib/typescript/src/types.d.ts +352 -0
  142. package/lib/typescript/src/types.d.ts.map +1 -0
  143. package/lib/typescript/src/useJetMarkdownEditor.d.ts +36 -0
  144. package/lib/typescript/src/useJetMarkdownEditor.d.ts.map +1 -0
  145. package/package.json +150 -0
  146. package/react-native.config.js +11 -0
  147. package/src/JetMarkdownEditor.native.tsx +301 -0
  148. package/src/JetMarkdownEditor.tsx +90 -0
  149. package/src/JetMarkdownEditorNativeComponent.ts +173 -0
  150. package/src/JetMarkdownView.native.tsx +67 -0
  151. package/src/JetMarkdownView.tsx +16 -0
  152. package/src/JetMarkdownViewNativeComponent.ts +35 -0
  153. package/src/defaultStyles.ts +102 -0
  154. package/src/index.tsx +34 -0
  155. package/src/serializeStyles.ts +369 -0
  156. package/src/types.ts +438 -0
  157. 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