mirror of
https://github.com/marktext/marktext.git
synced 2025-05-21 11:20:54 +08:00
feat: add util, transform tokens to markdown text
This commit is contained in:
parent
8a37a18ae9
commit
fdf0eab97e
@ -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)
|
||||
|
@ -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 += ``
|
||||
break
|
||||
case 'auto_link':
|
||||
result += token.href
|
||||
break
|
||||
default:
|
||||
throw new Error(`unhandle token type: ${token.type}`)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* [{
|
||||
* type: 'hr',
|
||||
|
Loading…
Reference in New Issue
Block a user