temp
This commit is contained in:
parent
74e5bb9104
commit
af3b2e3dc9
|
@ -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
|
||||
}
|
||||
|
|
|
@ -23,6 +23,9 @@ import {
|
|||
findRules
|
||||
} from './iss_utils.js'
|
||||
import { parseCssShadow } from './css_utils.js'
|
||||
import {
|
||||
serialize
|
||||
} from './iss_serializer.js'
|
||||
|
||||
// Ensuring the order of components
|
||||
const components = {
|
||||
|
@ -504,9 +507,32 @@ export const init = ({
|
|||
console.debug('Eager processing took ' + (t2 - t1) + ' ms')
|
||||
}
|
||||
|
||||
// optimization to traverse big-ass array only once instead of twice
|
||||
const eager = []
|
||||
const lazy = []
|
||||
|
||||
result.forEach(x => {
|
||||
if (typeof x === 'function') {
|
||||
lazy.push(x)
|
||||
} else {
|
||||
eager.push(x)
|
||||
}
|
||||
})
|
||||
|
||||
const serializedData = serialize(eager)
|
||||
const file = new File(serializedData, 'ruleset.piss')
|
||||
const blobUrl = URL.createObjectURL(file)
|
||||
const a = document.createElement('a')
|
||||
a.href = blobUrl
|
||||
a.download = 'ruleset.piss'
|
||||
document.body.appendChild(a)
|
||||
a.dispatchEvent(new MouseEvent('click'))
|
||||
URL.revokeObjectURL(blobUrl)
|
||||
document.body.removeChild(a)
|
||||
|
||||
return {
|
||||
lazy: result.filter(x => typeof x === 'function'),
|
||||
eager: result.filter(x => typeof x !== 'function'),
|
||||
lazy,
|
||||
eager,
|
||||
staticVars,
|
||||
engineChecksum
|
||||
}
|
||||
|
|
47
test/unit/specs/services/theme_data/iss_deserializer.spec.js
Normal file
47
test/unit/specs/services/theme_data/iss_deserializer.spec.js
Normal file
|
@ -0,0 +1,47 @@
|
|||
import { deserialize } from 'src/services/theme_data/iss_deserializer.js'
|
||||
|
||||
/* eslint-disable quotes */
|
||||
const testData = ```
|
||||
Root {
|
||||
--accent: color | #e2b188;
|
||||
--badgeNotification: color | #e15932;
|
||||
--bg: color | #0f161e;
|
||||
--cBlue: color | #81beea;
|
||||
--cGreen: color | #5dc94a;
|
||||
--cOrange: color | #ffc459;
|
||||
--cRed: color | #d31014;
|
||||
--defaultButtonBevel: shadow | $borderSide(#FFFFFF, top, 0.2) | $borderSide(#000000, bottom, 0.2);
|
||||
--defaultButtonHoverGlow: shadow | 0 0 4 --text;
|
||||
--defaultButtonShadow: shadow | 0 0 2 #000000;
|
||||
--defaultInputBevel: shadow | $borderSide(#FFFFFF, bottom, 0.2)| $borderSide(#000000, top, 0.2);
|
||||
--fg: color | #151e2b;
|
||||
--font: generic | sans-serif;
|
||||
--link: color | #e2b188;
|
||||
--monoFont: generic | monospace;
|
||||
--pressedButtonBevel: shadow | $borderSide(#FFFFFF, bottom, 0.2)| $borderSide(#000000, top, 0.2);
|
||||
--selectionBackground: color | --accent;
|
||||
--selectionText: color | $textColor(--accent, --text, no-preserve);
|
||||
--text: color | #b9b9ba;
|
||||
--wallpaper: color | #0c1118;
|
||||
background: transparent;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
Root Underlay {
|
||||
background: #000000;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
Root Underlay, test {
|
||||
background: #000000;
|
||||
opacity: 0.6;
|
||||
}
|
||||
```
|
||||
|
||||
describe.only('html_tree_converter', () => {
|
||||
describe('convertHtmlToTree', () => {
|
||||
it('should parse ISS correctly', () => {
|
||||
console.log(deserialize(testData))
|
||||
})
|
||||
})
|
||||
})
|
Loading…
Reference in a new issue