@saiansh2525/react-native-nitro-markdown 0.3.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.
Files changed (243) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +468 -0
  3. package/android/CMakeLists.txt +40 -0
  4. package/android/build.gradle +92 -0
  5. package/android/gradle.properties +5 -0
  6. package/android/src/main/AndroidManifest.xml +4 -0
  7. package/android/src/main/cpp/cpp-adapter.cpp +7 -0
  8. package/android/src/main/java/com/margelo/nitro/com/nitromarkdown/HybridMarkdownSession.kt +61 -0
  9. package/android/src/main/java/com/nitromarkdown/NitroMarkdownPackage.kt +27 -0
  10. package/cpp/CMakeLists.txt +46 -0
  11. package/cpp/bindings/HybridMarkdownParser.cpp +114 -0
  12. package/cpp/bindings/HybridMarkdownParser.hpp +28 -0
  13. package/cpp/bindings/HybridMarkdownSession.cpp +0 -0
  14. package/cpp/core/MD4CParser.cpp +440 -0
  15. package/cpp/core/MD4CParser.hpp +21 -0
  16. package/cpp/core/MarkdownSessionCore.cpp +0 -0
  17. package/cpp/core/MarkdownTypes.hpp +124 -0
  18. package/cpp/md4c/md4c.c +6610 -0
  19. package/cpp/md4c/md4c.h +410 -0
  20. package/ios/HybridMarkdownSession.swift +64 -0
  21. package/lib/commonjs/Markdown.nitro.js +6 -0
  22. package/lib/commonjs/Markdown.nitro.js.map +1 -0
  23. package/lib/commonjs/MarkdownContext.js +17 -0
  24. package/lib/commonjs/MarkdownContext.js.map +1 -0
  25. package/lib/commonjs/MarkdownSession.js +11 -0
  26. package/lib/commonjs/MarkdownSession.js.map +1 -0
  27. package/lib/commonjs/default-markdown-renderer.js +217 -0
  28. package/lib/commonjs/default-markdown-renderer.js.map +1 -0
  29. package/lib/commonjs/headless.js +98 -0
  30. package/lib/commonjs/headless.js.map +1 -0
  31. package/lib/commonjs/index.js +226 -0
  32. package/lib/commonjs/index.js.map +1 -0
  33. package/lib/commonjs/markdown-stream.js +32 -0
  34. package/lib/commonjs/markdown-stream.js.map +1 -0
  35. package/lib/commonjs/markdown.js +385 -0
  36. package/lib/commonjs/markdown.js.map +1 -0
  37. package/lib/commonjs/package.json +1 -0
  38. package/lib/commonjs/renderers/blockquote.js +36 -0
  39. package/lib/commonjs/renderers/blockquote.js.map +1 -0
  40. package/lib/commonjs/renderers/code.js +99 -0
  41. package/lib/commonjs/renderers/code.js.map +1 -0
  42. package/lib/commonjs/renderers/heading.js +63 -0
  43. package/lib/commonjs/renderers/heading.js.map +1 -0
  44. package/lib/commonjs/renderers/horizontal-rule.js +29 -0
  45. package/lib/commonjs/renderers/horizontal-rule.js.map +1 -0
  46. package/lib/commonjs/renderers/image.js +184 -0
  47. package/lib/commonjs/renderers/image.js.map +1 -0
  48. package/lib/commonjs/renderers/link.js +35 -0
  49. package/lib/commonjs/renderers/link.js.map +1 -0
  50. package/lib/commonjs/renderers/list.js +114 -0
  51. package/lib/commonjs/renderers/list.js.map +1 -0
  52. package/lib/commonjs/renderers/math.js +137 -0
  53. package/lib/commonjs/renderers/math.js.map +1 -0
  54. package/lib/commonjs/renderers/paragraph.js +37 -0
  55. package/lib/commonjs/renderers/paragraph.js.map +1 -0
  56. package/lib/commonjs/renderers/table.js +290 -0
  57. package/lib/commonjs/renderers/table.js.map +1 -0
  58. package/lib/commonjs/specs/MarkdownSession.nitro.js +6 -0
  59. package/lib/commonjs/specs/MarkdownSession.nitro.js.map +1 -0
  60. package/lib/commonjs/theme.js +191 -0
  61. package/lib/commonjs/theme.js.map +1 -0
  62. package/lib/commonjs/use-markdown-stream.js +71 -0
  63. package/lib/commonjs/use-markdown-stream.js.map +1 -0
  64. package/lib/module/Markdown.nitro.js +4 -0
  65. package/lib/module/Markdown.nitro.js.map +1 -0
  66. package/lib/module/MarkdownContext.js +12 -0
  67. package/lib/module/MarkdownContext.js.map +1 -0
  68. package/lib/module/MarkdownSession.js +7 -0
  69. package/lib/module/MarkdownSession.js.map +1 -0
  70. package/lib/module/default-markdown-renderer.js +212 -0
  71. package/lib/module/default-markdown-renderer.js.map +1 -0
  72. package/lib/module/headless.js +90 -0
  73. package/lib/module/headless.js.map +1 -0
  74. package/lib/module/index.js +21 -0
  75. package/lib/module/index.js.map +1 -0
  76. package/lib/module/markdown-stream.js +27 -0
  77. package/lib/module/markdown-stream.js.map +1 -0
  78. package/lib/module/markdown.js +380 -0
  79. package/lib/module/markdown.js.map +1 -0
  80. package/lib/module/package.json +1 -0
  81. package/lib/module/renderers/blockquote.js +31 -0
  82. package/lib/module/renderers/blockquote.js.map +1 -0
  83. package/lib/module/renderers/code.js +93 -0
  84. package/lib/module/renderers/code.js.map +1 -0
  85. package/lib/module/renderers/heading.js +58 -0
  86. package/lib/module/renderers/heading.js.map +1 -0
  87. package/lib/module/renderers/horizontal-rule.js +24 -0
  88. package/lib/module/renderers/horizontal-rule.js.map +1 -0
  89. package/lib/module/renderers/image.js +179 -0
  90. package/lib/module/renderers/image.js.map +1 -0
  91. package/lib/module/renderers/link.js +30 -0
  92. package/lib/module/renderers/link.js.map +1 -0
  93. package/lib/module/renderers/list.js +107 -0
  94. package/lib/module/renderers/list.js.map +1 -0
  95. package/lib/module/renderers/math.js +131 -0
  96. package/lib/module/renderers/math.js.map +1 -0
  97. package/lib/module/renderers/paragraph.js +32 -0
  98. package/lib/module/renderers/paragraph.js.map +1 -0
  99. package/lib/module/renderers/table.js +285 -0
  100. package/lib/module/renderers/table.js.map +1 -0
  101. package/lib/module/specs/MarkdownSession.nitro.js +4 -0
  102. package/lib/module/specs/MarkdownSession.nitro.js.map +1 -0
  103. package/lib/module/theme.js +186 -0
  104. package/lib/module/theme.js.map +1 -0
  105. package/lib/module/use-markdown-stream.js +66 -0
  106. package/lib/module/use-markdown-stream.js.map +1 -0
  107. package/lib/typescript/commonjs/Markdown.nitro.d.ts +13 -0
  108. package/lib/typescript/commonjs/Markdown.nitro.d.ts.map +1 -0
  109. package/lib/typescript/commonjs/MarkdownContext.d.ts +65 -0
  110. package/lib/typescript/commonjs/MarkdownContext.d.ts.map +1 -0
  111. package/lib/typescript/commonjs/MarkdownSession.d.ts +4 -0
  112. package/lib/typescript/commonjs/MarkdownSession.d.ts.map +1 -0
  113. package/lib/typescript/commonjs/default-markdown-renderer.d.ts +10 -0
  114. package/lib/typescript/commonjs/default-markdown-renderer.d.ts.map +1 -0
  115. package/lib/typescript/commonjs/headless.d.ts +61 -0
  116. package/lib/typescript/commonjs/headless.d.ts.map +1 -0
  117. package/lib/typescript/commonjs/index.d.ts +22 -0
  118. package/lib/typescript/commonjs/index.d.ts.map +1 -0
  119. package/lib/typescript/commonjs/markdown-stream.d.ts +15 -0
  120. package/lib/typescript/commonjs/markdown-stream.d.ts.map +1 -0
  121. package/lib/typescript/commonjs/markdown.d.ts +60 -0
  122. package/lib/typescript/commonjs/markdown.d.ts.map +1 -0
  123. package/lib/typescript/commonjs/package.json +1 -0
  124. package/lib/typescript/commonjs/renderers/blockquote.d.ts +9 -0
  125. package/lib/typescript/commonjs/renderers/blockquote.d.ts.map +1 -0
  126. package/lib/typescript/commonjs/renderers/code.d.ts +19 -0
  127. package/lib/typescript/commonjs/renderers/code.d.ts.map +1 -0
  128. package/lib/typescript/commonjs/renderers/heading.d.ts +10 -0
  129. package/lib/typescript/commonjs/renderers/heading.d.ts.map +1 -0
  130. package/lib/typescript/commonjs/renderers/horizontal-rule.d.ts +8 -0
  131. package/lib/typescript/commonjs/renderers/horizontal-rule.d.ts.map +1 -0
  132. package/lib/typescript/commonjs/renderers/image.d.ts +13 -0
  133. package/lib/typescript/commonjs/renderers/image.d.ts.map +1 -0
  134. package/lib/typescript/commonjs/renderers/link.d.ts +10 -0
  135. package/lib/typescript/commonjs/renderers/link.d.ts.map +1 -0
  136. package/lib/typescript/commonjs/renderers/list.d.ts +26 -0
  137. package/lib/typescript/commonjs/renderers/list.d.ts.map +1 -0
  138. package/lib/typescript/commonjs/renderers/math.d.ts +14 -0
  139. package/lib/typescript/commonjs/renderers/math.d.ts.map +1 -0
  140. package/lib/typescript/commonjs/renderers/paragraph.d.ts +10 -0
  141. package/lib/typescript/commonjs/renderers/paragraph.d.ts.map +1 -0
  142. package/lib/typescript/commonjs/renderers/table.d.ts +12 -0
  143. package/lib/typescript/commonjs/renderers/table.d.ts.map +1 -0
  144. package/lib/typescript/commonjs/specs/MarkdownSession.nitro.d.ts +12 -0
  145. package/lib/typescript/commonjs/specs/MarkdownSession.nitro.d.ts.map +1 -0
  146. package/lib/typescript/commonjs/theme.d.ts +65 -0
  147. package/lib/typescript/commonjs/theme.d.ts.map +1 -0
  148. package/lib/typescript/commonjs/use-markdown-stream.d.ts +22 -0
  149. package/lib/typescript/commonjs/use-markdown-stream.d.ts.map +1 -0
  150. package/lib/typescript/module/Markdown.nitro.d.ts +13 -0
  151. package/lib/typescript/module/Markdown.nitro.d.ts.map +1 -0
  152. package/lib/typescript/module/MarkdownContext.d.ts +65 -0
  153. package/lib/typescript/module/MarkdownContext.d.ts.map +1 -0
  154. package/lib/typescript/module/MarkdownSession.d.ts +4 -0
  155. package/lib/typescript/module/MarkdownSession.d.ts.map +1 -0
  156. package/lib/typescript/module/default-markdown-renderer.d.ts +10 -0
  157. package/lib/typescript/module/default-markdown-renderer.d.ts.map +1 -0
  158. package/lib/typescript/module/headless.d.ts +61 -0
  159. package/lib/typescript/module/headless.d.ts.map +1 -0
  160. package/lib/typescript/module/index.d.ts +22 -0
  161. package/lib/typescript/module/index.d.ts.map +1 -0
  162. package/lib/typescript/module/markdown-stream.d.ts +15 -0
  163. package/lib/typescript/module/markdown-stream.d.ts.map +1 -0
  164. package/lib/typescript/module/markdown.d.ts +60 -0
  165. package/lib/typescript/module/markdown.d.ts.map +1 -0
  166. package/lib/typescript/module/package.json +1 -0
  167. package/lib/typescript/module/renderers/blockquote.d.ts +9 -0
  168. package/lib/typescript/module/renderers/blockquote.d.ts.map +1 -0
  169. package/lib/typescript/module/renderers/code.d.ts +19 -0
  170. package/lib/typescript/module/renderers/code.d.ts.map +1 -0
  171. package/lib/typescript/module/renderers/heading.d.ts +10 -0
  172. package/lib/typescript/module/renderers/heading.d.ts.map +1 -0
  173. package/lib/typescript/module/renderers/horizontal-rule.d.ts +8 -0
  174. package/lib/typescript/module/renderers/horizontal-rule.d.ts.map +1 -0
  175. package/lib/typescript/module/renderers/image.d.ts +13 -0
  176. package/lib/typescript/module/renderers/image.d.ts.map +1 -0
  177. package/lib/typescript/module/renderers/link.d.ts +10 -0
  178. package/lib/typescript/module/renderers/link.d.ts.map +1 -0
  179. package/lib/typescript/module/renderers/list.d.ts +26 -0
  180. package/lib/typescript/module/renderers/list.d.ts.map +1 -0
  181. package/lib/typescript/module/renderers/math.d.ts +14 -0
  182. package/lib/typescript/module/renderers/math.d.ts.map +1 -0
  183. package/lib/typescript/module/renderers/paragraph.d.ts +10 -0
  184. package/lib/typescript/module/renderers/paragraph.d.ts.map +1 -0
  185. package/lib/typescript/module/renderers/table.d.ts +12 -0
  186. package/lib/typescript/module/renderers/table.d.ts.map +1 -0
  187. package/lib/typescript/module/specs/MarkdownSession.nitro.d.ts +12 -0
  188. package/lib/typescript/module/specs/MarkdownSession.nitro.d.ts.map +1 -0
  189. package/lib/typescript/module/theme.d.ts +65 -0
  190. package/lib/typescript/module/theme.d.ts.map +1 -0
  191. package/lib/typescript/module/use-markdown-stream.d.ts +22 -0
  192. package/lib/typescript/module/use-markdown-stream.d.ts.map +1 -0
  193. package/nitro.json +19 -0
  194. package/nitrogen/generated/.gitattributes +1 -0
  195. package/nitrogen/generated/android/NitroMarkdown+autolinking.cmake +82 -0
  196. package/nitrogen/generated/android/NitroMarkdown+autolinking.gradle +27 -0
  197. package/nitrogen/generated/android/NitroMarkdownOnLoad.cpp +56 -0
  198. package/nitrogen/generated/android/NitroMarkdownOnLoad.hpp +25 -0
  199. package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
  200. package/nitrogen/generated/android/c++/JHybridMarkdownSessionSpec.cpp +91 -0
  201. package/nitrogen/generated/android/c++/JHybridMarkdownSessionSpec.hpp +70 -0
  202. package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/nitromarkdown/Func_void.kt +80 -0
  203. package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/nitromarkdown/HybridMarkdownSessionSpec.kt +78 -0
  204. package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/nitromarkdown/NitroMarkdownOnLoad.kt +35 -0
  205. package/nitrogen/generated/ios/NitroMarkdown+autolinking.rb +60 -0
  206. package/nitrogen/generated/ios/NitroMarkdown-Swift-Cxx-Bridge.cpp +41 -0
  207. package/nitrogen/generated/ios/NitroMarkdown-Swift-Cxx-Bridge.hpp +93 -0
  208. package/nitrogen/generated/ios/NitroMarkdown-Swift-Cxx-Umbrella.hpp +45 -0
  209. package/nitrogen/generated/ios/NitroMarkdownAutolinking.mm +43 -0
  210. package/nitrogen/generated/ios/NitroMarkdownAutolinking.swift +26 -0
  211. package/nitrogen/generated/ios/c++/HybridMarkdownSessionSpecSwift.cpp +11 -0
  212. package/nitrogen/generated/ios/c++/HybridMarkdownSessionSpecSwift.hpp +108 -0
  213. package/nitrogen/generated/ios/swift/Func_void.swift +47 -0
  214. package/nitrogen/generated/ios/swift/HybridMarkdownSessionSpec.swift +59 -0
  215. package/nitrogen/generated/ios/swift/HybridMarkdownSessionSpec_cxx.swift +190 -0
  216. package/nitrogen/generated/shared/c++/HybridMarkdownParserSpec.cpp +22 -0
  217. package/nitrogen/generated/shared/c++/HybridMarkdownParserSpec.hpp +65 -0
  218. package/nitrogen/generated/shared/c++/HybridMarkdownSessionSpec.cpp +26 -0
  219. package/nitrogen/generated/shared/c++/HybridMarkdownSessionSpec.hpp +67 -0
  220. package/nitrogen/generated/shared/c++/ParserOptions.hpp +87 -0
  221. package/package.json +134 -0
  222. package/react-native-nitro-markdown.podspec +42 -0
  223. package/src/Markdown.nitro.ts +12 -0
  224. package/src/MarkdownContext.ts +98 -0
  225. package/src/MarkdownSession.ts +8 -0
  226. package/src/default-markdown-renderer.tsx +261 -0
  227. package/src/headless.ts +171 -0
  228. package/src/index.ts +52 -0
  229. package/src/markdown-stream.tsx +32 -0
  230. package/src/markdown.tsx +521 -0
  231. package/src/renderers/blockquote.tsx +30 -0
  232. package/src/renderers/code.tsx +112 -0
  233. package/src/renderers/heading.tsx +66 -0
  234. package/src/renderers/horizontal-rule.tsx +23 -0
  235. package/src/renderers/image.tsx +204 -0
  236. package/src/renderers/link.tsx +33 -0
  237. package/src/renderers/list.tsx +123 -0
  238. package/src/renderers/math.tsx +147 -0
  239. package/src/renderers/paragraph.tsx +45 -0
  240. package/src/renderers/table.tsx +370 -0
  241. package/src/specs/MarkdownSession.nitro.ts +14 -0
  242. package/src/theme.ts +243 -0
  243. package/src/use-markdown-stream.ts +83 -0
