diff options
| author | Henry Jameson <me@hjkos.com> | 2024-09-19 20:37:14 +0300 |
|---|---|---|
| committer | Henry Jameson <me@hjkos.com> | 2024-09-19 20:37:14 +0300 |
| commit | af3b2e3dc9043e66806be85869d867e6b0d23c3c (patch) | |
| tree | f7b720759b49f5581766a913cc60f260c83606e9 /src/services/theme_data/iss_deserializer.js | |
| parent | 74e5bb9104551bfd8105ef6780c40502e9087adc (diff) | |
temp
Diffstat (limited to 'src/services/theme_data/iss_deserializer.js')
| -rw-r--r-- | src/services/theme_data/iss_deserializer.js | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/src/services/theme_data/iss_deserializer.js b/src/services/theme_data/iss_deserializer.js index 44a0fade..431e1b94 100644 --- a/src/services/theme_data/iss_deserializer.js +++ b/src/services/theme_data/iss_deserializer.js @@ -1,3 +1,43 @@ -export const deserializer (string) { -let level = 0 +// 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 } |
