#import "../src/lib.typ": *

#let test-yaml = schema.load("/gallery/test.yaml")
#schema.render(test-yaml, config: config.config(
  full-page: true
))

#let test-json = schema.load("/gallery/test.json")
#schema.render(test-json, config: config.blueprint(
  full-page: true
))

#let test-xml = schema.load("/gallery/test.xml")
#schema.render(test-xml, config: config.dark(
  full-page: true
))

#let test-raw = schema.load(```yaml
structures:
  main:
    bits: 4
    ranges:
      3-0:
        name: test
```)
#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
))