feat: add util, transform tokens to markdown text

This commit is contained in:
Jocs 2018-02-12 00:05:41 +08:00
parent 8a37a18ae9
commit fdf0eab97e
2 changed files with 42 additions and 2 deletions

View File

@ -1,7 +1,7 @@
import { LOWERCASE_TAGS, CLASS_OR_ID } from '../config'
import { conflict, isLengthEven, isEven, getIdWithoutSet, loadImage, getImageSrc } from '../utils'
import { insertAfter, operateClassName } from '../utils/domManipulate.js'
import { tokenizer } from './parse'
import { tokenizer, generator } from './parse'
import { validEmoji } from '../emojis'
const snabbdom = require('snabbdom')
@ -115,7 +115,8 @@ class StateRender {
return h(blockSelector, data, block.children.map(child => renderBlock(child)))
} else {
console.log(tokenizer(block.text))
const tokens = tokenizer(block.text)
console.log(generator(tokens))
let children = block.text
? tokenizer(block.text).reduce((acc, token) => {
const chunk = this[token.type](h, cursor, block, token)

View File

@ -182,6 +182,45 @@ export const tokenizer = src => {
return tokenizerFac(src, beginRules, inlineRules, 0)
}
// transform `tokens` to text
export const generator = tokens => {
let result = ''
for (const token of tokens) {
switch (token.type) {
case 'hr':
case 'header':
case 'code_fense':
case 'backlash':
result += token.marker + token.content
break
case 'text':
result += token.content
break
case 'em':
case 'del':
case 'strong':
result += `${token.marker}${generator(token.children)}${token.backlash}${token.marker}`
break
case 'emoji':
case 'inline_code':
result += `${token.marker}${token.content}${token.backlash}${token.marker}`
break
case 'link':
result += `[${generator(token.children)}${token.backlash.first}](${token.href}${token.backlash.second})`
break
case 'image':
result += `![${generator(token.children)}${token.backlash.first}](${token.src}${token.backlash.second})`
break
case 'auto_link':
result += token.href
break
default:
throw new Error(`unhandle token type: ${token.type}`)
}
}
return result
}
/**
* [{
* type: 'hr',