react-native-marked 1.0.0-alpha.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/LICENSE +20 -0
- package/README.md +29 -0
- package/dist/commonjs/components/MDImage.js +55 -0
- package/dist/commonjs/components/MDImage.js.map +1 -0
- package/dist/commonjs/index.js +14 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/lib/Markdown.js +57 -0
- package/dist/commonjs/lib/Markdown.js.map +1 -0
- package/dist/commonjs/lib/Parser.js +264 -0
- package/dist/commonjs/lib/Parser.js.map +1 -0
- package/dist/commonjs/lib/Renderer.js +86 -0
- package/dist/commonjs/lib/Renderer.js.map +1 -0
- package/dist/commonjs/types/types.js +6 -0
- package/dist/commonjs/types/types.js.map +1 -0
- package/dist/commonjs/utils/string.js +17 -0
- package/dist/commonjs/utils/string.js.map +1 -0
- package/dist/module/components/MDImage.js +37 -0
- package/dist/module/components/MDImage.js.map +1 -0
- package/dist/module/index.js +3 -0
- package/dist/module/index.js.map +1 -0
- package/dist/module/lib/Markdown.js +38 -0
- package/dist/module/lib/Markdown.js.map +1 -0
- package/dist/module/lib/Parser.js +252 -0
- package/dist/module/lib/Parser.js.map +1 -0
- package/dist/module/lib/Renderer.js +70 -0
- package/dist/module/lib/Renderer.js.map +1 -0
- package/dist/module/types/types.js +2 -0
- package/dist/module/types/types.js.map +1 -0
- package/dist/module/utils/string.js +8 -0
- package/dist/module/utils/string.js.map +1 -0
- package/dist/typescript/components/MDImage.d.ts +7 -0
- package/dist/typescript/index.d.ts +2 -0
- package/dist/typescript/lib/Markdown.d.ts +9 -0
- package/dist/typescript/lib/Parser.d.ts +14 -0
- package/dist/typescript/lib/Renderer.d.ts +14 -0
- package/dist/typescript/types/types.d.ts +23 -0
- package/dist/typescript/utils/string.d.ts +5 -0
- package/package.json +179 -0
- package/src/components/MDImage.tsx +40 -0
- package/src/index.ts +3 -0
- package/src/lib/Markdown.tsx +39 -0
- package/src/lib/Parser.ts +256 -0
- package/src/lib/Renderer.tsx +75 -0
- package/src/types/types.ts +25 -0
- package/src/utils/string.ts +7 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Markdown"],"sources":["index.ts"],"sourcesContent":["import Markdown from './lib/Markdown';\n\nexport default Markdown;\n"],"mappings":"AAAA,OAAOA,QAAP,MAAqB,gBAArB;AAEA,eAAeA,QAAf"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
|
|
3
|
+
import React, { useCallback } from 'react';
|
|
4
|
+
import { marked } from 'marked';
|
|
5
|
+
import Parser from './Parser';
|
|
6
|
+
import { FlatList } from 'react-native';
|
|
7
|
+
|
|
8
|
+
const Markdown = _ref => {
|
|
9
|
+
let {
|
|
10
|
+
value,
|
|
11
|
+
contentWidth,
|
|
12
|
+
listProps
|
|
13
|
+
} = _ref;
|
|
14
|
+
const tokens = marked.lexer(value.trim());
|
|
15
|
+
const parser = new Parser({
|
|
16
|
+
contentWidth
|
|
17
|
+
});
|
|
18
|
+
const rnElements = parser.parse(tokens);
|
|
19
|
+
const renderItem = useCallback(_ref2 => {
|
|
20
|
+
let {
|
|
21
|
+
item
|
|
22
|
+
} = _ref2;
|
|
23
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, item);
|
|
24
|
+
}, []);
|
|
25
|
+
const keyExtractor = useCallback((_, index) => index.toString(), []);
|
|
26
|
+
return /*#__PURE__*/React.createElement(FlatList, _extends({
|
|
27
|
+
keyExtractor: keyExtractor,
|
|
28
|
+
maxToRenderPerBatch: 8,
|
|
29
|
+
initialNumToRender: 8,
|
|
30
|
+
removeClippedSubviews: true
|
|
31
|
+
}, listProps, {
|
|
32
|
+
data: rnElements,
|
|
33
|
+
renderItem: renderItem
|
|
34
|
+
}));
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export default Markdown;
|
|
38
|
+
//# sourceMappingURL=Markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useCallback","marked","Parser","FlatList","Markdown","value","contentWidth","listProps","tokens","lexer","trim","parser","rnElements","parse","renderItem","item","keyExtractor","_","index","toString"],"sources":["Markdown.tsx"],"sourcesContent":["import React, { ReactNode, useCallback } from 'react';\nimport { marked } from 'marked';\nimport Parser from './Parser';\nimport { FlatList, FlatListProps } from 'react-native';\n\ninterface MarkdownProps {\n value: string;\n contentWidth: number;\n listProps?: Omit<\n FlatListProps<ReactNode>,\n 'data' | 'renderItem' | 'horizontal'\n >;\n}\n\nconst Markdown = ({ value, contentWidth, listProps }: MarkdownProps) => {\n const tokens = marked.lexer(value.trim());\n const parser = new Parser({ contentWidth });\n const rnElements = parser.parse(tokens);\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 {...listProps}\n data={rnElements}\n renderItem={renderItem}\n />\n );\n};\n\nexport default Markdown;\n"],"mappings":";;AAAA,OAAOA,KAAP,IAA2BC,WAA3B,QAA8C,OAA9C;AACA,SAASC,MAAT,QAAuB,QAAvB;AACA,OAAOC,MAAP,MAAmB,UAAnB;AACA,SAASC,QAAT,QAAwC,cAAxC;;AAWA,MAAMC,QAAQ,GAAG,QAAuD;EAAA,IAAtD;IAAEC,KAAF;IAASC,YAAT;IAAuBC;EAAvB,CAAsD;EACtE,MAAMC,MAAM,GAAGP,MAAM,CAACQ,KAAP,CAAaJ,KAAK,CAACK,IAAN,EAAb,CAAf;EACA,MAAMC,MAAM,GAAG,IAAIT,MAAJ,CAAW;IAAEI;EAAF,CAAX,CAAf;EACA,MAAMM,UAAU,GAAGD,MAAM,CAACE,KAAP,CAAaL,MAAb,CAAnB;EAEA,MAAMM,UAAU,GAAGd,WAAW,CAAC,SAAmC;IAAA,IAAlC;MAAEe;IAAF,CAAkC;IAChE,oBAAO,0CAAGA,IAAH,CAAP;EACD,CAF6B,EAE3B,EAF2B,CAA9B;EAIA,MAAMC,YAAY,GAAGhB,WAAW,CAAC,CAACiB,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;EAJvB,GAKMT,SALN;IAME,IAAI,EAAEK,UANR;IAOE,UAAU,EAAEE;EAPd,GADF;AAWD,CAtBD;;AAwBA,eAAeV,QAAf"}
|
|
@@ -0,0 +1,252 @@
|
|
|
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
|
+
|
|
3
|
+
import { StyleSheet } from 'react-native';
|
|
4
|
+
import Renderer from './Renderer';
|
|
5
|
+
|
|
6
|
+
class Parser {
|
|
7
|
+
constructor(options) {
|
|
8
|
+
_defineProperty(this, "renderer", void 0);
|
|
9
|
+
|
|
10
|
+
_defineProperty(this, "styles", void 0);
|
|
11
|
+
|
|
12
|
+
_defineProperty(this, "options", void 0);
|
|
13
|
+
|
|
14
|
+
this.renderer = new Renderer();
|
|
15
|
+
this.options = options;
|
|
16
|
+
this.styles = { ...defaultStyles,
|
|
17
|
+
...options.styles
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
parse(tokens) {
|
|
22
|
+
return this.parseBlocks(tokens);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
parseBlocks(tokens) {
|
|
26
|
+
let styleObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
27
|
+
const elements = tokens.map(token => {
|
|
28
|
+
switch (token.type) {
|
|
29
|
+
case 'space':
|
|
30
|
+
{
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
case 'paragraph':
|
|
35
|
+
{
|
|
36
|
+
let tempTokens = [];
|
|
37
|
+
const paragraphChildren = [];
|
|
38
|
+
token.tokens.forEach(t => {
|
|
39
|
+
// TODO: move type checking value to const
|
|
40
|
+
if (t.type === 'image') {
|
|
41
|
+
paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens), styleObj));
|
|
42
|
+
paragraphChildren.push(this.parseInline([t]));
|
|
43
|
+
tempTokens = [];
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
tempTokens = [...tempTokens, t];
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
if (tempTokens.length > 0) {
|
|
51
|
+
paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens), styleObj));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return this.renderer.getParagraph(paragraphChildren, [styleObj, this.styles.paragraph]);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
case 'blockquote':
|
|
58
|
+
{
|
|
59
|
+
return this.renderer.getBlockquote(this.parseBlocks(token.tokens, this.styles.blockquoteText), this.styles.blockquoteContainer);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
case 'heading':
|
|
63
|
+
{
|
|
64
|
+
switch (token.depth) {
|
|
65
|
+
case 1:
|
|
66
|
+
return this.renderer.getHeading(token.text, this.styles.h1);
|
|
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);
|
|
79
|
+
|
|
80
|
+
case 6:
|
|
81
|
+
return this.renderer.getHeading(token.text, this.styles.h6);
|
|
82
|
+
|
|
83
|
+
default:
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
case 'code':
|
|
89
|
+
{
|
|
90
|
+
return this.renderer.getCodeBlock(token.text, this.styles.code, this.styles.em);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
default:
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
return elements;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
parseInline(tokens) {
|
|
101
|
+
let styleObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
102
|
+
const elements = tokens.map(token => {
|
|
103
|
+
if (!token) return null;
|
|
104
|
+
|
|
105
|
+
switch (token.type) {
|
|
106
|
+
case 'escape':
|
|
107
|
+
{
|
|
108
|
+
return this.renderer.getTextNode(token.text, [styleObj, this.styles.text]);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
case 'html':
|
|
112
|
+
{
|
|
113
|
+
console.log('html', token);
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
case 'link':
|
|
118
|
+
{
|
|
119
|
+
return this.renderer.getLinkNode(token.text, token.href, [styleObj, this.styles.link]);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
case 'image':
|
|
123
|
+
{
|
|
124
|
+
return this.renderer.getImage(token.href, this.options.contentWidth);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
case 'strong':
|
|
128
|
+
{
|
|
129
|
+
return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.strong), [styleObj, this.styles.strong]);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
case 'em':
|
|
133
|
+
{
|
|
134
|
+
return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.em), [styleObj, this.styles.em]);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
case 'codespan':
|
|
138
|
+
{
|
|
139
|
+
return this.renderer.getTextNode(` ${token.text} `, this.styles.codespan);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
case 'br':
|
|
143
|
+
{
|
|
144
|
+
return this.renderer.getTextNode('\n', {});
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
case 'del':
|
|
148
|
+
{
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
case 'text':
|
|
153
|
+
{
|
|
154
|
+
return this.renderer.getTextNode(token.raw, [styleObj, this.styles.text]);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
default:
|
|
158
|
+
{
|
|
159
|
+
const errMsg = 'Token with "' + token.type + '" type was not found.';
|
|
160
|
+
console.error(errMsg);
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
return elements;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
} // TODO: material typography for font size
|
|
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
|
+
});
|
|
251
|
+
export default Parser;
|
|
252
|
+
//# sourceMappingURL=Parser.js.map
|
|
@@ -0,0 +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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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
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
|
+
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Linking, ScrollView, View } from 'react-native';
|
|
5
|
+
import { Text } from 'react-native';
|
|
6
|
+
import MDImage from './../components/MDImage';
|
|
7
|
+
import { generateRandomString } from '../utils/string';
|
|
8
|
+
|
|
9
|
+
class Renderer {
|
|
10
|
+
constructor() {
|
|
11
|
+
_defineProperty(this, "onLinkPress", href => () => Linking.openURL(href));
|
|
12
|
+
|
|
13
|
+
_defineProperty(this, "getTextNode", (children, styles) => {
|
|
14
|
+
return /*#__PURE__*/React.createElement(Text, {
|
|
15
|
+
key: generateRandomString(),
|
|
16
|
+
style: styles
|
|
17
|
+
}, children);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
_defineProperty(this, "getLinkNode", (text, href, styles) => {
|
|
21
|
+
return /*#__PURE__*/React.createElement(Text, {
|
|
22
|
+
key: generateRandomString(),
|
|
23
|
+
onPress: this.onLinkPress(href),
|
|
24
|
+
style: styles
|
|
25
|
+
}, text);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
getParagraph(children, styles) {
|
|
30
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
31
|
+
key: generateRandomString(),
|
|
32
|
+
style: styles
|
|
33
|
+
}, children);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
getCodeBlock(text, containerStyle, textStyle) {
|
|
37
|
+
return /*#__PURE__*/React.createElement(ScrollView, {
|
|
38
|
+
contentContainerStyle: containerStyle,
|
|
39
|
+
horizontal: true
|
|
40
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
41
|
+
style: textStyle
|
|
42
|
+
}, text));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
getBlockquote(children, styles) {
|
|
46
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
47
|
+
key: generateRandomString(),
|
|
48
|
+
style: styles
|
|
49
|
+
}, children);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
getHeading(text, styles) {
|
|
53
|
+
return /*#__PURE__*/React.createElement(Text, {
|
|
54
|
+
key: generateRandomString(),
|
|
55
|
+
style: styles
|
|
56
|
+
}, text);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
getImage(uri, width) {
|
|
60
|
+
return /*#__PURE__*/React.createElement(MDImage, {
|
|
61
|
+
key: generateRandomString(),
|
|
62
|
+
uri: uri,
|
|
63
|
+
width: width
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export default Renderer;
|
|
70
|
+
//# sourceMappingURL=Renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Linking","ScrollView","View","Text","MDImage","generateRandomString","Renderer","href","openURL","children","styles","text","onLinkPress","getParagraph","getCodeBlock","containerStyle","textStyle","getBlockquote","getHeading","getImage","uri","width"],"sources":["Renderer.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Linking, ScrollView, View, ViewStyle } from 'react-native';\nimport type { StyleProp, TextStyle } from 'react-native';\nimport { Text } from 'react-native';\nimport MDImage from './../components/MDImage';\nimport { generateRandomString } from '../utils/string';\n\nclass Renderer {\n private onLinkPress = (href: string) => () => Linking.openURL(href);\n\n getTextNode = (\n children: string | React.ReactNode[],\n styles: StyleProp<TextStyle>\n ) => {\n return (\n <Text key={generateRandomString()} style={styles}>\n {children}\n </Text>\n );\n };\n\n getLinkNode = (text: string, href: string, styles: StyleProp<TextStyle>) => {\n return (\n <Text\n key={generateRandomString()}\n onPress={this.onLinkPress(href)}\n style={styles}\n >\n {text}\n </Text>\n );\n };\n\n getParagraph(children: React.ReactNode[], styles: StyleProp<ViewStyle>) {\n return (\n <View key={generateRandomString()} style={styles}>\n {children}\n </View>\n );\n }\n\n getCodeBlock(\n text: string,\n containerStyle: StyleProp<ViewStyle>,\n textStyle: StyleProp<TextStyle>\n ) {\n return (\n <ScrollView contentContainerStyle={containerStyle} horizontal>\n <Text style={textStyle}>{text}</Text>\n </ScrollView>\n );\n }\n\n getBlockquote(children: React.ReactNode[], styles: StyleProp<ViewStyle>) {\n return (\n <View key={generateRandomString()} style={styles}>\n {children}\n </View>\n );\n }\n\n getHeading(text: string, styles: StyleProp<TextStyle>) {\n return (\n <Text key={generateRandomString()} style={styles}>\n {text}\n </Text>\n );\n }\n\n getImage(uri: string, width: number) {\n return <MDImage key={generateRandomString()} uri={uri} width={width} />;\n }\n}\n\nexport default Renderer;\n"],"mappings":";;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,OAAT,EAAkBC,UAAlB,EAA8BC,IAA9B,QAAqD,cAArD;AAEA,SAASC,IAAT,QAAqB,cAArB;AACA,OAAOC,OAAP,MAAoB,yBAApB;AACA,SAASC,oBAAT,QAAqC,iBAArC;;AAEA,MAAMC,QAAN,CAAe;EAAA;IAAA,qCACUC,IAAD,IAAkB,MAAMP,OAAO,CAACQ,OAAR,CAAgBD,IAAhB,CADjC;;IAAA,qCAGC,CACZE,QADY,EAEZC,MAFY,KAGT;MACH,oBACE,oBAAC,IAAD;QAAM,GAAG,EAAEL,oBAAoB,EAA/B;QAAmC,KAAK,EAAEK;MAA1C,GACGD,QADH,CADF;IAKD,CAZY;;IAAA,qCAcC,CAACE,IAAD,EAAeJ,IAAf,EAA6BG,MAA7B,KAA8D;MAC1E,oBACE,oBAAC,IAAD;QACE,GAAG,EAAEL,oBAAoB,EAD3B;QAEE,OAAO,EAAE,KAAKO,WAAL,CAAiBL,IAAjB,CAFX;QAGE,KAAK,EAAEG;MAHT,GAKGC,IALH,CADF;IASD,CAxBY;EAAA;;EA0BbE,YAAY,CAACJ,QAAD,EAA8BC,MAA9B,EAA4D;IACtE,oBACE,oBAAC,IAAD;MAAM,GAAG,EAAEL,oBAAoB,EAA/B;MAAmC,KAAK,EAAEK;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDK,YAAY,CACVH,IADU,EAEVI,cAFU,EAGVC,SAHU,EAIV;IACA,oBACE,oBAAC,UAAD;MAAY,qBAAqB,EAAED,cAAnC;MAAmD,UAAU;IAA7D,gBACE,oBAAC,IAAD;MAAM,KAAK,EAAEC;IAAb,GAAyBL,IAAzB,CADF,CADF;EAKD;;EAEDM,aAAa,CAACR,QAAD,EAA8BC,MAA9B,EAA4D;IACvE,oBACE,oBAAC,IAAD;MAAM,GAAG,EAAEL,oBAAoB,EAA/B;MAAmC,KAAK,EAAEK;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDS,UAAU,CAACP,IAAD,EAAeD,MAAf,EAA6C;IACrD,oBACE,oBAAC,IAAD;MAAM,GAAG,EAAEL,oBAAoB,EAA/B;MAAmC,KAAK,EAAEK;IAA1C,GACGC,IADH,CADF;EAKD;;EAEDQ,QAAQ,CAACC,GAAD,EAAcC,KAAd,EAA6B;IACnC,oBAAO,oBAAC,OAAD;MAAS,GAAG,EAAEhB,oBAAoB,EAAlC;MAAsC,GAAG,EAAEe,GAA3C;MAAgD,KAAK,EAAEC;IAAvD,EAAP;EACD;;AAhEY;;AAmEf,eAAef,QAAf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { ImageStyle, TextStyle, ViewStyle } from 'react-native';\n\nexport interface MarkedStyles {\n em?: TextStyle;\n strong?: TextStyle;\n text?: TextStyle;\n paragraph?: ViewStyle;\n link?: TextStyle;\n blockquoteText?: TextStyle;\n blockquoteContainer?: ViewStyle;\n h1?: TextStyle;\n h2?: TextStyle;\n h3?: TextStyle;\n h4?: TextStyle;\n h5?: TextStyle;\n h6?: TextStyle;\n image?: ImageStyle;\n codespan?: TextStyle;\n code?: ViewStyle;\n}\n\nexport interface ParserOptions {\n contentWidth: number;\n styles?: MarkedStyles;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["generateRandomString","Math","random","toString","substring"],"sources":["string.ts"],"sourcesContent":["/**\n * Generates a random string\n * @returns string\n */\nexport const generateRandomString = () => {\n return (Math.random() + 1).toString(36).substring(7);\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA,OAAO,MAAMA,oBAAoB,GAAG,MAAM;EACxC,OAAO,CAACC,IAAI,CAACC,MAAL,KAAgB,CAAjB,EAAoBC,QAApB,CAA6B,EAA7B,EAAiCC,SAAjC,CAA2C,CAA3C,CAAP;AACD,CAFM"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { FlatListProps } from 'react-native';
|
|
3
|
+
interface MarkdownProps {
|
|
4
|
+
value: string;
|
|
5
|
+
contentWidth: number;
|
|
6
|
+
listProps?: Omit<FlatListProps<ReactNode>, 'data' | 'renderItem' | 'horizontal'>;
|
|
7
|
+
}
|
|
8
|
+
declare const Markdown: ({ value, contentWidth, listProps }: MarkdownProps) => JSX.Element;
|
|
9
|
+
export default Markdown;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { marked } from 'marked';
|
|
3
|
+
import { ImageStyle, StyleProp, TextStyle, ViewStyle } from 'react-native';
|
|
4
|
+
import type { ParserOptions } from '../types/types';
|
|
5
|
+
declare class Parser {
|
|
6
|
+
private renderer;
|
|
7
|
+
private styles;
|
|
8
|
+
private options;
|
|
9
|
+
constructor(options: ParserOptions);
|
|
10
|
+
parse(tokens: marked.Token[]): import("react").ReactNode[];
|
|
11
|
+
parseBlocks(tokens: marked.Token[], styleObj?: StyleProp<ViewStyle | TextStyle | ImageStyle>): import("react").ReactNode[];
|
|
12
|
+
parseInline(tokens: marked.Token[], styleObj?: StyleProp<ViewStyle | TextStyle | ImageStyle>): import("react").ReactNode[];
|
|
13
|
+
}
|
|
14
|
+
export default Parser;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ViewStyle } from 'react-native';
|
|
3
|
+
import type { StyleProp, TextStyle } from 'react-native';
|
|
4
|
+
declare class Renderer {
|
|
5
|
+
private onLinkPress;
|
|
6
|
+
getTextNode: (children: string | React.ReactNode[], styles: StyleProp<TextStyle>) => JSX.Element;
|
|
7
|
+
getLinkNode: (text: string, href: string, styles: StyleProp<TextStyle>) => JSX.Element;
|
|
8
|
+
getParagraph(children: React.ReactNode[], styles: StyleProp<ViewStyle>): JSX.Element;
|
|
9
|
+
getCodeBlock(text: string, containerStyle: StyleProp<ViewStyle>, textStyle: StyleProp<TextStyle>): JSX.Element;
|
|
10
|
+
getBlockquote(children: React.ReactNode[], styles: StyleProp<ViewStyle>): JSX.Element;
|
|
11
|
+
getHeading(text: string, styles: StyleProp<TextStyle>): JSX.Element;
|
|
12
|
+
getImage(uri: string, width: number): JSX.Element;
|
|
13
|
+
}
|
|
14
|
+
export default Renderer;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ImageStyle, TextStyle, ViewStyle } from 'react-native';
|
|
2
|
+
export interface MarkedStyles {
|
|
3
|
+
em?: TextStyle;
|
|
4
|
+
strong?: TextStyle;
|
|
5
|
+
text?: TextStyle;
|
|
6
|
+
paragraph?: ViewStyle;
|
|
7
|
+
link?: TextStyle;
|
|
8
|
+
blockquoteText?: TextStyle;
|
|
9
|
+
blockquoteContainer?: ViewStyle;
|
|
10
|
+
h1?: TextStyle;
|
|
11
|
+
h2?: TextStyle;
|
|
12
|
+
h3?: TextStyle;
|
|
13
|
+
h4?: TextStyle;
|
|
14
|
+
h5?: TextStyle;
|
|
15
|
+
h6?: TextStyle;
|
|
16
|
+
image?: ImageStyle;
|
|
17
|
+
codespan?: TextStyle;
|
|
18
|
+
code?: ViewStyle;
|
|
19
|
+
}
|
|
20
|
+
export interface ParserOptions {
|
|
21
|
+
contentWidth: number;
|
|
22
|
+
styles?: MarkedStyles;
|
|
23
|
+
}
|