import {isNamedSection, MarkMark} from '../types' export class MarkMarkRenderer { public render(mm: MarkMark, frontmatter: boolean = true): string { let mmLines: string[] = ['\n'] // Write the frontmatter if ( frontmatter ) { mmLines.push(`[//]: #(markmark-syntax: ${mm.frontmatter.syntax})`) if (mm.frontmatter.authorName) mmLines.push(`[//]: #(markmark-author-name: ${mm.frontmatter.authorName})`) if (mm.frontmatter.authorEmail) mmLines.push(`[//]: #(markmark-author-email: ${mm.frontmatter.authorEmail})`) if (mm.frontmatter.authorHref) mmLines.push(`[//]: #(markmark-author-href: ${mm.frontmatter.authorHref})`) } for ( const section of mm.sections ) { mmLines.push('\n') // if this section has a title/description, write those out if ( isNamedSection(section) ) { mmLines.push(`# ${section.title}\n`) if ( section.description ) { mmLines.push(`${section.description}\n`) } } for ( const link of section.links ) { let linkTitle = `- ${link.title}` if ( link.date ) { linkTitle += ` (${this.formatDate(link.date)})` } if ( link.tags.length ) { linkTitle += ` ${link.tags.map(x => '#' + x).join(' ')}` } mmLines.push(linkTitle) for ( const url of link.urls ) { mmLines.push(` - ${url}`) } } } return mmLines.join('\n') } private formatDate(date: Date): string { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); // Months are zero-based const day = String(date.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } }