16 Commits

Author SHA1 Message Date
e4b42898bf Merge pull request 'Release v0.3.1' (#20) from dev into main
Reviewed-on: #20
2026-06-16 13:30:29 +00:00
5ac65afaff Merge pull request 'Prepare release v0.3.1' (#19) from release/v0.3.1 into dev
Reviewed-on: #19
2026-06-16 13:29:47 +00:00
472562596f chore: fix typo in manual example 2026-06-15 13:16:04 +02:00
39e6acaed8 chore: fix typo in manual 2026-06-15 13:13:30 +02:00
6cc3cfcd00 chore: use preview import paths in examples 2026-06-15 13:10:59 +02:00
861c25026b fix: parse start struct attribute in xml-loader 2026-06-15 13:08:58 +02:00
768e63fd46 chore: remove"Typst" from description 2026-06-15 12:43:43 +02:00
2678aee584 chore: add alt text on README images 2026-06-15 12:42:36 +02:00
2228f22352 chore: update changelog 2026-06-14 13:33:04 +02:00
a909398fbd chore: bump version to 0.3.1 2026-06-14 13:24:08 +02:00
05de90890f Merge pull request 'fix end line on non-consecutive ranges ending at the highest bit not being drawn' (#18) from ALVAROPING1/rivet-typst:dev into dev
Reviewed-on: #18
Reviewed-by: Louis Heredero <louis@herdac.ch>
2026-06-05 14:43:48 +00:00
ALVAROPING1
9b83b4c4a8 fix end line on non-consecutive ranges ending at the highest bit not being drawn 2026-06-05 14:45:34 +02:00
df7899ee4b Merge pull request 'prevent drawing separators on starting lines of fields' (#17) from rajayonin/rivet-typst:fix-consecutive-ranges into dev
Reviewed-on: #17
Reviewed-by: Louis Heredero <louis@herdac.ch>
2025-11-28 11:37:43 +00:00
b6f2fd99b8 prevent drawing separators on starting lines of fields
On non-consecutive ranges, we were drawing the starting line _on top_ of
the separator, which lead to some visual glitches in some viewers.
2025-11-25 09:02:49 +01:00
3e74ad15ee Merge pull request 'v0.3.0: updates, left-to-right bits and "Loading" manual section' (#7) from dev into main
Reviewed-on: #7
2025-05-02 22:39:29 +00:00
2d56678d43 Merge pull request 'v0.2.0: updates and minor fixes' (#4) from dev into main
Reviewed-on: #4
2025-02-23 13:21:00 +00:00
17 changed files with 9968 additions and 8938 deletions

View File

@@ -1,5 +1,11 @@
# Changelog
## [v0.3.1] - 2026-06-14
- Support for non-consecutive ranges ([#13](https://git.kb28.ch/HEL/rivet-typst/pulls/13))
- Prevent drawing separators on starting lines of fields ([#17](https://git.kb28.ch/HEL/rivet-typst/pulls/17))
- Fix end line on non-consecutive ranges ending at the highest bit not being draw ([#18](https://git.kb28.ch/HEL/rivet-typst/pulls/18))
- Add documentation for `start` property of structures ([61f13df815f](https://git.kb28.ch/HEL/rivet-typst/commit/6f13df815f99fd6be8b6b3a02b4d53bcc8fe0aff))
## [v0.3.0] - 2025-05-03
- updated CeTZ to 0.3.4
- updated to Typst 0.13.1

View File

@@ -9,7 +9,7 @@ It is based on the [homonymous Python script](https://git.kb28.ch/HEL/rivet/)
<tr>
<td>
<a href="./gallery/example1.typ">
<img src="./gallery/example1.png" width="1000px">
<img src="./gallery/example1.png" width="1000px" alt="A black on white diagram showing the bit structure of a machine instruction, detailing operands, flags and selectors.">
</a>
</td>
</tr>
@@ -19,7 +19,7 @@ It is based on the [homonymous Python script](https://git.kb28.ch/HEL/rivet/)
<tr>
<td>
<a href="./gallery/example2.typ">
<img src="./gallery/example2.png" width="1000px">
<img src="./gallery/example2.png" width="1000px" alt="A white on blue diagram showing the bit structure of RISC-V memory instructions, detailing operands, flags and selectors.">
</a>
</td>
</tr>
@@ -35,7 +35,7 @@ For more information, see the [manual](manual.pdf)
To use this package, simply import `schema` from [rivet](https://typst.app/universe/package/rivet) and call `schema.load` to parse a schema description. Then use `schema.render` to render it, et voilà !
```typ
#import "@preview/rivet:0.3.0": schema
#import "@preview/rivet:0.3.1": schema
#let doc = schema.load(yaml("path/to/schema.yaml"))
#schema.render(doc)
```

Binary file not shown.

View File

@@ -1,6 +1,6 @@
#import "../src/lib.typ": schema, config
#import "@preview/rivet:0.3.1": schema, config
#let example = schema.load("/gallery/example1.yaml")
#let example = schema.load(yaml("./example1.yaml"))
#schema.render(example, config: config.config(
full-page: true
))

Binary file not shown.

View File

@@ -1,6 +1,6 @@
#import "../src/lib.typ": schema, config
#import "@preview/rivet:0.3.1": schema, config
#let example = schema.load("/gallery/example2.yaml")
#let example = schema.load(yaml("./example2.yaml"))
#schema.render(example, config: config.blueprint(
full-page: true,
left-labels: true

Binary file not shown.

View File

@@ -1,6 +1,6 @@
#import "../src/lib.typ": schema, config
#import "@preview/rivet:0.3.1": schema, config
#let example = schema.load("/gallery/example1.yaml")
#let example = schema.load(yaml("/gallery/example1.yaml"))
//#schema.render(example)
= Chapter 1

View File

@@ -1,14 +1,14 @@
#import "../../src/lib.typ": *
#import "@preview/rivet:0.3.1": *
#let conf = config.config(
full-page: true,
left-labels: true
)
#let alu = schema.load("/gallery/riscv/alu_instr.yaml")
#let alu = schema.load(yaml("./alu_instr.yaml"))
#schema.render(alu, config: conf)
#let branch = schema.load("/gallery/riscv/branch_instr.yaml")
#let branch = schema.load(yaml("./branch_instr.yaml"))
#schema.render(branch, config: conf)
#let mem = schema.load("/gallery/riscv/mem_instr.yaml")
#let mem = schema.load(yaml("./mem_instr.yaml"))
#schema.render(mem, config: conf)

Binary file not shown.

View File

@@ -1,16 +1,17 @@
#import "../src/lib.typ": *
#import "@preview/rivet:0.3.1": *
#let test-yaml = schema.load("/gallery/test.yaml")
#let test-yaml = schema.load(yaml("./test.yaml"))
#schema.render(test-yaml, config: config.config(
full-page: true
))
#let test-json = schema.load("/gallery/test.json")
#let test-json = schema.load(json("./test.json"))
#schema.render(test-json, config: config.blueprint(
full-page: true
))
#let test-xml = schema.load("/gallery/test.xml")
#let test-xml-raw = schema.xml-loader.parse(xml("./test.xml").first())
#let test-xml = schema.load(test-xml-raw)
#schema.render(test-xml, config: config.dark(
full-page: true
))

18840
manual.pdf

File diff suppressed because it is too large Load Diff

View File

@@ -105,7 +105,7 @@ Since the XML format is quite different from the other, you might find it helpfu
A schema contains a dictionary of structures. There must be at least one defined structure named "main".
It can also optionnaly contain a "colors" dictionary. More details about this in #link(<format-colors>)[Colors]
It can also optionally contain a "colors" dictionary. More details about this in #link(<format-colors>)[Colors]
```json
{
@@ -363,7 +363,7 @@ structures:
#let x = schema.xml-loader.load("schema.xml")
#let s = schema.load(x)
// From file
#let x = schema.xml-loader.parse(yaml("schema.yaml").first())
#let x = schema.xml-loader.parse(xml("schema.xml").first())
#let s = schema.load(x)
// Raw block
#let s = schema.load(```xml

View File

@@ -1,4 +1,4 @@
#let version = version(0,3,0)
#let version = version(0,3,1)
#import "config.typ"
#import "schema.typ"

View File

@@ -387,8 +387,10 @@
}
let range-boundaries = ()
for r in struct.ranges.values() {
let i = to-real-i(if config.ltr-bits {r.start} else {r.end})
range-boundaries.push(i)
let start-i = to-real-i(if config.ltr-bits {r.start} else {r.end})
let end-i = to-real-i(if config.ltr-bits {r.end} else {r.start}) + 1
range-boundaries.push(start-i)
range-boundaries.push(end-i)
}
// Draw colors
@@ -472,9 +474,9 @@
shapes += draw-text(range_.name, txt-col, name-x, name-y, fill: bg-col)
// paint end line only if needed
let is-not-limit = if config.ltr-bits { start-i != 0 } else { end-i != struct.bits - 1 }
if (
start-i != 0
and end-i != struct.bits - 1
is-not-limit
and ranges
.at(
i

View File

@@ -76,8 +76,9 @@
}
return (
bits: elmt.attrs.bits,
ranges: ranges
bits: int(elmt.attrs.bits),
ranges: ranges,
start: elmt.attrs.at("start", default: 0)
)
}

View File

@@ -1,6 +1,6 @@
[package]
name = "rivet"
version = "0.3.0"
version = "0.3.1"
compiler = "0.13.1"
repository = "https://git.kb28.ch/HEL/rivet-typst"
entrypoint = "src/lib.typ"
@@ -9,6 +9,6 @@ authors = [
]
categories = [ "visualization" ]
license = "Apache-2.0"
description = "Register / Instruction Visualizer & Explainer Tool with Typst, using CeTZ"
description = "Register / Instruction Visualizer & Explainer Tool, using CeTZ"
keywords = [ "assembly", "instruction", "binary" ]
exclude = [ "gallery", "justfile", "docs" ]