diff --git a/docs/schema.typ b/docs/schema.typ index c915cd8..fe19f95 100644 --- a/docs/schema.typ +++ b/docs/schema.typ @@ -2,8 +2,9 @@ /// This function returns a dictionary of structures /// /// Supported formats: #schema.valid-extensions.map(e => raw("." + e)).join(", ") -/// - path-or-schema (str, raw): If it is a string, defines the path to load. \ -/// If it is a raw block, its content is directly parsed (the block's language will define the format to use) +/// - path-or-schema (str, raw, dictionary): If it is a string, defines the path to load. \ +/// If it is a raw block, its content is directly parsed (the block's language will define the format to use) \ +/// If it is a dictionary, it directly defines the schema structure /// -> dictionary #let load(path-or-schema) = {} diff --git a/gallery/test.pdf b/gallery/test.pdf index 1c90a5a..7a43849 100644 Binary files a/gallery/test.pdf and b/gallery/test.pdf differ diff --git a/gallery/test.typ b/gallery/test.typ index c8005f2..8b97dab 100644 --- a/gallery/test.typ +++ b/gallery/test.typ @@ -25,4 +25,106 @@ structures: ```) #schema.render(test-raw, config: config.config( full-page: true +)) + +#let test-typ = schema.load(( + structures: ( + main: ( + bits: 32, + ranges: ( + "31-28": (name: "cond"), + "27": (name: "0"), + "26": (name: "1"), + "25": (name: "I"), + "24": ( + name: "P", + description: "pre / post indexing bit", + values: ( + "0": "post, add offset after transfer", + "1": "pre, add offset before transfer" + ) + ), + "23": ( + name: "U", + description: "up / down bit", + values: ( + "0": "down, subtract offset from base", + "1": "up, addition offset to base" + ) + ), + "22": ( + name: "B", + description: "byte / word bit", + values: ( + "0": "transfer word quantity", + "1": "transfer byte quantity" + ) + ), + "21": ( + name: "W", + description: "write-back bit", + values: ( + "0": "no write-back", + "1": "write address into base" + ) + ), + "20": ( + name: "L", + description: "load / store bit", + values: ( + "0": "store to memory", + "1": "load from memory" + ) + ), + "19-16": ( + name: "Rn", + description: "base register" + ), + "15-12": ( + name: "Rd", + description: "source / destination register" + ), + "11-0": ( + name: "offset", + depends-on: "25", + values: ( + "0": ( + description: "offset is an immediate value", + structure: "immediateOffset" + ), + "1": ( + description: "offset is a register", + structure: "registerOffset" + ) + ) + ) + ) + ), + immediateOffset: ( + bits: 12, + ranges: ( + "11-0": ( + name: "12-bit immediate offset", + description: "unsigned number" + ) + ) + ), + registerOffset: ( + bits: 12, + ranges: ( + "11-4": ( + name: "shift", + description: "shift applied to Rm" + ), + "3-0": ( + name: "Rm", + description: "offset register" + ) + ) + ) + ) +)) + +#schema.render(test-typ, config: config.config( + full-page: true )) \ No newline at end of file diff --git a/manual.pdf b/manual.pdf index b9945ac..8de11c3 100644 Binary files a/manual.pdf and b/manual.pdf differ diff --git a/src/schema.typ b/src/schema.typ index a34efdc..15794d2 100644 --- a/src/schema.typ +++ b/src/schema.typ @@ -44,6 +44,8 @@ #let load(path-or-schema) = { let schema = if type(path-or-schema) == str { parse-file(path-or-schema) + } else if type(path-or-schema) == dictionary { + path-or-schema } else { parse-raw(path-or-schema) }