Awesome
gemini-to-html
Parse out gemini pages and convert them to HTML
Usage
npm i --save gemini-to-html
const parse = require('gemini-to-html/parse')
const tokens = parse(`
# Hello
=> ./example This is a link
`)
const render = require('gemini-to-html/render')
const html = render(tokens)
console.log(html)
API
parse(text) => [Line]
Parse out some gemini text into an array of Line items to render
Text{type:'text', content: string}
Any lines that don't fit into other formats, will be Text. content
is the raw text to render.
Link{type:'link', href: string, content: string}
Lines starting with =>
will be parsed as links. The line will then contain a URL that will go under href
, followed by some optional whitespace, and then a description for the text stored in content
.
Pre{type:'pre', items: [string], alt}
Sections of text that look like this:
Some text
Will be parsed as a sing Pre
line. The items
are the lines within the block. If ther was additional text provided in the backticks, it'll be in the alt
text.
Header{type:'header', level: number, content: string}
Lines starting with one or more #
symbols will be interpreted as headers. The number of consequtive #
symbols will be the level
of the header. The header text will be within content
.
List{type:'list', items: [string]}
Lines starting with *
will be grouped together. Each line will be an item within items
.
Quote{type: 'quote', content: 'string'}
Lines starting with >
will be interpreted as a quote with the content
being separated out.
render([Block]) => html
Take the parsed out blocks and render an HTML page.
This module uses escape-goat to avoid HTML and JS injection to combat XSS.
Regular Text
will be converted to <p>
tags, however blank lines will be converted to <br/>
elements as per the spec.
Preformatted text will be turned into <pre>
tags. If there was an alt
specified, the text will be wrapped in <code class="language-${alt}>
so that it can be easily integrated with highlight.js.
List are converted to <ul>
elements with <li>
for each item in the list.
Paragraphs are converted to the appropriate <h1...n>
elements.
Quote items will be wrapped in <blockquote>
elements.