react-native-marked 1.2.0 → 1.3.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.
@@ -20,14 +20,14 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
20
20
  const MDImage = _ref => {
21
21
  let {
22
22
  uri,
23
- alt = ''
23
+ alt
24
24
  } = _ref;
25
25
  (0, _react.useEffect)(() => {
26
26
  _reactNative.Image.prefetch(uri);
27
27
  }, [uri]);
28
28
  return /*#__PURE__*/_react.default.createElement(_reactNativeFitImage.default, {
29
29
  accessibilityRole: "image",
30
- accessibilityLabel: alt,
30
+ accessibilityLabel: alt || 'Image',
31
31
  source: {
32
32
  uri
33
33
  },
@@ -1 +1 @@
1
- {"version":3,"names":["MDImage","uri","alt","useEffect","Image","prefetch","memo"],"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 alt?: string;\n}\n\nconst MDImage = ({ uri, alt = '' }: MDImageProps) => {\n useEffect(() => {\n Image.prefetch(uri);\n }, [uri]);\n\n return (\n <FitImage\n accessibilityRole=\"image\"\n accessibilityLabel={alt}\n source={{ uri }}\n resizeMode=\"cover\"\n />\n );\n};\n\nexport default memo(MDImage);\n"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;AAOA,MAAMA,OAAO,GAAG,QAAqC;EAAA,IAApC;IAAEC,GAAF;IAAOC,GAAG,GAAG;EAAb,CAAoC;EACnD,IAAAC,gBAAA,EAAU,MAAM;IACdC,kBAAA,CAAMC,QAAN,CAAeJ,GAAf;EACD,CAFD,EAEG,CAACA,GAAD,CAFH;EAIA,oBACE,6BAAC,4BAAD;IACE,iBAAiB,EAAC,OADpB;IAEE,kBAAkB,EAAEC,GAFtB;IAGE,MAAM,EAAE;MAAED;IAAF,CAHV;IAIE,UAAU,EAAC;EAJb,EADF;AAQD,CAbD;;4BAee,IAAAK,WAAA,EAAKN,OAAL,C"}
1
+ {"version":3,"names":["MDImage","uri","alt","useEffect","Image","prefetch","memo"],"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 alt?: string;\n}\n\nconst MDImage = ({ uri, alt }: MDImageProps) => {\n useEffect(() => {\n Image.prefetch(uri);\n }, [uri]);\n\n return (\n <FitImage\n accessibilityRole=\"image\"\n accessibilityLabel={alt || 'Image'}\n source={{ uri }}\n resizeMode=\"cover\"\n />\n );\n};\n\nexport default memo(MDImage);\n"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;AAOA,MAAMA,OAAO,GAAG,QAAgC;EAAA,IAA/B;IAAEC,GAAF;IAAOC;EAAP,CAA+B;EAC9C,IAAAC,gBAAA,EAAU,MAAM;IACdC,kBAAA,CAAMC,QAAN,CAAeJ,GAAf;EACD,CAFD,EAEG,CAACA,GAAD,CAFH;EAIA,oBACE,6BAAC,4BAAD;IACE,iBAAiB,EAAC,OADpB;IAEE,kBAAkB,EAAEC,GAAG,IAAI,OAF7B;IAGE,MAAM,EAAE;MAAED;IAAF,CAHV;IAIE,UAAU,EAAC;EAJb,EADF;AAQD,CAbD;;4BAee,IAAAK,WAAA,EAAKN,OAAL,C"}
@@ -22,7 +22,7 @@ class Parser {
22
22
  _defineProperty(this, "headingStylesMap", void 0);
23
23
 
24
24
  _defineProperty(this, "getNormalizedSiblingNodesForBlockAndInlineTokens", (tokens, textStyle) => {
25
- let tempTokens = [];
25
+ let tokenRenderQueue = [];
26
26
  const siblingNodes = [];
27
27
  tokens.forEach(t => {
28
28
  /**
@@ -31,11 +31,13 @@ class Parser {
31
31
  * Note: to be extend for other token types
32
32
  */
33
33
  if (t.type === 'image' || t.type === 'link' && t.tokens && t.tokens[0] && t.tokens[0].type === 'image') {
34
- const parsed = this.parseInline(tempTokens);
34
+ // Render existing inline tokens in the queue
35
+ const parsed = this.parseInline(tokenRenderQueue);
35
36
 
36
37
  if (parsed.length > 0) {
37
38
  siblingNodes.push(this.renderer.getTextNode(parsed, textStyle));
38
- }
39
+ } // Render the current block token
40
+
39
41
 
40
42
  if (t.type === 'image') {
41
43
  siblingNodes.push(this.parseInline([t]));
@@ -44,16 +46,16 @@ class Parser {
44
46
  siblingNodes.push(this.renderer.getImageLinkNode(t.href, imageToken.href, imageToken.text || imageToken.title));
45
47
  }
46
48
 
47
- tempTokens = [];
49
+ tokenRenderQueue = [];
48
50
  return;
49
51
  }
50
52
 
51
- tempTokens = [...tempTokens, t];
53
+ tokenRenderQueue = [...tokenRenderQueue, t];
52
54
  });
53
55
  /* Remaining temp tokens if any */
54
56
 
55
- if (tempTokens.length > 0) {
56
- siblingNodes.push(this.renderer.getTextNode(this.parseInline(tempTokens), {}));
57
+ if (tokenRenderQueue.length > 0) {
58
+ siblingNodes.push(this.renderer.getTextNode(this.parseInline(tokenRenderQueue), {}));
57
59
  }
58
60
 
59
61
  return siblingNodes;
@@ -148,11 +150,8 @@ class Parser {
148
150
 
149
151
  case 'link':
150
152
  {
151
- if (token.tokens && token.tokens[0] && token.tokens[0].type === 'image') {
152
- const imageToken = token.tokens[0];
153
- return this.renderer.getImageLinkNode(token.href, imageToken.href, imageToken.text || imageToken.title);
154
- }
155
-
153
+ // Note: Linking Images (https://www.markdownguide.org/basic-syntax/#linking-images) are wrapped
154
+ // in paragraph token, so will be handled via `getNormalizedSiblingNodesForBlockAndInlineTokens`
156
155
  const linkStyle = { ...styles,
157
156
  ...this.styles.link // To override color property
158
157
 
@@ -195,7 +194,10 @@ class Parser {
195
194
 
196
195
  case 'del':
197
196
  {
198
- return null;
197
+ const strikethroughStyle = { ...this.styles.strikethrough,
198
+ ...styles
199
+ };
200
+ return this.renderer.getTextNode(this.parseInline(token.tokens, strikethroughStyle), strikethroughStyle);
199
201
  }
200
202
 
201
203
  case 'text':
@@ -1 +1 @@
1
- {"version":3,"names":["Parser","constructor","options","tokens","textStyle","tempTokens","siblingNodes","forEach","t","type","parsed","parseInline","length","push","renderer","getTextNode","imageToken","getImageLinkNode","href","text","title","styles","Renderer","headingStylesMap","h1","h2","h3","h4","h5","h6","parse","elements","map","token","paragraphChildren","getNormalizedSiblingNodesForBlockAndInlineTokens","getViewNode","paragraph","getBlockquoteNode","blockquote","depth","getCodeBlockNode","code","em","hr","li","items","item","children","cItem","childTokens","listChildren","getListNode","ordered","list","filter","element","linkStyle","link","getTextLinkNode","getImageNode","boldStyle","strong","italicStyle","codespan","raw","trim","decode","console","warn"],"sources":["Parser.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport type { marked } from 'marked';\nimport { decode } from 'entities';\nimport Renderer from './Renderer';\nimport type { MarkedStyles } from '../theme/types';\nimport type { CustomStyleProp, ParserOptions, TextStyleProp } from './types';\n\nclass Parser {\n private renderer;\n private styles: MarkedStyles;\n private headingStylesMap: Record<number, TextStyleProp>;\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: ReactNode[] = tokens.map((token) => {\n switch (token.type) {\n case 'space': {\n return null;\n }\n case 'paragraph': {\n const paragraphChildren =\n this.getNormalizedSiblingNodesForBlockAndInlineTokens(\n token.tokens,\n this.styles.text\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(\n this.parseInline(token.tokens, styles),\n styles\n );\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) => {\n const children = item.tokens.map((cItem) => {\n if (cItem.type === 'text') {\n /* getViewNode since tokens could contain a block like elements (i.e. img) */\n const childTokens = (cItem as marked.Tokens.Text).tokens || [];\n const listChildren =\n this.getNormalizedSiblingNodesForBlockAndInlineTokens(\n childTokens,\n this.styles.li\n );\n return this.renderer.getViewNode(listChildren, this.styles.li);\n }\n\n /* Parse the nested token */\n return this.parse([cItem]);\n });\n return this.renderer.getViewNode(children, this.styles.li);\n });\n return this.renderer.getListNode(\n token.ordered,\n li,\n this.styles.list,\n this.styles.li\n );\n }\n default:\n return this.parseInline([token]);\n }\n });\n return elements.filter((element) => element !== null);\n }\n\n parseInline(tokens: marked.Token[], styles?: CustomStyleProp) {\n const elements: 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 ...this.styles.text,\n ...styles,\n });\n }\n case 'link': {\n if (\n token.tokens &&\n token.tokens[0] &&\n token.tokens[0].type === 'image'\n ) {\n const imageToken = token.tokens[0];\n return this.renderer.getImageLinkNode(\n token.href,\n imageToken.href,\n imageToken.text || imageToken.title\n );\n }\n\n const linkStyle = {\n ...styles,\n ...this.styles.link, // To override color property\n };\n return this.renderer.getTextLinkNode(\n this.parseInline(token.tokens, linkStyle),\n token.href,\n linkStyle\n );\n }\n case 'image': {\n return this.renderer.getImageNode(\n token.href,\n token.text || token.title\n );\n }\n case 'strong': {\n const boldStyle = {\n ...this.styles.strong,\n ...styles,\n };\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, boldStyle),\n boldStyle\n );\n }\n case 'em': {\n const italicStyle = {\n ...this.styles.em,\n ...styles,\n };\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, italicStyle),\n italicStyle\n );\n }\n case 'codespan': {\n return this.renderer.getTextNode(token.text, {\n ...this.styles.codespan,\n ...styles,\n });\n }\n case 'br': {\n return this.renderer.getTextNode('\\n', {});\n }\n case 'del': {\n return null;\n }\n case 'text':\n case 'html': {\n if (token.raw.trim().length < 1) {\n return null;\n }\n\n return this.renderer.getTextNode(decode(token.raw), {\n ...this.styles.text,\n ...styles,\n });\n }\n default: {\n console.warn(`Token with '${token.type}' type was not found.`);\n return null;\n }\n }\n });\n return elements.filter((element) => element !== null);\n }\n\n private getNormalizedSiblingNodesForBlockAndInlineTokens = (\n tokens: marked.Token[],\n textStyle: TextStyleProp\n ): ReactNode[] => {\n let tempTokens: marked.Token[] = [];\n const siblingNodes: ReactNode[] = [];\n tokens.forEach((t) => {\n /**\n * To avoid inlining images\n * Currently supports images, link images\n * Note: to be extend for other token types\n */\n if (\n t.type === 'image' ||\n (t.type === 'link' &&\n t.tokens &&\n t.tokens[0] &&\n t.tokens[0].type === 'image')\n ) {\n const parsed = this.parseInline(tempTokens);\n if (parsed.length > 0) {\n siblingNodes.push(this.renderer.getTextNode(parsed, textStyle));\n }\n\n if (t.type === 'image') {\n siblingNodes.push(this.parseInline([t]));\n } else if (t.type === 'link') {\n const imageToken = t.tokens[0] as marked.Tokens.Image;\n siblingNodes.push(\n this.renderer.getImageLinkNode(\n t.href,\n imageToken.href,\n imageToken.text || imageToken.title\n )\n );\n }\n\n tempTokens = [];\n return;\n }\n tempTokens = [...tempTokens, t];\n });\n\n /* Remaining temp tokens if any */\n if (tempTokens.length > 0) {\n siblingNodes.push(\n this.renderer.getTextNode(this.parseInline(tempTokens), {})\n );\n }\n\n return siblingNodes;\n };\n}\n\nexport default Parser;\n"],"mappings":";;;;;;;AAEA;;AACA;;;;;;AAIA,MAAMA,MAAN,CAAa;EAIXC,WAAW,CAACC,OAAD,EAAyB;IAAA;;IAAA;;IAAA;;IAAA,0EAoLuB,CACzDC,MADyD,EAEzDC,SAFyD,KAGzC;MAChB,IAAIC,UAA0B,GAAG,EAAjC;MACA,MAAMC,YAAyB,GAAG,EAAlC;MACAH,MAAM,CAACI,OAAP,CAAgBC,CAAD,IAAO;QACpB;AACN;AACA;AACA;AACA;QACM,IACEA,CAAC,CAACC,IAAF,KAAW,OAAX,IACCD,CAAC,CAACC,IAAF,KAAW,MAAX,IACCD,CAAC,CAACL,MADH,IAECK,CAAC,CAACL,MAAF,CAAS,CAAT,CAFD,IAGCK,CAAC,CAACL,MAAF,CAAS,CAAT,EAAYM,IAAZ,KAAqB,OALzB,EAME;UACA,MAAMC,MAAM,GAAG,KAAKC,WAAL,CAAiBN,UAAjB,CAAf;;UACA,IAAIK,MAAM,CAACE,MAAP,GAAgB,CAApB,EAAuB;YACrBN,YAAY,CAACO,IAAb,CAAkB,KAAKC,QAAL,CAAcC,WAAd,CAA0BL,MAA1B,EAAkCN,SAAlC,CAAlB;UACD;;UAED,IAAII,CAAC,CAACC,IAAF,KAAW,OAAf,EAAwB;YACtBH,YAAY,CAACO,IAAb,CAAkB,KAAKF,WAAL,CAAiB,CAACH,CAAD,CAAjB,CAAlB;UACD,CAFD,MAEO,IAAIA,CAAC,CAACC,IAAF,KAAW,MAAf,EAAuB;YAC5B,MAAMO,UAAU,GAAGR,CAAC,CAACL,MAAF,CAAS,CAAT,CAAnB;YACAG,YAAY,CAACO,IAAb,CACE,KAAKC,QAAL,CAAcG,gBAAd,CACET,CAAC,CAACU,IADJ,EAEEF,UAAU,CAACE,IAFb,EAGEF,UAAU,CAACG,IAAX,IAAmBH,UAAU,CAACI,KAHhC,CADF;UAOD;;UAEDf,UAAU,GAAG,EAAb;UACA;QACD;;QACDA,UAAU,GAAG,CAAC,GAAGA,UAAJ,EAAgBG,CAAhB,CAAb;MACD,CAnCD;MAqCA;;MACA,IAAIH,UAAU,CAACO,MAAX,GAAoB,CAAxB,EAA2B;QACzBN,YAAY,CAACO,IAAb,CACE,KAAKC,QAAL,CAAcC,WAAd,CAA0B,KAAKJ,WAAL,CAAiBN,UAAjB,CAA1B,EAAwD,EAAxD,CADF;MAGD;;MAED,OAAOC,YAAP;IACD,CAvOmC;;IAClC,KAAKe,MAAL,GAAc,EAAE,GAAGnB,OAAO,CAACmB;IAAb,CAAd;IACA,KAAKP,QAAL,GAAgB,IAAIQ,iBAAJ,EAAhB;IACA,KAAKC,gBAAL,GAAwB;MACtB,GAAG,KAAKF,MAAL,CAAYG,EADO;MAEtB,GAAG,KAAKH,MAAL,CAAYI,EAFO;MAGtB,GAAG,KAAKJ,MAAL,CAAYK,EAHO;MAItB,GAAG,KAAKL,MAAL,CAAYM,EAJO;MAKtB,GAAG,KAAKN,MAAL,CAAYO,EALO;MAMtB,GAAG,KAAKP,MAAL,CAAYQ;IANO,CAAxB;EAQD;;EAEDC,KAAK,CAAC3B,MAAD,EAAyB;IAC5B,MAAM4B,QAAqB,GAAG5B,MAAM,CAAC6B,GAAP,CAAYC,KAAD,IAAW;MAClD,QAAQA,KAAK,CAACxB,IAAd;QACE,KAAK,OAAL;UAAc;YACZ,OAAO,IAAP;UACD;;QACD,KAAK,WAAL;UAAkB;YAChB,MAAMyB,iBAAiB,GACrB,KAAKC,gDAAL,CACEF,KAAK,CAAC9B,MADR,EAEE,KAAKkB,MAAL,CAAYF,IAFd,CADF;YAMA,OAAO,KAAKL,QAAL,CAAcsB,WAAd,CACLF,iBADK,EAEL,KAAKb,MAAL,CAAYgB,SAFP,CAAP;UAID;;QACD,KAAK,YAAL;UAAmB;YACjB,OAAO,KAAKvB,QAAL,CAAcwB,iBAAd,CACL,KAAKR,KAAL,CAAWG,KAAK,CAAC9B,MAAjB,CADK,EAEL,KAAKkB,MAAL,CAAYkB,UAFP,CAAP;UAID;;QACD,KAAK,SAAL;UAAgB;YACd,MAAMlB,MAAM,GAAG,KAAKE,gBAAL,CAAsBU,KAAK,CAACO,KAA5B,KAAsC,KAAKnB,MAAL,CAAYF,IAAjE;YACA,OAAO,KAAKL,QAAL,CAAcC,WAAd,CACL,KAAKJ,WAAL,CAAiBsB,KAAK,CAAC9B,MAAvB,EAA+BkB,MAA/B,CADK,EAELA,MAFK,CAAP;UAID;;QACD,KAAK,MAAL;UAAa;YACX,OAAO,KAAKP,QAAL,CAAc2B,gBAAd,CACLR,KAAK,CAACd,IADD,EAEL,KAAKE,MAAL,CAAYqB,IAFP,EAGL,KAAKrB,MAAL,CAAYsB,EAHP,CAAP;UAKD;;QACD,KAAK,IAAL;UAAW;YACT,OAAO,KAAK7B,QAAL,CAAcsB,WAAd,CAA0B,IAA1B,EAAgC,KAAKf,MAAL,CAAYuB,EAA5C,CAAP;UACD;;QACD,KAAK,MAAL;UAAa;YACX,MAAMC,EAAE,GAAGZ,KAAK,CAACa,KAAN,CAAYd,GAAZ,CAAiBe,IAAD,IAAU;cACnC,MAAMC,QAAQ,GAAGD,IAAI,CAAC5C,MAAL,CAAY6B,GAAZ,CAAiBiB,KAAD,IAAW;gBAC1C,IAAIA,KAAK,CAACxC,IAAN,KAAe,MAAnB,EAA2B;kBACzB;kBACA,MAAMyC,WAAW,GAAID,KAAD,CAA8B9C,MAA9B,IAAwC,EAA5D;kBACA,MAAMgD,YAAY,GAChB,KAAKhB,gDAAL,CACEe,WADF,EAEE,KAAK7B,MAAL,CAAYwB,EAFd,CADF;kBAKA,OAAO,KAAK/B,QAAL,CAAcsB,WAAd,CAA0Be,YAA1B,EAAwC,KAAK9B,MAAL,CAAYwB,EAApD,CAAP;gBACD;gBAED;;;gBACA,OAAO,KAAKf,KAAL,CAAW,CAACmB,KAAD,CAAX,CAAP;cACD,CAdgB,CAAjB;cAeA,OAAO,KAAKnC,QAAL,CAAcsB,WAAd,CAA0BY,QAA1B,EAAoC,KAAK3B,MAAL,CAAYwB,EAAhD,CAAP;YACD,CAjBU,CAAX;YAkBA,OAAO,KAAK/B,QAAL,CAAcsC,WAAd,CACLnB,KAAK,CAACoB,OADD,EAELR,EAFK,EAGL,KAAKxB,MAAL,CAAYiC,IAHP,EAIL,KAAKjC,MAAL,CAAYwB,EAJP,CAAP;UAMD;;QACD;UACE,OAAO,KAAKlC,WAAL,CAAiB,CAACsB,KAAD,CAAjB,CAAP;MAlEJ;IAoED,CArE6B,CAA9B;IAsEA,OAAOF,QAAQ,CAACwB,MAAT,CAAiBC,OAAD,IAAaA,OAAO,KAAK,IAAzC,CAAP;EACD;;EAED7C,WAAW,CAACR,MAAD,EAAyBkB,MAAzB,EAAmD;IAC5D,MAAMU,QAAqB,GAAG5B,MAAM,CAAC6B,GAAP,CAAYC,KAAD,IAAW;MAClD,IAAI,CAACA,KAAL,EAAY,OAAO,IAAP;;MAEZ,QAAQA,KAAK,CAACxB,IAAd;QACE,KAAK,QAAL;UAAe;YACb,OAAO,KAAKK,QAAL,CAAcC,WAAd,CAA0BkB,KAAK,CAACd,IAAhC,EAAsC,EAC3C,GAAG,KAAKE,MAAL,CAAYF,IAD4B;cAE3C,GAAGE;YAFwC,CAAtC,CAAP;UAID;;QACD,KAAK,MAAL;UAAa;YACX,IACEY,KAAK,CAAC9B,MAAN,IACA8B,KAAK,CAAC9B,MAAN,CAAa,CAAb,CADA,IAEA8B,KAAK,CAAC9B,MAAN,CAAa,CAAb,EAAgBM,IAAhB,KAAyB,OAH3B,EAIE;cACA,MAAMO,UAAU,GAAGiB,KAAK,CAAC9B,MAAN,CAAa,CAAb,CAAnB;cACA,OAAO,KAAKW,QAAL,CAAcG,gBAAd,CACLgB,KAAK,CAACf,IADD,EAELF,UAAU,CAACE,IAFN,EAGLF,UAAU,CAACG,IAAX,IAAmBH,UAAU,CAACI,KAHzB,CAAP;YAKD;;YAED,MAAMqC,SAAS,GAAG,EAChB,GAAGpC,MADa;cAEhB,GAAG,KAAKA,MAAL,CAAYqC,IAFC,CAEK;;YAFL,CAAlB;YAIA,OAAO,KAAK5C,QAAL,CAAc6C,eAAd,CACL,KAAKhD,WAAL,CAAiBsB,KAAK,CAAC9B,MAAvB,EAA+BsD,SAA/B,CADK,EAELxB,KAAK,CAACf,IAFD,EAGLuC,SAHK,CAAP;UAKD;;QACD,KAAK,OAAL;UAAc;YACZ,OAAO,KAAK3C,QAAL,CAAc8C,YAAd,CACL3B,KAAK,CAACf,IADD,EAELe,KAAK,CAACd,IAAN,IAAcc,KAAK,CAACb,KAFf,CAAP;UAID;;QACD,KAAK,QAAL;UAAe;YACb,MAAMyC,SAAS,GAAG,EAChB,GAAG,KAAKxC,MAAL,CAAYyC,MADC;cAEhB,GAAGzC;YAFa,CAAlB;YAIA,OAAO,KAAKP,QAAL,CAAcC,WAAd,CACL,KAAKJ,WAAL,CAAiBsB,KAAK,CAAC9B,MAAvB,EAA+B0D,SAA/B,CADK,EAELA,SAFK,CAAP;UAID;;QACD,KAAK,IAAL;UAAW;YACT,MAAME,WAAW,GAAG,EAClB,GAAG,KAAK1C,MAAL,CAAYsB,EADG;cAElB,GAAGtB;YAFe,CAApB;YAIA,OAAO,KAAKP,QAAL,CAAcC,WAAd,CACL,KAAKJ,WAAL,CAAiBsB,KAAK,CAAC9B,MAAvB,EAA+B4D,WAA/B,CADK,EAELA,WAFK,CAAP;UAID;;QACD,KAAK,UAAL;UAAiB;YACf,OAAO,KAAKjD,QAAL,CAAcC,WAAd,CAA0BkB,KAAK,CAACd,IAAhC,EAAsC,EAC3C,GAAG,KAAKE,MAAL,CAAY2C,QAD4B;cAE3C,GAAG3C;YAFwC,CAAtC,CAAP;UAID;;QACD,KAAK,IAAL;UAAW;YACT,OAAO,KAAKP,QAAL,CAAcC,WAAd,CAA0B,IAA1B,EAAgC,EAAhC,CAAP;UACD;;QACD,KAAK,KAAL;UAAY;YACV,OAAO,IAAP;UACD;;QACD,KAAK,MAAL;QACA,KAAK,MAAL;UAAa;YACX,IAAIkB,KAAK,CAACgC,GAAN,CAAUC,IAAV,GAAiBtD,MAAjB,GAA0B,CAA9B,EAAiC;cAC/B,OAAO,IAAP;YACD;;YAED,OAAO,KAAKE,QAAL,CAAcC,WAAd,CAA0B,IAAAoD,gBAAA,EAAOlC,KAAK,CAACgC,GAAb,CAA1B,EAA6C,EAClD,GAAG,KAAK5C,MAAL,CAAYF,IADmC;cAElD,GAAGE;YAF+C,CAA7C,CAAP;UAID;;QACD;UAAS;YACP+C,OAAO,CAACC,IAAR,CAAc,eAAcpC,KAAK,CAACxB,IAAK,uBAAvC;YACA,OAAO,IAAP;UACD;MAnFH;IAqFD,CAxF6B,CAA9B;IAyFA,OAAOsB,QAAQ,CAACwB,MAAT,CAAiBC,OAAD,IAAaA,OAAO,KAAK,IAAzC,CAAP;EACD;;AAtLU;;eA8OExD,M"}
1
+ {"version":3,"names":["Parser","constructor","options","tokens","textStyle","tokenRenderQueue","siblingNodes","forEach","t","type","parsed","parseInline","length","push","renderer","getTextNode","imageToken","getImageLinkNode","href","text","title","styles","Renderer","headingStylesMap","h1","h2","h3","h4","h5","h6","parse","elements","map","token","paragraphChildren","getNormalizedSiblingNodesForBlockAndInlineTokens","getViewNode","paragraph","getBlockquoteNode","blockquote","depth","getCodeBlockNode","code","em","hr","li","items","item","children","cItem","childTokens","listChildren","getListNode","ordered","list","filter","element","linkStyle","link","getTextLinkNode","getImageNode","boldStyle","strong","italicStyle","codespan","strikethroughStyle","strikethrough","raw","trim","decode","console","warn"],"sources":["Parser.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport type { marked } from 'marked';\nimport { decode } from 'entities';\nimport Renderer from './Renderer';\nimport type { MarkedStyles } from '../theme/types';\nimport type { CustomStyleProp, ParserOptions, TextStyleProp } from './types';\n\nclass Parser {\n private renderer;\n private styles: MarkedStyles;\n private headingStylesMap: Record<number, TextStyleProp>;\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: ReactNode[] = tokens.map((token) => {\n switch (token.type) {\n case 'space': {\n return null;\n }\n case 'paragraph': {\n const paragraphChildren =\n this.getNormalizedSiblingNodesForBlockAndInlineTokens(\n token.tokens,\n this.styles.text\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(\n this.parseInline(token.tokens, styles),\n styles\n );\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) => {\n const children = item.tokens.map((cItem) => {\n if (cItem.type === 'text') {\n /* getViewNode since tokens could contain a block like elements (i.e. img) */\n const childTokens = (cItem as marked.Tokens.Text).tokens || [];\n const listChildren =\n this.getNormalizedSiblingNodesForBlockAndInlineTokens(\n childTokens,\n this.styles.li\n );\n return this.renderer.getViewNode(listChildren, this.styles.li);\n }\n\n /* Parse the nested token */\n return this.parse([cItem]);\n });\n return this.renderer.getViewNode(children, this.styles.li);\n });\n return this.renderer.getListNode(\n token.ordered,\n li,\n this.styles.list,\n this.styles.li\n );\n }\n default:\n return this.parseInline([token]);\n }\n });\n return elements.filter((element) => element !== null);\n }\n\n parseInline(tokens: marked.Token[], styles?: CustomStyleProp) {\n const elements: 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 ...this.styles.text,\n ...styles,\n });\n }\n case 'link': {\n // Note: Linking Images (https://www.markdownguide.org/basic-syntax/#linking-images) are wrapped\n // in paragraph token, so will be handled via `getNormalizedSiblingNodesForBlockAndInlineTokens`\n const linkStyle = {\n ...styles,\n ...this.styles.link, // To override color property\n };\n return this.renderer.getTextLinkNode(\n this.parseInline(token.tokens, linkStyle),\n token.href,\n linkStyle\n );\n }\n case 'image': {\n return this.renderer.getImageNode(\n token.href,\n token.text || token.title\n );\n }\n case 'strong': {\n const boldStyle = {\n ...this.styles.strong,\n ...styles,\n };\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, boldStyle),\n boldStyle\n );\n }\n case 'em': {\n const italicStyle = {\n ...this.styles.em,\n ...styles,\n };\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, italicStyle),\n italicStyle\n );\n }\n case 'codespan': {\n return this.renderer.getTextNode(token.text, {\n ...this.styles.codespan,\n ...styles,\n });\n }\n case 'br': {\n return this.renderer.getTextNode('\\n', {});\n }\n case 'del': {\n const strikethroughStyle = {\n ...this.styles.strikethrough,\n ...styles,\n };\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, strikethroughStyle),\n strikethroughStyle\n );\n }\n case 'text':\n case 'html': {\n if (token.raw.trim().length < 1) {\n return null;\n }\n\n return this.renderer.getTextNode(decode(token.raw), {\n ...this.styles.text,\n ...styles,\n });\n }\n default: {\n console.warn(`Token with '${token.type}' type was not found.`);\n return null;\n }\n }\n });\n return elements.filter((element) => element !== null);\n }\n\n private getNormalizedSiblingNodesForBlockAndInlineTokens = (\n tokens: marked.Token[],\n textStyle: TextStyleProp\n ): ReactNode[] => {\n let tokenRenderQueue: marked.Token[] = [];\n const siblingNodes: ReactNode[] = [];\n tokens.forEach((t) => {\n /**\n * To avoid inlining images\n * Currently supports images, link images\n * Note: to be extend for other token types\n */\n if (\n t.type === 'image' ||\n (t.type === 'link' &&\n t.tokens &&\n t.tokens[0] &&\n t.tokens[0].type === 'image')\n ) {\n // Render existing inline tokens in the queue\n const parsed = this.parseInline(tokenRenderQueue);\n if (parsed.length > 0) {\n siblingNodes.push(this.renderer.getTextNode(parsed, textStyle));\n }\n\n // Render the current block token\n if (t.type === 'image') {\n siblingNodes.push(this.parseInline([t]));\n } else if (t.type === 'link') {\n const imageToken = t.tokens[0] as marked.Tokens.Image;\n siblingNodes.push(\n this.renderer.getImageLinkNode(\n t.href,\n imageToken.href,\n imageToken.text || imageToken.title\n )\n );\n }\n\n tokenRenderQueue = [];\n return;\n }\n tokenRenderQueue = [...tokenRenderQueue, t];\n });\n\n /* Remaining temp tokens if any */\n if (tokenRenderQueue.length > 0) {\n siblingNodes.push(\n this.renderer.getTextNode(this.parseInline(tokenRenderQueue), {})\n );\n }\n\n return siblingNodes;\n };\n}\n\nexport default Parser;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["Renderer","children","styles","generateRandomString","href","onLinkPress","imageUrl","alt","imageNode","getImageNode","getViewNode","getCodeBlockNode","text","containerStyle","textStyle","getBlockquoteNode","uri","getListNode","ordered","li","listStyle","Decimal","Disc","map","node"],"sources":["Renderer.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport { ScrollView, View, Text, TouchableHighlight } from 'react-native';\nimport MarkedList from '@jsamr/react-native-li';\nimport Disc from '@jsamr/counter-style/presets/disc';\nimport Decimal from '@jsamr/counter-style/presets/decimal';\nimport MDImage from './../components/MDImage';\nimport { generateRandomString } from '../utils/string';\nimport type { TextStyleProp, ViewStyleProp } from './types';\nimport { onLinkPress } from '../utils/handlers';\n\nclass Renderer {\n getTextNode = (children: string | ReactNode[], styles: TextStyleProp) => {\n return (\n <Text key={generateRandomString()} style={styles}>\n {children}\n </Text>\n );\n };\n\n getTextLinkNode = (\n children: string | ReactNode[],\n href: string,\n styles: TextStyleProp\n ) => {\n return (\n <Text\n accessibilityRole=\"link\"\n accessibilityHint=\"Opens in a new window\"\n key={generateRandomString()}\n onPress={onLinkPress(href)}\n style={styles}\n >\n {children}\n </Text>\n );\n };\n\n getImageLinkNode = (href: string, imageUrl: string, alt: string) => {\n const imageNode = this.getImageNode(imageUrl, alt);\n return (\n <TouchableHighlight\n accessibilityRole=\"link\"\n accessibilityHint=\"Opens in a new window\"\n onPress={onLinkPress(href)}\n key={generateRandomString()}\n >\n {imageNode}\n </TouchableHighlight>\n );\n };\n\n getViewNode(children: ReactNode[] | null, styles: ViewStyleProp) {\n return (\n <View key={generateRandomString()} style={styles}>\n {children}\n </View>\n );\n }\n\n getCodeBlockNode(\n text: string,\n containerStyle: ViewStyleProp,\n textStyle: TextStyleProp\n ) {\n return (\n <ScrollView\n key={generateRandomString()}\n contentContainerStyle={containerStyle}\n horizontal\n >\n <Text style={textStyle}>{text}</Text>\n </ScrollView>\n );\n }\n\n getBlockquoteNode(children: ReactNode[], styles: ViewStyleProp) {\n return (\n <View key={generateRandomString()} style={styles}>\n {children}\n </View>\n );\n }\n\n getImageNode(uri: string, alt: string) {\n return <MDImage key={generateRandomString()} uri={uri} alt={alt} />;\n }\n\n getListNode(\n ordered: boolean,\n li: ReactNode[],\n listStyle: ViewStyleProp,\n textStyle: TextStyleProp\n ) {\n return (\n <MarkedList\n counterRenderer={ordered ? Decimal : Disc}\n markerTextStyle={textStyle}\n markerBoxStyle={listStyle}\n key={generateRandomString()}\n >\n {li.map((node) => node)}\n </MarkedList>\n );\n }\n}\n\nexport default Renderer;\n"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;;;AAEA,MAAMA,QAAN,CAAe;EAAA;IAAA,qCACC,CAACC,QAAD,EAAiCC,MAAjC,KAA2D;MACvE,oBACE,6BAAC,iBAAD;QAAM,GAAG,EAAE,IAAAC,4BAAA,GAAX;QAAmC,KAAK,EAAED;MAA1C,GACGD,QADH,CADF;IAKD,CAPY;;IAAA,yCASK,CAChBA,QADgB,EAEhBG,IAFgB,EAGhBF,MAHgB,KAIb;MACH,oBACE,6BAAC,iBAAD;QACE,iBAAiB,EAAC,MADpB;QAEE,iBAAiB,EAAC,uBAFpB;QAGE,GAAG,EAAE,IAAAC,4BAAA,GAHP;QAIE,OAAO,EAAE,IAAAE,qBAAA,EAAYD,IAAZ,CAJX;QAKE,KAAK,EAAEF;MALT,GAOGD,QAPH,CADF;IAWD,CAzBY;;IAAA,0CA2BM,CAACG,IAAD,EAAeE,QAAf,EAAiCC,GAAjC,KAAiD;MAClE,MAAMC,SAAS,GAAG,KAAKC,YAAL,CAAkBH,QAAlB,EAA4BC,GAA5B,CAAlB;MACA,oBACE,6BAAC,+BAAD;QACE,iBAAiB,EAAC,MADpB;QAEE,iBAAiB,EAAC,uBAFpB;QAGE,OAAO,EAAE,IAAAF,qBAAA,EAAYD,IAAZ,CAHX;QAIE,GAAG,EAAE,IAAAD,4BAAA;MAJP,GAMGK,SANH,CADF;IAUD,CAvCY;EAAA;;EAyCbE,WAAW,CAACT,QAAD,EAA+BC,MAA/B,EAAsD;IAC/D,oBACE,6BAAC,iBAAD;MAAM,GAAG,EAAE,IAAAC,4BAAA,GAAX;MAAmC,KAAK,EAAED;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDU,gBAAgB,CACdC,IADc,EAEdC,cAFc,EAGdC,SAHc,EAId;IACA,oBACE,6BAAC,uBAAD;MACE,GAAG,EAAE,IAAAX,4BAAA,GADP;MAEE,qBAAqB,EAAEU,cAFzB;MAGE,UAAU;IAHZ,gBAKE,6BAAC,iBAAD;MAAM,KAAK,EAAEC;IAAb,GAAyBF,IAAzB,CALF,CADF;EASD;;EAEDG,iBAAiB,CAACd,QAAD,EAAwBC,MAAxB,EAA+C;IAC9D,oBACE,6BAAC,iBAAD;MAAM,GAAG,EAAE,IAAAC,4BAAA,GAAX;MAAmC,KAAK,EAAED;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDQ,YAAY,CAACO,GAAD,EAAcT,GAAd,EAA2B;IACrC,oBAAO,6BAAC,gBAAD;MAAS,GAAG,EAAE,IAAAJ,4BAAA,GAAd;MAAsC,GAAG,EAAEa,GAA3C;MAAgD,GAAG,EAAET;IAArD,EAAP;EACD;;EAEDU,WAAW,CACTC,OADS,EAETC,EAFS,EAGTC,SAHS,EAITN,SAJS,EAKT;IACA,oBACE,6BAAC,sBAAD;MACE,eAAe,EAAEI,OAAO,GAAGG,gBAAH,GAAaC,aADvC;MAEE,eAAe,EAAER,SAFnB;MAGE,cAAc,EAAEM,SAHlB;MAIE,GAAG,EAAE,IAAAjB,4BAAA;IAJP,GAMGgB,EAAE,CAACI,GAAH,CAAQC,IAAD,IAAUA,IAAjB,CANH,CADF;EAUD;;AA7FY;;eAgGAxB,Q"}
1
+ {"version":3,"names":["Renderer","children","styles","generateRandomString","href","onLinkPress","imageUrl","alt","imageNode","getImageNode","getViewNode","getCodeBlockNode","text","containerStyle","textStyle","getBlockquoteNode","uri","getListNode","ordered","li","listStyle","Decimal","Disc","map","node"],"sources":["Renderer.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport { ScrollView, View, Text, TouchableHighlight } from 'react-native';\nimport MarkedList from '@jsamr/react-native-li';\nimport Disc from '@jsamr/counter-style/presets/disc';\nimport Decimal from '@jsamr/counter-style/presets/decimal';\nimport MDImage from './../components/MDImage';\nimport { generateRandomString } from '../utils/string';\nimport type { TextStyleProp, ViewStyleProp } from './types';\nimport { onLinkPress } from '../utils/handlers';\n\nclass Renderer {\n getTextNode = (children: string | ReactNode[], styles: TextStyleProp) => {\n return (\n <Text key={generateRandomString()} style={styles}>\n {children}\n </Text>\n );\n };\n\n getTextLinkNode = (\n children: string | ReactNode[],\n href: string,\n styles: TextStyleProp\n ) => {\n return (\n <Text\n accessibilityRole=\"link\"\n accessibilityHint=\"Opens in a new window\"\n key={generateRandomString()}\n onPress={onLinkPress(href)}\n style={styles}\n >\n {children}\n </Text>\n );\n };\n\n getImageLinkNode = (href: string, imageUrl: string, alt?: string) => {\n const imageNode = this.getImageNode(imageUrl, alt);\n return (\n <TouchableHighlight\n accessibilityRole=\"link\"\n accessibilityHint=\"Opens in a new window\"\n onPress={onLinkPress(href)}\n key={generateRandomString()}\n >\n {imageNode}\n </TouchableHighlight>\n );\n };\n\n getViewNode(children: ReactNode[] | null, styles: ViewStyleProp) {\n return (\n <View key={generateRandomString()} style={styles}>\n {children}\n </View>\n );\n }\n\n getCodeBlockNode(\n text: string,\n containerStyle: ViewStyleProp,\n textStyle: TextStyleProp\n ) {\n return (\n <ScrollView\n key={generateRandomString()}\n contentContainerStyle={containerStyle}\n horizontal\n >\n <Text style={textStyle}>{text}</Text>\n </ScrollView>\n );\n }\n\n getBlockquoteNode(children: ReactNode[], styles: ViewStyleProp) {\n return (\n <View key={generateRandomString()} style={styles}>\n {children}\n </View>\n );\n }\n\n getImageNode(uri: string, alt?: string) {\n return <MDImage key={generateRandomString()} uri={uri} alt={alt} />;\n }\n\n getListNode(\n ordered: boolean,\n li: ReactNode[],\n listStyle: ViewStyleProp,\n textStyle: TextStyleProp\n ) {\n return (\n <MarkedList\n counterRenderer={ordered ? Decimal : Disc}\n markerTextStyle={textStyle}\n markerBoxStyle={listStyle}\n key={generateRandomString()}\n >\n {li.map((node) => node)}\n </MarkedList>\n );\n }\n}\n\nexport default Renderer;\n"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;;;AAEA,MAAMA,QAAN,CAAe;EAAA;IAAA,qCACC,CAACC,QAAD,EAAiCC,MAAjC,KAA2D;MACvE,oBACE,6BAAC,iBAAD;QAAM,GAAG,EAAE,IAAAC,4BAAA,GAAX;QAAmC,KAAK,EAAED;MAA1C,GACGD,QADH,CADF;IAKD,CAPY;;IAAA,yCASK,CAChBA,QADgB,EAEhBG,IAFgB,EAGhBF,MAHgB,KAIb;MACH,oBACE,6BAAC,iBAAD;QACE,iBAAiB,EAAC,MADpB;QAEE,iBAAiB,EAAC,uBAFpB;QAGE,GAAG,EAAE,IAAAC,4BAAA,GAHP;QAIE,OAAO,EAAE,IAAAE,qBAAA,EAAYD,IAAZ,CAJX;QAKE,KAAK,EAAEF;MALT,GAOGD,QAPH,CADF;IAWD,CAzBY;;IAAA,0CA2BM,CAACG,IAAD,EAAeE,QAAf,EAAiCC,GAAjC,KAAkD;MACnE,MAAMC,SAAS,GAAG,KAAKC,YAAL,CAAkBH,QAAlB,EAA4BC,GAA5B,CAAlB;MACA,oBACE,6BAAC,+BAAD;QACE,iBAAiB,EAAC,MADpB;QAEE,iBAAiB,EAAC,uBAFpB;QAGE,OAAO,EAAE,IAAAF,qBAAA,EAAYD,IAAZ,CAHX;QAIE,GAAG,EAAE,IAAAD,4BAAA;MAJP,GAMGK,SANH,CADF;IAUD,CAvCY;EAAA;;EAyCbE,WAAW,CAACT,QAAD,EAA+BC,MAA/B,EAAsD;IAC/D,oBACE,6BAAC,iBAAD;MAAM,GAAG,EAAE,IAAAC,4BAAA,GAAX;MAAmC,KAAK,EAAED;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDU,gBAAgB,CACdC,IADc,EAEdC,cAFc,EAGdC,SAHc,EAId;IACA,oBACE,6BAAC,uBAAD;MACE,GAAG,EAAE,IAAAX,4BAAA,GADP;MAEE,qBAAqB,EAAEU,cAFzB;MAGE,UAAU;IAHZ,gBAKE,6BAAC,iBAAD;MAAM,KAAK,EAAEC;IAAb,GAAyBF,IAAzB,CALF,CADF;EASD;;EAEDG,iBAAiB,CAACd,QAAD,EAAwBC,MAAxB,EAA+C;IAC9D,oBACE,6BAAC,iBAAD;MAAM,GAAG,EAAE,IAAAC,4BAAA,GAAX;MAAmC,KAAK,EAAED;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDQ,YAAY,CAACO,GAAD,EAAcT,GAAd,EAA4B;IACtC,oBAAO,6BAAC,gBAAD;MAAS,GAAG,EAAE,IAAAJ,4BAAA,GAAd;MAAsC,GAAG,EAAEa,GAA3C;MAAgD,GAAG,EAAET;IAArD,EAAP;EACD;;EAEDU,WAAW,CACTC,OADS,EAETC,EAFS,EAGTC,SAHS,EAITN,SAJS,EAKT;IACA,oBACE,6BAAC,sBAAD;MACE,eAAe,EAAEI,OAAO,GAAGG,gBAAH,GAAaC,aADvC;MAEE,eAAe,EAAER,SAFnB;MAGE,cAAc,EAAEM,SAHlB;MAIE,GAAG,EAAE,IAAAjB,4BAAA;IAJP,GAMGgB,EAAE,CAACI,GAAH,CAAQC,IAAD,IAAUA,IAAjB,CANH,CADF;EAUD;;AA7FY;;eAgGAxB,Q"}
@@ -37,6 +37,10 @@ const getStyles = (userStyles, colorScheme) => {
37
37
  strong: { ...fontStyle.regular,
38
38
  fontWeight: 'bold'
39
39
  },
40
+ strikethrough: { ...fontStyle.regular,
41
+ textDecorationLine: 'line-through',
42
+ textDecorationStyle: 'solid'
43
+ },
40
44
  text: { ...fontStyle.regular
41
45
  },
42
46
  paragraph: { ...fontStyle.regular,
@@ -1 +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","paddingBottom","borderBottomColor","borderBottomWidth","h2","h3","h4","h5","h6","codespan","code","padding","minWidth","hr","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: {\n ...fontStyle.regular,\n },\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 paddingBottom: 4,\n borderBottomColor: theme.colors.border,\n borderBottomWidth: 1,\n },\n h2: {\n ...fontStyle.heading,\n fontSize: 28,\n lineHeight: 36,\n marginVertical: 8,\n paddingBottom: 4,\n borderBottomColor: theme.colors.border,\n borderBottomWidth: 1,\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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"}
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","strikethrough","textDecorationLine","textDecorationStyle","paragraph","paddingVertical","link","blockquote","borderLeftColor","border","paddingLeft","borderLeftWidth","opacity","h1","marginVertical","letterSpacing","paddingBottom","borderBottomColor","borderBottomWidth","h2","h3","h4","h5","h6","codespan","code","padding","minWidth","hr","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 strikethrough: {\n ...fontStyle.regular,\n textDecorationLine: 'line-through',\n textDecorationStyle: 'solid',\n },\n text: {\n ...fontStyle.regular,\n },\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 paddingBottom: 4,\n borderBottomColor: theme.colors.border,\n borderBottomWidth: 1,\n },\n h2: {\n ...fontStyle.heading,\n fontSize: 28,\n lineHeight: 36,\n marginVertical: 8,\n paddingBottom: 4,\n borderBottomColor: theme.colors.border,\n borderBottomWidth: 1,\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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"}
@@ -1 +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
+ {"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 strikethrough?: 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":""}
@@ -5,14 +5,14 @@ import FitImage from 'react-native-fit-image';
5
5
  const MDImage = _ref => {
6
6
  let {
7
7
  uri,
8
- alt = ''
8
+ alt
9
9
  } = _ref;
10
10
  useEffect(() => {
11
11
  Image.prefetch(uri);
12
12
  }, [uri]);
13
13
  return /*#__PURE__*/React.createElement(FitImage, {
14
14
  accessibilityRole: "image",
15
- accessibilityLabel: alt,
15
+ accessibilityLabel: alt || 'Image',
16
16
  source: {
17
17
  uri
18
18
  },
@@ -1 +1 @@
1
- {"version":3,"names":["React","memo","useEffect","Image","FitImage","MDImage","uri","alt","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 alt?: string;\n}\n\nconst MDImage = ({ uri, alt = '' }: MDImageProps) => {\n useEffect(() => {\n Image.prefetch(uri);\n }, [uri]);\n\n return (\n <FitImage\n accessibilityRole=\"image\"\n accessibilityLabel={alt}\n source={{ uri }}\n resizeMode=\"cover\"\n />\n );\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;;AAOA,MAAMC,OAAO,GAAG,QAAqC;EAAA,IAApC;IAAEC,GAAF;IAAOC,GAAG,GAAG;EAAb,CAAoC;EACnDL,SAAS,CAAC,MAAM;IACdC,KAAK,CAACK,QAAN,CAAeF,GAAf;EACD,CAFQ,EAEN,CAACA,GAAD,CAFM,CAAT;EAIA,oBACE,oBAAC,QAAD;IACE,iBAAiB,EAAC,OADpB;IAEE,kBAAkB,EAAEC,GAFtB;IAGE,MAAM,EAAE;MAAED;IAAF,CAHV;IAIE,UAAU,EAAC;EAJb,EADF;AAQD,CAbD;;AAeA,4BAAeL,IAAI,CAACI,OAAD,CAAnB"}
1
+ {"version":3,"names":["React","memo","useEffect","Image","FitImage","MDImage","uri","alt","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 alt?: string;\n}\n\nconst MDImage = ({ uri, alt }: MDImageProps) => {\n useEffect(() => {\n Image.prefetch(uri);\n }, [uri]);\n\n return (\n <FitImage\n accessibilityRole=\"image\"\n accessibilityLabel={alt || 'Image'}\n source={{ uri }}\n resizeMode=\"cover\"\n />\n );\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;;AAOA,MAAMC,OAAO,GAAG,QAAgC;EAAA,IAA/B;IAAEC,GAAF;IAAOC;EAAP,CAA+B;EAC9CL,SAAS,CAAC,MAAM;IACdC,KAAK,CAACK,QAAN,CAAeF,GAAf;EACD,CAFQ,EAEN,CAACA,GAAD,CAFM,CAAT;EAIA,oBACE,oBAAC,QAAD;IACE,iBAAiB,EAAC,OADpB;IAEE,kBAAkB,EAAEC,GAAG,IAAI,OAF7B;IAGE,MAAM,EAAE;MAAED;IAAF,CAHV;IAIE,UAAU,EAAC;EAJb,EADF;AAQD,CAbD;;AAeA,4BAAeL,IAAI,CAACI,OAAD,CAAnB"}
@@ -12,7 +12,7 @@ class Parser {
12
12
  _defineProperty(this, "headingStylesMap", void 0);
13
13
 
14
14
  _defineProperty(this, "getNormalizedSiblingNodesForBlockAndInlineTokens", (tokens, textStyle) => {
15
- let tempTokens = [];
15
+ let tokenRenderQueue = [];
16
16
  const siblingNodes = [];
17
17
  tokens.forEach(t => {
18
18
  /**
@@ -21,11 +21,13 @@ class Parser {
21
21
  * Note: to be extend for other token types
22
22
  */
23
23
  if (t.type === 'image' || t.type === 'link' && t.tokens && t.tokens[0] && t.tokens[0].type === 'image') {
24
- const parsed = this.parseInline(tempTokens);
24
+ // Render existing inline tokens in the queue
25
+ const parsed = this.parseInline(tokenRenderQueue);
25
26
 
26
27
  if (parsed.length > 0) {
27
28
  siblingNodes.push(this.renderer.getTextNode(parsed, textStyle));
28
- }
29
+ } // Render the current block token
30
+
29
31
 
30
32
  if (t.type === 'image') {
31
33
  siblingNodes.push(this.parseInline([t]));
@@ -34,16 +36,16 @@ class Parser {
34
36
  siblingNodes.push(this.renderer.getImageLinkNode(t.href, imageToken.href, imageToken.text || imageToken.title));
35
37
  }
36
38
 
37
- tempTokens = [];
39
+ tokenRenderQueue = [];
38
40
  return;
39
41
  }
40
42
 
41
- tempTokens = [...tempTokens, t];
43
+ tokenRenderQueue = [...tokenRenderQueue, t];
42
44
  });
43
45
  /* Remaining temp tokens if any */
44
46
 
45
- if (tempTokens.length > 0) {
46
- siblingNodes.push(this.renderer.getTextNode(this.parseInline(tempTokens), {}));
47
+ if (tokenRenderQueue.length > 0) {
48
+ siblingNodes.push(this.renderer.getTextNode(this.parseInline(tokenRenderQueue), {}));
47
49
  }
48
50
 
49
51
  return siblingNodes;
@@ -138,11 +140,8 @@ class Parser {
138
140
 
139
141
  case 'link':
140
142
  {
141
- if (token.tokens && token.tokens[0] && token.tokens[0].type === 'image') {
142
- const imageToken = token.tokens[0];
143
- return this.renderer.getImageLinkNode(token.href, imageToken.href, imageToken.text || imageToken.title);
144
- }
145
-
143
+ // Note: Linking Images (https://www.markdownguide.org/basic-syntax/#linking-images) are wrapped
144
+ // in paragraph token, so will be handled via `getNormalizedSiblingNodesForBlockAndInlineTokens`
146
145
  const linkStyle = { ...styles,
147
146
  ...this.styles.link // To override color property
148
147
 
@@ -185,7 +184,10 @@ class Parser {
185
184
 
186
185
  case 'del':
187
186
  {
188
- return null;
187
+ const strikethroughStyle = { ...this.styles.strikethrough,
188
+ ...styles
189
+ };
190
+ return this.renderer.getTextNode(this.parseInline(token.tokens, strikethroughStyle), strikethroughStyle);
189
191
  }
190
192
 
191
193
  case 'text':
@@ -1 +1 @@
1
- {"version":3,"names":["decode","Renderer","Parser","constructor","options","tokens","textStyle","tempTokens","siblingNodes","forEach","t","type","parsed","parseInline","length","push","renderer","getTextNode","imageToken","getImageLinkNode","href","text","title","styles","headingStylesMap","h1","h2","h3","h4","h5","h6","parse","elements","map","token","paragraphChildren","getNormalizedSiblingNodesForBlockAndInlineTokens","getViewNode","paragraph","getBlockquoteNode","blockquote","depth","getCodeBlockNode","code","em","hr","li","items","item","children","cItem","childTokens","listChildren","getListNode","ordered","list","filter","element","linkStyle","link","getTextLinkNode","getImageNode","boldStyle","strong","italicStyle","codespan","raw","trim","console","warn"],"sources":["Parser.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport type { marked } from 'marked';\nimport { decode } from 'entities';\nimport Renderer from './Renderer';\nimport type { MarkedStyles } from '../theme/types';\nimport type { CustomStyleProp, ParserOptions, TextStyleProp } from './types';\n\nclass Parser {\n private renderer;\n private styles: MarkedStyles;\n private headingStylesMap: Record<number, TextStyleProp>;\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: ReactNode[] = tokens.map((token) => {\n switch (token.type) {\n case 'space': {\n return null;\n }\n case 'paragraph': {\n const paragraphChildren =\n this.getNormalizedSiblingNodesForBlockAndInlineTokens(\n token.tokens,\n this.styles.text\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(\n this.parseInline(token.tokens, styles),\n styles\n );\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) => {\n const children = item.tokens.map((cItem) => {\n if (cItem.type === 'text') {\n /* getViewNode since tokens could contain a block like elements (i.e. img) */\n const childTokens = (cItem as marked.Tokens.Text).tokens || [];\n const listChildren =\n this.getNormalizedSiblingNodesForBlockAndInlineTokens(\n childTokens,\n this.styles.li\n );\n return this.renderer.getViewNode(listChildren, this.styles.li);\n }\n\n /* Parse the nested token */\n return this.parse([cItem]);\n });\n return this.renderer.getViewNode(children, this.styles.li);\n });\n return this.renderer.getListNode(\n token.ordered,\n li,\n this.styles.list,\n this.styles.li\n );\n }\n default:\n return this.parseInline([token]);\n }\n });\n return elements.filter((element) => element !== null);\n }\n\n parseInline(tokens: marked.Token[], styles?: CustomStyleProp) {\n const elements: 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 ...this.styles.text,\n ...styles,\n });\n }\n case 'link': {\n if (\n token.tokens &&\n token.tokens[0] &&\n token.tokens[0].type === 'image'\n ) {\n const imageToken = token.tokens[0];\n return this.renderer.getImageLinkNode(\n token.href,\n imageToken.href,\n imageToken.text || imageToken.title\n );\n }\n\n const linkStyle = {\n ...styles,\n ...this.styles.link, // To override color property\n };\n return this.renderer.getTextLinkNode(\n this.parseInline(token.tokens, linkStyle),\n token.href,\n linkStyle\n );\n }\n case 'image': {\n return this.renderer.getImageNode(\n token.href,\n token.text || token.title\n );\n }\n case 'strong': {\n const boldStyle = {\n ...this.styles.strong,\n ...styles,\n };\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, boldStyle),\n boldStyle\n );\n }\n case 'em': {\n const italicStyle = {\n ...this.styles.em,\n ...styles,\n };\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, italicStyle),\n italicStyle\n );\n }\n case 'codespan': {\n return this.renderer.getTextNode(token.text, {\n ...this.styles.codespan,\n ...styles,\n });\n }\n case 'br': {\n return this.renderer.getTextNode('\\n', {});\n }\n case 'del': {\n return null;\n }\n case 'text':\n case 'html': {\n if (token.raw.trim().length < 1) {\n return null;\n }\n\n return this.renderer.getTextNode(decode(token.raw), {\n ...this.styles.text,\n ...styles,\n });\n }\n default: {\n console.warn(`Token with '${token.type}' type was not found.`);\n return null;\n }\n }\n });\n return elements.filter((element) => element !== null);\n }\n\n private getNormalizedSiblingNodesForBlockAndInlineTokens = (\n tokens: marked.Token[],\n textStyle: TextStyleProp\n ): ReactNode[] => {\n let tempTokens: marked.Token[] = [];\n const siblingNodes: ReactNode[] = [];\n tokens.forEach((t) => {\n /**\n * To avoid inlining images\n * Currently supports images, link images\n * Note: to be extend for other token types\n */\n if (\n t.type === 'image' ||\n (t.type === 'link' &&\n t.tokens &&\n t.tokens[0] &&\n t.tokens[0].type === 'image')\n ) {\n const parsed = this.parseInline(tempTokens);\n if (parsed.length > 0) {\n siblingNodes.push(this.renderer.getTextNode(parsed, textStyle));\n }\n\n if (t.type === 'image') {\n siblingNodes.push(this.parseInline([t]));\n } else if (t.type === 'link') {\n const imageToken = t.tokens[0] as marked.Tokens.Image;\n siblingNodes.push(\n this.renderer.getImageLinkNode(\n t.href,\n imageToken.href,\n imageToken.text || imageToken.title\n )\n );\n }\n\n tempTokens = [];\n return;\n }\n tempTokens = [...tempTokens, t];\n });\n\n /* Remaining temp tokens if any */\n if (tempTokens.length > 0) {\n siblingNodes.push(\n this.renderer.getTextNode(this.parseInline(tempTokens), {})\n );\n }\n\n return siblingNodes;\n };\n}\n\nexport default Parser;\n"],"mappings":"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"}
1
+ {"version":3,"names":["decode","Renderer","Parser","constructor","options","tokens","textStyle","tokenRenderQueue","siblingNodes","forEach","t","type","parsed","parseInline","length","push","renderer","getTextNode","imageToken","getImageLinkNode","href","text","title","styles","headingStylesMap","h1","h2","h3","h4","h5","h6","parse","elements","map","token","paragraphChildren","getNormalizedSiblingNodesForBlockAndInlineTokens","getViewNode","paragraph","getBlockquoteNode","blockquote","depth","getCodeBlockNode","code","em","hr","li","items","item","children","cItem","childTokens","listChildren","getListNode","ordered","list","filter","element","linkStyle","link","getTextLinkNode","getImageNode","boldStyle","strong","italicStyle","codespan","strikethroughStyle","strikethrough","raw","trim","console","warn"],"sources":["Parser.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport type { marked } from 'marked';\nimport { decode } from 'entities';\nimport Renderer from './Renderer';\nimport type { MarkedStyles } from '../theme/types';\nimport type { CustomStyleProp, ParserOptions, TextStyleProp } from './types';\n\nclass Parser {\n private renderer;\n private styles: MarkedStyles;\n private headingStylesMap: Record<number, TextStyleProp>;\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: ReactNode[] = tokens.map((token) => {\n switch (token.type) {\n case 'space': {\n return null;\n }\n case 'paragraph': {\n const paragraphChildren =\n this.getNormalizedSiblingNodesForBlockAndInlineTokens(\n token.tokens,\n this.styles.text\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(\n this.parseInline(token.tokens, styles),\n styles\n );\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) => {\n const children = item.tokens.map((cItem) => {\n if (cItem.type === 'text') {\n /* getViewNode since tokens could contain a block like elements (i.e. img) */\n const childTokens = (cItem as marked.Tokens.Text).tokens || [];\n const listChildren =\n this.getNormalizedSiblingNodesForBlockAndInlineTokens(\n childTokens,\n this.styles.li\n );\n return this.renderer.getViewNode(listChildren, this.styles.li);\n }\n\n /* Parse the nested token */\n return this.parse([cItem]);\n });\n return this.renderer.getViewNode(children, this.styles.li);\n });\n return this.renderer.getListNode(\n token.ordered,\n li,\n this.styles.list,\n this.styles.li\n );\n }\n default:\n return this.parseInline([token]);\n }\n });\n return elements.filter((element) => element !== null);\n }\n\n parseInline(tokens: marked.Token[], styles?: CustomStyleProp) {\n const elements: 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 ...this.styles.text,\n ...styles,\n });\n }\n case 'link': {\n // Note: Linking Images (https://www.markdownguide.org/basic-syntax/#linking-images) are wrapped\n // in paragraph token, so will be handled via `getNormalizedSiblingNodesForBlockAndInlineTokens`\n const linkStyle = {\n ...styles,\n ...this.styles.link, // To override color property\n };\n return this.renderer.getTextLinkNode(\n this.parseInline(token.tokens, linkStyle),\n token.href,\n linkStyle\n );\n }\n case 'image': {\n return this.renderer.getImageNode(\n token.href,\n token.text || token.title\n );\n }\n case 'strong': {\n const boldStyle = {\n ...this.styles.strong,\n ...styles,\n };\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, boldStyle),\n boldStyle\n );\n }\n case 'em': {\n const italicStyle = {\n ...this.styles.em,\n ...styles,\n };\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, italicStyle),\n italicStyle\n );\n }\n case 'codespan': {\n return this.renderer.getTextNode(token.text, {\n ...this.styles.codespan,\n ...styles,\n });\n }\n case 'br': {\n return this.renderer.getTextNode('\\n', {});\n }\n case 'del': {\n const strikethroughStyle = {\n ...this.styles.strikethrough,\n ...styles,\n };\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, strikethroughStyle),\n strikethroughStyle\n );\n }\n case 'text':\n case 'html': {\n if (token.raw.trim().length < 1) {\n return null;\n }\n\n return this.renderer.getTextNode(decode(token.raw), {\n ...this.styles.text,\n ...styles,\n });\n }\n default: {\n console.warn(`Token with '${token.type}' type was not found.`);\n return null;\n }\n }\n });\n return elements.filter((element) => element !== null);\n }\n\n private getNormalizedSiblingNodesForBlockAndInlineTokens = (\n tokens: marked.Token[],\n textStyle: TextStyleProp\n ): ReactNode[] => {\n let tokenRenderQueue: marked.Token[] = [];\n const siblingNodes: ReactNode[] = [];\n tokens.forEach((t) => {\n /**\n * To avoid inlining images\n * Currently supports images, link images\n * Note: to be extend for other token types\n */\n if (\n t.type === 'image' ||\n (t.type === 'link' &&\n t.tokens &&\n t.tokens[0] &&\n t.tokens[0].type === 'image')\n ) {\n // Render existing inline tokens in the queue\n const parsed = this.parseInline(tokenRenderQueue);\n if (parsed.length > 0) {\n siblingNodes.push(this.renderer.getTextNode(parsed, textStyle));\n }\n\n // Render the current block token\n if (t.type === 'image') {\n siblingNodes.push(this.parseInline([t]));\n } else if (t.type === 'link') {\n const imageToken = t.tokens[0] as marked.Tokens.Image;\n siblingNodes.push(\n this.renderer.getImageLinkNode(\n t.href,\n imageToken.href,\n imageToken.text || imageToken.title\n )\n );\n }\n\n tokenRenderQueue = [];\n return;\n }\n tokenRenderQueue = [...tokenRenderQueue, t];\n });\n\n /* Remaining temp tokens if any */\n if (tokenRenderQueue.length > 0) {\n siblingNodes.push(\n this.renderer.getTextNode(this.parseInline(tokenRenderQueue), {})\n );\n }\n\n return siblingNodes;\n };\n}\n\nexport default Parser;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["React","ScrollView","View","Text","TouchableHighlight","MarkedList","Disc","Decimal","MDImage","generateRandomString","onLinkPress","Renderer","children","styles","href","imageUrl","alt","imageNode","getImageNode","getViewNode","getCodeBlockNode","text","containerStyle","textStyle","getBlockquoteNode","uri","getListNode","ordered","li","listStyle","map","node"],"sources":["Renderer.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport { ScrollView, View, Text, TouchableHighlight } from 'react-native';\nimport MarkedList from '@jsamr/react-native-li';\nimport Disc from '@jsamr/counter-style/presets/disc';\nimport Decimal from '@jsamr/counter-style/presets/decimal';\nimport MDImage from './../components/MDImage';\nimport { generateRandomString } from '../utils/string';\nimport type { TextStyleProp, ViewStyleProp } from './types';\nimport { onLinkPress } from '../utils/handlers';\n\nclass Renderer {\n getTextNode = (children: string | ReactNode[], styles: TextStyleProp) => {\n return (\n <Text key={generateRandomString()} style={styles}>\n {children}\n </Text>\n );\n };\n\n getTextLinkNode = (\n children: string | ReactNode[],\n href: string,\n styles: TextStyleProp\n ) => {\n return (\n <Text\n accessibilityRole=\"link\"\n accessibilityHint=\"Opens in a new window\"\n key={generateRandomString()}\n onPress={onLinkPress(href)}\n style={styles}\n >\n {children}\n </Text>\n );\n };\n\n getImageLinkNode = (href: string, imageUrl: string, alt: string) => {\n const imageNode = this.getImageNode(imageUrl, alt);\n return (\n <TouchableHighlight\n accessibilityRole=\"link\"\n accessibilityHint=\"Opens in a new window\"\n onPress={onLinkPress(href)}\n key={generateRandomString()}\n >\n {imageNode}\n </TouchableHighlight>\n );\n };\n\n getViewNode(children: ReactNode[] | null, styles: ViewStyleProp) {\n return (\n <View key={generateRandomString()} style={styles}>\n {children}\n </View>\n );\n }\n\n getCodeBlockNode(\n text: string,\n containerStyle: ViewStyleProp,\n textStyle: TextStyleProp\n ) {\n return (\n <ScrollView\n key={generateRandomString()}\n contentContainerStyle={containerStyle}\n horizontal\n >\n <Text style={textStyle}>{text}</Text>\n </ScrollView>\n );\n }\n\n getBlockquoteNode(children: ReactNode[], styles: ViewStyleProp) {\n return (\n <View key={generateRandomString()} style={styles}>\n {children}\n </View>\n );\n }\n\n getImageNode(uri: string, alt: string) {\n return <MDImage key={generateRandomString()} uri={uri} alt={alt} />;\n }\n\n getListNode(\n ordered: boolean,\n li: ReactNode[],\n listStyle: ViewStyleProp,\n textStyle: TextStyleProp\n ) {\n return (\n <MarkedList\n counterRenderer={ordered ? Decimal : Disc}\n markerTextStyle={textStyle}\n markerBoxStyle={listStyle}\n key={generateRandomString()}\n >\n {li.map((node) => node)}\n </MarkedList>\n );\n }\n}\n\nexport default Renderer;\n"],"mappings":";;AAAA,OAAOA,KAAP,MAAiC,OAAjC;AACA,SAASC,UAAT,EAAqBC,IAArB,EAA2BC,IAA3B,EAAiCC,kBAAjC,QAA2D,cAA3D;AACA,OAAOC,UAAP,MAAuB,wBAAvB;AACA,OAAOC,IAAP,MAAiB,mCAAjB;AACA,OAAOC,OAAP,MAAoB,sCAApB;AACA,OAAOC,OAAP,MAAoB,yBAApB;AACA,SAASC,oBAAT,QAAqC,iBAArC;AAEA,SAASC,WAAT,QAA4B,mBAA5B;;AAEA,MAAMC,QAAN,CAAe;EAAA;IAAA,qCACC,CAACC,QAAD,EAAiCC,MAAjC,KAA2D;MACvE,oBACE,oBAAC,IAAD;QAAM,GAAG,EAAEJ,oBAAoB,EAA/B;QAAmC,KAAK,EAAEI;MAA1C,GACGD,QADH,CADF;IAKD,CAPY;;IAAA,yCASK,CAChBA,QADgB,EAEhBE,IAFgB,EAGhBD,MAHgB,KAIb;MACH,oBACE,oBAAC,IAAD;QACE,iBAAiB,EAAC,MADpB;QAEE,iBAAiB,EAAC,uBAFpB;QAGE,GAAG,EAAEJ,oBAAoB,EAH3B;QAIE,OAAO,EAAEC,WAAW,CAACI,IAAD,CAJtB;QAKE,KAAK,EAAED;MALT,GAOGD,QAPH,CADF;IAWD,CAzBY;;IAAA,0CA2BM,CAACE,IAAD,EAAeC,QAAf,EAAiCC,GAAjC,KAAiD;MAClE,MAAMC,SAAS,GAAG,KAAKC,YAAL,CAAkBH,QAAlB,EAA4BC,GAA5B,CAAlB;MACA,oBACE,oBAAC,kBAAD;QACE,iBAAiB,EAAC,MADpB;QAEE,iBAAiB,EAAC,uBAFpB;QAGE,OAAO,EAAEN,WAAW,CAACI,IAAD,CAHtB;QAIE,GAAG,EAAEL,oBAAoB;MAJ3B,GAMGQ,SANH,CADF;IAUD,CAvCY;EAAA;;EAyCbE,WAAW,CAACP,QAAD,EAA+BC,MAA/B,EAAsD;IAC/D,oBACE,oBAAC,IAAD;MAAM,GAAG,EAAEJ,oBAAoB,EAA/B;MAAmC,KAAK,EAAEI;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDQ,gBAAgB,CACdC,IADc,EAEdC,cAFc,EAGdC,SAHc,EAId;IACA,oBACE,oBAAC,UAAD;MACE,GAAG,EAAEd,oBAAoB,EAD3B;MAEE,qBAAqB,EAAEa,cAFzB;MAGE,UAAU;IAHZ,gBAKE,oBAAC,IAAD;MAAM,KAAK,EAAEC;IAAb,GAAyBF,IAAzB,CALF,CADF;EASD;;EAEDG,iBAAiB,CAACZ,QAAD,EAAwBC,MAAxB,EAA+C;IAC9D,oBACE,oBAAC,IAAD;MAAM,GAAG,EAAEJ,oBAAoB,EAA/B;MAAmC,KAAK,EAAEI;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDM,YAAY,CAACO,GAAD,EAAcT,GAAd,EAA2B;IACrC,oBAAO,oBAAC,OAAD;MAAS,GAAG,EAAEP,oBAAoB,EAAlC;MAAsC,GAAG,EAAEgB,GAA3C;MAAgD,GAAG,EAAET;IAArD,EAAP;EACD;;EAEDU,WAAW,CACTC,OADS,EAETC,EAFS,EAGTC,SAHS,EAITN,SAJS,EAKT;IACA,oBACE,oBAAC,UAAD;MACE,eAAe,EAAEI,OAAO,GAAGpB,OAAH,GAAaD,IADvC;MAEE,eAAe,EAAEiB,SAFnB;MAGE,cAAc,EAAEM,SAHlB;MAIE,GAAG,EAAEpB,oBAAoB;IAJ3B,GAMGmB,EAAE,CAACE,GAAH,CAAQC,IAAD,IAAUA,IAAjB,CANH,CADF;EAUD;;AA7FY;;AAgGf,eAAepB,QAAf"}
1
+ {"version":3,"names":["React","ScrollView","View","Text","TouchableHighlight","MarkedList","Disc","Decimal","MDImage","generateRandomString","onLinkPress","Renderer","children","styles","href","imageUrl","alt","imageNode","getImageNode","getViewNode","getCodeBlockNode","text","containerStyle","textStyle","getBlockquoteNode","uri","getListNode","ordered","li","listStyle","map","node"],"sources":["Renderer.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport { ScrollView, View, Text, TouchableHighlight } from 'react-native';\nimport MarkedList from '@jsamr/react-native-li';\nimport Disc from '@jsamr/counter-style/presets/disc';\nimport Decimal from '@jsamr/counter-style/presets/decimal';\nimport MDImage from './../components/MDImage';\nimport { generateRandomString } from '../utils/string';\nimport type { TextStyleProp, ViewStyleProp } from './types';\nimport { onLinkPress } from '../utils/handlers';\n\nclass Renderer {\n getTextNode = (children: string | ReactNode[], styles: TextStyleProp) => {\n return (\n <Text key={generateRandomString()} style={styles}>\n {children}\n </Text>\n );\n };\n\n getTextLinkNode = (\n children: string | ReactNode[],\n href: string,\n styles: TextStyleProp\n ) => {\n return (\n <Text\n accessibilityRole=\"link\"\n accessibilityHint=\"Opens in a new window\"\n key={generateRandomString()}\n onPress={onLinkPress(href)}\n style={styles}\n >\n {children}\n </Text>\n );\n };\n\n getImageLinkNode = (href: string, imageUrl: string, alt?: string) => {\n const imageNode = this.getImageNode(imageUrl, alt);\n return (\n <TouchableHighlight\n accessibilityRole=\"link\"\n accessibilityHint=\"Opens in a new window\"\n onPress={onLinkPress(href)}\n key={generateRandomString()}\n >\n {imageNode}\n </TouchableHighlight>\n );\n };\n\n getViewNode(children: ReactNode[] | null, styles: ViewStyleProp) {\n return (\n <View key={generateRandomString()} style={styles}>\n {children}\n </View>\n );\n }\n\n getCodeBlockNode(\n text: string,\n containerStyle: ViewStyleProp,\n textStyle: TextStyleProp\n ) {\n return (\n <ScrollView\n key={generateRandomString()}\n contentContainerStyle={containerStyle}\n horizontal\n >\n <Text style={textStyle}>{text}</Text>\n </ScrollView>\n );\n }\n\n getBlockquoteNode(children: ReactNode[], styles: ViewStyleProp) {\n return (\n <View key={generateRandomString()} style={styles}>\n {children}\n </View>\n );\n }\n\n getImageNode(uri: string, alt?: string) {\n return <MDImage key={generateRandomString()} uri={uri} alt={alt} />;\n }\n\n getListNode(\n ordered: boolean,\n li: ReactNode[],\n listStyle: ViewStyleProp,\n textStyle: TextStyleProp\n ) {\n return (\n <MarkedList\n counterRenderer={ordered ? Decimal : Disc}\n markerTextStyle={textStyle}\n markerBoxStyle={listStyle}\n key={generateRandomString()}\n >\n {li.map((node) => node)}\n </MarkedList>\n );\n }\n}\n\nexport default Renderer;\n"],"mappings":";;AAAA,OAAOA,KAAP,MAAiC,OAAjC;AACA,SAASC,UAAT,EAAqBC,IAArB,EAA2BC,IAA3B,EAAiCC,kBAAjC,QAA2D,cAA3D;AACA,OAAOC,UAAP,MAAuB,wBAAvB;AACA,OAAOC,IAAP,MAAiB,mCAAjB;AACA,OAAOC,OAAP,MAAoB,sCAApB;AACA,OAAOC,OAAP,MAAoB,yBAApB;AACA,SAASC,oBAAT,QAAqC,iBAArC;AAEA,SAASC,WAAT,QAA4B,mBAA5B;;AAEA,MAAMC,QAAN,CAAe;EAAA;IAAA,qCACC,CAACC,QAAD,EAAiCC,MAAjC,KAA2D;MACvE,oBACE,oBAAC,IAAD;QAAM,GAAG,EAAEJ,oBAAoB,EAA/B;QAAmC,KAAK,EAAEI;MAA1C,GACGD,QADH,CADF;IAKD,CAPY;;IAAA,yCASK,CAChBA,QADgB,EAEhBE,IAFgB,EAGhBD,MAHgB,KAIb;MACH,oBACE,oBAAC,IAAD;QACE,iBAAiB,EAAC,MADpB;QAEE,iBAAiB,EAAC,uBAFpB;QAGE,GAAG,EAAEJ,oBAAoB,EAH3B;QAIE,OAAO,EAAEC,WAAW,CAACI,IAAD,CAJtB;QAKE,KAAK,EAAED;MALT,GAOGD,QAPH,CADF;IAWD,CAzBY;;IAAA,0CA2BM,CAACE,IAAD,EAAeC,QAAf,EAAiCC,GAAjC,KAAkD;MACnE,MAAMC,SAAS,GAAG,KAAKC,YAAL,CAAkBH,QAAlB,EAA4BC,GAA5B,CAAlB;MACA,oBACE,oBAAC,kBAAD;QACE,iBAAiB,EAAC,MADpB;QAEE,iBAAiB,EAAC,uBAFpB;QAGE,OAAO,EAAEN,WAAW,CAACI,IAAD,CAHtB;QAIE,GAAG,EAAEL,oBAAoB;MAJ3B,GAMGQ,SANH,CADF;IAUD,CAvCY;EAAA;;EAyCbE,WAAW,CAACP,QAAD,EAA+BC,MAA/B,EAAsD;IAC/D,oBACE,oBAAC,IAAD;MAAM,GAAG,EAAEJ,oBAAoB,EAA/B;MAAmC,KAAK,EAAEI;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDQ,gBAAgB,CACdC,IADc,EAEdC,cAFc,EAGdC,SAHc,EAId;IACA,oBACE,oBAAC,UAAD;MACE,GAAG,EAAEd,oBAAoB,EAD3B;MAEE,qBAAqB,EAAEa,cAFzB;MAGE,UAAU;IAHZ,gBAKE,oBAAC,IAAD;MAAM,KAAK,EAAEC;IAAb,GAAyBF,IAAzB,CALF,CADF;EASD;;EAEDG,iBAAiB,CAACZ,QAAD,EAAwBC,MAAxB,EAA+C;IAC9D,oBACE,oBAAC,IAAD;MAAM,GAAG,EAAEJ,oBAAoB,EAA/B;MAAmC,KAAK,EAAEI;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDM,YAAY,CAACO,GAAD,EAAcT,GAAd,EAA4B;IACtC,oBAAO,oBAAC,OAAD;MAAS,GAAG,EAAEP,oBAAoB,EAAlC;MAAsC,GAAG,EAAEgB,GAA3C;MAAgD,GAAG,EAAET;IAArD,EAAP;EACD;;EAEDU,WAAW,CACTC,OADS,EAETC,EAFS,EAGTC,SAHS,EAITN,SAJS,EAKT;IACA,oBACE,oBAAC,UAAD;MACE,eAAe,EAAEI,OAAO,GAAGpB,OAAH,GAAaD,IADvC;MAEE,eAAe,EAAEiB,SAFnB;MAGE,cAAc,EAAEM,SAHlB;MAIE,GAAG,EAAEpB,oBAAoB;IAJ3B,GAMGmB,EAAE,CAACE,GAAH,CAAQC,IAAD,IAAUA,IAAjB,CANH,CADF;EAUD;;AA7FY;;AAgGf,eAAepB,QAAf"}
@@ -28,6 +28,10 @@ const getStyles = (userStyles, colorScheme) => {
28
28
  strong: { ...fontStyle.regular,
29
29
  fontWeight: 'bold'
30
30
  },
31
+ strikethrough: { ...fontStyle.regular,
32
+ textDecorationLine: 'line-through',
33
+ textDecorationStyle: 'solid'
34
+ },
31
35
  text: { ...fontStyle.regular
32
36
  },
33
37
  paragraph: { ...fontStyle.regular,
@@ -1 +1 @@
1
- {"version":3,"names":["StyleSheet","getTheme","getFontStyles","theme","create","regular","fontSize","lineHeight","color","colors","text","heading","fontWeight","getStyles","userStyles","colorScheme","fontStyle","defaultStyles","container","backgroundColor","background","em","strong","paragraph","paddingVertical","link","blockquote","borderLeftColor","border","paddingLeft","borderLeftWidth","opacity","h1","marginVertical","letterSpacing","paddingBottom","borderBottomColor","borderBottomWidth","h2","h3","h4","h5","h6","codespan","code","padding","minWidth","hr","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: {\n ...fontStyle.regular,\n },\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 paddingBottom: 4,\n borderBottomColor: theme.colors.border,\n borderBottomWidth: 1,\n },\n h2: {\n ...fontStyle.heading,\n fontSize: 28,\n lineHeight: 36,\n marginVertical: 8,\n paddingBottom: 4,\n borderBottomColor: theme.colors.border,\n borderBottomWidth: 1,\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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"}
1
+ {"version":3,"names":["StyleSheet","getTheme","getFontStyles","theme","create","regular","fontSize","lineHeight","color","colors","text","heading","fontWeight","getStyles","userStyles","colorScheme","fontStyle","defaultStyles","container","backgroundColor","background","em","strong","strikethrough","textDecorationLine","textDecorationStyle","paragraph","paddingVertical","link","blockquote","borderLeftColor","border","paddingLeft","borderLeftWidth","opacity","h1","marginVertical","letterSpacing","paddingBottom","borderBottomColor","borderBottomWidth","h2","h3","h4","h5","h6","codespan","code","padding","minWidth","hr","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 strikethrough: {\n ...fontStyle.regular,\n textDecorationLine: 'line-through',\n textDecorationStyle: 'solid',\n },\n text: {\n ...fontStyle.regular,\n },\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 paddingBottom: 4,\n borderBottomColor: theme.colors.border,\n borderBottomWidth: 1,\n },\n h2: {\n ...fontStyle.heading,\n fontSize: 28,\n lineHeight: 36,\n marginVertical: 8,\n paddingBottom: 4,\n borderBottomColor: theme.colors.border,\n borderBottomWidth: 1,\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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"}
@@ -1 +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
+ {"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 strikethrough?: 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":""}
@@ -3,11 +3,11 @@ import type { TextStyleProp, ViewStyleProp } from './types';
3
3
  declare class Renderer {
4
4
  getTextNode: (children: string | ReactNode[], styles: TextStyleProp) => JSX.Element;
5
5
  getTextLinkNode: (children: string | ReactNode[], href: string, styles: TextStyleProp) => JSX.Element;
6
- getImageLinkNode: (href: string, imageUrl: string, alt: string) => JSX.Element;
6
+ getImageLinkNode: (href: string, imageUrl: string, alt?: string) => JSX.Element;
7
7
  getViewNode(children: ReactNode[] | null, styles: ViewStyleProp): JSX.Element;
8
8
  getCodeBlockNode(text: string, containerStyle: ViewStyleProp, textStyle: TextStyleProp): JSX.Element;
9
9
  getBlockquoteNode(children: ReactNode[], styles: ViewStyleProp): JSX.Element;
10
- getImageNode(uri: string, alt: string): JSX.Element;
10
+ getImageNode(uri: string, alt?: string): JSX.Element;
11
11
  getListNode(ordered: boolean, li: ReactNode[], listStyle: ViewStyleProp, textStyle: TextStyleProp): JSX.Element;
12
12
  }
13
13
  export default Renderer;
@@ -3,6 +3,7 @@ export interface MarkedStyles {
3
3
  container?: ViewStyle;
4
4
  em?: TextStyle;
5
5
  strong?: TextStyle;
6
+ strikethrough?: TextStyle;
6
7
  text?: TextStyle;
7
8
  paragraph?: ViewStyle;
8
9
  link?: TextStyle;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-marked",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Markdown renderer for React Native powered by marked.js",
5
5
  "main": "dist/commonjs/index",
6
6
  "module": "dist/module/index",
@@ -7,7 +7,7 @@ interface MDImageProps {
7
7
  alt?: string;
8
8
  }
9
9
 
10
- const MDImage = ({ uri, alt = '' }: MDImageProps) => {
10
+ const MDImage = ({ uri, alt }: MDImageProps) => {
11
11
  useEffect(() => {
12
12
  Image.prefetch(uri);
13
13
  }, [uri]);
@@ -15,7 +15,7 @@ const MDImage = ({ uri, alt = '' }: MDImageProps) => {
15
15
  return (
16
16
  <FitImage
17
17
  accessibilityRole="image"
18
- accessibilityLabel={alt}
18
+ accessibilityLabel={alt || 'Image'}
19
19
  source={{ uri }}
20
20
  resizeMode="cover"
21
21
  />
@@ -108,19 +108,8 @@ class Parser {
108
108
  });
109
109
  }
110
110
  case 'link': {
111
- if (
112
- token.tokens &&
113
- token.tokens[0] &&
114
- token.tokens[0].type === 'image'
115
- ) {
116
- const imageToken = token.tokens[0];
117
- return this.renderer.getImageLinkNode(
118
- token.href,
119
- imageToken.href,
120
- imageToken.text || imageToken.title
121
- );
122
- }
123
-
111
+ // Note: Linking Images (https://www.markdownguide.org/basic-syntax/#linking-images) are wrapped
112
+ // in paragraph token, so will be handled via `getNormalizedSiblingNodesForBlockAndInlineTokens`
124
113
  const linkStyle = {
125
114
  ...styles,
126
115
  ...this.styles.link, // To override color property
@@ -167,7 +156,14 @@ class Parser {
167
156
  return this.renderer.getTextNode('\n', {});
168
157
  }
169
158
  case 'del': {
170
- return null;
159
+ const strikethroughStyle = {
160
+ ...this.styles.strikethrough,
161
+ ...styles,
162
+ };
163
+ return this.renderer.getTextNode(
164
+ this.parseInline(token.tokens, strikethroughStyle),
165
+ strikethroughStyle
166
+ );
171
167
  }
172
168
  case 'text':
173
169
  case 'html': {
@@ -193,7 +189,7 @@ class Parser {
193
189
  tokens: marked.Token[],
194
190
  textStyle: TextStyleProp
195
191
  ): ReactNode[] => {
196
- let tempTokens: marked.Token[] = [];
192
+ let tokenRenderQueue: marked.Token[] = [];
197
193
  const siblingNodes: ReactNode[] = [];
198
194
  tokens.forEach((t) => {
199
195
  /**
@@ -208,11 +204,13 @@ class Parser {
208
204
  t.tokens[0] &&
209
205
  t.tokens[0].type === 'image')
210
206
  ) {
211
- const parsed = this.parseInline(tempTokens);
207
+ // Render existing inline tokens in the queue
208
+ const parsed = this.parseInline(tokenRenderQueue);
212
209
  if (parsed.length > 0) {
213
210
  siblingNodes.push(this.renderer.getTextNode(parsed, textStyle));
214
211
  }
215
212
 
213
+ // Render the current block token
216
214
  if (t.type === 'image') {
217
215
  siblingNodes.push(this.parseInline([t]));
218
216
  } else if (t.type === 'link') {
@@ -226,16 +224,16 @@ class Parser {
226
224
  );
227
225
  }
228
226
 
229
- tempTokens = [];
227
+ tokenRenderQueue = [];
230
228
  return;
231
229
  }
232
- tempTokens = [...tempTokens, t];
230
+ tokenRenderQueue = [...tokenRenderQueue, t];
233
231
  });
234
232
 
235
233
  /* Remaining temp tokens if any */
236
- if (tempTokens.length > 0) {
234
+ if (tokenRenderQueue.length > 0) {
237
235
  siblingNodes.push(
238
- this.renderer.getTextNode(this.parseInline(tempTokens), {})
236
+ this.renderer.getTextNode(this.parseInline(tokenRenderQueue), {})
239
237
  );
240
238
  }
241
239
 
@@ -35,7 +35,7 @@ class Renderer {
35
35
  );
36
36
  };
37
37
 
38
- getImageLinkNode = (href: string, imageUrl: string, alt: string) => {
38
+ getImageLinkNode = (href: string, imageUrl: string, alt?: string) => {
39
39
  const imageNode = this.getImageNode(imageUrl, alt);
40
40
  return (
41
41
  <TouchableHighlight
@@ -81,7 +81,7 @@ class Renderer {
81
81
  );
82
82
  }
83
83
 
84
- getImageNode(uri: string, alt: string) {
84
+ getImageNode(uri: string, alt?: string) {
85
85
  return <MDImage key={generateRandomString()} uri={uri} alt={alt} />;
86
86
  }
87
87
 
@@ -34,6 +34,11 @@ const getStyles = (
34
34
  ...fontStyle.regular,
35
35
  fontWeight: 'bold',
36
36
  },
37
+ strikethrough: {
38
+ ...fontStyle.regular,
39
+ textDecorationLine: 'line-through',
40
+ textDecorationStyle: 'solid',
41
+ },
37
42
  text: {
38
43
  ...fontStyle.regular,
39
44
  },
@@ -4,6 +4,7 @@ export interface MarkedStyles {
4
4
  container?: ViewStyle;
5
5
  em?: TextStyle;
6
6
  strong?: TextStyle;
7
+ strikethrough?: TextStyle;
7
8
  text?: TextStyle;
8
9
  paragraph?: ViewStyle;
9
10
  link?: TextStyle;