More progress on parser.
This commit is contained in:
20
docs/parser/nodes/code-example.js
Normal file
20
docs/parser/nodes/code-example.js
Normal 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
|
||||
}
|
||||
7
docs/parser/nodes/index.js
Normal file
7
docs/parser/nodes/index.js
Normal 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')
|
||||
9
docs/parser/nodes/markdown.js
Normal file
9
docs/parser/nodes/markdown.js
Normal 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
26
docs/parser/nodes/node.js
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user