2024-09-19 20:37:14 +03:00
|
|
|
// this works nearly the same as HTML tree converter
|
|
|
|
|
export const deserialize = (input) => {
|
|
|
|
|
const buffer = []
|
|
|
|
|
let textBuffer = ''
|
|
|
|
|
|
|
|
|
|
const getCurrentBuffer = () => {
|
|
|
|
|
let current = buffer[buffer.length - 1][1]
|
|
|
|
|
if (current == null) {
|
|
|
|
|
current = { name: null, content: [] }
|
|
|
|
|
}
|
|
|
|
|
buffer.push(current)
|
|
|
|
|
return current
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Processes current line buffer, adds it to output buffer and clears line buffer
|
|
|
|
|
const flushText = (content) => {
|
|
|
|
|
if (textBuffer === '') return
|
|
|
|
|
if (content) {
|
|
|
|
|
getCurrentBuffer().content.push(textBuffer)
|
|
|
|
|
} else {
|
|
|
|
|
getCurrentBuffer().name = textBuffer
|
|
|
|
|
}
|
|
|
|
|
textBuffer = ''
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < input.length; i++) {
|
|
|
|
|
const char = input[i]
|
|
|
|
|
|
|
|
|
|
if (char === ';') {
|
|
|
|
|
flushText(true)
|
|
|
|
|
} else if (char === '{') {
|
|
|
|
|
flushText(false)
|
|
|
|
|
} else if (char === '}') {
|
|
|
|
|
buffer.push({ name: null, content: [] })
|
|
|
|
|
textBuffer = ''
|
|
|
|
|
} else {
|
|
|
|
|
textBuffer += char
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
flushText()
|
|
|
|
|
return buffer
|
2024-09-19 04:24:35 +03:00
|
|
|
}
|