aboutsummaryrefslogtreecommitdiff
path: root/src/services/theme_data/iss_deserializer.js
diff options
context:
space:
mode:
authorHenry Jameson <me@hjkos.com>2024-09-19 20:37:14 +0300
committerHenry Jameson <me@hjkos.com>2024-09-19 20:37:14 +0300
commitaf3b2e3dc9043e66806be85869d867e6b0d23c3c (patch)
treef7b720759b49f5581766a913cc60f260c83606e9 /src/services/theme_data/iss_deserializer.js
parent74e5bb9104551bfd8105ef6780c40502e9087adc (diff)
temp
Diffstat (limited to 'src/services/theme_data/iss_deserializer.js')
-rw-r--r--src/services/theme_data/iss_deserializer.js44
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
}