@@ -0,0 +1,65 @@
1
+ ///
2
+ /// HybridMarkdownParserSpec.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #if __has_include(<NitroModules/HybridObject.hpp>)
11
+ #include <NitroModules/HybridObject.hpp>
12
+ #else
13
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
14
+ #endif
15
+
16
+ // Forward declaration of `ParserOptions` to properly resolve imports.
17
+ namespace margelo::nitro::Markdown { struct ParserOptions; }
18
+
19
+ #include <string>
20
+ #include "ParserOptions.hpp"
21
+
22
+ namespace margelo::nitro::Markdown {
23
+
24
+ using namespace margelo::nitro;
25
+
26
+ /**
27
+ * An abstract base class for `MarkdownParser`
28
+ * Inherit this class to create instances of `HybridMarkdownParserSpec` in C++.
29
+ * You must explicitly call `HybridObject`'s constructor yourself, because it is virtual.
30
+ * @example
31
+ * ```cpp
32
+ * class HybridMarkdownParser: public HybridMarkdownParserSpec {
33
+ * public:
34
+ * HybridMarkdownParser(...): HybridObject(TAG) { ... }
35
+ * // ...
36
+ * };
37
+ * ```
38
+ */
39
+ class HybridMarkdownParserSpec: public virtual HybridObject {
40
+ public:
41
+ // Constructor
42
+ explicit HybridMarkdownParserSpec(): HybridObject(TAG) { }
43
+
44
+ // Destructor
45
+ ~HybridMarkdownParserSpec() override = default;
46
+
47
+ public:
48
+ // Properties
49
+
50
+
51
+ public:
52
+ // Methods
53
+ virtual std::string parse(const std::string& text) = 0;
54
+ virtual std::string parseWithOptions(const std::string& text, const ParserOptions& options) = 0;
55
+
56
+ protected:
57
+ // Hybrid Setup
58
+ void loadHybridMethods() override;
59
+
60
+ protected:
61
+ // Tag for logging
62
+ static constexpr auto TAG = "MarkdownParser";
63
+ };
64
+
65
+ } // namespace margelo::nitro::Markdown
@@ -0,0 +1,26 @@
1
+ ///
2
+ /// HybridMarkdownSessionSpec.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include "HybridMarkdownSessionSpec.hpp"
9
+
10
+ namespace margelo::nitro::Markdown {
11
+
12
+ void HybridMarkdownSessionSpec::loadHybridMethods() {
13
+ // load base methods/properties
14
+ HybridObject::loadHybridMethods();
15
+ // load custom methods/properties
16
+ registerHybrids(this, [](Prototype& prototype) {
17
+ prototype.registerHybridGetter("highlightPosition", &HybridMarkdownSessionSpec::getHighlightPosition);
18
+ prototype.registerHybridSetter("highlightPosition", &HybridMarkdownSessionSpec::setHighlightPosition);
19
+ prototype.registerHybridMethod("append", &HybridMarkdownSessionSpec::append);
20
+ prototype.registerHybridMethod("clear", &HybridMarkdownSessionSpec::clear);
21
+ prototype.registerHybridMethod("getAllText", &HybridMarkdownSessionSpec::getAllText);
22
+ prototype.registerHybridMethod("addListener", &HybridMarkdownSessionSpec::addListener);
23
+ });
24
+ }
25
+
26
+ } // namespace margelo::nitro::Markdown
@@ -0,0 +1,67 @@
1
+ ///
2
+ /// HybridMarkdownSessionSpec.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #if __has_include(<NitroModules/HybridObject.hpp>)
11
+ #include <NitroModules/HybridObject.hpp>
12
+ #else
13
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
14
+ #endif
15
+
16
+
17
+
18
+ #include <string>
19
+ #include <functional>
20
+
21
+ namespace margelo::nitro::Markdown {
22
+
23
+ using namespace margelo::nitro;
24
+
25
+ /**
26
+ * An abstract base class for `MarkdownSession`
27
+ * Inherit this class to create instances of `HybridMarkdownSessionSpec` in C++.
28
+ * You must explicitly call `HybridObject`'s constructor yourself, because it is virtual.
29
+ * @example
30
+ * ```cpp
31
+ * class HybridMarkdownSession: public HybridMarkdownSessionSpec {
32
+ * public:
33
+ * HybridMarkdownSession(...): HybridObject(TAG) { ... }
34
+ * // ...
35
+ * };
36
+ * ```
37
+ */
38
+ class HybridMarkdownSessionSpec: public virtual HybridObject {
39
+ public:
40
+ // Constructor
41
+ explicit HybridMarkdownSessionSpec(): HybridObject(TAG) { }
42
+
43
+ // Destructor
44
+ ~HybridMarkdownSessionSpec() override = default;
45
+
46
+ public:
47
+ // Properties
48
+ virtual double getHighlightPosition() = 0;
49
+ virtual void setHighlightPosition(double highlightPosition) = 0;
50
+
51
+ public:
52
+ // Methods
53
+ virtual void append(const std::string& chunk) = 0;
54
+ virtual void clear() = 0;
55
+ virtual std::string getAllText() = 0;
56
+ virtual std::function<void()> addListener(const std::function<void()>& listener) = 0;
57
+
58
+ protected:
59
+ // Hybrid Setup
60
+ void loadHybridMethods() override;
61
+
62
+ protected:
63
+ // Tag for logging
64
+ static constexpr auto TAG = "MarkdownSession";
65
+ };
66
+
67
+ } // namespace margelo::nitro::Markdown
@@ -0,0 +1,87 @@
1
+ ///
2
+ /// ParserOptions.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #if __has_include(<NitroModules/JSIConverter.hpp>)
11
+ #include <NitroModules/JSIConverter.hpp>
12
+ #else
13
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
14
+ #endif
15
+ #if __has_include(<NitroModules/NitroDefines.hpp>)
16
+ #include <NitroModules/NitroDefines.hpp>
17
+ #else
18
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
19
+ #endif
20
+ #if __has_include(<NitroModules/JSIHelpers.hpp>)
21
+ #include <NitroModules/JSIHelpers.hpp>
22
+ #else
23
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
24
+ #endif
25
+ #if __has_include(<NitroModules/PropNameIDCache.hpp>)
26
+ #include <NitroModules/PropNameIDCache.hpp>
27
+ #else
28
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
29
+ #endif
30
+
31
+
32
+
33
+ #include <optional>
34
+
35
+ namespace margelo::nitro::Markdown {
36
+
37
+ /**
38
+ * A struct which can be represented as a JavaScript object (ParserOptions).
39
+ */
40
+ struct ParserOptions final {
41
+ public:
42
+ std::optional<bool> gfm SWIFT_PRIVATE;
43
+ std::optional<bool> math SWIFT_PRIVATE;
44
+
45
+ public:
46
+ ParserOptions() = default;
47
+ explicit ParserOptions(std::optional<bool> gfm, std::optional<bool> math): gfm(gfm), math(math) {}
48
+
49
+ public:
50
+ friend bool operator==(const ParserOptions& lhs, const ParserOptions& rhs) = default;
51
+ };
52
+
53
+ } // namespace margelo::nitro::Markdown
54
+
55
+ namespace margelo::nitro {
56
+
57
+ // C++ ParserOptions <> JS ParserOptions (object)
58
+ template <>
59
+ struct JSIConverter<margelo::nitro::Markdown::ParserOptions> final {
60
+ static inline margelo::nitro::Markdown::ParserOptions fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) {
61
+ jsi::Object obj = arg.asObject(runtime);
62
+ return margelo::nitro::Markdown::ParserOptions(
63
+ JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "gfm"))),
64
+ JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "math")))
65
+ );
66
+ }
67
+ static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::Markdown::ParserOptions& arg) {
68
+ jsi::Object obj(runtime);
69
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "gfm"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.gfm));
70
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "math"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.math));
71
+ return obj;
72
+ }
73
+ static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
74
+ if (!value.isObject()) {
75
+ return false;
76
+ }
77
+ jsi::Object obj = value.getObject(runtime);
78
+ if (!nitro::isPlainObject(runtime, obj)) {
79
+ return false;
80
+ }
81
+ if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "gfm")))) return false;
82
+ if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "math")))) return false;
83
+ return true;
84
+ }
85
+ };
86
+
87
+ } // namespace margelo::nitro
package/package.json ADDED
@@ -0,0 +1,134 @@
1
+ {
2
+ "name": "@saiansh2525/react-native-nitro-markdown",
3
+ "version": "0.3.2",
4
+ "description": "High-performance Markdown parser for React Native using Nitro Modules and md4c",
5
+ "main": "lib/commonjs/index.js",
6
+ "module": "lib/module/index.js",
7
+ "types": "lib/typescript/commonjs/index.d.ts",
8
+ "react-native": "src/index.ts",
9
+ "source": "src/index.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": {
13
+ "types": "./lib/typescript/module/index.d.ts",
14
+ "default": "./lib/module/index.js"
15
+ },
16
+ "require": {
17
+ "types": "./lib/typescript/commonjs/index.d.ts",
18
+ "default": "./lib/commonjs/index.js"
19
+ },
20
+ "react-native": "./src/index.ts"
21
+ },
22
+ "./headless": {
23
+ "import": {
24
+ "types": "./lib/typescript/module/headless.d.ts",
25
+ "default": "./lib/module/headless.js"
26
+ },
27
+ "require": {
28
+ "types": "./lib/typescript/commonjs/headless.d.ts",
29
+ "default": "./lib/commonjs/headless.js"
30
+ },
31
+ "react-native": "./src/headless.ts"
32
+ }
33
+ },
34
+ "files": [
35
+ "src",
36
+ "lib",
37
+ "cpp",
38
+ "android",
39
+ "ios",
40
+ "nitrogen",
41
+ "nitro.json",
42
+ "*.podspec",
43
+ "!**/__tests__",
44
+ "!**/__fixtures__",
45
+ "!**/__mocks__",
46
+ "!cpp/core/*Test.cpp",
47
+ "!cpp/build",
48
+ "!android/build",
49
+ "!android/.cxx",
50
+ "!scripts"
51
+ ],
52
+ "scripts": {
53
+ "prebuild": "npm run codegen",
54
+ "build": "bob build",
55
+ "clean": "rimraf lib nitrogen/generated",
56
+ "codegen": "nitrogen --logLevel=\"debug\"",
57
+ "typecheck": "tsc --noEmit",
58
+ "test": "jest",
59
+ "test:coverage": "jest --coverage",
60
+ "benchmark": "node ../../scripts/benchmark-comparison.js",
61
+ "prepack": "node -e \"const fs=require('fs'); fs.copyFileSync('../../README.md','./README.md'); fs.copyFileSync('../../LICENSE','./LICENSE')\"",
62
+ "postpack": "node -e \"const fs=require('fs'); if(fs.existsSync('./README.md'))fs.unlinkSync('./README.md'); if(fs.existsSync('./LICENSE'))fs.unlinkSync('./LICENSE')\"",
63
+ "test:cpp": "node scripts/test-cpp.js"
64
+ },
65
+ "keywords": [
66
+ "react-native",
67
+ "markdown",
68
+ "md4c",
69
+ "nitro",
70
+ "jsi",
71
+ "native-module",
72
+ "gfm",
73
+ "parser"
74
+ ],
75
+ "repository": {
76
+ "type": "git",
77
+ "url": "git+https://github.com/JoaoPauloCMarra/react-native-nitro-markdown.git"
78
+ },
79
+ "author": "João Paulo C. Marra <joaopaulocmarra@gmail.com>",
80
+ "license": "MIT",
81
+ "bugs": {
82
+ "url": "https://github.com/JoaoPauloCMarra/react-native-nitro-markdown/issues"
83
+ },
84
+ "homepage": "https://github.com/JoaoPauloCMarra/react-native-nitro-markdown#readme",
85
+ "publishConfig": {
86
+ "registry": "https://registry.npmjs.org/"
87
+ },
88
+ "devDependencies": {
89
+ "@types/react": "^19.2.7",
90
+ "@types/react-native": "^0.73.0",
91
+ "react-native-builder-bob": "^0.40.17",
92
+ "react-native-nitro-modules": "*",
93
+ "typescript": "^5.9.3"
94
+ },
95
+ "peerDependencies": {
96
+ "react": "*",
97
+ "react-native": ">=0.75.0",
98
+ "react-native-nitro-modules": "*",
99
+ "react-native-mathjax-svg": ">=0.9.0",
100
+ "react-native-svg": ">=13.0.0"
101
+ },
102
+ "peerDependenciesMeta": {
103
+ "react-native-mathjax-svg": {
104
+ "optional": true
105
+ },
106
+ "react-native-svg": {
107
+ "optional": true
108
+ }
109
+ },
110
+ "codegenConfig": {
111
+ "name": "NitroMarkdownSpec",
112
+ "type": "all",
113
+ "jsSrcsDir": "src"
114
+ },
115
+ "react-native-builder-bob": {
116
+ "source": "src",
117
+ "output": "lib",
118
+ "targets": [
119
+ [
120
+ "commonjs",
121
+ {
122
+ "esm": true
123
+ }
124
+ ],
125
+ [
126
+ "module",
127
+ {
128
+ "esm": true
129
+ }
130
+ ],
131
+ "typescript"
132
+ ]
133
+ }
134
+ }
@@ -0,0 +1,42 @@
1
+ require "json"
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
+
5
+ Pod::Spec.new do |s|
6
+ s.name = "react-native-nitro-markdown"
7
+ s.version = package["version"]
8
+ s.summary = package["description"]
9
+ s.homepage = package["homepage"]
10
+ s.license = package["license"]
11
+ s.authors = package["author"]
12
+
13
+ s.platforms = { :ios => "13.0" }
14
+ s.source = { :git => "https://github.com/JoaoPauloCMarra/react-native-nitro-markdown.git", :tag => "#{s.version}" }
15
+ s.module_name = "NitroMarkdown"
16
+
17
+ s.source_files = [
18
+ "ios/**/*.{h,m,mm,swift}",
19
+ "cpp/**/*.{h,hpp,c,cpp}"
20
+ ]
21
+
22
+ s.pod_target_xcconfig = {
23
+ "CLANG_CXX_LANGUAGE_STANDARD" => "c++20",
24
+ "CLANG_CXX_LIBRARY" => "libc++",
25
+ "GCC_PREPROCESSOR_DEFINITIONS" => "$(inherited) MD4C_USE_UTF8=1",
26
+ "HEADER_SEARCH_PATHS" => [
27
+ "\"$(inherited)\"",
28
+ "\"$(PODS_ROOT)/Headers/Private/Yoga\"",
29
+ "\"$(PODS_TARGET_SRCROOT)/cpp/md4c\"",
30
+ "\"$(PODS_TARGET_SRCROOT)/cpp/core\"",
31
+ "\"$(PODS_TARGET_SRCROOT)/cpp/bindings\"",
32
+ "\"$(PODS_TARGET_SRCROOT)/nitrogen/generated/shared/c++\"",
33
+ "\"$(PODS_TARGET_SRCROOT)/nitrogen/generated/ios\""
34
+ ].join(" ")
35
+ }
36
+
37
+ s.dependency "React-Core"
38
+ s.dependency "React-Fabric"
39
+
40
+ load 'nitrogen/generated/ios/NitroMarkdown+autolinking.rb'
41
+ add_nitrogen_files(s)
42
+ end
@@ -0,0 +1,12 @@
1
+ import type { HybridObject } from 'react-native-nitro-modules';
2
+
3
+ export interface ParserOptions {
4
+ gfm?: boolean;
5
+ math?: boolean;
6
+ }
7
+
8
+ export interface MarkdownParser
9
+ extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
10
+ parse(text: string): string;
11
+ parseWithOptions(text: string, options: ParserOptions): string;
12
+ }
@@ -0,0 +1,98 @@
1
+ import {
2
+ createContext,
3
+ useContext,
4
+ type ReactNode,
5
+ type ComponentType,
6
+ } from "react";
7
+ import {
8
+ defaultMarkdownTheme,
9
+ type MarkdownTheme,
10
+ type NodeStyleOverrides,
11
+ type StylingStrategy,
12
+ } from "./theme";
13
+ import type { MarkdownNode } from "./headless";
14
+
15
+ export interface NodeRendererProps {
16
+ node: MarkdownNode;
17
+ depth: number;
18
+ inListItem: boolean;
19
+ parentIsText?: boolean;
20
+ }
21
+
22
+ export interface BaseCustomRendererProps {
23
+ node: MarkdownNode;
24
+ children: ReactNode;
25
+ Renderer: ComponentType<NodeRendererProps>;
26
+ }
27
+
28
+ export interface EnhancedRendererProps extends BaseCustomRendererProps {
29
+ level?: 1 | 2 | 3 | 4 | 5 | 6;
30
+ href?: string;
31
+ title?: string;
32
+ url?: string;
33
+ alt?: string;
34
+ content?: string;
35
+ language?: string;
36
+ ordered?: boolean;
37
+ start?: number;
38
+ checked?: boolean;
39
+ }
40
+
41
+ export interface HeadingRendererProps extends BaseCustomRendererProps {
42
+ level: 1 | 2 | 3 | 4 | 5 | 6;
43
+ }
44
+
45
+ export interface LinkRendererProps extends BaseCustomRendererProps {
46
+ href: string;
47
+ title?: string;
48
+ }
49
+
50
+ export interface ImageRendererProps extends BaseCustomRendererProps {
51
+ url: string;
52
+ alt?: string;
53
+ title?: string;
54
+ }
55
+
56
+ export interface CodeBlockRendererProps extends BaseCustomRendererProps {
57
+ content: string;
58
+ language?: string;
59
+ }
60
+
61
+ export interface InlineCodeRendererProps extends BaseCustomRendererProps {
62
+ content: string;
63
+ }
64
+
65
+ export interface ListRendererProps extends BaseCustomRendererProps {
66
+ ordered: boolean;
67
+ start?: number;
68
+ }
69
+
70
+ export interface TaskListItemRendererProps extends BaseCustomRendererProps {
71
+ checked: boolean;
72
+ }
73
+
74
+ export interface CustomRendererProps extends EnhancedRendererProps {}
75
+
76
+ export type CustomRenderer = (
77
+ props: EnhancedRendererProps
78
+ ) => ReactNode | undefined;
79
+
80
+ export type CustomRenderers = Partial<
81
+ Record<MarkdownNode["type"], CustomRenderer>
82
+ >;
83
+
84
+ export interface MarkdownContextValue {
85
+ renderers: CustomRenderers;
86
+ theme: MarkdownTheme;
87
+ styles?: NodeStyleOverrides;
88
+ stylingStrategy: StylingStrategy;
89
+ }
90
+
91
+ export const MarkdownContext = createContext<MarkdownContextValue>({
92
+ renderers: {},
93
+ theme: defaultMarkdownTheme,
94
+ styles: undefined,
95
+ stylingStrategy: "opinionated",
96
+ });
97
+
98
+ export const useMarkdownContext = () => useContext(MarkdownContext);
@@ -0,0 +1,8 @@
1
+ import { NitroModules } from "react-native-nitro-modules";
2
+ import type { MarkdownSession as MarkdownSessionSpec } from "./specs/MarkdownSession.nitro";
3
+
4
+ export type MarkdownSession = MarkdownSessionSpec;
5
+
6
+ export function createMarkdownSession(): MarkdownSession {
7
+ return NitroModules.createHybridObject<MarkdownSession>("MarkdownSession");
8
+ }