Parser and renderer for .engraving copperplate/intaglio font files.
This crate provides tools for defining fonts in the engraving tradition: copperplate, steel engraving, drypoint, and other intaglio printmaking techniques where a burin is pushed through metal to create incised lines.
- Engraving: Burin pushed through ductile metal (copper, steel, zinc)
- Lapidary: Chisel struck into brittle stone (marble, granite)
Both are subtractive mark-making, but the techniques and tools differ. This crate focuses on the pushed technique with pressure-varying strokes.
The .engraving format uses a verbose, self-documenting syntax:
.font-begin Copperplate
units-per-em 1000
ascender 800
descender -200
.plate-begin copper
material Copper
hardness 35
.plate-end
.burin-begin fine
profile Lozenge
angle 45
face-width 20
.burin-end
.glyph-begin A U+0041
advance-width 600
engrave fine 50,0◊20 ⏤ 300,720◊80 ⏤ 550,0◊20
.glyph-end
.font-end
| Symbol | Unicode | Name | Description |
|---|---|---|---|
◊ |
U+25CA | LOZENGE | Pressure at point (0-100, affects line width) |
Example: 300,720◊80 = point at (300,720) with pressure 80
| Symbol | Unicode | Name | Description |
|---|---|---|---|
⏤ |
U+23E4 | STRAIGHTNESS | Straight line segment |
⌒ |
U+2312 | ARC | Smooth curve |
∠ |
U+2220 | ANGLE | Corner/sharp turn |
↻ |
U+21BB | CLOCKWISE | Close path |
⤴ |
U+2934 | ARROW CURVING UPWARDS | Flick exit (lift-off) |
| Profile | Description | Use |
|---|---|---|
Lozenge |
Diamond-shaped with angle | Standard copperplate |
Square |
Square cross-section | Bold lines |
Round |
Circular cross-section | Stippling |
Flat |
Wide flat edge | Broad strokes |
Spitsticker |
Sharp fine point | Detail work |
Onglette |
Angled flat | Calligraphic effects |
| Material | Hardness | Use |
|---|---|---|
Copper |
35 | Traditional copperplate |
Steel |
65 | Fine detail, longer runs |
Zinc |
25 | Softer, easier cutting |
Silver |
28 | Precious metalwork |
Gold |
24 | Precious metalwork |
Pressure values (0-100) control the line width:
- 0-20: Hairlines, delicate strokes
- 30-50: Medium weight
- 60-80: Bold strokes
- 80-100: Maximum width
The line width varies continuously along the stroke based on pressure, creating the characteristic swelling/thinning of engraved lines.
The burr keyword after a stroke enables burr rendering:
engrave fine 0,0◊30 ⏤ 200,0◊80 burr
In drypoint engraving, the burin throws up a ridge of metal (burr) that holds extra ink, creating rich, velvety lines. This effect can be simulated in rendering.
The ⤙ symbol creates a flick exit where the burin lifts smoothly:
engrave fine 0,0◊60 ⏤ 200,0◊60 ⤴
This creates the tapered end characteristic of calligraphic strokes.
use lingenic_compose_engraving::{parse, render::RenderOptions};
use lingenic_compose_engraving::render::render_glyph_to_svg;
let source = r#"
.font-begin Script
units-per-em 1000
ascender 800
descender -200
.burin-begin main
profile Lozenge
angle 45
face-width 25
.burin-end
.glyph-begin l U+006C
advance-width 250
engrave main 125,0◊30 ⏤ 125,720◊30
.glyph-end
.font-end
"#;
let font = parse(source).unwrap();
let glyph = font.get_glyph(0x006C).unwrap();
let svg = render_glyph_to_svg(&font, glyph, &RenderOptions::default());The renderer creates SVG with variable-width strokes:
use lingenic_compose_engraving::render::{RenderOptions, render_glyph_to_svg};
// Classic copperplate look
let options = RenderOptions::copperplate();
// Drypoint with burr effect
let options = RenderOptions::drypoint();
// Custom ink color
let options = RenderOptions::copperplate()
.with_ink_color(ColorRgb::rgb(60, 20, 10));Apache-2.0
「」 Lingenic Compose Engraving is a component of the 「」 Lingenic Compose typesetting system.