react-native-marked 1.6.13 → 2.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -8
- package/dist/commonjs/components/MDImage.js.map +1 -1
- package/dist/commonjs/index.js +8 -0
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/lib/Markdown.js +5 -1
- package/dist/commonjs/lib/Markdown.js.map +1 -1
- package/dist/commonjs/lib/Parser.js +84 -80
- package/dist/commonjs/lib/Parser.js.map +1 -1
- package/dist/commonjs/lib/Renderer.js +109 -47
- package/dist/commonjs/lib/Renderer.js.map +1 -1
- package/dist/commonjs/lib/__perf__/Markdown.perf-test.js +196 -0
- package/dist/commonjs/lib/__perf__/Markdown.perf-test.js.map +1 -0
- package/dist/commonjs/lib/types.js.map +1 -1
- package/dist/commonjs/theme/colors.js.map +1 -1
- package/dist/commonjs/theme/spacing.js.map +1 -1
- package/dist/commonjs/theme/styles.js.map +1 -1
- package/dist/commonjs/theme/types.js.map +1 -1
- package/dist/commonjs/utils/handlers.js.map +1 -1
- package/dist/commonjs/utils/url.js.map +1 -1
- package/dist/module/components/MDImage.js.map +1 -1
- package/dist/module/index.js +2 -0
- package/dist/module/index.js.map +1 -1
- package/dist/module/lib/Markdown.js +4 -1
- package/dist/module/lib/Markdown.js.map +1 -1
- package/dist/module/lib/Parser.js +84 -77
- package/dist/module/lib/Parser.js.map +1 -1
- package/dist/module/lib/Renderer.js +108 -46
- package/dist/module/lib/Renderer.js.map +1 -1
- package/dist/module/lib/__perf__/Markdown.perf-test.js +188 -0
- package/dist/module/lib/__perf__/Markdown.perf-test.js.map +1 -0
- package/dist/module/lib/types.js.map +1 -1
- package/dist/module/theme/colors.js.map +1 -1
- package/dist/module/theme/spacing.js.map +1 -1
- package/dist/module/theme/styles.js.map +1 -1
- package/dist/module/theme/types.js.map +1 -1
- package/dist/module/utils/handlers.js.map +1 -1
- package/dist/module/utils/url.js.map +1 -1
- package/dist/typescript/{src/components → components}/MDImage.d.ts +1 -1
- package/dist/typescript/components/MDImage.d.ts.map +1 -0
- package/dist/typescript/index.d.ts +7 -0
- package/dist/typescript/index.d.ts.map +1 -0
- package/dist/typescript/{src/lib → lib}/Markdown.d.ts +1 -1
- package/dist/typescript/lib/Markdown.d.ts.map +1 -0
- package/dist/typescript/lib/Parser.d.ts.map +1 -0
- package/dist/typescript/lib/Renderer.d.ts +32 -0
- package/dist/typescript/lib/Renderer.d.ts.map +1 -0
- package/dist/typescript/lib/__perf__/Markdown.perf-test.d.ts +2 -0
- package/dist/typescript/lib/__perf__/Markdown.perf-test.d.ts.map +1 -0
- package/dist/typescript/lib/types.d.ts +34 -0
- package/dist/typescript/lib/types.d.ts.map +1 -0
- package/dist/typescript/theme/colors.d.ts.map +1 -0
- package/dist/typescript/theme/spacing.d.ts.map +1 -0
- package/dist/typescript/{src/theme → theme}/styles.d.ts +1 -1
- package/dist/typescript/theme/styles.d.ts.map +1 -0
- package/dist/typescript/theme/types.d.ts.map +1 -0
- package/dist/typescript/utils/handlers.d.ts.map +1 -0
- package/dist/typescript/utils/url.d.ts.map +1 -0
- package/package.json +20 -20
- package/src/components/MDImage.tsx +1 -1
- package/src/index.ts +8 -0
- package/src/lib/Markdown.tsx +10 -3
- package/src/lib/Parser.tsx +50 -64
- package/src/lib/Renderer.tsx +139 -64
- package/src/lib/__perf__/Markdown.perf-test.tsx +186 -0
- package/src/lib/types.ts +48 -2
- package/src/theme/styles.ts +2 -2
- package/dist/commonjs/utils/string.js +0 -17
- package/dist/commonjs/utils/string.js.map +0 -1
- package/dist/module/utils/string.js +0 -8
- package/dist/module/utils/string.js.map +0 -1
- package/dist/typescript/dangerfile.d.ts +0 -2
- package/dist/typescript/dangerfile.d.ts.map +0 -1
- package/dist/typescript/src/components/MDImage.d.ts.map +0 -1
- package/dist/typescript/src/index.d.ts +0 -3
- package/dist/typescript/src/index.d.ts.map +0 -1
- package/dist/typescript/src/lib/Markdown.d.ts.map +0 -1
- package/dist/typescript/src/lib/Parser.d.ts.map +0 -1
- package/dist/typescript/src/lib/Renderer.d.ts +0 -14
- package/dist/typescript/src/lib/Renderer.d.ts.map +0 -1
- package/dist/typescript/src/lib/types.d.ts +0 -13
- package/dist/typescript/src/lib/types.d.ts.map +0 -1
- package/dist/typescript/src/theme/colors.d.ts.map +0 -1
- package/dist/typescript/src/theme/spacing.d.ts.map +0 -1
- package/dist/typescript/src/theme/styles.d.ts.map +0 -1
- package/dist/typescript/src/theme/types.d.ts.map +0 -1
- package/dist/typescript/src/utils/handlers.d.ts.map +0 -1
- package/dist/typescript/src/utils/string.d.ts +0 -6
- package/dist/typescript/src/utils/string.d.ts.map +0 -1
- package/dist/typescript/src/utils/url.d.ts.map +0 -1
- package/src/utils/string.ts +0 -7
- /package/dist/typescript/{src/lib → lib}/Parser.d.ts +0 -0
- /package/dist/typescript/{src/theme → theme}/colors.d.ts +0 -0
- /package/dist/typescript/{src/theme → theme}/spacing.d.ts +0 -0
- /package/dist/typescript/{src/theme → theme}/types.d.ts +0 -0
- /package/dist/typescript/{src/utils → utils}/handlers.d.ts +0 -0
- /package/dist/typescript/{src/utils → utils}/url.d.ts +0 -0
package/README.md
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
[](https://www.npmjs.com/package/react-native-marked)
|
|
7
7
|
[](https://www.npmjs.com/package/react-native-marked)
|
|
8
8
|
|
|
9
|
-
Markdown renderer for React Native powered by
|
|
9
|
+
Markdown renderer for React Native powered by
|
|
10
|
+
[marked.js](https://marked.js.org/) with built-in theming support
|
|
10
11
|
|
|
11
12
|
## Installation
|
|
12
13
|
|
|
@@ -16,9 +17,9 @@ yarn add react-native-marked
|
|
|
16
17
|
|
|
17
18
|
## Usage
|
|
18
19
|
|
|
19
|
-
```
|
|
20
|
-
import * as React from
|
|
21
|
-
import Markdown from
|
|
20
|
+
```tsx
|
|
21
|
+
import * as React from "react";
|
|
22
|
+
import Markdown from "react-native-marked";
|
|
22
23
|
|
|
23
24
|
const ExampleComponent = () => {
|
|
24
25
|
return (
|
|
@@ -45,9 +46,10 @@ export default ExampleComponent;
|
|
|
45
46
|
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- |
|
|
46
47
|
| value | Markdown value | string | false |
|
|
47
48
|
| flatListProps | Props for customizing the underlying FlatList used | `Omit<FlatListProps<ReactNode>, 'data' \| 'renderItem' \| 'horizontal'>`<br><br><br>(`'data'`, `'renderItem'`, and `'horizontal'` props are omitted and cannot be overridden.) | true |
|
|
48
|
-
| styles | Styles for parsed components | [MarkedStyles](https://github.com/gmsgowtham/react-native-marked/blob/
|
|
49
|
-
| theme | Props for customizing colors and spacing for all components,and it will get overridden with custom component style applied via 'styles' prop | [UserTheme](https://github.com/gmsgowtham/react-native-marked/blob/
|
|
49
|
+
| styles | Styles for parsed components | [MarkedStyles](https://github.com/gmsgowtham/react-native-marked/blob/main/src/theme/types.ts#L5) | true |
|
|
50
|
+
| theme | Props for customizing colors and spacing for all components,and it will get overridden with custom component style applied via 'styles' prop | [UserTheme](https://github.com/gmsgowtham/react-native-marked/blob/main/src/theme/types.ts#L28) | true |
|
|
50
51
|
| baseUrl | A prefix url for any relative link | string | true |
|
|
52
|
+
| renderer | Custom component Renderer | [RendererInterface](https://github.com/gmsgowtham/react-native-marked/blob/main/src/lib/types.ts#L25) | true |
|
|
51
53
|
|
|
52
54
|
## Supported elements
|
|
53
55
|
|
|
@@ -68,6 +70,58 @@ Ref: [CommonMark](https://commonmark.org/help/)
|
|
|
68
70
|
|
|
69
71
|
> HTML will be treated as plain text
|
|
70
72
|
|
|
73
|
+
## Using custom components
|
|
74
|
+
|
|
75
|
+
```tsx
|
|
76
|
+
import React, { ReactNode } from "react";
|
|
77
|
+
import { Text } from "react-native";
|
|
78
|
+
import type { ImageStyle, TextStyle } from "react-native";
|
|
79
|
+
import Markdown, { Renderer } from "react-native-marked";
|
|
80
|
+
import type { RendererInterface } from "react-native-marked";
|
|
81
|
+
import FastImage from "react-native-fast-image";
|
|
82
|
+
|
|
83
|
+
class CustomRenderer extends Renderer implements RendererInterface {
|
|
84
|
+
constructor() {
|
|
85
|
+
super();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
codespan(text: string, _styles?: TextStyle): ReactNode {
|
|
89
|
+
return (
|
|
90
|
+
<Text key={this.getKey()} style={{ backgroundColor: "#ff0000" }}>
|
|
91
|
+
{text}
|
|
92
|
+
</Text>
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
image(uri: string, _alt?: string, _style?: ImageStyle): ReactNode {
|
|
97
|
+
return (
|
|
98
|
+
<FastImage
|
|
99
|
+
key={this.getKey()}
|
|
100
|
+
style={{ width: 200, height: 200 }}
|
|
101
|
+
source={{ uri: uri }}
|
|
102
|
+
resizeMode={FastImage.resizeMode.contain}
|
|
103
|
+
/>
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const renderer = new CustomRenderer();
|
|
109
|
+
|
|
110
|
+
const ExampleComponent = () => {
|
|
111
|
+
return (
|
|
112
|
+
<Markdown
|
|
113
|
+
value={"`Hello world`"}
|
|
114
|
+
flatListProps={{
|
|
115
|
+
initialNumToRender: 8,
|
|
116
|
+
}}
|
|
117
|
+
renderer={renderer}
|
|
118
|
+
/>
|
|
119
|
+
);
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
export default ExampleComponent;
|
|
123
|
+
```
|
|
124
|
+
|
|
71
125
|
## Screenshots
|
|
72
126
|
|
|
73
127
|
| Dark Theme | Light Theme |
|
|
@@ -76,7 +130,8 @@ Ref: [CommonMark](https://commonmark.org/help/)
|
|
|
76
130
|
|
|
77
131
|
## Contributing
|
|
78
132
|
|
|
79
|
-
See the [contributing guide](CONTRIBUTING.md) to learn how to contribute to the
|
|
133
|
+
See the [contributing guide](CONTRIBUTING.md) to learn how to contribute to the
|
|
134
|
+
repository and the development workflow.
|
|
80
135
|
|
|
81
136
|
## License
|
|
82
137
|
|
|
@@ -84,7 +139,8 @@ MIT
|
|
|
84
139
|
|
|
85
140
|
---
|
|
86
141
|
|
|
87
|
-
Made with
|
|
142
|
+
Made with
|
|
143
|
+
[create-react-native-library](https://github.com/callstack/react-native-builder-bob)
|
|
88
144
|
|
|
89
145
|
## Built with
|
|
90
146
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MDImage","uri","alt","style","useEffect","Image","prefetch","undefined","memo"],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":["MDImage","uri","alt","style","useEffect","Image","prefetch","undefined","memo"],"sourceRoot":"../../../src","sources":["components/MDImage.tsx"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;AAQA,MAAMA,OAAO,GAAG,QAAuC;EAAA,IAAtC;IAAEC,GAAF;IAAOC,GAAP;IAAYC;EAAZ,CAAsC;EACtD,IAAAC,gBAAA,EAAU,MAAM;IACfC,kBAAA,CAAMC,QAAN,CAAeL,GAAf;EACA,CAFD,EAEG,CAACA,GAAD,CAFH;EAIA,oBACC,6BAAC,4BAAD;IACC,iBAAiB,EAAC,OADnB;IAEC,kBAAkB,EAAEC,GAAG,IAAI,OAF5B;IAGC,iBAAiB,EAAEK,SAHpB;IAIC,MAAM,EAAE;MAAEN;IAAF,CAJT;IAKC,UAAU,EAAC,OALZ;IAMC,KAAK,EAAEE;EANR,EADD;AAUA,CAfD;;4BAiBe,IAAAK,WAAA,EAAKR,OAAL,C"}
|
package/dist/commonjs/index.js
CHANGED
|
@@ -3,10 +3,18 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "Renderer", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _Renderer.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
6
12
|
exports.default = void 0;
|
|
7
13
|
|
|
8
14
|
var _Markdown = _interopRequireDefault(require("./lib/Markdown"));
|
|
9
15
|
|
|
16
|
+
var _Renderer = _interopRequireDefault(require("./lib/Renderer"));
|
|
17
|
+
|
|
10
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
19
|
|
|
12
20
|
var _default = _Markdown.default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Markdown"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["Markdown"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;;;eASeA,iB"}
|
|
@@ -13,6 +13,8 @@ var _marked = require("marked");
|
|
|
13
13
|
|
|
14
14
|
var _Parser = _interopRequireDefault(require("./Parser"));
|
|
15
15
|
|
|
16
|
+
var _Renderer = _interopRequireDefault(require("./Renderer"));
|
|
17
|
+
|
|
16
18
|
var _styles = _interopRequireDefault(require("../theme/styles"));
|
|
17
19
|
|
|
18
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -29,13 +31,15 @@ const Markdown = _ref => {
|
|
|
29
31
|
flatListProps,
|
|
30
32
|
theme,
|
|
31
33
|
baseUrl,
|
|
34
|
+
renderer,
|
|
32
35
|
styles: userStyles
|
|
33
36
|
} = _ref;
|
|
34
37
|
const colorScheme = (0, _reactNative.useColorScheme)();
|
|
35
38
|
const styles = (0, _react.useMemo)(() => (0, _styles.default)(userStyles, colorScheme, theme), [userStyles, colorScheme, theme]);
|
|
36
39
|
const parser = (0, _react.useMemo)(() => new _Parser.default({
|
|
37
40
|
styles,
|
|
38
|
-
baseUrl
|
|
41
|
+
baseUrl,
|
|
42
|
+
renderer: renderer ?? new _Renderer.default()
|
|
39
43
|
}), [styles, baseUrl]);
|
|
40
44
|
const rnElements = (0, _react.useMemo)(() => {
|
|
41
45
|
const tokens = _marked.marked.lexer(value, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Markdown","value","flatListProps","theme","baseUrl","styles","userStyles","colorScheme","useColorScheme","useMemo","getStyles","parser","Parser","rnElements","tokens","marked","lexer","mangle","gfm","parse","renderItem","useCallback","item","keyExtractor","_","index","toString","container","memo"],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":["Markdown","value","flatListProps","theme","baseUrl","renderer","styles","userStyles","colorScheme","useColorScheme","useMemo","getStyles","parser","Parser","Renderer","rnElements","tokens","marked","lexer","mangle","gfm","parse","renderItem","useCallback","item","keyExtractor","_","index","toString","container","memo"],"sourceRoot":"../../../src","sources":["lib/Markdown.tsx"],"mappings":";;;;;;;AAAA;;AAOA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAGA,MAAMA,QAAQ,GAAG,QAOI;EAAA,IAPH;IACjBC,KADiB;IAEjBC,aAFiB;IAGjBC,KAHiB;IAIjBC,OAJiB;IAKjBC,QALiB;IAMjBC,MAAM,EAAEC;EANS,CAOG;EACpB,MAAMC,WAAW,GAAG,IAAAC,2BAAA,GAApB;EACA,MAAMH,MAAM,GAAG,IAAAI,cAAA,EACd,MAAM,IAAAC,eAAA,EAAUJ,UAAV,EAAsBC,WAAtB,EAAmCL,KAAnC,CADQ,EAEd,CAACI,UAAD,EAAaC,WAAb,EAA0BL,KAA1B,CAFc,CAAf;EAKA,MAAMS,MAAM,GAAG,IAAAF,cAAA,EACd,MACC,IAAIG,eAAJ,CAAW;IACVP,MADU;IAEVF,OAFU;IAGVC,QAAQ,EAAEA,QAAQ,IAAI,IAAIS,iBAAJ;EAHZ,CAAX,CAFa,EAOd,CAACR,MAAD,EAASF,OAAT,CAPc,CAAf;EAUA,MAAMW,UAAU,GAAG,IAAAL,cAAA,EAAQ,MAAM;IAChC,MAAMM,MAAM,GAAGC,cAAA,CAAOC,KAAP,CAAajB,KAAb,EAAoB;MAAEkB,MAAM,EAAE,KAAV;MAAiBC,GAAG,EAAE;IAAtB,CAApB,CAAf;;IACA,OAAOR,MAAM,CAACS,KAAP,CAAaL,MAAb,CAAP;EACA,CAHkB,EAGhB,CAACf,KAAD,EAAQK,MAAR,EAAgBF,OAAhB,CAHgB,CAAnB;EAKA,MAAMkB,UAAU,GAAG,IAAAC,kBAAA,EAAY,SAAmC;IAAA,IAAlC;MAAEC;IAAF,CAAkC;IACjE,OAAOA,IAAP;EACA,CAFkB,EAEhB,EAFgB,CAAnB;EAIA,MAAMC,YAAY,GAAG,IAAAF,kBAAA,EACpB,CAACG,CAAD,EAAeC,KAAf,KAAiCA,KAAK,CAACC,QAAN,EADb,EAEpB,EAFoB,CAArB;EAKA,oBACC,6BAAC,qBAAD;IACC,qBAAqB,MADtB;IAEC,YAAY,EAAEH,YAFf;IAGC,mBAAmB,EAAE,CAHtB;IAIC,kBAAkB,EAAE,CAJrB;IAKC,KAAK,EAAEnB,MAAM,CAACuB;EALf,GAMK3B,aANL;IAOC,IAAI,EAAEa,UAPP;IAQC,UAAU,EAAEO;EARb,GADD;AAYA,CAlDD;;4BAoDe,IAAAQ,WAAA,EAAK9B,QAAL,C"}
|
|
@@ -5,69 +5,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
-
var _Renderer = _interopRequireDefault(require("./Renderer"));
|
|
9
|
-
|
|
10
8
|
var _url = require("./../utils/url");
|
|
11
9
|
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
15
|
-
|
|
16
10
|
class Parser {
|
|
17
11
|
constructor(options) {
|
|
18
|
-
_defineProperty(this, "renderer", void 0);
|
|
19
|
-
|
|
20
|
-
_defineProperty(this, "styles", void 0);
|
|
21
|
-
|
|
22
|
-
_defineProperty(this, "headingStylesMap", void 0);
|
|
23
|
-
|
|
24
|
-
_defineProperty(this, "baseUrl", void 0);
|
|
25
|
-
|
|
26
|
-
_defineProperty(this, "getNormalizedSiblingNodesForBlockAndInlineTokens", (tokens, textStyle) => {
|
|
27
|
-
let tokenRenderQueue = [];
|
|
28
|
-
const siblingNodes = [];
|
|
29
|
-
tokens.forEach(t => {
|
|
30
|
-
/**
|
|
31
|
-
* To avoid inlining images
|
|
32
|
-
* Currently supports images, link images
|
|
33
|
-
* Note: to be extend for other token types
|
|
34
|
-
*/
|
|
35
|
-
if (t.type === "image" || t.type === "link" && t.tokens && t.tokens[0] && t.tokens[0].type === "image") {
|
|
36
|
-
// Render existing inline tokens in the queue
|
|
37
|
-
const parsed = this._parse(tokenRenderQueue);
|
|
38
|
-
|
|
39
|
-
if (parsed.length > 0) {
|
|
40
|
-
siblingNodes.push(this.renderer.getTextNode(parsed, textStyle));
|
|
41
|
-
} // Render the current block token
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if (t.type === "image") {
|
|
45
|
-
siblingNodes.push(this._parseToken(t));
|
|
46
|
-
} else if (t.type === "link") {
|
|
47
|
-
const imageToken = t.tokens[0];
|
|
48
|
-
const href = (0, _url.getValidURL)(this.baseUrl, t.href);
|
|
49
|
-
siblingNodes.push(this.renderer.getImageLinkNode(href, imageToken.href, imageToken.text || imageToken.title, this.styles.image));
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
tokenRenderQueue = [];
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
tokenRenderQueue = [...tokenRenderQueue, t];
|
|
57
|
-
});
|
|
58
|
-
/* Remaining temp tokens if any */
|
|
59
|
-
|
|
60
|
-
if (tokenRenderQueue.length > 0) {
|
|
61
|
-
siblingNodes.push(this.renderer.getTextNode(this._parse(tokenRenderQueue), {}));
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return siblingNodes;
|
|
65
|
-
});
|
|
66
|
-
|
|
67
12
|
this.styles = { ...options.styles
|
|
68
13
|
};
|
|
69
14
|
this.baseUrl = options.baseUrl ?? "";
|
|
70
|
-
this.renderer =
|
|
15
|
+
this.renderer = options.renderer;
|
|
71
16
|
this.headingStylesMap = {
|
|
72
17
|
1: this.styles.h1,
|
|
73
18
|
2: this.styles.h2,
|
|
@@ -98,54 +43,59 @@ class Parser {
|
|
|
98
43
|
|
|
99
44
|
case "paragraph":
|
|
100
45
|
{
|
|
101
|
-
const
|
|
102
|
-
return this.renderer.
|
|
46
|
+
const children = this.getNormalizedSiblingNodesForBlockAndInlineTokens(token.tokens, this.styles.text);
|
|
47
|
+
return this.renderer.paragraph(children, this.styles.paragraph);
|
|
103
48
|
}
|
|
104
49
|
|
|
105
50
|
case "blockquote":
|
|
106
51
|
{
|
|
107
|
-
|
|
52
|
+
const children = this.parse(token.tokens);
|
|
53
|
+
return this.renderer.blockquote(children, this.styles.blockquote);
|
|
108
54
|
}
|
|
109
55
|
|
|
110
56
|
case "heading":
|
|
111
57
|
{
|
|
112
58
|
const styles = this.headingStylesMap[token.depth];
|
|
113
|
-
|
|
59
|
+
|
|
60
|
+
const children = this._parse(token.tokens, styles);
|
|
61
|
+
|
|
62
|
+
return this.renderer.heading(children, styles);
|
|
114
63
|
}
|
|
115
64
|
|
|
116
65
|
case "code":
|
|
117
66
|
{
|
|
118
|
-
return this.renderer.
|
|
67
|
+
return this.renderer.code(token.text, token.lang, this.styles.code, this.styles.em);
|
|
119
68
|
}
|
|
120
69
|
|
|
121
70
|
case "hr":
|
|
122
71
|
{
|
|
123
|
-
return this.renderer.
|
|
72
|
+
return this.renderer.hr(this.styles.hr);
|
|
124
73
|
}
|
|
125
74
|
|
|
126
75
|
case "list":
|
|
127
76
|
{
|
|
128
77
|
const li = token.items.map(item => {
|
|
129
|
-
const children = item.tokens.
|
|
78
|
+
const children = item.tokens.flatMap(cItem => {
|
|
130
79
|
if (cItem.type === "text") {
|
|
131
80
|
/* getViewNode since tokens could contain a block like elements (i.e. img) */
|
|
132
81
|
const childTokens = cItem.tokens || [];
|
|
133
|
-
const listChildren = this.getNormalizedSiblingNodesForBlockAndInlineTokens(childTokens, this.styles.li);
|
|
134
|
-
|
|
82
|
+
const listChildren = this.getNormalizedSiblingNodesForBlockAndInlineTokens(childTokens, this.styles.li); // return this.renderer.listItem(listChildren, this.styles.li);
|
|
83
|
+
|
|
84
|
+
return listChildren;
|
|
135
85
|
}
|
|
136
86
|
/* Parse the nested token */
|
|
137
87
|
|
|
138
88
|
|
|
139
89
|
return this._parseToken(cItem);
|
|
140
90
|
});
|
|
141
|
-
return this.renderer.
|
|
91
|
+
return this.renderer.listItem(children, this.styles.li);
|
|
142
92
|
});
|
|
143
|
-
return this.renderer.
|
|
93
|
+
return this.renderer.list(token.ordered, li, this.styles.list, this.styles.li);
|
|
144
94
|
}
|
|
145
95
|
|
|
146
96
|
case "escape":
|
|
147
97
|
{
|
|
148
|
-
return this.renderer.
|
|
98
|
+
return this.renderer.escape(token.text, { ...this.styles.text,
|
|
149
99
|
...styles
|
|
150
100
|
});
|
|
151
101
|
}
|
|
@@ -159,12 +109,15 @@ class Parser {
|
|
|
159
109
|
|
|
160
110
|
};
|
|
161
111
|
const href = (0, _url.getValidURL)(this.baseUrl, token.href);
|
|
162
|
-
|
|
112
|
+
|
|
113
|
+
const children = this._parse(token.tokens, linkStyle);
|
|
114
|
+
|
|
115
|
+
return this.renderer.link(children, href, linkStyle);
|
|
163
116
|
}
|
|
164
117
|
|
|
165
118
|
case "image":
|
|
166
119
|
{
|
|
167
|
-
return this.renderer.
|
|
120
|
+
return this.renderer.image(token.href, token.text || token.title, this.styles.image);
|
|
168
121
|
}
|
|
169
122
|
|
|
170
123
|
case "strong":
|
|
@@ -172,7 +125,10 @@ class Parser {
|
|
|
172
125
|
const boldStyle = { ...this.styles.strong,
|
|
173
126
|
...styles
|
|
174
127
|
};
|
|
175
|
-
|
|
128
|
+
|
|
129
|
+
const children = this._parse(token.tokens, boldStyle);
|
|
130
|
+
|
|
131
|
+
return this.renderer.strong(children, boldStyle);
|
|
176
132
|
}
|
|
177
133
|
|
|
178
134
|
case "em":
|
|
@@ -180,19 +136,22 @@ class Parser {
|
|
|
180
136
|
const italicStyle = { ...this.styles.em,
|
|
181
137
|
...styles
|
|
182
138
|
};
|
|
183
|
-
|
|
139
|
+
|
|
140
|
+
const children = this._parse(token.tokens, italicStyle);
|
|
141
|
+
|
|
142
|
+
return this.renderer.em(children, italicStyle);
|
|
184
143
|
}
|
|
185
144
|
|
|
186
145
|
case "codespan":
|
|
187
146
|
{
|
|
188
|
-
return this.renderer.
|
|
147
|
+
return this.renderer.codespan(token.text, { ...this.styles.codespan,
|
|
189
148
|
...styles
|
|
190
149
|
});
|
|
191
150
|
}
|
|
192
151
|
|
|
193
152
|
case "br":
|
|
194
153
|
{
|
|
195
|
-
return this.renderer.
|
|
154
|
+
return this.renderer.br();
|
|
196
155
|
}
|
|
197
156
|
|
|
198
157
|
case "del":
|
|
@@ -200,17 +159,21 @@ class Parser {
|
|
|
200
159
|
const strikethroughStyle = { ...this.styles.strikethrough,
|
|
201
160
|
...styles
|
|
202
161
|
};
|
|
203
|
-
|
|
162
|
+
|
|
163
|
+
const children = this._parse(token.tokens, strikethroughStyle);
|
|
164
|
+
|
|
165
|
+
return this.renderer.del(children, strikethroughStyle);
|
|
204
166
|
}
|
|
205
167
|
|
|
206
168
|
case "text":
|
|
169
|
+
return this.renderer.text(token.raw, { ...this.styles.text,
|
|
170
|
+
...styles
|
|
171
|
+
});
|
|
172
|
+
|
|
207
173
|
case "html":
|
|
208
174
|
{
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
return this.renderer.getTextNode(token.raw, { ...this.styles.text,
|
|
175
|
+
console.warn("react-native-marked: rendering html from markdown is not supported");
|
|
176
|
+
return this.renderer.html(token.raw, { ...this.styles.text,
|
|
214
177
|
...styles
|
|
215
178
|
});
|
|
216
179
|
}
|
|
@@ -223,6 +186,47 @@ class Parser {
|
|
|
223
186
|
}
|
|
224
187
|
}
|
|
225
188
|
|
|
189
|
+
getNormalizedSiblingNodesForBlockAndInlineTokens(tokens, textStyle) {
|
|
190
|
+
let tokenRenderQueue = [];
|
|
191
|
+
const siblingNodes = [];
|
|
192
|
+
tokens.forEach(t => {
|
|
193
|
+
/**
|
|
194
|
+
* To avoid inlining images
|
|
195
|
+
* Currently supports images, link images
|
|
196
|
+
* Note: to be extend for other token types
|
|
197
|
+
*/
|
|
198
|
+
if (t.type === "image" || t.type === "link" && t.tokens && t.tokens[0] && t.tokens[0].type === "image") {
|
|
199
|
+
// Render existing inline tokens in the queue
|
|
200
|
+
const parsed = this.parse(tokenRenderQueue);
|
|
201
|
+
|
|
202
|
+
if (parsed.length > 0) {
|
|
203
|
+
siblingNodes.push(this.renderer.text(parsed, textStyle));
|
|
204
|
+
} // Render the current block token
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
if (t.type === "image") {
|
|
208
|
+
siblingNodes.push(this._parseToken(t));
|
|
209
|
+
} else if (t.type === "link") {
|
|
210
|
+
const imageToken = t.tokens[0];
|
|
211
|
+
const href = (0, _url.getValidURL)(this.baseUrl, t.href);
|
|
212
|
+
siblingNodes.push(this.renderer.linkImage(href, imageToken.href, imageToken.text || imageToken.title, this.styles.image));
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
tokenRenderQueue = [];
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
tokenRenderQueue = [...tokenRenderQueue, t];
|
|
220
|
+
});
|
|
221
|
+
/* Remaining temp tokens if any */
|
|
222
|
+
|
|
223
|
+
if (tokenRenderQueue.length > 0) {
|
|
224
|
+
siblingNodes.push(this.renderer.text(this.parse(tokenRenderQueue), {}));
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return siblingNodes;
|
|
228
|
+
}
|
|
229
|
+
|
|
226
230
|
}
|
|
227
231
|
|
|
228
232
|
var _default = Parser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Parser","constructor","options","
|
|
1
|
+
{"version":3,"names":["Parser","constructor","options","styles","baseUrl","renderer","headingStylesMap","h1","h2","h3","h4","h5","h6","parse","tokens","_parse","elements","map","token","_parseToken","filter","element","type","children","getNormalizedSiblingNodesForBlockAndInlineTokens","text","paragraph","blockquote","depth","heading","code","lang","em","hr","li","items","item","flatMap","cItem","childTokens","listChildren","listItem","list","ordered","escape","linkStyle","link","href","getValidURL","image","title","boldStyle","strong","italicStyle","codespan","br","strikethroughStyle","strikethrough","del","raw","console","warn","html","textStyle","tokenRenderQueue","siblingNodes","forEach","t","parsed","length","push","imageToken","linkImage"],"sourceRoot":"../../../src","sources":["lib/Parser.tsx"],"mappings":";;;;;;;AAKA;;AAEA,MAAMA,MAAN,CAAa;EAMZC,WAAW,CAACC,OAAD,EAAyB;IACnC,KAAKC,MAAL,GAAc,EAAE,GAAGD,OAAO,CAACC;IAAb,CAAd;IACA,KAAKC,OAAL,GAAeF,OAAO,CAACE,OAAR,IAAmB,EAAlC;IACA,KAAKC,QAAL,GAAgBH,OAAO,CAACG,QAAxB;IACA,KAAKC,gBAAL,GAAwB;MACvB,GAAG,KAAKH,MAAL,CAAYI,EADQ;MAEvB,GAAG,KAAKJ,MAAL,CAAYK,EAFQ;MAGvB,GAAG,KAAKL,MAAL,CAAYM,EAHQ;MAIvB,GAAG,KAAKN,MAAL,CAAYO,EAJQ;MAKvB,GAAG,KAAKP,MAAL,CAAYQ,EALQ;MAMvB,GAAG,KAAKR,MAAL,CAAYS;IANQ,CAAxB;EAQA;;EAEDC,KAAK,CAACC,MAAD,EAAyB;IAC7B,OAAO,KAAKC,MAAL,CAAYD,MAAZ,CAAP;EACA;;EAEOC,MAAM,CACbD,MADa,EAEbX,MAFa,EAGZ;IACD,MAAMa,QAAqB,GAAGF,MAAM,CAACG,GAAP,CAAYC,KAAD,IAAW;MACnD,OAAO,KAAKC,WAAL,CAAiBD,KAAjB,EAAwBf,MAAxB,CAAP;IACA,CAF6B,CAA9B;IAGA,OAAOa,QAAQ,CAACI,MAAT,CAAiBC,OAAD,IAAaA,OAAO,KAAK,IAAzC,CAAP;EACA;;EAEOF,WAAW,CAClBD,KADkB,EAElBf,MAFkB,EAGN;IACZ,QAAQe,KAAK,CAACI,IAAd;MACC,KAAK,OAAL;QAAc;UACb,OAAO,IAAP;QACA;;MACD,KAAK,WAAL;QAAkB;UACjB,MAAMC,QAAQ,GAAG,KAAKC,gDAAL,CAChBN,KAAK,CAACJ,MADU,EAEhB,KAAKX,MAAL,CAAYsB,IAFI,CAAjB;UAKA,OAAO,KAAKpB,QAAL,CAAcqB,SAAd,CAAwBH,QAAxB,EAAkC,KAAKpB,MAAL,CAAYuB,SAA9C,CAAP;QACA;;MACD,KAAK,YAAL;QAAmB;UAClB,MAAMH,QAAQ,GAAG,KAAKV,KAAL,CAAWK,KAAK,CAACJ,MAAjB,CAAjB;UACA,OAAO,KAAKT,QAAL,CAAcsB,UAAd,CAAyBJ,QAAzB,EAAmC,KAAKpB,MAAL,CAAYwB,UAA/C,CAAP;QACA;;MACD,KAAK,SAAL;QAAgB;UACf,MAAMxB,MAAM,GAAG,KAAKG,gBAAL,CAAsBY,KAAK,CAACU,KAA5B,CAAf;;UACA,MAAML,QAAQ,GAAG,KAAKR,MAAL,CAAYG,KAAK,CAACJ,MAAlB,EAA0BX,MAA1B,CAAjB;;UACA,OAAO,KAAKE,QAAL,CAAcwB,OAAd,CAAsBN,QAAtB,EAAgCpB,MAAhC,CAAP;QACA;;MACD,KAAK,MAAL;QAAa;UACZ,OAAO,KAAKE,QAAL,CAAcyB,IAAd,CACNZ,KAAK,CAACO,IADA,EAENP,KAAK,CAACa,IAFA,EAGN,KAAK5B,MAAL,CAAY2B,IAHN,EAIN,KAAK3B,MAAL,CAAY6B,EAJN,CAAP;QAMA;;MACD,KAAK,IAAL;QAAW;UACV,OAAO,KAAK3B,QAAL,CAAc4B,EAAd,CAAiB,KAAK9B,MAAL,CAAY8B,EAA7B,CAAP;QACA;;MACD,KAAK,MAAL;QAAa;UACZ,MAAMC,EAAE,GAAGhB,KAAK,CAACiB,KAAN,CAAYlB,GAAZ,CAAiBmB,IAAD,IAAU;YACpC,MAAMb,QAAQ,GAAGa,IAAI,CAACtB,MAAL,CAAYuB,OAAZ,CAAqBC,KAAD,IAAW;cAC/C,IAAIA,KAAK,CAAChB,IAAN,KAAe,MAAnB,EAA2B;gBAC1B;gBACA,MAAMiB,WAAW,GAAID,KAAD,CAA8BxB,MAA9B,IAAwC,EAA5D;gBACA,MAAM0B,YAAY,GACjB,KAAKhB,gDAAL,CACCe,WADD,EAEC,KAAKpC,MAAL,CAAY+B,EAFb,CADD,CAH0B,CAQ1B;;gBACA,OAAOM,YAAP;cACA;cAED;;;cACA,OAAO,KAAKrB,WAAL,CAAiBmB,KAAjB,CAAP;YACA,CAfgB,CAAjB;YAiBA,OAAO,KAAKjC,QAAL,CAAcoC,QAAd,CAAuBlB,QAAvB,EAAiC,KAAKpB,MAAL,CAAY+B,EAA7C,CAAP;UACA,CAnBU,CAAX;UAqBA,OAAO,KAAK7B,QAAL,CAAcqC,IAAd,CACNxB,KAAK,CAACyB,OADA,EAENT,EAFM,EAGN,KAAK/B,MAAL,CAAYuC,IAHN,EAIN,KAAKvC,MAAL,CAAY+B,EAJN,CAAP;QAMA;;MACD,KAAK,QAAL;QAAe;UACd,OAAO,KAAK7B,QAAL,CAAcuC,MAAd,CAAqB1B,KAAK,CAACO,IAA3B,EAAiC,EACvC,GAAG,KAAKtB,MAAL,CAAYsB,IADwB;YAEvC,GAAGtB;UAFoC,CAAjC,CAAP;QAIA;;MACD,KAAK,MAAL;QAAa;UACZ;UACA;UACA,MAAM0C,SAAS,GAAG,EACjB,GAAG1C,MADc;YAEjB,GAAG,KAAKA,MAAL,CAAY2C,IAFE,CAEI;;UAFJ,CAAlB;UAIA,MAAMC,IAAI,GAAG,IAAAC,gBAAA,EAAY,KAAK5C,OAAjB,EAA0Bc,KAAK,CAAC6B,IAAhC,CAAb;;UACA,MAAMxB,QAAQ,GAAG,KAAKR,MAAL,CAAYG,KAAK,CAACJ,MAAlB,EAA0B+B,SAA1B,CAAjB;;UACA,OAAO,KAAKxC,QAAL,CAAcyC,IAAd,CAAmBvB,QAAnB,EAA6BwB,IAA7B,EAAmCF,SAAnC,CAAP;QACA;;MACD,KAAK,OAAL;QAAc;UACb,OAAO,KAAKxC,QAAL,CAAc4C,KAAd,CACN/B,KAAK,CAAC6B,IADA,EAEN7B,KAAK,CAACO,IAAN,IAAcP,KAAK,CAACgC,KAFd,EAGN,KAAK/C,MAAL,CAAY8C,KAHN,CAAP;QAKA;;MACD,KAAK,QAAL;QAAe;UACd,MAAME,SAAS,GAAG,EACjB,GAAG,KAAKhD,MAAL,CAAYiD,MADE;YAEjB,GAAGjD;UAFc,CAAlB;;UAIA,MAAMoB,QAAQ,GAAG,KAAKR,MAAL,CAAYG,KAAK,CAACJ,MAAlB,EAA0BqC,SAA1B,CAAjB;;UACA,OAAO,KAAK9C,QAAL,CAAc+C,MAAd,CAAqB7B,QAArB,EAA+B4B,SAA/B,CAAP;QACA;;MACD,KAAK,IAAL;QAAW;UACV,MAAME,WAAW,GAAG,EACnB,GAAG,KAAKlD,MAAL,CAAY6B,EADI;YAEnB,GAAG7B;UAFgB,CAApB;;UAIA,MAAMoB,QAAQ,GAAG,KAAKR,MAAL,CAAYG,KAAK,CAACJ,MAAlB,EAA0BuC,WAA1B,CAAjB;;UACA,OAAO,KAAKhD,QAAL,CAAc2B,EAAd,CAAiBT,QAAjB,EAA2B8B,WAA3B,CAAP;QACA;;MACD,KAAK,UAAL;QAAiB;UAChB,OAAO,KAAKhD,QAAL,CAAciD,QAAd,CAAuBpC,KAAK,CAACO,IAA7B,EAAmC,EACzC,GAAG,KAAKtB,MAAL,CAAYmD,QAD0B;YAEzC,GAAGnD;UAFsC,CAAnC,CAAP;QAIA;;MACD,KAAK,IAAL;QAAW;UACV,OAAO,KAAKE,QAAL,CAAckD,EAAd,EAAP;QACA;;MACD,KAAK,KAAL;QAAY;UACX,MAAMC,kBAAkB,GAAG,EAC1B,GAAG,KAAKrD,MAAL,CAAYsD,aADW;YAE1B,GAAGtD;UAFuB,CAA3B;;UAIA,MAAMoB,QAAQ,GAAG,KAAKR,MAAL,CAAYG,KAAK,CAACJ,MAAlB,EAA0B0C,kBAA1B,CAAjB;;UACA,OAAO,KAAKnD,QAAL,CAAcqD,GAAd,CAAkBnC,QAAlB,EAA4BiC,kBAA5B,CAAP;QACA;;MACD,KAAK,MAAL;QACC,OAAO,KAAKnD,QAAL,CAAcoB,IAAd,CAAmBP,KAAK,CAACyC,GAAzB,EAA8B,EACpC,GAAG,KAAKxD,MAAL,CAAYsB,IADqB;UAEpC,GAAGtB;QAFiC,CAA9B,CAAP;;MAID,KAAK,MAAL;QAAa;UACZyD,OAAO,CAACC,IAAR,CACC,oEADD;UAGA,OAAO,KAAKxD,QAAL,CAAcyD,IAAd,CAAmB5C,KAAK,CAACyC,GAAzB,EAA8B,EACpC,GAAG,KAAKxD,MAAL,CAAYsB,IADqB;YAEpC,GAAGtB;UAFiC,CAA9B,CAAP;QAIA;;MACD;QAAS;UACRyD,OAAO,CAACC,IAAR,CACE,oCAAmC3C,KAAK,CAACI,IAAK,uBADhD;UAGA,OAAO,IAAP;QACA;IAzIF;EA2IA;;EAEOE,gDAAgD,CACvDV,MADuD,EAEvDiD,SAFuD,EAGzC;IACd,IAAIC,gBAAgC,GAAG,EAAvC;IACA,MAAMC,YAAyB,GAAG,EAAlC;IACAnD,MAAM,CAACoD,OAAP,CAAgBC,CAAD,IAAO;MACrB;AACH;AACA;AACA;AACA;MACG,IACCA,CAAC,CAAC7C,IAAF,KAAW,OAAX,IACC6C,CAAC,CAAC7C,IAAF,KAAW,MAAX,IACA6C,CAAC,CAACrD,MADF,IAEAqD,CAAC,CAACrD,MAAF,CAAS,CAAT,CAFA,IAGAqD,CAAC,CAACrD,MAAF,CAAS,CAAT,EAAYQ,IAAZ,KAAqB,OALvB,EAME;QACD;QACA,MAAM8C,MAAM,GAAG,KAAKvD,KAAL,CAAWmD,gBAAX,CAAf;;QACA,IAAII,MAAM,CAACC,MAAP,GAAgB,CAApB,EAAuB;UACtBJ,YAAY,CAACK,IAAb,CAAkB,KAAKjE,QAAL,CAAcoB,IAAd,CAAmB2C,MAAnB,EAA2BL,SAA3B,CAAlB;QACA,CALA,CAOD;;;QACA,IAAII,CAAC,CAAC7C,IAAF,KAAW,OAAf,EAAwB;UACvB2C,YAAY,CAACK,IAAb,CAAkB,KAAKnD,WAAL,CAAiBgD,CAAjB,CAAlB;QACA,CAFD,MAEO,IAAIA,CAAC,CAAC7C,IAAF,KAAW,MAAf,EAAuB;UAC7B,MAAMiD,UAAU,GAAGJ,CAAC,CAACrD,MAAF,CAAS,CAAT,CAAnB;UACA,MAAMiC,IAAI,GAAG,IAAAC,gBAAA,EAAY,KAAK5C,OAAjB,EAA0B+D,CAAC,CAACpB,IAA5B,CAAb;UACAkB,YAAY,CAACK,IAAb,CACC,KAAKjE,QAAL,CAAcmE,SAAd,CACCzB,IADD,EAECwB,UAAU,CAACxB,IAFZ,EAGCwB,UAAU,CAAC9C,IAAX,IAAmB8C,UAAU,CAACrB,KAH/B,EAIC,KAAK/C,MAAL,CAAY8C,KAJb,CADD;QAQA;;QAEDe,gBAAgB,GAAG,EAAnB;QACA;MACA;;MACDA,gBAAgB,GAAG,CAAC,GAAGA,gBAAJ,EAAsBG,CAAtB,CAAnB;IACA,CAvCD;IAyCA;;IACA,IAAIH,gBAAgB,CAACK,MAAjB,GAA0B,CAA9B,EAAiC;MAChCJ,YAAY,CAACK,IAAb,CAAkB,KAAKjE,QAAL,CAAcoB,IAAd,CAAmB,KAAKZ,KAAL,CAAWmD,gBAAX,CAAnB,EAAiD,EAAjD,CAAlB;IACA;;IAED,OAAOC,YAAP;EACA;;AAxOW;;eA2OEjE,M"}
|