react-native-marked 1.0.0-alpha.2 → 1.0.1
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 +8 -6
- package/dist/commonjs/components/MDImage.js +5 -22
- package/dist/commonjs/components/MDImage.js.map +1 -1
- package/dist/commonjs/lib/Markdown.js +19 -11
- package/dist/commonjs/lib/Markdown.js.map +1 -1
- package/dist/commonjs/lib/Parser.js +38 -131
- package/dist/commonjs/lib/Parser.js.map +1 -1
- package/dist/commonjs/lib/Renderer.js +22 -13
- package/dist/commonjs/lib/Renderer.js.map +1 -1
- package/dist/commonjs/theme/colors.js +25 -0
- package/dist/commonjs/theme/colors.js.map +1 -0
- package/dist/commonjs/theme/styles.js +113 -0
- package/dist/commonjs/theme/styles.js.map +1 -0
- package/dist/commonjs/theme/theme.js +19 -0
- package/dist/commonjs/theme/theme.js.map +1 -0
- package/dist/commonjs/{types → theme}/types.js +0 -0
- package/dist/commonjs/theme/types.js.map +1 -0
- package/dist/module/components/MDImage.js +6 -22
- package/dist/module/components/MDImage.js.map +1 -1
- package/dist/module/lib/Markdown.js +18 -12
- package/dist/module/lib/Markdown.js.map +1 -1
- package/dist/module/lib/Parser.js +39 -130
- package/dist/module/lib/Parser.js.map +1 -1
- package/dist/module/lib/Renderer.js +19 -13
- package/dist/module/lib/Renderer.js.map +1 -1
- package/dist/module/theme/colors.js +18 -0
- package/dist/module/theme/colors.js.map +1 -0
- package/dist/module/theme/styles.js +102 -0
- package/dist/module/theme/styles.js.map +1 -0
- package/dist/module/theme/theme.js +7 -0
- package/dist/module/theme/theme.js.map +1 -0
- package/dist/module/{types → theme}/types.js +0 -0
- package/dist/module/theme/types.js.map +1 -0
- package/dist/typescript/components/MDImage.d.ts +1 -2
- package/dist/typescript/lib/Markdown.d.ts +6 -5
- package/dist/typescript/lib/Parser.d.ts +7 -5
- package/dist/typescript/lib/Renderer.d.ts +6 -6
- package/dist/typescript/theme/colors.d.ts +3 -0
- package/dist/typescript/theme/styles.d.ts +4 -0
- package/dist/typescript/theme/theme.d.ts +3 -0
- package/dist/typescript/theme/types.d.ts +25 -0
- package/package.json +13 -8
- package/src/components/MDImage.tsx +5 -28
- package/src/lib/Markdown.tsx +28 -10
- package/src/lib/Parser.tsx +163 -0
- package/src/lib/Renderer.tsx +32 -13
- package/src/theme/colors.ts +20 -0
- package/src/theme/styles.ts +117 -0
- package/src/theme/theme.ts +9 -0
- package/src/theme/types.ts +28 -0
- package/dist/commonjs/types/types.js.map +0 -1
- package/dist/module/types/types.js.map +0 -1
- package/dist/typescript/types/types.d.ts +0 -23
- package/src/lib/Parser.ts +0 -256
- package/src/types/types.ts +0 -25
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
|
|
10
|
+
var _theme = require("./theme");
|
|
11
|
+
|
|
12
|
+
const getFontStyles = theme => {
|
|
13
|
+
return _reactNative.StyleSheet.create({
|
|
14
|
+
regular: {
|
|
15
|
+
fontSize: 16,
|
|
16
|
+
lineHeight: 24,
|
|
17
|
+
color: theme.colors.text
|
|
18
|
+
},
|
|
19
|
+
heading: {
|
|
20
|
+
fontWeight: '500',
|
|
21
|
+
color: theme.colors.text
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const getStyles = (userStyles, colorScheme) => {
|
|
27
|
+
const theme = (0, _theme.getTheme)(colorScheme || 'light');
|
|
28
|
+
const fontStyle = getFontStyles(theme);
|
|
29
|
+
|
|
30
|
+
const defaultStyles = _reactNative.StyleSheet.create({
|
|
31
|
+
container: {
|
|
32
|
+
backgroundColor: theme.colors.background
|
|
33
|
+
},
|
|
34
|
+
em: { ...fontStyle.regular,
|
|
35
|
+
fontStyle: 'italic'
|
|
36
|
+
},
|
|
37
|
+
strong: { ...fontStyle.regular,
|
|
38
|
+
fontWeight: 'bold'
|
|
39
|
+
},
|
|
40
|
+
text: { ...fontStyle.regular
|
|
41
|
+
},
|
|
42
|
+
paragraph: { ...fontStyle.regular,
|
|
43
|
+
paddingVertical: 8
|
|
44
|
+
},
|
|
45
|
+
link: { ...fontStyle.regular,
|
|
46
|
+
fontStyle: 'italic',
|
|
47
|
+
color: theme.colors.link
|
|
48
|
+
},
|
|
49
|
+
blockquote: {
|
|
50
|
+
borderLeftColor: theme.colors.border,
|
|
51
|
+
paddingLeft: 16,
|
|
52
|
+
borderLeftWidth: 5,
|
|
53
|
+
opacity: 0.8
|
|
54
|
+
},
|
|
55
|
+
h1: {
|
|
56
|
+
fontSize: 32,
|
|
57
|
+
lineHeight: 40,
|
|
58
|
+
fontWeight: 'bold',
|
|
59
|
+
marginVertical: 8,
|
|
60
|
+
letterSpacing: 0
|
|
61
|
+
},
|
|
62
|
+
h2: { ...fontStyle.heading,
|
|
63
|
+
fontSize: 28,
|
|
64
|
+
lineHeight: 36,
|
|
65
|
+
marginVertical: 8
|
|
66
|
+
},
|
|
67
|
+
h3: { ...fontStyle.heading,
|
|
68
|
+
fontSize: 24,
|
|
69
|
+
lineHeight: 32,
|
|
70
|
+
marginVertical: 4
|
|
71
|
+
},
|
|
72
|
+
h4: { ...fontStyle.heading,
|
|
73
|
+
fontSize: 22,
|
|
74
|
+
lineHeight: 28,
|
|
75
|
+
marginVertical: 4
|
|
76
|
+
},
|
|
77
|
+
h5: { ...fontStyle.regular,
|
|
78
|
+
...fontStyle.heading,
|
|
79
|
+
marginVertical: 2
|
|
80
|
+
},
|
|
81
|
+
h6: { ...fontStyle.heading,
|
|
82
|
+
fontSize: 14,
|
|
83
|
+
lineHeight: 20,
|
|
84
|
+
marginVertical: 2
|
|
85
|
+
},
|
|
86
|
+
codespan: { ...fontStyle.regular,
|
|
87
|
+
fontStyle: 'italic',
|
|
88
|
+
backgroundColor: theme.colors.code,
|
|
89
|
+
fontWeight: '300'
|
|
90
|
+
},
|
|
91
|
+
code: {
|
|
92
|
+
padding: 16,
|
|
93
|
+
backgroundColor: theme.colors.code,
|
|
94
|
+
minWidth: '100%'
|
|
95
|
+
},
|
|
96
|
+
hr: {
|
|
97
|
+
borderBottomWidth: 1,
|
|
98
|
+
borderBottomColor: theme.colors.border,
|
|
99
|
+
marginVertical: 4
|
|
100
|
+
},
|
|
101
|
+
li: { ...fontStyle.regular,
|
|
102
|
+
flexShrink: 1
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
return { ...defaultStyles,
|
|
107
|
+
...userStyles
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
var _default = getStyles;
|
|
112
|
+
exports.default = _default;
|
|
113
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getFontStyles","theme","StyleSheet","create","regular","fontSize","lineHeight","color","colors","text","heading","fontWeight","getStyles","userStyles","colorScheme","getTheme","fontStyle","defaultStyles","container","backgroundColor","background","em","strong","paragraph","paddingVertical","link","blockquote","borderLeftColor","border","paddingLeft","borderLeftWidth","opacity","h1","marginVertical","letterSpacing","h2","h3","h4","h5","h6","codespan","code","padding","minWidth","hr","borderBottomWidth","borderBottomColor","li","flexShrink"],"sources":["styles.ts"],"sourcesContent":["import { ColorSchemeName, StyleSheet } from 'react-native';\nimport { getTheme } from './theme';\nimport type { MarkedStyles, Theme } from './types';\n\nconst getFontStyles = (theme: Theme) => {\n return StyleSheet.create({\n regular: {\n fontSize: 16,\n lineHeight: 24,\n color: theme.colors.text,\n },\n heading: {\n fontWeight: '500',\n color: theme.colors.text,\n },\n });\n};\n\nconst getStyles = (\n userStyles?: MarkedStyles,\n colorScheme?: ColorSchemeName\n): MarkedStyles => {\n const theme = getTheme(colorScheme || 'light');\n const fontStyle = getFontStyles(theme);\n const defaultStyles = StyleSheet.create<MarkedStyles>({\n container: {\n backgroundColor: theme.colors.background,\n },\n em: {\n ...fontStyle.regular,\n fontStyle: 'italic',\n },\n strong: {\n ...fontStyle.regular,\n fontWeight: 'bold',\n },\n text: { ...fontStyle.regular },\n paragraph: {\n ...fontStyle.regular,\n paddingVertical: 8,\n },\n link: {\n ...fontStyle.regular,\n fontStyle: 'italic',\n color: theme.colors.link,\n },\n blockquote: {\n borderLeftColor: theme.colors.border,\n paddingLeft: 16,\n borderLeftWidth: 5,\n opacity: 0.8,\n },\n h1: {\n fontSize: 32,\n lineHeight: 40,\n fontWeight: 'bold',\n marginVertical: 8,\n letterSpacing: 0,\n },\n h2: {\n ...fontStyle.heading,\n fontSize: 28,\n lineHeight: 36,\n marginVertical: 8,\n },\n h3: {\n ...fontStyle.heading,\n fontSize: 24,\n lineHeight: 32,\n marginVertical: 4,\n },\n h4: {\n ...fontStyle.heading,\n fontSize: 22,\n lineHeight: 28,\n marginVertical: 4,\n },\n h5: {\n ...fontStyle.regular,\n ...fontStyle.heading,\n marginVertical: 2,\n },\n h6: {\n ...fontStyle.heading,\n fontSize: 14,\n lineHeight: 20,\n marginVertical: 2,\n },\n codespan: {\n ...fontStyle.regular,\n fontStyle: 'italic',\n backgroundColor: theme.colors.code,\n fontWeight: '300',\n },\n code: {\n padding: 16,\n backgroundColor: theme.colors.code,\n minWidth: '100%',\n },\n hr: {\n borderBottomWidth: 1,\n borderBottomColor: theme.colors.border,\n marginVertical: 4,\n },\n li: {\n ...fontStyle.regular,\n flexShrink: 1,\n },\n });\n\n return {\n ...defaultStyles,\n ...userStyles,\n };\n};\n\nexport default getStyles;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getTheme = void 0;
|
|
7
|
+
|
|
8
|
+
var _colors = _interopRequireDefault(require("./colors"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
|
|
12
|
+
const getTheme = theme => {
|
|
13
|
+
return {
|
|
14
|
+
colors: _colors.default[theme || 'light']
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
exports.getTheme = getTheme;
|
|
19
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getTheme","theme","colors"],"sources":["theme.ts"],"sourcesContent":["import type { ColorSchemeName } from 'react-native';\nimport colors from './colors';\nimport type { Theme } from './types';\n\nexport const getTheme = (theme: ColorSchemeName): Theme => {\n return {\n colors: colors[theme || 'light'],\n };\n};\n"],"mappings":";;;;;;;AACA;;;;AAGO,MAAMA,QAAQ,GAAIC,KAAD,IAAmC;EACzD,OAAO;IACLC,MAAM,EAAEA,eAAA,CAAOD,KAAK,IAAI,OAAhB;EADH,CAAP;AAGD,CAJM"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { TextStyle, ViewStyle } from 'react-native';\n\nexport interface MarkedStyles {\n container?: ViewStyle;\n em?: TextStyle;\n strong?: TextStyle;\n text?: TextStyle;\n paragraph?: ViewStyle;\n link?: TextStyle;\n blockquote?: ViewStyle;\n h1?: TextStyle;\n h2?: TextStyle;\n h3?: TextStyle;\n h4?: TextStyle;\n h5?: TextStyle;\n h6?: TextStyle;\n codespan?: TextStyle;\n code?: ViewStyle;\n hr?: ViewStyle;\n list?: ViewStyle;\n li?: TextStyle;\n}\n\nexport type ColorKeys = 'background' | 'code' | 'link' | 'text' | 'border';\n\nexport interface Theme {\n colors: Record<ColorKeys, string>;\n}\n"],"mappings":""}
|
|
@@ -1,35 +1,19 @@
|
|
|
1
|
-
import React, { memo, useEffect
|
|
1
|
+
import React, { memo, useEffect } from 'react';
|
|
2
2
|
import { Image } from 'react-native';
|
|
3
|
-
import
|
|
3
|
+
import FitImage from 'react-native-fit-image';
|
|
4
4
|
|
|
5
5
|
const MDImage = _ref => {
|
|
6
6
|
let {
|
|
7
|
-
uri
|
|
8
|
-
width
|
|
7
|
+
uri
|
|
9
8
|
} = _ref;
|
|
10
|
-
const [height, setHeight] = useState(0);
|
|
11
9
|
useEffect(() => {
|
|
12
10
|
Image.prefetch(uri);
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
setHeight(heightCalc);
|
|
16
|
-
});
|
|
17
|
-
}, [uri, width, height]);
|
|
18
|
-
|
|
19
|
-
if (height < 1) {
|
|
20
|
-
return null;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
return /*#__PURE__*/React.createElement(FastImage, {
|
|
24
|
-
fallback: true,
|
|
11
|
+
}, [uri]);
|
|
12
|
+
return /*#__PURE__*/React.createElement(FitImage, {
|
|
25
13
|
source: {
|
|
26
14
|
uri
|
|
27
15
|
},
|
|
28
|
-
|
|
29
|
-
width: width,
|
|
30
|
-
height: height
|
|
31
|
-
}],
|
|
32
|
-
resizeMode: FastImage.resizeMode.cover
|
|
16
|
+
resizeMode: "cover"
|
|
33
17
|
});
|
|
34
18
|
};
|
|
35
19
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","memo","useEffect","
|
|
1
|
+
{"version":3,"names":["React","memo","useEffect","Image","FitImage","MDImage","uri","prefetch"],"sources":["MDImage.tsx"],"sourcesContent":["import React, { memo, useEffect } from 'react';\nimport { Image } from 'react-native';\nimport FitImage from 'react-native-fit-image';\n\ninterface MDImageProps {\n uri: string;\n}\n\nconst MDImage = ({ uri }: MDImageProps) => {\n useEffect(() => {\n Image.prefetch(uri);\n }, [uri]);\n\n return <FitImage source={{ uri }} resizeMode=\"cover\" />;\n};\n\nexport default memo(MDImage);\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,IAAhB,EAAsBC,SAAtB,QAAuC,OAAvC;AACA,SAASC,KAAT,QAAsB,cAAtB;AACA,OAAOC,QAAP,MAAqB,wBAArB;;AAMA,MAAMC,OAAO,GAAG,QAA2B;EAAA,IAA1B;IAAEC;EAAF,CAA0B;EACzCJ,SAAS,CAAC,MAAM;IACdC,KAAK,CAACI,QAAN,CAAeD,GAAf;EACD,CAFQ,EAEN,CAACA,GAAD,CAFM,CAAT;EAIA,oBAAO,oBAAC,QAAD;IAAU,MAAM,EAAE;MAAEA;IAAF,CAAlB;IAA2B,UAAU,EAAC;EAAtC,EAAP;AACD,CAND;;AAQA,4BAAeL,IAAI,CAACI,OAAD,CAAnB"}
|
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
2
|
|
|
3
|
-
import React, { useCallback } from 'react';
|
|
3
|
+
import React, { memo, useCallback, useMemo } from 'react';
|
|
4
|
+
import { FlatList, useColorScheme } from 'react-native';
|
|
4
5
|
import { marked } from 'marked';
|
|
5
6
|
import Parser from './Parser';
|
|
6
|
-
import
|
|
7
|
+
import getStyles from '../theme/styles';
|
|
7
8
|
|
|
8
9
|
const Markdown = _ref => {
|
|
9
10
|
let {
|
|
10
11
|
value,
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
flatListProps,
|
|
13
|
+
styles: userStyles
|
|
13
14
|
} = _ref;
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
const systemTheme = useColorScheme();
|
|
16
|
+
const styles = useMemo(() => getStyles(userStyles, systemTheme), [userStyles, systemTheme]);
|
|
17
|
+
const rnElements = useMemo(() => {
|
|
18
|
+
const parser = new Parser({
|
|
19
|
+
styles
|
|
20
|
+
});
|
|
21
|
+
const tokens = marked.lexer(value.trim());
|
|
22
|
+
return parser.parse(tokens);
|
|
23
|
+
}, [value, styles]);
|
|
19
24
|
const renderItem = useCallback(_ref2 => {
|
|
20
25
|
let {
|
|
21
26
|
item
|
|
@@ -27,12 +32,13 @@ const Markdown = _ref => {
|
|
|
27
32
|
keyExtractor: keyExtractor,
|
|
28
33
|
maxToRenderPerBatch: 8,
|
|
29
34
|
initialNumToRender: 8,
|
|
30
|
-
removeClippedSubviews: true
|
|
31
|
-
|
|
35
|
+
removeClippedSubviews: true,
|
|
36
|
+
style: styles.container
|
|
37
|
+
}, flatListProps, {
|
|
32
38
|
data: rnElements,
|
|
33
39
|
renderItem: renderItem
|
|
34
40
|
}));
|
|
35
41
|
};
|
|
36
42
|
|
|
37
|
-
export default Markdown;
|
|
43
|
+
export default /*#__PURE__*/memo(Markdown);
|
|
38
44
|
//# sourceMappingURL=Markdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","marked","Parser","
|
|
1
|
+
{"version":3,"names":["React","memo","useCallback","useMemo","FlatList","useColorScheme","marked","Parser","getStyles","Markdown","value","flatListProps","styles","userStyles","systemTheme","rnElements","parser","tokens","lexer","trim","parse","renderItem","item","keyExtractor","_","index","toString","container"],"sources":["Markdown.tsx"],"sourcesContent":["import React, { memo, ReactNode, useCallback, useMemo } from 'react';\nimport { FlatList, FlatListProps, useColorScheme } from 'react-native';\nimport { marked } from 'marked';\nimport Parser from './Parser';\nimport getStyles from '../theme/styles';\nimport type { MarkedStyles } from '../theme/types';\n\ninterface MarkdownProps {\n value: string;\n flatListProps?: Omit<\n FlatListProps<ReactNode>,\n 'data' | 'renderItem' | 'horizontal'\n >;\n styles?: MarkedStyles;\n}\n\nconst Markdown = ({\n value,\n flatListProps,\n styles: userStyles,\n}: MarkdownProps) => {\n const systemTheme = useColorScheme();\n const styles = useMemo(\n () => getStyles(userStyles, systemTheme),\n [userStyles, systemTheme]\n );\n\n const rnElements = useMemo(() => {\n const parser = new Parser({\n styles,\n });\n const tokens = marked.lexer(value.trim());\n\n return parser.parse(tokens);\n }, [value, styles]);\n\n const renderItem = useCallback(({ item }: { item: ReactNode }) => {\n return <>{item}</>;\n }, []);\n\n const keyExtractor = useCallback((_, index) => index.toString(), []);\n\n return (\n <FlatList\n keyExtractor={keyExtractor}\n maxToRenderPerBatch={8}\n initialNumToRender={8}\n removeClippedSubviews\n style={styles.container}\n {...flatListProps}\n data={rnElements}\n renderItem={renderItem}\n />\n );\n};\n\nexport default memo(Markdown);\n"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,IAAhB,EAAiCC,WAAjC,EAA8CC,OAA9C,QAA6D,OAA7D;AACA,SAASC,QAAT,EAAkCC,cAAlC,QAAwD,cAAxD;AACA,SAASC,MAAT,QAAuB,QAAvB;AACA,OAAOC,MAAP,MAAmB,UAAnB;AACA,OAAOC,SAAP,MAAsB,iBAAtB;;AAYA,MAAMC,QAAQ,GAAG,QAII;EAAA,IAJH;IAChBC,KADgB;IAEhBC,aAFgB;IAGhBC,MAAM,EAAEC;EAHQ,CAIG;EACnB,MAAMC,WAAW,GAAGT,cAAc,EAAlC;EACA,MAAMO,MAAM,GAAGT,OAAO,CACpB,MAAMK,SAAS,CAACK,UAAD,EAAaC,WAAb,CADK,EAEpB,CAACD,UAAD,EAAaC,WAAb,CAFoB,CAAtB;EAKA,MAAMC,UAAU,GAAGZ,OAAO,CAAC,MAAM;IAC/B,MAAMa,MAAM,GAAG,IAAIT,MAAJ,CAAW;MACxBK;IADwB,CAAX,CAAf;IAGA,MAAMK,MAAM,GAAGX,MAAM,CAACY,KAAP,CAAaR,KAAK,CAACS,IAAN,EAAb,CAAf;IAEA,OAAOH,MAAM,CAACI,KAAP,CAAaH,MAAb,CAAP;EACD,CAPyB,EAOvB,CAACP,KAAD,EAAQE,MAAR,CAPuB,CAA1B;EASA,MAAMS,UAAU,GAAGnB,WAAW,CAAC,SAAmC;IAAA,IAAlC;MAAEoB;IAAF,CAAkC;IAChE,oBAAO,0CAAGA,IAAH,CAAP;EACD,CAF6B,EAE3B,EAF2B,CAA9B;EAIA,MAAMC,YAAY,GAAGrB,WAAW,CAAC,CAACsB,CAAD,EAAIC,KAAJ,KAAcA,KAAK,CAACC,QAAN,EAAf,EAAiC,EAAjC,CAAhC;EAEA,oBACE,oBAAC,QAAD;IACE,YAAY,EAAEH,YADhB;IAEE,mBAAmB,EAAE,CAFvB;IAGE,kBAAkB,EAAE,CAHtB;IAIE,qBAAqB,MAJvB;IAKE,KAAK,EAAEX,MAAM,CAACe;EALhB,GAMMhB,aANN;IAOE,IAAI,EAAEI,UAPR;IAQE,UAAU,EAAEM;EARd,GADF;AAYD,CAtCD;;AAwCA,4BAAepB,IAAI,CAACQ,QAAD,CAAnB"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
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; }
|
|
2
2
|
|
|
3
|
-
import { StyleSheet } from 'react-native';
|
|
4
3
|
import Renderer from './Renderer';
|
|
5
4
|
|
|
6
5
|
class Parser {
|
|
@@ -9,21 +8,22 @@ class Parser {
|
|
|
9
8
|
|
|
10
9
|
_defineProperty(this, "styles", void 0);
|
|
11
10
|
|
|
12
|
-
_defineProperty(this, "
|
|
11
|
+
_defineProperty(this, "headingStylesMap", void 0);
|
|
13
12
|
|
|
13
|
+
this.styles = { ...options.styles
|
|
14
|
+
};
|
|
14
15
|
this.renderer = new Renderer();
|
|
15
|
-
this.
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
this.headingStylesMap = {
|
|
17
|
+
1: this.styles.h1,
|
|
18
|
+
2: this.styles.h2,
|
|
19
|
+
3: this.styles.h3,
|
|
20
|
+
4: this.styles.h4,
|
|
21
|
+
5: this.styles.h5,
|
|
22
|
+
6: this.styles.h6
|
|
18
23
|
};
|
|
19
24
|
}
|
|
20
25
|
|
|
21
26
|
parse(tokens) {
|
|
22
|
-
return this.parseBlocks(tokens);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
parseBlocks(tokens) {
|
|
26
|
-
let styleObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
27
27
|
const elements = tokens.map(token => {
|
|
28
28
|
switch (token.type) {
|
|
29
29
|
case 'space':
|
|
@@ -36,9 +36,8 @@ class Parser {
|
|
|
36
36
|
let tempTokens = [];
|
|
37
37
|
const paragraphChildren = [];
|
|
38
38
|
token.tokens.forEach(t => {
|
|
39
|
-
// TODO: move type checking value to const
|
|
40
39
|
if (t.type === 'image') {
|
|
41
|
-
paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens),
|
|
40
|
+
paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens), this.styles.text));
|
|
42
41
|
paragraphChildren.push(this.parseInline([t]));
|
|
43
42
|
tempTokens = [];
|
|
44
43
|
return;
|
|
@@ -48,49 +47,41 @@ class Parser {
|
|
|
48
47
|
});
|
|
49
48
|
|
|
50
49
|
if (tempTokens.length > 0) {
|
|
51
|
-
paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens),
|
|
50
|
+
paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens), {}));
|
|
52
51
|
}
|
|
53
52
|
|
|
54
|
-
return this.renderer.
|
|
53
|
+
return this.renderer.getViewNode(paragraphChildren, this.styles.paragraph);
|
|
55
54
|
}
|
|
56
55
|
|
|
57
56
|
case 'blockquote':
|
|
58
57
|
{
|
|
59
|
-
return this.renderer.
|
|
58
|
+
return this.renderer.getBlockquoteNode(this.parse(token.tokens), this.styles.blockquote);
|
|
60
59
|
}
|
|
61
60
|
|
|
62
61
|
case 'heading':
|
|
63
62
|
{
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
case 2:
|
|
69
|
-
return this.renderer.getHeading(token.text, this.styles.h2);
|
|
70
|
-
|
|
71
|
-
case 3:
|
|
72
|
-
return this.renderer.getHeading(token.text, this.styles.h3);
|
|
73
|
-
|
|
74
|
-
case 4:
|
|
75
|
-
return this.renderer.getHeading(token.text, this.styles.h4);
|
|
76
|
-
|
|
77
|
-
case 5:
|
|
78
|
-
return this.renderer.getHeading(token.text, this.styles.h5);
|
|
63
|
+
const styles = this.headingStylesMap[token.depth] ?? this.styles.text;
|
|
64
|
+
return this.renderer.getTextNode(token.text, styles);
|
|
65
|
+
}
|
|
79
66
|
|
|
80
|
-
|
|
81
|
-
|
|
67
|
+
case 'code':
|
|
68
|
+
{
|
|
69
|
+
return this.renderer.getCodeBlockNode(token.text, this.styles.code, this.styles.em);
|
|
70
|
+
}
|
|
82
71
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
72
|
+
case 'hr':
|
|
73
|
+
{
|
|
74
|
+
return this.renderer.getViewNode(null, this.styles.hr);
|
|
86
75
|
}
|
|
87
76
|
|
|
88
|
-
case '
|
|
77
|
+
case 'list':
|
|
89
78
|
{
|
|
90
|
-
|
|
79
|
+
const li = token.items.map(item => item.text);
|
|
80
|
+
return this.renderer.getListNode(token.ordered, li, this.styles.list, this.styles.li);
|
|
91
81
|
}
|
|
92
82
|
|
|
93
83
|
default:
|
|
84
|
+
console.warn(`Token with '${token.type}' type was not found.`);
|
|
94
85
|
return null;
|
|
95
86
|
}
|
|
96
87
|
});
|
|
@@ -98,14 +89,14 @@ class Parser {
|
|
|
98
89
|
}
|
|
99
90
|
|
|
100
91
|
parseInline(tokens) {
|
|
101
|
-
let
|
|
92
|
+
let styles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
102
93
|
const elements = tokens.map(token => {
|
|
103
94
|
if (!token) return null;
|
|
104
95
|
|
|
105
96
|
switch (token.type) {
|
|
106
97
|
case 'escape':
|
|
107
98
|
{
|
|
108
|
-
return this.renderer.getTextNode(token.text, [
|
|
99
|
+
return this.renderer.getTextNode(token.text, [styles, this.styles.text]);
|
|
109
100
|
}
|
|
110
101
|
|
|
111
102
|
case 'html':
|
|
@@ -116,27 +107,27 @@ class Parser {
|
|
|
116
107
|
|
|
117
108
|
case 'link':
|
|
118
109
|
{
|
|
119
|
-
return this.renderer.getLinkNode(token.text, token.href, [
|
|
110
|
+
return this.renderer.getLinkNode(token.text, token.href, [styles, this.styles.link]);
|
|
120
111
|
}
|
|
121
112
|
|
|
122
113
|
case 'image':
|
|
123
114
|
{
|
|
124
|
-
return this.renderer.
|
|
115
|
+
return this.renderer.getImageNode(token.href);
|
|
125
116
|
}
|
|
126
117
|
|
|
127
118
|
case 'strong':
|
|
128
119
|
{
|
|
129
|
-
return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.strong), [
|
|
120
|
+
return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.strong), [styles, this.styles.strong]);
|
|
130
121
|
}
|
|
131
122
|
|
|
132
123
|
case 'em':
|
|
133
124
|
{
|
|
134
|
-
return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.em), [
|
|
125
|
+
return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.em), [styles, this.styles.em]);
|
|
135
126
|
}
|
|
136
127
|
|
|
137
128
|
case 'codespan':
|
|
138
129
|
{
|
|
139
|
-
return this.renderer.getTextNode(
|
|
130
|
+
return this.renderer.getTextNode(token.text, this.styles.codespan);
|
|
140
131
|
}
|
|
141
132
|
|
|
142
133
|
case 'br':
|
|
@@ -151,13 +142,12 @@ class Parser {
|
|
|
151
142
|
|
|
152
143
|
case 'text':
|
|
153
144
|
{
|
|
154
|
-
return this.renderer.getTextNode(token.raw, [
|
|
145
|
+
return this.renderer.getTextNode(token.raw, [styles, this.styles.text]);
|
|
155
146
|
}
|
|
156
147
|
|
|
157
148
|
default:
|
|
158
149
|
{
|
|
159
|
-
|
|
160
|
-
console.error(errMsg);
|
|
150
|
+
console.warn(`Token with '${token.type}' type was not found.`);
|
|
161
151
|
return null;
|
|
162
152
|
}
|
|
163
153
|
}
|
|
@@ -165,88 +155,7 @@ class Parser {
|
|
|
165
155
|
return elements;
|
|
166
156
|
}
|
|
167
157
|
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
const defaultStyles = StyleSheet.create({
|
|
172
|
-
em: {
|
|
173
|
-
fontSize: 16,
|
|
174
|
-
lineHeight: 24,
|
|
175
|
-
fontStyle: 'italic'
|
|
176
|
-
},
|
|
177
|
-
strong: {
|
|
178
|
-
fontSize: 16,
|
|
179
|
-
lineHeight: 24,
|
|
180
|
-
fontWeight: 'bold'
|
|
181
|
-
},
|
|
182
|
-
text: {
|
|
183
|
-
fontSize: 16,
|
|
184
|
-
lineHeight: 24
|
|
185
|
-
},
|
|
186
|
-
paragraph: {
|
|
187
|
-
fontSize: 16,
|
|
188
|
-
lineHeight: 24,
|
|
189
|
-
paddingVertical: 8
|
|
190
|
-
},
|
|
191
|
-
link: {
|
|
192
|
-
fontStyle: 'italic',
|
|
193
|
-
fontSize: 16,
|
|
194
|
-
lineHeight: 24,
|
|
195
|
-
color: '#0074cc'
|
|
196
|
-
},
|
|
197
|
-
blockquoteText: {
|
|
198
|
-
color: '#6a737d'
|
|
199
|
-
},
|
|
200
|
-
blockquoteContainer: {
|
|
201
|
-
borderLeftColor: '#dfe2e5',
|
|
202
|
-
paddingLeft: 16,
|
|
203
|
-
borderLeftWidth: 5
|
|
204
|
-
},
|
|
205
|
-
h1: {
|
|
206
|
-
fontSize: 32,
|
|
207
|
-
lineHeight: 40,
|
|
208
|
-
fontWeight: 'bold',
|
|
209
|
-
paddingVertical: 8,
|
|
210
|
-
letterSpacing: 0
|
|
211
|
-
},
|
|
212
|
-
h2: {
|
|
213
|
-
fontSize: 28,
|
|
214
|
-
lineHeight: 36,
|
|
215
|
-
fontWeight: '500',
|
|
216
|
-
paddingVertical: 8
|
|
217
|
-
},
|
|
218
|
-
h3: {
|
|
219
|
-
fontSize: 36,
|
|
220
|
-
lineHeight: 44,
|
|
221
|
-
fontWeight: '500'
|
|
222
|
-
},
|
|
223
|
-
h4: {
|
|
224
|
-
fontSize: 22,
|
|
225
|
-
lineHeight: 28,
|
|
226
|
-
fontWeight: '500'
|
|
227
|
-
},
|
|
228
|
-
h5: {
|
|
229
|
-
fontSize: 16,
|
|
230
|
-
lineHeight: 24,
|
|
231
|
-
fontWeight: '500'
|
|
232
|
-
},
|
|
233
|
-
h6: {
|
|
234
|
-
fontSize: 14,
|
|
235
|
-
lineHeight: 20,
|
|
236
|
-
fontWeight: '500'
|
|
237
|
-
},
|
|
238
|
-
codespan: {
|
|
239
|
-
fontSize: 16,
|
|
240
|
-
lineHeight: 24,
|
|
241
|
-
fontStyle: 'italic',
|
|
242
|
-
backgroundColor: '#afb8c133',
|
|
243
|
-
fontWeight: '300'
|
|
244
|
-
},
|
|
245
|
-
code: {
|
|
246
|
-
padding: 16,
|
|
247
|
-
backgroundColor: '#afb8c133',
|
|
248
|
-
minWidth: '100%'
|
|
249
|
-
}
|
|
250
|
-
});
|
|
158
|
+
}
|
|
159
|
+
|
|
251
160
|
export default Parser;
|
|
252
161
|
//# sourceMappingURL=Parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StyleSheet","Renderer","Parser","constructor","options","renderer","styles","defaultStyles","parse","tokens","parseBlocks","styleObj","elements","map","token","type","tempTokens","paragraphChildren","forEach","t","push","getTextNode","parseInline","length","getParagraph","paragraph","getBlockquote","blockquoteText","blockquoteContainer","depth","getHeading","text","h1","h2","h3","h4","h5","h6","getCodeBlock","code","em","console","log","getLinkNode","href","link","getImage","contentWidth","strong","codespan","raw","errMsg","error","create","fontSize","lineHeight","fontStyle","fontWeight","paddingVertical","color","borderLeftColor","paddingLeft","borderLeftWidth","letterSpacing","backgroundColor","padding","minWidth"],"sources":["Parser.ts"],"sourcesContent":["import type { marked } from 'marked';\nimport {\n ImageStyle,\n StyleProp,\n StyleSheet,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport Renderer from './Renderer';\nimport type { MarkedStyles, ParserOptions } from '../types/types';\n\nclass Parser {\n private renderer;\n private styles: MarkedStyles;\n private options: ParserOptions;\n constructor(options: ParserOptions) {\n this.renderer = new Renderer();\n this.options = options;\n this.styles = {\n ...defaultStyles,\n ...options.styles,\n };\n }\n\n parse(tokens: marked.Token[]) {\n return this.parseBlocks(tokens);\n }\n\n parseBlocks(\n tokens: marked.Token[],\n styleObj: StyleProp<ViewStyle | TextStyle | ImageStyle> = {}\n ) {\n const elements: React.ReactNode[] = tokens.map((token) => {\n switch (token.type) {\n case 'space': {\n return null;\n }\n case 'paragraph': {\n let tempTokens: marked.Token[] = [];\n const paragraphChildren: React.ReactNode[] = [];\n token.tokens.forEach((t) => {\n // TODO: move type checking value to const\n if (t.type === 'image') {\n paragraphChildren.push(\n this.renderer.getTextNode(\n this.parseInline(tempTokens),\n styleObj\n )\n );\n paragraphChildren.push(this.parseInline([t]));\n tempTokens = [];\n return;\n }\n tempTokens = [...tempTokens, t];\n });\n\n if (tempTokens.length > 0) {\n paragraphChildren.push(\n this.renderer.getTextNode(this.parseInline(tempTokens), styleObj)\n );\n }\n\n return this.renderer.getParagraph(paragraphChildren, [\n styleObj,\n this.styles.paragraph,\n ]);\n }\n case 'blockquote': {\n return this.renderer.getBlockquote(\n this.parseBlocks(token.tokens, this.styles.blockquoteText),\n this.styles.blockquoteContainer\n );\n }\n case 'heading': {\n switch (token.depth) {\n case 1:\n return this.renderer.getHeading(token.text, this.styles.h1);\n case 2:\n return this.renderer.getHeading(token.text, this.styles.h2);\n case 3:\n return this.renderer.getHeading(token.text, this.styles.h3);\n case 4:\n return this.renderer.getHeading(token.text, this.styles.h4);\n case 5:\n return this.renderer.getHeading(token.text, this.styles.h5);\n case 6:\n return this.renderer.getHeading(token.text, this.styles.h6);\n default:\n return null;\n }\n }\n case 'code': {\n return this.renderer.getCodeBlock(\n token.text,\n this.styles.code,\n this.styles.em\n );\n }\n default:\n return null;\n }\n });\n return elements;\n }\n\n parseInline(\n tokens: marked.Token[],\n styleObj: StyleProp<ViewStyle | TextStyle | ImageStyle> = {}\n ) {\n const elements: React.ReactNode[] = tokens.map((token) => {\n if (!token) return null;\n\n switch (token.type) {\n case 'escape': {\n return this.renderer.getTextNode(token.text, [\n styleObj,\n this.styles.text,\n ]);\n }\n case 'html': {\n console.log('html', token);\n return null;\n }\n case 'link': {\n return this.renderer.getLinkNode(token.text, token.href, [\n styleObj,\n this.styles.link,\n ]);\n }\n case 'image': {\n return this.renderer.getImage(token.href, this.options.contentWidth);\n }\n case 'strong': {\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, this.styles.strong),\n [styleObj, this.styles.strong]\n );\n }\n case 'em': {\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, this.styles.em),\n [styleObj, this.styles.em]\n );\n }\n case 'codespan': {\n return this.renderer.getTextNode(\n ` ${token.text} `,\n this.styles.codespan\n );\n }\n case 'br': {\n return this.renderer.getTextNode('\\n', {});\n }\n case 'del': {\n return null;\n }\n case 'text': {\n return this.renderer.getTextNode(token.raw, [\n styleObj,\n this.styles.text,\n ]);\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n console.error(errMsg);\n return null;\n }\n }\n });\n return elements;\n }\n}\n\n// TODO: material typography for font size\nconst defaultStyles = StyleSheet.create<MarkedStyles>({\n em: {\n fontSize: 16,\n lineHeight: 24,\n fontStyle: 'italic',\n },\n strong: {\n fontSize: 16,\n lineHeight: 24,\n fontWeight: 'bold',\n },\n text: {\n fontSize: 16,\n lineHeight: 24,\n },\n paragraph: {\n fontSize: 16,\n lineHeight: 24,\n paddingVertical: 8,\n },\n link: {\n fontStyle: 'italic',\n fontSize: 16,\n lineHeight: 24,\n color: '#0074cc',\n },\n blockquoteText: {\n color: '#6a737d',\n },\n blockquoteContainer: {\n borderLeftColor: '#dfe2e5',\n paddingLeft: 16,\n borderLeftWidth: 5,\n },\n h1: {\n fontSize: 32,\n lineHeight: 40,\n fontWeight: 'bold',\n paddingVertical: 8,\n letterSpacing: 0,\n },\n h2: {\n fontSize: 28,\n lineHeight: 36,\n fontWeight: '500',\n paddingVertical: 8,\n },\n h3: {\n fontSize: 36,\n lineHeight: 44,\n fontWeight: '500',\n },\n h4: {\n fontSize: 22,\n lineHeight: 28,\n fontWeight: '500',\n },\n h5: {\n fontSize: 16,\n lineHeight: 24,\n fontWeight: '500',\n },\n h6: {\n fontSize: 14,\n lineHeight: 20,\n fontWeight: '500',\n },\n codespan: {\n fontSize: 16,\n lineHeight: 24,\n fontStyle: 'italic',\n backgroundColor: '#afb8c133',\n fontWeight: '300',\n },\n code: {\n padding: 16,\n backgroundColor: '#afb8c133',\n minWidth: '100%',\n },\n});\n\nexport default Parser;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Renderer","Parser","constructor","options","styles","renderer","headingStylesMap","h1","h2","h3","h4","h5","h6","parse","tokens","elements","map","token","type","tempTokens","paragraphChildren","forEach","t","push","getTextNode","parseInline","text","length","getViewNode","paragraph","getBlockquoteNode","blockquote","depth","getCodeBlockNode","code","em","hr","li","items","item","getListNode","ordered","list","console","warn","log","getLinkNode","href","link","getImageNode","strong","codespan","raw"],"sources":["Parser.tsx"],"sourcesContent":["import type { marked } from 'marked';\nimport type { ImageStyle, StyleProp, TextStyle, ViewStyle } from 'react-native';\nimport Renderer from './Renderer';\nimport type { MarkedStyles } from '../theme/types';\n\ninterface ParserOptions {\n styles?: MarkedStyles;\n}\n\nclass Parser {\n private renderer;\n private styles: MarkedStyles;\n private headingStylesMap: Record<number, TextStyle | undefined>;\n constructor(options: ParserOptions) {\n this.styles = { ...options.styles };\n this.renderer = new Renderer();\n this.headingStylesMap = {\n 1: this.styles.h1,\n 2: this.styles.h2,\n 3: this.styles.h3,\n 4: this.styles.h4,\n 5: this.styles.h5,\n 6: this.styles.h6,\n };\n }\n\n parse(tokens: marked.Token[]) {\n const elements: React.ReactNode[] = tokens.map((token) => {\n switch (token.type) {\n case 'space': {\n return null;\n }\n case 'paragraph': {\n let tempTokens: marked.Token[] = [];\n const paragraphChildren: React.ReactNode[] = [];\n token.tokens.forEach((t) => {\n if (t.type === 'image') {\n paragraphChildren.push(\n this.renderer.getTextNode(\n this.parseInline(tempTokens),\n this.styles.text\n )\n );\n paragraphChildren.push(this.parseInline([t]));\n tempTokens = [];\n return;\n }\n tempTokens = [...tempTokens, t];\n });\n\n if (tempTokens.length > 0) {\n paragraphChildren.push(\n this.renderer.getTextNode(this.parseInline(tempTokens), {})\n );\n }\n\n return this.renderer.getViewNode(\n paragraphChildren,\n this.styles.paragraph\n );\n }\n case 'blockquote': {\n return this.renderer.getBlockquoteNode(\n this.parse(token.tokens),\n this.styles.blockquote\n );\n }\n case 'heading': {\n const styles = this.headingStylesMap[token.depth] ?? this.styles.text;\n return this.renderer.getTextNode(token.text, styles);\n }\n case 'code': {\n return this.renderer.getCodeBlockNode(\n token.text,\n this.styles.code,\n this.styles.em\n );\n }\n case 'hr': {\n return this.renderer.getViewNode(null, this.styles.hr);\n }\n case 'list': {\n const li = token.items.map((item) => item.text);\n return this.renderer.getListNode(\n token.ordered,\n li,\n this.styles.list,\n this.styles.li\n );\n }\n default:\n console.warn(`Token with '${token.type}' type was not found.`);\n return null;\n }\n });\n return elements;\n }\n\n parseInline(\n tokens: marked.Token[],\n styles: StyleProp<ViewStyle | TextStyle | ImageStyle> = {}\n ) {\n const elements: React.ReactNode[] = tokens.map((token) => {\n if (!token) return null;\n\n switch (token.type) {\n case 'escape': {\n return this.renderer.getTextNode(token.text, [\n styles,\n this.styles.text,\n ]);\n }\n case 'html': {\n console.log('html', token);\n return null;\n }\n case 'link': {\n return this.renderer.getLinkNode(token.text, token.href, [\n styles,\n this.styles.link,\n ]);\n }\n case 'image': {\n return this.renderer.getImageNode(token.href);\n }\n case 'strong': {\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, this.styles.strong),\n [styles, this.styles.strong]\n );\n }\n case 'em': {\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, this.styles.em),\n [styles, this.styles.em]\n );\n }\n case 'codespan': {\n return this.renderer.getTextNode(token.text, this.styles.codespan);\n }\n case 'br': {\n return this.renderer.getTextNode('\\n', {});\n }\n case 'del': {\n return null;\n }\n case 'text': {\n return this.renderer.getTextNode(token.raw, [\n styles,\n this.styles.text,\n ]);\n }\n default: {\n console.warn(`Token with '${token.type}' type was not found.`);\n return null;\n }\n }\n });\n return elements;\n }\n}\n\nexport default Parser;\n"],"mappings":"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"}
|