From 995564382ab477df0802bd985ca939f88d4d12ca Mon Sep 17 00:00:00 2001
From: LordBaryhobal <lordbaryhobal@gmail.com>
Date: Sat, 15 Jun 2024 13:17:27 +0200
Subject: [PATCH] added color support for json, yaml and xml

---
 gallery/test.json  |   6 ++++++
 gallery/test.pdf   | Bin 53286 -> 53418 bytes
 gallery/test.xml   |   3 +++
 gallery/test.yaml  |   8 ++++++++
 src/schema.typ     |  22 ++++++++++++++++++++++
 src/xml-loader.typ |  15 ++++++++++++++-
 6 files changed, 53 insertions(+), 1 deletion(-)

diff --git a/gallery/test.json b/gallery/test.json
index fc15e6d..f247bea 100644
--- a/gallery/test.json
+++ b/gallery/test.json
@@ -101,5 +101,11 @@
                 }
             }
         }
+    },
+    "colors": {
+        "main": {
+            "31-28": "#FF0000",
+            "11-4": [34, 176, 43]
+        }
     }
 }
diff --git a/gallery/test.pdf b/gallery/test.pdf
index 925be2cc4343370fe8ff5679751f2898de13dd5a..d08058f4e325c793ef21fbe391a6440d406ebf04 100644
GIT binary patch
delta 18375
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

delta 17830
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

diff --git a/gallery/test.xml b/gallery/test.xml
index ab92e22..4a8b716 100644
--- a/gallery/test.xml
+++ b/gallery/test.xml
@@ -65,4 +65,7 @@
             <description>offset register</description>
         </range>
     </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>
\ No newline at end of file
diff --git a/gallery/test.yaml b/gallery/test.yaml
index 2ca7964..f7119ae 100644
--- a/gallery/test.yaml
+++ b/gallery/test.yaml
@@ -71,3 +71,11 @@ structures:
       3-0:
         name: Rm
         description: offset register
+
+colors:
+  main:
+    31-28: "#3EFA6B"
+    25-23:
+      - 100
+      - 150
+      - 200
\ No newline at end of file
diff --git a/src/schema.typ b/src/schema.typ
index 0602329..5c1f650 100644
--- a/src/schema.typ
+++ b/src/schema.typ
@@ -50,6 +50,28 @@
     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 = (:)
   for (id, data) in schema.structures {
     id = str(id)
diff --git a/src/xml-loader.typ b/src/xml-loader.typ
index 1f00c42..9513766 100644
--- a/src/xml-loader.typ
+++ b/src/xml-loader.typ
@@ -83,8 +83,10 @@
 
 #let parse(content) = {
   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 colors = (:)
 
   for struct-elmt in struct-elmts {
     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 (
-    structures: structures
+    structures: structures,
+    colors: colors
   )
 }