1 Commits
Author SHA1 Message Date
Zjl37 30e54814b2 commit source changes for cpud-hack 2025-08-09 03:17:38 +08:00
51 changed files with 95 additions and 191 deletions
+7 -7
View File
@@ -3,7 +3,7 @@
Circuiteria is a [Typst](https://typst.app) package for drawing block circuit diagrams using the [CeTZ](https://typst.app/universe/package/cetz) package. Circuiteria is a [Typst](https://typst.app) package for drawing block circuit diagrams using the [CeTZ](https://typst.app/universe/package/cetz) package.
<p align="center"> <p align="center">
<img src="./gallery/platypus.png" alt="A platypus / Perry the Platypus meme made with colored rounded rectangles"> <img src="./gallery/platypus.png" alt="Perry the platypus">
</p> </p>
## Examples ## Examples
@@ -11,17 +11,17 @@ Circuiteria is a [Typst](https://typst.app) package for drawing block circuit di
<tr> <tr>
<td colspan="2"> <td colspan="2">
<a href="./gallery/test.typ"> <a href="./gallery/test.typ">
<img src="./gallery/test.png" width="500px" alt="Block diagram of a multi-cycle RISC-V FPGA processor"> <img src="./gallery/test.png" width="500px">
</a> </a>
</td> </td>
</tr> </tr>
<tr> <tr>
<td colspan="2">A bit of everything</td> <td colspan="2">A bit of eveything</td>
</tr> </tr>
<tr> <tr>
<td colspan="2"> <td colspan="2">
<a href="./gallery/test5.typ"> <a href="./gallery/test5.typ">
<img src="./gallery/test5.png" width="500px" alt="Block diagram of a single-cycle RISC-V processor"> <img src="./gallery/test5.png" width="500px">
</a> </a>
</td> </td>
</tr> </tr>
@@ -31,12 +31,12 @@ Circuiteria is a [Typst](https://typst.app) package for drawing block circuit di
<tr> <tr>
<td> <td>
<a href="./gallery/test4.typ"> <a href="./gallery/test4.typ">
<img src="./gallery/test4.png" width="250px" alt="Top-level block diagram of a single-cycle RISC-V processor"> <img src="./gallery/test4.png" width="250px">
</a> </a>
</td> </td>
<td> <td>
<a href="./gallery/test6.typ"> <a href="./gallery/test6.typ">
<img src="./gallery/test6.png" width="250px" alt="Block diagram of a simple single-cycle RISC-V ALU"> <img src="./gallery/test6.png" width="250px">
</a> </a>
</td> </td>
</tr> </tr>
@@ -56,7 +56,7 @@ For more information, see the [manual](manual.pdf)
To use this package, simply import [circuiteria](https://typst.app/universe/package/circuiteria) and call the `circuit` function: To use this package, simply import [circuiteria](https://typst.app/universe/package/circuiteria) and call the `circuit` function:
```typ ```typ
#import "@preview/circuiteria:0.2.1" #import "@preview/circuiteria:0.2.0"
#circuiteria.circuit({ #circuiteria.circuit({
import circuiteria: * import circuiteria: *
... ...
+1 -1
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
#import "../src/circuit.typ": circuit #import "../src/circuit.typ": circuit
#import "../src/util.typ" #import "../src/util.typ"
+2 -6
View File
@@ -56,7 +56,7 @@ for i in range(3) {
```) ```)
#let wires = example(``` #let wires = example(```
for i in range(4) { for i in range(3) {
draw.circle((i * 3, 0), radius: .1, name: "p" + str(i * 2)) draw.circle((i * 3, 0), radius: .1, name: "p" + str(i * 2))
draw.circle((i * 3 + 2, 1), radius: .1, name: "p" + str(i * 2 + 1)) draw.circle((i * 3 + 2, 1), radius: .1, name: "p" + str(i * 2 + 1))
draw.content((i * 3 + 1, -1), raw(wire.wire-styles.at(i))) draw.content((i * 3 + 1, -1), raw(wire.wire-styles.at(i)))
@@ -65,10 +65,6 @@ wire.wire("w1", ("p0", "p1"), style: "direct")
wire.wire("w2", ("p2", "p3"), style: "zigzag") wire.wire("w2", ("p2", "p3"), style: "zigzag")
wire.wire("w3", ("p4", "p5"), style: "dodge", wire.wire("w3", ("p4", "p5"), style: "dodge",
dodge-y: -0.5, dodge-margins: (0.5, 0.5)) dodge-y: -0.5, dodge-margins: (0.5, 0.5))
wire.wire("w4", ("p6","p7"), style: "guided",
guided-center:(20%, 40%), guided-margins: (90%,87%),
guided-sides: ("north","south"))
```, vertical: true) ```, vertical: true)
#let stub = example(``` #let stub = example(```
@@ -191,4 +187,4 @@ wire.wire("w1", ((0, 0), (1, 1)), style: "zigzag")
wire.wire("w2", ((0, 0), (1, -.5)), wire.wire("w2", ((0, 0), (1, -.5)),
style: "zigzag", zigzag-ratio: 80%) style: "zigzag", zigzag-ratio: 80%)
wire.intersection("w1.zig") wire.intersection("w1.zig")
```) ```)
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

+1 -1
View File
@@ -1,4 +1,4 @@
#import "@preview/circuiteria:0.2.1": * #import "../src/lib.typ": *
#set page(width: auto, height: auto, margin: .5cm) #set page(width: auto, height: auto, margin: .5cm)
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 142 KiB

+1 -1
View File
@@ -1,4 +1,4 @@
#import "@preview/circuiteria:0.2.1": circuit, element, util, wire #import "../src/lib.typ": circuit, element, util, wire
#set page(width: auto, height: auto, margin: .5cm) #set page(width: auto, height: auto, margin: .5cm)
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 142 KiB

+1 -1
View File
@@ -1,4 +1,4 @@
#import "@preview/circuiteria:0.2.1": circuit, element, util, wire #import "../src/lib.typ": circuit, element, util, wire
#set page(width: auto, height: auto, margin: .5cm) #set page(width: auto, height: auto, margin: .5cm)
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

+2 -1
View File
@@ -1,4 +1,5 @@
#import "@preview/circuiteria:0.2.1": circuit, element, util, wire #import "@preview/cetz:0.3.2": draw
#import "../src/lib.typ": circuit, element, util, wire
#set page(width: auto, height: auto, margin: .5cm) #set page(width: auto, height: auto, margin: .5cm)
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 KiB

After

Width:  |  Height:  |  Size: 159 KiB

+2 -2
View File
@@ -1,5 +1,5 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
#import "@preview/circuiteria:0.2.1": * #import "../src/lib.typ": *
#set page(width: auto, height: auto, margin: .5cm) #set page(width: auto, height: auto, margin: .5cm)
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 274 KiB

After

Width:  |  Height:  |  Size: 275 KiB

+2 -2
View File
@@ -1,5 +1,5 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
#import "@preview/circuiteria:0.2.1": * #import "../src/lib.typ": *
#set page(width: auto, height: auto, margin: .5cm) #set page(width: auto, height: auto, margin: .5cm)
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

+2 -2
View File
@@ -1,5 +1,5 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw, vector
#import "@preview/circuiteria:0.2.1": * #import "../src/lib.typ": *
#set page(width: auto, height: auto, margin: .5cm) #set page(width: auto, height: auto, margin: .5cm)
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 34 KiB

+2 -1
View File
@@ -1,4 +1,5 @@
#import "@preview/circuiteria:0.2.1": circuit, element, util, wire #import "@preview/cetz:0.3.2": draw
#import "../src/lib.typ": circuit, element, util, wire
#set page(width: auto, height: auto, margin: .5cm) #set page(width: auto, height: auto, margin: .5cm)
BIN
View File
Binary file not shown.
+2 -2
View File
@@ -1,5 +1,5 @@
#import "@preview/tidy:0.4.1" #import "@preview/tidy:0.4.1"
#import "/src/cetz.typ": draw, canvas #import "@preview/cetz:0.3.2": draw, canvas
#import "src/lib.typ" #import "src/lib.typ"
#import "doc/examples.typ" #import "doc/examples.typ"
#import "src/circuit.typ": circuit #import "src/circuit.typ": circuit
@@ -105,7 +105,7 @@ This package provides a way to make beautiful block circuit diagrams using the C
Simply import Circuiteria and call the `circuit` function: Simply import Circuiteria and call the `circuit` function:
#pad(left: 1em)[```typ #pad(left: 1em)[```typ
#import "@preview/circuiteria:0.2.1" #import "@preview/circuiteria:0.2.0"
#circuiteria.circuit({ #circuiteria.circuit({
import circuiteria: * import circuiteria: *
... ...
-1
View File
@@ -1 +0,0 @@
#import "@preview/cetz:0.3.4": *
+3 -2
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": canvas #import "@preview/cetz:0.3.2": canvas
#import "@preview/tidy:0.3.0" #import "@preview/tidy:0.3.0"
/// Draws a block circuit diagram /// Draws a block circuit diagram
@@ -9,5 +9,6 @@
/// - length (length, ratio): Optional base unit /// - length (length, ratio): Optional base unit
/// -> none /// -> none
#let circuit(body, length: 2em) = { #let circuit(body, length: 2em) = {
set text(font: "Source Sans 3")
canvas(length: length, body) canvas(length: length, body)
} }
+25 -24
View File
@@ -1,6 +1,6 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
#import "element.typ" #import "element.typ"
#import "ports.typ": add-port #import "ports.typ": add-ports, add-port
#let draw-shape(id, tl, tr, br, bl, fill, stroke) = { #let draw-shape(id, tl, tr, br, bl, fill, stroke) = {
let p0 = tl let p0 = tl
@@ -31,15 +31,15 @@
draw.anchor("name", (p5, 50%, (p1, 50%, p2))) draw.anchor("name", (p5, 50%, (p1, 50%, p2)))
}) })
let f2 = add-port(id, "west", (id: "in1"), (p0, 50%, p6)) // let f2 = add-port(id, "west", (id: "in1"), (p0, 50%, p6))
let f3 = add-port(id, "west", (id: "in2"), (p3, 50%, p4)) // let f3 = add-port(id, "west", (id: "in2"), (p3, 50%, p4))
let f4 = add-port(id, "east", (id: "out"), (p1, 50%, p2)) // let f4 = add-port(id, "east", (id: "out"), (p1, 50%, p2))
let f = { // let f = {
f1; f2; f3; f4 // f1; f2; f3; f4
} // }
return (f, tl, tr, br, bl) return (f1, tl, tr, br, bl)
} }
/// Draws an ALU with two inputs /// Draws an ALU with two inputs
@@ -53,14 +53,7 @@
h: none, h: none,
name: none, name: none,
name-anchor: "center", name-anchor: "center",
fill: none, ports: (
stroke: black + 1pt,
id: "",
debug: (
ports: false
)
) = {
let ports = (
west: ( west: (
(id: "in1"), (id: "in1"),
(id: "in2"), (id: "in2"),
@@ -68,8 +61,15 @@
east: ( east: (
(id: "out"), (id: "out"),
) )
),
ports-margins: (west: (-30%, -30%)),
fill: none,
stroke: black + 1pt,
id: "",
debug: (
ports: false
) )
) = {
element.elmt( element.elmt(
draw-shape: draw-shape, draw-shape: draw-shape,
x: x, x: x,
@@ -79,15 +79,16 @@
name: name, name: name,
name-anchor: name-anchor, name-anchor: name-anchor,
ports: ports, ports: ports,
ports-margins: ports-margins,
fill: fill, fill: fill,
stroke: stroke, stroke: stroke,
id: id, id: id,
auto-ports: false, // auto-ports: false,
ports-y: ( // ports-y: (
in1: (h) => {h * 0.225}, // in1: (h) => {h * 0.225},
in2: (h) => {h * 0.775}, // in2: (h) => {h * 0.775},
out: (h) => {h * 0.5} // out: (h) => {h * 0.5}
), // ),
debug: debug debug: debug
) )
} }
+6 -8
View File
@@ -1,9 +1,9 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
#import "element.typ" #import "element.typ"
#let draw-shape(id, tl, tr, br, bl, fill, stroke, radius: 0.5em) = { #let draw-shape(id, tl, tr, br, bl, fill, stroke) = {
let f = draw.rect( let f = draw.rect(
radius: radius, radius: 0.5em,
inset: 0.5em, inset: 0.5em,
fill: fill, fill: fill,
stroke: stroke, stroke: stroke,
@@ -16,8 +16,7 @@
/// Draws a block element /// Draws a block element
/// ///
/// #examples.block /// #examples.block
/// For other parameters description, see #doc-ref("element.elmt") /// For parameters description, see #doc-ref("element.elmt")
/// - radius (number, length, ratio, dictionary): The corner radius of the block. See CeTZ documentation for more information
#let block( #let block(
x: none, x: none,
y: none, y: none,
@@ -28,14 +27,13 @@
ports: (), ports: (),
ports-margins: (), ports-margins: (),
fill: none, fill: none,
radius: 0.5em,
stroke: black + 1pt, stroke: black + 1pt,
id: "", id: "",
debug: ( debug: (
ports: false ports: false
) )
) = element.elmt( ) = element.elmt(
draw-shape: draw-shape.with(radius: radius), draw-shape: draw-shape,
x: x, x: x,
y: y, y: y,
w: w, w: w,
@@ -48,4 +46,4 @@
stroke: stroke, stroke: stroke,
id: id, id: id,
debug: debug debug: debug
) )
+1 -1
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw, coordinate #import "@preview/cetz:0.3.2": draw, coordinate
#import "ports.typ": add-ports, add-port #import "ports.typ": add-ports, add-port
#import "../util.typ" #import "../util.typ"
+1 -1
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
#import "element.typ" #import "element.typ"
#import "ports.typ": add-port #import "ports.typ": add-port
+1 -1
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw, coordinate #import "@preview/cetz:0.3.2": draw, coordinate
#import "../util.typ" #import "../util.typ"
/// Draws a group of elements /// Draws a group of elements
+1 -1
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
#import "gate.typ" #import "gate.typ"
#let draw-shape(id, tl, tr, br, bl, fill, stroke) = { #let draw-shape(id, tl, tr, br, bl, fill, stroke) = {
+1 -1
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
#import "gate.typ" #import "gate.typ"
#let draw-shape(id, tl, tr, br, bl, fill, stroke) = { #let draw-shape(id, tl, tr, br, bl, fill, stroke) = {
+1 -7
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw, coordinate #import "@preview/cetz:0.3.2": draw, coordinate
#import "../ports.typ": add-ports, add-port #import "../ports.typ": add-ports, add-port
#import "../element.typ" #import "../element.typ"
@@ -63,12 +63,6 @@
if to == "out" { if to == "out" {
dy = height / 2 dy = height / 2
} else { } else {
let all-ports = range(inputs).map(i => "in" + str(i))
let i = all-ports.position(p => p == to)
assert(
i != none,
message: "Unknown port '" + y.to + "' must be one of " + repr(all-ports)
)
dy = height * (i + 0.5) / inputs dy = height * (i + 0.5) / inputs
} }
+1 -1
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
// #import "iec_gate.typ" as iec-gate // #import "iec_gate.typ" as iec-gate
#import "iec_gate.typ" as iec-gate #import "iec_gate.typ" as iec-gate
+1 -1
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
#import "iec_gate.typ" as iec-gate #import "iec_gate.typ" as iec-gate
+1 -1
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw, coordinate #import "@preview/cetz:0.3.2": draw, coordinate
#import "../ports.typ": add-ports, add-port #import "../ports.typ": add-ports, add-port
#import "../element.typ" #import "../element.typ"
+1 -1
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
#import "iec_gate.typ" as iec-gate #import "iec_gate.typ" as iec-gate
/// Draws an IEC-OR gate. This function is also available as `element.iec-gate-or()` /// Draws an IEC-OR gate. This function is also available as `element.iec-gate-or()`
+1 -1
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
#import "iec_gate.typ" as iec-gate #import "iec_gate.typ" as iec-gate
/// Draws an IEC-XOR gate. This function is also available as `element.iec-gate-xor()` /// Draws an IEC-XOR gate. This function is also available as `element.iec-gate-xor()`
+1 -1
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
#import "gate.typ" #import "gate.typ"
#let draw-shape(id, tl, tr, br, bl, fill, stroke) = { #let draw-shape(id, tl, tr, br, bl, fill, stroke) = {
+1 -1
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
#import "gate.typ" #import "gate.typ"
#let space = 10% #let space = 10%
+1 -1
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
#import "../util.typ" #import "../util.typ"
#import "element.typ" #import "element.typ"
#import "ports.typ": add-port #import "ports.typ": add-port
+4 -2
View File
@@ -1,4 +1,4 @@
#import "/src/cetz.typ": draw #import "@preview/cetz:0.3.2": draw
#import "../util.typ": rotate-anchor #import "../util.typ": rotate-anchor
#let add-port( #let add-port(
@@ -24,8 +24,10 @@
let pos1 = (rel: offset, to: pos) let pos1 = (rel: offset, to: pos)
let clock-line-style = port.at("clock-line-style", default: (:))
// TODO: use context or vectors to have the height relative to the width // TODO: use context or vectors to have the height relative to the width
draw.line(prev, pos1, next) draw.line(prev, pos1, next, ..clock-line-style)
} }
draw.content( draw.content(
pos, pos,
+1 -2
View File
@@ -1,5 +1,4 @@
#let version = version(0, 2, 1) #let version = version(0, 2, 0)
#let name = "circuiteria"
#import "circuit.typ": circuit #import "circuit.typ": circuit
#import "element.typ" #import "element.typ"
+14 -102
View File
@@ -1,9 +1,9 @@
#import "/src/cetz.typ": draw, coordinate #import "@preview/cetz:0.3.2": draw, coordinate
#import "util.typ": opposite-anchor #import "util.typ": opposite-anchor
/// List of valid wire styles /// List of valid wire styles
/// #examples.wires /// #examples.wires
#let wire-styles = ("direct", "zigzag", "dodge", "guided") #let wire-styles = ("direct", "zigzag", "dodge")
#let signal-width = 1pt #let signal-width = 1pt
#let bus-width = 1.5pt #let bus-width = 1.5pt
@@ -109,88 +109,6 @@
return (points, anchors) return (points, anchors)
} }
#let get-guided-wire(pts, margins, sides, center-guides, ctx) = {
let start = pts.first()
let end = pts.last()
let (margin-start, margin-end) = margins
let (side-start, side-end) = sides
let (center_horizontal, center_vertical) = center-guides
let (ctx, p0) = coordinate.resolve(ctx, start)
let (ctx, p6) = coordinate.resolve(ctx, end)
p0 = (x: p0.first(), y: p0.at(1))
p6 = (x: p6.first(), y: p6.at(1))
let box_width = calc.abs(p6.x - p0.x)
let box_height = calc.abs(p6.y - p0.y)
// finding correct dx and dy
let dx1 = box_width * margin-start / 100%
if side-start == "west" {
dx1 *= -1
} else if side-start == "north" or side-start == "south" { dx1 = 0}
let dx2 = box_width * margin-end / 100%
if side-end == "west" {
dx2 *= -1
} else if side-end == "north" or side-end == "south" { dx2 = 0}
let dy1 = box_height * margin-start / 100%
if side-start == "south" {
dy1 *= -1
} else if side-start == "west" or side-start == "east" { dy1 = 0}
let dy2 = box_height * margin-end / 100%
if side-end == "south" {
dy2 *= -1
} else if side-end == "west" or side-end == "east" { dy2 = 0}
// points that are closest to the edge points
let p1 = (p0.x + dx1, p0.y + dy1)
let p5 = (p6.x + dx2, p6.y + dy2)
// middle point
let center_x = p0.x + box_width * center_horizontal / 100%
let center_y = p0.y + box_height * center_vertical / 100%
let p3 = (center_x, center_y)
// setting up the points for that touch the guides
let p2 = (0,0)
let p4 = (0,0)
if side-start in ("north", "south") {
p2 = (horizontal: p3, vertical: p1)
} else {
p2 = (horizontal: p1, vertical: p3)
}
if side-end in ("north", "south") {
p4 = (horizontal: p3, vertical: p5)
} else if side-end in ("east", "west") {
p4 = (horizontal: p5, vertical: p3)
}
// returning
let points = (
start,
p1,
p2,
p3,
p4,
p5,
end
)
let anchors = (
"start": start,
"start2": points.at(1),
"guide-start": points.at(2),
"center": points.at(3),
"guide-end": points.at(4),
"end2": points.at(5),
"end": end
)
return (points, anchors)
}
/// Draws a wire between two points /// Draws a wire between two points
/// - id (str): The wire's id, for future reference (anchors) /// - id (str): The wire's id, for future reference (anchors)
/// - pts (array): The two points (as CeTZ compatible coordinates, i.e. XY, relative positions, ids, etc.) /// - pts (array): The two points (as CeTZ compatible coordinates, i.e. XY, relative positions, ids, etc.)
@@ -209,9 +127,6 @@
/// - dodge-y (number): Y position to dodge the wire to (only with style "dodge") /// - dodge-y (number): Y position to dodge the wire to (only with style "dodge")
/// - dodge-sides (array): The start and end sides (going out of the connected element) of the wire (only with style "dodge") /// - dodge-sides (array): The start and end sides (going out of the connected element) of the wire (only with style "dodge")
/// - dodge-margins (array): The start and end margins (i.e. space before dodging) of the wire (only with style "dodge") /// - dodge-margins (array): The start and end margins (i.e. space before dodging) of the wire (only with style "dodge")
/// - guided-center (array): the horizontal and vertical guides of the center guides (only with style "guided")
/// - guided-margins (array): the start and end of guided margins of the wire (only with style "guided")
/// - guided-sides (array): the side of start and end array (must be either "north", "south", "west", "east") (only work with style "guided")
#let wire( #let wire(
id, pts, id, pts,
bus: false, bus: false,
@@ -222,9 +137,6 @@
dashed: false, dashed: false,
style: "direct", style: "direct",
reverse: false, reverse: false,
guided-center: (50%, 50%),
guided-margins: (5%, 5%),
guided-sides: ("east", "west"),
directed: false, directed: false,
rotate-name: true, rotate-name: true,
zigzag-ratio: 50%, zigzag-ratio: 50%,
@@ -266,14 +178,6 @@
dodge-sides, dodge-sides,
ctx ctx
) )
} else if style == "guided" {
(points, anchors) = get-guided-wire(
pts,
guided-margins,
guided-sides,
guided-center,
ctx
)
} }
let mark = (fill: color) let mark = (fill: color)
@@ -311,7 +215,7 @@
if name != none { if name != none {
let names = () let names = ()
if type(name) == str { if type(name) == str or type(name) == content {
names = ((name, name-pos),) names = ((name, name-pos),)
} else if type(name) == array { } else if type(name) == array {
@@ -363,7 +267,9 @@
/// - vertical (bool): Whether the name should be displayed vertically /// - vertical (bool): Whether the name should be displayed vertically
/// - length (number): The length of the stub /// - length (number): The length of the stub
/// - name-offset (number): The name offset, perpendicular to the stub /// - name-offset (number): The name offset, perpendicular to the stub
#let stub(port-id, side, name: none, vertical: false, length: 1em, name-offset: 0) = { #let stub(port-id, side, name: none, vertical: false, length: none, name-offset: 0, directed: false) = {
let length = if length != none { length } else if directed { 1.5em } else { 1em }
let end-offset = ( let end-offset = (
north: (0, length), north: (0, length),
east: (length, 0), east: (length, 0),
@@ -378,9 +284,15 @@
west: (-length, name-offset) west: (-length, name-offset)
).at(side) ).at(side)
let mark = (:)
if directed {
mark = (end: ">", fill: black)
}
draw.line( draw.line(
(rel: end-offset, to: port-id),
port-id, port-id,
(rel: end-offset, to: port-id) mark: mark
) )
if name != none { if name != none {
let text-anchor = if vertical { let text-anchor = if vertical {
@@ -399,4 +311,4 @@
name name
) )
} }
} }
+3 -3
View File
@@ -1,7 +1,7 @@
[package] [package]
name = "circuiteria" name = "circuiteria"
version = "0.2.1" version = "0.2.0"
compiler = "0.13.1" compiler = "0.13.0"
repository = "https://git.kb28.ch/HEL/circuiteria" repository = "https://git.kb28.ch/HEL/circuiteria"
entrypoint = "src/lib.typ" entrypoint = "src/lib.typ"
authors = [ authors = [
@@ -9,6 +9,6 @@ authors = [
] ]
categories = [ "visualization" ] categories = [ "visualization" ]
license = "Apache-2.0" license = "Apache-2.0"
description = "Drawing block circuits made easy, using CeTZ" description = "Drawing block circuits with Typst made easy, using CeTZ"
keywords = [ "circuit", "block", "draw" ] keywords = [ "circuit", "block", "draw" ]
exclude = [ "gallery", "justfile", "doc" ] exclude = [ "gallery", "justfile", "doc" ]