You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.4 KiB

import {isNamedSection, MarkMark} from './types'
export class MarkMarkRenderer {
public render(mm: MarkMark): string {
let mmLines: string[] = ['\n']
// Write the 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.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')
}
}