added color support for json, yaml and xml

This commit is contained in:
Louis Heredero 2024-06-15 13:17:27 +02:00
parent 7c62a16146
commit 995564382a
Signed by: HEL
GPG Key ID: 8D83DE470F8544E7
6 changed files with 53 additions and 1 deletions

View File

@ -101,5 +101,11 @@
} }
} }
} }
},
"colors": {
"main": {
"31-28": "#FF0000",
"11-4": [34, 176, 43]
}
} }
} }

Binary file not shown.

View File

@ -65,4 +65,7 @@
<description>offset register</description> <description>offset register</description>
</range> </range>
</structure> </structure>
<color structure="main" color="#FF0000" start="28" end="31" />
<color structure="main" color="#255961" start="4" end="11" />
<color structure="immediateOffset" color="89,97,37" start="4" end="11" />
</schema> </schema>

View File

@ -71,3 +71,11 @@ structures:
3-0: 3-0:
name: Rm name: Rm
description: offset register description: offset register
colors:
main:
31-28: "#3EFA6B"
25-23:
- 100
- 150
- 200

View File

@ -50,6 +50,28 @@
parse-raw(path-or-schema) parse-raw(path-or-schema)
} }
if "colors" in schema {
for struct in schema.colors.keys() {
for (span, col) in schema.colors.at(struct) {
if type(col) == str {
if col.starts-with("#") {
col = rgb(col)
} else {
let (r, g, b) = col.split(",").map(v => int(v))
col = rgb(r, g, b)
}
} else if type(col) == array {
col = rgb(..col)
} else if type(col) != color {
panic("Invalid color format")
}
schema.colors.at(struct).at(span) = col
}
}
} else {
schema.insert("colors", (:))
}
let structures = (:) let structures = (:)
for (id, data) in schema.structures { for (id, data) in schema.structures {
id = str(id) id = str(id)

View File

@ -83,8 +83,10 @@
#let parse(content) = { #let parse(content) = {
let struct-elmts = content.children.filter(e => "tag" in e and e.tag == "structure") let struct-elmts = content.children.filter(e => "tag" in e and e.tag == "structure")
let color-elmts = content.children.filter(e => "tag" in e and e.tag == "color")
let structures = (:) let structures = (:)
let colors = (:)
for struct-elmt in struct-elmts { for struct-elmt in struct-elmts {
structures.insert( structures.insert(
@ -93,8 +95,19 @@
) )
} }
for color-elmt in color-elmts {
let struct = color-elmt.attrs.structure
if not struct in colors {
colors.insert(struct, (:))
}
let span = color-elmt.attrs.end + "-" + color-elmt.attrs.start
colors.at(struct).insert(span, color-elmt.attrs.color)
}
return ( return (
structures: structures structures: structures,
colors: colors
) )
} }