More progress on parser.

This commit is contained in:
Joshua Bemenderfer
2023-02-12 09:00:19 -05:00
parent bc2fc78c96
commit 4e10b07561
9 changed files with 93 additions and 31 deletions

View File

@@ -0,0 +1,20 @@
const { contentAsText } = require('../helpers')
const languages = ['terrace', 'json', 'yaml', 'toml', 'javascript', 'typescript', 'c', 'python']
module.exports = async (doc, rootLevel) => {
const { next, level, line, head, tail } = doc
const codeExample = {
type: 'code-example',
languages: {}
}
while (await next(rootLevel)) {
const languageLevel = level()
if (languages.includes(head())) {
codeExample.languages[head()] = await contentAsText(doc, languageLevel)
}
}
return codeExample
}

View File

@@ -0,0 +1,7 @@
const parseNode = require('./node.js')
module.exports.section = parseNode
module.exports.div = parseNode
module.exports.logo = doc => ({ type: `logo` })
module.exports.markdown = require('./markdown.js')
module.exports['code-example'] = require('./code-example.js')

View File

@@ -0,0 +1,9 @@
const { contentAsText } = require('../helpers.js')
const marked = require('marked')
module.exports = async (...args) => {
return {
type: `markdown`,
text: marked.parse(await contentAsText(...args))
}
}

26
docs/parser/nodes/node.js Normal file
View File

@@ -0,0 +1,26 @@
const knownNodes = require('./index.js')
module.exports = async function (doc, rootLevel) {
const { next, line, match, tail, level, head } = doc
const node = {
type: head(),
class: '',
children: []
}
while (await next(rootLevel)) {
if (!head()) continue
const block = head()
if (match('class')) {
node.class = tail()
continue
}
if (!knownNodes[block]) continue
node.children.push(await knownNodes[block](doc, level()))
}
return node
}