import React from 'react'; import { Text, TouchableWithoutFeedback, View, Image } from 'react-native'; import type { ReactNode } from 'react'; import openUrl from './util/openUrl'; import hasParents from './util/hasParents'; import applyStyle from './util/applyStyle'; import type { ASTNode, RenderRules, MarkdownStyles } from '../types'; const renderRules: RenderRules = { unknown: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {node.type} ); }, textgroup: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {children} ); }, inline: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return {children}; }, text: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return {node.content}; }, span: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return {children}; }, strong: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {children} ); }, s: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {children} ); }, link: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( openUrl(node.attributes.href)}> {children} ); }, blocklink: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( openUrl(node.attributes.href)}> {children} ); }, em: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {children} ); }, heading1: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {applyStyle(children as any, [styles.heading, styles.heading1], 'Text')} ); }, heading2: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {applyStyle(children as any, [styles.heading, styles.heading2], 'Text')} ); }, heading3: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( {applyStyle(children as any, [styles.heading, styles.heading3], 'Text')} ), heading4: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( {applyStyle(children as any, [styles.heading, styles.heading4], 'Text')} ), heading5: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( {applyStyle(children as any, [styles.heading, styles.heading5], 'Text')} ), heading6: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( {applyStyle(children as any, [styles.heading, styles.heading6], 'Text')} ), paragraph: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( {children} ), hardbreak: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( ), blockquote: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( {children} ), code_inline: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {node.content} ); }, code_block: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {node.content} ); }, fence: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {node.content} ); }, pre: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( {children} ), bullet_list: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {children} ); }, ordered_list: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {children} ); }, list_item: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { if (hasParents(parent, 'bullet_list')) { return ( {'\u00B7'} {children} ); } if (hasParents(parent, 'ordered_list')) { return ( {node.index + 1} {node.markup} {children} ); } return ( {children} ); }, table: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( {children} ), thead: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( {children} ), tbody: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( {children} ), th: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {children} ); }, tr: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {children} ); }, td: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {children} ); }, hr: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ; }, softbreak: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( {'\n'} ), image: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ; }, html_block: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {node.content} ); }, html_inline: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {node.content} ); }, u: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( {children} ); }, }; export default renderRules;