@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.
- package/LICENSE +21 -0
- package/README.md +468 -0
- package/android/CMakeLists.txt +40 -0
- package/android/build.gradle +92 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +4 -0
- package/android/src/main/cpp/cpp-adapter.cpp +7 -0
- package/android/src/main/java/com/margelo/nitro/com/nitromarkdown/HybridMarkdownSession.kt +61 -0
- package/android/src/main/java/com/nitromarkdown/NitroMarkdownPackage.kt +27 -0
- package/cpp/CMakeLists.txt +46 -0
- package/cpp/bindings/HybridMarkdownParser.cpp +114 -0
- package/cpp/bindings/HybridMarkdownParser.hpp +28 -0
- package/cpp/bindings/HybridMarkdownSession.cpp +0 -0
- package/cpp/core/MD4CParser.cpp +440 -0
- package/cpp/core/MD4CParser.hpp +21 -0
- package/cpp/core/MarkdownSessionCore.cpp +0 -0
- package/cpp/core/MarkdownTypes.hpp +124 -0
- package/cpp/md4c/md4c.c +6610 -0
- package/cpp/md4c/md4c.h +410 -0
- package/ios/HybridMarkdownSession.swift +64 -0
- package/lib/commonjs/Markdown.nitro.js +6 -0
- package/lib/commonjs/Markdown.nitro.js.map +1 -0
- package/lib/commonjs/MarkdownContext.js +17 -0
- package/lib/commonjs/MarkdownContext.js.map +1 -0
- package/lib/commonjs/MarkdownSession.js +11 -0
- package/lib/commonjs/MarkdownSession.js.map +1 -0
- package/lib/commonjs/default-markdown-renderer.js +217 -0
- package/lib/commonjs/default-markdown-renderer.js.map +1 -0
- package/lib/commonjs/headless.js +98 -0
- package/lib/commonjs/headless.js.map +1 -0
- package/lib/commonjs/index.js +226 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/markdown-stream.js +32 -0
- package/lib/commonjs/markdown-stream.js.map +1 -0
- package/lib/commonjs/markdown.js +385 -0
- package/lib/commonjs/markdown.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/renderers/blockquote.js +36 -0
- package/lib/commonjs/renderers/blockquote.js.map +1 -0
- package/lib/commonjs/renderers/code.js +99 -0
- package/lib/commonjs/renderers/code.js.map +1 -0
- package/lib/commonjs/renderers/heading.js +63 -0
- package/lib/commonjs/renderers/heading.js.map +1 -0
- package/lib/commonjs/renderers/horizontal-rule.js +29 -0
- package/lib/commonjs/renderers/horizontal-rule.js.map +1 -0
- package/lib/commonjs/renderers/image.js +184 -0
- package/lib/commonjs/renderers/image.js.map +1 -0
- package/lib/commonjs/renderers/link.js +35 -0
- package/lib/commonjs/renderers/link.js.map +1 -0
- package/lib/commonjs/renderers/list.js +114 -0
- package/lib/commonjs/renderers/list.js.map +1 -0
- package/lib/commonjs/renderers/math.js +137 -0
- package/lib/commonjs/renderers/math.js.map +1 -0
- package/lib/commonjs/renderers/paragraph.js +37 -0
- package/lib/commonjs/renderers/paragraph.js.map +1 -0
- package/lib/commonjs/renderers/table.js +290 -0
- package/lib/commonjs/renderers/table.js.map +1 -0
- package/lib/commonjs/specs/MarkdownSession.nitro.js +6 -0
- package/lib/commonjs/specs/MarkdownSession.nitro.js.map +1 -0
- package/lib/commonjs/theme.js +191 -0
- package/lib/commonjs/theme.js.map +1 -0
- package/lib/commonjs/use-markdown-stream.js +71 -0
- package/lib/commonjs/use-markdown-stream.js.map +1 -0
- package/lib/module/Markdown.nitro.js +4 -0
- package/lib/module/Markdown.nitro.js.map +1 -0
- package/lib/module/MarkdownContext.js +12 -0
- package/lib/module/MarkdownContext.js.map +1 -0
- package/lib/module/MarkdownSession.js +7 -0
- package/lib/module/MarkdownSession.js.map +1 -0
- package/lib/module/default-markdown-renderer.js +212 -0
- package/lib/module/default-markdown-renderer.js.map +1 -0
- package/lib/module/headless.js +90 -0
- package/lib/module/headless.js.map +1 -0
- package/lib/module/index.js +21 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/markdown-stream.js +27 -0
- package/lib/module/markdown-stream.js.map +1 -0
- package/lib/module/markdown.js +380 -0
- package/lib/module/markdown.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/renderers/blockquote.js +31 -0
- package/lib/module/renderers/blockquote.js.map +1 -0
- package/lib/module/renderers/code.js +93 -0
- package/lib/module/renderers/code.js.map +1 -0
- package/lib/module/renderers/heading.js +58 -0
- package/lib/module/renderers/heading.js.map +1 -0
- package/lib/module/renderers/horizontal-rule.js +24 -0
- package/lib/module/renderers/horizontal-rule.js.map +1 -0
- package/lib/module/renderers/image.js +179 -0
- package/lib/module/renderers/image.js.map +1 -0
- package/lib/module/renderers/link.js +30 -0
- package/lib/module/renderers/link.js.map +1 -0
- package/lib/module/renderers/list.js +107 -0
- package/lib/module/renderers/list.js.map +1 -0
- package/lib/module/renderers/math.js +131 -0
- package/lib/module/renderers/math.js.map +1 -0
- package/lib/module/renderers/paragraph.js +32 -0
- package/lib/module/renderers/paragraph.js.map +1 -0
- package/lib/module/renderers/table.js +285 -0
- package/lib/module/renderers/table.js.map +1 -0
- package/lib/module/specs/MarkdownSession.nitro.js +4 -0
- package/lib/module/specs/MarkdownSession.nitro.js.map +1 -0
- package/lib/module/theme.js +186 -0
- package/lib/module/theme.js.map +1 -0
- package/lib/module/use-markdown-stream.js +66 -0
- package/lib/module/use-markdown-stream.js.map +1 -0
- package/lib/typescript/commonjs/Markdown.nitro.d.ts +13 -0
- package/lib/typescript/commonjs/Markdown.nitro.d.ts.map +1 -0
- package/lib/typescript/commonjs/MarkdownContext.d.ts +65 -0
- package/lib/typescript/commonjs/MarkdownContext.d.ts.map +1 -0
- package/lib/typescript/commonjs/MarkdownSession.d.ts +4 -0
- package/lib/typescript/commonjs/MarkdownSession.d.ts.map +1 -0
- package/lib/typescript/commonjs/default-markdown-renderer.d.ts +10 -0
- package/lib/typescript/commonjs/default-markdown-renderer.d.ts.map +1 -0
- package/lib/typescript/commonjs/headless.d.ts +61 -0
- package/lib/typescript/commonjs/headless.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +22 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/markdown-stream.d.ts +15 -0
- package/lib/typescript/commonjs/markdown-stream.d.ts.map +1 -0
- package/lib/typescript/commonjs/markdown.d.ts +60 -0
- package/lib/typescript/commonjs/markdown.d.ts.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/renderers/blockquote.d.ts +9 -0
- package/lib/typescript/commonjs/renderers/blockquote.d.ts.map +1 -0
- package/lib/typescript/commonjs/renderers/code.d.ts +19 -0
- package/lib/typescript/commonjs/renderers/code.d.ts.map +1 -0
- package/lib/typescript/commonjs/renderers/heading.d.ts +10 -0
- package/lib/typescript/commonjs/renderers/heading.d.ts.map +1 -0
- package/lib/typescript/commonjs/renderers/horizontal-rule.d.ts +8 -0
- package/lib/typescript/commonjs/renderers/horizontal-rule.d.ts.map +1 -0
- package/lib/typescript/commonjs/renderers/image.d.ts +13 -0
- package/lib/typescript/commonjs/renderers/image.d.ts.map +1 -0
- package/lib/typescript/commonjs/renderers/link.d.ts +10 -0
- package/lib/typescript/commonjs/renderers/link.d.ts.map +1 -0
- package/lib/typescript/commonjs/renderers/list.d.ts +26 -0
- package/lib/typescript/commonjs/renderers/list.d.ts.map +1 -0
- package/lib/typescript/commonjs/renderers/math.d.ts +14 -0
- package/lib/typescript/commonjs/renderers/math.d.ts.map +1 -0
- package/lib/typescript/commonjs/renderers/paragraph.d.ts +10 -0
- package/lib/typescript/commonjs/renderers/paragraph.d.ts.map +1 -0
- package/lib/typescript/commonjs/renderers/table.d.ts +12 -0
- package/lib/typescript/commonjs/renderers/table.d.ts.map +1 -0
- package/lib/typescript/commonjs/specs/MarkdownSession.nitro.d.ts +12 -0
- package/lib/typescript/commonjs/specs/MarkdownSession.nitro.d.ts.map +1 -0
- package/lib/typescript/commonjs/theme.d.ts +65 -0
- package/lib/typescript/commonjs/theme.d.ts.map +1 -0
- package/lib/typescript/commonjs/use-markdown-stream.d.ts +22 -0
- package/lib/typescript/commonjs/use-markdown-stream.d.ts.map +1 -0
- package/lib/typescript/module/Markdown.nitro.d.ts +13 -0
- package/lib/typescript/module/Markdown.nitro.d.ts.map +1 -0
- package/lib/typescript/module/MarkdownContext.d.ts +65 -0
- package/lib/typescript/module/MarkdownContext.d.ts.map +1 -0
- package/lib/typescript/module/MarkdownSession.d.ts +4 -0
- package/lib/typescript/module/MarkdownSession.d.ts.map +1 -0
- package/lib/typescript/module/default-markdown-renderer.d.ts +10 -0
- package/lib/typescript/module/default-markdown-renderer.d.ts.map +1 -0
- package/lib/typescript/module/headless.d.ts +61 -0
- package/lib/typescript/module/headless.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +22 -0
- package/lib/typescript/module/index.d.ts.map +1 -0
- package/lib/typescript/module/markdown-stream.d.ts +15 -0
- package/lib/typescript/module/markdown-stream.d.ts.map +1 -0
- package/lib/typescript/module/markdown.d.ts +60 -0
- package/lib/typescript/module/markdown.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/renderers/blockquote.d.ts +9 -0
- package/lib/typescript/module/renderers/blockquote.d.ts.map +1 -0
- package/lib/typescript/module/renderers/code.d.ts +19 -0
- package/lib/typescript/module/renderers/code.d.ts.map +1 -0
- package/lib/typescript/module/renderers/heading.d.ts +10 -0
- package/lib/typescript/module/renderers/heading.d.ts.map +1 -0
- package/lib/typescript/module/renderers/horizontal-rule.d.ts +8 -0
- package/lib/typescript/module/renderers/horizontal-rule.d.ts.map +1 -0
- package/lib/typescript/module/renderers/image.d.ts +13 -0
- package/lib/typescript/module/renderers/image.d.ts.map +1 -0
- package/lib/typescript/module/renderers/link.d.ts +10 -0
- package/lib/typescript/module/renderers/link.d.ts.map +1 -0
- package/lib/typescript/module/renderers/list.d.ts +26 -0
- package/lib/typescript/module/renderers/list.d.ts.map +1 -0
- package/lib/typescript/module/renderers/math.d.ts +14 -0
- package/lib/typescript/module/renderers/math.d.ts.map +1 -0
- package/lib/typescript/module/renderers/paragraph.d.ts +10 -0
- package/lib/typescript/module/renderers/paragraph.d.ts.map +1 -0
- package/lib/typescript/module/renderers/table.d.ts +12 -0
- package/lib/typescript/module/renderers/table.d.ts.map +1 -0
- package/lib/typescript/module/specs/MarkdownSession.nitro.d.ts +12 -0
- package/lib/typescript/module/specs/MarkdownSession.nitro.d.ts.map +1 -0
- package/lib/typescript/module/theme.d.ts +65 -0
- package/lib/typescript/module/theme.d.ts.map +1 -0
- package/lib/typescript/module/use-markdown-stream.d.ts +22 -0
- package/lib/typescript/module/use-markdown-stream.d.ts.map +1 -0
- package/nitro.json +19 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/NitroMarkdown+autolinking.cmake +82 -0
- package/nitrogen/generated/android/NitroMarkdown+autolinking.gradle +27 -0
- package/nitrogen/generated/android/NitroMarkdownOnLoad.cpp +56 -0
- package/nitrogen/generated/android/NitroMarkdownOnLoad.hpp +25 -0
- package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
- package/nitrogen/generated/android/c++/JHybridMarkdownSessionSpec.cpp +91 -0
- package/nitrogen/generated/android/c++/JHybridMarkdownSessionSpec.hpp +70 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/nitromarkdown/Func_void.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/nitromarkdown/HybridMarkdownSessionSpec.kt +78 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/nitromarkdown/NitroMarkdownOnLoad.kt +35 -0
- package/nitrogen/generated/ios/NitroMarkdown+autolinking.rb +60 -0
- package/nitrogen/generated/ios/NitroMarkdown-Swift-Cxx-Bridge.cpp +41 -0
- package/nitrogen/generated/ios/NitroMarkdown-Swift-Cxx-Bridge.hpp +93 -0
- package/nitrogen/generated/ios/NitroMarkdown-Swift-Cxx-Umbrella.hpp +45 -0
- package/nitrogen/generated/ios/NitroMarkdownAutolinking.mm +43 -0
- package/nitrogen/generated/ios/NitroMarkdownAutolinking.swift +26 -0
- package/nitrogen/generated/ios/c++/HybridMarkdownSessionSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridMarkdownSessionSpecSwift.hpp +108 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +47 -0
- package/nitrogen/generated/ios/swift/HybridMarkdownSessionSpec.swift +59 -0
- package/nitrogen/generated/ios/swift/HybridMarkdownSessionSpec_cxx.swift +190 -0
- package/nitrogen/generated/shared/c++/HybridMarkdownParserSpec.cpp +22 -0
- package/nitrogen/generated/shared/c++/HybridMarkdownParserSpec.hpp +65 -0
- package/nitrogen/generated/shared/c++/HybridMarkdownSessionSpec.cpp +26 -0
- package/nitrogen/generated/shared/c++/HybridMarkdownSessionSpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/ParserOptions.hpp +87 -0
- package/package.json +134 -0
- package/react-native-nitro-markdown.podspec +42 -0
- package/src/Markdown.nitro.ts +12 -0
- package/src/MarkdownContext.ts +98 -0
- package/src/MarkdownSession.ts +8 -0
- package/src/default-markdown-renderer.tsx +261 -0
- package/src/headless.ts +171 -0
- package/src/index.ts +52 -0
- package/src/markdown-stream.tsx +32 -0
- package/src/markdown.tsx +521 -0
- package/src/renderers/blockquote.tsx +30 -0
- package/src/renderers/code.tsx +112 -0
- package/src/renderers/heading.tsx +66 -0
- package/src/renderers/horizontal-rule.tsx +23 -0
- package/src/renderers/image.tsx +204 -0
- package/src/renderers/link.tsx +33 -0
- package/src/renderers/list.tsx +123 -0
- package/src/renderers/math.tsx +147 -0
- package/src/renderers/paragraph.tsx +45 -0
- package/src/renderers/table.tsx +370 -0
- package/src/specs/MarkdownSession.nitro.ts +14 -0
- package/src/theme.ts +243 -0
- 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
|
+
}
|